diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index 3be5dbfae47..fe0b086b630 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -20,6 +20,7 @@ import ( "github.com/sirupsen/logrus" "github.com/urfave/cli" "k8s.io/apimachinery/pkg/util/net" + "k8s.io/kubernetes/pkg/volume" _ "github.com/mattn/go-sqlite3" // ensure we have sqlite ) @@ -70,6 +71,9 @@ func run(app *cli.Context, cfg *cmds.Server) error { return fmt.Errorf("must run as root unless --disable-agent is specified") } + // If running agent in server, set this so that CSI initializes properly + volume.WaitForValidHost = !cfg.DisableAgent + serverConfig := server.Config{} serverConfig.ControlConfig.ClusterSecret = cfg.ClusterSecret serverConfig.ControlConfig.DataDir = cfg.DataDir diff --git a/pkg/daemons/agent/agent.go b/pkg/daemons/agent/agent.go index 3c9be58dcb7..7d29118653c 100644 --- a/pkg/daemons/agent/agent.go +++ b/pkg/daemons/agent/agent.go @@ -12,7 +12,7 @@ import ( "github.com/rancher/k3s/pkg/daemons/config" "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/util/net" - "k8s.io/apiserver/pkg/util/logs" + "k8s.io/component-base/logs" app2 "k8s.io/kubernetes/cmd/kube-proxy/app" "k8s.io/kubernetes/cmd/kubelet/app" _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration @@ -82,6 +82,7 @@ func kubelet(cfg *config.Agent) { if cfg.RuntimeSocket != "" { args = append(args, "--container-runtime", "remote") args = append(args, "--container-runtime-endpoint", cfg.RuntimeSocket) + args = append(args, "--serialize-image-pulls=false") } if cfg.ListenAddress != "" { args = append(args, "--address", cfg.ListenAddress) diff --git a/pkg/daemons/control/server.go b/pkg/daemons/control/server.go index 52f7437cddd..83dae6ea3f7 100644 --- a/pkg/daemons/control/server.go +++ b/pkg/daemons/control/server.go @@ -24,9 +24,9 @@ import ( "time" "github.com/rancher/k3s/pkg/daemons/config" + certutil "github.com/rancher/norman/pkg/cert" "github.com/sirupsen/logrus" "k8s.io/apiserver/pkg/authentication/authenticator" - certutil "k8s.io/client-go/util/cert" "k8s.io/kubernetes/cmd/kube-apiserver/app" cmapp "k8s.io/kubernetes/cmd/kube-controller-manager/app" sapp "k8s.io/kubernetes/cmd/kube-scheduler/app" diff --git a/pkg/kubectl/main.go b/pkg/kubectl/main.go index 2171c2db2e9..09bec12e44e 100644 --- a/pkg/kubectl/main.go +++ b/pkg/kubectl/main.go @@ -9,8 +9,8 @@ import ( "github.com/rancher/k3s/pkg/server" "github.com/spf13/pflag" - utilflag "k8s.io/apiserver/pkg/util/flag" - "k8s.io/apiserver/pkg/util/logs" + utilflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/logs" "k8s.io/kubernetes/pkg/kubectl/cmd" ) diff --git a/pkg/openapi/zz_generated_bindata.go b/pkg/openapi/zz_generated_bindata.go index e8f7f093251..27cba59bae3 100644 --- a/pkg/openapi/zz_generated_bindata.go +++ b/pkg/openapi/zz_generated_bindata.go @@ -69,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _openapiJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xfd\x73\xdb\x38\xba\xef\xf9\xfb\xfc\x15\xa8\xec\x56\x79\xe6\x8e\x2d\x77\xe6\x9e\xaa\xd9\xed\xd4\xa9\x2d\x4f\x92\x9e\x49\xdd\xdc\x8e\x4f\x9c\xe9\xa9\xad\xcd\xad\x33\x10\x09\x49\xb8\xa1\x00\x36\x41\xda\xf1\x99\xea\xff\x7d\x0b\x6f\x24\x45\x51\x12\x25\xf1\x55\xfe\xfe\xd2\x4e\xdb\x12\x88\x37\xe2\x01\x3e\xdf\xe7\x79\xf0\xaf\xdf\x11\xf2\x4a\x3d\xd1\xe5\x92\x25\xaf\x7e\x24\xaf\xfe\x34\xfb\xe1\xd5\xb5\xfe\x1d\x17\x0b\xf9\xea\x47\xa2\xff\x4e\x5e\xa5\x3c\x8d\x98\xfe\xf3\xff\xc8\xe6\x2c\x11\x2c\x65\xca\x7c\x8a\xbc\x7a\x64\x89\xe2\x52\xe8\xbf\x3d\xfe\x30\xfb\x61\xf6\xc3\xab\xdf\x11\xf2\x9b\x29\x21\xa6\xe9\x4a\xe5\x45\xdc\xd2\x98\xdf\xfa\xff\x23\xaf\x96\x2c\xcd\xff\x87\xbc\x0a\x99\x0a\x12\x1e\xa7\xae\xa4\x25\x4b\x09\x7d\xa4\x3c\xa2\xf3\x88\x91\xbb\xfb\x0f\xc4\x3d\xc6\x3d\x95\x90\x57\x81\x14\x2a\x5b\x33\x5d\xfe\xff\x67\x7f\x45\x5e\xd1\x38\x8e\x78\x40\x75\x29\xb7\xff\x5b\x49\xe1\x3f\xbc\xf9\x97\x67\xba\x8e\xea\xff\xf2\x28\xc2\xd9\xb7\xbc\x81\xb3\x38\x91\xa9\x9c\x67\x8b\x57\xf6\xb3\xff\xcb\x3f\x3a\x4e\x64\x98\x05\x83\x3c\x5a\x05\x2b\x56\x69\xf4\x2a\x4d\x63\x55\xfd\x5c\x4a\x97\x1b\x1f\x0a\x64\xc2\xaa\x9f\x91\x31\x4b\xcc\xc3\x3f\x84\xae\xcf\xdf\xca\x84\xdd\xdd\x7f\xf8\xa5\xda\xd7\x09\x53\xb1\x14\x8a\xa9\x62\xc4\xc8\xab\x3f\xfd\xf0\x43\xe9\x7f\xb7\x86\xf0\xd3\xff\xc8\x1b\xea\xaa\x4d\xcb\x1f\x27\xaf\xfe\xcf\x84\x2d\xf4\x07\xff\x8f\xdb\x90\x2d\xb8\xe0\xfa\x8b\xea\x96\xcb\xd9\xb7\xff\x4b\xcd\x68\xcc\xd7\x34\x58\x71\xc1\x92\xe7\x59\xfc\x6d\xa9\x7f\xa1\x66\x6b\x96\xd2\xd9\xe3\xeb\x59\xb9\x8e\xbe\xc0\xdf\xdc\x3f\x7e\xcb\xbb\xf7\xdf\x7e\x78\xbd\xaf\x82\x7f\x17\x34\x4b\x57\x32\xe1\xff\xc5\x42\x5f\x8a\x2b\xc4\xfe\x30\xff\xb5\xc5\xd9\xc9\xfb\xf8\xfa\xb4\xf9\x9b\x30\x25\xb3\x24\x60\x98\xbc\xa7\x4f\xde\xff\x7c\x7c\xdd\x6c\xfe\xfe\xf2\xfa\xee\xfe\xc3\xe7\xad\x1e\x1f\xe1\x14\xf6\x95\xfc\xc8\x55\xda\xf3\x34\x0e\xe4\x3a\x96\x82\x89\x54\xa5\x34\xcd\xca\xbd\xb2\x7f\x5e\x47\x5c\xa5\x44\xce\xff\x37\x0b\x52\x45\xe4\x82\x7c\xe3\x22\x24\x6f\x7d\x61\x0f\xa6\xb0\xbd\x93\xfc\xbf\xdd\xfe\xb7\x21\x27\x64\xed\x87\xf5\x03\xde\xa8\x34\x61\x74\xfd\xef\x4f\x34\x0d\x56\x47\x95\xb9\xf9\xcd\x5e\x67\xbc\x1e\x0d\x3b\xe5\x77\x0d\xc1\x20\xb3\x7e\xa6\x6b\xaf\xe7\x78\xa5\x56\xdd\xcd\x73\xdf\xdc\xef\x37\xc5\x00\xdd\xd0\xa0\x3c\x6b\x5f\xd5\x7e\x66\x99\xc8\x2c\xbe\x71\x7b\x8b\x1b\x3d\x9b\xcb\x1d\x65\xfe\xaa\x0b\x28\x26\x84\xfb\xc8\xab\x1d\x1d\xbe\xb9\x1d\xf2\xe3\xe7\xde\x43\xfb\x99\x57\x31\x4d\xe8\x9a\xa5\x2c\x29\x8d\x78\xfe\xc8\x4c\xf0\x5f\x33\xf6\x21\x65\x6b\xfd\xd7\x34\xc9\x58\x5e\x72\xfa\x1c\x9b\x1d\x98\x4a\x13\x2e\x96\xc5\x13\x2b\xfd\xf4\x65\xc5\x48\x20\x45\xca\x45\xc6\x88\x34\xbf\x26\x6a\x25\xb3\x28\x24\x73\x46\x14\x4b\xc9\xd3\x8a\x09\x92\xb0\x34\xe1\xec\x91\x8b\x25\x59\xcb\xc4\xd8\xa8\x2c\x4a\x15\x59\x24\x72\x4d\xd2\x95\xfe\x64\xf2\xc8\x92\x19\x79\xe0\x22\x60\x24\x5d\x71\x45\x1e\x69\x94\x31\xc2\x95\xfb\x1b\x31\xc3\xcf\xc2\x6b\x12\x44\x5c\xaf\x25\x64\x4d\x9f\x89\x14\xd1\x33\xc9\x14\x33\x85\xe4\x15\xb1\x5f\x35\x85\x53\x12\x27\xec\x91\xcb\x4c\x91\x5f\x33\x96\x3c\xbb\x47\x93\x27\x9e\xae\x08\x0f\x99\x48\x79\x40\x23\xf7\xb7\xa2\xb3\xc8\xef\xd9\xf7\x80\xc5\x29\x59\xc8\xc4\x94\x6d\x8b\x94\x8b\xfc\x21\x7f\x20\x54\x84\xa5\xba\x9b\xea\x24\x4c\x2f\x56\x84\x56\xab\xc2\x53\x12\x4a\xa6\x88\x90\x29\x49\x58\x20\x97\x82\xff\x17\x9b\x91\x0f\x0b\x5b\x40\xcc\x02\xbe\xe0\x2c\xdc\xfa\x9a\xfe\x06\x89\xa4\x58\xb2\x44\xff\x8a\x87\xba\x3b\xd3\x95\xee\x8d\x8c\x91\x54\x12\xf6\x3d\xe6\xf6\x25\x25\xbf\x5f\x32\xc1\x12\x1a\x45\xcf\x64\xc1\x1f\xcd\x5f\x17\x7c\x91\x32\x26\xc8\x9a\x8b\x2c\x65\xea\x0f\x44\x26\xb6\x6e\x0b\xbe\xcc\xdc\xd7\x82\x15\x15\x4b\x46\xa4\x28\xb5\xe5\xba\xdc\xae\x27\x1e\x45\xc4\xbe\xda\xa1\xed\x36\x4a\xfe\xed\xf5\x0f\xc4\x1b\x94\xf7\xba\x0a\x2c\x24\x2c\x49\x74\x5f\xc9\xa5\xad\xa0\xfb\x64\xde\xa2\x54\x7e\x63\x22\x6f\xb2\x1d\x43\x22\x18\x0b\x95\xfd\x94\xe2\x2a\xd5\xbf\xd2\xaf\xcf\xb5\xee\xb0\x75\xa6\x74\x67\xa9\x94\x26\xa9\xfe\x0e\x4f\xcc\xdf\x4c\xc1\x32\x4b\x37\x47\x7c\xc1\x59\x14\xce\xc8\x27\xfd\xe8\x27\xae\xd8\x75\xf9\x29\x7a\x64\x14\x13\x21\xa1\x42\x9a\xba\x99\x72\x12\xf6\x6b\xc6\x5c\x79\xe6\xd3\xa6\x86\x7a\x78\x18\x7f\x64\x61\xf1\x7b\xdd\x58\xd3\xb8\x83\xdd\x62\xca\x35\x15\xd6\x33\x3d\x9f\xdc\x82\x7d\x4f\xc9\x37\xf6\x7c\x4d\xe6\x59\x5a\xfc\x3a\xa2\xa9\x7e\xbe\x12\x34\x56\x2b\x99\x5e\x93\xa7\x15\x0f\x56\x7a\xd0\xb9\x28\x75\x48\xfe\xf9\x7c\x22\xbb\xea\xdb\x57\xe8\x26\xb7\x90\xe9\x8a\xa6\x84\x26\x8c\x04\x09\xa3\xa9\x7e\x53\xd6\x32\x34\xf3\xea\x5a\x0f\x7c\xc8\x22\x96\xb2\x90\xd0\x45\xca\xec\x9c\x5e\xf0\x44\xa5\xd5\xce\x88\x22\xfd\xe6\x72\x11\x44\x59\xc8\x42\xc2\xed\xbc\xf0\x4b\xfb\x35\xa1\xca\x4c\x48\xfd\xd3\x0e\xca\x37\xf6\xac\xcc\x63\x8b\x82\xbf\xbe\xf2\x4d\xfe\xfa\x6a\xf6\x55\x7c\x15\x5f\xf4\x0b\x6d\xc6\xc8\xce\xe9\x94\xa8\x2c\x8e\x65\xa2\xeb\x63\x16\x08\x63\xcf\xf4\xdf\xf4\x22\x34\x23\x6f\x4b\xaf\xb8\x9d\x00\xd4\x7d\xa4\xd4\x7b\xb6\x13\xcc\x1c\x74\xfb\x73\xf7\xda\x24\x2c\xcd\x12\xc1\x42\x32\x7f\x2e\x8f\x98\x7e\x5f\xf5\xa3\xd7\x5c\x29\x42\xc5\xb3\xeb\x1e\x6b\x70\xd5\xac\x58\xe3\x04\x5d\x9b\xb5\xcf\xcf\xae\xe2\x2f\xdc\x2c\x7a\x66\xb1\x78\xb5\x69\x0d\x5a\x5c\x53\xef\x88\x62\x11\x0b\x52\xf3\x36\x99\x37\x20\xe1\x81\x9d\xef\x76\x47\xb4\x28\x5a\xe8\xc7\xde\xb6\x94\x27\xb6\x93\xd5\x8c\xbc\x63\x0b\x6a\xe6\x87\x5e\x24\x1e\x59\xf2\x9c\xae\xb8\x58\xd6\x34\xd2\x7c\xe1\xc1\x3d\xb0\xed\x96\xce\xa5\x8c\x18\x15\x3b\x9b\xaa\x57\x03\xfd\x3d\xbd\xf2\xa6\xdc\xac\x5d\xc6\xc4\xd3\x48\x1b\xde\xe2\x28\x63\xe6\xd7\xae\x39\x59\xd3\x28\xf7\xd1\xbf\x8b\x52\x69\x53\x1a\xc5\x88\xce\x59\x74\xcc\x28\x9a\x2f\x74\x35\x8a\x5c\xa4\x6c\xc9\x92\x9d\x4d\x8d\xf8\x9a\xa7\xfa\xe5\xa5\x64\x4d\xbf\xf3\x75\xb6\x26\x22\x5b\xcf\x59\x62\x1b\xe9\x36\x85\xb6\x1b\x74\x8b\x8d\x51\x75\xab\x65\x40\xa3\xc8\x58\x05\xb3\x2f\xe0\xba\x1a\x84\x7d\x37\x36\xa0\xba\xd8\xea\xdd\x84\xfe\xdd\x3f\xfd\x7b\xf9\x4f\xb7\xa4\x38\xdb\x65\xca\xd3\x27\x9e\x90\xa6\x54\x3f\x8d\xba\xf5\xc0\x2c\x8c\x01\x15\x7a\x61\xcb\x54\x79\x69\x57\x74\xcd\xfc\x8c\x73\x7b\x00\x5b\x4b\xbd\x5b\x61\xc5\xe2\xad\x1f\x6d\xdb\xa2\x47\x63\x46\x1e\x58\x6a\x96\x78\xdd\x08\xdd\x76\x6b\xfb\x6d\xdb\xd8\x93\x59\x05\xa9\x9f\xa4\x66\x61\xd5\xeb\xee\x5a\x66\xc2\x14\x63\x5b\xf9\xfb\x2c\xd6\x0f\xfb\x2f\x96\x48\xfb\x9b\x3f\xf8\x89\xcd\x1e\xf5\xba\x4f\x8d\x7d\xf1\xdf\xf6\x53\x44\xbf\x08\x0b\x1e\xa5\x4c\x9b\x5c\x6d\x06\xf5\xaa\xe6\x77\x44\x6e\xe7\xb5\xb1\x29\x8a\x13\xa6\x98\xde\x54\xc9\x45\x8d\xc9\xd4\x35\x08\xf5\x8e\x67\xcd\x05\xcb\x37\x17\x1b\x7b\x34\xb3\xb4\x7b\xba\xa0\x9b\xae\x47\xc4\x2e\xcd\xc1\x4a\x4a\xc5\xcc\xa2\x9a\x4a\xbf\xa4\xbb\xb1\xd0\xdd\x42\x93\x65\xb6\x36\x6d\x31\x36\xd2\x34\xc8\x74\x92\x6e\x9b\xab\xcf\x06\xb8\xb0\xbd\xfb\x61\x41\xf2\x29\x55\xec\x8d\xfc\x76\xab\xd2\x00\xae\x08\x5b\xc7\xe9\xf3\xe6\xbe\x90\x2a\x7d\x18\xb4\x23\x2f\xe4\xde\x06\xed\xb3\x4d\x7c\x51\xb1\x4c\xd6\x98\xe5\xf3\x72\x99\xd1\x84\x8a\x94\x31\x67\x7d\x75\xfd\xfc\x48\xe5\x6f\xb7\x31\x70\x99\xd2\xf3\x25\xaf\x7b\x6e\x67\xf3\x1d\x68\x2a\x09\x57\x2a\xb3\xb3\x4a\x7f\x38\x62\xc5\x1b\x92\x6f\x7a\xfc\x84\xbb\xb1\xcf\xe3\xea\x5a\x37\xcf\x3f\xf2\x38\xc3\xef\x6d\xbe\xde\x70\x28\x95\xb1\xb0\xd6\xfa\x6b\x43\xa9\xb2\xb9\xd2\x1f\x16\x69\xde\x82\xd0\x7f\x5d\xb9\x1e\xd4\x63\x25\xd7\x2c\xe5\x6b\xa6\xdb\xbe\x60\x89\x9e\xa1\xfa\x2d\xac\x6c\xf0\x8a\xfd\x8e\x1e\x51\x26\x54\x96\xf8\xee\xa3\x7e\xc7\xe6\x1a\xe7\x7a\xcd\x36\xd9\xbc\x98\x66\x6f\x46\xd4\x9a\x46\x11\x4b\x48\xb0\xca\xc4\x37\x83\x06\x28\xd1\xab\x23\x89\x68\xb2\xf4\x03\x6d\xde\x78\x5b\xbc\x6e\xb4\xde\x02\x32\x33\xf1\x62\xa9\x14\xd7\x13\xce\x75\x9b\x99\x70\xe5\xf7\x2b\x8b\x43\xdd\x8d\x24\xcc\x12\x3b\x1c\xe6\x39\x2c\xb4\xe3\x61\x4e\x03\x6e\xbf\xe1\xe6\xb0\xfd\xb2\xad\xf5\x13\x55\xee\x9d\x4b\x89\x9b\x11\xba\x4f\xb6\x37\x5c\xf6\x18\x42\x95\x1e\xe0\x20\x8b\xcc\x13\x79\x31\x6d\xea\x16\x79\xdd\x0f\x3d\x9b\xb1\x0f\x0b\x72\xa5\xbf\x77\x65\xd6\x63\xbb\x3e\xc9\x2c\x8d\x33\x33\x3e\x71\xc2\xd2\xf4\x99\xc4\x89\x36\x11\x75\x55\xb6\x1f\xe8\xb9\xce\xff\xd0\x15\x2d\x16\x0e\xb7\x39\xb7\x2f\xb2\x7e\x9b\xae\xf5\x42\xf9\xa4\xdc\xd1\xc7\xcd\x3d\x19\x04\x59\x92\xbf\x23\x34\xb5\x5b\x12\x3d\x30\x49\x79\xb8\x69\xbe\x29\xd9\xb4\xce\xbe\xac\x7c\x7f\x3a\x67\x4b\x2e\x84\x9e\x3f\x72\x41\x56\x5c\xa5\x32\x79\x9e\x91\x4a\xd5\xb4\x21\xd4\xd3\xe1\x47\x72\xa3\xd7\x9a\x4c\x28\x96\x96\x3a\xda\x4d\x92\xd2\xac\xb0\xe5\x27\x6c\x2d\x53\x46\x74\x99\x74\xc9\xc8\x9c\x6a\xa3\x26\x05\xf9\x35\x93\x49\xb6\xbe\x49\x18\x0d\xc9\x22\xa2\xcb\x37\xb6\x58\x9e\x5e\x29\xf2\x83\x2b\xf7\x89\x11\xc5\xd7\x71\x94\x1b\xac\x27\x33\x6b\x19\x09\xb2\x24\x61\x22\x8d\x9e\xc9\x8a\x3e\xea\x35\x80\x04\x34\x58\x31\xb3\xc0\xe4\xeb\x9c\x2b\xd1\x98\x62\x49\x84\x14\xc6\x7e\xd5\x56\x99\xa6\x24\x62\x7a\x93\x4e\x75\xaf\x30\xb5\xd2\xff\x58\xf2\x47\x7d\xc6\x7a\xac\x99\x2a\x95\xbd\x7c\xdf\x9b\x98\x2f\x7c\xcd\xf4\x0a\xeb\x0f\xfc\x7a\x58\x6e\x8b\x39\xe3\x56\x39\xf3\x0a\x9a\x93\x8f\x5e\x1d\xec\x09\xda\x1b\x56\x33\xb3\x12\xb6\xa4\x49\x18\x31\x65\x97\x25\xf1\x4c\x68\x90\xf2\x47\x9e\x3e\xeb\xa5\x98\x0b\xff\x7f\x35\x1d\x90\xda\x1a\x3c\xb0\x40\x8a\x50\xf5\xbd\x15\xff\x87\x3d\x5e\xc9\xa4\x78\x2d\xa4\x6d\xa7\xf9\xdc\x7c\x73\x3b\x2e\x42\x3f\x7d\xd2\x15\x5b\xdb\x35\xde\xa2\x49\xd3\xec\x30\xbc\x76\xab\xe8\xb5\xfb\xec\x5a\x3e\x9a\x8d\x42\xe9\xc0\x45\x1e\xcc\x7b\xf0\x5c\x3d\xc5\xd5\x74\x4d\x05\x94\xd6\xf4\x88\xf9\xf1\xbf\x9a\xc0\xe7\xdb\x7f\xe9\x52\x7f\x6b\xc8\xa0\xcd\xbb\xb4\x09\x69\x26\x44\xa0\x7b\x05\xc4\xba\xab\x26\x04\x88\x07\x81\xc3\x7a\xae\xbd\x14\x36\xac\x5f\x33\xbf\x38\xee\xac\xa5\x7f\xc3\xcd\xcf\xca\x0b\x1e\xd3\xb4\xf4\xd2\xeb\xfd\x26\x4f\x58\xe8\x6a\x33\xe1\x1d\xcf\x9e\xb5\x4a\x2c\xf8\x72\x4d\xe3\xe3\x14\xb2\xc4\xed\x6d\xb6\xa5\x32\x5d\xdc\xff\xa4\xf1\x98\x97\xa8\xcb\x15\xc9\x5c\xe7\xff\x24\x93\xbb\x28\xfa\x99\xae\x99\x8a\xe9\xe0\x22\x71\x69\x35\x74\xf5\xbb\x2c\xa1\xac\x32\xe3\x47\xb0\x0c\x42\x22\x83\x44\x06\x89\x0c\x12\x19\x24\xb2\xf6\xd6\x54\x48\x64\x90\xc8\x20\x91\x41\x22\x83\x44\x06\x89\x0c\x12\x19\x24\x32\x48\x64\x47\xd6\x19\x12\x19\x24\x32\x48\x64\x47\x6e\xc5\x2f\x55\x22\x63\x22\x8c\x25\x17\x69\x3b\xd4\xf9\x7d\x5e\x1a\xa8\x73\xef\xd4\x39\xef\xfc\x91\x52\xe7\xbc\x7e\x97\x44\x9d\xb7\x66\x3c\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x33\xa8\x73\x5b\x66\x0c\xd4\x19\xd4\x19\xd4\x19\xd4\x79\xba\xd4\x59\x6f\xa6\x5a\x42\xce\xba\x28\xe0\xe6\x01\x70\xb3\xee\xf8\xb1\xa2\x66\x5d\xb7\x8b\xc2\xcc\xe5\x59\x0e\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\x0c\xc4\xdc\x96\x19\x03\x62\x06\x62\x06\x62\x06\x62\x9e\x2c\x62\x36\x23\x96\x98\x16\xb5\xc2\x99\x3f\xea\xf2\x3e\xeb\xf2\x00\x9b\xfb\x87\xcd\x45\xef\x8f\x94\x38\x17\x15\xbc\x24\xec\xbc\x3d\xe9\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xc1\x9e\xdb\x32\x63\x60\xcf\x60\xcf\x60\xcf\x60\xcf\x93\x65\xcf\xa2\xa0\x93\x6d\xa0\xe7\x1c\x76\x82\x3c\xf7\x4f\x9e\xb7\x3b\xbf\x0e\x6f\x96\x80\xee\xee\xf7\x62\xa7\x31\x01\xe2\x04\xe2\x04\xe2\x04\xe2\xbc\x68\xc4\xb9\x87\x71\xd6\x59\xd7\x42\x32\x6b\x77\x69\xed\x85\x74\x1e\x42\x9d\x93\x69\x70\x53\x28\x78\x88\x0a\xb6\xd9\xe0\xea\xae\x1a\x6c\x10\x6c\x10\x6c\x10\x6c\x10\x6c\xb0\x1f\x36\xb8\x0b\x0e\xf6\x69\xd4\x80\xdb\x26\x84\xdb\x0e\xf3\xb6\x5e\xb7\x07\x83\x51\xb7\x83\xd8\xad\xcd\x6e\xa8\xb2\xb7\x49\xc0\xb7\x5d\xf4\xad\xbe\x63\x2a\x08\x67\x58\x07\xc0\x9c\x13\x5d\x92\xff\xdf\x16\xfc\x6a\xe4\xfe\x27\xd5\x1e\xd4\x69\xf7\x04\x84\x4e\x83\x6a\xf6\x0a\x1d\x6d\xd7\x9c\x88\x1d\xfd\x8b\x33\x97\xe1\xf3\xd6\x7b\x53\xf9\x65\xe5\x3a\xc5\xb6\xdf\x80\xdd\xb3\xbf\x83\x4d\x80\xdb\xdb\x5c\x13\x2e\x42\x3d\x9a\xde\xd8\x6f\x50\x08\x7f\x12\xd1\xbb\xe9\x39\x23\xb1\x9e\xc3\xfa\x18\x33\x23\x77\x82\x70\x61\x19\xa0\x4c\x48\x26\x72\x8c\x18\x92\x30\x79\xfe\x9c\x09\x12\xf2\x84\xe9\xa5\x9c\xe5\x6c\xca\x58\x3f\xbd\x13\x75\x70\xce\x2f\x3c\x0e\x85\x90\x45\x96\x98\x63\x4b\x9c\xc8\x80\x29\xe5\x36\x08\xa5\xd3\xd7\x8c\xfc\x62\x9e\x68\x8e\x83\x66\x8f\xa7\x77\x07\x77\x51\xf4\xa3\xd9\x10\x86\xc9\x33\x49\x32\x41\x54\x4a\xf5\xb2\xec\x77\xc1\xae\xb8\x92\x57\x51\x31\xea\xb6\xae\x93\x5c\x2f\xf7\xac\x95\x7f\xda\xbf\x56\xbe\xb5\xc7\x8b\x7e\x6b\xf4\xa7\x7d\x35\xba\x0b\x02\x16\xf7\x5c\xa5\xee\x0c\x8a\x59\xc8\xc7\x60\x50\xce\xf4\x27\x6f\xe0\x11\xf8\xa1\xc6\x79\x6f\xe3\xb8\x7f\x5d\x3e\x58\xe9\x13\xfd\xbc\x04\x44\xfd\x69\x38\x90\xeb\x38\x62\x86\xc4\xe4\xe5\x98\x05\x68\x9c\xee\x82\x03\xde\x76\x5b\x28\xa4\xf6\x4a\x6e\xf3\xef\xdf\x6e\xe7\x7a\x11\x17\xcb\x92\x6c\xda\x70\x33\xf1\x17\xfb\x45\x6c\x25\xf6\x6d\x25\xc2\x6a\x2f\x8d\x7e\x4b\xe1\x2b\xbc\xb5\xfa\x8d\xca\x94\xed\xac\xe5\x40\x86\xac\x49\x7d\x7a\x35\x63\x87\x2b\x34\x29\x23\x56\x79\x8d\x46\x10\x12\xf5\xe2\x77\xc2\xbb\x36\xc2\xfd\xc5\x14\xbc\xc8\x1d\x84\x6b\x8d\xb9\xed\x5f\x0f\xb9\x7e\x4b\x89\x0a\x64\xcc\xae\x89\xca\x02\xc3\x03\x0d\x66\x63\x74\x6d\x21\x52\x9c\x48\x03\xb6\xb7\x9b\x23\xb6\xb7\x86\xb6\x0d\x31\x4d\x4b\x7e\x43\x15\x43\xf3\x82\x36\x47\xd6\xc1\x64\x4d\xe3\x76\xbc\xca\xb6\xee\x4b\x1f\xe3\xa6\xa9\xf6\xc3\x97\xe4\x55\x16\x6e\x0f\x03\xfc\xcb\xe0\x5f\x06\xff\x32\xf8\x97\xc1\xbf\x0c\xfe\x65\xf0\x2f\xab\x36\x18\xfe\x65\xf0\x2f\x83\x7f\x19\xfc\xcb\xe0\x5f\x06\xff\x32\xf8\x97\xc1\xbf\x6c\x63\xc2\xc0\xbf\x0c\xfe\x65\x17\xea\x5f\x96\x73\xa2\x4b\xf2\x2f\xdb\x82\x5f\x2d\xfa\x97\x4d\x82\x6f\xf6\x8a\x1f\xeb\x45\xe1\xa3\x01\xe4\xf0\xb2\x70\x51\xe5\x9d\xef\x01\x3c\xcd\xe0\x69\xd6\x7c\xb6\xf4\x2c\xd0\x37\xab\x51\xaf\x12\x7d\x93\x2a\x4d\x4a\xa4\x3f\xc9\xb4\xd8\xa3\xe3\x6e\xe3\x62\xff\x4e\x02\x19\x45\x2c\xf0\x5b\x36\x18\x9a\xaa\xa1\xb1\xdd\x64\x0d\xcd\xdb\xbc\xaf\xa0\x79\x41\xf3\x82\xe6\x05\xcd\x0b\x9a\x17\x34\x2f\x68\x5e\xd0\xbc\xa0\x79\x41\xf3\x82\xe6\x05\xcd\x0b\x9a\x17\x34\x2f\x68\x5e\xd0\xbc\xa0\x79\x41\xf3\x32\x50\x72\x4d\x83\x15\x17\x2c\x79\x9e\xc5\xdf\x96\xfa\x17\x6a\xa6\xb7\x7c\xb3\xc7\xd7\xb3\x87\x94\xa6\x99\x1a\x84\x51\x5a\x13\x5b\xa0\xbf\x31\xf0\xca\x1e\x22\x63\x2f\xf5\xae\x0c\x84\xae\x0c\x12\xba\x62\x7f\xfd\x5b\xc3\x08\x16\x63\x92\x37\xb9\x23\x68\x7b\x95\xb6\xeb\x4e\xea\x25\xaa\xe4\xa0\xf9\x7b\xb0\x67\x53\x73\xbe\xfd\x6e\xce\x89\x73\xfd\x2f\x1a\xa4\x33\x42\xde\xeb\x9f\xfe\xf7\x6b\xca\x45\x4a\xb9\x50\x24\x88\x32\x95\xb2\xe4\xc6\x8d\x70\xe0\x78\x10\x89\xf8\x37\x46\xae\xf2\x16\x5d\xd5\x19\x34\x53\xf4\x30\x96\x3e\x6f\x6a\x8e\xff\xe7\xbe\xd1\x2c\x34\xad\x35\xed\xd4\x6f\x6a\xac\x7c\x9b\xdc\x01\x28\x53\xfa\x5c\x43\x85\x3d\x88\x5a\xfb\x5d\xdf\x3c\x5d\xc6\x04\x0c\xf6\x48\x54\x44\xbd\x94\x8c\xc1\x28\x67\x7b\x57\xb4\x38\xa2\x01\xc3\xa2\x76\x70\x51\x33\xfd\x04\x67\x15\x38\xab\xc0\x59\x65\x73\xb6\x8c\xd0\x59\xa5\x43\xcf\x90\x6c\x14\x6b\x7a\x43\xc7\x10\x78\x1d\xee\x77\x06\xe9\x69\x21\x6f\x19\x3a\xbc\x33\x2d\xf8\x64\x06\x7b\x0f\x7b\xc0\x2a\x3e\xe4\x2a\xde\x15\xd8\x2c\xb3\x4a\x2e\x88\xb2\x78\x91\xcc\xd9\x42\x5a\xd1\xc1\x2b\x03\x85\x2f\x91\x13\x63\x4c\x47\x64\xcc\x7a\x87\xcc\x19\x11\x52\xdc\x08\xb6\xa4\xa6\xbb\xdd\x83\x67\xe4\x4b\xee\xb1\x63\x55\xc2\x7c\xa0\xdd\x92\xc2\xd7\x6b\x16\x72\x9a\xb2\xe8\xd9\xb9\xa4\x94\x1d\x8e\x04\x8f\xae\x1d\x60\x34\x50\x9d\x2c\x13\xbd\xbb\x8c\x59\xc2\x65\x98\xd3\xd8\x62\xa3\xa9\xdb\x9d\xf7\x79\xa6\x74\x25\xcb\x38\x9e\xea\x6f\xfa\x06\xb9\x87\x2c\x4a\xc7\x14\xae\xbf\x60\xea\xb9\x66\x54\xd4\xd6\xb1\x66\xfc\x4c\x9d\xee\x4d\x95\x06\xa5\xb3\xef\x58\x9c\x30\xdd\xb9\xe1\x8f\x24\x8e\x18\x55\x2c\x57\x50\xef\x13\x19\xd3\xa5\x19\xe5\x7b\x19\xf1\xe0\xf9\xda\x76\xb4\xd5\x0c\x7d\x87\x85\x79\x01\x7a\x2a\xbc\x9e\xfd\x79\x46\x4a\x47\xde\x90\xc5\x4c\x84\x4c\xa4\x85\xe4\xcf\x88\x4c\xe2\x15\x15\xba\xdb\x1c\x4b\xbb\x5d\xd0\xc8\x3b\xfd\x7c\x7d\x65\xff\xfc\xf5\x15\x59\x70\x61\x30\x58\x92\x3f\x8c\x86\xa1\x11\xd7\x6e\x2d\xf7\x0d\x0b\x8d\xc4\x16\x7f\xa5\x8a\x2f\x59\x47\x9b\x19\x79\xcf\xcd\xbb\x59\xaa\xba\x4c\xb6\xdb\xe6\xb3\xcf\x18\xd5\x64\x9e\xa5\x76\xe5\x90\xe9\xaa\x6e\xf0\x6c\x0d\xdf\xf9\xb6\x75\x33\x74\x0d\x16\x43\xd3\x30\xbd\x06\xad\xe4\x13\x59\xd2\x64\x4e\x97\x1b\x8e\x98\xf9\x42\xc2\x92\x85\x4c\xd6\xba\xc7\x6b\x7b\xe3\x53\xa5\x3d\xbb\x3b\xc3\xbc\x9a\xfe\xbd\x8a\x6d\xcf\x71\x3d\xe7\x03\x1e\x16\x1e\x3b\xc6\x91\xc1\xf8\x50\xe5\x23\xa8\x58\xea\x19\xa8\x77\x55\x98\x95\x86\xca\x8b\xdc\x9e\x9e\x16\xe8\x63\xf3\x61\x33\x62\x9d\x7c\x8d\x70\x5e\x5e\x4d\xaf\x6c\x1b\xae\xc8\x8d\x9b\x5e\x9b\xd3\x4f\xbd\x21\x57\x7f\xa1\xc1\x37\xbd\x07\x12\xa1\xfe\x14\x8d\x22\xf9\x64\x3e\x54\xe9\x38\xeb\xbf\xe2\xde\xe2\xcd\x42\x7c\x0b\xe6\x79\x49\x6f\xc8\xd5\x4f\x32\x61\xa5\x62\x49\x40\x55\x40\x43\xdd\x7a\xd7\x3f\xc6\x3a\xd9\xf2\x94\x5d\xee\xb7\x0a\x5c\xe4\x65\xd4\x4d\xb7\xb8\x3a\x59\x27\xb0\x79\x3f\x47\xaf\xe8\xc7\xcd\x7b\xcc\x8a\xca\x18\xb6\xf7\xb1\x51\xc6\x76\xee\xee\x0b\xf5\xc3\xea\x71\x27\xd1\x9b\xea\x66\xfe\xc6\x3c\xf4\x8f\xbb\xf7\xf5\x6b\x96\x2c\xd9\xc1\x4f\xa9\x34\xa1\x29\x5b\xf2\xe0\x66\xeb\xf3\x2f\xe5\x84\x61\x9a\x3c\x5d\x52\xb4\xe7\xe5\xbc\x2f\xe5\xa8\xc2\x89\x63\x64\x27\x8e\x31\x98\x9e\xb1\x50\x9a\xb2\x67\xc1\x94\x05\xf1\x03\xca\xaa\x51\x8b\xdd\xe4\xab\xa9\x5f\x59\x0f\x1e\x87\x14\x0c\x95\xbb\x47\x95\x9b\x89\x30\x96\x5c\x9f\x91\xda\xc8\xcf\xf8\x3e\x2f\x6d\xc4\x24\xb1\xf6\xc3\x17\x95\x9f\x71\x7b\x18\x10\xab\x86\x58\x35\xc4\xaa\x21\x56\x0d\xb1\x6a\x88\x55\x43\xac\x5a\xb5\xc1\x88\x55\x43\xac\x1a\x62\xd5\x10\xab\x86\x58\x35\xc4\xaa\x21\x56\x0d\xb1\x6a\x1b\x13\x06\xb1\x6a\x88\x55\xbb\xac\x58\xb5\x1c\xc0\xe7\x9c\xe8\x92\xf2\x33\x6e\xc1\xaf\xd6\xf2\x33\x4e\x82\x6e\xf6\x0a\x1f\xeb\xb3\x33\x1e\x8d\x1f\x87\x77\x78\x2f\xaa\xbc\xf3\x2d\x80\x70\x09\xe1\xb2\xf9\x6c\xe9\xd9\xe1\xbd\x59\x8d\x7a\xcd\xce\xd8\xa4\x4a\x93\xca\xce\x78\x92\x61\x39\x29\x3b\x23\x0c\xcd\xb1\xd9\x19\xa1\x78\x41\xf1\x82\xe2\x05\xc5\x0b\x8a\x17\x14\x2f\x28\x5e\x50\xbc\xa0\x78\x41\xf1\x82\xe2\x05\xc5\x0b\x8a\x17\x14\x2f\x28\x5e\x50\xbc\xa0\x78\xbd\x68\xc5\x6b\xcc\xb1\x84\x9d\x65\x67\x3c\x4d\x08\x43\x76\x46\xc4\xad\x4c\x29\x6e\xe5\xec\xe4\x8c\x80\xed\x4d\x92\x33\x76\x02\xd8\x91\x9c\x11\xc9\x19\xc7\x2c\x22\xb6\x9f\x9c\xf1\x34\x9b\x7c\x7c\x72\x46\x2c\x6a\x0d\x93\x33\xc2\x57\x05\xbe\x2a\xf0\x55\x19\x9d\xaf\xca\x94\x92\x33\x76\xe9\x17\x82\x75\xbc\x59\x6a\xc6\x4e\x97\x71\xa4\x66\x7c\x79\x6b\x78\x57\x54\x13\xa9\x19\x91\x9a\x11\xa9\x19\x91\x9a\x11\xa9\x19\x91\x9a\x11\xa9\x19\xc7\x9f\x9a\xf1\x44\x11\xe5\x9c\xd4\x8c\xcd\xf6\xfc\x48\xcd\xd8\x6b\x6a\xc6\xe9\x70\x22\xa4\x66\x9c\xe6\x89\x63\x0c\xa6\x67\x2c\x8c\xa6\x83\xd4\x8c\x83\xa8\xe1\x47\xa4\x66\xac\xa9\x1f\x52\x33\xbe\x6c\x89\xfb\x91\xb5\x96\x97\x51\x17\x35\x66\x84\x58\xfb\xe1\xcb\xca\xc9\xb8\x31\x04\x88\x4e\x43\x74\x1a\xa2\xd3\x10\x9d\x86\xe8\x34\x44\xa7\x21\x3a\xad\xda\x60\x44\xa7\x21\x3a\x0d\xd1\x69\x88\x4e\x43\x74\x1a\xa2\xd3\x10\x9d\x86\xe8\xb4\x8d\x09\x83\xe8\x34\x44\xa7\x5d\x56\x74\x5a\x41\xdd\xf5\x26\xe9\xa2\x72\x31\x96\xa1\x57\x6b\x79\x18\xa9\x18\x3f\xd0\xec\x95\x37\xee\x48\xc3\x78\x0c\x71\x1c\x81\x5b\xbb\xa9\xee\xce\x89\x0f\x71\x12\xe2\x64\xb3\x99\xd2\xb7\x3b\xfb\xc1\xda\xf4\x9b\x76\xf1\x40\x75\xa6\x95\x72\xf1\x58\xfb\x71\x5a\xba\x45\x18\x93\x63\x52\x2d\x42\xc8\x82\x90\x05\x21\x0b\x42\x16\x84\x2c\x08\x59\x10\xb2\x20\x64\x41\xc8\x82\x90\x05\x21\x0b\x42\x16\x84\x2c\x08\x59\x10\xb2\x20\x64\x41\xc8\x7a\xa9\x42\xd6\x98\xe3\x02\xbb\x4b\xb3\x78\xb4\xc6\x85\x14\x8b\x88\x3f\x99\x4c\xfc\xc9\xf9\xf9\x15\x41\xd7\x0f\xe5\x56\x6c\x9b\xa8\x23\xaf\x22\xf2\x2a\x8e\x55\x25\xec\x20\xa7\xe2\xd1\x06\xf8\x84\x7c\x8a\x58\xc4\x1a\xe4\x52\x84\xc3\x09\x1c\x4e\xe0\x70\x32\xb4\xc3\xc9\xa4\x72\x27\x76\xe4\xe0\x01\x17\xc1\x66\x69\x13\xbb\x5a\xb1\x91\x32\xf1\xe5\x2d\xd9\x5d\x11\x4a\xa4\x4c\x44\xca\x44\xa4\x4c\x44\xca\x44\xa4\x4c\x44\xca\x44\xa4\x4c\x9c\x40\xca\xc4\xe3\x05\x91\xb3\xd2\x25\x1e\xdc\xe7\x23\x55\x62\xbf\xa9\x12\x27\x81\x81\x90\x26\x71\x9a\xa7\x8c\x31\x98\x9b\x31\xa0\x98\x2e\x52\x24\xf6\xad\x64\x1f\x93\x1e\x71\xb3\x6e\x48\x8d\xf8\xa2\xa5\x69\xe3\x8f\x94\x18\x47\x9d\x56\xf2\x23\x7e\xd4\xe5\x7d\xd6\xe5\x8d\x19\x18\xd6\x7e\xf8\xa2\x92\x24\xd6\x8c\x03\x02\xcc\x10\x60\x86\x00\x33\x04\x98\x21\xc0\x0c\x01\x66\x08\x30\xab\x36\x18\x01\x66\x08\x30\x43\x80\x19\x02\xcc\x10\x60\x86\x00\x33\x04\x98\x21\xc0\x6c\x63\xc2\x20\xc0\x0c\x01\x66\x97\x15\x60\x96\x83\xf7\x02\x14\x5d\x52\xba\xc4\x6d\xfc\xd5\x5e\xce\xc4\x89\x30\xce\x5e\x11\x64\x7d\xde\xc4\xe3\x21\xe4\xf0\xbe\xec\xa5\x3a\xef\x7c\x17\xa0\x5b\x42\xb7\x3c\x62\xba\xf4\xec\xd5\xde\xb0\x4a\xbd\xe6\x52\x6c\x54\xa7\x49\x25\x54\x3c\xcd\xc2\x9c\x94\x55\x11\xf6\xe6\xe8\xd4\x8a\x90\xbf\x20\x7f\x41\xfe\x82\xfc\x05\xf9\x0b\xf2\x17\xe4\x2f\xc8\x5f\x90\xbf\x20\x7f\x41\xfe\x82\xfc\x05\xf9\x0b\xf2\x17\xe4\x2f\xc8\x5f\x90\xbf\x5e\xb6\xfc\x35\xe6\x20\xc2\xce\xf2\x2b\x9e\x28\x8a\x21\xc9\x22\x22\x59\xa6\x15\xc9\x72\x76\xa6\x45\x10\xf7\x46\xe9\x16\xbb\xa1\xec\xc8\xb9\x88\x9c\x8b\xa3\x56\x13\xdb\x4f\xbc\x78\xa2\x65\x3e\x3e\xfb\x22\x16\xb6\xa6\x29\x18\xe1\xbb\x02\xdf\x15\xf8\xae\x8c\xd2\x77\x65\x4a\x69\x19\x3b\x75\x13\x81\x2b\x62\xcd\x7a\x5e\x9f\x9f\xb1\xdb\xe5\x1c\x49\x1a\x5f\xde\x52\xde\x15\xe6\x44\x92\x46\x24\x69\x44\x92\x46\x24\x69\x44\x92\x46\x24\x69\x44\x92\xc6\xf1\x27\x69\x3c\x55\x55\x39\x27\x53\x63\xc3\x6d\x3f\xd2\x35\xf6\x9a\xae\x71\x42\xc8\x08\x39\x1b\xa7\x79\xe8\x18\x83\xf5\x19\x0d\xac\xe9\x20\x71\xe3\x30\x12\xf9\x11\xd9\x1b\xeb\x2a\x88\x14\x8e\x2f\x5a\xf8\xf6\x4b\xa1\x48\x1f\x65\x94\xad\x59\x10\x51\xbe\x6e\x27\x9b\xe3\x7d\x5e\xf4\x2f\xa6\xe8\xb7\xba\xe8\x31\x93\xc6\xda\x0f\x5f\x54\x62\xc7\xfd\x43\x82\x20\x37\x04\xb9\x21\xc8\x0d\x41\x6e\x08\x72\x43\x90\x1b\x82\xdc\xaa\x0d\x46\x90\x1b\x82\xdc\x10\xe4\x86\x20\x37\x04\xb9\x21\xc8\x0d\x41\x6e\x08\x72\xdb\x98\x30\x08\x72\x43\x90\xdb\x65\x05\xb9\xe5\xa0\xbe\x96\x19\x5d\x52\xba\xc7\xbd\x50\xac\xc5\xcc\x8f\x93\xe3\xa1\xbd\xe2\xca\xfa\x24\x90\x67\x01\xcb\xe1\x7d\xea\xeb\xab\xbf\xf3\xbd\x81\x3c\x0a\x79\xf4\xb4\x99\xd3\xb3\xa7\xfd\xf1\xb5\xeb\x35\x61\xe4\xb1\xd5\x9b\x54\xee\xc8\xb3\xcd\xd5\x49\x69\x24\x61\xbc\xc8\x19\x19\x25\xa1\xbb\x41\x77\x83\xee\x06\xdd\x0d\xba\x1b\x74\x37\xe8\x6e\xd0\xdd\xa0\xbb\x41\x77\x83\xee\x06\xdd\x0d\xba\x5b\x65\xad\x87\xee\x06\xdd\x0d\xba\x1b\x74\xb7\x97\xab\xbb\x8d\x39\xf8\xb1\xb3\xe4\x92\xe7\x4b\x70\xc8\x33\x89\x70\x9b\xc9\x86\xdb\x9c\x9d\x72\x12\x74\x9e\x1c\x99\x7d\xb2\x73\x22\x8f\x44\x94\x48\x44\x39\x15\x95\xb2\xfd\x9c\x94\xe7\x1b\xf4\xe3\xd3\x53\x62\x11\x24\xc7\x67\xaa\x84\x83\x0d\x1c\x6c\xe0\x60\x33\x79\x07\x9b\x29\x65\xb5\xec\xcb\x81\x05\x1e\x97\xfb\x2d\x42\x7d\xae\xcb\xde\x0c\x02\xd2\x5e\xbe\x3c\x0b\xd0\x15\x80\x45\xda\x4b\xa4\xbd\x44\xda\x4b\xa4\xbd\x44\xda\x4b\xa4\xbd\x44\xda\xcb\xf1\xa7\xbd\x6c\x41\xef\x39\x27\x03\xe6\xf1\xe7\x02\x24\xc3\xec\x35\x19\xe6\x34\xa9\x14\xf2\x62\x4e\xf3\x54\x32\x06\xf3\x34\x46\xf2\xd3\x41\x8a\xcc\xc1\x85\xfe\x23\xb2\x65\x1e\xa8\x2b\x12\x67\x42\xc9\xdf\xa5\xe4\xdf\x2a\xbb\x61\x3b\x42\xd0\xb7\xdf\xf0\x73\x0f\xaa\x56\xcb\xd2\xbe\xdb\x41\x63\x8d\xbf\x0c\xe5\x17\x6f\x4b\xd7\x1a\x70\xe5\x85\x19\xeb\x9e\x1b\x4a\x30\x76\xdc\x50\x82\x5f\xaa\x12\x7c\x2c\x06\x6a\xcf\x6c\x00\x08\x0d\x0f\x84\x26\x62\xa2\x80\x85\x60\xa4\x2e\xc9\x0c\x00\x0b\x01\x0b\x8d\xa4\x69\x23\xc4\x42\x32\x6c\xe9\xf6\x14\x19\x8e\xf9\xdc\x5a\xfb\xe1\xcb\xba\x2b\xa5\x34\x00\xc8\xd0\x84\x0c\x4d\xc8\xd0\x84\x0c\x4d\xc8\xd0\x84\x0c\x4d\xc8\xd0\x54\x6d\x30\x32\x34\x21\x43\x13\x32\x34\x21\x43\x13\x32\x34\x21\x43\x13\x32\x34\x21\x43\xd3\xc6\x84\x41\x86\x26\x64\x68\xba\xac\x0c\x4d\x05\x93\x97\xe1\x45\xdd\x83\x22\xc3\xa3\x90\x7b\xc3\x5b\x4f\xc6\xcd\x31\x7b\xc5\x8c\x3b\xee\x38\x69\x0e\x1a\x47\xe0\x66\x23\x43\xe8\x95\xd0\x2b\xcf\x9b\x27\x7d\xbb\xd0\x1c\xa8\x4b\xbf\x77\x93\xec\xad\xcc\xb4\x6e\x22\x39\xce\x60\x9c\x76\xef\x08\xcc\x47\xf3\x5b\x46\xa0\x58\x41\xb1\x82\x62\x05\xc5\x0a\x8a\x15\x14\x2b\x28\x56\x50\xac\xa0\x58\x41\xb1\x82\x62\x05\xc5\x0a\x8a\x15\x14\x2b\x28\x56\x50\xac\xa0\x58\xbd\x4c\xc5\x6a\xcc\x99\xa5\xba\xbb\x53\xe4\x48\x39\x0b\x37\x88\x20\xc0\x64\x22\x01\x26\xe7\xdf\x17\x02\xaa\xbe\x3f\x85\x48\xbb\x24\x1d\x77\x81\xe0\x2e\x90\x71\xaa\x82\x1d\xe4\x7f\x39\xd2\xec\x9e\x70\xcf\x07\x16\xaf\x83\x19\x5d\xe0\x52\x52\x3b\xa1\xe0\x52\x02\x97\x92\x1e\xea\x32\xa9\x1c\x2c\x9d\x38\x71\xc0\xef\xaf\xc1\x4d\x1b\xdd\x2c\xd2\xb8\x57\xe3\xe5\xad\xd3\x5d\x41\x48\xdc\xab\x81\x7b\x35\x70\xaf\x06\xee\xd5\xc0\xbd\x1a\xb8\x57\x03\xf7\x6a\x4c\xe0\x5e\x8d\x63\x35\x8f\xb3\x6e\xd1\x38\xb0\xc3\x47\x8a\xc4\x7e\x53\x24\x4e\x80\xf9\x20\x15\xe2\x34\xcf\x17\x63\x30\x34\xc3\xb3\x97\x2e\x12\x1f\xf6\x2b\x52\x1f\x93\xe6\xb0\x5c\x33\x24\x35\x84\xe6\xec\x6e\xb6\xa0\x69\x4a\x4b\x9b\x86\xfd\xd2\x73\x20\x85\xd0\xc3\xf4\xd7\xf7\x5f\x72\xd7\x47\x73\xd4\x36\x85\xb4\x18\xdf\x55\xf3\xb1\x8e\x43\x79\x6d\xcb\xac\x11\xfe\x2b\x4b\x37\xec\xf0\x9d\xed\xa3\x4e\x97\xcb\xca\x64\x1a\x62\x41\x74\x7d\xd0\xfe\x92\x68\xfb\xcf\x33\xc7\x63\xd6\xc7\xfd\x31\xe9\x6e\x36\xde\x7f\x7a\xb8\xe8\xe9\x78\x2f\x15\xe6\xe3\x38\xe6\x63\xb7\xf6\xda\x47\x60\x52\xbd\xa7\xd6\x1b\x4b\x1b\x45\x66\x62\x03\x59\x90\xa5\x3e\x34\x72\xbd\xa6\xa2\x02\x3b\x4d\xb8\x43\xe9\xbb\xc6\xe8\x27\x06\xab\x9a\x3f\x49\x51\x29\xda\x84\x45\xc8\x3a\x83\x93\x7f\xac\x67\xb7\xb3\xca\x6e\x65\xc7\x20\x61\xeb\xd2\x66\xd3\x0e\x79\x39\x3e\xa4\x21\x4b\xec\x74\x4a\x32\x56\x3d\x59\x29\xf7\x57\x33\x03\xe7\xfa\x50\x63\x8f\x48\xac\xa0\xf5\x6e\x29\xb6\x3e\xce\xe5\x09\x6b\x22\x49\xb6\x3b\xc0\x16\xd9\xf6\xcc\x6b\xd0\x4c\x2e\x7c\x2b\xaf\xf3\x76\x58\x4f\x6c\x95\x52\x11\xd2\x24\x24\x5c\xe8\x3d\x5b\xe1\x80\xec\x5e\x21\xd7\x56\xae\x6a\x5a\x69\xf8\x78\x7d\x33\xb9\x18\xa0\x95\x52\x6f\x3a\x77\x0e\xa6\xb4\x5b\xd2\x36\x07\x53\x16\x02\x77\x5f\xcd\xfc\xf2\xe5\xff\xdd\xd5\x46\x4a\xf4\x5e\x3b\x17\x25\xa2\x48\x5a\x01\xa4\xb6\x81\x3e\xa2\x27\xa6\xfa\xa8\x4d\xd2\x55\x22\xb3\xe5\x2a\x0f\xbf\xb2\x2b\x69\x92\x09\x13\xd9\xa2\xac\x1b\xbb\x2e\x9e\xab\x52\xc9\x2e\x2c\xef\x49\x26\xdf\x58\x42\x84\x0c\x99\x67\xed\x5b\x65\x34\x9b\x39\x5d\x9e\x05\xe6\xba\xbb\xc4\xb2\x38\x0c\x34\xca\x09\xe4\xbe\x65\xa3\x58\xe0\x26\x90\x1e\x4e\x0f\xf4\x17\xd7\xcf\x63\xc7\x7b\x39\xa2\xf1\x15\xde\xda\x05\x56\x3a\x60\x58\x90\xb4\xb3\x96\x25\x81\xa2\x4f\xa7\xa2\x26\xf5\xe9\x35\x57\xcd\xe1\x0a\x4d\x2a\x5f\x4d\xe5\x35\x1a\xc1\x06\xfe\xc5\x73\xe8\x5d\x18\xba\x27\xd3\xff\x61\x41\x3e\xd4\xc4\xcf\x6c\xc4\x50\x5f\x97\xfd\x5c\x9c\x5e\x5e\x84\x29\xbb\x10\xe3\x40\xae\xe3\x88\x19\x29\x3c\x2f\xc7\x0c\xdc\x38\x23\x76\xca\x47\xa7\xad\xb7\x02\x27\x26\xc0\x5e\xb7\xc1\x63\x8f\xdc\x2f\xc8\xc7\xec\xf0\xfc\xd7\xb0\xc5\x6b\xbc\xc5\x7b\xef\x7b\x7a\xf4\x7b\x3c\xe7\x9f\xf3\xf8\x7a\xce\x52\xfa\x7a\x96\x57\x7c\x9c\x7b\xbd\xc6\xb5\xed\x79\xcf\x77\x4a\xbd\x7a\xd9\xfb\x1d\x5f\xb1\x11\xef\x01\xe3\x4d\x2f\xaa\x7c\x27\x58\x7d\xdb\x2a\x5b\x41\xd3\x74\xec\x07\xb1\x1f\x7c\x89\xfb\xc1\xed\x77\x03\x1b\x42\x6c\x08\xfd\x86\xf0\x3b\x0b\xce\xd4\xfe\x75\x11\x17\x23\xb5\x56\x95\xff\xf7\xba\x7f\x3a\xdd\xf1\x5c\xb2\xce\xaa\x7b\xaf\x3f\xd5\xff\xa2\x26\xe2\x96\xe6\x8f\x99\x38\xc4\x4c\xec\x76\x7b\xf8\xd6\x2a\xf9\x46\x73\x33\x7b\x2f\x93\x7e\xcb\xe9\xfb\x25\xd9\x7f\x46\x68\xb2\x7c\x24\x34\x49\xe8\xf3\x8c\xfc\x2c\x53\xff\x07\xbb\x41\xd1\x3b\x3d\xa2\x56\x2c\x8a\x6a\xd5\x7c\x53\x5a\xcf\x1b\x90\xb7\xf0\x62\xb0\x5e\x0c\xb5\x13\x0f\x1b\xb0\x3e\x7d\x18\x3e\x3b\x21\x7b\x53\xcc\xb7\x07\xa3\xa3\xc4\xfc\x51\xb9\x2c\xd4\xb7\x6a\xea\x2e\x0a\xf5\xad\x72\xfb\xe5\x96\x06\x6b\x5a\x2e\x09\x66\x57\xd3\x7c\xd4\xba\x3c\x2c\x44\x72\x79\x4c\x8a\xaa\x48\xe6\x54\xa1\xf5\x64\x2f\x29\xfb\x9e\xde\xc6\x11\xe5\x3b\xb0\xf1\x64\x81\xf2\x8e\xec\x55\x1f\xe5\xf2\xe2\x37\x7f\xc3\xe7\x2e\xea\xd3\xbb\x53\xbf\xdf\xf9\xc6\xc8\xad\x6c\x91\x5c\xaa\x23\x36\x44\xc3\xef\x85\x0e\xad\x7b\x3f\xc9\x3c\x58\x57\xaf\x06\x5b\x0b\x78\xb3\x35\x6d\x61\x4a\x69\xbb\xee\xd5\x6c\x09\x35\xe0\xc6\x67\xcd\x2d\x65\x72\x9f\x3f\xa7\x3e\x8b\x3b\x0d\xab\x77\x9e\xe4\x89\x14\x4c\x2a\x71\x6a\x70\xa1\x6f\xbb\xb5\x61\xce\xab\x6c\x4d\x9f\x0d\xe9\x0d\xb9\x8a\x23\xfa\x6c\x72\x43\x1b\xc0\xc8\x6c\xe4\x35\x89\xb8\x30\xbb\xc8\x48\x2e\x97\x5c\x2c\x6d\x7e\xd3\x52\x82\x75\x15\xf1\xe5\x2a\x8d\x9e\x6d\x52\x6f\xbd\x91\xf1\xbf\x30\xb9\x61\xf3\xcc\xeb\xc5\xc2\x6b\x52\xcb\xd6\x74\xae\xf9\xfd\x5f\x74\xab\x86\xdd\x28\x63\x77\x7c\xa1\x78\xb2\x93\x5d\xa2\x79\x09\xf2\x4b\x54\xfc\xfb\xe6\x6e\xdd\xb1\x2b\xe2\xf6\x62\xba\x6b\x7d\xf1\xe5\xf4\xbd\xc2\xdc\x91\x84\x45\x36\x83\x8a\xf1\x21\xad\xcf\xc8\xe2\xf2\x67\xdb\x8f\x98\x05\xa7\x30\x1b\x2b\xf9\xe4\xda\xb9\x99\x4c\x25\x4e\x58\xc0\x42\xa6\x8a\xcc\xeb\xd4\xec\x97\x9f\xa8\xb2\x77\xb0\x98\xac\xf8\xda\xb6\xe8\x6f\x13\xe5\x6e\x6a\xb2\x9b\x6a\x7b\x49\x8b\xdf\x91\xe6\xa9\xd8\xb7\xf3\xb5\xf8\x1c\x08\x59\x9a\x25\x36\x9f\xb7\x29\x6d\xfb\x9b\x9f\xfc\xd9\x5d\x2e\xec\xb3\x5c\xe6\x14\xb3\x70\xe9\xff\xff\xa2\xab\xe8\x73\x57\xe4\xc9\x59\x6a\x76\xef\xa5\x2f\x8f\xc3\x1e\xe8\x85\xba\x94\x9d\x9d\x89\xd0\xaf\x69\xa6\x2f\xdc\x20\x99\xce\xdb\xc8\x3c\x73\x6d\xff\x4e\x13\x66\x3e\x20\x8a\x22\x8c\x4b\x41\x39\xf1\x77\x3e\xa3\x7d\x6f\xd5\xf5\x5e\xcd\x49\x80\xf2\xe8\xa3\xae\xdd\x00\xa2\x9b\x75\xa3\xa7\x61\x48\xa8\x20\x9f\x7f\x7a\xfb\xdf\xff\xfb\x7f\xff\xbf\x75\x75\xdd\x3f\x7f\xa6\x42\x9a\x69\xa9\x52\xba\x8e\xfd\x0d\x01\x1b\x99\xed\x99\xbd\xca\xa0\x30\x83\xb9\x01\x6d\x74\x0a\xf2\x65\xef\x6f\xfc\x39\x87\xa1\x58\x26\xe9\x42\x26\x4f\x34\x09\xcf\x14\x50\x4a\x25\x5d\x0c\xbe\xae\xea\x28\xf7\xa5\xde\xba\xf4\x73\x4c\x67\x10\x5b\x77\xe2\x4f\xb6\x13\xfb\x53\x55\x2e\x71\x76\x6e\x89\x2b\x98\x9e\xc3\x4f\xcf\x5e\x53\x21\xec\xab\x2b\xce\x1f\x6d\x36\xed\xd0\xb6\xea\xa3\xbb\x0e\x4e\xaf\x33\xd6\xa6\xbb\xc5\xe6\xb3\xab\x41\xf9\xea\xa8\x7f\xb0\xf9\x83\x0c\xbe\xb1\xba\x86\x99\x02\xba\x33\xf7\x89\xfc\xfe\x7c\xae\xa1\xd7\x65\x5c\xcc\x22\xba\x65\xe2\x4d\x0f\x61\xf5\x3c\x75\xf5\xd4\xdd\x77\xca\xba\xb9\x2f\xe1\x7a\x6e\xd5\xff\x7e\xc9\x33\xf1\x3e\xc3\x4c\x1c\xc3\x4c\x3c\x71\x83\x79\x59\x73\x71\x6b\x6b\x89\xc9\x38\xc4\x64\x3c\x94\xd7\xdc\x4f\xc7\x77\xef\x3f\xbe\xff\xf2\xfe\x82\x27\xa4\xcd\xf7\x8d\x29\x39\xfc\x94\x94\xee\x2b\x07\xe7\xe4\xa7\xfb\x2f\x1f\x3e\xfd\xfc\x70\xc1\x93\xd2\xf5\x1e\x66\xe5\xf0\xb3\x72\xc5\x68\x78\x78\x4a\xfe\xed\xfd\xdd\xbb\x0b\x9e\x8f\x7f\x63\x34\xc4\x64\x1c\x7e\x32\x1e\x48\x60\x9c\xef\x21\xef\xbe\xbc\xfd\xdb\x05\x4f\x47\x93\x3b\x17\xf3\x71\x0c\xf3\xb1\x57\x28\x59\x5b\x4b\xe0\xc8\x1e\x9b\x76\x4f\xd3\x95\x77\xc7\xff\xfb\xe7\x8f\x44\xd7\x42\xaf\x2f\x99\x62\xb9\x47\xa6\x17\xe4\xed\x9a\xe3\x2f\x90\x37\x52\x49\xad\x8b\xc4\x46\x43\xba\xc0\x92\xb7\xff\xd2\xcf\x68\x7a\x7d\xe8\x0b\xa6\x93\xff\xe0\xe9\xea\xbe\x34\x1c\x58\x48\x41\x29\x87\xa5\x94\x98\x91\xa0\x95\xa3\xa3\x95\x98\x94\xa0\x96\x23\xa5\x96\x98\x9a\xa0\x97\x83\x4f\xce\x9d\xf4\x12\xb3\x13\x14\x73\x74\x14\x13\x93\x12\x34\x73\x8c\x34\x13\xf3\x12\x54\x13\x54\xb3\x97\xa6\x79\x8a\x59\xbe\xa8\xb5\x19\xa8\x04\x85\x6d\x42\x61\x95\xbd\x76\xf4\x88\xd8\x78\xfb\x8d\xce\xc2\xe3\x2f\x39\x14\xde\xdd\xf1\xda\xa9\xd5\x18\xfd\xdd\x85\xc3\xc7\xca\xef\x03\xba\x09\x8b\x23\x1a\x30\xcc\xf2\x46\xb3\xdc\xf4\xd5\xe1\x89\x3e\xda\x04\xc2\x8d\xde\x85\xa2\xa2\xb8\xef\x15\xf7\xbd\xee\x59\x33\xfb\xbd\xa2\x63\xb0\xbb\x67\xb3\xa1\xd7\xef\x23\xaf\x0a\x3f\x75\x29\xc7\xa5\xe1\x5d\x19\x8e\x5d\x97\x86\x4f\xc4\x6c\xe0\xea\x70\x98\x92\xe9\x2e\xdf\xb8\x3a\x1c\xe0\xe6\x22\xb2\xf3\x98\x1f\xc7\x61\x8f\x94\xad\xe3\x48\xaf\x91\x0d\x81\x47\x64\x22\x7c\x13\xf2\xa4\x5f\x1a\x97\x68\xdf\xec\x24\xf4\xcc\xd7\x93\xeb\x8b\x2b\x70\xcc\x67\xc2\xda\x0f\xeb\x07\xbc\xb1\x49\xcd\xfe\xfd\xa9\xbc\x24\x34\x2a\x73\xf3\x9b\xbd\xee\x1d\xf4\x90\xd4\x6c\x1d\xb6\x06\xe2\xc0\xe6\xa1\x0d\xfb\xeb\xb3\xe2\x71\x91\x31\x62\x45\x66\x6f\x68\xe7\x8c\x28\x96\xda\xf8\xef\x84\xa5\x09\x67\x8f\xda\x0c\x9a\x94\x67\xd6\x82\xaa\x6a\x06\xb6\x19\x79\x70\xb9\x8c\xca\x89\x8a\x5c\x76\x36\x63\x4c\x58\x78\x4d\x82\x88\x33\x91\xda\x34\x6c\x26\x0b\x52\xa6\x58\x9e\x6b\xc7\x54\xc4\x7e\xd5\x14\x4e\x8b\x3c\x53\xe6\xcd\xf1\xc6\xfb\x89\xa7\x2b\xc2\x43\x26\x52\x1e\xd0\xc8\xfd\xad\xe8\x30\xf2\x7b\xf6\x3d\x60\x71\x9a\x03\x4b\x5b\xa4\x5c\xe4\x0f\xf9\x83\x59\x8b\x4a\xd9\xe3\x6c\x7e\x37\xb3\x98\xd1\x6a\x55\x78\x4a\x42\xc9\x94\xd9\x7c\xe4\xdb\x0b\x97\x93\xa9\xbc\x1f\xaf\x7e\x4d\xd9\xb4\x4c\x62\xc9\x12\x62\x77\x28\x4f\x2b\x66\x36\x16\x61\xc6\x6c\x4e\xe6\x98\xdb\xa9\x41\x7e\xbf\x64\x82\x25\x66\xd7\xbf\x30\x49\xa9\x24\x59\xf0\x45\xca\x98\x20\x6b\x2e\xb2\x94\xa9\x3f\xe8\xf7\xd8\xd4\x6d\xc1\x97\x99\xfb\x5a\xb0\xa2\x62\xc9\xfc\x4d\xa7\xb6\x2d\xd7\xe5\x76\xf9\x2d\x4f\x2c\x85\x4d\x58\x4d\x28\xf9\xb7\xd7\x3f\x90\xcf\x0e\x45\xbf\xd7\x55\x60\x3e\x25\x6f\x2a\x97\xb6\x82\xee\x93\x79\x8b\x52\xf9\x8d\x89\xbc\xc9\x76\x0c\x89\x60\x2c\x54\xf6\x53\x66\x37\x26\x52\xa2\x27\xf7\xb5\xee\xb0\x75\xa6\x74\x67\xd9\x7c\x56\xe9\x8a\xf1\xc4\xfc\x2d\xbf\xd4\x63\x63\xc4\x17\x9c\x45\xe1\x8c\x7c\xd2\x8f\x7e\xe2\x8a\x5d\x97\x9f\xa2\x47\x46\x31\x6d\x5b\x84\x34\x75\x33\xe5\x78\xe8\x6c\x2a\x6a\x32\x6d\xe9\x1a\xea\xe1\x61\xfc\xd1\xe5\xe6\x36\xbf\xd7\x8d\x35\x8d\x3b\xd8\x2d\xa6\x5c\x53\x61\x3d\xd3\xf3\xc9\x2d\xd8\xf7\x94\x7c\x63\xcf\xd7\x64\x9e\xa5\xc5\xaf\xcd\x2a\x9c\x12\x25\x68\xac\x56\x32\xbd\x76\x99\xc1\x4c\x6a\xae\x52\x87\xe4\x9f\xcf\x27\xb2\xab\xbe\x7d\x85\x6e\xf2\x35\xd9\x26\xa4\x4d\x5c\x0e\x2a\xfd\xa6\xd8\x0d\xb0\xc9\x16\xa6\xdf\x9f\x88\xa5\x2c\x24\x74\x91\x32\x3b\xa7\x17\x3c\x51\x69\xb5\x33\xec\x46\xd3\xdd\x82\x12\xfa\x2c\x61\x7e\xa3\x78\xad\xcd\xb1\x9e\x90\xfa\xa7\x1d\x94\x6f\xec\xd9\x66\xc2\x2a\x0a\xfe\xfa\xca\x37\xf9\xeb\xab\xd9\x57\xf1\x55\x98\xb4\x89\x66\x8c\xec\x9c\x4e\x89\xca\xe2\x58\x26\xa9\x4f\x10\x61\xad\x0b\x57\x36\xf1\x2f\x79\x5b\x7a\xc5\xed\x04\xa0\xee\x23\xa5\xde\xb3\x9d\x60\xe6\xe0\x2f\x76\xc3\xe5\x5e\x9b\xfc\xfe\x17\x77\x57\xaf\x1b\x31\xbb\x35\x4f\xc9\x9a\x2b\xbd\x91\x78\xde\x3c\x1f\xcc\x6a\xb6\xd4\x7e\x7a\x1d\xd8\x54\x77\x73\xb4\xb9\x23\x8a\x45\x2c\x48\xcd\x4b\x65\x5e\x84\x84\xbb\xd4\xca\x91\xcb\xba\x91\x37\xd4\x4f\x01\xdb\x60\x9e\xd8\xbe\xae\x24\xd0\x33\x49\xb9\xd2\x15\x17\xcb\xba\xb6\x9a\x6f\x3c\xb8\x27\x4e\xaf\xc1\x11\x9d\xb3\xe8\xa8\x06\x9b\x6f\x74\xda\xe0\x6a\xf2\x94\x9a\xbd\xd5\x9a\x9b\xbd\x20\x25\x6b\xfa\x9d\xaf\xb3\x75\x29\x37\x5d\x7e\x36\xb3\xbd\x61\x72\x26\x2e\xcc\x02\x6e\x7a\xc3\x26\x95\xfe\xb0\xb0\x06\x95\xeb\x8a\x10\xf6\xdd\x2c\x9e\xd5\x55\x4a\x9b\x61\xfd\xbb\x7f\xfa\xf9\xfc\x4f\xf7\x2e\xba\x45\xdf\x94\xa7\x8f\xef\x21\x4d\xa9\x7e\x1a\x75\x2f\x92\x59\x51\x02\x2a\xf4\x8a\x90\xa9\xf2\x9a\xa8\xa8\xc9\x78\x68\x6e\x48\x72\xc6\xd3\xd6\x52\x9b\x79\x56\xac\x7a\xfa\xd1\xb6\x2d\x7a\x50\x66\xe4\x81\xa5\x66\x6d\xa4\x36\xa3\x69\x39\x29\xea\x82\x3d\x99\xe5\x83\x8a\xf2\x39\x59\x2f\x58\x6b\x99\x09\x53\x8c\x6d\xe5\xef\xb3\x58\x3f\xec\xbf\x58\x22\xed\x6f\xfe\xe0\x57\x29\xf6\xa8\x17\x4c\x6a\x16\x66\xff\x6d\x3f\x53\xf4\x0a\xb5\xe0\x51\xca\xb4\xad\xd2\xf6\x43\x2f\x07\x7e\x2b\xe1\xb6\x2c\x1b\xbb\x09\x4b\x15\x02\x56\xce\xe4\x57\xd8\x1a\x5d\x83\x90\xd9\xd4\x95\x2c\xb7\xca\x1b\x9b\x1b\xb3\x26\x3e\x52\x1e\xd1\x79\xc4\x74\xd3\xf5\x88\xd8\x35\x2d\x58\x49\xa9\x98\x59\x8d\x52\xe9\xd7\x42\x37\x16\xba\x5b\x68\xb2\xcc\xd6\xa6\x2d\xc6\xb8\x98\x06\x99\x4e\xd2\x6d\x73\xf5\xc9\x8b\x2e\x7a\xf7\xc3\x82\xe4\x53\xaa\xd8\x54\xf8\x7d\x4a\xa5\x01\x5c\x11\xb6\x8e\xd3\xe7\xcd\x0d\x15\x55\x7a\xef\x6e\x47\x5e\xc8\xbd\x0d\xda\xb7\xa8\xf3\x45\x65\x49\xb7\x56\x20\x9f\x97\xcb\x8c\x26\x54\xa4\xcc\xa3\x9a\xe2\x12\x2f\x55\xba\xbe\xab\x48\x1d\x94\xd7\x3d\x37\x50\xf9\xd6\x2d\x95\x84\x2b\x95\xd9\x59\xa5\x3f\x1c\xb1\xe2\x0d\xc9\x77\x0b\x7e\xc2\xdd\xd8\xe7\x71\x65\x32\x5e\xfa\x47\x1e\x67\x31\xbd\xb1\x34\x17\xcc\xab\x8c\x85\xb5\x66\x53\x5b\x18\x95\xcd\x95\xfe\xb0\x48\xf3\x16\x84\xb9\xaf\x50\x71\x47\xbd\x92\x6b\x66\x92\x1e\x92\x84\x2d\x58\xa2\x67\xa8\x7e\x0b\x2b\x3b\xa3\x62\xa3\xa0\x47\x94\x09\x95\x25\x45\x1a\x7a\xb7\xd5\x71\x8d\x73\xbd\x66\x9b\x6c\x5e\x4c\xb3\xa9\x21\x6a\x4d\xa3\x88\x25\x24\x58\x65\xe2\x9b\xb2\x17\x82\xda\x54\x8d\x34\x59\xfa\x81\x36\x6f\xbc\x2d\x5e\x37\x5a\xef\x9d\x4c\x6a\x7b\x12\x4b\xa5\xb8\x9e\x70\xae\xdb\xcc\x84\x2b\xbf\x5f\x96\x36\x87\x24\xcc\x12\x3b\x1c\xe6\x39\x26\x7d\xb1\xb2\x63\xec\xc8\x88\x9f\xc3\xee\xf0\x6f\x6a\xfd\x44\x95\x27\x79\x3e\xa7\xa4\xc9\x7d\xba\xb5\x53\xb1\xfb\x77\x6a\xae\x0d\x08\xb2\xc8\x3c\x91\x17\xd3\xa6\x76\xad\xd7\x1d\x31\x88\x51\x33\x80\xb2\x78\x17\xdd\x46\xd1\xbe\x1b\x7a\x82\x5e\x9b\x04\xa2\xca\x6d\xc3\xdd\x70\xca\x20\xc8\x92\x7c\xda\xd1\x94\x18\xa0\xaf\xdb\x9a\x94\x7b\x90\xe6\xfb\x9f\x4d\xbb\xe7\xcb\xca\xf7\x4a\x1b\xb9\x39\x57\x5c\xa5\x32\x79\x9e\x91\x4a\xd5\xb4\x6d\xd1\x3d\xfc\x23\xb9\xd1\xaf\x6f\x26\x7c\xbe\xd4\x7c\x07\x68\xa0\x67\xe9\xfd\x34\xe5\xbb\x6b\x6f\x74\x99\x74\xc9\xc8\x9c\x6a\x3b\x21\x05\xf9\x35\x93\x49\xb6\xbe\xb1\x89\xb6\x23\xba\x7c\x63\x8b\xe5\xe9\x95\x22\x3f\xb8\x72\x9f\x18\x51\x7c\x1d\x47\xb9\x0d\x78\x32\x13\x21\x77\x0f\x89\x9e\xc9\x8a\x3e\x9a\xd4\xba\x01\x0d\x56\x36\x4b\x6d\xbe\x74\xb8\x12\x8d\x75\x93\x44\x48\x61\x4c\x42\x6d\x95\x69\x4a\x22\xa6\x37\x8c\x54\xf7\x0a\x53\x86\x2a\x2d\xf9\xa3\xde\xef\x3f\xd6\x4d\x98\xca\xc6\x72\x98\xed\xc1\x17\xbe\x66\x7a\xed\xf2\x67\x50\x3d\x3a\xb7\xc5\xd4\x71\xeb\x87\x99\xdb\xd6\xdb\x26\xf4\x87\x3a\x6f\xb2\xcc\x04\x4b\xd8\x92\x26\xa1\xc9\x2c\xae\x27\x8d\x78\x26\x34\x48\xf9\x23\x4f\x9f\xf5\x22\xc7\x85\xff\xbf\xba\x7e\x48\x6d\x15\xaa\x49\x7b\xdb\xec\x86\x6a\x42\xda\xed\x57\xc8\x6e\xfc\x65\x52\xbc\x24\xd6\x19\xca\x7e\x6e\x6e\x96\x54\x3b\x5c\x16\x10\xba\xc9\x94\xae\xd8\xda\x2e\xa2\x45\xe6\x7a\x1a\x86\xd7\x6e\x99\xba\x76\x9f\x5d\xcb\x47\x63\x89\x4b\x47\x01\xf2\x60\xde\x8a\xe7\xea\xf9\xa2\xae\x87\x36\xc9\xd1\x34\xa8\xbb\x27\x45\x1f\xb9\x4a\x07\x21\xf0\x7a\x26\xb7\x0f\xe0\xab\x00\xac\x85\x40\x32\x7b\x83\x36\x9d\x0a\xe7\xec\x15\x43\xee\xbc\x3d\xfb\x58\x10\x39\x0a\xe7\x97\xbc\xd2\x3b\xdf\x07\x28\x97\x50\x2e\x8f\x99\x2f\xfd\x3b\xc3\x34\xaa\x53\x2f\xf7\x96\x1f\x57\xa9\x11\xdf\x59\xde\x9a\xa1\x39\x14\x1c\x6a\xff\x4e\x02\x19\x45\x2c\xf0\x9b\x38\x98\x9d\x6d\xb3\x63\x3b\xca\x9a\x9d\xb7\x79\x6f\x41\x09\x83\x12\x06\x25\x0c\x4a\x18\x94\x30\x28\x61\x50\xc2\xa0\x84\x41\x09\x83\x12\x06\x25\x0c\x4a\x18\x94\xb0\xca\x5a\x0f\x25\x0c\x4a\x18\x94\x30\x28\x61\x2f\x57\x09\xdb\x13\xbb\xe4\xa2\xaf\x86\x20\x95\xd6\xc4\x16\xf8\x6f\x1c\xd4\xf2\xdc\x38\x95\xc6\xb7\x8d\x16\x21\x8b\x6e\x2f\x6d\x54\x8c\xd2\x6c\x4e\x76\x1f\xc5\x6b\x62\x27\xdc\x47\xff\x2e\x4a\xa5\xed\x8d\xa4\xb8\x3e\xbe\x6d\x08\x6c\x19\x67\x60\x8b\xcb\xeb\x71\x4c\x42\x8f\xad\xa8\x58\x50\xf7\x66\xe9\x3c\xba\x20\xed\x07\xcd\xe0\x83\x3d\xa3\x9a\x73\xee\x77\x73\x5e\x9c\xeb\x7f\xd1\x20\x9d\x11\xf2\x5e\xff\xf4\xbf\x5f\x53\x6e\xae\x5f\x56\x24\x88\x32\x95\xb2\xe4\xc6\x8d\x72\xe0\xb8\x10\x89\xf8\x37\x46\xae\xf2\x36\x5d\xd5\x19\x36\x53\xf4\x30\x16\x3f\x6f\x6a\x2e\x03\xcc\x7d\xa3\x59\x68\x5a\x6b\xda\xa9\xdf\xd7\x58\xf9\x36\xb9\x83\x50\xa6\xf4\xf9\x86\x8a\xd2\xd5\xd5\xb5\x3b\x1b\x5b\xdc\x04\x0c\xf7\x68\x54\xc5\x4e\xf2\xb7\x9c\x64\x9e\x9b\xe4\x71\xc1\xe2\x76\x7a\x16\x17\xb8\xb2\xc0\x95\x05\xae\x2c\xe3\x74\x65\x99\x58\x7e\x97\x0e\x9d\x46\xe0\x9f\x48\x6a\x56\xf5\xb2\xa3\x48\x6f\x8b\x7a\xcb\x40\xc2\x66\x52\xf7\xf9\x37\xb1\x9e\x8f\x72\x3d\xef\x0a\x7a\x96\x39\x26\x17\x44\x59\xf4\x48\xe6\x6c\x21\xad\x20\xe1\x55\x83\xc2\xcf\xc8\x09\x35\xa6\x23\x32\x66\x3d\x47\xe6\x8c\x08\x29\x6e\x04\x5b\x52\xd3\xdd\xee\xc1\x33\xf2\x25\xf7\xe6\xb1\x0a\x62\x3e\xd0\x6e\x59\xe1\xeb\x35\x0b\x39\x4d\x59\xf4\xec\xdc\x55\xca\xce\x48\x82\x47\xd7\x0e\x3e\x1a\xe0\x4e\x96\x89\xde\x6d\xc6\x2c\xe1\x32\xcc\x49\x6d\xb1\xf1\xd4\xed\xce\xfb\x3c\x53\xba\x92\x65\x54\x4f\xf5\x37\x7d\x83\xdc\x43\x16\xa5\xa3\x0b\xd7\x5f\x30\xf5\x5c\x33\x2a\x6a\xeb\x58\x33\x7e\xa6\x4e\xf7\xa6\x4a\x83\x92\xdb\x77\x2c\x4e\x98\xee\xdc\xf0\x47\x12\x47\x8c\x2a\x96\xab\xab\xf7\x89\x8c\xe9\xd2\x8c\xf2\xbd\x8c\x78\xf0\x7c\x6d\x3b\xda\xea\x89\xbe\xc3\xc2\xbc\x00\x3d\x15\x5e\xcf\xfe\x3c\x23\xa5\x63\x70\xc8\x62\x26\x42\x26\xd2\xc2\x1d\x80\x11\x99\xc4\x2b\x2a\x74\xb7\x39\xca\x76\xbb\xa0\x91\x77\x08\xfa\xfa\xca\xfe\xf9\xeb\x2b\xb2\xe0\xc2\x00\xb2\x24\x7f\x18\x0d\x43\x23\xbc\xdd\x5a\x26\x1c\x16\xfa\x89\x2d\xfe\x4a\x15\x5f\xb2\x4e\x38\x33\xf2\x9e\x9b\x77\xb3\x54\x75\x99\x6c\xb7\xcd\x28\xab\xd6\x1f\xce\xfa\x00\x99\x95\x43\xa6\xab\xba\xc1\xb3\x35\x7c\xe7\xdb\xd6\xcd\xd0\x35\x58\x0c\x4d\xc3\xf4\x1a\xb4\x92\x4f\x64\x49\x93\x39\x5d\x6e\x38\x6a\xe6\x0b\x09\x4b\x16\x32\x59\xeb\x1e\xaf\xed\x8d\x4f\x95\xf6\xec\xee\x0c\xf3\x6a\xfa\xf7\x2a\xb6\x3d\xc7\xf5\x9c\x0f\x78\x58\x78\xf3\x18\x27\x07\xe3\x5f\x95\x8f\xa0\x62\xa9\xa7\xa3\xde\x8d\x61\x56\x1a\x2a\x2f\x80\x7b\xae\x5a\xe0\x90\xcd\x87\xcd\x88\x75\x04\x36\xa2\x7a\x79\x35\xbd\xb2\x6d\xb8\x22\x37\x6e\x7a\x6d\x4e\x3f\xf5\x86\x5c\xfd\x85\x06\xdf\xf4\x4e\x48\x84\xfa\x53\x34\x8a\xe4\x93\xf9\x50\xa5\xe3\xac\x6f\x8b\x7b\x8b\x37\x0b\xf1\x2d\x98\xe7\x25\xbd\x21\x57\x3f\xc9\x84\x95\x8a\x25\x01\x55\x01\x0d\x75\xeb\x5d\xff\x18\xeb\x64\xcb\x53\x76\xb9\xdf\x2a\x70\x91\x97\x51\x37\xdd\xe2\xea\x64\x9d\xc0\x36\xfe\x1c\x2d\xa3\x1f\x57\xf0\x31\xab\x2d\xe3\xd8\xe4\x1f\x9b\xcc\xf1\x34\x9e\x83\x54\x8e\x7d\xa7\x72\x9c\x0c\x3b\x42\x32\xc7\x69\x9e\x3b\xc6\x60\x80\xc6\xc3\x6c\xba\x49\xea\x38\x84\x68\x7e\x5c\x72\xc7\xed\x1a\x22\xc9\xe3\x8b\xd6\xc2\x13\x96\x1b\xc8\x40\x8a\x34\xd1\xfb\xed\xa4\x9d\x74\x8f\x9f\x8b\xa2\xdf\xe6\x45\x8f\x19\x38\xd6\x7e\xf8\xa2\x12\x3f\xee\x1f\x12\x04\xbe\x21\xf0\x0d\x81\x6f\x08\x7c\x43\xe0\x1b\x02\xdf\x10\xf8\x56\x6d\x30\x02\xdf\x10\xf8\x86\xc0\x37\x04\xbe\x21\xf0\x0d\x81\x6f\x08\x7c\x43\xe0\xdb\xc6\x84\x41\xe0\x1b\x02\xdf\x2e\x2b\xf0\x2d\x67\xf5\xb5\xcc\xe8\x92\x92\x41\xee\x85\x62\x2d\xa6\x85\x9c\x1c\x0f\xed\x15\x57\xd6\x27\x88\x3c\x0b\x58\x0e\xef\x5f\x5f\x5f\xfd\x9d\xef\x0d\x14\x52\x28\xa4\xa7\xcd\x9c\x9e\x7d\xee\x8f\xaf\x5d\xaf\x89\x24\x8f\xad\xde\xa4\x52\x4a\x9e\x6d\xae\x4e\x4a\x2e\x09\xe3\x45\xce\x48\x33\x09\xdd\x0d\xba\x1b\x74\x37\xe8\x6e\xd0\xdd\xa0\xbb\x41\x77\x83\xee\x06\xdd\x0d\xba\x1b\x74\x37\xe8\x6e\xd0\xdd\x2a\x6b\x3d\x74\x37\xe8\x6e\xd0\xdd\xa0\xbb\xbd\x5c\xdd\x6d\xcc\x21\x90\x9d\x25\x9c\x3c\x5f\x82\x43\xea\x49\x84\xdb\x4c\x36\xdc\xe6\xec\x24\x94\xa0\xf3\xe4\xc8\x74\x94\x9d\x13\x79\x24\xa6\x44\x62\xca\xa9\xa8\x94\xed\xa7\xa8\x3c\xdf\xa0\x1f\x9f\xac\x12\x8b\x20\x39\x3e\x6d\x25\x1c\x6c\xe0\x60\x03\x07\x9b\xc9\x3b\xd8\x4c\x29\xbd\x65\x5f\x0e\x2c\xf0\xb8\xdc\x6f\x11\xea\x53\x5e\xf6\x66\x10\x90\xfc\xf2\xe5\x59\x80\xae\x00\x2c\x92\x5f\x22\xf9\x25\x92\x5f\x22\xf9\x25\x92\x5f\x22\xf9\x25\x92\x5f\x8e\x3f\xf9\x65\x0b\x7a\xcf\x39\x69\x30\x8f\x3f\x17\x20\x21\x66\xaf\x09\x31\xa7\x49\xa5\x90\x1a\x73\x9a\xa7\x92\x31\x98\xa7\x31\x92\x9f\x0e\x92\x64\x0e\x2e\xf4\x1f\x91\x2e\xf3\x40\x5d\x91\x38\x13\x4a\xfe\x2e\x25\xff\x56\x05\x34\x62\xc7\xe8\xf9\xe6\x0b\x7e\xe6\x41\xd3\x6a\x59\xd8\x7f\x30\xc3\x31\xec\x02\x4f\xb3\x54\xea\x51\xe6\x62\x69\xb6\xf4\xa6\x4a\x43\xac\xeb\xe7\xaa\xbd\xa5\x86\x6c\x2f\xf0\x1b\x3d\xdd\x9a\xd0\x8b\xb7\xa3\x63\xc5\x77\xf3\x05\x19\xeb\x06\xfb\xc8\x77\x08\xbb\xea\x17\xbf\xab\x3e\x72\xd1\xed\x47\xe4\x1d\x8d\x25\x38\x57\xdb\x6d\xd9\x12\x1c\xc9\x74\x5a\x33\x0a\x80\x3b\xc3\xc3\x9d\x69\x18\x20\x10\x1e\xd8\xa2\x0b\x58\xf6\xcf\x06\x3b\x6d\x2f\xfc\xbd\x31\x9d\x4a\xdd\xc0\x70\xc0\x70\x76\x33\x1c\x2b\xba\x1d\x03\x71\xcc\x37\x70\x4e\x3d\x6e\x93\xd0\x9c\xe2\xd8\x01\x01\xa7\xbf\x0c\xef\x7d\xbc\x2d\x9d\x53\x9d\xcd\x17\x66\xac\xbb\x6a\x78\xf3\x63\x4f\x0d\x6f\xfe\x49\x10\x9f\x11\xb8\xf2\xb4\x67\x36\xc0\x7d\x46\xc0\x7d\xa6\x61\xa2\x00\x7e\x60\xa4\x2e\xc9\x0c\xc0\xb5\x07\xae\x3d\x23\x69\xda\x18\xb1\x90\xf5\xf9\xff\x35\x93\x29\x6d\xeb\x2e\x5c\x5b\xe4\x7f\xe8\x22\xc7\x7c\x96\xad\xfd\xf0\x85\xdd\x81\x5b\x37\x14\xc8\xc1\x8d\x1c\xdc\xc8\xc1\x8d\x1c\xdc\xc8\xc1\x8d\x1c\xdc\xc8\xc1\x5d\x6d\x30\x72\x70\x23\x07\x37\x72\x70\x23\x07\x37\x72\x70\x23\x07\x37\x72\x70\x23\x07\xf7\xc6\x84\x41\x0e\x6e\xe4\xe0\xbe\xac\x1c\xdc\x25\x62\x5f\x62\x45\x97\x75\xe7\x6d\x0d\x04\x6b\xf5\xae\xdb\x89\xf0\xce\x5e\x71\xe4\xae\x3b\x6e\x4f\x00\x92\x63\x70\xd6\x29\x57\x7b\xe7\x7b\x01\xfd\x13\xfa\xe7\x71\x33\xa6\x77\xe7\x9c\xa6\xb5\xea\xf9\x0e\xdb\x66\xd5\x9a\xd8\xdd\xb5\x27\x9a\x9d\x13\xef\xac\x85\x11\x3a\xe5\xae\x5a\xe8\x63\xd0\xc7\xa0\x8f\x41\x1f\x83\x3e\x06\x7d\x0c\xfa\x18\xf4\x31\xe8\x63\xd0\xc7\xa0\x8f\x41\x1f\x83\x3e\x06\x7d\x0c\xfa\x18\xf4\x31\xe8\x63\x2f\x5c\x1f\x1b\x73\xa6\xf2\x0e\xef\xa8\x3d\x55\x32\xc3\xdd\xb4\x08\x7b\x99\x5c\xd8\x4b\x0b\x77\xd2\x82\xbe\x37\x4d\x76\xd2\x11\x71\xc7\x1d\xb4\xb8\x83\x76\xec\x2a\x63\x17\xd9\x6b\x4e\x35\xd4\xa7\xdc\x39\x8b\x45\xee\x88\x1c\x35\x70\x74\x81\xa3\x0b\x1c\x5d\x46\xee\xe8\x32\xad\xec\x33\xdd\x3a\x94\xc0\x93\xb1\x7e\x85\xdf\x75\x77\x6c\xc7\x0b\x3c\xee\x8c\x7d\x79\x2b\x7b\x57\x40\x14\x77\xc6\xe2\xce\x58\xdc\x19\x8b\x3b\x63\x71\x67\x2c\xee\x8c\xc5\x9d\xb1\x53\xb8\x33\xf6\x64\xfd\xe5\xbc\xbb\x62\x9b\xee\xff\x91\x4e\xb2\xe7\x74\x92\x53\xa2\x49\x48\x20\x39\xcd\xd3\xc7\x18\xcc\xd0\x98\x08\x4e\x27\x89\x23\x07\x12\xd6\x8f\x4a\x18\x59\x5b\x47\x24\x8a\x84\x62\x5e\x55\xcc\x5b\xbd\x37\x04\xec\xf1\x04\x09\x7d\x64\xf7\x84\x0c\xbd\x66\x4f\x4d\x61\xc5\xdb\x70\xdc\xdb\x70\x58\x6b\x9d\x48\x92\x75\x28\xae\xd8\x19\x43\x71\xbd\x54\xc5\xb5\xbd\x7b\x3e\x00\x64\x86\x36\x3a\x87\x81\xcc\x44\x4c\x0e\xb0\x0c\x8c\xcf\x25\x2c\xf3\xc0\x32\xc0\x32\xc0\x32\x0e\xcb\x28\x16\x24\x2c\x6d\xe7\xe2\x8e\x07\x53\xd6\x98\x4f\x9b\xb5\x1f\xbe\xa8\x1b\x3b\x2a\x63\x80\x54\x44\x48\x45\x84\x54\x44\x48\x45\x84\x54\x44\x48\x45\x84\x54\x44\xd5\x06\x23\x15\x11\x52\x11\x21\x15\x11\x52\x11\x21\x15\x11\x52\x11\x21\x15\x11\x52\x11\x6d\x4c\x18\xa4\x22\x42\x2a\xa2\xcb\x4a\x45\x94\x43\x78\x0b\x89\x2e\xe9\x8e\x8e\x4d\xec\xd5\xe2\xe5\x1c\xe3\x67\x9a\xbd\x22\xc7\xfa\x5b\x39\x8e\x83\x8e\xc3\xfb\xcc\xb8\xfa\xee\x9c\xfb\xd0\x2b\xa1\x57\x36\x9c\x2a\x3d\x7b\xc9\x34\xa8\x4e\xaf\x37\x6f\x1c\xac\xcf\xa4\xae\xdc\x38\xde\x8a\x9c\x74\xd7\x06\x6c\xca\x51\x97\x6c\x40\xd2\x82\xa4\x05\x49\x0b\x92\x16\x24\x2d\x48\x5a\x90\xb4\x20\x69\x41\xd2\x82\xa4\x05\x49\x0b\x92\x16\x24\x2d\x48\x5a\x90\xb4\x20\x69\x41\xd2\x7a\xb9\x92\xd6\x98\x73\x3a\x75\x76\xbb\xc6\x09\x62\x17\xae\xd5\x40\x34\xca\x74\xa2\x51\xce\xbe\x4f\x03\x84\xfd\x60\x16\x90\xf6\xa9\x3a\x6e\xd0\xc0\x0d\x1a\xa3\x55\x0b\xdb\x4f\xec\x72\x82\x15\x3e\xfe\xce\x0c\x2c\x64\x4d\x12\xb8\xc0\xff\x04\xfe\x27\xf0\x3f\xa9\xad\x49\xdf\xfe\x27\x53\x4a\xcf\xd2\x99\xbb\x07\xdc\x06\x1b\x5d\x81\xd1\xdd\xb2\x8d\xbb\x2f\x5e\xde\xb2\xdd\x15\xae\xc4\xdd\x17\xb8\xfb\x02\x77\x5f\xe0\xee\x0b\xdc\x7d\x81\xbb\x2f\x70\xf7\xc5\xf8\xef\xbe\x38\x45\x1d\x39\xe7\xd2\x8b\x06\x5b\x7d\x24\x57\xec\x35\xb9\xe2\x44\x70\x10\xf2\x29\x4e\xf3\xa0\x31\x06\x8b\x33\x0a\x20\xd3\x41\x22\xc5\xfe\xa5\xed\x23\x32\x28\x56\x2b\x87\xd4\x89\x2f\x5c\xac\x4e\x1e\x79\xc0\x68\x10\xc8\x4c\xb4\x96\x42\xd1\x94\x79\x67\xcb\x1c\x33\x3f\xac\xfd\xf0\x85\xa5\x52\xac\x1d\x0b\xc4\x9f\x21\xfe\x0c\xf1\x67\x88\x3f\x43\xfc\x19\xe2\xcf\x10\x7f\x56\x6d\x30\xe2\xcf\x10\x7f\x86\xf8\x33\xc4\x9f\x21\xfe\x0c\xf1\x67\x88\x3f\x43\xfc\xd9\xc6\x84\x41\xfc\x19\xe2\xcf\x2e\x2b\xfe\xac\xc4\xe1\xcb\xb0\xe8\xb2\x52\x2b\xd6\x61\xb0\x56\x53\x2c\x4e\x85\x79\xf6\x8a\x24\x77\xa5\x5a\x3c\x05\x4a\x8e\xc1\xe5\x7d\xa3\xde\x3b\xdf\x0d\x48\x9b\x90\x36\x8f\x9c\x32\xbd\xbb\xc0\x37\xae\x56\xcf\xa9\x18\x1b\xd6\x6b\x62\x29\x19\x4f\xb5\x3e\x27\xa6\x66\x84\x2d\xaa\xb1\x45\x87\x53\x34\x42\x2a\x83\x54\x06\xa9\x0c\x52\x19\xa4\x32\x48\x65\x90\xca\x20\x95\x41\x2a\x83\x54\x06\xa9\x0c\x52\x19\xa4\x32\x48\x65\x90\xca\x20\x95\x41\x2a\x7b\xe9\x52\xd9\x98\x43\x10\x3b\x4c\xd5\x78\xb2\x78\x86\x94\x8d\x88\x82\x99\x5e\x14\x4c\x0b\xa9\x1b\x41\xe0\x6b\x08\x7c\x7d\x0a\xc7\xae\xa8\x3b\x52\x39\x22\x95\xe3\xe8\xd5\xc6\x2e\x52\x3a\x9e\x6c\xad\x4f\x49\xed\x88\x85\xae\x76\xa1\xdb\x91\xe2\x11\x7e\x2f\xf0\x7b\x81\xdf\xcb\x04\xfc\x5e\xa6\x95\x02\xb2\x63\xf7\x12\xb8\x37\x36\x70\x29\xe9\x73\x99\x47\x6a\xc8\x97\xb7\xbc\x77\x85\x47\x91\x1a\x12\xa9\x21\x91\x1a\x12\xa9\x21\x91\x1a\x12\xa9\x21\x91\x1a\x72\x0a\xa9\x21\x4f\x57\x63\xce\x4b\x11\xd9\xf8\x08\x80\x54\x91\x3d\xa7\x8a\x9c\x14\x56\x42\xca\xc8\x69\x1e\x40\xc6\x60\x89\x46\x05\x72\x3a\x49\x1d\x39\x94\xd4\x7e\x54\x0a\xc9\xfa\x4a\x22\x95\x24\x44\xf4\x80\xb5\x9a\x43\x72\xcc\xa4\xb1\xf6\xc3\x97\x98\x3c\x12\xa1\x70\x08\x85\x43\x28\x1c\x42\xe1\x10\x0a\x87\x50\x38\x84\xc2\x21\x14\x0e\xa1\x70\x08\x85\x43\x28\x1c\x42\xe1\x10\x0a\x37\x80\x51\x43\x28\x1c\x42\xe1\x10\x0a\x87\x50\xb8\xd1\xa1\xf8\x0b\x4c\x17\x79\x14\x7f\x3f\x2a\x4f\xe4\x98\xb9\x66\xaf\xd8\x71\x6f\x82\xc8\xd1\x4b\x99\xd5\x77\x00\xd2\x25\xa4\xcb\xf3\xe7\xca\x30\x3e\xf1\x83\xfb\xf0\x1c\x51\xa1\x29\x66\x7f\xec\x53\xcc\x6d\x10\x37\xfd\xa1\x26\xc4\x79\xe3\x98\x7f\x5d\x3e\x50\x39\x1f\xc2\xe2\x24\xed\x4e\xc1\x81\x5c\xc7\x11\x33\x04\x26\x2f\xc7\x2c\x3c\x08\xaa\x76\xbf\x83\x1e\xdc\x56\x34\x35\xf6\x4c\x87\xc3\xa8\xdb\x94\x6a\x11\x3f\x8d\xf8\xe9\xf1\x1a\xea\xce\x02\xa7\x8f\xb2\xd3\x27\x47\x4c\x63\x31\x6b\x14\x2a\x8d\x13\xe0\x8e\x37\x07\x27\x40\x9c\x00\x2f\xe3\xc0\xd5\x55\x38\xf4\x31\xeb\xf8\xb1\x71\xd0\x58\xbd\x9b\x04\x40\x77\xb1\x78\x23\xf2\xf9\xe5\xad\xdd\x5d\xa9\x61\x88\x7c\x46\xe4\x33\x22\x9f\x11\xf9\x8c\xc8\x67\x44\x3e\x23\xf2\x79\x32\x91\xcf\xc7\x09\x29\x2d\x84\x3c\xef\xdd\xed\x23\xd6\x79\x88\x58\xe7\xd1\x73\x21\x04\x39\x4f\xf3\xac\x31\x06\xa3\x33\x0e\x2e\xd3\x5d\x74\x73\x9f\x4a\xf8\xf1\x61\xcd\xf5\x4a\xef\x38\x44\x5e\xe8\xd7\xc3\xe9\xd7\xb7\x71\x22\xbf\x3f\x37\x54\xb1\x03\x29\x84\x1e\xa9\xbf\xbe\xff\x92\xbb\xe7\xeb\xfd\xb8\x29\xa3\x74\x47\x67\x1b\x20\xb1\xe6\x63\x1d\xfb\xec\xd9\xc6\x59\xd3\xfc\x57\x96\x6e\x59\xe7\x7b\xd3\x53\x9d\xae\xa1\x95\x59\x35\xc4\x0a\xe9\xba\xa1\x9b\x35\xd2\x74\xa1\xe7\x92\x6d\x29\x92\x7e\x56\xde\xff\xfd\xd2\x67\xe5\x7d\x86\x59\x39\xa6\x59\xb9\xdf\x39\xda\x4f\xcb\x4f\x0f\x17\x3f\x2f\xa5\xc2\xc4\x1c\xd1\xc4\x3c\x24\xfc\xf9\xa9\xf9\xee\xfd\xc7\xf7\x5f\xde\x5f\xf8\xe4\xb4\x62\x18\xa6\xe7\x78\xa6\xa7\x74\x5f\x39\x38\x3f\x3f\xdd\x7f\xf9\xf0\xe9\xe7\x87\x0b\x9f\xa0\xae\x07\x31\x43\xc7\x33\x43\x57\x8c\x86\x87\xa7\xe7\xdf\xde\xdf\xbd\xbb\xf0\xb9\xf9\x37\x46\x43\x4c\xcc\xf1\x4c\xcc\x03\xe4\x3f\xdf\x73\xde\x7d\x79\xfb\xb7\x0b\x9f\x9a\x06\x38\x63\x6e\x8e\x69\x6e\xf6\x0d\x35\xeb\x6b\x0a\xc0\xd9\x63\xd3\xee\x69\x6a\xb3\x97\xac\x98\x49\xbf\xa0\x47\xe8\xef\x9f\x3f\x3a\x29\xc6\x05\x47\x11\x07\x1d\x09\x13\x61\x2c\xb9\x48\x95\x6e\xf7\x62\xc1\xbf\x33\x65\xe3\xcb\x4b\x29\xe5\x52\x69\x9c\x5c\xbc\x2b\x90\xcb\x71\xe0\x16\x30\x9f\x53\x24\x95\xbe\xcc\x19\xf9\x49\x26\x84\x7d\xa7\xeb\x38\x72\x5e\x2a\x4f\x2b\x19\xe5\x8a\x8b\xae\x8d\xae\xa0\x5e\x86\x7e\xbc\xbd\x8d\x64\x40\xa3\x95\x54\x69\x0d\x26\xd5\xef\xd0\x8d\x7a\x56\x29\x5b\x17\x98\x94\x45\x54\xa5\x3c\x50\x8c\x26\xc1\xea\x26\x92\xcb\x25\x17\xcb\xdb\xff\xb4\xff\xff\xff\xfc\xfa\xef\x99\x62\xc9\x8f\xdf\xf8\x3a\x58\x3d\xcf\x88\xef\x8d\xfa\x3f\xd7\xf0\xdd\x8d\x31\xeb\x8a\xee\xde\xfe\x4b\x3f\xa7\x69\xa8\x12\x20\xef\xf3\x3f\x78\xba\xba\x2f\x0d\x0d\xec\x08\x60\x6f\xef\xb3\x73\x27\xec\xc5\xec\x04\xf4\x1d\xc3\xfc\xdc\x09\x7d\x31\x41\x01\x7f\x47\x32\x49\xf7\xc1\x5f\x4c\x53\x40\xe0\xd1\x4c\xd4\xbd\x10\x18\x33\x15\x30\x78\x04\x73\x74\x37\x0c\xc6\x04\x05\x14\x1e\xc5\x14\xdd\x03\x85\x31\x47\x01\x87\x01\x87\x7b\x6d\x9a\x7e\xaa\xcf\x42\xea\x83\xc7\x9a\x41\x50\xc0\x6c\xc0\xec\x2d\x98\xad\x6c\xe4\xd7\x11\x19\xb7\xec\x37\xfc\xc2\x80\x74\x35\x27\xe4\xde\x72\xe1\x76\x9d\x1a\xcd\x49\x84\x8e\x4c\x27\x35\x13\x66\x7d\x1b\x49\x9a\x2a\x13\x7f\xac\x21\x79\x48\xd5\x84\x10\xbc\xf6\xe7\x0a\x52\x35\x8d\x3b\xa2\xfb\x9c\x25\x1e\xb1\xdd\x43\xc4\x76\x4f\xc4\x9c\x20\xc2\x1b\xe6\x65\xda\xcb\x39\x22\xbc\xc1\xb8\x5e\x66\x84\xf7\x19\xc9\xc8\x7f\xae\x76\x2a\x0e\x87\xdb\x48\xa4\xa9\xf1\x46\x1a\xf2\x13\x9b\x8a\x34\xe4\x25\x23\x5a\x4c\xbb\x21\xcc\x68\xfb\xb4\x6b\xeb\x35\xea\x28\x15\x39\x96\xb2\x66\x9c\x6b\xf4\x47\x91\x63\xde\x04\x1c\x3e\x70\xf8\x38\x62\xdd\xec\x97\x6e\x0d\xbb\x92\xb7\xcf\xb7\x4e\x5a\xc9\x1b\x27\x23\xc7\xfa\xdd\x28\x1d\x79\x17\xcb\x37\xd2\x90\xbf\xbc\xb5\xfb\xb4\x51\x40\x1a\x72\xa4\x21\x47\x1a\x72\xa4\x21\x47\x1a\x72\xa4\x21\x27\x1d\x6c\x1d\x90\x86\x7c\xcf\x8e\xbe\x93\x34\xe4\xa7\xe1\x99\xb3\x12\x91\x37\xdb\xe9\x43\xae\xee\x53\xae\x1e\x3d\x15\x82\x40\x3d\xcd\x73\xc6\x18\x0c\xce\x58\x88\x4c\x07\x12\xf5\x89\xcb\x77\x6f\x22\x75\x4d\xfd\xc6\x27\x53\x8f\x49\xcb\xbd\xf5\x3b\xdf\x42\xd4\x6d\x24\x86\xf8\xaf\x6d\xfb\x86\x01\xac\x35\x13\x46\x7e\xf2\x1d\x3f\x76\x53\xd8\x64\x39\x9b\xdc\xb2\x0b\x34\x7f\x69\x66\xe0\xc5\xef\x94\x76\x6d\x94\xea\x0c\x44\xfb\x46\x0d\x56\xf8\x1c\x2b\xdc\x5e\xcc\x19\xcc\x6f\x03\x17\xab\x51\x45\x9b\xc1\x03\xe7\xdc\x88\x33\xcc\xf9\x66\x5b\xce\x89\x04\x07\xc0\x23\x07\xb4\x05\xdb\xfe\xcb\xd9\xf6\xb7\x13\x73\x06\x8c\x3f\x3e\x8c\x3f\x11\x83\x02\x98\x0f\xf3\x32\xf5\xc5\x1c\x30\x1f\x18\xa1\x8a\x11\x64\xc8\x9a\x32\x83\x88\xab\x54\x2f\x18\x4f\x7a\x1e\xe5\x1e\x50\x72\x41\xf4\x64\x20\x3f\xcb\x70\xd4\x67\xa7\xda\x0f\xeb\x07\xbc\x51\x69\xc2\xe8\xfa\xdf\x9f\xca\xaf\x47\xa3\x32\x37\xbf\xd9\xab\x25\xd5\x63\xe1\x0c\x69\xb9\xdf\x5b\x08\xf7\x3a\x64\x80\xbe\xac\x18\x09\xa4\x48\xb9\xc8\x18\xb1\xa9\x51\x4b\x8e\x91\x8a\xa5\xe4\x49\xcf\xe1\x84\xa5\x09\x67\x8f\xda\x0e\xac\x65\xc2\x9c\x09\x51\x85\x8b\x9b\x62\xc9\x23\x4b\x66\xe4\x81\x0b\x13\x18\x53\xf6\x79\xb4\x7f\x23\x66\x35\x65\xe1\x35\x09\x22\x9e\x3b\x72\x49\xa1\xf7\x79\xce\xa9\x2f\xaf\x88\xfd\xaa\x29\x9c\xea\x37\xe6\x91\xcb\x4c\x11\xf3\x0e\x78\xeb\xf5\xc4\xd3\x15\xe1\x21\x13\x29\x0f\x68\xe4\xfe\x56\x4a\x80\xf5\x7b\xf6\x3d\x60\x71\x9a\xbb\x54\xda\x22\xe5\x22\x7f\xc8\x1f\x72\xbf\x2e\x57\x3f\x5d\x9d\x84\x19\x4f\x4a\x5a\xad\x0a\x4f\x49\x28\x99\x32\xd6\x37\xb7\xaf\xce\xbd\xb3\xbc\x25\xad\x7e\x4d\x7f\x83\x44\x52\x2c\x59\x42\xac\x89\x7e\x72\x9e\x71\x61\xc6\x48\x2a\x09\xfb\x1e\x73\xe7\xac\xfa\xfb\x25\x13\x2c\x31\x1b\xdf\x85\xb6\xd5\xa9\x24\x0b\xbe\x48\x19\x13\x64\xcd\x45\x96\x32\xf5\x07\xfd\xbe\x9a\xba\x2d\xf8\xd2\xfb\xb8\x06\x2b\x2a\x96\x8c\x48\x51\x6a\xcb\x75\xb9\x5d\xde\xe6\xc7\x52\x84\xb6\xdb\x28\xf9\xb7\xd7\x3f\x90\xcf\xce\x9d\xed\xbd\xae\x02\x0b\xdd\x4e\x20\x95\x4b\x5b\x41\xf7\xc9\xbc\x45\xa9\xfc\xc6\x44\xde\x64\x3b\x86\x44\x30\x16\x2a\xfb\x29\xb3\x1d\x11\xa9\x71\x6c\xbc\xd6\x1d\x66\xdc\x68\x13\xa6\x52\x9a\xa4\xfa\x3b\x3c\x31\x7f\x33\x05\xcb\x2c\xdd\x1c\x71\xe3\xee\x37\x23\x9f\xf4\xa3\x9f\xb8\xf7\xb7\x74\x4f\xd1\x23\xa3\x98\x08\x09\x15\xd2\xd4\xcd\x94\xe3\x53\x93\x99\x8a\xea\x4f\x9b\x1a\xea\xe1\x61\xfc\x91\x85\xc5\xef\x75\x63\x4d\xe3\x0e\x76\x8b\x29\xd7\x54\xd8\x38\x08\xfa\xc9\x2d\xd8\xf7\x94\x7c\x63\xcf\xd6\xdf\x30\xff\x75\xa4\xb7\x6a\x29\x51\x82\xc6\x6a\x25\xd3\x6b\xf2\xb4\xe2\x81\xc9\x5c\xc6\x45\xa9\x43\xf2\xcf\xe7\x13\xd9\x55\xdf\xbe\x42\x37\xf9\xda\x6b\x23\x0b\x13\x46\x02\x7b\xe8\xbc\x76\x3b\x40\xfd\x2f\x99\x78\x2f\x65\x42\x17\x29\xb3\x73\x7a\xc1\x13\x95\x56\x3b\xc3\xee\xb4\x5c\xce\xb8\xd0\x3b\xf1\xf9\x9d\xd2\x35\xa1\xca\x4c\x48\xfd\xd3\x0e\xca\x37\xf6\x6c\x36\x70\xa5\x82\xbf\xbe\xf2\x4d\xfe\xfa\x6a\xf6\x55\x7c\x15\x5f\x0a\x97\x4c\x6e\xdf\x02\x95\xc5\x36\x4e\xd2\x2e\x10\xd6\x8a\x70\x65\x96\xa1\x19\x79\x5b\x7a\xc5\xed\x04\xa0\xee\x23\xa5\xde\xb3\x9d\x60\xe6\xe0\x2f\x76\x97\xe1\x5e\x9b\x84\xa5\x59\x22\x0a\x97\x4d\x37\x62\x76\x6f\x9a\x92\x35\x57\x8a\x50\xf1\xbc\xb9\x41\xae\x73\x4e\xf4\xd3\x6b\x10\x1f\xd8\x3b\xa2\x58\xe1\xb3\xa9\x5f\x84\x84\x07\x76\xda\x5b\xdb\xbb\x28\x1a\x9a\x3b\x20\x3f\xbb\x41\xb1\xc1\xa6\x9b\xce\xde\xec\x91\x25\xcf\xe9\x8a\x8b\x65\x5d\x5b\xcd\x37\x1e\xdc\x13\xa7\xd7\xe0\x88\xce\x59\x74\x54\x83\xcd\x37\x3a\x6d\xf0\xc1\x60\x83\x88\xaf\xb9\xd9\xd5\x51\xb2\xa6\xdf\xf9\x3a\x5b\x13\x91\xad\xe7\x2c\xb1\x6d\x75\x87\x13\xdb\x1b\xba\xe1\xc6\x1a\xb9\x65\x26\xa0\x51\x64\x96\x53\x63\x50\xb9\xae\x88\xf5\x4d\xde\x5e\xa5\xb4\x19\xd6\xbf\xfb\xa7\x9f\xcf\xff\xf4\xee\xd1\xa2\xe8\x5d\xef\xb9\x6c\xc3\x02\xec\x8b\x64\x56\x94\x80\x0a\x1f\x3c\x50\xac\x89\x4a\xef\xaa\xcd\xe1\x26\x37\x9e\xb6\x96\xda\xcc\xb3\x62\xd5\xd3\x8f\xb6\x6d\xd1\x83\x32\x23\x0f\x2c\x35\x6b\xa3\x6e\x84\x6e\xbb\x35\x9a\xb6\x6d\xec\xc9\x2c\x1f\x54\x94\x0f\x8a\x7a\xc1\x5a\xcb\x4c\x98\x62\x6c\x2b\x7f\x9f\xc5\xfa\x61\x36\x7c\x42\xff\xe6\x0f\x7e\x95\x62\x8f\x7a\xc1\xa4\x66\x61\xf6\xdf\xf6\x33\x45\xaf\x50\x0b\x1e\xa5\x4c\xdb\x2a\x6d\x3f\xf4\x72\xe0\xb7\x12\x6e\xcb\xb2\xb1\x9b\xb0\xc7\xea\x20\x3f\x3c\x6c\xda\x1a\xeb\x47\x9d\xb2\x64\xcd\x05\xcb\xad\xf2\xc6\xe6\xc6\xac\x89\x8f\x94\x47\x74\x1e\xb1\x99\x49\x77\xa1\x77\x16\xba\xc9\xc1\x4a\x4a\xc5\xcc\x6a\x94\x4a\xbf\x16\xba\xb1\xd0\xdd\x42\x93\x65\xb6\x36\x6d\x11\xa1\xb7\x34\xa6\x93\x74\xdb\x5c\x7d\xf2\xa2\x8b\xde\xfd\xb0\x20\xf9\x94\x2a\x36\x15\x7e\x9f\x52\x69\x00\x57\x84\xad\xe3\xf4\x79\x73\x43\x45\x95\xde\xaa\xdb\x91\x17\x72\x6f\x83\xf6\x2d\xea\x7c\x51\x59\xd2\xad\x15\xc8\xe7\xe5\x32\xa3\x09\x15\x29\xf3\xac\xa2\x08\x73\x50\xc5\x4b\x6e\x2c\x43\x66\xe8\x41\x5e\xf7\xdc\x40\xe5\x5b\xb7\x54\x12\xae\x54\x66\x67\x95\xfe\x70\xc4\x8a\x37\x24\xdf\x2d\xf8\x09\x77\xe3\x72\xa2\xaa\x6b\xdd\x3c\xff\xc8\xe3\x2c\xa6\x37\x96\xda\x52\x2b\x95\xb1\xb0\xd6\x6c\x6a\x0b\xa3\xb2\xb9\xd2\x1f\x16\x69\xde\x82\x30\xcf\x64\xed\x7a\x50\x8f\x95\x5c\xb3\x94\xaf\x99\x6e\xfb\x82\x25\x89\x89\x03\xd1\x16\x76\x63\x67\x54\x6c\x14\xf4\x88\x32\xa1\xb2\x84\xe5\xf9\x04\xdc\x56\xc7\x35\xce\xf5\x9a\x6d\xb2\x79\x31\xcd\xa6\x86\xa8\x35\x8d\x22\x96\x90\x60\x95\x89\x6f\xe6\xb4\x46\x89\x5e\x24\x49\x44\x93\xa5\x1f\x68\xf3\xc6\xdb\xe2\x75\xa3\xf5\xde\x89\x99\x89\x17\x4b\xa5\xb8\x9e\x70\xae\xdb\xcc\x84\x2b\xbf\x5f\x16\xb8\x86\x24\xcc\x12\x3b\x1c\xe6\x39\x2c\xb4\xe3\x61\xb6\xd1\xce\x50\xbb\x39\xec\x22\x8f\x4c\xad\x9f\xa8\xf2\x28\x8b\xb8\x19\xa1\xfb\x64\x7b\xa7\x62\xf7\xef\x54\xe9\x01\x0e\xb2\xc8\x86\xe7\x14\xd3\xa6\x76\xad\xd7\x1d\x31\x54\x24\x8b\x28\xbd\x8b\x6e\xa3\x68\xdf\x0d\x3d\x41\xaf\xf5\xda\xf3\xa4\xdc\x36\xdc\x0d\xa7\x0c\x82\x2c\xc9\xa7\x1d\x4d\x4d\x52\x5f\xae\xdb\x9a\x94\x7b\x90\xe6\xfb\x9f\x4d\xbb\xe7\xcb\xca\xf7\x4a\x73\xb6\xe4\x42\x38\x0a\xb7\xe2\x2a\x95\xc9\xf3\x8c\x54\xaa\xa6\x6d\x8b\xee\xe1\x1f\xc9\x8d\x7e\x7d\x33\x61\x22\x64\x72\x04\xe1\xa9\x5f\xe9\xfd\x34\xe5\x27\x6c\x2d\x0d\x64\x97\x09\x5d\x32\x32\xa7\xda\x4e\x48\x41\x7e\xcd\x64\x92\xad\x6f\x8c\x6b\xc1\x22\xa2\xcb\x37\xb6\x58\x9e\x5e\x29\xf2\x83\x2b\xf7\x89\x11\xc5\xd7\x71\x94\xdb\x80\x27\x33\x11\xf2\x7c\xc3\xd1\x33\x59\x51\x13\x3c\x47\x02\x1a\xac\x98\x79\x67\xf3\xa5\xc3\x95\x68\xac\x9b\x24\x42\x0a\x63\x12\x6a\xab\x4c\x53\x12\x31\xbd\x61\xa4\xba\x57\x98\x32\x89\x7b\x96\xfc\x51\xef\xf7\x1f\xeb\x26\x4c\x65\x63\x39\x50\x2c\x22\x5f\x33\xbd\x76\xf9\x33\xa8\x1e\x9d\xdb\x62\xea\xb8\xf5\xc3\xcc\x6d\x9b\xfb\x39\x0f\x5c\xf4\x26\xcb\x4c\xb0\x84\x2d\x69\x12\x46\x4c\xd9\x17\x5e\x3c\x13\x1a\xa4\xfc\x91\xa7\xcf\x7a\x91\xe3\xc2\xff\x5f\x5d\x3f\xa4\xb6\x0a\x83\x86\xf1\xfd\xc3\x6e\xfc\x65\x52\xbc\x24\xd2\x05\x2f\xe9\xcf\xcd\xcd\x92\x6a\x87\xcb\x06\x5b\xb9\xc9\x94\xae\xd8\xda\x2e\xa2\x96\xcc\x98\xd6\x87\xe1\xb5\x5b\xa6\xae\xdd\x67\xd7\xf2\xd1\x58\xe2\xd2\x51\x80\x3c\xd8\x84\x2c\xd5\xf3\x45\x5d\x0f\x6d\x82\xa2\x29\x60\x67\x19\xb2\x8f\x5c\xa5\x83\x50\x67\x3d\x85\xdb\x86\xce\x25\xe4\xd5\xc2\x45\x68\x66\x27\x40\xe8\xe8\x09\x66\xaf\x80\xd1\xf6\xca\xf1\x88\x71\x04\x1e\x1f\xba\xb6\x3b\x67\x3a\xd4\x38\xa8\x71\x8d\x26\x4a\xdf\x7e\x1e\x87\x2a\xd3\x47\x10\x69\xd3\xda\x74\xa8\x51\xca\xc1\xad\x45\xc3\xf4\x2f\xa5\xc0\x74\xb9\x80\xed\xd8\x95\x05\xe6\x6d\xde\x4d\x10\xaa\x20\x54\x41\xa8\x82\x50\x05\xa1\x0a\x42\x15\x84\x2a\x08\x55\x10\xaa\x20\x54\x41\xa8\x82\x50\x05\xa1\x0a\x42\x15\x84\x2a\x08\x55\x10\xaa\x5e\xaa\x50\x35\xe6\xdc\x75\x05\xe6\x1b\x5a\xc4\x3a\x33\x68\xa2\x3a\x97\x6b\x82\x10\xcc\xf7\x48\x11\x4d\xe7\x36\xd1\x46\x8a\x28\x4d\xe3\x64\xf7\x19\xbc\x26\x3a\xc1\x7d\xf4\xef\xa2\x54\xda\xde\x58\x85\xeb\xe3\xdb\x36\xf2\xf8\x8a\xf3\xef\xbc\x01\x5d\xae\xcd\xc5\xd0\x32\x51\xc6\x4d\x37\xb8\xe9\x66\xa4\xba\x58\x07\x29\x36\x8e\xb5\x3f\x27\xdc\x6f\x83\x65\x6b\x57\x3a\x0d\x78\x54\xec\x78\x47\xe0\x51\x01\x8f\x8a\x89\xaf\xd5\x1d\x24\xcd\xe8\xc6\x85\x01\x2e\x6f\xbb\x2f\xaf\xe9\x68\x81\xc6\xbd\x35\x2f\x6f\x89\xee\x0a\xc1\xe1\xde\x1a\xdc\x5b\x83\x7b\x6b\x70\x6f\x0d\xee\xad\xc1\xbd\x35\xb8\xb7\x66\x02\xf7\xd6\x1c\x4d\xfc\xcf\xba\xb2\xe6\xd0\xd6\x1e\x69\xee\xfa\x48\x73\x37\x05\xd0\x83\xdc\x76\xd3\x3c\x58\x8c\xc1\xc2\x8c\x00\xb7\x74\x91\xd6\xae\x67\x71\xf6\x98\x8c\x76\x1b\x55\x43\x32\xbb\x1d\x62\xeb\x6d\x9c\xc8\xef\xcf\x0d\x25\xd7\x40\x0a\xa1\xcf\x95\x7f\x7d\xff\x25\x77\x81\xd3\xdb\x4f\x53\x46\x9b\xe1\x3d\x35\x1f\xeb\x38\x8c\xd3\xb6\xcc\x1a\xa3\xbf\xb2\x54\x37\xe4\xde\xf4\x4c\xa7\xab\x46\x65\xae\x0c\xb1\x2c\xb8\x96\x77\xb0\x30\x98\xfe\xf3\xcc\xad\x2d\x05\xcd\x4f\xc1\xfb\xbf\x5f\xf4\x14\xbc\xcf\x30\x05\x87\x9c\x82\xfb\x23\xe1\xfd\x1c\xfc\xf4\x70\xd9\x93\x50\x2a\xcc\xc2\x01\x67\xe1\x21\x79\xca\xcf\xc3\x77\xef\x3f\xbe\xff\xf2\xfe\x92\x67\xa2\xd5\x6f\x30\x17\x87\x9b\x8b\xd2\x7d\xe5\xe0\x64\xfc\x74\xff\xe5\xc3\xa7\x9f\x1f\x2e\x79\x36\xba\xee\xc3\x74\x1c\x6e\x3a\xae\x18\x0d\x0f\xcf\xc5\xbf\xbd\xbf\x7b\x77\xc9\x13\xf1\x6f\x8c\x86\x98\x85\x03\x6e\x13\xf7\x93\xe7\x7c\x9f\x78\xf7\xe5\xed\xdf\x2e\x79\x1e\x1a\xfa\x89\x89\x38\xe4\x44\xec\x95\xab\xd5\x57\x73\x7c\x8c\xed\x9e\xa6\x36\x7c\x75\xc5\xc8\xdf\x3f\x7f\x24\xba\x16\xfa\xf5\xcb\x14\xcb\x3d\x2b\x5c\x9c\x9a\x7b\x25\x7d\x5c\xa8\x89\x46\x0b\xeb\xe2\x34\x36\x5b\x72\x1e\x76\xbb\xfd\x97\x2e\xad\x69\xc0\xc3\x0b\xa4\x6f\xff\xe0\xe9\xea\xbe\xd4\xe1\x58\x52\x40\xe1\x06\xa2\x70\x98\x8a\xa0\x71\xe3\xa1\x71\x98\x8d\xa0\x72\x83\xcf\xc8\x0a\x95\xc3\x9c\x04\x9d\x1b\xc1\xac\xac\xd2\x39\x4c\x4b\x50\xba\xf1\x50\x3a\xcc\x46\xd0\xba\xa1\x37\x92\x1b\xb4\x0e\x13\x12\xd4\x6e\x5c\xd4\xce\x53\xba\x72\x84\x45\x33\x0e\x07\xca\x58\xa1\x8c\xf6\x82\xf7\x63\x12\xaa\xec\xbc\x12\x1e\x11\xb0\xe9\x8e\xd4\x2a\x95\x9b\xd9\x5f\xa8\x7b\xf1\x44\x32\x6f\x60\x7e\x9f\x92\x83\xa3\x32\xc5\xc7\x1a\xa0\x81\x4c\x1c\x88\xc6\x68\x73\xa2\x20\x13\xc7\x58\x63\xf8\x4e\x5e\xc6\x11\xcd\xd7\x53\x34\xdf\x44\x4c\x06\x62\xfa\x60\x45\x26\xbc\x70\x23\xa6\x6f\x4c\xe4\x62\xc0\x98\x3e\xbf\x0c\x88\xf4\x51\x46\xd9\x9a\x05\x11\xe5\xeb\xa6\x27\x7f\x7b\x37\x47\xe2\x72\x9a\xfb\xdc\x27\x72\x41\xf4\x9c\x20\xf7\x79\xd1\xbf\x98\xa2\xdf\xea\xa2\xc7\x7c\x56\xaa\xfd\xb0\x7e\xc0\x1b\x9b\x45\xfa\xdf\x37\x13\x3e\x37\x29\x73\xf3\x9b\xbd\xda\x55\x3d\x38\x0e\xdc\xd6\x0d\xc4\x4f\x32\xb9\x8b\xa2\x3c\x3f\xea\x58\x38\x44\x6d\x5d\x2f\xe9\x72\xd5\xbd\x6f\xc5\x08\xd6\x4d\x5c\xeb\x86\x6b\xdd\x70\xad\x1b\xae\x75\xbb\xa4\x6b\xdd\x76\xdf\xea\xd6\x4f\x82\xfc\x5e\xee\x73\x3b\x70\x9d\x5b\x4b\x2d\x7d\xc1\xd7\x1c\xf4\x72\x49\xdd\x81\x3b\xea\x5a\x6a\x69\x35\xf9\x25\x6e\xa7\xc3\xed\x74\xb8\x9d\x0e\xb7\xd3\xe1\x76\xba\x5e\x6e\xa7\xdb\x71\x39\xdd\xa5\xdc\xd6\xd3\x7e\x9d\x71\x95\xde\x84\xae\xd2\x3b\x78\x93\x5e\x4f\x9b\x98\xc1\xee\xd0\x3b\x74\x85\x5e\x4f\x5b\xf1\x31\x5e\x9e\xb7\xe3\xee\xbc\xb3\x90\x75\x37\xb4\x1a\xa0\x7a\x78\x50\xdd\x54\x05\x6e\x43\x48\x05\xf7\x04\xf7\x04\xf7\x04\xf7\xbc\x24\xee\xb9\x07\x7c\xf6\x79\x87\x43\x2f\xf8\xf3\x10\xff\x9c\x4c\x83\x9b\x92\xc2\x43\xa8\xb0\xd7\xcb\x72\x00\x0c\x01\x0c\x01\x0c\x01\x0c\x01\x0c\x3b\x01\x86\xbb\x88\x61\xcf\x37\x31\x81\xc1\x4d\x85\xc1\x1d\x86\x70\xfd\xde\xa5\x37\x14\x8a\x3b\xc8\xe2\x7a\xbd\x86\x6e\x8c\x44\x6e\x17\x92\x9b\x80\xfb\x74\x15\x17\x5d\xb2\x9b\xe0\x51\x1e\x82\xfb\xf3\x5e\x99\x1d\x02\xa1\x93\x22\x9e\xbd\x02\x49\xdb\x43\xe7\x21\xc9\xe1\x63\x19\xb7\x6a\xbe\xf3\xcd\x40\x44\x0a\x22\x52\x8e\x9e\x34\x3d\xc7\x38\x1e\x55\xb1\x3e\x2e\x56\x3c\xa5\x66\x1d\x06\xf4\xc8\x51\x59\xa0\x86\x17\xa4\x97\x2e\x71\x95\x0b\xd8\xa3\x26\x17\xa7\xbf\xcd\xbb\x0c\x62\x19\xc4\x32\x88\x65\x10\xcb\x20\x96\x41\x2c\x83\x58\x06\xb1\x0c\x62\x19\xc4\x32\x88\x65\x10\xcb\x20\x96\x41\x2c\x83\x58\x06\xb1\x0c\x62\x19\xc4\xb2\xbd\x79\xaa\x5c\xa6\xad\x21\x70\xa5\x35\xb1\x05\xfe\x1b\x11\xba\x3c\x37\xbd\xc6\x0b\x0e\x90\x1e\x51\x1a\x23\x9f\xc9\xf8\x98\x14\xc6\x9b\x4c\x0e\x34\x7a\x07\x8d\x2e\x92\x18\x77\x49\xa0\x0f\x9a\x87\x07\x7b\x76\x33\xe7\xbf\xef\xe6\x1c\x35\xd7\xff\xa2\x41\x3a\x23\xe4\xbd\xfe\xe9\x7f\xbf\xa6\x5c\xa4\x94\x0b\x45\x82\x28\x53\x29\x4b\x6e\xdc\x28\x07\x8e\x97\x90\x88\x7f\x63\xe4\x2a\xcf\x85\x74\x55\xb7\xe0\x9b\xa2\x87\xb1\x84\x79\x53\x73\x3c\x3e\xf7\x8d\x66\xa1\x69\xad\x69\xa7\x7e\x3b\x63\xe5\xdb\xe4\x0e\x08\x99\xd2\xfb\x7e\x2a\xec\x41\xcd\xda\xb7\xfa\xe6\xe9\x32\x26\x60\xd0\xc6\xa5\xbb\xb5\x9f\xbd\xfa\x2c\xdb\xd5\x24\x93\x35\x96\xb9\xe3\x73\x59\xc3\x0b\xc4\xff\x0d\x5e\x20\xf0\x02\x99\x84\x17\xc8\x94\xb2\x5e\xf7\xe0\x6a\x01\x77\xbf\x46\xee\x15\x7d\x2c\xf4\x2d\x1f\xe3\xed\x6d\x8a\xfe\x7e\x1e\x2c\xef\xa3\x5c\xde\xbb\x42\x85\x65\xfa\xc7\x05\x51\x16\xd8\x91\x39\x5b\x48\x8b\xf1\x3d\x6b\x2f\xbc\x73\x9c\xbc\x61\x3a\x22\x63\xd6\xdf\x62\xce\x88\x90\xe2\x46\xb0\x25\x35\xdd\xed\x1e\x3c\x23\x5f\x72\x1f\x18\xab\xbb\xe5\x03\xed\x96\x15\xbe\x5e\xb3\x90\xd3\x94\x45\xcf\xce\xc9\xa3\xec\xc2\x23\x78\x74\xed\x90\x9d\xc1\xd4\x64\x99\xe8\x1d\x68\xcc\x12\x2e\xc3\x9c\x6f\x16\x9b\x51\xdd\xee\xbc\xcf\x33\xa5\x2b\x59\x06\xdc\x54\x7f\xd3\x37\xc8\x3d\x64\x51\x3a\xd8\x70\xfd\x05\x53\xcf\x35\xa3\xa2\xb6\x8e\x35\xe3\x67\xea\x74\x6f\xaa\x34\x28\xef\x7c\xc7\xe2\x84\xe9\xce\x0d\x7f\x24\x71\xc4\xa8\x62\xb9\x26\x79\x9f\xc8\x98\x2e\xcd\x28\xdf\xcb\x88\x07\xcf\xd7\xb6\xa3\xad\x0a\xe7\x3b\x2c\xcc\x0b\xd0\x53\xe1\xf5\xec\xcf\x33\x52\x3a\x24\x87\x2c\x66\x22\x64\x22\x2d\x44\x74\x46\x64\x12\xaf\xa8\xd0\xdd\xe6\xb0\xd4\xed\x82\x46\xde\x8d\xe6\xeb\x2b\xfb\xe7\xaf\xaf\xc8\x82\x0b\x43\x94\x92\xfc\x61\x34\x0c\x8d\x5c\x75\x6b\x49\x6a\x58\xa8\x0e\xb6\xf8\x2b\x55\x7c\xc9\xba\xae\xcc\xc8\x7b\x6e\xde\xcd\x52\xd5\x65\xb2\xdd\x36\xa3\x47\x5a\x2f\x32\xeb\x39\x63\x56\x0e\x99\xae\xea\x06\xcf\xd6\xf0\x9d\x6f\x5b\x37\x43\xd7\x60\x31\x34\x0d\xd3\x6b\xd0\x4a\x3e\x91\x25\x4d\xe6\x74\xb9\xe1\xde\x98\x2f\x24\x2c\x59\xc8\x64\xad\x7b\xbc\xb6\x37\x3e\x55\xda\xb3\xbb\x33\xcc\xab\xe9\xdf\xab\xd8\xf6\x1c\xd7\x73\x3e\xe0\x61\xe1\x03\x63\x5c\x03\x8c\x57\x52\x3e\x82\x8a\xa5\x1e\x27\x7a\xf1\x7f\x56\x1a\x2a\x2f\x1b\x7b\x10\x59\xc0\x92\xcd\x87\xcd\x88\x75\xa4\x35\x52\x74\x79\x35\xbd\xb2\x6d\xb8\x22\x37\x6e\x7a\x6d\x4e\x3f\xf5\x86\x5c\xfd\x85\x06\xdf\xf4\x76\x48\x84\xfa\x53\x34\x8a\xe4\x93\xf9\x50\xa5\xe3\xac\x47\x88\x7b\x8b\x37\x0b\xf1\x2d\x98\xe7\x25\xbd\x21\x57\x3f\xc9\x84\x95\x8a\x25\x01\x55\x01\x0d\x75\xeb\x5d\xff\x18\xeb\x64\xcb\x53\x76\xb9\xdf\x2a\x70\x91\x97\x51\x37\xdd\xe2\xea\x64\x9d\xc0\xae\xfe\x1c\x05\xa0\x1f\x57\xea\x31\x6b\x14\x23\xda\xe9\x1f\x7b\xd7\xcd\x19\xa0\x07\xb7\xdd\xf4\x70\xdb\xcd\xe4\xa0\x12\xee\xbc\x99\xe6\xe1\x63\x0c\x56\x68\x64\x08\xa7\x83\xfb\x6f\x86\x14\x9d\x8f\xb8\x0b\x67\x77\x35\x71\x2f\x4e\x03\x41\xb9\xc5\xab\x71\x01\xe4\x8e\x56\x98\x47\x75\x65\xee\x28\x56\xb2\x09\x0a\x90\x78\x1f\xda\x94\x22\x27\x72\x5f\x22\x04\x49\x6c\x1a\x21\x48\xbe\x04\x41\xb2\xad\x2b\x79\x01\x2c\x46\x61\x7c\xf6\x00\x8b\x89\x98\x1e\x60\x0b\x58\xa0\x0b\x59\xe8\x81\x2d\x80\x2d\xf6\x63\x0b\x19\xb6\x74\x1d\x82\x0c\xc7\x7c\xfe\xaa\xfd\xf0\x25\xdc\x80\x20\xc3\xb1\x5e\xcc\x2b\xc3\x8b\xca\xaf\x27\xc3\x11\xad\x74\xc8\xa7\x83\x7c\x3a\xc8\xa7\x83\x7c\x3a\x97\x94\x4f\x07\x97\xee\xe2\xd2\x5d\x5c\xba\x8b\x4b\x77\x91\x16\x08\x69\x81\x90\x16\x08\x69\x81\x86\x4e\x0b\x84\x4b\x77\x8f\xac\x33\x72\x18\x4d\x28\x87\x11\x2e\xdd\xc5\xa5\xbb\x9d\x5e\xba\x2b\xc3\x94\xad\x63\x73\xd8\x6e\x0b\x30\x7f\x71\x05\x02\x34\x0f\x02\x9a\x7d\xf7\x8f\x17\x38\xfb\x1a\x5e\x18\x78\xae\xce\x7b\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\xe8\xb6\xcc\x18\x00\x34\x00\x34\x00\x34\x00\xf4\x64\x01\x74\xc2\x72\xb0\xaa\x6d\x57\x22\xb5\xe5\x68\x07\x45\x7f\x2e\x8a\x7e\x9b\x17\x0d\x28\xdd\x3f\x94\xae\x1d\x88\x91\xe2\xe9\xda\xba\x5e\x12\xa8\xde\xfb\x56\x00\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\xb7\x65\xc6\x80\xac\x81\xac\x81\xac\x81\xac\x27\x8c\xac\x6d\xe1\xbf\x66\x32\xa5\x6d\xa1\x6a\x5b\xe4\x7f\xe8\x22\x81\xa8\x87\x40\xd4\xa5\x01\x18\x2d\x9a\x2e\xd5\xf1\xb2\x90\x74\xcd\xec\x07\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x06\x8a\x6e\xcb\x8c\x01\x45\x03\x45\x03\x45\x03\x45\x4f\x16\x45\x2b\x16\x24\x2c\x6d\x87\x41\x3f\x98\xb2\x00\x9f\xfb\x87\xcf\xb6\xe7\x47\x4a\x9d\x6d\xe5\x2e\x09\x37\x6f\x4e\x74\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\x66\x70\xe6\xb6\xcc\x18\x38\x33\x38\x33\x38\x33\x38\xf3\x84\x39\x73\xf2\xc8\x03\x46\x83\x40\x6f\xbf\xda\xe2\xcd\xa6\xcc\x3b\x5b\x26\xb8\xf3\x10\xdc\xb9\x3c\x02\xa3\xe5\xcf\xe5\x4a\x5e\x16\x87\xae\x7b\x01\xc0\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xc1\xa3\xdb\x32\x63\xe0\xd1\xe0\xd1\xe0\xd1\xe0\xd1\x53\xe7\xd1\xad\x82\x68\x10\xe8\xc1\x08\xf4\xb8\xd1\xf3\x05\x32\x67\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\x66\xc0\xe6\xb6\xcd\x18\x60\x33\x60\x33\x60\x33\x60\xf3\x64\x61\xb3\xf9\xea\xad\x65\x1e\x6b\x1a\x37\x85\xce\xce\xec\x8b\x90\x3f\xf2\x30\xa3\x51\xb9\x57\x68\xbe\x83\x7f\x6b\x8a\xfd\x9f\x34\x9e\x91\x90\xc5\x09\x0b\xf4\x2a\xfe\x63\xbe\xf7\xba\x32\xa5\x5c\x15\x5c\x69\x03\x14\xe4\x5c\x95\x70\xa1\x52\x46\x8b\xf5\x13\x10\xbb\x6b\x88\x6d\x1e\x69\x29\x76\x3e\x86\x1f\xb9\x1a\x99\x1b\xf5\x9a\x06\x2b\x2e\x58\xf2\x3c\x8b\xbf\x2d\xf5\x2f\xd4\x4c\x9f\x6f\x66\x8f\xaf\x67\xe6\x75\x7d\xaf\x0f\x0a\x83\xc0\x6d\xd3\x7f\x1d\x10\xee\x7c\x30\xc0\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xc1\xb8\xdb\x36\x63\x60\xdc\x60\xdc\x60\xdc\x60\xdc\x13\x67\xdc\x4c\x84\xb1\xe4\xcd\x13\x7c\x34\x43\xdc\xef\x7d\xa9\x40\xdc\x93\x45\xdc\xf9\x18\x02\x71\x0f\x8f\xb8\xf3\xc1\x00\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x06\xe2\x6e\xdb\x8c\x01\x71\x03\x71\x03\x71\x03\x71\x4f\x1d\x71\xeb\x2d\x55\xcb\x7c\x5b\x17\x09\xb6\x3d\x5d\xb6\xad\xc7\x0f\x5c\x7b\x04\x5c\xdb\xb4\x08\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\x1b\x4c\xbb\x65\x33\x06\xa6\x0d\xa6\x0d\xa6\x0d\xa6\x3d\x71\xa6\x6d\xc6\x2d\x31\xed\x6a\x15\x6c\x7f\xd4\xe5\x7e\xd6\x7f\x00\xdd\x9e\x2c\xdd\x2e\x06\x11\x88\x7b\x78\xc4\x5d\x8c\x06\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x37\x38\x77\xdb\x66\x0c\x9c\x1b\x9c\x1b\x9c\x1b\x9c\x7b\xe2\x9c\x5b\x14\xd8\xb2\x4d\xcc\x9d\xd3\x50\x50\xee\xc9\x52\xee\x7c\x0c\x3f\x96\x99\x2d\xa0\x76\x2f\x50\x3b\xef\x7c\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\x6d\x30\xed\xb6\xcd\x18\x98\x36\x98\x36\x98\x36\x98\xf6\xc5\x30\xed\xdb\x7f\xe5\xff\xfe\x0d\xb7\x4d\x02\x75\x1f\x44\xdd\xe1\xc6\xbd\x93\x80\xde\xb8\x67\x12\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x7b\x24\xb8\x14\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\xfb\x5c\x33\xe6\x9a\xa6\xab\x60\xc6\x4b\x9f\x8a\x89\x0a\x64\xcc\xae\x89\xca\x02\x43\x32\xcd\x19\x89\xd1\xb5\x85\x61\x71\x22\x4d\x57\x6e\xd7\x5f\x6c\x7b\x6d\xd9\x36\xc4\x34\x2d\x71\x11\x3d\xb1\xf4\x89\xc2\xd5\x18\x3c\x1f\x3c\x1f\x3c\x1f\x3c\x1f\x3c\xff\x44\x9e\x6f\x7f\xfd\xdb\x51\x58\xbf\xcc\xf2\x85\xb7\x6f\x72\x41\xbe\x71\x11\xb6\xcc\xf4\xaf\x8b\xfd\xac\xd9\xb3\xbb\xbd\x8f\xde\x12\x17\x1b\xf5\xab\x8d\x63\x6a\xa9\x6c\x28\x02\x23\x51\x04\xa0\x06\xec\x51\x03\xa0\x04\x40\x09\x80\x12\x00\x25\x00\x4a\x00\x94\x00\x28\x01\x75\x4d\x85\x12\x00\x25\x00\x4a\x00\x94\x00\x28\x01\x50\x02\xa0\x04\x8c\x51\x09\x30\x12\x80\x6b\x66\xcd\x01\xb4\x0c\xf9\xc7\xc1\xf7\x21\x5d\x40\xba\x80\x74\x01\xe9\x02\xd2\xc5\xc4\xa4\x0b\x26\xc2\x58\xf2\xd6\x2f\x4d\xf5\xa5\x22\x12\xe1\x02\x74\x87\x7c\x34\x11\x89\x30\xc0\xb5\xa9\xf9\x0b\x0a\xfd\x01\xfa\x03\xf4\x07\xe8\x0f\xd0\x1f\xa0\x3f\x40\x7f\x80\xfe\x00\xfd\x01\xfa\x03\xf4\x07\xe8\x0f\xd0\x1f\xa0\x3f\xb4\x6c\xc6\x80\xf3\x81\xf3\x81\xf3\x81\xf3\x81\xf3\xa7\x8a\xf3\x5b\x0f\x44\x68\x17\xe9\x23\x10\xe1\x22\x04\x01\x88\x01\xfd\x05\x22\x40\x08\x80\x10\x00\x21\x00\x42\x00\x84\x00\x08\x01\x10\x02\x20\x04\x40\x08\x80\x10\x00\x21\x00\x42\x00\x84\x00\x08\x01\x9d\x99\xb1\x72\x20\x42\xcd\x01\x14\x81\x08\x50\x2e\xa0\x5c\x40\xb9\x80\x72\x01\xe5\xe2\x5c\xe5\x42\xef\x7a\x5b\x8e\x42\xd0\x45\x22\x02\xe1\x12\x04\x07\x3d\x92\x88\x3e\x18\x20\xfa\xc0\xb4\x08\x82\x03\x04\x07\x08\x0e\x10\x1c\x20\x38\x40\x70\x80\xe0\x00\xc1\x01\x82\x03\x04\x07\x08\x0e\x10\x1c\x20\x38\x40\x70\x68\xd9\x8c\x81\xdf\x83\xdf\x83\xdf\x83\xdf\x83\xdf\x4f\x92\xdf\xb7\x1f\x76\xd0\x1a\xc3\x47\xc8\xc1\xe4\x15\x00\xd0\xff\x1e\xc3\x0d\x40\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x41\xfe\x3b\x0f\x35\xd8\x3c\x7c\x22\xcc\x00\x32\x05\x64\x0a\xc8\x14\x90\x29\x20\x53\x9c\x29\x53\x98\xe1\x4c\x4c\x73\x5b\x8d\x35\xf8\xa8\xcb\xfd\xac\xff\x80\x80\x83\x0b\x90\x1b\x8a\xe1\x44\xd4\x41\xff\x51\x07\x45\xef\x43\x80\x80\x00\x01\x01\x02\x02\x04\x04\x08\x08\x10\x10\x20\x20\x40\x40\x80\x80\x00\x01\x01\x02\x02\x04\x04\x08\x08\x10\x6d\x9b\x31\x30\x7d\x30\x7d\x30\x7d\x30\x7d\x30\xfd\xe9\x32\xfd\xd6\xe3\x0f\x5a\xe6\xfa\x08\x42\xb8\x0c\x55\x00\x8a\x40\x7f\x91\x08\x50\x03\xa0\x06\x40\x0d\x80\x1a\x00\x35\x00\x6a\x00\xd4\x00\xa8\x01\x04\x6a\x00\xd4\x00\xa8\x01\x50\x03\xa0\x06\x40\x0d\xe8\xcc\x8c\x95\xc3\x11\xea\x4e\xa0\x88\x49\x80\x7e\x01\xfd\x02\xfa\x05\xf4\x0b\xe8\x17\x67\xea\x17\xb1\x7e\xa2\xd9\x23\x3c\xca\x28\x5b\xb3\x20\xa2\x7c\xdd\x6e\x78\xc2\x7d\xfe\x88\x5f\xcc\x23\xde\xea\x47\x20\x52\xe1\x02\x34\x89\xda\x91\x45\xd0\x42\xff\x41\x0b\xb5\x03\x01\xc5\x02\x8a\x05\x14\x0b\x28\x16\x50\x2c\xa0\x58\x40\xb1\x80\x62\x01\xc5\x02\x8a\x05\x14\x0b\x28\x16\x50\x2c\xa0\x58\xb4\x6d\xc6\xc0\xff\xc1\xff\xc1\xff\xc1\xff\xc1\xff\x2f\x82\xff\xb7\x1e\xca\xd0\x9d\x06\x80\xa8\x86\x8b\x53\x10\xa0\x1e\xf4\x17\xe0\x00\xe5\x00\xca\x01\x94\x03\x28\x07\x50\x0e\xa0\x1c\x40\x39\x80\x72\x00\xe5\x00\xca\x01\x94\x03\x28\x07\x50\x0e\xa0\x1c\xf4\x1e\xeb\x70\xe0\x30\x8a\xb0\x07\xc8\x1e\x90\x3d\x20\x7b\x40\xf6\x80\xec\x71\xae\xec\x21\xc3\x96\x83\x1c\x64\x88\x90\x86\x4b\x10\x24\x64\x88\x00\x86\x01\x02\x18\x64\x08\xd1\x01\xa2\x03\x44\x07\x88\x0e\x10\x1d\x20\x3a\x40\x74\x80\xe8\x00\xd1\x01\xa2\x03\x44\x07\x88\x0e\x10\x1d\x20\x3a\xb4\x6d\xc6\xc0\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\x27\xc8\xed\xdb\x0f\x4e\x68\x89\xdd\x23\x14\x61\xe2\xe4\x1f\xd4\xbf\xc7\xc0\x03\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\x7f\x10\xff\xf6\xcd\xd8\x46\x98\x41\xf9\xe8\x89\xa0\x02\x88\x13\x10\x27\x20\x4e\x40\x9c\x80\x38\x71\xbe\x38\x91\xb2\x75\x6c\x78\x48\xdb\xc1\x05\x5f\x5c\xc1\x08\x32\xb8\x0c\xa9\xc1\x8f\x27\x82\x0d\x06\x09\x36\xf0\xdd\x0f\x09\x02\x12\x04\x24\x08\x48\x10\x90\x20\x20\x41\x40\x82\x80\x04\x01\x09\x02\x12\x04\x24\x08\x48\x10\x90\x20\x20\x41\xb4\x6d\xc6\xc0\xf5\xc1\xf5\xc1\xf5\xc1\xf5\xc1\xf5\x27\xcc\xf5\xbb\x08\x3e\x68\x95\xed\x23\x08\xe1\x42\x94\x01\xa8\x02\xbd\x06\x23\x40\x11\x80\x22\x00\x45\x00\x8a\x00\x14\x01\x28\x02\x50\x04\xa0\x08\x40\x11\x80\x22\x00\x45\x00\x8a\x00\x14\x01\x28\x02\x5d\x99\xb1\x4a\x50\xc2\xf6\x11\x14\xc1\x09\x10\x31\x20\x62\x40\xc4\x80\x88\x01\x11\xe3\x4c\x11\x23\x61\x39\x0c\xd7\xdb\x8c\x44\x6a\x23\xdf\x6e\x98\xc2\xe7\xe2\x11\x6f\xf3\x47\x20\x60\xe1\x02\x64\x89\xda\x91\x45\xe8\x42\xff\xa1\x0b\xb5\x03\x01\xc9\x02\x92\x05\x24\x0b\x48\x16\x90\x2c\x20\x59\x40\xb2\x80\x64\x01\xc9\x02\x92\x05\x24\x0b\x48\x16\x90\x2c\x20\x59\xb4\x6d\xc6\xc0\xff\xc1\xff\xc1\xff\xc1\xff\xc1\xff\x2f\x82\xff\xb7\x1e\xce\xd0\x9d\x06\x80\xc0\x86\x8b\x53\x10\xa0\x1e\xf4\x17\xe2\x00\xe5\x00\xca\x01\x94\x03\x28\x07\x50\x0e\xa0\x1c\x40\x39\x80\x72\x00\xe5\x00\xca\x01\x94\x03\x28\x07\x50\x0e\xa0\x1c\xf4\x1e\xec\x70\xe0\x30\x8a\xb0\x07\xc8\x1e\x90\x3d\x20\x7b\x40\xf6\x80\xec\x71\xb6\xec\x61\x9f\xfc\x6b\x26\x53\xda\x76\xb8\x83\x2d\xfa\x3f\x74\xd1\x08\x73\xb8\x08\x91\xa2\x34\xa2\x08\x6f\x18\x22\xbc\xa1\x34\x00\x10\x27\x20\x4e\x40\x9c\x80\x38\x01\x71\x02\xe2\x04\xc4\x09\x88\x13\x10\x27\x20\x4e\x40\x9c\x80\x38\x01\x71\x02\xe2\x44\xdb\x66\x0c\x7c\x1f\x7c\x1f\x7c\x1f\x7c\x1f\x7c\x7f\xd2\x7c\xbf\x83\x70\x86\xb6\x19\x3f\xc2\x18\x2e\x46\x21\x80\x3a\xd0\x67\xf8\x02\x94\x01\x28\x03\x50\x06\xa0\x0c\x40\x19\x80\x32\x00\x65\x00\xca\xc0\x66\x83\xa1\x0c\x40\x19\x80\x32\x00\x65\x00\xca\x00\x94\x81\x0e\xc3\x16\x6a\x0f\xa1\x08\x57\x80\x9c\x01\x39\x03\x72\x06\xe4\x0c\xc8\x19\x67\xca\x19\x8a\x05\x09\x4b\xdb\x8d\x53\x78\x30\x65\x22\x40\xe1\x02\xe4\x07\x3b\x94\x88\x4c\xe8\x3f\x32\xc1\xf6\x3c\x84\x07\x08\x0f\x10\x1e\x20\x3c\x40\x78\x80\xf0\x00\xe1\x01\xc2\x03\x84\x07\x08\x0f\x10\x1e\x20\x3c\x40\x78\x80\xf0\xd0\xb6\x19\x03\xc3\x07\xc3\x07\xc3\x07\xc3\x07\xc3\x9f\x26\xc3\x6f\x3d\x16\xa1\x45\x8e\x8f\x20\x84\xe9\xab\x00\x50\x00\xfa\x8b\x3e\x00\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\x07\xfd\xef\x3e\xec\xa0\x7a\xfa\x44\xbc\x01\xb4\x0a\x68\x15\xd0\x2a\xa0\x55\x40\xab\x38\x5b\xab\x48\x1e\x79\xc0\x68\x10\xe8\x4d\x72\xdb\x71\x07\xa6\xec\x3b\x5b\x36\xe2\x0f\x2e\x42\x79\x28\x0f\x29\xe2\x10\x86\x88\x43\x28\x8f\x00\x14\x09\x28\x12\x50\x24\xa0\x48\x40\x91\x80\x22\x01\x45\x02\x8a\x04\x14\x09\x28\x12\x50\x24\xa0\x48\x40\x91\x80\x22\xd1\xb6\x19\x03\xe3\x07\xe3\x07\xe3\x07\xe3\x07\xe3\x9f\x36\xe3\xef\x20\x2e\xa1\x75\xce\x8f\xf8\x84\xcb\x51\x09\xa0\x10\xf4\x19\xa7\x00\x75\x00\xea\x00\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x80\x3a\x50\x69\x30\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x80\x3a\xd0\x61\xbc\x42\xfd\x29\x14\x71\x0b\xd0\x34\xa0\x69\x40\xd3\x80\xa6\x01\x4d\xa3\x1d\x4d\xa3\x93\x80\x05\x44\x2a\x5c\x8e\x06\x81\x10\x85\xc1\x42\x14\xa0\x3e\x40\x7d\x80\xfa\x00\xf5\x01\xea\x03\xd4\x07\xa8\x0f\x50\x1f\xa0\x3e\x40\x7d\x80\xfa\x00\xf5\x01\xea\x03\xd4\x87\xb6\xcd\x18\x38\x3e\x38\x3e\x38\x3e\x38\x3e\x38\xfe\x44\x39\x7e\x57\x41\x09\x88\x46\x80\x12\xb0\x89\xa3\xa1\x02\xf4\x16\x86\x00\x05\x00\x0a\x00\x14\x00\x28\x00\x50\x00\xa0\x00\x40\x01\x80\x02\x00\x05\x00\x0a\x00\x14\x00\x28\x00\x50\x00\xa0\x00\xb4\x6d\xc6\x6a\xe2\x0f\x10\x78\x00\xc1\x02\x82\x05\x04\x8b\xae\xb6\x93\x10\x2c\x5e\x92\x60\xd1\xa2\x36\x91\xb3\x69\xa8\x13\x2f\x5d\x9d\x80\x2a\xd1\x9f\x2a\xb1\xd5\xe9\xd0\x25\xa0\x4b\x40\x97\x80\x2e\x01\x5d\x02\xba\x04\x74\x09\xe8\x12\xd0\x25\xa0\x4b\x40\x97\x80\x2e\x01\x5d\x02\xba\x44\x5b\x66\xac\xac\x4b\xd4\x1c\x40\xc7\xa7\x4c\x00\xdf\x03\xdf\x03\xdf\x03\xdf\x4f\x1d\xdf\xcb\xb0\xe5\xec\x40\x3f\xcb\x10\xa9\x81\x26\x8c\xdc\x65\x88\x6c\x40\x87\x88\x7b\x07\xd9\x80\x74\xbf\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\x03\xb8\xb7\x6d\xc6\xc0\xaf\xc1\xaf\xc1\xaf\xc1\xaf\x2f\x81\x5f\xb7\xef\x79\xde\x16\xc3\x86\xd3\xf9\x34\x09\x38\xe8\x77\x8f\xfe\xe6\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x20\xdf\x5d\xbb\x9a\x6f\x9c\x3d\xe1\x65\x0e\x4a\x0f\x4a\x0f\x4a\x0f\x4a\xbf\xd9\x35\x67\x53\xfa\x58\x17\x6d\x6c\xe5\xa3\x8c\xb2\x35\x0b\x22\xca\xd7\xed\xba\x9d\xdf\xe7\x8f\xf8\xc5\x3c\xe2\xad\x7e\x04\xfc\xd0\x27\x4b\xe1\x6b\xc7\xf3\x23\x57\xe9\x4f\x32\xb9\x8b\xa2\x3c\x46\x4c\x01\xd5\xf7\xeb\xa8\x5e\x3b\x30\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\xe0\xf7\x6d\x9b\x31\x30\x71\x30\x71\x30\x71\x30\xf1\x0b\x63\xe2\xdd\xe2\x70\x90\xf0\x8b\x21\xe1\xc8\xce\x32\x3c\xf4\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x06\xef\x6e\xdb\x8c\x81\x77\x83\x77\x83\x77\x83\x77\x5f\x1a\xef\x6e\x3d\x6b\x4b\x27\xcc\x1b\x19\x5c\xa6\x4f\xcc\x41\xcb\xfb\xcb\xe6\x02\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\x0e\x52\xde\x67\x66\x97\xdd\xe7\x50\x64\x79\x01\xe1\x07\xe1\x07\xe1\x07\xe1\xdf\xec\x9a\xf3\x09\xbf\x0c\x5b\x76\x62\x97\x21\xfc\xd6\xa7\x4b\xe1\x65\x88\x7c\x2d\x23\x70\x5d\x97\x21\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x3c\x18\x7c\xdb\x66\x0c\x2c\x1b\x2c\x1b\x2c\x1b\x2c\x7b\xfa\x2c\x3b\x65\xeb\xd8\x1c\xb9\xdb\x66\xda\x5f\x5c\xc1\x60\xdb\x53\x66\xdb\x7e\x14\xc1\xb8\x47\xc1\xb8\xfd\x70\x80\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\x83\x75\xb7\x6d\xc6\xc0\xba\xc1\xba\xc1\xba\xc1\xba\x27\xce\xba\x13\x96\x53\x57\x6d\xc1\x12\xa9\xed\x47\xbb\xd4\xfb\x73\xf1\x88\xb7\xf9\x23\xc0\xbf\x27\xcb\xbf\x6b\xc7\x13\x24\x7c\x78\x12\x5e\x3b\x30\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x60\xe2\x6d\x9b\x31\x30\x71\x30\x71\x30\x71\x30\xf1\xc9\x33\x71\xfb\x88\x5f\x33\x99\xd2\xb6\x59\xb8\x2d\xfa\x3f\x74\xd1\x60\xe0\x13\x66\xe0\xa5\x71\x04\xfb\x1e\x03\xfb\x2e\x0d\x08\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x37\x98\x77\xdb\x66\x0c\xcc\x1b\xcc\x1b\xcc\x1b\xcc\x7b\xe2\xcc\x5b\xb1\x20\x61\x69\xbb\xb0\xfb\xc1\x94\x09\xca\x3d\x59\xca\x6d\x07\x10\x78\x7b\x78\xbc\x6d\x47\x02\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\x1b\x5c\xbb\x6d\x33\x06\xae\x0d\xae\x0d\xae\x0d\xae\x3d\x79\xae\x9d\x3c\xf2\x80\xd1\x20\xd0\x9b\xb0\xb6\xf9\xb6\x29\xfb\xce\x96\x0d\xce\x3d\x61\xce\x5d\x1e\x48\xf0\xee\x31\xf0\xee\xf2\x88\x80\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\x83\x7b\xb7\x6d\xc6\xc0\xbd\xc1\xbd\xc1\xbd\xc1\xbd\x2f\x83\x7b\x77\x02\xbc\x41\xba\xa7\x4e\xba\x81\xb8\x47\x83\xb8\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xc1\xb6\xdb\x36\x63\x60\xdb\x60\xdb\x60\xdb\x60\xdb\x93\x64\xdb\xea\xb6\x21\xcb\x5e\xb2\xb4\xb4\x11\xb9\xbb\xff\xe0\x5f\x79\xb5\x17\x39\x77\xc5\x92\x07\xc4\xd8\x2d\x51\x66\xdd\xf9\x07\x10\xf3\x92\xa5\x77\xf7\x1f\x7e\xa9\xf6\xf3\xd8\x50\xf2\xdd\xfd\x87\xbf\x26\x32\x8b\x3f\x72\xd5\x11\x4c\xfe\x5d\xfe\xdf\x8d\xa9\x4b\xc3\x35\x57\xba\x6f\x12\xb6\xe4\x2a\xb5\x5d\x67\x2a\xcc\xe5\x31\xf3\x9a\x8b\x85\x4c\xd6\xf9\x52\x45\x89\x05\xcc\x98\xd7\x27\xcd\xeb\xba\x41\x69\x30\xd1\xeb\xbe\xe6\x67\xd6\xe8\xa7\xfe\x78\xa6\xfd\xe3\xeb\x39\x4b\xe9\xeb\xd3\x96\xf5\xdc\x7c\x61\xee\xb7\x37\xf7\xff\xd3\x0d\xc9\x89\xef\xc0\x2f\xf6\xdb\x77\xf7\x1f\x3e\x6f\x8d\xce\x08\x5f\x07\x5f\xc9\x71\x19\x03\xff\x56\xac\xb3\x94\xa6\x5c\x2c\x9f\xd8\x7c\x25\xe5\xb7\x0d\x9d\xa7\xa9\xaa\x6f\xd9\x64\xe2\x4e\x4b\xfe\x54\x2c\x17\xe4\x1b\x17\x21\xf9\x9f\xee\x09\xff\xb0\x4f\x78\x5b\x7e\x02\xc4\xf9\x61\x5f\x31\x3d\x72\xfb\xde\xb1\x46\x63\x57\x27\x17\x97\x26\xf2\xee\x73\xc6\xce\xc3\x39\x24\x63\x48\xc6\x90\x8c\x21\x19\x5f\xb4\x64\xbc\x47\x33\xae\xa3\x15\xc5\x56\xa1\xdd\xa5\xb5\x17\xe5\xf8\x90\x74\x3c\x99\x06\x37\x15\x59\x0f\xa9\xac\x6d\x36\xb8\x4a\x29\xa1\xb5\x42\x6b\x85\xd6\x0a\xad\x15\x5a\x6b\x3f\x5a\xeb\x2e\xb1\xb5\x4f\xa3\x06\xf9\x72\x42\xf2\xe5\x61\xfd\xb2\xd7\xed\xc1\x60\x2a\xe6\x41\x19\xb3\xcd\x6e\xa8\x6a\x99\x93\x10\x33\x77\xa9\x99\xf5\x1d\x53\x61\x3d\x83\xb0\xd0\x59\x3d\x75\x74\x38\x6a\xb6\x0f\x28\x75\x07\x48\x7d\x8f\xec\x08\xbd\x38\x3b\xea\x62\x1f\x69\xdd\x8e\xc8\x68\x02\xd5\x2a\x61\x1a\x65\x96\x57\x89\xd5\x90\x6a\x0f\x99\xb5\x1b\x0e\x42\x27\x0b\x61\x47\xc0\x48\x6d\x1f\x76\x4d\x49\xfd\x7b\x3e\x97\xe1\xf3\xd6\x6b\x5e\xf9\xa5\xde\xd9\xf1\x84\x85\x5b\x6b\x5d\xcf\x2f\xec\xee\x97\xb5\x83\xcd\x8d\xdb\xb3\x5d\x9b\xe8\xc1\x80\xa6\x7e\x13\xb3\x41\x57\xfc\x09\x4b\x9f\x12\xe6\x8c\xc4\xfa\x1d\xd2\xc7\xb3\x19\xb9\x13\x84\x0b\xcb\x36\x65\x42\x32\x91\xe3\xd1\x90\x84\xc9\xf3\xe7\x4c\x90\x90\x27\x4c\x9b\x28\x96\x33\x37\x63\xd5\xf5\x0e\xdb\x41\x47\xbf\xa0\x3a\xc4\x43\x16\x59\x62\x8e\x63\x71\x22\x03\xa6\x94\xdb\xf8\x94\x4e\x95\x33\xf2\x8b\x79\xa2\x39\xe6\x9a\xbd\xab\xde\xf5\xdc\x45\xd1\x8f\x66\xa3\x1b\x26\xcf\x24\xc9\x04\x51\x29\xd5\xe6\xc6\xef\xee\x5d\x71\x25\xef\xf3\x62\x7a\xd8\xba\x5e\xb6\x1d\xd8\x63\x03\xfe\xb4\xdf\x06\xbc\xb5\xe7\xab\x91\x56\xfd\x4f\xfb\xaa\x7e\x17\x04\x2c\x1e\x6b\xdd\xbb\x33\xbd\xc6\x7c\x4d\xd4\xf4\xda\x73\xfb\x6e\xe3\x6b\xff\x4e\x02\x19\x45\x2c\xf0\xfb\x65\x18\xe2\x93\x0d\xb1\xed\xcf\x7d\x86\xf8\x6d\xde\xd5\x10\x2e\x21\x5c\x42\xb8\x84\x70\x09\xe1\x12\xc2\x25\x84\x4b\x08\x97\x10\x2e\x21\x5c\x42\xb8\x84\x70\x09\xe1\x12\xc2\x25\x84\x4b\x08\x97\x10\x2e\x21\x5c\x36\x0e\xe2\x78\x48\x69\x9a\xa9\x41\xf8\xa8\x35\xb1\x05\x42\x9c\x2a\x2b\x3d\x37\xa5\xdc\x0b\x4e\x0a\xd4\x7d\x36\x05\xf3\x63\x3b\x0e\xfa\xfc\xf8\xa1\xdb\x7f\xe9\x5a\xfc\xd6\x30\x8c\xc8\x98\xc2\x4d\xde\x07\x5a\x7e\x32\x2d\xd7\xbd\x39\x86\xd0\x9e\x83\xe6\xeb\xc1\x9e\x2d\xcd\xf9\xf4\xbb\x39\xe7\xcd\xf5\xbf\x68\x90\xce\x08\x79\xaf\x7f\xfa\xdf\xaf\x29\x17\x29\xe5\x42\x91\x20\xca\x54\xca\x92\x1b\x37\x53\x02\xc7\x73\x48\xc4\xbf\x31\x72\x95\x27\x1b\xbd\xaa\x33\x48\xa6\xe8\x61\x2c\x75\xde\xd4\x1c\xdf\xcf\x7d\xa3\x59\x68\x5a\x6b\xda\xa9\x17\x84\x58\xf9\x36\xb9\x03\x4c\xa6\xf4\xb9\x84\x0a\x7b\x90\xb4\xf6\xb7\xbe\x79\xba\x8c\x09\x18\xdc\xa9\x49\x95\x7a\xed\x9a\xaa\xf5\xcd\xf6\x2e\xbb\x71\x44\x03\x86\x95\xb7\xbd\x95\xd7\x74\x28\x3c\x86\xe0\x31\x04\x8f\xa1\xa1\xed\xc1\x84\x3d\x86\x3a\xf4\xba\xc9\x26\x6b\xca\x1a\x3a\xdd\xc0\xe3\xb5\x53\x47\x9b\xbe\xed\x57\xcb\x40\xe7\x9d\x69\xe0\x27\x33\x69\xf6\x70\x1d\xd8\xa4\x21\x6d\x52\x57\xd0\xb8\xcc\x81\xb9\x20\xca\xa2\x5b\x32\x67\x0b\x69\x05\x1d\xaf\xba\x14\x7e\x5a\x4e\xe8\x32\x1d\x91\x31\xeb\x79\x33\x67\x44\x48\x71\x23\xd8\x92\x9a\xee\x76\x0f\x9e\x91\x2f\xb9\x37\x94\x55\x60\xf3\x81\x76\x4b\x13\x5f\xaf\x59\xc8\x69\xca\xa2\x67\xe7\xee\x53\x76\xe6\x12\x3c\xba\x76\xf0\xd6\x08\x16\x64\x99\xe8\xcd\x79\xcc\x12\x2e\xc3\x9c\x74\x17\xfb\x74\xdd\xee\xbc\xcf\x33\xa5\x2b\x59\x96\x3a\xa8\xfe\xa6\x6f\x90\x7b\xc8\xa2\x74\x84\xe4\xfa\x0b\xa6\x9e\x6b\x46\x45\x6d\x1d\x6b\xc6\xcf\xd4\xe9\xde\x54\x69\x50\xf2\xfd\xae\x74\x3f\x4c\x1c\x31\xaa\x58\xae\x4e\xdf\x27\x32\xa6\x4b\x33\xca\xf7\x32\xe2\xc1\xf3\xb5\xed\x68\xab\xc7\xfa\x0e\x2b\x2e\x98\xd1\x53\xe1\xf5\xec\xcf\x33\x52\xc2\x11\x21\x8b\x99\x08\x99\x48\x0b\x77\x0a\x46\x64\x12\xaf\xa8\xd0\xdd\xe6\x98\xe3\xed\x82\x46\xde\xa1\xea\xeb\x2b\xfb\xe7\xaf\xaf\xc8\x82\x0b\x83\x0b\x93\xfc\x61\x34\x0c\x8d\x70\x79\x6b\x99\x7a\x58\xe8\x4f\xb6\xf8\x2b\x55\x7c\xc9\x3a\x31\xcd\xc8\x7b\x6e\xde\xcd\x52\xd5\x65\xb2\xdd\x36\xa3\x4c\x5b\x7f\x42\xeb\x43\x65\x56\x0e\x99\xae\xea\x06\xcf\xd6\xf0\x9d\x6f\x5b\x37\x43\xd7\x60\x31\x34\x0d\xd3\x6b\xd0\x4a\x3e\x91\x25\x4d\xe6\x74\xb9\xe1\x2c\x9b\x2f\x24\x2c\x59\xc8\x64\xad\x7b\xbc\xb6\x37\x3e\x55\xda\xb3\xbb\x33\xcc\xab\xe9\xdf\xab\xd8\xf6\x1c\xd7\x73\x3e\xe0\x61\xe1\x0d\x65\x9c\x44\x8c\x7f\x5a\x3e\x82\xca\xa4\xc4\x33\x7f\xf5\x6e\x20\xb3\xd2\x50\x79\x07\x02\x4f\x99\x0b\x2c\xb5\xf9\xb0\x19\xb1\x5e\xde\xc6\x29\xa1\xbc\x9a\x5e\xd9\x36\x5c\x91\x1b\x37\xbd\x36\xa7\x9f\x7a\x43\xae\xfe\x42\x83\x6f\x7a\xff\x25\x42\xfd\x29\x1a\x45\xf2\xc9\x7c\xa8\xd2\x71\xd6\x37\xc8\xbd\xc5\x9b\x85\xf8\x16\xcc\xf3\x92\xde\x90\xab\x9f\x64\xc2\x4a\xc5\x92\x80\xaa\x80\x86\xba\xf5\xae\x7f\x8c\x75\xb2\xe5\x29\xbb\xdc\x6f\x15\xb8\xc8\xcb\xa8\x9b\x6e\x71\x75\xb2\x4e\xe0\x28\x72\x8e\x16\xd4\x8f\x9f\xff\x98\xd5\xaa\xa9\x1e\x2d\x62\xa3\x54\xee\x3c\x59\x14\xca\x92\xd5\x47\xdb\x02\x66\xd5\x83\xc4\x8d\xa9\xc7\x1f\x77\x9f\x29\xd6\x2c\x59\xb2\x83\x9f\x32\x7d\xc7\x96\x3c\xb8\xd9\xfa\xfc\xcb\x3e\xdd\x98\x8e\x18\xd3\xe1\xa6\x55\x38\xb7\x67\x61\xb8\x2f\x65\x9d\xc3\x69\x67\x64\xa7\x9d\x31\x98\xbd\xc9\x61\xac\xb2\x6b\xc9\xf4\xac\x4d\xa7\x97\xec\xe9\xc9\xe7\x67\x76\xb3\x7a\xfb\xe9\x6a\x7e\x56\xdc\x05\x62\x9a\x96\x32\x5d\x56\x16\xac\xcd\xc1\x7a\x31\x9e\x0f\x66\x61\xea\x38\x77\xea\x2f\xf9\x33\xa6\x86\x31\x6b\x3f\xfc\xc2\xb2\xa7\x36\x1c\x3d\x84\x21\x22\x0c\x11\x61\x88\x08\x43\x44\x18\x22\xc2\x10\x11\x86\x58\x6d\x30\xc2\x10\x11\x86\x88\x30\x44\x84\x21\x22\x0c\x11\x61\x88\x08\x43\x44\x18\xe2\xc6\x84\x41\x18\x22\xc2\x10\x2f\x2b\x0c\xf1\x00\x83\xdf\x8f\x94\x5e\x4a\x06\xd5\x66\x60\xad\xed\x1c\xaa\xd3\x85\xb1\x23\x60\xa5\x87\xb3\xa8\xb6\x43\x4b\xc7\x1a\x15\x71\xa0\x75\x3b\x5f\x5a\xa8\xb2\x50\x65\x3b\x99\x58\xa3\x88\x8c\x38\xa3\xf2\x23\xc8\xa6\x7a\x72\xed\x2f\x26\x9f\x6a\xcb\x86\xf8\xa4\x8c\xaa\x30\xcb\x3d\xe5\x54\x85\x9c\x09\x39\x13\x72\x26\xe4\x4c\xc8\x99\x90\x33\x21\x67\x42\xce\x84\x9c\x09\x39\x13\x72\x26\xe4\x4c\xc8\x99\x90\x33\x21\x67\x42\xce\x84\x9c\x09\x39\x73\x4a\x71\xaa\x83\x64\x55\x6d\x5b\xba\x44\x5e\xd5\x17\x19\x5d\x74\x76\x66\x55\x50\xf3\x0e\x73\xab\xf6\x47\xca\x91\x5d\x15\xd9\x55\x2f\x44\xba\xec\x37\xbf\x6a\xdb\x76\xf8\xf8\x0c\xab\x58\x81\xbb\xcd\xb1\x0a\x7f\x22\xf8\x13\xc1\x9f\x08\xfe\x44\x43\x7b\xe4\xf4\x9a\x6b\x75\x18\x87\x1c\xf8\xc6\x76\xec\x84\xd3\xbf\x2d\x43\xc6\xd5\x97\x67\x9d\xba\x02\xca\xc8\xb8\x8a\x8c\xab\xc8\xb8\x8a\x8c\xab\xc8\xb8\x8a\x8c\xab\xc8\xb8\x3a\xed\x8c\xab\xad\xeb\x57\xe7\xe4\x5c\x3d\xe3\xd4\x81\xac\xab\x23\xcb\xba\x3a\x71\x5c\x87\xbc\xab\xd3\x3c\xf3\x8c\xc1\xf8\x4d\x10\x6a\xf5\x9c\x79\x75\x64\x5e\x13\x47\xe4\x5e\x6d\x5a\x73\x64\x5f\x3d\xce\x3f\xc2\x38\x40\xed\xbf\x7d\xb6\xa1\x73\x84\xf3\x18\x16\x21\x7f\xe4\x61\x46\xa3\xb2\xbf\x17\xcd\x63\x00\xf6\xe5\xd0\x9d\x95\x4e\xb5\x3f\xe6\xe7\xe1\x2b\x53\xf0\x55\x11\xde\xb5\x11\xaf\x93\x9b\x47\xc2\x85\x4a\x19\x2d\xba\x70\x8c\x90\xb4\xf6\xc3\x17\x96\xcd\xf5\xe9\x9c\xbc\xf0\x1f\xcb\x09\x30\xc6\x76\x82\x32\xae\x8c\xef\x1f\x99\x18\x26\x39\x88\xe9\xd8\x9e\x33\x84\x4c\x29\x55\x37\xa2\x59\x11\xcd\x8a\x68\x56\x44\xb3\x5e\x52\x34\xeb\xee\x60\xd6\x7e\x9c\x7b\x7b\x09\x63\x3d\x10\xc5\xda\x52\x4b\x5f\xb0\x8b\x76\x2f\xb1\xb9\x07\x42\x73\x5b\x6a\x69\x55\x25\x45\x50\x2e\x82\x72\x11\x94\x8b\xa0\x5c\x04\xe5\xf6\x12\x94\xbb\x23\x26\xf7\x52\x22\x8d\xda\xaf\x33\x22\x88\x27\x14\x41\x7c\x30\x80\xb8\xa7\x4d\xcc\x60\xa1\xc3\x87\x22\x87\x7b\xda\x8a\x8f\x31\x66\x78\x47\xc8\xf0\x00\x3c\xfe\xb8\x98\x45\x37\x6d\x4a\x2c\x5e\x78\x1b\xe1\x6f\x47\xeb\x9c\xc9\x5f\x17\xdb\x44\xb3\x15\x76\x5b\x0a\xbd\xd3\x2c\xf6\xbf\x57\x1b\xa7\xbf\x52\xd9\x20\xfa\x53\x26\xfa\xa0\xf9\x7b\x68\x3e\x48\x7e\x6d\xb7\x82\xe4\x83\xe4\x83\xe4\x83\xe4\x83\xe4\x8f\x84\x01\x83\xe4\x83\xe4\x83\xe4\x83\xe4\x83\xe4\x83\xe4\x83\xe4\x83\xe4\xb7\xe9\xd9\xdb\xec\x60\xfa\x12\xfd\x7a\xa1\x46\x40\x8d\x80\x1a\x01\x35\x62\x68\x35\xe2\x40\x0e\xc5\x56\xe3\x03\xf6\xc7\x79\x20\x42\xe0\x45\xe8\x09\x0d\x6e\xe7\x84\xaa\x30\x9a\x18\x81\x69\x05\x95\x41\x5b\x80\xb6\x00\x6d\x01\xda\x02\xb4\x85\x91\x50\x69\x68\x0b\xd0\x16\xa0\x2d\x40\x5b\x80\xb6\x00\x6d\x01\xda\x02\xb4\x05\x70\x79\x70\x79\x70\x79\x70\x79\x70\xf9\x33\xb9\x7c\xeb\x71\x02\x3d\xb0\x79\x44\x0a\xbc\x64\xb2\x0f\xaa\x3f\x8e\x58\x01\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\x7d\x10\xfd\x81\xa3\x05\x90\x07\xbc\xcf\x9e\x87\x2e\x01\x5d\x02\xba\x44\xa5\xfd\x2f\x54\x97\x88\x39\xfb\x9e\x32\xa1\xcc\x13\x9d\x1e\xd1\x50\x5b\x58\x9a\x5b\xc8\x16\x32\x59\xe7\xe3\x4c\x89\x65\x93\xfb\x80\x7d\x4f\xd7\xf8\x4c\xf1\x06\xa1\xf2\x60\x1c\x60\xf2\x4b\x96\xde\x95\x3f\x7e\x77\xff\xe1\xaf\x1b\x5d\x3f\x36\xd8\x9e\x57\xb0\x13\xd4\xfe\xbb\xfc\xbf\x87\xa7\xb7\x97\xdb\x8e\x98\xe6\x1b\x47\x09\xfb\x8e\x63\x8e\x9f\x3f\xc7\x1b\xea\x4f\xd5\xb9\xee\x54\xa7\xbb\xfb\x0f\x9f\xb7\x46\x63\x84\xd3\xde\x57\xd2\x44\xb8\x8c\x66\xf6\x07\x99\x4a\xe5\xda\x4f\xe7\x52\xbb\x1a\xbe\x16\x16\x35\x25\x6e\xdb\xe8\x0f\x39\x5e\x54\x7e\x6b\x4a\xf7\x2d\x7f\x97\x97\x0e\x29\x77\x98\x57\x48\x8f\x56\xdd\x3b\x74\x70\x9c\x0e\xdc\x28\xd7\xc6\xa5\x6c\x50\xfa\xa0\xf4\x41\xe9\x83\xd2\x77\x49\x4a\xdf\x1e\xa9\xaf\xcf\x6b\xad\x7b\x11\xfc\x0e\x29\x7e\x93\x69\x70\x53\x6d\xec\x90\x38\xd6\x66\x83\xab\x58\x06\x12\x19\x24\x32\x48\x64\x90\xc8\x20\x91\xf5\x23\x91\xed\xd2\xc8\xfa\x34\x6a\xd0\x6b\x26\xa4\xd7\x1c\x16\x6c\x7a\xdd\x1e\x0c\x26\xdb\x1c\xd4\x6d\xda\xec\x86\xaa\x78\x33\x09\xf5\x66\x97\x7c\x33\xde\xab\xd8\x0b\x7c\x74\x43\x63\xee\x78\x4b\x8e\x3c\x37\x71\xa3\xbf\x9f\x7d\x17\x61\xea\x8e\x86\xd6\x7a\xd4\x17\x6e\xf7\xe7\xe7\xd1\xa9\xc1\xaa\xdb\xde\xf6\x87\xc8\x5a\x73\x3f\x7b\xa9\xf6\x60\x58\xbb\xeb\x20\x74\x92\xc4\x75\x40\x20\x6a\xfb\xad\x0b\x24\xea\x5f\xea\xb9\x0c\x9f\xb7\xde\xe9\xca\x2f\x2b\x5e\x2a\xe3\x79\x3b\x77\xbf\x99\x1d\x6c\x6d\xdc\x8e\xed\xda\xa4\x91\x0b\x68\xea\xb7\x30\x1b\x6c\xc5\x9f\xaf\xf4\x19\x61\xce\x48\xac\x5f\x1e\x7d\x38\x9b\x91\x3b\x41\xb8\xb0\x64\x53\x26\x24\x13\x39\x1c\x0d\x49\x98\x3c\x7f\xce\x04\x09\x79\xc2\xb4\x81\x62\x39\x71\x33\x36\x5d\xef\xaf\x1d\x72\xf4\xcb\xa9\x03\x3c\x64\x91\x25\xe6\x30\x16\x27\x32\x60\x4a\xb9\x6d\x4f\xe9\x4c\x39\xb3\x3e\x4b\xf6\x90\x6b\x76\xae\x7a\xcf\x73\x17\x45\x3f\x9a\x6d\x6e\x98\x3c\x93\x24\x13\x44\xa5\x54\x1b\x1b\xbf\xb7\x77\xc5\x95\x5c\x86\x8b\xf9\x62\xeb\xfa\xc2\xac\xc0\x1e\x0b\xf0\xa7\xfd\x16\xe0\xad\x3d\x6e\x4d\xa5\x2d\x7f\xda\xd7\x96\xbb\x20\x60\xf1\x64\x1a\xd3\x9d\x69\x36\xa6\x6e\x42\xa6\xd9\x1e\xee\x77\x1b\x67\xfb\x77\x12\xc8\x28\x62\x81\xdf\x54\xc3\x50\x1f\x65\xa8\x6d\x1f\xd6\x1a\xea\xbc\x5b\xa1\x62\x42\xc5\x84\x8a\x09\x15\x13\x2a\x26\x54\x4c\xa8\x98\x50\x31\xa1\x62\x42\xc5\x84\x8a\x09\x15\x13\x2a\xe6\xf6\x5a\x0f\x15\x13\x2a\x26\x54\x4c\xa8\x98\x2f\x57\xc5\xdc\x13\xad\xf1\x90\xd2\x34\x53\x83\xb0\x4f\x6b\x62\x0b\x54\x38\x25\x0e\x7a\x6e\x2a\xb0\x17\x9c\xcc\xa5\xfb\xf8\x71\xf3\xa3\x61\xe4\xe7\xc1\xe0\xa0\xe3\xb2\x4f\x1a\x93\xb7\xc9\xf5\x40\xbf\x8f\xa2\xdf\xba\x07\x87\x8a\xdb\x39\x68\x8e\x1e\xec\x59\xd1\x9c\x37\xbf\x9b\x73\xdb\x5c\xff\x8b\x06\xe9\x8c\x90\xf7\xfa\xa7\xff\xfd\x9a\x72\x91\x52\x2e\x14\x09\xa2\x4c\xa5\x2c\xb9\x71\x33\x22\x70\x7c\x86\x44\xfc\x1b\x23\x57\x3f\xd3\x35\x53\x31\x0d\xd8\x55\x9d\x81\x31\x45\x0f\x63\x79\xf3\xa6\xe6\x38\x7e\xee\x1b\xcd\x42\xd3\x5a\xd3\x4e\xfd\xb2\xc7\xca\xb7\xc9\x1d\x48\x32\xa5\xcf\x19\x54\xd8\x83\xa1\xb5\xa7\xf5\xcd\xd3\x65\x4c\xc0\x80\x4e\x5e\x67\xd4\x8b\xd6\x94\xcc\x6b\xb6\x77\x8d\x8d\x23\x1a\x30\x2c\xb3\xe7\x2d\xb3\xa6\x13\xe1\x0e\x04\x77\x20\xb8\x03\x8d\x72\x9e\x5d\x94\x3b\x50\x87\x1e\x34\xd9\xa4\x2c\x5b\x43\x07\x1a\x78\xb7\xb6\xe7\x34\xd3\xa3\x39\x6b\x19\xce\xbc\x33\x8d\xfa\x14\xa7\xa5\xf4\x38\xb0\x48\x23\xb3\x48\x5d\x01\xe0\x32\xd3\xe5\x82\x28\x8b\x61\xc9\x9c\x2d\xa4\x15\x67\xbc\x82\x52\xf8\x5c\x39\xd1\xca\x74\x44\xc6\xac\x17\xcd\x9c\x11\x21\xc5\x8d\x60\x4b\x6a\xba\xdb\x3d\x78\x46\xbe\xe4\x9e\x4d\x56\x4d\xcd\x07\xda\x2d\x41\x7c\xbd\x66\x21\xa7\x29\x8b\x9e\x9d\xeb\x4e\xd9\x31\x4b\xf0\xe8\xda\x81\x58\x23\x3e\x90\x65\xa2\xf7\xe4\x31\x4b\xb8\x0c\x73\x6a\x5d\x6c\xcf\x75\xbb\xf3\x3e\xcf\x94\xae\x64\x59\xb6\xa0\xfa\x9b\xbe\x41\xee\x21\x8b\xd2\xf1\x91\xeb\x2f\x98\x7a\xae\x19\x15\xb5\x75\xac\x19\x3f\x53\xa7\x7b\x53\xa5\x41\x29\xf6\xbb\xd2\x85\x22\x71\xc4\xa8\x62\xb9\xd2\x7c\x9f\xc8\x98\x2e\xcd\x28\xdf\xcb\x88\x07\xcf\xd7\xb6\xa3\xad\xb6\xea\x3b\xac\xb8\x91\x44\x4f\x85\xd7\xb3\x3f\xcf\x48\x09\x45\x84\x2c\x66\x22\x64\x22\x2d\x5c\x23\x18\x91\x49\xbc\xa2\x42\x77\x9b\x63\x89\xb7\x0b\x1a\x79\xe7\xa8\xaf\xaf\xec\x9f\xbf\xbe\x22\x0b\x2e\x0c\x06\x4c\xf2\x87\xd1\x30\x34\x22\xe4\xad\xe5\xe3\x61\xa1\x25\xd9\xe2\xaf\x54\xf1\x25\xeb\x90\x34\x23\xef\xb9\x79\x37\x4b\x55\x97\xc9\x76\xdb\x8c\xca\x6c\x7d\x03\xad\x3f\x94\x59\x39\x64\xba\xaa\x1b\x3c\x5b\xc3\x77\xbe\x6d\xdd\x0c\x5d\x83\xc5\xd0\x34\x4c\xaf\x41\x2b\xf9\x44\x96\x34\x99\xd3\xe5\x86\x83\x6b\xbe\x90\xb0\x64\x21\x93\xb5\xee\xf1\xda\xde\xf8\x54\x69\xcf\xee\xce\x30\xaf\xa6\x7f\xaf\x62\xdb\x73\x5c\xcf\xf9\x80\x87\x85\x67\x93\x71\xf8\x30\xbe\x66\xf9\x08\x2a\x93\x9f\xce\xfc\xd5\xbb\x74\xcc\x4a\x43\xe5\x9d\x01\x3c\xe5\x2c\x90\xd4\xe6\xc3\x66\xc4\xba\x67\x1b\x07\x83\xf2\x6a\x7a\x65\xdb\x70\x45\x6e\xdc\xf4\xda\x9c\x7e\xea\x0d\xb9\xfa\x0b\x0d\xbe\xe9\xbd\x95\x08\xf5\xa7\x68\x14\xc9\x27\xf3\xa1\x4a\xc7\x59\x3f\x1f\xf7\x16\x6f\x16\xe2\x5b\x30\xcf\x4b\x7a\x43\xae\x7e\x92\x09\x2b\x15\x4b\x02\xaa\x02\x1a\xea\xd6\xbb\xfe\x31\xd6\xc9\x96\xa7\xec\x72\xbf\x55\xe0\x22\x2f\xa3\x6e\xba\xc5\xd5\xc9\x3a\x81\x83\xc8\x39\xba\x4e\x3f\x0e\xfa\x63\x56\x9e\xa6\x74\x6c\x88\x8d\xd2\xb8\xf3\xd4\x50\xa8\x44\x56\xdf\x6c\x83\x8d\x55\x0f\x09\x37\xa6\x0e\x7f\xdc\x7d\x5e\x58\xb3\x64\xc9\x0e\x7e\xca\x5c\xda\xc3\x96\x3c\xb8\xd9\xfa\xfc\xcb\x3c\xb9\x98\x0e\x18\xfa\xe0\xd2\x2a\x87\xdb\xf3\xd2\xdf\x97\xd2\xc2\xe1\x24\x33\xb2\x93\xcc\x18\x4c\xda\xf4\x79\xd4\xf9\x77\x9c\x4d\xcb\x95\xe1\x88\xa4\xf7\x87\xeb\xfc\x12\xd3\xdd\x9b\x1f\x2d\xbb\x2b\xdc\x2a\xbb\xbb\x3a\xc2\x6b\xc1\x7e\xc3\x0f\x15\x84\xb5\x9e\xfc\x17\xdc\x36\x18\x8b\x2e\xe4\xed\x4d\x79\x1b\xef\xe3\x50\x42\x77\xe5\x95\x1c\xeb\x36\x1b\x72\x37\xb6\xe4\x17\x64\x1d\x20\x77\x93\xcb\x93\xbb\x8f\xe5\x56\xad\x1a\x3d\x10\xac\x91\x12\xac\x89\x18\x58\x70\x2c\x18\xcd\x97\x6b\x68\xc0\xb1\xc0\xb1\x3a\xe7\x58\x26\x82\xee\xec\x9b\x79\x5c\xb8\xb9\x08\xf9\x23\x0f\x33\x1a\x95\x83\x05\x69\x9e\x40\x62\xd7\xa8\xcd\x4a\xee\x15\x3f\xe6\x8e\x19\x57\xa6\xd0\xab\x22\x2f\xd0\x46\xa2\x97\xdc\x02\x12\x2e\x54\xca\x68\xd1\x65\x63\x3c\x7e\xd7\x7e\xf8\x42\xee\xf9\x79\x3a\x76\xf3\xf1\xb1\x9c\x0d\x75\x6c\xb2\xbd\x89\x77\x7d\xff\xc8\xc4\x30\x99\x62\x4d\x67\x4e\x2e\x5d\x6c\xb7\x0b\x3f\xd2\x9c\x21\xcd\x19\xd2\x9c\x21\xcd\xd9\x25\xa5\x39\xdb\x9d\xe5\xac\x9f\x18\xf0\x5e\xf2\x9b\x1d\x48\x6f\xd6\xd3\x2d\xca\x17\x1c\xc9\xdf\x4b\xd2\xb6\x03\x39\xdb\x7a\xba\x0b\x1c\xd9\xda\x90\xad\x0d\xd9\xda\x90\xad\x0d\xd9\xda\x3a\xc9\xd6\xb6\x23\x59\xdb\xa5\x24\xa4\x69\xbf\xce\x48\x2d\x37\xa1\xd4\x72\x07\x33\xcb\xf5\xb4\x89\x19\x2c\xa7\xdc\xa1\x94\x72\x3d\x6d\xc5\xc7\x98\x4c\x6e\x47\x2e\xb9\x9e\xf8\xfa\x71\xc9\xad\xdc\x54\x29\xb1\x75\xe1\xed\xc2\xa1\x5b\xf0\x5b\x61\xec\xd7\xc5\xb6\xd0\x6c\x7d\xdd\x16\x42\xef\x2c\x8b\xfd\xee\xd5\xc6\x69\xaf\x54\x36\x08\xfd\x54\x08\x3d\xe8\xfc\x1e\x3a\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x3f\x36\xa6\x0b\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x32\x0f\x9f\x5b\x28\x0b\x50\x16\xa0\x2c\x40\x59\x98\xaa\xb2\x90\xb0\x25\x37\xf1\x6e\xba\x68\xa7\x2d\x34\x54\x0b\x96\x26\x19\xdd\x42\x26\xeb\x7c\xa4\x29\xb1\x24\x72\x1f\x88\xef\x29\x3e\x6e\x9a\xa1\x79\xe5\xe1\x38\x40\xdd\x97\x2c\xbd\xdb\xfc\xc2\xdd\xfd\x87\xbf\x6e\x74\xff\xd8\xf0\x7a\x5e\xc1\x4e\xe0\xfa\xef\xf2\xff\x36\x99\xe4\x8f\xaf\x8f\x99\xe7\x1b\xe7\x08\xfb\x9a\x63\x92\xb7\x31\xc9\xff\xf3\xf1\x90\xba\xb4\x3d\xcf\x7f\x79\x7d\x77\xff\xe1\xf3\xd6\x38\x8c\x70\xb6\xfb\x4a\x9a\x90\x94\x71\x4c\x7a\x17\xac\xc8\x03\xd6\x34\xf8\xca\x02\xa5\xc4\x6d\x11\xfd\x51\xc6\x0b\xc2\x77\xf7\x1f\x1e\x6c\x79\x90\x5f\x07\x78\x3b\xf4\xe0\xd4\xbd\x1e\xd5\x31\x69\xe1\xf2\xa4\x43\x51\xcc\x50\xeb\xa0\xd6\x41\xad\x83\x5a\x77\x49\x6a\xdd\x1e\xb9\x6e\x32\xb7\xe7\x37\x15\xed\x0e\xa9\x76\x93\x69\x70\x53\x7d\xeb\x90\xc0\xd5\xeb\x75\x10\x90\xb9\x20\x73\x41\xe6\x82\xcc\x05\x99\xab\x13\x99\x6b\x97\xce\xd5\xf3\x5d\x23\x50\x5e\xa6\xa2\xbc\x1c\x96\x5e\xfa\xbd\x2d\x6a\x28\x01\xe6\xa0\x02\xd3\xeb\x45\x4b\x63\xd4\x61\x76\x09\x31\x23\xcd\x5d\xf6\x2d\x9b\xb3\x1b\xba\x5c\xea\xa9\x90\xca\xcd\x9c\x65\x1b\xcc\xd0\x22\x4c\x07\x92\xba\x23\x98\xb5\xee\xee\x85\x4f\x7c\x1b\xc9\x6a\x6a\x50\xe8\xb6\x53\xfc\x36\x34\xab\xb8\xc1\xd7\x7b\xc0\x4b\xb5\x07\x9d\xda\xbd\x04\xa1\x62\x22\x98\x74\x28\x8a\x69\xfb\xa9\x05\x8e\x39\x4c\x2a\xc9\xd3\x5e\x29\x64\x97\x44\x76\xc9\x5e\xa6\x53\x0f\x99\x97\x3b\xa8\x72\xe7\xb7\x97\xb5\x5e\xe7\x0e\x73\x75\xca\x51\x1b\xc1\x86\x77\x1e\x97\xee\x54\x94\x0b\x58\xc4\xcd\x6f\xec\xba\xee\x78\xd3\x22\xbe\xcd\xbb\x10\x1a\x1f\x34\x3e\x68\x7c\xd0\xf8\xa0\xf1\x41\xe3\x83\xc6\x07\x8d\x0f\x1a\x1f\x34\x3e\x68\x7c\xd0\xf8\xa0\xf1\x41\xe3\x83\xc6\x07\x8d\x0f\x1a\xdf\x0b\xd6\xf8\xf6\x07\x26\xb8\xdb\xb9\x86\x00\x99\xd6\xc4\x16\x20\x70\xc4\x50\xf3\xdc\xdc\x56\x2f\x38\x3b\xc9\x90\x57\x11\x1d\x0e\x7b\x39\x2e\x27\xa2\x31\x68\x9b\xd4\x0e\xe4\x9a\x1c\xbe\x1f\xbb\x8f\x88\x94\x83\xa6\xe4\xc1\x9e\xf3\xcc\x59\xf1\xbb\x39\x73\xcd\xf5\xbf\x68\x90\xce\x08\x79\xaf\x7f\xfa\xdf\xaf\x29\x17\x29\xe5\x42\x91\x20\xca\x54\xca\x92\x1b\x37\xde\x81\x63\x2b\x24\xe2\xdf\x18\xb9\xfa\x99\xae\x99\x8a\x69\xc0\xae\xea\x8c\x83\x29\x7a\x18\xab\x99\x37\x35\x47\xe9\x73\xdf\x68\x16\x9a\xd6\x9a\x76\xea\x37\x37\x56\xbe\x4d\xee\x30\x91\x29\x7d\x46\xa0\xc2\x1e\xea\xac\x2d\xac\x6f\x9e\x2e\x63\xec\xc6\x6f\x42\xba\x5e\x0b\xd7\x9a\x77\x69\x01\x9b\xdc\x62\x8e\xa5\xf1\x98\xa5\xd1\x5f\x55\x0e\x3f\x17\x02\x3f\x17\xf8\xb9\xc0\xcf\x65\xd4\x17\x89\x0f\xef\x32\x02\xcf\xc9\xd3\xfc\x44\xba\xb5\x28\x2d\xf3\x88\x77\xa6\x0d\x9f\xcc\xd8\xef\xc1\x12\xb0\x16\x43\x5a\x8b\xae\x98\x67\x19\x63\x72\x41\x94\x25\x8f\x64\xce\x16\xd2\xea\x11\x5e\x34\x28\xdc\x8c\x9c\x4e\x63\x3a\x22\x63\xd6\x71\x64\xce\x88\x90\xe2\x46\xe8\x75\x99\x1b\x84\x6c\x1e\x3c\x23\x5f\x72\x67\x1e\x2b\x20\xe6\x03\xed\x56\x18\xbe\x5e\xb3\x90\xd3\x94\x45\xcf\xce\x5b\xa5\xec\x8b\x24\x78\x74\xed\xd8\xa3\xe1\xed\x64\x99\xe8\x4d\x6f\xcc\x12\x2e\xc3\x1c\xd4\x16\xfb\x5f\xdd\xee\xbc\xcf\x33\xa5\x2b\x59\x26\xf5\x54\x7f\xd3\x37\xc8\x3d\x64\x51\x3a\x75\x71\xfd\x05\x53\xcf\x35\xa3\xa2\xb6\x8e\x35\xe3\x67\xea\x74\x6f\xaa\x34\x28\xb8\x7d\x57\xba\x01\x22\x8e\x18\x55\x2c\x17\x57\xef\x13\x19\xd3\xa5\x19\xe5\x7b\x19\xf1\xe0\xf9\xda\x76\xb4\x95\x13\x7d\x87\x15\x57\x48\xe8\xa9\xf0\x7a\xf6\xe7\x19\x29\x9d\xe0\x43\x16\x33\x11\x32\x91\x16\xde\x00\x8c\xc8\x24\x5e\x51\xa1\xbb\xcd\xf1\xb4\xdb\x05\x8d\xbc\x3f\xd0\xd7\x57\xf6\xcf\x5f\x5f\x91\x05\x17\x06\x85\x25\xf9\xc3\x68\x18\x1a\xdd\xed\xd6\x22\xe1\xb0\x90\x4f\x6c\xf1\x57\xaa\xf8\x92\xf5\xc1\x99\x91\xf7\xdc\xbc\x9b\xa5\xaa\xcb\x64\xbb\x6d\x46\x58\xb5\xee\x70\xd6\x05\xc8\xac\x1c\x32\x5d\xd5\x0d\x9e\xad\xe1\x3b\xdf\xb6\x6e\x86\xae\xc1\x62\x68\x1a\xa6\xd7\xa0\x95\x7c\x22\x4b\x9a\xcc\xe9\x72\xc3\x63\x33\x5f\x48\x58\xb2\x90\xc9\x5a\xf7\x78\x6d\x6f\x7c\xaa\xb4\x67\x77\x67\x98\x57\xd3\xbf\x57\xb1\xed\x39\xae\xe7\x7c\xc0\xc3\xc2\x99\xc7\xf8\x38\x18\xf7\xaa\x7c\x04\x95\x49\x3c\x66\xfe\xea\xbd\x18\x66\xa5\xa1\xf2\xfa\xb7\x27\xa8\x05\xc9\xd9\x7c\xd8\x8c\x58\x2f\x62\xa3\xa9\x97\x57\xd3\x2b\xdb\x86\x2b\x72\xe3\xa6\xd7\xe6\xf4\x53\x6f\xc8\xd5\x5f\x68\xf0\x4d\xef\x94\x44\xa8\x3f\x45\xa3\x48\x3e\x99\x0f\x55\x3a\xce\xba\xb6\xb8\xb7\x78\xb3\x10\xdf\x82\x79\x5e\xd2\x1b\x72\xf5\x93\x4c\x58\xa9\x58\x12\x50\x15\xd0\x50\xb7\xde\xf5\x8f\xb1\x4e\xb6\x3c\x65\x97\xfb\xad\x02\x17\x79\x19\x75\xd3\x2d\xae\x4e\xd6\xb1\x1f\x12\xce\x94\x32\x7a\xf0\x23\x1f\xb9\xd8\x32\xe2\x43\x40\x6c\xb4\xb4\x9d\x67\x80\x42\x18\xb1\x0a\xde\x69\xac\xa9\xba\xe3\xbf\x31\x4f\xfd\xe3\xee\xcd\xff\x9a\x25\x4b\x76\xf0\x53\xa6\x4b\xd8\x92\x07\x37\x5b\x9f\x7f\x81\xc7\x90\xd8\x5d\x01\x34\x4d\xae\xb5\xff\x0d\xbe\x2f\x25\xf8\xc2\xb1\x64\x64\xc7\x92\xc1\xed\xd3\x94\x88\x50\x1b\xd7\x4b\x8d\x58\x71\x3f\x22\xd9\x78\x5d\x05\x5f\x62\x7a\x71\xf3\xe3\x3c\x1d\xfd\x56\xd9\x1d\xce\x11\x72\xba\xfd\x86\x1f\x0b\xa8\x47\xad\x08\xeb\x6e\xa3\x89\x95\xf0\x65\xe8\xae\x78\x87\xba\x51\x60\x2b\xaf\xd1\x28\xf7\xab\xd0\x61\xb1\x85\x1d\xf3\xc2\x0d\x1d\x76\x32\x3a\xec\xb1\x08\xe6\x4c\xb3\x03\x18\x33\x02\x18\x33\x05\x13\x07\x24\x03\x7b\x76\xea\xdc\x99\x92\x71\x00\x92\x01\x92\x39\x13\xc9\x98\x88\xa4\x13\xee\xf5\x70\x01\xbb\x22\xe4\x8f\x3c\xcc\x68\x54\x0e\xb7\xa2\x79\x08\x7e\x31\x2c\xb3\x92\x3e\xff\x63\xae\xec\x5f\x99\x62\xae\x8a\x5c\x2a\x1b\xc9\x31\x72\xcb\x44\xb8\x50\x29\xa3\x45\x9f\x8c\xf1\x54\x5a\xfb\xe1\x4b\xb8\x25\xe4\xe9\xc0\x8e\xe0\x63\x39\xc9\xe2\xd8\x34\x5e\x13\x0f\xf8\xfe\x91\x89\x61\x12\x50\x9a\xbe\x1b\x7b\x16\xca\x6e\x97\x69\x64\x7d\x42\xd6\x27\x64\x7d\x42\xd6\xa7\x4b\xca\xfa\xb4\x3b\xe9\xd3\x04\x6e\xf0\x6f\x9a\xee\xe9\x40\xb6\xa7\x9e\x2e\x4f\xbd\xe0\x48\xe7\x5e\x72\x58\x1d\x48\x61\xd5\xd3\x15\xc0\x48\x5e\x85\xe4\x55\x48\x5e\x85\xe4\x55\x48\x5e\xd5\x49\xf2\xaa\x1d\xb9\xab\x2e\x25\x61\x47\xfb\x75\x46\xa6\xad\x09\x65\xda\x3a\x98\x68\xab\xa7\x4d\xcc\x60\x29\xb6\x0e\x65\xd8\xea\x69\x2b\x3e\xc6\xdc\x5a\x3b\x52\x6b\x75\xc3\xc6\x8f\x4b\xfe\xe3\x66\x46\x89\x8b\x0b\x6f\x06\xb6\xef\xbf\x6e\x85\x8f\x5f\x17\xfb\x3e\xb3\xb7\x75\x7b\x04\xbd\x75\x2c\x36\xb4\x57\x1b\xc7\xb9\x52\xd9\xa0\xeb\x63\xa4\xeb\x20\xeb\x7b\xc8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\x3a\xa8\xfa\xc4\xa9\x3a\xbc\x5b\xa1\x03\x40\x07\x80\x0e\x00\x1d\x60\x68\x1d\x60\xce\x52\xfa\xfa\xb6\x21\xf4\x5f\xb2\x74\x73\x67\x65\xbb\xe1\xa8\xb8\xb6\x8e\x42\xc8\x2e\x22\x7a\xcd\x0c\xc6\x01\xa4\xbe\x64\xe9\x16\x50\x37\xdf\xbb\xbb\xff\xf0\x79\x6b\x44\xc6\xc6\xd5\x4b\x95\x34\x9e\xf5\x9d\xc0\xf5\xdf\xe5\xff\x3d\xe6\x1d\x38\x3e\x4c\xc4\x9e\xb8\x13\x67\x51\xfd\x5e\x6f\x5b\xfe\x82\xf4\x34\xd4\xcb\xa2\x47\x68\xe7\xdb\x82\x4b\xa2\x21\x6c\x40\xd8\x80\xb0\x01\x61\x03\x97\x44\xe3\x92\x68\x5c\x12\x0d\x45\x00\x8a\x00\x14\x01\x28\x02\x2f\x55\x11\xc0\x25\xd1\x40\xd6\xb8\x24\x1a\x97\x44\xe3\x92\xe8\x23\xd2\x24\x19\x98\x34\xab\xe4\x0b\xe9\x84\x6a\x1e\x70\x19\x1e\x4f\x1e\x8e\x32\x98\xab\xb8\x0d\x4b\xb5\x07\xa7\xda\x5d\x05\x2e\x36\x6b\x44\x36\x6d\x67\xb5\xc5\x36\x47\x9f\xac\xb5\xfa\x9a\x21\xc3\x1d\x32\xdc\xf5\x37\xa7\xc6\x95\xb6\xf5\xa8\x7a\x77\x7e\xc7\x4f\x37\x15\xef\x30\xaf\xa0\x1c\xbf\x9d\x6c\x78\x05\x68\xe9\x0e\xb2\x8d\x74\x74\x30\x9a\x3b\x8c\xe6\x8e\x2b\x41\xcd\x57\xdf\xe6\x9d\x09\x69\x10\xd2\x20\xa4\x41\x48\x83\x90\x06\x21\x0d\x42\x1a\x84\x34\x08\x69\x10\xd2\x20\xa4\x41\x48\x83\x90\x06\x21\x0d\x42\x1a\x84\x34\x08\x69\xf0\x05\x4b\x83\x23\xbf\xd2\xbc\x40\x82\x63\x67\x9c\xe7\xa6\x10\x7a\xc1\x49\x20\xc6\x77\xd3\xca\x56\x04\xcd\x71\xc9\xe4\x8c\x69\x4b\x71\x59\xe7\x71\x34\xbb\xf6\xd6\xdb\x0e\x83\x5b\x0e\x9a\x97\x07\x7b\xf6\x33\xe7\xc7\xef\xe6\x1c\x36\xd7\xff\xa2\x41\x3a\x23\xe4\xbd\xfe\xe9\x7f\xbf\xa6\x5c\xa4\x94\x0b\x45\x82\x28\x53\x29\x4b\x6e\xdc\xc8\x07\x8e\xb7\x90\x88\x7f\x63\xe4\xea\x67\xba\x66\x2a\xa6\x01\xbb\xaa\x33\x18\xa6\xe8\x61\x2c\x69\xde\xd4\x1c\xaf\xcf\x7d\xa3\x59\x68\x5a\x6b\xda\xa9\x5f\xe4\x58\xf9\x36\xb9\x03\x46\xa6\xf4\xb9\x81\x0a\x7b\xd0\xb3\xf6\xb1\xbe\x79\xba\x8c\xb1\x1b\xc4\xa9\xe9\x7f\xa3\xb9\xe0\x78\x8f\x69\x6c\x72\xcb\x31\x96\xcb\xa3\x97\xcb\xfa\x0b\x8e\xe1\x32\x03\x97\x19\xb8\xcc\xc0\x65\xc6\x3d\xf2\x05\x5c\x77\x7c\xb6\xe3\x09\x5c\x34\xcf\xf5\x36\xe9\xd6\xde\xb4\x4c\x35\xde\x99\x86\x7c\x32\xb3\x60\x0f\xdc\x80\x19\x19\xd2\x8c\x74\x45\x4e\xcb\x30\x94\x0b\xa2\x2c\xbf\x24\x73\xb6\x90\x56\xd5\xf0\xd2\x43\xe1\xac\xe4\xd4\x1e\xd3\x11\x19\xb3\xee\x27\x73\x46\x84\x14\x37\x42\xaf\xd5\xdc\x80\x68\xf3\xe0\x19\xf9\x92\xbb\x04\x59\x19\x32\x1f\x68\xb7\xd6\xf0\xf5\x9a\x85\x9c\xa6\x2c\x7a\x76\x3e\x2f\x65\x8f\x26\xc1\xa3\x6b\x47\x30\x0d\xb5\x27\xcb\x44\x6f\x8e\x63\x96\x70\x19\xe6\xb8\xb7\xd8\x27\xeb\x76\xe7\x7d\x9e\x29\x5d\xc9\x32\xef\xa7\xfa\x9b\xbe\x41\xee\x21\x8b\xd2\x39\x8d\xeb\x2f\x98\x7a\xae\x19\x15\xb5\x75\xac\x19\x3f\x53\xa7\x7b\x53\xa5\x41\xf1\xef\xbb\x52\x12\xfe\x38\x62\x54\xb1\x5c\xa2\xbd\x4f\x64\x4c\x97\x66\x94\xef\x65\xc4\x83\xe7\x6b\xdb\xd1\x56\x94\xf4\x1d\x56\x64\xf1\xd7\x53\xe1\xf5\xec\xcf\x33\x52\x3a\xf3\x87\x2c\x66\x22\x64\x22\x2d\x7c\x0a\x18\x91\x49\xbc\xa2\x42\x77\x9b\x03\x72\xb7\x0b\x1a\x79\xaf\xa2\xaf\xaf\xec\x9f\xbf\xbe\x22\x0b\x2e\x0c\x4b\x4b\xf2\x87\xd1\x30\x34\xea\xdd\xad\x05\xcb\x61\x21\xc2\xd8\xe2\xaf\x54\xf1\x25\xeb\xc9\x33\x23\xef\xb9\x79\x37\x4b\x55\x97\xc9\x76\xdb\x8c\x3c\x6b\x9d\xea\xac\x23\x91\x59\x39\x64\xba\xaa\x1b\x3c\x5b\xc3\x77\xbe\x6d\xdd\x0c\x5d\x83\xc5\xd0\x34\x4c\xaf\x41\x2b\xf9\x44\x96\x34\x99\xd3\xe5\x86\x07\x68\xbe\x90\xb0\x64\x21\x93\xb5\xee\xf1\xda\xde\xf8\x54\x69\xcf\xee\xce\x30\xaf\xa6\x7f\xaf\x62\xdb\x73\x5c\xcf\xf9\x80\x87\x85\x4b\x90\xf1\x94\x30\x4e\x5a\xf9\x08\x2a\x96\x7a\x90\xea\x7d\x21\x66\xa5\xa1\xf2\x2a\xba\x47\xb0\x05\xfb\xd9\x7c\xd8\x8c\x58\xff\x64\xa3\xcc\x97\x57\xd3\x2b\xdb\x86\x2b\x72\xe3\xa6\xd7\xe6\xf4\x53\x6f\xc8\xd5\x5f\x68\xf0\x4d\x6f\x9c\x44\xa8\x3f\x45\xa3\x48\x3e\x99\x0f\x55\x3a\xce\x3a\xc8\xb8\xb7\x78\xb3\x10\xdf\x82\x79\x5e\xd2\x1b\x72\xf5\x93\x4c\x58\xa9\x58\x12\x50\x15\xd0\x50\xb7\xde\xf5\x8f\xb1\x4e\xb6\x3c\x65\x97\xfb\xad\x02\x17\x79\x19\x75\xd3\x2d\xae\x4e\xd6\xb1\x9f\x1e\xce\x14\x44\x7a\xf0\x50\x1f\xb9\x64\x33\xf6\x33\x81\xbd\x88\x7f\xe7\x91\xa0\x90\x57\xac\x18\x78\x1a\x98\xaa\x1e\x00\x6e\xcc\x53\xff\xb8\xfb\x2c\xb0\x66\xc9\x92\x1d\xfc\x94\xe9\x17\xb6\xe4\xc1\xcd\xd6\xe7\x5f\xea\xa9\x24\xae\xbd\x92\x65\x52\x10\x6c\xff\x0b\x7d\x5f\x4a\x3b\x86\x53\xca\xc8\x4e\x29\x83\x9b\xab\xc9\x41\xa3\xf1\xdc\x04\xd4\x9d\x96\x8f\x6c\xd1\x9b\x0d\xe9\x51\xa1\xbf\x55\x76\xff\x73\x84\x50\x6f\xbf\xe1\x07\x04\x1a\x54\xcb\x92\xbd\xdb\x90\x62\x89\x7c\x69\x8a\x2e\xde\xab\xae\xb5\xdd\xca\xab\x35\xca\xcd\x2d\x14\x5e\x6c\x7a\xa7\xb1\xa2\x43\xe1\x9d\xa0\xc2\x7b\x2c\xcd\x39\xd3\x28\x81\xeb\x8c\x8a\xeb\x4c\xc1\x00\x82\xee\xc0\xd0\x9d\x3a\x77\x26\x67\x30\x40\x77\x40\x77\x5a\xa3\x3b\x5b\x57\xfa\x1f\x75\x97\xbf\x5e\xde\x1e\x79\x98\xd1\x68\xe3\x5a\xff\x3c\x63\x40\xcb\xd7\xf9\xe3\x42\xfe\xc1\xb6\x0a\xf5\xb7\xf2\x57\xb6\x0a\x1f\xcb\xf9\x24\xc7\x26\x2b\x8f\xe1\x7a\xfe\x49\x24\xdc\xc4\x3d\xfd\xc8\x59\x85\x9c\x55\xc8\x59\x85\x9c\x55\xb8\xa7\x1f\xf7\xf4\x4f\x64\x14\x71\x4f\x3f\x52\x6f\x21\xf5\x16\x52\x6f\x21\xf5\x16\x52\x6f\x0d\x7b\x4f\x3f\x6e\xbd\x47\x9e\x30\xdc\x7a\x8f\x5b\xef\x2f\xf3\xd6\xfb\x2d\x5e\x7e\x5c\xd6\x22\x37\x3d\x4a\xac\x5c\x78\x5b\xb0\x7d\x07\x78\x2b\xcc\xfc\xba\xd8\xfc\x99\x0d\xae\xdb\x28\xe8\xfd\x63\xb1\xab\xbd\xda\x38\xd3\x95\xca\x06\x71\x1f\x37\x71\x07\x6d\xdf\x43\xdb\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x5b\x5a\x53\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x41\xda\x07\x25\xed\xf0\x82\x85\x36\x00\x6d\x00\xda\x00\xb4\x81\xde\xb4\x81\x58\xdd\x36\x24\xfd\x4b\x93\xd0\x6c\x21\x93\x75\x3e\xae\x94\x58\xba\xb8\x0f\xa9\xf7\x14\x67\x36\xc9\x10\xb7\xed\xcf\x54\x90\xf9\x92\xa5\x77\x71\xac\xee\xee\x3f\xfc\x75\xa3\xa3\xc7\x06\xc7\xf3\x0a\x76\x82\xc6\x7f\x97\xff\x77\x7b\xf2\x3e\xbe\x3e\x66\xfe\x6e\xec\xff\xed\xcb\x8a\xc9\x7b\xf2\xe4\xfd\xcf\xc7\x43\x92\x8f\x9b\xbf\xbf\xbc\xbe\xbb\xff\xf0\x79\xab\xc7\x47\x38\x8b\x7d\x25\x4d\xe0\xc7\x10\x93\x59\x1f\x79\x12\xa9\x0f\x1c\x09\x7b\xe4\xca\x24\x1b\x6e\x36\xbf\x2d\xe8\x49\xdc\x46\xce\x1f\x31\xbc\x08\xfb\x36\x2f\xf7\xb3\x2b\x17\x42\x68\x5f\x6f\x81\x1e\x19\xfb\x1a\x6c\x8f\xc2\x4f\x32\xb9\x8b\xa2\xfc\x8a\x97\x81\x5f\x8e\x99\x6e\x90\x7e\x15\xb6\x2b\xda\xdd\x1b\x71\x40\xf9\x6c\x21\xc4\x28\x56\xdb\x32\xe7\xee\x17\xa2\x22\x77\x42\xe9\x84\xd2\x09\xa5\x13\x4a\x27\x94\x4e\x28\x9d\x50\x3a\xa1\x74\x42\xe9\x84\xd2\x09\xa5\x13\x4a\x27\x94\x4e\x28\x9d\xd0\x0d\xa1\x1b\x42\x37\x84\x6e\xf8\x22\x75\xc3\xc7\xd7\xb7\x21\x65\x6b\xbd\x0b\x4d\xdb\x81\xd4\xef\x4c\x71\x0f\xa5\x54\xd6\x60\xd3\xbd\xb1\xe9\xbc\xf3\x47\x8a\xa4\xf3\xfa\x5d\x1a\x89\xde\x9a\xf5\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x6d\x99\x31\x00\x68\x00\x68\x00\x68\x00\xe8\xa9\x03\x68\x16\x47\xf2\x59\xef\x45\x5a\x22\xd0\x79\x79\x40\xd0\x03\x20\xe8\xbc\xf7\xc7\xca\xa0\xf3\x0a\x5e\x1c\x84\xde\x9a\xf8\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\xa0\xd0\x6d\x99\x31\x50\x68\x50\x68\x50\x68\x50\xe8\x89\x53\x68\x91\x73\x4a\x7b\x79\x82\xf9\xf7\x6f\xc8\xe5\x71\xd1\xb0\x3a\x87\xd3\xe1\x9e\xf1\xa8\x03\xa4\x2d\xdf\xcf\x0f\x48\x0a\x48\x0a\x48\x0a\x48\x7a\x49\x90\x74\x0f\x25\xad\xb3\xcf\x85\xf0\xd6\xee\xd2\xda\x0b\x2b\x3d\x04\x4b\x27\xd3\xe0\xa6\x58\xf1\x10\x57\x6c\xb3\xc1\xd5\x7d\x39\xe8\x22\xe8\x22\xe8\x22\xe8\x22\xe8\x62\x3f\x74\x71\x17\x5e\xec\xd3\xa8\x01\xd8\x4d\x08\xd8\x1d\x26\x76\xbd\x6e\x0f\x06\xe3\x76\x07\xc1\x5d\x9b\xdd\x50\xa5\x77\x93\xc0\x77\xbb\xf8\x5d\x7d\xc7\x54\xa8\x0e\xb2\xab\x8e\x3a\xbb\xaa\x54\x7b\xe0\xa8\xdd\x29\x10\x3a\x31\x0e\xda\x2b\xa6\xb4\x7d\xd4\x1e\xa8\xf4\xaf\xda\x5c\x86\xcf\x5b\x6f\x5a\xe5\x97\x95\xbb\x57\x3a\x7b\x67\x76\xbf\x2f\x1d\xec\x1f\xdc\xb6\xe8\x9a\x70\x11\xea\x91\xf6\xfb\x84\x0d\x80\xe1\x0f\x31\x7a\x23\x3e\x67\x24\xd6\x13\x5d\x9f\x80\x66\xe4\x4e\x10\x2e\x2c\x3e\x94\x09\xc9\x44\x4e\x20\x43\x12\x26\xcf\x9f\x33\x41\x42\x9e\x30\x6d\x05\x58\x8e\xb5\x8c\xe1\xd4\x9b\x58\xc7\xf5\xfc\x9a\xe5\x28\x0a\x59\x64\x89\x39\xf1\xc4\x89\x0c\x98\x52\x6e\x6f\x51\x3a\xb8\xcd\xc8\x2f\xe6\x89\xe6\x24\x69\xb6\x87\x7a\x63\x71\x17\x45\x3f\x9a\xbd\x64\x98\x3c\x93\x24\x13\x44\xa5\x54\xaf\xe8\x7e\x03\xed\x8a\x2b\xb9\x34\x15\xc3\x6f\xeb\x3a\xed\xa5\x76\xcf\x32\xfb\xa7\xfd\xcb\xec\x5b\x7b\x44\x19\xa8\x6a\x7f\xda\x57\xb5\xbb\x20\x60\xf1\x50\x75\xeb\xce\x3a\x19\x43\x30\x36\xeb\x64\xcf\xa4\xbb\xed\x93\xfd\x3b\x09\xf4\x03\x02\xbf\x17\x84\xad\xda\x69\xab\x6c\x7f\xf9\x04\xf9\xbe\xd3\x20\xaf\x41\x5e\x83\xbc\x06\x79\x0d\xf2\x1a\xe4\x35\xc8\x6b\x90\xd7\x20\xaf\x41\x5e\x83\xbc\x06\x79\x0d\xf2\x1a\xe4\x35\xc8\x6b\x90\xd7\x20\xaf\x41\x5e\x6b\x7c\xb3\xe7\x43\x4a\xd3\x4c\x0d\x82\x30\xad\x89\x2d\x60\xe0\xe8\x70\xe6\xb9\x39\x3c\x5e\x70\x14\xb6\x33\xee\xba\x46\xe6\x55\xd3\x93\x84\xa8\x40\xc6\xec\x9a\xa8\x2c\x30\x6b\xb0\x59\xda\x18\x5d\xdb\x17\x37\x4e\xa4\xd9\x4c\x6c\x37\x27\x8f\x1b\xa9\xb6\x21\xa6\x69\x29\x3a\xa2\x22\xae\x75\xd6\xb4\xee\x23\xf3\xcc\x8f\x36\x62\x6a\xec\xdf\x7f\x6b\x18\x5a\x63\xcc\xf5\x26\x93\x04\x9b\xdf\xc9\xe6\x75\x6f\xf5\x1b\xee\x72\xd0\x58\x3e\xd8\x93\xac\x39\x0d\x7f\x37\xa7\xca\xb9\xfe\x17\x0d\xd2\x19\x21\xef\xf5\x4f\xff\xfb\x35\xe5\x22\xa5\x5c\x28\x12\x44\x99\x4a\x59\x72\xe3\xc6\x3c\x70\xf4\x88\x44\xfc\x1b\x23\x57\x79\xd3\xae\xea\xcc\x9f\x29\x7a\x98\x7d\x41\xde\xd4\x5c\x2c\x98\xfb\x46\xb3\xd0\xb4\xd6\xb4\x53\xbf\xca\xb1\xf2\x6d\x72\xc7\xa5\x4c\xe9\x53\x10\x15\xf6\xd8\x6a\xad\x7d\x7d\xf3\x74\x19\x13\x30\xef\x63\xd3\x26\x97\x6c\x7c\xd2\x64\x9c\xed\x5d\xf9\xe2\x88\x06\x0c\x8b\x5f\xf3\xc5\xcf\x74\x18\xbc\x68\xe0\x45\x03\x2f\x9a\x8b\xf0\xa2\xe9\xd0\x53\x25\x1b\x9f\x35\x68\xe8\xa8\x02\x47\xca\x86\xce\x29\x7d\x9b\x80\x96\x21\xc8\x3b\xd3\x94\x4f\x66\xf8\xf7\xb0\x10\x2c\xfb\x43\x2e\xfb\x5d\x81\xd6\x32\x3b\xe5\x82\x28\x8b\x3b\xc9\x9c\x2d\xa4\x15\x41\xbc\x52\x51\xf8\x36\x39\x71\xc8\x74\x44\xc6\xac\xb7\xca\x9c\x11\x21\xc5\x8d\x60\x4b\x6a\xba\xdb\x3d\x78\x46\xbe\xe4\x1e\x44\x56\xb5\xcc\x07\xda\x2d\x32\x7c\xbd\x66\x21\xa7\x29\x8b\x9e\x9d\x8b\x4c\xd9\x01\x4a\xf0\xe8\xda\x01\x4f\x03\xf9\xc9\x32\xd1\x3b\xd5\x98\x25\x5c\x86\x39\x1d\x2e\x36\xad\xba\xdd\x79\x9f\x67\x4a\x57\xb2\x2c\x0f\x50\xfd\x4d\xdf\x20\xf7\x90\x45\xe9\x20\xc4\xf5\x17\x4c\x3d\xd7\x8c\x8a\xda\x3a\xd6\x8c\x9f\xa9\xd3\xbd\xa9\xd2\xa0\xb4\xf8\x1d\x8b\x13\xa6\x3b\x37\xfc\x91\xc4\x11\xa3\x8a\xe5\x8a\xee\x7d\x22\x63\xba\x34\xa3\x7c\x2f\x23\x1e\x3c\x5f\xdb\x8e\xb6\x1a\xa6\xef\xb0\x30\x2f\x40\x4f\x85\xd7\xb3\x3f\xcf\x48\xe9\x50\x1d\xb2\x98\x89\x90\x89\xb4\x70\x41\x60\x44\x26\xf1\x8a\x0a\xdd\x6d\x0e\xe7\xdd\x2e\x68\xe4\x9d\x90\xbe\xbe\xb2\x7f\xfe\xfa\x8a\x2c\xb8\x30\x24\x2e\xc9\x1f\x46\xc3\xd0\x88\x7d\xb7\x96\x43\x87\x85\x66\x63\x8b\xbf\x52\xc5\x97\xac\xe3\xcf\x8c\xbc\xe7\xe6\xdd\x2c\x55\x5d\x26\xdb\x6d\x33\x6a\xae\xf5\xc1\xb3\x7e\x47\x66\xe5\x90\xe9\xaa\x6e\xf0\x6c\x0d\xdf\xf9\xb6\x75\x33\x74\x0d\x16\x43\xd3\x30\xbd\x06\xad\xe4\x13\x59\xd2\x64\x4e\x97\x1b\xae\xa2\xf9\x42\xc2\x92\x85\x4c\xd6\xba\xc7\x6b\x7b\xe3\x53\xa5\x3d\xbb\x3b\xc3\xbc\x9a\xfe\xbd\x8a\x6d\xcf\x71\x3d\xe7\x03\x1e\x16\x1e\x44\xc6\xb1\xc2\xf8\x74\xe5\x23\xa8\x58\xea\x31\xac\x77\x9d\x98\x95\x86\xca\x8b\xee\x1e\xe0\x16\x70\x65\xf3\x61\x33\x62\x9d\x93\x8d\x90\x5f\x5e\x4d\xaf\x6c\x1b\xae\xc8\x8d\x9b\x5e\x9b\xd3\x4f\xbd\x21\x57\x7f\xa1\xc1\x37\xbd\x45\x12\xa1\xfe\x14\x8d\x22\xf9\x64\x3e\x54\xe9\x38\xeb\x4f\xe3\xde\xe2\xcd\x42\x7c\x0b\xe6\x79\x49\x6f\xc8\xd5\x4f\x32\x61\xa5\x62\x49\x40\x55\x40\x43\xdd\x7a\xd7\x3f\xc6\x3a\xd9\xf2\x94\x5d\xee\xb7\x0a\x5c\xe4\x65\xd4\x4d\xb7\xb8\x3a\x59\x27\xb0\xdb\x3f\x47\x3f\xe9\xc7\x3d\x7d\xcc\x0a\xcf\xe8\x76\xff\xb1\x91\xed\x76\x6e\xfe\x0b\x35\xc6\x8a\x85\xe7\x61\xa1\xea\x5e\xff\xc6\x3c\xfd\x8f\xbb\xb7\xfd\x6b\x96\x2c\xd9\xc1\x4f\xa9\x34\xa1\x29\x5b\xf2\xe0\x66\xeb\xf3\x2f\xe5\x00\x62\x9a\x7c\x01\x08\x6a\xcf\xbb\x7b\x5f\x4a\xe3\x85\x03\xc9\xc8\x0e\x24\x63\xb0\x4c\xa3\x83\x3d\x65\x8f\x88\x11\x2d\xf8\x9d\x5e\xc6\x61\x54\x6e\x37\x25\xf7\x55\xb4\x2c\x68\x8f\x43\xcb\x86\x4c\xdf\xbb\x4c\x1f\x9a\x3b\xcd\x15\x6b\xeb\x5a\xa6\xea\x15\xe9\x63\xe4\x92\xb5\x1f\xbe\xa8\x44\x97\xdb\xc3\x80\x00\x3c\x04\xe0\x21\x00\x0f\x01\x78\x08\xc0\x43\x00\x1e\x02\xf0\xaa\x0d\x46\x00\x1e\x02\xf0\x10\x80\x87\x00\x3c\x04\xe0\x21\x00\x0f\x01\x78\x08\xc0\xdb\x98\x30\x08\xc0\x43\x00\xde\x65\x05\xe0\x15\xd7\x64\x7b\x4e\x74\x69\x69\x2d\xb7\x00\x58\x8b\xd9\x2c\x27\xc1\x38\x7b\x45\x90\xf5\x49\x2c\x8f\x86\x90\xc3\x7b\xdd\x17\x55\xde\xf9\x2e\x40\xe4\x84\xc8\xd9\x7c\xb6\xf4\xec\x63\xdf\xac\x46\xbd\x26\xa8\x6c\x52\xa5\xc9\xe5\xa5\x3c\xc9\xbc\x9c\x94\x8e\x12\xc6\xe6\xd8\x2c\x94\xd0\xbe\xa0\x7d\x41\xfb\x82\xf6\x05\xed\x0b\xda\x17\xb4\x2f\x68\x5f\xd0\xbe\xa0\x7d\x41\xfb\x82\xf6\x05\xed\x0b\xda\x17\xb4\x2f\x68\x5f\xd0\xbe\x5e\xb4\xf6\x35\xe6\xd0\xc4\x4e\x93\x4f\x9e\x26\x89\x21\xe7\x24\x82\x59\x26\x18\xcc\x72\x76\xaa\x49\x70\xf7\x26\x19\x26\x3b\x61\xed\x48\x2c\x89\xc4\x92\x63\xd6\x14\xbb\xc9\x27\x79\x9a\x79\x3e\x3e\x8d\x24\x16\xb6\x86\xd9\x23\xe1\xbe\x02\xf7\x15\xb8\xaf\x8c\xce\x7d\x65\x6a\x99\x21\xbb\x74\x15\x81\x2f\x62\xd3\x3c\x90\x9d\x2e\xe6\x48\xff\xf8\xf2\x56\xf2\xae\x50\x27\xd2\x3f\x22\xfd\x23\xd2\x3f\x22\xfd\x23\xd2\x3f\x22\xfd\x23\xd2\x3f\x4e\x23\xfd\xe3\x89\xca\xca\x39\x59\x1f\x9b\xed\xfb\x91\xec\xb1\xd7\x64\x8f\xd3\x21\x46\xc8\xf1\x38\xcd\x53\xc7\x18\xcc\xcf\x58\x68\x4d\x47\xa9\x1d\x07\x91\xc9\x8f\xc8\xe8\x58\x53\x3f\x24\x72\x84\xf6\xbd\xad\x7d\xdf\x2a\xbb\xd5\x3a\x42\x02\xb7\xdf\xf0\x33\x0d\x9a\xd1\x89\x62\xb8\xdb\xe3\x62\x95\x9e\x9e\x56\x8a\x37\xa0\x2d\xd5\xb4\xf2\x12\x8c\x75\x27\x0c\xed\x14\x7b\xdf\x8e\x56\x55\x68\xa7\x93\x00\x2b\xe7\x2d\xf9\x40\x2c\xc3\x20\x96\x89\x98\x17\x80\x16\x18\x9b\xa9\x2f\xed\x00\x2d\xbf\xab\x4c\x21\x80\x96\x97\x0c\x5a\x58\x1c\xc9\xe7\xb5\x11\xa7\x5b\xb9\x32\x23\x2f\x6f\xcc\x67\xcb\xda\x0f\x5f\xd6\x9d\x19\xdb\xe3\x80\xc4\x41\x48\x1c\x84\xc4\x41\x48\x1c\x84\xc4\x41\x48\x1c\x84\xc4\x41\xd5\x06\x23\x71\x10\x12\x07\x21\x71\x10\x12\x07\x21\x71\x10\x12\x07\x21\x71\x10\x12\x07\x6d\x4c\x18\x24\x0e\x42\xe2\xa0\xcb\x4a\x1c\x54\xe0\xf8\x1c\x14\x5d\xdc\xad\x19\x5b\x08\xac\xcd\x6b\x33\x26\xc1\x39\x7b\xc5\x90\x3b\xee\xcd\x38\x1a\x44\x8e\xc0\x7b\xa6\xa8\xf3\xce\xf7\x01\x8a\x26\x14\xcd\x23\xa6\x4b\xdf\xfe\x33\xcd\xaa\xd4\xef\xdd\x19\x4d\xea\x34\xbd\xcb\x33\x4e\xb2\x32\xa7\xdd\x9e\x01\x9b\x73\xf4\xf5\x19\x90\xc1\x20\x83\x41\x06\x83\x0c\x06\x19\x0c\x32\x18\x64\x30\xc8\x60\x90\xc1\x20\x83\x41\x06\x83\x0c\x06\x19\x0c\x32\x18\x64\x30\xc8\x60\x90\xc1\x5e\xb4\x0c\x36\xe6\xdc\x4e\xdd\xde\x9f\x71\x9a\x38\x86\x0b\x34\x10\xdb\x32\xc5\xd8\x96\xf3\x6f\xd0\x00\x7b\x6f\x94\x35\xa4\x13\xde\x8e\x3b\x34\x70\x87\xc6\xa8\xb5\xc5\x8e\x12\xc3\x9c\x66\xa3\x4f\xb8\x45\x03\x8b\x5b\xd3\x84\x30\xf0\x66\x81\x37\x0b\xbc\x59\xc6\xe8\xcd\x32\xb9\x74\x30\x5d\x3a\x8e\xc0\x41\xb1\x66\x4d\xdf\x71\x99\x46\xa7\x4b\x3a\x6e\xd3\x78\x79\xcb\x79\x57\xe0\x13\xb7\x69\xe0\x36\x0d\xdc\xa6\x81\xdb\x34\x70\x9b\x06\x6e\xd3\xc0\x6d\x1a\x13\xb9\x4d\xe3\x44\x9d\xe5\xac\xeb\x34\x9a\x6d\xfd\x91\xec\xb1\xdf\x64\x8f\xd3\x41\x47\xc8\xf3\x38\xcd\x83\xc7\x18\x2c\xd0\x68\xa0\x4d\x57\x89\x1e\x07\x11\xce\x8f\xc9\xf4\x58\x53\x41\xa4\x7a\x84\x1c\x5e\x23\x87\xdf\xaa\x80\x46\xec\xa8\x3b\x35\xf4\x17\x6a\xb2\x4b\x03\x36\x1e\xa7\x8e\x3f\x98\x8e\x1f\x78\xa1\xce\x52\xa9\xc7\x93\x8b\xa5\xd9\x7d\x9b\x2a\x0d\xb1\x54\x9f\xad\x9e\x16\x0d\xd9\x5e\xaf\x37\x7a\xba\xbd\x9b\x35\xf0\x1e\xb4\x25\xa4\x6e\xbe\x0a\x63\xdd\x12\x1f\xf9\xb6\x60\x1f\x8c\x7d\xf0\x71\xcb\x6b\x4f\x8a\xea\x58\xd6\xfc\xb3\x35\xd5\x76\xd7\xfc\x63\x6f\xd9\x38\x6b\xf9\x07\x78\x19\x08\xbc\x4c\xc3\xd4\x80\xbe\xc0\xea\x5c\xc0\x02\x7f\x3e\x7f\x69\x79\x89\xef\x8d\xc0\x54\xea\x06\xf8\x02\xf8\x52\x0b\x5f\xda\xbb\xd1\x14\xc7\xce\x23\xf1\xcb\xa8\xee\x34\x85\xef\x7a\x3b\xb7\x9a\xe2\x2d\x38\x1e\xbe\x4c\xe3\xe2\x39\xf8\xb2\x63\x17\x0c\x5f\xf6\x51\x70\x97\x01\xbd\x5c\xce\x5c\xf8\x81\x5d\x86\xc2\x2e\xd3\x30\x32\xe0\x2e\xb0\x38\x93\x5f\xde\xe1\xf5\x02\xf0\x02\xf0\x52\x02\x2f\xfa\x08\xc4\x03\xaa\x58\x4b\x17\x9c\x7e\xb6\xe5\x1d\xba\x49\x1d\x17\x9c\x76\x7c\xc1\x69\xcd\x38\x20\xb3\x33\x32\x3b\x23\xb3\x33\x32\x3b\x23\xb3\x33\x32\x3b\x23\xb3\x73\xb5\xc1\xc8\xec\x8c\xcc\xce\xc8\xec\x8c\xcc\xce\xc8\xec\x8c\xcc\xce\xc8\xec\x8c\xcc\xce\x1b\x13\x06\x99\x9d\x91\xd9\xf9\xb2\x32\x3b\xe7\x44\xbe\x00\x45\x97\x76\xc1\xe9\x36\x02\x6b\xf1\x82\xd3\x69\x70\xce\x5e\x31\x64\xfd\x05\xa7\xc7\x83\xc8\xe1\xdd\x68\x4a\x75\xde\xf9\x3e\x40\xd4\x84\xa8\x79\xc4\x74\xe9\xd9\x8d\xa6\x61\x95\x7a\xbd\xe0\xb4\x51\x9d\x26\x77\xc1\xe9\x69\x56\xe6\xa4\x0b\x4e\x61\x73\x8e\xbe\xe0\x14\x32\x18\x64\x30\xc8\x60\x90\xc1\x20\x83\x41\x06\x83\x0c\x06\x19\x0c\x32\x18\x64\x30\xc8\x60\x90\xc1\x20\x83\x41\x06\x83\x0c\x06\x19\x0c\x32\xd8\xcb\x96\xc1\xc6\x9c\x6e\xbb\xd3\x0b\x4e\x4f\x14\xc7\x70\xc1\x29\x62\x5b\xa6\x18\xdb\x72\xf6\x05\xa7\x60\xef\x8d\x72\x88\x74\xc3\xdb\x71\xc1\x29\x2e\x38\x1d\xb5\xb6\xd8\x4d\x92\x98\x13\x6d\xf4\xf1\x17\x9c\x62\x71\x6b\x9a\x1a\x06\xde\x2c\xf0\x66\x81\x37\xcb\x28\xbd\x59\xa6\x96\x14\xa6\x53\xc7\x11\x38\x28\xd6\xac\xe9\xf5\x17\x9c\x76\xbb\xa4\xe3\x82\xd3\x97\xb7\x9c\x77\x05\x3e\x71\xc1\x29\x2e\x38\xc5\x05\xa7\xb8\xe0\x14\x17\x9c\xe2\x82\x53\x5c\x70\x3a\x8d\x0b\x4e\x4f\xd5\x59\xce\xb9\xe0\xb4\xe1\xd6\x1f\x09\x1f\x7b\x4d\xf8\x38\x21\x74\x84\x54\x8f\xd3\x3c\x78\x8c\xc1\x02\x8d\x06\xda\x74\x94\xea\x71\x18\xe1\xfc\x88\x54\x8f\x75\x15\x44\xaa\x47\xc8\xe1\x35\x72\x78\x6b\x17\x9c\x02\x36\x1e\xa9\x8e\xe3\x82\xd3\x8b\xbc\xe0\x14\xef\xc1\xf1\x42\xea\x34\x6e\x9d\xc3\x05\xa7\xd8\x07\xe3\x82\xd3\x11\x69\xaa\x63\xbc\xe0\x14\xe0\x65\xdc\xe0\x65\x1a\xa6\x06\xf4\x05\x56\xe7\x02\x16\x78\x5c\x70\x5a\x99\x44\x80\x2f\x80\x2f\x1b\xf0\xa5\xb5\x0b\x4e\x71\xec\x3c\x16\xbf\x8c\xe9\x82\x53\xf8\xae\xb7\x73\xc1\x29\xde\x82\x13\xe0\xcb\x34\xee\x9e\x83\x2f\x3b\x76\xc1\xf0\x65\x1f\x05\x77\x19\xd0\xcb\xe5\xcc\x85\x1f\xd8\x65\x28\xec\x32\x0d\x23\x03\xee\x02\x8b\x33\xf9\xe5\x1d\x5e\x2f\x00\x2f\x00\x2f\x25\xf0\xa2\x37\x0d\x6c\x91\x45\xad\xdd\x70\xfa\xe0\x0a\x1c\xf9\x39\xb3\xf6\xc3\x17\x75\xc5\x69\xdd\x40\x20\xb9\x33\x92\x3b\x23\xb9\x33\x92\x3b\x23\xb9\x33\x92\x3b\x23\xb9\x73\xb5\xc1\x48\xee\x8c\xe4\xce\x48\xee\x8c\xe4\xce\x48\xee\x8c\xe4\xce\x48\xee\x8c\xe4\xce\x1b\x13\x06\xc9\x9d\x91\xdc\xf9\xb2\x92\x3b\xe7\x50\xbe\x44\x8a\x2e\xed\x92\xd3\x1a\x08\xd6\xe2\x2d\xa7\x13\x61\x9d\xbd\xa2\xc8\xfa\x6b\x4e\x4f\x80\x91\xc3\x7b\xd3\x94\x2b\xbd\xf3\x9d\x80\xb8\x09\x71\xf3\x98\xf9\xd2\xb3\x3f\x4d\xd3\x3a\xf5\x7a\xd5\x69\xb3\x4a\xfd\xff\xec\xbd\x49\x8f\xdb\xc8\xb6\x70\x3b\x3f\xbf\x22\xe0\x89\x06\x27\x53\x09\x7b\x52\x0f\x36\xbe\x41\x96\xed\xba\xcf\x17\x85\xeb\x84\x5d\xa8\x91\x81\x0b\x8a\x0c\xc9\x7c\xa6\x48\x82\xa4\xec\x4a\x7c\x38\xff\xfd\x21\x22\xd8\x49\x22\xd5\xb2\x09\x2a\xd7\xc4\x36\x9c\x4a\x8a\xc1\x26\x9a\xb5\x76\xec\x3d\xb9\x5a\xa7\x17\x0e\x36\x17\x15\x3b\x65\xe8\x39\xbf\xda\x29\x46\x0c\x23\x86\x11\xc3\x88\x61\xc4\x30\x62\x18\x31\x8c\x18\x46\x0c\x23\x86\x11\xc3\x88\x61\xc4\x30\x62\x18\x31\x8c\x18\x46\xec\x85\x1b\x31\x9b\x93\x6f\xf7\x5a\xee\xf4\x52\x4d\x46\xbd\x53\xb6\xba\x4c\x72\xab\xcb\xd5\x05\x4f\xe1\xef\xa7\x25\x15\xe9\x89\xb9\x53\xf2\x94\x92\xa7\x76\x3b\xc6\x7e\xf2\xc6\x5c\x3a\x50\x9f\x5f\xf4\x94\x0e\xee\xe4\x7c\x31\x04\xb7\x10\xdc\x42\x70\x4b\x7e\x3a\xf6\x05\xb7\x4c\x2d\x5b\x4c\xbf\x61\x24\x44\x2d\x8a\x86\x9e\xbd\xb9\xf6\x69\xcf\x1d\x3b\xc5\x4f\x5f\x5e\x9f\xde\x17\x06\xa5\xf8\x29\xc5\x4f\x29\x7e\x4a\xf1\x53\x8a\x9f\x52\xfc\x94\xe2\xa7\xd3\x28\x7e\x7a\xb1\x75\xb9\xa6\xfa\xe9\xa9\xb3\x7f\xd2\x41\x0e\x9a\x0e\x72\x4a\x0c\x89\x4c\x90\xd3\x5c\x7b\xd8\x30\x08\xd9\xc3\x6e\x7a\x4a\x05\x39\x92\x4a\x3f\xa7\xfe\x46\xd3\x19\x92\x0c\x12\x43\xde\x64\xc8\x3b\xab\x81\x0a\x75\x3c\x5b\x98\x53\x05\xf5\x26\xab\xa0\xf2\x26\x5c\x62\x56\xa7\x51\x9c\x8e\x3a\xa8\xcc\x87\xa9\x83\x6a\x91\x61\xb5\xb1\x0e\x2a\x08\x66\xec\xe1\xe6\x18\x82\x99\xc6\x60\x03\x87\x61\xdc\xb9\x81\x2e\x9e\x4a\xa8\x3b\x0f\x11\x0c\x06\x06\x13\xf4\x53\x0a\x95\xb5\xe7\xf9\x14\xc6\xa6\x62\xa8\x63\x53\xf3\xe9\x45\xb5\xf3\x26\x74\x4a\x61\xa6\x51\xab\x8e\x28\x77\x66\xc3\x44\xb9\xdb\xc2\x60\xc6\x0c\x7e\xb9\xb6\xfb\x87\xc1\x8c\xc6\x60\xa6\x31\xd4\x00\x61\x18\x76\xa6\xdf\xc5\x13\x0c\x43\x30\xcc\x4b\x05\x31\x89\xa9\x8d\xdb\x59\x05\xd4\x13\xeb\xad\x53\x00\xb5\x97\x02\xa8\xd5\xd5\xff\x23\x4a\x1e\x83\xa0\x9c\x5b\xd8\x82\x70\xaa\x13\xbc\xb5\x62\x1b\x56\x56\xc1\x26\xfb\x36\xd9\xb7\xc9\xbe\x4d\xf6\xed\x5b\xca\xbe\xdd\x9e\x7c\x7b\x98\xe4\x65\x83\xa4\xdd\x3e\x92\x75\xbb\xa3\x96\xbe\xe0\x14\x74\x83\xe4\x12\x3f\x92\x4a\xbc\xa3\x96\xee\xee\x8f\x27\x89\x38\x49\xc4\x49\x22\x4e\x12\x71\x92\x88\x0f\x92\x44\xbc\x25\x87\xf8\x30\xc3\x58\xff\xfc\xa8\xfb\x73\x26\xe3\xf9\x84\x32\x9e\x1f\x4d\x78\x3e\xd0\x24\x66\xb4\x54\xe7\xc7\x32\x9d\x0f\x34\x15\xb7\x31\xc7\x79\x4b\x8a\xf3\x0b\x28\x74\x3d\xee\xaf\x13\x0c\x3d\x91\x00\xa7\x5b\xe5\xd0\xb5\xcb\x6f\x29\x88\xa6\xec\x33\x28\x1a\x14\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x1a\x14\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x1a\x14\xdd\xfc\xd2\xdc\x34\x8a\xd6\x07\x78\x50\x83\x57\x12\xa9\xa1\x43\x2d\xa5\x53\x5d\x54\xe2\x34\x2e\x9d\xcf\x02\x42\xcf\xff\xe9\x7b\x1b\x27\xa8\x5f\x24\xa7\x9c\xd0\xbf\x2f\x8f\xff\x25\x3f\xfe\xbc\x96\xb9\xfe\x6d\x39\x27\x9b\xe9\xc3\xcd\x2a\xde\xb4\x05\x10\x4a\xfe\x2a\xfc\x30\xcd\xa4\x53\xf5\xab\xc0\xee\xbe\x61\xf7\xaf\x6a\x07\xd7\xfe\xcd\xfc\xd3\x4f\x2d\x03\xdf\x07\x76\x6a\xe9\xf7\xf9\xa3\x5a\x49\x8c\x42\xc1\xf5\x85\xec\x09\x85\xef\xdf\x19\x88\x38\x44\x1c\x22\x0e\x11\x87\x88\x43\xc4\x21\xe2\x10\x71\x88\x38\x44\x1c\x22\x0e\x11\x87\x88\x43\xc4\xbb\x1e\xc6\x20\xe2\x10\x71\x88\x38\x44\xfc\x26\x88\xb8\xe7\xc8\xb5\x9a\x8b\x9e\x1c\xa0\x7d\x1a\x08\xff\xa0\x0f\xfb\x55\x66\xf0\xef\xc9\xf2\xef\xf2\x1e\x82\xbd\xed\xc0\xde\xe5\x0d\x81\x76\x43\xbb\xa1\xdd\xd0\x6e\x68\x37\xb4\x1b\xda\x0d\xed\x86\x76\x43\xbb\xa1\xdd\xd0\x6e\x68\x37\xb4\xbb\xeb\x61\x0c\xda\x0d\xed\x86\x76\x43\xbb\x6f\x83\x76\xcb\x38\x88\x9e\xd5\x8c\xa4\x63\xdc\x5d\x1e\x17\xde\x3d\x5d\xde\x5d\xde\x44\x80\xb7\x25\xc0\xbb\xbc\x23\x10\x6f\x88\x37\xc4\x1b\xe2\x0d\xf1\x86\x78\x43\xbc\x21\xde\x10\x6f\x88\x37\xc4\x1b\xe2\x0d\xf1\x86\x78\x77\x3d\x8c\x41\xbc\x21\xde\x10\x6f\x88\xf7\x4d\x10\xef\xb2\x30\x66\xfa\xf0\x7f\xcb\x7f\xff\x87\x44\x28\x80\xf1\xd3\xc1\x78\x55\xca\xba\x39\x25\x0a\x68\x9c\x14\x28\x20\x72\x10\x39\x88\x1c\x44\x0e\x22\x17\x16\xc2\x55\x10\x39\x88\x1c\x44\x0e\x22\x07\x91\x83\xc8\x41\xe4\x20\xf2\x6b\x87\xb1\xbc\x69\xea\x14\xf4\xfd\x52\x4b\x64\x91\xba\x51\x2c\xef\x44\xba\x71\x35\xf7\xd4\x6b\x24\xe9\xac\x0d\x3a\x8b\x93\x48\x5f\xca\xfd\xf3\x2f\xa9\xd4\x6e\x1b\x62\x27\xab\xd1\x12\xf5\x60\xa9\x15\x45\x7e\xc6\xd0\x7f\xe8\x3f\xf4\x1f\xfa\x0f\xfd\xef\x86\xfe\x9b\x9f\xff\xe7\x2c\x09\x50\x27\xff\x61\x31\xdc\x15\xa5\x3a\x7b\x32\x00\x77\xd5\x3c\x57\xcf\xe5\xf3\x39\x91\x9a\x2a\x57\x13\xf8\xd9\xd6\xf2\xb5\x76\x6c\xfc\x81\x6d\xfe\x00\x77\x70\xc0\x1d\xe0\x0d\xf0\x06\x78\x03\xbc\x01\xde\x00\x6f\x80\x37\xc0\x1b\xe0\x0d\xf0\x06\x78\x03\xbc\x01\xde\x00\x6f\x30\x49\x6f\xa0\x85\x41\xde\xcc\x43\x2b\xd1\xba\x1b\xb0\x43\x0b\x60\x3c\x30\x1e\x18\x0f\x8c\x07\xc6\x63\x92\xc6\x83\x34\xf7\xd8\x89\xa3\x76\x62\x2b\xe1\x3d\x62\x82\x04\xf7\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xb0\x88\x66\xe3\x24\x70\x12\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xc0\x49\x40\xf6\x21\xfb\x90\x7d\xc8\x3e\x64\xff\x85\x93\xfd\xce\xb7\x30\x74\x4b\xf7\xd9\xb9\x70\x13\x6e\x00\x2f\x30\xec\x86\x05\x9c\x00\x4e\x00\x27\x80\x13\xc0\x09\xe0\x04\x70\x02\x38\x01\x9c\x00\x4e\x00\x27\x80\x13\xc0\x09\xe0\x04\x7a\x1b\xc6\xea\xfb\x14\x1a\x16\xa0\x6c\x4f\x40\x62\x20\x31\x90\x18\x48\x0c\x24\x46\x37\x12\x83\xba\xc4\x48\x88\x13\x24\xc4\x56\x85\x62\x4c\x04\x15\x89\xd1\x11\xe8\x08\x74\x04\x3a\x02\x1d\xd1\x71\x9f\x8a\x8e\x40\x47\xa0\x23\xd0\x11\xe8\x08\x74\x04\x3a\x02\x1d\xc1\x16\x05\xe8\x3e\x74\x1f\xba\x0f\xdd\x87\xee\x5f\x41\xf7\xbb\xdf\xa3\xd0\x2d\xe1\x67\x93\xc2\x6d\xf8\x01\xdc\xc0\xc0\xbb\x14\xf0\x02\x78\x01\xbc\x00\x5e\x00\x2f\x80\x17\xc0\x0b\xe0\x05\xf0\x02\x78\x01\xbc\x00\x5e\x00\x2f\x80\x17\xe8\x6d\x18\xdb\xda\xa6\xd0\xb0\x02\x65\x9f\x02\x26\x03\x93\x81\xc9\xc0\x64\x60\x32\x3a\x31\x19\x89\xd4\x4c\xbc\xf3\x3a\x0a\x5f\xcc\x71\x29\xa4\x70\x1b\x1e\xa2\xba\x9d\xec\x53\x18\x67\x9f\x42\x75\x07\xf0\x11\xf8\x08\x7c\x04\x3e\x02\x1f\x81\x8f\xc0\x47\xe0\x23\xf0\x11\xf8\x08\x7c\x04\x3e\x02\x1f\x81\x8f\xe8\x7a\x18\x83\xee\x43\xf7\xa1\xfb\xd0\x7d\xe8\xfe\xd4\xe9\x7e\xe7\xfb\x14\x3a\x26\xfc\xec\x53\xb8\x0d\x3f\x80\x1b\x18\x76\x9f\x02\x5e\x00\x2f\x80\x17\xc0\x0b\xe0\x05\xf0\x02\x78\x01\xbc\x80\xc0\x0b\xe0\x05\xf0\x02\x78\x01\xbc\x00\x5e\xa0\xb7\x61\xac\xbe\x4f\xa1\x69\x05\xca\x3e\x05\x4c\x06\x26\x03\x93\x81\xc9\xc0\x64\x74\x62\x32\xd2\xcc\xc9\xe4\x72\x13\x74\xbe\x51\xe1\x6b\x7e\x60\x76\x2a\xdc\x86\x89\xa8\xdd\x4f\xb6\x2a\x8c\xb3\x55\xa1\x76\x0b\x70\x12\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xc0\x49\xe0\x24\x70\x12\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xe8\x7a\x18\x83\xf0\x43\xf8\x21\xfc\x10\x7e\x08\xff\xe4\x09\x7f\xe7\x9b\x15\xba\xa6\xfc\xec\x56\xb8\x11\x47\x80\x1f\x18\x76\xbb\x02\x6e\x00\x37\x80\x1b\xc0\x0d\xe0\x06\x70\x03\xb8\x01\xdc\xc0\x76\x83\x71\x03\xb8\x01\xdc\x00\x6e\x00\x37\x80\x1b\xe8\x6d\xbf\x42\xe3\x12\x94\x0d\x0b\xe8\x0c\x74\x06\x3a\x03\x9d\x81\xce\x38\x4f\x67\x50\x41\x01\xe7\xd0\xea\x1c\xb6\xeb\x26\xfc\x11\x25\x8f\x41\x50\x7a\x88\x14\xf9\x40\x1d\x05\xfc\x03\xfe\x01\xff\x80\x7f\xc0\x3f\x74\xdc\xa7\xe2\x1f\xf0\x0f\xf8\x07\xfc\x03\xfe\x01\xff\x80\x7f\xc0\x3f\x8c\xea\x1f\x20\xde\x10\x6f\x88\x37\xc4\xfb\x26\x88\x37\xb9\x78\xf6\x7f\x02\xf3\x2e\x99\xf7\x4e\x06\x1e\xa0\xf7\xf8\xd0\x9b\xa8\x7b\xa8\x37\xd4\x1b\xea\x0d\xf5\x86\x7a\x43\xbd\xa1\xde\xdb\x0d\x86\x7a\x43\xbd\xa1\xde\x50\x6f\xa8\x37\xd4\x1b\xea\x0d\xf5\x86\x7a\x43\xbd\xcf\x9b\x8a\xdf\x34\xf5\x5e\xc8\xcc\x79\xfd\x70\x22\xe8\x5e\xc9\x6c\x7b\x56\x62\x1a\x7d\x10\x44\xf7\x45\x98\x47\x84\xdb\xdd\xb2\x67\x7d\x07\x8e\x00\xe8\x95\xcc\x0c\x7e\xd6\x1f\x7e\x7c\xfa\xf4\x65\xef\xda\xdb\x06\x9c\x6b\x27\xa9\x53\xd5\xf7\x42\x9d\xff\x55\xfe\xd9\xfe\x6c\xab\x79\x59\x12\xa9\x59\x51\x22\x7f\xfa\xea\x35\x3a\xd5\xeb\x98\xd5\x68\x92\x8f\x8f\xc5\x3c\xa8\xc8\xba\xf4\xbe\x3c\xee\x97\xfc\xb8\x08\x99\x41\x5f\x0a\x75\x7b\x6a\x6f\xc5\xfe\xfd\xb0\x4b\xce\xcc\x55\xd3\xe6\x79\xd3\xe6\xfb\x67\xdb\xdf\x5b\x72\xc4\xcd\xf4\xa4\x65\xda\xdf\x8f\x1d\x3b\x53\xbf\xd7\x28\x1a\x14\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x1a\x14\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x9a\xc6\x87\x06\x45\x73\xf3\x8a\xc6\x93\x71\x10\x3d\xab\x09\x49\x37\xf8\xfa\x43\x79\x3c\xb0\xf5\x98\xd8\xba\xba\x0f\x36\xe3\xea\xea\x2c\x6f\x0d\x53\xef\xbf\x07\xe0\x69\xf0\x34\x78\x1a\x3c\x0d\x9e\x06\x4f\x83\xa7\xc1\xd3\xe0\x69\xf0\x34\x78\x1a\x3c\x0d\x9e\x06\x4f\x83\xa7\xc1\xd3\xe0\x69\xf0\xf4\x79\x53\xf1\x17\x80\xa7\x5b\xea\xde\x12\x7c\xfd\x32\x28\x76\x55\x7e\xf6\xc0\x9d\x69\xe2\xa5\x35\x54\xdc\xfe\xa2\xb5\x8e\x4e\x30\x53\x98\x29\xcc\x14\x66\x7a\xd3\xcc\xf4\x00\x34\x6d\x1a\xae\x2b\x19\xd7\x6d\xd7\x3a\x08\x3a\x3d\xc6\x4e\x27\xd3\xe0\x53\x29\xe3\x31\xcc\xd8\x65\x83\x77\xa7\xe9\xc0\x46\x60\x23\xb0\x11\xd8\x08\x6c\x1c\x06\x36\xb6\xd1\xc6\x21\x07\x35\xf8\xdd\x84\xf8\xdd\x71\x80\x37\xe8\xf4\x60\x34\x8c\x77\x94\xe3\x75\x79\x19\x76\x61\xde\x24\x68\x5e\x1b\xce\x6b\xbe\x30\x3b\x68\xc7\x82\xf8\x42\xb6\xc3\x9f\x12\x6f\x18\xa5\x07\x80\xa9\x99\x33\x08\x67\x62\x6c\x74\x78\x74\x69\x2e\x54\xc7\xf0\xb2\x78\xfd\x16\x91\xf7\xbc\xf7\xf6\xed\xfc\xe7\x4e\x25\xea\x7e\xdf\xa3\xf6\x77\xa8\x87\x89\x45\x3e\x5f\xba\xd3\xc9\xf0\x5d\x27\x2b\x26\x10\x5b\x64\xa3\x58\xdd\xa8\x19\xfa\x42\x8a\x58\x3d\xfc\x6a\x69\x34\x17\x8f\xa1\xf0\x43\xc3\x15\xa3\x44\x6c\xc2\x12\x4d\x7a\xc2\x4b\x9e\xbf\x6c\x42\xe1\xf9\x89\x54\xc3\x83\x2c\x79\x97\x1e\x51\xd5\xec\x36\x07\x7e\x45\x67\x96\xe3\x15\xb1\xdc\x24\x7a\x29\x14\x27\x91\x2b\xd3\x34\x9f\x74\xd4\x56\x74\x73\xf1\xb7\xfe\x46\xbd\xc4\xd4\xf3\x46\x35\xe3\x78\x0c\x82\xb7\x7a\x92\xe9\x25\xcf\x22\xd9\x84\x22\xcd\x1c\xd5\xd5\x17\x33\xeb\xfc\x70\xb5\xd0\xa7\xea\x19\x30\xe7\x7a\x03\x7d\xf0\x81\xfe\xf7\xcd\xe1\xfe\xf7\xbd\x59\xc0\x8c\x79\x7e\x6f\x0e\x9d\xdf\xa3\xeb\xca\x78\xd4\x13\xec\x6f\x00\xd3\xc3\x84\x95\x03\x98\x59\xc0\xb6\x0f\x61\xe6\xe7\xc2\x55\xdf\xe2\x16\x13\x47\x86\xb3\xc3\xc3\x99\xb9\x68\x5b\x89\x90\x8a\xcb\x87\x95\xc3\xca\x61\xe5\xb0\x72\x58\x39\xac\x1c\x56\x0e\x2b\x87\x95\xc3\xca\x61\xe5\xb0\x72\x58\x39\xac\x1c\x56\x0e\x2b\x87\x95\xc3\xca\x9d\x9c\xd0\xfd\x6b\xe6\x64\x9b\x74\x14\xa2\x69\x86\xd8\x0a\x0b\xda\x49\x37\xaf\x4d\x07\xf2\x82\x37\x74\xe7\x23\xbc\x3a\x23\xfd\xbe\xa9\x27\x45\xa4\x6e\x14\xcb\x3b\x91\x6e\x5c\xdd\x11\xeb\xfe\x4d\x3a\x6b\xf3\xf6\xc6\x49\xa4\x67\x14\xfb\xcd\x29\x77\x9f\xec\xb6\x21\x76\xb2\xda\x1e\x8b\x1d\x09\xd7\x5b\xd3\xfa\xdf\xe4\xa7\xff\xea\x6c\x7b\x8e\xf9\xf9\x7f\x4e\xdc\xa5\xa3\x07\xee\x6d\x3a\x09\xaf\x3f\xcc\xeb\xd5\x25\x1b\x61\xe7\xcc\xd1\x01\xf4\xab\x59\xdd\xea\x15\xf2\x3f\x7a\xa5\xb9\x50\xff\x72\xdc\x6c\x2e\xc4\x47\xf5\x77\xf1\xff\x6b\xc7\x0f\x33\xc7\x0f\x53\xe1\x06\x9b\x34\x93\xc9\x7d\x7e\xf7\xdd\x9c\x28\x89\xc0\xff\x21\xc5\xac\x6c\xda\xac\x69\x48\xd4\x87\x1e\x67\xae\x50\x36\xb5\x14\x08\x8b\xa2\xd1\xd2\xd3\xad\xd5\xed\x54\x6f\x76\x9c\x16\x6d\xca\x97\x50\x9b\x54\xad\x8c\x9c\xd0\x2c\x65\xcd\x0c\xa0\xb9\x79\xea\x18\x13\x18\xf2\xad\x74\x98\x2b\x69\xa9\xc2\x8c\x37\x07\x7b\xc3\x38\x70\x5c\x49\x87\x78\x66\x87\xa8\xaf\x1a\x01\x39\x04\xe4\x10\x90\x73\xb3\x01\x39\x3d\xc6\xbb\x6c\x2c\x1d\x2b\x4e\x0c\x77\x21\x62\xf3\xec\x10\x97\xa1\x07\x88\x8e\x51\xca\x07\xdd\x9e\xcf\xfa\x41\x38\x40\x54\x18\x0f\xc6\x1c\x0f\xfa\xc2\xb5\x75\x02\xeb\x87\x22\x35\xd0\x54\x2c\xe4\x32\x32\x2a\xa5\xf0\x1d\x55\x84\x54\xae\x98\xf4\x85\xd8\x48\x13\xf3\xb2\x90\x22\x8c\xc2\xfb\x50\xae\x1c\x7d\xb9\xf3\x2f\x9e\x8b\xbf\xca\x38\x24\xe3\x3e\xcb\x1b\x9d\x77\x37\xfe\x7a\x2d\x3d\xdf\xc9\x64\xf0\x9c\x07\xda\xd4\xc3\xa8\x42\x3f\xb8\xcb\xb1\xa9\x56\x05\x62\x95\xa8\x19\x6d\x2c\x13\x3f\xf2\x4a\xc6\x5c\x4d\x6e\x55\xbb\xcb\x6b\xbe\x49\xd5\x49\xd6\x25\x83\xa3\x7e\xb3\x68\x50\xfe\x25\xcb\xda\xd2\xc9\x57\xbf\xa0\xcf\x73\x2d\x9d\xb0\xf1\x1c\x1b\xee\x9f\x3e\xa7\x27\x7d\x4a\xa3\x32\xe7\x0f\x32\x4e\xa4\xba\xb8\xde\x5b\x11\x07\xd2\x49\x65\xe9\x85\x9f\x92\x28\x76\x56\xfa\x2e\x3f\x45\x81\xef\x3e\xdf\x99\x0b\x6d\x4c\x68\x71\xc1\xbc\xf2\x00\xea\x51\x78\x3d\xff\x6d\x2e\x6a\xcb\x70\x4f\xc6\x32\xf4\x64\x98\x55\x81\x0c\x52\x44\x49\xfc\xdd\x09\xd5\x65\xcb\x79\xe0\xc3\xd2\x09\x8a\x50\xa6\x6f\xaf\xcc\x8f\xbf\xbd\x12\x4b\x3f\xd4\x28\x2f\x29\xbf\xcc\xf1\x3c\xad\x0c\x1f\x0c\xcd\xf6\x2a\xf3\x63\x0e\x3f\x4b\xab\x5f\x32\xe1\x43\x73\xf1\xd1\xd7\xef\x66\xed\xd4\xa3\x64\xbf\x6d\xda\x09\x9b\x48\x3e\x13\xbd\xa4\x7b\x8e\x28\xfb\xde\x74\xf3\xcc\x19\x7e\x28\xda\xd6\xcf\xad\x3b\xa1\x33\xd4\x0d\x53\x7d\xd0\xf7\xe8\x97\x58\x39\xc9\xc2\x59\x6d\x85\x9e\x96\x1d\x89\x4c\x96\x51\xb2\x56\x57\xbc\xf1\x6a\x7c\xde\x69\x4f\xfb\xc5\xd0\xaf\x66\xf1\x5e\xc5\xe6\xca\xf9\xea\x99\x77\x7d\xaf\x8a\x43\xd2\xe1\x19\x3a\x32\xac\xbc\x83\xa9\xcc\x0a\x8e\x5b\x04\x60\xcc\x6b\xb7\xaa\x50\xf7\x05\x01\xae\x70\xcc\xf6\x97\xcd\x85\x09\x7b\xd6\xe1\x00\xf5\xde\x74\x66\xda\x30\x13\xf7\xf9\xe3\xb5\xfd\xf8\xa5\xef\xc4\xec\x77\xc7\xfd\xa1\x66\x4c\xa1\xa7\x3e\xe5\x04\x41\xf4\x4b\x7f\x68\xe7\xc2\x99\xa8\x9c\xfc\x2d\xde\x3e\x48\xd1\x82\x45\x79\xa4\x77\x62\xf6\x47\x94\xc8\xda\x61\x85\xeb\xa4\xae\xe3\xa9\xd6\xe7\xd7\x47\x8f\x4e\xe6\x78\xa9\xe9\xee\xf7\x0e\xb8\x2c\x8f\xd1\xf4\xb8\xc5\xbb\x0f\xeb\x04\x96\x01\xd7\x58\x98\x61\x02\xdf\x6d\xf6\x44\x76\x2e\x06\x62\x6d\x00\x5b\xd7\x02\x95\xd3\x31\xde\xf1\x3a\x86\xb4\x3b\xf5\xbf\xd7\xdf\xfe\xef\xf6\x55\xc0\x5a\x26\x2b\x79\xf4\x53\x69\x96\x38\x99\x5c\xf9\xee\xfd\xde\xe7\x5f\xd4\x7a\x44\xb7\xfb\x56\x78\xd5\x81\x57\xf9\xa9\x96\x5c\x8c\xf5\x89\x65\xeb\x13\x1b\x06\x2a\x3b\x79\x50\x3d\xd6\xc2\xb6\x41\xa0\xd7\x8a\x21\xda\x9f\xe7\x0f\xe7\xa1\xb3\xad\xab\x72\x3b\x2c\x39\x01\x00\xe3\x04\x00\x50\x55\xea\xd6\xf3\x71\x36\xdc\x11\x76\xfc\xb1\xe3\x8f\x1d\x7f\xec\xf8\x63\xc7\x1f\x3b\xfe\xd8\xf1\xb7\xdb\x60\x76\xfc\xb1\xe3\x8f\x1d\x7f\xec\xf8\x63\xc7\x1f\x3b\xfe\xd8\xf1\xc7\x8e\xbf\xad\x07\x86\x1d\x7f\xec\xf8\xbb\xad\x1d\x7f\xd4\xf9\xee\x2a\xef\xe6\x34\xd8\xe7\xf0\x68\xf2\x40\xbe\xcd\xf3\xe1\xa4\x25\x61\xfd\xb5\x13\x6f\x7d\x47\xd0\xa3\xe8\xd1\x73\x9f\x99\x31\xc2\xf8\x4f\x3c\xaf\xe1\xf3\x69\x9e\x74\x62\x93\xcb\xa3\x79\xc5\x40\x74\x51\xfe\x4c\x86\xa5\xe6\x61\xe9\xa4\xbc\x99\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\x61\xcf\xb0\x67\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\x61\xcf\xb0\x67\xd8\xb3\x97\x6d\xcf\x6c\xde\x07\xd9\x6b\xbe\xcc\x6b\x74\x1a\x79\x32\xd9\x26\x33\xd9\x6d\x32\x57\xe7\xc7\x84\xc7\x37\xf3\xf8\xd6\xbc\x98\xfd\x30\x78\xf2\x61\x92\x0f\xd3\x7e\x07\xd9\x4f\x1e\xcc\x6b\x06\xef\xf3\xf3\x5f\xd2\xe1\xb5\x75\x78\xed\x79\x2f\x09\x8c\x21\x30\x86\xc0\x98\x29\x04\xc6\x4c\x2d\xaf\x65\xff\xe1\x27\x44\x42\x5e\x90\xc7\xb2\xdf\x0e\x9f\xfc\x95\x2f\xaf\x9f\xef\x0b\x9f\x92\xbf\x92\xfc\x95\xe4\xaf\x24\x7f\x25\xf9\x2b\xc9\x5f\x49\xfe\xca\x69\xe4\xaf\xbc\xca\xd6\x5c\x93\xb7\xf2\xc4\x95\x00\xf9\x2a\x47\xca\x57\x39\x21\xce\x44\x9e\xca\x69\xae\x43\x6c\x18\x90\xec\xe2\x3a\x3d\xe5\xa7\x1c\x51\xc9\x9f\x91\x97\xb2\xe9\x2c\xc9\x47\x89\x68\x6f\x13\xed\x0f\x49\x14\x04\x6a\xce\x5d\x19\xf7\x93\xf6\x63\x17\xbf\x66\x42\xfa\x20\x92\xcd\x33\x83\x93\xf6\x66\x7f\x29\xee\x80\xed\x53\x84\xb6\x6e\xbe\x6c\xc0\x5e\x77\x6f\xc3\xe0\x74\xdd\x6a\x69\x00\x2b\xc2\x72\xce\xd2\x0d\xc4\xbb\x2f\xa6\x2d\xe3\xfd\x8b\x9f\x22\xb7\xcd\x90\x3b\x8a\x12\x3c\x21\x02\xf2\x53\x43\xb0\xe2\xd6\x06\x96\xbb\x3a\xaa\xcf\x91\x5f\xb5\x47\x24\xdf\xdf\xe1\x46\xeb\x38\x90\x9a\xe6\x95\xc7\xd1\x37\xce\xce\xf0\xc8\xe6\x79\xe6\xfe\x5b\xc2\x7c\x93\xf9\x66\xeb\x7c\x33\x75\x9d\x40\x9e\x13\xde\xa9\x7f\xa1\x78\xec\x08\x7b\xea\x20\xce\xf3\xab\xbe\x05\x16\x11\x03\x73\x42\x63\xcc\x21\xfa\x09\x00\xdc\xba\xc0\xdd\xc6\xfe\xf1\x36\xf4\x10\x04\xb8\xfd\x42\x4c\x63\xf9\x75\xe4\x9d\x01\xca\x02\x65\xcf\xe9\x62\x47\x88\xff\x1b\xaf\xd7\xef\x27\xf4\xef\xc2\x5e\xff\x4c\x01\x78\xdd\x00\x80\x09\x1c\xdd\x04\x4e\x63\xb0\x41\x07\x32\xf2\x4c\xbe\x9b\xef\xc9\x04\x5e\xda\xd1\x0f\x26\x01\x77\x4e\x10\x1e\x03\x8f\x69\xe7\x31\x06\xe0\x9f\x03\x64\xf4\x6f\xb0\x06\xed\x92\xc8\x98\x9b\x60\x51\xaf\xcd\xc6\xcc\x4b\xe0\x0c\x6f\x46\x1f\x74\x66\xfb\xe5\xb0\x75\xc6\xcc\x46\x4d\x66\xca\x6c\xd4\xec\x63\x1a\x6f\xdb\x46\xcd\xb3\x91\xcd\x75\xc3\x02\xcc\x66\x7c\x66\x33\x8d\x21\x08\x68\xc3\x50\x74\x1b\x5d\x3e\x31\xdc\xc4\x70\xc3\x70\x1a\x19\x8e\x9a\x4d\xc8\xe5\x26\x48\x65\x76\x2a\xb6\x31\x99\xc8\x93\x3c\x83\x6b\xb1\x5b\x38\x5a\x0a\xf5\x5e\x88\xaf\xf9\x01\xbf\x4a\xab\x97\xa7\x8d\x1f\x56\x5f\xf0\xce\x64\xca\xfc\x3f\xdb\x49\x2d\x4f\x39\xe6\xf6\x6f\x0e\x3f\xf5\x50\xf7\xa5\x71\xe6\xd1\x74\x4b\x28\x8c\x42\x61\x14\x0a\xa3\x50\x18\x85\xc2\x28\x14\x46\xa1\x30\xca\x6e\x83\x29\x8c\x42\x61\x14\x0a\xa3\x50\x18\x85\xc2\x28\x14\x46\xe9\x19\x6c\x52\x18\x85\xc2\x28\x17\x4c\x0f\x28\x8c\x62\x5e\x21\x0a\xa3\x74\x1f\x62\x59\xe1\xa2\x3f\xfd\x74\x1c\x64\xaf\x1e\xe7\x3e\x62\x2d\xf7\x49\xd8\xe9\xc8\xfe\x94\x44\x16\xce\x54\xf8\xe7\xf0\x78\xf2\x40\xf6\x8a\x0b\x00\xa5\x25\x81\x39\xf5\x33\x6f\x7d\x4f\xd0\xa1\xe8\xd0\xb3\x1f\x9a\x51\xf6\x50\x9d\x78\x62\x43\x64\x09\xb9\xe4\xcc\x26\x97\x1d\xe4\x9a\xf1\xe8\xc4\x04\xef\xb5\x24\xb3\xd1\x92\xd1\xe9\xe4\x6c\xef\xef\xcb\xeb\x86\x48\x43\xa4\x21\xd2\x10\x69\x88\x34\x44\x1a\x22\x0d\x91\x86\x48\x43\xa4\x21\xd2\x10\x69\x88\xb4\x9d\xbe\x1e\x91\x86\x48\x43\xa4\x21\xd2\x5e\xae\x48\xb3\x33\xb5\xb1\x19\x62\x2b\x10\x68\x19\xc8\xbc\x76\x2f\xcc\x09\x09\x76\xf5\xef\x89\x6a\x2b\x65\x3d\xcf\x6e\xed\xb1\x4e\xda\xd7\xe4\x76\xe6\xd0\x65\xd7\xcc\xf8\xbb\x66\xf2\xd4\x27\xe7\xe4\x3c\xd9\xe6\x91\x30\xf9\x16\x26\xdf\x9a\xea\xa4\x27\x0e\x7f\x7a\xe9\xfd\xa2\xe0\xbe\x29\xbd\xef\xb8\x99\xae\xbb\xef\xb8\x59\xf1\xff\x6b\xc7\x0f\x33\xc7\x0f\x53\xe1\x06\x9b\x34\x93\x49\x55\x26\x2f\xaf\xc8\x1f\xf8\x3f\xa4\x98\x95\x6d\x9a\x35\x97\xe1\x77\xdc\x7e\x66\xd4\xa7\x37\xb5\x94\x04\x8b\xa2\xd1\xd2\xd3\xad\xd5\xed\x54\x2f\x71\x9c\x16\x6d\xca\x97\x49\x9b\x54\xad\x7e\x9c\xb0\x56\x7a\xb3\x71\xde\x63\x0e\x37\x81\x61\xdd\x2e\x17\xd9\x53\x96\xe1\x6b\x46\xf0\x53\xd2\xd9\xd0\xe9\x5d\x9d\xc5\x86\x38\x19\xe2\x64\x88\x93\xd9\x7e\x68\xec\x8d\x93\x99\x5a\x0e\x9b\x01\x82\x51\x08\x8f\x3c\x3d\x00\x65\xb0\x6e\xbf\x63\xd0\xf1\x41\x37\xe4\xb3\xbe\xf5\x07\x78\x07\x9d\xfd\x98\x9d\x7d\x5f\x30\xb5\xce\x47\xfd\x50\xa4\x06\x69\x8a\x85\x5c\x46\x46\x74\x14\x36\xa2\x8a\x5f\xca\x05\x90\xbe\x10\x1b\x69\x22\x52\x16\x52\x84\x51\x78\x1f\xca\x95\xa3\x2f\x77\xfe\xc5\xa6\xa8\xb9\x59\x8e\x18\x33\x59\xde\xe8\x86\x5a\xfe\x26\x0c\xa6\x1e\xe4\x14\xfa\xc1\x5d\x0e\x35\x4d\xa9\x72\x5d\xdb\x5f\x3d\x03\x7e\xe4\x95\x04\xb8\x9a\xa4\xaa\x76\x97\xd7\x7c\x93\xaa\x93\xac\x2b\x00\x47\xfd\x66\xd1\xa0\xfc\x4b\x96\xb5\x45\x8f\xaf\x7e\x41\x9f\xe7\x5a\x3a\x61\xe3\x39\x36\xdc\x3f\x7d\x4e\x4f\xfa\x94\x46\x25\xc2\x1f\x64\x9c\x48\x75\x71\xbd\xb7\x22\x0e\xa4\x93\xca\xd2\xda\xee\xd5\xe4\xbf\xab\x97\xa9\x2f\x2e\x98\x57\x1e\x40\x3d\x0a\xaf\xe7\xbf\xcd\x45\x6d\x01\x5d\x96\x56\xaf\xc2\x0c\x64\x5e\x10\x5e\x5d\xb6\x1c\xda\x3d\x2c\x9d\xa0\x08\x34\xfa\x96\x57\xf3\xff\xf6\xaa\x56\xad\xbe\xf8\x32\xc7\xf3\xb4\xd0\x7b\x30\xac\xd9\xab\xbc\x8c\x39\xfc\x2c\x15\xb5\x22\xf6\x81\xaf\xde\xbc\xc6\x0a\xfb\x7b\x6d\x6b\x2f\xb1\xdf\x70\xf3\xa2\x9d\xfa\xfc\x63\xe9\x30\xdd\x30\xd5\x07\x7d\x8f\x7e\xed\x96\xcd\x57\xef\x66\xd9\x91\xc8\x64\x19\x25\x6b\x75\xc5\x1b\xaf\xc6\xe7\x9d\xf6\xb4\x5f\x0c\xfd\x6a\x16\xef\x55\x5e\x4f\xdf\x57\xcf\xbc\xeb\x7b\x55\x94\x90\x0e\x9e\xd0\x71\x5b\xe5\x1d\x4c\x65\x56\xc0\xd6\x22\x3c\x62\x5e\xbb\x55\x85\x58\x2f\x30\x6d\x05\x52\xb6\xbf\x6c\x2e\x4c\xe0\xb1\x96\xf5\xf5\xde\x74\x66\xda\x30\x13\xf7\xf9\xe3\xb5\xfd\xf8\xa5\xef\xc4\xec\x77\xc7\xfd\x61\x8a\xfa\xab\x4f\x39\x41\x10\xfd\xd2\x1f\xda\xb9\x70\x26\x66\x26\x7f\x8b\xb7\x0f\x52\xb4\x60\x51\x1e\xe9\x9d\x98\xfd\x11\x25\xb2\x76\x58\xe1\x3a\xa9\xeb\x78\xaa\xf5\xf9\xf5\xd1\xa3\x93\x39\x5e\x6a\xba\xfb\xbd\x03\x2e\xcb\x63\x34\x3d\x6e\xf1\xee\xc3\x3a\x81\x39\x3e\x05\x2a\xaf\xb1\x38\x96\xcd\xfb\xcf\x4d\x5e\x79\x19\x04\x22\x67\xe5\x48\x39\x2b\xa7\x04\x9c\x48\x57\x39\xcd\xa5\x88\x0d\x63\x92\x65\x78\xa7\xaf\x4a\x23\x23\x4a\xfa\x73\xea\x8d\x34\x9d\x26\x19\x2b\x71\xef\xad\xee\xbd\xb3\x32\xb0\xd0\xc9\x56\x2b\x75\x5c\xc5\x53\x08\xf6\xe6\x0a\xc1\xf2\x3e\x5c\x67\x69\xa7\x51\x9d\x8f\x52\xb0\x4c\x96\x7b\xeb\x64\x29\x05\x3b\xed\x52\xb0\x30\x1a\x2b\x06\x9c\x93\x18\xcd\x34\x86\x1b\x40\x0d\x63\xcf\xe4\x3b\x7a\x8a\xc1\x0a\xb0\xcc\xc0\x4d\x9b\x1e\x96\xe9\xac\x1a\x2c\x0b\xd1\x6b\xc0\x8c\x75\xf5\x60\xc7\x26\xec\x13\x0d\xa1\xe7\xed\xe8\x09\xd3\x4c\xa3\x20\x1f\x21\xf5\xcc\x98\x09\xa9\x9f\x14\xb9\x19\x30\xb4\xe6\xda\xc1\x01\x80\x63\x01\xc0\x99\xc6\x40\x04\xc1\x61\x3c\xba\x91\x6e\x9f\x50\x1b\x42\x6d\x60\x3a\x54\x81\xbd\xd5\x2a\xb0\xb5\x1b\xf1\x47\x94\x3c\x06\x41\x39\xef\xb0\x15\x08\x51\x73\x64\xb0\xa1\x80\xc4\xe2\x24\x16\x27\xb1\x38\x89\xc5\x6f\x29\xb1\x78\x7b\x5e\xf1\x61\x52\xb2\x0d\x92\x51\xfc\x48\x42\xf1\x8e\x5a\xfa\x82\x13\xeb\x0d\x92\x26\xfd\x48\x96\xf4\x8e\x5a\xba\xbb\x69\x9f\xfc\xe8\xe4\x47\x27\x3f\x3a\xf9\xd1\xc9\x8f\x3e\x48\x7e\xf4\x96\xf4\xe8\xc3\x0c\x63\xfd\xd3\xa5\xee\xcf\x99\x64\xee\x13\x4a\xe6\x7e\x34\x97\xfb\x40\x93\x98\xd1\xb2\xb8\x1f\x4b\xe2\x3e\xd0\x54\xdc\xc6\xf4\xed\x2d\xd9\xdb\x2f\x65\xd4\xfa\x28\x0f\x6a\x04\x4b\x22\x35\x7e\xa8\xf5\x74\xaa\x73\x8c\x9d\x06\xac\xf3\xa9\x40\xe8\xf9\x3f\x7d\x6f\xe3\x04\xf5\x2b\xe5\x94\xb3\xfa\xf7\xe5\xf1\xbf\xe4\xc7\x9f\xd7\x12\x19\xbd\x2d\x27\x66\x33\x7d\xb8\x59\x05\x9d\xb6\x28\x42\xc9\x64\x85\x1f\xa6\x99\x74\xaa\xce\x15\x0a\x3e\x08\x05\xff\xb5\x63\xdb\xf7\x6f\xeb\x9f\x7e\x6a\x19\x11\x3f\x60\xd5\xf5\xeb\xfd\x51\x2d\x2c\x46\x21\xe3\xfa\x6a\xf6\x84\xc7\xf7\xef\x0c\x94\x1c\x4a\x0e\x25\x87\x92\x43\xc9\xa1\xe4\x50\x72\x28\x39\x94\x1c\x4a\x0e\x25\x87\x92\x43\xc9\xa1\xe4\x50\x72\x28\x39\x94\x1c\x4a\x0e\x25\x3f\x48\xc9\x3d\x19\x07\xd1\xf3\x5a\x67\xa0\xef\x92\x8e\x7f\x28\x8f\x0b\x15\xbf\x01\x2a\x5e\xdd\x4e\x68\xb8\x1d\x34\xbc\xba\x23\x50\x70\x28\x38\x14\x1c\x0a\x0e\x05\x87\x82\x43\xc1\xa1\xe0\x50\x70\x28\x38\x14\x1c\x0a\x0e\x05\x87\x82\x43\xc1\xa1\xe0\x50\x70\x28\x38\x14\xfc\x20\x05\x6f\xc9\x54\x4b\x08\x39\xb0\xfc\x02\x58\x5e\x25\x6c\x6b\x0e\x26\x07\x97\x13\x3c\x0e\x36\x07\x9b\x83\xcd\xc1\xe6\x60\x73\x6b\x81\x2b\xd8\x1c\x6c\x0e\x36\x07\x9b\x83\xcd\xc1\xe6\x60\x73\xb0\x39\xb9\x89\x31\x02\x18\x01\x8c\x00\x46\x00\x23\x50\x33\x02\x79\x09\xbb\xb3\xc4\x40\xdd\x06\x84\xc5\x98\x57\x64\x44\xef\xc9\x0a\xdc\x55\x93\x5d\x3d\xa1\xcf\x27\x46\x6a\xbe\x5c\xcd\xe2\x67\x5b\x6b\xd8\xda\xb1\x71\x0a\xf6\x3a\x05\x7c\xc2\x01\x9f\x80\x4b\xc0\x25\xe0\x12\x70\x09\xb8\x04\x5c\x02\x2e\x01\x97\x80\x4b\xc0\x25\xe0\x12\x70\x09\xb8\x04\x5c\xc2\x74\x5d\x42\xbd\x34\xe3\xa1\xe5\x28\x15\x1a\xb1\x20\x58\x10\x2c\x08\x16\x04\x0b\xd2\x9d\x05\x21\x69\x10\xce\xe2\x2c\x67\xb1\x9d\x3e\x08\x5f\x41\xba\x20\x5c\x05\xae\x02\x57\x81\xab\xc0\x55\x58\x47\xb9\x71\x15\xb8\x0a\x5c\x05\xae\x02\x57\x81\xab\xc0\x55\xe0\x2a\x20\xfe\x10\x7f\x88\x3f\xc4\x1f\xe2\x0f\xf1\x0f\xb3\xee\xf7\x3b\x74\x4c\xfd\xd9\xe7\x70\x6b\xce\x00\x5f\x30\xec\xfe\x06\x5c\x01\xae\x00\x57\x80\x2b\xc0\x15\xe0\x0a\x70\x05\xb8\x02\x5c\x01\xae\x00\x57\x80\x2b\xc0\x15\xe0\x0a\x06\xdc\xd7\xd0\xb4\x0c\x65\x3f\x03\x76\x03\xbb\x81\xdd\xc0\x6e\x60\x37\xba\xb3\x1b\x69\xe6\x64\x72\xb9\x09\x52\xd9\xf1\x86\x86\xaf\xf9\x81\xbf\x4a\x76\x34\xdc\x96\x9d\xa8\xdd\x59\xb6\x34\x8c\xb3\xa5\xa1\x76\x0b\xf0\x14\x78\x0a\x3c\x05\x9e\x02\x4f\x81\xa7\xc0\x53\xe0\x29\xf0\x14\x78\x0a\x3c\x05\x9e\x02\x4f\x81\xa7\x80\xfa\x9f\xd7\x34\xa8\x3f\xd4\x1f\xea\x0f\xf5\x7f\x51\xd4\xbf\xf3\x4d\x0d\x5d\x93\x7f\x76\x35\xdc\x9c\x37\xc0\x19\x0c\xbb\xad\x01\x5f\x80\x2f\xc0\x17\xe0\x0b\xf0\x05\xf8\x02\x7c\x01\xbe\x00\x5f\x80\x2f\xc0\x17\xe0\x0b\xf0\x05\xf8\x82\x21\xf7\x35\x34\xae\x43\xd9\xd8\x80\xe2\x40\x71\xa0\x38\x50\x1c\x28\x8e\x0b\x14\x07\x3b\x18\xf6\x7f\x82\x89\x68\x30\x11\x3b\xfb\x16\xfe\x88\x92\xc7\x20\x28\xf5\x44\x8a\x93\x60\x1f\x03\x5e\x02\x2f\x81\x97\xc0\x4b\xe0\x25\xec\x23\xda\x78\x09\xbc\x04\x5e\x02\x2f\x81\x97\xc0\x4b\xe0\x25\xf0\x12\x90\x70\x48\x38\x24\x1c\x12\x0e\x09\x7f\xf3\x70\x22\xf7\x5e\xc9\x6c\x7b\x56\x62\x1a\x7d\x90\x4b\xf7\x05\x9c\x47\x64\xdd\xdd\xa3\xe8\x37\x47\x50\xf4\x4a\x66\x15\x88\x7e\xf3\xf8\xf4\xe9\xcb\xde\xb5\xb7\x8d\x3a\xd7\x4e\x52\x67\xf9\xe9\x05\x3d\xff\xab\xfc\xb3\xfd\xd9\x56\xf3\xb2\x24\x52\xb3\xa2\x44\xfe\xf4\xd5\x6b\x74\xaa\xe6\x31\xab\xd1\x24\x1f\x1f\x8b\x79\x50\xb1\x4d\xe5\x7d\x79\xdc\x2f\xf9\x71\xf1\x33\x83\xbe\x14\xea\xf6\xd4\xde\x8a\xfd\xfb\x61\x97\xa1\x99\xab\xa6\xcd\xf3\xa6\xcd\xf7\xcf\xb6\xbf\xb7\xe4\x88\xa0\xe9\xc9\xcd\xb4\xbf\x1f\x0d\x8a\xe6\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x1a\x14\x0d\x8a\x06\x45\x83\xa2\x41\xd1\xa0\x68\x50\x34\x28\x1a\x14\x0d\x8a\x06\x45\xf3\xa2\x15\x8d\xe7\xc8\xb5\x9a\x8a\x9e\xbc\x49\xe1\x30\xbd\xfe\xa0\x0f\x57\x4f\xa5\x03\xb4\x1e\x01\x5a\x97\xb7\xc1\x66\x56\x5d\x9e\xe4\xad\x21\xea\xbd\x97\x00\x32\x0d\x99\x86\x4c\x43\xa6\x21\xd3\x90\x69\xc8\x34\x64\x1a\x32\x0d\x99\x86\x4c\x43\xa6\x21\xd3\x90\x69\xc8\x34\x64\x1a\x32\x0d\x99\x3e\x6f\x2a\xfe\x12\xc8\x74\x59\x6c\xbe\x23\x34\xbd\x57\xbc\x1e\x36\x3d\x0a\x9b\x2e\xef\x83\xd5\x70\xba\x3c\xcb\x9b\xa3\xd3\x7b\xef\x01\x78\x1a\x3c\x0d\x9e\x06\x4f\x83\xa7\xc1\xd3\xe0\x69\xf0\x34\x78\x1a\x3c\x0d\x9e\x06\x4f\x83\xa7\xc1\xd3\xe0\x69\xf0\x34\x78\x1a\x3c\x7d\xde\x54\xfc\x05\xe0\xe9\x96\x12\xb6\xa4\x05\x79\x19\x14\xbb\xaa\x1f\x7b\xe0\xce\x34\xf1\xd2\x1a\x2a\x6e\x7f\xd1\x5a\x47\x27\x98\x29\xcc\x14\x66\x0a\x33\xbd\x69\x66\x7a\x00\x9a\x36\x0d\xd7\x95\x8c\xeb\xb6\x6b\x1d\x04\x9d\x1e\x63\xa7\x93\x69\xf0\xa9\x94\xf1\x18\x66\xec\xb2\xc1\xbb\xd3\x74\x60\x23\xb0\x11\xd8\x08\x6c\x04\x36\x0e\x03\x1b\xdb\x68\xe3\x90\x83\x1a\xfc\x6e\x42\xfc\xee\x38\xc0\x1b\x74\x7a\x30\x1a\xc6\x3b\xca\xf1\xba\xbc\x0c\xbb\x30\x6f\x12\x34\xaf\x0d\xe7\x35\x5f\x98\x1d\xb4\x63\x41\x7c\x21\x89\x5a\x4f\x89\x37\x8c\xd2\x03\xc0\xd4\xcc\x19\x84\x33\x31\x36\x3a\x3c\xba\x34\x17\xaa\x63\x78\x59\xbc\x7e\x8b\xc8\x7b\xde\x7b\xfb\x76\xfe\x73\xa7\x8a\x74\xbf\xef\x51\xfb\x3b\xd4\xc3\xc4\x22\x9f\x2f\xdd\xe9\xaa\xad\xae\x93\x15\x13\x88\x2d\xb2\x51\xac\x6e\xd4\x0c\x7d\x21\x45\xac\x1e\x7e\xb5\x34\x9a\x8b\xc7\x50\xf8\xa1\xe1\x8a\x51\x22\x36\x61\x89\x26\x3d\xe1\x25\xcf\x5f\x36\xa1\xf0\xfc\x44\xaa\xe1\x41\x96\xbc\x4b\x8f\xa8\x6a\x76\x9b\x03\xbf\xa2\x33\xcb\xf1\x8a\x58\x6e\x12\xbd\x14\x8a\x93\xc8\x95\x69\x9a\x4f\x3a\x6a\x2b\xba\xb9\xf8\x5b\x7f\xa3\x5e\x62\xea\x79\xa3\x9a\x71\x3c\x06\xc1\x5b\x3d\xc9\xf4\x92\x67\x91\x6c\x42\x91\x66\x8e\xea\xea\x8b\x99\x75\x7e\xb8\x5a\xe8\x53\xf5\x0c\x98\x73\xbd\x81\x3e\xf8\x40\xff\xfb\xe6\x70\xff\xfb\xde\x2c\x60\xc6\x3c\xbf\x37\x87\xce\xef\xd1\x75\x65\x3c\xea\x09\xf6\x37\x80\xe9\x61\xc2\xca\x01\xcc\x2c\x60\xdb\x87\x30\xf3\x73\xe1\xaa\x6f\x71\x8b\x89\x23\xc3\xd9\xe1\xe1\xcc\x5c\xb4\xad\x14\xfd\xc5\xe5\xc3\xca\x61\xe5\xb0\x72\x58\x39\xac\x1c\x56\x0e\x2b\x87\x95\xc3\xca\x61\xe5\xb0\x72\x58\x39\xac\x1c\x56\x0e\x2b\x87\x95\xc3\xca\x61\xe5\x4e\x2e\x35\xfa\x35\x73\xb2\x4d\x3a\x0a\xd1\x34\x43\x6c\x85\x05\xed\xa4\x9b\xd7\xa6\x03\x79\xc1\x1b\xba\xf3\x11\x5e\x9d\x91\x7e\xdf\xd4\x93\x22\x52\x37\x8a\xe5\x9d\x48\x37\xae\xee\x88\x75\xff\x26\x9d\xb5\x79\x7b\xe3\x24\xd2\x33\x8a\xfd\xe6\x94\xbb\x4f\x76\xdb\x10\x3b\x59\x6d\x8f\xc5\x8e\x84\xeb\xad\x69\xfd\x6f\xf2\xd3\x7f\x75\xb6\x3d\xc7\xfc\xfc\x3f\x27\xee\xd2\xd1\x03\xf7\x36\x9d\x84\xd7\x1f\xe6\xf5\xea\x92\x8d\xb0\x73\xe6\xe8\x00\xfa\xd5\xac\x6e\xf5\x0a\xf9\x1f\xbd\xd2\x5c\xa8\x7f\x39\x6e\x36\x17\xe2\xa3\xfa\xbb\xf8\xff\xb5\xe3\x87\x99\xe3\x87\xa9\x70\x83\x4d\x9a\xc9\xe4\x3e\xbf\xfb\x6e\x4e\x94\x44\xe0\xff\x90\x62\x56\x36\x6d\xd6\x34\x24\xea\x43\x8f\x33\x57\x28\x9b\x5a\x0a\x84\x45\xd1\x68\xe9\xe9\xd6\xea\x76\xaa\x37\x3b\x4e\x8b\x36\xe5\x4b\xa8\x4d\xaa\x56\x46\x4e\x68\x96\xb2\x66\x06\xd0\xdc\x3c\x75\x8c\x09\x0c\xf9\x56\x3a\xcc\x95\xb4\x54\x61\xc6\x9b\x83\xbd\x61\x1c\x38\xae\xa4\x43\x3c\xb3\x43\xd4\x57\x8d\x80\x1c\x02\x72\x08\xc8\xb9\xd9\x80\x9c\x1e\xe3\x5d\x36\x96\x8e\x15\x27\x86\xbb\x10\xb1\x79\x76\x88\xcb\xd0\x03\x44\xc7\x28\xe5\x83\x6e\xcf\x67\xfd\x20\x1c\x20\x2a\x8c\x07\x63\x8e\x07\x7d\xe1\xda\x3a\x81\xf5\x43\x91\x1a\x68\x2a\x16\x72\x19\x19\x95\x52\xf8\x8e\x2a\x42\x2a\x57\x4c\xfa\x42\x6c\xa4\x89\x79\x59\x48\x11\x46\xe1\x7d\x28\x57\x8e\xbe\xdc\xf9\x17\xcf\xc5\x5f\x65\x1c\x92\x71\x9f\xe5\x8d\xce\xbb\x1b\x7f\xbd\x96\x9e\xef\x64\x32\x78\xce\x03\x6d\xea\x61\x54\xa1\x1f\xdc\xe5\xd8\x54\xab\x02\xb1\x4a\xd4\x8c\x36\x96\x89\x1f\x79\x25\x63\xae\x26\xb7\xaa\xdd\xe5\x35\xdf\xa4\xea\x24\xeb\x92\xc1\x51\xbf\x59\x34\x28\xff\x92\x65\x6d\xe9\xe4\xab\x5f\xd0\xe7\xb9\x96\x4e\xd8\x78\x8e\x0d\xf7\x4f\x9f\xd3\x93\x3e\xa5\x51\x99\xf3\x07\x19\x27\x52\x5d\x5c\xef\xad\x88\x03\xe9\xa4\xb2\xf4\xc2\x4f\x49\x14\x3b\x2b\x7d\x97\x9f\xa2\xc0\x77\x9f\xef\xcc\x85\x36\x26\xb4\xb8\x60\x5e\x79\x00\xf5\x28\xbc\x9e\xff\x36\x17\xb5\x65\xb8\x27\x63\x19\x7a\x32\xcc\xaa\x40\x06\x29\xa2\x24\xfe\xee\x84\xea\xb2\xe5\x3c\xf0\x61\xe9\x04\x45\x28\xd3\xb7\x57\xe6\xc7\xdf\x5e\x89\xa5\x1f\x6a\x94\x97\x94\x5f\xe6\x78\x9e\x56\x86\x0f\x86\x66\x7b\x95\xf9\x31\x87\x9f\xa5\xd5\x2f\x99\xf0\xa1\xb9\xf8\xe8\xeb\x77\xb3\x76\xea\x51\xb2\xdf\x36\xed\x84\x4d\x24\x9f\x89\x5e\xd2\x3d\x47\x94\x7d\x6f\xba\x79\xe6\x0c\x3f\x14\x6d\xeb\xe7\xd6\x9d\xd0\x19\xea\x86\xa9\x3e\xe8\x7b\xf4\x4b\xac\x9c\x64\xe1\xac\xb6\x42\x4f\xcb\x8e\x44\x26\xcb\x28\x59\xab\x2b\xde\x78\x35\x3e\xef\xb4\xa7\xfd\x62\xe8\x57\xb3\x78\xaf\x62\x73\xe5\x7c\xf5\xcc\xbb\xbe\x57\xc5\x21\xe9\xf0\x0c\x1d\x19\x56\xde\xc1\x54\x66\x05\xc7\x2d\x02\x30\xe6\xb5\x5b\x55\xa8\xfb\x82\x00\x57\x38\x66\xfb\xcb\xe6\xc2\x84\x3d\xeb\x70\x80\x7a\x6f\x3a\x33\x6d\x98\x89\xfb\xfc\xf1\xda\x7e\xfc\xd2\x77\x62\xf6\xbb\xe3\xfe\x50\x33\xa6\xd0\x53\x9f\x72\x82\x20\xfa\xa5\x3f\xb4\x73\xe1\x4c\x54\x4e\xfe\x16\x6f\x1f\xa4\x68\xc1\xa2\x3c\xd2\x3b\x31\xfb\x23\x4a\x64\xed\xb0\xc2\x75\x52\xd7\xf1\x54\xeb\xf3\xeb\xa3\x47\x27\x73\xbc\xd4\x74\xf7\x7b\x07\x5c\x96\xc7\x68\x7a\xdc\xe2\xdd\x87\x75\x02\xcb\x80\x6b\x2c\xcc\x30\x81\xef\x36\x7b\x22\x3b\x17\x03\xb1\x36\x80\xad\x6b\x81\xca\xe9\x18\xef\x78\x1d\x43\xda\x9d\xfa\xdf\xeb\x6f\xff\x77\xfb\x2a\x60\x2d\x93\x95\x3c\xfa\xa9\x34\x4b\x9c\x4c\xae\x7c\xf7\x7e\xef\xf3\x2f\x6a\x3d\xa2\xdb\x7d\x2b\xbc\xea\xc0\xab\xfc\x54\x4b\x2e\xc6\xfa\xc4\xb2\xf5\x89\x0d\x03\x95\x9d\x3c\xa8\x1e\x6b\x61\xdb\x20\xd0\x6b\xc5\x10\xed\xcf\xf3\x87\xf3\xd0\xd9\xd6\x55\xb9\x1d\x96\x9c\x00\x80\x71\x02\x00\x3c\x5d\x9b\x3d\x95\x5d\x15\x95\xda\x2d\xf5\x6e\x23\xbf\x6c\xfc\xf0\x8d\x66\xe3\xdc\xbf\x21\x6c\xf7\x63\xbb\x1f\xdb\xfd\xd8\xee\xc7\x76\x3f\xb6\xfb\xb1\xdd\x6f\xb7\xc1\x6c\xf7\x63\xbb\x1f\xdb\xfd\xd8\xee\xc7\x76\x3f\xb6\xfb\xb1\xdd\x8f\xed\x7e\x5b\x0f\x0c\xdb\xfd\xd8\xee\x77\x5b\xdb\xfd\x76\x8a\x7c\x17\xb0\xe8\xd6\x72\x6f\xee\x51\xb0\xae\x53\x6e\x4e\x82\x7b\x0e\x8f\x25\x0f\x64\xda\x3c\x1b\x4c\x5a\x12\xcf\x5f\x9d\x77\xeb\xfb\x81\x16\x45\x8b\x9e\xf9\xc8\x8c\x11\xbd\x7f\xda\x69\x0d\x9f\x45\xf3\x94\xf3\x9a\x5c\xf2\xcc\xcb\x47\xa0\x8b\x72\x66\x32\x1e\x99\x9f\x5d\x92\x2a\x13\x65\x86\x32\x43\x99\xa1\xcc\x50\x66\x28\x33\x94\x19\xca\x0c\x65\x86\x32\x43\x99\xa1\xcc\x50\x66\x28\x33\x94\x19\xca\x0c\x65\xf6\xa2\x95\x99\xcd\x3b\x1f\x7b\xcd\x90\x79\x85\x44\x23\x31\x26\xfb\x62\xa6\xba\x2f\xe6\xea\x7c\x98\xb0\x78\xf3\xb3\x53\xd3\x60\xf6\xc2\xdf\xc9\x7e\x49\xf6\x4b\xeb\xdd\x63\x3f\x49\x2f\xaf\x18\xb7\xcf\xcf\x75\x49\x67\x67\x7e\x76\x46\x8a\x4b\x22\x61\x88\x84\x21\x12\xc6\xf6\x48\x98\xa9\xa5\xaf\xec\x3d\xe0\x84\xa0\xc7\x53\x83\x4c\x06\xea\xea\xc9\x51\xf9\xf2\xba\xf8\xbe\x80\x29\x39\x2a\xc9\x51\x49\x8e\x4a\x72\x54\x92\xa3\x92\x1c\x95\xe4\xa8\x9c\x46\x8e\xca\x6b\xfc\xcc\x35\xa9\x29\x4f\x5b\x06\x90\x91\x72\xa4\x8c\x94\xd3\xc1\x4b\x24\xa2\x9c\xe6\x22\xc4\x86\xd1\xc8\x2a\xa0\xd3\x53\xfe\xc9\xf1\x04\xfc\x19\x69\x27\x1b\x4e\x92\x6c\x93\x58\xf5\x16\xab\xfe\x90\x9a\x89\xd8\x19\x72\xdd\xfc\x46\xf1\xb8\x61\x9e\xae\xd6\xec\xf9\x5c\x98\xee\x7b\xca\x16\x96\xb7\xa2\x7b\x1f\xbb\xf3\x62\xd8\x3a\x6d\xc6\xca\x32\x5b\xc6\xca\x36\x9e\xd6\x0d\x59\xd9\x73\x19\xcd\x75\x03\x02\xb4\x66\x6c\x5a\x33\x91\xc1\x07\x66\xc3\x28\x74\x13\xdd\x3d\xcc\x06\x66\x03\xb3\x69\x62\x36\x32\x0e\xa2\xe7\xb5\xb6\xe0\x9d\x94\x08\x29\x8f\x67\xf3\x92\xb4\xf1\xc3\xb7\x5a\x23\x64\xff\x8e\x90\xf1\x88\x8c\x47\x64\x3c\x22\xe3\x11\x19\x8f\xc8\x78\x44\xc6\xa3\xdd\x06\x93\xf1\x88\x8c\x47\x64\x3c\x22\xe3\x11\x19\x8f\xc8\x78\x44\xc6\x23\x32\x1e\x6d\x3d\x30\x64\x3c\x22\xe3\xd1\x6d\x65\x3c\xda\xe1\xf4\x25\x2d\xba\xb9\x2a\x21\x7b\x1c\xac\xf3\x32\x21\x93\x60\x9f\xc3\xa3\xc9\x43\x75\x42\xce\x86\x93\xb6\x04\xe2\x54\x27\xde\xfa\x8e\xe0\x40\x71\xa0\xe7\x3e\x33\xa3\x84\xe2\x9c\x76\x5e\x23\xd4\x0a\x39\xe5\xc4\xa6\x57\x2c\xe4\xf2\x81\xe8\xb2\x6a\x21\x0c\x4b\xe6\x67\x17\x95\x0b\xc1\x9e\x61\xcf\xb0\x67\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\x61\xcf\xb0\x67\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\xbd\x68\x7b\x66\x73\x16\xaa\x7e\xeb\x85\x5c\xa1\xd3\x28\x18\xc2\x36\x99\xc9\x6e\x93\xb9\xbe\x62\x08\x3c\xde\xfc\xec\xe4\x5c\x26\xbd\x30\x78\x6a\x86\x50\x33\xc4\x7e\x07\xd9\x53\xba\x9a\x2b\x06\xef\x0b\xaa\x86\xd0\xe1\x99\x9f\x9d\x93\xa6\x86\xc0\x18\x02\x63\x08\x8c\x99\x40\x60\xcc\xe4\x92\xd4\xf4\x1e\x7e\x42\x24\xe4\x25\xc5\x43\x7a\xed\xf0\xa9\x1e\xf2\xf2\xfa\xf9\xbe\xf0\x29\xd5\x43\xa8\x1e\x42\xf5\x10\xaa\x87\x50\x3d\x84\xea\x21\x54\x0f\x99\x48\xf5\x90\x6b\x6c\xcd\x55\xe5\x43\x4e\x5b\x09\x90\x91\x72\xac\x8c\x94\xd3\xe1\x4c\x24\xa3\x9c\xe6\x3a\xc4\x86\x01\xc9\x2e\xae\xd3\x57\x36\xca\xf1\x94\xfc\x39\xe9\x28\x1b\xce\x92\x7c\x94\x88\xf6\x36\xd1\xfe\x90\xba\x4e\x20\xcf\xaa\x21\xa2\x7e\xa1\x21\x37\x36\x50\xd2\xfc\xec\x7c\xef\xfe\x55\xdf\x02\x8b\x7a\x70\x73\x42\x63\x74\xde\xfd\x08\xd9\xad\x0b\xdc\x71\xed\x10\xde\x86\xee\xa5\xec\xf6\x0b\x61\xeb\x8c\xf9\xac\x77\x86\x49\x32\x93\xe4\x73\xba\xd8\x11\x7c\xec\x78\xbd\x7e\x3f\x2a\xf6\xc2\x5e\xff\xdc\x5a\x21\x57\x0d\x00\x90\x99\xd1\xc9\xcc\x34\x06\x1b\xf0\x0c\x23\xcf\xe4\xbb\xf9\x9e\xc8\xcc\xa5\x1d\xfd\x60\x50\x66\xe7\x04\xe1\x31\xf0\x98\x76\x1e\xd3\x5d\x51\x57\xd6\xa0\xe6\x67\x17\x10\x19\xfb\xca\xba\x12\x28\xbf\xdd\x7b\x5f\x55\xd8\x95\x37\xa3\xe5\xcd\x38\x89\xce\x4c\xa3\xba\x1e\x81\xf3\xcc\x94\x09\x9c\xef\x63\x1a\x6f\x5b\xe0\x7c\x67\xe5\x5d\x61\x36\x16\x0c\x42\x27\x31\x9b\x69\x0c\x41\x40\x1b\x86\xa2\xdb\xe8\xf2\x89\xa9\x21\xa6\x06\x86\xd3\xc8\x70\xd4\xa2\xc9\x77\x9d\x54\x76\x54\xe3\xf5\x8b\x39\xde\xb1\x2a\xf3\xd4\x78\x1d\xac\xc6\x6b\xc3\x1d\x21\x4b\x35\x59\xaa\xc9\x52\x4d\x96\x6a\xb2\x54\x93\xa5\x9a\x2c\xd5\xbb\x0d\x26\x4b\x35\x59\xaa\xc9\x52\x4d\x96\x6a\xb2\x54\x93\xa5\x9a\x2c\xd5\x64\xa9\xde\x7a\x60\xc8\x52\x4d\x96\xea\xdb\xca\x52\xbd\x8d\xea\x2b\x5a\x74\x6b\x35\x5e\xf7\x39\x58\xd7\x35\x5e\xa7\xc1\x3e\x87\x47\x93\x07\x6a\xbc\x9e\x0f\x27\x2d\x89\xc8\xa9\x9d\x78\xeb\x3b\x82\x06\x45\x83\x9e\xfb\xcc\x8c\x11\x91\x73\xe2\x79\x0d\x5f\xe3\xf5\xa4\x13\x9b\x5c\x8d\xd7\x2b\x06\xa2\x8b\x6a\xbc\x32\x2c\x35\x0f\x4b\x27\xd5\x78\xc5\x9e\x61\xcf\xb0\x67\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\x61\xcf\xb0\x67\xd8\x33\xec\x19\xf6\x0c\x7b\x86\x3d\xc3\x9e\xbd\x6c\x7b\x66\x73\xae\xf0\x5e\x6b\xbc\x5e\xa3\xd3\xa8\xf1\xca\x36\x99\xc9\x6e\x93\xb9\xba\xc6\x2b\x3c\xbe\x99\xc7\xb7\x66\x36\xe9\x87\xc1\x53\xe3\x95\x1a\xaf\xf6\x3b\xc8\x7e\x52\xd7\x5c\x33\x78\x9f\x5f\xe3\x95\x0e\xaf\xad\xc3\x6b\x4f\x58\x43\x60\x0c\x81\x31\x04\xc6\x4c\x21\x30\x66\x6a\xa9\x6a\xfa\x0f\x3f\x21\x12\xf2\x82\x1a\xaf\xfd\x76\xf8\xd4\x78\x7d\x79\xfd\x7c\x5f\xf8\x94\x1a\xaf\xd4\x78\xa5\xc6\x2b\x35\x5e\xa9\xf1\x4a\x8d\x57\x6a\xbc\x4e\xa3\xc6\xeb\x55\xb6\xe6\x9a\x1a\xaf\x27\xae\x04\xc8\x4a\x39\x52\x56\xca\x09\x71\x26\xf2\x51\x4e\x73\x1d\x62\xc3\x80\x64\x17\xd7\xe9\x29\x1f\xe5\x88\x4a\xfe\x8c\x7c\x94\x4d\x67\x49\x3e\x4a\x44\x7b\x9b\x68\xef\xac\xc6\x2b\x50\xb2\x79\x72\x70\x82\x77\xa7\xc6\xeb\xcd\xd5\x78\xe5\x6d\x68\x7b\x1b\x4e\x91\xb2\xd3\x28\xbb\x47\x8d\x57\x26\xc9\xbd\x75\xb1\xd4\x78\x9d\x76\x8d\x57\xc8\x8c\x0d\xc3\xcd\x29\x64\x66\x1a\x83\x0d\x78\x86\x91\x67\xf2\xdd\x3c\x35\x5e\x05\x3c\x66\xe0\xa6\x4d\x8e\xc7\x74\x56\xe3\x95\x35\x68\xf3\xa4\xe0\x14\x22\x63\x5d\x8d\x57\x02\xe5\x3b\xac\xf1\xca\x9b\xd1\xf6\x66\x9c\x44\x67\xa6\x51\x60\x8f\xc0\x79\x66\xca\x04\xce\xf7\x31\x8d\xb7\x2d\x70\xbe\xab\x1a\xaf\x30\x1b\x1b\x06\xa1\x93\x98\xcd\x34\x86\x20\xa0\x0d\x43\xd1\x6d\x74\xf9\xc4\xd4\x10\x53\x03\xc3\x69\x64\x38\x6a\x36\x21\x97\x9b\xa0\xb3\x22\xaf\x5f\xf3\x03\x5a\xbe\x3c\x6d\xfc\xf0\x8d\x56\x79\x6d\xba\x25\x24\xaa\x26\x51\x35\x89\xaa\x49\x54\x4d\xa2\x6a\x12\x55\x93\xa8\x7a\xb7\xc1\x24\xaa\x26\x51\x35\x89\xaa\x49\x54\x4d\xa2\x6a\x12\x55\x93\xa8\x9a\x44\xd5\x5b\x0f\x0c\x89\xaa\x49\x54\x7d\x5b\x89\xaa\x77\x42\x2c\x2b\x5c\x74\x6b\x75\x5e\x1b\x48\x58\xd7\x85\x5e\x27\xc2\x3f\x87\xc7\x93\x07\x2a\xbd\x5e\x00\x28\x2d\x09\xcc\xa9\x9f\x79\xeb\x7b\x82\x0e\x45\x87\x9e\xfd\xd0\x8c\xb2\x87\xea\xc4\x13\x1b\xbe\xda\xeb\x69\x67\x36\xb9\x72\xaf\xd7\x8c\x47\x17\xd5\x7b\x65\x74\x6a\x19\x9d\x4e\x2a\xf8\x8a\x48\x43\xa4\x21\xd2\x10\x69\x88\x34\x44\x1a\x22\x0d\x91\x86\x48\x43\xa4\x21\xd2\x10\x69\x88\x34\x44\x1a\x22\x0d\x91\x86\x48\x7b\xe1\x22\xcd\xe6\xcc\xe1\xbd\x56\x7c\xbd\x4a\xac\x51\xf2\x95\x5d\x33\xd3\xdd\x35\x73\x75\xcd\x57\x98\x7c\x0b\x93\x6f\x4d\x75\xd2\x13\x87\xa7\xea\x2b\x55\x5f\x27\xe0\x22\x7b\xca\x32\x7c\xcd\x08\x7e\x7e\xdd\x57\x3a\xbd\xd6\x4e\xaf\x3d\x8b\x0d\x71\x32\xc4\xc9\x10\x27\xb3\xfd\xd0\xd8\x1b\x27\x33\xb5\x1c\x36\x03\x04\xa3\x10\x1e\x79\x49\xf9\xd7\x9e\xbb\x7d\xea\xbf\xbe\xbc\xce\xbe\x2f\x98\x4a\xfd\x57\xea\xbf\x52\xff\x95\xfa\xaf\xd4\x7f\xa5\xfe\x2b\xf5\x5f\xa7\x51\xff\xf5\x3a\x77\x73\x4d\x01\xd8\x53\x17\x03\xe4\xac\x1c\x29\x67\xe5\x94\x80\x13\xe9\x2a\xa7\xb9\x14\xb1\x61\x4c\xb2\x0c\xef\xf4\x55\x69\x64\x44\x49\x7f\x4e\xbd\x91\xa6\xd3\x24\x63\x25\xee\xbd\xd5\xbd\x77\x56\x06\x16\x3a\xd9\x6a\xa5\x8e\xab\x78\x0a\xc1\xde\x5c\x21\x58\xde\x87\xeb\x2c\xed\x34\xaa\xf3\x51\x0a\x96\xc9\x72\x6f\x9d\x2c\xa5\x60\xa7\x5d\x0a\x16\x46\x63\xc5\x80\x73\x12\xa3\x99\xc6\x70\x03\xa8\x61\xec\x99\x7c\x47\x4f\x31\x58\x01\x96\x19\xb8\x69\xd3\xc3\x32\x9d\x55\x83\x65\x21\x7a\x0d\x98\xb1\xae\x1e\xec\xd8\x84\x7d\xa2\x21\xf4\xbc\x1d\x3d\x61\x9a\x69\x14\xe4\x23\xa4\x9e\x19\x33\x21\xf5\x93\x22\x37\x03\x86\xd6\x5c\x3b\x38\x00\x70\x2c\x00\x38\xd3\x18\x88\x20\x38\x8c\x47\x37\xd2\xed\x13\x6a\x43\xa8\x0d\x4c\x27\x31\x35\x82\x3b\x2b\x02\x7b\x62\x2d\x7a\x6a\xc0\xf6\x5c\x03\xb6\xba\x0f\x7f\x44\xc9\x63\x10\x94\x93\x0e\xab\x68\x50\x75\x96\xb7\x56\x6f\xc4\xde\x0a\xe1\xe4\x14\x27\xa7\x38\x39\xc5\xc9\x29\x7e\x4b\x39\xc5\xdb\x53\x8a\x0f\x93\x8d\x6d\x90\x64\xe2\x47\x72\x89\x77\xd4\xd2\x17\x9c\x53\x6f\x90\x0c\xe9\x47\x12\xa4\x77\xd4\xd2\xdd\xfd\xfa\xa4\x46\x27\x35\x3a\xa9\xd1\x49\x8d\x4e\x6a\xf4\x41\x52\xa3\xb7\x64\x46\x1f\x66\x18\xeb\x1f\x2c\x75\x7f\xce\xe4\x71\x9f\x50\x1e\xf7\xa3\x69\xdc\x07\x9a\xc4\x8c\x96\xc0\xfd\x58\xfe\xf6\x81\xa6\xe2\x36\x66\x6e\x6f\x49\xdc\x7e\x29\x9e\xae\xc7\x16\x76\xc2\xa7\x27\x12\x30\x75\xfb\x80\xba\x76\x23\x6c\x26\xd4\x94\xc4\x86\x51\xc3\xa8\x61\xd4\x30\x6a\x18\x35\x8c\x1a\x46\x0d\xa3\x86\x51\xc3\xa8\x61\xd4\x30\x6a\x18\x35\x8c\x1a\x46\x0d\xa3\x86\x51\xc3\xa8\x5f\x34\xa3\xd6\x47\x79\x50\x23\x58\x12\xa9\xf1\x43\xad\xa7\x53\x5d\x02\xe3\x34\x60\x9d\x4f\x05\x42\xcf\xff\xe9\x7b\x1b\x27\xa8\x5f\x29\xa7\x9c\xd5\xbf\x2f\x8f\xff\x25\x3f\xfe\xbc\x96\x67\xff\x6d\x39\x31\x9b\xe9\xc3\xcd\x2a\xe8\xb4\x45\x11\x4a\x26\x2b\xfc\x30\xcd\xa4\x53\x75\xae\x50\xf0\x41\x28\xf8\xaf\x9d\xcd\x60\xfb\xb7\xf5\x4f\x3f\xb5\x8c\x88\x1f\xd8\xf4\xa5\x5f\xef\x8f\x6a\x61\x31\x0a\x19\xd7\x57\xb3\x27\x3c\xbe\x7f\x67\xa0\xe4\x50\x72\x28\x39\x94\x1c\x4a\x0e\x25\x87\x92\x43\xc9\xa1\xe4\x50\x72\x28\x39\x94\x1c\x4a\x0e\x25\x87\x92\x43\xc9\xa1\xe4\x50\x72\x28\xf9\x41\x4a\xee\x39\x72\xad\x26\xa4\x27\x47\x73\x9f\x06\xc7\x3f\xe8\xc3\x7e\x95\x19\x4c\xfc\x06\x98\x78\x79\x37\x41\xe1\x76\xa0\xf0\xf2\x86\x40\xc0\x21\xe0\x10\x70\x08\x38\x04\x1c\x02\x0e\x01\x87\x80\x43\xc0\x21\xe0\x10\x70\x08\x38\x04\x1c\x02\x0e\x01\x87\x80\x43\xc0\x21\xe0\x10\xf0\xc3\x04\x5c\xc6\x41\xf4\xac\xa6\x25\x1d\x23\xf0\xf2\xb8\x30\xf0\x5b\x60\xe0\xe5\xed\x04\x82\x5b\x02\xc1\xcb\x3b\x02\x05\x87\x82\x43\xc1\xa1\xe0\x50\x70\x28\x38\x14\x1c\x0a\x0e\x05\x87\x82\x43\xc1\xa1\xe0\x50\x70\x28\x38\x14\x1c\x0a\x0e\x05\x87\x82\x43\xc1\x0f\x52\xf0\xb2\x16\x67\xfa\xf0\x7f\xcb\x7f\xff\x87\x24\x2a\xc0\xf2\x4b\x60\x79\x55\x51\xbb\x39\x9d\x0a\xb8\x9c\xf4\x29\x60\x73\xb0\x39\xd8\x1c\x6c\x0e\x36\xb7\x16\xb8\x82\xcd\xc1\xe6\x60\x73\xb0\x39\xd8\x1c\x6c\x0e\x36\x07\x9b\x5f\x3b\x8c\xe5\x4d\x53\xa7\xa0\xef\x97\x5a\x27\x8b\xd4\x8d\x62\x79\x27\xd2\x8d\xab\x59\xa8\x5e\x23\x49\x67\x6d\x70\x5a\x9c\x44\xfa\x52\xee\x9f\x7f\x09\xa9\x76\xdb\x10\x3b\x59\x0d\x9e\xa8\x07\x4b\xad\x28\xf2\x33\xc6\x08\x60\x04\x30\x02\x18\x01\x8c\x40\x87\x46\xc0\xfc\xfc\x3f\x67\x89\x81\xba\x0d\x08\x8b\x31\xaf\xa8\x09\xda\x93\x15\xb8\xab\x26\xbb\x7a\x42\x9f\x4f\x8c\xd4\x7c\xb9\x9a\xc5\xcf\xb6\xd6\xb0\xb5\x63\xe3\x14\xec\x75\x0a\xf8\x84\x03\x3e\x01\x97\x80\x4b\xc0\x25\xe0\x12\x70\x09\xb8\x04\x5c\x02\x2e\x01\x97\x80\x4b\xc0\x25\xe0\x12\x70\x09\xb8\x84\xe9\xba\x04\x2d\x11\xf2\x66\x1e\x5a\x8e\xd6\x7d\x81\x1d\xaa\x00\x0b\x82\x05\xc1\x82\x60\x41\xb0\x20\xd3\xb5\x20\xa4\xcd\xc7\x58\x9c\x61\x2c\xb6\x12\xe8\x23\x2b\x48\x98\x8f\xa7\xc0\x53\xe0\x29\xf0\x14\x78\x0a\xdb\x08\x37\x9e\x02\x4f\x81\xa7\xc0\x53\xe0\x29\xf0\x14\x78\x0a\x3c\x05\xb4\x1f\xda\x0f\xed\x87\xf6\x43\xfb\xa1\xfd\x59\xf7\x5b\x1d\xba\x25\xfe\xec\x70\xb8\x31\x5f\x80\x2b\x18\x76\x63\x03\x9e\x00\x4f\x80\x27\xc0\x13\xe0\x09\xf0\x04\x78\x02\x3c\x01\x9e\x00\x4f\x80\x27\xc0\x13\xe0\x09\xf0\x04\xc3\xed\x67\x68\x58\x85\xb2\x8d\x01\xb1\x81\xd8\x40\x6c\x20\x36\x10\x1b\x1d\x8a\x0d\x6a\x1f\x23\x26\xce\x12\x13\x5b\x55\x90\xb1\x13\x54\x3d\x46\x51\xa0\x28\x50\x14\x28\x0a\x14\x85\x75\x70\x1b\x45\x81\xa2\x40\x51\xa0\x28\x50\x14\x28\x0a\x14\x05\x8a\x02\xe2\x0f\xf1\x87\xf8\x43\xfc\x21\xfe\x10\xff\xb0\x8f\xbd\x0c\xdd\x52\x7f\x36\x33\xdc\x9a\x33\xc0\x17\x0c\xbc\x9b\x01\x57\x80\x2b\xc0\x15\xe0\x0a\x70\x05\xb8\x02\x5c\x01\xae\x00\x57\x80\x2b\xc0\x15\xe0\x0a\x70\x05\xb8\x82\x01\xb7\x33\x34\x2c\x43\xd9\xcf\x80\xdd\xc0\x6e\x60\x37\xb0\x1b\xd8\x8d\xee\xec\x46\x22\x35\x27\xef\xbc\x2e\xc3\x17\x73\x5c\x0a\x33\xdc\x9a\x9b\xa8\x6e\x2c\xfb\x19\xc6\xd9\xcf\x50\xdd\x01\x1c\x05\x8e\x02\x47\x81\xa3\xc0\x51\xe0\x28\x70\x14\x38\x0a\x1c\x05\x8e\x02\x47\x81\xa3\xc0\x51\xe0\x28\x20\xfe\xe7\x35\x0d\xe2\x0f\xf1\x87\xf8\x43\xfc\x5f\x12\xf1\xef\x7c\x3f\x43\xc7\xd4\x9f\xfd\x0c\xb7\xe6\x0c\xf0\x05\xc3\xee\x67\xc0\x15\xe0\x0a\x70\x05\xb8\x02\x5c\x01\xae\x00\x57\x80\x2b\xc0\x15\xe0\x0a\x70\x05\xb8\x02\x5c\x01\xae\x60\xc0\xfd\x0c\x4d\xcb\x50\xf6\x33\x60\x37\xb0\x1b\xd8\x0d\xec\x06\x76\xa3\x3b\xbb\x91\x66\x4e\x26\x97\x9b\xa0\xf3\x0d\x0d\x5f\xf3\x03\xb3\xa3\xe1\xd6\xec\x44\xed\xce\xb2\xa5\x61\x9c\x2d\x0d\xb5\x5b\x80\xa7\xc0\x53\xe0\x29\xf0\x14\x78\x0a\x3c\x05\x9e\x02\x4f\x81\xa7\xc0\x53\xe0\x29\xf0\x14\x78\x0a\x3c\x05\xd4\xff\xbc\xa6\x41\xfd\xa1\xfe\x50\x7f\xa8\xff\x8b\xa2\xfe\x9d\x6f\x6a\xe8\x9a\xfc\xb3\xab\xe1\xe6\xbc\x01\xce\x60\xd8\x6d\x0d\xf8\x02\x7c\x01\xbe\x00\x5f\x80\x2f\xc0\x17\xe0\x0b\xf0\x05\xf8\x02\x7c\x01\xbe\x00\x5f\x80\x2f\xc0\x17\x0c\xb9\xaf\xa1\x71\x1d\xca\xc6\x06\x14\x07\x8a\x03\xc5\x81\xe2\x40\x71\x5c\xa0\x38\xa8\xc8\x80\x87\x38\xc1\x43\x6c\xd7\x61\xf8\x23\x4a\x1e\x83\xa0\x74\x13\x29\x42\x82\xba\x0c\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xb0\x8e\x66\xe3\x24\x70\x12\x38\x09\x9c\x04\x4e\x02\x27\x81\x93\xc0\x49\x40\xc1\xa1\xe0\x50\x70\x28\x38\x14\xbc\xa0\xe0\xe4\xf1\xd9\xff\x09\x1c\xbc\x81\x83\xef\x64\xef\x01\x84\x8f\x0f\xc2\x89\xce\x87\x84\x43\xc2\x21\xe1\x90\x70\x48\x38\x24\x1c\x12\x0e\x09\x87\x84\x43\xc2\x21\xe1\x90\x70\x48\x38\x24\x1c\x12\x0e\x09\x87\x84\x43\xc2\x9b\x49\xf8\x46\x3d\x99\x59\xfe\x9d\x1a\x23\xfa\xd1\xc3\x89\x00\x7c\x25\x33\xe1\x87\xcb\x28\x59\x97\x37\xda\x11\x86\xd5\x1d\x62\xd4\x7d\xc1\xe7\x11\xb9\x77\x57\x58\x7a\xeb\x6e\x1c\x01\xd3\x2b\x99\x3d\x6e\x7d\xfe\xf1\xe9\xd3\x7f\x6d\x5d\x7c\xdb\x10\x74\x79\x82\xbd\x00\xe8\x7f\x95\x7f\x9e\xf0\x84\xff\x7c\x7d\xce\x43\xbe\x35\x07\x37\xaf\x38\x4f\x78\x07\x4f\xf8\xff\xfe\x7c\x7d\xee\x43\xfe\xf7\xeb\xc7\xa7\x4f\x5f\xf6\xee\x82\x85\x8f\x7a\x71\x92\xba\xc6\x83\x15\x4f\xbc\x06\xb8\x89\xfc\xe9\xcb\x5f\x35\xc7\x19\x47\xe9\x81\xc7\xdf\x2c\x99\x84\x23\xfe\x52\xbf\xfc\x45\xff\xb2\xcd\x06\x72\xa4\xe7\xd4\x5c\xa6\xdd\x47\xb5\xe9\x9a\x35\x09\xa7\xda\xed\x2f\x46\xf4\x45\xe4\x3d\xd7\x1e\x4f\x33\xa2\xef\xfc\xe7\xce\x9e\xd7\xeb\x1e\xe6\xf9\xce\x63\xf3\xf3\xf5\xbc\x7e\xfa\x7b\x0f\xf0\xce\xf5\x18\xe5\x05\x3c\xf7\x9c\xef\xaa\x13\x3b\xf8\xd2\xbd\x37\x9c\x60\xbc\xb3\x7b\x73\xe8\xec\x1e\x5d\x57\xc6\x23\x9e\x5e\x7f\x92\x58\x77\x45\x57\xf9\xe1\xa6\xae\x6f\x5f\x18\x37\xbc\x97\x3b\xc2\x78\x0c\x57\xac\xd7\xbe\x39\x1a\xb9\xd3\x71\x25\xae\x93\x15\xcb\xef\x2d\x17\x53\x80\xcc\x30\xca\xc4\x42\x8a\x58\x9d\x79\x9a\x49\x6f\x2e\x1e\x43\xe1\x87\xc6\x84\x46\x89\xd8\x84\xa5\x4c\xf5\x84\x97\x3c\x7f\xd9\x84\xc2\xf3\x13\xa9\xd6\x58\xb2\x34\x74\x7a\x3d\x1a\x0a\x27\xcc\x15\x65\xf1\x2a\xe7\x42\x48\x2c\x37\x89\xa6\x9e\x71\x12\xb9\x32\x4d\xf3\x25\x7b\x0d\xde\xce\xc5\xdf\xfa\x1b\x35\x4d\xd6\x88\x48\xad\xd7\x1f\x83\xe0\xad\xe6\x49\x5e\xf2\x2c\x92\x4d\x28\xd2\xcc\x51\xcb\xa6\x02\xa2\xe5\x87\xab\x8b\x87\xa2\xf3\x33\xa7\x3a\x82\x6c\xf9\xd4\xe0\x45\xb6\x28\xeb\x5d\x9d\x67\xad\x9d\x67\xd5\x90\x0a\x64\xe6\x10\xd2\x8d\xd6\x71\x20\x35\x00\x2f\x8f\x63\x1e\x48\x2b\x4d\x4c\xff\x08\x4b\xff\xd5\xbc\xf8\x54\xfd\x04\x6b\x4f\x4b\x66\x3c\xe5\xcd\x38\x6d\x56\x5e\x7e\x9c\x95\x67\xdb\x3c\x7c\xef\xf1\x66\xe1\x69\xc1\xe3\x7d\xf2\xba\xb3\xfc\x0d\x96\x9d\x17\x3f\xee\x2d\x29\xb4\x83\xc8\x75\x82\x74\xa3\x47\x52\xc7\x55\x33\x81\x4b\x57\xa6\x7f\xaa\x23\x7d\x35\x47\x7a\xd4\x47\x7a\x51\xcb\xd4\x33\x9e\xea\x6a\x95\x5a\x7b\xb0\xab\x04\xd3\x47\x2f\xa4\xd5\x6b\xd7\xea\xd9\xfb\xf9\x7a\xde\xda\x94\xbd\x37\x62\xe7\x8a\x8d\xb7\x8e\xbd\xf0\xfc\x47\x58\xd3\x5e\x7f\xa6\x83\xad\x6f\xaf\x3d\x55\xcb\xd7\xba\xbb\xfd\xed\xfe\x52\xf7\xd8\x3b\xcd\xba\x97\x75\xef\x0b\x5d\xf7\x92\xa5\x70\xa0\x25\xfd\xcf\xd7\x0f\xa9\x0c\x96\x9d\x4c\xf6\xbe\xca\x60\xc9\x5c\xef\xd2\xb9\xde\xb1\xab\x37\x9d\x09\x5e\x5b\x4b\x26\x32\xbf\x3b\xf9\xf4\xc7\x9e\xde\x5d\x72\xa2\xe3\xcc\xee\xce\x3f\xd3\xc9\x4f\xee\x8e\xbc\xce\xcc\xed\x98\xdb\xbd\xd0\xb9\x9d\xcd\x13\xa0\x64\x13\xc8\x2e\xe6\x3f\x5f\xd4\x71\x98\xfe\x5c\x36\xfd\x69\xba\x78\x93\x9c\xfd\xd4\x1b\x32\xbd\xc9\xcf\xc1\xb3\xb7\x68\xee\x73\xea\x79\x8e\x3e\xf5\x39\xed\x44\x6f\x69\xe6\xd3\xf0\x26\x33\xf1\x61\xe2\xc3\xc4\xc7\x92\x89\x4f\x27\xd4\x07\xe2\x73\xe9\x94\xe7\x36\x68\xcf\x84\x49\xcf\x24\x28\xcf\x34\x08\xcf\x0b\xa3\x3b\x90\x1d\x26\x38\x4c\x70\x2c\x9a\xe0\x44\xa9\xeb\x04\x7e\xb8\x22\x48\x75\xbc\x19\x51\x71\x0f\x4e\x0a\xe0\x2b\x3e\x4c\x80\x6a\x4b\xc4\x5e\xf9\x44\x13\x97\x3a\xfa\x13\x7d\x6a\x54\x6a\xf1\x79\x62\x52\xcf\x7d\xc2\xf5\x2f\x47\x61\xe6\x04\x71\xe4\x15\x3f\x33\x13\xa4\x53\x9e\x7c\x93\x97\x2a\xc9\x33\x65\x14\x19\x51\xa2\xa5\x50\x33\x36\xf1\xff\x96\x07\x7f\x8a\xbc\xc7\xf2\xe0\x36\xaf\x53\x1b\x3f\x6c\x63\xba\xd6\x73\x5e\x12\x75\x97\xb6\xde\x92\x96\x1b\x63\x57\xe6\xd6\x79\xad\x8d\xea\xad\x69\x39\xe9\xfe\xde\xa0\x23\x6b\x9e\xeb\x53\xb7\xd6\x86\xee\xbd\xa5\xce\x91\x77\xc7\x82\xe5\x0e\x89\x5c\x49\xe4\x4a\x22\x57\x12\xb9\x92\xc8\xb5\xbb\x3e\x95\x44\xae\x24\x72\x25\x91\x2b\x89\x5c\x49\xe4\x4a\x22\x57\x12\xb9\x92\xc8\x95\x44\xae\x67\x9e\x33\x89\x5c\x49\xe4\x7a\xf6\x24\x86\x44\xae\x37\x9a\xc8\xb5\x4e\xba\x5b\x92\x2e\x00\xc0\x5f\x22\x00\xaf\x32\x3c\x1c\xbb\x45\x47\x22\xc2\xda\xdf\xbe\xd6\x21\x0b\x90\x0a\x48\x05\xa4\x02\x52\x6f\x1a\xa4\x1e\x20\xa9\x4d\x63\x78\x25\xec\xba\xed\x5a\x07\xe1\xa9\xc7\x80\xea\x64\x1a\x7c\x2a\x7a\x3c\xc6\x1e\xbb\x6c\xf0\xee\xdc\x1d\x02\x09\x81\x84\x40\x42\x20\x21\x90\xc3\x10\xc8\x36\x04\x39\xe4\xa0\x06\xd4\x9b\x10\xd4\x3b\x4e\xf5\x06\x9d\x1e\x8c\xc6\xf6\x8e\xc2\xbd\x2e\x2f\xc3\x2e\xe1\x9b\x04\xe2\x6b\x63\x7c\xcd\x17\x66\x87\xf0\x10\x92\x38\xc9\x90\xc4\xd3\x36\xb7\x4e\x90\x9b\x8e\x81\x35\xcb\xed\xad\x3d\x80\xcd\x51\xb7\xba\x9e\xf0\x8e\xb5\xbf\x5f\x3d\xcc\x3d\x5e\xf2\xa6\xbe\xd6\x5d\x7d\x93\xef\xa6\x6d\xd8\x74\x7c\xed\x69\x0e\xb5\xed\xf8\xba\xf3\xb4\x7b\xe3\x71\xaf\x23\x9e\x59\xff\xb6\x8f\x79\xe6\xe7\xc2\x8d\x82\x40\xba\xc5\xbc\x93\xf1\xef\xa4\xf1\xcf\x5c\xbb\xad\xf1\xef\x7d\x79\x1d\x51\x7c\x28\x3e\x14\x1f\x8a\x0f\xc5\x87\xe2\x43\xf1\xa1\xf8\x50\x7c\x28\x3e\x14\x1f\x8a\x0f\xc5\x87\xe2\x43\xf1\xa1\xf8\x50\x7c\x28\xbe\xf3\xd2\xf6\x7c\xcd\x9c\x6c\x93\x8e\x82\x39\xcd\x10\x5b\x41\x42\xab\x91\xe7\xb5\x79\x47\x5e\xf0\xce\x71\x0a\x70\xf5\x9b\xa5\xf0\xfc\x7d\x40\xe6\x43\xff\x39\x71\x3b\x90\x1e\xc6\xb7\x59\x25\x2c\xff\x24\x96\xaf\xae\xdc\x78\x5b\x74\x8e\x0e\xae\x5f\xcd\xca\x57\xaf\x9e\xff\xd1\xab\xd0\x85\xfa\x97\xe3\x66\x73\x21\x3e\xaa\xbf\x8b\xff\x5f\x3b\x7e\x98\x39\x7e\x98\x0a\x37\xd8\xa4\x99\x4c\xee\xf3\x67\xc1\xcd\x69\x93\x08\xfc\x1f\x52\xcc\xca\xf6\xcd\x9a\x86\x4b\x7d\xe8\x71\xe6\x11\x65\x53\x4b\xb9\xb0\x28\x1a\x2d\x3d\xdd\x5a\xdd\x4e\xf5\xba\xc7\x69\xd1\xa6\x7c\x79\xb5\x49\xd5\xaa\xc9\x09\xcd\x32\xd7\xcc\x0e\x9a\x9b\xa7\x8e\x31\x81\xe9\x80\xcd\xee\x53\xf5\x44\x56\xcf\x03\x36\x07\x7b\xca\x38\x70\x5c\x49\x67\x59\x7c\xd5\x79\x9d\xa5\xbe\x78\x44\xfe\x6c\xbf\x6b\x44\xfe\x10\xf9\xf3\x42\x22\x7f\x7a\x8c\xa8\xd9\xd8\x3d\xaa\x9c\x18\x50\x43\x10\xe9\xe5\x41\x34\xa3\x0c\x25\x1d\xc3\x9a\x0f\xba\x59\x9f\xf5\x63\x71\x80\xd9\x30\x64\x8c\x39\x64\xf4\x05\x84\xeb\x8c\xd7\x0f\x45\x6a\xb0\xac\x58\xc8\x65\x64\x64\x4d\x61\x54\xaa\x18\xac\x5c\x62\xe9\x0b\xb1\x91\x26\xaa\x66\x21\x45\x18\x85\xf7\xa1\x5c\x39\xfa\x72\xe7\x5f\x3c\x17\x7f\x95\x91\x4e\xc6\xae\x96\x37\x3a\xef\x7c\xfc\xf5\x5a\x7a\xbe\x93\xc9\xe0\x39\x0f\xe5\xa9\x07\x6a\x85\x7e\x70\x97\x83\x59\x2d\x23\xc4\x2a\x51\x33\xe1\x58\x26\x7e\xe4\x95\x14\xbb\x9a\x14\xab\x76\x97\xd7\x7c\x93\xaa\x93\xac\x6b\x0c\x47\xfd\x66\xd1\xa0\xfc\x4b\x96\xb5\x05\x98\xaf\x7e\x41\x9f\xe7\x5a\x3a\x61\xe3\x39\x36\xdc\x3f\x7d\x4e\x4f\xfa\x94\x46\xa5\xda\x1f\x64\x9c\x48\x75\x71\xbd\xb7\x22\x0e\xa4\x93\xca\xd2\x3c\x3f\x25\x51\xec\xac\xf4\x5d\x7e\x8a\x02\xdf\x7d\xbe\x33\x17\xda\xb8\xd6\xe2\x82\x79\xe5\x01\xd4\xa3\xf0\x7a\xfe\xdb\x5c\xd4\x16\xf3\x9e\x8c\x65\xe8\xc9\x30\xab\x42\x25\xa4\x88\x92\xf8\xbb\x13\xaa\xcb\x96\xa3\xc6\x87\xa5\x13\x14\xc1\x52\xdf\x5e\x99\x1f\x7f\x7b\x25\x96\x7e\xa8\x29\x61\x52\x7e\x99\xe3\x79\x5a\x4a\x3e\x18\x5e\xee\x55\x6e\xc9\x1c\x7e\x96\x56\xbf\x64\x02\x94\xe6\xe2\xa3\xaf\xdf\xcd\xda\xa9\x47\xc9\x7e\xdb\x8a\x62\x25\xda\x36\x2d\x36\x99\xe9\x39\xa2\xec\x7b\xd3\xcd\x33\x67\xf8\xa1\x68\x5b\x3f\xb7\xee\x84\xce\x50\x37\x4c\xf5\x41\xdf\xa3\x5f\x62\xe5\x24\x0b\x67\xb5\x15\xea\x5a\x76\x24\x32\x59\x46\xc9\x5a\x5d\xf1\xc6\xab\xf1\x79\xa7\x3d\xed\x17\x43\xbf\x9a\xc5\x7b\x15\x9b\x2b\xe7\xab\x67\xde\xf5\xbd\x2a\xd2\x49\x07\x80\xe8\xd8\xb3\xf2\x0e\xa6\xba\x30\x89\xfe\x69\x11\xe2\x31\xaf\xdd\xaa\x22\x38\xa0\x80\xcb\x15\xd4\xd9\xfe\xb2\xb9\x30\x41\xd7\x3a\xe0\xa0\xde\x9b\xce\x4c\x1b\x66\xe2\x3e\x7f\xbc\xb6\x1f\xbf\xf4\x9d\x98\xfd\xee\xb8\x3f\xd4\x34\x2a\xf4\xd4\xa7\x9c\x20\x88\x7e\xe9\x0f\xed\x5c\x38\x13\xf7\x93\xbf\xc5\xdb\x07\x29\x5a\xb0\x28\x8f\xf4\x4e\xcc\xfe\x88\x12\x59\x3b\xac\x70\x9d\xd4\x75\x3c\xd5\xfa\xfc\xfa\xe8\xd1\xc9\x1c\x2f\x35\xdd\xfd\xde\x01\x97\xe5\x31\x9a\x1e\xb7\x78\xf7\x61\x9d\xc0\x4a\xe1\x1a\xcf\x33\x4c\xd8\xbd\xcd\x26\xca\xea\x15\x42\xac\x55\x63\xeb\x02\xa1\xb2\x46\x46\x70\x76\x80\xa0\x76\xd7\x03\xf7\xfa\x14\xfe\xdd\xbe\x34\x58\xcb\x64\x25\x8f\x7e\x2a\xcd\x12\x27\x93\x2b\xdf\xbd\xdf\xfb\xfc\x0b\x5b\xa4\xe8\x96\x8f\xbf\x46\xe9\x14\x77\x1d\x78\xbf\x9f\x6a\x99\xd2\x58\xb4\x58\xb6\x68\xb1\x61\xf4\xb2\x1a\x20\xd5\x23\x3d\x2c\x1d\x20\x7a\x2d\x8c\xa2\xed\x7d\xfe\xa8\x1e\x3d\xdb\xba\xad\xb7\x43\xd4\x13\x83\x60\x69\x0c\xc2\x43\x6a\xa6\x7d\x67\x84\x22\x98\xdf\x28\x1e\x46\x3c\x5b\xef\x41\x09\xf9\xcc\x9c\xc1\xe1\x96\x9d\x35\x6f\xd5\xf0\xf6\x7a\xe7\xc5\xb2\x75\x52\x8f\xc3\x66\x6e\x3f\x7a\xf7\x8d\xc3\xb6\xdc\x61\x9f\x4b\xa8\xba\x1c\x70\x60\x55\xf6\xb1\xaa\x89\x0c\x6e\x10\x2b\x46\xb5\x9b\x1c\x2e\x20\x56\x10\x2b\x88\xd5\x21\x62\xa5\xb7\xef\x5d\x5b\x2c\x27\xdf\xea\x1e\x7a\xfe\x4f\xdf\xdb\x38\x41\x7d\xa3\xa2\x53\x26\xaf\x68\x79\x00\xe7\xb5\x48\x8e\xb7\x65\x0c\xc8\x4c\x1f\x73\x56\xa5\x24\xda\xca\x31\x53\x8e\xcc\xc2\x0f\xd3\x4c\x3a\xd5\x25\xb2\x71\x2d\xde\xf8\xe1\xa9\x97\xde\xf9\xb5\x37\x1b\x3a\x90\x34\xd5\xae\x02\xf4\x07\xa6\x3b\x7a\xaf\xed\xc7\x9f\x32\x1c\x27\xcf\xab\xbe\xa8\xf6\x27\x7b\xa5\xfe\x3c\x39\xd5\xc8\xa9\x46\x4e\x35\x72\xaa\x51\x7f\x9e\xfa\xf3\x13\xb9\x8b\xd4\x9f\x27\x35\x1c\xa9\xe1\x48\x0d\x47\x6a\x38\x52\xc3\x51\x7f\xfe\xdc\x73\x26\x8f\xdd\x84\xf2\xd8\x51\x7f\x9e\xfa\xf3\x83\xd5\x9f\x37\x04\xbd\x9f\x2a\xf4\x80\x75\xc0\xfa\x09\x61\x06\x7f\xd6\x89\x31\x48\x1d\xa4\x0e\x52\x07\xa9\x83\xd4\x41\xea\x20\x75\x4b\x61\x2c\x48\x1d\xa4\x0e\x52\x07\xa9\x83\xd4\x41\xea\x20\x75\x90\x3a\x91\xb2\xd8\x02\x6c\x01\xb6\x00\x5b\x80\x2d\xb8\xb6\x56\x45\xfe\xc8\xd4\x4c\x41\x58\x0c\x7d\xd1\x52\xfc\xf0\xc3\xd6\xfd\x85\x9d\x18\x83\xbb\x6a\xe2\xab\x27\xf7\xf9\x24\x49\xcd\x9d\xab\x19\xfd\x6c\x6b\x3d\x5b\x3b\x36\xbe\x61\x02\xbe\x01\xd7\x70\xc0\x35\xe0\x19\xf0\x0c\x78\x06\x3c\x03\x9e\x01\xcf\x30\x3a\xa1\xc6\x33\xe0\x19\xf0\x0c\x78\x06\x3c\x03\x9e\x01\xcf\x80\x67\x20\xa1\x08\x9a\x04\x4d\x82\x26\x41\x93\xa0\x49\xec\xd5\x24\x6f\x16\x32\x73\xde\x3c\x9c\xe8\x3b\x56\x32\xdb\x9e\x36\x9a\xb6\x1f\x14\x09\x03\xe5\x25\x9c\x7a\x4a\x44\x73\x23\x8e\x08\x84\x95\xcc\xea\xfa\xc0\xfc\xce\xe3\xd3\xa7\x2f\x7b\x77\xc2\x36\x5d\x50\x3b\x49\xbd\x85\xa2\x17\x67\xf0\xaf\xf2\xcf\xa3\x0f\xfc\x95\xbb\x85\x0c\x48\x48\xf2\x01\xb4\x98\xc2\x1e\x71\x7e\xf8\xb6\x31\xde\x19\x75\xab\xf6\x5f\x9a\x96\x5b\x64\x57\xf6\xac\xed\x84\x8f\xe6\xc4\xdb\xb2\x3e\xf6\xf7\x56\x1d\x31\x71\x16\x6d\xf8\xd9\x7a\x1e\xb0\x71\xd8\x38\x6c\x1c\x36\x0e\x1b\x87\x8d\xc3\xc6\x61\xe3\xb0\x71\xd8\x38\x6c\x1c\x36\x0e\x1b\x87\x8d\xc3\xf9\xe0\x7c\x70\x3e\x8d\x0f\x0d\xce\xe7\xa5\x38\x9f\x7e\xf2\x68\x41\xc6\x27\x4e\xc6\x3b\xab\x0a\xdf\x45\x99\x2a\xb8\x2a\x5c\x15\xae\x0a\x57\xbd\x25\xae\x7a\x00\xac\x36\xd7\x9e\xbb\xeb\xa5\x6b\x1d\x04\xaf\x1e\xe3\xab\x93\x69\xf0\xa9\x24\xf2\x18\x8a\xec\xb2\xc1\xbb\x53\x79\x80\x24\x40\x12\x20\x09\x90\x04\x48\x0e\x03\x24\xdb\x88\xe4\x90\x83\x1a\x8c\x6f\x42\x8c\xef\x38\xe4\x1b\x74\x7a\x30\x1a\xea\x3b\xca\xfa\xba\xbc\x0c\xbb\xc0\x6f\x12\xc4\xaf\x0d\xf9\x4d\xa5\x38\x35\xb1\x8a\xd7\xc4\x2a\x46\xe9\x01\xc0\x6a\xe6\x12\xc2\x99\x22\x4b\x1d\x0d\x75\x9a\x8b\xd6\x23\xec\x2c\x5e\xd7\x45\xe4\x3d\xef\xbd\xad\x3b\xff\xb9\xb3\x4f\x6d\xb8\xf7\xae\xfd\x9d\xeb\x61\x52\x92\xcf\xb5\xee\x74\x4d\x0d\xd7\xc9\x8a\xc9\xc7\x16\x15\x29\x56\x46\x6a\x76\xbf\x90\x22\x56\x2f\x88\x5a\x56\xcd\xc5\x63\x28\xfc\xd0\x30\xc9\x28\x11\x9b\xb0\xc4\x9a\x9e\x30\x05\xfb\x85\xe7\x27\x52\x0d\x2d\xb2\x64\x65\x7a\x34\x56\x33\xe3\x1c\x16\x16\x1d\x61\x8e\x66\xc4\x72\x93\xe8\x65\x54\x9c\x44\xae\x4c\xd3\x7c\xc2\x52\x5b\x0d\xce\xc5\xdf\xfa\x1b\xf5\xf2\x54\xcf\x39\xd5\x6c\xe5\x31\x08\xde\xea\x09\xaa\x97\x3c\x8b\x64\x13\x8a\x34\x73\xd4\x30\x51\xcc\xca\xf3\xc3\xd5\x42\xab\xaa\xe7\xc1\x9c\xeb\x8d\xf5\xdf\x07\xfa\xee\x37\x87\xfb\xee\xf7\x66\x21\x64\xcb\xb9\xbe\x39\x74\xae\x8f\xae\x2b\x63\x6b\x4e\xb6\xbf\x41\x51\x0f\x37\xd6\x0f\x8a\x66\xb1\xdc\x3e\x2c\x9a\x9f\x0b\x37\x0a\x02\xe9\x16\x93\x54\x86\xc8\xd3\x87\x48\x73\x01\xf7\x87\xc8\xf7\xe5\x15\xc5\x0c\x62\x06\x31\x83\x98\x41\xcc\x20\x66\x10\x33\x88\x19\xc4\x0c\x62\x06\x31\x83\x98\x41\xcc\x20\x66\x10\x33\x88\x19\xc4\x0c\x62\x06\xcf\xcb\x0a\xf4\x35\x73\xb2\x4d\x3a\x0a\xf5\x34\x43\x6c\x85\x0b\xed\x27\xa0\xd7\xa6\x30\x79\xc1\x9b\xd0\x49\x46\x79\xc5\xc6\x44\xfd\x57\x2f\x5b\x8a\xce\x2b\xb6\xa3\x07\xf4\x6d\x6a\x09\xdf\x3f\x9d\xef\xab\xcb\x37\xf2\x6e\x9f\xa3\x03\xee\x57\xb3\x1a\xd6\x2b\xea\x7f\xf4\xca\x74\xa1\xfe\xe5\xb8\xd9\x5c\x88\x8f\xea\xef\xe2\xff\xd7\x8e\x1f\x66\x8e\x1f\xa6\xc2\x0d\x36\x69\x26\x93\xfb\xfc\xa9\x70\x73\x02\x25\x02\xff\x87\x14\xb3\xb2\x7d\xb3\xa6\x21\x54\x1f\x7a\x9c\xb9\x45\xd9\xd4\x52\x38\x2c\x8a\x46\x4b\x4f\xb7\x56\xb7\x53\xbd\xfd\x71\x5a\xb4\x29\x5f\x72\x6d\x52\xb5\x92\x72\x42\xb3\xf4\x35\x33\x86\xe6\xe6\xa9\x63\x4c\x60\x8a\x60\xbd\x23\x55\x1d\x93\xfd\x13\x84\xcd\xc1\xde\x33\x0e\x1c\x57\xd2\x81\x16\x5f\x75\x41\x07\xaa\xaf\x20\x41\x44\x6d\xef\x1f\x41\x44\x04\x11\xbd\xb8\x20\xa2\x1e\xe3\x72\x36\x13\x18\x73\x4e\x0c\xcb\x21\x5a\xb5\x8b\x50\x9c\x51\x06\x9a\x8e\x91\xcf\x07\xdd\xb6\xcf\xfa\x01\x39\x40\x7e\x18\x4b\xc6\x1c\x4b\xfa\xc2\xca\x75\x52\xec\x87\x22\x35\x70\x57\x2c\xe4\x32\x32\xca\xa7\xf0\x32\x55\x24\x57\xae\xc2\xf4\x85\xd8\x48\x13\x9b\xb3\x90\x22\x8c\xc2\xfb\x50\xae\x1c\x7d\xb9\xf3\x2f\x9e\x8b\xbf\xca\x78\x29\xe3\x68\xcb\x1b\x9d\x77\x43\xfe\x7a\x2d\x3d\xdf\xc9\x64\xf0\x9c\x07\x04\xd5\xc3\xbd\x42\x3f\xb8\xcb\xf1\xae\x56\x1a\x62\x95\xa8\x19\x73\x2c\x13\x3f\xf2\x4a\x16\x5e\x4d\x9e\x55\xbb\xcb\x6b\xbe\x49\xd5\x49\xd6\x65\x88\xa3\x7e\xb3\x68\x50\xfe\x25\xcb\xda\x92\xcd\x57\xbf\xa0\xcf\x73\x2d\x9d\xb0\xf1\x1c\x1b\xee\x9f\x3e\xa7\x27\x7d\x4a\xa3\xb2\xf1\x0f\xb5\xf2\xc5\x71\x20\x9d\x54\x96\xfe\xfa\x29\x89\x62\x67\xa5\xef\xf2\x53\x14\xf8\xee\xf3\x9d\xb9\xd0\xc6\xd8\x16\x17\xac\xaa\x7f\xac\x1e\x85\xd7\xf3\xdf\xe6\xa2\xb6\xfc\xf7\x64\x2c\x43\x4f\x86\x59\x15\x70\x21\x45\x94\xc4\xdf\x9d\x50\x5d\xb6\x9c\x55\x3e\x2c\x9d\xa0\x08\xb9\xfa\xf6\xca\xfc\xf8\xdb\x2b\xb1\xf4\x43\x8d\x19\x93\xf2\xcb\x1c\xcf\xd3\x6a\xf3\xc1\x50\x77\xaf\x32\x54\xe6\xf0\xb3\xb4\xfa\x25\x13\xe6\x34\x17\x1f\x7d\xfd\x6e\xd6\x4e\x3d\x4a\xf6\xdb\xa6\xdd\xb5\x89\x38\x34\x51\x56\xba\xe7\x88\xb2\xef\x4d\x37\xcf\x9c\xe1\x87\xa2\x6d\xfd\xdc\xba\x13\x3a\x43\xdd\x30\xd5\x07\x7d\x8f\x7e\x89\x95\x93\x2c\x9c\xd5\x56\xe8\x6c\xd9\x91\xc8\x64\x19\x25\x6b\x75\xc5\x1b\xaf\xc6\xe7\x9d\xf6\xb4\x5f\x0c\xfd\x6a\x16\xef\x55\x6c\xae\x9c\xaf\x9e\x79\xd7\xf7\xaa\x78\x29\x1d\x46\xa2\x23\xd8\xca\x3b\x98\xca\xac\x60\xcc\x45\xa0\xc8\xbc\x76\xab\x8a\x10\x83\x82\x4e\x57\x18\x68\xfb\xcb\xe6\xc2\x84\x73\xeb\xb0\x85\x7a\x6f\x3a\x33\x6d\x98\x89\xfb\xfc\xf1\xda\x7e\xfc\xd2\x77\x62\xf6\xbb\xe3\xfe\x50\xb3\xaa\xd0\x53\x9f\x72\x82\x20\xfa\xa5\x3f\xb4\x73\xe1\x4c\xf4\x50\xfe\x16\x6f\x1f\xa4\x68\xc1\xa2\x3c\xd2\x3b\x31\xfb\x23\x4a\x64\xed\xb0\xc2\x75\x52\xd7\xf1\x54\xeb\xf3\xeb\xa3\x47\x27\x73\xbc\xd4\x74\xf7\x7b\x07\x5c\x96\xc7\x68\x7a\xdc\xe2\xdd\x87\x75\x02\x4b\x88\x6b\x6c\xd1\x30\x01\xfd\x36\xfb\x2c\xfb\x17\x0c\xb1\xb6\x96\xad\xeb\x85\xca\x3d\x19\x57\xda\x01\xaf\xda\x5d\x1e\xdc\xeb\x53\xf8\x77\xfb\x4a\x61\x2d\x93\x95\x3c\xfa\xa9\x34\x4b\x9c\x4c\xae\x7c\xf7\x7e\xef\xf3\x2f\x71\xcd\x12\xef\xd6\xb6\xbf\x15\x36\x76\xe0\x75\x7f\xaa\xe5\x6f\x63\x0d\x63\xd9\x1a\xc6\x86\xc1\xcc\x7e\xc6\x54\x8f\x21\xb1\x79\xd0\xe8\xb5\x7a\x0b\xa5\x36\x89\x6e\xe8\x2d\xba\xe1\x21\x35\x93\xc2\x33\x82\x1c\xcc\x6f\x14\x4f\x24\xb6\x6e\xc0\x70\x87\x7c\x06\xcf\xa8\x21\x0e\x8c\x1a\xb7\x63\xc3\x79\xd3\xc6\xf4\xe2\x3b\x2f\x9b\xad\x2b\x00\xec\x38\xab\x01\x8b\xfa\x75\xec\xf8\x64\xec\xf8\xb9\xb0\xab\xcb\xe1\x08\xec\x65\x33\xf6\x9a\xc8\xd0\x07\xfc\x62\xb8\xbb\xdd\x21\x04\xf8\x05\xfc\x02\x7e\x9d\x06\xbf\xf4\x6e\xc3\x6b\x8b\x03\xe5\x3b\xf3\x43\xcf\xff\xe9\x7b\x1b\x27\xa8\xef\xab\x74\xca\x5c\x1b\x2d\x4f\xe1\xbc\x16\x32\xf2\xb6\x0c\x36\x99\xe9\x63\xce\xaa\x0c\x4a\x5b\x29\x71\xca\xd1\x5a\xf8\x61\x9a\x49\xa7\xba\x4e\x36\x2e\xe1\x1b\x3f\x7c\x13\xa5\x86\x7e\x35\x4f\x93\x0e\xe4\x87\xb5\xab\x12\xff\x81\x79\x90\xde\x24\xfc\xf1\xa7\x0c\xc7\x49\x69\xab\xaf\xec\x44\xf2\xda\x52\x83\x9f\x8c\x70\x64\x84\x23\x23\x1c\x19\xe1\xa8\xc1\x4f\x0d\xfe\x89\xdc\x45\x6a\xf0\x93\xd8\x8e\xc4\x76\x24\xb6\x23\xb1\x1d\x89\xed\xa8\xc1\x7f\xee\x39\x93\x85\x6f\x42\x59\xf8\xa8\xc1\x4f\x0d\xfe\x61\x6b\xf0\x1b\xaa\xde\x4f\x25\x7e\x60\x3b\xb0\xfd\xac\x98\x84\x3f\xeb\x14\x19\xcc\x0e\x66\x6f\xbc\x88\x60\x76\x30\x3b\x98\x1d\xcc\x0e\x66\xb7\x04\xd0\x82\xd9\xc1\xec\x60\x76\x30\x3b\x98\x1d\xcc\x0e\x66\x07\xb3\x13\x51\x8b\x41\xc0\x20\x60\x10\x30\x08\x18\x84\x4e\x0a\x6f\xe4\xcf\x4d\xcd\x1e\x84\xc5\xf8\x17\x2d\xc5\x0f\x3f\x6c\xdd\xa0\xd8\x89\x45\xb8\xab\x66\xbf\x7a\x86\x9f\xcf\x94\xd4\x04\xba\x9a\xd6\xcf\xb6\x16\xb5\xb5\x63\xe3\x20\x26\xe5\x20\xf0\x0f\x07\xfc\x03\xee\x01\xf7\x80\x7b\xc0\x3d\xe0\x1e\x70\x0f\x9d\xf5\xa9\xb8\x07\xdc\x03\xee\x01\xf7\x80\x7b\xc0\x3d\xe0\x1e\x70\x0f\xa3\xba\x07\x92\x91\xa0\x4e\x50\x27\xa8\x13\xd4\x09\xea\xa4\x53\x75\xb2\xd0\x9a\xe4\x44\xe1\xb1\xd2\x35\x87\x96\x51\xb2\x2e\x6f\xac\x23\x0c\x48\x3d\x24\x13\x06\x4a\x6e\x38\xc1\xbc\x8a\x8b\x26\x19\xb1\x63\x0c\x56\x32\xfb\x5d\x4b\x83\xa7\x4f\xff\xb5\x75\xa9\x6d\x33\x01\xe5\x09\xf6\xe2\x01\xfe\x55\xfe\xd9\xf0\xfc\xfe\x7c\x7d\xce\x23\xbc\xb5\xd6\x31\x2f\x2c\xcf\xef\xe5\xcf\xef\xff\xfe\x7c\x7d\xe2\x23\xfc\xf7\xeb\xc7\xa7\x4f\x5f\xf6\xae\xb9\x85\x0f\x72\x71\x92\x7a\xeb\xcf\x28\xcf\xf3\xff\x17\x2d\x4e\xdd\xd0\x66\x40\x56\x92\x4f\xe0\x8a\x25\x54\xa1\xa0\xff\x3b\x5a\xa0\x7a\x07\x7b\xd4\xd5\xbd\xc8\x9f\xf5\xff\x8e\x16\x76\x25\x6b\x9b\xeb\x36\xa8\x27\xfc\xbf\xa3\x45\x7f\x4f\xf6\x11\x63\x7b\xf5\x66\xb1\xc5\xf6\x03\x51\xa8\xda\xda\x73\xbe\xad\x65\x5f\x63\x64\x31\xb2\x18\x59\x8c\x2c\x46\x16\x23\x8b\x91\xc5\xc8\x62\x64\x31\xb2\x18\x59\x8c\x2c\x46\x16\x23\x8b\xf7\xc3\xfb\xe1\xfd\xf0\x7e\x2f\xd3\xfb\xfd\x7c\xdd\xb6\x43\x0a\xfc\x3c\x75\xfc\x5c\x6d\x29\xaa\xdf\x82\x23\x05\xd5\xba\xa8\x49\x06\xfa\x04\x7d\x82\x3e\x41\x9f\xb7\x84\x3e\x0f\xb0\xcf\xe6\x42\x83\x77\xbd\x74\xad\x83\x10\xd0\x63\x08\x74\x32\x0d\x3e\x15\x16\x1e\xa3\x85\x5d\x36\x78\x77\xb6\x0d\x33\x84\x19\xc2\x0c\x61\x86\x30\xc3\x61\x98\x61\x1b\x34\x1c\x72\x50\x03\xc3\x4d\x08\xc3\x1d\xe7\x70\x83\x4e\x0f\x46\xa3\x71\x47\x71\x5c\x97\x97\x61\x97\xc9\x4d\x02\xca\xb5\x51\x39\x8b\x2b\x91\x13\x10\x58\x0b\x08\x8c\xd2\x03\x90\xd3\xcc\x06\x84\x63\x3b\xcf\x1c\x16\x37\x9a\xab\x72\x0d\x70\x2c\x5e\x99\x45\xe4\x3d\xef\xbd\x31\x3b\xff\xb9\xb3\xa5\xaf\xc3\x67\xbf\xfd\xb9\xef\x61\xe4\xcf\x27\x34\x77\xba\x04\x89\xeb\x64\xc5\x08\xbf\x85\x1e\x8a\xe5\x87\x9a\x42\x2f\xa4\x88\xd5\xe3\xab\xd6\x2e\x73\xf1\x18\x0a\x3f\x34\xe0\x2f\x4a\xc4\x26\x2c\xd9\xa1\x27\xbc\xe4\xf9\xcb\x26\x14\x9e\x9f\x48\xd5\x7f\xcb\x12\x48\xe9\x21\x4f\x4d\x3f\x73\x22\x57\xf4\x36\x39\xff\x10\xcb\x4d\xa2\xd7\x2a\x71\x12\xb9\x32\x4d\xf3\x59\x41\x6d\xc9\x35\x17\x7f\xeb\x6f\xd4\x6b\x40\x3d\xb1\x53\x53\x82\xc7\x20\x78\xab\x67\x81\x5e\xf2\x2c\x92\x4d\x28\xd2\xcc\x51\x7d\x71\x31\xf5\xcd\x0f\x57\x0b\x31\xaa\x6e\xb8\x39\xd7\xa9\x75\x92\x07\x3a\xc8\x37\x87\x3b\xc8\xf7\x66\x39\x31\xd8\xc9\xbc\x39\x74\x32\x8f\xae\x2b\xe3\xe1\xce\xa6\xbf\xb1\x43\x77\xda\xe3\x8f\x1d\x66\x55\xd8\x3e\x7a\x98\x9f\x0b\x37\x0a\x02\xe9\x16\xb3\x31\x46\x92\xda\x48\x62\xae\x50\x3e\x92\xbc\x2f\xaf\x13\x12\x0b\x89\x85\xc4\x42\x62\x21\xb1\x90\x58\x48\x2c\x24\x16\x12\x0b\x89\x85\xc4\x42\x62\x21\xb1\x90\x58\x48\x2c\x24\x16\x12\xeb\xc5\x4b\xac\x03\x89\x5c\xbe\x66\x4e\xb6\x49\x47\x01\x93\x66\x88\xad\x80\x9f\x05\x90\xf2\xda\x8c\x17\x2f\x78\xcf\x32\xf9\x2b\xaf\xd8\xc7\xa6\xff\xba\x6c\x07\xca\x79\xf5\x78\xf4\x90\xbc\xcd\x1d\x61\xec\x35\xc6\xae\xae\x4f\xdf\x9b\x43\x8e\x0e\x7a\x5f\xcd\x8a\x54\xaf\x6a\xff\xd1\xab\xc3\x85\xfa\x97\xe3\x66\x73\x21\x3e\xaa\xbf\x8b\xff\x5f\x3b\x7e\x98\x39\x7e\x98\x0a\x37\xd8\xa4\x99\x4c\xee\xf3\xfb\xea\xe6\x14\x48\x04\xfe\x0f\x29\x66\x65\x5b\x66\x4d\xc3\x98\x3e\xf4\x38\xe3\x7b\xd9\xd4\x12\xfa\x2f\x8a\x46\x4b\x4f\xb7\x56\xb7\x53\xbd\xa0\x71\x5a\xb4\x29\x5f\xf6\x6c\x52\xb5\x9a\x71\x42\xb3\xfc\x34\xa3\x76\x73\xf3\xd4\x31\x26\x30\x4c\x8f\xef\x0a\x55\xdf\x61\xc1\x28\xbc\x39\xd8\x83\xc5\x81\xe3\x4a\x3a\xb1\x43\x9d\x98\xbe\x44\xc4\x9c\x10\x73\x42\xcc\x89\x55\x31\x27\x3d\x46\x79\x6c\x6c\xe8\xb9\x4f\x0c\xf2\x20\x44\xb0\x3d\xb0\xa3\xf7\xee\xba\x63\x80\xf0\x41\x9f\xfc\x67\x7d\x8b\x0f\x70\x04\x3a\xec\x31\x3b\xec\xbe\x20\x65\x9d\x3b\xfa\xa1\x48\x0d\x2a\x14\x0b\xb9\x8c\x8c\x40\x28\x28\x7f\x15\x17\x94\x8b\x15\x7d\x21\x36\xd2\x44\x7a\x2c\xa4\x08\xa3\xf0\x3e\x94\x2b\x47\x5f\xee\xfc\x8b\xe7\xe2\xaf\x32\xfa\xc6\x18\xbf\xf2\x46\xe7\x1d\x89\xbf\x5e\x4b\xcf\x77\x32\x19\x3c\xe7\xe1\x25\xf5\xe0\xa1\xd0\x0f\xee\x72\x58\xa8\x01\xb9\x58\x25\x6a\xe6\x18\xcb\xc4\x8f\xbc\x92\xac\x56\x93\x48\xd5\xee\xf2\x9a\x6f\x52\x75\x92\x75\xb4\xee\xa8\xdf\x2c\x1a\x94\x7f\xc9\xb2\xb6\xf8\xf0\xd5\x2f\xe8\xf3\x5c\x4b\x27\x6c\x3c\xc7\x86\xfb\xa7\xcf\xe9\x49\x9f\xd2\xa8\xa4\xf5\x43\xad\xda\x6e\x1c\x48\x27\x95\xa5\x0d\x7d\x4a\xa2\xd8\x59\xe9\xbb\xfc\x14\x05\xbe\xfb\x7c\x67\x2e\xb4\xf1\x7f\xc5\x05\xab\xca\xf5\xaa\x47\xe1\xf5\xfc\xb7\xb9\xa8\x2d\x64\x3d\x19\xcb\xd0\x93\x61\x56\xe9\x7b\x29\xa2\x24\xfe\xee\x84\xea\xb2\xe5\x60\xec\x61\xe9\x04\x45\x00\xcf\xb7\x57\xe6\xc7\xdf\x5e\x89\xa5\x1f\x6a\xa6\x95\x94\x5f\xe6\x78\x9e\x16\x65\x0f\x86\xe1\x7a\x95\xef\x30\x87\x9f\xa5\xd5\x2f\x99\xa0\x99\xb9\xf8\xe8\xeb\x77\xb3\x76\xea\x51\xb2\xdf\x36\x6d\x42\x4d\xfc\x9a\x89\xd9\xd1\x3d\x47\x94\x7d\x6f\xba\x79\xe6\x0c\x3f\x14\x6d\xeb\xe7\xd6\x9d\xd0\x19\xea\x86\xa9\x3e\xe8\x7b\xf4\x4b\xac\x9c\x64\xe1\xac\xb6\x42\x29\xcb\x8e\x44\x26\xcb\x28\x59\xab\x2b\xde\x78\x35\x3e\xef\xb4\xa7\xfd\x62\xe8\x57\xb3\x78\xaf\x62\x73\xe5\x7c\xf5\xcc\xbb\xbe\x57\x45\xdf\xe8\xa0\x04\x1d\x0f\x55\xde\xc1\x54\x17\x48\xd0\x3f\x2d\xc2\x0e\xe6\xb5\x5b\x55\x08\xeb\x02\x85\x56\x40\x63\xfb\xcb\xe6\xc2\x04\xe8\x6a\x09\x5e\xef\x4d\x67\xa6\x0d\x33\x71\x9f\x3f\x5e\xdb\x8f\x5f\xfa\x4e\xcc\x7e\x77\xdc\x1f\x6a\xe2\x13\x7a\xea\x53\x4e\x10\x44\xbf\xf4\x87\x76\x2e\x9c\x89\x45\xc9\xdf\xe2\xed\x83\x14\x2d\x58\x94\x47\x7a\x27\x66\x7f\x44\x89\xac\x1d\x56\xb8\x4e\xea\x3a\x9e\x6a\x7d\x7e\x7d\xf4\xe8\x64\x8e\x97\x9a\xee\x7e\xef\x80\xcb\xf2\x18\x4d\x8f\x5b\xbc\xfb\xb0\x4e\x60\x9e\x7e\x8d\x7b\x18\x26\x44\xdb\x66\x3b\x62\xc1\x9c\x3e\xd6\x47\x69\x9d\xd2\x57\x26\xc3\xa8\xb5\x33\xc1\xcc\xee\x0c\xfe\x5e\x7f\xdd\xbf\xdb\x27\xf3\x6b\x99\xac\xe4\xd1\x4f\xa5\x59\xe2\x64\x72\xe5\xbb\xf7\x7b\x9f\x7f\x31\xcb\x0a\xdd\xe6\x49\x42\xa0\x03\x6f\xe4\x53\x2d\x63\x14\xcb\x0c\xcb\x96\x19\x36\x8c\x37\x16\xa0\x98\xab\xeb\xed\xdb\x21\xb3\xcf\xa8\xb7\xb8\x75\x66\xd4\x56\xc4\x4d\x6f\xb9\xe9\x87\xd4\x4c\xa3\xce\x50\xd4\xe6\x37\x8a\xc7\x0b\xcf\x63\xfe\xff\x44\x59\x9d\xcf\x5a\x5f\x78\x37\x3c\x21\x97\xc9\xd3\x7e\x9d\xd5\xdc\x79\xe0\x6d\x9d\xd6\xe2\x36\x99\xc3\x76\xf9\xa0\xe0\x36\x6d\xe6\x20\x97\x76\xea\x10\x91\xe1\x89\xc8\x44\x06\x10\xb8\x08\x63\xca\x84\xbb\x71\xb8\x08\x5c\xe4\xe5\x70\x11\xbd\x39\xe8\x9c\x22\x11\xf9\xa6\xd9\xd0\xf3\x7f\xfa\xde\xc6\x09\xea\x5b\x9e\x9c\x72\x1b\xfc\x7f\x47\x8b\x79\xcd\xb5\xbf\x2d\x2d\xfd\x4c\xff\xfe\xac\x4a\x64\xb2\x95\x99\xa2\x1c\x09\x85\x1f\xa6\x99\x74\xaa\x46\xdb\xb8\xb2\x6c\xfc\xf0\x74\x4b\x4e\xfc\xaa\xcd\x3b\xf2\x34\x82\x76\x95\x3d\x3e\x30\xb1\xd0\x3b\xf0\x3e\xfe\x94\xe1\x38\x99\x0f\xf5\xa5\xb3\x25\xfd\x21\xf5\x90\xc9\xa7\x44\x3e\x25\xf2\x29\x91\x4f\x89\x7a\xc8\xd4\x43\x9e\xc8\x5d\xa4\x1e\x32\x69\xa1\x48\x0b\x45\x5a\x28\xd2\x42\x91\x16\x8a\x7a\xc8\xe7\x9e\x33\x39\xac\x26\x94\xc3\x8a\x7a\xc8\xd4\x43\x1e\xa0\x1e\xb2\x21\xdb\xd7\x57\x45\x06\x78\xbf\x04\xe0\xbd\x25\xda\xff\xac\x93\x5c\x50\x37\xa8\x1b\xd4\x0d\xea\x06\x75\x83\xba\x41\xdd\xa0\x6e\x50\x37\xa8\x1b\xd4\x0d\xea\x06\x75\x83\xba\x41\xdd\x93\x46\xdd\x44\x96\x42\xf1\xa1\xf8\x50\x7c\x28\xfe\x74\x29\xfe\x79\x99\xe5\xf3\x07\xa3\x46\xf0\xc3\x62\x80\x8b\x96\xe2\x87\x1f\x7a\x9d\x91\xfc\xbb\x6a\x2a\xab\xa7\xeb\xf9\xb4\x47\xcd\x86\xab\x39\xfa\x6c\x6b\x85\x5a\x3b\x36\x1e\xc0\x02\x0f\x80\x03\x38\xe0\x00\xe0\xff\xf0\x7f\xf8\x3f\xfc\x1f\xfe\x0f\xff\x87\xff\xc3\xff\xe1\xff\xf0\x7f\xf8\x3f\xfc\x1f\xfe\x0f\xff\x9f\x08\xff\x27\x09\x86\x0d\x4d\x43\x55\xa0\x2a\x50\x15\xa8\x8a\x89\xab\x8a\x85\xcc\x9c\xd7\x0f\x27\x7a\x88\x95\xcc\xb6\x27\x87\xa6\xd5\x07\xa1\xff\x40\xd9\xed\x26\x9c\x58\x4f\xdf\x82\x23\xb0\x7f\x25\xb3\x1c\xf5\xeb\x4f\x3f\x3e\x7d\xfa\xb2\x77\xf5\x6d\xc3\xfd\xb5\x93\xd4\x5b\x13\x7a\x61\xfe\xff\x2a\xff\x3c\xf0\x78\xbb\x49\x14\x9e\xb1\x77\xc6\xc0\x80\x24\x1f\x18\x8b\x69\x68\x61\xda\xde\x27\x51\x68\x79\xf2\xe0\xa9\x99\xae\x53\xde\x00\x75\x53\xea\xaf\x40\x7e\x1b\xec\xca\xf5\x54\x26\x02\xd4\xa7\x38\xcf\xcf\xb1\xbf\xa7\xff\x88\xf1\xea\x6b\xc3\xcb\xce\x2b\xb0\x23\xbd\xea\x77\x13\xf3\x85\xf9\xc2\x7c\x61\xbe\x30\x5f\x98\x2f\xcc\x17\xe6\x0b\xf3\x85\xf9\xc2\x7c\x61\xbe\x30\x5f\x98\x2f\x9c\x0b\xce\x05\xe7\xd2\xf8\xd0\xe0\x5c\x6e\xdf\xb9\xb4\xec\x0e\x81\x55\xdf\x1e\xab\xae\xb6\x67\xec\xde\x90\x23\xd5\x90\xba\x28\x28\x04\x15\x85\x8a\x42\x45\xa1\xa2\xb7\x44\x45\x0f\x60\xd1\xe6\x2a\x61\x77\xbd\x74\xad\x83\xc0\xd1\x63\x74\x74\x32\x0d\x3e\x95\x23\x1e\x03\x89\x5d\x36\x78\x77\x22\x0e\x4e\x04\x27\x82\x13\xc1\x89\xe0\xc4\x61\x70\x62\x1b\x4f\x1c\x72\x50\x83\xd0\x4d\x88\xd0\x1d\x47\x74\x83\x4e\x0f\x46\x03\x75\x47\x49\x5d\x97\x97\x61\x17\xd7\x4d\x82\xd7\xb5\x01\xbb\x09\x94\x11\x26\x7a\xb0\x0e\x52\xcb\xe8\xc1\x28\x3d\x00\x42\xcd\xfc\x40\x38\x53\x60\x9e\x23\x20\x49\x73\x79\x3a\x81\x92\xa3\x95\x68\x6f\x7e\x3f\x28\xcc\x4e\x61\xf6\xae\x9e\x98\x57\x6f\x0e\xf7\xa6\xef\xcd\x22\x64\xf8\xb3\x7a\x73\xe8\xac\x1e\x5d\x57\xc6\x23\x9c\x56\x8f\xe5\xec\x23\xbb\x86\x1e\xb3\xcc\x6c\x1f\x7c\xcc\xcf\x85\x1b\x05\x81\x74\x8b\xe9\x1d\x03\x91\x68\x18\x88\xcc\xa5\xda\xda\xc9\x51\x5e\x35\x3c\x19\x9e\x0c\x4f\x86\x27\xc3\x93\xe1\xc9\xf0\x64\x78\x32\x3c\x19\x9e\x0c\x4f\x86\x27\xc3\x93\xe1\xc9\xf0\x64\x78\x32\x3c\x19\x9e\xec\x70\xce\x99\xaf\x99\x93\x6d\xd2\x51\x98\xa5\x19\x62\x2b\x04\x68\x13\xbf\xbc\x36\xf1\xc6\x0b\xde\x3a\x4d\x0a\xc3\x2b\xb6\xd3\xe9\xbf\xae\xdc\x08\x73\x5e\xa9\x14\x3d\x48\x6f\x93\x48\x38\xbc\x68\xe0\xf0\xea\x42\x0d\xb6\x47\xe5\xe8\xc0\xf8\xd5\xac\x5a\xf5\xca\xf7\x1f\xbd\x82\x5c\xa8\x7f\x39\x6e\x36\x17\xe2\xa3\xfa\xbb\xf8\xff\xb5\xe3\x87\x99\xe3\x87\xa9\x70\x83\x4d\x9a\xc9\xe4\x3e\xbf\xd3\x6e\x4e\x8a\x44\xe0\xff\x90\x62\x56\xb6\x67\xd6\x34\xd4\xe9\x43\x8f\x33\x07\x28\x9b\x5a\x8a\x81\x45\xd1\x68\xe9\xe9\xd6\xea\x76\xaa\x77\x37\x4e\x8b\x36\xe5\x4b\xa3\x4d\xaa\x56\x3c\x4e\x68\x96\xa8\x66\x64\x6f\x6e\x9e\x3a\xc6\x04\x86\x72\x8b\x9c\xa3\xea\x56\x6c\x1a\xb2\x37\x07\x7b\xb9\x38\x70\x5c\x49\x47\x77\x52\x47\xa7\xaf\x15\xa1\x2f\x84\xbe\x10\xfa\x32\xb9\xd0\x97\x1e\x63\x4c\x36\x56\xf5\xf7\x27\x86\x98\x10\xdf\xd8\xdc\xcb\xef\x87\x95\x0c\xd2\xc9\x77\x8c\x2f\x3e\xe8\x56\x7c\xd6\x37\xfd\x00\xc5\xa0\x77\x1f\xb3\x77\xef\x0b\x91\xd6\xa9\xa7\x1f\x8a\xd4\x80\x4a\xb1\x90\xcb\xc8\xe8\x8b\xc2\x31\x54\x51\x49\xb9\xd6\xd1\x17\x62\x23\x4d\x9c\xc9\x42\x8a\x30\x0a\xef\x43\xb9\x72\xf4\xe5\xce\xbf\x78\x2e\xfe\x2a\x63\x7f\x8c\x6f\x2c\x6f\x74\xde\xb5\xf8\xeb\xb5\xf4\x7c\x27\x93\xc1\x73\x1e\xdc\x52\x0f\x5d\x0a\xfd\xe0\x2e\x47\x95\x1a\xcf\x8b\x55\xa2\x66\xa0\xb1\x4c\xfc\xc8\x2b\xb9\x6e\x35\x19\x55\xed\x2e\xaf\xf9\x26\x55\x27\x59\x07\xfb\x8e\xfa\xcd\xa2\x41\xf9\x97\x2c\x6b\xcb\x1a\x5f\xfd\x82\x3e\xcf\xb5\x74\xc2\xc6\x73\x6c\xb8\x7f\xfa\x9c\x9e\xf4\x29\x8d\xca\x79\x3f\xd4\x0a\xb1\xc6\x81\x74\x52\x59\xba\xd8\xa7\x24\x8a\x9d\x95\xbe\xcb\x4f\x51\xe0\xbb\xcf\x77\xe6\x42\x1b\xfb\x58\x5c\xb0\xaa\x92\xab\x7a\x14\x5e\xcf\x7f\x9b\x8b\xda\x12\xd9\x93\xb1\x0c\x3d\x19\x66\x55\xf0\x80\x14\x51\x12\x7f\x77\x42\x75\xd9\x72\x1a\xf7\xb0\x74\x82\x22\x7c\xe8\xdb\x2b\xf3\xe3\x6f\xaf\xc4\xd2\x0f\x35\x48\x4b\xca\x2f\x73\x3c\x4f\x6b\xba\x07\x43\x90\xbd\xca\xb6\x98\xc3\xcf\xd2\xea\x97\x4c\xc8\xce\x5c\x7c\xf4\xf5\xbb\x59\x3b\xf5\x28\xd9\x6f\x9b\xf6\xb0\x26\x7a\xce\x44\x0c\xe9\x9e\x23\xca\xbe\x37\xdd\x3c\x73\x86\x1f\x8a\xb6\xf5\x73\xeb\x4e\xe8\x0c\x75\xc3\x54\x1f\xf4\x3d\xfa\x25\x56\x4e\xb2\x70\x56\x5b\xa1\x9d\x65\x47\x22\x93\x65\x94\xac\xd5\x15\x6f\xbc\x1a\x9f\x77\xda\xd3\x7e\x31\xf4\xab\x59\xbc\x57\xb1\xb9\x72\xbe\x7a\xe6\x5d\xdf\xab\x62\x7f\x74\x48\x84\x8e\xc6\x2a\xef\x60\x2a\xb3\x82\xa2\x16\x41\x0f\xf3\xda\xad\x2a\x74\x79\xc1\x5f\x2b\x54\xb2\xfd\x65\x73\x61\x42\x88\xb5\x82\xaf\xf7\xa6\x33\xd3\x86\x99\xb8\xcf\x1f\xaf\xed\xc7\x2f\x7d\x27\x66\xbf\x3b\xee\x0f\x35\x27\x0a\x3d\xf5\x29\x27\x08\xa2\x5f\xfa\x43\x3b\x17\xce\x44\xc2\xe4\x6f\xf1\xf6\x41\x8a\x16\x2c\xca\x23\xbd\x13\xb3\x3f\xa2\x44\xd6\x0e\x2b\x5c\x27\x75\x1d\x4f\xb5\x3e\xbf\x3e\x7a\x74\x32\xc7\x4b\x4d\x77\xbf\x77\xc0\x65\x79\x8c\xa6\xc7\x2d\xde\x7d\x58\x27\x30\xa9\xbf\xc6\x7c\x0c\x13\x44\x6e\xb3\x9b\xb1\x69\xba\x1f\xeb\xc3\xb5\xce\xf6\x2b\x8f\x62\x0c\xdf\x05\xa4\x67\x77\x72\x7f\xaf\xbf\xf2\xdf\xed\xf3\xfc\xb5\x4c\x56\xf2\xe8\xa7\xd2\x2c\x71\x32\xb9\xf2\xdd\xfb\xbd\xcf\xbf\xac\x15\x47\x5c\xab\xbf\x3d\x51\xaa\x74\xe0\x65\x7d\xaa\xe5\xce\x62\x05\x62\xd9\x0a\xc4\x86\xa1\xc8\x26\x92\xd3\x57\x61\x77\x4b\xeb\x5c\xd4\x0b\x00\xee\x9d\x22\x45\x00\x31\xe8\xcd\x06\xfd\x21\x35\x13\xb0\x33\x44\xba\xf9\x8d\xe2\x59\xc3\x34\x1d\x9e\x11\x1c\x55\xea\xf9\x0c\x98\x7e\x7b\xba\xc6\x95\x37\xa2\x6b\xf7\xba\xf3\x52\xd8\x3a\x57\xc6\xc0\x32\x43\xc6\xc0\xde\xb2\x81\x3d\x17\xc9\x5c\x33\x14\x00\x67\xc6\x86\x33\x13\x19\x76\x40\x34\x0c\x40\xb7\xd0\xd5\x83\x68\x40\x34\x2f\x19\xd1\xe8\xbd\x55\xe7\x16\xf7\xc8\xf7\x1d\x87\x9e\xff\xd3\xf7\x36\x4e\x50\xdf\x35\xe6\x94\x99\x04\xf2\xe7\x6b\x5e\x0b\x1a\x78\x5b\x86\x1b\xcc\xf4\x31\x66\x55\x3e\x98\xad\x04\x1f\xe5\xa8\x29\xfc\x30\xcd\xa4\x53\x5d\x01\x1b\x17\xb0\x8d\x1f\x9e\x78\xa9\x90\x5f\xbb\x13\x95\x5a\xd6\x47\xbb\x6a\x5b\x1f\x98\x89\xe8\x6d\x8d\x1f\x7f\xca\x70\x9c\x44\x95\xfa\x1a\x5a\x97\xad\x92\x5a\xd7\x64\xab\x22\x5b\x15\xd9\xaa\xc8\x56\x45\xad\x6b\x6a\x5d\x4f\xe4\x2e\x52\xeb\x9a\xa4\x5b\x24\xdd\x22\xe9\x16\x49\xb7\x48\xba\x45\xad\xeb\x73\xcf\x99\x0c\x61\x13\xca\x10\x46\xad\x6b\x6a\x5d\x0f\x55\xeb\xda\xd0\xef\x6e\x2a\x5e\x03\xc5\x5f\x1e\x14\xdf\xb3\xf7\x7f\xd6\x69\x2f\x38\x1c\x1c\x0e\x0e\x07\x87\x83\xc3\xc1\xe1\xe0\xf0\xce\xfa\x54\x70\x38\x38\x1c\x1c\x0e\x0e\x07\x87\x83\xc3\xc1\xe1\xe0\xf0\x51\x71\x38\x11\xaa\x90\x7e\x48\x3f\xa4\x1f\xd2\x7f\x03\xa4\xff\xbc\x94\xfe\xf9\x13\x52\xa3\xfc\x61\x31\xd2\x45\x4b\xf1\xc3\x0f\xbd\x4e\x69\xff\x5d\x35\xaf\xd5\x73\xf7\x7c\x0e\xa4\xa6\xc6\xd5\x84\x7d\xb6\xb5\x5c\xad\x1d\x1b\x57\x60\x9d\x2b\xc0\x13\x1c\xf0\x04\x38\x02\x1c\x01\x8e\x00\x47\x80\x23\xc0\x11\xe0\x08\x70\x04\x38\x02\x1c\x01\x8e\x00\x47\x80\x23\xc0\x11\x4c\xcd\x11\x90\x74\x03\xa5\x81\xd2\x40\x69\x0c\x38\x9d\x44\x69\xdc\xa2\xd2\x70\x65\x92\x7f\xa5\x4c\x35\xc7\xf5\xa3\x87\x13\x65\xc5\x4a\x57\x64\x59\x46\xc9\xba\xbc\xcd\x8e\x30\xc0\xf4\x90\x18\x18\x28\xf5\xde\x04\xb3\xfe\xd5\xef\xc5\x11\x15\xb0\x92\xd9\xfb\xda\xa7\x1f\x9f\x3e\xfd\xd7\xd6\x85\xb7\x8d\xff\x97\x27\xd8\x0b\xfd\xff\x57\xf9\xe7\xd1\x67\xbb\x90\x77\x67\x3c\xe3\x5b\x4b\x21\xf3\x7e\xf3\x80\x5f\xfd\x80\x9f\xe8\xbc\x76\x1e\xf4\x5c\x7c\x3d\x3e\x7d\xfa\xb2\x77\x2f\x2c\x7c\xe6\x8b\x93\xd4\x7b\x78\x6c\x79\xf4\xeb\x3f\xf3\x57\x6a\x06\x56\xac\x19\x4f\x7c\x29\x0c\x28\x4b\xf2\x09\x63\xb1\x44\x2b\x05\x75\x75\xf8\xaf\xe6\xf0\x5f\xcc\xe1\xd1\xc5\xa3\xbc\x41\xea\x6e\x35\xbc\x42\xc7\x6f\x53\x07\xc5\xf0\x8f\xa5\x5a\xc5\x53\xe2\x29\xf1\x94\x78\xca\x5b\xf2\x94\x07\x44\xe5\x90\xd5\x3d\x07\xd1\x95\xc7\x7c\xe5\x64\x1a\x7c\xaa\xd9\x3b\xa6\xf6\x06\x2d\xa3\x8c\xe0\x43\xf0\x21\xf8\x10\x7c\x08\xbe\x5e\x04\x5f\x9b\xe1\x1b\xb8\x46\x37\xa6\x66\x2a\xa6\xe6\xb8\xaa\x19\x74\x7a\x30\x9a\xb0\x39\x6a\x6c\xba\xbc\x0c\xbb\xda\x66\x12\xde\xa6\x4d\xdc\x58\x5c\x60\x65\x8b\x28\x96\x75\x56\xda\x20\x52\x7f\xc0\xb3\xb8\x0a\x2d\x91\xfe\x57\x27\x03\x6a\x20\xa7\x0d\x61\xff\xc7\xe0\xd9\xe9\x1b\x01\xa2\xf4\x00\x69\x35\x13\x0b\xe1\x4c\x13\xaa\x8e\xc7\x3c\xcd\x75\xeb\x83\x7a\x8e\x57\x94\xf1\xbc\x17\x90\x62\x59\x14\xcb\xea\xfd\x51\x1a\xa8\x8c\x63\x87\xa7\xfb\xe6\xd0\xe9\x3e\xba\xae\x8c\x6d\x3a\xdf\x1e\x8b\x94\x45\xd3\x1a\x26\xcd\x5a\xba\x7d\xa0\x34\x3f\x17\x6e\x14\x04\xd2\x2d\xe6\xb0\x0c\x9a\x67\x0d\x9a\xe6\x1a\x36\x0d\x9a\xe5\x55\x45\x1a\x22\x0d\x91\x86\x48\x43\xa4\x21\xd2\x10\x69\x88\x34\x44\x1a\x22\x0d\x91\x86\x48\x43\xa4\x21\xd2\x10\x69\x88\x34\x44\x1a\x22\x0d\x4f\xdb\x1c\xf1\x35\x73\xb2\x4d\x3a\x0a\xfb\x34\x43\x6c\x85\x0a\xa7\xc4\x41\xaf\xcd\x1b\xf6\x82\x33\xbf\xf4\xbf\x51\x5b\xff\x75\xda\x16\xcb\xe3\x7b\x71\xce\x4b\x1c\xa9\x87\xbc\x6d\xae\x07\xfd\x3e\x8b\x7e\xab\x2b\x38\xd6\x36\x99\xa3\xc3\xd1\x57\xb3\x56\xd4\xeb\xcd\x7f\xf4\xba\x6d\xa1\xfe\xe5\xb8\xd9\x5c\x88\x8f\xea\xef\xe2\xff\xd7\x8e\x1f\x66\x8e\x1f\xa6\xc2\x0d\x36\x69\x26\x93\xfb\xfc\x89\x70\x73\x3e\x23\x02\xff\x87\x14\xb3\x32\x75\xe4\xac\x69\x80\xd1\x87\x1e\x67\xe4\x2d\x9b\x5a\xe2\xf8\x45\xd1\x68\xe9\xe9\xd6\xea\x76\xaa\x97\x3d\x4e\x8b\x36\xe5\x0b\x92\x4d\xaa\xd6\x19\x4e\x68\x16\x86\x66\x3c\x6d\x6e\x9e\x3a\xc6\x04\x06\xd0\x29\xa8\x44\xd5\x2f\x4d\x69\x04\xdd\x1c\xec\x46\xe3\xc0\x71\x25\x3d\xe9\x75\x3d\xa9\xbe\x88\x44\xdf\x10\x7d\x43\xf4\x0d\xd1\x37\x43\x44\xb3\x6c\x26\x35\x04\x9d\x18\xcc\x42\xd4\x67\x67\x01\x2c\x43\x8e\x3b\x1d\x83\x92\x0f\xba\x51\x9f\xf5\xc3\x71\x80\x97\x30\xae\x8c\x39\xae\xf4\x05\x63\xeb\x7c\xd5\x0f\x45\x6a\x90\xa8\x58\xc8\x65\x64\x44\x49\x61\x33\xaa\xf8\xa7\x5c\x20\xe9\x0b\xb1\x91\x26\xa2\x65\x21\x45\x18\x85\xf7\xa1\x5c\x39\xfa\x72\xe7\x5f\x3c\x17\x7f\x95\x51\x46\xc6\x6c\x96\x37\x3a\xef\x82\xfc\xf5\x5a\x7a\xbe\x93\xc9\xe0\x39\x0f\xa3\xa9\x07\x49\x85\x7e\x70\x97\x43\x51\x2d\x02\xc4\x2a\x51\x93\xe7\x58\x26\x7e\xe4\x95\x04\xb9\x9a\x47\xab\x76\x97\xd7\x7c\x93\xaa\x93\xac\x2b\x04\x47\xfd\x66\xd1\xa0\xfc\x4b\x96\xb5\xa5\x9c\xaf\x7e\x41\x9f\xe7\x5a\x3a\x61\xe3\x39\x36\xdc\x3f\x7d\x4e\x4f\xfa\x94\x46\x25\xca\x1f\x6a\xe5\x3a\xe2\x40\x3a\xa9\x2c\xad\xef\x53\x12\xc5\xce\x4a\xdf\xe5\xa7\x28\xf0\xdd\xe7\x3b\x73\xa1\x8d\xe7\x2c\x2e\x58\x55\xef\x43\x3d\x0a\xaf\xe7\xbf\xcd\x45\x0d\x0b\x78\x32\x96\xa1\x27\xc3\xac\x0a\x53\x90\x22\x4a\xe2\xef\x4e\xa8\x2e\x5b\xce\xf5\x1e\x96\x4e\x50\x04\x2a\x7d\x7b\x65\x7e\xfc\xed\x95\x58\xfa\xa1\x46\x72\x49\xf9\x65\x8e\xe7\x69\x21\xf8\x60\x58\xb5\x57\x79\x1d\x73\xf8\x59\x5a\xfd\x92\x09\x0e\x9a\x8b\x8f\xbe\x7e\x37\x6b\xa7\x1e\x25\xfb\x6d\xd3\xc6\xd7\xc4\xe9\x99\xd8\x24\xdd\x73\x44\xd9\xf7\xa6\x9b\x67\xce\xf0\x43\xd1\xb6\x7e\x6e\xdd\x09\x9d\xa1\x6e\x98\xea\x83\xbe\x47\xbf\xc4\xca\x49\x16\xce\x6a\x2b\xd8\xb4\xec\x48\x64\xb2\x8c\x92\xb5\xba\xe2\x8d\x57\xe3\xf3\x4e\x7b\xda\x2f\x86\x7e\x35\x8b\xf7\x2a\x36\x57\xce\x57\xcf\xbc\xeb\x7b\x55\x94\x91\x0e\xbe\xd0\x71\x5f\xe5\x1d\x4c\x75\x56\x36\xfd\xd3\x22\xbc\x62\x5e\xbb\x55\x85\x98\x2f\x48\x6e\x85\x87\xb6\xbf\x6c\x2e\x4c\x34\xb4\x96\xfd\xf5\xde\x74\x66\xda\x30\x13\xf7\xf9\xe3\xb5\xfd\xf8\xa5\xef\xc4\xec\x77\xc7\xfd\xa1\xe6\x56\xa1\xa7\x3e\xe5\x04\x41\xf4\x4b\x7f\x68\xe7\xc2\x99\x98\x9b\xfc\x2d\xde\x3e\x48\xd1\x82\x45\x79\xa4\x77\x62\xf6\x47\x94\xc8\xda\x61\x85\xeb\xa4\xae\xe3\xa9\xd6\xe7\xd7\x47\x8f\x4e\xe6\x78\xa9\xe9\xee\xf7\x0e\xb8\x2c\x8f\xd1\xf4\xb8\xc5\xbb\x0f\xeb\x04\x96\x13\xd7\x38\x96\x61\xe2\xe1\x6d\xb6\x40\x53\x5a\x36\xc4\xda\xfa\xb5\xae\x1a\x2a\x63\x63\x5c\x63\x27\x10\x6b\x77\x91\x70\xaf\x4f\xe2\xdf\xed\xeb\x85\xb5\x4c\x56\xf2\xe8\xa7\xd2\x2c\x71\x32\xb9\xf2\xdd\xfb\xbd\xcf\xbf\xc8\x95\x8b\x6e\xff\xd8\x0b\x97\x4e\x81\xd9\x81\x97\xfe\xa9\x96\x10\x8d\x95\x8c\x65\x2b\x19\x1b\x86\xb4\x49\x20\xa7\xab\x2b\x8a\x4d\x2c\x72\xe0\x9c\x84\xf4\xc7\x4f\xda\xbe\x14\xf5\xd3\x0c\x0f\x78\x70\xe2\x38\x89\x7e\x3a\x41\x15\x27\x70\x92\xe0\x2a\x7e\xad\xb8\x65\xc8\xae\x0b\x47\xee\x0b\x64\xd7\x63\x71\xcb\x6c\x1f\xc3\xaf\xee\x87\x6f\x6b\x30\x41\xb7\x4c\x53\xb7\xf4\x3c\xf2\xbd\xf8\x19\x66\xdb\x04\x73\x84\x4a\x38\x4c\x3c\x06\x9b\x78\xa4\x06\xdd\x9c\x11\x9e\x68\x7e\x83\x19\xc7\xc0\x81\x8a\x39\x63\xbb\x91\x41\x98\x38\xb6\xbb\x33\xa6\xf9\xbc\x72\x63\x4d\xf2\x77\xde\xba\x9b\x9d\xe2\x43\xed\xa0\x76\x2c\xb4\x58\x68\x89\x0b\x04\x55\xb7\xa3\x13\xaa\xca\x4e\x55\x35\x91\x91\x10\x61\xc5\xd0\x77\xd3\x63\x09\xc2\x0a\x6e\xd4\x3b\x37\xd2\x3b\xd3\xaf\xaf\x30\x97\xe7\x71\x09\x3d\xff\xa7\xef\x6d\x9c\xa0\xbe\x0b\xdf\x29\x33\x33\xb5\xde\xb6\x79\x2d\x58\xf2\x6d\x19\x66\x39\xd3\x47\x9d\x55\x19\xf7\xb6\x52\xa8\x95\xc3\x9c\xf0\xc3\x34\x93\x4e\x75\xcd\x6c\x5c\x0b\x37\x7e\xf8\x36\xea\xd5\xfd\x3a\x77\x82\xf1\x67\x3d\xe5\xb7\x6d\x31\x78\x3a\x91\xc4\xc7\x9f\x32\x1c\xa7\xd7\xd7\x17\x73\x72\x39\xd1\xfb\xed\xf9\xc9\x1f\x4a\xfe\x50\xf2\x87\x92\x3f\xf4\x96\xf2\x87\xb6\xa7\x0f\x1d\xc6\xc2\x0e\x92\x38\xf4\x48\xde\xd0\x8e\x5a\xfa\x82\x53\xe4\x0c\x92\x0d\xf5\x48\x32\xd4\x8e\x5a\xba\xbb\xb7\x8e\x34\xa8\xa4\x41\x25\x0d\x2a\x69\x50\x49\x83\x3a\x48\x1a\xd4\x96\x2c\xa8\xb7\x92\xe9\xad\xfb\x73\x26\x67\xeb\x84\x72\xb6\x1e\x4d\xd9\x3a\xd0\x24\x66\xb4\x64\xad\xc7\x72\xb5\x0e\x34\x15\xb7\x31\x4b\x6b\x4b\x92\xd6\x81\xf8\xfa\x79\x59\x23\xf3\x47\xa5\xc6\xd6\xc3\x62\x5c\x88\x96\xe2\x87\x1f\x1e\x70\xf1\x9d\x30\xf6\xbb\x6a\x5e\xa8\xe7\xbe\xf9\x1c\x42\x4d\x2d\xab\x09\xef\x6c\x6b\xb9\x57\x3b\x36\x84\x7e\x22\x84\x1e\x3a\x7f\x80\xce\x43\xe6\x21\xf3\x90\x79\xc8\x3c\x64\x1e\x32\x6f\x1b\xd3\x85\xcc\x43\xe6\x21\xf3\x90\x79\xc8\x3c\x64\x1e\x32\x0f\x99\x27\xe8\x16\xb5\x80\x5a\x40\x2d\xa0\x16\xa6\xa9\x16\xe4\x3f\x99\x0c\x53\xcd\x47\x4f\x54\x04\x2b\x9d\x4e\x76\x19\x25\xeb\xf2\xee\x3a\xc2\xe0\xc7\x43\xf0\x7d\xa0\x7d\x6f\x13\xdc\x72\x57\xdd\x82\x23\x94\x7d\x25\xb3\x8f\xe5\x67\x1f\x9f\x3e\xfd\xd7\xd6\x45\xb7\x8d\xa4\x97\x27\xd8\x0b\x47\xff\x57\xf9\x67\xdb\xe3\x5c\x08\xb2\x33\x1e\xeb\xad\xb5\x82\x79\x93\x79\xa6\xaf\x7c\xa6\x4f\x34\x48\x5b\xcf\x76\x6e\x8f\x1e\x9f\x3e\x7d\xd9\xbb\x0f\x16\x3e\xe6\xc5\x49\xea\x6d\x27\x23\x3f\xed\x9e\x23\xd7\xea\xf2\x9c\xbc\xb1\xca\xc0\xa2\x24\x9f\xfd\x15\xcb\x94\x42\xf6\x7e\xd0\x87\xfb\x2a\xad\x4e\x03\x32\x15\xb1\x7a\xf6\x4b\xa1\xee\xcd\xde\x5b\x51\xde\x92\x3f\xa2\xe4\x31\x08\xca\xb2\x7d\x63\x27\xf4\xa9\x5a\x57\xee\x77\x2d\x4f\xb5\xbf\x37\xe3\x88\x4f\xbd\x7a\xa3\x53\x6d\x70\xde\xb3\xa8\x7b\x2f\x07\xd6\x14\x6b\x8a\x35\xc5\x9a\x62\x4d\xb1\xa6\x58\x53\xac\x29\xd6\x14\x6b\x8a\x35\xc5\x9a\x62\x4d\xb1\xa6\x48\x47\xa4\x23\xd2\xf1\xdc\x49\x0c\xd2\xf1\xc6\xa5\x63\xc9\xad\x65\x1c\x44\xcf\x6b\x5d\xd2\xb3\x13\x70\x5d\x1e\x0f\x72\x6d\x0d\xb9\x2e\xef\xc9\x04\xd0\x75\x79\xae\x37\xca\xae\xf7\xde\x0f\xe0\x35\xf0\x1a\x78\x0d\xbc\x06\x5e\x03\xaf\x81\xd7\xc0\x6b\xe0\x35\xf0\x1a\x78\x0d\xbc\x06\x5e\x03\xaf\x81\xd7\xc0\x6b\xe0\x35\xf0\xfa\xbc\xa9\xf8\x8b\x81\xd7\x3a\xdd\x56\x5a\xa7\x96\xd7\xa0\xeb\x4f\xe6\x68\x70\x6b\x5b\xb8\x75\x7e\x43\xec\x87\xd6\xf9\x89\xde\x26\xb1\xde\x79\x2d\xc0\xd5\xe0\x6a\x70\x35\xb8\x1a\x5c\x0d\xae\x06\x57\x83\xab\xc1\xd5\xe0\x6a\x70\x35\xb8\x1a\x5c\x0d\xae\x06\x57\x83\xab\xc1\xd5\xe0\xea\xf3\xa6\xe2\x2f\x06\x57\x87\x25\xc2\x34\xc5\x21\xf4\xbf\xff\x43\xea\x90\x9b\x07\xd9\x25\xbb\xf6\xf6\x6f\x4e\x13\x26\xad\x41\xe2\xf6\xf7\xab\x75\x50\x02\x95\x82\x4a\x41\xa5\xa0\xd2\x9b\x46\xa5\x07\x58\x69\xd3\x28\x5d\x69\xb8\x6e\xbb\xd6\x41\x88\xe9\x31\x64\x3a\x99\x06\x9f\x0a\x17\x8f\xd1\xc5\x2e\x1b\xbc\x3b\x3b\x87\x31\xc2\x18\x61\x8c\x30\x46\x18\xe3\x30\x8c\xb1\x0d\x32\x0e\x39\xa8\x81\xed\x26\x84\xed\x8e\x73\xbb\x41\xa7\x07\xa3\xd1\xbb\xa3\xf8\xae\xcb\xcb\xb0\xcb\xf0\x26\x01\xf1\xda\x28\x5e\xf3\x85\xd9\xe1\x3a\xd6\x04\x17\x92\xcc\xb5\x2d\xc0\x30\x4a\x0f\x40\x52\x33\x5b\x10\xce\x34\x78\xe8\x58\xb8\xd2\x5c\xa5\x2e\x81\x65\xf1\xca\x2d\x22\xef\x79\xef\x8d\xdb\xf9\xcf\x9d\x5a\x31\x3d\xbe\x3b\xed\xef\x4d\x0f\x33\x89\x7c\x82\x74\x27\xfc\xd0\x33\x05\x61\xcd\x04\x61\x0b\x65\x14\xcb\x19\x35\x25\x5f\x48\x11\xab\x67\x5e\xad\x85\xe6\xe2\x31\x14\x7e\x68\x40\x62\x94\x88\x4d\x58\xb2\x48\x4f\x78\xc9\xf3\x97\x4d\x28\x3c\x3f\x91\x6a\x3c\x90\x25\xe0\xd2\x43\xa8\x9a\xce\xe6\x84\xaf\xe8\xbd\x72\x9e\x22\x96\x9b\x44\xaf\x7d\xe2\x24\x72\x65\x9a\xe6\xb3\x8c\xda\x12\x6e\x2e\xfe\xd6\xdf\xa8\xd7\x94\x7a\xa2\xa8\xa6\x18\x8f\x41\xf0\x56\xcf\x2a\xbd\xe4\x59\x24\x9b\x50\xa4\x99\xa3\xfa\xf6\x62\x2a\x9d\x1f\xae\x16\xe2\x54\x3d\x00\xe6\x5c\xa7\xde\xe9\x1e\xe8\x70\xdf\x1c\xee\x70\xdf\x9b\xe5\xca\x68\x27\xf7\xe6\xd0\xc9\x3d\xba\xae\x8c\xc7\x3b\xbb\xfe\xc6\x2a\x3d\x28\xd8\x37\x56\x99\x55\x6a\xfb\x68\x65\x7e\x2e\xdc\x28\x08\xa4\x5b\xcc\x0e\x19\xb9\x0e\x8c\x5c\xe6\x8a\xed\x8d\x5c\xef\xcb\x2b\x88\x74\x43\xba\x21\xdd\x90\x6e\x48\x37\xa4\x1b\xd2\x0d\xe9\x86\x74\x43\xba\x21\xdd\x90\x6e\x48\x37\xa4\x1b\xd2\x0d\xe9\x86\x74\x43\xba\x1d\x2b\x32\xfa\x35\x73\xb2\x4d\x3a\x0a\xc8\x34\x43\x6c\x05\x04\x2d\x84\x9a\xd7\x66\xf8\x78\xc1\x7b\xb4\xf3\xe1\x5d\x9d\x91\x7e\xd9\xd4\x63\x22\x52\x37\x8a\xe5\x9d\x48\x37\xae\xee\x85\x75\xe7\x26\x9d\xb5\x79\x75\xe3\x24\xd2\xd3\x89\xfd\xe6\x94\x5b\x49\x76\xdb\x10\x3b\x59\x6d\x0b\xc5\x8e\x6c\xeb\xad\x69\xfd\xef\xdb\xd3\x7f\x75\xb3\xe3\xc6\xfc\xf7\x7f\x4e\xdc\x78\xa3\x87\xec\x6d\x2e\x09\xa3\x3f\xc0\xe8\xd5\xf5\x1a\x7a\x33\xcc\xd1\x41\xf3\xab\x59\xd1\xea\x55\xf1\x3f\x7a\x75\xb9\x50\xff\x72\xdc\x6c\x2e\xc4\x47\xf5\x77\xf1\xff\x6b\xc7\x0f\x33\xc7\x0f\x53\xe1\x06\x9b\x34\x93\xc9\x7d\x7e\xdf\xdd\x9c\x22\x89\xc0\xff\x21\xc5\xac\x6c\xd1\xac\x69\x18\xd4\x87\x1e\x67\x7e\x50\x36\xb5\x94\x06\x8b\xa2\xd1\xd2\xd3\xad\xd5\xed\x54\x2f\x74\x9c\x16\x6d\xca\x97\x4d\x9b\x54\xad\x86\x9c\xd0\x2c\x5f\xcd\xa8\xdf\xdc\x3c\x75\x8c\x09\x0c\xf3\xf6\xb9\xca\x95\xb4\x51\x55\xc6\x9b\x83\x3d\x60\x1c\x38\xae\xa4\x13\x3c\xa7\x13\xd4\x97\x8c\x18\x9b\x4e\xc1\x01\x31\x36\xc4\xd8\x8c\x1d\x63\xd3\x63\x14\xcb\xc6\xc6\x91\xe1\xc4\x20\x16\x42\x2e\xb7\x7f\xe3\xb4\xc0\x95\x81\x86\x83\x8e\x01\xc9\x07\xdd\x98\xcf\xfa\x11\x38\xc0\x49\x18\x00\xc6\x1c\x00\xfa\x82\xb0\x75\xae\xea\x87\x22\x35\x28\x54\x2c\xe4\x32\x32\x82\xa4\xb0\x18\x55\xdc\x53\x2e\x8e\xf4\x85\xd8\x48\x13\xc9\xb2\x90\x22\x8c\xc2\xfb\x50\xae\x1c\x7d\xb9\xf3\x2f\x9e\x8b\xbf\xca\xe8\x22\x63\x34\xcb\x1b\x9d\x77\x34\xfe\x7a\x2d\x3d\xdf\xc9\x64\xf0\x9c\x87\xcf\xd4\x83\xa3\x42\x3f\xb8\xcb\x61\xa8\x16\x00\x62\x95\xa8\x99\x6b\x2c\x13\x3f\xf2\x4a\x72\x5c\x4d\x62\x55\xbb\xcb\x6b\xbe\x49\xd5\x49\xd6\xd5\x81\xa3\x7e\xb3\x68\x50\xfe\x25\xcb\xda\xe2\xc8\x57\xbf\xa0\xcf\x73\x2d\x9d\xb0\xf1\x1c\x1b\xee\x9f\x3e\xa7\x27\x7d\x4a\xa3\x92\xe4\x0f\x32\x4e\xa4\xba\xb8\xde\x5b\x11\x07\xd2\x49\x65\x69\x7b\x9f\x92\x28\x76\x56\xfa\x2e\x3f\x45\x81\xef\x3e\xdf\x99\x0b\x6d\xfc\x66\x71\xc1\xbc\xf2\x00\xea\x51\x78\x3d\xff\x6d\x2e\x6a\x0b\x6d\x4f\xc6\x32\xf4\x64\x98\x55\xe1\x09\x52\x44\x49\xfc\xdd\x09\xd5\x65\xcb\x41\xdf\xc3\xd2\x09\x8a\x00\xa5\x6f\xaf\xcc\x8f\xbf\xbd\x12\x4b\x3f\xd4\x8c\x2e\x29\xbf\xcc\xf1\x3c\x2d\x02\x1f\x0c\xa3\xf6\x2a\x9f\x63\x0e\x3f\x4b\xab\x5f\x32\x41\x41\x73\xf1\xd1\xd7\xef\x66\xed\xd4\xa3\x64\xbf\x6d\xda\xf4\x9a\xf8\x3c\x13\x93\xa4\x7b\x8e\x28\xfb\xde\x74\xf3\xcc\x19\x7e\x28\xda\xd6\xcf\xad\x3b\xa1\x33\xd4\x0d\x53\x7d\xd0\xf7\xe8\x97\x58\x39\xc9\xc2\x59\x6d\x85\x92\x96\x1d\x89\x4c\x96\x51\xb2\x56\x57\xbc\xf1\x6a\x7c\xde\x69\x4f\xfb\xc5\xd0\xaf\x66\xf1\x5e\xc5\xe6\xca\xf9\xea\x99\x77\x7d\xaf\x8a\x2e\xd2\x41\x17\x3a\xde\xab\xbc\x83\xa9\xcc\x0a\x40\x5b\x84\x55\xcc\x6b\xb7\xaa\x10\xf2\x05\xda\xad\x80\xcb\xf6\x97\xcd\x85\x09\x60\xd6\x92\xbf\xde\x9b\xce\x4c\x1b\x66\xe2\x3e\x7f\xbc\xb6\x1f\xbf\xf4\x9d\x98\xfd\xee\xb8\x3f\xd4\x44\x29\xf4\xd4\xa7\x9c\x20\x88\x7e\xe9\x0f\xed\x5c\x38\x13\x6b\x93\xbf\xc5\xdb\x07\x29\x5a\xb0\x28\x8f\xf4\x4e\xcc\xfe\x88\x12\x59\x3b\xac\x70\x9d\xd4\x75\x3c\xd5\xfa\xfc\xfa\xe8\xd1\xc9\x1c\x2f\x35\xdd\xfd\xde\x01\x97\xe5\x31\x9a\x1e\xb7\x78\xf7\x61\x9d\xc0\xbc\xff\x1a\xb7\x32\x4c\x08\xbb\xcd\xf6\xc7\xc2\x35\x40\xac\xa5\x5e\xeb\x12\xa0\x32\x35\x46\x25\x5e\x04\x8a\x76\x67\xfc\xf7\xfa\x4b\xff\xdd\x3e\xf9\x5f\xcb\x64\x25\x8f\x7e\x2a\xcd\x12\x27\x93\x2b\xdf\xbd\xdf\xfb\xfc\x0b\x5c\x86\xe8\xd6\xdf\x04\x94\x3a\xf0\x06\x3f\xd5\x72\x81\xb1\x2c\xb1\x6c\x59\x62\xc3\xf8\x64\x21\xfa\xa9\x47\x4d\x58\xd5\xf1\xf7\x5a\xce\x43\x9b\xf0\xfc\xb1\x6c\x38\xc9\xba\xeb\xb6\x43\x73\x63\xf0\xad\x32\xf8\x0f\xa9\x99\xac\x9d\x21\xf2\xcd\x6f\x14\x0f\x1d\x36\xab\x53\xa5\x9f\xcf\x9d\xe9\xdc\x6f\xc5\xf8\xf2\xb6\xf4\xeb\x7e\x77\x5e\x18\x5b\x27\xdb\x18\x60\x66\xda\x18\xe0\x01\x96\x01\x56\x1a\xe0\x73\xe9\xcf\x75\x83\x06\x1c\xc8\x26\x0e\x34\x91\x01\x0a\x1a\xc4\x18\x75\x43\xc3\x00\x34\x08\x1a\x04\x0d\x3a\x46\x83\x64\x1c\x44\xcf\x6b\xed\xe0\x3b\x29\xa1\x52\x1e\xcf\xe6\x45\x6d\xe3\x87\x5f\x42\x0d\x95\xfd\xbb\x43\x3e\x27\xf2\x39\x91\xcf\x89\x7c\x4e\xe4\x73\x22\x9f\x13\xf9\x9c\x76\x1b\x4c\x3e\x27\xf2\x39\x91\xcf\x89\x7c\x4e\xe4\x73\x22\x9f\x13\xf9\x9c\xc8\xe7\xb4\xf5\xc0\x90\xcf\x89\x7c\x4e\xb7\x95\xcf\xa9\x91\xe2\x97\xcc\xe8\x46\xab\xa8\xec\x31\xb1\xce\xcb\xa8\x4c\x82\x89\x8e\x85\x2c\x8f\xd7\x51\x39\x1b\x5a\xda\x15\xe2\x53\x9d\x7e\xeb\xbb\x83\x3f\xc5\x9f\x5e\xf6\xe4\x8c\x18\xe4\x73\xda\xd9\x8d\x56\x4b\xe5\x94\xd3\x9b\x6a\x31\x95\xcb\x87\xac\xcb\xaa\xa9\x30\x80\x75\x54\x4e\x05\xff\x86\x7f\xc3\xbf\xe1\xdf\xf0\x6f\xf8\x37\xfc\x1b\xfe\x0d\xff\x86\x7f\xc3\xbf\xe1\xdf\xf0\x6f\xf8\x37\xfc\x1b\xfe\x0d\xff\xf6\xa2\xfd\x9b\xcd\x19\xb5\x86\xa8\xa7\x72\x85\x8a\xa3\xa0\x0a\x1b\x70\x26\xbe\x01\xe7\xfa\x8a\x2a\x70\xfa\x2b\xf2\xaf\xf4\xc2\xe6\xa9\xa9\x42\x4d\x95\xa9\x38\xcb\x5e\x53\xec\x5c\x31\xb4\x5f\x50\x55\x85\x8e\xf0\xba\xd4\x3a\x84\xdc\xe4\xd7\x9a\x90\x1b\x42\x6e\x76\x9e\x1c\xcb\x43\x6e\x26\x9a\x58\xa7\xf7\x90\x16\xe2\x30\x0f\x8f\x0a\xc7\x8b\xab\xf4\x3a\x28\x50\x5d\xe5\xe5\x8d\x02\x7d\x21\x59\xaa\xab\x50\x5d\x85\xea\x2a\x54\x57\xa1\xba\x0a\xd5\x55\xa8\xae\x32\xa9\xea\x2a\xd7\x18\xa0\xab\xca\xab\x9c\xb6\x36\x20\xaf\xa6\x0d\x79\x35\xa7\x43\xa7\x48\xa9\x39\xcd\x95\x89\x0d\x43\x94\x8d\x04\xa8\xdf\x9c\x9a\xe3\xe9\xff\x73\x92\x6a\x36\x9c\x25\x59\x35\x91\xfa\x87\xa5\xfe\x43\x12\x05\x81\x9a\x97\x57\x76\xff\xa4\xdd\xe3\xc5\xaf\x99\x50\x42\x08\xa6\xe8\x66\x27\xf9\x97\xe2\x6e\xd8\x3e\x81\x38\x3c\x08\x94\xcd\xd8\x1b\x0c\x6c\x18\xc0\xae\x5b\x63\x0d\xe0\x58\x58\x04\x5a\xbd\xb9\x79\xf7\x25\xb5\x65\x36\xf0\xe2\x27\xd3\x6d\x73\xe9\x8e\xe2\x15\x4f\x88\xc5\xfc\xd4\x10\x36\xb9\xb5\xa1\xe6\xae\x8e\xf9\x73\x5c\x58\xed\x59\xc9\xf7\x9b\xb8\xd1\x3a\x0e\xa4\x26\x81\xe5\x71\xf4\x8d\xb3\x33\x50\xb3\x79\x16\xba\xff\x96\x30\x1b\x65\x36\x7a\x64\x36\x9a\xba\x4e\x20\xcf\xaa\xf8\xa7\x7e\xa1\xa1\x1a\x0d\x13\xd2\x2e\x22\x4e\xbf\xea\xdb\x61\x1d\x6d\x30\xa7\x35\xc6\x0c\xa3\xcf\x50\xc4\xad\x8b\xdd\x71\xa5\x3f\xde\x92\x7e\xc3\x11\xb7\x5f\x94\x29\x2d\xda\x8e\xbc\x4b\xe0\x5e\x70\xef\xf9\x1d\xf0\x68\x91\x88\xe3\x8d\x0c\x7d\x06\x21\x5e\x38\x32\x9c\x5b\xd9\xef\xaa\x41\x02\x03\x69\x95\x81\x9c\xc6\x80\x84\x86\x64\x5c\xba\x91\xee\xbf\x57\x03\x79\xe9\x00\x30\x98\x7c\xdc\x39\x41\x48\x0f\xa4\xe7\x18\xe9\x31\x9a\xe0\x1c\xd4\xd3\x56\x79\x98\x55\x6c\x27\xac\x67\xbb\x18\xb0\x35\x7d\x3a\x9b\x4f\x1b\xfb\xf6\x93\xb0\x0f\x6f\x4c\xdf\xdc\x67\x1a\x15\xb4\xd9\x8c\xca\x2c\x9b\xcd\xa8\x93\xe7\x40\x03\x46\xa1\x5f\x39\x74\x40\x83\xec\xa2\x41\xd3\x18\xa6\xc0\x41\x0c\x54\xb7\x34\x14\x10\x95\x4e\x54\xfa\xd8\x4d\x9b\x00\x1d\xf2\xc3\x55\xa2\xfa\x9f\x53\x69\x90\x49\xe8\x9e\xe4\x89\x70\x8b\x0d\xd2\xd1\x52\xa8\x57\x43\x7c\x32\x47\xb3\x79\x65\xdb\xf8\x61\xf5\x05\xef\x4c\xb2\xd1\xff\xb3\x9d\x17\xf4\x94\x63\x6e\xff\xe6\x58\x33\x12\x75\x67\x0e\x4c\x48\x76\x6f\x0d\x35\x66\xa8\x31\x43\x8d\x19\x6a\xcc\x50\x63\x86\x1a\x33\xd4\x98\xd9\x6d\x30\x35\x66\xa8\x31\x43\x8d\x19\x6a\xcc\x50\x63\x86\x1a\x33\x3d\xb3\x4e\x6a\xcc\x50\x63\xe6\x82\xe9\x01\x35\x66\xcc\x2b\x44\x8d\x99\x9e\x00\x7e\x0e\x8c\xfe\xf4\xd3\x71\x08\xbe\x7a\xa0\x7b\x03\xf8\x3b\x34\xec\x74\x7a\x7f\x4a\x7e\x0e\x27\x9c\x02\x08\x1d\x8b\x53\x1e\xcd\xc8\x71\x26\xa9\xb4\x2a\xb0\xa7\x38\xf7\xd6\x17\x06\x59\x8a\x2c\xbd\xe0\xb1\x19\x2f\xa4\xe7\x94\x53\x1b\x22\xeb\xc9\x65\xe7\x36\xd1\x7c\x27\x97\x0e\x4f\x27\xa6\xbd\xaf\xa5\xdb\x8d\x96\x8c\x55\x67\xe7\xbf\x7f\x5f\x5e\x3f\xfc\x1a\x7e\x0d\xbf\x86\x5f\xc3\xaf\xe1\xd7\xf0\x6b\xf8\x35\xfc\x1a\x7e\x0d\xbf\x86\x5f\xc3\xaf\xe1\xd7\xf0\x6b\xf8\x35\xfc\x1a\x7e\xcd\xda\x94\xcd\x66\x88\xad\x60\xa0\x75\x38\xf3\xda\xbd\x32\x27\x24\x0d\xd6\xbf\x27\xaa\x2d\x98\xf5\xdc\xc1\xb5\x07\x3b\x69\x5f\x95\xdb\x99\x17\x98\x5d\x35\x56\xec\xaa\xc9\x33\xae\x9c\x93\x6a\x65\x1b\x4a\x02\xe7\x2f\xcd\xae\xd2\x03\x90\x3f\x3a\x5a\xd6\xaa\x48\xca\x7f\xf4\xb2\x72\xa1\xfe\xe5\xb8\xd9\x5c\x88\x8f\xea\xef\xe2\xff\xd7\x8e\x1f\x66\x8e\x1f\xa6\xc2\x0d\x36\x69\x26\x93\xaa\x7a\xa0\xc1\x47\x22\xf0\x7f\x48\x31\x2b\xdb\x33\x6b\x1a\xff\xf4\xa1\xc7\x99\x18\x94\x4d\x2d\x6d\xc1\xa2\x68\xb4\xf4\x74\x6b\x75\x3b\xd5\xbb\x1c\xa7\x45\x9b\xf2\xf5\xd2\x26\x55\xcb\x20\x27\xac\x55\x24\x6d\x9c\x00\x99\xc3\x4d\x60\x7c\xb7\x4d\x4e\xf6\x99\x38\xe7\xe2\xc1\xfc\x94\xac\x39\x74\x7e\x9d\x25\xca\x21\x8c\x86\x30\x1a\xc2\x68\xb6\x1f\x1b\x9b\xc3\x68\xa6\x99\x16\xa7\xe7\x48\x15\x42\x29\xc5\xf9\xe1\x29\x83\x8c\x01\x1d\x63\x90\x0f\xba\x29\x9f\xf5\xfd\xa7\xdf\xb7\xb4\xdf\xef\x0b\xb5\xd6\xe9\xa9\x1f\x8a\xd4\x00\x4f\xb1\x90\xcb\xc8\x68\x90\xc2\x55\x54\xd1\x4d\xb9\x1e\xd2\x17\x62\x23\x4d\xbc\xca\x42\x8a\x30\x0a\xef\x43\xb9\x72\xf4\xe5\xce\xbf\xd8\x14\x80\x37\x6b\x14\xe3\x2d\xcb\x1b\x9d\xf7\x32\xfe\x7a\x2d\x3d\xdf\xc9\x64\xf0\x9c\x07\xc9\xd4\x43\xa0\x42\x3f\xb8\xcb\x91\xa7\x29\xeb\xbe\x4a\xd4\x54\x35\x96\x89\x1f\x79\x25\x1f\xae\x66\xad\xaa\xdd\xe5\x35\xdf\xa4\xea\x24\xeb\x82\xc0\x51\xbf\x59\x34\x28\xff\x92\x65\x6d\x25\xe4\xab\x5f\xd0\xe7\xb9\x96\x4e\xd8\x78\x8e\x0d\xf7\x4f\x9f\xd3\x93\x3e\xa5\x51\x79\xf1\x07\x19\x27\x52\x5d\x5c\xef\xad\x88\x03\xe9\xa4\xb2\x74\xba\x4f\xbb\x25\xe1\xef\xea\x25\xfd\x8b\x0b\xe6\x95\x07\x50\x8f\xc2\xeb\xf9\x6f\x73\x51\x5b\x55\x97\x65\xe8\xab\x20\x04\x99\x17\xcf\x57\x97\x2d\x07\x7a\x0f\x4b\x27\x28\xc2\x90\xbe\xbd\x32\x3f\xfe\xf6\xaa\x56\xd9\xbf\xf8\x32\xc7\xf3\xb4\xee\x7b\x30\x24\xda\xab\xac\x8d\x39\xfc\x2c\x15\xb5\x82\xff\x81\xaf\xde\xbc\x8f\xbe\x7e\x37\x6b\xa7\x1e\x25\xfb\x6d\x2b\xea\x8b\x69\x8f\xb3\xd8\x64\xa6\xe7\x88\xb2\xef\x4d\x37\xcf\x9c\xe1\x87\xb2\xc4\xfe\x58\xb2\x4c\x37\x4c\xf5\x41\xdf\xa3\x5f\x62\xe5\x24\x0b\x67\xb5\x15\x2c\x5a\x76\x24\x32\x59\x46\xc9\x5a\x5d\xf1\xc6\xab\xf1\x79\xa7\x3d\xed\x17\x43\xbf\x9a\xc5\x7b\x15\x9b\x2b\xe7\xab\x67\xde\xf5\xbd\x2a\x86\x48\x87\x56\xe8\xa8\xae\xf2\x0e\xa6\x32\x2b\x40\x6c\x11\x3c\x31\xaf\xdd\xaa\x42\xbb\x17\x08\xb7\xa2\x2b\xdb\x5f\x36\x17\x26\x3c\x59\xab\xfc\x7a\x6f\x3a\x33\x6d\x98\x89\xfb\xfc\xf1\xda\x7e\xfc\xd2\x77\x62\xf6\xbb\xe3\xfe\x50\x73\xa4\xd0\x53\x9f\x72\x82\x20\xfa\xa5\x3f\xb4\x73\xe1\x4c\x44\x4d\xfe\x16\x6f\x1f\xa4\x68\xc1\xa2\x3c\xd2\x3b\x31\xfb\x23\x4a\x64\xed\xb0\xc2\x75\x52\xd7\xf1\x54\xeb\xf3\xeb\xa3\x47\x27\x73\xbc\xd4\x74\xf7\x7b\x07\x5c\x96\xc7\x68\x7a\xdc\xe2\xdd\x87\x75\x02\xd3\x7d\xca\x72\x5e\xe3\x78\xac\x9b\xfe\x9f\x9b\x12\xf3\x7c\x2e\x44\x16\x4c\x0b\xb2\x60\x4e\x85\x41\x91\xfc\x72\x9a\x0b\x12\x1b\x46\x26\xeb\x68\x4f\xaf\x99\x2f\xc7\x52\xf9\x67\xa4\xbd\xdc\x3b\x45\x72\x5e\x62\xe7\x0f\xd9\xf9\x0e\xeb\xa1\x00\x2b\xaf\xd4\xf5\xb6\x56\x42\xc1\xe6\x76\x58\x03\x85\xb7\xe4\x7a\xaf\x3b\x91\xb4\xf2\xd8\x5d\x26\xd5\xd8\xdd\x97\x66\x77\xbb\xaa\x78\x02\xe8\xb1\x64\x58\x3a\x11\xf4\x4c\x64\x50\x02\xf7\x30\x32\xdd\x4c\xf7\x0f\xee\x01\xf7\x80\x7b\x0e\xe0\x9e\x50\x66\xbf\xa2\xe4\x87\xb6\xa7\x7e\x47\x85\x4e\xfe\xc7\x1c\x73\x5b\x9f\xda\xb8\x8e\x6d\xfc\xf0\x0b\x28\x77\xd2\x7c\x83\x48\xca\x44\x52\x26\x92\x32\x91\x94\x89\xa4\x4c\x24\x65\x22\x29\xd3\x6e\x83\x49\xca\x44\x52\x26\x92\x32\x91\x94\x89\xa4\x4c\x24\x65\x22\x29\x13\x49\x99\xb6\x1e\x18\x92\x32\x91\x94\xe9\xb6\x92\x32\x35\x91\xfc\x2d\x6c\x74\x9b\xa5\x4f\x1a\xc9\x58\xc7\x05\x50\xa6\xc3\x47\xc7\xc2\x97\x47\xab\xa0\x5c\x04\x30\xad\x0a\xf3\xd9\x6e\x41\xeb\x7b\x84\x52\x45\xa9\x5e\xfc\xf0\x8c\x17\xf2\x73\xfa\x09\x8e\x55\x1d\xe5\xd4\x33\x9c\x68\x8d\x94\xeb\xc6\xb1\x8b\x2a\xa5\x30\xaa\x75\x57\x2f\x05\x41\x87\xa0\x43\xd0\x21\xe8\x10\x74\x08\x3a\x04\x1d\x82\x0e\x41\x87\xa0\x43\xd0\x21\xe8\x10\x74\x08\x3a\x04\x1d\x82\x0e\x41\xf7\xe2\x05\x9d\xcd\x19\xb5\x06\xa8\x9a\x72\xa5\xa8\xa3\x76\x0a\xdb\x75\x6e\x60\xbb\xce\xd5\x15\x54\x80\xf6\xd7\x25\x66\xe9\x0d\xd4\x53\x4d\x85\x6a\x2a\x13\x92\x99\x7d\x66\xe1\xb9\x72\xa8\x3f\xbf\xb2\x0a\x9d\xe2\xd5\x79\x78\x08\xd0\x21\x40\x87\x00\x9d\xe9\x07\xe8\x4c\x33\x33\xcf\x20\xd1\x2f\xc4\x71\x5e\x5f\x82\xa5\xf7\x61\x82\x42\x2c\x2f\x6f\x50\xe8\x8b\xde\x52\x88\x85\x42\x2c\x14\x62\xa1\x10\x0b\x85\x58\x28\xc4\x42\x21\x96\x29\x15\x62\xb9\x56\x16\x5d\x53\x8e\xe5\xf4\x45\x02\xb9\x3a\x2d\xc8\xd5\x39\x2d\x70\x45\xae\xce\x69\x2e\x51\x6c\x18\xab\x2c\xc5\x42\xbd\x66\xec\x1c\x37\x6a\xe0\x8c\xbc\x9d\x2d\x27\x4a\xf6\x4e\xc2\x01\xea\xe1\x00\x89\xd4\x23\x6d\x2a\xb3\x6e\x32\x77\x7e\x31\xc7\xfb\x5a\xb3\x79\x16\xe2\xcc\xc6\x0f\xbf\x80\xb4\x9d\x0d\x77\x87\x2d\x81\x6c\x09\x64\x4b\x20\x5b\x02\xd9\x12\xc8\x96\x40\xb6\x04\xee\x36\x98\x2d\x81\x6c\x09\x64\x4b\x20\x5b\x02\xd9\x12\xc8\x96\x40\xb6\x04\xb2\x25\x70\xeb\x81\x61\x4b\x20\x5b\x02\x6f\x6b\x4b\x60\x13\xd1\xaf\x98\xd1\x6d\x26\xec\xdc\x67\x62\x5d\x67\xeb\x9c\x06\x13\x1d\x0b\x59\x1e\x4d\xd5\x79\x3e\xb4\xb4\x6a\x1b\x40\xed\xf4\x5b\xdf\x1d\x5c\x2a\x2e\xf5\xb2\x27\x67\xbc\x0d\x00\x27\x9e\xdd\x58\xe9\x39\x4f\x3a\xbd\x89\xe6\xe6\xbc\x62\xc8\xba\x28\x31\x27\x03\x98\xe8\x26\x2b\x27\xfe\x0d\xff\x86\x7f\xc3\xbf\xe1\xdf\xf0\x6f\xf8\x37\xfc\x1b\xfe\x0d\xff\x86\x7f\xc3\xbf\xe1\xdf\xf0\x6f\xf8\x37\xfc\x1b\xfe\xed\x65\xfb\x37\x9b\xf7\x56\x0e\x90\x92\xf3\x1a\x15\x47\x3e\x4e\x36\xe0\x4c\x7c\x03\xce\xd5\xb9\x38\xe1\xf4\xe2\xf2\x44\x9c\xfd\xb0\x79\xb2\x70\x92\x85\x73\x2a\xce\xb2\xcf\x14\x9c\xd7\x0c\xed\xe7\xe7\xdf\xa4\x23\x14\x57\x25\xdf\x24\xe4\x26\xff\x19\x21\x37\x84\xdc\xec\xf5\xc0\x76\x87\xdc\x4c\x33\xe1\x66\xff\x21\x2d\xc4\x61\x1e\x1e\x15\x8e\xa6\xda\xec\x77\x50\x20\xcf\xe6\xcb\x1b\x05\xfa\x42\xb2\xe4\xd9\x24\xcf\x26\x79\x36\xc9\xb3\x49\x9e\x4d\xf2\x6c\x92\x67\x73\x4a\x79\x36\xaf\x32\x40\xd7\x24\xd9\x3c\x71\x6d\x40\x86\x4d\x0b\x32\x6c\x4e\x88\x4e\x91\x5e\x73\x9a\x2b\x13\x1b\x86\x28\x1b\x09\x50\xaf\xb9\x35\x47\xd4\xff\x67\x24\xd6\x6c\x3a\x4b\xb2\x6a\x22\xf5\x0f\x4b\xfd\x87\xd4\x75\x02\x79\x8e\xda\xd7\xbf\x50\x3c\x74\xa8\xad\x8e\x1d\xff\x57\x7d\x3b\xac\xeb\xdf\xcd\x69\x8d\xd1\xb5\xf7\x29\x7f\xb7\x2e\x76\xb7\xde\x97\xb7\xa4\x67\x01\xbc\xfd\xa2\xd8\x3a\xcf\xbe\xe0\x5d\x62\x82\xcd\x04\xfb\xfc\x0e\x78\x34\xf7\x3b\xde\xc8\xd0\xa7\xf6\xbd\x70\x64\x38\x13\xf5\x5c\x37\x48\xc0\x7c\xac\x62\x3e\xd3\x18\x90\x00\x3f\x8c\x4b\x37\xd2\xfd\xf7\xca\x7c\x2e\x1d\x00\x06\xc3\x3d\x3b\x27\x08\xe9\x81\xf4\x1c\x23\x3d\xc6\xce\x9d\x83\x7a\xf4\x6f\xb0\x8a\xed\x8b\xf5\x98\x1b\x62\x5d\x9f\x4e\xb8\x7f\x63\xdf\x7e\x12\xf6\xe1\x8d\xe9\x9b\xfb\x6c\xbf\x34\xb6\xce\xb3\x09\xff\x67\x96\x4d\xf8\xff\xe4\x39\xd0\x80\x71\x3f\x57\x0e\x1d\xd0\x20\xbb\x68\xd0\x34\x86\x29\x70\x10\x03\xd5\x2d\x0d\x05\xc4\x01\x11\x07\x34\x76\xd3\xa6\x43\x87\xd4\x19\xbb\x51\x98\x25\x51\x10\xc8\xa4\xaf\x90\x20\xf5\xd1\xf7\xe5\xb7\x7c\xd8\xac\xd7\xcf\x2c\x82\x2f\xc5\x46\x0d\x17\x93\x90\xa1\x97\x10\x32\xc4\x5b\xd4\x2d\x4a\x3a\xfa\x22\xd9\x3a\x65\x27\xa4\x88\xb9\x3a\x21\x45\xd3\x43\x49\x36\x84\x14\x9d\x3b\x88\x00\x95\xec\x81\x4a\x93\x1d\xb0\x60\x4c\x8c\x5b\x37\x32\x3c\x10\x72\x44\xc8\x11\x50\x29\x94\xd9\xaf\x28\xf9\xa1\xd3\x34\xf8\xf2\xd4\x88\x22\x53\x86\x25\xc9\xd3\xd7\x17\x69\x4d\xa2\xa5\x50\xcf\xbf\xf8\x1f\x73\xcc\xed\x3c\x0d\x36\x2e\x6c\x1b\x3f\xac\xbe\xe0\x9d\x49\x14\xfe\x7f\xb6\x73\x7a\x9f\x72\xcc\xed\xdf\x1c\x6b\x1a\xa2\xee\xcf\xfe\x2c\xa4\x7e\x5b\xfe\x88\x92\xc7\x20\x28\x27\x26\x16\x46\x2e\x6d\x9d\xee\x6d\x96\x05\x6e\x7c\x51\x6c\x19\x2d\xa8\xe8\x47\x45\x3f\x2a\xfa\x51\xd1\xef\x96\x2a\xfa\xb5\x17\xf4\x1b\xa6\x0c\xc2\x20\xa5\xfc\x8e\x54\xf2\xeb\xa8\xa5\x2f\xb8\x98\xc5\x20\xf5\x09\x8f\x94\x27\xec\xa8\xa5\xbb\x79\x2e\x29\x4c\x48\x61\x42\x0a\x13\x52\x98\x90\xc2\x84\x83\x14\x26\x6c\xa9\x4b\x38\xcc\x30\xd6\x3f\x86\xea\xfe\x9c\xa9\xa2\x38\xa1\x2a\x8a\x47\x8b\x28\x0e\x34\x89\x19\xad\x7c\xe2\xb1\xea\x89\x03\x4d\xc5\x6d\xac\x9b\xd8\x52\x36\xf1\x3a\x98\x1d\x47\x5e\x2a\xdd\x4d\xe2\x67\xcf\x9d\x02\xed\x27\x9d\xa0\x5c\x1f\x17\xa8\x6d\x17\xd4\x6e\xbf\x35\x1d\x14\x56\x3b\x66\xa1\x41\xa4\x20\x52\x10\x29\x88\xf4\x96\x10\xe9\x01\x46\x3a\x64\x65\x87\x41\x48\xe9\x31\x54\x3a\x99\x06\x9f\x0a\x15\x8f\x51\xc5\x41\x4b\xe8\xc0\x16\x61\x8b\xb0\x45\xd8\x22\x6c\xb1\x17\xb6\xd8\x06\x17\x07\xae\xcf\x04\xae\x9b\x0a\xae\x3b\xce\xeb\x86\xad\xb0\x37\x16\xb5\x3b\x8a\xed\x06\x2d\x4e\x67\x23\xbc\x6b\xa3\x77\xd3\x8a\x3d\xdf\x43\x47\xb7\x19\x64\xd8\x4a\xc8\x4e\x0f\x34\x8c\xd2\x03\xe8\xd4\xcc\x1e\x84\x33\x2d\x4a\x3a\x16\xc4\x34\x57\xab\x3b\x8c\x69\xd5\xd6\xd5\xfd\x56\xb4\xbe\x4d\x6c\x07\x62\x3b\xd0\x55\x0f\xd0\x78\x5b\x5a\xcf\x3b\xc9\x21\xca\x38\x5e\x7b\x96\x3d\xee\xb2\x8a\xac\x1e\xd9\x4e\x2c\xeb\x5e\x2b\x27\x1b\x2d\x19\xe7\xae\xa8\xf4\xfe\xbe\xbc\x92\x88\x3b\xc4\x1d\xe2\x0e\x71\x87\xb8\x43\xdc\x21\xee\x10\x77\x88\x3b\xc4\x1d\xe2\x0e\x71\x87\xb8\x43\xdc\x21\xee\x10\x77\x88\x3b\xc4\xdd\xe1\x84\x63\x79\x5a\xfe\x31\xb0\xa6\x19\x62\x2b\x2c\x68\x31\xe2\xbc\x36\x4b\xc8\x0b\xde\xe7\x6d\x53\x9e\xa6\x86\xad\x2d\x79\x8a\xef\x73\x92\x7b\x6f\x63\x3b\x40\xf6\xa5\xa9\xbc\x7b\x85\xd7\x47\x47\x96\xaf\x66\xd9\xa7\x97\x8e\xff\xe8\x25\xd8\x42\xfd\xcb\x71\xb3\xb9\x10\x1f\xd5\xdf\xc5\xff\xaf\x1d\x3f\xcc\x1c\x3f\x4c\x85\x1b\x6c\xd2\x4c\x26\xf7\xf9\xdd\x77\x73\xd4\x22\x02\xff\x87\x14\xb3\x32\x0f\xd4\xac\x69\xac\xd0\x87\x1e\x67\x10\x2d\x9b\x5a\x92\xf5\x45\xd1\x68\xe9\xe9\xd6\xea\x76\xaa\x17\x39\x4e\x8b\x36\xe5\x6b\x8b\x4d\xaa\x96\x0c\x4e\x68\xd6\x78\x66\x68\x6c\x6e\x9e\x3a\xc6\x04\xc6\x42\x7b\x35\x5f\x9f\x59\xda\x3b\x18\x02\x4f\xc9\xd8\x4e\xd7\xd8\x59\x7e\x76\x82\x59\x08\x66\x21\x98\xe5\xf6\x82\x59\xa6\x99\xab\x7d\xb0\x28\x11\x22\x20\xaf\x89\x0c\x19\x64\xd0\xe8\x98\x40\x7c\xd0\x4d\xf9\xac\x1f\x84\x03\x20\x82\xe1\x61\xcc\xe1\xa1\x2f\xca\x59\x07\x97\x7e\x28\x52\xc3\x1a\xc5\x42\x2e\x23\x63\x20\x0a\x4d\x50\x05\x16\xe5\x66\x46\x5f\x88\x8d\x34\xa1\x22\x0b\x29\xc2\x28\xbc\x0f\xe5\xca\xd1\x97\x3b\xff\xe2\xb9\xf8\xab\x0c\xdf\x31\xca\xb0\xbc\xd1\x79\x77\xe3\xaf\xd7\xd2\xf3\x9d\x4c\x06\xcf\x79\x7c\x4a\x3d\xfa\x28\xf4\x83\xbb\x9c\x36\x6a\xc2\x2e\x56\x89\x9a\xe5\xc6\x32\xf1\x23\xaf\x44\xb3\xd5\x84\x57\xb5\xbb\xbc\xe6\x9b\x54\x9d\x64\x9d\xcd\x3b\xea\x37\x8b\x06\xe5\x5f\xb2\xac\x2d\xac\x7c\xf5\x0b\xfa\x3c\xd7\xd2\x09\x1b\xcf\xb1\xe1\xfe\xe9\x73\x7a\xd2\xa7\x34\x2a\xaa\xfd\x20\xe3\x44\xaa\x8b\xeb\xbd\x15\x71\x20\x9d\x54\x96\x3a\xf5\x29\x89\x62\x67\xe5\x98\x88\x35\xd5\x2d\xdd\x99\x0b\x6d\x04\x62\x71\xc1\xbc\xf2\x00\xea\x51\x78\x3d\xff\x6d\x2e\x6a\x8b\x74\x4f\xc6\x32\xf4\x64\x98\x55\xfe\x5f\x8a\x28\x89\xbf\x3b\xa1\xba\x6c\x39\x41\x7b\x58\x3a\x41\x11\x01\xf4\xed\x95\xf9\xf1\xb7\x57\x62\xe9\x87\x1a\x7e\x25\xe5\x97\x39\x9e\xa7\x4d\xdb\x83\x81\xc0\x5e\x25\x4c\xcc\xe1\x67\x69\xf5\x4b\x26\xea\x66\x2e\x3e\xfa\xfa\xdd\xac\x9d\x7a\x94\xec\xb7\x4d\xab\x54\x13\x00\x67\x82\x7e\x74\xcf\x11\x65\xdf\x9b\x6e\x9e\x39\xc3\x0f\x45\xdb\xfa\xb9\x75\x27\x74\x86\xba\x61\xaa\x0f\xfa\x1e\xfd\x12\x2b\x27\x59\x38\xab\xad\x88\xcd\xb2\x23\x91\xc9\x32\x4a\xd6\xea\x8a\x37\x5e\x8d\xcf\x3b\xed\x69\xbf\x18\xfa\xd5\x2c\xde\xab\xd8\x5c\x39\x5f\x3d\xf3\xae\xef\x55\xe1\x3b\x3a\xaa\x41\x07\x54\x95\x77\x30\x95\x59\x41\x3e\x8b\xb8\x85\x79\xed\x56\x15\xc6\xbb\x60\xa6\x15\xac\xd9\xfe\xb2\xb9\x30\x71\xc3\xda\xa2\xd7\x7b\xd3\x99\x69\xc3\x4c\xdc\xe7\x8f\xd7\xf6\xe3\x97\xbe\x13\xb3\xdf\x1d\xf7\x87\x9a\x36\x85\x9e\xfa\x94\x13\x04\xd1\x2f\xfd\xa1\x9d\x0b\x67\x82\x59\xf2\xb7\x78\xfb\x20\x45\x0b\x16\xe5\x91\xde\x89\xd9\x1f\x51\x22\x6b\x87\x15\xae\x93\xba\x8e\xa7\x5a\x9f\x5f\x1f\x3d\x3a\x99\xe3\xa5\xa6\xbb\xdf\x3b\xe0\xb2\x3c\x46\xd3\xe3\x16\xef\x3e\xac\x13\x58\x15\x5c\x23\x2f\x86\x89\x1c\xb7\x59\xaf\x58\xbc\x22\x38\xb7\x92\xd3\x35\x70\x89\xba\x4d\xa3\xd5\x6d\x9a\x1e\xc8\xa2\x3e\xd3\x34\x17\x29\x36\x8c\x56\x16\xe3\xa1\x5e\x6b\x35\x8d\xef\xd8\xcf\xa8\xdb\x74\xe0\x64\xed\xab\xe1\x64\x93\x40\xcf\xcb\x64\xa7\x32\xeb\x26\x27\xe4\x7e\x69\x76\x1b\x21\x5f\xe3\x87\x6f\x36\x19\x64\x75\x4f\xec\x2f\x6f\x54\x9d\xeb\x6d\xa6\x1d\xd8\x7f\x3f\x6c\xe9\x4e\xd9\xfc\xc7\xe6\x3f\x36\xff\xb1\xf9\xef\x96\x36\xff\x51\xd8\x88\xc2\x46\x14\x36\xa2\xb0\x11\x7b\x18\xd9\xc3\xc8\x1e\x46\xf6\x30\x8e\xbd\x87\x91\xc2\x46\x67\x9e\x33\x1b\x2e\x27\xb4\xe1\x92\xc2\x46\x14\x36\x1a\xb4\xb0\x91\x3e\xd6\x83\xe7\xc8\xb5\x9a\x96\x9e\x4c\xb0\xf3\x79\x40\xe8\xf9\x3f\x7d\x6f\xe3\x04\xf5\xcb\xe4\x94\x53\xfa\x0f\xfa\xb0\x5f\x65\x36\xaf\xc5\x31\xbd\x2d\x27\x63\x33\x7d\x94\x59\x05\x9a\xb6\xc8\x41\x89\x65\x85\x1f\xa6\x99\x74\xaa\x0e\x15\x1c\x3e\x20\x0e\xff\xd5\xe8\xaf\xcb\x3b\xfb\xa7\x9f\x5a\x86\xc4\x0f\x88\x6a\xfd\x56\x7f\x54\xeb\x89\x51\xa8\xb8\xbe\x94\xbd\xa2\xf1\xf2\xb6\x40\xc6\x21\xe3\x90\x71\xc8\x38\x64\x1c\x32\x0e\x19\x87\x8c\x43\xc6\x21\xe3\x90\x71\xc8\x38\x64\x1c\x32\x0e\x19\x87\x8c\x43\xc6\x21\xe3\x90\xf1\x53\xc8\xb8\x8c\x83\xe8\x79\xad\xb7\xa1\x76\x8a\xc6\xcb\xe3\xc2\xc6\x6f\x8d\x8d\x97\xb7\x16\x38\x6e\x15\x1c\x2f\xef\x0b\x74\x1c\x3a\x0e\x1d\x87\x8e\x43\xc7\xa1\xe3\xd0\x71\xe8\x38\x74\x1c\x3a\x0e\x1d\x87\x8e\x43\xc7\xa1\xe3\xd0\x71\xe8\x38\x74\x1c\x3a\x0e\x1d\x3f\x81\x8e\xfb\xe1\x2a\x91\x69\x9d\x61\x76\xc1\xc6\x3f\x99\xa3\x02\xc6\x6f\x0c\x8c\xe7\xf7\x15\x2a\x6e\x13\x15\xcf\x6f\x0a\x48\x1c\x24\x0e\x12\x07\x89\x83\xc4\x41\xe2\x20\x71\x90\x38\x48\x1c\x24\x0e\x12\x07\x89\x83\xc4\x41\xe2\x20\x71\x90\x38\x48\x1c\x24\x0e\x12\x3f\x01\x89\x87\x25\xd3\x34\x55\xb4\xf5\xbf\xff\x43\x86\x15\x60\xf9\x79\xb0\xbc\x64\xe3\xde\x56\xae\x15\x40\x39\xb9\x55\x40\xe5\xa0\x72\x50\x39\xa8\x1c\x54\x6e\x27\x64\x05\x95\x83\xca\x41\xe5\xa0\x72\x50\x39\xa8\x1c\x54\x0e\x2a\xbf\x76\x18\xcb\x9b\xa6\x8b\xf5\xa9\xfb\xa5\x16\xc9\x22\x75\xa3\x58\xde\x89\x74\xe3\x6a\xfe\xa9\xd7\x48\xd2\x59\x1b\x84\x16\x27\x91\xbe\x94\xfb\xe7\x5f\x22\xa9\xdd\x36\xdc\x6a\x1d\x3f\x2c\x00\x16\x00\x0b\x80\x05\xb0\xcc\x02\x98\xff\xfe\xcf\x59\x32\xa0\x6e\x00\xc2\x62\xc0\x2b\xaa\x86\x76\x6b\x02\xee\xaa\x09\xae\x9e\xc4\xe7\x93\x21\x35\x47\xae\x66\xee\xb3\xad\x75\x6b\xed\xd8\x78\x04\xab\x3d\x02\x0e\xe1\x80\x43\xc0\x1f\xe0\x0f\xf0\x07\xf8\x03\xfc\x01\xfe\x00\x7f\x80\x3f\xc0\x1f\xe0\x0f\xf0\x07\xf8\x03\xfc\x01\xfe\x60\xa2\xfe\x40\x8b\x83\xbc\x99\x0d\xab\xd0\xba\x1a\xb0\xc3\x0a\x20\x3c\x10\x1e\x08\x0f\x84\x07\xc2\x63\xf2\xc2\x83\xf4\xf9\x08\x8b\x8b\x85\xc5\x56\x22\x7d\xac\x05\x89\xf3\x51\x17\xa8\x0b\xd4\x05\xea\x02\x75\x61\x29\xf4\x46\x5d\xa0\x2e\x50\x17\xa8\x0b\xd4\x05\xea\x02\x75\x81\xba\xc0\x04\x60\x02\x30\x01\x98\x00\x4c\x00\x26\xa0\x34\x01\xdd\xef\x7d\xe8\xd6\x06\xb0\xf9\xe1\x96\x5d\x02\x1e\x61\x94\xdd\x0f\x38\x04\x1c\x02\x0e\x01\x87\x80\x43\xc0\x21\xe0\x10\x70\x08\x38\x04\x1c\x02\x0e\x01\x87\x80\x43\xc0\x21\x0c\xb8\xfd\xa1\x61\x19\xca\xfe\x07\xac\x07\xd6\x03\xeb\x81\xf5\xc0\x7a\x74\x6d\x3d\x28\x90\x8c\xae\x10\x17\xe8\x8a\x5a\xa9\x64\x7c\x05\xa5\x91\x11\x16\x08\x0b\x84\x05\xc2\x02\x61\x21\x2c\x44\xdd\x08\x0b\x84\x05\xc2\x02\x61\x81\xb0\x40\x58\x20\x2c\x10\x16\xe0\x7f\xf0\x3f\xf8\x1f\xfc\x0f\xfe\x07\xff\xe7\xf8\xbf\xf3\x2d\x0f\x5d\x2a\x00\xf6\x3b\xdc\xac\x40\x40\x1e\x8c\xb1\xd9\x01\x71\x80\x38\x40\x1c\x20\x0e\x10\x07\x88\x03\xc4\x01\xe2\x60\xa7\xc1\x88\x03\xc4\x01\xe2\x00\x71\x80\x38\x40\x1c\xf4\xb6\xd3\x61\x6f\x0d\xca\x36\x07\x3c\x07\x9e\x03\xcf\x81\xe7\xc0\x73\x74\xed\x39\x42\x99\xfd\x8a\x92\x1f\x71\x14\xf8\xae\xdf\xf1\x66\x87\xff\x31\xc7\x7e\x52\xc7\x7e\x66\xcb\xc3\xcd\x1a\x8b\xad\xfb\xcc\xc6\x87\x31\x37\x3e\x6c\xdd\x0a\x2c\x06\x16\x03\x8b\x81\xc5\xc0\x62\x60\x31\xb0\x18\x58\x0c\x2c\x06\x16\x03\x8b\x81\xc5\xc0\x62\x60\x31\xd0\x02\xe7\x35\x0d\x2d\x80\x16\x40\x0b\xa0\x05\x5e\xa6\x16\xe8\x7c\x13\x44\xf7\x6a\x80\xad\x10\x37\x2e\x16\x90\x0a\x63\x6c\x88\x40\x28\x20\x14\x10\x0a\x08\x05\x84\x02\x42\x01\xa1\x80\x50\x40\x28\x20\x14\x10\x0a\x08\x05\x84\x02\x42\x61\xd8\x6d\x11\x2d\x2b\x51\x36\x47\x60\x41\xb0\x20\x58\x10\x2c\x08\x16\xa4\x6b\x0b\x92\x48\x0d\xd2\x53\x99\x75\xbb\x31\xe2\x8b\x39\xee\x57\xd9\x4d\xd5\x6b\xe4\x85\x8d\xf2\xa2\xba\xc9\x6c\x89\x18\x73\x4b\x44\x75\x1f\xd0\x17\xe8\x0b\xf4\x05\xfa\x02\x7d\x81\xbe\x40\x5f\xa0\x2f\xd0\x17\xe8\x0b\xf4\x05\xfa\x02\x7d\x81\xbe\xc0\x04\x9c\xd7\x34\x4c\x00\x26\x00\x13\x80\x09\x78\x79\x26\xa0\xf3\xbd\x10\x1d\xdb\x00\x36\x42\xdc\xb2\x4b\xc0\x23\x8c\xb1\x0b\x02\x87\x80\x43\xc0\x21\xe0\x10\x70\x08\x38\x04\x1c\x02\x0e\x01\x87\x80\x43\xc0\x21\xe0\x10\x70\x08\x38\x84\x01\xb7\x40\x34\x2d\x43\xd9\xff\x80\xf5\xc0\x7a\x60\x3d\xb0\x1e\x58\x8f\xcb\xad\x07\x55\x20\x70\x14\x97\x39\x8a\xdd\xda\x0f\x7f\x44\xc9\x63\x10\x94\xea\x82\x3a\xd6\xd4\x82\x68\xba\x72\x78\x0b\xbc\x05\xde\x02\x6f\x81\xb7\xb0\x84\x78\xe3\x2d\xf0\x16\x78\x0b\xbc\x05\xde\x02\x6f\x81\xb7\xc0\x5b\x80\xca\x41\xe5\xa0\x72\x50\x39\xa8\x7c\x1b\x95\xc7\x91\x97\x4a\x77\x93\xf8\xd9\x73\x2f\xb8\xfc\x29\xf2\xbe\xe6\xc7\x07\x99\xdf\x24\x32\xdf\xbb\xc3\xe4\x07\x1a\x13\x93\xef\xdd\x0e\x50\x39\xa8\x1c\x54\x0e\x2a\x07\x95\x83\xca\x41\xe5\xa0\x72\x50\x39\xa8\x1c\x54\x0e\x2a\x07\x95\x83\xca\x41\xe5\xa0\x72\x50\x39\xa8\x1c\x54\x7e\x19\x2a\xef\x3c\x79\x4e\x3f\xb8\x9c\x1c\x3a\x37\x0b\xdb\x01\xed\x63\x24\xd0\x01\xb2\x03\xd9\x81\xec\x40\x76\x20\x3b\x90\x1d\xc8\x0e\x64\x07\xb2\x03\xd9\x81\xec\x40\x76\x20\x3b\x90\x7d\xf8\x3c\x3a\x07\x56\xa3\xf6\xa5\xd3\xc1\x0e\x60\x07\xb0\x03\xd8\x81\x5b\xb3\x03\x14\xd7\x05\xe6\x9f\x09\xf3\xb7\x4b\xea\x92\x69\xe6\x0c\xb2\x4f\x89\x5d\xb0\x3e\x58\x1f\xac\x0f\xd6\x07\xeb\x83\xf5\xc1\xfa\x60\x7d\xb0\x3e\x58\x1f\xac\x0f\xd6\x07\xeb\x4f\x19\xeb\x43\xc7\xa1\xe3\xd0\x71\xe8\xf8\x44\xe9\x78\x9e\x78\x5d\x4d\x9a\x7f\xfc\x3f\xe9\xdc\x8f\x1e\x4e\x64\xe1\x2b\x99\x09\x3f\x5c\x46\xc9\xba\xbc\xc9\x8e\x30\xb0\xee\x10\xaf\xee\x0b\x44\x8f\xc8\xc0\x3b\x42\xd4\xd5\x9d\x38\x82\xa6\x57\x32\xfb\x9f\xf2\xb3\x8f\x4f\x9f\xfe\x6b\xeb\xa2\xdb\xc6\x9e\xcb\x13\xec\x85\x3c\xff\xab\xfc\xf3\xc8\x53\xfd\xf3\xf5\x39\x0f\xf6\xd6\x9c\xdb\xbc\xd2\x3c\xd5\x57\x3e\xd5\xff\xfb\xf3\x98\x73\xd9\x7a\xb0\xff\x7e\xfd\xf8\xf4\xe9\xcb\xde\xd5\xb7\xf0\xf1\x2e\x4e\x52\x67\x51\x1a\xfd\x29\x6f\xa9\x1f\x7e\x59\x81\x0d\x03\x62\x92\x7c\x6a\x58\x2c\x01\x8a\xad\x4f\x8d\xf9\xfd\xb1\x94\xc3\xbc\x2c\xea\xd6\xd4\xdf\x96\xaa\x56\x77\xf3\x6d\x69\xf2\x5c\xb5\xa7\xb1\x7d\x82\xd4\xba\xaa\xc0\x75\xe1\xba\x70\x5d\xb8\xae\x9b\x76\x5d\x07\x64\x57\xd3\x32\xab\x1a\xef\xbb\xed\x5a\x07\x51\x5e\xc7\x9c\xd7\x64\x1a\x7c\xaa\x1d\x3a\xa6\x87\xba\x6c\xf0\x2e\x5e\x41\x12\x21\x89\x90\x44\x48\x22\x24\xd1\x30\x92\xa8\xcd\x12\x0d\x39\xa8\xe1\x5d\x26\xe4\x5d\x8e\x8b\x97\x41\xa7\x07\xa3\xe9\x97\xa3\xfe\xa5\xcb\xcb\xb0\x2b\x61\x26\x61\x61\xda\x34\x4c\xf3\x85\xd9\xc1\x3a\xa3\x00\xcd\x79\x0d\x1d\xfe\x7c\x3d\xdf\xab\xa1\x3a\x4a\x98\xf8\xd5\x11\xe2\x7b\x3c\x74\x3f\x50\xfc\x94\x92\xa4\xcd\x61\xe2\x51\x7a\x80\x93\x9a\x29\x83\x70\xa6\x83\x44\x47\x20\x96\xe6\x22\x75\xc8\x2c\x8b\xb7\x6e\x11\x79\xcf\x7b\x2f\xdd\xce\x7f\xee\x6c\x96\xec\xef\xf5\x69\x7f\x75\x7a\x98\x4b\xe4\x53\xa4\x3b\xbd\x27\xc9\x75\xb2\x62\xce\xb0\x05\x33\x8a\x05\x8d\x9a\x94\x2f\xa4\x88\xd5\xb3\xae\x56\x43\x73\xf1\x18\x0a\x3f\x34\x28\x31\x4a\xc4\x26\x2c\x69\xa4\x27\xbc\xe4\xf9\xcb\x26\x14\x9e\x9f\x48\x35\x22\xc8\x12\x71\xe9\x41\x54\x4d\x68\x73\xc6\x57\xf4\x5f\x39\x51\x11\xcb\x4d\xa2\x57\x3f\x71\x12\xb9\x32\x4d\xf3\x79\x46\x6d\x11\x37\x17\x7f\xeb\x6f\xd4\xab\x4a\x3d\x55\x54\x93\x8c\xc7\x20\x78\xab\xe7\x95\x5e\xf2\x2c\x92\x4d\x28\xd2\xcc\x51\xbd\x7b\x31\x99\xce\x0f\x57\x8b\x52\xad\xee\xbf\x39\xd7\x89\x77\xbb\x07\xba\xdc\x37\x87\xbb\xdc\xf7\x66\xbd\x32\xd6\xb9\xbd\x39\x74\x6e\x8f\xae\x2b\xe3\xd1\x4e\xae\xbf\xb1\x4a\x0f\x07\xb6\x8e\x55\x66\xa9\xda\x3e\x5a\x99\x9f\x0b\x37\x0a\x02\xe9\x16\x53\x44\x46\xae\xf6\x91\xcb\x5c\xb0\xfa\xc8\xf5\xbe\xbc\x76\x78\x37\xbc\x1b\xde\x0d\xef\x86\x77\xc3\xbb\xe1\xdd\xf0\x6e\x78\x37\xbc\x1b\xde\x0d\xef\x86\x77\xdb\xeb\xeb\xf1\x6e\x78\x37\xbc\x1b\xde\xed\xe5\x7a\xb7\x03\x1b\x09\xbe\x66\x4e\xb6\x49\x47\x81\x99\x66\x88\xad\x70\xa0\xb5\x60\xf3\xda\x5c\x4d\x2f\x38\xdb\x46\x3e\xc8\xeb\x24\xa4\xea\x95\x53\x0f\x8b\x48\xdd\x28\x96\x77\x22\xdd\xb8\xba\x2f\xd6\x5d\x9c\x74\xd6\xe6\x05\x8e\x93\x48\x4f\x2a\xf6\x9b\x53\x6e\x2b\xd9\x6d\xc3\xad\xe6\x27\xd5\x7f\x9d\xb2\x77\xf2\xe4\xfd\x37\xe7\x95\x21\xd2\xe3\xf7\x36\xa4\x04\xd7\xb7\xe3\x7a\x75\xb9\x06\xde\x1a\x73\x74\xfc\xfc\x6a\x16\xb7\x7a\x81\xfc\x8f\x5e\x68\x2e\xd4\xbf\x1c\x37\x9b\x0b\xf1\x51\xfd\x5d\xfc\xff\xda\xf1\xc3\xcc\xf1\xc3\x54\xb8\xc1\x26\xcd\x64\x72\x9f\xdf\x75\x37\x07\x4a\x22\xf0\x7f\x48\x31\x2b\x5b\x35\x6b\x1a\x11\xf5\xa1\xc7\x99\x2a\x94\x4d\x2d\xfd\xc1\xa2\x68\xb4\xf4\x74\x6b\x75\x3b\xd5\x5b\x1d\xa7\x45\x9b\xf2\x15\xd4\x26\x55\x0b\x23\x27\x34\x2b\x59\x33\x01\x68\x6e\x9e\x3a\xc6\x04\x46\x7c\xeb\xcc\xe5\x4a\xda\x2b\x2e\xe3\xcd\xc1\x4e\x30\x0e\x1c\x57\xd2\x0f\x9e\xd1\x0f\xea\x2b\x46\xc4\x0d\x11\x37\x44\xdc\xdc\x4c\xc4\x4d\x8f\x41\x2d\x1b\x7b\x87\x86\x13\x63\x5a\x88\xc0\x14\x67\xc5\xb1\x0c\x38\x1e\x74\xcc\x4b\x3e\xe8\xb6\x7c\xd6\x0f\xc0\x01\x6c\xc2\x10\x30\xe6\x10\xd0\x17\x93\xad\x63\x56\x3f\x14\xa9\x21\xa3\x62\x21\x97\x91\xf1\x25\x85\xd4\xa8\xc2\xa0\x72\x8f\xa4\x2f\xc4\x46\x9a\xc0\x96\x85\x14\x61\x14\xde\x87\x72\xe5\xe8\xcb\x9d\x7f\xf1\x5c\xfc\x55\x06\x1b\x19\xc1\x59\xde\xe8\xbc\x9b\xf1\xd7\x6b\xe9\xf9\x4e\x26\x83\xe7\x3c\x9a\xa6\x1e\x2b\x15\xfa\xc1\x5d\xce\x46\xb5\x0f\x10\xab\x44\x4d\x5c\x63\x99\xf8\x91\x57\x82\xe4\x6a\x0e\xab\xda\x5d\x5e\xf3\x4d\xaa\x4e\xb2\x6e\x12\x1c\xf5\x9b\x45\x83\xf2\x2f\x59\xd6\x16\x48\xbe\xfa\x05\x7d\x9e\x6b\xe9\x84\x8d\xe7\xd8\x70\xff\xf4\x39\x3d\xe9\x53\x1a\x15\x2c\x7f\xa8\x55\x48\x88\x03\xe9\xa4\xb2\x94\xbf\x4f\x49\x14\x3b\x2b\x7d\x97\x4d\xb7\x74\x67\x2e\xb4\xd1\x9d\xc5\x05\xab\x4a\x2c\xa8\x47\xe1\xf5\xfc\xb7\xb9\xa8\x2d\xb6\x3d\x19\xcb\xd0\x93\x61\x56\x45\x2b\x48\x11\x25\xf1\x77\x27\x54\x97\x2d\x27\x7e\x0f\x4b\x27\x28\xe2\x95\xbe\xbd\x32\x3f\xfe\xf6\x4a\x2c\xfd\x50\xc3\xba\xa4\xfc\x32\xc7\xf3\xb4\x17\x7c\x30\xc8\xda\xab\xf4\x8e\x39\xfc\x2c\xad\x7e\xc9\xc4\x08\xcd\xc5\x47\x5f\xbf\x9b\xb5\x53\x8f\x92\xfd\xb6\x69\xf1\x6b\xc2\xf5\x4c\x88\x92\xee\x39\xa2\xec\x7b\xd3\xcd\x33\x67\xf8\xa1\x68\x5b\x3f\xb7\xee\x84\xce\x50\x37\x4c\xf5\x41\xdf\xa3\x5f\x62\xe5\x24\x0b\x67\xb5\x15\x57\x5a\x76\x24\x32\x59\x46\xc9\x5a\x5d\xf1\xc6\xab\xf1\x79\xa7\x3d\xed\x17\x43\xbf\x9a\xc5\x7b\x15\x9b\x2b\xe7\xab\x67\xde\xf5\xbd\x2a\xd8\x48\xc7\x60\xe8\xf0\xaf\xf2\x0e\xa6\x3a\x5f\x99\xfe\x69\x11\x65\x31\xaf\xdd\xaa\xc2\xcf\x17\x8c\xb7\x82\x2e\xdb\x5f\x36\x17\x26\xa4\x59\x3b\xff\x7a\x6f\x3a\x33\x6d\x98\x89\xfb\xfc\xf1\xda\x7e\xfc\xd2\x77\x62\xf6\xbb\xe3\xfe\x50\x93\xa5\xd0\x53\x9f\x72\x82\x20\xfa\xa5\x3f\xb4\x73\xe1\x4c\xe8\x4d\xfe\x16\x6f\x1f\xa4\x68\xc1\xa2\x3c\xd2\x3b\x31\xfb\x23\x4a\x64\xed\xb0\xc2\x75\x52\xd7\xf1\x54\xeb\xf3\xeb\xa3\x47\x27\x73\xbc\xd4\x74\xf7\x7b\x07\x5c\x96\xc7\x68\x7a\xdc\xe2\xdd\x87\x75\x02\x33\xff\x6b\x54\xcb\x30\x41\xed\x36\xcb\x20\x6b\xd7\x01\xb1\x36\x7d\xad\xcb\x80\x4a\xdc\x18\xbf\x78\x31\x2d\xda\x9d\xf5\xdf\xeb\x2f\xfe\x77\xfb\x02\x60\x2d\x93\x95\x3c\xfa\xa9\x34\x4b\x9c\x4c\xae\x7c\xf7\x7e\xef\xf3\x2f\x6b\x29\xa2\x1b\x7e\x0b\x64\xea\xc0\x5b\xfc\x54\xcb\x0d\xc6\xd2\xc4\xb2\xa5\x89\x0d\x63\x94\x7d\x04\xa8\x1e\x47\x61\x61\xdf\xdf\x6b\xa9\xa6\x7a\x81\xce\x96\x73\xb4\xaf\x38\x27\x5e\x7f\x28\xaf\x4f\x02\xcd\x1b\x4f\xa0\x59\xbf\x19\x76\x95\xf6\x23\x5d\x83\x65\x43\x05\x3b\x2e\xd9\x71\xc9\x8e\x4b\x76\x5c\xde\xd2\x8e\x4b\xaa\xfa\x51\xd5\x8f\xaa\x7e\x54\xf5\x63\xe3\x28\x1b\x47\xd9\x38\xca\xc6\xd1\xb1\x37\x8e\x52\xd5\xef\xcc\x73\x66\x97\xeb\x84\x76\xb9\x52\xd5\x8f\xaa\x7e\x43\x56\xf5\xfb\xf9\xda\xdc\xd5\x6e\xeb\x43\xe5\xb3\x84\xd0\xf3\x7f\xfa\xde\xc6\x09\xea\x17\xd1\x29\x27\xfc\x5b\x14\x6f\x5e\x0b\xd8\x7a\x5b\x4e\xd7\x66\xfa\x48\xb3\x0a\x45\x6d\xb1\x85\x92\xdc\x0a\x3f\x4c\x33\xe9\x54\x5d\x2e\xb0\x7c\x18\x58\xfe\xeb\x44\x5d\xff\x67\x1d\x0a\xdb\x16\xf7\xa3\xdf\xf5\x8f\x6a\x95\x31\x0a\x30\xd7\xd7\x10\x6a\x0e\x35\x87\x9a\x43\xcd\xa1\xe6\x50\xf3\xd1\x79\x2b\xd4\x1c\x6a\x0e\x35\x87\x9a\x43\xcd\xa1\xe6\x50\x73\xa8\x39\xc1\xa8\x08\x01\x84\x00\x42\x00\x21\x80\x10\xb8\x2a\x61\x5d\xfe\xbc\xd4\x64\x40\x58\x8c\x7b\x8d\xb1\xef\x9d\x48\x81\xbb\x6a\xae\xab\xe7\xf3\xf9\xbc\x48\x4d\x97\xab\x49\xfc\x6c\x6b\x09\x5b\x3b\x36\x4a\xc1\x52\xa5\x80\x4e\x38\xa0\x13\x50\x09\xa8\x04\x54\x02\x2a\x01\x95\x80\x4a\x40\x25\xa0\x12\x50\x09\xa8\x04\x54\x02\x2a\x01\x95\x80\x4a\x98\xb4\x4a\x20\x19\x07\xfe\x03\xff\x81\xff\xc0\x7f\xe0\x3f\x7a\xf6\x1f\xec\x7c\x40\x53\x9c\xa3\x29\x76\xf7\x3b\xd8\x95\x2b\xc8\x72\x61\xc1\xfe\x07\xa4\x05\xd2\x02\x69\x81\xb4\x40\x5a\x8c\x8e\xbb\x91\x16\x48\x0b\xa4\x05\xd2\x02\x69\x81\xb4\x40\x5a\x20\x2d\x80\xe4\x40\x72\x20\x39\x90\xfc\x85\x42\x72\x53\x2e\xea\xe1\x44\x02\xbe\xd2\x05\xb5\x96\x51\xb2\x2e\xef\xac\x23\x0c\xa6\x3b\x84\xa8\x07\xaa\x61\x33\xc1\xf2\x39\x71\xbd\xee\x47\x1b\x8e\x5e\xc9\xcc\x70\xcd\xc7\xa7\x4f\xff\xb5\x75\xb1\x6d\xa3\xcd\xe5\x09\xf6\xc2\x9a\xff\x55\xfe\xd9\xf4\x08\xff\x7c\xbd\x90\x99\xf3\xfa\x9c\x47\x79\x6b\x6a\x6d\xde\x5c\x9e\xe3\x2b\x9e\xe3\xff\xcd\xef\xc1\xa9\xcf\xf3\xdf\xe6\xe3\x8f\x4f\x9f\xbe\xec\x5d\x7f\x0b\x1f\xed\xe2\x24\xfb\x2b\xbf\x70\xda\x13\xde\xb2\x7b\x2b\x8e\x3c\xcf\x4f\x93\x8d\xfe\xa6\xc5\xc6\x5b\xc9\xac\x9b\x92\x25\x4f\x91\xf7\xa1\x3c\xf0\xef\xfa\xc0\x18\xc9\x81\xdf\x19\x75\x87\xb6\x5e\x9a\x6a\xe7\xd4\xa1\xdb\x73\xa4\x82\x5a\x17\x45\xc8\x30\x5c\x18\x2e\x0c\x17\x86\xeb\x96\x0c\xd7\x01\xc5\x35\x64\xb5\xe5\x41\x44\xd7\x31\xd3\x35\x99\x06\x9f\xea\x84\x8e\x49\xa1\x41\xcb\xda\xa3\x86\x50\x43\xa8\x21\xd4\x10\x6a\xa8\x17\x35\xd4\xe6\x86\x86\x1c\xd4\xb0\x2d\x13\xb2\x2d\xc7\x75\xcb\xa0\xd3\x83\xd1\xa4\xcb\x51\xeb\xd2\xe5\x65\xd8\x55\x2f\x93\x70\x2f\x6d\xf2\xc5\xe2\xd2\xe3\x86\x38\xcd\x73\xe2\x34\x6f\x00\x47\xd3\xad\x2c\x1b\xef\x44\x7e\x17\x81\xe1\x07\xe8\xd8\x4e\x78\x78\x1d\xc3\xed\xc4\x88\x47\xe9\x01\x78\x6a\x66\x0e\xc2\x99\x1a\x27\x1d\x03\x63\x9a\x6b\xd5\x3d\xc8\x2c\x5e\xc5\x45\xe4\x3d\xef\xbd\x89\x3b\xff\xb9\xb3\x7d\xb2\xf7\x77\xaa\xfd\x7d\xea\x61\x9e\x91\x4f\x9f\xee\xf4\x36\x25\xd7\xc9\x8a\xf9\xc4\x16\xe8\x28\x16\x3b\x6a\xc2\xbe\x90\x22\x56\x6f\x81\x5a\x29\xcd\xc5\x63\x28\xfc\xd0\x60\xc6\x28\x11\x9b\xb0\x24\x95\x9e\xf0\x92\xe7\x2f\x9b\x50\x78\x7e\x22\xd5\x68\x21\x4b\xfc\xa5\x07\x58\x35\xd9\xcd\xf9\x5f\xd1\xb7\xe5\xb4\x45\x2c\x37\x89\x5e\x19\xc5\x49\xe4\xca\x34\xcd\xe7\x20\xb5\x05\xde\x5c\xfc\xad\xbf\x51\xaf\x38\xf5\x34\x52\x4d\x40\x1e\x83\xe0\xad\x9e\x73\x7a\xc9\xb3\x48\x36\xa1\x48\x33\x47\xf5\xfc\xc5\x44\x3b\x3f\x5c\x2d\x6e\xb5\x7a\x0c\xcc\xb9\xde\x46\x97\x7c\xa0\x3b\x7e\x73\xb8\x3b\x7e\x6f\x96\x34\x23\x9f\xe2\x9b\x43\xa7\xf8\xe8\xba\x32\x1e\xfb\x1c\xfb\x1b\xd5\xf4\xc0\x61\xeb\xa8\x66\xd6\xb6\xed\xe3\x9a\xf9\xb9\x70\xa3\x20\x90\x6e\x31\xa7\x64\x8c\x3b\x3a\xc6\x99\xeb\xb6\x35\xc6\xbd\x2f\xaf\x21\xda\x0e\x6d\x87\xb6\x43\xdb\xa1\xed\xd0\x76\x68\x3b\xb4\x1d\xda\x0e\x6d\x87\xb6\x43\xdb\xa1\xed\xd0\x76\x68\x3b\xb4\x1d\xda\x0e\x6d\x77\xfa\xa6\x84\xaf\x99\x93\x6d\xd2\x51\xd0\xa6\x19\x62\x2b\x38\x68\x2d\xe6\xbc\x36\xc1\xd3\x0b\x4e\xd1\x41\x6e\xd3\x2b\xb6\x6d\xeb\xbf\x5a\x37\x5c\x5e\xb0\x97\xe7\xbc\x72\x4c\x7a\xf8\xde\x66\x94\xb0\xfb\xa3\xec\x5e\x5d\xb5\x71\xb6\xd9\x1c\x1d\x4c\xbf\x9a\x95\xae\x5e\x2d\xff\xa3\x57\x9d\x0b\xf5\x2f\xc7\xcd\xe6\x42\x7c\x54\x7f\x17\xff\xbf\x76\xfc\x30\x73\xfc\x30\x15\x6e\xb0\x49\x33\x99\xdc\xe7\xcf\x80\x9b\xd3\x25\x11\xf8\x3f\xa4\x98\x95\x6d\x9b\x35\x0d\x8f\xfa\xd0\xe3\xcc\x1b\xca\xa6\x96\x32\x61\x51\x34\x5a\x7a\xba\xb5\xba\x9d\xea\x15\x8f\xd3\xa2\x4d\xf9\x72\x6a\x93\xaa\x55\x92\x13\x9a\x65\xad\x99\x0d\x34\x37\x4f\x1d\x63\x02\xc3\xbf\xad\x6e\xb3\xfe\xfc\x5b\x37\xe6\x6f\x0e\xf6\x8c\x71\xe0\xb8\x92\xce\xf1\xfc\xce\x51\x5f\x38\xa2\x77\x76\xcf\x9f\xe8\x1d\xa2\x77\x6e\x32\x7a\xa7\xc7\xc8\x98\x8d\xbd\xa3\xc7\x89\x81\x31\x04\x7c\x5e\x16\x0c\x33\xf8\x90\xd1\x31\x74\xf9\xa0\x9b\xf4\x59\x9f\xf4\x01\xf6\xc2\xf0\x30\xe6\xf0\xd0\x17\xd8\xad\xb3\x5a\x3f\x14\xa9\xc1\xab\x62\x21\x97\x91\x91\x2e\x85\x19\xa9\x62\xa9\x72\x19\xa5\x2f\xc4\x46\x9a\xe8\x98\x85\x14\x61\x14\xde\x87\x72\xe5\xe8\xcb\x9d\x7f\xf1\x5c\xfc\x55\x46\x2c\x19\x4b\x5a\xde\xe8\xbc\xd3\xf1\xd7\x6b\xe9\xf9\x4e\x26\x83\xe7\x3c\x24\xa7\x1e\x70\x15\xfa\xc1\x5d\x0e\x58\xb5\x54\x10\xab\x44\xcd\x74\x63\x99\xf8\x91\x57\xd2\xe8\x6a\xd2\xab\xda\x5d\x5e\xf3\x4d\xaa\x4e\xb2\xae\x23\x1c\xf5\x9b\x45\x83\xf2\x2f\x59\xd6\x16\x56\xbe\xfa\x05\x7d\x9e\x6b\xe9\x84\x8d\xe7\xd8\x70\xff\xf4\x39\x3d\xe9\x53\x1a\x95\x4e\x7f\xa8\x55\x66\x88\x03\xe9\xa4\xb2\x34\xc8\x4f\x49\x14\x3b\x2b\x7d\x97\x4d\xd7\x75\x67\x2e\xb4\x71\xa6\xc5\x05\xab\x4a\x3b\xa8\x47\xe1\xf5\xfc\xb7\xb9\xa8\x2d\xd2\x3d\x19\xcb\xd0\x93\x61\x56\x85\x3c\x48\x11\x25\xf1\x77\x27\x54\x97\x2d\xc7\x86\x0f\x4b\x27\x28\x82\x9e\xbe\xbd\x32\x3f\xfe\xf6\x4a\x2c\xfd\x50\x13\xbf\xa4\xfc\x32\xc7\xf3\xb4\x5c\x7c\x30\xdc\xdb\xab\x1c\x91\x39\xfc\x2c\xad\x7e\xc9\x04\x1a\xcd\xc5\x47\x5f\xbf\x9b\xb5\x53\x8f\x92\xfd\xb6\x69\x7b\x6c\x62\xfe\x4c\x9c\x93\xee\x39\xa2\xec\x7b\xd3\xcd\x33\x67\xf8\xa1\x68\x5b\x3f\xb7\xee\x84\xce\x50\x37\x4c\xf5\x41\xdf\xa3\x5f\x62\xe5\x24\x0b\x67\xb5\x15\xaa\x5a\x76\x24\x32\x59\x46\xc9\x5a\x5d\xf1\xc6\xab\xf1\x79\xa7\x3d\xed\x17\x43\xbf\x9a\xc5\x7b\x65\xc6\x40\xf5\xca\x79\xd2\xf5\xbd\x2a\x62\x49\x07\x72\xe8\x18\xb2\xf2\x0e\xa6\x3a\x69\x9a\xfe\x69\x11\xaa\x31\xaf\xdd\xaa\x42\xf2\x17\xa0\xb8\x82\x35\xdb\x5f\x36\x17\x26\x58\x5a\x07\x0e\xd4\x7b\xd3\x99\x69\xc3\x4c\xdc\xe7\x8f\xd7\xf6\xe3\x97\xbe\x13\xb3\xdf\x1d\xf7\x87\x9a\x3a\x85\x9e\xfa\x94\x13\x04\xd1\x2f\xfd\xa1\x9d\x0b\x67\xe2\x77\xf2\xb7\x78\xfb\x20\x45\x0b\x16\xe5\x91\xde\x89\xd9\x1f\x51\x22\x6b\x87\x15\xae\x93\xba\x8e\xa7\x5a\x9f\x5f\x1f\x3d\x3a\x99\xe3\xa5\xa6\xbb\xdf\x3b\xe0\xb2\x3c\x46\xd3\xe3\x16\xef\x3e\xac\x13\x58\x15\x5c\xe3\x6b\x86\x09\x97\xb7\xd9\x28\x59\xbb\x2a\x88\xb5\x2e\x6c\x5d\x14\x54\xf6\xc7\x48\xca\x2b\xf1\xd2\xee\x1a\xe0\x5e\x7f\xfd\xbf\xdb\x97\x03\x6b\x99\xac\xe4\xd1\x4f\xa5\x59\xe2\x64\x72\xe5\xbb\xf7\x7b\x9f\x7f\x61\x0b\x13\xdd\xf2\x1b\x42\x59\x07\xde\xe9\xa7\x5a\xd6\x32\x16\x2a\x96\x2d\x54\x6c\x18\xb1\xac\x85\x44\xf5\x08\x0d\x0b\x07\x84\x5e\x2b\x47\xd5\xab\xa1\x1e\x3c\x5d\x6a\xa2\x12\x37\x70\x42\xdc\xc0\x43\x6a\xa6\x76\x67\x84\x0f\x98\xdf\x28\x1e\x42\x5c\x59\x6f\x81\x04\xf9\xac\x9b\x41\xe0\x16\x3d\x33\x6f\xd1\x70\xc6\x79\xe7\x45\xb2\x75\xb2\x8e\x77\x66\xbe\x3e\xd6\xe3\x83\x77\xb6\x76\x34\x39\x93\x30\x75\x35\xb0\xc0\x9a\xec\x62\x4d\x13\x19\xc4\x20\x4e\x8c\x60\x37\x37\x3c\x40\x9c\x20\x4e\x10\xa7\x26\xe2\x44\x79\x99\x97\x54\x5e\xa6\xe1\xa6\xfc\x11\x25\x8f\x41\x50\xce\x5c\xec\xc7\x55\x24\x33\x1d\x61\x10\x21\xaf\x18\x79\xc5\xc8\x2b\x46\x5e\xb1\x5b\xca\x2b\xd6\x9e\x56\x6c\x98\x7d\xd8\x83\x24\x14\x3b\x92\x4f\x6c\xa0\x2a\xbb\x37\xbc\x9b\x7e\x90\x2c\x69\x47\x92\xa4\x0d\x54\x2b\x9a\xf4\x68\xa4\x47\x23\x3d\x1a\xe9\xd1\x48\x8f\xd6\x4b\x7a\xb4\x96\xec\x68\xc3\x0c\x63\xfd\xf3\xa8\xee\xcf\x99\x5c\x6e\x13\xca\xe5\x76\x34\x95\xdb\x40\x93\x98\xd1\x92\xb8\x1d\xcb\xe1\x36\xd0\x54\xdc\xc6\xec\x6d\x2d\xc9\xdb\xae\xa2\xda\xa9\x74\x37\x89\x9f\x3d\xeb\x9f\xf8\xb2\x33\xa8\xfd\x35\x3f\xee\xf6\xc6\x25\x90\xf6\x88\x48\xbb\xe5\x96\x50\x6e\x01\x2c\x0a\x16\x05\x8b\x82\x45\x29\xb7\x40\xb9\x85\xdd\x06\x53\x6e\x01\x9e\x08\x4f\x84\x27\xc2\x13\x6f\x95\x27\x52\x6e\x01\x44\x47\xb9\x05\xca\x2d\x50\x6e\xa1\x39\xb0\x70\x1b\x1b\xdd\x64\x58\x61\x33\x19\xeb\xa1\x42\xfa\x74\xa8\xe8\x18\xd0\xb2\xa1\x3e\xfa\xc5\xd8\xd2\xa6\xdd\xad\x3b\x2d\x68\x7d\x7b\xd8\x19\xc4\xce\xa0\x8b\x1f\x9e\xd1\x76\xb6\x9e\x71\x82\x23\x55\x43\x3f\xf9\x0c\xa7\x59\x0b\xfd\xca\xd1\xeb\xd2\x4a\xe8\x8c\x65\xe2\xd2\x3a\xe8\xc8\x38\x64\x1c\x32\x0e\x19\x87\x8c\x43\xc6\x21\xe3\x90\x71\xc8\x38\x64\x1c\x32\x0e\x19\x87\x8c\x43\xc6\x21\xe3\x90\x71\xc8\x38\x64\x9c\xe5\x95\x2a\xfa\xaf\x7d\x7e\xad\x94\xa3\xf2\xb9\xbd\x9b\xdc\xf4\x5f\x97\x6c\x4f\xe9\xa2\x0c\x38\xe0\x5a\x9c\x93\xbb\xbb\x57\x58\x4d\xe1\x6f\x0a\x7f\x4f\x48\xe3\xf5\x98\x8e\xfd\xda\xe1\xee\xa2\xa2\xdf\x74\x85\xe2\xcc\x04\xec\x04\xa4\x10\x90\x42\x40\xca\x6d\x04\xa4\x4c\x32\xd1\xfa\x30\xd1\x1e\x44\x2b\x5e\x12\xe1\x31\xc8\xe0\x40\x41\xef\x97\x37\x14\xf4\x45\x2b\x29\xe8\x4d\x41\x6f\x0a\x7a\x53\xd0\x9b\x82\xde\x14\xf4\xa6\xa0\xf7\x84\x0a\x7a\x5f\x2d\x47\xae\x2c\xe7\x7d\xc6\xd2\x80\x02\x4b\x83\x17\x58\x9a\x1e\xa4\xa2\x9c\xd2\x34\x17\x26\x36\x8c\x50\x96\x22\xa0\x3e\x8b\x29\x8d\xec\xc6\xcf\x2b\xa5\xd4\x76\xb2\xf6\x15\x52\xb2\x45\x7c\xeb\x00\x95\x73\xaa\x5c\x9f\xe8\xc3\xf3\xf8\xce\xd0\xf3\x7f\xfa\xde\xc6\x09\xea\xd1\x39\x4e\x19\xb1\xdd\x50\x67\x65\x5e\x5b\x1d\xbe\x2d\xd7\x95\x33\x7d\xbc\x59\xb5\x07\x67\x6b\x53\x45\x39\x4a\x09\x3f\x4c\x33\xe9\x54\x57\xcc\x46\x82\xd8\xf8\xe1\xa9\x67\x81\xfc\x75\x5e\xe9\xc5\x3f\xeb\x5b\xec\x6d\x5b\x6c\xe8\x90\xb2\x8f\x3f\x65\x38\x4e\xfa\x01\x7d\x29\x29\x6d\xc4\xb6\x41\xb6\x0d\xb2\x6d\x90\x6d\x83\xb7\xb1\x6d\x90\xd2\x46\x94\x36\xa2\xb4\x11\xa5\x8d\xd8\xfd\xc8\xee\x47\x76\x3f\xb2\xfb\x71\xec\xdd\x8f\xa3\x96\x36\xa2\x8a\x38\x55\x9b\xd8\x85\x7a\xd9\x2e\x54\xaa\x36\x51\xb5\x69\xb0\xaa\x4d\x67\xdb\x81\xf3\x36\xcd\xe5\x8f\x4b\xcd\x0c\x84\xc5\xb0\x57\xab\xef\xd4\x8b\x21\xb8\xab\x26\xbc\x7a\x52\x9f\x4f\x8e\xd4\x9c\xb9\x9a\xc9\xcf\xb6\xd6\xb1\xb5\x63\xe3\x17\x2c\xf7\x0b\xb8\x85\x03\x6e\x01\xaf\x80\x57\xc0\x2b\xe0\x15\xf0\x0a\x78\x05\xbc\x02\x5e\x01\xaf\x80\x57\xc0\x2b\xe0\x15\xf0\x0a\x78\x85\x49\x7b\x85\x9d\x68\xe0\xf6\xf5\xa8\x7d\xf1\xc0\x28\x11\x94\x08\x4a\x04\x25\x82\x12\x99\x84\x12\x61\x67\x04\xe6\xe2\x62\x73\xd1\xb2\x1f\xe2\x8f\x28\x79\x0c\x82\x52\x6b\xa4\x38\x0c\xf6\x47\x34\x5e\x3b\x3c\x06\x1e\x03\x8f\x81\xc7\xc0\x63\x58\x42\xc0\xf1\x18\x78\x0c\x3c\x06\x1e\x03\x8f\x81\xc7\xc0\x63\xe0\x31\x20\xe6\x10\x73\x88\x39\xc4\x1c\x62\xbe\x45\xcc\x77\x2b\xec\x74\x0d\xcc\xb7\xb3\x3f\x81\xcb\x6f\x07\x97\x6f\xdf\x59\x92\x07\x8d\x08\xc7\xed\xce\x07\x07\x1a\x07\x8d\x83\xc6\x41\xe3\xa0\x71\x4b\xa0\x2a\x68\x1c\x34\x0e\x1a\x07\x8d\x83\xc6\x41\xe3\xa0\x71\xd0\x38\x68\x1c\x34\x0e\x1a\x07\x8d\x83\xc6\x0f\xa2\xf1\x3e\xf2\xe8\xf4\x80\xc7\xc9\xa2\x73\x73\x70\x1d\xb0\x3e\x42\xe6\x1c\xa0\x3a\x50\x1d\xa8\x0e\x54\x07\xaa\x03\xd5\x81\xea\x40\x75\xa0\x3a\x50\x1d\xa8\x0e\x54\x07\xaa\x03\xd5\x07\x18\xc6\xa8\xa2\x39\xe0\xc5\xc6\x06\x60\x03\xb0\x01\x3b\xed\x7f\x99\x36\x20\x59\x38\xee\xbc\x20\x92\xfa\x7b\x35\x07\xf5\xa3\x87\x13\xc1\xff\x4a\x66\xc2\x0f\x97\x51\xb2\x2e\x6f\xb6\x23\x0c\x70\x3c\x84\xd6\x07\x2a\x49\x3f\xc1\x6a\xf8\xea\x8e\x3c\xd6\x6f\xc8\x11\xa0\xbe\x92\xd9\x97\xdd\x5f\x79\x7c\xfa\xf4\x5f\x5b\xb7\xc0\x36\x92\x5e\x9e\x60\x2f\x1c\xfd\x5f\xe5\x9f\x27\x3e\xeb\x3f\x5f\x9f\xf3\xb8\x6f\x2d\x25\xcc\x0b\xcf\xb3\xde\xcd\xb3\xfe\xbf\x3f\x8f\xf9\xa3\xa6\xc7\xfd\xef\xd7\x8f\x4f\x9f\xbe\xec\xdd\x0b\x0b\x1f\xfa\xe2\x24\xf5\xfe\x11\x6b\x9e\x7d\x37\xd8\xa4\x99\x4c\x92\x28\x90\x0b\x3f\xf4\xfc\x70\x75\xea\xc6\x28\x83\x98\x92\x7c\xee\x58\x2c\x6e\x0a\xe3\xfb\xde\x1c\xf7\x4b\x14\xc8\xdf\xcd\x71\xd1\xad\xa3\xbc\x34\xea\x36\x35\xbc\x35\x07\xee\x4f\x93\xcf\xab\x3d\x90\xed\xf3\xa9\xd6\x45\x08\x4e\x0f\xa7\x87\xd3\xc3\xe9\xdd\xb4\xd3\x3b\x20\xf5\x9a\x56\x65\xd5\x90\xdf\x6d\xd7\x3a\x88\xda\x3b\xe6\xf6\x26\xd3\xe0\x53\x2d\xd8\x31\x0d\xd6\x65\x83\x77\x69\x0c\x32\x0c\x19\x86\x0c\x43\x86\x21\xc3\x86\x91\x61\x6d\x36\x6c\xc8\x41\x0d\x4d\x33\x21\x4d\x73\xdc\xd3\x0c\x3a\x3d\x18\xcd\xd6\x1c\xd5\x35\x5d\x5e\x86\x5d\x67\x33\x09\x69\xd3\x66\x6d\x9a\x2f\xcc\x0e\xd8\x19\x85\x69\xce\x35\x3d\xfc\xf9\x7a\xbe\x0f\x8c\xfa\x03\x99\x8d\x71\xee\x55\x30\xfc\xd5\x09\x66\x5a\x89\xe8\x7e\x78\x7c\x3b\x27\xdb\x89\x8f\x6f\x0e\x8d\x8f\xd2\x03\x04\xd5\x4c\x1f\x84\x33\x31\x58\x3a\x1e\xcb\x34\x17\xac\x53\x9a\x59\xbc\x8f\x8b\xc8\x7b\xde\x7b\x1d\x77\xfe\x73\x27\xae\xa4\xb7\x17\xab\xfd\xa5\xea\x61\x92\x91\xcf\x9d\xee\x74\x8a\x33\xd7\xc9\x8a\xc9\xc4\x16\xe5\x28\x56\x3a\x6a\xb6\xbe\x90\x22\x56\x0f\xbe\x5a\x26\xcd\xc5\x63\x28\xfc\xd0\x30\xc6\x28\x11\x9b\xb0\xc4\x94\x9e\xf0\x92\xe7\x2f\x9b\x50\x78\x7e\x22\xd5\x50\x21\x4b\xf6\xa5\x47\x57\x35\xd3\xcd\xe1\x5f\xd1\xb1\xe5\xa8\x45\x2c\x37\x89\x5e\x16\xc5\x49\xe4\xca\x34\xcd\x27\x20\xb5\xd5\xdd\x5c\xfc\xad\xbf\x51\x2f\x37\xf5\x1c\x52\xcd\x3e\x1e\x83\xe0\xad\x9e\x70\x7a\xc9\xb3\x48\x36\xa1\x48\x33\x47\x75\xfb\xc5\x2c\x3b\x3f\x5c\x2d\x4c\xb7\xba\xfd\xe6\x5c\xa7\xdd\x1f\x1f\xe8\x8b\xdf\x1c\xee\x8b\xdf\x9b\x75\xcc\x48\xa7\xf6\xe6\xd0\xa9\x3d\xba\xae\x8c\xc7\x3a\xb7\xfe\x86\x30\x3d\x30\x4c\x62\x08\x33\xab\xd9\xf6\x41\xcc\xfc\x5c\xb8\x51\x10\x48\xb7\x98\x45\x32\xa0\x9d\x36\xa0\x99\x8b\xd7\x34\xa0\x95\x97\x13\x51\x87\xa8\x43\xd4\x21\xea\x10\x75\x88\x3a\x44\x1d\xa2\x0e\x51\x87\xa8\x43\xd4\x21\xea\x10\x75\x88\x3a\x44\x1d\xa2\x0e\x51\x87\xa8\x3b\xb2\xf9\xe0\x6b\xe6\x64\x9b\x74\x14\xce\x69\x86\xd8\x0a\x0e\x4e\x83\x79\x5e\x9b\xd1\xea\x05\xe7\x24\xe9\x7f\x4f\xb4\xfe\xeb\x9c\xdd\x8c\xcd\xbb\x5c\xce\xcb\x71\xa8\x87\xb9\x6d\x96\x07\xe3\x3e\x8d\x71\xab\x4b\x77\x9e\xb2\x9d\x90\x58\xeb\xaf\xe7\xac\x55\x7e\xb7\xbc\xb3\xdc\x1c\x7c\x6f\xe2\xc0\x71\x25\xaf\xce\x85\xaf\x8e\xbe\x7a\x04\x3c\x10\xf0\x40\xc0\xc3\xad\x04\x3c\xf4\x18\x54\xb0\x99\xc8\x90\x71\x62\x4c\x01\x81\x71\xd7\xc7\x11\x0c\x32\x4e\x74\xbc\x5e\xfd\xa0\x5b\xf3\x59\x3f\x0e\x07\x96\xad\x8c\x0d\x63\x8e\x0d\x7d\x31\xb1\x3a\xe6\xf2\x43\x91\x1a\x32\x25\x16\x72\x19\x19\x5e\x5d\x40\xe5\x2a\x0c\x25\xe7\xf8\xfa\x42\x6c\xa4\x09\x2c\x58\x48\x11\x46\xe1\x7d\x28\x57\x8e\xbe\xdc\xf9\x17\xcf\xc5\x5f\x65\xb0\x87\x11\x4c\xe5\x8d\xce\x3b\x1d\x7f\xbd\x96\x9e\xef\x64\x32\x78\xce\xa3\x19\xea\xb1\x2a\xa1\x1f\xdc\xe5\x6c\x4a\xf3\x58\xb1\x4a\xd4\xf4\x36\x96\x89\x1f\x79\x25\xc8\xab\x66\xba\xaa\xdd\xe5\x35\xdf\xa4\xea\x24\xeb\x24\xd7\x51\xbf\x59\x34\x28\xff\x92\xa5\x51\x2d\xc5\x21\xe6\xe6\x3c\xd7\xd2\x09\x1b\xcf\xb1\xe1\xfe\xe9\x73\x7a\xd2\xa7\x34\x2a\xd8\xfb\x50\x4b\xf1\x1f\x07\xd2\x49\x65\x29\xdf\x9e\x92\x28\x76\x56\xfa\x2e\x9b\x3c\x6f\x77\xe6\x42\x1b\xdd\x54\x5c\xb0\xaa\x46\x80\x7a\x14\x5e\xcf\x7f\x9b\x8b\xaf\xe6\xae\x9b\x5b\x10\xff\xff\xec\xfd\x6d\x6f\xe3\x48\x92\x2e\x0c\x7f\x9f\x5f\x91\xf0\xa0\xe1\xee\x59\x59\xae\xea\x39\xbb\x03\x54\x63\xf1\x3c\x9e\xaa\xea\x99\xc2\x76\x57\x1b\xe5\xea\x1e\xdc\x38\x3e\xd8\x4e\x91\x29\x99\x77\x51\x99\x1c\x26\x69\x97\xf6\x60\xfe\xfb\x8d\x8c\x7c\x61\x92\xe2\x9b\x24\x52\xa2\xec\xd8\x0f\x5b\x3d\x16\x45\xe5\x7b\x44\x5e\xd7\x15\x11\x8c\x87\x8c\x67\x05\x5b\xcc\x88\x48\x93\x07\xca\xd5\xb0\x19\x90\xe5\x7a\x49\x63\xab\x17\xb9\xbf\xd0\x1f\xdf\x5f\x90\x65\xc4\x01\x1f\x49\xdd\x8f\xd1\x30\x04\x5e\xe6\x5a\x43\x86\x61\x01\xaf\xeb\xd7\x5f\xca\xe2\x4b\x5a\xa3\x31\x27\xef\x23\xd8\x9b\x5e\xd3\x45\xba\xdd\x37\x20\xde\xb4\x5c\x4a\x4b\x44\xe0\xe4\x10\xd9\x43\xdd\xe4\xe9\x16\xbe\xb3\x7d\x1b\x67\xea\x7a\x1c\x86\xd0\x31\x75\x06\x3d\x88\x27\xb2\xa2\xe9\x82\xae\x4a\x2a\x3f\x77\x90\xb0\x74\x29\xd2\xb5\x1a\xf1\xda\xd1\xf8\xa5\xd2\x9f\xe6\xc1\x80\xad\x69\xf7\x95\x4e\x57\xaf\xb6\x5c\xc8\x82\x28\x2c\xc4\x1e\xc0\x81\x83\xfc\xc6\xcd\xa0\x84\x3c\x54\xf0\xa9\x65\xb9\xe7\xde\x54\x59\x7e\xd4\xc2\x6a\x57\x66\x6f\x05\x95\x1f\x9b\x13\x2d\x36\x05\xce\xd5\x3f\x4d\x2f\x75\x1f\x2e\xc9\x95\x59\x5e\xe5\xe5\x27\x7f\x20\x97\x7f\xa5\xc1\x17\xe5\x47\xf1\x50\x3d\x45\xe3\x58\x3c\xc1\x43\x95\x81\xd3\xd2\x07\xb3\x8b\xcb\x2f\xb1\x3d\x58\xb8\x37\xfd\x40\x2e\x7f\x14\x29\xf3\x5e\x4b\x02\x2a\x03\xaa\xac\xb8\x1d\x1f\xb0\x4e\xfa\x7d\x52\x1f\xf7\x5b\x2f\x5c\xba\x77\xd4\x2d\xb7\xa4\xba\x58\xcf\xe0\x4a\x70\x08\xd4\x7d\x1c\xb9\xf1\x94\xc1\xf8\xf3\xb8\x22\x24\x40\xbb\x34\xde\x10\x0a\xe0\x5c\x93\x3d\x87\x01\x4c\xd5\x0b\xc1\x15\xfc\xfa\xbf\x35\xdf\x0d\xd6\x2c\x5d\xb1\xce\xa7\x64\x96\xd2\x8c\xad\xa2\xe0\x6a\xeb\xf9\x17\x79\x4b\x81\xfe\x3f\x0f\x30\xab\x65\x83\xdf\x7a\x09\x9f\xf0\xd6\x32\xb1\x5b\xcb\x14\xcc\xd7\xe4\x60\xa3\x83\x6b\x0b\x9d\x0d\x31\xbb\x43\x26\xea\xb6\x86\xbe\xc4\x54\xd4\xf0\xcf\xfe\xb4\xeb\xe0\x59\x05\xa7\x0c\x04\xd6\x3e\xfc\x52\xd2\x09\x62\x78\x12\x86\x27\x61\x78\x12\x86\x27\x61\x78\x12\x86\x27\x61\x78\x12\x86\x27\x61\x78\x12\x86\x27\x61\x78\x12\x86\x27\x61\x78\xd2\x09\x8c\x1a\x86\x27\x61\x78\x12\x86\x27\x61\x78\xd2\x24\x41\xef\x97\x96\x40\x70\x27\xa4\x7b\xe7\xcc\x81\x53\x06\x44\x4f\x87\x57\xf6\x49\x19\x38\x79\xb6\xb1\x6e\xf3\x20\xc3\x88\x0c\xe3\x30\xeb\xe5\x74\x62\xf9\x93\xeb\x74\x76\x6c\xd4\xb3\xcb\x07\x38\x82\x68\xbf\x31\x11\x20\xda\x27\x52\x63\x9f\x76\xcb\x00\x88\xdc\x1a\x72\x6b\xc8\xad\x21\xb7\x86\xdc\x1a\x72\x6b\xc8\xad\x21\xb7\x86\xdc\x1a\x72\x6b\xc8\xad\x21\xb7\x86\xdc\xda\x09\x8c\x1a\x72\x6b\xc8\xad\x21\xb7\x86\xdc\xda\xc9\xe1\xde\x29\x47\x1b\x9e\x34\xf5\xdf\x31\x43\x4b\x30\xe7\xdf\x84\x83\x4f\x86\x4c\xf6\x87\x38\x36\xa9\xc1\xb1\xbb\xb3\xfc\x5d\x9c\x13\x25\xf6\xdc\xf2\xfa\xed\x74\x12\x1e\x94\xd0\x0f\xb7\x47\xfd\xf6\xe8\x91\xc9\x0f\x75\x08\xa8\x43\x40\x1d\xc2\xb4\x74\x08\xcf\x2d\x5b\xdf\x08\x8c\x3f\xaa\xd0\x06\xc9\xcf\x37\xc6\xe9\x8f\x89\xf9\x5e\xde\xc1\x3f\x16\x62\x85\x89\xf9\x30\x31\x1f\x26\xe6\xc3\xc4\x7c\x98\x98\x0f\x13\xf3\x61\x62\xbe\xe7\x91\x98\x6f\x37\x80\x7c\xa0\x8c\x7c\xad\x57\x04\x4c\xc5\x37\x95\x54\x7c\x93\x47\xa3\x30\x07\xdf\x79\x5e\x50\xa6\x60\xa9\xa6\x83\x02\x9d\x28\xf9\xde\x31\xa9\xd1\xfd\xb2\xee\x6d\x13\x85\x98\x6e\xaf\x9d\xf1\x54\xaf\x97\x09\x0d\x2c\xdf\x09\xff\xfd\xaf\x6b\xbf\xea\xd9\x20\x59\xf8\xce\xa4\x1c\x47\xed\xc3\xcf\x3a\x0b\xdf\x47\x3b\xe9\xe1\x1e\xb9\x74\x31\x66\x08\x63\x86\x30\x66\x08\x63\x86\x30\x66\x08\x63\x86\x30\x66\x68\x84\x0e\x63\xcc\x10\xc6\x0c\x61\xcc\x10\xc6\x0c\x61\xcc\x10\xc6\x0c\x61\xcc\x10\xc6\x0c\xed\xea\x1e\x60\xcc\x10\xc6\x0c\x0d\x0f\x80\x7b\x48\xd1\x8b\xc8\xc7\xb7\x6f\xe5\x99\x7e\xf9\xf8\xce\x04\x1a\x3d\x1d\x72\xd9\x98\x8f\xef\x20\xec\xf2\xf4\x8a\x78\xac\x66\x8f\xbc\xe3\xe0\xeb\xe5\xc8\x8a\xf8\xbe\x6d\x3a\x6a\x66\xbe\x93\x57\x47\x3b\x62\x66\xbe\x71\xcb\xe9\x97\x33\xf3\xa1\xa5\x3a\x3c\x33\x1f\xf2\x6d\xc8\xb7\x21\xdf\x86\x7c\x1b\xf2\x6d\xc8\xb7\x21\xdf\x86\x7c\x1b\xf2\x6d\xc8\xb7\x21\xdf\x86\x7c\x1b\xf2\x6d\x95\xb3\x1e\xf9\x36\xe4\xdb\x90\x6f\x43\xbe\xed\xe5\xf2\x6d\x53\x0e\x3c\x3c\x7e\x8e\xbe\x7d\x49\x38\xcc\xd1\xb7\x6f\xc4\x8a\x31\xf5\x10\x6b\xa3\x36\x9e\x9a\x27\x22\x03\x91\xb0\x19\x91\x79\x00\x27\x32\x1c\x74\x8c\xae\xf5\x36\x4e\x52\x01\xae\x45\x7d\x1c\x0e\xc0\x9e\x18\x8c\x73\x50\x30\xce\xc1\x59\x09\x11\xc3\xdf\x2f\x2b\x61\x3b\x6e\x7f\x0e\xc4\xe0\xb3\xc8\x4f\xb8\xaf\x15\xd8\x3d\x3f\x21\x6e\x94\xbd\xf3\x13\xa2\x2e\xc3\x7e\x86\xba\x0c\xd4\x65\xb8\xe6\x4c\x4f\x97\xf1\x2c\x32\x15\x8e\xab\x80\x40\x7d\xde\xfe\xaa\x87\xa3\xd9\x01\xcc\x59\xf8\xf2\x4c\xc0\x58\x08\x1e\xe6\x2c\xc4\x9c\x85\x98\xb3\x10\x73\x16\x62\xce\x42\xcc\x59\x88\x39\x0b\xcf\x38\x67\xe1\xde\x84\xc1\x21\x39\x0b\xfb\x5e\x16\x30\x67\xe1\x49\x73\x16\x9e\x27\x42\x85\xd9\x0b\xcf\xf3\xaa\x32\x05\x9b\x35\x1d\x64\xe8\x98\xd9\x0b\x4f\x44\x1a\xef\x90\xbd\xb0\xb6\x85\xd3\xcb\x5e\x88\x5c\xf0\x74\xb8\xe0\xe1\x32\x32\x4e\x19\xcf\xac\x7d\xf8\x05\xa5\x62\xc4\x98\x30\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\xb0\x13\x18\x35\x8c\x09\xc3\x98\x30\x8c\x09\xc3\x98\xb0\x69\xc1\xf8\x2f\x26\xf9\xe2\x4e\xd8\x7d\xff\xac\x8b\x53\x86\x3f\x4f\x87\x4e\xf6\x4c\xb7\x38\x79\xb6\xb4\xb4\x55\x90\x1a\x45\x6a\xf4\xc0\x85\x72\x02\x05\xff\xc9\x75\x44\x7d\x5b\xf3\x7c\x72\x29\x8e\x10\x42\xb0\x9d\x44\x11\x0d\x0f\xa9\x31\x3c\x3b\x67\x4f\x44\x8a\x0c\x29\x32\xa4\xc8\x90\x22\x43\x8a\x0c\x29\x32\xa4\xc8\x90\x22\x43\x8a\x0c\x29\x32\xa4\xc8\x90\x22\x43\x8a\xec\x04\x46\x0d\x29\x32\xa4\xc8\x90\x22\x43\x8a\xec\xe4\x70\xee\x94\x63\x1f\x4f\x93\x36\xf1\x98\xa1\x2f\x98\x2f\x11\x63\x64\xb6\x7a\x73\x82\x18\x99\x41\x12\x25\x22\x4e\x4f\x6a\x70\xfa\x5e\x19\x12\x2f\xce\x82\xd2\x7b\x36\x39\x11\x77\x3a\xe2\xf7\x4b\x86\x88\x9b\xa1\x7e\x33\xf4\xcb\x82\x88\x72\x89\xba\xd5\x86\x72\x09\x94\x4b\x9c\xf9\x41\x7f\xe4\x4c\x87\x23\xe8\x13\x50\x0c\x77\x70\x6e\xc3\x31\x4e\x77\x4c\x6a\xf8\xf2\xce\xf7\xb1\xf0\x35\x4c\x6a\x88\x49\x0d\x31\xa9\x21\x26\x35\xc4\xa4\x86\x98\xd4\x10\x93\x1a\x9e\x79\x52\xc3\xdd\xe0\xfc\x43\xb3\x19\xb6\xde\x0b\x30\x8d\xe1\x84\xd2\x18\x4e\x1e\x62\xc2\xfc\x85\xe7\x79\x2b\x99\x82\x79\x9a\x00\xd0\x73\xec\xc4\x85\xc7\xa4\x6d\x77\xcc\x58\x58\x4f\x58\x4e\x83\xab\x44\x1a\xf6\xc8\x34\xac\x5f\x9f\x6e\xb0\xd4\x84\x67\x50\x71\xa5\xf6\xe1\x67\x9d\xa1\xd0\x9b\x98\x1f\x45\x7a\x13\xc7\xce\x01\x91\x13\xe2\x7b\x4d\x0b\x5f\x4c\x74\xfc\xf4\x12\xdc\x62\xb0\x1c\x06\xcb\x61\xb0\x1c\x06\xcb\x3d\xa7\x60\xb9\xe6\x58\xb9\xe3\xa8\x0b\x8f\x12\x25\xd7\x11\x24\x37\x50\x4f\x5f\xb0\x46\xf4\x28\xa1\x7f\x1d\x91\x7f\x03\xf5\xb4\xca\x3a\x62\xcc\x1f\xc6\xfc\x61\xcc\x1f\xc6\xfc\x61\xcc\xdf\x51\x62\xfe\x1a\x42\xfe\x8e\x63\xc6\xc6\x07\xa2\x86\x6f\x33\x06\x28\x9e\x51\x80\x62\x67\x7c\xe2\x91\x9c\x98\x93\x45\x26\x76\x05\x26\x1e\xc9\x15\x9f\x62\x48\x62\x43\x44\xe2\x90\x70\x36\x96\xd8\x79\xbe\x00\xf6\x84\x91\xeb\x17\x03\x59\x23\x56\x8d\x58\x35\x62\xd5\x88\x55\x23\x56\x8d\x58\x35\x62\xd5\x88\x55\x23\x56\x8d\x58\x35\x62\xd5\x88\x55\x23\x56\x8d\x58\xf5\xd0\x66\x0c\xb1\x6a\xc4\xaa\x11\xab\x46\xac\xfa\x39\x62\xd5\xf0\xd6\xeb\x20\xce\x65\xa6\xee\xf7\x3b\xeb\xb0\x8d\x6b\xc0\xc3\xe8\x31\x0a\x73\x1a\xfb\x23\x47\x9d\x97\xff\x56\xbf\xdf\xd3\x9a\xce\xbd\x28\xe2\x37\xce\x51\xbb\x84\xd7\x5d\x16\x20\x54\x09\x55\x70\x08\x2d\x89\xb8\xcc\x18\x2d\x0e\x5b\xc4\xc6\x8f\x8a\x8d\x3f\x35\x44\x93\x6d\x4f\xf3\x4f\x3e\x2c\x3c\xb5\xa8\x54\xd8\xee\xef\xd5\x45\xe3\x24\x90\x39\x8c\xe2\x31\x71\xf3\xed\xe9\x41\x14\x1d\x51\x74\x44\xd1\x11\x45\x47\x14\x1d\x51\x74\x44\xd1\x11\x45\x47\x14\x1d\x51\x74\x44\xd1\x11\x45\x47\x14\x1d\x51\xf4\xa1\xcd\x18\xa2\xe8\x88\xa2\x23\x8a\x8e\x28\xfa\x8b\x42\xd1\x77\x2b\x22\x61\x16\x89\x87\xa0\x73\x6b\x11\xac\x22\x7c\x24\x24\x7d\x56\xb8\x82\xe0\xee\x1a\xb7\x41\x79\x93\x85\x8f\x7b\x59\xba\xe1\x79\xef\x46\x1c\x7e\xea\x38\x3c\x62\xf0\x2d\x18\x3c\xe2\xef\x88\xbf\x23\xfe\x8e\xf8\x3b\xe2\xef\x88\xbf\x4f\x07\xb9\x45\xfc\x1d\xf1\x77\xc4\xdf\x11\x7f\x47\xfc\x1d\xf1\x77\xc4\xdf\x11\x7f\x1f\x32\x03\x73\xdb\x4d\x74\x7a\xf9\x98\x91\x39\x40\xe6\x00\x99\x03\x64\x0e\x5e\x04\x73\x30\x9a\xf0\x1e\x15\xf7\xcf\x1b\xe9\x47\xa9\xfd\x34\xa5\xf6\x88\xf1\x23\xc6\x8f\x18\x3f\x62\xfc\x88\xf1\x23\xc6\x8f\x18\x3f\x62\xfc\x88\xf1\x23\xc6\x8f\x18\x3f\x62\xfc\x88\xf1\x23\xc6\x3f\xb4\x19\x43\xa4\x1c\x91\x72\x44\xca\x11\x29\x7f\x19\x48\xf9\x98\xe2\x7a\x54\xd5\x23\xd6\xde\x8c\xb5\x23\xce\x3e\x2d\x39\x3d\x62\xec\x88\xb1\x23\xc6\x8e\x18\x3b\x62\xec\x88\xb1\x23\xc6\x8e\x18\x3b\x62\xec\x88\xb1\x23\xc6\x8e\x18\x3b\x62\xec\x88\xb1\x0f\x6d\xc6\x1a\x74\xf4\x28\xa0\x47\x5a\x00\x69\x01\xa4\x05\x90\x16\x38\x05\x2d\xc0\x5d\x31\x4e\x4d\x0a\xc0\x7f\xff\xeb\x7a\xb4\x84\xf6\x98\xc9\xfe\x79\x63\xfd\xae\xb8\x6b\x88\xc9\xec\x4b\xef\x98\x8c\xc2\x1e\xb3\xe8\x20\xfa\x8f\xe8\x3f\xa2\xff\x88\xfe\x23\xfa\x8f\xe8\x3f\xa2\xff\xe5\x0e\x23\xfa\x8f\xe8\x3f\xa2\xff\x88\xfe\x23\xfa\x8f\xe8\xff\xa0\x66\xcc\x74\x0d\x48\x00\x35\x5f\xea\xb2\x4a\x64\x20\x12\x36\x23\x32\x0f\x00\x1f\x85\x3b\x12\xa3\x6b\x0d\xb1\x25\xa9\x80\xa1\xac\x27\x08\x00\x64\x40\x96\x00\x59\x02\x64\x09\x90\x25\x40\x96\xe0\xe4\x2c\xc1\xe0\x31\x05\x98\xa9\x7f\xeb\x13\xe4\x19\xda\x79\x06\xe4\x18\x26\x10\x5d\x80\xfc\x02\xf2\x0b\xc8\x2f\x20\xbf\x80\xfc\x02\xf2\x0b\xc8\x2f\x20\xbf\x50\xee\x30\xf2\x0b\xc8\x2f\x20\xbf\x80\xfc\x02\xf2\x0b\xc8\x2f\x8c\x16\x5d\x70\x26\xe9\xf9\x91\x12\x41\x4a\x04\x29\x11\xa4\x44\x90\x12\x79\x5e\x94\xc8\xf0\x11\x13\x18\x2a\xf1\xec\x29\x0c\x8c\x91\x98\x58\x8c\x04\x92\x17\x48\x5e\x20\x79\x81\xe4\x05\x92\x17\x48\x5e\x20\x79\x81\xe4\x05\x92\x17\x48\x5e\x20\x79\x81\xe4\x05\x92\x17\x48\x5e\x0c\x6d\xc6\x90\x09\x40\x26\x00\x99\x00\x64\x02\x90\x09\x78\x66\x4c\xc0\x28\x51\x11\x18\x0e\x81\x5c\x42\x2b\x97\x80\x3c\xc2\x44\xe2\x20\x90\x43\x40\x0e\x01\x39\x04\xe4\x10\x90\x43\x40\x0e\x01\x39\x04\xe4\x10\x90\x43\x40\x0e\x01\x39\x04\xe4\x10\x90\x43\x40\x0e\x61\x68\x33\x56\x0d\x80\xc0\xc8\x07\xe4\x3b\x90\xef\x40\xbe\x63\x2c\x5f\x12\xf9\x8e\x17\xca\x77\x60\x6d\x88\xed\x4f\x90\xa4\xe8\x41\x52\x54\x2a\x42\xfc\x28\xd2\x9b\x38\x76\xcc\x85\x44\xd6\x62\x42\xd1\x0f\x98\xc1\x09\x09\x0c\x24\x30\x90\xc0\x40\x02\x03\x09\x0c\x24\x30\x90\xc0\x40\x02\x03\x09\x0c\x24\x30\x90\xc0\x40\x02\x03\x09\x8c\x91\xcc\x18\x22\xe7\x88\x9c\x23\x72\x8e\xc8\xf9\xf3\x46\xce\x31\x39\x10\x62\xe5\x3d\xb1\x72\x04\xc9\x27\x0e\x92\x23\x3a\x8e\xe8\x38\xa2\xe3\x88\x8e\x23\x3a\x8e\xe8\x38\xa2\xe3\x88\x8e\x23\x3a\x8e\xe8\x38\xa2\xe3\x88\x8e\x23\x3a\x8e\xe8\xf8\xd0\x66\x0c\xd1\x71\x44\xc7\x11\x1d\x47\x74\xfc\x19\xa2\xe3\x0b\x96\xd1\xd7\xd7\x3d\x71\xf1\x15\xcb\xca\xae\x8a\x1e\x89\x56\xf8\x7a\x2c\x5c\xfa\x84\x90\xf8\x88\x88\x35\x4c\x47\x07\x6c\xbd\x62\x59\x0d\x68\x0d\xdf\xbc\xb9\xfd\xf0\x69\x6b\x56\xa6\x86\x56\x7b\x8d\x84\xc4\xfb\xa3\x40\xd6\x7f\x70\xff\x7f\xc7\xad\x10\xc4\xb9\xcc\x58\xba\x47\xa0\x85\xbe\xd1\xa6\xc6\xc6\x5a\x5f\xca\x26\x8f\x7a\xab\xdf\x5b\x57\x31\x19\x59\x9f\xa3\xef\x21\x35\x57\x4d\x9b\xa8\x65\xa6\xea\x88\x04\x6f\x7d\x36\x5b\xa0\x46\xb7\x0d\xc9\x04\x24\x13\x90\x4c\x40\x32\xe1\x59\x93\x09\x2d\x6c\x42\x9d\x1f\x5b\x78\x00\xc3\x1e\xad\x47\xe1\x14\xba\x48\x85\xb3\xe9\x70\x5f\xf8\xbd\x0b\x7f\x1f\xb2\xc3\xd5\xfb\x2b\xa2\xf0\x88\xc2\x23\x0a\x8f\x28\x3c\xa2\xf0\xc7\x41\xe1\x9b\x60\xf8\x63\x1a\x35\x04\xb6\xcf\x08\xd8\xee\x46\xb6\x8f\xea\x1e\x9c\x0c\xdf\xee\x04\xb8\x87\x1c\x86\x2a\xca\x7d\x16\x30\x77\x13\xce\x5d\x3f\x30\x15\x74\xe7\x24\x10\xe7\x1c\xc0\x44\x83\x37\xcd\xb7\x51\xa3\xf1\xc0\xcd\x0e\x3d\xee\x31\xa5\xb8\xcd\x60\x59\x45\x98\xeb\xa3\x72\x15\x75\xae\x90\x2d\xa8\xaa\x76\x24\x08\x3d\x33\x00\xf5\xc4\xf8\xa6\x1e\xb5\xe1\x11\x4e\xbb\x47\x17\x22\xdc\x6c\x6d\xd1\xca\x1f\x2b\x59\xdf\xc6\xdd\x6c\xcd\x1b\x6d\x04\xef\xc3\x38\x55\x33\x08\x11\x09\x68\x66\xbd\x8c\x12\xfc\x61\xaf\x40\xca\x8d\x5f\x30\x92\xa8\xcd\xa0\xee\x4f\x73\x72\xc3\x49\xc4\x35\xf8\x28\x52\x92\x73\x87\x5f\x86\x24\x4c\x37\x9f\x72\x4e\xc2\x28\x65\xca\x86\x30\x07\x8a\x81\xd9\x55\x2e\xb0\x41\x05\xed\x89\x67\x30\x18\xb2\xcc\x53\xb8\x2f\x25\xa9\x08\x98\x94\xc6\x33\xf1\xae\x7d\x73\xf2\x1b\xfc\x22\xdc\x43\xc1\xb9\x54\x6e\xc9\x4d\x1c\xbf\x01\x4f\x34\x4c\x37\x24\xcd\x39\x91\x19\x55\xf6\xc0\xba\xdf\xe6\x75\x9e\x70\xb0\x58\x03\xba\xad\xcf\xe0\xa0\x6e\x39\xa4\xbf\x6f\x3f\xa4\xdf\xea\x5b\xce\x29\xdb\xf7\x7d\x5b\xfb\x6e\x82\x80\x25\x27\x6d\xe0\x78\x56\x0e\xcc\xc6\xf9\x58\x39\x7d\xf5\x6d\xb6\x73\xfa\x73\x12\x88\x38\x66\x81\x75\x39\xd1\xe6\xed\x60\xf3\xf4\x08\x36\xda\x3c\x37\xb0\xc8\xef\x21\xbf\x87\xfc\x1e\xf2\x7b\xc8\xef\x21\xbf\x87\xfc\x1e\xf2\x7b\xc8\xef\x21\xbf\x87\xfc\x1e\xf2\x7b\xc8\xef\x21\xbf\x87\xfc\x1e\xf2\x7b\xc8\xef\x21\xbf\xd7\x11\xc2\x70\x97\xd1\x2c\x97\x27\x81\x3d\xb5\x89\x2d\x60\xc2\x33\x82\x40\x0f\x4d\xc3\xf3\x82\x13\x29\x8c\x1f\x81\x0a\xff\xec\x13\x3b\x56\x13\x30\xb3\x5b\xe5\x75\x30\x78\x65\x54\x0f\x71\xef\x1d\x70\x6f\x35\x7e\x7b\x30\xbd\xe7\x46\xc5\x8d\x77\xa4\xaa\xd5\x79\x46\xa7\x68\xde\xba\x97\x92\x98\x06\x0c\xb7\xd3\x21\xdb\x09\x86\x10\xb5\x13\xa8\x9d\x40\xed\xc4\x73\xd6\x4e\x8c\x28\x4d\xc8\xcf\xc9\xa0\xf4\x54\x26\xa0\x02\x6f\x48\x35\xc2\x51\xac\xc8\xc0\xb7\xde\x77\xd0\xa5\x5f\x60\x61\xb4\x5c\x7e\xd1\x68\x9c\xd2\x68\x8c\x85\xac\xf9\x60\x59\xc4\x89\xd4\xf8\x16\x59\xb0\xa5\xd0\xa8\xb7\x85\xa6\x0b\x31\x8b\x61\x03\x60\x20\x72\xa6\xe5\x09\x0b\x46\xb8\xe0\x57\x9c\xad\x28\x0c\xb7\xf9\xe1\x39\xf9\xec\x24\x23\x9a\xa6\x72\x13\x6d\x8e\x9f\x68\xbd\x66\x61\x44\x33\x16\x6f\x8c\x26\xc2\x57\xbc\xf0\x28\x9e\x19\x84\x0b\x50\x5d\xb2\x4a\x95\x1b\x9c\xb0\x34\x12\xa1\x83\x03\x0b\x8f\x58\xf5\xdb\x8d\x79\x2e\x55\x23\x7d\x3c\x98\xaa\x6f\xda\x0e\x99\x1f\x59\x6a\xc2\xc6\xbe\x62\xae\xdb\xb9\x66\x94\xd7\xb6\xb1\x66\xfe\xa0\x4d\xb7\xd0\xa4\x93\xc2\x83\xef\xbc\x94\xe5\x49\xcc\xa8\x64\x8e\xc2\xbb\x4d\x45\x42\x57\x30\xcb\xb7\x22\x8e\x82\xcd\x4c\x0f\xb4\x26\xad\xec\x80\x15\x39\xcf\xd5\x52\x78\x3d\xff\xcb\x9c\xdc\xe9\x59\xd7\x53\x90\x30\x1e\x32\x9e\x15\x9c\x33\x23\x22\x4d\x1e\x28\x57\xc3\x66\x50\x9a\xeb\x25\x8d\xad\xea\xe4\xfe\x42\x7f\x7c\x7f\x41\x96\x11\x07\x80\x25\x75\x3f\x46\xc3\x10\xd8\x9d\x6b\x0d\x3c\x86\x05\x48\xaf\x5f\x7f\x29\x8b\x2f\x69\xa5\xc7\x9c\xbc\x8f\x60\x6f\x7a\x4d\x17\xe9\x76\xdf\x80\xbe\xd3\xa2\x2b\x2d\x34\x81\x93\x43\x64\x0f\x75\x93\xa7\x5b\xf8\xce\xf6\x6d\x9c\xa9\xeb\x71\x18\x42\xc7\xd4\x19\xf4\x20\x9e\xc8\x8a\xa6\x0b\xba\x2a\xa9\x06\xdd\x41\xc2\xd2\xa5\x48\xd7\x6a\xc4\x6b\x47\xe3\x97\x4a\x7f\x9a\x07\x03\xb6\xa6\xdd\x57\x89\x1e\xb9\x48\xad\xf9\x20\x0a\x0b\xc9\x08\x30\xe9\x20\xe2\x71\x33\x28\x59\x66\xd1\x35\xcb\x95\xcf\xbd\xa9\xb2\x2c\xab\xc5\xe5\xae\xcc\xde\x0a\x2a\x3f\x36\x27\x5a\xc6\x0a\xcc\xad\x7f\x9a\x5e\xea\x3e\x5c\x92\x2b\xb3\xbc\xca\xcb\x4f\xfe\x40\x2e\xff\x4a\x83\x2f\xca\xad\xe2\xa1\x7a\x8a\xc6\xb1\x78\x82\x87\x2a\x03\xa7\x05\x14\x66\x17\x97\x5f\x62\x7b\xb0\x70\x6f\xfa\x81\x5c\xfe\x28\x52\xe6\xbd\x96\x04\x54\x06\x54\x59\x71\x3b\x3e\x60\x9d\xf4\xfb\xa4\x3e\xee\xb7\x5e\xb8\x74\xef\xa8\x5b\x6e\x49\x75\xb1\x9e\xc1\x5d\xe1\x10\xc0\xfc\x38\x42\xe6\x29\x43\xfa\x67\x74\x63\x48\x80\xc1\x69\xbc\x30\x14\xf0\xbb\xe6\x8d\x0e\x43\xa3\xaa\xf7\x83\x2b\xf8\xf5\x7f\x6b\xbe\x2a\xac\x59\xba\x62\x9d\x4f\xc9\x2c\xa5\x19\x5b\x45\xc1\xd5\xd6\xf3\x2f\xf7\xd2\x92\x34\x54\xc4\x38\x57\xe4\xab\x65\xbf\xdf\x7a\x69\xa8\xf0\x12\x33\xb1\x4b\xcc\x14\xac\xd9\x34\x91\x25\x9f\x3b\x3f\x0b\x4b\x31\x6a\xe5\x15\xb5\xa8\xec\x8a\x6d\x6b\xad\x5d\x7c\xf0\x6f\x85\x05\x4d\x68\xe6\x25\xb2\xab\x1c\x3f\xe5\x59\x79\x71\x84\xee\xe0\xa9\x0f\xa7\x0c\x18\xd6\x3e\xfc\xf2\x72\x1e\x62\x30\x14\x06\x43\x61\x30\x14\x06\x43\x61\x30\x14\x06\x43\x61\x30\x14\x06\x43\x61\x30\x14\x06\x43\x61\x30\x14\x06\x43\x61\x30\xd4\x09\x8c\x1a\x06\x43\x61\x30\x14\x06\x43\x61\x30\xd4\x74\xd1\xf0\x97\x96\xe5\x70\x77\x08\x7c\xe7\xf4\x86\x53\x06\x49\x4f\x8c\x61\xf6\xce\x6b\x38\x79\x6a\xb2\x71\x43\x21\x27\x89\x9c\xe4\x80\x8b\xe6\xc4\x32\xfc\x93\x4b\x7e\xf6\x69\xd9\xb3\x4b\x5a\x38\x56\x4c\x40\x63\xb6\x42\x34\x61\x43\xa6\x29\x44\x4a\x0e\x29\x39\xa4\xe4\x90\x92\x43\x4a\x0e\x29\x39\xa4\xe4\x90\x92\x43\x4a\x0e\x29\x39\xa4\xe4\x90\x92\x43\x4a\xee\x04\x46\x0d\x29\x39\xa4\xe4\x90\x92\x43\x4a\xee\xe4\x60\xf0\x94\x83\x19\x4f\x9a\x9f\xf0\xe8\x51\x2a\x98\x98\x70\xea\x71\x2c\x43\x66\x24\x44\x6c\xfb\xd0\x54\x84\x17\x67\x47\xa2\x3d\xb7\xe4\x83\xbb\x1f\x91\x07\x65\x1d\xc4\x2d\x33\x40\xba\x41\x94\x34\xa0\xa4\x01\x25\x0d\x64\xca\x92\x86\xe7\x96\x52\x70\x2c\xdd\x00\xca\xdd\x06\x4e\x22\x38\x86\x6d\xc0\xec\x81\x2f\xcf\x22\x8c\x85\x7b\x61\xf6\x40\xcc\x1e\x88\xd9\x03\x31\x7b\x20\x66\x0f\xc4\xec\x81\x98\x3d\xf0\x79\x64\x0f\xdc\x03\x66\x1f\x28\x6d\x60\xeb\x8d\x01\xf3\x05\x4e\x2f\x5f\xe0\xe4\xa1\x2b\x4c\x14\x78\x9e\xf7\x95\x29\x18\xae\x89\x01\x45\x27\xca\x10\x78\x74\xd2\x75\xbf\xd4\x80\xdb\x14\x24\xe6\x04\xec\xc1\xa5\xaa\xdf\x90\x09\x0d\x2c\x93\x0a\xff\xfd\xaf\x6b\xbf\xe8\xdb\x20\xa9\x02\xcf\xa4\xb6\x48\xed\xc3\x2f\x24\x55\xe0\x47\x3b\xfd\xe1\x1e\x99\x80\x31\x42\x09\x23\x94\x30\x42\x09\x23\x94\x30\x42\x09\x23\x94\x30\x42\x69\x84\x0e\x63\x84\x12\x46\x28\x61\x84\x12\x46\x28\x61\x84\x12\x46\x28\x61\x84\x12\x46\x28\xed\xea\x1e\x60\x84\x12\x46\x28\x8d\x84\x8c\x7b\x70\xd1\x8b\x48\x1a\x78\x50\xdd\x9c\x7e\x49\x03\xcf\x04\x2e\x3d\x31\x9a\xd9\x9e\x34\xf0\x20\x3c\x73\x22\x5a\x7b\x2c\xe6\x8f\x4c\xe5\x38\x8b\xe6\x14\x5a\xfb\xbe\x0d\x3b\x7e\xfa\xc0\x93\x97\x7f\x3b\x62\xfa\xc0\x43\xcc\xd7\x5e\xe9\x03\xd1\x98\x0d\x99\x3e\x10\x69\x3a\xa4\xe9\x90\xa6\x43\x9a\x0e\x69\x3a\xa4\xe9\x90\xa6\x43\x9a\x0e\x69\x3a\xa4\xe9\x90\xa6\x43\x9a\x0e\x69\xba\xca\x59\x8f\x34\x1d\xd2\x74\x48\xd3\x21\x4d\xf7\x72\x69\xba\x29\xc7\x35\x1e\x3f\x91\xe0\x41\xb4\x1d\x26\x12\xdc\x37\xf8\xc5\xd8\x7b\x08\xdb\x51\xbb\x4f\x4d\x16\x91\x81\x48\xd8\x8c\xc8\x3c\x80\x63\x19\x4e\x3b\x46\xd7\x7a\x2f\x27\xa9\x00\xff\xa2\x3e\xa4\x07\xb0\x4f\x8c\xeb\x39\x3c\xae\xe7\xe0\xd4\x89\x88\xeb\x1f\x9a\x3a\xb1\x1d\xcb\x3f\x1b\x2a\xf1\x59\x24\x51\x3c\xc8\x3c\xec\x9e\x44\x11\x37\xcf\x00\x49\x14\x51\xe2\x81\x12\x0f\x94\x78\x34\x2d\x9a\xe9\x4a\x3c\x9e\x45\x3a\xc5\x23\xe8\x28\x50\x08\x38\x84\x76\xe2\x68\x56\x02\x13\x2b\xbe\x3c\xdb\x30\x16\x0e\x88\x89\x15\x31\xb1\x22\x26\x56\xc4\xc4\x8a\x98\x58\x11\x13\x2b\x62\x62\xc5\x33\x4e\xac\x78\x18\xed\x70\x48\x62\xc5\xbe\x77\x07\x4c\xac\x38\x91\xc4\x8a\xe7\x09\x67\x61\x8a\xc5\xf3\xbc\xb9\x4c\xc1\x84\x4d\x0c\x3c\x3a\x66\x8a\xc5\x53\xd2\xd1\x3b\xa4\x58\xac\x6d\xe6\xf4\x52\x2c\x22\xcb\x3c\x31\x96\x79\xb8\xb4\x91\x53\xc6\x3d\x6b\x1f\x7e\x91\xf9\x22\x31\x02\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\xed\x04\x46\x0d\x23\xd0\x30\x02\x0d\x23\xd0\x30\x02\x6d\x82\xf8\xfe\x8b\xc9\x10\xb9\x3b\xa8\xdf\x3f\x35\xe4\x94\x21\xd1\x13\x23\x96\xbb\xe4\x84\x9c\x3c\xb5\xba\xbd\x7d\x90\x4c\x45\x32\x75\x88\xd5\x72\xaa\xd8\x80\x93\x4b\x92\x76\x6a\xd2\xf3\x49\xf8\x38\x56\x84\xc2\x76\xa6\x47\xb4\x4d\x03\xa7\x78\x44\x66\x0d\x99\x35\x64\xd6\x90\x59\x43\x66\x0d\x99\x35\x64\xd6\x90\x59\x43\x66\x0d\x99\x35\x64\xd6\x90\x59\x43\x66\xed\x04\x46\x0d\x99\x35\x64\xd6\x90\x59\x43\x66\xed\xe4\x60\xef\x94\x43\x2b\x4f\x93\xdb\xf1\xe8\x51\x34\x98\xd4\x11\xc3\x6d\xb6\x7a\x73\xaa\x70\x9b\x41\xb2\x39\x22\x76\x3f\x40\x1a\xc7\x8b\xf3\x21\x01\x9f\x4d\xe2\xc6\xdd\xcf\xfe\xfd\x32\x36\xe2\x06\x19\x26\x55\x23\x2a\x2f\x50\x79\x81\xca\x8b\xda\xc6\x9c\x40\x79\xf1\x6c\xd2\x31\x8e\xa5\x72\x40\xd5\xdd\x80\x09\x18\xc7\x38\xfb\x31\xf3\xe2\xcb\x3b\xf8\xc7\x42\xe9\x30\xf3\x22\x66\x5e\xc4\xcc\x8b\x98\x79\x11\x33\x2f\x62\xe6\x45\xcc\xbc\x78\xe6\x99\x17\xf7\x20\x05\x0e\x4d\xb9\xd8\x7a\x4d\xc0\x5c\x8b\x93\xcc\xb5\x38\x79\x3c\x0a\x93\x2c\x9e\xe7\x25\x65\x0a\xd6\x6a\x2a\x58\xd0\xb1\xb3\x2b\x1e\x9d\x10\xde\x31\xad\x62\x3d\x15\x3a\x0d\x16\x14\x09\xde\x53\x10\xbc\x7e\x79\xbe\xc1\xf2\x27\x9e\x41\xf9\x98\xda\x87\x5f\x48\x1a\x45\x6f\x8a\x7e\x14\xe9\x4d\x1c\x3b\xcf\x44\x4e\x8d\x49\x36\xcd\x7c\x31\x21\xfc\x13\x4d\xcf\x8b\x41\x7a\x18\xa4\x87\x41\x7a\x18\xa4\xf7\x9c\x82\xf4\x9a\x63\xf4\x8e\x23\x68\x3c\x4a\x74\x5e\x47\x70\xde\x40\x3d\x7d\xc1\xb2\xd4\xa3\x84\x1c\x76\x44\x1c\x0e\xd4\xd3\x2a\x4f\x89\xb1\x86\x18\x6b\x88\xb1\x86\x18\x6b\x88\xb1\x86\x47\x89\x35\x6c\x08\x35\x3c\x8e\x19\x1b\x1f\xa1\x1a\xbe\xcd\x18\x18\x79\x46\x81\x91\x9d\x71\x91\x47\x72\x62\x4e\x16\x11\xd9\x15\x10\x79\x24\x57\x7c\x8a\xa1\x90\x0d\x91\x90\x83\xe3\xdc\x58\x20\xe8\x25\x20\xdb\x53\x87\xb4\x5f\x0c\x96\x8d\x20\x36\x82\xd8\x08\x62\x23\x88\x8d\x20\x36\x82\xd8\x08\x62\x23\x88\x8d\x20\x36\x82\xd8\x08\x62\x23\x88\x8d\x20\x36\x82\xd8\x08\x62\x23\x88\x8d\x20\x36\x82\xd8\x08\x62\xef\x02\x62\xc3\xab\xaf\x83\x38\x97\x99\xba\xe4\xef\xac\xdc\x36\xfe\x01\x0f\xa3\xc7\x28\xcc\x69\xec\x0f\x1f\x75\xae\xfe\x5b\xfd\x7e\x4f\x8e\x3a\xf7\xa2\x92\xdf\x38\x6f\xed\x12\x5e\x77\x59\x20\x51\x25\x68\xc1\xa1\xb6\x24\xe2\x32\x63\xb4\x38\x71\x11\x34\x3f\x3e\x68\xfe\xd4\x16\x98\xb6\x3d\xe1\x3f\xf9\x50\xf1\xd4\xe2\x5d\x61\xf7\xbf\x57\xf7\x8e\x93\xc0\xe8\x30\x94\xc7\xc4\xd2\xb7\xa7\x07\x91\x75\x44\xd6\x11\x59\x47\x64\x1d\x91\x75\x44\xd6\x11\x59\x47\x64\x1d\x91\x75\x44\xd6\x11\x59\x47\x64\x1d\x91\x75\x44\xd6\x11\x59\x47\x64\x1d\x91\x75\x44\xd6\x11\x59\x1f\x04\x59\xdf\xad\xc8\x85\x59\x29\x1e\xaa\xce\xad\x59\xb0\xf2\xf1\x91\xd0\xf5\x59\xe1\x0f\x82\xcf\x6b\x7c\x07\xe5\x52\x16\x8e\xee\x65\xe9\x9a\xe7\xbd\x1b\xb1\xf9\xf3\xc1\xe6\x11\x97\x6f\xc1\xe5\x11\x93\x47\x4c\x1e\x31\x79\xc4\xe4\x11\x93\x47\x4c\x7e\x62\x68\x2e\x62\xf2\x88\xc9\x23\x26\x8f\x98\x3c\x62\xf2\x88\xc9\x23\x26\x8f\x98\xfc\x90\xb9\x9d\xdb\xae\xa3\xd3\xcb\xf4\x8c\x6c\x02\xb2\x09\xc8\x26\x20\x9b\xf0\x72\xd8\x84\xd1\x04\xfa\xa8\xcc\x7f\x29\xe8\x3f\x4a\xf2\xa7\x29\xc9\x47\xdc\x1f\x71\x7f\xc4\xfd\x11\xf7\x47\xdc\x1f\x71\x7f\xc4\xfd\x11\xf7\x47\xdc\x1f\x71\x7f\xc4\xfd\x11\xf7\x47\xdc\x1f\x71\x7f\x44\xcf\x11\x3d\x47\xf4\x1c\xd1\x73\x44\xcf\x0f\x43\xcf\xc7\x14\xe1\xa3\xfa\x1e\xf1\xf7\x3e\xf8\x3b\x62\xef\xd3\x92\xdd\x23\xee\x8e\xb8\x3b\xe2\xee\x88\xbb\x23\xee\x8e\xb8\x3b\xe2\xee\x88\xbb\x23\xee\x8e\xb8\x3b\xe2\xee\x88\xbb\x23\xee\x8e\xb8\xfb\x31\xf5\xf6\x28\xb4\x47\xaa\x00\xa9\x02\xa4\x0a\x90\x2a\x38\x19\x55\xc0\x5d\xad\x4f\x4d\x14\xc0\x7f\xff\xeb\x7a\xb4\x04\xf9\x98\x19\xff\xa5\xe0\xff\xae\x8a\x6c\x88\xc9\xf1\x4b\xef\x98\x8c\x12\x1f\x33\xf0\x20\x23\x80\x8c\x00\x32\x02\xc8\x08\x20\x23\x80\x8c\x00\x32\x02\xc8\x08\x20\x23\x80\x8c\x00\x32\x02\xc8\x08\x20\x23\x30\xb6\x19\x33\x5d\x03\x62\x40\xcd\x97\xba\xb1\x12\x19\x88\x84\xcd\x88\xcc\x03\xc0\x4c\xe1\x8e\xc4\xe8\x5a\xc3\x6e\x49\x2a\x60\x28\xeb\x49\x03\x40\x1a\x90\x39\x40\xe6\x00\x99\x03\x64\x0e\x90\x39\x98\x06\x73\x30\x78\xec\x01\x66\xfe\xdf\xfa\x04\xb9\x87\xbe\xdc\x03\xf2\x0e\x13\x88\x42\x40\xce\x01\x39\x07\xe4\x1c\x90\x73\x40\xce\x01\x39\x07\xe4\x1c\x90\x73\x40\xce\x01\x39\x07\xe4\x1c\x90\x73\x40\xce\x01\x39\x87\x63\x46\x21\x9c\x49\xba\x7f\xa4\x49\x90\x26\x41\x9a\x04\x69\x12\xa4\x49\x9e\x21\x4d\x32\x7c\x64\x05\x86\x54\xbc\x20\x5a\x03\x63\x29\x26\x16\x4b\x81\x84\x06\x12\x1a\x48\x68\x20\xa1\x81\x84\x06\x12\x1a\x48\x68\x20\xa1\x81\x84\x06\x12\x1a\x48\x68\x20\xa1\x81\x84\x06\x12\x1a\xc8\x0e\xec\xd6\x35\x64\x07\x90\x1d\x40\x76\x00\xd9\x81\x17\xcc\x0e\x8c\x12\x3d\x81\x61\x13\xc8\x2f\xf4\xe4\x17\x90\x5b\x98\x48\xbc\x04\xf2\x0a\xc8\x2b\x20\xaf\x80\xbc\x02\xf2\x0a\xc8\x2b\x20\xaf\x80\xbc\x02\xf2\x0a\xc8\x2b\x20\xaf\x80\xbc\x02\xf2\x0a\xc8\x2b\x1c\x25\x50\x02\x23\x24\x90\x03\x41\x0e\x04\x39\x90\xb1\x7c\x49\xe4\x40\x5e\x32\x07\x82\xb5\x26\xb6\x3f\x41\xe2\x62\x27\xe2\xa2\x52\x61\xe2\x47\x91\xde\xc4\xb1\x63\x33\x24\x32\x19\x13\x8a\x92\xc0\xec\x4f\x48\x6a\x20\xa9\x81\xa4\x06\x92\x1a\x48\x6a\x20\xa9\x81\xa4\x46\xa5\xc3\x48\x6a\x20\xa9\x81\xa4\x06\x92\x1a\x48\x6a\x20\xa9\x81\x68\x3a\xa2\xe9\x88\xa6\x23\x9a\xbe\x9b\x2b\x8e\x68\x3a\x26\x16\x42\xfc\x7c\x67\xfc\x1c\x81\xf3\x89\x03\xe7\x88\x98\x23\x62\x8e\x88\x39\x22\xe6\x88\x98\x23\x62\x8e\x88\x39\x22\xe6\x88\x98\x23\x62\x8e\x88\x39\x22\xe6\x88\x98\x23\x62\x8e\x88\x39\x22\xe6\x88\x98\x23\x62\x8e\x88\x79\x81\x98\xcb\xe0\x81\x85\x79\xac\x9c\x66\x83\x94\xf7\x84\xc5\x57\x2c\x23\x11\x5f\x8a\x74\xed\x26\x99\x12\x8d\xda\xb5\x01\xd8\x63\x21\xd3\x27\x04\xc5\x07\xc2\xac\x8b\x99\xe8\x00\xa9\x57\x2c\xbb\x73\xcf\xde\xdc\x7e\xf8\x5b\x69\xd0\xa7\x06\x42\xbb\x06\x8e\x02\x41\xff\xc1\xfd\xff\x8e\x55\x6d\xf9\x9f\x1d\x56\x77\xc9\xf1\xd6\xfb\x1a\x97\xf6\x81\x4b\xbb\x27\x0f\x53\x5a\xe2\x86\x7e\xb9\xb9\xfd\xf0\x69\x6b\x1e\x26\xb8\xda\x6d\x23\xa1\xf2\xc4\x34\x16\x7d\x92\x46\x22\x8d\xb2\x4d\x10\x53\x29\x7b\x13\x9f\x1a\x85\x49\x8d\x5f\x68\xfd\x7f\x9b\x27\xed\xd6\xbc\xf3\xad\x7a\x27\x72\x96\x27\xd8\x24\x6a\x7e\xb6\x76\x49\xfd\xb4\xd4\x91\x5c\xde\xda\x6b\xf6\x8e\x1a\xaf\x14\x48\x74\x21\xd1\x85\x44\x17\x12\x5d\xcf\x9a\xe8\x6a\x61\xba\xea\xee\x58\x85\x75\x1f\xf6\x68\x3d\x0a\xdf\xd5\x45\x78\x9d\x4d\x87\xfb\x52\x43\x5d\xdc\xd0\x90\x1d\xae\x62\x2b\xc8\x10\x21\x43\x84\x0c\x11\x32\x44\xc8\x10\x1d\x87\x21\x6a\xa2\x88\x8e\x69\xd4\x90\x74\x39\x23\xd2\xa5\x9b\x75\x39\xaa\x7b\x70\x32\xee\xa5\x93\x7c\x19\x72\x18\xaa\x0c\xcc\x59\x50\x30\x4d\x1c\x4c\xfd\xc0\x54\x10\x9d\x93\xc0\x97\x73\x0f\x28\x34\x48\xd3\xbc\x04\x1b\x8d\x87\x5c\x76\x28\xc6\x0f\x16\x8b\x6f\x41\xa0\xdb\x22\xf1\x5a\x80\xac\xbf\x5a\x5c\xc8\x16\xc4\x54\x3b\x0f\x84\x9e\x0f\x38\x7a\x2a\xec\x52\x8f\xd4\x30\xe8\xa5\xdd\x7f\x0b\x11\x6e\xb6\xb6\x5f\xe5\x8f\x95\xac\x84\x23\x6f\xa4\xe6\x4d\x34\x82\x6b\x61\x3c\xa6\x19\x84\x2a\x05\x34\xb3\x2e\x44\x09\xdb\xb0\xf7\x1b\xe5\xa3\x2f\x18\x49\xd4\xaa\x57\x97\xa3\x39\xb9\xe1\x24\xe2\x1a\x59\x14\x29\xc9\xb9\x03\x27\x43\x12\xa6\x9b\x4f\x39\x27\x61\x94\x32\x65\x20\x98\x43\xbc\xc0\xa6\x2a\xff\xd6\x40\x7e\xf6\x38\x33\x00\x0b\x59\xe6\x29\x5c\x86\x92\x54\x04\x4c\x4a\xe3\x76\x78\x77\xba\x39\xf9\x0d\x7e\x11\x2e\x99\xe0\x39\x2a\x9f\xe3\x26\x8e\xdf\x80\x9b\x19\xa6\x1b\x92\xe6\x9c\xc8\x8c\xaa\xc3\xde\xfa\xd6\xe6\x75\x9e\x62\xb5\x58\x04\xba\xad\xcf\xe1\x14\x6e\x39\x81\xbf\x6f\x3f\x81\xdf\xea\x3b\xcc\x49\x1b\xf8\x7d\x5b\x03\x6f\x82\x80\x25\xa7\x6d\xe1\x78\x46\x0c\x4c\xc4\xa4\x8d\x98\xbe\xcd\x36\x9b\x31\xfd\x39\x09\x44\x1c\xb3\xc0\x7a\x91\x68\xd2\x3a\x4c\x9a\x1e\xb5\x2d\x93\xf6\xd6\x8d\x22\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x2f\x9e\x9a\x6b\x89\x2c\xb8\xcb\x68\x96\x9f\x06\xd1\xd4\x26\xb6\x80\x03\xa7\x8d\x6e\x1e\x9a\xd0\xe9\x05\xa7\xe4\x18\x3f\x96\x19\xfe\xe9\x13\x85\xd8\x10\xba\xb2\x5b\xb9\x7f\xb0\x6b\x65\xf0\x0e\x61\xec\x0e\x18\x5b\x8d\xd9\xf1\xa2\x4a\x3a\xed\xca\x9d\xbe\xf4\xc1\xc5\xf1\x2b\x5c\xc0\x16\xea\xbf\x68\x90\xcd\x09\x79\xaf\xfe\xb5\x7f\x5f\xd3\x88\x67\x34\xe2\x92\x04\x71\x2e\x33\x96\x5e\x99\x59\x0f\x0c\xd0\x42\xe2\xe8\x0b\x23\x97\x2e\x71\xdf\x65\x9d\xa5\x80\x57\x9f\xc6\x84\xba\xae\x3a\x5c\x7d\x61\x3b\xcd\x42\xe8\x2d\xf4\x53\xed\xe1\x44\xda\x3e\x99\x9b\x45\x2e\xd5\x85\x81\x72\x7d\xc3\xd3\x86\xb1\xbe\x7b\xea\x1d\x67\x60\x09\xa7\xc9\xed\xa9\xd3\x66\xda\xc6\x2f\x6f\x3d\x0e\x93\x98\x06\x0c\x4f\xc4\x5d\x4f\x44\x18\x36\x14\xab\xa0\x58\x05\xc5\x2a\xcf\x50\xac\x32\xa2\x14\x24\x9f\xb8\xb9\xe8\xa9\x04\x41\x41\xe3\xbe\xea\x8f\xd1\x6d\xc4\xc0\x28\xc3\x3b\xe8\xc6\x2f\xb0\x00\xd0\x22\x4c\xd4\x22\x8c\x85\x64\xfa\xe0\x64\xc4\x89\xd4\x78\x22\x59\xb0\xa5\xd0\x2c\x83\xa5\x02\x0a\xf1\x90\x61\x5f\x60\x20\x72\xa6\xe5\x20\x0b\x46\xb8\xe0\x57\x9c\xad\x28\x0c\xb7\xf9\xe1\x39\xf9\xec\x24\x3a\x9a\x16\x74\x13\x6d\x8e\x99\x68\xbd\x66\x61\x44\x33\x16\x6f\x8c\x06\xc5\x57\x18\xf1\x28\x9e\x19\x44\x11\x50\x74\xb2\x4a\x95\x33\x9b\xb0\x34\x12\xa1\x83\x5f\x0b\xbf\x56\xf5\xdb\x8d\x79\x2e\x55\x23\x7d\xfc\x9d\xaa\x6f\xda\x0e\x99\x1f\x59\x7a\xd7\xa7\x48\x7d\x01\xda\xb9\x66\x94\xd7\xb6\xb1\x66\xfe\xa0\x4d\xb7\xd0\xa4\x93\xc2\xb1\xef\xbc\x42\x04\x49\xcc\xa8\x64\x8e\x32\xbd\x4d\x45\x42\x57\x30\xcb\xb7\x22\x8e\x82\xcd\x4c\x0f\xb4\x26\x09\xed\x80\x15\x95\x0c\xd4\x52\x78\x3d\xff\xcb\x9c\x78\x57\xf1\x90\x25\x8c\x87\x8c\x67\x05\xc7\xcf\x88\x48\x93\x07\xca\xd5\xb0\x19\x88\xec\x7a\x49\x63\xab\xf2\xb9\xbf\xd0\x1f\xdf\x5f\x90\x65\xc4\x01\xdd\x4a\xdd\x8f\xd1\x30\x04\x36\xed\x5a\x03\xbd\x61\x41\x8a\xe8\xd7\x5f\xca\xe2\x4b\x5a\x59\x33\x27\xef\x23\xd8\x9b\x5e\xd3\x45\xba\xdd\x37\xa0\x4b\xb5\xc8\x4d\x0b\x7b\xe0\xe4\x10\xd9\x43\xdd\xe4\xe9\x16\xbe\xb3\x7d\x1b\x67\xea\x7a\x1c\x86\xd0\x31\x75\x06\x3d\x88\x27\xb2\xa2\xe9\x82\xae\x4a\x6a\x4c\x77\x90\xb0\x74\x29\xd2\xb5\x1a\xf1\xda\xd1\xf8\xa5\xd2\x9f\xe6\xc1\x80\xad\x69\xf7\x55\xa2\x47\x2e\x52\x6b\x3e\x88\xc2\x42\xa2\x03\xca\x05\x10\x4d\xb9\x19\x94\x90\x05\x0c\x3e\xb5\xda\x84\xb9\x37\x55\x96\xd5\xb6\xa0\x68\x01\xc9\x94\x7f\x6c\x4e\xb4\x24\x18\x98\x72\xff\x34\xbd\xd4\x7d\xb8\x24\x57\x66\x79\x95\x97\x9f\xfc\x81\x5c\xfe\x95\x06\x5f\x94\xc7\xc4\x43\xf5\x14\x8d\x63\xf1\x04\x0f\x55\x06\x4e\x0b\x56\xcc\x2e\x2e\xbf\xc4\xf6\x60\xe1\xde\xf4\x03\xb9\xfc\x51\xa4\xcc\x7b\x2d\x09\xa8\x0c\x68\xa8\x7a\x6f\xc6\x07\xac\x93\x7e\x9f\xd4\xc7\xfd\xd6\x0b\x97\xee\x1d\x75\xcb\x2d\xa9\x2e\xd6\x33\xb8\x08\x1c\x42\x50\x1c\x47\x14\x3e\x65\x0a\x65\xda\x97\x81\x04\x48\xb2\xc6\xbb\x40\x41\x77\x68\x6a\x6e\x6f\x18\xa9\xea\xfa\x5f\xc1\x0f\xff\x5b\xf3\x2d\x60\xcd\xd2\x15\xeb\x7c\x4a\x66\x29\xcd\xd8\x2a\x0a\xae\xb6\x9e\x7f\x81\xf7\x11\xe8\xfd\x99\x43\x56\x2d\x5b\xf9\xd6\xcb\xbc\x85\xf7\x93\x89\xdd\x4f\xa6\x60\xa8\x26\x0a\x08\xf9\x3a\x84\xa9\x5a\x81\x51\xeb\x21\xa9\x85\x64\x57\x69\x43\x43\xed\x5a\x83\x7f\x2b\x64\x72\x42\x33\x2f\x55\x5f\xe5\xb4\x29\xcf\xc1\xf3\xe6\xc5\x75\x1d\xbb\xfd\x12\x3b\xf6\xab\x68\x57\x9a\x1d\x2c\x6d\x77\xb6\x69\x22\x9f\xba\x3d\x81\x9f\xfc\xb8\xfb\xa9\xdd\x2b\x9e\x45\x15\xbb\x73\x3f\xb6\x31\x84\x10\x43\x08\x31\x84\x10\x43\x08\x9f\x53\x08\x21\x96\xb1\xc3\x32\x76\x58\xc6\x0e\xcb\xd8\x61\x24\x24\x46\x42\x62\x24\x24\x46\x42\x9e\x3a\x12\x12\xcb\xd8\xed\xd8\x66\x0c\xdb\x3c\xa3\xb0\x4d\x2c\x63\x87\x65\xec\x8e\x59\xc6\xae\x15\x28\xdf\x2d\x8c\xcc\xac\x0e\x0f\x24\xe7\xd6\x14\xd4\x56\x43\x1a\x04\x2c\x9f\x15\xee\x1f\xb8\xb8\xc6\x55\x50\x1e\x64\xe1\xd7\x5e\x96\x6e\x75\xde\xbb\x11\x6a\x9f\x28\xd4\x8e\x30\x7b\x0b\xcc\x8e\x10\x3b\x42\xec\x08\xb1\x23\xc4\x8e\x10\x3b\x42\xec\xa7\x07\x67\x11\x62\x47\x88\x1d\x21\x76\x84\xd8\x11\x62\x47\x88\x1d\x21\x76\x84\xd8\x51\xfa\x8a\xbc\x00\xf2\x02\xc8\x0b\x20\x2f\x70\x46\xbc\x80\xde\x22\x96\x14\xe8\x09\xf8\xaf\x20\xaa\x75\x29\xd2\xb5\x9b\x61\x4a\x34\xd0\xd8\x06\xab\x1f\x29\x86\xec\x1c\xc3\xd7\xf4\x34\x74\xc0\xe7\x2b\x96\xdd\xe9\x07\x6f\x6e\x3f\xfc\xad\x34\xdc\x53\x43\xcb\x5d\x03\x47\xc1\xca\xff\xe0\xfe\x7f\xdb\x62\x7e\x7c\xbd\xcb\x7a\x2e\x5d\x0e\xf4\x36\xc6\xc5\x7c\xc8\x62\xfe\xef\xc7\x2e\x3a\xa8\x58\xcf\xbf\xbd\xbe\xb9\xfd\xf0\x69\x6b\xdc\x27\xb8\xaa\x6d\x23\xc7\xab\x01\xd9\x7b\x71\x9b\xbf\xec\x16\xdb\xa4\x01\xa1\xd4\x78\x7b\xf6\x2a\x62\x69\x5a\x33\x1d\x93\xcf\x62\x74\x36\x0c\x69\xdf\xad\xa0\xa6\xc5\xed\x85\xda\x59\xc0\x3a\x58\xc8\xb0\x21\xc3\x86\x0c\x1b\x32\x6c\x58\x07\x0b\xeb\x60\x55\x3b\x8c\x75\xb0\x90\x9a\x42\x6a\x0a\xa9\x29\xa4\xa6\x9e\x2b\x35\x85\x75\xb0\x90\x38\xc1\x3a\x58\x58\x07\x0b\xeb\x60\x41\xf6\x2e\x83\x06\x42\xd6\xc6\x02\x2d\x1a\x0f\x95\xac\x55\x9e\x17\xf2\xf4\xc3\x13\xc0\x94\xe0\xcd\x6d\x69\x7a\x1d\x26\x56\x51\xa6\xd7\x8b\xd2\x85\x6c\x41\x43\xb5\xab\x40\xe8\xd9\x00\x9f\xc7\xc6\x25\xf5\x00\x1d\x84\x4c\x9e\xb0\xa2\x47\xfd\x26\xc1\xb4\x88\x98\x16\x71\xb8\x35\x73\xac\xfa\x1d\x7b\xb4\xeb\x18\xe9\x84\xf7\x68\xd8\x88\xe9\x23\xc5\x44\xad\x50\xcf\x3a\x22\x5e\x0e\x73\xb1\x44\x9b\xd4\x60\x93\x4c\x29\x11\x6b\x93\xde\xba\x41\x43\xde\x0c\x79\x33\xe4\xcd\x90\x37\x43\xde\x0c\x79\x33\xe4\xcd\x90\x37\x43\xde\x0c\x79\x33\xe4\xcd\x90\x37\x43\xde\x0c\x79\x33\xe4\xcd\x90\x37\x43\xde\xec\xa5\xf3\x66\x53\x2e\x7e\x56\x80\x7f\x93\x84\x30\x0f\xcd\xee\xf4\x82\xf3\x73\x9c\xae\x3c\x4e\x47\xcc\xc8\x6e\x69\xfe\xc0\x8a\x95\xa1\x3a\x84\xa8\xeb\x21\x6a\x35\x54\xa3\x87\x73\x74\xda\x0c\xaf\x20\x2d\xfb\x0a\x97\xab\x85\xfa\x2f\x1a\x64\x73\x42\xde\xab\x7f\xed\xdf\xd7\x34\xe2\x19\x8d\xb8\x24\x41\x9c\xcb\x8c\xa5\x45\x21\x52\x0d\xa2\x90\x38\xfa\xc2\xc8\xe5\x47\xba\x66\x32\xa1\x01\xbb\xac\xb3\x02\xf0\xea\xd3\x98\x47\xd7\x55\x87\x99\x2f\x6c\xa7\x59\x08\xbd\x85\x7e\xaa\x8d\x9a\x48\xdb\x27\x73\x6b\xc8\xa5\xba\x0c\x50\xee\x15\x37\xae\x75\x03\xf4\xeb\xce\xc0\xca\x4d\x8a\x93\x53\x47\xca\x24\xed\x59\xde\x7a\xd4\x25\x31\x0d\xaa\x25\x3c\xf1\xb4\x6b\x3a\xed\x60\xb4\x50\x25\x82\x2a\x11\x54\x89\xd4\xaf\x99\xc9\xaa\x44\x46\x14\x63\xe4\xd3\x3c\xf8\x7b\x6a\x31\x50\x13\xd8\x53\x7f\x31\xf6\x69\x3f\xf0\x3d\xff\x1d\xb4\xfe\x17\x98\x6e\x3c\xe4\x27\x7a\xc8\x8f\x85\x25\xfa\xf0\x60\xc4\x89\xd4\x88\x1e\x59\xb0\xa5\xd0\x38\xbf\x05\xe3\x0b\xf9\x8e\xe1\x3f\x60\x20\x72\xa6\x05\x19\x0b\x46\xb8\xe0\x57\x9c\xad\x28\x0c\xb7\xf9\xe1\x39\xf9\xec\x44\x32\x9a\x98\x73\x13\x6d\x0e\x95\x68\xbd\x66\x61\x44\x33\x16\x6f\x8c\x0a\xc4\xd7\xf8\xf0\x28\x9e\x19\x4c\x0f\x70\x6c\xb2\x4a\x95\x13\x9a\xb0\x34\x12\xa1\x03\x40\x0b\x7f\x54\xf5\xdb\x8d\x79\x2e\x55\x23\x7d\x04\x9c\xaa\x6f\xda\x0e\x99\x1f\x59\x7a\x97\x9c\x48\x7d\x01\xda\xb9\x66\x94\xd7\xb6\xb1\x66\xfe\xa0\x4d\xb7\xd0\xa4\x93\x02\xa2\xef\xbc\x12\x02\x49\xcc\xa8\x64\x8e\xb4\xbc\x4d\x45\x42\x57\x30\xcb\xb7\x22\x8e\x82\xcd\x4c\x0f\xb4\xa6\xe9\xec\x80\x15\x35\x08\xd4\x52\x78\x3d\xff\xcb\x9c\x78\x17\xe6\x90\x25\x8c\x87\x8c\x67\x05\xcb\xce\x88\x48\x93\x07\xca\xd5\xb0\x19\xb4\xea\x7a\x49\x63\xab\xb3\xb9\xbf\xd0\x1f\xdf\x5f\x90\x65\xc4\x01\x68\x4a\xdd\x8f\xd1\x30\x04\x3e\xeb\x5a\x43\xad\x61\x41\x4b\xe8\xd7\x5f\xca\xe2\x4b\x5a\xdb\x32\x27\xef\x23\xd8\x9b\x5e\xd3\x45\xba\xdd\x37\x20\x2c\xb5\xcc\x4c\x4b\x6b\xe0\xe4\x10\xd9\x43\xdd\xe4\xe9\x16\xbe\xb3\x7d\x1b\x67\xea\x7a\x1c\x86\xd0\x31\x75\x06\x3d\x88\x27\xb2\xa2\xe9\x82\xae\x4a\xea\x47\x77\x90\xb0\x74\x29\xd2\xb5\x1a\xf1\xda\xd1\xf8\xa5\xd2\x9f\xe6\xc1\x80\xad\x69\xf7\x55\xa2\x47\x2e\x52\x6b\x3e\x88\xc2\x42\x24\x03\xda\x01\x90\x2d\xb9\x19\x94\x90\xeb\x0a\x3e\xb5\xea\x80\xb9\x37\x55\x96\x57\xb6\xf8\x64\x01\x9c\x94\x7f\x6c\x4e\xb4\xe0\x16\xb8\x6a\xff\x34\xbd\xd4\x7d\xb8\x24\x57\x66\x79\x95\x97\x9f\xfc\x81\x5c\xfe\x95\x06\x5f\x94\x5b\xc4\x43\xf5\x14\x8d\x63\xf1\x04\x0f\x55\x06\x4e\x4b\x46\xcc\x2e\x2e\xbf\xc4\xf6\x60\xe1\xde\xf4\x03\xb9\xfc\x51\xa4\xcc\x7b\x2d\x09\xa8\x0c\x68\xa8\x7a\x6f\xc6\x07\xac\x93\x7e\x9f\xd4\xc7\xfd\xd6\x0b\x97\xee\x1d\x75\xcb\x2d\xa9\x2e\xd6\x33\xf0\xed\x0f\xa1\x08\x8e\x23\xb9\x9e\x32\x89\x31\x49\x8f\x3f\x01\x76\xaa\xd1\xe1\x2f\x08\x07\xcd\x89\xed\x8b\xfa\x54\xfd\xfb\x2b\xf8\xdd\x7f\x6b\x76\xf5\xd7\x2c\x5d\xb1\xce\xa7\x64\x96\xd2\x8c\xad\xa2\xe0\x6a\xeb\xf9\x17\x74\xe9\x80\x5e\x9f\x27\xc2\xd4\xb2\x5f\x6f\xbd\x64\x53\x78\x09\x99\xd8\x25\x64\x0a\xd6\x68\x5a\x88\xce\xe1\x35\x88\x26\x4a\x4e\xef\x90\x99\xba\xbe\x89\x2f\x31\x31\x35\xfc\xd3\x87\x74\x7e\x14\x71\xbe\x66\x34\xcb\x68\xf0\xb0\x86\x6b\xc7\x10\xb9\x0a\x7f\x83\xb7\xde\xb8\xb7\x4e\x19\xa2\xab\x7d\xf8\xd9\xe4\x2b\x6c\x9c\x09\x8c\xbd\xc2\xd8\x2b\x8c\xbd\xc2\xd8\x2b\x8c\xbd\xc2\xd8\x2b\x8c\xbd\xaa\x76\x18\x63\xaf\x30\xf6\x0a\x63\xaf\x30\xf6\x0a\x63\xaf\x30\xf6\x0a\x63\xaf\x30\xf6\xaa\xb4\x60\x30\xf6\x0a\x63\xaf\x9e\x57\xec\x95\x0f\x65\x57\x11\xa3\xe7\x9b\xb7\xb0\x09\x1b\x1b\x30\x77\xe1\x39\x01\xa1\xc7\xc6\x29\x2b\xf9\x0b\xf7\x45\x2a\x27\xa1\x4e\xdf\x6a\x7c\xe3\x86\x41\xde\x10\x79\xc3\x7d\xd6\xcd\xf1\x55\xea\x3b\xb5\xed\xd8\xf9\x0c\x77\x68\xdc\x19\xe7\x34\x3c\xc4\x42\xed\x95\xd7\x10\xed\xd5\x1e\xb9\x0d\x91\x63\x43\x8e\x0d\x39\x36\xe4\xd8\x90\x63\x43\x8e\x0d\x39\x36\xe4\xd8\x90\x63\x43\x8e\x0d\x39\x36\xe4\xd8\x90\x63\x43\x8e\x0d\x39\x36\xe4\xd8\x90\x63\x43\x8e\x6d\xda\xa1\x81\x47\xca\x6f\x78\x10\xe1\x86\x39\x0e\x9f\x63\xb8\xc9\xc1\x69\x0e\x11\xb1\xee\x99\xea\x70\x4c\x94\x1a\xd3\x1d\x62\xba\xc3\xf3\xa0\xec\xc6\x4e\x79\x78\x90\x89\xdb\x3d\xed\x21\x9e\x7e\xfd\x53\x1f\xa2\xc0\x04\x05\x26\x28\x30\x69\x3e\x74\xa7\x2c\x30\x39\xdf\x54\x88\x47\x90\x70\xa0\xcc\x90\xf4\x97\x6d\x1c\xc3\x0a\x60\x5a\xc4\x97\x77\xf0\x8f\x05\x41\x62\x5a\x44\x4c\x8b\x88\x69\x11\x31\x2d\x22\xa6\x45\xc4\xb4\x88\x98\x16\xf1\xdc\xd2\x22\x1e\xc6\x78\x1c\x92\x1a\x71\xa7\x2b\x01\xa6\x47\x3c\x5a\x7a\xc4\xb3\x43\xa1\x30\x45\xe2\x79\x5e\x48\xa6\x60\x99\xa6\x87\xf6\x8c\x9e\x26\xf1\x94\x1c\xf7\x0e\xa9\x12\x9b\x9b\x89\xe9\x12\xf7\xe0\xaf\xaf\xa5\x76\x63\x76\xa0\xb1\xf5\x37\xec\x7c\x20\xa5\x73\x30\xa1\x6d\x3c\x49\x3c\xf0\x9e\x15\xdf\x89\xdb\x64\x78\xe6\xb3\xb2\x53\xa6\xea\x79\x22\xff\x89\x5e\x27\xf2\x9f\x64\x64\x8f\x78\xc2\xfc\xe7\xae\x08\xc8\x20\xb6\x02\xb1\x90\x93\x61\x21\x67\x62\x97\x10\x11\x41\xdb\xf4\x7c\xce\x7f\x44\x44\x10\x11\x39\x00\x11\x81\xf0\x1b\xfb\xf7\x20\xa6\xd2\xdf\x50\xed\x30\x88\x09\x50\xe5\x61\xf4\x18\x85\x39\x8d\xfd\xf0\x22\xea\x42\xce\xfd\xa2\x1e\x73\x8f\x02\x7f\xe3\xc8\xf3\x4b\x78\xd1\x65\x91\x3d\xa4\x94\x0e\xc2\x59\x20\x12\x71\x99\x31\x5a\x0c\xc8\x14\xaf\x8a\xb5\x0f\x9f\x73\x35\x8a\xa7\xc6\xe2\x50\x3f\xf9\xf9\xfd\xa6\x46\x9c\x42\xcc\xdb\xfb\xc7\x53\x9d\xca\x30\x6a\xa3\x27\x40\x9c\x68\x49\x1f\xcc\x69\x84\x39\x8d\x30\xa7\x11\xe6\x34\x7a\x4e\x39\x8d\x9a\x53\x1a\x1d\x27\x06\xf4\x28\xc9\x8c\x3a\x72\x19\x0d\xd4\xd3\x17\x1c\xc9\x7b\x94\x0c\x4d\x1d\x09\x9a\x06\xea\x69\x55\xf9\x8c\xa9\x99\x30\x35\x13\xa6\x66\xc2\xd4\x4c\x98\x9a\xe9\x28\xa9\x99\x1a\x32\x33\x3d\x97\x84\x14\xc3\xb7\x19\xf3\x48\x9d\x51\x1e\xa9\xce\x34\x52\x47\x72\x62\x4e\x96\x40\xaa\x2b\x7f\xd4\x91\x5c\xf1\x29\x66\x8e\x6a\x48\x1c\x35\x38\x08\xbe\x5b\x66\x1b\xb3\x28\x3c\x00\x9c\x5b\x0b\x60\x8b\x2a\x0f\x0e\x84\xcf\x0a\xa7\x0f\x1c\x5b\xe3\x20\x28\xbf\xb1\xf0\x66\x2f\x4b\x77\x39\xef\xdd\x08\xa3\x4f\x03\x46\x47\x08\xbd\x05\x42\x47\xf8\x1c\xe1\x73\x84\xcf\x11\x3e\x47\xf8\x1c\xe1\x73\x84\xcf\x11\x3e\x47\xf8\x1c\xe1\x73\x84\xcf\x11\x3e\x47\xf8\x1c\xe1\xf3\xb3\x85\xcf\x7d\xd5\x6a\xfd\x1d\xf4\x25\x2a\x56\x11\xf2\x47\xc8\x1f\x21\x7f\x84\xfc\x8f\x0a\xf9\x6f\xe5\x03\x18\x54\xfa\x5e\x0d\x49\x40\xf9\xfb\x99\xe3\xf6\xb5\xb5\xf5\x11\xbf\x3f\xa1\x04\x7e\xc2\xc1\x49\x88\xe3\x23\x8e\x8f\x38\x3e\xe2\xf8\x88\xe3\x4f\x04\x01\x46\x1c\x1f\x71\x7c\xc4\xf1\x11\xc7\x47\x1c\x1f\x71\x7c\xc4\xf1\x11\xc7\x47\x4c\x1c\x31\x71\xc4\xc4\x11\x13\x47\x4c\xbc\x1d\x13\x1f\x5c\x09\x3f\x0a\x2e\x8e\x6a\xf8\xe7\x82\xaa\x23\xa2\x7e\x2a\x45\x3c\xa2\xe9\x88\xa6\x23\x9a\x8e\x68\x3a\xa2\xe9\x88\xa6\x23\x9a\x8e\x68\x3a\xa2\xe9\x88\xa6\x23\x9a\x8e\x68\x3a\xa2\xe9\x88\xa6\x1f\x53\x15\x8f\xb9\x9c\x91\x05\x40\x16\x00\x59\x80\xca\x00\x20\x0b\x70\x04\x16\x60\xc1\x32\xfa\xfa\xba\x27\xd8\xbf\x62\x59\xd9\xaf\xd2\xdd\x6f\x05\xd3\x8f\x54\x0b\xe5\xac\xcb\xb0\xc0\x24\x74\x80\xe8\x2b\x96\x39\x08\x1d\x9e\xbf\xb9\xfd\xf0\x69\x6b\x06\xa6\x86\xa1\x7b\x8d\x04\xf5\xfc\x28\x40\xfa\x1f\xdc\xff\xef\xb3\xd6\xf7\x2a\x7e\xa0\xaf\xd6\xa9\x31\x9a\xd6\xa9\xab\xcb\xf5\x84\xcc\xd2\xb1\x77\x86\x9a\x9b\xf2\xd6\xa8\x9d\x8f\x8e\xfa\x44\x43\x94\xf8\x41\xd6\x02\x59\x0b\x64\x2d\x90\xb5\x78\x4e\xac\x45\x0b\x6d\x51\x5f\xb7\x6b\x36\xca\xd1\x7a\x14\xf2\xa2\x8b\xbd\x38\x9b\x0e\xf7\xc5\xf9\xbb\x80\xfe\x21\x3b\x5c\xbd\x70\x22\xdc\x8f\x70\x3f\xc2\xfd\x08\xf7\x23\xdc\x7f\x1c\xb8\xbf\x09\xef\x3f\xa6\x51\x43\x24\xfa\x8c\x90\xe8\x6e\x28\xfa\xa8\xee\xc1\xc9\x00\xe9\x4e\x44\x7a\xc8\x61\xa8\xc2\xd2\x67\x81\x4b\x37\x01\xd3\x67\x51\xd8\x17\x10\xa3\xf9\x56\xa9\xcb\x51\x90\xca\x0e\xc9\xef\x14\x4a\x48\xfa\x88\x5b\x45\xf2\x2b\x64\x0b\x42\xaa\x9d\x06\x42\xcf\x06\x0c\x3d\x09\x56\xa9\x47\xe9\x70\xb4\xf2\x64\xd5\xd4\x5b\x37\x0e\x96\x52\xc7\x52\xea\x03\x2f\x9c\x8b\xef\xdb\x4f\xdb\xb7\xfa\xae\x72\xb2\xc6\x7d\xdf\xd6\xb8\x9b\x20\x60\xc9\xe9\x5a\x37\x62\x19\x7a\x31\x65\x43\xa5\x6f\xaa\xcd\xa6\x4a\x7f\x4e\x02\x11\xc7\x2c\xb0\x1e\x22\x9a\xad\x16\xb3\xa5\x47\xac\x6c\xb6\xde\xba\xe1\x43\xba\x0d\xe9\x36\xa4\xdb\x90\x6e\x43\xba\x0d\xe9\x36\xa4\xdb\x90\x6e\x43\xba\x0d\xe9\x36\xa4\xdb\x90\x6e\x43\xba\x0d\xe9\x36\xa4\xdb\x90\x6e\x43\xba\xed\xa5\xd3\x6d\x2d\x11\x02\x77\x19\xcd\xf2\xd3\xa0\x98\xda\xc4\x16\x30\xe0\x74\x11\xcd\x43\xb3\xed\xbc\xe0\x7c\x09\xe3\x07\x6c\xc2\x3f\xbd\x43\xad\x0e\x29\x3b\x0e\xf6\xac\x0c\xda\x21\x6c\xdd\x02\x5b\xab\xf1\x3a\x4e\x64\x48\xa7\x1d\xb9\xd3\x97\x3c\xb8\x28\x7e\x85\x0b\xd7\x42\xfd\x17\x0d\xb2\x39\x21\xef\xd5\xbf\xf6\xef\x6b\x1a\xf1\x8c\x46\x5c\x92\x20\xce\x65\xc6\xd2\x2b\x33\xdb\x81\x01\x56\x48\x1c\x7d\x61\xe4\xf2\x23\x5d\x33\x99\xd0\x80\x5d\xd6\x59\x06\x78\xf5\x69\x4c\xa6\xeb\xaa\xc3\xd1\x17\xb6\xd3\x2c\x84\xde\x42\x3f\xd5\xbe\x4d\xa4\xed\x93\xb9\x49\xe4\x52\x5d\x10\x28\xd7\x37\x3a\x6d\x08\xeb\xbb\xa7\xde\x71\x06\x96\x6f\x7a\xdc\x9d\x3a\x61\xa6\x6b\xe8\xf2\xd6\xe3\x2f\x89\x69\xc0\xf0\x04\xdc\xe5\x04\x84\x21\x43\xc1\x09\x0a\x4e\x50\x70\xf2\x0c\x04\x27\x23\x4a\x3a\xf2\x09\x9b\x85\x9e\x8a\x0e\x14\x1f\x96\x1f\xef\xa1\xe2\x18\xdb\x16\x0c\x8c\x16\xbc\x83\x2e\xfc\x02\x13\x8f\xa7\xff\x44\x4f\xff\xb1\x10\x49\x1f\x64\x8c\x38\x91\x1a\x17\x24\x0b\xb6\x14\x9a\x2d\xb0\x90\x7e\x21\x02\x32\x2c\x0a\x0c\x44\xce\xb4\xac\x63\xc1\x08\x17\xfc\x8a\xb3\x15\x85\xe1\x36\x3f\x3c\x27\x9f\x9d\xd4\x46\xd3\x7b\x6e\xa2\xcd\xf1\x12\xad\xd7\x2c\x8c\x68\xc6\xe2\x8d\xd1\x92\xf8\x4a\x21\x1e\xc5\x33\x83\x0c\x02\x1a\x4e\x56\xa9\x72\x56\x13\x96\x46\x22\x74\x30\x6a\xe1\xb7\xaa\x7e\xbb\x31\xcf\xa5\x6a\xa4\x8f\xa3\x53\xf5\x4d\xdb\x21\xf3\x23\x4b\xef\x5a\x14\xa9\x2f\x40\x3b\xd7\x8c\xf2\xda\x36\xd6\xcc\x1f\xb4\xe9\x16\x9a\x74\x52\x58\xf5\x9d\x97\x01\x3e\x89\x19\x95\xcc\x51\x9f\xb7\xa9\x48\xe8\x0a\x66\xf9\x56\xc4\x51\xb0\x99\xe9\x81\xd6\x64\x9f\x1d\xb0\x22\x85\xbc\x5a\x0a\xaf\xe7\x7f\x99\x13\xef\x8a\x1d\xb2\x84\xf1\x90\xf1\xac\xe0\xea\x19\x11\x69\xf2\x40\xb9\x1a\x36\x03\x77\x5d\x2f\x69\x6c\xd5\x3a\xf7\x17\xfa\xe3\xfb\x0b\xb2\x8c\x38\x20\x55\xa9\xfb\x31\x1a\x86\xc0\x8a\x5d\x6b\xc0\x36\x2c\xc8\x0d\xfd\xfa\x4b\x59\x7c\x49\x2b\x64\xe6\xe4\x7d\x04\x7b\xd3\x6b\xba\x48\xb7\xfb\x06\xb4\xa7\x16\xab\x69\x81\x0e\x9c\x1c\x22\x7b\xa8\x9b\x3c\xdd\xc2\x77\xb6\x6f\xe3\x4c\x5d\x8f\xc3\x10\x3a\xa6\xce\xa0\x07\xf1\x44\x56\x34\x5d\xd0\x55\x49\x4d\xe9\x0e\x12\x96\x2e\x45\xba\x56\x23\x5e\x3b\x1a\xbf\x54\xfa\xd3\x3c\x18\xb0\x35\xed\xbe\x4a\xf4\xc8\x45\x6a\xcd\x07\x51\x58\x48\x6d\x40\x81\x00\xe2\x27\x37\x83\x92\x65\x16\xa6\xb4\x1a\x83\xb9\x37\x55\x96\x9d\xb6\x00\x67\x01\xb5\x94\x7f\x6c\x4e\xb4\x94\x17\x18\x6f\xff\x34\xbd\xd4\x7d\xb8\x24\x57\x66\x79\x95\x97\x9f\xfc\x81\x5c\xfe\x95\x06\x5f\x94\x97\xc4\x43\xf5\x14\x8d\x63\xf1\x04\x0f\x55\x06\x4e\x0b\x4f\xcc\x2e\x2e\xbf\xc4\xf6\x60\xe1\xde\xf4\x03\xb9\xfc\x51\xa4\xcc\x7b\x2d\x09\xa8\x0c\x68\xa8\x7a\x6f\xc6\x07\xac\x93\x7e\x9f\xd4\xc7\xfd\xd6\x0b\x97\xee\x1d\x75\xcb\x2d\xa9\x2e\xd6\x33\x70\xfa\x0f\x21\x1a\x8e\x23\xe6\x9e\x32\x15\x32\xdd\x0b\x40\x02\x44\x57\xa3\xff\x5f\xd0\x16\x9a\x5e\xdb\x17\x22\xaa\xba\xfb\x57\xf0\xbb\xff\xd6\xec\xf9\xaf\x59\xba\x62\x9d\x4f\xc9\x2c\xa5\x19\x5b\x45\xc1\xd5\xd6\xf3\x2f\xed\x0e\x92\x94\x6a\x81\x9c\x1f\x1c\xd5\xb2\x7d\x6f\xbd\x14\x58\x78\x27\x99\xd8\x9d\x64\x0a\xc6\x69\x82\xa0\xcf\xe8\x35\x66\x4e\x4a\x7b\xef\x90\x83\xb8\xbe\x9d\x2f\x31\xff\x30\xfc\xd3\x9b\xce\xde\x2a\x1f\x36\x48\x42\xc5\xc6\x1a\x51\x13\x84\xf2\x6a\x1f\x7e\x86\x49\x15\x1b\xe7\x04\x23\xbd\x30\xd2\x0b\x23\xbd\x30\xd2\x0b\x23\xbd\x30\xd2\x0b\x23\xbd\xaa\x1d\xc6\x48\x2f\x8c\xf4\xc2\x48\x2f\x8c\xf4\xc2\x48\x2f\x8c\xf4\xc2\x48\x2f\x8c\xf4\x2a\x2d\x18\x8c\xf4\xc2\x48\xaf\xe7\x15\xe9\xb5\x85\x71\x57\x61\xa3\xe7\x9b\x5c\xb1\x67\x39\xf5\x83\x13\x2c\x9e\x13\x38\x7a\x12\xec\xb2\x2e\xc9\xe2\xbe\xe8\xe5\x74\x74\xef\x5b\x3d\x68\xdc\x44\xc8\x34\x22\xd3\xb8\xf7\xe2\x39\x91\xfe\x7d\xa7\x06\x9e\x24\xe9\xe2\x0e\x2d\x3c\xe3\xc4\x8b\x07\x1b\xb1\xbd\x92\x2f\xa2\x49\x3b\x28\x01\x23\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x21\x35\x87\xd4\x1c\x52\x73\x48\xcd\x4d\x3b\xf2\xf0\x48\x49\x18\x0f\xa7\xe8\x30\x11\xe3\xb3\x8d\x5c\x39\x38\x17\x23\xa2\xd8\x3b\xe7\x63\x1c\x13\xb9\xc6\x9c\x8c\x98\x93\xf1\x8c\xa8\xbd\xb1\xf3\x32\x1e\x6e\xfb\x76\xcf\xcd\x88\x27\xe2\x3e\xf9\x19\x51\xab\x82\x5a\x15\xd4\xaa\x3c\x0b\xad\xca\xf9\xe6\x6b\x3c\x96\x10\x04\xf5\x8c\x7b\x89\x3f\x8e\x61\x23\x30\x77\xe3\xcb\xb3\x08\x63\x01\x99\x98\xbb\x11\x73\x37\x62\xee\x46\xcc\xdd\x88\xb9\x1b\x31\x77\x23\xe6\x6e\x3c\xb7\xdc\x8d\x03\xf0\x26\x87\xe4\x6f\xdc\xe9\x86\x80\x39\x1c\x4f\x90\xc3\xf1\xec\x20\x2b\xcc\xe3\x78\x9e\xf7\x93\x29\x18\xaa\x89\x02\x42\xa3\xe7\x72\x3c\x39\x7b\xbe\x43\x3e\xc7\xe6\xb6\x62\x4e\xc7\x2e\x66\x1c\x04\x2d\x95\x42\x85\x3d\x59\x71\x23\xf9\xe4\x61\xf4\x18\x85\x39\x8d\x7d\xc1\x0e\x75\x22\x6e\x3f\xd9\xe6\xdc\xbb\x0e\xbe\x71\x17\xc9\x4b\x78\xd1\x65\x11\x8f\x53\x0a\xb0\x70\xf6\x88\x44\x5c\x66\x8c\x16\xa3\x32\x45\xcc\xb0\xf6\xe1\xb3\x4f\x10\xf9\xd4\x9e\xc8\xf9\x27\x3f\xda\x7e\x6a\xd7\x09\xd0\x93\xbd\x7f\x3c\xd5\x49\x0d\x43\x37\x7a\x3a\x82\x29\x67\xde\xc5\xa0\x41\x0c\x1a\xc4\xa0\x41\x0c\x1a\x7c\x4e\x41\x83\xcd\x31\x83\xc7\xd1\x57\x1e\x25\x5a\xb0\x23\x58\x70\xa0\x9e\xbe\x60\x95\xec\x51\x42\x20\x3b\x22\x20\x07\xea\x69\x95\x14\xc4\xd8\x47\x8c\x7d\xc4\xd8\x47\x8c\x7d\xc4\xd8\xc7\xa3\xc4\x3e\x36\x84\x3e\x3e\x97\x60\x8f\xe1\xdb\x8c\x81\x9a\x67\x14\xa8\xd9\x19\xa7\x79\x24\x27\xe6\x64\x11\x9a\x5d\x01\x9a\x47\x72\xc5\xa7\x18\x9a\xd9\x10\x99\x39\x0e\x30\xbe\x5b\xd4\x98\x59\x19\x1e\x28\xce\xad\x19\xb0\xb5\x8f\x06\x07\xc7\x67\x85\xe7\x07\xde\xad\xf1\x12\x94\xf3\x58\xb8\xb4\x97\xa5\x0b\x9d\xf7\x6e\x84\xd6\xa7\x06\xad\x23\xac\xde\x02\xab\x23\xa4\x8e\x90\x3a\x42\xea\x08\xa9\x23\xa4\x8e\x90\x3a\x42\xea\x08\xa9\x23\xa4\x8e\x90\x3a\x42\xea\x08\xa9\x23\xa4\x8e\x90\xfa\x79\x43\xea\x58\xad\x1c\x69\x00\xa4\x01\x90\x06\x40\x1a\x60\x1a\x34\xc0\x56\xfe\xb8\x41\x25\xf2\xd5\xf8\x05\x94\xc9\x3f\x1b\x2c\xbf\xb6\x22\x1e\x62\xfa\x27\x94\xca\x4f\x3d\xb0\x09\xb1\x7d\xc4\xf6\x11\xdb\x47\x6c\x1f\xb1\xfd\x89\xa0\xc2\x88\xed\x23\xb6\x8f\xd8\x3e\x62\xfb\x88\xed\x23\xb6\x8f\xd8\x3e\x62\xfb\x88\x93\x23\x4e\x8e\x38\x39\xe2\xe4\x88\x93\xf7\xc0\xc9\x07\x57\xcc\x8f\x82\x95\xa3\x6a\xfe\xf9\x21\xed\x88\xb2\x9f\x4a\x39\x8f\x08\x3b\x22\xec\x88\xb0\x23\xc2\x8e\x08\x3b\x22\xec\x88\xb0\x23\xc2\x8e\x08\x3b\x22\xec\x88\xb0\x23\xc2\x8e\x08\x3b\x22\xec\x47\x57\xcf\x63\x6e\x68\x64\x06\x90\x19\x40\x66\xa0\x32\x00\xc8\x0c\x0c\xca\x0c\xc4\x62\x25\xaf\x9b\x40\xfe\x7d\x21\x61\xf5\xd2\x0e\x1c\x38\x16\xab\x1f\xa3\x98\xfd\x14\xc9\xec\xef\x94\x87\x71\xb1\xe6\xea\x61\xdf\x03\x60\xd5\x3f\xb8\xff\x5f\xea\xf4\xff\x8d\xc5\x4a\x59\x8b\x46\x8a\x63\xfc\xde\x1f\xa7\xe7\xc7\xc1\x66\xd5\x50\xda\xcd\x10\x8b\x55\x8d\x3f\xa1\x87\x7b\x1f\x83\xbd\xbd\x6c\x8d\xad\x69\x5c\xb9\x95\xc6\xad\x98\x45\xf0\x42\xe7\x4e\xb5\x72\x3f\x5b\xa4\x4e\x65\x3e\x7b\x11\x41\x95\xef\xec\xbb\x9e\x6c\x7b\xdb\x97\xd4\x8a\x65\x6f\x45\x58\xb5\x0b\x53\xe0\x50\x4c\xfb\xe7\x1f\xf8\x52\x8c\x43\x9c\x78\x3b\xfc\x0f\xe6\x95\x17\x5e\xcb\xec\x6b\x2f\xbc\xe2\x30\x34\x5c\x47\x52\x35\x2b\x65\xab\x08\xaa\x46\xa9\x26\xda\x52\x31\x3f\xe7\x19\x55\x57\xee\x7f\xb0\xc5\x83\x10\x5f\xde\xfa\x18\x76\xb1\xe4\x2a\x2d\x6c\xfb\x92\xb3\x0f\xd2\xde\x2a\xbd\xcf\xc0\x04\x86\xc4\x35\x89\x3c\xe9\x37\x98\x6b\x0a\x54\x45\x23\x50\xfd\x47\xe3\xfd\x3c\x34\xf7\x61\xc0\xd2\x8b\x2b\x81\x35\x09\x50\x57\x8e\xa5\x59\xe4\xcf\xfa\x05\x4d\xa2\xdf\x1c\x8b\xf3\x7f\x9b\x70\xa4\xdb\x0f\x16\xdd\xd4\x0c\x88\xf4\x6f\x20\x2c\x24\x7a\x39\x68\x6b\x0e\x1e\x97\xb9\x7d\x78\x3d\xb1\xad\x71\x97\x77\x03\x14\x04\x82\x3f\xb2\xd4\xa3\x24\xec\xdb\x9c\x11\x35\x18\xb5\x72\x42\x52\x4e\x63\x0d\xa8\xcc\x5c\x87\x4d\xff\x4b\xa5\x93\x74\x61\xa3\x39\xf9\x19\x00\x1d\xbe\x14\x6f\x08\x6c\xaa\x37\xd7\xd7\xab\x28\xb3\x5c\x77\x20\xd6\xeb\x9c\x47\xd9\xe6\x5a\xdd\x28\xd3\x68\x91\x67\x22\x95\xd7\x21\x7b\x64\xf1\x35\x4d\xa2\x2b\x68\x1b\xd7\x16\x77\x1d\xfe\xd1\xd9\xf0\x8b\xa6\x63\xb0\xec\x62\x5c\x54\x29\xb7\xca\xb0\xfe\x57\xc4\x43\x0d\x59\xe9\xaf\x3b\xe8\xd8\x8c\x9e\xfa\x93\x1a\x80\x4f\xef\xef\x3e\x3b\x43\xaf\x47\xd8\xdc\xf6\xdc\xa3\xb2\x0c\x8a\x44\x7c\xe9\xaa\x3e\x5a\xa7\x9a\xf1\x30\x11\x11\xcf\x7c\x56\x42\xe6\x0b\xf0\xc9\xec\x3d\x9a\x64\x62\x4e\xde\x52\x6e\xea\x54\x99\x4b\xe8\x9c\x7c\xe0\xe4\x2d\x5d\xb3\xf8\x2d\x95\x6c\xe8\x51\x55\x43\x28\x81\x9d\xec\x3d\xae\x16\x60\x6b\x19\xdb\xbb\x8c\xf2\x90\xa6\x16\xb4\x72\x98\xdc\x0f\x03\xb7\xde\x55\xb7\x2c\xda\x7e\x00\x97\xfc\x0b\x34\xf6\x67\x96\xd1\x6a\x97\xcd\xe6\x97\x2d\x5d\x36\x27\x8c\xd4\x4b\xca\x02\xbc\xf6\x8b\x0e\xbb\xa2\xcb\x25\x0b\xb2\x2d\x97\xd4\x19\x0e\x9f\x85\xb0\xd3\x40\xd3\x94\xfa\x37\x51\xe3\x11\x14\xc7\x72\x67\xd9\xad\xf6\x93\xd5\x34\x7d\xab\x84\x6a\x99\xcf\x86\x2a\x59\xa6\x84\xdf\x17\xb6\xd9\xbe\xec\xd7\x3c\x6d\x4a\xff\xc1\xc3\xf0\xcd\x5a\x86\xba\x9b\x36\xaf\xba\x46\x8e\x3d\xaf\xef\x58\x13\x97\xde\x6a\x42\xfa\xf2\xea\xbe\xcf\x33\x88\xf1\x82\x28\xc6\x7d\x0c\x98\xfa\x62\x79\xb9\xb5\x3d\xed\x2c\x91\xe7\xcf\x99\x71\x35\x4b\xea\x0f\x9e\x2f\x83\xf6\xea\xe8\xf6\xaa\xba\xaf\xab\xe3\xfa\xd3\x0e\x93\x7c\xc4\xd3\xa3\x75\x53\x55\x9c\x42\x34\xcd\xd3\x31\xcd\x25\xb2\xec\x28\x6d\x3f\xc0\x34\xab\xb5\xef\x1b\xe6\xe9\xd9\x0f\x3f\x16\x7d\x1c\x1b\xf2\x29\x8f\xd9\x3f\xa2\xec\xe1\x17\xe7\x2b\x34\x5a\x8d\xed\x47\xf5\x76\xca\xf2\x24\x06\x30\xdf\xfb\x40\x9d\x8c\x56\xc9\x23\xe7\xe4\x83\x41\x6d\xd5\x8c\x33\xae\x2b\xc0\x93\x35\xfd\xc2\x88\xe1\x51\xa8\x26\x26\x81\xd6\x80\xd7\xb1\xaf\x09\xe5\x52\xbf\x2b\x65\x5a\xa5\xd4\x79\xed\xf9\x9b\x9a\x81\xb6\xd3\xee\xe6\xf6\x83\x7e\x06\x98\xb7\x07\x46\x6e\x6e\x3f\x90\x95\xfe\x4b\xe6\x15\x2f\x97\x64\xc1\x40\x8e\xa2\x76\xe8\xe5\x9f\x2e\xa1\xa3\x71\x6c\x1e\x05\x66\xc7\xfc\xd5\xd5\x8a\x05\x33\xc1\xf8\x2a\x7b\xb0\x08\xa8\x8c\xa3\x80\x69\xbd\xd1\x82\x11\xc1\xd9\x9c\x7c\x32\x56\x72\x9f\x13\xb5\x76\x93\x6e\x1d\x82\x85\x31\xed\x18\x07\xfb\x94\x3f\x12\x8f\xf6\x6f\x7d\xc6\xc2\x3e\x3c\xe5\xd1\x10\xdb\xab\xba\x06\x05\x29\xad\x67\xb8\x65\x17\x7f\x01\xf7\xda\xdd\xd7\xe1\xb2\x1e\xd0\x54\x39\xd8\x0b\x91\x67\xe4\x8a\xbc\xfd\xf4\xfe\xe6\xf3\xfb\x19\xf9\xf5\xf6\x1d\xfc\x2b\x52\xf2\x27\xad\x44\x88\x63\xdf\x03\x9f\xf0\x28\x15\x4e\x45\xf3\x20\xb9\xcd\x5c\xf6\x0d\x8b\x45\xa2\xbd\xae\x3c\x66\x04\xe0\x31\x00\xcc\x81\xd7\xfe\x51\xa4\x84\x7d\xa5\xeb\x24\x66\x6f\xc8\x65\x22\x42\x79\x49\xd6\x8c\x72\x49\xd4\x7f\xcf\xf5\x9f\xae\x63\xb1\xb2\x7f\x36\xc0\xa2\x32\x97\xce\x0c\x8b\xa5\x7d\xfa\x4f\xf6\x31\x2d\x64\x30\x3f\xaf\x35\x70\x9a\x65\x77\xdf\x72\x2f\x2f\x7d\xc7\x7f\xc0\x7f\xef\xb5\x0c\x68\xcc\x4a\x4f\xaa\x3f\x54\x5f\xf8\xa7\xeb\xfa\x16\xd8\xcb\x58\x94\x96\xbf\xa1\x86\xe0\xc3\x92\x3c\x45\x71\x18\x28\x0b\x59\x9d\x7f\x38\xd9\xb4\x93\x0a\xa3\x07\x64\xb9\xe1\x97\x8b\x97\x87\x02\x3a\x27\x1e\x59\x1a\xd3\x44\x73\x78\x8c\x06\x0f\x04\x94\x87\xf0\x23\xef\x58\xc2\x78\x08\x0c\x9b\xd1\x7b\xf0\x20\x16\xba\x54\x34\xf8\x2f\xb3\x72\xd7\xd7\xd1\xea\x21\xb3\xe5\xab\x69\x1c\x8b\x27\xe5\x7b\x8c\xb7\xda\x3c\xec\x6e\x47\x1b\xa5\x7c\xad\x28\x60\x9f\xd8\x92\xa5\x8c\x07\xac\xd1\x42\x55\x1f\x24\x0f\x22\x06\x21\x68\xea\xfe\x92\x09\x62\x9e\x9a\xc7\x6c\x45\x83\x4d\xd9\x2e\xd7\xdd\x63\xd4\x85\x54\x26\x34\x28\x6a\xfa\xc3\x15\xb5\xfb\x62\x63\x00\xf1\xa6\x2d\xf5\xbb\xfa\xfc\x77\x7b\xe6\xf8\x8c\xb8\x34\x2d\x74\xb3\xd1\xd7\x55\x2b\x9a\xda\xf1\xb3\xf0\x50\xe9\xb7\xe1\x2f\x07\x37\x00\x40\xfe\x96\xdf\x56\x9f\xc3\xcf\xaa\xdb\x18\xfc\x99\xc6\xe4\xd7\x4f\x3f\x11\x60\x15\xb4\x52\xd5\xca\x45\x40\xeb\x60\xa4\x22\x56\x54\x02\xf7\x31\x23\xde\x56\x0d\xec\x6a\xd7\xfe\x8b\xee\x37\xb3\x2f\x77\xc4\x86\xdb\xbf\x36\x34\x3a\x6c\x2e\x26\x56\xc6\x03\x40\xb1\xda\xf0\x11\x42\xc4\x08\x11\xbf\xe4\x7b\x28\x42\xc4\x08\x11\x4f\x07\x22\xee\xb0\x25\xa3\x5e\xf0\xdb\x7f\xbb\x15\x26\xee\xfe\x6a\x79\xd1\xb5\x3f\x8f\x50\xf1\xc4\xed\x56\x5f\xa8\xb8\xdf\x34\x1f\xf1\x1c\xe9\xd8\x5e\x08\x17\x4f\xd6\x4c\x23\x5c\x3c\xb0\x2d\x19\x1f\x30\xb6\x46\xbb\xc9\x68\x98\xcf\xbd\x9b\x0e\xe5\x35\x77\x1a\xeb\x97\x34\xb9\x23\x24\xca\x7c\x20\xa9\xe3\x7a\x5e\x48\xbc\x60\xeb\xe8\x21\xe9\x61\x4f\x4a\x8f\x37\xaf\xd7\xb7\xde\x63\xce\xa6\x3c\x88\x27\x50\x3a\xeb\x55\x19\xd0\x8c\x15\x01\x40\xaa\x8b\x75\x97\xe7\x61\x1c\xa6\xb7\x5b\x9d\x2c\x76\xdf\x92\x46\x71\x9e\xb2\x5b\x11\x47\xc1\xa6\xa5\x4b\x3f\xfa\xcf\x95\xfa\x54\x32\x4d\x10\xa0\xea\x9d\x53\xc5\x44\xba\x13\x8b\xa6\x8c\x3c\x80\xbe\x31\x24\x57\x16\x48\x32\x36\x0d\x3e\xfc\xb0\xe2\x6a\x5f\x8b\x94\xa8\x1f\x2d\xeb\xc4\xf5\x67\x9d\xd7\xf8\x59\x3f\x44\xe5\x73\x05\x47\xd9\x5a\x76\x73\xf2\x51\x7d\x5c\x84\x92\x2f\xf3\x38\xde\x90\x7f\xe6\x34\x36\x81\x2d\x6c\xbe\x9a\xcf\x48\xb4\xa6\x2b\x96\xc0\xd8\xf8\xe9\x15\x22\x31\x23\x4f\x0f\x2c\x65\xe4\xfe\xc2\x7b\xe4\xfe\xa2\x0e\xc4\x31\x3f\xa9\x4d\x7f\xe9\x25\x75\x4f\x8b\x74\x45\x79\xf4\x3f\x7a\xbe\xdb\x50\xb8\x0e\xe0\xc7\x05\xeb\x35\x8f\xd2\xc7\xea\xb3\x24\x64\x41\x14\x32\xe9\x02\xb5\x32\x41\xd2\x9c\xfb\xbd\x20\x82\x7b\x99\x3e\x9c\xc2\xde\x7d\xa1\x04\x22\x69\xcd\x38\xcd\xdc\x2d\x4c\xf9\xe4\xc6\x0b\xb3\xd1\x8b\x2e\x64\xdb\x3c\x13\x65\x92\xc5\x4b\x6d\x70\xdd\x9b\x34\x42\x0a\x5f\x07\x54\x43\x92\x84\xa5\x4b\x91\xae\xf5\xaf\x1b\x1f\xcd\xd9\x0f\x1b\xde\x58\x79\xb3\x74\x01\xda\x41\x9c\xcb\x8c\xa5\x44\x06\x22\xf1\xae\x42\x10\x17\xce\xd9\xa3\xfa\xe4\x4b\x64\xa8\x20\xbb\x62\x2a\x10\xf6\xac\x71\x70\x36\x2e\xd8\xe7\xe9\x01\xc2\xd7\xdc\x78\x98\xf8\x2f\x2a\xa5\x08\x22\x08\xc8\x81\x83\xe2\xfe\x22\xcd\x79\xac\xac\xd7\xfd\x85\x5a\x06\xf7\x17\xaf\xd4\x7f\xa4\xe4\xfe\xe2\xf5\xfd\xc5\x0f\x84\x6c\x44\x5e\x0e\x51\x74\xa1\x9f\x54\x92\xa5\x50\x3b\x4d\xbe\x21\xf7\xdb\x93\x7f\xaf\x66\xff\x9e\x13\x72\x7f\x01\x83\xf7\xfe\xab\xf2\x44\x80\xad\x51\x1f\xfd\x6f\xf5\x11\xd1\x4f\xa8\xff\xbb\xbf\x80\x90\xea\x37\xa5\x16\xcd\x8a\x4f\xf5\xa9\xac\x5f\x7b\x7f\xf1\x51\x64\x1f\x78\xe9\x73\xbd\xd7\xbd\x37\xeb\x3f\xbf\xf2\x1e\x22\xba\x53\xf6\x7f\xfe\x1f\xfd\x1f\xff\x52\xff\xfc\x9f\x7b\xfe\x2f\x03\x92\x9b\x5c\x2f\xba\xe3\x94\x03\xdc\x07\x51\x87\xbb\x0f\x78\x75\xb0\x75\xfc\x38\xe3\x8f\x51\x2a\xf8\x9a\xf1\xcc\x8e\x79\x92\x8a\xd0\x0e\xbb\xcc\xe8\x2a\xe2\x2b\x35\xf8\x27\x18\xfb\x52\xe3\x1a\x87\xbf\xdf\xd8\xeb\x5e\x95\x86\xdf\x75\xae\x6d\x12\xee\x18\x73\xae\x57\xe9\xcc\xba\x0e\x45\x20\x95\xe3\x15\xb0\x24\x93\xd7\xe2\x91\xa5\x8f\x11\x7b\xba\x7e\x12\xe9\x97\x88\xaf\xae\xd4\x20\x5f\x99\xf9\xb8\xd6\x1b\xf1\x1a\x0e\x02\x88\x91\x34\x9b\x07\xf8\x16\xf8\xd0\x0d\xa7\x34\xdc\x05\x98\x04\x7b\x87\x82\xc8\x4b\xf2\x93\x1f\x7c\x6c\xd3\x18\xd8\xb3\xa4\x36\x6c\xf9\x10\xe7\xae\x14\xe9\x5c\x25\xc8\xf2\xb8\x9d\x1c\x53\x9f\x7b\x1e\x0f\xc4\x10\x79\xbe\x8c\x30\x61\x45\xce\xd9\xb9\x2e\x31\x31\xfe\xca\xf6\xc8\xc5\x39\xf9\x5c\xff\x81\x06\xcf\x5d\x82\xa4\x25\xa4\xb5\x30\xe3\xf2\xdf\x94\x6f\xfe\x9b\xa8\x06\xcd\xc9\xdf\xc5\x13\x83\xb4\x1b\x11\x27\x22\x0d\xf5\xc1\x9e\xa4\x3a\x0e\xb8\xf0\x23\x6f\xac\x95\xfc\x87\x0f\x1a\x59\x59\xc2\xf6\xa7\xe0\x0c\x24\x79\xe6\xae\x40\xf6\x58\x8d\x38\xdc\x96\xc0\x13\x82\xc9\x0a\xdc\x65\x45\xb9\x14\x8f\x10\x5c\x0c\xdf\x76\x80\xb5\x50\xcb\x22\x63\xf1\x86\x84\x91\xa4\x8b\xd8\xbe\x32\x89\xf3\x55\xc4\x67\x07\xb4\x52\x79\x1e\xfa\x4c\x0f\x68\x1c\x6b\x83\x51\xf8\x03\xee\x4e\xa5\x96\x68\x07\x66\xef\xff\x4e\xed\x03\x36\xe0\xf3\xf8\x37\xdf\x1a\xf5\x46\xc3\x6d\x57\x46\x21\x7b\x0f\x18\x60\xdb\x42\xbe\x2b\x9e\xd2\x13\xe9\xf9\x04\xea\xbe\x6a\x16\xe3\x17\xf2\x40\x25\x51\xaf\x24\x4c\x3f\x3d\x27\x37\xc0\x4f\x40\xc4\x75\xe1\xfb\xbd\x21\xbf\xf2\x2f\x5c\x3c\xf1\x19\xf9\x28\x38\x9b\x91\x3b\xb1\x66\xfa\xbf\x7f\xe1\xef\xd2\xcd\xa7\x9c\x13\x37\x63\x70\x4e\xfb\x2f\x25\x3f\xff\x7a\xf7\x99\x44\x6a\x89\xe8\x70\x6f\x58\x46\x3c\x88\xe2\x48\x0f\xbc\xdc\xc8\x8c\xad\x67\x44\x42\x7a\x1f\xea\x58\x22\x75\xcb\x86\x45\xf7\xff\x6a\xcc\x73\xb1\x21\x94\x2c\xf3\x2c\x4f\x19\x91\x19\x4b\x6c\x44\x7c\xb1\x1e\x8c\xc4\xde\xe5\xde\xf1\x5b\xa1\xba\xcf\x96\x02\xd6\x93\x56\xae\xa8\xdb\x37\x0f\x1d\x3b\x0f\x0b\xc9\x59\x99\x50\x77\x8b\x66\xfa\x8a\x5a\x04\x65\xd3\x3c\x13\x57\xae\x4d\xd1\x52\x87\x0f\xc3\xc6\x25\xd4\xed\x73\x37\x0a\x76\x1e\xfe\xf3\x3f\xed\x20\x2a\x23\xa5\x06\xb0\xec\x42\x9b\x0f\x47\xa4\xc2\xea\xae\x1d\x1d\xd7\xbf\xd2\x8d\x49\x5d\xd7\x69\x64\x98\x7d\x75\xbd\x4f\xd7\x7a\xfe\xac\x08\x88\x92\xcf\x3f\xdd\xa9\xc7\x38\x83\x24\x58\xc5\x60\x9a\x51\x69\x25\xb3\x02\xfa\xd7\x5c\x5d\x3f\xda\x78\x47\xfb\x8c\xe6\x1e\xc9\xed\xfb\x9f\x09\xe3\x81\x08\x59\x48\xde\xde\x90\x05\x7c\x56\xa1\x1f\x21\xa5\x43\x26\x2c\x41\xcf\xfc\xf6\x5c\xba\xf4\x51\x81\x6a\x0e\x04\xf1\xe9\xc4\x4b\x39\x77\xe1\xac\x33\xb3\x3e\x49\x96\x42\xce\x21\x21\x32\x69\xb9\x79\x65\x7b\x4c\xfa\x98\x54\xff\x54\xf3\xfc\xb9\xbf\xeb\x81\x83\xe8\xc5\x4d\xc6\xaa\x46\xca\x50\xa2\x6d\xa3\x60\x1e\x31\x83\x50\x22\xc5\x3d\xd6\xd7\xf8\xef\xc5\x76\x9f\x93\xf7\x11\x9c\x01\xc5\x0b\x44\x4a\x7e\xcf\xd3\xf8\x77\x27\x55\x71\xbd\xb6\x82\x07\xdf\xa8\x81\x32\x44\x47\xff\xaa\x99\x35\xbb\xcf\x98\x0d\x13\x2d\xab\x1c\x2e\x73\x2f\xcb\x25\x2b\x7e\x0a\xde\x77\x2b\xd2\x8c\xfc\xaf\xff\xf5\xe7\xf2\xe4\x68\xcb\x17\x49\x65\x0c\xf9\x4c\x4b\x21\x9e\x22\xc9\xcc\x5f\x29\xd7\xd7\xd7\x1d\x1c\x84\x5d\x85\x08\x95\x29\xc8\xd3\xb8\x6d\xf8\x61\xc0\x56\xd1\x23\xb3\x1a\x97\xa0\x14\x31\xeb\x2e\x8c\x11\x57\x87\xaf\x46\xc8\x7e\xfd\xf4\x93\x9a\x8f\x35\xf9\xf6\x77\x1d\x56\xf6\xe6\xfa\xfa\x41\xc8\xec\x4d\x22\xd2\xec\x1a\xe8\xf4\xef\xe6\xe4\xfd\x57\x1a\x64\xf1\x86\x08\x0e\x17\x4a\xfd\x4b\xc2\x9f\xb0\xfa\x79\x52\x0e\xc6\xef\xea\x75\xbf\xdb\xb1\xd7\xa9\xc4\x96\xda\x57\xa0\x6e\x49\xd8\xe9\x2b\x4f\xdd\x0f\x2e\x1d\x48\xf1\x43\x26\xe5\x85\xa9\x70\x04\x2e\x8c\xfa\x01\x23\x37\x59\x68\xc4\x27\x7e\x64\x21\x79\x8c\x28\x61\x5f\x0d\x4c\xfe\xee\xe3\x1d\xf4\x5b\xac\xbd\xcd\x21\xc9\xb7\xfa\x3e\xfe\xbb\xf2\x45\xaf\xdc\xdf\x7f\xb7\x9e\x85\x79\x17\x89\xf8\x95\x75\x42\xd4\x8b\xa8\x09\x62\x7f\xb2\xd7\x7c\x4a\x62\xba\x61\x1a\xc6\x8d\x44\x0c\xc3\xfe\xdd\xdc\x76\x1d\x32\x7b\xc4\x12\xce\x75\xca\xc9\x87\x5b\x42\xc3\x50\x39\xed\x7a\xed\xc5\x8c\xea\x6c\x24\x46\xa8\xa8\xb3\x47\xfc\xae\xa6\x2f\xd6\x2f\x50\x23\xfd\xfa\xfb\xbf\xcc\x5f\xcd\x5f\xcd\x5f\xff\xae\xc3\x7f\xcd\xbb\xd5\xd2\x8f\xe4\x97\x0d\x51\x17\x2b\x29\x61\x99\x67\xea\xcc\x5b\xa5\x0c\xd2\xc7\xa4\xac\xb8\x51\x16\x5b\x0e\xbc\x95\x38\x86\xa1\x93\xe6\x60\x52\xcf\x50\xee\x1d\x1d\xc6\x23\xd6\x3a\x1e\xe6\x89\x2a\x95\xc7\x23\x9d\x56\xc2\xed\xe2\xbb\x1c\x2a\x5d\xc9\x0c\x3e\x56\xbf\x1c\x47\x5f\x94\xef\xa5\x4d\x1a\x17\xfc\x4a\xad\x2a\x65\xc3\x67\x24\x9a\xb3\xf9\x0c\x96\x03\xa3\x12\x1e\x81\xf8\xe6\x3c\xd1\x6e\x1e\x67\x4f\x76\x15\x14\xd9\x4b\x60\x81\xba\xa5\x76\xaf\xa3\x1e\xd5\x6d\x4a\x2d\x11\xb5\x92\xcd\x47\xab\x88\xdb\x2b\xb0\xbd\x6c\x98\x8c\x5e\x37\x5a\x08\x02\x7b\x5a\xab\x43\x34\x7e\x12\x2d\x5d\xf6\x0b\x63\xdc\x21\x81\x88\x46\xe6\x13\x96\xc2\xae\x55\xbe\x07\x34\xee\xd7\x4f\x3f\xcd\xc9\xff\x23\x72\x78\xd6\x65\xac\x31\x71\xab\x09\x95\x1a\x93\x4c\x17\x51\x96\xd2\xd4\xbd\xc6\x9c\x82\x6e\x1b\x2e\xfd\x5b\x3f\x2d\xbc\x5c\xc8\xad\xb2\x8c\x4c\xc7\x6f\xb2\x4c\x5d\x57\xcc\x0b\xd4\x8f\x51\xf5\xff\x53\xb5\x28\x16\x54\x46\x81\xb2\xfb\x0f\x80\x2b\x91\xfb\x0b\xf5\xc9\x1b\xd5\x82\x27\x91\x86\xff\x7f\x0d\x1c\x01\x36\x60\xf5\x57\x3f\xa6\x74\x05\x69\x59\xc9\xb7\xf7\x17\x7f\x9c\xcf\xe7\xf7\x17\x3a\x25\xe0\x76\x2a\xc1\xfb\x8b\xff\x9f\xfd\x3c\x65\xfe\x5b\x66\x84\xc1\x79\x7d\x98\x4b\x90\x24\x52\x5d\x8c\xde\x0a\x9e\xa5\x22\x8e\x59\xfa\x89\x3d\x46\xb2\x4d\xfb\xb2\xfd\x68\xe1\xbc\xc1\x90\x47\xeb\x75\xae\x5d\x44\x9b\xad\x45\x9d\x56\xfa\xc6\xa0\x19\x00\x9b\xa1\x8d\xa6\x2e\x11\x17\x4c\xab\x9a\x0b\xc9\x52\xc8\xb9\x05\xc9\x53\x78\xa8\xee\x5b\xde\x5f\xfc\x1c\x39\x3a\x33\x93\xf6\x3a\x8c\x26\xcf\xf1\x71\xf0\x6b\x73\xf2\x8b\xf6\x18\x6b\x9a\xac\x5c\xdb\x05\x63\x9c\xc8\x3c\x08\x98\x94\x1a\x22\x74\x39\x70\x22\x9d\x01\xa6\x4a\xc2\x7c\x36\x12\xda\x3b\x2f\xb3\xd4\x92\x46\xb1\xaf\xef\x13\x4b\x3f\xfb\x92\x4d\x4e\xa3\xd7\x0f\xec\xdd\x3c\xb3\x7e\xc6\x3b\x9a\x51\x9b\x7d\x70\xbb\x8d\xc0\x23\xcd\xc8\x83\xbd\xdf\x2d\x98\xcd\xc6\x33\x27\x1f\xed\x39\x35\xb3\xc9\x1c\xa3\x4c\xc2\xba\x5c\x6c\xc8\x42\x18\xbf\xea\x1d\x65\x6b\xc1\xef\x98\x96\x11\xdd\xa9\xdf\x5d\xe6\xb1\xfa\xdf\x81\xfb\x35\x7d\x39\xd2\x3d\xd4\x69\x0b\x44\x1c\x2f\x68\xf0\x65\x56\xa2\xb9\x22\x35\x5c\x6a\xee\x8a\xeb\xa6\xdb\xa4\x32\x37\x29\x6c\x84\x06\x3b\x75\xf2\x83\x12\xdd\x6a\xd3\x2b\x44\xdc\x7a\xe8\x29\x83\x13\x57\xce\xea\x92\x50\xa9\x71\x0f\x41\xe9\xa8\x8e\xc8\x48\xdf\x53\x16\x51\x1c\x65\x1b\x2b\x33\x4f\xd2\x68\x4d\xd3\x28\xde\x40\xfb\xdd\xc4\x9b\x21\xf0\xfa\xd7\xc6\x2a\xa4\x76\xb1\x23\x29\x7d\x52\x52\xba\x83\x49\x84\x7d\x12\x59\x68\x39\x2d\x32\xfc\x55\x47\x0f\x1e\x80\xad\xbf\x2f\x5c\x94\xe6\x3c\x8b\xd6\x6c\xfe\x89\x3e\xbd\xff\x9a\x31\xee\x85\xea\x23\xa7\x3c\x21\x4e\x59\x8f\xd4\xa5\x1c\x8d\x57\x76\x8d\x19\x57\xfb\x95\x56\xcd\x6d\x9d\x28\xdf\x9a\x59\x1e\xc2\x15\xd4\x46\x6e\x98\x3f\xfb\xeb\xbe\x58\x3a\x1a\x10\x79\x57\x96\xaf\x35\xe6\x05\x2a\x2e\x9d\x11\xcf\xfe\xe3\x7f\x0d\x4e\x7e\x27\x89\xdc\x26\xb9\x6b\x9c\x8e\x7a\x52\xbb\x17\x9f\xdd\xe8\xc9\xb4\xaa\x9f\xea\x1f\xb7\x57\x67\xb3\x37\x8d\x93\x61\x93\x36\x6a\x81\x4c\x8d\x53\x51\x81\x08\x51\x03\x35\x51\x73\xd3\xa5\x81\x82\xc4\x39\xd6\xe0\x34\xcf\x77\xcd\xef\x0d\x00\x05\x37\x7b\xe4\x28\x71\x9a\x9a\x39\x9a\xb0\xc9\x19\x4d\xc7\xd4\xf3\x28\x6f\xd1\x28\xed\x72\x9c\xbb\x2b\x4c\xe3\x09\x5e\x5c\x72\x8a\x75\xda\x10\x77\x41\x42\x78\x96\x48\x86\x91\x13\x18\x39\xf1\x02\xcf\xab\x67\xe7\x3e\xcb\x84\x05\x1d\x52\xb1\x90\x49\x28\x31\xb1\x60\x0f\xf4\x31\x12\xa9\xdb\x8f\xde\x61\x30\x70\xe7\x55\xab\xae\x28\x0f\xaf\x94\x4f\x9e\xef\xa0\x4b\xdd\x3e\xf6\xee\x54\x07\xab\x9d\xd6\x6f\x6d\xef\xb6\xc9\x6c\x4a\xf4\xc3\xb5\x9d\xfe\xac\xff\x90\x51\x0b\xe4\x88\x1c\x3c\x1d\x80\x82\x16\x1b\x0d\xd3\x3f\x45\x3c\x14\x4f\xf0\x7d\x75\x2f\x26\xb7\x22\x31\xf9\x86\x6d\x81\x04\xa0\xbf\xe6\xe4\x13\xa3\xe1\x95\xe0\xf1\x66\xca\xa3\xa9\xdf\x70\x14\x93\x58\x58\xae\x01\xad\xe0\x5b\xc1\xc3\xa8\x35\x34\x71\xfb\xd1\x4a\x38\xa2\xbe\x27\x82\x39\xf4\xf0\x41\xc8\x9f\xcd\x52\xc0\x52\xe1\x40\x6c\xbb\xc4\xc0\x39\x54\x59\x8d\xdd\x57\x9a\x98\xca\xec\x73\x4a\xb9\x84\x56\x7d\x8e\x5a\x45\x9e\x3f\x51\x99\x15\xb9\xaf\x03\xd7\x97\xcc\xbd\xc0\xaa\x4c\x04\x67\x76\x91\x43\xa1\x32\x51\x01\xc5\x0f\x38\x77\xa0\x8d\x5b\xa7\xac\x94\x74\xd5\xd6\xf4\x1b\xf2\x90\xaf\x29\x27\x29\xa3\x21\xc0\xe0\xe6\x2b\xf6\xfe\xae\x0c\x58\xc8\x32\x1a\xc5\x56\xe9\x03\x09\x31\x5c\xc7\x7a\xcb\x41\x53\x46\x65\xab\x87\xf2\x19\x60\x02\xf5\x90\xcb\xf0\xeb\x46\xf2\x52\xea\x2a\x28\x7b\xfc\x6e\xe7\xf9\x73\xe7\x9d\x39\xde\x4f\xce\x2c\x73\xf9\x19\xca\x76\xfc\x48\x63\xc9\x66\xbd\x95\x0d\xb3\x3f\x94\x3e\x6d\xec\xf3\x26\x81\xdf\x28\xd6\xb6\xfb\xfd\x41\x98\x12\xf7\xde\x56\x58\xa1\xf4\x94\xf6\x66\x02\xe5\x1e\x07\xd6\xf5\x2b\xce\x61\x84\x0b\xa6\xee\xb0\x76\xc1\x05\x37\x0e\x23\xa8\x99\xd5\x51\xc0\x81\xc2\xb6\x20\x26\x30\x59\x1f\x7b\xd4\xb0\xa7\x33\xc6\x0a\xca\x27\xe8\x80\xce\xd1\x9d\x7f\x19\x68\x3c\x91\xd5\x53\x8e\x4c\xd2\x3a\x99\xa0\x1d\x22\xa8\x39\x97\x65\xa5\x5a\xd2\x45\xc6\xd6\x89\x3a\xe1\x7a\x9c\xd5\xeb\x88\x2b\x5f\x79\x63\x73\xde\xb7\xdb\xef\x75\xc4\x2b\x45\x91\xa4\xfe\x1e\x98\x74\x2d\x0e\x01\xa1\x46\x41\x5f\x7b\xb6\x2f\x11\xa1\x17\x07\xa3\x3c\x92\x4d\x51\x0e\x86\x6f\x74\x41\x21\x69\x01\x6e\x96\x92\x20\xa5\xf2\x21\xe2\x2b\x2d\x8c\xd0\x95\x53\x16\x4c\x97\x60\x09\x41\xda\xeb\x55\xbf\xf1\x05\x8a\xaf\xc8\xb7\xea\xc7\xac\x74\xab\xee\x0b\x84\x4a\x22\x85\xe0\xea\xdf\xc8\xe4\x0a\xa3\xe1\xe6\xbb\x9d\x09\x8a\x3f\x7f\xdf\x44\xa3\xfc\x5d\xd7\x9c\xf8\x09\x8a\x9d\x74\x84\x10\xb9\x01\x15\x71\x68\x8b\x55\x98\x0a\x4e\xa0\x28\x10\x5a\x69\xe1\x08\xf1\xa2\x56\x0d\xd5\x2e\xb2\x96\x4f\x85\x91\x54\xe7\x65\x1e\xc9\x07\xb2\x60\xd9\x13\x63\x9c\xb0\xaf\x49\x1c\x05\x51\xa6\x0b\x34\xd9\xda\x71\x85\x2a\xab\x34\x72\xaf\x5f\x0d\x30\x00\xb2\x3b\x22\xe8\xc6\x88\xf2\xb5\xc6\x44\x3c\xb2\x14\xb2\x22\x15\xa5\xff\xd6\x94\xd3\x55\x71\xb1\x2b\xdd\x8f\x73\x69\xd4\xe7\x25\x99\xb9\x9e\x68\x8d\xfc\x85\xc0\xcc\xaf\x8b\x07\x41\x8e\x23\x42\x62\xb7\x06\x78\x9c\x3a\x76\xa7\xe6\x2c\x3c\x38\x0e\xe1\x8f\xf0\xef\x95\x0b\x39\x18\x3f\x60\xc0\xed\xf9\x96\x31\xe7\xa5\xfa\x3e\xe5\x9b\x18\x0c\x0e\x28\xd8\xec\xa6\xd1\xfb\x57\xeb\x4c\x8a\x4d\x0c\x1f\xeb\xcf\x08\xf3\x34\x80\x81\x48\x36\xce\x59\x53\x2f\x13\x5c\x47\x4c\x10\x2e\x42\x23\x63\xf3\xa3\xb2\xbc\x89\x80\x07\x5c\xb0\xcb\xb7\x22\xad\x7c\x37\x5a\x12\x2e\x2a\x4f\xf9\x05\xb5\xbe\xdb\x79\x0e\xd5\xd4\xc5\x82\x86\xf2\xda\xd3\x66\x5c\xa7\xcc\x25\xd9\x2f\xfe\xfc\xc7\x44\x84\x57\x6e\x70\xfb\x5f\xf7\x03\x91\x32\x35\x69\xb7\x22\xfc\x6c\xbe\x5d\x07\x9f\x68\xdf\xe2\xae\x48\x1e\xd1\x32\x79\x46\x17\x63\x33\x4d\xe8\xe3\x21\x89\x69\xc0\x74\xa1\x39\xe5\x28\x95\x4e\x5b\x23\x11\xe7\xec\x49\xa7\x1c\x3b\x04\xad\xf8\xb5\xdc\xd0\x7d\x2e\x29\x77\xe5\xab\x5a\xb3\x51\xd4\x37\xb6\x2a\x82\xbe\x85\x21\xf5\xb5\x8f\xe6\x9b\x1f\xe1\x8c\xbd\x0b\x1e\x58\x98\xc7\x45\x88\xec\x85\x3e\x7b\x7f\x8e\xa4\xdc\xfa\xc8\xc0\x75\xed\xdf\x04\xfb\xd9\x27\xf2\x57\xc4\x31\xd8\x85\xb7\x22\xe7\x6d\x06\xe1\xad\x2d\xaf\xf7\x40\xe5\x03\x71\x5f\x93\xee\xde\xec\x46\xaa\xba\x39\x8b\x65\x4b\x72\x69\x33\xe4\x69\x79\x2c\xb5\xd7\x3e\xcd\x0e\xd3\x47\x11\x85\x94\x07\x8c\xac\x59\xf0\x40\x79\x24\xd7\xba\xbc\x5b\x64\x6b\xd9\x66\xc2\x6e\x73\x17\x38\x6a\x7f\x9f\xb3\x27\x75\x7b\xda\xe6\x59\x06\xb0\x1d\xee\x82\xdc\x9e\x1a\xb0\xb4\x34\xcc\x6d\xae\xb0\xed\x62\x21\x59\xfa\x68\x43\xa1\x4a\xe8\xd2\xa5\x2c\xad\xa4\xba\x40\xe0\x11\xae\x46\x05\x54\x66\xef\x48\xee\xf5\x5d\x99\x67\x7c\x7c\x6b\xb7\xcc\x33\xb3\xf6\xf5\xdf\xd7\x23\x51\x07\xaf\x67\x98\xad\x2e\xdb\x55\x97\x7a\x6d\xb7\xa1\x3a\xf5\x21\x9d\x58\xca\x74\xe5\x41\x13\xce\x60\x43\x29\x8b\xc7\x06\x3a\xb0\xf5\x0b\x25\xcb\xae\x0f\x5f\x77\x0d\x5b\xbd\x7d\x90\x32\x91\xd1\xb8\x7e\xa8\x3c\x47\xd7\x0c\x58\x79\x08\xc8\xb7\xba\x36\xa1\xfa\x44\x7f\x2d\x10\x69\xca\xc0\x9e\xd6\x7f\x63\x28\x33\x37\xe4\xa8\xe9\xae\xdf\xd8\x8d\xb7\xcf\x9a\xea\x1c\x28\xb5\xa4\xa0\x20\x1a\x00\x76\x26\xbc\xd3\xc0\x79\xde\x63\x6e\x5d\x72\xdf\xcb\xff\x56\x5f\x33\x20\x3b\xaa\x5d\xb0\xca\x71\x98\x57\x2e\x3e\xdf\x0d\x35\x16\x25\x3b\x72\xe0\x16\x2b\xf7\x50\x27\x1c\xb5\xc2\xeb\xb3\xdb\x60\xbe\xb1\x9c\xc8\x32\x81\xb5\x31\x80\xcd\xd2\x0d\xfe\x95\xd3\xe3\xec\x03\x6e\x90\xeb\xa9\x6d\x00\x6d\x75\x59\xf8\x37\x28\xdf\x9f\xb5\xe3\xbf\x00\x27\x08\xa8\x1f\x1a\x28\x63\xbc\x72\x5f\x22\xf6\x3d\xdb\x77\x3f\xcf\xc1\x39\x40\x48\x58\xf6\xbd\x87\x3b\xf2\xfd\xad\xeb\x2a\xaf\xba\xf9\xd9\x7f\x7c\x77\x72\xb2\x7f\xad\xbf\x50\x34\x3a\xdb\xe5\xe7\x1d\x0e\x9b\x07\x99\x0b\x47\x34\x83\x0e\x73\x51\xbd\x83\xe8\x02\xd8\x85\x43\xda\xaa\x64\x51\x33\x17\xf1\x95\xfe\xc9\x36\xf7\x4e\x3f\x67\x7f\x4c\x6b\x67\x74\x20\x8a\x9c\x93\x5b\x13\x95\x03\x69\x1a\xa2\x25\x51\xc3\x49\xfe\x93\xdc\xdb\xaf\xe9\xd7\xdf\x5f\xec\x73\xdd\x29\xbd\xa2\x0a\x6c\xef\xca\xfa\x78\xeb\x56\xf7\x04\x40\x65\x1d\xa7\x54\x69\xab\x4e\x06\xf1\x0b\x7f\x07\x31\x15\xf7\x17\x0e\x94\x51\x13\x52\x7a\x76\x18\xde\x88\x25\xb1\xd8\x40\xe5\xdb\xc6\x05\xe2\x1e\x21\x8c\xab\x93\x44\x92\x90\x05\x31\x55\x7b\xf4\xd1\xae\x03\x7d\x25\xb9\x55\x37\x4d\x9d\x7e\x1f\x2e\xd0\x77\x3e\x8f\x84\x0c\x11\x4a\x9a\x5e\x1e\xdd\x52\x49\x06\x3b\x76\xd2\xd6\x0e\xe5\xd1\x5d\x95\x59\xc8\x1a\xa5\x48\x8c\x14\x1b\x7f\x2f\xbc\xc8\x7d\x7b\x2f\xb1\xd0\xcf\x85\x47\x10\x6f\x0a\x47\x40\x96\x38\xfc\xc1\x5a\x78\x4c\x01\x4e\x71\xe2\x0e\x40\x32\xb9\x97\xf5\x90\xe0\x6c\x3f\xdb\xac\xc1\x09\x8b\x43\x1f\x45\x38\x7d\x45\x38\xaa\x17\xda\x36\x77\xf4\xe0\x33\x98\x95\xa2\x17\x91\xf4\xba\xf1\x44\xa5\x3b\xf9\x50\x2f\xf4\xc2\xf5\x42\xde\x3e\x1c\x58\x30\xe4\x5e\xdc\xae\x18\x2a\x3d\x56\x4e\xb9\x5c\x7c\x86\x62\xa1\xa9\xbb\x82\x7b\xc5\x16\xd5\x4c\xf0\x38\xe0\x78\x61\x12\xcd\x97\x51\x38\x34\x3d\x4f\xb6\x2c\x1c\x3a\x47\x85\x4f\xf9\xc8\x1b\xd2\xfb\x6a\xd7\xf8\x94\x1e\x6b\x14\xf9\xec\xe6\x8a\x9f\x4e\xfe\xf3\xf3\x1e\xd2\x9f\xb3\x10\xfc\x1c\x8e\x7b\x26\x34\x97\xad\xb8\xe1\x07\x2f\x56\x9a\x66\x66\xca\x9d\x85\x8f\x24\xd1\x6f\xa8\x39\x6d\x17\x42\xc4\x8c\x6e\x05\xfd\x27\xa9\x58\xa5\x4c\xca\x77\x8c\x86\x71\xc4\x59\x4f\xf5\x16\xfd\x0a\x53\x08\xee\x67\xc4\x4b\x13\x58\xf2\xfd\x6d\x52\x1f\xfb\x33\x64\xa1\x93\xd1\xe9\x61\xf3\x06\x57\x4f\xcf\x92\x46\xb1\x15\x8a\x94\x3d\x17\x4b\x46\x6b\xd1\x88\x50\x47\xb2\x4e\x10\x92\xa4\x22\x50\x2f\xd6\x5f\xf5\xbe\xa5\x81\x24\xea\x3b\xc6\x51\xa6\x56\xd6\x6d\xa5\xcb\xef\xbf\x06\x8c\x85\x90\x78\x01\x7c\x44\x57\xc2\x29\x4f\x97\x34\x60\xa1\xcd\x1b\xe5\x35\x48\xbb\x7e\x5e\xbe\x92\xa2\x83\xf0\x6d\x73\x6a\x33\x99\x45\x6b\x0d\xde\xe6\xa9\xb5\x21\x30\x66\xb4\x7e\xda\x4a\x2b\xf1\x3f\x5e\xbd\xaa\x33\x9b\xbb\x6b\xc8\x00\x4a\x6b\x9b\xd2\x8f\x6e\x27\xda\xf3\x43\xd7\x95\x1b\x49\x18\x36\x05\x61\x9c\x07\x30\x3e\x67\x71\xdc\x4f\xa5\x7c\xb5\xb0\x3f\xf5\xd4\xbe\xb7\x32\x1f\x7f\x20\x74\x2a\x62\x90\xfb\x00\xf3\x0e\x5f\xb3\xec\x49\x24\xdd\xce\x80\x74\x45\xca\x75\x76\x85\x79\xec\x13\xc5\xaa\xee\x2f\x9b\x1b\x5f\xd1\x26\xbb\x45\x51\x9f\xab\x1b\xbc\x50\x46\x41\x0e\xae\x1a\x81\x54\x59\x16\xa5\xc6\x63\xde\x5b\x5d\xa1\xd7\xdb\x7f\xb1\xcd\x5e\x71\x5f\x1e\xee\x54\x16\x51\xed\x20\xe1\xb3\x52\xb2\x6d\xf1\x9e\xac\x57\xef\x0d\xa7\x58\xdb\xed\x7a\xd9\xa5\xf5\xaa\x3c\x68\xdd\xa3\xf5\x7e\xf8\x5f\xc3\xd5\xd2\x9a\xfe\x4f\xdd\x87\xe9\xe7\x0a\xad\x57\xb8\x0d\x30\xb6\x75\x2c\x6a\x95\x40\x25\x19\x4d\x57\xac\x61\x5f\x0d\x21\x8c\x1a\x4c\x3e\xe6\x6d\xf7\xcf\xa5\xff\x7d\x64\x01\x59\x71\x8a\x4d\x57\x38\x56\xcc\xe1\x71\x95\x63\x35\x10\xaf\xbd\x25\x1f\x51\x3a\xb6\x33\xa5\xdf\x46\xe3\xd7\x2d\xb3\x01\x68\x7c\xd8\x9a\x7b\x6c\x71\xbd\xa5\xf5\xd1\x39\xea\xce\xed\xe1\xcb\x55\xdb\xc6\x05\xbf\xca\x58\xba\x8e\xb8\xbd\x48\xb5\x36\x92\x7c\xab\x53\x0e\x6a\xdb\xec\xd9\x6e\xeb\x43\x0c\x11\xd6\x90\xf3\x43\x0e\x54\xef\xdb\xdd\x63\xee\xfc\xb7\xac\x46\x71\x51\x8e\x13\x90\x59\x64\x12\x1c\x82\x0b\x6c\x4f\x98\xf2\x6d\x06\x64\x33\xaf\x5f\xbd\xfa\xc6\xdb\xea\x01\x4d\x68\x00\x39\xfc\x3e\xeb\xa4\xd8\x1b\x93\xc3\x52\x99\xcf\xf2\x6f\x58\x51\x87\x2d\xf8\xbc\x61\xa5\x33\xc3\x0f\x5d\xd0\xcd\x31\x32\x9d\x4c\x67\x75\xdc\xb6\xc5\x7b\x4f\x81\x06\x94\xf6\x18\xfe\x5d\x17\x14\x74\x06\xba\xe1\x03\x14\xd6\x43\xd1\x0a\xa2\x91\x15\x2d\xdb\xfe\x52\x1f\x6f\xc2\x78\x80\x85\x7f\x64\x8a\x26\xed\xe0\x08\x1e\x53\xbc\xb2\xdd\xf4\xcf\x5a\xce\xd2\x24\xfa\xd8\x53\xca\x52\xc5\x5a\xf7\x67\x24\x7c\x11\x0b\xd3\x4b\xdb\xea\x57\xaa\x02\x9c\x71\x45\x2c\x85\xf7\xd0\xb8\x30\x8a\x47\x4c\x7d\x73\xbb\xa9\x8b\x1b\x5e\xf9\x60\x21\xf6\xac\xae\x4a\x9d\x29\xdf\x40\x1e\x6d\xae\x33\x4f\xa0\xba\x05\xd5\x2d\x2f\x8e\x13\x30\x29\xf6\x7f\xd2\x4e\x06\x78\xc7\xde\x06\x53\x1b\x06\xaa\xe8\xcc\x74\x95\x09\xf5\xbf\x43\xbd\xff\x1d\x52\x08\x2e\x09\x64\xe5\xd5\xab\xfd\x56\x84\xdf\xaa\x8b\x93\x45\x45\xbd\xd7\xe9\xf8\x3f\x35\x07\x2f\x2c\x4d\x10\xb0\x05\xfe\x91\xb0\x13\x65\xe0\x5d\xa9\x26\x97\xf9\xa6\x68\xdb\x5e\xda\xa0\x3d\x90\x02\x7f\x34\x5e\x4c\x82\x21\x6f\x98\x8f\x28\x70\xf2\xac\xf1\xe1\x14\x5b\xf1\xb2\x6e\x81\x53\xcd\xb3\xcd\x02\x27\x63\xde\x41\x93\x3b\x39\x85\x53\x55\x1f\x34\x29\x95\x13\x4a\x87\xce\x43\x3a\xe4\xaf\xf0\x61\xb5\x43\xc5\x46\x6b\xd5\x0e\x95\x1f\xab\x4b\x37\x54\x27\x13\x47\x05\xd1\x34\xdd\xed\xbe\x15\xda\xfd\x39\x1d\x31\x1a\x7f\x4c\xc8\xd5\xb3\x60\x16\x69\xc5\xbb\xc7\x54\xee\x1e\x58\xbf\x7d\x17\x17\x6c\x20\xa5\x53\xc5\x61\xef\x3e\xf1\x3b\xd2\x19\x6d\xf3\x3d\xad\x7a\xa6\xee\xa3\x1f\xe5\x4b\x03\xc8\x97\x7a\xd0\x13\x16\x70\x76\x65\xc4\xb7\xa4\x27\xf6\x25\x07\x49\x2f\xbc\x4a\x86\x55\xf1\xc9\x88\x36\xe5\xfa\x8f\x4f\x0f\x34\xbb\x8a\xe4\x15\xbd\xea\x69\x74\x46\xd0\x7c\xdc\x79\x99\x6d\x68\x5b\x72\x24\xb3\x22\x0b\x8e\xc7\x7a\x7c\x81\xc8\x79\x36\xd7\xf0\x0c\xf9\xc2\x36\x5a\x4a\x65\x2a\xa3\xea\xfc\x3b\x3d\x12\x27\x39\x32\xc0\x73\x24\x31\x99\x52\x8b\x12\xc3\x6c\x89\xdd\x33\x2b\x41\x31\x49\x2e\xf3\xe5\x32\x0a\xc0\x7a\x97\xb0\xe7\x90\x65\x20\xd2\x39\xc3\xdc\x46\xbb\x5d\x26\x3a\x94\x22\xd5\x07\xfb\xa4\x05\xea\x67\x67\xdc\xb9\xd7\xe3\x8a\xb1\x0b\xf1\x59\x3a\x1f\x8b\xf3\xdb\xcd\x6e\x2f\x2d\x89\x2b\x88\xea\x6f\xc3\xc9\x8a\x24\xbc\x46\x1e\x55\x25\x51\x87\x13\x59\xdf\xfd\x88\x2a\x09\xa8\xd7\x07\x07\x4a\x3f\x6e\xb6\xb4\x42\x8a\x93\x1d\xe8\x56\x9f\xc2\xb7\x17\x86\xd8\x21\xee\xd5\x93\xd7\xfe\xcd\x2e\xae\x41\x16\xc9\x4e\xa2\x8f\x5f\xb6\x1e\x26\x29\x5b\xc6\xb6\x8c\x75\x49\x10\xb2\x6c\x43\x6e\x0f\x10\x03\x1d\xa0\x09\x29\x4d\x85\xde\x98\x6e\xa3\x8e\xb4\x07\xf7\xf0\xb7\xaa\x43\xa6\x47\xcc\x6f\xb8\xf5\xbe\xce\xd2\x4d\xea\x65\x30\xea\x33\x33\x34\x99\x0d\xb8\x89\x54\x72\x57\xd4\x71\x26\x5e\x8e\x86\xb4\x44\xdc\xb7\x53\xbc\x6b\xfa\xb5\x7f\xba\x17\xab\xbb\x2f\xe6\xab\x92\xa5\x4f\x17\x0f\xd5\xac\xba\xaf\x93\xf1\xf4\xe7\x36\x81\xc4\x6f\x00\x29\x98\x67\x29\x27\x74\x21\x45\x9c\x67\x6e\x15\x7f\xcb\xbe\xbe\x21\xff\xfe\x1d\x01\x49\x7f\xc2\x52\xb5\x64\xe8\x4a\x9f\x13\x15\x49\x48\xa5\x11\x86\x82\x93\x19\x4d\x33\xbb\x55\x8d\x86\x01\x5e\xfa\xfa\xd5\x37\xdf\xcd\xc9\x4d\xe5\xf7\x22\x49\x02\x1a\x07\x86\x24\x01\x70\xc2\xfb\xd5\xc5\x86\xa4\x22\xe7\xa1\x1e\x56\x73\x37\x08\x1c\x1e\xf1\xaa\x50\x08\x68\xa8\x24\x92\xca\xd5\x7f\xaf\x2b\xe0\xbe\xd1\x7a\xc2\xcc\xdc\x27\xd4\x14\x65\x82\xfc\xf9\xd5\x37\x33\xd5\x56\xd8\x12\x7f\x7e\xf5\x8d\x6d\xea\x61\xa9\xb8\xe6\x6c\x6e\xc3\x03\xea\x13\x81\x7d\x07\x63\x6e\x05\x31\x91\x71\xc8\x65\x26\x92\xc4\xa8\x8e\xa8\x4b\xd0\xb8\x2d\x17\x00\x99\xa5\x4b\x9d\x42\xd3\x4c\x02\xe3\xa4\xbe\x6d\xf4\x05\xe5\xee\x08\xc9\xb6\xa6\x87\x2b\x2f\x92\x71\xb2\x50\x6b\x42\x92\x3c\x01\xdd\x4a\xe5\x29\x57\x7c\x16\xc4\x2e\xa6\xe6\xac\x51\x5c\x16\x12\x71\xb7\xc2\xa0\x70\x2a\xbc\x15\x02\x32\x58\x28\x89\xe0\x99\xd0\x75\xcd\x2b\xef\x9e\x91\xec\x21\x97\x5a\x47\xa1\xc7\x10\x4a\xc9\x1a\x07\xe6\x2f\xba\xe9\x22\x8d\x56\x11\x6f\x5d\x66\xfe\xef\xc3\x50\xc5\x31\x0c\x92\xac\x59\xee\xfb\x7a\xfa\x79\x16\xc5\xf3\x88\x67\x32\x4b\xe7\x1f\x78\xf6\x4b\x7a\xb7\x3b\xda\xdd\x20\x9f\x39\xf4\xc0\xd9\xf1\x94\xb9\xcb\xd3\x56\xd2\xa5\xfe\x7c\xd9\x3a\x55\x5c\x4a\x32\x42\x17\xa2\x22\xea\x2a\x7f\xed\xa0\x23\xc6\x0f\x44\xf1\x4f\x0d\xbb\xef\x6d\x88\xcd\x2b\x75\xf7\xf9\xb9\x74\x86\xaa\x2d\xfe\xea\xd0\xf3\xc5\xc7\x0c\xbe\xff\xf7\x6f\xfa\x1c\x25\x76\x73\x78\xd2\x03\x37\x66\x54\x0d\x58\x9e\x90\x68\xbd\x66\x61\x44\x33\x16\x6f\xec\x8b\x58\x65\x22\xcd\xb6\x9e\x11\x99\xc3\x05\xd9\x9c\xa6\xd5\x53\x49\xc4\x3a\x8f\x97\xdb\x8e\xa1\xd0\x05\xcf\x21\x9a\x89\xbc\x36\x27\x40\x39\xa0\x07\x36\xb1\xfa\x26\x7c\x03\xce\x20\xd0\x15\x7e\x89\xd4\x85\x7d\xd6\xd9\xfc\x65\x9e\xaa\xfd\x3c\xab\xec\xdd\x5a\x5d\x65\x45\xf2\x04\x4c\xe4\xd6\xbe\x04\x8c\xc2\x9c\x59\xb5\x4d\x1e\x69\xdf\xce\x86\xb1\xbe\x47\xb4\xb9\x4d\x1b\x62\xff\x65\x1e\x8a\x27\xde\xbc\xa1\xe0\xb8\x30\x5b\x69\xcf\xcd\x50\x8e\xb3\xaa\xac\x26\xf5\xeb\xea\xe9\xbf\x6c\x4f\xfa\x0e\xbb\xc4\x2c\xe9\x92\x4d\x02\xdf\x7b\xd6\xe3\xd7\xdd\x6a\x5e\x0a\x5d\x7b\x1e\x4c\x69\x40\xcd\xcf\xd4\x6c\xe8\xad\x85\xdf\x24\x2a\xee\x6b\x97\xcc\xfa\x2f\x59\xbe\x63\xac\xff\x9d\xed\x96\x57\x65\xbd\x53\x44\xdb\xf5\x45\xd5\xe9\x22\x23\x1c\xf0\x2a\x81\x1a\x0b\x50\xb6\xb2\x8c\xe9\x38\xb5\xae\xb7\x7c\xde\x24\x1d\x46\x2f\xa1\x69\x16\x75\x5c\x3a\x6f\xed\x33\x95\x32\xc4\x22\x0d\xc1\xfb\xa0\x99\x81\xf4\xd5\x1f\xfd\x52\xf3\x85\x2b\xe8\x7e\xc6\xc3\x9a\x0b\x2f\xf4\x90\x40\xbf\x3e\xb3\xe4\xb5\xa9\xd9\xa3\xf0\xda\xed\x81\x5e\x9a\xda\xb7\x4b\x16\x04\xcc\xc0\x17\xc8\x0c\xa2\x52\x43\xc6\x55\xbf\x98\x9c\x93\x0f\xee\xbf\xad\x18\x2f\xe2\xca\x03\x90\x6f\xee\x39\xb9\x22\x1f\x59\xa6\xae\x7f\x6f\xc8\x0d\x91\x11\x5f\xc5\xb0\x3b\xd5\xe2\x7f\xf7\xf1\x4e\x27\x9b\x14\x32\xe3\x74\xcd\xe6\xf0\xf8\x5d\x26\x52\xba\x62\x6f\xc8\x8d\x24\x6b\x65\x1b\x7e\x13\x71\xbe\x66\x6f\x63\x1a\xad\x25\xa1\x8e\x74\x64\xe1\xfc\x9e\x7f\xae\x8c\xfb\x2a\xa7\x29\xe5\x19\x2b\x04\xb8\xda\x3b\xe6\xba\x0d\xb6\xd9\x1b\x8d\x91\xd2\xf8\x89\x6e\xd4\xaf\x24\x96\x40\x07\xd1\xa0\xd4\x2d\x70\x0f\xa3\x0a\x17\x55\xb8\x2f\x80\x09\x9f\x84\x08\xd5\x9a\xb7\xe2\x7c\x71\x47\x50\x64\x7c\x89\x32\x3a\xd6\x1b\xc3\xf5\x8d\xc4\xe1\xb2\xd0\x6d\x3a\xe0\xd6\x6f\xa3\xf7\x63\xfb\x29\x42\x0f\xec\xe0\x11\x05\x99\xbe\x89\x39\x5c\x0a\xe0\xbd\xad\x5b\x92\x59\xf7\x70\xb3\x26\x53\x9a\xa7\x27\xa9\xc9\x9c\x6c\xd6\x39\xd4\x63\x9e\x87\x1e\xd3\x5f\xdd\xc3\xea\x31\xbd\x5d\xd6\x2a\xc8\xac\x3c\x57\xa7\xc8\xf4\x1e\x41\x49\xe6\xd4\x7d\xaf\x2d\x49\xe6\xf0\xbc\xaa\x6f\x3b\xcc\xb7\x51\x0b\x79\x96\x1e\xe0\x71\x15\x88\xd5\x23\x69\x50\xbf\xa3\x55\x83\x78\x43\x2a\x4f\xb6\xc8\x10\x7d\x27\x70\xaf\xbc\x6a\x85\xac\x2b\x7d\x8c\x02\xf6\x91\xae\xfb\xe4\x5a\x4b\x44\xf8\x33\x04\xb5\xad\x19\xcf\x6e\x45\x1c\x05\x6d\xa9\x6d\x6a\x9e\xb6\xdc\x82\x8e\x69\x76\xc8\x99\x95\x13\x19\x98\x0a\xd6\x07\x8d\x35\x66\x46\xf2\x64\xa6\xc1\x38\x1d\xff\xec\x02\x9f\x05\xd7\x0c\xd9\x8c\x80\xfc\x91\x71\x07\xa1\x59\x80\xd1\x45\xef\x91\x44\xff\x7a\x24\xc9\xef\xbf\xa4\x20\x4b\x04\xad\xca\xef\xf0\xe6\x94\x6d\xb7\x24\xe2\x24\xe2\xea\x7f\x48\xf5\x42\xad\x33\xfb\x36\x11\xe1\xd5\xab\x99\x61\x9b\x44\x78\xf5\x7a\x46\x58\x16\x7c\x67\x89\xad\xad\x74\x61\x4f\x34\x52\xe7\x6f\x16\xc5\x84\xd1\xe0\x01\x88\x3a\xab\x7a\xb4\x09\xc9\x4c\x4a\xb1\x88\xaf\xe6\xe4\x1f\xd5\x4e\xcc\x8a\xd4\x38\x1a\x60\x5c\x8b\xc7\x22\x2f\x98\x48\x12\x21\xa3\x8c\xe9\xe6\xe9\x0e\xd3\x18\x8c\x01\x24\xb8\xf7\x3a\x7d\x4b\x53\x1a\xc7\x2c\xfe\xdd\x80\x4a\x7e\x09\x3c\x7b\x03\x4a\xcc\x33\x3a\x77\x9a\x15\xc9\xd9\x5b\x93\x9e\x0b\xab\x1d\x55\x3d\x03\x95\xa8\xea\xba\xe0\xe6\x53\x00\x37\xe1\xd5\x21\x14\x01\x00\x00\xd2\x32\xb3\x82\x07\xdd\x41\xd3\x3b\x08\x0c\xd2\x8a\xc0\x60\x9b\x0b\x72\x4f\x18\xef\x49\xe3\x35\x56\xee\x05\xe3\x25\x99\x19\x58\xfb\x2e\x6e\x72\x4e\x70\xc9\x1c\xd2\xaa\x03\x41\x23\x2e\x33\xca\xb3\xa8\x10\x0d\x39\x54\xc7\xbe\x52\x97\xb7\x51\xbe\xe9\x63\x14\xe6\x34\xf6\xe4\x70\xb1\x34\x29\x1c\x68\x0d\xd4\xb5\x99\x93\x0f\x4b\x5f\x3a\x3a\xb3\x0b\xf7\x54\x79\xcb\xea\x1e\x77\x4a\x8e\x2d\x36\xc2\x3e\x5d\x49\xe0\xb4\xa6\x91\x96\x15\xbb\x15\xeb\x1d\x5b\x97\xd2\x7d\xcd\x16\x0b\xd5\x2b\xb8\xfa\x57\x3b\x5e\x5a\xa7\x05\x89\x32\xec\xaf\x29\x3b\xe8\x6c\xac\x46\xd1\xa9\xbd\x3e\xc7\x1b\x42\x93\x24\x8e\x58\xb8\x75\xac\x9a\x93\xbc\x7c\x42\x14\xec\xfd\x91\x32\xa4\xc9\xa1\xd4\xb2\x2f\x4c\xd8\xea\x5b\xac\xb6\xd1\x75\x4f\x39\xc5\xb7\xfa\x6f\xbb\x6d\xf5\xc7\x7a\x80\x57\xaa\xa7\x5c\x36\xc1\x2b\xf6\x59\x18\x64\xc8\xbd\x61\xcf\xee\xca\x92\xd6\xa7\x21\x1c\xf0\x32\x51\x8b\x56\xdd\x58\x8b\x7c\x51\x15\x98\xd8\xb5\x24\x9b\x6b\x80\x67\xc5\x32\xf2\xee\xe3\xdd\xb5\xc5\xac\xcd\xf4\x6b\x8e\x48\xcf\x2b\xcd\xd4\xe9\xfe\x06\x8c\x8f\xf5\x0a\xae\xf4\x09\x3a\xf7\x7a\x3c\x37\x8b\x7a\x2e\x1f\x83\x79\x10\xe7\x32\x63\xe9\x3c\x16\x01\x8d\x8d\xb9\xbb\xbf\xa8\x79\xc3\xfd\x85\x6a\x7b\xa5\x68\xad\x8f\x80\xb7\xa6\x3c\x6a\xb8\x61\x76\xab\x90\xb3\xa3\xa9\x90\xdf\x5b\x1b\x2c\x33\xba\x4e\x58\x08\x60\x59\x4d\x3f\xe1\xf5\xcb\x3c\x5e\xaa\x7f\x61\x51\x94\x0f\x78\x73\x8e\xe7\x3c\xfa\x67\x5e\x40\xf9\x85\x2b\x9f\x32\xe9\xe4\x47\x35\x8e\xda\x29\x4a\xaf\xe6\x95\x12\x49\x25\xca\xc9\x6b\x63\xa5\x94\x52\x69\xb4\x55\x3b\xc4\x46\xb3\x67\x86\x44\x2c\x80\xc9\xca\x08\x2a\x47\x86\x16\x47\x39\xac\xab\x10\xb2\x19\x3a\xf3\x7b\x18\x0c\x59\x5f\xcb\xd5\x8e\xcb\x63\xc1\xeb\xd8\xdf\x6b\x73\x25\xea\x1e\x2f\x67\x8c\x0f\x34\x45\xa4\x33\xae\x3a\x0d\x90\x21\x6f\x21\x35\xcf\x92\xa5\x4c\x79\x38\xa4\xca\x1b\x79\x4e\x61\xcd\xd1\xb0\xa6\x5a\x3f\x55\x39\x1e\x22\xa6\x93\xcf\xe9\x9f\x8d\xd4\x60\x3e\xd1\x8d\x2d\x41\xac\xcd\xaa\x9e\x3c\xff\x3c\xa1\xba\x6e\xde\x7b\xa8\x3b\x0c\xdf\x75\xa8\xb1\x8e\x39\x53\x27\x98\x5e\xbd\x96\xfa\x15\x9c\x15\x42\xdd\x6f\x17\x1b\x38\x25\xbf\x23\x7a\x44\x7e\x86\x34\x7c\x11\x37\xd5\x91\x6d\x8c\x90\x99\xf0\xcc\x39\x52\x37\x75\x3f\x96\xd1\x2f\x4c\x92\x24\x65\x01\x0b\x19\xc8\x3f\x94\x59\xa3\x7c\x63\x5e\x2e\xab\xef\x99\x69\x26\xd0\x79\x55\xc0\xdb\x8d\x21\xbd\x76\x9b\x4b\xf9\x01\xe0\x88\x79\x3c\x60\x15\x2c\xd8\x11\xc6\xea\x08\x05\xd8\x7a\xb2\x2d\x16\x80\xed\x74\xd7\xdb\x21\x16\xa0\x77\x1e\xc6\xf2\x83\x8e\xa0\xe8\xca\xce\x58\xb1\xa1\x8d\xfb\x01\x0b\xfc\x96\x42\x10\x3c\x9c\xf5\xa8\x21\x08\xb5\xc4\x88\xdd\x06\x47\x8c\x41\x30\x3d\xee\xa1\x79\xaf\x3c\xb9\x1d\xd3\x07\x86\xc9\xba\x07\xad\xae\x4c\x61\xb6\xfd\xcf\xcd\x15\xc1\x19\x4a\x78\x89\xfb\xd5\xe1\x16\x52\xf9\x8d\x7d\x7a\xac\x9f\x9c\xe9\x8a\xf2\x99\x4d\x57\x54\x36\xe8\xb6\xf5\xdb\x3e\x88\x93\xbf\x98\x98\x86\xb2\x09\x97\xec\x9f\x39\x1c\xd5\xff\xfb\xd5\xac\x32\xc4\x75\xd9\x17\xeb\x5d\xbe\x9d\x42\x2f\xb6\x1f\xae\x89\x17\xa8\xcd\xc8\xe9\x22\x1b\x4a\x87\xcd\x87\x4c\xd7\x20\x56\x46\x36\x74\x40\x79\xf9\xda\x59\xbc\x6d\x66\xd0\x90\xc8\xd5\x2d\x22\x82\x93\x75\x6e\xe0\x79\xb3\x6e\x6e\x6e\x3f\x18\xf4\xf6\x88\x51\x1d\xa5\xe7\x0e\x5a\xdf\x45\x5c\x0e\x85\x94\x3f\x1b\xf2\xb6\x85\xc3\x19\x21\x12\xa4\x0a\xd4\xec\xd3\x8b\xc1\x12\x4f\xf6\xd8\x6a\xe5\x07\xc7\xde\x69\x76\x74\xae\x2a\x89\x31\x67\xf6\x83\x9a\xf0\xe8\xfa\x8d\xd7\x3f\xb3\x66\xe5\xc9\x23\x1d\x9f\xe5\x71\x3d\x9e\x3a\xad\x67\x39\xd9\xe6\x5b\x50\x79\xca\x65\xe9\x72\xd4\x32\x32\x70\x6f\x32\x39\xdc\x13\x96\xaa\xce\xd8\x9a\xa3\x70\x50\xe9\xe2\xe9\x4c\x82\x4f\x4c\x43\xbd\x25\x69\x5c\xa8\x11\x25\xe1\x2c\x60\x52\xd2\x74\xe3\xbf\xc3\x13\x71\x5a\x67\xa7\x18\x67\xdb\xba\x41\x13\x81\xfe\xea\x24\xa3\xad\xea\x49\xa9\xbd\x33\xa0\x8d\xab\xe9\x32\x3b\x74\x94\x7b\x67\x05\xad\x93\x87\x56\x31\x88\x1e\x2c\x77\x79\x8a\x33\x43\x7c\xb7\x5e\x8e\xc7\x4d\x0d\xba\x60\x19\x7d\x3d\xdf\xf6\x5e\x9b\x13\xc8\xbe\xbf\xfd\xf4\xfe\xed\xcd\xe7\xf7\xef\xc8\x95\xc6\xad\x80\xe8\xf2\x4f\xa8\xed\xb7\x11\x9d\x31\x37\x65\x6e\x93\xaa\x9f\xbf\xd6\x3f\xff\xfd\x75\x8d\xf3\x4c\xee\x18\x33\x20\x87\xba\x40\x42\x8a\x60\x53\x43\x77\x6d\xe1\x45\xb5\x69\xe1\xd9\xba\x1f\x5c\x27\x31\xb3\x55\x52\x48\xb4\x56\xc6\x56\x79\xc3\x92\xd3\x44\x3e\x88\xcc\xe9\x0d\x88\x4e\x8e\xf2\x16\x98\x50\x4b\x7f\x94\xef\xce\x92\xa5\x11\x8d\xa3\xff\xb1\x15\xc3\x43\xe6\xff\xa5\xc0\x92\xac\x52\x5e\x5f\x60\x4d\x74\x91\x63\xcd\xb5\x7f\xad\xe5\xdc\xb4\xae\xc9\x0f\x54\xea\x60\x05\x99\x07\x6a\x3b\x42\xa8\xac\x3d\x1d\x21\xfc\xc8\x53\xb1\x3b\x4e\xf6\x73\xc9\x73\x30\x98\x12\x8d\x80\xa5\x8f\xc2\x82\xca\x33\x99\x9f\x35\xbd\xab\xe3\x91\xd4\x85\x58\x57\xb0\xc9\x33\x7b\xb7\x79\x47\x33\xaa\x6f\x49\x75\xc3\x0a\xb4\xf2\x8c\x3c\x88\x27\xf6\xc8\xd2\x99\x6a\x88\x66\x60\x42\xaf\x54\xcc\x8c\x84\xba\x72\x4d\x94\xc1\x46\x56\xd3\xbd\x10\xe6\xc6\x5d\x84\x38\xa9\x91\xac\x3f\xd1\xf4\x34\xdb\x08\x31\x1e\xba\x62\x25\xb3\x12\xeb\x1d\xa9\xe1\x52\x73\xf7\x77\xdb\x9c\x28\xb3\xf2\x34\x99\x1b\x74\x4f\xe8\xdb\x9a\x2e\x61\x5f\x12\x45\xa8\x9b\xde\x4a\xa3\x03\xcb\x3c\xcb\x53\xb7\xd4\xa4\xc6\x57\x03\xb3\x22\x0c\x2c\xae\xc6\x3d\x64\x09\xd3\x3c\x94\xea\x9a\xcc\xe8\x22\x8a\x35\xab\xa2\x6b\xdc\xa4\xd1\x9a\xa6\x51\xac\x03\xd6\xdd\xc4\x9b\x21\xf0\xfa\xd7\x7e\xbd\x36\x1b\xb0\xfb\x7a\x8d\xd2\x91\x11\xa5\x23\x1d\x49\x96\x60\x9f\x58\xde\xdc\x9c\x06\x6c\x6b\x8d\x59\xec\x3d\x3b\x24\x42\x2f\xcd\x39\xe8\x29\x3f\xd1\xa7\xf7\x5f\x33\xc6\x8b\xd5\x81\x12\x93\x29\xa5\xdb\x7a\x2e\x49\x77\xd3\xee\xab\x4b\x61\x66\x4b\xfe\x8c\xc3\xe1\xfd\x75\x5f\x65\x4e\xdf\x95\x8b\x23\xee\x7a\xc1\xfd\x03\x19\x53\x95\x53\xe3\x08\xd5\x0b\x73\xc0\x6f\xda\x41\x9d\xd3\xe4\x67\xb5\xca\x11\xeb\x1f\xd7\x1b\xd9\xed\x52\xe3\x6e\x80\x73\xe2\x78\x84\x1a\xf7\xc2\xf8\x28\xa8\x59\x9c\xb8\xe1\xd9\xab\x10\x6d\x8d\xab\x36\x22\x92\xdb\x78\x69\xa8\x70\x1a\x68\x9d\x4e\x6e\x9d\x26\x6c\x81\x8e\xab\xb7\x6c\x38\x7a\x87\x3c\xdd\x7b\xa4\x3e\xe8\x71\x7b\x7e\x57\xaa\x9b\xd9\x72\x6b\xf6\x6b\x93\xed\x72\x5b\xf6\x7e\x80\x71\x75\x29\x56\xbf\x12\xc4\x34\xd5\x6a\x3e\x03\x1d\xc1\x97\x6f\x6d\x3a\x8d\xba\x3c\xc4\x68\x1a\x30\x94\xf0\xc5\x9c\xa3\x15\x2f\x7f\xe0\x32\xdf\x07\x05\x1f\x1e\x50\x23\x7b\x67\x9b\x5f\x29\xe8\x5d\x6d\x6c\x57\x94\xd1\xcf\xfb\xd5\xac\x3c\xa4\x99\x47\x0c\x23\xf4\xce\xff\x71\xcc\x4a\x77\x38\x61\xcd\xb3\xcd\xd1\x84\x5e\x0d\x33\x0c\x26\xec\x1b\x4c\xa8\x7a\xa1\xe1\xf7\x1d\x4b\x54\xe8\x72\xe0\xb6\x52\x37\x75\x54\x30\xc6\x3d\xbe\xf4\xb8\xc7\x72\xb5\xcf\xe1\xc2\x1e\xab\xc7\x47\x2b\xd6\x50\x7e\xac\xac\x4a\x2c\x3e\x43\xf8\x60\xea\x3e\xe2\x5e\xf0\x41\xcd\x04\x8f\x87\x1b\x6c\x15\x58\x44\xbc\x60\x82\x7e\x6e\xb9\x78\xc4\x19\x5e\xf8\x2b\xe7\xde\x38\x1e\xd9\x27\xc3\x4c\xf6\xb8\xf0\xfb\x17\x6f\xfb\x35\xc8\xd3\x63\x4e\x36\xef\x8e\x5e\xd4\xe8\xcd\x84\x23\x3f\x4b\x0e\x5b\xdb\x31\xcc\xe9\xba\xf0\xce\xec\xb7\x3f\x0b\x3c\x98\xf1\xf2\xfe\x1c\x0f\x35\xde\x1e\xa0\xf5\xc9\x6c\x90\x37\x1a\x6e\xab\x44\xb0\x7d\x34\xb1\x5a\x75\x7b\xab\xdb\xa9\x2d\xf6\x56\xbb\x63\x6b\x0a\x1b\xdb\x1d\xe1\xf9\x7b\xf6\x15\x7b\xdf\x74\xed\x49\xf2\x16\x7e\xa2\x41\xaa\x77\xa3\xe6\x90\x76\x09\xc9\x21\xac\xb7\x78\xd2\x94\xbb\xb0\x82\x55\x75\xb7\xf2\x5a\xbe\x3d\x46\x7a\x15\x16\x7f\x2f\x94\x66\xb7\x35\x67\x4d\xd3\xe0\x56\xe2\x21\xc6\x37\x0e\xee\x04\x1f\xc7\x40\xb4\x46\xe2\x97\x1f\x6b\x0c\xc3\xdf\x0d\xd3\xa9\xbd\xb0\xdb\xf0\xb8\x6e\x1b\x80\x75\x82\x06\xa8\x13\x94\xd0\x5c\xb2\xb6\xd3\xfe\x83\xc7\x9b\x1b\x75\x67\x58\xc2\xfd\xf5\x1b\x6a\x8e\xa2\x85\x10\x31\xa3\x5b\x02\x90\x24\x15\xab\x94\x49\xf9\x8e\xd1\x30\x8e\x38\xeb\x9e\x3e\x3f\xe1\x2b\x40\x14\x11\x2f\x4d\x60\x09\x1f\x82\x50\xfd\x2f\x8c\xd8\x9f\xb1\x91\xa9\x7a\xd8\xbc\xc1\xd5\xd3\xb3\xa4\x51\x6c\xc5\x69\xe5\xdb\x6d\x49\xb4\x6a\x72\x12\x68\xe5\x6a\x2a\x02\xf5\x62\xfd\x55\xef\x5b\x9a\x80\xa0\x3e\x78\x12\x65\x6a\x65\xdd\x56\xba\xfc\x1e\x12\x03\x83\x08\x07\x70\x04\x3b\xf5\x32\x4f\x97\x34\x28\x82\xc3\xbd\x06\x99\x3c\xe6\x85\x76\xad\xe8\x20\x7c\xdb\x98\x3e\x26\xb3\x68\xed\x27\x8e\x00\x14\x44\x8d\x19\xad\x9f\xb6\xd2\x4a\xfc\x8f\x57\xaf\xea\x6e\x55\x23\x28\xe0\x3f\x6e\xd5\x9a\xd2\x59\x91\x0f\xa8\x33\xa5\x46\xa0\xb1\xd2\xd4\xd1\xd3\x05\x94\x6b\x50\x94\x13\xe0\x4a\x1d\x1f\xa9\xa5\x97\x42\x07\x4d\x16\xf6\x75\xa4\x31\xf8\x7e\x88\x31\xe8\xe3\x46\xf8\xf7\x08\xcf\xa5\xa8\xfa\x13\xea\x0c\x33\x69\x84\xe1\xce\xa0\x5c\xb8\x7f\xd8\x23\x30\x66\x14\xce\xbf\xa5\xea\xbd\xbb\x56\xa8\x17\x08\xbe\x8f\x42\xba\x8f\x07\xd2\x23\x41\x81\xae\xc2\xe5\xd2\x14\xa8\xb3\x47\x2f\xdb\xf7\x5f\xf5\xf4\x94\x26\xf9\x09\x32\xfe\xbb\xd8\x58\xfd\x35\xaf\x16\x97\xdd\xf5\x20\xcb\x55\x97\x13\xba\x5c\x96\x9f\xa8\xf5\xf4\x46\xcb\x22\xd0\x1d\x33\xfd\xb9\x7a\x26\x59\xdd\xbf\xb0\xaa\x7e\x9d\x90\x86\xe9\xa4\x00\x2e\x2f\x0d\x1c\x83\x9c\x3d\x41\x37\xe7\xbd\x43\xe2\xf4\x16\xf9\x2f\xb6\xd9\xa3\x60\xf6\x36\xbb\xd2\x20\x85\xdf\xa1\x28\xd8\x56\xec\xbd\xac\x0d\xbe\x1f\x30\xaa\x7d\x0f\xe8\xb4\x23\xdc\xb6\xfa\xe0\x4e\x95\xd7\x6b\x5c\xb8\xc3\x2b\x6b\x55\x72\x76\x17\x3e\x8f\x4e\xaf\xde\xa7\xae\x56\x46\xd3\x15\xeb\xdc\x38\xfb\xc7\xb6\xf6\x8c\x0d\x7e\xdb\x15\x05\xec\xeb\x20\x3e\x97\xfe\xf7\x91\x63\x80\x0f\x28\xcb\x74\xb4\xd8\xdf\x62\x0e\x8f\x19\xfa\xdb\x4c\x64\xda\x5b\x5f\xdb\xe9\x35\x70\xf8\xef\x4e\x81\xa3\x9f\x2b\x75\xb9\xec\x16\x36\xc1\x6a\xb5\xce\xed\x31\x8b\x72\x55\xf6\xb9\xde\xd7\xfa\x10\x1d\x75\xfb\xf6\xf0\x46\xab\x6d\xe3\x82\x5f\x65\x2c\x5d\x47\xdc\x5e\x05\x5b\x1b\x49\xbe\xd5\x01\x34\x7e\x95\x37\x23\xb7\xd7\xa6\xb6\x2e\x54\x78\xe7\x60\x4d\x7e\xc8\xa9\xea\x17\xc3\xe8\x1c\x73\xe7\x81\x66\x4d\x35\x15\x74\x58\x8e\x72\x6a\xb2\xc8\x84\xeb\x80\x13\x6f\x8f\x99\xf2\x7d\x0c\x42\x6d\x5f\xbf\x7a\xf5\x8d\xb7\xdf\x03\x9a\xd0\x00\x22\x52\x3e\x3f\xb0\x0d\xa0\x7f\x2c\x82\x02\x45\x0b\x56\xf9\x0d\x5b\xbd\x64\x91\x67\xe0\xe0\x6e\x58\xe9\xe0\x28\x25\x86\x82\xe6\xc0\xef\xe9\x0b\x11\xe3\x35\x56\xf9\xb0\x78\xd9\x5e\xc5\x00\x0f\x5c\x50\x45\x84\xb2\x8f\xa8\xb8\xbc\x40\xca\xc5\x1f\x37\x5a\xb4\xd1\x7d\xea\xe3\x57\x18\xaf\xb0\x70\x97\x1e\xc4\xd3\x8e\xce\xe1\x20\x41\x9a\x36\x30\xcb\xdc\x40\x20\x2a\x53\xce\xc9\xad\x36\x44\x44\xf0\x78\x43\x22\x9f\x52\xf4\xe3\x30\xc9\x7f\x36\x86\x30\xee\x7e\xeb\xa8\xab\x39\x55\x75\x44\x77\x65\xe0\x01\xf1\x56\xbb\xe5\xfe\xe2\x13\xd3\x8b\xfc\xfe\x42\x6d\x87\xfb\x72\x90\xea\xfd\xc5\x31\xe2\x32\x2b\x77\xab\x1e\x24\x53\xfb\x4c\x77\x47\x76\x94\x32\xe3\xf9\xec\x93\xba\x49\x7e\x58\xda\x12\x38\xaf\x66\xfe\x27\xc6\xf9\x00\x5f\x77\xcf\xa8\xeb\x6a\x80\x47\xcf\xc1\xc1\xb2\x63\x58\x76\x0c\xcb\x8e\x35\x95\x5d\xc2\xaa\x63\x58\x75\x0c\xab\x8e\x4d\xab\xea\x58\x8d\xed\xc2\xd2\x63\xbd\x4a\x8f\x1d\xc1\x35\xbf\x53\xcb\xb8\xd9\x81\x80\xe4\xd3\xe5\xfa\x62\x66\x59\x1b\xcd\x84\x21\xce\xac\x3c\x03\x43\x65\x50\x6d\xf3\xcc\xd4\x36\x07\x84\xca\xfc\x30\x52\x38\xfc\x89\x43\x70\xfc\x6d\x59\x55\x67\x80\x59\x1c\x7a\xd6\x54\x7b\xae\x28\x0f\xaf\x0c\x7b\xbd\xef\x15\x1a\x8e\xb3\xbd\xc2\x78\xb6\x2b\x87\x1d\xad\xb3\x90\x5a\xee\x4a\xf0\x78\x73\x60\xbf\x8f\x59\x5e\x0c\xac\xca\x90\xfa\xa2\x62\xea\x5a\x6d\x95\x29\x4d\xe7\xf3\x6b\x34\xd3\x83\xce\x6c\x2e\x50\xb0\x69\x32\x5f\xd8\x43\xae\x03\x40\xe8\x04\xe9\xb6\xef\xac\xba\xa0\x41\xc0\x0a\xc6\xc6\x78\x8b\xc6\x2c\x1d\xcb\xae\x77\xa5\xcc\x2d\x9e\x69\x4b\x96\x9b\x37\x0d\xdc\x40\x39\x73\x7b\x0c\x31\x0d\xb2\xbc\x7c\x67\xb5\xac\x44\x31\xd4\xfe\x9e\x1c\x60\xa4\x77\xa0\xf3\xf7\xa8\x30\x20\x6d\x89\x81\xca\xd9\x51\x5f\x38\x20\x97\x2c\xbd\x5a\xe5\x51\xc8\x4c\x71\x80\xe6\xda\x00\x23\x69\x13\x1d\xba\x08\x60\xf3\x5d\xdf\x31\xd9\x92\x38\xf4\x1c\x95\x42\xba\x62\x33\x0d\xc1\x25\xd4\x8b\x19\x87\xf4\x5a\x6b\x9a\x5c\x2d\xa8\xf2\xfd\xc1\x3f\x53\x43\xc9\xbe\xaa\x75\x2c\xa3\x47\xc8\xff\x6f\x3e\x75\xe3\x54\xbc\x39\x14\x1c\x84\x06\xc0\x82\x2a\x77\x2f\x15\xea\xe0\x35\xbe\xbb\xe7\xb6\x48\x4d\xb1\x1a\xa7\xc9\x52\xf4\x36\xd9\xa4\xe1\x44\xd7\xea\x72\xa6\x77\x0e\x2c\x83\x2b\xb8\x7c\x10\xb9\xe1\x19\xfd\x0a\x28\x22\x5c\xf0\x60\xf0\x4c\x0e\x3c\x1e\x6f\x88\xcc\x93\x44\xa4\x99\xf4\x3a\xe2\x9a\x3a\xb3\x19\xc4\x0a\xfe\x16\x7c\xd0\xea\x83\xf6\x43\x28\xb5\x93\xe8\xdb\xfa\xb1\x0b\x52\x1c\x88\xf9\xf6\xa9\x77\xdc\x23\x8d\x80\x7f\x9f\x6a\xcf\x23\x50\x4a\x6c\xbb\x4b\x22\x01\xac\xba\x8c\x55\x97\xf1\xfe\x87\xf7\xbf\xe7\x5d\x75\x79\xeb\x54\x7e\x96\xa5\x97\xb7\x7b\x39\xa9\xfa\xcb\x7b\x5e\x93\xb0\x12\xf3\xb4\x92\x27\x60\x46\x82\xf3\xc8\x48\x30\x5a\x25\xe6\xad\x7d\x89\xe5\x98\x5f\x90\x53\x36\x7e\x39\xe6\xed\x2b\x54\xc3\xd5\x1d\xfd\xc3\xb3\xf0\x0f\xa7\x58\x93\xf9\x60\x5f\xe4\xd8\xd5\x99\xb1\x18\x33\x16\x63\xc6\x62\xcc\x58\x8c\x19\x8b\x31\x3f\xa3\x62\xcc\x4b\x5b\x28\xca\xf4\x45\x4b\x7e\x4c\xb0\x84\xe0\xf6\x0c\xf1\xaa\x67\x62\x59\x66\x2c\xcb\x8c\x65\x99\xb1\x2c\xf3\xb9\x96\x65\xde\xf2\xa3\xb1\x36\x33\xd6\x66\x26\x7b\xe2\x05\x43\xd7\x66\x6e\xc2\xcf\x7b\x40\x5b\x58\xa0\x19\x0b\x34\x4f\xa2\x40\x73\x0b\x69\x62\x37\x84\xfb\x15\xac\xd2\x8c\x55\x9a\xfb\x78\x80\x58\xa5\x19\xab\x34\x63\x95\x66\xac\xd2\x7c\xd2\x2a\xcd\x5d\x37\x87\x1e\x4e\x1a\x96\x6a\xae\x0b\x40\x9b\x48\xa9\xe6\x9e\x31\x75\x55\x70\x62\xa4\x7a\xcd\x03\xd1\xe4\xdf\x9f\xae\x2a\x33\x16\x64\xc6\x82\xcc\x58\x90\xb9\x42\xa2\xa0\x78\x04\x0b\x32\x63\x41\xe6\x29\xea\x4b\xb0\x20\x33\x16\x64\xd6\x2e\xd3\x8e\xaa\x9c\x3a\x17\x0b\x0b\x32\xa3\xe1\x29\x6f\xbf\x33\x29\xc8\x5c\x7b\x5f\xa8\x10\x19\x68\x9d\x4e\x6e\x9d\x26\x6c\x81\x26\x5e\x90\x79\xf7\xd3\xdd\xdd\x6d\x0e\xb9\x37\x17\x17\xa4\xc6\xeb\xb2\x7b\x64\xc7\x42\xcc\xee\xcd\x55\xee\x0f\xd2\xfd\xe5\xa9\x27\xf5\x0c\xe1\x59\x3f\x84\x09\x2d\x01\x06\x15\xbe\x9c\x63\xf3\xd9\x39\xf5\x1d\xf1\x8d\x9f\x1b\x6b\xfe\x40\x34\xa0\x3b\x0c\xc6\x4d\xb7\xb2\x1f\x14\xeb\x1d\xbc\x7b\xc5\x4a\x7e\xae\x8d\x90\xdc\xea\xf9\x3e\x81\x91\xe4\xd6\x66\x05\xb0\x44\x86\xdc\xc8\x8c\xad\xfd\xbc\x32\x53\x1f\xd2\x63\x56\xb4\x76\x06\x74\x14\xb3\xdc\xa3\x9e\xf5\xd6\xa3\xcd\x21\x99\x1e\x92\x89\x01\x99\x18\x90\xf9\xac\x02\x32\x8b\xb5\x3d\x78\x38\xa6\xb7\x1f\xdb\x0b\x44\xfb\x4f\xd5\x85\x62\x16\x67\x33\x62\x1a\x53\xf7\x64\xbb\x30\x8d\x1b\x07\x64\xd4\xcc\xea\x78\x08\x46\x61\x6f\x10\xb8\x98\xac\x07\x5e\xae\x0c\x3d\x65\xef\xfb\xc8\x05\xa7\x4b\xc7\xe8\x28\x0e\x53\x7b\x35\x51\xff\xa9\x96\xa8\xd1\x1a\x28\xa1\xe6\x98\x76\xc1\x4c\x5b\xb1\x1c\xdd\x47\x77\xff\x1a\xa2\x90\xff\x7b\x8f\x3a\xa2\x85\x3d\x3c\x8b\x8a\xa2\x53\xa8\x94\x68\x23\xeb\x4e\x50\x25\xf1\x58\xd1\x75\x37\x6d\x11\x75\x34\x65\xd5\xe8\xa6\xd2\x3d\xba\x28\x0c\x1d\x71\x13\xfb\xeb\x56\x86\x06\x2a\x43\xd0\x15\x54\x2a\x48\xfb\x31\x76\xe0\x85\x2e\x58\x5c\x6f\xdf\xcf\x30\xd8\xae\x47\xfc\xd6\x0d\xdf\x23\x64\xcb\x14\x6a\x73\x9b\xd8\x8f\x4c\x66\x5f\x69\x00\xd5\xf2\x20\xde\x24\xd9\x38\xdf\x4d\xbd\x4c\x70\xc2\x20\xb2\x85\x8b\x90\xd9\x50\x98\x2c\x78\xb0\x02\xad\x62\x22\xe0\x01\x17\x6e\xf9\xad\x48\x2b\xdf\x05\x1d\x67\xe5\xa9\x48\x16\x2b\xf8\xbb\x9d\xe7\x50\x4d\x5d\x2c\x68\x28\xaf\x3d\x65\xc9\xb5\x11\x6e\xaa\xe1\x2a\xfe\xfc\xc7\x44\x84\x57\xd5\xb0\xfc\x13\xc4\x85\xdd\xf0\x22\xef\x7f\x51\x75\x72\xab\xa2\x50\xe9\xb4\xf5\x6a\x0b\xed\x98\x4a\xbf\xc1\xa8\xd5\x87\x71\xed\x7e\x7b\xe9\xaa\xd1\x58\x7e\xae\x4f\x8e\xd7\x7e\x96\xd2\x7c\x53\x17\xdf\xbd\xb3\x65\x5c\x9c\xdd\xd4\xa7\xf0\xcf\x91\x94\x5b\x1f\x19\x80\xaf\xfd\x9b\x60\x49\x87\x8c\xe5\xe9\x2e\xa8\x58\xd0\x19\xe5\x6d\x8a\x11\x3b\x4d\x11\x3b\x6e\x8c\x8e\x1d\xaf\x53\x8b\xa6\xd9\xcb\xd3\xf1\xa3\x75\xaa\x4b\xb9\xaf\x83\x02\x39\x3d\xb6\x8b\xd3\xb9\x10\xc5\xd7\x76\x2f\x2a\x23\x00\xf5\xc0\x53\xa6\x13\xc6\x1a\xf5\x71\x9a\x73\xdf\xa4\x43\x0c\xe4\x20\xe7\xb7\x7e\xa1\x64\xd9\xf5\xe1\x8b\xaf\x61\xbf\xb7\x0f\x52\xb5\x10\x8a\x37\x54\x9e\xdf\x6b\x06\xac\x3c\x04\xe4\x5b\x2d\x28\x87\xe0\x52\xf8\x1a\x84\xc3\x80\x79\xad\xff\xc6\x50\x56\x6f\xc8\x51\xd3\x5d\xbf\xe9\x59\x4d\x68\xbf\x81\x82\x6c\xb2\xf4\x91\x69\x4c\xcf\x90\xb5\x06\xf1\xf3\x1e\x73\xeb\x92\xfb\x4e\x7f\x5d\x35\x5d\x28\x26\x58\x2d\xa9\x3b\xd4\x58\x94\x8c\xc9\x81\x5b\xac\xdc\x43\x1d\xe1\xae\x3e\x07\x77\xfe\xdc\x36\x98\x6f\x31\x27\xb2\x4c\x60\x6d\x0c\x60\xb8\x74\x83\xfb\x57\xd5\x3a\xb0\x83\xdc\x80\xdb\x53\xdb\x00\x3b\x17\xef\xed\x8a\x1c\xdc\xba\x0a\x0e\x5b\xc8\xd7\x00\x7e\x83\x1d\xf9\xfe\xd6\xb5\x51\x8a\xc5\xfc\x8c\x1e\x45\xd5\xec\xb6\x77\xba\xdd\xd5\x08\x2a\x83\xd2\xe6\x41\xe6\x85\x10\x15\x95\x19\xab\xf7\x12\x5d\x59\xa9\x70\x4d\x87\x0c\x66\xea\x59\xd2\x34\xd3\x05\x4c\xb7\x2b\x81\xee\x7b\x05\x2a\x57\xb0\xac\x60\xdf\x3b\xd7\x30\x2d\x56\xb0\xad\x8b\x57\x94\x32\x2d\x37\x58\xd7\x33\xfd\x85\xbf\x83\x50\x91\x63\x94\x32\xfd\x7e\xde\xa3\x40\x67\x1f\x31\x56\x51\xcd\xb7\x59\x8d\xe5\x15\x73\xdd\x49\x8e\x55\xbc\x9b\x71\x75\xae\xa9\x1f\x08\x62\x9a\xea\xc4\x6a\x26\x4e\x0f\xbe\x0c\x11\x91\xea\x0c\x2c\x6a\xd8\x75\x14\xd9\x45\x36\x0b\x75\x59\xcf\x9a\x15\xaa\x14\xfb\x3a\x71\x51\xae\xbb\x2a\xed\x91\x35\xea\xa9\x98\xb7\xf1\xf7\x07\xb3\x8a\x6a\xd7\xfb\x28\x9e\x7e\x2e\x9c\x94\x78\x53\xf8\x26\xe5\xfa\x5a\xc3\x36\xf3\x98\x2a\xa2\xe2\xe8\x1f\x94\x15\x73\xaf\xed\xa1\x23\xda\x7e\xb6\x59\x48\xe4\x95\x8c\x47\x25\x51\x5f\x25\x91\xea\x85\xf6\x19\x3a\x7a\xf0\xd9\xd6\x0a\x37\xbd\x88\xa4\xd7\x8d\x27\xea\x92\x6f\xa0\xe8\xe9\xa5\x8b\x9e\xbc\x7d\x38\x86\xea\xc9\xbd\xbd\x5d\xf6\x54\x7a\xac\x9c\x11\xae\xf8\x0c\x15\x4f\x53\xf7\x11\xf7\x8a\xe2\xaa\x99\xe0\x11\x81\xfc\xc2\x4c\x9a\x37\xa0\xfa\x69\x7a\x7e\x6e\x59\xfd\x74\x8e\x32\xa5\xf2\xb9\x37\x8e\x47\xd6\x2e\x54\x2a\x3d\xd6\xa8\x54\xda\xcd\x65\x3f\x9d\x86\xe9\xe7\x3d\xf4\x4b\x67\xa1\x5a\x3a\x1c\xad\x4d\x68\x2e\x5b\xd1\xce\x0f\x5e\xb8\xba\x49\x9d\x14\x96\x20\x1e\xfd\x86\x9a\xc3\x77\x21\x44\xcc\xe8\x56\xde\x85\x24\x15\xab\x94\x49\xf9\x8e\xd1\x30\x8e\x38\xeb\x29\x41\x33\xd9\xcd\xc1\x25\x8d\x78\x69\x02\x4b\xf7\x01\xc8\x92\xff\x85\x11\xfb\x33\x36\x15\xb4\x1e\x36\x6f\x70\xf5\xf4\x2c\x69\x14\x5b\xb5\x4b\xd9\x9b\x29\x65\x84\x32\xe5\x00\x74\x5a\xa8\x54\x04\xea\xc5\xfa\xab\xde\xb7\x34\xe0\x44\x7d\x67\x39\xca\xd4\xca\xba\xad\x74\xf9\xfd\xd7\x80\xb1\x10\x72\x5f\x80\xdf\x68\xa7\x5e\xe6\xe9\x92\x06\x45\x5e\x76\xaf\x41\xb6\xb8\xb2\x4b\x19\x53\x74\x10\xbe\x6d\xce\x6f\x26\xb3\x68\xed\xd7\x6c\x00\xaf\x57\x8d\x19\xad\x9f\xb6\xd2\x4a\xfc\x8f\x57\xaf\xea\xac\xe8\x08\x39\xe6\x3e\xba\x9d\x68\xcf\x0f\x50\xaa\x8c\xa5\x6e\x9b\x82\xba\xcf\x03\x22\x9f\xb3\xc2\xef\xa7\xfa\x42\xba\x73\xf2\xde\x6a\x95\xfc\x81\x78\x7a\x10\xd2\xab\xa4\xa1\xbf\x66\x39\x9f\x48\xba\x9d\x01\x19\xa3\x94\x27\x4d\x97\xcb\xf2\x13\xa1\x87\x25\xf7\xd5\xfe\x8d\x2f\xcb\x93\xdd\xca\xae\xcf\xd5\x0d\x5e\xc8\xbb\x4c\xfe\xb9\x2d\x95\x57\x59\xdb\xa5\xc6\x63\xde\x5b\x13\xa2\xd7\xdb\x7f\xb1\xcd\xfe\xf1\x6d\x1e\x34\xd5\x90\xaf\xad\x5b\x8c\x68\x45\x71\xdb\x32\x44\x59\xaf\x43\x1c\x4e\x7b\xb7\xc7\xbd\xb3\x4b\xb0\x56\x79\xb0\x26\x17\xea\x2e\x60\x61\xc3\x9d\xd3\x3a\x01\x3d\x12\x45\x7e\xae\xd0\x92\x85\x03\x01\x03\x5c\xc7\x02\x57\x09\x60\x53\xf5\xb9\x7e\x87\x0d\xa1\xee\x1a\x4c\x03\xe7\x6d\xfc\xcf\xa5\xff\x7d\x64\x15\x5c\x71\x9e\x4d\x57\xfd\x56\xcc\xe1\x09\xe4\x6f\x35\x28\xb0\xbd\x3e\x1f\x51\xff\xb6\xb3\x2e\xa1\x4d\x8b\x50\xb7\xd6\x8e\x98\x6d\xb8\xba\xcf\xf5\xbe\xd6\x87\xe8\xa8\xdb\xb7\x87\x6b\x57\x6d\x1b\x17\xfc\x2a\x63\xe9\x3a\xe2\xf6\x5e\xd5\xda\x48\xf2\xad\x4e\x02\x69\xea\xe4\x14\xa6\xdc\xba\x14\x43\x84\x6a\xe4\xfc\x90\x53\xd5\xfb\x76\xf7\x98\x3b\x77\x2e\xab\x91\x8d\x94\x63\x1f\x64\x16\x99\x94\x93\xe0\x11\xdb\x63\xa6\x7c\xb9\x01\xed\xcf\xeb\x57\xaf\xbe\xf1\xf6\x7b\x40\x13\x1a\x40\x56\xc5\xcf\x0f\x6c\x03\x78\x10\x8b\xb2\x07\x96\x2a\x43\x5a\xfe\x0d\xab\x4c\x59\xe4\x19\x78\x8b\x1b\x56\x3a\x38\x4a\x05\x8e\xa0\x39\x46\x6b\x94\xe9\x3c\x9b\xdb\x56\xf9\xb0\xf4\xce\x7d\xb2\x1f\x1f\xba\xa0\x8a\x84\xda\x3e\x5e\xe1\xaa\xda\x80\x0c\xea\x18\xb2\x9c\x6d\xf7\xa9\x8f\x5f\x61\xbc\xc2\xc2\x5d\x7a\x10\x4f\x3b\x3a\x87\xc7\x54\xe0\x6c\x37\xfd\xb3\xd6\xe4\x34\x89\x56\x0e\xd1\xe3\x54\xe1\xd8\xfd\xe9\x0b\x5f\x89\xc3\xf4\x22\xb7\x22\x9c\xaa\x94\xe8\x08\x4a\x9c\xc2\xa3\x38\x44\x89\x53\xbc\xa5\x59\x89\xe3\xf9\x2e\x3b\x29\x71\xbc\x77\x33\x2e\xf3\xd4\x89\xdf\x8a\xeb\x67\xf9\x98\x2b\x97\x7c\xf2\xd4\xe3\x94\x6f\x4c\x05\x40\xbf\x2e\x3a\xd2\x2f\x28\xd1\x79\x39\xd4\xc5\x07\x7d\x23\xfc\xc9\x94\x06\x5c\x42\xe5\x07\xb7\xc1\xd4\x86\x31\xc5\x0c\x5c\xd5\xcb\x52\x49\x41\x83\x8f\x40\x39\x26\xaa\x57\xfb\xad\x08\xbf\x55\x77\x39\x0b\xd9\x7a\xaf\xd3\x11\x96\x6a\x0e\x5e\x58\xc2\x26\xa0\x32\xfc\x23\x61\x27\x3e\xc3\x3f\x29\x27\x99\x7e\xa8\x68\xe0\x5e\x02\xa7\x3d\x10\x0c\x7f\x48\x5e\x56\xaa\x27\x6f\xac\x8f\xa8\xd2\xf2\xdc\x82\x21\x39\xc1\xe2\xb5\xdd\x2a\xad\x9a\x67\x9b\x55\x5a\xb6\x20\xaa\x9c\x62\xc2\xa7\xaa\xc8\x69\x52\x52\x2d\xd4\x3f\x9d\x87\xfe\xc9\x5f\xe1\x23\x08\xa0\x8a\xdd\xd6\x2a\x80\x2a\x3f\x56\x97\xf8\xa9\x4e\x04\x8f\x32\xa8\x69\xfa\xe1\x5d\x32\xa8\x9f\x8c\xf2\xc9\x9f\xd3\x11\x13\x21\x8c\x0e\x0f\x7b\x56\xcd\xa2\xc2\x78\x33\x99\xca\xcd\xe4\x38\x29\xa5\x6a\xdb\x7e\x36\x72\xad\xca\x29\x3d\x8e\x6b\xd6\x2a\xd7\x2a\x3f\xd6\x92\x58\x6a\x9b\xaa\x6a\x15\x65\x75\x5b\x02\xd4\x60\x0d\xa0\xc1\xea\x41\xaa\x34\x97\xfe\xb3\xf7\x55\xfb\x92\x83\xf4\x23\x39\x6f\x54\xd0\x8c\x68\x62\xae\xff\xf8\xf4\x40\xb3\xab\x48\x5e\xd1\xab\x9e\x36\x68\x04\xe1\xca\x9d\x97\x63\x88\xb6\xa5\xa9\x32\x2b\xb2\x60\xa6\xac\x17\x08\xc5\x96\xe7\x1a\xc6\x21\x5f\xd8\x46\xeb\xc1\xb4\x5b\x61\x32\x21\xf5\x48\x61\xe5\x28\x0c\xcf\xb9\xc4\xb4\x56\x2d\x4a\x12\xb3\x25\x76\xcf\x71\x45\xa2\x25\x89\xb8\xcc\x97\xcb\x28\x00\x3b\x5e\xc2\xa8\x43\x96\x81\xd2\xe8\x0c\xb3\x4c\xed\x71\xc1\xe8\x50\xba\x54\x1f\xec\x93\x9b\xa9\x9f\xb1\xd9\xa1\x16\xfa\x4e\x9c\x6d\xe9\x90\x2c\x0e\x71\x37\xc5\xbd\xb4\x30\xae\x68\xb1\xbf\x17\x27\x2b\xf2\xf0\x1a\x79\x7c\x95\x47\x1d\x8a\x64\xfd\xf9\x23\xaa\x3c\xa0\x02\x24\x1c\x2d\xfd\xb8\xe5\xd2\x32\x29\xce\x78\xa0\x8b\x7d\x09\x82\xbd\x44\xc4\x0e\xa3\xaf\x9e\xc1\xf6\x6f\x76\x85\x0d\xb2\x52\x76\x12\xad\xfc\xb2\x5d\x9c\x3b\x65\xcb\xd8\x94\xd9\x2c\x0b\x5a\x96\x6d\x30\xef\x01\x8a\xa6\x03\x34\x2d\xa5\xa9\xd0\xbb\xd3\xed\xd6\x91\x36\xe2\x1e\x9e\x57\x75\xc8\xf4\x88\xf9\x0d\xb7\x7e\xd8\x59\x3a\x4c\xfd\x4d\x47\x7d\x66\x8c\x26\x03\x02\x17\x93\x4a\x02\x91\x3a\xaa\xc5\xcb\x91\x91\x96\x84\x07\xed\xcc\xf0\x9a\x7e\xed\x9f\x78\xc7\xc6\x12\x14\x93\x56\x49\x9f\xa8\x6b\xd2\x6a\x41\x80\x2f\xf6\xf1\x34\xf5\x36\x81\xc7\x6f\x80\x35\x98\x67\x29\x27\x74\x21\x45\x9c\x67\x6e\x29\x7f\xcb\xbe\xbe\x21\xff\xfe\x1d\x81\x30\x85\x84\xa5\x6a\xdd\xd0\x95\x3e\x2c\x2a\xba\x96\x4a\x23\x0c\x73\x27\x33\x9a\x66\x76\xbf\x1a\x0d\x06\xbc\xf4\xf5\xab\x6f\xbe\x9b\x93\x9b\xca\xef\x45\x92\x04\x34\x0e\x0c\xad\x02\xa8\x85\xf7\xab\x8b\x0d\x49\x45\xce\x43\x3d\xac\xe6\xaa\x10\x38\xa0\xe2\x55\x21\x6e\xd0\x18\x4a\x24\x95\xe7\xff\xfe\x2b\x5d\x27\x31\x7b\xa3\x95\x91\x99\xb9\x5e\xa8\x29\xca\x04\xf9\xf3\xab\x6f\x66\xaa\xad\xb0\x2f\xfe\xfc\xea\x1b\xdb\xd4\xc3\x92\xa2\xcd\xd9\xdc\x86\x3c\xd4\xa7\x64\xfb\x0e\xc6\xdc\xaa\x7a\x22\xe3\x9f\xcb\x4c\x24\x89\x91\x4e\x51\x97\x39\x73\x5b\x65\x00\x82\x51\x97\xbf\x86\xa6\x99\x04\x8e\x4a\x7d\xdb\xc8\x12\xca\xdd\x11\x92\x6d\x4d\x0f\x57\x4e\x25\xe3\x64\xa1\xd6\x84\x24\x79\x02\xba\x9b\xca\x53\xae\xa6\x31\x88\x75\x4c\x29\x63\xa3\x1d\x2d\x64\xef\x6e\x85\x41\x3d\x5e\x78\x2b\x04\x99\xb0\x50\x12\xc1\x33\x41\x80\x6e\xa8\xbc\x7b\x46\xb2\x87\x5c\x6a\xf9\x85\x1e\x43\xa8\x50\x6c\x5c\x99\xbf\xe8\xa6\x8b\x34\x5a\x45\xbc\x75\x99\xf9\xbf\x0f\x43\x15\xc7\x30\x48\xb2\x66\xb9\xef\xeb\xf8\xe7\x59\x14\xcf\x23\x9e\xc9\x2c\x9d\x7f\xe0\xd9\x2f\xe9\xdd\x9e\x80\x78\x83\xfc\xe7\xd0\x53\x67\xc7\xa3\xe6\x2e\x4f\x5b\xc9\x99\xfa\x43\x66\xeb\x68\x71\x19\xe2\x08\x5d\x88\x8a\x3c\xad\xfc\xb5\x83\xce\x19\x3f\xc2\xc6\x3f\x3a\xec\xe6\xb7\xb1\x43\xaf\xd4\x7d\xe8\xe7\xd2\x41\xaa\xf6\xf9\xab\x43\x0f\x19\x1f\x47\xf8\xfe\xdf\xbf\xe9\x73\x9e\xd8\x1d\xe2\xc9\x16\xdc\x98\x51\x35\x60\x79\x42\xa2\xf5\x9a\x85\x11\xcd\x58\xbc\xb1\x2f\x62\x95\x89\x34\x7b\x7b\x46\x64\x0e\x97\x66\x73\xa4\x56\x8f\x26\x11\xeb\xb4\x6a\x6e\x4f\x86\x02\xc6\x84\x41\x98\x16\x79\x6d\x8e\x81\x72\xa4\x12\xec\x64\xf5\x4d\xf8\x06\x1c\x44\xa0\x90\xfc\x12\xa9\x4b\xfc\xac\xb3\xf9\xcb\x3c\x55\x9b\x7a\x56\xd9\xc0\xb5\x0a\xd1\x8a\x5c\x0a\x18\xcb\xad\xcd\x09\xb8\x45\x06\xe7\x56\x6d\x8b\x47\xda\xbb\xb3\x61\x2c\xf0\x11\xed\x6e\xd3\x7e\xd8\x7f\x95\x87\xe2\x89\x37\xef\x27\x38\x2d\xcc\x4e\xda\x73\x2f\x94\xe3\xc7\x2a\x8b\x49\xfd\xba\x7a\xfa\x2f\xdb\x93\xbe\xc3\x26\x31\x2b\xba\x64\x97\xc0\x09\x9f\xf5\xf8\x75\xb7\x98\x97\x22\x8e\xc5\x93\x06\xb1\xd4\x03\xfa\x67\x6a\xf6\xf3\xd6\xba\x6f\x52\x47\xf7\xb5\x4d\x7a\xf9\x97\xad\xdf\x31\xd6\xff\x7e\xb6\xcb\xab\xe2\xdf\xa9\x06\xee\xfa\xa2\xea\x79\x91\x9f\x0f\x98\x97\x40\x0d\x08\x48\x74\x59\xc6\x74\x10\x5e\xd7\x5b\x3e\x6f\x92\x0e\xc3\x97\xd0\x34\x8b\x3a\xae\xa0\xb7\xf6\x99\x4a\x99\x6b\x91\x86\xe0\x86\xd0\xcc\x40\xfd\xea\x8f\x5e\x2b\x3c\x9f\xd0\xfd\x8c\x87\x41\x17\xee\xe8\x21\x51\x8c\xbd\xa7\xea\x4e\x2d\xed\x66\xa7\x42\x7d\xea\x03\x60\xd4\x2d\x75\x43\x00\x9a\xa8\x64\xcb\x35\xa2\xa8\x15\x45\xad\x2f\x98\x3a\xae\xe4\x9d\xfb\x61\x24\x71\xe9\x89\xf3\xd9\xf9\xdb\xb2\xaa\x1d\x05\x53\x39\xb2\x94\x71\xef\x90\x0a\x38\xce\xf6\x92\x8c\xd6\x55\x00\x3d\x52\x67\x3d\x85\xe8\x61\xfd\x3e\xa2\x7c\x53\x5b\x95\x21\xe5\x01\xc5\xd4\xb5\xda\x2a\x23\x7c\xf6\x29\x31\x9a\xe9\x41\x67\x86\x3a\x80\x49\x53\x87\x91\x3d\xe4\xda\x43\x87\xba\x61\xd3\xed\x7b\x6c\xc4\x65\x46\x79\xc0\x8a\x08\x5e\xe3\x41\x1a\xb3\x74\x2c\xbb\xde\xc1\x74\x79\xcf\xf4\x21\xb9\xb6\x06\x6e\x20\xae\xab\xc7\x10\xd3\x20\xcb\xcb\xf7\x58\x8b\xdf\x17\x43\xed\xef\xc9\x01\x46\x7a\x07\x3a\x7d\x0f\x02\x5d\x5a\x06\xbd\x72\x76\xd4\x03\xe7\xb9\x64\xe9\xd5\x2a\x8f\x42\x66\x68\xea\x66\x96\xda\x76\x53\xf7\xbf\xf8\x3b\x0d\x35\x51\x45\xe3\xdb\x9a\x39\x68\x32\x82\x5b\xfa\x34\x1d\x7c\x78\xd7\x77\x4c\xb6\x72\x63\xf4\x1c\x95\x42\xd7\x21\x59\x1a\xd1\x38\xfa\x1f\xb8\x98\x7a\x11\x5f\x0b\x91\x3d\x90\x35\x4d\xae\x16\x54\xdd\x07\xc0\x3f\x53\x43\xc9\xbe\xaa\x75\x2c\xa3\x47\xa6\x6e\x96\xe6\x53\x37\x4e\xc5\x9b\x43\xc1\x21\xf1\x04\x44\xc5\x2b\x77\x2f\x15\xea\xe0\x35\xfe\xbc\xe7\xb6\x48\x8d\xa0\x1a\xa7\xc9\xd2\xea\xe6\x11\x69\x62\xe4\xd7\xea\xc2\xa6\x77\x0e\x2c\x83\x2b\xb8\x90\x10\xb9\xe1\x19\xfd\x3a\x27\x26\xe8\x45\x0f\x9e\xce\xdc\x0d\x41\x84\x50\xd2\x20\xcd\xa4\xd7\x11\xd7\xd4\x99\xee\xa2\x1f\xcf\x0f\x3e\x68\xf5\x41\xfb\x61\xca\x48\x62\x63\x0c\x8e\x2d\x8d\x38\x50\xfb\xeb\x5d\x8e\x0e\x09\x02\xf4\xef\x58\x8d\x51\x80\xde\x43\xbb\x85\x01\xfa\x6f\x2f\x5f\x88\x58\xe6\x6e\xf0\x10\x93\x0a\x8a\x2a\x99\x41\xf2\xa1\x50\x19\x76\xb5\xd7\xe6\xe4\x83\xfb\x6f\x1b\xd6\x14\xa9\xdb\x0c\x95\x6f\xee\x39\xb9\x22\x1f\x59\xa6\x06\xff\x0d\xb9\x21\x32\xe2\xab\x18\xc0\x8a\x45\xcc\xc8\xbb\x8f\x77\xba\x12\x82\x90\x19\xa7\x6b\x36\x87\xc7\xef\x32\x91\xd2\x15\x7b\x43\x6e\xd4\xea\xe1\x1b\xf2\x9b\x88\xf3\x35\x7b\x1b\xd3\x68\x2d\xd5\x5a\x34\x5e\x36\x0b\xe7\xf7\xfc\x73\xe5\x06\xba\xca\x69\x4a\x79\xc6\x8a\x50\x46\x4d\x18\x70\xdd\x06\xdb\xec\x8d\x5e\xee\x34\x7e\xa2\x1b\x58\xa3\xf6\x92\x04\xcb\x5e\xea\x16\xb8\x87\xf1\xea\x87\x57\xbf\x17\x70\xf5\x9b\x44\x38\x9f\x75\x39\x8b\xf3\xc5\x1d\x41\x91\x81\x56\xcb\xaa\x81\x1d\xef\x0b\x1e\x66\x76\x78\x80\xdd\xb6\x2f\x79\xeb\x37\xb4\x74\x22\xef\x13\x5b\x37\x44\x2f\x8f\x79\x37\xf2\xac\xdd\xa0\x37\xa4\xe2\xbd\xdd\xc1\x6d\x75\x0f\x37\x47\xb7\x49\xf3\xf4\x24\xa3\xdb\x26\x9b\x84\x1c\x23\xdb\xce\x23\xb2\xcd\x5f\xdd\x23\x44\xb6\x79\x5b\xad\x35\xb4\xad\xf2\x5c\x5d\x6c\x9b\xf7\x08\x06\xb7\x4d\xdd\x29\xdb\x0a\x6e\x1b\x49\x8d\xea\xdb\x93\x86\x5b\x3b\xfa\x87\x67\xe1\x1f\x1e\x37\x96\xab\x7a\x2e\x8d\xe4\x8b\xb4\x62\xb6\x37\xa4\xf2\x64\x4b\x40\x97\xef\x27\xee\x95\x66\xbb\x40\xf4\xd2\xc7\x28\x60\x1f\xe9\xba\x4f\xea\xed\x44\x84\x3f\x43\x1a\x91\x35\xe3\xd9\xad\x88\xa3\xa0\x2d\xd3\x69\xcd\xd3\x56\x91\xa5\xd3\x59\x39\xc1\x81\x0d\xcc\x30\xec\x3e\xac\x14\x1a\x1b\x90\x35\x4f\x66\x5a\xc3\xa0\x53\x5f\xb9\x9c\x57\x82\x6b\x71\xe1\x8c\x40\x20\x19\xe3\x8e\x8e\xb5\xba\x0c\x97\x2f\x85\x24\xfa\xd7\x23\x49\x7e\xff\x25\x85\x00\x2f\x10\xfc\xff\x0e\x6f\x4e\xd9\x76\x4b\x22\x4e\x22\xae\xfe\x87\x54\x2f\xd4\x11\x3b\xdf\x26\x22\xbc\x7a\x35\x33\x42\x3d\x11\x5e\xbd\x9e\x11\x96\x05\xdf\x59\x4d\xe0\x56\xf6\xe8\x27\x1a\xa9\xe3\x38\x8b\x62\xc2\x68\xf0\x00\x1a\x47\x1b\x3f\x66\xf3\x53\x9b\x0c\xd3\x11\x5f\xcd\xc9\x3f\xaa\x9d\x98\x15\x49\x52\xb5\x2e\x63\x2d\x1e\x8b\x34\xd1\x22\x49\x84\x8c\x32\xa6\x9b\xa7\x3b\x4c\x63\xb0\x0d\x50\x17\xcd\xeb\xf4\x2d\x4d\x69\x1c\xb3\xf8\x77\x43\xc3\xfb\x65\xdd\xed\x4d\x29\x31\xcf\xe8\x54\xda\x16\x8d\xb4\xb7\x2b\x3d\x17\x36\x0a\x4f\xf5\x0c\xe2\xed\x54\xd7\x05\x37\x9f\x82\x26\x04\x5e\x1d\x42\xfd\x3a\xd0\x6d\x58\x51\xab\xe0\x41\x77\xaa\xac\x1d\x04\xda\x69\x45\xa0\xbd\xcd\x3c\xb8\x27\x8c\x47\xa5\x71\x1d\x1b\x38\x03\xe3\x25\x99\x19\x58\xfb\x2e\x03\x65\x32\x2e\x99\x13\xa8\xe8\xd4\x3b\x1a\x5c\xcf\xa2\x22\xf2\xc2\xa1\x3f\xf6\x95\xba\x46\xab\xf2\x57\x1f\xa3\x30\xa7\xb1\x17\x58\x14\x4b\x93\xc2\x8f\xd6\x40\x62\x1b\x40\x45\xbd\x20\xbc\x99\x5d\xb8\xa7\x4a\x63\x5d\xf7\xb8\x53\xc2\x6f\x89\xb8\xec\xd3\x95\x54\xbe\x6b\x1a\xe9\x00\x4d\xb7\x62\xbd\x63\xeb\x52\xba\xaf\x91\x07\xfd\x2b\x7a\x05\x57\xff\x6a\xc7\x4b\x13\x2f\x90\x28\xd1\xfe\x9a\xb2\x88\xce\xda\x1a\x68\xd3\xde\xb0\x63\x80\x39\xe3\x88\x85\x5b\xc7\xaa\x39\xd3\xcb\x27\x44\x21\x7c\x3e\x52\xc2\x6c\x39\x54\xdc\xe1\x0b\x0b\x11\xf4\x2d\x56\xdb\xe8\xba\xa7\x5c\xec\xac\xfa\x6f\xbb\x6d\xf5\xc7\x7a\x80\x57\xaa\xa7\x5c\x36\x21\x30\xf6\x59\x18\x64\x48\xbb\x68\xcf\xee\xca\x92\xd6\xa7\x21\x1c\xf0\x32\x51\x8b\x56\xdd\x62\x8b\xa4\xc1\x15\x38\xd9\xb5\x24\x9b\x6b\x0c\x68\xc5\x32\xf2\xee\xe3\xdd\xb5\xc5\xb6\xcd\xf4\x6b\x69\x9d\x9e\x57\x9a\xa9\xd3\xfd\x0d\x18\x1f\xeb\x15\x5c\xe9\x13\x74\xee\xf5\x78\x6e\x16\xf5\x5c\x3e\x06\xf3\x20\xce\x65\xc6\xd2\x79\x2c\x02\x1a\x1b\x73\x77\x7f\x51\xf3\x86\xfb\x0b\xd5\x76\x9d\x26\xcc\x65\x66\xf2\x91\xf2\xd6\x94\xb7\x0d\xb7\xce\xee\x78\xce\xec\x68\xf1\x9c\xef\xad\x0d\x96\x19\x5d\x27\x2c\x04\x3c\xad\xa6\x9f\xf0\xfa\x65\x1e\x2f\xd5\xbf\xb0\x28\xca\x07\xbc\x39\xc7\x73\x1e\xfd\x33\x2f\x20\xff\xc2\xa9\x4f\x99\x74\x91\x1b\x35\x8e\xda\x00\x81\x9e\x76\x78\xf3\xfa\x4a\xbf\xdb\x83\x9c\x57\x4a\xfc\x96\x44\x7a\x5e\x1b\x2b\xa5\x80\x4b\xa3\xad\xda\x21\x36\x5a\x6f\x68\xb4\x97\x05\x76\x59\x19\x41\xe5\xc8\xd0\xe2\x28\x87\x75\x15\x02\xc7\xe8\xcc\xef\x00\x48\x65\xa5\xd0\x71\x65\x70\x1e\x0b\x12\xc8\xfe\x68\x9b\x3f\x51\xf7\x78\xb9\xa8\x58\xa0\xf9\x24\x5d\x85\xc3\xc5\x50\x18\xe1\x2b\xa4\x66\x5d\xb2\x94\x29\x37\x87\x54\x49\x26\xcf\x33\xac\x39\x1f\xd6\x54\xc7\x9f\x54\xce\x88\x88\xe9\x34\xe4\xfa\x67\x23\x35\xa2\x4f\xd4\x4c\x8a\xb5\xad\x7a\x06\xfd\x43\x85\xea\x0a\xf0\xef\x1f\x95\x29\x81\xef\x3a\x74\x59\x27\xf3\x50\xc7\x98\x5e\xc2\x56\x36\x2b\x38\x2b\xa2\x1d\xbf\x5d\x6c\xe0\xa8\xfc\x8e\xe8\x11\xf9\x19\x12\xb2\x47\x1c\x9e\x2a\x52\x2e\x98\x59\xcf\x9c\x37\x75\x53\xf7\x63\x19\xfd\xc2\x24\x49\x52\x16\xb0\x90\x81\x72\x5e\xd9\x36\xca\x37\xe6\xe5\xb2\xfa\x9e\x99\xa6\x0d\x9d\x6b\x05\x24\xdf\x18\x41\xac\x6e\x87\x29\x67\x00\xbc\x31\x8f\x34\xac\x62\x07\xfb\xe0\x5b\x5d\x7a\x93\xea\x93\x6d\xaa\x13\xb6\xd3\xad\x6f\x07\xb9\x49\xef\xb4\xfc\xe5\x07\x1d\x9b\xd1\x95\xac\xbf\x62\x4d\x1b\x37\xc5\x11\xd2\xf5\xbf\x75\xbf\xf6\xc9\x1c\x4b\xd3\x8d\xe8\xf6\x50\xd8\xe3\x47\x74\xd7\x72\x27\x76\x43\x1c\x31\xa4\xdb\x74\xbb\x47\x08\x71\xe5\xc9\xed\x64\x29\x60\xa7\xac\xb7\xd0\xea\xd9\x14\x56\xdc\xff\xdc\x0a\x2b\xac\xdd\x84\x97\xb8\x5f\x1d\x6e\x35\x95\xdf\xd8\xa7\xc7\xfa\xc9\x99\x72\x81\x20\x74\x49\xe7\x8b\x2d\xdb\x77\x4f\x16\x52\xed\x98\x8d\x1f\x30\x21\xe2\x65\x8b\x2e\xd9\x3f\x73\x38\xb4\xff\xf7\xab\x59\x65\x88\xeb\x92\xf1\xd7\x7b\x80\x3b\x45\xb2\x6f\x3f\x5c\x13\x7e\x5d\x5b\xa0\xc1\x05\x8a\x97\x4e\x9c\x0f\x6a\x6a\x53\x6d\x6e\x43\x07\xa3\x97\x6f\xa1\xc5\xdb\x66\x06\x1c\x89\x5c\xa5\x5b\x22\x38\x59\xe7\x06\xbc\x37\xeb\xe6\xe6\xf6\x83\x81\x75\x8f\x18\x24\x5f\x7a\xee\xa0\xf5\x5d\xa4\x39\xa0\x20\xa6\xdd\x90\xb7\x2d\x34\xcf\x08\x81\xf5\x55\xdc\x66\x9f\x5e\x0c\x56\x87\xa0\xc7\x56\x2b\x3f\x38\xf6\x4e\xb3\xa3\x73\x55\xa9\x93\x30\xb3\x1f\xd4\xe4\x9d\xaa\xdf\x78\xfd\x0b\x2d\x54\x9e\x3c\xd2\xf1\x59\x1e\xd7\xa3\xc8\x80\x1b\x6f\x0e\x3d\x9c\xb4\x5f\xdb\x6e\x50\xb2\x74\x61\x6a\x19\x1e\xb8\x4b\x99\x32\x5f\x09\x4b\x55\x8f\xcc\x40\x48\x38\xad\x22\x1e\xc4\x79\xc8\x24\xb8\xc8\x85\x4c\xb5\x88\xe9\x92\x84\xb3\x80\x49\x49\xd3\x8d\xff\x0e\x2f\x1e\xce\xba\x3d\xc5\x60\xdb\xd6\x0d\x5a\x17\xe2\x57\x17\x7d\xd7\x1a\x83\x26\xb5\x9f\x06\xf4\x72\xb5\x70\x42\x47\x34\xda\x61\x45\x22\xea\x22\xed\xaa\xe0\x44\x0f\x4a\xbc\x3c\xcf\x99\x61\xc9\x5b\x6f\xcd\x63\x55\x8a\xc8\xb3\x07\x75\xcb\xd3\x34\x10\xe8\x2c\xc4\x17\xc6\xd5\x06\x62\x4f\x8d\x2b\xd8\x7b\x86\xd0\x4c\xdd\xb2\x34\xa6\xec\xbd\x4d\x59\x82\x4c\x3d\x06\x7f\x27\x20\x2b\x50\x93\x9a\xea\xaa\x93\x6f\x88\xff\x0e\x47\x4a\x1a\x49\x52\x40\x83\x87\xe2\x50\x78\x62\x8b\x07\x21\xbe\x98\xd7\x79\xbf\x21\x52\x92\xc4\xf9\x2a\x72\x7a\x62\xe5\x0e\x5e\xd1\x24\x92\x25\x4b\x5a\xcb\x61\x39\xdc\x03\xe9\x7b\xd4\x54\x22\x67\x3e\x9a\xa6\xf2\x41\xc4\xe0\x91\x38\x9d\xb7\x27\xb3\xb2\x01\xae\x0b\xa6\xe6\x92\xa9\xf9\x55\x03\xba\xcb\x49\xdd\x76\x7c\x1d\x28\xac\x5c\x42\xee\x05\x75\xb4\xd8\x7a\x02\xb0\x84\x34\x1c\xef\x0e\xf0\xa7\x07\x06\xe9\x54\xfc\xfe\xd8\x44\x02\xde\x69\xb8\x53\xe9\xc9\xf6\x5e\x8d\x23\xa4\x2c\xff\xa4\x5e\xac\xdb\x8a\x06\xdf\x38\xd4\xab\x19\x7a\x09\x19\x3a\x67\xad\x87\xe1\xb1\x5a\x06\x4a\xbc\x67\x8a\x7c\x41\x15\x53\xa1\xd3\x97\xc1\xf4\x74\xa8\xe8\xf3\x30\x52\x4e\x73\xdb\x1a\xb9\xb1\xcf\x94\x91\xdc\x02\x33\x5d\x46\xea\xa8\x71\x6e\x9b\x3b\x9c\xcc\x0a\x2a\xb8\x45\x07\x4b\xea\x06\xbb\x6f\x4b\x42\xe5\x9c\xd8\xdf\xb9\xa2\x4f\x34\xad\xe9\x94\x48\x4d\x4d\xdb\x47\x96\x46\xcb\x8d\x9f\xfb\x40\x3d\xf9\x04\xd4\x73\xc6\x78\x68\x93\x18\xf9\xd0\xac\x69\x30\x2d\xfa\xe2\x41\xac\x40\x1d\x73\xe1\x7d\x0a\xd1\x2f\xa9\x78\x8c\x42\x16\xce\x4a\xdf\xb4\xdc\xbc\xf6\x4e\x8c\x55\x72\x1f\x9a\x9f\xf9\x2f\xb7\x30\xc9\x96\x7d\xde\x05\x74\xea\x19\x43\xa5\xfa\xdf\x5a\x04\x0e\x46\xdb\x50\x43\x09\xfd\x67\xce\xc8\x82\xd1\x14\x12\xa8\x7e\x61\x07\x4a\x13\x7b\xec\xde\x3e\xeb\xbb\xa4\xf0\x4e\x99\x54\xa3\x7b\xe4\xe5\x0d\x54\x84\x9d\x49\x7f\x69\x07\x0f\x42\x32\x77\x30\x96\x5d\x32\x57\x1d\x30\x10\xeb\x84\x66\xc0\x47\xc0\x3a\x37\xd1\x56\xac\xe4\xfa\x81\xca\x05\xc6\x9c\xdc\x78\x1b\x40\x13\xd8\x7c\x53\xfa\x0b\x37\x57\x10\x75\x03\x28\x24\x9b\x95\x37\xc2\xb9\xe0\xad\x5b\xa3\xa2\x81\xdf\xb8\x94\xc5\x27\x9a\x5b\x00\x3b\xbf\xfd\x12\xc0\x63\x34\x4f\xce\xb2\x42\x2f\x35\x2f\xde\xab\x11\x65\xe3\xa5\x3d\xd2\x38\x0a\xa9\xad\xa5\x4e\xfd\x9e\xd7\x0c\x9f\x26\x6b\xb2\x3c\xf5\x34\x0c\x26\x12\xb9\xfa\xfe\x4c\x98\x8a\x68\xc5\xde\xf6\x5b\x69\xce\x93\xa8\xe8\x16\x81\xa3\x02\xb6\x2f\xad\xb8\xd8\xea\x07\xd5\x78\x68\x90\xa1\xfa\x8b\xe6\x07\x35\x93\xeb\x3e\xf3\x0c\x98\xfa\x95\xfb\x8b\x2c\xcd\xd9\xfd\xc5\xcc\x3f\xb3\xa4\xee\x3e\xa1\x2b\x1a\x71\x99\x75\x6d\x7f\x35\xb2\x63\xef\xff\x52\xc3\x5b\x57\x7a\xa9\x83\xde\xad\x6c\xeb\x20\xa5\x52\x8a\x20\xa2\xee\xd0\x2e\x5d\x69\xb6\x3b\xb2\x10\x22\x66\x94\x57\xdd\x0f\x96\xa6\xad\xf2\x8d\xf7\xea\xf3\xe6\x86\x04\x6a\xb5\xf1\x4b\xf0\x3e\x83\x07\x16\x7c\xf1\x9d\xa5\x0e\xe0\x46\xb2\xb6\x1f\xfe\x55\xea\x75\xa4\x7e\x4b\xfd\xf7\x07\xbe\x14\x5b\x7d\x06\xba\xdc\xd8\x80\xad\x83\x72\x0f\xaf\xc6\xfe\xd0\x7e\xa7\xaa\xfb\x76\xd3\x61\xea\xfa\xa1\x7d\x50\x7d\x76\xd4\xf9\xa1\x6a\x6c\x80\xf1\xd1\x90\x43\xb4\x4e\x62\x66\x8a\x7d\xea\x0f\xe7\xf0\x1a\x38\x78\x96\xb4\x2b\x05\x0b\xfb\x9a\xa5\x6d\xa9\x2c\x6e\xca\x20\x8c\xdf\x24\x37\xb8\x75\x07\x6b\xcd\x2a\xdb\x3b\x04\xb9\xbc\xcf\x6a\x36\x5a\xd3\x4e\xb3\x5b\x6d\x6b\xcb\x81\x27\xd9\x99\x91\x15\x04\x28\x62\xa9\x23\x4b\x0d\x37\x97\x9b\xa5\x47\x21\x59\x0f\x11\xcb\xf1\xce\x85\x3c\x6a\x3d\x0d\xac\xf8\x42\x5f\x34\x61\xef\x79\x1e\x59\xd1\x58\x1a\xa4\x42\x4a\x93\xfc\xf1\xc3\xb2\xdc\x0d\x2d\x52\xd4\xb1\xc4\x26\x00\x46\x7f\x66\x6f\x11\x96\x80\x86\x3e\x87\xd6\x9d\x32\x91\xa0\x80\xa1\x87\xd1\x12\x38\xff\x8c\xfc\xfa\xe1\x9d\xec\x4d\x8a\xa8\x5f\xe1\xed\x02\x26\x3b\x09\xba\x73\xba\xbb\xf1\xa6\xa1\x97\x6b\xc1\x57\xa0\x8d\xa3\x01\x28\x3f\xd5\x5f\xbb\x5b\xd3\xb5\x89\x45\x1a\xfd\x8f\xdb\xc3\x3f\x89\x80\xc6\x77\x39\x2c\xe3\x9b\x20\x60\x52\x76\x20\x4f\x4d\x5f\xd0\xc7\x61\x71\x1d\x13\x29\xe0\xe9\x54\x77\x45\xa4\x26\x96\x59\xdd\xcc\x2c\xba\x49\x39\x74\x4c\x47\xa3\xbb\xf8\x5c\xb5\x42\x13\xc8\xae\xf9\x77\xfa\x08\x69\xf2\x8a\xbf\x11\x19\x88\x04\xaa\x23\x18\x7f\x7e\x0d\x42\x84\x28\x23\xeb\x3c\x78\x20\x8c\xca\x48\xa7\xe0\x5f\xa5\x94\x67\xdb\xdf\x33\xd2\x59\xbd\xb0\x2c\x26\x9b\xb0\x74\x1d\x49\x4d\x70\x43\x27\x22\xbe\x42\xe4\x0a\x91\x2b\x44\xae\xfa\xf9\x15\x53\x42\xae\xe6\x44\x5f\x13\x8a\x9d\x0f\xba\xa8\x05\x23\xec\x9f\x39\x8d\xed\xc2\x2f\x3e\xde\x88\xdc\x68\xd8\xbc\x97\x1a\x47\x7a\x4e\x94\x6d\xb1\x8c\xa0\x49\xb8\x60\x0a\xb5\xee\xea\x77\x95\x0e\xdd\x9a\xe3\xf3\x64\x50\x99\xda\x25\x46\xeb\xa6\x8f\xec\xa1\x3b\x36\x1a\x5a\x56\xfc\x72\x13\x58\xd6\x68\xdc\x0e\x43\xce\x4a\x5d\xfe\x28\xf8\x27\x73\x80\xdc\xb8\x2c\x4c\x8d\xd6\xb3\xf6\xe9\xc2\x14\x59\x97\xd3\xfd\x82\x9f\xd9\xa9\x50\x16\x2d\x61\xa6\xf8\x95\x3b\xb9\xbc\x53\x46\x8b\x19\xcc\x3b\xe0\xce\x6e\x7c\xe6\x8e\x64\x90\xd9\x43\x6b\x1e\xc8\xec\xc1\x5d\x4e\x3e\xfd\x44\xd4\xe3\x45\x81\x04\xf8\xed\xbe\x27\xcc\x23\x4b\x17\x2d\xbf\xf4\x1b\x4b\x17\x2e\x40\xca\xa6\x9c\xfb\xfb\xe7\xcf\xb7\x04\xbe\x38\xa4\xeb\xe3\xcd\xc5\xa7\xbc\x25\x41\x64\xe5\xb9\x9a\x63\xa9\x22\x6a\xa6\x24\xcd\x7d\x89\xb8\x37\x53\x2d\x6e\x85\xea\x5f\x1f\x6d\x1f\x2f\x9a\xf3\xeb\xa7\x9f\xda\x8e\x87\x8f\xe5\x27\x6d\xb2\x21\x9d\xca\x85\xa6\x10\x8b\x95\xa7\xb1\x4b\x90\x02\x9e\x9a\x71\x1e\xb4\x94\x04\xf6\x0c\x98\x2e\xf2\xa7\x92\x2e\x56\x2b\xa6\x21\xc1\x8f\xc9\x09\xb4\xcc\xe3\x78\x46\x96\x90\x16\x54\x66\x2c\xb1\xb8\x8a\x5a\x2a\x73\x42\xee\x2f\xfe\x74\x7f\x41\xd6\x8c\x72\x38\x6f\xc6\xbb\x61\xe8\x61\xec\x5e\x60\x05\x6a\x5c\x1c\x42\xe5\x4d\x75\x73\xfb\x01\x16\x9d\x9c\x91\x38\xfa\xc2\xde\x90\x15\xcb\x66\x24\x11\x52\xfd\xff\x3c\x9b\x99\x8b\xc6\x8c\x80\xf0\x6d\x46\x1e\x18\x0d\x67\x44\x24\xda\xfe\x1e\xa1\xcb\x3b\xad\xf6\x1d\x0e\xa9\x81\x4e\xa8\xe1\x4e\x27\x7b\xec\x37\xcd\xe9\xdf\xe0\x6a\x61\x4e\x0d\x35\x6d\xfa\x0f\xae\xae\xb5\x49\xe5\xd6\x67\x4a\xea\x0f\xad\x8e\x4b\x5d\x53\x38\x8a\x1b\x01\xed\xa5\xb8\x74\x45\x26\xa1\xec\xfd\xc5\x8a\x65\xf7\x17\xca\xee\xda\x3b\xab\xfd\x40\xff\xef\xfb\x8b\x39\xb9\xbf\xb8\xbf\x20\xdf\x82\x13\xf2\xdd\x9e\x2d\x07\x4f\xa7\xa3\xf9\xda\x1b\xf2\xfa\xa0\xff\x60\x39\x0a\x7d\x4d\xab\x74\x63\x4e\xc8\x5b\x1b\x95\x05\x57\xe8\x14\xde\xc0\x6d\x79\x3a\xfb\x25\x5d\x9e\x8e\x0b\xef\xbd\x70\x37\x8f\xe3\xe2\x2f\xb2\xdc\x51\xdf\xd5\x82\x41\x69\x32\xe5\xdb\xdf\xd3\xe0\xaa\xfa\x8e\x09\x91\xb9\xaa\x5c\x1a\x65\xdd\x98\xde\x5f\xd0\x38\xbe\xbf\xd0\xa6\xb5\xe9\xba\x69\x7c\x7e\x4a\xea\xee\xbf\x22\x25\x77\x2c\x5e\xb6\xba\x1b\x5d\xd1\x91\xc6\x48\xb4\x69\x8e\xcd\x8a\x52\x37\x95\x82\x43\x82\xf0\x25\x3d\x37\xf6\x2e\xa3\x7c\xff\x03\x56\xbc\x9f\x3b\xb2\xc5\x01\x2d\x9e\xda\xa1\x45\xae\x41\x5c\xf0\xfe\xb1\xa3\x3d\x1d\x07\xea\x9f\xe7\x5b\x67\x79\xe9\x28\x57\x06\x60\x46\x9e\xf4\xe9\xad\x75\x70\x33\x73\x33\xf3\x0e\xf7\x54\x7c\xdd\x1c\x30\x90\x8f\x9d\x18\x80\x05\x00\xbc\xf3\xeb\xb7\xb2\xe0\xf0\x80\x13\x6c\x2f\x1b\xd1\xea\x0e\x95\x7c\x21\xd3\x66\x6b\x4a\xf5\x39\x61\xbc\x37\xbd\x11\xfc\x0b\x86\xa7\x6c\x03\xba\xcc\xec\x2a\x1d\x42\xa0\xdf\x91\x86\x4c\xc7\x8a\x4b\x7e\x99\x11\x19\xad\x38\x84\xc8\xf3\x6c\x06\xd7\x6f\x13\xa8\x42\xc2\x5c\x97\x49\x62\x52\xc3\x15\x89\x90\x32\x5a\xc4\x1b\x9d\xb7\x30\x10\xeb\x44\xcd\x5e\x1b\x8a\xd3\xd7\xdd\xa2\x49\xf4\xb7\x2e\x64\xf5\xe6\xf6\x83\x7e\xa6\xce\x08\xd8\x0f\x4d\x39\x04\xe1\xc5\xf7\x78\x23\xa0\x6e\x9a\xeb\x3c\xce\xa2\x24\xd6\x4b\xc0\x00\xb4\xca\xe7\xf2\xe2\x87\x41\x3f\x18\xf8\x6c\x23\x2b\x78\x1f\x7f\xfb\xf1\x7c\x0d\x7a\x54\xff\xf0\x8a\x38\x7c\xdf\xbd\xdd\x85\x80\x99\xf9\x39\xa6\x9b\x66\x5b\x05\xb6\xa7\xc7\x81\x07\xcf\x69\x4a\xd2\xb8\x58\x10\xf5\x18\x65\xc5\xe2\xf3\x82\x2b\x61\x70\xd5\xfa\xd4\xb1\xc2\xc6\x85\xbd\x71\xcc\x1b\xcb\x4c\x1f\xe1\x69\xf6\xc8\xd2\x4d\xf6\xa0\x97\xdd\x29\x07\xa3\xcf\x40\x54\x24\x0f\xc5\xec\x6a\x7c\x70\xab\xd3\x95\x4e\x38\xba\xd3\xae\x29\xe2\x16\xf8\xfc\x9e\xab\xa7\xaf\x97\x42\xdc\x5f\x54\xc3\x96\x3c\x7b\x40\x2e\x97\x42\x5c\x6a\x57\x05\xe2\xb6\xbd\xf5\xd5\xf4\xea\x69\xba\xfb\x1d\xae\xfe\xc0\xf6\xe1\x98\xde\x7e\x93\x27\xd2\xa8\x88\xae\x7f\xbe\x06\xd4\xf7\x63\xd8\xe0\xc2\x58\x8b\xe8\xcf\x09\xf9\x28\x32\x80\xa5\x74\xe6\x0f\x75\xf3\xac\x00\x73\xc6\xef\x52\x9f\x95\x3c\x41\xe5\xf5\x82\x2b\x65\x2e\xac\x6a\x39\xd1\x98\x04\x54\xb2\x19\x59\xb0\x80\xe6\xd2\x50\x21\xf6\xb2\x6a\xb2\x77\xaa\x93\x4c\x5d\x3e\x32\xa1\xdb\xed\xe3\x5d\x9b\xfa\x76\x22\xcc\x8f\x30\x3f\xc2\xfc\xe4\x0c\x61\x7e\xcd\x90\xf2\xd0\x3a\x4a\x0e\xe7\x57\x16\xfe\x20\x0c\xbb\xfe\x28\x44\x80\x7e\x04\x80\xbe\xf3\xc2\x7c\x38\x3e\xdf\x36\x9d\x3b\x5a\xc3\x56\xc1\xab\xc1\x4a\xad\x06\x90\x90\xf7\x5f\x69\x00\x35\x65\xb5\x57\xee\x40\x35\xbf\x81\x1e\xc2\xa6\x16\x82\xcf\x0e\x34\x3c\x66\x97\xb9\x74\x99\x55\x3b\x51\xe2\x1a\xc4\xaf\x2f\x31\x51\x60\xda\xfe\xf6\xd4\x20\x55\x09\x2b\x2d\xf7\xfe\x90\x15\x5a\xcf\xa7\x34\x38\xcc\xbd\xba\xd6\x35\xa4\x6d\x9d\x1c\xa1\x83\xcd\xbd\xdb\xd7\xc3\x53\x37\xf1\x1d\x1c\x3c\xef\xf1\xe2\x9e\x68\xbc\x7c\xb6\x75\x8d\x6f\xf4\xf5\x9e\x22\x75\x65\xf2\xd5\x19\x36\xd1\x93\x11\x56\x56\x41\x01\x13\x5a\x54\x5c\xcf\x49\xc8\x12\xa6\x4b\xee\x09\xee\x1d\x8a\x20\x12\xf5\x21\xe6\xb5\x08\x8d\xbf\xa2\xee\xaf\x20\xe1\x93\x84\x7d\x4d\x58\x0a\x1a\xc7\xd0\x2f\x1f\x67\x6c\x84\xce\x67\x5f\xdf\xe9\xa2\x38\x19\xc4\xb8\x2d\x36\xe4\xd7\x0f\xe0\x2c\xc9\x07\xf1\x74\xfd\x10\x85\x16\xf0\xd4\x39\xe8\x32\x41\xfe\x99\x47\xc1\x97\x78\x43\x62\x96\x81\x7e\x93\x87\x7a\x3c\x4c\x3a\x59\x67\xaf\xa2\xd4\x57\x93\x40\xe8\x9f\xf9\xb1\x8f\xbf\x7c\x26\x7f\x2d\x7e\x90\x7d\x35\xbe\x98\xdc\x48\x75\x0f\x50\x3f\x12\xa6\xd1\x63\x15\x5c\x0f\x59\x60\x52\x2f\x50\x7b\xc3\xa3\x91\x64\x52\x79\x7d\x4b\x78\x59\xc8\x92\x3c\xdb\xcc\x74\xc4\x16\x89\xa3\x25\xcb\xa2\x35\xbb\x4e\xd9\xa3\x08\x4c\xf8\xb3\x1a\x38\x88\x97\x0e\x32\xae\x16\x31\xa4\x82\x4a\x55\xfb\x6a\x0e\x39\xfd\x38\xc0\xad\xa5\x9b\x00\x4d\x6d\xf2\x61\x78\x91\x4e\x59\x22\x94\x3b\xab\xac\x58\x43\xa3\x2d\xe0\xbf\xa5\x38\x45\x87\x1b\x1d\x6e\x74\xb8\xcf\xc8\xe1\x1e\xc8\xa3\xf6\x8e\xe1\xa3\x38\xd4\x35\x46\x8d\x6e\x99\xb2\x21\xb4\x3c\x7e\xc7\xa6\xe1\x50\xfb\x5e\xc1\x38\xfe\x74\x75\x32\x9d\xef\x51\xef\x91\xee\xc4\x44\x66\xc2\x2d\x3e\x00\x35\x21\xf7\xd0\x9c\x7c\x32\x66\x63\x58\xde\x63\x27\xa4\x6c\x58\xe9\x2b\x1a\x44\x34\x88\x68\x10\xcf\xcf\x20\xa2\xfc\xf3\x0c\xd0\xa5\x91\x91\xa5\x5d\x51\xa5\xf3\x46\x94\xba\xa2\xaa\xde\xab\xcf\xeb\xf2\x72\xb9\xf8\xad\xf9\xdf\x58\x06\x4f\x7d\xfb\x1d\x59\xb3\xec\x41\x84\xc5\xd1\x56\x0e\xb4\x22\xe4\x2e\xe2\x36\x8f\x6f\xa4\xb6\x66\x92\x7b\x91\xcd\x85\x7c\xcc\xe6\x09\xa4\x24\x65\x4b\x5b\x45\xe4\x81\xa5\x75\xb2\x92\x73\x8a\xd5\x2a\xcb\x09\x0c\xc4\xbd\x11\xf9\xa5\xba\x85\x33\xad\xac\x59\xd6\x46\xa4\x0d\xc4\xab\x22\x7e\x78\x7e\xf8\x61\xbf\x20\xbb\x5f\x3f\xbc\x6b\x37\x75\x6a\x6d\x35\x04\xd5\x1e\x1c\xd9\x0a\x1e\x71\xcd\x3a\x26\x1f\x96\x10\x8a\xa1\xb5\x03\x1b\x72\x0f\xdf\xba\xbf\x00\x99\xb1\x72\x65\xee\xcd\x96\x30\xa1\xcf\xa0\x96\x8a\x8c\x47\x99\xa4\x3a\xde\x4f\x92\xfb\x8b\x7f\xc0\x89\xb1\x84\x10\x5a\xf2\xc4\x52\x66\x5c\xf1\x35\xb3\x59\xcf\x28\xdf\x98\x0d\x35\xf6\x1d\xa2\x2b\x55\x6c\xe3\x37\x9a\xaf\x04\xc6\x56\xf7\xb9\x15\x98\x27\x5b\xae\x04\xc6\xee\x47\x7a\x59\xc2\xb5\x0a\x8a\x51\xa9\xf1\xf3\x54\x9f\x4f\x16\x2d\x75\xda\xef\x25\x8d\x25\x23\x10\x59\xf9\x14\xc9\xba\xb3\xb6\x21\xfa\x3a\x64\x3c\x6a\x6d\xd3\x3b\x78\x00\xb4\x84\x46\xe4\xd3\xde\x24\xfd\xc2\x59\xd1\x16\xdd\x36\x58\x4f\x90\xed\x80\x16\x9d\xd4\xad\x56\x56\x31\x74\xbf\xb2\xd4\x55\xb7\x60\x45\x55\x6c\xcb\x03\x05\x29\xab\x48\x22\x0e\x46\x99\x17\xfe\x93\x28\x9e\xf3\x5a\x35\x27\xa6\xf5\xca\x7d\x37\xee\x77\x66\xda\xee\x8d\xb5\xfa\xd3\x0e\xf1\xea\x0e\xce\x7e\xdf\x15\xb9\x5e\x7e\xd2\x68\xa5\x6c\x95\x35\x1b\xa5\x00\xc5\x05\x01\x41\x27\x22\x00\x6c\xbf\x84\x9e\x97\x81\x5c\xb8\xd7\xea\x04\x76\x92\x28\xeb\x9c\xb2\x78\x63\xb5\x76\x4c\xa7\x3d\xd4\x80\x38\xbc\x50\x0d\xad\xaf\xc1\xd0\x25\x50\x74\xaa\xf6\x74\x1d\xf1\xea\xeb\x4d\x9d\xba\x88\x13\x99\x44\x3a\x19\x72\x94\xcd\xc9\x8f\x10\x80\xaf\x4b\x5e\xcf\xc8\xa7\xbf\xde\xbc\xb5\xf9\x7c\x00\x58\x87\x88\xd0\x54\xc4\x26\x6b\x3b\xe3\x22\x5f\x3d\xc0\x1f\x8c\x5a\x2e\x8b\xe2\xd8\x66\x78\xd1\x6d\x12\x39\x37\x99\xbc\xcb\x70\x7d\x35\x63\xc7\xe1\x35\xe6\x3e\xe9\x5f\x28\xad\x5f\x9d\x00\xb0\x70\xc2\x37\x60\x17\xb4\xfb\x0d\x89\x0d\x0a\xff\x5b\x2f\xcc\x51\xc0\x8d\x6d\x80\xaa\xe3\x5c\xda\xfa\xc2\x96\x76\xd1\xe4\x43\xa1\x06\xa0\x31\xab\x05\x8a\x2b\x68\xfd\x8d\x99\xb6\x76\xc6\x47\xbf\xc3\xed\x3b\xe9\xdf\x5f\x22\x4d\x74\x44\xab\x3c\x75\x69\x1f\x3a\x59\x20\x9f\x01\xfa\xab\x91\x0b\x95\x17\x9e\x6e\x2f\x84\xb3\x80\x0f\xf8\xc8\x20\xff\x27\x75\xf2\x39\x46\x53\x93\x99\x1d\x48\xac\x28\xbb\x94\x44\xd2\xa5\xae\xa6\x2d\x65\x6e\x0a\x31\x5a\x89\xeb\x03\xb5\xe9\xe3\x1d\xf9\x33\x23\xec\x51\x59\xa9\xa5\xfe\x20\x36\xd5\xee\xfa\x69\x53\x53\x4f\x62\xeb\xac\x94\xef\x92\x95\x3f\x28\x5e\xda\xc3\x2e\xec\x7f\xa0\xa8\xd9\xd4\x63\xa3\x86\x26\x10\xeb\x45\xc4\xf5\x78\xc2\xc4\x40\x9b\xe6\xe5\xc5\xee\x8e\x86\xea\x59\x03\x03\x5d\x34\x65\x46\x64\x1e\x3c\x40\x7a\x70\xee\x9f\xc1\x3a\xb0\x4a\x30\x2d\x06\xd6\x95\xc4\xb7\xbf\xab\x33\xcc\xd0\x8c\x94\x86\x47\xfd\xf9\x5a\xa4\xa4\x12\xbe\x55\xc3\x43\xf6\xde\xfe\xde\x40\x37\x0f\xdb\x87\x62\xb5\x9b\xd3\x5e\xe7\xca\xb4\x9a\x54\x2f\xf5\x0c\x5c\xd6\xd5\x1a\x87\x18\xff\xb4\xd4\x26\x57\xc5\x1d\x52\x24\x07\x62\xbd\x86\x68\x2b\xc6\x21\x39\x3b\x83\xfd\x00\xe5\x18\xfc\x01\x2b\x8d\xa3\xe3\x18\xfd\xcf\xeb\x06\x53\xfa\x5b\xa6\xb7\x65\xda\x5a\x8e\xbd\x2e\x07\x7a\x0a\x0e\x91\x8d\xfb\xf7\x86\xf1\xa5\xe3\xc3\xe6\x63\xef\x0a\x41\x6c\xb8\x8c\xa5\x3d\xc7\x79\xb8\x41\x7e\x2e\x03\xdc\x36\xba\x1d\x56\x54\x98\x8a\x6d\xea\x35\x6f\x53\x21\xa5\xc1\xcf\x35\xd4\xf8\xc9\x16\x05\x69\x34\xa3\x2d\xdf\x29\x2c\xa9\xf1\x5e\x4a\xc1\xa4\x02\x64\x06\xea\x36\x64\xb2\x82\x6c\x8c\xc1\x5d\x32\x38\x42\xed\xdc\xb4\x59\x10\x80\xc0\x4a\xd1\x6b\x3d\x6e\x0c\x3d\x79\x84\x6a\x3a\x6c\x53\x1f\xa5\x77\x04\x70\x1f\x48\xbd\xf2\xea\x1f\xc6\x03\xac\xef\x2f\x86\x0c\x02\xec\x6a\x77\x7d\x6d\x2e\x75\x2b\xbe\x5a\xe5\x51\xc8\xae\xbd\x1c\x6f\x7f\x04\xc6\xec\x40\x5f\xd0\x5f\xc5\x7f\x57\x5b\x43\xad\xbc\xf8\x56\x84\x37\xe6\x33\xef\xea\xbe\x5d\x1c\x44\xbb\x5e\x5e\x81\xca\x07\xf7\x0a\xa8\xb8\x44\xdd\x4b\x3a\x92\xde\x21\x45\x85\x14\xd5\x73\xa0\xa8\xb6\x19\x18\x9d\xa1\xc0\x8c\x94\xfd\xca\xd0\xad\x77\x4d\xe9\x8d\x1b\x8e\xc1\x95\x2d\xd8\x03\x7d\x8c\x44\x9e\x9a\x1b\x9b\xdd\xfa\x03\x77\x56\xb5\xe2\x8a\xf2\xf0\xca\x24\x41\xdc\x0d\x2c\xed\x71\xe0\xed\x45\xb6\x59\x1d\x64\x3d\x74\xba\x7d\x10\x0e\xd8\xdc\xb1\x28\x34\xfb\xdb\xdb\xcc\x59\x93\xa5\x38\x88\x3d\xeb\xd1\xd5\xd6\xe2\xf1\xd6\x91\x6d\xb4\x41\x66\x17\x62\xd9\xf8\xa9\x5b\xac\xad\xb2\xf1\x87\xce\xf4\xd0\x97\x88\x3e\x5e\x53\xc3\x5d\x0d\xad\xf1\xe9\xad\xb1\x2e\x88\x68\x6d\xf1\x20\x46\x73\xb4\xba\xf5\x7b\x1c\xc3\x2d\xa5\xec\x87\x3b\x8a\x5b\xa5\x0c\x35\xa5\xeb\xbb\x6f\x06\x75\x0a\x37\xf5\xc4\x67\x9a\xae\x98\xba\x1c\xbb\x0b\xeb\x9a\x7e\xfd\xd4\xbf\xd8\xa1\xff\x74\xf3\xe2\xc8\x93\x84\xa5\x24\x86\x8a\xd7\x2e\x33\x93\x2b\x85\x54\x94\x65\x36\x98\xb5\x64\x99\x97\x03\xd6\x74\xe5\x07\xf5\xa9\xd9\x27\x72\x4d\x6d\xe1\x2d\x4e\x7e\x8e\xfe\x3f\xf6\xfe\x75\xb9\x71\x1c\xcb\x17\xc5\xbf\xef\xa7\x40\xb8\x66\x47\xda\xf1\x97\xe4\xcc\xba\x76\x67\xc7\x7c\x70\xd9\xce\x2a\x4f\xe7\xc5\x9d\x76\x66\xfd\x27\xc6\x1d\xd5\x10\x09\x49\x68\x53\x80\x9a\x00\x6d\xab\xf6\xe9\x88\xf3\x1a\xe7\xf5\xce\x93\x9c\xc0\x5a\x0b\x20\x48\x51\x14\x25\x4b\x99\xae\x4a\xc5\x4c\x74\xa5\x45\x10\xc4\x75\xdd\xd7\x6f\x29\x3f\x84\x2d\xd4\xb0\x9a\x96\xbd\xb5\x11\x49\x7d\xff\xe8\x09\x85\x82\xe4\x5b\x29\x46\x5e\xdb\xcd\xe5\x43\x0f\x15\x55\x21\xe9\xc2\xbd\x55\x5a\x35\xfe\xd2\x42\xf5\x01\xaf\x20\x13\x3c\x57\x95\xd4\x94\x40\x26\x13\xad\x4c\x31\xc5\x20\x1a\xc7\x06\xa1\xbd\x9b\xb8\x6d\x2c\x24\x0f\x6b\x34\x9c\xb3\x02\x9c\x4a\x8e\x26\x5e\x41\xbd\xfb\x28\xd7\xfd\x11\xd2\x5c\x9b\xcd\xa8\xb6\x70\x16\xd6\xec\xf4\xf2\xc3\x07\x2b\x33\xb2\x5e\x5d\x8a\x3c\x71\x92\xc2\xb8\xb5\xc8\x32\xbc\xc8\xf8\x9d\xc8\xf9\x58\xb0\xd3\xcb\x0f\xac\x28\xbb\x60\x87\x71\x15\x75\xa8\xbd\x39\x0b\xbd\x22\x78\x80\x87\x90\x38\xbd\xfc\x70\x44\x45\x5c\xa1\x38\x32\x54\x65\x36\x7f\xf1\x55\xd1\xca\x94\x7e\x1b\xd5\x56\x8f\x26\xec\x91\x55\x3d\xa2\x44\x61\x1a\xdd\x58\x5b\xa9\xfd\xb5\x8e\xd0\xbc\xd4\xb4\x11\xd5\xde\x2c\xcc\x0a\x0a\xd6\x42\xc0\xea\xc5\x2c\x4b\x47\x37\x1c\xb6\x35\xa8\x18\xf5\xb4\xc1\x21\xf0\x73\x59\x76\x0a\xc2\xb6\xba\x2d\xed\xb1\x75\xce\x44\x8f\x89\xc1\x78\xc0\x7e\x78\x1e\xc3\x65\x70\x15\x3e\xe5\xd6\x09\xd0\x8a\xa1\xcc\xb1\xbe\x67\x3f\x3c\xff\xdf\xe8\xc6\x35\xd5\x8e\xb6\x59\x45\xb3\x6b\xdd\xd0\xe8\xa6\x87\xe2\x84\xfe\xd6\x57\xca\xa1\x03\x7a\x7f\x83\xfe\xb6\xe9\x48\xeb\x9b\xbf\x7c\xa4\x8b\x34\xe9\xd3\x8e\x34\xe3\xc6\x02\xcd\xbb\x96\xad\xb6\x4d\xd7\x0e\xd0\xb6\xe1\xfe\x2f\xb9\x72\x9e\x92\x2f\x32\xa2\xbf\x84\xbc\xb7\x2a\xfb\xf1\x51\x02\xb9\xce\xd8\x44\xdf\x33\x3d\xb2\xe4\x28\xab\x11\x69\xf0\x28\x73\x35\x5e\x2b\x11\xa5\x45\x9a\x83\xe9\xd6\xd6\x62\xad\x8a\xa6\xab\xea\x96\x6e\x61\xb7\xca\xaa\xa2\x6b\x50\x43\xd8\xcc\xe5\x9e\x7d\x60\x6f\x11\xb2\x0b\x67\x9e\x7e\xfb\x80\x84\x6a\xd8\xda\xde\xaa\xbb\xb7\xea\x7e\xc1\x7a\x64\xcd\xaa\xbb\x6d\x2f\xd4\x76\x35\xd4\x8d\xcd\xba\xf1\xb5\x24\x13\x6f\xee\x1d\x59\x40\xbb\x9e\xae\x81\x17\x08\xda\xa3\xcc\xb9\xa5\x00\xf8\xc9\xa6\x0b\xf5\x99\xfb\x5a\x65\xf3\x47\xcf\xfc\xd3\x5b\x86\x91\xc1\x6c\xcd\xf8\x50\x6e\x60\x2b\xcf\x82\x3c\x89\x32\xce\x1a\xa4\x88\x32\x00\x1b\x6b\xeb\x2f\x53\xdd\x96\x94\xc5\xdd\x44\x38\xf3\x51\x89\x26\x28\xdc\x24\xf2\x10\x7f\xfa\x24\x0a\x4f\xbc\xf3\xed\x8b\x86\x47\xbb\x06\xe4\xd6\xa4\xf9\x2c\x5f\xbb\xc6\xe0\xb4\xce\x3a\x4d\x87\x45\xe6\x89\x2d\x78\x16\xad\x71\x10\xa1\xca\xc5\x8e\x2f\xe7\x16\xd6\x3a\xd0\x08\x91\x89\xc4\xb6\x86\xc0\x65\x7c\x28\x32\xf6\xaf\x42\xe4\x73\x54\xa3\x4a\xb3\x0a\x89\x20\x53\x6e\x93\x09\xf9\xfc\x49\x72\x87\x00\xad\x32\x7e\x0b\xca\xcd\x10\x48\x36\xf6\xe7\x3f\x0c\xf1\xab\xa1\xfc\x58\x4e\xb1\xf0\x53\x0e\x99\x2e\xfc\x4e\x4b\xb7\x08\x36\xd7\x8e\x80\x58\x2a\x55\x8f\xcc\x97\xc2\x72\xe8\x25\xaf\x74\xfb\xae\xdc\x07\xa9\x23\xfa\x2e\xcc\xa0\x0f\xd5\x9b\x99\x99\x2b\xcb\x1f\x22\x22\x47\x6e\xac\xea\xd8\x4c\xc7\x78\x05\x78\xcb\x7c\x05\xff\xe9\x87\x97\xb7\x16\xb4\xf0\x35\x96\x80\xde\xc7\xdf\xec\xe3\x6f\x7e\xef\xf1\x37\x74\x94\xcf\x29\x2a\xf3\x8d\xb0\xb9\x4c\xae\xaa\x08\xcb\x0d\x39\x75\x0b\x8d\xa3\xf0\x5a\xa7\x33\x7b\x0b\x2a\xd3\x0a\xd2\x5c\x5c\x43\xcc\x79\xa9\xd7\xcb\x53\xf3\xb8\x0a\x20\xc9\xb6\x87\x8e\x93\x89\x07\x3e\x9d\x65\x82\x65\x42\x8d\xb1\xb0\xc3\xbf\x0a\x51\x00\x41\x49\x32\x5d\xa4\x6c\x2a\x8c\xe1\x63\x47\x6b\x1c\x71\x96\x89\x00\x60\x9c\xbf\x5d\x5e\xa1\x8a\x90\x69\x9e\x0e\x79\xe6\xa8\x75\xce\xf2\x42\x29\x08\xf0\x2e\xac\x91\x29\x6c\x09\x01\x71\x1f\xb5\xdd\x18\x1c\xf9\x41\xd5\x24\xda\xc5\xfa\x8f\xef\xb5\xa8\xea\xb8\x24\x95\x0a\x5b\x82\x91\xe5\x94\x1e\x0e\xe7\x08\xd9\xeb\xf4\xc2\xc0\x16\x36\x94\xcd\x68\x9f\x71\xcb\x2e\xc2\x71\x6a\xb6\xf9\xae\xb6\xed\x7a\xd3\x6b\x65\xd8\xa8\xec\x79\x21\x04\x0b\x67\x55\x17\xf0\x51\xa3\xbe\x8e\x16\xff\xd1\x27\xbc\x5d\x52\x69\x6a\x5c\xc3\xef\xf0\x12\x0b\x4e\x1a\x04\x96\x71\xa6\x87\x3c\x5b\xfb\xb4\xaf\x71\xfe\xe8\xa3\xdd\x0d\xb7\x1d\x74\x8d\x4a\xfe\x44\x75\x56\x3b\xdb\xca\x8f\xae\xfb\xaa\x9e\xd0\xfb\x9d\xde\x9c\x75\xcf\xe1\xba\xe1\x8e\xcb\xcc\x9a\x14\x47\x5d\x8d\x86\x44\x3b\xd9\x52\x97\x41\x8f\xdd\x4f\x64\x32\x81\x5f\x9c\x5c\x91\xf0\x2c\x9b\x93\x2d\xd7\xc4\xe2\x22\x4a\x8b\x3e\x2f\xb1\x04\xd3\xf7\x15\x30\xbd\x1d\x67\x41\x44\x67\x43\x6e\x9c\x34\x8c\x32\x1f\xee\x86\x29\x1d\x35\x7b\xcb\xdd\xde\x72\xf7\xe5\x59\xee\x7c\x93\x85\x0a\x52\x5f\x44\x7c\xa6\x21\x34\x89\x08\x84\x3d\x29\xa9\x55\x64\xde\x2b\xf2\xb2\xf8\xfc\x53\x8f\xe2\x6c\x27\xe6\x1b\xd9\xfe\x4c\xa5\xb0\xfb\xce\x03\x3b\x57\xcc\xe0\x89\x47\x77\xe2\xe8\xd7\x36\xed\xb5\x4f\xfa\x54\x2b\xc4\xde\x58\x97\x19\x87\x17\x6b\xd6\x40\xb7\xa5\x24\x1b\x2e\x63\xe3\x58\x17\x5e\xe4\x90\xa3\x04\x34\xb1\x4d\x1c\x04\x52\x54\x3b\x51\xab\x65\xc1\x8c\x1b\x7b\x9d\x73\x65\x60\x8c\x1d\x9c\xaa\xd5\xc6\x21\x65\xab\xe2\x6e\x4d\xc2\x9c\x6d\x68\x2d\x08\x3a\x45\x2b\x5f\x2b\x1e\x6c\x46\x58\xed\x78\x67\x2e\x52\x54\x03\xdb\xe6\x44\x2d\x90\xbf\x4d\x8a\x29\x57\xfd\x5c\xf0\x14\x52\xc2\xc5\xc3\x2c\xe3\x94\x31\x4a\xa2\xb0\xe3\x75\xa9\xb0\x5c\x66\x26\xba\x73\xe5\x34\xb7\x96\x97\x9d\x87\xbc\x6c\x94\xbd\xe0\x2f\x4f\x15\xc3\x02\x3f\x33\xb4\xf4\x61\x00\xdd\xeb\x25\xad\x47\x74\xaa\x6e\x87\x72\x87\x0f\xaf\x73\x27\xe5\xbc\x42\x58\x82\x0f\x0a\x4a\xdc\x1f\x75\x1d\x04\x3d\x5d\xaa\x51\xce\x67\xa2\x76\x6f\x22\xd5\x24\xed\xb4\xe2\x5b\x12\xc2\x5b\x03\xbd\x5b\xde\xa9\x96\xf2\xd8\x47\x82\xff\xde\x65\xe5\x55\x91\xe0\xf0\xbc\x9e\xc9\xfa\x04\xc2\xc2\x57\xa8\x98\xd4\xeb\x3e\x36\xfc\xe9\x6b\x06\x5f\x6c\xac\xf8\x4e\x04\xbb\x56\x57\x6e\xcb\x3b\x35\xb6\xe4\x5d\xaf\xa3\x02\x8b\x48\xf2\x4c\xda\xb9\xe7\x96\x4b\xba\x79\x22\x71\xe6\x51\xab\x00\x7a\xd5\x1a\x7a\x1e\xfc\x86\x56\x93\xd1\xa8\x16\x24\x97\x70\x45\xe6\x9f\x62\x06\xf8\x1a\x65\x10\x7a\x06\xe5\x79\x27\xdc\xb2\xe9\x76\x23\xd0\xd1\x9c\xb4\xd2\x36\x58\xc3\x84\xa9\x28\x9d\xe8\x24\xa7\x19\x69\x56\x18\x04\x05\xe2\x59\x52\x38\x7e\x55\xd9\xe7\xaa\x31\xec\x10\x2c\x5a\xfc\x41\x4e\x8b\x69\xed\x11\x4f\x72\x6d\xb0\x90\x99\x1f\x41\x1c\x72\x7c\x34\x60\xe0\x18\x6d\xee\x17\x91\x36\xf0\xf3\xa9\xaf\xb6\x37\xf7\x54\x15\x0c\x7b\xa1\x5a\xe9\x82\xb1\x1d\x41\x46\xea\x76\x5b\x0a\x69\x5c\x8c\x38\x9d\xe9\xd4\x0c\x18\x3b\xcf\xc7\xba\x17\x86\x0a\x51\x90\x80\xb7\x98\x8a\xc4\x09\xa1\xc1\x31\xec\xf8\x58\x18\xa4\x54\xf8\x30\x45\x16\x7e\x27\x13\x01\x34\x82\x43\x5d\x2c\x5c\x39\xa9\x52\x79\x27\xd3\xa2\xb4\x82\xc7\x65\x36\x61\xe9\xa7\x9e\x2c\x57\xb5\xda\x89\xbe\x67\x82\xbb\x4d\x71\xe2\xa0\x1e\xf9\xf7\x61\x5c\x84\xdd\x08\xf8\x59\x10\xf8\x2d\x6c\xaf\x12\xf3\x4d\x8d\xfd\xa2\x43\x70\xbd\x66\x7f\x7a\xfe\xbf\x97\x85\x1f\x7f\x32\x5e\x4c\x1e\x84\xd2\x20\xb0\xc0\x7e\xbb\xe5\x55\x44\xad\x82\xe0\xd1\x9a\x6a\xb1\xc6\x05\x4e\xf5\xbd\x82\x2b\x4c\xcb\x09\xef\xbc\x70\xbb\xff\x29\xd3\x2f\xaa\x0d\x51\x17\x0e\xb2\x24\x1d\xfa\x52\xbc\x20\xff\x22\x9e\x45\x49\x87\x98\x1a\x43\x38\x44\x79\xcd\x83\x15\x3a\x14\xd8\x48\x74\x96\x89\xc4\xc2\x51\x36\xec\x5e\x64\x19\xc3\x85\xc2\xb8\x8f\x6c\x4e\x71\xbd\x8b\x26\xf1\xc7\x9a\x5b\x3a\xa4\x5f\x6c\x49\x97\x59\xe1\xe1\x6a\x7d\x6b\x89\x3a\xd6\x29\x2d\xa1\x8d\xe1\x75\xcd\x4b\x08\xee\x2e\xaf\xff\x75\x4a\x55\x28\x1b\xb7\x38\xbd\x42\xa3\x20\x72\x21\xd4\x57\xf4\xc0\x0f\x9c\x2e\x55\x25\x5e\xba\x74\x6c\x3b\x81\x14\x4f\x65\x6f\x09\xa0\x31\x01\xae\xdb\x89\x36\x22\xee\x9f\xe7\xe0\x19\xf9\xdc\xea\x40\x69\xed\x5a\x42\x98\x68\xb7\xde\xac\xe4\xba\xd5\x86\x15\x73\x51\x2e\x78\x5a\x9a\xc1\x62\x9f\x50\x19\x7b\xbf\x2a\x20\x7d\xa7\x84\x39\xb6\x73\x2e\x5b\x81\xee\xc9\x1d\x31\x89\x7e\x54\xbe\x07\x10\x26\x58\x41\xe3\xf8\xfe\x42\x8e\xc2\xe7\xc8\x07\xa9\xf3\x9f\x47\xa5\x89\x94\x13\x8c\x84\x9f\x5d\x4c\x73\x9d\x64\x92\xd0\xae\xd9\xe4\xb9\x76\x86\x49\xef\x0f\x97\x61\xb2\xd8\xd8\x2f\xd5\xd3\xcc\x3d\x59\xe6\xbc\x5f\xc6\x16\xeb\x0d\x2b\x76\xb3\x10\x52\xe0\x51\x34\xb3\x79\x19\x35\x89\xae\xf7\x4a\x8c\x44\x13\x0b\xec\x18\x75\xb7\x22\xaa\x0c\x46\xd2\x50\xd5\xbb\x39\x50\x63\x85\x8d\x78\x75\xc0\x69\x98\x64\x30\x53\xb8\x8e\xfa\x42\x25\x3a\x45\x3e\x39\xa5\x90\x5d\x6f\xbf\x88\xca\x19\xd7\xa2\x4b\x9b\x62\x4a\xd8\x2f\x13\xa1\x50\xaa\x97\xa0\x6b\xcc\xb8\x31\x94\x08\xa8\x58\x89\x88\xce\x20\x56\x54\x58\xbc\x41\x95\x08\x03\x44\xe6\x0c\x0a\x86\xd7\xf9\xca\x06\x89\x9e\xb9\x13\x81\x9f\x2a\x14\x7c\xec\x9f\x4e\xb9\x28\xbb\x81\x58\xbd\x58\x71\x03\x2c\x59\x0e\xcc\x9c\xfa\xd9\x92\x29\xc6\x2d\xc9\x95\x5f\xf7\x47\x9d\xe9\x56\xd3\x46\xd9\x24\x0a\xd8\xaa\x84\xe7\x85\x70\x0d\xce\x8c\x54\xe3\xcc\x2f\x05\x3b\x04\x5c\xc7\x7f\xb8\xa3\xf3\x0f\x3c\xf3\x8a\xb0\x95\x31\xb8\x18\xc2\x82\xa5\xc8\xd2\x48\xac\x76\xa2\x14\xb7\x4c\xab\x44\xb4\x06\xd5\xc1\x79\x5c\x7d\x07\x3c\x52\x64\xcb\xc1\x0c\x60\x92\x10\x5a\x89\x22\x7c\x2d\x0c\xcb\x83\xf5\x77\x0f\xc7\x72\x9a\x10\xe0\x0f\x9a\x4a\x2e\x71\x58\xaa\x58\x79\x4d\xf4\x14\x56\x22\xd7\x53\xf7\xef\x99\x56\x10\xd2\xbe\x3c\xda\xf0\xf3\x84\x36\x6e\x2a\x24\x35\x86\x85\x2e\xf0\x0f\x28\x60\xd0\xc6\x33\xc8\x0a\x5c\x6e\x11\xed\x0d\xa9\x19\x08\x9e\x4c\xe7\xef\xb6\x35\x18\xb4\xc7\x26\xd2\x9a\xfe\x4c\xe4\x7d\x23\x9c\x4c\x0d\x67\x57\xb1\x0b\x35\xce\x85\xf1\xaf\x3c\x7a\xde\x21\xd8\x61\xe9\xac\x1d\x7b\x6e\x99\x33\x70\xef\xf6\x19\x83\xb5\x03\x52\x95\xab\xb8\x01\x78\x31\x49\xe1\xad\xce\x1d\x3c\x80\x84\x98\xd9\x9f\xe5\x3a\x11\x8e\x4c\x46\xab\xe1\x2d\x4d\xe8\x47\x09\xb4\x8c\x8c\x20\x8e\x9e\x8d\x51\x37\x19\x8a\x91\x23\x93\x58\x3e\xc6\x1d\x5c\x9e\x97\xfa\x73\x6c\x61\x7a\xec\x4a\x5e\xea\xd4\xb4\xad\xa3\xd7\xe8\x5b\xbd\xa4\xa4\xf4\xc7\xeb\x19\x7e\xf4\xf4\xca\x43\xcc\xa2\xba\x55\x42\x03\x48\x55\xfa\x0d\x1c\x1d\x03\x7b\x89\x39\x62\xe0\xc3\x74\x7d\x45\x04\x60\xed\xdd\x81\x3c\xf4\xd3\xcb\x0f\xee\x72\x4e\xc5\x54\xe7\xf3\xa3\x01\xbb\x2a\x22\xa3\x83\x53\xf6\x86\x85\xcc\x30\xa5\x22\xfe\x1a\xaa\x8d\x13\x7e\x27\x42\x31\x79\x4f\x6a\x50\xbe\x30\x10\x46\xa7\x67\xc8\xdc\xdd\xac\xf8\x1d\x97\x99\x07\x32\x57\x8e\x08\x65\xcc\x6d\xbe\x1b\x67\xa9\x57\x79\xd3\xe1\x0d\x9c\xc2\x9b\x03\xf6\x48\xd0\x08\xda\x49\x0f\x5a\xda\xb6\x9b\x5d\x5c\xbd\x24\x43\xd4\xec\x7c\x34\x46\x16\x15\x27\x1d\x0a\x5f\x53\xe6\xe6\x00\x2f\xe4\xcd\x41\x8f\xdd\x1c\x5c\xe2\xac\x74\xce\x6e\x02\xb6\xac\x7b\x02\x5b\x36\xe5\xb3\x19\x2c\x00\x5c\xba\x2a\xa7\xa2\xad\x5c\x9a\xaa\xf3\x38\x9f\x72\xa7\xc0\xe2\x4a\x40\x71\xd5\xca\xe2\x74\x8d\x7e\x55\x5f\xae\x31\xe5\x3d\x4f\xfd\x03\xf2\xd4\xc6\x20\xe8\x3f\x3c\x4f\x6d\x9c\xf5\x9e\xa7\xae\xcd\x53\x1b\xd7\x71\xcf\x53\x7f\xa7\x3c\xb5\x71\x37\xb7\xc3\x53\xfd\xb1\x5d\x9f\xa3\xd6\x6a\xa7\x7d\x16\xae\x7a\x5d\x4d\x4b\x6a\xe6\xaa\xd8\xa8\x62\xb1\x89\x6f\x5d\x2f\xf8\x02\xe9\x4f\x9d\x87\x5f\x2a\xc0\x44\xc0\x77\xab\xf6\x83\xc7\x33\x5e\xfa\x52\x84\xa2\xd4\x96\x7e\xbc\xd0\x38\xec\x70\xec\xfc\xf5\xd1\xd2\x34\x89\x90\x65\x58\xbd\xc5\x91\x73\x3a\x17\x99\xb8\xe3\xca\x76\xc3\x5c\xb2\x65\x29\x1a\x1f\x9a\xb5\xf0\x0d\x6f\xcd\x41\xc7\xf2\x29\x5e\x68\x28\x06\x98\xcd\xdd\x2b\x12\xbd\x28\xef\x6b\x63\x8a\xbc\xc2\x8f\xb7\xf0\xd2\xfc\x21\xa7\x68\xf5\xa2\x42\xb3\x35\x96\x73\xc5\x2a\xb2\x43\x58\xb9\x7f\x15\x5c\x59\x69\xe7\x47\x8f\xb0\x0f\x0d\x42\x0a\xef\xdf\xa8\xb7\x4d\x48\x41\x94\x58\x1f\x57\xd6\xf4\x92\x1b\x51\x8b\xe8\x68\xf5\xd8\xc7\x70\x1f\x4e\xe2\xa5\xec\x68\x3f\xbc\x5b\xb1\xee\x77\xab\x16\xdc\x73\x9b\xea\x42\x3e\xc6\xd2\xb6\x7c\x25\x37\x23\x3f\x71\xba\x5a\x3b\x0d\x8a\x5a\x52\xfd\xd6\xe6\xac\xba\xba\xa5\xf8\xf1\x34\x83\xbe\x71\xb2\x94\x74\x2c\x24\x2c\x3e\x29\xda\xf1\x59\xc9\x40\x97\xa5\x79\x4a\x74\x60\xad\x2b\xd7\x38\xb9\xa7\x7c\xe7\x1a\x8c\x6f\xcb\x2e\xdd\x62\xd3\x2e\x79\xe8\x15\x15\x69\xab\xba\x51\x93\x80\xe0\xb5\xfc\xf4\x5d\xa5\xd2\xab\x4f\xb5\xae\x06\xb7\x75\x90\x24\xea\xfd\x45\xc7\x60\x57\x21\x29\xb5\x31\xfe\x6e\x72\x73\x6b\x4b\xfd\x07\xcc\x6a\x6f\x50\xaa\x3b\xdd\x95\x8e\x19\xed\x9f\xe5\xc2\x2c\xc9\x79\xef\x2d\x39\xff\xab\x6f\xcc\xef\x36\x17\x7e\x7f\xd5\x77\x96\x86\xbf\xe0\x97\x58\x76\x6d\xea\x0d\xd7\x64\x30\x3b\xb2\x48\xed\xc6\x20\xb5\x47\x40\xf9\x23\xf3\x8a\x05\xb3\x61\x87\x23\xbf\x31\x9f\xd8\xcd\xb9\xdf\x23\xa5\x7c\x41\x24\xba\xd1\xe1\xb8\xec\xcc\x36\x35\x6e\x25\xd5\x75\x55\xb7\xc1\x76\x0d\x31\x8a\xab\xac\xde\xbd\x2d\x59\xb8\xb7\x46\xd2\x07\xec\xc9\x5a\xcb\x19\x7b\xa7\xc0\x38\xe8\x1e\xe1\x68\x6f\x0e\xd0\x26\x55\x89\x22\x6a\xbb\xe7\x10\x19\xb7\x36\x37\xda\x30\x9e\xae\x44\xbe\x51\x0c\x76\x7e\x9d\xe4\xeb\x3f\x2e\x27\x69\x74\x5b\x74\xbc\x99\x1d\x39\xca\x93\xbb\x9e\x4f\xf5\x4e\x75\xbd\x2a\x5f\x00\x43\xec\x02\xc5\xb8\xad\x4b\xde\x76\x65\x86\xdc\x26\x93\xc1\xdd\x8b\xc1\x7f\xe9\xe1\xd2\x6b\xf1\x5f\x7a\xb8\x00\x82\xbb\x58\xd9\x94\x1c\xf8\xff\xd4\xc3\x3d\x74\xd6\x1e\x3a\xeb\xcb\x4b\x90\xaf\x81\xde\x3f\x33\x7f\x70\xb0\xac\xab\x7a\x09\xb3\x38\xd1\x26\x86\xc1\xe7\x40\x13\x76\x8b\x8e\xb5\x06\xbd\x8e\x49\xde\x46\xe8\x57\xa7\x0d\x39\x86\x4f\x77\x86\x3b\x41\xc7\x82\x2f\x2c\x42\x28\x38\x26\x12\x7e\x5c\x1b\xd9\x3e\x1e\xf6\x6a\x7c\xab\xb8\x51\x14\x9e\x18\x27\x80\x8a\x72\x6f\x76\x02\x54\x75\x99\xeb\xe1\xaa\x5c\xad\xd7\x4b\x90\xa8\xee\xb9\x61\xc9\x44\x24\xb7\xbb\xcc\x97\x5a\x0b\x4d\x6b\xd9\x48\x09\xcb\xa9\x05\x2e\x6b\x77\x13\x58\x8d\x97\xf5\x73\x31\xe5\x8a\x05\x88\xac\x00\x9f\x85\x42\xfb\x22\x3c\xd6\xa6\xf0\x54\x2b\x01\xb2\x0e\x87\xb9\x14\xa3\xa3\xcf\x02\x8d\x75\xd5\x0c\x86\xd5\xf3\x21\x54\x4d\x98\x58\xdd\x75\xc3\xf6\x48\x8e\x6b\x0a\xe4\xfa\xa7\x1e\xc6\x5f\x3e\xd5\xd3\x59\x26\xdc\x15\xcc\xd9\x2b\x2e\xb3\xc6\x6a\x76\x9b\xc9\xa9\xad\xd0\x57\xf4\x1c\x85\x1c\x4a\x9e\x27\xfe\xf4\x4f\x3d\xdc\xe3\x59\x3d\x75\x01\x76\x23\x3c\xab\xff\x8a\x76\x76\xab\xd9\xd8\x15\xf5\x88\x5e\xdb\x63\x52\x3d\x3d\x91\xbb\x8a\x41\xf5\x94\xc5\xed\x5d\x41\x5b\x2d\x97\xc8\x1e\x59\xec\x78\x41\x5c\x6e\xa1\xbc\x35\x20\x2a\xb0\x64\x4f\xc0\x24\xc0\xc4\x83\x48\x0a\x94\x7c\xa0\x06\xad\xd6\xb7\x2c\x93\xb7\xad\x46\x21\x2b\xa6\x33\x47\xc9\xba\xd0\xe4\xc4\xca\x3b\x71\x26\x78\x9a\x49\x25\xae\xc0\x07\xd3\xca\x31\x2b\x86\xcc\xd4\x1b\x32\xa4\x62\xe8\xbf\x71\xb7\x25\xe3\xae\x4f\x4f\x52\x8d\xe5\xb9\xbd\x46\xf1\x88\xdb\x30\x2f\x77\x11\x87\x82\xe1\xf7\xbd\xcd\x1b\xda\xcf\x8d\x15\x53\x66\x73\xf8\x88\x66\x56\xe4\x53\xa9\x9c\x50\x2a\xed\x5f\x88\x08\x00\x62\xd0\x50\xb0\x99\x76\x12\xc1\x9d\x60\x0b\x81\x64\xeb\x66\x9b\xfb\xcb\x33\xe4\xc9\xad\x1e\x8d\x5e\xcb\xa9\x6c\xb3\x8e\x55\x97\x21\x46\x47\xc0\x71\xd3\x7c\xa6\x3c\xbf\x45\x3a\x25\x0d\xcc\x7a\x84\x1c\x9d\x9d\x45\x28\x3c\xdf\x3f\x3e\x2e\x2e\x41\xa1\x61\x05\x30\x4a\x6d\xef\x16\xa0\x1d\x4c\x91\x24\xc2\x98\x51\x91\x65\x73\xe6\xae\xa7\x99\x88\xd4\x17\x1e\xc2\x5d\x2b\x4d\xf8\x79\xa1\x20\x19\x08\x90\xa1\xac\xa5\x7c\x2c\x25\xb3\xb8\x60\x2b\xec\x27\xf6\xea\x81\xe6\x67\x3a\x65\x46\x8e\x15\xcf\xcc\xc2\xe3\x50\x29\xd6\xf1\x5b\x4a\x25\x9a\xf1\x9c\x67\x99\xc8\xa4\x99\xba\x0f\x80\xd5\x15\xfb\xa1\xad\x47\xef\x76\x65\x14\x2f\xe2\x31\xc4\x1d\x48\x83\x26\x63\xf4\xa7\xbc\x08\xd0\x5a\xd1\x20\xf0\x9d\xe5\x83\xa4\x95\x68\xa4\x95\x0d\x05\x5e\x12\xad\x12\x31\xb3\xe6\xf8\x5e\xe7\xb7\x99\xe6\xa9\x39\x26\x54\x88\x4c\xe4\xe6\xd8\x89\x56\xfd\xbc\x50\x7d\xab\xfb\xe5\x26\x1e\x6f\x01\x47\x8d\xab\x82\x97\xf9\xe7\x6d\xa8\x71\x71\x43\x0f\x59\x61\x2a\xf8\x0e\x80\x54\x81\x49\xfe\x68\x77\x87\xf5\xf1\x25\x97\x06\xec\xb5\x70\xbb\xf2\x8f\x6a\x57\xff\xc0\x0c\x7c\x56\x28\xc0\x8a\x9b\xeb\x02\x4c\xea\x1e\x07\xf9\xde\xad\xb3\xff\x31\xd5\x65\xde\xfe\xc8\x49\xdb\x4e\xfa\xa5\x04\xfe\x88\x26\xcc\x64\x72\xeb\x87\x51\x28\xf9\xaf\x82\x88\x0c\x5d\x2e\x38\x35\xb3\x99\x80\x2c\x06\x30\xbb\x53\xdb\x12\x33\x8a\x79\xd2\x38\x60\xf8\x35\x0b\x12\xbe\x7b\x5a\x18\xac\xb8\x80\x89\x10\x46\x3a\xad\xc8\x29\x23\xee\xa3\xee\x5c\xd1\x07\xa3\x55\x40\xbf\x44\x80\x71\xf3\x0b\x32\x60\x20\xb8\x17\x39\x8c\x0e\xc6\xcc\x2b\x6f\x03\xed\x4b\x38\xe0\xd2\x01\x5c\x86\x4a\x29\xed\xde\x1d\x07\xf4\x10\xd8\x80\x40\x88\xc9\x19\x89\xcd\xe6\x03\xc6\x7e\xd6\xf7\xe2\x4e\xe4\x3d\xf6\xdf\xba\x80\x6e\x8c\x58\x58\xf8\xff\x74\x73\xfa\x87\x23\xc9\xd8\x9d\x5b\xe8\x7b\xe1\x96\x3e\x17\x65\x0e\x1f\xe4\x73\x64\x29\xfb\x87\x78\xb0\x42\x19\x60\xc4\x77\x2f\x86\xc2\xf2\x17\xff\x60\x27\x97\x17\xbb\x3d\xe0\x5f\x95\x6b\xd7\x9f\xeb\x22\xef\xeb\x7b\xd5\x9f\xe9\xb4\xbf\xe8\x9f\xf6\x37\x60\xa8\x75\x26\xb8\x5a\x48\x28\x2b\xaf\x77\x67\xd2\xe7\x11\xfe\x96\x14\x66\xaf\x11\x3b\x47\xe9\xa0\xf8\xf4\x9c\x3c\x1d\x4e\xd7\xc7\xf0\x9c\x85\x1a\x72\x98\xbf\x46\x89\x85\x8e\x29\x5a\xc1\xd3\x39\x19\x55\xbc\xcb\xd7\x63\x27\x2a\xdc\x7e\x7a\xfb\xde\x1d\xc7\xc3\xc3\x81\x5b\x99\x41\x44\xd0\x59\x9f\x0d\x08\xc9\xbe\x24\xd0\x47\xec\xa6\x78\xfe\xfc\x9b\x84\x61\xf3\x68\x11\x8e\x7a\x4c\x0e\xc4\x00\xbb\x73\x33\x71\xfb\xc2\x32\x31\x02\xb8\xbc\x54\x03\x0d\x0c\x03\x98\xf2\x87\x98\x40\x3e\x75\xaa\xd6\x01\xc7\xe4\x84\xad\x53\x3a\x2f\xa0\x1f\x0e\xd8\x5b\xf0\xca\x65\xf3\x0a\xc5\x31\x02\xfc\x36\x4e\x53\x80\x44\x28\x47\x10\xe6\xba\x58\x7b\x9d\xdc\x38\xee\xa4\xb8\x87\x05\x73\x87\xde\xdd\xc1\x3e\x81\x06\x53\x29\xbb\xe3\xe5\xb5\xec\xb6\x8d\x43\xd2\xab\x0b\x8a\xcb\xd7\xf3\xac\x92\xc0\x0c\x24\x14\x08\x0a\x9d\xe5\x40\x53\xdc\x71\x23\x59\x15\x42\x48\x3f\x21\x8f\x5c\xa9\x8d\x26\x3a\x17\x6e\x2d\x2e\x75\x7a\x4d\x33\x6e\x32\x60\x5b\x9b\x91\x00\x7c\x32\xb2\x22\x7f\x45\x12\x50\x9b\x77\xbf\xf9\x0d\xf2\x4b\x93\xaa\x3d\x12\x60\x1c\x04\x93\xea\x7f\xe9\x21\xae\xdf\x84\x9b\x52\xc4\x2a\x65\xfc\x43\x21\x81\x11\x2c\x5a\x81\x8e\x00\x19\x33\x3a\x8a\xd2\x10\x46\xe6\x92\x31\xf0\x91\xa5\xbc\x20\xf7\x51\xfa\x96\xf1\xe8\x3b\x22\x93\x63\x49\xfe\xe8\xa1\xa8\x55\x0b\x4a\x85\xfb\x76\x4a\x0c\xd9\x77\x21\x0d\xc5\xa4\xd0\xe3\x1e\xe0\xe3\xb9\xf9\x25\xf3\x24\x13\x6c\x5c\xf0\x9c\x2b\x2b\x84\x21\xff\xfa\x48\x2a\x9e\xc9\xdf\x44\x6e\x8e\xc2\x79\x99\x68\xa5\x73\x91\x36\x4c\x26\x62\xf7\xee\x6b\xf7\x5a\x3d\xb3\x2d\x43\x6b\x5a\x0c\x37\x99\xdf\x44\xae\xcb\x5e\x86\x22\xd1\x53\xb1\x30\x5d\xea\x85\xc9\xe9\x54\xa4\x92\x5b\x91\xcd\x69\xbd\xa4\x0d\x4b\x45\x85\x34\xc3\x07\x78\x36\x9b\xf0\x7e\xe6\xb4\x5d\x8f\x48\x09\x29\x70\x34\x25\x36\x9c\x13\x44\x11\x11\x1b\xa1\xd0\xe1\x3f\x11\xec\xfa\xfa\x75\x75\x73\x46\x82\xdb\x22\x17\x3b\xaa\xdb\xda\xe0\xc7\x68\x53\x3e\x57\x56\x6b\x2d\x0f\xef\x0a\x0f\x35\x28\x73\x6d\x36\xcf\x8a\xb2\x84\xcd\xb3\x79\x60\x98\x5b\xca\x12\x2a\x89\xc4\x0a\xcb\xfd\xfb\x68\xca\xee\x8a\x06\x9e\xe9\xb8\x3f\x38\x1a\xe8\x1a\xa6\x00\x6e\x40\x68\x08\xe1\x9c\xa7\x74\x9a\xdc\xc9\x93\x8a\x4d\x40\xf6\x34\x7d\xd2\xfd\x74\x9e\x8a\xdc\xe7\x12\x19\xe1\xb8\xac\x5b\xc8\x19\x49\xd5\xc6\x77\x19\x67\x59\x49\xc5\xde\xbf\x3a\xfd\xe6\x9b\x6f\xfe\x8c\x80\x5b\x74\xcc\xa4\x62\x1f\xae\x4f\x77\xe7\x2d\xe8\x04\xab\x79\x5d\x9a\x47\xcb\x68\x16\x84\x7e\x23\xd4\xe5\xd8\xf6\xfa\xac\xe6\x51\xfa\xd4\x92\xc5\x76\x4d\x98\x8b\x38\x9a\xa1\xe7\x8a\xe9\x69\xe6\xde\xe9\x4f\x45\x3e\x16\xfd\x5b\x31\xf7\x09\x9b\x07\x6d\xad\x8d\x75\x07\x63\x3c\xc7\x68\xce\x7c\xbc\xb0\x3b\x68\x33\xe8\x7c\xab\x40\xda\x41\x54\xdc\x5c\xf0\x04\x54\xf8\x09\x37\x62\xb9\x37\x61\x6d\x29\xcc\x5b\x74\x1e\x73\xb5\x78\x72\xab\xf4\x7d\x26\xd2\x71\x89\x9e\x48\xae\x10\xda\xed\x3f\xf6\x9d\x03\x59\x5e\xa4\xdb\xd8\xd8\x2b\xdf\xd5\x8e\xd9\x09\x28\x87\x83\xd3\x5c\xab\xb6\xa0\x27\x7a\xde\x3d\xf0\x29\xc9\xb5\xda\x47\x3f\xed\xa3\x9f\xbe\x70\x57\xcc\x3e\xfa\xa9\x1e\xfd\xe4\x09\x43\x8f\x49\x95\x64\x45\x5a\x56\x24\x9d\x88\xb4\xc8\xb6\xbe\xc1\x8f\x0f\x1c\xaa\x50\xc8\xad\xc5\x48\x05\x02\xf9\xc4\xe7\xfb\x29\x23\xa6\x3c\x17\x6a\xf6\xcf\xc1\xb8\xd6\x71\xd2\x55\x26\xd2\x1a\x27\x11\xb5\x69\x8a\x95\xf0\x7b\xb5\x0f\x98\x78\xea\x3c\x6f\xa3\x80\x09\xda\xfd\xdd\x06\x4d\x54\xe5\x2c\xaf\x71\xec\x59\xf6\x93\x63\xd9\xfb\xe8\x89\x76\xea\xdc\x12\x41\xf1\x38\x0a\xdd\x1a\x4f\x11\xb5\x59\x33\xa6\x02\xc8\x16\x68\xaa\x92\x2c\xdc\xa1\x58\x4c\x5e\xa8\xf6\x32\x5f\x28\x92\x84\x78\xd8\x7f\xea\xe1\x75\xf7\x28\x8c\x44\x2b\xb4\x96\x24\xf3\x4b\x9d\xc9\x64\xde\xc9\x95\x45\x09\x8f\x36\x17\x1c\xf2\x74\xbc\xc1\x25\x4c\xcf\x94\x76\x3b\xf6\x11\x80\xba\x28\xf9\x90\xe7\xe2\x25\xeb\xb3\x9b\x83\x93\x2c\xd3\xf7\x37\x07\xec\x90\xca\x02\x1d\xbd\xf4\x7e\x77\x4f\xe9\xdc\x17\xf2\x42\x45\xfd\x67\xf3\xbf\xc0\xbb\xaf\x74\x3e\x94\xe9\xcd\xc1\x4b\xa7\x37\x0f\x65\x6a\xe2\x31\xe4\x85\x32\x3d\x66\x6e\x25\x42\xb5\x2a\xf1\x00\xbf\x31\x39\x62\xb3\x5c\xdc\x49\x5d\x80\x9f\x8c\x4d\xb8\x51\xcf\x6c\x69\x0a\x9f\x0b\x8b\xbd\xbf\x17\xb3\x8c\x27\xc2\x75\x9f\x70\x95\x88\x2c\x18\x94\x22\x83\xa1\xf7\xfa\xe6\xd8\xd8\xe0\xbe\xd9\x09\xe3\x4c\x89\x7b\xa6\x55\x67\x84\x2b\x34\xb2\xb8\x09\xff\x2c\x8d\xd5\xf9\x7c\x55\x04\x48\x55\x37\xc7\xd7\xcb\x69\x78\x47\x6e\x2e\x2c\x97\x8a\x2c\xc9\x40\x8e\x81\x4e\x22\xb8\x7d\x2a\x8d\xa3\xc3\x85\x34\x93\x50\xfd\x4b\x3c\xcc\x32\x99\x48\x0b\x76\x6c\x98\x1b\x14\xc3\x0a\xc5\xf5\x2b\x91\x23\x2f\xb6\x60\xcc\x89\x0f\x6a\x57\xff\xe9\x3f\xbd\x17\x63\xa5\x17\x88\x4e\xd1\x3a\x18\x8a\xd5\x0b\xff\x5f\xe5\xf0\x1a\xe5\x69\x7f\xef\xda\x37\xca\x37\x63\x52\xc1\x90\x18\x2e\x4a\x0f\xdc\xe7\x9e\x56\x0b\x35\xb8\x97\xb7\x72\x26\x52\xc9\x07\x3a\x1f\x1f\xbb\xbf\x8e\x5d\xf3\x75\x02\x8e\x73\x37\xf3\xee\xf1\x54\xef\xa8\xcc\x04\x4b\xe9\x95\x38\x94\x6a\xa4\x73\xe6\xbb\x0c\x0b\x2f\x47\xee\x94\x4f\xa5\x31\xc2\x84\x89\xa5\x68\x65\x03\xd8\x31\x35\xa7\x58\xea\x01\x63\x6f\x24\x14\x59\x80\xe3\x18\x91\x85\xb0\x6f\xba\xf0\xe8\x5e\x74\x82\xb5\x12\xeb\x9b\xe0\x17\xc3\xa8\x4a\x4f\xf5\xc6\x57\xaa\xec\xe2\x53\x5f\xab\x6f\xb6\x61\x23\x2d\xcc\x4c\xb4\x4a\x68\xe8\x5c\xca\xf8\x98\x59\x91\x65\xc1\x48\x46\xc6\x4f\xc8\x64\xc7\x3e\x9c\x24\x65\x9c\x10\x55\x21\xed\xe0\xc8\x4b\xb5\x20\x84\xe6\xd9\x2c\x9b\x43\x66\x41\x96\xfb\x88\x83\xdc\xc6\xae\x45\x33\x60\x95\x49\x42\x98\x4d\xc3\x44\x6b\x61\x16\x6b\xdb\x05\x57\xf8\x9b\x2a\xad\x3a\xf8\x9c\x3a\x1a\x07\x57\x39\x9e\x4e\x82\x04\x4f\x07\x05\xd6\xa0\x91\xa1\xec\x46\xb6\xf7\x2e\xe8\x66\x48\x9e\x05\xe9\x1e\x2b\x15\xe1\xdd\x5e\x61\x69\xbf\x88\x60\xb5\x81\xfe\xde\xf3\xa6\xc2\x46\xde\xee\x5e\x09\xf2\x0b\xe4\x63\xfb\x76\xee\xee\x07\xa7\x4e\xe2\x5b\x5c\x95\x71\xbb\x7a\xe1\x56\x6e\x39\x39\xd8\x49\x79\x85\x50\x41\x58\x11\xcf\x9e\x40\x5f\xe1\x21\x06\xac\xf5\x48\x3d\xca\x74\x17\x05\x0a\x9a\xea\xd7\x41\x6f\x2a\x83\xd0\x9e\xb0\xca\xb0\x7b\x0b\x5f\x5b\x28\xe5\xe7\xcf\xff\x8b\xa4\x8d\xb6\xb3\x9c\xb8\x93\x33\x42\xa0\x83\x92\x16\x96\x3f\x5e\xc9\xb1\xa3\x2c\xef\x51\x0b\x5e\x7a\xb8\xcb\x30\x1b\xce\xa2\x2e\x21\x0a\xd5\x11\x26\xd2\xa2\xf7\x2e\x92\xbd\x8b\xe4\x8f\x6f\x6f\xf9\x1c\x54\xcb\x09\x9f\xf1\xc5\xa3\x65\x64\xd2\x1a\x91\x8d\x30\xb6\x58\xcd\xe3\x42\x65\x51\x3d\x8b\x75\xf4\x9b\xf5\x08\xc6\x46\x4e\x84\x33\x91\xcb\x3b\x70\x6d\xd7\x4b\x30\x47\x98\xbd\x3b\x1c\xf3\x4e\x1c\x01\x95\x31\xe0\xf9\x6c\x30\x3c\x2d\x25\xbc\x8f\x34\x43\xad\xb7\x02\x0d\x59\xd8\x9b\xc3\xca\x3b\x39\xee\x03\xdc\xde\x15\x92\xa0\x93\xf5\x8c\xe5\xd3\x59\x48\xa2\x05\x11\x10\x6f\x7e\x88\x94\x0f\xc1\x3e\x9f\x31\xf9\x78\xd2\x9c\x7c\x0c\xa6\x9b\x6a\xda\x71\x74\x60\x51\x2d\xd8\x5a\xde\x31\xa4\x1d\xd7\xb3\x8e\x37\xfa\xd4\x8a\x44\x5f\xdf\x27\x9f\xcd\x72\x7d\xc7\x33\xec\xbc\x17\x69\x1f\x27\xf0\xc4\x69\xdf\x39\x3b\x13\x4a\x3e\x32\xe7\x77\xbd\xb3\x5a\xf5\x76\xed\xbd\x55\x4f\x53\xfc\x58\xf0\x56\x6d\x51\x35\x5d\x4f\x82\x5d\xa2\xb1\xee\xe5\xa3\xdf\x85\x7c\xb4\x2b\x47\xd0\xe3\xb8\xf3\x36\x1c\x45\x1b\xc8\x55\xcb\x94\x31\x34\x2b\x46\xc2\x93\xfb\x73\x3a\x2d\x2c\x70\xab\x32\xb0\x3e\xc8\x88\x41\xc9\x1f\x20\xfa\x21\x9c\x64\x4f\xf6\x55\xca\x3e\x38\xf6\x46\xa1\xe4\x86\x25\x5c\xf9\x10\x46\x4d\xc6\x09\x04\x9d\x80\xd0\x7f\x6a\x04\x69\x71\x24\xc7\x0d\x2b\xe5\xd6\x5c\x87\x49\x38\xb7\x53\x9d\x22\x36\xde\x70\x0e\x29\x6c\xad\x81\x07\x79\x7c\x87\x57\x15\x91\xcb\xdb\x6c\x1f\xe7\xee\x79\xbb\x80\x09\x49\x73\x46\xe4\xee\xba\x62\x7a\xdd\xe0\x42\x8d\x34\x52\xdf\x11\xa7\xea\x10\xc4\xee\x1b\x18\x9e\xae\x60\xe9\xb3\x83\x52\xf4\xbe\x6c\x18\xf1\x52\x92\xd8\x40\x13\x97\xdc\xb9\x40\xd4\x16\x88\x1b\x1c\xf3\x36\x89\xfb\x27\xd7\x60\xb7\xcb\xb1\x92\xd0\x37\xcf\xa9\x3e\x95\xbc\x66\x88\x58\x9c\xcb\x8f\xdc\x88\xef\xbf\x0d\x95\x9f\x2f\xff\x7a\x7a\xf5\xd5\x8b\xe7\xec\xf4\xea\x3d\xab\x1a\x97\x6a\x1f\x6c\x30\x8d\x0f\xe7\x76\x41\x3a\x2c\x64\x1b\x9f\xf8\x70\x71\xb6\xdb\x65\x6c\xa6\xb2\x05\x5c\xd0\x96\x71\x81\x57\x54\xa4\x74\x91\x4b\x38\x4f\x8e\xd7\x78\xc4\xa0\x07\x30\xe0\x8b\x07\x32\x67\xdf\x8a\x79\xf0\xb4\x84\x3a\x49\x30\xee\x92\x99\x58\xad\x33\x33\x90\xc2\x8e\xc0\xe5\x34\xb1\xd3\xec\x38\x1f\x25\xdf\x7d\xfd\xa7\xe7\x5f\x19\x0c\x2b\xea\x7f\x3b\xf8\x7a\xf0\x62\xf0\xcd\x8d\x82\x91\xad\xff\xe6\x8b\xaf\x77\x76\x9a\xdc\xfa\xaf\x80\x64\xbc\xf8\x74\xbb\xb9\x3d\xa1\xb8\xee\xc5\x68\xf6\xda\x97\x6f\xb7\xcd\x7f\x14\xf8\x04\xc4\xbd\x93\xac\xdf\xab\x3b\x7c\xe0\xa4\x80\x1b\x1b\x9e\x48\x63\x0a\x91\x56\x4c\x12\x13\xd1\x98\x31\xb4\xde\xf5\xeb\x94\xeb\x11\xf4\x57\x18\x6f\x26\x4b\xfc\x61\x9a\x4a\x8f\xf9\xba\x81\x41\xab\x81\x7d\x52\x92\x67\xbb\xf1\x9f\x6c\xa8\x7f\xd7\xce\x6d\xeb\x09\x21\x17\xcd\xc9\x2f\x57\xe7\x4e\x71\x96\xc9\x8f\x99\x4e\x6e\xaf\xac\xce\xc5\x47\x9d\x15\x53\xb1\x12\x9f\x3a\x78\xb3\x38\xbb\x74\x42\x8c\xb1\x4e\xf2\x3c\x93\xe6\xb6\x82\x40\x7a\xf2\xcb\xd5\xe0\x46\xdd\xa8\x13\xf8\x27\x3b\xff\xf1\x8a\xa5\xae\x0d\xc0\x5a\x88\x07\x09\xe0\x16\x08\x20\xa1\x0b\x65\x43\xad\x5b\xc2\x62\x75\xd7\xe5\x7a\x22\xa2\x77\x78\x66\x20\x2b\x82\x30\x6f\x0d\x9f\x0a\xe8\xf9\x37\xad\x04\x23\x77\x90\x13\xed\x32\x61\x07\xac\xfe\x55\x27\x8e\x40\x22\xdb\x90\xbe\x87\x0e\x61\xa7\x9d\x1f\xdf\xe7\xd2\x0a\xa8\xf6\x3e\x08\x2f\xdd\xc1\x5a\x18\x66\x8a\xd9\x4c\xe7\x96\xe9\x7b\x25\x72\x33\x91\x33\x36\xe5\x8a\x8f\xc5\xd4\xcd\xd9\x09\x29\x57\xe7\xaf\xa5\x2a\x1e\x00\x11\x64\x28\x00\xe7\xb5\x45\x36\xc1\x6e\x2f\xce\x3a\x08\x27\x23\x73\xdd\xae\x72\xbf\x92\x99\xf0\x38\x22\x04\xb3\x05\x5a\x26\x7c\x02\x43\x17\xe6\xba\x60\xf7\x5c\x41\xce\xe0\x14\x33\x80\xaf\xe5\xec\x25\x3b\x57\x06\x32\xf7\x3d\x7c\xc5\xa8\xd6\x95\x0c\x13\x2f\xf3\x56\x26\xda\x58\x9f\x65\xa2\xc6\x94\x3b\x3c\x60\xe7\x88\x7a\x6f\x5e\xb2\x1b\x27\x4f\x7d\x8b\x85\x18\x1f\x46\x06\xff\xa1\xac\xfb\xd7\x80\x5d\x4c\xd1\x37\x9d\x91\x2e\x93\x87\x24\x17\xff\x1a\x93\x23\x56\xa8\xc8\x5b\xbd\x66\x2e\x95\xb1\x3a\xe7\x63\x71\x4c\x3b\xf7\x15\xbf\x37\x02\x4f\xf8\xd0\x9d\x70\xf7\xb8\xb3\xb1\x63\xc6\x73\x5b\x35\x6d\x35\xdb\x52\x43\x3b\x7f\x28\x57\x2c\xfe\xc5\x88\xe9\xa9\xb4\xd6\x53\x46\x0a\x48\x82\x00\x4c\x6a\xe4\x96\x9b\x7a\x71\x3c\x27\x5e\xe0\x57\x3a\xf7\x8f\x9c\xf6\x75\x6c\x52\xfe\xa2\x07\x9f\x21\xa0\x01\xcc\x5e\x0e\x63\xe2\x86\xdd\x1c\xbc\x70\xab\x7f\x25\xa7\x32\xe3\xb9\xcf\xfb\xa6\x4e\xca\x96\x8e\xff\xf8\x2e\xdd\x60\x6e\x0e\x9e\xdf\x1c\xb0\x43\xcc\x03\x87\xbb\x93\x01\xfa\x05\xf4\x8f\x87\x75\xce\xc4\x74\x56\x2d\xb5\xb5\x69\x18\x81\xbb\x84\x4e\xa3\x58\xe9\x6e\x9b\xb3\x9b\x03\x9b\x17\xe2\xe6\x00\x9c\xfb\xda\x51\x1a\xc4\xfb\xb7\xa4\x8d\x60\x47\xe5\x18\xa5\x62\x48\xd5\xde\xb8\xb5\x85\x55\xf6\x5d\xb4\xee\xc6\xcd\x01\x84\x0e\xb8\x56\x9f\xe4\x18\x2e\xc1\x7d\x08\xe4\xa2\x45\x96\x44\xcc\x8d\x8b\x33\x7f\xff\x67\x25\x4d\x4e\x1b\x68\x32\x3b\x3c\x99\xf2\xdf\xb4\x8a\xa8\xdc\xd1\x67\xb9\x6b\x9d\xb8\xd4\x08\xf8\xe4\x7c\x29\x37\xf2\x0d\xd0\xea\x02\x1a\x0c\x98\xcf\xfc\xcf\xe4\xfb\x07\xe7\x62\x91\x95\x51\x3f\x4b\xc0\xf5\x75\x2a\x16\x3e\xd9\xe6\xc6\x74\x2f\x2c\xff\x58\x5c\x18\x70\x2d\x47\x04\xcd\xfe\x6d\x3c\x9c\x3a\x85\xd2\xe9\x5a\x23\x9d\xe9\xb4\x65\xa0\x98\xca\x9e\xe8\x7e\xa6\x41\x08\x03\x43\x53\x84\x2f\x0f\xbc\xd6\x4d\xb6\x07\xdc\xb6\xc7\x84\x4d\x06\x80\x5a\xaf\xa7\x82\x54\xfa\x99\x4e\x0f\xcd\xd1\x5a\xd5\xb5\x23\xc8\x82\xb6\x79\x2a\x2b\xd7\x9f\xab\xb2\xb2\xbf\x6a\xc2\xfc\x4e\xcb\x94\xcd\x0a\xc2\x54\xfa\xf4\x93\x8e\x67\xb6\xce\xb5\xb0\x16\x52\x23\x91\xb4\x2d\xbf\x1c\x95\x66\x51\x28\x09\xf7\x1c\x80\x53\x0b\x94\xbc\xdc\x5c\x5b\x64\x97\x0a\x0a\x7f\x2a\xee\x64\x22\x2e\xb9\x9d\x74\xaa\xf4\x17\x1a\xb7\xed\x9f\x6f\x54\x8f\x98\xc2\xd7\xd9\xcc\x3d\xba\x77\xfa\x41\xcc\xc4\x4a\xb0\xae\x90\xb0\xdd\x95\xcb\x77\x81\xd9\xf7\x35\x34\xfd\x42\xe1\x57\xb7\x42\xdb\x7e\x2b\x72\xe1\xa4\xe6\x4e\x62\x77\x68\x1d\x2f\x0e\x57\x0c\x7e\x67\x67\xdc\x72\x94\xc0\x51\x86\xd0\xaa\x14\xd9\x1c\x83\x1c\x4a\x95\xd2\xa3\x12\x26\xaa\xb5\xd6\xa3\x34\xb7\x6f\x2b\xfb\x2d\xcd\xed\x87\xf7\x17\x5d\xc2\xbc\xc1\x2e\x3b\x7e\xe3\x0e\x53\x0b\x32\xaf\x1b\xda\x29\x36\x65\x53\x9d\x8a\x97\xec\x2d\x5c\x32\xc7\xc3\xc1\xbe\x48\xff\xfc\xc5\x09\xe7\x9d\x4d\x1c\x61\xdc\xed\x72\x5b\xbc\xb5\x10\xca\x04\x9c\x92\xee\xfd\x30\xd3\x43\x46\x1c\x6e\x9d\xef\xba\xe5\x69\xff\xec\x87\xf7\x17\xdb\xfb\xe4\xda\xfa\x41\x29\x86\xbe\x21\x64\x41\xbe\x20\xf8\x77\x97\xfa\x07\xdb\x96\xf7\xb7\x14\xa3\x72\xfe\x30\x13\x49\xa8\xd5\x6b\xd8\xd5\x84\xe7\x22\x7d\xc9\xa6\x45\x66\xe5\x2c\xa3\xb5\x76\x8b\x6f\x9c\xa8\xe4\x57\x9d\xf1\x04\xe2\x84\x19\x3b\x13\x58\xd1\x25\x7d\xe9\x73\xb7\xc3\x1b\xcd\x2f\xbc\x01\x85\x30\x7d\xc9\x38\xdc\x45\xd4\x0f\xd3\x68\x93\x0f\x41\xf1\x94\x2a\x3c\x22\x4a\x25\x33\xe0\x4d\xc2\x1e\x0d\xbc\xec\x09\x12\xaa\x81\x21\xaf\xe1\x03\x5e\x25\x3d\x2f\x84\xc4\xb2\xc3\x52\xf1\x3d\x1a\x94\x72\x33\x10\x57\xb0\xd1\xa0\x70\x5d\x11\xaa\x0d\x61\x0f\xd6\x64\xea\xc7\x85\xd7\x56\xa8\xa1\x3b\xb1\xa5\x49\xa1\x3b\x5d\x74\xef\x35\xd2\x45\x78\x70\x25\x72\xe0\x1f\x5b\x22\x8d\x46\x24\xb9\xb0\x15\xe2\x08\x1b\x06\xbf\xac\x26\x8f\x4f\x7f\xbb\x7a\x8b\x13\x6d\x09\xc7\x88\x6a\xd0\xe0\x0b\xa8\xfc\x86\x8a\x3a\xb8\x11\x57\x74\x69\x4e\xe8\xd2\xbc\xf5\xa5\xda\xfe\x2a\xe6\x9d\xf3\x0e\xc2\x78\xcc\x8c\x27\x5d\x06\x05\xed\x3c\x9d\xdf\x70\x74\x15\x1d\xdd\x4b\x85\x64\x6d\xba\xd4\x9d\x6f\x69\x79\x44\x5a\x94\x5c\xd7\x86\xc5\x27\xeb\xd1\xf2\x85\xbb\x00\xfb\x7b\xb4\xbf\x47\x9f\xf7\x28\xfe\x28\x55\xea\x5e\x59\x76\xf8\xe8\x39\x73\x5b\x8c\x55\x09\x30\x1a\xa2\x2c\x22\xf1\x17\x56\xa9\xb0\xc9\x51\x4f\x33\x6c\xa8\x0b\x15\x69\x2f\x4e\x6a\xe1\x21\xe0\x3f\x1f\xb0\x33\x77\x98\x81\x9b\xbb\xfd\x7b\x31\xf8\xa1\xc7\x66\x99\xe0\x06\xdc\x30\x28\x7a\xe1\xb7\x0d\x33\xc5\x30\x98\x4a\x3c\x10\x8d\x54\x80\x6d\xd9\x0a\x43\xdd\xb5\x72\xdf\x3e\x72\x68\x1f\xb8\xfc\x87\x08\xcc\xf9\xa3\x63\xbb\xac\x2c\x77\x79\x5d\x56\xb7\xf4\x84\xaa\x6e\xef\x07\x6e\x58\x62\xc3\xc7\x0b\xb4\x89\xad\x68\x49\x8d\xf3\xff\xc5\xb6\x13\xd7\xb4\x18\xc4\xe4\x29\x76\x73\xb8\x52\xa7\x48\x25\x1a\xfa\xe9\xd5\xc5\x9a\x22\x7d\xe4\x61\xf4\xba\x16\xac\xaf\x34\x41\x81\x72\x64\x5e\x31\xf1\x40\x74\xea\xf4\xea\xc2\x9b\x83\xd2\x5c\xde\x89\x9c\x1d\xfe\x28\x2c\xf7\x00\x94\x47\x6d\x86\x0e\x68\x7f\x50\x35\xb8\xff\xcc\x55\x9a\x75\x4c\x69\x27\xcf\xf6\x65\x31\xcc\xa4\x99\x5c\x01\xeb\x7e\x0f\xdb\xda\xe2\x77\x5e\xf2\x12\x92\xa8\xdc\x6f\x73\x38\x40\x28\x0f\xd0\x59\x23\x89\x00\xb4\x71\xa1\x42\x69\x80\x32\xfe\xc0\x6a\x36\xe3\x26\x10\x75\xb7\x38\xb4\x2a\x56\x07\xb0\xc7\xf0\x68\x61\x34\x64\x2d\x74\x44\xbf\x7c\xf6\x41\xcd\x2a\x4f\x13\x9e\x65\x0b\xd8\xa1\x9a\xd2\x7c\x4b\x8e\x31\x14\xe8\x25\x72\xba\xbe\xd2\x7e\x22\x12\xc9\xa0\x2c\x21\x52\x97\xcc\xd1\xb0\x29\x16\x4c\x00\xe7\xad\x6f\xd4\x03\x0c\x7d\xfc\x37\x86\x90\xb9\xe9\xae\x95\xde\x17\x4e\x67\x58\xfa\xea\xc5\xea\x55\x4f\x47\x8b\x88\x89\x0b\xdb\x50\x8c\xb3\x5c\x72\x27\x69\xa0\x27\x40\x1a\x3a\xa6\x03\x08\x9c\x83\x05\xf8\x43\x98\x7b\x3a\x5b\x5c\x75\x2a\xd6\xb8\x29\x6f\x1b\x9a\x7f\x8e\x3b\x12\x8d\x23\xba\x1d\xee\xd7\x2f\xf4\x5e\xb8\x7d\xbc\xb2\x7c\x2c\xba\xee\x62\xb5\xf1\xe7\xda\x43\x18\x45\x6d\x07\x9b\x7e\xfb\xa0\x4c\xf4\xeb\x17\xb2\xa7\x1d\x14\x6a\x8f\xe3\xf0\xb2\xac\xf1\x1e\xef\xc2\x12\x56\x42\xe1\x4a\x83\xc5\xcc\xfc\xaa\x3e\xbe\xa6\x57\xfc\xc4\xa2\xc8\xd8\x1a\xd1\x58\x36\xaa\x87\xc7\x68\x46\x37\x77\x9b\x41\xb9\xed\x71\x84\x15\xe1\x62\xf9\x98\x3f\x46\xcd\x3c\x67\xa1\xca\x1a\x51\x60\x08\xcb\x85\x2d\x72\x55\x92\xee\x48\x08\x9a\x65\xc5\x58\xaa\xff\xf7\xff\xfe\x7f\x0c\x3b\x85\x90\xed\x8f\x61\xd2\x70\xe9\xfc\x95\xa1\xe6\x5a\xe1\x29\x2b\x11\x18\xe8\xc8\x77\x66\x52\x5d\x8c\x00\xa7\x7c\x86\x26\xef\x78\xf1\x16\xf6\x2b\x4d\x0d\x81\xdd\x4c\xf5\x9d\x30\xec\xf2\xdd\xd5\xc5\xff\x9f\x25\xd1\xbb\xa8\x67\x79\x2c\x83\x10\x2d\xb6\xc2\xb5\xcf\xd3\x36\xfd\xf0\x24\x4d\x45\x5a\xf9\xca\xce\x82\x49\xd3\x5c\xcf\x5a\x21\x85\xa7\x90\x24\xb5\xd3\xb1\x74\xda\x2e\x31\x9b\xbc\xba\xda\x5c\x74\xe7\xcc\xf5\xc0\x22\xa9\x84\x8c\x83\x4e\x94\xcf\xb8\x69\xac\x1c\x30\xd3\x29\xbc\x36\x32\x21\x00\x2f\xc5\x42\x31\xad\x71\x78\x3a\x5f\x33\x0c\x6f\xaa\x95\x84\xe2\x13\xab\x45\xfc\xd0\xb4\x6d\xcf\xf0\x03\x2f\xd9\x1b\x6a\xdc\x04\x9a\x08\xcb\xe1\x7b\x6b\xd2\x8c\x73\x01\x96\x29\x9f\x59\x72\xfc\xf3\xf9\xc9\xd9\x31\x99\xbc\x8c\x0f\xb5\x39\x4e\x60\x79\x8e\xdf\x9f\x9f\x9c\xbd\x39\x77\x5a\xf1\x44\xdf\xf7\xad\xee\x17\x46\xf4\xa5\xdd\xd9\xb1\x9d\xb5\x3b\xef\x4b\xce\xf0\xc1\x60\x64\xa5\xdb\x5c\x1f\x68\x99\x6b\x6d\x7b\x2c\xe7\x10\x32\x41\x35\x61\x04\x1b\x15\x59\x86\xab\x62\x73\x21\x7a\xb1\xa1\xbd\x01\xeb\x7c\x63\xe7\x57\x39\xb4\xdd\xda\x83\x3f\xdd\x96\xb6\xda\x99\xdd\x85\xeb\xb4\x1a\x57\xa1\xb9\x67\x32\x10\x60\x61\x35\x84\xf4\x83\x95\xcc\x69\x2d\x1f\x8c\xc8\xab\x7b\x23\x6c\x02\x43\x3e\x86\x48\x76\x12\x66\x3e\xd9\xe4\xdb\x7c\x43\xed\x72\x68\x7d\xea\x24\x88\x2e\x88\xa1\xbc\xb0\x13\xa1\xac\xc7\xf6\xa0\x09\x36\xae\x05\x08\x7c\x9f\x60\xe7\xb7\x25\xe3\xb9\x1d\xeb\x7a\x8b\x83\x56\x9b\xf3\x54\x1b\xac\x1c\xe6\x04\x8f\xca\x02\xf0\x74\x2a\xd5\xe7\xda\xfc\xee\x6c\x6c\xcf\xbc\xf6\xcc\x6b\xcf\xbc\xf6\xcc\x6b\xcf\xbc\x9e\x32\xf3\x7a\xad\x13\x9e\x2d\x71\x75\x7c\xc1\x1c\x4c\xaa\x54\xe4\x8f\x51\xc4\x12\xe8\xc1\x6b\xfb\x71\x3e\xc0\xbb\x99\x50\xc6\xf2\xe4\x76\xc0\x4e\xd8\x69\xa5\xd9\x9a\x69\x5a\xf1\x5b\x4d\x89\x5a\xb9\x18\x53\x4a\x4a\x25\x4d\xab\xf2\xcd\xdf\x55\xb6\xd5\x76\xcd\xeb\x9f\x30\x87\xaa\xfd\x5c\x4f\xe7\xe6\x5f\x59\x1f\x4f\x4c\x7f\x96\x96\x07\xfb\x8b\x60\x6a\x6b\xcc\xbe\x95\x8f\x75\xa5\xe5\x10\x26\x60\xf0\x42\x2d\xb5\x7e\xcf\x78\xce\xa7\x02\xe0\x3c\x0b\x83\x5b\x9e\x68\xa5\x28\x40\xc6\x5d\xe1\x2b\xb8\xc2\xdb\x57\x17\x3a\xa4\x1f\xd1\xbd\x97\x69\x18\x9b\x4c\x1d\xff\xa1\x64\x34\xff\x58\x79\x22\xf4\xe9\x0e\x64\x77\xda\xba\xa7\xa8\x7b\x8a\xba\xa7\xa8\x7b\x8a\xba\x0d\x8a\xda\x45\x86\xfd\xe3\x93\x55\x88\x79\xbb\xb8\x3c\x85\x72\x78\x4b\x49\x6a\xb5\x59\x6b\x2d\x3d\x70\xdf\x61\x7b\x76\x71\xc9\x86\xdc\xad\x8a\x11\x06\x22\x25\x7d\x9a\x5f\xbb\x07\xc8\xca\xa9\xd0\x85\x5d\x8d\x56\x5f\x6d\x18\xc1\xa0\x90\xef\x16\x7e\x0d\xc3\xb9\xb8\x24\xca\x44\x83\x31\x56\x26\xb7\xf3\xa8\x7c\x3a\xba\x49\xa7\x44\xd2\xa0\xa2\xb9\x78\x0e\xff\xfd\xfa\x7b\xfc\x5f\x2a\x73\xfe\x9f\x7f\xfa\xfe\xdb\xe7\xcf\x0f\x9d\xae\xf6\x82\xa5\x7c\x7e\xe4\x68\x0f\x05\x5d\x87\x3c\xd7\xff\xfc\x4f\x76\x13\x16\xce\x91\x30\xba\xf0\xf4\x19\x69\xd8\x8b\xe7\x7f\xa2\x5e\xbe\x61\x13\x5d\xe4\xe6\x31\x29\xda\x9d\x76\x5b\x4f\x67\x5a\x09\xd5\x04\x08\xd9\x09\x26\x25\xa0\x75\x10\x1a\xba\xef\xaf\x35\xec\x36\xaa\x38\xea\xb1\x42\x57\xf3\x24\x91\xe7\xad\x75\xd5\xc3\x0c\x18\xb4\x64\x89\x4e\xa9\xde\x40\x34\x2a\xc8\xc3\x8f\x42\x91\x27\x82\x67\x76\xc2\x92\x89\x48\x6e\xa3\xf7\x3a\x07\xc5\xac\x46\x92\x7c\x43\xd0\x91\x4d\x4b\xd6\x3e\xba\x45\x94\xa1\xea\x78\xd7\x29\xfa\xd0\x0e\xc7\x7a\x15\x6a\xb9\xad\x18\x5f\xa5\x46\x8b\x7b\x7a\x73\xf0\x33\x8c\x68\x7e\x73\xe0\xd8\xf5\x35\x64\xe7\x3b\x2e\xfd\x0a\x53\xf0\x7b\x0c\x1a\x7d\x50\xb7\x4a\xdf\xab\x35\xa2\x8d\x56\x40\x56\x5e\x13\x68\x46\xb7\xb1\xbe\x8c\xc7\xb9\x15\x22\xe9\x3f\xb3\xaa\x98\x40\xb5\x1d\x3b\xc4\xc8\xbc\xca\x8f\xaf\xa5\xb1\x47\x6c\xa2\xb3\x94\x68\x67\x56\x18\xeb\xa4\x40\x37\x7e\x42\x77\x53\x23\xbd\x2f\x3e\xfa\xd9\x02\xd4\x3b\x21\x12\xbd\xa6\xf2\x0d\xe1\x04\x96\x67\xd3\x50\x15\xea\xa6\xbc\xc0\xed\x15\x6e\x68\x20\xe5\xde\xa4\x1e\xba\xdf\x7d\x2d\xe8\x7d\x30\xff\x3e\x98\xff\xb1\xc1\xfc\xff\x8b\xed\x2a\x34\xbe\x4e\xb7\xb7\x10\x22\xbf\x48\xcc\x97\x72\x83\x92\xcd\xf2\x2c\xab\xb2\xda\x12\x6f\xa4\xa4\x1f\xdc\x5d\x93\x50\xd7\xb1\xc6\x49\x70\x8f\xf7\x45\x3c\x9f\x3a\xef\x58\x55\xc4\xf3\x75\xb7\xfd\xdd\x2d\xc7\xa8\xe0\xe1\xef\x81\x93\x9f\x20\x49\xdf\x69\x21\xcf\xc6\xb1\x3f\x41\x08\xe7\x95\xf4\xbc\x05\xa5\x79\x3d\x9a\xae\x46\x72\xfc\x86\xcf\x5a\xe4\x7a\x6a\x41\x72\x7b\xc5\xde\x81\xe8\x11\x8e\x9e\x43\x1e\x2a\x1a\xa8\x4c\x31\x15\x7b\x11\xfe\xb3\x91\xe1\xa1\x54\x3c\x9f\x9f\xb5\xdf\xb6\x1f\x43\xa3\x32\xb0\x9f\xd2\x8c\x79\x3e\x67\x78\xf5\xce\x79\x32\x81\x40\x05\xb0\x0a\xb9\x9d\x25\x0a\xce\xb3\xd9\x84\xab\x62\x2a\x72\x99\xb0\x64\xc2\x73\x9e\x58\x91\x9b\x1e\x7b\xd6\x7f\xd6\x63\xcf\x7e\x7d\xe6\x54\xe1\x67\x83\x67\x03\x16\x7f\x87\x2b\xff\x2d\x36\x9c\x5b\xc1\x30\x8a\x3b\x81\x7d\xe5\x16\xb2\x06\x1c\x19\x23\xe7\xc1\x87\xeb\x57\xfd\x3f\xb1\x9c\xab\x31\x19\xa8\x6e\xc5\x1c\x33\xed\x30\x49\x3a\xea\x19\x86\xe7\x5e\xd5\x77\x22\xcf\xf8\x0c\x6b\x57\xb8\x4e\xb4\x3b\x35\xd4\x21\x34\x85\xc4\x88\x1e\x1e\x18\x69\x98\x50\x60\x55\x4e\x59\x5a\x78\x7a\xee\x15\xd1\x59\xae\x13\x61\xcc\x80\x7d\x30\x01\x75\x0b\xd3\x2a\xc0\x1a\x4d\x42\x08\x7b\x31\x78\xf1\xfc\xff\xc7\x1c\x4d\x80\x13\x06\x07\xc4\x3b\x39\xb6\x1f\xb1\xdf\x0b\x0f\x1a\x81\x65\x17\xa3\xb8\xdb\x4f\xc1\xe2\xfe\x2f\xde\xee\xad\x1c\x83\x8f\x68\x46\x81\x7d\x51\x5a\xf5\x71\x73\x6b\xa7\x00\xba\xf7\xf9\xee\xd1\xf6\xc2\xaa\x37\x9e\x81\x15\xbb\x0f\xad\x69\xf7\xeb\xfd\xad\x75\x06\x3e\x59\xea\xc5\x5e\xfe\xf8\xfc\xf2\xc7\x5e\xa5\x5c\x2e\x82\x78\x61\x61\x8b\x82\xc7\xb9\xba\x5b\xe1\xd2\x5e\x6c\xca\x8c\xc8\x9c\xca\xc0\x38\x2b\xc5\x13\xab\xd9\x4c\xcf\x8a\x8c\x53\x36\x9d\x50\x77\x32\xd7\x0a\x3c\xc8\x77\x3c\x97\x7c\x98\x11\x09\x02\xbc\xe7\x6b\x42\xfc\x06\x47\x0e\x99\x83\x29\x5b\x3e\xf4\xf9\xcc\x44\x5c\xc3\xd3\x7d\xba\x40\x9e\xc2\xf4\xf1\x0e\xce\xb8\xcc\x8d\xd3\x63\x1b\x3f\xbb\x02\xcf\xb3\x3b\xc0\x1f\x05\xd2\xd9\xb5\xa1\x50\x1d\x71\xbc\x93\xe2\xfe\xf8\x5e\xe7\xb7\x52\x8d\xfb\x6e\x21\xfa\xa4\x7a\x1d\x03\x0a\xd1\xf1\x57\xf0\x9f\xae\x77\xca\xa7\x16\x76\x80\xc3\xbd\x9f\x08\x0a\x4b\x15\xd1\x86\x79\x5f\x13\x4a\x77\xab\x3d\xad\xdd\xac\xd5\xd4\xfb\x5f\xc5\xfc\x0a\x0e\x49\xe4\x48\x59\x18\x5e\x38\x45\x8e\xbb\x51\x41\xd2\xd0\x43\x9b\xbd\xe1\x56\xcc\x3b\x58\x1b\xd0\xd2\xd8\x06\xcf\xe0\xbe\x6b\x35\x1d\xe7\xee\xe9\xc9\x5f\xe6\x79\xd1\x39\x93\x8e\x2e\x07\x51\x64\x57\x67\xa7\xd5\xb2\x55\x69\xe5\x33\x84\x89\xd3\x46\xbe\xfb\xd8\x9c\x15\x26\xb0\x37\x64\xfd\x2e\x34\xa8\x55\x86\xac\x0b\xf7\xdc\x07\xed\x2e\x6c\xf3\xae\x0d\x59\x9e\x07\xef\x45\xc8\xa7\x26\x42\x3e\x61\x31\xf1\x53\xda\xa9\x62\x2a\xba\x45\x41\xf1\xad\x4e\x05\xfe\xd1\x55\x5e\xac\xbf\x51\x55\x75\x6b\x18\x0d\x65\x8a\x42\x2c\x54\x72\xcc\x31\x82\xc0\x1f\xba\x0b\xde\x7b\xf1\x36\x0a\x9e\x58\x86\x43\x8d\x08\x90\x15\xbe\x1d\xee\x29\x1a\x09\xf0\x53\x7f\xed\x26\x4f\xd4\x5f\x69\xb9\xe6\xb5\xa6\x2c\x15\x49\xc6\x73\x27\x00\x4f\x24\xa9\xf3\x55\x11\xc1\x69\xc0\xe5\xbc\x13\x9d\xe7\xc2\xcc\x20\x86\x88\xe8\x79\xa5\x4b\x6f\x21\x30\x36\x2f\x12\x5b\xe4\xa2\x86\x3b\xe1\xd7\xc3\xa9\xdf\x3c\xcb\x58\x02\x21\x5e\xdb\x14\x70\x88\xfc\x06\x25\x4d\x2d\x4a\x3d\x95\x29\xd5\x91\x31\x1e\x3f\xc2\x55\xf0\x9e\x01\x02\xb4\x71\xac\x15\xd0\xcf\xdd\x0f\xd8\x93\xf2\xd5\x52\xc3\xfb\x6a\xcb\x85\xc1\xd7\x9f\xaf\x31\x85\x91\xce\x87\x32\x4d\x05\xd4\x21\x81\xfb\xe3\x24\xbe\x1e\x21\x29\x94\xd3\xc3\x47\x60\xe7\xee\x5e\x35\x6c\x75\x29\xb3\xda\x44\x3e\x94\xc5\x28\x3e\xd7\xe0\xd7\x12\x4b\x2f\x73\xfd\x4f\x4c\x75\x6c\xc1\xa5\xe0\xb3\x9a\x5a\x2c\x15\x04\x99\xce\xf0\xe5\x00\x0d\xff\x18\x1d\x78\x28\x18\x89\x00\x74\x1a\x17\x7a\x77\x74\x13\x62\xa2\x59\x61\xbc\x44\x11\x5b\xe3\xa2\x1e\x29\x30\xdc\xb5\x46\x30\xdc\x1e\x2b\x54\x26\x0c\x11\x69\x10\xb5\x44\x86\x81\xe0\x50\xf8\x00\x55\xfc\x14\xcd\x7c\x14\xf5\x98\xb0\x29\x9f\xcd\x00\x1f\x53\x8f\xf0\x4b\x00\xf8\x62\x27\x66\xc0\xde\x6a\x1b\x6a\x08\xa1\xc9\x0f\x83\x54\x13\x9e\x85\x88\xf6\x91\x1c\x4f\xf9\x2c\x80\xf5\x23\xa5\x77\x5f\xf0\x91\x6c\x3e\x15\x6b\x1a\x53\xfd\x46\x2a\xbd\x52\x7a\xac\x44\x6a\xf7\x98\x20\xf3\x6a\x64\x48\x68\x58\xa6\x36\x62\x5d\x6e\x8a\xdf\x05\xd8\xf4\x28\x02\x17\xd8\x18\x2c\xf1\xfd\x44\x1b\x42\x66\x91\x65\x65\x3c\x28\x63\x89\x07\xc1\xff\x0c\xa3\x01\x2c\xa0\x68\xac\x5e\xe0\x15\x29\x2e\x72\xcb\x97\xc3\x5b\xb8\x0d\x78\x4f\x0a\xb5\xf0\x36\x89\x7d\x74\xa0\xe0\x83\xa8\x8f\x4b\x13\xf5\x81\x5c\x4b\x1a\x68\xee\x2d\x30\xb4\x4a\x61\x21\x2a\x55\x83\x8c\xb0\x05\x2d\x0d\x06\x3b\xd2\xa9\x92\x84\xd0\x97\xdf\x8a\x34\xc0\x23\x0d\xd8\xa5\x1b\x64\x50\x2b\x73\x91\x71\x00\x72\xf2\xda\x8a\xfb\xac\x77\x5e\xb8\x8f\x3c\x1b\x0c\x9e\x61\x2e\xa7\xce\x99\xb1\x3c\xb7\x78\x1e\xdd\xef\x3b\x95\xff\xff\x2a\xe6\xd7\xba\xac\x67\xb1\x28\xff\xef\x8d\x03\x66\xb7\xd6\x81\x6e\x38\xd5\x4b\x09\xf1\x2e\xc8\xef\x13\x24\xba\xe5\xbc\xb7\x91\xe2\xb3\xa4\x5c\x0b\x90\xe4\x15\x15\x3c\xca\x9c\x8b\x29\x20\x2f\x4b\x4c\xbb\x28\x8c\x08\x05\x7f\x45\x4a\xeb\x36\x0c\x30\xea\x71\x72\x0f\xd2\xe5\xa1\xb0\xf7\x42\x28\xf6\x1c\xc6\xfa\xfc\x87\x1f\x7e\xa8\x22\x85\x3d\xff\xfe\xdb\x6f\x07\xec\x4c\xe6\x60\x73\x94\x64\x6a\xa6\xa5\x07\x4a\xe1\x1d\x9c\x7c\x34\x42\x5a\x09\xb9\x41\x8e\xcc\x61\x1a\x0b\x09\x1c\x53\x39\x9e\x58\xca\xa2\x72\x9c\x29\x93\x09\x11\x17\xac\xe5\x83\x57\xc5\x3b\x4d\xa1\xaf\x72\x33\xa7\x50\x07\x28\x93\xb7\x82\x8d\x0c\x14\xc2\x45\xc2\x8b\xd7\xdd\x38\x0e\x46\x15\x8f\xb1\xb3\x72\x4d\x4c\xa3\xc3\x72\xdd\x1a\x69\x7b\xe6\xb7\x67\x7e\x7b\xe6\xf7\x47\x64\x7e\x98\xf3\xb9\x9c\xe1\xf9\x2a\x34\x50\xa3\x96\x60\x1d\x42\xaa\xe8\x22\xf2\x74\x5e\x28\x4f\x20\xf9\xaa\x12\x0c\xaa\x5b\xa9\x05\x9e\x8f\x5b\x31\x16\xf3\x71\x31\x15\x94\x75\x87\xc6\x49\x9b\xcf\xc1\x3c\x49\x25\x5c\x75\x72\x2b\x72\x26\xa7\x7c\x2c\x9e\x19\x76\xfa\x06\x54\x46\x48\x6c\x93\xa3\xa0\x3b\xe0\x1d\xd4\x77\x32\x15\xe9\x80\x7d\x24\x0f\x5f\x49\x9b\x0c\xfb\x8f\xc3\x8f\x27\xef\x7f\x7d\x7b\xf2\xe6\xfc\x08\x68\xbe\x78\x98\x71\x95\x8a\x34\x62\xcb\x61\x61\x9e\x55\x1c\x86\x44\x00\xbc\xdb\x30\xaa\x2c\xef\xd4\xf7\x2c\x54\x2a\x2e\x6d\x55\x74\x23\xa5\x9a\x15\xd6\x5b\x74\x3d\x5d\x2a\x54\x32\xe1\x6a\x2c\x28\x76\x22\x1e\x96\x99\x2b\xcb\x1f\x3c\x2b\x10\x26\xe1\x33\xcf\xdc\x39\x4b\x75\xe1\x3e\xfe\x1f\xff\xd1\x63\x52\xbc\x64\xff\x11\xbd\x38\x60\xe7\xd4\x36\x9a\x2f\x52\x32\x71\x27\x72\xe8\x8c\x66\xdb\x63\xb9\x18\xf3\x3c\x05\xba\xa3\x47\x95\x93\x1b\x26\x08\x69\xc6\xc6\x9d\x5f\xa5\x6d\xa3\x15\xb8\xdb\xe5\xb4\xdc\xdc\x9a\x63\xa9\xdc\x1d\xec\x3b\xe5\xbe\x1f\x1d\x43\xa4\x2a\xa2\x9f\xe8\xe9\x94\xab\xb4\xcf\xe9\x20\xf4\xc3\x2e\x1c\x7f\x45\x38\x8d\x7d\x1e\x5a\x49\xd5\xe7\x7d\x33\x11\x59\xb6\x33\xbc\x1f\xfa\x54\xcb\x99\x3d\x0f\x47\x94\xc1\x37\x41\x99\x65\xe2\x41\x24\x85\x97\xc6\xe0\x02\xc1\x38\x1b\x4f\xf1\xf9\xdb\xeb\xf7\xff\x7d\xf9\xee\xe2\xed\xf5\xfe\x30\xef\x0f\xf3\x0e\x0f\xb3\x50\x77\x1d\x62\xbf\x9b\x83\x32\xc0\x05\x1e\x44\x9a\x08\x60\x60\x71\x0d\x77\x29\x5e\x9c\xab\xbb\x8f\x3c\x5f\x3f\x95\x48\x55\xea\xcf\x6c\x92\x4a\x24\xd4\xdd\xab\x5c\x4f\x3b\x2c\x20\xb9\x32\x2b\xd1\x2e\xcd\x8b\xba\xb8\x9a\x21\x82\x8e\x44\x83\x88\x7e\xa0\xc1\x6b\x1a\x74\x9e\xd3\x5f\x2f\xce\xce\xdf\x5e\x5f\xbc\xba\x38\x7f\x3f\x60\x27\x59\xc6\xa4\x82\xc0\xb8\xaa\xe8\x9b\x0b\x82\x39\xe0\x50\x85\x49\xdc\xb9\x21\xdc\x4f\x44\xed\xd3\x20\xce\x3a\x39\x11\xb4\x9c\x5f\xdc\x73\x14\x73\xe9\xca\x48\x55\xd6\xbd\xa3\x09\xf6\x4a\x39\x9c\x71\x63\x74\x22\x4b\xfd\x13\xbd\xcb\xc6\x96\x76\xba\x2c\x63\x96\xdf\x82\x20\x9d\x88\x54\x40\x89\x74\x8a\x39\xf4\x73\xc5\x5a\x0c\xe7\xea\x2e\x50\x86\x02\x2f\x15\x2a\x01\xcd\x7d\x7c\xf2\xf3\xe7\x4e\x01\x99\x16\x96\xdc\x33\x20\xec\x6d\x31\x9d\x11\xfd\xa7\xd2\xdc\x6b\x0a\xb8\x25\x56\xf1\x31\xf4\x62\x96\x60\x8a\x83\xf1\x34\xcb\xf4\x3d\x9b\xc8\xb1\xa3\x86\x99\xb8\x13\x99\xf7\x96\x45\xca\xbd\xd5\xc1\x7c\xaa\x73\x08\xd3\xcc\x65\x5a\x39\x1e\xf8\x19\xa9\x98\x93\xa9\x33\xcd\x51\x21\x43\x90\x6e\x83\xea\xec\x99\x98\x65\x7a\x3e\xa5\x82\x5f\x29\xbb\xb2\xdc\x8a\x51\x91\x5d\x89\xc6\xd4\x91\x25\x9e\x7d\xf7\xa1\xcb\x22\xcb\x2e\x75\x26\x93\x36\x07\xda\x05\xac\xdf\xac\xc8\x32\x36\x83\xb6\x03\xf6\x4e\x81\xf2\x70\x92\xdd\xf3\xb9\xe9\xb1\xb7\x8e\x49\xf4\xd8\xc5\xe8\xad\xb6\x97\x5e\x81\x8b\x2d\x02\xd8\xd0\xb1\xdb\x97\x14\x0b\x61\xf9\xb8\xa2\xd9\x41\xca\x70\xdc\x01\x6a\xe5\xf7\xd2\x34\x9e\xbd\x47\x6f\xe4\x57\xd0\x93\x63\x0d\xf8\x77\xd7\x65\xcb\xe4\x48\x24\xf3\xa4\x15\xf4\xee\x24\x89\xcc\x12\xe0\x67\x29\x0f\x00\x41\xa3\x50\xe8\x08\xdc\x32\xa9\x18\x3a\x18\x8d\xa0\xb4\x01\x3a\x0b\xe1\x5b\x48\x4d\x4c\xfb\x25\xec\x0e\x78\x11\xa6\xb0\x30\xb7\x3b\xa1\x84\x31\x97\xb9\x1e\xb6\xcd\xef\x52\xe4\x52\xa7\x32\x71\xf2\xd2\xd0\x27\x64\x87\x31\x63\x1f\x60\xf6\xa2\xdf\x4a\x12\x09\x94\xcf\xcb\x5d\x82\xde\x1f\x71\x99\x35\xce\x6d\xdd\x4d\xf6\x37\xc6\x1c\xcf\x34\xfe\x4f\x3f\x2c\xe1\x57\x61\x88\x7d\xf8\xea\x1a\x39\x2f\x65\xfd\x67\x58\x97\xcd\xf5\xec\x72\x95\x4a\x83\x06\x58\x64\xce\xde\x5e\xfd\xfa\xfa\xe4\xc7\xf3\xd7\x14\x61\x1e\x91\x03\xd2\x09\x91\x1f\x4d\xf8\x9d\xe3\x48\x04\x2d\x0f\xc6\x9b\xc3\xf0\xee\x51\x37\x1a\xdd\x7c\xac\x1d\xef\xea\x92\xb0\x06\xed\xdc\x29\x15\x0f\x33\x6d\x44\x19\xde\x12\xf1\xd6\x73\xf7\x08\x03\xbf\xc0\xca\x09\xb8\x35\x63\x79\xe7\xf1\x38\xf0\x06\x94\x61\xe2\x0d\x90\x07\xae\x9d\x12\xd6\x6d\xa8\xc7\x79\x81\x1b\x15\x41\x2e\x39\x01\xde\xf4\xd8\xb0\x40\xb3\x6c\x2e\xa7\x3c\x97\x88\x0a\xe4\x3b\xe3\x19\x2a\x09\xb8\xda\xf3\xfa\x90\xce\xde\x9d\x5f\xb1\xb7\xef\xae\x1d\x9b\xbb\x13\x1e\x2b\x16\x9e\xc3\xb4\x86\xc2\xbd\x81\x13\x4d\x07\xec\x44\xcd\xf1\x61\xb0\x41\x81\x0d\x0b\x42\xdc\xa8\xb4\xa2\x27\xed\x37\x07\xcf\x07\xf0\x7f\x37\x07\x6e\x9e\x39\xd8\x9b\x94\x71\x94\x3e\x9e\x81\xbf\x17\x3c\x49\x84\x31\xd2\x09\xce\x61\x3d\x69\xf6\x9f\x9a\xef\x86\x4b\x7b\xa9\x73\xbb\x42\xfc\x73\xd3\xef\x4f\xf9\xcc\xc9\x7e\xa6\xb4\x51\x50\x91\xa5\xb2\x97\x32\x53\x63\x96\x6b\xab\x13\x9d\xf9\x8e\xff\xde\xd2\xb1\x9f\xdb\x34\x8e\xb1\x5e\x25\x7e\x36\x7f\x78\x23\x39\x34\x17\x3c\x95\x8f\xa5\x86\x86\x0a\x70\x86\xce\x9a\xc9\x22\x16\x10\x80\xbd\xf7\x6f\xf8\x70\x31\xf3\x47\xa2\x95\x65\xf8\x61\x1b\xa0\xcb\x74\x56\x58\xc1\x7c\x6c\x45\x14\xed\xe1\x9d\x04\xad\x5a\xd1\x06\x92\x41\x19\xc4\x73\x8c\x9c\xda\x29\x8b\x6e\x10\xfd\x30\xe0\x48\xa7\xdc\x60\x31\xfc\x5c\x08\xb9\x19\x24\xb7\x06\xd0\xac\x22\x97\x76\xee\xce\x87\x78\x68\x2b\x66\x77\x45\x2d\x23\xf7\x07\x94\x6e\xf5\x42\x85\xb7\x27\xae\xbd\x14\x28\xdd\x1d\xfb\x91\xc0\x9c\xc5\x83\x3d\x5e\x4b\x59\xf7\xeb\x29\xfa\xee\x4c\x95\xcb\xb6\xd0\xeb\x66\xe0\x87\x95\x35\xaa\x2f\xa1\x4d\x65\x5b\x38\xcf\x2f\xc1\x54\x11\x1f\x22\xbf\x6c\x4e\x7e\x07\x1d\x88\xb3\x61\x31\x1a\x89\x1c\xc2\xdb\xa0\xcf\x05\x05\xd2\xad\x31\xe2\x45\x5d\x54\x2d\x48\x46\xd8\x1e\xdc\x76\x8a\xfc\x5c\xf2\x3a\x5c\x7d\x8e\x42\x31\xf9\xa2\xa4\x62\xe7\xef\x5e\x95\xe8\x50\x4e\xcd\xe0\x99\x69\x02\x25\x5a\x06\xbb\xe6\xbe\xf5\x4e\xb5\x06\x62\xfd\x12\x59\x6b\x16\x66\x13\x02\x9a\x33\x4d\xa9\x67\x38\xfc\x64\xc2\x95\x12\x19\xe3\x23\xeb\x44\x12\x27\x87\x18\x36\x14\x42\x31\x3d\x13\x5e\xa1\x0c\x46\x6f\x6b\x79\x32\x21\xd5\x96\xa6\x6f\x98\xcd\x8b\xb8\x47\x63\x73\xc1\xa7\x3e\x8d\x64\xca\x25\x76\xc5\x78\x92\x6b\x63\x4a\x0d\x18\x3b\xf3\x48\x5d\x06\xdd\x50\x7e\x9a\x0c\xfd\x85\x60\xc3\xce\x0b\xd1\x2b\xbf\x46\xc3\xaa\x98\xdd\x41\xf4\xec\x05\x14\x65\xe6\xa6\x9c\x91\xb7\x30\x37\xd6\x87\xe4\xe2\x17\xc9\x10\xe3\xfa\x0b\x4e\x43\x45\x23\x35\x34\x54\x95\x02\xe3\x9e\x59\x83\xa9\xbf\x65\x87\xd4\x55\x2a\x0d\xc9\x2e\xa6\xc7\xb8\x97\x1b\x70\xa1\xfd\x48\x61\xa9\x53\x5f\x3f\x07\x7a\xa7\x9f\xa2\xee\x62\xdb\x41\x90\xa1\xcb\xa3\x37\xca\x50\x97\x82\xe3\xd2\xab\x48\x18\x94\xb5\xe7\xf3\x4a\x17\x0e\x66\x64\xe2\x73\xaa\x3e\x7a\xba\x9a\xcf\x61\xe7\x63\x68\x45\x3e\x95\x0a\xc8\x29\xa1\x60\x5d\x76\x05\x73\xbf\x04\xdf\x70\x58\x29\xef\xc9\xb5\x3a\xfa\x25\x36\xb1\x46\x9f\x62\x84\xc9\x15\xb8\xea\x7d\x2e\xad\x15\xb0\xc8\x1e\x17\x3e\xf8\x24\xe3\x3e\x4a\xbc\xca\x01\xf3\xa8\x5d\xd1\xbb\x52\x59\x01\x46\x5e\x04\x99\x1c\xe6\x52\x8c\xd8\x48\x3a\xb1\x15\x01\xb6\x7a\xcc\x14\xc9\x84\xac\x3e\xdc\x18\x91\xc3\x70\x1c\xa3\x2e\x72\xe1\x87\x35\x60\xbf\xd0\xb8\x6c\x5e\x28\x2c\x6f\x4c\x78\x98\x50\x05\x59\x8e\xd8\x18\xfc\xef\x04\x58\xff\xed\xf3\x3f\x7f\x0f\x49\xa1\x06\x6d\x55\x56\x5b\x9e\x85\x39\x66\x42\x8d\xdd\x4a\xe1\x6d\x81\x08\xc8\xa0\xdf\x86\x05\xc8\xe4\x54\x5a\x1c\xf8\x8b\xaf\x6f\x87\x55\x85\xfc\x38\x15\x77\xc7\xd1\xf2\xf5\x33\x3d\x7e\x8c\xfe\xd0\xb0\xe9\x2b\xcd\x0a\x2a\x45\x9b\xd3\x44\xdf\x63\xbc\x47\xc3\x6e\x12\x45\x1a\x8a\x32\xf0\x62\x80\xb5\xcd\x61\x9a\x3e\x45\xb6\x12\x3a\xd2\x78\xfe\x16\x72\xe2\x2a\x94\xc1\x16\x26\x7c\x52\x2b\x36\xd4\x76\xe2\xb6\xd5\xdd\x1d\xb8\x9b\xb4\x9b\x03\xf6\x8a\x67\xd9\x90\x27\xb7\xd7\xfa\xb5\x1e\x9b\x77\xea\x1c\x5c\xca\x95\xb1\x80\x39\x2e\x99\x14\xea\xb6\xa6\x19\xeb\x31\xd3\x85\x9d\x39\x85\x65\xb4\x74\xc2\x23\x02\xc8\x47\x22\xe5\xe3\x15\xca\x5e\xc4\x83\x0c\xc6\x3f\x4e\xa0\x77\x78\x44\xe2\xfe\x4d\xbc\xfb\x5f\x3f\xff\x16\x13\x8c\xc1\x20\xff\xa7\xe7\x2c\x73\xa2\x68\x0f\xef\x94\xa0\x62\x98\x66\xca\x33\xaa\xbf\x5d\x9e\x12\xb7\xd0\x8f\x3a\x15\xb6\xed\x00\x74\x66\xc7\xd7\xd7\xff\x0d\xbc\x58\x5a\x23\xb2\x51\x0f\xb1\x75\x49\x2a\x34\xec\x19\x90\xb2\x67\x74\x41\x1d\x27\x78\x0c\x13\xc5\xa8\x81\x33\xe1\x84\xf0\x36\x31\xb5\xd2\xae\x9e\x00\x33\xcc\x74\x72\xcb\x52\x7a\x88\x03\x03\x7f\x13\x5d\xf9\x8a\x21\x5a\x52\xf9\x8e\x61\x54\xff\x76\xa7\x3a\xde\xc7\x68\xe8\xeb\x5b\xf8\x71\x56\x40\xd2\x1f\xa5\x5f\xdd\x45\x28\xb5\x6d\xda\x95\x4e\x43\xd8\x94\x87\x1b\x5e\x4d\xc8\x3f\xad\xd2\x1c\x01\xee\xae\xbf\x9e\x30\xa3\xc7\x2f\x27\x45\x60\x9c\xc9\x15\x60\x99\x61\xb9\xe8\x05\x96\x52\x98\xd6\x1c\x04\x0a\x15\xcc\x25\x21\xce\x67\x41\x4c\x7c\x66\x82\xa1\x23\xb8\x24\x8d\x6b\x8d\x4c\x3a\x04\x6d\x05\x4d\x20\x5d\x14\x80\xc1\xe8\xba\x09\x69\x59\x2b\x44\xe3\xa2\xe2\x20\x58\x70\x0f\xc0\x9f\xc3\xaa\x4d\x06\x7d\x0a\x2b\x52\x59\x3a\x44\x60\x60\xbb\x15\x19\x11\x8e\x1e\x78\xc9\xc6\x91\x01\x30\xb4\x4b\xc3\x00\x36\x73\xc0\xc4\x60\x3c\x60\xff\x73\x73\xe0\xe6\x37\x4e\x72\xa7\x68\x4d\xe6\x33\x91\xbb\xd3\xf1\xf2\xee\xc5\xe0\xf9\xe0\x07\x84\xdd\x44\x47\xf7\xa4\x18\xba\x26\x63\xad\xc7\x99\xf8\x35\xb2\x78\x2f\xbe\xf4\xf7\x9d\xf9\x3e\x8d\xfc\x4d\xfc\x38\x6f\x2f\xf1\xe9\xb8\x95\x6b\xe7\xed\xa2\x34\x6f\x45\x02\xcf\xba\xa1\x77\xdf\x7f\xbb\xd1\xe1\x00\x13\x51\x4b\xe2\x54\xd9\x2a\xc6\x39\xe6\xc1\x2e\x09\xb6\x40\x74\x19\xa2\xe6\x53\x52\xf5\x96\xf3\x93\x2c\x1a\xd8\x56\xd6\x2b\x5f\x1c\x6e\xc3\x79\x2a\xa6\x43\x91\x7b\x13\x6d\x64\xa1\x25\xd3\xe4\x4c\xa7\xcf\x0c\xbb\xb8\xf4\xf6\x48\x1f\x61\x19\x87\x76\xca\x14\x5f\x56\xd0\x57\x8f\x3d\x27\x98\x63\xf6\xe0\xff\xf1\xfd\x77\xdf\x7d\xf3\xfd\x16\x62\x23\x27\xda\xd8\x8b\xcb\x56\xd9\x80\x5b\x44\x8a\xbf\xb8\x2c\xab\xf3\x4f\x44\x59\x41\x9e\xa6\xd9\x59\x16\x71\x9d\x3d\x72\x0d\x5d\x17\x8b\x91\x90\x9b\xae\xa2\xeb\xe8\x67\x6d\xec\x5b\x3a\x4f\x55\x6f\x58\xd9\xef\xd4\x31\x00\x56\x39\x90\x03\xf6\x46\x1b\x1b\x0b\xfd\x54\xb6\x4c\x09\x27\xf2\x4d\xe4\xfa\x97\x68\x71\x8f\x56\x38\x36\xda\x96\x41\xb1\x8b\x93\xb7\x27\xbf\x5e\x7d\x3c\x85\xf0\x12\x0a\xf9\x04\xa7\x45\x1c\x09\xac\x53\xf2\x77\xb8\x4f\xa5\xd1\x85\x6a\x71\x78\x0c\x18\x78\x54\x7c\xe6\x21\x6e\x94\x3b\x2c\x14\xf3\x02\xf1\x2b\xbe\x28\xc0\xdc\x9b\x53\xbb\xbb\x45\x83\x89\xba\x45\x24\xa1\x26\x04\xf6\x95\x47\x11\xd2\x1f\xce\x2e\x7b\xec\xfa\xf4\x12\xbc\x99\x57\xa7\xd7\x97\x55\x79\xfa\xe6\xe0\xfa\xf4\xb2\x03\x1c\xf2\x5a\x74\x0c\xbc\xbf\xab\x09\x19\x34\x23\xe0\x32\xb7\xc2\xe4\x70\x30\xf0\x73\xac\xa8\x0c\x18\x14\x14\xd0\xe8\xe2\x95\xd6\x69\x46\xee\x24\x1b\x5f\x33\x3b\x2a\xad\x00\x12\x83\xf2\x84\x7c\xba\x70\x86\x4b\x97\x88\x6b\x25\x0d\xab\x0e\xe7\x17\x2e\xed\xca\xd8\x76\x0a\xe1\x69\xf3\xf3\x0b\xcb\x65\x66\x02\x5c\xf6\x42\xa5\xe1\x0d\x4c\x8d\xd5\x81\xbe\xa7\x31\x2c\xd1\x7a\x45\x5b\xe0\x5a\x7d\x74\xe5\x4b\x5b\x1c\xe0\x75\x39\x92\xba\x60\x88\x6b\xbc\xc6\x00\xe9\x8d\x2d\x8e\x8e\xf6\x79\xf3\xe3\xfd\xbe\x76\x06\xda\x4f\x39\xb5\x26\x44\x0a\xfa\x23\x1c\x74\xde\xc0\xa8\x1b\x0f\x1e\x19\xda\x4e\xda\x58\xc6\xb5\x9c\x8a\xaa\xc5\x2a\x32\xf2\x72\x83\xc6\x80\xc3\x5c\xf4\x8f\xa8\xb7\xad\xa4\xb0\xbb\xaf\x6e\xbe\x98\xd7\x8b\xa7\xb6\x7d\x3d\xcb\x17\x70\x49\xa3\x13\xdc\xba\xaa\x0d\xe2\x8f\x78\x90\xf6\x54\xa7\x5d\x62\x98\x43\x7f\xad\x65\x37\x62\x95\xe6\xe2\xcc\x2b\x1a\xc8\xda\xd8\x33\x14\x8c\x5f\x1e\x1f\x23\xe7\x0d\x5d\xfe\x2a\x53\x2c\xeb\xf0\xac\x2b\x5f\x08\x03\x6f\x89\x50\x7d\x90\xd6\x1b\x93\x82\x1f\x17\x0e\x40\x6c\xe8\xa9\xc7\x02\x3c\x9e\x51\xbb\xc3\x63\x26\x8f\x38\xa8\x95\x31\xee\xe0\x88\xfa\x81\x76\x2f\x9b\x80\x21\xa6\x3e\xaa\x76\x83\x35\x5c\x5a\x97\xc7\xb4\x26\x7c\x1f\x82\x7d\xf7\x88\x61\xc3\x47\xed\xe2\x92\xa2\x0c\x72\xbc\x22\xbb\x01\x1a\x7c\xd2\xf3\xb3\x3e\x9d\x9b\xe5\xe2\x4e\xea\xc2\x50\xf8\x75\xd3\xb0\xd8\xd3\xa1\x77\xbf\xd4\x38\x60\x3b\xb1\xa3\xd6\x48\xe9\x3c\x2b\x5c\x9f\x79\x6c\x72\xd6\xef\x27\xf3\x45\x87\x8f\x13\xeb\xe7\xc2\x7a\x3e\xb6\x06\xca\xc1\x7a\x67\xfd\xd1\x1f\x5e\x7b\x63\x5a\x2b\x68\x54\xda\x95\x68\x25\x29\xc9\x2a\x01\x37\xbd\xc8\x73\x08\xab\x8b\x6a\x99\x54\x22\x04\x56\xe5\xd2\xc4\xe1\x1e\xf3\xe8\x2f\x38\xbe\xa7\x60\xd2\xab\x86\x9b\x56\xfe\xea\x54\x56\xed\xd3\x30\xb2\xf5\x02\x3f\x57\x58\x67\xd0\x22\xb3\xe8\x7c\xa4\xa3\xf0\xe8\xe8\xcb\xb5\xc6\xda\xba\x6c\x17\xd8\x62\x81\xfe\x3c\x23\x73\x5a\xe7\x65\x71\x84\xb6\xaa\x4a\xad\x92\x94\xeb\xdf\x5b\x20\xd5\x01\xe7\x7f\x93\x28\xcd\x9a\x7e\xb7\x9e\x72\x5e\xb3\xed\x6c\x1e\x5f\xf8\x18\xef\x0f\x5e\xa9\x55\x89\x7c\x90\x1e\xdc\x18\x95\x30\xe1\x86\xcd\xb8\x81\x3c\x1d\x00\xc9\xa2\x18\x2a\x0c\x85\xea\xee\xd2\xa9\x5c\xe6\xf6\x73\xaf\x82\x05\xc8\xca\xa9\x30\x0d\x03\x82\xb0\x87\xe0\x84\xef\x79\x02\x94\xcd\xa9\xc2\x19\x51\xd2\xb2\xa3\x54\xf0\x34\xb6\xd4\x80\xb1\x02\x16\xda\x13\x58\xea\x12\x82\xc0\x9a\x20\x3a\x12\x9e\x25\x94\x73\x0e\x62\x41\xad\xc7\x01\xfb\x11\x0e\xa3\x36\x22\xfe\x0e\xcf\x05\x33\x05\xe2\x94\x59\xcd\xc6\x3c\x1f\xba\x3b\x5d\x16\x89\x27\x0b\x20\xe6\x15\x80\x21\x7f\x2c\x2c\x4b\xf8\x6c\x26\x52\xc7\xea\xbf\x63\xc3\x39\xfb\xe9\x74\x0b\x96\x24\xf3\xa8\x6b\xe5\x49\xfc\x0e\x6e\x53\x17\x96\x75\xc6\xc5\x54\xab\x73\x0a\xc7\x5b\xee\x4c\xa8\x34\x2b\x19\x56\x53\x39\x2f\xb2\x17\xe3\x2b\x21\xd2\xaf\x8d\x55\x75\x34\x16\xaf\xb0\x6f\x5e\x96\x66\x49\x4f\x2f\xc7\xf2\x4e\x2c\x0e\x61\x47\x65\xe7\xce\xf4\xbd\xba\xe7\x79\x7a\x72\x79\xd1\x01\xc0\x27\x2a\xdf\x9a\xd2\x8b\xec\xe4\xf2\x02\x56\x14\x4d\x6f\xd4\x07\x54\xbd\x6c\x46\xf6\x59\x0d\x78\x93\x96\x63\xfa\x34\x90\x37\x1e\x30\xb1\x44\xc5\x8c\x96\x05\x3d\x89\xe0\xca\xdc\xa5\xc3\x72\xe1\x8b\x50\xc5\x9f\xfa\xf9\xf7\x66\x3b\x1a\x75\xb4\xf4\x8e\x34\xb5\x8e\x9d\x2b\x35\x1c\x3a\x44\xa4\x28\xe3\x80\x22\x4c\x51\x1f\xf2\x08\x99\x38\x2d\x17\x67\x16\x32\xe4\xdb\x2b\xdf\xba\x6e\xda\x0b\x96\x52\xec\x66\xfa\x92\x95\x58\xb9\x15\x48\x86\x99\x4e\x5f\x32\xad\xb2\x39\x03\x8e\x89\x45\x30\x7b\x0c\x00\x3c\x4c\x0f\xa3\xf5\xb9\x4a\x59\x89\x78\x86\x24\x9a\xca\xe3\x6e\x42\xd5\x10\xf1\xfa\x95\x1b\x45\x40\xf8\xad\xeb\xdc\x8f\x81\x04\x21\xa4\xff\x4c\xf4\xaa\x2e\x8e\x25\x18\x20\xcd\xfe\x63\xba\x55\x11\x44\x49\xc5\x6d\xfc\x47\x80\xfa\x98\xb5\x07\xb8\x95\x47\x07\x22\x91\xa4\x61\x34\x32\x02\x97\x00\xfc\x88\x18\xb4\xcf\x47\xbd\x0d\x85\x47\x65\x21\x17\x03\x49\x62\x7c\x68\x74\x56\x38\x8d\x34\x6f\x46\xa3\x28\x3d\x12\x85\x1d\xf5\xff\xc4\x84\x4a\x74\xea\x13\x86\x31\xde\xd1\x91\x8f\x12\x00\x22\x1e\x49\xa8\x22\x50\xc3\xb3\x58\x17\x5f\xef\xd5\xea\x4b\x55\x5e\xa5\x80\xaf\x5a\x17\xe4\xe9\x4e\x85\x48\x6c\x8c\x6c\x32\x01\x6b\x0e\x70\x53\x0f\xf1\xc7\x41\x32\x2b\x7a\xd4\x60\x30\x15\x53\x9d\xcf\x7b\xa1\x91\x7b\x58\x79\x8b\x5a\x60\x32\x77\x29\xc7\x3d\xea\x46\xbe\x8f\xe7\x5e\xbf\x93\x1b\x51\xd4\x15\xe8\x4a\x4b\xda\x57\x5d\xd6\x74\x05\x23\xfa\xb9\xc0\x51\x07\x81\x0d\xb1\x92\x15\xee\x91\x8a\xf6\x48\x45\xcd\x32\x4b\xba\x78\x58\x7e\x3f\x52\xcb\xf9\x74\x66\xe7\x67\x32\xef\x74\xc1\x22\x31\x94\x2b\x0a\xcb\x0c\x31\x53\x54\x7f\x16\x3d\xd9\xb5\x47\x3b\xbb\x42\x53\x91\xca\xa2\x2d\x41\x1e\x82\x27\x2c\xd5\xca\x35\x56\xe7\x4e\xf1\xc3\xb7\x42\x40\x2d\x4f\x6e\xf1\x1c\x47\xf1\x5f\xd7\x91\xa4\x2b\x0d\xbb\x39\xb8\x39\xf0\x31\x5d\x82\xab\x70\x03\x7d\xd0\x72\x14\x07\x86\x9d\x47\xf7\xcf\xaf\x14\x41\x57\x1c\x52\xc3\x23\xc7\xb1\xde\x00\xd9\x5d\xdb\x88\x44\x13\x39\xa6\x75\xfd\x0a\x3e\x90\xca\x35\x4c\xef\xbf\x89\xd7\x8e\x35\xb4\xd9\x00\x20\xcc\x9a\x63\x94\xa1\x1e\xb1\x4c\x27\x10\xe8\x8d\x4b\x18\x12\x91\xd0\xfa\x28\x0d\xf3\x27\x29\xe8\x1b\x21\xb4\x09\x98\x10\xdc\x99\xcc\x68\x8f\x04\x04\x19\x7e\x3a\x67\xc8\x78\xc2\xaa\x5d\x43\x8a\xf0\x83\x9c\x16\x53\x56\xf8\x18\xe4\x4a\x9b\xf2\x43\xf7\x3e\x1e\x1a\xf2\x8a\xa5\x82\x97\xaa\xc4\xce\x3d\xb9\xf2\x93\x8d\x52\x4d\x21\xe9\xd1\xd3\x15\x53\x00\xf7\xa7\xaf\x10\x4f\xa5\x1a\x95\x91\x15\x21\x60\x12\xd5\x0f\x87\x92\x59\xf5\x6c\xf8\x5c\xe7\x30\xf1\x42\x11\xde\xc0\xc2\x4e\x37\x6f\x74\x61\x44\xde\x1f\x17\x32\x6d\xdb\xe2\xb5\x9d\x08\x03\x2f\x38\x0c\xfe\x56\x70\x65\xa5\x9d\xaf\xc3\x8d\xbd\x3e\x7f\x82\x41\x53\x4b\x89\x44\xad\x1d\xb9\x49\x8b\x59\x46\xca\x67\x4a\xa1\x86\xc6\xeb\xfe\x51\x20\x56\x8b\xf6\x22\x67\x1d\x74\x97\x89\x36\x76\xa5\x39\x50\x40\xa8\x51\x29\x63\x42\xb1\x27\x32\x69\x74\xb5\xc5\xce\x56\x7c\xe1\xe2\x72\xa1\xef\x01\x7b\x43\xa0\x69\x43\xc1\x32\xad\x67\x40\x77\x0e\x5f\x7c\xfd\x03\xe6\xc7\x1e\xff\xe9\xc8\x31\x3e\x75\xdb\xc7\x9b\x76\xf8\xe2\xfb\x3f\x0f\xbe\xfe\xee\x5b\x78\xf6\xe2\xfb\x23\x88\xa3\x89\x9e\x43\x62\x50\x02\x3e\xf5\xc3\xaf\xbf\xfe\x96\x3a\xf9\xfa\xdb\xa3\x01\xbb\xb8\xbc\xfb\xbe\xbc\x6f\x90\x98\xe3\xb8\x75\x81\xa2\xec\xa8\xc8\x62\xd1\xce\x5d\x30\x77\xd2\x67\x19\xb7\x8e\x39\x9a\x01\x3b\xc9\x8c\xee\xb1\x44\xe4\x20\x4d\x97\xe7\xb3\x2c\xcd\x6a\x88\x47\xbb\x67\xfd\x59\xae\x1f\xe6\xbd\x20\x1e\xc0\xd7\xc1\xe0\xd9\x1d\x37\x5b\xa7\xe2\x6d\xfb\xbe\x95\x62\xd0\x5b\xc7\xf2\xdd\x4e\x87\x02\x6c\xe5\x12\x83\x00\x42\x02\x02\x44\x99\x03\xc8\x04\x1a\xa2\xe3\x44\x52\x5c\x42\xb0\x7a\xa8\x75\xaa\xdd\x23\x0e\xe7\x2a\xed\xd8\x23\x17\x59\xed\xab\x23\x20\x9a\x92\xd7\xd6\x1b\x6c\x4c\x6b\xea\xb9\xe1\x1b\x9b\xdc\xe0\xd6\x68\xcf\xb8\x51\xcb\xdd\x0d\x96\x3b\x08\xfa\x6a\xb3\x3a\x74\x33\xd7\x75\xb8\xb5\x95\x1b\x0b\x62\xc4\x61\x0d\x8f\xfe\x0a\x23\xdc\x20\x2c\xd0\x1d\xa7\xa3\x58\x0a\x8e\x0c\xff\xfe\x2c\xa1\x3a\x25\x47\x10\x91\x35\xa3\x09\x7b\x4a\xbd\x0e\x5c\xc0\x8a\x91\xcf\x16\x8d\x8d\x5b\x30\x33\xae\x11\xa6\x47\x24\x69\x16\x47\xeb\x85\x65\xec\x12\xb2\xe7\x16\xe6\xfa\xf4\x72\x2b\x8e\x4f\x7f\xc2\xae\x8a\xa1\x11\xab\x0f\x22\x36\xc3\xa3\x08\x05\x26\x80\x35\x23\xc3\xf0\xc5\x03\xb9\xa3\x4c\x53\xad\x20\x07\xd2\x43\x33\x20\x9f\x0e\xc8\x64\xf4\x28\x4a\x26\x47\x9f\xc6\x29\xcf\xad\x30\x92\x43\x5d\xbf\xb4\x48\xa0\xd5\x49\xe8\xff\x81\x5d\x62\x67\xaf\x74\xce\xc4\x03\x9f\xce\x32\xd1\x43\x5b\xf1\xcb\x1b\xc5\xd8\xff\x71\xff\xc3\xca\x17\x5e\xb2\xff\xf9\x3f\x37\x07\x72\x76\x73\xf0\x92\xdd\x1c\xbc\x78\x3e\x70\xff\x3f\x78\x71\x73\xf0\xef\x1e\x5b\x78\xf0\xf5\xe0\xeb\x9b\x83\x7f\xff\xbd\x87\x7d\xc0\x87\x5e\xc2\x42\xba\x3e\xdc\x79\xc7\xc6\x1c\x43\xdb\xdd\xac\xdc\x0f\x7f\xfa\xfe\x87\xef\xb0\xb7\xb2\xc9\xb0\xda\xe4\x9b\xe7\x7f\xfe\xf7\xdf\x5d\xaf\xff\x46\x3c\x61\x54\x9d\xc0\x7d\x5f\x5f\x06\xa2\x96\x77\x52\xdc\x03\x06\xc7\x4b\x1c\x0c\x7f\xc9\xfe\x87\x85\xe1\xbf\x74\xdf\xec\xb1\x30\x6a\xf8\x9b\xf9\x81\x0f\xab\x6d\xbf\x79\xfe\xe7\xb8\xe9\x37\xcf\xff\xcc\xfe\xde\x2a\xc5\x87\xdd\x6c\x53\xbc\x2e\xe3\x4d\x07\x69\x4b\x8f\x46\xe4\x28\x03\xa3\x0d\x85\xcd\x46\x75\x43\x09\xd1\x94\x1b\x62\x47\xee\x40\x98\x98\x0d\x94\x29\x75\x50\xbf\x32\x15\x4e\xa2\x35\x7c\x84\xa2\x29\x20\x0e\x0d\x79\xc6\x55\x02\x5e\x24\x95\x52\x3a\x2b\x8a\xff\x56\x66\xf2\xb7\xdd\xa6\x27\xd5\x65\xae\x9a\x82\x57\xb2\x4f\xfb\xde\x4d\xf0\x64\xbb\xeb\xe8\x04\x06\xcf\xd4\x4b\x9b\x50\x6d\x51\xd9\x50\x24\x9c\x54\xa1\x79\xd5\x99\xe7\x83\xb1\x02\xc8\x57\x0f\x9f\xe7\x22\xc1\xae\x46\x5c\x66\xae\xab\xc8\x9f\x99\x4c\x44\x72\x0b\xf4\x67\x49\x53\x0f\xaa\x83\x2d\x9f\xc2\xea\xaf\xc2\x8b\x89\x5c\x4d\x86\xf1\x3b\x2e\x33\x50\x7e\xc8\x3b\xea\x97\x3c\xde\x97\x4f\x32\xab\x0a\xaa\xc9\x06\xe4\x7b\xb5\x06\x40\xb2\x7f\xe9\x66\xad\x12\x1e\xb8\xa6\xd2\xd1\xd3\xa9\x2f\x9c\xc8\x13\x5b\x38\x25\x13\xf9\xf8\x80\x9d\x23\xbd\x05\x92\xe4\x18\xba\xa3\x74\xd3\xb9\xb9\x4b\x6e\x0e\x80\xf4\x20\x6f\x70\x34\x17\x09\x11\x11\xe3\xed\x90\xe3\x40\x90\xb7\x46\x8c\xdd\xb2\xae\x33\xd0\x6f\x06\xdf\xac\x3d\x9e\x3f\x7f\xb3\x62\x34\x3f\x7c\x5f\x19\xcc\x0a\xca\xbc\x2f\x28\xb7\xbb\x82\x72\xfb\x9a\x6c\xfb\xb2\xbe\x8f\x2d\xeb\x1b\x2c\x7a\x48\x09\x57\x65\x1a\x0a\xeb\x0d\x5b\x0b\x72\x70\xa1\xfc\x65\xcc\x32\x46\xdd\x0d\x22\x41\xd8\x49\x02\xb3\x8c\x27\x1e\x3c\x82\x9a\x30\x9e\x24\x9a\xe2\x93\xf1\x42\x5e\x5c\x1a\x14\x06\xcc\x84\xe7\x62\xc0\x4a\x0c\x70\xb2\x08\x81\xc8\x1e\x70\x4d\x80\x7d\xf6\x98\xd1\xa8\xdd\xa1\x48\xe2\x3e\x86\xe2\x85\xbb\xc7\x8b\xcf\xdc\x09\x3c\xac\x48\x1e\x89\x6b\x83\x31\x41\x72\x84\x18\xee\x91\xf1\xee\xc8\xe3\xab\x78\x7c\x19\xe0\x36\x34\x1e\x04\x37\x4b\xa5\x99\x65\x7c\x8e\x19\xba\x65\x1f\x7e\x9a\x3e\xca\xb2\x7c\x42\x4a\xc6\x5b\x1d\x4d\x2c\xcb\x18\x9f\xcd\x04\x87\x68\x32\x80\x4e\x88\x16\x50\xa5\xec\x6d\x5d\x52\xf3\x63\x31\x4e\xb9\xc5\x6f\xb9\xbb\x4a\x06\xc8\xca\xbb\x91\x70\x9b\xe8\xe9\x2c\x97\xc6\xa9\xb5\x9e\x57\x7e\x0a\x91\x81\x34\xb6\x46\xa1\x81\xb8\xc8\x56\x8b\x06\x96\xa2\x46\x78\xb4\x71\xc1\xc0\xd0\x57\x6b\x19\xd7\x4a\xab\xaa\x9b\x27\x5c\x98\x7d\xa1\xd6\x27\xce\x57\x57\xf9\xf0\x5e\x2f\xdb\xd1\x9d\x5e\x9e\xa5\xfa\xc3\x5e\x0c\xf8\xfc\x62\x00\x5c\xf2\x5d\x89\x00\x8d\x63\xff\x5d\x54\x6d\xad\x12\xcd\x6d\x10\xe1\x18\xca\x7a\x39\x11\x8e\x5a\xc5\xd1\x1b\xc0\x28\x43\x68\x0c\xf7\xe2\x4c\x59\x63\xb9\x55\x97\x49\x7c\xb3\x76\xf3\xfd\x75\xa5\x86\x4a\x28\xc3\x0e\x57\x64\xb3\x68\x5b\xec\xea\x5c\xdd\x55\x20\xbc\x23\xfb\xad\x18\xc9\x87\x36\x3e\xa0\x4a\x70\x6d\x0c\xd9\x1c\x49\x77\x71\x35\x9b\xe5\x62\x26\x14\x78\x39\x7c\xc9\xa4\x85\x0a\x40\xb1\x0d\xbc\x82\xdf\xde\xd9\x59\x2c\x92\x7c\x95\xcf\xc3\x2d\xda\x15\xb4\x7b\xfc\x8a\x61\x3f\x0b\xcb\xd5\xcd\x36\x01\x50\xfd\x2d\x07\xeb\x23\xcf\x2b\xf1\x40\xaa\x11\x26\x3f\x2e\xa7\xc4\xcb\x44\xed\x2d\x54\xa3\x59\x03\x22\xb9\x69\x60\x8f\xde\x4c\x60\x1e\x2d\x03\xd8\xb0\xd8\x47\xc8\x82\xf3\xb8\xfa\xdd\x8a\x0f\x20\x72\xa0\x9a\x47\x50\xaf\x0d\xaf\x7d\xe9\x25\x43\xaa\xb0\x09\x1d\x30\x13\x2a\x9b\xbd\xa2\x82\xc4\x55\xb5\x7c\x75\xd3\x06\x3c\x33\xbe\xf2\x59\xc4\xf4\xa9\x64\x0c\x0a\x23\x94\x22\x07\x31\x0a\x9b\x38\x35\xf1\x62\x6e\x7a\xdf\x57\xb3\x93\xd0\xa8\x1a\x0b\x58\x2b\xdd\x8d\x73\x41\xb1\x19\x5f\x6a\x0f\x3e\x0a\x0c\xe5\xaf\x62\xde\x35\xb6\x93\x2a\x6c\x47\x15\x20\x37\x4c\xe1\x08\x5f\x5e\x16\xed\xdc\x21\x8e\xbb\x2d\x7a\x9b\xe2\x03\x4c\xb5\x3c\x75\xaf\xa1\x5a\x75\xf4\x9b\x0f\xf0\x0e\x3f\x54\xc2\xbf\xcd\x4c\x24\x03\xef\xea\xa7\x3f\xe9\xe2\x9f\x24\x89\x2e\x94\xa5\x07\x58\x25\x19\x81\x71\xc2\x9f\x33\x9d\x5e\x5c\xee\x28\x32\xfc\x89\x85\xe9\xd2\x9f\x62\x36\x11\x53\x91\xf3\xac\x4f\x51\x57\xd5\x00\xde\x5e\x3d\x7a\xb7\x1a\xd1\xbb\xf0\xf6\xa7\x0b\xee\xad\x4a\x0e\x9b\xdc\x0e\x7c\x93\xc9\x18\xb0\x69\xa1\x72\xfe\xda\x32\x45\xc3\x6d\xe9\x44\x65\x9c\x30\xbf\x9c\xbc\xdc\x51\x85\x48\x4e\x75\x6f\x88\x82\x20\x8e\xbe\xd1\x53\x71\x0f\xd1\x66\x9e\xf7\x65\x85\xb1\xed\xa2\x44\xdd\x64\x78\x20\xd5\x1d\xb0\x39\x3c\xc9\x5d\xcc\x0b\xd5\x74\xa2\x25\x61\x91\xd8\x0a\xb0\x39\x2c\xbf\x15\xea\x98\x9c\x6c\x11\xe2\x00\x9a\x02\xde\x87\x1f\xc8\x9a\xd0\x95\x01\xed\xcd\x1c\x3b\x34\x73\x24\x1b\x25\x71\x4a\x43\x27\x73\xc2\x0d\xd3\x09\x90\x83\xa6\x60\x97\x75\xa3\x50\xa0\x53\x00\x27\x58\x81\x9c\x40\x75\xa0\xa4\x61\x78\x73\xee\xa1\x3e\x71\x6e\x2c\xd3\x43\xc7\x0d\xd6\xa2\x47\x2d\x5a\xf2\x1b\x99\xe4\xba\x09\x7a\x03\x3e\xe6\x1e\x18\xcb\xa7\xab\x02\xf9\xec\x02\x56\x88\xa8\x8d\xda\x1d\x8c\x1c\x12\x4a\x0e\x61\x7e\x7a\x04\xd2\xac\x87\x91\x9e\x59\x84\x4e\x66\xd7\xf3\x99\x70\x5a\xfb\xe0\x68\x67\xa0\x22\x35\x3a\xd1\x3e\x33\x32\x0e\x95\x09\x81\x22\x10\xb2\xa1\x2e\xb6\x19\x9b\xb6\x37\x74\xed\xd6\xd0\x95\xf1\xc7\x9c\xe7\xa9\xc6\x43\x0c\x75\xa6\x90\x1e\xa8\x24\x0a\x8d\x0d\xc7\x3d\x1c\xf4\xcf\x08\x8a\x73\xc2\x26\xc5\x94\xab\x7e\x2e\x78\x0a\xaa\x52\xf4\xdc\xcb\x61\x35\xfc\x0b\xc7\x1e\x79\x2d\x57\x7a\xef\x3f\x5c\x1b\x22\x05\x22\x6b\xcb\x78\x29\xee\xfe\x9d\xdb\x1e\xa3\xaf\x41\x88\x7b\x6e\x60\x59\x10\x4b\x2f\xc7\xfb\xca\x6d\x54\xef\xc8\x63\x09\x91\xc2\x65\x73\xae\x0c\x8c\xbf\x84\x31\x0e\x0b\x5a\x85\x33\x59\x03\x69\x21\x5b\x01\x42\x17\xa2\x3f\x8d\x48\xb4\xdb\xc5\xb9\xa7\x1f\x90\x8f\xe0\x76\x2f\xd1\xd3\x59\x26\x1e\x48\x42\x32\x3b\xa0\x85\x28\x2a\x4a\x35\x3e\xf5\x21\xd5\x1d\xad\x42\x65\x05\x3c\x5c\x5c\x31\x95\xd6\x12\xd2\x25\x72\xd4\x1e\x82\xe5\xfe\xa3\x9a\x57\xe0\xfe\xca\x84\xfd\xc7\x1a\x0b\x49\x23\xbc\x50\x6e\x5b\x5b\x4b\x69\x54\x41\x47\x68\x78\x92\xde\x8b\xc7\x93\x09\xdb\x7f\x98\xff\x36\xea\x3e\x0c\x23\x72\xd9\x1a\xd0\x06\x05\xe1\x4b\xb8\x04\x14\x2a\xf0\xad\x98\x82\x45\x8a\xbf\xce\x21\x65\x43\x8e\xb0\x3c\xb6\x0f\x65\xb6\x5a\xe1\xdb\x1b\x59\x30\xdc\x8b\x57\x38\xd6\xfa\x0c\xaa\xe6\x89\x66\xba\x1c\x22\xeb\x59\x58\xf7\x68\xf4\x03\x76\x55\xbf\x79\xed\x17\x6f\xf3\x29\x34\x9a\xa8\x69\x8b\x96\x4e\x80\xf2\xab\xa2\xe5\x3e\x7c\xeb\xc4\xc5\xac\xc7\x7e\xe1\xb9\x92\x6a\x7c\xd4\x63\x4a\xdc\x43\x26\x96\x61\x49\x98\x4b\x9a\x96\x88\xd8\xa3\xc2\x16\x79\x43\xd6\x5c\x53\x84\xf1\x4e\x9c\x1d\xa0\xe6\x6d\xc1\xc9\xe1\xfa\x69\xf7\x32\xfb\x16\x35\x0f\x33\x56\x36\xdc\xbb\x97\x9f\xb6\xde\xd5\xd9\xbd\x0c\xdb\xb9\x53\xd7\x32\x9c\x58\x7a\x6f\xef\x56\xde\xbb\x95\x7f\x2f\x6e\xe5\x40\x21\xb7\x44\x6d\xaf\xaa\x42\x42\x23\xbd\xc5\x36\x01\x23\x22\xc6\x57\x81\xc4\x11\x78\x1a\xae\x6d\x8f\xc9\x81\x18\xb8\x53\xec\xa5\xd8\x7b\x6e\x8e\xa5\x61\x13\x3e\x9b\x89\x00\xa9\x2c\x55\xa1\x0b\x93\x61\xf2\x33\x84\xa9\x41\x29\xb4\x15\x6e\x83\x76\xbb\x4d\x09\xbd\x5e\xaa\x63\xe4\x3a\x83\x5c\x7b\x18\x68\x31\x2b\x09\xa9\xb1\x6c\x22\x78\x6e\x87\xc2\xa9\xf2\x72\xda\xc0\x43\xd7\xb5\xe6\xb8\x4e\xdf\x91\x39\xa6\x8b\x51\x87\xa4\x3f\x18\x4b\xac\x44\x52\x17\xbb\x35\xe8\xac\xc2\xd4\xba\xf2\x88\x95\xb0\x80\x78\x0e\x5e\xb2\x77\x6a\xac\xc1\xa4\x99\xb3\x57\x94\xa8\xb0\x95\xec\xa6\x48\x8a\x6a\x3f\x8f\x48\x51\x1b\xd1\xb1\x20\x95\x9e\x4c\xc8\xab\x0e\xd3\x6a\xf5\x21\xa8\x18\x48\x8f\xeb\xa6\x2c\x69\xd8\x58\x28\xa7\x24\xaf\x91\xf5\x36\xd1\xa6\xf5\x0c\xeb\xd4\x27\xec\xa9\xc7\x7d\xb0\xd3\x9a\x3f\x88\xe4\xa4\x1d\x41\xab\x6c\x52\x49\x62\xbc\x39\xc8\x0b\x45\x40\x15\xe8\xbc\xb9\x39\x20\xad\x6f\xe5\xba\x4f\x79\x2b\x83\x3d\xc5\x16\x3e\xbc\x96\x5e\x80\x82\x53\x58\x4e\x41\x24\x85\x15\xbe\x16\x6e\xc5\x81\x84\xee\xec\x85\xaa\x34\x25\xd2\x27\xf5\x05\x38\x94\x5a\x5b\x76\xf8\xec\xf8\xd9\xd1\x82\x77\xbd\x56\x08\xe8\x3a\x7a\xd3\x11\x12\x39\x9d\x65\x73\x18\xc7\xb3\xb4\xc7\x30\x51\xdd\xf1\x5e\x5c\x11\xaa\xd0\x6b\x26\x22\xcb\x7a\xcc\x68\xa7\xac\x87\x2a\xc5\xf0\x2b\x28\x78\x79\x41\xe5\x88\x0f\x9f\xfd\x5f\xcf\x7a\x4c\xd8\xe4\x88\xdd\x6b\xf5\xcc\x32\x2c\xd9\x7b\x8d\x38\x09\xa1\xa3\xb9\x2e\xa8\x32\x03\x54\x94\xc8\x64\x22\x6d\x36\x67\x09\xcf\x32\x06\x2a\x9c\x46\x6a\x0b\xcd\x07\x2c\xc6\x91\xd6\x23\xf6\x1c\xeb\x27\x22\xe4\x09\x37\x90\x0c\x74\x3c\x11\x3c\xb3\x13\xf4\x7e\x29\xad\xfa\xbf\x89\x5c\x63\xd2\x3d\x3d\xd9\x24\xbc\xaf\xbd\xc2\x4b\x97\x43\xf9\xea\x74\x6d\x4c\x0d\xf6\x4a\x0e\x73\xc1\x4e\xa9\xc6\xa4\x07\x52\x68\xfa\x15\xf3\xf6\xc0\xcf\x38\x14\xa1\xaa\x1f\x25\x65\x1d\xdf\xe7\xd2\x51\x3c\x95\x2c\x7d\x7b\xeb\x48\x1c\x23\x73\xdd\xae\x24\xbe\x0a\x47\x11\xf1\x38\x7c\x05\xab\x38\xa4\x65\x54\x6b\x53\x26\xa9\x53\xb5\x30\x28\x83\x42\x16\x3d\x35\x66\xfe\x68\x9f\x3f\x0c\xd8\xcd\x81\x78\xb0\xdf\x62\xae\xcb\xc3\xc8\xe0\x3f\x94\x75\xff\x1a\xb0\x8b\x69\x38\x6a\x20\x9e\xe6\xa1\x8a\xa1\x7f\x8d\xc9\x11\x2b\x54\x59\xcf\xa1\xb3\xf1\xb5\x68\xd3\xb1\xca\xac\xf5\x57\xa7\x0c\x93\xc7\x59\x56\x28\xf2\xcb\x3c\x9e\x4f\xbb\xdd\x7e\xa7\xb2\x36\x68\xd1\x72\x08\x71\x1c\x09\x94\x82\x63\x87\xe5\x69\x39\x1a\xb0\xf7\xd4\x19\xa2\x63\x40\xfc\xca\x48\xa3\xd4\x2f\xca\x87\x04\xf6\xe3\xa8\x4d\x54\xec\xab\xc9\x40\xb7\xac\x28\x26\x2c\xc3\x2f\xbf\xbc\x6d\x53\xa2\x9a\x16\xee\x5e\xe7\x59\x7a\x2f\x89\xb3\x18\x76\xe8\xfa\x38\xda\xfa\xe5\xf6\xe3\xbc\xbf\x97\x69\xe7\x21\x12\xee\x0f\x0c\x91\xc1\x18\xcb\x48\x3d\xc3\x0e\xa1\xaf\x23\x76\x2e\x21\xd8\x07\xfe\x42\xc0\xb2\xe9\x30\x06\x33\x0f\x2b\x03\x57\xd0\x1d\x14\x8f\x35\x07\xc5\x74\x3d\x82\x03\xd6\x64\x94\xd3\x22\xb3\x5c\x09\x10\x40\x3f\x13\x8d\xcb\xc4\xc3\xa5\x93\xdc\x8d\x15\xca\x76\xa2\x77\xcb\x5f\xa9\xc6\xe6\x80\x84\x20\x13\x36\x0b\x6d\xfd\x1a\x47\xca\x28\xa7\x82\xf7\xfa\x4e\xa2\xcd\xe2\x98\x6a\xd6\xfa\xd8\x34\x27\x44\x3d\x88\x84\x00\x69\x67\x59\x31\x96\xaa\xcd\xc0\x92\xe6\xf2\x4e\xe4\x1d\x2c\x2c\xd4\xb0\xc5\x2c\x09\x0d\x3c\xf7\x8f\x11\xed\xf0\x55\x8f\x20\x14\x52\xf1\x89\xda\x77\xa5\x3b\x4f\x9b\xde\xc6\x08\x39\xd1\x47\x52\x08\x57\x35\x4e\x28\x74\xe7\x80\x20\x3e\x71\xd8\x9d\x67\x4e\xf8\x61\x9d\x6e\xe6\xf9\x83\xcd\x79\x90\x7a\x3c\xf2\x98\x1c\x31\xae\x9a\xae\x0c\x5a\x36\xca\xdf\x79\xea\x45\x9e\xcb\x86\x43\xd0\x99\x92\xfc\x1e\xa9\x74\x97\xa8\xdf\x72\xd0\x57\xbe\x35\xd6\x65\x8e\x00\x50\xc0\x23\x87\xd1\x3c\x64\x37\x8a\xa0\xf7\x8c\x00\xff\xcf\x9d\xa8\xc3\x9d\xce\xb8\x09\x96\x42\xbc\xb5\x74\x4a\x42\xb1\x36\xac\xbf\x84\xc8\x5a\x72\xc4\x94\xae\x7d\x25\x2e\xbf\x44\xf5\xa1\x97\x0c\xc4\xa0\xcf\x07\x6a\x0d\x6b\xe5\x1b\xf5\x30\x0f\x0e\xfe\x4d\xc9\x6f\x88\xbf\xdd\x3c\xaa\x8d\x63\x92\x36\x42\x72\x29\x2f\x4f\x07\x6a\xfb\xd1\x93\xcd\x06\xea\xba\x27\xa9\x7b\x92\xba\x27\xa9\x7b\x92\xfa\x07\x21\xa9\xaf\x75\xc2\xb3\x47\x20\x64\xbd\xca\xa0\xb6\xc8\x06\x8a\x3b\xbe\xe8\xe9\xa9\xd7\xc7\xe9\xca\xfb\xa7\x7c\x0c\xbe\xdc\x77\x0a\xb1\x07\x75\x54\x5b\x30\xe5\x96\x1b\x01\x01\xd0\xf0\x8c\xfe\xfe\xf0\xe1\xe2\x2c\x8a\xba\x80\xec\xe0\xea\xb7\x42\xbd\xcb\x56\x8d\x5e\xe7\xeb\xa3\xd3\x96\x23\xea\x18\x9a\x40\x6f\x00\x46\x24\x1a\x23\xbc\xeb\x83\xf5\xb1\x32\x4b\x30\x09\xc6\xcd\x1d\xb9\xf6\x73\x6a\x04\xe4\xe1\xc6\x51\xb9\x5c\x24\xd5\x8a\x5c\xed\x24\x2d\x5a\xc0\x96\xe1\xc3\xfa\x56\x87\x5f\xd6\x21\xa7\xda\x1f\x51\xca\x15\xc4\x26\xfb\xb1\x52\xfb\x6d\x18\x30\x7f\x3a\x3d\x2f\x75\xa2\x33\x69\x6e\xd7\x3f\x81\xe5\xfb\xcc\x75\x50\xb2\x74\xa9\xd8\x4f\x50\x06\x99\x9d\xea\xe9\xac\xb0\x82\x9d\xab\xb1\x54\x62\x70\xa3\x6e\xd4\x09\xfb\xe9\xf4\x9c\x5d\x9e\xa1\x9e\x09\x79\x27\x6c\x28\x46\xee\xf2\xc2\x19\xa6\x20\x60\x5e\x2d\xd3\x2e\x58\xea\x3e\x01\xef\x00\xc6\xe0\x50\x54\xf2\xd8\x5d\x9f\x54\x7f\x00\x0e\xf3\x6f\xee\x90\x73\x64\xdb\x14\x05\x32\x60\xe1\xd3\xdd\x0c\x59\xee\x08\xbb\x9f\xfa\xd0\x74\xca\xd5\x1c\x43\x5a\x07\xd4\xcd\xe3\x4c\x5a\x4d\xc0\x75\xe9\xdb\x6e\x29\x5d\x6b\x8b\x0d\x74\xde\x88\x56\x80\xc8\x35\xd7\x05\xbb\xe7\xca\x46\x22\xc5\xb5\x9c\xbd\x64\xe7\xca\x14\xb9\x28\x11\x45\xeb\xd2\x85\x34\x6b\x08\x18\x80\xa5\x63\x5e\x6e\xdb\x52\xf6\x58\xf0\xda\x71\x22\x4a\x25\xdf\x1d\xac\xce\xc8\x7b\x3c\xb7\x72\x45\xa0\x3b\xc0\xef\xf9\x76\xfe\x90\xae\x58\xf9\x8b\x11\xd3\x18\x55\x55\xad\xdb\x2a\xa3\xb2\xfb\x43\x0f\x6a\x4c\xa5\x81\xca\xd5\x7d\xa5\x03\x1b\x38\x4e\xc5\xdd\xb1\x49\xf9\x0b\xb4\x7b\xe3\x92\xcd\x09\x50\xdb\x8f\x89\x1b\x76\x73\xf0\xc2\x2d\xfd\x95\x9c\xca\x8c\xe7\xd9\xbc\x52\x2c\xa0\x6c\xe9\x08\xa5\xef\x12\x41\x89\x9f\xdf\x1c\xb0\x43\x9d\x43\xef\xee\x1a\x65\x82\xdf\x09\x4a\xc8\x83\x93\x3a\x47\x76\x7e\xf4\x29\x36\x69\x6d\xdc\xc2\x74\x05\x6f\xf9\x50\xd6\x5e\xf2\x77\xe6\xf2\xac\x4a\xd8\x4e\xcf\x07\xec\x03\x89\x10\x44\xa7\xe7\x04\xd3\x61\x6e\x43\x8b\xcf\x75\x40\x3b\x08\xa9\x8f\x13\x3d\x17\x25\xdb\x4f\x31\xd9\x9a\x78\xdb\x89\xc1\x49\xfb\x5e\xcc\xf4\xfa\x6c\x2d\xbe\xaa\x80\x57\x39\xa3\xf2\x4f\x90\x95\xe9\xdd\x5d\x18\xd6\xe7\x98\xf3\x58\x62\x04\x9d\x91\x88\xe3\xfd\x13\xfd\xbd\x8e\xb4\xd4\xf0\x96\x6f\xde\xc0\x42\x1c\x1b\x3d\x3b\xbf\x7c\x7f\x7e\x7a\x72\x7d\x7e\xf6\x92\xd1\x54\x11\x4a\xd4\x4b\x2d\xe0\x08\x0b\x4a\x75\xcc\x4f\x7d\x7a\xa9\x1f\x78\x8f\x08\x0c\x57\x25\xd0\x35\x96\xf4\x51\xec\x42\x49\x1b\x92\x91\x09\x09\x26\xd3\x2a\x04\xd7\xce\x34\xe9\xe8\x63\x69\x81\x86\x28\xea\x0c\x02\x23\x2b\xbd\xc1\x65\x82\xb4\xaa\x4e\xf5\x01\xcb\x25\xed\xa2\xc8\x7b\x87\x65\x1b\x5d\x46\x93\x7e\xe9\xdb\x44\x32\x1a\x2a\x7b\xf8\x30\x0d\x9d\xd7\x4b\x6f\x0c\x98\x23\xd0\xcf\x06\xcf\x3c\xf3\xcb\x16\xca\xab\x84\x4e\x7d\xce\x2f\x96\x77\xaa\x9e\x0c\xf6\xce\x4e\x44\x7e\x2f\x8d\xe8\x39\x8e\xd6\x5c\xa9\x05\x3a\x88\xcb\x8a\x54\x7b\x09\x52\x4f\x31\x8c\x3f\x4a\x27\x13\x0b\x4a\xc1\xc4\xd6\x09\xba\xa5\x75\x6e\xa3\x19\xe1\xfb\x1f\xde\xbf\xee\xde\x35\x1e\xbe\x15\x2e\x6b\x09\x99\x41\x93\xe0\x6b\x2e\x31\xd3\x7d\x07\x5b\x71\xd9\xff\x84\x69\x70\x23\xb3\xa6\xfb\xa0\x42\x1c\x42\x27\xe1\x98\x73\x0b\x31\x28\x86\xe0\xd7\x47\xc2\x52\x74\x0a\x21\xb7\x97\x6f\x6c\x4f\x7b\x6a\x2a\xed\x5c\x07\x2e\xea\x5a\x7c\x49\x2c\x80\x2b\xb6\x60\x14\x81\xee\x45\xd6\xb0\x10\x60\x07\xdc\x92\xc0\x9a\xb1\x94\x5c\x39\x67\xab\x67\x3a\xd3\xe3\xe6\x7a\x03\xb9\xc8\x04\x37\xc2\xf8\x70\xb4\x9f\xcf\x4f\xce\x8e\x09\xf0\xd6\x78\xf6\x70\x3c\xf6\x9d\x1d\xbf\x3f\x3f\x39\x7b\x73\x3e\x98\xa6\x5f\x61\x0d\x92\x3e\xef\xcf\x74\x67\xf5\x4c\xc4\x93\xc0\xac\xce\x8e\x33\xc6\x7a\x51\x91\x11\x10\x7f\x20\x5c\x2c\x32\x3f\x94\x73\x2e\xb1\xc1\x2f\x46\xbe\x88\x93\xc8\x20\x02\x02\x44\x23\xbc\xee\xfe\x0b\xe5\x07\xd2\x88\xb3\x06\xc5\x26\xaa\x57\x85\xdf\x1f\xea\x42\xa5\xec\xf2\xe3\xe9\x13\x58\xd2\x15\x95\x97\x7c\xbd\x25\x37\xec\xfa\x35\xf0\x85\x92\x3e\xf7\x14\x1e\x2b\x30\x2d\xcc\x0b\x35\x17\xaf\x55\x02\x65\x2e\x95\xc8\x99\xc8\xa7\xd2\x18\x88\xa7\xec\x28\x49\xed\x6a\x39\x36\x11\xa9\xfc\x47\xf6\x74\xf3\x0b\xa2\x9b\xfb\x4b\xfe\x45\x5d\xf2\x9f\xaf\xaf\x2f\x7f\x12\x76\x45\x70\x63\xa5\x55\x1c\xdf\xa8\x7c\x8e\x7f\x28\xc8\xeb\x9a\xb2\x9f\x84\x2d\x71\x22\xda\x4c\x60\xdd\x6a\x37\xac\x88\x05\xfd\x59\x1b\x7f\xbd\xb4\xe3\xd0\x0a\xcb\xf0\xf6\x16\x58\xec\x4c\xa7\xec\xe2\x72\xc0\xfe\x5b\x17\x50\xd7\x98\x0f\xb3\x79\xb0\xcd\x18\x61\xd9\x0d\xf4\x75\x73\xe0\xc4\x6e\xb7\x59\x3f\x0b\x9e\x62\x65\x1e\x63\x05\x5f\x23\x78\xb5\x7c\xb7\x4d\x1a\x2e\x8c\xd5\x53\x36\xa1\x8f\xd0\x18\xa4\x87\xed\x86\xe5\x1b\xe0\x82\xf2\x2c\xd3\xf7\x90\x21\x83\xa1\x89\xf4\xce\x4e\x71\x05\xdd\x87\x71\x12\x4b\x81\xc9\x3b\xd0\x0a\x8b\x05\x62\x8c\xf1\x56\x79\x98\x0f\x26\xb0\x6f\xab\x04\x06\xfa\x08\xf2\x5a\x05\x0c\x60\x1b\x0b\x9f\x8f\xec\xcc\x14\x07\xef\x23\xa0\xfc\xc2\x73\x35\x16\xec\x85\x7b\xf3\xfb\xef\xbe\xfb\xe6\xbb\x01\x00\x83\x97\x35\x39\x15\xbb\x38\x79\x7b\xf2\xeb\xd5\xc7\x53\xc0\x66\xda\x38\x59\xb9\xb0\x32\x1b\x38\x6e\x61\xf3\xc1\x85\xb2\xef\xf2\xab\xe6\xf4\xc4\x64\x22\x5a\x8d\x58\x57\xd0\x20\x76\x4d\xd3\x15\x88\xf0\x35\xdc\x05\xaa\x12\x27\xb7\x0b\x5b\xd1\xb3\xa2\x53\xd2\x46\x3d\xb0\x49\x25\x34\x3a\x89\x8f\x3f\xd1\x58\x44\x7d\x22\x2a\x02\xa5\xc7\xcd\x2a\x48\x34\xbf\x50\x08\x3c\xb6\x9a\x98\x74\x28\x04\x43\x43\x42\x39\x3e\xfe\xc8\x63\xc1\xcf\x16\x3a\xc7\x17\xb6\xb1\x0d\x5c\xa5\x59\xdb\x1e\xe0\xf3\x90\x88\xc7\xbd\xde\x9d\x78\x0a\x4e\x51\xd1\xa1\xe4\x19\xbf\x15\xaa\xd5\x7f\x27\x1e\x44\xd2\xe6\x68\x6e\x70\x42\x82\x87\x41\x3b\x5a\x06\x8e\x83\xd2\xed\x58\xda\xfa\xcf\x1f\x44\x12\xfe\x46\x39\xc3\x0f\x50\xc3\xa0\x36\xca\x3c\x2d\xe3\xf7\x1b\x28\xf5\x4f\xa2\x95\xbb\x20\xef\xab\x8d\xc9\xbd\xe7\x69\x34\x38\xbf\x45\x3e\xd2\xf9\x74\x93\xc1\x55\x59\x70\x6d\x7c\x36\x99\x5d\xe9\xe4\xb6\x75\x84\xd7\xa7\x97\xd8\x26\x1a\x63\xc9\x99\x11\xb3\x03\x02\x6b\xd8\xf5\xe9\x25\x55\xe4\x71\xff\x9a\x68\x7d\x6b\x42\x31\x8d\xe0\xe6\xd9\x60\x0a\x61\x04\xd5\x49\x74\x3a\xb8\xda\xd8\x93\x4c\xf2\xe5\xc9\x55\xa1\x05\x9b\xe8\x2c\xc5\xe5\x9f\xf2\xd9\xcc\x4d\xc9\x97\xe1\xbb\xb8\x84\xb3\xe6\xcb\xb3\x11\x8a\xb5\xb7\xce\x49\x45\x95\xca\x39\x01\x32\xda\xd2\xb2\x86\xd0\x4f\xee\x45\x4c\x66\x68\xf7\x59\x87\x0f\xac\x10\x47\x70\x10\xde\xc4\xc5\x87\xfa\xae\xa9\x0c\xdd\xf6\x43\x8a\x5b\xeb\xc6\x95\x03\xf0\x77\x11\x3c\x79\x50\x16\x15\xd6\x64\x3b\x0c\x41\x1b\xeb\x38\xff\xfa\x5a\x23\x8c\x06\xab\x22\xf3\xd9\xcc\xc3\xc0\x93\x82\xf8\x73\x78\xb8\x53\x05\xb1\xa3\x3a\xd8\x45\xf2\xf1\x5e\xff\x60\xb7\x25\x09\x04\x99\x31\x45\xb7\xcc\x48\x9f\xe2\xcc\xcc\xa7\x99\x54\xb7\x90\x28\x43\x0a\x89\x23\x94\xa4\x30\xab\x5b\xcf\xcb\x73\xc1\xb3\xe5\x9a\xd6\x3a\x9e\x18\x37\x10\x98\x48\x47\xee\xd6\x25\x49\xdf\x1d\x79\x7f\x02\xc8\x95\xb4\x00\x2f\xf9\xa9\xc6\xdd\xe5\xb4\x5e\x5c\x9d\x5e\x5d\xac\x69\x22\x6e\x79\xa7\x06\xfd\x0a\x2d\xc1\x55\x38\xa0\x7f\xaf\x9b\x5c\x53\x7d\x6b\xcb\x11\x08\x98\x0e\x70\xa9\x73\xcb\xb3\x12\x0b\xee\x5f\xea\x20\xce\x3d\x59\x7d\x19\x92\x09\x9f\x9d\x14\x76\x72\x26\x4d\xa2\xef\x44\xab\x6b\xc1\xc3\x91\xfa\x99\x48\x98\x5f\x78\x93\x9d\xfe\x7c\x72\xc9\x78\x61\x27\x42\x59\x99\x40\x6c\x59\xe7\xf0\x37\x3f\x8e\x2b\x61\x56\xf8\x21\x9a\x47\x41\xef\x3d\x6a\x0c\xfb\x58\x8d\xc7\xdd\x6d\x69\x12\x23\x3b\x03\x25\x38\x91\x84\x5b\x9d\xaf\xf0\xf3\x93\xa2\x8d\xbb\x7c\xe1\x5f\x02\xbd\x0e\x08\x71\xa5\x9f\x4a\x14\x22\x1a\x7b\x60\x50\x17\xca\x8a\x7c\xc4\x13\x51\x4b\x8c\x41\xdc\x11\xec\x5b\x86\x36\x10\x8e\x96\x50\x5e\xd1\x0c\x6e\x18\x46\xa8\xbd\xc4\x27\x51\x6c\x07\x45\xae\x79\x61\x25\x14\x5c\x0f\xb9\x98\xa8\xcd\xad\x81\x2f\xe5\xae\xf0\x4a\xcf\x28\x8e\xf8\x6f\x05\xcf\x70\xa6\x6f\xd7\x71\x23\x56\x57\xa4\xe5\x63\x7e\xcd\xfd\xba\xbc\x0d\x56\xd0\x02\xcb\x8e\xd0\x38\x00\xa9\x09\x45\xd3\x98\x5d\x3c\x23\x13\xce\x33\x76\x68\x93\xd9\xd1\x96\x92\xe6\xf0\x93\xb4\x0e\xaf\x43\xb6\xdc\x36\x4a\x65\xc2\x4e\xb7\x49\x87\x95\x6f\x23\xe9\x65\xaf\xa5\xb1\x18\xf6\x46\x3f\x48\xc3\x04\x66\x72\x71\x90\x6d\x75\xce\xe4\xec\x57\x27\xbc\xbd\x44\x7a\x15\x59\x38\xa4\xa1\x4a\xf5\x10\x0c\xeb\x43\x89\x0e\xed\x7c\x26\x13\x9e\x65\xf3\x20\xf4\x1b\xf6\xa7\xef\xb1\x36\xff\x37\x5f\x7f\xff\xbc\x69\x2d\xb7\x24\x84\x7e\x8e\xa8\x94\xad\xc6\x48\x03\x03\x20\xb4\x79\x77\x0d\xe9\x88\xe2\x9e\x41\x76\x73\xa0\x21\xcb\xd8\xc4\x63\x93\x34\x7a\x4d\x2c\x7a\xad\x53\xf5\x14\x0e\xd4\x86\xf2\xd8\xda\xaa\xc3\x5e\xd2\xda\x4b\x5a\x7b\x49\x6b\x2f\x69\xed\x25\xad\xbd\xa4\xd5\x51\xd2\x9a\xed\x25\xad\x2f\x4c\xd2\x6a\xcb\xdd\xfa\x52\xc5\xad\xbf\x8a\xf9\xb5\xbe\x8c\x8d\x99\xf5\xa9\xbe\xe1\xb3\x08\xc3\xef\x56\xcc\x31\x5d\x07\xec\x96\x8e\x64\x43\x01\xa3\x6a\x1e\x6c\x93\x00\x74\x2b\xe6\xeb\x86\xdc\xb8\x57\xda\x5d\x69\x34\x1a\xca\x04\xea\x0e\xbf\xac\xd3\x36\x42\x5a\x66\x48\xba\x86\x6c\x28\xa9\x1c\xbb\xa1\xc4\x32\x89\x8e\x82\x5e\xe9\x12\x26\x68\x43\xef\x8c\xc0\x4d\x7a\xfe\xc3\x0f\x3f\x00\xcf\x03\x23\x75\x63\xf0\x2f\x6d\xf6\x1b\xf7\x99\x50\x3d\xc8\x60\xe1\x20\x69\xd8\x54\x8e\x27\xde\x33\x9d\x68\x35\xca\x64\x42\x61\xca\x78\x60\x7c\x6a\x2c\x96\xa3\x1f\x8d\x10\x6d\x1d\xa5\x15\x18\x7b\x8f\x65\xf2\x56\xb0\x91\xf9\x29\xd7\xc5\x0c\xb1\x2f\x6d\x28\xd6\xef\xcb\x10\x61\x67\xe5\x5c\x8d\x68\x5a\xca\xb5\xe9\x73\xbb\x85\xfc\xda\x57\x26\x97\x77\x64\x04\xf7\xee\x41\x37\x78\x27\x8e\xf1\x19\xa6\x73\xc1\x1e\x0f\xd8\x1b\x3e\x67\x04\xdc\xc8\x15\xe3\x43\xa3\xb3\xc2\x86\x90\x23\x7a\x18\x07\x52\x43\xa7\x82\x6a\x7f\x63\x5c\xb7\x6f\x16\x05\x7c\x23\x9e\x37\x9c\x6d\x68\xb3\x8d\x4b\xf5\x5a\x8e\x44\x32\x4f\xb2\xe5\xba\x4b\x68\x11\x3b\xc4\x93\x68\x37\xd1\xc7\x15\x14\x0e\x92\x3d\xc9\x61\x6a\xf9\x2d\x9c\x89\x5c\x98\x99\x56\xc6\x87\xbd\x50\xd4\x7e\x16\xfa\x26\xb8\x57\x48\x18\xc2\x70\x7c\x63\xaf\x60\xea\xee\x20\x5c\xe6\xe2\xca\xea\x59\xd4\x7e\x82\x3e\x62\xd3\xab\x78\x50\x6a\xb5\x67\xd8\x30\xd3\xc9\xad\x61\x85\xb2\x32\x8b\xdd\xb3\xd2\x10\xaa\xb5\x15\x3d\x56\x28\xa8\x3f\x55\x7d\x73\x96\x6b\x88\xc4\x18\x71\x99\x99\x9e\x9b\x01\x02\xb7\x25\x1c\x6b\xec\xfa\x01\x50\x89\x80\xb8\x72\xcc\x12\x2f\x8c\x9f\x50\x9b\x2b\x26\x4c\xda\x0d\x90\x67\x99\x48\x99\x9c\x4e\x45\x2a\xb9\x15\xd9\x9c\xf1\x91\x75\x64\x3a\x1a\xa6\x6b\x87\x92\x61\xf0\xd2\xf8\x81\xd1\xc8\xab\xd3\x92\x86\x59\x91\x4f\xa5\x42\xd0\x30\x28\x91\x03\x27\xcc\xfd\x15\xd7\x2e\x46\x2c\x52\x3c\x7c\x33\x9d\xc9\x64\x3e\xc0\x1c\x81\xf5\xd6\x7b\xa2\xf5\x6d\x58\xea\x66\xb4\xda\x36\x3d\xa0\xac\x59\x5c\xfe\xb3\x1f\x0e\x41\x1f\x9c\xc2\xc7\x5f\x95\x8f\xe0\x87\x4d\xdc\xda\x14\x91\x50\xa7\x0b\x78\xec\xda\x76\x8c\x0e\x66\xf3\x7e\x51\xf2\x28\x5f\xb6\x01\x1e\x86\x6e\xc9\xee\xc0\x6e\xc7\x5b\x1a\x2d\xe4\x75\x0d\x40\x9e\x5e\xa3\xc3\x5d\x4d\x25\xa7\xd7\x07\x54\xba\x26\x8b\x9c\xaa\xba\xb0\x89\x2e\x33\xca\xa8\x65\xc3\xa9\x81\xfb\x59\x00\x8f\x8f\xc7\xff\xc5\x1c\x89\x6e\xb4\x74\x2a\xed\x7b\xae\xc6\x6d\xc4\xd4\x37\x61\x50\x48\x3b\xe4\xef\x15\x86\x8f\x85\xaf\x8d\xe5\x76\x14\x4b\x58\x4a\x05\x85\xc8\xe2\x34\x3f\xce\x42\x5c\x7e\x3b\xc5\xd9\xe3\x5e\xef\x10\xf7\x7a\x0f\x28\xfd\xf9\x01\xa5\xff\x28\xe5\x46\x9c\xc0\xdd\x36\xdf\x99\x48\x2a\x97\x93\xa8\x84\x50\xa0\x1c\x37\x5b\xd7\x1e\x31\x6b\x37\x9c\x3e\x57\x69\x1f\xa1\x46\x37\xd1\x5e\x03\x95\x73\x63\xdf\x3d\x84\x76\x44\x78\xc3\xb3\x8d\x31\xb4\xcb\xce\x2e\xac\x98\x76\xa0\xe4\x17\x88\x3c\xe4\x63\x15\xa7\x52\x1d\x4f\xf9\x43\x4c\xd1\x09\xc2\x78\x5e\x83\x96\x9a\x72\x9b\x4c\x04\x44\xfb\xba\x99\xac\x40\x20\x41\xfd\xab\x0d\x11\x8a\xd4\xf1\xf0\x11\x52\x6d\x81\x2f\xe3\x38\x48\xf7\x8b\x06\x02\xa1\xe8\x32\xe2\x30\xd8\xd0\xd1\x21\xcc\xfa\xdf\x06\x8a\xd1\xda\xb7\x66\xe0\x87\x33\xf8\x5b\xc1\x95\x95\x76\xbe\xcc\xaa\x44\xcb\xf2\x1e\xa9\xdc\xea\xd5\xa1\x86\x3e\x2d\x24\x6d\x5b\x33\x1f\x32\xd9\x61\xd5\xf2\xb2\xdb\xdf\xc7\xba\x4d\x79\x5b\x91\xed\x37\xe1\xfc\x26\x5a\x19\x9b\x73\x09\x39\xe5\x64\x51\x00\xa9\xa4\xbe\x1c\x4f\x7f\xbe\x78\x63\x71\xa3\xde\x3b\xf1\xa5\x7d\x01\x16\x9a\x37\x24\x46\xbb\x89\xa7\xe5\x3a\x80\x91\x65\xc2\xef\x04\x94\xbf\xc4\x13\x81\x30\xd7\xee\x4e\xa1\xe9\x23\x17\x88\x58\x1a\xc0\x99\xb1\x20\x26\x36\x49\xe5\x9d\x4c\x05\x2d\x6e\x38\x51\xa4\x9e\x72\x48\x00\x17\xff\x2a\x78\xe6\xe5\x27\xa1\x8a\x29\x42\x87\xe3\x21\xfd\x4b\x4d\x48\xf3\x01\xa8\x0f\x6c\x58\xe4\xc6\x06\xef\x41\x75\xdc\x4f\x7d\xeb\x64\x9b\x00\xfb\x46\xaa\x3f\xd8\x51\xed\x58\x5f\xa8\xca\x4b\x60\xb6\x78\x88\x38\xa0\x00\x80\xc0\xb7\x1d\x0b\x91\x67\x74\xad\x65\x7c\xaa\xcd\xaa\xb5\x7c\x22\xad\x07\xbc\x07\xfb\xaa\x3e\x4f\x5c\xbb\x59\x55\xd5\xc7\x89\x3c\x66\xe9\x1e\xe3\x82\x6d\xa4\xda\x8f\xe4\xb8\xc0\x02\x85\xc7\x68\x54\xe8\x27\x88\xd3\xd5\x0f\x73\xe8\x07\xdd\xfe\x78\x97\x19\x65\x91\x4c\xb9\xe4\x9e\xee\x55\xc0\xcf\xaf\x02\xee\x6b\x0a\xad\x50\x88\xb6\x54\x58\xa8\xa6\xd1\xad\x66\x02\x15\xa5\x75\xb9\x52\x54\x96\x85\x2f\x35\xa2\x05\x7d\xa8\x81\x4b\xa0\x0a\xdc\x81\x4d\x50\xc3\xe5\x47\xe9\x35\x2a\xd3\xd2\xab\xd6\x75\x6a\x06\xda\x1d\x51\xb4\x52\x84\x0b\xba\xf7\xa7\x21\x41\xa0\x89\xd6\xc8\x50\x27\xde\xad\x79\xfa\x23\xcf\xb8\x4a\x44\x7e\xa1\xc6\xb9\x30\xcb\x53\x97\x1a\xda\xd6\x05\xc9\xb2\xf6\x08\x67\x99\xe6\x69\x7f\x48\xed\x99\xa4\x17\x80\x06\xbd\x64\x36\xe7\xa3\x91\x4c\x80\xf5\xa9\x34\x0a\x5b\x31\x22\xbf\x93\x89\xa8\xa0\x78\x62\x48\x13\x57\xd5\x4e\xba\xe5\x36\x75\x48\x6d\x82\xc8\x1d\x72\xd9\xb7\x0c\x3a\xda\xdc\xb3\xb7\x57\x94\x23\x1e\x79\xb6\x4f\x7e\xb9\xaa\xbe\xde\x54\x6c\x61\x09\x37\x5d\x91\xe8\xb4\xf6\x00\x2f\x2e\x17\xc7\xf7\xd3\xe9\xb9\x53\x0f\xde\xcd\x84\xba\xb2\x3c\xb9\x5d\x77\xb0\xeb\x1e\xa7\x2b\x34\x0e\x75\x39\x4d\xd8\xb4\xf3\x61\x6a\xdf\x79\x59\x3b\xc6\x0d\x2b\x4a\xab\x56\x8a\x27\x11\x22\x70\x6d\x49\xfd\xb9\xac\x0e\x80\x5d\xaf\x7f\x7e\xed\x44\x18\x51\xeb\x7e\xb7\xd4\xa1\xe1\x6e\x6f\x44\x22\x1a\x22\x4d\x96\xef\xea\x62\xe3\x12\x67\x48\x28\x5d\x8c\x27\x75\xa8\xe5\x4c\x60\xec\x62\xa6\x13\x6e\x05\xf9\xf4\xe9\xdd\x34\xa0\x29\x97\x85\x9f\xaa\xd8\x42\xed\x87\x61\x05\x09\x88\xf1\x78\xe9\x9b\x76\x6d\xa9\x54\xdf\xb9\x3d\x17\xf7\xc7\x54\x82\xaa\x7f\x2f\xed\xa4\x4f\x1c\xe1\x18\x06\x7a\xfc\x15\xe6\x59\x6e\xe5\x8a\x25\x3c\xeb\x14\x53\x0c\x2d\xe3\x4b\x85\xc9\x7b\xd9\xbc\x1f\x30\xea\x29\x8c\x12\xa3\x07\x94\x4e\x05\x73\xc7\xda\x49\x40\xec\xf0\x47\x61\x39\x1b\x09\x6e\x8b\x5c\x1c\x3d\x3e\xc9\xf0\x11\x70\xf1\x17\xa5\xca\x0a\xb1\xcf\xf7\x13\x81\x51\x11\x97\x21\xdf\x10\x9c\x88\x2c\x15\xee\xee\x7d\x72\x7c\x79\x94\xdb\x11\xef\x94\x17\x56\xf7\x8d\xc8\x00\xcc\x17\x3e\x8f\x5f\xdf\xb0\x5e\x52\x87\xc0\x93\x51\x91\x61\x0a\xa5\xd7\x2a\x29\x1e\x87\x12\x34\xdd\xae\xc2\x12\x52\x80\x8c\x0f\xe5\x8a\x53\x39\xf3\xca\xfa\xb1\xc3\x54\x9a\xdb\x5e\x09\xa5\xda\x63\x83\xc1\x60\x3b\x21\x5a\x6f\x5f\x5d\x6d\x10\x0f\xff\xf6\xd5\x55\x67\xec\x25\xd7\x76\xa7\x49\xb5\x88\xf6\xb1\x6e\xfc\x57\x27\x74\x11\x82\xed\x14\x0f\xd5\x33\xea\xa6\x44\x18\x23\x8f\x8d\x93\x56\xa3\xce\x5a\xd6\x63\xc3\x31\xdd\xa8\x71\x26\x5b\x87\x1c\x7a\xf4\x8c\x97\x06\x79\xe6\xed\x35\x35\x50\xc9\xf6\xba\x80\x97\x31\xdd\x19\x5a\x4c\x47\xff\xb4\xbb\xd6\xe9\xf2\x2d\x80\x07\x36\xf1\x43\x44\xec\x03\xf4\xd5\x14\xb1\x35\x12\x4d\xb9\xd0\xf0\x18\x20\x84\xdd\x24\xa7\x45\x66\xe5\x2c\x8b\x78\x31\x88\x54\x9a\x22\x0e\xf7\xb1\x07\xfb\xd8\x83\x2f\xd8\xf0\xf4\xa5\xc6\x1e\x0c\xc5\x84\xdf\x49\x1d\x80\xab\xca\x58\xa4\x27\x17\x85\x10\x86\x16\x07\x21\x84\x79\x57\xd5\xd7\xc6\x9d\x76\xea\x69\x19\xf3\x0a\xe7\x1b\x6a\x39\xdb\x8a\xee\xfa\xbb\x58\x01\xec\x61\xe7\x76\xc7\x92\x05\x3d\xde\xe4\x18\xfa\x6a\x75\x3b\x55\x5a\x55\x3d\x12\xe1\xd1\xde\xdf\xf4\xd4\x39\x5a\x67\x7f\x53\x6c\xa3\x2d\xa5\x19\x6f\x9e\xa5\x68\xfa\x0c\x12\xa7\xb6\xaf\xe6\xc3\x59\xda\xa9\xd3\xa9\xbc\x3f\x35\x4b\xce\x9e\xf5\x3f\x1d\xd6\xbf\xf7\x39\xb5\xd3\xfe\x2d\xb9\x9c\xaa\xec\x7b\x25\xfd\x27\x49\x25\xe6\xd6\xdc\xe2\x82\x63\x88\x5d\xe7\xb8\xe9\x91\x54\x3c\x93\xbf\xb5\xe3\xa1\xbe\x0a\x8d\xe0\xbe\x29\xa6\x67\xfc\x5f\x45\x49\x9c\x90\xb0\x92\x57\x8b\xec\x55\x58\x4c\x0e\x01\xf8\xa6\x5c\x09\x65\x33\x47\x95\xa7\xfa\xce\x93\x30\xbc\x5b\xa4\x1f\x76\x25\x61\x96\x9b\x5b\x73\xcc\xd3\xa9\x54\xd2\x58\x91\xf7\x13\x04\xe3\x7d\x24\xd1\x7a\x7c\x41\xe4\xba\xf8\xb1\x7a\x0f\x51\xac\x92\xa6\x62\x43\xe6\x43\xa8\x85\xbf\x52\xfc\x6a\x4f\xbf\x99\x70\xd3\x66\x9e\xbc\x74\xcf\x3d\x87\xf1\xdf\x29\xd3\x8d\xe0\x75\x2f\xf3\xaa\x56\x89\x6f\x6b\x3b\xb4\x81\x05\x20\x4e\x16\x5c\x58\x65\x9d\x0a\xe4\x0d\x8e\xc3\x89\x1c\x0d\xc2\x52\xb1\xbf\x96\x03\x66\xe7\x3c\x21\x4b\x31\x98\x7b\x28\x96\x6d\xb1\xf6\x1b\x71\xda\x84\x27\x13\xc1\x0e\xe5\x40\x0c\xdc\x4f\xc2\x26\xe9\xd1\xde\x30\xb0\x37\x0c\x7c\xc1\xd2\xc1\xde\x30\xe0\xa8\x32\xba\x25\x9e\x86\x12\xac\xd3\xcd\x2c\x00\x6f\xb4\x01\x32\x81\x7c\x5a\x0f\xc1\xda\x9b\x46\xcc\xa7\xf4\xbf\x5c\x86\x4a\x5c\x64\xd3\xf7\x8e\xa6\xf7\xde\x0e\xfe\x04\x8d\x03\x6e\x5d\x3e\x95\x5d\xc0\x31\xa6\x2d\x88\x84\x3a\x15\x27\x68\x86\x6f\x65\x73\xd4\xa6\xf4\x4c\xc7\xe2\x44\x88\x81\xd6\xa9\x78\x66\xea\x30\xb7\x8d\x80\x48\x8e\x38\xf8\x63\x43\xed\xbb\x58\x0c\x6a\x23\x6d\xf6\xef\xa1\x5b\x76\x29\xd6\xee\x46\xe8\xa6\x6f\xa3\x3e\xc1\x31\xda\xf3\xa0\xd6\x3e\x28\xa6\xc7\xce\x1f\x90\xbd\x21\xe2\xc3\x85\xf2\x7f\x6d\xc7\x0f\xe8\x36\x81\x5c\xcd\xed\x02\x49\x70\x48\x03\x5f\x82\x23\xe4\xc6\x59\x75\x56\x3b\x06\x9d\x16\x99\xe3\x4f\x79\x91\x45\xf6\x9c\x66\x51\x0f\x5c\xfd\xb9\x48\xcf\x0a\x37\xee\xab\xf0\xf2\xc5\x58\xe9\xf0\xf3\xf9\x83\x48\x0a\xdb\x2e\x87\xb8\xfd\xa1\x6f\x43\x6d\xba\x2c\x63\xd8\x39\xd4\x3f\xa0\x07\x6c\xa6\x53\x90\x1d\xdc\x98\x49\xe2\x37\xdc\x4a\x43\xc5\x17\xc3\x2c\xc4\x83\x63\x9e\xe0\x09\x8b\xa0\x84\x80\x60\xf8\x42\x4c\x3d\x36\x2c\x2c\x93\x16\x98\x6a\x32\xd1\xda\x08\x22\xa6\xd8\xef\x9d\xd4\x20\x9d\xe0\x76\xe6\x58\x58\x9a\x28\x51\xd4\x3d\xfa\xaf\xcb\xd7\xa4\x61\x53\x80\x24\xf6\x2b\xe3\x05\x5d\xd7\x4d\x59\xa1\x0d\x12\xc9\x8d\xe3\xd2\x53\xd7\xe9\xbd\x90\xe3\x89\x35\x3d\x06\xe2\x5d\xc8\x49\x2d\xbb\x9d\x0a\x28\x5d\x9d\x65\x7e\x08\xf1\x3e\x95\x79\x34\x86\x1d\xd6\xf3\x64\x7a\xfe\xf9\xc2\x1e\x35\x2e\x57\xcf\x49\x96\x83\xa3\x1e\xa3\x60\x60\x27\xc1\x14\x53\xb7\x74\xd2\x7a\xd7\xbe\x9d\xe4\x10\x7d\x02\x4b\x91\xd1\x87\x75\xa5\xca\x95\x93\xe0\x78\x0a\x19\xee\x37\x07\x38\xbb\x9b\x83\x50\xd2\xaa\x98\x7a\xa8\x13\x98\xa1\x4f\xce\xc2\x6c\xe6\x1c\xf1\x0b\xe0\x5d\x78\x72\x5e\x8e\xee\x2f\xe1\xa5\x43\x73\x54\x2e\xe7\x44\x8e\x27\x7e\x35\x79\x8e\x4e\xd3\xea\x2e\xec\x34\x3c\xe8\xd2\x7f\xa5\x5c\xdb\x6b\x91\x2f\x44\x11\x96\xee\xe0\xe6\xfd\x58\xfb\xce\x10\x0a\x41\xd8\xc6\xca\x41\x58\x72\xec\x61\x7d\x9c\x0c\x38\x15\x96\xb9\xeb\x53\x1e\x07\x2b\x1d\xb1\x22\xf0\x73\xbc\x82\x24\x2c\xfa\xfb\x97\x32\xed\x6b\x38\x52\x30\xc4\x26\x23\x48\x04\x37\xa1\x78\x0e\x8d\x42\x4f\x05\x06\x72\xb1\x14\xa6\x0f\x43\x10\x7e\x0d\xd8\xa1\x18\x8c\x07\x2c\x2d\x04\x85\x2f\xa2\xf4\x7a\xd4\x8b\x04\x00\xb8\xc7\xee\x9e\x12\x98\x87\xcd\x41\xff\x8f\x92\xe9\xc5\x9d\x24\x24\x14\xd7\x39\x08\xcf\x4e\x40\x86\x99\x6c\xca\xd4\x21\x3c\x45\xaf\x95\xba\xee\xde\x3b\x75\xe7\xbb\xb2\xbb\x4d\x14\x3b\xb4\x2a\xb9\x6b\x12\x7e\xaa\xf3\x59\x5e\x99\xc8\x4a\xde\x6a\x22\x71\xa4\x3d\xaa\x97\x1b\xfb\xb3\xe0\xb9\x1d\x0a\x6e\xaf\x65\x6b\x10\xd8\x6b\x6e\x2c\x1c\x23\x76\x2f\xd8\x58\xdb\x72\xab\xd0\x2a\x84\x85\x29\xc3\x1c\x36\xae\x91\x52\x91\xab\x61\x4c\xb5\x2b\xe6\x06\x7d\x9d\x73\x65\xa0\xa3\xce\xa3\x26\x38\x05\x5a\x61\x8b\x1d\xe0\x49\x71\xe4\x9b\xc4\x51\x38\x82\x80\x8e\xb3\xbb\x09\x4c\x85\x31\x7c\xdc\x1a\x73\x5b\x4c\xb9\x82\xe0\x0f\x3e\xcc\xdc\x45\x82\x17\x98\x54\x29\x40\x61\xa9\x71\xa8\x27\x86\x46\x9d\x0c\x66\x19\xd6\x64\x8d\xca\xa0\xdc\xb4\x52\xa1\xc3\x61\x2e\xc5\xe8\xa8\x02\x91\x11\xaf\xe3\x33\xb3\xf1\xb7\xbb\x7a\x0e\x4b\x24\x8c\x94\xc2\xac\x48\x06\xbb\xce\x0b\xd1\x63\xaf\x78\x66\x44\x8f\x7d\x50\xb7\x4a\xdf\x77\xff\x7a\xc7\xe4\x30\x60\x61\x4d\x67\xfa\x71\x32\xdd\x29\x64\xe8\xac\x08\xee\xaa\x37\x8c\x2b\x7d\x30\x92\x03\xa2\x21\x96\x29\x3f\x00\x40\x99\x58\x2a\xc1\x62\x8a\x21\x92\xe6\x43\xf1\x90\x64\x05\xb2\x5e\xd2\x7d\x8f\x82\x4d\x55\x69\xd5\x57\x72\x45\x34\x0a\x7e\xe5\x0d\x6f\x8b\xc3\x3e\xf5\x6d\x50\x12\x0d\x21\xaa\x08\x21\xf6\x16\x95\x85\xd0\x68\x03\xd2\x1c\xde\x5d\x58\xc8\xcd\x36\x61\x85\x4d\xb5\xd6\xb0\x66\x1a\x37\xf5\x33\x3a\x92\x63\xc6\x8d\x91\x63\x85\xac\xd1\xbd\x3f\x70\x6a\xf3\x20\x1e\xea\x0a\xdb\x5e\x62\xe5\x5d\xdb\xe9\x3c\x81\x06\x50\x32\x38\xa7\x10\xbf\x64\x22\x92\x5b\x60\xb2\x22\xf5\xe3\x08\x32\x98\x44\xa4\xa9\x3b\x91\xcd\xb1\x96\xf3\x80\x51\x17\x20\x08\x04\x6b\x94\x8f\x7a\x8c\x6d\xb7\xa4\x64\xfa\x29\x9e\xf8\xb9\xe1\x37\x7a\x4c\x57\x9b\x3b\x7a\xfb\x57\x77\x13\x7f\xd2\xba\x6c\x94\x8a\x99\x40\xa1\x4f\x2b\xe6\xe1\x61\xb9\xb5\x62\x3a\xf3\x25\xab\x0a\xc2\x83\xaa\x7d\x80\x70\xcb\xc0\x27\xc9\x15\x13\x79\xae\xd7\xa1\xcc\xcb\x6f\x5d\x8d\x1e\xf8\x3d\x6b\x5b\x75\x3f\xb2\xce\xeb\x0e\xab\x4b\xb2\x4a\x61\xc4\x80\xfd\x32\x11\x6a\xc9\x91\x70\x9b\x44\x76\xbb\x5e\xd9\x43\xd9\x3d\xb9\x62\x8c\xd1\x89\xe4\xd1\xc7\x66\x7c\x9e\x69\x0e\x18\x45\x19\x44\x32\x63\x54\x2a\xcf\xb4\x1a\xfb\x32\xe0\xb9\x48\x74\x9e\xc6\xec\x23\x04\xe4\x63\x2f\x91\xa2\x03\x17\x96\x6c\xb8\x60\x12\x86\x57\xad\xf6\x6a\x94\x93\xaa\xe8\xd3\xe5\xe0\x7a\x04\x81\xe5\xd7\xa5\x7c\x51\xaa\xb0\xa3\x83\x72\x6f\x21\xa2\x11\x67\x1b\xbc\xcd\x74\x95\x4a\xb4\x26\xea\x61\xc2\x0d\x1b\x0a\x27\x5a\xc4\x4b\x6d\x35\x01\x3f\xff\xe2\xa3\x9c\xff\x5a\x0c\x45\x26\x40\x49\x0b\x58\x5c\x50\x58\xc5\xe6\x98\xc5\xcb\xa6\xfc\xb6\xf9\x8c\xc1\x6f\x78\x21\xe8\x97\xe1\x1c\x52\x19\x40\x91\x52\x60\x97\x96\x29\x0f\x86\xdd\xca\x48\xfc\x06\x04\xab\x3e\xdc\xfb\x30\xe9\x1d\x9c\x55\xb8\x04\x2d\x07\xf5\xdc\x3d\xaf\x54\x6c\x9c\x43\x5d\xb5\x4c\x4c\x71\x5f\x54\x22\x33\x3f\x97\xc5\x83\x48\x4a\x40\x65\x41\x06\x0c\x3a\x45\x2b\xb5\x4e\x92\x22\xef\xa1\x26\x8b\x48\xc7\xbd\xda\x65\x2e\x17\x68\x79\xff\x78\x5a\xa3\x4b\xe5\x76\xbb\xa5\x23\xc4\xf7\xc3\xb5\x8e\xae\x01\x1c\xf1\x85\x8f\xd4\xfb\x81\xb7\x74\xee\x37\xb2\xf1\x18\xa0\x76\xbc\x30\x51\xa7\xc2\xa4\x72\x84\x59\x0f\x3e\xdf\xe5\x7e\x22\x33\xa7\x9c\xa8\xc4\x7d\x20\xac\x11\xcf\x33\x29\x72\xa4\x52\xc6\x2b\x36\xfa\x5e\xf9\xcf\x97\xd3\x71\xaf\x61\xb3\xa3\x52\x1b\x23\x8c\x46\x00\xa7\xca\x75\x96\x0d\x79\x02\x25\x80\x2a\x44\x35\xf6\xa0\x18\x9d\xdd\x09\xc6\x93\x5c\x1b\x13\x2e\x40\x2e\xe0\xc4\x0f\xd8\x6b\x6e\xeb\x83\xf1\x87\xba\x5c\x0a\x2c\x12\xd6\x40\xc6\x8e\x3c\x73\xe8\x30\x26\xf0\x34\x90\xcf\xc7\x7d\x33\xe1\x50\x00\x1f\x2e\x63\x61\x50\x43\x9b\x69\x63\xe4\x10\x81\x1e\xfd\xc8\xc1\xc8\x00\xa7\x75\x38\x67\x23\xf9\x10\x2e\x58\x8d\x91\x4a\xb5\xb8\xc5\x58\xd2\x33\xe1\x8a\x8d\x24\x19\x24\x30\xa2\x76\x41\x7b\x4a\xc5\xb0\x18\x8f\xa1\x74\xd8\x9c\x19\xc1\x73\x27\xad\x8f\xa3\x8f\x97\xf2\x75\x85\x92\x64\xda\x9f\x7b\x94\x65\x26\x4e\x2a\xef\x07\xa9\x3c\xba\x75\xc1\x76\x04\x8d\x1d\x25\x13\x7f\x61\xa4\x15\x20\x1a\x3d\x2c\x70\x60\x7d\x3a\x87\xfd\x0e\x7d\x53\xd1\xf0\x61\x11\xaa\xf1\xe1\x71\xc8\x42\x01\x29\x63\xf9\x50\x66\x4e\x0d\xa7\x4f\xe1\xbb\x56\x3c\xd8\xfa\xfe\x13\xc7\xee\x6e\x05\xcd\xe2\xad\x5c\xa1\x4b\x95\xbc\x7d\x3d\x2e\x38\xe2\x59\xc6\xfc\xd9\x81\xcc\x14\x69\x99\x50\x09\x04\xbb\xe7\x26\xf0\xf6\x6e\x52\x01\xf2\xab\x3a\x19\x1f\x8a\x44\x4f\x49\x30\x6b\x92\x43\xca\x8c\x18\x18\x57\x2a\x10\x81\x4f\x44\xf8\x9b\xf5\x2e\xa5\x81\x95\xcf\xb0\xac\x21\xd8\xaf\x12\x4b\x50\xad\xd2\x78\xa9\x27\x9b\x33\xe9\xc8\xe0\x54\xf8\x4a\x03\x9c\xbd\x78\xde\x9f\x4a\x55\x58\xc1\x8c\xe6\xb7\x6c\x26\x72\xa9\x53\x44\x21\x75\x73\x0b\x43\xc9\x28\xfd\x08\x78\x9d\x1e\x35\x8d\xa0\x74\xe7\x35\xca\x60\xae\x09\x11\x6b\x9a\x85\x40\xb4\x3b\xe0\xc3\xf8\x61\xb8\x8c\x4b\xd7\x67\xc0\xde\x6a\xeb\x6d\x9c\xa3\x06\x92\x8d\x3c\x55\x40\x8a\x82\x92\x19\x3b\x74\xfb\x42\xe2\x06\xa5\x22\x90\xbd\xa6\xba\xee\xee\xda\x64\x46\x57\xc0\x1c\xe3\x8e\x7a\x6e\x4c\xdc\x6f\x72\xa5\xc3\x68\x72\x3c\xbb\xe7\x73\xe3\xa8\x41\x31\x15\x29\x1b\xc3\x88\xdd\xe5\x8f\xee\x0a\xf0\x76\x68\x41\x00\xb9\x65\xb4\x03\x39\x28\xa6\xc2\x4e\x34\xac\x8b\xdf\xf8\x92\x74\x47\xd7\x2b\xda\x67\x25\x8c\xe9\x61\x51\x7e\x69\xc8\x94\x8c\xc0\x0c\x39\xad\x65\xa9\x77\xb9\x23\x42\xe4\x63\x54\xd8\x22\xdf\xd8\xea\xf4\x18\x8d\xe6\x8c\x8b\xa9\x56\xe7\x0b\x65\xcb\x9b\x94\x9a\x5a\x5b\x08\xb8\x31\x84\x39\xad\x67\x82\xd4\x97\x14\x5a\x19\x96\x17\x4a\x91\xf8\x0e\xd1\xca\xb1\x35\xaa\x19\xc8\x19\x89\x91\xef\xbf\x4d\x5a\xf1\xfe\x6d\xed\xb1\x61\x23\x49\x2e\x83\x72\x6b\x51\xaa\xd1\x3a\xcb\x59\x9d\xe2\xba\x8b\xd9\x1e\x2e\x4b\x0d\xbc\x03\xe0\x7e\xa2\xb3\x32\x68\xc9\xd1\xba\xb7\xe0\xc5\xc0\x09\x41\xf8\x07\xc8\xb0\xb9\x18\x43\xe4\x8a\x17\x5c\xa6\xdc\xfd\xb5\x8f\xab\x7d\xe2\x01\x21\xab\xe2\x6a\x5f\xd3\xc6\x83\xeb\x6a\xa7\x81\xad\x3a\xdd\xc7\xb4\x3e\xe1\xa8\x95\x7d\x4c\xeb\xd2\xb8\x85\x6d\x85\xb3\xc6\x9e\x99\x65\xe4\xf9\x04\x25\x3c\x43\xed\xea\x90\x09\x85\x8a\x64\x76\x6f\x60\xd2\xa3\x8a\x37\x18\x72\x5c\xd9\xbf\x0a\x01\xd6\x03\x7d\x07\xc9\xc0\x4e\x72\xf1\xd7\xfc\x2f\xde\x27\x0c\xb2\x55\xed\x0b\xef\xde\x07\x5f\x2e\x8d\x21\x22\xa6\x65\x78\x4b\x75\x94\x4e\x2a\x69\x0d\xa0\x50\xd1\xdc\xaf\x5d\xe3\x2e\xa5\xcf\x17\xde\x69\x4b\x54\xc5\x4f\x0e\xd8\x49\xe0\x65\x4d\x43\x04\xe9\x1b\xfe\x09\x1e\xc7\x77\xef\x77\xec\x83\x7d\x5b\x9b\xc3\x46\x41\xb4\x51\x1f\xef\x4b\x4f\xe6\x1a\x47\xa8\x04\xb4\x44\x2a\x1a\xd6\xc4\x1d\x83\xe0\xc4\x43\x8e\xd5\x63\x9c\xdd\x8a\x39\x32\x37\x88\x6a\x16\x39\x0f\x8d\xa1\x08\x02\xf1\xde\x5b\x31\xf7\x26\xa6\xa2\x3d\xc3\x26\x2e\xa7\xe1\xfb\xdb\x4a\x49\x0d\x3c\xea\x50\x74\xc1\xeb\x41\x61\x72\x6b\x80\xe0\x2d\x8c\xad\xed\xa0\x45\x25\xa0\x6f\xc5\xfc\x99\xa1\xc2\x10\x5a\x41\xe2\x39\xf8\x0a\xe8\xb2\x79\x11\xe0\x23\xcf\x64\x1a\x16\x12\x4f\xde\x85\xea\x39\xd5\xc5\xfd\xe7\xfc\xc1\x09\xb0\x3d\x76\xa6\x85\x79\xab\x2d\xfc\x39\x60\x3f\x91\x69\xf2\x75\xf7\x4a\x21\xf8\xbd\x36\x21\x4a\x31\x38\xda\x6e\x70\x31\x2b\x35\x41\x41\x0b\xbb\x2d\x8d\x63\x66\x3a\xf7\x83\x04\x61\x0b\x23\xda\xb1\x8b\xd8\xfd\x02\x46\x80\xc6\x3e\x70\x6e\xae\x9f\x78\x76\x2d\xdd\x2d\xef\xea\x27\x48\xe5\x7f\xbd\xf4\x65\x8a\x54\x36\x52\x8d\xb3\x10\x00\xd2\x23\x39\xb6\xac\xad\x6e\x45\x3e\xcb\x45\x59\x5e\x9d\x2a\x85\x90\x66\x8c\xfd\xa1\xfc\x98\xf1\x44\xa4\xde\xf1\x0f\xb2\x07\xb7\x62\x2c\x13\x36\x15\xf9\x18\x2a\x76\x24\x93\xed\x17\x4b\x5a\x97\x22\x00\x55\x69\x21\x05\x45\x96\x01\x68\x28\x64\x1e\x2c\x92\xc4\x10\xe5\xa2\x74\x89\xda\x87\xa5\x05\xa2\x98\x09\xe4\x08\x18\xc5\x72\xf2\xf6\xcc\xd7\x2d\xb8\xd6\x33\x9d\xe9\xf1\x3c\x1e\x0b\x95\x9c\xf3\x46\x05\xa0\x37\xc5\x90\x6e\x84\xd7\xc0\xe2\x17\xda\xb5\xb1\x7a\xa8\x4d\xdb\xe9\x5e\x42\xf9\x2b\x33\x19\xce\xbd\x56\x0d\xb4\x63\xb7\x00\x3d\xcb\x28\xf7\x12\x31\x18\xe6\xfa\x4a\x8a\x2c\xdd\xe2\x34\xc1\x83\xfa\x24\xa6\xd9\xf9\x64\xb7\x66\xfb\x50\x83\xe5\x89\x3e\x88\x91\x15\xdc\x87\xbe\x6c\x9e\x53\x5a\xbb\xf8\x88\x6b\xae\xed\xc6\xf0\xa6\x1a\x06\xb0\x09\xde\x81\xb1\xb0\x0d\x5e\x6d\xd4\x2d\xdc\x85\x39\x9b\x2b\x3e\x95\x09\x99\x09\xd0\x60\xe2\x21\x78\xd8\x98\x5b\x51\xd2\x41\xc5\x87\x59\x04\x3b\xe5\x2d\x0b\xc1\xb2\xe8\xe3\x96\x76\xe1\xa5\xf1\x81\xa1\x67\xad\x68\xda\xb3\x5c\x24\xa8\xf6\xbc\xd5\x16\x2c\x07\x64\x3a\x31\x48\x6e\xc1\x58\x16\xc6\x39\x60\xef\x31\xcf\x89\xe2\xbd\xc0\x59\xf6\x62\xf0\xe2\x9b\x01\x33\x42\x94\x5a\x86\x34\xc6\x31\x24\x52\x34\xbe\x7f\xf1\xe7\xef\xbf\xef\x8c\xa5\xa3\xd3\xd3\x8b\xb3\xf7\x6d\x39\x3e\xd8\xa2\x2e\xf3\xce\x74\xca\x2e\x2e\x59\x0e\x26\xb2\x60\xba\x8f\x43\xca\x3a\x0f\x01\x51\x35\xf2\xd6\xa5\xbb\x38\x8b\x63\xc7\x2b\x4e\x77\xd4\x39\x75\x91\x7a\x7c\x8e\x90\x68\x83\x8e\x81\x97\x54\x40\xf2\x92\x9e\xbe\x0d\x75\x22\x5f\x1e\x1f\x57\x1f\x5d\xe1\x21\x4d\xdc\x6e\x5f\x9c\x61\xa3\xce\x31\x26\xbc\x62\x85\xeb\x72\x09\x88\xdc\xe0\x9b\x3b\x25\x37\xd7\x5c\x2e\xa7\xa1\x85\xa2\xa8\x40\x77\x7d\x5a\x26\xf0\x21\x6e\x07\x32\x70\xae\x33\x43\x24\xd5\x3f\x09\x6e\x0b\x25\xee\x21\xc8\x77\xc0\x7e\x9c\x7b\x33\x6f\x2f\x90\x98\xa8\xa7\xb5\x93\x8e\x41\x21\x83\xff\x3d\xfe\x6a\xca\x55\xc1\xb3\xbe\xfb\xa3\xef\x53\xc5\xf2\x6e\x65\x66\x3b\xd3\xd6\xd5\x31\x23\x9b\xa4\xe0\xa9\x95\x56\x55\x8a\x45\x6f\x15\x4f\xbd\x2d\x2a\xb4\x65\xb9\xe0\xc9\x84\x93\xeb\xad\x8c\xef\xfc\x1b\xe8\xb6\x14\x2c\x59\xbd\x2e\x3d\x26\x47\x8c\xdf\x71\xf9\xf8\xed\x28\x87\xbc\x63\xde\x79\x12\x27\x14\x94\x67\xb9\x66\xc9\x00\x79\xb3\x0f\xb2\x67\x1f\x35\xa3\x4a\xe8\x64\x63\x6b\x92\x59\xa1\x31\xbc\xb9\x10\x3c\x92\x01\x28\xdf\x8a\xcb\x72\x52\xb6\xaa\x93\xce\x12\xbe\x35\x1c\x84\x12\xa5\x32\xec\x03\xb0\xb1\x32\xa6\xb7\x0a\x03\x75\xca\x67\x3c\x91\x76\xfe\xc4\x41\xd9\x13\x1a\x66\x5b\x04\x19\x35\xa9\x2f\x92\xd5\x16\x3c\x65\x0b\x4b\xb5\x31\x70\xd4\x4c\xe4\x06\x1c\x0c\xb6\xef\x31\xa4\xc2\xf8\x9e\xf6\x2a\xfa\x88\xc4\x36\x42\x10\x22\x8c\x7d\x6a\x75\xd0\x5a\x3d\xf1\x09\xb9\x58\xd5\x30\xc7\xf5\x11\xc7\xe3\x0b\x1f\xba\xd9\xf5\x85\x2f\xe3\xac\x3f\xc3\x95\x47\xd1\x74\x9d\xe8\xd5\x4a\x40\x43\x44\x88\xd9\x9d\xe4\xf0\x47\x8a\x62\x6d\x10\x52\x93\x8a\x60\xfb\x48\x7f\x62\x25\x41\xcd\x4f\x22\x5d\xe2\x2f\x5c\xee\xa4\x83\x09\x75\x70\x0a\xae\x3b\xca\xba\xe7\xb2\x36\x50\x39\xe5\xe3\x4e\x4c\x2f\xaa\xb5\x07\xaf\x84\x02\x16\xaa\x92\x39\xb7\xfd\x03\x79\xea\x3f\x7c\xe1\xbe\xbb\xec\xde\xba\x51\x5c\xa8\x51\x5b\xc5\x94\x2b\xd4\xf1\x65\x6a\x8e\x8b\x42\x62\x46\x14\xe6\x8d\x67\x73\x1f\x63\x36\x8f\xb8\xf8\x23\x6e\xaa\x7b\x6b\xd3\xdc\x08\x48\xcb\x80\xa9\xd4\x65\xf7\x15\x00\x01\xee\xed\x0a\x48\xc0\x62\x66\xe8\x32\xb8\x80\xc7\xce\x17\x7b\x03\x30\x50\xd0\x9e\xdc\xb1\x10\x77\x22\x67\x33\x9f\x76\x8a\xc6\x42\xa5\xef\xdd\xb3\xb4\xd4\xcd\x3a\xdb\x0e\x91\x8b\x9c\x10\x70\x6c\x87\x03\xeb\x31\x38\x4b\x6e\xef\x41\x67\xdb\x15\xa7\xed\x9d\x5c\x3f\x58\x04\x1c\x5d\x76\x72\x69\x9c\x17\xea\x43\xeb\xee\x06\xe1\x13\x3a\x05\xa1\xc5\xcf\x10\xea\xcb\x08\x76\x48\xf8\x96\x47\xb1\x0f\xe4\x33\x1a\x00\xcb\x83\xdc\x2a\xce\x87\x66\xde\xf8\xbf\xd6\x2d\x6d\xb1\xea\x93\x14\x70\x71\x56\x66\xef\xc0\xb7\x3e\x7c\x88\x7e\x1a\x6a\x6d\xa3\x3f\x6f\xdd\x71\xcf\xbc\xbb\x3f\xd8\xdd\x0d\xd2\x9e\x88\x45\x21\x49\x7a\x5f\x28\x2b\xa7\xa2\xde\x9e\xec\x0c\x4d\x3f\x5f\xe6\xfa\x61\xbe\xd0\xbf\x87\xff\xc5\xc5\x28\x33\x79\xf3\x64\x22\xad\x48\x1c\x97\xea\x12\xa8\x10\x37\x6f\x77\x4c\x9c\x44\x4d\x29\xde\xac\xea\x3b\xeb\x7a\x2f\x69\xfd\x96\x7f\xed\x47\xad\x2d\xbb\x38\x6b\xfc\x48\xe7\xdb\xbf\x6c\xc1\x5b\x45\xb4\xca\x1b\xcc\x47\x67\x34\x8d\x23\xa4\x66\xe6\xd4\x38\x17\x53\x6d\x05\x3b\xb9\xbc\x08\xa1\xa6\xc9\xad\xc8\x5f\x1e\x1f\xbf\x18\x7c\x37\xe8\x50\x2d\xbe\xf9\x3c\xb5\x84\x10\x40\xbb\xf6\x41\x82\x36\xf9\xac\x00\xc0\xd7\x7e\xfe\x8c\x46\xf6\xcd\xe0\xc5\xf7\x83\xe7\xfd\xe7\x83\xe1\x4c\x0f\xbe\xed\xf3\x69\xfa\xfd\xb7\x6b\x8c\xaf\x7e\x24\x5b\x86\xe8\x9b\xb6\x8e\x72\xad\x2f\x47\x77\xa4\xfd\xbb\x4e\x68\xdb\xca\x57\x4b\x9a\xd0\x82\xaa\xe0\xdb\x34\x7f\x0a\x0a\x80\x13\xde\x0c\x75\x17\x22\xd4\x13\xaa\x6f\x4c\xd8\x33\x88\xa1\x13\x27\x71\x4a\x13\x25\xd7\xb2\xd7\x82\xe7\x0a\x9d\xe2\xb0\xb9\x53\xae\x0e\xbf\x3b\xf2\xbd\xf6\x65\x8a\x9c\xf8\xe5\xf1\xf1\x94\xab\x1f\x06\x3a\x1f\x1f\x67\x52\x15\x0f\xee\xcf\xfe\xcc\x49\x61\xee\x5f\xdf\x1d\x97\x2f\x0c\xbe\x1b\x4c\xec\x34\x5b\xcf\xa1\x58\x12\x9e\x76\xa2\xf1\x2e\xa0\x94\x63\xf3\x47\x11\x0e\x4f\x53\x97\x7f\xf2\xdd\x15\x83\x26\x2d\xb7\xe1\x58\xd8\xe4\x58\x9b\x7e\x2e\x32\xc8\x8e\xc5\x2b\x71\x26\x86\x92\x2b\xf6\xd3\xdb\x0f\xc7\x88\xab\xfd\x03\x3b\xbc\x9f\x08\xf1\xdb\xfc\xa8\xfb\xcd\x88\x78\x45\x8b\x48\x19\x1a\x6d\x7c\x56\xca\xd3\x56\x3d\x1b\xd7\x95\x43\x43\xc6\xcc\xc4\x71\xc3\xf7\x22\x65\x3f\x73\x0b\xe8\xcf\x26\x88\x6a\x3c\x49\x84\x31\x83\x5c\xa4\x13\x6e\x07\x89\x9e\x3a\x71\xad\x98\xfa\x08\xb3\x63\xa1\xfa\x1f\xae\x8e\xdf\x8b\xf4\xd7\x9f\xb9\xfd\xf5\xaa\x18\x86\x89\xfc\xfa\x26\x80\x91\x1f\xbf\x38\x76\xc7\xe7\xf8\xfd\xcf\x57\x6f\x8e\xc7\xc2\xba\xcd\xee\xe3\x4a\xf4\x1d\x37\xee\x74\xb8\xba\x08\x08\x88\xea\x02\xbe\xa4\x95\x21\x27\x0d\x6d\xc9\xab\x04\xba\x77\x19\x79\x27\x52\x5a\xb0\x4a\x34\x5d\x8b\x84\x00\xad\x2f\xbb\xe1\xa7\x77\x8a\x02\xfc\x58\x4d\xe9\xa2\x98\x3f\xf7\xcf\x57\xfe\x53\x6e\x37\xef\x73\x69\xad\x40\x3a\x01\xb1\x1e\x7a\xd4\x0b\xe1\xbe\x6e\x8b\x6f\x0e\xee\x5e\xdc\x1c\x74\x3e\xab\xe5\x3c\x56\x00\xbc\xd3\xb8\x70\x95\xac\xa6\x65\x0c\x79\x42\x21\xf3\xdc\x31\x3e\x8a\x23\xda\x4a\x66\x66\xd7\xea\x1d\x1b\x16\xee\x90\x50\xd8\xc0\x62\x84\x51\xea\xe5\xc3\x00\x25\x51\x3b\x08\x8f\x0a\xf2\xac\x67\xed\x85\xa2\x1d\xdb\xdc\xab\x8b\x11\x0d\x9e\x62\xf5\x39\x9b\x49\x81\x39\xa9\xe1\x5c\xbb\x49\x5b\xc1\xfd\x61\x77\x34\x25\xf7\x20\x7d\x3d\x64\x39\x14\x42\x51\x46\x91\xba\xb5\x64\x1c\xf3\x53\xd8\x7f\x5d\xbd\x7b\x7b\xfc\x93\xf6\xfe\x2e\x20\x1f\x98\x60\x81\x81\x09\xa6\x48\x26\x8c\x43\x5a\xa6\xbb\x36\x57\xee\xc9\x60\xca\x95\x1c\x09\xe3\x08\x8c\x2f\x72\xff\x3f\x5f\xff\x1d\xe9\x5c\xc8\x58\x22\x90\x8a\x10\xdb\xe8\x77\x93\x0a\x54\x44\xa6\x84\x7b\x69\x27\x30\xa4\x99\x4e\x69\xd0\xf7\x30\x58\xcb\x6f\x29\xf9\x1d\x63\x29\x33\x79\x2b\x5e\xb2\x1b\xc0\x7c\x8a\xbe\xfd\x7f\x9c\x30\xf4\xef\x9b\x03\xa0\xef\xb9\x60\x37\x50\x6f\xe5\xe6\xa0\x92\x6b\x47\xc5\x70\x17\xea\xfe\x63\x48\x4e\x2e\xc7\x63\x88\x1a\x86\xd8\xca\x3b\xa1\xec\x91\x3b\x47\x72\xc4\x94\x8e\x1a\x87\x3a\x4d\xe1\x8e\x2c\x0c\xe6\x7f\xbe\xfe\xbb\x1b\x49\x75\x76\x4c\xaa\x54\x3c\xb0\xaf\xf1\x8e\x39\x12\xaf\xd3\x23\xa2\xee\x66\xae\x2c\x7f\x00\x27\xf0\x44\x1b\xa1\x30\x79\xcf\x6a\x0c\x15\x01\x70\x87\x7b\x91\x65\x7d\x0c\x28\x4e\xd9\x3d\xda\x18\xfd\x82\x62\xd8\xc7\x8c\xe7\xb6\x91\xe0\x6d\x05\x8b\xad\x4b\x69\x9a\x4f\x1b\x33\xfa\xfb\x2a\xa8\x13\x8f\xba\x5a\xf9\xa0\xad\xf6\xc1\x27\x18\x7f\x37\x48\x47\x3f\x7c\x6f\x3e\x5f\x4d\x22\xbd\x57\x97\xd5\x5e\xc1\xe4\x24\x99\x4c\x7c\xf8\x7b\x44\x14\xa6\x3c\x45\xaa\xc1\xd5\xd6\x51\xc8\xdc\x9a\x80\x4d\x3e\x99\xf7\xc9\x8b\x0a\xa0\x64\x89\x56\xe8\xa0\x48\x1a\x1c\x12\xcd\x8b\x50\xc8\xb6\xeb\xf2\xa1\xf4\x9a\xef\xf6\xdc\x15\x72\xf5\x65\xe9\xc2\x93\x2f\x83\x8b\x86\xec\x53\xcb\x98\x72\xbd\x21\x3b\xbc\xfc\x78\xe4\xe3\xdd\xb1\x7c\x53\x08\x6a\x07\x37\x27\xc9\x62\xc3\x39\xb8\x46\x4a\x47\xb1\xce\xa1\x0e\x10\xb8\x4c\x78\xa6\xc7\x9a\x50\x41\xb6\xed\x6a\xda\xc3\x7b\xee\xe1\x3d\xbf\xdc\x44\x89\x2f\x11\xde\x93\x07\x05\xb9\xbc\x80\xac\x24\x0c\xa1\x22\xd9\x7d\x25\x8c\x09\xac\x33\x03\x76\xb9\x8a\x66\x6d\xcf\x07\xbe\x94\x56\xad\x85\x9b\x56\xa3\xc7\x8f\x29\x1e\x52\x0b\x04\xf0\xee\xeb\x48\xcf\x3a\xa6\x38\x1a\x1f\xe8\xb7\xb0\xaa\x1b\x63\x8b\x3e\xa9\x35\xfc\x44\x30\xa3\x0b\x4c\x37\xb4\xd8\x38\x6d\xa7\xde\xe5\x69\xc6\xe5\xf2\x88\xeb\xc6\xd6\x48\x93\x0b\x23\xf2\x67\x81\x34\x22\x3a\x9a\x4a\x59\x02\x2d\x50\x0b\xad\xef\xfd\x9e\xd3\xee\x39\xed\x9e\xd3\x7e\x49\x9c\x16\xc2\x69\xd0\x22\xc4\x92\x09\xcf\x79\x62\x45\x2e\x8d\x95\x09\x85\x8d\x11\xab\xa5\x6d\x27\x96\x0a\x11\xcc\xbc\xb0\x93\x5d\xb1\x53\xfc\x05\x48\xd5\x36\xd8\x01\x50\xc5\x4f\xc3\x57\x97\x88\x2a\x30\x95\x9d\x73\xd0\x9d\x2c\xdb\x67\x62\xa5\xc8\xf7\x76\xc4\x4f\x57\x23\x8f\xb6\xbf\x46\x96\xc4\xcc\xd4\xe0\x25\xc1\xde\xea\xce\xc0\xec\x2e\xd9\x09\x06\xe9\x65\xae\x87\x62\x1d\xfc\xd1\x99\x7b\x21\xf5\xa6\xd2\xdf\x13\xe2\x28\x79\x80\x9e\x2e\xec\x68\xff\x09\xc0\x8e\x7e\x00\x67\xa4\x77\x10\x84\x1a\xf1\xdc\xfd\x3b\xb7\xbd\xe0\xa5\x2c\x54\x2a\x72\x03\x9c\xce\x0d\x98\xa4\x08\x30\x99\x8f\xe5\x9d\xf0\x01\x66\x01\xbb\xb4\x0d\xb7\x94\x5d\x8c\x28\x91\x1b\x30\x50\x6e\x0e\xde\x0b\x23\x7f\x73\x32\x77\x6e\x45\x7a\x73\xe0\xb1\xba\xb9\xf2\x49\xe4\xa9\xc8\xb3\x39\xe0\x19\x2f\x10\x46\x69\xd8\x50\x20\x7e\xb7\xeb\xa4\x7b\x04\xd9\x22\xe9\x5e\x0f\xc7\x74\x7b\x96\x36\x20\x0d\xad\x20\x28\x4b\xdf\xa8\xd6\x0f\x5c\x22\xcc\x5b\xd1\x9e\xec\xbe\x07\x3e\x79\x02\x02\xfc\x2a\xe0\x93\x32\x8d\x72\x89\x70\xb0\x7e\x2c\xf9\x23\x44\x82\x1d\xa0\xbf\x37\xb2\x6f\xea\x67\x0f\xc0\xf2\xf4\xb4\x9d\x3d\x00\x4b\x77\x31\x74\x4b\x88\x2c\xcb\xd5\x92\xb5\x18\x47\x43\x3e\xb2\xdb\x1f\xad\x2a\xf5\x07\x47\xc1\x9b\x93\x8a\x3b\x99\x00\xba\x69\xca\x78\x96\xe9\x7b\x77\xb3\x08\xaf\xce\xf1\x7a\x9f\xcb\xd6\x0f\x51\x49\x65\x3f\x2b\xe0\x97\x13\x61\xcc\x1b\x80\x72\x6a\xc3\x60\x0e\xad\xca\x00\x90\x58\xef\xa4\x58\x85\x29\x55\x33\xf1\x81\xd0\x9e\x6b\x4c\xf8\xdd\x56\x13\x97\xf0\x73\x7d\xf8\x5c\xff\xc5\xd6\xe3\xa9\xcb\x94\x11\xcb\x57\x26\x77\x47\x51\x61\xc4\xd8\x71\x05\xc8\x8a\xa9\xf8\xcc\x4c\xb4\x3d\x0b\x5d\x31\x9e\xcd\x26\xbc\x9a\xc2\x8d\x25\x24\x7c\x02\x37\x98\xf8\x02\xd8\x62\xb5\x9f\xb2\x08\x4b\x36\x67\xa6\x98\x51\x84\x9b\x1b\x29\x25\x95\x07\x24\x8c\xd2\xf1\x97\x03\x2a\x27\xb5\xae\x77\x18\xbd\x0a\xe0\x3e\x90\x88\x8d\x29\xf0\x8c\x43\x1a\x2b\xed\xa5\x1b\x16\x34\xf6\xc8\x18\xb9\x70\x5b\x54\x46\xef\xfb\x76\x84\xaa\xc2\x9d\x56\x20\xa7\xcd\x03\x4a\x35\x00\x48\xd8\x4e\xa3\xa2\x8e\xe3\x42\x1e\x3e\x47\xdf\x0d\x0a\xe2\xa7\xb8\xcc\xdc\x72\x96\x63\xa3\x95\x41\xc8\x0e\x88\x22\x09\xc0\xad\x08\x5a\xd8\x03\xdd\x2a\xe3\xe0\x08\xf7\xc3\x80\xc8\xcf\xe8\xe3\x80\x4d\x61\xc2\x67\xea\x95\xcc\xe3\x29\x95\x98\x89\x9b\x24\x06\x5d\xcf\x67\x22\x7d\xad\x13\x9e\xd5\x23\xb3\x16\xf4\x09\x2f\xd6\xb4\x41\xce\xf8\xbc\xc1\x9a\xd5\x63\x2a\x95\x9c\x16\xd3\x28\xb1\x70\xf7\x97\xb5\x41\x0e\xeb\xbc\x2a\x7e\x22\x11\x46\xc4\x42\xbe\x94\xa9\x47\x2b\x36\x4a\x6e\x01\xe1\x6a\x8e\xf8\x56\x21\x17\x05\x42\x8a\x0c\xe4\xcd\x3b\x4a\x3a\x94\x80\xdd\xbe\x1d\xcd\xf4\xb5\xfb\x6a\xbd\xb4\x4a\xa9\xfd\xc0\x92\x9d\x66\xdc\x98\xb7\xdd\x43\x68\xae\xa2\xd7\x42\x45\xa4\xd2\x83\x06\x36\xaa\x2d\xa6\x88\xba\xcf\x34\x91\xd8\xb6\x9c\xa0\x37\x71\x49\xd1\xc5\xd9\x94\x8d\x82\x7e\x72\x0f\x81\x5f\x54\x87\xa2\x54\x2b\x97\x4c\xef\x23\xc8\x92\x7a\xc4\x5e\xc9\x4c\x50\xd1\x1c\x69\x00\x41\x46\x8a\x14\xe1\x66\x1d\x9d\x90\x2a\xc9\x8a\x14\x21\x95\xd1\x67\x02\xf1\x61\x01\xd1\x96\xb3\xa1\xb0\xbc\x21\xe9\xb0\xcb\x24\x57\x6c\xd9\xc7\xd0\xc8\x93\x6c\x3a\x59\xd5\x2a\x11\xee\xc1\x42\x34\xc7\x90\x27\xb7\x28\x20\x4b\x43\x73\xde\x45\x78\x49\x6c\x1b\x5c\x4f\x7a\x09\xf9\xfe\xcb\xb2\xfb\x97\x59\x4f\x77\x29\x8b\xf0\xc4\x16\x3c\x5b\x2a\x8a\x94\x8b\x2a\xd8\xe5\xc7\x53\x36\xe1\x5b\x55\xd7\x3e\x91\x48\xd2\x21\xa5\xfc\x7d\x95\xe4\xd3\xb2\x54\x52\xc9\x6b\x26\x1d\xf2\x1a\xff\x11\xd2\xc0\xe9\x2c\x96\x56\xde\xe5\xda\x3a\xc8\x25\x6b\x19\xb6\xdc\xba\xa1\x04\x51\xf6\xef\x05\x0e\xc2\x79\x7e\x56\x31\xa4\x3d\xdb\x6d\xb5\xb6\x76\xb3\xb8\x5f\xc7\xf0\xa9\xdd\x27\x8a\x77\x2b\x98\xbd\xc4\x13\x13\xf2\x5f\x1b\xe7\xb5\x3b\x0a\x48\x92\x67\x7b\x7d\xa2\x95\x6f\x96\x64\x9d\x2c\xa6\xe8\xba\x77\x94\xc6\xc7\xf2\x3b\x5e\x10\x95\x01\x07\x2e\x44\x27\x6d\xe4\xd4\x6c\xe4\x12\xba\x50\x29\xbb\xfc\x88\x06\x33\x5d\xe0\x2a\xf1\x70\x26\x43\xd0\x87\x06\xe4\xca\xd5\xe3\x92\xa6\xc7\x84\x01\x9b\x0b\xcf\xb2\x79\x8f\x71\x76\x9f\xf3\xd9\x4c\xe4\x8c\xe7\xf0\x31\x32\xc6\xd7\xf9\xaf\xaf\x02\x19\x42\x74\x8c\x9e\x0a\xad\x04\x13\x99\x11\xec\xb0\x8c\x2a\x39\x6a\xb3\x6c\xc2\x55\x03\x5e\xb9\xda\xba\x59\xb6\x6d\xb9\xe1\xbe\x8d\x67\x3f\x3e\x92\x9c\x2f\xb3\xbd\x36\xad\x3e\x02\x9d\x23\x8c\x13\x14\x09\x42\x5e\xeb\xc3\x67\x3e\xbd\x15\x6f\xa9\xef\x20\x7d\xa7\xb2\x36\x6a\xff\x0b\x14\x1c\xd0\x68\x3d\x13\xe0\x9d\x7c\x07\xba\x21\xa6\x0a\xb9\xe9\x7f\x24\x79\xab\x00\x5b\x1a\xe1\xa8\xb0\x11\xcf\x4c\x13\xcd\xdf\x00\x26\xa8\xbe\xf0\x6b\x19\xd2\x57\xdb\xd0\xf7\xe6\xf3\x3f\x84\xf9\xfc\xf5\x32\xe3\xf9\x36\xe5\xb0\x4f\xc9\x6f\xf7\xa6\xf1\xbd\x69\xfc\x77\x6e\x1a\xdf\x91\x55\x7c\x2d\x83\x38\xd8\xc2\x89\x99\x77\x89\x19\xde\x99\x12\xc9\xb3\x8c\x41\xf1\x95\x48\x6b\x4c\xb8\x82\xea\xbe\x88\xe3\xb1\x2b\x85\x71\x67\xea\x22\xbf\x37\xe7\x19\x37\x56\x26\x3f\x66\x3a\xb9\xbd\xb2\xba\x15\x87\xe2\xe4\x97\xab\x85\xe6\xb1\xb8\xce\x15\x3b\xf9\xe5\x8a\x9d\x49\x73\x1b\x53\x26\x94\x13\x63\x30\x17\xee\x81\x3d\x9f\x19\x48\x8a\x0e\x41\x0c\x64\x48\x55\x4c\x3c\xcc\xb4\x29\x6d\xc7\x20\xce\x6e\xb8\xb8\x61\x45\xef\x8d\xc0\xd1\x0f\xdd\xe8\xc1\x38\xbd\x81\xcd\xb1\x69\x11\x2a\x3a\x42\x7d\x8d\x7f\x2b\x72\xe1\x96\xa4\x6d\x61\x7d\x9b\xfa\x6a\xba\xdf\xd9\x19\xb7\x1c\x17\x15\xce\x99\xc7\x98\x82\x85\x73\x0b\x36\x94\x5e\x17\x88\x97\x6b\x93\xa9\xf9\x61\xac\x9c\xcf\x2b\xd9\x0e\xef\xe7\xdb\x34\xce\x07\x1e\x38\xc6\x24\x13\xf1\x49\xa6\xe4\x3e\xb8\x40\x56\x1a\x27\xd7\xc1\x7e\x72\xd2\x54\xec\x6c\x81\x0a\x41\x58\xb6\x37\xa9\x80\xc7\xc6\x63\x12\x7e\x79\x00\x7d\x62\x36\x19\xb5\x5a\x65\xc4\x6c\xf2\xea\xaa\x72\x54\x98\xfb\x8d\xbd\xba\x6a\x38\x1e\x40\x4f\xcc\x84\xe7\x90\x45\x32\xd3\xe9\x33\x03\x28\x59\x56\x4e\x37\xb9\xce\xf8\xf1\x8e\xa7\x43\xaa\x54\xb4\x39\x12\x4e\xa1\x41\x75\x26\xf8\x52\xe9\xfd\x22\x2a\x18\xf4\x77\x28\x01\x5a\x02\x1d\x57\xc8\x61\xc3\x51\x21\xe0\x8c\x80\x67\xfc\xf3\xf9\xc9\xd9\x31\x25\x72\x9b\xe3\xe9\xdc\xfc\x2b\xeb\xe3\x27\xfb\xb3\xf4\xf8\xfd\xf9\xc9\xd9\x9b\xf3\xc1\x74\x13\x50\x67\x9c\x4c\xc7\x95\x71\x7a\xeb\x7b\xe8\xb8\x55\x33\x7f\x2f\x46\x80\x9a\xe1\x53\xa0\xd9\x50\xf6\x53\x99\x8b\x04\x0f\x67\x30\x82\x0f\x85\xbd\x17\x42\x2d\xea\x7a\x6e\xd9\x9a\x0d\x40\xec\xfc\x61\x26\x12\xaa\x87\x5a\x56\x71\x46\x73\x3f\x98\x4d\x06\x64\xd8\x5b\xb4\xbd\x63\xa0\xb3\x74\x2a\xda\x1d\x5a\xe2\xcb\x11\xa0\xa9\xe5\xf2\xe3\xe9\x36\x6f\x2e\xcd\x73\x83\x5d\x59\xe1\xfe\x4b\x8c\x6c\xdb\x83\xab\x8b\xf8\x70\xfa\xf0\x01\xb8\x52\x13\xae\xd2\x2c\x24\x54\x79\xc4\x6e\xe6\x5e\x49\x73\x79\x27\x72\x76\xf8\x63\xe4\x0e\x39\xda\x84\x1a\x9f\x5e\x5d\x74\x3b\x4f\xa3\xb6\xf0\xf6\x57\xa7\xd5\x1b\xf6\x4a\x0e\x73\xc1\x4e\x27\x5c\x29\x91\xed\x40\xf0\xd8\x60\xa2\xaf\x4e\x5b\x67\x97\x89\x87\x5a\x0a\x6f\xc3\x2c\x43\xa3\xea\x6c\xc7\x42\x89\x5c\x26\x65\xd8\x7e\x6d\xba\x51\x42\xef\x71\x98\x3a\x1a\xb1\x60\x5f\xff\x3f\xf6\xde\xbd\xb9\x71\x23\xc9\x17\xfd\x7f\x3f\x45\x5d\x39\x36\xa4\xde\x20\xa9\x6e\xdb\x3b\x33\xdb\x13\x1b\x27\x64\x49\x6d\x2b\xdc\xad\xe6\x48\xb2\x7d\xcf\x3d\x3a\x31\x2e\x02\x45\xb2\x56\x20\x0a\x46\x01\x92\x38\x9f\xfe\x46\x65\x66\xbd\x40\x10\x04\x29\xaa\xbb\x6d\xeb\x1f\xbb\x05\x16\x0a\xf5\xcc\x77\xfe\x52\x24\x6c\xc2\xcd\x0c\x8b\xac\x9e\xc9\x6d\x22\x85\xfd\xec\x32\xf1\xd8\x73\x1f\x33\x80\xe1\xea\x9c\x26\xb4\x68\xec\x28\x3d\x6c\x12\xcd\x4d\x3b\xb8\xba\x79\x60\x10\x35\xca\x6c\xad\xf9\xcc\x5a\x55\xb1\x04\xb7\xb6\x6c\xc5\x7e\x8d\xb2\xcd\x99\x26\xd1\x84\x8c\xfb\x88\xec\xb9\xd3\x32\x41\xbf\x5d\xeb\x33\x4b\x02\xc1\x64\x83\x90\xf8\xfd\xe9\x79\xdc\x36\x5e\xb3\xef\x4f\xcf\x9f\x4d\xf2\x5e\x93\x70\xf9\x64\x91\x7c\x96\x08\x4f\x1c\x53\x33\xfd\xed\x57\x79\x65\x59\x3a\xd7\x1b\x53\x48\x3b\xc5\x91\xef\x6d\x9b\xc6\xfa\xba\xc7\x0d\x03\x78\xbc\xbc\x4e\x84\x7d\xea\x3a\x76\x33\x7a\x5a\xc1\x63\x37\xa1\x27\xb1\x7a\x37\xb7\x7e\xb7\xda\xcc\x71\x03\x20\xce\x0f\xd4\x24\x5e\x43\x64\xf5\xaa\x5c\x86\x12\xdd\xea\xb2\x30\x30\xad\x18\x39\x15\x4a\xea\x0b\xcc\xfa\xb5\x6e\xf9\x5a\x8b\x69\x9d\x21\x00\x38\x94\xe6\x19\x52\x09\x5b\x78\x07\x8a\x52\xc1\x61\x16\xba\x42\x44\xde\x6c\xf9\xff\xb0\x8f\xf9\x10\x76\xc6\xb2\x3c\x19\x85\x17\x61\x0c\x00\xcf\x97\x80\xd8\x62\xde\xfe\xe5\xe2\xfd\x7b\x76\xf9\xf1\x86\xfd\xf2\xf1\xea\x47\xac\xf8\xbc\xa8\xb3\x4a\xe2\xb7\x5c\x26\xf2\x13\xcf\xbf\x19\x52\x61\x16\x72\xfb\x2d\xb3\x0b\xdc\xb5\x4f\x52\x77\x8b\x03\x17\xd7\x0d\x81\x80\xe7\x0c\x9f\x7d\x6a\x42\xb2\xc3\x02\xc0\x40\xfb\x9d\x57\x28\xa6\xdb\x65\x7a\xa6\xba\xc3\x6e\x1d\xf0\x9c\x66\xcb\xa1\x9b\xb1\x3d\x37\x80\x10\x84\x45\x36\xa6\x30\xbc\xe5\x0e\x43\x87\xef\x75\x0d\x18\x14\x83\x8f\xc5\x26\x77\xb6\x8f\x38\x27\x35\x09\xdf\x18\x30\x00\xd5\xfb\x3f\xb7\x07\xa5\xba\x3d\x18\xb0\xdb\x03\xad\xa6\xd5\xed\xc1\xff\xc5\xba\x2a\xb6\xee\x7b\xca\x86\xf4\x1e\x16\x57\x91\x8b\x22\x5b\x42\xa4\x1c\x93\x58\xff\x0f\x2a\x36\x40\xf3\x3d\xca\xbe\xc7\x5f\xc1\x47\x87\x34\xd8\x67\xb3\x6d\xe5\x9d\x44\xfe\xb2\xa1\x70\xe6\xec\xb2\x4d\xdb\x7c\x3e\xd6\x67\x86\xb7\xfd\xc9\xb9\x7c\x77\xdd\x75\x6e\xcc\xc1\x3c\xb1\xe7\xb2\x1b\x77\xda\x36\x73\x4e\xac\x44\xe5\xba\x2a\xa1\xd8\x0a\x5e\xf8\x4c\x2e\x64\x85\xa1\x57\x39\x45\xcb\x78\x8f\x34\x19\x3e\xd1\x4a\x49\x49\x5c\x31\x04\x62\x3e\xcd\x6a\xef\xef\xf6\xa5\x1a\xc0\xc7\xa3\x52\xfa\x88\x2b\x3d\xb4\x12\x64\xd2\x7b\x4d\x48\x9d\x0b\xa7\xde\x58\x96\xa2\x41\x25\xae\xd0\xcf\x3a\x56\x99\x4c\x3a\x9d\xa7\xa8\x17\x15\x85\xc8\xf5\x9a\x7c\x7a\x54\x2f\x89\x57\x53\x2e\x9b\x11\x37\x7d\x28\x1a\x14\xea\xab\xb0\x0e\x77\x29\xd8\x95\x00\x4c\xb7\x23\x5b\xda\xdb\xb0\x31\x2c\xd3\x92\x2d\x5d\xd8\x6a\x93\xac\xe9\x57\x03\x76\x66\x88\xad\x88\x5f\x24\x98\x7c\x78\x37\x04\xf2\x69\x7b\xdf\xd0\xe5\x2b\xc2\x12\x3f\xf2\x78\xde\xaf\x46\xee\xa9\xad\x14\xe5\x99\x22\xc5\xd5\xd1\x54\x51\x61\x08\x63\x62\x60\xe7\x9a\x1f\xdb\x6f\x70\x28\x2c\x64\x24\x7f\x6f\xa8\x97\x34\x57\x95\xca\x7b\x0b\xd5\xe3\x96\xe6\xb1\xcc\x82\x2d\x4e\x51\x37\xc8\x44\x19\x9e\x01\x23\xb2\x6e\x67\xd2\xd9\x25\x67\xb7\x65\x88\x5d\x44\xc0\xec\xdd\x83\x2a\x37\x6b\x98\xe3\xa8\x61\x3c\x6b\xdb\xc9\x4e\x76\xab\x5d\x26\x19\x8d\xa5\x7d\x62\xbf\xd5\x6a\xb2\xac\xba\x66\xf4\x0f\x6c\x11\x4f\xc5\x3e\x7c\x76\x53\x22\x7d\xa8\x6b\x0a\xe5\xa4\xcb\xf5\x7b\xf5\xdd\x59\x3c\xf4\x2b\x9e\x2a\xcd\xc0\xcf\xc0\xce\xc4\x1a\x7b\x79\xd7\x2c\x9e\xa0\x59\x94\x93\xa7\x99\x0f\xaf\xbe\x3b\xeb\x27\x9d\xe9\x84\x67\xe2\xe2\x63\x97\xdb\x16\x5b\xc4\x6b\x63\x1f\xae\x92\xe4\x75\x67\xf5\x47\x47\x83\x90\xa1\xed\xc2\x6c\xe8\xab\x3d\x67\xb6\x7d\x08\x77\x14\xbe\x1d\x23\xf0\xad\x4e\x74\x22\x32\x95\xcf\xf4\x88\x9d\x43\x2d\x4e\x0c\x14\xb0\x59\xb9\xbc\x8a\x18\xb6\xcb\xa8\xc0\x97\x30\xcb\x7a\x19\x7d\x6f\x8b\xc4\x5c\x78\x49\x75\xc3\x2a\x40\x9b\x8f\x0d\xbb\xbe\x7f\xdc\xa1\x45\x9b\xa3\xdd\xa1\x5d\xd8\x2d\x95\x79\x60\xe7\xd9\xf9\x9c\xbb\xc9\x3c\xe9\xb4\xbb\x79\xf5\x3b\x19\xbb\x06\xc2\xcb\x00\xb0\x03\xa4\xf3\x4a\xe4\xa9\x33\x79\xd7\x9a\xca\x52\x32\x4e\xd5\xfd\x2a\x40\x58\x76\x51\xf0\x46\x9b\x56\xac\x14\x0b\x23\x82\xc8\x9c\x95\xfc\x81\x81\x33\x14\x61\x0d\x76\x0b\x9d\xdf\x4f\xd0\xbc\x2e\xe6\xc2\x3a\x52\xbb\xe2\xe6\xc3\x76\xf1\xd1\xba\xbf\x86\x9f\x3e\x15\xc7\xb2\x23\x91\x65\x55\xf3\x6c\x1d\x53\xfe\x37\xb6\x7d\x7c\xdc\x96\x31\xf7\x3b\x84\xdb\x6f\xa8\x90\xbb\x11\x1c\xe1\x84\xcd\xb7\x84\x47\x78\x98\x47\xa2\x24\x9c\x5d\x8b\x79\x6c\x4e\x5e\x7f\xf1\xae\x4f\x08\x31\x0d\x63\xf5\xc2\xb8\xfa\x71\x03\x8a\xa4\x45\x78\x63\x23\x63\x0e\x18\x94\xbc\x25\x41\x1e\xcc\x50\x7b\x4f\x97\xc1\xd1\xf7\x8f\xee\xec\x46\x86\xb8\x42\x30\x07\xbc\x74\xa5\x14\x53\x1f\x8e\x15\xc1\x3f\xf8\x44\x52\x43\xf1\x6d\x2a\x1c\xc7\x30\x33\xc3\x2e\xac\x16\x82\x24\xb6\xe0\x25\x79\x0b\x52\x56\xc9\x74\x69\xa4\xdc\x22\x83\xf8\x31\x0c\x6e\x7f\x7f\xb1\x9f\x68\xeb\x4d\x72\xed\xba\x0b\x70\xb5\x2a\x9e\xb3\x0e\xf9\xdc\x39\xaa\x3b\x22\x44\x8b\xf4\xe2\xac\x47\x80\xe8\x54\xdf\x34\x30\x26\x9a\xde\x0c\x4f\x36\x21\x5c\xba\x52\x48\x7a\x46\xec\x03\x29\x57\x3c\xa4\xc7\xd0\x66\x45\xdd\x02\xc2\xe4\x0a\x3d\x38\x6c\xbe\xf3\xc7\x11\xbb\x3d\x10\x8f\xd5\xb7\x68\xd4\x79\x9c\x6a\xfc\x47\x5e\x99\x7f\x8d\xd8\x85\xa1\xd2\x89\xac\x32\x0a\xf5\x2b\x1d\x63\xb0\xaf\x99\xeb\x50\xe7\x0e\x11\xbb\xff\xad\x4b\x37\x95\x9f\x45\x36\x4e\x85\x12\x84\xde\xbc\x2d\x7b\x39\x41\x2a\x5d\x4f\x25\x15\x45\x51\x26\xe6\xf3\x89\x0d\xd6\xf0\xe0\xdf\x38\xe4\x84\xe7\xac\xac\x73\x44\x2e\x47\x8b\xcf\x0d\x46\xed\x6a\x1b\x1f\xef\xb4\xf2\xc9\x92\x22\x24\x31\xa2\x83\x4c\x1a\xc0\x55\x2a\x85\xc5\x1d\xf6\x03\x59\xff\x12\x5f\xfc\x82\xaf\xf7\xbb\x0c\xab\xfd\x13\xe1\xeb\x45\x61\xa8\x21\xd6\xc1\x4a\x0e\xf8\x9a\xd0\xc5\x27\xac\x82\x19\x1e\x60\xa2\x13\x42\xd2\x2e\xe6\x96\x74\x27\xb0\xbc\x0f\x86\x35\xad\x56\x29\xd4\x51\x81\x4f\x98\x31\x3a\xda\x79\xc5\xe1\x8e\xb8\x33\x6e\xe8\x4c\x0a\xaa\xc6\x8e\x18\xb4\x9f\x7d\xd9\x3e\x15\x58\x9e\x4a\xf7\x11\x79\xad\xd2\x15\x7f\x40\x1b\xa7\xb4\xce\x2c\xa4\x90\x30\x2c\xa8\xe9\x67\xd8\x00\x42\x41\xda\x06\x81\x21\xbf\xac\x33\xb1\x81\xe3\xb9\xf2\x48\x67\xb5\xa1\x2d\xd7\xee\xe5\x8b\x59\xae\xdc\xe3\xf3\x47\x91\xd4\x55\x37\x5b\xbc\xf1\x4e\x04\x28\xd4\x91\x65\x54\x7b\x09\xe0\x19\xe8\x07\x72\x2c\x28\xe7\xb0\xe0\x15\xd3\xbc\x92\x9a\x0a\xcc\xb8\x59\x88\x47\x43\xcb\x35\x58\xe5\x7d\x81\x10\x38\x88\xd6\x83\x31\x60\x93\xba\x62\xb2\x22\xe0\x06\xa5\xb4\x88\xca\x51\xdf\x4b\x05\xcc\x12\x3c\x65\x50\xc7\xa6\x74\x49\xf8\x41\xf7\x23\x28\xb2\xe9\x5f\x33\x22\xb7\xb9\x44\x6e\x65\x3c\x64\x07\x79\x17\xcd\x1f\x33\x10\x39\xb4\x61\x1a\x0b\xd3\xe9\x83\x90\xb3\x79\xa5\x07\x4c\x8e\xc4\x08\xa4\x75\xc1\x93\x79\xd0\xed\x42\x18\x95\x96\x67\x59\x58\xc9\xc8\xee\x53\x80\x8e\xc0\x8e\x1c\x6f\x23\x3e\x34\x70\x69\xf4\xcd\x3d\x6a\x5d\xae\x01\x13\x55\x32\x7a\x35\x60\x89\x5a\x14\x35\x80\x80\x98\x31\x4e\x96\x4c\x56\x56\x62\xb5\xc5\xf9\x60\x29\x32\xfa\xb0\x95\x57\xa8\x7a\x4d\x9e\x32\x9e\x42\xac\xdf\xed\x01\xce\xee\xf6\xc0\x0a\x21\xa6\x43\xe9\x0b\x9d\xb2\x39\xd7\xb8\xb3\x68\x0d\x5b\xf0\x2a\x99\x3b\x58\x9c\xb2\x14\xba\x50\x18\x36\x58\xf8\xe3\x7e\x23\xca\xc5\xdf\x5d\x17\x47\xfa\x95\x5f\xdc\xb9\x9c\xcd\xed\xda\xf2\x12\x13\xe3\xe2\x3d\x79\xd6\xbc\xdc\x5f\x60\xb6\x22\x1d\xc7\x83\x5d\xe7\xc7\x5c\xb7\x3b\x5b\xdf\x20\x82\x59\x71\x9b\x1a\x1d\x8b\x35\x97\x00\xd6\xc7\x10\xef\x85\xa8\x98\xb9\x4c\xfe\x70\x54\x72\x01\xa8\x84\x68\x7e\x0b\xc1\x57\x1a\x82\x71\xe5\x6a\xab\xed\x34\x82\x04\xea\xc4\xa1\x1e\x63\x47\xa1\x16\xe6\xab\x46\xbe\x4a\x61\xfa\x30\x04\x61\xd7\xc0\x56\x80\xac\x05\x39\xed\x54\x4a\x00\x1f\x28\x63\xbd\x1a\x04\xfc\x06\xae\xb7\x2a\x1d\x97\xaa\x4a\x28\xe8\x03\x88\x30\xe8\x94\x13\xf7\x32\xa9\x7c\x3c\x99\xf5\xf0\xe1\x94\x7e\xa1\x94\x6f\xa3\x50\x97\x02\x63\x44\x8a\xcc\x1f\x7b\xfc\x54\x26\x35\xde\x80\x9c\x52\x4a\xc2\x43\x6b\xbe\x66\x2e\x73\xe3\xf0\x42\x7f\x40\x80\x35\x84\xb5\xd2\xdd\x37\x57\x1c\x4b\x90\x39\x77\x1d\x10\xb8\x76\x75\x6e\x8f\xd9\x6d\xdd\xa7\xb5\xa7\xba\x16\x75\xb1\x8e\x21\x9d\xf9\x1a\x01\x58\x5a\x16\xee\xfe\x51\x6e\x84\x62\x73\x34\x0c\x25\x06\x1a\x60\x65\xf6\x2c\xc4\x51\x61\xa5\xc8\x30\x8e\x97\xce\xde\x4c\xde\x8b\xdc\xe7\xf6\x1e\xe9\x57\xaf\x02\xf3\xb8\xd9\x53\x8f\xaa\x99\xa8\x61\xa6\xc0\x2f\xca\x8e\xec\x31\x85\xea\x52\xe6\x68\x44\x3f\xe6\x95\x1c\xfa\x16\x86\xb6\x0c\x18\x96\xb4\x0a\x9a\x41\xac\x21\x96\x82\xe2\x51\x8d\x70\x62\x24\x0f\x30\x97\x7b\x6b\x74\x75\x73\x41\x5a\x75\x27\x96\xec\xb6\x7e\xfd\xfa\x9b\xa4\x52\x85\xca\xd4\x6c\xf9\xa3\x58\xc2\x03\x11\xd0\x40\x4e\xc5\xa4\x96\xd8\xa5\xca\x89\x4a\xe2\xb9\xb7\xdc\x20\x58\x48\xa9\x1b\x31\x8d\xad\xf8\xb5\xfe\x8b\xbd\x70\x6b\x43\x20\x9b\xad\x80\x76\xdc\x26\x3b\x85\x6f\xe0\x4c\x83\x89\xb9\xf9\x66\xcc\x9f\x00\x6e\xc7\xd7\x58\xea\x18\xbf\x6f\xe4\xc8\x95\x65\x4a\xc1\x4f\xab\x47\x92\x17\x45\x26\x11\x4d\xe8\xc8\xee\x1c\x9f\x71\x99\xeb\xea\xd5\xdf\x59\x5e\x1b\xb6\x5d\x32\x01\x5e\x1c\x4a\x4d\xe4\xb9\x66\xb7\x07\xf6\x88\x1e\x6a\xff\x81\xdb\x83\x67\x8b\x99\x09\x77\x7d\x03\xa4\xd9\xfe\xee\x8d\x25\xad\xba\xeb\x52\xaf\x14\x3c\xf4\xeb\xfd\x2c\xf7\x2e\x58\x89\x3e\x77\x2d\x5f\xfa\x9b\x96\x61\x16\x42\xe3\xae\x59\x27\x5d\xd8\x31\x05\x21\x02\x62\x5f\x0f\x6b\x5c\x5f\x1a\x9b\x57\xb2\x9f\xd0\x9f\x57\xb2\x87\xe4\x1f\xb5\xfa\x7d\x8b\xff\xe1\xe1\x7b\xd1\x01\xfa\xe9\x00\xeb\xd6\xec\x45\x11\xf8\xbd\x2b\x02\xd1\xce\x7e\x3e\x6d\x60\xfb\x61\xbc\xa8\x04\x7f\x20\x95\xa0\x47\xa1\x86\xa0\x91\x4f\xc7\xb7\xfe\x65\x8b\x78\x64\x1d\xdf\x49\x88\xed\x65\xe5\xa7\x2e\xdf\xdf\x4b\xa9\x86\x83\x97\x52\x0d\x5d\x72\x57\x6f\x87\xbc\x2d\xd5\xa0\x72\x31\x7c\x50\x65\x3a\x08\x1c\xf2\x41\xe5\x85\x68\x81\x5b\xaa\x2f\xec\x5e\x1f\xa1\xbd\xb4\x8d\x05\xcf\x88\x8c\xf4\xfe\xfc\xb1\x53\x8c\xe5\xbe\x29\xcd\xd8\xdf\xf1\x4c\x8b\x01\xfb\x29\xbf\xcb\xd5\xc3\xf6\x61\xee\x0f\xaa\xbc\xcb\x14\x4f\xf5\xb1\xe1\xd3\xe6\x3f\xc3\x4c\x4e\x31\xc0\xf8\x2b\xf3\x57\x80\xd3\xd7\x73\x9a\xcd\xb2\x0e\x4d\xc9\x70\x59\xb8\x3c\x5e\x0b\x51\xd6\x98\xe0\xe7\x9b\x43\x4f\x1a\x78\x76\x79\x7d\xaa\xf2\xa9\x9c\x75\xd1\x40\xd7\x28\xf2\x0b\x9f\x5d\x5e\xb3\x82\x97\x7c\x21\x0c\x5b\xa0\x78\x1f\x85\xf9\x4c\xa9\xbd\xc3\x8a\xac\x26\x90\x3b\x0a\x1a\x12\xdc\xe4\xb3\xcb\x6b\x8c\x81\xef\x96\xe2\x41\xd5\x42\x87\x67\xaf\x64\x14\x33\x24\x80\x5d\xc3\x97\xd8\xc5\xd8\x0c\xc5\xc8\x8d\x42\x93\x63\xc8\xc2\x22\x42\x6c\x7d\xea\xa3\xfe\x26\xe6\xaa\x04\xdf\x5b\x3f\x62\x76\x56\x17\x99\x44\x75\x2f\x7c\xc1\x23\x3c\x2f\xd4\xfd\x6e\x0c\xb0\x9f\xae\xac\xb6\x48\xcf\x31\x2b\x62\x64\xee\xcc\x2c\x07\xbd\xd8\x58\x09\x00\x4c\x4c\xbd\x6c\x0a\x2b\x61\x13\x07\x7a\xad\x82\xc8\xab\x12\xec\x11\x8d\x15\x60\x57\xe6\xcb\x28\x06\xb9\x0e\xc1\x26\x26\x73\x46\x49\x46\xf8\x92\xba\x17\x65\x29\x41\x9d\x50\x9a\x94\x0a\xb3\x43\xdc\xe9\xdf\x30\xaa\x95\x63\xf3\x5c\xd2\x85\x3b\xf1\x38\xca\x75\x3b\xa1\x05\x2f\x8d\x1e\xd0\x7b\x2b\xf0\x05\x96\xaa\x05\x48\x12\x86\x26\xcf\x95\xae\x86\x70\x68\x33\xa5\xee\xea\xa2\xcf\x39\xa5\x6e\x0a\x5e\xcd\x7b\x6e\x51\xf4\xc6\xb3\x9f\xd4\x6d\x89\xcf\xc7\x62\x93\x18\xd6\x68\xea\x08\x51\xdb\xf9\x76\xa4\x68\x33\x71\xe9\x8c\x71\x43\x79\xad\x7f\x20\x29\xcf\xea\x7d\x55\x01\x52\x69\x37\x54\x21\xfe\xde\x40\x27\x0c\xcc\x95\x2f\x58\x84\x5f\x68\xac\x50\x6f\x2c\x42\xb3\x99\xfb\x1d\xec\x33\x93\xcc\x17\xd0\xc1\x2f\x37\x3a\xea\x05\x74\x70\x5d\xa4\xcb\xbe\x70\x06\x55\x7a\x25\x78\x6a\xe8\xa0\xfe\x9e\x57\x1d\x70\xcd\x8d\x86\x31\x52\x7c\x84\xc0\x8f\xd2\xb4\x93\xf8\xbb\xa0\x8c\x6d\x1b\x88\x11\xde\x4c\xe1\xe3\xf6\x1d\xa0\x3d\x61\x3b\x1c\x1c\x65\xa3\x7a\x2d\x9d\xc4\x33\xf4\x14\xf9\xc7\x70\xe2\x40\xa4\xf4\xae\x95\x65\xb1\x39\xda\xbe\x27\x77\xbc\x16\x49\x5d\xca\x6a\x79\xaa\xf2\x4a\x3c\x76\x32\xca\x46\x53\x36\x57\x59\x0a\x96\x99\x61\x66\x4e\x34\xd3\xf4\x7b\x58\xe0\x08\x60\xd3\xb0\xec\x91\x0b\xdb\xb5\xc0\xc5\x86\xca\x28\x40\xc6\x16\xa6\x23\x5e\x0a\xc6\x33\xad\x18\x11\x21\x28\xe9\x60\xdf\x19\xe9\xf8\xe3\x23\xc6\xde\x81\x1d\x11\xb9\x51\x14\x16\xdc\x6c\xcb\x2a\x7e\x27\x4c\xaf\x89\x48\xe1\x48\x80\xd3\x72\xda\x78\x7d\x75\x82\xdd\x42\xcf\x54\x7f\x4f\xf7\x61\xbd\xc0\x0a\xc6\x4f\x9e\x41\x78\x38\x5a\x0e\x79\x46\xfe\x19\x2b\x98\x5b\x9f\x22\xcf\xb2\x30\xb0\x19\xd0\x2a\x20\x08\x0f\x96\xc8\x26\x5a\x61\xa5\x9a\x2c\x53\x0f\x70\x56\x7e\xc4\x3c\x18\xa8\x70\x02\x65\x69\xd0\x03\xf1\x60\xba\x98\xcb\x02\x65\x06\x0f\x2c\x8e\xd6\xd6\xa8\x1e\x7f\xa1\xd2\xb7\xb7\xf9\x6d\xfe\x06\xfd\x1b\xea\x01\xbc\x6c\xdf\x5f\x9c\x39\xd1\x16\xd0\x75\xae\x61\xae\xec\x6b\x6c\xa5\x45\x35\x93\x29\x9b\x48\x90\x9b\xb4\xa8\xd8\x51\x2e\x1e\x30\x28\xde\x45\x5a\xd3\x71\x0e\x0b\xfb\x84\x1f\xa7\x2e\x5f\xb1\x6f\xb0\xcf\x42\x94\x0b\x09\x5e\x09\xd3\x2f\x9e\x86\x8f\x57\x87\xa4\x4d\x95\x0f\xc3\xf2\x61\x38\x1c\x0e\xcd\x58\x01\xd3\x5f\x8b\x6a\x10\xad\x81\xb3\x57\x2f\x54\x2a\xc9\x59\xe4\x57\xc2\x9c\x43\xff\x09\x6d\x5d\x80\x6b\xcb\x22\x18\x81\x68\x26\x4a\xff\x03\xe6\x62\xd1\x4f\x7f\xf9\x76\xc5\xae\x54\xe7\x27\x1b\x0f\x84\x99\xa7\x59\xda\x4a\x41\xbc\x3a\xb2\xd1\xaa\x5c\x22\x23\xf5\x36\x0f\xba\x26\x45\xa9\x12\xa1\xf5\x88\xfd\xa4\x05\xf8\x20\xc1\xb4\x67\x73\xc7\x25\xad\xc2\x88\x7d\xe0\x4b\xbc\x38\x54\xa3\x40\xe6\xac\x79\x92\x19\xbb\x98\xda\xdf\x26\xaa\x9a\x37\x1b\x20\x3e\xda\xca\x0d\xc0\x15\x46\x39\xc2\x1b\xf2\x57\xfb\x87\x1b\xa6\xc3\x2b\x86\x36\x32\x5e\x05\xb7\x72\x4f\x8b\x7c\xa9\xf2\x2b\xa5\xaa\x2e\xdf\x88\xcb\x1c\xa2\x10\x91\x70\x51\xc1\xbc\x6e\x56\x9f\x6b\x70\x03\xe6\xc3\x52\x29\xc0\x30\x28\xd1\x9d\x51\xd6\xa2\xe5\x60\x59\xc0\x0d\xf8\x45\x2e\xf8\x0c\x8a\x60\xd9\x3d\xa9\x14\x13\xb9\xae\x4b\xeb\x1b\xac\x7c\xaa\x26\x7d\xea\xa7\x8b\x33\xf6\x9a\x1d\x99\x6f\xbd\x82\xc5\x06\x8c\x8e\x4a\x31\x5d\xf1\xb2\x39\x46\x39\xb5\x5d\x50\x01\x0b\x08\xaf\x28\x11\xcf\x7d\xc0\x72\xc5\x74\x9d\xcc\xed\x98\xc2\x12\x15\x85\x28\xcd\x1a\x02\x8c\xed\x97\x77\x2a\x36\x43\xd1\x47\x3b\xfd\x93\xee\x44\x1d\x33\xb7\xe9\xa7\x1d\x6e\x13\xa1\xe3\x03\xd5\x35\xdb\x1e\xcf\x01\xf7\xd6\x4a\x78\xcd\x64\x9b\x2f\x71\x55\x9f\xe7\xae\x69\xf1\x5e\xe6\xf5\xe3\x66\x00\x1b\xb3\x0d\xd7\xe7\xd0\x18\x06\x00\x43\x54\x64\x70\x81\x8c\xd3\x15\xee\x66\x4f\xb5\x9d\xe5\xa0\xb1\x55\xf6\x5a\xc1\xa9\x36\xdc\x2e\xc1\x4a\x75\x25\xcf\x53\xb5\x58\xf9\x9a\x73\xa3\xfb\xf9\xb3\xdf\xdf\x46\xf5\x4f\x53\x3e\x8f\x76\xa6\xb9\x6f\x81\xa8\x01\xfc\xa8\x9f\x49\x0d\x84\x12\x1d\x6e\x99\x99\xe4\x54\x96\xe0\x49\x87\x9b\x03\xb7\x4c\xe6\x8d\xa5\x1e\xac\x5a\xa9\x83\xad\x3c\x34\xf3\x97\x0b\x5e\x2e\x0d\xe3\xc3\x15\x8f\x36\x3e\x57\xf6\xd3\xce\x4c\x97\x92\x8d\xce\xf0\xe7\xae\x13\xdd\xdb\xb2\xd6\x3c\xfa\xeb\xce\xfe\xaa\x51\x72\xa9\x93\x2a\xeb\xf4\xce\x60\x0b\x10\x85\x03\x03\x92\x0b\x6c\x4a\x19\xf5\x81\x79\xdd\x51\x65\x97\x31\x04\x41\x18\xe9\xa6\xce\x7d\xfe\xa0\x6d\x7f\x64\xeb\xa1\x35\x6f\xc5\x2b\xb6\x90\xb3\x79\xe5\x18\x48\xc6\xeb\x3c\x99\x3f\xab\x19\x17\x67\xb9\xa3\x69\xb2\x1b\x28\x1e\x7f\x47\xb3\x45\x03\x93\x99\x6f\x72\xfa\x7a\x82\xd2\xc7\x16\x97\x54\xf2\x5e\x9c\x09\x9e\x66\x32\x17\xd7\xc2\x28\x58\x5d\x3b\x8b\xd7\x8b\x67\x2c\xad\x4b\x6e\xf5\x33\x8d\xaf\xb9\xa8\x81\x05\x5f\x22\x82\x12\xc4\xaa\x12\xa0\x07\x44\xb9\x84\x01\xac\x50\x29\xea\x46\x02\xd8\xc3\x54\x51\x8c\x0a\x85\x29\x20\x89\x83\xf7\xb3\xa5\x8d\x52\x58\xf0\xf2\xce\x48\x00\x66\x8b\x29\xf9\xfd\x0e\xda\x69\xad\x12\x09\xd2\x75\x48\x4c\x31\xe1\x7f\xe1\x92\x53\x0b\xa5\x25\x7c\x9b\x0e\xfe\x1e\xb8\x01\xdf\x0c\x48\x65\x68\x69\x4c\xd0\x51\x93\x0d\x02\x4c\x02\x78\xaa\x5d\x60\xc0\xd7\x20\x43\xf1\xba\x52\x90\xa0\x4b\x70\xe4\x27\x49\x62\xfe\xba\x51\x77\xa2\xd3\xee\xda\xf1\x5a\x90\x7c\xfe\x30\x17\x50\x39\x89\x3b\x48\x51\x8e\x0d\x59\x05\x2d\x83\x6a\xfe\xa6\x43\x5e\x11\x94\x93\x2d\x27\xd0\x5b\xe4\x09\x4e\xf3\x66\xa3\x66\xa0\x29\x22\x16\x08\x45\x9c\x38\xe2\x72\xea\x1b\x24\x68\x80\xf3\xe5\x66\x1d\x91\x85\x40\x6b\x72\x30\xdd\x40\xb0\x8b\x3b\x44\x15\xcb\x04\x37\xdf\xca\x23\xc1\xd4\x68\xa5\x63\xe8\x7f\xc5\xaa\xf7\x9c\x04\xc8\xcd\x66\xfb\x8a\x67\xe0\x9b\xe8\x6a\xbd\xb1\xe2\x59\x9a\xeb\x86\x63\x77\x6d\x36\x61\xb7\x3f\x77\xc4\xc6\xfe\xa1\x97\x1c\x60\xe1\x1b\x2e\x44\x1b\xf6\xee\x1c\x52\xa6\xcb\x04\x46\x61\xc9\x11\x02\x00\xab\xbc\xd5\x95\xb7\x93\x87\xae\x65\xe2\x1b\xe1\xd5\xae\x45\x85\xd3\x85\x86\x31\x83\x0b\x05\xed\xdb\x83\x53\xc4\xdb\x7c\x67\x44\x8a\xdb\x03\x0b\xab\x46\xf6\x17\xa3\xed\x1f\x86\x2d\x7e\x91\xd5\xfc\x07\xa5\xab\x4b\x51\x1d\x0e\xe2\x9f\xcc\xdf\xd4\xf5\xa1\x39\xc2\x87\x97\x2a\x17\x87\xa3\xe6\xaa\x3b\xf7\xa8\xf7\xb9\xaf\xf3\xd3\xd2\xe0\x5d\xd8\x2f\xfc\x10\x78\xff\x6e\x14\x54\xcc\x85\x2f\x58\xcf\x98\x91\x1b\x39\xa0\xf0\x40\xeb\x39\x8e\xf5\x41\x95\x77\x03\xb6\x54\x35\xbe\x60\xf4\x3b\xd8\xe7\x65\xb8\x48\xe2\xd1\xe5\xf8\x57\x6a\xfd\xb4\x7b\xbb\xcb\xb0\xa8\x34\x91\xb1\xf7\x32\xbf\xeb\xa2\x20\xe7\x2b\x8d\x5b\x88\x9d\xcc\x91\x1f\x98\x73\x86\xf1\x36\x44\xfc\x74\x40\xef\x64\xfe\x3f\xb8\x5c\x80\xe1\x83\xc4\x5e\xe4\xf7\xb2\x54\x39\x00\xb8\xde\xf3\x52\x9a\x6f\xe9\x41\x1c\x14\xae\x97\x79\xc5\x1f\xc1\x8f\x8b\x98\xcd\x99\x19\xc5\x88\x59\x8e\xfb\x36\x3a\x38\x46\x1f\xef\x4f\x44\xcd\x36\x9c\x64\x92\xeb\x4e\x4f\xf2\x0f\xbe\x15\x48\x1e\xd6\xa7\xce\x33\x27\xc1\x01\x12\x00\x70\xde\x8b\x31\xd9\x11\xec\xe9\x89\xe7\xed\x19\x1d\xbe\x32\x95\x99\x30\x5a\x63\xa0\x33\x5a\x58\x1d\x28\xe8\x0d\x4a\x3b\xdc\x93\x5c\x21\x9e\x2d\x1d\x9b\x66\x92\xc4\xfe\xa9\xa8\x9b\xf6\xf6\x54\x54\x16\x4f\xa3\xa1\x66\x9e\x17\xe3\xd3\xae\xb8\x2b\x2d\x1c\x70\xc6\xa1\x66\xb2\x48\xc2\x42\x8a\x2b\x67\xc3\x1c\x8d\x9e\xe5\xed\xc2\x31\xd0\x5a\x6f\x38\x1b\x2c\xc7\x66\x36\xe8\x5a\xe8\xca\x09\xef\x14\x8b\xc8\x1a\xe3\xa5\x37\xc2\x31\x5f\x90\xc3\x16\xcf\x16\x59\x4a\xad\x64\x54\x56\x8d\x53\x05\xfa\x81\x8b\xfd\xf4\x87\xe7\x69\xf3\x1d\x77\x62\x7e\x34\xe6\x50\xc8\xf4\x39\xd6\x7c\x43\x74\x40\xcc\x3a\xed\x0b\xd6\x7e\x33\x56\xa9\x59\x48\xc0\x79\x6e\x93\x2e\x5d\xfb\x46\x91\x56\x4e\x02\xf6\xd0\xe6\x90\x00\xa3\xe9\x4d\x52\xc1\x0a\x34\xae\xb3\xec\x5a\x24\xa5\xa8\xba\x88\xc9\x45\xa3\xe9\x3a\x8a\x12\x16\x0f\x55\x46\x93\xc0\xc6\xad\xa5\x2b\xd1\x32\x05\x27\xae\xa8\x33\x8a\xe1\x77\xe9\x29\x30\x38\xd2\x28\x6d\x50\x35\x29\x52\x70\xea\xe2\x85\x82\x20\x17\xfc\x98\xb3\x12\x72\x4d\xa0\xce\x86\xf4\xdf\xcb\xb4\xe6\x19\x7c\xc8\x90\xfe\x85\x35\x1f\x20\x9f\x23\x8e\xbe\xa0\x31\x8d\xd8\x3b\x55\x32\x02\x60\x1b\xd8\xe1\x27\x54\xd6\x35\x05\x82\x3e\x40\x4a\x87\xd4\x9d\x58\x2f\xa2\xe4\xd0\x38\x0c\xb7\x9f\x2b\x88\x78\xdf\x3a\xb0\xcf\x4b\xbe\xc7\xb8\x0e\x5f\x11\x87\x95\xf9\x6c\x08\x4f\xcc\x44\xe8\x4b\x43\x95\x0f\xf9\xb0\x50\xcf\xea\xb1\xef\xa8\xe8\xff\x49\xe5\x54\x33\xc6\xd3\x6d\x94\x08\x98\x14\xcf\xe4\xbf\x78\x18\x95\xbd\x5e\xa7\xb8\xc8\x65\x15\xb6\x32\xdb\x88\xd1\xf9\x68\xff\x52\x65\x0a\x76\x56\x89\x10\x75\x51\x7f\x00\x82\x84\x15\x93\xe1\x8c\x9a\xe3\x2c\xa3\xfe\x40\xdb\xd5\x3e\xff\x40\x6a\x57\xb5\x1f\xcf\x2a\x48\x54\x81\x4a\x2c\xb5\xab\x77\x62\x54\xb2\xd2\x46\xdd\x63\x04\x02\x7c\xcc\x09\x70\xb6\x88\xac\x39\xcd\x3c\x6f\x7e\x19\x98\x71\xb9\xe0\x59\xd3\x4f\x60\xe8\x32\xc4\x03\x33\xbe\x30\xa2\xde\x8a\x19\xb3\xb1\x22\x36\xdb\x00\x86\xfa\xde\xc6\x9b\x82\x7e\x0f\xd9\x36\xce\x61\x8d\x51\xe4\x1a\xf0\xca\xde\x1b\x41\xd5\x3f\xc3\xd1\xda\xf8\x8c\xab\x30\x97\x02\x63\x7d\x1a\x83\x87\xa4\x17\x8e\x4a\xab\x21\x7c\xa4\x9d\x52\x06\x45\xa0\x7d\x4f\x96\x50\x83\xd8\x8a\x61\x36\x71\x86\x18\xdc\x31\x42\x45\x3b\x5b\xaa\x0f\x10\x59\x16\x14\x10\x04\x88\xf0\xb6\x94\xae\x60\x0b\x14\xe2\x9c\x8f\x11\x33\xf1\x4a\x97\xf4\xa3\x6c\xd2\x4f\xbc\xb2\x7a\xc4\xde\xcb\x85\x75\xf1\x05\x06\x47\xd9\x58\x4c\x50\x36\xb5\x5c\xc8\x8c\x9b\xc3\xa1\xe7\x10\x07\xdc\x5c\xf2\x7e\xda\x6d\x4b\x10\xca\xd3\x02\x8a\xcd\x60\x87\x01\x2d\xfa\xc3\x6a\xbf\xb9\x4a\xc5\x26\xdc\x53\x6a\x82\x56\x3c\x3a\x4f\x51\x4e\x9f\xcb\xd2\x86\xf4\x21\xee\x6a\x40\xfa\x2c\x22\x74\x25\x1b\x91\x18\x32\x68\x07\x61\xee\x9b\x28\x2d\xb0\xbd\x7d\xa0\x1b\x3d\x56\x16\xe0\x7c\xc0\xb8\xd6\xf5\xc2\xc1\xe6\x99\x13\x4d\xf4\xc0\x27\xcb\xd9\xfb\xd4\x5b\x1a\x30\x3d\xf7\xc8\x8c\xbe\x0c\x9a\x51\x20\x96\xfd\x8b\x72\xdd\x88\xa6\x18\x9d\x26\x54\x95\x41\xb0\x92\x95\x4f\x6e\x1d\xb1\xeb\x96\x37\x41\x8b\xa2\x16\x90\x72\x30\x11\x41\xee\x0c\xf5\xd3\xc8\xd6\xf2\x4b\xb3\x0b\xa7\xf5\xe6\x86\x63\xae\xb5\x9c\xe5\x86\x97\x42\xf9\x8c\x96\x03\xbf\x75\xbd\xba\x7e\x31\xda\xc0\x4f\xba\x4d\x8f\x10\x3f\x40\xcd\x48\xd0\x63\x3f\xf3\x52\xaa\x5a\x5b\x3b\x6b\xa2\x16\x85\xca\x81\x8a\x3a\xb8\x7a\x8c\x00\x81\xb5\x47\xea\xe6\x3b\x09\x51\x90\x20\x17\x6c\x6c\x7f\x39\x49\x6d\x98\x42\x80\x8b\x27\x8d\xe6\x6b\x74\xdd\x74\x60\x8e\x5c\x51\x42\x9e\x19\x7c\xaa\xa4\x98\x39\x5b\xac\xdb\x7f\x19\x09\x3d\x77\xfd\x25\x01\xce\x1e\xe1\x2a\xe9\x70\xa0\xd0\x8d\x1d\x87\xc3\x23\xc6\x5e\x80\x98\x97\xde\x31\x35\xf0\x24\xbe\x8c\x66\xb6\xb5\x2d\xf8\x9b\xaf\x57\x80\x04\x9b\x43\xe8\x6d\x14\x96\x81\x63\xde\x0a\xf0\x6e\x60\xec\xf6\x80\x44\x76\x73\xbe\x86\x49\x29\xc1\x94\x7a\x7b\x00\xbc\xc7\xfd\x48\x65\x5b\xa2\xdf\x0d\x07\x7c\x50\x2e\xda\xe6\x4e\x2c\x1f\x54\xe9\x32\x4c\xed\x57\x23\xae\x47\x9f\xc5\x58\x7b\x32\x03\x81\xe7\xbc\x24\x61\xa5\xa5\xf1\x72\xc4\x4e\x8c\x14\x0e\x26\x12\x10\x27\xec\x85\xb6\x4a\xc6\x84\xe0\xff\x41\x60\x8f\xf7\xca\xc6\x58\xd2\xd7\xcc\xa5\x84\xdd\x5b\xab\xdc\xf8\xc3\x68\xc5\x76\x1b\xf9\xa1\x4a\xf6\x2f\x51\x2a\xca\xaa\x2d\xa9\x10\x8e\xfd\x79\x9b\x54\x28\x1f\x3d\xd7\xa9\xe1\x44\x9b\x68\x64\x20\xf7\x2a\x9b\xa1\xdd\x88\x46\x28\xcc\xe1\xe3\x56\x59\x36\x93\x70\x2d\x47\xec\xc4\x8a\x75\xe6\xd9\x12\x71\x88\x4d\x67\x50\x6a\x21\x96\x2a\xb1\xc5\xc9\xe5\x99\x95\xb8\x28\x55\x27\xf6\xb7\x62\x9c\x5f\x3c\x12\x90\xbc\x28\x4b\x4a\xfc\x66\xf4\x1a\x30\x3e\xde\x94\xb5\xb8\x3d\x58\x13\xae\x39\xaf\x27\xa3\x44\x2d\x02\x62\x18\x44\x6e\x4e\x32\x35\x39\x5e\x70\x73\xe6\x8e\xef\x44\xa1\x8f\xb5\x9c\x0d\x49\xdb\x3f\x7e\xfd\xfa\xf5\x5f\x81\x24\xc2\x80\xff\xfd\xeb\xef\xfe\xfd\xeb\xef\x9e\x3f\x3e\x38\x8e\x8f\x5c\x43\x36\x23\x09\xb8\x33\x38\x1f\x23\x50\x02\x03\x6e\x23\x14\xcd\x9c\x58\x1f\x9b\x38\x62\x1f\x73\xd0\xf5\x4e\xb2\x07\xbe\xd4\x03\xf6\x31\x7f\x87\x68\xb4\x03\x76\x29\xee\x45\x19\x99\x2c\xb0\xd1\x5e\xb3\xb7\x8e\xbf\xa2\xa9\x0d\x71\xc8\xbd\x8f\x3b\xba\x4f\xfb\x50\xad\xab\x46\xd3\x28\x60\x33\xfc\xd1\x5e\x6a\xe9\x3d\x7f\x14\xfb\x8b\x5e\xed\x01\x91\x20\x6f\x34\xad\x49\xf1\xc6\x88\x15\x6b\x4c\x42\x2a\x10\x77\xed\x44\x96\x30\x43\xde\xd0\x8c\x94\x25\xa6\x41\x7b\xa6\x76\x59\xe7\x71\xcc\x50\x20\x4e\xdd\x1e\x64\x62\xc6\x93\xe5\xed\x41\xfc\xa5\xd0\x04\x65\x47\x8c\x46\x0c\x49\x68\xb4\xf8\x45\x82\x25\xcf\x09\xe4\xc4\x1f\x54\x57\x06\x06\x07\x69\xe9\x94\x0d\xe3\x40\x2d\xad\xbd\xd2\xd6\x6e\xd7\xcf\x08\x20\xaf\x5f\xbf\xf9\x76\x48\x9f\x18\xc2\xf8\x46\x8b\xd4\x43\x98\x1b\xda\x52\xcc\x1d\x88\xb9\xcb\x68\xa0\x38\x49\xda\xb1\x69\xbd\x15\xc2\xb9\x13\x48\xb7\x62\x7b\xd1\x3e\x19\x3a\x2e\x35\x08\xdf\xc8\x30\x3c\x49\x73\xbd\x77\x71\x85\xf6\x4e\xec\x92\xfb\x2e\x7a\x4f\x69\x4d\xfc\x6f\x9b\xab\x67\xef\xe1\xbf\xed\x26\x7f\x38\x5e\x23\xc6\xae\x05\x65\x83\x86\x81\x01\x50\x32\x87\x66\xeb\x83\x77\x41\x65\x45\xa9\x6a\x47\x48\xc8\xc6\x32\xac\xac\x52\xe8\x23\xee\x58\xa4\x33\x57\x94\x27\x76\x2b\xdb\x08\x07\xf3\x2b\x7a\xf0\x79\x26\x39\x4a\xef\x71\x4b\x14\xea\x7c\x3f\x6f\xc1\xd4\xac\x57\xda\x30\x99\xeb\x4a\xf0\xfe\x59\x55\xab\x5d\x74\x6e\xf6\xea\xf7\x3c\x09\xb2\xf2\x71\x63\x8e\x64\xb6\x5c\x21\x6f\xfd\xa8\x7f\xc5\xf5\x9d\xd7\x3a\xc4\x90\xb2\x74\xf1\xd0\x04\xcf\x69\x1e\x43\xb2\x74\xb4\x68\x22\x6b\xe6\x3f\xe7\xa5\x18\x63\x2c\xd3\xa5\x35\xb5\x76\x2d\xc1\x1c\x0c\x14\x54\xa0\xd0\x45\x41\x79\x2b\xad\x2d\x2f\x1c\xa0\xb5\xb4\x46\x70\x13\x98\x04\x12\x26\x43\x96\x23\xe6\x4a\x51\x4f\x93\x0c\x16\xee\x5e\x8a\x07\x44\xa6\x96\xb3\x9c\x67\xf6\xab\x82\xb4\x08\x94\x3d\xe3\xaf\x38\xfb\x71\xa1\x52\x67\xa8\x69\x84\x6e\xad\x84\x6d\x45\x4c\x03\x75\x3b\x91\xb2\xf1\xc5\x19\x7b\x33\x62\x3f\xa0\xe7\x00\xfa\xba\x6e\x5b\x35\x6b\x75\x81\xa8\x39\x34\xba\x77\xfa\x0b\xa2\xa2\x62\x1a\xaa\x4b\x10\xd1\xb0\x64\x19\x29\x1a\xa8\x50\x5e\x20\x37\xf7\xb2\xf5\xf3\xeb\x2b\x53\xac\xf1\x43\xe8\x7a\x82\x99\xa2\x5b\x11\xed\x69\x9d\x65\x4b\x66\xa4\x48\x24\xd0\x63\x95\xae\x3a\x1c\x6e\x0f\x10\xdf\xcd\xfe\x80\xe0\x6e\x23\x7c\xe8\xbe\x1b\x3d\x35\x74\xdc\x43\x81\xe1\x2f\xfa\x3e\xa1\x5f\x49\xc3\x61\xe1\x8b\x00\x0d\xdf\xcd\x13\x9c\xdd\x91\xd3\x9b\x30\x4a\x0e\xd0\x54\xbd\x69\x44\x25\xca\x85\xcc\x41\xe3\xff\xbe\xe4\x50\xd8\x56\x02\x71\xdc\x47\xb4\x54\x2e\x04\x42\x3b\xd9\xaf\x08\x36\x33\x1f\x81\x65\xc6\xd0\x5a\xd0\x72\x8c\x0a\xa5\x51\xc4\x4f\xb1\x60\x1a\xd9\x94\x9a\xa1\x4e\x50\x1e\x5c\xcc\x78\x14\xec\x04\xfa\x30\x1a\x23\x51\x4b\x72\x4a\x27\x75\x26\x17\x0b\x91\x1a\x1a\x6c\x3e\x6a\x9d\x74\xf8\x82\x51\xa4\x64\x36\x88\xa4\x18\x18\x22\x2b\x60\x21\x62\x6f\x9d\x25\xc0\xf0\xc5\xa8\x19\x91\xca\xb6\xc5\xe0\xd3\xca\xa9\xe4\xf6\x6a\x5b\x70\x33\x2f\x65\x83\x16\x04\x49\x30\x9c\x05\x7b\x62\xa9\x82\xbd\xe4\x18\x25\x4b\x58\x35\x41\x87\xe6\xed\xa9\x2a\x13\x39\xc9\x96\x6c\xce\xb3\xca\xd7\x94\xb9\xc3\x3a\x91\xa6\x9b\x11\xbb\x16\x55\x38\xfd\x4c\xe5\x33\x18\x1c\xa7\x70\x6a\x5b\x8d\x3d\x31\x77\xaa\x2e\xf0\x7b\x86\x65\x2d\x55\xbd\x26\xa2\xfa\x9b\xd7\x76\xaa\x7b\x08\x3b\xab\x54\x26\x70\x09\xfb\xeb\xa7\xde\xb4\x10\xbc\xfd\xac\x7e\xf5\x1b\xf7\x9d\x75\xca\x18\xd5\x0e\xe9\xe1\x93\xa1\x96\xbe\xb0\xc1\x44\xb8\xc2\x37\x93\xe5\x66\x1f\xcd\xd3\x2a\x5a\x3e\xe7\x2a\x51\x59\xa0\x4f\x60\xc2\x1e\x94\x50\x9f\xf1\x47\xb1\xd4\xdb\x26\xc3\x6d\xa8\xda\x63\x5b\x84\x45\x8b\x56\x63\x65\x62\xa0\x16\x9b\xc6\x85\x0f\x0c\xaf\xab\x4a\x08\xdd\x9d\x83\x63\xa8\xe6\x19\x96\xcf\xc1\xb6\x68\xe5\x1a\x30\x41\xc6\xac\x6c\x19\x81\xa7\x61\x95\x7f\x08\x34\xb1\x94\xc2\x3a\x40\xcc\xc9\x48\x7c\x26\x49\xa9\x32\x56\x64\x3c\xdf\x50\x27\x28\x80\x41\xe9\xc8\x5e\xb4\xf5\x88\x28\x02\xd2\x8d\x77\x97\x23\xf7\x24\x64\x96\xbd\xda\x51\x3c\x6a\xd5\xd6\x87\x32\xc4\x9b\xda\xcd\xaf\xe2\x6e\x32\x1e\x8c\x4e\xe2\x70\x43\x58\x63\x80\x9d\xa7\x72\xca\x73\x31\xcc\x26\x8e\xcd\x44\xaf\x5c\x2e\xa7\xc0\x2b\xcf\x8d\xc0\x87\x2d\xa5\x0e\x1c\x64\x90\x18\x57\x57\x45\x0d\x04\xe7\x57\xf4\xd9\x1b\x66\x66\x88\xfd\xaf\xfb\xdf\x4f\x9e\x07\x72\xfc\x0a\x6e\xff\x33\xba\xcb\x22\x98\xff\x15\x9a\x8c\x21\x49\x5d\x6c\xc5\x41\xde\x58\xe9\x1e\x4b\x35\xfa\x82\x7e\xce\x51\x6d\x05\x68\x0b\x10\x2a\x51\x54\x5b\x0a\xaf\x91\xf7\xd7\xd3\x22\x3f\xfe\xd3\x4e\x47\xc3\x55\xbc\x72\x44\x6e\x2c\x58\x22\x96\x83\x60\xba\x86\x5a\xc0\xd3\x3a\x6b\xbe\x0a\x82\x0f\x88\x97\x68\x9b\xfd\xef\x20\x51\x6e\x11\x15\x94\x20\x2f\x7f\xeb\xbb\xda\x45\xc2\x63\xe2\xe2\x9f\xe3\xa4\xf5\xae\xc5\xc6\xb6\xaf\xc5\x46\x07\xd0\xa1\x2d\xb7\x20\xd2\x6d\xf2\x6d\xa2\x28\x9e\x5e\x6e\x76\xf4\xae\xb4\xb5\x0a\x2d\xc4\xfb\x3c\x38\x35\x17\xbd\x17\x42\x2c\x8a\x4a\x93\xca\x0a\x88\x9f\x41\x82\x84\x43\x65\x4d\x9c\x67\xde\xbb\x2d\x4b\x48\x70\xe1\x50\xc7\x5f\xdb\x9e\x0c\x7f\xbd\x97\x49\x25\x17\x1a\x0e\x1b\x24\x57\xcc\x85\x2c\x9d\x12\x11\x49\xca\x28\x89\xeb\x48\xf5\x74\x49\x99\xb3\x9a\x97\x3c\xaf\x84\xf0\x19\xa2\xa1\x6d\xad\xe1\x40\x95\x16\x15\xf2\xda\xf9\xa3\x0d\x1b\x4f\x45\x02\x38\x4b\xca\xf0\xd9\x44\xb8\x5e\x44\xa6\x05\xa2\x19\xcb\xa9\x75\x16\x01\x3e\xe4\x44\x24\xca\xa8\x64\xb6\x7e\x1d\xd3\x4a\x41\xb2\x5a\xdc\x2f\x64\xad\xf9\xce\x67\x34\x51\x0f\xae\x1d\x8d\x0a\x8d\xd2\xe4\xe9\x73\x2e\x23\x70\x06\x13\x4c\xad\x4d\xc8\x46\xcd\xc3\xaf\xe6\x88\x9d\xa0\xbf\x5e\xd7\x19\xc4\x25\xba\x75\x72\x0a\xf9\x14\xc2\x99\x2a\xd4\x08\x6c\x88\x99\x8d\x08\x08\x14\x0f\x3c\x84\xdb\x93\xba\x4d\x95\x00\xc1\xb1\x3b\xa7\xe0\x32\xc8\x3c\x20\xbf\xba\xc4\xf0\x33\x33\x6d\x6b\x7d\xac\x17\x90\x66\xa6\xa6\x04\x25\x6d\xa3\x07\xf1\x76\xc8\x0a\x0b\xea\x02\xb1\x40\xc2\x17\xb8\x95\x80\x24\x0c\xac\x43\x49\x1b\x49\x2e\x4f\xdd\x25\x44\x7c\x02\x6f\x5a\x09\x82\xe6\x02\xa3\x26\xca\x77\xd0\x93\xf3\x67\x21\x98\x30\xde\xdc\x40\x38\xa4\xc4\x18\x78\xc3\x66\x5e\x80\xca\x66\xb6\xba\x50\x5a\x4b\x73\x3a\x70\xe2\x68\xe3\x84\x1c\xfd\xb1\x80\xe8\x9d\xb7\x98\x2f\xaf\x52\x20\xf8\x13\xb0\x40\x25\x86\x42\xfa\xac\xfe\xa0\x4a\xae\x15\x28\xcd\x75\x6b\x41\x38\x0e\x98\x03\x46\x15\x9a\x3e\xf1\x42\x8a\xdc\x1e\x1d\x1b\xc2\x8c\x05\x43\x35\xaa\x81\x94\xcb\x44\xa1\x5d\xee\xc6\x70\xcd\x1e\x04\xe4\x2a\x61\x33\x5d\x40\xb5\x38\xf5\x90\x1b\xd2\x0d\x5a\x2e\x7e\x08\x40\x18\x80\x1c\xd8\xb0\x79\x64\xab\x09\xb8\x4a\x00\xb2\x81\x9b\x47\x66\xbb\xae\x50\x41\x6e\x99\x79\x50\x01\x92\xe2\x3f\xf2\x74\x8d\x41\x0e\x38\x50\x3c\xad\x93\x35\x69\x2e\x66\x73\x0c\x2d\x20\xc5\x1c\xc2\xb4\xa4\x33\xb6\x59\xa3\x9a\x9a\x22\x43\x03\x5c\xf2\xd2\xc6\x9c\x01\x4e\xf8\xb5\x61\xa4\x22\x15\xe9\x5b\x76\xb2\x02\xec\x50\xb9\x49\x98\x9b\x6d\x6d\x21\x58\x87\x15\x19\x30\x4e\x23\xf2\xeb\x08\x17\x3d\xf7\x0e\x42\xe0\xb6\xe8\x98\x16\xa5\x7d\xae\x66\x25\xe3\x31\x50\x71\x49\x77\x49\xa8\xa1\x90\x40\xca\xc4\xa3\x74\xd6\x84\x5c\xe5\x43\xb0\xb1\x58\x6d\xa7\x64\x0f\x71\x77\x8d\xb2\x50\x84\x48\xf9\x16\x82\x48\x01\xee\x97\xae\x9b\x55\x99\x44\x10\x79\x41\x27\x81\x16\x40\x4d\x60\x1c\x46\xc1\x5f\x16\x94\x63\x65\xa1\x80\x73\x26\xca\x12\x01\xe6\xc9\x73\x44\x3c\xd3\xa3\x44\x2b\x5d\x85\x41\x1d\xe6\x3a\xed\x5b\xfa\xd8\xaa\x30\x68\xa1\xd2\xbe\xc2\xa7\x4d\x80\x4e\x23\x45\xff\x4a\xd5\x15\x30\x11\xb7\xaf\x81\x9f\x96\x4c\x88\x2d\xe2\xa8\xeb\xac\x37\x8d\xfe\x4d\x69\x70\x13\x6e\x20\xd3\xff\xa8\x79\x46\x91\x33\xe4\x15\x60\x47\xff\xf8\x78\xfd\x0a\x5d\x87\xbe\xd2\x9a\xb3\x35\x07\x75\x9f\x5d\x2a\x53\x6b\x98\x16\xf8\x81\xc6\x2a\xfd\xc7\xc7\x6b\x2a\xa9\xbd\x2c\x28\x92\xd3\x71\xd2\x7f\x7c\xbc\xc6\x0f\x09\xbd\x2b\x26\x13\x86\x37\x95\xaa\x50\x9a\x67\xfa\x18\x7c\x8c\x76\x3c\xc3\xdf\x54\x3b\xee\xd7\x8e\x20\xb3\x27\x2b\xb5\x5e\x77\x15\xf8\xa8\xe6\x33\x20\x63\x1f\x9e\x1b\xf9\x48\xa4\x87\x5b\x80\xcf\xa2\x38\xde\xe5\x0b\x7f\x77\xca\xbe\xf9\xe6\x9b\xff\x82\x8a\x6f\x54\x4f\x16\xed\xca\x5e\x0b\xb2\xa1\x2d\x5c\x33\x9e\x98\x1b\x9e\x89\x74\x16\x73\xa3\x4c\x54\x3e\x11\x26\x48\x83\xb5\x20\x1b\x10\x7d\x9e\xb6\xb1\xa4\x23\xfd\x2a\x4a\x2b\xdb\x3b\x48\x71\x4f\xdb\xd0\x8d\x58\x14\xd9\x06\x40\x2a\xdb\x26\x2c\xd7\xcb\x2a\xfb\xd0\xcc\xc2\x85\x07\x25\xaa\x90\xc2\x1a\x88\x4a\x61\x23\x88\x36\x62\x2d\xbe\x60\x0a\xbe\xd4\x1f\xfd\x43\x23\xec\xfd\x51\xea\x8f\x56\x4d\x7a\xd1\xc2\x37\x3d\xb9\xf0\x97\x14\xeb\x9f\x84\xa9\x61\x56\x81\xa3\x93\x41\x0a\xb6\xed\x7f\xf4\xc5\x94\xd5\xb4\xd3\x09\xab\x92\xfe\x1b\x7b\x46\xc8\x41\x47\x92\xdd\x8f\x4f\x81\x1d\xb4\xbd\x6d\xc2\x8b\x0d\xdb\xad\xe0\xc6\xda\x1f\x5f\xf0\x63\xbf\x74\x5a\xbf\x05\x7e\xac\xbb\x6b\xcf\xed\x91\x70\x07\x7a\x8d\x25\xf1\x85\x3f\x7d\x7e\xfe\xf4\x82\x00\xbb\x89\x1c\xef\x0f\x09\x36\xe2\x28\x3d\x48\x32\x60\x09\x79\xd9\x1b\x62\x30\x78\xc5\x09\x00\x96\x88\x1a\x58\x47\xc0\x76\x19\x31\x56\x2f\xa8\x77\xca\xdf\x7f\x46\x51\xe6\xcf\x56\x4a\xbd\x9f\x46\x58\x56\x0f\xaa\x7c\xc4\xb0\x86\x6b\x20\xa5\x1d\x47\x74\xb5\x71\x18\x43\xc0\x99\x6d\x61\xf1\x52\x2d\x75\xee\x12\x23\xb0\xe9\xc5\x59\x0f\x49\x62\xaa\x37\x00\x14\xbf\xbb\x26\x64\x62\x37\x26\x0c\x22\xcc\x04\x25\x50\x81\xd1\xa5\x52\x18\x8c\xc2\x3e\x38\xb0\xa9\x66\x13\x8f\x64\x46\xda\x3f\x9a\xde\x0a\x5b\x4e\xce\x9a\x02\xcf\x1f\x47\xec\xf6\x40\x3c\x56\xdf\xde\x1e\x0c\xd8\xed\xc1\xe3\x54\x43\x90\xdb\xc2\x61\xa3\x00\xcf\xa1\xdc\x5f\x88\xb3\xc3\xc6\x4d\x48\xc6\x6d\xd2\x5d\x3e\xe6\x59\x57\x2e\x44\x18\xc7\x04\x81\x8b\xec\xc8\xbc\x75\xfc\x50\xca\x4a\xbc\xc2\xaa\xf6\xa6\x8b\x00\xb2\x67\xaa\x4a\x72\xfd\xb8\x1f\x6d\xa6\x97\xcc\x19\xee\xf7\x07\xb3\x64\x6d\x21\x48\x6b\x82\x15\xdd\xbe\xae\x1f\xe9\xcf\xd4\x84\xd2\x93\xcd\x6a\xa5\xe6\x46\x00\x8e\xc2\xca\x69\xda\x0b\x54\xb4\x2d\xa7\xe7\x8b\xd6\x75\x16\x00\x3e\xb1\x69\x02\xbe\x40\x62\x58\x6a\x4e\x94\x0b\x97\xd8\x00\xe6\x7a\x20\x3e\x94\x62\xe0\xd2\x0e\xb0\x96\x20\x7b\xcd\x8e\xa0\x48\x9a\x34\xb4\x94\xb3\x5c\x0d\x55\xf1\x6a\xc4\x4e\xb0\xea\xea\xe6\x0f\xe4\xca\xf5\x4f\x1d\x69\xf4\xb2\xb9\xbe\x3a\x6e\x19\x8e\xe1\xc0\x67\xbf\xc5\x39\xfe\x9d\xd7\x2e\x68\xdc\x65\x0c\x04\x3f\x9e\xcb\x15\x35\x43\x1f\x84\x58\x6f\xce\x8a\x1d\x17\x98\xc3\x81\xed\x12\xef\x1e\x26\xaa\x06\x55\xdf\xdc\x01\xa4\x29\xaf\x1f\x32\x56\x3d\x5c\x19\x63\x04\xf3\x13\x0f\x36\x6f\x7c\xd2\x41\x47\x94\x90\x8e\xf1\x66\xf8\xe6\xf5\xeb\x27\xe4\x26\xf6\x3b\xc1\x6a\xd2\x41\xa2\xcd\xaf\x91\xdd\x6e\x2e\x78\x56\xcd\x59\x32\x17\xc9\x1d\xd1\x20\x07\xaf\x6b\x2b\xff\x22\x80\x3b\x99\x2b\x2b\xc5\x52\x81\xce\x0f\xe1\xa1\x94\x50\x47\xcc\x00\x20\xb0\xa4\xe8\x89\x4a\x79\x17\x76\xc9\xa7\x53\x99\x74\x1b\xfd\xc4\x63\x27\x03\xfe\x98\xa3\x65\x16\xdc\xf0\x2a\x77\x4e\x94\xa9\xca\x32\xf5\x00\x54\xd7\x25\x20\x05\xd0\x32\xe7\x8f\x22\x09\x6a\x20\x53\x40\x9a\x85\xf1\xe4\x77\x62\x97\xb3\x65\x3a\x3d\x49\x82\xa8\x2a\x77\xaa\xc8\xaf\x74\x33\x2f\x85\x9e\xab\xac\x4b\x91\xf9\x20\x73\xb9\xa8\x17\x00\x00\x01\xd5\x1f\x09\xf9\xa1\x2e\x45\x90\xf0\x0c\x3b\x86\x1b\x13\x20\x45\x58\x84\x08\xf0\x76\x1b\xd9\xc3\x4c\xdf\xba\xe3\x1a\xb1\xaa\x23\x66\xbf\xe4\xe2\x7f\xdf\xec\x21\x43\xd6\xc8\x34\xdf\x8b\xae\x0b\xf4\xc3\xcd\xcd\xf8\x7b\x51\x35\x56\xdf\xbc\x17\xe6\xcf\xd3\x71\xdb\x65\x1b\xe8\x03\xed\x3b\x41\xc0\x1f\x67\x22\xe3\xcb\xcd\xb1\xdd\x97\xf5\x62\x22\x40\x7e\x5b\x8d\x61\x8e\xfd\x88\x36\xf4\x87\xec\xfb\x59\x0c\x6c\x41\x95\x2f\xcd\xa7\xf7\x00\xc0\x10\xfb\xdf\x7c\xd4\x0f\x7e\x6b\x0f\x59\xce\x3d\x23\xdf\x7f\x50\x0f\x4c\x4d\x2b\x91\xb3\x23\x1f\xe5\xfd\x2a\xd8\x3d\x7f\x56\xa3\xcc\xc8\x37\x3e\x4e\xfa\x79\x0e\x21\xb9\x92\x77\xbd\x6e\xf4\xfa\xe6\xfb\x16\xc4\x8c\x45\x77\x0e\xef\x61\x7c\xe1\xde\x8c\x9c\xe4\xf8\x06\xfa\xb5\x47\xe4\x99\xd6\xa0\x4a\x8a\x6b\x95\xdc\x75\x5e\xc5\x9b\xd3\x31\xb6\x09\x2e\x23\xcf\x2d\x25\x94\xf9\xbd\xca\xee\x31\x9f\xfb\xe6\x74\x0c\xc8\x5d\x23\xf8\xd7\x5c\xa9\x3b\xed\xc3\xfc\xac\xd8\xbb\xc3\x5d\x75\x23\x68\xbf\xad\x95\x5c\x08\x55\x57\xbb\x5f\xd4\x20\x5c\x11\xb7\x50\x2e\x84\x66\xaa\xae\x1a\x9b\x43\xaf\xb5\xee\xc5\x17\x7a\x5b\x7b\xf2\x7d\x04\xec\xeb\xa5\xaa\x5d\x85\x5a\x59\x61\x5f\xb5\x6a\x19\x2a\x65\x1d\xd2\xa2\x35\x42\x6e\x96\x0d\x29\xbf\xe4\x83\x4a\xbb\x84\x43\xf3\x33\x16\xc4\xa0\xe4\x3a\x15\x98\x2d\xa0\xde\x86\xcf\xfe\x1c\x05\x6a\x19\x6e\x9d\xcd\x50\x7b\x0d\xe2\xc1\xeb\xbf\xfe\xf5\xaf\x23\x76\x26\x4b\x90\xc2\x2c\xf4\x81\x8d\x1b\xe1\xd5\xdc\xd5\x86\xe6\xd3\x29\x4e\xdb\xc2\x8b\x91\x4e\x43\x2e\x5c\x04\xa0\x06\x28\x44\x00\x25\xcd\xa4\x05\x36\xc0\x70\x37\x8b\x91\x89\x35\x4e\xa0\x2f\xa7\x4e\xb2\x05\x84\xe9\x64\xf2\x4e\x30\x2a\xa1\xe2\x23\xab\x30\x16\xcd\xe6\x3d\x60\x67\x0b\xb7\x02\x5a\xb4\x81\x1b\x6c\x4d\x17\x69\x87\xd6\xaf\x79\x16\xe5\x62\xd8\x43\xf0\xdc\x01\xe9\x78\x3a\xc7\xee\x63\xbb\xc0\x6d\xff\xa3\x56\x93\x65\x25\xb6\x3f\xe8\xf4\x22\x69\xf7\xb0\x6f\x19\xb7\x59\x06\xe6\xe2\x82\xd3\xdf\x67\x33\xd8\xf6\x36\x5d\x25\x55\x98\x9b\x86\x54\x30\xa8\xbb\xb2\xe0\x39\x9f\x41\x1c\x87\x91\x7e\x2d\x72\x7f\x29\x00\xbc\xc6\x9c\xa8\x8e\xbb\x54\x8a\x99\xd4\x55\xe9\x96\x97\x14\xe3\x1e\x77\x6b\xb6\xa1\x10\x0b\x56\xb3\x01\xa4\xed\xc2\x6e\x33\x07\x36\x66\x1e\x5a\x2e\x8d\xb0\x1a\xd8\xd7\xfe\x8c\x0c\x9d\x46\x84\x78\x5d\x6d\x79\x74\xca\xff\xc1\x4a\x38\x82\xa7\x43\x10\xf4\x83\x72\x36\x31\x21\xdf\x12\xa3\xd1\x2d\x73\xd7\x98\xb1\x49\x6c\xb3\xa2\xc4\x58\x55\xfa\xfa\xe8\x76\xfc\xee\x05\x8f\x1b\xeb\xd2\xdc\x79\xe0\xa0\xe0\x88\xe0\xf8\x16\x4e\x4d\xc1\x65\xc9\x8e\x7c\xad\x75\xaa\x85\x8a\xa9\x70\x05\x2f\xbd\xa2\x99\xa8\xc5\x82\xeb\x57\xc4\xd9\xb8\x51\xec\x39\x9e\xd5\xc4\xbc\xc5\x33\x66\x27\x05\x52\xc6\xda\xec\xa6\xf6\x4d\xac\xbb\xeb\x8e\xfc\xa4\x51\xd7\xeb\x3a\x3b\x84\xf1\x58\xca\xfb\x44\x58\x44\x36\xe8\xb6\xe7\x10\xe8\xa4\x6f\x32\x00\x45\xce\x1e\xb8\xb5\x01\xca\x24\x40\x20\xa0\xbe\x69\x39\x46\xe3\x78\x4d\x96\x08\x42\xb3\x0f\xfb\xd0\xd5\x77\x67\x63\x51\x6a\xa9\x2b\x91\x57\xdb\x13\xa0\x2b\x9e\x2a\xcd\xbe\xcb\x54\x72\xc7\xce\x04\x84\x8f\xf5\xa5\x45\x57\xdf\x9d\x39\x3a\xd4\x49\x80\x20\x9d\x79\x2b\x0a\xb4\x50\xb9\xac\x54\xe9\x4e\x0e\xe2\x82\xee\xc5\xde\xda\x30\x9b\x92\xc6\x6e\xef\xbd\x99\xf4\x52\xd5\xec\x81\x63\x5a\x3d\xac\xc5\x88\xdd\xc8\xe2\x2d\x3b\x0f\x2a\x0d\xb5\x19\x69\xa5\xde\xc2\x08\x0b\x38\x9e\xfa\xed\xaa\x29\xd6\xfc\x23\xaf\x76\x35\xca\x3e\x31\x0f\xf1\xab\x72\xd2\x3b\xd8\x0e\xb7\xa4\x3b\x38\xb1\x84\xd3\x85\xa5\x7d\x10\x76\xa9\x65\x7c\xa5\xc8\x04\xd7\x42\x5b\x37\xc4\x0f\xe7\x27\x67\xc7\x84\x74\xaa\xed\xc8\x8e\xcb\x49\x7a\x7c\x75\x7e\x72\xf6\xe1\x7c\xb4\x48\xbf\x9a\xab\x87\x61\xa5\x86\xb5\x16\x43\x59\xf5\x8e\x32\x12\x4b\x78\xdc\xe1\xc8\xc5\x16\x36\x8f\x18\x64\xb3\x4a\xb1\x3b\xb1\x64\xf0\xdc\x10\xb5\xab\xef\xce\x7e\xd2\x21\xdc\x8e\xd4\xec\x58\x54\xc9\x71\x22\x8a\xf9\x31\x7d\xe3\xf3\x4e\xd4\x5d\x9f\x2e\xe3\x67\xa2\xb2\x0c\x25\x1e\x73\x09\x4e\x45\x31\x67\xf6\xbd\x4f\x35\xfa\x3d\x55\x13\x2f\x94\xca\x7a\x1d\x44\xd3\x90\xce\x61\xb0\x79\xe5\xa4\xfd\xde\x7c\xb2\xed\x7a\xaa\xf0\xb2\xd1\x03\xd2\x22\xa5\x7c\xa2\x09\xaf\x83\x85\x00\x98\xe0\x2b\x90\xd0\x3b\x60\x6f\xb0\x0d\xc8\x83\x01\xf8\x09\xaf\xab\xb9\xc8\x2b\xeb\xf7\xc4\xbe\xe2\xab\x79\x31\x35\xda\xc3\xbd\x04\x38\x52\x2a\xcc\xae\x99\xbb\x9b\xa1\xa0\x29\xb3\xe7\x5e\x8b\xfe\xe5\x7e\xec\x8c\x23\x2c\xe3\xbe\xe2\x91\x3f\xe6\x50\x5c\x6d\xe5\x98\xf3\x74\x21\xf3\xcf\x73\xd0\x7b\xca\x31\x2f\xd2\xcb\x8b\xf4\xf2\x22\xbd\xbc\x48\x2f\x2f\xd2\xcb\x8b\xf4\xf2\x22\xbd\xfc\xde\xa4\x97\x8e\x72\x0c\x7f\x16\x11\x46\x18\x86\x07\xfb\xea\x31\xaa\xbb\x04\x99\xd5\xd6\xcd\x40\xb0\xb8\xf4\x18\x48\x2f\xa5\x7f\x2f\x80\xae\x7e\x49\x5e\x7a\x49\x5e\xfa\xf3\x05\x87\x5f\x20\x4d\x7d\x8f\x88\xfc\x70\x3d\xda\xaf\x15\x94\x4c\x71\x88\xbc\x4b\xf8\x9b\xbc\x77\x4e\x2a\x75\x78\x8e\x64\xd2\x1e\xab\xf4\x48\xbf\xf2\x12\x73\xfb\xc5\x23\x55\x41\x03\xd2\xd4\x9f\x2e\xfc\x38\xa2\x14\x7a\x9b\x78\xe4\x35\x64\xec\x8b\x0b\x51\x6e\x3d\x4f\x61\xd0\xb2\x5b\xad\x18\xc3\xac\x35\x3c\xbd\xaa\xb5\x95\xce\x63\xf0\x1e\x35\xd1\xe6\x62\xa7\x01\x7e\x59\xd7\x22\x81\x37\x18\x22\xec\x09\x32\x44\x21\xa8\x14\xe4\x0a\x4f\x96\x98\xe2\xff\x20\xf3\x14\x82\x64\x20\xf0\x60\xc4\xc6\x54\xdc\x60\x05\x1d\xe0\xca\xba\xb6\x7e\x2f\xab\x1f\xa2\xfe\x3c\x63\x6a\x45\x3b\x3f\x7f\x7a\x82\x45\x6b\xbf\x1e\x14\x6d\x2b\x81\xc1\xbd\xd6\x48\xbf\x08\xa0\xed\xd6\xd0\x2d\x0e\x41\x94\xa2\x04\xbc\x14\xe0\x19\x5d\x36\x8d\x10\x78\xcd\x1e\xf5\xcd\x06\x8d\x8c\xeb\xea\xa6\xe4\xb9\x86\x21\x6e\xc8\x78\x07\x3c\x2d\xae\x2b\x4c\x74\xaf\x42\xa4\x18\x56\xb9\x4e\x6c\xda\x88\xca\x1d\xd8\x1f\x40\x51\x40\xd0\xc2\xfe\x93\xd4\x3d\x33\xda\x3f\x96\x14\x20\x89\xba\x89\x6d\x13\x50\xdf\x8d\x72\x70\xe3\xe1\x74\x6c\x0c\x99\x5b\x49\xa8\x5f\x63\xd6\x78\xfb\xef\xf6\x25\x70\x1e\x01\x06\x3f\x39\xb0\xa1\xb1\x37\x80\x5c\xf6\xce\x68\x70\x03\x0b\x49\xd2\x1f\x21\xb7\xdb\x32\x76\x43\xe6\xb0\x35\x87\xbd\x3f\x3e\xd7\xce\x82\x7e\x67\xfa\xea\xda\x37\x50\x32\x8c\xad\x19\xed\x73\x78\xc9\x6c\xfd\xd2\x15\x81\xbe\x99\xad\xeb\xf6\x77\xf7\x58\xbf\xa0\x97\xe3\xa0\xf7\xa4\x85\x6b\xed\x3f\x80\xaa\x9d\x4d\xae\xb1\x76\xbd\x28\x4b\x2f\x99\xb4\x5f\x68\x26\xed\x7a\xaa\xfe\x4c\x22\x5f\x67\x76\xed\xda\x37\xac\x02\xb1\xa2\x6d\xed\x66\x1a\x5a\xc8\xdc\xc8\xff\x3d\xf2\x11\x6c\x74\x72\xbe\x12\xee\x3c\x75\xf5\xf2\x38\xcb\xc5\x43\xe6\x03\x9f\x82\xf4\xdf\x89\x85\x30\x7d\x90\xd5\xdc\x88\x3f\x54\x59\x37\x2a\x43\xc5\x92\x92\xeb\x39\x40\xbf\x99\x4e\x65\xb5\x1a\xf7\xee\xc0\xa7\x62\xc3\xf0\x6b\x76\x14\x42\x49\xb6\xbd\x60\x14\x7b\xad\x00\x0b\x8b\xd2\x83\x60\x40\xaf\x9e\x1e\xdb\x4a\x0b\xdf\xb5\x7a\xb4\x9f\x4e\xff\xf3\xab\x68\x35\x64\xdb\x89\xc7\x6b\xe2\x28\x97\x53\x8a\x93\xd4\x86\xfc\xd5\x52\xcf\x5d\x7c\xb1\xad\x68\x8f\x88\xfb\x86\x45\x46\xee\xb4\x66\x0a\xc0\xb3\xb1\x97\xaf\x1e\xe6\xbc\x1a\x4a\x3d\xe4\xc3\x9e\xec\x67\xeb\xe8\xe1\xcd\x65\x20\xe3\x12\x90\xe0\xa8\x65\xbf\xd5\xa2\x5c\x22\xe4\xa1\xc7\x77\xa1\x03\x89\x65\x1d\xd1\x05\x41\x7b\x93\xa0\xc3\xf4\x62\xca\xc2\xce\xc8\x70\x84\x47\x26\xb2\x1a\xa1\xbc\x02\xc6\x27\xe2\x3a\x16\x6b\x75\x1c\x21\xc5\x80\x81\x8a\xdd\x89\x25\x56\xe6\xa1\xfa\x39\x30\x98\xa0\xc2\xa4\x2b\xe5\xeb\xce\x3c\x2e\x9f\x0f\x07\x6f\xbf\xe0\x03\x26\xa7\xbe\x36\x94\x1f\x1d\x8d\x4c\xe5\x8d\xd1\x6c\x79\x0e\xcc\xea\xdd\x4b\xf1\x70\x4c\xa5\xd9\x87\xe6\x02\x0f\x29\xb1\xf3\x18\x3f\x72\xfc\x15\xfc\x7f\x68\xb7\xa9\x85\x6f\x3d\x53\x99\xca\x6d\xe0\x7e\xe8\xea\x91\xa4\x00\xcb\x1f\x6b\xcd\x0e\xbe\xb5\x09\x01\x24\xa7\x4c\xe6\xba\x9e\x4e\x65\x02\x52\x82\xbd\xab\x64\x48\xac\x20\x6a\x9f\x2e\x6e\xc5\xef\x04\x9c\x87\x44\xa4\x22\x4f\x04\x1e\x3f\xce\xec\x30\xae\xc4\xf4\x59\xef\x62\xa1\xd2\x61\xb5\x82\xd0\xb3\x1f\x40\xa1\x5d\xb8\x5c\x37\xb6\x7f\xc7\x3b\x2b\xce\x10\x0b\x87\x1f\x60\xfc\x6f\x60\x79\xad\xd1\xed\x44\xab\x7b\x68\x4b\x96\x73\x5c\x6d\xa6\xef\x37\x11\x4d\xf7\x3c\xc7\x9d\x94\x23\xe4\x7e\x80\x9f\x68\xa1\x23\x1b\xcc\xd7\x02\xee\xad\xbd\xe9\x7b\x48\xc3\xe8\x55\x78\xe0\x2a\x5e\x78\x52\xc9\xfc\xa4\xd0\x5c\x49\x95\xea\x3b\xf6\xe1\x50\x47\x9b\xd6\x16\xf1\xfc\xcc\x7a\xc8\x67\xad\x35\x00\x05\x76\x80\xf6\x8b\x74\xeb\x23\xe4\xf9\x15\x00\xa7\x10\x31\x8f\x52\xbd\x33\xe7\xf7\x70\xc4\xcb\x92\xba\x6e\x03\xf2\xd3\x8f\x91\x35\x58\x7f\x2f\x72\x5b\x83\xa5\x23\x4f\x7a\xa5\x31\x2b\xc5\x34\x03\x60\x00\x33\xca\x99\x7f\x4e\xe3\x5e\x63\x1d\xdf\xd3\x74\x56\x0b\xde\xc0\xdd\xdc\x7a\x8b\xf0\x46\xbb\x1b\xfe\xfc\x97\x77\x07\x39\xb3\xb9\x92\xb8\x90\xe1\x1c\xac\xd4\xf9\x7b\x14\x0f\xfb\x71\x25\x34\x13\xbc\x93\x22\x4b\x57\xca\x89\xb7\xd4\x65\x5d\x6d\x1d\x72\x22\xaf\xab\x78\x60\xf8\xa3\xa4\xa8\x07\x6c\x21\x16\xaa\x5c\xbe\xb2\x59\x75\xb2\xb4\xe5\x3e\x68\xf0\x5d\x3c\x89\x12\x1c\x37\xf3\x24\xf7\xf9\x0d\x35\x03\x5c\x8d\x04\x08\xa3\x78\x6b\x91\x7d\xd3\x30\x31\x67\x40\x19\x83\x1c\xe2\x71\x98\xc8\xef\xd9\x3d\x6f\x93\xdd\xda\x6d\x0e\xa9\xbc\x97\xba\x5b\x24\x8f\xd2\xec\xa3\xd5\xb0\x37\x5d\x3c\x16\x4a\xc3\xd5\xa6\xc5\x1c\x58\x21\x56\x63\x09\xe1\x37\xb7\x07\x4f\x30\x24\x8c\x1c\xa0\xcf\x3f\x6a\x9e\x57\xb2\x5a\xae\xde\x29\x1d\x47\x9c\xb6\x9d\x09\x5c\xbb\xb7\x81\xc9\x49\x11\x70\xc8\x7e\xec\xc9\xd8\xeb\x3f\x6a\x15\x58\x70\xd6\x9d\x4c\x68\xc5\xb4\xa8\x34\xe3\xb3\x59\x29\x66\x86\xde\xff\x06\x0f\x4b\x61\x3e\x8e\x39\x93\x4c\xe4\x10\x64\x95\x42\x45\x12\x57\xf6\xee\x25\x4e\xe4\x25\x4e\xe4\xcf\x6b\xfa\xfc\xb3\x86\x66\x58\x1b\x13\x90\x89\x2f\x04\xb9\x36\xa2\x67\x4f\x89\xa8\x08\x27\x4a\x95\xdd\x1c\xed\x43\xba\x68\xa8\x03\xd8\x19\x49\x19\xa9\x35\x9f\x7d\x29\x00\xbe\xf1\x32\x7c\xb2\xd0\x86\x90\xe3\xec\xc3\xbe\x1d\xf4\xb7\xc1\x13\xda\x68\x19\x43\xf9\xc6\x4c\x0e\xb4\xc1\x17\xbf\xe7\x17\xce\xd8\x36\xf9\x3d\x2f\xcc\xef\x5d\xdb\x4c\xb6\xc4\xad\x55\x90\x42\x65\x32\x59\x06\xd5\x22\x4c\x6f\xba\xa5\x30\xf5\x3e\x8d\x0c\xe1\xc5\x59\x63\x93\x7c\xe1\xf4\x9f\x9f\xd3\xbf\x38\x39\x37\x13\xfe\xbd\x39\x37\x9b\x8c\xbc\x17\xf1\x5f\x2b\xa4\xcc\x71\xff\x16\x84\xbe\x43\xbc\x1c\x54\x54\x78\xb1\xdb\xa1\x69\xde\xee\x38\x20\xd0\xb9\x75\xa1\x8a\x2a\x74\xc0\x85\xdf\x05\x7d\x98\x27\x73\x50\x9c\xbc\x76\xfa\x7c\x24\x6a\x6b\xf7\xc8\xfe\x54\xe1\x15\xfa\xa5\x13\x55\x88\x15\x4b\xc9\xea\x5a\x46\xed\x02\x70\xcf\x38\x9c\x69\x2a\xb3\xca\x10\x28\x80\x1e\x82\x57\x56\x5d\x5f\xb0\xd4\xd6\x2f\x53\xf2\xe4\x0e\x9d\x5e\x9c\xe4\xb7\x49\x5d\x31\xf1\x68\x68\x9e\x16\x29\xab\xb5\xa1\x90\xd7\xe1\xc7\x3f\x42\x92\xa2\x2b\x45\x35\xb1\xd5\x08\x01\xb5\xc4\x55\x76\xb3\xfc\xf2\x9d\x2a\xb1\x00\x9f\xd3\xe5\x61\x14\x03\xac\xab\x4f\x43\x3c\xb9\x3c\x63\xf1\x04\x8f\x64\x50\xf0\x1a\xaa\x86\x15\x22\x79\x35\x70\x65\xd1\x11\xf6\x74\x9b\x4a\x39\x3e\xf5\x37\x5a\xf1\xb6\xed\xd8\x26\x1d\xce\xae\xf8\x76\xab\xbc\xae\xd2\x3d\x6e\x41\x0b\x68\xec\x2e\xd6\xfc\x6e\xa7\xde\xd6\xc6\x92\x8d\xce\xa5\x95\xb6\x11\xc5\x71\x6a\x42\x78\xf5\x01\xd1\xd3\x5a\x9c\x6b\xbd\xa1\x90\xf3\x06\x72\xf3\xc3\x2a\xb9\x69\xfd\xe8\x9f\x9a\xde\xd4\x5a\x74\xad\xe1\x4f\x50\xf4\x3f\xf6\x01\xba\x0d\xaa\x54\xc5\x33\x54\xe8\xbc\xd3\x83\x2e\x36\x41\xac\x39\xdb\x57\xcb\x81\xfd\x12\x96\x61\x9b\x53\x7f\x15\x14\x68\xdb\x78\xec\xc3\xc6\x0d\x4f\x77\xa2\x16\x45\x5d\x89\xf6\xca\x6f\xdd\x27\x1e\x4f\x6c\x67\x9c\x23\x1c\xe9\xf8\x83\x0b\xfe\x08\xd1\x43\x1c\x13\xf4\xd5\x74\x65\x08\x58\x71\xef\x61\x87\x3c\xf0\x28\x4b\xee\x18\x13\x72\x86\xd4\xfd\xd0\x75\xef\x4b\x14\x7f\xe1\xd7\xc1\x4a\xe5\x1b\x2c\xd2\x20\xb8\x37\x16\x99\x42\xb4\xba\x16\xd9\x6a\xd1\x40\xee\x5d\x3f\x46\xb7\x58\xc8\xaa\x22\x07\x41\x00\xaf\x0c\x81\x2f\xa1\x49\x9e\xb6\x17\xca\xe3\x63\xa5\x5b\x1b\x86\x94\x2d\x43\xde\x01\x11\xf9\x0f\x52\xdb\x5a\x91\x50\x3b\x76\x61\xd5\xe5\xa1\xad\xbc\x06\x4c\xf9\xcf\xba\xe5\x7d\xae\x3e\x81\x4f\x7c\x2c\x62\xaf\xfd\x8a\xe6\x13\x35\x83\xc0\x94\xc0\x47\x8c\x21\x45\xbc\x28\x32\xe9\x43\x97\xdc\xea\x74\xdf\x77\xa3\x05\x75\x5d\x77\xa8\x03\x2c\xb5\x43\xc9\xc0\xc2\xc0\x18\x80\x85\x50\x94\xf0\x59\xbd\xf2\xd9\xfe\x29\x0f\x2a\xeb\xf4\xcf\xa8\x8c\x20\xd9\x1c\x50\x87\x79\xb2\xcf\x11\xf4\x49\x3f\x88\x46\x00\xa0\x1a\xfb\x1c\x41\x1f\x74\xbc\x68\x04\x90\x43\xbd\x8f\x11\xf4\x3a\xa4\x09\xcf\xc4\xc5\xc7\x2d\xa1\xe8\x3a\xdf\x8a\x41\x0f\x0b\xd7\x86\xd1\x5b\x71\x91\x85\x36\xeb\xe0\x8c\x57\xe2\xc1\xcb\xa3\x07\x98\xf0\xe6\xff\x74\x79\xfc\x9b\x0d\x88\x5b\x43\xb3\x78\xf8\x95\x67\xaa\xd9\x11\x42\xad\x04\x39\xf2\xf4\x6b\xdf\x53\x65\x97\xa8\x3b\xe4\x01\xc6\x65\xeb\xe2\x92\x94\x65\x77\xe1\x64\x7c\xc1\xbe\xc7\x5e\xfa\xd7\x1f\x2f\x55\x85\xea\xca\x99\x5a\x70\xb9\x29\x99\x29\xc4\x4f\xb0\x9f\x1d\xbb\x2e\x18\xf6\x11\xe6\x3a\x01\x6b\x80\x6c\x4a\x00\x88\xf9\x03\xd6\x2a\xd9\x0e\x83\x22\x40\xa7\xa4\xdb\x1f\xe0\x4e\xd8\x15\x05\x7a\x01\xca\x0f\xe0\xff\x6a\x01\x09\x62\xf7\xc8\x95\xcb\x05\x70\x5a\x10\x1a\x2a\x0a\x4f\x36\xba\xa2\x05\xaa\x18\xb0\xf7\x6a\x26\x73\x7b\x78\x41\xf5\x36\x53\xe7\x32\xdb\x49\x1f\xee\x86\xc2\xd2\x3a\x3b\xcf\xf9\x24\xeb\x54\x1b\xde\x65\x7c\x86\xf6\x23\xd3\xf2\x38\x95\x1a\x62\xd7\xae\xaf\xdf\x87\xd5\xaa\xad\x91\x80\x8e\xb0\x8b\x3e\xc0\xcd\xed\xbf\x1f\x78\xd2\x36\xa0\x4a\x5f\x60\x2a\xa0\xd0\xae\x4c\x05\xe6\x6a\xc2\xbb\x24\x78\x59\xc4\x6b\x17\x35\x7f\x33\x97\xc9\xdd\xd8\xac\x33\xb9\x21\x54\x69\x9e\xe5\xc1\xa3\x88\x02\x34\x7f\xeb\x9f\xdf\x07\xc3\x18\x6f\xc6\xa3\xb1\x27\xe6\x9a\x06\x6e\x5e\x69\x2d\x9c\xe2\xef\x39\x4b\xe1\x92\xf6\x1f\x0c\x92\xea\xfe\x74\xc1\x2e\x22\xd1\x57\x08\xe6\x76\x74\x40\xe6\x76\xcc\xbd\x07\x80\xdb\xb0\x21\xc8\x26\x1c\x84\xdb\xb9\x26\xf8\x2b\x69\xa1\x76\xd1\x2c\x03\x20\xd9\x79\x75\xd9\xa4\x8e\x51\xcf\xf7\xc9\x9f\xb7\xe1\xca\x2f\xbc\x78\x4f\xbc\xb8\xf7\x99\x7b\x61\xc6\x2f\xcc\xf8\x0b\x64\xc6\x7d\x90\x9d\x5e\x38\xf2\x0b\x47\x7e\xe1\xc8\xdb\x71\xe4\x36\x27\xdb\xaa\x6b\x07\xbc\x3f\xbe\x4a\x5d\x23\x27\xe6\xe4\xf2\xcc\xad\xb7\xcd\xbd\xf2\x6d\x02\xac\x17\xd3\x4b\xea\x2c\x63\x61\x7f\x7d\xed\xbe\xe0\x01\x3a\x47\x2f\xdc\x86\xfc\x91\x13\x17\xe8\xb1\x32\xfa\xc0\x22\x3d\x59\xd2\xcf\x0d\xbb\xfd\x4e\x8e\xa5\xed\x5c\x6d\xa9\x35\x91\xdb\x0d\x08\x4c\xe5\x3b\xd9\xe8\x36\x76\xba\x61\x83\x37\x6c\x0d\x85\x8b\xb8\x52\x85\xe6\xa8\x92\x01\x47\x93\x5b\x73\x60\x1a\xc0\x72\x9a\xf3\x8f\x81\x43\xdc\xf2\x00\xfb\x4e\x29\x20\xcc\xc8\x1f\x09\xbc\x2c\x3e\x29\xb1\x2b\xd8\x0a\x5e\x80\xfb\x67\xaf\xa4\xed\xbc\x87\xd0\xe6\x9a\xf6\xca\x3a\xa2\xa9\x1c\x6a\x1c\xb1\xd9\xcb\xb9\x84\xca\x21\xdc\xba\xd1\xac\x33\xf7\x67\x9e\xc9\xd4\x4d\x13\x0d\x9f\x17\xf9\x80\x5d\xaa\xca\xfc\xef\xfc\x51\xea\x4a\x0f\xd8\x99\x12\xfa\x52\x55\xf0\x67\x7f\x9a\xe7\x66\xbc\x05\xd9\x83\x65\x75\xa8\x61\x6e\xcf\xbc\xf9\xad\x3f\xc5\x83\x29\x76\xdd\xb3\x9c\xc1\xc5\x80\x9b\x16\xc4\x12\x69\x12\x0d\x84\xdf\x7e\xa9\xd9\x45\x6e\x18\x15\xad\x0b\x44\xb6\x61\x1e\x2a\x76\x61\xbd\xd8\xb9\xca\x87\x90\x4c\xda\xda\x07\x2e\xa7\xe9\x27\x5c\xd0\x8e\xee\xa8\x2b\xc8\x8c\xc4\x5f\x28\x41\x86\x27\x22\x65\x69\x8d\xe5\x48\x18\xe5\x52\xc9\x84\x41\x26\x15\x83\x0c\xab\xcf\xe3\x60\x46\x49\x6d\xbd\x76\x84\xc2\xda\x5c\x65\xa9\xb6\x92\x1b\x40\x71\x01\xc7\xb1\x80\x4a\x66\x18\x66\xd6\x82\x1c\x94\x93\xa5\xb9\x76\x16\xaf\x19\x17\x8a\xd8\xd0\x99\x79\x79\x2a\x45\x96\xba\x45\xcb\xa0\xaa\xc9\x9c\xe7\xec\x03\x7f\xc4\x0f\x5e\xcb\x7f\x09\xec\xe5\x05\xea\xf1\xb3\x45\x3a\x6e\x08\x3e\x83\x9d\x74\x64\x39\x90\xec\x31\x06\xed\x9c\x27\x73\x40\x63\x86\x6d\x06\x84\x02\x64\x92\x3c\x2b\xe6\x3c\xaf\x17\xa2\x94\x09\x4b\xe6\xbc\xe4\x49\x25\x4a\x3d\x60\x87\xc3\xc3\x01\x3b\xfc\xe7\xa1\xb9\x6f\x87\xa3\x43\x3c\x50\x5a\x94\x92\x67\xb0\x2c\x50\xe7\xd0\xb1\x7f\x7f\x14\x81\x5b\x4c\xb8\x16\x7f\xf9\x96\x89\x3c\x51\x29\xa8\x5f\x25\xe0\x2a\xac\x84\x19\xf2\x72\x22\xab\x92\x97\x4b\x76\x44\x91\x32\x4b\x20\x02\xf8\xc2\x2b\xec\x11\x43\x14\x8d\x1a\x65\x24\x5b\xf4\x39\x82\x20\x65\xb7\xa1\x52\x2a\xd3\x23\x29\xaa\xe9\x48\x95\xb3\xe3\x79\xb5\xc8\x8e\xcb\x69\xf2\xed\x5f\xbe\xfd\xdb\x57\x1a\x25\xce\xe1\xb7\xfb\xcf\x0a\x1f\xb8\x1f\x7c\x86\x98\xb9\x25\x2f\xa1\x99\x5f\x6e\x68\xe6\x1f\x26\x09\x03\x56\xe2\xac\x7b\xd6\xbe\x11\x86\x37\xd8\x8a\x5c\x4b\xac\xce\x9c\x0f\x27\x32\xe7\x50\xb0\x2b\xb8\xbe\xb9\x3d\x7e\x50\x86\x96\x5d\x80\xfc\xe7\x30\xa1\xa1\x90\x17\x98\x38\xb0\x20\x19\xce\x5e\x02\xd6\xc0\x42\x54\x73\x95\x8e\xd8\x49\xb6\x8a\x37\x61\x24\x23\xe0\xae\xe6\xe2\x12\x2d\x4e\x3d\xf3\x31\x7a\xb7\xe9\x74\x00\x80\x05\xe6\x9f\xc0\x9a\xf3\x25\x13\x8f\x88\x3d\xe2\x85\x0b\x44\x9f\x16\xf7\xc2\xe5\x38\x3e\xcc\x05\x62\xdf\xc1\xb0\xed\x09\x3f\x19\x5f\xec\x23\xe8\xa6\x27\x14\x44\xb7\x55\x10\xc2\x88\xc0\x50\x94\xc8\x4c\x02\x3e\x62\x51\xaa\x59\xc9\x17\x0b\x5e\xc9\x84\xcd\x79\x9e\x42\x0d\x73\x44\xb6\x71\x74\xbb\x9f\xb2\xf7\x1c\xc1\xba\x24\x89\x3c\x3d\x42\x17\x3b\x3a\xcf\xef\x37\x59\x7e\xe3\x76\x24\xbc\x82\x53\x19\x17\xa4\x52\xac\x20\x18\x51\xa2\x60\xf7\xb2\x54\x39\xa8\x28\xf7\xbc\x94\x7c\x92\x51\x79\xcb\xd1\x6d\x7e\x9b\xdf\x90\x9f\x19\x64\x7a\xe2\x53\x15\x2f\x67\xa2\xa2\x0e\x0f\x75\x28\xfe\x80\x95\xca\x11\x50\x68\x7d\x27\x96\x43\xa4\xc1\x05\x97\x25\x94\x9b\x6b\xfd\x66\xb7\x50\x94\x77\x8b\xf0\x97\x81\xf8\x4e\xd6\xb9\x6a\xcf\x30\x29\x10\x83\x76\xfc\x15\xfc\xaf\x2f\x4d\xb5\xc9\xb9\x1b\x13\x6c\x97\x91\xf1\x8a\xb6\xca\xca\x92\x14\x67\xb3\xd1\x6e\xd6\x5f\x34\xfe\x51\x2c\x37\xda\x2d\x56\x5a\x06\x67\xc9\x88\x40\x20\x2c\x63\xa3\x2e\x95\xf3\x4e\x2c\x7b\xe8\x96\x08\xd8\xd0\xa5\xa0\xd1\x27\x03\x39\xc9\x25\xf0\x02\xb1\x1a\xb1\xb8\x86\xab\x4c\x6d\xbb\x3b\xd1\xdf\x92\xfe\x67\x3c\x66\x80\xd2\x75\xa8\xbd\x5c\xfb\x2c\x47\xae\x33\xa5\xcc\x37\x89\x93\x8c\x36\x1f\xaf\x97\xf4\xb1\x2f\x40\xa9\xda\x21\x7d\x8c\xee\xe6\xae\x79\x63\x71\xf0\xa0\x6e\x70\xd9\x67\x30\x39\xe2\x17\x5e\x54\x92\x2f\x56\x25\x79\xc9\x16\xeb\x10\x40\xf7\x94\x26\x86\x9d\x05\x85\xb6\xd7\x9a\xc4\x53\x5e\xa0\x0d\x18\xaf\x39\x28\x2b\xab\x45\xe1\x77\x96\x30\x27\x82\x79\xff\x88\xcc\xdb\xea\xcd\x73\x4d\x55\xde\x31\xd7\x88\x24\xd1\x36\x93\x1d\x15\x8b\x80\x12\xeb\xc0\x76\x47\xec\x52\x55\xce\x00\x8c\xce\x59\x99\x62\xc9\x9f\xcc\x5a\xb0\x61\x5e\x91\x4f\xc9\xc1\x62\x62\x26\x1c\xfa\x0e\x17\x2a\xdd\x90\x7e\xb2\x91\x78\x46\x15\xd6\x06\x98\x63\x12\x0b\xd5\x2d\x93\x8a\x85\x94\x44\xa4\x96\xdb\xfb\xf5\xb3\x0b\xe6\x34\x49\xbf\x72\x18\x5c\xc1\x1e\xe6\x4a\x93\x69\x9c\x92\x37\x8c\x8c\x60\x18\x12\x6d\x98\x7d\x4c\x11\xe0\x17\xd3\x66\xe6\x91\xb9\x95\x22\xc5\x95\xef\xf8\xb2\xcf\xc9\x2a\x78\x35\xd7\x03\x02\xc2\x5c\x79\x9b\xe8\x15\xed\x3d\x7c\x10\x85\x51\x19\x96\xc9\x46\x20\x53\xe7\x51\x47\x55\xc4\x7a\x0c\x61\x15\x06\xe1\x7c\xb5\xa8\xea\x02\xfb\x17\x65\xa9\x4a\xf3\x61\xa1\x2d\xc0\xe8\x82\x97\x77\x22\x75\x30\x3b\x23\x36\x36\x23\x74\x82\x12\x3a\x37\xee\x85\x63\xd3\xe6\x9b\x64\x40\x84\x8f\x1c\x8e\x46\x87\x58\xc8\xcd\x48\xd0\x15\x2f\xa9\xde\xbf\x79\xfe\xac\x5e\xb2\x1f\xc5\xf2\x46\x99\xc1\xae\xe3\x5a\x7f\x5a\x59\xf7\xb9\x45\x5d\x1f\x62\xd1\x2d\xef\xba\x76\x71\x6c\x16\x0d\xd5\xfd\x0a\xc6\x9a\x39\xa8\xcd\xaa\x9e\xcd\xc3\xf8\x11\x43\x8c\x4a\x51\x95\x52\xdc\x0b\x4f\x6b\xc1\xe2\xd3\x0f\x2e\xa8\xcf\x19\x90\x9a\xd5\xb9\xfc\xad\x46\x02\x07\xd4\xd6\x75\x8e\x03\xb0\xd3\x70\x74\xd1\x65\x4d\x6c\xa3\x77\xe1\x68\xbb\x07\x83\x1f\x8d\x4b\xd6\xf0\xc4\x8d\x0c\x6f\x7e\xa0\x23\x02\xed\xb2\x3b\x8d\xb3\xd8\x8f\xeb\x1f\xba\xef\x15\x8b\xe7\x78\xe1\x75\xc4\x0b\xf7\xce\x01\xf7\xc1\xf7\xae\x43\xb6\xf6\xb4\xaa\xaa\xad\xc7\x8d\xb8\xe2\x86\x88\x9e\x8f\x74\xc5\xdf\x02\xf7\x64\x13\xca\x22\xaf\xb5\x60\x2a\x77\x21\x20\x38\xcb\x89\x43\xcc\x1d\xc5\xfa\x7f\x2d\x1c\xc6\xf2\x6b\x18\xeb\xeb\xbf\xfe\xf5\xaf\x0d\xc0\xe9\xbf\x7c\xfb\xed\x88\x9d\xc9\x12\xcc\x1b\x92\xcc\x5e\xb4\x50\x40\xb2\x79\x29\x80\xa0\xf3\xe9\x14\x39\x96\x85\xf1\xa5\x80\x33\xf2\x8a\x2e\xe4\x6c\x0e\x5f\x86\xdc\xe5\x7c\x9a\xc9\x84\xa8\x3c\xc6\x7e\x29\xca\xe8\xc1\x24\x0e\xe8\xcb\x2f\xbd\x99\xe3\x00\x53\xab\xa7\xfa\x7b\x23\xc9\x0d\x2c\xfe\x9c\xb9\x47\x46\x88\x48\x78\x0e\x25\x82\xa0\x33\xbf\x26\x5a\xb4\xf9\xc1\xb7\x45\x24\x7c\x91\x3f\x5e\xe4\x8f\xcf\x22\x7f\xec\xcd\x6a\xa5\xb7\xe6\xe5\x71\xd8\xe7\x86\xf0\x90\x50\x10\xf2\x3c\xb6\x42\xbc\xd6\x43\x1d\x33\xc3\x7a\x8d\xe2\xbc\x4d\x11\xe4\x75\xe6\x8c\x9d\xd8\x54\x5d\xca\x6a\x79\x6a\xae\xcb\x63\xa7\xfd\x2d\x6c\xe7\x43\x23\xe0\x69\xa3\x86\x65\x04\xaf\x1d\xe4\x23\x06\x19\xa7\x23\x76\xad\x16\x02\x49\x01\x7a\xad\x82\x6b\x00\x10\x0d\xcd\x2f\x9a\xe3\x3b\x56\x69\xe3\xf1\x88\xb1\x5f\xe6\x82\x5e\x31\xdd\x68\x11\x47\xaa\xc8\x7c\xa5\xa7\x8a\xdf\x89\x00\xbb\x7b\x43\xac\x45\x96\xa9\x87\x71\x29\xef\x65\x26\x66\xe2\x5c\x27\x3c\xdb\x04\x85\x7b\xb2\xe6\x15\x8b\x13\xeb\xe3\x50\x41\x2b\x4d\xcc\x55\x36\x04\x7c\x66\x6e\xe4\x42\xc1\x5a\xd0\xcb\x14\x21\x62\x68\x79\xc1\x21\x29\x9e\x5e\x20\xbe\x62\x4e\x2d\x4b\x81\x3f\xa1\x93\x10\xfb\x97\x78\x16\x73\xf5\xcf\x5c\x3c\xfc\xd3\xf4\xa6\xd9\x34\xe3\x33\xb7\x29\x10\x5f\x95\xc7\x39\x82\xbe\xeb\xb5\x13\x30\xc4\xb4\xac\x05\xe3\xd9\x03\x5f\x6a\xf4\x07\xc6\x7d\x48\xfd\x96\xbd\x79\xc5\xca\x1a\x2a\x30\xb8\x3e\x52\xf6\xf5\x2b\x90\x50\x4f\x4f\xc6\xff\xbc\xfe\xdf\xd7\xff\x3c\x39\xfb\x70\x71\xd9\xfb\x16\x26\xbc\xe0\x13\x99\xc9\x86\xd3\xb0\xcd\x0b\x10\x36\x85\x33\x97\xa6\xc7\x69\xa9\x0a\x72\x5e\xd6\x79\x6e\x84\x1e\x37\xe0\x46\xe9\xe1\x50\x31\xa7\x18\xb4\xa8\xc3\x59\xc9\xc3\x88\xcb\x00\x27\xb6\xce\xa1\x02\xdf\x0e\xa1\xd7\xa7\xe1\xe4\x1a\x13\x77\x07\xa1\xcb\x7a\x78\x55\xe7\xe1\x0e\xe4\xfe\xf8\xa4\x68\x5d\x60\x63\xdc\x59\xbc\x0e\xc1\xaf\x7e\x19\xb0\x7a\xa6\x06\x63\x23\xcf\xb2\x25\x13\xbf\xd5\xf2\x9e\x67\x02\xab\xcc\x97\x4a\xb9\x03\x33\x57\xba\x6a\x2b\xd8\xdc\x7b\x37\xcd\x39\x83\xf0\xfb\x8e\x39\xb9\x36\x2c\x15\xb9\xb2\xe1\x8c\xb6\x20\xbe\xf9\x15\xd3\x3d\xac\xd8\x17\xe4\x22\xb8\x8d\xbd\x09\x36\x53\x6a\x3b\xe2\xb1\xeb\x19\xb9\x70\xad\x1d\x5c\x42\x63\x33\x7d\x46\xfc\x14\x22\x35\x79\x0a\xae\x78\x10\x00\x88\x9b\xea\x3b\x2b\x11\xd0\x85\x24\x07\x04\x55\x17\xb5\x9f\x82\xd4\xe1\xa9\xe0\x55\x5d\x0a\xbc\x88\x98\xab\x8d\x41\xf2\xfd\x83\xc5\x6d\xba\xc4\x95\x52\x95\x4f\x80\xe9\x58\xc6\x5f\x1c\x5b\x94\x21\xaa\xf1\x1c\x24\xa8\xd2\xd6\x84\xc4\xed\xf5\xd9\x32\x51\x60\xfb\x96\x9b\x5b\xd6\xf9\x09\x0a\xa9\x1b\x2e\xea\xf7\x17\x67\x70\xb2\xea\x9c\x8c\xd2\x55\xb9\x44\xb3\xb4\x2f\x2e\xd7\x24\x4c\x3f\x99\xbd\x6a\xec\x8e\x21\x76\x75\x6e\x24\x5d\xf6\x81\x2f\x11\x9e\x88\x28\x9c\xcc\xdb\x39\x86\x91\x02\xc5\xb6\x9c\x26\xe0\x2a\x31\x42\x50\x1b\x7b\xd1\x2d\xfc\xe5\x29\xd0\xe5\x66\x51\x2f\x55\x6e\xf6\xbd\x57\xa2\x83\x0b\x4d\xf5\x8b\x08\x12\x10\xd1\x65\x0e\x51\x29\xb0\xeb\xb5\x2d\x47\x5e\x41\xe5\x3e\xf3\xce\x8f\xf5\x44\x64\x56\x10\x07\x47\xa9\x0d\x05\x90\x0b\x3e\x13\x8c\x57\x6e\x0f\x20\xd1\x43\xd7\x25\xd9\x42\x65\xc5\x52\x25\x50\xac\xa5\x4f\xfd\x74\x71\xc6\x5e\xb3\x23\xf3\x2d\x44\xcd\x9e\x72\x09\x26\x52\x94\x34\x1b\xdc\x63\x6a\xbb\x80\x21\xc1\xb6\x1a\x39\x6e\x8a\xf5\x04\x73\xc5\x74\x9d\xcc\xed\x98\x5c\xd2\x8b\x11\xb8\x45\x69\xd6\x10\x80\x45\x7e\x2f\xa7\xa0\xeb\x06\xfd\xb4\xb9\x8a\xfa\x4f\x3b\x5c\xa0\x90\x6a\x43\xfa\x51\x34\x07\xdc\x5e\xeb\x22\xa1\x8b\xe5\x4b\x0d\xfd\x6e\x16\x76\xdb\xeb\xa5\x45\x2b\xfa\xc6\x9a\x34\x1c\xb2\x68\x24\x76\x3c\x9d\xa8\x1b\xf6\x1c\xc7\x4a\xe7\x2a\xab\x81\x73\x6c\x64\x4d\x73\x7f\x0d\x6d\xe6\x79\xaa\x16\x2b\x1f\x73\x10\x52\xc1\x07\xbe\xfc\x7d\xe9\xef\x44\x8d\x61\x50\xb6\xd2\x63\xca\x7b\xd9\x69\x4f\x85\xdf\xd1\xc9\x8a\xf8\x5b\x7c\xa2\xab\x92\x3b\x40\x35\xad\xa6\xd5\x03\x6a\x10\xd8\xf4\x08\x16\xfb\x91\x2f\x8a\x4c\x0c\xd8\x62\xa9\x7f\xcb\x5e\xd9\x88\x5e\x0a\x21\x33\xdb\x95\x31\xb0\x80\x85\xad\xd9\x37\xdf\xbc\xfe\x4b\x50\x55\xbc\x28\xd5\xe3\x12\x2d\x0d\xb9\x66\x2a\xf7\xe6\x9b\x38\xdb\x23\x15\x95\x28\x17\x60\xb8\x44\xd9\x04\xea\x83\xe0\xd1\xc8\xf5\x83\x28\xbd\x7b\x96\x82\xa7\x4a\xb0\xf7\xba\x6f\xbc\x84\x8d\xbf\x20\xbf\xff\x89\x3d\xfc\x7f\x98\xa0\xe3\x2d\x91\xdf\xc3\xba\xfb\xdc\xd2\xaf\x2f\x04\xfa\x9c\x08\xef\x4e\xd8\xef\x1f\xfa\xd4\xcf\x77\xd3\xfd\x3d\xd6\xbe\xb7\xab\xf3\x89\x20\xe1\x2d\x97\xdc\x47\xa0\x07\xf4\x74\x92\x24\x91\x22\xbf\x86\xed\x52\x33\x36\x31\x37\x9f\x55\x6a\x06\x5a\xe9\x5b\xf6\x1f\xc4\x8c\x07\xac\xce\x53\x51\xea\x4a\x29\xd8\x3d\x23\x9a\x92\x8d\xbd\x10\xe5\x9c\x17\xe0\xc6\x29\x44\x29\x8b\xb9\x28\x79\x46\x5b\xab\xb1\x82\x28\xcf\x29\xf8\xa2\x5a\x42\x8f\x45\x29\xf3\x44\x16\x9c\x30\xb1\xc8\x37\xc2\xeb\x6a\x8e\x11\x1a\xe6\x88\x40\xe6\x64\x5d\xcd\x55\x09\x4c\xe4\x3f\x7c\xce\x21\xda\x56\xf5\x0b\x27\xfd\x5c\x9c\x94\xd7\x95\x02\xdb\x4e\x7c\x78\x6e\xd4\x9d\xe8\x5c\xee\x8e\xd7\x6c\x7d\xfe\x00\x02\x00\x44\x2b\x6b\x0e\x04\x47\x27\x38\xed\x50\xf4\xe3\x74\x5e\x69\xb5\xa1\x38\x1b\xcf\x01\x79\xa3\x82\xfe\x60\x8c\x1c\xc2\x7d\xb2\x25\x5a\xa2\x0c\xef\x3c\x25\x37\xdc\xbd\x28\x4b\x99\xa6\xa6\x61\x65\xfd\x00\x08\x99\xd7\x5f\x0d\x04\x65\x6c\x5c\x67\xd9\x35\x1d\xc8\x0e\xbd\xbf\xd1\x34\x0e\xa4\x8c\xb1\x28\xb4\x6d\x82\x5a\xa3\xe6\x0b\xb1\xe2\x9f\x80\x5b\x55\xd4\x59\x66\x93\x43\x60\x2c\x68\x3c\x74\x15\xeb\xbc\x53\x1f\x96\x2e\x5e\xf5\x11\x5b\x19\x13\x54\xd1\x04\xd1\x99\xe2\xb1\x99\xfd\x65\x22\x12\x6e\xbe\x6a\xff\xa6\x0b\x4b\xab\x1a\xb8\x52\x06\x00\x12\xdd\xda\x33\x98\xb1\x78\x92\x20\x7a\x34\x31\x80\x3b\x34\x64\xec\x12\x3b\x4a\x46\xc4\x63\x9c\xf9\xf1\x57\x3e\xa1\x67\x08\x8f\xcc\xea\xd0\x52\x0e\x55\x3e\xe4\xc3\x42\xb5\x38\x95\xf6\xe7\x2b\xeb\xc0\xe7\x78\x09\x36\x7d\x11\x45\x9f\x4f\x14\xdd\x48\x7c\x02\x9a\x63\xfd\xe9\x01\x1b\xb5\x78\xbf\x64\x26\xa9\xe9\x76\x46\xd4\xd7\xc6\xa1\xb4\x50\x91\x2f\x3c\xe8\x7b\xdd\x85\x74\x7d\x6f\xaa\x3f\x9a\x07\x48\x0b\xdb\xd5\x1f\x7d\x76\x21\xd1\x8a\x76\xfb\x96\x15\x37\xa4\x79\x34\x9b\x36\xd3\x3d\x22\x79\x92\xc2\x04\x5f\xb2\x3f\xbe\x6c\x89\x6e\x53\x00\xd1\xfb\xd6\xdd\xed\x9d\xf3\x51\x71\x7d\xe7\xef\xbe\x30\xac\x38\x00\x85\xf6\xcf\x49\xba\x1b\x92\x74\xf7\xac\x35\x84\x1a\x97\xe8\x85\x53\x7f\xb1\x9c\xfa\x25\x2d\xa4\x07\x17\xd8\x5b\x7a\xc8\x8a\x6a\xd6\x23\x57\xa4\xf3\xad\x06\x6a\xa5\x8b\xdc\x6b\xaa\x72\xa8\xb7\x51\x4c\x2d\xfa\xea\x0b\xdf\x09\xa9\x1c\x35\xa5\x8f\xcb\x5c\x1b\x5a\xcc\xd7\xf4\xe2\xa2\x02\xad\x18\x03\x2e\x9c\x00\x6d\xd2\xe8\x4f\x46\xa3\xe1\x33\x2e\x73\x5d\x19\xc5\x51\xb3\xa3\x1f\xdd\xee\x80\x26\x89\xf7\x91\xa9\xd2\xa3\xe8\xbf\xea\x4a\x64\x2c\x5c\xa4\x5c\x37\x27\xab\x53\x19\x85\x96\xb7\xa9\xca\xd8\xc4\xca\x6c\x86\xa5\xe4\x80\x3a\x60\x7f\xb0\x31\xc6\x66\xba\x23\x76\x62\xb8\x92\x2c\x80\x22\x80\x89\x11\x97\x01\x3c\xca\x68\x79\x99\x2e\x99\xac\xb4\xc8\xa6\x18\x3a\xe8\x2c\x32\x53\xd9\xf4\x31\x02\x1a\x49\xdb\x67\x06\x1e\x0a\x11\x0a\x0a\x10\x5f\x24\xb6\x16\x8c\xe6\x26\xec\x21\x6d\x04\xef\x04\x9f\xa5\xce\xcd\xfd\x81\x95\xee\x1d\x65\x21\x1e\x0b\x89\x22\x24\xd5\xec\xef\x58\xca\xf3\x66\x5b\xbb\xa6\x44\x31\x11\xff\xc8\xf1\x7f\xf0\x5c\xcb\x6a\xd9\x30\x5e\xc6\xe7\x6b\xc4\x4e\xb4\x9f\x30\xe3\x45\x51\x2a\x0e\x85\x79\xfc\xc8\x06\xa1\x82\x6b\xe3\x44\x8b\xac\x9e\x49\xf2\x89\xc3\x3b\x95\xbc\x17\x10\xde\x51\x59\x0f\xfe\x9a\x0f\xde\x04\x9d\xc1\xeb\xe4\x9d\x2f\x01\xc2\x02\x02\x80\x5c\x17\x74\x07\xa6\xe1\x1f\x9a\xa9\x2c\x05\x8e\xc2\x73\xf6\xb7\xd7\xac\x10\x65\x42\xa7\x05\x62\xb3\x29\x56\x20\x93\xf7\x02\xe2\x32\xd7\xbf\xfc\xf5\xb7\x6c\xae\xea\x52\x8f\x42\x57\xf5\x1b\x78\x86\xa2\x8e\x0d\xe1\xae\x58\x26\xb8\xae\xd8\x9b\xd7\x6c\x21\xf3\xba\x6a\x85\x94\xdb\xd6\x13\x0c\x77\x6c\xfd\x6e\x8f\x79\x35\xb7\x1b\x0c\x11\xb3\x2e\xb8\x96\x8e\x1f\xc6\x24\x45\x5e\x78\x88\x53\xae\x94\xa5\x36\xe1\xc4\xf3\x1e\x38\x61\xff\xc6\x7a\x3b\x3f\xfb\x48\xd6\x20\x6a\x61\xf0\x66\x98\x6a\x0b\xbf\xbd\x54\xe1\xfc\xa3\x08\xd2\x76\x43\x3f\x81\x84\xfb\x22\xda\xbe\x88\xb6\xbf\x4f\xd1\x76\xbf\x32\xed\x58\x95\x1b\x89\xaf\x69\xe3\xb1\xe3\xc2\x2c\x3d\x95\xdb\x3b\x7b\xa8\x21\x9e\xa4\x53\x10\x34\x9f\xda\x4c\x89\x37\x64\xee\xc5\x98\x96\x12\x3f\x1b\xe6\x37\x39\xc7\x2a\x66\x30\xb9\xd4\xa9\xb3\xcb\xeb\x7f\xbe\x3f\xf9\xee\xfc\x3d\x22\x50\x99\xd7\xb4\x4f\xfc\x0b\xfc\xbd\xf8\x0e\x38\x4f\x28\x3d\x90\x92\xc8\xb0\x43\x5e\x38\x8a\x7c\x78\xc9\x17\xe2\x90\x12\x83\x64\xce\xce\xe9\xbe\xc2\x82\x39\x04\x08\x9b\xf5\x65\xc4\x07\xb0\xf7\xab\x5c\xb0\x70\x69\xa5\xad\xfc\x97\x62\xac\xb2\xf7\xe8\xf4\x4f\x33\x54\x69\xbc\x95\xed\x0b\x87\x49\x6f\x39\x95\xf3\x53\x29\xe4\x9d\xd9\xdc\xc2\xc0\x91\x84\x85\xb3\x94\x86\x9c\x1f\x81\x90\x91\xff\x7d\x49\xdf\x30\x92\xd0\x7b\xc5\xd3\xef\x78\xc6\xf3\x44\x94\x23\xf6\x93\xae\xc1\xa1\xc4\xb5\x96\xb3\x7c\xd5\x93\x1d\xa7\x2f\xc9\x20\xc9\x82\x22\xc7\x52\x0f\x37\x4e\x03\x98\xb2\x3a\x07\xb5\x46\x95\x4c\x64\x5a\x60\x76\x1c\x71\xd1\xb0\xa5\x87\x0f\x0f\xa3\x7f\x2b\x05\xbe\xae\x61\x10\x9a\x06\x73\x27\x09\x8e\x56\xff\x66\x59\xf8\x73\x64\x43\xad\x5c\x28\xb4\xca\x77\xc8\x78\x21\x0e\x36\xcc\x45\x45\x99\xc1\xf6\xd9\x31\x90\x9e\xa1\x59\x75\xb8\x09\x4f\xce\x6f\x2b\x7a\xee\x77\x94\xd6\x62\xb7\xd5\xe7\xfb\xad\x3b\x68\x5b\x0f\xa7\x54\x95\x4a\x36\xc2\x81\x5f\x8c\x99\x6d\x49\xd1\xef\x74\x87\x47\xec\x1a\xb3\x32\x35\xbb\x3d\xb8\x39\x1d\x63\xe9\x82\x9f\xce\xe0\x1f\x46\xc8\xb9\x3d\xb8\x3e\xbd\x19\x37\xea\x18\xdc\x9c\x8e\xfb\x17\xca\x82\xd4\xd3\x0d\xd7\xe4\xb2\x5e\x4c\x50\xbd\x0d\x91\x73\x71\x21\x15\xb9\xea\x6c\x4a\x01\x7a\x15\xa1\xd7\xe0\xd0\x5b\xfa\x43\x3d\x59\x0a\x44\xe4\xa9\xe4\xf9\x4c\xb0\x37\xa6\xb3\xbf\xfc\xe7\x7f\x7e\xf3\x9f\x23\x76\x19\xa6\xf2\xf2\x9c\x5d\x9c\x5c\x9e\xfc\xf3\xfa\xe7\xd3\x7f\x5e\x9e\x7c\x38\x8f\x80\xf4\xb9\x43\xca\x0c\xee\x50\xa6\xd4\x9d\x48\x59\x5d\x50\x84\x34\x04\x09\xe2\x61\xcf\xc3\x8c\xdb\x31\xe4\x74\x05\xc1\xb5\x66\xa9\x57\x70\xfa\x1b\x11\x9f\x28\xde\xd0\x22\x1c\x9a\x57\x1c\xb9\xd3\x68\x76\x38\x0a\xc3\x18\x16\xbc\x78\x45\x74\xd2\xb5\x92\xb3\x5c\x95\x54\xbb\xcf\x5e\x0f\x54\xb7\x93\xac\xd6\x95\x28\x2f\xc6\xff\x7d\xa9\x72\x92\x64\x3d\x92\xbd\xad\xf9\x07\xaf\x55\x4c\xfc\x56\x23\x46\x45\x73\x24\xfb\xbd\xa3\xc8\xff\xf3\xd9\x90\x5b\xbb\xeb\xae\x52\x42\x5d\xc9\x6c\x24\xf3\x4a\x57\xe5\xe8\x22\xaf\x3e\x96\xd7\xbb\x2a\x48\x9d\x75\xab\x43\xc6\x15\x57\x5c\xe4\x15\x8a\x43\x36\xae\x9e\x63\xe8\x34\xa6\x19\xc3\x19\xe6\xcd\xeb\xdf\xce\x91\xdd\x3e\x75\x5c\x1b\xd7\xc6\xea\x99\x17\xe3\x66\x21\x10\xa7\xc3\xe7\x74\x7a\x1a\x4c\x03\x63\x87\xb3\xa5\xbd\x48\x0b\x6e\x7a\xc4\x5c\xd4\xdc\x75\x16\x25\xa4\x2e\x78\x4e\x9d\x60\x9f\xe6\x04\xcb\x1c\x6c\x58\x93\x25\x1a\x65\x74\x2f\x86\xf3\x77\x6f\xc1\x19\xf4\x61\x35\xc1\x11\x4f\x78\x6e\xd3\x67\x93\xb9\xb9\xdc\xa9\x0b\x70\x45\x61\xdc\x01\x81\x07\x58\x97\xb7\x07\xe6\xc8\x1b\xca\x06\x20\xd4\x56\x9b\x38\xba\x3d\xb8\x3d\x78\x35\x60\x58\xdb\x01\x5e\xf2\xeb\x38\x72\x6f\x59\xbb\x9f\x5f\x08\x73\xb9\xe6\x82\xa7\x90\x5f\xeb\x6f\x99\xe1\xdd\x10\x61\x0b\x35\x44\x28\xc1\xc1\x15\xd9\x84\x0a\x23\x61\xe9\x3d\x23\x1a\xb3\x53\xbb\x93\x03\x66\x39\x3e\x5e\xcd\x98\xe7\x5f\xd0\xb5\x36\x1c\x95\x2a\x0c\x9e\x3f\xa2\x66\x6a\x08\xda\x7e\x6f\xe5\xbd\x2c\xab\x9a\x67\x43\x59\x68\x0c\x5c\x23\x97\x88\x99\x9b\xec\xaf\x87\x0a\x1a\xe0\xc5\xb8\x4b\x1b\x0d\x5a\xc5\x5e\x3c\xbf\x15\x02\x73\xab\x50\x72\x32\x1c\xdd\x05\xa6\xd0\x3d\xb0\x81\xf1\x1a\x59\x46\x01\x45\xad\xa7\x53\x99\x78\x9e\xe7\xf8\x04\xbb\x99\x0b\x6d\x2e\x8c\x76\x69\xf9\x88\x46\x00\x2c\xc5\x5b\x5f\xb1\x25\x5e\x62\x30\x2e\xe8\x42\xe5\x58\x3d\x1c\x82\xb8\x73\x8d\x88\xe5\x18\xbf\x4d\x9f\xe3\x65\x29\xef\xcd\xa1\xab\x20\x7b\x26\x15\x41\xe1\x88\x8b\xf1\x88\xb1\x13\xa8\x6f\x62\x64\x42\x0a\x02\x07\xd9\x8f\x4c\x0c\x99\xe2\xe9\x70\x42\x7b\x6e\xc9\x08\x8d\xb1\xe0\xa5\x33\x16\x05\x26\x62\x92\xf9\xf6\x0e\x8f\xde\xdc\xc3\x0d\xb9\xcd\x61\x33\x4b\x92\xdc\xb4\xc2\x18\x20\x5e\x81\x05\x31\xcd\x01\x39\x3e\x48\x1f\x24\xc4\xcf\xaa\x2e\x29\xf7\xe8\xd4\xf0\x63\xb0\xcf\x94\x69\xcb\x36\x5e\x2a\x7f\xd5\x2c\xb9\x91\xf9\xbd\xca\xee\x21\x09\xa5\x01\xe1\x78\xf5\xee\x74\xf8\xe6\xcd\xd7\xdf\x40\x5a\x22\x48\x1a\x47\x1b\xe0\xaa\x4d\x6b\x4c\x45\x72\x12\xea\x0d\x55\x90\x9a\x88\xf8\xee\x6d\x7b\x1f\x6e\xf0\xb0\x8c\xa1\x40\x77\x8f\x45\x8d\xda\xbb\x4c\x47\xd9\x10\xa4\x53\xa1\x31\xa5\x50\xb1\x52\xd5\x55\xb0\xfe\xf6\x70\x56\x0a\x8e\xe4\x10\xf3\x11\x54\x69\x6f\xcf\xf0\x41\xa6\xde\xfa\x01\x84\x0f\x02\x89\x6e\x0f\x30\xdd\xba\xbc\xb7\xb9\x8f\x64\x13\x41\x33\x8b\xb9\x9f\x79\xca\xf8\xbd\x92\x29\x61\x74\xa9\x3c\x65\x73\x55\xc0\x76\x85\xf4\x0b\x1a\x5e\x92\x28\x4e\x55\xb6\x88\x00\x61\xb4\x56\x29\xf5\x9d\x91\x4b\x2b\x97\x59\x2a\x17\x74\x11\x52\x37\x7e\x5d\x10\xaa\xb0\x19\x21\xd1\xcd\xdb\x03\xa6\x26\x3a\xa9\xcb\xae\x21\x2e\xf8\x92\x61\xf0\x58\x34\x4a\x28\x46\x8c\x60\x18\x39\x80\x67\x98\x91\x84\xc1\x7c\x33\xa5\x52\x08\xd3\xe3\x19\x5d\x4e\x3f\x84\xbe\x9b\x3e\x17\x3c\xab\xe6\xa7\x73\x91\xdc\x5d\x6e\xd6\x1a\x5b\x5a\x3b\xb6\x83\x13\xc4\x16\x89\x69\xc1\xac\x1a\xea\xf2\x5a\xdd\xed\x58\xad\xdf\xff\x43\x4b\xcf\x52\x3b\x14\x94\x58\x9a\x66\xbc\x90\x6c\xc2\x93\x3b\x91\x07\x15\x83\x3c\x37\xb7\x1f\x1e\xb1\x5f\xcc\xd5\x33\x2b\x6b\xe8\xe4\xd0\x73\x48\x37\x34\x14\x69\x65\xa0\x92\xba\xb4\x68\xd8\x2a\xe2\x8b\x02\xd0\x4c\x88\x87\xda\x1a\xba\x1a\xd1\x59\x57\x4e\xd2\x79\xeb\xc5\x08\x5f\x48\x78\x5b\x0c\xe5\xb6\x3a\x56\x16\x7c\xb8\x53\x1c\x6b\xb2\x76\x7b\x27\xcd\x44\xde\xc6\xe3\x8f\xfe\x00\xc2\x65\xb4\x05\xbb\x0d\x6e\xad\x2f\xc6\x4d\x87\x98\x95\x80\xac\x34\x44\x79\xc2\xa9\x28\x44\x9e\x6a\xb4\x2c\x78\x74\x0b\x88\x94\xce\x80\x3a\x26\x99\xaa\xd3\x21\x61\x86\x97\x16\x8c\x27\x42\x1f\x07\x7b\x77\x34\x59\xdc\x08\x0e\x4f\x99\x65\x49\xc1\x81\x89\x64\x32\x47\x7f\x03\x21\x05\x36\x38\xfa\xb0\xcb\xf9\xb4\x70\x40\xe0\xf7\xc0\x69\xf4\xbe\x4e\xe1\x28\x11\x30\xe9\xca\x08\x81\x1b\x80\x67\xfc\x52\x82\xd2\xd3\x2c\xf0\x57\x64\xbc\x32\x47\x61\x80\xcb\x4c\xac\xc8\x0c\x20\xf1\xac\x3d\x4c\xa3\x6a\xcc\x2c\xe2\xdb\x6e\x35\x6c\x0f\x81\xf4\xeb\x86\x41\x64\xea\x62\xac\xf7\xbd\x90\xb7\x07\x5b\xc5\xc3\xa0\x86\x3d\x84\xb3\x8b\x25\xd7\x86\xc4\x15\x82\x90\x98\xf8\xfb\xc3\xa9\x2c\xc5\x03\xcf\xb2\x5d\x42\x63\xfa\x49\x1d\x70\x40\x37\x58\x36\xac\x98\x88\x87\xd9\xc9\x4a\xeb\x2c\x2e\x9f\x57\x40\xde\xbb\x43\x65\xec\xac\xbb\xdb\x04\x12\xc6\x96\xb0\x6d\x02\x09\xdd\xce\xd4\x93\x4c\xea\xf9\xa5\xaa\xae\x04\x4f\x97\x27\x56\x40\xef\x02\x69\x58\xf3\xca\x00\x69\x0c\xd1\x6c\x4c\x2c\x97\x71\x6e\xfa\xd9\xe5\x35\x93\x46\x4c\x5e\x58\xaf\x1e\x99\x98\xa9\x4f\xc2\x2f\x69\x74\x0c\xbe\xad\x7a\xa2\x05\x61\x32\x98\x46\xd6\x56\xdc\x56\xd4\xcd\x19\x28\x63\x30\x08\xe2\x5c\x16\xdb\x00\x7e\x2b\x4a\xb9\xe0\x25\xa4\x9e\xb0\x84\x53\x0c\xbc\xad\x1a\x59\x45\x86\x18\x0a\x92\xe7\xec\xba\xe2\x95\x98\xd6\xd9\x35\x00\xb0\xfd\x60\xd5\x46\xcb\x23\xd0\xe9\x5b\xf0\x19\xaf\x04\xbb\xbe\xfa\x99\x44\x5e\x1c\xba\xac\x34\x1b\x63\x7a\x27\x62\x82\x1a\x35\x04\xfc\xc3\x40\x51\x64\x49\x85\x16\x4c\x87\x18\x8e\x5f\x9a\xe3\x0f\xf7\x42\x18\x52\x21\x75\x62\x04\x98\x36\xe4\xf2\xb5\x58\x46\x0d\x40\xf7\xb6\x2a\xfb\x46\xbe\xb4\xb2\x42\x20\x5e\x16\x76\xa8\x54\x6d\xbe\x59\x77\x02\x0a\xc7\xb9\xa5\xb2\x5f\x02\x71\x05\x15\x73\x55\x86\x60\x57\x83\xd8\x48\x0d\x7b\x57\x2f\x90\x9e\xda\x6c\x0b\x27\xe5\x5a\x8c\x1c\x50\xe6\x40\x01\xaf\xb4\x17\x6a\x07\xa4\x3d\x06\xaa\x93\x43\xe2\x5a\xa8\x54\x4e\x97\xbf\x23\x05\xfd\x93\xd5\xd1\xd0\x58\xe0\xef\x64\x0a\x24\xa9\x4b\x57\x09\x8c\xc9\xa7\xc0\xdb\x2e\xc6\xb7\x07\x64\x47\x46\x2b\x0a\xe0\x72\xc0\xd6\x2d\xb8\x44\x5c\x31\xea\x9e\x71\xea\x7f\xc4\xb0\x72\xa8\x67\x8f\x50\xba\x28\x6d\x69\x68\x15\x3c\xfb\x31\xac\x67\x96\x8b\x18\xbc\xe0\x72\xef\x4e\x85\x3d\x99\x46\x1a\x0b\x7b\x0a\xac\xb6\xab\x76\x4c\x5b\xfb\xb8\xc0\x54\x14\xd5\x8e\x34\xb0\xb9\x6a\x3b\xa5\x1e\xb6\x0d\xb4\x69\xe9\xef\x2e\xb7\x02\xf7\x21\xc8\x5a\x9f\xab\x87\x90\xea\x06\xee\xaf\x78\xf7\xdc\xcd\xf3\xa5\xfd\x70\x6e\x86\xcf\x87\x97\x6b\xd0\xf7\x92\xde\x1e\x84\xaf\xdd\x1e\x44\xee\x45\x2f\x9d\x89\xe8\xe2\x3a\x5d\x13\x8f\x34\x29\x41\x46\xe3\xb5\xfa\xb3\x8b\x11\x09\xac\xb0\x86\x1a\x07\x72\x21\x05\x48\x05\x4a\x76\xc0\x91\xca\x60\x79\x02\x55\x8c\x92\xfe\x6d\x24\x14\xd6\x24\x6d\xa8\x75\x93\x25\x59\x65\x01\x73\xa0\x2a\xeb\x24\x88\x7d\xf1\x9f\xb0\x51\x30\x17\x53\x16\x99\x8e\xbd\x61\x34\x57\x8c\xce\x36\xc3\x9f\xbc\xb6\x67\x61\x08\x44\x34\x62\x62\xc1\xb6\x0a\x11\xe5\x45\xfa\x36\x25\x27\x65\x84\x83\xe5\xbb\x82\x8b\x6d\xf6\xd2\x7c\x13\xb7\xe8\xf6\x80\x4d\x6a\x99\xa1\xf6\xe2\x16\x19\xad\x0a\xc1\x32\x3b\x37\xaa\x61\x64\x64\x55\x03\x62\x0e\x76\x0e\xb7\x7f\x89\x3f\x2e\xb7\x07\xe1\xbe\x47\x9f\x71\xca\x2f\xc0\x3f\x92\x71\x3e\xe4\x23\xb1\x30\x7f\x64\x34\x57\xa7\x2f\x58\xab\x63\x5d\x02\xca\x1a\xc8\xc5\xaf\x36\x0d\x66\x9f\xe4\x87\x16\x5d\xe6\xb3\xa1\x6b\x37\x74\x44\x08\x18\xd6\x1e\x43\xc5\xae\xe3\xd4\xeb\x75\xbe\x10\x4c\xb4\x6e\x94\xa3\xb5\x6b\xe4\xd3\xb0\x7b\xba\x3f\x42\x0d\xaf\x2b\x88\x29\xd4\xa3\x63\x42\xb8\xf2\x65\xab\xde\xba\x6d\x1d\x60\x70\x80\xc0\x62\x5a\x08\xc2\xb9\x03\x71\x0c\xc7\xd0\x96\x9c\xbd\x69\x91\xbb\x78\xc0\xea\x62\xb7\x71\x80\xe6\xa2\xf7\xe6\x01\xeb\x5c\x4f\xc8\x4d\x3b\x3d\x4f\xc4\x70\x37\x30\x9f\xd3\x4d\x2c\x7c\x17\x0c\x3c\xfa\x76\xcc\x85\x7a\xad\x35\x42\x63\x7e\xbc\x1e\x8b\x52\x03\xc2\x4a\x3f\xd0\xe5\xa8\x10\xad\xeb\x84\x15\xae\x17\x1b\x54\xdb\x44\xaa\x6e\x5f\xdf\xa9\xbe\xe9\x66\x95\x1e\xae\x0d\xa5\x48\x23\x2d\x51\x8e\x9b\xb3\x68\x4f\x1b\x6d\x56\xcc\x19\x73\x65\x34\x63\xac\xf8\x9e\xcf\x5c\x58\xc8\xf9\xa3\x21\x8c\xe2\xb1\xfa\x16\x7d\xfd\x8f\x53\x8d\xff\xc8\x2b\xf3\xaf\x11\xbb\x58\x14\x99\x4c\x64\x95\x51\x78\x5c\xe9\x12\xf2\xec\x6b\x4d\xb0\xa7\x6d\x11\xe9\xba\x2a\x66\xfe\x1e\x0b\xf8\xc7\xa6\x59\x5f\x4f\xca\x66\x47\xab\x89\xb9\x22\xd6\xc2\xe6\xcf\xcf\xc9\xf8\xc2\xf0\x9e\x14\xad\xdd\x1a\x51\x97\x1a\x9c\x3d\x52\x43\x3d\xea\x30\xaf\x2a\xa3\x2a\x45\x8b\xff\xc4\x4c\xc4\xed\xea\xaa\xff\xec\x1a\x59\x47\xcf\xbc\x5e\xf0\x7c\x68\x76\x0b\x78\x7c\x18\xc8\xe1\xa7\x6c\x73\x2a\x68\x5f\x30\xc8\xcb\x27\x65\xaf\x45\x86\xdf\xa1\x28\xfc\x26\x00\xf8\x9f\xe3\x96\xcd\x5d\x0c\x0b\x91\xd3\xed\xa6\x61\xb9\xd9\xd8\x0d\x0b\x72\xe2\x23\x47\x79\x65\x21\x4f\xc7\x0d\x64\x5f\xbb\x8b\x35\x08\xbb\x54\x0b\x19\x8b\x41\x36\x1c\x7b\xb0\x8a\x66\x2c\x24\x39\x4e\x04\x5b\xc8\xb2\x04\x1d\xb3\x39\x1c\xb4\x72\xc8\xd9\xbc\x02\x64\xcf\x4a\xcc\x90\x10\x8f\xd8\xb5\xa8\x58\xb0\x61\xe0\xf1\x40\x4c\x7f\xf3\x6f\x42\x20\xc0\x3b\x64\xcf\x1b\xc1\xc4\xd4\x25\xbe\x5d\x29\x76\x6b\xf1\xd6\x91\x00\x2c\x55\xed\xbc\x92\x98\x94\xeb\xe6\xa7\x5b\x56\xea\xd2\xff\x88\xf0\x55\xca\xaa\xf8\x43\xa8\x26\xb9\x3a\x1b\xbb\x48\xd6\xd4\xbc\x17\x89\xc6\xf6\xfe\x42\xf6\x5f\xc8\xfe\x9f\x8d\xec\x77\xc0\x42\xbc\xd0\xfe\x17\xda\xff\x87\xa7\xfd\x4b\x9d\x54\xd9\x7a\xcd\x0a\x7e\x76\x29\x46\x9c\xdd\x99\x7d\xc8\x58\xc1\x4b\xbe\x10\x66\x59\x2b\x0b\x9a\xd9\x11\x6e\x1f\x62\x34\x1c\xc0\xe5\x7d\x7a\xf0\xbd\xad\x18\x00\x19\xab\xe6\xed\x25\x62\xf3\x6c\xc4\xf4\x8f\xc7\xd1\x71\x1b\x6c\xbc\xe9\xd6\x5f\xe8\xb3\xee\x37\xa7\xe3\x6b\x95\xdc\x89\xea\xa4\x3b\x73\xb7\xd1\x2e\x88\xab\xe4\x39\x23\xe8\x4d\x54\x22\x55\x6e\x18\x1c\x82\x31\x31\x0d\xef\x3c\x3d\x03\xc2\xf0\xcd\x5e\x55\x64\x7e\x30\x0c\xd6\xde\x9f\x44\xe5\x39\x3a\x62\x06\x2b\xe9\xa5\x85\x4a\xd9\x45\xff\x40\xe9\x0d\x91\xe5\xdb\x84\x48\x07\x80\xaf\xfb\x89\x87\xfe\x8c\xe1\xb8\x37\x5c\x76\x60\xc6\x41\x62\x8a\x4a\x29\xdb\x0b\xda\x82\xd5\xb2\xaa\x78\x32\xb7\x2e\x22\xa4\xac\xb7\x07\x18\x5d\x72\x7b\x00\x51\xb8\x39\x00\xcb\x58\x82\x44\xae\xf4\x4a\x65\x46\x70\x42\x72\x08\xbd\x6d\x2a\x46\xec\xa2\xba\xa0\xef\x1e\xe7\x8c\x1a\x76\xb8\xd5\x5c\xa8\xa8\x99\x1c\x36\xf7\x75\x9c\x20\x59\x34\x84\xd6\x22\x62\x1a\x8d\x1c\x9a\x59\x73\xb9\x8d\xa9\x31\x04\xfb\x52\x5d\x9b\x65\xa9\x33\x31\x60\x63\x08\xc8\xf3\x4f\x28\x3a\xeb\xfc\x51\x24\x75\xd5\x9f\xe9\x76\xd7\x5a\x8e\x27\x83\xc3\xbf\x13\xcb\x55\x20\x64\x8c\x93\xec\x9f\x55\x20\x17\xe2\x24\x4d\x3b\x4b\x1d\xdc\xd8\x36\x4d\xfb\x18\x64\x18\xf3\x2a\xa8\xef\x85\x03\x7b\xe0\x9a\x71\xf3\x82\x2d\x68\x0f\x72\x89\x91\x41\x2b\x91\x03\x87\x75\xcb\x83\x6f\xe8\x9d\x2f\x46\x94\xcd\x66\x06\xba\x2d\xcd\x6e\x5b\x58\x74\x55\x27\xaa\xc4\x28\xd5\x94\xe4\x86\x2a\x5c\xf9\xbd\xb0\xd2\x1b\x3c\x6c\x9d\xd4\x9c\x08\x20\xde\x4b\xd7\xbe\x79\x39\xed\xb1\xd5\x70\x21\x71\x94\x70\xac\xc1\x47\x6c\x2b\x39\x94\xb2\xc8\x04\xbb\xad\x5f\xbf\xfe\x26\xb9\x13\xcb\x01\x26\xe1\xd2\x75\x36\x4f\x45\x50\x9f\xcc\x79\x97\x51\x09\x52\x25\xbd\x68\xff\xc4\x17\xba\x55\xb5\x8d\x97\xf4\x1c\xaf\x65\x18\xa8\x60\x17\x99\x6e\x2c\x78\x38\xab\x64\x3e\x62\xe7\xe0\xd3\x5e\x08\x9e\x93\xeb\xdb\xc8\x7b\x51\x63\x3d\xc2\xc2\x34\x81\x02\x60\xa1\xb0\x82\xf0\xf5\x4f\x7e\x79\x7f\xc4\x52\x54\x55\x7c\x73\x2d\x50\x75\xe5\x37\xd5\x7b\xcb\xbb\x67\x7b\x27\x96\x36\xf9\x45\xd8\x42\x57\xe0\xf1\x1f\xf8\xcd\xb2\x3c\xe8\xdc\x48\x86\xfa\xef\xb6\x1a\xc5\x62\x22\x73\xfc\x18\x76\x6d\x97\x17\x7a\xb7\x8b\x84\x1e\x23\xfc\x4c\xff\x0a\x90\xf8\xe1\x4e\xde\x4f\x63\x8b\xe0\x43\xee\xc4\xf2\x50\x53\x52\xbf\xca\xa1\x9e\x9d\xad\x3c\x86\xf5\xc3\xac\xb7\x12\x5f\xb6\xfe\x4a\x33\x2b\x0c\x5f\xfc\xad\xe6\x59\xec\xea\xa4\x47\xd4\xc8\x2c\x4e\x54\x58\xe5\x41\x66\x69\xc2\x29\x0e\x9a\x12\xd1\xb5\xb2\x79\x26\xe6\xb6\x25\x3c\xf7\x9c\xc0\xad\x3b\xf9\x5d\x0a\x5e\x56\x32\xa9\x33\x5e\x32\x73\x66\x67\xaa\x35\x1e\x64\x0d\xbd\x75\x9b\xbd\x19\xe6\xe2\xa6\xd9\xb6\x49\x7f\x0b\x51\x4a\x85\x45\xdd\x00\xeb\x21\x3e\x4c\x47\x48\x96\xed\x39\x50\x53\x7b\xa3\xdc\xf1\x1e\x04\xc8\x1f\x55\x5b\xda\xd3\xab\x80\xae\x04\xfc\xf0\x3b\x57\xdd\x6f\x40\xe5\xd0\x40\xeb\x16\x95\x0d\x0b\xb1\x47\xab\xc9\x4a\xcd\x82\x8b\x7b\x51\xb2\x23\xe2\xb6\xe2\x5e\x26\xd5\xab\x11\xfb\xff\x44\xa9\x60\x33\x73\x31\x43\x6c\x87\x86\xc2\x5e\x51\x44\x27\xd7\xec\x35\x3b\x82\xd7\x98\x5c\x2c\x44\x2a\x79\x25\xb2\xe5\xab\x46\xd2\xe6\xd3\x41\x29\xfa\xc9\xfa\xd1\xad\x46\xb6\xd1\xd8\x05\x47\x7f\x95\xbb\xb0\xee\x8a\x42\x50\x8b\x39\xa2\x11\xde\xbf\xcb\x21\xb3\x37\xda\xed\xd1\xff\x98\xad\xe4\xac\x14\x33\x38\x7c\x78\xc2\xf6\xc4\x88\x0a\x95\xa9\xd9\xf2\x9a\xbc\xe4\xef\xf9\x44\x64\xc4\x1a\x17\xa2\x43\x6e\x3c\x61\x15\xbd\xea\x3d\xec\xa5\x7f\x8f\xf2\xfe\x22\xc0\x7d\xbb\x22\x33\x79\x2f\x72\x8c\x6c\xa2\xa8\x4d\x89\x2a\x4a\x56\xcc\xb9\x0b\xc8\x75\x01\xe7\x90\x9d\x64\xe5\xee\x69\x1d\x86\xb9\x6e\x92\x29\xf1\x2c\xf5\x90\x29\xbb\xc9\x38\x84\x49\xda\x40\x2c\x4f\xbf\xdd\xec\x02\xea\xbd\x95\x46\xd9\x45\x03\x4e\x72\x06\xc1\x8e\xe0\x7c\x0c\x40\x1b\xf4\x88\x7d\xcc\xed\x91\x81\x2b\x8e\x54\xbc\x72\x63\xb4\x5a\x76\x06\xd0\x4c\x23\x76\xce\x93\x39\xd6\x2b\x01\xbb\x1e\x15\x6a\xd3\xec\xe3\x55\xab\x5d\xe0\x89\xa1\xa7\xbb\x1c\xba\x1b\x51\x2e\xb6\x3a\x68\x95\x28\x17\x4d\x9a\x48\xb5\x39\xd5\x94\x96\xe1\xb7\x5a\x94\xd2\x2c\xd7\x09\xcb\xeb\x0c\xf2\x34\x30\x36\x6e\x4d\x77\xf6\x74\xe6\xca\xe7\xc0\xdf\xcc\x45\x78\xa8\xad\x13\x7c\x01\x9c\xe8\xe4\xf2\x8c\x04\x5d\x8a\xe8\x85\x13\x0f\xf1\x92\xa6\xdd\xb4\xce\x13\xd4\x78\x65\xb5\x34\xe4\xeb\x52\xa5\x22\x9c\xf1\x53\xcf\x7e\xeb\x41\x86\x59\xc0\x25\x3e\x7f\x34\xcb\xa3\x37\xd4\x58\x39\x71\xf1\xbf\x9d\xd7\x19\x10\xc1\x61\x5d\xdb\xe4\x82\xfd\x45\xe5\x6e\x24\x47\xbb\x9c\xb6\x65\x21\xd2\x56\xd3\xed\x5a\xd1\x7b\xdd\x1b\xde\x59\xdf\x5e\xfb\x39\x13\x15\x98\xf6\x28\x7b\xbf\xa2\x22\x6a\x69\x58\x77\x95\x00\x55\x64\xae\xad\xd5\x30\x46\x85\xee\xa4\x6d\x32\x77\xb8\xc7\x68\xf4\xda\x4c\xda\x78\x21\x37\x15\x08\x3b\x19\x5f\x40\x13\xcb\xd5\x00\xcd\xc3\x85\xfc\x3a\x3c\x98\x89\x30\x54\xc8\x4f\x05\xf8\x5a\xf8\x6e\x4b\x26\xb6\xb7\xe7\x02\x06\x4d\xc3\x8a\x62\xb6\x08\xac\xf9\xf0\xc5\x11\x7b\x07\xf8\xf2\x94\x02\x6b\x24\x93\x32\x1d\x1a\xa1\x6b\x89\x31\xa4\x83\xe8\x6b\x2e\x23\x74\xcf\x45\x43\xaa\xa0\xf4\xdd\xda\xb9\xf7\x46\xb8\xe8\x57\xd0\xbb\x0a\xe0\x41\x76\xfe\x66\x9f\xcb\x80\x86\xec\xb5\x27\xff\x67\xeb\x8e\x0b\xc4\x74\x4c\xcd\x27\x2b\x3e\x38\x16\x9c\xd9\xc7\xd0\xa8\x89\x88\x90\xc0\xcd\xf6\x45\xe5\x11\xc9\x90\xd7\x75\xac\xfb\x9e\xe4\x07\x7d\x9e\x71\x5d\xc9\xe4\xbb\x4c\x25\x77\xd7\x95\x2a\x3b\x71\xf7\x7e\xb9\x5e\x69\x1e\xcd\x2c\x67\x27\xbf\x5c\xb3\x33\xa9\xef\x42\xcc\x23\xbe\x62\xff\xe2\x16\xac\xed\x50\xa3\x73\x90\x2c\x11\x36\xa0\x2f\x77\xc9\x12\xde\x6e\xf9\xe4\xa2\xb3\xfc\x41\x0b\x1c\xfd\xc4\x8c\x5e\xc3\x64\xb7\x77\x59\xb5\x2d\x42\xe4\xba\x6d\x9c\x57\xfe\xaf\xba\x14\x66\x49\xba\x16\xd6\xb6\x69\xae\xa6\x79\x8e\x45\xa7\xe1\x57\x84\x67\x0b\xea\x58\xc2\x82\x4d\x80\x0e\xd8\x6a\x92\x8d\xd3\xb1\xd5\xd4\xec\x30\x36\xce\xe7\x9d\xcc\x3a\x0f\x8a\x6d\xd3\x3a\x1f\xf8\xc1\x86\xd8\x7e\x8a\x29\x99\x0f\x76\x4d\x29\x11\xc5\x7c\xda\xc5\xd3\x4f\x45\x31\x7f\x77\x1d\x5f\x62\xf3\x8c\xbd\xbb\x6e\x99\x00\x9c\x78\x3d\xe7\x25\xc5\x88\xa6\x87\x9a\x65\x72\x2a\x8c\x66\xb9\x4b\x6c\x19\x7c\xbc\x73\xfc\x32\x4f\x3b\x43\x12\x4f\xa1\x41\x3c\x7e\x7c\xc9\x95\x24\xb7\xb7\x93\xdb\x85\x47\xa7\x06\xdd\xd3\xc6\x35\x6d\xb9\x89\xa5\xc8\x04\xd7\x42\x5b\x38\xae\x1f\xce\x4f\xce\x8e\x29\x95\x5c\x1f\x43\xf5\xb1\x21\x7e\x72\x58\xa4\xc7\x57\xe7\x27\x67\x1f\xce\x47\x8b\x74\x97\xf5\x80\x5e\x3a\xd7\x03\xa2\xf0\x3e\xf0\x2e\x0e\x7d\x6a\xdb\x34\x56\xc5\x3d\xa6\x5d\x04\x0d\xb2\xa0\xd2\x3c\xa8\xda\xe3\x92\xed\x32\x72\xdb\x79\xd7\xe0\x53\xf5\x90\x3f\xf0\x32\x3d\x19\x5f\x74\x45\x27\xf8\x56\xe1\x04\xec\xcb\x20\x02\xf0\x89\xaa\x7d\xf9\x8e\x67\x98\x4f\x30\x88\xae\x19\x81\x92\x70\x26\xbb\x0e\xe8\x39\x35\x89\x37\xa3\x12\x8b\x42\x95\xbc\x5c\x52\x89\x68\x55\x2e\x3b\x2f\xd7\x93\x59\x04\x8c\x34\x95\xe5\x0e\x6b\x61\x67\xd0\xb5\x10\xd3\xae\xaa\x58\xef\x4e\xe3\xc9\xbf\x93\x93\x52\xb0\xd3\x39\xcf\x73\x91\x3d\x03\x3b\xdd\x61\x8e\xef\x4e\x3b\x67\x97\x89\xc7\x86\x30\xd4\x32\x4b\xd7\x28\x9e\xed\x4c\xe4\xa2\x94\x49\x33\x7a\xc9\x4d\x17\x14\x42\x04\xd7\x3c\x76\x53\x47\x03\x3b\x84\xc8\x8b\x84\x1c\xb1\x88\x21\xbb\xd3\xec\xdc\xd0\xd6\xcd\x4f\x25\x77\x9d\x64\xf6\x1d\xb6\x68\xec\x23\x3d\x6c\x12\xda\x8e\x7d\x23\x3d\x36\x48\xa0\x36\x9b\x66\x3b\xa2\x2a\xe9\x2e\xfb\x8c\x84\x5a\x2c\x46\xb1\xd3\xbc\xa1\xdf\xae\xa9\xcf\x12\xe1\xc3\x93\x37\xc8\x32\xdf\x9f\x9e\xc7\x6d\xe3\xe5\xf8\xfe\xf4\xfc\x4b\x15\x10\x67\x89\xf0\x71\x74\xa9\x99\xe5\xf6\x8b\xb9\x32\xfb\xce\x65\x95\xd5\x95\x28\x54\xd7\x62\x62\x8b\xc6\x5d\x91\x80\x1e\xaa\xb4\x04\x8a\x88\x96\x76\x6f\x48\x2f\x05\xde\x94\x11\x3b\x3b\x1f\x5f\x9d\x9f\x9e\xdc\x9c\x9f\xbd\x65\xb6\x27\x3c\x57\xa5\x48\x28\x57\x5e\xf9\xab\x85\xec\x8f\xf4\x0c\xc4\xc1\x76\xdf\x1a\x90\x9c\xc3\x73\xe6\x68\x35\xc0\x88\xf3\x9c\x5d\xe4\xb2\x3a\x75\x2f\x62\xcd\xb2\x4c\x59\x50\x5c\xf3\x36\xdd\xd4\x99\xc4\xc4\xc9\xdc\x8a\x76\x73\xd1\xe8\xcd\x47\x27\xf9\x78\x81\x5d\x76\x01\x27\xdb\xb9\xf6\x98\x06\xd3\x29\xf6\x7d\x6f\xdb\x34\x8e\xb0\x7b\xbc\x9d\xec\xd7\x7a\x40\xbb\xe5\x26\x3a\x9a\xc7\x6e\xb4\x4f\x92\x9c\xdc\xc0\xbb\x16\xc6\x4c\x63\xdc\x0d\x23\xfd\x03\x35\x69\x62\xd7\x53\xec\x94\xd9\x6a\x40\x8d\x56\x65\xc0\xb8\xc3\x55\xb2\xb7\xd9\x5e\x7d\x6c\x95\x2d\x9b\xb7\x3a\x08\x1a\xb1\x96\x3d\x60\x14\x80\xc3\x02\xa8\x73\x90\xe5\x8c\xb1\xa7\x7c\x86\x06\x45\xc2\xa3\x67\x45\x29\xef\x65\x26\x10\x87\x4b\xe6\xb3\x20\x15\x3f\x28\xea\xa3\x85\x58\x19\x97\xd9\x28\x5d\x05\xb5\xf8\xd1\x77\x72\xf9\xf1\x86\xe5\x02\xbb\xeb\x5d\xdc\x63\x2d\xb5\x31\x1f\x04\xb8\xee\xed\xf7\xd1\xae\x7f\xd7\x36\x4a\x9d\x68\xd9\x85\x3d\x71\x7d\x7a\x7d\xd1\x50\xcf\xf0\xd9\x27\xa4\xce\xfd\x0e\x3f\x4c\xe5\x49\x07\x1f\x26\xd6\xb5\x5a\x1b\x8c\x4a\xf8\x2a\xc5\x4c\x86\xa1\xcf\x0e\x4b\x16\xa6\x1e\x87\x8b\xee\xca\x96\xd4\xbd\x61\xec\xe2\xe1\x98\x72\xec\x86\xa6\xbf\x21\x59\xd0\x8f\xc1\xaa\x79\xfc\x15\xfc\xaf\xb7\xc9\xac\x93\xca\x5d\x36\x34\xdb\x9c\x5d\x6e\xad\xd6\x3e\xf5\x32\x98\x11\x6e\xbf\xad\x97\xdd\x6a\x71\xd1\xc8\xa8\x3a\xcd\xb8\x5c\x74\xa1\xe3\xb7\xb5\x0f\x3f\x10\xd3\xbb\x00\x3c\xcc\x5c\x89\xd6\xb7\xdb\xcb\x14\xee\x4c\x3b\xfc\x8c\x86\x76\xe5\xfc\x23\x7c\x92\x98\xcf\xee\xb2\x98\x1b\x67\xbf\xb2\xbc\x73\x55\xa9\xbc\xb7\x5c\x38\x6e\x69\x1e\x2f\x28\xb6\x38\x45\xf1\x36\x33\x14\xdc\x67\x35\x18\x71\x6c\x3b\x23\xc5\x2e\x4b\xd0\x32\xc4\xce\x15\x50\x65\xf5\xa0\xca\xcd\x5a\xcf\x38\x6a\xd8\x60\x9b\xf4\xdb\x4e\x96\x98\x5d\x26\x19\x8d\x65\xcd\xc4\x6c\x19\x9a\x2e\x06\x52\x89\x05\x26\x93\xf3\x2c\x33\xe7\x5c\xe5\x5e\x6f\xd3\xb6\x7e\xde\x80\x2c\x2a\x0b\x5e\x50\x41\xdc\xd0\x44\xb1\xcb\xf0\xed\xd0\xba\xc6\xff\x5b\xad\x26\xcb\xaa\x6b\x47\xfe\x81\x2d\xe2\xad\xb0\x0f\x9f\xdd\xa4\x47\x1f\xea\x9a\x42\x39\xe9\x5a\xfc\xab\xef\xce\xe2\xa1\x5f\xf1\x54\x69\x06\x16\x69\x76\x26\xd6\x58\x56\x9f\x49\x38\x2d\x27\x4f\x33\xe8\x5d\x7d\x77\xd6\xb5\x12\x3a\xe1\x99\xb8\xf8\xd8\x95\xff\x82\x2d\xe2\x15\xb1\x0f\x57\x53\xa3\xd6\xdd\xb0\x30\xcf\x41\xa5\x62\x9b\x48\x4a\x1f\xd1\x8f\x5f\xed\x9c\x0f\x96\x75\xdc\x94\xce\x13\xcf\xc6\xa6\xf2\x6c\x30\xe2\x3d\x59\x2a\x6d\xd6\x9c\xdc\x02\x8e\xc3\xbc\xd8\x39\x6f\xfc\x94\xea\x2c\xc6\xe9\xd2\x2d\xca\xf6\x44\xb7\x4f\xb1\x85\xad\x09\x79\x8d\xc9\xdc\xeb\x62\x2e\xac\xe3\xa7\x4b\x72\x0c\xdb\xc5\x93\xba\xbf\x86\x9f\x3e\x15\xdd\xb7\x23\x41\x28\x8d\x75\xac\xad\xbf\xc7\x13\xa9\xcc\x5a\xbf\xe7\x7d\xd0\x28\xcc\x9b\x60\x0b\x5e\x40\xf6\x10\xc4\xff\x95\xfc\x81\x81\x37\x8e\xa5\x82\xa0\x95\x29\xd5\x6a\x45\xff\xdf\x98\xda\x82\x3d\x8c\xfb\x55\x19\x0b\x1a\xaf\xdf\x3c\xdf\x28\x2a\x9a\x44\x81\x06\x14\xff\x9e\xc4\x96\x0f\x4c\x5a\xf2\x30\xd1\x13\x01\x33\x06\x5d\xa8\x7f\x15\x87\x6e\x75\x24\x77\x89\x11\x3e\x52\x29\xf7\x19\x39\x5d\x82\x68\x6b\x99\xe7\x5d\x9d\xde\x1f\x3a\x6b\xe7\x07\x6d\xe2\x03\x60\x9e\xb8\x13\xf0\x73\x94\xcb\xb6\xcb\xbe\x43\x7f\x3d\xb7\xdd\xb7\xdd\x50\x24\x2b\xd0\xe1\xfc\x06\x47\xf1\xf9\x74\x6d\x7d\x8c\xa1\xab\xa2\x8e\xfa\x61\xae\x9c\x05\x81\x1d\xbe\x3d\xec\xbd\xf7\x38\x44\xc2\x5d\xeb\x2e\x43\xd5\x6c\xda\x84\x32\x82\xdf\x09\x13\xc7\x02\xb9\xa5\xbe\xaa\x10\xca\x04\x2a\x9c\x20\xe1\xe9\xa0\x01\xe5\x81\x2f\x19\x2f\x55\x9d\xa7\x14\x0b\xee\x42\x53\x3f\x34\x3e\x7c\x49\x88\x25\x98\x40\x18\xc3\xfe\x4f\x44\xc5\xcd\xe9\x7b\x33\x7a\xf3\x7a\x5f\x17\xc0\x57\x74\xf1\x17\xc0\xa7\xa4\xe1\x91\xda\x67\x2e\xf0\x07\x22\xc7\xa6\xe9\x10\x32\x30\xe4\x94\x70\x01\xe1\x11\xe4\x04\x07\xd1\xa5\x47\x98\x30\xac\xca\x30\x39\xf9\x55\x1c\x58\x8d\xd8\x7d\xfd\xf3\x80\xeb\xc9\x96\xe7\x96\x0e\x28\x6c\xb7\x3f\xb6\x6e\xb3\x0f\x75\xc7\x11\x0e\x07\x7a\x7b\x70\x7b\xc0\x8e\xee\xad\x09\xa4\x54\xaa\x7a\xb5\x97\x48\x59\x4a\x01\x55\xa9\x58\x81\x71\x5b\x93\x1c\x1b\x34\x75\x59\x91\x88\x2e\x85\x31\xe5\x40\x81\x33\xb9\x90\xe6\xa2\xf2\x8a\x10\xd9\x03\xf9\xc8\x02\xe6\xbb\xf8\x1a\xb3\x3a\xdd\xf1\x7f\x01\xf9\xd9\x94\xf8\x12\xe4\xec\xce\x8d\x86\x03\x59\x60\x2b\xe3\xb3\x11\x5b\x0b\xb1\x13\xb4\x4f\x18\xf4\xb8\xfd\x6a\xf7\x28\x57\x1a\xd4\x26\x0d\x43\x92\x7c\x69\x52\x9e\x29\x80\x36\xaf\xe6\x44\x28\x7c\xc2\x3f\xad\x72\x08\xf7\xb4\x06\xcf\xa7\x87\x8b\x3e\x0c\x05\xf4\xbe\x6c\xef\xa1\x4f\x79\xc5\x83\xca\x84\x4f\x71\xc8\x07\xcb\xd2\xb8\x77\xfd\xdc\xf1\xed\x43\x0d\xde\xdd\xc3\x60\x03\x6f\xfb\xfa\xe1\x6e\x54\x2e\xda\x47\x4a\xea\xc5\xd3\x07\x89\x6a\x40\xd7\xf8\x56\x6a\xe1\xee\x30\xd8\x95\x3e\xf6\x32\xf2\xae\xda\xbe\xdb\x5c\xb4\x6e\x41\xbb\x17\xb2\x47\x43\x37\x58\x01\xf3\x68\x91\x89\xb0\x69\x4f\x39\xe8\xcf\x8a\xfb\x41\x3a\x28\xe2\xb2\x5f\x9c\x6d\xd6\x44\x19\x41\xb8\x7f\x07\xc1\x05\x1f\xa0\x1c\x07\x64\x63\x1c\x5d\x8f\xbf\xfb\xf0\xca\x9c\x37\x70\x75\x5d\x9c\xb5\xc3\xf7\x86\xdf\xdb\xaa\x24\x83\x6e\xbe\xb9\xbf\xb1\xe6\xdb\x8c\x23\x38\x56\x1b\x44\x0f\xf4\x14\xd9\xfa\xc5\xba\x79\x86\xef\x17\xe9\xdd\x3e\xa4\x86\x5f\x04\x40\x4a\xa4\x63\x95\x5a\x59\xa0\x33\xdb\xe1\x66\x2e\xd8\x03\xbc\x83\x39\x67\x59\x66\x35\x37\xcc\x4f\x48\xd9\x9a\x1e\x51\x84\x45\xf1\x19\x52\x70\x8d\x66\x35\xc4\xcc\x6e\xc5\xa6\x92\x64\xe5\x85\x39\xe4\x05\x38\x03\x4a\x2a\x2f\x70\xa4\x5f\x75\x5c\x54\x1c\xcc\x81\x37\x22\xc7\xf3\xd8\x7c\x79\x9b\x6f\xf4\xc9\xc8\x3d\x81\x18\x30\x0b\x71\x07\xf9\x19\x83\xd6\x13\x1b\xa7\xea\xe2\x58\x77\x11\x53\x9a\xdb\xd3\x38\x56\xb4\x08\xeb\x87\x8e\x0d\x56\x86\x18\xe0\x34\x37\xc7\xda\x58\x96\x41\x03\x58\x60\xf8\xe6\x75\x9b\xfe\xd1\xb7\xf2\x42\xd7\xd1\x14\x8f\x95\xc8\x21\x2f\x64\x74\xff\xc6\xe8\x3b\x6f\x46\x27\xe8\x61\x7e\xb7\x1a\x13\xb5\x12\x2b\xdb\x6c\xd9\x30\xfc\xc9\x7c\x96\x09\x66\x7e\xb6\xc2\x95\xf5\xc8\x7a\x27\xb6\xc3\x6e\x39\x73\xa1\x1d\x6f\x01\xf3\x67\xb5\x73\x50\x07\x0a\x24\x14\x46\x2e\xa1\xe0\xff\x5c\x57\x82\x77\x86\x94\xa7\xa5\xbc\x17\x65\x1f\xd3\x0a\x36\xec\x30\xab\x40\x83\x66\x90\x3e\x86\x38\xb9\x59\x62\xa3\x27\xe9\x19\xeb\xb7\xe5\x87\x66\x8c\xc3\x9a\x4d\x71\x81\x0e\x61\x95\x67\xe0\x6a\x56\x9d\x30\x67\x0f\xee\x40\xa3\xba\x22\xa0\x45\x63\xf8\xbe\x5d\x6d\x40\x41\x07\x8c\x04\xc0\x63\x82\x3c\x27\x57\xc1\xc7\x19\x97\x0c\x25\x91\x8f\xb4\xa9\x54\x0d\x74\xed\xbe\xba\xf1\xf5\xdb\xd5\x76\x6a\xc2\xab\xf9\x18\x3e\xda\x85\x94\xef\x1a\x45\x96\x30\x3b\x58\x6b\xf8\x0a\x97\xc6\xab\xe7\x30\xd3\x95\xd2\x10\xbf\xfe\xc7\xaf\x23\x76\x53\x72\x99\x81\x6c\x90\x71\x3d\xa7\xa4\xf2\xaa\x84\x74\x54\x04\xe1\x87\x2a\x49\xdc\xd5\x53\x0e\x3f\x4b\x21\x4a\xf0\x51\xf3\x7c\x74\x9b\xdf\xe6\xe7\xe4\x9d\x78\xcb\x7e\x3d\x9e\x2a\xf5\x2b\x7b\x00\xe5\x16\x2e\x0b\x3d\x1a\xe0\xff\x8f\x7f\x05\x7b\x07\xfe\x7b\xc2\xcb\x5f\xe3\x37\xcc\x58\x83\xb7\xd2\x5f\x8d\x3a\xff\xeb\xb1\xa8\x12\x68\xb5\x47\xeb\xc2\x6a\xb1\x01\x2a\x1a\x66\x3e\x1e\x2c\xa9\x8e\xa9\x5f\xb0\x27\xd6\x24\x01\x89\xe7\xb4\xfc\xde\xf6\x63\x87\xb0\xd9\xd8\xb0\xe5\x6d\x3a\xe3\x62\xa1\xf2\x6b\xb1\xde\x06\xe8\x23\xd0\xd8\x10\xed\x42\x98\x09\x45\xd5\x8a\xcd\xbd\x77\x9d\xc4\xa1\x69\x70\x75\x8a\x42\x1f\xe3\xc7\xbe\x3e\x76\xed\x46\xec\x9a\x62\x76\xc8\x3d\xc5\xb0\xec\x94\xb9\x5f\x0b\xeb\xfd\x20\xad\x61\x14\x74\xdf\x85\x48\x8b\x86\xa3\x14\xda\x9a\xad\xe8\xbe\x32\x2f\x35\xe2\x9f\xb1\x46\xfc\x4b\xe1\xf5\xcf\x5f\x78\x1d\x57\xea\x50\x3f\x5b\xf1\x75\x37\x98\xde\x82\x65\x07\x56\x0d\xa6\x94\x86\xb5\xd7\x9d\x12\x15\x16\x4c\x6d\x57\x0d\xb0\x38\x5d\x6a\x01\xe6\x4a\x77\x1f\x03\x62\xb0\xe7\xc9\x9b\x51\x61\x89\x06\x44\xe6\xee\x2f\x5c\x77\xd1\x60\x28\x0e\xbb\xa2\x44\x46\x30\xe9\xed\x2b\xd0\x86\x4a\xde\x98\x3f\x86\xa3\xf3\x8a\x5b\x63\xa0\xaa\x21\xc3\xd9\x9c\x74\x43\xa8\xb5\x02\x17\x4e\x9e\xaa\x07\x0b\xa1\x31\x62\x63\xf2\x4f\xaf\x54\x01\xbf\xb2\x56\xf4\xdf\xc9\xc2\xb6\xe0\xa7\x13\x77\x78\x42\x59\x7f\xff\x45\x3f\x4c\x5b\xe0\xdf\xf3\x55\xf7\x53\x54\xde\x1f\x06\xd8\xa7\xc6\x7f\xd7\xb4\x4e\xad\xe8\xba\x9e\x79\xaf\x34\x6d\x14\x16\x36\xcb\x4c\x3e\x17\xcf\x66\x21\x1c\x3d\x11\x25\x38\xbe\x80\x78\x76\x69\x15\x40\xb3\x1a\xc7\x75\xb3\x8a\x91\x71\x5d\xdd\x94\x3c\xd7\x30\x2a\xc0\xaa\x5a\x7f\xc6\xdf\x73\x5d\x79\x54\x17\x27\xb1\xb3\xca\x75\x60\x9d\x62\x2a\x17\xf6\x16\xf8\x0a\x8c\xcf\x87\xa7\xb5\x10\x5a\xf3\x59\x67\x1e\x25\xa2\x98\x32\x87\x62\x4a\xaf\x58\x90\x27\xc3\xec\x52\x51\x71\x99\xe9\xc0\x3e\xea\x27\xb6\x8d\x0f\x4c\x77\x4a\x33\x88\xdb\x60\x1a\xb9\x2c\x76\xb7\x92\x87\x9a\x65\xb0\xc6\xdb\x7f\x77\x23\x81\xba\x8e\x4a\x25\xb8\x4f\x0e\x60\xaf\xd4\x94\xdd\x80\xbc\xfc\x8e\x67\x5a\x0c\xd8\x4f\xf9\x5d\xae\x1e\xfa\x7f\x7d\x43\x75\x98\x1b\x4a\x59\xf7\x67\xdb\x7d\x7f\xdf\x7a\xa9\xfb\xc4\x7b\xa9\x3b\xa4\xe9\xb0\x15\x0a\x41\x89\xca\x32\xe1\x2a\xab\x78\x9a\xad\xbb\x2e\x1d\xc2\x49\x6c\xbe\x66\x2f\x72\xee\x33\xca\xb9\x4d\x4c\x8f\xf5\x38\x22\x2d\xbb\xba\x57\xa8\x90\x4e\xcd\x8e\xba\x69\xd6\xdf\x7a\x91\xd2\x3f\xbf\x94\x0e\xe7\xe3\x77\x21\xa1\x1b\x7a\x15\xca\xe7\x9f\x54\x88\x02\x92\xfa\x8c\x82\xd4\x75\xa8\x64\xac\x25\xd9\xa6\x95\xb5\x9d\x91\xdf\x2a\xe9\x36\x3d\xb4\x49\x4b\x62\x51\x18\x8a\xd7\x27\xd2\x49\xe6\x50\x7b\xb2\x07\x36\xde\x5c\xb0\x85\xcc\xe5\xa2\x5e\xb0\x9c\x10\x7d\xa7\x54\x8d\x3a\x2c\x6f\xcf\x59\x2e\x1e\xb2\xa5\xab\x08\xec\xd9\x62\xa1\xd2\x20\x88\xc4\x08\x2b\x4b\x57\x16\x12\xc0\x67\xa6\x50\xf2\xd0\xc7\x19\x25\x25\x87\x52\x51\x03\x2a\x25\x49\xe6\xce\x44\x41\x64\x9d\x51\xc7\xf8\x3d\x97\x99\x11\x79\xe2\x58\x94\xd7\xec\xc8\x7c\xcc\x61\x71\xb7\xbc\xc0\xb8\x66\x5a\x29\xa8\xd5\x8e\x88\x7a\x30\xa0\xb6\x90\x95\x6d\xab\x2e\xdb\xcc\xca\x1f\xa4\xae\x54\xb9\x7c\x2f\x17\xb2\xcb\x85\x01\x40\xc0\x6e\x41\x55\x96\xb2\x39\xbe\x08\x95\xd0\x05\x08\xc8\x46\xce\x04\x3b\x5f\xa9\xb2\x6c\xc2\x93\xbb\x00\xc3\x0a\xa5\x67\x44\xf9\x4e\x31\xaf\xae\x96\x7a\xce\x26\xa2\x7a\x10\x98\x64\x05\x6e\x52\xf6\x2f\x07\xf9\x17\xc2\x05\xc5\x2b\xd7\x1a\x7c\xb5\xed\x02\xf4\xa8\xc0\x79\x12\x80\x85\x2d\x01\xcb\x3d\x00\x06\xe6\xa5\xc0\x2a\x98\x5e\x29\x8c\xd4\x6c\x1f\xd1\x25\x73\xa6\xca\xd4\x21\x9c\x27\x36\x29\x24\xf5\x25\x39\x1d\xba\x35\xfa\x40\x10\x4b\x8b\xa9\x9c\x8d\x55\xca\xec\x4d\xd9\x73\xf6\x15\x7e\xe4\xf8\x2b\xf8\xff\xd0\x2e\xc7\x16\x9a\x66\x17\x91\x34\x7d\x36\x23\x7b\x06\xcd\x9b\xdf\x89\x6f\x47\xbc\x13\x41\x98\x23\x55\xcd\x21\x40\x34\x61\xec\x01\x91\xcd\x5f\x65\xf8\x19\x7f\x63\xe2\x91\x43\x52\xa6\x11\xb5\x13\x55\x2c\x9d\x08\x67\x3a\x8b\xab\xde\xad\xe2\xe3\xd2\x78\x0f\x31\x10\xdb\x43\xa0\x1d\xa9\xb2\xf1\xae\xc4\x9a\x05\x51\xab\xb0\x6e\xc1\xab\xad\xf7\xd0\x6c\x5d\xa6\x78\xaa\x8f\xdd\xb9\x29\xf5\x71\x29\x5c\x25\x69\xff\xf8\xab\x42\xa5\x43\xb7\xb8\x3b\xb9\x39\x6f\xe8\xed\x36\x03\x8c\xed\xf9\x7b\xc8\x5a\xdd\x10\xce\xe9\x8d\xe5\x23\x76\xc2\xb4\x11\x5c\xf2\xc4\x91\x90\x48\x76\xe2\x8e\x87\x50\x42\xac\xe5\x24\xe1\xda\x77\x98\x60\x2e\x2a\x1b\x09\x07\xd8\x7a\x79\xb6\x64\x69\x5d\x3a\xbf\xaa\xd9\xff\x76\x2d\x67\x5b\xec\x4f\x94\xb3\xae\x7d\xf1\xe6\x8e\xd3\x8b\x6d\x99\xad\xf4\x8c\x54\xb2\xc8\x78\x62\x8e\x22\xe5\x15\x47\x4c\x87\x2a\xfa\xe6\xe2\x01\xfe\xda\xc6\x4d\xdd\xc5\xd0\x7f\x8a\xc7\xfc\x44\x8d\x6e\x43\xa9\xc2\x46\xbb\x3e\xc5\x0a\xfb\xc9\x0a\xf4\x26\x82\xed\x5b\x4c\xe6\x00\xeb\x0e\x9e\x7f\x90\x5a\xaf\xfc\x44\x26\xd1\xee\x37\x41\xb8\xe8\x21\x87\x18\x05\x15\x98\xe6\x69\x14\x2c\xde\x06\xc8\x03\xe9\x4a\x53\x36\xe7\x7a\xce\xdc\x6b\xbe\x50\x76\xe0\x00\x8a\x69\x96\xbf\xcd\xac\xd6\x36\xde\x13\xe3\x8f\xb9\xd5\x91\x09\xe0\xe0\x5e\xc9\x94\x9b\x4b\xb5\x10\xc9\x9c\xe7\x52\x2f\xd0\xcb\x28\x2b\xc8\xec\x06\x4e\x49\xd4\xcf\xf9\xa6\xed\xf7\x73\xf1\x60\x54\x4d\x9f\x9f\x78\x65\x81\x16\x9e\xce\x58\xbd\x1f\xb9\x33\x9a\x23\x3a\x1a\xa4\xfa\x7a\xc1\x47\x4d\xb4\x28\xef\x7d\xa1\xc3\xc0\x2a\x77\xa8\xa3\x93\xd4\x16\xfe\xf3\xbc\x7a\xa4\xb7\x36\x5a\x85\xd2\x7d\x69\x53\x69\xf8\xd0\x44\xb8\x5b\x69\xf8\x35\x57\xa1\xaf\xe4\x66\xa3\x88\x49\x80\x21\xa4\x15\xc6\x2b\x96\x09\xae\x2b\xf6\xc6\xde\x48\x08\xb1\xc9\x53\x68\x05\x6e\x6e\x4a\x81\x2f\xeb\x3c\x94\x75\x76\x49\x0a\x6f\x67\x69\xd8\xa1\x16\x55\x4b\xe1\xed\x6d\x8f\xe0\x9a\x5b\xdf\xbd\x48\x95\xaa\x78\xd6\xbe\x54\x81\x42\x40\x0b\x16\x2f\x01\x3b\x92\x79\x92\xd5\x10\xba\x83\xaf\x41\x38\x0f\x48\x1c\xed\x6f\xec\x4b\x10\xd8\xe7\xaa\xe1\xd4\x4f\xec\x1d\xdc\xe5\x4c\x6d\x5c\x28\x73\xa4\xa0\xa8\x3c\xd8\x3c\xc9\xc9\x4d\xbc\x3e\x68\xe6\xce\x65\x1e\x6a\x43\x47\xa8\x8e\x41\x9e\xae\x3d\xb0\x46\x76\x18\x35\x14\xc4\x57\xfb\x5a\x8b\x88\xa5\x3c\xf1\x8a\xc5\x33\x1c\xb0\x49\x5d\xb9\x22\x4f\xbf\xbb\x0b\x16\xf2\xcd\x2f\xe4\x98\xc0\xd9\xd8\x03\xfb\xc2\x01\xff\x94\xf3\x4f\x73\x0f\x72\x32\xfe\x7f\x69\x17\x00\x19\xb0\x48\x7b\x49\xfb\x37\x36\x76\xb4\x14\x89\xe1\xcb\xa1\x1c\x4f\xfd\xac\xea\xc8\x81\xac\xb3\x37\xe1\x7c\x7f\x24\x3f\xbc\xba\xd4\x77\xb0\x3f\x9f\x2c\xf6\x72\x9d\x20\xef\x44\xf0\xf6\x3c\x1f\x23\x25\xe6\x33\x7c\xa7\x4b\x0a\xc3\x76\x56\x5b\xc1\x30\x22\x2c\xc9\xa6\x47\x6c\x8c\x12\x9a\x8b\xc8\x82\xc0\xf8\xff\x66\xb7\xf6\x35\xec\xfe\xf6\xe0\x89\xba\x4a\xd4\x5b\xd3\x58\xbf\xad\x7f\x2b\x38\x5e\x38\x29\x30\x94\x63\xb8\x7d\x63\xd8\x86\xae\xdc\x1e\x7c\xcc\xcf\x44\x26\x60\x1a\xd6\xc6\x04\xf0\xf7\xf4\x78\xef\xce\x31\x51\x64\x6a\xd9\x59\x3b\xa1\x4f\x9c\x99\xeb\x65\x53\xa0\x99\x6b\xb8\x65\xa4\x99\xff\x00\x86\x7f\x9a\xaf\x24\x19\x2f\xb1\x0a\x07\x2e\x2d\xbe\x3c\x36\xba\xab\x21\x53\x57\x68\x93\xb8\x0e\x1d\x76\x2f\xae\xb8\x97\x90\xb3\x3f\x9f\x33\x8b\x56\xca\xb9\xb3\x3e\x6f\x64\xd8\x75\xd3\x43\x53\xad\x0d\x15\x13\xc1\xc5\x7f\xaa\x05\xca\x75\xb4\x53\x30\xd7\x07\x2f\x4d\x64\x4b\x2f\x44\xe8\x28\x84\xe2\x39\x06\xfb\xe9\x03\xa4\x3c\x47\x78\x06\xc7\x9e\xeb\xbc\x47\x88\xd4\x6a\xdb\xf5\x31\x52\xa9\x67\x10\x2f\x41\x52\x7d\x83\xa4\xcc\x2c\x50\xfa\xd8\x30\x03\x2c\x29\xe4\x67\x01\x25\xda\xec\x34\x1e\xb8\x76\x54\xf2\x25\x9e\xeb\x4f\x1e\xcf\x15\xdc\xc3\xe7\x0b\xe8\x72\xdf\xe8\x8e\xe8\x8a\x9a\xa1\x90\x61\xc3\x7e\xfc\x6f\x2f\xc1\x5c\x5f\xba\x04\xb9\x29\x98\x0b\xc1\xf2\x28\xfc\xa3\x63\x83\x9f\xdd\x1e\xef\x19\x27\xf5\xf3\x12\xd8\xf5\xe5\xc9\xc2\x71\x60\xd7\xef\x37\x02\x2b\xa6\x81\xcf\x29\xa9\x5d\x51\xf4\x4c\x0f\x03\x41\xa8\xa8\xdb\xd7\x18\x14\x03\xc2\xdb\x19\x62\x4e\x58\x72\x0b\x36\x66\xdb\x36\x14\xe4\x7a\x83\x54\xd9\xb7\x6f\xd4\x0b\xa9\x7e\x51\xf6\xff\x88\x04\x6e\x03\x64\x97\x85\x22\x78\xcb\xba\xc1\xbb\x56\xef\xd6\x66\x61\xd7\xdf\xad\x0d\x99\x4e\x68\xab\x75\x19\x4e\x5e\x0e\x74\xd1\x77\x4f\x37\xcb\x9a\x6e\x10\x57\x68\x8d\xb9\xfd\xc4\xec\x24\xdf\xe4\xec\x37\xe3\xe5\xbe\xa5\xcd\xf2\x27\xab\x3a\x20\x4e\xa7\x2d\x5a\xb0\x5d\x29\x3c\x8b\xfe\x39\x4f\x51\xce\xe5\xd9\xb8\x85\xe2\xf4\xac\x41\xfa\xa9\xd8\x85\xa3\xe6\xcf\xc9\x32\xba\xc3\x76\xa3\x66\x6b\xe3\x76\xb7\xb3\x0a\x7d\xb2\x88\xde\x0f\x3b\x44\xf3\xfe\x2e\x62\x78\x9f\xee\xa2\x2b\x78\xad\xbb\x61\xad\x83\xf2\xf9\x0e\xce\x33\xf4\x1c\x60\x0f\xc0\xe9\x60\x0a\x44\x96\x8b\x52\xf9\x92\x8d\x8d\xb7\x3a\x9d\x76\x6b\xf0\xfe\x8a\x52\xcd\x4a\xa1\xf5\x99\xe0\x69\x26\x73\xd1\x33\x8e\x9b\x3f\xc2\xce\x83\x0d\x44\xe6\xd1\xbe\x47\x06\x28\xa8\x55\x7f\x07\xc3\x86\xcf\xb0\x89\x98\x02\x07\x81\x39\x06\x7b\x82\xbb\x3a\xe5\x32\xb3\xc1\xa2\xad\x13\xa3\xc0\x51\x65\x18\x64\x2d\x08\x89\xcb\x2c\x08\xbd\x1a\xbc\x45\x45\xf1\x43\xeb\x0c\x02\x39\x8c\x1b\x53\x3e\x7f\x4c\x84\x48\x11\x76\x51\x43\x33\x3c\x31\xba\x2e\xa7\x3c\x11\xa9\x05\x78\x09\x06\x84\xf6\x87\x11\xbb\x54\x15\x05\xa5\xba\x09\x86\x9b\x25\x74\x25\x17\xe8\x9e\xf4\x51\x8f\xb0\x66\xbc\x75\xb7\x7d\x50\xb6\x85\x69\xc0\xb5\x26\xe1\xc0\xdc\x0d\x73\xd8\xd8\x91\x1c\x89\x11\xfb\xfa\xcd\xb7\x7f\xfd\xf6\x6f\xdf\xfc\xe5\xdb\xbf\x42\x2d\x75\x57\xdf\x3d\x2c\xe8\x7e\x7b\x90\x2b\x96\xd2\x44\x23\x77\xe0\xee\xc1\xe9\xe0\x4a\xea\xac\xf4\xe0\xe8\x81\x25\x5a\x10\x36\xf9\x5c\x11\xe7\x5f\x42\xc4\x7d\xe0\x60\xfb\x54\x51\xf7\xfb\x3f\x2a\x38\x6a\x08\x6d\xc8\x32\x9a\x96\x9d\xd5\x7e\xce\x4e\x1f\x09\x2a\x54\xa1\x02\x69\xaa\x29\x4a\x19\x62\x4d\x2e\x72\x50\x97\x8c\xf4\xfa\x8b\xa5\xf5\x99\xe0\x40\xe8\xa7\x66\x81\x9d\x46\x65\x3a\x50\xb9\x78\x56\xe1\xab\x47\xea\x02\x04\xe0\xfb\x18\x74\x8b\xd7\x33\x62\xe7\x36\xfa\x38\x3c\x4d\x0f\x73\xa5\x05\x46\x21\x43\xbc\x1f\x55\x87\x47\xf2\x2f\xb5\xa3\x56\x80\xa7\x6b\xb4\x33\x3e\x9d\xc6\x2d\x5a\x45\xdd\xe7\x4a\x20\xd0\x9b\x43\xb0\x6f\x9a\xb4\xd4\xc7\x61\xd7\x5a\xb4\x86\x63\xc7\x41\xd8\x66\x9a\xa3\xde\xa1\x9a\x78\xaa\x7f\x14\xcb\xa7\x26\xea\x07\x8e\xa8\x38\x64\x7b\xd0\x14\xb2\x3a\xe6\x4e\x4d\x56\xd3\x26\x74\x7b\xde\xc4\xfe\x72\x05\x76\xb6\x2c\x6f\x8a\x2c\x6f\x34\xb4\x52\xec\x62\x37\x37\xe1\x1a\x53\x85\x15\xd9\xae\x36\xb3\x9f\x9b\x46\xe4\x90\x17\xf7\x60\x99\xdb\x02\xb5\x9a\x31\x5a\xac\xe2\xe5\x4c\x6c\xbc\x44\xbb\x87\x61\xef\x2d\x58\x3d\x08\x22\xb9\x89\xfe\xfe\xc4\xe1\xea\x9e\x64\x7d\xb9\x61\xea\x7e\x0f\x3f\x5b\x9c\x7a\x8b\xcf\xd7\xaa\xc0\x9f\x30\x50\x7d\xeb\x00\xc2\xae\xa0\xc1\x9e\xfa\xc7\xb6\x41\x83\x70\x4b\x77\xb8\xed\x78\xbb\x91\xa0\x3e\xeb\x25\xee\x21\x08\x37\xc7\x96\xab\x7c\x88\xc8\xf9\x56\x17\xee\x1c\x24\x3b\xaa\xe6\x42\x96\x36\xe5\xd0\x9b\xb1\xac\xec\xb0\x8f\x64\xd3\x3a\x7f\x0a\x6d\x0d\xde\xde\xbc\xe6\x4e\x64\xad\x5a\xe2\x3b\xe3\xec\x4d\x5d\x19\x3e\xe8\xec\xe2\x96\xd8\xc4\x9a\x25\x04\xe9\xbe\x79\xfd\xfa\xdf\x83\x5b\x9f\xf0\x82\x27\xb2\x5a\x02\x39\x5c\x82\x41\x54\x48\x40\x0f\x9f\x88\xc6\x37\x6c\x08\xe9\xa4\xc6\x2a\x0a\x4b\x11\x91\x8f\x30\xa1\x14\x87\x43\x41\xc1\x46\xb5\x13\x79\x0b\x87\xde\x79\x0b\xd0\xda\xb6\xc3\xf2\x6f\x7b\xa0\x60\x32\x30\x8d\xd0\xa4\x64\xe5\x16\x8c\x57\xfe\x74\xf1\xb3\xab\x02\x55\x1f\x19\x83\xa4\x45\x2f\x40\xcd\xd5\xc3\x96\x42\xe3\xa7\x8c\xcc\x5d\x1d\xfa\x0d\xc6\xea\x46\x21\xaf\x7b\x8d\xd3\x6d\x3a\x5f\x77\x0f\x5c\x08\x23\x74\x05\x1e\x78\x1b\x9c\xdb\x0c\x34\x0e\x23\x74\xd7\x4d\x6d\x2f\x21\x0f\xef\xae\x01\x75\xd4\xae\xe6\xc7\x22\x16\x14\x56\x10\xc6\x5b\x9b\x47\xbe\x2c\xaf\x81\x98\x05\x30\xaa\xb6\xa2\x56\x35\x25\x7e\x04\xc2\x8f\x6d\xbc\x0a\x96\xba\xe6\x4b\x4f\xc0\x4c\x05\x48\xe1\x2e\x7a\x80\x0d\x10\xcd\x74\xee\xeb\xcd\xd2\x63\x35\x65\x53\x8a\x50\xd6\x23\xc6\x2e\xa6\x6c\xa9\x6a\x82\x1d\xcd\xe4\x1d\xe2\x4b\xab\x32\x11\x1e\xff\xd7\xb6\x67\x50\x5e\x55\xd7\x45\x91\x2d\xfd\xaf\x08\x71\xec\x30\x9c\xa1\xda\xa4\xae\x78\x59\xc1\xa2\x89\x3c\x1d\xb1\xab\x90\x64\x7f\xa8\x75\x75\x55\xe7\x27\x9f\x2c\xee\xe0\xe2\xec\xca\x0c\x71\x5d\xd0\x41\x59\x77\xa6\x8c\x98\x9f\x9d\x0d\xde\x9d\x09\xa7\x95\xa5\x32\x81\x20\x3b\x28\xf9\x41\x9b\x6d\xab\xd1\x58\x1b\xe1\xb5\x48\xea\x52\x56\xcb\x53\x95\x57\xe2\x71\xb3\x6f\x69\xcb\xb3\xff\xc3\xcd\xcd\xf8\x22\x07\x43\x63\x27\xae\x70\xa3\x9d\x87\xb7\x06\xc3\x13\x96\x54\x9e\x09\x07\x6d\x3b\xe1\xc9\x1d\xec\xde\x45\x9e\xa8\x05\xd0\xb6\x32\x6b\x81\x81\x85\x83\x36\x55\xe5\x03\x2f\x53\x5f\x75\xd7\xbe\xdd\xe1\x7e\xa0\x26\x3d\xbc\x0f\xb6\xe5\xfa\x5d\xfa\x0e\x5b\x44\x37\xd8\xd5\x48\x4d\x5d\xb9\x7a\xef\xf2\x54\x41\x59\x9a\xaa\xe4\xd3\xa9\x4c\x9c\x9a\x1d\x4e\xe6\x89\x34\x98\xd6\xfb\xbb\x70\xaa\xa1\x43\x60\x33\xb2\xbd\x84\xaa\xb8\xd0\xb5\x19\xd1\xf8\xe3\xf5\xc5\xff\x4b\x1b\xc5\x2d\xc5\x02\xb6\x7e\x71\x7e\x7e\xce\xae\xab\xd4\x08\x3f\xdf\x8c\xde\x0c\xc0\xca\x47\x0a\x9e\x32\x34\x00\x57\x45\xcc\x4a\x51\x1c\xd7\xb9\x7c\x64\x7a\x99\x57\xfc\x71\x00\xd2\x0b\xec\xa6\x28\x33\x7a\xf8\xca\x01\xd4\xf3\x19\x37\x64\xc9\x6f\x37\x3a\xef\xa5\x3d\x14\xe4\x29\x1e\xb1\x53\xd4\x9d\x0c\x83\xc3\x04\x7f\x5b\x80\x2a\x99\xf3\x92\x27\x95\x28\x35\x4b\xa5\xb6\xe4\xc8\xb9\xa1\xbd\xf7\x97\x67\xec\x16\xd6\xe4\xf6\x00\x6a\xca\xa3\x82\xf6\xd3\xd5\xfb\xc6\x4c\xaf\xde\x9d\xb2\x6f\xfe\xeb\x6f\x7f\x19\x31\xb3\x42\xda\x16\xb5\x99\x49\x67\xcd\x3f\x3c\x3e\x04\xac\x8e\xa0\x4c\xc3\xc0\xcf\x20\x0d\x0c\xc5\x9c\x25\x20\x41\xf3\x2c\x63\x5a\x20\x98\xbb\x3d\x0f\xed\x47\xf9\x19\xae\xed\x55\x9d\x89\x9f\x79\x56\xaf\x07\x6a\x6f\x6b\x1c\x47\xec\xcd\xab\xaa\x70\x3a\x80\x46\x43\x32\x4c\x46\xd9\x09\x68\x70\xdb\xc3\x19\x40\x9c\x6a\xf4\xd6\xbf\x3d\x3e\xbe\xad\x5f\xbf\xfe\x26\x99\x2b\x5d\xc1\xbf\x04\x3d\x80\xad\x80\x07\xff\x0b\x1f\x68\xc1\xcb\x64\x6e\xb6\x06\x1f\xb3\x21\xfd\x9f\xbe\xc0\x1e\xa0\xe8\x02\xfe\xd7\x34\x73\x26\x9d\xba\xcc\x02\xc4\x7c\x33\x28\xbb\x89\x03\x1b\x21\x42\xd1\x0c\xf6\x12\x5a\x2e\x8b\x0a\x8e\x3d\x85\x00\xdd\x01\x15\xd5\xc9\x8e\x5b\xd9\xc8\xdb\xc3\xe3\x43\x60\x38\xe4\x4b\x32\xcf\xa7\xb2\x34\x3f\xfc\xaf\x43\x23\x9c\x1c\x7e\x75\xd8\x45\x8c\xcc\x5c\xfb\x44\x32\x62\xbb\xae\x28\xdb\x18\x15\x0f\xda\x5b\x88\x92\x22\x8c\xab\xf0\xdb\xf2\x89\xf8\x60\x93\x4f\x34\xf8\xe1\xb6\xc7\x57\xe9\x6a\xac\xca\x0a\x79\xeb\xda\x73\x1b\xb6\x72\xd4\x99\x93\xd0\x60\x8e\x2d\x00\xa8\xab\xb2\xda\x05\xc4\x3e\x42\xb1\x9f\x28\x2b\x81\x84\xc2\xc7\x26\x30\xfb\x78\x80\x3b\x17\x28\x58\xc8\xdc\x85\x5b\x2d\xf8\x63\x1f\x8f\x3a\xef\xc2\xbc\x5f\x70\x07\x76\x6f\x26\x41\xb7\x08\x56\x6d\xc0\x20\x77\x5d\xcb\xfb\x36\x29\x7a\x5b\x35\xd3\x0c\xbc\x63\x18\x32\xf7\xb2\x0f\x51\xe4\x3d\x0f\x64\xcb\x63\x67\x85\xb9\x75\x07\x8e\x7e\x67\x45\xa9\xee\x65\x8a\x35\x1f\x65\x7e\x6c\xd6\x13\x19\x57\x24\x0e\x9b\x67\x17\x67\x7a\xf5\x58\xd8\x6e\xfe\xe8\x07\x62\xd5\xc4\xf6\x99\x0e\x84\x1f\xc8\xb6\x07\x62\x0c\x85\xa7\xfb\x64\x67\xbe\x19\xfd\xd7\xda\x0c\x4d\xea\x66\x35\x3d\x33\x17\x15\xa1\x71\x1d\xdf\xbf\x39\xa6\x66\x23\xd7\xde\x5b\x1c\x38\x70\x3c\x99\xd4\x19\x2f\xd9\xe9\xc5\xd9\x15\x3b\xc2\x62\x53\x6f\xfe\xeb\xeb\xd1\x9b\xbf\xfc\x6d\xf4\x66\xf4\xe6\xf8\xeb\x6f\x6f\x0f\x5e\xb5\x55\x51\x71\x0e\x1f\x2b\x77\x01\xe1\xbb\xc4\x8f\x63\x6d\xa5\xeb\x42\x24\x87\x00\x80\x65\xfd\x6c\x68\xde\x17\x8f\x89\x28\x2a\x26\xf2\xaa\x0c\x2d\x20\x66\x08\x71\x76\x3b\x05\x20\x20\xf4\x05\x15\xb5\x01\x15\xc5\xf0\xdf\x3a\xeb\xac\xf0\x95\xc8\xb4\x4f\xfd\x15\x68\xd6\xe1\xba\x30\xcb\x12\x06\x38\xae\x84\x36\x5e\x8c\xa9\x90\xf8\xcf\x3c\x93\xa9\x95\x54\x50\x9b\x5d\x5d\xca\xbe\x51\x7a\xb8\x44\x1d\x03\x3b\xc7\x35\xc4\xa1\x65\x46\x55\x50\xd3\xfe\x2b\xc8\xf3\x2d\xc7\xcd\xe8\x7b\x18\x96\xea\x98\x1e\x46\xae\x1a\xc5\x11\x6e\xd5\x12\xde\x56\x75\x05\x25\x7f\xcd\xea\xc0\xfa\xc1\x5d\xdb\x41\x66\xe8\x13\x65\xd7\xff\xda\xa1\x20\xb1\x9e\x0e\xe3\xef\x6d\x40\xc1\xe6\xa8\x59\x8b\x2b\x04\x42\xc8\x7c\xa2\xea\x1c\x22\x7f\x73\x6c\x46\xf1\x12\x9c\x14\x34\xab\xb6\x45\x5a\x40\xa0\xa1\x9e\xe4\xcc\x7e\x8f\x90\xc5\x6c\x81\x0d\xbc\x5c\x33\x79\xef\x2a\xf7\x69\xd0\xa5\xca\x9c\x67\xd9\x72\x08\x9f\x00\xcb\xae\xd1\x6d\x07\x2c\x53\x3c\x65\x13\x9e\x81\xdf\x8b\xd4\x80\x01\x73\xc6\x54\x76\x7d\xfd\x7e\xc0\xd4\x74\x2a\x4a\xf4\x77\x4d\xa0\xda\xd9\x3d\x56\xdb\x03\x59\xc6\x9c\x63\x51\x25\x2f\x09\xd5\x2f\x31\xd6\x7f\xb0\x18\xeb\x97\x1a\x1e\xad\x99\xda\x56\x1c\xb2\x7e\x13\x97\x73\x0b\xdc\x0c\xa9\xd2\x17\x5d\x6b\x82\xc6\xb8\x53\xd6\x77\x1c\xdc\x11\x79\xcf\x7f\x8f\x4b\xf0\xc9\x73\xc9\x2d\x17\xdd\x7f\xac\x79\xc3\xf0\xb8\x81\x4d\x7b\xf3\xa9\x93\x66\xb3\x2c\x60\xbb\x18\xc2\x6b\xd8\x68\xee\x6c\xa9\x86\x15\x18\xc5\xbd\x4b\x6a\xa4\xb6\x97\x61\x36\x12\x3d\x33\x4a\x77\x0f\x81\x32\xec\x61\x23\x64\x82\x58\xad\xea\xb7\x6a\x04\xee\x9f\x4f\x1c\x0c\xb4\xef\xa7\xa1\xba\x5c\x9f\x4f\x6f\x47\xae\xea\x4a\x66\x23\xb3\x13\x55\x39\xba\xc8\xab\x8f\xe5\xf5\x53\x2c\x8f\xb4\xe9\x9d\xc9\xc1\x41\x9b\x36\x19\xce\xde\xea\x97\xdc\xe0\x2f\x5b\x18\xda\x29\x37\xb8\xb1\xb9\xcf\xee\x9f\x23\x22\xd8\x50\x48\x5e\xe4\xb9\x17\x79\xee\xf7\x93\x6f\x1c\xd2\xd4\x67\xe3\xe6\x57\xa1\xab\x7a\x0d\xc5\x36\x6d\x9a\x40\xce\xa8\x71\x2f\x78\x51\x84\x8e\x5b\xcd\xea\x3c\x15\xa5\xc7\xf3\x16\x29\x9a\xe3\x89\xea\x95\x82\xe0\xbb\x49\x38\xb0\x0a\x74\xe0\x11\x76\x47\x1e\x7c\xc0\xe0\x6e\x11\xe6\xfe\xc1\x7b\x28\x34\x40\x8f\x60\xd4\x1a\x60\xfc\x40\xa9\xea\x6a\xc5\x4f\xdc\x5a\x0e\xda\xb9\x9a\x9b\x9e\xaf\x6e\xed\xda\x7c\xb1\xe3\x50\xff\xa0\x90\xa5\x81\x87\xa8\xce\xb2\x25\xfb\xad\xe6\x19\x4e\x3f\x55\x0b\x2e\x73\x27\x40\x70\x6b\xfd\x83\x59\x0c\xd6\xba\x21\x29\xe3\x47\x90\xa3\x15\x91\x54\xee\x25\x0f\x62\x3d\xcc\xaf\xb7\x30\xb4\xc0\xb9\x69\x1e\xfe\x74\x75\x11\xf6\x4b\x21\x03\x57\xef\x4e\xdf\xb2\x37\x23\x76\x31\xd6\x0e\x74\x94\xac\x85\xa1\xa7\x95\xe7\x2b\x6b\x03\x16\x10\x88\x33\xe2\x10\xa7\x81\xeb\x7c\x9b\xdf\x56\x8c\x5d\x8c\x5d\x48\x82\xd1\x5c\x68\x04\x05\x07\xa9\xdd\x52\xfd\xdb\xfc\x6b\xb4\x2b\xfe\xfa\xf6\x57\x96\x8a\x4c\x2e\x64\x85\x15\x93\xcd\x20\x4a\x61\x0e\x0b\x1c\x0b\x91\xf0\x5a\x0b\x72\xde\x34\x07\x89\x1f\xf4\x23\x0d\x85\x23\x3f\x6a\xd3\xab\xf4\x05\xf7\xdf\xfe\xed\x35\x9c\x1a\xf0\x65\xf2\x3c\xc5\x4e\xde\x7e\xfb\xed\x37\xee\xb1\x19\xdf\x77\xe4\xe9\xd1\x02\xe8\x74\x32\x07\x53\x3d\xcd\x6c\x5a\x57\x75\x29\xd6\x9d\xd1\x36\xaf\x36\x9c\xd0\xc0\x6d\xb8\x72\xda\xd8\xc5\xd4\x37\x94\x7a\xd5\xab\x6c\x67\x03\x47\x1b\x65\x67\xeb\x43\x46\x0b\x91\xca\xc3\x1c\x4e\x91\xae\x3d\xd1\x1b\xa9\xb6\x59\x83\xf0\x70\x3f\xd1\x11\xe8\x3d\xcf\x4f\x12\x25\x3b\xf3\x59\x83\x36\x8d\x0c\x07\xbb\x6e\xe0\x21\xd6\x90\xc8\x07\x85\x98\x2b\x85\x01\x7b\xdd\xf7\x7c\x73\x54\xc8\x89\x75\xf5\x3b\x32\x93\xf0\x02\x03\x39\xa7\x44\xce\xa2\x13\x82\xb5\x2b\x54\x7e\x68\xd3\xc3\x79\xbe\x44\xcb\x38\x3b\xb1\x59\x01\x84\x15\x74\x48\x3d\xa2\x6f\x19\x08\xec\xa1\x0d\x44\x58\x49\xc8\xc2\x00\x7b\x23\x71\x14\x14\xe7\xe0\x92\xc0\x40\xee\x52\x3c\x25\xa3\x63\x19\x46\xe8\xab\xd2\x8e\xdf\x8c\x32\x53\x33\x8c\x49\xc0\xde\x97\x46\x21\xcb\xd4\x84\x67\xb6\xd1\xb3\x86\xaa\xc0\x0c\xbb\x4b\xaf\xd8\x40\x04\x48\xf1\x00\x8e\xe3\x22\xe5\xac\x35\x36\xb6\x08\x34\x03\x34\x54\xc9\x72\x05\xaf\xda\x72\x1e\x83\xe8\x2e\x41\x5e\x5b\xee\xf8\x53\x63\x6f\x3f\xb1\xb8\x0a\xbc\x78\x8d\xc8\x5a\x65\x9d\xf1\xba\xef\xaf\xe3\x02\xd0\xa3\x06\x9d\xb4\xd7\x02\xa8\x38\x95\x2c\x0f\xca\xf1\x9b\xf7\xcd\xa3\x01\xfb\xf6\xdb\x6f\x60\x15\x17\xe6\x88\x14\x00\xe9\xb5\x98\x18\xf1\xd5\xaa\x41\xb0\x27\xf6\xbc\xa4\x72\x0a\x0a\x69\x05\x5b\xa4\x07\xe8\x62\xb0\xbe\x07\xdb\xc7\x63\x40\xae\x0c\x1b\x04\xa2\xcd\x93\x44\x95\x29\x85\x93\x58\x52\x08\x5c\xd2\x93\xb4\x6a\x5e\xaa\x7a\x86\x9c\xfb\xfa\xf2\x02\x86\xe9\x96\x6f\x40\x2e\x0d\x26\xad\x9d\xde\x1f\xf3\x69\x9d\x4d\x25\x46\xcf\x86\x2d\xdc\xc4\xaf\x2f\x2f\x3e\xf1\xde\xde\xbc\xbf\xde\x8f\x7b\x64\x43\x96\x54\xd4\xca\xd1\xc6\xcd\xb6\xb4\x4e\xb2\x68\xa8\xc9\x77\x44\x4d\xba\x12\x0e\x83\x66\x36\x54\x6b\x5d\xd9\x0f\x4b\xa4\x86\x96\x4a\xed\x92\x81\x16\x7e\xb0\xcd\xd2\xb6\xed\xda\x9a\x4d\xda\xb0\xb0\xe6\x08\xc6\x1c\x07\x60\xe5\xe0\x48\x67\x7c\x29\x4a\xa6\x29\x34\x73\x45\xfe\xf4\x32\xca\x66\x61\xb3\xeb\xb2\x1b\x69\x13\x45\x0f\x1e\x51\x48\xed\x9d\x88\x24\xb8\x00\x59\x30\xfd\x03\xc8\x83\x40\x19\x8c\x1c\x84\xd6\x4b\x8b\xe0\x4c\x31\x7c\x89\xb9\x86\xc7\x71\xc0\x69\x95\xe9\x6b\x91\x94\xa2\x8a\x93\xa2\xcd\x4f\x0f\x32\x4b\x13\xa3\xd2\x01\x99\xd6\xa2\x02\xde\x62\x53\x29\xd6\x71\xa2\xe8\x8a\x4a\x6d\x97\x06\x6e\x75\x26\xa6\x55\x48\xc7\x77\xb9\xab\xdd\xae\x49\x6f\x90\x33\x73\xda\x64\x0a\x74\x8d\xac\x90\x1f\x9a\x03\xb1\x0b\xc7\x98\x22\xcf\x9e\xe3\x33\x2a\x47\xca\xfa\xce\xb2\x6d\x98\xe2\x2a\xef\x36\xef\x18\x91\x0f\xd3\x8d\x49\xce\x33\xa4\xcf\x51\x47\x9e\xa9\xdc\xcb\x8f\xf6\x27\xb3\x4d\x78\x1a\x44\x8e\xeb\x3c\xcd\x64\x52\x69\xaf\xf9\xdc\xc2\xb9\xb9\x3d\x60\x73\xc1\x8d\x8a\x86\x02\x44\x4d\x08\x0f\xb1\xd4\x3f\x68\xf4\x4d\x47\x01\xb6\x94\xa6\x07\xf9\x7c\x79\xea\xd3\xc0\xcd\x1b\xa0\x07\x51\xff\xe1\x4b\x34\xa3\x7d\x87\x3b\x46\xa1\x0c\x4f\x8d\xd6\x88\x3a\xdb\x14\xb3\x11\x35\x1e\x35\xde\xf5\xe4\x01\x22\xb8\xad\xbe\x17\x88\x1c\x2e\x60\x15\xd4\x59\x28\x59\x35\x05\x10\xed\x17\x17\xef\x8b\x8b\xf7\xc5\x24\xf8\xfb\x30\x09\x3e\x33\x18\x37\xf2\x4f\xa9\x63\xe2\xf2\x44\x85\x6c\x25\xf8\xeb\x53\xda\x33\x63\x72\xbd\x7f\x8b\x66\xd4\xff\xf9\x66\xeb\xe6\x2e\x8c\xc1\x77\xbb\x15\x8b\xf0\xaf\x8d\xd6\xf6\xb7\x26\xec\x8f\xb8\x83\x4b\x20\x68\xc4\xf9\xa9\xba\x72\x59\xad\xdb\xc7\xf9\xd9\x5e\x03\xf9\x0f\x62\x9e\x49\x3d\x84\x58\x67\x32\x38\x40\xce\x9a\xd4\xcc\xac\xf5\x30\x33\x37\xcc\xc8\x1c\x6f\x46\x7f\xeb\xe4\x59\xd0\x51\x97\xca\x60\x6b\x82\x0b\x5d\x59\xb1\x02\x3f\x6e\xce\xbf\xaa\xab\x99\x0a\xd2\x27\x46\xec\x9c\x27\x73\x66\x84\xbd\x58\x7e\x05\x8c\xa7\xc5\x04\xcc\x9d\xb5\xc6\x8a\x92\x60\xdc\xe0\x19\xfb\x78\x45\xd2\x52\x68\x35\x81\x8a\xab\x50\x55\x48\x6a\x0d\xa8\x5f\x2e\x64\xd1\xd5\xfd\xe4\x59\x46\x63\x39\xb2\xeb\x44\xe6\xca\xaa\x94\x16\xf9\xc4\x34\x78\xd5\xf2\x01\x22\xf6\xb0\x86\x4e\x15\xe2\xa1\xc5\xc7\xcc\x82\xec\xd7\xfe\xdb\x9c\xb2\x6a\x9c\xd8\x48\x65\x57\xc2\xbd\xb2\xc3\x0b\x3b\x03\xfd\x83\x44\xf5\x2c\x30\x73\x3d\xb7\x76\x1b\x9d\x32\xef\x7f\x6f\xb1\x5f\x74\x41\xf1\xb4\x9c\x82\xf6\x03\xe0\x8e\xba\x83\xa7\x71\x64\x12\x6d\x6a\xe4\x7c\x0c\xcf\x86\x51\x94\x3a\x0e\x07\x33\xa7\x96\x6c\x26\x3b\x1f\x93\x68\xe0\x1d\xa7\x25\x68\xf7\xb4\x43\xf3\xd4\xf3\xe2\xaf\x10\x64\x67\x7e\xbe\x23\x23\x44\xf9\x44\xbb\x48\xd4\x5f\x1f\xaf\xd6\x2e\x74\x3f\xf4\x84\x6d\x43\xf8\x83\xf7\x88\x8e\xae\xed\xd6\x95\x1b\xb6\x7a\xc2\x14\x53\x84\x3b\xb6\x34\xa0\xd5\x27\x97\x67\x20\x3f\x76\x9b\x16\x4c\x8b\x1e\xf7\x90\x64\x67\xca\x67\xf4\x30\x8a\x60\xe7\x36\xba\x6a\x92\x58\x1b\xfb\x97\x78\x1b\xed\xf0\x3b\x2e\x22\x36\xd9\xe5\x0e\x3e\xcb\x15\x04\xc9\xff\x8b\xba\x84\x83\x2d\x19\x38\x9e\xc2\xe6\x81\x59\xf0\x54\xd0\x69\x91\xe0\x23\xc9\x37\x1f\x9a\x17\x16\xff\x3b\x63\xf1\x4f\xa1\xd7\xdd\xd5\x24\x76\x20\xd4\x36\xba\xac\x37\x85\x36\x2f\x38\xa1\x9c\x91\x09\x67\xb5\x7a\x45\x6c\xe2\xa1\xfa\xf9\x2f\xb1\x6a\x5f\xb8\x55\xa7\x77\xac\x9a\xdf\x68\xbb\x92\xf1\x0e\x7f\xd2\x4b\xf6\x12\xb6\xf6\xe5\xda\xa8\xe2\x5a\x16\x5f\xb2\x7d\xea\x73\x84\xac\xad\xd2\xf6\x67\x36\xf3\x80\xe8\xb2\x4f\xfe\x61\x3a\xdc\x8a\x7f\x98\x17\xba\x85\x6e\x59\xc4\xe9\xa4\x2d\x64\xc8\x65\x7e\x22\x6d\xa7\xec\x60\x95\xc7\xa6\x20\x9f\x29\xda\x14\x45\x00\x9b\xd7\x88\x19\x39\x81\x90\x91\x55\x11\x8a\x99\x61\x33\x9b\xc7\xf6\xd4\x90\x0e\xca\x8d\x6d\x5c\xa1\x9c\x2f\x84\x2e\x78\x22\xae\x37\xe3\xd2\x62\x13\x0d\x45\x12\xe0\x1d\x4d\x02\x5d\x92\xd5\xba\x12\xe5\x50\x27\xaa\x10\x29\xc1\xd1\x45\xf1\x2e\x16\x75\x44\xbb\xeb\x18\x63\xdc\x6a\xb1\xe0\x79\x25\x13\xfd\x77\x23\x52\x59\x01\x6d\x52\x57\x28\x0d\x0e\x98\xac\xa8\x31\xca\x7e\x6e\xd8\x7a\x74\x9b\xdf\xe6\x17\xe0\x85\xb1\x53\x40\x33\x9b\x56\x66\x75\x9d\x14\x27\x5a\x8e\x0b\xc0\x5c\x3e\xcc\x55\x26\x5c\xe7\xa6\xe1\xd8\xd9\xe4\xcc\xe4\xa2\x8e\xa9\x27\xbf\x00\x21\xdc\xee\x65\x73\x2d\x47\xec\xa3\xd9\xc7\x07\xa9\x45\x73\x02\xf0\x8d\x6d\xbb\x7b\x7e\x74\xde\xc0\xd0\xd8\x89\xf8\x68\x31\xaa\x1b\xdb\x48\x6a\x04\xcd\x73\xec\x41\xbd\x9f\xe7\x14\x00\x2a\x32\xed\xff\xca\x6a\x7d\xe9\xa7\xa0\xd7\x37\x90\xa0\x1c\x6a\xa6\x1e\x72\xdf\xf3\x33\x1e\x84\xa7\xe8\x04\x51\x76\xcc\x5e\x68\x3a\x68\x4e\xdb\xd0\xf4\x30\x07\x69\xad\x5d\xbb\x8b\xa0\x4f\x59\x13\x25\x08\x02\x55\x71\x37\x30\xe9\xa9\x28\x55\xa5\x12\x95\x8d\x18\xce\xc1\x90\x67\x0f\x21\xc9\x59\x5e\x2f\x44\x09\xea\xad\xc2\xd4\xe0\xd4\x75\xc2\xcd\x91\x45\xa4\xb5\x98\x0f\x18\x41\x8b\x60\x2a\x52\xd2\x77\x9b\xaa\x2e\xd2\x3c\x04\x7a\x07\x7c\x47\x8c\x9a\xa3\x5b\x32\x40\x7d\x34\x08\x5b\x88\x83\x4c\xed\xa0\xc1\xde\x04\xdd\xb9\x60\x2f\x74\x3e\x3c\x57\x3e\x92\xa3\x2c\x34\x80\x8e\xc5\xff\x48\x51\x15\xb0\xb0\xc2\x0f\xf9\xe8\xe6\x74\x3c\x60\x3f\x9d\x8d\x21\x2c\xf0\xfa\xf4\x66\xfc\xca\x22\x76\xad\xb8\x41\x60\x4d\x22\x20\xfc\x41\xb8\xd4\x21\xdc\xd3\xcd\xe9\xf8\x59\x03\x1b\xba\x0b\xbb\xec\x70\x1d\x6c\x8a\x69\xef\xeb\x70\x1d\xc0\x75\xb6\x02\x1d\x05\xd4\x7e\xb3\xc2\x2b\xe2\x2c\xff\xf5\x26\x25\x41\x11\xd0\x98\xdb\x0f\x98\x3b\xbc\x28\x32\xe9\x23\xfd\x1d\xbd\x44\x5c\xfb\x8f\x4d\x6f\x41\xe0\x27\x43\x0b\x4b\x29\x28\xaa\x3c\x5a\x11\xe9\x48\xaf\xcb\x65\x50\x29\x3b\x02\xbb\x0e\x8a\x24\x4e\x22\x73\x14\x98\x7b\xf8\x33\xfa\xda\xab\x01\xfb\x78\xd5\xcb\x92\x13\x4c\x8c\xf1\xa4\x54\x1a\x6f\x27\xc9\x6c\xad\x96\x06\x0f\xcf\xef\x48\xbb\xb3\x17\xe3\x78\xd7\x5a\xc0\xbc\xf9\x29\xee\x19\xa2\xf0\xe9\xcb\xcd\x85\x83\xb9\x03\xfe\xb2\x66\x5a\x65\x02\x83\xfe\x45\xae\x31\xe0\x96\x0a\xc9\x80\x19\x2f\xe4\xa5\x46\x17\xd2\x2a\xe3\xce\xdb\x01\xb7\xe4\x55\x33\x64\x79\x9d\x0b\xf1\x93\x2a\xd9\xe7\x1b\x43\x6e\x65\xde\xf7\xa4\xda\xf8\xd2\xfe\x47\xf5\x66\xf5\x84\x02\x72\x9c\x39\x78\xdb\x1f\xd5\xd5\x73\x47\xca\xbd\x74\xc7\xe3\x50\xb3\x4c\x19\x66\x92\xab\x54\xf4\x3e\xa9\xe1\xc4\x3e\xe3\x51\x4d\x95\xd0\x3e\x15\x04\x42\xe8\x9f\xe9\xa4\x7e\x8e\x93\xd8\x23\xfa\xbb\x9f\x3c\x7d\x1d\x88\x84\x16\xd4\xcc\x42\x52\xae\xac\x29\x99\x7c\xf0\x98\x6a\xe2\x95\x30\xd9\xd5\x13\x6d\x4e\xa9\x3f\xce\x66\xf9\x63\x0b\xbe\x45\x80\x86\xed\x1c\xb1\x0f\x36\x76\xdc\x86\xbe\x15\xf6\xe8\x1a\x19\x07\xdf\xf2\xd1\xe0\x14\xe0\x80\xf7\x02\xe1\x04\x41\x1a\xd2\x14\x86\x18\x0f\x65\xaa\x4a\x06\x20\x2e\x91\x23\x09\xcb\xc1\xdd\x8b\x6c\xd9\xa4\x35\x97\x1f\x6f\x7c\x98\xa5\x39\x2b\xbd\x95\x07\xc0\x80\xc1\x73\xd9\x76\x96\xad\xe2\xe0\xbc\x14\xf9\x27\x10\xab\xfd\x79\x30\x7b\x78\xb3\x2c\x3a\x13\x28\x2c\x79\x82\xdb\x0b\x76\x31\x7f\x23\xe2\xc3\x80\x79\x79\x68\xaf\x43\xb4\x21\x8b\x4c\x6c\x96\xd9\x85\xe6\x9e\xd3\xff\x55\xe9\x9e\x9d\xfb\xc4\x8b\x55\x51\x34\x10\x9e\xa4\x05\xb7\x75\x19\x16\x41\x12\x13\x64\xe6\x88\x1c\x21\x92\x5c\xaa\x42\x49\xdf\xc3\x9d\xff\xbb\x3f\x45\x30\x09\x0b\x05\xca\x73\xdb\x4c\x53\x2e\x39\x44\x46\x6b\x5d\x2f\xe8\xb8\x42\x9d\x1a\x37\x76\x28\xd6\x05\x7b\x47\xbd\x1d\x3d\xcc\x05\xda\x4c\x4a\x0b\x5b\xba\x0c\x7b\xb7\xe3\xa1\xee\x5f\xad\xe9\x3f\x4c\x41\x01\xf8\x63\x4e\x98\xb0\xa5\xac\x04\xe0\xad\xc2\xef\x43\x90\xaf\x71\xff\x06\xd0\x10\x84\x4e\x5b\x85\x29\x5b\xba\xdc\x8a\x60\x8f\xd9\xff\x61\xb7\x07\x38\x81\xdb\x03\xf6\x7f\x47\xec\xbd\xbc\x13\x46\x0c\x81\x68\xe9\x96\xaf\x59\x79\x05\x81\xa6\x02\x38\x01\x5e\x19\x8e\x22\x3c\x90\x12\x32\x9f\x60\x24\x3e\x15\x28\x1c\x00\x9a\x92\x31\xf8\x08\x83\xcc\xc3\x11\x1d\x69\x69\x36\x4f\xd7\x50\x88\x8f\xbe\xfd\xe0\xe0\xad\xec\x1b\x2d\x5b\x95\xa7\xd4\xce\x4b\x56\xf6\x84\x54\x8a\xfd\x8f\x19\x90\x99\x3b\x2d\xae\x99\xfc\xb3\x48\x13\x7b\xc5\xb1\x02\xfd\x1b\x73\x00\x36\x84\x26\xaf\xb4\x64\x33\x75\x2f\x4a\x4a\x9a\xe0\x13\x99\xc9\x6a\xe9\x6a\xdb\xc5\x39\x65\x74\xec\xaa\x00\x0c\x9a\x11\x1a\x74\x0c\x7b\x19\x52\x6e\x90\x16\x02\x7f\xa5\x28\x57\x71\x0a\x57\x07\xf5\x04\x64\xf1\x17\xef\xd6\x4b\xcc\xf2\x1f\xda\x1f\xf4\x27\x89\x59\xd6\x98\x69\xeb\x2f\x27\x91\x03\x91\x03\xb0\xff\x56\xf5\xc3\xfa\x90\xcc\x4f\x1d\x9b\xbc\x4a\xb3\xf7\xef\xb8\x5a\xf9\x46\x67\xf0\x43\x6b\xeb\xd8\x55\xbd\x4a\xa9\xad\xd7\x7a\x33\x51\x87\xde\x76\x86\xa2\x7d\x09\x6e\xf8\x02\xc8\xff\xa6\xe0\x06\xf9\xa5\x04\x37\xac\x5e\xae\x97\x00\x87\x2f\x96\xa1\xbd\x04\x38\x6c\xc5\x27\x9e\x29\xc8\xa1\x9d\x21\xf6\xe6\x15\xd7\x9b\xd8\xf5\x66\x06\x01\x5d\xec\xcc\x20\xb4\x78\x2f\xf3\xfa\xf1\xc0\x63\x3d\xe4\x27\xfa\x27\xed\xb1\xba\x0f\xa0\xe6\x8f\x58\x18\x32\x9e\x41\xb7\x6e\xb5\x0f\xa6\x1a\x1e\xf4\xe1\x2f\x46\x7d\x1d\x97\xf2\x5e\x66\x62\x26\xce\x75\xc2\xb3\x4d\x65\x06\xd7\xbd\xc2\x52\x81\xb9\xad\x42\x43\xe8\x35\xa8\x4a\x09\xcf\xed\x5d\xf7\x39\xba\x85\x7d\x99\x09\xf7\xf6\x2a\xf2\x44\xe8\x22\xaa\xca\x56\x38\x96\x35\xa5\xd2\x49\x27\x3f\xe5\x05\x6a\x80\xb2\xd3\xc8\xd3\xd2\x3a\xa6\xf9\x49\xf8\x0b\x9a\x4e\x10\xd0\x98\x26\x46\xaa\x61\xea\x4c\xd5\x81\x6e\x18\xf7\x9a\x87\x26\x1e\x43\x36\x8d\x76\x99\xa6\x22\x65\xde\xcc\xca\x78\x5d\xcd\x55\x79\x08\x85\x59\x92\x52\xe0\xe2\xfc\x6f\x6b\x5d\x30\x84\x12\xe3\xc0\xfd\xb8\x0c\xf9\xc5\x50\xf6\xb6\xb9\x18\x46\x6c\x0f\xd8\x59\xa9\x8a\xf0\xc7\xe7\xcb\x0b\xa7\x91\xbc\xcb\xc4\xe3\xcf\x2a\xab\x17\x7d\xb6\x20\x68\x8c\x3b\xf0\x30\x97\x95\xb0\xdb\x60\xcd\xfc\xa6\xd5\x3d\xb6\x1a\x31\x76\x6e\x83\x94\x73\x99\x31\x19\xd7\xea\xe7\x59\x16\xb6\xb6\x2b\x8e\x05\xdc\xd1\x08\x02\xc5\xe0\x04\x61\x29\x09\xb0\x08\xc8\x7b\x81\x3e\xdc\x07\x1b\xaa\x50\x6b\x3e\x73\x29\xda\x61\x87\xa1\x7b\x2c\xa7\x24\x71\xfa\xed\xf6\x80\x8c\xb9\x9f\x48\x44\x38\x69\x2e\xe1\x86\x8d\x81\x1a\x1b\x1b\xea\xa6\x34\x9b\x06\x9b\xc2\x9a\xbb\x82\x35\x43\x4c\xab\x11\xed\x49\xcb\x66\xf8\x46\xd1\x5e\x7c\xda\x25\xb2\xd3\xd9\xb0\x40\xe3\x52\x25\x1f\x54\x9d\x57\x9b\x8c\xc4\x27\x6d\xed\x3b\xce\x6f\xdc\x70\xd4\x79\x82\x31\x96\x00\xca\x05\x03\x31\x8c\xde\x8d\xcf\xf3\x0d\x4a\xf6\x54\x78\x05\x82\x5a\xa2\xc6\x53\xc1\xab\xba\x14\x6c\x9a\xf1\x19\x79\xd8\xa8\x9e\xcb\xb3\x13\x81\x9f\x72\xcd\xa7\xe2\x7a\xa9\x93\x6e\x10\x9e\xb6\xe6\x31\x29\x0e\xac\xbc\x76\x39\x6b\x68\xcd\x34\x36\x8f\xd9\x46\x0e\x48\x0f\x90\x0f\x81\x95\x18\xcc\x25\xc7\x08\x11\xce\x8a\x8c\xcb\x9c\xde\x23\x3c\x8a\xd2\xc8\xac\x40\xa7\x6f\x0f\xfe\xe3\xf6\xc0\xfc\x03\xdd\x3f\x09\xc7\x98\x21\xc8\xa1\xc8\xb5\x4c\x05\x54\xad\x87\x4c\xd3\x52\x4c\xe5\x63\xb8\xc1\x34\x94\x11\xbb\x46\x6c\xa0\xff\xa0\xba\xfd\xe6\x06\xc4\xa3\x45\x4b\xb8\x85\x90\xfb\xb1\x9e\x88\x4c\x54\x6c\xce\xad\xe3\x89\x0e\x8f\x79\xb1\x7d\xba\xe1\x82\x18\x1e\x74\xaf\x64\x4a\x1a\x97\x61\x1b\xb7\xf9\x6d\x7e\x4e\x55\x0f\xde\x32\x31\x9a\x8d\xd8\xed\xff\xcf\xde\xbf\x2e\xb7\x91\x64\x87\xc2\xe8\x7f\x3f\x45\x06\x7d\x1c\x92\xfa\x80\xa0\xd4\xdd\x1e\x6f\xab\x63\xc7\x3e\x1c\x49\x3d\xc3\x3d\xba\xf0\x88\xec\x9e\x3d\x61\xfa\x1c\x25\xaa\x12\x40\x9a\x85\x4c\x4c\x65\x16\x49\x8c\x3d\x11\xfb\x41\xbe\xef\xe5\xf6\x93\x7c\x91\x6b\xad\xbc\x54\xa1\xaa\x50\x20\x01\x8a\xdd\x0d\x47\x78\x5a\x44\xe5\x3d\x57\xae\xfb\xe5\x68\xaa\xf5\x89\xdb\x1c\x19\xe0\xf1\x87\x09\x2f\xaf\x8e\x46\xe1\x8f\xbf\xb9\x3f\x84\xcd\xc6\x49\xa7\x71\xb3\xd3\x38\xed\x34\x4e\x3a\xed\x0d\x9e\xe8\x6e\x4f\xf3\xa1\xb4\xbd\xbd\x43\x4c\x0f\x8e\x8a\x72\x32\xa0\xad\xd3\xf9\xa0\x01\xce\x93\x2a\x7a\x81\xba\xb3\x4a\x15\x49\x14\x17\x28\xfe\xbd\xad\x20\xe3\x45\xb1\x62\x79\xa9\x97\x94\xbf\x27\xd0\xea\x31\x43\x62\xce\x57\x1b\x68\x79\xc7\xda\x7b\xc9\x79\x9d\xdf\xc0\x65\x07\x4b\x78\x92\xd4\x2f\x58\x2d\xc0\x8b\x49\x88\xf5\x2a\x1a\x44\xcf\xda\x18\x8a\xfb\xc6\xce\x6c\x77\xc7\xdb\x33\xa6\x1b\x7a\xfa\xdc\x39\x6b\x77\x1f\xb2\xed\x78\x3b\x96\x7b\xd4\x3a\xf3\x95\x2b\x66\x0e\x4d\x2c\x9c\x14\x17\xf8\x56\x00\x0f\xc5\x9c\x20\x4b\x89\x1a\xa9\xc3\x70\x1e\x75\xaa\xcb\x89\xcc\x73\xa1\x36\xa3\xc5\x66\xd3\x4e\x94\x18\x1a\x3e\x05\x6c\xb8\xb6\x98\x56\x7c\x98\x22\xc2\xd0\xa3\x1f\x6f\x61\xb3\x6d\x11\x57\xad\xd7\xe3\x63\x2e\x2f\x91\xf5\xdc\xb2\x09\x75\x4a\xed\x80\xb2\xa6\xa1\xfe\xab\x4f\x13\x44\x55\xde\xbb\xeb\x9a\xde\x87\x65\xea\x28\xe1\xdb\xd8\x9c\x63\xeb\xce\xce\xdf\xf4\x6c\x8e\x5a\x34\x44\xc4\x44\xae\x4e\xbc\xc1\x9c\x30\xad\xa7\x90\x0a\xc9\x75\x09\x0e\xb8\x79\x57\xd5\xeb\x8e\x17\xe6\xe6\x24\x23\xfd\x86\x95\xf9\xd8\xb5\x2d\x57\xe7\xbb\x3d\x68\x85\xe7\x67\x6f\x37\xac\xee\xfc\xec\xed\xb6\x2b\x73\x5d\x1e\xb6\xaa\x0d\x41\xab\xa1\x4d\xba\x32\x44\x0e\xa1\x78\x20\x4b\x6a\x1e\x27\x2e\x5a\x8e\xef\xbc\x5b\xea\x47\xe4\xfb\xeb\x55\x11\x3b\x1e\x68\xc0\xed\x7d\xfa\xd3\xd8\x68\x88\xb2\x63\x02\x95\xeb\x1d\x5e\x8c\xfd\x86\x5f\x43\x29\x78\xfe\x49\x15\xab\xcf\x5a\xdb\x1f\x65\x21\xcc\xca\x58\xd1\x17\x7b\xde\xde\x01\xa5\x58\x08\x6f\x41\x35\x0a\xe2\x12\xac\x26\x1d\x58\x19\xac\xed\x54\x85\x5a\xad\x6e\x2c\x14\x3e\x4a\xad\x2d\x9b\xca\x02\x58\x4e\x2b\x16\xde\x69\x3a\xe5\x83\x6a\x3c\x4f\x5a\x4d\x33\x19\x51\x69\x75\xdc\x3d\x2a\xca\x2b\x17\xe7\xde\xea\x90\x0b\xb5\xaa\x39\xbb\xd1\x06\xa6\xbc\x30\xa2\x31\x3b\x18\x19\x86\x2c\xdd\x5d\x14\x78\xd1\x40\x3e\xdb\x49\x65\x83\x4f\x0d\x31\x3f\xa8\xda\xab\x17\x18\xde\x78\x4b\xed\x9c\x58\xef\x3d\xb5\x77\x09\xc5\xc1\xbb\xf9\x50\xc7\x4f\x2e\x1b\x75\x7a\xbd\xa6\x89\x5d\x42\xf2\x65\x37\x88\x9f\xc1\xd7\xd9\xa4\x5e\xe0\xb6\x10\x54\xed\xc0\x1c\xee\x8f\xe0\x81\xbe\x72\x13\xcd\xfb\x1c\x1a\x0d\x20\x7b\x81\x1d\x85\x24\x0a\x49\x57\xca\xc7\x48\xf5\x5c\x41\x24\x36\xc2\xb6\x78\x54\xe9\x85\xb4\x36\xc6\x13\xe4\xcf\x4c\x3a\x8c\x7b\xbd\x96\x5f\x0b\x70\xcf\xbb\xc1\x24\xd3\x89\xa3\x4c\x4d\xb4\x4e\xba\x79\xb9\x7a\x06\x6b\xec\x90\xab\xef\x83\xb6\xe2\x1c\x1b\xc8\x6f\x54\x0d\xf7\x00\x9d\x6f\x73\xbf\x83\x86\x9e\x1d\xe7\xbc\x83\x5d\xba\xe1\x37\x6c\xd2\xeb\xc3\x7b\x2c\xec\xd8\x62\xeb\x0d\x62\x94\xdc\x8e\xb7\x75\xf1\x0e\x16\xb3\x69\x53\xeb\x2a\xfc\x9e\xfd\xad\x35\x1e\xca\x2b\xa6\x3d\x91\x6b\x44\x64\xb3\x3f\xbe\xf1\x62\x6d\xad\x1b\x4e\xe2\x66\xa3\x8e\xf8\x66\x4d\x31\xbc\xa6\x83\xc4\x26\x6c\x59\x54\x33\xa9\xba\xf4\x90\x4a\xb3\x56\x7d\xf0\xa5\xb7\x4e\x38\xb1\xc4\xb7\x58\x91\xa4\xee\x78\xab\x67\xdf\x3c\xdb\x3d\xba\xfc\x07\xb6\x95\x67\xdc\x67\xe1\x84\x3d\x7e\x21\x06\xc5\x77\x75\x05\xb3\xc4\x51\xd6\xa3\x58\xf8\x72\x69\x4e\x70\xba\x6f\x4f\x62\xc3\x31\xbb\x10\xf8\x70\x4a\x51\x08\x27\xff\x29\x6d\xc9\x9b\x78\xe1\x2d\x9c\xe5\x82\x4c\x39\xc9\x04\xe8\x48\xee\x75\xc0\x49\x20\x14\xc6\x4e\x91\xe3\x32\x2b\xb1\x07\xc2\x65\x59\x29\x05\xf9\x49\x2c\xe0\x62\x8c\xf6\xb2\x72\xb1\xa1\xc6\xc4\xc1\x57\xe2\xe0\x2a\xf7\x6b\xf4\x2c\x20\x7e\xfb\x3d\xd2\x29\x28\x81\x92\x3c\x30\xf7\x60\x28\x2a\x37\x94\xa7\x25\xad\x4f\xe0\x00\x43\xa8\x00\x0f\xe1\xae\xcf\xcd\x8b\xe8\xcb\x9e\x0c\xb7\xe0\x8a\xcf\x1c\xbc\xfd\xd6\x1c\xf4\xd6\x2c\xfe\x66\x50\x96\x51\xfa\x3d\xc5\x94\x4f\xb8\xa8\x62\x5c\xe6\x0e\x4a\x4b\x2e\xa0\xa8\x84\xc8\xb0\x48\x82\x9e\x40\x10\x51\xde\x48\x51\x9f\x1e\x0c\x50\x23\x77\xd3\x9e\xf2\x52\xee\x4d\xf7\x32\x31\xa7\xd8\xc2\x89\xa7\x2a\xd7\xb7\xd0\xdd\x61\x7c\x76\xae\x97\x55\x08\x33\x82\x7b\x21\x39\xf4\xb3\xe0\x39\x04\x03\xfc\x52\x4e\xfc\xd1\x2b\x59\x26\xdc\xc2\xee\x1d\x6c\xe2\xe0\x6f\xb4\xca\x65\x4d\x37\xbf\x26\xe7\xad\xb7\x6d\xd4\x00\x08\x25\x15\xb8\x67\x05\x40\xe4\x07\x9e\x21\x13\x25\x84\x92\x00\xca\xef\xf3\x99\x01\x4c\xdb\x00\x66\xdc\x55\x1f\xdb\x50\x70\x63\x2f\x4b\xae\x0c\xac\xeb\x52\xf6\x66\xb2\xbf\x04\x22\x6e\x2c\x00\xa7\x17\xc1\x69\x47\x36\x0c\xe2\x45\x74\xad\x84\x7f\x0e\x10\xf6\x05\x31\x1a\xbb\x89\x6e\x82\x75\xae\xd1\x12\x63\xf8\xac\x6f\xf9\xa7\x6c\x5e\x2d\x40\x4b\xc5\x73\x10\x7e\xa8\x8b\x67\x92\xb1\x4a\x96\xe5\xb2\x30\x8c\x4f\xdc\xf3\xb4\xbe\x40\x03\x2c\x6e\x70\x49\xa4\x52\x70\xd3\xcb\x87\x5d\x02\x2b\xe9\x1a\x85\x42\x07\xe1\x24\x9f\x19\x3a\xe3\xed\xe7\x1d\x8a\xc2\xf4\xb4\x3e\xe5\xc8\xd7\x10\xba\x2c\x1d\x43\xf6\x23\x2f\x8c\x18\xb1\x9f\xd4\xb5\xd2\xb7\xc3\x67\xa7\xaf\x9d\x7b\x5e\x2d\x61\x8e\x14\xc2\xc3\x0a\x76\x1d\x02\x1f\xdf\x5c\xaf\x97\x74\xbd\x59\x5b\x59\xd1\xd8\xe2\x90\xae\xed\xa9\x73\xe9\x9b\x3c\x9a\x7d\x40\x63\x7a\xa7\x6d\x6b\x8e\xe4\xc8\x2d\x3b\xd7\x99\x71\x2b\xce\xc4\xd2\x9a\x93\x5b\x5d\x5e\x17\x9a\xe7\xe6\x24\x16\x23\x31\x27\x04\xd3\x6e\xa2\xf8\xf3\x23\x29\xf8\x13\x3a\xd7\xa1\x8d\x3c\x48\x2f\xbf\x72\xbf\xe8\xd6\xb5\xff\xc2\x5c\xa3\x1b\x18\x7b\x9f\x2c\x5b\xaf\x33\x74\xbd\x59\x50\x32\x36\xc5\xa1\x54\x0a\xed\x57\xcc\x2c\xa4\x72\xcc\xfa\xea\x42\x38\x6a\xd7\x87\x9f\x3e\x48\x25\x17\xd5\x22\x51\x0e\x19\xec\x43\xfe\x19\x12\xe2\x63\x95\xb8\x2d\x56\x2c\x2b\x05\xa7\x7c\x10\x49\xc2\x5c\xc7\xd9\xac\xc0\x16\xe4\xb8\x17\xae\x30\x18\xdf\x9a\xc4\x60\x94\x95\xdc\xcc\x21\x9f\xad\x1b\x54\x7a\x5b\x5d\xea\xca\x70\xc3\x65\xe1\xf8\xa3\x7a\xad\xa6\x97\xec\xb9\x9b\xcc\x5b\x63\xda\x3a\x38\x09\xdb\x68\x0d\x56\x3f\xf4\x90\x80\x05\xbd\x58\x7f\x50\x8e\xba\xcc\x52\x14\x89\xfa\x33\xfa\xf4\xdd\xb7\xeb\x1c\x15\x6a\xc8\xfa\xcc\x29\x5e\x89\xe6\x8b\x2c\x85\x53\xf4\x62\xab\x1f\x84\x64\x31\x40\x79\x80\x8b\x1c\x92\xd2\x2c\x97\xc6\xe1\xba\x4a\x9a\x39\x9b\x08\x7b\x2b\x84\x0a\xfe\x25\xec\x6f\xa2\xd4\x40\x03\xd3\xba\x52\xb5\xf3\x79\xb5\x4f\x5a\x72\xf2\x8f\xb7\x73\x6e\x8f\xa5\x39\xe6\xc7\x03\x89\xcd\xb6\x47\x6c\x86\x66\x88\xa0\xa4\x66\x94\xf9\xe0\xaf\x95\x28\x57\x4c\xdf\x40\x96\x9b\x9c\x54\x9d\x04\x91\xb1\x24\x98\x67\xfa\x32\x5d\x29\x1b\xca\x4f\x99\x64\xbc\x98\x5b\x0d\xb4\xb2\x89\x0a\x07\x99\x12\x50\xff\xf8\x64\x6c\x31\x11\x34\xb3\x62\xb1\x2c\xa0\x3a\x19\xa8\x88\xd8\xb5\x58\x99\x58\x5a\xca\x5b\x36\x62\x81\x0a\xa9\x98\x2e\x73\xbc\x71\x04\x63\x3c\xc1\x98\x86\x22\x61\x50\xb7\xbe\x52\x77\x0e\x37\x52\xdc\x9e\x50\x32\xa4\x63\xf7\x16\x8f\x29\x60\xea\x04\x77\x71\xf2\x8f\xf0\xdf\x63\xbf\xfb\x1d\xe1\xec\xbe\x84\x0f\xfe\x90\xfa\xd8\x73\x6a\xe2\x9f\x0f\x91\x76\x2c\x40\x5a\x93\x56\xe1\xd4\x53\xc3\xac\xc7\x45\x72\xca\xa4\x32\xd5\x74\x2a\x33\x20\xeb\x35\xb5\x76\x2e\x2c\x64\xfb\xd8\xe7\x2b\xf9\xc7\xa5\xce\x8f\xc3\x5e\x87\x6b\x2e\x7c\x41\xc0\x73\x9d\xfb\x63\x58\x8f\x20\xbd\x0f\xa1\xe9\x2f\xb6\xd8\x6c\xd8\x2c\x92\xbd\x5e\xf6\xb0\x95\xea\xb4\x88\x23\x01\x5d\x0e\x90\x48\x3c\xf2\xfe\xbc\x19\xc5\x5e\xd6\xd0\x6a\x44\xfb\xe1\xa2\x9f\x23\x01\x82\xc2\x64\x3e\x11\x50\x83\xfe\xbd\x48\x12\xb6\x27\x0f\xed\xe1\xf8\x2b\xc8\x92\x1b\x88\x44\x7a\xc2\x24\xeb\xc4\x9d\xa0\x1e\x8f\x2a\x71\x34\x15\x32\xcf\x4c\xbd\x08\xe6\x63\xb9\xf0\xb4\x29\x9b\x3c\xab\x1f\xa6\xaa\xb1\x65\x4b\x87\xea\x8e\x17\xa2\x9c\x89\xe3\x6b\xb1\x72\x13\xa6\xea\xa1\xd6\xd6\xde\x8e\xea\x1a\x43\xcf\x35\xa7\xcd\xaa\x28\x56\x80\x66\x44\xbe\x35\xb0\x44\xda\x30\xe7\x37\x01\x9f\x87\xa4\x93\x09\x8e\xf7\x35\xc0\x13\xdc\xee\x7f\xf3\x70\xb6\x13\x78\xf1\x2a\xdb\x3f\x08\x45\x35\x23\xfa\x92\x02\xae\x35\x66\xa5\x98\xc6\x7c\x49\xb3\xf8\x3b\xad\xb5\x43\x3f\xbc\xfe\x7e\x07\x6f\xe1\x77\xdf\xb7\x79\x49\xad\xb6\xbe\x0a\x7c\xa3\xe1\xcd\xee\xe9\x39\xde\x83\x63\x6b\x1e\x19\x9e\x58\xba\x70\xcf\xbf\xfd\x22\x19\xad\x6d\xc9\x88\x2e\x8a\x09\xcf\xae\xdf\x40\x61\xe6\x01\x16\xef\x7e\x31\xa4\x14\x37\x72\x83\xde\x09\xb5\x92\xd8\x0c\x1c\xd8\x68\x05\x20\x8e\x47\x37\xb4\x97\xa3\xf4\x0b\x3d\x5d\xb8\x39\xec\xfa\x00\xc0\xbe\xc7\x11\x49\x35\xfb\x09\xf4\x03\x6f\xb9\x58\x68\xd5\xe7\x1c\x00\x02\x1d\x16\xff\x76\x97\xd9\x69\xd2\xca\x61\x24\xd8\x6e\x89\x33\x90\x0a\x62\x83\xa0\xc7\xef\x7e\x52\x81\x94\x6c\x38\xe7\x05\xbf\x6b\xc8\x7a\x61\xfd\x09\xae\xa4\x50\xcb\x2a\x0e\xcb\xf2\xaa\xf4\x08\x93\x16\xc5\xa0\x5c\xbe\x6f\xcb\x15\xe3\x13\xa3\x8b\xca\x86\x37\xff\x5c\xdc\xbd\x66\xff\xfc\x82\x41\xb9\xd0\xa5\x28\xdd\x03\xf3\x31\x7d\xda\xf2\xa2\x7b\x11\x64\x21\x35\x96\x97\xd6\x23\x36\x9c\x15\x07\x7d\xf5\xf2\x9f\x5e\x8c\xd9\x69\x63\x3e\xc8\xbf\x56\x64\x64\xb8\xc2\x20\xe0\x38\xeb\x64\xc5\x4a\x5d\xa9\x1c\x8f\x75\x1c\xb2\xd7\x92\xb2\xe7\x65\x90\xaa\x48\x0f\x25\x8d\x13\xad\xc8\x21\xfe\xb5\x8f\x4b\x44\xf9\x8d\x20\xf2\xbb\x97\xff\x34\x72\x6b\x05\x04\xf2\xdd\xcb\x7f\xf2\x4b\x6d\xee\x4e\xe9\x5c\xd4\x25\x94\x49\xf4\xb7\x00\x68\xc0\x9b\x87\xfc\x9d\x72\x2c\xc6\xc4\x7a\x8d\x09\x4a\x3e\xc2\x48\x17\xd9\x5c\xe4\x55\x21\xf2\x17\x70\xe6\x40\xcf\xec\x5c\x48\x12\x80\x8c\x25\x37\x45\x77\xdc\xca\x1f\xd7\xba\x37\x07\x64\xcc\xa3\xaf\x70\xc0\x06\xac\x80\xae\x37\xb9\x7f\xd4\xb7\xa3\x8d\x58\xbb\x1e\x95\x63\xd2\xc3\x89\x83\x09\xc3\xaa\x25\x53\xe2\xb6\xd9\x0a\x7d\xa1\xdd\xf2\x0a\x9e\x89\x31\xfb\xa4\x32\x34\xde\xb8\xb6\x38\x4e\x29\x22\x0f\x04\x32\x18\x8c\x0a\x61\x1d\x22\x37\x4c\x2b\xab\x29\x19\x7c\x7d\xec\x11\xb3\xf3\xca\xa0\x9b\x0b\x9e\x21\xb7\x91\xf3\xfb\x17\x5c\xba\x2e\xe5\x4c\xaa\x5e\x30\x4b\xe7\x67\x14\x2e\xe9\x0e\xc9\xb4\x80\xfb\x9e\x32\x04\x3f\x08\xf5\x88\x65\xa1\x57\x0b\xa1\x1e\x8e\x7b\xb6\x44\x38\x17\x55\xd9\x6b\xf2\x6a\x47\x35\x6b\x08\xc6\x78\x90\x66\x7c\xa2\x11\x9c\xc3\xea\xea\xdd\x1e\x84\x6d\xfc\x90\x30\x7f\x82\x40\x42\x02\x6b\x8f\x03\x9c\x28\xf9\xa1\x86\x4e\xdd\x6b\x7f\xf9\x50\x54\xf3\xfb\x90\xaa\x73\xc4\x78\xac\x3d\xfd\xca\x87\x91\x0c\x41\x33\xfe\xe1\x7c\x7e\x13\x0f\x8f\xbb\x93\xab\x96\x4c\x2e\x16\x22\x97\xdc\x8a\x34\x7e\xba\x7e\xa3\xf4\xd4\x47\x98\xed\x2e\xf8\xa0\x34\x31\x95\x2e\x72\x8a\x4e\xa3\x27\x9a\x6b\x38\x1c\x71\xe7\x5e\x24\x7b\x45\x58\x21\x3d\x50\x7a\xd8\xae\x27\xf4\x00\xbc\x34\x11\x42\xb1\x6b\x59\x14\x22\x1f\x75\x2e\x7b\x5a\x95\xee\x6d\x8f\x1a\xef\xb8\xb9\x26\x18\xb5\xe1\x9d\x06\x86\xe0\xb5\x37\x0a\xfa\x21\x0b\xe8\xab\x75\xa5\x7b\x4e\xf2\xfd\x40\x42\xfc\x88\xe4\xb7\xeb\x41\xdc\x1f\xcc\x73\x7d\xab\xba\x1f\x14\xa0\x0b\x7a\x4a\xf5\xc7\x30\x95\x77\x22\x7f\xc0\x93\x70\x60\xb7\x06\x5b\x6e\x31\xae\xd5\xbf\xac\xc3\xc0\x16\x6f\x85\x00\xbb\x46\xad\x40\x86\x19\xf5\xcc\x1a\x60\x1a\x13\xb6\x52\xd9\xbe\x8c\xd3\xf0\xc9\x33\x5e\x03\xfb\x96\xe7\x88\xf3\x0e\xa4\x50\x08\xfd\x75\x1a\xf8\x18\xe0\xbf\x2d\x05\xeb\xf4\xb0\xef\xd4\x57\x75\xf5\xa8\x7b\x8e\x05\x7f\xec\xd5\x52\x60\xbe\x54\xb5\x0a\x09\x61\xc1\xeb\xda\xd1\x41\xd0\x19\xd6\x3a\xac\x67\x95\xe9\x9e\xf0\xde\x99\x65\xca\x90\x26\xb9\x57\x2b\x86\xd1\x5b\x7d\x21\x05\x31\xbc\x2b\x89\x14\xf6\x51\x5f\x7a\xca\x66\x32\xaf\xbb\xd5\xe3\x6b\xf2\xe9\x5d\x81\xfb\x2c\xe4\x35\x44\x4d\x60\x3c\x12\x67\x06\x43\x44\x67\x92\xd8\x3a\x70\x5d\x5f\xc5\x0f\x30\x3a\x86\xfa\xc4\xfc\xc7\xc0\x9b\xbb\x63\x16\x2a\x1f\xb3\xcf\x3e\xfa\xc5\xb1\x9f\x1f\x2a\x63\xe1\x0c\x1f\x4b\x53\x75\xf6\xb6\x37\xcc\xac\xac\x7a\xd1\x71\x49\xe5\x51\x77\x1c\x0a\xb3\x6b\xd7\x92\xae\x98\x8d\xde\x67\xd3\xd2\x61\xaf\xaf\xa6\x6d\xbe\xa7\xff\x68\xaa\xfb\x3f\x9a\xea\xf0\x68\xf6\x12\xd6\xb4\x93\x37\xd3\x11\x10\xd4\x29\x2c\xb5\x36\xdf\xd7\x7b\xe9\x98\x6d\xef\xaf\x65\x0f\xf7\xba\x31\x9a\x6b\x83\xff\x20\x06\x91\x35\xaf\xa7\x33\xda\xcc\x1f\x55\x1a\x72\x89\x41\xbf\x3f\xc4\xdf\x6a\x6f\x6a\xa0\xe6\xd6\x72\x73\x0d\xca\xda\xa9\x9c\x55\xa5\x38\x5e\xea\xfc\x38\xb8\x30\x9c\x18\x8a\xd6\x82\x9f\xc4\x9d\x3d\xb9\x87\xa9\x8f\x2e\xbd\x11\x90\xb5\x2d\x58\x3b\x86\xb3\x13\x8a\x13\x6b\x1e\x0f\xac\xa7\x8f\x90\x06\xed\x50\xf0\xa6\x3a\x84\xf6\x1c\x42\x7b\x7e\xc3\xce\x71\x74\x52\xbe\xcb\x0f\x7b\x0a\xb1\xd9\x8d\xef\xf9\xbd\x63\x6c\xd2\x67\xd9\x8c\xa0\x01\xd1\x75\xcf\xa1\x1c\x0f\x8d\x6a\x75\x4b\xbc\x57\xe0\xcc\xba\x1f\xc3\xa3\x6d\x39\x89\x93\xd9\xc5\xee\x1f\x3d\x88\x05\x29\xcc\xee\x9d\x21\xe3\x65\x76\x51\xaf\xba\xcf\x0f\xb7\x78\xf8\x82\xbc\x22\xe0\xf2\x1c\x6a\xf2\x28\x6f\x83\xed\x71\xa3\x2d\x78\x5d\xdb\xec\x38\x2d\xae\x32\x61\x42\x88\x04\xe9\x77\x88\x48\x3d\x9a\x21\x36\xbd\xfa\x01\xb4\xbe\xcb\x73\x67\xed\xc8\x76\xe4\xc0\x33\xe0\x70\x79\x66\xab\xba\x7a\xd9\xbb\x23\xc4\x43\x4e\x5f\xe5\x0e\xce\x78\x0b\xaf\xc2\x7b\xf8\x11\x1a\xef\x48\xd8\xc0\x1e\xed\xdc\x64\x65\x44\x79\x3c\xab\x64\x2e\xc8\x03\xaf\xdb\x01\xcf\x6f\x13\xf7\x1f\x7f\xc7\x0a\x51\x5a\xf1\xe2\xbc\xe5\x0e\x06\xe7\x05\xb1\xbc\x9c\x09\x3b\xa0\x16\x57\xa3\xaa\x94\x7b\x01\x5b\x9c\x4a\x74\x6f\x35\xa2\x94\xbc\x90\x7f\x03\xbd\x71\x12\x04\x0f\x39\xf6\x16\x7c\x79\x8c\x85\x94\x80\x4f\x73\x47\x29\xee\x1c\x1c\x1b\x79\x03\x82\x03\x7d\x0d\xe7\x14\x47\xce\xb5\x12\x31\xe7\xa2\x54\xb6\xd4\x0e\xf5\x02\x2b\x49\xb9\x97\x90\x7d\x31\x68\xe7\x24\xe6\xc9\x7b\x0c\x52\x13\x90\xc5\x11\x80\x7c\x70\x2e\x80\xc1\x31\x24\xa6\x65\x66\xa5\x2c\xbf\x0b\xde\xa2\x78\x78\x28\xf0\x41\x8a\x1b\x27\xe9\x43\x1a\xa6\xb8\x91\xb0\xd4\x11\x6e\x31\x49\x81\x82\xbc\x68\xb3\xa1\xff\x58\x0a\xb6\xf4\xb1\x96\x8f\xed\xf5\xb9\x1b\x11\x7b\x63\xd2\x89\x4e\x69\x7b\x53\xcf\x0d\x82\xf7\xfd\x84\xee\x8d\x93\x3e\xa0\x6c\xd0\xc3\x15\x51\x2d\x49\x43\x30\xf7\xd3\x46\x3d\xd4\x7a\xcf\x83\x5a\xea\x1e\x19\x5a\x7c\x62\x3f\xc2\x14\xdd\x09\x5a\xb6\x7f\x3c\xb1\x54\xad\x63\xe7\x7d\x45\xfa\xae\xd7\x11\x8b\xeb\x7b\x7e\xa8\x56\x54\xff\xcd\xd9\xdb\xcf\xec\xf9\xbb\xbb\x31\xbb\x3a\x7a\xf5\xaf\xdf\x8e\x5f\xfd\xee\xbf\x8d\x5f\x8d\x5f\x9d\x7c\xfb\xfd\xd5\x11\xe5\x18\xa8\x17\xe9\xb4\xbe\xba\x22\x55\x3c\x86\xb4\x23\xeb\x15\x76\x9f\x99\xb4\x6c\x20\x22\x51\x71\xe7\xd0\x0d\xa5\xaf\x8c\xeb\x71\x4b\xa8\x53\x86\x66\x3a\x53\x07\x65\x3e\xfd\xba\xbb\x98\x3e\xce\x23\x93\xf9\x90\x32\xbc\xd0\xac\xfb\xfa\xe1\x58\x52\xb1\x79\x4d\x60\x3e\x3b\x67\x78\xb0\x58\x30\x50\x50\xc2\x4b\x78\x93\xeb\x47\x39\x54\xea\xc4\x23\xea\x59\xd8\x3b\x3c\x43\x5c\x5a\x21\xb1\x66\xe0\xe0\x13\xe4\x6a\xcb\x75\x33\x9a\x8f\xd4\xac\x9e\xfe\xa1\x3e\x24\xd4\x15\xc6\xbc\x15\xba\xb2\x46\xe6\x88\x91\xe0\xfc\x00\x45\x3c\x6a\xd2\x9d\xfa\xd3\xa8\x01\x65\xe7\x03\x69\xd4\x5a\x0d\x60\x09\x4f\xdb\x97\xf0\x6c\x29\xa9\x8c\x1a\x30\xca\x3e\x7c\xae\x83\x66\xe1\xa0\x03\x3b\xe8\xc0\x7e\xb3\x3a\xb0\xdf\x44\xa2\x99\xcd\x79\x65\x82\x4f\x7a\x0d\xb9\x6c\xa3\xc2\xe9\xc1\x64\xfb\x28\x0e\x97\x4c\x87\xd7\xb3\xae\xca\xa9\x63\xd3\x76\x95\xce\x10\x6d\x4e\xcf\xce\x92\xa2\xe4\x83\xb0\x75\x6c\xdf\xc5\xde\x10\x7a\xf6\xe8\xbb\xc9\xcf\x50\x0a\x9b\x7b\xf2\x33\xa1\x76\x78\x8c\xce\x03\xa1\x0d\x85\x3a\x70\x6e\xd5\x24\x72\x82\xb0\xd1\x53\xad\xb5\x9d\x68\x2c\x37\x24\xf2\xf5\x09\x01\x72\x61\xac\x54\x08\x92\x38\xb9\x03\xc0\x66\x59\x7b\xca\x1e\x2e\x21\x99\x2a\x71\x53\x05\xa5\x8d\x08\xa5\xa4\x2b\x03\xde\x71\xac\xd0\x33\x99\xf1\x82\x7d\xfa\xdc\x59\xae\x5c\x97\x6c\x21\x8d\x81\x58\xdc\xc0\x9a\x35\x0a\x44\xbb\xb5\x3c\xf7\xe7\xe4\xb0\x5d\x29\x1c\xaa\xf1\x65\xb3\x5d\x83\x17\x2d\x13\xf8\x38\xc9\xa4\x56\x6b\xb3\x34\xbb\x15\x8b\x11\x8b\x15\xd3\xb1\x44\x3b\xe5\x53\xa6\xf9\x40\xc8\x1e\x52\xe7\x1d\x12\x1e\x13\xa7\x7e\xdf\xfc\xf8\x0f\x79\xd1\xe7\xba\xec\x4c\x7e\x60\xf5\x76\x00\xd0\x7e\xf7\x01\xca\x43\xd1\xf2\x18\x36\xe3\x18\x6a\x76\x86\xd5\xf2\x52\xb0\xa8\x95\x18\x5f\x87\x0b\xe6\x00\x36\x56\x7f\xba\x1f\x84\xd4\x16\xde\x03\x28\x49\xbb\x87\xc1\xcb\x43\x41\x25\xbe\x1e\x10\x9e\xbf\x0a\xb4\x08\x51\xee\x88\x29\x4e\x6b\xef\x0f\xc2\xb8\x49\x87\x7b\xa2\xdc\x87\x89\x90\x9b\x51\xae\xe3\xc3\xfa\xb5\x2b\xae\xc5\x80\x37\x45\x3c\x28\xe5\x2d\x88\xf1\x16\xe0\xa8\x60\x35\xe3\x59\x96\xd4\x0f\x79\x72\x2f\xcb\x2f\xbf\xe7\x51\x61\x93\xfb\xbc\xa7\xbd\x3c\x27\xe0\xa0\x9f\xca\x83\x1a\x6d\x49\x82\x11\x00\x9b\xb0\xb2\xe0\xb9\x20\x40\x91\x10\x9e\xab\x36\xc3\xcb\x81\x48\xff\x72\x88\xf4\x3d\xd1\x6e\x6f\x4e\xaf\xb5\x96\xf5\x8a\x31\x75\x75\x45\xa3\x94\xed\x21\xb5\xd7\x13\xd5\x50\x6c\x4a\xed\x75\xf6\x55\x8a\x15\xf7\xa9\xcb\x3a\xf0\xe1\x41\xd5\xf2\xf5\x55\x2d\x87\x1a\xc5\xdb\xaa\x2b\x7a\x52\x72\x3d\x50\x65\x01\xbc\xc3\x20\x54\xee\x5a\xd6\x79\x66\x81\x59\x7c\x30\x71\xbd\xa7\x7d\xc0\xbf\xb2\x4f\x8e\x2a\xfa\xd4\xa9\x48\xf7\x63\x52\x0f\xa0\xc0\xb5\xd2\x3c\xbd\xfc\xae\x5c\xd6\x2d\x44\x7d\x36\x22\x44\xe9\x64\xb5\xd4\xaa\xce\xd9\x53\xb3\x16\x56\x00\xa2\xa9\x1c\x99\x57\x54\x92\x8c\x14\x63\x18\x73\x4b\xeb\xc5\x28\xa7\xfb\x2b\xc1\xbc\xa5\xab\xf1\x72\x14\x5f\x08\xb3\xe4\x99\x18\xe0\x96\x80\x4d\x0c\xfb\xe8\xfb\x18\xe2\xa5\xb2\xa2\x32\x56\x94\xc7\x26\xd3\x4b\x91\x93\x1f\x72\xad\x82\x08\xc6\x61\x19\x66\xc2\x2b\xac\xbb\x38\x18\xb1\xe0\xca\xca\xcc\xfc\xe0\xb8\x19\xcf\x1b\x4d\x2a\x9b\x64\x86\x32\x34\xbd\x63\xbb\xc2\xb2\x0d\x14\x4c\x3b\x9b\x62\x0d\xea\x24\x41\x55\x61\xb4\x3b\xd8\xc0\x40\x09\xb6\x0e\x4f\x1c\xeb\x29\xe8\x42\x84\xc1\x29\x45\x78\x92\x9c\xa4\x36\x30\x8d\x14\x0f\x20\xf0\xa1\x93\x55\xfc\x39\x4a\x5d\x9f\xdc\x15\xde\x4a\xac\x19\x97\x6e\xe0\x3c\xc6\x66\x0f\x1f\x6e\xff\xa9\xa2\x12\x91\xb1\x37\x72\xd2\x7b\x98\x34\xae\x91\x38\x78\xda\xe7\x39\xc4\xa5\xee\x11\x0a\x20\x9e\x8e\xee\x7f\xed\xb4\x9e\x3a\x14\x0c\x9a\x03\x71\xc9\x33\xc3\xf4\xad\x8a\x23\xef\x11\x10\xee\xc9\x93\x03\x7b\x3f\x0c\x91\x3b\x41\xa4\x86\xc8\xdd\x0f\x6b\x88\x5c\xab\x8d\xba\xdd\x0d\xa1\xbd\x30\x2e\x89\x8c\x98\x78\x61\x59\x6a\xab\x33\x5d\x24\x11\xb2\x84\x70\x27\x82\x71\xa6\xaa\x85\x28\x41\x22\xd4\x25\x20\x98\x3c\x8c\xc1\x43\x31\xae\x3a\xe6\x76\x6c\xd1\xb2\xd4\x37\x32\xc7\xd2\x4a\xd2\xac\x09\x87\x88\xaa\x30\x9c\x1b\x3c\xf0\xf6\x1e\x00\xed\xb7\xb9\xe9\x7c\xa8\x19\x7b\x7e\xf9\xe6\x7c\xc4\x7e\x7a\x7b\x3e\x72\x1b\xbf\x78\x73\x79\xfe\x82\x1e\xf2\xba\xbe\x08\xce\xc0\xed\x3a\x29\x56\x9f\x1c\x49\x5a\x72\xf3\xf2\xcd\xf9\x0e\x1d\x35\xd6\x6d\x38\x83\xa0\x0d\x12\x2f\xd0\x0d\x75\xe6\xf2\x6c\xb3\xcd\xb4\xc9\x82\x29\x72\xdc\x2c\x11\x0a\xd0\xf5\x0d\x50\x7e\x60\x43\x10\xef\x0d\xe5\x25\xe4\xcb\x65\x21\xa3\xba\x2f\xa0\x17\x8a\xf4\x6f\xaa\xa7\xd3\x5a\xec\xc0\x3a\x50\xd5\x5b\xa5\x6b\x7b\x93\x01\x53\x79\x41\x02\x52\x9d\x80\x06\x02\x29\x78\xe0\x5d\x02\xc2\x4a\x8a\x2c\xd2\x6c\x2f\x46\xec\xd3\xe7\x41\x3a\x87\x64\x63\x8c\x67\xa5\x36\xf8\x2a\x88\xbb\x69\x15\xc5\x1d\x1e\x36\x22\xd5\x5c\x86\xa1\x6d\x52\x12\xaf\x4d\x57\x13\x15\x25\xf5\x91\x0b\x09\x12\x0d\xcc\xdc\x3c\x38\xd8\x3b\x38\xc3\x1a\x66\x74\x21\xb0\x94\x34\xd6\xed\x89\xf1\xe0\x18\xb1\x9e\x90\x1e\x27\x31\x18\x1d\x2a\x33\x10\xd4\xbf\xa8\xd1\xba\x1e\x73\xd5\x63\x49\xa1\x89\x41\xb0\x43\x1e\x95\x6a\x28\x90\x52\xcb\x2d\xa0\xf4\x72\x1d\x38\x1d\x96\x07\x98\xfb\x4a\x50\x4a\x02\xb3\x0c\xc0\xf4\xcc\xb0\x42\x3b\x8c\xaf\x74\x2e\x06\xc3\x75\x7a\x16\x5f\x11\xb0\x73\x2d\x90\x02\x51\xed\x2e\xb5\xda\x13\x5c\x3f\x32\xd8\xa6\x66\x95\x4e\xbd\xf2\x10\x36\xf5\x22\xe1\xb4\xd0\x7f\x5a\x7b\xc2\xb6\x7e\x9a\xa4\x40\x41\x98\x26\xbf\x65\xd8\xe6\x3a\xf4\x3b\x88\x8e\xa0\xef\xce\xbd\xae\x92\xf6\xa9\x64\xe1\x1e\xc7\xec\x43\x55\x58\xb9\x2c\x44\x70\x87\x5a\x7a\x30\x77\x1c\x08\xf6\x4a\xbc\x40\x85\x8d\xd9\x76\xce\xe8\xe2\x33\x6e\x04\x66\xda\xa8\xaf\x64\xaa\x4b\x26\x78\x36\xaf\xdb\x44\xd0\x5d\xfd\x46\x14\xab\x26\x46\xfa\xf8\xe9\x92\x1c\x76\x79\x81\xf6\x9e\xa1\x1c\xf9\x98\x9d\x2a\x82\xc7\x36\x18\xf6\xdc\x78\xd0\xba\xab\x47\xe0\x55\x23\x34\xb8\x1b\xbc\x5c\x2d\x7b\xbd\x7e\x3d\x26\x83\x57\x0b\x3a\xa6\xf8\x12\xea\xa0\x50\x8a\x02\x6b\xe6\xe9\x31\xf9\xf9\x79\x27\x67\x77\xcc\x04\x9e\x23\xf6\x8e\xfe\xab\xcb\xf0\x1b\xfe\xd4\xc1\x28\x26\x2c\x93\x2f\xbe\xea\x2b\xb1\xa3\x57\x3a\x31\xab\xe2\x4e\x1a\x2b\x14\x3a\x27\xd2\xc8\x6e\x92\x77\xc9\xcd\xff\x10\x81\x08\x73\xd5\xa0\x05\x81\x71\xe5\x9b\x19\xf2\xc7\x07\x3d\x87\x31\xd5\x82\xa0\x75\x3a\x75\xe0\xe6\xd7\x0e\xa1\xd3\x70\x77\x34\xda\x73\x5f\x08\xde\xf1\xc0\xda\xa2\x7f\x62\x32\xba\x5f\x0f\x0d\xff\xa2\x63\x7c\x6a\x16\x83\xf7\xb9\x02\x26\xff\xb6\x94\x16\xd2\xe4\x20\x6f\x00\xb1\x59\x84\xce\x47\x58\x71\xd0\xb1\x9a\x49\x5d\x77\x3c\x34\xdf\x06\xee\x98\xfd\x1b\xbb\x3a\xc2\x0d\x5c\x1d\xb1\x7f\x1f\xb3\xf7\xf2\x5a\x38\x32\x30\x72\xd8\xbb\x65\x36\x4f\x2f\xd0\xc5\x93\x6e\x21\x96\x44\x24\x36\x25\xd2\xa9\x64\x25\x7e\x7a\x5e\x5b\x00\xaa\x65\xd1\x36\x8b\x3e\xa2\xe9\x8a\x9e\x1b\xe9\x2e\x0f\x52\x3c\x85\xb9\x6f\x83\x63\xa9\xef\xd1\x72\x55\x2a\xa7\x76\x91\xb2\x79\x08\xb1\x9a\xfd\x87\x5b\x90\xdb\x3b\x1d\xae\xdb\xfc\x5e\x78\x8e\xfb\x7b\x90\xe2\x66\x83\x13\xf9\x29\x9e\xe7\x8f\x85\xb8\xfb\x19\xaa\x4a\x76\x32\xed\x6b\x2d\x59\x3d\x7e\x1a\xbd\xe6\xdd\x67\x2a\x74\xd9\x62\x18\xf7\x09\x23\x7a\x38\xf8\xbc\x94\x37\x62\x08\xf3\x4e\x0d\x7b\x22\xd6\xa0\x41\xc8\x36\xef\x30\x37\x91\xff\x64\x91\xd8\xe8\x41\x52\x50\xfb\x89\x42\x59\x6f\x6e\xe7\x9b\xce\xd3\xb7\xab\x99\x9b\xa0\x4a\x39\xad\x30\xa6\x4d\xae\x27\xf5\xa6\x32\xbe\xe8\x5b\x40\x20\x1c\xc3\x90\xb4\x3b\xe8\x31\x3b\xb3\xf5\xca\xc0\x4b\x37\xd3\xb2\x14\x53\x79\xe7\xcb\x2f\xc3\xb4\x1b\xe2\x35\x5c\xb7\x73\xe8\xd5\x73\xde\xb1\x51\x60\xdf\xd2\xd9\x3c\x22\x4f\xf7\x56\x93\x5a\x6d\x64\x97\x28\x70\x88\x7d\xf9\xe6\x0b\x70\xa9\x12\x42\xf3\x4d\xc1\xa1\x36\x36\x44\x85\x94\x90\x9f\x0a\x33\x53\xdd\x38\x0a\xc0\x23\x33\x9a\x4c\x4b\x65\xb7\xb1\xec\x3b\xb7\x73\xd0\x45\x51\xc6\x2c\xf3\x9a\x7d\x39\x99\x6a\xfd\x85\x9e\x34\x32\x69\xf8\xd3\x08\xff\x7b\xf2\x05\x9e\x3c\xfe\x7b\xc2\xcb\x2f\xf5\x1e\x91\xb5\x83\x9f\xf3\x2f\x0e\x27\x7f\x39\x11\x36\x83\x56\x5b\x94\xa3\x82\xda\xe8\x3d\x87\xdb\xac\x93\x3e\x42\x38\xc0\xc9\x93\x23\x6d\xa4\x6c\x4e\xee\xc4\xdb\xa1\x63\x01\x59\xb6\xd0\x95\xb2\x31\x5f\xd7\xa7\x7a\x14\x6e\x47\x6d\xf1\x2d\x9e\xc2\xbb\x1b\x99\xd9\xbe\xca\x6b\xbe\x01\x13\xee\x1f\x86\x44\x0f\x30\x7f\x39\x81\xd0\xb1\xfc\xcc\x54\x94\xe8\x5e\x27\xa5\xd6\x88\x14\x02\x0f\xcd\xa7\xc2\x02\x01\x34\xb6\xe4\x92\x22\xda\x42\x7c\x5d\x0c\xe7\x24\x37\xf6\x31\x63\xa7\x69\x1d\xfc\x8c\x57\xc6\x93\x02\x5a\x08\x04\xc9\x99\x90\x36\x7f\xb2\x62\xe7\x9f\x2e\x2e\xe1\x4c\x35\x1b\x8f\xc7\x27\xee\x8d\x9d\x5c\x55\x2f\x5f\x7e\x97\xb9\x05\x3b\xdc\x02\x7f\x89\x13\xdf\xdf\x1c\x32\x46\x7c\x35\x5b\x74\x2e\x0a\x61\xc5\xe6\x24\x29\x6f\xd3\x76\x3e\x1d\x8b\xd7\x15\xee\x84\x27\xae\xcd\x70\x70\xea\x7f\x32\x96\xe6\xe8\x1d\xdf\x55\x3a\x03\xf8\x34\x77\xc4\xf0\xa0\xb7\xaa\x96\xbf\x95\x57\xfe\xae\x0c\xc6\xcb\x86\xd7\xba\xb7\x12\x07\x14\xfc\xc0\x14\x05\x0d\xcc\xfe\xe3\xc5\x56\x89\x09\xdb\x9b\xef\x20\x6c\x75\xcf\x51\xa6\x53\xb3\x5d\x6c\xa9\x6f\xff\x4b\x88\x28\x6d\xdc\xe8\xe3\x45\x93\x12\x30\xec\x33\x82\xb4\xb1\x37\xe0\xb1\x75\x69\x71\x87\x5d\x40\x5a\x6b\x15\x60\x93\xd3\xb5\xe9\x29\x31\x91\xe0\x4d\xb8\x3d\x27\x5e\x63\xc5\x29\xf4\xbd\x71\xfd\x1d\x1c\x79\x8b\x90\xb4\x90\xe1\x41\x1f\x2d\xf8\xdd\x00\x69\xc9\xb5\xea\xbe\xbe\x05\x0f\x3c\xbb\x5b\x87\xaf\xe6\xe1\x36\x3e\x42\x69\xd8\xc8\x9b\xb6\x72\x2a\xdb\x66\x9b\x70\x0b\xef\x59\x86\x54\x11\x88\x92\x8c\xf6\x3b\x5c\xc8\x16\x50\xe3\x5f\x44\x67\xe0\x31\x7e\x8f\xb6\x2b\xce\x16\x52\x9d\xb8\xb3\x44\xd6\xab\x86\x4f\x40\x53\xf4\xb6\xd7\x91\xf1\x17\x72\xab\xeb\x65\x4e\xbe\xd2\xad\x0e\x2b\x4b\xd1\xb8\xd5\x73\x9d\xbf\x95\xa6\xac\x60\x79\xbf\xaf\xf2\x59\x4f\x3d\x8a\x96\xb6\xc0\x91\xa9\x50\x7c\x4b\xd3\x6b\x85\x0d\xb9\xf3\xce\x43\xfb\x5a\x86\x6a\x10\x32\xc8\xba\x52\xaf\x5f\xbb\x3c\x04\xd6\x1e\x02\x6b\x7f\x13\x3c\xf8\xd3\x8d\x66\xa5\xdf\x5b\x9e\xfb\x36\xce\x7c\x9b\x11\xcd\xbd\x92\xb3\x7d\x68\xaf\x53\x55\xcf\xd5\xb6\xff\xa5\xef\x25\xb3\x5a\x97\xd4\xd2\x86\xa4\x77\x2b\xc0\xb4\xcc\xd0\x1b\xb4\xd0\xd1\xbe\xad\x22\x79\x4b\xd3\x43\xfc\xc2\x53\x27\x04\x6b\xf1\x0b\x7b\x13\xb4\xda\x60\xbb\x43\xe8\x3a\x50\xa7\x5f\x04\x75\xda\x57\x10\xc0\x16\xd8\x71\x17\x25\xb9\x07\xd2\xaf\x2d\x30\xa4\x2f\xd0\xed\xb5\x6c\xcb\xe8\xd0\xd7\x43\xb0\x1e\x58\xbc\xed\xb4\xae\xc4\x4f\xbc\xee\x7c\xc5\xae\xab\xc6\x60\x57\x47\xeb\xde\x21\x57\x21\x31\xe2\xd5\x11\x28\x88\xd2\x1a\x33\x7c\x0a\x15\xa9\xdd\xa3\xa0\x99\x46\x0c\xaa\x91\x89\x1b\x01\xe9\xf5\xf8\xc4\x78\xef\x80\xd0\x0a\xbd\xae\xc6\xec\x47\x5d\xfa\xa4\x44\x23\xf0\x55\x72\x22\xc2\xb2\x74\x5d\x6d\x30\xce\x28\xcb\xcb\x55\x18\x1d\x0b\x8f\xa1\x9d\xdb\x3d\xea\x97\xa9\x85\x63\x51\xd9\x8a\x17\xc5\x8a\x89\x3b\x12\xa4\x98\x11\xd6\x62\x36\x3f\x3b\x77\xbb\x95\xea\x34\xee\x75\xef\xc5\x7d\x92\xd9\xee\x7b\x4d\xe8\xc8\xd5\x5c\xf9\x86\x5b\x02\x75\x8c\xb1\xa4\x94\xd9\xe2\xb6\x40\xf7\xd7\x73\x63\xec\x42\xa3\x1b\x0f\xde\x1a\xa8\x01\xb7\xbf\xb4\xab\xa3\x57\x2f\x5f\xfe\xd3\xfe\xcf\x7f\x40\x42\xcf\xf7\xad\x09\x3d\xd1\xfd\x2d\x2e\xdf\x41\xfd\x82\x2b\x3e\xf3\xfe\x52\x22\x95\x6e\x27\xdb\x32\x99\xbb\x74\x73\x1f\xcc\xaf\x6e\x83\xac\xd6\x4a\x3c\x3b\x12\x55\x2e\x90\x31\xe2\x13\x5d\x85\x5a\x8b\x21\x65\x6c\x1b\x16\x63\x34\x90\xa3\xa3\xb6\xe4\x12\x4b\xc9\x51\x86\x57\x28\x4b\x4c\xe9\x66\x57\xc6\x8a\x45\xaf\x2b\x44\x18\xda\x9c\xd6\xc2\xa0\x42\xc6\xe6\x3f\x0a\x5e\xd8\x79\x20\x11\x3e\x49\x6f\xf3\x67\x71\xb7\x84\x27\x03\x49\xbc\x36\x33\x9a\x8d\xc1\x37\xe7\x8d\x8e\x79\x6b\xe7\xd8\x27\xd5\x6a\x3c\x40\x5b\xd8\xd8\x4e\xaf\x8a\x09\x6a\x84\xad\x27\x29\xde\xf1\x82\xf0\x46\xe8\x24\x7b\x2c\x8b\x69\xbb\x18\x3b\xbe\x0e\x50\x2d\x0f\x8f\xdd\x72\x83\x95\x1d\x8d\x89\x2f\xef\xf4\xfc\x0c\xbd\x45\xcb\xd8\x30\xb5\x6d\xcf\xb9\xca\x0b\x51\x42\x24\xce\x9c\xa3\x17\xc5\x4a\x58\xac\x2f\x17\x84\x46\x1a\xac\x4d\xaf\x15\x0b\xe8\x8e\xd9\x29\xd8\xc1\x6a\xb9\x60\x21\x6c\x62\x19\xb9\x41\xa8\x2b\x17\xca\x82\x25\xab\x8b\x2b\x4f\x31\x6e\x6a\x70\x5f\xef\x0e\xfe\xc6\x0e\xb3\x0b\x05\xc6\xf6\xb7\xbf\x4f\x96\xc3\x38\x94\xca\x73\x28\x14\x36\xb3\xe0\xe5\x35\x19\x48\xc0\xd0\xeb\x46\x7f\xae\x4b\x42\xf3\x1c\x86\xd6\x15\xba\x7a\x0b\x76\x2d\x56\x1e\xc5\xbb\xf5\xb7\x38\x03\xb9\xc9\xa9\x4e\x67\x2c\x68\xfa\x80\x2d\x86\x74\xb8\x61\x75\xb9\xcc\xd5\x33\xcb\x74\x96\x55\x25\xba\xf3\x85\x1d\x03\xb5\x42\x3f\x6b\x69\x93\xec\x83\x0b\x7d\xe3\xeb\xc8\xf9\x74\x00\x8c\x57\x56\x3b\xe0\xc9\x80\xda\xbb\x73\xea\xbd\x46\x3a\x10\xa3\x17\x82\xea\x99\x9e\x4d\x1d\xc9\x2b\x57\x16\xdc\x43\x66\x5a\x18\x66\x16\x3a\x64\xe1\x75\xe7\x13\x33\x3b\xa0\x23\xa9\xcf\xec\x0d\x7c\x93\x2f\xda\x0a\x83\xbd\xe7\xe5\x2c\x2d\x5a\x2d\x1c\xaf\x2e\x4c\x7a\xd8\x28\x49\xe4\x32\x73\x38\x6f\x59\xea\x49\x21\x16\x06\x99\x12\xb7\x7f\x7f\x3e\x6d\xe6\xad\xad\xd3\x3b\x3f\x80\xfa\x5c\xca\x45\xa7\xd9\xab\x05\x05\x77\xbf\xfa\x8f\x69\x39\xba\x84\x56\x92\xb9\x08\x1c\x80\x11\x63\x16\x2b\xcf\xf0\xec\xc0\xa6\x52\xc3\xee\xdd\xab\x6b\x2d\x99\x07\xf9\xa8\x13\x7f\xe8\x35\x02\xff\xf0\xe5\x6d\x55\xc6\x3d\x51\x76\xd5\x4a\xb6\x7b\x04\x06\xcf\x11\xc4\x4a\x14\x6e\xa5\x01\x6c\xe1\x8b\x09\xd4\x5e\x84\xbf\x31\x34\x26\x83\xc7\x2c\xd1\xee\x88\x87\xdd\x23\xbc\x41\xff\x61\x72\x8f\x5a\x5f\x2e\x13\x7f\xad\x78\x01\x3a\x8e\xf3\xb7\xbf\x7f\x16\x84\xe7\xb8\xbe\x47\xb3\x5c\x78\x1b\xe9\x86\x8c\x9f\x6b\x2d\xd9\xcc\xb1\x79\x8a\x4a\x05\x4c\x64\x21\x2d\x84\x1b\x2c\xf8\xb5\x48\x84\x77\x80\x52\xf4\x0e\x4e\x2d\xb2\x8c\x4c\xb2\x75\xab\x67\xea\x5f\x1f\x90\x68\xa8\x01\x74\x70\x7f\x3a\xd8\x34\x7e\x03\x5a\xa3\xdf\x78\xb2\x50\xf7\xb9\xf6\x38\xc9\xfb\x41\x28\x70\x8c\xd9\xc6\x6b\x6a\x23\xb6\xdb\x47\x56\xd0\x1e\x0d\x5b\x03\xd5\xee\x5c\xb7\x56\x1f\x7f\x93\xed\x61\xbd\x75\x3d\x97\xce\x3a\xc6\x3f\x24\x4e\xfa\x65\x60\xeb\x4d\x89\x93\xe4\x57\x49\x9c\xb4\x91\xf5\x38\x58\x2c\x9e\x2c\xed\x39\x64\x4f\x1a\x8c\xd6\xf7\x63\x36\x69\xa1\x5b\x83\x51\xfb\xc5\x40\x8a\xda\x86\xcf\xa9\xe8\xe7\x51\xf4\xd9\xa4\x22\xb2\xe1\x17\xb3\x56\xd4\x25\x7c\x9a\x62\x8d\xe6\x21\xe4\xc0\x89\x55\xe7\xa5\xbc\x91\x85\x98\x89\x77\x26\xe3\xc5\x26\xb1\xae\xab\x0b\xcb\x85\x15\xe5\x02\x36\x2b\xa7\x24\x47\x64\xbc\xa6\x2e\xc2\x10\x97\xa5\xef\xcc\x44\xe8\x0d\x1a\x8d\x4a\x25\x41\x9b\x69\x72\x0b\x5b\x56\x6d\x2e\x65\x8d\x68\x96\x51\xba\x29\x91\xbf\xe1\x4b\x14\x8f\x64\xaf\xe3\x70\x4b\xeb\x3a\x8a\xce\xd2\x2f\xa9\x23\x18\x6d\x8c\xe4\xa6\x3c\x44\xe6\x47\xc1\x89\xd5\x47\x55\x69\x98\x2a\xc5\x28\xf0\x3c\x77\x62\xad\x8d\xfa\xab\xca\xce\x75\xf9\x0c\xe4\xf7\xac\x14\x78\x38\x7f\xf1\x11\x92\x0e\xb7\xa1\x06\x29\xae\x0b\xb4\x62\xe0\x86\xda\xb6\x17\x47\x37\x3d\x80\xbd\x2d\xf5\x32\xfd\x78\x1f\x7a\x33\xac\xf8\x16\x6f\x46\x18\x0e\xb8\x82\xa4\x31\xde\xc0\xed\x5c\x5a\xe1\xaf\xc1\x5b\x95\x62\xc0\x9f\x19\x33\xf6\xce\x27\x0e\x55\xb2\x08\x0a\x2a\x2f\xfe\x16\x45\xda\xba\x5e\xe6\x1a\xad\x6e\x50\xfb\xca\xc1\x2d\xc4\xff\x83\xb8\x2c\x6f\xa8\xe2\x55\x50\x17\x56\x86\xcf\x5a\xe2\x0d\x4d\xcd\xd6\x85\x4d\xaf\x8e\xe8\xdb\xd5\x11\xc5\xa3\x3f\x02\x45\x5f\x8f\xfb\xec\xbf\x14\x1f\xa6\x38\xe0\x4a\x42\xd3\xe4\x42\x58\xf3\x46\x42\x40\x9e\x19\xd3\x7d\xb4\x5c\x44\x6c\x54\xbb\x87\xc7\x3b\x9e\x10\xc4\xd9\x7f\x38\xe7\xa5\xce\x3e\xe8\x4a\xd9\x4d\x01\xee\xa7\x6d\xed\x7b\xe0\xb6\xde\x70\xdc\x0b\xb9\x00\x7f\x0e\x9e\xde\x22\x12\xac\xf5\xad\xc3\xf1\x25\x32\xe0\x49\x5c\x68\xbd\xf1\x54\x70\x5b\x95\x82\x4d\x0b\x3e\x23\xa7\x74\xf2\x71\xdf\xfb\xe3\xff\x49\x19\x3e\x15\x17\x2b\x93\xd9\x62\x00\xac\xd5\x9a\xd7\x51\x70\x12\xa1\xee\x8f\xb3\x82\xd6\xcc\x60\xf3\x3a\xb9\x50\x5a\xf9\xdc\xc4\x58\xbf\xc9\x3d\x6e\x4c\x3d\xc5\xd9\xb2\xe0\x52\x51\x3f\x32\x1e\x94\x8e\xbd\x04\xfc\x7c\x75\xf4\xcd\xd5\x91\xfb\x07\x26\xae\xc8\x38\x26\x11\x83\x7c\xc6\xca\xc8\x5c\x94\x0e\x59\x43\x70\x23\x45\x62\xc6\x0b\xa6\xa5\x8c\xd9\x05\x86\x88\x7c\xc3\x16\x82\x2b\x4c\xd6\x50\x5f\x6d\x9a\x0d\x71\xcc\xfe\x54\x4d\x44\x21\xd0\xd4\x83\x29\x33\x08\x78\xb8\x0f\x0a\x5d\xdb\x6e\x7a\x20\xa1\x30\x20\x0a\x46\x8e\x5c\xd4\xe3\x62\xc5\x78\x36\x66\x57\x47\x53\xad\x4f\xdc\xe6\x28\x79\x0b\xfe\x30\xe1\xe5\xd5\xd1\x28\xfc\xf1\x37\xf7\x87\xb0\xd9\x38\xe9\x34\x6e\x76\x1a\xa7\x9d\xc6\x49\xa7\xbd\xc1\x13\xdd\xed\x69\x3e\x94\xa6\xb7\x77\xf0\xc6\x20\x1f\xe4\x4f\xb9\x3f\xd6\xe9\x7b\x50\x8b\x02\x6d\x6e\x52\x75\x56\xa9\x22\x49\xa6\x0e\x7e\x01\x31\xcf\x55\x51\xac\x58\x5e\xea\x25\xd5\x26\x0d\x34\x7a\xcc\x90\x88\xf3\xd5\x06\x1a\xde\xb1\xf6\x5e\x32\x5e\xe7\x33\x70\xd9\x21\xe1\x8f\x5c\x34\x1f\x0f\x0a\xd3\x4a\x88\xf5\xda\x5b\xde\x85\xa2\x85\x91\xb8\x6f\x1e\xeb\xed\xee\x78\x7b\x86\x74\x43\x4f\x6f\x46\x5b\xbb\x7b\x90\x50\xa7\x90\x46\x51\x78\xdc\x80\xd6\x40\x60\xf0\x66\x0e\x4d\x40\x9d\xce\xc0\xaf\x02\x78\x28\x08\x67\x5e\x72\xb0\x96\x53\x87\xe1\xbc\xe9\x54\x97\x13\x99\xe7\x42\x6d\x46\x8b\xcd\xa6\x9d\x28\x31\x34\x7c\x0a\xd8\x70\x6d\x31\xad\xf8\x30\x45\x84\xa1\x47\x3f\xde\xc2\x66\xdb\x22\xae\x5a\xaf\xc7\xc7\x5c\x5e\x12\xeb\xb9\x65\x13\x22\xe8\x86\x04\xdc\x85\xa8\x44\x1f\x71\x47\x6e\x00\xdd\x11\x77\xdb\xb2\x4b\x1d\xe1\xa0\x8d\x8d\x39\x76\xee\xec\xfc\x4d\xcf\xc6\xa8\x45\x43\x2c\x4c\xc4\xe0\x24\x8b\x58\x65\x80\xbf\xfe\x23\x75\x91\xaa\x86\x5c\x87\xbf\x2e\x37\x27\x25\x17\xda\xb0\x32\x6a\xb5\xed\xea\x7c\xb7\x07\xad\xf0\xfc\xec\xed\x86\xd5\x9d\x9f\xbd\xdd\x76\x65\xae\xcb\xc3\x56\xb5\xa1\x78\x44\x68\x93\xae\x0c\x11\x43\x08\xa6\x64\x49\x14\x6e\x3d\x55\x8c\xb8\x5b\xea\x47\xe2\xf7\xeb\x11\xa2\x1d\x0f\x33\xe0\xf4\x3e\x15\x67\x6c\x34\x44\xb9\x31\x11\xac\xac\x14\x03\x8f\x1f\xdf\x6f\xf8\x15\xf8\xa4\x1d\x9f\xb5\xb6\x3f\xca\x42\xa0\x4b\x59\x5f\x98\x6e\x6b\x07\xd6\x4c\x2e\x82\x38\x04\x63\x9b\x03\x0b\x03\x74\xc1\x2d\x96\x52\xaa\xb8\xb1\x50\xe8\x28\xb5\xb6\x6c\x2a\x0b\xe1\x7d\xda\x98\x77\x81\x89\xfc\x4f\x8d\xd7\x49\x94\xaf\xe9\x88\x4a\xab\xe3\xee\x51\x51\x4e\xb9\x38\xf7\x46\x81\x5c\xa8\x55\x2d\x31\x1f\x6d\x60\xca\x0b\x23\x1a\xb3\x83\x0d\x60\xc8\xd2\xdd\x45\x81\x23\x0e\x24\x9a\x99\x54\x36\xb8\xe5\x10\xd3\x83\x5a\x38\x66\xf5\x36\xb7\xd4\xce\x81\xf5\xde\x53\x7b\x97\x10\xaa\xde\xcd\x7f\x3a\x3e\x72\x99\xfa\x0e\x25\x9a\x25\x76\x39\x17\x46\x50\xbe\x17\x0a\x34\xa7\x98\x63\xea\x05\x36\xfc\xa0\x0d\x07\xa6\x70\x7f\x84\x0e\xf4\x93\x9b\x68\xdd\xe7\xd0\x68\x00\xb9\x0b\x6c\x28\x38\xfe\x26\x5d\xa9\xbc\x2b\xf4\x20\x51\xd8\x08\xdb\x92\x05\x4e\x2f\xa4\xb5\x98\x32\xd7\xa7\x9f\x4c\x86\x71\xaf\xd7\xf2\x6b\x01\x19\x05\x61\xcc\x5a\x72\xaf\x9a\x48\x9d\x74\xf3\xf2\xf4\x0c\xd6\xd8\x21\x4f\x6f\x8b\xb2\xe2\xf8\x1b\xc8\x6e\x54\x03\xf7\xc5\xef\x53\x9b\xfb\x1d\x32\xf4\xec\x38\xe3\x07\xee\xd0\x0d\xbd\x61\x83\x5e\xef\xdd\x63\xa7\xc6\x16\x5b\x6f\x0e\xd3\xe4\xef\x70\x4b\x17\xef\x60\x21\x9b\x36\xb4\xae\xa6\xef\xd9\xdb\x5a\xe3\x87\x94\xf5\x86\x50\x87\xbd\xf0\x88\x9b\xeb\xdf\x37\x4e\xe1\x66\xa3\x0e\xf8\x66\x4d\xf1\xbb\xa6\x67\xa4\x4c\x57\xcb\xa2\x9a\x49\xd5\xa5\x6b\x54\x9a\xb5\xea\x7b\x2f\xbd\xf5\x21\xe6\xcc\x32\x98\x78\x90\xaf\x80\x8f\x7a\xf6\xcd\xb3\xdd\xa3\xc7\x7f\x60\x83\x5d\xc2\xba\x71\x40\x97\xc1\xa9\xb3\xc7\x86\x64\x2c\x0e\xe1\x6d\x93\x90\xa5\xc5\x3c\x55\x86\x6c\xb1\xbd\xe6\xa5\x87\x67\x6d\x99\x39\xe1\x2d\x7d\xb3\x78\x9b\x43\x12\xb8\xcc\x64\x7e\xc8\xdd\xb2\x1b\xda\xba\xc3\xfc\x2d\x9d\x84\xa0\x17\xca\x5b\x3a\xfc\x8a\x80\xbc\xba\x3f\x90\x57\x07\x20\xdf\x39\x6f\xf3\x60\x18\xef\xe0\x0c\xba\x20\xbc\xbd\xf9\xd3\x81\xef\x3d\xdc\xc6\x46\x66\xac\xdf\x85\x86\x78\xc0\xcd\x69\x01\xeb\x0d\x6b\x92\x12\xca\xea\x3f\xc4\xdf\x6a\xaf\xa0\xcd\xd5\x26\xfa\xb0\x8c\xa5\x3e\xc9\x75\x66\x4e\x2c\x37\xd7\xe6\x24\xd3\x6a\x2a\x67\x55\x29\x8e\x97\x3a\x3f\x0e\x42\xda\x89\x21\x86\x0b\x7e\x12\x77\xf6\x64\x0b\x8e\x2b\xd3\xa5\x18\xdf\x04\x58\x6a\xf0\x55\xdb\x00\xe3\x46\x5e\xad\x13\x2e\x37\xf5\x7c\xfa\x49\xdf\x5a\xd8\xe2\x81\xe9\xdf\xd6\x7b\x1e\xf0\xec\x96\xf2\xc7\x1e\x93\xc2\x95\x13\x9e\xb9\xd7\x71\x3a\x9b\x95\x62\x06\x76\x9e\xde\xba\xd0\x8d\x76\x49\xa6\xc8\xb9\xbe\x85\xda\xd8\x1a\x22\x9b\xde\x60\xc9\x8b\xcf\x9a\xca\x6e\x70\xea\xe7\x50\x01\xd9\x01\x93\x26\xbd\xc0\x9b\xc5\x76\x3e\x1c\xb6\x0f\x94\xdf\xb4\x34\x67\x73\x0d\xb5\xf3\xa2\xb7\x68\xf8\x82\x8a\x57\xaf\x28\xf2\x2f\x6c\x2a\x55\x5e\xdf\x03\x28\x81\xe2\xbb\x83\x6c\xf6\xc0\x59\x00\xfd\x40\xcd\x5e\x1c\x15\xf2\x0d\x27\xd5\xbb\x92\xa1\x9e\x19\xb6\x14\x25\x94\xe7\x75\x6f\xba\x66\x22\xdd\x03\x24\x6f\x19\x61\x3c\x48\xe0\xf2\x40\x93\xde\x60\x17\xc0\x24\x6d\x28\x2f\x0c\x15\x43\x81\x64\xef\xa3\x50\xcd\x18\x40\x5d\xaa\x19\x3a\x6e\xbb\xc7\xf7\x19\x4b\xb6\xd4\xfc\xc4\xa6\xa2\x14\x2a\xf3\xc6\xb2\x4a\x49\x8b\x09\x06\xdd\xf0\xbf\x77\x02\xac\x1b\xa0\x4c\x8f\x9b\x7e\xdd\x44\xbe\x07\xb9\x7c\x77\xbc\x91\xcd\xaf\x84\xf2\xa3\x2d\x31\x5a\x8f\x14\x63\xb0\xb3\xb5\xf7\x33\xa9\x64\x91\x93\xae\xcc\x97\xca\x00\x6d\x5c\xb2\x27\x80\xbb\x96\x39\xea\x15\xe3\xb0\x3f\x56\xd8\x08\xf1\x8f\x3e\x76\xdd\x81\x73\x2e\x4b\x91\x59\x96\xcd\x11\xcb\x5b\x4d\x5d\x3c\x48\x1a\xab\x17\xcb\xa8\xf5\x48\x82\x61\xb7\x20\xbf\x5d\x08\xa6\x81\x41\x0f\xee\xf4\x87\xe0\xa7\x5f\xb5\x03\xfa\x7a\xf0\xd3\x9e\xa3\x94\x10\xab\xf5\xd9\x10\x0a\x11\x08\x23\x06\x5c\xd7\x10\x6f\x1b\xe2\xd9\x07\xa7\xe5\x11\x44\x9c\xbb\x9d\x14\x3d\xdc\x03\x1e\x66\x42\xaf\x60\xf9\x37\x74\x96\xee\xaa\x23\xdc\xba\xe7\xad\x2b\x08\xb7\xd0\x49\x22\x47\x43\xc8\xa5\xa7\x67\x81\xea\xb9\x17\x9a\x7c\x1f\x81\x29\xce\x3d\x11\x5f\xe7\x46\x5a\x4c\xa9\x8b\xf6\x54\xea\x55\xef\xe4\x79\xc8\x59\xa1\x27\x3c\xa9\x47\x4b\x25\x75\x72\xcc\xbc\x50\x4b\xca\x70\x23\x39\xbb\xc0\x7a\x03\xbd\x54\x54\x17\xe2\xb3\x98\x1e\x42\xa7\x0e\xb8\xfe\x80\xeb\x1f\x1b\xd7\xd3\xdb\xeb\xc1\xf6\xd8\x02\x50\x03\x1a\xf9\xb7\xc3\x0f\x21\x81\x47\x32\x10\xdd\x98\x83\x92\xe2\xc6\x9b\x87\x4f\x09\xbf\x3a\x5e\xb3\x82\xbc\x05\xb6\x2a\xa1\x04\x97\x28\xcb\xad\x6a\x41\x07\xf4\xf9\x39\xc5\x2c\xa9\x41\x10\x63\xfd\xfa\x6e\x84\x9a\x10\x99\x4b\x30\x29\xbd\x73\x5f\xe5\x10\x44\x3a\xb7\x7d\xaa\xa3\xd7\xee\xcb\xb0\x3b\x62\x47\x0b\x7b\x5a\x94\xce\xd3\xa6\x7d\x10\xbc\xde\x58\xde\xf6\xe6\x6d\x69\x44\xd7\x5b\x9a\x43\x2c\xef\xd3\x26\x48\x9b\x62\x79\xcf\xd6\x63\x79\xbb\x6f\x79\x2f\x8f\xb1\xe5\x09\x74\xe8\xf9\x0e\xc4\xf5\x57\x4b\x5c\xf7\x15\x76\xfb\x20\x54\xdc\x13\x8a\x7b\x4f\x74\x3c\x14\x0f\x0f\x40\xc0\x07\xcc\xfb\xab\xc6\xbc\x8f\x85\x72\x0f\xb8\xf6\x80\x6b\xbf\x2a\xae\xdd\x11\x92\x4d\xf4\x57\xdd\x89\x0d\x7c\x13\x12\x48\x52\x35\x4b\xc3\x1c\x10\x8a\x26\x95\x95\x57\xf5\x84\x4a\xa0\x41\xdf\xb3\x96\x3a\xf3\x76\xae\x83\x79\x2a\x91\x65\x18\x04\x67\xc9\x6c\x1e\x05\xba\xb6\x66\x7d\xea\x9d\x1b\x51\x4e\x06\x62\xf4\x8d\xde\x99\xa7\xe7\x67\x75\xa7\xcc\x34\xf5\xa4\xff\x58\x2b\x10\x4d\x12\x9a\xc7\x80\x68\x7a\x5e\xf8\x02\xe5\xa7\xe7\x67\xa9\xab\x66\x92\xfb\x80\xab\x15\xe3\xb5\x4c\x94\x22\x67\x7c\xe6\x46\xc4\x9a\xf8\x3e\xb5\xb1\xaa\x16\xa2\x84\xc2\x96\x61\x12\xc8\x59\xad\x56\x71\xf4\x68\xab\xeb\x4c\x53\xb8\x23\x27\x70\xa5\xd5\x67\x5a\xc6\x4f\x9f\xdf\xf7\x1d\xe5\xc7\x7a\x4b\xc2\x88\x54\x8b\x9d\x97\x56\xf2\x82\x55\xa5\xf7\x10\xe1\xac\x32\xa2\xf4\xb4\x6f\xce\x6f\x04\xe3\x19\x04\xea\x39\xdc\xc5\xbe\xa9\x05\x9c\x20\xd0\x81\xb2\x80\xe3\xf9\x4f\xab\xa2\x18\xb1\xa9\x54\x90\xb4\x57\x2c\x43\x9c\x0c\xb7\x73\x76\x01\xd5\xa3\x31\x5c\x81\xb0\x2d\xac\xc8\x8d\xe8\x80\x36\x40\x1e\x28\x0a\x6a\xee\xe5\x30\x85\x83\xc2\x0c\x7c\x5a\xa6\x75\x0b\x9e\x49\xed\x7e\x80\x91\x79\x9b\x81\x8f\x8c\x57\x19\x57\x21\x28\x0f\x1c\x0c\xac\x86\x1b\x8c\xd7\xfa\x1c\xcb\x9a\x1a\x76\x75\xb4\xd4\xb9\xb9\x3a\x72\xaf\xe3\xea\xc8\x88\xac\x14\xd6\x5c\x1d\xbd\xc0\x1a\xe2\xf5\x7d\x50\xc4\x7d\xd2\xd7\xa1\xe3\xab\xa3\x17\x23\x16\xd4\xb0\x13\x6d\xe7\x7b\x0c\x0c\xa0\xd5\x7c\xe4\xfd\xfe\xbf\x9f\xd3\x76\x4d\xcb\x63\xdd\x1f\x18\xae\x24\x16\x21\x6e\x62\x03\x16\x6b\xe7\x3b\x88\xc2\xa0\x43\x68\x9d\x64\x4c\x8d\xa9\x1b\xf6\xbf\xf5\x21\xdb\x6e\x30\x34\xf1\xda\x91\x35\x5c\xdb\xa2\xef\x77\x5a\x14\xb5\xda\xdd\xf0\xa7\x47\x37\x7b\xdb\x19\x62\xd5\xee\x5d\xfd\xec\xbe\xd7\x77\x84\x3f\xe1\x73\x0e\x00\xfe\xfe\x3d\x32\x3b\xb4\x62\xc7\x1c\xa1\xcb\xc2\xa9\x45\x2e\x42\x7c\x16\x6e\x25\x94\xc5\xdc\x7b\x56\xe5\x21\x95\x8a\x3b\x98\x31\x83\xc1\x5b\x4e\x02\x18\x8c\xc7\x75\xea\x4e\x95\x7f\xdd\x2e\xad\xc1\xab\x20\xc5\x2e\x3b\x77\x29\xd8\x89\xf3\xc0\x41\xd2\x39\x18\x3d\x0e\xb2\xc2\x53\x34\x70\xff\xa6\x2c\xdb\x3b\x32\x69\x0f\xb1\x65\x77\x1a\xb1\x4b\xdd\x2d\xd2\x74\x98\xb0\x53\xdb\x14\xb8\x86\x46\x41\x46\x97\x83\x4d\x58\x76\xa3\x85\x1b\xa9\x66\x1c\x3c\x6d\x36\x59\xad\x09\x51\xd2\x32\x71\x27\x0d\xd4\xc5\x70\xcc\x44\xa2\xb1\x06\xf1\x81\xcd\xe4\x8d\x50\xe9\x62\x1d\xaf\x0b\x8c\x37\x26\xc9\xc2\xc5\xf2\x84\x3d\x3e\xd8\xd8\x0f\xe4\xe6\x40\x6e\x9e\x20\xb9\xd9\xca\xc6\xde\x85\xbb\x42\x75\x98\xfb\xa0\xaf\x83\x05\xfe\xd7\x68\x81\xdf\xad\xe9\x7d\xa8\xcd\x7d\x80\xb1\xfd\x60\x65\xff\xe5\x90\xa4\x7b\xd8\x7a\x1e\xcb\xbc\x7e\xb0\xab\xff\x96\x09\xea\x13\xb0\xf5\xec\xde\xa0\xbe\xd1\x92\xde\x67\x42\x3f\xd8\xce\x7f\xbd\xf8\x74\xef\x88\xf4\x80\x41\x0f\x18\xf4\xeb\x60\xd0\x1d\xa2\xce\x54\x8c\xea\x14\xa2\xda\xea\x43\x82\xa6\x04\x40\x2b\xa0\x18\x90\x19\x26\xc2\x01\x70\x65\x42\x04\x65\x1b\x5e\xf5\x96\xe9\xa3\xda\x9b\x09\x26\x57\xbe\x18\x12\xc3\x1f\x06\xd9\x6c\xdd\xf6\xc6\x6d\xb4\x1d\xfb\xa2\x81\xe1\x71\xe1\x9a\xa3\xfd\x61\xc7\xca\x07\x37\x17\x04\x90\x27\x46\xb0\x7b\xcf\x09\x87\xd3\x63\x84\xe6\x0b\xd1\x34\xe5\xdf\x7b\xce\x7f\x60\x9b\x8d\x42\x5e\x78\xeb\x0e\xb8\x47\xa4\x15\x80\x88\x27\x02\x79\x4d\xf0\x74\xe2\x37\xd8\xc4\x65\xee\x10\x05\xe6\x93\x23\xa0\x22\xd5\x65\xcd\x5c\x08\x89\xcd\x12\x1b\xb3\x13\x6b\x19\xf7\xa1\x94\xa7\xe7\x67\x11\x5f\xd2\x7c\x23\x94\xf0\x11\xe1\x4e\xc9\xb4\xec\xa5\x5e\x6f\x4e\x86\x25\x38\xb2\x88\xc0\x02\x42\x7f\x9f\x22\x70\xdf\xa0\x8b\xd2\x3a\xb9\x63\xd0\xa2\xc8\x55\x22\xb1\x98\x91\xfc\x3f\xf6\xd9\xd5\xe1\x51\x5e\x1d\x61\xb6\x58\xa0\x12\x32\x13\xa7\x19\xd4\x53\xf4\x8d\x4d\xb3\x75\x27\x1a\xa2\x61\x7e\xf2\x47\x83\x2b\x0b\xc3\xec\xf2\xbd\xe8\xa9\xbf\xb6\x26\xb4\x8e\xd9\xcf\x98\xe5\x04\xb9\xa7\x58\x14\x32\x9e\x0b\x2f\x05\xbb\x3a\x72\xcb\xc4\x94\xb8\xb0\x4e\xf7\x4f\xb7\xe8\xab\xa3\xfa\x31\x5c\x1d\x05\x3d\x4e\xa2\xa7\x09\x6a\xf0\x84\x11\x72\x4d\xdc\xda\x3d\xd3\xd4\xe8\x42\x3c\x58\x29\x20\x5d\x68\x8b\x72\xe7\xe1\x2f\x9a\x2e\xbc\xeb\x64\xb6\x99\x0a\x34\x58\x1b\xe6\x23\x75\xd8\x1a\x94\x79\xee\xd3\x9f\x1b\xad\xe7\x9a\x10\x9d\x7b\x4e\x49\x18\x5b\x74\xd0\xc0\x1b\x41\xe7\x8e\xda\x9d\xc0\xfd\x85\xaa\xb6\xee\xd8\xd1\xc9\x61\x37\x27\x3c\x00\x7f\x51\x39\x85\x43\xca\x85\x43\xca\x05\xb6\x9d\x3b\x04\x42\xce\x21\xef\x42\x17\xfd\x3a\xe4\x5d\x18\x84\x6a\x1a\x18\xfa\xa0\x49\x38\x18\x0b\x0f\x92\xf9\x93\xf4\x4d\x79\x9c\xe4\x0b\xbe\x4a\xdf\x13\xf2\x53\xd9\x9c\x81\x61\x70\x31\xc2\x2e\xda\x79\xc8\xc5\x70\x40\xfd\x07\xd4\x7f\x40\xfd\x87\x5c\x0c\x5b\x12\x8a\x5f\x9f\x3b\x88\xcf\xf0\xf9\x54\x7c\x42\x06\x67\x65\xd8\x15\x11\x3c\xe4\x67\xf8\xad\x12\xa9\x27\x9f\x9f\xa1\x93\x6f\x6b\x3c\xd3\x03\xd5\xfd\xd5\x53\xdd\x27\x60\x0a\xdd\x2a\x49\xc3\x83\xb1\xf3\x21\x5d\xc3\x01\x11\x0f\x43\xc4\x8f\x8a\x81\x0f\xa8\xf7\x80\x7a\xbf\x2a\xea\xdd\x39\xce\x3d\x64\x6f\x60\xec\x90\xbd\xe1\x90\xbd\xe1\x90\xbd\x61\x3f\x30\x71\xc8\xde\xb0\x97\xec\x0d\xcf\xbe\x79\xd6\x99\xb5\x21\x84\x8b\x7a\x84\xc2\x02\x76\x1b\xb3\x67\xdf\x9c\x4c\xb5\xae\x75\x86\xb6\xd5\x24\xc0\xcd\x33\x68\xe0\xc0\x79\xf0\xb0\x87\x3c\x11\x5f\x2b\x4f\x44\x54\x4c\x1e\x92\x45\x1c\xe4\xac\x83\x55\xe6\xb7\x29\xa4\xfc\xf2\x93\x45\x3c\x41\x4b\xfc\xce\x4d\xf0\x87\xdc\x11\x87\xdc\x11\x07\xea\x73\xa0\x3e\xbf\x21\xea\xf3\xdb\xcd\x1d\x71\xf0\x18\x78\x2a\x59\x24\x1e\x4c\xac\x0f\xf9\x24\x7e\x3b\x64\xea\xe9\xe6\x93\x58\xe7\x21\x3b\x74\x26\x07\x4a\xfb\xab\xa5\xb4\x4f\xc0\x18\xb5\x4f\x07\x80\x43\x7a\x89\x03\x7a\x7d\xf4\xf4\x12\x89\x06\xf5\x80\x50\x0f\x08\xf5\xa9\xe5\x98\xb8\x3f\x26\x3d\x64\x9b\x38\x64\x9b\x78\x78\xb4\xf6\x21\xe5\xc4\x21\xe5\xc4\x21\xe5\xc4\x21\xe5\xc4\x2f\x2d\xe5\x84\x63\x99\xf3\xaa\x90\x6a\x16\xad\x4b\xa5\xd4\xa5\xb4\xab\x37\x05\x37\xa6\xdb\xdd\x2d\x6d\x15\xb8\xfb\x05\x5f\x82\x95\x9c\x3c\x79\x96\xd4\x88\x65\xd0\x0a\xd0\x31\x21\xbb\xf0\xc9\xb1\xe7\x33\x51\xe2\xf6\xc7\xec\xd2\xc9\x07\x70\x12\x64\x55\xe7\x6a\xe5\x7e\x90\xb9\x6f\xd9\xeb\xc8\xe6\x7a\x1e\xa4\x97\xaf\x2b\xbd\xd4\x8f\xb1\xeb\x74\x93\x3f\xc9\x91\x89\x97\x13\x69\x4b\x5e\xae\xbc\x84\x00\x1c\x56\x65\x2a\x5e\x14\x2b\xb6\x2c\xf5\x8d\xcc\x85\x61\xb3\x4a\xe6\xa2\x80\xeb\xd0\x8a\xdd\x62\x5e\x05\x69\x9a\xc0\x46\x07\x4d\x29\x44\x06\xe3\x06\xd4\x8d\x13\x41\xe8\x59\x7e\xad\x5d\xf0\xf6\x31\x6e\x3d\x40\x86\x61\x49\xf5\x47\x12\x57\x94\x69\x65\x64\x2e\x4a\xf4\x14\x71\xb7\x9d\xd3\x40\x61\x13\x8e\xd0\x2c\x75\x4e\x1e\x26\xb9\x06\xac\x80\x4e\x7d\x6a\xd5\xd8\xeb\x98\x7d\x52\xc5\x0a\x5c\x1e\xeb\x33\xd2\x13\x5a\xf0\xf2\x1a\xa7\xfa\x52\x5b\xf6\x97\x31\xfb\xa3\xbe\x15\x37\xa2\x1c\x31\x39\x65\x0b\x07\x36\x76\x0e\x61\x87\x8d\x91\x84\xf1\xc6\xc8\x5b\x69\xe7\x6e\xc5\xb2\x6c\x0e\x46\x3e\x7f\x46\x58\x00\xe1\xd2\x93\x08\xb3\xe0\x45\xe1\x40\x19\x9f\xb5\x9e\x22\x46\x24\x23\x84\xdf\x78\x73\xba\x5a\xfe\x97\x8e\x43\x6a\xb9\xd4\x89\xd6\x85\xe0\xea\x60\x56\xfb\x25\xc8\xa6\x3b\x5e\x7f\x58\xcc\x7e\xad\x75\x48\x63\xba\x37\x1c\x29\x98\x27\x0c\xcd\xd7\x0a\x2c\x3b\x89\x28\x3c\xb3\x15\x2f\x62\x13\x92\x2a\xc1\x96\x95\x09\x79\x23\x3c\x86\x13\x64\xdc\xaf\xbb\x54\x3b\xde\x1f\x9e\x3a\x9a\xf6\x24\x20\x0d\x40\x47\x2d\x8f\x83\x08\x68\xfc\x80\xc2\x2c\x7d\xfa\xee\xdb\x5d\x8b\xf7\x09\x73\xd1\x25\xd6\xd7\x99\x8d\x07\xca\xf6\x9b\x98\x99\x5e\xa5\xe9\x5a\xcb\x36\xed\x69\xfd\x26\xfb\x25\xa2\x83\x26\xf5\x09\xf0\x22\x9b\x34\xa9\xd2\x6b\x52\x61\x9b\xa4\x4b\x6d\xd0\xa2\x7d\x68\x55\x37\xf2\xdd\x07\x25\xeb\x93\x25\x64\x00\x26\xbe\xc3\x53\xa6\x61\xfb\x52\xdb\x6e\x8b\xd7\x77\xa1\xb7\x35\x56\x97\x7c\x26\x20\xbd\x2b\xfe\xb3\x5f\x3e\x4d\x1b\x25\x91\x57\x18\xd1\x52\xf2\x85\xb0\x0e\xb2\xc1\x7d\x9f\x28\xa8\x63\x4c\xb1\x13\xfc\x8c\xfe\x78\xe7\x6e\xb1\xc6\x0a\x65\x7f\xd6\x45\xb5\x10\x81\xa7\xce\x57\x8a\x2f\x64\x16\x45\x13\xc4\xc3\xe3\x2b\x75\xa5\xd2\xb9\x85\x0f\x92\x49\x74\x02\xf9\x0f\x6b\x81\x51\x7e\x66\x5c\x0a\xcf\x32\x5d\x82\xaa\xcf\x6a\x26\x6c\x06\x6f\x5a\x2a\x16\x99\x92\xf1\x47\xbe\xe8\xf5\xe7\x8b\x6b\x2a\x87\xd0\xa0\xa2\xd0\xb7\xb8\xc3\x77\x77\x4b\xae\x36\x51\xa3\x96\xe6\x8e\x9a\xdc\xa6\xf2\xcf\xda\xa6\x5c\x27\x76\x03\xbd\x98\x70\xdd\x5a\xd4\xaf\x1d\xfc\x3b\x45\xa1\x5c\xea\xa5\x2e\xf4\x4c\x6e\x0a\x16\x81\x10\x05\x3c\x63\x9d\x0b\x66\x43\x37\xb7\xbc\x52\xd0\x22\x36\xde\x25\x7b\xc7\xb3\xb9\x5f\xf1\xb2\xa8\x66\x32\x52\x5f\x87\xe3\xf4\xad\x62\xa6\x5a\x2e\x75\x69\x21\x49\x25\xcc\xb2\xf2\xc2\x60\xc6\xf1\x55\xc7\x40\x1b\x5a\xfe\xca\x67\x78\xbc\x14\xe5\xc2\x63\x13\x0c\xbf\x71\x8b\x03\x0d\x50\x1c\xad\x8c\x11\x17\xc4\x39\xd6\x63\xab\xe6\x5a\xe9\x12\xd5\x80\x86\xf0\x35\x86\xf1\x28\x88\xb7\x72\x87\x80\x37\x75\x11\x5e\x2d\x9b\x0a\x6e\xab\x52\xec\xc5\x01\x2a\xd3\x25\xbc\xd2\xb6\xcd\x76\x51\xb5\x03\x0b\x74\x70\x29\xfd\x55\xb3\x0c\xbf\x16\xd9\x77\xa1\x2b\x65\x3f\xc1\xfe\xfa\x50\xf0\xdb\x76\x84\xda\x42\x4d\xfd\x63\x6d\x90\x8a\x52\x50\x6a\xdf\x3c\x28\x9c\x8c\x60\xe9\xec\x23\x26\xc6\xb3\x31\xfb\xb7\xab\xa3\x52\xa3\x95\xc3\xe8\xa9\xbd\x3a\xfa\xf7\x31\xfb\xa8\x2d\x6a\x8c\xa1\xff\x31\x76\xf3\x84\xf6\xfc\x67\xd2\x2d\x19\xb9\x58\x16\x2b\x36\xe5\xb2\x60\x72\x0a\x2a\x2f\x20\xb2\xd0\x73\x7f\xa1\x7a\x91\xf9\xe8\x39\xbf\xf3\xc8\xa1\x44\xbb\x57\x83\x6d\x41\x25\x7a\x20\xf2\x88\xf4\x3d\x3a\xc3\xb4\xc8\x37\x7d\x87\xdc\xb2\x45\x84\xd2\xf8\x3b\xcf\x73\x89\xb1\xa5\xe7\x2d\x4c\xc3\xf0\x2d\x27\xac\x48\xcf\x9e\x93\xbd\x48\x95\x3b\xf2\x29\xea\x96\xe3\xc6\x8e\x07\xab\x74\x4b\x91\x15\x5c\x2e\x30\x6a\xe6\x71\xa1\x16\xc8\x50\x32\x7b\xdd\xd4\xf8\x56\x14\xc2\xb6\x51\xe1\xf6\x7d\xe0\x75\x92\x57\xd9\x07\x9d\xf7\x29\xa1\x7e\x6e\xb6\x4d\xce\x74\xae\x6f\xd7\xf6\xf4\xc6\xad\x31\x55\x51\xa7\x07\xe0\x88\xdc\x44\x57\x2a\x1f\x33\xf6\xe7\xb9\x50\xac\x52\x90\xd3\xb8\x36\xc9\xd9\x62\x21\x72\x09\xf9\xc4\x0d\xaa\xdc\xf7\xcf\xad\xb4\xd9\xb9\x76\x20\xde\x90\xa8\xd1\x25\xdb\xd4\xe4\x8f\x76\xb1\xe6\x01\x12\x4d\xaf\x92\xaa\xd9\xb0\x4d\x47\x55\x03\xca\x83\x8a\xea\xc9\xf3\x67\x83\x9d\xfd\x52\x15\x55\x5d\xc4\xdc\x8b\x86\xaa\x43\xe0\x3e\x28\xa6\x9e\x2c\x97\x79\x50\x4c\x6d\x81\xb9\x1f\x58\xb0\x2a\x79\x1e\x48\xb0\x4e\xad\xe5\xd9\x7c\x21\x54\x37\xf6\x6e\x36\x64\x19\x5f\x3a\xca\x86\x4f\xdb\xa1\x2e\x05\xb6\x53\x0e\x2d\x98\x2e\x59\x2e\xe0\x5f\xf5\x84\x12\xa4\x90\xb0\xfa\x24\x00\x7c\xfc\xa8\x74\x2e\x40\x09\xb5\x36\x99\xf7\xf0\x5a\x57\x47\xf5\x91\x08\x37\xf2\x81\x42\x1c\x24\xf8\xdf\x3a\x6e\xa5\x93\xfa\x85\xcb\xef\xf0\x9a\x7b\x76\x9b\x6a\x2e\xbd\xc8\x95\x0b\x23\xc1\x53\x05\x50\xc9\x09\xa1\x24\x42\x42\x13\x31\xe7\x37\x52\x97\x63\x76\xae\x97\x55\x01\xb2\x0f\x15\x26\xf9\x53\xc0\xe2\xcc\xac\x8c\x15\x8b\x6d\xc2\x43\x7b\xd0\xeb\x45\xc0\x48\xc9\xbe\x2c\xb7\x55\x6f\x9c\x28\x34\xf0\x5b\x5a\xc3\x8d\x04\xb8\x2d\xbb\x00\x1f\xdc\x15\xcb\xf4\x62\x59\x88\xf0\x94\xd6\x30\xb4\x43\x89\x70\x6a\x23\x26\xc7\x62\x8c\x5d\xef\x10\xd3\x1c\x63\xeb\xed\x0a\xb4\xf4\x1d\x00\x6e\xf6\x91\x69\xe7\x1a\x95\xdb\x0b\xed\xec\x95\x7e\xda\x1a\xb7\x49\x40\x5d\xa4\xef\x20\x0a\x3d\x71\x42\x77\x2f\x51\xa8\x79\xdb\xfb\x96\x86\xd6\x1e\xc2\x41\x22\x7a\xb2\x54\xfb\x20\x11\x6d\x89\xd5\xf7\x27\x15\x5d\x00\x00\x0f\xc6\xed\xd8\xbc\x96\x41\x2e\x08\x3e\x89\xa6\x7b\xe2\x69\xb1\x03\xd4\xcf\x72\x36\xb7\x4c\xe9\x5b\xd4\x35\x06\x1d\x67\xc3\x74\xef\x3b\x40\x72\x1e\x4f\xa4\xfd\xaf\xe5\x88\x49\xc5\xa6\x95\x93\xcb\xd8\xad\x80\x07\x85\x96\x6b\x5e\x18\xcd\xa4\x2a\xa4\x8a\x9a\x75\xa9\xc0\x57\x6f\xcc\xde\xdd\xf1\xcc\x92\x0f\xee\x42\x2c\x26\xa2\xf4\xb3\x19\x11\x6b\xf1\xb4\x52\x94\x65\x43\x15\xfb\x71\x78\x20\x44\xec\x1a\x85\x42\xda\xc8\xc3\xa2\x02\x36\x70\x5f\x83\x2f\x71\x29\x32\x8f\xae\x4d\x93\xb7\xe4\xdd\x6c\x58\x5f\xe0\x1c\x5d\x53\x88\x35\x42\xc4\x18\x43\x8f\x74\x8e\x27\x38\x80\x94\xfb\xa1\x7a\x08\x39\x35\x69\x58\x24\x52\xcf\x0d\x3a\xf8\xbc\x94\x37\xde\x0a\xf3\xe1\xa7\x8b\x4b\x36\xe7\x2a\x2f\x84\xa7\xef\xc4\x5e\xa6\x9e\x9f\x30\x08\x66\x50\x41\x76\xf3\x0f\xc2\x9e\x83\x93\x81\x5b\xff\xf3\x17\xc3\xc3\x59\xfc\x96\xfb\x7d\x52\xd1\x15\xc2\xe7\x03\xa5\x65\xaf\x3f\xa3\xf6\xc4\x28\xed\x33\x9b\xfa\x9b\x6e\x41\xc4\x6b\xaf\x38\x99\xbb\xeb\x1d\xef\x88\x4b\xc6\xb5\x3d\x10\xda\xeb\x72\xc5\x46\x78\x47\x29\xc3\x43\x7c\x90\x39\x1e\x04\xea\xf9\x60\x50\x7e\x57\x96\xba\x0f\x9a\x2f\x81\x39\x34\x16\xe3\x86\x98\x50\x10\x00\x06\x61\x08\x79\x05\x3c\x88\x97\x6b\x12\x69\x06\xea\xa9\xd6\x6c\x39\x90\xfa\x07\x30\x2c\xa2\xb7\x61\xa2\xd2\xde\x05\x24\xdc\x7d\x03\x42\xc3\x19\xf6\x30\x95\xb5\xa7\x4d\xb0\x29\x21\x12\x32\x13\xc6\x4c\xab\xa2\x58\x25\x44\xe6\xb1\x0f\x62\x93\x67\x54\x00\xa9\x0f\x9b\xf9\xa2\x9f\x96\x5a\x25\xfb\xa2\x25\x35\x53\x36\x2f\x83\x0c\x0c\x56\x4c\xae\x56\xb5\xb8\xe7\x14\x65\xb5\xed\x0b\xdf\x35\x9c\xcd\x44\xb0\x25\x37\x06\x12\xc4\x5a\xed\x18\x4e\xe3\xc0\x5e\x59\xf6\x67\x2e\xed\x8f\xba\x3c\x0d\x72\xf4\x07\x30\xd2\x67\xbc\x28\xcc\xd7\x3b\xe3\x3d\x19\xc0\x51\x47\xf0\xf0\xd7\xd9\xa2\x6b\x78\xe8\xeb\x7c\x34\xf5\x45\xed\x75\x6e\x85\x8d\xeb\xe7\xd6\x8e\x82\xa1\x4d\x54\xa7\xfb\xd0\xc8\x56\x14\xe7\x9f\x78\xd8\x73\x3f\x7b\xb6\x10\xc6\xf0\x59\x2f\x91\xb3\xe1\x76\x64\xe1\x0f\xb6\x73\xfe\x08\xf2\x6f\x1b\x67\x4f\xd7\x48\xe2\xe0\x82\xaf\x26\x82\x15\x7a\x36\x13\xf9\x88\x39\xd6\x33\x10\xcb\x34\xab\xa5\x11\xca\x48\x2b\x6f\x6a\xf9\x24\x07\x13\x70\x2b\xfb\xd9\x06\xb9\x10\xc9\x6e\x6e\xb9\x49\x77\xb4\x9b\xdc\x12\x6e\x8e\xed\xe0\x82\x22\xee\x0f\x5e\xc0\x07\x2f\xe0\x83\x17\xf0\xc1\x0b\xf8\xa0\x5a\x1d\x82\xe9\x0f\xda\xc8\xaf\xaf\x8d\x3c\x78\x01\x1f\xbc\x80\x89\x2e\x1f\xbc\x80\x3b\xf6\x7c\xf0\x02\x3e\x78\x01\xff\x5a\xbc\x80\xef\x11\xdc\xb8\x2e\xdb\x1c\xfc\x81\x7f\x63\x9c\xda\x93\xf7\x07\x6e\x91\xbf\x3b\x70\xfe\x81\xe9\xfc\xfa\x4c\xe7\xc1\x04\xbe\x1b\xa7\xe0\x7b\x23\xf3\x83\x7b\xf0\x81\x60\x1c\x44\xfb\x5f\x39\x96\x3d\xb8\x07\x7f\x25\xf7\xe0\x76\x1c\xfb\x5b\xf3\x11\xee\x38\x85\xa7\xec\x28\xbc\x33\x7a\x7a\x70\x19\xfe\x2d\x13\xbf\x5f\x82\xcb\x70\x07\x1f\x78\x10\x9a\x9e\x2c\x39\x3f\x08\x4d\xbb\xf3\x1b\xde\x19\xa2\x3f\x78\x10\xff\x12\x3d\x88\x7b\x18\xb4\x83\x1b\xf1\xc1\x8d\x98\x3d\x2d\x37\xe2\x5e\xcc\xb3\x0b\xb8\x3f\x38\x14\x3f\x7d\x87\xe2\xf4\xea\x0e\x5e\xc5\x07\xaf\xe2\x83\x57\xf1\x93\xf3\x2a\xee\x7c\xa2\xdb\x23\xe7\x83\x7f\xf1\xc1\xbf\x78\x29\x1d\x5c\x82\x07\xab\x39\x76\xdd\x41\x2c\x8e\x83\xd5\x1a\x04\xf8\x79\x53\x19\xab\x17\x9f\x49\xc6\x7e\xe3\xae\x5d\xbd\x0d\xeb\xeb\x04\xa9\xfe\x6e\x49\x2d\x11\x50\x52\x55\x0b\x05\x9e\x3e\xb8\x24\x66\x64\x0e\xc5\x73\x40\xd0\xef\x23\xf6\x50\x4f\x29\xdc\x83\xbb\x25\xff\xc7\xff\xbc\xf8\xf4\xf1\x9c\xdb\xf9\x00\x36\x20\x34\xed\xbe\x43\xdf\x84\x74\x12\xd2\x21\x02\xe6\x7e\x64\x4b\x6e\xe7\xf4\xf2\x11\xe5\x97\x25\x5f\x39\xe0\xda\x0e\x86\xee\x57\x4e\x86\xcd\xab\x05\x14\x4b\xe7\x39\xf8\x94\xa4\xdf\x43\xe5\x04\x38\xdd\xc1\x0b\x09\xd5\x12\xba\xd6\x80\x0d\xa8\x9a\x8d\x5e\x22\x8e\x67\x9f\x96\x42\x9d\x9e\x9f\xa1\x03\x53\x04\x5f\x72\xdf\x8a\xcb\x80\xd2\x47\xcf\xdc\xb5\x3d\x63\xc9\x48\x50\xeb\x2d\x4f\xca\x26\x2d\x78\xb9\xa2\xe2\x70\x53\xe9\xa4\x44\x84\x11\x27\xb7\x19\x03\xea\x4d\x45\x9a\x1a\xe3\x9b\xad\xdc\x83\xa7\x76\xc4\x4b\x06\xcd\x90\x9b\x70\xcc\x2e\x84\x48\x75\x1b\xf3\x6a\x32\xce\xf4\xe2\xe4\xd3\xe9\xd9\x09\xad\xff\xb8\xa6\xfd\x3f\x99\x14\x7a\x72\xb2\xe0\xc6\x8a\xf2\x84\xc4\x7d\x73\xf2\xed\xf8\xe5\x78\x91\xff\xa3\xe3\x17\x8e\x41\x43\x03\x9b\x5c\xe8\x01\x6e\x3b\xa3\x14\x6c\xbb\x8f\x58\x51\x75\xbf\xb5\xfb\x85\x0f\xde\x23\x6e\xcb\x8b\xf5\x55\x1d\x7a\xe6\x8d\xe5\xaa\xe0\x72\x7d\xd1\x2a\xbc\x4e\x42\xc9\xa5\x28\x38\x62\xca\xc5\x52\x97\x96\xab\x4c\x34\x40\x0d\xe8\x24\x2f\xf1\x3a\xb5\x9d\x8b\xd2\x8c\xd9\x7b\x7d\x2b\x4a\xa6\x2a\x27\xf2\x93\xfb\x58\x2c\x0f\x34\x97\x33\x27\x37\x86\x8a\x37\x0c\xd1\x05\xf9\x4b\x2d\x38\xd0\x63\xbd\x90\xd6\x02\x3b\xc4\x0a\xb9\x90\xee\x9f\x58\xba\xcc\x64\x42\xf1\x52\xea\xd4\xa5\x6b\x26\x6f\x84\x72\xe7\xd7\x18\x79\xfd\xb0\x86\x96\x0b\xa9\x21\x99\xee\x23\x04\xf8\xc7\xe3\x1b\xfc\x24\xbe\x3a\x58\xee\x99\x62\xa8\x9b\x86\x61\x60\x13\xad\xf0\x1d\x92\x60\x96\xb9\xbe\x75\xe0\xe4\x95\xfc\xb9\x9c\x42\xa1\x3a\xeb\x6d\x07\x24\x30\xbe\xf9\xdc\x6b\xc7\xb7\x25\xb7\x62\xb6\x1a\x40\x13\x42\xd3\xee\xab\xfe\xe2\xdb\x7c\x49\xa8\x19\x3e\xcc\xb0\x01\xdf\x64\xcc\x4e\x31\xac\x83\x2c\x0a\xee\x05\xbc\x66\xc7\xec\xcb\x47\xad\xc4\x97\xd7\x80\x15\x69\x6f\xa2\x44\x16\x34\x9b\x73\x35\x43\xc6\x21\xda\x56\xc0\x58\x71\x1b\xf8\x17\xab\xa1\xec\x9e\x5a\xe1\x3b\xf3\x72\x08\x54\xc9\x71\x67\xe1\x66\xf8\xb3\x98\xcc\xb5\xbe\xfe\xf2\x1a\x6a\x27\xa2\x2a\x1c\xdd\x82\x9d\xc4\x00\x18\x55\x45\xf5\xde\x2d\xb6\x76\x3f\xe7\xba\xb1\x9b\x31\x3b\x0d\x4c\x7d\x4d\xac\x91\x86\x29\x21\x72\x91\x47\xd8\x46\xc2\x30\x18\x39\xd1\xb4\x6f\x00\xa3\xbf\xd1\x6a\x2a\x67\x7d\x27\xdf\xd2\xfc\x8b\xc7\xf9\x52\x19\x5b\x56\x60\xf3\xc2\x27\xe0\x41\x07\x76\x3b\x17\x61\x8b\x72\x1a\xae\xc7\xf5\x0d\x07\xd5\x74\xe6\xe4\xc5\x72\xce\x8f\x0b\x71\x23\x0a\x38\xfe\x2d\xfc\x3b\xeb\x80\x4d\x13\x24\xf0\xbd\xee\xee\xb9\x89\x07\xbc\xcf\x7b\xfc\x73\xcb\xe1\x3e\xc6\xcb\xdf\x9a\x4b\x4c\xf8\xc3\x9a\x42\x3b\x31\xf0\xd4\xb4\x60\xe2\x6e\xa9\x9d\x84\xac\x11\xe0\x1d\x7c\xd3\x3a\x19\x3b\xb3\x54\x8a\x11\x14\x8c\x13\xe1\x5f\x05\x31\x1d\x57\xd5\xcb\x97\xdf\x65\x63\xa8\x21\xe5\x9a\xc1\xdf\x62\x9c\xfe\x0c\x66\x02\xfa\xfd\xe0\x1c\xf4\xa4\xed\xa3\x07\x6b\xe2\xe3\x59\x13\xbf\x96\x4f\x4e\x93\x19\x98\x0b\x2c\xdf\x7c\xcb\xbd\xaa\x3c\x80\x0d\x10\xb5\xe5\x52\xf0\x72\xbf\x88\xb5\x0b\x7b\x3d\xc4\x31\xa7\x6e\x3c\xa1\xc2\x79\xae\x73\x30\xa2\x74\x22\xd9\xaf\xb3\xd7\xbd\xb8\xdf\xd4\xd7\xd0\x65\x9f\xdd\x7c\x12\xf7\xb2\xd1\xee\xf2\x78\xde\x68\x95\xdf\x8f\x04\x86\x9e\xb1\x9c\x3a\x2a\xc7\x62\x4c\x54\x56\x95\xc0\x03\x67\xa1\x69\x28\xc6\xa8\x7b\x1d\x5a\x6b\x9a\x12\x93\xdc\x60\x2f\x09\x2b\xb8\xb1\x97\x25\x07\x55\x99\x56\x97\xfd\x5a\xaf\xf7\xdc\x58\x66\xbd\xea\x2b\xae\xd0\x86\x01\x1c\xbb\xe8\x70\xa6\x56\xc1\xe8\x03\xcc\x28\xb0\xb2\xbb\x57\x8b\x8d\x06\xab\x22\xff\xe8\x84\xee\xe3\x20\x74\x53\x07\xff\x32\xa3\x96\xd2\x30\x3e\xd1\x95\x45\xcd\x73\xdc\xd7\x16\xc1\x5a\xdc\xf4\xb2\x03\x3f\x29\xf9\x57\x47\x81\xb5\x12\xc7\xb7\xba\xcc\x47\x91\x38\x30\xec\x9c\x28\x03\xe8\x80\x9f\x99\x7b\xaf\x67\x30\x8a\x6a\x1a\xea\x6a\x0b\x00\xba\xe6\x88\xda\x25\x14\xc7\xfd\x91\x17\x46\x8c\xd8\x4f\xea\x5a\xe9\xdb\x2d\x74\xaa\xfd\x62\xf6\x25\x89\xd9\xcd\x98\xb9\xb8\x8a\xaf\x2a\xf3\xc6\x57\xdc\xeb\xb7\xd7\xd7\x09\xf9\x15\xef\xcb\xd5\xc9\x27\x1f\x3c\xf8\x7e\x19\x1c\xea\x40\x0f\x3e\x95\xcb\x1b\x99\x3b\x92\xdf\x75\xe3\xfb\xf0\xe2\xdb\xa9\xa8\x47\xb3\x1e\x1c\xfe\x7e\x91\x2c\xfa\xbe\x5c\xed\x1e\xc6\xd0\xed\xc0\xf1\x6e\x97\x30\xfe\x91\x2f\x44\xb7\x7b\x4b\x6f\xaf\x16\xe7\x28\xc0\x6e\xb0\x20\x84\xd2\x0d\x5c\x6d\x6b\x06\x9c\xa2\x2a\x79\x71\x54\x7b\x6b\x9b\x11\xbe\x5b\xc6\x4c\x97\xfd\x29\x66\xde\x84\x46\x75\x8a\x04\x37\x2b\xf2\x44\xe8\xca\x60\xdd\xc9\x0f\x13\x51\x68\xcc\xeb\xf3\x1c\x12\x18\x3c\xe3\x45\xf1\xec\xc5\xde\xd2\x0d\x0c\xc4\x30\xc0\xba\x88\x52\xf2\x02\xe8\x83\xeb\xe5\xb9\x07\xbf\x74\x50\x1f\x61\x72\x9a\x72\x01\x31\xf2\x91\xef\x72\xb4\xc6\x48\x35\xab\x0a\x3e\x3c\x2c\xdf\x1d\xda\x9f\xfa\x97\xf7\x9e\x9a\x6c\x58\x22\x1c\x7f\xd0\xb2\x26\x0b\x4e\x83\xed\x51\x8b\xe5\xba\xa1\xfa\xca\x8d\x3d\xdc\x4e\x84\xb0\xd4\x93\xbd\x00\x1a\xf8\x75\x62\xf3\x9a\x97\x5f\x44\xcf\x04\xd7\x78\x9e\xe0\x5d\xb1\xe0\x96\x62\xf9\xd2\x1e\x5d\x20\x7f\x5c\x8a\x99\x04\x25\x2d\x88\x0e\x5a\xbf\xa6\xf9\x50\x39\x87\xea\xd8\xe8\x30\xc3\x8b\x82\x15\xfa\x56\x94\x99\xc3\xcd\x83\xd9\xde\xb9\x2e\x6d\xfd\x49\xb7\xb0\xbe\xa1\x11\x18\xaf\xa0\x0f\xbd\x5e\xcf\x82\xd7\xa1\x67\xe8\x9a\x76\x04\xfc\x1e\x24\xfb\xb6\x40\x4d\x02\x84\xf9\xbf\xdb\xee\xae\x67\x13\x75\x58\x0b\x3f\xe7\x6b\x60\xf7\x44\x58\xf0\x5e\x2f\xdc\xbe\x4e\x0d\x8d\x13\x6f\xe8\x9b\x64\x59\x83\xf4\x9a\xc2\xa9\x0d\x49\x23\x2d\x4c\x4d\xc0\x26\xca\xe0\x99\x5e\x0e\x72\xc3\x4d\xbc\xaa\x80\x0b\x26\x4b\x69\x1f\xc7\xde\xd1\x05\xe0\x38\x8e\x47\xd6\x48\x60\xc6\x6f\x15\x66\x9c\x91\x8a\x39\x82\x9f\xd9\x82\x29\x71\x67\x3d\x17\x8e\xc6\xf4\x14\x08\xb8\x4f\x06\x72\xcc\x6d\x30\x6b\x7e\x22\xdf\x80\x11\x74\x9a\x15\x7a\x92\xcc\x02\xd9\xe8\x8a\x22\x98\xef\xc6\xec\x52\x2f\x13\x23\xcb\x52\x94\x9e\xb7\x08\x7d\xdc\x82\x17\x95\xad\x00\x23\x8b\xbb\xac\xa8\x8c\xbc\xd9\x4b\x66\xaf\x3d\xf8\xc9\x74\xbc\xdb\x6c\xdd\x3a\xda\x62\xef\x8a\xad\xbe\x04\xb1\x2b\xb5\x32\x0a\xeb\x18\xe4\x88\x8a\xde\x7c\x7e\xbb\x67\x9b\x52\xa7\x8d\xb7\xb1\x3f\xcf\x00\x76\x6d\xed\x0f\x80\xc7\x09\x23\x21\x52\xaf\x51\x36\x62\x22\x1c\xdf\xb4\x8d\x73\x45\xdf\x83\x88\x58\x3c\x72\x60\x95\x41\x77\x05\xff\xe2\xc9\x40\x5f\xe7\x68\xbe\x8e\x82\x15\x29\x53\x13\xdd\x03\xbe\xe8\xc1\xf5\xee\x7b\xc2\x6b\xc6\x54\x85\xe9\xd9\xba\x2d\x16\x95\x01\x93\x33\x92\x01\xef\x51\xa1\x97\x4e\xd4\xf1\x6f\x1c\x58\xa1\x10\x29\x3f\x98\xae\x56\x93\x28\x26\xf7\x2c\x35\x69\xd6\xc8\x5e\x99\x8e\x00\xb0\x5d\x3f\xa3\x76\x0c\xb3\xd6\x69\x28\x9a\xa9\x75\xdc\x88\x6b\xf6\x0f\x02\xe9\xc1\xac\xe5\x47\xc2\x9c\x5f\xfd\x68\xe3\xe7\xd0\xa8\x71\xae\xb1\x37\x5b\x08\x3b\xd7\x79\xdb\xe9\x9a\xf6\xe3\x4d\xfa\x92\xaa\x67\xab\x33\x26\x7d\xce\x13\x38\xde\x78\x3a\x6b\x87\xbb\x11\x21\x7b\x15\x98\xac\x69\xbf\x3a\x31\x17\xbb\x88\x81\x1b\xc5\x2d\x5f\x19\x36\x95\xa5\xb1\xcc\x11\x26\xf7\xf9\x67\xef\xc3\x42\x3e\x07\x53\x4c\x49\x95\xbb\x37\x18\x2f\x61\x52\x59\xc6\x2d\x2b\x04\x07\x2f\x65\x60\xd9\xfc\x42\x74\x19\x07\xf1\x4c\x9b\x11\xd6\x51\xe9\x65\x29\x1c\x0e\xc8\x5f\xb3\x73\xd7\x15\xac\x66\xec\x8b\x6f\xfd\x65\x78\x4a\x2e\xea\xb1\xf9\x58\xd6\x22\x51\x1d\x74\xc4\xe4\xa1\xc1\x63\xa7\x45\x8c\x39\x8b\x5b\x8a\x3e\xf5\x74\x16\x4d\x5f\x7b\xef\x7b\x38\x66\xf1\x2a\x5f\xb3\xd3\x04\x12\xf1\x28\xdc\x7e\x01\x9b\x38\x36\xb7\x1d\x7c\x95\xbe\x1d\x83\x0f\xe7\x88\x59\xbd\x64\x08\xbb\xc9\xf3\x89\xbe\x20\xd1\x51\xd1\x6d\x0a\x99\x66\x23\x12\xd8\xff\x54\xe6\xa2\x44\x87\x1e\x0f\x16\xc0\x5f\x83\xc7\xcd\x44\x04\x4a\x93\xe9\xc5\xb2\xb2\xb8\x32\xed\xfa\xc0\xe6\x53\x68\x22\x45\x98\x34\xec\xea\xc8\xb1\x61\xc7\x85\xbc\x16\x57\x47\x23\x27\xf1\x60\x5a\x3f\x27\x83\xf0\x89\xbe\x81\x5c\x26\xf5\x56\x8d\x51\xcc\x88\x92\xfc\xba\x87\x07\xd3\x89\x9c\x15\xe2\x4e\x66\x7a\x56\xf2\xe5\x1c\x53\xc1\x8d\xd9\xd5\xd1\x9f\xd6\xc7\x30\xcc\x58\x5e\x5a\xf2\x6f\x65\x57\x47\x37\x6e\x15\x76\x2e\x14\x0c\x37\xd5\xe4\xda\x34\x59\x31\x4e\x2e\x7e\xec\xb9\xdb\xc9\x82\xff\x87\x2e\xfd\x28\x2f\xa8\x8b\xbf\xb6\x62\x45\x56\x04\xd8\xe5\xd5\x11\xb8\xd9\x5c\x1d\x39\x50\xbe\x3a\x72\x0f\xf6\xea\x08\xd0\x07\x19\x84\xea\x03\x4b\x95\x0c\x0c\x4e\xa5\x4e\x34\x77\x82\x19\xc2\x18\xbe\xaf\xc9\x8a\xfd\xe1\x14\xc5\x12\xf7\x1c\x2d\xf7\xff\x86\xb9\xd8\x73\xcc\x90\xfb\x87\x53\xd4\x6c\xf8\x13\x83\x6d\x2a\xcd\x4c\x35\x9d\xca\x3b\x66\xc0\xc5\xca\x60\x7f\x40\x75\xcb\x39\x7f\x81\x4a\x67\xd8\xd0\x64\x45\x1e\x8f\xe8\x70\x9e\x6c\x99\x76\x5c\x5b\x2d\xe6\xc8\xbd\xe3\xe0\x41\x4c\xab\xf5\xef\xc4\x9f\xf7\x6b\x76\xf3\xea\xe5\x88\xdd\x7c\x3b\x62\x37\xaf\xdc\xff\x03\x02\x83\xbf\x5e\xba\x7f\x7d\x37\x62\x37\xdf\x01\x4e\x73\x3f\x7d\x0b\x2b\xc2\x76\xf0\xcf\x6f\x47\x6c\xaa\xf5\x2b\xfc\xdf\x97\x4f\x93\x3f\x8e\xfc\xcd\xcf\x35\xc6\x31\x30\xc8\x8f\x25\x1c\xf6\x87\xaa\xf5\x77\x6b\x28\xf3\xb6\xb1\xd2\xb7\x09\x88\xc1\x78\x15\xe5\x42\x9e\x65\x62\x69\x45\xfe\xb1\x2e\x2d\x5a\x5d\x8a\xdc\x63\xdb\x21\x62\x63\x6d\x98\x1e\x59\x31\x6d\xd7\x60\x91\xc1\xf7\x0a\x64\xc6\x8c\xe8\xf6\x44\x38\x88\xf7\x08\x0d\x35\x98\xb9\x34\x99\xbe\x11\xe5\xca\xbd\xc9\x95\xf7\xdd\x8d\xee\x9a\x76\xce\x55\x32\xa8\xc4\x48\x80\x47\x25\xfc\x1b\x58\xeb\xe4\x16\x7a\xb4\xa2\xa1\x51\x80\x01\xba\x7e\x47\x4e\x96\xbc\xb4\x32\x03\xdd\x0a\x77\xdb\xb3\xde\x3b\x75\xa3\xbf\xc2\x93\x7c\xa1\xd1\x87\xa1\x4b\xf9\x54\x87\xc7\x3e\x03\x72\xda\x10\xa1\x29\xa5\xd7\x6b\x96\x4e\x02\xbb\x5b\x87\xa7\xc5\x8d\x28\x43\x28\x77\x3e\x66\x97\x25\xcf\xae\xc9\x2e\x94\x90\x60\x0c\x43\x77\x08\x7d\x21\x67\xa4\x39\x5c\x72\x3b\xc7\xf8\x12\x58\x40\x6c\x2b\x15\xe4\x9c\xc7\xb0\x84\x40\xe5\x17\x95\x05\xcb\xbf\x41\x7d\x47\x1c\x07\xac\x38\xba\x28\x28\x6c\x1d\xa9\x8c\x3b\x26\x33\xaf\xcd\x17\xfd\x18\x02\x55\x79\x4e\xc1\x61\xdc\x3a\xda\xa2\x8b\xbc\x96\x8b\xac\x10\x53\xeb\x3d\x14\x29\x80\x2b\x25\x31\xa5\x58\xe8\x1b\xe1\x15\x74\x21\xc1\x6f\xe4\xa4\xd0\xb0\x25\x0d\x90\x92\x31\xfb\x48\xec\x61\xad\x91\x54\xb1\x89\x8f\xba\xc7\x81\x73\x56\x4b\xa2\x36\xae\xf3\xa3\xbb\x57\x5a\x3e\x12\x6e\x6f\x5a\xb3\x87\x22\xf7\x9f\xd7\xbc\xcf\x23\x73\x00\x72\x52\xd4\xae\x6c\x8c\x49\x82\x1d\xe4\x35\xcc\xcd\x67\xbf\x36\x4d\xdf\xbd\x55\x77\xec\xbc\xa5\x2d\x30\xed\x4a\x5b\x40\x0d\x14\x88\x69\x35\x45\xf9\x64\xde\xea\x6f\xd8\x73\x1b\xa6\x4d\x76\x44\x72\x56\x85\x91\xb3\xc6\x0a\x9e\xbf\x78\x7c\x87\x6e\xf6\xf1\xd3\xe5\xbb\xd7\x0e\x52\x4c\xc8\x93\x0c\x41\x28\x6e\x27\xaf\xc6\xaf\xbe\x4b\x22\x85\xc1\x87\x25\x9e\x60\xd7\x25\xe2\xf2\x27\x2b\x96\xe3\x75\xb8\x63\x07\x79\x64\xc5\xb8\x22\xf3\x34\xae\x17\x23\x07\xe0\xba\xd2\xbb\xe8\x1a\x79\xb4\xdd\x0a\xbc\x78\x29\xee\x96\x85\xcc\xa4\x2d\x56\xfe\x86\x54\x55\x14\x4f\x92\x94\x0d\x55\xc6\x6e\x08\xcb\xfa\x48\x61\x59\xb6\x21\xdb\x51\x7e\xf6\xff\xf3\xbf\xff\xaf\x9b\x57\xff\xe7\x7f\xff\xdf\x23\xf8\xd7\xb7\xb0\x10\xf8\x53\xd8\x6c\xb8\x31\x0a\x84\xd2\x5e\xcd\x1e\x48\xad\x0d\x45\x59\x14\x65\x1b\x2a\x32\x7a\x07\x89\xdc\x3b\x62\xcb\xb2\x52\x52\xcd\x90\xbe\x10\x34\x49\x35\x7b\x80\xde\xa6\xf6\x8e\x7d\xdb\x7b\xbc\xe3\x75\xe9\xfc\xc9\xbc\xe8\xa7\xa1\x9a\x22\x72\xd2\x03\x1e\xd0\x00\x05\xda\x69\xc1\x67\xb8\x55\xa9\x66\x27\xb9\x34\xf8\x2f\xe4\x02\xc2\xfe\x1c\xe5\x47\x4e\x1e\x07\x87\x74\x3f\xe0\x66\x73\x7a\x7e\xd6\xe2\x86\xd2\x91\x4c\xc1\x53\xb6\x7e\xe6\x0f\x2a\x0e\x15\x7c\x56\x7f\x44\x3c\xa6\x97\x0f\x52\xf2\x25\xc8\xe6\x11\xd9\xc4\xbc\x41\xae\xff\x4c\xe4\x6d\xbd\x86\xaf\x76\xef\xba\xe9\x87\xe9\x99\xeb\x0f\x2a\xed\x70\x8f\x57\x55\xeb\xff\x9b\x7c\x50\x6d\xaa\xf4\xbd\x32\xa1\xc9\x84\x17\x19\x2f\xba\xf3\x79\xf5\x77\x0b\xc6\x3e\x8a\x61\xf3\x5e\x42\x0e\xe3\xbb\xcf\xc9\xcd\xb6\x69\xf0\x37\x85\x2d\x7d\x16\x8e\x84\x73\x03\xc1\xef\x75\x2f\xe0\xda\xa7\xcd\xdc\x6a\xc1\x27\xa2\xf0\xe5\x8f\x36\xc4\xd2\xbf\x6f\xb6\xad\x79\x92\x86\xa0\x7a\x07\x9a\x32\x17\x6d\x92\x33\xb1\x39\xba\x2c\x85\x59\x6a\x95\x03\xab\x03\x07\x36\x46\xc5\xcc\xd8\x0f\x3f\x66\x9f\x1c\xd8\x86\x41\x0d\x68\xf7\x74\x85\x9e\x7f\xf5\x58\x7d\x2f\x8e\xea\x5b\x27\x5d\x7e\xf0\xae\x0f\xd8\x19\xd6\x59\xa9\x5c\x94\x6c\x8c\x27\x14\x9b\xd0\x13\xbc\xd5\xe5\x35\x2a\x0f\xff\x78\x7e\xea\xb5\xb9\xa1\xc8\x15\xfa\x33\xe2\x08\x60\x4e\x81\x08\x65\xda\x68\xcb\xc3\x19\xa5\x3e\xd6\x70\xbc\xcc\xd0\xa6\x68\x2c\xea\x76\xb2\x0e\x0a\xa0\x1d\x26\xc2\xee\x59\x79\x2c\xcb\x85\x4c\xc7\x70\x6e\xa4\x09\x24\xfd\x21\x3a\x69\xd3\x9d\x5e\xaa\x13\x4a\xfd\xe0\xfb\xb9\x52\x37\xc3\x6e\xae\xac\xeb\x3e\x30\xf7\x4f\xcc\xaa\xa2\x15\xfb\xc3\xbb\xcb\x2d\x9d\xf3\x87\x5e\xc6\x5a\xe3\x3d\xbc\xb1\xfd\x5e\x08\xbd\xb1\x5d\xbe\xa2\x12\x17\xbc\xf5\xf3\x69\x53\xa1\x3f\xa2\x27\x53\x4a\x14\xb6\xd1\x56\xaf\xf5\xeb\xa1\x26\xf8\x7d\x13\x39\x61\x31\x00\x24\x78\x5b\xc7\x64\x56\x5f\xe8\xd2\xbe\x0c\x82\xaf\x31\x96\xd7\x81\xe2\x3a\xdf\x50\x24\xaf\x63\x5a\x4f\x3a\xd6\x82\xf1\x4e\x35\x7f\x0c\xf6\x0d\x3b\xff\xe9\x32\x75\xd8\xa6\x1b\x5d\x1f\xc1\xf2\x6b\x07\x66\xcd\x01\x50\x05\x87\x82\x90\x9c\x39\xd6\x26\x15\x9e\xb9\x5a\xd9\xb9\x63\x8c\xc5\x5d\x26\x96\xb6\x76\x52\x96\xab\xbf\x71\x5c\xc0\xc9\xf9\xa7\x8b\xcb\x93\xf3\xd3\xcb\x37\x7f\x5c\x5b\x4b\x73\xc2\xf5\x49\xd6\x06\x3d\xda\x3f\x18\xdd\x03\x82\x4c\x0d\x81\xd0\x82\xc1\x17\xb6\xf9\x7c\x5a\x7d\x09\xfa\xb3\x43\x99\x1a\x8b\xd4\x26\xf3\x22\x2f\xa4\x74\x30\xb5\x0c\x61\x7f\xbe\x12\x87\x89\x0c\x5f\x2b\xfa\xde\x1c\x5b\x55\xdb\xe4\xa0\x57\xf9\xb5\x76\xd9\x12\xf7\xb9\x27\xc8\xfd\x79\xdd\xd9\xa5\x1f\x6e\x13\xcb\x7d\xcd\x67\x7d\x98\xdf\x4b\x3f\xac\x6a\xcc\xc8\xf2\xf3\x77\x17\x9b\x34\x35\x9f\xea\x2d\xbd\xe6\xc8\xa7\x85\xb9\xf9\xce\xeb\x38\xac\x76\x44\x30\x96\xf1\xe3\x33\xee\xc4\xb2\x3d\x4b\x48\x0e\x49\xe3\xca\xce\x4b\xbd\xdc\xd7\x4d\xbe\xa3\xc4\x22\x6f\x75\x56\x2d\x7c\x18\x58\xe7\x35\xb6\xb6\xf6\x06\x9d\x52\x80\x0d\x31\x83\xfc\x73\x49\xca\x92\xda\xe3\x80\x25\xe4\x22\x67\x79\x3a\x44\xff\x95\x76\xe4\xde\xea\xe7\xc7\xaa\xb2\xd8\xdc\x78\xc7\x87\xe9\xae\xac\xf3\xec\x80\xe8\xa6\x69\x33\xd4\x0a\x61\x0a\xc9\x31\x30\x3d\xde\x53\x02\xf3\x03\x81\xbf\x84\x77\xcb\x79\xcd\x26\x5a\x17\x23\x26\x95\xfd\xdd\xf7\x23\x36\x2d\x34\x87\x7f\xe0\x86\x46\xec\xdf\xfe\x1d\x74\xc1\x53\x9e\x89\xff\xfc\xfb\x88\x2d\xf8\xf2\xdf\xf0\x53\xfa\x3b\x50\x04\x25\x8b\xf1\xee\x88\x58\x13\x4c\xfb\xb6\x9f\xb4\xc3\x87\xef\x7e\x3c\xbe\xf0\xca\x51\x07\x46\x0e\x78\xea\x15\x3e\xde\x96\x7c\x6a\xd9\xf7\xec\xf9\xdc\xda\xe5\xeb\x93\x93\xff\x30\x5a\x1d\xe3\xcb\x1c\xeb\x72\x76\xf2\xa2\x1f\x78\xe8\x69\x0e\x84\x9a\xff\xd7\xba\x7e\xb7\xbf\x43\x54\xc6\x9f\x35\x23\x08\x1f\x01\x29\x7c\x2a\x7f\xaf\x75\xd1\xbd\xa6\xd6\xd4\x9e\x5f\x71\x61\x45\xf1\xa9\xf5\x32\xbe\x8a\x0d\xa2\x1d\xc1\xae\x17\x84\x56\xab\x5f\xde\xa2\x49\x3a\x7a\x8c\x5b\x5f\xcf\x94\x18\x43\x61\x5b\x4e\x6d\xeb\x3c\xb4\x5f\xf5\x14\x97\x8e\x58\xa9\xac\xf1\x80\x9e\xf2\x5e\x3e\x95\x98\xa9\xf5\x14\xa0\xb3\x73\x63\xf7\xa0\xa8\x42\x55\x8b\x27\xf5\x0e\xba\x76\x47\xde\x7b\x5f\x03\xf8\x83\x85\xe0\x03\xbf\x93\x8b\xf6\xf3\xea\x30\x79\xc4\xae\x52\x6d\xdd\x35\xb0\x65\x7b\x47\xf4\xed\x0c\x63\x63\x41\xeb\x49\x4a\x37\x44\xdf\xe7\x5b\xb4\xfd\x2a\x74\x36\x7d\x4e\x31\xb6\x9b\xdf\xad\x51\xfd\x61\x79\x2b\x7f\xf7\x7d\xcb\x58\xef\x85\x9a\xd5\xd5\x86\x0f\x18\xac\x9d\xf4\x3f\x60\xc0\x2e\x98\x44\xbf\xdf\xb6\x91\x72\x5d\x4d\xd6\x25\xed\x85\x54\xbb\x3b\x34\xa9\x76\x78\x68\x52\xed\xf8\xd0\xba\x1f\xf2\xd6\x87\x56\x15\x56\x2e\x0b\xd1\xce\x89\x6c\x3b\x9a\xd2\x8f\xc2\x19\xb4\x48\xaf\x7e\x05\x5a\x75\x6c\xe5\x29\x33\x55\x4b\x6e\x1d\xee\x1b\x8e\xaa\xa8\x43\x3f\x54\x3d\x45\x26\xa2\xf3\x04\x7e\x35\x3b\x49\x2c\xae\xdb\xc3\xe0\xb0\x90\x6f\x2b\x6d\x9d\x09\xd9\x2e\xa3\xd2\x06\xf5\x06\xa4\x9e\xea\x44\xa4\x0d\x46\xe1\x1f\xd8\xce\xf5\x1c\x2d\xd4\x71\xa0\xe8\x4f\xcd\x1b\x35\xb1\xc0\xe6\x83\x36\x2d\xae\x98\x90\xe0\x9c\x1b\x6c\x4f\xa9\xe6\x40\x97\x8c\x2b\xb2\x5b\xe9\x69\xf3\xf3\x98\x7d\xe0\x12\x5c\x21\x44\x29\x7c\xce\x7a\xc8\xd4\x40\xae\xc6\x55\x09\xa6\x8c\xfd\xa9\x40\x48\xf6\x1d\x7c\x1a\xae\x75\x7a\x18\x6d\xfb\x65\x74\xa1\x5e\x4d\x94\xba\x7c\xda\xb2\x8a\x26\x18\xdf\x8e\x5e\xea\x6a\x9f\xdb\x4c\x05\x8d\xc1\xbb\x4d\x3a\xd5\x21\xa0\x75\xdb\x14\x7d\x04\x97\xbd\xc3\xad\x5c\x88\xf2\x46\x66\xe2\x33\x69\x2c\xbb\xdd\x3f\x9a\x0d\xd9\x5c\x17\x39\xa6\xbc\xf5\xbf\x58\xcd\xa8\xd5\xb8\x10\x33\x9e\xad\xea\xd9\x73\xba\x3c\x90\x21\x56\xb7\x96\x6d\x60\x80\x1b\xc7\x06\x07\xc8\x2f\xee\xfb\x97\x5a\x4d\x2e\x72\x32\x37\xb4\x42\xf6\xd9\xaf\x66\x9b\x60\x6d\x58\xea\x86\x69\xa1\x51\x6d\x6e\x8c\x55\x7e\xe8\x02\x96\xfd\x96\xf4\x2f\xee\xfb\x97\x66\xb5\x83\x9f\x3e\xbf\x47\xfb\x26\x06\xd5\xf9\xd8\x3e\x07\x6a\x4c\x2a\x50\xbd\x92\x25\x10\x4d\x7c\xd2\x84\x05\x3e\xb2\x29\xb9\x2d\xf7\x73\x17\x30\xb6\xb4\x8d\xb9\x27\x31\xb5\x76\xcc\xf9\x6d\x35\x5b\xa0\x51\xf5\xf2\xfd\x85\x6b\xa6\xa8\xce\x2c\x78\xc0\x24\x79\xb6\xc7\xec\xcc\xb2\x39\x37\x31\x06\x13\xbd\xcc\xb8\x61\x3c\x5f\x48\xe3\xd6\x9b\xa6\x79\xe9\x5b\x7a\xbf\x2a\x36\xe3\xbf\xaf\x54\xde\x6b\x49\xfc\xe2\xdb\xe0\x95\xb2\xf3\x77\x1f\xa0\x18\x4b\x2e\x72\xf6\xe6\x94\x4d\xe0\x5b\xe3\x56\x7d\x80\x93\x37\xd0\xa4\x9b\x7b\x66\x7c\xc9\x92\xcc\x2d\x07\x94\xca\x18\xc6\x5a\xa9\x50\x8f\x7e\x44\xb5\x9f\x1d\x26\x35\x96\x95\x5a\x5b\xe3\x73\x56\x87\x8b\x04\x6d\xbc\x9b\xaa\x1b\x42\x5a\xf8\xef\xc9\xca\xae\x9b\x1a\x11\xd2\xfa\x4e\x81\x9a\xd0\x21\xd4\x70\x4d\xf2\x98\x62\x80\x6e\xb8\xca\x77\x48\x37\xe3\x00\xba\x64\x5f\xaa\xb2\xf8\x12\xa3\x8e\xfd\xae\xa1\x00\x3f\x85\xb4\x86\x94\xeb\x86\x95\x95\x82\x5a\x12\x0e\x4c\xc8\x05\x83\x72\x10\x50\xb4\xe4\x4a\x57\xde\x49\x11\x22\x95\xfd\x54\x30\xde\xb9\x2e\x2d\xfb\xfe\xfb\xef\xea\x97\x23\xa7\x4c\x5a\x0c\x09\x16\x6a\x84\xb9\xf0\x6f\xa5\x11\xf4\xab\x77\xb9\xd9\xb3\x41\x6d\x0d\xe9\x37\x59\xaa\xb2\x2f\xab\x12\x9e\xe2\x4c\xde\x90\xf1\xb7\xd0\xf5\x0a\xe4\x74\x84\x50\x76\xd3\xf8\x0a\xae\x0e\x0f\x39\x60\x60\xcf\xbf\x80\x61\x41\xbc\x3e\x39\x99\x6b\x63\x5f\x2f\x75\x69\x4f\x00\x75\xbd\xa8\x17\xdd\xd4\x53\xba\x2f\x9d\xde\x62\xfb\xe5\x5d\xce\x05\xfb\xe2\x86\xfb\x92\xd6\x4c\x02\x68\xc1\x50\x10\x0f\x27\xfe\x4e\xeb\xf7\xf9\x43\x88\xbc\x8e\x13\xf9\x02\x05\xe0\x74\x8a\x51\x57\x6e\x02\xb6\x80\x92\xa4\x13\xcc\x3f\x54\xdc\x34\x8b\x8e\xbe\xfd\x78\x01\xfb\xd6\x8b\xe4\xc5\x18\x4c\x2b\x36\x62\x5f\x20\xee\x39\xfc\xfe\xc5\x71\x78\xb8\x52\x18\x8b\x49\x75\xec\xd3\x5c\xb8\x81\xb8\x0f\x2a\x0b\x31\xf9\xac\xe0\x2b\x81\x59\x07\xa5\x2e\xe0\xd8\x5f\x8c\xfd\xd6\xb1\xb2\xa9\x01\x1b\x2d\x57\xec\xec\x9c\xf1\x3c\x2f\x85\x31\x08\x90\x18\x53\xaf\xb4\x0f\xbe\xa8\x8c\x1b\xe7\x8b\xbb\xbe\x02\x07\x70\x27\xfd\xea\xdb\x7f\x19\xbf\x1c\xbf\x1c\xbf\xfa\x02\x78\xcf\x8f\xed\xde\x83\x34\xd7\x2b\x56\xa9\x42\x18\x03\xb0\x0f\xae\x2a\xb3\x52\x00\xa7\x5a\xc2\x9b\x2c\x2b\x55\x7b\x87\x0c\x8d\xa2\x70\x74\x86\xb0\x95\x6b\xe3\xd8\xd6\x80\x4f\xf0\x67\x3c\x58\x25\x10\x85\x01\xc6\x86\x42\x71\x81\x2e\x85\xa7\x7d\x51\x65\xe0\xaf\x63\xe1\x33\x04\xa5\xc9\x6b\x51\xac\xc8\x3c\xad\xb4\x3a\x86\x82\x2f\x93\x42\x8c\x28\x56\xde\x1d\xb2\xe0\x06\x9a\x80\x73\x5b\xb5\x04\xf2\xc7\x94\xb8\xf5\x50\x10\x20\x09\x01\x34\x80\xda\xd5\x11\xe4\x4b\xbc\x3a\xfa\x01\x40\xc4\x41\x32\x7d\x9a\x49\x22\x22\xd4\xe4\xf5\xc9\xc9\xd5\x11\x0c\x73\x4a\x4e\x45\x31\xf6\x9f\x5c\x77\xa6\x8c\x18\x3d\x1f\x70\xea\x28\x30\xf1\x76\x4b\x51\x02\x95\x99\x14\x02\x17\xf7\xd3\xe7\xf7\x63\xf6\x17\x5d\x41\x5b\x0f\xa2\x30\xb0\xd5\x50\x73\x0f\xd9\xff\x89\xb4\x25\x2f\xc3\x30\x84\x1a\xc3\x33\x44\x63\x33\x28\x82\x47\x8c\x87\x3c\x2a\xb1\x64\x11\xae\xd8\x5a\xb1\x58\x5a\x1a\xc0\x4d\x46\x59\xa4\x74\xc9\x26\xdc\xc8\x8c\xf1\xca\xce\x31\x7e\xe4\xea\xc8\x7d\x79\xed\x56\x70\xab\xcb\xfc\xff\x73\x75\x84\x4e\x6f\x36\x3a\xcc\xfd\x58\xf2\x19\x94\xf2\x66\xcf\xaf\x8e\xfe\x71\x3c\x1e\x5f\x1d\xbd\x80\x13\xf8\x6b\x25\xca\x15\x5b\xf2\x92\x2f\x84\x85\xa7\x71\x75\xf4\x3f\xfc\xf7\x52\xa4\xa3\x8c\x48\xf8\x79\x08\x27\xb2\x96\x40\x72\x1c\x52\x38\xfc\x7f\x2b\x0e\xd5\xf2\x3a\xb9\x0c\xdf\x80\x62\x14\xe4\x9d\xc8\x8f\x31\x19\x67\x4b\xae\x58\x8a\xfa\x07\x1e\x82\xf2\x40\x50\xe6\x23\x25\xf1\xba\x4b\x33\xe7\x10\xdf\x50\xa9\xf8\x87\xbb\x68\xb0\x7a\xbb\xb3\xf9\xcb\xe9\x87\xf7\x80\x36\xbd\xbe\x00\x58\x6a\xd8\xea\x73\x3c\xbd\x33\x65\x7f\xf7\xbd\xfb\x37\x54\x77\xd4\xa5\x89\x40\x5b\x93\xed\x42\xc1\xaa\xd7\xee\x3b\xa6\x3b\xfb\x2b\x6d\x87\x32\x0b\xd0\xff\xbd\x7e\xfd\xdf\x29\x1d\x9a\x91\x33\x25\xf2\x8f\xb0\x0d\x6c\x43\xbf\x43\x76\x01\xfa\x45\x31\xf6\xfc\x63\x40\x21\xeb\x0d\x3c\x58\x83\x13\xef\x28\x46\x6b\x5e\x1d\x5d\x1d\x31\xc8\xc9\x26\x15\x75\xcb\x45\x26\x17\xbc\xb8\x38\xa3\xca\x15\x2f\xfc\x42\x73\x39\x93\xb6\xbe\x4a\x5a\xe8\x4b\xf6\x5f\xec\x15\xfb\x2f\x36\x1e\x8f\xd9\x7f\xb1\x7f\x65\x49\x7b\xd3\xec\x10\x37\x96\x8e\xf7\x5f\xeb\xbf\xb5\x0c\x82\x3f\xa9\xe4\x28\x3a\xc7\x35\x6d\x03\x9b\x5a\x91\x8e\xcd\xed\xdc\x96\x3a\x97\xe1\xee\x65\xed\x34\x70\x19\x47\xff\xef\xab\x23\x37\xe2\xd1\xf1\xd5\x51\xe7\x2d\xd6\x17\x5d\xdb\xd4\x7f\xad\x4d\xd1\xd2\xa8\xe5\x92\x5b\x0e\x63\x22\x15\x2f\x57\xfe\x32\xe3\x36\xf1\x92\xdf\xdd\x2d\xb5\x12\x6a\xed\x16\xea\x20\xd0\x3e\x54\x32\xd5\x9f\x24\xfb\x2f\xf6\xc1\xfd\xcf\x1f\xdc\xff\x5c\xba\xff\x39\x77\xff\xf3\x4e\x02\x64\x9e\x61\xba\x65\x92\x7d\x2e\x90\x97\xd5\x8e\xc5\x95\xd6\xfc\xc0\x2e\x84\xc0\xe4\xb7\xaf\x4f\x4e\x96\xf3\x95\x91\x99\x19\x2b\x69\xec\x78\xa6\x6f\x4e\xb2\xaa\x3a\xf9\xc9\xb5\x3b\xc1\xf9\xc7\x73\xbb\x28\x22\x4c\x36\x56\x1a\xd7\xb4\x80\x0b\x80\x7b\xb8\x76\xab\x73\x8b\x73\x6b\x73\x4b\x73\x2b\x6b\x3c\x99\x57\x2f\xbf\xfd\x9e\xfd\x77\xf6\xea\x4f\x12\xd2\xe4\xbc\x7a\xf9\xf2\xa5\xfb\xf3\xfa\x07\x76\xc6\x72\x99\xab\x67\x96\x65\x73\xad\x09\xd9\x67\x7c\x29\x6d\x78\xd6\xe3\xe6\x72\x1a\xc7\x8a\x30\x21\xfa\x60\xc1\xad\xf5\x5d\x4f\x03\x87\x2e\x3e\x3a\xf2\x6b\x6d\xa0\xcc\xc4\xd7\xd9\x79\x29\xb0\x92\x8d\x9b\x12\x50\x0c\x38\xaf\x38\xc6\xd6\x51\x58\xe6\x11\x0c\x65\xb8\xf6\x84\x2e\x64\x5a\x01\x56\x01\xab\x69\x2b\xf6\xed\xff\xef\x77\xdf\x1d\xbf\x72\xd8\x60\xc1\x67\x4a\xda\x2a\x17\x6e\x90\x12\x33\x21\x3b\x39\xec\x46\x40\x4d\x30\x6c\xfe\x1d\xa3\x2d\xb3\x65\xc1\xc1\xc3\xf7\x23\x55\x68\x2b\x78\x39\x43\x32\x05\xad\x97\xa5\xc8\x1c\x43\xed\xd9\xee\x8c\x2f\x97\x22\x77\x9f\x4b\x5d\x81\xbf\x55\xb5\x1c\xb3\xe7\xef\xc6\xb3\xf1\x6b\xf6\x72\xfc\x6a\x41\x3e\xef\xe1\x23\xc4\xbd\x2e\xc6\x14\x67\xe4\xd1\x99\x77\xd6\xf2\xb5\x79\xb0\x9c\xbc\x9c\xb2\x5b\xc1\x48\xaf\x91\xac\xc4\x2c\x38\x84\xde\xd3\x89\x48\x81\x78\x1a\xfc\x88\x39\x4b\xe9\xca\x92\x97\xc6\x47\xb5\xf3\xe0\xc2\xe4\xf3\xe6\x94\x82\x4a\xcf\xa7\xd9\xe3\x29\xdb\x0b\x9c\x51\x8e\x6c\x05\x34\xae\x65\x0f\x82\xc6\xe0\x9e\xc7\x6e\xdd\xac\x28\x5f\xc4\x54\xad\xb0\x9e\xdf\x8b\xa9\x3b\x32\xff\x2b\x4c\x1d\x16\xe7\x0f\x70\x59\x81\xa6\xe0\xea\x28\xe3\x4a\x2b\x08\xdc\x72\x57\x7f\x75\x44\xd5\xa7\x16\x82\xfb\xfa\x77\x1e\x1c\x4f\x68\x89\x7e\x08\x9e\xff\x87\xe3\x39\xe0\x74\x75\xc9\x72\x7d\xab\xd8\x73\xca\xd1\x13\xfd\xf6\x91\x1a\x66\x25\xb0\xa9\xae\x99\xa0\x7f\x4b\xc5\x3e\xb8\x45\x19\xc3\x5f\x60\x92\x1b\x37\xdb\x6b\xf7\xb0\xf8\x98\x7d\xd4\x74\xe7\xe4\x44\x59\x68\x63\xdd\xa7\x09\x7c\x9a\x96\x3c\x23\x74\x80\xa8\x35\x2c\x4a\x60\x95\x3e\xd7\x34\x43\xfe\x3e\x80\xf6\x73\x77\x85\xb0\x85\x17\x40\xfb\x09\xc8\xdc\x3f\x96\x1a\x19\xb4\x31\x51\x5d\x39\x53\x61\x44\x5f\xf7\x8f\x58\x64\xd0\xfe\x20\xe4\x43\xd9\xb1\x19\x54\x23\x84\x83\x7f\x87\xec\x98\x81\x3d\xbc\x1a\xff\x73\xa2\x97\x09\xb9\x74\xb9\x61\x57\x47\xaf\xfe\xf9\xe5\xcb\xc5\xd5\x11\x35\xfb\x83\xec\x69\xf8\xdd\xef\x3e\x48\xd7\xd2\xbd\x5f\x9b\x94\x84\xff\x6b\xed\x42\x3f\xbe\xfb\xf9\xdd\x67\x2c\x32\x85\x12\x4b\xb1\x6a\x7a\xc8\x73\x74\xa9\x03\x8e\x14\xb8\x1d\xcf\xd9\x5c\xce\xb1\x06\x26\x70\x97\x73\x5d\x08\xfa\xee\x33\xe8\x8b\x3b\x51\xba\xb7\x37\xc6\x45\xa8\xe3\x08\x31\x14\xea\x87\xc9\xa0\xac\xfb\x5f\x00\x7c\x38\x5a\xad\x66\x28\xe9\x88\x15\x70\x80\xb7\xa2\x40\x10\x73\x68\xc5\xe1\x48\xbf\xe7\x52\x1c\x8b\x58\x5a\x11\xf3\x9a\xd6\x81\x72\xcc\x9e\x5f\x68\x9f\xb9\xcc\xbd\x87\xfa\xe7\x11\x42\x9f\xc3\xb1\xb9\x9c\x4e\x01\x9d\x2a\x0c\x27\x0c\x05\x3e\xdd\xb9\xc0\x4b\xf7\x42\x88\xc4\xc6\x32\xa3\x18\x0b\x7a\x66\x46\x84\x1a\x91\x3e\x88\xe4\xb6\x94\x70\x6a\x20\xfc\x41\xca\x2b\xf7\x5a\x9d\xa0\xca\x0b\x36\xe7\x2a\x2f\xb0\xee\x67\x1e\x42\x3a\xe6\x7a\xe9\x13\x87\xa0\xa0\x87\xc5\xee\xdc\x14\x50\xb8\xd5\x71\xd0\xba\x44\x17\x7f\x27\xd8\x21\x5b\x0e\x9c\x28\x9d\x7d\x68\x56\xf7\x1e\x6d\xe1\x93\x37\xb3\xc6\x31\xb7\xfa\xe9\xf9\xd9\x1f\x6a\xe9\x30\x5b\x8a\x2b\x60\x3e\xcc\x9a\xd6\x0d\x43\xcc\x31\xe6\xb4\x99\x43\x2d\xe4\x08\x71\xaf\x75\x2a\xca\x24\xb9\x09\xf2\xcf\x90\x52\x73\x70\xb6\x8a\x9b\x2d\x52\x0a\x1d\xaa\x45\x1c\xea\x99\xfd\xd2\x8a\x25\x0c\xac\xbb\xdb\xb4\x6e\xd4\x1e\xd1\x80\x42\xbb\xf4\x12\x37\xbf\x8f\x66\xd3\x66\x76\x89\xf8\xa8\x29\xc6\x2a\x96\x38\xf4\x09\xfd\x96\xa5\x9e\xf0\x49\xb1\x8a\x55\x79\xba\x42\xe2\x1f\x50\x15\x02\xb0\x12\xad\xf1\x47\x5d\xbe\xf5\x49\xbe\x5a\xd3\x13\x94\xa7\xa8\x1f\xfb\xfd\x8a\x54\xf7\x67\x6f\x3f\xf7\x45\xbe\x70\xb6\xe0\x4b\x77\xd4\x04\x5b\xae\x7d\x08\x4f\x2b\xbd\xb6\x0d\x51\xb9\x37\xa4\xf8\x2c\x06\x78\x33\xc8\x32\x49\x78\xf8\x73\x51\x2c\x43\x65\xe8\x52\xf0\x6c\x1e\x22\xd5\x89\x3c\x2c\xb4\xb1\x4c\x09\x7b\xab\xcb\xeb\x63\xe1\x68\x10\x4c\x7b\xcb\x57\x91\x0f\x61\x6f\x68\x84\x8c\xab\xc0\x02\xf2\xa5\xc3\x84\xa5\x84\x64\x5f\xf5\xc5\x39\x1e\x86\x18\x4a\x5c\x3e\xf1\x09\x2b\x4c\x78\x0f\x0f\x01\xe4\x74\x3d\x65\xde\xd7\x06\x3f\x09\x33\x0a\xcb\x4d\xd4\xde\xa8\x02\x56\x33\xe1\x73\xe6\xbb\x2d\xbb\xa1\x91\xa9\xa2\xe9\x31\xa6\x94\x62\xf3\xed\xdc\xc9\x37\x70\xda\x74\x58\x6e\x09\x52\x5d\x9b\xc8\xb6\xd0\x11\xbb\x5d\xd1\xc2\x7e\x8c\x7a\xac\xd7\x78\x3c\x50\x57\xb8\x19\xb3\x1a\x90\xe8\xd9\x39\xee\xd0\x4d\x39\x72\xac\x7a\x32\x2c\x1c\xb7\x08\xf5\x0b\xdc\x0a\x51\x1d\x5a\x1f\xc0\xa3\x1c\x56\x68\x7d\x6d\x18\xb7\xec\x7f\x1d\xff\xa8\xcb\x5b\x5e\xe6\x22\x77\xff\x62\x73\xc1\x73\xe4\xf9\xff\xd7\xf1\x67\xc1\x8b\xe3\xb3\x65\xf2\x1b\x21\x9d\xf1\x67\xb1\xd0\x56\x38\x68\x63\xcf\xe1\x6e\xb9\xc5\xdc\x96\x2f\x1c\x20\xcc\x44\x6d\xcb\x67\xe7\xfb\x48\x84\xd8\xf3\x66\x2e\xba\xde\x42\x97\x3f\xc7\x80\x04\xab\x37\x69\xe6\xb4\x5a\x72\xaf\xc8\x1a\xf8\x34\x5f\x5d\x48\x6b\x9f\x7b\xde\x80\x27\x1a\x09\xc0\x88\xbd\x78\x40\x55\x99\xf5\x0a\x32\x81\xc7\x0a\x5f\x6a\xd5\x62\x06\x14\x8a\x19\xc0\xc0\xf5\x16\xf5\x4a\x1b\xd5\xc3\xcf\xfc\x97\x11\xa5\x8f\xd5\xb7\xe1\xe5\x5b\x1d\x32\x27\x06\x3c\xcf\x2d\x3b\x81\xe9\x37\xd5\x14\x38\xb0\x6b\x5f\x99\x5d\xa3\x5b\xe8\x3e\x58\x6c\xd0\x0e\x0d\x8f\xfc\x44\xc3\x03\xe9\xc0\x42\x07\xd6\x73\xb7\xac\xe7\xfe\x51\x5d\x4f\x71\xac\x07\xa3\x3b\x1f\x14\xdb\x87\xed\x42\xc6\x88\x7a\x15\x7c\xcf\x40\x27\xe5\xbb\x41\xa9\x46\x95\x08\x64\xa3\xaa\xc0\xf0\x8c\x8a\x54\xb6\xe6\x63\xfa\xe3\x7a\x75\x02\x3c\xa6\x84\xb6\x4e\x86\xa0\xc9\x41\x25\xb1\xb2\x8e\x92\x58\x41\x54\xa8\x95\xc5\x6a\x4f\x0a\xff\x58\x45\xb1\x36\xd5\xdf\x98\xa5\xf5\x37\xa2\xb8\x81\x3f\xaf\xd7\x04\x7a\x07\x59\x64\xe4\x62\x59\xf8\x6b\xae\xb5\x24\xbd\x85\x43\x02\x61\xc7\x98\x91\xf4\x47\x50\xfe\xc5\x24\x01\x94\xcc\xdd\x3d\x7c\xd0\x49\xf3\x24\x47\x30\x21\xfe\x69\xca\x99\x42\x50\xfd\xd5\xd1\x60\x21\x6c\x03\x1a\xbb\x4e\x2a\x6d\xc1\xbf\x9b\x45\x9c\xfc\xed\xfc\xa8\xf5\xb3\xb5\x86\x09\x48\x3f\x9b\x6a\xdd\x76\x7d\x0f\x96\x3f\x7b\xea\x6a\x0d\x3e\x84\xe4\x55\xf4\x4f\x8a\x8d\x92\x74\xd6\xb2\xf6\x6e\x6b\x0f\x15\x4a\x85\xe8\xb6\x7a\x62\x5d\xb9\xd6\x86\xd4\xd7\x8a\x8d\xea\x6f\xca\x54\x33\x27\x03\x39\x6e\x21\x29\xb9\xb5\xf9\x40\x76\x5c\x56\xeb\x63\xff\xc5\xa5\xcd\x86\x96\xd7\x02\x99\x95\x42\xdb\x13\x36\x10\x34\x9a\xe1\xfa\xd3\x6a\x73\x4c\x2f\xf9\x5f\x2b\x51\xac\x48\x04\x6c\xcc\x09\x76\x1a\xd0\xfb\x67\x58\x21\xae\x14\x4e\x22\x00\xd5\x29\x55\xea\x55\x8e\x6c\x4b\x35\x2b\x04\x96\x9e\x70\xa3\x4f\xb4\x9d\xc7\x29\x20\x57\x1d\x4d\x1d\x33\xf5\x44\x82\xec\x93\xc4\xbe\x79\x7f\xc6\x42\xdc\xf7\x36\x25\x24\x26\x1b\xc4\x9b\xc9\xda\xfd\x7b\xb9\xc6\x4d\xcd\xb0\xc5\x73\xc0\x1d\x52\x65\x45\x95\x0b\xe3\x24\xbd\x11\x74\x18\xb1\x5b\x27\xd4\x8e\x28\xe5\xea\x88\x98\x81\x11\x5b\xe2\xcf\xb9\x28\x84\xfb\x13\xff\x9b\xe9\xa2\x40\x9f\x45\x64\x32\x97\xa5\xbe\x5b\xed\x0f\x13\x6f\xae\x2a\x72\x53\x57\x02\xb5\x6a\x74\x37\xe2\xe3\x46\xdb\x2e\x8c\xfc\x60\x84\x7c\xf3\x8a\x3d\xbf\x9d\x4b\x70\xaa\x81\x1c\x3f\x9c\x91\x23\xdc\xfa\x12\xca\xb8\xe6\x67\x24\x98\xbe\x18\x80\xcb\xff\x81\x0d\x77\x40\x69\xe5\x5a\x36\xc9\x69\x69\xbb\x35\xe6\x3c\xa6\x90\x42\x56\xc5\xbb\x81\x62\xaa\xa2\x35\x1d\x61\x92\x61\x31\x15\xc5\xb9\xe7\x8a\x32\x16\x4b\x16\x86\xf2\x10\xe4\xbc\x54\x23\x3c\x83\xb9\xa2\x59\x22\x6c\x1f\xc5\xb8\x93\x5a\x9a\xc3\x83\x4c\xf8\x55\x65\xc2\xcd\xc7\x9b\x36\xab\x97\x41\x4b\x00\x05\x4f\xb6\x05\x60\xa7\x7a\x78\x0d\xd2\x83\x60\xb7\x1f\x9b\xc2\x90\x3c\xb2\x49\x91\xdc\xa6\x65\x6f\x1d\x7f\x44\xa4\x80\x96\xdb\x75\x6c\xf0\x78\xaa\x82\x20\xff\x3d\xa6\x02\xaf\x86\xbe\xf7\x24\xd8\xae\x15\xab\xe8\xc6\x7b\x58\x31\xc1\xd4\xf5\xad\xb1\x1a\xca\x0d\x97\x05\x3a\xc5\x6e\xa3\xd5\xf3\xe6\x1b\x7a\xf2\xa5\xd6\x16\x7d\x50\x7d\x9d\x5f\x08\xf5\x71\x54\xf6\xf4\xfc\xac\x8f\x0a\x04\xad\xf1\x00\x1b\xcc\x81\x24\x1c\xac\xba\xbf\x42\x0c\x7c\xb0\x3a\x1e\xac\x8e\x07\xab\xe3\x23\x5a\x1d\xf9\x52\xf6\x51\xc2\x7d\x15\x0c\xda\x13\xbb\xf1\x73\x83\x82\xee\x94\xd5\x78\x0b\xaa\x06\x2c\xe2\xd9\xcd\x6c\xd4\x5a\x79\xef\x58\x5f\xf7\x12\x5d\x4d\x41\x67\x41\x50\xed\xf8\x08\xa2\x9f\xbd\x01\x91\x07\x6a\xbe\x47\x6a\x9e\x97\xab\xcf\x55\xdf\xc1\x82\x5f\x32\x9d\xd5\xa8\x56\x2a\x90\x5b\xb6\xd0\x79\x48\x41\x68\xd2\xf0\x3a\x77\xf1\xb1\xc6\xd9\xa9\x43\x61\x98\xc5\x51\x97\xf5\x63\xc0\xf9\x59\x2e\x4b\x91\x59\x79\x13\xb2\x8c\x1b\x28\xd8\x9c\x24\x1a\x47\x47\x60\x83\xe6\x17\xa5\xd9\xb4\x2a\xc1\x02\xb3\x2c\x75\x26\x0c\x60\xca\x20\x83\x20\x8a\xc3\xd2\xa7\xde\xbd\x94\x97\xe2\x35\x3b\x66\xa7\x45\xf1\x1a\xa2\xce\xf2\x72\x05\xd1\x66\xc6\xf2\x99\x88\x9e\xbf\x34\x5c\x5b\xe4\xf5\xce\x6c\x19\x3c\x13\xe7\xa2\x94\x3a\xbf\x10\x99\x76\x1c\x42\xf7\xe9\x3b\x7a\x95\x57\x54\x8f\x4d\x2a\x66\xb0\x07\x9b\xa0\x77\xb6\xdb\x2e\x71\x4d\xb1\x22\x06\xea\x05\x73\xd8\x7f\x15\x43\xd5\x94\x56\xc7\xde\xd1\x98\x51\x92\x1e\x24\x88\xc8\xa1\xfd\x4d\x94\x3a\xb9\x5f\x1c\x85\xc9\xc5\x42\xe4\x8e\x6a\x17\x2b\x4a\x63\x2e\x8d\x4f\x3d\x6e\x98\x92\x54\x56\xd9\xe7\x19\x87\xcd\xb9\xab\x97\x3a\x5a\x23\x42\x3c\x26\x7a\x9e\xa7\x41\xaf\xcd\xb2\x5c\x8e\x11\xa0\x0d\xd1\x24\x53\x80\xa7\x18\xd2\x89\xeb\x44\xc7\xf2\x96\x35\xae\x5f\xdb\xb6\xf9\x88\x0e\xfc\xed\x7e\xf8\x5b\x5d\x2e\xe7\x5c\xbd\xa5\x64\x81\xb6\x0f\xea\xd3\x72\xcf\xcb\x58\xee\xd9\x9d\xc1\x79\xa9\x97\x7c\x06\xef\xe1\x5c\x17\x32\x5b\xd5\xea\x29\x7b\xd0\xca\xc3\x00\xee\xd1\xbc\x1a\xff\xcb\xd8\x17\xaf\x46\x60\xa5\x35\x84\xe2\x85\x13\xc1\x70\x79\x70\x6e\x53\x48\x16\x72\x32\xe5\x85\x21\x97\xe5\x2b\x5a\xfd\xd5\x11\x9b\x4a\x05\xbe\xf5\x65\x12\xc1\x80\x2e\xe1\x27\x6b\x65\x08\x71\xf8\x67\x26\x76\xf2\xa5\x0d\x29\x02\x3d\x59\xba\x2e\xd7\xf7\xe6\x69\x28\xa4\x97\x9f\x54\x58\x31\x67\xa2\xed\x7c\xb8\xd9\xca\x9d\xc3\x90\x52\xa0\xbe\x88\xc1\xb4\x2a\xa6\xb2\x28\x44\xee\x51\x0c\x27\x9a\x8d\x8a\xbd\x8c\x97\xa5\x7b\xc8\xba\xb2\x70\x50\x6e\x41\x9e\xf1\x1f\x31\xce\xbe\x7f\xf9\xaf\xec\x8d\x56\xd3\x42\x3a\x94\x84\x06\x9b\xe8\xa2\xef\x18\xe2\x9a\xfe\xe7\x01\x2c\xe2\x79\x6d\x63\x6b\xbb\x6e\x9c\x64\x3f\x81\x83\xbb\x70\x74\x65\xae\x6f\xd9\x8c\x97\x13\x3e\x13\x2c\x1a\x56\x22\x71\x10\x25\xc6\x1e\x74\x5c\xe0\xa7\x06\x88\x77\xdf\x1f\xe0\x5d\x8f\x34\x97\x78\xd9\xd2\x40\x1c\x53\x1e\xfd\x64\xc5\x9d\x34\x80\x50\x22\xd0\x19\x11\x2a\x6c\xba\x93\xc8\xb9\xe5\xe3\x04\xba\xbc\x1f\xbd\x47\x3c\xc7\x41\x6f\x5f\x9f\x6c\xcc\xb0\x48\x2e\xd4\x3b\x4a\x29\xe4\x33\xdc\xc3\x33\x76\x4c\x2f\xa2\xfe\x62\xcc\x0f\xec\xd9\xef\x79\x76\x3d\x83\x98\x28\xd7\x0a\x75\x45\xa0\xf0\xad\x1f\x1c\x56\x09\x24\x14\x5d\x1f\xc4\xef\x60\x12\x46\xfa\x81\x3d\xfb\x51\x97\x22\x19\xd6\x89\x7c\x19\xcf\x31\xd2\x04\xce\x07\x38\x0e\x1c\xcf\x20\x09\x5f\x1b\x70\x1a\xc6\x18\x68\x96\xd9\x07\x33\x5e\x67\x96\xfb\xd9\xf1\x51\xd7\xb0\x21\xa9\x48\x3d\x4f\xce\x96\xd3\x80\x25\x6b\xf8\x5c\xb5\x04\x26\x8f\x30\x6f\x2d\x01\xc5\xa3\xcc\xb7\xb3\x1d\x3e\xea\x64\x43\xb7\xb7\x34\x7b\xdb\xcc\x7d\x87\xde\xf7\xd2\xa1\xa4\xfc\xe6\xf1\x2b\x3b\xc7\xca\x72\x8f\x70\xf1\x95\x9d\xeb\xd2\x47\xe5\xee\x7b\x2a\x6d\x32\xc8\x15\xf0\x44\x67\xf8\x76\xd8\xfd\x4c\xb8\xcd\xe6\x7b\xda\xc2\x03\xc6\x1e\x06\xbc\xf7\x9f\xe0\x5b\x28\x50\xb8\x79\x86\x24\x2b\xd3\x63\xe0\xc9\x88\x94\xf7\x39\x0b\x69\x91\xa5\x9a\xed\xf7\x91\x20\xf7\xb0\xcf\x9d\x94\x13\x9e\x8d\x1f\xf1\xd9\xef\x78\xbe\x61\x9b\x34\xd9\x5c\xe4\x55\xf1\xd0\xeb\x1a\x38\x19\x86\x7f\xed\xf7\x18\x77\x31\x49\x6d\x3b\xf0\x9f\xad\x75\xab\x9d\xd1\x26\x5d\x6a\xd6\xb4\x43\xdd\x12\x7f\x85\x9b\x3b\xa1\x25\x5e\x1d\x81\x3c\x70\x75\x14\xff\x26\x9d\x05\x38\x34\x87\x22\xb5\x67\x60\x1b\x5a\x70\x70\x7f\x32\xb6\xac\x32\x08\x66\xbe\x16\x62\xc9\x08\x17\x4c\x64\x21\xed\x6a\x6b\x3f\x1e\x7f\x56\x78\x32\x7d\x4a\xde\xfb\x38\x9a\xd4\x3d\xb5\x4f\xcf\xcf\x5a\x7c\x4e\xa2\x60\xb0\x58\x3f\x9e\x2d\x3c\xfe\x06\x3a\xbd\xd5\x97\xd4\xb6\x08\x3d\x4d\x2f\xa4\x66\x7e\x33\x9c\x0a\xd9\x05\xcb\xfb\x5c\x30\x5b\x42\x72\x6a\x0c\x17\x2f\xa4\x0d\x0a\xa6\x14\x0c\xf6\xe4\x84\x76\xe6\x24\x72\x14\x2d\x3b\xa1\x31\x69\x83\x21\xf2\x31\xb9\x22\x9f\xe8\xca\xa2\xfd\x2a\xb6\x01\x29\x6e\xce\x31\x25\xd4\x4a\x58\x96\xe9\xc5\x12\x15\x96\x9b\x7c\xe7\x37\x43\xd1\x10\xcf\x64\xd2\x12\x93\xa2\x37\x98\x46\x49\xbf\x0c\x09\xb6\xa6\xba\x8c\x6b\x0e\xf6\xd2\xba\xad\x62\x7f\x47\xdd\x6d\x60\x49\x1b\x31\x5b\xf2\xec\xda\xfb\x58\xea\x19\x98\x52\xf5\x34\xae\xbb\x1e\xf4\xdf\x72\xa6\x4e\x78\x0e\xeb\xee\x3d\x56\xdf\xb2\xfb\x64\xcf\x05\xe5\xe8\x48\xdd\x0f\x65\x6d\xb9\x60\x2f\xa8\x8c\x65\xe2\x4e\x64\x95\x85\x3c\x07\x60\x71\x8c\xca\xec\xa8\x23\x95\x86\xdd\x48\x32\x27\x83\x05\x02\xad\x2c\xc6\xb2\xa5\x9f\xa9\x0e\x77\xa4\x7b\x1b\x05\xf3\x00\x97\x05\xb9\x8b\x82\x25\xc1\xa0\x12\xc6\x42\xfe\xcf\x64\x59\x84\xee\x62\xea\x0c\x40\x7d\x4a\x16\x41\x95\x12\x57\x94\x69\xf0\x11\x2d\x31\xaf\x46\x1c\x26\x47\x8c\x83\xeb\x25\xff\x19\xff\x86\x1f\xd9\x70\x9a\xbe\x58\x1a\xef\xef\x61\xa6\x9a\x96\x03\x9c\x89\x8f\x17\xa2\x9c\x89\xe3\x6b\xb1\xf2\xcf\xe3\xa8\xaf\x35\x08\xb3\x62\x06\x8d\xa1\x67\x8b\x17\x59\xa3\x9e\x4e\x13\x82\xa7\xf5\x1b\x89\x79\x56\x7f\xe4\xb2\xa8\x4a\x4a\xab\x3a\x4a\x4f\x3e\xd1\xbe\xa1\x41\x09\x70\x25\x05\x88\xd3\x2d\x29\x6f\xf5\x18\x31\xa1\x4c\x85\xb9\xee\xc0\xa6\x0d\x6a\xba\x2c\xf1\x48\xd0\x93\x58\x31\xd4\xab\x36\x77\xa3\x92\x1c\x5c\x4c\xb0\x67\x8c\x5a\x59\xe9\x6e\xb7\xae\x66\x2d\x65\x7c\x77\xf0\x1b\x26\xd1\x03\x6f\x2d\x0e\x47\xac\xa7\xd1\x2d\x0f\x15\x8f\x74\x05\x7a\x8a\x8e\x0c\x30\xa7\x21\x6b\xa5\xcd\xe6\xef\xee\x96\x0e\x9b\x04\x63\xf9\xe9\xc7\xb7\x64\xc5\xc3\xf2\xcb\x8d\xb9\xc9\x15\x03\xa0\x9e\x14\xea\x63\x76\xca\x54\x55\x14\x5d\x4d\x95\x0e\x2d\x7b\x4d\xbf\xcd\xe5\xf4\x40\xd6\xda\xca\x6b\xa8\xa8\xb1\x0e\xc2\x86\x0b\x34\xc2\x5c\xce\x45\xed\x97\x64\xd3\x8f\xfb\x7a\x6b\x97\xff\x39\xae\xa8\xcb\x94\x98\xdc\xde\xa6\x93\xa1\x3b\x86\x43\x21\x97\xa1\xff\xbc\x16\xab\x11\xe8\x7e\xff\xce\x96\x5c\x96\x70\x6b\x14\x58\x91\x7e\xf3\xea\xe6\x64\x18\x37\x82\x34\xcc\xad\xf0\x86\x17\x42\x59\x2c\x34\xcb\x04\xe6\x9b\x09\x90\x95\xdc\xc7\x88\xdd\x82\x8f\xcd\xb5\x58\xc5\x02\xfd\x57\x47\xd7\x62\x75\x75\x44\xcf\x7d\x29\x4a\x4e\xc0\x7c\x75\x74\xa6\xdc\xef\x1e\x09\x07\x15\x75\xc9\x57\x91\xe7\x05\xd7\x9d\xab\x23\xf8\x88\xbc\xd4\x16\x17\xb9\x75\x1d\x86\x21\xce\x1d\x0f\x7a\xee\xe9\x8d\x0f\x7e\xf9\xc9\x7e\xc9\x2c\xe9\xbf\x50\xe9\x6b\x3a\x2b\x3c\xc1\x11\xe3\xee\x06\xf0\x60\x21\x17\x38\x9d\x39\x34\x2e\x45\xc1\x7d\xd9\x56\x77\x4f\x40\xd6\xd0\x4f\xa1\x87\x8f\x70\xd4\x23\x18\xf9\x68\xbc\x01\x4c\x05\x12\x9d\xce\xd0\x36\x11\x72\x81\xe0\x86\xdd\x0f\xc1\x15\x2b\xec\x91\x2f\x29\x66\x44\x0f\x48\x38\xbd\x89\xfe\x25\x1b\xb9\x1f\xf9\x0b\xbb\xef\xde\x57\x38\xf0\x5a\x56\xff\x6b\xb1\x7a\x66\xf0\xf8\xdd\x5b\x99\xcb\xa5\x4f\x4d\xec\x2b\xbe\x82\xaf\x08\x3a\x34\xf8\x21\x10\xbc\xcf\xd4\x88\x7d\xd4\xd6\xfd\xe7\xdd\x1d\x78\xf8\xba\x5b\x7b\xab\x85\xf9\xa8\x2d\xfc\x32\x3c\xb0\x09\xa6\xe9\x93\x72\xf0\x15\x4a\x53\x2b\x2d\x91\xda\xc1\x43\xad\xf3\xda\x6b\x3e\x73\x9c\x9e\x5f\xe5\xda\x73\x4e\x1d\x14\x80\xc0\xb4\x8e\x41\x9b\xd3\x65\x6d\x6f\x3d\xc3\xd1\x50\x18\xa0\x06\x5f\xd0\xed\xa7\x80\xf0\xbf\x1c\x79\x04\x90\x77\xdd\xa5\xca\x8c\xc1\x95\x62\x90\xd5\xbe\x7c\xbf\xb6\x46\x0f\xd2\xd8\x0f\xc2\xf2\x4e\x74\xe0\x1b\x30\xfc\x7d\x22\x4c\x30\x0b\xe2\x6b\x31\x2b\x65\xe7\xc2\xca\x2c\x71\xcd\x87\x13\x9a\xf3\x1b\x31\xa2\xe8\x33\x77\x12\x45\x80\x9d\x1b\x5e\x4a\x8d\x85\xbc\x21\xde\x2e\x92\xf4\xe0\xce\x10\xe2\xab\x00\x03\x53\x46\xee\xff\xfc\x04\x2d\xdd\x72\x46\xcc\x2f\xec\xef\x1b\x92\xdd\x6b\x65\xa5\xaa\xfa\x84\x36\xdf\x24\x31\xa6\x7a\xd7\x49\xc8\x41\xec\xfe\x76\x84\x7e\x21\xad\x4f\x47\x4f\x99\xf5\x9c\x08\xe2\xae\x29\x58\x9e\x29\x54\xa9\xee\xc3\x94\x38\x5c\x3a\xb1\x14\x02\x10\xe1\xfc\xa2\x27\x60\xe2\x25\x03\x59\x9b\xf9\x5f\x2b\x11\x9c\xbb\x92\xdc\xfa\xd2\x18\xf8\x80\x4c\x67\xad\x76\x42\xcd\x95\xc3\xdd\x8b\x9b\x31\x47\x99\x07\x98\x14\xab\xdd\x32\x4b\x29\x88\x35\x55\xe2\xce\xfa\xf7\x1f\x56\x12\x2f\xe3\x0d\x9e\x0a\xc2\x30\x08\x26\xc6\x3a\x12\x00\x63\xb9\x65\x79\x2f\x2c\xed\x93\x46\x4f\xd3\x9d\x66\x50\x88\xc0\x3b\x16\xb9\x7d\x63\x31\xf7\x3c\xe4\xca\x84\xcc\x9a\x9c\x4d\xc5\x2d\x5b\x48\x55\xb9\xe3\x82\x1b\x5f\x72\x03\x7e\x3b\x97\x89\x95\xd9\x2b\x64\x90\xae\xfb\xd3\x46\x8f\x3f\x74\x62\x85\x7d\x86\x9b\xc4\xa3\xf4\x7c\x3d\x26\x9b\xce\x78\xe1\x4f\x8a\x4e\x9a\x94\x26\xb2\x34\x36\x78\x7f\x8d\xd2\x1c\xe3\xb0\x9e\x52\x64\x42\x86\xa3\xb4\xfa\x5a\x28\xca\x98\xe9\x3d\xc7\x16\xc2\x18\x3e\x1b\x1e\xdf\xd9\xd8\x55\x0f\x68\x5e\xd8\x28\x68\x84\x94\xd9\xa9\x0b\xef\x33\x93\xf8\x04\xa6\xf1\x84\x51\xd2\x0d\xc5\x7c\x3c\x1c\x4d\x56\xb5\xc8\x0b\x61\x45\xb9\x90\x4a\xe0\x69\x7a\x87\x15\xd8\x3a\x5d\x59\xd3\xd1\xcb\x42\xd8\x28\xc8\xa8\x04\xaa\xc9\x90\x10\x22\x0a\x57\xc8\x2a\x85\xee\x7b\x6e\x4e\x9e\x5d\xa7\x65\x13\x44\x39\x66\xe7\x7a\x59\x15\xdc\x46\x6f\x04\x2c\xff\x30\x66\x9f\x05\xcf\x8f\xdd\xc3\xdf\xb5\x53\x51\xa6\x55\x56\x95\xa5\x50\xd9\xea\x18\x7a\xe8\xe2\x98\xab\xfc\x38\x80\x77\xaa\xc6\xdf\xe4\x4c\x5f\x4c\xdf\x4b\x75\xdd\x17\xed\x4c\x4d\x90\x6b\xfa\xe9\xf3\xfb\xa6\x0f\x57\x54\xf9\x0c\x39\x8b\xfd\xa8\x85\x3e\xc8\xac\xd4\x97\x72\xd1\x9d\xba\x22\xb4\x00\x9d\x49\x84\x31\xf8\x09\xa4\xeb\x85\x6b\x81\x8e\x83\xac\x70\x67\x1f\x73\xa2\x76\xe5\x84\xa4\x5f\x93\x0a\x79\xdc\x8a\x63\x2b\x49\x09\xb7\xcd\x0e\x22\x51\xe8\xdc\x42\x6c\x02\x7a\xe8\x1a\xfd\x72\x42\x65\x14\xfc\x5b\x69\x18\x85\x20\xf9\x38\xea\x44\x0c\x05\x02\x41\x6d\x31\x98\x7a\x83\xa7\xb1\x52\x1a\x1d\x82\xfb\xb8\xa0\xd3\xd8\x8a\x58\xa1\x4a\xa1\x1a\xa9\x2a\x45\x0e\x8c\x2a\x62\x30\x27\x25\x19\xab\xdd\x8f\x94\xd0\x36\xf1\x07\xe4\x36\x25\x68\x93\x55\x2c\x13\x61\xb5\xc6\xca\x06\xd0\x17\x5e\x6c\xa0\x0c\x31\xa1\x7f\xf0\xfe\x71\x98\x78\x15\xd2\xe3\x83\xf4\x0f\xa4\x02\x82\xee\x83\x53\x28\x40\x36\x90\x1c\xc0\x23\xf0\xf2\x57\x60\x0a\xf0\x14\xa5\xf1\x96\x5f\x9f\x9c\x44\x06\xd8\xbd\xe6\x5c\x67\xe6\xc4\x1d\xe8\xf1\xac\x92\xb9\x38\x49\x0f\x6b\xdf\xc2\x95\x7f\xd6\x54\x9f\x60\x43\x1e\x83\xcb\x46\x50\xa2\xaf\x6a\x80\x80\x92\x68\x96\x62\x1a\x93\xa8\x87\xf7\xb4\x3c\x47\xd7\xab\x4a\x9a\x79\x02\x76\x70\x8f\x90\x44\x19\x26\x00\x65\x63\x28\xe2\x24\x55\x12\x6d\x4e\x93\x1a\x1a\x39\x88\xbc\xe0\xcd\xea\x58\x16\xb5\xba\x85\xe2\x6b\x25\xd6\xb6\xd0\xb7\x28\x93\x85\xca\x17\xd2\xb0\x99\xa6\x92\x0b\x72\xa6\xe0\x76\x80\xf3\x21\x17\x30\x04\x68\x70\xa8\x06\x8f\xcf\xe0\xf7\x3c\x14\x47\xc2\x00\x52\x2b\x87\x29\x8c\xe5\x8b\xbe\x04\x2b\x6f\x9a\x6d\x11\x6b\xda\xf0\xe7\x9a\xff\x2b\xed\xc2\x02\x1a\x42\x0d\x6e\x24\x7a\xb7\x8e\xe1\x40\x32\xe5\xcd\x4f\xee\x5c\x66\x15\x2f\xb9\xb2\x54\xe6\xc3\xf3\x7a\x8e\x3f\x59\x2e\x85\x32\xc7\xa4\x28\x46\xad\x31\x77\x58\xcd\x30\x23\x96\xbc\x84\x83\x00\x61\x01\x68\x49\x88\x40\xf2\x8c\x10\xa8\x75\x83\xe7\xb2\x9f\x32\xcd\x6d\x2c\x15\xfb\xfc\xe3\x9b\xef\xbe\xfb\xee\x5f\xd1\x4c\xc3\xd1\xcb\x57\x2a\xf6\xd3\xe5\x1b\x2a\xda\xb3\x99\x1e\x7e\xac\x30\x3d\x31\x72\xd3\xbb\xa6\x8f\xfe\xc9\xef\x44\x59\x79\xe9\x91\x79\xad\xe0\x35\xaa\x43\xff\xb0\x8d\x8b\xfa\xc7\xc0\x6c\x7b\xe7\xf4\x90\x6f\xc3\x17\x5e\xf2\xac\x8e\x46\xff\xf0\x69\x55\x14\x2b\x86\x7c\x8d\xbb\x39\xba\x56\x99\x66\x73\x6e\x78\xd2\xfa\xb3\xfe\xe4\xe4\x0d\xd0\x1b\xc7\x68\x92\x26\x54\x16\x46\xbb\x26\x63\xf6\xc1\xc9\xa7\xae\x83\x83\xa4\xb9\x2e\xad\x00\xff\xde\x3e\x9a\xbd\xad\xb3\xf8\xda\x0a\x7a\xbd\x9a\x5b\x56\xfb\xf9\xc7\x37\x0c\xa0\x0e\x9e\x30\xa8\xbb\xdc\x8b\xe1\x36\x60\xab\x34\xef\x52\xf4\x6f\x26\x17\xff\x3a\x6e\x21\x4a\x92\x3c\xbf\x5b\xcc\x2a\xef\x8f\xbd\xe6\xcb\x4b\xf8\x22\x02\xb4\x43\xee\x23\x0f\xf9\xee\xd9\x60\x54\x06\x9e\x38\xba\x8a\x42\x0a\x70\xe4\x25\xeb\x22\x00\xa8\x03\xef\x96\x22\xb3\xe1\xf1\xd2\x22\xd9\x73\xa5\x31\x1c\xaf\x0c\x36\x12\xb8\xd7\x5a\x26\x0f\xe3\x2d\x37\x14\x09\xe7\x67\x73\xd8\xf5\x05\xe3\x53\xeb\x13\xdd\x03\xa7\xa3\x12\xc7\xdb\x11\xd3\x50\xf4\x0b\x64\x85\x9a\x9b\x35\xac\x09\xb5\x00\xa7\xb5\x5c\xe2\x6b\x0d\x83\x96\x0c\xe4\xc5\x51\xed\x98\x26\x85\xce\xae\xdd\x59\x7f\xf2\xd3\xb4\x82\x1d\x99\x97\x42\x74\x44\x22\x83\x55\x0a\xe4\xb8\xd2\x63\x34\x1f\xba\x22\x15\xb1\xdc\x58\x31\x60\xc4\x78\x61\xe7\xba\x9a\xcd\xdd\x53\xf0\xcc\x81\x87\x5b\xd6\x4c\xed\x44\x0d\xfc\x29\x2f\x4b\x89\x1e\xb7\x28\x07\xc9\x85\xa8\xc5\x27\x8e\x7c\xc9\x1e\x8c\x47\x22\xc9\x14\x38\x2c\xb6\xd4\x39\x3a\x1f\xe3\x48\x52\xb1\xef\x5e\xfa\xc7\x8c\xb7\xfc\xa7\x6a\xe2\x3e\xfa\xe0\x1c\x9e\x01\x9c\x19\x32\xc5\x25\xf0\xe5\x1f\x35\xd8\xc2\xe5\x4c\x45\xa1\x8e\x8e\x38\x89\x25\x5d\xea\x7c\xcc\x4e\xe9\x66\xb9\x4d\x26\x45\xad\x4e\x6d\x52\x37\x17\xe3\x6c\xce\xcb\xbc\x6d\x92\xe7\x17\x67\x7f\xf8\xd3\xd9\xfb\xf7\x2f\xd6\xa6\x43\xaa\x0a\xb3\x64\x85\xe0\xaa\x5a\x8e\x08\xbd\xf8\x45\x44\x2c\x73\x7a\x7e\x06\x61\x13\x94\xb7\xc6\x40\x35\x39\x3d\xf5\x01\xaf\x6c\xc9\x4b\x8b\x38\x76\x54\x43\x6c\xee\x4c\x31\x73\x3d\x78\x6c\x07\x70\xa5\x8b\x00\x18\x71\x92\xab\x05\xb3\x22\x14\x0c\x54\xe8\x19\xaa\x21\x28\x93\x57\x56\x2f\x38\xde\x22\x5a\xa5\x9d\x40\x18\x45\xbf\x66\x66\x95\x06\x02\xcd\x83\x2b\x3e\x00\xe1\xfa\x63\x27\x3e\x88\x56\xeb\x8d\xef\x13\x21\x54\x44\x02\x7d\x34\x6e\x18\x1a\xd9\xa3\x64\xb8\x77\xca\x17\x11\xc2\x80\x18\x09\xb4\x82\xad\x87\x60\x25\x6f\x28\x80\x14\xf9\x00\xaf\xc6\xec\x1d\xcf\xe6\x4c\x28\x5b\xae\x48\x6a\x88\x45\xb6\xd2\xbc\x6d\xc1\x09\x21\xd3\x0b\x2a\x39\x11\xd3\xff\x27\x80\x8b\x23\x85\x79\x30\xac\x84\xf4\xa6\xeb\x08\xaa\x0e\x01\x80\xde\xd5\x31\x44\x6f\xb9\x71\x20\x07\xa0\x4a\x94\x51\x60\x27\x25\xca\x49\xb4\x78\x87\x2a\xd1\x07\xe9\xd8\x67\x42\x39\x3e\x4f\x6c\x90\x01\xfe\x90\x34\x6b\xd6\x3d\x5d\x96\x62\x2a\xef\x46\x41\xdd\x12\xe9\xe5\x08\x83\x9f\xb1\xab\xc3\x98\x50\x3f\x1a\x79\xfd\x4f\x1f\xdf\xff\x85\x9d\xfd\x08\xad\x3f\xc6\x02\xa0\xb5\xd7\xe4\x83\x5d\x63\xa8\x5c\xa0\xcd\x58\x09\x27\xe4\x4b\x09\x4a\x32\x8f\xaf\x30\xb6\x2b\x10\xf8\x20\x47\x58\x1f\x83\x01\xdd\xa2\xf6\x2d\x10\x1a\xe8\xe2\x4b\xfb\x65\x7a\x31\x91\x2a\x0a\x9c\xb4\x01\x2c\x58\x82\xb8\x3c\x04\xe4\x62\xf7\x5a\x4d\x53\x2a\x0e\xea\x5e\x76\x59\x15\xc2\x78\x7a\x19\xf7\x3b\x4a\xf5\x9e\xb6\xac\x54\x96\xa2\x8b\x42\xa8\x59\xcc\xfe\x41\x95\x5e\xbc\xc9\x28\x54\xcd\x88\x3a\x3e\x5a\x1e\xa9\x6d\x49\xf3\x14\x2a\x6e\xd6\x58\x9b\x10\x43\xe8\x4d\x82\xfe\x9a\x50\x02\x43\xcc\x4b\x94\xc3\x33\x3f\x50\xd4\xe4\xd3\x65\x08\xc5\x87\xf0\xa4\x63\x5f\xb8\x31\x96\xd2\xa1\x3a\xda\xd4\xec\xdb\x97\xaf\xd8\x1b\xd2\xa1\xe9\x92\xfd\xf3\xcb\x97\x78\x9a\x9f\x05\x37\x5a\x51\xc8\x9e\x7b\x5a\x1a\xaa\xdf\x80\x32\x19\xc9\x60\x0a\x2e\x59\x1a\x0b\x3b\xd5\x95\x0a\xf5\x81\x90\xc1\x2b\x0a\x6d\xad\x57\x49\xa7\xd1\x7d\x28\xb2\x3b\x89\x7f\xc5\x9e\x7b\x98\x2d\x56\xeb\x3c\x10\x6a\xb1\xc3\xb0\x9f\x5d\x8f\x63\xa4\xa7\x18\xef\xff\x02\x8b\xf7\x81\x89\x2c\xc7\xf7\x2c\xa7\xcc\xbf\x88\x46\x58\xe5\x6e\x11\xb6\xcc\xc5\x62\xa9\xb7\x52\xd9\xd1\x7d\x6e\x08\xf3\x66\xc6\x91\x1b\x47\x97\x49\xc9\x5f\x13\x3c\xd3\x3c\x65\x61\x38\x0f\x8e\xb9\x30\x00\x86\xc6\x42\x75\xdb\x7b\xe9\xf4\xb6\x95\x0f\x64\x9b\x5b\x57\x9b\x4a\xa9\xe9\xcf\x04\x4a\x7d\x5b\x6a\x28\x15\x85\xa2\x80\x50\x53\x8d\xa9\xd9\xa0\x86\x0c\x52\x66\xa9\x6e\x78\x29\xb9\xb2\x4e\x64\x20\xf4\xee\x05\x7b\xe2\x02\xeb\x32\x42\x9f\x7b\x16\x68\x95\xbd\x5f\x1e\x07\x56\x5e\xab\xba\x26\xd4\x31\x1a\xb2\x70\xef\x82\xaa\xf8\xa5\x7c\x90\xc3\x25\x80\x07\xbd\x4f\x9f\x83\xb8\xe8\x26\x35\x66\x9f\x7c\x4d\xdb\x51\xb7\x6b\x55\xa5\x9a\x9e\x55\xd2\xb0\xb9\xcc\x73\xa1\x20\x55\x85\x5b\xfe\x09\x64\x48\x84\x8f\x33\x61\xb1\x16\xe8\x0b\x24\x86\xd1\x77\x92\x36\xa4\x9e\x59\x27\x99\x14\x32\x93\x4e\x94\xe1\xe6\x1a\x51\x91\xf7\x03\xaa\xcf\xe7\xd5\x61\xb1\x24\x97\x4a\x97\x89\x68\x61\x54\xe3\x8d\xa0\x62\x11\x01\x53\x42\x43\x83\x67\x13\xea\xb4\x83\x31\x27\x3d\x76\x12\x68\x97\xa5\xbc\x91\x85\x98\x89\xdc\x6b\x2c\x39\x4a\xb9\x60\x8c\xc9\xe5\x74\x15\xc7\x25\x39\x44\x46\xe9\x66\xe4\xc5\x05\x42\x36\x41\xab\xef\xe5\x0c\x27\xb4\x29\x28\x12\xba\x4d\xf1\xe0\xa1\xce\x8a\x0d\x88\x2f\x36\xb9\xa3\x7c\x40\xef\x13\xb2\x1a\x5f\x8b\x95\x49\xfc\x0c\xd6\xcd\x21\xee\xa6\xca\x19\x57\xf2\x6f\x28\x1e\xfb\xb4\xc5\x7f\x13\xec\xb9\xc9\xf4\x92\x14\x9d\xe0\x10\xf0\x22\xd1\x66\x72\x4a\x1f\x13\x7c\x05\x0c\x3a\x42\x39\x40\xc0\xd7\x11\x1f\x98\xa1\x31\xa0\xbc\xef\x3d\x54\xa1\xb4\xe7\xc7\xd2\x82\x6e\xf0\x72\x05\x04\xef\x8d\x41\x44\x92\xa8\x4e\x35\x8f\xda\xca\x31\x3b\x33\x91\x34\x03\x83\x8f\x78\x23\xc9\xb1\x69\x12\x91\x14\x90\x4e\xa2\x7f\x87\x7a\xc2\x85\xbe\x0d\xfa\x00\xb4\x60\x7a\xc1\x52\x34\x10\x30\x14\xf5\x8d\x29\x80\x50\x7b\x8a\x62\x8f\x74\xcf\x77\x35\x0e\x84\x69\x59\xca\x05\x2f\x25\xe0\x0e\xaa\xb7\xe5\xf8\xe3\x80\xd5\x22\x6d\x21\x88\xa8\xd9\x32\x23\x30\xb7\x06\xc5\x6f\x7b\xb5\x91\x49\x37\xff\x08\x67\x37\x94\x9c\x85\x83\xde\x70\x53\xa8\x3a\x4e\x73\x96\xe0\x2f\x74\x63\x90\x84\x49\xad\xdf\x68\xe2\x8e\x97\x28\xa0\x9b\x2e\x59\x18\x14\x40\xa1\xbf\x57\x47\xb1\x29\x86\x23\xa7\x9f\xc8\xd9\x26\x16\x45\xab\x67\x48\x19\xb3\x8f\x58\x7c\x37\xd8\x56\x78\x29\x6a\xac\xdd\x44\x30\x78\x8f\x39\xba\xae\xc4\x55\x1d\x27\x0c\x9f\xae\xf1\x75\x28\xf6\x68\x13\xec\xda\x49\x01\xbe\xa5\x5d\x01\x12\xf6\x42\x17\x67\x6f\x3f\x5e\xfc\xff\xdf\x9f\xfe\xfe\xdd\xfb\x9d\x5c\x6c\x58\xdf\xf0\x04\x06\xb7\x4a\x94\xa1\x2e\x7a\x1f\x8a\x7b\x4f\x14\xd6\xef\x8a\x02\x95\x89\xd3\xa8\x53\xd3\xd3\xf7\xef\x43\x3b\xe2\xe4\x80\x7c\x00\x2d\x06\x62\x1a\x3c\x5b\x6b\x1a\x74\x3a\xa8\x46\xd0\x75\x2a\x7a\x44\xb2\xb5\xe0\x8a\xcf\x7c\x01\xbf\x88\xf6\xa8\x54\x3d\x57\x5e\x2c\x55\x35\xf2\x05\x64\x4d\x7a\x40\x22\xfb\xbd\xef\x19\xa9\x5b\x64\x53\xf0\x52\xc9\x85\xda\x96\x15\x3a\x4e\x94\xc2\x57\x32\x9f\xa4\x45\x3b\xb5\x12\xb8\x2e\xac\x7b\xe7\x07\x79\x64\x8f\xcb\x4f\xb5\x3b\xdd\xde\x65\xba\x92\xf9\x83\x3d\xa6\x07\x3a\x1b\x9c\x2a\x6f\xce\xc7\xa7\x44\x1e\x7b\xc1\x8b\x0c\x5d\xdb\xf7\xef\x6c\xf0\x21\xf1\x79\x71\x0f\xd8\x89\x28\x0b\x69\xac\xcc\x58\x62\xc0\x1f\x51\x07\x18\x33\x49\x4f\xed\x56\x89\xcc\x5b\xb0\xd7\x60\x46\xef\xa0\xdf\xd2\x65\x8b\xd7\x72\x30\xe8\x38\x6c\x00\x0e\x0e\x0c\xeb\x2c\x7a\xd7\xaf\x9a\x5b\xce\x30\x07\x87\x4b\x4c\x31\x17\x6d\x04\x98\xa1\x08\x53\xe3\x83\xaa\x2f\x83\x6c\xe2\xbd\x2b\x1b\x6a\x19\xda\xd2\x45\xe3\x97\xed\x5a\x71\xf1\xb8\xae\x15\x7e\x65\xee\x31\x76\x2f\xea\xa7\xb3\xb7\x9e\xc8\x11\x53\x24\x15\xc9\xe2\x8e\xf9\x03\x52\x85\x2f\xab\x61\xb7\xf2\xe6\x42\xbb\x5a\x22\xab\x92\xa8\x1e\xea\xd6\x16\xad\x98\xa9\xa0\xfa\xfa\xb4\x2a\x22\xc3\xb2\x5e\x3e\xa4\x5e\x11\xdf\x01\x26\xbd\x16\xad\xd8\xf9\x4f\x97\xa9\x2d\x73\x28\x80\x3d\x84\xb1\xa9\xe4\xd0\x0a\x30\x5b\x7b\x7f\xd4\xf1\x6b\xa7\x07\x48\xad\x59\x34\xc7\x08\x85\xe6\x90\x24\xa8\xcc\x6a\x56\x08\x0b\xfe\x5f\xb4\x85\x15\xc8\x68\xb7\x2a\x7a\x33\x00\x73\x54\xfb\x25\xbc\x3c\x22\xb1\xc1\x84\x8f\xf7\x4e\x6a\xae\x90\x50\x64\x44\xd6\x1a\x32\xe2\x1f\x23\x63\x33\x62\x06\x30\x48\x49\xfa\x93\x64\x00\x20\x7d\x7d\x4e\xd2\x49\x12\x3b\x0f\xae\xb5\xd2\x2e\xb5\xe2\x30\x0e\x90\xe1\x9f\x3b\xc9\x72\xbb\x9e\x78\x1f\x55\x8b\x83\xdf\x15\x58\xc0\xe0\x8a\xbc\x09\xb3\x3f\xc2\xc7\x91\xfe\x11\x3b\xfd\xf8\xd6\x3b\x1d\x02\xe7\x14\x34\x8d\x57\x47\x31\x4d\x8b\x1f\x30\x4d\xac\x44\x6c\x49\xec\x18\xd9\x87\x35\xf5\xfa\xb5\x58\x1d\xe3\xa3\x45\x67\x19\xb4\xb1\x90\xd1\xd4\x83\x53\x0c\x0f\xab\xa7\x1b\x83\x04\x4f\x63\x76\xa9\xa3\x7f\x80\xd7\x71\xa2\xad\x4c\x09\x91\x1b\xe0\x92\xdd\xb4\x57\x47\x6c\xe9\xc8\xa3\x49\x0f\x13\x56\x38\xc2\x30\xa3\x5b\x69\x04\xfb\xfe\xdb\x6f\xd9\xf3\x9f\x14\x19\x72\xc0\x8c\xf9\x0e\x6a\x2c\xbf\xe8\x4b\x84\xb4\x21\x8b\x53\xe4\x8f\x86\x9c\x7c\x63\xfb\xc0\xc4\x85\x54\x85\xc3\x78\xae\x8e\x75\x0c\xc9\x8d\xd6\x84\xb2\xaf\x9f\x79\x6c\x88\xbc\xbc\x69\xd5\xfb\x13\x14\x37\x53\xad\x9d\xae\x6d\x7f\xb8\xfe\x1c\xf2\x60\x74\xa1\x78\xf8\x8a\xe2\x3d\xd9\x1f\xac\x66\x33\x09\x35\x3a\x1c\x77\x52\x0a\x9b\x38\x55\x41\xa2\x40\x82\xd8\x3f\x85\xbd\xb1\xf3\xd3\xcb\x37\x7f\x0c\x5a\x86\x89\xce\x57\xe3\xad\x1d\x12\xcf\x5b\x33\xa2\xad\x2d\x37\x6d\x15\xa8\xc7\x7a\x76\x34\x95\xf0\xb1\xcf\x7d\xa1\x16\x5f\xa1\x45\xd8\x6c\xfc\xa2\x99\x36\xad\xd7\x03\xb1\x1f\x18\x2e\x6a\xd1\xe5\x96\x97\x33\x61\xd9\x4f\x67\x6f\xf7\xe4\x7c\xda\x9d\x85\xb7\xeb\xd4\x3a\x7b\x40\x6a\x69\x93\xda\x39\x6a\xe2\x46\xc2\x43\xd5\x52\x56\x43\x16\xe8\x98\xd9\x79\x44\x14\x1a\xe8\xba\x4a\x46\x6b\xcd\x1b\xdd\x43\x8d\x63\xaf\xa3\xc8\xd6\x26\x4b\x1f\x52\x63\x6d\xfd\x34\xda\x3d\x11\x61\x6d\x20\x2e\xa3\x1a\x3f\x8d\x45\x45\x0d\x25\x56\xab\x3f\x3b\x07\x9a\x24\x67\x55\x29\x1c\xa0\x0c\x3d\x94\xc1\x64\xbc\xbe\xc3\x1e\x96\x81\x26\xf3\xb2\xa3\x37\x8d\x9a\x4a\xa2\x13\x10\x4a\x48\xfe\x1e\xd1\x93\xd5\x86\xe4\xd5\x7c\xa2\x6f\x44\x48\xb7\x2d\x8d\x97\x37\x39\x9b\x6b\x63\xb1\x0c\xbc\xff\xd7\xeb\xa5\x2e\xed\xc8\x6d\x5d\xbb\x03\x80\x3f\xf7\x05\xcc\x18\x9c\xdb\x09\xb9\x18\xec\x02\x02\x0b\xd9\x01\xa3\x30\x00\xf6\x05\xca\x3f\xa7\xd5\x33\xeb\x5b\x60\x9c\xc7\xa0\x48\xd6\x43\x12\xe3\x3d\x26\x31\xce\x74\xde\x47\xe0\x2f\x42\xf5\xb5\x3f\x5e\x5e\x9e\xfb\xcb\x73\x9d\xa2\xa8\x87\xc1\x4e\x23\xf6\x32\x64\x9c\x15\x6d\x90\xd8\x6f\xff\xfb\xae\x99\xe9\xea\x28\x17\x96\xcb\x5e\x73\xc8\xbb\x3b\xd2\x71\x63\xcc\x91\x31\x3a\x93\x20\xea\x05\x0d\x5b\x09\x76\xe7\x31\x43\x0f\x12\xfc\x0b\x6e\x04\x61\x84\x49\x6b\x1c\x1b\x8a\xa9\x5a\x60\x24\x9c\xb4\x69\xf9\x0b\xfe\x0f\x5e\x0f\x03\x33\x06\x47\x84\x56\x1f\xdc\x4c\x83\xe8\x85\xe1\xbd\x2b\x0f\x7f\xe2\x2e\x13\x4b\xeb\x13\x32\x4e\xc1\xe1\x80\x24\x53\x5a\x9e\x3b\xaf\x5d\x06\xd5\xbf\xa5\x73\xbc\x07\x3f\x7a\xc8\xd5\xbb\x3d\xc7\x4c\x21\x53\xbd\x86\xf8\x79\xb5\xe0\xea\xb8\x14\x3c\x07\xa2\x90\x7c\x0f\xfe\x1f\x14\x40\xe8\x75\x90\x9e\x51\x1a\x4c\xb1\x82\xdb\x57\x5f\x08\x16\x57\x39\x2f\x73\x0a\x7c\x0b\x41\x11\x8f\x70\x84\x0f\x09\xf4\xf7\x71\x9d\x6b\xda\x60\xf7\x7a\x7a\x8f\x9d\x46\xed\x3c\xf8\xdb\xf9\xaa\x71\xdc\xe4\xc7\x8e\xa2\x37\xa5\xd9\x80\x54\x50\xee\x76\x5a\x92\x7a\xa3\x55\x29\xd5\x73\xd4\x92\xfa\xc4\xa8\xc8\x53\xef\x12\x93\x15\xbc\x44\xbe\x94\x2b\xc4\xb1\x74\xf5\x80\x63\x27\x95\x23\x9b\x02\xd1\x8b\xbe\x11\x65\x29\x73\x87\xb5\x86\x33\x2e\x75\xd2\xdd\x49\xbc\x75\x1a\x35\x0c\x36\xab\x4f\x10\x99\xfa\x9a\x5d\x1d\x5d\xa0\x5e\xee\xea\xc8\x71\x1a\xc9\x31\xec\x1a\x52\xcc\x52\x64\xa0\x59\xa5\x45\x0f\xe2\x65\x88\x71\xd8\x69\x16\xda\x8b\xc6\xfc\x3b\xac\x06\x81\x43\xbf\xe1\x95\xe9\xd6\xe8\x25\x6d\xbc\xc4\x47\xb1\xb5\xad\x19\xa2\xf8\x52\xd2\xb0\x90\xb9\x07\xbc\xa1\x63\x6c\x72\xc6\x8d\x30\x14\xb8\xe4\x0b\xc0\x40\x6c\x27\x5a\x21\x85\xca\x74\xe5\xb8\x96\x24\x87\x54\x2b\x13\x06\xa4\x70\x03\xbb\x4e\xc9\x9c\x1b\xe5\x0c\x43\xd6\xaa\x8c\xa3\x57\x82\x7b\x31\xb0\x84\x11\xe3\x58\xea\x10\x48\xa0\xc3\xf5\xff\xf3\xe2\xd3\x47\xc7\x34\x27\x59\x98\xc0\x68\x42\x11\x6a\x2c\xd7\x16\xad\x14\xda\xd8\xa9\xbc\x63\x3e\x8c\x0a\x98\x11\x85\x8c\x0a\xb7\x08\x6b\x8e\xb9\x3a\x2d\x4b\xbe\xc2\x9d\xfe\x4d\x94\xfa\x58\xaa\x5c\xdc\x39\xa2\xc1\x7e\x74\x6b\x25\x5b\xfc\x72\x29\x78\x59\xb3\xaf\x61\x44\x52\x1a\xa9\x0f\x8b\x37\x2c\xaf\x04\x8a\x1a\xd0\x7b\xce\xa1\x24\x50\xe3\x60\xc7\xec\x13\xb1\x0b\xa0\x81\x7e\x87\x5e\xe4\xe6\xf5\x95\x62\xec\x0a\x34\x2a\x57\x47\x64\xd9\xc5\x13\x0b\x3f\x7a\xc1\x8c\xbc\x5e\xfc\x11\x62\x47\x30\xde\xfd\xdb\xcb\x7f\x1f\x0f\x18\x01\x23\x7f\x71\xf1\xc1\x40\x49\x43\x0c\xcf\xdd\xb6\x1b\x52\x06\x27\xe7\xff\x80\x13\xf2\xb5\x6f\x71\xed\xa1\xd8\x89\x8f\x27\xe2\xe6\x58\x52\x4d\x83\x12\x9c\xf1\xb6\x08\x3f\x7e\x30\x0d\xe8\x5a\xf1\xbd\x51\xfd\x3e\x45\xb2\xb7\x0d\x16\xb9\x1d\x93\x50\x2b\x9f\xe2\x04\xc3\xe2\x83\x3b\x0d\x8b\xcf\x1d\x9f\xea\x87\xd3\xbf\x24\xa1\x95\x69\x3c\x9a\xf6\xe8\x28\xed\xde\x82\x93\x42\xc8\x39\x7a\xcd\x12\xa5\x0b\xd8\x81\xb3\x8b\x34\x3d\x42\x90\xd7\x6e\x21\xa4\x22\xbc\xde\x34\xb1\x58\xc3\x8a\x49\x31\x7d\xf4\x0a\x49\xb8\x04\x1a\x19\xb4\x02\x81\xb9\x06\x75\x98\x9e\xa2\x37\x48\x18\x7d\x94\xc6\x78\x72\x63\xaa\x05\x21\x2a\xc7\xaa\x87\x56\x1e\x36\xbd\xaf\x18\x16\x62\x19\x61\x25\x96\x5c\x94\x7e\x92\x0d\x89\x1a\x00\x75\x6c\x52\x75\x20\x7e\xa1\x6c\x1b\x3e\x20\x17\x33\x2a\xd0\xfd\xb5\x09\x38\x78\x92\xfe\x84\x11\xfd\x47\x7f\x93\xf4\x2b\xe2\x3a\x7f\x81\x38\xa6\xc8\x09\xaf\x3d\x76\x8d\xaa\x84\x0a\xd2\x78\xdb\x96\xad\xbf\x8c\x65\x52\xc3\x6d\x35\x29\x4f\xdb\x81\x11\x77\x95\x9e\xcc\xae\x0a\xa8\x5e\xfa\x0a\xf1\x0f\x5f\x11\xfb\xa4\xd0\x6b\x2c\x5a\x33\x51\x6c\x05\xdf\xf6\x34\x44\xc2\xc7\xa1\x85\x29\x9c\xe0\xf6\x04\xc4\xa0\x0d\x86\x83\x10\x67\xfc\xe0\xb3\x62\xcf\x29\x44\x96\x10\x71\x28\x70\x0e\xc3\x93\xde\x10\xd5\x68\x3e\xd1\x4b\xfe\x62\x0b\x8a\x62\xcb\x15\x38\x86\x6f\x8e\xe6\x3c\x9b\x46\xa7\xf0\x51\x2d\xe2\xae\xad\xf4\x50\x10\x31\x62\xa0\x39\x86\xaa\xe7\x63\x76\xe1\xae\x9e\xb8\x34\x14\x99\xd1\x61\x3d\x15\x8f\xd1\x9d\x83\x5f\x83\x22\x9d\x17\xa0\x78\xb2\x82\x71\x2c\xbb\x71\x9c\x38\x88\xd1\x40\xb6\x4e\x72\xc3\x98\x73\x7d\x8b\x01\x7e\x56\xb3\x5b\x2e\x6d\x58\x25\xbf\xf6\x42\x7e\x73\xf8\x1d\x68\x77\xb6\x30\xdd\xf8\x5a\xe7\x5d\x17\x1d\x43\x3c\x3b\x2e\xfb\x89\x1a\x7d\x7a\x73\x53\xf8\xb4\x14\x9c\xdd\x96\x8e\x41\x2d\x19\x07\xab\x2f\x3a\xa6\x63\x86\x0a\xd8\x2e\x15\x1b\x37\xa1\xf2\xff\x82\x97\x66\x0e\x69\xe7\xdd\x8d\xfe\xe5\xf4\xc3\x7b\xa0\x75\x8e\xb5\x1e\x33\xf6\x67\x1c\x0d\x79\xe2\x60\x4f\x9a\x42\x82\x41\xb5\xf2\x87\x3e\xe5\x99\xd5\x98\x29\x61\xae\xf3\x24\xdb\x0f\x40\xf4\x92\x67\xd7\x7c\xe6\x5e\xec\x54\x94\xe6\x11\x12\x61\xfc\x19\x12\xe2\xdd\xf4\x25\x77\x83\xaf\xf5\xcc\x60\x04\x1e\xe2\xc6\x27\xd9\x43\xef\xa9\x04\x59\xf6\xd9\x39\x60\x37\xc1\x7f\x11\xbd\x91\x37\x9b\x36\xa8\x61\x37\x64\x7f\xf2\x9e\x85\x4e\x1c\xf8\xc6\xb1\x95\x97\x8e\x41\x91\x86\x9d\x42\x2d\x24\x5d\xb2\x0f\xe4\x79\x85\x75\x31\x95\xb8\xc5\xb0\x8b\x7a\x20\xda\xb8\xd9\x1d\x53\x6e\x53\xa7\x96\x0e\x69\xa9\x2f\xff\xc4\x43\x0e\xcf\xe6\x60\xef\x1c\xca\x78\xcd\xbe\x89\xaa\xfd\x52\x38\xa2\x01\x4a\xd2\x1f\x48\x79\x0f\x54\x01\x70\x09\x84\x26\x19\xa1\x0c\x88\x2a\x75\x4b\x93\xa3\x30\xe2\xce\xde\x5b\xa3\x59\x56\x0a\x40\xfe\x33\xbf\x7d\xe7\x93\xeb\x37\x91\x09\x41\xde\x7f\x7e\x2d\x85\x41\x02\x9f\xfd\x4a\x83\x51\xd7\x98\x9b\x6b\xd6\x6c\x9c\x63\x1f\x05\x6b\x76\x35\xe9\xa0\x6a\x35\xbb\x9b\x6c\x37\x7b\x7b\xbc\x99\x1e\x52\xe9\x65\x17\xdb\xb8\xd7\xb8\x7b\x5d\xf4\x4e\x6b\xd3\xec\xe0\x88\x06\x55\x8c\xd8\xc9\x3c\xdd\x35\x63\xbe\xf2\xf0\x0f\xab\x47\xf3\xf0\xc5\xdf\x77\xe0\x07\x55\xa2\xd9\x78\x28\xbb\x2c\x43\xb3\xa3\xad\xf4\xd5\xa0\xd9\xd1\x14\x03\x0a\xd0\x3c\xfc\xc2\xbb\xaa\xcf\xec\x68\x0f\x5b\x94\x82\x79\xf8\x5e\x76\x39\xd9\xce\x8a\xce\xec\x6a\xa6\x0d\xc5\x60\x1e\x7e\x7a\x0f\x9e\xe1\x7e\xb5\x66\x5a\x59\xcf\x2e\x01\x24\x6d\x94\x26\x43\x9b\xeb\x22\x67\xf1\x49\x32\xa9\x62\xba\x3a\x5f\x42\x1d\xec\x04\x97\x9a\x2a\xb5\x4a\x33\x42\x8e\x9a\xfb\xd2\xac\x20\xe8\xcd\xb9\x61\xb5\x49\xb8\x01\x9b\x09\x28\x38\xa5\x62\x2b\x5d\x95\x61\xe8\x51\xea\xf9\x02\x09\xf6\x50\xe3\xe9\xc5\x0f\x6a\x1e\x1c\x56\xb0\xcd\x98\xfd\x45\x57\x98\x10\x41\x91\x17\x03\x32\x38\xa2\xc4\xf6\x3e\xbf\xed\xb2\xa8\x66\x12\x5d\x15\x70\xf1\x27\x27\xec\xcc\x8f\x45\xe2\xe1\x6b\x5c\xd9\x87\xd5\xe9\xf9\x19\x4d\x4b\x15\x23\xfe\xf3\x4a\x5d\x59\x7f\xb8\x4e\xe4\x80\xfc\x85\x5f\xfe\xc3\x68\xf5\xfa\xea\x68\x24\x55\x21\x95\xb8\x3a\xfa\xe2\x9a\x7d\x58\x9d\xe3\x5c\xbe\x3d\x0d\xe5\x5b\x2f\xe8\x3b\x34\xff\x3b\x4e\x89\xbf\x9c\xd6\xa6\x3b\x45\x9b\x8c\xf7\x66\xf0\xdd\x39\xfe\x8c\xbd\x69\x23\xef\xee\x1e\x65\x23\xb5\xbb\xdc\xe3\x76\x3e\xa1\x49\xe8\x56\x96\x14\x3a\x0e\x46\x36\x50\xae\x17\x5a\x5f\x83\x9e\xd1\xce\x31\x8f\xf1\x35\xc2\xdf\x6b\x9c\xe4\x0a\x1e\xd8\xd5\xd1\xeb\xab\xa3\x64\xf3\x57\x47\x23\xfc\x18\xfd\xb2\xa0\xc9\xcd\xab\xf0\x25\xee\xc2\x8f\x94\x8e\x45\xfb\xf1\xad\x6d\xb2\xec\xd7\x57\x47\x53\xad\xe9\xcb\xdf\x47\xb4\x89\x0b\x8d\xb6\x01\xca\x65\xf7\x3f\xd8\x5b\x81\x1e\x48\x60\xe5\x02\xbd\xb9\xdb\xbf\x93\x9d\x57\x7c\x01\x69\x93\x2a\x45\x6a\x10\x6f\xc0\xf0\x41\xea\xe0\xb8\x03\xd9\xa3\x6a\xef\x25\xbd\xdd\x31\xbb\xc4\x58\x2f\x18\x19\x74\x50\xfc\x16\x4f\x8d\x62\x35\x21\x31\x65\x2c\x4b\x5b\x29\x07\x29\x3e\xb3\x2f\x66\x1f\xb6\x62\x49\xa5\x89\x32\xbd\x5c\xb1\xe7\x98\xcb\x77\x79\x3d\x3b\x41\x6f\x32\x77\x6c\x2f\x62\x1a\xab\xb5\x87\x08\x09\xc2\x10\x52\x3c\x1c\x3e\x33\xde\x05\xff\x22\x9b\x8b\x05\xe6\x1f\x89\xa3\xb1\x69\xa5\x32\x4b\x38\xc6\x58\x0e\xbe\xb6\x88\x3a\xe0\xb2\x71\x95\x11\x02\x28\xbd\xa6\x54\x35\xac\x32\x62\xb6\x2a\x21\xfa\x43\xda\xb8\x3c\xaf\x5b\xf2\xb1\x70\xab\xa5\xb7\xa0\x58\x5d\x86\xc6\xd0\xd4\x9f\xe1\xf3\xcb\x4f\x6f\x3f\xbd\xf6\x29\xa1\x32\x6e\x20\x32\x6e\x2d\xeb\x0f\x3a\xde\x55\xea\x5a\xe9\x5b\xe5\x07\x0e\x6f\xe4\x27\xfa\xbd\x11\xb9\x99\xf9\x18\x30\x5a\x81\xc8\xc7\x2f\x7a\x54\x39\x9f\xf9\xed\x00\xd5\x8d\x6b\xd5\xad\xb7\xf9\xcc\x6f\x63\x08\x54\x2e\xca\x02\x32\x80\xd6\x4c\xd5\x8d\x88\xc1\x01\x59\xf5\xa3\x6e\x6c\xb2\xb2\x62\x6b\x6d\x62\x65\x65\x31\x96\xca\x1a\x5b\x8e\xcf\x94\xfd\x54\x62\x52\xe5\x9e\x1a\x48\xa1\x0d\xe5\xa0\x04\x57\x71\x1f\xd8\x08\x94\x0a\x4a\x4e\xd9\xef\xbe\x85\xdc\x5a\x84\x5e\xc6\x0c\x0b\x09\x01\x49\x93\x0a\xc1\x47\x97\xa8\x5b\xa4\x77\x06\xfa\x46\x77\x1f\xe1\xe5\xb9\x5f\x20\xbf\xc2\xb2\xd4\x79\x95\x09\x48\x40\x9f\x69\x65\xaa\x85\xf0\x21\x97\x8a\xd4\x48\xde\x22\x0c\x51\x5d\x98\xa1\xda\x91\x4e\xc8\x51\x3b\xad\x67\x62\x83\xc9\x91\x2e\x86\x95\x73\x28\xc8\x4c\x91\xd3\x6e\x1a\x4c\x70\x32\x58\x33\x29\x95\x3d\xd6\xe5\x71\xa2\x2e\xda\x70\xf2\xbe\xfe\xdb\x99\x9a\xea\x9e\xe3\x9e\xea\xa4\x88\x04\x76\xc1\xfa\x4b\xc1\x64\x3a\x06\xf5\xfb\xad\x78\x56\x14\xec\x96\x93\x6f\xb7\x34\xde\x26\x82\xe9\xb1\x93\xe6\x3d\x50\xbe\xe0\xff\xa1\x83\xfe\xfd\x68\x21\x55\xf2\xd7\x4c\xda\x66\x08\xd5\x4c\xda\x37\x7a\xb1\x90\x36\xfd\xe5\xb2\x14\xe2\xc2\x72\x1b\x35\x9f\x93\x4a\x16\xf9\xdb\xf4\x97\x99\x6e\x0e\x95\xe9\xc5\x52\x16\x51\xf9\x7f\xb4\x2c\xb8\x75\x6b\x1e\xf0\xea\xe2\xf8\x1b\xf5\x77\x6b\xd3\x0d\xee\x11\xf7\xba\x4d\x97\x78\x18\xdb\xf4\x6a\x71\x55\xde\xd0\x47\x6f\xdd\x05\xaf\x7a\x78\x73\x80\x85\xc1\xcd\xc3\xed\x0d\xd4\xa8\xae\xbf\x97\xeb\x6a\x22\x8e\xf9\x6c\x56\x8a\x19\xb7\xba\x8c\x0a\xfd\xa6\xc6\xec\xe6\xd5\xf8\xf4\xfc\xec\x02\xb3\x87\x74\x17\x6e\x09\x4d\x1a\x0a\x7e\xf4\x4b\x58\x8b\x3a\xae\x95\xf7\x63\xb5\x9c\x1e\xa1\x7e\xe0\x18\x84\x8b\xab\xa3\x83\xeb\xf9\x57\x73\x3d\x3f\x78\x20\xef\xcb\x03\x79\xdd\xf5\xf7\x21\x79\x1e\x62\x16\xfa\xc6\x44\x66\x29\xb2\x0d\x21\x57\x49\x7a\xd8\xc4\x4f\x08\xd2\x3c\x6b\x9f\xfb\x0d\xf2\xd0\xc0\xa9\xd0\x2f\x94\x80\x0f\x9f\xf7\x40\xbb\xd1\xfd\x50\x8e\x5b\xe2\x7d\x5d\x66\xc3\xce\x72\x51\x42\x15\x8d\x56\xef\xcc\xd3\xf3\xb3\x47\xd9\x48\x4b\xfd\xbc\x87\x5b\xba\x86\x1a\x38\x12\x1c\xde\xaf\xe1\xe9\x52\xbd\xdc\x6f\xd3\x6f\x7c\x94\x61\xa4\x1c\x9b\x0c\xb9\x26\x39\xa7\x5e\xbe\xa4\xe0\xc6\x5e\x96\x5c\x19\x98\xa0\x66\xaa\x6f\x49\x5a\xc3\x8d\x45\xd3\x38\xa5\x75\xc1\x65\x31\x1b\x06\xf0\x81\xd7\x5a\x05\x27\x16\x88\x0b\x01\x4b\xea\x6e\xa2\x3d\xda\x72\xb3\x6e\xf6\xe0\xfc\x63\xdd\x7f\x93\x3a\xa4\xb9\x19\x83\xfb\x19\x80\x34\x14\x12\x8d\xfb\xda\x9d\x6b\xe6\x4f\x90\x58\x62\xe4\x4e\xe8\xf8\x56\x97\xf9\x28\xe2\x54\x1f\x19\xe3\x53\xbd\x86\x03\x7e\x66\xee\xbd\x9e\xa1\xaf\x9c\x64\x3e\x53\x73\x93\x0f\x0b\x00\x72\xe0\x68\xc1\x25\x44\x8f\xff\xc8\x0b\x23\x46\x8c\xa4\xd6\xc1\x6b\x69\x9a\xaf\x9b\xae\x20\x64\x94\x07\xff\x0b\xf2\x66\xac\xaf\xe2\xbe\xfe\x29\xf7\x7b\x76\xef\xa5\xe9\x29\xb2\x57\x6b\x56\xcf\x9a\x98\xf0\x71\xcd\xc0\xbf\x96\x77\x8b\x1e\x87\x9b\x5f\xea\x81\x47\xdb\x23\x8f\xd6\x74\xfb\xdc\x91\x7b\xe8\x3d\x05\x04\x1a\xbc\xe9\x2b\x7a\x60\x24\x7f\x11\x8c\x64\x33\x72\xeb\xeb\x71\x29\x80\xc1\x1e\x93\x53\xb9\x48\x39\xe5\x6e\x94\xb9\x1b\x8e\x99\x32\xa3\x02\xcc\x40\xfe\x67\xf4\x10\x44\xa7\x54\x48\x0a\xb4\xd2\x15\xf8\xff\x71\x2a\xba\x9d\x4b\xcc\xb6\x92\x58\xa9\x1d\x6a\xc4\x7f\x6e\x50\x3b\x99\x3a\xe3\x87\xd7\x72\x5e\x4a\x5d\x4a\xbb\xfa\x20\x95\x5c\x54\x8b\xf0\x91\x8e\xda\x7f\x1e\x92\x2b\x80\xff\xbe\x52\x79\xd1\x47\x1f\xdf\x9c\x62\x13\x7c\xe3\xe7\xef\x3e\x40\x54\x53\x2e\x72\xf6\xe6\x94\x4d\xf0\x53\xa2\x07\x4f\xb2\xa3\x52\xce\x6e\x51\x67\xd4\x9f\x61\xdc\x3e\x44\x4f\xc5\x03\x81\x10\x90\x4a\x25\x1e\xbe\x94\xc4\xd6\x96\x95\xb1\xac\xd4\xda\x1a\x1f\x7e\x13\x2b\x11\xb9\x53\x76\xb3\xdd\x5b\x19\x5c\x3b\xd6\xbe\xa4\xed\xe0\x0b\x4f\x5c\x82\xdb\x0b\x3a\xc7\x83\x42\x34\x49\x45\x00\xe9\x03\x06\x23\x80\xd6\xbb\xdc\xb0\x86\xb4\xb9\xaa\x16\x7e\x49\x4b\xfa\x19\x17\x83\x8b\x23\xfa\x09\x39\xf2\xb8\x65\x85\xe0\xc6\x8e\xd9\x1f\xe5\x6c\x2e\xca\xd8\x61\x21\xb8\x4a\x3c\x50\x67\x7e\xa3\x4b\x48\xea\x52\xd6\x33\xf1\x41\xed\xee\x42\xdf\xa6\x03\x68\xe5\x08\xe9\x47\xed\xf5\xa9\xe8\xbd\xe8\x6d\xaf\x81\xe4\xe3\xc0\x0b\x28\x29\x85\xb7\xbc\x02\xdf\x51\x36\xc7\x05\xb5\xee\x8e\x72\xe8\x99\x0a\xa2\x4e\x68\x89\xb7\x73\x5d\xf8\x85\xce\x04\xa8\xaa\xe6\xf5\x4d\xf9\x74\xf2\x72\xc1\xcb\x15\x33\xba\x04\x4e\x69\xc2\x0d\xa6\x8d\x5e\x9b\x6a\x51\x2d\x46\x58\xbb\x49\xe4\x38\x96\xb1\x3e\x8b\xb7\xd5\xb0\x61\x63\xd9\xf3\x6f\x5f\x7a\xcf\xce\x57\x2f\x5f\xe0\x1c\xe8\x7a\xde\x3a\x0b\x7a\x76\x2f\xe7\x7c\x22\xb0\x86\x64\xa6\x17\x4b\x5e\x4a\x13\x23\xa1\xd2\x52\x60\x9e\xfb\x61\xcf\x6f\x5e\x8d\x27\xbc\xf4\x53\xdd\xbc\x1a\x4f\xb5\x7e\xc1\xfe\x2c\x9e\xe5\xd1\x4d\xb4\x61\x56\x7c\xcd\xbe\x21\xbc\xcc\x9e\x53\x08\x7c\xb4\x89\xbf\x70\xb7\xff\xea\xbf\xbd\x7c\xf9\x12\x50\xdb\x39\xe7\x17\xc2\xb0\xe7\x9f\x96\x42\x5d\xcc\xe5\xd4\x8e\xd8\x5b\x21\x5d\x2b\x48\x9b\x1a\xfc\x50\xc9\x1a\x47\x76\xa7\x6f\x5f\xbe\x7c\xd9\x02\xd8\xdb\xfa\xa5\x4b\x65\x44\x56\x95\xe2\xe2\x5a\x2e\x2f\xdf\x5f\xfc\xec\xb0\x60\x5f\xb1\xe5\xb3\xb6\xf6\x1e\xa1\x1a\x76\xf9\xfe\xa2\x13\xab\x52\xe6\xe0\x75\x44\x9e\xbc\xd7\x58\x5c\xcd\xd8\x52\xab\x59\x01\x63\x67\xba\x2a\x39\x64\x94\x04\x83\x7d\x4c\x68\x02\x27\x11\xf1\x21\x26\xeb\x1f\x9e\xa3\xca\x34\x14\xb1\xed\x59\x6a\x64\x26\x7c\xb2\x0f\x9f\x27\x2b\x49\x0f\xe9\xbe\x86\xd4\x10\x11\xa9\x8e\x19\x3b\xa3\xa0\x85\xb8\x63\x48\xda\xe7\x68\x13\xfb\xfe\xfb\xef\x7c\x05\x8e\x64\x0a\xa8\xb2\x81\x59\x52\x08\x09\x08\x36\xe7\x2a\x07\x63\x93\x97\x06\x03\xb2\xf3\x76\x50\x69\xb0\x91\xc8\x81\x64\x16\x50\x66\xb7\x79\xa8\x02\x32\x93\x50\x81\x1c\xb9\x58\xba\x83\x15\x85\x23\xea\x61\x37\xca\x41\x4a\x41\x63\x95\x2c\x9b\x73\xa9\x08\xe6\x42\x32\xa3\xa1\xa2\xfb\x36\x6c\x03\x1d\x40\x33\xb5\xea\xdf\x1b\x44\xb4\xe7\x96\x7e\x8e\x27\xe1\x4f\xc8\x1f\xce\x1a\x2d\x18\xb3\x7a\xad\x23\x34\xe4\x0f\xa5\x10\x4d\x82\xbe\x71\x4d\xbe\xa5\xcf\xa1\x86\x2b\x04\xd4\x06\x0e\xe3\xd3\x08\x38\xe1\x3e\x21\xbf\x3d\x96\x24\x26\x34\x3d\x66\xcc\x27\x37\x9e\x81\x2d\xb8\xc4\xc8\xdd\xbf\x89\x52\x6f\xc0\xad\x8d\x75\xac\xa3\xd5\x6e\x7c\x7a\x21\x31\x7d\x3c\x94\xa6\xf5\x6b\xe2\xb8\x22\xaa\x4f\x82\x28\x99\x42\x50\xcc\x82\x17\xc5\x88\x2d\xff\x1f\xf6\xce\xa5\xc9\x6d\x1b\x8b\xc2\xfb\xfc\x0a\x55\xaf\x26\x55\xae\x29\x3b\xd9\x65\xd7\x4f\xbb\xc7\x8e\xa3\x48\x1d\x67\x11\x67\x41\x51\x68\x35\xdd\x6c\x42\xe1\xa3\x6d\xa5\x6a\xfe\xfb\x14\x41\x52\x04\x49\x90\xc4\xc5\x3d\xc8\x8c\x27\x5a\x24\xd5\x25\x8b\x07\xe7\x83\x88\x8b\x37\x90\xca\x4d\xb0\x89\x0f\x4d\xa4\x7a\xf5\x32\x53\x4d\x7d\x35\x27\x2e\xef\x17\xe2\x8f\x42\x3b\x76\xb6\xae\x22\x22\x51\x5f\xc8\xd1\x7c\x5e\xf7\x5d\xfa\x4d\x98\x32\x66\x17\xf5\xce\xa0\xea\x72\xbf\xda\x5a\xd0\xe4\x54\x5d\xac\x7a\x3a\x51\xb6\xf8\x78\xa6\xde\xca\x32\x3c\x7f\x3c\x6b\x6f\xf4\x50\x39\x56\x9d\x44\x94\xc8\xa4\xfb\xad\x9e\x4a\xd6\xdc\x20\x1a\x34\x57\x0b\x96\x65\x4e\x7c\x89\x42\xb9\x4b\x83\xfd\x43\x73\x3c\xf9\xc7\xb3\xb7\x43\x0d\x75\x70\x4c\x9a\x37\x6d\xd7\x8f\x67\xcf\xa5\x8b\xea\x58\xe5\xb4\x8c\x21\xf5\x09\x9f\xea\xe4\xe5\x3a\x63\xff\x51\x1d\xc3\xf7\x49\x1e\xeb\xef\x6f\xeb\x47\xb4\xdb\x3e\xaa\xf1\x1a\x45\xf9\xf1\x4c\x55\x70\xcd\xd1\x05\x1b\x91\x97\x7f\x57\x17\xf8\x57\xcd\x80\x8e\x70\x94\x68\xc2\xea\x3d\xca\x84\x32\x93\xa9\xf6\x73\xbd\xe0\x64\x73\x58\xbc\x3e\x5f\x7c\x2c\x5e\xbe\xfc\x5e\x2c\x4a\xc9\xe6\x6f\x95\x96\xda\xa6\x94\x8a\xf2\x2b\x2a\x48\x36\x39\xa6\x30\x13\xd9\xdc\xec\xa2\x5a\x0c\xea\xce\x87\x3c\x50\x73\xed\xe5\xb3\xdf\x1e\x0f\xfa\x4d\x54\xa3\xa6\xaa\x8f\x93\x5d\x17\xb9\x26\xee\xb8\xad\xce\x34\xaf\xca\x70\xe3\xb6\x19\x76\x69\xf2\xfb\x87\xc5\xf3\xab\x97\x2f\x16\xcf\xdf\xbd\x58\x3c\xbf\x2a\xff\xab\x56\x59\x97\x7f\xbd\x2c\xff\xfa\xfe\xc5\xe2\xf9\x7b\xb5\x52\xae\xfc\xa8\x5e\xd9\xaa\xbe\xa7\xfe\xfc\xee\xc5\xe2\x5e\xca\x57\xd5\xff\x5f\x32\xb6\x80\x61\x47\xa3\x66\x0e\xa7\xea\x7f\xd1\x75\xd8\x7e\xf4\x0e\xf6\xfe\x69\x78\x86\xfe\xc9\xf1\x12\x8b\xaa\x62\x3b\x6e\xce\x09\xf6\x51\xed\x0d\xbe\xff\x96\x3b\xa0\xde\x8c\xb4\x1c\xd3\x9f\x3b\xcd\x5b\x1f\x65\xa7\x1d\xe7\x8d\x78\x1d\x06\x55\xe6\xd4\x29\x7b\xfa\x17\xd5\xa2\x97\x41\x5b\xa6\xf9\x55\xca\xf6\x40\x78\xe8\x0e\x28\x98\x5f\x04\x9b\x73\x32\xeb\xda\x58\x6f\x53\x67\xfd\x59\x13\xe4\xc5\x08\x5a\x7a\xd5\x07\xb4\x44\x01\xbf\x8b\x0a\x26\xa7\x19\xfe\xbf\xed\xe8\xf1\x69\x60\xf6\xab\x18\x98\xfd\xbf\x9b\xe1\xef\xc7\x9d\xaf\x7b\x9a\x7f\x40\xf3\xbf\x3d\xd7\x6f\xb5\xd7\x82\x81\x7f\x9a\xf5\x3f\xcd\xfa\x9f\x66\xfd\xff\x9a\x59\xff\x7e\xd9\x3b\x4d\xfd\xff\x7d\x1a\x6f\xff\xfd\xa9\xff\x41\xf7\xa1\xe9\x95\x9e\x9a\x99\x5f\x63\x33\xf3\xab\x98\xff\xf7\xdd\x7a\x39\xad\x04\xe8\x64\xfa\x69\x25\xc0\x69\x25\xc0\x69\x25\xc0\x69\x25\xc0\x69\x25\xc0\x69\x25\xc0\x69\x25\x80\xb1\xed\x70\x5a\x0e\x70\x5a\x0e\x70\x5a\x0e\x70\x5a\x0e\x70\x5a\x0e\x40\x1d\x21\x3f\xad\x09\x40\x8d\xbc\x7c\xad\x0b\x03\x46\x6a\xd0\xd3\xea\x00\xaf\xab\x03\xea\x83\x95\xeb\xdf\x45\x2d\x31\xf9\x75\x7d\x1d\x07\x59\x1e\x85\x17\xb1\x0c\x1f\xd7\xb9\x4c\xc5\x07\x19\x17\x4f\x62\xad\x46\xdb\x46\x7f\x91\x2b\xb1\x4f\x45\x58\x8d\x8e\x2d\xcb\x6e\xa1\xaa\xea\x16\xed\x78\xd3\x3f\x43\x99\x0a\x9b\x24\xfa\x6d\xe0\xd9\x91\x2c\x6b\x65\xc3\x81\x21\x23\xb9\x70\xaf\xd2\x39\x20\x68\x6b\x29\x06\x55\x63\xc6\xda\x7d\x9e\x07\xe1\x83\xd8\x56\xe8\x08\x86\x8e\x20\x83\xa4\x6b\xcc\x9a\xe7\xcf\x22\x15\x57\x51\xf6\x88\x7e\x11\x4d\xba\x0c\x3a\xa3\x4d\x12\xe4\x4d\x14\xc3\x4b\x9b\x49\x97\x09\x39\xb0\x69\x0b\x79\x11\xa9\xd3\xa6\x01\x58\xb5\x92\x3b\x48\x63\xc5\xd6\xfa\x65\xb0\x0f\x36\x51\x1c\x75\x2a\x0c\x77\xff\xba\x9c\x3b\x44\xc7\x94\x35\x89\xd8\x3f\xdc\xac\xc1\xaf\xd9\x50\x94\x41\x35\x34\x68\xcd\x16\x25\x5b\x91\xa2\xd9\x06\xa2\x0c\xb6\xa1\x41\x6b\x36\xf9\xb4\x97\x89\x48\x72\xc3\xba\x0a\x77\xb6\x81\x28\x83\x6d\x68\x90\xcc\x36\xd3\x21\x70\x00\x6b\x16\x0a\xb0\xa9\xb4\xd5\x3c\x0e\x48\x93\x13\xf2\xce\x58\xd5\xfc\x3d\x08\x4d\x59\xb4\xc7\x4b\xee\xa3\xdd\x8f\xc1\x1e\x02\x55\x6b\x71\x50\x1a\x3b\x64\x80\xeb\xe4\x19\x17\x2a\x06\xa2\x00\xa4\xd6\x20\x99\xed\xad\x38\xac\x45\x2c\xc2\x5c\x3b\x56\x0c\x40\xa7\xc9\x02\xf8\x74\x93\x64\x42\x58\xb9\xd2\xf4\x00\x4c\x6e\x65\x69\x99\xca\x4f\x22\x84\x85\xf6\x81\x2a\x00\x4c\xb3\x48\xc6\x43\xd7\xcb\x26\x5d\x00\xa2\x63\xed\xac\x46\xa6\x04\xa8\x9c\x55\x5a\x2c\x98\xda\x0e\x19\xe0\xf6\x49\x5f\x92\x08\xa0\x50\x82\x00\x94\xca\x18\x99\x67\x29\x53\x50\x84\x68\xf5\x00\x34\xca\x16\x19\xa6\x7b\xcc\x25\x80\x46\x09\x02\x70\x2a\x63\x6e\x3c\xab\x22\x49\x30\xdd\x42\xa3\x2e\x8a\xae\xb1\xe9\x06\x79\x27\xd2\xa7\x28\x29\x21\xe0\x9c\xad\x34\x0a\x55\x33\xeb\x46\xfb\x6b\x10\xe5\x3e\x7e\xd2\x5a\x17\xc5\xd9\xd8\x74\x82\x04\xf5\x53\x3a\x8a\x20\x30\x42\x3f\xe5\x2a\x10\x4f\x32\xb9\xae\x17\x43\x02\x88\xba\x82\xee\x40\x3d\x63\xd6\x3c\xf2\x73\xf2\x39\x48\xb7\xe7\xcb\x5b\x68\x73\xca\xa8\xcb\xa0\x33\xda\x74\x80\xac\x5a\x2b\x37\x51\x8c\xa8\x16\x8c\xba\x10\x48\xcd\xa6\x33\x24\xac\xe5\x38\xa2\x0c\x04\x25\xb6\x1e\xaf\x9f\xf6\xf9\xe1\x2a\x42\x8f\x5c\x99\x64\xdd\x21\x8d\x26\xad\x09\xeb\x72\x7c\xbe\xdd\xa6\x22\x43\x44\xce\x9e\x22\x83\xab\x67\x8d\x8a\x04\x6a\x60\xea\x72\x7c\x18\x52\xf3\xb2\x79\x68\x5d\x6c\x32\x81\x64\xa9\x04\xf9\x34\xb5\x31\x2a\x0f\xf2\x35\x03\xbc\x60\xf4\x57\x0b\x35\x6c\xd8\xd1\x03\x80\x90\x86\x37\xae\x93\xe7\x9b\x54\x3e\xe1\xa2\x9a\xae\xc7\x81\xd1\x6d\x11\x60\x3e\x04\x88\x4e\x7e\x25\xc4\xb2\x5f\x1a\xa1\xf9\x46\xfe\x06\x47\x39\x2e\x03\xf5\x17\x98\xbc\x5e\x98\x80\xa0\xae\x1b\x76\xf7\xae\x6c\x90\x4c\xa3\x0a\x73\xa3\xc5\x34\x4f\x2b\xc4\xe5\x13\xb8\xd7\xa7\x55\x63\x42\x50\x5f\x9e\x2f\x22\x3c\x47\x75\x09\x5a\x31\x06\x44\x6b\xc8\x96\xe1\xe6\x12\xdc\x4c\xec\x0a\xba\xb3\xf4\x8c\x59\xf3\xc4\xe2\x0b\x9a\xa8\x27\xc9\x60\xea\x9b\xb3\xa7\x92\xe1\x23\x7c\x2e\xda\xa0\xca\x61\x1b\x5a\xb4\xc5\x7b\x7d\x79\xbd\x14\x69\x16\x65\xb9\x48\x72\x0f\x8b\x73\x26\xf5\xdd\x91\xa7\x6d\x5b\xc3\x47\xf9\x4a\xec\x25\x1a\x79\xa8\xca\x00\x35\x58\xb4\xc6\x8b\x8b\x2c\x17\xe9\x7d\x86\x06\x34\xe9\x32\x10\x8d\x36\x6d\x21\xdf\xdc\xdd\x2d\x5f\x8b\x1c\x56\x19\x74\xf4\xdc\xa1\xba\xb6\x28\x30\x6f\x44\xb0\x85\x4c\x3f\xb5\x62\x3c\x8c\xda\x90\x35\x43\xb5\x69\x07\x01\x50\x6f\xff\x71\x77\x5f\x5b\xb1\xb6\x2e\xb3\xfc\x3c\x8e\x02\x44\x7f\xf3\xa8\xc5\xb0\x7f\xb4\x43\x01\x58\x06\xf9\x03\xb8\xc0\x9b\x64\x79\x58\x03\x93\xb6\x84\xb7\xeb\xcb\x35\x7a\x18\x71\xa0\xe9\xce\x36\xb4\x67\x0b\xf6\x56\x1c\xee\x64\x99\x2d\x00\xa0\xa3\x96\x3b\x48\x6b\xc7\x16\xe0\x5d\x74\x2f\xc2\x43\x08\x19\xbf\x3e\x6a\xb9\x03\xb4\x76\xec\x01\x9e\xa2\x7c\x15\x24\x90\x59\xf3\x56\x8c\x83\x70\x34\x44\x67\xb8\xcd\xc5\x13\x94\xa3\x14\x44\xb0\x28\x63\x74\x1e\x50\xa7\xbb\x2b\x88\xe0\x21\x75\xbf\xdb\xc7\x26\xcf\xa5\x70\xe1\x51\x27\x58\x00\x78\x8e\x67\xb7\x59\xf1\xc8\x60\x7b\x11\xc4\x41\x12\x8a\xf4\x36\xd9\x81\xa6\x04\x0c\xaa\x0c\x32\x83\x45\x17\x3c\xd8\x54\xf1\x50\x14\x03\x47\x9c\x30\x7e\x27\xc3\x20\xae\x4e\x22\x9c\xdf\xa8\x45\xa1\x1b\xca\x72\xf8\x0c\x26\x49\x84\xe0\xb6\xc2\x40\x93\xc9\xe6\xd4\x56\x78\x0f\x5f\xf7\xff\x1e\xb5\xe8\xbf\x6f\xcd\x1a\x69\xb0\x97\x8e\x01\xd3\xee\xb9\x73\xc6\x38\xda\x21\x03\x80\x2a\xaa\x8e\x1e\x00\x84\x54\x4d\x1d\x9f\x02\xd5\x52\x1d\x3d\x00\x0c\xa9\x8e\x6a\x9f\x42\x45\xf0\x9e\x22\x02\x88\x16\xbb\xdf\xcb\x2d\xa4\xa0\xc8\x2d\xa7\x8c\x94\x26\x28\x8e\x71\x6b\x06\x34\x35\x9e\x7f\xea\x5a\x01\xf5\x0c\x6e\x57\xa9\x2e\xc7\x04\xa1\xee\x2e\x2d\x1f\x42\xee\x40\xea\xe8\xf1\x58\xe8\xfb\x8e\xca\xa7\xba\xeb\xcc\x50\x6f\x59\x4f\x95\x07\xd6\xb7\x48\xc1\x43\x55\x2b\xb5\x14\x0f\x84\x56\x99\xc8\xad\x00\xee\x5e\xd1\xe5\x78\x14\xe4\xdd\x2a\xfa\x43\xab\xea\x3c\xbe\x27\xcc\x24\xf6\x88\x32\x86\x4f\xb7\xea\x82\x7a\x27\x52\xc4\x50\x42\x5f\x12\x03\xa7\xcc\x91\xa8\x40\x4d\x9a\x5a\x8a\x49\x41\x6a\xc8\x94\x0f\xc0\xda\x30\x47\x31\x26\x01\xbd\xe5\xb2\x56\xa7\x37\xde\x26\xf7\x12\xc5\x71\x14\x64\xb2\xb4\xc6\x6c\x79\xaa\xbe\xe9\x4d\x24\xe2\x2d\x30\xc6\x19\x54\xdd\xc9\x4c\x16\x69\x78\xc8\xf1\x01\xd8\xd0\x80\xeb\xa8\x40\x3b\x6f\x0c\x3b\x58\xa3\x2f\xe9\x0e\x35\x30\xe7\x4a\x75\x19\x07\x11\x22\x68\x1b\x75\x71\x7c\x95\x4d\x16\x24\xa8\x61\x34\xaa\x0d\x86\x25\x35\x9d\x8c\x0a\xa0\x0a\x6c\x54\x1b\x0c\x4c\xaa\xe2\xcc\x0a\xa8\x3a\x6f\x42\x1d\x0d\x4d\xab\x15\x8d\x1a\xe0\x21\xbe\xd9\x34\xc0\x59\xe0\x34\x0c\xd8\x57\xf2\x54\xb8\xb1\xe5\x9a\x55\xa4\x3d\x95\x66\x6c\x41\x66\x95\x61\x6f\xc5\x17\x5d\x72\xa9\x85\xf6\x41\xe6\x32\xf1\xba\x7a\x6e\x2e\x09\x06\xfb\x9c\x79\xeb\x5c\x90\x88\x8d\xb0\x4b\xc9\xd8\xf3\x5a\x5a\x20\xd8\x05\x8e\xdf\x69\x6a\x2c\xfb\xe4\xd1\x3b\xed\x19\x50\xef\xbc\xa7\x08\xc1\x21\xf5\xcd\xcb\xe7\x92\x3c\x02\xff\x3a\x9a\x22\x0f\x49\xb7\x46\x40\x42\x0e\xb1\xea\x72\x2c\x18\xfa\x00\xeb\x52\x6e\x51\x55\x71\xa5\xc4\xf2\x4f\xab\x70\xe5\x76\x2d\xc2\x22\x8d\xf2\xc3\xa5\x4c\x72\xf1\x05\x44\xd1\x13\x65\x01\xf5\x0d\x52\xd8\x40\xed\x87\x4a\x89\x47\x41\x6a\x25\xc8\x2d\xae\x61\xd0\x68\xf1\xec\x13\xab\x7f\xb9\xbd\x13\x4f\xfb\x18\x73\x90\x87\xa6\xc6\x82\x38\x5a\x72\xc0\xc0\x95\x70\x5d\x11\x82\x43\x2d\xf1\xcd\x73\xb8\xd2\xa1\x2b\x42\x90\x88\xa5\x25\xcd\x3f\xcb\x14\xbd\xbf\xc6\x24\xcb\x81\x33\x98\xb4\x26\x6c\xee\x94\x59\x87\x0f\x62\x5b\xc4\x51\xb2\x43\xb5\x6c\xcc\xca\x0c\xce\x11\xab\xf6\xa8\x72\x03\xf9\xf5\x4a\x1d\x0e\x46\x69\x83\x60\xfa\x93\x08\xf3\xe6\xd4\x5f\xdc\x2b\x68\xd2\x65\x41\x19\x6c\xda\x42\xfe\x5c\xc8\xcd\x21\x47\x9f\xdd\x6b\x50\x75\x07\x34\x59\xb4\xc5\x5b\x5d\x5c\x81\xd1\x7a\x8a\xee\x58\x7d\x6b\xd6\x48\x62\x1f\xd7\x97\xfa\x5c\x56\x37\x9a\x60\xf6\x9e\x18\x75\x19\x78\x46\x9b\x2c\x48\x64\xcf\x62\x3a\x01\x30\x36\xbd\xf7\x61\x94\x01\xb5\x56\x46\xb5\xc1\xd4\xa4\x16\x8c\x51\x01\xd4\x96\x19\xd5\x06\x03\x93\xda\x37\x66\x05\x54\xff\x60\x42\x1d\x0d\x4d\xeb\x43\xac\xea\xcb\x4f\xd1\xf3\xc7\x46\x5d\x0e\xaa\xc9\x26\x15\xf2\xe7\x42\x6a\x57\x9b\xf2\xe1\x94\x1e\x1f\xaa\xb2\xe5\x04\x03\x0b\x41\x3d\x4d\x10\x14\x31\xe4\x68\x4f\xc2\x42\x4d\x4f\x13\x04\x46\x0c\x2d\xfa\x93\xb8\x90\x32\x50\x45\xc1\xb9\x85\x10\x6d\x91\x17\x92\x4f\x97\xe5\x03\x76\x4c\xda\x12\xae\xaf\xdf\x45\x49\xf1\xe5\x27\x45\x81\x60\xeb\x0a\xba\x53\xf5\x8c\x59\xf3\x84\x41\x2c\x6e\x7f\x02\xb7\xc4\x0d\xaa\x0c\x32\x83\x45\x6b\x3c\x11\xa6\x90\xc3\xc7\x2a\x21\x06\x44\x65\x84\xe6\x1b\x79\x8a\x7c\x4f\x91\x4b\x42\x3f\x3f\xbe\x7a\x0e\x7b\x78\xfc\x40\x93\x8b\xe5\x72\x6c\x7c\xf5\x24\xa8\xfa\x6d\xc5\xb8\x28\xa4\x0a\xb7\x7a\x04\x7a\xb6\x69\x5f\x92\xcb\xe3\x70\xa2\x69\xf5\x20\x3a\xb6\x0d\x44\xb9\x64\xae\x91\x0d\x3c\x8d\x04\x9b\x43\x72\x9d\x40\x5a\xf7\xae\x1d\xe6\xa0\xd4\x77\x07\xbb\x23\x54\x56\x88\xd6\xcf\xc3\x50\x16\x90\x35\xf8\x5d\x41\x36\x48\x63\xcc\x8d\x07\x16\xdb\xfa\xa2\x28\x2e\x62\xac\x53\x8f\x62\xa1\x20\x34\x2e\x18\xa0\x83\x62\x35\x35\x36\x06\xe9\x98\xd8\xe6\x2e\x56\x4c\x27\x4f\x53\x63\x63\x90\x3a\x76\x76\x77\xcf\xd2\x41\x98\x9d\xb9\xae\x2d\x6b\x98\x5c\xa6\xc1\x4e\xfc\xb4\x1e\x2c\x4a\x83\x55\xa2\xd3\x29\x30\x80\x67\xac\x93\xb3\xc0\x17\x38\x18\xd7\x09\xf2\xee\x72\xb9\x96\xe1\x23\xf0\xc0\xb2\x9e\xa2\x3b\x58\xdf\x9a\x35\x52\x80\xb9\x70\x40\xe9\x30\xec\x07\x94\xeb\x05\xee\x64\x2c\xaa\x5b\x8b\x11\xce\x8f\x62\x0c\xfb\xad\x21\x5b\x06\xd8\xfe\x15\xee\xae\x15\xe2\x5e\x95\xea\xeb\x3f\x82\x9a\x6d\x9a\x1a\x97\xe0\x47\x52\x83\xad\x7a\x06\xda\x81\xeb\x4b\x72\x81\x1c\x3a\x70\x1f\xb2\xfd\x83\x48\xc5\x87\x28\xcd\x8b\x20\xf6\xb0\xa6\x79\x3a\x01\x06\xf1\xb4\x71\x5b\xfe\x5f\x45\xb4\x7b\xc8\xc5\x16\xbf\xc2\x76\x44\xd9\x9d\x78\xcc\xaa\x0d\x6a\xa9\xb4\xcf\x8e\x37\xb6\xb7\x33\x58\x2b\xf1\x1c\x65\xbc\xb7\x79\x46\x99\x0e\x3c\x67\x15\x02\xcc\xec\x9c\x58\xa8\xc3\xc1\xad\x3b\x2f\x3d\xf8\x2b\xb1\x8f\xe5\x81\xb9\x75\x7d\x44\x91\x09\xa9\x59\x63\x81\x21\x56\x47\xcc\x49\xc3\x50\x69\x2b\x22\x46\x99\x91\x6f\x70\x57\x15\x46\xca\x7f\x63\x57\x32\x8e\x37\x41\xf8\x88\x07\x6d\x94\x61\xb0\x47\xab\x2c\x60\x66\x37\x7d\x42\x15\x06\x6a\xdd\x6d\x1f\x87\xe4\x76\xe2\x27\x75\x71\xa0\xf6\x9d\xfa\x09\xd4\x34\xc8\xc5\x8e\xb3\xc1\x65\x46\x19\x88\x5b\x5b\x75\x00\x6e\x5e\xfe\xea\x3a\x56\x14\x6c\x57\x95\x09\xda\xb3\xe8\x08\x19\x25\xbb\x5f\xf6\xdb\x20\x17\xf8\x5a\x75\x44\x1e\x80\x6d\x32\xcd\xe5\x57\x37\x31\xde\x17\xf1\x5a\xc0\xdf\xf1\xb9\x74\x90\x39\x62\xc2\x70\xc8\x1a\x35\x85\x8e\xe2\x57\x62\x4c\xc8\xca\x90\x2b\x09\xb2\x16\x3a\x0a\x22\x88\x5c\xeb\x9e\xea\x61\x68\xb5\xa3\x49\x42\xc8\x9c\x2b\x1b\xed\x15\x86\xb1\xb5\x92\x5c\x36\xcd\x1c\x8f\x0d\xd9\xde\xed\xc9\xe2\x18\x5d\x5b\xbc\x7a\x18\x42\x96\xbd\xae\x2c\x8e\xd3\xb9\x1c\xea\xe1\x16\x5a\x1a\xfb\xc2\x40\x56\x44\xc9\x6c\x6a\x1b\x6c\x4d\x39\x9a\x00\x8e\xbe\x67\xdc\x32\x17\x8a\xfc\x41\x24\x79\xbd\x60\xba\x1a\xf0\x7e\x14\xc9\x4a\x3c\x47\xe2\x33\x07\x7e\x4a\xd7\x81\x79\xd2\x26\x00\x95\x5b\x96\xe7\xb4\xc1\xc8\x94\x52\x3d\xa9\xc3\x2e\xda\xf3\xea\x68\x74\x52\x21\x1f\x28\xfd\x92\x89\x94\x79\xc4\xdd\xb8\x28\x02\xf5\x68\xd0\x9e\x50\xa6\xd1\x9f\xc7\xe7\xd5\xf1\xe5\xeb\x42\x9d\xc2\x76\x1e\x86\x22\xcb\x20\x85\xd9\x2a\x0d\x37\x7e\x3b\xfb\x8e\xd9\xf1\x5e\x26\xcd\x2a\xe7\xf3\x3c\x4f\xa3\x4d\x91\x0b\xee\x0b\x3f\x9f\x00\x20\x23\xcc\xc6\x1d\x73\xc1\x6f\x16\x78\xe1\xc7\xc1\xaf\x45\x7c\xef\xb9\x40\x8c\x24\x01\xc8\x86\x31\xf3\xd8\xbc\x00\x54\x7f\xb6\xc9\xf8\xcb\x13\x62\xa5\xd8\x95\xf4\xfc\x7e\xf8\x79\x37\x80\xef\xc5\x5f\xf0\x4e\xf8\x7b\x1f\xbc\xbf\x0b\x90\x76\x92\x5d\x22\x9e\xf2\x83\xd8\x6a\x92\x59\x18\xc4\x51\xb2\x2b\xe5\x2e\x53\x99\x65\x1f\x44\x9a\x45\x32\xc1\x1d\x3c\x6b\x9f\x88\x53\x8e\xd8\x02\x38\xe5\xc8\x9b\x32\xbb\x65\x92\x07\xf1\x52\x6e\xcf\xeb\x7f\x63\xed\x6f\xb7\x4b\x80\x9d\x13\x63\xc6\x91\xb9\xc0\x1d\xfe\xb1\x4e\xc4\x57\x6e\x50\x86\x86\xac\x04\xf9\x91\xd4\x32\x11\x5f\x39\x42\x8b\xa6\x36\x82\x80\x78\x6a\x9d\x8c\xb7\x5c\x61\xc4\x54\xf6\x34\x84\x41\x8e\xcd\x49\x9a\x8a\x30\x3c\x8a\x7d\xcf\x39\xd3\x11\x63\xe6\x18\x6c\xe0\x37\x96\x37\x29\x31\x6e\xd0\x8e\x70\x13\xe4\xe1\x43\xf9\xe8\xbf\xe4\x86\xc1\xa4\xcb\xd0\x29\x3a\x26\xe8\xbe\x11\x4b\x89\x8c\x7a\x3c\x12\xea\xa2\x21\xfd\x59\x66\xd5\xd9\x97\xe2\x81\x10\xaa\x41\xfd\x31\x66\x10\xe8\x4b\xf1\x18\x08\x85\xbe\xf3\x18\xb7\xb0\x0f\xc5\x98\x1c\x94\xc2\x1d\x8a\x34\x8f\xee\xa3\xd2\xa0\xb6\x4a\xb1\xfd\x70\x1d\xed\x92\x28\xd9\xad\xc4\x1f\x85\xe0\x6d\xfc\x22\x25\xe4\xb0\xa0\x96\x06\xe2\x23\x77\x20\xa7\x39\xb9\xa5\xe8\x3b\xbf\xa8\x81\x8a\xa6\xce\xdd\x53\x48\x4e\xcc\x77\x76\x11\xc2\x21\x4d\x98\xbb\xdf\x8f\x9c\x98\xef\x9c\x22\x04\x5d\xa2\x30\x7b\x4b\xa1\x43\x72\xde\x73\x8b\x12\xda\xc5\x97\x5c\x24\x59\x99\x60\xbb\x2c\x50\x5d\x5e\xc7\x5b\x52\x32\x25\x4b\xe7\x9f\x34\xc9\xe7\x64\x46\x96\x39\x69\x2c\x2f\x21\x6a\x4c\xc9\x30\x63\xc4\x9c\x34\x96\x99\x50\xfe\x27\x65\xb8\xa5\x7d\x5e\x1c\xcc\x8d\x2a\xc9\xb0\x25\x28\xf6\x89\x60\x73\xc2\x69\x29\x8a\x49\x10\xb1\x74\x77\x52\x17\xc3\x4d\x5d\xac\x3b\xa9\x81\x68\x72\xda\x25\x00\x86\xa7\x36\x28\x27\xc5\x3c\x44\x79\xe6\xd6\x99\x79\xbb\x00\x6c\xc0\x36\x1a\x2b\x7d\x30\x3e\x71\x4b\xcd\xa4\x96\x87\xba\x8e\xb9\xbd\x66\xde\x2e\x02\xdb\x47\x75\xc7\xde\x70\x63\x63\x19\x02\xef\xa5\xae\x03\x6c\xc1\xb1\xb3\xed\x9c\x05\x37\xeb\xd7\xa9\x2c\xf6\x8d\x10\xff\x30\x45\xeb\x34\x20\x59\x31\x62\xdf\x39\x3b\xde\xdc\xdd\x2d\x6f\x93\x5d\x2a\xb2\x6c\x19\xe4\x0f\xd8\x7c\xe8\x89\x43\x32\xa0\x6f\x18\x41\xbe\x2a\x62\xf1\x21\x88\x0b\xce\xfc\x90\x65\x0a\xe8\x3c\x68\xad\xbb\x67\x84\xcc\xf2\xa5\x4c\xf3\x55\x90\xec\xd0\x39\xa0\x4b\x63\xd0\x3b\x66\x9d\x99\x6f\xaf\x3c\xd0\xd6\xa2\x10\xce\xc6\xa0\x3b\x61\xf5\x7e\x80\x09\x2b\x51\x0c\x61\x6d\x90\x4b\x78\x11\x84\x8f\x22\xe1\xdc\xbd\x37\xab\x8d\xe4\x6d\xec\x72\xb1\xf1\xcd\x75\x4d\x18\x09\xcc\x6b\xa8\x6b\x61\xce\x0b\x6d\x29\x8c\xa4\x55\x46\xb9\xb4\xf8\x06\xb9\x26\x8c\xa4\xe5\x35\xc5\x1b\x11\x0f\xed\xf0\x8e\x34\x94\x98\xd9\x02\xaf\x65\xee\xde\xad\xbd\x00\xdf\xbd\x5b\x23\x69\x4b\x9b\xce\xa8\xef\x45\xfe\x59\xa6\x8f\x4b\x19\x47\x21\xb8\x9f\xd1\x91\x86\x00\x77\xcd\x62\x98\xbd\xc5\xae\xb1\x54\xf0\x39\x01\x89\x6a\x1d\x45\x7c\xbd\x35\x90\xc7\x67\x03\xaf\x0e\xeb\x48\x2d\x05\x6b\xd9\xaa\x8d\x3c\x9e\x5f\x99\x06\xf1\xf3\xce\x8c\xb5\x91\xf7\xc0\x6f\x7b\xaa\xec\x3c\x3f\xbe\x6e\x1f\xc8\xe3\xf9\x79\xf5\xbc\x76\xaf\xab\x8f\xca\x60\x20\x0f\xe1\x1f\x9a\xc6\xf1\xe3\x63\xa0\x31\x09\x3f\xf9\xc0\x8b\x85\x03\x39\x7c\x79\x30\x26\xe1\x27\x2f\x78\xe5\xa2\xbe\x38\x0b\xbe\x92\xa0\xd5\x85\x50\x6b\x36\x01\xa8\x9e\x26\xdb\x0c\x09\x80\xe1\x01\x93\x6d\xad\x18\x3e\x02\x74\xb5\xc1\xec\xbc\x32\xdf\xea\xe0\x0b\x7b\x57\x1b\x8c\x8d\x2a\xde\x3e\x7a\xb8\x7d\x75\x34\x3a\xb3\x9f\x0b\x3b\xf5\x6c\x56\x1b\x03\xee\x72\x02\xda\x88\x4e\x7b\xa4\x98\x9f\x85\x62\xe6\x34\x60\xd9\x60\xb0\x0f\xca\x0e\x4f\x6b\x4b\x60\x87\xc3\x11\x00\xdc\x73\xa4\x48\xce\xb3\x5f\x32\x91\x7a\x9d\x80\x1c\x4b\x05\x93\x27\x63\x08\xce\x99\x52\xdf\x1f\xe7\x35\x4b\xcc\x69\x40\x32\x64\xc4\xbe\x7b\x76\x30\xb7\xaa\x8d\x49\x62\x60\x09\x5b\xd6\xc6\x1e\xc7\x37\x03\x18\x5b\xd7\x26\x4d\x32\x39\x3d\xd4\xfb\xac\x6d\x6c\x33\x46\xdd\x69\x8b\xfd\x3e\x56\xb7\x59\x06\xb1\x5a\x9f\x90\xf9\x2d\xcb\x73\xc9\x61\x72\x66\x16\xca\x2e\xbf\x92\x6a\x24\xa5\xde\x3a\x88\x1a\x15\x9f\x50\xa5\xd3\x4f\x59\x64\x43\x62\x86\xc1\xed\x12\x80\xa2\xd3\x07\xbf\x27\xc4\x98\x3d\xbe\x19\x65\x28\x37\xa1\xb7\x37\xa1\xc2\x1c\xe8\x9e\x51\x86\x02\x13\x86\xb7\xa7\x54\x78\x23\xdb\x33\xca\x58\x60\xfb\xf1\xec\x09\x15\x66\x35\x3e\xa3\x0c\x05\x26\x54\xe6\x7b\xf5\xc0\xb1\x16\xb8\x7e\x8e\xb8\x97\xda\x8c\x28\xd2\x01\xc7\xac\x39\x81\x2d\xe5\xf6\x2a\xca\xd2\x42\x81\x5c\x14\xdb\x1d\xab\x9f\x3a\x2f\xce\xc6\x35\x19\x46\x91\x33\xa3\xb3\x5d\x02\x3e\x72\x80\x10\xab\xe7\xc5\x98\x05\xda\x2e\x01\x1f\xb9\xe0\x5e\xbc\x4d\x62\xdc\x56\xbb\x6d\x12\x5e\x72\x82\xd2\x92\x4f\x37\x41\x78\x14\xbb\x8c\x8b\x2c\x17\xe9\x4a\xb2\x9a\x69\x63\x92\x74\xd6\x51\x73\x3c\xb6\x8b\x28\xd9\x46\x09\x67\x44\x72\x46\x19\x47\xda\x58\x85\x00\x33\x23\x9c\x85\x3a\x1c\x9c\x10\xdb\xc6\x94\x3c\x51\x63\x71\x5d\x39\xab\xa6\x0d\xb3\x5f\x35\xa2\xc8\xa4\xd3\xac\x39\x80\x21\x63\x10\x20\xf8\xb8\x46\x1d\x0f\xe1\x06\x17\x67\x98\x01\xc6\x53\x64\xc1\x86\x14\x40\x2c\x41\x07\x11\x50\xf4\xe0\x84\x8d\xf2\xd9\x95\x4a\x0c\x46\xb4\x12\xf7\x00\xa0\xd2\x94\x03\x4f\x7d\xf8\x26\x8a\xa7\x96\x63\xf2\x34\xa6\xec\x78\xb2\xea\x2a\x65\xed\x56\xe5\xcb\x38\x60\x6d\xde\x18\x51\xa4\x53\x8d\x59\x63\x81\x31\x4b\xd4\x84\x2a\x0c\x90\x50\xba\x5a\x85\xfa\xb7\x47\xff\x84\x43\x59\x0e\xa6\xc1\x24\x9f\x13\xf6\x8b\x9a\xa5\xb1\xbc\xed\x6f\xfb\x4d\xcd\x7d\x96\xd5\xeb\xba\xae\x5a\xb5\x06\xe7\xec\x42\x04\xa9\x48\xd5\x8d\x08\xa3\x88\xd5\x77\x16\xea\x4b\x8b\xee\x1d\x03\x8d\xe5\xfc\xb0\x2f\x5b\x35\x67\xc1\x3e\x7a\x2b\x0e\xcd\xa7\x49\xf0\x54\x7d\xaa\x9f\x29\xdc\xfc\x63\xa4\xb4\x1f\x44\xb0\x6d\x06\x28\x07\x86\xcf\x7e\x58\xfc\x56\xfe\x4b\x6d\xab\xeb\xf5\xb7\xdf\x9b\x87\x7e\xff\x66\xf1\xef\xff\x04\x00\x00\xff\xff\x75\xaa\x2c\x47\x98\x55\x36\x00") +var _openapiJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7f\x73\xdb\x38\x96\xf7\xfb\x56\x50\xde\x5b\xe5\xee\x67\x6d\xb9\x33\xbb\x55\x33\x37\xa9\xad\x5b\xee\xc4\x99\xc9\x3e\x99\x8e\x37\xce\xf4\xd4\xad\x9b\xad\x1d\x88\x84\x24\x3e\xa6\x08\x36\x41\xda\x71\x4f\xe5\xbd\xdf\xc2\x01\x40\x82\xfa\x2d\x91\x12\x45\xe9\xfb\x57\xa7\x65\x09\xc4\x2f\x1e\x1c\x7c\xce\xc1\x17\xff\xbc\x50\xcf\x7c\x3c\x16\xd9\xc5\xeb\x8b\x3f\x0c\x7e\xba\xb8\xba\x88\x92\x91\xbc\x78\xfd\xcf\x8b\x3c\xca\x63\x71\xf1\xfa\xe2\x7f\x17\x43\x91\x25\x22\x17\xea\xe2\xea\xe2\x49\x64\x2a\x92\xc9\xc5\xeb\x8b\xa7\x9f\x06\x3f\x0d\x7e\xba\xf8\x7e\x75\x91\xf2\x7c\xa2\xf4\x2f\x6e\x78\x1a\xdd\xe8\x7f\x8c\x45\xae\xff\x13\x0a\x15\x64\x51\x9a\x9b\x1f\x8c\x45\xce\xf8\x13\x8f\x62\x3e\x8c\x05\xbb\xbd\xff\xc0\x6c\x61\xba\xdc\x40\x26\xaa\x98\x0a\x75\xf1\xfa\xff\xbb\xe0\x69\x1a\x47\x01\xd7\x3f\xbb\xf9\x3f\x4a\x26\x17\x57\xb5\x8f\x5e\xf8\x34\x9e\xf9\xe8\x29\x09\x07\x8f\x65\x35\x07\x69\x26\x73\x39\x2c\x46\x17\xff\x7d\x75\x91\x66\x32\x2c\x82\x3d\x14\xac\x82\x89\xb0\x15\x9e\xe4\x79\xaa\xf4\x67\x39\x1f\xd3\x07\x81\xcc\x84\xfe\x7f\x99\x8a\x8c\x0a\xfa\x10\x9a\x0e\x78\x2b\x33\x71\x7b\xff\xe1\xd7\xaa\xe1\x99\x50\xa9\x4c\x94\xa0\x0e\xfc\xc3\x4f\x3f\xcd\xf7\xdb\xa7\xff\x7d\x61\x9f\xc6\xf5\x1f\xff\xaf\x4c\x8c\x2e\x5e\x5f\xfc\xcb\x4d\x28\x46\x51\x12\xe9\x2f\xa9\x9b\x48\x0e\x1e\xff\xa4\x06\x3c\x8d\xa6\x3c\x98\x44\x89\xc8\x5e\x06\xe9\xe3\x58\x7f\xa0\x06\x53\x91\xf3\xc1\xd3\xab\x81\xff\xe0\xef\xdf\xaf\x2e\xfe\xfd\xa7\x57\xf3\x4f\xfb\x5b\xc2\x8b\x7c\x22\xb3\xe8\x77\x11\x5e\x7c\xff\xae\xbf\x47\xc3\xfa\xf4\x6a\xd3\x91\xcd\x84\x92\x45\x16\x88\xd3\x1c\xd6\xff\x79\x7a\xb5\x74\x64\x7f\x7d\x75\x7b\xff\xe1\xb3\xd7\xfc\xc3\x0e\xae\x7b\xf2\xc7\x48\xe5\x3b\x0d\x70\x20\xa7\xa9\x4c\x44\x92\xab\x9c\xe7\x85\xad\xf6\xc2\x11\x8f\x23\x95\x33\x39\xfc\x3f\x22\xc8\x15\x93\x23\xf6\x18\x25\x21\x7b\xeb\x7e\xfe\x40\x3f\x9f\x19\xfe\xff\x75\xf3\xbf\xf6\x37\x70\x57\x73\x65\xbd\x51\x79\x26\xf8\xf4\x3f\x9e\x79\x1e\x4c\x36\x2b\xa5\xfe\x93\x5d\xe7\x82\xee\x1a\x33\x19\xe6\xfb\xa3\xed\xf9\x30\xd0\xb5\xd0\xa3\x3f\xf3\xa8\xad\x66\xc0\xd5\xc5\xb7\xeb\xaa\x37\xae\x79\xe0\x8d\xf1\xc5\xcc\x1f\xc7\x99\x2c\xd2\x6b\x6b\xb7\xaf\xf5\xa8\xd3\x14\xd1\x9f\x5e\xbc\xbe\xb8\xb8\xba\x30\x1f\x5d\xcc\x37\xdd\x5b\x38\x5e\xd1\x43\x53\x9e\xf1\xa9\xc8\x45\xa6\xbb\xf3\x9f\x17\x45\x12\xfd\x56\x88\x0f\xb9\x98\xaa\x8b\xd7\x79\x56\x88\xab\x8b\xfc\x25\xd5\xeb\x8f\xca\xb3\x28\x19\x5f\x5c\xcd\xb4\xe2\xcb\x44\xb0\x40\x26\x79\x94\x14\x82\x49\xfa\x94\xa9\x89\x2c\xe2\x90\x0d\x05\x53\x22\x67\xcf\x13\x91\xb0\x4c\xe4\x59\x24\x9e\xa2\x64\xcc\xa6\x32\x23\xeb\x54\xc4\xb9\x62\xa3\x4c\x4e\x59\x3e\xd1\xdf\xcc\x9e\x44\x36\x60\x0f\x51\x12\x08\x96\x4f\x22\xc5\x9e\x78\x5c\x08\x16\x29\xfb\x37\x46\x9d\x2f\xc2\x2b\x16\xc4\x91\x7e\x3b\xd8\x94\xbf\x30\x99\xc4\x2f\xac\x50\x82\x0a\x29\x2b\x62\x7e\x4a\x85\x73\x96\x66\xe2\x29\x92\x85\x62\xbf\x15\x22\x7b\xb1\x8f\x66\xcf\x51\x3e\x61\x51\x28\x92\x3c\x0a\x78\x6c\xff\x56\xf5\x06\xfb\x41\x7c\x0b\x44\x9a\xb3\x91\xcc\xa8\x6c\x53\xa4\x1c\x95\x0f\xf9\x91\xf1\x24\xf4\xea\x4e\xd5\xc9\x84\x7e\x19\x19\x9f\xad\x4a\x94\xb3\x50\x0a\xc5\x12\x99\xb3\x4c\x04\x72\x9c\x44\xbf\x8b\x01\xfb\x30\x32\x05\xa4\x22\x88\x46\x91\x08\xe7\x7e\xa6\x7f\xc1\x62\x99\x8c\x45\xa6\x3f\x8a\x42\xdd\x9d\xf9\x44\xf7\x46\x21\x58\x2e\x99\xf8\x96\x46\x66\xda\xb3\x1f\xc6\x22\x11\x19\x8f\xe3\x17\x36\x8a\x9e\xe8\xaf\xa3\x68\x94\x0b\x91\xb0\x69\x94\x14\xb9\x50\x3f\x32\x99\x99\xba\x8d\xa2\x71\x61\x7f\x16\x4c\x78\x32\x16\x4c\x26\x5e\x5b\xae\xfc\x76\x3d\x47\x71\xcc\xcc\x3b\x13\x9a\x6e\xe3\xec\xdf\x5f\xfd\xc4\x9c\xa1\xbb\xd3\x55\x10\x21\x13\x59\xa6\xfb\x4a\x8e\x4d\x05\xed\x37\xcb\x16\xe5\xf2\x51\x24\x65\x93\xcd\x18\xb2\x44\x88\x50\x99\x6f\xa9\x48\xe5\xfa\x23\x3d\xe1\xaf\x74\x87\x4d\x0b\xa5\x3b\x4b\xe5\x3c\xcb\xf5\x6f\xa2\x8c\xfe\x46\x05\xcb\x22\xaf\x8f\xf8\x28\x12\x71\x38\x60\x9f\xf4\xa3\x9f\x23\x25\xae\xfc\xa7\xe8\x91\x51\x22\x09\x19\x4f\x24\xd5\x8d\xca\xc9\xc4\x6f\x85\xb0\xe5\xd1\xb7\xa9\x86\x7a\x78\x44\xf4\x24\xc2\xea\x73\xdd\x58\x6a\xdc\xda\x6e\xa1\x72\xa9\xc2\x7a\xa6\x97\x93\x3b\x11\xdf\x72\xf6\x28\x5e\xae\xd8\xb0\xc8\xab\x8f\x63\x9e\xeb\xe7\xab\x84\xa7\x6a\x22\xf3\x2b\xf6\x3c\x89\x82\x89\x1e\xf4\x28\xf1\x3a\xa4\xfc\x7e\x39\x91\x6d\xf5\xcd\x2b\x74\x5d\xae\x00\xf9\x84\xe7\x8c\x67\x82\x05\x99\xe0\xb9\x7e\x53\xa6\x32\xa4\x79\x75\xa5\x07\x3e\x14\xb1\xc8\x45\xc8\xf8\x28\x17\x66\x4e\x8f\xa2\x4c\xe5\xb3\x9d\x11\xc7\xfa\xcd\x8d\x92\x20\x2e\x42\x11\xb2\xc8\xcc\x0b\x67\x33\xaf\x18\x57\x34\x21\xf5\x7f\xcd\xa0\x3c\x8a\x17\x45\x8f\xad\x0a\xfe\x7a\xe1\x9a\xfc\xf5\x62\xf0\x35\xf9\x9a\x7c\xd1\x2f\x34\x8d\x91\x99\xd3\x39\x53\x45\x9a\xca\x4c\xd7\x87\x0c\x04\x59\x7b\xfd\x37\x6d\x74\x06\xec\xad\xf7\x8a\x9b\x09\xc0\xed\x57\xbc\xde\x33\x9d\x40\x73\xd0\x7a\x54\xf6\xb5\xc9\x44\x5e\x64\x89\x08\xd9\xf0\xc5\x1f\x31\xfd\xbe\xea\x47\x4f\x23\xa5\x18\x4f\x5e\x6c\xf7\x98\xe5\x48\x0d\x2e\xae\x2e\x12\x3e\xd5\xb6\xce\xcd\x2a\x72\xc3\x2f\x5e\x5f\x90\x71\xb8\xf8\x7e\xb5\x83\x7d\xbc\x65\x4a\xc4\x22\xc8\xe9\xcd\xa0\xd9\x9c\x45\x81\x99\xbb\x66\xf5\x1e\x55\xb5\x75\xe3\x68\x6a\x1d\x65\xa6\xc3\xd4\x80\xbd\x13\x23\x4e\x63\xad\x5f\xf8\x27\x91\xbd\xe4\x93\x28\x19\x7b\x15\xa6\x2f\x3e\xd8\x07\x75\x5d\xeb\x98\x0f\x45\xbc\x49\xad\xe9\x8b\xbb\xd4\x3a\x4a\x72\xa1\xf7\x4a\xb3\xd5\x8e\xa3\x69\x94\xeb\x49\xc4\xd9\x94\x7f\x8b\xa6\xc5\x94\x25\xc5\x74\x28\x32\x53\x61\xbb\xea\x9b\x26\xe9\xda\x93\x71\xb7\x6f\x6d\xc0\xe3\x98\xac\x13\xad\x4f\x91\x7e\x2a\x13\xdf\xc8\x16\xcd\xbe\xf4\x7a\x55\xd3\x9f\xfd\xc3\xcd\x93\x7f\xd8\xa9\x6d\x6d\x28\x95\xa7\x3d\xc2\x90\xe7\x5c\x3f\x8d\xdb\x79\x49\x2f\x68\xc0\x13\xfd\x82\x15\xca\x37\x31\x8a\x4f\xf5\x3b\x17\xe5\x51\xb9\x16\x99\x5a\xea\x55\x53\x54\x46\x44\x3f\xda\xb4\x45\xf7\xec\x80\x3d\x88\x9c\x4c\x8d\x6e\x84\x6e\xbb\x59\x83\x4c\xdb\xc4\x33\xbd\x8d\xdc\xbd\xc0\xf4\x82\xeb\xf7\x7f\x2a\x8b\x84\x8a\x31\xad\xfc\xa1\x48\xf5\xc3\x7e\x17\x99\x34\x9f\xfc\xe8\x5e\x7a\xf1\xa4\xed\x0f\x27\x3b\xe7\x7e\xed\x86\x5b\xbf\xf0\xa3\x28\xce\x85\x36\xfd\xda\x1c\xeb\xb7\xcb\xad\xcc\xd6\x03\xa8\x2d\xce\x69\x26\x94\xd0\x8b\xbb\x1c\x2d\x30\xdd\xba\x06\xa1\x5e\x79\xa7\x51\x22\xca\x45\xae\xe6\x2b\x90\x89\x71\xfb\x1b\xdd\x74\x3d\x22\xc6\x44\x04\x13\x29\x95\xa0\x97\x3b\x97\xce\xb4\xd8\xb1\xd0\xdd\xc2\xb3\x71\x31\xa5\xb6\x90\xad\xa6\x06\x51\x27\xe9\xb6\xd9\xfa\xd4\xb6\x4e\xa6\x77\x3f\x8c\x58\x39\xa5\xaa\x35\xda\x2d\xfb\x33\x0d\x88\x14\x13\xd3\x34\x7f\xa9\xfb\x27\x5c\x69\xd7\xdb\x8c\x7c\x22\x57\x36\x68\x95\x8d\x8c\x46\x33\x16\xd2\x18\xd5\x72\x5e\x8e\x0b\x9e\xf1\x24\x17\xc2\xae\x02\xba\x7e\x6e\xa4\xca\x37\x95\x0c\x6d\xa1\xf4\x7c\x29\xeb\x5e\xda\xfb\xd2\x13\xca\x25\x8b\x94\x2a\xcc\xac\xd2\x5f\x8e\x45\xf5\x86\x94\x8b\xaf\x9b\x70\xd7\xe6\x79\x91\xba\xd2\xcd\x73\x8f\xdc\x6e\x01\x72\x6b\x8f\x5e\xf8\x94\x2a\x44\xb8\x70\x15\xd2\x06\x5b\x15\x43\xa5\xbf\x9c\xe4\x65\x0b\x42\xf7\x73\x65\x7b\x50\x8f\x95\x9c\x8a\x3c\x9a\x0a\xdd\xf6\x91\xc8\xf4\x0c\xd5\x6f\xe1\x8c\xa3\x51\xad\xbb\x7a\x44\x45\xa2\x8a\xcc\x75\x1f\x77\x9e\x83\x6d\x9c\xed\x35\xd3\x64\x7a\x31\xc9\x47\x60\x6a\xca\xe3\x58\x64\x2c\x98\x14\xc9\x23\x6d\xc1\x38\xd3\x96\x8e\xc5\x3c\x1b\xbb\x81\xa6\x37\xde\x14\xaf\x1b\xad\x5d\x11\x41\x13\x2f\x95\x4a\x45\x7a\xc2\xd9\x6e\xa3\x09\xe7\xbf\x5f\x45\x1a\xea\x6e\x64\x61\x91\x99\xe1\xa0\xe7\x88\xd0\x8c\x07\x79\xa5\x76\xdd\xb3\x73\xd8\xfc\xd8\xd4\xfa\x99\x2b\xfb\xce\xe5\xcc\xce\x08\xdd\x27\xf3\x0b\xbf\x71\x87\xb9\xd2\x03\x1c\x14\x31\x3d\x31\xaa\xa6\x8d\x6f\xb0\x75\xfb\x5b\x58\x5e\x3e\x8c\xd8\xa5\xfe\xde\x25\xd9\x56\x63\x6b\x64\x91\xa7\x05\xf5\x75\x9a\x89\x3c\x7f\x61\x69\xa6\xcd\xbc\xff\x78\xf3\x87\x16\x9e\xff\x77\xfd\xd0\xea\x85\xb6\xce\x9b\x79\xc1\xf4\x2c\xbf\xd2\x06\xec\x59\x59\xd7\xd8\xce\x09\x19\x04\x45\x56\xce\x5d\x9e\xeb\xcd\x42\x1e\xe9\x0e\xcb\xfc\x61\xe0\xa5\x4f\x52\x5f\x01\x5d\x59\xa5\xff\x32\x14\xe3\x28\x49\xf4\xb8\xca\x11\x9b\x44\x2a\x97\xd9\xcb\x80\xcd\x54\x4d\x2f\x50\x7a\x98\x5e\xb3\x6b\x6d\x03\x8a\x44\x89\xdc\xeb\x34\x3b\x78\xde\x68\x99\xf2\x33\x31\x95\xb9\x60\xba\x4c\x3e\x16\x6c\xc8\xf5\x62\x23\x13\xf6\x5b\x21\xb3\x62\x7a\x9d\x09\x1e\xb2\x51\xcc\xc7\x6f\x4c\xb1\x51\x7e\xa9\xd8\x4f\xb6\xdc\x67\xc1\x54\x34\x4d\xe3\x72\x21\x79\xa6\xd9\x24\x58\x50\x64\x99\x48\xf2\xf8\x85\x4d\xf8\x93\x7e\x37\x59\xc0\x83\x89\xa0\x17\xbf\xb4\x3f\xb6\x44\x5a\x22\x25\x4b\x64\x42\xeb\xca\xc2\x2a\xf3\x9c\xc5\x42\x3b\x71\x5c\xf7\x8a\x50\x13\xfd\x8f\x71\xf4\xa4\x7d\xf0\x27\x6f\xd8\x67\x7c\xbc\x36\x1c\x85\x2f\xd1\x54\x68\x2b\xe6\x36\x77\xba\x8b\x6f\xaa\xf1\xb7\x96\x84\xa6\x3b\x79\xb9\xfa\x0d\x34\xbb\x25\xb7\x78\xd1\x2c\xc9\xc4\x98\x67\x61\x2c\x94\x79\xf5\x93\x17\xa6\xb7\xed\x4f\x51\xfe\xa2\xcd\x5d\x94\xb8\xff\xf3\x1a\x93\x9b\x27\x3f\x88\x40\x26\xa1\xda\xa6\x2d\x43\x29\x63\xc1\x93\xf9\xc9\x6c\xdc\x62\x99\x55\xd3\x55\x9a\x3a\xd3\xd7\x86\x64\x21\x2d\x0c\x23\x4b\x67\x87\x35\x9f\x88\xa9\xb1\x89\x06\xb8\x50\x13\xc2\xf0\xca\x5a\x9d\x2b\xfb\xdd\xa9\x7c\xa2\x85\xd5\x73\x94\xd9\x03\xcd\xcf\x97\x59\xef\xdb\x6b\xa6\xe3\x3d\x7e\xeb\xfe\x7b\x15\xe3\xba\xf9\xa7\xfe\xe5\xf7\xa5\xa8\x8b\xa6\x6c\x7d\xaf\xdc\x21\xe8\xda\x95\x4a\xe9\x56\x74\x4d\xa5\x1a\x13\x29\x3d\x3e\xc7\x0b\xa4\xf4\x34\x72\x6f\xe9\xfc\xe3\xec\xf4\xa4\xff\xd8\xd9\x99\xf2\x7c\x42\xdd\xff\x5b\x11\x65\x22\x34\x4f\xe9\x7c\x59\xab\xbf\x2c\xc9\x28\x1a\x4f\x79\xba\x8e\x04\x67\x76\x0d\x9b\x47\xc2\xba\x80\xbf\xf2\x14\x30\xd8\xf5\xc4\x7b\x99\xdd\xc6\xf1\x2f\x7c\x2a\x54\xca\xf7\x13\x26\xf0\x5e\x40\xfb\xd0\x23\x00\xc2\xd5\x44\x00\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x06\x0a\x3e\x14\x0a\x16\x49\x98\xca\x28\xc9\x77\x85\x5b\x77\xe5\xef\xcf\x1d\x6e\x95\x3d\x71\x48\xb8\x55\x3e\xb4\x73\xb8\xe5\x4f\x04\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\x2d\xc0\xad\x83\xc1\x2d\xed\x59\xec\x4c\xb6\xf4\x8f\x41\xb5\x74\x2f\x1c\x94\x68\xe9\x07\x76\x4f\xb3\xec\xe0\x83\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x81\x64\x1d\x8a\x64\x51\xd7\x66\x54\xdd\x1d\x71\xd6\x47\x5d\xc2\x67\x5d\xc2\xd9\x33\xad\xaa\x2b\x0e\x09\xb6\xaa\xa7\x76\x4e\xb7\x6a\x73\x01\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\x0b\x88\xeb\x50\x88\x2b\xa9\x28\xcc\x6e\x84\xab\xc4\x38\x67\x0f\xb8\xfc\x9e\x00\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\xd9\x2b\xcd\x01\x4d\x01\x4d\x01\x4d\x39\x38\x4d\xd9\x63\xf6\x4a\x89\x14\x3a\x4f\x5e\xf1\xe1\xc6\x7c\xee\x8a\x54\x0b\xb8\x91\x59\xad\x18\xef\x06\x11\xed\xca\x73\x4c\xad\xd7\x12\x1d\x3b\x21\x86\x32\x2c\x39\xb8\xfd\x77\x5d\x54\xbf\xd1\xa8\xeb\xce\xdd\x75\x1d\xb0\x6b\xd4\x15\x8b\x92\x50\xf7\x95\xb3\xf7\xb5\xcd\x99\xf3\x28\xb5\x57\x34\x14\x2c\xd5\x03\xab\xdd\xd1\x01\xbb\x4d\x58\x94\x18\x34\x22\x33\x56\x24\x25\x5d\x09\x59\x98\xbd\x7c\x2e\x12\x16\x46\x99\xd0\x86\x40\x94\x5b\x76\x32\x80\xda\xa3\xb0\xcc\xc2\xbd\x16\x76\x87\xc8\x46\x45\x46\xee\x67\x9a\xc9\x40\x28\x65\xd7\x08\xcf\x8b\x1e\xb0\x5f\xe9\x89\xe4\xd6\xd3\x5a\xad\x17\x88\xdb\x38\x7e\x4d\x0b\x7b\x98\xbd\xb0\xac\x48\xf4\xce\x55\xdb\x03\xe7\xcd\xd8\xe2\x44\x58\xbd\xa7\xa6\x8a\x2d\x2c\xa9\xe4\x37\xfe\x95\x27\x7c\x2c\x32\xb3\x03\xa2\xbb\x16\xb8\x52\x32\x88\x68\x49\x2f\xf7\x1a\x9c\xf6\x75\x32\x63\xda\xe3\xcb\x5f\x4a\x1f\x67\xca\x1f\x75\x4b\xf3\x89\x50\xc2\xd9\x32\x6d\x89\x1d\x8c\x22\x1e\x33\x14\x8c\xec\x2d\xed\x2b\x64\xc6\x5e\xfd\xe1\x4f\xfa\xbb\x19\x0f\x88\x9a\xc5\x32\x19\x1b\xcb\x45\xbe\xbf\x76\xd2\x78\x94\x98\xc8\x0c\xf9\xd6\xd5\x77\x89\x24\x58\xa6\xa7\x37\x8f\x34\xf3\x5f\xdf\xdc\x8c\x65\xcc\x93\xf1\x40\x66\xe3\x9b\xf4\x71\x7c\x53\x24\x51\x20\x43\x71\xf3\x2f\x1f\xd4\xbd\x2e\x65\x76\xd7\x6b\xdb\xdc\x85\xad\x23\x93\xf2\x87\x45\x76\xee\xad\xf1\x7f\x5b\x29\xfe\x0f\xf3\xc5\xdf\x06\x81\x48\xdb\x29\xbf\x89\x99\x26\x6b\xba\x17\x33\xdd\x10\x4a\xef\xeb\xae\x8f\x2a\x06\x61\x6e\xc4\xa1\x7f\x7f\xbf\x19\x6a\xcb\x95\x8c\x69\xa2\xad\x59\x61\x7e\x36\x5f\xed\xed\xfa\x12\x56\x0d\x38\xe0\x3a\xe3\x1e\xfa\x7d\xaf\xef\x75\xf5\x94\x3d\xbc\xd5\xf5\xc2\xdb\x7e\xa7\xfd\xd2\xbb\x7a\xa3\xab\x99\xd1\xfa\xfb\x0c\x3f\x01\x7e\xc2\x7e\xfc\x84\x5d\xba\xd0\x42\x16\xd3\x6f\x49\xc8\xf4\x9b\xc5\x54\x20\x53\x71\xc5\x54\x11\xd0\x36\x9a\x36\xb6\x82\x4f\xcd\x8e\x2f\xcd\x24\x41\x9d\xfa\x1d\x57\x6e\xf9\xeb\xc9\x45\x57\x4b\x16\x3f\xdc\x7f\xd5\x7e\x5c\x3e\xf4\xfb\x04\x11\x7a\x44\xe8\x11\xa1\x47\x84\x1e\x11\x7a\x44\xe8\x11\xa1\x47\x84\x1e\x11\x7a\x44\xe8\x11\xa1\x47\x84\x1e\x11\x7a\x44\xe8\x11\xa1\x47\x84\xfe\xc4\xee\xb9\x5e\x1d\x3f\xe9\x04\x16\xb5\x1b\x41\x59\xc1\x76\xf6\x19\x43\xa9\x1e\x8b\x58\x3d\x18\xfc\x31\x31\xf8\x83\x58\xbd\xfd\x44\xf5\x66\x8b\x6f\x3b\xae\x57\x2f\xbf\xab\xc8\xde\x4a\x83\x6d\xb6\x0c\xf3\xf5\x32\x9f\xb3\x40\xc6\xb1\x08\x9c\x63\xd0\x2b\xf3\x6d\x5a\x60\xcc\xf7\xdb\xb2\x19\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\x80\xf4\xbb\xe0\xaa\x29\x0f\x26\x51\x22\xb2\x97\x41\xfa\x38\xd6\x1f\xa8\x81\xf6\x7b\x06\x4f\xaf\x06\x0f\x39\xcf\x0b\xd5\x18\xff\x98\x35\xa3\x82\x31\xfb\x61\xf7\x0d\x21\x08\x12\x6b\x17\x27\xd6\x9a\x8f\xbf\x2f\xcd\xaf\x25\x3b\x58\x07\x20\xbd\x02\x6d\xba\xfe\xad\x64\xc0\x2e\xb3\x2d\x0f\xc6\x8f\x26\x5f\xfc\x1b\xf9\xb4\x43\xfd\x2f\x1e\xe4\x03\xc6\xee\xf4\x7f\xdd\xe7\x53\x1e\x11\x05\x57\x2c\x88\x0b\x95\x8b\xec\xda\xf6\x69\x60\x77\x91\x2c\x8e\x1e\x05\xbb\x2c\x2b\x7a\xa9\x97\xc7\x34\x13\x01\xa7\x08\xc7\x7d\xcc\x93\xc4\x2e\x78\x64\x74\x78\xac\x57\x98\x57\x83\x57\x7f\xf2\xa6\x04\x3d\xba\x0d\xa3\x59\x36\xac\xe4\x7c\x43\xd7\x44\x5d\x1b\x76\x67\x5a\xa5\x27\x74\xaa\x5c\x0b\xac\x6b\x56\x28\xed\x71\xf1\xc4\xb8\xc8\xc6\x14\xee\xd6\x18\xfd\x8c\xce\x98\x7e\x13\xab\xa8\xdf\xa6\xbd\x18\xc2\x62\xe1\x5b\x9a\xc6\x3c\x10\xfd\x7e\x51\xa9\x09\x88\x68\x22\xa2\x89\x88\xe6\x39\x44\x34\x1b\x45\x1c\x8b\x4e\x02\x8e\x3d\xcb\x11\xf1\x83\x8c\x0d\x2d\x6a\x1b\xdb\x8d\x77\x54\x9d\x4f\xd4\xa7\x0a\x76\xf5\x60\x76\x75\xe9\x0e\xdf\xdf\xb4\x47\x09\x53\x66\xc3\xcd\x86\x62\x24\x0d\x07\x73\xb0\xaa\x8a\x16\x5b\x3e\x48\xad\xf1\x0c\x67\x22\x93\xeb\x44\x8c\x39\xf5\x99\x7d\x9e\x6f\x60\x0d\xb8\x2e\x47\xcb\xbe\x4e\xd1\x74\x2a\x42\x6d\xc2\xe3\x17\x1b\x74\xf4\x43\xca\x49\x14\x5f\xd9\x4d\x3a\x21\x22\x36\xce\xb4\x8b\x93\x8a\x2c\x92\x61\x89\x25\x2a\x6f\x47\xb7\xb6\xec\xb8\x42\xe9\x4a\xfa\x70\x89\xeb\x5f\xba\x06\xd9\x87\x8c\x3c\xff\x34\xd2\x3f\xa0\x7a\x4e\x05\x4f\x16\xd6\xb1\x1a\x04\xaa\xca\x3d\xd5\xa4\x45\x4c\x51\xf9\xc7\xaf\x59\x1a\x0b\xae\x44\x49\xe6\xef\x33\x99\xf2\x31\x0d\xd5\xbd\x8c\xa3\xe0\xe5\xca\xf4\x96\x61\xd1\xae\xd5\x61\x59\x80\xf1\xa5\xff\x38\x60\xde\xf6\x24\x14\xa9\x48\x42\x91\xe4\x55\x3c\x48\x30\x99\xa5\x13\x9e\xe8\xb6\xeb\x01\xc8\x0a\x71\x33\xe2\xb1\x8b\xcd\x7e\xbd\x30\x7f\xfe\x7a\xc1\x46\x51\xc2\xe3\xe8\x77\x17\x5f\x19\x0a\xc6\xc3\x90\xa0\xed\x8d\x01\x20\x61\x85\xed\x4c\xf1\x97\xaa\xfa\x91\x89\x87\x0e\xd8\x5d\x44\x6f\x89\x57\x75\x99\xcd\xb7\x8d\xa8\xbc\x49\x4d\x30\xe1\x58\x7a\x87\x65\x3e\xf1\x46\xc0\x54\xec\x9d\x6b\xd2\x56\xfd\xbf\xdc\xb6\x50\xed\xf4\x2b\x3d\x91\xcf\x6c\xcc\xb3\x21\x1f\xd7\xd2\x4c\xca\xf7\x52\x64\x23\x99\x4d\x75\xb7\x2d\x6c\xd2\xa7\x99\xda\x2d\x6f\x11\xbd\x24\x6e\x86\xa7\xa6\xf9\x91\x9e\x7d\x41\x14\x56\xd1\x51\x8a\x72\x51\xbc\xba\x1c\x06\x25\x72\x17\x03\x72\x71\xac\x81\xd7\xdf\x2e\x02\xe2\xf8\x53\xb5\xd7\xac\x3f\x6c\xc0\x4c\x12\x11\xb9\x30\xbe\x71\xba\x34\x6d\xb8\x64\xd7\x76\x8e\xd4\xe7\x90\x7a\xc3\x2e\x7f\xe6\xc1\xa3\x5e\x60\x93\x50\x7f\x8b\xc7\xb1\x7c\xa6\x2f\xcd\x74\x9c\x89\x50\xda\xf7\xa9\x5e\x88\x6b\xc1\xb0\x2c\xe9\x0d\xbb\x7c\x2f\x33\xe1\x15\xcb\x02\xae\x02\x1e\xea\xd6\xdb\xfe\x21\x63\x6f\xca\x53\xc6\x7a\xce\x15\x38\x2a\xcb\xa8\xd1\x92\x99\x89\x76\x2c\xf4\xad\xb5\xe4\xae\x43\xc1\xbe\x3d\x21\xbe\x3c\x98\xcc\x57\x8c\x62\x08\x94\x32\x63\xa8\xeb\x86\x9b\xdc\x59\xf7\xeb\x9a\x8a\xff\xd7\x05\x9e\xd8\x54\x64\x63\xb1\xfc\xcf\x2a\xcf\x78\x2e\xc6\x51\x70\x3d\xf7\xc5\xa3\xf3\xf8\xa8\x6e\xdd\x6e\xa1\x57\x4c\xc1\x7b\x1a\x60\x38\x7e\xd8\x50\x1f\x68\x43\x3d\x13\xaf\x77\x73\xda\xe4\x94\xa4\x26\x7e\x67\x02\xd3\xec\x07\xff\xb5\xa4\xbf\x99\x17\xfd\x47\x5a\xae\x4d\xd6\x24\x8f\xe9\x97\xda\xd9\x35\xbf\xa6\x6f\x90\xe3\xa9\xd8\x0f\xff\xa9\x64\x42\x33\xfc\x8a\xfd\x55\x1b\x0a\xfb\xef\x07\x67\x3e\xaa\x0f\x7f\x6c\x41\x3f\x64\x99\x0f\xf9\x5e\x66\x01\xb9\xcf\x63\x49\x23\x24\xd9\xd7\x8b\x91\xfe\xec\xeb\x05\xbb\xad\x35\x79\xc0\x3e\xe4\xd6\xd7\x25\x5c\x6b\x67\xfc\x35\x0f\xa8\x97\x28\x05\x31\x8e\x02\xeb\x76\x10\xdd\x95\xcf\x76\x00\x4c\x8a\x5e\x2a\x64\x1a\x8b\x01\x33\xcf\x1c\xc5\x7c\x5c\x0e\x3c\x45\x61\x17\xf6\x56\xf9\x78\xaf\x0f\xf4\xef\x7b\x09\x79\x53\x1b\xc3\x3b\xbe\x78\x17\xbd\xd2\xd6\x12\xf9\x0f\xf2\x42\x59\xed\x47\xb1\x10\x64\xf3\x83\x6c\x22\x09\x53\x19\xe9\xbd\xc9\x6e\xe2\x35\x77\xe5\xef\x21\x5e\xe3\x7c\x19\xbf\x4f\x90\x17\x8f\xbc\x78\xe4\xc5\x23\x2f\x1e\x79\xf1\xc8\x8b\x47\x5e\x3c\xf2\xe2\x91\x17\x8f\xbc\x78\xe4\xc5\x23\x2f\x1e\x79\xf1\xc8\x8b\x47\x5e\x3c\xf2\xe2\x37\xa4\x81\x25\x52\xe8\x5c\xbc\xc6\x87\x1b\xdb\x89\xd7\x74\x82\x8a\xda\x95\xae\x59\x41\x76\xf6\x99\xe8\x59\x3d\x16\x71\x29\xc4\xa5\xce\x25\xd1\xb3\x36\xeb\xdb\x4f\xf4\x9c\x2d\xbe\x6d\xe9\x9a\x7a\xf9\x5d\x49\xd7\xac\x34\xd7\x5b\x49\xd7\xf4\xca\x7c\xaf\x93\xae\x01\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x07\xa2\x3f\xbe\xd3\x2c\xcd\xa5\x6b\x56\x93\x7b\x48\xd7\xec\x23\xab\x76\x07\xe5\x9a\x5e\x71\xb6\x45\xca\x35\x3b\xb1\x35\x28\xd7\x9c\x83\x72\x4d\x7b\x4c\xbc\x81\x72\xcd\x6a\x3b\xb8\xb9\x72\x4d\xcf\x5e\xd4\x85\xca\x35\x08\x68\x22\xa0\x89\x80\xe6\x29\x06\x34\x3b\x52\xae\x69\x12\x6f\xec\x95\x41\x5d\xac\x5b\xb3\x93\x3d\x85\x6e\x4d\x7f\xad\x2a\x74\x6b\xa0\x5b\x03\xdd\x1a\xe8\xd6\x40\xb7\x06\xba\x35\x1d\xeb\xd6\xac\xe1\x7b\xbb\xe8\xd6\x2c\xf3\xc8\xa0\x5b\xd3\xcd\x06\x1a\xba\x35\x47\xe3\xf8\x9d\xfd\x76\x1a\xba\x35\xd0\xad\xd9\x2f\x85\x68\xa2\x5b\xb3\xd7\x60\x97\xaf\x5b\xe3\x3f\x08\xba\x35\x87\x8b\xb0\x3d\x89\x06\xa2\x35\xfa\xc7\x10\xac\xa9\x9c\x18\xdb\x1f\xc8\x84\x47\x26\x3c\x32\xe1\x91\x09\x8f\x4c\x78\x64\xc2\x23\x13\x1e\x99\xf0\xc8\x84\x47\x26\x3c\x32\xe1\x91\x09\x8f\x4c\x78\x64\xc2\x23\x13\x1e\x99\xf0\x9b\x22\x40\xed\x29\x74\x2f\x54\x63\xa1\xc6\x76\x22\x35\x3c\x39\x3c\x1d\x6a\x59\xa3\x66\x31\xcc\xd9\x6b\x3a\x27\x3d\x12\xb1\x27\xc4\x9e\xce\x26\x95\xd3\xcd\xf8\x3d\xa4\x71\x7a\x45\xb7\xae\x49\x53\x96\xdd\x99\x1e\xcd\x32\xab\xbc\x9d\x16\x4d\x5f\x4c\xf4\x5a\x1d\x1a\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\x77\x90\xf7\xa3\x3a\x99\xd2\x82\x06\xcd\x52\x28\x0f\xfd\x99\xd6\xb3\x63\x77\x11\x9f\xe9\x0b\x58\x5b\x28\x3c\xb3\x2d\x4c\x83\xe8\xcc\x59\x88\xce\xb4\x02\xbd\x9b\x08\xce\x2c\x35\x7a\x5b\x88\xcd\xf4\xe7\xc5\x5c\x2c\x34\x83\xa8\x24\xa2\x92\x88\x4a\x9e\x40\x54\xb2\x2b\x61\x99\x1d\x03\x87\x7d\x4a\xe8\x58\xa2\x29\xb3\xad\xe9\x84\x9e\x4c\x7f\x8d\x28\xf4\x64\xa0\x27\x03\x3d\x19\xe8\xc9\x40\x4f\x06\x7a\x32\x5d\xeb\xc9\x2c\x67\x75\x3b\x69\xc9\x2c\xf0\xc2\xa0\x23\x73\xf8\xfd\x31\x34\x64\x8e\xc6\xd9\x3b\xfb\x1d\x33\x34\x64\xa0\x21\xb3\x3f\xd8\xd0\x48\x3f\x66\x5f\x81\xaa\x9a\x76\x8c\x7d\x08\x74\x63\x0e\x16\x19\xa3\x60\x76\x46\xf6\x70\x47\xf1\x98\x8f\xba\x84\xcf\xba\x04\x28\xc8\x94\xee\x4b\xad\x53\x90\xcc\x8e\x64\x76\x24\xb3\x23\x99\x1d\xc9\xec\x48\x66\x47\x32\x3b\x92\xd9\x91\xcc\x8e\x64\x76\x24\xb3\x23\x99\x1d\xc9\xec\x48\x66\x47\x32\x3b\x92\xd9\x37\xa4\x80\x15\x53\xe8\x5c\x4b\xa6\x86\x37\xb6\x14\x94\xe9\x08\x18\xb5\x2b\x2a\xb3\x8a\xef\xec\x33\x87\xd3\x7b\x2e\xc2\x52\x08\x4b\x9d\x4b\x22\x67\x7d\xda\xb7\x9f\xcd\x39\x57\x7e\xdb\x42\x33\x33\x0f\xe8\x4a\x6d\x66\xb5\xdd\xde\x4a\x72\xa6\x5f\x56\x7c\x9d\xee\x0c\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\x3d\x78\xfd\x11\x1e\x63\x69\x2e\x3e\xb3\x86\xe2\x43\x81\x66\x3f\x79\xb6\x3b\xc8\xd0\xf4\x0b\xb6\x2d\xd2\xa2\xd9\x0d\xb0\x41\x90\xe6\x1c\x04\x69\x5a\x84\xe3\x0d\x54\x69\xd6\x58\xc3\xcd\xa5\x69\xfa\xf6\xb2\x2e\xd4\xa7\x41\x80\x13\x01\x4e\x04\x38\x4f\x35\xc0\xd9\x91\x66\x4d\xa3\xf0\x63\xdf\x12\x47\x16\x8b\xd7\xec\x66\x57\xa1\x60\xd3\x5f\xe3\x0a\x05\x1b\x28\xd8\x40\xc1\x06\x0a\x36\x50\xb0\x81\x82\x4d\xc7\x0a\x36\xeb\x80\xdf\x2e\x32\x36\x4b\x9d\x32\x68\xd9\x74\xb4\x97\x86\xa0\xcd\xd1\xf8\x7e\x67\xbf\xb1\x86\xa0\x0d\x04\x6d\xf6\x8c\x23\x9a\xa8\xda\xec\x37\x02\xe6\x4b\xdb\xd4\x9e\x04\x7d\x9b\x83\xc5\xdd\xdc\xe2\x93\xe4\x4f\x32\x2e\xa6\x22\x88\x79\x34\xdd\x55\xea\xe6\xbe\x2c\xec\x57\x2a\xec\xad\x2e\x0c\xaa\x37\xa5\xa3\xb3\xac\x7f\x90\x50\x8f\x84\x7a\x24\xd4\x23\xa1\x1e\x09\xf5\x48\xa8\x47\x42\x3d\x12\xea\x91\x50\x8f\x84\x7a\x24\xd4\x23\xa1\x1e\x09\xf5\x48\xa8\x47\x42\x3d\x12\xea\x37\xa4\x86\x0b\xf1\x42\xe7\x5a\x38\xcb\xa0\xc7\xb6\xb2\x38\x9d\xc3\xa5\x76\x15\x72\x36\x64\x41\xfb\xcc\x25\x5d\x5c\x05\x44\xbf\x10\xfd\x3a\x97\xb4\xd2\xa5\x6f\x40\xfb\x19\xa6\xab\x1e\xd5\xb6\x9a\xce\xf2\x67\x75\x25\xac\xb3\xf1\x22\xb0\x95\xc6\x4e\x6f\x97\x84\x75\x72\x3b\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\xa7\xae\xbc\xb3\x79\xcc\x00\x22\x3c\x7b\x4f\x06\xde\x41\x8f\xa7\xb7\x60\x6e\x91\x34\x4f\x63\x18\x07\x95\x9e\x73\x50\xe9\xd9\x0f\x74\x6f\x20\xd8\xb3\xb9\x11\xdd\x5c\xbb\xa7\xc7\x2f\xf6\x42\x19\x1f\x44\x61\x11\x85\x45\x14\x16\x51\xd8\xce\x24\x7f\xda\x0a\x8c\xf6\x38\x3f\x66\xb1\x10\x50\x63\xcb\x0c\x4d\xa0\xfe\xda\x64\x68\x02\x41\x13\x08\x9a\x40\xd0\x04\x82\x26\x10\x34\x81\x3a\xd6\x04\xda\x02\x45\xee\x22\x0f\xb4\x89\xd7\x06\xa5\xa0\xee\xb7\xeb\x10\x0d\x3a\x1a\xe7\xf0\xec\x37\xec\x10\x0d\x82\x68\xd0\xe1\xd8\x46\x13\xfd\xa0\x83\xc5\xf1\x7c\x29\xa1\x65\x0f\x85\xaa\xd0\x71\x04\x12\x6f\x94\xf1\xeb\x56\xc6\x13\xcd\x77\xdc\x90\x9e\x44\x00\x62\xc3\xc8\xa2\xf5\x7a\x7b\x67\x28\x3a\x8f\x54\x9d\xe0\x94\xd9\x3c\x66\x55\xce\x1a\x44\xae\xe0\x08\x9f\x8b\x23\x8c\xc8\x55\x1f\x22\x57\x9b\x82\x91\x26\xf6\x1b\x88\xe4\x58\x56\x07\x80\x12\xac\x0f\xc7\xb2\x3e\x00\x94\x00\x94\x00\x94\x00\x94\x1c\x31\x28\x91\xe1\xce\x62\xcb\x32\x84\xb4\x72\xe5\xf6\x50\x6f\x40\x1f\x01\xfa\x08\xd0\x47\x80\x3e\x02\xf4\x11\xa0\x8f\x00\x7d\x04\xe8\x23\x40\x1f\x01\xfa\x08\xd0\x47\x80\x3e\x02\xf4\x11\xa0\x8f\x00\x7d\x04\xe8\x23\x6c\x0a\x08\x65\xd8\xbd\x6c\x32\x01\x8d\xad\x45\x92\x0f\x0b\x85\x5a\x96\x44\x5e\xc4\x70\xf6\x9a\xc0\x20\x43\x84\xa3\x10\x8e\x3a\x9f\x74\x05\x33\xdf\xf7\x90\x9c\x50\x16\xdc\xba\x94\xb1\x2d\xb9\x33\xe1\xe2\xc5\x66\x78\x3b\x99\xe2\x7e\x18\xe5\xb5\xa2\xc4\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x40\xec\x47\xa4\xf6\xd1\x82\x04\xf1\x12\xfe\x0e\xc1\xe1\x96\xd3\x5f\x77\x91\x17\xee\x07\x50\x5b\x78\xe4\x77\x3b\x88\x06\xe9\xe0\xb3\x90\x0e\x6e\x01\x72\x37\x39\x7e\xbd\xc4\xd4\x6d\x21\x0b\xdc\x97\x17\x72\xf1\x81\x6a\xc4\x1d\x11\x77\x44\xdc\xb1\xc7\x71\xc7\xae\x8e\x40\xef\x14\x1c\xec\x4d\x96\xc6\x12\x61\xde\xed\xac\x25\x64\x78\xfb\x6b\x39\x21\xc3\x0b\x19\xde\x1c\x32\xbc\x90\xe1\x85\x0c\x2f\x64\x78\x3b\x96\xe1\x5d\x86\xe3\x76\x12\xdd\x9d\xf3\xbf\xa0\x1f\x73\xe8\xcd\x30\x74\x62\x8e\xc6\xcd\x3b\xfb\x0d\x32\x74\x62\xa0\x13\xb3\x2f\xba\xd0\x48\x15\x66\x3f\x31\xa8\x9a\x06\x8c\x0c\xa1\xf8\xd2\x51\xc8\xeb\x86\xe7\x39\x37\xee\xcb\xc2\xc8\x57\x20\x93\x44\xf7\xdc\x9f\xef\xbe\x54\x06\x48\x6f\x48\xe9\x67\x1b\x67\x96\xdb\x8f\x76\x3b\xa8\x63\xaa\x60\x9c\x84\x3f\x8b\xbc\xe6\x27\xdc\x9a\xea\xef\xf0\x06\xd6\x47\xa4\xe9\x3b\x66\x2b\xd9\xe0\x2d\x33\x2d\x71\x80\x69\xf3\x63\x57\x76\x80\xee\x3f\x3d\x1c\xc7\x08\xdd\x4b\x75\xbe\x43\xd4\xd2\xc1\x04\xae\xbd\x52\xed\xcb\x99\xe4\x6a\x4a\x99\x17\x41\x91\xbb\x13\x03\xd3\x29\x4f\x66\x08\x91\xef\x98\xe8\xdf\x92\x69\xcd\x68\x79\xa5\x3f\xc9\x64\xa6\x68\x4a\x6f\x94\xe1\x4c\x06\x31\xfd\xb9\x05\xc7\x6d\xc6\xbe\xcf\xf6\xdc\x59\x18\xfb\xa5\xf1\xe5\x3c\x14\x99\x19\xa2\xac\x10\xb3\x1b\x04\x65\xff\x4a\xa3\x3a\xd4\xbe\xb9\xf1\xf4\x45\x85\x0d\xed\xab\x6d\xb2\x8e\xfc\x49\x40\x59\x96\x55\x23\x4c\x51\xad\x84\xc4\xf3\x30\x4a\x5c\x8d\xaf\xca\x3a\x99\x3c\x27\x95\xf3\x24\xe4\x59\xc8\xa2\x44\xaf\x58\x55\x66\x90\x9d\x62\xb6\xde\x91\x5a\x50\x63\xe2\x75\xf5\x2a\x47\x5b\x6d\x1c\x56\xd4\x58\xea\xe5\x73\x69\x27\x4b\xb3\xb8\xb6\xd1\xc9\xb2\x68\x25\xef\xe0\xcb\x97\xff\x77\x59\x7d\x39\xd3\x1e\x40\x09\x2f\xe3\x58\x1a\x50\xba\xb0\xb2\x2e\xa3\x34\xe5\x7a\x57\xc6\xf2\x49\x26\x8b\xf1\xa4\x4c\xff\x35\x16\x20\x2b\x12\xca\xac\x54\x26\xef\x4b\x17\x1f\x29\xaf\x64\x9b\x16\xfe\x2c\xb3\x47\xa1\x3d\xe3\x50\x38\x9c\x37\x57\xc6\xea\x11\x6d\xec\xa1\x0c\x75\x5f\x24\x63\x6d\x95\x57\x9e\x3c\xb6\xdf\x33\xf9\x94\x3d\x09\x6f\x2d\x3d\x84\xfc\xb3\x6d\xf4\x41\x73\x02\xdc\x43\xbf\xef\x75\x4b\x53\x3d\x65\x0f\xd1\xd8\x7a\xe1\x6d\x9f\x04\xf5\x4b\xef\xea\x34\x68\x35\x33\x5a\x77\x3f\x00\xae\x00\xae\xf6\x93\xd9\xd1\xd4\x85\xac\x26\xfd\x59\x78\x8e\xc7\x87\x09\xc4\x53\x64\x8d\xd7\x9a\x55\xd8\x7d\xf1\x34\x96\xe1\x3b\xd7\xec\x83\xac\xc3\x36\xa8\xf9\xf4\x6a\x28\x72\xfe\x6a\x50\x3e\x7c\x3f\xeb\xf1\xf2\xa7\xb5\xb8\x2e\xaf\x7e\x48\x5b\xeb\xf3\xaa\xa7\x1c\x76\x9d\x4e\x5d\x68\xd6\xae\xd6\xde\x04\xf2\x97\x6b\xaa\x27\xd6\x6c\xac\xd9\x27\xbc\x66\x7b\x53\x1f\x8b\x76\x37\x8b\xf6\x37\x11\x6c\x4d\xf6\xf5\x8f\xba\xe7\xfa\x77\xba\xea\x27\x80\x8c\x75\x3b\xda\x63\xfa\xdd\x8c\xcd\x1c\xd1\x3f\x97\xc1\x69\xb8\x34\xbf\x35\x9c\x9e\x28\x23\xad\x7b\x74\xbe\xd6\xd2\x7b\x0f\xea\x0f\x18\xcf\xc6\x4f\x8c\x67\x19\x7f\x19\xb0\x5f\x64\xee\xfe\x60\x16\x1c\xbd\xca\x32\x35\x11\x71\x5c\x63\xf5\x54\x4a\x0b\x26\xfb\xed\x29\xc6\x1b\xea\x23\x7b\x16\xcb\xcf\x32\xaa\xfc\xd9\xa2\xed\x3a\xaa\x37\x4e\xdb\x56\xa8\x7e\x6f\xc1\x85\xc5\x35\x3c\xa6\x60\xc2\xe2\x1a\xda\x55\xbc\x61\x27\x76\x1f\x3c\xa0\x55\x65\x7d\x6f\x36\x76\x47\x62\x39\x5e\x7d\xc2\x36\x96\xe3\x05\x57\xef\x6d\xb2\xd6\xe5\xe2\x5b\x7e\x93\xc6\x3c\x9a\x85\x07\x47\x75\xea\xf6\xa3\x1c\x77\xbf\x6c\xee\xe1\x90\x66\xab\x51\x6f\x3d\x2b\xcb\x65\xc8\xbe\x5b\xb1\x1c\xab\x2d\x96\x9f\xfd\xac\x3c\xcb\xd3\xd8\xca\xdc\x71\x3d\x81\xe7\xcc\xc1\xea\xb7\x6a\x44\xbf\x6e\xe3\x44\xcc\x87\x11\x73\x42\x1f\x9e\x82\xd4\xf0\x25\x77\xea\x51\x3c\x9c\x95\x2e\x2c\x4f\xcb\x90\x84\x11\xcf\xed\xde\xd5\xbc\x88\x64\xdd\x6c\x34\x71\xca\x5f\x88\x1b\x84\x91\x4a\x63\xfe\x42\x9a\x34\xd3\x94\x72\xe2\x29\x6d\x9f\xc5\x51\x42\xeb\x6f\x2c\xc7\xe3\xc8\xed\x5f\x3d\x61\x27\x15\x47\xe3\x49\x1e\xbf\x18\x31\x21\xbd\xf4\xb8\x0f\xaa\xad\x70\xfd\xbd\x27\x21\x8d\x59\x1d\x97\x9f\x75\x6b\xda\x77\x17\xce\xc5\x47\x38\xc0\x16\x75\xc7\xf5\x95\x26\x49\xa9\x15\xe8\xe6\xa3\x15\x97\x34\x6f\xf2\xbc\x11\x98\x7d\x97\xdc\xef\xdb\x78\x9b\x6e\x59\x26\x62\x73\x24\x8c\xe2\xe4\x8b\x8f\x98\x59\x79\x1b\xf3\x15\x7a\xb9\x2a\xd3\x35\x91\xcf\xb6\xce\xf5\xd3\x61\x69\x26\x02\x11\x0a\x55\xa9\x1b\x71\xf2\x1a\x9e\xb9\x32\xb2\x81\xa4\x3c\xa5\xed\x9b\xfe\x35\x53\x56\x5c\xd4\xb8\x16\x46\x57\xd0\xad\xe5\xa5\xdc\xd1\xfc\x01\x34\x77\x94\xa4\xc8\x8b\xcc\xc8\xed\x50\x69\xf3\xbf\xfc\xe4\xbc\x75\x39\x32\xcf\xb2\x67\xc2\xe8\x25\xd5\xff\xff\x45\x57\xd1\x1d\x01\x2a\x4f\x9b\x79\x3e\x8c\xf7\xa3\xfd\xd9\x31\x6d\x60\x3c\x21\x24\x91\x84\xee\xfd\xa5\x76\xd9\x0e\xa7\x8e\xa8\x1d\x8b\xbb\x32\x7f\xe7\x99\xa0\x2f\x24\x55\x11\x04\xfd\x7d\x79\x9e\x72\xa6\xb9\x96\x2f\xea\x09\xcf\x1f\xe2\x51\xfc\x51\xd7\xaa\x8d\x37\xe0\x83\x4b\xad\xe1\x61\xc8\x78\xc2\x3e\xbf\x7f\xfb\x6f\xff\xf6\x6f\xff\xb7\x7e\xb4\xfd\xe7\x2f\x3c\x91\x34\x5d\x54\xce\xa7\xa9\x53\xc7\xaa\x09\x42\x09\x23\xe3\x55\x99\xe2\xd2\x88\xaf\xf4\xeb\x5c\x99\xb3\x0d\xd9\xd2\xbd\x4b\x65\x96\x8f\x64\xf6\xcc\xb3\x70\x6b\xe8\xe4\xfd\xb6\x7b\xf6\x74\xef\x35\xa4\x73\x77\xad\x39\xe5\xd0\xcd\x79\x6f\x9a\xd3\x1e\x89\xea\x74\xc0\xe6\x80\xd4\x79\x8e\x58\xbb\x29\xf8\x0b\x1f\x7a\x16\x5e\xd1\xb2\x85\xe8\xa3\x55\x8d\xd5\x73\xdd\x58\x4e\x3b\xe1\x3f\xbb\xc3\x39\x9e\x38\xe5\xdf\xc5\xf0\x41\x06\x8f\xc2\xaf\x1c\xfd\xb0\xa1\x51\xcd\xe4\xb7\x97\xed\xcd\xa9\xfe\xd5\x11\x18\x52\xaa\xfc\x29\xbc\x90\xba\x21\xab\x5e\xc5\x45\x32\x45\xa5\xed\xfc\xdb\x51\x0c\xce\x7d\x71\xae\x83\xb3\xe5\xca\xd6\xd1\xf0\xcc\xad\x69\xe7\x32\x3e\xcb\xa4\x6a\xdc\x08\xbd\xbb\xfb\x78\xf7\xe5\xee\x18\xc6\xc8\x68\xc0\x9c\xe7\x28\x49\xfb\xa7\xa5\xc3\xf4\xe9\xfe\xcb\x87\x4f\xbf\x3c\x1c\xc3\x38\xd9\x66\x9c\xe7\x40\x4d\x04\x0f\x97\x8f\xd2\x5f\xee\x6e\xdf\x1d\xc3\x10\xfd\x45\xf0\xf0\x3c\xc7\x67\x89\x5c\x44\xb9\x1e\xdd\x7e\x79\xfb\x97\x63\x18\x21\x3a\xfe\x7d\xae\x43\xd4\xee\xce\xaa\xfe\xb8\xb3\xd8\x53\x2d\xa9\xde\x3d\xcf\x27\x2e\x1f\xe2\x6f\x9f\x3f\x32\x5d\xb2\x9e\xe3\x85\x12\x65\x38\xd2\x31\x55\x33\xef\x9d\xce\x3e\x31\x87\x1a\x7d\x36\x95\x6a\xba\xb7\xba\xf9\xa7\x2e\x68\xb9\xf4\x6f\x1f\xb6\x58\x7f\x8f\xf2\xc9\xbd\x1b\xa3\x53\x7f\x37\xfb\xba\xd5\x3a\xab\x41\xea\xf1\x96\xeb\x9c\xc6\xa9\xff\x5b\xaf\x73\x1a\xad\x93\xd8\x82\x9d\xd3\x80\xf5\x79\x2b\x76\x4e\xe3\xd4\xf3\x2d\xd9\x79\x0d\x15\xb6\x66\xfb\xd9\x9a\xb9\xad\x98\xaf\xbb\xba\x78\xb7\x75\xa2\xdb\x41\x65\x34\x46\x57\x66\xa8\x9a\xef\xec\x98\xa4\x7a\xb4\x79\xa9\x56\x5d\xf5\xc8\x65\xec\x0e\x7c\xbb\x48\xef\x87\x7a\xd9\x3d\x23\xe5\x68\xe3\xb6\x11\x9c\x6f\x3d\xe3\xf3\xad\xb8\x6d\xe4\xe0\x12\xd8\x9b\xdb\x54\x88\x61\x77\x63\xb1\x21\x89\x0d\x2b\x7e\x2c\x56\x1c\x92\xd8\x90\xc4\x86\x24\xf6\x99\xe2\x88\xc3\xcb\x66\xe4\x62\x9a\xc6\x7a\x55\x5a\x8a\x00\xe8\xee\x71\x99\xd9\x4b\xbf\xdd\x3d\x44\x72\xc4\xf4\xc4\xd0\x63\xf6\xc5\x16\x71\xc8\x0d\xe2\xfc\x79\xd7\x37\xe6\x08\xe2\x7f\xb8\xfb\x94\x37\x28\xa5\xfe\x93\x5d\xfd\x17\xdd\x3f\x0b\xdc\x17\xaf\x57\xda\x3a\x2a\x1a\x25\x85\xb0\x66\xdd\xbb\xdf\x4b\x1b\x2d\x4a\xc9\xce\x44\x9e\x45\xe2\x49\xdb\x3e\x3a\x6f\x68\x3c\x01\x35\x7b\xfc\x71\xc0\x1e\xec\xe1\x2a\xff\xe4\x94\x3d\x1a\x69\x17\xac\x2b\x7b\xab\xbe\x39\x03\x49\x6b\x9d\xbb\xd6\xaa\xac\x88\xf9\x29\x15\xce\xab\x43\x6c\x34\xf9\xca\xab\xea\xf5\x9a\x1c\x85\x7a\x21\x0e\x78\x6c\xff\x56\xf5\x06\xfb\x41\x7c\x0b\x44\x5a\x5d\x2e\x6e\x8a\x94\xa3\xf2\x21\x3f\x96\x97\x22\xd9\xfa\x99\xc3\x95\xf4\x0e\xf3\xd9\xaa\x44\x39\x0b\xa5\x50\xe4\x44\x95\x6e\x92\x3d\x24\xe6\xfb\xdd\xb3\x3f\x53\xe6\x9c\x58\xa2\x5d\x0b\xe3\x69\x3d\xdb\x6b\xa5\xc2\x42\x18\x59\x88\x34\xb2\x77\xae\xfd\x30\x16\x89\xc8\xc8\xbb\x1f\xd1\x29\x39\xc9\x46\xd1\x28\x17\x22\x61\xd3\x28\x29\x72\xa1\x7e\xd4\xef\x0a\xd5\x6d\x14\x8d\xdd\x55\x6d\xc6\xdd\x70\xf2\xb2\xa6\x2d\x57\x7e\xbb\x9c\xeb\x96\xca\xa4\xbc\x65\xff\xdf\x5f\xfd\xc4\x3e\x5b\x26\x79\xa7\xab\x20\x9c\x82\x41\x2e\xc7\xa6\x82\xf6\x9b\x65\x8b\x72\xf9\x28\x92\xb2\xc9\x66\x0c\x59\x22\x44\xa8\xcc\xb7\xc8\xab\x4c\x72\xba\xda\xeb\x4a\x77\x18\xad\x7d\x99\x30\x07\xec\xf2\x89\x88\xcc\x25\xfa\x54\xb0\x2c\xf2\xfa\x88\xd3\x8a\x3a\x60\x9f\xf4\xa3\x9f\x23\x77\xe3\x98\x7d\x8a\x1e\x19\x25\xb4\x49\x4d\xcc\x4a\x4b\xe5\x38\x72\x59\x7a\x67\x54\x43\x3d\x3c\x22\x7a\xf2\xbd\x36\xdd\x58\x6a\xdc\xda\x6e\xa1\x72\xa9\xc2\xb4\xca\xbb\xc9\x9d\x88\x6f\x39\x7b\x14\x2f\xe6\xb2\xae\xf2\x63\xb2\x6d\x39\x53\x09\x4f\xd5\x44\xe6\x57\xf6\xa8\x22\x9d\x15\xf4\x3a\xa4\xfc\x7e\x39\x91\x6d\xf5\xcd\x2b\x74\x5d\xda\x3d\xa3\x2d\x90\xd9\x83\x74\xfa\x4d\x31\x8e\x3c\x1d\x5f\xcc\xdc\x65\x7b\x8c\x8f\x72\x61\xe6\xf4\x28\xca\x54\x3e\xdb\x19\xc6\x61\x8e\x92\x20\x2e\x42\x73\xf3\x9b\x05\xd0\xe4\x3c\x90\xeb\xa8\x27\xa4\xfe\xaf\x19\x94\x47\xf1\x62\x8e\xf3\x55\x05\x7f\xbd\x70\x4d\xfe\x7a\x31\xf8\x9a\x7c\x4d\xea\x8e\x23\x9d\x07\x2c\x52\x73\x7f\xb3\x31\x10\xc6\x82\x47\xca\xe8\x31\xb0\xb7\xde\x2b\x6e\x26\x00\xb7\x5f\xf1\x7a\xcf\x74\x82\x7f\x77\xbd\x7d\x6d\xdc\x59\x4a\x27\x90\x6c\x47\xcc\x6c\x31\x72\x36\x8d\x94\xa2\x7b\xfe\x6b\xfb\x9c\x99\xd3\xe8\x7a\x56\xb5\xb0\x39\xb8\x65\x4a\x54\xb7\x96\xe9\xd9\x9c\x45\x56\xb6\x22\xb6\xa7\x59\xca\xda\x96\xf7\xe8\xbd\xd8\x9e\x35\x6e\x62\xfd\xb0\x20\x1d\x29\xcc\x27\x51\x32\x9e\xf5\x7a\x1f\xec\x83\xba\xae\x75\xcc\x87\x22\xde\xa4\xd6\xf4\xc5\x5d\x6a\xbd\xec\x7c\x10\x9d\x48\x37\x5b\xb0\x29\xff\x16\x4d\x8b\xa9\x77\x5e\xb5\x74\x7f\x4d\x93\xe8\x7c\x33\x6d\x5c\x4c\x93\x8c\xdc\xc6\x87\x91\x59\x9f\x22\xfd\x54\x73\x4f\xde\xfc\x4b\xaf\x57\x35\xfd\xd9\x3f\xdc\x3c\xf9\x87\xbb\xaa\x2f\xa9\xba\xc8\xdd\xa2\x67\x2e\x8b\x34\xf3\x92\x5e\xd0\x80\x27\xee\x4a\xc9\xca\xc4\x28\x4e\x27\x9a\xa3\x3c\x2a\xd7\x22\x53\x4b\xbd\x6a\x8a\xca\x88\xe8\x47\x9b\xb6\xe8\x9e\x1d\xb0\x07\x91\x93\xa9\xe1\xe6\x74\xbe\x7f\xc0\x7f\x24\x9e\xe9\x6d\xe4\x89\xbf\x7d\xd6\xef\xff\x54\x16\x09\x15\x63\x5a\xf9\x43\x91\xea\x87\x99\x4b\x35\xf5\x27\x3f\xba\x97\x5e\x3c\x69\xfb\xc3\xc9\xce\xb9\x5f\xbb\xe1\xd6\x2f\xfc\x28\x8a\x73\xa1\x4d\xbf\x36\xc7\xfa\xed\x72\x2b\xb3\xf5\x00\x6a\x8b\xb3\x81\x0d\x81\xf0\x4f\xf7\x56\xa6\xdb\xdc\xe9\x67\x8e\x99\x8b\x72\x91\xab\xf9\x0a\x64\x62\x9e\x78\x14\xeb\xdd\xac\x6e\xba\x1e\x11\x63\x22\x82\x89\x94\x4a\xd0\xcb\x9d\x4b\x67\x5a\xec\x58\xe8\x6e\xe1\xd9\xb8\x98\x52\x5b\x92\xd0\x19\x6e\xea\x24\xdd\x36\x5b\x9f\xb2\xe8\xaa\x77\x3f\x8c\x58\x39\xa5\xaa\x35\xda\x2d\xfb\x33\x0d\x88\x14\x13\xd3\x34\x7f\xa9\xfb\x27\x5c\x69\xa7\xd3\x8c\x7c\x22\x57\x36\x68\x95\x8d\x8c\x46\x33\x16\xd2\x18\xd5\x72\x5e\x8e\x0b\x9e\xf1\x24\x17\x8e\xe0\x54\xf7\x66\xaa\xea\x4d\xf5\x0e\xc7\x95\x75\x2f\xed\x7d\xe9\x09\xe5\x92\x45\x4a\x15\x66\x56\xe9\x2f\xc7\xa2\x7a\x43\xca\xc5\xd7\x4d\xb8\x6b\xc7\x30\xe8\x44\xbb\x7b\xe4\x76\x0b\x90\x5b\x7b\x48\x24\x5f\x15\x22\x5c\xb8\x0a\x69\x83\xad\x8a\xa1\xd2\x5f\x4e\xf2\xb2\x05\xa1\xb7\x01\x77\x3a\xfb\x4a\x4e\x05\x1d\xa2\x66\x99\x18\x89\x2c\xa3\x8b\x45\xf5\x82\x55\x73\x34\xaa\x75\x57\x8f\xa8\x48\x54\x91\x55\x02\x3d\xd6\x73\x70\x80\xc6\xf4\x9a\x69\x32\xbd\x98\xe4\x23\x30\x35\xe5\x71\x2c\x32\x16\x4c\x8a\xe4\x51\x19\x85\x5d\x73\xe4\x9b\x67\x63\x37\xd0\xf4\xc6\x9b\xe2\x75\xa3\xb5\x2b\x42\xa2\x3f\x2c\x95\x4a\x45\x7a\xc2\xd9\x6e\xa3\x09\xe7\xbf\x5f\x06\xd2\x86\x2c\x2c\x32\x33\x1c\xf4\x1c\x92\xe2\x50\x66\x8c\xed\x9e\xd7\xcd\x61\xbb\x85\xa4\x5a\x3f\x73\xe5\x00\x9f\x3b\x9b\x4e\xda\x06\x73\x0b\xbf\x71\x87\x39\x89\x23\x05\x45\x6c\xee\x7b\xad\xa6\xcd\xac\xe2\x47\x3b\x57\xa3\x26\xde\x0b\x65\x9d\x27\x33\xc1\xf5\x2c\xbb\x22\x65\x00\xe5\x48\x98\x69\x8f\x0c\x82\x22\x2b\xe7\x0e\xcf\x19\xc1\x6c\x5d\xe1\xcc\xef\x06\x5e\xfa\x04\xf5\x15\xc8\x95\x55\xfa\x0f\xb5\x83\xfa\x93\x48\xe5\x32\x7b\x19\xb0\x99\xaa\xe9\x05\x42\x77\xd3\x6b\x76\xad\xdf\x41\xc2\x30\xde\xfe\xd7\x01\x4d\xef\x25\xa3\xf2\xad\xb2\x9c\x2e\x93\x8f\x05\x1b\x72\x65\x2e\x70\xf8\xad\x90\x59\x31\xbd\x36\xca\x2f\x31\x1f\xbf\x31\xc5\x46\xf9\xa5\x62\x3f\xd9\x72\x9f\x05\x53\xd1\xd4\x90\x25\xb2\x51\xcf\x34\x9a\x65\xdc\x3d\x7e\x61\x13\x4e\xf7\x22\xb3\x80\x07\x13\x23\x25\x51\xbe\xff\xb6\x44\x5a\xa2\x24\x4b\x64\x42\x76\x7d\x61\x95\x79\xce\x62\xa1\x9d\x28\xae\x7b\x45\x28\x02\x0c\xe3\xe8\x49\xfb\xc0\x4f\xde\xa8\xcf\xf8\x58\xad\xdc\x15\x1d\x4d\x85\xb6\x22\x6e\x73\xa5\xbb\xf8\xa6\x1a\x7f\xfb\x26\xd3\x74\x33\xb9\x08\xe5\xc5\xd2\x6e\xf1\xa0\x59\x92\x89\x31\xcf\x42\x82\xa2\x7a\xe4\x93\x17\xc6\x83\x3c\x7a\x8a\xf2\x17\x6d\x6e\xa2\xc4\xfd\xdf\x8c\xb6\x82\x2c\xf2\x16\xaf\x59\xfe\xbb\x71\x4b\x65\x56\x4d\x57\x93\xb3\x61\xbe\x36\x24\x0b\x65\x7a\xd0\x50\x1b\x3b\xac\xf9\x44\x4c\x8d\x4d\xaa\x04\x8a\x78\x18\x5e\xd9\xb7\xfe\xca\x7e\x77\x2a\x9f\x68\x61\xf3\x1c\x55\xf6\x40\xf3\xf3\x65\xd6\xfb\xf5\x9a\xe9\x48\xc3\x01\x11\xa0\x83\x0a\x1f\x23\x95\x37\xc6\x81\x7a\x42\x34\xa0\x81\x1e\xe0\xd8\x34\x15\xda\x88\xa5\xf3\xae\xa0\x51\xeb\x42\xe9\xcb\x19\xcf\x9e\xd3\x0a\xca\x07\x23\x30\x85\xc0\xd4\x19\xa5\x17\xf8\xf3\x7e\x2f\x69\x06\x33\x0f\x68\xfb\x2a\x9d\xd9\x27\x74\x75\x9d\xce\x1a\xf3\xbd\xec\x84\x84\xbd\x10\xde\xbb\x5d\xdf\x64\x03\xf7\xc9\x98\x9b\x36\x18\x63\xfe\xb6\x6c\x08\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\x3d\xd0\xfd\x6e\xe8\x6a\xc5\xb9\x02\x7b\xba\xa1\x29\x04\x32\x6b\x46\x05\x64\xf6\xc5\xf3\x1b\x62\x10\xa4\xdd\x2e\x4b\xbb\xb5\xe7\x70\x57\x1f\xc0\x9d\x3b\x37\xd4\x27\xe0\xb6\xe4\xf8\xed\x2e\x90\x6d\x99\x8d\x79\x30\xfe\x34\xf9\xe4\xdf\xc8\xb7\x1d\xea\x7f\xf1\x20\x1f\x30\x76\xa7\xff\xeb\x3e\x9f\xf2\x88\xc8\xb8\x62\x41\x5c\xa8\x5c\x64\xd7\xb6\x5f\x03\x77\x5e\x20\x8e\x1e\x05\xbb\x2c\xab\x7a\xa9\x97\xc9\x34\x13\x74\x79\xd0\x80\xdd\xc7\x3c\x49\xec\xc2\x47\xc6\x87\xc7\x7a\xa5\x79\x35\x78\xf5\x27\x6f\x62\xd0\xa3\xdb\x30\x9e\x65\xc3\x4a\xde\x37\x74\x4d\xd4\xb5\x61\x77\xa6\x55\x7a\x5a\xa7\xca\xb5\xc0\xba\x68\x74\x40\x42\xfb\x56\xd5\xcd\x00\x2f\xbb\x35\x46\x3f\xa3\x43\xce\xdf\xdd\xf1\xe9\x95\x26\x71\xd5\x31\xea\x9e\xbf\xb0\xcb\x0e\x51\x23\xde\x89\x78\x27\xe2\x9d\x27\x1b\xef\xec\xee\x78\x75\x83\x60\x64\xef\xb2\x49\xfc\x00\x64\x63\xeb\xda\xc6\x56\xc4\xa8\xcc\x39\x3d\x20\x58\xd8\x43\x59\xd8\xa5\xbb\x7f\x7f\x43\xbf\xf8\x06\x2e\xbb\x9f\xaa\x22\xc9\x96\x1d\x52\x6b\x3c\x13\x9a\xc8\xe4\x3a\x11\x63\x73\xa3\x97\x7d\x9e\x6f\x6a\x0d\xd4\x2e\x47\xcb\xbe\x52\xd1\x74\x2a\x42\x6d\xcc\xe3\x97\x05\x77\x6c\x25\x51\x7c\x65\x37\xf0\x84\x8f\xd8\x38\xd3\x2e\x4f\x2a\xb2\x48\x56\xd7\x6b\x56\xde\x8f\x6e\x6d\xd9\x71\x85\x12\x33\x57\x03\x72\xfd\x4b\xd7\x20\xfb\x90\x99\xdb\xac\x06\xa6\x9e\xe6\xdc\xef\x82\x3a\x56\x83\x40\x55\xb9\xa7\x9a\xb4\x88\x30\x2a\x9f\xf9\x35\x4b\x63\xc1\x95\x28\xa9\xfd\x7d\x26\x53\x3e\xa6\xa1\xba\x97\x71\x14\xbc\x5c\x99\xde\x32\x9c\xda\xb5\x3a\x2c\x0b\x30\xfe\xf5\x1f\x07\xcc\xdb\xb2\x84\x22\x15\x49\x28\x92\xbc\x8a\x15\x09\x26\xb3\x74\xc2\xcb\x4b\xce\xb2\x42\xdc\xd0\x0d\x56\x57\x36\x7e\x68\xfe\xfc\xf5\xc2\x5c\x44\x18\xfd\xee\x62\x2f\x43\xc1\x78\x18\x12\xd0\xbd\x31\x70\xc4\xbb\xfe\xd0\x14\x7f\xa9\xaa\x1f\x99\x58\xe9\x80\xdd\x45\xf4\x96\x78\x55\x97\xd9\x7c\xdb\xca\xfb\xd0\x44\x6e\x42\xb5\xf4\x0e\xcb\x7c\xe2\x8d\x80\xa9\xd8\x3b\xd7\xa4\x36\xae\x2d\xfc\xbb\x8d\x76\xe8\x57\x7a\x22\x9f\xd9\x98\x67\x43\x3e\xae\xa5\xa1\x94\xef\xa5\xc8\x46\x32\x9b\xea\x6e\x5b\xd8\xa4\x4f\x33\xb5\x5b\xde\x22\x7a\x49\xdc\x0c\x4f\x4d\xf3\x23\x3d\xfb\x82\x28\xac\x22\xa7\x14\x01\x33\x87\xcd\xdd\x30\x28\x91\xbb\xf8\x90\x8b\x71\x0d\xbc\xfe\x76\xd1\x11\xc7\xa6\xaa\xfd\x67\xfd\x61\x03\x66\x12\x8d\xc8\x99\xf1\x8d\xd3\xa5\x69\xc3\x25\xbb\xb6\x73\xa4\x3e\x87\xd4\x1b\x76\xf9\x33\x0f\x1e\xf5\x32\x9b\x84\xfa\x5b\xbc\xbc\xa8\x73\xa6\xe3\x4c\xf4\xd2\xbe\x4f\xf5\x42\x5c\x0b\x86\x65\x49\x6f\xd8\xe5\x7b\x99\x09\xaf\x58\x16\x70\x15\xf0\x50\xb7\xde\xf6\x0f\x19\x7b\x53\x9e\x32\xd6\x73\xae\xc0\x51\x59\x46\x8d\xa3\xcc\x4c\xb4\x63\x21\x73\xad\x25\x80\x1d\x0a\x04\xee\x0d\xff\x6d\xa6\x74\xb3\xe9\xb6\x17\x3a\x37\x5d\x6d\xaa\xa1\x74\x73\x34\xee\xdf\xd9\x6f\xb0\xa1\x74\x03\xa5\x9b\x7d\x53\x89\x86\x8a\x37\xfb\x8c\x89\xcd\x28\xdf\x78\x8f\x82\x02\xce\xc1\x42\x71\x99\x28\xed\x8a\x36\x71\x99\xf6\x8c\xb3\x5d\xb5\x70\x3e\x57\x85\xbd\x2d\x0b\x83\x2a\x4e\xe9\xec\x2c\xeb\x1f\x24\xd9\x23\xc9\x1e\x49\xf6\x48\xb2\x47\x92\x3d\x92\xec\x91\x64\x8f\x24\x7b\x24\xd9\x23\xc9\x1e\x49\xf6\x48\xb2\x47\x92\x3d\x92\xec\x91\x64\x8f\x24\xfb\x0d\xc1\xe1\x42\xbc\xd0\xb9\x52\xce\x32\xe8\xb1\xad\x66\x4e\xe7\x70\xa9\x5d\xf5\x9c\x0d\x59\xd0\x3e\xf3\x4a\x17\x57\x01\x01\x30\x04\xc0\xce\x25\xc3\x74\xe9\x1b\xd0\x7e\xae\xe9\xaa\x47\xb5\xad\xb2\xb3\xfc\x59\x5d\xe9\xed\x6c\xbc\x08\x6c\xa5\xbc\xd3\xdb\x25\x61\x9d\x06\x0f\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\x01\x02\x05\x08\x14\x20\x50\x80\x40\xc1\xa9\xab\xf1\x6c\x1e\x33\x80\x2e\xcf\xde\x93\x81\x77\x50\xe8\xe9\x2d\x98\x5b\xa4\xd5\xd3\x18\xc6\x41\xb5\xe7\x1c\x54\x7b\xf6\x03\xdd\x1b\xe8\xf7\x6c\x6e\x44\x37\x57\xf2\xe9\xf1\x8b\xbd\x50\xd3\x07\x51\x58\x44\x61\x11\x85\x45\x14\xb6\x33\xed\x9f\xb6\x02\xa3\x3d\xce\x8f\x59\xac\x07\xd4\xd8\x32\x43\x19\xa8\xbf\x36\x19\xca\x40\x50\x06\x82\x32\x10\x94\x81\xa0\x0c\x04\x65\xa0\x8e\x95\x81\xb6\x40\x91\xbb\x68\x04\x6d\xe2\xb5\x41\x2d\xa8\xfb\xed\x3a\x74\x83\x8e\xc6\x39\x3c\xfb\x0d\x3b\x74\x83\xa0\x1b\x74\x38\xb6\xd1\x44\x41\xe8\x60\x71\x3c\x5f\x4b\x68\xd9\x43\xa1\x2a\x74\x1c\x81\xc4\x1b\x15\xf0\x58\xac\x0e\x27\xd2\x57\xdc\x80\x9e\x44\xf8\x61\xc3\xb8\xe2\x03\xf5\xcd\x1e\xac\x04\x2f\x72\xa9\x7b\x35\x4a\xc6\xe4\x5b\xd3\x73\x0e\x1e\x9d\xf2\x6a\x51\x59\x09\xd7\xe6\xed\x02\x53\xa7\x37\x45\x36\x8f\x50\xb9\x1e\x3b\x40\x98\x6a\xd9\xbc\x81\xb3\x0b\x67\xf7\xa4\xa3\x53\x4b\x0d\x66\x6b\x41\xa9\xbd\x98\xe4\xad\x63\x51\x5b\x9a\xe4\x0d\x29\x47\x03\xeb\x0c\xdc\x71\x24\xb6\x1f\xcc\x03\xcb\xc0\xb1\x2c\x03\x60\x1e\x60\x1e\x7b\x5f\x3a\xb7\x47\x1d\xdb\x2e\x9e\xed\x51\x0e\xf7\x10\x50\x8d\x63\xa1\x1a\x26\x5a\xb5\x1a\x6b\xd0\x77\x4e\x6a\xd3\xba\x29\xd7\x30\xbd\xd3\x3b\xfc\xd9\x79\xfe\xed\x09\x4e\x99\x2d\x38\x87\x9b\x35\xc8\xc7\x85\xab\x7b\x2e\xae\x2e\xf2\x71\xfb\x90\x8f\xbb\x31\x08\x69\x60\xbf\x41\x42\x8e\x65\x75\x00\x0a\xc1\xfa\x70\x2c\xeb\x03\x50\x08\x50\x08\xd2\x3f\x90\xfe\x71\xcc\xa0\xc4\x64\x70\xff\x56\xc8\x9c\xef\x7e\x99\x94\x29\xe4\xbf\x74\x21\xb8\x44\xca\x73\x85\xea\xfd\x02\x4d\x48\x68\x42\x42\x13\x12\x9a\x90\xd0\x84\x84\x26\x24\x34\x21\xa1\x09\x09\x4d\x48\x68\x42\x42\x13\x12\x9a\x90\xd0\x84\x84\x26\x24\x34\x21\xa1\x09\xb9\x31\x3e\xf4\xb0\xc2\x11\x5c\x1a\x55\x87\x1c\xdb\x5f\x16\xd5\x11\x3c\x6a\xfb\x92\xa8\x95\xac\x67\xbf\x69\x10\xfe\xa3\x11\xde\x42\x78\xeb\x7c\xd2\x1f\x66\x66\xfe\x3e\xd2\x1e\xe6\x1f\xd1\xfe\x25\x50\xb3\xcf\xe8\xee\xf2\xa7\x35\xc6\x7c\xcb\x4b\x9f\x7a\x66\xda\xd7\x5f\xf6\x04\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x0f\xa0\x7f\x8c\x7a\xaa\x6d\x5c\xf2\xb4\x8e\xf1\xe3\x72\xa7\xbd\x25\xe5\xee\x74\xa9\x53\xcf\xc0\xdb\xe2\xc3\xc9\x3b\xc2\x36\x5c\xe2\x74\x1e\x97\x38\xb5\x09\xcd\x1b\x1d\x1e\x5f\x67\x1c\xb7\xb9\xb4\xa9\x77\x2f\xee\x92\x23\xe2\x88\x86\x22\x1a\x8a\x68\xe8\xe9\x47\x43\x3b\x3b\xfc\xdd\x2c\x50\xd9\xc3\xbc\x93\x65\x97\x2f\xed\x68\x69\x71\xe9\x52\x7f\x6d\x2d\x2e\x5d\xc2\xa5\x4b\x39\x2e\x5d\xc2\xa5\x4b\xb8\x74\x09\x97\x2e\x75\x7d\xe9\xd2\x5a\x34\xb8\xdb\x65\x4b\xcb\xbd\x33\x68\xed\x74\xb7\xcd\x86\xba\xce\xd1\x38\x81\x67\xbf\xe1\x86\xba\x0e\xd4\x75\xf6\xcf\x28\x9a\xa9\xea\xec\x39\x6e\x56\x57\xd3\xa9\x3f\x0c\x2a\x3a\xdd\x06\xec\x1a\xca\x0c\xf7\x8c\x4e\xad\x8d\xe0\x1d\x42\x56\xf8\x24\x22\x42\x27\x34\x25\xd6\xc7\x86\xba\x91\x0d\x46\x84\x08\x0e\x2b\x22\x44\x67\x1e\x21\x6a\x2e\x0b\x0c\x44\xb1\x25\xa2\x80\x0c\x30\xec\xfe\x19\xda\x7d\x80\x0a\x80\x0a\x80\x0a\x80\x8a\xee\x41\x85\x12\x41\x26\xf2\x5d\x75\x7e\x1f\xe8\xd7\x10\xf8\x2d\x9d\x9b\xb2\x43\x20\x04\x00\x21\x00\x08\x01\x40\x08\x00\x42\x00\x10\x02\x80\x10\x00\x84\x00\x20\x04\x00\x21\x00\x08\x01\x40\x08\x00\x42\x00\x10\x02\x80\x10\x00\x84\x00\x36\x24\x82\x86\x27\x74\x2e\xe9\x5b\x62\x8d\x6d\xb5\x7c\x0f\x0f\x88\xda\x15\xf1\x5d\xc6\x73\xf6\x99\x8d\x60\x9f\x89\x70\x14\xc2\x51\xe7\x92\x86\x50\x4d\xf9\xf6\xf3\x0f\x6a\x65\xb7\x2d\xd4\xeb\x15\xde\x95\x42\xef\x72\xdb\xbc\x95\x34\x6f\x7f\x2c\xf5\x3a\x4d\x5e\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\x78\x30\xf8\x23\xd3\xd9\x68\x2e\xc6\xbb\x82\xce\x43\x85\xb7\xfd\x5c\xd9\x1d\xe4\x77\xfb\x03\xd7\x16\x9d\xda\xdd\x1e\xa8\x41\x70\xf7\x1c\x04\x77\x5b\x82\xdf\x0d\xce\x55\xaf\xb0\x7c\x9b\x4b\xec\xf6\xe9\xe5\x5c\x78\x7e\x1a\x41\x4a\x04\x29\x11\xa4\x3c\x95\x20\x65\x47\xa7\xa3\x77\x0e\x23\xf6\x29\xc9\x63\xb1\x62\xee\xf6\xf6\x13\x52\xb9\xfd\x35\xa4\x90\xca\x85\x54\x6e\x0e\xa9\x5c\x48\xe5\x42\x2a\x17\x52\xb9\xdd\x4a\xe5\xae\x02\x77\xbb\x68\xe4\x2e\x74\xc4\xa0\x3c\xd3\xc1\x3e\x19\x62\x33\x47\xe3\xef\x9d\xfd\xc6\x19\x62\x33\x10\x9b\xd9\x23\x72\x68\xa2\x32\xb3\xbf\xc8\x95\x2f\x2f\x53\x3e\x05\xba\x32\x07\x8c\x95\x65\x4f\x51\x20\x78\x10\xc8\x22\x69\xa0\x2f\x43\xa5\xdc\x9a\x52\xa0\x33\xe3\xb9\x32\x33\x1d\x83\x5c\x77\xe4\xba\x23\xd7\x1d\xb9\xee\xc8\x75\x47\xae\x3b\x72\xdd\x91\xeb\x8e\x5c\x77\xe4\xba\x23\xd7\x1d\xb9\xee\xc8\x75\x47\xae\x3b\x72\xdd\x91\xeb\xbe\x31\x14\xf4\xb9\xc2\x11\xe8\xce\xcc\x60\x8e\xed\xf5\x67\xba\x02\x48\x6d\xeb\xd0\xac\xe6\x3d\xfb\x4d\xf5\xac\x3d\x1b\x91\x2b\x44\xae\xce\x27\xe5\x73\x76\xea\xef\x23\xf5\x73\xc1\x33\xda\xd7\xa9\x99\x7b\x48\x77\x7a\x35\xeb\x6c\xfa\x96\xba\x35\x7d\xb3\xf0\xeb\xf5\x6b\xc0\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\xc1\xf6\x4f\x56\xc7\x66\x2d\xed\x87\x9e\xcd\xfe\x72\x74\x77\xd2\xb5\xe9\x1b\x7c\x5b\xac\x6f\xb3\x2b\x70\x83\xce\xcd\x79\xe8\xdc\xb4\x0a\xcf\x1b\xe9\xdd\xac\xb5\x90\xdb\xe8\xde\xf4\xef\xe5\x5d\xa2\x7f\x83\xe0\x28\x82\xa3\x08\x8e\x9e\x47\x70\xb4\x33\x7d\x9c\x86\x61\xcb\x3e\x26\xa3\x2c\xd3\xcb\xd9\xd5\xde\x42\x37\xa7\xbf\x06\x17\xba\x39\xd0\xcd\x81\x6e\x0e\x74\x73\xa0\x9b\x03\xdd\x9c\xce\x75\x73\xd6\x83\xc2\xdd\xf4\x73\x56\x38\x68\xd0\xd1\xe9\x70\xbf\x0d\x3d\x9d\xa3\xf1\x03\xcf\x7e\xe3\x0d\x3d\x1d\xe8\xe9\x1c\x00\x55\x34\xd3\xd5\xd9\x77\x24\xad\xae\xaf\x33\xf3\x34\xe8\xec\x1c\x3a\x86\xd7\x50\x60\x07\xca\x3a\xb3\xce\x0d\xd2\xee\x91\x76\x8f\xb4\x7b\xa4\xdd\x23\xed\x1e\x69\xf7\x48\xbb\x47\xda\x3d\xd2\xee\x91\x76\x8f\xb4\x7b\xa4\xdd\x23\xed\x1e\x69\xf7\x48\xbb\x47\xda\xfd\xd6\x5c\xf0\x58\xb4\x74\x76\x17\xd1\xe9\x43\xc2\xd2\x4a\xf5\x9c\x4e\x32\x43\x11\x99\x42\x64\xea\xdc\x52\x42\xf7\x9a\x0b\xba\x5f\x85\x9c\x63\x90\xc6\xc1\xc9\xa7\x43\x45\x4d\x76\x3f\xf2\xd4\x87\xc5\x70\xc5\x59\x27\x1c\x72\xc2\x21\xa7\xfd\xd8\xbf\xe6\xa7\x9b\xda\x39\xd6\xd4\x8f\x17\x74\xd5\x79\x26\xb8\xab\x70\x57\xe1\xae\x9e\x84\xbb\xda\xed\x99\xa5\x26\x87\x95\xfa\x60\x46\x57\x9e\x52\xc2\xf1\xa4\xf3\xb0\xa6\x38\x9e\x84\xe3\x49\x38\x9e\x84\xe3\x49\x38\x9e\x84\xe3\x49\xc7\x71\x3c\xa9\xf5\x73\x49\x38\x90\xb4\xfa\x40\x12\x4e\x22\x9d\x97\xcb\x77\xf6\x1b\x68\x9c\x44\xc2\x49\xa4\x7d\x92\x87\x16\x8e\x20\x1d\xe8\xec\x11\x0e\x1d\x75\x18\x3e\xbb\x49\x33\xf9\xed\x65\x69\x10\x2d\x90\x49\xa2\x3b\xef\xcf\x77\x5f\x2a\x7b\x94\x4b\x46\xbf\xf2\xae\xf0\x58\x8f\x9a\xec\x47\xbb\x65\x86\x98\x5a\x18\xd7\xe1\xcf\x22\x9f\xf3\x1e\xee\xa9\x11\x3b\xbc\x96\xf5\xa1\x69\xfa\xd2\xd9\x7a\x36\x7c\xed\xa8\x31\x0e\x42\x6d\x1a\x4f\x71\x03\x75\xff\xb7\xa3\x19\xa8\xfb\xe2\xdc\x07\x6a\x71\x6a\x96\x1b\xa9\x4f\x0f\xc7\x33\x54\x52\x9d\xf9\x58\x2d\x63\xea\x6e\xb4\xde\xdd\x7d\xbc\xfb\x72\x77\x2c\xe3\x65\x40\xf5\x79\x8f\x98\xb4\x7f\x5a\x3a\x64\x9f\xee\xbf\x7c\xf8\xf4\xcb\xc3\xb1\x8c\x99\x6d\xca\x79\x0f\xda\x44\xf0\x70\xf9\x88\xfd\xe5\xee\xf6\xdd\xb1\x0c\xd7\x5f\x04\x0f\xcf\x7b\xac\x96\xf0\xae\x72\xfd\xba\xfd\xf2\xf6\x2f\xc7\x32\x5a\xb4\x77\x3d\xf7\xe1\x6a\x7d\x67\x36\xf3\xc8\x73\xde\xa5\xdd\xf3\xdc\x9c\x52\x9b\x08\x3a\xa1\xa3\x7b\xea\x6f\x9f\x3f\x5a\xc8\x67\x0f\x74\x31\xbb\xb9\x62\x22\x09\x53\x19\x25\xb9\xd2\x75\x1f\x8d\xa2\x6f\x42\x19\x9c\xe4\x9d\xc4\xcf\x25\xc5\xce\x5c\x98\xd0\x1e\x83\xb1\x2f\x91\x3b\x3b\x96\x4b\x57\x26\xa1\x0c\x26\xbe\xf1\x69\x1a\xdb\xe0\xd7\xf3\x44\xc6\x25\xcb\xd3\xb5\xd1\x15\xd4\x2f\xd0\xeb\x9b\x9b\x58\x06\x3c\x9e\x48\x95\x2f\xd8\x0e\xea\x39\x78\xad\x5e\x54\x2e\xa6\xd5\x76\x50\xc4\x5c\xe5\x51\xa0\x04\xcf\x82\xc9\x75\x2c\xc7\xe3\x28\x19\xdf\xfc\x8f\xf9\xff\xff\xe7\xb7\xff\x28\x94\xc8\x5e\x3f\x46\xd3\x60\xf2\x32\x60\xae\x37\x16\xff\xd9\xdb\xa4\x9a\xfe\x6f\x63\x8b\x7a\xf3\x4f\x5d\xd8\xf2\x74\xcf\x3e\xed\x54\xff\x1e\xe5\x93\x7b\x37\x35\xcf\xc1\x34\xf5\x7d\xc7\x7a\x76\x03\x76\x02\x3b\xd7\x73\x1b\xb3\xd3\xd9\xc1\x9e\xdb\xc8\x9d\xd4\x4e\xf6\xdc\x06\xef\x14\x76\xb4\xe7\x36\x66\x27\xb2\xb3\x3d\xbf\x61\xc3\x0e\x77\x7f\x3b\x5c\x5d\x92\x3b\xe3\xef\x72\xf2\x16\xef\xe4\xb0\xab\x3e\x85\x5d\xb5\x32\xe9\x76\x2b\x8f\x4f\x9a\xef\xb8\x77\xa6\xa7\xe7\xb4\x96\x1e\xa4\xb4\x09\x87\x3d\xc8\xe6\xe8\xe0\x60\xde\x49\x0c\xfd\xaa\x23\x7a\xe5\xe8\xe3\xa0\x1e\xf2\x0c\x4f\x37\xcf\x10\x07\xf5\xba\x3b\xa8\xb7\x69\xc6\xf8\x76\xb6\x16\xb9\xe3\xdd\x59\x72\x64\x90\xc3\xb2\x1f\x8b\x65\x47\x06\x39\x32\xc8\x91\x41\x8e\x0c\xf2\x83\x65\x90\x6f\xa5\xb5\xf4\x8b\xd7\xde\x1e\xec\x14\xe7\x20\x01\x54\x96\xa0\xb2\x54\x37\xac\xd5\xd4\xe8\x10\xe7\xf8\xf3\xb3\x89\xd2\x52\xcf\x5e\xcf\x45\x20\xe7\xb0\xe8\xa6\x36\xfa\x70\xf1\xe1\xe2\x9f\x05\xbc\xa9\xdb\xbc\xd6\xf1\x4d\x7b\x26\xb5\x01\xc0\x59\x69\x52\xd7\x6a\x2d\xf5\xca\x90\x2e\x54\x5b\x82\xca\xd2\x79\x58\x53\xa8\x2c\x41\x65\x09\x2a\x4b\x50\x59\x82\xca\x12\x54\x96\x3a\x56\x59\x5a\xbd\x8b\xdd\x49\x67\x69\x99\x1f\x86\x68\xd9\x21\xb7\xcb\x88\x8f\x1d\x8d\xbb\x77\xf6\x9b\x67\xc4\xc7\x10\x1f\xdb\x2f\x73\x68\x12\x21\x5b\xb3\x04\xb6\x17\x23\xf3\x1f\xb4\xd7\x28\xd9\xc1\xc2\x50\x37\xce\xbf\xd5\x3d\xbb\x92\x79\xbb\x2f\xce\xa7\xd6\xf4\x0a\xdb\x2c\xe6\xdf\xef\x5d\x2f\x74\xc6\xc1\x41\x1e\xf7\x48\x1e\x9b\xda\x00\xf8\x4c\xf0\x99\xf6\x13\x70\xd8\xa5\x0b\x4f\x7c\x45\x6a\x72\x98\xa2\x67\x4b\xd1\x5c\xa6\xc4\xfe\x8f\x51\xf4\x3c\xf2\x7e\x22\x03\xbf\xc8\x07\xe9\xe2\x10\x05\x22\xf1\x58\x18\x8f\x73\x61\x84\x3f\xbc\x57\x7f\xb8\xd9\x61\x0a\x00\xe2\x35\x80\x18\xc7\x28\x60\xd9\xcf\xd0\xb2\x03\x13\x03\x13\x03\x13\x9f\xc0\xa6\x5c\x86\x62\xf9\x0e\x3c\x8e\x54\xae\xed\xcb\x33\xcd\x2f\x97\xf8\x22\x47\x4c\xf7\x33\xfb\x45\x86\x07\xdd\x84\x5d\xcd\x95\xf5\x46\xe5\x99\xe0\xd3\xff\x78\xb6\x93\x65\x83\x52\xea\x3f\xd9\xd5\x13\xd0\x1d\x63\x1d\x01\xd3\x09\x4d\x27\x95\x36\xf0\xda\x4e\x47\x49\x21\xac\x4d\xf4\x12\xc7\xf4\x1b\xff\xac\x87\x3d\x13\x79\x16\x89\x27\x6d\x38\xa6\x32\x13\x76\x19\x55\x55\xf6\x90\x12\xd9\x93\xc8\x06\xec\x21\x4a\x28\x7b\xdd\xcf\x09\x33\x7f\x73\xd6\xfe\x8a\x05\x71\x54\xa6\xd7\xd0\x42\xe1\xf2\xa5\xca\x8a\x98\x9f\x52\xe1\x5c\x4f\xb2\xa7\x48\x16\x8a\xd1\x34\x72\x2b\x38\x2d\x68\x51\xa8\x57\xb1\x80\xc7\xf6\x6f\x9e\xb4\xc8\x0f\xe2\x5b\x20\xd2\xbc\x4c\x39\x33\x45\xca\x51\xf9\x90\x1f\xcb\x6c\x1b\x5b\x3f\x5d\x9d\x4c\x50\xa6\x19\x9f\xad\x4a\x94\xb3\x50\x0a\x45\x1e\x48\xe9\x63\xd8\xf4\x37\xdf\x6d\x9d\xfd\x99\xfe\x05\x2d\x8b\x22\x63\xc6\x4d\x79\xb6\xf9\x4a\x61\x21\xb4\x29\x17\xdf\xd2\xc8\x26\xf3\xfd\x30\x16\x89\xc8\xc8\x39\x1e\x69\x7f\x25\x97\x6c\x14\x8d\x72\x21\x12\x36\x8d\x92\x22\x17\xea\x47\xfd\x4e\x50\xdd\x46\xd1\xd8\xe5\x00\x9a\xb5\x9a\xc9\xc4\x6b\xcb\x95\xdf\x2e\xe7\xf7\xa4\x32\xb1\x7e\x00\x67\xff\xfe\xea\x27\xf6\xd9\x26\x19\xdd\xe9\x2a\x88\xd0\x7a\x43\xb9\x1c\x9b\x0a\xda\x6f\x96\x2d\xca\xe5\xa3\x48\xca\x26\x9b\x31\x64\x89\x10\xa1\x32\xdf\x22\x97\x2c\xc9\x29\x67\xec\x4a\x77\x18\x2d\x1c\x99\x50\x39\xcf\x72\xfd\x9b\x28\xa3\xbf\x51\xc1\xb2\xc8\xeb\x23\x4e\xcb\xd1\x80\x7d\xd2\x8f\x7e\x8e\x5c\x2a\x9b\x7d\x8a\x1e\x19\x25\x92\x90\xf1\xc4\x2c\x53\x54\x8e\x13\x7d\x29\x5d\x1b\xaa\xa1\x1e\x1e\x11\x3d\xf9\x2e\x8f\x6e\x2c\x35\x6e\x6d\xb7\x50\xb9\x54\x61\x5a\x22\xdd\xe4\x4e\xc4\xb7\x9c\x3d\x8a\x17\x93\x05\x56\x7e\x1c\x6b\x77\x35\x67\x2a\xe1\xa9\x9a\xc8\xfc\x8a\x3d\x4f\xa2\x80\x34\x61\xa2\xc4\xeb\x90\xf2\xfb\xe5\x44\xb6\xd5\x37\xaf\xd0\x75\x69\xdf\xcc\x91\x1b\xbd\x4e\x9b\xad\xe1\x95\xf5\x82\xf5\xbf\x64\xe6\xb2\x38\x19\x1f\xe5\xc2\xcc\xe9\x51\x94\xa9\x7c\xb6\x33\x8c\xb7\x69\xd5\x78\x42\x97\x5a\xe5\x56\x5e\xf2\xbb\xf4\x84\xd4\xff\x35\x83\xf2\x28\x5e\xc8\x89\xf5\x0a\xfe\x7a\xe1\x9a\xfc\xf5\x62\xf0\x35\xf9\x9a\xd4\xbd\x2e\xca\xbf\x2c\x52\x73\x80\xc8\x18\x08\x63\xa9\x23\x45\xd9\x88\x03\xf6\xd6\x7b\xc5\xcd\x04\xe0\xf6\x2b\x5e\xef\x99\x4e\xa0\x39\xf8\xab\x59\x2c\xed\x6b\x93\x89\xbc\xc8\x92\x2a\x91\xce\x8e\x98\xf1\xcf\x73\x36\x8d\x94\x62\x3c\x79\xa9\x6f\x12\xbc\xd5\xc7\xcd\xaa\x16\x3c\xeb\x5b\xa6\x44\x95\x0e\xa7\x67\x73\x16\x05\x66\xee\x9a\x45\x6a\x54\xd5\xb6\x4c\xd0\x7c\xb1\x3d\x6b\x7c\xac\x7a\x46\xab\x78\x12\xd9\x4b\x3e\x89\x92\xf1\xac\xcb\xf8\x60\x1f\xd4\x75\xad\x63\x3e\x14\xf1\x26\xb5\xa6\x2f\xee\x52\xeb\x65\xb9\xcd\x71\x34\x8d\x72\xb3\x7f\x99\xf2\x6f\xd1\xb4\x98\xb2\xa4\x98\x0e\x45\x66\x2a\x6c\x7d\x47\xd3\x24\x5d\x7b\xe3\xf5\x9b\x26\x05\x3c\x8e\xc9\x3a\xd1\xfa\x14\xe9\xa7\x9a\x04\xcc\xf9\x97\x5e\xaf\x6a\xfa\xb3\x7f\xb8\x79\xf2\x0f\x97\x03\x9a\x54\x5d\xe4\xd2\x33\x4d\x16\xb2\x99\x97\xf4\x82\x06\x3c\x71\xb9\xca\x95\x89\x51\xda\x37\x23\x07\xb5\x5c\x8b\x4c\x2d\xf5\xaa\x29\x2a\x23\xa2\x1f\x6d\xda\xa2\x7b\x76\xc0\x1e\x44\x4e\xa6\x46\x37\x42\xb7\xdd\xac\x41\xa6\x6d\xe2\x99\xde\x46\x9e\xf8\x7b\x4f\xfd\xfe\x4f\x65\x91\x50\x31\xa6\x95\x3f\x14\xa9\x7e\x98\xc9\xd6\xd6\x9f\xfc\xe8\x5e\x7a\xf1\xa4\xed\x0f\x27\x3b\xe7\x7e\xed\x86\x5b\xbf\xf0\xa3\x28\xce\x85\x36\xfd\xda\x1c\xeb\xb7\xcb\xad\xcc\xd6\x03\xa8\x2d\xce\x66\xa7\x1e\x94\x2e\x68\xdd\x74\x9b\x64\xd1\x5c\x64\xd3\x28\x11\xe5\x22\x57\xf3\x15\xc8\xc4\x3c\xf1\x28\xd6\x5b\xc1\x01\x9d\x06\xd6\x0b\xb5\x6e\x72\x30\x91\x52\x09\x7a\xb9\x73\xe9\x4c\x8b\x1d\x0b\xdd\x2d\x3c\x1b\x17\x53\x6a\x4b\x12\x3a\xc3\x4d\x9d\xa4\xdb\x66\xeb\x53\x16\x5d\xf5\xee\x87\x11\x2b\xa7\x54\xb5\x46\xbb\x65\x7f\xa6\x01\x91\x62\x62\x9a\xe6\x2f\x75\xff\x84\x2b\xed\x63\x9a\x91\x4f\xe4\xca\x06\xad\xb2\x91\xd1\x68\xc6\x42\x1a\xa3\x5a\xce\xcb\x71\xc1\x33\x9e\xe4\xc2\xe1\x8f\x2a\x21\x5b\x55\x6f\x2a\x19\xda\x82\x80\x44\x59\xf7\xd2\xde\x97\x9e\x50\x2e\x59\xa4\x54\x61\x66\x95\xfe\x72\x2c\xaa\x37\xa4\x5c\x7c\xdd\x84\xbb\x76\x00\xe0\x4a\x37\xcf\x3d\x72\xbb\x05\xc8\xad\x3d\x7a\xe1\x53\xaa\x10\xe1\xc2\x55\x48\x1b\x6c\x55\x0c\x95\xfe\x72\x92\x97\x2d\x08\xbd\xdd\x2b\xf5\xa0\x1e\x2b\x39\x15\x79\x34\x15\xba\xed\x23\x91\x65\x94\xb1\xae\x17\xac\x9a\xa3\x51\xad\xbb\x7a\x44\x45\xa2\x8a\x4c\x94\xe7\x56\xad\xe7\xe0\xe8\x86\xe9\x35\xd3\x64\x7a\x31\xc9\x47\x60\x6a\xca\xe3\x58\x64\x2c\x98\x14\xc9\x23\x6d\x30\x38\xd3\x96\x8e\xc5\x3c\x1b\xbb\x81\xa6\x37\xde\x14\xaf\x1b\xad\x5d\x11\x41\x13\x2f\x95\x4a\x45\x7a\xc2\xd9\x6e\xa3\x09\xe7\xbf\x5f\x86\x71\x86\x2c\x2c\x32\x33\x1c\xf4\x1c\x11\x9a\xf1\x20\xaf\xd4\xae\x7b\x76\x0e\xdb\x83\x0e\x54\xeb\x67\xae\x1c\x1d\x63\x76\x46\xe8\x3e\x99\x5f\xf8\x8d\x3b\xcc\x95\x1e\xe0\xa0\x88\xcd\x41\x82\x6a\xda\xf8\x06\x5b\xb7\xbf\x9d\x9c\xfb\xc4\x7b\xa1\xac\xf3\x64\x26\xb8\x9e\x65\x57\xda\x80\x3c\x2b\x87\x91\x4c\x7b\x64\x10\x14\x59\x39\x77\x78\x4e\x12\x82\x91\xae\x70\xe6\x77\x03\x2f\x7d\x82\xfa\x0a\xe4\xca\x2a\xfd\x87\xa1\x18\x47\x49\x62\xe9\xdc\x24\x52\xb9\xcc\x5e\x06\x6c\xa6\x6a\x7a\x81\xd0\xdd\xf4\x9a\x5d\xeb\x77\x90\x18\x86\xb7\x93\x75\x34\xd0\x7b\xc9\xa8\xfc\x4c\x4c\x25\xc1\x69\x99\xf1\xb1\x60\x43\xae\x8d\xbd\x4c\xd8\x6f\x85\xcc\x8a\xe9\x35\x05\x88\x47\x31\x1f\xbf\x31\xc5\x46\xf9\xa5\x62\x3f\xd9\x72\x9f\x05\x53\xd1\xd4\x60\x19\xb2\x51\xcf\x34\x9a\xa5\xba\x61\xfc\xc2\x26\x9c\x0e\xdc\xb0\x80\x07\x13\x41\x2f\x5e\xf9\xfe\xdb\x12\x69\x89\x92\x2c\x91\x09\xd9\xf5\x85\x55\xe6\x39\x8b\x85\x76\xa2\xb8\xee\x15\xa1\x48\xd8\x60\x1c\x3d\x69\x1f\xf8\xc9\x1b\xf5\x19\x1f\xab\x95\x43\x48\xd1\x54\x68\x2b\xe2\x36\x57\xba\x8b\x6f\xaa\xf1\xb7\x6f\x32\x4d\x37\x23\x17\x59\x9e\x58\x72\x8b\x07\xcd\x92\x4c\x8c\x79\x16\x12\x51\xd4\x23\x9f\xbc\x30\x1e\xe4\xd1\x53\x94\xbf\x68\x73\x13\x25\xee\xff\xbc\xc6\xe4\xe6\xc9\x2d\x9e\xdf\xf9\xbb\x71\x4b\x65\x56\x4d\x57\x69\x0f\x3c\xe8\xaf\x0d\xc9\x42\x99\x1e\x34\x07\x34\xec\xb0\xe6\x13\x31\x35\x36\xc9\xec\xec\xa9\x09\x61\x78\x65\xdf\xfa\x2b\xfb\xdd\xa9\x7c\xa2\x85\xcd\x73\x54\xd9\x83\x39\x47\x3f\xeb\xfd\x7a\xcd\x74\x60\xe1\x60\xfc\x4c\x86\xe2\x63\xa4\xf2\xc6\xf8\x4c\xcf\x84\x9d\xe9\x99\x41\x1a\x9b\xea\xdb\xd3\x1a\xc5\xf8\xc1\x71\xd0\xce\x42\xc1\x54\xe1\x55\xf4\x66\xaf\x71\x78\xfd\x44\x04\x6a\x10\xa8\x39\x9b\x10\xbc\x9d\xf0\x7b\x88\xbe\x57\x25\xb7\x74\x02\x6c\xbe\xe8\x46\x21\x0c\xd9\xbe\x0d\x5e\x73\xb2\xde\x3b\x6d\x29\x47\xbd\xb1\xc8\xfe\x01\xfb\xb7\x65\x0b\x40\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x41\xd6\x8f\x4a\xd3\xa7\x02\x2f\xad\x53\xf7\x86\xfc\x63\xaf\x99\xa3\xbb\x48\x5c\xf7\x04\x4a\x79\x67\x36\xb7\x04\x51\x10\xb6\x3e\x0b\x61\xeb\x36\x10\x71\x93\x93\xb5\xcb\xec\xc5\x16\x72\xd6\xbd\x79\x15\xfd\x53\xb4\x08\xd9\x21\x64\x87\x90\x5d\xcf\x43\x76\x5d\x9d\x95\xdd\x2d\xac\xd6\x9f\xe4\x86\x9a\x56\xf5\x96\x96\x12\x32\xd5\xfd\x35\x9a\x90\xa9\x86\x4c\x75\x0e\x99\x6a\xc8\x54\x43\xa6\x1a\x32\xd5\x1d\xcb\x54\x2f\x05\x59\x3b\x29\x54\xcf\x3b\x5e\x67\xaf\x3d\x72\xa8\x1d\x30\x04\x47\x8e\xc6\xbf\x3b\xfb\x4d\x31\x04\x47\x20\x38\xb2\x37\xa0\xd0\x48\x6b\x64\x4f\x71\x9b\x9a\xcc\x88\x79\x46\x7f\x15\x46\x9c\xe2\x67\x9a\xc9\x6f\x2f\x4b\xa3\x45\x81\x4c\x12\xbd\x73\xfb\xf3\xdd\x97\xea\x6d\xce\x25\xa3\x5f\x6d\x9e\xd0\x6c\x3f\xda\xed\x70\x88\xa9\x82\x59\x68\xff\x2c\x72\xfd\xc4\x7b\xaa\xf4\x0e\x93\xb8\xde\xe1\x4d\x67\xa9\xad\x5a\x93\x79\x4a\x2d\x71\x70\x66\xd3\xd8\x81\x1b\x95\xfb\xbf\x1d\xc7\xa8\xdc\x17\xe7\x36\x2a\x8b\xcf\x5d\xb9\x61\xf9\xf4\x70\x24\xe3\x22\xd5\x99\x0d\xcc\x32\x6a\xec\x86\xe6\xdd\xdd\xc7\xbb\x2f\x77\x47\x31\x38\x86\xcb\x9e\xd7\xf0\x48\xfb\xa7\xa5\xe3\xf3\xe9\xfe\xcb\x87\x4f\xbf\x3c\x1c\xc5\x00\xd9\x76\x9c\xd7\x08\x4d\x04\x0f\x97\x0f\xcf\x5f\xee\x6e\xdf\x1d\xc5\xd8\xfc\x45\xf0\xf0\xbc\x06\x66\x09\xab\x29\xd7\x9c\xdb\x2f\x6f\xff\x72\x14\x43\x43\x9b\xb0\x73\x1b\x9b\x76\x37\x16\x33\xcf\xdb\xeb\x26\xe3\x9e\xe7\x26\x43\x7c\x22\xd8\xdf\x3e\x7f\xd4\xfb\xc8\x89\x9e\x3e\x85\x12\x65\xb4\xc7\x66\x91\xda\x29\xe5\x52\xaf\x29\x57\x34\x14\xfe\xce\xc3\xd4\x6a\xf3\x7d\xc7\xcd\x3f\xf5\x4f\x96\x27\xab\x1d\xf3\xf6\xe3\xef\x51\x3e\xb9\x77\xc3\x70\xf2\x33\xbc\x6f\xdb\x90\xf3\x1a\x9d\x1e\x6e\x47\xce\x6a\x80\xfa\xbb\x2d\x39\xab\x61\xea\xf5\xf6\xe4\xac\x46\xaa\x8f\xdb\x94\xb3\x1a\xa0\x9e\x6e\x57\xce\x6c\x8c\xfa\xbb\x6d\x71\xdb\x14\x3f\xd9\x66\xf1\x46\xa4\xff\x5b\xa5\x46\x97\xb2\xf5\x24\x4b\xb6\x7e\xb6\xe7\x00\x57\xb1\xf5\xf1\xac\x48\xff\x07\x79\xe6\xd4\x48\x27\xd7\xae\xe1\xec\x08\xd2\x64\x70\x76\xe4\x94\xcf\x8e\x34\xbe\x62\x0d\x19\x8e\x8b\x32\x1c\x71\xb1\x1a\x0c\xf8\x19\x1a\x70\xe4\x39\x22\xcf\x11\x79\x8e\x3d\xcc\x73\x74\x46\x3b\xc9\x9f\x64\x5c\x4c\x45\x10\xf3\x68\xba\xeb\xd5\x6a\xf7\x65\x61\xbf\x52\x61\x6f\x75\x61\x67\x7f\xd7\xda\xc2\x5e\x79\x2f\xb3\xdb\x38\x2e\x95\x30\xf6\xba\x8f\x5f\x58\x81\xce\xf5\xda\x97\x4d\x96\xd6\x5f\x55\x48\xe9\x42\x4a\x17\x52\xba\x90\xd2\x85\x94\x2e\xa4\x74\x21\xa5\x0b\x29\x5d\x48\xe9\x42\x4a\x17\x52\xba\x90\xd2\x3d\xd8\x7e\x1b\x52\xbe\x90\xf2\x85\x94\x6f\x2f\xa4\x7c\x57\x90\xb1\xb6\xa0\x18\x78\xd8\x7c\x87\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\xe0\xb6\x24\x20\x16\x20\x96\xd3\x42\x2c\x07\x4c\x74\x39\xba\x1c\x97\x2d\x0e\xa6\xd3\xda\xc5\x78\xa7\xf8\x68\xe7\xc3\x83\x54\xf9\x4d\x69\xcf\x3e\x0f\xb2\xcc\x3d\x1d\x39\xd1\xc8\x89\x3e\x97\x43\x2d\x8b\x26\x7f\xfb\x07\x5c\x96\x3c\xa5\x25\xd9\xf0\xd5\x8f\x69\x94\x56\x2c\xf7\x6b\xd7\xd7\x5c\xce\xe2\x49\xf7\xcb\x51\x2f\xad\xbc\x7f\x69\xcb\xdb\xb2\x35\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\xa0\xfb\x7b\xba\xa7\xae\xf9\xc5\x71\x15\x90\xd9\x2b\xed\x6f\xc8\x42\x0e\x75\x0e\xdc\x09\xab\xad\x56\x54\xab\x83\x85\x3e\x42\xac\x4a\x53\xad\x09\xb8\x5a\xf6\xde\x7a\x57\x9c\x9a\x9b\xfe\xb5\xc3\x21\xbe\xf1\x20\x1f\x30\x76\xa7\xff\xeb\x3e\x9f\xf2\x88\x08\xb4\x62\x41\x5c\xa8\x5c\x64\xd5\xad\x98\x56\x12\x22\x8e\x1e\x05\xbb\x2c\x4f\x8c\x5f\xea\xa5\xc7\xdd\xa9\x3a\x60\xf7\x31\x4f\x12\xbb\x98\xd0\x0b\xcd\x63\x73\xd1\xea\xab\x3f\x79\xd3\x80\x1e\xdd\x86\x41\x2a\x1b\x56\x32\xb4\xa1\x6b\xa2\xae\x0d\xbb\x33\xad\xd2\x93\x38\x55\xae\x05\xd6\xed\x21\x0d\x0c\xed\xaf\x54\x37\xdc\xbe\xec\xd6\x18\xfd\x8c\xae\x79\x7a\x47\xda\x78\x1b\xd9\x9a\x55\x3a\x79\xa7\xf0\xea\x7a\x4a\x79\x08\x33\x22\xcc\x88\x30\xe3\xb9\x85\x19\x3b\xd2\xd4\x6b\x21\xfc\xd7\xcf\xc4\x0e\x3f\xe4\xd7\xc4\xe2\xb6\xe1\xfc\x1b\x11\x7e\x27\xa5\x0c\x83\x7b\x28\x83\xbb\x74\xbf\xed\x6f\xa1\xa3\x84\x29\xb3\xfd\x65\x43\x31\x92\x86\x4a\x39\x74\x54\xc5\x6e\x2d\xad\xa3\xd6\x78\x16\x35\x91\xc9\x75\x22\xc6\x9c\xfa\xcc\x3e\xcf\xb7\xbc\x06\x23\x97\xa3\x65\x5f\xa9\x68\x3a\x15\xa1\xb6\xed\xf1\x8b\x0d\x01\xfa\x01\xde\x24\x8a\xaf\xec\x96\xd9\x5c\x32\x3f\xce\xb4\x1b\x94\x8a\x2c\x92\x61\x09\x09\x2a\x8f\x48\xb7\xb6\xec\xb8\x42\xe9\x4a\xfa\xa8\x87\xeb\x5f\xba\x06\xd9\x87\x8c\x3c\x8f\x36\xd2\x3f\xa0\x7a\x1a\xe1\xb7\x05\x75\xac\x06\x81\xaa\x72\x4f\x35\x69\x11\x1a\x54\x1e\xf5\x6b\x96\xc6\x82\x2b\x51\x72\xf2\xfb\xd9\xeb\xe6\xaf\x4c\x6f\x19\x32\xec\x5a\x1d\x96\x05\x18\xef\xfb\x8f\x03\xe6\x6d\x68\xca\x9b\xed\xab\xe8\x8c\xb0\xf7\xf1\xeb\xb6\xeb\x01\xc8\x0a\x71\x33\xe2\xb1\x8b\x94\x7e\xbd\x30\x7f\xfe\x7a\xc1\x46\x51\xc2\xe3\xe8\x77\x17\xed\x18\x0a\xc6\xc3\x90\x10\xea\x8d\xc1\x11\x61\x05\xd1\x4c\xf1\x97\xaa\xfa\x91\x89\x4e\x0e\xd8\x5d\x44\x6f\x89\x57\x75\x99\xcd\xb7\x8d\x18\xb9\x49\x14\x30\xc1\x51\x7a\x87\x65\x3e\xf1\x46\xc0\x54\xec\x5d\x79\x59\x7f\x3b\x00\x92\x6a\xa7\x5f\xe9\x89\x7c\x66\x63\x9e\x0d\xf9\xb8\x96\xf8\x51\xbe\x97\x22\x1b\xc9\x6c\xaa\xbb\x6d\x61\x93\x3e\xcd\xd4\x6e\x79\x8b\xe8\x25\x71\x33\x3c\x35\xcd\x8f\xf4\xec\x0b\xa2\xb0\x8a\x55\x52\xcc\xc9\xa8\x0d\xba\x61\x50\x22\x77\x11\x19\x17\x55\x1a\x78\xfd\xed\xe2\x11\x8e\x06\x55\xbb\xd3\xfa\xc3\x06\xcc\x24\xf9\x90\x6f\xe3\x1b\xa7\x4b\xd3\x86\x4b\x76\x6d\xe7\x48\x7d\x0e\xa9\x37\xec\xf2\x67\x1e\x3c\xea\xb5\x36\x09\xf5\xb7\x78\x1c\xcb\x67\xfa\xd2\x4c\xc7\x99\x78\xa1\x7d\x9f\xea\x85\xb8\x16\x0c\xcb\x92\xde\xb0\xcb\xf7\x32\x13\x5e\xb1\x2c\xe0\x2a\xe0\xa1\x6e\xbd\xed\x1f\x32\xf6\xa6\x3c\x65\xac\xe7\x5c\x81\xa3\xb2\x8c\x1a\x53\x99\x99\x68\xc7\xc2\xc2\x5a\x4b\xbe\x3a\x14\x7a\xdb\x2f\x70\xdb\x4c\xe7\x78\xab\xfd\xf0\xb9\x2b\x1d\x77\xb2\xdb\x86\xde\xf1\xd1\xf8\x80\x67\xbf\xe9\x86\xde\x31\xf4\x8e\x0f\x02\x29\x9a\x68\x1f\x1f\x22\x1e\xe5\xeb\x20\x2f\x78\xde\x49\x68\x22\xb7\x72\xc9\x50\x1f\x71\xcf\xf2\xe0\xd8\xfe\x2f\x1f\x3a\xa9\x60\xcb\x69\x4d\x8a\x15\x61\x97\x2e\x2e\x2b\x42\xf0\x05\x7e\x20\x82\x2f\x08\xbe\xec\xb0\xe9\xdf\xd1\x2e\x63\xfb\xdf\x99\xd5\x07\x04\x80\xf1\x3f\x16\xe3\x0f\x08\x00\x08\x00\x08\x70\xaa\x10\x40\x86\x3b\x2b\xbe\xca\x10\x22\xaf\x32\x3c\xe8\x15\x47\x32\xec\x5e\xec\x85\x86\x1d\xd7\x17\xe1\xf4\x3b\x4e\xbf\xe3\xf4\x3b\x4e\xbf\xe3\xf4\x3b\x4e\xbf\xe3\xf4\x3b\x4e\xbf\xe3\xf4\x3b\x4e\xbf\xe3\xf4\x3b\xae\x2f\xc2\xe9\x7b\x9c\xbe\xc7\xe9\xfb\x83\x5d\x5f\x24\xc3\x5c\x4c\x53\xda\x01\xed\xce\xb1\xbe\xd8\x22\xc0\xb3\xaa\xbe\x38\x30\xd7\x72\x8f\x3d\x06\xbe\xe5\x4d\x07\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\x2e\x70\xae\x43\x71\xae\x4c\x94\x2c\x48\x1b\xf2\x4c\x6a\x33\xba\x2b\xf1\xfa\x5c\x15\xf6\xb6\x2c\xec\xec\xd9\xd7\xc2\x5e\x39\x24\x05\x5b\x58\x81\xce\x79\xd8\xb2\xc9\x02\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x06\x32\x76\x38\x32\x66\x7e\xf9\x5b\x21\x73\xbe\x3b\x11\x33\x85\xfc\x97\x2e\x04\x24\xcc\xef\x8d\xc3\x12\x30\xef\xc1\x47\x40\xbe\xea\x93\x02\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\x0b\xc4\xeb\x50\xc4\x4b\x89\x20\x13\xf9\xae\xa8\xeb\x81\x7e\x7d\xf6\x8c\xcb\x74\xc3\x21\xe1\x96\x79\x62\xe7\x54\xab\x1c\x7f\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\x2c\xe0\xac\xc3\xe1\xac\xec\x29\x0a\x04\x0f\x02\xed\x8b\xec\x8e\xb5\xa8\x94\x5b\x53\x0a\xf0\x56\xad\x3b\x0e\x8b\xb9\xfc\x27\x1f\x01\xee\x9a\x99\x17\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\xc0\x5e\x07\xc6\x5e\x0d\x79\x17\x40\x97\xe9\x87\x0e\x08\xd7\xb1\xa0\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\x2d\x30\xad\x03\x32\x2d\xfa\xfb\x8d\xd9\x88\x4e\x79\xba\x9c\x6d\xd9\x55\x2f\x09\xa3\xa7\x28\x2c\x78\xec\x37\x92\x97\xce\xe8\x5b\x2a\xe8\xaf\x3c\x1d\xb0\x50\xa4\x99\x08\xb4\x11\x7b\x5d\xba\x1e\x97\x54\xca\x65\xb5\xbd\xaf\xed\xd7\x4a\x60\xc4\xa2\x44\xe5\x82\x93\xc9\x39\x47\x56\x46\xbf\x36\xb0\xac\xec\xd0\x8f\x91\x3a\x44\x52\xd8\x94\x07\x93\x28\x11\xd9\xcb\x20\x7d\x1c\xeb\x0f\xd4\x40\x3b\xd0\x83\xa7\x57\x03\x9a\xdf\x77\xda\x13\x6d\xcc\xd0\xa8\x81\x4d\x40\x5a\xd9\x2d\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x40\x69\x07\x47\x69\x22\x09\x53\x19\xad\x3a\x15\xb9\x19\x49\xbb\x73\xe5\x80\xa4\xb5\x43\xd2\xca\x0e\x05\x49\xf3\x49\x5a\xd9\x2d\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x20\x69\x87\x27\x69\xda\xbf\x68\x8c\xd1\x74\x21\x40\x68\x2d\x21\x34\xdd\x99\xc0\x67\x35\x7c\x46\xd5\x00\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x3b\x34\x3a\xa3\x0e\xce\xa8\xd2\x0d\xf9\xd9\x47\x5d\xd2\x67\xfd\x07\x40\xb4\x76\x20\x5a\xd5\xa3\x20\x69\x3e\x49\xab\xfa\x05\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\x0d\x38\xed\xe0\x38\x2d\xa9\xf0\x4c\x33\x9a\x56\x72\x1e\xc0\xb4\x76\x60\x5a\xd9\xa1\x1f\x0d\x79\x3a\x53\x76\x56\x76\x03\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x19\xd0\x59\x87\xe8\xec\xe6\x9f\xe5\xbf\xbf\xe3\xc2\x81\xe3\x27\x6a\x61\xed\xea\x81\xf3\x65\x6b\xb8\x6a\x00\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\xad\x3b\xb6\x66\xab\xa9\x4b\xa5\xbe\xd7\xfb\x20\xa6\x02\x99\x8a\x2b\xa6\x8a\x80\x20\x0b\xf9\xdd\x82\x4f\x0d\x0f\x48\x33\x49\xdd\x52\xd5\x25\xf1\x32\x06\xa8\x3e\x29\xcf\x27\xb4\xc9\xfb\xad\xd0\xee\xa8\xa9\x09\xd0\x1f\xd0\x1f\xd0\x1f\xd0\xdf\x7e\xd0\x9f\xf9\xf8\xfb\x1a\x02\xe8\x63\xbf\xc4\x99\x68\x39\x62\x8f\x51\x12\xb6\x8c\xff\xae\x2a\x97\x8c\xdc\x4e\xbb\x7c\x6b\xaf\xae\xf2\x35\x2f\x6b\xbb\x05\xaf\x6c\xc0\xc3\x45\xf0\xb0\xdf\xe0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\x10\xd0\xb0\x7f\xd0\x90\x68\xa1\xad\xb2\xbf\x3b\xf1\x78\x60\xfb\x28\x10\xa4\x12\xa4\x12\xa4\x12\xa4\xb2\x9f\xa4\x12\x57\xb9\x1e\x3d\x66\xac\x5d\xea\xda\x6f\xd4\x88\x4b\x5c\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\x81\x1b\xfb\x89\x1b\x41\xfe\x40\xfe\x40\xfe\x40\xfe\x7a\x4e\xfe\x5a\x48\x51\x6c\x97\xfe\x21\x45\xb1\x7d\x76\xd8\x6f\x6e\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\x08\x66\xd8\x3f\x66\xe8\xa7\x28\xfa\xbb\x13\xa4\x28\x02\x54\x02\x54\x02\x54\x02\x54\xce\x83\x4a\xed\x8a\x35\xce\x4f\xd4\x85\x20\x37\xb1\x75\xbe\xa8\xbb\xf5\xcc\xf3\x12\xa9\x1a\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xe0\x8b\xc8\x49\x04\xea\x03\xea\x03\xea\x03\xea\xdb\x1c\xf5\xb5\x91\x90\xd8\x1a\xee\x43\x32\x62\xbb\xb0\xb0\xdf\xa0\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\x10\x90\xb0\x5f\x90\xb0\x96\x84\x68\x77\x26\x48\x40\x04\x95\x04\x95\x04\x95\x04\x95\x9c\xa3\x92\xd4\xef\x19\xb5\xa5\x61\x16\xe2\x47\x5d\xd2\x67\xfd\x07\xa4\x22\xb6\x4d\x17\xab\xbe\x3d\xef\x7c\xc4\xaa\x1f\xc0\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\xc1\x1b\x91\x94\x08\xfc\x07\xfc\x07\xfc\x07\xfc\xb7\x2d\xfe\x6b\x21\x33\xb1\x65\x04\x88\xf4\xc4\x3d\x00\xc4\x7e\xc3\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\x43\x80\xc3\x1e\x82\x43\x3f\x51\xb1\xb6\x3d\x41\xb6\x22\x70\x25\x70\x25\x70\x25\x70\xe5\x1c\xae\x4c\x75\x71\xb4\x70\x3d\xc9\xb8\x98\x8a\x20\xe6\xd1\xb4\x69\xe2\xe2\x7d\x59\xe8\xaf\x54\xe8\x5b\x5d\x28\x72\x18\xdb\x46\x90\x0b\xbb\xf9\xbc\xd3\x19\x17\x76\x09\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x32\x1b\x81\x0a\x81\x0a\x81\x0a\x81\x0a\x1b\xa0\xc2\x16\x92\x1c\xf7\x87\x0b\x91\xef\xb8\x5f\xd8\xd8\x6f\xd0\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\x08\xc8\xd8\x6f\xc8\xe8\x67\x41\x2e\xdb\xa9\x20\x21\x12\x94\x13\x94\x13\x94\x13\x94\x73\x9e\x72\xca\xb0\x71\xfa\xa3\x0c\x91\xec\xd8\x3a\x7f\x94\xe1\x99\xa7\x36\xca\x10\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x8c\x11\x89\x8c\x40\x7c\x40\x7c\x40\x7c\x40\x7c\x1b\x23\xbe\x36\xd2\x16\x5b\xc2\x7c\x48\x52\x6c\x13\x12\xf6\x1b\x10\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\x02\x0e\xf6\x09\x0e\xd6\x12\x10\x69\x5f\x82\x74\x43\xb0\x48\xb0\x48\xb0\x48\xb0\xc8\x45\x2c\x32\x17\xd3\x94\x36\x8b\xcd\xd3\x0e\xbf\xd8\xa2\x90\x7e\xb8\x07\xb2\xe8\x3a\xf7\xec\xd3\x10\x5d\x47\x80\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x82\x38\x22\x1d\x11\x08\x10\x08\x10\x08\x10\x08\x70\x6b\x04\xd8\x4e\x5a\x62\xab\x18\x10\xe9\x89\xfb\x80\x88\xfd\x06\x88\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x80\x87\x7d\x84\x87\x33\xe9\x8a\xde\xfe\x04\x69\x8b\x60\x96\x60\x96\x60\x96\x60\x96\x73\xcc\x32\x13\x25\x47\xd3\x6b\x5f\x26\xf5\xca\xd3\x34\x81\xf1\x73\x55\xe8\xdb\xb2\x50\xa4\x32\xb6\x4d\x21\x17\x76\xf3\x79\x27\x35\x2e\xec\x12\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\x10\x4a\xa4\x37\x02\x15\x02\x15\x02\x15\x02\x15\x36\x40\x85\x2d\x24\x3a\xee\x0f\x17\x22\xe5\x71\xbf\xb0\xb1\xdf\xa0\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\x11\x90\xb1\xdf\x90\xd1\x4f\x83\x5c\xb6\x53\x41\x42\x24\x28\x27\x28\x27\x28\x27\x28\xe7\x02\xca\x69\x8a\xfd\xad\x90\x39\x6f\x9e\x08\x69\x0a\xfb\x2f\x5d\x18\x12\x20\xdb\x67\x92\x5e\xf7\x9e\x7b\xe2\xa3\xd7\x15\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x60\x91\x48\x78\x04\x0a\x04\x0a\x04\x0a\x04\x0a\xdc\x01\x05\xb6\x92\xe8\xd8\x36\x0e\x44\x82\xe3\x7e\x60\x62\xbf\x41\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x22\x20\x62\x3f\x21\x62\x3d\xa1\xb1\xbe\x43\x41\x22\x23\xe8\x25\xe8\x25\xe8\x25\xe8\xe5\x1c\xbd\x54\x22\xc8\x44\xde\x34\x83\xf1\x81\x4a\x41\xea\x62\xdb\xb4\xd1\xf4\xeb\x79\xe7\x2c\x9a\x3e\x00\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x04\x67\x44\xb2\x22\x70\x1f\x70\x1f\x70\x1f\x70\xdf\x36\xb8\xaf\x85\x2c\xc5\x16\x91\x1f\xd2\x13\x5b\x06\x86\xfd\x86\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x3d\x03\x85\x7e\x42\x62\xb9\x35\x41\x26\x22\xd0\x24\xd0\x24\xd0\x24\xd0\xe4\x02\x34\x99\x3d\x45\x81\xe0\x41\xa0\x3d\xb7\xe6\x19\x89\x54\xda\xad\x29\x0d\x99\x89\xed\x83\x46\xbf\x7f\xcf\x3d\x43\xd1\xef\x0b\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x64\x2a\x02\x07\x02\x07\x02\x07\x02\x07\xee\x82\x03\x5b\xc9\x58\x6c\x1d\x09\x22\x73\x71\x4f\x40\xb1\xdf\x30\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\x11\x20\xb1\xa7\x20\xb1\x9e\xc9\x38\xb3\x45\x41\x46\x23\x10\x26\x10\x26\x10\x26\x10\xe6\x32\x84\xd9\x52\x2a\x23\x72\x18\xf7\x84\x1c\x91\xbc\x18\xd1\xe2\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x08\xd8\x88\xac\x45\x20\x3f\x20\x3f\x20\x3f\x20\xbf\xcd\x91\x5f\x7b\xe9\x8a\xc8\x53\x3c\x4a\x68\xd8\x6f\x60\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\x08\x58\xd8\x37\x58\xb8\x20\x33\x11\x29\x89\xe0\x93\xe0\x93\xe0\x93\xe0\x93\x35\x3e\xd9\x08\x45\x96\xf4\x0b\x30\xf2\xa8\x60\xe4\x79\x42\x48\xbf\xf9\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xdd\x61\x48\x7f\x77\xb2\x57\x10\x09\xd2\x07\xd2\x07\xd2\x07\xd2\x97\xc8\xb0\xf1\x11\xe3\x5f\x64\x88\xf3\xc5\x6d\xd1\x39\x19\x9e\xf9\x91\x62\xdd\x03\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x60\x73\x07\x67\x73\xc0\x64\xc0\x64\xc0\x64\xc0\x64\x84\xc9\xda\xc8\x85\x6b\x0b\x95\x21\x0d\xae\x05\xd0\xd6\x6f\xc8\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\x06\xc0\xd6\x2b\xc0\x56\x4b\x7e\x33\x1b\x13\xe4\xbd\x01\xe8\x01\xe8\x01\xe8\xed\x15\xe8\xa5\xfa\x77\x64\xfc\x9f\x64\x5c\x4c\x45\x10\xf3\x68\xda\x34\x11\xee\xbe\x2c\xf4\x57\x2a\xf4\xad\x2e\x14\x99\x71\xed\x00\xbb\x85\x9d\xfb\x31\x52\xf9\x7b\x99\xdd\xc6\x71\x99\x39\xad\xfa\x4d\xf5\x9a\xa4\xce\x2d\xec\x22\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xa0\x3e\xe4\xd2\x01\xbd\x01\xbd\x01\xbd\x75\x8e\xde\xda\xa6\x6e\x00\x6e\xfb\x01\x6e\xe7\x7d\x2c\x75\xb6\x37\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\x80\xd5\xba\xc7\x6a\x2d\x1c\x57\xdd\x0b\x5a\xc3\xd1\xd5\x96\xc1\x5c\xbf\xa1\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x1c\x80\x5c\x6f\x81\x9c\x7f\xa4\x75\xc1\x26\x05\xc7\x5b\x01\x03\x01\x03\x01\x03\xf7\x0b\x03\x65\xd8\x38\xad\x4e\x86\xc8\xa4\x6b\x09\xd8\xc9\x10\x07\x55\x6b\xec\x4e\x86\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc0\x75\xc8\x9f\x03\x32\x03\x32\x03\x32\xeb\x02\x99\xe5\x62\x9a\xd2\x3e\xa8\x39\x3a\xfb\x62\x8b\x02\x42\x6b\x0d\xa1\xb9\x2e\x05\x4a\x9b\x41\x69\xae\x63\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x80\xd4\x0e\x8e\xd4\x32\x51\x82\x22\x6d\xce\x33\xa9\x8d\x69\x53\xb8\xf6\xb9\x2a\xf4\x6d\x59\x28\x30\x5b\x3b\x98\x6d\x61\xe7\x02\xb8\xf9\xc0\x6d\x61\x17\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x75\x80\xde\xcc\xef\x7f\x2b\x64\xce\x9b\x23\x37\x53\xd8\x7f\xe9\xc2\x80\xda\xda\x42\x6d\x5e\xa7\x02\xb1\xd5\x11\x9b\xd7\x35\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x40\x6b\x07\x47\x6b\x4a\x04\x99\xc8\x9b\x32\xb5\x07\x2a\x05\x30\xad\x1d\x98\x66\x7a\x13\x14\xcd\xa7\x68\xa6\x4f\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x80\xcf\x3a\xc0\x67\xd9\x53\x14\x08\x1e\x04\xda\x23\x69\x8e\xd1\xa8\xb4\x5b\x53\x1a\x70\x5a\x5b\x38\xcd\xef\x55\x60\xb5\x3a\x56\xf3\xfb\x06\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\x0d\x78\xad\x2b\xbc\xd6\x12\x57\x03\x50\x6b\x15\xa8\x81\xa4\x2d\x20\x69\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x40\x68\x07\x42\x68\xea\x66\x29\x32\x1b\x8b\xdc\x5b\x87\x6f\xef\x3f\xb8\x37\x4b\xcd\x90\xad\xf6\x30\xd6\xde\xf8\xd8\x1a\x98\xa5\x3b\x62\x9e\x64\x8d\x45\x7e\x7b\xff\xe1\xd7\xaa\xd1\x07\x24\x56\xb7\xf7\x1f\xfe\x9c\xc9\x22\xfd\x18\xa9\xcd\x99\xd5\xf7\x72\x50\x79\xa8\xf7\x55\x91\x4c\x32\x31\x8e\x54\x6e\x1a\x45\x8f\x8d\xe4\xea\x11\x8f\x92\x91\xcc\xa6\xe5\xfb\xc5\x99\x21\x58\x27\x37\xe2\x8b\x3a\x68\xf1\x14\x58\xf4\x4d\x37\x3c\xdd\x4c\x8a\xb6\x27\xc4\xd3\xab\xa1\xc8\xf9\xab\x4d\x4d\x41\x69\xc1\xce\x63\x56\xfc\x8f\xed\x9e\xcd\x67\xc7\xaf\xe6\x07\xb7\xf7\x1f\x3e\x7b\x5d\x75\xd8\x89\xe2\x9e\xbc\x0f\x03\xe2\xe6\xcb\xb4\xc8\xb9\xde\xf1\x3e\x8b\xe1\x44\xca\xc7\x1a\xca\x5c\x1e\x8a\x31\xd0\x22\xb3\x2e\x9e\x73\xb1\xe5\x88\x3d\x46\x49\xc8\xfe\x6a\xcb\xfc\xbb\x29\xf3\xad\x5f\xe6\x69\x47\x54\xb6\x9c\x7c\xba\x1b\x57\xcd\xbe\x35\x1d\x89\x58\x03\x62\x0d\x88\x35\x20\xd6\x80\x58\x03\x62\x0d\x88\x35\x20\xd6\x80\x58\x03\x62\x0d\x88\x35\x20\xd6\xb0\xd7\x58\x03\x58\x3f\x58\x3f\x58\xff\xc1\x59\x7f\xfb\xec\x69\xb0\x98\x0f\x59\x58\x31\x58\xc5\x1e\xb6\x02\x52\xcb\xb2\x30\xb7\x4f\xc0\x5c\x05\xb4\xaa\xe4\xcc\x35\xd0\xc4\xcf\xd8\x34\x58\x86\xd2\x36\xa5\x5a\x80\xb9\xcc\x52\xc8\xf8\xd1\x10\xad\x76\xf1\x93\x69\x5e\x7b\x00\xca\xce\xdf\xa1\x0c\xcb\xa0\xb2\xfd\xb7\x5e\xe6\xa3\x4c\x84\xee\xb5\x3c\xc4\x24\xd5\xe3\xba\xeb\xfa\x66\xd7\xde\x2b\xca\x36\x0f\xf4\x56\xdf\x2c\x5b\xb5\x4d\xa7\xf3\x94\xb5\xb7\x37\x14\x2c\xd5\x13\x4b\xbb\xd9\x03\x76\x9b\xb0\x28\x31\xc8\x47\x66\xac\x48\x4a\x6a\x14\xb2\x30\x7b\xf9\x5c\x24\x2c\x8c\x32\xa1\x0d\x9c\x28\x51\x04\x19\x76\xed\x29\x59\x16\xe3\x5e\x77\xbb\xf3\x65\xa3\x22\x23\xb7\x3a\xcd\x64\x20\x94\xb2\x6b\x9f\xb7\x3b\x18\xb0\x5f\xe9\x89\xb4\x5d\x21\x1f\x44\x2f\x7c\xb7\x71\xfc\x9a\x1c\x96\x30\x7b\x61\x59\x91\xe8\x1d\xb9\xb6\x73\xce\x4b\xb3\xc5\x89\xb0\xb2\x3f\xa6\x8a\x2d\xb8\x0a\xe4\x0f\xff\x95\x27\x7c\x2c\x32\xb3\xb3\xd3\x4f\xd0\x6e\xb5\x0c\x22\x72\x55\xca\x3d\x14\xa7\xfd\xaa\xcc\x98\xf6\x64\xf3\x97\xd2\x77\x9b\xf2\x47\xdd\xd2\x7c\x22\x94\x70\x36\x5a\xaf\x30\x0e\xb2\x11\x67\x1a\x0a\x46\xeb\x08\xed\x97\x64\xc6\x5e\xfd\xe1\x4f\xfa\xbb\x19\x0f\x88\x06\xc6\x32\x19\x1b\x8b\x4c\x7b\x1a\xed\x7c\xf2\x28\x31\xf9\x10\xb4\x67\xa8\xbe\x4b\x84\xc4\xb2\x4a\xbd\x29\xa6\x37\xec\xf5\xcd\xcd\x58\xc6\x3c\x19\x0f\x64\x36\xbe\x49\x1f\xc7\x37\x45\x12\x05\x32\x14\x37\xff\xf2\x41\xdd\xeb\x52\x66\x77\xf3\xb6\xcd\x47\x6d\xc3\xc9\xec\xfd\x61\x91\xfd\x7e\x6b\x36\x00\x87\xad\xc7\x1f\xe6\xeb\x71\x1b\x04\x22\x3d\x70\x45\x9a\x2c\x68\xb4\x86\x1c\xcb\x82\x66\xf6\x6b\xf3\x6d\x31\x9f\xb3\x40\xc6\xb1\x08\x9c\x57\x76\x9a\xcb\x9b\x69\xea\xaa\xe5\xed\x6d\xd9\x0b\x88\xb4\x20\xd2\x82\x48\x0b\x22\x2d\x88\xb4\x20\xd2\x82\x48\x0b\x22\x2d\x88\xb4\x20\xd2\x82\x48\x0b\x22\x2d\x88\xb4\x20\xd2\x82\x48\x0b\x22\x2d\xfb\xca\xf2\x7d\xc8\x79\x5e\xa8\xc6\xe8\xc9\xac\x19\x15\xd4\x39\x1a\x0c\xd5\x14\x9c\xb4\x79\xb2\xed\xbf\x5b\xcc\x8c\xbe\xf9\xa7\x7e\xd2\xf7\xa5\x09\xd2\x64\xbb\xea\xd0\xe2\x34\x21\x9b\x6e\xe8\x21\x52\x98\x97\xd9\x95\x07\xe3\x43\x93\x1f\xfe\x8d\xfc\xd9\xa1\xfe\x17\x0f\xf2\x01\x63\x77\xfa\xbf\xee\xf3\x29\x8f\x08\xfc\x2b\x16\xc4\x85\xca\x45\x76\x6d\xc7\x26\xb0\x3b\x48\x16\x47\x8f\x82\x5d\x96\x02\x37\x97\x7a\x69\x74\x1a\x42\x03\x76\x1f\xf3\x24\xb1\x8b\x1d\x19\x1c\x1e\xeb\xd5\xe5\xd5\xe0\xd5\x9f\xbc\x99\x47\x8f\x6e\xc3\x60\x96\x0d\x2b\x19\xdf\xd0\x35\x51\xd7\x86\xdd\x99\x56\xe9\xf7\x26\x55\xae\x05\xd6\x2d\x2b\x94\xf6\xb6\x78\x62\xdc\x63\x63\x06\x77\x6b\x8c\x7e\xc6\xf1\x87\x31\x9a\x98\xce\xb1\x38\x1e\x68\x9f\x16\x0b\x4d\x49\x1a\xf3\x40\x9c\x89\x35\xa1\xb6\x22\x24\x8d\x90\x34\x42\xd2\x08\x49\x77\x19\x92\x6e\x14\x09\x2e\x8e\x67\x4d\x59\x13\x08\x3e\xd5\xdc\xa6\xf5\xc1\xdf\xb6\x16\x92\x36\xb6\x81\xef\xa8\xb6\x9f\x68\x6c\x14\x56\x89\x83\xad\x12\x4b\xc9\x8b\x0f\x53\xa2\x84\x29\x03\x42\xd8\x50\x8c\xa4\xe1\x93\x0e\x22\x56\x51\x7c\xcb\x6d\xa9\x35\xde\x32\x90\xc8\xe4\x3a\x11\x63\x4e\x7d\x66\x9f\xe7\x2f\x17\x26\xa0\x50\x8e\x96\x7d\x2d\xa3\xe9\x54\x84\x7a\x41\x8a\x5f\x6c\x30\xd8\x0f\xf5\x27\x51\x7c\x65\xe1\x09\xa1\x3b\x36\xce\xb4\x87\x98\x8a\x2c\x92\x61\x89\x8b\x2a\x67\x51\xb7\xb6\xec\xb8\x42\xe9\x4a\xfa\xd0\x8f\xeb\x5f\xba\x06\xd9\x87\x8c\xbc\xbd\x43\xa4\x7f\x40\xf5\x9c\x0a\x9e\x2c\xac\x63\x35\x08\x54\x95\x7b\xaa\x49\x8b\xf8\xe8\x9d\x27\xe6\x9a\xc6\x82\x2b\x51\x46\x4c\xee\x33\x99\xf2\x31\x0d\xd5\xbd\x8c\xa3\xe0\xe5\xca\xf4\x96\x89\x11\xb8\x56\x57\x6a\xb0\x66\x9f\xf3\xc7\x01\xf3\xb6\x8e\xa1\x48\x45\x12\x8a\x24\xaf\xe2\x74\x82\xc9\x2c\x9d\xf0\x44\xb7\x5d\x0f\x40\x56\x88\x9b\x11\x8f\x5d\xcc\xfc\xeb\x85\xf9\xf3\xd7\x0b\x36\x8a\x12\x1e\x47\xbf\xbb\xb8\xd7\x50\x30\x1e\x86\x04\xd3\x6f\x0c\x98\x0a\x2b\x9c\x6a\x8a\xbf\x54\xd5\x8f\x4c\x9c\x7a\xc0\xee\x22\x7a\x4b\xbc\xaa\xcb\x6c\xbe\x6d\x14\x2d\x31\x29\x23\x26\x4c\x4e\xef\xb0\xcc\x27\xde\x08\x98\x8a\xbd\x73\x4d\xda\xaa\xff\x97\xdb\x16\xaa\x9d\x7e\xa5\x27\xf2\x99\x8d\x79\x36\xe4\xe3\x5a\x1a\x51\xf9\x5e\x8a\x6c\x24\xb3\xa9\xee\xb6\x85\x4d\xfa\x34\x53\xbb\xe5\x2d\xa2\x97\xc4\xcd\xf0\xd4\x34\x3f\xd2\xb3\x2f\x88\xc2\x2a\x6a\x4d\xd1\x47\xca\x23\x28\x87\x41\x91\x06\x06\xfd\xd5\xc5\x17\x07\x5e\x7f\xbb\xc8\x94\xe3\x82\x15\x07\xa8\x3f\x6c\xc0\x4c\x06\x1a\x39\x64\xbe\x71\xba\x34\x6d\xb8\x64\xd7\x76\x8e\xd4\xe7\x90\x7a\xc3\x2e\x7f\xe6\xc1\xa3\x5e\xdc\x93\x50\x7f\x8b\xc7\xb1\x7c\xa6\x2f\xcd\x74\x9c\x89\x1c\xdb\xf7\xa9\x5e\x88\x6b\xc1\xb0\x2c\xe9\x0d\xbb\x7c\x2f\x33\xe1\x15\xcb\x02\xae\x02\x1e\xea\xd6\xdb\xfe\x21\x63\x6f\xca\x53\xc6\x7a\xce\x15\x38\x2a\xcb\xa8\x01\xb3\x99\x89\x76\x2c\x54\xb4\xb5\xcc\xc0\x43\x41\xd8\xa3\x71\xfc\x52\x82\xdb\x73\x8d\xa1\x78\x10\xa5\x3f\x19\x82\xbe\x3b\x57\x98\x75\xfd\xae\xe9\x89\xff\xba\xc0\x0b\x9c\x8a\x6c\x2c\x96\xff\x99\xda\x2d\xc6\x51\x70\x3d\xf7\xc5\x9e\x78\x9b\x54\xe3\xa3\xa6\x16\x2b\xa6\xff\x3d\x4d\x14\x38\x9d\x40\x13\x07\x42\x13\x33\x39\x1c\x6e\x4e\x9b\x3c\xa3\xd4\xc4\x74\x4d\xb2\x02\xfb\xc1\x7f\x97\xe9\x6f\xc6\x3a\xfc\x48\xae\x82\xc9\xa4\xe5\x31\xfd\x52\x3b\xda\xe6\xd7\xf4\x0d\x72\x7a\x15\xfb\xe1\x3f\x95\x4c\x68\x86\x5f\xb1\xbf\x6a\xeb\x62\xff\xfd\xe0\x6c\x4e\xf5\xe1\x8f\x9b\x31\x93\x9d\xfc\xd7\xf7\x32\x0b\xc8\x75\x1f\x4b\x1a\x21\xc9\xbe\x5e\x8c\xf4\x67\x5f\x2f\xd8\x6d\xad\xc9\x03\xf6\x21\xb7\x7e\x36\x61\x7c\x3b\xe3\xaf\x79\x40\xbd\x44\x69\xa9\x71\x14\x58\x97\x87\xa8\xbf\x7c\xb6\x03\x60\xd2\x36\x53\x21\xd3\x58\x0c\x98\x79\xe6\x28\xe6\xe3\x72\xe0\x29\x32\xbf\xb0\xb7\xca\xc7\x7b\x7d\xa0\x7f\x7f\xfc\xc0\xa8\x11\xa8\xb1\x01\xe0\x63\x59\xb1\x9b\x05\x4b\xc9\x5e\x58\x33\xb7\xa6\x02\x76\x88\xe9\x3f\x76\x84\x53\x9e\x4f\xe6\x56\x98\xce\xe5\x48\xb7\x0c\xda\xd2\x32\xd2\xba\xa0\xd5\xaf\x65\xa9\x5d\x43\xb2\xde\x4b\x5a\xad\xed\x4a\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x0b\x1c\xb5\xc0\x51\x8b\x46\x30\x71\x35\x7d\x38\x6a\x59\xab\xb5\xe0\x64\x27\x61\xab\xe3\x21\x5b\x87\x96\xb6\xda\x16\x44\x1d\x3e\x93\x78\x4d\x0d\x11\xb0\x43\xc0\xee\xbc\x73\x89\xd7\xbf\x20\x87\xca\x26\xde\xa8\x26\x87\x91\xb8\xda\xa0\x2a\xc7\x28\x72\xb5\xe3\xf2\xb6\x95\xcc\xd5\xa9\x2e\x76\xdb\x08\x5d\x21\xfe\x82\xf8\x0b\xe2\x2f\x88\xbf\x20\xfe\x82\xf8\x0b\xe2\x2f\x88\xbf\x20\xfe\x82\xf8\x0b\xe2\x2f\x88\xbf\x20\xfe\x82\xf8\x0b\xe2\x2f\x88\xbf\x40\xea\xaa\x41\xac\xa5\xbf\x62\x57\x6b\xf2\xa6\x77\x90\xbb\x3a\x55\xd8\xb6\x4e\xf0\xaa\x3d\xc0\x06\xc9\xab\xf3\x95\xbc\xda\x33\xc5\xdf\x93\xe8\xd5\xae\x76\x73\x73\xd9\xab\xd3\xb5\x2a\x6b\x85\xaf\x10\xb0\x46\xc0\x1a\x01\x6b\x04\xac\xfb\xb0\xbe\xec\x49\x00\x6b\x3f\x41\xe2\xd3\xcd\x82\x5a\x1f\x18\x6e\x6f\x51\x81\x0c\x56\x7f\xd7\x0b\xc8\x60\x41\x06\x0b\x32\x58\x90\xc1\x82\x0c\x16\x64\xb0\x8e\x58\x06\x6b\x67\x2c\xbb\x8b\x10\xd6\x56\x3e\x21\xa4\xb0\xf2\x8d\xa5\xb0\x8e\x80\x63\x40\x0c\xeb\x68\x5c\xcf\xb3\x47\x15\x10\xc3\x82\x18\xd6\xd1\x60\x9b\x7d\xc9\x61\x75\x14\x50\xf5\x05\xb1\xd6\x56\xe1\x54\x25\xb1\x28\xf2\xbf\xfa\x36\xa3\xa5\x71\x5d\x9b\x62\x96\x84\xd1\x53\x14\x16\x3c\xf6\x33\x1a\x78\x99\xf9\xb9\x4a\x6b\x6c\xe0\x6d\x39\x5f\x97\x9b\xd5\x4b\x2a\xf8\xb2\x4a\xaf\xaf\xe5\x4b\x97\x0e\x05\x8b\x12\x95\x0b\x4e\x3d\x02\x89\x2d\xe7\x61\x3d\x37\x11\x1b\xfd\x68\x8e\xa7\x1e\x70\x17\x43\xe9\x30\x77\x4f\x22\x69\x7e\xb6\x96\x5a\xbe\xaf\x03\xb6\x9d\x48\xf6\xe1\xb4\x0c\x4e\xcb\xe0\xb4\x0c\x4e\xcb\xe0\xb4\x0c\x4e\xcb\xe0\xb4\x0c\x4e\xcb\xe0\xb4\x0c\x4e\xcb\xe0\xb4\x0c\x4e\xcb\x1c\x0c\x26\xe0\xb4\x0e\x4e\xeb\xe0\xb4\x4e\x2f\x4e\xeb\xb4\x8e\xfd\xd6\x9d\xea\xb0\x23\xea\x21\xbf\xc4\x99\x48\xa7\x8c\xbf\x77\xf4\x77\x55\x79\x49\xe4\x09\xda\x15\x55\x3b\x5a\x95\xfb\x77\x59\x73\xe0\xbd\xb2\x01\x0e\x5b\x03\x87\xfd\x86\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\xe7\x01\x0c\x4f\xf1\x62\x40\x80\x4b\x80\x4b\x80\xcb\x93\x05\x97\xbb\x5e\xe4\xb9\x59\xc6\xe2\xea\x64\x50\xe4\x2c\x1e\x1e\x3d\x6e\x70\x33\x47\xaf\x01\xe4\xb1\x5d\x0b\x02\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x09\x0c\x89\xbc\x45\xe0\x3f\xe0\x3f\xe0\xbf\xe3\xc6\x7f\x2d\x64\x2e\x1e\x00\x01\x22\x77\xf1\x68\x00\x62\xbf\xe1\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\x21\xc0\xe1\xb9\x80\xc3\xd3\xd4\x71\x03\xc2\x04\xc2\x04\xc2\xec\x19\xc2\x4c\x23\xf1\x2d\x17\x89\xa2\xe2\x2c\xba\x5c\x8a\x21\xc7\xa4\xc0\x3e\x92\xd9\xb4\x1c\x02\xce\x0c\xa6\x59\xad\x1f\xdd\x48\xcc\xb9\x1b\x95\x68\xbf\x63\xe6\xf1\xdd\x58\xe4\xb7\xfe\x37\x6e\xef\x3f\xfc\xd9\xf6\xc3\x01\xb9\x5c\xf9\xd4\x4d\xa9\xdc\xf7\xd5\x03\xef\x98\xf5\xca\x09\x50\xf3\x13\xcd\x64\x3e\xed\xd1\x5f\x0e\x71\x67\x67\x81\x45\xb7\xb7\xf7\x1f\x3e\x7b\x5d\x73\xd8\x09\xe1\x9e\x4c\x29\xa6\x2d\xcf\x8b\xa0\x50\xb9\x9c\xba\x61\xf7\x6a\xb7\x74\xc2\x98\xdd\x72\x66\x57\x74\xe7\xdb\xb9\x98\xc5\x5b\x2a\xcf\xd5\xf8\x5d\x59\xde\x89\x47\x0a\x36\x9b\x5c\xba\xeb\x16\xcd\xae\x15\x9d\x06\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\x0d\x98\xbd\x57\x98\x0d\x84\x0b\x84\x0b\x84\x7b\x70\x84\xdb\x3e\x57\xaa\x48\xc3\x35\x4f\x23\xbb\x87\x2f\x11\x53\x1d\x0c\xb9\x0b\x9c\x96\xc1\x88\xad\xe8\xd3\xb2\x5c\xc1\x1d\xce\x18\x2f\xa0\x57\x55\x8a\xe0\x0a\x72\xb2\x24\x39\x50\xaa\x05\x4c\xcb\xac\x87\x8c\x1f\x05\xbe\x6a\x87\x35\x99\x26\x35\xa3\x4d\x7b\xb8\xd7\xb0\xcd\x19\x89\x3b\x10\x71\x07\xe2\xa1\xee\x40\xdc\xe8\xaa\xc1\x23\xb7\xe0\xf6\x9a\xde\x05\xd6\xfb\xad\xd9\x0f\x74\x5c\xb1\x96\xee\x0f\x6e\xbd\x66\x8d\xee\x2b\x94\x1d\x2f\x78\xf6\xae\xe3\xb9\xfa\xdb\xab\xac\xbd\x7b\xc1\xe5\xe8\x84\x96\x3f\xd3\xbc\x85\xcb\x5f\xd9\x62\x84\x5d\x10\x76\x41\xd8\x05\x61\x17\x84\x5d\x10\x76\x41\xd8\x05\x61\x17\x84\x5d\x10\x76\x41\xd8\x05\x61\x17\x84\x5d\x10\x76\x41\xd8\x05\x61\x97\x7d\xa4\xf3\x3e\xe4\x3c\x2f\x54\x63\xac\x64\xd6\x8c\x0a\xde\x74\x1b\x53\x69\x08\x4b\xda\x3c\xb1\xb4\xe6\x1c\xc4\xda\xb4\xe7\x75\xb2\x2d\x64\xa3\xea\x70\xe2\x74\xa0\x99\x6e\xdc\xbe\xf2\x93\x97\xd9\x89\x07\xe3\x13\x93\x5f\xfd\x8d\xfc\xd3\xa1\xfe\x17\x0f\xf2\x01\x63\x77\xfa\xbf\xee\xf3\x29\x8f\x88\xeb\x2b\x16\xc4\x85\xca\x45\x76\x6d\xc7\x20\xb0\x3b\x42\x16\x47\x8f\x82\x5d\xfe\xc2\xa7\x42\xa5\x3c\x10\x97\x7a\xa9\x73\x12\x39\x03\x76\x1f\xf3\x24\xb1\x8b\x17\x19\x10\x1e\xeb\xd5\xe2\xd5\xe0\xd5\x9f\xbc\x59\x45\x8f\x6e\xc3\x00\x96\x0d\x2b\x99\xdd\xd0\x35\x51\xd7\x86\xdd\x99\x56\xe9\x77\x22\x55\xae\x05\xd6\xcd\x2a\x94\xf6\x9e\x78\x62\xdc\x5d\x63\xd6\x76\x6b\x8c\x7e\x46\x0f\xa3\x14\x4d\x6c\xa3\x7e\x6f\x3b\x35\x87\xc5\x42\xbb\x91\xc6\x3c\x10\x27\x6c\x3a\xa8\x7d\x88\x37\x23\xde\x8c\x78\x33\xe2\xcd\x3d\x88\x37\x37\x8a\xea\x16\x47\x1d\xd4\x3d\xa5\x3c\xa6\x15\x81\xdc\x16\xd6\x95\x36\xb6\x74\xef\xa8\x86\x9f\x52\x73\x6c\x12\x6b\xc4\xa1\xd6\x88\xa5\x14\xc5\x07\x23\x51\xc2\x94\x81\x1a\x6c\x28\x46\xd2\xb0\x46\x07\x04\xab\x88\xbc\x65\xb0\xd4\x1a\x6f\x11\x48\x64\x72\x9d\x88\x31\xa7\x3e\xb3\xcf\xf3\x17\x0b\x13\x1c\x28\x47\xcb\xbe\x7e\xd1\x74\x2a\x42\xbd\x1c\xc5\x2f\x36\xb0\xeb\x87\xed\x93\x28\xbe\xb2\x20\x84\x30\x1c\x1b\x67\xda\x31\x4c\x45\x16\xc9\xb0\x44\x3f\x95\x8f\xa8\x5b\x5b\x76\x5c\xa1\x74\x25\x7d\x80\xc7\xf5\x2f\x5d\x83\xec\x43\x46\xde\xbe\x21\xd2\x3f\xa0\x7a\x4e\x05\x4f\x16\xd6\xb1\x1a\x04\xaa\xca\x3d\xd5\xa4\x45\x14\xf4\xce\xd3\x29\x4d\x63\xc1\x95\x28\xa3\x1f\xf7\x99\x4c\xf9\x98\x86\xea\x5e\xc6\x51\xf0\x72\x65\x7a\xcb\xf0\x7e\xd7\xea\x4a\xe8\xd4\xec\x71\xfe\x38\x60\xde\xb6\x31\x14\xa9\x48\x42\x91\xe4\x55\xcc\x4d\x30\x99\xa5\x13\x9e\xe8\xb6\xeb\x01\xc8\x0a\x71\x33\xe2\xb1\x8b\x7f\x7f\xbd\x30\x7f\xfe\x7a\xc1\x46\x51\xc2\xe3\xe8\x77\x17\xc3\x1a\x0a\xc6\xc3\x90\xc0\xf8\x8d\x81\x4c\x61\x85\x46\x4d\xf1\x97\xaa\xfa\x91\x89\x39\x0f\xd8\x5d\x44\x6f\x89\x57\x75\x99\xcd\xb7\x8d\x22\x1f\x26\xfd\xc3\x84\xbc\xe9\x1d\x96\xf9\xc4\x1b\x01\x53\xb1\x77\xae\x49\x5b\xf5\xff\x72\xdb\x42\xb5\xd3\xaf\xf4\x44\x3e\xb3\x31\xcf\x86\x7c\x5c\x4b\xfd\x29\xdf\x4b\x91\x8d\x64\x36\xd5\xdd\xb6\xb0\x49\x9f\x66\x6a\xb7\xbc\x45\xf4\x92\xb8\x19\x9e\x9a\xe6\x47\x7a\xf6\x05\x51\x58\x45\xa0\x29\x92\x48\x39\x01\xe5\x30\x28\x12\xa4\xa0\xbf\xba\x58\xe1\xc0\xeb\x6f\x17\x65\x72\xe8\xa6\x62\x00\xf5\x87\x0d\x98\x49\x1d\x23\x77\xcc\x37\x4e\x97\xa6\x0d\x97\xec\xda\xce\x91\xfa\x1c\x52\x6f\xd8\xe5\xcf\x3c\x78\xd4\x0b\x77\x12\xea\x6f\xf1\x38\x96\xcf\xf4\xa5\x99\x8e\x33\x51\x60\xfb\x3e\xd5\x0b\x71\x2d\x18\x96\x25\xbd\x61\x97\xef\x65\x26\xbc\x62\x59\xc0\x55\xc0\x43\xdd\x7a\xdb\x3f\x64\xec\x4d\x79\xca\x58\xcf\xb9\x02\x47\x65\x19\x35\x10\x36\x33\xd1\x8e\x85\x70\xb6\x96\xd2\x77\x28\xa0\xda\x31\x46\xcd\x83\xc9\x7c\x03\x28\x9e\x43\xe9\x4b\x86\x80\xef\x86\x10\x66\xdd\xba\x6b\x7a\xda\xbf\x2e\xf0\xf0\xa6\x22\x1b\x8b\xe5\x7f\x26\xb5\x5e\x31\x8e\x82\xeb\xb9\x2f\x1e\xb9\x27\x49\x35\x3d\x3a\x40\xb1\x62\x6a\xdf\xd3\x84\x80\x43\x09\xe8\x70\x20\xe8\x30\x93\x6b\xe1\xe6\xb4\xc9\x07\x4a\x4d\xec\xd5\x24\x15\xb0\x1f\xfc\xf7\x96\xfe\x66\x2c\xc1\x8f\xe4\x06\x98\x8c\x57\x1e\xd3\x2f\xb5\x13\x6d\x7e\x4d\xdf\x20\x87\x56\xb1\x1f\xfe\x53\xc9\x84\x66\xf8\x15\xfb\xab\xb6\x24\xf6\xdf\x0f\xce\xbe\x54\x1f\xfe\xb8\x19\x0d\xd9\xc9\x37\x7d\x2f\xb3\x80\xdc\xf2\xb1\xa4\x11\x92\xec\xeb\xc5\x48\x7f\xf6\xf5\x82\xdd\xd6\x9a\x3c\x60\x1f\x72\xeb\x43\x13\x9e\xb7\x33\xfe\x9a\x07\xd4\x4b\x94\x3e\x1a\x47\x81\x75\x67\x88\xe6\xcb\x67\x3b\x00\x26\xbd\x32\x15\x32\x8d\xc5\x80\x99\x67\x8e\x62\x3e\x2e\x07\x9e\x22\xe8\x0b\x7b\xab\x7c\xbc\xd7\x07\xfa\xf7\x3d\x44\x41\x8d\x88\xcb\x0e\x22\xf3\xc7\x15\xe5\xf4\x15\x22\x57\x3c\xbc\x37\xda\x90\x2d\x45\x5a\x6f\x94\x71\xe0\x56\x06\x5c\xcd\x77\x5c\xef\x9d\x66\xfc\x64\xbb\xd0\xab\x75\x7b\x4f\xfc\xad\x3f\xea\x50\xde\x39\x4c\xca\xad\x83\x7a\xe5\xbc\x44\x68\x0f\x5e\x36\xbc\x6c\x84\xf6\xfa\xb6\xe4\x74\x1d\xda\xdb\x94\x02\x35\x5c\x7d\xc0\x83\xb6\xe7\x41\x07\x5c\xdb\x40\x85\xb0\x5e\x1d\xcb\x7a\x05\x2a\x04\x2a\x74\xac\x8b\x35\xa8\x50\x3f\xa9\x90\xb9\x42\x75\x7b\xf1\x71\x7b\xda\x2f\x09\xa3\xa7\x28\x2c\x78\x5c\xbb\x40\xb5\x3c\x84\xbb\xac\x23\x5b\xb9\x32\xf5\xd4\x2f\x3d\xdd\xcc\x79\x7a\xde\xd6\x79\xfa\x68\x94\xbf\x7a\x7c\xc5\x69\xf7\xda\x65\x10\x25\x81\x28\x09\x44\x49\x20\x4a\x02\x51\x12\x88\x92\x40\x94\x04\xa2\x24\x10\x25\x81\x28\x09\x44\x49\x20\x4a\xb2\x4f\x51\x12\x5c\x27\x0a\x51\x14\x88\xa2\x9c\x9d\x28\x4a\x2b\x18\x6f\x9d\x98\x86\x1d\x45\x0f\xe1\x25\xce\x2c\xae\xbb\x4f\xb0\x15\x94\x77\x55\x79\x45\xe4\xf9\xd9\x15\x54\x3b\x56\x95\xbb\x77\x59\x73\xd8\xbd\xb2\x01\x02\x77\x02\x81\xfd\x86\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\xa7\x0b\x00\x4f\x2d\x43\x09\x10\x12\x10\x12\x10\xb2\x77\x10\x32\x13\xe3\x88\xce\x1a\xe8\xdf\x59\x0c\xb9\x14\x2c\x8e\x49\x44\x66\x24\xb3\x69\x39\x08\x9c\x19\x28\xb3\xfa\x18\x44\xa3\x33\x09\x5d\x1d\x76\xf0\xbb\x66\x1e\xd0\x8d\x45\x7e\x5b\xff\xce\xed\xfd\x87\x3f\xdb\xbe\x38\x20\x89\x2b\x9f\xba\x29\x87\xfb\xbe\x6e\xf8\x9f\x5e\xad\x9e\x01\x35\x27\xd1\xcc\xe7\x53\x1f\xfe\xff\x79\x5a\x80\x68\xe7\x67\xc0\xaf\xaf\x6e\xef\x3f\x7c\xf6\x3a\xe5\xb0\xf3\xc0\x3d\x79\xab\x2b\x65\x37\x99\x0e\x36\x23\x3d\x0a\xc4\xf2\x14\x62\xb3\x27\xce\xec\xea\xed\x3c\x38\x17\x6f\xb8\xbd\xff\xf0\x60\x4a\x38\x79\xba\xbf\x76\xde\xe8\x9e\x5a\x34\x71\xaa\x0e\x02\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\x06\x90\xc6\x35\x79\x80\xb1\x80\xb1\xa7\x05\x63\x5b\x86\x44\x8f\xc5\x50\x5c\xf3\xf1\x58\x8f\x42\x2e\xeb\x12\x02\x35\xba\x63\x90\x91\x65\x0e\x5b\x11\xa3\x65\x89\x7c\x3b\x1d\xe4\x5d\x40\x9c\x66\xf2\xf4\xaa\xc4\x3e\x8f\x91\x50\xda\x9e\x54\x0b\x38\x94\x59\xe5\x18\x4f\x3a\x62\x4e\x2d\x00\x22\xd3\x84\xad\x10\x51\xdb\x5a\x39\xbb\x4d\x23\xc8\xe7\x40\x3e\xe7\xa4\xe5\xde\x76\x7f\x2d\xda\x51\x75\x6b\xf4\xfc\x36\x2e\x0d\x68\x50\x81\x46\x82\x34\xf2\xb0\x4b\xcb\x9a\x8b\xa0\xbc\x2b\x3e\xe4\xa8\xbf\xeb\x4c\x79\x07\x54\x7d\x9d\x79\x5b\xb6\x0e\x41\x09\x04\x25\x10\x94\x40\x50\x02\x41\x09\x04\x25\x10\x94\x40\x50\x02\x41\x09\x04\x25\x10\x94\x40\x50\x02\x41\x09\x04\x25\x10\x94\x40\x50\xe2\x08\xaf\x9a\xac\xd0\xcc\x41\x43\x11\x0d\xd9\xc8\xde\xa4\x82\xd7\x27\xf4\xae\x13\x13\x21\x0b\x54\x47\x0f\xbd\x05\x5e\xf6\x36\xa8\x36\x32\x6f\x97\xbd\xe3\xde\x05\xca\xe2\x1b\xf9\x96\x43\xfd\x2f\x1e\xe4\x03\xc6\xee\xf4\x7f\xdd\xe7\x53\x1e\x11\x15\x57\x2c\x88\x0b\x95\x8b\xac\xba\x73\xd7\x2a\x9a\xc7\xd1\xa3\x60\x97\xbf\xf0\xa9\x50\x29\x0f\xc4\xa5\x5e\xa6\x9c\x38\xcb\x80\xdd\xc7\x3c\x49\xec\xc2\x43\x2f\x3f\x8f\xcd\x35\xce\xaf\xfe\xe4\x4d\x11\x7a\x74\x1b\xc6\xab\x6c\x58\xc9\xdb\x86\xae\x89\xba\x36\xec\xce\xb4\x4a\x4f\xf0\x54\xb9\x16\x58\x17\x89\x24\xdc\xb5\x6f\x53\xdd\x9f\xfd\xb2\x5b\x63\xf4\x33\x8e\x97\xf1\x1f\xfa\x4e\xae\x26\x16\x6b\xd5\x15\x5c\x27\xf3\xba\xbb\x7b\xb6\x10\x48\x45\x20\x15\x81\x54\x04\x52\xbb\x36\xf2\xbb\xdc\x82\xb5\xbf\x30\x66\x9f\x73\x64\x96\xc4\x2e\x77\x33\xed\x6d\xec\x62\xde\x51\x85\x3e\x51\x17\x2b\xd8\xef\x83\xd9\xef\xa5\xe0\xc0\x67\x01\x51\xc2\x94\xd9\xc7\xb3\xa1\x18\x49\x83\xd7\x1c\x03\xab\x82\xd0\x16\x3b\x52\x6b\x3c\x03\x9d\xc8\xe4\x3a\xd1\x86\x22\x22\x98\x42\xcf\xf3\x0d\xb9\xe1\xe1\xe5\x68\xd9\xb7\x2b\x9a\x4e\x45\xa8\x97\x8a\xf8\xc5\xc6\x32\xfd\x48\x75\x12\xc5\x57\x76\xef\x4f\xe4\x89\x8d\x33\xed\x79\xa5\x22\x8b\x64\x58\xd2\x8e\xca\x09\xd3\xad\x2d\x3b\xae\x50\xba\x92\x3e\xb3\xe2\xfa\x97\xae\x41\xf6\x21\x23\xcf\xdd\x8e\xf4\x0f\xa8\x9e\xe6\x52\xa5\x05\x75\xac\x06\x81\xaa\x72\x4f\x35\x69\x91\x7e\xbc\xf3\x84\x25\xd3\x58\x70\x25\x4a\xe0\x7f\x9f\xc9\x94\x8f\x69\xa8\xee\x65\x1c\x05\x2f\x57\xa6\xb7\x0c\xe2\x76\xad\xae\x94\x29\xcd\xd6\xe0\x8f\x03\xe6\xed\xb6\x42\x91\x8a\x24\x14\x49\x5e\x85\x99\x04\x93\x59\x3a\xe1\x89\x6e\xbb\x1e\x80\xac\x10\x37\x23\x1e\xbb\x90\xef\xd7\x0b\xf3\xe7\xaf\x17\x6c\x14\x25\x3c\x8e\x7e\x77\x61\x9b\xa1\x60\x3c\x0c\x89\x05\xdf\x18\xae\x12\x56\x34\xd0\x14\x7f\xa9\xaa\x1f\x99\x30\xeb\x80\xdd\x45\xf4\x96\x78\x55\x97\xd9\x7c\xdb\x08\xf6\x9b\x8c\x07\x13\xe5\xa5\x77\x58\xe6\x13\x6f\x04\x4c\xc5\xde\xb9\x26\x6d\xd5\xff\xcb\x6d\x0b\xd5\x4e\xbf\xd2\x13\xf9\xcc\xc6\x3c\x1b\xf2\x71\x2d\x97\xa5\x7c\x2f\x45\x36\x92\xd9\x54\x77\xdb\xc2\x26\x7d\x9a\xa9\xdd\xf2\x16\xd1\x4b\xe2\x66\x78\x6a\x9a\x1f\xe9\xd9\x17\x44\x61\x15\x74\xa5\xe0\x99\xb9\xc9\xcb\x0d\x83\x22\xa5\x01\xfa\xab\x0b\x8f\x0d\xbc\xfe\x76\x81\x15\x87\xb5\xaa\xad\x73\xfd\x61\x03\x66\x32\x9c\xc8\x55\xf2\x8d\xd3\xa5\x69\xc3\x25\xbb\xb6\x73\xa4\x3e\x87\xd4\x1b\x76\xf9\x33\x0f\x1e\xf5\x32\x9c\x84\xfa\x5b\x3c\x8e\xe5\x33\x7d\x69\xa6\xe3\x4c\xe0\xd3\xbe\x4f\xf5\x42\x5c\x0b\x86\x65\x49\x6f\xd8\xe5\x7b\x99\x09\xaf\x58\x16\x70\x15\xf0\x50\xb7\xde\xf6\x0f\x19\x7b\x53\x9e\x32\xd6\x73\xae\xc0\x51\x59\x46\x0d\x06\xcd\x4c\xb4\x63\x81\x7a\xed\x64\x9e\x1d\x90\x21\x1e\x96\x1c\x6e\x76\x2f\xe9\x86\x5b\xf2\x13\xbf\x7f\x74\xad\x5b\xe8\x2e\x1f\xed\x6e\xc3\x8f\x5b\x46\x8f\xc9\x3b\x3c\xfb\xdd\x3d\x6e\x19\xc5\x2d\xa3\x1d\x33\x8f\x9d\xf4\xbd\x3b\x0c\xc6\xf9\xca\x7c\xb5\x95\xa3\x37\x5a\x7c\xbb\x85\x00\x6f\xcc\xdd\xe7\xab\x23\x81\xcb\xee\x47\xef\x2d\x48\x5a\x13\x13\x2c\x2f\x27\x3f\x85\x57\xf1\x98\x62\x4c\x27\x38\x91\xd6\x45\x9b\x0e\x75\xd1\x3d\x62\x4e\xf0\x4a\x8f\xdb\x2b\x45\xcc\xe9\x64\x63\x4e\x9b\x02\x8d\xad\xed\x3f\xd0\xc6\x6a\xb4\x71\xa8\xd5\x05\x80\x03\x4b\xc9\x11\x2d\x25\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x73\x80\xc3\x5c\xa2\xb8\x89\x74\xb1\x3d\x2f\x95\x84\xd1\x53\x14\x16\x3c\xae\x5d\x9d\x58\x1e\x63\xac\x7a\xaa\x95\x4b\x12\x4f\xff\x9a\xc3\xb5\x1e\xcd\xf3\x1a\x8f\xe6\xa3\x11\x14\xea\xf1\xb5\x86\x07\x97\x44\x82\x46\x03\x34\x1a\xa0\xd1\x00\x8d\x06\x68\x34\x40\xa3\x01\x1a\x0d\xd0\x68\x80\x46\x03\x34\x1a\xa0\xd1\x00\x8d\x86\x7d\x6a\x34\xe0\x16\x41\x68\x44\x40\x23\xe2\xec\x34\x22\x76\x41\x70\xeb\xc4\x06\xec\xa0\x79\xf8\x2d\x71\x56\x70\xfe\x26\xb1\x56\x30\xdc\x55\xe5\xf6\x90\x6b\x67\x97\x48\xed\x39\x55\xfe\xdc\x65\xcd\x23\xf7\xca\x06\xc4\x5b\x0b\xf1\xfa\x0d\xf0\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x4e\x06\xde\xf5\x3f\x17\x08\xc8\x10\xc8\x10\xc8\xf0\x44\x90\xe1\x50\xe4\xfc\xd5\xcd\x52\x3e\x38\x16\x79\xdd\x39\x30\xad\x5a\x73\x52\xa0\x51\xda\xfe\x91\x9c\x07\xa0\x8e\x99\xa7\x6f\x63\x91\xcf\xb1\x37\xfa\xea\xed\xfd\x87\xcf\x5e\xf7\x1c\x10\xc1\x79\x4f\xde\xea\x5a\xc1\xef\x9b\xce\x8e\x4d\x52\x3a\xcd\xd6\x28\xb3\x26\xdd\x2d\xe4\xf3\x0c\xf9\xdc\xf8\xed\x92\x69\xa4\xbb\x6b\xe9\x3c\xc2\x15\x50\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\x20\x94\xb8\x02\x0a\xac\x0e\xac\xee\x54\x59\x5d\x77\x67\xb3\x89\x3b\x0c\x66\x8e\x81\x36\xcd\xe6\xda\xd3\x49\x4c\xc3\x53\x96\x66\x74\x49\xb5\x80\x4d\x99\xf5\xae\x47\xea\xfb\x4b\xa0\x91\x69\xc7\xf6\xd8\xa8\x43\xb9\xab\xd9\xa9\x05\xa1\x12\x08\x95\x40\xf3\x6a\xf9\xbb\x71\x70\xe1\xab\x25\x95\x68\x43\x40\xbc\x69\x2d\x1a\x49\x84\xc8\x0e\x56\x9f\x35\xb7\xbf\x78\xc2\xff\x35\x75\x8b\x3e\x2e\x45\x4b\x6e\x83\xa1\x6f\xbf\x2d\xdb\x89\x58\x06\x62\x19\x88\x65\x20\x96\x81\x58\x06\x62\x19\x88\x65\x20\x96\x81\x58\x06\x62\x19\x88\x65\x20\x96\x81\x58\x06\x62\x19\x88\x65\x20\x96\x71\x84\x57\xd1\x55\x90\xe6\xf0\xc1\x8b\x86\x80\xe4\xc0\x7a\xaf\x73\xb9\xc1\xeb\xb4\x26\xc8\x16\xe5\x7d\xbc\x7b\x64\x09\x04\x5b\x78\x93\x4d\x83\x24\xde\x65\xef\xbd\x77\xe9\xaa\xf8\x46\xfe\xe6\x50\xff\x8b\x07\xf9\x80\xb1\x3b\xfd\x5f\xf7\xf9\x94\x47\xc4\xd1\x15\x0b\xe2\x42\xe5\x22\xab\xee\xe9\xb4\x6a\xd3\x71\xf4\x28\xd8\xe5\x2f\x7c\x2a\x54\xca\x03\x71\xa9\x97\x2e\xa7\xe9\x31\x60\xf7\x31\x4f\x12\xbb\x18\x91\x41\xe0\xb1\xb9\xfa\xf5\xd5\x9f\xbc\x19\x43\x8f\x6e\xc3\xa0\x95\x0d\x2b\x19\xdc\xd0\x35\x51\xd7\x86\xdd\x99\x56\xe9\xf9\x9e\x2a\xd7\x02\xeb\x36\x91\xbc\xb6\xf6\x77\xaa\x3b\x77\x5f\x76\x6b\x8c\x7e\xc6\x91\x47\x05\x8e\xef\x0e\xa2\x35\xa6\x6c\xd5\x45\x44\xa7\x65\x02\x16\xdf\x41\x84\x98\x2c\x62\xb2\x88\xc9\x22\x26\x7b\x1c\x4b\xc0\x7e\x6e\x24\x6a\x14\x0c\xed\x7d\x32\xce\xaa\x08\xe8\x6e\x86\xbf\x8d\xbd\xd0\x3b\xaa\xd5\x27\xea\x6c\x05\xc3\x7e\x30\xc3\xbe\x14\x3f\xf8\x44\x21\x4a\x98\x32\x34\x80\x0d\xc5\x48\x1a\x48\xe7\x48\x5a\x15\xca\xb6\xf0\x92\x5a\xe3\x59\xee\x44\x26\xd7\x89\x36\x1e\x11\x21\x19\x7a\x9e\x6f\xe1\x0d\x55\x2f\x47\xcb\xbe\x67\xd1\x74\x2a\x42\xbd\x86\xc4\x2f\x36\x22\xea\xc7\xbb\x93\x28\xbe\xb2\x04\xc1\xdc\xe2\x3f\xce\xb4\x87\x96\x8a\x2c\x92\x61\xc9\x4c\x2a\x67\x4d\xb7\xb6\xec\xb8\x42\xe9\x4a\xfa\xe4\x8b\xeb\x5f\xba\x06\xd9\x87\x8c\x3c\x07\x3d\xd2\x3f\xa0\x7a\x9a\x2b\x72\x16\xd4\xb1\x1a\x04\xaa\xca\x3d\xd5\xa4\x45\x86\xf2\xce\x53\x30\x4c\x63\xc1\x95\x28\xc3\x06\xf7\xb3\xf7\xf9\x5f\x99\xde\x32\xa0\xdc\xb5\xba\x92\x40\x34\x9b\x89\x3f\x0e\x98\xb7\x3f\x0b\x45\x2a\x92\x50\x24\x79\x15\xac\x12\x4c\x66\xe9\x84\x27\xba\xed\x7a\x00\xb2\x42\xdc\x8c\x78\xec\x02\xc7\x5f\x2f\xcc\x9f\xbf\x5e\xb0\x51\x94\xf0\x38\xfa\xdd\x05\x7f\x86\x82\xf1\x30\x24\xa2\x7c\x63\xe8\x4c\x58\x31\x45\x53\xfc\xa5\xaa\x7e\x64\x82\xb5\x03\x76\x17\xd1\x5b\xe2\x55\x5d\x66\xf3\x6d\xa3\x90\x81\xc9\x9b\x30\xb1\x62\x7a\x87\x65\x3e\xf1\x46\xc0\x54\xec\x9d\x6b\xd2\x56\xfd\xbf\xdc\xb6\x50\xed\xf4\x2b\x3d\x91\xcf\x6c\xcc\xb3\x21\x1f\xd7\x72\x63\xca\xf7\x52\x64\x23\x99\x4d\x75\xb7\x2d\x6c\xd2\xa7\x99\xda\x2d\x6f\x11\xbd\x24\x6e\x86\xa7\xa6\xf9\x91\x9e\x7d\x41\x14\x56\xa1\x5b\x0a\xc1\x99\x7b\x99\xdc\x30\x28\x91\xbb\x00\x95\x0b\xb2\x0d\xbc\xfe\x76\xe1\x19\x07\xc7\xaa\xcd\x76\xfd\x61\x03\x66\x72\xa7\xc8\x87\xf2\x8d\xd3\xa5\x69\xc3\x25\xbb\xb6\x73\xa4\x3e\x87\xd4\x1b\x76\xf9\x33\x0f\x1e\xf5\xaa\x9c\x84\xfa\x5b\x3c\x8e\xe5\x33\x7d\x69\xa6\xe3\x4c\xf8\xd4\xbe\x4f\xf5\x42\x5c\x0b\x86\x65\x49\x6f\xd8\xe5\x7b\x99\x09\xaf\x58\x16\x70\x15\xf0\x50\xb7\xde\xf6\x0f\x19\x7b\x53\x9e\x32\xd6\x73\xae\xc0\x51\x59\x46\x8d\x26\xcd\x4c\xb4\x63\x41\x83\xed\xe4\xb4\x1d\x90\x44\x76\xc0\x1f\x37\xbb\x48\x72\xc3\xfd\xfb\x79\x5d\x1f\xb9\xc4\x4b\x5c\x7c\x87\xe4\xc1\xe9\x00\xae\x90\x3c\x26\x67\xf1\xec\x29\x00\xae\x90\xc4\x15\x92\xc7\x80\x45\xf6\x24\x38\xbd\xdf\x30\x5f\xff\x05\xe4\x1a\x04\x17\x6f\xcc\x2d\xd6\xab\x63\x8c\x5b\xdf\x74\xdd\x0b\xe0\xb4\x49\xb4\xb1\xbc\x92\xfa\x64\xde\xd1\xa3\x8b\x5e\x9d\xea\xe4\xda\x28\x8e\x75\xa8\x2b\xcf\x11\xcd\x82\x1f\xdb\x03\x3f\x16\xd1\xac\x73\x89\x66\x6d\xca\x46\xb6\x5e\x1d\x40\x49\x36\xa5\x24\x87\x5a\x7b\xc0\x4a\xb0\xc6\x1c\xd1\x1a\x03\x56\x02\x56\x72\x0c\x8b\x2e\x58\xc9\x71\xb3\x92\xb9\xab\xff\xd6\xdc\xf9\xa7\x97\x9f\xa7\x28\x2c\x78\x5c\xbb\xfe\xaf\x3c\x75\xd9\xf2\xb5\x7f\x67\x77\x71\xdf\x12\x57\x67\xf1\xed\x7d\x33\xae\xce\x47\xa3\x9d\xd4\xe3\x6b\xfc\xba\x51\x7f\x82\xc2\x04\x14\x26\xa0\x30\x01\x85\x09\x28\x4c\x40\x61\x02\x0a\x13\x50\x98\x80\xc2\x04\x14\x26\xa0\x30\x01\x85\x89\x7d\x2a\x4c\xe0\x66\x3d\x28\x5c\x40\xe1\xe2\xec\x14\x2e\x76\xc6\x72\xeb\x54\x12\xec\xc8\x79\x48\x2e\x71\xa6\x70\xfe\x36\xb5\x56\xd0\xdc\x55\xe5\xfb\x90\x7f\x67\xd7\x49\xed\x3e\x55\x4e\xdd\x65\xcd\x2d\xf7\xca\x06\xd8\xdb\x02\xec\xf5\x1b\xea\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x9d\x16\xd0\xeb\x7f\xce\x10\x30\x22\x30\x22\x30\x62\xdf\x30\x62\xaa\x6e\x96\x42\xc1\x31\x09\x91\x8c\x64\x36\x2d\xbb\x9c\x33\x03\x5a\x56\x1f\x27\x68\x94\xdb\xdf\xd1\xa1\x01\xf3\xff\x75\xba\x36\x16\xf9\x6d\x9a\xaa\xdb\xfb\x0f\x7f\xb6\xad\x3e\x20\x47\x2b\x9f\xba\x29\x45\xfb\x5e\x1f\xd6\xa7\x57\xab\x47\xb6\xe6\xdc\x99\x59\x79\x92\xc3\xfa\x3f\x4f\x0b\xb8\xa9\x1d\xd9\x5f\x5f\xdd\xde\x7f\xf8\xec\x35\xff\xb0\xe3\xeb\x9e\xbc\xd5\xd5\x97\xf3\xc3\xac\xfd\xbe\x4c\x6a\xaf\x2b\x13\x4f\x91\x22\x11\xb6\x65\x23\x6f\xf6\xaa\x99\x5d\x63\x9d\x67\xe5\x18\xff\xdb\xb2\xa4\xcf\xb6\xa4\x53\xe7\xec\x4b\xe6\x87\xee\x26\x33\x41\xe6\xbb\xe4\xbd\xcc\x6e\xe3\xb8\x14\x33\xde\xc7\xb4\x19\xe8\x8a\xe9\x49\x32\xff\xf4\xce\xae\x49\x4d\x55\x45\xcc\x17\xce\x13\x9f\xb0\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x03\xa4\x23\x33\x16\x48\x1b\x48\x1b\x48\x7b\xcf\x48\xfb\xe9\xd5\x4d\xc8\xc5\x54\xbb\x64\xf9\xae\x2c\xec\x1d\x15\xf0\x40\x4a\x70\xe7\x8d\xc0\xca\x9e\x38\x24\xf9\x2a\x1f\x7a\x14\xc0\xcb\x9f\x0c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\xe0\x5c\x07\xe6\x5c\x22\x8d\xe5\xcb\x94\x6e\xca\xdb\x11\x74\x95\x25\x80\x74\x95\x5d\x71\x50\xd4\x55\x3e\xf5\x38\x58\x97\x3f\x1f\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x0e\x0b\xbb\x92\x92\xc7\x18\x41\x43\xfa\xf7\x77\x1c\x80\xdc\x27\x13\x2b\x19\x58\xb8\xb0\x73\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xc0\x83\xf6\xca\x83\xc0\x63\xc0\x63\xc0\x63\x0e\xce\x63\x20\x74\xb4\x44\xe8\x48\xaa\x05\xa4\xc9\xac\x61\x8c\x77\x0c\x95\x76\x25\x40\xa6\xfa\xbb\x30\xa0\x3d\xdc\x8d\xbf\x62\x9e\xe0\x5a\x7c\x5c\x8b\x7f\xa8\x6b\xf1\x37\xba\x7d\xfe\xb0\x66\x92\x0c\xd0\x1f\x16\x99\xc8\xb7\xc6\x87\x6e\xf7\x39\x7f\x98\x7f\xce\x6d\x10\x88\xb4\xe5\x07\x35\xba\x34\x5e\x1e\xc2\xe6\x9b\xbd\xc8\x7c\x25\xcd\xe7\x2c\xd0\x05\x04\xce\xe3\xe8\xe7\x0a\x60\x9a\xe2\x64\x10\x5d\x7b\x10\x0f\x40\x3c\x00\xf1\x00\xc4\x03\x10\x0f\x40\x3c\x00\xf1\x00\xc4\x03\x10\x0f\x40\x3c\x00\xf1\x00\xc4\x03\x10\x0f\x40\x3c\x00\xf1\x00\xc4\x03\xf6\x75\x5f\xc6\x43\xce\xf3\x42\x35\xa6\x43\x66\xcd\xa8\xf0\xcc\xf1\x5f\x83\x60\x6d\xb0\x61\xaa\x7a\xcf\x59\xe4\x13\xa6\x02\x99\x8a\x2b\xa6\x8a\x80\xde\x32\x9a\xf7\x82\x4f\xcd\x84\x48\x33\x49\x36\xbf\x7e\x7d\x18\x41\x9b\xe3\xbe\x43\xac\x49\xc6\xef\xba\x2b\xce\xc9\x46\xd6\xe1\x48\x3f\xb1\x9c\x6e\x48\xbb\xa9\xb9\xcb\x2c\xd1\x83\xf1\xba\xc9\x73\xff\x46\x1e\xf0\x50\xff\x8b\x07\xf9\x80\xb1\x3b\xfd\x5f\xf7\xf9\x94\x47\x44\xdb\x15\x0b\xe2\x42\xe5\x22\xbb\xb6\xbd\x1c\xd8\x3d\x27\x8b\xa3\x47\xc1\x2e\xcb\x1a\x5f\xea\xc5\xd4\x5d\x22\x3f\x60\xf7\x31\x4f\x12\xbb\x3c\x92\x89\xe2\xb1\x5e\x8f\x5e\x0d\x5e\xfd\xc9\x9b\x33\xf4\xe8\x36\x4c\x6c\xd9\xb0\x92\x0a\x0e\x5d\x13\x75\x6d\xd8\x9d\x69\x95\x9e\xf1\xa9\x72\x2d\xb0\x8e\x5c\xa1\xb4\x7f\xc6\x13\xe3\x50\x1b\xc3\xb9\x5b\x63\xf4\x33\xba\x8f\x1d\x34\x31\xa6\x63\x71\x88\xe8\x6a\xb1\xf0\x6d\x4e\x63\x1e\x88\x13\x79\xa1\xa9\x2d\x08\xb5\x22\xd4\x8a\x50\x2b\x42\xad\x2d\x44\x40\x8b\xee\x03\xa0\x7d\x4d\x7b\xf1\x83\x9e\x6d\xd9\xe2\x36\xb6\x3f\xef\xa8\x5e\x9f\xa8\x97\x15\x0c\xf1\xc1\x0c\xf1\x52\xe2\xe0\x43\x84\x28\x61\xca\x00\x00\x36\x14\x23\x69\xb8\x9c\x83\x67\x55\xf4\xda\xf2\x4a\x6a\x8d\x67\x69\x13\x99\x5c\x27\x62\xcc\xa9\xcf\xec\xf3\x7c\x8b\x6c\x40\x7a\x39\x5a\xf6\x05\x8b\xa6\x53\x11\x6a\x9b\x1f\xbf\xd8\x20\xa8\x1f\xe2\x4e\xa2\xf8\xca\x42\x03\x42\x56\x6c\x9c\x69\x77\x29\x15\x59\x24\xc3\x12\x93\x54\x9e\x93\x6e\x6d\xd9\x71\x85\xd2\x95\xf4\x61\x17\xd7\xbf\x74\x0d\xb2\x0f\x19\x79\x1e\x70\xa4\x7f\x40\xf5\x9c\x0a\x9e\x2c\xac\x63\x35\x08\x54\x95\x7b\xaa\x49\x8b\xd8\xa4\xf2\xc0\x5f\xb3\x34\x16\x5c\x89\x32\x52\x70\x9f\xc9\x94\x8f\x69\xa8\xee\x65\x1c\x05\x2f\x57\xa6\xb7\x0c\x1b\x77\xad\x0e\xcb\x02\x8c\xb7\xfe\xc7\x01\xf3\x36\x40\xa1\x48\x45\x12\x8a\x24\xaf\xe2\x53\x82\xc9\x2c\x9d\xf0\x44\xb7\x5d\x0f\x40\x56\x88\x9b\x11\x8f\x5d\xac\xf8\xeb\x85\xf9\xf3\xd7\x0b\x36\x8a\x12\x1e\x47\xbf\xbb\x78\xcf\x50\x30\x1e\x86\x04\x91\x6f\x0c\x90\x09\x2b\x8c\x68\x8a\xbf\x54\xd5\x8f\x4c\x7c\x76\xc0\xee\x22\x7a\x4b\xbc\xaa\xcb\x6c\xbe\x6d\x14\x25\x30\xa9\x12\x26\x3c\x4c\xef\xb0\xcc\x27\xde\x08\x98\x8a\xbd\x73\x4d\xda\xaa\xff\x97\xdb\x16\xaa\x9d\x7e\xa5\x27\xf2\x99\x8d\x79\x36\xe4\xe3\x5a\x22\x4c\xf9\x5e\x8a\x6c\x24\xb3\xa9\xee\xb6\x85\x4d\xfa\x34\x53\xbb\xe5\x2d\xa2\x97\xc4\xcd\xf0\xd4\x34\x3f\xd2\xb3\x2f\x88\xc2\x2a\x5a\x4b\x51\x37\x8a\x9f\x97\xc3\xa0\xe8\x6a\x63\xfa\xab\x8b\xab\x0d\xbc\xfe\x76\x11\x19\xc7\xc3\xaa\xdd\x6c\xfd\x61\x03\x66\x92\x9f\xc8\xe7\xf1\x8d\xd3\xa5\x69\xc3\x25\xbb\xb6\x73\xa4\x3e\x87\xd4\x1b\x76\xf9\x33\x0f\x1e\xf5\xfa\x9b\x84\xfa\x5b\x3c\x8e\xe5\x33\x7d\x69\xa6\xe3\x4c\xc4\xd4\xbe\x4f\xf5\x42\x5c\x0b\x86\x65\x49\x6f\xd8\xe5\x7b\x99\x09\xaf\x58\x16\x70\x15\xf0\x50\xb7\xde\xf6\x0f\x19\x7b\x53\x9e\x32\xd6\x73\xae\xc0\x51\x59\x46\x0d\xd8\xcc\x4c\xb4\x63\xa1\x81\xad\x25\xa5\x1d\x0a\x3e\x1e\x02\x39\xe6\xc1\x64\xbe\x96\x14\xe0\xa0\x7c\x1e\x83\x84\xb7\xdd\x3d\xcf\x7a\x67\xd7\xf4\x9c\x7f\x5d\xe0\xa8\x4d\x45\x36\x16\xcb\xff\xac\xf2\x8c\xe7\x62\x1c\x05\xd7\x73\x5f\x3c\x3a\x87\x90\xea\x76\x24\x7b\xf3\x15\x33\xf4\x9e\x86\x1c\x7e\x21\x36\xe8\x07\xda\xa0\xcf\xa4\x17\xb8\x39\x6d\x52\x60\x52\x13\x6e\x34\x71\x74\xf6\x83\xff\x7e\xd2\xdf\xcc\x1b\xff\x23\xad\xe6\x26\xc9\x93\xc7\xf4\x4b\xed\x0b\x9b\x5f\xd3\x37\xc8\x2f\x55\xec\x87\xff\x54\x32\xa1\x19\x7e\xc5\xfe\xaa\x2d\x86\xfd\xf7\x83\xb3\x23\xd5\x87\x3f\x6e\x46\x0e\x76\x72\x31\xdf\xcb\x2c\x20\xef\x7a\x2c\x69\x84\x24\xfb\x7a\x31\xd2\x9f\x7d\xbd\x60\xb7\xb5\x26\x0f\xd8\x87\xdc\xba\xc2\xc4\x8b\xed\x8c\xbf\xe6\x01\xf5\x12\x65\x4c\xc6\x51\x60\xbd\x12\xc2\xcb\xf2\xd9\x0e\x80\xc9\x28\x4c\x85\x4c\x63\x31\x60\xe6\x99\xa3\x98\x8f\xcb\x81\xa7\xa0\xf1\xc2\xde\x2a\x1f\xef\xf5\x81\xfe\x7d\xf7\xd8\xa4\x11\xce\xb0\xb1\xc7\x23\x8f\xd3\xd1\x8b\x6e\xed\xd3\xc2\x27\x7a\xb1\xb8\xf6\xc3\x70\x88\x12\xce\x47\x09\x71\x07\xdc\x1e\x54\x80\xfc\x3e\x41\xb2\x3f\x92\xfd\x91\xec\x8f\x64\x7f\x24\xfb\x23\xd9\x1f\xc9\xfe\x48\xf6\x47\xb2\x3f\x92\xfd\x91\xec\x8f\x64\x7f\x24\xfb\x23\xd9\x1f\xc9\xfe\x48\xf6\x3f\xc1\xbb\xde\x57\x4b\xfd\x74\x02\x8c\xda\x55\xf8\x59\xc1\x77\xf6\x99\x6d\x5a\x3d\x16\x31\x2c\xc4\xb0\xce\x25\xc9\xb4\x36\xeb\xdb\xcf\x2d\x9d\x2d\xbe\x6d\xf5\x9e\x7a\xf9\x5d\x8a\xf6\xac\x34\xda\x5b\x69\xf5\xf4\xca\x84\xaf\x93\xe8\x01\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x07\xac\x3f\xbe\xc3\x31\xed\x28\xf3\xac\x66\xf8\x10\xe4\xd9\x63\xaa\xed\x0e\x3a\x3c\xbd\x42\x6e\x8b\xe4\x77\x76\xc2\x6c\x50\xdd\x39\x07\xd5\x9d\xf6\x10\x79\x43\xb1\x9d\xd5\x26\x71\x73\x8d\x9d\x9e\xbd\xac\x0b\xa5\x75\x10\xe3\x44\x8c\x13\x31\xce\x53\x8c\x71\x76\x28\x9b\xd3\x24\x04\xd9\xb3\xcc\x91\xc5\x22\x39\x3b\x59\x55\x68\xe3\xf4\xd7\xb6\x42\x1b\x07\xda\x38\xd0\xc6\x81\x36\x0e\xb4\x71\xa0\x8d\x73\x04\xda\x38\x6b\xa0\xdf\x2e\x92\x38\xcb\xbc\x32\x28\xe1\x74\xb3\x95\x86\x00\xce\xd1\x38\x7f\x67\xbf\xb1\x86\x00\x0e\x04\x70\xf6\xcb\x23\x9a\xea\xde\xec\x35\x0a\xe6\xcb\xdd\xf8\x0f\x82\xca\x4d\xd7\xa1\xb7\x1b\x65\x3c\xb2\x95\x11\x38\xf3\x1d\x37\x80\xbd\xc5\xfb\x2b\x62\x71\xd6\x2f\xed\xc5\xab\xde\x59\x6c\xe7\x44\xa6\xc1\xea\x28\x4f\x39\x13\x10\xeb\x81\x4b\x7a\xca\x2e\x29\x62\x3d\xc7\x10\xeb\xd9\x14\x35\x6c\x6b\x7b\x01\x1d\xba\xb4\xec\x40\x0f\xb0\xf3\xc7\x62\xe7\x81\x1e\x80\x1e\x80\x1e\x80\x1e\x3a\x47\x0f\x22\x8d\xe5\xcb\x94\xc2\xa4\x3b\x2a\xec\x96\x25\x40\x62\xb7\x72\x6f\xfc\x4e\xc1\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xc7\xb1\x7d\x1c\xdb\xdf\x94\x0d\x96\x4c\xe1\x38\x44\x76\x7d\xc4\xb1\xb5\xca\x6e\x27\xd0\xa8\x65\x99\xdd\x15\x8c\x67\xaf\x79\x09\xd5\x73\x11\xb0\x42\xc0\xea\x6c\x12\x13\x6a\xd3\x7e\x0f\x99\x09\xb3\xe5\xb7\x2e\xb5\x5b\x7f\x40\xa7\x5a\xbb\x2b\x6d\xf7\x76\x62\xbb\xbd\xb2\xe4\x6b\xd5\x76\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\xc1\xed\x8f\x4f\x6f\xa3\x25\xb9\xdd\xd5\x34\x1f\x7a\xbb\xfb\xcc\xbc\xdd\x45\x70\xb7\x57\xd8\x6d\xe1\x29\xdf\x9d\x50\x1b\x24\x77\xcf\x42\x72\xb7\x3d\x54\xde\xf4\x5c\xf6\x6a\xbb\xb8\x85\xe8\x6e\xcf\x5e\xd8\xc5\xe7\xb1\x11\xf2\x44\xc8\x13\x21\xcf\x13\x0d\x79\x76\x79\x1a\xbb\x49\x40\xb2\x6f\xe9\x24\x4b\xb4\x77\x77\xb2\xad\x10\xdf\xed\xaf\x81\x85\xf8\x2e\xc4\x77\x73\x88\xef\x42\x7c\x17\xe2\xbb\x10\xdf\x3d\x02\xf1\xdd\x35\x08\x70\x27\xf5\xdd\x65\x8e\x19\x94\x70\x3a\xda\x53\x43\x04\xe7\x68\xfc\xbf\xb3\xdf\x60\x43\x04\x07\x22\x38\x7b\xc6\x12\x8d\x55\x70\xf6\x1a\x17\xab\xc9\xe0\xf8\x4f\x82\x0e\x4e\xe7\xd1\xb8\x1b\x15\xf0\x58\xac\x91\xe0\xd5\x5f\x59\x20\xff\xd7\x2b\x1c\xb5\x3a\x38\xf7\x40\xbd\xb0\x8f\xb7\xbd\xc8\xa5\xee\xbf\x28\x19\x93\x1b\x4c\xcf\x39\x7c\xb4\xa7\xaa\x45\xf5\xd2\xbb\x36\x6f\x29\xc4\x7b\x1a\x93\x61\x4d\xe0\xc7\xf5\xcd\x21\xa2\x3f\x4b\x66\x08\xdc\x53\xb8\xa7\xa7\x1d\xff\x59\x66\x1a\xdb\x8b\x00\xed\xc3\xf8\x6e\x1f\x03\xda\xce\xf8\x6e\x2a\xca\xbb\xa5\x1d\x06\x8a\xe8\xd2\xca\x83\x47\xc0\xe0\x1f\x8b\xc1\x07\x8f\x00\x8f\xd8\xfb\x22\xb9\x03\x91\xd8\x72\x99\x6c\x8f\x49\xb8\x87\x00\x47\x1c\x01\x8e\x68\x72\x25\x50\xcf\xf6\xa0\x2b\x81\xc4\xfe\x2f\x05\x3a\x85\xec\xd3\x53\x99\x0a\xeb\x70\x44\x17\x17\x03\x21\x1b\x15\xce\xe9\x19\xd1\x08\x64\xa3\xb6\x7b\x39\x10\x40\xc4\x16\x20\x02\xd7\x03\xc1\xd8\x9f\x9f\xb1\x07\x89\x00\x89\x40\x66\x04\x32\x23\x8e\x00\x45\xe8\x2d\x58\x14\x70\x25\x76\xbe\x21\xe8\xb3\x29\xe1\xc0\x57\xd1\x1e\xf9\x0d\x41\xb5\x4e\x81\xd2\x20\x94\x06\xa1\x34\x08\xa5\x41\x28\x0d\x42\x69\x10\x4a\x83\x50\x1a\x84\xd2\x20\x94\x06\xa1\x34\x08\xa5\x41\x28\x0d\x42\x69\x10\x4a\x83\x50\x1a\xdc\x10\x0f\x56\x4c\xe1\x28\x6e\x08\xaa\x21\x8e\x6d\x6f\x08\xea\x06\x1a\xb5\x7b\x43\xd0\x2a\xc6\xb3\xcf\x04\x05\xef\xb9\x88\x59\x21\x66\x75\x2e\x09\x0a\xf5\x69\xdf\x7e\x82\xc2\x5c\xf9\x6d\xdf\x10\x34\xf3\x80\x2e\x6f\x08\x5a\x6d\xbb\xb7\xba\x21\xa8\x5f\x96\x7c\xdd\x0d\x41\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\xe0\xf6\x47\x28\x0a\xda\xce\x0d\x41\x6b\x68\x3e\x6e\x08\xda\x67\xe6\xed\x0e\x37\x04\xf5\x0b\xbb\x2d\x3a\xf3\xbb\x1b\x6a\xc3\x0d\x41\xe7\x70\x43\x50\x8b\xa8\xbc\xe1\x19\xed\x35\x76\x71\xf3\x1b\x82\xfa\xf6\xc2\x2e\x3c\x99\x8d\x90\x27\x42\x9e\x08\x79\x9e\x6a\xc8\xb3\xc3\x33\xd9\x8d\x02\x92\x7d\x4b\x27\x59\x7c\x43\xd0\x6e\xb6\x15\x37\x04\xf5\xd7\xc0\xe2\x86\x20\xdc\x10\x94\xe3\x86\x20\xdc\x10\x84\x1b\x82\x70\x43\x50\xf7\x37\x04\xad\x43\x80\xbb\xdc\x10\xb4\xd4\x31\x83\x1a\x4e\x47\x7b\x6a\xe8\xe0\x1c\x8d\xff\x77\xf6\x1b\x6c\xe8\xe0\x40\x07\x67\xcf\x58\xa2\xa9\x0e\xce\x7e\xe3\x62\xbe\x0e\x4e\xed\x49\xd0\xc1\xe9\x3c\x1a\xd7\xe0\x86\xa0\x7e\xe1\xa8\xd5\xc1\x39\xdc\x10\xb4\x69\xbc\xe7\x44\x26\xc3\x9a\xc0\x0f\x6e\x08\x82\x7b\x7a\x26\xee\x29\x6e\x08\xda\x77\x0c\xe8\x90\x37\x04\x01\x45\x6c\x81\x22\x70\x43\x10\x0c\xfe\xf9\x19\x7c\xf0\x08\xf0\x08\xdc\x10\x84\x1b\x82\x8e\x13\x47\x34\xb8\x21\xa8\x6f\x7b\xd0\x95\x40\x62\xef\x37\x04\x9d\x44\xf6\xe9\xa9\x4c\x85\x75\x38\xa2\x83\x1b\x82\x90\x8d\x0a\xe7\xf4\x9c\x68\x04\xb2\x51\x5b\xbd\x21\x08\x20\x62\x1b\x10\x81\x1b\x82\x60\xec\xcf\xcf\xd8\x83\x44\x80\x44\x20\x33\x02\x99\x11\x47\x80\x22\xb4\x1b\x23\x46\x45\xdc\xe0\x8a\xa0\x07\x5b\x04\xee\x08\xf2\x9d\x9c\x7a\xaf\x40\x6c\x10\x62\x83\x10\x1b\x84\xd8\x20\xc4\x06\x21\x36\x08\xb1\x41\x88\x0d\x42\x6c\x10\x62\x83\x10\x1b\x84\xd8\x20\xc4\x06\x21\x36\x08\xb1\x41\x88\x0d\x6e\x48\x08\x3d\xa8\x70\x14\xb7\x04\xd5\x21\xc7\xb6\xd7\x04\x75\x04\x8e\xda\xbd\x27\x68\x25\xe7\xd9\x67\x9e\x82\xff\x60\xc4\xae\x10\xbb\x3a\x97\x44\x85\x99\x79\xdf\x7e\xa6\xc2\xfc\x03\xda\xbe\x2b\x68\xf6\x09\x5d\x5e\x16\xb4\xc6\x84\x6f\x75\x5b\x50\xcf\x0c\xfa\xba\xeb\x82\x80\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x81\xf0\x8f\x51\x22\xb4\x9d\xfb\x82\xd6\x71\x7d\x5c\x18\xb4\xd7\x44\xdc\x1d\x6e\x0c\xea\x19\x7a\x5b\x74\x08\x78\x47\xdc\x86\x3b\x83\xce\xe1\xce\xa0\x36\x91\x79\xc3\x63\xdb\xeb\x8c\xe3\xe6\xb7\x06\xf5\xee\xa5\x5d\x78\x5c\x1b\x11\x50\x44\x40\x11\x01\x3d\xe5\x08\x68\x87\x87\xb5\x9b\x85\x27\x7b\x97\x63\xb2\xf8\xf2\xa0\x1d\x2d\x2c\x6e\x0f\xea\xaf\x95\xc5\xed\x41\xb8\x3d\x28\xc7\xed\x41\xb8\x3d\x08\xb7\x07\xe1\xf6\xa0\xee\x6f\x0f\x5a\x0b\x04\x77\xb9\x3e\x68\xb9\x6f\x06\xad\x9c\xae\x36\xd7\x90\xc9\x39\x1a\x17\xf0\xec\x37\xda\x90\xc9\x81\x4c\xce\xbe\xe9\x44\x53\x9d\x9c\x3d\x47\xca\x6a\x72\xbd\xb5\x47\x41\x29\xa7\xfb\x00\x5d\x83\x4b\x84\x7a\xc6\xa5\xd6\xc4\xeb\x70\x8d\xd0\xa6\x01\xa0\x53\x99\x0e\xeb\x22\x41\xb8\x48\x08\x6e\xea\x99\xb8\xa9\xb8\x48\x68\xdf\x11\xa1\x43\x5e\x24\x04\x28\xb1\x15\x94\xc0\x55\x42\x30\xf9\xe7\x67\xf2\x41\x26\x40\x26\x70\x95\x10\xae\x12\x3a\x52\x2a\xd1\xe0\x2e\xa1\xde\x6d\x44\x57\x73\x89\xbd\xdf\x26\x74\x22\x79\xa9\x27\x33\x1d\xd6\x72\x89\x0e\x6e\x14\x42\x9e\x2a\x9c\xd4\xb3\xe2\x12\xc8\x53\x6d\xfb\x56\x21\x50\x89\xed\xa8\x04\xee\x15\x82\xc5\x3f\x3f\x8b\x0f\x2c\x01\x2c\x81\x84\x09\x24\x4c\x1c\x18\x4d\x78\xd7\x19\xef\x78\x85\x50\x37\xd7\xd6\x1e\xe5\x0d\x42\x55\x57\xbc\x97\xd9\x6d\x1c\x97\xfe\xcd\x81\x2e\x45\x3e\x0a\x5d\xe1\xfd\xde\x3e\x06\x25\x46\x28\x31\x42\x89\x11\x4a\x8c\x50\x62\x84\x12\x23\x94\x18\xa1\xc4\x08\x25\x46\x28\x31\x42\x89\x11\x4a\x8c\x07\xdb\x42\x43\x09\x12\x4a\x90\x50\x82\xec\x85\x12\xe4\x1c\xec\xc2\x85\xd9\xad\xe2\x2e\xaf\x2f\x0e\xc9\xbb\xfa\x76\x91\x16\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\x17\x88\xd7\x3e\x89\x17\x7d\xeb\x46\x5b\xf2\x4c\x6a\x3b\xaa\xf7\x37\x8a\xe4\x80\x97\xe1\x2f\xbb\x08\x26\x61\xf4\x14\x85\x05\x8f\xfd\x36\xf3\xd2\x37\x7d\x5b\x96\xf8\xd9\x96\x38\xf0\xc4\x50\x5f\x97\x2e\xc9\x25\x15\x77\x59\x6d\xfb\x6b\xfb\xb8\x12\x2c\xb1\x28\x51\xb9\xe0\x64\x8a\xce\x91\xa9\x3d\x57\x39\xf1\xf3\x3d\xfb\x31\x52\x87\xe0\x6b\x2b\x92\xe1\xe9\x05\xb8\xd3\xae\x6a\x63\xd8\x46\x2d\x6d\x4a\xdc\xe6\xfb\x08\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\x0d\xe0\xad\x23\xf0\x16\x72\x31\xd5\x8e\xd9\x8a\x74\xb3\xcd\x78\xdb\x3b\x2a\xe8\x41\xe4\xc0\x6c\xed\x60\xb6\xb2\x43\x41\xd7\x66\xe9\x5a\xd9\x35\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x80\x6a\x5d\x41\x35\x91\xc6\xf2\x65\x4a\x97\x50\x37\xa4\x6a\x65\x49\xc0\x6a\x2d\x61\xb5\xb2\x47\xc1\xd5\xe6\xb8\x5a\xd9\x37\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x1d\x81\xb5\x25\xd7\x14\xe2\xf4\x68\x7f\xf8\x5b\x75\xa3\xd2\xe2\x73\xa4\xe7\x4d\xe0\x70\x6e\x14\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\x0e\x24\xee\x08\x48\xdc\x19\x5d\x42\x08\x50\x08\x50\x08\x50\x78\x1e\xa0\xd0\xfc\xfd\xfb\x1a\x5e\xe8\x43\xc2\xc4\x59\x6c\x77\xe3\xc2\x9e\x60\xe1\x55\xe5\xaa\x91\x3b\x6a\x97\x75\xed\xed\x55\x3e\xe8\x65\x6d\x17\xe1\x95\x0d\xd4\xb8\x12\x35\xf6\x1b\x33\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\x02\x31\xf6\x1c\x31\x12\x5b\xb4\x55\x5e\xb8\x4d\xf1\x30\x62\xfb\x04\x11\x80\x13\x80\x13\x80\x13\x80\xb3\xcf\x80\x13\x72\x7e\xc7\x0f\x23\x6b\xc2\x7e\xfd\xe6\x90\x10\xf2\x03\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\x04\x82\xec\x2f\x82\x04\x04\x04\x04\x04\x04\x04\x04\x3c\x0d\x08\xd8\x42\x72\x63\xbb\x20\x10\x39\x8d\xed\x63\xc4\x7e\x23\x44\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\x43\xe0\xc3\x7e\xe2\x43\x3f\x83\xd1\xdf\x9d\x20\x71\x11\xcc\x12\xcc\x12\xcc\x12\xcc\x72\x19\xb3\xc4\x95\x29\x7d\x60\x8e\xb5\xcb\x53\xfa\x0d\x1e\x71\x59\x0a\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x23\xe8\x63\x8f\xe9\x23\x40\x20\x40\x20\x40\x20\x40\xe0\x89\x80\xc0\x36\xb2\x17\xdb\x85\x81\x48\x5f\xdc\x03\x4a\xec\x37\x46\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\x04\x42\xec\x29\x42\xac\x25\x30\xfa\xdb\x13\x64\x30\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x2e\x01\x97\x99\x20\x9c\xd6\x82\xf6\xe2\x67\x53\x12\xc4\x17\xf7\x80\x1d\xab\xbe\x45\x06\x63\xd5\x17\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc0\x8f\xc8\x60\x04\x08\x04\x08\x04\x08\x04\x08\xdc\x0d\x04\xb6\x90\xc1\xd8\x32\x0c\x44\x06\xe3\x1e\x50\x62\xbf\x31\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x22\x10\x62\x4f\x11\xa2\x9f\xc1\x58\xdb\x9e\x20\x83\x11\xe0\x12\xe0\x12\xe0\x12\xe0\x72\x09\xb8\x54\x39\xcf\xc5\xa8\x88\x5b\x48\x61\x7c\xb0\x45\x21\x87\x71\x0f\xe0\xd1\xeb\x5c\x24\x31\x7a\x9d\x01\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x09\x04\x89\x2c\x46\xc0\x40\xc0\x40\xc0\x40\xc0\xc0\x1d\x61\x60\x0b\x69\x8c\x6d\x03\x41\xe4\x31\xee\x03\x27\xf6\x1b\x25\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\xf6\x15\x23\xfa\x99\x8c\xf5\xfd\x09\x52\x19\x41\x2f\x41\x2f\x41\x2f\x41\x2f\xa1\xba\x78\xbc\x88\xb1\xae\xb5\xf8\x5e\x66\xb7\x71\x5c\x62\x47\xd5\x6f\xd6\x08\xed\x45\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\xc6\x1e\xe3\x46\x80\x35\x80\x35\x80\x35\x80\x35\x03\xd6\x70\x18\xf8\x98\xd1\xda\xcc\x11\x60\xb0\x35\xe4\xf2\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x1d\x09\x5c\x1b\x8a\x9c\xbf\xba\x59\xca\xd3\xc6\x22\xaf\x2f\xca\xa6\x0d\x33\xbc\xab\x3d\xb8\xb5\x37\x6a\xb6\x19\xe2\xa2\xde\x98\xe7\x5c\x63\x91\x1b\xca\x45\x7f\xbf\xbd\xff\xf0\xd9\xeb\x88\x03\x72\x2d\xef\xc9\xa4\xb3\xb7\x29\xdc\xfa\xbe\x78\xd4\xf5\xf2\x9d\x49\xbd\x78\xea\x4d\xad\x9e\x3d\xcb\xc1\xaa\xd9\x72\x64\xd6\x40\xbb\x05\xd2\x1d\xa6\x7e\x5b\x96\xf4\xd9\x96\x74\x16\x44\x74\xc9\x74\xd1\x7d\xe5\xcd\x97\xf9\xce\x39\x00\x1d\x1d\xe8\x2a\x0e\x6c\x15\x07\xf3\x55\xd8\x6a\xfe\x2c\x83\xa3\x4d\xb9\xe8\xc2\x69\xe3\xe3\x51\xd3\xc1\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x60\xa4\x87\x61\xa4\xa1\x48\x63\xf9\xa2\x57\xe7\x5d\x29\xd9\xbb\xb2\x04\xd0\xb1\x92\x8e\x55\x9d\x72\x70\x2a\x56\x3d\xfa\x28\x68\x58\x6d\x7a\x80\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x81\x82\x75\x45\xc1\x96\x5c\xce\x81\x54\xb2\x83\xc0\xb2\xea\x8e\x8c\x85\xdd\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\x04\x3c\xb4\x57\x3c\x04\x3c\x03\x3c\x03\x3c\x73\x70\x3c\x83\x23\x63\x6b\x8f\x8c\x49\xb5\x80\x3e\x99\xd5\x8c\xf1\x8e\x41\x53\x23\x2a\x64\xda\xb0\x33\x17\xb2\xd3\x6a\x28\xc3\x12\xcf\xdb\x7f\xd7\x6f\xc3\x69\x71\xee\xe8\x01\xd9\x75\x6d\xb1\xeb\xde\x15\xc9\xfa\x05\x7a\x9b\x6d\x96\x8c\xda\x86\xcf\x79\xa9\xda\xd3\x1a\x0a\x96\xea\x19\xa1\x5d\xdc\x01\xbb\x4d\x58\x94\x18\xdc\x22\x33\x56\x24\x25\xb1\x09\x59\x98\xbd\x7c\x2e\x12\x16\x46\x99\xd0\xc6\x45\x94\x18\x80\x8c\xaa\xf6\x52\x2c\x07\x71\xaf\x9a\xdd\x75\xb2\x51\x91\x91\x4b\x9b\x66\x32\x10\x4a\xd9\x75\xc7\xf3\xcc\x07\xec\x57\x7a\x22\x6d\x15\x68\xfd\xd7\x8b\xce\x6d\x1c\xbf\x26\x67\x21\xcc\x5e\x58\x56\x24\x7a\x37\xac\x6d\x8c\xf3\x90\x6c\x71\x22\xac\xde\x7d\x53\xc5\x16\x96\x69\xf2\x45\xff\xca\x13\x3e\x16\x99\xd9\x55\x99\xfb\x94\x94\x92\x41\x44\x6e\x42\xb9\x7f\xe1\xb4\x57\x94\x19\xd3\x5e\x64\xfe\x52\xfa\x4d\x53\xfe\xa8\x5b\x9a\x4f\x84\x12\xce\x3e\x6a\xeb\xee\x00\x17\x31\x9e\xa1\x60\xff\x3f\x7b\x7f\xd7\xdb\x36\xce\xf5\xf1\xc2\x5f\x85\xc8\x7d\xe0\x16\x93\xd8\x48\x4f\xa6\x68\x8f\x32\x4d\x7a\x3d\x1d\xcc\xdc\x35\x9a\x07\xd7\x51\x36\x6e\xd0\x12\xad\x68\x47\x16\x05\x49\x6e\x26\x03\xf4\xbb\x6f\x70\x91\x94\x28\xdb\xf2\xab\x2c\x4b\xf6\xff\xa8\x45\x6c\x8b\xaf\x5a\x5c\xfc\xfd\x17\x17\xc9\x86\xd3\x5e\x45\xa6\xec\xf6\xc3\x47\xf5\xdd\x94\x7b\x44\xe2\x22\x19\x07\xda\x1a\xd2\x7e\x42\x39\x7e\x3c\x8c\xb5\x7c\x44\xfe\x7a\xf9\x5d\xa2\x13\x86\x13\xaa\x0d\x29\xbd\x24\x9f\x46\xa3\x40\x46\x3c\x0e\x86\x32\x0d\x46\xc9\x4b\x30\x9a\xc7\xa1\x27\x7d\x31\xfa\x9f\x6f\xd9\x58\x3d\x65\x71\x27\x6d\xda\x7c\x7a\xfb\x49\x46\xe9\xc3\x2a\xdb\xf9\x45\x7b\xd8\x47\x28\xec\xc3\x72\x61\x77\x9e\x27\x92\x63\x94\x76\xc8\xb2\x40\xb6\xba\x9d\x65\x41\x6f\x5c\x96\x6b\xaa\xff\xce\x3c\xf5\x14\xcf\xba\x27\x3d\x5e\x24\x74\x7b\x2a\xe7\xd0\x6d\xcb\x20\x23\x40\x46\x80\x8c\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x20\x23\x40\x46\x80\x8c\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x8e\x95\xbf\xf0\x31\xe7\xf9\x3c\x3b\x18\x16\xe9\x35\xa3\x04\x35\x3d\x49\x41\x77\x41\xd7\xd8\x1f\x1c\x3c\xac\x3f\xff\x55\x1b\x43\x4c\xd6\xb2\x8a\x49\x7a\x8c\xea\x54\x6b\x8e\x10\xe5\x5b\x67\x9d\x1e\xb5\x27\x4e\xde\xfc\x3f\xe4\x15\x4f\xd4\xff\xb8\x97\x0f\x19\x7b\x50\xff\xda\xbf\xcf\x78\x48\x7c\x3e\x63\x5e\x34\xcf\x72\x91\xde\x98\xfe\xf6\xcc\x3e\x94\x45\xe1\x8b\x60\x83\xa2\xc6\x03\xb5\xc0\xda\xfb\x94\x86\x6c\x1c\xf1\x38\x36\x4b\x26\x99\x2d\x1e\xa9\x35\xea\x76\x78\xfb\xd1\x99\x42\x54\x74\x13\x66\xb7\x68\x58\x41\x0a\x27\xb6\x89\xaa\x36\xec\x41\xb7\x4a\xbd\x00\x49\x66\x5b\x60\x9c\xbb\x79\xa6\x7c\x36\x1e\x6b\x27\x5b\x1b\xd3\xfd\x1a\xa3\xca\xe8\x88\xda\x70\x88\x95\x0d\x44\x6b\x42\xed\x7c\xe5\x1b\x9e\x44\xdc\x13\xe7\xf4\x92\x53\x83\xa0\xda\x42\xb5\x85\x6a\x0b\xd5\xf6\x48\x3a\xea\xbc\x23\x32\x6a\xaf\xe3\x6b\x96\xa4\xd3\xa6\x2c\x75\x13\x9b\xa8\x7b\xaa\xdc\x77\xea\xef\x0c\x16\xba\x35\x0b\x5d\xcb\x2d\x5c\x14\x11\xc6\x2c\xd3\x18\x81\x4d\xc4\x54\x6a\xba\x67\x11\x5c\xa9\x81\x1b\xea\x49\xad\x71\x4c\x70\x2c\xe3\x9b\x58\x04\x9c\xfa\xcc\x94\xe7\x9a\x6a\x8d\xe3\x8b\xd1\x32\xaf\x5a\x38\x9b\x09\x5f\x2d\x06\xd1\x9b\x91\x52\x5d\xa1\x3c\x0e\xa3\x6b\x83\x1e\x08\x7c\xb1\x20\x55\x6e\x55\x22\xd2\x50\xfa\x05\x6c\x29\x3d\x2c\xd5\xda\xa2\xe3\xe6\x99\xaa\xa4\x8b\xcc\xb8\xfa\xa5\x6d\x90\x29\x64\xea\xf8\xcc\xa1\xfa\x01\xd5\x73\x26\x78\xbc\xb2\x8e\xe5\x20\x50\x55\xc6\x54\x93\x06\xe1\xcb\xbd\x73\xa1\x6b\x12\x09\x9e\x89\x42\x6f\x18\xa7\x32\xe1\x01\x0d\xd5\x58\x46\xa1\xf7\x76\xad\x7b\x4b\x13\x76\xdb\xea\xf2\x46\x58\xed\xdf\xff\x3e\x64\xce\x96\xc9\x17\x89\x88\x7d\x11\xe7\xa5\xca\x25\x98\x4c\x93\x67\x1e\xab\xb6\xab\x01\x48\xe7\x62\x34\xe5\x91\x55\x9c\x9f\xae\xf4\xc7\x4f\x57\x6c\x1a\xc6\x3c\x0a\xff\xb5\xaa\xd1\x44\x30\xee\xfb\x84\xa2\x47\x1a\xeb\xf8\x25\x8c\xd4\x8f\x1f\x64\xe5\x8f\xb4\xca\x3b\x64\x0f\x21\xbd\x25\x4e\xd5\x65\xba\xdc\x36\xd2\x1a\x74\xc0\x85\x16\x99\xe9\x1d\x96\xf9\xb3\x33\x02\xba\x62\xf7\xb6\x49\x3b\xf5\x7f\xbd\x6d\xa1\xda\xa9\x57\xfa\x59\xbe\xb2\x80\xa7\x13\x1e\x54\x02\x6b\x8a\xf7\x52\xa4\x53\x99\xce\x54\xb7\xad\x6c\xd2\xf7\x85\xda\xd5\xb7\x88\x5e\x12\x3b\xc3\x13\xdd\xfc\x50\xcd\x3e\x2f\xf4\x4b\xcd\x97\xb4\x3b\x52\xe1\x8b\x61\xc8\x44\x6e\x95\x2d\xab\xce\x0d\x9d\xfe\xb6\xba\x8e\xa5\x6a\xe5\xfe\xb7\x5a\xd8\x90\xe9\xb0\x2a\x72\x86\x5c\xe3\x34\xd0\x6d\x18\xb0\x1b\x33\x47\xaa\x73\x28\xfb\xcc\x06\x7f\x70\xef\x45\x2d\xc7\xb1\xaf\xbe\xc5\xa3\x48\xbe\xd2\x97\x16\x3a\x4e\xeb\xae\xe6\x7d\xaa\x3e\xc4\xb6\x60\x52\x3c\xe9\x33\x1b\x7c\x95\xa9\x70\x1e\xcb\x3c\x9e\x79\xdc\x57\xad\x37\xfd\x43\xc6\x5e\x3f\x2f\xd3\xd6\x73\xe9\x81\xd3\xe2\x19\x15\xe2\xb3\x30\xd1\xba\xc2\x14\x1b\x0b\x77\x6b\x0b\x61\xb6\x06\x2e\x73\xef\x79\xb9\xaa\xa4\x95\x50\x68\x90\xa6\xcb\xbb\x6e\xb5\x17\x9d\xb5\x1b\x2a\xe7\xb7\x15\x7e\xdb\x4c\xa4\x81\xa8\xff\x38\xcb\x53\x9e\x8b\x20\xf4\x6e\x96\xbe\xd8\x4d\xff\x30\x29\xef\xbd\xee\xc6\x46\x7e\xcd\x84\x1d\xd3\xe0\xc3\x4d\xc4\x46\xbe\xa5\x8d\xfc\x42\xcc\x82\x9d\xd3\x3a\xae\x26\xd1\x1a\xa6\x16\xe7\xd9\x3b\xf7\x4d\xa5\xcf\xf4\xbb\xff\x9e\x16\x77\x1d\x39\xca\x23\xfa\xa5\x72\x8d\xf5\xaf\xe9\x1b\xe4\xa6\x66\xec\xdd\x9f\x99\x8c\x69\x86\x5f\xb3\xbf\x95\xed\x30\xff\x7f\xb4\x16\xa5\xfc\xe3\xfb\xed\x08\xc3\x5e\x1e\xe7\x57\x99\x7a\xe4\x6c\x07\x92\x46\x48\xb2\xa7\xab\xa9\xfa\xdb\xd3\x15\xbb\xab\x34\x79\xc8\xbe\xe5\xc6\x33\x26\xe0\x6c\x66\xfc\x0d\xf7\xa8\x97\x28\x0c\x33\x0a\x3d\xe3\xa4\x10\x9f\x96\xaf\x66\x00\x74\x98\x62\x22\x64\x12\x89\x21\xd3\x65\x4e\x23\x1e\x14\x03\x4f\x4a\xf4\xca\xde\x2a\x8a\x77\xfa\x40\xfd\xbe\x23\x78\xe5\x20\xe2\x61\x54\xcd\x3e\x28\x80\xf4\xca\x1b\x4b\xb5\xb2\x58\x47\xe5\x6b\x5e\xe0\x83\xfe\x58\xa3\x3f\x22\xb3\xf7\x91\x93\x15\x55\xba\x07\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\x00\xa7\x0b\x70\xba\xe0\xcc\x6f\xf0\x5a\x9f\x94\xe8\x34\x20\xe9\x58\xc9\x88\xd6\x71\x9f\xa3\x87\xb3\x3a\x85\x43\xfd\x82\xfa\x75\x51\x61\xac\xd5\xb9\x7f\xa4\xf0\xd5\xa5\x42\x8e\x92\x6c\x68\xa1\x94\x53\x26\x19\xda\xc2\xbc\xef\x94\x5c\xa8\x87\xc6\x7e\xab\xa4\x42\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\x1d\x3c\x89\xd3\x4c\x32\xa1\x6d\xf8\x3f\x92\x08\x1d\x3d\x88\x77\x8f\xe4\x41\x3d\x44\x71\xb5\x49\x83\xf6\xc3\x6f\x48\x16\x74\x31\xc9\x82\x1a\x44\xea\x07\x26\x09\xda\xc6\x60\x6e\x9f\x1c\xa8\x97\x2f\x71\x7d\x52\x20\xa8\xa7\x50\x4f\xa1\x9e\x5e\x88\x7a\x7a\xc2\xa4\x3f\x87\xcb\x9a\xbd\x8c\x5b\x59\x93\xe4\x67\x3f\xcb\x8b\xe4\x3e\xfd\xb5\xbc\x48\xee\x83\xe4\x3e\x48\xee\x83\xe4\x3e\x48\xee\x83\xe4\x3e\x1d\x48\xee\xb3\x15\x48\xdc\x27\xa9\x4f\xad\x9f\x86\x64\x3e\x27\xdf\x80\x23\x89\x4f\x67\xdc\xc1\x8b\xdf\x88\x23\x89\x0f\x92\xf8\xb4\x41\x2e\x0e\x4d\xde\xd3\x82\xe2\xe6\x26\xed\xa9\x14\x87\x64\x3d\xdd\xd0\xf9\x46\xa9\x8c\x22\xe5\x1d\xab\x69\xb2\xf6\x7c\x95\xfd\xa2\x0e\xe3\xe8\x21\xb3\xda\xea\xac\xd5\x0f\xdb\x1d\xa7\x54\x0d\x8a\x4a\xfc\x3a\xe5\x96\xa1\x19\x70\x7b\x76\x1b\x94\xe6\x0e\xc2\x38\x73\xed\x38\xd6\x17\xde\x2b\xbc\xd7\xe3\xc8\x48\xfb\x74\xe1\x6a\x5f\xc0\x79\x09\xe0\x13\x74\xc4\x27\xc8\x3c\x1e\x89\xf5\x11\x40\xf4\x15\x3b\x9a\x3d\x8f\x22\xd8\x18\x0a\xf4\x48\xfd\x71\xec\xad\x81\x2e\xe5\xc4\x41\x25\xb6\xa9\x7b\xc4\x93\x9c\xd3\x94\xd8\x26\xb0\xc4\x76\x55\xdb\x7e\x62\x31\x4f\xe0\x11\xc0\x23\xe8\x8c\x47\x70\x74\x72\x52\x9a\xc7\xe3\xc4\x94\x34\x63\x7e\x0f\x0c\x27\xd9\x60\x7e\xb7\x94\x2d\x76\xb5\xc4\xd0\x2f\xba\x61\xe7\x21\x62\xc0\xe8\x77\xc5\xe8\x43\xc4\x80\x88\x71\xe4\xa5\xf2\x50\xfd\x62\xd3\x62\xd9\x9c\x74\x61\x4b\x02\xa1\xe8\x0a\xa1\xd0\x2c\x77\x3d\xa2\xa0\xef\x9c\xc9\x86\x74\x33\xa3\xd0\x3d\xd2\x23\xfd\xf2\xc4\xc7\x5f\xce\x6a\x7a\x6c\xc5\x2b\xec\x0c\xc1\x71\x18\x38\xb0\xe7\xef\xc0\x76\x83\x5a\xe0\x38\xcc\xde\x10\x63\x57\xfb\x0c\x8a\xd1\x11\xeb\x0f\x8c\x81\x55\xa0\x2b\xab\x00\x30\x06\x30\x06\x62\x31\x11\x8b\xd9\x3d\xaa\xa1\xfc\x1b\x31\x9d\x47\x99\xd8\xfb\xe6\xc4\x47\xf3\x88\x47\x81\xab\x13\x57\x79\x3f\xd5\xfe\x41\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\x46\x32\x65\x24\x53\xde\x29\x02\xaa\x24\x0b\x9d\xb8\x3c\xb1\x4a\x3a\xf6\xba\x3d\xf1\x44\x30\xe9\x58\x47\x7a\xd7\xb2\x9f\xe3\x9f\xd1\x70\x4a\x87\xda\x05\xb5\xeb\xa2\x62\x1e\x16\x26\xff\xb1\xce\x6b\x2c\x95\x72\x94\x2b\x14\x17\x8b\x39\xe5\xd1\xf1\x6d\xac\xfc\x4e\x97\x28\xf6\xd1\xe6\x6f\x75\x8b\x22\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x3f\xc8\x7f\xb7\x52\x0a\x36\x79\x8d\xe2\x56\x4a\x00\xee\x51\x3c\x7e\x4c\xef\x1e\x17\x29\xf6\x11\xc7\xd5\x1e\x4d\xde\x13\xc1\xe1\x2a\xc5\x8b\xb9\x4a\xb1\x49\xb4\x7e\x68\xda\xbb\x6d\xac\xe6\xf6\x97\x29\xf6\xf3\x45\xae\x3f\x44\x0e\x31\x15\x62\x2a\xc4\xd4\x0b\x12\x53\x4f\x99\x02\xef\x70\x91\xb3\x9f\xc1\x2c\x6b\xee\x54\xdc\xd3\xfe\xe2\x52\xc5\xfe\x9a\x5f\x5c\xaa\x88\x4b\x15\x73\x5c\xaa\x88\x4b\x15\x71\xa9\x22\x2e\x55\x3c\xfd\xa5\x8a\xdb\x61\xc5\x7d\x6e\x55\xac\x77\xd5\x90\xd0\xe7\xf4\x3b\x71\xe4\xf2\xe9\x8c\x47\x78\xf1\x1b\x72\xe4\xf2\x41\x2e\x9f\x56\x00\xc6\xc1\x89\x89\x5b\xd0\xe0\x2a\xe9\x89\x2b\xe5\x21\x9d\x4f\x47\xa4\xbf\x03\xee\x51\xea\x23\xbf\xda\x46\x09\xc4\x4d\x4a\x07\xdc\xa4\xd4\xcf\x49\xb1\x95\xaa\x84\xbb\x94\xe0\xc3\x5e\x84\x0f\xdb\x11\x51\x09\x77\x29\x1d\x78\x97\x12\xa8\xc5\x9e\xd4\x02\xb7\x29\xc1\xec\x5f\x9e\xd9\x07\xba\x00\xba\xc0\x6d\x4a\xb8\x4d\xa9\xab\xa0\xe2\x80\xeb\x94\xfa\xb9\x2b\xdd\x02\x55\xb4\x73\xa1\xd2\x39\x05\xc1\x9e\xd7\x14\xd9\x0e\x5c\x9c\xea\x52\x25\x04\xc5\xc2\x91\xbd\x5c\x7e\x81\xa0\xd8\xe6\x2f\x56\x02\xd2\xd8\x17\x69\xe0\x6a\x25\x2c\x05\x97\xb7\x14\x80\x69\x80\x69\x20\x1c\x03\xe1\x18\xa7\xa5\x1c\xb8\x46\xe9\x48\xd7\x28\x39\xbd\xf2\x55\xa6\x77\x51\x54\xf8\x3e\xad\x42\x91\xfe\xa4\x57\x46\x92\x49\x24\x99\x44\x92\x49\x24\x99\x44\x92\x49\x24\x99\x44\x92\x49\x24\x99\x44\x92\x49\x24\x99\x44\x92\x49\x24\x99\x3c\x66\x92\xc9\x26\x37\xd8\x48\x72\x89\x24\x97\x48\x72\xd9\x8b\x24\x97\xab\x51\x18\x7d\x75\xa4\xcc\x79\x2a\x95\x31\x55\x9b\x9c\x8c\xd2\xb6\xd4\x71\x31\xb3\x12\xc6\x7e\xf8\x33\xf4\xe7\x3c\x72\x1b\xce\x0b\x07\xf5\x4b\xf1\xc4\x1f\xe6\x89\x43\x27\x69\xc5\xa7\xc2\x2f\x19\xd0\xe3\x06\xe5\xde\xbf\xb2\x99\x2b\x60\x13\x0b\xe3\x2c\x17\x9c\xec\xd1\xc5\xc2\xb6\xd7\x05\x61\x71\xb9\x8f\xff\x0a\xb3\x36\xc0\xdb\x1a\x45\x91\xde\x87\x07\xe5\xb9\x1e\x0c\xe0\xa8\xb9\x87\x52\xb8\xe5\x3e\x02\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x03\x8c\x3b\x39\x8c\xf3\x45\x12\xc9\xb7\x19\xe5\x3a\x3d\x0c\xc2\xdd\x17\x4f\x02\x7c\x6b\x1a\xbe\x95\x7d\x0b\xe8\xb6\x08\xdd\xca\xbe\x01\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x3b\x39\x6c\xab\x49\x78\x85\x80\xb8\x3e\x32\xb9\x32\xd3\xc6\xea\xd0\xb8\xcb\xa6\x72\x08\x85\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\xeb\x0a\x9d\xbb\xa0\xbc\x54\x80\x87\x80\x87\x80\x87\x17\x04\x0f\x4d\xd2\xfc\x0d\x0c\xd1\x05\x87\xb1\x35\xdb\x36\xe3\xdc\x91\x00\xe2\x75\xe9\xaf\x91\x4f\x6a\xd6\x76\xe5\xf2\x95\x8e\xe8\xa0\xb2\x95\x70\x9e\x0d\xfc\xb8\x25\x7e\xec\x37\x7a\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x04\x76\x3c\x07\xec\xe8\x66\xe1\x5f\xb9\x57\x41\x32\x7e\x40\x4f\x40\x4f\x40\x4f\x40\xcf\x75\xd0\x13\xa7\x96\xfb\x85\x28\xab\xe7\x97\xfb\x8d\x27\x71\x5e\x19\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\x12\x68\xb2\xef\x68\x12\x70\x10\x70\x10\x70\x10\x70\xf0\x9c\xe0\x60\x03\x91\x90\x0d\x03\x42\x44\x40\x1e\x15\x2f\xf6\x1b\x2d\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\x02\x2b\xf6\x19\x2b\xba\x11\x8f\x95\x3d\x0a\x22\x1d\x01\x33\x01\x33\x01\x33\x01\x33\xd7\xc1\xcc\x2c\xe7\xb9\x98\xce\xa3\x4c\x1c\x1c\xea\xf8\x68\x1e\xf5\x28\x10\xeb\x78\x44\x18\xe9\x74\x33\x82\x1d\x9d\xce\x00\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x04\x96\x44\xb4\x23\x00\x21\x00\x21\x00\x21\x00\xe1\xc1\x80\xb0\x81\x70\xc7\xa6\x21\x21\xe2\x1d\x8f\x8b\x18\xfb\x8d\x17\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x81\x16\x7b\x8d\x16\xdd\x88\xc7\xea\x26\x05\x21\x8f\x20\x9a\x20\x9a\x20\x9a\x20\x9a\x44\x34\x11\xdb\xd8\x0f\xf0\xb8\x10\xd1\xf8\x55\xa6\x77\x51\x54\xd0\xc8\xac\xdf\x08\x12\x11\x8e\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xc0\x90\xbd\xc7\x90\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x22\xe7\x1f\x46\xb5\x78\x2d\x10\x79\x75\x51\xd6\x6d\x58\xc0\x5f\xcd\xb1\xae\xa3\x41\xb4\xed\x89\xd7\x87\x65\xe2\x15\x88\xbc\xe4\x5d\x1f\xee\xc6\xdf\x7e\x38\x1d\xd1\x22\xdc\x72\x4a\xa6\xb3\xc3\xdb\x12\xae\x5f\xab\x47\x7d\xc5\xdd\xe0\xb5\x13\x41\x6f\x39\x52\x63\xa0\xed\x02\x59\x7f\x1f\xf8\xc5\x00\xd2\x15\xd3\x45\xf5\x95\x33\x5f\x96\x3b\xa7\x05\x44\x3a\x54\x55\x1c\x9a\x2a\x0e\x97\xab\xb0\xd3\xfc\xa9\x23\xa4\x87\xc2\xd1\xad\xae\xe3\xfe\x00\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\x0a\x46\xda\x12\x23\xf5\xb9\x98\x29\xbf\x6c\x4d\x30\xe2\x7a\x48\x76\x4f\x0f\xd0\x81\x60\x60\x63\xfa\x0b\x45\x9f\xb4\x8e\xc4\x8a\x92\x3b\x41\xc2\xdc\xb9\x01\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x76\x32\x00\x56\x5e\x9c\xbc\x2f\x01\x73\x2f\x78\x02\x02\x33\x08\xac\xe8\x94\xf6\x19\x58\x51\x74\x37\x20\xd8\xba\x3b\x8a\x41\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\xda\xa2\x60\x35\xf7\x6c\xe0\x2c\x65\x2b\xb0\xac\xbc\xe4\x62\x65\x37\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x1d\x15\x0f\x01\xcf\x00\xcf\x00\xcf\xb4\x8e\x67\x90\x33\x69\x63\xce\x24\x99\xad\xa0\x4f\x7a\x35\x63\xfc\xc4\xa0\xe9\x20\x2a\xa4\xdb\xb0\x37\x17\x32\xd3\x6a\x22\xfd\x02\xcf\x9b\xff\x57\x6f\xb2\x69\x70\xee\xa8\x01\xd9\x77\x6d\x31\xeb\xde\x35\x5d\x73\xe1\xa9\x6d\xb6\x5e\x32\x2a\x1b\x3e\xeb\xa5\x2a\x4f\x6b\x22\x58\xa2\x66\x84\x72\x71\x87\xec\x2e\x66\x61\xac\x71\x8b\x4c\xd9\x3c\x2e\x88\x8d\xcf\xfc\xf4\xed\xc7\x3c\x66\x7e\x98\x0a\x65\x5c\x44\x81\x01\xc8\xa8\x2a\x2f\xc5\x70\x10\xfb\xaa\x99\x5d\x27\x9b\xce\x53\x72\x69\x93\x54\x7a\x22\xcb\xcc\xba\xe3\x78\xe6\x43\xf6\x5f\x2a\x91\xb6\x0a\xb4\xfe\xab\x45\xe7\x2e\x8a\x3e\x91\xb3\xe0\xa7\x6f\x2c\x9d\xc7\x6a\x37\xac\x6c\x8c\xf5\x90\xcc\xe3\x84\x5f\xbe\xfb\xba\x8a\x0d\x2c\xd3\xe4\x8b\xfe\xcd\x63\x1e\x88\x54\xef\xaa\xf4\x5d\x48\x59\x26\xbd\x90\xdc\x84\x62\xff\xc2\x69\xaf\x28\x53\xa6\xbc\xc8\xfc\xad\xf0\x9b\x66\xfc\x45\xb5\x34\x7f\x16\x99\xb0\xf6\x51\x59\x77\x0b\xb8\x88\xf1\x4c\x04\x23\x1b\x4e\x7b\x15\x99\xb2\xdb\x0f\x1f\xd5\x77\x53\xee\x11\x89\x8b\x64\x1c\x68\x6b\x48\xfb\x09\xe5\xf8\xf1\x30\xd6\xf2\x11\xf9\xeb\xe5\x77\x89\x4e\x18\x4e\xa8\x36\xa4\xf4\x92\x7c\x1a\x8d\x02\x19\xf1\x38\x18\xca\x34\x18\x25\x2f\xc1\x68\x1e\x87\x9e\xf4\xc5\xe8\x7f\xbe\x65\x63\xf5\x94\xc5\x9d\xb4\x69\xf3\xe9\xed\x27\x19\xa5\x0f\xab\x6c\xe7\x17\xed\x61\x1f\xa1\xb0\x0f\xcb\x85\xdd\x79\x9e\x48\x8e\x51\xda\x21\xcb\x02\xd9\xea\x76\x96\x05\xbd\x71\x59\xae\xa9\xfe\x3b\xf3\xd4\x53\x3c\xeb\x9e\xf4\x78\x91\xd0\xed\xa9\x24\x62\xb4\x2d\x83\x8c\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x20\x23\x40\x46\x80\x8c\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x20\x23\x40\x46\x38\xd6\x05\x1e\x8f\x39\xcf\xe7\xd9\xc1\xb0\x48\xaf\x19\x25\xa8\xe9\xc9\x1d\x0c\x17\x74\x05\xfd\xc1\xc1\xc3\xfa\xf3\x5f\xb5\x31\xc4\x64\x2d\xab\x98\xa4\xc7\xa8\x4e\xb5\xe6\x08\x51\xbe\x75\xd6\xe9\x51\x7b\xe2\xe4\xcd\xff\x43\x5e\xf1\x44\xfd\x8f\x7b\xf9\x90\xb1\x07\xf5\xaf\xfd\xfb\x8c\x87\xc4\xe7\x33\xe6\x45\xf3\x2c\x17\xe9\x8d\xe9\x6f\xcf\xec\x43\x59\x14\xbe\x08\x36\x28\x6a\x3c\x50\x0b\xac\xbd\x5f\x7c\xc8\xc6\x11\x8f\x63\xb3\x64\x92\xd9\xe2\x91\x5a\xa3\x6e\x87\xb7\x1f\x9d\x29\x44\x45\x37\x61\x76\x8b\x86\x15\xa4\x70\x62\x9b\xa8\x6a\xc3\x1e\x74\xab\xd4\x0b\x90\x64\xb6\x05\xc6\xb9\x9b\x67\xca\x67\xe3\xb1\x76\xb2\xb5\x31\xdd\xaf\x31\xaa\x8c\x8e\xa8\x0d\x87\x58\xd9\x40\xb4\x26\xd4\xce\x57\xbe\xe1\x49\xc4\x3d\x71\x4e\x2f\x39\x35\x08\xaa\x2d\x54\x5b\xa8\xb6\x50\x6d\x8f\xa4\xa3\xce\x3b\x22\xa3\xf6\x3a\xbe\x66\x49\x3a\x6d\xca\x52\x37\xb1\x89\xba\xa7\xca\x7d\xa7\xfe\xce\x60\xa1\x5b\xb3\xd0\xb5\xdc\xc2\x45\x11\x61\xcc\x32\x8d\x11\xd8\x44\x4c\xa5\xa6\x7b\x16\xc1\x95\x1a\xb8\xa1\x9e\xd4\x1a\xc7\x04\xc7\x32\xbe\x89\x45\xc0\xa9\xcf\x4c\x79\xae\xa9\xd6\x38\xbe\x18\x2d\xf3\xaa\x85\xb3\x99\xf0\xd5\x62\x10\xbd\x19\x29\xd5\x15\xca\xe3\x30\xba\x36\xe8\x81\xc0\x17\x0b\x52\xe5\x56\x25\x22\x0d\xa5\x5f\xc0\x96\xd2\xc3\x52\xad\x2d\x3a\x6e\x9e\xa9\x4a\xba\xc8\x8c\xab\x5f\xda\x06\x99\x42\xa6\x8e\xcf\x1c\xaa\x1f\x50\x3d\x67\x82\xc7\x2b\xeb\x58\x0e\x02\x55\x65\x4c\x35\x69\x10\xbe\x94\x3e\xfb\x27\x96\x44\x82\x67\xa2\xd0\x1b\xc6\xa9\x4c\x78\x40\x43\x35\x96\x51\xe8\xbd\x5d\xeb\xde\xd2\x84\xdd\xb6\xda\x2f\x1e\xa0\xfd\xfb\xdf\x87\xcc\xd9\x32\xf9\x22\x11\xb1\x2f\xe2\xbc\x54\xb9\x04\x93\x69\xf2\xcc\x63\xd5\x76\x35\x00\xe9\x5c\x8c\xa6\x3c\xb2\x8a\xf3\xd3\x95\xfe\xf8\xe9\x8a\x4d\xc3\x98\x47\xe1\xbf\x56\x35\x9a\x08\xc6\x7d\x9f\x50\xf4\x48\x63\x1d\xbf\x84\x91\xfa\xf1\x83\xac\xfc\x91\x56\x79\x87\xec\x21\xa4\xb7\xc4\xa9\xba\x4c\x97\xdb\x46\x5a\x83\x0e\xb8\xd0\x22\x33\xbd\xc3\x32\x7f\x76\x46\x40\x57\xec\xde\x36\x69\xa7\xfe\xaf\xb7\x2d\x54\x3b\xf5\x4a\x3f\xcb\x57\x16\xf0\x74\xc2\x83\x4a\x60\x4d\xf1\x5e\x8a\x74\x2a\xd3\x99\xea\xb6\x95\x4d\xfa\xbe\x50\xbb\xfa\x16\xd1\x4b\x62\x67\x78\xa2\x9b\x1f\xaa\xd9\xe7\x85\x7e\xa9\xf9\x92\x76\x47\x2a\x7c\x31\x0c\x99\xc8\xad\xb2\x65\xd5\xb9\xa1\xd3\xdf\x56\xd7\xb1\x54\xad\xdc\xff\x56\x0b\x1b\x32\x1d\x56\x45\xce\x90\x6b\x9c\x06\xba\x0d\x03\x76\x63\xe6\x48\x75\x0e\x65\x9f\xd9\xe0\x0f\xee\xbd\xa8\xe5\x38\xf6\xd5\xb7\x78\x14\xc9\x57\xfa\xd2\x42\xc7\x69\xdd\xd5\xbc\x4f\xd5\x87\xd8\x16\x4c\x8a\x27\x7d\x66\x83\xaf\x32\x15\xce\x63\x99\xc7\x33\x8f\xfb\xaa\xf5\xa6\x7f\xc8\xd8\xeb\xe7\x65\xda\x7a\x2e\x3d\x70\x5a\x3c\xa3\x42\x7c\x16\x26\x5a\x57\x98\x62\x63\xe1\x6e\x6d\x21\xcc\xd6\xc0\x65\xee\x3d\x2f\x57\x95\xb4\x12\x0a\x0d\xd2\x74\x79\xd7\xad\xf6\xa2\xb3\x76\x43\xe5\xfc\xb6\xc2\x6f\x9b\x89\x34\x10\xf5\x1f\x67\x79\xca\x73\x11\x84\xde\xcd\xd2\x17\xbb\xe9\x1f\x52\x05\xbb\xb4\x91\x5f\x33\x61\xc7\x34\xf8\x70\x13\xb1\x91\x6f\x69\x23\xbf\x10\xb3\x60\xe7\xb4\x8e\xab\x49\xb4\x86\xa9\xc5\x79\xf6\xce\x7d\x53\xe9\x33\xfd\xee\xbf\xa7\xc5\x5d\x47\x8e\xf2\x88\x7e\xa9\x5c\x63\xfd\x6b\xfa\x06\xb9\xa9\x19\x7b\xf7\x67\x26\x63\x9a\xe1\xd7\xec\x6f\x65\x3b\xcc\xff\x1f\xad\x45\x29\xff\xf8\x7e\x3b\xc2\xb0\x97\xc7\xf9\x55\xa6\x1e\x39\xdb\x81\xa4\x11\x92\xec\xe9\x6a\xaa\xfe\xf6\x74\xc5\xee\x2a\x4d\x1e\xb2\x6f\xb9\xf1\x8c\x09\x38\x9b\x19\x7f\xc3\x3d\xea\x25\x0a\xc3\x8c\x42\xcf\x38\x29\xc4\xa7\xe5\xab\x19\x00\x1d\xa6\x98\x08\x99\x44\x62\xc8\x74\x99\xd3\x88\x07\xc5\xc0\x93\x12\xbd\xb2\xb7\x8a\xe2\x9d\x3e\x50\xbf\xef\x08\x5e\x39\x88\x78\x18\x55\xb3\x0f\x0a\x20\xbd\xf2\xc6\x52\xad\x2c\xd6\x51\xf9\x9a\x17\xf8\xa0\x3f\xd6\xe8\x8f\xb8\xda\xee\xa8\xa9\x8a\xdc\xde\xc1\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\xc0\xd1\x02\x1c\x2d\x38\xeb\x2b\xec\xd7\xe7\x23\x3a\x09\x44\x3a\x56\x1a\xa2\x35\xcc\xe7\xe8\x71\xac\x65\xd9\x50\xbd\xa0\x7a\x5d\x54\xf8\x6a\x65\xea\x1f\x29\x6a\x75\xb1\x8c\xa3\xa4\x18\xaa\x16\x72\xca\xcc\x42\x9b\xed\xfa\x4e\x09\x85\xfa\x67\xe5\xb7\xca\x23\x04\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\x0f\xc6\xdf\xbd\xb3\x37\xcd\xa4\x0f\xda\x82\xfa\x23\x6b\xd0\xb1\xa3\x76\xf7\x48\x16\xd4\x3f\x0c\x57\x9b\x23\x68\x2f\xf4\x86\xd4\x40\x17\x93\x1a\xa8\x39\x94\x7e\x60\x46\xa0\x2d\x6c\xe5\xf6\x89\x80\xfa\xf8\x02\xd7\xe7\xff\x81\x5c\x0a\xb9\x14\x72\xe9\x05\xc8\xa5\x27\xcc\xed\x73\xb0\x90\xd9\xc7\x10\x95\x35\x99\x7c\xf6\xb2\xb9\x48\xe0\xd3\x5f\xa3\x8b\x04\x3e\x48\xe0\x83\x04\x3e\x48\xe0\x83\x04\x3e\x48\xe0\xd3\x81\x04\x3e\xdb\xa0\xc3\x7d\xf2\xf6\xd4\x39\x69\x48\xd7\x73\xea\x7d\x37\xb2\xf4\x74\xc6\x17\xbc\xf8\x0d\x38\xb2\xf4\x20\x4b\x4f\x0b\xc8\xe2\xd0\xe4\x3c\xc7\xd7\xd7\xdc\x9c\x3c\x6e\x69\x48\xc5\xd3\x09\x51\x6f\x94\x69\x7f\x6d\xad\xb6\xa7\xbf\x63\x47\xb1\xdf\x22\xc1\x26\x95\xcf\xf8\xaf\xfd\xb1\x01\xa7\x55\x8d\xce\x69\x6a\x6c\xa1\x1f\x15\xb3\x03\x2a\x12\x9c\xd8\xb3\x77\x62\xa1\x22\x75\x50\x45\xda\x96\x5a\xec\x6a\x99\xc1\x2f\xba\x61\xf7\x41\x31\xb0\x00\x74\x65\x01\x00\xc5\x00\xc5\x00\xc5\x00\xc5\xe8\x1a\xc5\x10\x49\x24\xdf\x66\xa4\xc7\xee\x99\x51\xb8\x78\x02\x52\x0a\xaf\xf2\x7b\xdc\xee\x41\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\x40\xbe\x01\xe4\x1b\xd8\x09\x1a\x16\x60\xa1\x1b\x49\x85\x5d\xce\xb1\x5f\x56\xe1\x93\x80\xa4\xa3\xa5\x15\x5e\xc3\x7d\x8e\x1f\xe2\x50\x16\x0e\x89\x0b\x12\xd7\x65\xc5\x38\x54\xe6\xfe\xb1\x82\x1c\x16\x0b\x39\x4e\x6a\xe1\x6a\x29\x27\xcd\x2d\xbc\xd9\xbc\xef\x96\x5c\xb8\x7f\xc6\x7e\xbb\xec\xc2\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xc0\xfd\xdd\xcb\x0c\xd2\x50\x7a\xe1\x2d\xf8\x3f\xf2\x0b\x1f\x3d\x88\x77\x9f\x04\xc3\xfd\x43\x71\xf5\x67\x8f\xf7\xc2\x6f\x48\x31\x7c\x39\x29\x86\x9b\x43\xea\x87\x9e\x16\xdf\xc2\x60\xee\x90\x64\xb8\x8f\x2f\xf1\x9a\x53\xe2\x50\x4f\xa1\x9e\x42\x3d\xbd\x0c\xf5\xf4\x94\x67\xc4\x0f\x96\x35\x7b\x19\xb7\xb2\x2e\xd7\xf0\x5e\x96\x17\xc9\x86\xfb\x6b\x79\x91\x6c\x18\xc9\x86\x73\x24\x1b\x46\xb2\x61\x24\x1b\x46\xb2\xe1\x0e\x24\x1b\xde\x06\x24\xee\x95\x6d\xb8\xce\x4f\x43\xba\x9e\x93\x6f\xc0\x91\xa9\xa7\x33\xee\xe0\xc5\x6f\xc4\x91\xa9\x07\x99\x7a\xda\x20\x17\x07\xa7\xea\x39\xbe\xe2\x56\xc9\xd5\xe3\x16\x87\x64\x3d\xdd\xd0\xf9\x46\x99\xc7\x23\xb1\x21\xe5\xb0\xfa\xca\x8a\xe4\x85\xfd\xc3\x56\x5b\xc8\x7e\x8f\xd4\x1f\xc7\x36\x03\xba\x94\x13\x0b\x48\xb6\xa9\xfb\xa4\x1a\x3e\xa3\x29\xb1\x8d\x88\x64\xbb\xaa\x6d\x25\xa9\x98\x27\xf0\x5d\xe1\xbb\x5e\x8e\x88\x54\x9a\xc7\xe3\xe8\x47\xcd\x98\xdf\x03\xa5\xa3\x0d\xe6\x77\xdb\xd4\xc2\x3b\x5a\x62\xb0\x8a\x6e\xd8\x79\x00\x0b\x18\xfd\xae\x18\x7d\x00\x0b\x00\x8b\x23\x2f\x95\x87\xb2\x8a\x4d\x8b\x65\x73\x98\xc2\x96\x04\x42\xd1\x15\x42\x71\xc8\xad\x48\x7d\xdc\x90\x6e\x66\x14\x2d\xdd\x8b\x74\x36\xa1\xae\x67\x35\x3d\xb6\xe2\x15\x27\xbb\x1b\x09\xa1\xaf\x70\x60\x2f\x94\x5a\x20\xf4\x75\x6f\x88\xb1\xab\x7d\x06\xc5\xe8\x88\xf5\x07\xc6\xc0\x2a\xd0\x95\x55\x00\x18\x03\x18\x03\x71\x17\x88\xbb\xe8\x1e\xd5\x50\x9b\xb6\xd0\xe3\x99\xd8\xfb\x92\xa4\x1f\xfa\x09\x2d\x5f\xe2\xdb\x9b\x4b\x92\x2a\xdd\x83\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\x88\xac\x89\xc8\x9a\xb8\x0b\x37\x2c\xc1\x42\x27\x2e\x49\xaa\x70\x8e\xbd\x2e\x49\x3a\x0d\x48\x3a\xd6\x25\x49\xeb\xb8\xcf\xd1\x63\x1d\x9c\xc2\xa1\x72\x41\xe5\xba\xa8\x58\x87\xea\xdc\x3f\x52\xac\xc3\x52\x21\x47\xb9\x24\x69\xa1\x94\x53\x5e\x92\xb4\x85\x79\xdf\xe9\x92\xa4\x1e\x1a\xfb\xad\x2e\x49\x02\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\x07\xee\xef\x60\x46\xd3\x66\x2e\x49\xda\x86\xff\xe3\x92\xa4\xa3\x07\xf1\xee\x71\x49\x52\x0f\x51\x5c\xed\x49\xe4\xfd\xf0\x1b\x2e\x49\xba\x98\x4b\x92\x1a\x44\xea\x07\x9e\x1c\xdf\xc6\x60\x6e\x7f\x49\x52\x2f\x5f\xe2\xfa\xf3\xe2\x50\x4f\xa1\x9e\x42\x3d\xbd\x10\xf5\xf4\x84\x27\xc5\x0f\x97\x35\x7b\x19\xb7\xb2\xe6\x92\xa4\xfd\x2c\x2f\x2e\x49\xea\xaf\xe5\xc5\x25\x49\xb8\x24\x29\xc7\x25\x49\xb8\x24\x09\x97\x24\xe1\x92\xa4\xd3\x5f\x92\xb4\x15\x48\xdc\xe7\x92\xa4\x5a\x3f\x0d\x29\x7b\x4e\xbe\x01\x47\xb2\x9e\xce\xb8\x83\x17\xbf\x11\x47\xb2\x1e\x24\xeb\x69\x83\x5c\x1c\x9a\xac\xa7\x05\xc5\xcd\x4d\xd6\x53\x29\x0e\xc9\x7a\xba\xa1\xf3\x1d\x70\x49\x52\x0f\xb1\xd5\x16\xb2\x1f\x2e\x49\x3a\xe0\x92\xa4\x5e\x4e\x89\x6d\x44\x24\x5c\x92\x04\xdf\xf5\x22\x7c\xd7\x6e\x88\x48\xb8\x24\xe9\xd0\x4b\x92\xc0\x2a\xf6\x62\x15\xb8\x24\x09\x46\xff\xf2\x8c\x3e\x80\x05\x80\x05\x2e\x49\xc2\x25\x49\x1d\x25\x14\x07\x5c\x92\xd4\xcb\x0d\xe9\x66\x46\xd1\xce\x25\x49\xe7\x13\xea\x7a\x56\xd3\x63\x2b\x5e\x71\xaa\x4b\x92\x10\xfa\x0a\x07\xf6\x52\xa9\x05\x42\x5f\xf7\x86\x18\xbb\xda\x67\x50\x8c\x8e\x58\x7f\x60\x0c\xac\x02\x5d\x59\x05\x80\x31\x80\x31\x10\x77\x81\xb8\x8b\xee\x51\x0d\xe5\xdf\x88\xe9\x3c\x3a\xe0\x96\xa4\x47\xf3\x08\x5c\x93\xb4\xfa\x9a\xa4\x6a\xff\x20\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\x22\x71\x22\x12\x27\xee\x14\x01\x55\x92\x85\x4e\x5c\x94\x54\x25\x1d\x7b\xdd\x94\x74\x22\x98\x74\xac\xab\x92\xd6\xb2\x9f\xe3\x9f\xd1\x70\x4a\x87\xda\x05\xb5\xeb\xa2\x62\x1e\x16\x26\xff\xb1\xce\x6b\x2c\x95\x72\x94\xeb\x92\x16\x8b\x39\xe5\x7d\x49\xdb\x58\xf9\x9d\x2e\x4c\xea\xa3\xcd\xdf\xea\xc6\x24\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\x7f\x90\xff\x2e\xe6\x37\x6d\xe6\xca\xa4\xad\x94\x00\xdc\x99\x74\xfc\x98\xde\x3d\x2e\x4d\xea\x23\x8e\xab\x3d\x9a\xbc\x27\x82\xc3\xb5\x49\x17\x73\x6d\x52\x93\x68\xfd\xd0\xb4\x77\xdb\x58\xcd\xed\x2f\x4e\xea\xe7\x8b\x5c\x7f\x88\x1c\x62\x2a\xc4\x54\x88\xa9\x17\x24\xa6\x9e\x32\x05\xde\xe1\x22\x67\x3f\x83\x59\xd6\xdc\x9f\xb4\xa7\xfd\xc5\x05\x4a\xfd\x35\xbf\xb8\x40\x09\x17\x28\xe5\xb8\x40\x09\x17\x28\xe1\x02\x25\x5c\xa0\x74\xfa\x0b\x94\xb6\xc3\x8a\xfb\xdc\xa0\x54\xef\xaa\x21\xa1\xcf\xe9\x77\xe2\xc8\xe5\xd3\x19\x8f\xf0\xe2\x37\xe4\xc8\xe5\x83\x5c\x3e\xad\x00\x8c\x83\x13\x13\xb7\xa0\xc1\x55\xd2\x13\x57\xca\x43\x3a\x9f\x8e\x48\x7f\x07\xdc\xa3\xd4\x47\x7e\xb5\x8d\x12\x88\x9b\x94\x0e\xb8\x49\xa9\x9f\x93\x62\x2b\x55\x09\x77\x29\xc1\x87\xbd\x08\x1f\xb6\x23\xa2\x12\xee\x52\x3a\xf0\x2e\x25\x50\x8b\x3d\xa9\x05\x6e\x53\x82\xd9\xbf\x3c\xb3\x0f\x74\x01\x74\x81\xdb\x94\x70\x9b\x52\x57\x41\xc5\x01\xd7\x29\xf5\x73\x57\xba\x05\xaa\x68\xe7\x42\xa5\x73\x0a\x82\x3d\xaf\x29\xb2\x1d\xb8\x38\xd5\xa5\x4a\x08\x8a\x85\x23\x7b\xb9\xfc\x02\x41\xb1\xcd\x5f\xac\x04\xa4\xb1\x2f\xd2\xc0\xd5\x4a\x58\x0a\x2e\x6f\x29\x00\xd3\x00\xd3\x40\x38\x06\xc2\x31\x4e\x4b\x39\x9c\xcb\xa1\xf7\xbc\x45\xe9\x34\x17\xfe\x76\xfc\x12\xa5\xb2\x53\xbe\xca\xf4\x2e\x8a\x0a\xc7\xa7\xcd\x2b\xa6\x3b\x91\x5a\xb9\x85\x9b\xd9\x90\x5f\x12\xf9\x25\x91\x5f\x12\xf9\x25\x91\x5f\x12\xf9\x25\x91\x5f\x12\xf9\x25\x91\x5f\x12\xf9\x25\x91\x5f\x12\xf9\x25\x5b\xdb\x5b\x23\xbf\x25\xf2\x5b\x22\xbf\x65\x2f\xf2\x5b\xae\xa6\x60\xb8\x4c\xfc\x48\x1c\xcc\xe9\x95\xd6\x41\x58\x2f\x2f\x19\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x03\x0a\x3b\x3a\x0a\xa3\xaf\x8e\x94\x39\x4f\xa5\x32\xa6\x6a\x93\x93\x51\xf2\xe2\x3a\x2e\x66\x56\xc2\xd8\x0f\x7f\x86\xfe\x9c\x47\x6e\xc3\x79\xe1\xa0\x7e\x29\x9e\xf8\xc3\x3c\x71\xe8\xa4\x6e\xfd\x54\xf8\x25\x03\x7a\xdc\xa0\xdc\xfb\x57\x36\x73\x05\x6c\x62\x61\x9c\xe5\x82\x93\x3d\xba\x58\xd8\xf6\xba\x10\x5e\xbf\xdc\xc7\x7f\x85\x59\x1b\xe0\x6d\x4d\x5c\x3d\xbd\x0f\x0f\xca\x73\x3d\x18\xc0\x51\x73\x0f\xa5\x70\xcb\x7d\x04\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x07\x18\x77\x72\x18\xe7\x73\x31\x53\xde\xd9\x9a\xd8\xb4\xed\x18\xdc\x3d\x3d\xe8\x51\xe4\x40\x6f\x4d\xa3\xb7\xa2\x6b\x41\xdc\x16\x89\x5b\xd1\x35\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\xa7\x07\x6d\x22\x89\xe4\xdb\x8c\xae\xd6\x3e\x90\xb4\x15\x4f\x02\x6a\x6b\x1c\xb5\x15\x7d\x0b\xd6\xb6\xc4\xda\x8a\xbe\x01\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x3b\x39\x6c\xab\xb9\x5f\x11\x27\x4f\xfb\xc8\xe4\xca\x8b\x9d\x56\x9f\x41\xbd\x6c\x2a\x87\x33\xa7\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\xa0\x73\x5d\xa1\x73\x17\x74\x0d\x22\xe0\x21\xe0\x21\xe0\xe1\x05\xc1\x43\xfd\xf9\xaf\x0d\x0c\xd1\x05\x87\xb1\x35\xdb\xf6\x6a\x87\x23\x01\xc4\xeb\xd2\x5f\x23\x9f\xd4\xac\xed\xca\xe5\x2b\x1d\xd1\x41\x65\x2b\xe1\x3c\x1b\xf8\x71\x4b\xfc\xd8\x6f\xf4\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x08\xec\x78\x0e\xd8\x91\x78\xa3\xa9\xf2\xca\xbd\x8a\x83\x16\x9b\xa7\x8a\x80\x9e\x80\x9e\x80\x9e\x80\x9e\xbd\x87\x9e\x48\x0f\xd8\x27\x40\x59\x49\x14\xd8\x6f\x36\x89\xc4\x80\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\x3d\xc7\x92\x00\x83\x00\x83\x00\x83\x00\x83\x67\x04\x06\x1b\x08\x82\x6c\x16\x0e\x22\xf6\xf1\x98\x68\xb1\xdf\x58\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\x11\x48\xb1\xc7\x48\xd1\x8d\x74\x74\xb7\x28\x08\x70\x04\xc7\x04\xc7\x04\xc7\x04\xc7\x5c\xcb\x31\x71\x2d\x4b\xbf\x38\x64\xe5\x82\x96\x7e\xc3\x48\x5c\xc8\x02\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\x09\x22\xd9\x77\x22\x09\x38\x08\x38\x08\x38\x08\x38\x78\x4e\x70\xb0\x89\x28\xc7\x66\x01\x21\xc2\x1c\x8f\x8a\x17\xfb\x8d\x16\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\x81\x15\xfb\x8c\x15\x2b\x81\x8e\xee\x1e\x05\x91\x8e\x80\x99\x80\x99\x80\x99\x80\x99\xeb\x60\x66\x2a\x08\xb1\x35\x90\xcb\xf1\x87\x7e\x12\x92\x39\x1e\x15\x45\x96\xbd\x8c\x48\xc7\xb2\x2f\x80\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x81\x24\x11\xe9\x08\x38\x08\x38\x08\x38\x08\x38\x78\x28\x1c\x6c\x20\xd2\xb1\x61\x40\x88\x48\xc7\xa3\xe2\xc5\x7e\xa3\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\x45\x60\xc5\x3e\x63\x45\x37\xd2\xb1\xb2\x47\x41\xa4\x23\x60\x26\x60\x26\x60\x26\x60\xe6\x3a\x98\x99\xe5\x3c\x17\xd3\x79\xd4\x40\xa8\xe3\xa3\x79\x14\x62\x1d\x8f\x0a\x23\x9d\x6e\x46\xb0\xa3\xd3\x19\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\xc0\x92\x88\x76\x04\x20\x04\x20\x04\x20\x04\x20\x3c\x18\x10\x36\x10\xee\xd8\x34\x24\x44\xbc\xe3\x71\x11\x63\xbf\xf1\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x22\xd0\x62\xaf\xd1\xa2\x1b\xf1\x58\xdd\xa4\x20\xe4\x11\x44\x13\x44\x13\x44\x13\x44\x93\x88\x26\xb2\x38\xf6\x01\x3b\x56\x73\x37\x7e\x95\xe9\x5d\x14\x15\x28\x32\xeb\x37\x7f\x44\x2e\x47\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\x48\x20\xc8\xbe\x23\x48\xc0\x36\xc0\x36\xc0\x36\xc0\x36\x07\xb6\xe1\x20\x71\x3f\x70\xdb\xc2\xf1\x61\xf0\x36\xc4\xfc\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x75\x03\xb8\xcd\xd5\x74\xc8\xcd\x03\x89\xac\x84\x72\x54\xcb\xd9\x02\x91\xb3\x30\x9e\xca\x74\x56\x8c\x01\x67\x1a\x79\x54\x51\x58\x73\xdc\xeb\x68\x40\x6d\x13\xfd\xaa\xf4\xcc\x32\xff\x0a\x44\x7e\x57\xf9\xca\xdd\xf8\xdb\x7f\x4c\x4f\xb4\x48\xba\x8a\x52\xb7\xe5\x5c\xbf\x36\x8c\xfd\xcf\xdb\xf5\xc3\x5f\x71\xce\xf4\x5c\x3e\xf3\xb1\xff\xbf\x9f\xb7\x5b\x0c\xff\x7f\x6f\xef\xc6\xdf\x7e\x38\x5d\xd2\xee\x24\xb0\x25\x53\xea\xc6\x06\xe7\x02\x91\x98\x54\xfc\x0c\xc5\x2b\x35\x24\x91\xd9\x8a\x89\xa1\xbd\x4c\xc6\xd9\xff\x5f\x7d\xfd\x07\x7d\xbd\x4d\x38\x7e\xf8\x78\xea\x16\x2c\x0e\x69\xb5\x39\x0b\x84\xd6\x18\xd8\x89\xf4\x0b\x4f\xc8\xfc\xbf\x7a\xec\x60\x87\x31\x1e\x2e\x8c\xc3\xcf\xdb\xa1\x5b\x85\x5f\xbf\xfe\x9f\xe6\xe7\xd5\xc6\x32\xaf\xaf\x3e\xac\x9a\x4b\x5f\xf4\xce\xa2\xf1\xa2\x3e\x2c\x17\x75\xe7\x79\x22\x69\xbe\xac\x43\x64\x01\x7a\x0f\x76\x53\x04\x56\xbd\x62\xa5\x44\x50\x9d\x6a\xae\x44\xd0\x88\x3a\x40\xde\xac\xd9\x84\x5c\x93\x52\xe6\xf1\xdc\x3a\xd4\x15\xfa\x66\x91\x81\xda\xf6\x4e\x04\x4b\x54\x4d\x32\xe5\xfe\xb3\xbb\x98\x85\xb1\x66\xdf\x32\x65\xf3\xb8\xc0\xe7\x3e\xf3\xd3\xb7\x1f\xf3\x98\xf9\x61\x2a\x94\xa7\x25\x0a\x26\x4b\x1e\xa6\xda\x32\x1a\x28\x6d\x67\xaf\x41\x80\x6c\x3a\x4f\x89\x2f\x24\xa9\xf4\x44\x96\x19\x27\xdc\xc1\x24\x43\xf6\x5f\x2a\x91\xb8\x0d\x6d\xc6\x94\x07\x7e\x17\x45\x9f\x68\xe7\xe6\xa7\x6f\x2c\x9d\xc7\x2c\xcb\xb9\x72\xb8\xec\x76\xd5\x3c\x8e\xa6\x8c\x79\x4f\x75\x15\x1b\xd8\xb3\x10\x18\xf8\x9b\xc7\x3c\x10\xa9\x46\x5c\xfa\xec\x52\x96\x49\x2f\xa4\x3d\x5b\x01\x93\x38\x81\x3b\x99\x32\x35\xf0\xf9\x5b\xb1\x89\x9d\xf1\x17\xd5\xd2\xfc\x59\x64\xc2\x3a\x8b\xca\xd5\xb5\x6a\x03\x01\xf7\x89\x60\xe4\xd0\x12\x38\x92\x29\xbb\xfd\xf0\x51\x7d\x37\xe5\x1e\xc9\x22\x91\x8c\x03\xed\x1a\x12\xdc\x51\xbb\x70\x1e\xc6\x7a\xb3\x46\xeb\x73\xf9\x5d\x42\xc5\x46\xb4\x61\x93\x37\x46\x06\xf2\xd3\x68\x14\xc8\x88\xc7\xc1\x50\xa6\xc1\x28\x79\x09\x46\xf3\x38\xf4\xa4\x2f\x46\xff\xf3\x2d\x1b\xab\xa7\x2c\x62\x4d\xd3\xe6\x8e\x6d\x3b\xab\xce\xac\x7a\x71\xe1\xcb\xae\x58\xff\x8a\x8e\xa9\xf5\x65\x8a\x6f\xf4\xd2\x93\x5d\x1a\x78\x38\xb2\x0b\x03\xbf\xce\x8f\x2d\xbe\xd4\x7f\x37\x76\xd5\x44\xa8\xc9\x41\x15\x49\x8f\x47\xd9\x9c\x50\x1d\xf7\xd4\x82\xb1\xbd\xa7\xfb\x97\xfa\xed\xa3\xfe\xed\x1d\xfd\xb6\x93\x6e\xef\xfa\xd1\x2f\xbd\x5e\x67\x02\x94\xf9\x9a\xd6\xb4\xb1\x25\x5f\xb8\x1c\xcc\x9f\xb7\xc3\xda\xea\x1c\xcf\x2f\xde\xb6\xfc\x86\x7d\xe4\x5d\x8a\x6d\xd2\x5f\xde\xbe\xdc\xf6\x7d\xe7\xc5\xf7\xba\x74\x9d\xd7\x4c\x53\xf8\xd1\xf0\xa3\xcf\xd8\x8f\xbe\xa0\xdc\x09\x1b\xdc\xfc\x9f\xb7\xa3\x4c\x44\xd3\x3d\x17\xf3\x47\x11\x4d\xcf\x72\x2d\xaf\x6f\xd8\x29\x16\xf0\xba\xda\xb4\xb4\x7e\xd7\x17\x7f\xcc\xe5\x7b\x7d\xa9\x47\x5b\xbd\xd7\x15\xdb\xa5\xc5\xbb\x7e\x86\x62\xed\xc6\xda\x7d\xc6\x6b\xf7\xc9\x16\xc7\x74\x1e\x89\xfd\xd6\xc6\x1f\xea\x97\x67\xb8\x34\x56\xdb\x75\xe2\x95\xd1\xad\x4c\xfb\x0b\x63\xb5\xf4\x96\xd6\xc5\xe5\x42\xdb\x58\x16\x17\x4b\xed\xe8\xaa\x58\x9d\x9c\x58\x14\xb1\x28\x62\x51\x6c\x6a\x51\xdc\x73\xb7\x78\x96\x3b\xc5\xee\xec\x12\x4f\xb8\x43\x6c\x7f\x77\x78\x82\x9d\x61\x1f\x76\x85\xd8\x11\x62\xf1\xc3\xe2\xd7\xd0\xe2\x27\x33\x8f\x47\x61\x1c\x20\x18\x42\xaf\x8f\xb6\x3f\xea\xe4\x70\xfb\x79\x1f\x03\x21\x8a\xb1\x46\xfc\x43\x65\xac\xd7\x44\x3f\xd8\xaf\xf4\x3e\xf6\xc1\x1d\x7b\xfa\x8a\xb2\x7e\x51\x22\x7d\xfb\x19\x2d\x94\x35\x73\x42\x1f\x27\x4d\xcd\xe1\x1b\x7b\xf8\xc9\xde\xaf\xf5\xff\x2b\x1e\x37\x96\xfe\x5d\xf1\xb8\x33\xcf\x80\xb1\x61\xfa\xa8\x2e\xab\xcc\x9f\x9a\x5e\x6a\x21\x19\xc6\xd0\xa9\xab\x9a\x4f\x35\x35\xd9\x69\x6e\xd5\x39\x7b\x7b\x64\xc3\x70\x6c\x6e\xe1\xe3\xd5\x4f\xa9\xc6\xfd\x3c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x0c\xe4\xc6\x40\x6e\x8c\x8d\xe0\xbc\xfe\x0c\x11\x38\xdb\x09\x38\x5b\x79\x44\xa9\xbe\xbf\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\xc0\x8c\x8e\xca\x8c\xc0\x6c\xc0\x6c\xc0\x6c\x5a\x67\x36\x88\xa7\xd9\x31\x9e\x66\xfd\x01\x87\x0e\x40\xa8\x03\x89\x51\x71\xc4\xe1\x20\x66\x74\xa4\xe3\x0e\x5b\xcc\x2b\x35\x4a\x88\x67\x47\x3c\x7b\x67\xe2\xd9\x4f\x67\x62\x1b\x3f\x80\xb3\x7d\x99\x0d\x1e\xc1\xd9\xb6\xd0\xd6\x0f\xe1\x1c\xb4\x8e\xe8\x7d\xcf\x72\x85\xf5\xdf\x99\x27\xa3\x48\x78\xd6\xbb\xe9\xff\xaa\xa2\x9b\x55\x59\x55\xbe\x14\x4d\x84\x26\x01\x4d\x02\x9a\x04\x34\x09\x68\x12\xd0\x24\xa0\x49\x40\x93\x80\x26\x01\x4d\x02\x9a\x04\x34\x09\x68\x12\xd0\x24\xa0\x49\x40\x93\x38\xea\xf1\xf1\xc7\x9c\xe7\xf3\xec\x60\x82\xa4\xd7\x8c\x12\xdb\xf4\xeb\x94\xef\xa5\x66\x43\x3e\x20\x4a\x59\x7f\xe9\x57\x6d\xb0\x32\xd9\xce\x2a\x34\xe9\x3f\xc6\x53\x8d\x3a\x5e\x38\x71\x9d\xe5\x7a\xd4\x5e\x3a\x79\xfa\xff\x90\xc7\x3c\x51\xff\xe3\x5e\x3e\x64\xec\x41\xfd\x6b\xff\x3e\xe3\x21\x51\xfe\x8c\x79\xd1\x3c\xcb\x45\x7a\x63\x7a\xdf\x33\x7b\x54\x16\x85\x2f\x82\x0d\x8a\x6a\x0f\xd4\xe2\x9b\xa4\xc2\xe3\xa4\xe0\x8c\x23\x1e\xc7\x66\x39\x25\x93\xc6\x23\xb5\x7e\xdd\x0e\x6f\x3f\x3a\xf3\x8a\x8a\x6e\xc2\x24\x17\x0d\x2b\x28\xe2\xc4\x36\x51\xd5\x86\x3d\xe8\x56\xa9\xb7\x22\xc9\x6c\x0b\x8c\xe3\x37\xcf\x94\x3f\xc7\x63\xed\x80\x6b\x43\xbb\x5f\x63\x54\x19\xdd\xd2\x2c\x0e\x31\xc4\xea\x65\x6c\xd7\xf6\xce\x57\xbe\xfd\x49\xc4\x3d\x71\x86\x06\x80\xda\x05\x79\x18\xf2\x30\xe4\x61\xc8\xc3\x27\x50\x6a\xe7\xdd\x12\x6a\xcf\x21\xe4\x67\x85\x38\xdb\xa8\x4d\x6f\x62\x9b\x76\x4f\x75\xfc\x4e\xbd\x9f\xc1\x88\xb7\x66\xc4\x6b\xc9\x88\x0b\x3b\xc2\x98\x65\x1a\x54\xb0\x89\x98\x4a\xcd\x0f\x2d\xe4\x2b\x55\x76\xc3\x55\xa9\x35\x8e\x95\x8e\x65\x7c\x13\x8b\x80\x53\x9f\x99\xf2\x5c\x6b\xae\x81\x7f\x31\x5a\xe6\xc5\x0b\x67\x33\xe1\xab\xf5\x22\x7a\x33\x62\xad\x2b\xc5\xc7\x61\x74\x6d\xe0\x06\xa1\x35\x16\xa4\xca\x1d\x4b\x44\x1a\x4a\xbf\xc0\x39\xa5\x67\xa6\x5a\x5b\x74\xdc\x3c\x53\x95\x74\xa1\x1c\x57\xbf\xb4\x0d\x32\x85\x4c\x1d\xcf\x3b\x54\x3f\xa0\x7a\xce\x04\x8f\x57\xd6\xb1\x1c\x04\xaa\xca\x98\x6a\xd2\x20\xde\x29\x3d\xff\x4f\x2c\x89\x04\xcf\x44\xa1\x68\x8c\x53\x99\xf0\x80\x86\x6a\x2c\xa3\xd0\x7b\xbb\xd6\xbd\xa5\x19\xbe\x6d\xb5\x5f\x3c\x40\xef\x12\x7e\x1f\x32\x67\xe3\xe5\x8b\x44\xc4\xbe\x88\xf3\x52\x47\x13\x4c\xa6\xc9\x33\x8f\x55\xdb\xd5\x00\xa4\x73\x31\x9a\xf2\xc8\x6a\xda\x4f\x57\xfa\xe3\xa7\x2b\x36\x0d\x63\x1e\x85\xff\x5a\x5d\x6a\x22\x18\xf7\x7d\x82\xdd\x23\x0d\x8e\xfc\x12\x77\xea\xc7\x0f\xb2\xf2\x47\x5a\x47\x1e\xb2\x87\x90\xde\x12\xa7\xea\x32\x5d\x6e\x1b\xa9\x19\x3a\xa4\x43\xcb\xd8\xf4\x0e\xcb\xfc\xd9\x19\x01\x5d\xb1\x7b\xdb\xa4\x9d\xfa\xbf\xde\xb6\x50\xed\xd4\x2b\xfd\x2c\x5f\x59\xc0\xd3\x09\x0f\x2a\x81\x3c\xc5\x7b\x29\xd2\xa9\x4c\x67\xaa\xdb\x56\x36\xe9\xfb\x42\xed\xea\x5b\x44\x2f\x89\x9d\xe1\x89\x6e\x7e\xa8\x66\x9f\x17\xfa\xa5\xaa\x4c\xea\x20\xe9\xfc\xc5\x30\x64\x94\xb4\x94\x3e\xb5\xfa\xdf\xd0\xe9\x6f\xab\x1c\x59\x6e\x57\xee\xa2\xab\x85\x0d\x99\x0e\xea\x22\x7f\xc9\x35\x4e\x03\xdd\x86\x01\xbb\x31\x73\xa4\x3a\x87\xb2\xcf\x6c\xf0\x07\xf7\x5e\xd4\x1a\x1d\xfb\xea\x5b\x3c\x8a\xe4\x2b\x7d\x69\xa1\xe3\xb4\xb2\x6b\xde\xa7\xea\x43\x6c\x0b\x26\xc5\x93\x3e\xb3\xc1\x57\x99\x0a\xe7\xb1\xcc\xe3\x99\xc7\x7d\xd5\x7a\xd3\x3f\x64\xec\xf5\xf3\x32\x6d\x3d\x97\x1e\x38\x2d\x9e\x51\x81\x49\x0b\x13\xad\x2b\xd4\xb2\xb1\x60\xbb\xb6\x20\x69\xdb\x68\x34\xf7\x9e\x97\x6b\x4c\xa2\x0c\xc5\x20\x69\x8c\xbd\xd7\x4e\x7d\xd1\x83\xbb\xa1\xc2\x7e\x5b\xe1\xcc\xcd\x44\x1a\x88\xfa\x8f\xb3\x3c\xe5\xb9\x08\x42\xef\x66\xe9\x8b\x5d\x75\x1a\xa9\x8a\x1d\xe4\x00\x6b\x66\xf1\x98\xa6\x02\x7c\x47\x00\x80\x96\x00\xc0\x42\xa8\x84\x9d\xd3\x3a\x9c\x27\xd1\xd2\xa9\x8e\x09\x60\xef\xdc\x57\x96\x3e\xd3\x46\xe0\x3d\xad\xf8\x3a\x60\x95\x47\xf4\x4b\xe5\x2f\xeb\x5f\xd3\x37\xc8\x77\xcd\xd8\xbb\x3f\x33\x19\xd3\x0c\xbf\x66\x7f\x2b\x23\x62\xfe\xff\x68\x4d\x4b\xf9\xc7\xf7\x0d\x24\x62\xaf\x73\x43\xbf\xca\xd4\x23\x0f\x3c\x90\x34\x42\x92\x3d\x5d\x4d\xd5\xdf\x9e\xae\xd8\x5d\xa5\xc9\x43\xf6\x2d\x37\xee\x32\xb1\x6c\x33\xe3\x6f\xb8\x47\xbd\x44\xd1\x9f\x51\xe8\x19\xcf\x85\xd0\xb7\x7c\x35\x03\xa0\xa3\x23\x13\x21\x93\x48\x0c\x99\x2e\x73\x1a\xf1\xa0\x18\x78\x12\xc0\x57\xf6\x56\x51\xbc\xd3\x07\xea\xf7\xdd\xc2\x32\x07\x21\x12\xa3\xa9\xf6\x48\x7f\x24\x03\x60\xec\x56\x7d\xb1\x8e\xd0\xd8\xbc\xc6\x08\x09\x74\x5f\x09\x74\x94\x69\xef\x70\xad\x12\xaa\xbf\x63\xc7\xf8\xbc\x24\x91\x5d\x35\x51\xe3\x4d\xf7\xd7\xc2\x74\x4b\x63\x3b\xe7\xa9\xb5\x87\xda\x56\xcc\x2e\x68\x6e\x70\xb9\x2f\xce\xe5\x86\xe6\x76\x06\x9a\xdb\xb6\xcc\xe6\x30\xcb\x0f\x7a\xd3\xd5\x75\x05\x0c\x07\x0b\x4a\x57\x16\x14\x30\x1c\x30\x1c\x30\x1c\x30\x9c\xbe\x30\x1c\x3a\x51\xb1\x7b\x6e\x6d\x73\x6a\x2f\xf6\xc3\x9f\xa1\x3f\xe7\x91\x7b\x48\x84\x17\x87\x69\x6b\xc6\x75\xe8\x04\x0f\x7c\x2a\xc2\x0e\x06\xf4\xcc\x41\x99\xac\xa0\x72\xfa\xbc\xf0\x47\x58\x18\x67\xb9\xe0\xd4\xe2\x0b\xce\xd4\xfd\xba\xe4\x91\xad\x49\x9c\xd5\xc2\xb5\x78\x6b\x7c\x30\x3a\x49\xf4\xf0\x53\xc4\x87\x27\xf0\xa2\x56\xe3\x56\x3c\x64\x13\x41\x36\x11\x64\x13\x41\x36\x11\x64\x13\x41\x36\x11\x64\x13\x41\x36\x11\x64\x13\x41\x36\x11\x64\x13\x39\xb3\x6c\x22\xb8\x15\x0f\xd9\x4c\x90\xcd\xe4\xe2\xb2\x99\xac\x07\x75\x4d\xdd\x8d\x07\x7e\xd7\x39\x7e\xb7\x51\x51\xfd\x4b\x73\x2f\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\x3b\x90\xbb\xae\x90\xbb\x0b\x8a\x2b\x02\x58\x04\x58\x04\x58\xbc\x3c\xb0\xb8\x29\x9d\xad\x19\x4d\x07\x2a\xc6\xd6\x7a\xcb\x29\x7b\x09\xe3\xda\x53\x17\x8d\xc0\xc5\xeb\xd2\x77\x23\xff\xd4\xac\xf3\xca\xfd\x2b\x9d\xd2\x41\x65\x5b\xe1\x3c\x1b\x68\x72\x8f\x54\x1d\x3d\xc6\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x67\x84\x24\x71\xda\x12\x54\x14\x54\x14\x54\x14\x54\x74\x2b\x2a\xfa\x61\x22\x72\x7e\x3b\xaa\xc5\x9b\x81\xc8\xab\xde\x8b\x6e\xca\x86\x8c\x31\x07\xa5\x6f\x39\x7d\x5e\x18\xdd\x29\xcb\xbc\x30\x10\xb9\x4b\x0b\xf5\xd7\xee\xc6\xdf\x7e\x38\xdd\xd2\x22\x1d\x74\x4a\xa6\x88\xc9\x6d\x11\xe1\xaf\xb5\x53\x61\xe7\x08\x5b\xbd\x6b\x4b\x8d\x05\xb7\x3e\xc6\x06\xf8\x7d\x41\xe0\xb9\x6e\x36\xa9\x7e\x5b\x9e\x4e\x35\xfd\xd5\xc2\xc1\xf6\x6a\x0a\x0f\x5d\x9b\xba\x3c\x1e\x3b\xcd\xb7\x3a\x24\xdd\x66\x90\xac\x19\x04\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x60\x69\x9c\x71\x07\x74\x05\x74\x05\x74\x6d\x15\xba\x36\x75\xc4\x1d\x00\xae\x49\x00\xb7\xc7\x6d\x6d\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\x40\x48\xcd\x22\x24\x20\x1c\x20\x1c\x20\x9c\xd6\x11\x0e\x02\x6d\xf6\x0e\xb4\x91\xd9\x0a\x5a\xa5\x57\x39\xc6\xbb\x00\xa6\x9a\xa0\x48\xba\x3d\x8d\x70\xa4\xa3\xdf\x44\xba\x7e\xae\xe1\xf6\x38\xdc\x1e\x77\x59\xd7\x91\x6e\x7e\x1f\x8e\x74\x27\xe9\x56\x05\x7f\x58\x2e\xf8\xce\xf3\x44\x72\xec\x92\x0f\xba\x9f\x4d\x9e\x64\xa9\xd1\x9b\xa4\xe5\x5a\xeb\xbf\x33\x4f\x46\x91\xf0\xac\x2b\x74\x26\x0b\x8f\x6e\xdb\xf2\xc2\xf3\xa5\x68\x2c\xa4\x0c\x48\x19\x90\x32\x20\x65\x40\xca\x80\x94\x01\x29\x03\x52\x06\xa4\x0c\x48\x19\x90\x32\x20\x65\x40\xca\x80\x94\x01\x29\x03\x52\xc6\x51\x4f\xa7\x3f\xe6\x3c\x9f\x67\x07\x03\x25\xbd\x66\x94\x00\xa7\x87\x07\x86\x2f\x28\x1f\x4c\xa3\x01\xcf\x9b\x52\xef\x92\x15\xad\xe2\x93\x33\x41\x7b\xaa\x65\x47\x8e\x4c\xae\xb3\x66\x8f\xda\x73\x27\xef\xff\x1f\xf2\xa2\x27\xea\x7f\xdc\xcb\x87\x8c\x3d\xa8\x7f\xed\xdf\x67\x3c\x24\x5d\x20\x63\x5e\x34\xcf\x72\x91\xde\x98\x71\xf0\xcc\xbe\x95\x45\xe1\x8b\x60\x83\xa2\xda\x03\xb5\x20\xdb\x8c\xc7\x43\x36\x8e\x78\x1c\x9b\x25\x96\xcc\x1c\x8f\xd4\x9a\x76\x3b\xbc\xfd\xe8\x4c\x33\x2a\xba\x09\x33\x5d\x34\xac\x20\x8b\x13\xdb\x44\x55\x1b\xf6\xa0\x5b\xa5\x5e\x92\x24\xb3\x2d\x30\xce\xe0\x3c\x53\x3e\x1e\x8f\xb5\x53\xae\x8d\xef\x7e\x8d\x51\x65\x74\x50\xe5\x38\xc4\x42\xab\x77\xf3\x04\x46\x79\xbe\xd2\x22\x24\x11\xf7\xc4\xb9\x1a\x05\x6a\x1c\x94\x66\x28\xcd\x50\x9a\xa1\x34\x77\xc3\xf8\x2b\x33\xdc\x39\xb9\xf7\x6c\x62\x8b\xea\x24\xde\x46\x2d\x7e\x13\x9b\xbd\x7b\xaa\xe8\x77\x1a\x87\x0c\xd6\xbd\x35\xeb\x5e\xcb\x57\x5c\x64\x12\xc6\x2c\xd3\xb8\x83\x4d\xc4\x54\x6a\x0a\x69\x51\x61\xa9\xd5\x1b\x3a\x4b\xad\x71\xcc\x77\x2c\xe3\x9b\x58\x04\x9c\xfa\xcc\x94\xe7\x9a\x79\x2d\x1b\x14\xa3\x65\x5e\xc1\x70\x36\x13\xbe\x5a\x48\xa2\x37\x23\xf9\xba\x82\x7e\x1c\x46\xd7\x06\x91\x10\xa0\x63\x41\xaa\xdc\xb6\x44\xa4\xa1\xf4\x0b\x28\x54\x7a\x70\xaa\xb5\x45\xc7\xcd\x33\x55\x49\x17\xed\x71\xf5\x4b\xdb\x20\x53\xc8\xd4\xf1\xd5\x43\xf5\x03\xaa\xe7\x4c\xf0\x78\x65\x1d\xcb\x41\xa0\xaa\x8c\xa9\x26\x0d\x42\xa2\x7b\xe7\xaa\x97\x24\x12\x3c\x13\x85\x2e\x32\x4e\x65\xc2\x03\x1a\xaa\xb1\x8c\x42\xef\xed\x5a\xf7\x96\x56\x02\x6c\xab\xcb\xbb\x62\xf4\xbe\xe2\xf7\x21\x73\xb6\x6a\xbe\x48\x44\xec\x8b\x38\x2f\xd5\x38\xc1\x64\x9a\x3c\xf3\x58\xb5\x5d\x0d\x40\x3a\x17\xa3\x29\x8f\xac\x32\xfe\x74\xa5\x3f\x7e\xba\x62\xd3\x30\xe6\x51\xf8\xaf\x55\xb7\x26\x82\x71\xdf\x27\x64\x3e\xd2\xf8\xc9\x2f\xa1\xa9\x7e\xfc\x20\x2b\x7f\xa4\xd5\xe8\x21\x7b\x08\xe9\x2d\x71\xaa\x2e\xd3\xe5\xb6\x91\x26\xa2\x03\x43\xb4\x18\x4e\xef\xb0\xcc\x9f\x9d\x11\xd0\x15\xbb\xb7\x4d\xda\xa9\xff\xeb\x6d\x0b\xd5\x4e\xbd\xd2\xcf\xf2\x95\x05\x3c\x9d\xf0\xa0\x12\x18\x54\xbc\x97\x22\x9d\xca\x74\xa6\xba\x6d\x65\x93\xbe\x2f\xd4\xae\xbe\x45\xf4\x92\xd8\x19\x9e\xe8\xe6\x87\x6a\xf6\x79\xa1\x5f\x6a\xd3\xa4\x31\x52\xb4\x40\x31\x0c\x99\xc8\xad\x02\x67\x55\xc4\xa1\xd3\xdf\x56\x7f\xb2\xf4\xaf\xdc\x77\x57\x0b\x1b\x32\x1d\x2e\x46\x8e\x94\x6b\x9c\x06\xba\x0d\x03\x76\x63\xe6\x48\x75\x0e\x65\x9f\xd9\xe0\x0f\xee\xbd\xa8\x25\x3b\xf6\xd5\xb7\x78\x14\xc9\x57\xfa\xd2\x42\xc7\x69\x7d\xd8\xbc\x4f\xd5\x87\xd8\x16\x4c\x8a\x27\x7d\x66\x83\xaf\x32\x15\xce\x63\x99\xc7\x33\x8f\xfb\xaa\xf5\xa6\x7f\xc8\xd8\xeb\xe7\x65\xda\x7a\x2e\x3d\x70\x5a\x3c\xa3\x42\xa3\x16\x26\x5a\x57\xd8\x67\x63\x61\x7c\x6d\xa1\xd6\x93\x00\xd6\xdc\x7b\x5e\xae\x36\xe9\x3b\x14\xce\xa4\x89\xf8\x5e\xdb\xfa\x45\x87\xee\x86\x0a\xfb\x6d\x85\x6f\x37\x13\x69\x20\xea\x3f\xce\xf2\x94\xe7\x22\x08\xbd\x9b\xa5\x2f\x76\xda\x87\x4c\x16\x2f\xb9\xea\x12\x34\x58\x33\xa9\xc7\x34\x29\xe0\x4a\x02\x14\xb4\x04\x0a\x16\xe2\x2f\xec\x9c\xd6\x31\x42\x89\xd6\x63\x75\xa0\x01\x7b\xe7\xbe\xbc\xf4\x99\x36\x07\xef\xc9\x01\xd0\x51\xb0\x3c\xa2\x5f\x2a\xf7\x59\xff\x9a\xbe\x41\xae\x6c\xc6\xde\xfd\x99\xc9\x98\x66\xf8\x35\xfb\x5b\x99\x13\xf3\xff\x47\x6b\x64\xca\x3f\xbe\xdf\x8e\x60\xec\xe5\x95\x7e\x95\xa9\x47\x0e\x79\x20\x69\x84\x24\x7b\xba\x9a\xaa\xbf\x3d\x5d\xb1\xbb\x4a\x93\x87\xec\x5b\x6e\xbc\x67\x82\xe1\x66\xc6\xdf\x70\x8f\x7a\x89\x42\x4a\xa3\xd0\x33\x8e\x0c\xb1\x73\xf9\x6a\x06\x40\x87\x5c\x26\x42\x26\x91\x18\x32\x5d\xe6\x34\xe2\x41\x31\xf0\xa4\xaa\xaf\xec\xad\xa2\x78\xa7\x0f\xd4\xef\x3b\x88\x6f\x0e\xa2\x28\x6d\x5e\xce\xd7\xa0\xb2\x89\xcb\x36\xfa\x2e\xae\x8e\x32\xed\x3b\xae\xd5\x58\xf5\x77\xec\x40\x9f\xa1\xb0\xb2\x97\xda\x6a\xbc\xee\x9e\x9b\x9e\x0e\xaa\x77\x67\x3f\xdd\xf6\xd5\xf1\x8a\x19\x07\x35\x0f\x4e\xfa\x65\x3a\xe9\x50\xf3\xce\x4f\xcd\xdb\x16\xff\x1c\xb6\x2e\x00\x04\xed\x09\x82\x5a\x5c\x75\x80\x83\xb0\xd2\x74\x65\xa5\x01\x0e\x02\x0e\x02\x0e\x02\x0e\xea\x29\x0e\xa2\x03\x20\xbb\xe7\x12\x37\x87\x0c\x63\x3f\xfc\x19\xfa\x73\x1e\xb9\x67\x5a\x78\x71\xf6\xb7\x66\x70\x87\x4e\x94\xc2\xa7\x22\xbe\x61\x40\xcf\x1c\x94\xb9\x15\x2a\x87\xe5\x0b\x1f\x85\x85\x71\x96\x0b\x4e\xcd\xbe\xf4\xcc\xe4\xaf\xab\x5d\xb5\x35\x39\xc2\x5a\xb8\x1f\x70\x8d\x73\x46\x47\xa0\x1e\x7e\x8a\xf8\xf0\x5c\x65\xd4\x74\xdc\x0c\x88\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xe7\x98\x0b\x05\x37\x03\x22\x17\x0b\x72\xb1\x5c\x5c\x2e\x96\x2d\xe0\x5d\x53\xf7\x03\x82\xe9\x75\x98\xe9\x6d\x94\x5f\xff\xd2\x2c\x0c\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\xaf\x53\x34\xef\x82\xe2\x8f\x00\x1b\x01\x1b\x01\x1b\x2f\x14\x36\x6e\xca\xcd\x6b\x86\xd4\x01\x8d\xb1\x35\xe1\x72\xca\x5e\xc2\xb8\xf6\xd8\x46\x23\xc0\xf1\xba\x74\xe0\xc8\x49\x35\x8b\xbd\xf2\x01\x4b\xcf\x74\x50\xd9\x5b\x38\xcf\x06\xae\xdc\x1f\x57\xf6\x1b\x55\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x9e\x1b\xa6\xc4\x49\x4d\x90\x52\x90\x52\x90\x52\x90\xd2\xed\x49\xe9\x87\x51\x2d\xed\x0c\x44\x5e\xf5\x5e\x74\x53\x36\x64\xa0\x39\x28\x1d\x4c\x47\xf2\xcc\x7c\x58\x26\x87\x81\xc8\x97\xb8\xe1\x87\xbb\xf1\xb7\x1f\x4e\xb7\xb4\x88\x08\x9d\x92\x29\x94\x72\x5b\x4e\xf8\x6b\xed\x54\xd8\x39\x08\x57\xef\xda\x52\x63\xc1\xad\x8f\xb1\x81\x85\x5f\x1a\x87\x5e\x31\x9b\x54\xbf\x2d\x4f\xa7\x9a\xfe\x6a\xe1\x14\xfc\x8a\x44\x20\x1f\xea\x12\x81\xec\x34\xdf\xea\xb8\x74\xeb\xd1\xb3\x1f\x80\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x81\xa5\x71\x16\x1e\xd0\x15\xd0\x15\xd0\xb5\x5d\xe8\xda\xd4\x29\x78\x00\xb8\x26\x01\xdc\x1e\xd7\xc7\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x35\x8b\x90\x80\x70\x80\x70\x80\x70\x5a\x47\x38\x08\xb4\xd9\x3b\xd0\x46\x66\x2b\x68\x95\x5e\xe5\x18\xef\x02\x98\x6a\x82\x22\xe9\xf6\x34\xc2\x91\xda\xb9\xed\xb4\x76\xae\xe1\x0e\x3a\xdc\x41\x77\x81\xb7\x9d\xae\x7d\x1f\x8e\x79\xdb\xe9\xa6\x82\x3f\x2c\x17\x7c\xe7\x79\x22\x39\x76\xc9\x07\x5d\xf0\x26\x4f\xb2\xd4\xe8\x4d\xd2\x72\xad\xf5\xdf\x99\x27\xa3\x48\x78\xd6\x15\x3a\x93\x85\x47\xb7\x6d\x79\xe1\xf9\x52\x34\x16\x52\x06\xa4\x0c\x48\x19\x90\x32\x20\x65\x40\xca\x80\x94\x01\x29\x03\x52\x06\xa4\x0c\x48\x19\x90\x32\x20\x65\x40\xca\x80\x94\x01\x29\xe3\xa8\xa7\xd3\x1f\x73\x9e\xcf\xb3\x83\x81\x92\x5e\x33\x4a\x80\xd3\xc3\x03\xc3\x17\x94\x0f\xa6\xd1\x80\xe7\x4d\x99\x78\xc9\x8a\x56\xf1\xc9\x99\xa0\x3d\xd5\xb2\x23\x47\x26\xd7\x59\xb3\x47\xed\xb9\x93\xf7\xff\x0f\x79\xd1\x13\xf5\x3f\xee\xe5\x43\xc6\x1e\xd4\xbf\xf6\xef\x33\x1e\x92\x2e\x90\x31\x2f\x9a\x67\xb9\x48\x6f\xcc\x38\x78\x66\xdf\xca\xa2\xf0\x45\xb0\x41\x51\xed\x81\x5a\x90\x6d\x02\xe4\x21\x1b\x47\x3c\x8e\xcd\x12\x4b\x66\x8e\x47\x6a\x4d\xbb\x1d\xde\x7e\x74\xa6\x19\x15\xdd\x84\x99\x2e\x1a\x56\x90\xc5\x89\x6d\xa2\xaa\x0d\x7b\xd0\xad\x52\x2f\x49\x92\xd9\x16\x18\x67\x70\x9e\x29\x1f\x8f\xc7\xda\x29\xd7\xc6\x77\xbf\xc6\xa8\x32\x3a\xa8\x72\x1c\x62\xa1\xd5\xbb\x79\x02\xa3\x3c\x5f\x69\x11\x92\x88\x7b\xe2\x5c\x8d\x02\x35\x0e\x4a\x33\x94\x66\x28\xcd\x50\x9a\xbb\x61\xfc\x95\x19\xee\x9c\xdc\x7b\x36\xb1\x45\x75\x12\x6f\xa3\x16\xbf\x89\xcd\xde\x3d\x55\xf4\x3b\x8d\x43\x06\xeb\xde\x9a\x75\xaf\xe5\x2b\x2e\x32\x09\x63\x96\x69\xdc\xc1\x26\x62\x2a\x35\x85\xb4\xa8\xb0\xd4\xea\x0d\x9d\xa5\xd6\x38\xe6\x3b\x96\xf1\x4d\x2c\x02\x4e\x7d\x66\xca\x73\xcd\xbc\x96\x0d\x8a\xd1\x32\xaf\x60\x38\x9b\x09\x5f\x2d\x24\xd1\x9b\x91\x7c\x5d\x41\x3f\x0e\xa3\x6b\x83\x48\x08\xd0\xb1\x20\x55\x6e\x5b\x22\xd2\x50\xfa\x05\x14\x2a\x3d\x38\xd5\xda\xa2\xe3\xe6\x99\xaa\xa4\x8b\xf6\xb8\xfa\xa5\x6d\x90\x29\x64\xea\xf8\xea\xa1\xfa\x01\xd5\x73\x26\x78\xbc\xb2\x8e\xe5\x20\x50\x55\xc6\x54\x93\x06\x21\xd1\xbd\x73\xf3\x4b\x12\x09\x9e\x89\x42\x17\x19\xa7\x32\xe1\x01\x0d\xd5\x58\x46\xa1\xf7\x76\xad\x7b\x4b\x2b\x01\xb6\xd5\xe5\xd5\x31\x7a\x5f\xf1\xfb\x90\x39\x5b\x35\x5f\x24\x22\xf6\x45\x9c\x97\x6a\x9c\x60\x32\x4d\x9e\x79\xac\xda\xae\x06\x20\x9d\x8b\xd1\x94\x47\x56\x19\x7f\xba\xd2\x1f\x3f\x5d\xb1\x69\x18\xf3\x28\xfc\xd7\xaa\x5b\x13\xc1\xb8\xef\x13\x32\x1f\x69\xfc\xe4\x97\xd0\x54\x3f\x7e\x90\x95\x3f\xd2\x6a\xf4\x90\x3d\x84\xf4\x96\x38\x55\x97\xe9\x72\xdb\x48\x13\xd1\x81\x21\x5a\x0c\xa7\x77\x58\xe6\xcf\xce\x08\xe8\x8a\xdd\xdb\x26\xed\xd4\xff\xf5\xb6\x85\x6a\xa7\x5e\xe9\x67\xf9\xca\x02\x9e\x4e\x78\x50\x09\x0c\x2a\xde\x4b\x91\x4e\x65\x3a\x53\xdd\xb6\xb2\x49\xdf\x17\x6a\x57\xdf\x22\x7a\x49\xec\x0c\x4f\x74\xf3\x43\x35\xfb\xbc\xd0\x2f\xb5\x69\xd2\x18\x29\x5a\xa0\x18\x86\x4c\xe4\x56\x81\xb3\x2a\xe2\xd0\xe9\x6f\xab\x3f\x59\xfa\x57\xee\xbb\xab\x85\x0d\x99\x0e\x17\x23\x47\xca\x35\x4e\x03\xdd\x86\x01\xbb\x31\x73\xa4\x3a\x87\xb2\xcf\x6c\xf0\x07\xf7\x5e\xd4\x92\x1d\xfb\xea\x5b\x3c\x8a\xe4\x2b\x7d\x69\xa1\xe3\xb4\x3e\x6c\xde\xa7\xea\x43\x6c\x0b\x26\xc5\x93\x3e\xb3\xc1\x57\x99\x0a\xe7\xb1\xcc\xe3\x99\xc7\x7d\xd5\x7a\xd3\x3f\x64\xec\xf5\xf3\x32\x6d\x3d\x97\x1e\x38\x2d\x9e\x51\xa1\x51\x0b\x13\xad\x2b\xec\xb3\xb1\x30\xbe\xb6\x50\xeb\x49\x00\x6b\xee\x3d\x2f\x57\x9b\xf4\x1d\x0a\x67\xd2\x44\x7c\xaf\x6d\xfd\xa2\x43\x77\x43\x85\xfd\xb6\xc2\xb7\x9b\x89\x34\x10\xf5\x1f\x67\x79\xca\x73\x11\x84\xde\xcd\xd2\x17\x3b\xed\x43\x26\x2b\xaf\xbb\xea\x08\x34\x58\x33\xa9\xc7\x34\x29\xe0\x4a\x02\x14\xb4\x04\x0a\x16\xe2\x2f\xec\x9c\xd6\x31\x42\x89\xd6\x63\x75\xa0\x01\x7b\xe7\xbe\xbc\xf4\x99\x36\x07\xef\xc9\x01\xd0\x51\xb0\x3c\xa2\x5f\x2a\xf7\x59\xff\x9a\xbe\x41\xae\x6c\xc6\xde\xfd\x99\xc9\x98\x66\xf8\x35\xfb\x5b\x99\x13\xf3\xff\x47\x6b\x64\xca\x3f\xbe\xdf\x8e\x60\xec\xe5\x95\x7e\x95\xa9\x47\x0e\x79\x20\x69\x84\x24\x7b\xba\x9a\xaa\xbf\x3d\x5d\xb1\xbb\x4a\x93\x87\xec\x5b\x6e\xbc\x67\x82\xe1\x66\xc6\xdf\x70\x8f\x7a\x89\x42\x4a\xa3\xd0\x33\x8e\x0c\xb1\x73\xf9\x6a\x06\x40\x87\x5c\x26\x42\x26\x91\x18\x32\x5d\xe6\x34\xe2\x41\x31\xf0\xa4\xaa\xaf\xec\xad\xa2\x78\xa7\x0f\xd4\xef\x3b\x88\x6f\x0e\xa2\x28\xad\xdf\xd0\xd7\x8c\xb2\x89\xcb\x36\xfa\x2e\xae\x8e\x32\xed\x3b\xae\xd5\x58\xf5\x77\xec\x40\x9f\xa1\xb0\xb2\x97\xda\x6a\xbc\xee\x9e\x9b\x9e\x0e\xaa\x77\x67\x3f\xdd\xf6\xd5\xf1\x8a\x19\x07\x35\x0f\x4e\xfa\x65\x3a\xe9\x50\xf3\xce\x4f\xcd\xdb\x16\xff\x1c\xb6\x2e\x00\x04\xed\x09\x82\x5a\x5c\x75\x80\x83\xb0\xd2\x74\x65\xa5\x01\x0e\x02\x0e\x02\x0e\x02\x0e\xea\x29\x0e\xa2\x03\x20\xbb\xe7\x12\x37\x87\x0c\x63\x3f\xfc\x19\xfa\x73\x1e\xb9\x67\x5a\x78\x71\xf6\xb7\x66\x70\x87\x4e\x94\xc2\xa7\x22\xbe\x61\x40\xcf\x1c\x94\xb9\x15\x2a\x87\xe5\x0b\x1f\x85\x85\x71\x96\x0b\x4e\xcd\xbe\xf4\xcc\xe4\xaf\xab\x5d\xb5\x35\x39\xc2\x5a\xb8\x1f\x70\x8d\x73\x46\x47\xa0\x1e\x7e\x8a\xf8\xf0\x5c\x65\xd4\x74\xdc\x0c\x88\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xc8\x85\x82\x5c\x28\xe7\x98\x0b\x05\x37\x03\x22\x17\x0b\x72\xb1\x5c\x5c\x2e\x96\x2d\xe0\x5d\x53\xf7\x03\x82\xe9\x75\x98\xe9\x6d\x94\x5f\xff\xd2\x2c\x0c\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\x0f\x34\xaf\x53\x34\xef\x82\xe2\x8f\x00\x1b\x01\x1b\x01\x1b\x2f\x14\x36\x6e\xca\xcd\x6b\x86\xd4\x01\x8d\xb1\x35\xe1\x72\xca\x5e\xc2\xb8\xf6\xd8\x46\x23\xc0\xf1\xba\x74\xe0\xc8\x49\x35\x8b\xbd\xf2\x01\x4b\xcf\x74\x50\xd9\x5b\x38\xcf\x06\xae\xdc\x1f\x57\xf6\x1b\x55\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x9e\x1b\xa6\xc4\x49\x4d\x90\x52\x90\x52\x90\x52\x90\xd2\x3a\x52\x3a\x21\x2a\x5a\xcb\x37\x03\x4a\xd1\x3d\x95\xe9\xac\xe8\x73\xce\x34\x17\x5a\x9f\x76\xe6\xa0\x1c\x30\x27\x49\x2e\x33\xb1\x4c\xb1\x0a\x08\x03\x91\xff\x41\x8c\x70\xfc\xed\x3f\xa6\xdd\x2d\x82\xbf\xa2\xd4\x6d\xb1\xdf\xaf\x85\x91\xfd\x79\xbb\x7e\x70\x2b\xce\xa8\x9e\x99\xe7\x39\xb2\xff\xf7\xf3\xb6\x7e\x70\xff\x7b\x7b\x37\xfe\xf6\xc3\xe9\x80\x76\x87\xd8\x96\x4c\x31\xb0\x07\x8c\xf4\xff\x2b\x27\xf5\xe1\xd1\x7a\x3f\x9d\x9a\xb5\xd5\x7a\x7f\x56\xa5\xf8\x53\x4e\xce\x5b\x0d\xa8\x9f\x04\xaa\x63\xcc\x2c\xf8\x53\x4e\x5a\xc8\x30\x30\xa4\xba\xa8\xb1\xff\x53\x4e\x76\x1a\xf3\x3a\xa8\xbf\x7b\xe8\xf1\xc4\x74\xb3\xa1\xf9\x7a\xf8\x1d\x72\x7f\x0b\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x0f\x68\x8f\x4c\x01\x40\xd2\x40\xd2\x40\xd2\xc7\x46\xd2\x3f\x6f\xeb\x62\x75\x41\xb9\x0e\xa4\x5c\x65\x70\xab\xee\x0f\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x1e\x50\x9e\xa3\x52\x1e\x50\x16\x50\x16\x50\x96\xd6\x29\xcb\x45\x47\xb3\xc8\x6c\x05\x31\xd2\xeb\x14\xe3\x6d\xc3\xa1\xbd\x49\x8e\xae\xf0\x76\x2c\xe7\x18\x57\xa6\xba\xe3\x8d\x9b\xea\x70\x53\xdd\xd9\xdf\x89\xba\x38\xe1\x9b\xbb\xf4\x74\xc5\x93\x3f\x2c\x3f\xf9\xce\xf3\x44\x72\xf0\xa3\x0f\xba\xa9\x4d\x1e\xc7\x22\xeb\xdd\xc0\x72\xb5\xf4\xdf\x99\x27\xa3\x48\x78\x76\xcd\xef\x8b\x7d\xd6\x95\x37\xf6\xf9\x4b\xd1\x04\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\x77\x50\xf7\xc6\x0e\x14\x3f\xe6\x3c\x9f\x67\x07\x33\x1f\xbd\x66\x94\x08\xa6\x8b\xe7\x4b\x2f\x28\xb9\xca\x6e\xf1\xb1\x9b\xf2\xd6\x92\x1d\xac\x02\x90\xbe\xe0\x35\x55\xf5\x43\x03\x59\xeb\x2c\xca\xa3\xf6\x9e\xc9\x03\xff\x87\x3c\xd9\x89\xfa\x1f\xf7\xf2\x21\x63\x0f\xea\x5f\xfb\xf7\x19\x0f\x89\x70\x67\xcc\x8b\xe6\x59\x2e\xd2\x1b\xd3\x93\x9e\xd9\x3b\xb2\x28\x7c\x11\x6c\x50\x54\x71\xa0\x16\x45\x9b\xf0\x77\xc8\xc6\x11\x8f\x63\xb3\xcc\x91\xa9\xe1\x91\x5a\x57\x6e\x87\xb7\x1f\x9d\x99\x40\x45\x37\x61\x2a\x8b\x86\x15\x74\x6f\x62\x9b\xa8\x6a\xc3\x1e\x74\xab\xd4\x3c\x4e\x32\xdb\x02\xe3\x90\xcd\x33\xe5\x67\xf1\x58\x3b\xc6\xda\x00\xee\xd7\x18\x55\xc6\x29\x78\xfd\x21\x66\x50\xbd\x3e\xc7\xb0\x7c\xf3\x95\x6f\x65\x12\x71\x4f\xf4\xf6\xc5\xa4\xda\x43\x98\x84\x30\x09\x61\xf2\xdc\x84\xc9\x83\xd4\xc3\xf9\x29\xc4\xc3\xfe\x04\x74\x54\x04\xc3\xbd\xed\x66\x13\x5b\x87\x7b\xaa\xc9\x77\xea\xc9\x0c\x26\xb4\x35\x13\x5a\xbb\x5b\x77\x37\xe0\x61\xcc\x32\xbd\x79\x66\x13\x31\x95\x9a\x69\x59\xf0\x54\x2a\xbf\x86\xf5\x51\x6b\x1c\x1b\x19\xcb\xf8\x26\x16\x01\xa7\x3e\x33\xe5\xb9\xb6\x54\x43\xe8\x62\xb4\xcc\x4b\x14\xce\x66\xc2\x57\xd6\x3a\x7a\x33\x02\xa2\x2b\x0f\xc7\x61\x74\x6d\x36\xdc\x84\x7b\x58\x90\x2a\xf7\x25\x11\x69\x28\xfd\x02\x31\x94\x9e\x8c\x6a\x6d\xd1\x71\xf3\x4c\x55\xd2\x05\x45\x5c\xfd\xd2\x36\xc8\x14\x32\x75\xbc\xce\x50\xfd\x80\xea\x39\x13\x3c\x5e\x59\xc7\x72\x10\xa8\x2a\x63\xaa\x49\x83\xc8\xe1\xde\xb9\xb3\x23\x89\x04\xcf\x44\x41\xd9\xc7\xa9\x4c\x78\x40\x43\x35\x96\x51\xe8\xbd\x5d\xeb\xde\xd2\x5c\xd9\xb6\xba\xbc\xf4\x43\x7b\xc8\xbf\x0f\x99\xb3\xe9\xf0\x45\x22\x62\x5f\xc4\x79\xa9\xed\x08\x26\xd3\xe4\x99\xc7\xaa\xed\x6a\x00\xd2\xb9\x18\x4d\x79\x64\x75\xd6\xa7\x2b\xfd\xf1\xd3\x15\x9b\x86\x31\x8f\xc2\x7f\xad\x56\x32\x11\x8c\xfb\x3e\x01\xd8\x91\x86\x19\x7e\x89\xe0\xf4\xe3\x07\x59\xf9\x23\xad\x6d\x0e\xd9\x43\x48\x6f\x89\x53\x75\x99\x2e\xb7\x8d\x08\xbb\x0e\x33\xd0\xd2\x2a\xbd\xc3\x32\x7f\x76\x46\x40\x57\xec\xde\x36\x69\xa7\xfe\xaf\xb7\x2d\x54\x3b\xf5\x4a\x3f\xcb\x57\x16\xf0\x74\xc2\x83\x4a\xa0\x48\xf1\x5e\x8a\x74\x2a\xd3\x99\xea\xb6\x95\x4d\xfa\xbe\x50\xbb\xfa\x16\xd1\x4b\x62\x67\x78\xa2\x9b\x1f\xaa\xd9\xe7\x85\x7e\xa9\x74\x92\x62\x45\xda\x73\x31\x0c\x19\x25\x4f\xa4\x4f\xad\x26\x35\x74\xfa\xdb\xaa\x19\x96\x25\x95\x3b\xc8\x6a\x61\x43\xa6\x03\x80\xc8\x5b\x71\x8d\xd3\x40\xb7\x61\xc0\x6e\xcc\x1c\xa9\xce\xa1\xec\x33\x1b\xfc\xc1\xbd\x17\xb5\xaa\xc6\xbe\xfa\x16\x8f\x22\xf9\x4a\x5f\x5a\xe8\x38\xad\x36\x9a\xf7\xa9\xfa\x10\xdb\x82\x49\xf1\xa4\xcf\x6c\xf0\x55\xa6\xc2\x79\x2c\xf3\x78\xe6\x71\x5f\xb5\xde\xf4\x0f\x19\x7b\xfd\xbc\x4c\x5b\xcf\xa5\x07\x4e\x8b\x67\x54\xd0\xc7\xc2\x44\xeb\x0a\x49\x6b\x2c\x30\xab\x2d\x70\x77\x1c\x5c\xa7\xbe\xb5\x54\x2f\x92\x03\x28\xfa\x45\x03\xd4\x8d\xfb\xd7\x45\x9f\xeb\x86\x1e\xfc\xdb\x0a\xf7\x6b\x26\xd2\x40\xd4\x7f\x9c\xe5\x29\xcf\x45\x10\x7a\x37\x4b\x5f\xec\x9e\x9b\x47\x95\x3b\xd9\xee\x78\xcd\xbc\x1b\xd3\xb0\xc2\xdb\xc3\x86\xb9\xa5\x0d\xf3\x82\xe0\x6e\xe7\xb4\x0e\x0a\x49\xb4\x00\xa7\x95\x65\xf6\xce\x7d\x25\xe9\x33\xfd\x92\xbf\xa7\x35\x5a\x87\x3d\xf2\x88\x7e\xa9\x3c\x5c\xfd\x6b\xfa\x06\x79\x9b\x19\x7b\xf7\x67\x26\x63\x9a\xe1\xd7\xec\x6f\x65\x24\xcc\xff\x1f\xad\xe9\x28\xff\xf8\x7e\xbb\x9d\xfc\x5e\x8e\xe3\x57\x99\x7a\xe4\x33\x07\x92\x46\x48\xb2\xa7\xab\xa9\xfa\xdb\xd3\x15\xbb\xab\x34\x79\xc8\xbe\xe5\xc6\xc1\x25\xf2\x6a\x66\xfc\x0d\xf7\xa8\x97\x28\x86\x30\x0a\x3d\xe3\x6b\x10\xa8\x95\xaf\x66\x00\x74\x8c\x5d\x22\x64\x12\x89\x21\xd3\x65\x4e\x23\x1e\x14\x03\x4f\x32\xea\xca\xde\x2a\x8a\x77\xfa\x40\xfd\xbe\x6f\xbc\x36\xd9\xfd\x7e\xb3\x76\xb4\x2a\xf7\x2e\x02\x5d\x04\xee\x1d\x38\xa1\x34\x36\xca\xb4\xb7\xb5\x56\x21\xd3\xdf\xb1\xa3\xd6\x47\x24\xbf\x5a\x2b\x33\x9e\x66\xd7\xdf\xe5\x53\x68\x2f\xfd\x1f\xf2\x5a\x15\xa6\x18\x75\x68\x31\x70\x2d\xcf\xd4\xb5\x84\x16\x73\x12\x2d\x66\x5b\x32\xb0\xbd\x75\x05\x23\x38\x95\xed\x06\x29\x80\x39\xef\x8a\x39\x07\x29\x00\x29\x00\x29\x00\x29\x38\x1e\x29\xa0\x78\xed\xf5\x39\x65\xcd\xf9\x9f\xd8\x0f\x7f\x86\xfe\x9c\x47\x6e\xb8\x39\x2f\x8e\xe5\xfd\x29\x27\x43\x47\xde\xfd\x54\x08\xc3\x03\xfa\xfd\xa0\x3c\xe2\x5c\x39\xb3\x5a\xac\xff\x2c\x8c\xb3\x5c\x70\x6a\xc3\x45\x66\xa8\x7d\x75\x7c\x1f\x93\x4a\xa6\x85\xcb\x98\xd6\x78\x3b\x74\xbe\xe0\xe1\xa7\x88\x0f\x4f\x69\x43\x6d\xc3\x2d\x4d\xc8\x24\x80\x4c\x02\xc8\x24\x80\x4c\x02\xc8\x24\x80\x4c\x02\xc8\x24\x80\x4c\x02\xc8\x24\x80\x4c\x02\xc8\x24\xd0\xcb\x4c\x02\xb8\xa5\x09\x99\x0c\x90\xc9\xe0\xe2\x32\x19\xd4\x01\xb4\x7d\xee\x6a\x02\x57\x6b\x9d\xab\x55\x34\xc5\xbf\x34\x8f\x02\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x6b\x97\xa8\x5d\x50\x1c\x0e\x80\x1f\x80\x1f\x80\xdf\xb9\x02\xbf\x4d\xc9\x27\xcd\x98\x39\xb0\x2f\xb6\x36\xda\xb9\xa8\xbd\x11\xe8\x77\x5d\x7a\x63\xe4\x71\x9a\x95\x5b\x39\x74\xa5\x9b\x39\xa8\x6c\x14\x9c\x67\x03\x19\xae\x48\x55\xd0\x63\x5c\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\x08\x54\xd8\x3b\x54\x88\x13\x82\x20\x93\x20\x93\x20\x93\x20\x93\x2e\x99\x9c\x88\x9c\xdf\x8e\x6a\xb1\x63\x20\xf2\xaa\x8f\xa2\x1b\xb1\x21\xef\xc8\x41\x49\x40\x4e\x9a\x5d\x84\xba\x63\x99\xed\x05\x22\x37\x64\x8f\xbe\x70\x37\xfe\xf6\xc3\xe9\x8a\x16\xe9\x9e\x53\x32\x45\x22\x6e\x8b\xf8\x7e\xd5\x0c\xbc\x97\xca\x78\x6d\xbc\xa9\xde\x79\xa5\xc6\x32\x5b\x3f\xc1\x22\xe7\x2f\xa9\x8c\x5b\x4e\xf2\x75\x3a\xe4\x5b\x33\x37\x54\x0f\xb9\x93\xc3\xf4\x49\x0b\xc7\xb0\x8b\xd4\x0e\x54\xee\xd0\x14\xbc\xd3\xbc\xa8\x43\xbf\x07\x07\x89\x96\x33\xc3\xa5\xbf\xba\x0b\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x81\x80\x71\xfe\x1a\xd0\x13\xd0\x13\xd0\xb3\x25\xe8\x59\x13\x8d\x09\x24\xd6\x38\x12\x2b\xc3\x21\xcb\xde\x01\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x3a\x2a\x00\x02\x80\x01\x80\x01\x80\x69\x1d\xc0\x20\xf4\xa5\x12\xfa\x22\xb3\x15\x54\x49\xaf\x5c\x8c\x9f\x02\x20\x1d\x46\x7b\x74\xcd\x77\xe4\x3d\xc7\xbc\x3f\xb1\x32\x27\x70\xf3\x16\x6e\xde\xba\x98\x8b\x14\x97\x66\x7e\xf3\x37\x2a\xae\x2a\xe2\xc3\x72\x11\x77\x9e\x27\x92\xe6\xca\x38\xe8\xce\x2a\x79\x64\x83\xae\xb7\x17\xcb\xf5\xd3\x7f\x67\x9e\x8c\x22\xe1\x59\x27\xa2\x77\xe6\x5d\xb7\xa2\x12\xe1\x5a\x34\x08\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\x1f\x60\xbf\xd1\xb3\xcf\x8f\x39\xcf\xe7\xd9\xc1\x38\x48\xaf\x19\x25\x94\xe9\xf4\x31\xd7\x0b\xca\x22\xb2\x67\x98\xee\xa6\xc4\xa9\x64\x19\xab\x48\xa4\x77\x08\x4e\xb5\xa1\xb1\x78\xda\x3a\xab\xf3\xa8\x3d\x6c\xf2\xd2\xff\x21\x6f\x77\xa2\xfe\xc7\xbd\x7c\xc8\xd8\x83\xfa\xd7\xfe\x7d\xc6\x43\x62\xe7\x19\xf3\xa2\x79\x96\x8b\xf4\xc6\xf4\xad\x67\xf6\x97\x2c\x0a\x5f\x04\x1b\x14\xd5\x1c\xa8\x85\xd3\xe6\xa5\x1d\xb2\x71\xc4\xe3\xd8\x2c\x85\x64\x8e\x78\xa4\xd6\x9e\xdb\xe1\xed\x47\x67\x92\x50\xd1\x4d\x98\xd3\xa2\x61\x05\x01\x9c\xd8\x26\xaa\xda\xb0\x07\xdd\x2a\x35\xc5\x93\xcc\xb6\xc0\x38\x6d\xf3\x4c\xf9\x62\x3c\xd6\xce\xb3\x36\x92\xfb\x35\x46\x95\x71\x52\x25\xe0\x10\x9b\xa9\xde\xac\xa3\x9a\xc9\xf9\xca\x37\x37\x89\xb8\x27\xfa\xff\xf2\x52\x33\xa0\x8f\x42\x1f\x85\x3e\x7a\x89\xfa\xe8\x41\xda\xe5\xfc\xa4\xd2\x65\x0f\xa3\x51\x96\xe5\xca\x83\xac\x6d\x13\x1b\x97\x7b\xaa\xd2\x77\xea\xdb\x0c\xf6\xb6\x35\x7b\x5b\xcb\x0a\xdc\xed\x7f\x18\xb3\x4c\x6f\xdd\xd9\x44\x4c\xa5\x26\x6a\x16\x7b\x95\xba\xb3\x21\x8d\xd4\x1a\xc7\xa0\xc6\x32\xbe\x89\x45\xc0\xa9\xcf\x4c\x79\xae\xe1\xd5\x08\xbc\x18\x2d\xf3\x5a\x85\xb3\x99\xf0\x95\x69\x8f\xde\x8c\x7c\xe9\x8a\xd3\x71\x18\x5d\x9b\xed\x3e\xc1\x26\x16\xa4\xca\x0d\x4a\x44\x1a\x4a\xbf\x00\x1c\xa5\x47\xa4\x5a\x5b\x74\xdc\x3c\x53\x95\x74\x31\x15\x57\xbf\xb4\x0d\x32\x85\x4c\x1d\x7f\x36\x54\x3f\xa0\x7a\xce\x04\x8f\x57\xd6\xb1\x1c\x04\xaa\xca\x98\x6a\xd2\x20\xf0\xb8\x77\x2e\xad\x48\x22\xc1\x33\x51\x30\xfe\x71\x2a\x13\x1e\xd0\x50\x8d\x65\x14\x7a\x6f\xd7\xba\xb7\x34\xd5\xb6\xad\x2e\x6f\xbd\xd0\xbe\xf7\xef\x43\xe6\x6c\x67\x7c\x91\x88\xd8\x17\x71\x5e\x2a\x4b\x82\xc9\x34\x79\xe6\xb1\x6a\xbb\x1a\x80\x74\x2e\x46\x53\x1e\x59\x95\xf7\xe9\x4a\x7f\xfc\x74\xc5\xa6\x61\xcc\xa3\xf0\x5f\xab\xd4\x4c\x04\xe3\xbe\x4f\xf8\x77\xa4\x51\x8a\x5f\x02\x40\xfd\xf8\x41\x56\xfe\x48\x2b\xab\x43\xf6\x10\xd2\x5b\xe2\x54\x5d\xa6\xcb\x6d\x23\xbe\xaf\x83\x1c\xb4\xb0\x4b\xef\xb0\xcc\x9f\x9d\x11\xd0\x15\xbb\xb7\x4d\xda\xa9\xff\xeb\x6d\x0b\xd5\x4e\xbd\xd2\xcf\xf2\x95\x05\x3c\x9d\xf0\xa0\x12\xb8\x52\xbc\x97\x22\x9d\xca\x74\xa6\xba\x6d\x65\x93\xbe\x2f\xd4\xae\xbe\x45\xf4\x92\xd8\x19\x9e\xe8\xe6\x87\x6a\xf6\x79\xa1\x5f\xea\xac\xa4\x97\x91\xf2\x5d\x0c\x43\x26\x72\xab\x26\x59\x45\x6c\xe8\xf4\xb7\xd5\x52\x2c\xc9\x2a\xf7\xa6\xd5\xc2\x86\x4c\x87\x28\x91\x6b\xe3\x1a\xa7\x81\x6e\xc3\x80\xdd\x98\x39\x52\x9d\x43\xd9\x67\x36\xf8\x83\x7b\x2f\x6a\xc1\x8d\x7d\xf5\x2d\x1e\x45\xf2\x95\xbe\xb4\xd0\x71\x5a\xeb\x34\xef\x53\xf5\x21\xb6\x05\x93\xe2\x49\x9f\xd9\xe0\xab\x4c\x85\xf3\x58\xe6\xf1\xcc\xe3\xbe\x6a\xbd\xe9\x1f\x32\xf6\xfa\x79\x99\xb6\x9e\x4b\x0f\x9c\x16\xcf\xa8\xf0\x96\x85\x89\xd6\x15\x8e\xd7\x58\xe8\x58\x5b\xd8\xf0\xc8\xb0\x50\x7d\x7d\xa9\x82\xa4\x4a\x50\x10\x8e\xe6\xb8\x5b\x6d\x88\x17\xdd\xb1\x1b\x7a\xf8\x6f\x2b\x3c\xb3\x99\x48\x03\x51\xff\x71\x96\xa7\x3c\x17\x41\xe8\xdd\x2c\x7d\xb1\xa3\x1e\x60\xe2\x5c\xc4\x73\xc2\xed\xf6\x9a\x29\x39\xa6\x81\x86\x23\x88\x8d\x77\x4b\x1b\xef\x85\x48\x00\x3b\xa7\x75\xb4\x4a\xa2\x95\x41\x2d\x79\xb3\x77\xee\x0b\x4a\x9f\xe9\x57\xfe\x3d\x2d\xdf\x3a\x1e\x93\x47\xf4\x4b\xe5\xfc\xea\x5f\xd3\x37\xc8\x11\xcd\xd8\xbb\x3f\x33\x19\xd3\x0c\xbf\x66\x7f\x2b\x93\x61\xfe\xff\x68\x0d\x49\xf9\xc7\xf7\xdb\x11\x81\xbd\x7c\xca\xaf\x32\xf5\xc8\x9d\x0e\x24\x8d\x90\x64\x4f\x57\x53\xf5\xb7\xa7\x2b\x76\x57\x69\xf2\x90\x7d\xcb\x8d\xef\x4b\xb8\xd7\xcc\xf8\x1b\xee\x51\x2f\x51\x70\x63\x14\x7a\xc6\x0d\x21\x3a\x2c\x5f\xcd\x00\xe8\xe0\xbf\x44\xc8\x24\x12\x43\xa6\xcb\x9c\x46\x3c\x28\x06\x9e\xf4\xdd\x95\xbd\x55\x14\xef\xf4\x81\xfa\x7d\x6f\x21\x71\x72\xf0\x75\x61\xc7\x56\xd3\xdc\x2b\x00\xca\xb2\x70\x0d\x40\x17\x04\xbc\x51\xa6\xfd\xb4\xb5\x3a\x9e\xfe\x8e\x1d\xc2\x5e\x8b\x02\x1b\x14\x3d\xe3\xb5\xf6\xe6\xe5\x3f\xa9\x42\x74\x46\xd3\x62\xb3\x56\x54\xcc\x0c\x28\x46\x70\x5c\xcf\xdd\x71\x85\x62\xd4\x35\xc5\x68\x5b\x48\xb1\x9b\x4d\x06\xae\xe8\x86\xc5\x07\xb4\x80\xed\xef\x8a\xed\x07\xb4\x00\xb4\x00\xb4\x00\xb4\x38\x09\xb4\xa0\x70\xf7\xcd\xb9\x80\xcd\x11\xaa\xd8\x0f\x7f\x86\xfe\x9c\x47\x6e\xc4\x3e\x2f\x4e\x36\x9a\x61\x1b\x3a\x3a\xf5\xa7\x42\xe1\x1e\xd0\x33\x06\xe5\x49\xf1\xca\xd1\xdf\xc2\x57\x60\x61\x9c\xe5\x82\x53\x83\x2e\x37\xb3\xf0\xeb\xa2\xb3\xe4\x64\xfe\x69\xe1\xc6\xad\x35\xee\x11\x1d\xda\x78\xf8\x29\xe2\xc3\x33\x10\x51\x23\x71\x03\x17\xf2\x34\x20\x4f\x03\xf2\x34\x20\x4f\x03\xf2\x34\x20\x4f\x03\xf2\x34\x20\x4f\x03\xf2\x34\x20\x4f\x03\xf2\x34\xf4\x3b\x4f\x03\x6e\xe0\x42\x9e\x08\xe4\x89\xb8\xb8\x3c\x11\x6b\x21\xdb\xbe\xf7\x70\x81\xbd\x9d\x98\xbd\x2d\x09\x95\x7f\x69\x66\x05\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x06\xea\x76\x22\xea\x76\x41\xf1\x3c\x80\x82\x80\x82\x80\x82\x67\x0f\x05\x37\x65\xfd\x34\x83\xe7\x00\xc1\xd8\x1a\xeb\x85\x8b\xfa\x1b\x01\x83\xd7\xa5\x6b\x46\xee\xa7\x59\xc6\x95\x77\x57\xfa\x9c\x83\xca\xae\xc1\x79\x36\xb0\xe2\xc6\x74\x0d\x3d\x46\x8a\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xc0\x89\xfd\xc5\x89\x38\x91\x08\x82\x09\x82\x09\x82\x09\x82\x69\x09\xa6\x27\x52\xf3\x3c\x91\x11\x62\x0a\xe5\xa8\x96\x4d\x06\x94\xc0\x78\x2a\xd3\x59\x31\x02\x9c\x69\xfe\xb3\x3e\x29\xca\x41\x19\x4a\x4e\x92\xfa\xc4\xed\x97\x65\xf2\x17\x88\xfc\x8b\xf3\x85\xbb\xf1\xb7\xff\x98\x5e\x68\x11\xf7\x15\xa5\x6e\x0b\xfb\x7e\xad\x1d\x75\x4b\xb1\xd7\x8e\x7e\xc5\x57\xd5\x13\xf9\xac\x87\xbe\x1e\xfe\x2e\x4c\x01\x43\x80\xef\xc6\xdf\x7e\x38\x1d\xd3\xee\x6c\xb0\x25\x53\x30\x6b\xb3\x93\xc2\xfd\x2c\x0c\xd4\x52\x69\x9d\xdf\xda\xe9\xa2\xf7\xeb\xa9\x59\xcb\xad\x77\x59\x68\x18\xe5\x03\x1f\xf5\x03\x7f\xe8\x07\x9e\xb7\xa2\xb0\xdd\xdc\x52\x5d\xb7\x62\x72\xad\xeb\x33\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\x74\xe0\xf4\xa3\xe2\x74\xc0\x5b\xc0\x5b\xc0\xdb\xd6\xe1\xed\x11\x52\x94\x56\xd8\x4f\x91\xa9\xb4\x8e\x37\xec\x04\x98\xea\x42\x0c\x77\x3f\xb0\xbc\x02\x50\x39\xf1\x86\x6b\xe0\x48\x4d\x04\xa2\xcc\x56\x60\x2b\xbd\xe4\x31\xde\x0d\x42\xd5\x08\x4e\xd2\x4d\x3a\x0c\x28\x1d\xe3\x8e\x86\xdd\x26\x1d\x12\x78\x23\x81\xf7\xd9\x5f\xde\xb0\xfb\x2b\xd1\xdc\xad\x0e\x7b\x95\xdd\xd0\x2d\x98\xfb\x14\x7e\x50\xf2\x6c\x79\xe2\xc5\x67\xc3\xf5\xe5\xce\x05\xb6\x72\x7a\x46\x4b\x91\x6e\xde\xaa\xa5\xa8\x68\x30\x54\x0e\xa8\x1c\x50\x39\xa0\x72\x40\xe5\x80\xca\x01\x95\x03\x2a\x07\x54\x0e\xa8\x1c\x50\x39\xa0\x72\x40\xe5\x80\xca\x01\x95\x03\x2a\xc7\x51\xa2\x67\xcd\x45\x95\x87\x62\x25\xbd\x66\x94\xf0\xe6\xb4\xfa\xc6\x81\xb0\xe4\x38\x97\x95\xed\x17\x65\xbc\x29\x6b\x0a\xd9\xa8\x2a\x9c\x38\x1f\x68\xa6\x1a\x77\xac\x70\xe0\x3a\x3b\xf1\xa8\x7d\x62\xf2\xab\xff\x21\xff\x74\xa2\xfe\xc7\xbd\x7c\xc8\xd8\x83\xfa\xd7\xfe\x7d\xc6\x43\x02\xf0\x19\xf3\xa2\x79\x96\x8b\xf4\xc6\x8c\x81\x67\xaf\x6f\x8c\xc2\x17\xc1\x06\x45\x72\x94\x81\x5a\xea\x6c\xe2\x9a\x21\x1b\x47\x3c\x8e\xcd\xe2\x45\x06\x84\x47\x6a\xb5\xb8\x1d\xde\x7e\x74\x66\x15\x15\xdd\x84\x01\x2c\x1a\x56\x30\xbb\x89\x6d\xa2\xaa\x0d\x7b\xd0\xad\x52\xef\x44\x92\xd9\x16\x18\x37\x8b\xee\xab\x54\xfe\x11\xb9\xbb\xda\xac\xed\xd7\x18\x55\x46\x37\xe5\x84\x56\xaf\xd2\x6f\xda\xe2\xad\xbb\x6a\xff\x7c\xad\x03\xb5\x0f\xf2\x2e\xe4\x5d\xc8\xbb\x90\x77\xbb\xb2\x16\xec\x7c\x9b\x7f\xbb\x02\xeb\x39\xc5\xf7\xd4\x8b\xaa\x4d\x2c\x00\x4d\x6c\xaf\xee\xa9\x86\xdf\x69\x0c\x32\x58\xfa\xd6\x2c\x7d\x2d\xd1\x70\x21\x45\x18\xb3\x4c\x03\x06\x36\x11\x53\xa9\xb9\x9f\x85\x73\xa5\x3a\x6e\x78\x28\xb5\xc6\x31\xe5\xb1\x8c\x6f\x62\x11\x70\xea\x33\x53\x9e\x6b\xf2\x35\xa8\x2f\x46\xcb\xbc\x7e\xe1\x6c\x26\x7c\xb5\xa8\x44\x6f\x46\x64\x75\x25\xf4\x38\x8c\xae\x0d\x94\x20\x24\xc6\x82\x54\x79\x70\x89\x48\x43\xe9\x17\x18\xa6\x74\xe6\x54\x6b\x8b\x8e\x9b\x67\xaa\x92\x2e\x4c\xe3\xea\x97\xb6\x41\xa6\x90\xa9\xe3\xc3\x87\xea\x07\x54\x4f\x7d\x2d\xfd\x8a\x3a\x96\x83\x40\x55\x19\x53\x4d\x1a\xc4\x32\xf7\x4e\x26\xcf\x24\x12\x3c\x13\x85\x12\x31\x4e\x65\xc2\x03\x1a\xaa\xb1\x8c\x42\xef\xed\x5a\xf7\x96\x66\xef\xb6\xd5\x65\x2a\x50\xbd\xdf\xf8\x7d\xc8\x9c\x2d\x9c\x2f\x12\x11\xfb\x22\xce\x4b\xfd\x4b\x30\x99\x26\xcf\x3c\x56\x6d\x57\x03\x90\xce\xc5\x68\xca\x23\xab\x45\x3f\x5d\xe9\x8f\x9f\xae\xd8\x34\x8c\x79\x14\xfe\x6b\xf5\xa4\x89\x60\xdc\xf7\x09\x52\x8f\x34\xf0\xf1\x4b\x4c\xa9\x1f\x3f\xc8\xca\x1f\x69\xfd\x77\xc8\x1e\x42\x7a\x4b\x9c\xaa\xcb\x74\xb9\x6d\xa4\x42\xe8\x50\x0c\x2d\x3f\xd3\x3b\x2c\xf3\x67\x67\x04\x74\xc5\xee\x6d\x93\x76\xea\xff\x7a\xdb\x42\xb5\x53\xaf\xf4\xb3\x7c\x65\x01\x4f\x27\x3c\xa8\x84\xe1\x14\xef\xa5\x48\xa7\x32\x9d\xa9\x6e\x5b\xd9\xa4\xef\x0b\xb5\xab\x6f\x11\xbd\x24\x76\x86\x27\xba\xf9\xa1\x9a\x7d\x5e\xe8\x97\x6a\x30\xa9\x7a\xa4\xcf\x17\xc3\x90\x51\x1a\x06\xfa\xd4\xea\x76\x43\xa7\xbf\xad\xe2\x63\x79\x5b\xb9\x1f\xaf\x16\x36\x64\x3a\x52\x8b\x9c\x2a\xd7\x38\x0d\x74\x1b\x06\xec\xc6\xcc\x91\xea\x1c\xca\x3e\xb3\xc1\x1f\xdc\x7b\x51\x0b\x77\xec\xab\x6f\xf1\x28\x92\xaf\xf4\xa5\x85\x8e\xd3\x8a\xac\x79\x9f\xaa\x0f\xb1\x2d\x98\x14\x4f\xfa\xcc\x06\x5f\x65\x2a\x9c\xc7\x32\x8f\x67\x1e\xf7\x55\xeb\x4d\xff\x90\xb1\xd7\xcf\xcb\xb4\xf5\x5c\x7a\xe0\xb4\x78\x46\x05\x4a\x2d\x4c\xb4\xae\xd0\xc6\xc6\x22\xe8\xda\x82\x9b\x27\x46\x9a\xb9\xf7\xbc\xdc\x00\xd2\x56\x28\x94\x48\xd3\xe8\x3d\xf7\xfa\x8b\x6e\xdd\x0d\x15\xf7\xdb\x0a\x0f\x6f\x26\xd2\x40\xd4\x7f\x9c\xe5\x29\xcf\x45\x10\x7a\x37\x4b\x5f\xec\xb6\x27\x49\x15\xed\x1c\x49\x58\x33\xb5\xc7\x34\x21\xe0\x50\x02\x1d\xb4\x84\x0e\x16\xe2\x1e\xec\x9c\xd6\xb1\x39\x89\xd6\x41\xb5\x64\xc1\xde\xb9\xaf\x2d\x7d\xa6\x0d\xc1\x7b\x72\x03\x74\xf4\x29\x8f\xe8\x97\xca\x89\xd6\xbf\xa6\x6f\x90\x43\x9b\xb1\x77\x7f\x66\x32\xa6\x19\x7e\xcd\xfe\x56\x86\xc4\xfc\xff\xd1\x9a\x97\xf2\x8f\xef\xb7\x63\x1a\x7b\xf9\xa6\x5f\x65\xea\x91\x5b\x1e\x48\x1a\x21\xc9\x9e\xae\xa6\xea\x6f\x4f\x57\xec\xae\xd2\xe4\x21\xfb\x96\x1b\x1f\x9a\x50\xb9\x99\xf1\x37\xdc\xa3\x5e\xa2\x50\xce\x28\xf4\x8c\x3b\x43\x64\x5d\xbe\x9a\x01\xd0\xa1\x8e\x89\x90\x49\x24\x86\x4c\x97\x39\x8d\x78\x50\x0c\x3c\xa9\xd9\x2b\x7b\xab\x28\xde\xe9\x03\xf5\xfb\x6e\x02\x9d\x83\xa0\xca\xee\x69\xd9\x3b\x26\x2a\x56\x32\x30\xae\x29\xfd\xa8\x39\x19\x3b\xa8\x6c\x2a\x03\x91\xca\x9f\x3c\x52\x63\xb7\x56\xc7\xb0\x5f\xb4\xbd\x08\x4d\x83\xda\x78\x67\xfb\xaf\x9b\xda\x46\x47\x8c\x0f\x68\xf2\x69\xcc\x1e\x7c\x4d\xf8\x9a\xc7\x91\xa9\x0e\x4e\x83\x8c\x45\xb8\x5c\x84\x33\x4d\x4a\xd6\x46\x19\xe9\xef\x9c\xf7\xea\xbb\x5b\xbc\x91\xe1\x4b\xdd\x58\xe1\xce\x36\x7e\xe5\x12\xe6\xdd\xce\x5e\x5f\x31\xf5\xba\xe8\xf3\x01\x4a\xc1\x51\xe8\x8e\xa3\x80\x1d\x48\xcf\x77\x20\xdb\x49\x1f\x87\x2e\x13\x10\x41\x76\x16\x41\x5a\x5c\x84\x20\x85\x60\xd5\xe9\xca\xaa\x03\x29\x04\x52\x08\xa4\x10\x48\x21\x3b\x52\x18\x7d\x4b\xf6\x1e\x17\x4a\x98\x23\xe5\xb1\x1f\xfe\x0c\xfd\x39\x8f\x2a\x97\x64\x17\x99\x1e\x6a\x7b\xb2\x91\xeb\xb2\xcf\xfc\xc2\xeb\xed\x1c\xa4\xd7\x5d\x1d\xa4\xbf\x74\xaa\xc7\x1e\x5f\x85\x7d\xfa\x64\x95\xc8\x7c\x85\xcc\x57\xc8\x7c\x85\xcc\x57\xc8\x7c\x85\xcc\x57\xc8\x7c\x85\xcc\x57\xc8\x7c\x85\xcc\x57\xc8\x7c\x85\xcc\x57\xc7\xcc\x7c\x85\xcb\xa1\x91\x79\x0b\x99\xb7\x2e\x2e\xf3\x56\x23\x18\x6f\x53\xc6\x26\x33\x8a\x0e\xc2\x8b\xad\x59\xdc\x78\x47\x6c\x23\x28\xef\xba\x74\x8b\xc8\xf5\x33\x4b\xa8\xf2\xac\x4a\x7f\x6f\x50\xf1\xd8\x9d\x67\x03\x04\xee\x03\x02\xfb\x0d\x01\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xcf\x17\x00\x9e\x5d\x88\x12\x28\x24\x28\x24\x28\x64\xcf\x28\xa4\x94\xa9\x1f\xc6\xf4\x38\x4b\x21\x6b\xb1\x62\x40\xb9\xd1\xa6\x32\x9d\x15\x23\xc0\x99\x46\x32\xeb\xcf\x39\x1c\x74\xe8\xe0\x34\xa7\x19\x9c\x7e\x59\x66\x73\x81\xc8\xbf\x38\x5f\xb8\x1b\x7f\xfb\x8f\xe9\x85\x16\x09\x5c\x51\xea\xb6\xfc\xed\xd7\xda\x51\xff\x79\xbb\x7e\xe0\x2b\x9e\xa1\x9e\xc3\x67\x3d\xea\xff\xf7\x73\x05\x94\x5d\x18\xf8\xff\xde\xde\x8d\xbf\xfd\x70\xba\xa3\xdd\xe1\xb7\x25\xef\x74\x65\xf8\xc6\x59\x40\x19\x32\xeb\x23\x85\xf5\xd6\x37\x35\x6b\xb4\x75\xd4\xac\xac\xf0\x97\xfa\xf1\x99\xe3\xfb\x4d\x93\x44\xf5\x50\x75\x96\x50\xaf\x7c\x95\xe9\x5d\x14\x15\x37\x35\x1c\xe7\x4c\xb7\x3b\xa4\x3f\x6f\x87\x54\xf0\xa9\x6e\x94\x5f\x9e\x5e\x25\xa3\xb7\xf3\xc4\xe5\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x40\xf1\x88\xc5\x05\x05\x07\x05\x07\x05\x6f\x97\x82\xff\xbc\x1d\xc5\x05\xab\xd1\x01\xb7\xf4\xff\x5f\x00\x64\xcd\x03\xb2\x82\x8a\xf9\xb6\x7f\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\x8e\xca\x81\xc0\x61\xc0\x61\xc0\x61\x5a\xe7\x30\x08\x84\x59\x15\x08\x23\xb3\x15\x70\x49\x2f\x60\x8c\xb7\xcf\x91\x0e\x85\x3e\xba\xe6\x3b\x62\x9f\xa3\x5c\x35\xb0\x6a\x6a\x20\xb7\x33\x72\x3b\x9f\xff\x8d\x02\x75\x33\xbf\xc1\x8b\x03\xd6\x14\xd1\xd0\x65\xcc\x6b\xca\x38\x28\xe7\xb1\x6c\xc7\xae\x9b\x9b\x9e\x97\xaa\x69\x2e\xf2\x76\x6e\x45\x97\xd3\xfe\x59\x79\xdd\x8a\xaa\x95\xff\x52\x34\x09\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\x1f\x98\xbf\xc1\xe3\xd1\xe6\xde\xc0\x43\xa9\x90\x5e\x33\x4a\x28\xd3\x87\x23\xb0\xc6\x0a\x6b\x7c\xaa\x76\x9d\xf3\xfc\x99\x65\x9e\x4c\xc4\x35\xcb\xe6\x1e\xbd\x67\x34\xf3\x05\x9f\xe9\x29\x91\xa4\x92\xac\x7e\x35\xdb\x0c\x91\x9a\x6e\xa7\x9c\x39\x2c\x84\x77\x53\x1a\x5d\xb2\x93\x55\x40\xd2\x3b\x20\x47\xf7\x8d\x37\x15\x6b\x5b\x67\x83\x1e\xb5\xbf\x4d\x3e\xfb\x3f\xe4\xfb\x4e\xd4\xff\xb8\x97\x0f\x19\x7b\x50\xff\xda\xbf\xcf\x78\x48\x40\x3d\x63\x5e\x34\xcf\x72\x91\xde\x98\xbe\xf5\xec\x4d\x7d\x51\xf8\x22\xd8\xa0\xa8\xe4\x40\x2d\xa3\x36\x1f\xf1\x90\x8d\x23\x1e\xc7\x66\x61\x24\xe3\xc4\x23\xb5\x12\xdd\x0e\x6f\x3f\x3a\x73\x85\x8a\x6e\xc2\xb8\x16\x0d\x2b\x78\xe0\xc4\x36\x51\xd5\x86\x3d\xe8\x56\xa9\x99\x9e\x64\xb6\x05\xc6\x85\xa3\xab\x09\x95\xef\x45\xae\xb4\x36\x99\xfb\x35\x46\x95\x71\x52\x79\xa0\xdd\x7b\xdf\xf7\x33\x9a\xeb\xae\x77\xef\xfd\x3b\xac\xef\x6e\x87\x76\x0a\xed\x14\xda\xe9\x05\x6a\xa7\xed\xde\xad\x7e\x0c\x59\xb3\x87\x01\x2b\xab\xa4\xcc\x03\x8c\x6e\x13\x9b\x9a\x7b\xaa\xd2\x77\xea\xdb\x0c\x66\xb7\x35\xb3\x5b\xcb\x11\x5c\x34\x10\xc6\x2c\xd3\xdb\x7a\x36\x11\x53\xa9\x69\x9b\x45\x62\xa5\x26\x6d\x28\x24\xb5\xc6\xb1\xab\xb1\x8c\x6f\x62\x11\x70\xea\x33\x53\x9e\x6b\x7f\x35\x1e\x2f\x46\xcb\xbc\x56\xe1\x6c\x26\x7c\x65\xe1\xa3\x37\x23\x6d\xba\xc2\x75\x1c\x46\xd7\x06\x05\x10\x88\x62\x41\xaa\xbc\xa1\x44\xa4\xa1\xf4\x0b\xf8\x51\x3a\x46\xaa\xb5\x45\xc7\xcd\x33\x55\x49\x17\x61\x71\xf5\x4b\xdb\x20\x53\xc8\xd4\xf1\x6e\x43\xf5\x03\xaa\xa7\xbe\x9b\x7b\x45\x1d\xcb\x41\xa0\xaa\x8c\xa9\x26\x0d\xc2\x90\x7b\xe7\xea\x92\x84\x36\x79\x05\xff\x1f\xa7\x32\xe1\x01\x0d\xd5\x58\x46\xa1\xf7\x76\xad\x7b\x4b\x13\x6f\xdb\xea\xf2\xee\x13\xed\x89\xff\x3e\x64\xce\xe6\xc6\x17\x89\x88\x7d\x11\xe7\xa5\xea\x24\x98\x4c\x93\x67\x1e\xab\xb6\xab\x01\x48\xe7\x62\x34\xe5\x91\x55\x80\x9f\xae\xf4\xc7\x4f\x57\x6c\x1a\xc6\x3c\x0a\xff\xb5\x2a\xce\x44\x30\xee\xfb\x84\x86\x47\x1a\xb3\xf8\x25\x1c\xd4\x8f\x1f\x64\xe5\x8f\xb4\xea\x3a\x64\x0f\x21\xbd\x25\x4e\xd5\x65\xba\xdc\x36\x62\xff\x3a\x00\x42\x8b\xbe\xf4\x0e\xcb\xfc\xd9\x19\x01\x5d\xb1\x7b\xdb\xa4\x9d\xfa\xbf\xde\xb6\x50\xed\xd4\x2b\xfd\x2c\x5f\x59\xc0\xd3\x09\x0f\x2a\x41\x2d\xc5\x7b\x29\xd2\xa9\x4c\x67\xaa\xdb\x56\x36\xe9\xfb\x42\xed\xea\x5b\x44\x2f\x89\x9d\xe1\x89\x6e\x7e\xa8\x66\x9f\x17\xfa\xa5\x06\x4b\x5a\x9a\xbe\x10\xde\x0e\x43\x46\xe9\x2c\xe9\x53\xab\x96\x0d\x9d\xfe\xb6\x3a\x8b\xa5\x5c\xe5\x4e\xb5\x5a\xd8\x90\xe9\x28\x26\xf2\x70\x5c\xe3\x34\xd0\x6d\x18\xb0\x1b\x33\x47\xaa\x73\x28\xfb\xcc\x06\x7f\x70\xef\x45\xad\xbb\xb1\xaf\xbe\xc5\xa3\x48\xbe\xd2\x97\x16\x3a\x4e\xeb\xa0\xe6\x7d\xaa\x3e\xc4\xb6\x60\x52\x3c\xe9\x33\x1b\x7c\x95\xa9\x70\x1e\xcb\x3c\x9e\x79\xdc\x57\xad\x37\xfd\x43\xc6\x5e\x3f\x2f\xd3\xd6\x73\xe9\x81\xd3\xe2\x19\x15\x08\xb3\x30\xd1\xba\xc2\xf8\x1a\x8b\x2e\x6b\x0b\x29\xb6\x03\x12\x73\xef\x79\xb9\x9e\x24\x5c\x50\x9c\x8e\x46\xbd\x5b\x6c\x8f\x17\xbd\xb2\x1b\x7a\xf4\x6f\x2b\x1c\xb4\x99\x48\x03\x51\xff\x71\x96\xa7\x3c\x17\x41\xe8\xdd\x2c\x7d\xb1\xb3\x8e\x20\xd5\xf1\xf4\x9b\xef\x35\x33\x73\x4c\x03\x0d\x7f\x10\xdb\xf0\x96\xb6\xe1\x0b\xc1\x02\x76\x4e\xeb\x80\x96\x44\x8b\x87\x5a\x15\x67\xef\xdc\x57\x94\x3e\xd3\x2f\xfd\x7b\x5a\xc5\x75\xc8\x26\x8f\xe8\x97\xca\x07\xd6\xbf\xa6\x6f\x90\x3f\x9a\xb1\x77\x7f\x66\x32\xa6\x19\x7e\xcd\xfe\x56\x46\xc3\xfc\xff\xd1\x9a\x92\xf2\x8f\xef\xb7\xe3\x03\x7b\xb9\x96\x5f\x65\xea\x91\x57\x1d\x48\x1a\x21\xc9\x9e\xae\xa6\xea\x6f\x4f\x57\xec\xae\xd2\xe4\x21\xfb\x96\x1b\x17\x98\x18\xb0\x99\xf1\x37\xdc\xa3\x5e\xa2\xf8\xc7\x28\xf4\x8c\x37\x42\xc8\x58\xbe\x9a\x01\xd0\xf1\x81\x89\x90\x49\x24\x86\x4c\x97\x39\x8d\x78\x50\x0c\x3c\x49\xc0\x2b\x7b\xab\x28\xde\xe9\x03\xf5\xfb\xde\x92\xe3\x64\x8f\x7b\xe1\x4e\x22\xb8\xb9\x37\x39\xd8\x42\x8e\x7a\x6b\x03\x14\xbe\x52\xe1\xd3\x77\x65\x6e\xc8\xc9\x63\x82\x97\x62\x3f\xfc\x19\xfa\x73\x1e\x55\xee\xc6\x2c\x62\x0a\x69\xec\x1a\xb9\xff\xf2\xdc\x6f\xb0\xdc\xe4\x32\xbd\x2e\xbb\x4c\xc5\x09\xbc\x16\xf2\x60\xb7\x78\x6f\x25\xf2\x62\xe3\xa0\x04\x0e\x4a\xe0\xa0\x04\x0e\x4a\xe0\xa0\x04\x0e\x4a\xe0\xa0\x04\x0e\x4a\xe0\xa0\x04\x0e\x4a\xe0\xa0\xc4\x59\x1c\x94\x40\x5e\x6c\x1c\xd4\xc0\x41\x8d\x8b\x3b\xa8\xb1\x1d\x72\xdb\x2f\x3b\x36\x48\xdc\xc9\x49\xdc\x82\x78\xf9\x97\x26\x58\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\x60\x70\xa7\x65\x70\x17\x14\xeb\x03\x44\x08\x44\x08\x44\x78\x29\x88\x70\x53\xf6\x0d\x33\x86\x0e\x1e\x8c\xad\xcd\xae\x5c\xa6\xd7\x08\x26\xbc\x2e\xfd\x33\xf2\x41\xcd\x5a\xae\x5c\xbc\xd2\xf1\x1c\x54\xb6\x0e\xce\xb3\x01\x19\xb7\x38\x21\xd1\x63\xc0\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\x08\xb8\xd8\x7b\xb8\x88\x93\x8b\xa0\x99\xa0\x99\xa0\x99\xa0\x99\xeb\x68\xe6\x44\xe4\xfc\x76\x54\x0b\x2a\x03\x91\x57\x7d\x16\xdd\xa4\x0d\x29\x54\x0e\xca\x67\xd2\x85\x44\x29\xd4\x2b\xcb\x2c\x30\x10\x79\x95\x04\xd2\xf7\xee\xc6\xdf\x7e\x38\x1d\xd3\x22\x0b\x74\x4a\xde\xe9\xfe\xcf\x5f\x5b\x4d\x8a\x0d\xd1\xae\x7a\x8f\x96\x1a\x0b\x6e\x3d\x8a\x0a\xbe\xbe\x28\x74\x5c\x33\x67\x54\x37\xad\x98\x34\xd4\x3f\x2d\x1c\x17\x5f\xcc\x5f\x41\x85\xf7\xeb\xca\x58\xdd\xb1\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\xe0\xc8\x38\x28\x0e\x6e\x0a\x6e\x0a\x6e\x7a\x12\x6e\xba\xdf\x39\x71\x90\xb3\x43\xc8\xd9\x01\x77\xbc\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\xcb\x00\xcb\x00\xcb\xf4\x02\xcb\x20\x42\x66\x7d\x84\x8c\xcc\x56\x00\x27\xbd\x94\x75\xff\xa2\xda\x1a\x10\xa4\xab\xbf\x0f\x0a\x6a\xe1\x9e\x70\x67\xba\xe0\x96\x32\xdc\x52\x76\x69\x97\x85\x2f\x4c\xff\xa3\xdd\x18\xbe\x5c\x4e\x43\x97\x62\x6e\x2a\xe8\xa0\x5b\xbe\x64\x8b\xa6\x7f\xc3\x2d\xe5\xce\x3d\xb5\x36\x09\x6d\xef\x16\x82\x55\xd7\x96\xd3\x57\xbf\x14\x8d\x83\x3a\x00\x75\x00\xea\x00\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x80\x3a\x00\x75\x00\xea\x00\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x68\xf0\xf4\xf5\x63\xce\xf3\x79\x76\x30\x24\xd2\x6b\x46\x89\x67\x7a\x73\x9a\xf6\x82\xf2\x9d\x34\x10\x0d\xbc\x29\x25\x2c\x59\xcc\x2a\x2a\xe9\x27\xa4\x53\x0d\x69\x36\x6c\xb7\xce\x2e\x3d\x6a\x1f\x9c\xfc\xf8\x7f\xc8\x1f\x9e\xa8\xff\x71\x2f\x1f\x32\xf6\xa0\xfe\xb5\x7f\x9f\xf1\x90\x10\x7c\xc6\xbc\x68\x9e\xe5\x22\xbd\x31\xbd\xec\x99\x1d\x28\x8b\xc2\x17\xc1\x06\x45\x25\x07\x6a\x69\xb5\x99\x77\x87\x6c\x1c\xf1\x38\x36\x8b\x25\x19\x2c\x1e\xa9\xd5\xe9\x76\x78\xfb\xd1\x99\x3a\x54\x74\x13\x06\xb7\x68\x58\xc1\x08\x27\xb6\x89\xaa\x36\xec\x41\xb7\x4a\x4d\xfc\x24\xb3\x2d\x30\x6e\xdd\x3c\x53\xde\x1a\x8f\xb5\x7b\xad\xcd\xe8\x7e\x8d\x51\x65\x9c\x5e\x50\x38\xc4\xb4\xaa\x17\xad\x35\x6b\x3a\x5f\xf9\x52\x27\x11\xf7\xc4\x99\xbc\xd7\xd4\x16\xc8\xb0\x90\x61\x21\xc3\x42\x86\x6d\x40\x1d\x9d\x77\x46\x1c\xed\x6b\x64\x4c\xad\x20\x7a\x80\x49\x6e\x62\x6b\x74\x4f\xf5\xfa\x4e\xbd\x9c\xc1\x1e\xb7\x66\x8f\x6b\x69\x84\x0b\x18\xc2\x98\x65\x1a\x0e\xb0\x89\x98\x4a\xcd\xec\x2c\x58\x2b\x95\x6d\xc3\x32\xa9\x35\x8e\xc1\x8d\x65\x7c\x13\x8b\x80\x53\x9f\x99\xf2\x5c\xc3\xac\x21\x7b\x31\x5a\xe6\x05\x0b\x67\x33\xe1\x2b\xd3\x1f\xbd\x19\x81\xd4\x95\xbf\xe3\x30\xba\x36\x40\x81\x70\x16\x0b\x52\xe5\x35\x25\x22\x0d\xa5\x5f\x20\x94\xd2\x81\x52\xad\x2d\x3a\x6e\x9e\xa9\x4a\xba\x20\x8c\xab\x5f\xda\x06\x99\x42\xa6\x8e\x3f\x1c\xaa\x1f\x50\x3d\x67\x82\xc7\x2b\xeb\x58\x0e\x02\x55\x65\x4c\x35\x69\x10\xa9\xdc\x3b\xd7\x7a\x24\xb4\x41\x2c\x54\x84\x71\x2a\x13\x1e\xd0\x50\x8d\x65\x14\x7a\x6f\xd7\xba\xb7\x34\x37\xb7\xad\x2e\xef\x05\xd1\xbe\xfb\xef\x43\xe6\x6c\x87\x7c\x91\x88\xd8\x17\x71\x5e\x6a\x57\x82\xc9\x34\x79\xe6\xb1\x6a\xbb\x1a\x80\x74\x2e\x46\x53\x1e\x59\x1d\xf9\xe9\x4a\x7f\xfc\x74\xc5\xa6\x61\xcc\xa3\xf0\x5f\xab\x05\x4d\x04\xe3\xbe\x4f\x80\x79\xa4\x61\x8d\x5f\x22\x46\xfd\xf8\x41\x56\xfe\x48\x6b\xb7\x43\xf6\x10\xd2\x5b\xe2\x54\x5d\xa6\xcb\x6d\x23\x05\x41\x87\x51\x68\xe9\x98\xde\x61\x99\x3f\x3b\x23\xa0\x2b\x76\x6f\x9b\xb4\x53\xff\xd7\xdb\x16\xaa\x9d\x7a\xa5\x9f\xe5\x2b\x0b\x78\x3a\xe1\x41\x25\x48\xa6\x78\x2f\x45\x3a\x95\xe9\x4c\x75\xdb\xca\x26\x7d\x5f\xa8\x5d\x7d\x8b\xe8\x25\xb1\x33\x3c\xd1\xcd\x0f\xd5\xec\xf3\x42\xbf\x54\x72\x49\x91\x23\x6d\xbd\x18\x86\x4c\xe4\x56\xaf\xb2\x9a\xdb\xd0\xe9\x6f\xab\xd6\x58\x56\x56\xee\x6d\xab\x85\x0d\x99\x8e\x8f\x22\xd7\xc7\x35\x4e\x03\xdd\x86\x01\xbb\x31\x73\xa4\x3a\x87\xb2\xcf\x6c\xf0\x07\xf7\x5e\xd4\x32\x1c\xfb\xea\x5b\x3c\x8a\xe4\x2b\x7d\x69\xa1\xe3\xb4\x9a\x6a\xde\xa7\xea\x43\x6c\x0b\x26\xc5\x93\x3e\xb3\xc1\x57\x99\x0a\xe7\xb1\xcc\xe3\x99\xc7\x7d\xd5\x7a\xd3\x3f\x64\xec\xf5\xf3\x32\x6d\x3d\x97\x1e\x38\x2d\x9e\x51\xa1\x38\x0b\x13\xad\x2b\xa4\xb0\xb1\xb8\xb5\xb6\xc0\x64\x8b\x38\x32\xf7\x9e\x97\x2b\x4b\x1a\x08\x85\xfc\x68\x6a\xbc\xc5\x5e\x7a\xd1\x49\xbb\xa1\x47\xff\xb6\xc2\x5f\x9b\x89\x34\x10\xf5\x1f\x67\x79\xca\x73\x11\x84\xde\xcd\xd2\x17\xbb\xed\x17\x26\xcb\x97\x16\x9d\x6c\xa7\xbe\x66\xa2\x8e\x69\xc8\xe1\x1e\x62\xbb\xde\xd2\x76\x7d\x21\x02\xc1\xce\x69\x1d\x25\x93\x68\x45\x52\x4b\xed\xec\x9d\xfb\xb2\xd2\x67\xfa\xf5\x7f\x4f\x8b\xba\x8e\x03\xe5\x11\xfd\x52\xb9\xc4\xfa\xd7\xf4\x0d\x72\x4f\x33\xf6\xee\xcf\x4c\xc6\x34\xc3\xaf\xd9\xdf\xca\x7c\x98\xff\x3f\x5a\xa3\x52\xfe\xf1\xfd\x76\x1c\x61\x2f\x4f\xf3\xab\x4c\x3d\x72\xb2\x03\x49\x23\x24\xd9\xd3\xd5\x54\xfd\xed\xe9\x8a\xdd\x55\x9a\x3c\x64\xdf\x72\xe3\x11\x13\x44\x36\x33\xfe\x86\x7b\xd4\x4b\x14\x54\x19\x85\x9e\x71\x4e\x88\x39\xcb\x57\x33\x00\x3a\xe8\x30\x11\x32\x89\xc4\x90\xe9\x32\xa7\x11\x0f\x8a\x81\x27\x5d\x79\x65\x6f\x15\xc5\x3b\x7d\xa0\x7e\x7f\x7a\x88\x72\x10\xdc\x68\xe1\x6e\xb5\xe6\xa4\x3c\xdc\x95\x70\x6a\xed\x50\x5f\x2a\xb9\x21\x71\x90\x09\x90\x8a\xfd\xf0\x67\xe8\xcf\x79\x54\xb9\x41\xb2\x88\x5b\x6c\xee\xe6\xc8\xcb\xba\xfb\xb1\xc6\x97\x5a\x71\x01\x64\x99\xc1\xfb\xaf\x30\xcb\x5b\xc8\xe2\xdd\xe2\x7d\x90\x48\xe8\x8d\xb3\x19\x38\x9b\x81\xb3\x19\x38\x9b\x81\xb3\x19\x38\x9b\x81\xb3\x19\x38\x9b\x81\xb3\x19\x38\x9b\x81\xb3\x19\xe7\x73\x36\x03\x09\xbd\x71\x36\x04\x67\x43\x2e\xee\x6c\xc8\x0e\x18\x6e\xbf\xb4\xde\xa0\x73\x1d\xa2\x73\x0b\x4a\xe7\x5f\x9a\x6a\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x81\xcb\x75\x80\xcb\x5d\x50\x4c\x10\xb0\x21\xb0\x21\xb0\xe1\x45\x61\xc3\x4d\xf9\x3f\xcc\x40\x3a\xc8\x30\xb6\x86\xbb\x72\x33\x60\x23\xe8\xf0\xba\x74\xd2\xc8\x11\x35\x0b\xba\xf2\xf3\x4a\xef\x73\x50\xd9\x3f\x38\xcf\x06\x78\xdc\x1e\x3c\xf6\x1b\x3a\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x9e\x07\x70\xc4\xa9\x47\x10\x4e\x10\x4e\x10\x4e\x10\x4e\x4d\x38\xc5\x3f\xb9\x88\x33\xa2\x4d\xb5\x98\x32\xa0\x5c\x44\x53\x99\xce\x8a\x8e\xe7\x4c\x03\xa0\xf5\x49\x58\x0e\xca\x88\x72\x92\x54\x2b\x65\x77\x2c\xd3\xbf\x40\xe4\x0f\xc5\xc7\x77\xe3\x6f\xff\x31\x3d\xd0\x22\xeb\x2b\x4a\xdd\x96\xf4\xfd\x5a\x35\xd0\x96\x60\xaf\x1d\xf0\x8a\x4f\xaa\xa7\xec\x19\x8f\x76\x3d\xf3\xad\x8c\xba\xe1\xbd\x77\xe3\x6f\x3f\x9c\x4e\x69\x77\x02\xd8\x92\x77\xba\xa8\x76\xed\x3c\xf0\xb9\x98\xa9\xfa\xe7\xf5\x71\xce\x7a\xeb\x9d\x9a\x85\xd9\x3a\x8a\x56\xa4\xb8\xa7\x07\x3c\x52\xe6\xe5\x33\x16\x09\xb6\x99\x2e\xaa\xa3\x96\xe6\x4b\xd1\x3f\x2d\xa4\x0d\x18\x96\xb5\x2c\xd2\x9b\x14\xe5\x9f\xe8\x72\x63\xc7\xaa\x16\xda\x80\x3b\x67\xa0\x0f\x40\x1f\x80\x3e\x00\x7d\x00\xfa\x00\xf4\x01\xe8\x03\xd0\x07\xa0\x0f\x40\x1f\x80\x3e\x00\x7d\x00\x89\x02\xc0\xc3\xc1\xc3\xc1\xc3\x4f\xc3\xc3\x0b\x3c\x26\x92\x48\xbe\xcd\xe8\x1a\x82\x3d\xf9\x58\xf1\x04\x00\xb2\xd5\x80\xac\xe8\xa0\x53\x11\xb2\xa2\x02\x5d\x42\x64\xee\xb4\x01\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x3b\x2d\x23\x0b\xe3\x20\x15\xd9\xba\x4c\x99\xeb\x09\xd9\x37\xfd\x7b\xe0\xb1\x95\x78\xcc\xf4\xce\x89\xd8\x98\x29\xbd\x43\x60\xac\x9c\x2d\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa0\x62\xa7\xa5\x62\x35\xc9\x21\x71\xde\xf2\xc8\xbc\xac\xcc\xc7\xe8\xf6\x14\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\x10\xa8\xd0\x51\xa9\x10\xa8\x0c\xa8\x0c\xa8\x4c\xeb\x54\x06\x79\x95\xd6\x9c\x19\x93\xd9\x0a\xe2\xa4\xd7\x31\xc6\x4f\x03\x97\x1a\x20\x41\xba\x01\xfb\xb1\x20\x33\x95\x26\xd2\x2f\x48\xbc\xf9\x7f\x35\xc5\x6a\x53\xf3\x45\x8d\xc3\xbe\x8b\x89\x59\xe8\xae\xe9\xd6\x69\x4f\xed\xab\xf5\x1a\x51\xd9\xe1\x59\xb7\x54\xb9\x56\x13\xc1\x12\x35\x11\x94\x4f\x3b\x64\x77\x31\x0b\x63\xcd\x57\x64\xca\xe6\x71\x81\x68\x7c\xe6\xa7\x6f\x3f\xe6\x31\xf3\xc3\x54\x28\x6b\x22\x8a\x7d\x3f\x59\x51\xe5\x96\x18\xf0\x61\xdf\x2d\xb3\xcd\x64\xd3\x79\x4a\x3e\x6c\x92\x4a\x4f\x64\x99\x59\x68\x1c\x57\x7c\xc8\xfe\x4b\x25\xd2\xde\x80\x16\x7c\xb5\xca\xdc\x45\xd1\x27\xf2\x0e\xfc\xf4\x8d\xa5\xf3\x58\x6d\x7f\x95\x51\xb1\x2e\x91\x79\x9c\xf0\xcb\x97\x5d\x57\xb1\x81\x75\x99\x9c\xcf\xbf\x79\xcc\x03\x91\xea\x6d\x94\xce\xd0\x9b\x65\xd2\x0b\xc9\x2f\x28\x36\x2c\x9c\x36\x87\x32\x65\xca\x6d\xcc\xdf\x0a\x47\x69\xc6\x5f\x54\x4b\xf3\x67\x91\x09\x6b\x10\x95\x39\xb7\x44\x8b\xa0\xce\x44\x30\x32\xda\xb4\x39\x91\x29\xbb\xfd\xf0\x51\x7d\x37\xe5\x1e\xa1\xb7\x48\xc6\x81\x36\x7f\xb4\x81\x50\x9e\x1e\x0f\x63\x2d\x13\x91\x83\x5e\x7e\x97\x70\x84\x01\x83\x6a\x07\x4a\x2f\xc9\xa7\xd1\x28\x90\x11\x8f\x83\xa1\x4c\x83\x51\xf2\x12\x8c\xe6\x71\xe8\x49\x5f\x8c\xfe\xe7\x5b\x36\x56\x4f\x59\xdc\x3a\x9b\x36\x9f\xd8\x60\x92\x21\xfa\xb0\xca\x58\x7e\xd1\xfe\x74\xd3\x25\x7d\x58\x2e\xe9\xce\xf3\x44\xd2\x78\x51\x87\xac\x00\x64\x99\x5b\x58\x01\xf4\xee\x64\xb9\x9a\xfa\xef\xcc\x93\x51\x24\x3c\xeb\x83\xf4\x75\x3d\xd0\x8d\x59\x5a\x0f\xbe\x14\x8d\x83\x4a\x00\x95\x00\x2a\x01\x54\x02\xa8\x04\x50\x09\xa0\x12\x40\x25\x80\x4a\x00\x95\x00\x2a\x01\x54\x02\xa8\x04\x50\x09\xa0\x12\x40\x25\x68\xf8\xea\x8e\xc7\x9c\xe7\xf3\xec\x60\x46\xa4\xd7\x8c\x12\xd1\xf4\xe1\x26\x86\x0b\xba\x03\xed\xb0\x78\xe0\x4d\x17\xc6\x93\x9d\xac\x02\x92\xbe\xe2\x39\xd5\x94\xa6\x03\x77\xeb\x2c\xd2\xa3\xf6\xbe\xc9\x83\xff\x87\x3c\xe1\x89\xfa\x1f\xf7\xf2\x21\x63\x0f\xea\x5f\xfb\xf7\x19\x0f\x89\xc0\x67\xcc\x8b\xe6\x59\x2e\xd2\x1b\xd3\xd3\x9e\xd9\x7b\xb2\x28\x7c\x11\x6c\x50\x54\x74\xa0\x16\x55\x7b\x37\xff\x90\x8d\x23\x1e\xc7\x66\x99\x24\x53\xc5\x23\xb5\x2e\xdd\x0e\x6f\x3f\x3a\x33\x87\x8a\x6e\xc2\xd4\x16\x0d\x2b\xe8\xe0\xc4\x36\x51\xd5\x86\x3d\xe8\x56\xa9\x79\x9f\x64\xb6\x05\xc6\xa1\x9b\x67\xca\x4f\xe3\xb1\x76\xac\xb5\x01\xdd\xaf\x31\xaa\x8c\x2e\xe8\x09\x87\x98\xd5\x40\xb4\xa3\xbd\xce\x57\xbe\xd5\x49\xc4\x3d\x71\x36\x2f\x36\xb5\x06\x42\x2c\x84\x58\x08\xb1\x10\x62\x1b\x54\x47\xe7\x5d\x10\x47\xfb\x1b\x20\x53\x23\x88\x1e\x68\x97\x9b\xd8\x1a\xdd\x53\xcd\xbe\x53\x4f\x67\x30\xc9\xad\x99\xe4\x5a\x1a\xe1\x02\x86\x30\x66\x99\x86\x03\x6c\x22\xa6\x52\x33\x3b\x0b\xd6\x4a\x65\xdb\xb0\x4c\x6a\x8d\x63\x73\x63\x19\xdf\xc4\x22\xe0\xd4\x67\xa6\x3c\xd7\x36\x6b\xc8\x5e\x8c\x96\x79\xc9\xc2\xd9\x4c\xf8\xca\xfa\x47\x6f\x46\x20\x75\xe5\xef\x38\x8c\xae\x0d\x50\x20\x9c\xc5\x82\x54\xb9\x4f\x89\x48\x43\xe9\x17\x08\xa5\xf4\xa4\x54\x6b\x8b\x8e\x9b\x67\xaa\x92\x2e\x08\xe3\xea\x97\xb6\x41\xa6\x90\xa9\xe3\x15\x87\xea\x07\x54\xcf\x99\xe0\xf1\xca\x3a\x96\x83\x40\x55\x19\x53\x4d\x1a\x44\x2a\xa5\x57\xfe\x89\x25\x91\xe0\x99\x28\x54\x84\x71\x2a\x13\x1e\xd0\x50\x8d\x65\x14\x7a\x6f\xd7\xba\xb7\x34\x37\xb7\xad\xf6\x8b\x07\x68\x0f\xfe\xf7\x21\x73\x36\x45\xbe\x48\x44\xec\x8b\x38\x2f\xb5\x2b\xc1\x64\x9a\x3c\xf3\x58\xb5\x5d\x0d\x40\x3a\x17\xa3\x29\x8f\xac\x8e\xfc\x74\xa5\x3f\x7e\xba\x62\xd3\x30\xe6\x51\xf8\xaf\xd5\x82\x26\x82\x71\xdf\x27\xc0\x3c\xd2\xb0\xc6\x2f\x11\xa3\x7e\xfc\x20\x2b\x7f\xa4\xb5\xdb\x21\x7b\x08\xe9\x2d\x71\xaa\x2e\xd3\xe5\xb6\x91\x82\xa0\xc3\x28\xb4\x74\x4c\xef\xb0\xcc\x9f\x9d\x11\xd0\x15\xbb\xb7\x4d\xda\xa9\xff\xeb\x6d\x0b\xd5\x4e\xbd\xd2\xcf\xf2\x95\x05\x3c\x9d\xf0\xa0\x12\x28\x53\xbc\x97\x22\x9d\xca\x74\xa6\xba\x6d\x65\x93\xbe\x2f\xd4\xae\xbe\x45\xf4\x92\xd8\x19\x9e\xe8\xe6\x87\x6a\xf6\x79\xa1\x5f\x2a\xb9\xa4\xc8\x91\xb6\x5e\x0c\x43\x46\xd7\x35\xd3\xa7\x56\x73\x1b\x3a\xfd\x6d\xd5\x1a\xcb\xca\xca\x1d\x6e\xb5\xb0\x21\xd3\x01\x52\xe4\xfd\xb8\xc6\x69\xa0\xdb\x30\x60\x37\x66\x8e\x54\xe7\x50\xf6\x99\x0d\xfe\xe0\xde\x8b\x5a\x85\x63\x5f\x7d\x8b\x47\x91\x7c\xa5\x2f\x2d\x74\x9c\x56\x53\xcd\xfb\x54\x7d\x88\x6d\xc1\xa4\x78\xd2\x67\x36\xf8\x2a\x53\xe1\x3c\x96\x79\x3c\xf3\xb8\xaf\x5a\x6f\xfa\x87\x8c\xbd\x7e\x5e\xa6\xad\xe7\xd2\x03\xa7\xc5\x33\x2a\x28\x67\x61\xa2\x75\x85\x14\x36\x16\xb8\xd6\x16\x98\x6c\x07\x47\xe6\xde\xf3\x72\x3d\x49\xfe\xa0\x68\x1f\x0d\x8c\xb7\xdc\x4f\x2f\xfa\x68\x37\xf4\xf8\xdf\x56\xb8\x6b\x33\x91\x06\xa2\xfe\xe3\x2c\x4f\x79\x2e\x82\xd0\xbb\x59\xfa\x62\x97\xdd\x42\xaa\x66\x67\x76\xeb\x6b\xe6\xe9\x98\x86\x1d\xde\x21\x36\xec\x2d\x6d\xd8\x17\x02\x10\xec\x9c\xd6\x41\x32\x89\x16\x24\xb5\xd2\xce\xde\xb9\x2f\x2b\x7d\xa6\x5f\xff\xf7\xb4\xa6\xeb\x30\x50\x1e\xd1\x2f\x95\x47\xac\x7f\x4d\xdf\x20\xef\x34\x63\xef\xfe\xcc\x64\x4c\x33\xfc\x9a\xfd\xad\xcc\x87\xf9\xff\xa3\x35\x2a\xe5\x1f\xdf\x6f\x47\x12\xf6\x72\x34\xbf\xca\xd4\x23\x1f\x3b\x90\x34\x42\x92\x3d\x5d\x4d\xd5\xdf\x9e\xae\xd8\x5d\xa5\xc9\x43\xf6\x2d\x37\x0e\x31\x91\x64\x33\xe3\x6f\xb8\x47\xbd\x44\x31\x95\x51\xe8\x19\xdf\x84\xc0\xb3\x7c\x35\x03\xa0\x63\x0e\x13\x21\x93\x48\x0c\x99\x2e\x73\x1a\xf1\xa0\x18\x78\x92\x95\x57\xf6\x56\x51\xbc\xd3\x07\xea\xf7\x5d\xc0\x28\x07\xc1\x0d\xa3\x4f\x76\x5e\xcb\xa3\x97\xdd\xd8\x28\xb7\x34\x47\xa6\x6b\x5e\xa1\x83\x80\xb8\x9b\x80\x38\xca\xb4\x4f\xb7\x56\x47\xd4\xdf\xb1\x63\x79\x0e\xc2\xc3\x76\x8a\xa2\xf1\x77\xfb\x66\x21\xba\xa0\x50\x9d\xdf\x94\xd9\x5a\xab\x2a\x66\x0d\x14\x2b\x38\xc0\x17\xe2\x00\x43\xb1\xea\x85\x62\xb5\x2d\x0f\xd9\xd5\x7a\x83\x8c\x6c\x49\x46\x5a\x5c\x1b\xc0\x47\xb0\x3c\x74\x65\x79\x00\x1f\x01\x1f\x01\x1f\x01\x1f\xe9\x3e\x1f\xc1\x0d\xfe\x2d\xa6\x5c\x76\xbb\x0a\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x01\xd9\x14\x90\x4d\x61\x0f\xa4\x58\xe0\x85\x2e\x25\x5d\x76\x99\xc7\x7e\x59\x97\x4f\x02\x98\x5a\x49\xbb\xbc\x86\x07\xb5\x15\x3c\x51\x56\x01\xf2\x18\xe4\xb1\x4b\x8c\x9e\xa8\xbc\x01\xc7\x0d\x9f\x58\x2c\xea\x98\xa9\x97\xab\x65\x75\x20\xf7\xf2\xe6\x85\x60\xb7\xe4\xcb\x7d\x5d\x16\x76\xc9\xbe\x0c\xc1\x00\x82\x01\x04\x03\x08\x06\x10\x0c\x20\x18\x40\x30\x80\x60\x00\xc1\x00\x82\x01\x04\x03\x08\x06\x10\x0c\x20\x18\x40\x30\x80\x60\xd0\xbd\x2c\x27\x8d\xa6\x5f\xde\x42\x3b\x40\xfe\xe5\x96\xc2\x83\xf7\x49\xc0\xdc\x57\x44\xb7\xe9\xbc\xf4\x5e\x58\x0e\x29\x98\x2f\x2d\x05\x73\x73\x08\xbe\x99\x13\xee\x5b\x98\xd3\x1d\x92\x30\xf7\xf7\xe5\xde\x78\xb2\x1d\xba\x2c\x74\x59\xe8\xb2\x97\xaa\xcb\x9e\xfe\x5c\xfb\xc1\x52\x69\x8f\xa3\x66\x36\xe7\x62\xde\xcb\x3a\x23\x19\x73\x7f\xed\x32\x92\x31\x23\x19\x73\x8e\x64\xcc\x48\xc6\x8c\x64\xcc\x48\xc6\xdc\x99\x64\xcc\xdb\xc0\xc9\xbd\xb2\x31\xd7\x79\x6e\x48\x3a\xb4\x21\xe9\x50\xbb\xdb\x76\xe4\x1b\xea\x8c\x83\x78\xf1\x1b\x77\xe4\x1b\x42\xbe\xa1\xf6\x18\x47\x43\x09\x87\x8e\xaf\xee\x55\x32\x0e\xb9\xc5\x21\xe5\x50\x97\x34\xc5\x51\x2a\xa3\x48\x79\xd0\x6a\xca\xac\x3d\x0d\x66\xbf\xa8\xc3\x47\x7a\xcb\xb8\x76\x38\x19\xf6\xc3\x76\xcd\xe9\x95\x88\xa2\x2a\xbf\x4e\xb9\xd1\x68\x06\x03\x9f\xdd\xb6\xa6\xe9\x43\x3a\xce\xbc\x3b\x8e\x6d\x86\x9f\x0b\x3f\xf7\x38\x02\xd5\x3e\x5d\xb8\xda\x53\x70\x5e\x02\x78\x0c\x9d\xf2\x18\x32\x8f\x47\x62\xc3\x25\x0e\xea\x2b\x2b\x52\x3a\xf7\xd5\x69\xd8\x3a\x28\xe9\x91\xfa\xa6\x9d\x6d\x85\x2e\xab\x13\xe1\x2d\xb6\xd9\xfb\x5c\xde\x70\x76\x53\x65\xfb\x10\x17\xdb\x6d\xa7\xf1\x2e\x8b\xf9\x03\x0f\x02\x1e\x44\x67\x3c\x88\x96\x98\x4c\x69\x3c\x8f\x19\xdd\xd2\x8c\x89\x6e\x24\xb0\x65\x83\x89\xde\xf6\xb2\x86\x1d\xad\x35\x74\x93\x6d\x75\x93\xf6\xd6\x02\x88\x27\x58\x12\xba\xb2\x24\x40\x3c\x81\x78\xd2\xca\x12\xda\x8c\x6e\xb2\x69\x11\x6d\x4e\x32\xb1\x25\x81\x7d\x74\x8b\x7d\x1c\x72\x83\x65\x7f\xb7\xb4\xdb\xd2\x8f\x56\xef\xb0\x3c\xb3\x23\x3e\x67\x38\x6d\x76\x20\x21\x27\xbe\xc7\x12\x47\x7e\xe0\xfc\x5e\x34\x0f\xc1\x91\x9f\x26\xa2\x49\x77\xb6\xe1\xe0\x23\x5b\xf3\x11\xdc\x66\x89\x35\xe2\xf2\xd6\x08\x00\x12\x00\x12\x44\x97\x22\xba\xb4\x0f\xbc\x24\x8c\x83\x54\x59\xfc\x7d\xaf\xb3\xfc\xa6\x7f\x8f\xbb\x2c\x37\xdc\x65\x59\xf6\x13\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\x35\xf2\x52\x23\x2f\xf5\xee\x34\xd1\xb0\x85\x0e\xdd\x62\x59\xd2\x8e\x7d\xae\xb0\x8c\x4f\x41\x95\xda\x38\xa6\x5c\x0b\x81\x5a\x0a\x99\xb0\xe5\x43\x0b\x83\x16\x76\x81\xf1\x12\xce\xf4\x3f\x6a\xb0\x44\xb5\x9c\x23\x5e\x5a\xe9\x16\x74\xfa\xc3\xf0\x9b\x8c\xfe\x4e\xd7\x55\xf6\x73\x05\xd8\xe1\xae\x4a\x08\x02\x10\x04\x20\x08\x40\x10\x80\x20\x00\x41\x00\x82\x00\x04\x01\x08\x02\x10\x04\x20\x08\x40\x10\x80\x20\x00\x41\x00\x82\x00\x04\x81\xee\xa4\x4a\x6c\xfe\xa2\xca\x8d\xf2\x00\x6e\xa9\x6c\x25\xe6\x77\x8f\x3b\x2a\xfb\xc9\xe5\x36\x9c\x86\xde\x83\xc5\xe1\x76\xca\x0b\xbb\x9d\xb2\x29\xd6\xde\xc8\xb9\xf5\x8d\x06\x74\xfb\x7b\x29\xfb\xfa\x42\x6f\x3a\xa7\x0e\xad\x15\x5a\x2b\xb4\xd6\x8b\xd2\x5a\x4f\x7e\x2a\xfd\x40\x05\xb4\xb7\x81\x2f\x1b\xef\xa0\xdc\xc3\x18\xe3\x02\xca\xfe\x5a\x62\x5c\x40\x89\x0b\x28\x73\x5c\x40\x89\x0b\x28\x71\x01\x25\x2e\xa0\xec\xca\x05\x94\x9b\xa1\xe3\x3e\xb7\x4f\xae\x76\xd8\x90\x22\x68\x7d\x8a\xa0\x36\x37\xe7\xc8\x0c\xd4\x19\xbf\xf0\xe2\x77\xe8\xc8\x0c\x84\xcc\x40\x2d\xf1\x8c\x66\xd2\x02\x1d\x5b\xa9\x73\x73\x02\x95\x65\x21\x21\x50\x77\xc4\xc1\x83\xd2\x27\xf7\x13\x67\x6d\xa7\x16\xb6\x9a\x38\xf9\x7c\xd4\xa7\x73\x9b\x2a\x5b\xea\x50\x27\x4e\x96\x0c\x35\x0a\xbe\x2e\xd4\x28\xa8\x51\x4d\x26\x48\x06\xfa\x38\x00\x7d\x20\x35\x32\x16\x85\x0b\x5c\x14\x00\x40\x00\x40\x00\x40\x00\x40\x3a\x0c\x40\x62\x91\xbf\xca\xf4\x85\x94\xbf\x70\xef\xbc\xc8\xff\xab\x9f\x52\xa8\x7e\xc8\x8e\xbc\x2e\x3b\xf2\x62\x6f\x21\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\x20\x25\x02\x52\x22\xec\x8e\x15\x2b\x84\xa1\x43\x99\x92\x17\xc9\xc7\x3e\xf9\x92\x4f\x07\x9b\xda\x48\x9a\xbc\x81\x0d\xb5\x14\x40\x51\xad\x05\x14\x33\x28\x66\x17\x18\x46\xb1\xf4\x12\x1c\x35\x98\x62\x55\x69\x47\x4c\xa6\xbc\x5c\xdc\xe9\x53\x2a\x6f\xb7\x3a\xec\x94\x58\xb9\xcf\x6b\xc5\x0e\xe9\x95\xa1\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x0a\x50\x14\xa0\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x0a\x50\x14\xce\x3f\xc9\xf2\x96\xca\x02\x52\x2d\xb7\x18\x4c\xbc\x47\xc2\xe5\x3e\xf3\xba\x0d\x07\xa9\xf7\x66\x74\x48\xbe\x7c\x61\xc9\x97\x9b\x65\xf3\x8d\x1c\x82\xdf\xd2\xbc\x6e\x9f\x88\xb9\xdf\x2f\xfa\xa6\x63\xf0\x50\x71\xa1\xe2\x42\xc5\x85\x8a\xdb\x85\x83\xf1\x8d\xa8\xaa\xfd\x8e\xba\xd9\x98\xb1\x79\x6f\x7b\x8d\xbc\xcd\xfd\x35\xd3\xc8\xdb\x8c\xbc\xcd\x39\xf2\x36\x23\x6f\x33\xf2\x36\x23\x6f\x73\x57\xf2\x36\x6f\xcb\x31\xf7\xc9\xde\xbc\xce\x85\x43\x22\xa3\xf5\x89\x8c\xda\xdf\xd1\x23\x91\x51\x67\x3c\xc5\x8b\xdf\xd0\x23\x91\x11\x12\x19\xb5\x0a\x3e\x9a\x49\x67\xd4\x8e\x28\xe8\x26\x35\x5a\x2c\x11\xa9\x8d\x4e\xa7\x46\xa6\x82\x0c\x51\x26\xf2\x7d\xd3\x1a\xfd\xd0\x4f\x78\x24\x05\x05\x39\x8d\xd6\xe5\x34\xaa\x74\x15\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\x01\x8e\x1f\xe0\xf8\xc1\xee\x78\xb1\xc4\x0b\x1d\xca\x66\x54\x61\x1e\x7b\xa5\x32\x3a\x0d\x60\x6a\x23\x8f\xd1\x3a\x1e\xd4\x52\xf8\xab\x53\x05\x48\x65\x90\xca\x2e\x30\xf6\xb5\xfa\x06\x1c\x35\xf0\x75\xa9\xa8\x23\xe6\x2e\x5a\x28\xeb\xf4\x89\x8b\xb6\x58\x08\x76\xca\x5a\xd4\xdb\x65\x61\x87\x94\x45\x10\x0c\x20\x18\x40\x30\x80\x60\x00\xc1\x00\x82\x01\x04\x03\x08\x06\x10\x0c\x20\x18\x40\x30\x80\x60\x00\xc1\x00\x82\x01\x04\x03\x08\x06\x1d\x3c\xdd\xd3\x64\xbe\xa2\x6d\xb4\x03\x24\x2b\x6a\x29\x3c\x78\x8f\x44\x45\xbd\x45\x74\x1b\xb2\x14\xed\x87\xe5\x90\xa2\xe8\xc2\x52\x14\x35\x88\xe0\x1b\xc9\x4f\xb4\x8d\x39\xdd\x3e\x39\x51\x8f\x5f\xee\x4d\x99\x89\xa0\xcb\x42\x97\x85\x2e\x7b\xb1\xba\xec\xc9\xb3\x11\x1d\x2e\x95\xf6\x38\x6a\x66\x63\x1e\xa2\xfd\xac\x33\x92\x10\xf5\xd7\x2e\x23\x09\x11\x92\x10\x21\x09\x11\x92\x10\x21\x09\x11\x92\x10\x75\x26\x09\xd1\x56\x70\x72\x9f\x0c\x44\xb5\x9e\x1b\xd2\x0f\xad\x4f\x3f\xd4\xf2\xb6\x1d\xb9\x87\x3a\xe3\x20\x5e\xfc\xc6\x1d\xb9\x87\x90\x7b\xa8\x3d\xc6\xd1\x4c\xe2\xa1\x16\xd4\x3d\x37\xeb\x50\xa5\x38\xa4\x1c\xea\x92\xa6\x38\xca\x3c\x1e\x89\xf5\xca\x22\x7d\xc5\x8e\xe5\x59\xa8\x10\x5b\x4a\x8c\x8f\xd4\x37\xed\x18\x09\x5d\x56\x27\xc4\x2a\xdb\xec\x3d\x74\xaa\xf3\x9b\x2a\xdb\x0b\x56\xb6\xdb\x4e\xa3\x5a\x15\xf3\x07\x7e\x2f\xfc\xde\x4b\x13\xac\x4a\xe3\x79\x4c\xad\xaa\x19\x13\xdd\x88\x4c\xb5\xc1\x44\x6f\x09\x3f\x76\xb5\xd6\xa0\x20\xdb\x52\x90\xf6\xd6\x02\xa0\x10\x2c\x09\x5d\x59\x12\x80\x42\x80\x42\x5a\x59\x42\x9b\xa1\x20\x9b\x16\xd1\xe6\x00\x88\x2d\x09\xec\xa3\x5b\xec\x43\xcb\x5a\xeb\xe1\x07\x7d\xe7\xac\xb6\xb4\xdb\xd2\x0f\xdd\x3b\xbd\x63\xa4\x9d\x08\xd8\x3d\xc3\x69\xb3\x03\x09\xb1\x33\x07\x01\xbc\x70\x7e\x2f\xc5\xf9\xed\x12\x0f\x41\x00\x6f\x13\xb1\x21\x3b\xdb\x70\xf0\x91\xad\xf9\x48\x7b\x2b\x04\x00\x09\xd6\x88\xae\xac\x11\x00\x24\x00\x24\x88\x15\x41\xac\x48\x8f\x78\x89\xaa\x8d\x32\x85\xa9\x8c\x22\x91\x36\x17\x36\xa2\xbe\xf9\xa5\x78\xee\xfd\x7c\x36\xeb\xdb\xad\xed\xdb\x81\x94\x15\xed\x44\x58\x49\xb3\x61\x25\xe7\x30\x95\xb6\x84\x2b\x6b\x66\x13\xc2\x4e\xe0\x42\x5f\x80\x0b\xdd\x25\xcc\x82\xb0\x93\x23\x84\x9d\x6c\xb6\xe6\xc0\x2c\x5b\x61\x96\x93\xae\x15\xa0\x2e\x58\x32\xba\xb2\x64\x80\xba\x80\xba\x20\x2c\x05\x61\x29\x27\xc6\x2c\xfa\xea\x75\x3a\x86\x1e\x8a\x7d\xaf\xfc\x5e\xbc\xc0\x1d\xb7\x7e\xaf\xb8\xf5\xdb\xed\xa3\xaf\x32\xbd\x8b\xa2\xc2\x39\x6a\x2b\x9e\xa5\x52\x87\x0e\xdd\x09\xb6\x38\x7f\x8e\x63\x64\x70\xdf\x09\xee\x3b\xc1\x7d\x27\xb8\xef\x04\xf7\x9d\xe0\xbe\x13\xdc\x77\x82\xfb\x4e\x70\xdf\x09\xee\x3b\xc1\x7d\x27\xb8\xef\xa4\xb5\x9d\x38\xee\x5b\xc1\x7d\x2b\xb8\x6f\xa5\x17\xf7\xad\xac\x63\x66\x89\xf4\x33\xe1\xcd\xd3\x30\x7f\x3b\x90\x9b\x8d\x29\xd9\x2a\x3d\x09\xec\x6c\x0d\x3b\x5b\xd5\x4f\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xa0\x41\xb8\xfd\x16\x34\x06\x34\xe6\xbc\x68\x4c\x3b\xd1\x31\x4b\x94\xa1\x43\x11\x32\xab\x08\x48\x4d\x94\x8c\xcc\x56\x70\x28\xbd\xae\x31\x7e\x5a\xe4\xd4\x00\x1f\xd2\x0d\xd9\x87\x10\xb5\x74\xf6\x68\xb9\x26\x08\x2a\x47\x50\xf9\x05\x9e\x43\x5a\xf9\x22\x1c\xf5\x4c\x52\x5d\x89\x0d\x5d\x45\xb4\x7d\x91\x07\xc5\x6b\xcb\x76\xd7\x8b\x0d\x17\x47\x3a\x57\x85\xc9\x69\xef\x57\x8f\x9a\xbb\x24\xbf\x14\x8d\x84\xd2\x00\xa5\x01\x4a\x03\x94\x06\x28\x0d\x50\x1a\xa0\x34\x40\x69\x80\xd2\x00\xa5\x01\x4a\x03\x94\x06\x28\x0d\x50\x1a\xa0\x34\x40\x69\xd8\x1d\x8d\xb5\x75\x81\x75\x09\x6a\x5a\x55\x1b\x0e\x64\x23\xad\x1d\x74\x5f\x11\xb4\x6b\xb2\x06\xae\xcf\x17\x58\x65\x0f\x7d\xe7\x5f\x2b\xb3\x03\x1e\xc4\xbc\xea\x5e\xf9\x47\xed\xde\x92\x8b\xfc\x0f\xb9\x9a\x13\xf5\x3f\xee\xe5\x43\xc6\x1e\xd4\xbf\xf6\xef\x33\x1e\x12\x08\xcf\x98\x17\xcd\xb3\x5c\xa4\xe5\xc5\xfe\x26\xb5\x47\x14\xbe\x08\x36\x28\x4e\xcb\x0f\xd4\xaa\x95\xa4\xc2\xe3\x24\x72\x8c\x23\x1e\xc7\x66\x1d\x22\x5b\xc0\x23\x65\xf8\x6f\x87\xb7\x1f\x9d\x19\x43\x45\x37\x61\xcb\x8a\x86\x15\xf8\x6d\x62\x9b\xa8\x6a\xc3\x1e\x74\xab\xd4\x7c\x4f\x32\xdb\x02\xe3\x31\x51\x2e\x13\xe5\xea\x90\xe7\xaa\x2d\xd4\x7e\x8d\x51\x65\x74\x09\xeb\x9f\x3c\x8f\xe3\x0e\x26\x6b\x5d\x4e\xc7\x73\x7b\xdd\x57\x67\x70\x84\x5a\x0a\xb5\x14\x6a\x29\xd4\xd2\xa6\xa5\xcb\x26\xb2\x39\x36\xa6\x5c\xf6\x3f\xd6\xa5\x46\xad\x3c\xc8\x7a\x37\xb1\x6f\xb9\xa7\x7a\x7d\xa7\xfe\xce\x60\xb0\x5b\x33\xd8\xb5\xa8\xc0\xdd\xfd\x87\x31\xcb\xf4\xce\x9d\x4d\xc4\x54\x6a\xa0\x66\xa9\x57\x29\x3b\x1b\xd0\x48\xad\x71\x2c\x72\x2c\xe3\x9b\x58\x04\x9c\xfa\xcc\x94\xe7\x5a\x6e\x4d\xc0\x8b\xd1\x32\xaf\x5a\x38\x9b\x09\x5f\xad\x0d\xd1\x9b\x51\x2f\x5d\x6d\x3a\x0e\xa3\x6b\xb3\xdb\x27\xd6\xc4\x82\x54\xb9\x5a\x89\x48\x43\xe9\x17\x7c\xa3\xf4\xba\x54\x6b\x8b\x8e\x9b\x67\xaa\x92\x2e\xa5\xe2\xea\x97\xb6\x41\xa6\x90\xa9\xe3\x51\x87\xea\x07\x54\x4f\x9d\x40\x70\x45\x1d\xcb\x41\xa0\xaa\x8c\xa9\x26\x0d\xf2\x8e\xd2\xa3\xff\xc4\x92\x48\xf0\x4c\x14\x88\x7f\x9c\xca\x84\x07\x5c\xc7\x1a\xa8\x97\xf7\x5a\xf7\x96\x86\xda\xb6\xd5\x7e\xf1\x00\xed\xfd\xff\x3e\x64\xce\x86\xca\x17\x89\x88\x7d\x11\xe7\xa5\xb0\x24\x98\x4c\x93\x67\x1e\xab\xb6\xab\x01\x48\xe7\x62\x34\xe5\x91\x15\x79\x9f\xae\xf4\xc7\x4f\x57\x6c\x1a\xc6\x3c\x0a\xff\xb5\x42\xcd\x44\x30\xee\xfb\x44\x7f\x47\x9a\xa4\xf8\x25\xff\xd3\x8f\x1f\x64\xe5\x8f\xb4\xb0\x3a\x64\x0f\x21\xbd\x25\x4e\xd5\x65\xba\xdc\x36\xc2\xfb\x3a\xc6\x41\xeb\xba\xf4\x0e\xcb\xfc\xd9\x19\x01\x5d\xb1\x7b\xdb\xa4\x9d\xfa\xbf\xde\xb6\x50\xed\xd4\x2b\xfd\x2c\x5f\x59\xc0\xd3\x09\x0f\x2a\xb1\x2c\xc5\x7b\x29\xd2\xa9\x4c\x67\xaa\xdb\x56\x36\xe9\xfb\x42\xed\xea\x5b\x44\x2f\x89\x9d\xe1\x89\x6e\x7e\xa8\x66\x9f\x17\xfa\xa5\xcc\x4a\x72\x99\xce\x5a\x69\x87\x21\x13\xb9\x15\x93\xac\x20\x36\x74\xfa\xdb\x4a\x29\x16\x64\x95\xbb\xe3\x6a\x61\x43\xa6\x63\x9a\xc8\x37\x72\x8d\xd3\x40\xb7\x61\xc0\x6e\xcc\x1c\xa9\xce\xa1\xec\x33\x1b\xfc\xc1\xbd\x17\xb5\x26\xc7\xbe\xfa\x16\x8f\x22\xf9\x4a\x5f\x5a\xe8\x38\x2d\x75\x9a\xf7\xa9\xfa\x10\xdb\x82\x49\xf1\xa4\xcf\x6c\xf0\x55\xa6\xc2\x79\x2c\xf3\x78\xe6\x71\x5f\xb5\xde\xf4\x0f\x19\x7b\xfd\xbc\x4c\x5b\xcf\xa5\x07\x4e\x8b\x67\x54\xf0\xcf\xc2\x44\xeb\x0a\xc6\x6b\x2c\xd6\xac\x2d\x6a\xd8\x2e\x2b\xdc\x2e\x13\xf7\x6e\x7b\x70\xe4\xdd\x5e\x95\x77\xfb\x34\x3b\x7c\xe4\xd7\xee\x8c\xaf\x78\xf1\x9b\x7b\xe4\xd7\x46\x7e\xed\xd6\x01\x48\x33\xb9\xb6\xdb\x93\xdf\xdc\xbc\xdb\xab\x4a\x3d\x6a\x0e\xee\xd6\xb4\x3f\xe7\x92\xf5\x3d\x13\xf5\x9c\xe6\x82\xec\x1e\x65\xe8\x29\x3b\xe8\x44\xa9\xad\xcb\x0a\x74\xe8\xd4\x5e\x0b\xb7\x14\xe2\x70\x01\x0e\x17\xe0\x70\x01\x0e\x17\xe0\x70\x01\x0e\x17\xe0\x70\x01\x0e\x17\xe0\x70\x01\x0e\x17\xe0\x70\x01\x0e\x17\x20\xa9\x35\x0e\x37\xe0\x70\x03\x0e\x37\x6c\xcb\xc8\xe8\x07\x23\x9f\x8b\x99\xf2\xd1\xd6\x80\x32\xb3\x0c\xc6\x7e\xf8\x33\xf4\xe7\x3c\x72\x5b\xcd\x0b\xef\xf4\x9e\x1e\xf4\x28\xf2\xa1\x13\xcb\xf0\xa9\xf0\x45\x06\xf4\x94\x41\xb9\xdf\xaf\x6c\xe0\x0a\xde\xc4\xc2\x38\xcb\x05\x27\x1b\x74\xe1\xd4\xed\x75\xa5\xcc\x57\x74\xf3\x5f\x61\xd6\x06\x79\x5b\x23\xf0\xd1\x6b\xf0\xa0\x1c\xd6\x83\xe1\x1b\xb5\xb5\x19\x02\x57\x74\x10\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x5c\x57\x00\x9c\x48\x22\xf9\x36\xa3\x83\x30\x07\x12\xb8\xe2\x49\x40\x70\x47\x45\x70\x45\x3f\x83\xc1\xd5\x30\xb8\xa2\x87\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x3a\x02\xe1\xc2\x38\x48\x45\x66\x88\xcd\x01\x08\xee\x9b\x7e\x0e\xf8\xdb\x31\xf9\x9b\xe9\x64\xc0\xb7\xd5\xf0\xcd\x74\x0f\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x1b\xc8\x5b\x47\xc8\x5b\x5c\xb0\x1b\x7d\x39\x13\xfd\xff\x17\x8e\xa5\xf6\x8c\xc9\x15\x08\xce\xaf\x1c\x50\x05\x8f\xc3\x81\x54\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\x39\x10\xb9\x93\x13\x39\x53\x4d\x7d\x19\x84\x72\xcb\xe6\xf9\x33\xcb\x3c\x99\x88\x6b\x96\xcd\x3d\x42\x33\xe4\x77\x0b\x3e\xd3\x14\x21\x49\x25\x75\x4b\x35\x4b\x3c\xed\xfa\xba\x9d\x2a\x1e\xc0\x10\xc0\x10\xc0\xf0\x52\x80\xe1\xa6\x4b\xde\xcd\x18\x3a\xb0\x30\xb6\x36\xdb\x5e\xfe\xd0\x2c\x34\xbc\x2e\x7d\x34\xf2\x43\xcd\x7a\xae\xdc\xbc\xd2\xf9\x1c\x54\xb6\x0f\xce\xb3\x81\x1c\xb7\x47\x8e\xfd\xc6\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\x40\x8d\xbd\x47\x8d\xee\x9d\x93\xee\x16\xe5\xa8\x77\x4d\x82\x6f\x82\x6f\x82\x6f\x82\x6f\x9e\x0b\xdf\x44\x9a\xc0\xfe\xf2\xc9\x4a\xc2\xc0\x7e\x43\x4a\x24\x08\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x04\xa9\x3c\x0f\x52\x09\x68\x08\x68\x08\x68\x08\x68\x78\x7e\xd0\xb0\x89\xa8\xc8\x66\xc1\x21\xc2\x22\x5b\xc3\x8e\xfd\x46\x8e\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xfd\xc7\x8d\x95\xc0\x48\x77\x8f\x82\xc8\x48\x40\x4e\x40\x4e\x40\x4e\x40\xce\xcd\x90\x13\x77\xb7\xf4\x92\x4e\x3a\xb7\xb8\xf4\x1b\x4f\xe2\xd6\x16\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\x49\xf0\xc9\x33\xe0\x93\x20\x85\x20\x85\x20\x85\x20\x85\xe7\x46\x0a\x1b\x08\x86\x6c\x92\x16\x22\x12\xb2\x1d\xd6\xd8\x6f\xce\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\x08\xc6\xd8\x73\xc6\xe8\xc6\x40\x96\x1b\x14\x04\x40\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x6e\xc6\x9a\xb1\xc8\x5f\x65\xfa\x92\xc8\x28\xf4\xc2\x83\xc3\x20\xff\x57\x3f\x6d\xac\x9e\xf6\x86\x60\xc8\x76\x00\x65\xa5\xd3\x11\x12\xa9\x71\x65\xa5\x53\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x11\x18\x09\x82\x08\x82\x08\x82\x08\x82\xd8\x1c\x41\x6c\x20\x3c\xb2\x79\x8a\x88\x20\xc9\x36\x19\x64\xbf\xf9\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\x23\xd8\xe3\x59\xb0\x47\x37\x60\x72\x71\x9b\x82\xb0\x49\x40\x4f\x40\x4f\x40\x4f\x40\xcf\xcd\xd0\x33\x15\xc4\xe0\x32\x71\xf0\x8d\xda\x3f\xf4\x93\x1e\x05\x6e\xd4\x6e\x89\x55\x96\x3d\x8e\x60\x49\x0d\x2c\xcb\x1e\x01\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x04\xad\x44\xa4\x24\xa0\x21\xa0\x21\xa0\x21\xa0\x61\x33\xd0\xb0\x81\x28\xc9\x86\xc1\x21\x42\x24\x5b\xc3\x8e\xfd\x46\x8e\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xfd\xc7\x8d\x6e\x70\x64\x65\x8f\x82\xc8\x48\x40\x4e\x40\x4e\x40\x4e\x40\x4e\x17\x72\x22\x73\x64\x4f\x91\xe4\x62\xbe\xc8\xaf\x32\xbd\x8b\xa2\x82\x54\xf6\xfc\xaa\x1b\xe4\x8f\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x04\xa6\x3c\x1b\x4c\x09\x22\x07\x22\x07\x22\x07\x22\xb7\x44\xe4\x12\xe9\x67\xc2\x9b\xa7\x61\xfe\xd6\x10\x95\x1b\x4b\xff\xd1\x3c\x11\x64\xee\xf8\x64\x6e\xa9\xbb\x71\x40\x59\xd3\xb8\xa5\x8e\x01\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\xeb\x2e\x91\x6b\xe0\xe4\xef\x71\xa8\x1c\x0e\x00\xb7\xc3\xf4\xfa\xcd\xf3\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xc0\xf2\xce\x86\xe5\xb9\x87\x80\x57\x6d\x55\x8e\x7a\x16\x18\x20\x11\x20\x11\x20\x11\x20\x71\x09\x24\xe2\xbe\x91\xbe\x71\xbf\xea\x2d\x23\x38\x62\x8b\x34\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\xdd\x23\x80\x80\x70\x80\x70\x80\x70\x97\x0b\xe1\x4c\x62\x3b\xe5\x0d\xbe\x7c\xcc\x86\xa1\x1c\xd5\x22\xb7\x40\xe4\x2c\x8c\xa7\x32\x9d\x15\xfd\xcf\x99\x66\x1e\x55\x2c\xd6\x1c\x03\x3b\x1a\x5c\xdb\x40\xc2\xca\x5e\x59\x26\x60\x81\xc8\xff\xb7\xf8\xf8\x6e\xfc\xed\x3f\xa6\x07\x5a\x44\x5c\x45\xa9\xdb\x02\xae\x5f\x6b\xc6\xfb\xe7\xed\xfa\x21\xaf\x38\x63\x7a\xee\x9e\xf1\x78\xff\xdf\xcf\x15\xd0\xb3\x32\xe4\xff\xbd\xbd\x1b\x7f\xfb\xe1\x74\x45\xbb\x03\x6f\x4b\xa6\xd3\xd2\x0d\x8d\x7f\xcd\x15\x3e\xdb\x26\xbd\xd4\xfb\xd0\xd4\xac\xda\xd6\x6b\xb2\x01\xbc\x8b\xc9\x05\xcf\x18\xa0\x6f\x98\x46\xaa\x9f\xdc\x79\x54\x5e\x97\xb3\xd8\x47\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x40\xc1\x47\x45\xc1\x40\xb1\x40\xb1\x40\xb1\xad\xa3\xd8\xe6\x01\xd2\xd0\x81\x3c\x3f\x6f\x87\x4b\x57\x60\x1c\x1c\x17\xb7\x7b\x48\xdc\x12\x76\xda\xee\xf2\x09\x1d\x17\x27\xb3\x15\xd0\x49\x2f\x66\x8c\x9f\x8e\x2f\x1d\x06\x83\x74\xfd\xf7\xc2\x41\x66\x36\x4d\xa4\x5f\x28\x70\xe6\xff\xd5\xa8\xfc\x86\xa6\x8c\x1a\x84\x7d\x97\x13\xb3\xd4\x5d\x53\xa4\xae\xa7\x76\xd6\x7a\x95\xa8\xec\xf1\xac\x63\xaa\x9c\xab\x89\x60\x89\x9a\x00\xca\xab\x1d\xb2\xbb\x98\x85\xb1\x26\x2c\x32\x65\xf3\xb8\x80\x34\x3e\xf3\xd3\xb7\x1f\xf3\x98\xf9\x61\x2a\x94\x3d\x11\xc5\xce\x9f\xec\xa8\x72\x4c\x0c\xfa\xb0\x6f\x97\xd9\x68\xb2\xe9\x3c\x25\x2f\x36\x49\xa5\x27\xb2\xcc\x2c\x35\x8e\x33\x3e\x64\xff\xa5\x12\x69\x77\x40\x4b\xbe\x5a\x67\xee\xa2\xe8\x13\xf9\x07\x7e\xfa\xc6\xd2\x79\xac\x36\xc0\xca\xac\x58\xa7\xc8\x3c\x4e\xf8\xe5\xeb\xae\xab\xd8\xc0\xca\x4c\xee\xe7\xdf\x3c\xe6\x81\x48\xf5\x46\x4a\x5f\xa0\x96\x65\xd2\x0b\xc9\x33\x28\xb6\x2c\x9c\xb6\x87\x32\x65\xca\x71\xcc\xdf\x0a\x57\x69\xc6\xd5\xd8\xaa\xaf\x64\xc2\x9a\x44\x65\xd0\x2d\xd3\x22\xac\x33\x11\x8c\xcc\x36\x6d\x4f\x64\xca\x6e\x3f\x7c\x54\xdf\x4d\xb9\x47\xf0\x2d\x92\x71\xa0\x0d\x20\x6d\x21\x94\xaf\xc7\xc3\x58\xab\xc3\xe4\xa2\x97\xdf\x25\x20\x61\xd0\xa0\xda\x83\xd2\xdb\xf1\x69\x34\x0a\x64\xc4\xe3\x60\x28\xd3\x60\x94\xbc\x04\xa3\x79\x1c\x7a\xd2\x17\xa3\xff\xf9\x96\x8d\xd5\x53\x16\x37\xcf\xa6\xcd\xa7\x35\x99\x64\x84\x3e\xac\x32\x97\x5f\xb4\x43\xdd\x70\x41\x1f\x96\x0b\xba\xf3\x3c\x91\x34\x5d\xd2\x21\x2b\x00\xd9\xe4\xd6\x56\x00\xbd\x45\x59\xae\xac\xfe\x3b\xf3\x64\x14\x09\xcf\x3a\x22\x3d\x5d\x0f\x74\x5b\xdc\xf5\xe0\x4b\xd1\x2c\x08\x05\x10\x0a\x20\x14\x40\x28\x80\x50\x00\xa1\x00\x42\x01\x84\x02\x08\x05\x10\x0a\x20\x14\x40\x28\x80\x50\x00\xa1\x00\x42\x01\x84\x82\x23\x44\x9a\x3e\xe6\x3c\x9f\x67\x07\x73\x22\xbd\x66\x94\x80\xa6\x45\xd5\xe0\x40\x32\x62\x6c\xb1\x06\xad\x6a\xef\x39\xcf\x9f\x59\xe6\xc9\x44\x5c\xb3\x6c\xee\xd1\xdb\x46\xf3\x5f\xf0\x99\x9e\x18\x49\x2a\xc9\xf6\x57\xf3\xe6\x10\xb7\xe9\x76\xf2\x9c\x75\xa7\x01\xb6\x8e\x0e\xde\x94\xea\x97\x8c\x66\x95\x96\xf4\x94\xd4\xa9\x96\x34\x1c\xc6\x5b\x67\x9c\x1e\xb5\x23\x4e\xce\xfc\x3f\xe4\x14\x4f\xd4\xff\xb8\x97\x0f\x19\x7b\x50\xff\xda\xbf\xcf\x78\x48\x34\x3e\x63\x5e\x34\xcf\x72\x91\xde\x98\x7e\xf6\xcc\x36\x94\x45\xe1\x8b\x60\x83\xa2\xb2\x03\xb5\xbe\xda\x8c\x28\x43\x36\x8e\x78\x1c\x9b\x15\x93\xac\x16\x8f\xd4\x12\x75\x3b\xbc\xfd\xe8\x4c\x1f\x2a\xba\x09\xab\x5b\x34\xac\x00\x85\x13\xdb\x44\x55\x1b\xf6\xa0\x5b\xa5\x26\x7f\x92\xd9\x16\x18\xdf\x6e\x9e\x29\x97\x8d\xc7\xda\xc7\xd6\xb6\x74\xbf\xc6\xa8\x32\x3a\xa0\x2d\x1c\x62\x60\x03\xd1\xa6\x12\x3b\x5f\xf9\x62\x27\x11\xf7\xc4\xb9\xbc\xdb\xd4\x18\xc8\xb2\x90\x65\x21\xcb\x42\x96\x6d\x48\x2c\x9d\x77\x47\x2b\xed\x6d\xbc\xcc\xb2\x3e\xda\x80\x61\x6e\x62\xa7\x74\x4f\x15\xfb\x4e\xfd\x9c\xc1\x28\xb7\x66\x94\x6b\xe1\x84\xcb\x1b\xc2\x98\x65\x9a\x15\xb0\x89\x98\x4a\x8d\xf0\x2c\x67\x2b\x85\x6e\x83\x36\xa9\x35\x8e\xd5\x8d\x65\x7c\x13\x8b\x80\x53\x9f\x99\xf2\x5c\xeb\xac\x99\x7b\x31\x5a\xe6\x15\x0b\x67\x33\xe1\x2b\xfb\x1f\xbd\x19\xbd\xd4\x55\xc3\xe3\x30\xba\x36\x7c\x81\xe8\x16\x0b\x52\xe5\x3d\x25\x22\x0d\xa5\x5f\x10\x95\xd2\x91\x52\xad\x2d\x3a\x6e\x9e\xa9\x4a\xba\x5c\x8c\xab\x5f\xda\x06\x99\x42\xa6\x8e\x67\x1c\xaa\x1f\x50\x3d\x67\x82\xc7\x2b\xeb\x58\x0e\x02\x55\x65\x4c\x35\x69\x90\xb0\xdc\x3b\x89\x17\x93\x48\xf0\x4c\x14\xa2\xc2\x38\x95\x09\x0f\x68\xa8\xf4\xcb\x7b\xad\x7b\x4b\x63\x74\xdb\xea\x32\x73\xa3\xf6\xe2\x7f\x1f\x32\x67\x63\xe4\x8b\x44\xc4\xbe\x88\xf3\x52\xca\x12\x4c\xa6\xc9\x33\x8f\x55\xdb\xd5\x00\xa4\x73\x31\x9a\xf2\xc8\xca\xca\x4f\x57\xfa\xe3\xa7\x2b\x36\x0d\x63\x1e\x85\xff\x5a\x69\x68\x22\x18\xf7\x7d\xe2\xcd\x23\xcd\x6e\xfc\x92\x38\xea\xc7\x0f\xb2\xf2\x47\x5a\xca\x1d\xb2\x87\x90\xde\x12\xa7\xea\x32\x5d\x6e\x1b\x09\x0a\x3a\xaa\x42\x2b\xc9\xf4\x0e\xcb\xfc\xd9\x19\x01\x5d\xb1\x7b\xdb\xa4\x9d\xfa\xbf\xde\xb6\x50\xed\xd4\x2b\xfd\x2c\x5f\x59\xc0\xd3\x09\x0f\x2a\x51\x33\xc5\x7b\x29\xd2\xa9\x4c\x67\xaa\xdb\x56\x36\xe9\xfb\x42\xed\xea\x5b\x44\x2f\x89\x9d\xe1\x89\x6e\x7e\xa8\x66\x9f\x17\xfa\xa5\xb0\x4b\x02\x1d\x49\xed\xc5\x30\x64\x94\x64\x80\x3e\xb5\x12\xdc\xd0\xe9\x6f\x2b\xde\x58\x74\x56\xee\x72\xab\x85\x0d\x99\x0e\x99\x22\xff\xc7\x35\x4e\x03\xdd\x86\x01\xbb\x31\x73\xa4\x3a\x87\xb2\xcf\x6c\xf0\x07\xf7\x5e\xd4\x4a\x1c\xfb\xea\x5b\x3c\x8a\xe4\x2b\x7d\x69\xa1\xe3\xb4\xb8\x6a\xde\xa7\xea\x43\x6c\x0b\x26\xc5\x93\x3e\xb3\xc1\x57\x99\x0a\xe7\xb1\xcc\xe3\x99\xc7\x7d\xd5\x7a\xd3\x3f\x64\xec\xf5\xf3\x32\x6d\x3d\x97\x1e\x38\x2d\x9e\x51\x61\x3a\x0b\x13\xad\x2b\xe0\xb0\xb1\x50\xb6\xb6\x38\x65\x9b\x74\x32\xf7\x9e\x97\x6b\x4b\x9a\x08\x85\x00\x69\x8a\xbc\xc3\xa6\x7a\xd1\x4f\xbb\xa1\x22\x7e\x5b\xe1\xb2\xcd\x44\x1a\x88\xfa\x8f\xb3\x3c\xe5\xb9\x08\x42\xef\x66\xe9\x8b\x1d\x75\x0d\xa9\x86\x5d\xd9\xb2\xaf\x99\xab\x63\x1a\x74\x78\x88\xd8\xb6\xb7\xb4\x6d\x5f\x88\x49\xb0\x73\x5a\xc7\xcd\x24\x5a\xa3\xd4\xe2\x3b\x7b\xe7\xbe\xa6\xf4\x99\x7e\xf1\xdf\xd3\xba\xae\x23\x43\x79\x44\xbf\x54\x5e\xb1\xfe\x35\x7d\x83\x3c\xd4\x8c\xbd\xfb\x33\x93\x31\xcd\xf0\x6b\xf6\xb7\x32\x1c\xe6\xff\x8f\xd6\x9c\x94\x7f\x7c\xbf\x1d\x4f\xd8\xcb\xd9\xfc\x2a\x53\x8f\xfc\xec\x40\xd2\x08\x49\xf6\x74\x35\x55\x7f\x7b\xba\x62\x77\x95\x26\x0f\xd9\xb7\xdc\x38\xc5\x44\x94\xcd\x8c\xbf\xe1\x1e\xf5\x12\x85\x59\x46\xa1\x67\xfc\x13\x02\xd0\xf2\xd5\x0c\x80\x0e\x43\x4c\x84\x4c\x22\x31\x64\xba\xcc\x69\xc4\x83\x62\xe0\x49\x69\x5e\xd9\x5b\x45\xf1\x4e\x1f\xa8\xdf\x77\x00\xa6\x1c\xc4\x38\x76\xbf\x2f\xef\x94\xea\x9e\x7b\xf1\xc5\x62\x61\x47\xbd\xf4\x02\xb2\x62\x21\x2b\x22\xbb\xd0\x71\xb3\x0b\xb9\x3d\xd3\x42\x4a\xfe\x73\x3b\x75\x88\x93\x15\x38\x59\x81\x93\x15\x38\x59\x81\x93\x15\x38\x59\x81\x93\x15\x38\x59\x81\x93\x15\x38\x59\x81\x93\x15\x38\x59\x81\x6c\xfc\x38\xd9\x81\x93\x1d\x38\xd9\xd1\x4e\x36\xfe\x9f\xf6\x52\xcc\x03\x73\x74\x6f\x77\x5f\x66\x85\x8a\xe0\xca\xcc\x83\x99\xdc\xeb\x96\xca\xe4\x5f\x1a\x6d\x5d\xd4\x2d\x99\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x9d\x85\x73\x17\x14\xba\x03\x76\x08\x76\x08\x76\x78\x61\xec\x70\x53\x06\x0f\x33\x94\x0e\x37\x8c\xad\xe9\x5e\x19\x8d\xd7\x08\x3f\xbc\x2e\xdd\x35\x72\x49\xcd\xd2\xae\x3c\xbe\xd2\x0f\x1d\x54\x76\x12\xce\xb3\x41\x1f\xb7\x3c\x17\xd1\x63\xf2\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x08\xea\x78\x26\xd4\x11\x27\x15\x81\x3b\x81\x3b\x81\x3b\x81\x3b\xb7\xc7\x9d\x88\x89\xec\x15\x95\x5c\x8c\x84\x6c\xe1\xb0\x32\x22\x23\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\x28\xc1\xe2\xc0\xe2\xc0\xe2\xc0\xe2\x0e\x65\x71\x13\x91\xf3\xdb\x51\x2d\x7b\x0b\x44\x5e\x5d\xa1\x75\x83\x36\x24\x35\x3e\x28\xc3\xf0\xe9\x53\x17\x53\x9f\x2c\x13\xb1\x40\x54\x12\xf7\xd1\xb7\xee\xc6\xdf\x7e\x38\x9d\xd2\x22\xff\x72\x4a\xde\x29\x6d\xdf\xaf\x2d\xa6\x43\x18\x07\xa9\xc8\xb2\xbd\xb3\x3d\x7e\xd3\xbf\xbf\x20\x7e\x5a\x33\x65\x16\x93\x3d\xd2\xd7\x4c\xef\xb4\x9e\xeb\x91\x0a\x1f\x9a\xd2\xbb\x97\xea\xb1\x9c\x34\x2e\x2d\xd5\x1d\x0b\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x0a\x64\x7a\x02\x64\x5a\x73\x58\x1b\xe8\xec\x98\xe8\xac\x3c\x19\x5d\xf6\x13\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\x10\xb8\xd0\x51\xb9\x10\xb8\x0c\xb8\x0c\xb8\x4c\xeb\x5c\x06\x21\x32\xeb\x43\x64\x64\xb6\x02\x38\xe9\xa5\x8c\xf1\xf8\x14\x70\xa9\x01\x12\xa4\xeb\xbf\x0f\x0b\x32\x53\x69\x22\xfd\x82\xc5\x9b\xff\x57\x33\x1b\x34\x33\x5f\xd4\x10\xec\xbb\x94\x98\x65\xee\x9a\x8e\x39\x7b\x6a\x57\xad\x57\x88\xca\xfe\xce\x3a\xa5\xca\xb1\x9a\x08\x96\xa8\x39\xa0\x3c\xda\x21\xbb\x8b\x59\x18\x6b\xba\x22\x53\x36\x8f\x0b\x40\xe3\x33\x7d\x1f\x3f\xf3\xc3\x54\x28\x5b\x22\x8a\x5d\x3f\xd9\x50\xe5\x94\x18\xec\x61\xdf\x2c\xb3\xc9\x64\xd3\x79\xaa\xaf\x4f\xd7\x77\xfc\x9b\x65\xc6\x71\xc4\x87\xec\xbf\x54\x22\xed\x0c\x68\xb9\x57\x6b\xcc\x5d\x14\x7d\x22\xdf\xc0\x4f\xdf\x58\x3a\x8f\xd5\xe6\x57\x99\x14\xeb\x10\x99\xc7\x09\xbf\x7c\xd5\x75\x15\x1b\x58\x95\xdd\x5b\xea\xf5\x26\x4a\xa7\xc5\xc8\x32\xe9\x85\xe4\x15\x14\xdb\x15\x4e\x5b\x43\x99\x32\xe5\x34\xe6\x6f\x85\x9b\x34\xe3\x2f\x74\x21\xfd\xb3\xc8\x84\x35\x87\xca\x98\x5b\x9e\x65\x6f\x8e\x27\x93\x4d\x5b\x13\x99\xb2\xdb\x0f\x1f\xd5\x77\x53\xee\x11\x78\x8b\x64\x1c\x68\xe3\x47\xdb\x07\xe5\xe7\xf1\x30\xd6\x32\x11\xb9\xe7\xe5\x77\x09\x46\x18\x2c\xa8\xf6\x9f\xf4\x82\x7c\x1a\x8d\x02\x19\xf1\x38\x18\xca\x34\x18\x25\x2f\xc1\x68\x1e\x87\x9e\xf4\xc5\xe8\x7f\xbe\x65\x63\xf5\x94\xed\x6e\xe6\x6f\xd7\x5c\x92\x05\xfa\xb0\xca\x54\x7e\xd1\xbe\x74\xb3\xe5\x7c\x58\x2e\xe7\xce\xf3\x44\xd2\x70\x41\x07\x5d\xb6\x2f\x5b\xb4\xfd\x7a\x6b\xb2\x5c\x57\xfd\x77\xe6\xc9\x28\x12\x9e\x75\x40\xfa\xb9\x10\xe8\xa6\x2c\x2d\x04\x5f\x8a\xa6\x41\x1e\x80\x3c\x00\x79\x00\xf2\x00\xe4\x01\xc8\x03\x90\x07\x20\x0f\x40\x1e\x80\x3c\x00\x79\x00\xf2\x00\xe4\x01\xc8\x03\x90\x07\x20\x0f\x34\x7a\x00\xfb\x31\xe7\xf9\xfc\x70\x48\xa4\xd7\x8c\x12\xcf\xf4\xe6\x3c\xed\x05\x25\x1e\x6e\x22\x1e\x78\xd3\xb5\x4d\x64\x32\xab\xac\xa4\x9f\x94\x4e\x35\xa4\xd9\xc0\xdd\x3a\xc3\xf4\xa8\x9d\x70\x72\xe4\xff\x21\x87\x78\xa2\xfe\xc7\xbd\x7c\xc8\xd8\x83\xfa\xd7\xfe\x7d\xc6\x43\x62\xf0\x19\xf3\xa2\x79\x96\x8b\xf4\xc6\xf4\xb2\x67\xb6\xa0\x2c\x0a\x5f\x04\x1b\x14\xd5\x1c\xa8\xb5\xd5\x66\x90\x1d\xb2\x71\xc4\xe3\xd8\xac\x96\x64\xb1\x78\xa4\x96\xa7\xdb\xe1\xed\x47\x67\xee\x50\xd1\x4d\x58\xdc\xa2\x61\x05\x24\x9c\xd8\x26\xaa\xda\xb0\x07\xdd\x2a\x35\xf3\x93\xcc\xb6\xc0\xf8\x75\xf3\x4c\xb9\x6b\x3c\xd6\xfe\xb5\xb6\xa3\xfb\x35\x46\x95\x71\x7a\x45\xe1\x10\xdb\xaa\x5e\xb4\xd6\xcc\xe9\x7c\xe5\x4b\x9d\x44\xdc\x13\x67\xf2\x5e\x53\x5b\xa0\xc3\x42\x87\x85\x0e\x0b\x1d\xb6\x01\x79\x74\xde\x19\x75\xb4\xb7\xb1\x31\x35\x92\xe8\x41\x36\xb9\x89\xcd\xd1\x3d\xd5\xeb\x3b\x75\x33\x0c\x72\x7b\x06\xb9\x96\x47\xb8\x88\x21\x8c\x59\xa6\xf1\x00\x9b\x88\xa9\xd4\xd4\xce\xa2\xb5\x52\xdb\x36\x34\x93\x5a\xe3\x58\xdc\x58\xc6\x37\xb1\x08\x38\xf5\x99\x29\xcf\xb5\xcc\x1a\xb3\x17\xa3\x65\xde\xb0\x70\x36\x13\xbe\xb2\xfd\xd1\x9b\x91\x48\x5d\x01\x3c\x0e\xa3\x6b\x83\x14\x08\x68\xb1\x20\x55\x6e\x53\x22\xd2\x50\xfa\x05\x44\x29\x3d\x28\xd5\xda\xa2\xe3\xe6\x99\xaa\xa4\x8b\xc2\xb8\xfa\xa5\x6d\x90\x29\x64\xea\x38\xc4\xa1\xfa\x01\xd5\x73\x26\x78\xbc\xb2\x8e\xe5\x20\x50\x55\xc6\x54\x93\x06\xa1\xca\xbd\x73\x3f\x45\x12\x09\x9e\x89\x42\x47\x18\xa7\x32\xe1\x01\x0d\x95\xbe\x40\xe0\x5a\xf7\x96\x26\xe7\xb6\xd5\xe5\x05\x17\xda\x79\xff\x7d\xc8\x9c\xfd\x90\x2f\x12\x11\xfb\x22\xce\x4b\xf5\x4a\x30\x99\x26\xcf\x3c\x56\x6d\x57\x03\x90\xce\xc5\x68\xca\x23\xab\x24\x3f\x5d\xe9\x8f\x9f\xae\xd8\x34\x8c\x79\x14\xfe\x6b\xd5\xa0\x89\x60\xdc\xf7\x09\x31\x8f\x34\xae\xf1\x4b\xc8\xa8\x1f\x3f\xc8\xca\x1f\x69\xf5\x76\xc8\x1e\x42\x7a\x4b\x9c\xaa\xcb\x74\xb9\x6d\xa4\x21\xe8\x40\x0a\x2d\x1e\xd3\x3b\x2c\xf3\x67\x67\x04\x74\xc5\xee\x6d\x93\x76\xea\xff\x7a\xdb\x42\xb5\x53\xaf\xf4\xb3\x7c\x65\x01\x4f\x27\x3c\xa8\x84\xc9\x14\xef\xa5\x48\xa7\x32\x9d\xa9\x6e\x5b\xd9\xa4\xef\x0b\xb5\xab\x6f\x11\xbd\x24\x76\x86\x27\xba\xf9\xa1\x9a\x7d\x5e\xe8\x97\x5a\x2e\x69\x72\xa4\xae\x17\xc3\x90\x89\xdc\x2a\x56\x56\x75\x1b\x3a\xfd\x6d\xf5\x1a\x4b\xcb\xca\xcd\x6d\xb5\xb0\x21\xd3\x11\x52\xe4\xfb\xb8\xc6\x69\xa0\xdb\x30\x60\x37\x66\x8e\x54\xe7\x50\xf6\x99\x0d\xfe\xe0\xde\x8b\x5a\x87\x63\x5f\x7d\x8b\x47\x91\x7c\xa5\x2f\x2d\x74\x9c\xd6\x53\xcd\xfb\x54\x7d\x88\x6d\xc1\xa4\x78\xd2\x67\x36\xf8\x2a\x53\xe1\x3c\x96\x79\x3c\xf3\xb8\xaf\x5a\x6f\xfa\x87\x8c\xbd\x7e\x5e\xa6\xad\xe7\xd2\x03\xa7\xc5\x33\x2a\x1c\x67\x61\xa2\x75\x85\x15\x36\x16\xb9\xd6\x16\x9a\x6c\x11\x48\xe6\xde\xf3\x72\x65\x49\x05\xa1\xa0\x1f\xcd\x8d\xb7\xda\x4c\x2f\x3a\x69\x37\xf4\xf0\xdf\x56\xf8\x6b\x33\x91\x06\xa2\xfe\xe3\x2c\x4f\x79\x2e\x82\xd0\xbb\x59\xfa\x62\x97\xfd\xc2\x64\xf1\xf6\x9e\x13\x6e\xd5\xd7\x4c\xd4\x31\x0d\x39\xdc\x43\xec\xd7\x5b\xda\xaf\x2f\xc4\x20\xd8\x39\xad\xe3\x64\x12\xad\x49\x6a\xb1\x9d\xbd\x73\x5f\x55\xfa\x4c\xbf\xfc\xef\x69\x51\xd7\x91\xa0\x3c\xa2\x5f\x2a\x97\x58\xff\x9a\xbe\x41\xee\x69\xc6\xde\xfd\x99\xc9\x98\x66\xf8\x35\xfb\x5b\x19\x0f\xf3\xff\x47\x6b\x52\xca\x3f\xbe\xdf\x0e\x24\xec\xe5\x69\x7e\x95\xa9\x47\x4e\x76\x20\x69\x84\x24\x7b\xba\x9a\xaa\xbf\x3d\x5d\xb1\xbb\x4a\x93\x87\xec\x5b\x6e\x3c\x62\xa2\xc8\x66\xc6\xdf\x70\x8f\x7a\x89\xc2\x2a\xa3\xd0\x33\xce\x09\x41\x67\xf9\x6a\x06\x40\x87\x1d\x26\x42\x26\x91\x18\x32\x5d\xe6\x34\xe2\x41\x31\xf0\xa4\x2c\xaf\xec\xad\xa2\x78\xa7\x0f\xd4\xef\x4f\x4f\x51\x0e\xa2\x1b\x46\xa0\xec\x87\x98\xe7\x5e\x5f\x5a\x96\x85\x8b\x4b\x3b\xa7\x1f\x8e\x32\xed\xdb\xad\x95\x11\xf5\x77\xec\x78\xf6\x5f\x78\xd8\x46\x50\x34\x3e\x6f\xbf\x8c\x44\x67\x04\xaa\x73\x9b\x31\x5b\x4a\x55\xc5\xa4\x81\x60\x05\x07\xf8\x22\x1c\x60\x08\x56\xfd\x10\xac\xb6\x85\x21\xbb\x19\x6e\x60\x91\xad\xb0\x48\x8b\xcb\x02\xe0\x08\xd6\x86\xae\xac\x0d\x80\x23\x80\x23\x80\x23\x80\x23\xdd\x83\x23\x14\xed\xbf\x45\x6e\x65\x73\x84\x2c\xf6\xc3\x9f\xa1\x3f\xe7\x91\x7b\x62\xe1\xff\x63\xef\xef\x9b\xdb\xc6\xb1\xfc\x6f\xf8\xad\xa0\x3c\x35\xe5\x64\x57\x96\x93\x9e\xdf\xee\x4c\xa5\x6b\xeb\xbe\x3d\x49\x7a\x36\xbb\x9d\xb4\x2b\xce\xf4\xd4\x55\xe3\xad\x6d\x98\x84\x64\x5e\xa1\x08\x0d\x41\xd9\xf1\xfc\x2a\xef\xfd\x2a\x1c\x3c\x10\xa4\x48\x89\x92\xa8\x47\x7f\xf7\x8f\xed\x8c\x49\xf1\x01\x04\x0e\x0e\x3e\xdf\x83\x73\xb8\xdf\xd9\x69\xbf\xe1\x30\xd0\xd0\xdf\x78\xf5\xfd\x9c\xae\x71\x5e\xee\x94\xaf\x6c\x7d\xf6\xee\x04\x4b\x32\x55\x08\x4e\x6f\xf7\xcc\x33\x35\x3f\x36\x3a\x55\x41\x12\xa5\x1d\x54\x3a\x5b\xe0\x46\xd1\xf6\x95\xf7\x0f\x22\xdb\x3c\x99\x13\xbd\x29\x8a\x9e\x21\x7b\x05\xb2\x57\x20\x7b\x05\xb2\x57\x20\x7b\x05\xb2\x57\x20\x7b\x05\xb2\x57\x20\x7b\x05\xb2\x57\x20\x7b\xc5\xe9\x64\xaf\x40\xd1\x33\x64\xcf\x40\xf6\x8c\x67\x97\x3d\xa3\x33\x87\x5b\xbb\xf4\x19\xf0\xdc\xc1\xe0\xb9\x39\xcd\xf3\x67\x83\xb5\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x0e\x00\xcc\x3d\xa3\xa8\x20\x70\x43\x70\x43\x70\xc3\xe7\xc5\x0d\x97\xa5\x48\xb5\x5f\x32\x60\x86\x99\xb3\xdc\x72\xc4\xbe\x26\x59\xdc\x2b\x3b\x1c\x94\x7e\x1a\xf9\xa2\x76\x4e\xd7\xae\x5e\xe9\x80\x9e\x57\x96\x10\xc1\xb5\x41\x1e\xbb\x92\xc7\xe3\xa6\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\x20\x8e\xa7\x41\x1c\xb1\xf5\x11\x90\x13\x90\x13\x90\x13\x90\xd3\x43\x4e\x19\x0b\x87\x37\x5b\x49\xe5\x98\x12\x36\x8f\x64\x3e\xf1\x2d\xcf\x99\x61\x40\x8b\x13\xb2\x6c\x94\x1d\x65\x3f\x69\x57\x64\x2c\xe6\xd1\xdf\x58\x14\x9f\x64\x2c\xae\xae\x3f\xfc\xc5\xbe\xf5\x0e\x11\x9f\xbf\x6b\x57\xc0\xf7\xbd\xf1\xeb\x3a\x78\xbd\xf0\x2b\x57\x7c\x51\xd3\x51\x4f\xf2\x13\xb7\x53\x5e\xfb\xa9\x2d\xdd\xbd\xba\xfe\xf0\x39\x68\x88\xdd\x7e\x75\x77\x67\x8a\x65\xed\xe7\xe3\xe7\xb3\x4c\x9b\xbd\x28\xe5\x0b\x23\x9b\xcd\x5a\x3b\xb7\xf3\xb0\xf3\x0c\x9d\x2a\xf1\xd9\x5c\xe4\xad\xbe\xc8\x89\xcb\x02\x0b\xbb\x8a\x6e\xa5\xa0\xaf\xd4\x9a\x05\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x1b\x80\x7b\xab\x80\x1b\x38\x15\x38\x15\x38\x75\xe7\x38\x75\x1b\xe9\x4a\x65\x2c\x7c\xa2\xd2\x10\x2d\xac\x44\x83\xda\x62\xfd\xd6\xd8\x5c\x5c\xd2\xa4\x32\xc8\xaf\x86\x3c\x5a\x22\xfd\xa4\x6a\x40\x4c\x66\x22\x63\x7c\x6f\x34\x69\x23\xf4\x63\x9e\xbe\x33\xfc\xd9\x4a\x01\x86\xb6\x0e\x82\x1c\xdb\xc8\xb1\x7d\xfa\xf5\x17\x16\xf5\xfe\x1e\xcb\x2f\x2c\xb9\x4d\x4f\xc5\x2f\x97\xdc\x67\xa3\xdc\xd4\x72\x77\x96\x7e\x49\x59\xf2\xa0\x1a\xad\x1c\x1d\xa7\xdd\xb7\x05\xca\x4b\xbb\xff\xd6\xbf\x13\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x3f\xf0\x7f\x5f\x81\xa1\xb6\x9a\xe3\xa6\x5c\xc8\xcc\x19\x25\x92\xd9\x99\x1a\xb0\x21\x17\xd9\x52\xad\xae\xa5\xb1\xb2\xcb\xb2\x79\x90\xe9\xa9\x32\x87\xa3\x24\x5c\x54\x9e\x7c\xf3\xa0\xd6\xb6\x41\x7d\x63\x1c\x58\x72\x82\xbf\x91\x33\x79\xa7\xff\xc5\xa3\x62\xc8\xd8\x7b\xfd\x5f\xf7\xf7\x09\x4f\x88\x57\x2b\x16\xa5\x33\x55\x88\xfc\xc2\xb6\x6c\xe4\x0a\x12\xa6\xc9\x57\xc1\xce\x7d\x02\x8e\x73\x3d\x2f\xb9\x34\x29\x43\x76\x9d\xf2\x2c\xb3\x33\x0d\x8d\x76\x9e\x6a\xd3\xfe\x7a\xf8\xfa\x4f\x41\xbf\xa0\x5b\xf7\x61\xad\xfc\x8b\x79\xc0\x76\xe7\x5e\x51\x3f\x0d\x7b\x6f\xde\x4a\xf7\xea\xa9\x72\x6f\x60\x7d\x22\xaa\xc0\xa8\x9d\x19\xf2\x4d\x8d\x0d\x5a\xef\x65\xf4\x3d\xf6\x4e\xdf\x77\x5b\x42\x7e\x7d\x4b\xb4\xa8\x82\xfc\x49\x8c\x64\x53\x36\x1e\x22\x25\x44\x4a\x88\x94\xcf\x56\xa4\xdc\x6d\x89\xf8\x6d\x69\x87\x47\x1a\x27\x32\xa7\x17\xae\x6b\x82\xfb\x58\x39\xbc\xa3\x87\xf9\x85\x5a\x16\x06\x78\x77\x06\xb8\x75\xb1\x1e\xae\xbf\x93\x8c\x29\xb3\x76\x66\x77\x62\x24\x0d\xd2\x72\xdc\xa9\x14\x7e\x2d\xea\xa3\xb7\x09\x2c\x6c\x26\xb3\x8b\x4c\x8c\x39\xb5\x99\xbd\x5f\x68\x89\x0d\x83\xf6\x5f\xcb\x0e\xaa\x64\x32\x11\xb1\xb6\xf5\xe9\x93\xd5\x0f\x43\x75\x38\x4b\xd2\x81\x5d\x6f\x13\xed\x61\xe3\x5c\x7b\x46\x53\x91\x27\x32\xf6\x84\xa1\x74\x92\xf4\xdb\xfa\x86\x9b\x29\xfd\x90\x21\x27\xe2\xfa\x97\xee\x85\xec\x4d\x46\x81\xc7\x9b\xe8\x1f\xd0\x73\x9a\xb2\xe4\x0d\xcf\x58\x7e\x04\x7a\x94\x6b\x7a\x92\x1e\x89\xc3\xbb\x20\xcb\xe2\x34\x15\x5c\x09\x0f\xd9\xaf\x73\x39\xe5\x63\xfa\x54\xd7\x32\x4d\xa2\xa7\x81\x69\x2d\x83\x95\xdd\x5b\x97\x69\x1a\x8d\x77\xfe\xc7\x21\x0b\x16\x3c\xb1\x98\x8a\x2c\x16\x59\x51\x4a\x3b\x82\xc9\x7c\x7a\xcf\x33\xfd\xee\xfa\x03\xe4\x33\x71\x39\xe2\xa9\x93\x59\x6f\xcf\xcc\xe1\xdb\x33\x36\x4a\x32\x9e\x26\xff\x74\x52\xc9\x9d\x60\x3c\x8e\x89\xbf\x5e\x1a\x96\x11\x97\x04\xce\x5c\xfe\x5c\x95\x3f\x32\xd2\xe6\x90\xbd\x4f\x68\x94\x04\x8f\x2e\xf3\xf9\x77\x23\xc0\x6e\xa2\x0c\x8c\xb2\x4a\x63\x58\x16\xf7\xc1\x17\x30\x0f\xf6\xce\xbd\xd2\x4a\xed\xdf\x6e\x5b\xe8\xe9\xf4\x90\xbe\x97\x8f\x6c\xcc\xf3\x3b\x3e\xae\xc4\x8d\xf8\x71\x29\xf2\x91\xcc\x27\xba\xd9\x1a\x5f\xe9\x97\xda\xd3\xb5\xbf\x11\x0d\x12\xd7\xc3\xa7\xe6\xf5\x13\xdd\xfb\xa2\x24\x2e\x85\x4e\x12\xac\x4c\x2d\x7c\xf7\x19\x14\x6d\x8a\xa7\xa3\x4e\x92\x1a\x06\xed\xed\xc4\x0c\x87\x92\xca\xd5\x6b\xf5\x66\x43\x66\x02\x86\xc8\xd7\x09\x8d\xd3\xb9\x79\x87\x73\x76\x61\xfb\x48\xb5\x0f\xa9\x1f\xd9\xf9\x9f\x79\xf4\x55\xcf\xbc\x59\xac\xcf\xe2\x69\x2a\x1f\xe9\xa4\x5a\xc3\x19\xb1\xd1\x8e\xa7\xea\x45\xdc\x1b\xdc\xf9\x2b\xfd\xc8\xce\x7f\x92\xb9\x08\x2e\xcb\x22\xae\x22\x1e\xeb\xb7\xb7\xed\x43\xc6\xde\x5c\x4f\x19\xeb\x39\x77\xc1\x91\xbf\x46\x05\xc2\xd4\x3a\xda\xa1\x80\xb4\xde\x02\xb9\x76\xc5\xed\x76\x47\xeb\x8a\xe8\x7e\xfe\x59\x49\x21\xa0\x80\x18\xc3\x54\xbb\x2f\x97\xeb\x7e\xd9\x05\xdd\xe1\x5f\x1b\x5c\xb4\x89\xc8\xc7\xa2\xfd\xb0\x2a\x72\x5e\x88\x71\x12\x5d\xcc\x9d\x78\x98\xae\x20\x3d\xe0\x3e\x17\xe3\x0b\xfa\xe6\x35\x7d\x66\x78\x84\x58\x92\xef\x68\x49\x5e\xd3\xe4\x5d\x9f\x36\x71\x23\x53\xa3\xd1\x19\xf1\x99\xbd\x08\x47\x26\x1d\x33\x63\xfd\x25\xcd\xe3\x26\x32\x92\xa7\xf4\x4b\xed\x05\x9b\x5f\xd3\x19\xe4\x91\x2a\xf6\xe2\xbf\x94\xcc\xa8\x87\x0f\xd8\x47\x6d\x2b\xec\xbf\x6f\x9c\x05\x29\xff\xf8\xb2\x1b\x2b\x58\xcb\xb9\xfc\x49\xe6\x11\xf9\xd5\x63\x49\x5f\x48\xb2\xdb\xb3\x91\xfe\xdb\xed\x19\xbb\xaa\xbc\xf2\x90\x7d\x28\xac\x13\x4c\x64\xd8\xf6\xf8\x0b\x1e\x51\x2b\x51\x98\x61\x9a\x44\xd6\x1f\x21\x90\x2c\x1f\xed\x07\x30\x61\x78\x53\x21\xa7\xa9\x18\x32\x73\xcf\x51\xca\xc7\xfe\xc3\x93\xd2\xda\xd8\x5a\xfe\xf6\x41\x1b\xe8\xdf\xef\x1d\x94\x6c\x44\x30\xd6\x48\x6a\xbd\x37\x6d\x2b\x4c\x4f\x57\xbb\xe1\x56\x73\xd4\xed\x4e\x53\x33\x99\xf3\x3b\x66\xa1\xe9\x56\x5f\x33\x6c\x28\x14\xd9\xdc\x34\xa7\xcd\xe3\x02\x2f\xe5\x59\xd6\xd4\xdc\x9b\x31\xc0\x06\x00\x6c\x00\xc0\x06\x00\x6c\x00\xc0\x06\x00\x6c\x00\xc0\x06\x00\x6c\x00\xc0\x06\x00\x6c\x00\xc0\x06\x00\x6c\x00\x40\x3a\x77\x6c\x40\xc0\x06\x04\x6c\x40\xd8\x88\xb9\xf5\x50\x9b\xb2\x77\xee\x86\x02\x95\x5b\xa1\x76\xc7\x4d\xec\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x40\xeb\x4e\x82\xd6\x9d\x42\xbc\x0f\x28\x21\x28\x21\x28\xe1\x71\x51\x42\xb3\x8d\x03\xf5\x1e\xdf\xfc\xfd\xcc\x34\x45\x63\x19\x40\xb3\x45\xe5\xe8\x6a\x3e\xda\x8f\x8b\x72\x8f\x95\x2f\xbc\xb0\xe0\xa3\xf9\xd2\x27\x50\xf2\xb1\xf6\xed\x7d\xdd\x68\xcb\xfb\xe9\xdf\xdf\x2f\xa7\x32\x8e\x13\x95\xcf\xe8\x72\x77\xb3\x78\x2c\x8a\x75\x4b\x41\x5e\xcb\xf8\x9d\xbf\xd4\x9f\xe9\x52\xa7\xcd\xe1\x97\xf5\x26\xdd\x5c\x95\xee\xe4\xd3\xd3\xc4\xcd\x6d\x05\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x0c\xf0\x8c\x3c\xd1\x00\xb0\x00\xb0\xa7\x05\x60\xb7\xb0\x73\xde\x26\x11\x72\x7b\xe7\x1b\x18\xc3\x9e\xea\x45\x4e\x5d\x82\x1f\x1b\x85\xd7\x4c\x3f\xd6\xaa\x18\xb9\x67\xe8\xb4\x21\x21\x32\xaf\xb1\x09\x23\xda\x46\xa2\xd6\xe5\xfd\x08\xe9\x61\x90\x1e\xe6\xe4\x33\xb6\x76\x1b\x06\xfd\xa5\x6e\xed\x7c\xbf\xbe\x0a\x4d\x76\xbc\xe1\x6e\x2b\x4e\x6e\x32\x57\xac\x54\x73\xf2\xb8\x67\x0e\xf3\x4a\x95\x99\xa3\x2c\x3f\x09\x9d\x01\x3a\x03\x74\x06\xe8\x0c\xd0\x19\xa0\x33\x40\x67\x80\xce\x00\x9d\x01\x3a\x03\x74\x06\xe8\x0c\xd0\x19\xa0\x33\x40\x67\x80\xce\x70\xda\xf5\x28\x37\x52\x1b\x36\x24\x23\xd6\x16\x1b\x16\xab\xd7\x9e\xb3\xe2\x9e\xa9\x48\x4e\xc5\x80\xa9\x59\x44\xa3\x8d\xfa\xbf\xe0\x13\xd3\x31\xa6\xb9\x24\xdb\x5f\xdd\xe7\x43\xf4\xe6\xb0\x37\xfb\xcc\x6d\x21\x58\x23\xd2\x78\x8d\x42\x9a\xc7\x8d\xed\xf4\x0b\x6d\x27\x24\x18\x45\x36\x4f\xb9\xc8\xe6\x0e\x50\xfd\xca\xd5\x36\x37\xb2\xb3\xdd\xeb\x6d\x1e\xfb\x80\xa7\x77\x82\xc4\x0b\x89\x17\x12\x2f\x24\xde\x1d\x28\xae\xab\x96\xe9\xdc\xa2\xe0\x7a\xec\xe1\x39\x0d\x22\x6b\x6f\xb6\x1b\x45\x3c\x8f\xd7\x60\xa3\x88\x27\x8a\x78\x16\x28\xe2\x89\x22\x9e\x28\xe2\x89\x22\x9e\xfb\x28\xe2\xb9\x19\xe2\x5c\xa7\x8c\xe7\x72\x47\xee\x94\xab\x79\x2e\x73\x14\xe9\x11\x0f\x6c\x8d\x8f\x12\x9f\x07\xe3\x2f\x3e\xfb\x05\x3e\x4a\x7c\xa2\xc4\xe7\x8e\x31\xc8\xea\x09\xc3\xf7\xa9\x1b\x86\xd9\xff\x9a\xef\xbb\xd5\x24\x80\x90\x2d\xd7\x91\x2d\x2f\x95\xf1\x00\x17\xaa\x97\xe6\x1c\xf7\x6d\x4f\x47\xd6\x58\x45\xc7\xb4\x9e\xf2\x71\x5a\x92\xc3\xd1\xc5\x4e\xb5\x2b\xad\xa8\x90\xf9\xde\x04\x9d\x0c\x6e\xf4\xb3\x72\xa3\xa1\x93\x1d\xa9\x4e\xd6\x95\xb9\xac\x6f\xe1\x41\x5f\x0e\x71\xfe\x00\x83\xc1\xe4\x71\x28\x93\x07\x18\x0c\x18\x0c\x18\x0c\x18\xcc\x21\x33\x18\x64\xa3\xde\x61\x36\xea\x86\x16\xfa\x49\xe6\x57\x69\xea\xbd\xa7\x3d\x21\x9b\x63\xcc\x52\x85\x8c\x1a\xc8\xa8\x81\x8c\x1a\xc8\xa8\x81\x8c\x1a\xc8\xa8\x81\x8c\x1a\xc8\xa8\x81\x8c\x1a\xc8\xa8\x81\x8c\x1a\xc8\xa8\xb1\xcd\x8c\x1a\x28\xdd\x88\x8c\x1e\xc8\xe8\xf1\xec\x32\x7a\x2c\x80\x67\x4a\x44\xb3\x3c\x29\x9e\xe8\x48\x22\x36\x60\x67\x37\xf6\x4a\x3e\xac\x1f\xe4\xac\x42\xce\xe6\xda\x07\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x04\x08\x39\x55\x41\x60\x40\x60\x4e\x8b\xc0\xec\x24\x2a\xa6\x4a\x18\x0e\x27\x26\x66\x8e\x7c\xac\x5b\xb7\x6d\x7f\x88\xa9\xff\xaa\x6d\x1d\x88\xd0\x6e\xb6\x27\xd5\x9e\x02\xf1\xe5\x88\x2f\x7f\x7e\x9b\x93\xe6\x07\xc1\x36\xb7\x26\x35\xde\x6d\x7b\x35\xda\x1a\x6e\xb7\xf7\x0a\x6d\x1d\xe7\x84\x55\xeb\xb3\x1d\xed\x0c\xb1\xb0\x3a\x1b\xd4\x03\xa8\x07\x50\x0f\xa0\x1e\x40\x3d\x80\x7a\x00\xf5\x00\xea\x01\xd4\x03\xa8\x07\x50\x0f\xa0\x1e\x40\x3d\x80\x7a\x00\xf5\x00\xea\xc1\xb6\x72\x22\x1f\x54\x45\xb6\xae\x2a\xc2\x86\x5c\x64\x57\xbb\xd6\xeb\x81\xb7\xeb\x15\x36\x3b\x5a\xde\x35\x97\x0e\x70\x23\xc6\x85\x52\x66\xcf\xab\x94\x59\xcf\x44\xbb\x8f\x84\x8d\x5d\xcd\xd3\x4a\x65\xcc\x8e\x78\x78\xcf\xa7\x68\x84\xe2\x09\xc5\x13\x8a\x27\x14\xcf\x3e\x24\xc8\x1e\x52\x31\xf6\xa3\x40\x1e\x77\x5c\x4a\x83\xea\xb8\x91\x95\x46\x89\xb2\xe3\x35\xce\x28\x51\x86\x12\x65\x05\x4a\x94\xa1\x44\x19\x4a\x94\xa1\x44\xd9\x81\x94\x28\xeb\xcc\xfc\xd6\x2c\x50\xb6\xd0\x71\x43\x82\xec\xfd\xaf\xde\x91\x0e\xfb\x60\xfc\xc3\x67\xbf\x78\x47\x3a\x6c\xa4\xc3\xde\x29\xe4\xe8\x25\x19\xf6\x8e\x64\xb3\x5a\x2a\xec\xb9\xbb\x6e\x35\x11\xf6\x4e\x34\x3b\x52\x66\x57\xa9\xf9\xd5\x2a\xe5\xd9\x80\xa0\x2c\x4e\x1e\x92\x78\xc6\xd3\x50\x7f\xe6\x3e\x4e\xaf\x21\x99\xf0\x30\x58\xba\xbd\xf1\x8b\xbe\x73\xba\xde\x79\x19\x03\x5d\x09\x6a\xf5\xf3\x3a\x4b\x32\x55\x08\x4e\x0d\xf0\x8c\x53\xf3\x3c\xae\x56\xfa\xe3\x67\xb3\x01\x6e\x87\x0e\x3f\x85\x25\xbc\x7f\x10\xd9\xe6\xbb\xf7\xe8\x5d\x91\xd6\x1a\xdb\x12\xb0\x2d\x01\xdb\x12\xb0\x2d\x01\xdb\x12\xb0\x2d\x01\xdb\x12\xb0\x2d\x01\xdb\x12\xb0\x2d\x01\xdb\x12\x4e\x68\x5b\xc2\x33\x2a\x84\x85\x5d\x1b\xd8\xb5\x81\x5d\x1b\x47\xb1\x6b\xa3\x37\x90\xb8\x6c\x6b\x80\xfd\x92\x01\x44\xcc\x9c\xe5\x5e\x50\xdb\xae\x17\x98\x38\x28\x7d\x36\xf2\x4b\xed\xfc\xae\xdd\xbe\xd2\x19\x3d\xaf\x2c\x27\x82\x6b\x03\x45\xae\x82\x22\x8f\x1b\x43\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x9e\x08\x82\xac\xc5\x3f\x35\x2c\x56\xb6\x1a\x01\x05\x02\x0a\x02\x0a\x02\x0a\x02\x7a\x4c\x04\x14\x31\x93\xc7\x0b\x2a\x5b\x22\x25\x7f\x92\xf9\x55\x9a\x7a\x8a\xa9\x8e\x1b\x59\x22\x72\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\x12\xd8\xf2\x84\xb0\x25\xc0\x1c\xc0\x1c\xc0\x1c\xc0\x5c\x1d\xcc\xd5\xb3\x13\x6f\xce\xe5\xaa\x3b\xc2\x41\xe5\xb6\x44\xe5\x1a\x6a\x80\x82\xc1\xed\x28\x07\x02\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x08\xdc\x46\x04\xae\x9f\x4d\xc0\x5b\xa0\x70\xd8\x02\xbc\x5d\x86\x77\xdc\xfc\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\x0e\xec\xee\x24\xd8\xdd\xc9\x14\x3d\x00\x38\x04\x38\x04\x38\x3c\x2e\x70\x98\xdf\xf1\x68\xe8\x40\x0c\x5d\x94\xf0\x4e\x22\x2f\x5b\x19\xe1\x98\x8a\x01\x8e\x64\x3e\xf1\xdf\x81\x33\xc3\x5e\x16\x97\x3e\xdb\xa8\x0e\xd9\x5e\x0a\x9c\xe9\xd6\xb9\x0a\x1b\x67\x9e\xbd\x8d\x45\xf1\xb9\x7e\xd6\xd5\xf5\x87\xbf\xd8\xf6\xd8\x21\x74\xf3\x77\xed\x8a\xdc\xbe\x77\xe8\x05\x0f\xaf\x17\x77\x84\x8a\x9f\x68\x7a\xf6\xe9\xf7\x82\xff\x7d\x68\x80\xb0\x4d\x1d\xe1\xd7\xd7\x57\xd7\x1f\x3e\x07\x0d\xb3\xdb\xee\xe0\xee\x4c\x01\x9c\x3d\xf7\x8a\x28\x9d\xa9\x42\xe4\xb9\x4c\xc5\x5d\x92\xc5\x49\x36\x6e\x0f\xef\x35\xab\xe4\xdc\x4e\xeb\xce\xa7\x73\x82\xc2\x5b\x73\xa5\xcf\x32\x15\x7f\x36\x57\x3a\x6d\x9a\xdf\xad\x3b\xe9\x36\x6b\xe8\x4f\x8d\x8d\x05\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\x0d\x6c\xbd\x55\x6c\x0d\x72\x0b\x72\x0b\x72\xbb\x73\x72\xbb\x85\x1a\xe4\xc4\x79\x1e\x5e\x0f\xe7\xd9\xc2\x4a\xe0\xa8\x2d\x82\x6f\xf5\xcd\xb7\xad\xe0\xa9\x8c\xe9\x6b\xe4\x20\x61\x50\x9f\x89\xe7\x93\xaa\x01\x47\x99\x89\x8d\xf1\x3d\x93\xa7\x5e\x30\x91\x79\x97\x35\x41\x91\xed\x67\x77\x32\xf6\x52\x9e\xfd\x77\x55\x59\xec\xa7\x33\xe9\x2f\xb2\xee\x3c\x63\xe7\xc0\x01\xe5\x08\x88\xf4\x92\xdb\x4c\x1f\x95\xc5\x9f\xf3\x58\xb5\xd7\x75\x27\xd8\x54\xf7\x06\xed\xee\x0e\xd9\x55\xc6\x92\xcc\xa0\x17\x99\xb3\x59\xe6\xe9\x4d\xcc\xe2\xfc\xe9\xf3\x2c\x63\x71\x92\x0b\x6d\x68\x84\x47\x02\x64\x60\xb5\xc7\x62\x99\x88\x1b\x76\x76\x05\xca\x46\xb3\x9c\xdc\xdb\x69\x2e\x23\xa1\x94\x9d\x83\x02\x2f\x7d\xc8\x7e\xa5\x3b\xd2\xb2\x81\x7c\x01\x3d\x01\x5d\xa5\xe9\x1b\x72\x1c\xe2\xfc\x89\xe5\xb3\x4c\xaf\x8c\xb5\xbd\x71\xde\x92\xbd\x9c\x88\x4b\x3b\x60\x1e\xb1\x87\x29\x9b\xfc\xd2\x8f\x3c\xe3\x63\x91\x9b\x15\x96\x49\xf5\xac\x94\x8c\x12\x72\x19\xfc\x5a\x86\xd3\xba\x51\xe6\x4c\x7b\x94\xc5\x93\xf7\xa1\x26\xfc\xab\x7e\xd3\xe2\x5e\x28\xe1\x6c\xa5\xb6\xf4\x0e\x76\x11\xef\xb9\x13\x8c\xec\x39\xad\x5b\x64\xce\x5e\xff\xf0\x27\x7d\x6e\xce\x23\xa2\x72\xa9\xcc\xc6\xc6\x32\xd2\xda\x42\x3b\x81\x3c\xc9\x8c\xca\x4c\xbe\x7b\x79\x2e\x91\x0a\xcb\x0c\xf5\xe2\x94\x46\xc9\x9b\xcb\xcb\xb1\x4c\x79\x36\x1e\xca\x7c\x7c\x39\xfd\x3a\xbe\x9c\x65\x49\x24\x63\x71\xf9\xbb\x0f\xea\x5a\x5f\xa5\xbe\xaa\xb6\xef\xbc\x57\x5b\x4a\x06\xe9\x87\x26\x3b\xfa\xd6\x38\xda\xfd\xde\xe7\x87\xf9\xfb\x5c\x45\x91\x98\xf6\x7c\xa3\x4d\x26\x06\xb2\xce\xfb\x99\x18\xcc\x2a\x66\xfe\xc9\xcd\xdf\x59\x24\xd3\x54\x44\xce\x57\x39\x81\x69\xc2\xbc\x57\xd3\x34\xe1\xdf\x14\xca\x02\x94\x05\x28\x0b\x50\x16\xa0\x2c\x40\x59\x80\xb2\x00\x65\x01\xca\x02\x94\x05\x28\x0b\x50\x16\xa0\x2c\x40\x59\x80\xb2\x00\x65\xa1\xdf\xe8\xd4\x9b\x82\x17\x33\xb5\x31\x42\x32\x73\x46\x89\x6b\xf6\xa5\x33\x6c\x88\x49\xfa\xdc\x85\xd3\x25\xb6\xbf\x39\x7e\x77\x59\x72\x10\xb2\x4b\x55\x20\x71\x02\x68\x4c\xbf\x55\x57\xfd\x64\xd7\xb8\x78\x93\xa1\x61\xaa\x44\xed\x65\x34\xcc\x1a\x3b\xcf\x34\xe5\x91\x38\xc5\xfe\x43\x2f\x06\x09\x0e\x12\x1c\x24\x38\x48\x70\xfd\x28\x63\xb3\x03\x15\xc6\x4e\x22\x66\xa2\x5d\x0c\xdb\xc8\x60\xf7\xe1\x16\xbf\xa3\x47\xfb\x85\x5a\x5d\xc1\x5a\xef\xcc\x5a\xb7\xae\x44\xc3\xc5\x65\x92\x31\x65\x16\x86\xec\x4e\x8c\xa4\xe1\x35\x0e\xaa\x94\xaa\xa6\xe5\x58\xf4\x36\x81\x39\xce\x64\x76\x91\x89\x31\xa7\x36\xb3\xf7\x0b\xcd\xb6\x01\xac\xfe\x6b\xd9\x01\x97\x4c\x26\x22\xd6\x13\x43\xfa\x64\xc5\xb1\x50\xfa\xcc\x92\x74\x60\x17\x93\x84\x32\xd8\x38\xd7\x3e\xd6\x54\xe4\x89\x8c\xfd\xf2\xb9\x74\xb7\xf4\xdb\xfa\x86\x9b\x29\xfd\x90\x21\x04\xe1\xfa\x97\xee\x85\xec\x4d\x46\x06\x35\xba\x4b\x0c\xcd\x73\x4e\x04\xcf\x1a\x9f\xb1\xfc\x08\xf4\x28\xd7\xf4\x24\x3d\x2e\xa7\xdf\x05\xa9\x06\xa7\xa9\xe0\x4a\x78\x82\x7c\x9d\xcb\x29\x1f\xd3\xa7\x32\xb9\x13\x06\xa6\xb5\x0c\x33\x75\x6f\x5d\xe6\x2a\xd4\xdf\xf3\xf5\xf0\x8f\x43\x76\x63\x3e\x9d\x69\xc7\xa9\xc8\x62\x91\x15\xa5\x6e\x21\x98\xcc\xa7\xf7\x3c\xd3\xef\xae\x3f\x40\x3e\x13\x97\x23\x9e\x3a\x0d\xf1\xf6\xcc\x1c\xbe\x3d\x63\xa3\x24\xe3\x69\xf2\x4f\xa7\x03\xdc\x09\xbd\x60\x27\xb8\x78\x69\x16\xea\x71\x89\x97\xcc\xe5\xcf\x55\xf9\x23\xa3\xdb\x0d\xd9\xfb\x84\x46\x49\xf0\xe8\x32\x9f\x7f\x37\xa2\xc7\x46\x42\x37\xb2\x21\x8d\x61\x59\xdc\x07\x5f\xc0\x3c\xd8\x3b\xf7\x4a\x2b\xb5\x7f\xbb\x6d\xa1\xa7\xd3\x43\xfa\x5e\x3e\xb2\x31\xcf\xef\xf8\xb8\x12\x30\xe1\xc7\xa5\xc8\x47\x32\x9f\xe8\x66\x6b\x7c\xa5\x5f\x6a\x4f\xd7\xfe\x46\x34\x48\x5c\x0f\x37\xc9\xfd\x74\xe7\x8f\x45\x94\xc4\xa5\x8a\x47\x6a\x0c\xe9\xaa\xfe\x33\x28\xda\xa9\x4e\x47\x9d\xde\x32\x0c\xda\xdb\x91\x7a\xc7\x49\x2e\x6c\x2f\x8f\x6a\x37\x1b\x32\x13\x39\x43\x8e\x51\x68\x9c\xce\xcd\x3b\x9c\xb3\x0b\xdb\x47\xaa\x7d\x48\xfd\xc8\xce\xff\xcc\xa3\xaf\x7a\x92\xce\x62\x7d\x16\x4f\x53\xf9\x48\x27\xd5\x1a\xce\x28\x69\x76\x3c\x55\x2f\xe2\xde\xe0\xce\x5f\xe9\x47\x76\xfe\x93\xcc\x45\x70\x59\x16\x71\x15\x71\x3d\x61\xb9\xf6\x21\x63\x6f\xae\xa7\x8c\xf5\x9c\xbb\xe0\xc8\x5f\xa3\x82\x14\x6a\x1d\xed\x50\x28\x51\x6f\x11\x4d\xbb\x82\x52\x7b\x43\x51\x45\x74\x3f\xff\xe8\x44\xc3\x29\xf8\xc3\xf0\xc3\x55\xd7\xe1\x75\x17\xee\x82\xee\xf3\xaf\x0d\xde\xdc\x44\xe4\x63\xd1\x7e\x58\x15\x39\x2f\xc4\x38\x89\x2e\xe6\x4e\x3c\x6c\xaf\x91\x1e\xf4\x70\x56\xf9\x0b\xba\xf1\x35\x75\x01\x38\x8f\x58\xea\xef\x68\xa9\x5f\xd3\xa6\x5d\x9f\x36\xf1\x13\x53\xa3\x55\x19\x11\x96\xbd\x08\xc7\x2b\x1d\x33\x16\xe0\x25\x4d\xf9\x26\x42\x90\xa7\xf4\x4b\xed\x30\x9b\x5f\xd3\x19\xe4\xbc\x2a\xf6\xe2\xbf\x94\xcc\xa8\x87\x0f\xd8\x47\x6d\x41\xec\xbf\x6f\x9c\x5d\x29\xff\xf8\xb2\x1b\x83\x58\xcb\x0f\xfd\x49\xe6\x11\xb9\xe0\x63\x49\x5f\x48\xb2\xdb\xb3\x91\xfe\xdb\xed\x19\xbb\xaa\xbc\xf2\x90\x7d\x28\xac\xbf\x3c\x53\x65\x60\xd8\x05\x8f\xa8\x95\x28\xdc\x2e\x4d\x22\xeb\xba\x88\x34\x56\x4c\x3e\xda\x0f\x60\xc2\xd1\xa6\x42\x4e\x53\x31\x64\xe6\x9e\xa3\x94\x8f\xfd\x87\x27\xc5\xb1\xb1\xb5\xfc\xed\x83\x36\xd0\xbf\xdf\x3f\x80\xd9\x08\x8c\xac\x9e\x0d\xfa\x60\x44\x9e\x30\xcf\x5b\xe3\x1d\x8f\x26\xd1\xdb\xea\x12\x53\x0f\xb9\x61\x90\x14\xa6\x4b\x52\x18\xc4\x6c\x23\x66\x1b\x31\xdb\x88\xd9\x46\xcc\x36\x62\xb6\x11\xb3\x8d\x98\x6d\xc4\x6c\x23\x66\x1b\x31\xdb\x88\xd9\x46\xcc\x36\x62\xb6\x11\xb3\x8d\x98\xed\xb5\xe8\xdd\x51\xa4\x81\xd9\x2c\xff\xcb\xd1\x05\x31\x75\x49\xfc\xb2\xb7\x70\x53\x88\x4f\x10\x9f\x9e\x63\x9c\xe9\xd6\x03\x4c\xb7\x9f\xdc\xe5\xe0\xb3\xba\xf4\x99\xce\xe5\xe8\xac\xfe\x6a\x79\x5c\x20\x06\x40\x0c\x80\x18\x00\x31\x00\x62\x00\xc4\x00\x88\x01\x10\x03\x20\x06\x40\x0c\x80\x18\x00\x31\x00\x62\x00\xc4\x00\x88\x01\x10\x03\x0e\x66\xaf\xcc\x6e\x12\xb8\x9c\x5e\xe6\x96\x0d\x53\xb6\x1c\x1d\xfe\x5a\x9e\xab\x65\x47\x49\x5a\x0e\x3d\x3b\x4b\x7f\x69\x59\x8e\xb0\x8f\x74\xc8\xc7\x02\x65\x0c\xca\x18\x94\xb1\x93\x53\xc6\x0e\x38\xe7\xca\xa6\xc9\x56\x8e\xce\x0e\x77\xc9\xb2\x82\xf4\x2a\xcf\xc3\x14\x23\xbd\x0a\xd2\xab\x20\xbd\x0a\xd2\xab\x20\xbd\x0a\xd2\xab\x1c\x41\x7a\x95\xad\xe4\x55\x41\x42\x95\xd5\x13\xaa\x20\x93\xca\xf3\xf2\x13\x9f\xfd\x92\x1d\x99\x54\x90\x49\x65\xdb\x9c\x63\xdb\x29\x54\x76\x98\x3b\xe5\x04\x93\xa6\xe8\x4b\xa8\x29\x8f\x9c\xb6\x43\xff\xfe\x7e\x19\xe6\xe9\x5f\x33\x97\xca\x9e\x52\xf6\x1e\x59\x2e\x95\x4f\xae\xcd\x63\x54\xc2\x44\x20\x35\x02\xa9\x11\x48\x8d\x40\x6a\x04\x52\x23\x90\x1a\x81\xd4\x08\xa4\x46\x20\x35\x02\xa9\x11\x48\x8d\x40\x6a\x04\x52\x23\x90\x1a\x81\xd4\x6b\x91\xbc\x00\x2a\x1c\x6e\x56\x95\x65\x89\x90\x17\x67\x55\x39\xe6\xd2\x50\xad\x59\x55\x3a\x62\xa1\x6d\x46\x91\xa2\x8e\x1f\x24\xa9\xe7\x18\x45\xba\xf5\x02\x7e\xf3\x37\xe8\x3b\xbf\x4a\xaf\x29\xf0\xb7\x91\x5f\x65\xb3\xaa\x80\xd5\xfc\x2a\xc7\x6c\xff\x3b\xe4\x57\x81\x40\x00\x81\x00\x02\x01\x04\x02\x08\x04\x10\x08\x20\x10\x40\x20\x80\x40\x00\x81\x00\x02\x01\x04\x02\x08\x04\x10\x08\x20\x10\x40\x20\x78\xb6\x99\x56\xb6\x5c\x3e\xd1\x5a\x64\x83\x59\xf5\x0a\x74\x56\xdc\x33\x15\xc9\xa9\x18\x30\x35\x8b\x68\xcc\xd1\x28\x10\x7c\x62\xba\xc7\x34\x97\x34\x03\x54\xa3\x84\x89\xdd\x3c\x97\x50\xe1\x35\xf2\xc3\x1c\x33\xbe\x6b\xc9\x0f\xd3\x86\xec\x76\x86\xac\x0f\x2d\x53\xcc\xb2\xa1\xda\x3d\x53\xcc\x71\xf7\x96\xb6\x4c\x31\x50\xfb\xa0\xf6\x41\xed\x7b\x1e\x6a\xdf\xa1\xe5\x8c\xd9\x4c\x8a\x3b\xee\xf0\x8b\x56\xf9\x6d\x63\x83\x8c\xec\x31\xc7\x6b\x94\x91\x3d\x06\xd9\x63\x90\x3d\x06\xd9\x63\x90\x3d\x06\xd9\x63\x0e\x35\x7b\xcc\x52\xf8\xb5\x4e\xf6\x98\x76\x57\x0e\xd9\x63\xda\xb2\xc7\xec\x6f\xe9\x8e\x3c\x32\x07\xe3\x31\x3e\xfb\x65\x3c\xf2\xc8\x20\x8f\xcc\xb6\xd9\xc7\x56\xf2\xc8\x6c\x59\x44\x0a\xf3\xc8\x54\x6f\xb5\xd5\x3c\x32\xd0\xae\x56\xd0\xae\x36\xc9\x6f\x83\xc4\x36\x1d\x13\xdb\x20\x60\x1d\x01\xeb\x08\x58\x47\xc0\x3a\x02\xd6\x11\xb0\x8e\x80\x75\x04\xac\x23\x60\x1d\x01\xeb\x08\x58\x47\xc0\x3a\x02\xd6\x11\xb0\x8e\x80\x75\x04\xac\xaf\xc6\x14\x0f\x3b\x95\xcd\x9a\x39\x6c\x8e\x2e\x7a\xaa\x63\xf2\x9a\xdd\xc7\xb1\x42\xf9\x82\xf2\xf5\xac\x02\x58\xb7\x17\xb9\xba\xc5\x04\x35\x87\x9b\x99\xa6\x97\x94\x34\x47\x67\xce\x57\xce\x45\x03\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x0f\xa6\x7f\x30\xbb\x6f\xb6\x9c\x84\x06\xd9\x67\xf6\x1d\xc1\xbb\x66\xda\x99\xa3\x43\x74\x9d\xf2\xcd\x6c\x3b\xd1\xcc\xc1\x66\x98\xe9\x21\xb5\xcc\x11\xf6\x88\x6e\x39\x65\x20\xc2\x41\x84\x83\x08\x77\xcc\x22\xdc\x21\xe6\x8d\x59\x3b\x61\xcc\xd1\xd9\xd9\x8e\x99\x62\x90\x22\xe6\x79\x58\x5c\xa4\x88\x41\x8a\x18\xa4\x88\x41\x8a\x18\xa4\x88\x41\x8a\x98\x43\x4e\x11\xd3\x6f\x6e\x18\x24\x85\x59\x2b\x29\x0c\xb2\xc1\x3c\x2f\xe7\xf0\xd9\x2f\xc7\x91\x0d\x06\xd9\x60\xb6\x86\x32\xb6\x96\x06\x66\x17\xf9\x5f\x90\xf8\x65\xd7\xb2\x51\x58\x9d\x60\x83\x44\x2f\x7b\xc8\x70\x7c\x64\xf9\x5e\x82\x56\xfa\x49\xe6\x57\x69\xea\x9d\x20\xb5\xa3\xd2\x07\x87\xbd\x2b\x6c\x8b\x59\xa6\x10\x45\x8f\x28\x7a\x44\xd1\x23\x8a\x1e\x51\xf4\x88\xa2\x47\x14\x3d\xa2\xe8\x11\x45\x8f\x28\x7a\x44\xd1\x23\x8a\x7e\x67\x6b\x71\x44\xf1\x23\x8a\x1f\x51\xfc\x47\x11\xc5\xdf\x9d\x9a\x21\x2f\xf2\xd6\x38\xd9\xae\x01\xd9\x61\x93\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\x31\x20\xb1\xc3\x40\x62\xf4\xd3\xcb\x28\x9d\xa9\x42\x2f\xba\x3a\x44\x95\xd9\x99\x31\x8b\x93\x87\x24\x9e\xf1\x34\x6c\x08\xee\x1d\xd6\xb7\xe6\x8a\x41\x88\xd0\x30\xd8\x74\xf4\xc6\xfb\x29\xe7\x74\xb9\xf3\x92\x05\x54\x16\x77\x1e\x3d\xb1\x24\x53\x85\xe0\x64\x9f\x9e\x3d\x82\x7b\x6c\x89\xcf\x9f\x6f\xf3\x9f\x0d\xdc\xda\xe1\x5e\x15\x1a\x1f\xef\xb5\x27\xbb\x31\x99\xa3\xd7\xdc\x0a\x9e\x9b\x6f\x28\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\x3a\xc0\xba\x03\x87\x75\xcb\x32\x85\xda\xef\x17\x80\xba\xcc\x19\x44\x17\xdf\xb6\x25\x60\x37\x28\x3d\x21\xf2\xf6\xec\xac\xa9\x9d\xa9\xd2\xc5\x3b\xaf\x38\xe9\xc1\xb5\x81\xfb\x56\xc2\x7d\xc7\x8d\xfa\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x80\xf9\x4e\x11\xf3\x85\x19\xb4\x1a\x97\x29\x5b\xcd\xa7\x05\xc8\x08\xc8\x08\xc8\x08\xc8\xd8\x0d\x32\xf6\x18\x0a\x88\x18\xc0\x1d\x42\x41\x04\xff\x2d\xa3\x82\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\xc0\x81\x88\xfa\x03\x90\x03\x90\x03\x90\x3b\x54\x20\xd7\x6f\xb8\x1f\xe2\xfc\x8e\x06\xe9\x1d\x37\xce\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x03\xca\x3b\x29\x94\xd7\x12\xd9\x87\x90\x3e\x10\x44\x10\x44\x10\xc4\x3d\x12\x44\x5f\x01\xd7\xf2\x43\xfa\xf7\xf7\x6e\xa5\x64\xbb\x45\xfa\x21\xdb\xdf\x0e\xb1\x60\xb5\x1a\x3f\x12\xfe\xa1\x52\x2d\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\x21\x40\xe1\xa1\x82\x42\xfb\x98\xc4\x0b\x75\xdb\xeb\x15\x0c\x53\x91\x9c\x8a\x01\x53\xb3\x88\xd0\x0d\xf9\xdd\x82\x4f\x0c\x65\x98\xe6\x92\x9a\xa5\xca\x12\x69\x0d\x08\xa0\x08\xa0\x08\xa0\x08\xa0\x78\x68\x40\xb1\x87\x48\x45\x64\x24\x3c\x6e\x24\x79\xdc\x38\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\x12\x28\xf2\xa4\x50\x64\x18\xb3\xb8\xc3\x34\x84\x20\xa0\x20\xa0\x20\xa0\x20\xa0\x27\x49\x40\xfb\x88\xa5\x44\x10\xe5\x6e\x89\x25\xa2\x27\x5b\x91\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\x58\x25\xc2\x26\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x7b\x81\x86\x3d\xc5\x4b\x22\x50\xf2\x98\xb0\xe3\x71\x23\x47\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\x46\xe0\xc6\xd3\xc0\x8d\xf5\xd0\x48\xc4\x44\x02\x6f\x02\x6f\x02\x6f\x02\x6f\xb6\xe1\x4d\xe4\x93\x3c\x4e\x26\x59\xcb\x22\xf9\x93\xcc\xaf\xd2\xd4\x83\x4a\x75\xdc\x90\x12\x59\x25\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\xc1\x2b\x4f\x8e\x57\x02\xd0\x01\xd0\x01\xd0\x01\xd0\x2d\x01\x74\xd8\x9d\x7c\x2c\x48\x0e\x2c\x0e\x41\x83\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\x80\x70\xc7\x05\xe1\xee\x44\xc1\x5f\x5f\xb6\xe2\xb7\xb1\x28\xaa\x33\xb5\x79\xb1\x1a\x25\xeb\x0f\x89\x6d\x8d\xb5\xad\x01\xc6\xa8\x69\xe6\xe9\xd8\x58\x14\x0d\x6c\x8c\x4e\xbe\xba\xfe\xf0\x39\x68\xa2\x1d\x42\xb1\xe0\xce\x94\x35\xb0\x2b\x19\xfb\xbe\x42\x27\x89\xd2\x99\x2a\xf4\xc2\xbc\x43\x40\xa5\x59\xb6\xe4\xd6\xc8\xbb\x49\xd6\xed\x09\x7f\x6b\xae\x54\x0d\x58\x7b\x66\xd8\xb5\xa5\x77\xe9\x86\x6b\xeb\x5e\x8d\xcd\x06\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\x08\xa2\xb8\x55\xa2\x08\xa2\x07\xa2\x07\xa2\xb7\x73\xa2\xd7\x3f\x52\x1a\x12\xf6\xb1\x34\x62\x38\x0f\x18\x56\x82\x49\x6d\x61\x56\x5b\x89\xb0\x6a\x84\x21\x61\xbc\x95\x01\x2c\x14\x74\x25\x55\x03\xa2\x32\x53\x1c\xe3\x7b\xa6\x51\xfd\xa1\x23\xf3\x42\x9b\xc0\x23\xdb\xf7\xee\x64\xec\x65\x1f\xfb\xef\x6a\xae\x86\x1e\x3b\x98\xfe\x40\xeb\x4e\x40\x76\x72\x1c\x50\x78\x68\xa4\xd7\xe2\x66\x5e\xa9\xac\x0a\x9d\x2b\xab\xdd\xb1\x3b\xc1\xa6\xba\x87\x68\x3f\x78\xc8\xae\x32\x96\x64\x86\xc9\xc8\x9c\xcd\x32\x8f\x75\x62\x16\xe7\x4f\x9f\x67\x19\x8b\x93\x5c\x68\x0b\x24\x3c\x2b\x20\xcb\xab\x5d\x19\x0b\x4b\xdc\x78\xb4\x4b\x53\x36\x9a\xe5\xe4\xf7\x4e\x73\x19\x09\xa5\xec\xe4\x14\xb8\xef\x43\xf6\x2b\xdd\x91\xd6\x13\xe4\x24\xe8\x99\xe9\x2a\x4d\xdf\x90\x47\x11\xe7\x4f\x2c\x9f\x65\x7a\xc9\xac\x0d\x91\x73\xa3\xec\xe5\x44\x5c\x1a\x08\xf3\x88\x3d\xcc\xe5\xe4\xb0\x7e\xe4\x19\x1f\x8b\xdc\x2c\xbd\x4c\xb6\x0f\xa5\x64\x94\x90\x2f\xe1\x17\x39\x9c\x16\x94\x32\x67\xda\xd5\x2c\x9e\xbc\x73\x35\xe1\x5f\xf5\x9b\x16\xf7\x42\x09\x67\x44\xf5\x14\xe0\x28\x18\x81\xa0\x3b\xc1\xc8\xd0\xd3\x82\x46\xe6\xec\xf5\x0f\x7f\xd2\xe7\xe6\x3c\x22\x5c\x97\xca\x6c\x6c\x4c\x26\x2d\x3a\xb4\x77\xc8\x93\xcc\xc8\x92\xe4\xd4\x97\xe7\x12\xc2\xb0\x30\x51\xaf\x5a\x69\xd0\xbc\xb9\xbc\x1c\xcb\x94\x67\xe3\xa1\xcc\xc7\x97\xd3\xaf\xe3\xcb\x59\x96\x44\x32\x16\x97\xbf\xfb\xa0\xae\xf5\x55\xea\xcb\x6d\xfb\xce\xfb\x37\xb2\x64\xa4\x7e\x68\x32\xb0\x6f\x8d\x1b\xbe\x85\x9b\xfd\x30\x7f\xb3\xab\x28\x12\xd3\x6d\xdc\x6d\x93\xb9\x83\x6c\xf7\x1e\xe7\x0e\xb3\xe4\x99\x7f\x7c\xf3\x77\x16\xc9\x34\x15\x91\x73\x6c\x4e\x65\x26\x31\x2f\xd7\x3a\x93\xf8\x77\x86\x20\x01\x41\x02\x82\x04\x04\x09\x08\x12\x10\x24\x20\x48\x40\x90\x80\x20\x01\x41\x02\x82\x04\x04\x09\x08\x12\x10\x24\x20\x48\x40\x90\xe8\x37\xc6\xf5\xa6\xe0\xc5\x4c\x6d\x4c\x94\xcc\x9c\x51\x82\x9b\xbd\x2a\x13\x1b\xb2\x92\x3e\x77\x76\xac\x12\x2f\xde\x10\x0a\xbc\xac\x54\x14\x59\xa8\x2a\x9a\x38\x15\x5c\xa6\x5f\x6d\x25\xd9\x65\x2f\x80\x79\x93\x31\xa3\xbf\xe8\x3e\x87\xc9\xac\xb1\x43\x4d\x53\x1e\x89\x93\xed\x53\xf4\x76\x50\xf3\xa0\xe6\x41\xcd\x83\x9a\xb7\x3d\x7d\x6d\x76\xc8\xf2\xda\xe9\x04\x67\x2c\x91\xd4\x36\x32\xe7\x7d\x38\xd7\xef\xe8\xf9\x7e\xa1\xf6\x57\x30\xe3\x3b\x33\xe3\xad\xeb\xd9\x70\x89\x9a\x64\x4c\x99\xe5\x25\xbb\x13\x23\x69\xa8\x8f\x43\x33\xa5\x36\x6a\x69\x18\xbd\x4d\x60\xa7\x33\x99\x5d\x64\x62\xcc\xa9\xcd\xec\xfd\x42\x7b\x6e\x30\xad\xff\x5a\x76\xe8\x25\x93\x89\x88\xf5\x8c\x91\x3e\x59\x89\x2d\x14\x50\xb3\x24\x1d\xd8\x25\x29\x01\x11\x36\xce\xb5\x2f\x36\x15\x79\x22\x63\xbf\x08\x2f\xdd\x32\xfd\xb6\xbe\xe1\x66\x4a\x3f\x64\x88\x52\xb8\xfe\xa5\x7b\x21\x7b\x93\x91\x01\x96\xee\x12\x43\xf3\x9c\x13\xc1\xb3\xc6\x67\x2c\x3f\x02\x3d\xca\x35\x3d\x49\x8f\x8b\xf2\x77\x41\x72\xb9\x69\x2a\xb8\x12\x9e\x43\x5f\xe7\x72\xca\xc7\xf4\xa9\xae\x65\x9a\x44\x4f\x03\xd3\x5a\x86\xbc\xba\xb7\x2e\xb3\xd3\xe9\xef\xf9\x7a\xf8\xc7\x21\xbb\x31\x9f\xce\xb4\xe3\x54\x64\xb1\xc8\x8a\x52\xfd\x10\x4c\xe6\xd3\x7b\x9e\xe9\x77\xd7\x1f\x20\x9f\x89\xcb\x11\x4f\x9d\x12\x79\x7b\x66\x0e\xdf\x9e\xb1\x51\x92\xf1\x34\xf9\xa7\x53\x13\xee\x84\x5e\xf6\x13\xa2\xbc\x34\xcb\xfd\xb8\x84\x54\xe6\xf2\xe7\xaa\xfc\x91\x51\xff\x86\xec\x7d\x42\xa3\x24\x78\x74\x99\xcf\xbf\x1b\x31\x68\x23\xc4\x1b\xf1\x91\xc6\xb0\x2c\xee\x83\x2f\x60\x1e\xec\x9d\x7b\xa5\x95\xda\xbf\xdd\xb6\xd0\xd3\xe9\x21\x7d\x2f\x1f\xd9\x98\xe7\x77\x7c\x5c\x09\xc0\xf0\xe3\x52\xe4\x23\x99\x4f\x74\xb3\x35\xbe\xd2\x2f\xb5\xa7\x6b\x7f\x23\x1a\x24\xae\x87\x4f\xcd\xeb\x27\xba\xf7\x45\x49\x5c\x6a\x81\xa4\xe9\x90\x3a\xeb\x3f\x83\x12\x85\x53\x3c\x9c\x6a\x33\x0c\xda\xdb\xf1\x7e\x47\x5b\x2e\x6c\x2f\x8f\x6a\x37\x1b\x32\x13\x93\x43\x1e\x53\x68\x9c\xce\xcd\x3b\x9c\xb3\x0b\xdb\x47\xaa\x7d\x48\xfd\xc8\xce\xff\xcc\xa3\xaf\x7a\xce\xce\x62\x7d\x16\x4f\x53\xf9\x48\x27\xd5\x1a\xce\xe8\x71\x76\x3c\x55\x2f\xe2\xde\xe0\xce\x5f\xe9\x47\x76\xfe\x93\xcc\x45\x70\x59\x16\x71\x15\x71\x3d\x61\xb9\xf6\x21\x63\x6f\xae\xa7\x8c\xf5\x9c\xbb\xe0\xc8\x5f\xa3\xc2\x24\x6a\x1d\xed\x50\x58\x53\x6f\xb1\x52\xbb\x42\x5b\xfb\x05\x5a\x45\x74\x3f\xff\xfc\x04\xd6\x29\x8e\xc4\xa0\xc8\x55\x17\xed\x75\x8f\xee\x82\xee\xf3\xaf\x0d\xce\xdd\x44\xe4\x63\xd1\x7e\x58\x15\x39\x2f\xc4\x38\x89\x2e\xe6\x4e\x3c\x02\x27\x72\xda\x92\x98\x73\x9f\x48\x60\x41\xaf\xbe\xa6\xce\x00\x5f\x12\x48\x60\x47\x48\xa0\x26\x78\xbb\x3e\x6d\x82\x32\xa6\x46\x00\x33\xca\x2e\x7b\x11\x8e\x5c\x3a\x66\x6c\xc1\x4b\xf2\x00\x4c\xd8\x21\x4f\xe9\x97\xda\x7f\x36\xbf\xa6\x33\xc8\x97\x55\xec\xc5\x7f\x29\x99\x51\x0f\x1f\xb0\x8f\xda\x96\xd8\x7f\xdf\x38\x0b\x53\xfe\xf1\x65\x37\x56\xb1\x96\x5b\xfa\x93\xcc\x23\xf2\xc8\xc7\x92\xbe\x90\x64\xb7\x67\x23\xfd\xb7\xdb\x33\x76\x55\x79\xe5\x21\xfb\x50\x58\xf7\x79\xa6\xca\x68\xb3\x0b\x1e\x51\x2b\x51\x0c\x5f\x9a\x44\xd6\x93\x11\x69\xac\x98\x7c\xb4\x1f\xc0\xc4\xb8\x4d\x85\x9c\xa6\x62\xc8\xcc\x3d\x47\x29\x1f\xfb\x0f\x4f\x32\x66\x63\x6b\xf9\xdb\x07\x6d\xa0\x7f\x7f\x20\xa0\x66\x23\x76\x62\x25\xb1\xa3\x95\x8f\xc2\x6a\xa2\x8d\xb7\xdd\x6a\x6d\xd1\x03\x10\xaf\x7a\x48\x60\x83\xcc\x35\xab\x65\xae\x41\x84\x38\x22\xc4\x11\x21\x8e\x08\x71\x44\x88\x23\x42\x1c\x11\xe2\x88\x10\x47\x84\x38\x22\xc4\x11\x21\x8e\x08\x71\x44\x88\x23\x42\x1c\x11\xe2\x88\x10\x5f\x1f\xeb\x1d\x45\xae\x9a\x1e\x92\xd4\x1c\x67\x00\x54\xe7\xec\x34\xfb\x0d\x64\x85\x5c\x05\xb9\xea\xd9\x46\xb0\xee\x26\x74\x75\x47\x19\x68\x0e\x3e\xf5\x4c\xef\x39\x67\x8e\x73\x62\x58\x23\xd9\x0c\x34\x04\x68\x08\xd0\x10\xa0\x21\x40\x43\x80\x86\x00\x0d\x01\x1a\x02\x34\x04\x68\x08\xd0\x10\xa0\x21\x40\x43\x80\x86\x00\x0d\x01\x1a\xc2\xc1\x6c\xc5\xd9\x4d\x96\x99\x53\x4e\x2f\xb3\x61\x5e\x99\xe3\x44\x62\x1d\x13\xca\xec\x32\x93\xcc\xa1\xa7\x90\xe9\x39\x77\xcc\xb1\xf6\x9b\xae\x49\x63\x20\xb2\x41\x64\x83\xc8\x76\xea\x22\xdb\x01\x27\x86\xe9\x25\x23\xcc\x71\x5a\xe9\xce\xa9\x60\x90\x03\xe6\x79\xd8\x68\xe4\x80\x41\x0e\x18\xe4\x80\x41\x0e\x18\xe4\x80\x41\x0e\x98\x23\xc8\x01\xb3\xbd\xe4\x2f\xc8\xfa\xb2\x49\xd6\x17\xa4\x7b\x79\x5e\x6e\xe3\xb3\x5f\xda\x23\xdd\x0b\xd2\xbd\xec\x04\x85\x6c\x3b\xcf\xcb\xae\x13\xbc\x9c\x6a\x66\x17\x7d\x1d\x35\xe5\x91\x53\x8d\xe8\xdf\xdf\x2f\xc3\x32\x05\x6b\x26\x7c\xd9\x53\xfe\xe1\xa3\x4d\xf8\xf2\xc9\xb5\x7e\x8c\xe2\xa0\x08\xdb\x46\xd8\x36\xc2\xb6\x11\xb6\x8d\xb0\x6d\x84\x6d\x23\x6c\x1b\x61\xdb\x08\xdb\x46\xd8\x36\xc2\xb6\x11\xb6\x8d\xb0\x6d\x84\x6d\x23\x6c\x7b\x7d\xc4\x17\x90\x85\xc3\x4d\xfd\xd2\x29\x8d\xf3\xe2\xd4\x2f\x47\x5f\xfb\x6a\x71\xea\x97\x8e\xa8\x68\xeb\xf1\xa9\x28\x63\x08\x11\xeb\xd9\xc6\xa7\xee\xa6\x7e\xe1\xfc\x5d\xb6\x92\x04\xa6\xd7\x1c\xff\xdb\x48\x02\xd3\x43\x65\xc4\x6a\x12\x98\xa3\x9f\x22\xba\x26\x81\x81\xae\x00\x5d\x01\xba\x02\x74\x05\xe8\x0a\xd0\x15\xa0\x2b\x40\x57\x80\xae\x00\x5d\x01\xba\x02\x74\x05\xe8\x0a\xd0\x15\xa0\x2b\x40\x57\x78\xb6\xe9\x60\x76\x51\x2e\xd2\x9a\x65\x43\x62\xf5\x32\x74\x56\xdc\x33\x15\xc9\xa9\x18\x30\x35\x8b\x68\xe0\xd1\x50\x10\x7c\x62\xfa\xc8\x34\x97\x34\x0d\x54\x03\x8e\x09\xe0\x3c\xab\xa8\xe3\x35\x92\xd8\x1c\x3d\xd2\x5b\x94\xc4\xa6\x0d\xe3\xed\x16\x72\x1f\x5a\x3a\x9b\x4e\x63\xb8\x7b\x3a\x9b\x13\xe8\x41\x0b\xd3\xd9\x40\x38\x84\x70\x08\xe1\xf0\x59\x0a\x87\x87\x96\xd8\xa6\x07\x41\xef\x04\xe2\x3c\x16\x8b\x78\x1b\x9b\x6b\xa4\xb8\x39\x5e\x6b\x8d\x14\x37\x48\x71\x83\x14\x37\x48\x71\x83\x14\x37\x48\x71\x73\xa8\x29\x6e\xba\x21\xb4\x75\x52\xdc\xb4\x7b\x76\x48\x71\xb3\x3c\xc5\xcd\xfe\xd6\xf9\x48\x76\x73\x30\x0e\xe4\xb3\x5f\xee\x23\xd9\x0d\x92\xdd\xec\x04\x8f\x6c\x25\xd9\xcd\x2e\xe4\xa9\x30\xd9\x4d\xf5\x7e\x5b\x4d\x76\x03\x55\x6c\x55\x55\x6c\x93\x24\x3c\xc8\xbe\xb3\x72\xf6\x1d\x84\xc7\x23\x3c\x1e\xe1\xf1\x08\x8f\x47\x78\x3c\xc2\xe3\x11\x1e\x8f\xf0\x78\x84\xc7\x23\x3c\x1e\xe1\xf1\x08\x8f\x47\x78\x3c\xc2\xe3\x11\x1e\x8f\xf0\xf8\x35\x60\xe3\x61\xe7\xdb\xd9\x24\xd1\xce\x71\x46\x5e\xad\x92\x61\x67\x4f\x11\xb2\xd0\xca\xa0\x95\x3d\xbf\xd0\xd8\x2d\xc7\xc4\x6e\x3b\x8b\xce\xe1\xa6\xcf\xe9\x2f\x6f\xce\x71\x5a\xfc\xf5\x12\xe6\x40\x0a\x80\x14\x00\x29\x00\x52\x00\xa4\x00\x48\x01\x90\x02\x20\x05\x40\x0a\x80\x14\x00\x29\x00\x52\x00\xa4\x00\x48\x01\x90\x02\x20\x05\x1c\xcc\xe6\x9e\x2d\x67\xca\x41\x8a\x9c\xc3\x09\x06\x5e\x33\x37\xce\x71\x62\xbb\xee\x49\x71\x76\x92\x0d\xe7\x60\xd3\xe0\xf4\x95\xff\xe6\x58\x7b\xc9\x0a\x89\x6f\xa0\xe7\x41\xcf\x83\x9e\x77\x42\x7a\xde\x21\x26\xb7\xd9\x2c\xab\xcd\x71\x5a\xe1\x55\xd2\xd9\x20\x8f\xcd\xf3\x30\xc5\xc8\x63\x83\x3c\x36\xc8\x63\x83\x3c\x36\xc8\x63\x83\x3c\x36\x87\x9c\xc7\x66\x0b\x09\x6c\x90\xb9\x66\xc3\xcc\x35\x48\x59\xf3\xbc\x7c\xc5\x67\xbf\x6c\x47\xca\x1a\xa4\xac\xd9\x2e\xed\xd8\x5a\xae\x9a\x9d\x25\xa9\x41\x76\x9a\xbd\x08\x52\x61\x71\x86\x0d\xb2\xd1\xec\x21\x5d\xf3\xd1\x26\xa5\x09\xda\xeb\x27\x99\x5f\xa5\xa9\xf7\x8e\xd4\x2e\x2b\x3f\x1c\xf6\xd6\xb5\x6d\xe7\xc8\x42\xf4\x3e\xa2\xf7\x11\xbd\x8f\xe8\x7d\x44\xef\x23\x7a\x1f\xd1\xfb\x88\xde\x47\xf4\x3e\xa2\xf7\x11\xbd\x8f\xe8\xfd\x9d\x2d\xd2\xb1\x7b\x00\xbb\x07\xb0\x7b\xe0\x28\x76\x0f\xac\x88\xd3\x90\xd5\x79\x07\x00\x6d\x2f\xe4\xec\xb0\x91\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\x19\x58\xd9\xa1\xb1\x32\xfa\xfd\x65\x94\xce\x54\xa1\x57\x5e\x1d\xe2\xd0\xec\xf4\x98\xc5\xc9\x43\x12\xcf\x78\x1a\xb6\x06\xf7\x5e\xeb\x5b\x73\xc5\x20\x8a\x68\x18\x6c\x62\x7a\xe3\x9d\x95\x73\xba\xdc\x79\x09\x04\x2a\x2b\x3c\x8f\xa3\x58\x92\xa9\x42\x70\x32\x52\x60\x73\xb1\xfb\x0c\xad\x19\x57\xe7\x5a\xff\x67\x03\xbc\x76\xb8\x0b\x86\x86\xcb\x7b\xed\xd8\x6e\x4c\xeb\xe8\x5d\xb7\x82\xec\xe6\x1b\x0a\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\xef\x68\x00\xde\xb2\x4c\xa6\xf6\x23\x06\xf0\x2e\x73\x56\xd1\x05\xc3\x6d\x09\xe2\x0d\x4a\x77\x88\x5c\x3e\x3b\x75\x6a\x8f\xaa\xf4\xf3\xce\x2b\x9e\x7a\x70\x6d\x20\xc0\x35\x11\xe0\x71\xe3\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\x3f\xa0\xbf\x93\x45\x7f\x61\x6e\xae\xc6\xb5\xca\x56\x33\x75\x01\x3c\x02\x3c\x02\x3c\x02\x3c\xae\x00\x1e\x7b\x0c\x19\x44\xac\xe0\x5e\x40\x21\x82\x04\x97\x91\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x20\x42\x44\x07\x02\xd2\x01\xd2\x01\xd2\x1d\x3e\xa4\xeb\x37\x2c\x10\xf1\x80\x47\x88\xf9\x8e\x1b\xf1\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x9d\x1e\xde\x6b\x89\x00\x44\xe8\x1f\xa8\x22\xa8\x22\xa8\xe2\xbe\xa9\xa2\x2f\xc4\x6b\x99\x22\xfd\xfb\x7b\xb7\x62\xb6\xdd\x22\x02\x91\x3d\x70\x2f\xa8\xd0\x17\xf4\x88\x91\x40\x10\x65\x72\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x0f\x1e\x1e\xda\xc7\x24\x86\xa8\xdb\x5e\x2f\x63\x98\x8a\xe4\x54\x0c\x98\x9a\x45\x84\x73\xc8\xef\x16\x7c\x62\xc8\xc3\x34\x97\xd4\x2c\x55\xbe\x48\x0b\x41\x40\x46\x40\x46\x40\x46\x40\xc6\x83\x84\x8c\x3d\x44\x34\x22\xc3\xe1\xa9\x60\xca\xe3\x46\x94\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xc0\x93\xa7\x87\x27\xc3\xd8\xc6\x1d\xa6\x35\x04\x15\x05\x15\x05\x15\x05\x15\x3d\x5d\x2a\xda\x47\xcc\x25\x82\x2d\xf7\x45\x31\x11\x65\xd9\x8a\x31\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\xc1\x2f\x11\x5e\x09\x90\x08\x90\x08\x90\x08\x90\xd8\x33\x48\xec\x29\xae\x12\x01\x95\xc7\x89\x22\x8f\x1b\x43\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x9e\x10\x82\xac\x87\x50\x22\x76\x12\xc8\x13\xc8\x13\xc8\x13\xc8\x73\x21\xf2\x44\x7e\xca\x63\xe7\x94\xb5\xac\x94\x3f\xc9\xfc\x2a\x4d\x3d\xbc\x54\xc7\x0d\x2e\x91\xa5\x12\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\x13\x0c\xf3\x34\x19\x26\xa0\x1d\xa0\x1d\xa0\x1d\xa0\x5d\x17\x68\x87\x9d\xcd\xc7\x87\xe9\xc0\xe7\x10\x5c\x08\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x07\x30\x77\xa0\x60\x4e\x45\xf7\x22\x9e\xa5\xda\x1b\xb4\x40\xae\x95\xbe\x8d\x45\xc1\x92\x6c\x24\xf3\x89\x6f\x7f\xce\x0c\xfc\xa8\x72\xb2\xfe\xa0\xd8\xd6\x68\xdb\x12\x34\x56\xb6\xca\x3c\x0b\x1b\x8b\xe2\xc6\x1f\xbe\xba\xfe\xf0\x17\xdb\x02\x3b\x64\x5d\xfe\xae\x5d\x49\xd7\xf7\x05\xdf\xfb\xe1\xf5\xe2\x4f\x5e\x71\xc6\x4c\xdf\x3d\xe1\xef\xfd\xbf\x0f\x0d\xf8\xb3\xf2\xc9\x7f\x7d\x7d\x75\xfd\xe1\x73\xd0\x14\xbb\xfd\xf0\xee\xce\x94\x41\xb2\xa7\xef\x3f\xcd\x13\x99\x27\xc5\x53\x94\x72\xa5\x16\xf0\x77\xb3\xe0\xcc\xed\xf4\xec\xdc\x23\x97\x04\xe0\xda\x5e\xe5\xad\xbe\xca\x69\xa3\xf3\x25\xfd\x45\xb7\x53\xd8\x61\xea\x2d\x03\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\x0b\xd2\xbb\x55\xd2\x0b\xd2\x0a\xd2\x0a\xd2\xba\x73\xd2\xda\x3f\x1f\x1a\x06\x0c\xe7\xe1\xf5\xb0\x02\x17\x56\xa2\x42\x6d\xf1\x6f\xab\x87\xbe\xcd\x51\xa5\x32\xe4\xad\xce\x3e\xc2\xd8\x37\x13\xf6\x26\x55\x03\x6a\x32\x93\x19\xe3\xfb\xa3\x4a\x9b\x21\x20\xf3\xfc\x2b\x40\x20\xdb\x87\xee\x64\xec\x65\x35\xfb\xef\x6a\xce\x8c\x9e\x3a\x8a\x6e\xfa\x75\x27\x11\x3b\xc1\x0d\x28\x12\x37\xd2\xeb\x69\x33\x37\x54\x56\x76\xce\x1d\xd5\x2e\xd5\x9d\x60\x53\xfd\xd9\xb5\x2f\x3b\x64\x57\x19\x4b\x32\xc3\x55\x64\xce\x66\x99\x47\x33\x31\x8b\xf3\xa7\xcf\xb3\x8c\xc5\x49\x2e\xb4\x15\x11\x7e\xbd\x4f\xd6\x53\xbb\x23\x16\x78\xb8\x31\x65\x97\x97\x6c\x34\xcb\xc9\x77\x9d\xe6\x32\x12\x4a\xd9\x09\x26\x70\xc1\x87\xec\x57\xba\x23\xad\x09\x68\xa2\xd7\xb3\xcb\x55\x9a\xbe\x21\xaf\x20\xce\x9f\x58\x3e\xcb\xf4\xb2\x57\x1b\x13\xe7\x0a\xd9\xcb\x89\xb8\x1c\xe4\xe6\x11\x7b\x98\x8f\xc9\xe9\xfc\xc8\x33\x3e\x16\xb9\x59\x3e\x99\x8c\x2b\x4a\xc9\x28\x21\x7f\xc0\x2f\x54\x38\x2d\x0a\x65\xce\xb4\xbb\x58\x3c\x79\x07\x69\xc2\xbf\xea\x37\x2d\xee\x85\x12\xce\x10\x6a\x33\xee\x48\x16\xc1\x9c\x3b\xc1\xc8\x58\xd3\xa2\x44\xe6\xec\xf5\x0f\x7f\xd2\xe7\xe6\x3c\x22\xe4\x96\xca\x6c\x6c\xcc\x1e\x2d\x1c\xb4\x87\xc7\x93\xcc\x48\xbe\xe4\x98\x97\xe7\x12\x86\xb0\x40\x50\xaf\x3c\x69\x4c\xbc\xb9\xbc\x1c\xcb\x94\x67\xe3\xa1\xcc\xc7\x97\xd3\xaf\xe3\xcb\x59\x96\x44\x32\x16\x97\xbf\xfb\xa0\xae\xf5\x55\xea\x4b\x66\xfb\xce\xfb\x35\x94\x64\x7a\x7e\x68\x32\x92\x6f\x8d\x1b\xdd\xf3\x8d\x7e\x98\xbf\xd1\x55\x14\x89\x69\xdf\x77\xda\xc4\xee\x93\x25\xde\x99\xdd\x37\x0b\x93\xf9\x87\x35\x7f\x67\x91\x4c\x53\x11\x39\xf7\xe3\x48\x67\x01\xf3\x2e\xe1\x2c\xf0\xd6\xbf\x16\x44\x01\x88\x02\x10\x05\x20\x0a\x40\x14\x80\x28\x00\x51\x00\xa2\x00\x44\x01\x88\x02\x10\x05\x20\x0a\x40\x14\x80\x28\x00\x51\x00\xa2\x40\x6f\x41\xa3\x37\x05\x2f\x66\x9b\xd3\x21\x33\x67\x94\x58\x66\x87\x0a\xc1\x86\x64\xa4\xcf\x3d\x2e\x8b\x22\xe7\xe7\x23\x69\x97\x95\xd6\x22\xf3\x53\xe5\x0e\x47\x4a\xba\xf4\x9b\xf4\x12\xf2\xda\x36\xb8\x6f\x8c\x23\x4b\xce\xf0\x37\x72\x2a\xef\xf4\xbf\x78\x54\x0c\x19\x7b\xaf\xff\xeb\xfe\x3e\xe1\x09\x31\x6c\xc5\xa2\x74\xa6\x0a\x91\x5f\xd8\xd6\x8d\xec\x32\x8e\xa5\xc9\x57\xc1\xce\x7d\xa6\x8a\x73\x3d\x3f\xb9\x6c\x21\x43\x76\x9d\xf2\x2c\xb3\x33\x0e\x8d\x7a\x9e\x6a\x13\xff\x7a\xf8\xfa\x4f\x41\xef\xa0\x5b\xf7\x61\xb5\xfc\x8b\x79\xd0\x76\xe7\x5e\x51\x3f\x0d\x7b\x6f\xde\x4a\xf7\xed\xa9\x72\x6f\x60\x7d\xa3\x99\xd2\x2e\x0f\xcf\x8c\x8f\x6a\x6c\xd1\x7a\x2f\xa3\xef\x71\x00\x44\x7e\x13\x03\xa5\x47\xd8\xee\x6c\xd2\xac\x71\x38\x4f\x53\x1e\x89\x53\x19\xd1\xf4\x32\x90\x30\x21\x61\x42\xc2\x84\x84\xb9\x91\xb0\x38\x3b\x1c\x5d\xf1\x68\x23\x4a\xe6\xb5\xc4\xb5\xcd\x71\x1f\xab\x8a\x77\xf4\x38\xbf\x50\xeb\xc2\x14\xef\xce\x14\xb7\x2e\xe4\xc3\xb5\x79\x92\x31\x65\xd6\xd5\xec\x4e\x8c\xa4\xc1\x5d\x8e\x49\x95\xa2\xb0\xc5\x80\xf4\x36\x81\xad\xcd\x64\x76\x91\x89\x31\xa7\x36\xb3\xf7\x0b\x6d\xb2\xe1\xd3\xfe\x6b\xd9\x81\x95\x4c\x26\x22\xd6\x56\x3f\x7d\xb2\xda\x62\xa8\x1c\x67\x49\x3a\xb0\x6b\x71\x22\x41\x6c\x9c\x6b\x4f\x69\x2a\xf2\x44\xc6\x9e\x3e\x94\x4e\x93\x7e\x5b\xdf\x70\x33\xa5\x1f\x32\x64\x48\x5c\xff\xd2\xbd\x90\xbd\xc9\x28\xf0\x82\x13\xfd\x03\x7a\xce\x89\xe0\x59\xe3\x33\x96\x1f\x81\x1e\xe5\x9a\x9e\xa4\x47\x1a\xf1\x2e\x48\x40\x38\x4d\x05\x57\xc2\x03\xf8\xeb\x5c\x4e\xf9\x98\x3e\xd5\xb5\x4c\x93\xe8\x69\x60\x5a\xcb\x20\x67\xf7\xd6\x65\x06\x43\xe3\xb1\xff\x71\xc8\x82\x45\x50\x2c\xa6\x22\x8b\x45\x56\x94\xb2\x8f\x60\x32\x9f\xde\xf3\x4c\xbf\xbb\xfe\x00\xf9\x4c\x5c\x8e\x78\xea\x24\xd8\xdb\x33\x73\xf8\xf6\x8c\x8d\x92\x8c\xa7\xc9\x3f\x9d\x8c\x72\x27\x18\x8f\x63\x62\xb3\x97\x86\x73\xc4\x25\x9d\x33\x97\x3f\x57\xe5\x8f\x8c\xec\x39\x64\xef\x13\x1a\x25\xc1\xa3\xcb\x7c\xfe\xdd\x08\xbe\x9b\x08\x04\xa3\xba\xd2\x18\x96\xc5\x7d\xf0\x05\xcc\x83\xbd\x73\xaf\xb4\x52\xfb\xb7\xdb\x16\x7a\x3a\x3d\xa4\xef\xe5\x23\x1b\xf3\xfc\x8e\x8f\x2b\x71\x25\x7e\x5c\x8a\x7c\x24\xf3\x89\x6e\xb6\xc6\x57\xfa\xa5\xf6\x74\xed\x6f\x44\x83\xc4\xf5\xf0\xa9\x79\xfd\x44\xf7\xbe\x28\x89\x4b\x11\x94\xc4\x2c\x92\xa5\xfd\x67\x50\xb4\xb7\x9e\x8e\x3a\xb9\x6a\x18\xb4\xb7\x13\x3a\x1c\x66\x2a\x57\xb4\xd5\x9b\x0d\x99\x09\x2a\x22\xaf\x27\x34\x4e\xe7\xe6\x1d\xce\xd9\x85\xed\x23\xd5\x3e\xa4\x7e\x64\xe7\x7f\xe6\xd1\x57\x3d\xff\x66\xb1\x3e\x8b\xa7\xa9\x7c\xa4\x93\x6a\x0d\x67\x84\x48\x3b\x9e\xaa\x17\x71\x6f\x70\xe7\xaf\xf4\x23\x3b\xff\x49\xe6\x22\xb8\x2c\x8b\xb8\x8a\x78\xac\xdf\xde\xb6\x0f\x19\x7b\x73\x3d\x65\xac\xe7\xdc\x05\x47\xfe\x1a\x15\x3c\x53\xeb\x68\x87\x02\xd9\x7a\x0b\xf6\xda\x15\xd3\xdb\x25\xc9\x2b\xa2\xfb\xf9\xa7\x25\xfd\x80\xc2\x65\x0c\x71\x5d\x61\x01\x5d\xf7\xce\x2e\xe8\x16\xff\xda\xe0\xa8\x4d\x44\x3e\x16\xed\x87\x55\x91\xf3\x42\x8c\x93\xe8\x62\xee\xc4\x03\x75\x08\xe9\x09\xf7\xbb\x3c\x5f\xd0\x43\xaf\xe9\x53\xc3\x2f\xc4\x12\x7d\x47\x4b\xf4\x9a\x6a\xef\xfa\xb4\x89\x2c\x99\x1a\x15\xcf\xc8\xd3\xec\x45\x38\x38\xe9\x98\x19\xee\x2f\x69\x36\x37\xb1\x93\x3c\xa5\x5f\x6a\x5f\xd8\xfc\x9a\xce\x20\xbf\x54\xb1\x17\xff\xa5\x64\x46\x3d\x7c\xc0\x3e\x6a\x73\x61\xff\x7d\xe3\x8c\x48\xf9\xc7\x97\xdd\xd8\xc1\x5a\x2e\xe6\x4f\x32\x8f\xc8\xbb\x1e\x4b\xfa\x42\x92\xdd\x9e\x8d\xf4\xdf\x6e\xcf\xd8\x55\xe5\x95\x87\xec\x43\x61\x5d\x61\x62\xc6\xb6\xc7\x5f\xf0\x88\x5a\x89\x02\x11\xd3\x24\xb2\x5e\x09\x21\x66\xf9\x68\x3f\x80\x09\xd4\x9b\x0a\x39\x4d\xc5\x90\x99\x7b\x8e\x52\x3e\xf6\x1f\x9e\xb4\xd8\xc6\xd6\xf2\xb7\x0f\xda\x40\xff\xfe\x00\xc0\xc9\x46\x3c\xc3\x6a\x7a\x47\xa2\x7f\x85\x05\x64\xeb\x37\xdb\x6a\x25\xd9\x1d\x0a\x6f\x26\x7d\x7c\xd7\x44\x36\xdd\x12\xc9\x57\xda\x0a\x19\xe5\x37\x4e\x8b\xf3\xb8\xd0\x61\xf9\xd9\xec\x3a\x7b\x56\x29\xe3\xf7\x69\x15\xb0\x5f\x00\xfb\x05\xb0\x5f\x00\xfb\x05\xb0\x5f\x00\xfb\x05\xb0\x5f\x00\xfb\x05\xb0\x5f\x00\xfb\x05\xb0\x5f\x00\xfb\x05\x90\x2e\x1e\xfb\x15\xb0\x5f\x01\xfb\x15\x36\x64\x6f\xcb\x42\xdf\xed\x37\x0b\xb8\x5b\xe6\x8c\x60\x63\x42\xe9\x5e\xf8\xdb\xa0\x74\x7c\xc8\xb9\xb3\x93\xa4\xf6\x9d\x4a\x8f\xee\xbc\xe2\x93\x07\xd7\x06\xbd\x5b\x28\x37\x1e\x31\xb9\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x03\xb5\x3b\x11\x6a\x77\x12\x01\x40\xc0\x85\xc0\x85\xc0\x85\xc7\x8f\x0b\xef\x44\xc1\x51\x72\xb0\x4a\xdb\xa8\x4d\x96\xd6\x1d\xa4\xb3\x4e\xad\xf8\xa0\xe9\x0e\xa8\x40\xb8\x09\xac\x6d\xe9\x3e\xf5\x32\x84\x74\x1a\xd2\x0e\x03\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x22\xed\x30\xb8\x1c\xb8\xdc\x69\x73\xb9\x6d\x6f\xb3\x26\xc0\x70\xcc\x05\x09\x0d\x48\x39\x95\xaa\x84\x2d\x58\x68\xbe\x34\x61\x17\x30\xb4\xf5\xe4\x9e\x0d\x9d\x07\xe9\x43\x90\x3e\xe4\x79\x65\xf8\x6c\x19\x04\x5b\x4a\xf3\xd9\x7e\xb7\xad\x94\x2b\x6c\xbb\xdd\x51\xd4\x2c\x2c\xa7\x86\xd3\x2b\x5c\xd8\x32\x51\xcc\x67\x1c\xa5\x13\x51\xc2\x10\x5a\x02\xb4\x04\x68\x09\xd0\x12\xa0\x25\x40\x4b\x80\x96\x00\x2d\x01\x5a\x02\xb4\x04\x68\x09\xd0\x12\xa0\x25\x40\x4b\x80\x96\x80\x12\x86\x6d\x9a\xc2\xd1\xd4\x31\x6c\x0c\xca\x3d\xd5\x62\x86\x2d\xf4\xab\x5e\xd1\x70\xb3\xe8\x59\x94\x35\x7c\x36\x65\x0d\xb7\x81\xb9\x77\x55\xdb\x30\x30\x56\x27\x56\xe0\xb0\x75\x94\xcf\x55\x39\x84\x1a\x0a\x35\x14\x6a\x28\xd4\xd0\x63\xaa\x7c\xd8\x59\x9d\x3c\xee\xd0\x95\x16\x45\x12\x85\x10\x9f\xa1\x8d\x46\x21\x44\x14\x42\x2c\x50\x08\x11\x85\x10\x51\x08\x11\x85\x10\x8f\xa8\x10\x62\xc8\x03\x51\x0d\xb1\x5f\xff\x70\xae\x24\xe2\x9e\xd6\xf2\xa8\x8b\x78\x30\x6e\xe2\xb3\x5f\xca\xa3\x2e\x22\xea\x22\xee\x14\x79\xec\x2c\xa1\x72\x7f\xca\xda\x49\x24\x48\xeb\x22\xe9\xa1\x4c\xe2\x91\xe4\xee\x99\xcb\xb6\x3e\xef\xc9\xa0\x60\xe2\x1e\x2c\x05\xb6\x28\x60\x8b\x02\xb6\x28\x60\x8b\x02\xb6\x28\x60\x8b\x02\xb6\x28\x60\x8b\x02\xb6\x28\x60\x8b\x02\xb6\x28\x60\x8b\x02\xd2\xa0\x63\x8b\x04\xb6\x48\x60\x8b\x44\x1f\x3c\x0e\xa5\x13\x9f\x29\xd1\x3b\x6e\x9a\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x07\x92\x77\x4a\x24\xef\x24\x02\x85\x80\x10\x81\x10\x81\x10\x8f\x0c\x21\x9a\x7e\xe9\xf8\xe1\xc2\xf2\x89\x49\x36\x92\xf9\xc4\x37\x3e\x67\x86\xb9\x9c\x5c\x05\x45\xd3\x24\xcd\x65\x13\xcd\xb1\xab\xeb\x0f\x7f\xb1\xef\xbe\xdb\x42\x89\xe6\xae\x6b\x54\x48\xac\x7e\xe6\x07\x14\xca\x74\x9f\xf9\x7f\x1f\x5a\x0a\x64\x9a\xc3\xbf\x1e\x77\x61\xcc\xb9\xcf\x6e\xff\xb2\x59\x3d\x4c\xdb\x36\xcf\xa1\x1c\xe6\x82\x4e\x42\x65\x30\x5d\x2f\xa9\x35\x09\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x20\x32\x32\x56\x83\xa5\x82\xa5\x9e\x16\x4b\xdd\xc6\x66\x7a\xcb\x6d\x28\x11\x4d\x09\x16\xf6\x55\xf4\xb2\x42\x91\xca\x78\xba\x1a\xf3\x08\xc3\xe9\xba\xd4\xba\xdc\x17\x45\xda\x00\xf9\xd8\x12\x97\xdd\xa0\xcf\x56\x72\xb9\x36\x77\x0c\xe4\x7d\x41\xde\x97\xd3\x4f\xe1\xda\xde\xf7\x7b\xcc\xdc\xba\xf0\x26\xbd\x95\xaf\x5c\x70\x97\x1d\x57\xad\x5c\xd3\xb6\xaf\x54\xac\xf2\x08\x2d\xbd\xcd\x08\xeb\x2c\x7d\x59\x9b\x12\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\x1f\xa0\xff\xb4\x4a\x53\xae\x4b\xfe\x0f\xb3\x22\xe5\x92\x68\xd8\x35\x0a\x51\x1e\x21\xd9\xa2\xfa\x93\x9b\x86\xad\xa2\xec\xe4\x49\x97\x9d\xdc\x12\x9e\x5e\xbd\xda\xe4\xba\xf6\xa7\x7b\x91\xc9\xa3\x1c\xc1\xa6\xb6\x24\x64\x48\xc8\x90\x90\x21\x9f\x9d\x0c\xb9\xdb\xba\x91\xdb\xd1\x07\x8f\x32\xfa\xa3\xa6\x09\xae\x6b\x76\x51\x1c\xf2\x78\xcd\x2e\x8a\x43\xa2\x38\x64\x81\xe2\x90\x28\x0e\x89\xe2\x90\x28\x0e\xb9\x97\xe2\x90\x6b\x13\xb9\x75\x6a\x42\x2e\x70\xd2\x4e\xba\x24\xe4\x02\x27\xd0\x94\x82\xdc\xdb\xd2\x1b\x15\x20\x0f\xc6\x17\x7c\xf6\x4b\x70\x54\x80\x44\x05\xc8\x5d\x30\x8b\x35\x92\x40\xef\x49\xb7\x0a\xd3\xb8\xd5\xee\x75\x34\x59\xdc\x16\xe9\x65\x0f\x32\x9d\x4d\x04\x2f\x0a\x1e\xdd\x4f\x68\xa9\xb0\x5e\x02\x99\x5f\xe9\x3a\x57\xfe\x3a\x48\x22\x43\xde\x44\x43\xb3\x20\xbe\x1c\xf1\xe5\x88\x2f\x47\x7c\x39\xe2\xcb\x11\x5f\x8e\xf8\x72\xc4\x97\x23\xbe\x1c\xf1\xe5\x88\x2f\x47\x7c\x39\xe2\xcb\x11\x5f\x8e\xf8\x72\xc4\x97\x77\x67\x72\x75\xb8\x70\x60\xc9\x64\x1a\xd8\xc7\xaa\x09\x65\xf6\x49\x95\xfa\x4b\x2a\xb3\x1c\x02\x6d\x39\xa2\x73\xee\x01\x20\x29\x41\x52\x7a\x46\x51\x9d\x4d\xfd\x7f\x2b\x91\x9d\x2d\x37\xda\x42\x92\x99\xc6\x3b\x1d\x46\xa2\x99\x2e\x76\x7f\xa5\x64\x33\x47\x3a\x0b\xb4\x26\x9c\x81\x28\x00\x51\x00\xa2\x00\x44\x01\x88\x02\x10\x05\x20\x0a\x40\x14\x80\x28\x00\x51\x00\xa2\x00\x44\x01\x88\x02\x10\x05\x20\x0a\x40\x14\x78\x36\x49\x67\x3a\x29\x04\x47\x92\x78\x66\x2e\x90\x76\x8d\xdc\x33\x47\x0a\xba\x2a\xf9\x67\x36\x81\x5b\xc8\x41\xf3\x4c\x72\xd0\xf4\x4e\xaf\x7b\xcb\x43\xd3\xc9\x24\x75\xcf\x45\x73\xb4\x23\xba\x9a\x8f\x06\x0a\x26\x14\x4c\x28\x98\xcf\x56\xc1\x3c\x88\xfc\x34\x3d\xc8\x8a\x47\x1b\x50\x52\x93\x12\x37\x31\xc7\xc8\x55\x73\xbc\xa6\x18\xb9\x6a\x90\xab\x06\xb9\x6a\x90\xab\x06\xb9\x6a\x90\xab\xe6\xa0\x72\xd5\x74\x03\x79\xeb\xe4\xab\x59\xe2\xb0\x21\x67\xcd\xde\x96\xe7\xc8\x5b\x73\x30\x7e\xe1\xb3\x5f\xa2\x23\x6f\x0d\xf2\xd6\xec\x8a\x67\xf4\x97\xbb\x66\x17\xf2\x57\x98\xbf\xa6\xe1\x7e\xa7\x99\xc3\xc6\x4a\x6f\x97\xca\x78\x4a\x0b\x15\x38\x73\x8e\x6b\xa2\x13\x20\xf7\x0b\xb4\x38\xeb\x39\x1e\xd9\x88\x3b\x1c\x6d\xe7\xe4\xfa\xca\x62\x95\xc7\x77\x17\x68\x3d\x70\x24\x9f\x87\x23\x09\xad\xe7\x68\xb4\x9e\xae\x3c\x61\x4d\xa3\x0d\xb2\xb0\xe7\x29\x01\x7c\x01\xd3\xc2\xa1\x4c\x0b\xe0\x0b\xe0\x0b\xe0\x0b\xcf\x95\x2f\x50\x14\x77\xad\xb2\x64\x2b\x54\xb0\xfb\x83\xb2\x38\x79\x48\xe2\x19\x4f\xc3\x70\x74\xee\xb7\xed\x85\xa9\x84\x87\x81\xda\xfb\xc6\xeb\xc4\xe7\x74\xa1\xf3\x72\x2f\x74\x65\x73\xab\x9f\xb3\x59\x92\xa9\x42\x70\x7a\xbf\x67\x9a\x70\xf7\xb1\x35\x7f\xff\xcf\x26\x97\xcd\x0e\xa5\x40\xda\x85\xf0\xfe\xa1\x0f\x43\x40\xaf\xd5\x5f\x36\x9e\x6d\x27\xca\x46\x06\x02\x64\x20\x40\x06\x02\x64\x20\x40\x06\x02\x64\x20\x40\x06\x02\x64\x20\x40\x06\x02\x64\x20\x40\x06\x02\x64\x20\xd8\xd9\x0a\x1e\x19\x10\x90\x01\x01\x19\x10\x8e\x22\x03\xc2\x8a\xac\x6d\xd9\x4e\x7a\xfb\xbd\x02\xce\x96\x39\x03\xe8\xca\x53\xf5\xce\xdb\x06\xa5\xcf\x43\x7e\x9d\x9d\x1f\xb5\xdb\x54\x3a\x73\xe7\x15\x77\x3c\xb8\x36\x68\x5d\x73\xb5\xcd\x23\x26\x75\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\xa0\x74\x27\x40\xe9\x4e\xa1\x06\x36\xe8\x20\xe8\x20\xe8\xe0\x69\xd0\xc1\xee\x35\xeb\xbb\x05\xe3\xd5\xe3\x16\x11\x90\xd7\x27\xe2\x6b\xac\x52\x77\xd4\xa8\x6f\xc7\x25\xf2\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x80\xfc\x10\x98\x07\xf4\x06\xf4\x06\xf4\xb6\x57\xf4\xd6\x43\x6c\xde\x56\xf0\x1b\xe2\xf3\xb6\x02\xef\x8e\x1b\xdc\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x9d\x08\xb4\x3b\x95\x5c\x5c\x00\x86\x00\x86\x00\x86\x47\x0e\x0c\xef\x44\xc1\x5f\x5f\xb6\x72\xc1\xb1\x28\xaa\xae\x81\x79\x9b\x25\x49\x78\x37\xca\x88\xbb\xe7\x54\xbb\xd4\x20\xf3\xbc\x6d\x2c\x0a\x4f\xdb\xe8\x94\xab\xeb\x0f\x9f\x83\xe6\xd8\x21\x6e\x0b\xee\x4c\x41\x7a\x5d\x99\xdb\xf7\x65\xbd\x20\x52\x49\x9c\x27\x0f\x44\xc3\x5a\xfa\x83\x59\xff\xe4\xd6\x62\xbb\xd9\xda\x21\xe2\xb7\x37\x1f\xde\xd1\x05\x9e\x0b\x97\x6d\xe9\x2c\xba\x95\xaa\xbd\x25\x6c\x19\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\xc7\xad\x42\x47\x80\x37\x80\x37\x80\xb7\x9d\x83\xb7\xad\x56\x35\x21\xb2\x30\xf4\x68\x61\x25\x18\xd4\x16\x80\xd5\xdf\xa6\xc9\x10\x79\x84\x81\x57\x86\x99\x50\xf4\x95\x54\x0d\x88\xc9\x4c\x64\x8c\xef\x87\x26\x6d\x8a\x7e\xcc\xd3\x77\x86\x3f\xdb\xad\xd1\x58\xeb\x20\x28\xc5\x85\x52\x5c\xcf\xa8\x42\x63\x43\xef\xdf\x46\x7d\xc6\xe6\xdb\xfc\x30\x7f\x9b\xab\x28\x12\xd3\x7e\xef\xb3\x51\x05\x2b\xb9\x3b\x4b\x6f\x96\x21\xf3\x8f\x6a\xfe\xce\x22\x99\xa6\x22\x72\xce\xc6\x51\xda\x7d\xf3\x26\x35\xbb\xef\x5f\x0b\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\x1f\xf8\xbf\x97\xb8\xd0\x9b\x82\x17\x33\xb5\x31\x17\x32\x73\x46\x89\x64\x76\xa6\x06\x6c\xc8\x45\x76\x54\x66\xbc\x1e\x2a\xbb\x2c\xb3\x02\x59\x9e\x2a\x72\x38\x4a\xc0\xa5\xdf\xa3\x87\x98\xd6\xb6\x31\x7d\x63\xfc\x57\xf2\x81\xbf\x91\x2f\x79\xa7\xff\xc5\xa3\x62\xc8\xd8\x7b\xfd\x5f\xf7\xf7\x09\x4f\x08\x57\x2b\x16\xa5\x33\x55\x88\xfc\xc2\xb6\x6c\x64\x57\x6f\x2c\x4d\xbe\x0a\x76\xfe\x89\x4f\x84\x9a\xf2\x48\x9c\xeb\x69\xc9\x65\xaa\x18\xb2\xeb\x94\x67\x99\x9d\x68\x68\xb0\xf3\x54\x5b\xf6\xd7\xc3\xd7\x7f\x0a\xba\x05\xdd\xba\x0f\x63\xe5\x5f\xcc\xf3\xb5\x3b\xf7\x8a\xfa\x69\xd8\x7b\xf3\x56\xba\x53\x4f\x95\x7b\x03\xeb\x12\xcd\x94\xf6\x74\x78\x66\x5c\x53\x63\x82\xd6\x7b\x19\x7d\x8f\xbd\xc3\xf7\x4d\xac\x92\x1e\x5b\xbb\x32\x44\xb3\xc6\x61\x3c\x4d\x79\x24\x4e\x63\x24\xd3\xab\x40\xa3\x84\x46\x09\x8d\xf2\xf9\x6a\x94\x1b\x69\x87\xb3\x43\x91\x0e\x8f\x34\x4c\xa4\x51\x2e\x5c\xc7\x04\xf7\xb1\x70\x78\x47\x0f\xf3\x0b\xb5\xac\x82\x01\xde\x99\x01\x6e\x5d\xab\x87\xcb\xef\x24\x63\xca\x2c\x9d\xd9\x9d\x18\x49\x43\xb4\x1c\x76\x2a\x75\x5f\x4b\xfa\xe8\x6d\x02\x0b\x9b\xc9\xec\x22\x13\x63\x4e\x6d\x66\xef\x17\x5a\x62\x83\xa0\xfd\xd7\xb2\x83\x2a\x99\x4c\x44\xac\x6d\x7d\xfa\x64\xe5\xc3\x50\x1c\xce\x92\x74\x60\x97\xdb\x04\x7b\xd8\x38\xd7\x9e\xd1\x54\xe4\x89\x8c\x3d\x60\x28\x9d\x24\xfd\xb6\xbe\xe1\x66\x4a\x3f\x64\x88\x89\xb8\xfe\xa5\x7b\x21\x7b\x93\x51\xe0\xf1\x26\xfa\x07\xf4\x9c\x13\xc1\xb3\xc6\x67\x2c\x3f\x02\x3d\xca\x35\x3d\x49\x8f\xc0\xe1\x5d\x90\xe8\x6e\x9a\x0a\xae\x84\x67\xec\xd7\xb9\x9c\xf2\x31\x7d\xaa\x6b\x99\x26\xd1\xd3\xc0\xb4\x96\xa1\xca\xee\xad\xcb\x4c\x79\xc6\x3b\xff\xe3\x90\x05\x0b\x9e\x58\x4c\x45\x16\x8b\xac\x28\x95\x1d\xc1\x64\x3e\xbd\xe7\x99\x7e\x77\xfd\x01\xf2\x99\xb8\x1c\xf1\xd4\xa9\xac\xb7\x67\xe6\xf0\xed\x19\x1b\x25\x19\x4f\x93\x7f\x3a\xa5\xe4\x4e\x30\x1e\xc7\x84\x5f\x2f\x0d\xca\x88\x4b\x00\x67\x2e\x7f\xae\xca\x1f\x19\x65\x73\xc8\xde\x27\x34\x4a\x82\x47\x97\xf9\xfc\xbb\x11\x5f\x37\x41\x06\x46\x58\xa5\x31\x2c\x8b\xfb\xe0\x0b\x98\x07\x7b\xe7\x5e\x69\xa5\xf6\x6f\xb7\x2d\xf4\x74\x7a\x48\xdf\xcb\x47\x36\xe6\xf9\x1d\x1f\x57\xc2\x46\xfc\xb8\x14\xf9\x48\xe6\x13\xdd\x6c\x8d\xaf\xf4\x4b\xed\xe9\xda\xdf\x88\x06\x89\xeb\xe1\x53\xf3\xfa\x89\xee\x7d\x51\x12\x97\x3a\x27\xe9\x55\xa4\x3c\xfb\xcf\xa0\x44\xe1\xd4\x1c\xa7\x48\x0d\x83\xf6\x76\x5a\x86\x23\x49\xe5\xea\xb5\x7a\xb3\x21\x33\xf1\x42\xe4\xeb\x84\xc6\xe9\xdc\xbc\xc3\x39\xbb\xb0\x7d\xa4\xda\x87\xd4\x8f\xec\xfc\xcf\x3c\xfa\xaa\x67\xde\x2c\xd6\x67\xf1\x34\x95\x8f\x74\x52\xad\xe1\x8c\xd6\x68\xc7\x53\xf5\x22\xee\x0d\xee\xfc\x95\x7e\x64\xe7\x3f\xc9\x5c\x04\x97\x65\x11\x57\x11\x8f\xf5\xdb\xdb\xf6\x21\x63\x6f\xae\xa7\x8c\xf5\x9c\xbb\xe0\xc8\x5f\xa3\xc2\x60\x6a\x1d\xed\x50\x38\x5a\x6f\x71\x5c\xbb\xc2\x76\xbb\x83\x75\x45\x74\x3f\xff\xac\x24\x10\x50\x3c\x8c\x41\xaa\x1d\x97\xcb\x75\xbf\xec\x82\x2e\xff\xaf\x0d\x2e\xda\x44\xe4\x63\xd1\x7e\x58\x15\x39\x2f\xc4\x38\x89\x2e\xe6\x4e\x3c\x58\x57\x70\x5a\xc9\xe4\xb9\x87\xc5\xf8\x82\xbe\x79\x4d\x9f\x19\x1e\x21\x96\xe4\x3b\x5a\x92\xd7\x24\x79\xd7\xa7\x4d\xd8\xc8\xd4\x48\x74\x46\x7b\x66\x2f\xc2\xc1\x49\xc7\xcc\x70\x7f\x49\xf3\xb8\x09\x8c\xe4\x29\xfd\x52\x7b\xc1\xe6\xd7\x74\x06\x79\xa4\x8a\xbd\xf8\x2f\x25\x33\xea\xe1\x03\xf6\x51\x9b\x0b\xfb\xef\x1b\x67\x44\xca\x3f\xbe\xec\xc6\x0a\xd6\x72\x2e\x7f\x92\x79\x44\x7e\xf5\x58\xd2\x17\x92\xec\xf6\x6c\xa4\xff\x76\x7b\xc6\xae\x2a\xaf\x3c\x64\x1f\x0a\xeb\x04\x13\x19\xb6\x3d\xfe\x82\x47\xd4\x4a\x14\x65\x98\x26\x91\xf5\x47\x08\x24\xcb\x47\xfb\x01\x4c\x14\xde\x54\xc8\x69\x2a\x86\xcc\xdc\x73\x94\xf2\xb1\xff\xf0\x24\xb4\x36\xb6\x96\xbf\x7d\xd0\x06\xfa\xf7\x7b\x07\x25\x1b\x11\x8c\xfe\x12\x0d\x6f\x5f\xda\x0a\x33\x86\x85\x77\x3b\x9a\x54\x61\x5d\xf4\xb4\x4c\xc6\x62\x83\xc4\x33\x9f\x64\x2c\x90\x76\x66\x3e\xed\x8c\x6d\x17\x44\x9d\x23\xea\x1c\x51\xe7\x88\x3a\x47\xd4\x39\xa2\xce\x11\x75\x8e\xa8\x73\x44\x9d\x23\xea\x1c\x51\xe7\x88\x3a\x47\xd4\x39\xa2\xce\x11\x75\x8e\xa8\xf3\xd5\x41\xdc\x27\x19\xaf\x96\x7f\x78\x27\x29\x67\x2c\xee\x58\x37\xe1\xcc\xae\x29\xd2\x96\xd2\xcd\x34\x43\x9f\x1d\x05\x72\xd2\xcd\xa1\x19\x41\x33\x7a\x86\x61\x9c\xae\xef\x6f\x35\x88\x33\xb8\xc9\x16\xd3\xcc\xf8\xbb\x1c\x4c\x92\x99\x85\xb6\x7d\xd5\x14\x33\xc7\x66\xe9\x97\x26\x98\x01\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x07\xe8\x3f\xa8\x7d\x2a\x5b\x48\x2f\xb3\x98\xfc\x1f\x59\x72\x19\x0a\x86\x5d\x2f\xb5\xcc\xb1\x81\xad\xc6\xc4\x32\xab\xc2\x2c\xa4\x95\x79\x66\x69\x65\x7a\xa1\xd3\x7d\x26\x95\x59\x6c\x7e\x56\x4a\x29\x73\x7c\x23\xb8\x39\xa1\x0c\x54\x48\xa8\x90\x50\x21\x4f\x5e\x85\x3c\x94\x44\x32\x9b\xc8\x83\x47\x19\xfc\xd1\x92\x44\x66\x55\xb3\x8b\x14\x32\xc7\x6b\x76\x91\x42\x06\x29\x64\x90\x42\x06\x29\x64\x90\x42\x06\x29\x64\x0e\x2d\x85\xcc\x12\x20\xb7\x66\x02\x99\x06\x27\x0d\xe9\x63\xf6\xb7\xf4\x46\xf2\x98\x83\xf1\x05\x9f\xfd\x12\x1c\xc9\x63\x90\x3c\x66\x17\xcc\xa2\xd7\xd4\x31\x5b\x95\xad\x6a\x89\x63\xec\xbd\x4e\x27\x6d\x8c\xfd\x73\x94\x72\xa5\xd6\x4e\x1e\x63\x27\xcf\xb7\xfa\x22\xc8\x20\x53\xcb\x20\x53\x6b\x1c\x44\x97\x23\xba\x1c\xd1\xe5\x88\x2e\x47\x74\x39\xa2\xcb\x11\x5d\x8e\xe8\x72\x44\x97\x23\xba\x1c\xd1\xe5\x88\x2e\x47\x74\x39\xa2\xcb\x11\x5d\x8e\xe8\xf2\x15\x91\x5c\x48\x17\x0e\x2c\x97\x4c\x0d\x7c\xac\x95\x50\x66\x5f\x64\x69\x1b\x59\x65\x16\x83\xa0\x5d\x04\x75\x56\x9e\x00\xb2\x12\x64\xa5\xe7\x16\xd9\x59\x1f\x00\xdb\x0b\xef\x6c\xb8\xd3\xb6\x32\xcd\xcc\xdd\xea\x30\xd2\xcd\x74\x32\xff\x2b\xe5\x9c\x39\xd6\xc9\x60\x71\xe2\x19\xe8\x03\xd0\x07\xa0\x0f\x40\x1f\x80\x3e\x00\x7d\x00\xfa\x00\xf4\x01\xe8\x03\xd0\x07\xa0\x0f\x40\x1f\x80\x3e\x00\x7d\x00\xfa\x00\xf4\x81\x67\x91\x7d\xa6\x9b\x56\x70\x4c\x29\x68\xaa\x81\xb5\x6b\x24\xa2\x39\x56\xda\x35\x9f\x8d\x66\x5d\xc2\x85\x94\x34\xcf\x29\x25\x4d\xaf\x18\xbb\xb7\xbc\x34\xdd\x0c\x53\xf7\xe4\x34\xc7\x3b\xaa\x1b\x32\xd4\x40\xd1\x84\xa2\x09\x45\xf3\xb9\x2a\x9a\x07\x91\xb5\xa6\x0f\x95\xf1\x78\xc3\x4c\x9a\x94\xc5\x75\x8d\x32\x92\xd8\x1c\xaf\x3d\x46\x12\x1b\x24\xb1\x41\x12\x1b\x24\xb1\x41\x12\x1b\x24\xb1\x39\xa8\x24\x36\x1d\xb9\xde\x3a\x99\x6c\x16\xf8\x6c\x48\x67\xb3\xe7\x75\x3a\x72\xda\x1c\x8c\x6b\xf8\xec\x97\xea\xc8\x69\x83\x9c\x36\x3b\xc3\x1a\xfd\x25\xb6\xd9\x89\x22\x16\x66\xb7\xa9\xdd\xf0\x74\x52\xdc\x3c\xc8\x74\x36\x11\xbc\x28\x78\x74\x3f\xa1\x85\xc4\x7a\x59\x6e\x7e\xa5\xeb\x5c\xf9\xeb\x20\xd3\x4d\x2d\xd3\x4d\x43\x03\x21\x9a\x1d\xd1\xec\x88\x66\x47\x34\x3b\xa2\xd9\x11\xcd\x8e\x68\x76\x44\xb3\x23\x9a\x1d\xd1\xec\x88\x66\x47\x34\x3b\xa2\xd9\x11\xcd\x8e\x68\x76\x44\xb3\xaf\x08\xeb\xea\x84\xe1\xc0\x32\xde\x34\x00\x90\xb5\xb2\xde\xec\x93\x34\x6d\x23\xf3\xcd\x72\x30\xb4\x8b\x58\xd1\xb9\xa7\x80\x08\x05\x11\xea\xb9\xc5\x8b\x36\x0d\x82\xed\xc5\x8c\xb6\xdc\x6d\x5b\x99\x70\x1a\x6f\x77\x18\xd9\x70\x3a\x4f\x0d\x2b\x65\xc4\x39\xe6\x89\x62\x71\x56\x1c\x68\x09\xd0\x12\xa0\x25\x40\x4b\x80\x96\x00\x2d\x01\x5a\x02\xb4\x04\x68\x09\xd0\x12\xa0\x25\x40\x4b\x80\x96\x00\x2d\x01\x5a\x02\xb4\x84\x67\x93\x19\xa7\xbb\xa6\x70\x4c\xd9\x71\xe6\x62\x72\xd7\x48\x90\x73\xcc\xf0\x6b\x3e\x49\xce\x26\xc0\x0b\x89\x72\x9e\x53\xa2\x9c\xde\x29\x77\x6f\xc9\x72\xba\xdb\xaa\xee\x09\x73\x8e\x7b\x94\x37\x24\xcd\x81\x18\x0a\x31\x14\x62\x28\xc4\xd0\x1e\xd4\xc9\xbe\x92\xe8\xf4\x25\x4e\x1e\x77\xe4\x4a\x93\x20\xb9\x89\xb1\x46\x42\x9d\xe3\xb5\xd1\x48\xa8\x83\x84\x3a\x48\xa8\x83\x84\x3a\x48\xa8\x83\x84\x3a\x07\x95\x50\x67\x05\x1c\xb8\x4e\x52\x9d\x25\xfe\x1b\x12\xeb\x1c\xc0\x5a\x1e\xc9\x75\x0e\xc6\x4d\x7c\xf6\x4b\x79\x24\xd7\x41\x72\x9d\x9d\x22\x8f\xfe\x12\xec\xec\x4c\x58\x0b\x93\xec\x34\xdc\xf4\x74\x12\xed\x90\x92\x7b\x19\xa9\x24\xce\x93\x07\x6a\xae\x16\x31\xcf\xc6\x07\x65\x71\xf2\x90\xc4\x33\x9e\x86\x72\x34\xf7\x61\x7b\x6f\x6f\x3e\xbc\xa3\x0b\x0d\x83\x45\xda\x1b\xbf\xbc\x3b\xa7\xab\x9c\x97\x81\xd0\x95\xc8\x56\x3f\x75\xb3\x24\x53\x85\xe0\xf4\x76\xcf\x39\x5d\xcf\xe3\xbc\xf7\xe2\x1b\xf8\x67\xb3\x03\x6e\x87\x8e\x3c\x45\x22\xbc\x7f\xe8\xc3\x24\xd0\x8b\xf5\xb7\x87\xcf\x37\xca\xd6\xec\x01\xf6\x21\x60\x1f\x02\xf6\x21\x60\x1f\x02\xf6\x21\x60\x1f\x02\xf6\x21\x60\x1f\x02\xf6\x21\x60\x1f\x02\xf6\x21\x60\x1f\xc2\xce\x16\xf2\xd8\x07\x81\x7d\x10\xd8\x07\x71\x14\xfb\x20\x56\x45\x6e\xcb\xc2\xe8\xed\x07\x0b\x70\x5b\xe6\x2c\xa0\x4b\x73\xdd\x2f\x76\x1b\x94\x1e\x0f\x79\x75\x76\x76\xd4\x4e\x53\xe9\xca\x9d\x57\x9c\xf1\xe0\xda\x80\x76\xed\xd0\xee\xb8\x81\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\x1d\x60\xdd\x49\xc0\xba\x30\xe2\x27\x5c\xa2\x1c\x4d\xa8\x0f\x08\x21\x08\x21\x08\xe1\x69\x11\xc2\x4c\xc6\xa2\x87\x90\xbc\x4f\x32\x16\x08\xc8\xdb\x1a\xdb\xd3\xcd\x8b\x70\xbc\x0a\xe1\xd3\x4d\x02\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x07\xbe\x87\x60\x3c\xa0\x36\xa0\x36\xa0\xb6\x03\x44\x6d\xfd\x84\xe2\xf5\x86\xdb\x10\x88\xb7\x1d\x58\x77\xdc\xa0\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\x0e\x90\xee\x04\x20\x5d\x2d\x08\xcf\x2e\x50\x10\x82\x07\x2e\x08\x2e\x08\x2e\xb8\x7b\x2e\x68\x0f\x46\x29\x57\x6a\xe3\x40\x3c\x8b\xa2\xde\xea\x8b\x21\x1a\x6f\x3b\x80\x2f\x6c\x63\x84\xe4\x95\xb4\x2f\x6c\x17\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\xc4\xe5\x81\xbf\x81\xbf\x81\xbf\x1d\x2c\x7f\xeb\x21\x3a\xaf\x77\x06\x87\x10\xbd\x2d\x12\xbc\xe3\xa6\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\x20\x77\xa7\x42\xee\xc2\x60\xbd\xda\x2a\x05\x11\x7b\x20\x86\x20\x86\x20\x86\xbb\x27\x86\x0f\x54\xac\x97\xfb\x62\xbd\x9b\x06\xed\xd5\x8b\xff\x22\x70\x6f\x3b\xd8\xaf\xde\xce\x08\xde\xdb\x43\xd5\x6b\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\x60\x40\xe0\x38\xe0\x38\xe0\x38\xe0\xb8\x1e\x70\x5c\x0f\x31\x7c\x5b\x41\x72\x88\xe3\xdb\x32\xd0\x3b\x6e\x98\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x07\x90\x77\x4a\x20\x2f\x8c\xe7\x6b\x58\xa9\x20\xa6\x0f\x10\x11\x10\x11\x10\xb1\x6f\x88\x98\xca\xb1\xba\x0c\x78\xe0\x22\x10\xa5\xcf\x9d\xa7\x4f\xa9\x1c\xff\x94\xa4\x54\x82\xf5\x3f\x79\x16\xa7\xf4\x79\x2b\xb0\xa9\x0b\xff\xf9\xee\x1f\xe6\xff\xa6\x72\xac\x4d\xdb\xf7\x3e\x9e\x6a\x93\x27\xda\x1c\x04\xe9\xd7\x70\x5f\x3f\x95\xe3\x60\xd2\x30\xaf\xb8\xd8\x92\xd3\xf7\xb1\x96\xec\xb2\x15\xd9\x8e\x85\x5b\xf5\xc7\x7e\xea\xab\xf1\xd0\x39\xf8\xb9\x0c\x8e\x2e\x01\x92\xee\x2e\x73\x8d\x3e\x16\xc5\x5b\x19\x07\x86\x61\xbb\xcc\xd1\x3e\xc7\xf0\x43\x36\x92\x9d\x41\x23\x7d\xd8\xe0\xea\xfa\x07\xe5\x0d\x86\x3c\xd6\x2b\xe1\x44\x66\xb9\x18\x27\xaa\x30\x2f\x37\xb4\x74\x70\xf8\x71\x56\x70\xbd\xb6\xf8\x9b\xb8\xbb\x97\xf2\xeb\xdb\x10\x1a\xcd\xdf\x79\xd1\xd9\xde\x1a\x28\xe7\x37\x07\xc7\xc8\x78\xc5\xcc\x3f\x0b\x7b\x34\x57\xb0\x8e\x58\x44\x10\x4e\xe6\x9e\xac\x65\xb1\xf5\xf8\x89\x5a\x95\x4e\x8f\x36\x00\xb6\x87\x9a\x3f\x9c\xd1\x87\x9f\x8a\xbc\x48\xcc\x37\xe1\xd3\xc4\x7d\xad\xb9\xc7\xbf\xba\xfe\xe0\x10\x82\xc1\x8c\x2a\x74\xaf\x44\xcc\xcc\x67\x33\x26\x98\xa6\x3c\xeb\x5a\x05\x2f\xe1\x1e\xc4\xaf\x4c\xec\x2a\x28\x92\xd9\x83\xc8\x03\xee\xe7\xae\xe6\xad\xa5\x05\x41\x7a\xc6\xc8\x33\x9e\x9a\xd5\xe2\xc0\xbf\xab\x7d\xf5\x59\x16\x5c\x81\x4e\x51\x43\xf6\x91\x56\xab\xd9\x48\xbe\x61\xd4\x77\xdf\x5c\x5e\x8e\x93\xc2\x49\x24\x91\x9c\x4c\x66\x59\x52\x3c\x5d\x6a\x77\x39\x4f\xee\x66\x85\xcc\xd5\x65\x2c\x1e\x44\x7a\xc9\xa7\xc9\x05\x3d\x5b\x66\x4c\xeb\x24\xfe\x9d\x37\xd6\x67\xf5\xe1\xfe\xdd\xa1\xe5\x7a\xcb\xfd\x77\x92\xc5\x66\xc9\x6d\xce\xf4\x08\xc6\x36\x90\xfe\x93\x7e\xc7\xcf\xef\x6f\xbe\x78\xa3\x6d\x1a\xd1\x7a\xab\xfe\x54\x55\x5d\xd4\x25\xd9\x88\xdc\x9d\x24\x70\x5c\x44\x16\x4f\x65\x92\x15\x21\xdd\x53\xb3\x3b\x9a\x2b\xdd\x3a\x80\x15\x72\xc8\xde\xf2\x4c\xaf\xa0\xee\xbc\x13\x3d\x64\x1f\x32\xf6\x96\x4f\x44\xfa\x96\x2b\xd1\x77\xc3\xe9\xc6\x52\x44\xe7\x1b\x9b\xce\xc1\x80\xf9\xe6\xbb\x29\x78\x16\xf3\xdc\xad\xab\x3d\x36\xf8\xb1\xe7\x07\x74\xd7\xd5\xc3\x64\x7d\xb1\xe3\x17\x7a\xc8\x8f\xa2\xe0\xfa\xad\xec\x48\x55\xf3\x6f\x65\xad\x80\x32\x1d\xc3\x21\x23\x77\xbe\x5f\x41\xf3\xd1\x48\x44\xc5\x9c\x93\xe0\x0d\xad\x0a\x06\x35\xcf\x73\x4e\xfe\xb7\x99\x92\x96\x9a\xcf\x25\xd6\xcd\x3e\xe1\x59\x5d\x8c\x99\x6a\xe7\xe1\x62\x22\xf2\xb1\xb8\xf8\x2a\x9e\xca\x65\x48\xc3\x59\x74\x51\x31\xd6\x27\xd1\x0f\xe6\xa5\x9d\x26\xf1\xe6\xef\xa5\x7a\xd3\xfc\x88\x75\x2d\x67\xa1\x21\x6e\xd4\x75\xf4\x6c\xda\x8b\x9d\xa7\xd8\xf8\x95\x6c\xbd\xfe\x45\xf5\xab\x2f\x3a\xbb\xc9\x68\x97\x9e\xc1\xdf\xed\xc7\xfe\x1f\x58\xf2\x7e\x2d\xb9\x1f\x43\xd5\xa6\xfb\x79\xb5\x2f\xd6\xf3\x88\x5c\xd8\xcd\xbf\x63\xfe\xd9\xf2\xfc\x53\x81\xd6\xdb\x7d\xbc\xf5\xe7\x1f\xdd\x43\xcd\xec\xb3\x73\x4b\x6b\xb7\x09\x6d\x6a\x6d\x3f\xcf\x52\xf1\xb7\xa4\xb8\xff\xc5\xcf\x71\xf3\xdf\x64\xfe\x1c\xd3\xc1\x8b\xd9\x34\x25\x6e\x16\x1c\xd0\x96\xc5\x09\xb1\x6a\xc8\x3e\x58\x20\xa3\x3f\x90\xc8\x62\x03\x3e\x27\xfc\xab\x60\x16\x3f\x72\xc3\xf3\x89\x06\xd2\xe5\xc4\xb7\x29\xcf\x94\xb9\x56\x2e\x8c\xc8\xdc\xc9\x97\xfe\x8b\x6e\xda\x86\xa7\xbf\xba\xfe\x60\x0e\x11\xab\xbe\x17\xec\xea\xfa\x03\x1b\x9b\xbf\x58\x08\x63\xe7\xfa\x3b\x41\x42\xa2\x1e\x2e\xe7\xff\x72\x4e\xef\x98\xa6\xf6\x54\x62\xa1\xf6\xaf\x76\x78\x1a\x21\x26\x15\xd9\xb8\xb8\x77\x2c\x44\xa5\x49\x24\x8c\x52\x7c\x27\x98\xcc\xc4\x90\x7d\xb6\xf3\xc7\x22\x4b\x55\x1b\x20\xdf\x07\xc1\x94\xd2\xfc\x4a\xee\x60\xf8\x52\x0f\xee\x6f\x5d\x5e\xcb\x9d\xbc\xeb\x17\x93\x0b\x3a\x5a\xb5\x83\xd1\x5a\xaa\xfc\x0b\x39\x68\x7e\x55\x46\x4b\xb2\x88\xe7\xda\x45\xbb\x93\xb3\x82\x5d\xb0\xb7\x9f\xdf\x5f\x7d\x79\x3f\x60\x7f\xbd\x7e\x47\xff\x95\x39\xfb\x17\xa3\xa8\xa5\x69\xe8\xc3\xed\xf8\x85\xcb\x99\x6f\x7e\x60\xf9\x6f\x54\xf1\x50\xca\x4f\x67\x3c\x82\x59\x2a\x18\x71\x02\xe2\x59\x24\xb5\xfc\x24\x73\x26\xbe\xf1\xc9\x34\x15\x6f\xd8\xf9\x54\xc6\xea\x9c\x4d\x04\xcf\x14\xd3\xff\x1e\x9a\x3f\x5d\xa6\x72\xec\xfe\x6c\x31\x88\x9e\x1c\xfc\xa4\x23\x47\xee\xec\x7f\x71\xa7\x19\x6d\xcd\xde\xde\x84\x07\x18\xe1\xc7\xff\xca\x5f\xbc\xf2\x9b\xf0\x84\xf0\xba\x97\x2a\xe2\xa9\xa8\x9c\xa9\xff\x50\xbf\xe0\xbf\x5c\x36\x3f\x81\xf3\xcc\x93\xbc\xfa\x0b\xdd\x04\x1f\x46\xec\x31\x49\xe3\x48\x4f\x16\xf5\x4f\x49\x56\xc3\x38\x50\xd4\x7a\xa4\xdf\x58\xc9\xa3\xbc\x78\x2c\xe9\xe5\xe4\x83\xc8\x53\x3e\x35\xe8\x5b\xf0\xe8\x9e\x51\x50\x06\xdd\xe4\x9d\x98\x8a\x2c\x26\x30\x6d\x25\xc8\x2c\x4a\x25\x89\x2f\xc6\x12\x0d\xaa\xaf\x3e\x49\xc6\xf7\xa6\xc9\xee\x48\x53\x91\x8f\x7a\xa6\x5d\xaf\xe3\xa8\x48\xea\x3f\xd5\x3b\x0d\xfd\xd9\x63\x71\xf3\x65\xcd\xdf\xbc\x0b\x39\x4b\xc5\x90\xfd\x4a\xe1\x39\xc6\x9b\x23\x53\x7a\x7b\xf6\x36\x9d\xa9\x42\xe4\xb7\x67\x03\x76\x7b\xf6\x89\x4f\x84\x9a\xf2\x48\xc4\xfa\x7f\xeb\x86\xbe\x3d\xfb\x97\xdb\xb3\xf0\x34\xdf\x77\x78\x61\xb4\xd3\xc8\x1c\xb9\xa0\xfb\x85\xcb\x24\x6a\xe0\x09\xd1\xd7\xe0\x11\xfc\x2d\xc8\x3c\x85\x4a\x52\xf5\x42\xc3\xda\xe3\xcc\xdd\x37\xf3\x07\x97\xde\xd3\xbc\x44\x70\x01\xfd\x2d\x05\xdd\x34\x93\xb6\xa1\x5c\x00\x81\x25\xb8\x95\x0f\x68\xaf\x57\x69\x53\xdd\xff\xa6\x3c\xd7\xce\xd5\x9c\xa0\xa1\xfb\x1e\xdd\x73\x38\xef\xe8\x7c\x5f\x65\x26\xd6\xae\x5e\x12\x89\xcf\x62\x24\x72\x91\x45\x0d\x5f\xbe\x7e\x06\xbb\x97\x29\x45\x2b\xe5\xfe\x2f\x85\x64\xf6\xac\x61\x2a\xc6\x3c\x7a\x2a\x7d\x8a\x45\xeb\x1a\xdf\xbe\x0e\x93\xce\x2d\x71\x0c\x3c\xad\x3f\xd1\x6f\xfa\xcf\xbf\x39\x63\x1d\xca\x68\xca\x3e\x85\xef\xfb\x4d\x6e\x60\x79\xdb\xe6\x2b\xd3\xb1\xca\xe5\x4d\x6f\x5a\xe5\x1e\xc4\x77\xe7\x2f\xaf\xff\x4c\x57\xd6\xab\x2b\xfa\x2b\x4f\xd9\x5f\x3f\xff\xcc\x88\x1b\x9b\xc0\x27\xa7\xfa\x92\x64\x69\x15\x5f\xa7\x0d\xd3\xfa\xca\xc6\x02\xea\x67\xd8\xf0\xe3\xff\x6a\x0d\x56\x57\xbc\xb9\xf8\xfc\xbe\x01\xa7\x5d\x98\x38\xad\x9d\x58\xa7\x36\x81\x09\x28\x27\x28\xe7\x51\xaf\x32\x41\x39\x41\x39\x9b\xd7\xde\x4b\x2c\xf2\xe6\x2b\xef\xc5\x37\x68\x26\x9d\xcb\x7f\x53\xfd\xf6\x8b\xcf\x07\xed\x3c\x44\xda\xd9\xf9\x9b\xf5\x3c\x36\x97\x74\x78\x10\x4f\x10\xcf\xed\x13\xcf\x0e\x46\x71\x73\xcb\xeb\x66\xa1\xb6\x09\x34\x70\x9f\x79\xd6\xe0\x28\xbb\x89\xb4\x6d\xfe\x64\x49\x11\xf2\x9a\x0e\x6b\xaf\xb3\xc1\x99\xe9\xca\xe6\x75\x1b\x6c\xae\x7b\x88\xcf\xe2\x21\x11\x8f\x0b\xd0\x60\xf3\x89\x6e\xa5\x93\xc7\x14\x1f\xed\xe6\x87\xa9\x8f\x47\xfd\xad\xf6\xc3\xdf\xaa\x34\xd1\xb5\x8c\xf8\x36\x35\x91\xa1\x7a\x41\x1f\xc6\xa0\x17\x26\x42\x7c\xa6\x5c\x30\xa7\x0b\x03\x4c\x82\x18\x74\xbb\x9f\xc4\x07\x12\x1b\x16\x97\xc9\xcc\x2f\xe9\xfc\x4d\xcb\xb0\x3f\xba\x40\x62\x37\x99\x94\x11\xc8\x77\x4f\xc1\x33\x0c\x42\xe2\x43\xcf\x33\xe2\x49\x6a\x43\xda\xbc\x9d\xa1\xbb\x71\x36\xd5\xf7\xa0\xd8\x71\xf7\x41\xab\x0b\xa4\x12\xad\x58\x80\x53\x3e\x95\xfe\xce\x7e\xdf\x94\x0d\x06\xa6\x65\xa1\x3f\xe3\x6b\x26\x1f\x33\x37\x1f\xe9\x07\xbc\xb1\x0f\x18\xf1\x34\xf5\x13\x95\xbb\x71\xf9\xa8\xfa\xca\x77\xc4\xc5\x4c\xc4\xac\x39\x4f\x1f\x9a\xe5\x82\x4d\x65\x9a\x44\x4f\x25\x73\x28\x24\xfb\xed\xef\xe7\xb6\x3f\x9f\xff\xcf\x6f\xab\x81\xa5\x4a\x57\x9b\xeb\x41\x6f\x83\xa3\x7e\x12\xbf\x97\x8f\x14\xb8\x69\xac\x4e\xc4\x0b\x51\xee\x15\xd0\x6f\x52\x59\x83\xf7\xe2\x23\x86\x8f\xa1\x0d\xa8\x6d\x8a\x6b\x6a\x89\xf9\xa7\xfe\x29\x3c\x5c\x79\xec\xca\x74\x4f\xdb\xa6\x82\xd9\xa4\x1c\xdc\x7e\x5e\xe1\xb9\x60\xf7\x14\xba\x16\xb3\x8b\xb2\x0b\x94\x1c\xed\xc3\x38\xd3\xa6\x59\xe6\x4c\xdf\xb4\x1a\xd9\x6a\x8e\x35\xd0\x80\x41\x0b\x41\xf9\x52\xe3\x26\x73\xd6\xc6\x50\xb4\x60\x0f\xe3\x68\x96\xa6\x4f\xec\x1f\x33\x9e\xda\x48\x76\x31\x1c\x0f\x07\x2c\x99\xf0\xb1\xb0\xfd\x24\xd8\xf5\x9a\xc8\x01\x7b\x24\x02\x76\x7b\x16\x9c\x72\x7b\xd6\x04\x6d\xec\x2d\x8d\xc7\x54\xb9\x48\xd3\xd9\x32\x1f\xf3\x2c\xf9\xa7\xf9\x7a\x4d\x8c\xb3\x01\xf4\xf8\xdd\x35\x73\x0d\xf1\xa9\x7e\x0a\x8b\x45\x94\xc4\x42\xf9\xcd\x17\x85\x64\xf9\x2c\xab\x8c\x1f\x99\x05\xbb\xa4\x7d\x64\xaf\xff\x41\x05\x1a\x19\x63\xc0\x0b\xbf\xe6\xd3\xab\x09\xc7\x4f\xed\x3d\xfd\x76\x40\x7b\x4e\x52\x28\x91\x8e\x8c\x73\xe3\xaf\x64\x10\x33\xfd\x9c\x20\x88\xd2\x16\x65\x24\xf3\x89\xb9\xbb\xb5\x35\x7e\x22\x77\xdb\x8f\x6a\x57\x56\x7e\xf3\x9f\x65\xa1\xac\x06\x55\x69\xcf\x61\x26\xb4\x85\x55\x5f\x13\x2b\x56\xb9\x4e\x51\xd3\x00\x06\xad\x8d\xf3\xe4\xb1\xeb\xe3\x3d\x6d\x49\xf1\xed\x61\xf7\x74\x70\xa5\x64\x94\x50\x90\x3d\x8d\xe8\xdb\xb3\x7c\x96\xa5\xda\x8d\xb8\x3d\xd3\x5f\xfa\xf6\xec\x95\xfe\x47\xce\x6e\xcf\x5e\xdf\x9e\xfd\xc8\xd8\x93\x9c\x55\xb7\x1d\xf9\xad\x59\x5c\xb1\x91\xd4\xe3\x45\xbd\x61\xb7\xf3\xdf\xfc\xf6\xec\x0d\xfb\xbf\xb7\x19\x63\xb7\x67\xd4\x78\xef\xbf\x69\xaf\x8f\xcc\xa6\x3e\xf4\x77\x7d\x88\x99\x33\xf4\xff\xdd\x9e\xd1\x76\xbd\x37\x95\x27\x1a\x94\x47\xcd\x7c\x6b\x2e\x7b\x7b\xf6\x49\x16\x1f\xb2\xca\x71\x33\x62\x83\x2b\x9b\x3f\xbf\x0a\x4e\x62\xe6\xa5\xdc\xff\xfc\x1f\xf3\x8f\xef\xfa\x3f\xff\x73\x9b\x7d\xb7\x2a\x83\xdd\x27\x6f\x5e\x9c\x67\x64\x7d\x89\x4a\xaf\xde\xe0\xf5\xc6\x36\x7b\x13\x45\xf6\x90\xe4\x32\x9b\x88\xac\x70\x6d\x3e\xcd\x65\xec\x9a\x5d\x15\x7c\x9c\x64\x63\xdd\xf8\x7b\x68\xfb\xca\xc3\xb5\x36\x7f\xb7\xb6\x37\x6f\x55\x69\x7e\xff\x72\x8b\x3e\xc2\x8d\x10\xde\x07\xae\x98\xa5\xcb\x58\x46\x4a\x7b\xc0\x91\x98\x16\xea\x52\x3e\x88\x5c\x3b\x2f\x97\x8f\x32\xff\x9a\x64\xe3\x0b\xdd\xc8\x17\xf6\x7b\x5c\x9a\x81\x78\x49\x86\x80\xf6\x3d\xd9\xc1\x43\x82\x15\x1d\xf4\xcd\xa9\xac\xf8\xe3\x67\x5b\x5a\x79\x4c\xa6\xc5\x13\xfb\x39\xdc\x24\xe8\xb6\xc8\x3a\x5b\x52\xdd\x56\xb8\x81\x97\x5d\xd9\x89\xf8\x7d\x70\x96\xcf\xd2\x46\x01\x51\xff\x39\x70\x57\x69\x7b\x42\xe0\x88\x4a\xbb\x63\xc1\x7b\xaa\x97\x15\xb5\x2a\xec\xbc\x81\x96\x3a\x64\x5f\x9a\x0f\x18\x58\xee\xf3\x47\x8c\x68\x57\xb4\x7d\xf5\xff\xe5\xd9\xd3\xff\xb2\xcf\xa4\xc1\xfc\xa7\x7c\x14\xe4\xf4\x24\xd6\xe5\xd4\x4d\x38\xcd\xcd\xf6\xbd\xd2\xc5\xf7\x2e\xe7\xdf\x42\x44\xe5\x82\x1e\xe6\x8f\xd2\xac\x3d\x9d\x15\x7e\x45\xe9\x2c\x67\x92\xd1\xe2\x93\xbc\x12\xfa\x1e\x91\x5f\xfb\xe9\xb9\xff\x81\x7c\x5e\xfa\xb5\x47\xd8\x52\x7f\xf9\x42\xa4\x4f\x2c\x4e\x14\xbf\x4b\xdd\x25\xa7\xe9\x6c\x9c\x64\x83\x0d\x9e\x92\x94\x26\x32\xdb\xda\xe5\x33\x73\x42\x39\xab\xfb\x25\xaa\xee\x85\x4b\x28\x7e\x78\x9f\xc6\x13\xdc\x3e\xad\xad\x31\x81\x86\xe8\x10\x52\x26\x93\x58\xbc\x27\x8a\xd8\xd0\x27\x6f\xca\x83\xe6\x9b\x04\x33\xb8\xf6\xc5\x6d\xbf\xfa\xca\xee\xb9\x62\xfa\x4a\x4c\x98\xb3\x87\xec\x8a\xc4\x07\xda\xf3\x58\xfa\x5b\x6f\xd8\x5f\x33\xf2\xaa\x07\xec\x93\xcc\xc4\x80\xdd\xc8\x89\x30\xff\xfe\x25\x7b\x97\x3f\x7d\x9e\x65\xcc\x37\x3e\x59\xd5\xf0\xa2\xec\xe3\x5f\x6f\xbe\xb0\x44\x7f\x6d\xb3\xe1\x92\x7a\x44\x16\x25\x69\x62\xbd\xfd\x27\x55\x88\xc9\x80\x29\x4a\xf4\xc0\xbd\xc0\x33\xe1\x4f\xa6\xff\xfc\xbf\x06\x96\xde\x3d\x31\xce\x46\xb3\x42\xbb\xe3\xaa\x10\x53\xb7\xb0\x29\x3f\xad\x0d\x01\xf7\x59\x18\xc2\xa7\x20\x11\x72\x24\xa9\x6b\x98\x20\x98\x3b\xc1\x66\x59\xec\xe3\x0a\xa8\x4f\xf8\x39\x21\x36\xaf\xc5\x0b\xb3\xb2\x2f\xb7\x45\xf2\x59\x21\x2f\xfc\x33\x25\x23\xb3\x81\xcf\x88\x96\x3c\x58\x56\xd8\x56\x70\xdf\xe1\x3f\xfe\xc3\x35\xa2\x9e\x52\x74\x03\x56\xdd\x56\x7b\xb0\xd1\x77\xab\xed\xd2\x99\xf7\x60\x2b\xc7\x6b\xc2\x74\x51\xd9\x5c\x54\x7e\xfd\x21\xbb\xf2\x9b\x2e\xdd\x39\x53\x2a\x75\x37\xa8\x59\x25\xda\xe3\x69\x77\x5f\x92\x73\x1d\x33\xbb\x51\x49\xaf\xae\xca\xe3\xb4\x8a\xf2\x2e\x60\xd3\xe2\xe9\x4b\x70\x2f\x83\xa8\x5c\x74\xc7\x9d\x28\x1e\x85\xc8\xd8\x6b\xfa\x78\x7f\x78\xc5\x94\x79\x99\xca\x82\x2b\xf8\xf3\x59\xc3\xa6\x2a\xed\x00\xf2\xc2\xfc\xe9\x0f\x3f\xac\x28\xff\x35\xad\x79\xda\xe8\x44\x65\x7d\x16\xc9\xac\xe0\x89\x5d\xa4\x27\x99\x79\x08\xdd\x19\x5d\x98\x15\x67\x5f\x7e\xbe\xd1\xa7\x65\x22\xb2\xab\x63\xdb\xc7\x6c\x13\x2f\x15\xf0\x22\xfe\xe7\x99\x5e\x0d\x35\x88\xa8\xee\x90\x11\x52\xd9\xf5\xfb\x8f\x4c\x64\x91\x8c\x45\xcc\xde\x5e\xb1\x3b\x3a\x56\xd3\x52\x69\x9b\x79\x21\xdd\x7a\x5d\x84\x8f\x72\xee\x53\xab\x44\xfa\xf6\xb4\xc9\xca\x24\x25\x99\x65\x9e\x07\x0c\xec\x88\x65\x45\x4e\xf9\x38\xa4\x2c\x94\xfb\xe2\x7a\x0e\xb5\xa9\x15\x72\x73\xab\xf9\x1e\x1d\x7c\xa9\xbb\xa7\x42\xe8\x1e\x6e\x35\xdc\x86\x17\xb4\x47\xec\xfb\x55\x64\xf6\x40\x80\x6e\xe8\xdd\xef\x13\x32\x78\xe5\x05\x64\xce\x7e\x9b\xe5\xe9\x6f\xbe\xcf\xf9\x17\x72\xc1\x2c\x61\xb7\xa7\x68\x06\xb3\x21\x52\x7f\x2f\x6b\x6a\xec\x74\x67\x37\x10\x6a\x5f\xd0\xae\x0a\x67\x4a\x94\xb7\xa2\xeb\x5d\xcb\xbc\x60\xff\xe7\xff\xfc\xa1\xda\xee\x66\xc6\x4e\x94\x9e\xc4\xb3\x81\x09\x73\x79\x4c\x94\xb0\x7f\xe5\x99\x59\x1f\x77\xf0\x5d\x56\x8d\x65\xf8\x3e\x38\x9b\xe5\x69\x43\x0b\x53\x9b\x8c\x93\x07\xe1\x42\x94\xa2\xca\xde\x42\xbf\x22\x4d\x32\x3d\x99\x18\x50\xfa\xd7\xcf\x3f\xeb\x26\x9f\xb0\x17\xbf\x99\xad\x52\x6f\x2e\x2f\xef\xa5\x2a\xde\x4c\x65\x5e\x5c\x92\xb2\xff\x72\xc8\xde\x7f\xe3\x51\x91\x3e\x31\x4b\x97\xcc\x9d\x64\xf8\x4d\x9a\x3f\x85\x36\x13\xbf\xe9\xcb\xfd\xe6\x9a\xd7\x24\xc9\x19\x19\x37\x86\xfb\xaf\xee\xbe\x50\xf5\xeb\xfc\xe8\x13\x0c\x94\x37\xb2\x9b\xe8\x6d\x0a\x7c\x32\x44\xfa\x06\x36\x5a\xe8\xce\x90\xc4\xf4\x41\xc4\xec\x21\xe1\x4c\x7c\xb3\xf2\xc5\xbb\x4f\x37\xf4\xde\x72\x12\x74\x6d\xc5\x5e\x98\x05\xff\x6f\xda\x13\xbe\xf0\x7f\xff\xcd\x39\x3d\xf6\x5a\x2c\xc9\x2e\x9c\x7f\xa4\x2f\xc4\x6d\x38\xcc\xa3\xe3\x08\x9c\xa5\xfc\x49\x18\x60\x9f\xc8\x94\x9a\xfd\xe5\xd0\xbd\x3a\xe5\x0a\x48\x15\xcd\x53\x3c\x63\x1f\xae\x19\x8f\x63\xbd\x64\x30\xdd\x2b\x15\xdc\xe4\x37\xb0\x31\x9c\x66\x3f\xfa\x6f\xfa\xf3\xa5\xe6\x02\xba\xa5\x5f\xff\xf0\xc7\xe1\xab\xe1\xab\xe1\xeb\xdf\xcc\xe6\x4a\x7b\x6d\xdd\xbb\x13\xf5\xf5\x89\xe9\x65\x9d\x52\xd4\x93\x0b\x6d\xac\xc6\xb9\xa0\x84\x14\xb9\x28\xd7\xb3\xe5\xa8\x22\x47\x2a\x4d\xa9\xe9\x94\x35\x2b\xfa\x1c\x9e\x05\x03\xdf\xfa\xe3\x26\x0c\x4b\x04\xf1\xa6\x01\x7f\x0b\x07\xea\xcd\x8c\x4a\x21\xa8\x82\x0e\xeb\x3b\xa7\xc9\x57\xed\x16\x9a\x29\x3a\x93\xd9\x85\xee\x55\xda\x27\x19\xb0\x64\x28\x86\x03\xea\x0e\x82\x2b\x3a\x85\x76\x8f\xce\xa6\xc6\x03\xcd\xc4\xa3\xeb\x05\x65\x3e\x04\xea\xa0\xbe\xab\xdd\x9a\x1d\x7d\x7a\x2d\xa7\xbb\x88\xee\xc9\xf6\xd0\x38\xc9\xdc\x02\xdc\x2d\x75\x6c\xae\x9a\x2b\x13\x93\x42\xc3\xd6\x04\xaa\x18\x40\x93\x8c\xfc\x7e\x7a\xeb\xac\x50\x4a\x02\xa3\xc1\x4c\x45\x4e\x03\x54\xfb\x52\xf4\x70\x7f\xfd\xfc\xf3\x90\xfd\x3f\x72\x46\xe7\xfa\x1c\x18\x76\x93\xa4\x9e\x7a\xa9\x1d\xf3\xbb\xa4\xc8\x79\xee\x2f\x53\xe5\x95\x03\xb2\x74\x9e\x39\xf0\xd2\x01\xa7\x6c\x0d\xa3\xc4\xbe\xf8\x55\x51\xe8\xc5\x92\xbd\x80\xbe\x19\xd7\xff\x3f\xd7\x9d\xe2\x8e\xab\x24\xd2\x7e\xcc\x3d\x81\x2b\x76\x7b\xa6\x8f\xbc\xd1\x4f\xf0\x28\xf3\xf8\xff\x6f\xc8\x14\x91\x09\x17\x3e\xf7\x53\xce\xc7\x94\x42\x8f\xbd\xb8\x3d\xfb\xdd\x70\x38\xbc\x3d\x33\xc9\xae\xe6\x93\x64\xdd\x9e\xfd\xff\xdc\xf1\x5c\x84\x57\x19\x30\x41\x26\xb9\x43\xa0\xce\x74\xaa\xf4\x1a\xec\xad\xcc\x8a\x5c\xa6\xa9\xc8\x3f\x8b\x87\xa4\x59\xee\x9c\x3f\xa7\x74\x35\xa9\x41\x93\xc9\x64\x66\x1c\x5a\x97\xdd\x41\xdb\x22\xb3\x54\x31\x32\x8f\xcb\x2c\xc4\x73\x9f\xd4\x88\x3e\x9a\x6e\x69\x25\xf2\x84\xa7\xc9\x3f\x29\xd9\x42\x16\xeb\x85\x5e\xf0\x97\x30\xa7\x86\xc9\xe4\x62\x9c\x01\x1b\xb0\xe6\x55\x50\xba\xdb\x90\xfd\x62\xfc\xdb\x86\x47\xd6\x8e\xf8\x9d\xf6\x7f\xd4\x2c\x8a\x84\x52\x86\x30\xfa\x9c\x19\x89\xc9\x18\x51\x17\xd3\xbe\x54\x00\x77\xe0\x84\x05\x28\x5e\x8e\xc2\x6c\x2d\x2e\x99\x85\xe9\x1d\x34\x32\x67\x85\xf3\x01\xde\xf1\x82\xbb\xac\x59\xf3\xcf\x48\x7a\xe0\x80\xdd\xbb\x85\xe5\x9d\x70\xd9\x3b\x86\xec\x93\xb3\x42\x03\x97\x84\x2c\x29\x14\xf5\xba\xbb\x27\x76\x27\xad\xbb\xf3\x8e\x8b\x89\xcc\x6e\x84\x89\x68\xba\xd1\xf7\x1d\xcd\x52\xfd\xbf\x23\x7f\x37\xb3\x2a\x33\x6f\x68\xb6\x7c\xcb\x34\xbd\xe3\xd1\xd7\x41\x45\xae\x4c\x74\x73\xe9\x6f\x57\xae\x73\xfd\x10\x0c\x00\x3e\xb1\x52\xb3\x71\xbc\x22\x72\xbb\xad\xe9\x49\xe6\xd6\x13\xb9\x20\x7b\xaa\x06\x4d\x49\x6b\x74\xbb\xc7\x14\x86\xaa\x0d\x60\x62\x56\x55\x77\x49\x9a\x14\x4f\x2e\xbe\x7e\x9a\x27\x13\x9e\x27\xe9\x13\x3d\xbf\xff\xf0\xb6\x09\x82\xf7\x5b\xa6\x45\xe5\xae\xa7\x43\xf4\xef\x59\xf4\x6f\xd6\x7e\xa9\xd3\x27\x8e\x41\x9b\xa1\x2d\xe6\x3a\x8c\x0b\x77\xa4\x71\xbc\x2a\x57\xca\x67\x99\x5e\xf4\x0c\x3f\xf3\xc7\xf7\xdf\x0a\x41\x5b\x2b\x10\x57\xb6\x9b\xb8\xb2\x73\xb5\x35\x3d\xdf\x3f\x43\x7f\x81\x65\x79\xeb\x34\x57\x4e\x6e\x59\x4c\x8b\x32\xb7\xc5\xc4\xfe\x39\xec\xa0\x65\x07\x30\xd0\xe4\x9d\x0d\x7f\x5b\xb8\x60\xfe\xf7\xff\xb3\x7a\x3c\xc1\x74\xaa\xca\xb8\x81\x86\xc9\xba\x1a\x27\x30\x1f\x22\xd0\x3a\xcd\x37\x87\x5e\x35\x9f\xe7\x16\x86\x76\x20\xd8\x19\xd8\x65\x40\x33\x22\x7b\xc3\x8c\x3b\x0f\xee\x10\x80\xb5\xf7\x00\x2c\x4a\x2e\xe2\xac\x71\xfb\xc7\x53\x9b\xd0\xd6\x76\xdf\x12\xf1\x55\x5b\xb2\xc9\x07\x68\x77\xd7\x0f\xa2\x5a\x62\xf4\x1a\x02\xa4\x5a\x0d\x9f\x77\x88\x9b\xdc\x12\xe7\x2b\x97\x3d\xa7\x65\x27\x01\x8b\xe9\x5c\xa6\x04\xf6\x02\x60\x2f\xc0\x31\xda\x87\xa3\xf6\xd9\xd4\x54\x44\xcd\x41\x45\xb1\x50\x94\x05\xfb\x4e\xdc\xf3\x87\x44\xe6\x7e\xe0\x04\x03\xb6\xe7\xf7\xd3\x0f\x73\xc1\xb3\xf8\x42\x3b\x82\xb3\x0e\x71\xa6\xf3\xb6\xe8\x46\xbf\x8f\x7e\x2f\x73\x85\xc6\x37\xb3\xb9\xf7\x98\x39\xa7\xf1\xbd\xbe\x98\x3f\x14\xdc\x2d\xcb\xe5\x8c\x66\x73\x5a\xd8\xdf\x3d\x19\xa4\xfa\x98\x64\xb1\x7c\xa4\xdf\xeb\x05\x12\xbb\x96\x53\x9b\x6d\xd2\xa5\x69\x26\xa1\x61\xc8\x3e\x0b\x1e\x5f\xc8\x2c\x7d\x3a\xc4\x06\x33\xbf\xdc\x6c\x22\x29\xa7\x82\x55\xe7\x8e\xb7\x32\x8b\x93\xe6\x2d\x6a\xf3\xe7\xd4\xb6\xa5\x99\xe5\x02\x4d\x22\x01\x9c\xa1\x64\xa7\x22\x27\x90\x45\x86\x66\x99\x93\x4c\xc7\x7c\x8f\x99\x73\x96\x53\xae\x8a\x2f\x39\xcf\x14\x3d\xc2\x97\xa4\x29\x08\xef\x67\xae\x8a\x32\x19\x69\xe4\x9f\xb7\xf0\xbf\x73\xf1\x03\x32\x13\xae\xdf\x51\x85\x0e\xe9\x98\xe2\xfa\x03\x9a\x1e\x89\x2c\x94\x52\x7c\xdc\xf0\x74\x57\xec\x7e\x36\xe1\x19\xcb\x05\x8f\x09\x25\xda\x33\xdd\x6a\x4c\xdb\xf7\x58\x14\x3c\x49\x5d\x98\x06\xa9\xaa\xfe\xd9\x1b\x55\xdd\x5c\x70\xd5\xf4\xd5\xbe\xd0\xba\x4e\x1f\xf3\x09\x21\x7d\x7b\x9c\x2b\x93\xe4\x7c\xc9\xa5\xdb\xc6\xee\x4d\x30\x5e\x83\xab\x0e\x9c\x42\xf3\x25\xd7\x53\xee\x4f\x3c\x55\x62\xb0\x58\x91\x7e\x6a\xda\x17\xfd\xe5\xc9\x6c\xd7\x2d\xfb\x92\xbf\x45\x77\xe8\xeb\x7f\xdc\xbc\x08\xac\x1c\x36\x73\x6e\xa4\x1d\xb0\xc8\xf9\x20\xa5\x11\xc2\xe2\xee\xa0\x16\x77\x57\x7e\x45\xd7\xfc\x89\xd6\x5e\xca\x95\xb6\x13\x2b\xb8\xa3\xde\x21\x73\x48\x2b\xbb\xaa\x19\x5a\x75\x52\xbe\x69\x74\x0a\x2b\x87\x3d\x74\x36\xd2\x77\xd4\x79\x41\x17\x5a\x30\x55\x96\x4a\x28\xc4\x64\xaa\xed\xc3\xbc\x3d\x9b\x24\x99\xf6\x9f\x9e\xda\xe3\x87\xee\x05\x9b\x24\x59\xad\x3a\x82\x0d\xb5\xa1\x49\xc8\x68\xba\xa4\xaf\x96\xba\x54\x60\xe7\xa7\x32\x0e\xe2\xe3\xf5\x34\xf9\x54\xe6\x85\xcf\x9e\x4c\x65\x01\xe5\xe0\x9c\xc8\x59\x94\x73\x75\x9f\x64\x63\xa3\x67\x9a\x14\xea\x77\xc2\xe4\x62\x37\x1b\x64\x82\x34\xf8\x61\x9c\xd4\x2b\xf6\x42\xdf\xcc\x05\x55\x34\xfd\x80\x71\xc5\x94\x94\x99\xfe\x6f\x62\xb3\x1f\xf1\xf8\xe9\x65\xa7\xa0\xa1\x12\xc2\xfe\xa7\x49\x82\xfd\x33\x65\x38\x6f\xde\x35\xe0\xdb\x4a\xa6\xb1\x4b\x9a\x6d\xab\x34\x90\x0a\x28\x8d\xf6\xe9\x45\xac\x32\x1f\x3d\x37\x9e\x95\x09\x68\x88\x13\xa5\x0d\xd0\x2c\x51\xf7\x3e\x10\x4a\x7c\x9b\xa6\x49\x94\x14\xa6\x08\x83\xab\x53\x52\xc6\x49\x54\x1a\xe5\xf5\xab\x8e\xef\xa6\x5a\x83\xff\xaf\x6c\xfc\xad\x11\x74\xe5\x83\xc8\x29\x83\x4c\x59\x41\x66\xc2\x33\x3e\x2e\x3d\xf3\xca\x1a\x66\xa6\x6c\x14\x6a\x25\xdc\xd4\x7c\x1e\xc3\x47\x62\x12\xca\x26\xe5\x89\xa4\x7d\xcb\x98\xb9\x6e\x4b\x9e\x8d\x09\xd3\x6f\x30\x2a\x1b\x87\x1c\xff\x8e\xfe\x7b\xe1\xa3\x8b\xfb\x8d\x0d\xf6\x63\x6f\xbe\x59\xb3\x4a\x06\xfe\xaa\xfb\x4d\xef\x4f\x11\x21\xae\x37\x9b\x81\x65\x94\xdd\x72\x74\xd1\x61\x73\x8c\x89\x20\xa6\x26\x92\xd3\x27\xef\x69\xe8\x8b\xc9\xcc\xc4\x3f\xb3\x4c\xc6\x36\x2c\x24\xdc\x63\x11\xb4\x35\x9d\xe0\x43\xd7\x5f\xe8\xc5\x69\xe5\xb7\xc9\x88\x65\xb2\x76\x56\x58\xf2\xe2\xe5\xca\x9f\x49\x7f\x9d\x54\xf2\x58\x5d\x06\x6a\xe8\x65\x2e\x7c\xf2\xe5\xf2\xcf\xbf\x9b\xca\xf8\xc2\xb7\xe9\xf2\x25\x59\x24\x73\xa1\xbf\xcb\xb5\x8c\xbf\xd8\x5f\xb9\x55\xac\x99\x56\x6f\xfc\x86\xf5\x86\xef\x63\xc5\x66\xb7\xa9\xdd\x8c\xdf\x69\xca\x23\x61\xaa\xbd\x68\xd7\xa0\x62\xe9\x6c\x94\x68\x26\x1e\x4d\x92\xa5\x75\x16\x8d\x7f\xad\x3e\xd7\x52\x67\xf8\xa6\xc5\xa3\xaf\x9d\x30\x47\x0b\xe7\x16\xea\xab\xcc\x2e\xf6\xd7\x9f\xc8\xcc\xdd\x44\xf7\x22\x9e\xa5\xb4\xbd\xcc\x18\xbe\x8f\x89\x52\xc1\x1f\x2d\xee\x68\x3b\x9b\xa6\xa0\xf9\xc9\x49\x3b\xef\x64\x6e\xdf\xca\x59\xd6\x28\xfa\xd8\xca\x34\xf7\x5c\xdd\x33\x7f\xb6\xf2\x6b\x23\xdf\x02\xf5\x51\x53\xf6\x27\x36\x53\x2e\x93\x97\x89\x03\xe3\x6e\xd9\x60\xb4\x20\xfe\x20\x93\x98\x67\x91\x5e\xd7\x45\xf7\x3c\x4b\xd4\xc4\x54\x46\x49\x5c\x39\xb2\x42\xba\xf1\xe7\xb7\x60\xb9\xfb\x67\xe2\x51\xfb\xe4\xf3\x24\xb8\xa3\x49\xf6\x4b\xa4\xc6\xec\x64\x95\xaf\x69\xdd\xff\x72\xa2\x93\x77\x4a\xe4\x0f\x6e\xa7\x41\x65\x19\x7f\xae\x2a\x1f\x5f\xf4\xea\x68\x97\xcc\x61\x79\x1a\x09\x0b\x07\x3a\xa5\x91\x18\xb4\x75\xb9\x25\xd3\xaf\xb6\x53\xc1\x54\xe5\xc2\x02\x7d\x49\x87\xd7\xae\xd3\x6b\x23\x49\xa9\x77\x72\x61\x36\xb2\xda\x58\x58\xb7\x8f\xa8\x3c\xad\x27\xfb\x66\x2e\xa8\x44\x71\xd9\xad\x37\xb4\x0c\xa2\xc6\xf7\x2f\x64\xc1\xd3\xe6\x56\x08\x7c\x31\xdb\x16\xd5\xb7\x63\x2f\xcc\xd6\x59\x7d\xc4\xfc\x2c\x92\x79\x2e\x68\x66\x69\xfe\x45\x5f\x06\x7f\xd5\x06\x31\xaf\x77\xe5\xba\xfc\x0a\x3d\x61\x69\x1b\xe8\x8e\x40\xb5\x43\x88\x7e\xd8\x1d\x49\x96\x8d\x04\xa7\xf9\xde\x94\x85\x3e\xe6\x0b\xe3\xe4\x52\x72\x43\xd7\xcd\xf4\xec\x38\xac\x79\xdb\x2f\x57\x79\xcd\x8a\x45\x5d\xaf\xcf\x57\x1f\xde\xe4\x0f\x74\x81\x78\x07\xd9\xe3\xc3\xd9\x61\xbf\x1f\x97\xbe\x68\x47\xab\x6d\x1e\xea\xaf\x19\xdf\x6a\xc7\x0c\xf7\xe5\xef\xba\x47\x9a\xb9\x45\xc4\x7f\xa1\x12\xa2\xcd\x80\x99\x16\x8e\x92\x4a\x46\x45\x7a\xa6\x19\xfb\x73\x99\xfb\xf9\xfc\x7a\x21\x98\x98\x3b\x45\xa5\x38\x27\x6e\x63\xa3\x18\x0e\x13\x5f\x47\xcb\xb7\xea\x3a\x3b\x4a\x96\x78\x75\xed\xde\x5a\xf5\x44\x0f\xa6\x66\x51\xe1\xb7\x67\xd8\x56\xa2\xc6\xab\xbb\xa8\xa6\x48\x61\xe9\xf9\x2c\x95\x7d\x75\x73\x27\xd9\xd8\xdc\xb6\xc1\xcf\x30\x87\xdd\x7d\x8c\xc6\x6c\xa2\x7a\xd5\x90\x5d\xdb\x10\x67\xda\x71\x9b\x8c\x98\xbe\x15\xfb\x0f\x76\xeb\x7e\x66\xae\x6a\xd2\x2f\x76\x75\x25\x2a\x3f\x0d\x00\xde\x32\xb4\x1c\x74\x23\xf3\xb0\xc4\xd0\x4c\x5c\x77\xed\x71\xcc\xd6\xdd\x5f\xb2\x77\x14\xa5\x7a\x7b\x56\xc9\x17\x59\x39\x77\x05\x38\x2d\xa6\xa9\x7c\xa2\xa2\x64\xf3\x1f\xd7\x1f\x63\x22\xd3\x23\x52\xb1\x58\x44\x29\xd7\x03\xe2\xc1\x7d\x43\xe3\xb7\x5e\xeb\x45\x84\xc9\xd3\x4c\xcb\x9f\x9b\x16\x58\x0d\x2e\x0d\xed\xfe\x58\xc8\x70\x2d\x8f\x5f\x9f\xf9\xf6\x9a\x25\xf6\x9b\x3a\x38\x2d\x5a\x35\x77\xc1\xca\xc1\xb9\xd2\x72\xdd\xff\x6a\x99\x2a\xfe\xb1\x9c\x05\xd3\xa7\x72\xf2\x53\x15\xc1\x6d\xe3\x87\xe8\x45\x69\x2e\x4d\x58\x57\xaa\xed\x7f\xb1\x48\x6b\x9e\x3f\xa9\x5d\x6c\x8e\x4b\x53\xf9\x7c\xd5\x66\xfd\xa0\x66\xfe\x69\x7e\xc8\x2f\xae\xa2\xb5\x7d\xd0\x44\x05\x4f\xfa\xc8\x95\x37\x0c\xd0\xbe\x0f\x48\xfb\x0e\xba\xf6\x3a\xe2\xb7\xff\x75\x8b\xfa\x5d\x39\x5e\xcd\x34\x59\x1e\x83\xf0\x7d\x50\xc2\x77\x63\x54\x73\xf3\xd7\x5a\x1f\xcd\x95\x56\x1d\x22\xf8\x6e\x45\xf0\x83\x50\xab\xab\x76\x63\xe5\x89\xbd\x45\xaf\xae\x1c\x6f\x15\xac\xbb\xfb\x5d\xdb\x97\xb2\x3f\xae\x21\x63\x1f\x85\x78\xdd\x0d\xda\x4c\xf9\x4c\x35\x91\x91\x0f\xc1\xae\x21\x5b\xf9\x3b\x98\xa8\x12\xc5\xcc\x0f\x83\x6f\xe4\xea\xfb\x7e\xa7\x4f\x30\xce\x85\x52\xef\x04\x8f\xd3\x24\x13\x8b\xe3\x08\xf8\x37\xfa\x00\xe4\xb4\x24\x59\xa5\xf9\x2b\x8e\x9f\xdb\x15\xee\xae\xce\xee\x4c\x76\x16\xf3\xd2\x41\xd3\x98\xc6\x1d\xf1\x24\x75\xca\x68\x75\x8e\x75\x22\x8f\x51\x49\x5d\x15\x7b\x4a\x77\x24\x23\x7d\x61\xf3\xd3\xe0\x57\x66\xed\xcd\x43\x77\xca\xd4\xdc\xbe\xae\xbd\xe9\xfb\x6f\x91\x10\x31\x6d\x07\x24\x9f\xc4\x97\x23\x98\xe5\x23\x2a\x85\x61\x13\x0f\x04\x0f\x64\xdc\x8f\x60\x4b\x6c\xf9\x82\xf4\x6b\x6b\xe9\x84\x2a\x92\x49\x58\xc9\xdd\xa5\x61\xa9\x36\x52\xf9\x65\x2a\xfd\xe8\xdf\x5f\xbd\xea\x96\x02\x45\x0f\x31\x22\x0c\x0d\x5f\xeb\x93\x1f\x22\x6e\xf0\x9a\x92\x31\x5b\x0a\x51\xd8\x72\xf4\x45\x40\x52\x8e\x34\x02\xe3\xe7\x4a\xfe\x33\x1a\x30\xe6\x83\xbc\x77\x2a\x74\xf8\x8e\x26\xb5\x1d\xa9\xd1\x24\x66\xd1\xcf\x1c\x6e\x4d\x94\xef\xaa\xb4\x45\x5d\x7b\x6b\x3e\xe7\xbc\x3b\xa3\xec\x66\xdd\x63\x33\xfa\x0d\x9b\x50\xad\xa0\xf4\x4b\x7d\x50\x95\xda\x3c\x25\x4e\x68\x90\xe8\xab\xc2\xbc\x7e\xe5\xe1\x52\xd9\xd1\xf4\x92\xff\x16\x4f\x2b\x05\x7e\x07\xeb\x71\x27\xdf\x2f\x0a\x01\x71\x21\x09\xf3\xc1\x1f\xaa\x39\xfa\x63\x93\x88\x87\xa5\xeb\x8a\xd6\x40\x82\xda\x19\x6e\xb6\x9f\xac\x0e\x36\x96\x50\x4c\x37\xd3\x7d\x6e\xb5\x4c\x5f\x6a\x0c\xbf\x9c\x1c\xa9\xd1\x9a\x84\x8e\xba\xc6\xc1\x0a\x9e\x8f\x45\x4b\x77\xef\x2a\xcc\x6f\x1a\x99\x10\x0c\xb0\x2f\x95\xff\xbd\xe3\xd8\x84\xd2\x6e\xec\x25\x26\xa1\x6c\xf9\xad\x04\x25\x34\xd0\xa9\xbe\xa3\x12\xba\x6a\x61\x8b\xf4\xaf\xa6\x8f\xdf\x51\xff\xa2\xfe\xde\x7d\xb8\x98\xe1\x61\xec\xcb\xc6\xa3\xa0\xdd\x7f\xa8\xdf\x36\x93\xd9\x45\x21\xf2\x49\x92\x39\xaf\x7a\xe1\xfd\xd9\x0b\x93\x24\xc5\xcc\x2c\x61\xd5\x2f\x3b\x43\x74\x8d\xd7\x9c\x65\x6b\x98\x94\xe0\x47\xcb\x5b\xca\xfb\x0c\x45\x83\xc0\x58\x8d\x92\x54\x45\x62\xb3\xad\x90\x47\xe5\x06\x62\xd5\xef\x25\x6d\xf7\xf5\xab\x57\xbf\x0f\x86\x4d\xc4\xa7\x3c\xa2\x84\x22\x5f\x4c\x3e\xc1\x27\x9b\x2e\x47\xcf\x0c\xd5\x7b\x38\x0d\xd3\x95\x06\x7c\x12\x95\xf1\x17\x06\x6e\x9a\xc7\xb1\x5a\x72\x61\x52\xcc\x04\xd3\x4c\x97\xd6\x35\x4b\xf2\xee\x2d\xbb\x6a\x37\xa0\xe7\xa4\x27\x0c\xd7\x91\x6e\x3a\x35\x0a\xf6\x26\xda\xec\xfc\x6c\xbd\x70\xee\xb3\x8e\x46\x39\x57\xdb\xbc\xeb\x1d\xfd\x8d\x1d\xca\xb0\xf3\x4f\xfd\xc5\x08\xb3\x73\xda\xe6\x7a\xa2\x6c\x40\x94\xba\x43\xcf\x50\x8e\x15\xa6\xa7\x39\x25\xb6\xae\x16\xf7\x20\xc7\x96\x13\x5b\xe3\x3c\x65\x8f\xd9\xb2\x93\x6e\x04\x05\x85\x0d\x2a\xa3\x98\x39\x53\x57\x8f\x21\xe3\xd9\x13\xe5\xc7\xcb\xcc\x2e\x45\xe8\xb4\xd0\x69\x8f\x0f\x5e\xda\xf4\x96\x3f\x9b\xd9\x96\xfc\xb2\x60\x84\xe8\x1e\x4f\xc9\xb5\x07\x26\x9d\xad\xfe\xdf\xb1\x19\x9e\x9e\xc0\xd0\xdc\x4c\x09\xb5\x4c\x9f\xbd\x96\xf1\x0b\xed\x68\x3b\xa0\x14\x5c\xce\xec\x15\xd0\xcd\x7c\x7a\x3b\xbb\x09\x85\x86\x63\x77\x25\x1e\x1a\xb8\xe2\x07\xb3\x93\xb9\x7c\xa6\x65\x2a\xf7\x1a\x4b\xc3\xf0\x85\x4f\x7e\x4f\x78\xd0\x92\x7d\x48\xf5\xc1\xf4\xd6\x91\xe8\x97\xbf\x58\x20\xd5\x37\x9c\xd4\x2e\xd5\xdb\x49\x91\x22\xae\xf6\xa2\xd5\xd7\x65\x70\xec\x0e\x3f\x72\x85\x3c\xec\x51\x6b\x48\xe4\x65\xef\x6d\x96\xc8\xab\xc7\x9b\x76\x88\x2f\x09\xba\x83\x50\xbe\xef\xfa\x8b\xe1\x07\xda\xe2\x36\xb3\x1e\xe0\x53\x60\xa1\x21\xbb\x1f\xf5\xde\xf3\xfd\x57\x67\x6c\x99\xfa\x57\x11\xf4\x6b\x9e\xdc\x02\xdb\xb8\x64\x07\x7a\x23\x31\x5e\x2c\xdb\x43\xab\x5f\x51\xab\x6f\x27\xab\x0e\xb6\xf9\x92\x6f\x73\x4a\xad\xfb\xed\x46\x72\x66\x50\xd2\xa1\xae\xd5\x6e\xd1\xea\x5e\xfe\xee\xf1\x9e\x17\x17\x89\xba\xe0\x17\x4b\xcc\xf2\x7a\x3a\xea\x4d\xb0\x5f\x99\x2f\xda\xd5\x6e\xfb\x51\x49\x9e\x9d\x67\x12\xc9\x59\x56\x0c\xcd\x5a\x99\x7d\x15\x4f\x26\x5e\xc0\xd6\xc3\x31\xbb\xaa\x3b\xec\x78\xf7\xb0\x33\x70\x78\x9e\xe9\x2e\x78\x2f\x81\xda\x0e\xbd\xfa\x96\x78\x2a\x9c\x91\xa9\xd9\x68\x94\x44\x34\xa5\x55\x60\x5d\x2c\x0a\xd2\xb6\x8f\x62\x53\xfa\x52\xbf\xb6\x4d\xa2\xad\x9f\xd1\x65\xb3\x77\x77\x43\xee\xcd\xd1\xbc\xb7\xdb\x41\x5e\xa9\x58\xa9\xd2\x40\xfa\xaf\xd4\x49\xb3\xf5\x45\x5c\xc2\x11\xb3\x0f\xc5\x32\xb8\xff\x36\x24\xcb\xa6\x55\x7a\xdf\x92\x25\x55\x10\xa0\x21\xba\x50\xbc\xa9\x7c\xb7\xd2\x34\x92\x1e\x13\x2a\x73\xce\x47\x4d\x3d\x3f\xac\x9b\x2e\xf7\x37\xf7\xc9\x3b\x7f\xba\x2e\xe2\xea\x2f\x73\xe7\xb0\x5c\x8c\x52\x57\xd8\xab\x22\xbc\x8e\x16\xc1\xa9\x15\xa4\xf0\x6e\xda\x6b\xa5\x01\x4d\x27\xf7\x9d\x7e\x83\xfe\xdc\xdd\x39\xa8\xbf\xa8\x79\xcf\xf0\x99\x9c\xab\x70\xe0\x73\x7a\x9b\x5d\x6c\xde\x29\xd8\xcc\x65\x6b\xfb\x26\x9b\x28\x6c\xb0\x83\x30\xaf\xe8\x6d\xcb\x85\x9d\x09\xff\xb6\x74\xc7\xaf\x8b\x7f\x2c\x3f\x40\x2d\x77\x88\xa9\x13\x62\x44\xb2\x50\x85\x0e\xe2\x00\xdd\xce\xc6\x5f\x69\x9d\x68\xcf\xe5\x19\xe3\x77\x4a\xa6\xb3\xc2\xf7\xb8\x17\xe2\xdb\x1b\xf6\x6f\x2f\x19\x85\x56\x4e\x45\xae\xfb\x00\x1f\x9b\x91\x58\x53\x65\x6b\x0f\x61\x91\xbd\x2a\x78\x5e\xb8\x11\x63\x55\x47\xba\xe8\xeb\x57\xbf\x7f\x39\x64\x57\xb5\xfb\x25\x8a\x45\x3c\x8d\x2c\x8e\x35\xb5\x20\xcb\xbb\xde\x3d\xb1\x5c\xce\xb2\xd8\xb4\xa8\xf5\x4c\xcb\x32\x90\xaf\x4a\xc1\xcf\xac\x7f\x13\xa5\x1d\xcd\xf7\xa6\x94\xcd\x1b\x13\xd4\x52\x58\x6f\x96\x8a\xab\x4a\xf6\x87\x57\xbf\x1f\xe8\x67\xa5\x3e\xfe\x87\x57\xbf\x77\x8f\xba\x59\xe6\x83\xa1\x18\xba\x30\xcd\xe6\x74\x0b\x2f\xa9\xcd\x9d\x26\x9d\x58\x9f\x51\x15\x72\x3a\xb5\x9a\x3e\xf7\x69\x63\xe6\xf5\x41\x8a\xf5\xf1\x3b\x76\x79\x5e\x28\x62\xdb\xfa\xd7\x56\x50\xac\xbe\x8e\x54\x62\xee\xf3\x98\x02\x86\x19\xbb\xd3\x7d\x42\xb1\xd9\x94\x44\xe6\xda\x59\xbe\xce\x0c\x29\xd3\xb6\xbc\x8c\x0d\xfb\x29\x23\x03\x7d\x0f\xa3\x1a\x29\x74\x55\x0a\x8c\x15\xb1\x62\x32\x2b\xa4\xa9\x41\x56\xbb\xf6\x80\x15\xf7\x33\x65\x84\x53\xd3\x86\x54\x35\xc6\x4e\xdc\x7f\x34\x8f\x2e\xf3\x64\x9c\x64\x0b\xbb\x59\x78\x7f\x6a\xaa\x34\xa5\x46\x52\x0d\xdd\x7d\x55\x67\x74\x56\x24\xe9\x30\xc9\x0a\x55\xe4\xc3\x0f\x59\xf1\x4b\x7e\xb3\x04\x1c\xb6\xa8\xdb\x6b\x5b\x92\x35\xcc\xc7\xcd\x2c\x6f\x22\xc8\xcd\x86\x63\xce\x5c\xf8\xdc\x10\x8c\xdf\xc9\x5a\xc0\x44\xf5\x67\x1b\xd9\x8e\x30\x1c\x38\x34\x07\x6e\x40\xbb\x18\xe6\x57\xda\x29\xff\x58\xb1\x89\x7a\xec\xbe\xda\xd4\x70\x84\x4b\xd1\x1f\xfe\xed\xf7\x5d\x6c\x84\xeb\xf5\x81\x06\xe9\xdb\x8c\xeb\x06\x9b\x4d\x59\x32\x99\x88\x38\xe1\x54\x71\xd6\x5e\x48\xd4\xbe\xa1\x1d\xaf\x03\xa6\x66\xb4\x38\xb3\x66\xb2\x6e\x6e\x64\x6a\x72\x34\xf8\x71\x16\x4b\x53\x92\x8c\xc2\xc5\xd9\x6b\x3b\xb4\xab\x61\xd5\x34\x3a\xf5\x2f\xe9\x17\x64\x5c\x28\x1c\xe7\x6b\xa2\x17\x8b\x83\xa5\x8f\x3f\x9a\xe5\x7a\xa0\x0e\x6a\x83\xb2\x31\x1c\xa9\x16\xbc\x40\xca\xc9\xdc\x80\xa3\xf5\xb1\x35\x46\x8d\x8f\xdc\xdb\x80\x1c\xac\x39\x73\xee\x70\xbe\x6c\xeb\xf3\xeb\xf7\xe4\x58\x3e\x66\xed\x63\x86\x0c\x81\x1d\x2d\x6b\xf6\xf7\x6a\xd4\x7b\xad\xc3\xe8\xbb\xeb\xb3\xff\x38\xff\x5d\x57\x18\x08\xb6\xd7\x56\xe6\x13\xf2\x71\x07\x1d\xee\xee\x3b\xac\xa9\x8a\x6e\x80\x88\x3e\xc1\xdc\xa6\x61\xcc\xce\xf5\xed\xb6\x70\xbb\xae\x73\x8a\xed\xe2\x95\x59\x6b\x3b\x5d\xbc\xcb\x9c\x13\x54\x3c\x6b\x8f\x45\x5b\xf6\x0b\xfd\x4a\x65\x8a\x10\x62\xdc\x91\x7e\x53\x5f\x82\x8f\xfc\x93\x65\x57\xf9\xf2\x34\xed\x30\x61\x4d\x79\x5e\xb4\x68\xc8\xd7\xee\x50\xad\x20\x91\xcc\x63\x72\x09\x78\x61\x01\xae\xfe\x63\x58\xea\xad\xf4\xcf\xfc\xd5\x03\xfc\x58\xba\x86\xdd\xf6\x53\xb4\x34\x7b\x70\xc3\x66\x99\xd3\x3d\x4d\x40\x50\x8c\x20\xe9\x7a\x18\x05\xf6\x11\xf3\x55\x05\x6d\xc4\xa1\xf2\x8a\xba\x61\x86\xec\x83\xff\xb7\x8b\x93\x49\x32\x3d\x27\xab\x37\xb7\x19\xbb\x60\x9f\x44\xa1\x97\x4e\x6f\xd8\x15\x53\x49\x36\x4e\x69\x30\xe9\xbe\x4a\x35\x40\xb3\x98\xaa\x67\x66\x7c\x22\x86\x74\xfa\x4d\x21\x73\x3e\x16\x6f\xd8\x95\x5e\x6a\x67\x4f\xec\x57\x99\xce\x26\xe2\x6d\xca\x93\x89\x62\xdc\x8b\x36\x54\x1b\xf5\x4b\xad\x35\xc7\x33\x9e\xf3\xac\x10\x65\x70\x9b\x71\x44\x33\xf3\x0c\xee\xb1\x9f\x0c\x4e\xe3\xe9\x23\x7f\xd2\x77\x99\xfa\xf2\xb9\x7c\xa2\x1f\x8f\x9e\xc0\x9f\x8c\x08\x37\x44\xb8\x1d\x85\x4e\xb8\xe3\x40\x2f\x37\x73\x94\xb6\xc0\x9b\x8b\xc4\x4e\xd3\x16\xf0\x74\x05\x81\xa1\x65\x5e\x29\xf4\x6a\x1e\xf5\x5e\x87\x8f\x11\x5c\x77\xbd\xa8\xab\x35\xdf\xa1\x8f\xa0\xa7\xd0\x76\x77\x94\x3d\x83\x9f\x2c\x08\x7b\x6a\x3a\xab\x3d\xee\x49\xd9\xb3\xf7\x16\xf7\x74\x10\x39\x4a\x10\xf3\xd4\x4f\xcc\x53\xd8\x9b\xd6\x88\x79\x0a\xba\x6e\x73\xd0\x53\xed\x84\xa6\xa8\xa7\xe0\x14\x84\x3d\xed\x39\xec\x69\x53\x01\x29\xb4\x91\x88\x3b\x3a\x00\x7f\xa2\xa7\xa8\x9f\xfa\x38\x5f\x7d\xfe\x6b\x8e\xfb\xb9\x62\xb5\x53\x16\x84\xfe\x84\xbe\xc3\x1a\x29\x3b\x06\x67\x4a\xe4\x0f\x49\x24\x3e\xf1\x49\x43\x02\x8f\xa9\x8c\x3f\xd2\xe6\x80\x89\xc8\x8a\x6b\x99\x26\x51\xc3\x1a\xb8\xe1\x24\x07\x63\xcd\x7e\x2c\x0f\x23\x5c\x74\x80\x5d\xf9\xd3\x47\xe3\xa9\xc1\x10\x6c\x36\x1d\x18\xbe\x61\xf6\x6e\xf9\x4d\x5b\x32\x33\x82\xc1\x80\x51\x98\x91\xc8\x3c\x95\x70\xcc\xc6\x6f\x7e\x60\x53\x73\xf7\x44\xb1\xdf\x7e\xc9\x29\xfc\x87\x24\xeb\xdf\xe8\xca\xb9\x98\x7f\x92\x44\xaf\x88\xf5\xff\xd0\x6b\x3f\x1b\x19\xf2\x62\x2a\xe3\x8b\x57\x03\x0b\xdf\x65\x7c\xf1\x7a\xc0\x44\x11\xbd\x74\x9c\x7f\x2e\x8b\xc5\x23\x4f\xb4\xb5\x2a\x92\x94\x09\x1e\xdd\x93\x6e\xe1\xa2\x8b\x5c\x9e\x0c\x9b\xe9\x22\xc9\xc6\x43\xf6\xb7\xfa\x4b\x0c\xca\x2d\xe6\x86\xd9\x4c\xe4\x43\x99\xae\x42\x4e\xa7\x52\x25\x85\x30\x8f\x67\x5e\x98\xa7\x64\x3a\x29\x55\x65\xf0\xd2\xd7\x3c\xe7\x69\x2a\xd2\xdf\xec\x72\x3e\x2c\x45\xe0\x3c\xdf\xa9\x3d\xc7\xa4\xf4\x70\x61\x2d\xce\x5b\x36\xdf\xc2\xc5\x68\xe9\x37\xa3\x68\x2c\x6e\x8a\xa9\x9b\xa3\xc4\x8b\xe8\xd2\xa6\xa4\x3c\x31\x1d\x27\x54\xc9\x2c\x6a\xda\x12\xb6\x48\x23\xcd\x6b\x1a\xe9\x3c\x24\xf7\x67\xd8\x99\xdf\x2c\x9b\x5d\xa0\x06\x35\x89\x12\xb6\xed\xdc\xb5\x32\xbb\x3d\x35\x53\xc2\xf3\x29\xb3\x55\x26\xc9\x54\xc1\xb3\x22\x29\x63\x08\xfc\xe2\xda\x5d\xd2\x64\x62\xd6\xde\xd1\x43\x12\xcf\x78\x1a\x04\xb0\xa4\xca\x6e\x09\xe5\x0d\xc4\xe1\x69\xc8\x3e\x8c\xc2\x50\xad\x81\xeb\x9b\x5b\x48\xab\xd1\x74\x96\xd7\x99\xe7\xf0\xac\x3b\xbb\x96\xc6\x60\xc2\x13\x13\x7c\xe7\xfb\x5b\x60\x52\xce\x55\x59\xb3\xda\x16\x4c\x31\xfd\xaf\xfe\x57\xd7\x14\x26\x22\x83\xf6\xd4\xba\xbb\xe9\xd9\xa3\x56\xe2\x9a\xbb\x15\x51\xfa\xc4\xf8\x74\x9a\x26\x22\x9e\x33\x79\xd6\x94\x56\xc7\x77\x29\x45\x6e\x9e\xc0\x43\xf5\x15\x78\x76\xc2\x31\x62\xe1\xe4\xd0\xd0\x80\xfe\xa0\x0f\x7d\xd4\xff\x76\xe3\xc9\x1c\x36\x6d\x38\xd6\x2f\x93\xa9\xb6\xf5\xae\x3b\x97\xda\x91\xf6\xec\x3a\xbb\x59\xeb\x90\xc6\x12\x91\x71\x55\x53\xdd\xe5\xf4\x62\xa6\xcc\x9f\x50\xc3\x68\xfe\x49\x8a\xa1\x59\x71\x8f\x45\xc1\xde\x7d\xba\xb9\x74\x4c\xcf\x7e\x61\x83\xbc\xcd\xa7\xe3\x85\xb6\xac\x6f\xc8\xf0\xbb\xf9\xf6\xc2\x58\xb1\x61\xf0\xc6\x43\xdb\x25\x87\xea\x21\x1a\x46\xe9\x4c\x15\x22\x1f\xa6\x32\xe2\xa9\x9d\x6a\x6e\xcf\x1a\xae\x70\x7b\xa6\x9f\xbd\x56\x9b\x27\x24\x84\x8d\xc9\x06\x82\x65\x4b\x6b\xcc\x5e\xb1\xb3\x98\xbd\xf7\x6e\x8a\x53\x05\x9f\x4c\x45\x4c\x80\xa2\xe1\x55\xe8\xf2\xa3\x59\x3a\xd2\xff\xa5\xef\x5e\x35\xae\xd6\x86\xce\xb2\xe4\x1f\xb3\x92\x66\x96\x1e\x6a\x2e\x94\x0f\x76\xa8\x79\x39\x5b\xac\x30\x33\xab\xa5\xfa\xae\xe0\xf2\xe0\x31\x6a\x29\xc1\x2b\x0d\xaa\x6f\x29\x9f\x0c\xf4\xb7\xca\x46\xc9\x7b\x6a\x8d\xa4\x5d\x01\x5e\x9a\x53\xea\x1d\x31\xa5\xcc\xf1\xb3\xdb\x7a\x74\xa7\x5e\xb2\x66\x70\xf6\x50\x92\x6a\x77\xed\x86\xc9\xb8\xe9\xac\x6a\xe6\xca\xc8\xb0\x6e\x93\x2d\xcb\xc7\x0d\x58\xd1\x88\xf6\xde\x8f\x44\x2e\xb4\x1b\xc0\xea\x00\x3c\xf0\x9c\x1a\xc6\xf0\x84\x9b\x98\x8b\xda\x38\x4e\x84\xc9\x9a\x62\x6e\x9b\xe8\xf6\x7a\xe4\x4f\xae\x5e\x92\x99\xbd\xcc\xf7\x09\x07\x3e\x37\x45\x12\xde\x53\x91\x24\xfa\xad\xe7\x6d\x66\x67\x82\x36\x35\xa6\x0f\x3a\xc9\x49\x66\xa2\x0c\x9f\x7b\x71\xf7\x44\xe6\xec\x25\x33\x2d\xf2\x91\xf2\xc7\x24\x99\x2d\xe5\xe4\x02\xd6\xed\x37\x2d\xbc\x2b\x72\xd5\x74\xb3\x82\x7f\x15\x8a\x4d\x73\x11\x89\x58\x90\xb2\xac\xa7\x18\x9e\x3d\xd9\x8b\xab\xfa\x75\x06\x46\xd2\xf0\x7e\x09\x09\x10\x1b\xc4\x32\xfa\x11\xa1\x67\x55\xf2\x58\x02\xdd\xe2\xec\x7b\x07\x92\xd1\x16\xe6\x3a\x77\xca\xa2\x38\x57\xb1\xf2\xa2\xa5\x3d\xce\x75\x59\xc2\x9f\xea\x71\x8f\x62\x97\xa5\x01\xaa\x4d\x4e\xad\xfd\xf7\xf9\x14\x29\x0a\x68\xd8\x36\xc2\x6b\x1b\x71\xf0\x96\x0a\x15\xb5\x47\x86\xd6\x4e\x98\xdf\xcb\x41\x16\xdc\x4d\x95\x0b\x67\xee\x72\x0a\x0b\x8f\x5b\x7f\xd6\xcf\x28\x74\x11\x7f\xd7\xd5\x3e\x6f\xf5\x57\x0b\x5e\xc6\x9c\x30\x30\xf5\xe1\x0a\x97\x33\xa0\x3a\xa9\xb9\x07\x9b\x9f\x6a\xbd\x72\x6d\xe3\x75\xab\xd3\x98\x12\xff\x98\x91\x2d\xfb\xfb\xab\x41\xad\xf5\x5e\x36\x3a\x2f\x5d\x22\x87\xe7\xcf\x69\x08\x9c\x6d\x4c\xdc\xe4\xa3\x77\x2b\x03\xf8\x43\x61\x4a\x25\xe9\x89\x26\xf6\xfc\xb1\xba\xc2\x29\xaf\x36\xb0\xcb\xe6\xc4\x67\xeb\xd6\x8b\xde\xc9\xcc\x52\x4f\xfb\xd5\xaf\xae\x3f\x58\xbc\xd6\x4f\x50\x72\xe5\xf0\x46\x1d\xaf\x0c\x06\xe7\xb4\xdf\xfe\x89\xbd\x6d\xa0\xd7\xeb\x05\x32\xd7\x17\xe9\xeb\x3c\xe0\x4a\x49\x8c\xda\xbb\x77\xf5\xf8\xb6\x7b\xb7\x7b\xf1\x8b\x5a\x6e\xa5\x81\x3b\xf0\xb2\xa9\xb3\x2f\x4d\xc4\x54\x3b\x61\x47\x06\xa7\xda\x74\x3d\x05\x6d\x2c\xab\xa3\xd3\xee\x36\x57\xbf\x95\xaa\x78\xd3\x0b\xde\x97\x1c\x6d\x9b\x59\x72\x2a\x72\xfd\xc4\xae\x60\x0b\x0d\x79\x53\x2d\x4d\x28\xf2\xb0\x78\x6c\x46\x00\x4f\xcb\xa8\x1b\xc5\x32\x11\x09\xa5\xb8\x29\x00\xeb\xae\x11\x84\x22\xb9\xa9\xb8\x6c\x3d\xf7\x74\x7d\xe5\x8d\xfa\xab\x8f\x79\x5a\x18\x20\xa4\x8c\xdb\x40\xd2\x54\x3d\xf5\xd2\x82\x50\xa1\xb5\x92\x48\x35\x85\x3c\x2d\x16\xcb\xaa\x1f\xb0\xb0\xfa\xd9\xc2\xb5\x52\x0f\x99\xa4\xee\x44\xc1\x5f\x0f\xe7\xdd\xa3\x86\x5c\x61\xef\xaf\x3f\xbf\x7f\x7b\xf5\xe5\xfd\x3b\x76\x61\x50\x03\xa1\xfc\xd0\x2c\xcc\x5f\x86\x99\x94\x67\xb9\xf0\xc3\x46\xdf\xf7\xd2\xdc\xf7\x87\xcb\x06\xb7\x8c\xdd\x08\x61\x17\xad\x7a\x29\x41\xe9\xdb\x6c\xf1\xa0\x89\x83\x3e\x7a\x54\xd1\xb9\x4d\x37\x9c\x4c\x53\xe1\x72\x1d\xb3\x64\xa2\xa7\x1c\xed\x8c\xa9\x8c\x4f\xd5\xbd\x2c\xbc\x28\xc9\xcc\x66\xea\xb7\x24\xd8\x38\x5a\x5c\x5d\x45\x29\x91\x27\x3c\x4d\xfe\xe9\x4a\x8e\xc5\x22\xfc\x4b\xc9\x06\x5c\xac\xa6\x59\xca\xd8\xd8\x74\x2f\xc9\x19\xf7\xce\x04\x14\xf2\xa6\x47\xbe\xe7\xca\x44\xc4\xaa\x59\xa4\x87\x12\xed\x60\x72\xf6\x8a\x82\xd7\x83\x38\x4a\x2f\x1d\x7d\xa9\xcc\x9f\x96\x11\xf0\x84\x24\xc0\x24\x2e\x75\x0d\x9b\x95\xcf\xa8\x50\x26\x9a\x5d\x2f\x8d\x4c\x1e\xea\x59\xe1\xbc\xe6\x77\xbc\xe0\xc6\xff\x6e\x6a\x56\x52\xbf\x06\xec\x5e\x3e\x8a\x07\x91\x0f\xf4\x83\x18\x60\x1d\x07\x09\x9f\x07\x2c\x36\xf9\xa7\x93\x82\x46\xa2\xfe\xdc\x77\xd2\xae\xbd\xca\x00\x79\xdd\x92\xcd\xd6\xc8\x7c\x66\xb7\xbf\x20\x8b\x7d\xf2\xe2\x41\x45\x9c\x4b\x74\x73\xe9\x6f\xf7\x9f\xee\x71\x92\xc2\x85\x78\xa8\x99\xa5\x35\xd2\xac\x03\x4c\x79\xbb\x8a\xe2\xaa\xd7\x10\x63\xb3\x4e\x1c\xcd\x8a\x59\xee\xbb\x9a\x32\x48\x2c\xb2\x3d\xc2\xc2\x4a\xdd\xee\xb1\x98\x0a\x83\xed\xf5\xab\xa9\x82\xdf\x25\xa9\x21\xd4\x26\x53\x75\x9e\x4c\x78\x9e\xa4\x66\x9b\x9f\xff\xf0\xb6\x09\x82\xf7\x5b\xbe\x44\xb3\xa3\x0f\x0a\x74\xcf\x0a\x74\x73\x86\x05\xea\xf4\x4e\x11\xb4\x43\x5b\xcc\x75\x18\xc7\x3e\x8b\x75\x36\x6b\xe4\xb3\x8c\x02\x8b\x3e\xf3\xc7\xf7\xdf\x0a\x91\x29\xbb\x26\x83\x72\xbd\xfd\x9a\x5c\xc7\x95\x75\x2d\x6f\x9d\x7a\xcb\xc9\xad\xe2\x23\x78\xd4\x19\x76\xd0\xba\x40\xf4\xce\x56\xea\x58\xba\xb8\xda\x48\xbf\x6f\x70\x20\xaa\x12\x3e\xf9\x19\x6d\x3a\x7e\x9b\x13\xd2\x1c\xf2\xd3\x7c\x9e\x19\x35\x7e\x48\xd8\xb9\x98\x66\x6e\x8f\x5b\x1b\xe6\x5e\x3b\x81\x23\x2e\xe8\x90\xd2\x21\x35\xd6\x0d\x6a\x70\x4a\x36\x47\x66\xad\xee\x2f\x82\x8b\xb6\x64\xa2\x0f\xd0\x0c\xf7\x14\xc3\xd4\x62\xbf\x56\xb6\x83\x0b\x4b\xad\x2e\x5f\x84\xbd\xab\x14\x51\x59\xb0\xf8\x0a\xb3\xf4\xaf\xb2\xe8\x42\xb9\xd7\x03\xb7\xaa\xb0\x5b\x28\xf7\xba\x52\xa5\xd5\xba\xdd\xd9\x5f\xcd\xd7\xb9\x27\xd9\x6a\xe1\xd7\x95\x8c\x31\x4a\xc0\xa2\x04\x2c\x36\x7b\x6c\xaf\x04\x6c\x7d\xbc\xa1\x0e\xec\xf1\x79\x1e\xfb\xab\x03\x3b\xe7\x3a\x63\x01\x87\x62\xb0\xeb\x4f\xf6\x9f\xad\xf0\xb0\x68\x05\x16\xae\x84\xdc\xf9\xb4\xa5\xdc\x5a\x86\x60\xd1\x54\xd6\x45\x2a\xa4\x17\x35\x2a\xbe\xc0\x32\x83\x95\xf1\x89\x9e\xf8\xdd\x6f\xbf\x48\x18\x2f\x2c\x9b\x0e\xc6\x5a\x64\x8d\x51\xed\x9f\x6d\xff\x7d\x63\x48\x45\x2d\xb2\xff\x93\x0d\x70\x6f\x19\x05\x81\xbf\x54\xf6\xf9\x46\x9f\xc9\x56\x8b\x72\x5d\x37\x70\x42\x7c\xed\xd3\x55\x17\x20\x6e\x38\xbf\xa5\x4b\x07\x41\x28\x57\xba\xd5\x79\x4b\x3c\x20\xed\x26\x2a\x4f\xb0\x79\x71\x5d\xf8\x93\x76\xa1\x83\x87\x6b\x18\xef\x65\x78\xc5\x75\x65\x60\x37\xb8\x4f\x7d\xd8\x48\x6f\xe3\x36\xb0\x93\x07\x50\x3e\x1b\x35\xb3\x51\x33\x1b\x35\xb3\x51\x33\xfb\x88\x6a\x66\xff\xd0\xf5\xf5\x16\xcc\x7c\xa1\x1f\x1a\xcc\x82\xf5\x29\x50\x9b\x04\x9b\xe0\x8c\x7c\x4e\xed\x3b\xfc\xcd\x59\x94\x54\x70\x32\x27\x23\xfd\x62\xde\x2d\xd5\x17\x90\xd9\x2a\xa1\x6f\x6d\x93\xe6\x41\x96\xfc\x46\x25\xef\x06\xca\x7a\x24\xe5\xbc\x5b\xf0\xf0\xc2\xba\xa6\xa8\xe9\x8d\x9a\xde\xc7\x52\xd3\xbb\x5d\x73\x40\x61\x6f\x14\xf6\x5e\xfc\xb0\x28\xec\xfd\x3c\x0a\x7b\xb7\x4e\xde\x0b\x67\xc1\x67\x5c\xdd\xbb\xf4\x4e\x8f\xa9\xc4\x77\xa3\x4f\xbd\x68\x15\xb0\xfc\x2b\xb5\xc6\x97\x56\xd2\x90\x84\x84\x5a\xaf\x16\x3e\x8c\x5c\x02\xe6\x57\x83\xf0\x88\x9d\x30\xc9\xa1\xea\xb8\x07\x8a\xc2\x4c\x97\xbc\x2d\x12\xd5\x23\x51\x3d\x12\xd5\x23\x51\x3d\x12\xd5\x23\x51\xfd\x0e\x12\xd5\x37\x4c\x3c\xc8\x56\xdf\x9a\xad\x7e\x53\xaf\xf5\x46\x77\xbe\x86\xe9\x9c\x72\xe1\x55\x53\xd2\xdb\x5e\x68\x45\x4f\xab\x08\x38\x7d\x15\x31\xc4\x10\xc3\x0f\x56\x0c\x5f\x3d\x86\xf8\xc7\x2d\x6d\x4e\xdb\x7e\x6c\x72\x38\x7e\xea\x12\x2e\xcd\x34\x7d\xb7\xbd\x7e\x8c\x0b\x9e\xc5\x17\x56\x3a\x5b\x75\x19\x48\xa6\x66\x59\x7c\xf3\x7c\x92\xf9\x9d\xbd\x0f\x25\x1b\xb9\xd0\x6b\xe1\x35\x5f\xad\x97\x4c\xf4\x64\xa6\x57\x0e\x0b\x28\xdb\xb6\xd9\xc2\xdb\xba\x02\xa1\x78\xc0\x0b\xd3\x46\xc2\x25\x48\xa2\x99\x40\xcd\xee\x9c\xf1\xe8\xb0\xaa\x6d\xc3\x38\xf3\xeb\x2e\x93\xad\x34\x12\x25\xd5\xb6\xde\x90\x35\xe6\xbd\x4c\x6f\xad\xd9\xbd\xca\x83\x5d\xea\xd7\xce\xb5\xc4\xfa\xe9\xbd\xda\x9b\x88\x47\xc5\xac\xba\x6e\x72\x8c\xb7\x6c\xaa\xb0\xf7\xaf\xd4\x52\x8b\xf4\xbf\x35\x72\x84\x2a\x97\x24\xb4\x36\x00\x9b\x53\x7f\xce\x94\xc8\x2f\xc6\xb3\x24\x16\x36\xbd\x67\x43\x76\xcf\x75\xe3\x6f\x06\x67\x86\xfe\xdd\x2c\x79\xbd\x39\x79\xb3\xe3\x0b\x96\xa2\xb3\xdb\x93\x4e\x4b\x99\x60\x8f\x17\x65\x55\x98\xf0\xe9\xc5\x1d\xd7\x3e\x26\xf9\x0e\xba\x55\xc4\x37\xdd\xaf\x54\xf2\x40\x99\x3a\xed\x51\xff\xca\xe5\x95\x63\x99\x91\x02\x49\x7a\x8c\x76\x45\x72\xa9\x0d\x91\x75\x14\x83\xf9\x56\x19\xb1\xc7\xce\xf6\x4e\xe0\x73\x89\x7d\xac\x3a\x33\xd1\x2e\xbe\xe9\xc9\xf4\x45\x2f\xc8\xc9\x65\xea\x29\x2b\xf8\x37\x02\x48\xb4\x4c\xa0\x36\xb3\x89\x4d\xb2\xf4\x89\xa9\xd9\x74\x2a\xf3\x42\x05\x2f\xe2\x1f\x75\xe0\x12\x47\x94\x4a\x12\xf9\x47\xf5\x13\xdd\x41\x4a\x48\x3d\x35\x6b\xbe\x9d\x65\x87\x5d\x81\xe3\x2d\xac\xcb\xd4\x61\x53\x5f\xe8\x9a\x2f\xde\xd5\x57\xc9\xd9\xb5\xca\xb6\x3e\x54\x87\x42\x75\x28\x2c\x3a\x4e\x61\xd1\x71\xec\xd5\xa1\xe6\x4c\xe6\xb1\x96\x88\x9a\x7f\x91\xed\xd6\x89\xea\xe2\xa3\xa3\x62\x14\x2a\x46\x1d\xf4\x26\xc2\xcd\x2a\x46\xcd\xf5\x72\x94\x8d\x3a\x5e\x7f\xa0\xaf\xb2\x51\xf3\x3e\x38\x76\x07\x1e\x80\xb7\xb1\x93\xda\x51\xab\xcd\x89\x3b\xad\x22\x85\xd2\x51\x28\x1d\x85\xd2\x51\x28\x1d\x85\xd2\x51\x7d\x94\x8e\x1a\xb9\xac\xe5\xf6\x31\x8d\xf6\x6e\x63\x71\x65\xe6\x06\x77\x50\x5f\x04\x45\xa4\x50\x44\x0a\x45\xa4\x50\x44\x6a\x6b\x45\xa4\xe6\xdc\x4b\x54\x92\x42\x25\xa9\x4d\x2b\x49\xb5\x41\x45\x94\x93\x42\x39\xa9\x2d\x6c\x46\x43\x4d\x29\xd4\x94\x42\x4d\x29\xd4\x94\x42\x4d\xa9\x1d\x18\x9c\xde\x6a\x4a\x2d\xf3\x3c\x51\x58\xea\x78\x0a\x4b\x75\xdc\xa2\xd0\x7f\x75\xa9\x55\x34\xb7\x1f\xf6\x50\x43\x0a\xe5\xa3\x50\x3e\x0a\xe5\xa3\x50\x3e\x0a\xe5\xa3\x20\x5e\x1f\x72\xf9\x28\x95\x8c\x2f\x78\x1e\xdd\x27\x85\x88\xb4\xc1\x40\x3d\xa9\x7e\xea\x49\xfd\xb0\x48\xd6\x6f\x72\x48\x50\x4f\xea\xc4\xcd\xf4\x41\xd4\x93\x6a\x74\x85\x11\x70\x74\x78\xf5\xa4\x76\x66\x97\x77\x5d\x60\x6a\x89\x61\xf4\xbe\xf4\x5a\x0b\xb4\xd2\x13\x6f\x5d\x97\xf9\x53\x56\x2c\x2c\xe5\xaf\x5c\x17\x2a\x28\xfb\xcd\x2c\x0f\xc2\xac\x62\x3a\xd7\x05\x96\x63\x5b\x06\xb6\x65\x1c\x99\xdd\x3a\x2d\x5f\xb3\x79\xab\xc8\x97\xd6\x04\xdf\xb4\xeb\xc2\x8f\xe0\x6d\xbf\x70\x6d\x93\xf5\x6a\xe8\x2d\xb0\x97\xcb\xf6\xa1\x7c\x69\xdc\x7d\x32\xf7\xb6\xeb\x6c\x3a\x61\xd7\x6e\x7b\xa3\x83\xcd\xea\x49\x15\x62\x12\x6e\x18\x3f\x9a\x66\xec\xa5\xa8\x97\x9f\xc4\xd6\x9f\xff\x16\x95\xf4\x9a\x3b\xa7\x7d\xff\x4b\xc0\xa6\xb0\xfb\x05\xbb\x5f\x36\xda\xfd\x52\xf6\xa5\xf5\xf6\xbe\x04\xbd\xbb\xa5\x80\x56\x78\xb8\x69\xdf\x4b\x69\xa9\xb0\x8a\x3d\xa8\x55\xec\x95\x5f\xba\x36\x7f\xa2\xcd\xd6\xac\xa5\x3d\xc5\x52\x75\xb7\x95\xb3\x8e\xc2\xdd\xeb\xab\x42\x57\xc5\x38\xad\x3f\x73\xb7\xd4\x9d\x09\x0f\x2f\xd8\xa3\xb3\x78\xf1\x18\x5a\x38\x1f\xb8\x3e\xd8\xa4\xce\x0c\xe5\x4e\x5c\xa3\xd6\x4c\x39\x19\x1c\x45\xd5\x99\x2d\x17\xed\x70\x9b\x1c\xf6\x50\xb0\xa3\x87\x8d\x0e\x57\x8b\x36\x37\xf0\x5c\xd4\xa3\xd0\x2b\xcb\xa3\xb2\x72\x56\x92\xd9\xfd\x51\xfe\x7b\x1a\x24\x14\x93\x98\x58\x2b\xb1\x15\x6e\x77\x20\xf7\xe7\x4e\xa4\xcd\x53\xd9\x81\xef\x7b\x68\x8f\xb3\xbf\xca\xd6\x08\xad\xb7\x15\x0c\xfc\xe8\x0a\x37\x68\x89\x6f\x3c\xa2\xe2\x10\x14\x51\x3c\x7d\xf2\x9e\x88\xbe\x98\xcc\x98\xa0\xd8\xe5\x4c\xc6\xc2\x05\x3b\x17\xd1\xbd\x0b\xab\x28\xdb\x9a\x4e\xf0\x9b\x5b\x5e\xe8\x75\x6f\xe5\xb7\x14\x14\x55\x3b\x2b\x51\x65\xff\x7b\xb9\xf2\x67\xd2\x5f\x27\x95\x3c\x56\x97\x81\x62\x7c\x69\xa3\xa0\x74\x6b\x95\x7f\xfe\xdd\x54\xc6\x17\xc1\xee\xc3\x2d\xc6\xef\x5f\x65\x65\xbe\xd2\xb2\x00\xca\x5c\xd6\xf1\x8a\xa5\x0b\xf2\x8f\x77\x4c\x01\xda\x32\x4b\xd4\xc3\xed\x3b\xb9\xcd\xad\x35\x45\xaa\x27\x74\xc9\xe1\xd5\x7d\x9e\xb1\xbf\x36\x55\x96\x6e\x5c\x12\xe9\xb3\xc1\x99\x31\x81\x1f\x13\xa5\x82\x3f\x5a\xa6\xd2\x76\x36\x4d\x46\xab\x87\x65\x2f\x2f\x01\x52\x62\xdd\xea\xf8\x79\x96\xc1\xd7\xfe\xf5\xb7\x14\x7a\xdd\xc8\x29\xb6\x14\x78\x5d\xef\x49\x4b\x66\x63\xda\x09\x3c\x5f\xbd\xc1\xef\xd9\x78\xed\x7a\xbe\xb6\x99\x54\x3d\x2d\x17\x26\xdd\x97\x8d\xa2\xcb\x67\x59\x38\xc9\xd1\xa6\x90\x5e\xcc\x9d\xb9\xa0\x12\xc5\x65\xb7\x2e\xd1\x32\x92\x1a\xdf\xbf\x9e\xe7\x38\x68\x85\xc0\x35\xb3\x6d\x51\x7d\x3b\xf6\xc2\x84\x3b\xd2\x46\x1a\xfa\x19\x85\x3d\xd3\x44\xd3\xfc\x8b\xbe\xec\xff\xaa\x0d\x62\x5e\xef\x6a\x71\x1e\xf0\xf5\xda\x80\x72\x7c\xf1\x07\x61\x88\x89\x15\x80\x5c\x19\xc8\xf2\x34\xdf\x9b\xb2\xd0\xe5\x6c\x2a\x93\x44\x85\x34\xea\xb5\x92\x56\x79\xcd\x8a\x59\x5d\xaf\xcf\x57\x1f\xde\xec\xa4\xd3\xc7\xc9\x99\x3c\xc4\x1e\x1f\x4e\x11\xfb\xfd\xb8\xf4\x45\x3b\x9a\x6e\xf3\x50\x4b\x13\xd4\x6f\xf8\xec\x99\x65\x79\xfb\xe8\x91\x5d\x0b\x32\x2d\xdb\x68\x31\xb7\x7c\x58\xbd\x38\x93\xa5\x28\x9b\x1a\xc5\x70\x98\xb8\xfd\x1a\x65\xab\x6e\x16\xdb\xde\xee\xe4\xb5\xfb\x6d\xf5\xb8\x76\xcb\xb1\x66\x51\x11\x44\x77\x97\xf5\x44\xea\x6e\xab\xc9\x40\x5e\xfa\x40\xbb\xad\x8a\x53\x98\x1a\x38\xf3\x95\x66\x56\x75\x8e\xab\x35\x56\x4a\xe8\xb7\xb4\x0c\x4e\xd9\xa1\x5c\x31\x87\xb2\x1a\x4e\xf5\x99\x4c\x49\x9c\x5f\xb2\x77\x14\xe2\xdb\x5b\x35\x9c\x1f\x86\x8b\x4a\xc2\x74\x89\x5c\xa8\x94\xc5\x6c\x09\x5d\x08\xaa\xfd\xac\x14\xbb\x50\x5e\x5b\x64\xda\x3e\xe8\x1b\x44\x29\xcf\x4d\x76\x10\xbb\xf3\x81\x7e\x4c\x3b\x47\xb4\x2d\x09\x4a\x5c\x22\x88\x01\x41\x0c\xc7\x4c\xb4\x6b\x09\xed\xb7\x9f\x78\xfe\x66\xfd\x62\xe2\xab\xad\xc1\xaa\xa5\xce\x17\x08\x84\x1f\x57\xaf\x2d\xba\xee\x93\xf4\xa2\x9f\x87\x95\xe8\x57\xc5\xf0\x0d\x05\x2a\x17\x54\x9f\xeb\x20\xa1\x07\xd5\xf3\x9e\xaf\x86\xae\x1f\xd4\xcc\x8b\xcd\x0f\xf9\xc5\x15\x5c\xb3\x0f\x6a\x2a\x9f\xbb\xa2\xe4\xdc\xef\x8a\x85\xa2\x7f\x48\x8a\x7e\xb5\x4c\xea\x7a\x92\xbe\xbf\x44\x8b\xa6\x5f\x39\x5e\x4d\x0c\x52\x1e\x83\x9c\x7f\x50\x72\x7e\x63\x50\x7a\xf3\xd7\xda\x10\x23\x06\xc5\x2e\xe1\x08\xed\x54\xda\x3f\x08\xc9\xbd\x6a\x3c\x36\x98\xec\x5b\x44\xf7\xca\xf1\x56\xd5\xbd\xbb\x7f\xb6\x7d\x3d\xfe\xe3\x1a\x5a\xfc\x51\x28\xf0\xdd\x50\xd3\x94\xcf\x54\x13\xcf\xf9\x10\xec\x06\xb3\x9b\xfb\xe3\xca\x92\xd9\xfc\x30\xf8\x46\x77\x52\xa6\x82\x93\x2c\x31\xcd\xe5\x38\x17\x4a\xbd\x13\x3c\x4e\x93\x4c\x2c\x0e\x86\xb0\x79\x11\xc9\x91\x49\xb2\x4a\xf3\xf3\x5a\x69\xe9\x09\xff\x2a\x98\xbb\xba\x4b\x43\x67\x5e\x3a\x68\x1a\xd3\xb8\x23\x9e\xa4\x4e\xde\x6d\x2c\x4f\x6e\xa5\x5e\x93\x06\xd4\xe4\x26\xc8\x65\xa4\x2f\x6c\x7e\x1a\xfc\xca\xac\xd1\x79\xe8\x62\x25\x85\xee\x17\xd7\xb5\x37\x7d\x4f\x35\x45\x69\xdf\x27\xf9\x29\xee\xc3\xa9\x59\x3e\xe2\x51\x99\xd1\x31\x78\x20\x57\xec\xc9\xef\x7d\x2e\x5f\x90\x7e\x6d\x6d\x9e\x50\x45\x32\x09\x73\xb5\x92\x23\xa5\xdb\x8c\x37\x7f\x99\x4a\x3f\xfa\xf7\x57\xaf\xd4\xc6\x79\x45\x3e\xf9\x21\x52\xad\x95\xba\xa5\x38\x8b\x2d\x87\x90\x04\xc4\xe5\x48\xc3\x48\x7e\x6e\xae\x2c\x34\x64\xef\x9d\x94\x1e\xbe\xe3\xe3\xbd\x54\x41\x4a\x5b\xf3\xb3\xa0\x68\xb9\xeb\xaa\x94\x8b\x40\x3b\x6f\x7c\x34\xaa\x9e\x11\x56\xbf\xee\x1a\x60\xd2\x73\xce\xcb\x56\xb2\xfb\xa5\x3e\xa8\xca\x00\x03\x9b\x78\xa4\x63\x75\xf3\xc5\x62\xa9\xe9\x25\xff\x2d\x9e\x56\x8f\x78\x9f\x2f\xd2\xbe\x30\x98\xc5\x05\x57\xcc\x87\xb1\xa8\xe6\x38\x96\x4d\x62\x37\xba\x2d\x38\x5a\xa3\x21\x6a\x67\x34\xe4\x81\xea\x4a\x41\x96\x70\x4f\x37\xe7\x75\xaf\xd7\x5f\x4e\x93\xa6\x56\x70\x83\x50\x53\xd7\x68\x16\xd5\xf3\xef\x1c\x5d\xb0\x69\x78\x45\x30\xd4\xbe\x54\xfe\xf7\x8e\x03\x2c\x4a\x0b\xb2\x97\xc0\x8a\xb2\xe5\xb7\x17\x59\xd1\x00\xb0\xfa\x0e\xad\xe8\x2a\xe8\x2d\x12\xf1\x9a\x7a\x40\x3f\x59\xcd\xea\x63\xc6\x8c\x11\x63\x69\x36\x1e\x0a\xed\xee\x44\xfd\xb6\x99\xcc\x2e\x0a\x91\x4f\x92\xcc\x39\xd9\x0b\xef\xcf\x5e\x98\xe4\x38\x36\xab\x73\x39\x11\xb9\x09\xb1\x6b\x0c\x6a\x50\xa6\xbc\x7b\x1b\x85\xb5\xcd\x97\xb6\x94\x77\x21\x8a\xb6\x12\xd9\x5e\x24\x55\x45\x62\xb3\xec\x90\x83\xe5\x46\x63\xd5\x0d\x26\x81\xfa\xf5\xab\x57\xbf\x0f\xc6\x4e\xc4\xa7\x3c\xa2\x44\x32\x5f\xee\xc5\x13\xad\xb6\x45\x52\xdc\x8b\x9c\xea\x36\x57\xee\xe1\x84\xd8\xbb\x59\x41\x1e\xca\x93\xa8\x0c\xc2\x4a\xa6\x6d\x7a\x1c\x2b\x88\x17\x26\xb5\x50\x30\xe1\x74\xce\x10\xb7\x20\xbb\xda\xa6\xdd\xa0\xcc\xa4\x17\x2e\x2b\x7d\xce\x65\x92\xe1\x37\x16\x98\xe7\x27\xef\x85\xb3\xa0\x75\x3e\xca\xa9\xfb\x5e\x3e\xae\xe0\x83\xec\x50\x4b\x9e\x7f\xea\x2f\x46\x5d\x9e\xd3\x66\x37\x50\x96\x03\xe8\xd4\x9d\x90\x86\x9a\xb2\x30\x7d\xce\xc9\xc9\x75\xdd\xbb\x2f\x4d\xb9\x9c\xec\xd6\xd2\x94\x83\x02\xfb\xad\x9a\x72\x30\x9f\xae\xa4\x29\x07\xd7\xa6\xaa\xfb\x65\x35\x43\xbf\xbe\xa8\xda\x94\x6a\x8a\xf0\x20\x2c\x8f\x67\x4f\xb6\x5a\x83\xab\x60\x06\xb1\x19\x62\xf3\x91\x31\x56\x5b\x47\xf6\x67\x5b\xd1\x61\x44\x59\x54\xfd\x08\xd1\x3d\xde\xa6\x18\xf5\x25\x46\x2a\x95\x20\xec\x32\x97\x32\x77\xdb\x6a\xb5\xd7\x32\x7e\xa1\x7d\x7f\x47\xbb\x82\xcb\x99\xdd\x18\x8a\xca\xa2\x9e\xfc\x3e\xfd\xb9\x92\x8e\x2b\xd1\xdb\xd0\xbc\x1d\xf6\x0e\xf4\xf2\x49\x57\xab\x28\xd9\x69\x51\x1b\x36\xc3\x33\xdd\xe1\x1f\xb4\x6f\x1f\x21\x0a\xc1\xd4\xbc\xb2\x6a\x51\xfe\x76\x41\x88\x42\xc3\x49\xed\x21\x0a\xae\xde\xcc\xde\xaa\x5c\xd6\xe5\x7f\xec\xf5\x3f\xf2\xc8\x80\xb0\x47\xad\x1b\x1a\x50\x76\xe1\xe6\xd0\x80\xea\xf1\xa6\xfd\xfe\x4b\xa2\x10\x11\x20\xb0\xaf\x00\x81\x9f\x6d\x4c\x40\xf8\x81\xb6\xb8\x29\xb0\x2f\xb6\x16\x58\x6d\x84\x1b\x9c\x56\x26\x81\xea\xf3\xee\x3d\xb2\xa1\x66\xfb\x36\xf0\x11\x9a\x23\x1b\xaa\xc7\x17\xe4\x13\x68\x04\xe6\x8b\xe3\x17\x10\xb4\xb0\x62\xd0\x42\x3b\x53\x6e\xaf\xd1\xe0\x56\x2c\xee\xb7\x1b\xe9\xba\x41\x39\xc9\xba\x68\xbd\x45\xab\x7c\xf9\xbb\xc7\x7b\x5e\x5c\x24\xea\x82\x5f\x2c\x31\xdb\xeb\x09\xca\x37\x7d\x15\x60\x34\xca\xf4\x57\xf1\x64\x02\x27\xcc\x3c\x6a\xf7\xc8\x77\xc8\x5f\xe0\x31\x6f\xe0\x15\x3d\xd3\x9c\x06\x5f\x76\x56\x3b\xf0\x08\x52\x0c\x74\x73\x7e\xdb\x64\xea\xfa\x19\x5d\x76\xed\x77\xb7\xe6\xed\x25\xd0\xba\xa8\x4b\x15\x53\x55\x5a\x49\xff\xa9\x3a\xe9\xd6\xbe\xae\x52\x38\x6c\xf6\xa1\xda\x06\xf7\xdf\x9a\x6c\xdb\xb4\xa8\xef\x5b\xb6\xa5\xea\x19\x34\x58\x17\x0a\x58\x95\x8f\x57\x1a\x49\xd2\xa4\x42\x75\xd2\x39\xb2\xa9\xa7\x96\x75\x23\xe6\xfe\xe6\xbe\x7b\xe7\xef\xd7\x45\x60\xfe\x65\xbe\x60\x57\x2e\x46\xa9\x2d\x3a\x52\x15\x9f\x47\x8b\x58\xd7\x0a\x31\x01\xdd\xf4\xe7\x4a\x03\x9a\x9e\xee\x7b\xfe\x06\x9d\xba\xbb\x9b\x50\x7f\x51\xf3\x9e\xf3\xd5\xae\x0f\x7e\x76\x5f\x68\x21\x9b\x77\x7b\x36\x13\xe0\xda\x06\xd8\x26\xde\x1b\xec\x02\xcd\x2b\x9a\xe3\x72\x4d\x69\xc2\xbf\x2d\xdd\xbf\x3d\x5f\x2f\xbb\x96\x18\xc6\x14\xca\x31\x1a\x61\x28\xc7\x07\xf1\x91\x6e\x77\xea\xaf\xb4\xa2\xb4\xe7\xf2\x8c\xf1\x3b\x25\xd3\x59\xe1\xbb\xdd\x0b\xf1\xed\x0d\xfb\xb7\x97\x8c\x42\x4e\xa7\x22\xd7\x1d\x81\x8f\xcd\x70\xac\xc9\xd3\xb5\x87\xb0\x6a\x81\x2a\x78\xee\x2b\xe2\x5a\xe5\x95\x2e\xfa\xfa\xd5\xef\x5f\x0e\xd9\x55\xed\x7e\x89\x62\x11\x4f\x23\x8b\x78\x69\x6d\x1a\xdc\xf5\xee\x89\xe5\x72\x96\xc5\xa6\x45\xad\xa3\x1a\xf9\xe5\xe8\xab\x52\xef\x2c\xab\x6f\x0f\xd9\xfb\x6f\x7c\x32\x4d\xc5\x1b\x13\xe2\x53\x58\xe7\x56\x7f\x9d\x42\xb2\x3f\xbc\xfa\xfd\x40\x3f\x2b\x75\xf4\x3f\xbc\xfa\xbd\x7b\xd4\xcd\xf2\x58\x0c\xc5\xd0\x85\xaf\x36\x27\xcf\x78\x49\x6d\xee\xc4\xf9\xc4\xba\x90\xaa\x90\xd3\xa9\x0d\x6e\xe0\x3e\x27\xd0\xbc\x34\x49\x91\x4f\x7e\xeb\x35\xcf\x0b\x45\xbc\x5c\xff\xda\x6a\x99\xd5\xd7\x91\x4a\xcc\x7d\x9e\x4c\x3b\x45\x22\x63\x77\xba\x4f\x28\x36\x9b\x92\xd0\x5e\x3b\xcb\x17\x5a\x22\x75\xde\xd6\x57\xb2\x41\x50\x41\x05\x5d\xd7\xc3\xa8\x48\x10\x5d\x95\x02\x86\x45\xac\x98\xcc\x0a\xc9\x08\xab\xd6\xae\x3d\x60\xc5\xfd\x4c\x19\xcd\xd6\xb4\x21\x95\x4d\xb2\x53\xf8\x1f\xcd\xa3\xcb\x3c\x19\x27\xd9\xc2\x6e\x16\xde\x9f\x9a\x2a\x4d\xa9\x91\x54\x43\x77\x5f\xd5\x37\x9d\x15\x49\x3a\x4c\xb2\x42\x15\xf9\xf0\x43\x56\xfc\x92\xdf\x74\x81\x8d\x2d\x0a\xff\xda\xe6\x64\x0d\x1b\x72\x33\xcb\x9b\xd0\x73\xb3\xf5\x98\xb3\x19\x3e\xdd\x07\xe3\x77\xb2\x16\x3e\x52\xfd\xd9\x46\x06\x24\x8c\x95\x0e\x6d\x82\x1b\xd5\x2e\xc0\xfb\x95\x76\xd4\x3f\x56\x0c\xa3\x1e\xc0\xaf\x36\xb5\x1e\xe1\xf2\xf4\x87\x7f\xfb\x7d\x17\x43\xe1\xba\x7e\xa0\x81\xfa\x36\xe3\xba\xc1\x66\x53\x96\x4c\x26\x22\x4e\x78\x21\xd2\x27\x77\x21\x51\xfb\x86\x76\xd0\x0e\x98\x9a\xd1\x82\xcd\xda\xca\xba\xcd\x91\xa9\x49\xbb\xe1\x07\x5b\x2c\x4d\x91\x48\x8a\xa5\x67\xaf\xed\xf8\xae\xc6\x9c\xd3\x10\xd5\xbf\xa4\x5f\x90\x85\xa1\xe0\xa4\xaf\x89\x5e\x40\x0e\x96\x3e\xfe\x68\x96\xeb\xd1\x3a\xa8\x8d\xcc\xc6\xe0\xac\x5a\xf0\x04\x49\x2e\x73\xa3\x8e\xd6\xcc\xd6\x22\x35\x3e\x72\x6f\xa3\x72\xb0\xe6\xf4\xb9\xc3\x49\xb3\xad\xcf\xaf\xdf\x93\x63\xf9\x98\xb5\x8f\x19\x32\x04\x76\xb4\xac\xd9\xdf\xab\x5b\x02\x6a\x1d\x46\xdf\x5d\x9f\xfd\xc7\xf9\xef\xba\xc2\x40\xb0\xbd\xb6\x32\xa9\x90\xb7\x3b\xe8\x70\x77\xdf\x61\x47\xd2\x56\x72\xd7\x73\x61\xc4\xed\x6d\x1a\xc6\xec\x5c\xdf\x6e\x0b\x3e\xec\x3a\xb1\xd8\x2e\x5e\x99\xba\xb6\xd3\xc5\x3b\x4f\x3c\x4d\xc5\x2f\x17\x17\xf0\x6c\xf8\xc5\xd2\x9a\x9e\xe4\xa9\x74\xad\xe4\xb9\x78\xd6\x9a\xf2\xbc\x68\x51\xa0\xaf\xdd\xa1\x5a\x29\x2e\x99\xc7\xe4\x1c\xf0\xc2\x92\xdd\xa2\x56\x69\xb5\xf4\xd4\xfc\xd5\x03\x2e\x59\x3a\x89\xdd\x76\x9c\x2c\x6a\xfb\x1b\xdd\x21\x1b\xa6\x78\xfd\xe7\x10\xa7\x70\xdf\x33\xad\xa4\x62\x77\x73\x39\xf5\x06\x51\x67\x88\x3a\x3b\x66\xa9\xad\x96\xe2\xe4\xc7\x5d\x45\x7f\x6d\x3f\x97\x4a\x38\xa0\xea\xc1\x5d\x34\x1d\xed\x3a\xee\x68\xe5\xd0\x63\x32\x46\xcb\x62\xba\x9a\x2a\xb3\xec\xeb\x05\x83\x98\xae\xf5\xde\xb5\x8f\xf8\x2a\x63\xd9\x57\x96\x4d\xcb\xc6\x6e\x9e\x14\x6c\x34\x61\xa8\x53\xf0\xc2\x34\x9a\xb0\xb0\x98\x1a\x5d\xdb\x05\x67\x6f\x96\x07\xc0\xb7\x72\xbd\xf9\xe5\x5b\x92\xa9\x82\x67\x91\x28\xb7\x56\x59\xa7\xca\xda\xff\x5e\x66\xc4\x36\xc5\x21\x38\xd8\x45\x6c\x98\x6b\x89\xf5\x35\x87\xf6\x26\xe2\x51\x31\xab\x2e\xbf\x1c\xd6\x2d\x9b\x2a\x1c\x0e\x2b\xb5\xd4\x22\x71\x71\x0d\x39\x51\x39\x3d\xb1\x36\x22\x9b\xa1\xeb\x4c\x89\xfc\x62\x3c\x4b\x62\x61\x45\xbb\x06\xcd\xae\xde\x9a\x65\xb1\xf9\xeb\x4a\xfb\xd5\xa3\xae\x06\x67\x66\x0b\xca\xcd\x92\xd7\x9b\xdb\x8c\xdb\xf1\x05\x4b\x2d\xda\xd5\x0e\xa6\x15\x51\xb0\xb9\x80\xaa\x5f\x4f\xf8\xf4\xe2\x8e\x6b\x57\x95\xdc\x0d\xdd\x2a\xe2\x9b\xee\x57\x2a\x79\x10\x7a\x49\x63\x8f\xfa\x57\x2e\xaf\x1c\xcb\x8c\xb6\xc1\xd2\xa6\x40\xed\xbd\xe4\x52\x1b\x22\xeb\x6f\x06\x53\xb4\x32\xdc\xcd\x3a\x08\x4e\x4c\xb4\xa7\x28\xbb\x45\x70\xa2\x57\x0a\xa6\x27\xd3\x17\xbd\x20\x5f\x99\xa9\xa7\xac\xe0\xdf\x86\xcc\x86\x67\x9b\x36\xb3\x15\xe6\xb3\xf4\xc9\x64\x41\xcd\x0b\x15\xbc\x88\x7f\xd4\x81\x2b\xf0\x5d\x6e\x67\x24\x97\xaa\x7e\xa2\x3b\x98\x0b\x36\x75\x51\xb2\x3b\xd3\x7c\x57\x88\xc6\x0b\x3c\xf4\xb5\x76\x93\x84\x1e\x7e\xeb\x76\x92\xe0\xa4\xd5\xf6\x93\x84\x57\xaf\x3a\xee\xa2\xf0\x0b\x43\xda\x98\x44\xe1\x1b\xaa\xa0\xe4\x02\xb1\x9e\xc6\xf4\x18\x19\xb2\x0f\xfe\xdf\x2e\xbc\x3e\xd1\xae\x37\x57\x6f\x6e\x33\x76\xc1\x3e\x89\x42\x37\xed\x1b\x76\xc5\x54\x92\x8d\x53\x5a\x03\xeb\x25\xe6\xbb\x4f\x37\x26\xc9\xaa\x54\x45\xc6\x27\x62\x48\xa7\xdf\x14\x32\xe7\x63\xf1\x86\x5d\xe9\xbe\x91\x3d\xb1\x5f\x65\x3a\x9b\x88\xb7\x29\x4f\x26\x4a\xf7\x34\xeb\x2f\x8a\x78\x78\x9b\x7d\xa9\xad\x7f\xc6\x33\x9e\xf3\xac\x10\xe5\x9e\x18\x03\x91\x33\xf3\x0c\xee\xb1\x9f\x4c\x67\xe6\xe9\x23\x7f\xa2\x1e\xe8\x3c\x7a\xea\xd4\xca\x3c\x81\x3f\x19\x4b\x14\x2c\x51\x8e\x62\x89\xb2\xe3\xed\x20\xce\xc5\x2a\x6d\x81\x37\x17\x89\xa5\x6b\x56\xa1\x5d\xcd\x93\x0d\x80\xca\x4a\xfb\x31\xe6\x1d\xa9\xeb\xf0\x59\x2a\x06\x72\x9d\xad\x18\x9b\xbc\x48\x2f\x8e\x79\x30\x8d\xac\xee\x9e\x97\x3f\x5e\xb0\xf5\xa1\xe9\xac\xf6\xbd\x0f\xca\x9e\xbd\xb7\xbd\x0f\x07\x91\x9f\x11\xfb\x1e\xfa\xd9\xf7\x10\xf6\xa6\x75\xf7\x3d\x04\xfd\xb7\x79\xe3\x43\xed\x84\xa6\x9d\x0f\xc1\x29\xd8\xfa\xb0\xe7\xad\x0f\xbd\xc4\x87\x85\x76\x13\x7b\x0f\x0e\xc0\xdb\xe8\x29\xd0\xbf\x3e\xd8\x37\x99\x13\x9b\xc1\xd5\x15\xab\x9d\xb2\x20\xda\x3f\x74\x2f\xd6\x48\x57\x38\x38\x53\x7a\x1d\x1a\x89\x4f\x7c\xd2\x90\xbc\x70\x2a\xe3\x8f\xb4\xf7\x78\x22\xb2\xe2\x5a\xa6\x49\xd4\xa0\x6e\x35\x9c\xe4\x62\x2d\x4c\xde\x09\xaf\x35\xba\x80\x60\x2b\xec\xd1\xe7\xe3\xa9\xc5\x4e\xb3\xe9\xc0\xc8\x97\x26\x47\x85\x4f\x4e\x21\x33\x13\x14\x34\x60\xb4\xb3\x40\x64\x5e\xda\x71\x92\xac\xdf\x5b\xcd\xa6\xe6\xee\x89\x62\xbf\xfd\x92\x53\xc4\x3f\x05\xa8\xfe\x46\x57\xce\xc5\xfc\x93\x24\x19\x4b\x32\xfd\x3f\xf4\x1a\xd1\x06\x83\xbf\x98\xca\xf8\xe2\xd5\xc0\x06\xd8\xc8\xf8\xe2\xf5\x80\x89\x22\x7a\xe9\x62\x79\xe6\x32\xf8\x3d\xf2\x44\x1b\xaf\x22\x49\x99\xe0\xd1\x3d\xc5\x26\xb9\x0d\x05\x2e\x47\xa0\xcd\xf2\x97\x64\xe3\x21\xfb\x5b\xfd\x25\x06\x65\x66\x2d\x23\xc9\x4e\xe4\x43\x99\xaa\x4f\x4e\xa7\x52\x25\x85\x30\x8f\x67\x5e\x98\xa7\x64\x49\x29\x9d\x7f\xf0\xd2\xd7\x3c\xe7\x69\x2a\xd2\xdf\xac\x50\x17\xd6\x92\x73\x1e\xf2\xd4\x9e\x63\xd2\x19\x3a\x1e\xe4\xbc\x6a\xf3\x2d\xdc\xb6\x0c\xfd\x66\xb4\x01\x43\xbf\xba\xcc\xec\x51\x92\x83\xe9\xd2\x31\x15\x55\x20\xc9\xd6\x05\xa3\xc9\x2c\x6a\xca\x7a\xb1\x28\x18\x32\xaf\x05\x43\xce\x43\x54\x7f\x86\xf5\x06\xcc\xf2\xda\xc5\x66\x53\x93\x28\x61\xdb\xce\x5d\xcb\xf2\x22\x91\x29\xe1\xe5\x67\xb3\x13\xdf\x70\xc6\x22\x29\x23\x86\xfd\x22\xdc\x5d\xd2\xd4\xce\xd1\x1e\xd3\x43\x12\xcf\x78\x1a\xc4\xac\xa7\xca\xe6\xbf\xe1\x0d\x64\xe2\x89\xd0\x53\xb0\x3b\x63\xe0\xfa\xe6\x16\x52\x0a\x36\x9d\xe5\x03\x4a\xe7\xa2\x2f\xdc\xd9\xb5\xec\x6d\x13\x9e\x98\xfd\x36\xbe\xbf\x05\x26\xe5\x5c\xf9\x9f\xb9\x8a\x97\xa6\xff\xd5\xff\xea\x9a\xc2\x80\x64\x4a\x20\xe4\xee\xa6\xe7\x11\x3f\x47\x59\x78\xe4\x16\x4d\x29\x81\xa4\x34\x11\xf1\x9c\xc9\xb3\x46\xb5\x3a\xbe\xcb\x70\xc3\xcd\x93\x17\xaa\xbe\xf6\x9a\x9c\xf0\xb6\x90\x70\x72\x68\x68\x40\x7f\xd0\xef\x76\xd2\xff\x76\xe3\xc9\x1c\x36\x6d\x38\xd6\x2f\x93\xa9\xb6\x25\xb1\x3b\x97\xda\x91\x72\x13\x39\xbb\x59\xeb\x90\xc6\x12\x91\x71\x55\x53\xdd\xe5\xf4\x02\xa7\xcc\x18\x57\xc3\x6d\xfe\x49\x8a\xa1\x59\x94\x8f\x45\xc1\xde\x7d\xba\xb9\x74\xec\xcf\x7e\x61\x13\xd1\x62\x3e\x1d\x2f\xb4\x65\x7d\x43\x86\xdf\xcd\xb7\x17\xc6\x8a\x0d\x83\x37\x1e\xda\x2e\x39\x54\x0f\xd1\x30\x4a\x67\xaa\x10\xf9\x30\x95\x11\x4f\xed\x54\x73\x7b\xd6\x70\x85\xdb\x33\xfd\xec\xb5\xe2\xaa\x21\x49\x6c\xcc\xac\x16\x2c\x65\x5a\xb7\xe9\x14\x3b\xdb\xa6\xf3\xde\x4d\x71\xaa\xe0\x93\xa9\x88\x89\x61\x34\xbc\x0a\x5d\x7e\x34\x4b\x47\xfa\xbf\xf4\xdd\xab\xc6\xd5\xda\xd0\x59\x96\xfc\x63\x56\x52\xcf\xd2\x57\xcd\x85\xf2\x01\xcd\x35\x2f\x67\x8b\x25\x42\x67\xb5\xba\x4c\x95\x40\x98\xe0\x31\x6a\xf5\x9b\x2a\x0d\xaa\x6f\x29\x9f\x4c\x38\x8f\x0d\x5c\x2a\x91\x50\xad\x91\xb4\x2b\xc0\x4b\x73\x4a\xbd\x23\x26\x9d\xc4\xcf\x6e\x1b\x00\xa0\x7a\xcd\xd1\xc1\xd9\x43\x89\xb5\xdd\x0d\x1a\x66\xe4\xa6\xb3\xaa\x99\xfc\x23\x03\xc6\x4d\xba\x60\x1f\x20\x6c\x03\xc3\x28\xd1\xd8\x48\xe4\x42\xfb\x02\xac\x4e\xcb\x03\xf7\xa9\x61\x20\x4f\xb8\x09\xae\xae\x0d\xe6\x44\x98\x64\x91\xe6\xb6\x89\x6e\xb4\x47\xfe\xe4\xaa\xde\x9a\x29\xcc\x7c\xa4\x70\xf4\x73\x53\xdb\xee\x3d\x95\xba\xa5\xdf\x7a\x2e\x67\x36\x2b\x6b\x7b\x63\x3a\xa2\x0b\x2b\x93\x99\x28\x37\xcb\xbc\xb8\x7b\x22\x9b\xf6\x92\x99\x16\xf9\x48\x69\x33\x93\xcc\x16\xe4\x75\x1b\x55\xed\x87\x2d\xbc\x3f\x72\xd5\x74\xb3\x82\x7f\x15\x8a\x4d\x73\x11\x89\x58\x50\xf4\xa8\x9e\x67\x78\xf6\x64\x2f\xae\xea\xd7\x19\x18\xfd\xc3\x3b\x27\xa4\x56\x6c\xb0\x7d\xc9\x0f\x0b\x3d\xb5\x92\xdb\x12\x88\x1c\x67\xdf\xbb\x22\x8e\x56\xb1\xb9\x7e\xca\x22\xc9\x59\xac\xbc\x7c\x69\xd7\x9a\x97\x25\x3b\xad\x1e\xf7\xdc\x76\x59\x0a\xd4\xda\x34\xd5\xda\x89\x9f\x4f\x95\xd9\x80\x95\x6d\x6d\x5b\x5d\x23\x31\xde\x52\xa5\xd9\xf6\x1d\x61\xb5\x13\xe6\x77\x73\x93\x41\x77\x33\xe7\xc2\x89\xbc\x9c\xd1\xc2\xe3\x4e\x67\x75\x13\x0c\x5d\xc4\xdf\x75\xb5\x6f\x5c\xfd\xd5\x82\x97\x31\x27\x0c\x4c\xbd\xef\xc2\x65\x28\xab\xce\x71\x81\x00\x5c\x7f\x66\x17\xa2\x6a\xf7\xe9\x55\x67\x35\x25\xfe\x31\x23\xab\xf6\xf7\x57\x83\x5a\xeb\xbd\x6c\xf4\x65\xba\xec\x18\x9c\x3f\xa7\x61\xc3\x5c\x63\xd2\x5a\xbf\x6b\xaf\x32\x8a\x3f\x14\xa6\xd6\xad\x9e\x72\x62\x4f\x27\xab\x0b\x9e\xf2\x6a\x03\xbb\x8a\x4e\x7c\x31\x23\xbd\x06\x9e\xcc\x2c\x13\xb5\x5f\xfd\xea\xfa\x83\xe5\x6e\xfd\x6c\x46\xac\x1c\xde\xa8\xe3\x95\x9b\x40\x39\x85\x78\x3d\xb1\xb7\x0d\x80\x7b\xbd\x0d\x8c\xf5\x35\xfb\x3a\x0f\xb8\x52\x02\xd7\xf6\xee\x5d\x3d\xbe\xed\xde\xed\x5e\xfc\xa2\x96\x57\x76\xe0\x0e\xbc\x6c\xea\xec\x4b\x93\xd0\xd6\x4e\xd8\x91\xc1\xa9\x36\xdd\xe6\xb1\x68\xad\x9e\xe7\x22\x67\xa1\x5e\x0a\xb5\xf2\xc1\x54\xc5\xc3\x5e\xf0\xd2\xe4\x7c\xdb\x4c\xfb\x53\x91\xeb\xc7\x76\x85\x2e\x69\xdc\x9b\x9a\xd7\x42\x91\xc3\x55\x46\x5d\x95\x31\xf6\x8a\x65\x22\x12\x4a\xf1\xfc\x29\xbc\x46\xb0\xfb\xc0\x4d\xca\x65\x13\xba\xa7\xeb\x2b\x67\xee\x5f\xfd\x36\x87\x85\xdb\x01\x94\x71\x20\x48\xc2\xaa\x67\x9c\x5d\xb0\x31\x60\xfd\x04\xba\x4d\xbb\x1c\x16\x2b\x6b\xd5\xaf\x58\x58\xb1\x6d\xe1\x22\x6a\xa3\x2c\xba\xb3\xe2\x5e\xbb\xfd\x06\x8d\x93\x4e\x2a\xbf\x8a\x4c\xf7\x6c\xf1\xd8\x94\xf2\xd9\x1f\x64\x7a\xc1\x3f\x99\x1a\x3e\x17\x5c\x46\x1b\xcd\x42\x9f\x46\x7f\x67\x24\x2f\xea\xaf\x92\x9b\x42\x29\x6f\x58\x78\x0d\xaf\x9d\x58\x59\x3f\xe2\xd1\x7d\x39\x4c\x1f\xc5\xdd\xbd\x94\x5f\xed\xe5\x82\x7b\xc8\x9c\x4d\xd3\xd9\x38\xf1\x01\x70\xda\x79\xb9\xe0\xd3\x44\xd5\xe7\x93\x66\xa0\xaf\xd7\xb4\x50\x01\x11\x15\x74\x5a\x3a\x5d\xe7\xa8\xa0\x7b\x99\xd2\x0c\xed\xa3\x0a\x83\x78\x06\xb7\xed\xe7\x4e\xe8\x2f\x23\xf4\xd7\xd2\xcd\xd3\xc5\x0a\x2e\x32\x25\xdd\x43\x83\x46\xb4\x0f\x54\x0f\x6c\x97\x40\x95\xbe\xb9\xe1\x97\xde\x38\x3e\xde\x0b\xda\xb3\x1d\x3e\xb2\xdb\xf0\x18\xd8\xa2\x4e\xc5\x55\x16\x3f\xf8\x9a\xa1\x40\xd5\x6b\x9a\x6e\x53\x6a\xa1\xa1\x91\xad\xea\xa0\xf3\x12\xe8\xd2\x66\x5d\x64\xa5\x9d\x0a\xca\x59\x70\x4a\x99\x43\xa0\x66\x57\x4d\x66\x11\x6a\xcd\x0e\x51\x94\xb3\x38\xd1\xae\x5d\xc3\xd7\xbc\x72\x87\xaa\xec\xab\xa4\x4c\xa3\x44\x8f\x62\xef\x9a\xf8\x71\x6f\xbf\x75\x29\x7a\x78\x90\x63\x9e\xd5\xff\x5a\x31\xae\x86\xcc\xdd\xe7\x82\x3f\xf2\xbc\xe1\x7d\x64\x6e\xab\x23\x3d\x88\x3c\x19\x3d\x85\xbb\x29\xf5\x99\x8f\x24\x77\x15\x22\x8b\x5d\x4e\x83\x10\x66\xd9\x07\xe6\xe5\xbb\x04\x50\x8a\xe4\xaa\x4c\x06\x47\x29\xac\x39\x97\x0f\x49\x2c\xe2\x41\xe5\x97\x4e\xf2\x33\x73\xb4\xb5\xe9\xfe\xa0\xbd\xcd\x7f\xfb\xae\xc5\x9a\xe6\xb1\x39\x36\xd0\x10\xe7\xae\xdf\xa9\xa5\x33\x78\xba\x3d\xe5\xff\x98\x09\x76\x27\x78\x4e\xd9\xbb\xbe\x8a\x2e\x21\x3b\x1d\xc6\xc7\xc2\x3e\x58\x09\xfb\xcb\x85\xd2\xcd\xb0\xbb\x2e\x48\x80\xd5\xb5\x76\xd8\xfd\xa2\x7b\xa9\x84\x37\x33\x55\xf7\xc2\x97\xdc\x88\xe4\x64\xca\x8b\xff\x8f\xbd\x7f\x5f\x6e\xe3\xc8\xf2\x45\xe1\x57\xc9\xa0\x67\x87\xc8\xfd\x81\xa0\x64\xbb\xdd\xdd\xea\x98\x3f\x68\x92\xb2\x39\x2d\xc9\x1c\x91\xb2\xbf\x89\xe1\x44\x77\xa2\x2a\x01\x64\xb3\x90\x09\x57\x56\x91\x84\xf7\x71\xc4\x79\x8d\xf3\x7a\xe7\x49\x4e\xe4\x5a\x2b\x2f\x85\xca\x02\x0a\x24\x28\x53\x36\xf6\x9e\x68\x8b\xa8\xac\xac\xbc\xae\xfb\xfa\x2d\xb0\xb2\xc2\x59\xa4\x50\x77\xd1\x10\x63\xc0\xc1\x0d\x8b\xc9\x8e\xa3\x43\x8a\x2e\x32\xb5\x68\xfc\xa2\x48\x14\xb6\xe2\x68\x88\x62\x5a\xea\x11\xae\x6d\x74\xb6\xc8\x81\x0e\xdf\x78\x61\xc2\x13\xb4\x98\x02\x9b\x6b\x77\x02\x1a\x36\x7a\xe2\x44\x15\x02\x21\x86\xa1\x5f\xb4\xbb\x91\x1c\x72\xcb\x0b\x99\x73\x57\xca\x8e\xc7\x33\x4f\x2c\x1f\x9a\xa0\xab\xba\x8c\x1c\xa0\x94\x16\xb5\xdc\x7f\xa5\xa9\xf2\x41\xb8\x7f\xf1\x28\xe9\xce\xcb\x30\x2d\x06\xd7\x19\xae\x18\x5f\x12\x17\xed\x07\xed\x7a\xa0\x96\xba\xfc\x45\xfa\x20\x3a\x92\xfc\xb3\x88\x1d\xd8\xaf\x5c\xef\x55\x65\x2d\xae\xf7\x06\x31\x5d\x31\x38\x7d\xc6\x27\x5c\x2a\x53\xad\xbb\xa2\x76\x65\x1f\x72\x47\x1b\x83\x49\x1d\xda\xc6\x58\xdb\x95\x1c\x03\xdd\xe2\xc6\xe8\x4c\x72\x4f\x23\x1b\x92\x76\xb2\xb6\xa3\x28\xcb\x94\x3b\xf7\xcc\xfe\xdc\xfd\xad\xcc\x9e\x0d\xf5\x02\x44\xa5\x6c\x2a\xb2\x1b\x90\x05\xda\x7a\xba\x11\x89\xbe\x3f\x1a\xdc\x58\xdb\x9d\xfd\xf7\xb9\x1a\xeb\xd6\xc8\xc1\xb7\x46\x84\x33\x90\xa4\xcd\x99\xb6\xfb\x40\x0f\xfa\xe5\x9b\x26\x47\x0c\xa3\x44\x19\x09\xaf\x6a\x4a\x4e\xb2\x13\x06\x33\x34\xaa\x9b\x72\x36\x2f\x04\x55\xb5\xc1\x87\x43\xe8\x06\xee\xf9\x98\xf7\x49\x9c\x16\xf7\x55\x99\x48\x5d\x3d\x6e\xaa\xdd\xf1\x68\xfc\xaa\xa5\x48\x58\xea\x83\x6b\x92\xa6\xd6\x1e\xe0\x5f\x07\x28\xe0\x74\x41\x81\x81\x67\x58\x8f\x31\x25\x86\x6c\xfb\x35\x9d\x01\x0e\x39\xee\x4c\x8f\x37\xbb\x31\xb5\x4c\xdd\x13\xe7\xfd\x44\x65\x02\x8e\x6c\x24\x1a\x84\xef\xf2\xac\xd4\xc6\x10\x28\xd1\xf9\xb8\x39\x22\x0c\xc2\xc1\x6c\x25\x0a\x31\xc6\x67\x4e\xf0\x74\xbe\x23\x18\x7e\xee\xf8\x3a\x65\xa3\x80\x7d\x30\x97\x63\x70\xd7\x55\xec\xe3\xf9\xa9\x49\x9a\x6b\x6d\x8f\x2a\x19\x07\xe0\x96\x0c\xc7\x8f\x33\x2a\x16\x1d\x13\x99\x69\x35\x81\x00\x11\x9e\x41\xf0\x92\xfd\x35\xf5\xc1\xc4\xd9\xd7\xa5\xfc\xc5\x1f\xfd\xb7\x3a\xe3\xc5\x65\x0d\x27\xe2\x38\xcb\x84\x31\x5d\xba\x7e\x57\x4b\x24\x03\x41\x04\xd7\x25\x98\x0d\x39\x0e\x54\x97\x94\x10\x65\xa5\x71\x67\x0b\xe2\x0a\x86\x8d\x09\x6b\x3e\xc9\xc7\x9e\x96\x39\xc0\x36\x7d\xcf\x6f\x01\xa6\x25\xfc\xc6\x4c\xa6\xe7\x00\xfa\x4a\x92\xe1\x0c\x9c\x80\xb2\x62\xb3\x3a\x9b\x32\xc1\x8d\x44\xf8\xd1\x49\xc9\x55\xd5\x7e\x8f\x62\xbb\xf0\x64\x38\x0b\xd6\x5c\x94\x33\x69\xd0\x59\x05\x93\x90\x6a\xb2\xb3\x15\xec\x6c\x05\x3b\x5b\xc1\x56\x6d\x05\x43\x86\x72\x66\xb8\x94\x10\x2e\x30\x12\x4c\xfc\x5c\xf3\xc2\x9d\xd4\xf0\x78\xa1\x6b\x8a\xde\x88\x3a\x25\x49\x6c\xc8\x2c\xdd\x76\x3e\x09\x4a\xa8\xa4\x82\x40\x7d\xe5\x84\x06\x01\x4c\x50\xb4\x4f\x61\x9c\xb0\xc7\x9a\xa2\x3c\x90\x60\x6e\x6b\xec\x0f\xb7\x4f\x84\xae\x97\xcd\x13\x9d\x4c\xa2\x87\xad\xa2\x31\xe0\xf7\x5a\x7d\xa0\x7b\x7a\xec\xd1\x03\xda\x0b\x9c\x6c\x16\xe8\xb6\x93\x6d\x7c\xd7\x31\x14\x41\xf0\xbb\x8f\x61\x61\xd5\xa1\xa7\x0c\xd1\x2d\x46\x8f\x23\xf5\x01\x6a\x18\xc9\x65\x3d\x70\x7f\xaa\x69\x0a\xf2\xa7\x9a\x7a\xc9\xf6\xc3\x5b\x66\x5b\x05\x0c\x58\xf8\x6c\xea\xf2\xde\x8a\x72\xd4\xee\xec\x47\x51\x8e\x7c\xa8\xba\x43\x2a\xf9\xfe\xea\xea\x82\x41\xfb\x8d\x79\x7c\xb4\x9c\x1f\xea\x14\xec\xcf\x52\x83\xc4\x25\x5f\x8a\x7f\xe3\xac\xac\xe3\x80\xc1\x68\x95\xd7\xf0\x4f\x3b\x83\x44\xe8\x89\x0a\x23\xf8\xf8\xe1\xed\xea\x23\x61\x1b\xb8\x14\x7b\x4c\x71\xe6\x25\xc4\xbf\xd7\x65\xe1\x13\x87\x41\xf8\x20\x2e\x89\xae\x5b\x38\xb7\x40\xc0\xd9\xff\x6e\x84\x59\x61\x18\x1d\xa4\xb5\x53\x26\xfc\xb8\x2e\x8a\x01\x1b\x03\x58\x93\xa9\xc4\xdc\x29\xb4\x76\x57\x87\x8c\x5d\xef\xfd\xef\xeb\x3d\x36\x13\x5c\xc1\x25\xde\x4c\x80\xc5\x05\xe8\xdc\xf3\x60\x1d\x0b\x97\xb7\x79\x8a\xad\xae\x09\x9d\x0c\x58\x21\x6f\xc4\x6b\x36\x11\xd5\x80\xcd\xb5\xb1\xff\x5b\x57\x03\x92\x63\x07\x0c\xc2\x36\x06\x6c\x2a\x78\x3e\x60\x7a\x8e\x0c\xe5\x51\xa3\x5f\x77\xd0\xfa\xdc\xed\x2d\x5d\xec\xed\x5e\x6a\x22\x83\xcb\x63\xfd\x0e\x24\x57\xba\x89\x76\xdd\xf1\x07\x5f\x1b\x8c\xc0\x3d\x56\xad\x69\xb8\xeb\x69\xa1\xbf\x2b\xea\xd7\xcf\x0f\x99\xa9\xcf\x9a\x27\xfc\xad\xeb\xbd\x89\xa8\xb0\x8a\xa6\x53\x5b\xdc\x03\xfc\xfb\x7a\x6f\xc8\xae\xf7\xae\xf7\xd8\x3e\xf0\xca\x83\x1e\x83\x03\xe6\x9b\x1e\x21\xf2\xe5\x68\x98\xf8\x83\x33\x89\xa2\x2c\xbf\x34\xd2\x21\x63\x27\x2e\x3a\x1d\x14\xa5\x12\x7a\x50\xae\x34\x83\x7b\x09\x4b\x33\x28\x1d\xf5\x0b\x1a\x58\x51\x84\x5f\x4c\x73\x2e\x31\xd3\x87\x79\x77\x31\xa8\xf6\x7b\x68\x27\xb2\xef\x50\xb0\xf1\xe1\x92\x66\x61\x52\xcb\x76\xbd\xc7\x8b\xe2\x7a\x0f\x59\x4a\x97\x4e\x42\xb2\x24\x67\x29\x25\x49\x97\xec\x52\x14\xe3\x34\x13\x4d\xe4\x78\x10\x31\xed\xbc\x3e\x76\x2e\x91\x55\xda\xd7\xa1\x0d\x62\xb0\x15\x1b\x7b\x1e\xcd\x18\xb3\xa7\x2d\xed\x84\x87\x1b\x7c\xd4\x7f\x53\x69\x95\xce\x63\x59\xcd\xfb\x78\x4c\xff\x5a\xb4\xaf\x41\xfa\x2c\xc1\x1c\xb0\x3b\xa4\x76\x18\xd9\x31\x20\xd1\x3c\x22\x86\xa5\xbe\x5f\xf4\x5c\x8e\xdb\x2e\x55\xce\xe9\x71\x11\x45\xf8\xb1\x19\x08\xb3\x11\x4d\xe8\x4b\x4e\xd3\x4c\xbb\xc1\xb1\x69\x44\x8e\x77\xe0\x8d\x24\x09\x02\x8f\x5c\x2c\x71\x46\x61\x19\x60\x5e\xa7\xf3\x8b\xd1\x99\xd8\x47\x99\x0b\xcc\x2d\x33\xea\x45\xc5\x8c\x9c\x28\x48\x98\x53\xd5\x00\x14\x28\x8a\xd9\x65\x79\x8d\xf8\xe6\xc2\xa0\x4e\x39\xd7\xc6\xc8\x51\xb1\x40\xa4\x99\x4c\xcf\xe6\x76\xf9\xd7\x29\xd5\x1d\x42\x01\x9f\xcb\xef\x3a\xcc\x4b\xc7\x17\xe7\xf8\x28\x45\x3b\xdd\x43\xc2\x48\xd5\x51\x50\x73\x34\x57\xab\x47\xcc\xea\xa2\x92\xf3\x02\xb7\x92\xac\x54\x50\xbc\x3b\xa4\x1d\x41\x98\x4b\x16\xfb\x21\x44\x30\x0b\xc7\x97\x41\xd5\x33\x88\x77\x8a\x09\x82\x54\xf0\xbe\xef\xdd\x87\xb6\xd3\x4e\x3c\x56\x98\x70\x5f\x02\x1a\xdd\x7d\x44\xe0\x31\x3a\x1f\x48\x10\x80\xf4\x0a\x59\x85\x13\x13\x65\x71\xc0\x3a\xd9\x43\x85\x29\x45\x24\x33\x1d\x7b\x1b\xbb\xa8\x68\xb8\xd0\x5a\xdc\x8a\x72\x51\x4d\xf1\xac\x6c\x7b\x5e\x2b\xe6\xb4\xe4\x4b\x0c\x6b\x8e\x46\x94\xd6\xf8\x97\xc6\xe3\x7d\x14\xbe\xe8\xb2\x3f\x6d\xc3\x6b\x65\x5b\x1f\x8d\xb5\xbe\xde\x5b\x8e\xbd\x8e\x48\x25\x7b\x31\xd6\xfa\x05\xf2\x5d\xc8\xd4\x8a\x76\xbd\xab\xeb\x27\x17\x15\xd7\x88\x89\x5b\xa2\x95\x8f\x96\x14\xbb\x78\x61\xaa\x92\x51\xaa\x61\xc2\xe8\x18\x47\xc6\x83\xf4\x9f\xb4\x38\x0e\x19\x7b\xaf\x2b\x50\xdc\x31\x75\x96\x0a\x6f\xc7\xd6\x09\x62\xf9\xf6\x59\x43\x08\xb1\x32\x15\x70\x71\xd2\x3e\xec\xfe\xf2\x82\x65\xdc\x88\x01\x1b\x89\x8c\xd7\x86\x0c\xb1\x4e\xf3\x20\x88\x22\x7b\xe1\xad\xe0\x5a\x69\x1c\x77\x6c\x11\x58\xa4\xc7\xb9\x33\x43\xee\xcc\x90\x3b\x33\xe4\x96\xcd\x90\xe8\x3a\x51\xb9\x63\xf5\xde\x0e\x69\x19\xdb\x83\x0c\x70\x69\xea\xb4\x33\x20\x2e\x19\x10\xbb\x55\x9f\xcd\xec\x87\xab\xd6\xbb\x2f\xeb\x58\x19\x02\x45\x56\x22\x17\x71\xc2\xd8\xd9\x3d\xcf\xa0\x94\x10\x4a\x7a\xde\x7a\x11\x8f\x2c\x32\x65\xd8\x7d\x8b\xad\x97\x1d\xcd\xdc\xc1\x33\xa2\x5a\x6b\x9b\x50\x8f\xb1\x99\x06\x93\x5d\x7c\x57\xd0\x54\xd0\xb0\x2a\x35\x27\xfe\x90\xb3\x94\xb6\xed\x46\xc2\x5c\x2f\xab\x50\xc7\x82\xad\x9a\xc7\x16\xe7\x90\x9a\xc0\x06\xa2\x8c\x55\xc5\xfa\x48\x32\x51\xbb\xa0\x37\x90\x7c\x29\x5a\x0a\x5c\xa7\x50\x73\x27\xad\xdc\x1d\xbb\x49\x1d\xa8\x00\xc5\xe1\x2c\xab\x83\x14\x55\x1d\x14\x33\x96\x8b\xb9\xc0\xba\x0c\x5a\x45\xf4\x07\x62\x8a\x62\x3b\xdc\x4c\xe7\xc4\xae\xad\x3e\x03\xa1\x23\x86\x89\xfb\xb9\x28\x21\x24\x26\x8f\x6b\x0c\x10\xc5\x45\x74\xca\xf4\xa4\x03\xd0\x3d\xc4\xe7\x8f\x16\xec\xe3\x39\xc8\x0a\x66\xaa\xef\x8e\xa6\x32\x77\x46\x25\x44\x2b\xa9\x34\xfb\xb9\x96\xd9\x4d\xb1\x60\x85\xa8\x20\xdc\x47\xe5\xb8\x1e\x04\x9a\xe5\xa9\xbf\x2c\x63\xb7\x2e\x64\x2c\xd0\xc7\xde\xff\x70\xc5\xbe\x0d\x1f\x14\xf7\x24\x8a\x60\x41\x7e\xf8\x7a\x5e\xca\xdb\x65\x0b\x64\x2e\x32\xca\x67\xe4\x4e\xb7\xe0\xd2\x08\xa8\xaf\x3a\x86\xce\x72\x31\xaf\xab\xc5\x00\x83\xd5\x59\x21\xc7\xa2\x92\x33\x71\x54\x8a\x5b\x9d\x51\xfe\x93\x5d\x38\x48\x98\xca\x2a\x65\x8f\x28\x60\x13\x94\x76\x7c\x09\x02\x85\xcd\xc1\xa4\xd5\x10\x79\x79\xe9\x80\xd2\xa0\x23\xcc\xdb\xd5\x56\x9a\xb3\x0c\xa3\x63\xd0\xce\x2a\x9a\x0a\x50\xda\x49\x96\x3b\xc9\x72\x27\x59\x6e\x41\xb2\x7c\xa4\xe8\x18\x51\xc6\x6d\x4b\x8e\x09\x96\xc2\x5b\x8c\xe4\x31\x7e\xf3\x78\xec\x4f\x2c\x39\xc6\xdc\xf5\x11\x82\xe3\xf2\x6a\x07\xeb\x45\x97\x00\xd6\xc7\x37\x52\x69\x7f\x1e\xc0\xf8\x04\xe9\xef\x43\xf6\x81\x28\xeb\x03\xac\xbf\xfd\xcc\x23\xdb\x8d\xc7\xda\x31\x87\x1d\x73\xd8\x31\x87\xdf\x22\x53\x6a\x17\x93\xb4\x29\x63\xd8\x86\x39\xa1\xb7\x29\xe1\xf3\x37\x23\x74\x84\x93\x9f\xd9\x9f\x53\x60\x0e\x3e\x66\x7d\xf8\x9d\xa8\xa0\xd5\xfe\x01\x9b\x89\x6a\xaa\xf3\x40\x35\x9a\x11\xe6\x8c\x5d\x4a\xe5\x90\xca\xa4\xbd\x27\xf3\x3a\x4a\x70\x0a\x71\x19\x0e\xb0\x85\xbb\xba\xd5\x80\x80\x27\xca\xa4\xa3\xf0\x09\x83\xd4\x9b\x2e\x44\x32\x0a\x2e\x74\xfd\xc2\x6a\x5a\x02\x7d\xdb\x63\xbd\x61\x4e\xc7\xce\x5e\xf3\xdb\xda\x6b\x3a\x72\x04\x3e\x9e\x9f\xae\x26\xdc\x50\x7e\xd1\x74\x00\xc6\xad\xcf\x67\x01\xe9\x2a\x71\x76\xd8\xf9\x18\x02\x5a\xd1\x1b\xb8\x60\xd7\xf0\xd6\xf5\x1e\x04\x9d\x59\x4e\x7a\x4d\xc7\x90\x32\x90\x20\xba\x40\x92\xcc\x32\x2f\x31\x23\xc1\xb0\xeb\xbd\x9f\xe0\x56\x8d\x21\x71\x86\xdd\x89\x52\x90\x58\x37\x13\x0e\xda\x02\xaa\x2e\xe3\x51\xdf\x86\xb4\xd9\x89\x4f\xd5\xd9\x74\xb5\xf0\x48\xbc\x25\x21\x3f\xd2\x83\xb6\xf0\x48\xdc\x48\xe2\x21\x01\x41\x1a\xf0\xca\xed\x3a\x44\x91\x47\x77\xce\x9a\xe4\x23\xfa\xc6\xbc\x30\x02\xeb\x38\xdf\x49\x23\xd2\x19\x50\xb9\x50\x32\xf5\xd9\x53\xf8\x1d\x82\x5d\xc8\x59\xbe\xfa\xab\xd8\xcf\x20\x7c\x0e\x3f\x0f\x5b\x0f\xf9\x81\x3c\xcc\x03\x07\x66\xe9\x7b\xee\xbf\x32\x46\xec\xf5\xca\xd5\x1c\x8d\x48\xe5\x94\x43\xc4\x94\x9e\x4b\x05\xec\x45\x05\xc6\xad\x43\xbb\x68\x54\x43\x46\xa3\xb7\x82\x1e\x09\x6a\x15\x8d\x3d\x5a\x4e\xfb\x53\x47\x5a\x98\xb7\xde\x9d\x75\x24\x88\x35\x1b\x50\x58\x81\x03\xc5\x77\xb1\xa2\x50\x81\x01\xec\x84\x4c\x67\x60\xc1\x6c\xd8\x08\x9b\xe6\x2a\xd0\x58\x10\x5d\xc4\x30\xcb\x4f\x4a\x51\x2c\x5c\x2c\x89\x40\x30\x19\x34\xfb\x41\x87\x76\xf5\x62\x97\x2a\x42\x02\x23\xb6\x62\x39\x93\x6a\xb9\x7b\xaa\x1c\x20\x15\x33\x73\x89\x88\x69\xb2\x1a\xb2\x37\x90\xe7\x86\xa5\xb2\x06\xec\xc3\xb7\xc7\x27\x2e\x65\x1c\xcc\x87\x90\x80\x52\xea\x82\x60\x16\x85\xd2\xf5\x64\x0a\x3f\x50\x8c\x48\x25\x8b\xc2\xa5\x26\xe3\x98\x74\xad\x08\xb4\xaf\x69\x94\x4c\x64\xb0\xae\x2f\x09\xf0\x01\x3b\x69\x9c\x42\x04\x60\x09\x32\xdc\x02\xc8\x29\x4a\x6f\x90\x05\x18\xc4\x37\x3c\x5e\x0f\xd7\x3b\xdb\x8a\x7d\x17\x21\x68\xb5\x6c\x85\xdc\x50\x82\x2f\x27\xcd\x98\xb6\x1b\x6b\x00\x83\x3f\x9c\xd6\x7d\xb5\x61\x1a\xfb\xf0\x77\xc3\xc4\xc2\xad\x44\x7b\xac\x9c\xd4\xa5\xcf\x80\x5c\x6b\xac\x8e\x0d\xd5\xdf\x92\xfb\xbe\x79\x72\x70\xbc\x10\x2b\x0c\x52\xc8\xad\x00\x58\x24\xee\xe3\x4b\x04\x2f\x09\x45\x11\x6c\xed\xb2\x7a\x61\x98\xe1\x63\x2c\xd0\x65\x4c\x4d\xb5\x2d\x5c\x0c\xd6\x94\x3b\xa8\x47\x6f\xa3\x1e\x30\x71\x6b\x89\xfe\x18\x1f\x14\x54\xd6\xa0\x7f\xf0\x54\x19\xc5\x81\x59\x12\xac\x9a\xc1\xdc\xf6\xa7\xd0\x59\x9b\xf8\x6e\x7c\xdf\xed\x5e\xe1\xcc\xed\xc4\x33\x3d\x1b\x49\x85\xab\x05\xcb\x0e\xdf\x1c\x36\x0f\xaa\xbf\xb9\xcb\xa4\x00\x96\x31\x8c\x80\x0a\x8c\x73\x78\x23\xa2\x82\x18\x7d\xae\x05\xc6\xa2\x61\xe9\xb1\xf6\xbb\x98\x15\xcd\x2b\xd6\x98\xbe\xfd\xf9\x48\x97\x6c\x29\xc6\x3d\xe1\x0c\x49\xde\xce\x68\xe9\x5a\x2b\x73\x1e\x8e\x2b\x91\xd4\xa8\x6e\x34\x7c\xc3\x7b\x62\x40\x15\xc3\x22\xd9\x05\x61\x67\xfb\xcf\xfa\xca\x6e\x80\xc5\x66\x15\x64\x88\x45\x17\x0a\x90\x15\x05\x1c\x68\x80\x37\x8d\xd7\xa4\xb1\x54\xde\x97\x11\x3f\x4f\xad\x97\x89\xcf\x7c\x92\xfc\xb7\x4e\xcf\xba\x64\x01\xf3\xa8\xd8\xc3\x58\xa6\xfd\x24\xf1\x87\x9b\x83\x2a\xae\xcb\xa6\x88\xe3\xd5\x3a\x96\x6c\x7b\xeb\xf5\x99\xad\xd5\xd2\x42\xb5\x59\x8f\x26\xf8\x7e\xdb\xf8\xa4\xd4\xc6\x90\xb1\x10\x2d\x32\x1f\x1c\xf8\x6d\x7b\x49\x57\x34\x0e\xec\x87\x78\x76\x23\x91\x45\x83\x0b\xd1\x4a\xe4\x94\x58\xbb\x20\x2e\x35\x16\x40\x99\xfa\x96\xec\x04\x33\x04\x45\xf5\x6f\x6a\x11\x5d\x86\xcf\x23\x90\xdf\x64\x8a\xd0\x0a\xe3\xe0\xd2\xdb\x8f\x2a\x5e\xbc\xda\xf4\x76\xbd\xb7\x61\x46\xc3\xba\xa1\xad\x2d\xfc\x19\x01\x73\x7c\x01\x06\xf8\x3e\x82\x4c\x7c\x9a\xbe\xb7\x07\xd1\x1e\x84\xe2\x42\xe7\xc7\xf4\x2c\xa5\xc4\x39\xb9\x21\x2a\x06\x32\xf5\xef\x02\x40\x37\xf7\x6f\xef\x6a\x09\xee\x6c\xe1\x9f\x85\x2d\xbc\x65\x1c\x4e\x96\x3b\xdf\xf6\x00\xfd\x08\x9e\xba\xb8\x39\x15\x34\xaf\x4b\x52\x09\xdc\xf5\xdc\xf2\x7c\x1e\x52\xc1\xbc\x17\x15\xea\x5b\xd5\x3c\x6d\xb0\x6a\xd2\xa3\x2d\x8d\xe8\xc1\x36\x7a\xd7\x79\x30\xcd\x77\x91\xde\xf5\xe6\xf9\x1e\x03\x4d\x17\x86\x73\xc2\x54\x27\xe5\xa6\xa3\xbf\x2b\x09\xf7\x1b\x97\x84\x7b\xfc\xb6\x3d\x44\x2a\xed\x23\x18\xec\x6a\xcb\x3d\x35\xf7\xc1\x52\x11\x8e\xf7\x3c\xae\xc2\xce\x83\x6b\xd0\x6d\x40\xb0\x12\x65\xe9\x1e\x48\xb4\xd2\x5e\xc5\x44\x19\xba\x8d\x24\xcf\x46\x64\x86\x6d\x75\x05\x65\xda\x3f\x88\xf1\xde\x60\x6f\xc6\xef\x3f\x74\x56\x7a\x88\x1f\x26\x20\xb4\xe7\xa2\x64\x05\x54\xc1\xf2\x19\xfe\x1e\x3f\x3b\xd4\x73\x22\xa3\x9d\x11\x55\x04\x38\x45\xc3\xfd\x9b\x7d\x4a\xa7\xd3\xcc\xb8\x83\x51\x57\xec\x9d\x54\xee\xcb\x3d\x61\xcb\x67\xe1\x8d\x04\x01\xd1\x77\x8f\x1e\xab\x2f\x2d\xd6\xbb\xac\xd8\xd2\x62\x27\x40\xdd\x9d\x2a\x5a\x69\xac\xf5\x16\xf4\xca\xbf\xad\x20\x76\x90\x1d\x58\x08\x5e\xaa\x46\xe0\xaf\x27\x29\x99\x56\xa6\x9e\xa1\xa7\xd9\x12\x78\x68\x6f\xe7\x54\x25\xab\xbd\xc1\xf4\x47\x0b\x56\x83\x31\xdb\xd2\x8f\x4b\xa8\x3b\x17\xe5\xb0\x3d\x40\x80\x58\xa5\xa6\xff\x3a\xd8\xab\x60\x59\x4e\x2e\x3e\x7e\xac\x64\x41\xa6\x80\x0b\x51\x66\x96\xdf\xa5\xca\xec\x62\x7b\xc6\x6f\x05\x54\x6d\x3f\xb9\xf8\xc8\xea\xf0\x26\xdb\x8f\x4b\x9e\x41\x45\x90\xb9\xef\x0c\xf3\xfe\x5c\x4e\xe6\xc9\xc5\xc7\x03\x2a\x05\x03\x85\x92\xb0\x52\xdf\xdf\x1c\x8c\x7d\xc8\xc6\xab\xa2\x42\x68\xd1\xdc\x1c\x46\x94\x4b\xd1\xac\x4d\xc3\x7c\xde\x1f\xc9\x7d\x13\x79\xab\x53\xf2\x0b\x55\xb0\x57\x10\x85\x35\x34\x61\xb9\x3a\xc7\x60\x8f\xce\x48\x37\x61\xa0\x57\xfa\x6f\x9f\x1b\x6f\xd7\xfe\xf9\x0d\xb1\x9b\x31\x60\x9b\xec\xe6\x80\x89\xe1\x64\xc8\xfe\xfc\x32\x4e\x37\xe5\xca\x7f\x8a\xca\x43\xe2\xe9\x56\xfa\x8e\xfd\xf9\xe5\xff\x42\xdf\x8e\x69\x76\xb4\x69\xfd\x8f\x35\xc5\x4c\x3a\xea\x29\xc2\x6d\x6b\x94\x24\x03\x08\xcb\x04\x01\x5f\x35\x88\xe5\x1d\x6a\x0d\x62\x75\x51\xc7\xed\x0c\xa2\xe0\xa6\x02\x52\x91\xae\xdb\x5d\x34\xea\x76\x77\x1c\x70\x47\xf7\xda\x14\xf9\x6f\x3e\x06\xbf\x49\x87\x9d\x2f\xaf\xd4\x05\x94\x3b\xd5\xe3\x8a\x8c\xe9\x4b\x24\x0d\xdc\x46\x5c\x4d\x7a\x45\xde\xf6\x28\x01\xde\xa7\x82\xca\xba\x3a\x29\x0f\x58\xeb\x6f\xbe\x5e\x47\x3b\x60\x0f\x12\x02\x15\x50\xf1\x28\x31\x99\xfb\x2a\xa8\xce\x19\xd8\x8c\xb4\xd8\x99\xad\x76\x66\xab\xcf\x59\x71\x58\x32\x5b\x6d\xdb\xd0\xbd\x1d\x95\xa4\x8f\xdd\x2a\xbe\x3f\x64\xc3\x2a\x7d\x75\x4d\x7b\xab\x9f\x9f\x05\x0b\x88\x4d\x5f\x7b\x55\x90\x5a\x3e\xd9\x8c\xa0\x22\xd3\xa1\x56\xc5\xe2\xc1\x93\xdb\xa2\xe9\x0b\x29\xf6\x66\x3a\x63\x58\xe1\x34\xa5\x87\x48\xd3\x10\x50\x07\x4c\x33\x44\xda\x61\x41\xb9\x94\x5c\xbf\xa6\x90\xce\x06\x12\x86\x8b\x92\x09\x35\xfd\x88\xb9\x13\x55\x7f\xbc\x94\x1c\x6f\x44\xc7\x2a\xac\x2d\x85\x58\x6f\xb2\x18\xfd\x2a\x22\x76\x2f\x12\xcf\xaa\x9a\x17\xd1\x1a\x79\x49\x20\x2c\x56\x7c\x0d\x36\x5a\xab\x55\xe5\x96\x1f\x50\x60\xd9\xb8\x0a\xcb\x2e\xd0\x00\x90\x8c\xb9\x2b\x57\x68\xfb\xf3\x45\x9c\xb1\x5c\x37\x41\x0f\x96\x14\xc4\x38\xe3\x10\xc6\x0b\x15\x18\x2d\x27\x2e\xb5\xbd\x85\x15\x15\x6f\x43\x56\x43\x1e\x69\x7a\xc9\x29\x51\xae\x2b\xaa\xc5\x68\x3b\xa2\xef\xc2\x0c\x0e\xa1\x14\x13\x33\x0b\x55\xf1\xfb\x88\x52\x90\xb1\xbb\x39\x36\xd3\xd3\x75\x88\x15\x9d\x13\x05\x9d\x37\xf0\x1f\x7e\x39\x12\x15\xdf\xb9\xa4\x77\x2e\xe9\xed\xb9\xa4\xe9\x48\x9d\x51\xac\xce\x3b\x51\x95\x32\xbb\xec\x00\x5d\x4b\xb5\x8a\x02\xaa\xac\x7a\xe4\x4c\x4b\x4c\x2b\x88\x02\xb6\x0d\x31\x24\x78\xb9\x14\x80\x5a\xc4\xb5\x0a\x48\x98\xda\xb7\xa4\x5c\xdc\xf3\xd9\xbc\x10\xac\x10\x6a\x82\x80\xa5\x3f\xd7\xa2\x86\x6b\x9b\x15\xba\xce\xd9\x4c\x18\xc3\x27\xf6\x46\x53\xcd\x6e\xc8\xc7\xfe\xcf\x8b\x4b\x14\x3b\x0b\xcd\xf3\x11\x2f\x2c\xb9\x2b\x59\x59\x2b\x05\x01\x7b\x75\x65\x64\x2e\xb0\xba\x31\x60\xec\x1d\x0c\x1b\x09\x10\xd7\x64\xf4\xb9\xde\xc3\x82\x66\x21\x1b\xdc\xac\x2f\x5f\x8b\x13\x7d\x9f\x3c\xe3\xd1\xb3\xb6\x02\xe7\x9f\xa5\x20\xc3\x68\xf9\xa4\x62\x18\x0b\xae\x53\x75\x50\x06\xd4\xc9\x65\x27\x71\x6e\x3e\x8f\xeb\xcf\xf9\x9b\xcd\x9d\x25\x2a\x43\x15\xda\x88\x52\x0a\x13\x72\xf9\x11\x0c\x1d\x3b\x7a\xa4\x8d\x7c\xb9\x0a\x3d\xae\xfa\x31\x9a\x4f\x7e\xb4\xaa\x48\x97\x39\x2e\x6e\xe3\x96\x8b\x0c\x75\x73\x51\x1e\xce\x35\x29\x59\x00\xee\x5f\xe8\x11\x2f\xdc\x0a\xee\x83\x55\xe7\xe7\x9a\x43\xed\xe8\x83\x21\x7b\x57\x5b\x46\x59\x2c\x98\xb8\xb7\xa7\x41\xde\x52\xe1\x14\x34\x9f\xc2\x17\x1e\x32\xcd\xa1\x27\x8a\xff\x49\xdf\x0a\x33\x5c\x39\xb5\xd4\x9c\xfc\x5c\xa2\xa3\xb0\xe1\x44\xe2\x15\xdb\xd6\x7c\x36\xa7\x26\x1d\x02\x54\xaa\xd5\x52\x92\xb0\x13\xa4\xfc\x52\xf0\xa5\x8d\xed\x4d\x59\x36\xb8\xc0\xde\xe6\x86\x3b\xd6\x65\x8d\x5c\x7d\x62\x13\x8d\x7c\x69\xea\xe5\x49\xd1\x5c\xc8\x82\x98\x93\x75\xd2\x99\x6c\x72\x90\xa5\xb6\x77\x1a\x1b\x93\xeb\x1a\xf7\xea\x01\x77\x1f\xc8\xad\x8d\xf2\x61\x44\xd3\x73\x1c\x20\x70\x60\x6e\x8a\x4c\xe9\xd2\x51\x30\x42\xd7\xf8\xdd\x11\xd3\x1e\x57\xb3\x77\x00\x5a\x97\x01\xd5\xd7\x57\x8f\xe3\xd3\xd0\xb0\xd7\xe9\x11\x70\xa5\x96\xed\x2f\x56\xbc\xcc\x80\x62\xa1\x41\xd8\xc4\x3a\x41\x28\xdb\x6e\x2f\x71\x00\x78\x75\x75\x6b\x9c\x69\xaa\xa5\x4c\xb1\x11\x37\x58\xc0\x39\x9c\x4d\x13\xbc\x2b\x3b\x53\xe3\xce\xd4\xf8\x19\x9a\x1a\xdd\x93\x16\xec\xfe\xef\x25\x62\xce\x50\xba\x72\x04\x4c\x9a\x05\x8a\x12\xd9\x23\xeb\x32\x54\x3a\x7c\xae\x71\x75\xab\x29\xec\x3a\x63\xa5\x69\xd4\x1f\x7c\xb2\x50\xbb\x35\x83\xfc\xd4\xf1\x76\x38\x9c\xd5\xb6\xc8\xd5\x43\xf6\x45\xef\x7b\xb3\x30\xff\xc6\x92\xf9\xd2\xee\x00\x49\x11\x5d\xcc\x0f\x4b\x0e\x8a\x12\x32\x17\x80\xd6\xac\x93\x2b\xe1\x99\xdf\xf5\x96\x2c\x59\x70\x53\x5d\x95\x5c\x19\x18\x50\xb7\x63\xb3\xd9\xc6\x27\x6b\x34\x5c\x9e\x99\x9f\x57\xe5\x5b\x0b\x4a\x8b\xb7\x0a\x2e\x9d\xb0\x4a\xbb\x3a\x62\x5b\x71\x53\xa2\x2e\x9e\x94\xd2\xe0\x01\x92\xff\x69\x3d\xe3\xea\xb0\x14\x3c\x87\xfc\x48\x71\x3f\x2f\x38\xe5\x67\x91\x11\xca\xb2\x82\x5c\x54\x5c\x16\x26\x3a\xe9\x61\x26\x9b\x24\x29\x96\x3e\x49\x11\x65\x0b\xf8\xcb\x51\x14\xbf\x4c\x2f\x0c\x2d\xa0\xff\x46\x1a\x86\xbe\xd7\x85\x6d\xfa\x18\xc2\x56\xec\x5f\x95\x96\x5b\xbf\xc1\x64\xda\x8f\x0a\xea\x1f\x1e\xa4\xbe\x53\x25\xcb\xad\x83\x29\xa2\x79\x4e\x1d\x6d\xf0\x1f\x79\x90\xc5\x67\xa3\x40\xd6\x15\xc2\x60\xc0\x7b\xde\x45\xb9\x3e\x4f\xd1\xac\x23\xca\x15\x7e\x5e\x4e\xfb\xfa\x74\x21\xaf\x6b\xf4\x91\x5d\xdc\xeb\xa7\x96\x29\x3f\xff\x38\xd8\xc7\x0b\x13\x69\x7f\xe7\x8a\xc6\x4b\xa4\xd9\x39\x29\xc7\x35\x16\x92\xe1\x85\xac\x16\x8e\x29\x74\x74\xf3\x09\x63\x68\xa3\x87\x1e\x20\x64\x65\x58\xad\x77\xd5\x55\x9a\x54\xf8\xa5\xe0\xa8\x8c\x2b\x52\xc6\xeb\x39\xa4\x57\x87\x00\xdb\x02\x0a\x5b\x4d\x79\xc5\x66\x9b\x47\xd7\xa2\x02\xdf\x65\x7d\x59\xca\xe5\x6f\x68\x0e\xe8\x0d\xa6\xc1\x6a\x56\x1b\x44\x63\xe0\x45\x56\x17\x58\x37\x3a\x6c\x53\xd3\xea\xb0\x0f\xa6\x03\x7e\x2f\x67\xf5\x6c\xe9\x11\x55\x68\xe5\x45\xe1\x6d\x0b\x71\x40\xe6\xc1\x90\x81\x9b\x31\xdd\x2f\x26\x58\xe3\xe7\x73\x57\xdc\x63\xe1\xc8\x14\x58\x50\x7c\xc1\xa1\x96\xf9\xd7\x15\xd5\x6e\xda\xe0\x28\x4a\xad\x1d\xfa\x07\xa6\x42\xc6\xce\xca\x89\x1e\xf8\xa1\x82\x81\x0a\x50\x99\x72\x91\x59\x69\xc8\xbb\x59\x2d\x8d\xf7\x83\x94\x0a\x1f\xe6\xc8\xc1\x6e\x65\x26\xe0\xa6\x72\xa8\x2f\x80\x2b\x27\x55\x2e\x6f\x65\x5e\x07\x0b\x6c\x5c\x63\x07\x96\x7e\xe6\xe8\x5c\x53\x6f\x99\xea\x3b\x26\xb8\xdd\x14\x2b\xd1\x04\xab\x27\x8c\x8b\x60\x9e\xb6\xcd\x5c\xc8\xb2\x0c\x9a\xd7\xba\x98\xed\xe8\xa1\x67\x8a\x2b\xc3\xb8\x37\xb8\x1b\xb9\xbe\x53\x70\x3b\x28\xc0\x17\xde\x79\x65\x57\x7f\x4b\xa1\xdd\xcd\xe7\xa8\x99\x78\x29\x85\xce\x53\x60\x85\xe4\xa2\xc3\x6d\x8e\x0c\x98\x2e\x3a\x39\xba\x41\xde\x92\xe6\x9d\x61\x99\x2e\x0a\x91\x55\x70\x4a\x0c\xbb\x13\x45\xc1\x70\x0d\x30\xf6\xa0\x58\x50\x14\x64\xdb\xac\xf7\x50\x5d\x75\x65\x68\xf7\xc3\x25\xdd\x2e\xb7\xc4\xca\xe6\x1d\xa2\x78\xaf\xb8\xe8\x75\x84\x7e\x7d\x60\xf4\x60\xcf\xcb\xfc\xa9\x28\xe9\xf0\x2c\x95\x4e\x4c\xcf\x3c\xdf\x47\xe4\x92\xe8\x81\x1b\x0b\x9d\xf5\x46\xd8\x68\xf0\xeb\x5a\xc1\x07\x4f\xd4\xa0\x03\xbc\x8f\xa0\x3d\xab\xa9\x36\x22\xee\x9f\x97\x60\x99\xfd\x44\x12\x64\xb0\x0b\xfc\x1a\x9c\x1e\xef\xba\xf8\x4a\xf3\x79\x43\xbf\xb6\x4a\x6b\xb0\x0d\xc4\xe6\xe5\x10\x30\xdc\x15\x62\xbb\x4d\x2a\x16\x4c\x33\x7d\x43\xc2\x63\x7a\xf6\xa8\x28\x71\xb8\xea\xb0\x18\xc6\x32\xa9\x56\x8c\xf4\x96\xa3\xc8\x97\xe9\xf0\xa3\x82\xcb\xc3\xd8\x23\x26\xfc\xd0\x19\xf4\x08\x41\xf7\x8f\xd3\x46\x9a\x8d\xe3\xd2\x07\x9f\x63\x5c\x7a\xbb\x8d\x5b\x8d\xdf\x20\x62\xbd\x2d\x0c\xb4\xc6\x1b\x9e\x79\x9f\xd1\x52\x38\x8b\xf7\x2f\x71\x66\xa4\x9a\x14\xc1\x01\x0a\xb0\x38\xff\xb4\x23\xfc\x27\x10\x44\x00\xd3\x04\x42\x08\x21\x6f\x10\xac\x26\x45\x91\x37\x03\x4a\x18\xaf\x98\x56\x99\x38\xe8\x65\x40\x6c\xe3\x23\x91\xef\xbc\x3d\x15\x8f\xba\x03\x21\x45\xc8\x99\x97\x9c\xe6\x0e\x09\xb3\xbf\xf3\xdc\xca\x2e\x00\xfd\x62\x1a\x0e\x55\xbf\x28\xb1\xb8\x97\xe9\x19\xcc\xd9\x6a\xd0\x99\x9e\xcd\xb5\x82\xb8\xc8\xee\x38\x9c\x4f\x1c\xf4\xf3\x40\x29\x24\x19\x21\x05\xd7\x01\x36\x2d\x71\x05\xc8\xd6\x10\x76\x81\x96\x9f\x44\x08\x84\x72\xa3\xc3\x74\xb3\x32\x12\x6a\xc0\xa6\xb2\x32\x87\x73\x51\x1e\x1a\x61\x39\x2a\x1c\x44\xc5\xce\xd5\xa4\xb4\x5a\x16\xbe\xf2\xe0\xa9\x79\x4f\x4d\x63\x62\x96\x78\xb4\xa7\x05\x24\x65\xf5\xa4\x40\xca\x87\x34\xa8\x66\xc2\x20\x5e\x24\x92\x46\x9b\xd3\x03\x13\x2c\x41\x0e\x1d\xce\x4b\x9d\x09\x63\x44\x1e\x4d\xd8\x69\x58\x68\x3e\x0b\x05\x0b\x5d\xc8\x44\xa5\x27\x28\x7c\x8c\xc4\xd8\xea\x1f\x08\x77\x6c\x8f\x1f\x2f\x83\x70\x1b\x6b\x56\x0f\x5d\xac\x0b\x9d\x9b\xe5\xa5\xea\x2e\x53\x1a\x15\x04\x0e\x4b\xe6\x7f\x74\x24\xc4\x81\x66\xa1\xc8\x14\x72\x02\xa5\x0a\x36\x26\x4b\x5a\x40\x15\x31\x07\x0c\x8c\xc8\xb6\xaf\xe8\xa6\x6e\xbc\x01\x90\xc6\x76\x72\xf1\xd1\xde\xa2\x99\x98\xe9\x72\x71\x30\x64\x97\x75\x24\xf4\x5b\x81\x6d\x54\xcb\x02\x63\x6f\xe3\xaf\xa1\xe8\x07\x15\xac\x5d\xbd\x39\x47\x13\xa8\xa4\x33\xb8\xe2\x35\x55\x25\xb6\xb3\x0a\x85\x92\x2b\xcd\x94\xa5\x16\x85\x8f\xda\x0a\x02\x95\xd3\x8a\xaf\xe1\xa0\x5d\xef\xb1\x07\x26\x84\xd2\x66\x39\xa4\xa7\xe5\x0d\x5b\x61\x6b\x77\x31\x58\x4d\x2d\xd5\xd7\x4f\x0d\x95\x5b\x46\xc2\xe1\x26\x5f\xef\xe1\x0d\xba\xde\x1b\xb0\xeb\xbd\x0b\x1c\xb8\x2e\xd9\xb5\x87\xd8\xb2\x4f\x60\x57\x66\x7c\x3e\x87\x39\xc2\xd5\x69\xf2\x07\xda\xad\x56\xbc\xd2\x06\x46\xfd\xd5\x01\x57\x8d\x40\xab\xa6\x22\x63\x85\x94\xc3\xa6\xa4\xbb\xc4\xe8\x76\x7c\xea\xb3\xe4\x53\xa4\x35\xfc\xfe\xf8\x94\x9f\xd8\x8e\x4f\xad\xe3\x53\x7e\xa9\x76\x7c\xea\xf3\xe0\x53\x7e\xc3\x1e\xc5\xa7\xdc\xe1\xdb\x9c\x4b\x2d\x01\xef\x3f\x05\xa7\x4a\xc8\x9c\xad\x79\xb6\xdb\xf4\x49\x36\x68\x90\xad\xad\xd1\xab\x95\xac\x0f\x4e\xea\xde\xa0\x19\x44\x1c\x47\x7d\xb7\x7d\xda\x2b\x83\x87\x79\x77\xa0\x7b\x23\x06\xd7\x61\x0e\x34\x43\x72\x23\x67\x45\x29\x0a\x71\xcb\x55\x85\x96\x80\xe7\x15\xab\xbb\x41\x82\x43\x77\xde\x99\x89\xe2\x70\x43\x76\xd8\xa1\x50\x99\xce\xd1\x92\x39\x23\x59\xc6\xb9\x39\xa3\x13\xb1\x94\x64\xe6\x4c\xfc\x71\x78\x2e\xfb\x69\x2a\x94\xd5\xd7\x07\x80\x7e\x6f\xd8\x9c\x5b\x8a\xef\xc0\x80\x7d\x11\x08\x06\x29\x63\xa2\x42\xbb\x4c\x23\x06\x15\xa1\xa0\xbd\x67\xc4\x87\x06\xfb\x06\x99\x06\x91\x10\xbe\x54\x2b\xf8\xd6\xbf\x6a\x53\x45\xbd\xc0\xf2\xc5\x0e\x27\x00\x1f\xe7\x68\x64\xc0\x6e\x9e\x24\x29\xa3\x13\x17\x25\x18\xe6\x40\x86\xcc\xd3\xf1\xf6\x5b\x37\xf6\x3f\x69\x2a\xc5\xa7\x4b\x8f\x48\xc8\x31\xab\x69\x5f\xcf\xd4\x88\x67\x46\x00\x57\x67\x51\x6c\x4e\x01\x93\x69\x08\xcf\x84\x04\x3e\x69\x52\xc5\xf6\x72\x3f\xfe\x08\x94\xda\x49\x27\x6d\xe9\xe1\xc9\x69\xf8\x70\x47\xc4\xb7\xe2\xb1\x6d\xd9\xd8\x5a\x53\x58\x6e\xb1\xa1\x60\xf8\x44\xaa\xdf\xf6\x35\xbf\xde\x29\x6b\x89\x2c\xca\x27\x4d\x44\x7d\xa6\x97\xff\x0f\x29\xa6\x3d\x32\x77\xf6\xf9\xf1\xd3\xcd\x48\x44\x87\x04\xb5\xdc\xe2\x21\xf2\xd3\xd3\xd0\x89\x07\xa4\xa2\xae\xbe\xd8\x5b\xcf\x48\x7d\x36\x27\x61\xbb\x22\xcb\x33\x25\x5a\xee\x74\x2d\x33\xb5\x3f\x96\xbc\xd2\xe3\xd2\x27\xdd\x39\x9d\x75\x4d\x7a\xcb\x07\xcb\x76\xce\x84\xd9\x12\xa2\x48\xd6\x19\x3c\x07\x5b\x32\x6e\x6e\x4d\x8e\x18\xb2\x67\x6b\x28\x65\xec\x07\xb5\x0d\xe0\x8d\x34\xac\x4c\x1a\x70\x45\x75\x10\x8a\x90\x67\xbc\x46\xbb\x69\xb0\xd2\x08\x8a\x74\x0d\xd3\x8d\x5a\x6e\xc0\x7a\x97\x4f\x65\x17\xe5\x5d\x0b\x5f\x5a\x85\x52\x6f\x22\x6f\x7e\xd2\x7f\xc3\xd1\x27\x07\x35\xd0\x23\x16\xea\xc9\x65\x8f\xfe\x0b\x00\x93\x2e\xf9\x1d\x75\xb7\x2f\x95\xa9\x04\x07\xdc\x9f\xd5\xeb\x71\x30\x60\x46\xce\x64\xc1\x3d\x09\xf5\xe7\xb4\x1d\xde\xfc\x09\x2d\x44\x49\x7f\xc0\x3a\x42\xd7\x53\xca\x79\x76\xd4\xee\xb9\x92\xa8\x3e\x94\xe7\x41\x02\xda\x4a\xca\xd1\xd9\x74\x13\x61\xed\xb7\xa3\x1d\xc1\xf3\x04\x71\x71\x23\xe1\x6b\x51\xca\x31\xfb\x67\x9b\x1e\xfc\x13\x2a\x44\x46\x42\x50\xf0\x3d\xd9\x7d\x71\xb7\x30\xce\xf0\xd8\x0c\x38\xf9\x49\x85\xe2\x67\x47\xa2\xfc\xea\xf3\xe2\x8e\x2f\x0c\x31\x51\xbb\xcd\x13\x5e\xe6\x90\x92\xe3\x53\x54\xfb\xac\xf3\x76\x64\xf8\x27\x61\xc7\x6b\xc9\xe8\x97\x3b\xa0\xbc\x1d\x50\xde\x76\x81\xf2\xbe\xfc\x83\x02\xe5\xf5\xb2\x58\x78\x2b\x64\x97\xe5\xb1\x4b\x81\x67\x7e\x6b\x1a\xb2\x21\x3d\x1c\x2d\x90\x3a\x58\xee\xef\x95\xf5\x87\xd8\xa5\xbf\xa4\xf0\xb8\x73\x7f\x10\x7a\x18\xc9\x43\x38\x78\x4b\x6a\x4d\xe9\xf4\x8f\x1a\x18\x26\x70\x3d\xe4\x18\x7e\x3e\x08\x6b\x41\x62\xea\x94\x92\xba\x81\x9c\x1b\x59\x9f\xcd\x91\x6f\x7d\x33\x40\x16\x08\x91\x38\xcf\xf6\x04\xf7\x38\x2c\x3b\xcc\xaf\x1d\xe6\xd7\x0e\xf3\xeb\x73\xc7\x67\xd8\x61\x7e\x3d\x57\xcc\xaf\x4e\x0a\xfb\x9c\x30\xbf\xba\x07\xf9\x9b\x60\x7e\x7d\xd9\x03\xa6\xa3\x73\xc8\x3b\xcc\xaf\x1d\xe6\xd7\x0e\xf3\x6b\x73\xe5\x75\x1b\x98\x5f\xb6\xf1\x0e\xf7\xeb\x73\x10\xcf\x9e\x31\xee\x57\xb7\x4e\xb2\xc3\xfd\xda\xe1\x7e\x3d\x08\xf7\xeb\x51\x02\xc5\x0e\xf7\xab\xda\xe1\x7e\xed\x70\xbf\x7e\x33\xdc\x2f\x76\x4e\xe5\x70\x45\x35\xa0\x9d\xc2\x4a\xb8\xd4\xd8\x2d\x3a\x54\x15\xd6\xec\x2f\x2f\xff\x57\x57\x69\xd7\x6d\xf3\xa9\x1d\x84\x58\xf5\xd9\x43\x88\xad\x76\x04\x3e\x42\x70\xde\x41\x88\xfd\x1e\x20\xc4\x7a\x98\x19\x3e\x6f\x08\xb1\x2f\x77\x10\x62\x3b\x08\xb1\x1d\x84\xd8\x63\x21\xc4\x12\xde\xb7\x0e\x88\x95\xd0\xa2\x61\x9d\xf0\x4e\x40\x8c\x57\x03\x4e\xd7\x88\x10\xe7\xc1\x71\xf9\xd4\x31\xaf\x4b\x7e\xd2\xe7\x18\x16\xbf\x0b\x7f\xef\x96\x45\x77\x08\x76\x3b\x64\xa0\x4d\x85\x80\xdf\x2d\x82\xdd\x97\x3b\x04\xbb\x4d\x16\x6b\x87\x60\xf7\xd9\x20\x03\x7d\xf9\x07\x43\xb0\xfb\x72\x87\x60\xb7\xe3\x53\xbf\x5b\x04\xbb\x2f\x77\x08\x76\x0f\xe4\x53\x3b\x04\xbb\xcf\x8c\x4f\xfd\xee\x11\xec\x96\x62\xb6\x3b\x38\x15\x3e\x6d\x18\x01\xe2\x9b\x31\xf0\x5e\x0c\xfa\x53\x97\xfe\x97\xc8\xa7\x41\xbc\xac\xa9\xc5\x3e\x88\x99\xf1\x1e\x09\x68\xed\x36\x9f\x45\xd2\x2a\x3b\xc1\xbb\x07\x49\xc5\xc5\xc2\xbe\x22\xd1\x0e\xfd\x61\x69\x4c\x91\xe7\xaa\x9f\xc9\xee\x77\x05\xd6\xb7\xe2\x42\x86\xf8\x08\x6f\x88\x8f\x46\xea\xee\x6c\x74\x30\x06\xec\x47\x7f\x6e\x1b\x79\x76\x09\x83\xd2\x6d\x7a\xf5\x6e\x9f\x39\x5a\x5b\x2a\x1d\xa0\xe3\xb2\x47\x4d\xd8\x54\x17\x79\x57\x9a\xc2\x0a\x2b\xdf\xe6\xb7\xf5\x33\x4f\x17\x7d\xaa\x0b\xf8\x9c\x11\x4d\xfa\xdc\x84\xdf\x00\x1d\xae\xc7\x55\xf8\x3d\x81\xb6\x7a\xd8\xb3\x1f\xdc\xd3\x25\x14\xc3\x36\xf7\x5c\x7e\xe5\x81\xce\xb8\x35\x10\x97\xcf\x36\xd3\xe8\x73\xcd\x95\xfb\xdd\xc1\x6d\xb6\x32\xe9\x06\xad\xa3\xf9\x59\xe5\xd6\xfd\xc1\xef\x55\x8f\x23\xbc\x03\x44\xec\x0f\x88\xb8\x4b\x43\xfe\x74\xa4\xf5\x77\x8f\xc2\xb7\x4b\x57\xfe\xf4\xc4\x6e\x87\xf2\xb6\x43\x79\x4b\x63\x2d\x75\xd1\xf5\x27\x85\x7b\xfb\xdc\x68\xf2\x0e\x3b\xec\x19\x1c\xfc\x8d\xb0\xc3\x3e\x2f\xd6\xb2\x02\xa3\x67\x6b\x60\x4e\x23\x5e\x65\xd3\xe1\xed\xab\xe1\x7f\xe8\x51\xfb\x5b\xff\xa1\x47\xb1\xad\xb2\x6a\x41\x53\xc4\xbe\xdf\x7f\xe9\xd1\x0e\x09\x62\x87\x04\xf1\x19\x66\xec\x5d\x36\x91\x1f\x5e\x98\xcf\x1f\xfb\xe1\xb2\x81\xf7\x40\x24\xc2\xc5\x66\x13\xec\x43\x89\xd7\xd7\xde\xdb\xa7\x05\x7b\xe8\x41\x14\x63\x3a\xb4\x0e\xcc\xe1\x24\x91\xc8\xf1\xfc\x26\xf1\x30\xb0\x07\xe8\x22\x64\x66\x5a\xaa\xdc\xc8\xc0\x7c\xd5\x4a\xbe\x8c\x3f\xba\x02\xae\x21\x7e\x1a\x05\xf4\xc4\x49\x31\x22\x2c\xe5\xe3\x71\x17\x2e\x4a\x3d\xea\x88\xbc\x7f\xdb\x01\xac\x70\xc7\x0d\xcb\xa6\x22\xbb\xd9\x56\xf4\x7b\x1f\xfc\x87\xae\xc1\x10\x6e\xc1\x0a\x80\x87\xed\x8c\xb1\x13\xe1\xe1\xfb\x7a\xc6\x15\xf3\xa0\x0e\x1e\xf0\x01\x25\xc7\x36\xa0\x43\x1f\xb4\x85\x2e\x48\x87\xfd\x51\x29\xc5\xf8\xe0\xa9\xc0\x1c\x2e\xd3\xf0\x0d\x03\x17\x6e\x90\x42\x71\x48\xeb\x09\x49\x97\xea\x15\xc5\x35\xfc\x4b\x8f\xe2\xce\x4f\xf4\x6c\x5e\x08\x7b\xaa\x4b\xf6\x86\xcb\xa2\x01\x54\xd5\x43\x1c\x4a\x83\x35\xd0\x03\xe4\xb6\x94\x5f\x47\x24\xf6\x5f\x7a\xb4\x43\x60\x78\xfe\x08\x0c\xff\xd1\xdc\xa6\x8d\xd3\xbe\x1a\x22\xf3\x0e\x45\xe1\xa9\x65\xb2\x26\x6a\xc2\x73\x94\xc7\x1e\x0c\xc6\xd0\x66\xf6\x6d\xc8\x85\xd5\x0c\x3f\x9d\xa2\x42\x0f\x22\x36\x0f\x46\xba\x29\xe8\x68\x4c\xdc\x8b\xac\x46\x86\x2b\x8b\x82\x15\x5a\xdf\xb0\x42\xde\xac\x55\xa5\x2b\x31\x9b\x5b\x6a\x90\xa0\x5e\x59\x25\x6f\xc5\xa9\xe0\x79\x21\x95\xb8\x04\xb3\x6f\x8a\x0d\x34\xcc\x38\xb9\xd3\x21\xa5\x62\x68\x29\xb6\x27\xb5\xe0\xb6\x2b\x47\x7c\x4c\xc5\xcb\xea\x0a\x99\x33\xaf\xfc\x0c\xec\x25\x18\x09\x86\x9f\x75\x86\x3b\x68\xbf\x30\x95\x98\xb1\xaa\x84\x8f\x68\x56\x89\x72\x26\x95\x95\x6c\x64\xf5\x37\xba\x80\x90\x0e\x3f\x12\x6c\xae\x2d\x27\xbb\x15\x2c\xc4\x43\xac\xcd\x5c\x1b\xec\x8d\x78\x76\xa3\xc7\xe3\xb7\x72\x26\x13\xcc\xa1\x39\xc3\x38\x05\x12\x87\x44\x43\x9d\xf1\xf2\x06\xaf\xbf\x34\x30\xa1\x31\xb2\x27\x76\x1a\xa5\x9c\x7f\xd3\x13\x7c\x1b\xb9\x5c\x3a\x93\x78\x69\xc5\x5b\xa9\x99\xa6\xce\x32\x61\xcc\xb8\x2e\x8a\x05\xb3\xa7\xde\x4c\x45\x8e\x31\x19\x6e\xad\x83\xf5\xb0\xac\x15\xc4\x53\x03\x58\x41\x55\x51\x68\xba\x92\x05\x9b\x09\xae\x4c\xd8\x22\xea\xd5\x01\x4d\xce\x75\xce\x8c\x9c\x28\x5e\x98\xd6\xe3\xa2\x70\xa8\xdd\x2a\x77\xd1\xd8\x73\x5e\xf2\xa2\x10\x85\x34\x33\xfb\x01\xb0\x25\x61\x3f\xb4\x61\xe8\xa2\x6a\x8c\xe2\x55\x3c\x86\xb8\x03\x69\xd0\x10\x86\xa6\xdc\x57\x1e\xed\x21\x1a\x04\xbe\xd3\x3d\x48\x5a\x89\x24\xe9\x49\x00\x21\x67\x5a\x65\x62\x5e\x99\xa3\x3b\x5d\xde\x14\x9a\xe7\xe6\x88\x52\x3f\x0b\x51\x9a\x23\x2b\x24\x1c\x96\xb5\x3a\xac\xf4\x61\xd8\xbb\xa3\x9e\xa8\x1d\x5c\xd5\x3c\xa4\xb2\x25\xe0\x47\xe2\xe7\x2e\xe5\xd4\x34\x92\x37\x21\xd3\x14\xd3\x03\xd1\x50\x08\x53\xa7\x57\xcc\x90\xbd\x15\x76\xc1\xff\xd9\xec\xea\x9f\x98\xbb\xc7\x6a\x05\xa0\x23\x0b\x5d\x83\x0d\xd0\x81\xb5\xdd\xd9\x25\x74\x3f\xe6\x3a\x64\xfc\x8d\xad\x4c\x67\x05\x30\x4a\xfd\x8b\x2e\xe9\x5c\x66\x37\x6e\x18\xb5\x92\x3f\xd7\x74\xeb\xe9\x4a\xc0\x81\x98\xcf\x05\xc4\x95\x82\x9d\x90\xda\x06\xec\x03\xe6\x28\xd2\x90\xe1\xd7\x2a\x90\x23\xed\xd3\xda\x20\x98\x2a\x86\xa6\x1a\x69\x25\x68\x2b\xd5\xda\x8f\xda\x23\x43\x1f\x8c\x56\x01\x0d\xa9\x1e\x34\xc4\x2d\xc8\x90\x81\xec\x58\x97\x30\x3a\x18\x33\x6f\xbc\x0d\xc4\x28\xe3\x80\x82\x02\xb9\xb0\x2a\xa7\x94\x3e\xbb\xd3\x68\xd2\xac\x3c\x5c\x0d\x86\xcb\x66\x55\xb1\x18\x32\xf6\xbd\xbe\x13\xb7\xa2\x1c\xb0\xff\xd2\x35\x74\x63\x44\x6b\xe1\xff\xdd\xce\xe9\x9f\x96\x46\x62\x77\x76\xa1\xef\x84\x5d\xfa\x52\x84\x0c\x07\x88\xb0\x2d\x72\xf6\x4f\x71\x5f\x09\x65\x80\x75\xdd\xbe\x82\x0a\x17\xff\x64\xc7\x17\xe7\x4f\x7b\x76\xbf\x08\x6b\x77\xb8\xd0\x75\x79\xa8\xef\xd4\xe1\x5c\xe7\x87\x91\x4f\x8b\x0e\xf7\x48\xeb\x42\x70\x05\xb1\xf8\xe1\x96\xae\x23\x5c\x0e\x32\xa6\x4d\xc0\x52\xa4\xca\xd2\x29\x5e\x01\xc9\x40\xcb\xac\xd5\xee\xd0\x43\x8e\xb0\x17\xcb\xef\xbb\xcc\x0a\xcb\x88\x2a\xc1\xf3\x05\x69\xc3\xce\x57\xe4\x70\x76\x14\xee\x30\xbd\x7d\x67\x4f\xdc\xfe\xfe\xd0\x4e\x7e\x18\x51\x61\x76\xc8\x86\x84\x71\x19\xc8\xeb\x01\xbb\xae\x5f\xbe\xfc\x2a\x63\xd8\x3c\x9a\xfb\xc1\x80\xc9\xa1\x18\x62\x77\x76\x26\x76\xe9\x59\x21\xc6\x80\xbf\x92\x6b\xa0\x60\x7e\x00\x33\x7e\x1f\x93\xb7\xe7\x40\x93\xba\xf3\x97\x8f\xe9\x86\xfc\x5c\x8b\x72\xc1\xf4\xad\x28\xdd\x7e\x71\x9f\x19\x05\xd1\xe2\xfe\x42\x23\xf4\x08\x7b\x0f\x4e\x80\x62\xd1\xa0\x17\x46\x80\x05\xda\x0a\xbd\x10\x58\x6e\xaf\xf3\x42\xd7\x1b\x2f\x81\x1d\xc7\xad\x14\x77\xb0\x16\xf6\xc8\xda\x1b\x74\x48\xe0\x6b\x47\x48\x11\x8e\xbe\x80\xff\xfa\x03\xdc\xc3\xf8\xb3\x51\x31\x41\x27\x49\xb5\x96\xec\xb4\x91\x69\x05\x34\x0e\x6e\x3c\x9d\x44\x7f\xe9\xed\x61\x21\x39\x0e\xa2\xa1\x3e\x05\x7f\x5a\xa7\x17\x65\xba\x14\x76\xba\x17\x3a\xbf\xa2\x09\x3a\x4b\x5e\x55\x15\x24\x15\x1e\x8f\x2b\x51\xbe\x21\x49\x23\xe1\xf0\x4b\x37\x24\x67\x16\xa9\x71\x63\x01\xf6\x1a\x30\x56\xfd\x87\x1e\xe1\x12\x4d\xb9\x09\x12\x4c\x10\x71\xf7\x85\x04\x62\xdc\x36\x06\x1c\x00\x16\x52\x74\xa0\xa4\x21\x54\xa4\x8e\x31\xf0\x71\x45\x71\xda\xf6\xa3\xf4\x2d\xe3\x72\xe7\x45\x21\x27\x92\x9c\x58\x23\xb1\x04\xc6\x9d\x0b\xfb\xed\x9c\x98\xa2\xeb\x42\x1a\xf2\x36\xd3\xe3\x01\xe0\xb5\xd8\xf9\x65\x8b\xac\x10\x6c\x52\xf3\x92\xab\x4a\x08\x43\x4e\xb9\xb1\x54\xbc\x90\xbf\x88\xd2\x1c\xf8\x23\x31\xd5\x4a\x97\x22\x4f\x4c\x26\x62\xb9\xf6\x6b\x77\x5a\xbd\xa8\x56\x0c\x2d\xb5\x18\x76\x32\xbf\x88\x52\x87\x5e\x46\x22\xd3\x33\xd1\x9a\x2e\xf5\xc2\xe4\x6c\x26\x72\xc9\x2b\x51\x2c\x68\xbd\x64\xe5\x97\xca\xd2\xe0\xf8\x03\xbc\x98\x4f\xf9\x61\x61\x75\x33\x87\x6e\x04\x09\x05\x34\x25\x36\x5a\x10\xc0\x00\x91\x0c\xa1\xd0\x4b\x38\x15\xec\xea\xea\x6d\x73\x73\xc6\x82\x57\x75\x29\x7a\x85\x39\xaf\xb0\xf9\x74\x39\x71\xfd\xa3\x96\x3b\xac\x6d\x3f\xfd\x8f\x5e\x7e\x30\xd0\x5d\x12\xb6\xac\x86\xde\x80\xad\x8a\x85\x67\x51\x1b\x84\x72\x87\xcb\x9b\x36\x7c\x7e\x88\x26\x62\xaf\x93\x67\x40\x96\x95\x82\x29\x96\xae\x4c\x0e\xa9\x92\x94\x5b\xe9\xcf\x64\x4e\x3b\x4f\x05\x85\xa6\x20\xab\x99\x43\xd2\x70\x74\x99\x8b\xd2\x05\x7c\x1b\x61\x59\x96\x5d\x9e\x39\x49\xa1\xc6\x75\x19\x47\xb9\x4b\xc5\x3e\xbc\x39\xf9\xea\xab\xaf\xfe\x8a\xd0\x16\x74\x24\xa4\x62\x1f\xaf\x4e\xb6\x63\x6c\x5d\x85\xba\x74\x15\x8c\x5d\xc1\x23\x8d\x50\x27\x04\x7b\x17\x5b\xd2\x5e\x2c\x99\xce\x3f\x15\x27\x7e\x94\xb5\x2a\x82\x59\x5a\x32\x54\xcc\x6d\xab\xc3\x99\x28\x27\xe2\xf0\x46\x2c\x28\x4f\x65\x2f\xd9\xca\x54\x76\x33\x27\x0b\x08\x72\x2a\x27\xb0\xb0\xa8\xc0\xae\x3b\xce\xc0\xfd\x11\xab\xac\x14\x3c\x03\x5d\x73\xca\x8d\x68\x9b\x67\x57\x0a\x1c\xce\x28\xf0\x80\x33\xcd\xb3\x1b\xa5\xef\x0a\x91\x4f\x02\x4c\x0f\x99\x8d\x69\x0f\x7e\x3f\x87\x1d\xa4\x4f\x91\x3f\x62\x5b\x2e\x5d\x0f\x8f\x21\xab\xbe\x50\xb9\x4a\x86\x18\xd0\x83\xfe\x61\x06\x59\xa9\xd5\x2e\xd6\x60\x17\x6b\xf0\xb9\xdb\xb5\xff\x90\xb1\x06\xee\xf2\x0e\x98\x54\x59\x51\xe7\xa1\xe4\xcc\x54\xe4\x75\xb1\xf5\x6d\x7a\xb8\x0f\xbf\x41\xb6\x1e\x12\x91\xe0\xe9\xd4\x33\x9d\xd2\x56\xe2\x13\x1c\x59\x6f\xba\x2c\xe0\x43\x9d\x7e\x8b\xc6\x30\xd2\x4e\xd6\xe8\x61\xca\xd1\xea\x96\x76\xe7\x6d\x7d\xfe\xde\x56\xda\xca\xad\x78\x5c\x9b\xa2\xc4\xce\xf5\xba\x73\xbd\x6e\xcb\xf5\x1a\x53\xa3\x07\xd3\xb2\xb4\x33\x36\x7a\xb8\xa1\x43\x16\xae\x3d\xa8\x30\xd2\xd5\x9a\x75\xb0\xcd\x65\xad\xd6\xa3\xda\x23\x4b\xdd\x1b\xec\xfd\x4b\x8f\xae\x3a\x9d\xb7\x56\x23\x05\xf6\x95\x2d\x2e\x74\x21\xb3\xc5\x2a\x6b\x3c\x25\x7b\x54\xa5\xe0\x10\x1a\xed\x74\x60\x3f\x05\x13\x6c\x20\xec\x47\x00\x86\xa0\xc4\x0b\x5e\x8a\xd7\xec\x90\x5d\xef\x1d\x17\x85\xbe\xbb\xde\x63\xfb\x84\xaf\x7d\xf0\xda\x39\xfe\x1c\xa9\xb0\x5f\x28\x6b\x15\xf5\x5f\x2c\xfe\x06\xef\xbe\xd1\xe5\x48\xe6\xd7\x7b\xaf\xad\xd2\x34\x92\xb9\x89\xc7\x50\xd6\xca\x0c\x98\xb9\x91\x08\x9b\xa5\xc4\x3d\xfc\xc6\xe4\x98\xcd\x4b\x71\x2b\x75\x0d\xa6\x7e\x36\xe5\x46\xbd\xa8\x82\xb1\x70\x21\x2a\xec\xfd\x83\x98\x17\x3c\x13\xb6\xfb\x8c\xab\x4c\x14\x5e\xc7\x8f\x2c\x30\xce\x37\x55\x62\x63\x83\x7b\x53\x4d\x19\x67\x4a\xdc\x31\xad\x92\x98\x0c\xa8\x1f\xdb\xc9\x7d\x2f\x4d\xa5\xcb\x45\x87\x03\xb9\xa9\x98\xe1\x5b\x61\xa4\xce\xa3\x54\x8a\x8a\x4b\x45\xe6\x34\xa0\x73\x40\x80\x10\x9f\x33\x97\xc6\x12\xb8\x5a\x9a\xa9\x07\xbd\x17\xf7\xf3\x42\x66\xb2\x02\x63\x1e\x0c\x1f\x30\xe0\x7d\x01\xbf\x86\xe3\xf9\x55\x4f\x3d\x3c\x3e\x55\x6b\x1c\x38\xff\x72\x56\xda\xb5\x86\x6c\x3a\x03\x7d\xc0\x71\x9a\x77\xf0\x3f\xc2\x68\xbc\xb4\xe6\x6e\x40\x72\x99\xdd\x53\xab\x73\xdb\xaf\x32\x9c\xe1\x00\xbc\x70\x8e\xbe\x09\x35\xbc\x93\x37\x72\x2e\x72\xc9\x87\xba\x9c\x1c\xd9\xbf\x8e\x6c\xf3\xae\x00\xb8\xd2\x4e\x64\x6d\x28\xc4\x0f\x84\x4b\xcb\x72\x6a\x19\x47\x41\x8c\x75\xc9\x5c\x4f\x7e\xf9\xe4\xd8\x9e\xb4\x99\x34\x46\x18\x3f\xf6\x1c\xcd\x1c\x80\x75\x01\x25\x1d\xb9\xd1\x6a\xc8\xd8\x3b\x09\x40\xae\x70\x5e\xa2\xab\xe9\x57\x5f\xd7\x0e\x57\x82\x8e\x98\x56\x62\xbd\x5d\x11\x23\x20\x82\x53\x6b\xd3\xe3\x1c\xde\xfc\xd4\x47\xfa\xab\xbe\xa6\xa5\xda\xcc\x45\x4a\xa2\x40\xc3\x75\xc1\x27\xac\x12\x45\xe1\x4d\x14\x64\x33\x82\xfc\x37\x7c\xd5\x72\x7e\x63\x99\x7e\x83\x28\x82\x93\x20\xd7\x82\xf0\xe9\xe6\xf3\x62\x01\x81\xa4\x45\xe9\xdc\x8d\x65\x15\xbb\x2d\xcc\x90\x35\xc6\x0f\x6e\xf4\x61\xc2\x8d\xda\xc7\xe6\xd2\x65\xd3\x6e\x3c\xee\x61\xd7\xde\xc0\xf0\xd2\x61\xdc\x3e\xf6\x52\x21\x6d\x2e\x4c\x2e\x49\x63\x1f\x25\x2f\x3a\x4f\x54\xbb\x00\x81\x43\x05\xc7\xeb\x93\x36\x22\x9e\x47\xc0\x7f\x40\x9f\xee\x78\x0a\x1c\xdc\x99\x14\x1b\x31\x34\xfe\x62\x6e\xc3\x84\xb7\x72\x73\x97\xe9\x5d\xca\x65\x11\x37\x58\xae\xa3\xc3\x2b\x4e\xee\x33\x52\x4e\x20\xce\x06\xe6\xeb\x88\x33\x48\xb8\xdc\x47\x59\xac\xdd\xf6\x87\x18\x3d\xa2\x00\x1b\xd3\xfc\x30\x08\xd9\x21\xc2\xe3\x19\x0a\x9f\x5b\xb5\x8d\xac\x8a\x32\xfa\x8d\x33\x31\x96\xce\x61\x66\x77\x7c\x8c\xe9\x8b\x81\xd6\x84\x1f\x2f\xe5\xc4\xde\xe2\x0f\xa8\xfa\xac\xf2\x71\x63\xb5\x47\x7a\x0d\xc2\xaf\xec\xed\x27\x9d\x69\x67\xde\xdd\x99\x77\x3f\x07\xdd\xf9\x69\xe9\x87\x95\xa0\xe2\x4b\x42\x8b\xc2\x64\x65\x44\x31\xc6\x28\x39\xb5\x88\xc1\xfa\x23\xdc\xda\x3e\x52\xf4\x66\xb7\x79\x9d\x21\xf4\x54\x94\xf2\x16\xdc\x5b\xa9\xca\xba\x34\xf8\x27\x18\xd6\xc3\x8c\x99\x8d\x8f\xe0\x49\x89\x4c\x02\x9d\x14\xad\x8f\x81\x60\xb3\xf1\x37\xf2\xb6\x36\x07\x9b\xb4\x82\xc9\x47\xb8\x16\x69\x89\xc6\xca\x2c\xa6\xe2\xb3\xb9\xcf\xec\x01\x51\x06\x6f\x92\x8f\xba\x8c\x2b\x9e\x3e\x61\x5e\xd3\x34\x9d\xd7\x04\x3a\x74\xbb\x44\xad\x3b\xef\x20\x87\x6e\x92\xd2\x04\x19\x4d\xcb\x09\x4d\x6b\x7b\x4b\x27\x18\xb9\xd7\xf8\x7c\x5e\xea\x5b\x5e\xe0\xfb\x83\x48\x72\x3d\x86\x27\x56\x91\x2a\xd9\xa9\x50\xb2\x4f\xae\xd1\x66\x47\xc4\x19\xca\x77\xe6\xee\xdf\xce\xdc\xfd\x60\x7d\x64\x33\x89\x69\x67\xd8\x7e\x06\xcc\xf9\xc1\x96\xe5\x87\x31\x95\xde\x96\xe7\x07\xf0\xeb\xb4\x35\x23\x66\xd1\xf6\xcf\xd9\xac\xae\x80\x22\x87\x38\x47\x2f\x6c\x78\xd5\x6c\x88\x30\x33\x70\xc6\x1c\x51\x54\x39\xfb\x68\x49\x38\x45\xf6\x19\xa8\xa5\x48\xc1\x32\x9a\xb4\x49\xcc\xf6\x84\x48\x4c\x6a\x04\x99\x02\x24\x2d\x8c\x1a\xf8\xfc\xb6\xc3\x50\xe4\x74\xa6\x73\xc4\x37\x19\x2d\x20\xaa\x7f\xad\xcf\xcf\xa9\x0f\xa9\xfa\x02\x65\x42\x37\x3d\xb3\x3f\xaf\x16\x58\x20\x63\xc0\x88\x72\x08\x55\x3a\xe1\x5f\xe7\x6a\xac\x91\x6e\x8d\x39\x41\xad\x12\xf3\x4a\x8d\x2f\x88\x67\x17\x8d\x21\x75\x11\x94\x04\xe3\x80\xe3\x95\x90\xb8\xbe\xb3\xbf\x3f\xcd\xf0\xd7\x0e\x6b\xe0\x17\xbb\x35\xac\x6f\xb9\x11\xdf\x7c\xed\x6b\x55\x5d\xfc\xfd\xe4\xf2\x8b\x57\x2f\xd9\xc9\xe5\x07\x46\x7a\x77\xb3\xb3\xc8\x1a\x37\x5a\x54\x20\x41\xd4\x32\x41\x01\x3f\x9e\x9f\x3e\xcd\x64\x03\xfd\xa8\xe1\x30\xb7\x3f\x0d\x5e\x0a\x91\xd3\x59\x0f\x98\x44\xdc\x95\x67\x84\x17\xc1\x2c\x28\xee\xc9\x8c\x76\x23\x16\xde\xea\xea\x71\xb2\x61\x68\x81\x12\x56\x5a\x17\x66\x28\x45\x35\x06\x0b\xf3\xb4\x9a\x15\x47\xe5\x38\xfb\xd3\x97\x7f\x79\xf9\x85\x41\xa7\xf7\xe1\xd7\xc3\x2f\x87\xaf\x86\x5f\x5d\x2b\x66\xff\xdf\xe6\x6f\xbe\xfa\x72\xa3\x6d\xb5\xcb\x96\x46\x9f\x39\x7f\xca\xb5\x7f\x94\x80\x14\xcc\x9c\xab\xcd\x06\x51\xaf\x89\xe9\x8d\x3d\xd1\x83\x70\x41\x12\xeb\x06\xcb\x06\x5f\xd8\x53\x70\x00\xc1\x13\x69\x4c\x2d\xf2\x86\xa2\x36\x15\x8d\x68\xe4\xee\x63\xbe\x2a\x26\xf5\x24\x2a\xc8\x39\x9f\x17\x32\x00\x92\xd1\x28\x07\xcc\xd5\x59\xf0\xb2\x29\xac\xb0\x92\xbc\x78\x94\x05\xf5\x81\xea\xcb\xaf\xad\x3d\xd4\xba\xcc\xa5\x42\x75\xd4\xb2\x55\xc1\x4d\x0a\x85\x01\x6a\x26\x3b\x09\x94\xb3\x02\xfe\xa6\x60\xd9\x5d\xa4\xdf\xce\x14\xf4\x59\x48\x9b\x4b\x58\xf5\xbf\x23\x8b\x35\xdc\xcf\xdf\xde\x36\x9d\xa4\x26\xbe\x64\xf8\x46\x52\x7a\xdc\xd3\xb2\x94\x8e\x44\x6a\x4d\x1a\x7e\x72\x2c\xe9\x70\x36\xff\x08\x6f\x93\x73\x82\x21\xd1\xa3\xcc\xb3\x5d\x28\xdb\x73\x0a\x65\x3b\x77\xa1\x6c\x61\xb7\xdc\x62\xb5\xb6\xeb\x01\xee\xc9\x14\x4f\xdc\x69\xfd\xbb\x70\xb6\x87\x1b\x1d\xd6\x92\xb3\x3e\xc8\x22\xdd\xe4\x35\x4d\xd2\xc0\xaf\x8c\x07\x73\x99\x69\x70\x62\x19\x3d\x62\x05\x80\xc6\xa5\x0d\xd7\xd1\x43\xfc\x4e\x33\xab\xc7\x05\x29\xa0\xb4\x88\xf9\x3d\x48\x31\x1f\xe7\x7e\x7f\x27\xb3\x52\x3b\x43\xf6\x54\x17\xb9\x28\x11\x59\xb9\x4a\x04\xc7\x35\x9f\x37\xf1\x42\xa5\xfb\x95\xd8\x28\xb6\xa5\x70\x8a\x78\xf0\x49\x45\x14\x9e\x9c\x52\x0e\x4c\x67\x28\x51\xaa\x15\x2e\x96\x47\x58\x81\xd0\xab\x8c\xab\x5c\xe6\x80\x39\x8b\xb5\x71\x70\xd5\x14\x65\x37\xdd\x71\x09\xe9\x9e\x63\x6d\x89\x07\xad\x23\x93\x55\x08\xc9\x99\x09\x6e\xea\x52\x30\x3e\xb1\xf3\xa3\x48\x08\x3d\x46\x5f\x82\xaf\x09\xfe\x41\x28\x71\x67\xd7\xae\x6f\x95\x76\x3b\x8a\x00\xd2\xd6\x35\xc1\xa8\x85\x07\x3f\xf5\x81\x45\x55\xf4\x10\xd6\x16\xa7\xe6\x42\x85\x70\xd5\xfb\xe6\x4d\x96\x6e\x02\x29\x3f\x00\x3d\x5a\x75\x18\xe3\x3d\xc6\x71\x4c\x5d\x51\x7b\xa2\x93\xc8\x1e\xdd\xb6\x6f\xe5\x98\xae\xd6\xba\x50\x7d\xdb\xa9\x5e\xcf\x51\x00\xd9\xb1\xfc\x9d\xea\xf5\x19\xaa\x5e\x11\x49\xf9\x34\xfa\x57\x87\x37\xa4\x73\x54\x3b\x4d\xec\x33\x23\x84\xcf\x40\x13\x8b\xf9\xe4\x4e\x1d\xdb\xa9\x63\x9f\x56\x1d\xdb\x94\xc2\xed\x14\xb3\x9d\x62\xb6\x53\xcc\x3e\x37\xc5\x0c\x33\x13\x8e\x7f\xba\x3c\xb3\x5f\x96\xd9\xb7\x85\xce\x6e\x2e\x2b\x5d\x8a\x1f\x75\x51\xcf\x44\x77\x15\x26\x9f\x9f\xc1\xd9\x85\x25\x1b\xa6\xb2\xb3\x3a\x95\xe6\xa6\x51\xfb\xe3\xf8\xa7\xcb\xe1\xb5\xba\x56\xc7\xf0\x4f\x76\xf6\xed\x25\xcb\x6d\x1b\xc0\x3d\x15\xf7\x12\xd0\x4f\x11\x86\x54\xd7\xca\x01\x68\x72\x77\x3f\x44\x89\x50\x79\xe1\x1d\x5e\x18\x00\x3f\xa1\xa2\x31\x86\xcf\x04\xf4\xfc\x8b\x56\x82\x51\x6a\x84\x25\x8d\x85\xa8\x86\x6c\xf9\xab\x99\x15\x5c\x54\xb1\xc0\x50\x0e\x9f\x76\x54\x0a\x9e\x1f\xdd\x95\xb2\x12\xcc\x2a\x9a\x43\xff\xd2\x2d\x2c\x82\x61\xa6\x9e\xcf\x75\x59\x31\x7d\xa7\x44\x69\xa6\x72\xce\x66\x5c\xf1\x89\x98\xd9\x39\x5b\xc9\xe5\xf2\xec\xad\x54\xf5\x3d\x40\xc6\x8e\x04\x14\x53\x59\x23\xb7\x61\xd7\xe7\xa7\x6d\xd1\x6d\x6c\xae\x92\x71\x7f\x6f\x64\x21\x1c\xa4\x2c\x61\x8c\x83\xd8\x06\x1d\xe1\xe5\x5d\xe8\x9a\xdd\x71\x05\x37\x74\x86\xe8\x75\x57\x72\xfe\x9a\x9d\x29\xb8\x92\x1e\x13\x75\xbc\xd4\x95\xf4\x53\x0c\x40\x34\x53\x6d\xef\x2b\xc2\xc6\xa8\x09\xe1\xde\x0d\xd9\x19\x96\x5a\x33\xaf\xd9\xf5\x9e\xb8\xaf\xbe\xc6\xa2\xec\xf7\x63\x83\xff\x50\x95\xfd\xd7\x90\x9d\xcf\x30\x21\xaa\x20\x39\xa2\xf4\xa8\x35\xee\x35\x26\xc7\xac\x56\x51\x8a\xd4\x86\x90\x45\xa6\xd2\x25\x9f\x88\x23\xda\xa3\x2f\xf8\x9d\x11\x78\x88\x47\xf6\x10\xdb\xc7\xc9\xa0\xca\x39\x2f\xab\x8e\xaa\x04\xf6\xa4\xf9\xc7\xee\x84\xad\x59\xdf\xf3\x31\xd3\x33\x59\x55\xce\x2d\x4f\x79\xa4\x40\x7d\xa8\x91\x5d\x51\xea\x45\xf1\x99\x88\xd7\xf0\x8d\x2e\xdd\x23\x2b\x3d\x1c\x99\x9c\xbf\x1a\xc0\x67\x08\xc5\x12\x91\xf7\xfc\x98\xb8\x61\xd7\x7b\xaf\xec\x02\x5f\xca\x99\x2c\x78\xe9\x60\x09\xa9\x93\xd0\xd2\x12\x6f\xd7\xa5\x1d\xcc\xf5\xde\xcb\xeb\x3d\xb6\x8f\x30\x85\x70\x11\x0a\x80\x56\x85\xfe\xf1\xfc\x2d\x98\x98\xcd\xa9\xb2\x70\x2f\x0a\xc8\xf3\x1f\x54\xd1\x99\xa1\xbb\x60\xd7\x7b\x55\x59\x8b\xeb\xbd\x88\x61\x40\x6d\xb9\x8a\x42\xb6\xf0\xfd\xf0\x79\xa9\x18\x92\x9d\x77\x76\xd9\x60\x01\x5d\x17\x2b\x17\xfa\x7a\x0f\x52\xd2\x6c\xab\x27\x3d\x44\x11\x5e\xa8\xbf\xbe\xed\x98\x20\x84\x63\x3d\x3f\x75\x17\x74\x1e\xc8\x63\x9e\x20\x8f\x6c\xff\x78\xc6\x7f\xd1\x2a\x22\x38\x07\x9f\xe8\x32\x74\xb1\x83\x31\x70\x98\xc4\xc6\xba\x27\xc8\xd8\x40\xbe\x04\x0e\xe6\x7e\xa6\x84\x33\xc8\x9b\xa9\x0b\x91\x54\x5e\x97\x4a\xb8\xe9\x5c\x74\x7f\x2f\x24\xe7\xd8\x76\xdd\xdf\x89\x8b\x8b\xf7\x8a\xe7\xa7\x99\xbe\x8f\xbf\x6e\x69\x83\xce\xfb\x0c\x66\xae\xf3\x15\x63\x41\x74\xc4\x4c\x1f\x16\x1a\x62\x6f\x40\x83\x8a\xea\x9c\x01\xcb\xb2\xf3\x19\x00\xd3\x1a\x30\x51\x65\x43\xa8\x9e\xa6\xad\xa4\x04\x61\x89\x73\x9d\xef\x9b\x83\x3e\x35\xbe\x63\xa0\xcb\xe5\xa9\xa8\x4a\xf6\x9e\x8e\xaa\xe4\xe1\xba\x39\xf1\x5b\x2d\x73\x36\xaf\x09\xe8\xfa\xd3\xcd\x2b\x9e\x48\xe7\xa9\xad\x2a\x40\x0b\x43\x0a\x92\x38\xbb\x8d\xe7\x51\x02\x22\x77\xc4\x93\x53\x0b\x94\x40\xec\x4c\xfa\x95\x73\xcb\xc5\xad\xcc\xc4\x05\xaf\xa6\xa9\xda\xe1\xfe\x59\x62\x07\xdc\xb3\xe5\x7c\x57\x7c\x8b\xcd\xed\xa3\xbb\xa9\x20\x3c\x79\x1a\x66\xc0\x40\xf7\xc8\x80\x29\x3e\xb7\xa2\x5e\x9b\xab\x8b\xef\xe6\x8b\x1d\xf7\xa7\x0f\xbf\xd4\xa5\xb0\x92\xde\x6a\x19\xd1\x37\x8b\x67\xc7\x15\x83\xdf\xd9\x29\xaf\x38\x8a\x8b\xc8\x23\xb5\x0a\x52\x87\xe5\x12\x23\xa9\x72\x7a\x14\x30\xb6\xd7\x16\x77\x97\xe6\xe6\x3d\x6d\x8a\x34\x37\x1f\x3f\x9c\x27\x10\x26\x40\x52\x9e\xbc\xb3\xdb\xdb\x2e\x73\x63\x3f\x7f\x82\x2d\xd8\x4c\xe7\xe2\x35\x7b\x0f\x67\xd9\x32\x2b\x88\x36\xa6\x7f\xfe\x64\xa5\xc5\xa4\x3a\xe6\xc7\x90\x14\x2f\xe2\xf5\x87\x8c\x53\x60\x09\x74\x83\x46\x85\x1e\x31\x22\xe5\x5d\x5d\xdb\x39\x25\x7b\xfe\xf8\xe1\xfc\x61\xbd\xf6\x95\x37\x83\xcc\xf3\x8e\x8a\x16\xf0\x96\x20\xd9\x5f\x8a\x1c\x6e\x5b\x7e\xec\xef\xce\x38\xbb\x9f\x8b\xac\xf2\x76\x45\x76\x39\xe5\xa5\xc8\x5f\xb3\x59\x5d\x54\x72\x5e\xd0\x8a\xd9\x25\x34\x96\x79\xbb\xb5\x63\x3c\x03\xa8\x02\xc6\x4e\x05\xd6\xcb\xcc\x5f\x3b\x18\x40\xff\x46\xfa\x85\x77\xa0\x2d\xe4\xaf\x19\x87\xb3\x8f\xca\x43\x1e\x6d\xd5\x3e\x68\x25\x52\xf9\x47\x74\xb5\x65\x01\xe4\x58\x54\x07\x43\x27\xf0\x80\x58\x64\x60\xc8\x1d\x19\x48\x1d\x52\x59\x2b\x85\x9f\xed\x07\xc5\xe7\x60\x18\xe4\x31\x20\x38\x10\x53\x8a\x42\x5b\x43\x58\x33\x54\xe6\x60\x49\x56\xeb\x01\x07\xd0\x20\x1f\xf6\x70\x05\xbd\xb1\x07\x21\xb1\x2f\x24\x09\x09\x3c\xb8\x14\x25\x50\xcc\x2d\xd2\x12\x23\xb2\x52\x54\x44\x4d\x60\xbd\xe1\xdf\x2d\x7a\xf2\x8c\x16\x7c\x10\x0f\xba\x9d\x77\x17\x95\xe8\xc4\x76\x64\xf1\x71\xa6\x28\x5c\xcf\x4b\x3a\xbc\xc7\x74\x78\xdf\xbb\x9a\xd0\x7f\x17\x8b\x24\xca\x88\xff\xa4\x99\xf3\xd4\xf6\xb9\xef\xc2\x63\x47\xfb\x1e\x38\x80\x86\x7a\xe5\x64\x0e\xd2\xfa\x2f\x74\xf2\x42\x84\xad\x6b\xeb\x29\xf6\x11\xa3\x2d\xde\x80\xf7\xd9\x23\xb7\x3b\xb2\x9f\xf1\x91\xdd\xea\x91\xf8\x56\xaa\xdc\x3e\x6f\x67\x9d\xe0\x03\x66\x97\x1d\x8b\xcb\xa1\xc3\x25\x14\xed\xfb\x1b\x6b\x54\xaf\xe7\x28\x4e\x1b\x36\xd2\xb5\x8a\xc4\x50\xcb\x4c\xb9\x47\xf3\x28\x87\xec\xd4\x1e\x2a\xe0\x40\x76\x8d\x5f\x0d\xff\x3c\x60\x73\x34\x22\x62\xe5\x0f\x01\xe7\x47\xaa\x89\x61\xa6\x1e\x79\x85\xd3\xa1\xeb\x4a\x05\x95\x25\xd6\x96\x58\xea\x28\xbb\xbd\xf3\x2d\xee\x82\x2c\x9e\xaf\x23\xef\x73\x44\xb2\xed\xaa\x38\x7f\x15\x0a\xcc\x3b\xda\xb1\x6c\x86\x04\x46\x11\x0a\x94\xc5\x6b\xb0\x89\x96\x9d\x02\x27\xda\xc4\xc7\x18\x1c\x8a\x8e\x1c\xae\x8d\xee\xc4\x0f\x9f\x5c\x9e\xf7\x95\x03\x23\xa7\x83\x93\xb0\x61\x39\xa4\xf1\x62\xb3\x25\x94\x8a\x89\x7b\xba\xff\x27\x97\xe7\x4e\x6b\xce\x4b\x79\x2b\x4a\xb6\xff\xad\xa8\xb8\xab\xcf\x70\xb0\x4e\x9d\x84\x77\xf6\x9c\xb5\xef\x7b\xae\xf2\x22\x8d\x59\x48\x99\x58\x17\xf5\xa8\x90\x66\x7a\x09\xac\xea\x83\x5d\xf9\x44\x0e\x55\x47\x5b\xbc\xfb\xa5\xdb\x01\xbf\xa7\xc8\xf6\x68\xfb\x89\xf1\x81\x2a\x25\x94\x2f\x19\x17\xb2\xe0\x2a\xcd\xe6\xdc\x78\x82\x68\x17\x80\x66\x5e\x69\x5f\x43\xc1\x3f\x6a\x8d\x86\x8c\x23\x96\x60\x86\x67\x1f\xd5\xbc\xf1\x34\xe3\x45\xd1\x2a\x9f\xa1\x09\x43\x2e\x50\xdb\x91\x40\x7b\xb2\x55\xd4\x94\x76\x13\x91\x48\x5f\x64\xa8\x12\xd2\x31\x47\xc3\x66\x58\x48\x0f\x7c\x36\xae\xd1\x00\xaa\xb4\xe1\xbf\x31\x6d\xd7\x4e\xb7\x97\x27\xd7\x1f\x39\xbf\xe4\xee\xac\x0f\xdc\x4e\xb7\xe5\x21\x5c\xbb\x44\x81\xfb\xb0\xaa\x96\xe5\xa2\xfd\x51\x1a\x3a\x6d\x43\xc8\x47\x76\x1e\xe6\xcf\x42\xe3\x4e\x9a\x90\x74\x2e\xd6\x1f\xe9\xf7\x89\x56\xbf\xc5\x61\x8e\xc6\x11\x1d\x63\xfb\xeb\x1f\xe0\x00\xdb\xad\xba\xac\xf8\x44\xac\xd9\xa8\x66\x9b\xdf\x6a\x9b\x60\x14\x4b\x9b\x94\xfa\xed\xa3\x32\xd1\xaf\xbf\xc3\x6d\xeb\xd6\xc4\x1c\x26\xe7\x6b\xf0\x7f\xa3\x2c\x18\x2d\x74\x07\xe5\xa6\x14\xd8\x61\x1b\xaf\xb1\xa9\xc8\xad\xf0\x69\x1d\x57\x28\x03\xa5\x92\xce\xc3\xb3\x65\xef\xb3\x66\x74\xc5\x1e\x00\x38\x10\xa5\x7a\x37\x18\x6d\xeb\xf3\x3f\x46\x4f\x1d\x4d\xa6\xea\x87\x91\x7f\x95\x95\xa2\xaa\x4b\x15\x28\x62\x24\x05\xcc\x8b\x7a\x22\xd5\xff\xfb\x7f\xff\x3f\x86\x9d\x00\x86\xc4\x8f\x7e\xfc\x70\x0b\xdc\x19\xa6\xe6\x5a\xe1\xb6\x07\x14\x4d\x3a\x83\x2b\xc8\x7b\x87\x96\x78\x72\x79\xbe\x41\x48\x05\x49\xf7\xe0\x41\xf2\xa1\x52\x61\xad\x81\x2b\x0c\x56\x49\x3d\x5e\x74\xe9\x21\xdf\xb4\x9d\x16\x1b\x73\xc3\xf8\xce\x63\xfd\x33\xbb\x47\xa6\xc9\x13\x4f\xb4\x32\x75\x41\x00\xc5\x0b\x5d\x97\x8c\xe7\x33\x19\x17\x78\x87\x6a\x94\xd8\x31\x84\x65\x4c\xac\x58\x58\x0a\xef\x62\xca\x8a\xda\xfe\xb0\x25\xa6\xba\xde\x08\x3d\x06\x84\xd4\x79\xa9\x6f\x65\xee\xfc\xce\x48\x5b\xf0\x42\x4a\x43\x64\xc0\x9d\x1b\x6e\x8c\xce\x24\x28\xe6\xd1\x92\x60\x35\x1b\xb0\x96\xe4\x02\xab\x00\x8b\x86\x0f\x3b\x66\xea\x1a\x11\x59\x77\x0c\xb9\x49\xd9\x3f\x0d\x69\x0f\x2b\xf4\x50\x22\xff\x56\x67\xbc\x68\x69\x53\xeb\xa3\x25\x10\xbb\xc3\xb6\x3a\x04\x5f\x40\xb3\xe4\x90\xbb\x22\xee\x2a\x3d\x0d\x79\xff\x71\xa9\x05\xa8\x59\xc2\xd0\x1e\x1f\xba\xe8\x4d\x16\xa8\x05\xde\xf6\xb0\x52\xed\x93\x11\xae\x3d\xdc\x78\xfc\xf1\x85\x61\xb9\xce\xea\x99\xb7\xfb\x00\xc8\xb4\x97\x64\xc9\x26\xf3\x08\x4e\xd2\x45\x84\xf9\x1c\x7d\x2a\x32\xc9\xdd\xf2\xdc\x10\x9a\xfa\x4c\xdf\x0a\xc3\x2e\x7e\xb8\x3c\xff\xff\xb3\x2c\x7a\x09\x0d\x28\x0e\x19\xd8\x07\xa9\xf5\x08\x74\xe0\x79\xc2\xe6\x73\x9c\xe7\x22\x6f\x7c\x60\x23\x60\x94\xbc\xd4\xf3\x14\x23\x99\x01\xf8\xdb\x03\xbb\xed\x5a\x3a\x31\x9f\xbe\xb9\x7c\x80\xaa\xce\x99\x7d\x95\x45\x64\x98\xcc\xda\xf6\xe4\x14\xdc\x24\x0b\x69\xce\x75\x0e\xaf\x8d\x8d\x8f\xc1\xcb\xb1\x76\xf1\xca\x50\x3c\x5d\x3e\x20\x12\x6f\xa6\x95\x84\xaa\xaa\x2d\x3e\xe8\x9f\x24\xe6\x87\xef\xbf\x66\xef\xa8\x4d\xaa\x32\x0c\x4c\xdc\x75\x92\xb2\x42\x95\x02\xac\xb6\x0e\x99\xeb\xe8\xfb\xb3\xe3\xd3\x23\x32\x07\x1b\x17\xcc\x73\x94\xc1\x42\x1c\x7d\x38\x3b\x3e\x7d\x77\x36\x9c\xe5\x5f\x4c\xf5\xdd\x61\xa5\x0f\x6b\x23\x0e\x65\xb5\xd1\x89\x99\x27\x03\x11\x82\xac\xf9\xd1\x60\x44\xa4\xdd\x11\x17\x20\x59\x6a\x5d\x0d\x58\xc9\x21\x80\x83\x0a\x0f\x0b\x36\xae\x8b\x02\x27\x58\x95\x42\x0c\x62\xc7\xcc\xd1\x66\x7e\xc9\xf0\xf5\xa7\xf5\x3e\x3c\xfd\x06\xb4\xbc\x1a\xf6\xd0\xaf\x9a\xf0\xa5\x6f\xe5\x84\x2a\x08\xf9\xa8\x34\x40\x35\x81\x15\xd8\x52\xc6\x8f\x46\x94\xcd\x15\x16\x55\x06\xa3\x3a\x02\x58\x23\xe2\x5d\x4f\x3e\xbf\x65\xa7\x5f\x52\xfa\x58\x9e\x1d\x09\x1f\x2d\xd1\x83\xd7\xd5\x54\xa8\xca\x25\x03\xd0\x1c\x92\xd3\x05\x9e\xff\x94\xfb\xf7\x08\x0d\xce\x6e\xc0\x9a\x1b\xe5\x25\xe6\x92\xe7\xda\x60\x35\x78\x2b\xe3\x36\xe6\x88\xa2\xf0\x27\xdb\xc2\x95\x54\x7e\x47\xdb\x77\xb4\x7d\x47\xdb\x77\xb4\xfd\x0f\x45\xdb\xbb\x14\xb7\xdf\x19\x81\x97\x2a\x17\xe5\x83\xc4\xf8\x0c\x5e\x75\x56\xa8\x38\x8a\xfd\x87\xb9\x50\xa6\xe2\xd9\xcd\x90\x1d\xb3\x93\x46\xb3\x0d\xf3\x7c\xe2\xb7\x52\x99\x3e\xa5\x98\x50\x1a\x44\x23\xcf\xa7\xf1\xcd\x67\x9a\xae\xb3\x5d\x67\xce\x27\x4c\xc2\x59\x7d\x3e\x67\x0b\xf3\x73\x71\x88\x67\xe3\x70\x9e\x87\x03\xfa\x7b\x61\x14\x3d\x26\xd8\xe2\x0d\x6b\x88\x27\x44\x5e\x18\xbc\x00\x9d\x16\xb8\x39\x2f\xf9\x4c\x40\x59\xa2\x9a\x2c\x2b\x99\x56\x8a\x02\x88\xec\x95\xbb\x84\x2b\xf7\x38\xf1\xb5\x3b\x8f\x85\xae\xa2\xcc\xfd\xe7\x31\x4d\x95\x72\x92\xdc\x63\xe5\xe8\xc2\x53\x9e\x9c\x95\xc4\x6c\x47\xc2\x76\x24\x6c\x47\xc2\xfe\x20\x24\xac\x4b\x4a\xfb\xbc\xe9\x18\xc4\xdf\x9d\x5f\x9c\x80\xcd\x3f\x11\x34\xd4\x78\xde\x2a\x8e\x17\x7b\x0a\xc0\x31\x8b\xed\xd9\xf9\x05\x1b\x71\x3b\x67\x23\x0c\x44\x64\xba\xfc\xae\xf5\xd6\x6a\xab\xad\xeb\xba\xea\x44\x13\x68\x3e\x8f\xe0\xc7\xc9\xf7\x02\xbf\xfa\x91\x9c\x5f\x10\x6d\xa0\x71\x98\x4a\x66\x37\x0b\x48\x8c\x1f\x46\xee\xed\x19\x11\x95\xeb\xfa\xe5\xcb\xaf\xc4\x4b\xf8\xef\x97\xdf\xe0\xff\xe2\x8f\xd9\xbf\xff\xe5\x9b\xaf\x5f\xbe\xdc\xb7\x9a\xc4\x2b\x96\xf3\xc5\x81\xbd\xfd\x14\x49\xed\x93\x13\xff\xfd\xdf\xd9\xb5\x5f\x33\x4b\x44\xe8\x3e\x06\xa7\xdd\xab\x97\x7f\xa1\x5e\xbe\x62\x53\x5d\x97\xa6\x5f\xce\x6b\xd7\xf6\xe9\xd9\x5c\x2b\xa1\x9a\x85\x73\xfa\x20\x95\x7b\xb4\x6d\xc2\x7a\x70\x1d\xad\x8d\xcc\xb5\xcf\x7c\xdd\xa3\x76\x6d\x81\xb2\xd4\x09\x9d\xc5\x0f\x8f\x41\x03\x96\xe9\x9c\xaa\x75\x46\x5f\x86\x94\xe4\x28\x22\x79\x2a\x78\x51\x4d\x59\x36\x15\xd9\x4d\xf4\x5e\xd2\x3d\xd9\x59\x65\xe7\x1d\x95\xd5\x49\xcd\x7c\xf5\x00\xda\xe8\xfa\xcd\x21\x75\x15\x3e\x4d\xd6\x83\xba\xf4\x05\xf1\xd7\x0c\xa1\x51\x2b\xd8\x3e\xbd\xde\xfb\x1e\x3e\xba\xb8\xde\xb3\x0c\xeb\x0a\x72\x92\x2d\x9f\x7a\x83\x89\xc7\x03\x06\x8d\x3e\xaa\x1b\xa5\xef\x54\x47\x38\x55\x95\x64\xb2\x57\x94\xcb\xdf\x6f\x38\xaf\xe3\xa1\xf4\x27\x30\xae\xaf\xce\xea\x9b\xcd\x06\x6c\x1f\x23\x00\x1b\x3f\xbe\x95\xa6\x3a\x00\xdc\x0a\x13\x3b\xe3\xb1\x92\x00\x55\xee\x50\x63\xbd\x03\xe9\x7b\xea\xf8\xf1\x55\x18\xfd\x6f\x09\x95\xca\x9f\x9e\x70\xae\x8c\x47\x5f\xd9\x42\x31\xd3\x04\xcd\x5b\x8e\x18\x9e\xf3\x2a\x9b\x1e\xce\x44\x39\x11\x87\x37\x62\x61\xb9\x06\x92\xad\x44\x2b\x53\x95\xbc\x12\x13\xdb\x08\x5e\xd8\x85\xc9\xef\xc2\xe4\x97\xc3\xe4\x1f\x1c\x91\xbe\x4c\xfd\xfa\x46\xa6\xb7\xc9\xdf\x2a\x96\xc2\x8b\xa2\xc9\x56\x4c\x14\xd8\xe4\x2e\x23\x8f\x91\xe3\x96\x89\xee\x0e\xf1\xef\x19\x22\xfe\xbd\xed\xbd\x59\x8f\xa7\xa5\x51\xe1\xc8\x1d\xf1\xfb\x6c\xc1\xfe\x9a\xc3\xfb\x0d\xf0\xfe\x3a\x29\x5f\x3f\xd4\x75\x77\x28\xad\x56\xf9\x8e\x27\x02\x8c\xfc\x23\x12\x06\x9b\xa1\x6a\x90\xd4\x6e\x29\x1f\xa4\x1a\xa2\xca\x6f\xea\x59\x1f\x8c\xbf\x1d\x05\x7b\x14\x05\x1b\x49\xc5\xcb\xc5\x69\xf2\xe8\x7f\xeb\x9f\x35\xa1\x07\xf1\x1d\x86\xf7\xe0\x8c\x67\x53\xf0\x4e\x82\x26\x6e\xf7\x8d\x88\x1f\x2f\xe6\x53\xae\xea\x99\x28\x65\xc6\xb2\x29\x2f\x79\x56\x89\xd2\x0c\xd8\x8b\xc3\x17\x03\xf6\xe2\x1f\x2f\xac\xfa\xf3\x62\xf8\x62\xc8\xe2\xef\x70\xe5\xbe\xc5\x46\x8b\xca\xaa\xff\x3f\xd7\x18\x5a\xe9\xa3\x06\x2d\xd9\x20\xe3\xe8\xc7\xab\x37\x87\x7f\x61\x25\x57\x13\x32\x0a\xdc\x88\x05\x45\x20\x42\xfc\x6f\xd4\x33\x0c\xcf\xbe\xaa\x6f\x45\x59\xf0\x39\x46\x14\xdb\x4e\xb4\x3d\x18\xd4\x21\x34\x85\x68\xd2\x01\x9e\x09\x69\x98\x50\x60\x68\xcb\x59\x5e\x3b\xfa\xe9\x74\x97\x79\xa9\x33\x61\xcc\x90\x7d\x34\x1e\xdd\x06\x63\x51\xc1\x40\x47\x1c\x98\xbd\x1a\xbe\x7a\xf9\xff\x63\xf6\xa2\xc2\x21\x82\x33\xe0\x8c\xb8\x0f\x0e\x58\x6c\x15\xe2\xfa\x75\xb0\x97\x26\x61\xed\x1d\x6c\xdf\xbe\xad\x6c\xe4\x8f\xa8\xfc\xc2\xca\x2a\xad\x0e\x71\x7b\x96\xf6\x11\xba\x77\x29\xc7\xd1\x06\xc1\xba\x25\x77\x71\xcd\xfe\x41\x6b\xda\xbf\xe5\xfe\x36\xda\xc5\x47\x65\x21\xec\x98\xef\x4e\xf3\xd8\x92\xe6\xe1\x98\xe8\xa6\x5c\xf7\x4c\xdd\x76\x79\xb4\xda\x6d\x98\x11\x85\x15\x46\x19\x67\x81\x37\x57\x9a\xcd\xf5\xbc\x2e\x38\x45\xe4\x0b\x75\x2b\x4b\xad\xc0\x81\x74\xcb\x4b\xc9\x47\x05\xdd\x6f\x00\xe8\xbc\xa2\x92\x82\x60\x56\x26\x0b\x19\xa5\x1e\xfb\x3e\x5f\x98\x88\xa8\x3a\xb2\x48\x47\xda\x5d\xdf\x43\xbc\x15\x73\x2e\x4b\x63\xd5\x9d\xe4\x67\x7b\xe0\xc2\xad\x45\xaf\xa2\xa0\x93\x6a\x63\xac\x3c\x4b\x74\x6e\xa5\xb8\x3b\xba\xd3\xe5\x8d\x54\x93\x43\xbb\x06\x87\x24\xcf\x1f\x01\x52\xc9\xd1\x17\xf0\x9f\xd4\x01\x77\x59\x09\xdd\xa8\x87\x77\x53\x41\xe1\x54\x22\xda\x0e\x67\xdc\x46\xe9\x25\xe5\x79\xe9\xb4\xdd\x51\x17\x7f\x17\x8b\x4b\xd8\xe7\x94\x6d\xf7\xd2\x9f\x00\x4b\xf6\x81\x8a\x44\x87\x61\x9d\x4a\x79\x23\x16\x6d\x85\x12\x6c\x36\xa9\x8c\x74\xfb\x85\x4a\xd3\xa1\x4b\xe7\xa9\xfc\xde\x76\x4f\x97\x4c\x5a\x92\xe5\x79\xea\xa3\x76\x32\x6d\x4a\x68\x3c\x76\xf9\x3a\xc4\x45\x22\xa7\x5a\x6c\x3f\xf0\xc3\xdb\x59\x0e\x9e\x9f\xe5\xc0\xd7\x0a\xc0\x10\xd8\xa5\x3d\xdb\x92\xe5\xc0\xf1\x97\x9d\xd8\xf2\xc7\x29\xde\xb2\x15\xc3\x40\x4c\x8a\x36\x15\x4e\xde\xeb\x5c\xe0\x1f\x6b\x65\x94\xe5\xa6\x4b\xc0\xf7\xcd\xdc\xc2\x10\x47\x1a\x0b\x32\x1c\x83\xaf\xc1\xf5\x4d\xa7\xd3\x19\x56\xdf\x37\x3d\x91\x9d\x20\x9d\x88\x4c\x36\x70\x80\x9d\xa4\xaf\xe1\x27\xfe\x9e\xe4\x7d\xcb\x2d\xda\xd7\x6a\xa9\x05\xcb\x45\x56\xf0\xd2\x8a\x54\x90\xed\x69\x39\x45\x93\xd7\x59\x85\x25\xcc\x0a\x92\x5d\xcd\x1c\x1c\xe5\x44\xed\x1a\x5d\x3a\x85\xce\x54\x65\x9d\x55\x75\x29\x96\xb2\x23\xdd\x14\xad\xb6\xc4\x8b\x82\x65\x10\xa0\xb0\x21\x33\x26\xe2\xe4\x05\x71\xd5\xe6\xd0\x8d\x51\x2f\xa7\x68\x6e\x36\x88\x0e\x7c\x38\x0f\x1d\x97\x1c\x4e\x03\x35\x6e\xbb\x63\x72\xc4\xae\x93\xf9\x7d\x68\x36\x68\x8d\x6f\xf9\xf9\x06\xa3\x1c\xeb\x72\x24\xf3\x5c\x00\xcc\x38\x1c\x63\x2b\x80\x0c\x28\xfd\x30\xcc\x00\x1f\x81\xf5\x2e\x5d\x1e\xbe\xb3\x2c\xfd\xd2\x58\x3f\x06\x40\xea\x4f\x37\xbe\x75\x82\xd0\x45\xa9\xff\x85\x29\x15\xa9\xdc\x48\x3e\x5f\x52\x69\xa4\x82\x78\xa3\x39\xbe\xe5\x81\x6b\x1f\xa3\xbf\x8c\x04\x23\xe6\x46\x27\xa6\xd5\xbb\xa5\x3f\x10\xe4\xc6\x6a\xe3\x78\x65\x6c\xa6\x88\x7a\xa4\x98\x3e\xdb\x1a\x11\x0f\x07\xac\x56\x85\x30\x44\xec\x40\x1e\x10\x05\xc6\xf0\x01\x76\x32\xaa\x67\x39\xda\x3f\x7c\x7a\xed\x8c\xcf\xe7\x80\xdd\xa6\xc7\xf8\x25\x48\xbb\xae\xa6\x66\xc8\xde\xeb\xca\xc3\xf8\xa3\x2d\x04\x83\x99\x32\x5e\xf8\x60\xc4\xb1\x9c\xcc\xf8\xdc\xa3\x05\x23\xc5\xb4\x5f\x70\xb1\x17\x2e\x28\x7d\xd6\x41\x3d\x9b\xa4\xb0\x4b\xba\x69\x44\xdd\x0d\x98\x20\x93\x53\xa4\xff\x25\x56\x68\x15\x45\x0c\xfb\xe1\x36\x00\xf6\x3b\x0a\xd2\x02\x4e\x00\xab\x7b\x37\xd5\x86\x10\x08\xe8\xa0\x5b\x7a\x6b\x0f\x27\x9d\x01\xf7\x33\x8c\x06\xb2\xc2\xa3\xb1\x3a\x81\x4c\xe4\xb8\xbe\x2b\xbe\xec\xdf\xc2\x1d\xc0\x0b\x50\xab\xd6\xdb\x24\xcb\xd0\x59\x82\x0f\xa2\x2a\x26\x4d\xd4\x07\xb2\x06\x69\x08\x56\x00\x15\x67\x5a\x25\xbf\x10\x0d\x40\x7f\x23\xaa\x9a\x96\x06\x83\x6f\xe8\x40\x49\x82\xbd\x2a\x6f\x44\xee\x33\xe5\x87\xec\xc2\x0e\xd2\x6b\x28\xa5\x28\x38\xe4\xf0\x3b\x81\xd9\x7e\xd6\x99\x64\xed\x47\x5e\x0c\x87\x2f\x30\x2d\x45\x97\xcc\x54\xbc\x24\x70\x06\xfb\xfb\x36\xe4\xd3\xbf\x8b\xc5\x95\x06\xf0\xeb\x5f\x7f\xe7\x5a\xa1\xd9\x82\x5a\xb8\x06\x52\xb4\x93\x1e\x3e\x05\x15\x7c\x86\xb4\x2f\xcc\x7b\xcb\x41\xd2\xcb\x88\xed\x40\x1d\xd3\xf8\xe0\x21\x00\x76\x06\xb8\x9c\x12\x63\x60\x6b\x03\x58\x31\x19\x40\xca\xe4\xb4\x64\x23\x8f\x56\x1b\xc7\x4b\x23\x79\x74\x35\x87\x5e\xc2\x30\x5f\xfe\xf9\xcf\x7f\x6e\x62\x3a\xbc\xfc\xe6\xeb\xaf\x87\xec\x54\x96\x60\xee\x91\x64\xa8\xa3\x55\x87\x0b\xeb\xbc\x27\x7c\x3c\x46\x92\x05\xe1\xd6\x96\xda\x60\xd8\x30\x31\xf4\x99\x9c\x4c\x2b\x0a\x41\xb7\xbc\xa1\x90\x19\xdd\x71\x04\xe4\xc7\xa3\xef\x3c\x32\xd0\x57\xd8\xc7\x19\x80\xf9\x17\xf2\x46\xb0\xb1\xf9\xce\x2a\x11\x48\xff\xf0\xaa\x02\xa8\x43\xc6\x95\xed\x1d\x3b\x0b\x6b\x62\x1a\xde\x90\x55\x55\x44\x76\xec\x65\xc7\x5e\x76\xec\xe5\x69\xd9\x0b\xa6\xa7\x24\x58\x8a\x83\xaf\xe7\xf3\x79\xe1\x92\x35\x7d\x3a\x4b\x1b\x6b\xb4\xac\x95\xa3\x43\xbc\x0f\x1e\xb5\x4a\xa2\x4f\xf3\x72\x92\x02\x5f\x29\x27\x80\x07\xe3\xb5\x61\xa1\xaa\x72\x01\xb6\x24\x2a\x01\xa6\xb3\x1b\x51\x32\x39\xe3\x13\xf1\xc2\xb0\x93\x77\xa0\xe3\x40\x4c\xbf\x1c\x7b\x71\x38\xc6\x6b\x1a\xb2\x1f\xc9\xe1\x10\xc3\xfa\xfc\xdb\xfe\x8f\xc7\x1f\xfe\xf1\xfe\xf8\xdd\xd9\x01\x10\x51\x71\x3f\xe7\x2a\x17\x79\xc4\xe2\xfc\x12\xbc\x68\xf8\x2f\xe8\xda\x39\x2f\x86\xa5\x7d\x74\x2f\xad\x26\x59\xdc\xba\xbb\x1f\xcc\x18\x74\x0f\xa4\x9a\xd7\x95\x33\xbf\x39\x6a\x50\xab\x6c\xca\xd5\x44\x90\x9f\x34\x1e\x96\x59\xa8\x8a\xdf\x3b\xda\x2a\x4c\xc6\xe7\x8e\x51\x72\x96\xeb\xda\x7e\xfc\xdf\xfe\x6d\xc0\xa4\x78\xcd\xfe\x2d\x7a\x71\xc8\xce\xa8\x6d\x34\x5f\xa4\x1f\xe2\x56\x94\xd0\x19\xcd\x76\xc0\x4a\x31\xe1\x65\x0e\xb7\x5d\x8f\x1b\x27\xd0\x4f\x10\x92\x9e\x8c\x3d\x87\x4a\x57\x49\x93\x5d\xbf\x7b\x54\x71\x73\x63\x8e\xa4\xb2\x47\xe4\xd0\x6a\xa3\x87\xd1\x81\xc3\x4b\x2e\x0e\x33\x3d\x9b\x71\x95\x1f\x72\x3a\x08\x87\x7e\x17\x8e\xbe\x20\xc0\x9d\x43\xee\x5b\x49\x75\xc8\x0f\xcd\x54\x14\xc5\x46\x39\xf2\xf4\x7a\xfb\xf8\x9d\xf9\xd3\xc6\xa0\x1b\x50\xb5\x98\xb8\x17\x59\xed\x84\x14\x38\xf5\xf0\xc9\xe4\x81\x3c\x7b\x7f\xf5\xe1\xbf\x2e\x7e\x38\x7f\x7f\xb5\x3b\x97\xbb\x73\xb9\xe1\xb9\x14\xea\xb6\x3b\xf4\x30\xed\xb9\x05\x0f\x9c\x67\xef\x51\x12\x62\x7b\x39\xb6\xc0\x6a\xcf\xd4\xed\x8f\xbc\xec\x11\xe3\x4d\x26\xd6\x9e\x31\xde\x42\xdd\xbe\x29\xf5\xac\x7b\xee\xe4\x76\x69\x78\xb3\xd3\xeb\xd1\x5e\x08\x1f\x7e\x42\x3c\x33\xba\xc5\x68\x14\x99\x79\xa9\xfc\xe4\x1f\xe7\xa7\x67\xef\xaf\xce\xdf\x9c\x9f\x7d\x18\xb2\xe3\xa2\x60\x52\x41\x54\x49\x53\x82\x2b\x05\xe5\x36\x72\xa8\xe6\x20\x6e\xed\x10\x42\x69\x4f\xcf\x39\xad\x54\x66\xc5\x1d\x90\xc3\x7f\xb2\xcf\x51\x5a\xa3\x83\x2b\x55\xa8\x35\x43\x13\x1c\x04\x71\x32\x06\x11\xf4\x81\x31\x50\x18\xd4\xdb\x72\x8a\x82\x55\xfc\x06\xe4\xc1\x4c\xe4\x02\x6a\x56\x52\xc0\x8e\x9b\x2b\x62\x42\x9e\xa9\x5b\x7f\x3f\x6b\x3c\xda\x28\xcb\xa6\xfb\x78\xaa\xa3\x63\xf7\x98\xf4\x5a\x90\x52\x66\xc9\x2c\xa1\xd3\x88\xa0\x52\xa5\xc4\x0d\xe5\xb4\x00\xc8\x76\x04\xbd\x98\x0e\x48\x41\xb0\x95\x15\x85\xbe\x63\x53\x39\xb1\xe4\xa5\x10\xb7\xa2\x70\x4e\x86\x48\x89\xac\xb4\xb7\x96\xe9\x12\xc2\x95\x4a\x99\x37\x76\x1a\x3f\x23\x15\xb3\xa2\x61\xa1\x39\xaa\x08\x08\xcd\x6a\x50\x77\x3a\x15\xf3\x42\x2f\x66\x54\x03\x24\x67\x97\x15\xaf\xc4\xb8\x2e\x2e\x45\x95\x36\xea\x42\xa7\x17\x75\x51\x5c\xe8\x42\x66\x09\xe7\xc3\x39\x2c\xd1\xbc\x2e\x0a\x36\x87\x26\x43\xf6\x83\x02\x31\xf7\xb8\xb8\xe3\x0b\x33\x60\xef\x2d\x61\x1d\xb0\xf3\xf1\x7b\x5d\x5d\x38\xad\x21\xd6\x30\xb1\xa1\x65\x51\xaf\xc9\xcb\x5a\xf1\x49\x43\x9d\x80\x9c\xa6\xb8\x03\xd4\xf2\xee\xa4\x49\x9e\x94\x47\xef\xd5\x17\xd0\x93\x25\xa7\xf8\x77\xb2\xd6\xb1\x1c\x8b\x6c\x91\xa5\x90\x57\x8e\xb3\x48\x93\x05\xd3\x77\xd8\x46\x4a\x50\x26\xbf\x33\x1c\x7b\xa9\x18\xfa\x5f\x8c\xa0\x20\x55\xda\x51\xff\x09\xbc\xde\xa6\xe3\x56\xf4\x4e\x58\xf5\x23\x86\xe1\xdf\x0a\x25\x8c\xb9\x28\xf5\x28\x31\x85\x0b\x51\x4a\x9d\x23\xc0\xe2\xc8\x25\x85\xf9\x61\xe1\xab\x60\x07\xa1\xdf\x02\x59\x02\x6a\xe3\x24\x0e\x41\xef\x8f\xb9\x2c\x92\xc3\xdf\x74\xab\xdc\xd1\x36\x47\x73\x8d\xff\x73\xe8\x57\xe9\x0b\x3f\xc4\x43\xf8\x6a\x8f\x98\xe7\x50\xda\x0f\x96\xa1\x97\xea\x16\x16\x22\xa8\xbb\xa0\xaf\x9f\xbe\xbf\xfc\xc7\xdb\xe3\x6f\xcf\xde\x52\xd4\x63\x74\x35\x49\x4b\x41\x32\x3f\xe5\x56\x51\x75\x70\xc1\xa0\xda\xef\xfb\x77\x0f\x56\x93\xbe\xa8\x78\xac\x2e\xab\x15\x49\x02\xf0\xd8\x1e\x27\x71\x3f\xd7\x46\x04\xb7\x78\xc4\x95\xce\xec\x23\x0c\xe4\x00\xe3\x15\xe4\x80\x4f\xe4\xad\x4b\x9e\xc5\xa3\x1a\x82\x15\x13\x29\x90\xb6\x9d\x12\x95\xdd\x16\x97\x50\x0d\x47\x3f\xc2\x22\xb0\x02\xa8\x19\xb0\x51\x8d\xd6\xb6\x52\xce\x78\x29\x31\x89\xde\x75\x66\x15\x7a\x2b\xe4\x52\xa5\xd9\xe5\x21\x9d\xfe\x70\x76\xc9\xde\xff\x70\x65\x19\xc4\xad\x70\xa0\x5e\xf0\x1c\xa6\x35\x12\xf6\x0d\x9c\x68\x3e\x64\xc7\x6a\x81\x0f\xbd\x11\x02\x8c\x18\x10\xb2\x42\xc5\x8d\x1c\x25\xbd\xde\x7b\x39\x84\xff\x7f\xbd\x67\xe7\x59\x82\xc1\x41\x19\x4b\x58\xe3\x19\xb8\xd3\xcd\xb3\x4c\x18\x23\xad\xe0\xe7\xd7\x93\x66\xff\x44\x1c\xcb\xdf\xb0\x0b\x5d\x56\x2d\x99\xc7\xce\xeb\x70\xc6\xe7\x56\xe0\x31\x56\xcd\xcd\x1a\xcd\x41\xdd\xad\x74\xa6\x0b\xab\xfa\xb6\xdf\xa4\xc1\xcd\x20\x28\x70\x8d\x30\xb5\xdc\x73\x4f\xa9\xaa\x14\x3c\x97\x0f\xa4\x33\x86\xca\x52\xf9\x3e\xd2\x04\x07\x21\x46\x61\x3f\xdc\x1b\x2e\xf4\xc3\x7c\xae\x54\x28\x04\xf9\x24\xf3\x63\xeb\x4a\x30\xe7\xf1\x8d\xdc\xcc\xce\xee\xba\x52\x02\x7f\x00\x73\x0c\x31\x00\x47\xc8\xc9\xac\x8e\x61\x07\x71\xe8\xc7\x19\xa9\x22\x1b\xcc\xd7\xcd\x81\x70\xee\x40\x2e\x21\xdc\x87\xba\x94\xd5\xc2\x6e\xb7\xb8\x4f\xe5\xba\x51\x83\xc8\x68\x0c\x65\xc9\x1c\x5f\x75\xe6\xa1\x8d\x67\x8b\x32\xcc\x91\x1b\x00\x4c\x4b\xdc\x57\x47\x1b\xa9\x71\x6e\xc9\xc4\xa1\x3d\x19\x61\x65\x5a\xbd\x6e\x06\x98\xd3\x58\x12\xc8\x2d\xcf\x65\xc2\x5b\xfd\x93\xd7\x53\xe3\xa3\xe0\x56\xc6\xca\x9a\x20\x7a\x73\x36\xaa\xc7\x63\x51\x22\xe0\xb1\xed\xaa\xa5\xb7\xd8\x65\x44\x64\x84\xf3\xa6\xf9\xc0\x88\x6a\x00\xd7\x92\xc2\xad\x3a\x5e\x87\x3b\xca\x51\xba\x23\x23\xbd\x54\xec\xec\x87\x37\x01\x07\xc1\x8a\xc4\xbc\x30\xa2\xa3\x20\x9b\xed\xf7\x07\x95\xf2\x41\xfd\x14\x69\xe3\xad\x01\xfb\xb0\xbe\x42\x53\x46\x00\x8e\x30\x9b\x72\xa5\x44\xc1\xf8\xb8\xb2\x5c\xd9\xb2\x62\xc3\x46\x42\x28\xa6\xe7\xc2\xa9\x2a\xde\x12\x09\x35\x69\x49\x69\xa2\x19\x1a\x56\x95\x75\xdc\xa3\xa9\x4a\xc1\x67\x2e\x00\x79\xc6\x25\x76\xc5\x78\x56\x6a\x63\x82\x6e\x85\x9d\x39\xd8\x09\x83\x76\x7a\x37\x3b\x86\xbe\x12\x30\x37\x96\xb5\x18\x84\xaf\xd1\xb0\x1a\xb6\x50\x10\xb0\x06\x1e\xb0\x8e\xd9\x29\x17\xe4\x29\x29\x4d\xe5\x42\xdd\xa8\xa4\x2e\x6a\xe7\xb6\x3f\xef\x30\x51\x34\x52\x43\x43\x55\x39\x30\xb6\x79\x65\x30\x63\x2a\x74\x48\x5d\xe5\xd2\x10\x6f\x37\x03\xc6\x1d\x5f\xc5\x85\x76\x23\x85\xa5\xce\x1d\x66\x35\xf4\x4e\x3f\x45\xdd\xc5\x5a\xa9\x97\x14\xc3\xe9\x1a\x17\x28\xf7\xc3\x89\x18\x34\x38\x30\x25\x53\xb8\x84\x9d\xd6\xd9\x8b\x4c\x38\x56\x89\x44\x57\x40\xfa\xa8\x25\x4f\x1a\x42\xe1\x03\x8d\x23\x84\x88\x74\xa1\xe4\xe0\x75\x83\x62\xc9\x61\x31\x9c\xa3\xaa\xd2\xd1\x2f\xb1\x95\x2c\xfa\x02\x23\x74\x0a\xcf\xc4\xee\x4a\x59\x55\x02\xd6\xd1\xc1\x61\x7a\xbf\x4c\xdc\x47\x40\x38\x1a\x32\x07\x64\x11\xbd\x2b\x55\x25\xc0\x4e\x87\xb0\x44\xa3\x52\x8a\x31\x1b\x4b\x2b\xb9\x21\x0e\xc5\x80\x99\x3a\x9b\x92\xc9\x80\x1b\x23\x4a\x18\x8e\xe5\x8b\x50\x0c\x16\xbb\x1c\xb2\x9f\x68\x5c\x55\x59\x2b\xac\xed\x47\x08\x4a\x50\x02\x50\x8e\xd9\x04\xdc\x8b\x84\xd3\xf9\xf5\xcb\xbf\x7e\x03\xe9\x38\x06\x0d\x1d\x95\xae\x78\xe1\xe7\x58\x08\x35\xb1\x2b\x85\x17\x02\xc2\xa0\xbc\xba\xe5\x17\xa0\x90\x33\x59\xe1\xc0\x5f\x7d\x79\x33\x6a\xea\x87\x47\xb9\xb8\x3d\x8a\x96\xef\xb0\xd0\x93\xbe\x52\x72\x62\x5f\xbb\x14\x59\x85\x95\x74\xd9\x54\xdf\xa1\xb3\x3a\xb1\x61\xa1\xe0\xb5\xf7\x1a\x0f\xb1\x86\x26\xcc\xc4\xe5\x1f\x35\xfc\xde\xc9\x93\xd5\xca\x89\x68\xdc\xef\xaa\x36\xfe\x93\x5a\xb1\x91\xae\xa6\x76\xe7\xec\x0d\x80\x1b\x46\x1b\x36\x64\x6f\x78\x51\x8c\x78\x76\x73\xa5\xdf\xea\x89\xf9\x41\x9d\x81\xe7\xac\x31\x16\x30\xd7\x64\xd3\x5a\xdd\x2c\x69\x71\x7a\xc2\x74\x5d\xcd\xad\x58\x3e\xee\x9c\xf0\x98\x40\x43\x91\xd4\x38\x8f\x6b\xe8\x45\xdc\x4b\x6f\x1c\xe2\x84\xe6\x82\xa7\x20\xee\xdf\xc4\x1b\xfc\xe5\xcb\xaf\x31\x7b\x0b\xcc\xa6\x7f\x79\xc9\x0a\x2b\xdc\x0d\xf0\xda\x08\xaa\xea\x61\x66\xbc\xa0\xfa\x92\xe1\x20\xd8\x85\xee\xbd\xf1\xa9\x42\xf3\xbd\x59\xe3\xd5\xd5\x7f\x01\x5f\x94\x95\x11\xc5\x78\x80\xe8\x69\x24\x67\x19\xf6\x02\x68\xce\x0b\xba\x66\x96\x64\xf7\x65\x68\xe8\xeb\xc4\x6a\xeb\x09\xd9\xae\xf1\x78\x39\x5e\x7b\x54\xe8\xec\x86\xea\xb1\x1b\xfa\x36\xd8\xf6\xe9\x6e\x36\xcc\x8d\x92\x90\x82\x47\x51\x8d\xb9\x6d\xe8\x23\x3f\x46\x23\xec\x61\x82\x8d\x6a\xce\xf7\x56\x19\x6e\x23\x84\xb1\x84\xc2\xa0\x73\x1f\x74\xe1\x40\xe0\xd6\x13\xcb\x27\xd1\xcd\x22\x28\xb4\x1e\x4b\x01\x23\xdd\x6c\x25\xc8\xc5\x7b\x2a\xd3\x08\x4a\x7e\xa6\xd4\x8e\xe5\x14\xa4\xb1\xf0\xf5\x62\x96\x42\x01\x5a\x82\xd2\x0b\xe3\x55\x61\xef\x74\x31\xb6\x35\xf2\x30\x1f\xb2\xe1\x25\xda\xbc\x2d\xe5\x81\x89\xac\xdf\xb5\x5c\xe7\x17\x3e\xef\xb0\xc6\xc2\x5f\xa3\xa6\x4e\x8e\x96\xdb\x1e\x01\xd7\x6d\xb7\x2f\xfe\x9c\x8e\xfe\xb5\xb7\xc9\x31\x70\x7b\x89\xc0\xbc\x29\x0d\x03\x34\xa5\x21\x13\xc3\xc9\x90\xfd\xf7\xf5\x9e\x9d\xc2\x24\x2b\xad\xe0\x3f\x5d\xcc\x45\x69\xf7\xf3\xf5\xed\xab\xe1\xcb\xe1\x9f\x11\x8d\x09\x5d\x72\xd3\x7a\x64\x9b\x4c\xb4\x9e\x14\xe2\x1f\x91\x9d\xb1\xfd\xd2\xff\x6c\xe4\xa5\x31\xf2\x17\xf1\xed\x22\x59\x3a\xc5\x12\x5f\xfb\xd8\xd9\xab\x68\x0a\x8a\x58\xf4\xba\x58\x98\x6f\xbe\x5e\xbf\x4f\x60\x03\xe8\x3e\x92\xf6\x71\xa3\xda\xb4\x37\x11\x81\x59\x06\xfd\x1e\x28\x64\x07\xa2\xb5\x66\x2b\x9b\xf6\x87\x64\xe1\xcb\x15\x43\x7b\x5f\xcf\x46\xa2\x74\x76\xb1\xc8\x2c\x46\xf6\xa0\xb9\xce\x5f\x18\x76\x7e\xe1\x8c\x40\x2e\x64\x29\x8e\x95\x92\x39\xbe\xac\xa0\xaf\x01\x7b\x49\x40\x70\xec\xde\xfd\xe3\x9b\x3f\xfd\xe9\xab\x6f\x7a\x06\x1b\x4d\xb5\xa9\xce\x2f\x52\x2c\x8a\x57\x08\x54\x79\x7e\x11\x8a\xaa\x4e\x45\xa8\xa9\x45\x33\x48\x72\x3d\xfb\xe2\xc3\x56\xc0\xbe\xd9\x8e\x1e\x7a\xe8\x1a\xd8\x8e\xbe\xd7\xa6\x7a\x4f\xfb\xde\x34\xe6\x87\x7e\x67\x96\xf6\xb1\xc6\xc1\xb1\x2a\xbb\xa9\x62\x21\x91\x20\xf9\x95\xb0\xf2\xc3\x54\xae\x3f\xc2\xb8\xc2\x69\x4b\xee\xaa\x19\x2a\x76\x7e\xfc\xfe\xf8\x1f\x97\x3f\x9e\x80\xb3\x98\x22\xa0\xc0\x4a\x1b\xc7\xbc\xe9\x9c\x0c\xbc\xf6\x0b\x79\x74\xa6\x57\x58\x78\x87\x58\x09\xdc\x65\x8b\xe0\x1e\x40\xfd\x70\xf4\x60\x83\x37\xda\x21\x8a\x2e\x9c\x21\x2b\xed\x93\xf1\x46\xbd\x36\x73\xa4\x27\x04\x7a\x51\x46\xe1\x7e\x1f\x4f\x2f\x06\xec\xea\xe4\x02\x5c\x29\x97\x27\x57\x17\x4d\xd1\xea\x7a\xef\xea\xe4\x22\x09\x16\xb7\x8e\x16\x80\x0b\x69\x05\x31\x80\xe7\x04\xcf\x61\x97\x88\xec\xa7\x06\x7e\x8e\x25\xd2\x21\x03\xac\x51\x8d\xde\x23\x59\x59\x11\xd8\x9e\x32\xe3\xea\x6d\x45\xc0\xaa\xc0\xde\x94\x23\x71\xb3\xd6\xf9\x0a\x16\x5e\xdb\x4a\x1a\xd6\x1c\xce\x4f\x5c\x56\xbd\x22\x30\xc9\xab\x9e\x62\x49\x15\x97\x85\xf1\x40\x80\xad\x3a\x4c\x1b\x98\x76\x9a\x63\xfb\x40\x9f\x8c\x94\x17\x91\x88\x12\x59\x1e\x40\x68\xbb\x85\x31\x5c\x85\x0f\x5b\x31\x04\x57\x6b\xfd\x18\xa8\xe1\x16\x06\x40\x1b\xd4\xf3\xf4\x7d\xe8\xda\xa5\x64\x33\xca\x67\xa5\x3f\xfc\x39\xe4\xab\x79\x51\xf3\x5c\x90\xe9\xe2\x38\x55\x28\x5b\xce\x44\xd3\x2e\x10\x19\xc4\xb8\x41\x7d\x6c\xbf\x14\x87\x07\xd4\xc9\xa3\x12\xf0\xec\xd7\x7a\xae\xd2\xd5\x8a\xd3\xd4\xd5\x12\xd7\x2a\x3a\x5b\x7d\x97\x2b\x66\xdd\x56\x47\x3c\xd1\x79\x47\xb9\x6a\x14\xfc\x12\x68\xb9\xb1\x84\x7b\x7e\xea\xe4\x4e\xa4\xf3\xec\x05\xca\x57\xaf\x8f\x8e\x90\xef\xf8\x9e\xfe\x21\x73\x04\x6d\x7d\x91\x22\x9d\x7e\x28\xed\xa8\xab\x7b\x59\x39\xd5\xdb\xfb\x76\x60\xaf\x62\xb5\x78\xd9\x05\xd8\x8f\x13\xd9\x3d\x35\xd3\xcd\x8f\x4b\xe3\xf3\x5b\x39\x28\x3d\x80\x51\x31\xe8\xc9\xc5\x79\x6d\xb0\x02\x0d\x60\x6a\x93\xca\xa3\xda\x07\x8b\xd4\x01\xc3\xe7\x0f\x5a\xe6\x08\x59\x55\x4e\xd2\x81\xac\xf0\xfb\xd6\xf7\xb0\xf7\x8d\x9f\x97\xe2\x56\xea\xda\x50\xc4\x5e\xea\x8b\xec\x13\xdf\xfc\x9f\xba\x08\x78\xb2\x19\xde\x79\x47\xcb\x1f\x46\x1f\x37\x38\x65\x77\xd3\x45\xdb\x38\x6c\xe5\xbd\x85\xa8\x1c\x95\xee\xc8\x99\xec\x75\xca\x1e\xd0\x77\x9f\x45\x4d\x43\xd7\x36\x1a\x84\x04\xe3\x9c\x18\xa5\x47\x61\xac\xcb\x12\x82\x41\x22\x14\xe0\x86\xdf\xae\x4f\x34\x33\x3a\x57\x17\xf0\x5f\x38\x50\x27\x60\x89\x70\x31\x4d\xf4\xdf\x14\xc8\xfe\x93\x92\xdd\xee\x30\xa2\xb4\xaa\x8a\xea\x69\xdb\x3d\x40\xbb\xf3\xe8\x58\x9e\xce\xe1\xa4\x26\x7f\x8e\x0f\x5a\x37\xf6\x05\x59\x02\x92\x93\xb3\x14\xa6\x43\x0a\x6e\x4a\x48\xcb\x5d\xb6\x48\x93\x07\xec\xdc\x24\xac\x67\x49\x12\xef\xd4\x7c\x96\x34\xda\x87\x47\xab\xf4\x35\xc1\xe2\xf1\xec\xc8\x34\x80\x44\xa2\xa4\x0f\x6f\xca\x7d\x29\x63\x84\x6a\x20\xef\x3f\x3a\xf1\xd3\x76\xd5\xc6\x0d\x48\x1e\x33\xe5\xf5\xdf\x4a\xce\x84\x49\x7c\x13\xfc\x80\xde\x2b\x35\x70\x97\xb4\x58\x10\x74\x3d\xd1\x92\xd0\x51\x2e\x78\x1e\xeb\xa9\x54\x6e\xfa\x56\x78\x12\x43\x5d\x42\x84\x42\x2a\x63\x36\xe3\x45\x46\xb9\x67\xc0\xaf\x96\x7a\x1c\xb2\x6f\xe1\xd4\x58\x35\x3d\xfa\x0e\x2f\x05\x33\x35\x02\x62\x54\x9a\x4d\x78\x39\xb2\x57\x28\x14\x85\x23\xeb\x05\x86\x70\x82\x5d\x6f\x22\xac\xa6\x39\x9f\x8b\xdc\x32\xaa\x3f\x59\x15\xf3\xbb\x93\x9e\x7a\xb4\x79\xc8\xd1\x76\x14\x6e\x2b\x27\xba\x83\x1e\x9f\x72\x31\xd3\xea\x8c\x62\x3d\x52\x00\x75\xf1\xf3\x40\x8d\x53\x40\xee\x64\x8e\xc2\x57\x7c\xfc\xc8\x3a\x3a\x9c\xb6\x45\xa5\x0d\x30\x17\xc1\x6e\xe2\xc8\xcb\x44\xde\x8a\xe4\xc7\x36\xc6\xfd\x3f\xd5\x77\xea\x8e\x97\xf9\xf1\xc5\xf9\xaa\x44\xf6\xa8\x02\x4d\x4e\x6f\xb0\xe3\x8b\x73\x58\x11\xb4\x19\xd0\xcb\x50\xeb\x23\x9d\xe1\xbe\x3e\xf1\x3b\x0f\x83\x79\xf2\xd4\x6f\x07\x6c\x13\xa0\x88\xa2\xa5\xa0\x92\xde\x63\x59\x88\x2d\x98\xfb\x5b\x1d\x43\xd9\xbd\xce\x2a\xc5\xe9\xe6\x89\x48\xe3\x44\xb3\xd8\x78\xba\x04\x4c\x82\x89\x9d\xc1\xdf\x1c\xc1\x31\xb9\x18\x18\x88\x31\x5e\x73\x72\xa1\x42\x63\xbb\xfa\x8e\x7d\x33\x59\x6e\x25\x54\xa2\x0c\xf0\x5e\x8d\x44\xc7\xb9\xce\x5f\x33\x28\x17\x0e\xbc\x01\x2b\x80\x0c\x18\x24\xbb\x9a\x01\x15\xd2\x57\x39\x0b\x40\x1a\x48\xc6\xa8\x44\xcf\x26\xe4\x01\xf1\xf0\xde\xd8\xaf\x7b\x14\x32\xab\xd9\x3c\x20\x4d\x96\xa0\x35\x0b\x31\x68\xda\x39\x3b\xf2\x62\xd3\x5e\x15\x3a\xe3\x51\xb6\x6e\xc3\x99\xf2\xb9\xa4\xbf\xa6\x8b\x76\x86\x8d\x07\xb7\xb5\x34\x8c\x3e\x4a\x09\x97\x90\x53\x19\x83\xb5\xb8\x28\x88\x91\x70\x49\xc8\x64\x84\x24\x89\x81\x8f\x8c\x2e\x6a\xab\x53\x94\xe9\x0c\xcd\x60\xb3\xac\xab\xf1\xe1\x5f\x98\x50\x99\xce\x5d\x0e\x10\x86\xb8\xd8\xbb\x1b\x32\x29\xe3\x91\x78\x3c\xcf\xa5\x1c\xcf\x55\xa0\x2b\x6f\x3a\x4f\x7d\x38\xeb\x1e\x8d\x6a\x59\x32\xa4\x43\xef\x03\xe1\xd0\xd3\x6d\x3c\x3a\x09\xa0\x4c\xed\xe3\x8f\xc3\x6c\x5e\x0f\xa8\xc1\x70\x26\x66\xba\x5c\x0c\x7c\x23\xfb\xb0\xf1\x16\xb5\xc0\x14\xac\x20\x8c\x3c\xe8\xca\x7c\x88\xa7\x1a\x2e\x4d\x5f\xd2\xd5\x05\x04\xd0\xd1\xb0\xe9\xfb\xa1\xeb\x11\x11\xaa\x16\xef\x19\x7a\xaa\xcd\x02\xd3\xd8\x25\xd5\xff\x9e\x93\xea\xdb\x8c\x3b\x6f\x1f\x81\xdf\x88\x75\x9f\xcd\xe6\xd5\xe2\x54\x6e\x50\xce\x4f\x51\x80\x8c\xf7\xc0\x53\xe5\x1c\xf4\x15\x2d\x3d\x7a\xd2\xe3\x3d\x13\xb9\xac\x13\x59\x6c\xe0\x57\xac\xa8\xc0\x8f\xa9\x74\x69\x55\x06\x6c\xec\xa3\x9a\x78\x76\x83\x67\x2c\x0a\x24\xb8\x8a\x44\x35\x69\xd8\xf5\xde\xf5\x9e\x0b\x0e\x10\x5c\xf9\xdb\xe1\x82\xc3\xa2\x80\x02\xec\x3c\xba\x1b\x6e\x91\x28\xcb\x73\x9f\x1a\x1e\x58\x4e\xf0\x0e\x68\xdd\xc6\xda\x3e\x4d\xc4\x95\xa6\xfd\x02\x3e\x90\xcb\x0e\x83\xe1\x2f\xe2\xad\xa5\xbd\x09\x05\x11\x22\xd6\x38\x06\x93\xe8\x31\x2b\x74\x06\x31\x73\xb8\x4a\x3e\xbe\x1a\xcd\x37\xd2\x30\x77\x40\xbc\x4c\xec\x7d\xee\x40\xdc\xe1\x5c\x17\x46\xbb\x64\x76\xc8\x17\xd0\x25\x43\x82\xee\x17\xe6\x0a\x32\x83\xee\xe5\xac\x9e\xb1\xda\xc5\x7a\x35\xda\x84\x0f\xdd\xb9\xb8\x33\x48\x27\x92\x0a\x5e\x6a\xd2\x1a\xfb\xe4\xd2\xcd\x31\xca\x4d\x81\x14\x0a\x77\xad\x4d\x0d\x8c\x93\xbe\x42\xbc\x8a\x4a\x86\x44\x2a\xa6\x4f\xab\x5f\xde\x7f\x25\x8b\xe6\xf6\xbb\x14\x27\x3f\xf1\x5a\x51\xde\x5f\x6b\x33\xd3\x7b\x59\x1b\x51\x1e\x4e\x6a\x99\x27\x77\x71\x53\xfb\xe8\xd0\x31\xe2\xe1\x7f\xd6\x5c\x55\xb2\x5a\x74\x72\x39\xa7\x18\x1e\xa3\xcb\x3f\x95\x88\xdd\x68\x40\xbe\x90\x7a\x5e\x90\xfa\x93\x53\x58\x8a\x71\xda\x63\x14\x3f\xb0\x0e\xfe\x74\xde\x16\xbe\xa7\xda\x54\x5d\x96\x1b\x01\xde\xf4\x20\x66\x01\xf2\x38\xe9\xbd\x29\xfb\x56\xa2\x54\x82\xed\xe4\xfc\xa2\xf5\xfa\x90\xbd\x23\xb8\x8c\x91\x60\x85\xd6\x73\xa0\x02\xfb\xaf\xbe\xfc\x33\x26\xc6\x1c\xfd\xe5\xc0\xb2\x08\x75\x73\x88\x97\x62\xff\xd5\x37\x7f\x1d\x7e\xf9\xa7\xaf\xe1\xd9\xab\x6f\x0e\xc0\x9f\x1c\x3d\x87\x88\xe7\x0c\x7c\x5c\xfb\x5f\x7e\xf9\x35\x75\xf2\xe5\xd7\x07\x43\x76\x7e\x71\xfb\x4d\xb8\x1a\x10\x71\x6c\xf9\x5a\x8d\x02\xdb\xb8\x2e\x62\xe9\xc6\xde\x05\x7b\x28\xe7\x05\xaf\x2c\x57\x31\x43\x76\x5c\x18\x3d\x60\x99\x28\x41\x66\x0c\x47\x29\x14\xb5\x31\xc4\xcd\xec\xb3\xc3\x79\xa9\xef\x17\x03\xcf\x48\xe1\xeb\x60\x92\x4a\xa3\x02\xea\x5c\xbc\x4f\xae\x7e\x90\x09\xde\x5b\xfe\x67\xb7\xc9\xa3\xf2\x87\x55\x04\x6e\x4c\xdc\xd2\x55\x77\xcc\x05\x1a\xf7\xe2\x84\x14\x5c\x25\xd0\x93\x55\x57\xf1\x3a\x84\x49\xea\xd0\xc3\xa2\xfa\xe6\x04\x8a\x8a\xc9\xfc\x4e\x03\x8c\xcd\x09\x9b\x69\x54\x51\x15\xcb\x35\x57\x26\x6d\xe1\x88\x9f\xae\xb8\x2c\xde\xd8\x02\x01\x0a\xeb\xf4\xd4\xa4\x85\xa5\xfb\x9a\x34\xae\x08\x70\xd7\xfd\x25\x78\x4b\x2a\xd1\x08\xa1\x26\x76\xc3\x0f\x62\xe9\x2d\x32\x8a\xba\x6d\x47\xf9\x5e\x8e\x21\x92\x60\x4e\x53\x73\x24\xae\x2b\x31\x2f\x3d\xb8\x79\xdb\x04\xb4\x91\xf1\x67\x55\xe8\x07\x5d\xef\x79\x1c\x01\xe2\x17\xa1\x4f\x18\x88\x9d\xd6\xd5\xc9\x45\x7f\x77\x88\xdb\xee\xcb\x7a\x64\xc4\x8a\xe3\x80\xcf\xf1\x40\x00\xfc\x2b\xf0\x1b\xa4\x93\xae\xac\x03\xd4\x18\x9c\x41\x7d\xfe\x90\xbd\x88\xcc\xc7\x83\x4f\xd0\xa3\x28\xb7\x0b\xad\xb8\x27\xbc\xac\x84\x91\x1c\x2a\x2e\xe4\x75\x06\xad\x8e\x7d\xff\xf7\xec\x02\x3b\x6b\x14\x73\x04\xd3\xdb\xeb\x6b\xc5\xd8\xff\xb1\xff\xc3\xc2\x0b\xaf\xd9\x7f\xff\x9f\xeb\x3d\x39\xc7\xf2\x8a\xaf\x5e\x0e\xed\xff\x0d\x5f\x5d\xef\xfd\x3a\x60\xad\x07\x5f\x0e\xbf\xbc\xde\xfb\xf5\x7f\x06\xd8\x07\x7c\xe8\xb5\xfd\x17\xf4\x61\xcf\x22\x36\xe6\x18\x13\x68\x67\x65\x7f\xf8\xcb\x37\x7f\xfe\x13\xf6\x16\x9a\x8c\x9a\x4d\xbe\x7a\xf9\xd7\x5f\xff\xc7\xf6\xfa\x2b\x22\xa9\xa1\x38\x0e\x0e\xb9\xe5\x65\x20\xa2\x73\x2b\xc5\x1d\x64\xa2\xbe\xc6\xc1\xf0\xd7\xec\xbf\x99\x1f\xfe\x6b\xfb\xcd\x01\xf3\xa3\x86\xbf\x99\x1b\xf8\xa8\xd9\xf6\xab\x97\x7f\x8d\x9b\x7e\xf5\xf2\xaf\xec\x7f\xd6\x97\xcc\x71\x0b\x98\x10\xf6\x2f\xe2\xfd\x06\xe9\x41\x8f\xc7\x64\xf8\x07\xfd\x9d\xc2\xa8\xa2\x72\x2c\x04\xf8\xc4\x0d\xd1\x6c\x7b\x16\x4c\x4c\x48\x43\x28\x3e\x14\x15\xc9\x85\x95\xd0\x0c\x1f\xa3\xa8\x05\xe9\xef\x23\x5e\x70\x95\x81\xc9\x5c\xe5\x94\xcc\x82\x12\x6b\x25\x0b\xf9\xcb\x56\x02\xa2\x97\xa5\x08\x80\x7f\xd2\xd5\x07\x3b\xe8\xe3\xad\x2c\x89\x65\x90\x8e\x89\x05\x33\xc0\xd2\xfa\xb0\x91\xc8\x38\x09\xe2\x8b\xa6\x13\xc2\x45\x1f\x78\x1c\x88\x01\x3e\x2f\x45\x86\x5d\x8d\xb9\x2c\x6c\x57\x91\xab\x05\x0a\x9a\x02\x8d\xe8\x68\xea\x72\xc0\x5b\xa5\x4f\xb7\xba\x90\x1d\x39\xce\x91\x29\xdd\x30\x7e\xcb\x65\x01\x22\x36\x39\x68\xdc\xea\xc5\x4b\xbc\xcd\x01\x62\x26\xee\x3a\xaa\xb8\x42\x9e\x24\x49\x32\xf8\x6b\x9a\xf7\x19\xae\x80\xb4\x64\x6a\xe6\x8a\x59\xf0\xac\xaa\xad\x42\x82\xac\xcb\x57\x2c\x87\x9b\x6e\x79\x98\x25\x20\xb3\x85\xb9\xcd\xae\xf7\xe0\x46\x23\xc9\xb5\xa4\x0c\xef\x37\xd1\xb8\xed\x50\x39\x4f\xe7\xb6\x46\xe3\x18\xfb\x75\xb0\xc9\x40\xbf\x1a\x7e\xb5\xf1\x78\xfe\xfa\xd5\x9a\xd1\xfc\xf9\x9b\xc6\x60\x7a\x10\xbc\x5d\xad\x82\x47\xd5\x2a\xd8\xd5\x08\xd8\x95\x36\x8a\x4b\x1b\x0d\xf6\x0c\x92\xad\x8e\x94\x06\x51\x39\x43\x45\x4b\x04\xac\x95\xbb\x35\x45\xc1\xa8\x97\x61\x24\x03\x5a\xf6\x39\x2f\x78\xe6\xf2\x2a\xa9\x89\x55\x42\x35\xc5\xba\xe1\xcd\x39\xbf\x30\xc8\x41\xcd\x94\x97\x62\xc8\x02\x2c\x21\xd9\x00\x40\x5a\xf5\x59\xbd\xc0\x9f\x06\xcc\x68\x54\x3a\x90\x8f\xdb\x8f\x21\x4f\xb6\x17\xae\xfd\xcc\x9e\xa3\xfd\x06\xbb\xce\x6c\x1b\x0c\x00\x90\x63\xc4\x85\x8c\x8c\x31\x07\x2e\xbb\xd8\x25\x50\x03\x47\xa0\xf1\x20\xf4\x45\x2e\xcd\xbc\xe0\x0b\xcc\xce\x09\x7d\xb8\x69\xba\xb0\xa3\xf0\x84\xe4\xeb\xf7\x3a\x9a\x58\x51\x30\x3e\x9f\x0b\x0e\x01\x20\x90\x72\x18\x2d\xa0\xca\xd9\xfb\x65\xa9\xc6\x8d\xc5\x58\x9d\x0b\xbf\x65\x6f\x1c\x19\x94\x1a\xef\x46\xc2\x9d\x55\xd6\x4b\x69\xac\xb6\xe5\xf8\xd9\x16\x99\x33\x29\x23\xbf\x3e\xbc\x1e\x45\x60\xe0\x3d\x6b\x51\xf8\x17\xd2\xb5\x74\x1a\x8f\x9b\x16\x6f\x7f\x8e\x77\xd5\x72\x9e\x53\xb5\x9c\xb7\x2b\xb6\xe7\xd1\x07\x74\x57\x53\x77\x57\x53\x77\x5b\xa5\x73\x9a\x94\xa7\x37\xb9\x8a\x31\xf0\x12\xe4\x2a\x7a\x1c\x3b\x72\x81\xd2\x7b\x1f\x38\x77\xfc\x38\x54\x91\x5a\x2b\x30\x67\xae\x69\xd2\xb2\x79\xd5\x00\x1c\xf6\x45\xdd\xe0\xbc\x6e\x16\x3b\xb6\x5c\xb6\x10\xec\x66\x62\x2c\xef\x13\x54\x52\x05\x20\x3e\x8c\x62\x1a\x4b\x7b\x51\x34\x9b\x97\x62\x2e\x14\x98\x71\x1d\xe0\x77\x0b\xbf\x3a\xb6\x1c\x36\x60\x1b\x93\xee\x27\x91\x95\x1d\x46\x5d\x3b\xf5\x4b\x78\xfc\xf0\x79\xe3\xfb\xd1\xa4\x3b\xf5\x53\x40\xcf\x4c\xed\xfb\x8f\xbc\x6c\x78\xee\x55\x12\xde\x32\x46\xf3\xe6\x21\xaf\xea\x61\x00\xcc\xeb\xd1\xd6\x52\x43\xd8\x68\xdd\x81\x86\xb6\xbf\xf1\x40\xdc\x5b\x1f\xdd\xef\xc0\x2d\xfb\x21\x80\x22\xc8\x8a\x5a\x44\x08\x55\xa9\x5a\x94\x7f\x70\xf4\xdc\x66\x42\x62\x32\x1b\x91\xf6\x33\x8d\xd4\x7a\xd9\x2c\xc9\x95\x5a\xe3\x17\xc6\x01\xe5\x47\x5c\x8d\x00\x92\x91\xdb\x52\x86\x00\xf8\x20\x37\xf1\xa1\xe0\x05\xea\x75\xfb\x56\xd0\x5e\xff\xb4\x19\x43\xb3\x54\x6c\x0c\x47\x8a\x32\x1a\xbe\xb4\x3e\x30\x20\x8b\x8a\x77\xae\x09\x76\xa2\x82\x61\x4b\x55\x3b\x37\xa6\xc0\x71\x95\x50\xc8\x82\x5a\x1f\x66\xd5\x0e\x29\x24\x87\xa0\x69\x96\xe2\x1a\x24\x2a\x73\x45\xbf\xb9\xa8\x43\xff\x43\x23\x26\xd1\xcc\x45\x36\x74\xfe\x3e\xfa\x93\xee\xe5\x71\x96\xe9\x5a\x55\xf4\x00\x6b\x49\x61\xa6\xb6\xff\x73\xae\xf3\xf3\x8b\x2d\x84\x2b\x3e\x8f\xe8\x33\xfa\x53\xcc\xa7\x62\x26\x4a\x5e\x1c\x52\xd0\x43\x33\x2e\x6d\xb0\x1c\x94\xd6\x0c\x54\x6b\xbd\xfd\x94\x31\x6b\x8e\x93\x6e\x70\x8c\xf1\x05\x26\xe3\x5c\xff\xb8\x16\xdf\x66\x3c\xb6\x71\xac\xbb\xee\xb9\x95\x18\x13\x17\xfc\x96\x0a\x76\x70\xc2\x6f\xa6\x3b\x8c\xa8\x96\x46\xcf\xc4\x1d\x44\x6b\x38\xf6\x51\xd4\xa6\x5a\xcf\x5a\x23\x4b\x8c\x54\xb7\xc0\x27\xf0\xcc\x25\x34\xc6\x8e\xc0\x70\x88\x0e\xc2\x87\x90\xa4\x5a\xf1\x1b\xa1\x8e\xc8\xda\x1f\x65\x04\xa2\x76\xf7\xc1\xff\x40\x0a\x62\x8a\x4e\xef\x94\xd3\xc7\x29\xa7\xd9\x26\xb9\x2c\xd2\xd0\x19\x9a\x72\xc3\x74\x06\x37\x2f\xef\xe9\x53\x86\x17\x21\x9b\x30\x9d\xd9\x48\xa0\xe2\xd2\x30\x3c\xbe\x77\x50\x89\xa9\xb4\x3a\xf2\xc8\x92\xcd\x5e\xb7\x7a\x85\x22\xf4\x4e\x66\xa5\x76\xe9\xa9\xd0\xb1\xfd\xc3\x54\x7c\xd6\x11\xc5\x52\xb5\x52\x66\xc5\xd2\xc0\xec\xce\x95\x10\x33\xbc\x0f\x53\xd0\x63\x10\xbc\x1c\x38\xdc\xbc\x42\xb4\x34\x76\xb5\x98\x0b\xab\x83\x0d\x0f\xb6\x92\x5b\xbb\x74\xfb\x92\x83\x27\x45\x3d\xe4\x4f\x08\x4f\x13\x46\xba\x7e\x5c\xd4\xc6\xce\xae\xf0\x08\xbb\x42\xc1\x1f\x70\xf0\x66\x1a\x4f\x1b\x40\x92\xe3\xb5\x53\x59\x14\xa3\xe5\xcf\xa5\x3f\x91\x4f\x9b\xc4\x7d\xcc\xa6\xf5\x8c\xab\xc3\x52\xf0\x1c\x24\xec\xe8\xb1\x13\x1e\x96\x92\x4e\x2d\x7b\xe0\x2e\x43\xeb\x8f\xe2\x69\xe8\xca\x1d\x86\x28\xae\x10\x59\xc0\xed\xbf\xcb\x6a\xc0\xa8\x63\x08\x6e\x2c\x0d\xcc\x1c\x41\x4c\x4a\xbc\x3b\xbc\x8a\x70\xb3\x5d\x7a\x3b\x09\xeb\x55\xc9\x95\x81\xa1\x06\x9c\x32\xbf\x66\xcd\x4c\xe0\x8e\x34\xca\x22\x0d\xda\xe0\x23\x94\x8c\xc8\xb4\xdd\x8b\x85\xbb\xae\x10\x6c\x6a\xf7\x20\xd3\xb3\x79\x21\xee\x89\xb5\x9b\x47\x52\x17\x94\x59\xa4\x9a\x9c\xb8\x80\xbb\xd5\xba\x7b\x28\x3f\x80\x4b\x24\x66\xb2\xaa\x08\xc4\x07\x99\xc9\x00\x01\xb5\xfe\xd9\x8c\x0b\xa5\x92\xc7\xff\xec\x58\x0e\x1a\xc4\xb9\xb2\x1b\x91\xd2\xa3\x9a\x09\xbc\x34\x02\x49\xcd\xe3\x4f\x16\xa2\x3a\xbc\x5f\xfc\x32\x4e\x7f\xc9\x88\x52\xa6\x62\x37\xa0\xca\x5b\x48\x7b\x44\xae\x88\x8d\xe3\x6b\x1f\x29\x70\x56\xc1\x95\x85\xd5\x31\xa1\x8a\x96\x8b\x80\xab\xb4\xc2\xb7\x37\xd2\x33\xed\x0b\x97\x38\x34\x3b\xc8\x0e\x5d\x12\xcb\x2f\xd2\x36\x31\xbf\x68\xd1\x00\x87\xec\x72\xf9\xa0\xaf\x3e\xe7\x9b\x8f\xd2\xdb\xdf\x70\x6d\x5b\x63\xa4\x70\xf4\x68\xd1\xf6\xdf\x5b\xf9\xa4\x18\xb0\x9f\x78\xa9\xa4\x9a\x1c\x0c\x98\x12\x77\x10\xb8\x6e\x58\xe6\x87\x9b\xe7\x01\x89\x6e\x5c\x57\x75\x29\x12\x61\x6b\x0f\x36\xab\x82\xf0\xde\xd7\x9c\x6a\x1b\x77\x78\x7e\xdc\xa3\x25\xaf\x0f\xd6\x72\xd8\xb9\x7c\x9e\xa3\xcb\x07\xf6\x66\x1b\xee\x1e\x38\x43\x3b\x57\xcf\xce\xd5\xb3\x25\x57\x8f\x27\x33\x9b\xd0\xa5\xcb\x0e\x0e\x16\x3d\xf4\x39\x98\x71\x9e\x31\x04\xe2\xc2\x53\x7f\x27\x06\x4c\x0e\xc5\xd0\x9e\x2b\x27\xf0\xdc\x71\x73\x24\x0d\x9b\xf2\xf9\x5c\x78\xec\x33\xa9\x6a\x5d\x9b\x02\xf3\x9f\x20\xf6\x01\x00\xe4\x7b\x58\x27\x93\xda\x6e\x40\x2d\x0c\xd2\x35\x59\xd7\x21\x15\x0e\xc6\x58\xcf\x03\x0d\x32\x15\x9b\x0a\x5e\x56\x23\x61\xf5\x2b\x39\x13\xfd\x74\x60\xfb\xe2\x0f\xa4\xcd\xae\x50\x85\x49\xaa\x80\xcf\xc4\xe2\x3e\xbd\xb9\x3d\x35\xb8\x03\x73\xe1\xd2\x81\xf1\xc0\xf4\x71\x03\x5f\xb3\x1f\xd4\x44\x83\x31\xa6\x64\x6f\x28\xd6\xb3\x7f\x10\x77\xc4\xa7\x3b\x8e\x09\x92\x9e\x24\x7a\x02\x24\xb9\x91\xf9\xaa\xcf\x1e\x77\x4a\x8d\x5e\xa0\x44\x9a\xb5\xac\xd9\x4b\xc3\x26\x42\x59\x3d\xa5\x23\xe6\x7e\xaa\x53\x0c\x18\xf2\x35\x30\x23\x40\x6d\xda\x67\xd7\x7a\xdd\x8b\xec\xb8\xc3\x88\x16\x9e\x35\xb2\x1d\xae\xf7\xca\x5a\x51\x7e\x26\x5a\x6d\xaf\xf7\x48\x20\xef\xb5\x66\xe9\x2a\x91\x27\xf8\xc0\x45\x40\x51\x3b\xc0\xd2\x46\x70\x4f\x28\x17\xe9\x8a\xd9\x34\x8c\xc6\xe8\x44\x6a\x81\x06\x07\x74\x22\xea\x0b\x60\x78\xb4\xae\xd8\xfe\x8b\xa3\x17\x07\x2d\x9f\xd6\x12\xc4\xf2\x55\xf4\xa6\xbd\x9b\x72\x36\x2f\x16\x30\x8e\x17\xf9\x80\xaa\xf8\x5a\xde\x82\x8b\x41\x25\x76\xa0\x3c\xe1\x80\x19\x6d\xb5\x24\x5f\x66\x08\x7e\x05\x81\xbd\xac\xa9\x9e\xd0\xfe\x8b\xff\xeb\xc5\x80\x89\x2a\x3b\x60\x77\x5a\xbd\xa8\x18\xd6\xdc\xb9\xc2\xec\x43\xdf\xd1\x42\xd7\x84\x13\x0a\xf8\xa6\x85\xcc\x64\x55\x2c\x58\xc6\x8b\x82\x81\xbc\xae\x91\x76\x51\xed\xcc\x18\xf4\x4d\x8f\xd9\x4b\x2c\xf0\x80\x49\xbe\xdc\x40\x90\xf3\xd1\x54\xf0\xa2\x9a\xa2\xc5\x5b\x69\x75\xf8\x8b\x28\x35\xe6\xb9\xd1\x93\x55\xd1\x21\xad\x43\x95\x3e\x55\x6f\x4e\xfa\xa7\x9a\xb2\x37\x72\x54\x0a\x76\x42\xa5\x2c\x5c\x06\x62\xea\x57\xcc\x0d\x00\x0f\xc1\x48\xf8\xca\x02\x14\x32\x7e\x74\x57\x4a\x4b\x4c\xa0\xda\x5e\xfa\xed\x27\x49\x50\x1d\x9b\xab\xa4\x32\xf0\xc6\x9f\x25\x4c\x53\x75\xe0\xde\xb1\xb3\x77\xbc\xd4\x26\x64\x8b\x11\x06\x3a\x00\xe7\x92\x45\x43\x4d\x98\x3b\x9b\x67\xf7\x43\x76\xbd\x27\xee\xab\xaf\x31\xe6\xf7\x7e\x6c\xf0\x1f\xaa\xb2\xff\x1a\xb2\xf3\x99\x3f\x2b\x20\x3f\x95\xbe\x88\x82\x7b\xcd\x2a\x6f\x51\x19\xf0\x34\x10\x54\x9d\xa0\x0a\x21\x7d\xec\xcd\x89\x2b\x80\x5f\xd4\x8a\x8c\xb8\xfd\xd8\x93\xdd\xaf\x1f\x54\x91\x00\x53\x0a\xbd\xc7\xce\x53\x40\xa0\x67\xfb\x61\x9b\x0f\x86\xec\x03\xf5\x81\xf9\xa0\xe0\xb4\x1d\x6b\x14\x2a\x45\x78\x48\xd9\xe5\xf6\xb2\x47\xf0\xe6\x26\x8d\xba\x84\xb3\xf9\xe9\xa7\xf7\x09\x11\x23\x35\xed\x3b\x5d\x16\xf9\x9d\x24\xa2\x6c\xd8\xbe\x7d\xf5\x60\x23\xdc\xeb\xbb\x3b\x99\xaf\xfb\x1a\xe5\x8e\xc3\xd7\x18\x7c\x2e\x84\x76\x18\xb6\x0f\x5d\x1c\xb0\x33\x09\xfe\x68\xf8\x0b\xb1\x28\x66\xa3\x18\x22\xd0\xcf\x0d\x4e\xba\xdd\x31\x87\x10\x02\xd5\x6f\x5c\xda\x22\xd6\x66\x90\xb3\xba\xa8\xb8\x12\x20\xfb\x6c\x83\x20\x14\xe2\xfe\xc2\x8a\x79\xa6\x12\xaa\x5a\x4d\x1c\xba\xdb\x36\x7d\xc8\xc0\xed\x64\xc6\xe6\xbe\xad\x5b\xa9\x48\xbf\xe0\x54\xa4\x4d\xdf\x4a\x54\x1a\x8f\xa8\x8e\x8c\x0b\x82\xb0\xec\xfe\x5e\x64\x84\x89\x35\x2f\xea\x89\x4c\xb2\xb1\x58\x97\xcd\x4b\x79\x2b\xca\xb6\x32\x4b\xbf\xb7\x0d\x2c\xf0\xbb\x63\x6d\x31\xb8\x08\xbe\xe1\x92\xce\x7d\x8e\x1b\x11\xc1\xd4\x9d\x7c\x96\xe4\x26\x4e\xaa\x8e\x3e\x92\x43\xc8\x91\xb1\xd2\x8a\xdd\x54\x82\x2f\xc2\x51\x27\x27\x47\xe8\x0e\xab\xee\xc3\xd9\x7d\x55\x72\xcf\x98\x1d\x1c\x84\xb4\xba\xfe\x22\xb5\x6f\xa1\xda\xdf\x45\x63\xaf\xda\x57\xf1\x99\x12\xa5\x15\x71\x56\x61\x5c\x97\xae\x11\x56\x22\x8a\x72\x6a\xc1\x42\x8e\xfe\x62\x52\xb4\x23\xe0\x12\x23\xc0\x92\x7b\x2b\x96\x51\x99\xe6\xdc\x78\x43\x08\xde\x09\xda\x36\x8f\x24\x8f\x10\xd6\x08\x80\x20\xc7\x4c\xe9\xa5\xaf\xc4\x08\xd6\x54\x11\xa9\x63\x20\x06\x4d\xbb\x50\x7a\x47\x2b\xd7\x68\x80\xb1\xef\xf0\x6f\x0a\x78\x47\x0c\xbd\xf4\xa8\x36\xf6\x7a\xaf\x4f\x0e\x0e\x47\x76\x15\xa5\xfa\xd1\x91\x9c\x04\x65\xda\x91\xa3\x1d\x39\xda\x91\xa3\x1d\x39\x5a\x5d\xc5\x58\x67\xbc\xe8\x0b\x58\xf0\xa6\x00\xbc\xda\x4d\xb4\x2b\x7c\xc3\xd1\x22\xa7\x34\xd1\x0d\x73\x4f\xf9\x04\x1c\x28\x3f\x28\x44\x56\xd1\x51\xe1\x82\x9c\x57\xdc\x08\x08\x21\x83\x67\xf4\xf7\xc7\x8f\xe7\xa7\x91\x67\x11\x72\x65\x9a\xdf\xf2\x85\x2e\x56\xaa\x5d\xba\x7c\x18\xea\x55\x18\xd5\x6a\x9f\x1d\x35\x04\xf0\x1b\x54\x16\x9d\x75\x95\x1d\x22\xc2\xaf\xb7\xa8\xc4\xcd\x2d\xed\x73\xd3\x49\x66\x66\x73\x63\xe9\x49\x29\x32\x42\x32\x6f\x11\x8f\x68\x9d\xda\x23\x84\xd5\x6b\x8e\x30\x54\xb9\x22\x68\xda\x28\x7e\x1b\xa2\xbe\xdc\x70\xa8\x7d\x6f\x13\xcf\x77\x27\x67\x41\x9c\x3e\x95\xe6\x66\x83\xd3\x13\x5e\x64\xf6\xcd\xc0\xca\xa4\x62\xdf\x41\x11\x20\xe6\xea\xb7\x9e\xa9\x89\x54\x62\x78\xad\xae\xd5\x31\xfb\xee\xe4\x8c\x5d\x9c\xa2\x86\x01\x41\xb1\x6c\x24\xc6\xf6\x5a\xc1\xf9\xa3\xd0\x2b\xde\x2c\xf1\x25\x58\x6e\x3f\x01\xef\x00\xa4\xca\x48\x34\x32\xb2\x6c\x9f\x84\xde\x09\x07\xf1\x17\x7b\x40\x39\x32\x31\x72\x7e\x0e\x99\xff\x74\x3f\x4b\x81\x3d\x7e\xf6\xa7\x43\x68\x3a\xe3\x6a\x81\x21\x48\x43\xea\x66\x6b\x36\x83\x06\x06\x48\xfe\x3e\x19\x3c\xde\x97\x97\xd2\xb9\xa1\x1b\x0d\x42\xc5\x42\xd7\xec\x8e\x63\x55\x7d\xe2\xb3\x57\x72\xfe\x9a\x9d\x29\x53\x97\x22\xa0\x1a\x2d\xb3\x5c\x69\x36\xe0\xba\x90\xa3\x6d\x5e\x6f\xdb\xf2\xf0\x58\x8c\xac\x49\x26\x82\x0a\x68\x8f\x50\x12\xc4\x84\x97\x95\x4c\x9b\x39\x01\xc9\xc4\x3d\x76\x27\x6e\xcd\xe2\x9e\x8f\x99\x46\xe7\x7f\xb3\x3a\x8b\x8c\x8a\xb8\x8d\x1c\x32\x1a\x81\x4c\x87\x05\x7c\xa3\x3d\x3d\x86\x5a\x90\x26\xe7\xaf\xd0\xd6\x47\x05\xc3\x09\x36\xcf\x8d\x89\x1b\x76\xbd\xf7\xca\xae\xee\xa5\x9c\xc9\x82\x97\xc5\xa2\x81\xd4\x19\x5a\x5a\xb2\xe5\xba\x44\x78\xb3\x97\xd7\x7b\x6c\x5f\x97\xd0\xbb\xbd\x13\x85\xe0\xb7\x82\x42\xff\xe1\xf0\x2d\x90\x6b\x1e\x3c\xe5\x3e\xac\x84\x80\xc9\xd3\x44\xfc\x63\x54\x4e\x9e\x4e\xfc\xc5\x69\x93\x00\x9d\x9c\x0d\xd9\x47\x62\xc2\x44\x2d\x17\x94\x18\x6a\x6e\x7c\x8b\x4f\x71\xbc\xba\x85\xb5\xc7\x89\x60\x6d\x09\xef\x29\xe7\xe3\xc5\xbc\x2e\x4e\x22\xab\x0f\x62\xae\x37\xe0\x1f\xf1\x35\x02\xec\x1e\x2a\x32\x8a\xb9\x19\xd5\x52\x69\x51\xce\x26\x12\x63\x3b\x8c\x44\xb4\xbe\xef\xe8\xef\x4d\x44\x8a\xc4\x5b\xae\x79\x82\x56\x5b\x7e\x75\x7a\x76\xf1\xe1\xec\xe4\xf8\xea\xec\xf4\x35\xa3\x39\x22\x28\x92\xe3\xef\x60\x98\xf7\x5a\xdb\x52\x29\x7d\x48\x32\x71\x03\x1f\xd0\xe5\xe7\x2a\x60\xdd\x21\xf2\xb4\x62\xe7\x4a\x56\xa1\xe0\x3b\x26\x0f\x17\x5a\xf9\x28\xab\xb9\x26\x25\x70\x22\x2b\xb8\xdf\x8a\x3a\x83\xa8\x9c\x46\x6f\x70\x1b\x20\xee\xbb\x77\x8d\x85\xb0\xac\x09\x4d\xd1\xf9\x4c\x12\xd4\x11\x4d\x9d\xc1\xab\x82\xc4\xcc\x23\xe0\x3a\x77\xab\x2e\x97\x21\x6a\x87\xcc\x92\xc9\x17\xc3\x17\x8e\xcb\x14\x2d\x84\x61\xdf\xa9\xcb\xf1\x41\x14\xf1\xe6\x19\x60\x3f\x54\x53\x51\xde\x49\x23\x06\x96\x75\xa4\xc1\x8a\xa1\x83\x18\x7e\xb7\xd9\x8b\x17\x24\xea\x51\xfc\x51\x3a\x83\x88\x5b\x0e\x13\xeb\x8a\xd0\xa2\x95\x4b\x9d\x76\xf7\x89\x8f\x1f\xde\xa6\xdf\xc6\x53\x93\x76\x79\x61\xcd\xee\xa9\xf7\x55\x05\x98\x43\xf7\x5e\x7f\x5f\xde\x77\x18\x5e\x3f\x36\x7d\x2d\xad\x8d\xab\xea\xdf\xf6\x87\x8e\x57\xe0\x19\x76\x55\x5b\xc7\xa2\x22\x9f\x31\x41\x29\x86\x37\x9e\x44\xe0\x6f\x94\x5c\x8a\x92\xd8\xd3\x50\xdf\xa2\x07\x4e\x0d\xe8\x05\x64\xf6\xf0\x21\x24\xc0\x60\x08\xd2\x0d\x2b\x00\x84\x79\x55\x7a\xae\x0b\x3d\x49\xe3\x78\x96\xa2\x10\xdc\x08\xe3\xa2\x31\xbe\x3f\x3b\x3e\x3d\x22\x40\x2e\xe3\xc8\xed\xd1\xc4\x75\x76\xf4\xe1\xec\xf8\xf4\xdd\xd9\x70\x96\x7f\x81\xb8\xbb\x87\xfc\x70\xae\x93\xaa\x83\x88\x07\x8c\x49\x1d\xab\x27\x85\x00\xe4\x91\x41\x07\x7f\x20\x7c\x02\x52\x6b\xc3\xb4\x02\xca\x9f\xaf\x54\x0e\x79\x4a\xae\x2e\x32\xde\x2c\xf7\x85\xf0\x81\x3c\x62\x46\x5e\x2c\x8f\x00\xd0\xf1\xfb\x23\x5d\xab\x9c\x5d\xfc\x78\xf2\x89\x57\x2d\x8d\xf7\xed\x50\xbe\xed\xc8\x96\x0f\xac\x83\xe7\xfe\x94\xa3\x7c\xa0\xa4\xd0\x1a\x3a\xca\xd4\x4e\xb3\x01\x52\x16\x14\x99\xb9\x28\x67\xd2\x55\xe6\xef\x27\x42\x6c\x7b\xc6\x6b\x65\x09\xd7\xd3\x8e\x44\x7d\x8e\x24\x6a\x77\xd9\x3e\xa7\xcb\xf6\xfd\xd5\xd5\xc5\x77\xa2\xea\x0a\xf4\x69\x3c\x8e\x63\x7d\x94\xcb\xa1\xf3\x15\x83\x6c\x53\xf6\x9d\xa8\x42\xb2\xe4\x83\x00\x4f\xd3\xf1\x4d\xdf\x6b\xe3\x0e\xbb\xb6\x7c\x4b\x61\x45\xa0\x41\x8b\xf1\xcc\x75\xce\xce\x2f\x86\xec\xbf\x74\x0d\x55\x94\xf8\xa8\x58\x78\x15\xdd\x88\x8a\x5d\x43\x5f\xd7\x7b\x56\xee\xb3\x8b\xfe\xbd\xe0\x39\xe2\x40\x9b\x4a\xf0\x8e\x98\xab\xd0\x2e\x21\xab\xd5\xa6\xd2\x33\x36\xa5\x7e\xe8\x33\xd2\x21\xf4\xc1\x5a\x0c\x71\x75\x78\x51\xe8\x3b\x88\x46\xc6\xc0\x1b\x7a\x67\x1b\xa0\x2b\xb6\x7f\x1c\x22\xc2\x09\x76\x5f\xc2\x0a\x11\x89\x8d\x71\x86\x4d\x18\x1a\x26\x8d\x6d\x80\xf2\x8a\x96\xd4\x72\x09\xe4\xd5\x55\x5c\x6e\x7e\x21\x32\xe6\x51\x98\xa3\x0b\x30\x70\xcb\xc4\xd5\x44\xb0\x57\xf6\xcd\x6f\xfe\xf4\xa7\xaf\xfe\x44\x35\x84\xbb\xca\x15\x6f\x9c\x5a\x54\x57\xb2\x18\x5a\x22\x5a\x95\xc3\x73\x55\xfd\x50\x5e\x86\xd4\x87\x6c\x2a\x52\x46\x86\x4b\xf8\x3d\x76\x78\xd1\xb1\x8b\xb2\x43\xb1\x92\x74\x7c\xb1\xed\x5a\xf6\x17\xcb\xa3\x4d\x4b\xde\x3c\x7c\xd6\x08\xb1\xcb\xe2\xd3\x46\xd4\x07\xb3\xfa\xe9\x06\x42\xe9\xb0\x14\x42\x49\xa2\xaa\x1e\x02\x46\x6c\x80\x39\x4c\x9f\x45\x99\x90\x3a\xe9\x0b\x43\xd1\x7a\x1f\xdb\xf5\x5e\x2b\xae\xf2\x22\xb9\x50\xf8\xc0\x27\x02\x70\xa7\x29\x65\x8e\x44\x51\x1c\x9c\xc7\x95\xe7\x37\x42\xad\x75\x23\x88\x7b\x91\x25\x1c\x59\x09\x37\x08\x58\x4f\xb5\xbd\xda\x60\x14\x0d\x8e\x8f\x60\xc7\x3c\xbb\x17\x99\xff\x1b\x99\xa0\x1b\x9b\x86\xf1\x6c\x94\x70\x12\x02\x33\x89\x36\x7d\x97\x02\x25\x26\xd2\xbd\xf4\x59\xdb\xdc\x51\x25\xf0\x9f\x89\x72\xac\xcb\xd9\x26\xdf\x6f\xb2\x8c\x5f\x07\x7b\x55\x36\xbf\xd4\xd9\x4d\x6a\x10\x57\x27\x17\xf8\x28\x1a\x46\xe0\x1d\x98\x45\x0a\xce\x6d\x76\x75\x72\x41\x00\xce\xf6\x5f\x53\xad\x6f\x42\xfd\x4a\x6f\x88\xde\x60\x94\xfe\xcb\x6e\x9c\x5d\xe7\x4a\x9b\xea\xb8\x90\x3c\x41\xd9\xfd\x23\xaa\xe9\x0d\x69\x90\x7c\x3e\xb7\x03\x76\xa5\x08\xce\x2f\xe0\x3c\x38\x44\x7b\x42\x7e\x73\x46\x0b\xa9\xa8\xa2\x18\x27\x90\x99\x2a\x18\x1c\x30\x39\xdf\xbe\x88\xd1\xa5\xeb\x3d\x5b\xfe\x23\xe9\xa1\xe2\xf7\x9d\xb9\x80\x8f\xf4\x6d\x07\x4e\x7f\x8f\xe0\xb3\x14\xac\x7e\xe8\xcb\x9d\x7a\xf0\x07\x40\x7d\x15\x98\xd9\x06\x84\x4f\x9b\xca\x32\xa3\x0d\x24\x7c\xf8\x16\x16\x3e\xc2\xea\x7e\xae\x6a\x9b\x15\xe6\xbf\xf7\x0f\x9f\x5c\x98\x4f\x0b\xf0\x2b\xf8\xad\xf3\xe5\x79\xe3\x12\x31\x45\x64\x1e\xe4\x6f\x9e\x93\x78\xcc\x99\x59\xcc\x0a\xa9\x6e\x20\x8e\x98\x84\x4f\x4b\x5a\x48\x8d\x51\x37\x8e\xf7\x94\x82\x17\xdd\x82\xf3\x26\x66\x5f\x3b\x10\x18\x7f\x0a\x9f\xbf\x3b\x9b\xcd\x1e\x34\xb7\x8f\x64\x9a\x6e\xc1\xda\x3c\xdd\xd0\x3a\x0e\xd6\xf9\xe5\xc9\xe5\x79\x5f\x23\xd7\x8a\xc6\x4b\xe8\x50\xd0\x12\x7c\x07\x43\xfa\xf7\xa6\x61\xc7\xcd\xb7\x9e\xc0\x75\x88\x51\x9c\x17\xba\xac\x78\x61\xef\xf6\xcf\x96\xc5\x15\xb5\x4a\xd4\xc4\x9d\xf2\xf9\x71\x5d\x4d\x4f\xa5\xc9\xf4\xad\x48\xd9\x2e\x1d\x84\x91\x1b\xa7\x84\xd1\xfb\x17\xd8\xc9\xf7\xc7\x17\x8c\xd7\xd5\x14\xab\x21\xc2\x5b\xa9\x90\x10\xf7\xa9\x4b\x61\xd2\x86\xce\xf4\x87\xa8\x79\xef\xcf\xec\xdc\xa3\x0f\xba\x5d\xd2\x64\x46\x26\x53\x07\x2d\x5f\xe5\x95\x2e\xd3\xfe\x37\xd2\x78\x70\xaf\xce\x5d\x5b\x10\xd9\x81\xa0\x35\x5e\x6f\xc4\xd7\xa0\x82\x0c\xdf\x3d\x57\x56\x81\xe5\x99\x58\x0a\x29\xc6\x2c\x58\xec\x5b\xfa\x36\x58\x83\x99\x82\xab\xe7\x70\xc8\x31\x44\xe3\x35\x3e\x89\xdc\xa9\x14\xba\xe1\x58\xb0\xaf\x64\xe6\x53\x3e\x50\x8a\xef\x40\x01\xb0\xf7\xa6\xcb\xd3\x81\x83\xfa\xcf\x9a\x17\x38\x99\xf7\x5d\x6e\x81\xe6\x04\xdb\xfd\xb9\x95\x73\xb3\x7b\xef\xad\x38\x35\xc2\xc8\xd2\xa7\x20\x9f\x1e\x85\xa2\x98\xb2\xbe\x20\xa5\xf7\x05\xdb\xaf\xb2\xf9\x41\xff\x00\x7d\xec\x95\x66\xf3\xd6\x47\xe6\xf7\xad\xc8\x01\xcb\x9e\x10\x3e\x1a\xdd\x22\x05\x62\x6f\xa5\xa9\x30\x74\x83\x7e\x90\x86\x09\x8c\x43\xe7\x20\x35\xe9\x92\xc9\xf9\x3f\xac\x40\xf1\x1a\x6f\x7e\xa4\x40\x4a\x43\x65\xd8\x20\xd4\xca\x79\xd0\xf7\xab\xc5\x5c\x66\xbc\x28\x16\x5e\x58\x34\xec\x2f\xdf\x60\xe1\xb9\xaf\xbe\xfc\xe6\xe5\xc1\x66\x32\xce\x27\xf4\xcc\x6e\x1a\x2f\x07\x84\x8f\x70\x12\xed\xc1\xa5\xe3\x80\x2b\x0c\x69\x47\xfe\xd6\xb5\xc8\xe3\x83\x83\x5d\x07\x4d\x1e\xd2\x67\x9b\x7f\xcb\x1d\xee\x23\x09\x6c\x52\xd6\x6e\xc7\xe3\x77\x3c\x7e\xc7\xe3\x77\x3c\x7e\xc7\xe3\x37\xe7\xf1\xf3\x1d\x8f\x7f\x96\x3c\x3e\x1d\x41\xfe\xfb\x62\xf4\x7f\x17\x8b\x2b\x7d\x91\xb4\xbf\xbc\xe3\xf3\x08\x77\xe4\x46\x2c\x30\xb6\x18\x8c\x2d\x54\x85\x98\xb7\x53\x58\x92\xac\xf7\x46\x2c\x3a\xbd\xb7\xf6\x59\xd2\xdc\x4d\x5f\xa4\xd0\xe4\x34\xea\xd8\xae\x94\xfb\x13\x94\x72\xbf\x6a\x55\x4b\x5f\x2a\xd9\x3e\xe3\x73\x8c\x0e\x87\x1d\x6a\x54\x06\xe5\x2a\x14\x6e\x27\xfb\x1a\x3d\x8c\x83\xc8\xa0\x53\x41\x85\xab\x30\xa6\xcd\x35\x8b\x82\xdd\x10\x84\x0e\x4e\x1f\xb4\xe9\x7d\xa8\xdf\xca\xb1\xc8\x16\x59\x91\x38\x1b\xfe\x51\xec\x17\xca\xa2\x6d\x40\x33\xb5\x17\x35\x49\xa2\x21\xbf\x44\xc5\x6f\x60\x33\xb1\x4e\xa4\x71\xfe\x54\x8a\x3c\x2c\x7c\xdf\x04\xdd\x04\x01\xc9\x18\x52\x68\xaa\x4b\x98\x98\xdd\xc1\x8b\x52\x5c\x56\x7a\x1e\xb5\x9f\xa2\x17\xc6\x0c\x1a\x06\xd6\x25\x0c\x5f\x36\x2a\x74\x76\x63\x58\xad\x2a\x59\xc4\x5e\x10\x69\x08\xbf\xad\x12\x03\x56\x2b\x40\xd2\x6e\xbe\x39\x2f\x35\x78\x14\xc7\x5c\x16\x66\x60\x67\x80\x28\x17\x19\xa7\x92\xcc\x34\x00\x82\x97\x2c\x9b\x50\x17\x1d\x06\xf5\xb9\x9b\x54\xc2\x74\xeb\xe7\x0b\xc5\x4e\x8b\x42\xe4\x4c\xce\x66\x22\x97\xbc\x12\xc5\x82\xf1\x71\x65\xe9\x5f\x34\x42\xdb\x0e\xe5\x10\x6f\xd5\x75\x63\xa2\x41\x37\x67\x24\x0d\xc3\x9a\xa9\x88\xc1\x00\x28\xc3\x70\x74\xec\x5f\x71\xb5\x1e\x84\x2e\xc2\x53\x35\xd7\x85\xcc\x16\x43\x0c\x7c\xdc\x6c\xa9\xa7\x5a\xdf\xf8\x55\x4e\x43\x51\xad\x12\x2c\x43\x95\x9e\xf0\xcf\x43\xbf\xff\x87\xe0\xb0\x39\xfa\x22\x3c\x82\x1f\x36\xf1\x2a\x91\x7f\x0f\x4b\x18\xd8\xd3\x95\xd8\x14\x3a\x76\xe9\x2d\xa1\x3c\x12\xde\xb9\xc6\x79\x0d\xc7\x9d\x2b\xa8\xbb\xee\x9c\x60\xba\xb1\x8e\x84\x4f\x5c\x67\x53\x07\x8b\x01\xb5\xff\xc0\xab\x0a\xfb\x58\x97\x62\xc0\xe6\xa5\x10\x33\x18\xd5\x20\xc4\x9d\x53\xbc\x32\xfc\x28\xaa\x0c\x59\x66\x74\x2c\x81\x84\xd0\xb0\x97\x77\x2b\x2b\xb9\x99\x0a\xc8\xce\x17\xf7\xd2\x15\x04\x8d\xe1\x15\x69\x1a\x74\x5b\x9a\x29\x66\xf4\x11\xc7\xa4\xf3\x17\xa6\xd1\x7e\x52\x5a\x01\x74\x2e\x4a\xa9\x73\x06\xf0\x43\xb9\xbe\xb3\x74\x77\x22\x95\x71\xcb\x06\x97\x9c\xd6\xd7\xee\x9d\xc0\xa0\x3f\x04\x57\xc9\x87\x84\x84\x5c\x44\xde\x1f\x5d\x57\x99\x0e\x21\xf8\x34\x88\xe5\x63\x0e\x4c\x05\x56\xb5\x06\x7e\xef\xf7\xc3\x71\xe0\x6a\xed\x98\xb7\x70\xdc\xed\xc2\x86\x67\x9d\x8b\x03\x39\x89\x90\x74\xfb\x7c\xef\x47\x27\xc7\x98\xc9\xea\x03\x57\x29\xac\xd4\xf0\x8c\x41\x95\x2c\x7f\x64\xb1\x16\x3b\x21\xa9\xdb\x63\x86\x05\x40\xa4\x02\x64\xfa\x38\xa3\x82\x33\x1f\xec\xb9\x9e\xae\xee\xa0\xfb\x76\xf5\x02\x9f\x2f\x90\xde\xe7\x88\xe2\x6b\x85\xf7\xc4\x94\xe6\x22\x6b\xdc\x22\xba\xc9\x42\x81\x2a\x9b\x26\x62\x8f\x98\x98\x1d\xc5\x21\x57\xf9\x21\x02\x49\x6d\xa2\x88\x7a\x0a\x64\xc7\xfc\x08\x74\xc0\x88\xcc\xf5\x84\x07\x0c\x6f\x9c\x57\x22\x51\x4a\xa5\xf9\x3c\x0a\x23\x9a\x49\x75\x34\xe3\xf7\x31\x91\x24\x18\xb8\xc5\x12\x70\xc3\x8c\x57\x19\x70\x6f\x05\xb4\xb3\x47\x8e\x32\x6a\x5d\x09\x00\x06\x52\x90\x7d\xff\xa4\x83\x02\xd3\xc3\x21\x90\xa2\x17\x8d\x01\xe2\x22\x65\x44\xaf\xb1\xa1\xbd\xf7\x98\x89\xb8\x09\xdc\xc0\xa6\x27\x76\xe8\xbe\x3a\xfc\xcf\x9a\xab\x4a\x56\x0b\xd8\x5d\x9a\xe1\x07\xa4\x14\x9d\x13\xa5\xe7\x2e\x32\x38\x5f\x35\x7d\x27\xb0\xf5\x58\x80\x32\x74\xfb\xdb\x2d\xc1\x8c\x27\xca\x70\xbd\xf3\x07\x2a\xd3\xca\x54\x25\x87\xe2\x9e\x4e\xa9\x07\xce\xbb\x3c\xb3\xdf\x66\xe8\x78\x2d\x70\x1d\x3f\x58\xde\x9b\x9c\x4b\xab\x55\x22\x0f\xcb\xce\x21\x0f\x53\x02\x93\x05\xd4\xda\xe6\x7e\x9f\x10\xcf\xcf\x1e\x5a\x5f\x15\x1d\xd0\xa6\x3c\x0a\x1d\x16\x0b\xc1\x26\xb9\xbc\x95\xb9\xa0\x75\xf2\xfb\x4c\x3a\x23\x87\x7c\x33\xf1\x73\xcd\x0b\xc7\xf3\x85\xaa\x67\x08\x7e\x88\x47\xe7\x6f\x4b\x82\x85\x0b\xec\xba\x67\xa3\xba\x34\x95\xb7\x22\x37\xc7\xfd\x5b\xec\x82\x4c\xc8\x4f\xef\xa4\xfa\x0c\x0e\xd0\x6a\x14\xec\x26\xf5\x84\x81\xe3\xd6\x72\x48\x05\x04\xb9\x62\x03\x53\x89\xa3\xdf\x69\x6c\xea\xe6\xf3\x26\x40\x75\x24\x18\x83\x11\x79\x07\x55\xfd\x9c\xa0\xaa\x2d\x3f\x36\x9d\x1b\x86\x6b\xf2\x20\x43\xc6\x58\x4e\x6a\xac\x04\x71\x84\x3a\xe5\x61\x86\x50\x15\x87\x7e\x98\x87\x5e\x53\x3b\xda\x42\x74\x7e\x24\xb5\xec\x80\xb2\x77\x40\xd9\xdb\x01\xca\x5e\x22\x7c\x1b\x8b\xc3\x97\x49\x9d\xa2\xf9\xbc\x87\x38\x1c\x2a\xb2\x05\x59\x78\x95\x24\x1c\xd3\x53\xd4\x57\xda\x04\x95\x7e\x4f\x0f\xce\xd7\x42\x6f\x13\x05\x90\xe0\x89\x30\x04\x51\xc2\xab\x43\x5b\xbd\xc9\xa0\x4d\x74\xc2\x5a\xbe\xd5\x3c\xff\x96\x17\x5c\x65\xa2\x3c\x57\x93\x52\x98\xd4\x74\xda\x8d\x5a\x75\x68\x3d\x64\x2f\x67\x85\xe6\xf9\xe1\x88\xda\x33\x49\x2f\xc0\x2d\x7e\xcd\xaa\x92\x8f\xc7\x32\x03\x52\x0f\x95\x3c\x7d\xde\x38\xd5\xe1\x8c\x11\x99\x30\x16\x82\xab\x66\x27\xfd\x23\xd0\xbb\x03\xd0\x21\x14\x80\x3c\x9a\x2b\xc6\x1b\xed\xce\xe9\xfb\x4b\x4a\x22\x8b\xbc\x82\xc7\x3f\x5d\x36\x5f\x8f\xc1\x53\x23\xc6\x91\x0e\x53\xdf\x78\x0c\xe7\x17\xed\x21\x7c\x77\x72\x66\x45\xc9\x1f\xe6\x42\x5d\x56\x3c\xbb\x59\x3f\x9e\x1e\x47\xe1\x12\x15\xe7\x95\x27\x01\xdb\xf4\x3e\x08\xeb\x77\x4d\x76\x9d\x3f\x77\xe6\x02\x8b\x8d\x20\xd7\x96\xd6\xca\x1d\xa7\xe6\xb7\xd9\xd5\xe6\xc7\xae\x9a\x0a\x23\x96\xba\xdf\xca\xd5\x4c\x5c\xb9\x15\xf7\x33\xe1\x19\x4f\x6c\x4b\xbb\x55\x48\x9b\x17\x4a\xd7\x93\xe9\x32\x22\x5d\x21\x30\xe2\xa8\xd0\x19\xaf\x04\x39\x3b\xe9\xdd\xdc\x83\xce\x05\xb0\xf2\x66\xaa\xfc\xfa\xdd\x5c\x5f\x48\x98\x3e\x57\x6d\x2c\x1a\xe9\x5b\xbb\x69\xe2\xee\x88\x10\xd3\x0f\xef\x64\x35\x3d\x24\x7a\x7a\x04\x63\x3c\xfa\x02\x33\x50\xfa\x1f\xfe\x8c\x17\xab\xc3\xf0\xa0\x49\x7c\xdc\x31\x55\xa2\x58\x1c\x7a\x04\x4c\x8a\x6a\x42\xa7\xaa\xd2\xb9\x60\xf6\xd4\x59\xb6\xcd\xf6\xbf\x15\x15\x67\x63\xc1\xab\xba\x14\x07\x0f\x4a\xde\xd8\x1c\xa9\xf2\x3c\xa8\x2a\x10\x18\x48\x85\x03\x05\xbb\xf0\x79\x1c\xe0\x90\x60\xb9\xb0\x97\xe0\x93\x43\x5b\xfa\xfa\xbe\x96\xca\xd7\x95\x3e\xa4\x4a\xdb\xf8\x79\xfc\x7a\x0f\x94\xef\x6e\xe7\xfa\xb8\x2e\x30\xfb\xc4\x29\x1a\x14\x4e\x40\xb9\x2d\x76\x8b\x60\x95\x5c\xdd\x65\x0a\x17\x89\xb3\x60\xca\xc6\x12\xb1\xfd\x5c\x9a\x9b\x41\x00\xac\x1a\xb0\xe1\x70\xb8\x41\x18\xc8\xfb\x37\x97\x9b\x44\x7b\xbe\x7f\x73\xd9\x1b\x2a\xc0\xb6\x7d\xf2\xbc\x22\x4c\xc0\xed\x8c\x31\x59\x95\xd0\x4b\x10\x4a\xe2\xbe\x79\x90\xec\xb0\x29\xad\xf7\xb1\x51\x84\x6a\x9c\x14\xc6\x1f\x18\x5d\x65\x07\x86\x83\xdd\x7a\xfa\xfc\x83\x27\xd5\x88\xd9\x2a\x93\xe0\xb8\xa8\x51\x39\xe1\xd3\x89\x42\x76\xb7\xdb\x99\x71\x4f\xbd\xf6\x5d\x97\xa0\x1b\x15\x26\x60\xb5\x00\x5a\x55\x8e\x99\xb2\x99\xa6\x4c\x2e\x78\x0c\x98\x69\x76\x0a\xb3\xba\xa8\xe4\xbc\x88\xf8\x12\x08\x09\x9a\xc2\x92\x76\x1e\xc0\x9d\x07\xf0\x73\xb6\x10\xfc\x8e\x3d\x80\x23\x31\xe5\xb7\x52\x7b\x40\x86\xe0\xb5\x7f\x36\xbe\x40\x3f\x24\x74\x05\x62\x09\xa8\x94\x52\x44\x8a\x50\x08\x73\x83\x83\xd8\x28\x23\x8a\x5c\xfa\x59\x4f\x12\xdf\x7c\xb8\x99\xe7\x7d\x54\xbe\xbd\x97\x85\xc7\xbf\x90\xb6\x87\x37\x1e\x37\xad\xab\xfe\xd1\xce\x10\xfe\x3c\x0d\xe1\xb1\xd5\x2b\x30\x74\x67\xf0\xa2\x60\xaa\x02\xc2\xf2\xb7\xaf\xfa\xc1\xc1\xd8\x86\x35\x3c\x9c\xe8\x9d\x31\x7c\x67\x0c\xdf\x8e\x31\xbc\x49\xf4\x36\xa5\x94\x69\x53\x78\xe3\xf1\x12\x1b\xe2\x15\xae\x0f\x46\x7d\x6c\x14\x1d\x37\x96\x8a\x17\xf2\x97\x24\x98\xd4\x1b\xff\x0c\x0e\xbf\x62\x7a\xce\x7f\xae\xc3\xa5\x47\x9a\x44\x96\x76\xb2\x29\x60\x69\x03\xc4\x72\x99\x71\x25\x54\x55\x58\x82\x36\xd3\xb7\xbe\x06\x3f\x1c\x74\x52\x2c\xfa\x92\x86\x8a\x9b\x1b\x73\xc4\xf3\x99\x54\xd2\x54\xa2\x3c\xcc\x10\x74\xac\x27\x31\x68\x29\x2c\xeb\xb6\xa0\x43\x08\x58\x6a\x60\x97\x25\x36\xb8\x85\xe2\xd4\xab\x05\x83\xf5\xb1\xe0\x53\x6e\x12\x6a\xd3\x85\xfd\xd9\x97\x1e\xa4\x4f\x84\xb0\x77\x78\xcb\xc9\x5a\x6a\xa5\x18\xf2\xe8\x25\x5e\xa7\xfb\x25\x33\x49\xa0\x30\x24\xd0\x51\x4b\xd8\x45\x89\xd6\x33\xa9\xd8\xdf\xc3\x70\xd8\x19\xcf\xc8\xac\x06\x9a\x3a\x05\x67\xb4\x8b\x0d\xb8\xba\x88\x3c\x9b\x0a\xb6\x0f\x55\x52\xa5\x62\xa2\xca\xf2\x83\x9d\x4a\xb8\x53\x09\x3f\x67\x3e\xf9\x07\x51\x09\x39\x99\x66\x7f\x5b\xdd\x48\xe7\x6b\x75\xbf\x77\xda\xc0\x95\x45\x6e\xe6\xca\x0e\x47\xc4\x3d\x98\x99\x2f\x3c\x74\x3c\x19\x3e\x9d\xc9\xfc\x83\xb3\x24\x3e\x23\xb5\xd0\x4e\xfd\xd1\x1a\xa1\xa5\xf4\x7d\x45\x1c\x9d\x8b\x63\xb4\x4d\xa6\x99\x03\x3d\xec\xae\x7a\xec\x16\xfa\x85\x49\x40\x89\xa5\x61\x0a\xec\x33\x08\x31\x83\xcf\xb6\xb5\xc4\xae\xf1\x5c\xd1\xa7\x12\x1f\x5a\x07\x49\xf5\x3e\x7a\x0d\x1c\x2b\x03\x07\xcf\xe7\x3c\xd3\x03\x76\x76\x8f\x04\x1e\x53\x56\xcf\x95\xfb\x6b\x03\x27\x83\x5d\x30\xf2\x3c\x75\x8d\xc1\x39\xa6\x80\x28\xc3\xe6\xd9\x51\x34\x9d\x56\x96\x01\xe5\x75\x61\x89\x73\x59\x17\x69\x75\x7b\x49\x3c\x01\xa7\x5e\x29\xf2\xd3\xda\x8e\xf0\xd2\x77\x70\x3e\x51\xda\xff\x7c\x06\xe9\x3a\x49\x16\x6b\xd7\x96\x3e\xeb\xb2\x72\xb0\x4f\x40\x2c\xa5\x07\x6c\xae\x73\x60\x8b\x76\xb8\x24\x66\x1a\x5e\x49\x43\xd5\x33\xfc\x04\xc4\xbd\x65\x1a\x60\x9a\x8f\x32\xff\xe1\xfe\x39\xcc\x70\x2c\x1c\x2a\x2b\x60\x26\xd9\x54\x6b\xa8\x5e\x0c\xeb\x00\xfd\xde\x4a\x0d\x8c\x17\xf7\xa9\xc4\xda\x5a\x74\xb1\xa3\xee\xd1\xb1\x15\x5e\x93\x86\xcd\x00\xed\xcd\x2d\x88\x13\xce\x6c\x37\x01\xb7\x1f\x32\xf1\x8c\xe5\x4e\x33\xdb\xe9\x9d\x90\x93\xa9\x2f\xed\xee\x33\x5d\x42\xb7\x33\x01\xd5\xbb\x8a\xc2\x0d\x21\xde\xa2\x10\x84\x6c\xd8\xfe\x72\x90\xf1\xc0\x3d\x6f\x6d\x4d\x72\xb9\x30\x37\xec\x60\xc0\x28\xe4\xcc\x72\xee\x7a\x66\x97\x4e\x56\xce\xe7\x57\x4d\x4b\xf0\x2c\xc3\x52\x14\xf4\x61\xdd\x00\x64\xb7\xc2\x09\xcf\x21\x45\xf0\x7a\x0f\x67\x77\xbd\xe7\xd1\xd7\xeb\x99\x4b\x31\x83\x19\xba\xf8\x74\x4c\x99\x2a\x31\xf7\x13\xde\x85\x27\x67\x61\x74\x7f\xf3\x2f\xed\x9b\x83\xb0\x9c\x53\x39\x99\xba\xd5\xe4\x94\x2c\xd6\xdc\x85\x6d\x38\xf0\x2f\x5c\x67\x61\x09\xaf\x44\x39\xa3\x44\xfe\xf4\x1a\xf7\x3d\xfe\x94\x91\xe9\x77\xa4\xb1\xa7\x1d\x27\x18\xa6\x6a\xc5\x98\x99\xa8\x98\xbd\x09\x61\x67\x2b\x69\x09\x0a\xc1\x38\xe2\x6d\x22\x79\xc7\x5d\xa5\x9c\x69\x57\x8e\x83\xbc\xa1\x0f\x19\x41\x26\xb8\xf1\x20\xd3\x34\x0a\x3d\x13\x18\x35\xc1\x72\x98\x35\x0c\x41\xb8\xa9\xb3\x7d\x31\x9c\x0c\xa3\x5c\x47\x14\xc0\x0e\x06\x11\x6b\x84\x2b\x09\x79\x8f\x98\xb1\x5c\x95\xa0\x3f\x46\x59\x7a\xe2\x56\x52\x26\xb7\xed\x1c\xe4\x3f\x2b\xe3\xc1\x4c\x36\x65\x77\xe0\x7a\xd6\xdd\x99\x6b\xb6\xd1\x89\x3d\x8f\xe9\x9d\x6b\x3c\x0e\x6c\x2a\xf3\x3f\xb5\xca\xf4\xfb\x61\xf6\x60\x52\xc4\xc1\xdb\x11\x68\xdc\x54\xdf\x0b\x5e\x56\x23\xc1\xab\x2b\x99\x0a\xb9\x78\xcb\x4d\x05\x07\x81\xdd\x09\x36\xd1\x55\x58\x6c\x34\x09\x60\xed\x10\x3f\xce\x8d\x41\x8b\x1b\x92\x1f\x0c\xe1\xd7\x01\x8c\xeb\xaa\xe4\x50\x0d\x51\xab\x75\x03\xa3\x1c\x49\x5a\xa8\x0a\xdf\xc3\xed\x84\x02\x86\x28\x4d\xc1\x39\x81\x14\xfc\xed\x8c\x71\x26\x8c\xe1\xa9\x3c\xc4\xef\xeb\x19\x57\xe0\xe0\xe5\xa3\xc2\x1e\x68\x68\xc7\xa4\xca\x01\xda\x42\x4d\x3c\x8a\x3d\xaa\xf5\x05\x4c\xc4\xcf\xb6\xa3\x04\x0b\x37\xa9\x63\xb3\x3f\x2a\xa5\x18\x1f\x34\x72\x68\xe3\xd5\x78\x61\x7a\x75\xbf\xc6\x37\x11\xf2\x50\x73\x8a\x5a\x20\xa9\xe3\xaa\xb4\x2a\xe4\x1b\x5e\x18\x31\x60\x1f\xd5\x8d\xd2\x77\xe9\x0f\xac\x8e\x94\x07\xf2\xdd\x38\x42\xfd\x05\x95\x13\x08\x74\xee\x0a\x87\x58\x6e\x11\x03\xf4\x32\xe2\x70\xd1\x00\x42\xc8\x34\x80\x1d\x65\x15\xe1\x1f\x9b\x7a\x84\x94\x6a\x5f\xdc\x67\x45\x8d\x4c\x85\x54\x9d\x03\x6f\xa2\x52\x5a\x1d\x2a\xd9\xc3\x6f\x8c\x5f\x7a\xc7\x13\x71\x7d\x27\xee\x11\x4a\x56\x8d\xda\xa1\x9c\xbd\x47\x09\xd5\x37\xda\x80\x48\xf9\x77\x5a\x8b\xd6\x63\x75\xbb\xac\x56\x4b\x2d\x96\xac\x87\x66\xf9\xf4\x8c\xe5\x84\x71\x63\xe4\x44\x21\x0b\xb0\xef\x0f\xad\x8e\x34\x8c\x07\xd4\xc3\xc8\x92\x55\xf2\x36\xb1\xdb\xc7\xf0\x3b\x94\x3d\x2a\x29\xd0\x25\x9b\x8a\xec\x06\xf8\x88\xc8\xdd\x10\xbc\xc4\x20\x11\x53\xe2\x56\x14\x0b\xac\x3c\x35\x64\xd4\x05\xf0\x3a\x6f\x33\x70\x91\x3d\xb1\x75\x8c\xf4\x12\x37\xbb\x63\x37\x2d\xfc\xc6\x80\xe9\x66\x73\x4b\xad\xfe\x6e\xaf\xc7\x77\x5a\x87\x46\x58\x91\xd7\x9e\x26\xad\x98\x43\x10\xe3\x55\x05\x69\xf7\x88\x8b\x50\x13\xf2\xc3\xd2\x07\x08\x5a\x04\xdc\x21\x5c\x31\x51\x96\xba\x0f\x5d\xeb\xbe\x3a\xbf\x0e\xf6\xdc\xd6\x24\x16\xd6\x7d\xbc\xf7\xd2\xc2\x02\x12\xc7\xad\x8d\x18\xb2\x9f\xa6\x42\x75\x6c\x38\xd4\xfc\x44\x03\xca\x20\xf4\x10\xba\x27\x5b\xb4\x31\x3a\x93\x3c\xfa\xd8\x9c\x2f\x0a\xcd\x01\x1f\xa0\x80\xe8\x3a\x0c\xae\xe2\x85\x56\x13\x57\x97\xac\x14\x99\x2e\xf3\x98\xf8\xfa\x18\x4e\xec\x25\x92\xbc\xe1\xb2\x91\xbd\x0c\xcc\x6f\xf0\x6a\xa5\x9d\x5c\x6f\x65\x03\xfa\x74\x18\xdc\x80\x40\x2d\xdc\xba\x84\x17\xa5\xf2\x9b\x36\x0c\xdb\x07\x31\x3f\x38\x5b\xef\xcb\xa2\x8b\x82\x68\x1b\x18\xdb\x08\x3d\x4c\xb9\x61\x23\x61\xd9\x6b\xbc\xd4\x95\x26\xfc\xbe\x9f\x5c\x3c\xde\xdf\xb1\xfa\x27\x26\xf6\x13\xba\x06\x40\x2b\x57\x25\xe6\x19\xb1\x19\xbf\x49\x1f\x23\xf8\x0d\xcf\x3c\xfd\x32\x5a\x40\xf4\x2b\x16\xe3\x06\x1b\xa0\xcc\xb9\xb7\xb0\x35\x46\xe2\x36\xc0\x1b\x4f\xe1\x56\xfb\x49\x3f\xf2\x38\xc2\x99\x6e\x9f\xc5\x33\xfb\x73\xa3\x48\xc7\x02\x80\x2b\x0a\x31\xc3\xa5\x57\x99\x2c\xdc\x70\xdb\x67\x8d\xa4\xd5\xc6\x9c\x87\x0c\x3a\x45\x8b\xa0\xce\xb2\xba\x1c\xa0\xf6\x84\x78\x77\x83\xa5\x2b\x19\xd6\xa0\xbb\x7f\x3c\x90\xd1\xbd\xb1\x1b\xba\xa2\x23\x44\xdb\xc1\xe5\x8c\x4e\x3a\x9c\xe2\xd6\x47\x96\xfb\x81\xb7\x74\xe9\xf6\x2a\xb9\xd3\x84\xd6\xb1\x3c\x51\x2b\x6b\xe7\x72\x8c\xa1\xb4\x2e\x0a\xfa\x6e\x2a\x0b\x2b\x45\xab\xcc\x7e\xc0\xaf\x11\x2f\x0b\x29\x4a\xa4\x35\xc6\x49\xe0\xfa\x4e\xb9\xcf\x87\xe9\xd8\xd7\xb0\xd9\x41\x50\x1b\x08\x0c\x09\x60\x16\x4a\x5d\x14\x23\x9e\x01\xce\x77\x83\x34\xc6\x06\x69\xa3\x8b\x5b\xc1\x78\x56\x6a\x63\xfc\x19\x2f\x05\x1c\xea\x21\x7b\xcb\xab\xe5\xc1\xb8\x73\x1b\x96\x02\x51\xf7\x13\x94\xea\xc0\x91\xf8\x1e\x63\x02\xab\x2e\x99\xd0\xed\x37\x33\x0e\xa5\xf8\xe0\xbe\xd5\x06\x55\x89\xb9\x36\x46\x8e\x10\x76\xc9\x8d\x1c\x14\x5b\x38\xad\xa3\x05\x1b\xcb\x7b\x7f\x87\x96\x38\xa1\x54\xed\x2d\xc6\xda\x2e\x19\x57\x6c\x2c\x49\x09\xc6\xa8\xb4\x96\x22\x90\x8b\x51\x3d\x99\x00\x5a\xff\x82\x19\xc1\x4b\x2b\xb9\x4e\xa2\x8f\x07\x01\xb4\x41\x2c\x0a\xed\xce\x3d\x8a\x1a\x53\x2b\xb6\x1e\x7a\xb1\x35\xba\x74\xde\x5e\x01\x8d\x2d\xb1\x12\x7f\x63\x24\x21\x23\x6e\x28\x2c\xb0\x67\x60\xba\x84\xfd\xf6\x7d\x53\x4d\xb5\x51\xed\xeb\x53\xe0\x71\x28\x3c\x4a\xbc\xa9\xf8\x48\x16\x56\x5f\xa4\x4f\xe1\xbb\x95\xb8\xaf\x96\xf7\x9f\xf8\x6e\xda\x6a\x56\xc4\xdb\x96\x56\x19\x02\x13\xde\x8c\x97\x8d\x79\x51\x30\x77\x3c\x20\x12\x5a\x56\x4c\x28\x00\x9a\xb1\x5c\xc3\x31\xe1\x7e\xec\x1b\xb9\xce\x32\x31\x1e\x89\x4c\xcf\x48\x78\x4a\x09\x0c\x21\x02\x1b\xc6\x95\x0b\x84\x78\x11\x11\x24\xd6\x72\x97\xd2\xc0\xe2\x16\x58\xd0\x03\xcc\x22\x59\x54\x6a\x9b\xc4\x93\x62\xc1\xa4\xa5\x74\x56\x4d\xa7\x3a\x0e\xec\xd5\xcb\xc3\x99\x54\x75\x25\x98\xd1\xfc\xc6\x61\xc7\x00\x77\xb1\x73\xf3\x43\x29\x28\xb0\x1d\x38\x96\x1e\xa7\x46\x10\xbc\x23\x49\x61\xc9\x36\x21\x7a\x4c\xb3\x10\x08\xcd\x02\xdc\x14\x3f\x0c\xf7\xad\x73\x7d\x86\xec\xbd\xae\x9c\xe9\x6c\x9c\xa0\xca\xc8\x19\x05\x84\xe2\x2a\x59\xb0\x7d\xbb\x2f\x24\x34\x50\xc8\x2d\xd9\x0e\x9a\xeb\x6e\x6f\x46\x61\x74\x03\x81\x29\xee\x68\x60\xc7\xc4\xdd\x26\x37\x3a\x8c\x26\xc7\x8b\x3b\xbe\x30\xf6\xc2\xd7\x33\x91\xb3\x09\x8c\xd8\xde\xef\xe8\x3a\x00\x87\x86\x16\x04\x36\x17\x7c\xbe\x64\x97\x9e\x89\x6a\xaa\x61\x5d\xdc\xc6\x07\xea\x1c\xdd\xa0\x68\x9f\x95\x30\x66\x80\x65\x09\xa5\x21\x0b\x25\x66\x95\x96\xb4\x96\x41\xe9\xb1\x47\x84\x28\xc4\xb8\xae\xea\x72\x63\x0b\x48\x6f\x9d\xe2\x94\x8b\x99\x56\x67\xdd\xc5\xe0\x12\x8d\x20\x34\xc0\x10\x84\xa2\x9e\x0b\x52\x20\x72\x68\x65\x58\x59\x2b\x45\x52\x34\x84\x03\x76\x58\x46\x96\x00\x0d\x91\xa2\xb8\x6f\x24\x24\x0d\xe7\x07\xd4\x0e\x87\x2d\x12\xb4\x0a\x28\xa7\x40\x21\xef\x7d\xd7\xa9\x39\xab\x95\xab\xd4\x11\xd6\x46\x4f\x9c\x39\xf8\x6e\xaa\x8b\x10\x37\x61\x49\xd4\x7b\xb0\x69\xe3\x70\xc1\xc5\x0d\x02\x64\x29\x26\xe0\x7b\x77\x22\xc5\x8c\xdb\xbf\x76\xf1\x6f\xcf\x29\xfe\xed\x2d\xed\x22\x78\x25\xb6\x11\x80\xa6\xf3\x5d\xec\xd9\x2e\xf6\x6c\x6b\xb1\x67\x8e\x28\x6d\xe0\x93\xf5\x56\xf1\x36\x9d\x40\x11\xc6\x50\x83\xe5\x3c\xd0\x5a\x45\x72\xa7\x33\x75\xe8\x71\xc3\x8b\x06\x39\x47\xec\xe7\x5a\x80\x92\xab\x6f\x21\xf5\xca\xb2\x66\x77\x87\xfe\xe6\x7c\x69\x20\x3c\x2c\x7d\xe1\x87\x0f\xde\x07\x46\x63\x88\x88\x51\xf0\xb2\x37\x47\x69\xd9\xee\x5a\xc7\xb0\x8a\x26\x7e\x65\x5f\x48\xd4\x9e\x6b\x35\x49\xe4\x16\x61\x8f\x43\x76\xec\xe9\x7b\x6a\x30\x20\x48\xc2\x3f\xc1\x91\xf3\xc3\x87\xed\x78\xa9\xde\x2f\x8d\x70\x45\x6c\x5b\xd4\xf2\x43\xf0\xf6\xf4\xd9\xf2\x80\x7a\x84\x74\xc8\xcf\xac\x51\xb7\x19\x29\xf4\x80\x71\x76\x23\x16\x48\xcc\x21\x64\x50\x94\xdc\x37\x06\x18\x5c\xe2\x35\x37\x62\xe1\x2c\x17\xf5\xfa\x18\x6f\x84\x3c\x76\xbd\x6d\x00\x7b\x8c\xc7\x0f\xa0\x75\x9d\xf0\xed\x27\xb0\x12\xe1\x25\xfa\xda\xea\x62\x60\x37\x62\xf1\xc2\x10\xc2\xaf\x56\x90\x7f\x07\x56\x60\x3a\xe3\x8e\x73\xfd\x68\x55\x5d\xbf\x1e\x78\x0c\xce\xd5\xc0\x8a\xc4\xf6\x3f\x67\xf7\x56\x74\x1a\xb0\x53\x2d\xcc\x7b\x5d\xc1\x9f\x43\xf6\x1d\x19\xae\xde\xa6\x01\x9b\xb1\xef\xc4\x1e\x2a\x06\x47\xca\x7e\x3f\x66\x1b\xc6\xcb\xf6\x7e\x5f\xa4\xb1\x84\x5b\x97\x6e\x1c\x20\x06\x60\x60\x27\x76\x11\x9b\xcd\x41\x45\x4c\xf6\x81\xc3\xb7\xfd\xc4\x13\x58\xd1\x5d\x77\x57\xdf\x41\xd2\xe2\xdb\xce\x97\x29\x22\xd0\x48\x35\x29\xbc\x4b\x7a\x40\xb2\x54\x28\x76\x57\x89\x72\x5e\x8a\x50\xef\x8e\x80\x9b\x49\xa9\xc2\xfe\x50\xb2\x29\x78\x06\x80\xac\x25\x9a\x21\x4c\x55\xf2\x4a\x4c\x64\xc6\x66\xa2\x9c\x00\xba\x72\x36\xdd\x04\xe9\xbd\xc7\x0d\x84\xbb\x9a\xba\x7a\x75\x51\x00\x66\x14\x84\xd1\xb6\x09\x89\xf7\x9e\x2b\x1d\x30\x67\xae\xa6\xa2\xe9\xc0\x45\x8a\x89\xde\xf1\xe3\xf7\xa7\x08\xa0\x2d\xd8\x15\xd5\x60\x8e\x07\x41\xc5\x25\x9c\x56\x09\xf7\xbb\x1e\xd1\xd1\x75\x42\x7a\xfc\xc2\x7a\x81\x7d\xd9\x8d\x9f\x9a\x67\x9a\x54\x36\x26\x31\x5a\x38\x8d\x0a\xae\xf0\x56\xb2\xf2\xbb\x88\x20\xc2\x8c\x55\xd9\xf4\x8d\x14\x45\xfe\xf8\x11\x83\x17\xea\x89\x47\xbc\xea\x94\xa5\x23\xc8\xe9\x49\x77\xf0\x38\x42\x50\x78\xa7\x8b\xab\x64\x61\x55\x91\xbe\xde\xb2\xce\xf2\x76\x2d\x24\x36\xe3\x0d\xb1\x13\x51\x25\x5c\x7b\x28\x94\xda\x73\x7b\xba\x50\x7c\x26\x33\xd2\xea\x50\x81\x75\x49\xf6\x6c\xc2\xab\x50\x9b\x57\x28\xab\x20\x07\xdc\x07\xa7\x08\x7a\x0b\x8f\x8b\x65\x78\xac\xcd\xdb\x05\x6f\x9d\xa6\xc0\x04\xe7\xa5\xc8\x50\x24\x7e\xaf\x2b\xd0\xf6\x48\x87\x35\x48\x9e\xc0\x2e\xe1\x87\x32\x64\x1f\x30\x3c\x9e\xc2\x3c\xc0\xbb\xf0\x6a\xf8\xea\xab\x21\x33\x42\x04\xf1\x54\x1a\x53\x87\x52\xdc\xdf\xbc\xfa\xeb\x37\xdf\xa4\x0b\x24\xe7\x27\xe7\xa7\x1f\x12\xc1\xe3\xf8\x60\x59\xc0\xc2\x1a\xd5\x54\xf4\xd8\xdb\x3a\xe3\x60\x91\xe4\x57\x30\x6d\xb7\x4c\x2d\xc0\xf9\x69\x1c\x12\xd9\xf0\x24\xa2\x56\xa1\xeb\xdc\xe5\xfd\xfa\x30\x6e\x34\x96\xbe\xa6\xba\x2b\x17\xf4\xf4\xbd\x2f\xaf\xf2\xfa\xe8\xa8\xf9\xe8\x92\xea\xea\xda\xed\x39\x3f\xc5\x46\x49\x97\x36\x4f\x5b\x2f\xda\x07\x92\xee\x2e\xbe\xb0\x8d\xbb\x7b\xc5\x25\xd1\x96\x5a\x51\x24\x8e\x3d\x9e\xed\xb1\x7c\x8c\x1f\x83\x44\x55\xea\xc2\x10\xa9\x71\x4f\xbc\xe1\x55\x89\x3b\x08\x8d\x1b\xb2\x6f\x17\xce\x8a\x35\xf0\x97\x36\xea\x69\xe3\xbc\x2b\x10\xc7\xe1\x7f\x8f\xbe\x98\x71\x55\xf3\xe2\xd0\xfe\x71\xe8\x92\x02\xca\xae\x8a\x48\xab\x68\xd1\x0a\xa7\xf4\x43\xb2\x28\xba\xc2\x69\x92\x51\x9d\x29\xd9\xc8\xe9\xef\xbe\x09\xa2\x6c\x73\xf2\x0a\xfc\x7f\xec\xbd\x7b\x73\xe4\xb6\x92\x2f\xf8\x55\xb0\xf2\xde\x90\x74\xa3\xaa\xd4\x6d\xfb\x3c\xa6\x27\x26\x6e\xa8\x25\xb5\xad\x75\xb7\x5a\x47\x52\xdb\xbb\x3b\x9a\xb0\x21\x12\xa5\xc2\x15\x8b\xa0\x09\x52\xea\x3a\x1b\xe7\xbb\x6f\x20\x33\xf1\x22\xc1\x7a\x48\x25\xbb\xed\xd1\x3f\x76\xab\x08\x82\x78\x26\x12\x99\xbf\xfc\xa5\xc7\x48\xfd\x03\xae\x2c\x04\x38\x8a\x57\xed\x88\xc9\x29\xe3\xf7\x5c\x3e\x7d\x9c\x7d\x4b\xb7\x73\x58\x58\x7c\x6d\xf7\x02\x09\x5a\xcc\x18\x34\x9a\x31\x28\xcb\x16\x74\x94\x28\x45\x1a\x90\x29\x04\x2f\x80\xd7\xb9\x00\x0e\x99\xf4\x02\x3e\xf4\x0f\xbb\xf2\xc5\x33\x72\xb9\xe9\xf3\x54\x47\x6e\x08\x41\x62\x7b\x48\x5b\xcc\xb0\x70\xc4\x2b\x9e\xc9\x66\xf1\x3b\x50\x47\x66\xf4\xe9\x04\x02\x84\x9e\x74\xfb\xdb\xa8\x06\xec\xec\xbd\x5e\x3f\x9a\x7b\xa1\x72\x49\x61\xc7\x96\x86\xc1\x35\xeb\xb7\x1f\x10\x0b\xff\x49\xec\x2c\x07\x8c\xb3\xf1\x62\xee\x0e\x62\x37\xb2\x83\xce\xc7\x50\xa2\xcd\x79\x13\xc3\x1d\xe4\xaa\xd9\xd2\x0e\xf2\xf0\xbf\x6d\xef\x21\xd4\x6f\xd6\xc0\x6f\x45\x7e\xc7\x40\x28\xb1\x7b\xc9\xe1\x8f\x1c\x55\x22\xa7\xe0\x64\x91\x52\xf4\x48\x9f\x00\x85\x02\x8c\x76\xf2\x55\xa6\x7f\x6f\xf0\x57\xd3\x55\xd6\xfd\x4d\x1a\xd2\xf5\x39\x98\x63\x65\xce\x6f\x97\x89\xf1\x20\xbf\x06\x94\x74\xec\xb3\x25\x06\x26\x3c\x75\x45\x1c\xd9\xfa\x4f\x4d\xf5\xb0\x07\x4c\xcd\xa7\xe5\x34\x41\x42\x7c\x89\xf7\x26\x99\xeb\x83\xb6\x95\x88\x5e\xc7\xc8\xb5\x62\x61\xe1\x17\x8b\xe0\x88\x79\xc2\xaa\x37\x6f\x6d\x0a\x7e\x05\xbc\x2d\xb4\xdc\xa8\x70\xe9\x18\x43\x53\x30\x8a\x33\xec\xc7\xbd\x0c\x45\x1c\x3e\xb5\x4b\x58\x1b\x30\x3a\x81\x2a\x6c\x26\x51\xdc\x8b\x9a\x55\x36\xa8\x06\x8d\x21\xa5\x7a\x30\xcf\x72\xaf\x68\x27\x6d\x23\x28\x2b\x0f\x89\xb6\x6b\x78\x05\x59\x36\x25\x7f\x2a\x59\xa6\xaf\xb4\x16\xfc\xe8\xa5\x64\x9b\x82\xd4\x50\xb0\x94\xe8\xdb\xa7\xe5\xa7\xd4\x5c\x38\x55\x05\x5e\x84\x73\xd2\x36\x16\x88\x97\x05\xdb\x23\xb6\xa2\xfd\xd0\x10\xba\x2d\x5b\x85\x5f\x2e\x69\xed\xcd\x3d\xb7\x76\xc1\x8d\x16\xff\x0a\x83\x1f\x1d\x48\xa7\xc7\x3b\xa3\x1d\x04\x8a\x7f\xfa\x04\x7f\xdc\x28\xd5\xc0\x3f\xee\xcc\xa2\x2a\xac\x8b\x6b\xb4\xa3\x34\x6e\x51\x90\xb3\xb8\x67\x2f\xda\xb2\x91\x73\xe1\xcb\xd0\x45\x2c\xfe\xe1\xbc\x56\x9f\x17\x41\x3d\x96\xee\x0c\x3b\x68\xce\xd4\x3a\x9b\xc9\x46\x64\x46\xb6\x26\xfc\x6c\xe1\xd3\xa4\x0d\xf2\x30\x28\x41\x78\x86\xd8\x74\x9d\x5a\xbf\xd4\xcf\x5e\x85\x6f\x95\x6a\xd8\xe9\x71\xb2\x9e\xe4\x46\x18\x1a\x8d\xd4\xf9\x1d\x15\x64\xd6\x45\x98\xfa\x94\x8b\x0b\xa9\xa9\x70\x2d\xe6\xaa\x11\x90\xcd\xc8\x62\x8e\xb2\x3b\x51\xbf\x39\x38\x78\x3d\xf9\xcb\x24\x99\x44\xaf\x3b\x87\x7d\xe7\x17\x3c\x5e\xde\x0e\x50\xcf\x77\x5b\xa0\xbf\x1a\xd7\xbb\xf4\xf1\x6f\x26\xaf\xff\x3a\x79\x35\x7e\x35\xb9\xa9\xd4\xe4\xdb\x31\x9f\xe7\x7f\xfd\x76\xa0\x09\xdd\x15\xd0\x6f\x85\x2d\xb1\xb4\x21\x83\x95\x07\xeb\x2d\x59\xb5\x39\xbf\x37\xae\xd8\x6f\x8f\x04\x13\x3e\x3d\x4a\xd7\x06\x59\xd4\x28\x9c\x9a\x6a\x71\xc8\xc0\x8c\x72\x3a\x51\x68\x35\x06\x80\x87\x21\x20\x52\x07\x51\x36\xec\xbd\xe0\x75\x89\x5e\x1e\x98\x85\x39\x2f\xf7\xfe\xb2\x6f\x6b\x1d\xcb\x1c\xcf\x80\x37\x07\x07\x73\x5e\xfe\x6d\xa2\xea\xdb\x83\x42\x96\xed\x67\xf3\xe7\xb8\x32\xa7\xb5\xf9\xd7\x5f\x0e\xfc\x0b\x93\xbf\x4c\x66\xcd\xbc\x18\xb6\xc6\xfb\x6d\x99\xdc\x69\x1f\x1d\x55\x21\x96\x5a\x7b\xb7\x59\xe1\xd1\xcf\x7e\x78\xc9\xe0\xc9\x92\xc5\x77\x20\x9a\xec\x40\xe9\x71\x2d\x0a\x88\x90\xc1\x15\x78\x2c\x6e\x24\x2f\xd9\x77\x67\x9f\x0e\x90\x7e\xef\x6f\x6c\xef\x61\x26\xc4\x3f\x17\xfb\xe9\x85\x18\x48\xb9\xbe\x62\xe1\x9e\x3d\x7a\x52\xfd\xb2\x88\x27\xf1\x2a\x9a\x5d\xb2\x89\x64\x46\x78\x5f\x88\x9c\x7d\xcf\x1b\x60\x97\xd3\xee\x34\xe7\x59\x26\xb4\x9e\xd4\x22\x9f\xf1\x66\x92\xa9\xb9\x39\xd1\xdb\xb9\xc5\x06\x1c\x88\x72\xfc\xe9\xf2\xe0\x42\xe4\x3f\x7f\xcf\x9b\x9f\x2f\xdb\x1b\xd7\x8f\x9f\x3f\x38\x5a\xc2\x83\xd7\x07\x66\x9e\x0f\x2e\xbe\xbf\xfc\x70\x70\x8b\x79\x4d\xc7\x38\x00\x63\x73\x78\x0c\xac\x82\x81\xd3\x0a\x23\x91\xc1\x76\x3b\xec\xca\x4c\x14\x22\x3b\xae\xa6\x2c\x6c\x3f\x3a\xf4\x03\x0e\x47\x84\x72\x58\x71\x5c\xc1\x1b\xe7\x49\xb6\xc4\x65\x38\x8c\x1f\x63\x78\x3a\xa1\x2e\xcc\x3f\xdf\xd9\x0a\xcd\xac\x3c\xd4\xb2\x69\x04\x6e\x4c\xf0\x21\xaa\xe9\xc8\x21\xa2\xcc\x54\x5d\xef\xdc\xbf\xbe\xde\x49\x2e\x2b\xdf\xb2\x34\x63\xa3\x4b\x46\x69\xba\xdc\x28\x1a\x13\x87\x79\x76\xb1\x60\x46\xb0\x93\x47\x79\xfd\xd0\x8f\x95\xa4\xb6\x8f\xe4\xb3\x95\x40\x16\x8a\xf9\xf2\x54\x6e\xf5\x0a\x17\x85\x39\x3c\x67\x1b\x41\x64\xba\xd1\x03\x8e\xcb\x76\xc3\x71\x3e\x9d\x52\xd3\x08\x6d\xc8\x59\x25\x05\x86\xb4\xb8\x05\x66\xba\xd4\x08\x6e\x57\x9d\xd9\xba\xb5\xa5\x4c\x19\xa1\x08\x26\x4f\x9e\x87\xd9\x40\x02\x50\x8e\x20\x5a\xf6\x7f\x5d\x7e\x3c\x3b\xf8\x4e\x59\x33\x32\xec\x52\x44\x81\xa2\x7f\xcc\xa6\x11\xcc\x85\x36\x8b\xd6\xdc\xf6\xc4\x64\xce\x4b\x39\x15\xda\xec\x63\x9b\x31\xee\x3f\xbf\xfe\x2f\x14\x27\x0e\x56\x4d\xd1\x9b\x0e\x4e\x62\xe7\x8a\x28\x5d\xa3\xfc\x7a\x94\xc7\xb6\x52\x39\x35\xfa\xc1\x67\xfa\x54\xa5\x4b\x0d\x5b\xc8\x3b\xf1\x86\x5d\x03\x6b\x40\xf0\xed\xff\xcf\x9c\xe2\xff\xba\xde\x01\x49\x59\x0b\x76\x0d\x04\xc3\xd7\x3b\x11\xe6\x9f\x52\xec\xf4\xb2\xee\xa1\x7f\xb7\x96\xb7\xb7\x00\xa0\x02\x38\xcb\xbd\x28\x9b\x7d\xc8\x09\x3c\x65\x65\x98\x5c\xb4\xec\x65\x0a\xef\x35\xe6\x3f\xbf\xfe\x2f\xd3\x92\xb8\x77\x4c\x96\xb9\xf8\xcc\xbe\xc6\xfd\x61\x24\xa9\xca\xf7\x49\x88\xea\x45\xd9\xf0\xcf\xe0\x39\x99\x29\x2d\x28\x4f\x7f\xa3\xd0\x63\x09\xa1\x92\x0f\xa2\x28\xc6\x88\xb8\xca\xd9\x03\x1a\x47\xec\x80\xa2\xf7\xb1\xe2\x75\x33\x24\x79\xd6\xe2\xdf\x58\x87\x77\xf9\xf9\x90\x38\x5f\x28\x21\x34\x36\x6c\x25\x1b\xe9\x6f\xd0\xc4\x21\x22\x1d\x73\x9c\xa0\xc1\x6d\x50\x22\x59\x97\x07\xeb\x94\x44\xa8\xb3\xcc\x66\x16\xab\x17\x6c\xd0\x39\xcf\x71\x07\xf3\x72\xeb\xcc\x13\xa6\xdb\x60\xd8\xcb\x16\x63\x72\x5a\x00\x11\x45\xa6\x4a\x34\x58\x66\x8b\x54\x3f\x5b\x99\x58\xba\x9f\xbc\xd7\xe8\x79\x17\x88\xb9\x99\xae\x7d\x7c\x9d\x3b\xd3\x2b\xdd\xd9\xfb\x47\x68\xa7\x04\xdb\x3b\xff\x71\xdf\xe2\xf5\x90\x27\xdc\x81\xf2\xc0\x7b\x40\x1a\xc6\xcd\x02\x0c\xa4\xde\xb1\xa2\x6a\xe0\xa8\x06\xc3\x29\x2f\xd4\xad\xa2\x58\xd8\x6d\xdb\x8e\x5f\xa8\x91\x5e\xa8\x91\xfe\xc0\x30\xce\x3f\x29\x35\x12\x77\x17\x2f\xbf\x53\x98\xdf\xbc\x8e\xd1\xfe\x21\x72\xa4\xc3\xf5\x7c\xc2\xce\x57\xc9\x95\xed\x39\x9e\x92\xf2\x64\x6d\x4a\x8d\x8e\xac\x5c\x93\x72\xb7\xe3\x60\xb3\xbe\xa4\xe0\x66\x70\x40\x0e\x62\x0b\xfb\xe8\x0d\xdc\xa3\x79\x99\xbe\x88\x61\x7a\x2a\x45\x53\xef\x14\x5b\x13\x1a\xdc\x7d\xef\xa8\xe0\x32\x61\x77\x49\x16\x43\x59\xd7\x6a\x51\xef\x3a\x91\x43\x09\x4b\x73\x96\x41\x09\xbc\x08\x75\xa7\xea\xe5\x7c\x7a\x39\x9f\x5e\xce\xa7\x2f\xed\x7c\x02\x9f\x33\x1a\x0e\x58\x36\xe3\x35\xcf\x1a\x51\x4b\xdd\xc8\x8c\x10\x0e\x74\x40\xd1\xe4\xd1\x41\x04\xe0\x32\xde\x36\xb3\xe7\x3a\x84\xf0\x17\x10\x27\x4f\x91\xb0\x20\xb1\xb6\x7e\x1a\x0d\x9c\xe1\xd0\xda\x67\x3f\x77\xb6\x3a\x32\xdb\x3e\x80\xf0\x20\x79\xca\x29\xb4\x84\xa2\x69\x79\x79\x32\x01\x15\xba\xc3\xee\x03\x86\x32\x33\x65\xd5\x7d\xf6\x74\xb2\xa6\xf3\x5a\xdd\x88\x35\x88\x9a\x2a\x53\x2e\xb7\x76\xac\x2f\x8c\x9a\x89\x4c\xe1\xbf\x2b\x3f\xd3\xf8\xb7\xe1\x67\xfa\x04\x9e\x13\x6b\x66\x75\x49\xe2\xb8\xf9\x77\xdd\x8c\x9c\x4b\xa5\x2d\x73\x51\x6b\x90\xf5\xa6\x4d\x74\x54\x82\xe1\xf1\x56\xde\x0b\x0b\x98\x70\x24\x4f\xcb\x08\x9e\xd8\xe9\x94\xe2\x9d\x20\x5a\xf6\x7a\xe7\x42\x68\xf9\x4f\xa3\xed\xd5\x8d\xc8\xaf\x77\x2c\x15\x20\x2f\x6d\xac\x55\x2e\xea\x62\x01\x1c\x6b\x3d\xa1\x22\x35\xbb\x11\x48\x0f\x68\x2a\x49\x23\x22\xbc\x64\x1b\x24\x7e\x7a\x9c\x59\x04\xb6\x58\x3a\x12\x76\xb0\x68\x9c\xec\x61\x40\x87\x7c\x49\x83\xfc\xa5\x45\xbf\xfa\x40\x88\x81\x93\x6d\x73\x2c\xdf\x63\xce\xb3\x27\xb3\x3b\x26\x4f\xa4\x97\x28\xdc\x97\x28\xdc\xed\x44\xe1\x0e\x4b\xc8\xa7\x68\x3d\xe9\xb8\x9e\xc1\xa2\xdd\x64\x45\x6a\x3e\x57\x65\x94\x2c\x62\xea\x8c\xd4\x98\xf8\x50\x63\xd8\x66\x51\xa8\x07\xb3\xd6\x89\x95\xc3\x9c\x64\x16\xf9\x3e\x76\x00\x01\x5f\xcf\x1a\x44\x70\x99\xd0\xfa\x03\x04\xcc\x27\xd8\xe0\xdc\x43\xef\xfd\x0d\xef\x1b\xe4\xca\x9c\x13\x0b\xb0\x4b\xef\x48\x02\x77\xc6\xef\xb7\x8a\xad\xc6\xcf\x8d\xe1\x73\xe3\xd7\x1b\x40\xe9\x46\x3b\x66\x51\x0f\x05\x40\x05\x30\x0b\x3a\xbd\xb0\x33\x64\xe3\x29\x79\xa5\x67\xaa\x39\x76\x35\x30\x5e\x54\x33\x1e\x87\x39\x21\xf5\xaa\x0d\x72\x02\x4b\x8a\x23\x86\x89\xeb\xf1\x3c\xc4\xc5\x22\xc8\xea\x69\x1a\x48\x81\x57\x2e\xf4\xd2\x7b\x25\x6a\x20\x09\xb2\xd9\x24\x3b\x15\x06\xaf\x42\x9c\x36\x44\x32\x61\x84\x18\xe3\x10\x93\x42\xd3\x62\x9a\x05\x85\x6d\x28\x66\x2d\xcc\x68\x7b\x38\xa5\x2d\x47\xc1\xb8\xdc\xe8\x9f\x72\x9e\x6e\x50\xae\x20\xd6\xb1\x59\xab\x55\x54\x71\x48\x80\x6b\x43\xd8\x4c\xa3\x00\xe5\xc0\x65\xd1\xda\x24\x90\x37\x01\xa8\x07\x63\x44\xc1\x5f\xec\x78\xa4\x90\x60\x65\x04\x8a\x7a\xc1\xc1\xcd\x66\x9b\x01\x98\xa7\xe0\xe3\x10\x46\xa9\xdd\x67\xba\x89\xcf\xc2\x2e\x79\x7e\x97\x4d\xd0\xd1\x57\x8b\x4a\xe4\xc9\x3c\xc1\x81\xe7\x30\x19\x9f\x6e\x03\x11\x3a\x17\xd7\xb9\x2c\xe5\xbc\x9d\x47\x19\xd3\x9f\x7b\x6b\x85\x0a\xc7\xba\x1d\xb7\x1d\x08\x82\x1f\x35\x26\xc6\x1c\xe6\x2c\xf0\x94\x03\x0b\x24\x1c\x70\x10\x5f\x80\x00\x68\x08\x3c\x33\x52\xed\x46\x02\xad\xe3\xd3\x6e\x32\xef\xcd\xd7\x3c\xb1\xb0\xd1\xb3\x61\x04\x8e\x0a\xae\xf5\xd9\x4a\x7f\xf8\x65\x50\xda\xb1\x77\x7b\x1b\x3f\x18\x0b\xb6\x18\x39\x62\x3e\x13\x8a\xb5\x2e\x60\xfa\x43\x32\x73\x8b\x7f\xe6\x34\xe6\x07\x80\x5b\x10\x35\xac\xbf\x86\x0c\xf4\xe0\x47\xd0\x97\xd4\x94\x05\x79\x8c\xa5\x86\xc0\x63\x29\x72\xa4\xa9\x32\x7b\x56\x96\x59\xd1\xe6\xc8\xb6\x86\x66\x62\x40\x65\x38\x26\x2c\xce\x6e\x82\x14\xcb\x4b\x80\xdf\xe9\x81\xff\xd1\x3d\xb3\x12\x92\x96\x40\x4c\xe1\x6a\x1e\xf4\x3c\xbb\x37\x3c\xbb\x43\x3d\x4f\x6a\xea\xd6\xa3\x1d\xc9\xa1\x5d\x65\xcd\x03\xdd\xc5\xca\x0d\x45\xc6\x0d\x99\x9a\x9e\xe9\x78\xe6\x59\xd3\xf2\x62\xf0\x74\xf6\xa3\x25\xd8\xf9\x8f\x47\x6c\xc6\xb7\x7a\x33\x78\xc2\x29\x3d\x1c\xd3\x75\x11\x8b\x48\xea\x61\x14\xcb\xd5\xb9\x89\x93\x7b\xe9\x0b\x8b\xc3\xa2\xc5\xe1\x8d\x5e\xc3\xd7\x35\x38\x75\x37\x32\x2d\x98\x21\xc0\xf3\xd1\xd7\x6f\x8f\x53\x62\x5c\xdb\x8d\x4c\x19\xbb\x5b\xa1\xe3\x5f\x6e\x05\xdc\x76\xa4\xd6\xd2\x04\x5c\x03\x26\x60\x17\x0c\x93\x6c\xeb\x13\x65\xc5\xf2\x74\xe2\x2b\x5f\xf1\xe2\x8d\x8c\x49\xe8\x98\x33\x1b\xd3\x02\x3d\xe3\xcc\xff\x28\x70\x69\x09\x4c\xcd\x95\x0a\xa5\xa5\x6a\xcb\x9c\x9d\xff\x88\xd6\x0a\xd5\xe2\x18\x70\xb7\x58\x9c\x07\x56\x01\x23\xce\xea\x76\x49\x3d\x62\x42\xc3\x15\x9a\x17\xc5\x62\xc4\x38\x7b\xa8\x79\x55\x89\x9a\xf1\x1a\x3e\x46\xd6\xc6\xee\x51\x63\xf3\x6f\x38\x97\xb8\x56\x73\xa1\x4a\xc1\x44\xa1\x05\xdb\xf3\x2e\xde\x64\x36\xb0\xd0\x80\x04\xfb\x00\x8e\x8b\x9e\x11\xc9\x3f\xea\x6f\x32\xfb\xc8\x8a\x64\x0b\x4a\xe4\x43\xc6\xac\xd4\x38\x23\xeb\x1f\x46\xe1\x03\xb5\x35\x9e\x2e\xd6\x6b\xfd\xdb\x59\x52\xd6\xc9\xa3\xfe\x53\x9c\x39\xdd\xa5\x55\xd7\x88\xdf\x36\x3d\xfc\x91\xf4\x84\x16\xec\x1c\x14\xc4\x4b\x29\xd2\xd7\x8f\x1b\xef\x0e\xe0\x7a\xa6\xc5\xd5\x56\xc5\x17\x83\xe2\x97\x67\x50\x7c\x3f\x64\x4e\xdc\xa6\xba\xf0\x0c\x07\xd0\x8b\xb1\xf0\xc5\x58\xf8\x4c\xc6\xc2\xa7\xd8\x09\xd7\x33\x11\x82\x75\x90\xce\xad\x75\x80\x67\xcf\x71\x87\xe0\x45\xc1\x80\x6f\x37\xb8\x34\x64\xbc\x84\xe4\x42\x18\xd4\xfa\x5c\xf7\x85\x8d\x6e\x0b\xfc\x41\x9f\x14\x5c\x37\x32\x7b\x5b\xa8\xec\xce\xdc\xd6\x53\x04\x18\x3f\x5d\xf6\x4a\x85\x7a\x22\x2f\xd9\xe1\x4f\x97\xec\x58\xea\xbb\x70\xc7\xa3\x0a\x13\xc6\x1b\x73\xcb\x15\xb4\xab\x21\xee\xca\xb9\x1e\xc9\xb4\x54\x32\xf1\xb9\x52\xda\x5b\xd3\x40\xd3\x7a\xe4\x38\xb9\xc1\x79\xd0\x02\x5b\x7f\x63\x5a\x0f\xe6\xba\x0d\x4c\x34\xa9\xce\x47\xfa\xaa\x19\xc6\x7f\xb6\xb5\x30\xdd\x4f\x8c\x9d\x7d\xd4\x1d\x30\xf3\x3b\x3b\xe6\x0d\xc7\x71\x83\x55\x61\xd9\x05\x60\x6c\xcc\x98\x98\xfb\x3b\x3d\x0a\x46\x64\x93\xd6\xdb\xcf\x27\x9b\xfc\x4e\x26\xf9\x4e\xec\xa3\x64\x93\xe1\x81\x11\xdb\x32\x13\xcf\xda\x6a\xf3\xa1\xde\xd6\x76\xed\x1f\xbe\xe7\x1e\xa6\x68\xe3\x7b\x9b\x1e\x80\x7b\xf6\xea\x0b\xc6\x66\xcb\xc3\xf2\xe7\x60\x32\x11\xd5\x6c\x9a\xba\x3d\x8b\x6a\xf6\xee\x32\x9a\x58\x66\x7e\x63\xef\x2e\x13\x93\x89\x59\x09\x67\xbc\x06\x10\x6f\xa5\xf2\x5d\x0d\xfc\x08\x8d\x9c\x6f\xb2\x85\xf0\xa3\x4b\xe6\x52\x9a\x2b\x7a\xa2\xb1\xf0\x7b\xdc\x58\x2c\xeb\xcd\xec\x24\x5c\xdc\x8d\x0d\xb2\x9b\x78\x4a\xb2\x48\xca\x24\x26\x96\xa2\x5a\x1d\xf3\xd8\xf7\x27\x87\xc7\x07\x14\x1b\xa6\x0f\xe6\x0b\xfd\x6b\x31\xc6\x4f\x8e\xab\xfc\xe0\xe2\xe4\xf0\xf8\xc3\xc9\x64\xbe\x09\xc3\x1a\x76\x62\x49\xe7\xcd\x5d\xe5\xc2\xd4\x95\xbc\x84\x5d\x88\x29\x84\xb4\xda\xc0\x29\x76\x23\xc7\xb9\xac\x45\x86\x8b\xc7\x59\xf8\x6e\x44\xf3\x20\x44\xd9\xbf\x15\x98\x91\x49\xdf\xd9\xd9\xc9\xe7\x4a\x64\x94\xcd\xc5\xa7\x8e\x42\x73\x25\xdc\x85\x27\x64\x46\xe9\x1b\x16\x11\xf7\x26\x8d\x8a\x7f\x8f\x66\x46\xdf\x02\xbc\x3f\x9f\xff\x78\xb4\xcd\xad\x44\xfd\xdc\x60\xe0\x13\xae\x84\x4c\xcb\xc4\x30\x5f\x9e\x86\x4b\xcc\xfa\x0c\xed\xf9\x35\xe3\x65\x5e\x38\xec\xb9\xe5\xc6\x63\xe6\xad\xbc\x96\xf7\xa2\x66\x7b\x6f\x03\xa3\xed\xfe\x26\x72\xee\xe8\xf2\x74\x78\x61\x4c\x13\xaa\xce\xbb\xa3\x78\x37\xbc\x93\x37\xb5\x60\x47\x33\x5e\x96\xa2\x78\x86\xb3\x77\x83\xbe\xbc\x3b\xea\x75\xa0\x10\x9f\x87\x22\x8b\xde\xb9\x67\x71\x87\x6e\x45\x29\x6a\x99\x79\xc4\x65\xa7\x47\x41\x94\xd1\x81\xeb\x1d\xda\x16\x60\x76\x44\xc6\x6e\xb8\xe9\x44\x55\xb4\xb7\x72\x1d\xb8\x99\xef\x40\x21\x3e\x2f\x99\x8d\x02\x08\x1f\x52\x3d\x81\x07\x9d\x79\xa1\x1f\xbb\x62\x6a\xd5\x3c\xf4\xa7\x00\x8c\x4e\xe6\xb6\xd3\x6a\x7e\x6b\x2d\x57\x98\xb2\x4b\x5b\x59\x6d\xbf\x46\x61\x6a\x4c\xd3\xe9\x4c\x96\x4d\x64\x2e\xda\x68\x24\xa0\xbe\xee\x10\xdc\x66\xc1\x79\x9c\xd6\x76\xbe\x3b\x3a\x89\x8b\xc4\xc3\xf2\xdd\xd1\xc9\xb3\x69\x89\x03\x71\x22\x4f\x56\x1f\x6f\x33\xe1\xc5\x51\x6e\x7a\xbd\xfe\x40\xf6\x86\xa3\x37\xa4\x18\xe5\x92\x3a\xa9\xbf\xb3\x8f\x3a\x43\xe8\x7e\xee\x98\x0a\xe3\x11\x74\xba\xd8\x53\x87\x6a\xf9\x01\x49\x83\x74\xe0\xfa\xf1\xa8\x23\xd2\xf5\x69\x78\xfb\x99\xfe\xa4\xc3\xcf\xbf\xa7\x27\xf1\x30\xe1\x11\xa9\xea\x45\xa8\xcf\xf4\x7b\xce\xe0\x06\x6d\xf4\x2f\xc8\x95\x27\x30\xe4\xc8\xba\xe3\x5a\x2d\xa6\x6d\x81\xec\x7d\xc0\xc7\x3c\xa6\x94\x37\xf0\x0e\x70\x86\xc3\x92\x14\xba\x41\x6a\xb0\x62\xf1\x7f\xb0\x8f\xe5\x18\x06\xdf\x9e\x23\x32\x72\xf1\xa3\xef\x8f\x97\x0b\x88\x8f\x36\x6f\xff\x74\xfa\xfe\x3d\x3b\xfb\x78\xc5\x7e\xfa\x78\xf1\x03\x26\x81\x9a\xb7\x45\x23\xf1\x5b\x2e\x0c\xea\x89\xab\xd8\x34\xa9\x32\xe3\xb7\xfe\xac\xd8\x81\xed\x4e\x85\xd4\xc9\x63\xf4\xf4\xb2\x73\x90\xf2\x92\xe1\x6f\xbf\xf5\x8e\xdf\xa0\x8f\xd0\xc0\xe1\x55\x07\xb9\x74\x12\x56\x3d\xca\x36\xe4\xba\x8a\xab\xad\x58\x8c\x5d\xa7\xec\xec\x43\x54\x7d\x94\x91\x7c\x83\xd6\xc1\x77\xba\x6d\x02\x2d\xf7\x63\x35\xe0\x1d\xf3\x08\x46\xd2\xe6\xb1\xe0\x88\x01\x6b\xcb\x7f\x5e\xef\xd4\xea\x7a\x67\xc4\xae\x77\xb4\x9a\x36\xd7\x3b\xff\x85\x2c\xbe\x36\x67\x5b\xce\xc6\xf4\x1e\x52\xf9\xca\x79\x55\x2c\x00\x56\xc2\x24\xe6\x3d\x00\x36\x53\x28\xbe\x45\xe5\xee\xe0\x2b\xf8\xe8\x98\x1a\xbb\x91\x05\xa3\x4c\xc9\xce\xb3\xce\x15\xa7\x64\x67\xa9\xfb\xcd\xf3\x1d\x1a\xa6\x55\x1b\xd0\xd7\xbd\xbb\xec\xce\x72\xb9\x32\xfd\xbd\x7d\xea\x6c\xf2\x99\x2a\x75\x53\x73\xe9\xbc\x56\x85\x9c\xcb\x06\x91\x0c\x36\xc9\xbc\xf7\x7a\x91\x31\x0a\x2d\x47\x84\x84\x8f\xe9\x72\xca\x69\xd1\x7a\x9f\x5a\x90\x91\x5b\x4d\x29\x79\xbd\xa9\xd9\x31\x4f\x7b\x5b\xda\xba\xdd\xa6\x5b\x45\xd8\xd3\x7f\x8d\x76\xaa\xce\x6e\xbc\x40\x6f\xce\xb9\x2a\x64\x96\x72\xdb\x98\x46\xcc\x78\x55\x89\x52\x0f\x04\xdd\xe1\x85\x86\x0e\xb2\x20\xc5\xb6\x07\x6f\x40\xea\x82\x06\x33\x5e\xd5\x82\x5d\x08\xe0\x1e\xd9\xb3\x49\xb4\xa6\x90\xc0\xbb\xc4\x24\x7b\x16\x74\xd5\x95\x1a\x7a\x7f\xc4\x8e\x8d\x0c\x13\xf1\x8b\x44\x66\x89\x09\xfa\x82\xe5\x96\x7a\xdf\x88\xbb\x0b\x62\x1f\xdc\xf3\x0c\x80\xfb\x13\xf7\xab\xe5\x02\xf7\xc7\x09\x21\x51\xa8\xab\xa8\xf6\x86\x3e\x6f\x98\x9c\xee\xc7\xb6\x8b\x7b\x82\x81\x44\x15\xb3\xcf\xa5\x3d\x53\x8d\x2a\x57\xe9\x8d\xe7\x89\x52\xf1\x81\x8e\x25\x8e\x50\xc3\x2d\x44\x1d\x4e\xb3\xd1\xca\x36\x33\x05\x6c\x12\x34\x94\x68\x5a\x77\xb7\x9a\xa9\x78\x50\xf5\xe0\x6d\xe7\x3c\x7a\x1e\x77\xcc\xbe\xfb\x28\x93\xc6\x26\xfd\x88\xda\xe0\xdb\xfe\x6b\xab\x6e\x16\x4d\xa2\xd1\xff\xc0\x07\x71\x6b\xed\x8f\xcf\x66\x2b\xa2\x0f\x74\x5b\x59\xdf\x24\x5c\x51\x17\x6f\x8f\xe3\xd6\x5d\xf0\x5c\x69\x06\x76\x5a\x76\x2c\x06\x2c\x94\xcb\x1a\xfa\x04\x15\xb8\xbe\x79\x9c\x7d\xe8\xe2\xed\xf1\xb0\x02\xa2\x33\x5e\x88\xd3\x8f\x09\x37\x12\x3e\x88\xbb\x6f\x7f\xec\x4b\xc0\xa1\x45\xf5\x83\xdb\xf2\x78\x44\x6c\x22\xbe\xe9\x6b\x4b\x1a\xbf\x36\x52\x30\x42\x09\xc6\x7c\x2f\xfd\xbe\xdc\x88\x42\x95\xb7\x7a\xc2\x4e\x20\x8d\x08\xba\x1f\x6d\x24\x11\x6f\xa2\x53\xce\x21\x6c\xf1\x25\x8c\xef\x5a\x44\xdf\x1b\x08\x26\x82\x02\x2a\x19\x29\x09\x8f\x3e\x76\x8c\xa8\xfe\xe7\x25\xf7\x32\xb3\x06\x97\x68\xba\x76\x62\x64\x19\xdc\xff\x1f\xbd\x20\x5d\x1f\x1e\xb5\x2c\x5d\x7f\x86\xe7\x77\x43\x48\xa5\x0c\x22\x69\x41\x8d\xa4\x14\xd8\x68\x7c\x6c\xb5\x4d\x0b\xc8\x29\x5d\x42\x03\x54\x75\x0e\x4f\x69\xee\x67\x8a\xd5\x62\x6e\x8e\x66\x59\xb2\x9a\x3f\x30\x70\xe8\x60\x74\xe3\xe3\x40\x98\x9b\xc3\x2f\x75\x35\x13\xd6\x01\x94\x40\x60\x86\x8f\xe3\x05\x72\x7f\x09\x8f\x9e\x5b\xcc\xdb\x16\xc8\xba\x69\x79\xd1\x3f\xac\xd6\x04\xa5\xac\x8b\xde\x7c\x04\x70\x73\x8d\x1c\x3b\x43\x51\x93\x87\xdd\x04\xc1\x2b\xe3\x26\x1f\x66\x91\x7a\x24\xb5\xa3\x36\xc3\x55\x93\x56\x59\x96\xc0\xe3\xe8\x4b\xfd\xf5\xec\xd8\xfe\x47\x84\x23\x43\xf6\x38\xa3\x1a\x41\x22\x7e\xa7\x7f\x82\xdd\x61\xeb\xd0\x67\x6c\xf4\x06\x51\xa1\x17\x18\xc8\x89\xcb\xbe\x96\x62\xea\xc1\x12\x51\xe8\xa7\x0f\xb3\x31\x92\xd3\x86\x18\x70\x04\x81\x18\xb1\x6b\xf5\x63\x94\x63\x15\xaf\xb5\x4d\xdb\xde\xc8\x7c\x61\x94\xb3\xaa\x00\x74\x07\xc2\x2a\xdf\x9f\x6e\x00\x16\x5c\xa5\x7b\x2d\xcf\x5d\x86\xaf\xb3\x25\x4a\xa3\x73\x9e\xad\x40\x4d\x55\xf9\xe9\x71\x1f\x34\x35\xd5\x57\x14\x59\xda\x31\x09\x7b\x01\x04\xb8\xbe\x46\xe1\x0e\x9f\xb0\x0f\xa4\xbe\xf3\x50\xb2\x41\x99\x9e\x42\x0f\xfb\xdf\xd1\xc2\x3a\x46\x97\x93\xcf\x13\x76\xbd\x23\x3e\x37\xdf\xe2\x3d\xfe\xf3\x54\xe3\x3f\xca\xc6\xfc\x6b\xc2\x4e\x8d\xbc\xcb\x24\xa4\x53\x2e\x89\x31\x12\x45\xac\x7d\xcd\xac\xdc\xb6\x74\xdc\x80\xe9\x3d\x90\x0f\x24\xbf\xc1\x63\xcd\xe6\xda\xd7\xab\xc7\x78\xfd\xc9\x4e\x65\xcb\x3e\xa7\xfc\xc7\x2c\x33\x95\x67\xd6\xa5\xeb\x79\x0c\x29\x4f\x1f\x2f\x59\xdd\x96\x48\xc2\x88\x57\xfb\x2b\x84\xa2\x69\x97\x7b\xd9\x5e\xdc\x6e\x16\x04\x24\x42\xbf\x2f\x5d\x6c\x41\xfa\x36\x0a\xe9\x60\x9f\xcc\xad\xf9\x82\x97\x7b\xe1\x69\x79\xe1\x69\xd9\x12\x4f\x4b\x84\xdf\x0a\x63\x27\x7b\x81\x68\x03\x68\xa1\x27\x74\xd4\xb4\x0a\x68\x1f\x89\x5e\x60\x93\xfb\x76\xbe\x8a\x74\xe5\x83\x11\xf1\xfd\x0c\x14\x3a\x4a\x98\x02\x9d\x42\xaf\x1f\x6f\x38\x2c\x66\xb7\x18\xcd\x9e\xcf\x41\xf9\x7d\x24\x03\xd8\xef\x36\x32\x4f\x26\x5d\x51\xf9\xda\x20\x42\x95\x0f\x5b\x52\xcd\xf9\x62\x2d\xf3\x28\x79\xe0\x5b\x90\xea\xc1\x48\x50\x24\xf9\xb1\x05\x02\x23\x68\xdd\x16\xe9\xbc\xae\xf1\x39\xe1\xa8\xc8\x8f\x21\x01\xe7\xa5\xab\xe0\xf4\xb6\x54\xee\xe7\x93\xcf\x22\x6b\x9b\xe4\x61\x72\xe5\x6d\xaf\x40\xd2\x5b\x14\x44\x6f\x0e\x01\x9b\xf4\x80\xec\xb1\xca\xd9\x79\x79\xc3\x34\x6f\xa4\x26\xea\x68\xd7\x01\xe1\x13\x57\x06\xe4\xc0\xb0\x64\xac\xe1\x77\xc4\x6e\xda\x86\xc9\x86\x42\x39\x95\xd2\x22\xca\x6c\x75\x2f\x15\xa6\xb9\x0d\xd3\x20\xd3\x5a\x0d\xaa\xc7\xa4\x9c\xfe\x35\xa3\x2c\x9a\xe5\xee\x06\xc4\x07\xf1\x92\x97\xc4\xfc\x71\x0b\x67\xb4\x36\x72\x78\x6e\x2a\x7d\x10\xf2\x76\xd6\xe8\x11\x93\x13\x31\x01\x3d\x53\xf0\x6c\x16\x54\x3b\x17\xe6\xae\xc4\x8b\x22\x24\x19\xb7\x53\x14\xa6\xaf\xdc\x73\xc7\x05\x89\xf6\x91\x0b\xe6\xeb\x4e\x4d\x72\xb8\x46\x4c\x34\xd9\x64\x7f\xc4\x32\x35\xaf\x5a\x08\x0b\x36\x6d\xbc\x59\x30\xd9\x58\x1d\xcd\x26\x8d\x80\xa1\x28\xc2\x74\xa5\xce\xaa\x0e\x11\xe8\x39\x20\x76\xae\x77\xb0\x77\xd7\x3b\xf6\xe8\x36\x15\xca\x20\xb9\xe0\x8c\x6b\x9c\x59\xb4\x87\xd8\xec\xa8\x18\xee\x5e\xd7\x42\x57\x0a\xc1\x3f\x95\x5f\xe2\x57\xa2\x9e\xff\xbb\xab\x62\x4f\xef\xfb\xc1\x9d\xc9\xdb\x99\x1d\x5b\x5e\x63\x98\x43\x3c\x27\xdb\x88\x65\xfa\x09\x3a\x25\xf2\xf3\xb8\x4d\xb0\xd7\x87\x46\x7c\xdd\xcd\x40\x31\xd4\x6e\x7e\xa2\x19\x1e\x58\xcf\xd0\x55\x23\x31\xe7\xa2\x61\x66\x5f\xf8\x79\x6e\xe4\x5c\x8c\x9c\xa1\x25\x8c\xac\xee\x28\x85\x8d\xcb\x44\xf0\xa8\x16\x64\x90\x38\x01\x95\x70\xdb\x0a\x35\x37\x5f\x35\xda\x07\xa5\xe6\x35\x4d\x10\xb6\xeb\x36\xc9\x48\x2b\xc8\xa7\xa1\x72\x8a\xfb\x45\x0d\x64\x7f\x14\x08\x79\xd8\xa9\xaa\x76\x47\x43\x53\x03\x2f\x37\x84\x7b\xa3\xcf\x42\xdc\xcb\xac\xf1\x88\x12\xeb\x00\xc1\x2e\xfd\x44\x11\x6f\xe6\x56\x57\x0b\x74\x3e\x57\x3e\xf7\xb0\xc6\x4f\x15\x98\x01\x99\xb2\x9a\x77\xd6\x9f\xf9\x9a\xd9\x97\x9d\x75\x08\xf5\x81\x18\xd5\x80\x33\xa3\x6d\x6c\x76\x2b\x12\xfd\x3b\x6f\x06\xc8\x2a\xb9\x9d\x05\xd8\x5f\x78\xc3\x17\x8e\xa8\x60\x6f\xb9\x1d\x7b\xfe\x52\xcc\xfe\x03\x9b\x71\xaf\x34\x8a\x9f\x99\x60\x23\x1a\x61\x53\x5a\xbd\xb4\x08\x83\xa5\x29\x69\xf6\xbd\x8b\xb9\xbd\x95\xf7\xa2\xf4\xd1\x51\x7b\x7a\x7f\x3f\xb0\x58\x9a\x99\xf1\xe4\x4c\x99\x1a\x43\xd2\x41\x91\xb3\x3d\xbb\xd8\x80\xea\xdd\x4c\x70\xf4\xb0\x6c\xe4\xd8\x97\x30\x9b\x7d\xc4\x90\x5f\x3e\x28\x06\x98\x21\xe4\x65\xe7\x51\x2e\x33\x92\xec\x0f\xd0\x97\x7b\x6b\x41\x73\x7d\x41\xe1\x71\x27\x16\x94\xba\xb4\xa1\x24\xcb\x3f\x88\x05\x26\x25\x0d\x84\x12\x27\x66\x77\xca\xec\xac\x4a\x12\x5b\xb8\x7a\x5d\x9e\x7b\x3f\x90\x52\x07\xd8\xa4\xa5\x9c\x64\xfe\xab\x29\x46\xb2\x30\x40\x7d\x9d\x78\x79\x37\x9d\xee\x86\x32\x72\x56\xa1\xcc\xec\x54\xc8\x3f\xba\xdd\xa8\x79\xcf\x8e\xde\x6f\xa2\x7f\xe6\x24\x88\x15\xf9\xc1\xa3\xfe\xfa\xf2\x09\xde\xd9\x9e\x9d\x06\x7e\xcb\x65\xa9\x9b\xfd\x7f\xef\x24\xdb\xa6\x68\x13\x5e\x6a\x76\xbd\x63\xd7\xdb\xae\xf6\x1f\xb8\xde\xd9\xc8\xed\x1e\x4e\x49\x9a\x0d\x64\x7b\xeb\xd9\x0a\x2e\xbd\x6c\xb3\xf5\x32\x7a\xf8\xa1\x7b\x96\xfd\x10\x0c\xc0\x3a\x7b\xa0\x5c\xf8\x1d\x50\x20\xe8\xb6\xb3\x07\xac\x3f\x23\xac\x98\xb0\x43\x40\x59\x93\x34\xd4\x2c\x91\x6c\x65\x23\x57\xa8\xbd\x65\x23\xd7\xd0\x7d\xa3\x52\x7f\x58\x05\x38\x5c\x55\x2f\x5a\xf0\x7a\x5a\xf0\xd0\x98\xbd\xa8\xc2\x5f\x90\x2a\x1c\x4d\xd2\xef\xa7\x0f\x6f\xde\x8c\x17\xa5\xf8\x4b\x55\x8a\x97\xd1\xcf\x06\x4f\x7d\xb0\xa3\x75\xb9\x59\x7e\x04\xeb\x06\xcc\x42\x8a\x0e\xab\x74\xac\x72\xb5\xbc\x10\xd0\xfe\x69\x09\x68\x55\x29\xc6\x0f\xaa\xce\x47\x81\xab\x31\xe0\x93\x8d\x86\x29\xc1\x29\xbb\x9c\xf5\x35\xc9\x67\x6d\xa3\x80\xbb\x29\xa8\x69\x2d\xb0\x23\x44\x41\x5e\xd5\xa6\x79\xef\x78\xa1\xc5\x88\x7d\x2a\xef\x4a\xf5\xb0\x39\x06\xf4\x41\xd5\x77\x85\xe2\xb9\x3e\x30\x07\x95\xf9\xcf\xd8\xe5\x12\xfe\xca\xfc\x15\xb0\xda\x24\x7a\xd2\x24\x5d\x89\x57\x8b\xca\xc5\x5c\x59\x8e\x90\x4e\x1f\x7e\xcb\x66\x0e\x0b\x8d\xe3\xb3\xcb\xa3\x81\x04\xe0\xe1\xd3\xc8\x23\x76\x7c\x76\xc9\x2a\x5e\xf3\xb9\x30\xd2\x90\xe0\x02\x0a\x11\xf2\xb9\xdd\x2d\x8a\x2e\xda\x10\x19\x04\xca\x3b\xec\x99\xe3\xb3\x4b\x84\x84\xae\x56\x41\xe1\x26\x80\xbe\xa0\x65\x80\x69\xd3\x1a\xa0\x39\xc1\xb2\xec\xf4\xdc\xb4\xc2\x28\x3d\x42\x93\x05\xde\x32\x01\x01\xdc\x34\xf7\x98\x9e\x1b\xb3\x92\x83\xcf\x0c\x37\x96\x1d\xb7\x55\x21\xf1\x12\x12\xbe\xe0\x29\xfb\xe6\xea\x7e\xb9\xc8\xef\x5f\xc6\xd4\x6a\x34\xb8\xe9\x9c\xd1\xfd\x0a\xd3\x33\x2a\xdf\xe9\x14\xd0\x03\xe5\x5e\x47\x82\x4e\x59\x58\xec\x5a\x1d\x12\x65\x53\xc3\xdd\xb5\xd3\x19\x76\x61\xbe\x8c\x67\xb8\xab\x10\x8c\x21\xb2\x64\x04\x65\xc7\x97\xcc\xfd\xbc\x96\xa0\xd6\x2a\x4d\xca\xad\x19\x6c\xee\x2e\x78\xd0\xaa\xd4\xe4\x3f\xe5\x68\x74\xcb\x13\x1b\x03\x83\xaa\x05\xaf\x8d\x8e\xb9\x6a\x54\xb1\x1c\xcb\xd5\x1c\xce\x42\x23\xc8\x66\x4a\x37\x63\x58\x4a\x85\x52\x77\x6d\xb5\xce\xea\xa1\x6a\x2a\xde\xcc\xd6\x1c\xed\xe8\x8d\x27\xac\x9f\x35\xf6\x34\x0d\xcb\xd2\x9d\x8d\x65\xdc\xfe\x4e\x2d\x38\xb7\xc3\xd7\xdb\xb3\x29\x74\x07\xea\x09\x69\x68\x96\xb9\xad\x6f\x40\xf3\xad\xf2\x01\xe6\x1d\x7c\xd0\x21\xdb\x21\x93\xd0\x0b\xb5\xce\x17\x47\xad\x63\x66\x66\xbb\xed\xd9\x8e\x50\x79\xe1\xd0\x79\xe1\xd0\xd9\x16\x87\x0e\xc9\xaa\xf5\x3d\xde\x17\x82\xe7\x46\x9c\xe8\xef\x78\x0a\xdb\xdf\x2d\x11\x93\x5f\x46\x6c\xa1\xa8\x92\x39\xa5\x70\x15\xdd\x9c\x2d\x07\xc8\xb8\x3e\xe5\x5c\xf4\xb8\x1f\x8a\x1f\x3e\x0e\xd2\xe2\xf2\xe0\xfa\x44\x7a\x00\x9a\xaf\xfd\xcf\xb0\x14\x40\x77\xf1\x46\xe2\x45\x95\x02\x78\x0e\x9f\x07\x97\x22\x6b\x6b\xd9\x2c\x8e\x54\xd9\x88\xcf\xe9\xa3\xa1\x53\x86\xcd\x54\x91\xc3\xbd\x76\x5c\x98\x85\xc4\x34\x3d\x0f\x99\xc8\x81\x5e\x04\xf9\xc9\x7d\xbe\x5d\xe2\x95\x33\xfb\x57\xcd\x29\x43\x35\x86\x1f\xf1\x42\x2b\x46\xdb\x1b\x98\x62\xed\x3b\x13\x1d\x7f\x7c\xc2\x30\x91\x36\x49\xe5\x08\x18\xd7\x2d\x8b\x49\x8a\xab\x5a\x64\x22\x87\xa9\x05\x57\xc8\xb4\xf3\x7a\xbf\x83\xab\x8f\xea\xa9\xfe\x0e\x17\x6c\x5f\x4f\x02\xdb\x0f\x2f\x00\xdc\x88\x86\x13\x5e\x90\x91\xd9\xaa\x76\xd6\x83\xc1\x8b\x22\x44\xf5\xd9\x3c\xcb\x34\x3a\x16\x53\x8f\x3c\xd4\x45\xa1\x1e\x60\x11\xfc\x80\x60\x69\x60\x3e\x06\xd2\x69\xb4\xa5\x3e\x98\x2a\x66\xb2\xc2\x63\xd3\xf3\x37\xa2\xb1\x29\x4a\x33\x58\xa9\xfc\xcd\x75\x79\x5d\xbe\x46\x4b\xad\x7a\x00\x47\xc0\x77\xa7\xc7\x4e\xa3\x82\x00\xfb\x4b\xe8\x22\xfb\x1a\x4b\x69\xd1\xdc\xca\x9c\xdd\x48\x50\x12\xb4\x68\xd8\x5e\x29\x1e\x10\xd2\xe9\x60\x86\xb4\x4e\x43\xda\xee\xf0\xe3\x54\xe5\x3e\xfb\x06\xeb\xac\x44\x3d\x97\x60\x5f\x35\xf5\xe2\x42\xf8\x78\xb1\x4b\xfa\x78\xfd\x30\xae\x1f\xc6\xe3\xf1\xd8\xb4\x15\x38\x4d\xb5\x68\x46\xd1\x18\x38\x73\x5d\x90\x32\xdc\x8f\x84\x59\x82\xfe\x13\xda\x7a\x29\x7a\x88\x6c\xa3\x0b\xdc\x8a\x7a\x67\xb4\x83\x20\x7c\xfc\xe9\xaf\xdf\xc2\xf5\xbe\x2d\x0f\x87\xe6\xda\x74\xc1\x8c\x5a\xa3\x00\x87\x89\xc7\x4e\x53\x2f\xf0\xe0\xe9\x65\xb3\xae\x6a\x05\x79\xf6\xd9\x27\x2d\xc0\x03\x02\x76\x12\x1b\x36\x27\xa9\x83\x13\xf6\x81\x2f\x70\x3b\x10\xfd\xaa\x2c\x59\x77\x7d\x32\x76\x3a\xb5\xcf\x6e\x54\x33\xeb\x16\x40\x32\x92\xde\xba\xc6\xc1\xc3\x73\xd7\x9b\x28\xfb\xf5\xc3\xbe\xd1\xe1\xc6\x41\x53\x05\x6f\x82\xbd\xb6\xc1\xf8\x9d\xa9\xf2\x42\xa9\x84\x6c\x39\x75\xc0\x72\xf2\x09\x87\xe3\x05\x36\x41\x33\xb0\x5c\x83\x1b\xa2\x1c\xd7\x4a\x41\xf0\x65\x8d\x36\xd8\xba\x15\x89\xe5\x60\xe3\x7a\xe1\x89\x9c\xf3\x5b\x20\xa6\xb7\xc3\xdd\x28\x26\x4a\xdd\xd6\xd6\x37\xd1\xf8\x70\x19\xfa\xd4\xa7\xd3\x63\xf6\x8a\xed\x99\x6f\xed\xc3\x38\x42\x28\x70\xa3\x98\x6e\x78\xdd\x6d\xa3\x9c\xda\x2a\x88\x76\x17\xbc\xac\x35\xf2\x63\x8e\x58\xa9\x30\x49\x3b\xb5\x29\x24\xd6\xad\x44\x6d\x46\x0b\x38\xd1\xbe\xbc\x09\x4f\x51\x7b\xd2\x64\x7e\xd2\x29\x46\x10\xb3\x17\x3e\x3d\x62\x2f\x10\xa1\x28\x88\x43\x33\xb3\x71\x33\x71\xfa\xac\xb2\xd3\xc5\x70\x7f\x89\x03\xf7\xf8\x9d\xa2\xc5\x7b\x59\xb6\x9f\x07\xa3\xdc\xcd\x08\x5f\x9e\x40\x19\xa8\x1b\xbe\xae\xe8\x6e\x0d\xd1\x3e\xbd\x13\xc5\xae\x49\xdb\x81\x51\x67\x16\xec\xa6\x80\x35\x69\x4e\x98\x0c\x73\x3f\xd4\xbc\xcc\xd5\xbc\xf7\x35\xe7\x84\xf3\x5d\x63\x7f\xa0\x39\x58\x3b\x0a\xec\x24\x9a\x08\x33\x35\xc1\x51\x0e\x67\xc1\x52\x03\x09\x9c\xf5\x3a\x9c\x15\xd3\x8f\xa9\xac\xc1\xd5\x06\xeb\x1e\xf6\x88\x2c\x3b\xa3\x39\xea\x1b\x01\x83\xd9\xda\x35\x5d\x94\x73\x5e\x2f\xcc\xa1\x83\x83\x1a\xcd\x6d\xa9\xec\xa7\x9d\xd1\x25\x27\x8b\x8b\x39\xf6\x52\xeb\x71\xc8\x4e\x32\xbc\x4e\xcd\x68\x2c\x74\xd6\x14\x29\xfb\x33\x3e\x00\xf5\x30\x30\x23\x38\x50\x42\xce\xe8\x55\x0c\x7c\x8b\x98\xa5\xcf\xc1\xcf\x69\x8e\xfd\xb6\xf4\x61\x21\xb6\xfc\x9e\x4d\x3d\xd0\x5d\xba\xfb\x6c\x2e\x6f\x67\x8d\x93\xd1\x05\x6f\xcb\x6c\xb6\x0d\x0b\x19\x76\x66\xa9\xa9\x68\x80\x99\x13\x1f\xe0\x55\xb7\xc3\xca\x37\x68\x08\xea\x5c\x27\x68\xff\x26\xec\x2a\x59\x23\xef\xc5\xb1\xe0\x79\x21\x4b\x71\x29\xcc\x5d\x20\x31\x13\xb8\x76\x79\xc1\xf2\xb6\xe6\xf6\x06\xa1\xb1\xb4\xf3\xfe\x99\xab\x33\xb0\x21\x00\x5e\x8b\xa2\x85\xc1\xf1\x1c\x82\xb8\x80\xf2\xfd\x4a\x42\x0c\xea\x54\x91\xdb\x98\xdc\x8d\x28\x37\xe0\xfd\x62\x61\xbd\x8d\x73\x5e\xdf\x99\x43\xd1\x4c\x09\x85\xfa\xdd\x41\x39\xad\x55\x26\x41\x4d\x0c\x25\x14\x46\x30\xce\x5d\x8c\x50\xa5\xb4\x84\x6f\xd3\x1a\x5c\x53\x7a\xf2\x41\xd8\x87\x91\x3d\xb1\x00\xc4\x6b\x54\xe0\x03\x0e\x58\x24\x36\x21\x6c\x0c\x08\x1c\x78\xdb\x28\x08\x77\x22\x92\xc8\xc3\x2c\x33\x7f\x5d\xa9\x3b\x91\xb2\x80\x2d\x29\x1d\x04\xdb\x3d\xcc\x04\xf0\xa4\x73\x47\x6e\xc5\xb1\x20\x6b\xa0\x64\x90\xd6\xd0\x54\xc8\x1b\x62\x5c\xb0\x64\xab\xc9\x33\x3c\x58\x5d\x83\xe6\xa5\xe0\x4e\x82\x31\xc4\xe4\xda\x75\xbb\xf5\xc8\x17\xc8\xd0\x7e\xe2\xd3\x16\x39\xb9\x03\x68\x40\x32\x86\x5f\x81\x57\xd9\xcd\x72\xc3\x0a\xc1\xcd\xb7\xca\x48\x99\x32\xf7\x9f\x73\xa8\xbf\x67\x94\xd9\xc2\x8e\x76\x8d\x5e\x23\xb7\x00\x98\x62\xd7\xce\x2d\x90\x97\x7a\xc8\x0f\x74\xe9\xc0\x6d\x4b\x9c\x3f\x13\x76\xee\x7f\xf4\x47\x1d\x8c\x59\xc7\x53\x61\x61\x95\xce\x58\x6e\xaa\xcc\xe0\xe3\x76\xab\x23\x17\x9c\x2a\x63\x8f\xc1\x63\x3c\x03\xd4\xb7\x21\x1a\x92\x4b\xd1\x60\x8f\xe0\x79\x2c\xcf\x43\xbd\xee\x7a\xe7\x08\x19\x9d\xde\x99\x33\xf0\x7a\xc7\xd2\x8f\xd0\x15\xdc\xdc\xfa\x76\xc3\x12\x3f\xc9\x66\xf6\xbd\xd2\xcd\x99\x68\x76\x47\xf1\x23\xf3\x37\x55\xbd\x6b\x16\xd8\xee\x99\x2a\xc5\xee\xa4\x3b\xb0\xce\xd1\xe2\x7d\x70\x43\x1e\x1f\x6a\xbc\x43\xa8\xc1\x83\xc0\xf9\x70\xa5\x20\x69\x12\x7c\xc1\x9a\xf4\x8d\x2e\xc3\x21\xb6\x1e\x4a\xcf\xb0\xad\x0f\xaa\xbe\x1b\xb1\x85\x6a\xf1\x05\x73\x63\x80\xa9\x5c\x84\x83\x24\x3e\xbb\x48\xc5\x46\x0d\x77\x3b\x69\xec\xc7\x34\x61\x24\x33\xde\xcb\xf2\x2e\xb1\x85\x4f\x7a\x65\x12\x02\x25\x48\x6d\x6c\x93\xe5\xe2\x0b\x61\xaa\x54\x59\xfe\x6f\x1c\x11\x88\xcc\x47\x99\x29\xca\x7b\x59\xab\x12\x58\xc0\xee\x79\x2d\xcd\xb7\xf4\x28\x86\x28\xea\x45\xd9\xf0\xcf\xe0\x29\x42\x86\xbe\xc2\xb4\x62\xc2\xec\x99\xf4\x26\x5a\x1b\xe6\x12\x97\x16\x54\x66\x54\x0f\x0b\xc9\x75\xca\x1d\xf5\xbd\x7f\x08\x07\xad\xf5\xb1\xf1\xc2\xa9\x1d\x10\xd4\x08\xc7\xcf\xe9\x39\xdd\x2f\xed\x1a\x88\xbb\xe6\x8f\x04\x7c\x65\x2a\x0b\x61\xae\x1a\xc1\x45\xc3\x06\xcb\x43\xf2\x35\xb8\xcc\xc1\x6a\x37\x77\xd2\x60\xf2\x1d\x86\xf6\xa9\x92\xca\xf5\x6e\x0d\x49\x25\xab\xf5\xe5\x94\x69\xeb\xe9\xf9\x51\x02\xac\xa0\x85\x8b\xbf\xdd\xd5\x4c\x56\x59\x98\x38\xa4\x37\x73\x66\xe2\x06\x33\x40\xe0\x67\x68\x48\xd2\x33\xc7\x4a\x7c\x6a\xa1\x7a\x98\x5f\x1c\xe5\x07\x01\x66\x58\xa7\x49\xf4\x46\xd8\xac\x53\xf2\x0f\xe1\xcc\x93\x55\xca\x9e\xf0\x75\xd3\x99\x73\x50\x39\x1d\xcc\xc8\x4f\xed\xfa\x5d\x3a\x4f\x45\x07\x77\x9a\x59\xc9\xfc\xa9\x23\x97\xf6\x02\xc6\xe7\x88\x2d\x67\x2f\xd6\xe7\x2a\x37\xc3\x01\x9c\x7b\x29\x5d\xc7\x95\xef\xa4\xf5\xe1\xa4\xc9\x8d\x2d\x30\x18\x44\x72\x52\xf8\xc0\x55\xfc\xbc\x2d\x8a\x4b\x91\xd5\xa2\x49\xec\xc9\xd3\x4e\x89\xa1\x8d\x19\x26\xae\x51\x46\x2b\xc5\xc2\xc9\x64\x2a\x68\x15\xc0\x7c\x95\x6d\x41\x10\x4d\x07\x2b\x86\x36\xd1\x6d\xc2\x02\xed\x48\xfd\x86\xe5\x11\x8f\x05\x38\x9c\xf1\x63\xce\x08\xc3\x35\x11\xec\x19\x21\x79\x2f\xf3\x96\x17\xf0\x21\x23\x24\xe7\xf6\xce\x87\x42\x9f\x8e\xb7\x39\xb5\x69\xc2\xde\x99\xeb\x30\x12\x90\x8c\x6c\xf3\x33\x4a\x18\x94\x83\xe8\x1b\xa1\xc0\x40\x39\x48\xe7\x10\x06\xbe\x53\x3b\xcc\xd1\x37\x53\x00\x7e\xdc\x18\xd3\xe2\x95\xb4\x03\x1c\x87\xaf\xe8\xb8\x91\xe5\xed\x18\x7e\x31\x1d\xa1\x2f\x8d\x55\x39\xe6\xe3\x4a\x6d\xc3\xcd\x37\x94\xb3\x70\xab\x2a\x95\x69\xc0\xd1\x1a\xaa\x2a\x34\x94\x17\xf2\x9f\x3c\x84\xe7\x0d\x6b\xae\xa7\xa5\x6c\xc2\x52\x66\x06\x10\x6c\x89\xb6\x05\x55\xe7\x60\x9e\x92\x48\xbd\x12\xd5\x07\x94\x04\x98\x01\x0b\x96\x97\x59\x89\x32\xaa\x0f\x2e\x3d\xda\xc3\x49\xa5\x76\xd9\x09\x71\x99\x81\x66\x10\xdc\x8c\x02\xae\x65\xa3\xdb\xd7\x16\x44\x89\x6e\x4a\xf8\x98\x53\x44\x6c\x46\x22\xb3\x10\x79\xd9\xfd\x32\x1c\x47\xf5\x9c\x17\x5d\x0b\xaa\x91\x7d\x80\x45\x63\x7c\x6e\x54\x96\x9e\x89\xa8\x33\x22\x16\x3c\x0a\x4d\x7d\x6f\x51\x52\x70\xcd\x03\x1c\xb4\xf3\xa1\x21\xd4\x50\x03\xd1\xc7\x7b\xa3\x70\xf9\xdf\xb0\xb5\x75\x22\xd1\x23\xb9\xef\x3b\x8d\x07\x38\x32\xc7\xdb\x8f\x11\x4b\x74\xcd\x21\x40\x6c\x70\x53\xbb\x59\x40\xea\x2a\xab\x6b\x58\x48\x33\x1d\x22\x07\xc8\xfe\xe7\xec\x54\xde\x8b\xbc\xa8\xc8\xc7\x0f\xc4\x9a\x36\x2f\x93\x60\x73\xd4\x54\x9c\xcf\x04\x83\x1f\x6a\x07\xc7\x56\x16\x8e\x1d\x8f\xac\x9e\xb0\xf7\x72\x6e\x5d\x16\x81\xa5\x47\x76\x06\x13\xae\x34\x5a\xce\x65\xc1\xcd\xe2\xd0\x33\xcc\x13\xdf\x29\xb5\xde\x1d\x2a\xe1\xa9\x7e\x1a\x0c\xce\x34\x76\x1c\x88\x91\x2f\xfa\x8e\x55\xaa\x7c\x20\x03\xe4\x19\x3d\x41\x8b\x0b\x2d\x85\x28\x50\xc2\xc5\x9a\x01\x90\x9b\xbb\x04\x29\x1e\xcf\x8d\x5e\x2d\xa3\xcf\x41\xe8\xd0\x28\x0c\x28\x10\xb5\x25\x05\xb5\x3f\xe8\x4e\x8d\x8d\xa5\x9b\x1c\x31\xae\x75\x3b\x77\x3c\x32\x66\x31\xd2\x56\xf6\x11\x08\x76\x2b\x24\x8f\x59\x53\xcb\x70\x60\xd7\x59\xf0\x94\xb0\x14\xf6\x2f\x8a\x11\xa0\x1d\x6f\xd4\xea\xf0\x42\x06\x7a\x87\x6c\x7c\xb4\xcf\x84\x5d\x26\xde\x04\x45\x9e\x4a\x00\x18\xf5\x46\x04\x10\x67\xaa\xa7\x03\x8d\xf7\xbd\x7f\xcc\x11\xe6\xef\xad\x07\x5c\x6b\x79\x5b\x9a\x43\x0a\x68\x80\x0f\x36\x48\x20\xd1\x87\x07\x82\x04\x4f\xda\x83\xc0\xf1\x48\x4f\x49\xdf\x61\x3f\xf2\x5a\xaa\x56\x5b\xbb\x56\xa6\xe6\x95\x2a\x41\x5c\x39\xaa\x4f\xf4\x1a\xc3\x30\x52\x4a\x60\x57\x49\x48\x5a\x00\x18\xfa\x73\xfb\xe4\x30\xb7\xfe\xcd\x80\x2b\x46\x6a\x9b\xf0\x19\xd2\x2e\x57\x35\xe0\xf3\xe1\x53\x35\x21\x58\x6c\xfe\x35\xff\x65\x94\xa8\xdc\xd5\x97\x05\xdc\x33\x44\x83\xa0\xc3\x86\x42\x35\xb6\x1d\x8e\x8d\x0e\x6b\x01\xa9\x59\x7b\xeb\xfa\xc8\xcb\xd2\x3a\xea\xd9\x4a\xdb\xdb\x37\x5f\xef\x04\x63\xbd\x84\xf4\x2e\x56\xc6\x64\xe0\xf6\xb3\x2a\xaa\xfb\x26\xbb\xde\x21\xa5\xd4\xac\x82\x71\x56\x4b\xb0\x6b\x5d\xef\x80\xfc\x76\x0f\x89\x24\x3a\x7a\x6e\x4e\x91\x07\xe5\x3c\xf0\x77\x62\xf1\xa0\x6a\x17\x3f\x63\xbf\x1a\x9d\x1c\xf4\x59\x44\x70\x92\x49\x00\xfc\x72\x35\x1d\xf8\x89\xc2\x8b\x09\x3b\x34\x4a\x28\xdc\xa5\xe1\x48\xb6\xdb\xce\xaa\xd1\x37\x44\x99\x0a\xfa\x6a\x3c\x0d\x16\xcc\x44\x5f\x33\x5b\x87\x53\xaa\xec\xb4\xfa\xee\xd7\x99\xd5\x5a\xad\xcb\x58\xd5\xec\x9f\xa2\x56\x14\x33\x54\x13\xed\xb6\x7d\x3c\x84\x56\xf7\x00\x98\x94\x0e\x1f\xcd\x93\x51\x15\xdc\x1b\x90\xb0\xdc\xab\xce\xc2\x2c\x1d\x6e\xef\x6d\xa6\x9d\xae\xe4\x84\x1d\x5a\xed\xc7\xfc\xb6\x40\x1a\x3a\x53\x19\x30\xd0\xc6\xca\x17\x96\x38\x3c\x3b\xb6\x8a\x09\xe1\xb0\x63\x97\x0f\x22\x74\xe2\x96\x80\x82\x42\x28\x77\xf1\xab\xd1\xdc\xc1\xd6\x74\x55\xb7\xe2\x7a\x67\x05\x2e\x4a\x94\x33\x5e\x66\x28\x87\x0f\xee\x44\xa5\x0f\xb4\xbc\x1d\xd3\x25\xf3\xe0\xd5\xab\x57\x7f\x03\x39\x04\x8d\xfb\x1f\x5f\xbf\xfd\x1f\x5f\xbf\xdd\x1a\x44\x2e\x46\x29\x61\x58\x54\xa0\xe8\xa5\x00\xa0\xe8\x79\x0e\xcc\x6c\x1d\xe0\x88\x59\x4b\x1e\x22\x34\x61\x1f\x4b\xb8\x84\x1c\x16\x0f\x7c\xa1\x47\xec\x63\xf9\x0e\x19\xcc\x46\xec\x4c\xdc\x8b\x3a\xba\xf4\x62\xa1\xad\x22\xea\x0f\xbe\xa2\x1e\x8d\xb1\xc9\xc9\x85\x88\xfe\x9b\x25\x22\xe3\xa2\x53\x22\x82\x46\x85\x0f\xed\x8e\x92\xde\x83\x41\xd3\x8c\xfe\xb0\x11\xed\x7f\x6f\xda\x6a\xe9\xd2\x87\x9e\x6a\x6b\x71\xc0\x2d\x18\x57\xed\x0e\xee\x30\xf8\xce\x6c\xd8\x9c\x41\xde\xed\x74\xe4\x58\xdd\x96\x31\x1c\x20\x50\x2a\xae\x77\x0a\x71\xcb\xb3\xc5\xf5\x4e\xfc\xa5\xd0\x4e\x61\x5b\x8c\x17\x68\x49\xe4\x66\xf8\x45\xe2\x8b\x2c\x29\xc6\xd9\xaf\x37\x47\x4d\x8d\x8d\xb4\x42\xc2\xfa\x78\xf1\x9a\x91\x26\xd5\x5f\xbd\x31\xcc\x79\x4c\x35\x8d\xa1\x19\x93\x79\xee\x29\x24\xcd\xe6\xae\x66\x8e\x44\xd2\x81\x69\x09\x9f\x24\xc3\xe4\xfb\xe9\x88\x16\xab\x69\xad\x73\x7a\x44\x23\x6e\xc4\xa1\xd4\xa0\x36\x52\xd2\x58\x27\x36\x5c\xa5\xcb\x84\x6b\xba\x12\x3b\x78\xbe\x8a\x64\xab\x57\x41\xe7\x9e\x01\x37\x97\xb6\xa2\xc2\x5a\x98\x30\x76\x29\x28\x62\x26\xf4\x3b\x02\x21\x37\x75\xc8\xa3\xde\xe0\x82\x84\xaa\xc5\x86\x34\x46\x9d\x5e\xc3\x40\x84\x6e\xac\x14\xa7\x84\x65\xf5\x8e\x1d\x5e\xd6\x47\x6a\x9e\xa2\x67\x90\x17\x92\xa3\xc2\x19\x97\x44\xe5\xc5\xd7\xf3\x06\xec\x83\xba\x57\x86\xc9\x52\x37\x82\xa7\xc1\xf2\xfd\xe2\xa9\x29\xeb\x57\x19\x67\x03\x36\xff\xee\x74\x83\xac\x54\x3d\x89\xb2\x9e\x4c\x6d\xb8\xbe\xf3\xba\xb0\x18\x53\x3c\x12\x4e\x7d\xf0\x3b\x35\x7f\x4c\xb7\xe3\x83\x64\x17\x67\xbc\x16\xe7\x08\x32\x38\xb3\x56\xb4\x44\x2f\x67\x70\x6f\xa5\x0c\x1f\x0e\x95\xe0\xed\x6e\x36\xaf\x55\x10\x5e\x9d\x04\x2a\x52\xc8\x28\xca\x01\x23\xec\xa2\x53\x89\x50\x08\x37\x05\x8c\xcd\xbd\x14\x0f\xc8\x3e\x28\x6f\x4b\x5e\xd8\xaf\x0a\xd2\x79\x51\x9d\x8a\xbf\xe2\x2c\x82\x95\xca\xdd\xfd\xbd\x03\xa5\xe8\xc1\x28\x22\x51\x8c\x97\x0a\x91\xb3\xf3\xd3\x63\xf6\x7a\xc2\xbe\x47\x43\x2e\xd4\x75\x99\x1a\x2c\x7b\x19\x07\xa0\x0a\x5a\x4a\x97\xda\x71\xa3\xf4\x01\x1a\xc8\x74\x69\x77\x5b\x29\x88\xd2\x05\x14\x7e\xaf\x63\x9a\x8d\x94\xfc\x7c\x9f\x88\x37\xb0\x0f\xeb\xf6\x06\x63\x6e\xd6\x91\x91\xd3\xb6\x28\x16\xcc\x28\x46\x28\x0f\xcf\x55\xde\x37\x04\x5f\xef\x20\xc9\x89\x7d\x80\x0c\x27\x13\xfc\xd1\x7d\x2e\xfa\xd5\x88\x4d\x4f\xa1\x81\x4f\xf4\x7d\x46\x4f\x49\x2f\x67\xe1\x8b\x40\xd1\xb9\x5c\x04\x3b\x8b\x13\xa7\x37\xa1\x95\x1c\x78\x20\x92\x9b\xb9\x11\xf5\x5c\x96\x70\x73\xfc\xae\xe6\x90\xa5\x49\x82\x70\x7a\x02\x22\xa2\x14\x02\x19\x15\x6c\xe5\x82\xdd\x9a\xba\x61\x24\x11\x6e\x06\xea\xb7\xd1\xed\x35\x2a\xa6\x39\x66\x3f\x20\xab\x43\x17\xce\x00\xd9\xe5\xc4\x2d\x8f\x00\x0d\x70\x07\x43\x4b\x13\xaa\xef\xee\x36\x44\x95\xc9\xf9\x5c\xe4\x46\x1e\x9a\x8f\x5a\x2f\x07\xbe\x60\x34\x7c\x59\x8c\xa2\x13\x1e\x9a\xc8\x2a\xe8\x7f\xec\xee\xb0\xc2\x10\xbe\x18\x15\x23\x99\x96\x1a\x0c\x3e\x6d\xdc\x35\xd0\x6e\x50\x4b\x16\xe2\x95\x4c\xd0\xdd\x01\xac\xcd\x59\x30\x15\x76\x6f\xdb\xad\x8a\xf0\x32\x8a\x2b\x0f\x2a\x34\x6f\x4f\x55\x9d\xc9\x9b\x62\xc1\x66\xbc\x68\x3c\x11\xf6\x1d\x66\x61\x31\xd5\x4c\xd8\xa5\x68\xc2\xee\x17\xaa\xbc\x85\xc6\x71\x82\x18\xda\x64\x7e\x99\xd9\x21\x6d\x85\xdf\x33\xc7\xc7\x42\xb5\x03\x28\xc3\x6f\x5e\xd9\xae\xae\x09\x2d\x69\x54\x21\x70\x98\x56\x5e\x98\xfc\x75\x36\x78\x69\x1b\x1e\xc1\x2b\x57\x1d\xdc\x18\x6c\x12\xec\x41\xb3\x38\x15\xf0\x44\xb1\x3e\x07\x2f\x5c\x4e\x57\x99\xc9\x9f\x96\x0a\x66\x0b\x1d\xb6\x29\xb9\xb7\x68\x45\x1c\xd5\x90\xe2\xe4\x07\xb1\xd0\x4b\x03\x22\x86\x58\xc0\xed\xa3\x90\xe2\xbc\xef\x49\x8f\x43\xaf\x2d\x9e\x1f\x7f\x30\xa7\x41\x53\x03\x54\x6d\x06\x16\x75\x73\x69\x05\x4e\x6e\x2c\x8b\xa6\x8d\x11\x13\x64\xc1\x28\x16\x11\x1f\x08\x4c\x26\xfa\xa8\xed\x2e\xb4\x96\x63\x33\x9f\x99\x07\x27\xd7\xaa\x60\x55\xc1\xcb\x35\x78\xc7\x83\xc8\xe7\x7e\x68\x8a\xa5\x36\x27\xf8\x91\x6b\xea\x63\xd6\xc8\xa3\x62\xb0\x9f\x72\xd1\xf6\x94\x0e\xab\x57\x11\x11\x30\xac\x69\x8b\x76\xdb\x07\xe7\x35\xb5\x11\xaf\x88\x29\x03\x48\x5c\x54\x49\x68\x68\x23\x7e\x63\xc0\x13\x3a\x21\x4a\x39\x85\xd3\xe3\xc4\x28\x32\x58\x52\xea\xc0\x1f\x00\x71\x0d\x6d\x53\xb5\xb0\xb9\x7f\x41\xef\xa2\x11\xef\x46\xfc\xfd\xb2\xfd\xa9\xe0\x65\xa0\x82\x7a\xb2\xd3\xad\x79\x07\x02\x2a\x54\xc4\x24\x24\x04\xab\x8b\x44\xb7\x0a\x28\x26\x32\xf1\x89\x32\x9c\x8b\xcd\xea\x78\x96\x4d\x4a\xa2\xaa\xb1\x10\xfe\x02\x97\xbe\x10\x44\x4e\xc6\x47\xcd\x65\xc7\x8f\xd5\x9b\xd0\x2b\xcb\xb1\x83\x8c\xb7\x4c\xb7\x90\x7b\x6a\xda\x16\xdd\x57\xe1\xe0\x06\x0d\x08\x2d\x62\xff\x11\xc4\x37\xcc\x23\xce\x5c\x72\x41\x26\xdf\xd5\x0e\xad\x89\xa1\x24\x7f\xdc\x75\xb1\x2a\x1f\x02\xdb\x3c\x1f\x02\x2d\x17\x47\x7b\x17\xd2\xa3\x24\x1c\x31\xa8\x01\xe6\x67\x83\x8e\xa7\x5e\x11\x7b\x09\x02\xaf\xff\x83\xbb\x1a\xa1\x11\x57\x98\x4b\xba\xa6\x6b\x0e\xd0\x3a\x05\x90\x5b\x47\xbd\x95\x39\x27\x9f\xf7\xb1\xd4\x00\x71\xe6\x90\x3c\x51\xdb\x9a\xcc\x89\x73\x2f\xb3\x46\xce\x35\x2c\x0d\x80\xeb\xce\x84\xac\x9d\xca\x1a\xe9\x65\xa8\xf7\xe9\xe8\xba\xe2\x22\x5f\x6e\x5b\x5e\xf3\xb2\x11\xc2\x87\xe1\x84\xb6\x91\x8e\xb7\x47\x5a\xbe\xa0\x4b\xe7\x1f\x33\x07\x5b\x2e\x32\x20\x31\x50\xe6\xe4\xc9\x84\xab\x45\x14\x5a\x20\x17\x9d\x9c\x5a\x9b\x39\x30\x07\xdd\x88\x4c\x19\x1d\xdf\xe6\x90\x60\x5a\x29\x88\x29\x88\xeb\x85\xe0\x02\x5f\xf9\x2d\x75\x34\xc8\x64\x1e\xb6\x8a\x32\x81\xa2\x2f\xc3\x59\xce\xc1\x73\x45\x5c\x64\x36\x56\x0d\xf5\x5c\x3f\x9a\x13\x76\x88\xfe\x43\xdd\x16\x00\x23\x72\xe3\xe4\x2e\x71\x53\x40\x3b\x34\xa8\x7f\x5a\xa0\x89\x75\x4c\x06\x6a\x2e\xae\xb3\xe5\xb2\x67\x20\xe1\x06\x78\xa7\x66\x84\x22\x01\x34\x2c\xf9\xf9\x24\xe2\x4c\x4c\xcf\xac\xf5\xa8\x9d\x43\x34\x80\x9a\x12\xd7\x9f\x45\x02\xe1\x1a\x97\x0d\xa6\x78\x82\xdd\x8b\x92\x28\xb0\xae\xc3\x5e\x1d\x59\xbb\xba\x36\xea\x8b\xb9\xae\xd2\x56\xc2\xc0\x4c\x7f\xe3\x0e\xd0\x31\x81\x51\x0a\x95\x1a\xa8\xc9\x99\xf5\x91\x14\x0e\xf7\x5f\xa0\x11\x11\xe4\x1a\xde\xb0\x68\x60\xb8\x03\x98\xd9\xac\x94\xd6\xd2\x2c\x00\xec\x38\xda\xa8\x20\x42\xf1\x5c\x80\xaf\xff\x0d\x46\x0b\x9a\xfb\x2b\x37\xeb\x46\x94\x90\xc3\xaf\x0a\xa8\xbf\x83\xa4\x4e\x56\x8b\x32\x3b\x2a\xc1\x54\x17\x48\x6b\x84\x0f\x99\x3a\x71\xcf\x89\xd2\xae\x0e\x0b\xf9\xc3\xb4\x39\x1a\xef\x15\x04\x80\x27\x20\x88\xdb\x14\x5c\xb3\x07\x01\x00\x77\x2c\xa6\x2b\x48\x03\xa1\x1e\x4a\x23\x4b\xe1\xda\x84\x1f\x82\xe8\x53\xd8\xf1\x16\x2c\x8a\x47\x59\x06\x76\x69\x88\x55\xe5\xe6\x27\x33\x5d\x17\x78\xe3\x4a\xf4\x3c\x48\xb4\x42\x2e\xe7\x32\x1f\xb0\xd3\xc0\x91\x10\x77\xeb\x70\x00\x7a\x6d\x26\xc7\x6c\x77\xba\xe9\x01\xa8\x43\x3a\x1b\x8c\xb5\xb5\xa8\x29\x9e\x30\x40\x1c\x59\x5b\x84\x0a\x10\x39\x5e\x9a\x93\x4d\xe4\x22\x7f\xc3\x0e\x7b\x61\xad\x8d\xeb\x84\xd9\xbc\xf6\x72\x8d\xd9\x88\xf0\x44\xc4\x6e\x44\x46\x74\xe1\xb0\x36\xef\x00\x30\xb3\x41\xc5\x34\x28\xe9\xbe\x9a\x91\x8c\xdb\x40\x09\x5e\xdc\x26\xa1\x82\x42\x82\xb4\x12\x9f\xa5\xbb\x9e\x9a\x0b\x3d\x5c\xda\xad\x8a\x5f\xb3\x87\xb8\xba\x0e\x15\x3d\x11\x2b\xbd\x01\xb4\x18\x70\xbd\xd1\x76\xb3\xf7\x04\x11\xb8\x8f\x69\x25\xd0\x00\xa8\x1b\x68\x87\xb9\x56\x2e\x2a\x82\xf6\x5b\x1e\xb8\x92\x89\xba\x46\x06\x50\x0a\xf1\xa7\x93\xcf\xb3\xfd\x29\xdd\x84\x9e\x69\xb3\x9d\xb6\xad\x0e\x0c\xe6\xdf\xa9\x54\xbe\x42\xa7\xb3\xd1\x66\x71\x76\xdb\x0b\xd5\x36\x70\x14\xb8\xa9\x0b\x5c\x5b\x2e\x2d\x70\x4f\xcb\x73\x95\x25\x25\xed\xaf\x4a\x83\x8b\x25\x2d\x6c\xff\xd1\xf2\x82\x9c\xf8\x64\xd5\x65\x7b\xff\xf8\x78\xb9\x8f\xde\x16\x9f\x86\xc1\x19\x12\x83\x34\x65\x0e\x69\x9f\xc4\x77\x80\x35\xfe\x5c\xe5\xff\xf8\x78\x49\x49\xde\x16\x15\xa1\xb7\xdc\x91\xf7\x8f\x8f\x97\xf8\x21\xa1\x1f\xcb\xe4\x80\xa0\x89\x5a\x55\x4a\xf3\x42\x1f\xa0\xab\x86\xda\x33\xfe\x55\xc5\xdc\x1e\xab\x79\xcb\x0e\x7b\x89\x91\x1e\xab\x5f\x51\x8a\x32\xe0\x2f\xdc\x3d\x31\xba\x8a\xc8\x77\x07\xf8\xcc\x50\x69\x4d\x38\x01\xdf\x1d\xb1\x6f\xbe\xf9\xe6\xdf\x20\xe3\x03\xe5\x57\x42\xbb\xa0\xbf\x05\x58\x87\x3a\xd7\x8c\x67\x66\xb7\x15\x22\xbf\x8d\x4f\x86\x42\x34\x1e\xc4\x1d\xc4\x31\xd9\xc0\x61\x80\x7c\xe6\xa9\xe3\x61\x4f\xef\x47\x81\x0d\x5b\x20\xa8\x1b\x36\x3d\x5c\x89\x79\x55\x0c\x71\x57\xd8\x87\x61\x72\x2a\xd6\xd8\x1f\x4d\x1b\x1d\xe4\x20\x53\x95\x14\xd6\xfe\x50\x0b\x8b\x4a\x58\x8b\x84\xe8\x85\xb9\xe7\x25\xc9\xcf\x97\x4b\x7e\xf3\x47\x4c\xf2\xd3\x0c\xee\xea\x60\x4b\xfb\xdd\xe4\xd3\x4c\xdb\xfb\x97\xbd\xb1\xd0\xfc\xd2\x8d\xd2\x56\x3b\xf9\xdd\x13\xdb\xd8\x6e\x60\xea\x9f\xa7\x10\xfe\x38\x01\xb8\x3e\xe9\x8f\x7d\x65\x90\xd7\x2c\x2c\xd0\xe3\x37\xb3\x0f\x5f\x78\xce\xbe\x54\x9e\x33\xb7\xce\xb7\x64\x15\x76\x4b\xec\x85\xa9\xec\x85\xa9\x6c\x6b\x4c\x65\x91\x14\xda\x5c\x78\x0d\x32\x09\x84\x05\x02\xc5\x0f\x7c\xb7\xbc\xe1\x44\x54\x46\x42\x01\x2e\xc1\x60\x85\x8a\x4e\x0c\xaf\x25\xae\x91\x84\xf6\x4f\x79\x02\xff\x69\xd3\xec\x0d\x5e\x25\x12\x69\xef\x57\x24\xe8\xbf\xb4\x17\xd8\x30\x97\x6c\x27\x4d\xff\xba\x99\x63\xb1\xf8\x46\xd9\x63\x2f\x89\xfd\xce\x7d\x1d\x81\x3e\xe9\x9c\xb2\xcf\x95\x52\x76\x5b\x89\x64\x6b\xc1\xf3\x8f\x65\x91\xc0\xf2\x86\x40\x04\xc0\x0f\xb1\x3d\x53\xf8\xe0\xa1\x96\x8d\xd8\xc7\xcc\x85\xe6\xcd\x20\xf6\x7f\xaa\x6a\xb2\xa6\xbb\x87\x36\x3c\x40\x96\xec\x47\xca\x39\xde\xc6\x01\x25\x01\x66\xc8\x4d\x46\x3f\x71\x37\x3d\xa1\xf8\x30\xd3\x67\x9f\xe3\xb6\x37\xfb\xeb\x93\x0a\xda\x74\x12\x3e\xc1\x43\x3a\xd5\xd4\xa1\x05\xb1\xfa\xcc\x20\x61\x62\x06\x51\xcf\x1d\xec\x16\xec\x9b\xb0\xd4\x08\x00\xeb\x40\xb1\x98\x44\x83\xbd\x62\x7b\x90\x52\x40\x1a\xd1\xc4\x59\xa9\xc6\xaa\xda\x9f\xb0\x43\x4c\x09\xb4\xfa\x03\xa5\x72\xf5\x53\x45\x1a\x3d\x0f\xae\xae\x15\x6b\x1e\xdb\x01\x12\xd5\x05\x45\xf6\x96\x7f\xf0\x2c\x61\x78\x01\xff\x85\x0b\xe8\x31\xcd\x1b\x85\xac\x29\xce\xb4\x17\xa7\x5c\xc0\x0f\x6f\x02\xe2\x0c\xa3\x88\x30\x31\xc2\xc8\x36\xbf\xd7\x2a\x4c\xe7\xd1\x6b\x46\x14\xf1\x1f\xb7\xa7\xec\xd4\xee\x62\x63\x6b\x00\x03\xbf\x1e\xbf\x7e\xf5\x6a\xad\xc0\x92\xc1\xe5\xa5\x6e\x52\xd2\xcc\xfc\x1c\xd9\x46\x66\x82\x17\xcd\x8c\x65\x33\x91\xdd\xd1\x26\x76\xa4\x6b\x36\x67\x14\xb2\x6c\x92\xc1\xa7\x51\x2c\x17\x68\xca\x15\x9e\x2b\x01\x2f\x0d\x05\x70\xe4\xd4\xe4\x9c\x85\xa4\xfc\xe4\x73\xab\xf9\x74\x2a\xb3\xd5\x86\x15\xf1\x39\x75\x08\x7d\x2c\xd1\xac\x05\x2e\x43\x55\x3a\x6b\xf0\x54\x15\x85\x7a\x00\x89\xe5\x60\xeb\x41\xd4\xfa\xc9\x67\x91\x05\x89\xb3\x08\x4e\x62\x69\xa3\xf8\x9d\xd8\x64\x3d\x98\xca\x0e\x33\x8b\x94\x20\x63\xf8\xd5\xac\x16\x7a\xa6\x8a\x84\x7e\xfc\x41\x96\x72\xde\xce\x21\xb4\x15\xd2\x94\x50\x4c\x6b\x5b\x8b\x20\x58\x0c\xe6\x03\x87\x3d\x88\x81\xb5\xb1\xaf\xe0\x7c\x33\x47\xac\xe9\xa1\x75\x1d\x74\x80\x5a\x13\x66\xbf\xe4\xc0\x6f\xaf\xd7\x0c\x49\x32\xc7\xf3\x77\x22\xb1\x9e\xbf\xbf\xba\x3a\xff\x4e\x34\x9d\xb1\x33\xc5\xc3\xc8\x41\x5a\x27\x9b\x0c\x22\x55\xec\xc7\x91\x22\x93\x8f\x45\xc1\x17\x83\xb0\xc4\xb3\x76\x7e\x23\x40\xc9\xe8\xc3\xef\x62\x8f\x85\xf5\xfa\x93\xf5\xb2\x88\x03\x6e\x29\xc1\x8a\xf9\xe2\x16\x02\x43\x63\x4b\xbf\x77\xf8\xe3\xb7\xd6\x0c\x0a\x5b\x8e\xc7\xfc\x5e\x3d\x30\x35\x6d\x44\xc9\xf6\x3c\xf6\x70\x3f\x18\x7b\xbf\x88\xa2\x70\x95\xd7\x1e\xbd\xf7\xf8\xd5\x41\x3e\xa7\x0d\x97\x38\xbd\xb5\x7a\x8d\x07\x20\x8f\x68\x9d\xe3\xda\x8f\x17\xf9\x6b\x9f\x1f\xff\x35\xd4\x6b\x27\xf6\x09\xdd\x6b\xb2\xea\x52\x65\x77\xa9\xe5\x7f\x75\x74\x8e\x8f\x82\x0d\xc0\x4b\x2b\x3b\x64\x79\xaf\x8a\x7b\x0c\x5a\xbb\x3a\x3a\x07\x1a\x8d\x09\xfc\x6b\xa6\xd4\x9d\xf6\xa8\x1a\xab\x64\x6d\xb0\x3f\xdc\x97\xfd\x0e\x69\xe4\x5c\xa8\xb6\xd9\x78\x73\x04\x00\x20\x9c\x00\x39\x17\x9a\xa9\xb6\xe9\x0c\x2d\xbd\x96\x1c\xc9\xdf\x7d\x87\x0c\x9f\x6e\xc8\x4d\xb3\x5c\x77\xbf\x08\xd5\xf4\xca\xbe\x63\xf5\x74\xd4\xd2\x57\x28\x2c\xd6\x2a\xd3\x53\x52\x08\x57\xfc\x41\xe5\x89\x0f\x9b\x5f\x91\xac\x97\x82\x1e\x54\x70\xdb\x04\x2e\x60\x1f\x3e\x33\x09\xf4\x74\x1c\x7a\x1b\x56\xf0\x0a\xce\xbc\x57\x7f\xfb\xdb\xdf\x26\xec\x58\xd6\xa0\x2b\xd8\x10\x4c\xeb\xd5\xe5\xcd\xcc\xa5\xed\xe2\xd3\x29\x76\xd0\xb2\x7c\x90\x06\x4c\x4e\x1d\xe4\x00\x04\x62\x1f\xe0\xc2\x2a\xa4\x0d\xb0\x44\xbc\x89\xe5\x6d\x42\xfe\x65\xa8\xcb\xdd\x2f\xd8\x1c\x9c\xe8\x85\xbc\x13\x8c\x58\x9d\x3d\xee\x01\xc1\x20\x16\x40\x8b\x95\xcd\xdd\x08\x68\xd1\xac\x2b\x70\x68\xac\x7b\xc3\x59\x44\x78\x5d\x3b\x93\x5b\xc2\x40\xe2\x12\x3a\x77\x75\x0e\x93\x19\xfe\xa3\x55\x37\x8b\x46\x6c\xb0\xe6\xe8\x0d\xba\x8f\xc1\xc0\x16\xdc\x22\x53\xcd\xce\x00\x3f\x9d\x47\xc0\xda\xf2\x16\x98\x9c\x2b\x0c\x07\x40\x49\x12\x90\x36\xcf\x79\xc9\x6f\xc1\x81\x6a\xd4\x2d\x4b\x41\x5a\x0b\x88\x45\x37\x53\xbe\x62\x59\xd7\xe2\x56\xea\xa6\x36\x03\x46\xf7\x96\xde\x02\xbf\x4d\xd3\x39\x23\xdd\x35\x30\x18\x56\x76\x42\x38\x48\x72\xf3\xa3\x3d\x83\x30\xc6\x16\xab\xd8\xe8\xea\xb7\xf4\x6a\x17\x0f\x8f\xcd\x10\x47\x80\x6d\x64\xc3\xb6\x39\xed\x43\x4a\xeb\x58\xe0\x2d\x21\x16\x72\xa3\x92\x68\x16\x3e\x89\x6f\xfe\x14\x18\xa4\x6a\x9f\x05\xce\x36\xd1\xbd\xe0\x39\xc3\x5c\xc8\x1d\x0f\x8c\xa6\x1c\x69\x87\xde\xc0\xfc\x56\x5c\xd6\x6c\xcf\x67\x94\xa3\xa4\x39\x18\x44\x50\xf1\xda\xdf\x2c\x32\x35\x9f\x73\xbd\x6f\x73\x88\x9a\x0b\x19\xa7\x9c\x87\xe6\x2d\x5e\x30\xdb\x17\x38\x2e\x7b\x88\xf3\x30\x42\xa4\xe4\xa9\x68\xb4\x2b\xf8\xdd\xd2\x9e\x37\x2e\x49\x71\x67\x0e\x48\x0e\xbd\xe5\xd9\x9d\x28\x73\xf6\x49\xdb\x16\xe6\x8b\x92\xcf\x09\x8f\x51\xd5\xea\x5e\x92\x39\xbf\xb3\xc4\x47\xfe\xb8\xd1\xa2\x71\xdc\xeb\x45\x7b\x2b\xcb\x54\x73\xdb\x24\xaf\xf2\x27\x8d\x17\x93\x65\x6b\x92\x78\x94\x6a\x79\x9f\x09\x4b\x9d\x02\xb5\xa5\x12\xc6\xe0\x9e\x18\xb0\x05\x44\x56\x6f\xd8\xd4\x01\x59\x13\x84\x79\xe2\xfd\xc7\x4a\xfc\xce\x90\xdd\x2c\x30\x98\x7d\x6d\x53\xc1\xc5\xdb\xe3\x73\x51\x6b\xa9\x1b\x51\x36\x1b\x48\x9f\x0b\x9e\x2b\xcd\xde\x16\x2a\xbb\x63\xc7\x02\x40\x1b\xeb\x0a\xa2\x8b\xb7\xc7\x4e\x08\x2d\x95\x3e\x10\x21\xb6\xb1\xf8\x99\xab\x52\x36\xaa\x36\x0b\x12\xf0\x03\x1b\x98\xc0\x3a\x96\x2c\xba\x08\x5a\x89\x60\x3a\xb6\x50\x2d\x7b\xe0\x18\x70\x08\xfd\x9d\xb0\x2b\x59\xbd\x61\x27\x01\xa3\x79\xca\x6e\x26\xf5\x06\x76\x31\x20\xb4\xd2\x6f\xfa\xd6\x31\xf3\x8f\xb2\x79\xac\x9d\xec\x89\x21\x25\x5f\xd5\x37\x49\x18\x0b\x0e\x72\x12\xd9\x53\xc3\x22\x41\x0a\x71\xe4\x58\x48\x34\xa1\x16\x85\xe0\x5a\x68\x6b\xc4\xfd\xfe\xe4\xf0\xf8\x80\x58\xbd\xb4\xfd\xf8\x41\x7d\x93\x1f\x5c\x9c\x1c\x1e\x7f\x38\x99\xcc\xf3\xaf\x66\xea\x61\xdc\xa8\x71\xab\xc5\x58\x36\x49\x0c\x80\x58\xc0\x3f\xfb\x9e\x25\x7c\x60\xc3\xaf\x40\xc7\x69\x14\xe4\x56\x86\xdf\x8d\x44\xbb\x78\x7b\xfc\x49\x87\x41\xfa\x52\xb3\x03\xd1\x64\x07\x99\xa8\x66\x07\x54\xf5\x6f\xd7\x17\xb7\xa0\x13\x06\xab\x4c\x15\x05\xaa\x16\x66\xb5\x1e\x89\x6a\xc6\x6c\xf1\xe7\x6e\xe0\x1a\x19\xe2\x2a\xa5\x8a\x65\x2b\xc3\x3c\xa7\x85\x11\x0c\x75\x7d\x93\x5e\xab\xcf\x32\xb8\x8f\xd4\x16\x56\x1a\x82\x13\x6a\xc1\x33\xf7\x29\x0c\x52\x05\xca\xb9\x0b\xa3\xa3\x26\x02\xe2\xf1\x11\xa8\x51\x41\x40\x35\x6f\x9b\x99\x28\x1b\xeb\x8c\xc1\x2a\xe2\xed\x70\x3a\xc5\xd3\x16\x68\xb1\x28\x65\x9e\x66\x6e\x3f\x84\xfa\x99\x2c\x9e\xad\xbb\x6b\xd3\x87\xdb\x9e\x7a\x7e\xbc\xf4\x01\xef\xd7\x23\xa4\x3f\xe8\xad\x47\x9e\xcf\x65\x3a\xe1\xe5\x33\xac\xc8\xe1\x63\xfa\xe5\x70\x7e\x39\x9c\x5f\x0e\xe7\x97\xc3\xf9\xe5\x70\x7e\x39\x9c\xff\xf0\x87\xf3\x10\x83\xed\x1f\xf8\x84\x16\x98\x22\x57\xaa\xd2\x33\x0d\x26\xcf\xe9\x7e\xb1\x2e\xea\x22\xce\x26\x00\x87\x73\xed\xdf\x0b\x98\x07\x5f\xc0\xe4\x2f\x60\xf2\x3f\x20\x3e\xf1\x14\xa5\xda\x7b\x24\x37\x85\xf5\x9d\xde\x17\xc0\x0d\xed\x98\xdb\x16\xf0\x37\xb9\x36\x9c\x46\xe5\x18\x8a\xc8\x48\x79\xae\xf2\x3d\xbd\xef\xb5\xbd\xf4\xce\x21\x55\x56\x03\x33\xc4\x9f\x11\x57\x17\x6d\x69\xbd\x09\xd0\x6e\x40\xd4\x7c\x31\xd8\xbb\xe4\x52\x41\x34\x1e\x44\x32\x25\xb9\x43\x88\xff\x83\x34\xcb\x38\x9c\x5f\xdd\x40\x3e\xfc\x3c\x60\x0d\x59\x36\x0e\xe0\xf0\x02\xec\x27\x85\x25\x2b\x24\x85\x80\x00\xa9\x9b\x05\xc6\x18\x3e\xc8\x32\x07\x07\x3b\xf8\x46\x27\xec\x9c\x28\x62\x7b\xe1\x89\x17\xd6\xab\xf0\xa5\x0f\xb0\x27\x06\x78\x1c\x46\x37\x7d\x40\xae\x89\xd4\x4d\xbe\xec\xe9\x45\xd6\x3b\x66\x5d\xf9\x0e\x8e\x37\xe0\x7f\x19\x10\x16\x1c\x60\x4a\xa2\x86\xf8\x6a\x90\xc5\xab\x2e\xba\x44\x67\x42\x63\xdf\xbb\xe5\x9a\x3b\xf8\x55\xcd\x4b\x8d\x79\x87\x93\x91\x77\x40\x7a\xc1\x75\x83\x01\x77\x4d\x18\x3d\xce\x1a\xf7\xae\xc5\x18\xab\xd2\xb1\xde\x40\x78\x2a\xb8\x4a\xb7\x11\x2c\xb7\x55\x22\x08\x60\xa4\x72\x6d\x1f\x82\x6e\x26\xc3\x22\xaf\x7c\xa0\xbc\x45\x7f\xb8\xf1\x00\xa6\x6c\x33\x52\xcb\xab\x5e\x21\x1c\x7c\xf8\x36\xd6\x3a\xb2\x70\xb0\x2b\xe0\x01\x79\x87\x19\x45\x29\x9e\x38\x4d\x89\x96\x34\x5d\x5c\x91\xbd\x62\x60\x71\x2d\x63\xc1\xd8\x44\xd9\x4c\xc7\xdf\x0c\x16\x45\xfd\x25\xbe\xa3\xa6\x5b\xf8\x12\x9a\xf3\x45\x86\xe6\x0c\x4d\xd6\xe3\x81\x35\x41\x2d\x07\x41\xed\x59\x28\xae\x9f\x0a\x89\x48\x1f\x03\x2f\xa1\x40\x2f\xa1\x40\xdb\x09\x05\x1a\x16\x8d\x4f\x51\x35\xd2\xe1\x41\x83\x45\xad\x9e\xd9\xd3\xbb\x1f\x7f\x91\x9f\xcb\xd2\xa8\x8a\xc3\x40\x56\x0b\xb1\x2b\x7b\x98\xbd\xa9\x4b\x31\xc1\x59\x29\x1e\x0a\x8f\x1e\x08\x42\x97\x6e\x2c\xed\xd5\x83\x6c\x66\xe6\xa8\xa6\x2c\x4f\x11\x61\x3c\xcb\x6a\xae\x67\xc0\x4e\x62\x2a\x95\x4d\x1f\x7a\xe9\x98\x15\x62\x2b\xdb\x2b\xb6\x17\x12\x1a\xa5\x5e\x30\x17\x38\xad\x80\xe8\x81\x30\xdf\xd0\xa0\xfd\xf5\x00\x5e\x34\xae\x89\x81\xa1\x59\x72\xca\xbf\x1f\x20\x7b\x03\xb2\xef\x7a\x86\x02\x8e\x5a\x1e\x41\xd2\xa5\x36\x62\xa6\x95\x7a\xe6\xf0\x73\x36\x8b\x20\x12\x88\x9a\x83\x23\xb2\xe6\x77\x01\xa6\xcf\x26\x91\xbf\x7a\x98\xf1\x66\x2c\xf5\x98\x8f\x57\x48\xec\xa5\xe8\xb8\xc1\x7c\x27\x71\xae\x13\x70\xf3\xb0\x5f\x5b\x51\x2f\x90\x4b\xc7\x87\x4a\xd3\x32\xc2\xfc\x25\x68\x85\xa5\x61\xcf\xd0\x15\x73\x3a\x65\x61\x65\x74\xad\xc7\x89\x8e\xee\xf4\x78\x40\x83\x69\x80\x04\xb7\xe5\xe9\x3a\x8f\x82\xae\xc1\x7c\xc0\xee\xc4\x02\x29\xbb\x89\x58\x1b\x1a\x13\xa4\x52\x71\x19\xa5\xdc\x4a\xc5\x91\xf1\x48\xc6\xf4\x8e\x1c\x31\x39\xf5\x0c\xef\xbe\x75\xd4\x32\x55\x76\x5a\xb3\xe1\x14\x9b\xd1\xbb\x97\xe2\xe1\x80\xb2\xf0\x8d\xcd\xb6\x1b\x53\x00\xcc\x01\x7e\xe4\xe0\x2b\xf8\xff\xd8\xce\x8e\x7e\x52\x3e\x96\x35\x82\xe0\x69\x83\xd0\xb9\x09\x23\x19\xdf\x94\x1c\x8b\x57\x37\x30\x5e\x4e\x99\x2c\x75\x3b\x9d\xca\x0c\xce\x4c\xbb\xa3\xc8\x62\xd3\x00\x76\x94\xb6\x57\x2f\x59\x38\xac\x24\xce\x6c\x33\x2e\xc4\xf4\x59\x77\x4c\xa5\xf2\x71\x10\x8f\xf9\xf8\x30\xfb\x4d\xce\x8f\x81\x9b\xc7\x92\xc2\x3d\xa3\xb0\xa5\x02\x0d\xa8\x4d\xd7\x3f\x4c\x62\x80\x26\x89\xca\xbe\xc6\x6e\x65\xf1\xc5\xa0\x34\xbd\x8a\x24\xa8\x17\xde\x6e\xc6\xf7\xf0\x18\x01\x96\x1d\xcb\x21\xd4\x39\xbc\xf6\x7d\xa6\xc9\x95\x3d\x58\x26\xb6\x96\x31\xa7\x5e\xc4\xa3\x47\x1a\xbf\x6f\x2f\x1a\x7d\x28\xb3\xe0\x92\xc1\xdc\xd5\xd1\xc8\x8b\x6d\x70\x09\xaf\xb0\x66\x6c\x9b\x2c\x15\xc8\xb3\x41\x5a\x8a\x7c\xdd\x89\xf5\x82\x1d\x62\x9a\x49\xea\x45\x41\x67\x85\x33\xdf\x3a\xd1\x60\x05\xc9\x72\x0b\xda\x7a\x93\x6b\xad\x72\xdf\x61\xa2\xe5\xe4\x2d\xf2\x63\xaf\x0c\xab\xc5\xb4\x80\x20\xc2\xc6\x27\x69\x0e\x8c\x9e\x03\x96\xbf\x47\xb6\x14\xe9\xa9\x61\xc1\xaf\x3b\xb0\xb8\x3b\xdc\x6e\xd9\xce\x46\x58\x5f\xf9\xe9\xf6\x1f\xbb\x1f\x36\xcf\xaa\x42\x5f\xb6\xce\x32\x28\x7c\xf1\x02\xf8\x4e\x8a\x22\x1f\xce\xe2\x96\x2c\x16\x0a\x5c\xaf\xf1\x7a\x92\xcb\xbd\xac\x6a\x47\x6c\x2e\xe6\xaa\x5e\xec\xdb\x00\x05\x59\x5b\x5a\x60\x6a\xe1\x2a\xd1\x4b\x91\x21\x3d\xd1\xeb\xbe\x98\x66\x3a\x75\x04\xad\xe0\xfd\x7c\x63\x69\xce\xf2\x10\x82\x3d\xf2\x99\x5e\x21\x01\x63\x79\xcf\xee\x79\x9d\xbc\x30\xe6\xf2\x5e\xea\xa4\xbe\x17\x45\xe5\x45\x5d\xb3\x5b\x48\x7c\xae\x94\x86\x3d\x43\x23\x33\xb2\x1a\x12\xe5\x1a\x7f\x7d\xbd\xf3\x88\x5b\xe0\xc4\xc5\xb6\xff\xa3\xe5\x65\x43\x69\xfd\xdd\x80\x25\xe6\x10\x47\xe0\x4d\x70\xeb\x57\x14\xbc\xbb\x81\x21\x0d\x5f\xfd\x47\xab\x52\xb7\xe7\xe8\x31\xd3\x90\x30\xf6\xf6\xb6\x16\xb7\x46\xc8\xfd\x0a\x3f\xd6\xc2\x7c\x02\x23\x46\x98\x28\x01\x85\x90\x03\x33\xb1\xcb\xd0\xf0\xe2\xa4\x7d\x71\xd2\xfe\x81\x2d\x47\x7f\x62\xbf\xa8\x35\x00\xc0\x56\xfe\x9d\x69\xbc\x22\x59\xb3\xa6\x3b\x33\xec\x0b\x25\x33\x70\x22\x08\xc5\x13\xa4\x38\x6e\xbc\x0e\xdb\x6a\x7e\xfb\x7b\x13\x96\xc5\x3d\x7d\xba\x5f\x31\x14\xe1\x6b\x1b\xf9\x82\x97\x86\x1c\x27\x9d\x22\x31\x75\x59\x7c\x34\xc0\x15\xe0\xc5\x4d\xf2\x25\xb9\x49\x4e\xcd\xcf\xcb\xe6\x8c\x8c\x2d\x1b\x6b\xba\x98\x52\x31\x60\x78\x35\xb5\x6d\x25\x77\x73\xbc\x94\x5f\x7c\x22\x2f\x3e\x91\x6d\xf9\x44\xba\xd2\xee\x31\x62\x72\xc8\x07\xd2\x29\x92\x3c\x60\x67\x38\xdc\x73\x0a\x5b\xa7\x43\x0a\xae\x29\xf0\xe2\x6a\xff\x87\xa9\xa1\xff\x75\xa8\xd7\x3a\x5b\x44\x13\x1a\xf5\xc3\x4f\xba\x7c\xf4\x98\x38\xd4\xdd\x34\xb6\xbe\xf5\x57\xda\x65\xb7\x71\x2b\x82\x74\x9d\xaa\x5a\x92\xa5\x3c\x7a\x1c\x10\x29\xc5\xde\xfe\xa9\x2c\x1a\xb3\xf1\x21\xf2\x1e\x5e\xe9\x9b\xcf\x61\xd4\xac\x41\xb8\xe6\xd9\x1d\x1a\xce\x39\xa9\x17\x37\x6d\x63\xee\x83\xb5\xd0\xe6\x46\x88\x59\xfd\x2f\xc3\x8f\x7f\x84\x10\x0a\xc7\x93\x7e\x63\xb3\x61\x40\x1c\xaf\x4b\x3b\x60\x4f\x8d\x77\xaa\xc6\x04\x10\xee\x3e\x07\xad\x18\x61\x2e\x40\x6a\xe2\xe1\xd9\x31\x8b\x3b\xb8\x27\xa7\x71\xb2\x62\xf3\xc7\xfe\xc8\x25\x81\x43\x8a\xa9\x8d\xd2\x6c\x46\x9d\xd8\xb1\x23\xbe\x06\xcc\xdf\x0e\xea\x66\x03\x39\x94\x9d\x0f\x47\x39\xc1\xc1\xb5\xcc\x0c\xd9\xbb\xfa\xae\xb3\xb9\x07\x0d\xd4\xbd\x42\xd1\x06\x77\xea\x66\xb8\xdd\x80\x4e\xc9\x9a\xd6\x5a\xbd\x46\x0e\xac\xf4\xee\xfe\xbe\xbf\xbb\x93\xdf\xfb\xd3\x6d\xef\x56\x8b\xc4\x70\x40\x00\xbc\x8c\xbd\x01\x6e\x98\x1b\xd5\xf0\x02\xd5\x7b\x6f\x7e\xa5\x7d\x64\xf3\x32\x5b\x83\x44\x6a\x3e\x9e\xb5\x47\x2b\x56\xe0\x45\xc0\xd9\x3f\xbc\x04\xc3\x52\x1d\xbf\x54\xa6\xe6\x55\xdb\x88\x74\x16\x80\xd5\xab\x0f\x97\x51\x0a\x69\x03\xcb\x2b\xfe\xd6\x9c\x7f\x06\x3f\x3b\xc7\x90\x3a\x35\xed\x7d\x1d\x73\x2b\x3c\x3c\x22\xaa\x2b\x02\xfe\x1f\x20\x44\x79\x4c\xd5\x8f\x5d\xf5\x41\x6e\xda\xdf\x7e\x69\x5a\x8d\x2f\x6d\x90\x03\x5d\xb0\x33\x5e\x84\x4b\x58\x36\x5e\xf6\x96\x04\x62\xd0\xd5\x63\xd4\xd5\xb9\x6c\x6c\x86\xfb\x80\x28\x0e\xfc\xc6\xa1\xd1\x91\x66\x0a\x72\xf5\x61\x92\x21\xeb\xa0\x2f\x16\xa1\x4c\x05\x54\xe4\x83\xd4\x36\x87\x07\xe4\xf4\x99\xdb\xfb\xd2\xd8\xf2\xf4\xc3\x79\xf4\xe7\x9b\xbd\x81\x6d\x48\x61\x9c\x98\xa0\x35\x65\x6c\x88\x9e\x83\x4b\x37\xf0\xff\xa0\x5f\x9d\x57\x55\x21\xbd\xff\xde\xf5\x71\xf5\xde\x33\xfa\x73\x62\xeb\x41\x82\x25\xa9\x5d\x8c\x29\x66\x5c\x42\x00\x02\xb2\x08\xc1\x17\x75\xef\x8b\x69\x50\xa9\x2a\x52\x26\x64\x55\x10\xe1\x86\x8b\x64\x35\xbf\x3c\xf6\x23\x4b\xd0\x9f\xd1\x47\x20\xe8\xf4\xb1\x1f\x59\x42\x52\x12\x7d\x04\x22\xa5\x1e\xf7\x91\xa1\x65\x92\xf1\x42\x9c\x7e\x5c\x97\x2e\x64\x69\xf1\x98\xeb\xa6\x72\x65\x18\xbd\xd5\x63\x3c\x4d\x1a\x54\x6e\x79\x23\x1e\x40\xf7\x41\x34\xfd\x4e\x18\x5d\xf7\xe8\xc8\x62\x1f\x3d\xfc\x4c\x24\xb7\x61\xa4\x70\x10\xc5\x46\x4f\x53\x93\x6e\x3b\x9a\xf4\x2d\xc2\xa7\x3b\x99\x1a\xed\x30\x1e\x9e\x9f\xb2\xef\xf0\xe5\x74\x0e\xb4\x5a\x35\xa8\xbb\x1e\x0f\x64\xb5\xbe\xea\x26\x5e\xa7\x9a\xcf\xdd\x9b\x0c\x5f\x0d\x51\xd9\x98\x2f\x3d\x67\x14\xa5\xfc\xe5\x53\xf4\xae\x15\x94\x19\x30\xf1\xd0\x2e\x0a\x02\x31\xed\xb8\xc0\xbe\x03\x05\x18\xb8\xca\xb4\x00\x40\xfa\xbd\x08\x13\xd5\xfa\x9c\xd2\x12\x29\xfd\x6c\xe4\xe6\x88\xbd\x57\xb7\xb2\xb4\x0b\x09\xee\x49\xa6\x77\x5c\x16\x1b\x5d\x5e\xfa\xd4\x07\x5a\x17\x27\x25\x64\x40\x4f\x6c\x80\x82\xdf\xe2\xad\xdc\x14\x38\xa0\x54\xe9\xec\xf2\xf2\x7d\x98\xda\xca\x5e\xda\x68\x39\x39\xa7\x1f\x4e\x51\x7a\x54\x71\xfa\xd3\x3c\x76\xa7\x2e\xe9\xb6\x25\x7a\xc5\x58\x0c\x78\x85\x0e\x7c\xcb\xa6\xe7\x20\x8a\x57\x33\x99\xdd\x9d\x07\x94\x4f\xaa\x36\xbf\x95\xc1\x4f\xd1\x9e\xea\x3e\x4b\x47\x05\xc0\x27\xcf\x07\xe3\xa1\xed\xd4\x5e\x52\xdb\x4c\xc9\x24\x2d\xb0\xdf\x4d\x94\x42\x3d\xfd\x3d\x94\x55\x2b\x77\x9a\x1d\x0a\x92\x3b\x80\xa4\x73\x3b\x4b\x96\xb6\x59\xc9\x6f\xe0\xc0\xa5\x5d\xc9\xe1\x77\xdc\x10\x77\x79\xa5\xe8\xca\x60\xbb\x6e\x65\x1f\x29\x57\xfd\xce\x4b\x1d\x53\x1f\x6e\x7c\xac\xac\x75\x98\xbc\x1c\x21\x6b\x1d\x21\xc9\x25\xf1\x72\x86\xbc\x9c\x21\x5b\x88\xd0\x7f\x39\x48\x5e\x0e\x92\x2f\xf5\x20\x59\x6a\x13\x3f\x44\xa3\xb1\xa7\xf7\xef\xe0\x6b\x0f\xcf\x8e\xdd\x80\x59\xc0\xb5\x2f\x13\x04\xee\x9a\x5a\x72\x77\x9f\x0f\xeb\xdb\xc4\xe6\x04\x36\xdd\x13\x34\x9d\xa7\xaf\xdd\x87\xce\x6f\xd9\x6b\x78\x60\x08\xbb\x59\xd0\xe3\x8e\xd1\x6f\xa9\x85\x78\x23\x2b\x78\x6e\x0d\x70\x76\x6c\x03\x43\xdc\x12\xa3\xc2\xca\x57\x87\x66\x68\xc5\xd8\x92\xe3\xd3\x25\x69\x30\x2b\x89\x6e\xb3\x9a\x1c\x09\x23\x53\x00\x06\xc5\x2c\x4f\x4a\x45\x6b\x25\xa2\x7d\xa7\x16\xe0\xde\xf6\x73\x8a\x6b\xd9\x87\x12\xac\x72\xe7\xc3\x4b\xb0\x33\x46\x3b\xb6\xea\xbe\xca\xe0\x9e\x2c\xa7\xec\x82\xca\x76\x35\xb6\xca\x4c\xc7\x4c\x56\x98\x62\x98\x0c\xdf\xd6\x45\xf2\x23\x2f\x64\xee\xba\x82\xd6\x98\xd3\x72\xc4\xce\x54\x63\xfe\x77\xf2\x59\xea\x46\x8f\xd8\xb1\x12\xfa\x4c\x35\xf0\x67\x5a\x78\xb8\xd6\xaf\x96\x1f\x30\x3a\x8e\x50\xc1\x0d\xbd\x37\x29\xa4\x45\x07\xb4\x38\x31\xcd\x25\x66\xac\xc6\x5c\xc6\xde\x7f\xad\xe9\x48\x13\x7e\xa2\xa4\x66\xa7\xa5\x11\xcd\xd4\x3b\xc0\x3e\x60\x9c\x07\x56\x61\x3d\x3c\xa5\x2a\xc7\x10\xac\x91\xac\x03\x07\xc5\xd4\x13\x0e\xcb\x92\xea\xa8\x2a\x08\x57\xc0\x27\x84\xd0\xe5\x99\xc8\x59\xde\x22\xbd\x2e\x23\xb0\xb5\xcc\x18\x60\xad\x19\x40\xb0\xb7\xe0\x99\x41\x75\x61\x48\x8d\x60\x33\x55\xe4\xda\xea\x0d\x40\x44\x00\x02\xd8\xc6\xa7\x9b\x8f\x60\x22\x65\xf4\x09\xdc\x2c\x1a\xe1\x94\x3a\xea\x2e\x49\xe5\x63\xf3\x32\xa5\x58\xa7\xae\x17\xc0\x6c\x3b\xe3\x25\xfb\xc0\x3f\xe3\x07\x2f\xe5\x3f\x05\xd6\xf2\xc2\x37\xf3\xdc\x60\x96\x34\x62\x01\xe6\xc9\x09\xb9\x40\x6b\x44\xe0\xc2\x09\xcf\x66\xc0\x92\x06\x93\x08\xb1\x75\x78\x70\xf0\xa2\x9a\xf1\xb2\x9d\x8b\x5a\x66\x2c\x9b\xf1\x9a\x67\x8d\xa8\xf5\x88\xed\x8e\x77\x47\x6c\xf7\xe7\x5d\xb3\x27\x76\x27\xbb\xb8\x5c\xb4\xa8\x25\x2f\xa0\xe7\x90\xff\xc1\x9d\x86\x7e\xa1\x81\xec\xbd\xe1\x5a\xfc\xf5\x5b\x26\xca\x4c\xe5\xa0\xa0\xd7\x10\x11\xd8\x83\x9f\xf0\xfa\x46\x36\x35\xaf\x17\x6c\x8f\x3c\xbd\x0b\xd8\xa8\xf8\xc2\x3e\xd6\x88\xd0\x15\xa3\x85\x1b\x7d\x0b\x1d\x07\xa0\x35\xd8\x91\x6e\x94\x2a\xf4\x44\x8a\x66\x3a\x51\xf5\xed\xc1\xac\x99\x17\x07\xf5\x34\xfb\xf6\xaf\xdf\xfe\xfd\x2b\x8d\x4a\xd2\xf8\xdb\x47\x47\x46\x05\xc8\x72\xb3\xc2\x5f\x40\x37\x2f\x70\xd2\x14\x9c\x14\x3a\x78\x9c\xec\x98\x7f\x86\x6e\x3f\xcb\xc6\xbe\xc0\x54\x4c\xe5\xf8\x46\x96\x1c\xc8\xda\x83\x6d\x54\xda\x45\x04\x49\x6e\xd8\x29\x68\x35\x8e\xbf\x0d\x48\xdc\xe1\xa6\x8a\x7c\xf3\xd8\x41\x09\xc1\x72\x73\xd1\xcc\x54\x3e\x81\x4c\xfc\xdd\xd8\x47\xa3\x0b\xc0\x49\x64\x36\x10\x89\xbd\xdc\x8b\x78\x73\xf1\x32\x95\x8e\x20\xe2\xce\xfc\x13\x8e\xb1\x72\xc1\xc4\x67\x0c\x71\xf5\x07\x31\x32\xc5\x89\x7b\xe1\xe2\x1b\x20\xad\xa1\xd1\xed\xa1\xd9\x76\x9d\x1e\x9e\x9f\x6e\xe2\x4d\x4e\x84\x25\x26\x0d\x2a\xe0\xea\x86\xab\x7b\x26\x0b\x09\xfc\x2c\x55\xad\x6e\x6b\x3e\x37\xb7\xdf\x8c\xcd\x78\x99\x43\x0a\x31\x0c\x73\x76\xa2\x30\x71\x59\x78\x2c\x68\x8a\x0e\xe1\x35\x91\x52\x58\xfa\xa4\xbc\x1f\xb4\x60\xc5\x05\x48\x8b\x02\x8f\x0d\xb6\xbf\x51\xac\x22\x92\x20\x92\x00\xf7\xb2\x56\x25\xa8\xbc\xf7\xbc\x96\xe6\x2a\x8d\xf9\x39\x26\xd7\xe5\x75\x79\x45\x4e\x1c\xd0\x1f\x49\x52\x37\xbc\xbe\x15\x0d\x55\xb8\xab\xc3\xe3\x1d\x6c\x00\x4e\x00\x41\xe9\x3b\xb1\x18\xa3\x0c\xab\xb8\xac\x81\xe4\x3f\xf9\xcd\xd5\x87\x7e\x99\x54\x23\xcf\x02\x15\x92\xcc\x1e\xcd\x96\xe3\x64\x01\xd1\x70\xf0\x15\xfc\x2f\x25\x8e\x6c\x3c\xcc\x50\x9c\xcb\x22\x32\x19\xd0\x44\x58\x4d\x88\x9c\xc1\x09\x83\xc4\x52\xb5\xed\x07\xb1\x18\xbe\x84\xf6\x8a\x04\xeb\xc0\x1c\xe0\xa0\xc8\x61\xa1\x55\xd7\x8f\x3b\xb1\xe8\xdf\x36\x20\x3c\x30\xa5\xcf\x53\xe5\xc1\x79\xee\x82\x65\x60\x33\x4f\x58\x9c\x2a\x46\xe6\xb6\xdc\x9d\x48\x9b\xfd\xfe\x5c\x93\x0e\x6c\x06\xbb\xda\x6b\x51\x8f\x5f\x00\x69\x38\xb9\x7f\x16\x63\x92\xd7\x9b\xec\x17\xe8\xf8\xef\x0c\x1d\xa7\xcd\xf0\x58\xcc\x78\x0c\x0d\xd1\xf6\x68\x79\xb2\x7d\x06\x2b\x7a\x51\x5a\x5f\x90\xe2\xdb\x41\x8a\x07\x12\x6c\x23\xc5\x27\x48\x71\xd5\x17\x44\x39\xaf\xd0\xc6\x85\x7b\x08\x54\xd3\x7e\xce\xb4\x47\x6b\x35\x37\x82\x79\x23\xad\x2c\x53\xe9\xd8\xb8\xa6\xd4\x68\x88\x50\x26\xed\x27\x65\x06\xe1\x3e\xef\x31\xe2\x25\x27\xec\x4c\x35\xce\xfa\x85\xee\x16\x4c\xd2\x9b\xf1\xc2\x5a\xe8\xa0\x5f\x91\xd9\xda\xd1\xe8\x20\x0a\x1e\xfd\x08\x73\x95\xaf\x81\x85\x1d\x12\x4a\x11\x61\xfc\x08\x01\xaf\xb1\x0e\x97\xe8\x4f\x7c\x14\x67\x22\xb7\x07\x9e\x1f\x3a\x3b\x56\xee\xca\xe0\x07\x0d\xbd\x96\xec\x61\xa6\x34\x99\x04\x09\x7e\x6a\x8e\x49\x23\xcb\x69\xae\xec\xcf\x84\x9b\x3b\x9d\x76\x71\xcc\x66\xff\x88\x1c\x07\x7d\xc9\x97\x3d\x88\xbb\xe2\xcd\x4c\x8f\x88\x58\xa7\xf7\x36\x09\x0f\x9a\x76\xf8\x20\xea\x4f\x32\xcc\x85\x85\x9c\x47\xce\x3d\x86\x9a\xaf\xf5\x47\xc0\x28\x8c\xc2\xfe\x6a\xd1\xb4\x15\xd6\x2f\xea\x5a\xd5\xe6\xc3\x42\x5b\x2e\xa2\x39\xaf\xef\x44\xee\x22\xac\x27\xec\xdc\xb4\xd0\xe9\x0a\x68\xb7\xbd\x17\xee\x84\x33\xdf\x24\x8b\x0d\x7c\x64\x77\x32\xd9\x45\x46\x7b\xa3\xf4\x35\xbc\xa6\xfc\x78\xe6\xf7\x6d\x98\xea\x7f\x10\x8b\x2b\x65\xda\x04\xbb\xff\x4f\xa8\x9c\x6d\x45\x37\xbb\x18\xce\xfe\xdc\x29\x10\xc3\x0b\xa8\x21\xee\x29\xdc\x90\x67\x70\x63\x52\xed\xed\x2c\x74\xcc\x62\x6a\xe2\xa6\x96\xe2\x5e\x78\x91\x07\xd7\xec\xf5\x23\xc2\x97\xcc\x9f\xd4\x94\x2d\xdc\xe6\x6a\xe4\xbe\x5e\xfc\xb6\xed\x81\x93\x4c\x89\xac\xf1\xb1\x1e\x8f\x8d\x4a\x7e\x0f\xeb\x8d\xc9\x84\x79\xe6\x3e\xee\x33\x81\xd2\xb7\x40\x4a\xd8\x59\xc2\x86\x6e\xe0\xc2\x83\x3a\x96\x43\x41\xdc\x71\x72\x19\x1d\x27\x5b\x3f\x44\xb6\x71\x74\x5c\x86\x27\xc3\xd6\x12\xaa\x6c\x90\x2c\xf4\x23\x6d\xb7\x37\x41\xd2\xcc\xad\xa5\x0d\x0d\xe9\xdd\xfe\xfa\xed\xb7\xff\x3d\x12\x89\xbe\x9c\xce\x2f\xa7\xf3\x53\x4f\xe7\xa7\x5a\x28\xf4\x1a\xc7\xa0\xc5\x23\xa5\x5d\xbc\xa1\x26\xe0\xcf\xa8\x06\x79\x9c\x76\x75\x7c\xa2\xb4\x03\x37\xb2\x4d\xf2\x13\x75\xaf\xbc\xab\x0f\x82\xb6\x96\xcd\xe2\xc8\xac\xe0\xcf\x69\x73\x4a\x58\xc0\xfb\x44\xe1\xd7\x4e\x06\x8d\x88\xb2\x2e\x88\x54\x08\x22\x4a\x26\xec\x52\xcd\x05\x6e\x4b\x34\xa4\x07\x4b\x12\xa2\x0f\xbb\x5f\x34\x4b\xe9\x1c\xf2\xab\x87\x3f\x4f\x18\xfb\x69\x26\xe8\x15\x4c\xae\x1a\x3b\x9a\x65\xd9\xab\xa9\xe1\x77\x22\xe0\xc3\x5b\xc3\xc9\x5a\x14\xea\xe1\xbc\x96\xf7\xb2\x10\xb7\xe2\x44\x67\xbc\x18\x20\xc8\x3a\x1c\x28\x69\x29\xa6\x3c\x66\x0a\x6e\x4d\x90\xd6\xd4\x88\xc8\x5b\xb3\x31\xe6\x0a\x86\x81\x5e\x26\xaf\xb0\x91\x96\x15\x87\xd8\x33\x7a\x81\x24\xb7\x59\x79\x2c\x87\x13\x00\x5d\x16\x58\xbf\xc4\x45\x56\xaa\x9f\x4b\xf1\xf0\xb3\xa9\x4d\xb3\x69\xc1\x6f\xdd\x7c\x00\xbe\xa1\x8c\x83\x12\x7c\xd5\x83\x1d\x30\x32\xad\x6e\x05\xe3\xc5\x03\x5f\x68\xf4\x4e\xc4\x75\x48\xfd\x86\xbd\xde\x67\x75\x0b\x8c\xa2\xae\x8e\x9c\x7d\xbd\x0f\xaa\xdb\xd1\xe1\xf9\xcf\x97\xff\xcf\xe5\xcf\x87\xc7\x1f\x4e\xcf\x92\x3b\x28\xe3\x15\xbf\x91\x85\xf4\x47\x6d\xd7\xac\x1a\x96\x80\x15\x95\xe7\x07\x79\xad\x2a\xf2\x96\xb4\x25\x64\xb8\x75\x6d\xea\xa4\x1e\x0a\xef\x86\x04\xf3\x88\x2a\xbc\xad\x79\x88\x3c\x0a\x48\xa9\xda\x12\xd2\x0a\x6c\x80\xe7\x3b\x0a\xfb\x02\xa8\x4d\x3b\x1e\x09\x64\x4a\x5b\x86\xe3\x58\xfa\x45\x90\xe3\x1d\x96\x9d\xe3\xfc\xe0\x7a\x0e\x9e\xfa\x9e\x62\xee\x0e\x0d\x46\x26\x48\xd4\x2b\x7e\x6d\xe5\x3d\x2f\x04\xe6\x67\xab\x95\x72\xd3\x3e\x53\xba\x59\x3b\x8f\xb2\x59\x19\x80\xc2\xec\x37\xdb\x3d\x62\xb9\x28\x95\xc5\xf6\x34\xc4\xbe\x6e\x9e\xda\x34\x78\xa8\x01\x05\x60\x53\x37\x3d\x57\xc1\x94\x48\x6d\x1b\x75\xee\x6a\xc6\x53\xab\xd5\x2e\xf0\xb0\x33\x25\x3e\x2a\x6d\x0a\xb0\x25\x9e\x63\xc6\x68\x38\x8e\xf0\xf4\xd1\x77\xf6\x04\xa5\x9d\x43\x86\x5e\x4a\x5f\x62\x3f\x05\x71\x43\x53\xc1\x9b\xb6\x16\xb8\x63\x30\xd2\x0a\xc1\x95\x69\x04\xa2\xc5\xc3\x5e\x28\xd5\x78\x4c\x72\x7f\xa4\x7e\x72\xc7\x8b\x0c\xb9\xce\x66\xa0\x54\xf8\x3c\xd7\x30\x49\x1e\xb7\x1c\x01\x22\x97\xa5\xba\x6e\xcb\x43\x54\xbf\xd2\x9b\xe6\xbb\xd3\x63\x58\x02\x6d\x49\x56\xc3\xa6\x5e\xa0\xdd\xd0\x33\xf0\x77\xe5\xc0\x27\x33\xe2\x9d\x31\xa6\x1c\x7a\xc2\xe8\xab\x7c\x81\x31\xee\x24\x50\x64\x99\x96\xcd\x46\xf7\x11\x9b\xca\xf4\x40\x7e\xc7\x61\xe6\x29\x41\xae\xd3\x92\x7c\x29\x7f\xa0\x19\xaf\x33\x55\x9a\x59\x5b\x06\x6f\x75\x08\x2c\x3f\x3e\xa0\x07\x90\x84\xe3\xe0\x6d\x86\x39\x6b\x6d\x4a\xb0\x06\x32\x17\x98\x77\x7e\x68\x6f\x44\x61\x35\x4b\x70\xf0\x58\x47\x23\xa6\x00\xe4\x8d\x1b\x5e\x40\xf0\xfa\x94\x89\xb2\x61\xb9\x12\xa8\xa7\xd1\xa7\x3e\x9d\x1e\xb3\x57\x6c\xcf\x7c\x0b\x99\xf0\xa6\x5c\x82\x31\x0c\x55\xa7\x8e\x1c\x9e\xda\x2a\xa0\x49\x30\x63\x46\x9b\x99\x62\x3e\x85\x52\x31\xdd\x66\x33\xdb\x26\x07\x58\x36\x1a\xa4\xa8\xcd\x68\x41\x20\xed\x97\x3e\xc1\xdd\xf5\xff\x69\x30\x93\xd9\xa7\x47\x2c\xff\x50\x38\x02\x3a\x3c\x6a\x26\xce\xa0\x35\x4f\xf7\x53\x4b\x7e\xe9\x63\xb7\x6c\x73\x68\xb1\x3c\x38\x15\x70\xd5\x74\x6d\xce\xec\xa7\x96\x86\xa4\xda\x55\x18\xdf\x81\xfa\x92\x1c\x56\xa1\x51\xb5\xcc\xee\x33\x72\x91\x97\xb9\x9a\xf7\x3e\xe6\xc8\x07\x82\x0f\x7c\xc1\x43\xbe\xb6\x6b\x29\x0e\x0a\x1e\x56\xd4\xeb\x7b\x99\x36\xa7\xc1\x03\x74\x3e\x21\x2f\x03\xbf\xd1\x4d\xcd\x1d\x53\x86\x56\xd3\xe6\x01\x55\x64\x2c\xba\x07\x43\x89\xc9\xf9\x46\x6c\xbe\xd0\xbf\x16\xfb\x16\xcd\x46\x58\x0f\x33\x19\x05\x03\x23\x4a\x58\x9a\x7d\xf3\xcd\xab\xbf\x06\x39\xbf\xaa\x5a\x7d\x5e\xe0\xb5\xb6\xd4\x4c\x95\xde\x0c\x10\xe3\x86\x73\xd1\x88\x7a\x0e\x96\x2d\x3c\xd8\x81\xf6\x16\x27\xbe\xd4\x0f\xa2\xf6\x6e\x2b\x82\x4d\xd4\x60\xee\x73\xdf\x78\x01\x44\xbe\x70\x3b\xfe\x91\xfd\x9a\x7f\x48\x30\xde\x7a\xdc\x8e\x61\x5a\x3b\x6e\x65\xcc\xef\xcc\x7c\x48\x42\x71\x15\xbb\xe3\x87\x75\xd2\xd3\xb9\x1e\xfd\x91\x52\xcb\xd9\x01\x78\x2a\xe9\xa3\x3d\x76\xd6\x76\x52\x43\xf1\xc3\x2c\x4b\xdf\x1c\xe3\xe7\xec\xc6\xec\x28\xd6\xa8\x5b\xb8\x25\xbd\x61\xff\x93\x8e\xb0\x11\x6b\xcb\x5c\xd4\xba\x51\x0a\x06\xdb\x68\x62\x64\x06\xad\x44\x3d\xe3\x15\x18\xd1\x2b\x51\xcb\x6a\x26\x6a\x5e\xd0\x4c\x68\xcc\x96\xc2\x4b\x72\x1c\x37\x0b\xa8\xb1\xaa\x65\x99\xc9\x8a\x13\x41\x03\x59\xa6\x83\x54\xbf\xe6\xc8\x2c\x73\xf8\x45\xd5\x20\x7f\xff\xa7\x8f\x07\x41\x83\x5a\x2a\x25\xc4\xcb\xf9\xb3\xcd\xf3\x87\xb7\x8d\x02\xab\x41\xbc\x46\xae\xd4\x9d\x48\x8d\xe8\x92\xd2\x36\x2b\x5e\x10\xa8\x08\xea\x86\xb5\x12\x81\xff\x08\x1c\x22\xa8\x0e\x71\x5a\x8d\x34\xa0\xc0\xc3\xcf\x4b\x08\xc7\x6d\xa0\x3e\x68\x1a\x07\x20\x42\xb1\x40\xd3\x86\x39\x71\x8e\xc8\xc5\x81\x49\xa0\x73\x53\xb0\xb1\xa6\x5d\xa4\x51\x49\x5f\x5b\xe0\x16\x71\xde\x16\xc5\x25\x2d\xad\xfe\x55\xb4\x53\x22\x86\x48\xc5\xa1\xad\xda\x16\xc1\x5b\x0e\x64\x68\xed\x5a\x95\x61\x5b\x54\x6d\x51\x58\x1c\x32\x34\x01\x6d\x4a\x2e\xff\x80\xf7\x67\xc2\xe8\xc4\x03\x3b\x61\xbd\x36\x41\xc6\x11\xd0\x18\x09\xda\xc8\xec\x93\x1b\x91\x71\xf3\x55\xfb\x37\xed\x38\x1a\xb8\xc0\x00\x3e\x02\x5e\xbb\x64\xcd\x60\x17\xe1\x59\x86\x84\x77\x24\x70\xef\xf0\x6e\xfd\x18\x54\x18\x19\x9e\x0e\xb0\xe7\x07\x5f\x79\xec\xf8\x18\x7e\x32\xa3\x43\x43\x39\x56\xe5\x98\x8f\x2b\x95\x6f\xc1\x1f\x91\x8e\xee\x7d\x51\xb7\x5e\xd4\xad\xbe\xba\x35\x24\x0d\x02\x21\x60\x9d\x88\xc1\xc1\x64\x39\xd0\xe8\x32\xde\xd2\x76\x89\x24\x9e\x75\xa9\x27\xb6\xf5\x97\x81\xaf\x4c\xc4\xbf\xaf\xc8\xcc\x52\x62\x3c\xe8\x5a\x99\x59\x9e\xaa\xfd\x58\x75\xe6\x51\x4a\xd0\x10\x4a\xb9\x5b\xa6\x8b\x56\x8e\x14\x25\x42\xfd\xbc\x80\x97\xbf\x20\xf0\xf2\xfb\xe4\x54\xad\x0d\x59\x6e\xb8\xbe\xf3\xfb\x49\x98\xf3\x26\x60\xac\xf3\xbf\x93\x96\x32\x26\x2d\x65\x1b\xf4\xd7\x9d\x65\xfd\x72\x1c\xbd\xa0\x9a\xb7\x85\x6a\xee\x49\xbe\x47\xc9\x4c\x50\xe3\x97\x41\x9d\x97\x16\xef\x10\x16\x39\x7c\x4d\x57\xdf\x47\xe5\x9e\xf0\x6c\xe8\x21\xac\x7c\x25\xa4\xb4\xb6\x14\x20\x27\x4b\x6d\x64\x19\x1f\xa8\xc5\x61\x77\xec\xb9\x0b\x96\xed\x80\x8a\xc8\x68\xe0\x46\x27\xe6\xb7\x5c\x96\xba\x31\xb7\x0b\xcd\xf6\x7e\x70\x83\x0c\xd7\x0d\xdc\x21\x4c\xd5\x9e\x3f\x73\x7f\x55\xc4\x4a\xc5\x9b\x59\x42\xe6\xb7\xb9\x4c\xc3\x2f\x0f\xe9\x89\x55\x27\x8c\xf0\x2d\x21\x18\xd2\x3e\xb0\x48\x3e\xd3\xb1\x09\x3b\x34\xf2\x5b\x56\xb0\x1b\xc1\xc2\x83\x1d\x06\x87\x18\x5e\xb3\xa7\x0b\x26\x1b\x2d\x8a\x29\x42\x79\xdc\xf5\x7b\x2a\xbb\xfe\x13\x08\x56\x4e\x7d\x66\xe4\x59\x78\x80\x34\x94\x4e\x10\x3a\x00\x82\xd6\x5c\x85\x35\xe4\x1d\x17\x7f\xf0\x59\xaa\xdc\x2c\x70\x18\xd3\xa4\x17\x57\x7c\xae\x24\x6a\x32\x83\xc9\x5e\x4f\xba\x45\xec\xb0\x91\x40\x42\x96\x02\x77\x18\x82\x6f\x4d\x36\x8b\x8e\xed\x28\x5e\x2c\x13\x76\xa8\x7d\x9f\x18\xaf\xaa\x5a\x71\xe0\x9d\xf6\x0d\x1a\x85\xf7\x1d\x0b\xcd\xaa\x8a\xf6\x56\x92\xd7\x0e\xde\x69\xe4\xbd\x00\xf7\x71\x63\x7d\x8c\x03\x1f\xbc\x0a\x2a\x83\xd7\xc9\x7f\x58\x43\xf0\x2c\xc0\x04\x5c\x15\xb4\xa0\xa7\xe1\x1f\x9a\xa9\x02\x72\x7b\xce\x78\xc9\xfe\xfe\x8a\x55\xa2\xce\x68\x41\x00\xd2\x91\xbc\x99\x85\xbc\x17\x80\x9f\x1a\x7e\xf9\xeb\x6f\xd9\x4c\xb5\xb5\x9e\x44\x99\x5b\xe1\x37\x3c\xf7\x2d\x20\xd2\xa6\x34\x7c\xfd\x8a\xcd\x65\xd9\xc6\xa4\x08\xcb\x1c\x59\xb0\x21\x7a\x13\x79\xce\x9b\x99\x9d\x3b\xc0\x9f\x39\xa8\x1a\x2d\x1e\x44\x2c\x44\xfe\x41\x40\xfd\x35\xca\x4a\x85\xb0\x4f\x65\x92\x8b\x63\xb9\xef\x66\xa9\x26\x08\xda\x04\x82\xab\xc2\x60\x28\x78\xf6\x92\xf0\xe4\x8b\x54\xfc\xec\xec\x6c\x4f\x23\x7b\x51\xc5\x5e\x54\xb1\xed\xaa\x62\x8f\xd0\xc1\xce\x55\x3d\x2c\xa6\xcc\x43\x4f\x90\x12\x46\x63\xa8\xd2\x6e\x88\x5d\x0d\x8e\xe3\x95\x8a\x8b\xf9\x4e\x4f\x66\xa5\x03\x32\x62\xa6\x24\x89\x1f\x08\xa1\xef\xce\x49\x83\xe0\x76\x87\xaa\x3f\x3e\xbb\xfc\xf9\xfd\xe1\xdb\x93\xf7\x48\xe4\x60\x5e\xd3\x3e\x9e\x23\x70\x13\xe1\x3b\x60\xfb\xa5\xa8\x0f\x0a\x2d\xc0\x0a\x79\xe5\x64\xd7\xee\x19\x9f\x8b\x5d\x02\x96\xcb\x92\x9d\xd0\x5e\x81\xa1\x71\x71\xab\x36\x20\xc0\x9c\x85\x60\xcb\x54\xa5\x60\xe1\x20\x4a\x9b\xdf\x21\x47\x78\x9e\x37\x48\xa7\xa3\x47\x54\x3e\x30\x33\x57\xa0\x75\xd6\x80\xf2\xc3\xe4\x0c\x2a\x87\xa8\x03\x1b\x32\x12\x98\xba\x91\xaf\x1d\xb2\x4a\x22\x90\x73\x51\x89\xff\x38\xa3\xaa\xcd\xc9\xfd\x5e\xf1\xfc\x2d\x2f\x78\x99\x89\x7a\xc2\x3e\xe9\x16\x4c\xde\x5c\x6b\x79\x5b\xf6\x1d\x5f\x31\xc2\x5d\x06\xd8\x5f\x42\x73\xe4\x9e\x7c\x91\x1a\x30\x65\x6d\x09\x3a\xb5\xaa\x99\x28\x34\x65\xb6\x0e\x12\xc7\xda\x92\x9e\x4c\x31\x44\xc3\x35\x0a\xac\xf1\xe3\x00\x2e\x02\x7d\x27\x8d\x83\x06\xf8\x6a\x51\xf9\xa5\x62\x01\x12\x0e\xfd\xa7\xca\x47\xc0\xac\x49\xd6\x8f\x4b\xd1\x50\x3c\x96\xfd\xed\x00\xb6\xfd\xd8\x8c\x3a\x2c\xe9\xb5\xa2\x1b\xaa\xe5\x53\x19\x01\xa9\xed\x8c\xf9\x40\x8e\xee\x32\x59\xfa\xa5\x5a\x35\x2a\x1b\x62\x4a\x3c\x3d\x67\xb6\x80\x4f\x91\x0b\xbb\x97\x5d\x62\x10\x8d\x66\xd7\x3b\x57\x47\xe7\x48\x85\xfa\xe9\x18\xfe\x61\xce\xe9\xeb\x9d\xcb\xa3\xab\xf3\x0e\x2f\xea\xd5\xd1\x79\x9a\xb1\x1d\xa2\x82\xd2\xeb\xf7\x8c\x72\xe2\xd6\x11\x17\x1a\x0e\x83\x22\x17\x80\x45\xb0\xa2\xb7\x02\x2a\x0b\x56\xa3\xdd\xfb\x54\x93\xdd\xfd\x24\x1a\x6a\x5e\xde\x0a\xf6\xda\x54\xf6\xd7\xbf\xfc\xe5\x9b\xbf\x4c\xd8\x59\x18\x3a\xc5\x4b\x76\x7a\x78\x76\xf8\xf3\xe5\x8f\x47\x3f\x9f\x1d\x7e\x38\x89\xf8\x3e\xb9\x23\x5d\x0a\x16\x77\xa1\xd4\x9d\xc8\x59\x5b\x11\x18\x10\x30\x37\xb8\x0a\xcb\x30\x06\xea\x1c\x10\xfe\x01\xc8\xcc\x8c\x66\x8f\x4e\xb4\x03\x8f\xc2\x63\x9d\x06\x61\xd7\xbc\xe2\x44\x8d\xc6\xcb\xe8\x5e\xe8\xdf\x9c\xf3\x6a\x9f\x64\x94\x2b\x25\x6f\x4b\x65\x33\xd6\xda\x75\x8b\x57\xb3\xac\x68\x75\x23\xea\xd3\xf3\xff\x38\x53\x25\xe9\x5b\x9e\xaa\xd3\xe6\x80\x80\xd7\x1a\x26\x7e\x6d\x31\xf0\xb6\xdb\x92\xed\x6e\x1e\x3c\x1c\xcb\xdb\x31\xb7\xa6\xae\x4d\x8f\xce\xb6\x91\xc5\x44\x96\x8d\x6e\xea\xc9\x69\xd9\x7c\xac\x2f\xd7\x52\xc7\xd3\x69\xb6\xc2\x23\x21\xce\xaf\xc1\x1b\xd4\x00\x2c\x40\x94\x23\x40\x10\x63\xbb\x60\x85\xf2\xc4\xd6\x1c\xf0\x16\xbb\x99\xe8\xb7\xc0\x3d\xb2\xd7\x95\xd3\xf3\x2e\x63\xb0\xbb\xe5\x95\xb4\x2c\x3a\x62\x1a\x11\x74\xc5\xc2\xee\x90\x39\x37\x35\x62\x80\x50\xe9\x2a\x8b\xa2\x84\xe6\xbc\xa4\x4a\xb0\x4e\xb3\x34\x65\x09\x26\x8b\x9b\x05\xde\xcc\xf5\x5a\x22\xfe\xdf\xfd\x35\x7e\xb4\x8e\x70\x0f\xd6\x6e\xc6\x4b\x1b\xd3\x94\xcd\xcc\xae\xcd\x1d\x10\x0c\xb5\x4b\x47\xcb\x18\xf0\x30\x5d\xef\x98\xb5\x6c\xa4\x12\x90\x09\x5a\xf5\x78\xef\x7a\xe7\x7a\x67\x7f\xc4\x90\x95\x16\x5e\xf2\xe3\x38\x71\x6f\x59\x33\x8f\x1f\x08\xb3\x6b\x66\x82\xe7\x10\xf4\xe4\xb7\x8f\x39\x2d\x01\x89\x06\x34\xc5\x04\xd2\x75\xd9\x54\x80\xc4\x38\xcc\xfc\x60\x14\x41\x76\x64\x67\x72\xc4\xec\x19\x8b\x7b\x2e\x3e\x65\x4f\x69\xbf\x9a\x33\x8c\x72\x58\x9c\x7c\xc6\x8b\x91\x91\x54\xdb\xdd\x6e\xf7\xb2\x6e\x5a\x5e\x8c\x65\xa5\x11\x59\x42\xe6\x65\xd3\x37\x99\xbe\x06\x09\x6a\xcc\xe9\x79\xe2\x32\x14\x3c\x8c\x3d\x18\x7e\xb4\x05\x62\xf4\x51\x1d\x31\xc7\xa4\x73\x56\xd3\x52\xb7\x08\x50\x8d\xe2\xbe\x82\xc4\x5d\xd3\xa9\xcc\xfc\x91\xe4\x64\x3c\xbb\x9a\x09\x6d\xf6\x84\x76\x91\x8e\x18\xdb\x09\xc7\x81\xb7\xa7\x61\x49\xdc\xa2\x70\x7d\xd5\x95\x2a\x31\x09\x1a\xe6\xec\xd6\x48\x2e\x89\x50\x46\xfa\x1c\xaf\x6b\x79\x6f\xd6\x55\x03\x20\xef\x5c\x04\x64\xb9\xa7\xe7\x13\xc6\x0e\x81\x5f\xd9\x28\x5a\x84\x87\x04\x85\x8a\x2e\xb1\x85\xe2\xf9\xf8\x86\xa6\xd5\x0a\x09\x6a\x63\xc5\x6b\x67\x56\x08\x8c\x7e\xa4\x48\x6d\xc0\x64\xe9\xa7\x23\x1d\x70\x16\x3e\xb5\x02\xc4\xb5\x30\x74\xf1\xf3\x06\x2c\x42\x79\x09\x7c\x9d\x41\xd0\x08\x31\x58\x35\x6d\x4d\x68\xf7\x23\x73\x2c\xc2\x65\xbe\xce\x13\x33\x72\xa6\xfc\xc6\xb0\xc2\x41\x96\xf7\xaa\xb8\x07\x4c\x74\x87\xec\xe8\xe2\xdd\xd1\xf8\xf5\xeb\xaf\xbf\x81\x60\x14\x38\xf0\xf7\x56\x10\x10\x9a\xd2\x08\x7e\x77\x1a\xdc\x15\x71\xbf\xdf\x88\x78\xa7\x2c\x5b\xbd\x57\x38\xc7\xe7\x90\x7a\x6c\x78\xdc\xa2\x62\x2e\xbe\x45\x76\x74\x49\xcc\x7d\xa8\xd1\x72\xd6\x36\xc1\x10\xdb\xa5\xd4\x28\x58\x40\x63\x04\xd2\xaa\xda\xae\xf5\xf1\x83\xcc\xfd\xfd\x1a\x24\x11\x60\x04\xae\x77\x30\x10\xae\xbe\xb7\x11\x2f\x74\xeb\xc6\x8b\xbc\xd9\x4d\x65\xce\xf8\xbd\x92\x39\x51\x7c\xa8\x32\x67\x33\x55\xc1\x8c\x84\x02\x05\x0a\x9e\x91\x36\x4a\x14\xf8\x24\x11\x10\x6f\x51\x4b\x7d\x67\x94\xbc\xc6\x85\x0c\xc9\x39\x2d\xdb\xdc\xb5\x5f\x57\x44\x41\x67\x5a\x48\x82\xec\x7a\x87\xa9\x1b\x9d\xb5\xf5\xb2\x26\xce\xf9\x82\x21\xfc\x23\x6a\x25\xa4\x81\xc2\x68\xe0\x12\xa2\x87\x4d\x4b\x42\xc4\xcd\xad\x52\x39\x60\x69\x78\x41\x5b\xc9\x37\x21\x35\xaf\x33\xc1\x8b\x66\x76\x34\x13\xd9\xdd\xd9\xe0\xdd\x28\x51\xc8\x89\x7a\xec\x03\x96\xc8\x4c\x09\x66\xef\x58\x2e\x60\xc9\xad\xf1\x7e\xd2\xc0\xef\x13\x35\x4b\xed\x22\xbd\x63\xd5\x94\xf1\x4a\xb2\x1b\x9e\xdd\x89\x32\x20\x1f\xf7\x27\xa8\xfd\xf0\x84\xfd\x64\x36\x90\x19\x3c\x23\xb8\xc6\xfe\x54\x72\x4d\x43\xfd\x30\xca\xc3\x68\xa3\xd6\x60\x36\xe8\x2c\x12\x10\xb1\x4d\xe7\x96\xcd\x8c\xa4\x91\x8d\xac\xb7\x58\x4e\x92\x6b\x3f\x7c\x21\xe3\xc5\x9a\xd7\x8d\x22\xa8\x3c\xa5\xdd\x74\x4f\x4a\xbb\xa3\x4c\x1b\xdf\xc4\x4d\x8b\xfe\x00\xc9\x62\xb4\x6a\x3b\xc2\x6e\x18\x4f\xcf\xbb\x4e\x06\xab\x50\x58\xe5\x82\x62\xbb\x72\x51\x89\x32\xd7\x78\x35\xf6\x61\xbf\x00\x35\x2c\x40\x7c\x65\x85\x6a\xf3\x31\xd1\x43\xd6\x96\x46\x20\x22\x9a\x04\xeb\x65\xd4\x47\x1c\x63\x0e\xbf\x32\x2b\xfe\x83\xb5\x10\xa9\x38\x4e\x40\x06\x67\x3e\xcc\x5d\xf4\x61\x17\x06\x64\x89\x0c\xc0\x1a\x8d\xdd\x48\x6e\x86\xb0\x45\xc8\xe7\x70\x61\xf4\xa7\x74\xfc\xbc\x1f\x2d\xd0\xff\xbb\xe9\x31\xaa\x82\x37\x66\x5e\x47\x38\x92\x74\x1c\x98\x6f\x65\xfe\xa4\x0c\x01\xfa\x9d\xc6\x47\xc7\xa0\xeb\xb0\xad\x21\xd0\x17\x5d\x33\x48\x8e\x9c\x9e\xeb\x6d\x8f\xd5\xf5\xce\x46\xde\x78\xbc\x6c\x8e\x61\x79\x62\x06\x85\x31\x89\xed\xc0\x21\x1f\x7f\x7f\x3c\x95\xb5\x78\xe0\x45\xb1\xcc\x31\xdf\x3f\xc4\x61\x5d\xa5\xaf\xe4\x56\x81\xc2\xa5\xe7\xb4\x88\x21\x2b\xc0\xef\xa3\x1d\x3e\xd5\xd2\x0d\xe2\xba\x6b\xdc\x34\x3d\x1f\xcf\x79\x35\xbe\x13\x0b\xed\x4c\x84\x81\x09\xe3\xbf\x52\x2f\x50\x8b\xe6\xbc\x4a\xe3\x81\x42\xd4\x10\x55\xb8\x16\x6a\x68\xb4\x53\xb5\x37\x85\xd4\xb3\x33\xd5\x5c\x08\x9e\x2f\x0e\xad\x3a\x9b\x88\x88\x1d\x28\x39\x42\xe1\x40\x72\x14\x83\x04\x65\x1c\x67\x78\x7c\x76\xd9\xc9\x8e\x48\xf6\x4b\xaa\x93\xa2\xba\x3b\x15\x83\xff\xa1\xbd\xd1\x82\x02\x60\x4d\x21\x6b\x88\x4c\x65\x7b\x70\xa6\xb1\x38\xf2\x96\x4e\x13\x1b\x65\x0a\xcf\xaa\x5a\xce\x79\x0d\xa0\x6b\x96\x71\x02\x8f\xda\x04\x2d\x4d\x64\x69\x20\x74\x29\x67\x97\x0d\x6f\xc4\xb4\x2d\x2e\x81\xf3\xe5\x7b\x7b\x7d\xb2\xc2\x1d\x7d\x68\x15\xbf\xe5\x8d\x60\x97\x17\x3f\x92\x32\x89\x4d\x97\x8d\x66\xe7\x18\x0e\x84\x4c\x5e\x46\x57\x07\x77\x1b\xc8\x09\x59\x13\x19\xae\xa9\x10\x71\xac\xb5\xd9\x09\xb0\x45\x84\x11\x00\x52\x67\x46\x6f\x58\x0c\x65\x8b\x19\xe2\x08\xbd\x00\xcd\xcd\x1e\xd1\x81\xe2\x56\xd9\xd6\x50\x5e\xbf\x2e\xfd\x2f\xa4\x94\x70\xa3\x61\x3f\x00\x5a\x02\xde\x41\x55\x1d\x92\x6d\x8c\x62\x0b\x28\x4c\x4f\x3b\x47\x41\x68\xc1\xc6\x4e\x7f\xb4\xe4\x00\x70\xa9\x81\xbb\x66\xa3\xbd\xba\x38\xa2\x5b\x54\x70\x85\x70\x4c\x20\x73\x95\xcb\xe9\xe2\x0f\x74\x17\x7d\x12\x9d\xb1\xc6\x74\x1e\x87\x53\x90\x36\x09\x85\x3e\x30\x5f\x1e\xc1\xf9\x72\x7a\x7e\xbd\x43\x96\x4b\xbc\xfb\x43\xb0\x73\x8e\xc9\xaf\x25\x52\x94\x50\xad\x8c\x53\xb5\x13\x86\x39\x78\xfc\x11\x05\xa4\xec\x79\xa2\xa0\xbd\xe8\xd8\x8f\x61\x36\x85\x52\xc4\x31\xa5\x67\x5b\x37\x3e\x3f\xe2\x42\xdf\x19\xbb\x23\x38\xda\x12\x84\xdb\xa9\x62\x31\x3b\x7e\x04\x07\x45\xa1\xd4\x1d\x98\x8d\x82\x56\x52\xed\x1a\xe4\xae\x86\x05\x1a\x44\x16\xce\xd4\x43\x28\xe9\x02\x67\x47\x3c\x07\x6e\x2b\xf8\x24\x1f\x8d\x4b\xb8\x1a\xae\xf6\xd1\xba\xbb\xe6\x7a\x27\x7c\xed\x7a\x27\xf2\x17\x79\x3d\x47\x44\x3b\xc9\x5d\xab\x70\x61\xd2\x65\xc0\x5c\xee\xec\x55\xd1\xb9\xc7\x03\x0b\xa0\x91\x80\x81\x86\x45\xf0\x8d\xe0\x3e\x19\x9c\x02\x75\x30\x3c\xc1\x95\x84\x02\x33\x2d\x4e\x03\x13\x04\x75\xae\x37\x37\x0b\xb2\x08\x42\x5c\x68\x53\xb7\x59\xe0\xf6\xf7\x9f\xb0\x00\x80\xd3\x29\x8b\xcc\x96\xde\x28\x57\x2a\x46\x2b\x94\xe1\x23\x7f\xeb\xb1\xa1\xa2\x22\x6a\x31\x1d\x7b\x96\x9d\xdd\xa5\x23\xb7\x65\x6a\x4e\x9a\x3b\x07\x83\x6b\x03\xdb\xd3\xcc\xa5\xf9\x26\x4e\xd1\xf5\x0e\xbb\x69\x65\x81\xaa\xbe\x1b\x64\xbc\x40\x07\xc3\xec\x9c\x66\xe6\xf0\x20\x73\x0f\x48\x57\xb8\xd2\xfb\x0c\xae\x7e\xb9\x98\xbb\xba\x9f\xf7\xe8\x33\xee\x12\x08\x7c\x50\x64\x13\x0e\x05\x7b\xac\x16\x43\x26\x7d\xa7\x79\x5b\x73\x18\xe5\x1a\x07\x0d\x73\x7f\x55\x63\xb6\x29\x44\x68\xd0\x65\x79\x3b\x76\xe5\xac\x20\x81\xf3\x63\x53\xac\xcb\x50\x9a\xfb\xe8\x71\x37\x33\x94\xed\xbf\x8f\xbf\xdb\xc0\xa2\x1e\x5e\x81\x12\x98\x8d\xf0\x2e\x19\x8b\xb0\xde\x47\xed\x15\xcf\xcd\xd6\x08\x9d\xb8\x02\x73\x07\x20\xd9\xd6\x46\x19\xde\x82\xcb\x99\x0d\xc8\x1b\x1a\xbd\xb5\x24\x73\xb2\x58\x6f\x34\xd7\x92\xcd\xab\xdc\x14\x78\x98\xa5\xbc\x14\x74\xcc\xad\x38\x0f\x8e\x56\x1d\x9c\x9b\x50\xeb\xd0\x37\xed\xc1\x30\x34\x88\x48\x89\xf5\xf1\x72\xdd\x0c\xca\x51\x82\x28\xf7\x76\x98\xea\x92\x00\x78\x09\x7e\xc7\x81\x81\xfb\x22\x13\x58\x9e\xce\x5d\xaa\x76\x00\xfd\xd4\x2e\x6a\xc4\xbe\xd6\xa5\xb4\xf8\x73\xe4\x82\x8c\x2d\x7e\x9e\x96\xdf\x46\xc6\xa9\x1b\xb3\x82\xad\x75\xc7\x2f\x80\xc3\xf3\x53\x23\xca\x73\xb4\x93\x6a\xa4\x91\xe8\x1c\x94\xd1\x4d\xca\xb3\xfa\xf1\xa6\x31\x57\x01\x1c\xc2\x27\x44\xc1\x2c\x4b\x0b\xf8\xa3\x7b\x66\x0d\xfd\xb3\x76\xce\xcb\xb1\x19\x73\x38\x15\xa3\x54\xa0\xae\x57\x16\xf0\x4c\xa3\x8b\x38\x17\x1f\x73\x37\xc8\x79\xba\x22\x6d\xe1\x00\xb5\xe9\x8f\x71\x81\xee\x5c\x84\x19\xf5\x68\x93\xd1\x97\x5d\x83\xed\xb0\x07\x51\x8d\x91\xe7\xb2\xb1\x8c\x64\xe7\x1d\x46\x3d\x3b\x17\x2d\x68\x80\x94\x64\x0c\x33\xc7\x74\xdc\x30\x30\x50\xa6\x2d\xa4\x4e\xdd\x08\x36\x97\x75\x0d\x37\xa1\x6e\x73\xf0\xba\x2d\x6f\x67\x0d\x50\x76\x35\xe2\xb6\xa6\x3c\xa1\x97\xa2\x61\xc1\x9c\x80\xc5\x1b\xb9\x68\xcd\xbf\x29\x4c\x14\x17\xbb\x5d\x35\x14\x3b\xdf\xd6\xf8\x76\xa3\xd8\xb5\xe5\x19\xc5\xcd\xb8\x50\xad\xf3\x21\x61\x14\x97\xeb\x9f\x4e\x8c\xd4\x99\x7f\x88\xbc\x1b\xca\x5e\x44\xc7\x90\x7a\xa6\xdf\x1b\x3b\x48\xd6\x58\xb9\xfe\x41\x6f\xab\x78\x91\xad\x2f\xb2\xf5\xcb\x97\xad\x43\x69\x76\x5f\x04\xec\x8b\x80\xfd\x42\x05\xec\x42\x67\x4d\x8a\xba\x16\x7e\x77\xa8\x7d\xce\xee\xcc\x28\x17\xac\xe2\x35\x9f\x9b\xeb\x3e\x0d\xb0\x0e\x23\x73\x93\x08\x5c\x8a\xa1\x85\xed\xb5\x2e\x12\xf7\xcc\xe5\x21\xa6\xd2\x0b\x24\x21\x48\x50\xce\xda\x9a\xfb\x4b\xd6\x62\xdc\xd6\xa8\x64\x60\x70\xae\x8e\xce\x2f\x55\x76\x27\x9a\xc3\x81\x08\xb1\x4e\x81\x00\xcb\xc5\x4b\x46\xdc\x58\x78\x23\x51\x90\xb0\xb6\xa4\x4c\xa3\xf0\xce\xa3\x90\xcb\xe6\xe4\x58\x46\x0c\xfe\xbd\x39\x59\xec\x62\xcd\x54\x59\xa2\x8d\x7b\xd4\x0b\x63\xaa\x54\xce\x4e\xd3\x38\xca\x34\x6c\x74\x13\x04\x65\x40\x9e\xb6\x1d\xb8\xe4\x73\xa3\xf5\xae\xb8\x4c\x31\xc9\x00\x22\x5c\xe5\x14\xe2\x00\x85\xc0\xba\xd4\x34\x3c\x9b\x59\xdb\x3a\xca\xa1\xeb\x1d\xf4\x86\x5f\xef\x00\x48\xaf\x84\xe0\x78\xbb\x7d\xc9\x79\xd8\xa8\xc2\x1c\xf9\x28\x3c\xa0\xb6\x75\xd2\x82\x8d\xa8\xe6\xfe\x62\xa0\xdf\x13\xea\x90\x85\x8c\x99\x0e\x60\x29\x4f\x9d\x0f\xb1\x47\x21\x27\x07\x89\x97\xa8\x75\x50\xcc\x9a\x2e\xad\x9f\xdf\x88\xb0\x33\x75\x69\xba\xde\x16\x62\xc4\xce\x01\xea\xe3\x7f\x21\x50\xc8\xc9\x67\x91\xb5\x4d\xfa\xa4\x49\xa6\x34\x8b\xdb\x8b\x2d\xbc\x13\x8b\x3e\xf3\x1f\xe2\xa5\xd2\xe0\x5f\x39\x17\x87\x79\x9e\x22\xc0\xbd\xb2\x8f\xba\xc6\x0b\x88\x28\xe3\x4d\x90\xf6\x00\xbf\xfd\xc0\x35\xe3\xe6\x05\x9b\x3a\x11\x8e\x54\xa3\x04\x35\xa2\x84\x93\xc3\x75\x12\xdf\xd0\x1b\x2f\xd0\x28\x12\xc3\x34\x70\x89\x24\x4b\x0d\x0f\xfa\xd4\x32\x55\x23\xe6\x2c\xa7\x23\xaf\x09\xc7\x6f\xfd\x53\xe0\x0a\xa7\x3e\x2d\xe3\x48\x58\xe0\x16\x70\x05\xbb\xfb\xc0\xae\x1e\x0d\x6b\x1f\xdb\x00\xab\x0b\xfc\x58\x96\xbd\xb7\x96\x55\x21\xd8\x75\xfb\xea\xd5\x37\xd9\x9d\x58\x8c\x30\x24\x8b\x76\x8e\xf9\x55\x04\x99\x19\x9c\x07\xcc\x65\x7f\xc6\x17\xed\x9f\xf8\xc2\x6a\x55\x7e\x68\x9b\x9c\xe0\xc6\x08\x5d\xa5\x76\xf4\x68\xcf\x80\xd7\xa6\xc9\x66\x13\x76\x02\x2e\xb7\xb9\xe0\x25\x79\xe6\x8c\x0e\x12\x15\xd6\x13\xe4\x0a\x0f\x54\x4b\x4b\x9a\x11\x00\x49\x9f\x63\xfb\xfc\x80\x64\xfc\x4d\xbc\x77\x2c\x7b\x62\xe3\xa7\x2c\x48\xf1\xbd\xb4\x43\x77\x62\xe1\xd3\x77\x13\xd5\x3f\xf8\x1c\x47\x7e\x2a\xac\xa8\xc6\x6c\xdc\xff\x6e\xc9\x87\xe7\x37\xb2\xc4\x8f\x61\xd5\x76\x04\xa1\x76\x3b\x0e\x68\x22\xc7\xcf\xa4\xd3\xca\x0c\x65\x59\xff\x68\x3f\x1f\x45\x5f\xdf\x89\x45\x22\xd9\x7a\xe3\x93\x24\xa4\xd2\xac\x53\x1a\x71\x80\x26\xfd\xda\xf2\x22\x76\xdf\xd0\x4f\x54\xc8\xf4\x3f\x22\xbc\x7e\x90\x45\x9e\x71\x42\x2a\x52\x5c\xa1\x56\x16\xb2\x6d\xb6\x4b\xc6\x4b\x2f\x51\xdd\xd0\x92\xbd\xb9\xe2\x75\x23\xb3\xb6\xe0\x35\x33\x2b\xef\x56\xd5\xe9\xac\x8c\x7e\xee\x06\x63\x87\xaf\xba\x45\xba\x42\xae\x12\xb5\x54\x98\x9c\x02\x02\x68\xe3\x25\xb1\x87\xb2\xcf\xce\xa6\x9a\xda\xa5\xef\xd6\xe1\x28\x88\x98\x6e\x52\x21\x00\xfb\xc1\xde\x0f\x8e\x8e\xb7\x2e\x01\xc9\x88\xd2\x3a\xc0\xc5\x4b\x34\xd6\xbd\x6c\x17\x48\xf7\xd4\x31\x63\x0a\xa9\x6a\xf7\xe8\x60\x12\xf7\x32\x6b\xf6\x27\xec\xff\x15\xb5\x82\xf9\x2a\xc5\x2d\x46\xd5\x76\xee\x6c\x0d\xa1\xb6\xb8\x66\xaf\xd8\x1e\xbc\xc6\xe4\x7c\x2e\x72\xc9\x1b\x51\x2c\xf6\x3b\x91\x45\xeb\x45\xfa\x2e\x55\x2f\xa3\x6d\x87\x32\xb9\x33\xc0\x4e\xfc\xa9\x25\xc9\xec\x23\x0e\x58\x17\x2a\x61\xb7\x9c\x1b\xfe\xff\x6d\x66\x89\xb3\x5a\xdc\xc2\xd2\xc1\x75\xb2\x89\x94\xaf\x54\xa1\x6e\x5d\xb6\xd2\xf7\xfc\x46\x14\x74\xb8\xcc\x45\x4a\xff\x39\x64\x0d\xbd\xe3\x3d\x7a\xb5\x7f\x81\x82\x57\x22\x12\x56\xdb\xdf\x5b\x79\x2f\x4a\x84\x36\x10\xde\x4a\xa2\x56\x5c\x54\x33\xee\xd0\x72\x0e\xcb\x09\x48\x7c\xab\x1d\x4e\xdb\x0e\x06\x6d\x89\x6e\x84\x4b\x60\x83\xdc\xa9\x0e\x6d\xe1\x45\xa4\xeb\x41\x20\x20\x07\x6f\x1a\x89\x3d\x78\x58\x32\x80\x2a\x81\xfb\x23\x08\x9c\xd5\x13\xf6\xb1\xb4\xf3\x0a\x5b\x0c\x65\x61\xe3\x9a\x61\x2f\x51\x05\x90\x47\x50\xee\x77\xe0\x90\x06\xeb\x09\x25\x99\xd0\xec\xe3\x45\x74\xa9\x5b\x89\xfd\x5a\x73\x05\x5c\x89\x3a\xc1\x27\x9f\x9a\xf5\x46\xd4\xf3\xae\x64\xa1\x24\x3c\x6a\x4a\x9d\xf9\xb5\x15\xb5\x34\x9d\x3e\x64\x65\x5b\x00\x1e\x19\x91\x2a\x03\xd5\xd9\xa5\x52\x2a\x1f\xd1\x78\x35\x13\xe1\x0a\xb3\xae\xb2\x39\x88\xec\xc3\xb3\x63\xd2\xc9\x08\x18\x07\xcb\x0f\x00\x4a\xa6\xdc\xb4\x2d\x33\xbc\x07\xc9\x66\x61\x84\xc0\x99\xca\x45\xd8\xd5\x2d\x2e\xc4\x78\xb1\x41\x4f\x60\x3b\x9d\x7c\x36\x43\xa4\xd3\xec\xd6\x87\x0e\x76\xb7\x74\x5b\x01\xef\x24\x0c\xa9\xde\x46\xb6\x9a\x95\xdb\x7e\x78\xb9\x2c\x2a\x91\x27\x6d\x5a\xfd\x9d\x35\x54\xd4\xbb\xee\xd2\xc9\xd5\x0a\xd1\x80\x79\x84\x22\x2d\x1b\xca\xf1\x90\x87\x69\x94\x28\xb6\x5c\x96\xda\x5a\x5e\x62\x02\xc2\x95\x92\x42\x96\xf9\x0e\xa5\xd1\x4b\xf1\x17\x0c\x64\x37\x38\x3c\x3f\x85\x27\x56\xca\x43\xfc\xb3\x03\xc2\xb9\xf0\xf7\x1b\x61\x36\xbc\x6f\x2e\xc8\xf9\xf0\xdd\x44\x00\x9e\xb7\x7b\x41\xc8\x7d\xe7\x76\x6c\xc6\x1f\x6c\x97\xf0\xc5\x09\x7b\x07\x7c\xa3\x14\x20\x65\x0e\xe1\x3a\x1f\x1b\x15\x62\x81\xb0\xab\x51\xf4\x35\x17\x2f\xb4\x39\xff\x72\x13\x24\xd8\x18\xec\xde\x86\xd9\xa3\xa9\x5a\x6b\x33\xd8\xa0\xda\x81\x45\x89\xb6\xb9\x21\x13\x65\xac\x18\x62\xd4\x24\x59\x24\x31\x99\xa8\xbd\x94\x9b\xcd\x7e\x23\x22\xf2\x47\x33\xc4\x51\xa2\x14\xb2\x93\xac\x5a\x5e\x03\xeb\xea\x41\x9f\x14\x5c\x37\x32\x7b\x5b\xa8\xec\xee\xb2\x51\x75\x8a\x28\xe7\xa7\xcb\x5e\xa9\xa8\x0f\x25\x3b\xfc\xe9\x92\x1d\x4b\x7d\x17\x12\x2e\xf0\x9e\x1d\x82\x5b\xea\x95\x5d\x8d\xee\x05\xba\x6f\x5a\x00\x4c\xe9\xb0\xbd\xde\x00\xf4\xe4\x3c\x50\xfc\x41\x0b\x6c\xfd\x8d\x69\xbd\x86\x3e\xae\x6f\x2e\x4f\x75\x3e\x72\xf4\xfc\x6b\xb4\xc3\xff\xd9\xd6\xc2\x74\x3f\x31\x76\xf6\x51\x77\xc0\xcc\xef\x98\x98\x0d\x9e\x22\xe9\x4a\x90\x9e\x06\xc6\xe4\x06\x36\x9e\xcd\x20\x13\x4c\xf5\xda\xad\xb7\x9f\x4f\x36\xf9\x9d\x2c\x52\xd3\x6d\x1f\x25\x9b\x0c\x0f\x2c\xb0\xec\x39\x5b\x6d\x3e\xd4\x6d\x75\x26\xaa\xd9\x34\x71\x68\x1d\x89\x6a\xf6\xee\x32\xde\x57\xe6\x37\xf6\xee\x32\xd1\x46\x58\x9a\x7a\xc6\x6b\x02\x3f\xe5\xbb\x9a\x15\x72\x2a\xcc\xdd\x63\x13\x10\x06\x7c\xb4\xd7\x44\x59\xe6\x29\xdc\xcd\x11\xfc\x1e\x37\x11\xcb\xba\xfc\x7a\x76\xa7\x70\x3b\x7c\x68\x93\xa5\x3d\xd3\xd9\x32\x89\x5d\x51\x8b\x42\x70\x2d\xb4\x25\xed\xf8\xfe\xe4\xf0\xf8\x80\xe2\xf3\xf4\x01\x64\x37\x18\xe3\x27\xc7\x55\x7e\x70\x71\x72\x78\xfc\xe1\x64\x32\xcf\x37\xe9\x32\xbc\xdd\xeb\x32\xa0\x50\x3e\xf0\xc4\xf1\x74\x64\x1f\x75\x3a\xee\x7e\xa6\xb9\x80\xeb\x44\x45\xb4\xe2\x78\x85\xc3\x51\xd9\xa4\x71\xb6\xd2\x5e\xfb\xb4\x4c\xb4\xec\xf2\x94\xed\x1d\x39\x49\x4a\x6e\x0a\x76\x5a\x36\xa2\x9e\xf2\x4c\xec\x87\x2d\x26\x99\xe2\x84\xda\x8c\x97\x79\x61\x05\xb2\x47\xb6\x99\x3a\xf3\x5a\xc2\xbd\xf0\x30\x54\xdd\xf6\x37\x02\xf7\x5c\x9e\x76\x7b\x90\xab\x87\xf2\x81\xd7\xf9\xe1\xf9\x69\xc2\x21\xea\x1f\x86\x6d\xb6\xef\xc0\x21\xcd\x6f\x6c\x66\x68\x77\xb8\x6c\x67\xd0\x83\x8f\x77\x1b\x0d\x7a\xf5\xb1\x4c\xec\x85\x13\x7a\x12\x2f\x8a\x46\xcc\x2b\x55\xf3\x7a\x41\x39\xdd\x54\xbd\x58\xba\x55\x9f\x7c\x32\x40\x03\x73\x59\x6f\xd0\x5d\xdb\xf2\x6e\x5f\xa7\x89\x00\xfa\x77\x47\x71\xff\xde\xc9\x9b\x5a\xb0\xa3\x19\x2f\x4b\x51\x3c\xc3\x41\xb9\x41\x37\xde\x1d\xf5\x3a\x50\x88\xcf\x43\x5a\xcb\x3b\xf7\x2c\xee\xd0\xad\x28\x45\x2d\xb3\x2e\x6e\xc1\xf5\x08\x2e\x40\x48\xa2\x75\xe0\x7a\x87\xa6\x53\xd8\x35\x22\x23\xc7\x13\xd2\xb9\x6d\xd4\x01\xd7\xa4\xb0\x0b\x2a\xbb\x4b\x89\xde\x77\xf8\xa0\x33\x1b\xf4\x63\x57\xf8\x2e\x19\x7d\xba\x9a\x05\xd1\x73\x66\xe8\x6d\x45\x94\x7f\xd0\x85\x37\x90\xf2\x88\xc4\xc3\x1b\x75\x0d\xea\xeb\xf6\xee\x36\x13\x1e\xc5\x97\xd6\x35\xbe\x3b\x3a\x89\x8b\xc4\x3d\xfe\xee\xe8\xe4\x4b\xd5\xd1\x6e\x33\xe1\x71\x30\xb9\xe9\xdc\xfa\xe3\xd5\xeb\x75\x6f\xe4\x64\x73\x21\x2a\x95\x18\x2f\x7c\xd0\x59\xd4\x12\x08\xc2\x94\x96\x20\x80\xd0\x56\xea\x4d\xa1\xb5\xc0\x25\x3d\x61\xc7\x27\xe7\x17\x27\x47\x87\x57\x27\xc7\x6f\x98\xad\x09\x57\x47\x2d\x32\x0a\x77\x54\x7e\x0f\x84\xa9\x3f\x89\x1e\xd2\x7d\x6b\x44\x4a\x0a\x2f\x99\x13\x8d\x98\x64\xba\x64\xa7\xa5\x6c\xfc\x31\x85\x79\x1b\x0a\x65\x59\xea\xcc\xdb\xb4\xa5\x6e\x25\xc6\xd7\x94\x56\xf5\x9a\x89\x4e\x6d\x1e\xb9\xe0\x7d\x9f\x9b\x0c\x34\x76\xb2\x37\xbc\x08\xc4\x4e\xa9\x65\xdf\xd9\x47\x9d\x85\xe8\x7e\xde\x4c\x37\x4b\x2e\xb3\xe5\x4a\x0f\x2d\xb0\x03\xd7\xc8\x47\xa9\x3d\xae\xc1\xdd\xbe\x9b\x26\x9f\x27\x59\x16\xbf\xa7\x27\x5d\x0a\x56\x42\x47\x98\x09\x03\x52\x45\x55\x07\xa7\x5d\x38\x10\x76\xdb\xd9\x3d\xea\xf2\x9c\x76\xb6\x5f\xe0\xc6\xb6\x86\x23\x90\xcb\x10\xce\x0e\x34\x39\x10\xb5\x86\x48\x2f\x7e\x8b\xf6\x2a\xa2\x55\x0d\xf3\x68\x36\x33\x59\xde\x06\x51\x96\x01\x99\xba\x16\xa2\xd7\x2e\x33\x17\xba\x09\xb3\x6f\x82\x81\xfb\xec\xe3\x15\x2b\x05\x56\xb7\x36\x01\xf4\xa0\x58\x30\x1f\x04\x12\xcb\xf5\xa7\xca\x8e\x7b\x77\xa6\xa4\x4e\x6a\x81\xa7\x97\x46\x67\x8b\xef\x39\xf8\xdb\x6f\x28\x29\xd7\x5b\xc2\xd0\x83\x47\x2d\x5f\xe8\x50\x77\x40\xd2\xe6\x10\x2c\x45\xd8\xa6\x10\x2e\xe8\xe8\xe3\x28\x05\x77\x88\xdc\x7a\xec\x29\xa0\xee\xcd\x51\x29\x1e\x0e\x28\x0a\x63\x6c\xea\x1b\x93\x99\xf5\x00\x2c\x67\x07\x5f\xc1\xff\x92\xf6\x9c\x94\xc4\x39\xeb\xdc\x02\x4b\x76\xb6\xf1\x15\xf0\xa9\xab\xd6\x34\x6c\xfd\xc9\x39\xeb\x5f\x21\xab\x0e\x5a\xff\xa8\xe0\x32\x61\x02\xef\x82\xfa\xa1\x58\x58\x57\x2c\x7b\x02\xca\x13\xb3\x76\x93\x6f\xa7\x73\xa7\x3c\x7a\x1f\xfb\x8e\x8c\xed\xe0\xf8\x9f\xf0\x97\xcc\x7c\x76\x93\xf1\x5a\xd9\x6b\x18\xc1\x99\x6a\x54\xb9\x4a\x5f\x3a\x4f\x94\x8a\xc7\x0c\x4b\x1c\xa1\x66\x57\x18\x81\xe9\xd1\xba\x46\x4d\xd9\xec\xce\xbe\x49\x2f\x13\x4d\xeb\x75\x52\xd5\xcd\x83\xaa\x07\xd5\xf6\xf3\xe8\x79\xe7\x20\xa2\x67\x8f\xb2\x3d\x6c\xd2\x8f\xa8\x0d\x41\xdb\x2d\x17\x79\x42\x24\x37\x62\x8e\xd1\x7d\xbc\x28\xcc\x82\x54\xa5\xbf\x5b\x68\x9b\xec\x63\x44\x36\x84\x39\xaf\x28\x1f\x56\x78\xdf\xdd\xa4\x85\xb6\x25\xdd\x26\xfe\xda\xaa\x9b\x45\x93\x18\xd7\x7f\xe0\x83\x78\x40\xed\x8f\xcf\x66\x6d\xa2\x0f\x74\x5b\x59\xdf\xa4\xb2\x69\xbf\x3d\x8e\x5b\x77\xc1\x73\xa5\x19\x18\x30\xd9\xb1\x18\x30\xdd\x3d\x93\xea\x55\xdf\x3c\xce\xd6\x74\xf1\xf6\xb8\xdb\x59\x9d\xf1\x42\x9c\x7e\x4c\x20\x41\xf1\x41\xdc\x69\xfb\x63\x1f\x61\x3f\xb4\xda\x43\x9c\xae\xca\xc5\x3a\x88\x29\x0f\x52\xc5\xaf\xf5\x9a\x8c\x89\x61\x06\x70\xe3\x71\x83\x2d\x66\x7c\x85\x75\xe6\xc9\x6a\x95\x4b\x56\xb3\x7e\x38\xb2\x79\xa1\xd7\x35\xac\x56\xa5\x82\x1b\x1d\xe8\xb7\x4e\x47\x3d\x3c\xe7\x44\x24\xc3\x31\xfe\x35\xda\xb9\xd7\xd5\x4c\x58\xe3\x7d\x42\xf5\x09\x1f\xc7\xed\xbe\xbf\x84\x47\xcf\x2d\x2c\x6d\x0b\x30\x4a\xb8\x2f\xf2\x97\x3a\x9b\x70\x5b\xf7\xbb\x75\x1f\x3c\x0d\xb1\xbf\x6c\xce\xab\x8a\x72\xdc\x72\x56\xf3\x07\x06\xee\x11\x96\x0b\xe2\x25\x24\x50\x7e\x74\x55\x5c\x03\x43\x8d\xef\x9f\x27\x73\x31\x04\xcf\x7a\xed\xf4\xcf\x22\x72\x7a\xf2\xa7\xf6\xf2\x54\x3b\x5c\x84\x6b\x2f\xc2\x6b\x4c\xaf\x40\xe3\x4e\x73\x07\x27\x95\xde\xd2\xc1\x7a\x3d\xf4\xa1\xf4\xe8\xee\x65\x8a\x52\x94\x1b\x6d\x2d\xa7\xe0\x87\x74\x3e\xc8\xe0\x61\x3c\x4b\xe6\x17\x37\x4d\x3f\x46\x71\x0b\x9b\x4f\x0e\xd4\x96\x9e\x1b\xff\x28\x9d\x31\x20\xd0\xf5\xfd\x2c\x44\xb8\x54\xda\x1d\x1e\x1b\xe4\xf2\x03\xe2\x3d\xa2\x54\xee\xbe\xc8\x76\xdf\xec\x26\x27\x08\x5b\x41\x0c\x29\x49\xa8\x67\xb7\x44\x97\xf7\x00\x9e\x53\x00\xbd\x65\x5a\xc9\x3d\x9f\x3b\x9e\x74\x2a\xec\x03\x05\xdf\xe3\x8d\xf8\x81\x2f\x18\xaf\x55\x5b\xe6\x04\x95\x74\x80\xb0\x0f\x9d\x0f\x9f\x51\x1c\x34\xc6\x7c\xc4\xc4\xb3\x37\xa2\xe1\x66\x89\xbc\x9e\xbc\x7e\xb5\xc1\x42\xf4\x94\xdd\x7e\x21\xfa\x30\x03\x9c\xfc\x0d\xa3\xa5\x3e\x90\x78\xaa\x6d\x66\x56\xa0\x3a\x00\xfa\x1d\xf8\x09\xa2\xa6\x02\xf8\xd6\x1e\x86\x54\xa9\x3a\x8c\xd0\xda\x8f\x71\x87\x48\x91\x93\x8e\x94\x6a\x6f\xd6\x5b\x43\xb4\x58\x60\x5e\xfc\x12\x72\xb3\xb2\xab\x97\x2c\xa7\xb0\x2d\xd7\x3b\xd7\x3b\x6c\xef\xde\x5e\x5b\x6b\xa5\x9a\xfd\xe4\x10\x51\xcb\x4e\x3e\x57\x29\x87\xc4\xe7\x8a\x43\xea\x97\x6a\x8b\xcd\x7c\x2b\x66\xfc\xde\x68\xac\x72\x2e\x0b\x5e\x17\x80\x15\xbf\xc4\x66\x00\xe9\x9f\x28\xef\x65\xad\x4a\x40\xa9\xdd\xf3\x5a\x42\x24\x55\x90\xd3\xf2\xff\xdc\xfb\xf1\xf0\x02\x62\x0b\xf6\x2d\xf1\x15\xb6\xd2\xc3\x8f\xc3\x96\x04\xd5\xad\x31\x46\xb6\x25\x66\x40\x60\x0f\xd8\x96\x99\x2f\xcd\xdb\x06\x39\x70\xc5\xe7\xac\x68\xb5\xbc\x17\xdd\x15\x8e\xc8\x24\x5c\xe2\xdf\xae\x0f\xef\xa3\xa0\x25\x95\x8b\x61\xbe\x9a\x7e\x19\x17\xe2\x83\x14\x1c\x08\x52\x85\x13\xa0\x90\x73\x69\x64\x10\x6f\x88\x4f\x35\xd0\x93\x5c\x7e\x5b\x0b\x9f\x30\xb3\xb8\x1a\x27\xe5\xc5\xe6\x10\xc6\x3d\x88\x2c\x9b\x99\x0b\x07\x44\x5f\xf4\x9a\x66\xf1\x32\x73\xb1\x11\x47\x42\x88\x07\x5b\x31\x8c\xcb\xf2\x42\x05\x49\xa0\x42\x28\x89\xcf\x01\xc5\x0b\x05\x34\xa5\xcd\x8c\x24\x9f\x0f\x00\xa5\xe1\xeb\xd0\x5d\x0c\x11\x23\x0c\x3b\x7f\x43\x14\x95\x77\x40\x7a\xdf\x6f\xce\x1b\x1e\x64\x95\x79\x8c\xab\x37\x18\x82\x55\x6e\xd2\x74\x6b\x82\x57\x9e\xd0\x9e\xc0\x0b\x1a\xb7\x68\x48\xfd\x4f\x37\x86\x2e\x00\x8f\x6f\x07\x2a\xea\xdd\x26\xac\x91\x45\x78\xa8\x3d\xfd\x94\xc2\x4f\x69\xdc\xb2\xcc\x66\x83\x4b\x7d\xb9\x52\xbc\x3c\xcc\xba\xa3\xb8\x2f\x8b\xac\x0e\xb5\x25\x2c\x9e\xd6\x93\xfe\xc4\x31\xd7\x74\xa1\x43\xd6\xd3\xd3\xe3\xc1\x6b\x1d\x23\x5e\xd4\xb7\xe0\xbc\xfd\x00\xa4\xd3\x70\x88\xed\x5d\x9e\xbf\xfd\xb0\x6f\x96\x06\xf8\x36\x4e\x8f\xd3\xfc\x7b\xe1\x67\x06\xd9\x8a\x75\xb7\xd4\x93\x9b\x53\x0e\x7d\x2a\x98\xee\xb4\xde\x82\xd6\x7f\x9b\x53\x4d\x77\x97\xd5\xfd\x3c\xbf\x5b\xfb\x04\xfc\x49\x40\x40\x6f\x7e\xae\x72\x7b\xbc\xa5\x11\xce\x57\x33\xc1\x1e\xa0\x30\x06\x64\x14\x85\xbd\x05\x21\x26\x39\x67\x03\x55\xe1\x21\x8d\x2a\x30\x44\x88\x99\x2b\xcc\x18\x43\x04\x15\x9b\x4a\xd2\x77\xe7\x66\xad\x55\xa0\x6e\xd4\xc4\xab\xbb\xa7\xf7\x57\xec\x0c\x6c\x90\x39\x04\x3a\xcd\xef\xed\x93\x6e\x81\x25\x11\x63\x87\x00\x4a\xb1\x3c\x38\x80\xbb\x1e\x25\x57\x4e\x1c\x4a\x86\x6d\xd9\xe4\x6c\xed\x8e\xf9\xbf\x46\xb6\x43\xbd\xd6\xe1\xef\xbd\x56\x04\x84\x87\xdd\xe6\x74\x3a\x3c\xea\x84\x91\x8e\x5f\xbf\x7a\xb5\x16\x73\x70\x67\xdd\x88\xcf\x8d\x28\x01\xab\x3d\xb9\x7f\x6d\xee\x15\xaf\x27\x87\xe8\x9a\x3b\xba\x3c\x3d\x06\xb0\x51\x02\xc2\xd7\x29\xd1\xb1\x33\xc9\xf2\xb6\x10\x4c\x96\x85\x2c\x05\x80\x96\xa8\x94\xf3\x72\xf5\x12\x29\x3f\x0e\x5e\xba\x1a\x72\x5b\x8b\x5b\x73\xb7\x86\x05\x18\x44\xec\x7a\x20\xd5\xca\x7d\x35\x3c\x3e\xef\x96\x40\x5a\x7a\x45\x92\x23\x64\x1e\x5b\x65\x68\x78\x68\xd8\xb1\x73\xf9\xbf\x01\xb6\x87\x7e\xe5\x70\x7f\xa8\x50\x4c\x19\x4d\x83\x80\xd0\xa5\x6e\x04\x5f\x39\xb6\x34\x10\x7d\x6b\xca\xc0\xe4\x13\x02\xad\x03\x6a\x46\xa8\x8a\xeb\x0f\x16\x5a\xad\xb8\x0f\x0f\xef\xf7\x83\xbe\xef\x4e\x81\x28\xad\x1e\x9c\x70\x56\x3f\x37\x3b\x07\x36\x6b\x27\xcd\x0f\x30\x4d\x22\xba\xce\x8e\x1a\xf0\x9d\x42\x34\x30\x30\x6a\x40\x80\x85\x63\xc1\x77\xd6\x22\x23\xce\xe4\x67\x9a\x1c\x4a\x2a\x35\x38\x3f\xae\x7d\x1b\xcf\x4e\x47\xd2\xf1\x66\x76\x0e\x1f\xee\x0f\x85\x7f\x16\x59\xb5\x6c\x3b\xad\x11\x2b\x1c\x15\x7f\xff\x87\x4e\xf6\x58\x9d\x7f\xf9\x9f\xbf\x4c\xd8\x55\xcd\x65\x01\x2a\x42\xc1\xf5\x8c\xe2\x36\x9b\x1a\x02\xc9\x90\x69\x17\x92\x0c\x70\x97\x0d\x2f\xfc\x2c\xa1\x4f\xe0\xa3\xe6\xf7\xc9\x75\x79\x5d\x9e\x90\xdd\xfe\x0d\xfb\xe5\x60\xaa\xd4\x2f\xec\x01\x2e\xb4\xb0\xde\xe9\xa7\x11\xfe\xff\xe0\x17\xb8\x2f\xe2\xbf\x6f\x78\xfd\x4b\xfc\x86\x69\x6b\xf0\x56\xfe\x0b\x53\x35\xfb\xe5\x40\x34\x19\x94\xda\xcc\x7c\xd1\x27\x0d\xa6\x0c\x19\xa6\xfe\x60\xd4\x74\x2c\x99\x83\x61\xb7\x36\x0f\x88\xed\xa4\x11\xf6\x26\x22\xfb\xe5\x94\x35\x63\xf5\x4e\x38\xe6\x62\xae\xca\xcb\x94\x82\xef\xd1\x41\x6c\x8c\x57\x67\x8c\xcc\xa0\xfc\x73\x66\x47\xba\xb7\x63\xd8\x10\x2c\xfb\xaa\xd2\x07\xf8\x95\xaf\x0f\x5c\xb9\x09\xbb\x24\x24\x06\x79\x5e\x18\xe6\x64\x30\x7b\x63\x6e\x5d\x02\xa4\xc5\x4f\x82\xea\x97\xd1\xe1\xa1\x69\x29\x87\xb2\x66\xa0\x57\x2f\xf7\x97\x5c\x9a\x4f\xcb\xa5\xf9\x92\xd5\xf2\x39\xb3\x5a\xe2\x60\xec\xea\xed\x64\xb6\xd4\xf2\x76\xcc\xeb\x6c\x26\x1b\x91\x35\x6d\x2d\x52\x6d\x76\x8d\x7a\x0a\xbb\x02\x06\xa4\x61\xa6\xcb\xd1\x8e\x4e\x26\xe4\x42\xba\x72\x0d\x16\x28\x62\xf3\xa9\xdd\x4e\x0a\x76\xf0\x73\x77\xd8\xb4\x0e\x09\x96\x91\xc2\x73\xb5\xfe\xbd\x4c\x74\x42\xf2\x31\xb8\xef\xa5\x79\x52\xaf\x06\x98\x49\x3b\x7d\x46\x64\x2e\x6f\xb8\xb5\x74\xa9\x16\x82\x18\xcd\xa2\x35\x12\x55\x2b\xf0\x9b\x94\xb9\x7a\xb0\x61\xe6\x13\x76\x4e\xde\xd5\x5e\x3a\xc7\x0b\x6b\x2d\xff\xa3\x0d\xa6\x25\x55\xdd\x2c\x59\xaa\xaf\xd2\xa7\x4d\xf5\x67\x5b\x9c\x34\x15\xbe\xd8\xcb\x9c\xba\xac\x51\x47\x56\xcd\x4b\x9c\x92\xbd\x32\x9d\x54\x73\x1a\x92\x71\xc3\x19\xe5\xcf\x33\xc0\xe4\x66\xa2\x06\x4f\x12\xc8\xb1\x55\x2a\x34\x3c\x73\x6b\xac\xa7\x49\x17\x5c\x37\x57\x35\x2f\x35\x34\x01\x98\x4e\xfa\xbc\xb9\x5c\x37\x9e\x9d\xc0\xa9\xae\xac\x71\xef\x59\x37\x93\x2a\x85\x5d\xa9\x3e\xd7\xcf\x76\xc8\x57\xe6\x42\x6b\x7e\x9b\xba\xcf\x20\x21\x1b\x73\x84\x6c\x54\xd2\x12\x87\x98\xe3\x23\x17\x0d\x97\x85\x0e\xec\x7b\xbe\xed\x43\x5e\x25\x3d\xc4\xb6\x82\xcf\x5c\xa0\xa9\x1b\x8f\x5d\xcd\x0a\x18\xa9\xe5\x55\x0f\xed\xf6\xcb\x88\x7b\xd8\xd5\x3a\x82\x41\x55\x53\x76\x05\x3a\xe0\x3b\x5e\x68\x31\x62\x9f\xca\xbb\x52\x3d\xa4\x3f\x90\x26\x4a\xb7\xe9\x50\xfd\x5a\x72\x9f\x78\xd4\x55\xc8\xd5\x93\xce\x68\x1e\x3d\xc6\xd3\x3d\x53\x45\x21\x1c\x85\xb8\x97\x60\x2f\x99\xcd\xbf\xa8\xcc\xe6\x3e\x0a\x3e\x3d\x45\x1b\x07\xba\x2f\xbd\x3d\xbc\x24\x3b\xff\xe3\x24\x3b\xff\xcd\x54\xc2\x47\xa7\x3e\x5f\x7a\x9a\x27\xd2\xa0\x6f\x7e\xa2\xa7\x13\xc6\x46\x8f\xad\xb9\x83\x3c\x0e\xd9\xda\x97\xcd\xe8\xd8\x16\xf3\xca\x88\x91\x04\x5a\x45\x96\x90\x06\x68\x98\x72\x68\x26\xd8\x5c\x96\x72\xde\xce\x59\x49\xac\x80\x53\x4a\xc3\x17\x66\xe1\xe4\xac\x14\x0f\xc5\xc2\x25\x53\xf3\x27\x43\xa5\xc2\x94\xc0\xe6\x60\x5d\xb8\xc4\x3c\x40\x74\x30\x85\x8c\x34\x1e\x48\x92\xd5\x1c\x12\x07\x8c\x28\x99\x0f\x99\xa1\x32\x05\x10\x26\xa3\xb5\xf3\x7b\x2e\x0b\x73\x3c\xc7\xfe\xf9\x57\x6c\xcf\x7c\xcc\xf1\x63\x26\x5e\x60\x5c\x33\xad\x14\xe4\xa1\x44\xa2\x22\x68\xd0\xfe\x9a\xb9\xe8\x6c\xd4\xd2\xf7\x52\x37\xaa\x5e\xbc\x97\x73\x39\xc4\x24\xe8\xc6\x4a\x15\x39\x9b\x61\x79\xc8\xee\x28\x40\xdd\x32\x1a\x0d\x18\x5f\x6a\x55\x14\x37\x3c\xbb\x0b\xf8\x4a\x50\x17\x43\xda\xcd\x1c\x83\x5c\x5a\xa9\x67\xec\x46\x34\x0f\x02\xc3\x21\xc0\x4b\xc5\xfe\xe9\x48\x92\x42\xd6\x89\x78\x50\x5e\xaf\x67\x2d\x5f\x96\xd6\xe8\x30\xe0\x7c\x59\x00\x2b\x6a\x40\x28\x08\x30\x07\x9f\x2f\x15\x7c\xc1\xe1\x1d\xca\xa3\x70\x64\xc9\x54\x9d\x3b\x36\xd1\xcc\xa2\xc1\x73\x9f\xe7\xc8\x51\x57\xa2\x65\x18\x79\x51\x98\x2a\xd9\xb9\xca\x99\x5d\xc5\x5b\x8e\x8f\xc0\x8f\x1c\x7c\x05\xff\x1f\xdb\x51\x58\xe3\x06\xb1\x4c\xe6\x98\xba\x3c\xfa\x60\xe4\x77\x60\x8a\x4f\x88\x4e\x18\xe4\x67\x8c\xd4\x76\x17\x64\xdc\xe5\x7c\x05\xee\x1c\xbf\xc7\xe0\x31\x3e\x63\xe2\x33\x87\xf8\x26\xa3\xe9\x65\xaa\x5a\x38\xb5\xc4\x54\x16\x27\x27\xe9\x73\xf6\x51\x33\x77\x11\x2f\xea\x19\x6b\xf6\xcc\x15\x39\x7a\x57\x22\xc1\x6f\x54\x2a\x24\xf9\xdd\xdf\x78\x9a\xcc\xec\x14\x8a\xe7\xfa\xc0\x2d\x8d\x5a\x1f\xd4\xc2\xa5\xce\xf3\x3f\x7f\x55\xa9\x7c\xec\xc6\x74\x23\xc7\xd5\x15\xbd\x65\xef\xcb\xb6\x96\xef\x20\xd8\x6b\xe0\x7a\xe5\x8c\x90\x13\x76\xc8\xb4\x39\xc1\xcb\xcc\xed\xf1\x48\x89\xe0\x4e\x52\x53\xf8\x58\x13\x24\xab\xf6\x2b\x78\xf0\xc6\x7c\xda\xb8\x04\xd2\xa2\x41\xa3\x6b\x6e\xf3\x0a\x0b\x97\xfd\x7a\x4d\x3a\x33\x54\x2a\x2e\x5d\x22\xba\xc4\xda\xc3\x22\xcc\x26\xab\x43\x09\x55\x15\x3c\x33\x0b\x89\x02\xec\x22\x59\x4e\x79\xcc\x4a\xf1\x00\x7f\xad\xe3\x36\x5c\x76\x04\x7e\x8a\x9b\xb8\xc9\x5d\x61\x28\x23\x4c\xa7\xc0\x3a\x39\x61\xd6\x3f\x4a\xe9\x6d\x64\xba\xb5\x64\x8e\x40\x38\x04\xbf\x7c\x90\x5a\x07\x3f\x92\x99\x69\xa8\x34\x1c\xbd\xfd\x43\xd9\xdc\x6d\xe0\x98\x39\x4a\x63\x5c\x8f\x30\xe4\x60\xca\x66\x5c\xcf\x98\x2b\xed\xf3\xf6\x05\x96\xee\x58\x4e\xf8\x1d\xc4\x5a\x6d\x51\x5e\x88\x45\xe3\xf6\x56\x45\x51\xb6\xf7\x4a\xe6\xdc\xac\xf2\xb9\xc8\x66\xbc\x94\x7a\x8e\xfe\x10\xd9\x40\x60\x22\x9c\x2d\x24\x71\x9c\x7b\xcc\x7e\xbf\x14\x0f\xe6\xca\xe2\xe3\x7d\x2e\x6c\xb4\xef\x7a\x47\x91\x77\x68\x2d\xc5\xa5\x04\xb7\x23\x7f\xc0\xab\x1b\x2d\xea\x7b\x9f\x2e\x26\x30\x78\xec\xea\x68\xf2\xc5\x73\xdd\x43\xbc\xa1\xa6\xab\x71\xf6\xf3\x47\x92\x45\x65\xcd\xfc\x91\x03\xab\x6f\x85\x06\x62\x11\x7d\x74\x5a\x53\x28\x3d\xe3\x0d\x2b\x04\xd7\x0d\x7b\x6d\xd7\x3f\xc0\x07\xca\x1c\x4a\x81\x9b\x8c\x82\x2e\xeb\xb6\x0c\x0f\xf6\xc7\xc4\x28\xa6\x85\x3b\x56\xa8\x45\x73\xb0\xde\xc2\x18\xd8\x4f\xc9\xfe\x37\xaa\xe1\x45\x7a\x14\x02\x75\x94\xc6\x22\xee\x1d\xdb\x93\x65\x56\xb4\x00\x47\xc0\xd7\x00\xa2\x00\xc7\x6a\xfa\x8d\x6d\x9d\x76\x9b\x0e\x08\x76\xef\xd0\xae\xfe\x0d\x56\xc2\xca\x31\x30\x0b\x01\x92\x49\x82\xc9\x88\x3c\x63\x74\x90\x05\xc5\xdc\x6a\x2a\x43\x35\x7b\x0f\xf5\x7c\x88\x3e\xb3\xcb\xcc\x1c\x8c\x93\xce\x85\x63\x7f\x93\x6e\x46\xc2\xf5\x71\x6b\x3e\x6e\x3c\xe6\x0c\xb7\x64\xfd\x5f\xe4\x8a\x0f\x0f\x8a\xdf\x77\x72\x61\x46\xd7\x14\xe0\xd8\xa8\x4f\x25\x7f\xd6\x85\x59\x92\x31\xf3\xf7\x58\x91\x78\xcc\x88\x7c\x99\xda\x78\x65\xd1\x61\xb5\xc8\xcc\xa1\x13\x2a\x84\xf4\x7a\xff\xca\x14\x9c\xd1\x1b\x69\x79\x4f\x16\x8a\xe1\x36\xa1\x2a\x83\x51\xdd\x0e\xe2\x6a\x48\xed\xf3\xac\xa6\x43\x60\x72\xa3\x98\x94\xb7\xf8\x5a\x42\x29\xc0\xc7\x56\x9b\x45\xcf\x3c\xe6\xaf\xd0\x13\x76\x8e\x0a\x83\x83\x30\x00\x66\xf4\x3f\xd8\xb5\x7d\x0d\x6b\xbd\xde\x79\xa4\x2e\x1b\xd5\x12\x18\x23\x57\x19\xcf\x83\x39\xc7\x76\x83\x3d\x10\xc1\xa6\x9d\x96\x99\x2d\x7a\xbd\xf3\xb1\x3c\x16\x85\x80\x96\xda\x2b\x3e\xf0\xc5\xd2\xcf\x8f\xb3\xbc\x8b\xaa\x50\x8b\x34\x23\xf0\x3a\xd8\x0b\xf7\xfa\x2a\xf0\x85\x2b\xb8\x21\xfa\xc2\x7f\x00\xe1\x4c\xe6\x2b\x59\xc1\x6b\x24\x85\xc6\x81\xc3\x97\x21\xe5\xb3\xd9\xf4\x17\x78\x65\xbc\x1c\xf0\x06\xbc\x18\xfe\x5f\x60\x18\x7f\x14\x7b\x3b\x0d\x86\xb3\xb8\x3f\x3b\x38\xe2\xb2\x6b\x67\x6e\x06\xd1\x12\x22\xd8\x9c\x8f\x35\x03\xb8\x0a\x56\xc1\x17\x3e\xf8\x73\xb4\x58\xf8\xe3\x33\xce\xb1\xba\xcd\xf6\x6c\x11\x01\xe0\x45\xec\x63\x1d\x06\xae\x86\x65\x18\x80\x7e\xa1\x61\x10\x40\xee\xc5\xea\x7f\x5f\x14\x80\x69\x28\x9e\xb0\xe9\x46\x22\x83\xbc\x6f\x28\x24\xbd\xb0\x2d\x7d\xe0\xda\x09\x91\x17\x4c\xc2\x17\x84\x49\x08\x96\xf6\x13\x41\x09\xae\xa2\x01\x54\x42\xf4\x1c\x4f\x3b\xeb\xed\xf6\xcf\x5e\x00\x09\x5f\x14\x20\x01\x59\x71\xc8\xa9\xba\x7c\xb6\xb6\x62\x13\xf4\xb2\xff\x05\x9c\xf0\xdb\x82\x13\xbe\x20\xd0\x40\x2c\x48\x9e\xac\x04\x5c\x90\xcb\x78\xb9\xa3\xaa\x5f\x1e\xe8\x97\x49\x56\x84\x81\xaa\x56\x1a\x81\xe1\xcb\x96\x0d\x75\x84\x35\x59\x31\xec\xbb\x57\xea\x45\x9c\xbd\x5c\xb3\xbe\x18\xc9\x91\x8e\x9e\xb3\x61\x93\x6f\xd8\x72\xb6\x90\xe4\x2e\x08\xf4\x28\xbf\xe6\xd3\x90\x6b\x34\x45\x39\xa8\xb5\x57\x4e\x1c\xf0\xe3\xf1\x56\x27\xf3\x3a\x86\xf0\x07\x76\xc0\x43\x33\xf6\x7c\xc0\x7b\x66\x9a\xc4\x7d\x01\x1b\x7e\x47\xe6\x3e\x20\x34\xcc\xc3\xeb\x4a\x77\xd7\xf3\x1c\x15\x2a\x5e\x9c\x47\xdb\x3b\xa1\x5c\x6d\x4f\x6a\x3a\x79\xf7\x64\xc9\x39\x00\xb8\x8a\x9e\x0f\x22\xae\xd6\xbf\x09\x3f\x13\x16\xeb\xc3\x23\x70\x58\x7f\x08\xf4\xd5\x7a\x26\xf7\x8a\xb7\x3a\x49\x74\x18\xe4\x74\x74\x64\x56\xa1\x59\x12\x5f\x04\x89\x0e\xad\x23\xd9\x54\xd5\xca\xe7\x83\xe9\xbc\x95\x34\xc2\x07\xfc\x3c\x55\xad\x6e\x6b\xa1\xf5\xb1\xe0\x79\x21\x4b\xb1\x1c\x3f\xc7\x3f\xc3\xbc\xc1\x35\x52\x96\xd1\xac\x45\x57\x71\x48\xa0\x78\x07\x2d\x83\xda\xd9\x8d\x98\x82\xa4\x84\x6e\x04\x23\x8a\x73\x32\xe5\xb2\xb0\x58\xa0\x64\xdb\x09\x17\xa4\xcc\x41\xd0\x0a\x62\x9b\x80\xdc\xbd\xf8\x6a\xf0\x16\x65\x6a\x0c\x2f\xb8\x18\xdd\x78\xde\xe9\xe9\xc9\xe7\x4c\x08\xcc\xaf\x0a\xb7\x44\x3b\xdf\xba\x85\x74\x0f\xb9\x0d\xd7\x0e\x1a\x84\x17\xc2\x09\x3b\x53\x0d\x61\x8e\x5c\x07\xc3\xf9\x10\xba\x91\x73\x74\x3b\x78\xc4\x0b\xa6\x6d\x4d\x4e\xa8\x47\xcc\xd9\xc0\x46\x1c\x6b\x3a\x04\xcd\xca\x36\x4b\x87\xed\xc9\x89\x98\xb0\xaf\x5f\x7f\xfb\xb7\x6f\xff\xfe\xcd\x5f\xbf\xfd\x1b\xa4\x06\x74\xe9\x0a\xc3\xfc\x84\xd7\x3b\xa5\x62\x39\x75\x14\xfd\x01\x6b\x81\x02\xc1\xdc\x9c\x62\xd1\x75\x1b\xd5\xca\x0d\x80\xcc\x3c\x17\xd2\xef\x99\x41\x8c\x81\x59\xfd\xb7\x02\x32\x6e\x7f\x82\xb1\xd5\xe0\x1e\x2c\x0a\xea\x96\xed\xd5\xfa\x33\xbe\xe4\xd0\x0f\x55\xf0\x40\x01\xe8\x9e\xfe\x46\xf6\x91\xd3\x0a\xd4\x6d\xa3\x36\xfd\x64\x45\x67\x21\x38\xc8\xcd\xa9\x19\x3b\xa7\x91\x9b\x0a\x54\x29\xb6\xa6\x2f\x0c\x03\x3e\x01\xbe\xe8\x61\x7d\x36\x66\x9c\x52\xa4\x9a\x36\x87\x6b\xe1\x61\xa6\xb4\x40\x68\x18\x00\x47\x28\xc1\x21\x4a\x55\x19\x64\xec\x9c\x81\xbb\x59\x33\x0e\x59\x47\x83\x12\xf9\x26\x76\xdb\x4d\x60\x97\x7a\x10\xfa\x76\xd5\x15\x51\x1e\xff\xd6\x6a\x91\x84\xc1\xc5\xe0\x37\xd3\x93\xc9\x4a\xe4\x0e\x2e\xb7\x1f\xc4\xe2\xb1\x11\x69\x81\x41\xda\x42\xe4\x96\xa1\x49\x2d\xba\xb1\x8f\x23\xd5\x69\x20\xe9\x53\xc0\x93\x9b\x98\xd0\x06\xc1\x7a\x9d\x12\x56\xfb\x9a\x6f\x6e\xef\x5f\xe1\xe7\xb3\x4a\xc8\xc5\xa0\xb8\xbe\xea\x38\xc7\xbd\xde\x02\xe3\x97\x42\x10\x74\xc1\x03\xac\xe1\xf5\xad\x18\x5e\xdb\x6b\x81\xdf\x9e\x8a\xfe\x0b\x5c\xad\x57\xd1\xdf\xbf\x31\xfe\xcf\x0b\x89\xdf\x05\xf7\xe7\x47\xfe\xb9\x81\x7f\x09\xf7\xcc\xb6\x91\x7f\xeb\xe2\x4d\x96\x61\x4c\x56\xa8\xb7\xcb\x30\x26\xb0\xf4\xd7\xdf\x39\xb8\x53\x50\xea\x3c\x79\x43\x0c\xeb\x57\xdd\xcf\x96\xaa\x1c\x23\x89\xa9\xbd\xfb\x2c\xfd\x3e\xdb\x6b\x66\x42\xd6\x36\xcc\xc0\xdf\xfe\xed\xc9\xb7\x6e\x58\x48\x5b\x3e\x42\xba\x04\x2f\xad\x1e\x29\xa7\x09\x35\x09\x10\x4f\x1c\x8c\xa1\x1b\x23\xe2\x9d\x4d\xcf\xee\xc9\xf8\x9a\x01\xf8\xa9\xd7\xaf\x5e\xfd\x8f\x60\x07\x65\xbc\xe2\x99\x6c\x16\x20\x35\x16\x60\x05\x12\x12\x28\x0d\x6f\x44\xe7\x1b\x16\x27\x74\xd3\x22\x1d\xed\x42\x44\x5b\x31\x8c\x0f\xc1\xe6\x10\x5e\xcb\xe8\xf9\xa2\x0c\x0f\x9f\x75\x46\x17\xad\x13\xeb\x8f\xec\xa6\xcb\x00\xda\x09\x2d\x0c\xaf\xf8\xf6\x90\x45\x94\xd8\x96\xf0\x4f\xfd\xe3\x7c\xe9\x89\x48\x4a\x89\x3f\xcc\x67\xea\x61\x03\xdd\xe4\x37\xc4\x54\xf5\x5b\x7d\x85\x28\xab\x08\xc9\xb4\x15\x84\x55\xe0\x52\x59\xdf\x17\x18\x62\xab\x04\xae\x3f\x0b\xab\xea\xa2\xc0\x42\x6c\x55\xaf\xf5\x1b\x7b\x11\xdf\x5d\x02\x0d\x92\x1d\x95\x8f\xd5\xc0\xf9\x96\x2e\x17\x19\xc4\xbd\x92\x6a\xba\x67\xae\x4b\x8a\x4a\xb5\x04\x5b\x0d\x0e\x64\x5b\xb8\x4f\xdb\x34\xf0\xa5\x27\xb2\x37\x01\x3d\x5b\xa2\x5f\xf8\x3b\xf2\x2a\xcd\x7c\x3a\x24\xfa\x59\x4d\xd9\x94\x60\x65\x7a\xc2\xd8\xe9\x14\xf2\x43\x23\x01\x52\x21\xef\x90\x69\x4f\xd5\x99\xf0\x64\x62\xb6\x3c\x83\xd4\x40\xba\xad\xaa\x62\xe1\x9f\x22\x4b\x9c\x63\xba\x83\x04\x2c\xba\xe1\x35\x66\x54\x15\x65\x3e\x61\x17\xa1\x68\xfc\xd0\xea\xe6\xa2\x2d\x0f\xb7\xed\xf8\x3b\x3d\xbe\x30\x2d\x01\xff\x51\xdd\xa6\x00\xb0\xe6\x57\x67\x6b\x74\x33\xeb\x74\xf4\x5c\x66\x00\xd7\x00\x4e\x5e\x9a\x32\x4b\x93\x6d\x6d\x2c\x97\x22\x6b\x6b\xd9\x2c\x8e\x54\xd9\x88\xcf\x29\x03\xf5\xea\xf5\xf9\xfd\xd5\xd5\xf9\x69\x09\xd6\x98\x81\x0c\x5c\x71\x01\x4f\xe5\x07\x17\x7c\x4c\xcd\x75\x2b\x1c\x1b\x96\xb9\x63\xc2\x30\x9f\x96\x99\x9a\x83\x00\xa9\x8b\x04\xad\x14\xac\x88\xa9\xaa\x1f\x78\x9d\xfb\xd4\x4e\xf6\xed\x15\x46\x54\x2a\xd6\xb7\xa1\xda\x07\xbd\x5e\xbc\xc5\x07\xd1\x7e\x0a\xb2\x8e\xdb\x64\x83\xde\xc5\xa1\x02\x9e\xea\xa6\xe6\xd3\xa9\xcc\xdc\xe5\x29\x6c\xf6\x23\x45\x1a\x8d\x28\x35\x0b\xcd\x9b\x83\xbc\x99\x98\xc4\x1e\x6a\x31\x1f\x3d\xff\x78\x79\xfa\x7f\xd3\xa8\x73\x2b\x22\xe0\x64\x3b\x3d\x39\x39\x61\x97\x4d\x6e\x8e\xf6\x6f\x26\xaf\x47\x60\x1a\x21\x2d\x5f\x99\x9d\x87\x1d\x17\xb7\xb5\xa8\x0e\xda\x52\x7e\x66\x7a\x51\x36\xfc\xf3\x08\xce\x66\x98\x1a\x51\x17\xf4\xe3\xbe\x23\xc8\xe4\xb7\xdc\xc8\x01\x3f\x77\xe8\x72\x93\x76\x86\xc9\xf9\x33\x61\x47\xa8\x65\x9b\x23\x01\xe3\xd8\x2c\x4f\x7d\x36\xe3\x35\xcf\x1a\x51\x6b\x96\x4b\x6d\x85\x80\xf3\x2c\x79\x87\x0e\x2f\xd8\x35\x0c\xc5\xf5\x0e\xa4\x0b\x44\x55\xfe\xd3\xc5\xfb\x4e\x4f\x2f\xde\x1d\xb1\x6f\xfe\xed\xef\x7f\x9d\x30\x33\x42\xda\xb2\x44\xdf\x4a\x67\xb8\xdc\x3d\xd8\x85\xc0\xd2\x80\xad\x75\xe4\x7b\x90\x07\x86\x33\xce\x32\x50\xfd\x78\x51\x30\x2d\x90\x85\xd2\x4e\xf9\xe0\xba\x7c\xd4\x0e\xbb\x68\x0b\xf1\x23\x2f\xda\x84\x38\x48\x95\x8a\x31\x25\xb3\xa6\xa9\x9c\x6a\xaa\xd1\xb6\x06\x4d\x55\xb6\x79\x1a\xfc\x6c\x30\xc3\xc8\x42\x87\xee\xb5\x37\x07\x07\xd7\xed\xab\x57\xdf\x64\x33\xa5\x1b\xf8\x97\xa0\x1f\x60\xa0\xe1\x87\xff\x85\x3f\x68\xc1\xeb\x6c\x66\x06\x1e\x7f\x66\x63\xfa\x3f\x7d\xc1\xdc\x01\x6b\x41\xff\x35\xc5\xdc\x5d\xbc\xad\x8b\x80\xc8\xd3\x34\xca\x4e\xd1\xc8\x7a\x6d\xc9\xfd\x68\x77\x91\x3d\xb4\x50\xef\xb6\x6b\x0c\x42\x4c\x21\x89\x1e\xd9\xbf\x1a\x8b\xc2\xda\x3d\xd8\xc5\xb4\xd8\x68\x14\x37\xbf\x4f\x65\x6d\x1e\xfc\xaf\x5d\x73\x92\xef\x7e\xb5\xbb\x4a\x6e\x98\xfe\x26\xb0\x36\xf8\x73\x02\x78\x15\xb3\x8c\x40\x31\x1b\x34\x5b\x85\x2e\x4f\x3f\x01\xdb\x3d\x45\xba\xc2\xf9\x5f\xeb\x2c\x37\xa5\x9b\x73\x55\x37\x78\xfe\xf4\xd7\x59\xf8\xd8\x89\x43\x4e\x07\xa7\x59\x66\x40\x67\xa8\xea\xe6\x31\x6c\x92\x11\x9d\xe4\x8d\xb2\xa7\x70\x78\x00\xaf\x62\x95\x8c\x1b\xf8\x24\xc6\xcf\xb9\x2c\x77\x46\x3b\x73\xfe\x39\xe1\x6c\xe3\x09\x96\xc9\x39\x77\xf4\x92\xa6\xa1\xb4\xb2\x61\x64\x46\x0c\x42\xc2\x80\xc2\x7f\xbd\x6b\x8b\xf9\x78\xff\x0b\xb2\xf4\x67\x3e\x89\xb7\x47\x7f\x63\xf5\x5a\xb0\x5a\x48\xdf\x67\x86\x0f\x30\xad\x6a\x8e\x19\x52\x64\x79\x60\x06\x00\x65\x7b\xa4\xa7\x99\xdf\x4e\x8f\x75\x7f\xae\x6c\x35\x7f\xc4\x59\x42\xc3\xc6\xf3\xce\x92\xf9\xc6\x1a\xb3\x74\x0e\x19\xc5\x96\x06\x60\xbc\x9e\xfc\xdb\x60\x10\x06\xbd\xdf\x8f\xc0\x28\x45\x43\x94\x07\x07\xf7\xaf\x0f\xa8\xd8\xc4\x95\xf7\xd7\xca\x28\x35\xef\xd1\xe9\xf1\x05\xdb\x43\xae\xf4\xd7\xff\xf6\xf5\xe4\xf5\x5f\xff\x3e\x79\x3d\x79\x7d\xf0\xf5\xb7\xd7\x3b\xfb\x29\x02\x5f\x67\x61\xb6\xfa\x02\x88\x88\x33\xfc\x38\x92\x8a\x5f\x56\x22\xdb\x05\x0a\x02\x6b\x9e\x47\xdb\xa4\xf8\x9c\x89\xaa\x61\xa2\x6c\xea\xf0\x9a\x6b\x9a\x10\x87\x83\x91\x8f\x10\xe3\x32\x89\x45\x1a\xb4\x60\x73\xb2\xb4\xc5\x4a\x2a\xfa\x4c\xe6\x09\xea\x5f\xf8\xb5\x6f\x61\x35\x03\x10\xa2\x6a\x7a\x78\x9a\xd3\x73\x4a\x02\xf7\x23\x2f\x64\x6e\x4f\x5b\xbc\xe5\xf4\x07\x2d\x85\x1b\xc1\x8e\xf7\xbf\x7d\x82\x03\x82\x5f\x2f\x8c\x4a\xaa\xa6\xeb\x0f\x07\x2f\x37\x6c\x1a\xa3\xef\x21\xa2\xc9\xc9\x7a\x04\x3d\x99\x8b\x06\x2c\xfc\x05\xbc\xad\xda\x06\x72\x48\x99\x01\x80\x21\x82\xed\xb0\xe4\xc0\xeb\x69\x4a\xab\x77\x02\x9e\x75\x29\x1f\x3f\xfa\x8b\x13\xdc\x5f\x66\xf6\xad\x69\x0a\x1c\x91\xb2\xbc\x51\x6d\x09\xd0\xaf\x12\x8b\x91\xbf\x92\x93\x3a\x6f\x95\xfc\x48\xa1\x0c\x6e\x2e\x87\x25\xb3\xdf\x23\x2e\x06\x4b\xf5\x8a\xeb\xfd\x56\xde\xbb\x9c\x0e\x1a\xd4\xf2\xba\xe4\x45\xb1\x18\xc3\x27\xc0\x04\x66\xee\x3c\x23\x56\x28\x9e\xb3\x1b\x5e\x80\x1d\x9d\x34\xca\x11\x73\xa6\x29\x76\x79\xf9\x7e\xc4\xd4\x74\x2a\x6a\xb4\x9f\x63\x16\xf7\x7b\x4c\xd1\x00\x07\xb1\x59\x70\xa2\xc9\xc2\x2c\xd9\xc3\x62\xc0\x8f\xd1\x90\x18\xb0\x08\x2b\x1a\x6f\xfb\xca\x46\x21\x59\x2f\x11\x55\x2f\x50\xbf\x2f\x15\xea\xf7\xdf\x9b\xd8\x36\x44\xaf\x59\x2b\xb6\x8b\xf9\x81\x63\xcb\x6e\xf7\x3f\x02\x19\x2b\x35\x76\x55\x60\x58\xec\x36\x8e\xdc\x7c\x7f\xe8\x6e\x6f\x2f\xfe\xcc\x1e\xaa\x8f\x44\x4f\x76\x2c\x55\x43\x47\xb3\x37\xb0\x39\xa5\xb2\x28\x82\xa3\x16\xc1\x6e\xe6\xe8\x2c\x9d\xb5\xcd\x08\x5e\x73\xd3\x5c\xa5\xbc\x51\xf9\x33\x84\x99\xd3\x5f\xe6\x8e\xd8\xd7\xe8\xc2\xa2\x43\xc1\x8d\xa2\x9f\xd1\xa1\x6f\x0a\x4c\x87\x36\x05\x9f\x5e\x51\x3b\xe4\x18\x58\x5a\xfb\x46\xc2\xa0\x6d\x64\x31\x31\x03\xd9\xd4\x93\xd3\xb2\xf9\x58\x5f\xae\x6d\x7f\xa2\x09\x4a\x07\x31\x05\x0f\x53\xca\x95\xdd\x3a\x2f\x31\x4c\x5f\x7a\x0c\x53\x7f\xa6\xb6\xe2\xc6\x20\xd9\xf1\x12\xbc\xf4\xa2\x97\x3c\x7f\xa0\x54\x28\xa9\x9e\x76\x5a\x5d\x24\x5d\x6e\xc1\xc3\x2e\x2b\x1c\xde\x22\x6d\x2e\x67\xeb\x26\xd0\xac\x2d\x73\x51\x7b\x56\x3f\x91\xbb\xcc\xb7\x74\x5d\xc2\x4b\x16\x1d\x7e\xf6\x52\x18\x78\xbf\xdc\xaa\x04\x7f\x17\xd8\xab\x85\xd9\x22\x98\x4e\x17\x0e\x45\x4a\x73\xdd\x64\xb3\x11\x3a\x35\x6b\xd5\x36\x3d\x9f\x58\x32\x93\x97\x73\xab\x75\x5d\x07\xab\xaf\x69\xe6\xab\x69\xf3\xb0\x15\x2d\xd3\xb6\x28\x16\xec\xd7\x96\x17\xd8\xf3\x5c\xcd\xb9\x2c\x83\x94\xce\x74\xb1\x84\x0e\x8c\x06\x1d\x34\x04\xfb\x16\xe4\x82\xc2\x70\xe5\x7b\xc9\x03\xb7\xb3\x79\x7a\x0d\x2d\x0a\xdc\x3e\xe6\xc7\x4f\x17\xa7\x61\xbd\xe4\xf7\xbc\x78\x77\xf4\x86\xbd\x9e\xb0\xd3\x73\xed\xd8\x9b\xc8\x1e\x15\xfa\xa0\x78\xd9\x1b\x16\xb8\xd0\x03\x66\x81\x83\xdf\x18\x87\xf8\xba\xbc\x6e\x18\x3b\x3d\x77\x7e\x55\xa3\x48\x53\x0b\x2a\x0e\x0a\xa5\x15\xaf\xd7\xe5\xd7\x68\xb9\xfa\xe5\xcd\x2f\x2c\x17\x90\x37\x15\x93\x44\x99\x46\xd4\xc2\xac\x13\x58\x11\x22\xe3\xad\x16\x64\x48\xef\x36\x12\x3f\xe8\x5b\x1a\x2a\x0c\xbe\xd5\xa6\x56\xe9\x33\x12\xbe\xf9\xfb\x2b\x58\x30\xe0\x07\xe2\x65\x8e\x95\xbc\xf9\xf6\xdb\x6f\xdc\xcf\xa6\x7d\x6f\xc9\xea\xae\x05\x48\xd1\x6c\x06\x16\x5a\xea\xd9\xb4\x35\xd2\x60\x68\x79\xa6\xfc\x7d\xb0\x38\x03\x97\x4b\x6f\xa1\xb1\xd3\xa9\x2f\x28\x75\xdf\xdf\x66\x7b\x03\xab\x1a\xd5\x42\xeb\x5d\x43\x83\x87\x2a\xc3\x80\x1b\x91\x2f\x5b\xcc\x5e\xa6\x9a\xfe\x3e\xdd\xad\xe2\x3d\x72\xeb\x6b\x52\xe9\x28\xa2\xe0\x61\x07\x7d\x6b\x07\x00\xdc\x64\x1a\xc2\x32\x20\xd7\x54\xa3\x10\xc0\xb3\x7a\xaf\x0e\xba\xb5\x0f\xad\x23\xd3\x49\x89\x8c\x57\x08\xc2\x9a\x92\x34\x8a\x66\x19\x39\x66\x55\xb9\x6b\x83\xdd\x78\xb9\x40\xfb\x29\x3b\xb4\x98\x56\x0a\xc7\xdf\xa5\x1a\xd1\xb7\x06\xf2\x71\xd7\x25\xe3\xed\x62\xf4\x5d\x3e\x63\x44\xa4\xf0\xc2\xc7\x05\x80\x92\xa2\x78\x4e\x76\xb0\x3a\x04\xa1\xaa\xda\xb6\xdf\xb4\xb2\x50\xb7\xe8\x71\xc5\xda\x17\xe6\xbe\x50\xa8\x1b\x5e\xd8\x42\x5b\xf3\xb5\x43\x6f\x92\x44\xc7\xd6\xd7\x0a\xf0\x63\x38\x13\x1c\xb6\xc6\xda\x00\xe3\x3b\x65\xd7\xc3\xac\x6a\x56\x2a\x78\xd5\x32\xeb\x8e\xa2\x25\x0f\xd1\x0c\xa5\x3b\x41\x3a\xd3\xf7\x3c\xea\x1b\x9c\x86\x66\x79\x37\x45\x0a\x3e\xf7\xfe\x32\xce\x65\x35\xe9\x48\x26\xbb\x7e\x41\x6e\x52\xfa\xb4\x20\xbb\x9f\x79\xdf\xfc\x34\x62\xdf\x7e\xfb\x0d\x0c\xc8\xdc\x4c\x68\x05\x4c\x15\xf3\x1b\xa3\xce\x59\x25\x1e\x86\xd7\xce\x6e\x2e\xa7\x70\x2d\x6a\x60\xb4\xf5\x08\x2d\xcd\xd6\x04\x6d\xeb\xf8\x1c\x08\x08\x73\xf0\x80\x98\xe4\x59\xa6\xea\x9c\x9c\xdf\x56\xf8\xc0\xb9\xe4\x85\x48\x33\xab\x55\x7b\x4b\xa9\x52\xcf\x4e\xa1\x99\x6e\x88\x46\x64\xd9\x66\xd2\x1a\x7a\xfd\xa2\x9c\xb6\xc5\x54\x22\xf6\x2d\x2c\xe1\x3a\x7e\x79\x76\xfa\x3c\xd3\x74\xf5\xfe\x72\x13\x2b\xf9\x10\xa4\x3e\x7a\xec\x44\xd1\x6a\xf3\xc8\x4a\x29\x64\x76\xf1\x5b\xda\xc5\x89\xa0\x91\xe0\xa9\xc5\x7d\x0c\x31\xee\x5a\x99\x30\xb6\x42\x61\x93\x38\x84\xf0\x43\xce\x4c\xb2\xee\xa0\x99\x31\x1e\x1a\x31\xb3\x42\x62\xc9\x0d\x4c\x27\xb0\xe2\x0a\xbe\x10\x35\xd3\x04\xb8\xea\xe9\x62\xfe\xd0\x5e\x4f\xf1\x4a\x4c\x9b\xd1\xbc\x28\xd9\x6c\x24\x86\xb4\xf7\xf2\xd0\x21\x0e\x1b\xd6\xd4\x07\xd1\xa9\x02\xf5\x11\xf2\xe0\x58\x9f\x18\x72\x21\xc4\x41\xcd\x66\x83\x1c\xc4\x08\xb2\xa6\xd0\x98\xeb\x3a\x0e\x25\x33\x8f\x1e\x64\x91\x67\xe6\x66\x02\xb2\x50\x8b\x06\x64\xb4\x85\x13\x0f\x49\xf4\x68\xf3\x48\xfd\xff\xb3\xf7\x2e\xca\x71\xe4\xd8\xd9\xe0\xab\x20\xe8\x75\x90\xea\x2d\x16\xa5\xee\x76\xdb\x56\xc7\x1f\x5e\xb6\x2e\x33\xdc\x51\x4b\x5c\x92\x6a\xdb\x3b\x9c\x0d\xa1\x32\x51\x55\x30\xb3\x12\x35\x89\x4c\x92\x35\x9e\x8e\xf8\x1f\x64\xf7\xe5\xfe\x27\xd9\xc0\x39\x07\xb7\x4c\x64\xdd\x58\x94\xa8\xee\x72\x84\x7b\xa8\x4a\x24\x12\x97\x83\x83\x73\xfd\x8e\x5d\x15\x38\x6f\x85\x18\xd7\x3d\xc5\x93\x57\xfa\x8e\x6c\x09\xf0\x1e\xc3\x8e\x7b\x96\x2a\xd7\x49\xe5\xc0\x2d\x23\x8f\xfc\x2f\x8e\x2f\xab\x12\xd9\xd7\x5b\x7b\x93\xc1\x68\xbb\xd7\x99\x79\xc7\x48\x32\x98\xb9\x45\xe2\x8b\xe1\x2f\x8e\x05\xf1\x42\x95\x5e\x2c\xb2\x8f\xcc\x8a\xe3\xc6\x8a\x12\x97\x6c\x5c\xc8\xac\xd6\x5e\x96\xbf\x06\x12\xb8\x3e\x60\x53\xc1\x8d\xd2\x81\x77\x6a\x43\x09\xaa\xb1\x30\x3b\x68\xf5\x4d\xbb\x0a\xbb\x43\xd3\x83\x2c\x8e\x32\xf7\xc9\x72\xe6\x0d\x10\xef\xa9\xff\xf0\x25\x9a\xd1\x56\xf1\x4d\x91\xa3\x77\x6b\x27\x76\xd4\xcb\x2a\x57\x76\xd4\x78\xd8\x7a\xd7\x1f\x61\x88\x9d\xb4\x4a\x4a\x70\x01\xbb\xf8\x33\x50\xbf\x00\x68\x7d\x0c\xf0\x81\x7b\xdf\xd6\xde\xb7\xb5\xb7\x21\x3d\x55\xdf\xd6\x6a\x34\x06\xbc\x9d\xa4\x8e\x39\xc2\x96\x6a\x43\x27\x80\x65\x27\x36\xae\x98\x5b\x6e\x69\xe5\x8a\x3a\x79\xb3\xc4\xe2\xb5\x0d\xf3\xf5\xfd\x6d\xc4\x86\xfd\x6b\xc3\xde\xfe\x7a\x22\x8e\x88\x03\xbb\x98\xdb\x56\x88\x11\x95\xa0\xdc\x32\xc4\xc8\xf6\x1a\x08\x43\x10\x98\x48\x5a\x0c\x04\x24\x92\x16\x0b\x79\x15\x52\x33\xb3\xc8\xc7\x85\x39\x04\xe6\xd6\x7e\x31\xfc\x97\xd5\xb5\xab\x4d\x67\x09\x99\xd8\x16\x3f\x13\xba\xb6\x77\x32\x7e\xd7\x50\xaa\x6a\xea\x89\x0a\x82\x8d\x87\xec\x0d\xcf\xa6\xcc\xc8\x40\xb1\x1c\x07\xe0\x0f\xb3\x11\x98\xc0\x1a\x8d\x65\x46\x40\x59\xe6\x05\xfb\x70\x41\xa2\x46\xa8\x85\x43\x31\x1d\xc0\xf5\x96\x5a\x03\x98\x87\x0b\x94\x72\xf5\x5e\x8c\x52\x8a\x63\x39\xb2\x4b\x44\x26\xac\xba\x92\x36\x3d\xdb\x34\x78\x96\xf8\x00\x71\x5b\x58\x3e\x27\xeb\xf3\xd0\x82\x60\x66\x41\xe6\x4c\xff\x6d\x4e\x31\xe8\x4e\xe6\x22\x40\xe6\x70\x9b\xec\xf0\xc2\xce\x40\x04\x27\x91\xb5\x88\x2d\x26\xbb\xd0\xbf\x22\x3a\x02\xe7\x1e\x28\xcb\x89\xec\xfe\xc4\x86\xa6\xf7\xd2\x11\xac\x4b\x87\x77\xbc\x09\xcd\x2d\xe4\xc4\x09\xb7\xd9\xc8\xfe\x4b\xf6\x99\x19\x82\x23\x05\x7d\xeb\x1d\x8f\x06\xbe\x64\xe3\x83\x76\x0f\xdb\xff\x87\x6e\xbd\x3f\x0d\x90\x0c\xf4\xe8\xbb\x2f\x44\xb5\x96\x12\x1e\xbd\xb5\xd4\xeb\xb0\x0d\x0f\x0e\x3d\x15\x9b\x30\xe1\xe0\x3d\xe2\x69\xbd\xdd\xba\xba\x4f\x56\x2e\x1e\x63\x4a\xd9\x92\x8d\x09\xf8\xe6\xe9\xfb\xd7\x20\x51\xad\x56\x77\x4d\xab\xfe\x83\x44\xb2\x22\x25\xdb\x78\xa4\x22\xb0\x61\x1a\xa5\x2b\xcb\xac\xe9\xf4\x29\x1e\x27\x3b\xfc\x25\x27\x09\x9b\x6c\x73\x88\x1e\xe5\x0c\x81\x18\xfc\x99\x4e\xd1\x60\xd5\xbd\x88\xb4\xd4\xde\xfb\x19\xcf\x05\x6d\xbc\x04\x53\x76\xb9\x7a\xff\xf7\x37\xe7\x93\xb9\x39\x37\xe4\x9d\x3d\xe0\xba\x5b\x30\x4d\x1b\xc4\xb2\x36\xb7\x34\x2f\x38\x61\x95\x91\xf9\xa0\x0b\xe6\x1b\x9b\x17\xa8\x6e\xe0\x3e\x24\xe6\x49\x86\xc4\xf8\x5d\xb3\x8b\xd5\xd9\xae\x9d\xd3\xfd\x3e\x3a\x66\x5f\x77\xf8\x91\x23\x63\xba\x1c\x73\x17\x96\x03\xb8\xa6\x77\xc2\x7a\x4d\x4f\x1b\xb1\x5e\xf3\xc2\x6a\xd9\x51\xce\x7b\x32\xa3\x7c\x0a\x13\xf2\x49\xca\x3d\x53\x65\x6c\x58\xf0\x29\x4f\xed\x6b\x18\x10\xe5\xcc\x15\x5b\x12\xc6\x09\x99\x94\xa0\xbc\x00\x36\xb3\xd9\x1f\xdb\x7a\x9d\x29\xab\x8b\x10\x68\xf5\x9c\x67\xe2\xb2\x17\x72\x0d\x9f\x68\x00\x9e\x85\xa6\x9a\xe4\x95\xac\x68\x74\x2d\xaa\x63\x9d\xa9\xb9\xc8\x09\xab\x26\xf2\xba\xdb\xcc\x6e\xed\x0e\x4b\x0c\xdf\xa6\xc5\x8c\x97\xb5\xcc\xf4\x8f\x46\x62\xb0\xf2\xc7\xa8\xa9\x6d\xcd\x5d\x59\x53\x63\x14\x6d\xdc\x68\xf5\xf0\xba\xbc\x2e\xcf\xc0\x34\x7e\x19\xd4\x78\xe5\x85\x56\x66\x01\x9d\x90\x22\x12\xc4\x00\x78\x52\x77\x53\x55\x08\xd7\xb9\x69\x78\xee\x8c\x38\x66\x72\x51\xc7\xd4\x93\x5f\x80\x10\x49\xee\x7d\x7b\x09\x87\xec\x83\xd9\xaa\x3b\xa9\x45\x7b\x02\xf0\x8d\x4d\xbb\xdb\x2d\xf0\x5c\x60\x85\x4a\xe1\x34\x59\x7c\xc4\xd6\x4e\x91\x20\x4c\x53\x39\xf7\x58\x91\x8f\xb3\xd1\x80\xe9\x47\x5b\xdc\x59\x90\xa7\xbe\xd1\x6b\x7d\x03\xd9\xc2\xa1\x66\xea\xae\xf4\x3d\xef\x74\xaf\x37\x94\x76\xd3\xa1\xe3\x5b\xb1\x5c\x90\xec\x37\x61\xb9\x3d\x91\xf6\x5d\x4b\x66\x82\xdf\x8e\x59\x1b\x45\x01\xc2\xd5\x70\x99\x31\xaa\x7f\x5e\xa9\x5a\x65\xaa\x18\x32\x1c\xbe\xe1\x9e\x1e\x40\x8a\xb3\xb2\x99\x89\x0a\x34\x2f\x85\xf9\x6e\xb9\xeb\x84\x63\x85\xc5\x2e\x9b\x36\x52\x0a\xe5\x28\xe7\xa4\x8a\xb5\xb5\x30\xe4\x57\x88\x1e\x0a\x10\x50\x18\x94\x43\xe4\x3f\x40\x55\x29\xf0\xf2\xc6\xa1\x66\x76\xd0\x60\xd0\x80\xee\x5c\x00\x0a\x5a\x9a\x77\x17\xa9\x0f\x2b\x0d\x1f\xeb\xae\xef\x07\xf2\x33\xc3\xda\x09\x3f\xaa\xa3\xab\x57\xe7\x03\xf6\xf1\xf5\x39\x04\x16\x5d\xbe\xba\x3a\x7f\x66\x71\x49\x3a\x66\x6d\x98\x76\x04\xa0\x3a\x08\x57\x33\x44\xbc\xb8\x7a\x75\xfe\x70\x57\x6f\x0f\x98\xf6\x16\xa4\x6c\x13\x97\xd6\x26\xe5\xcb\x18\x92\x2b\x8d\xf5\x10\xb0\xe0\x8e\x1a\x26\x7a\xf2\x4c\xad\x61\x42\x50\xc8\x22\xe6\x96\x02\x60\x01\x9f\xcf\x0b\xe9\xa3\x72\x1d\xcf\x42\x64\xd4\x0f\x6d\xfb\x6f\xe0\xbf\x40\x3d\xbd\x12\x14\x06\x1a\xcd\x5d\x3a\xf6\xe7\xe2\x8e\x55\xce\x8e\xc0\x3a\x80\x37\xbf\x93\x6d\x1c\x17\xe4\x1e\xc9\x85\xbe\xf6\x6c\xc0\x3e\x5c\xac\x65\x0f\x08\x26\xc6\x78\x56\x29\x8d\x07\x89\xa4\x9f\xa4\xa6\xeb\x01\x5e\x1d\x7b\x0d\x6b\xc6\xc3\xc9\xed\xb1\xa3\x78\x23\x46\xdc\x33\x84\xcd\xd2\x97\xdb\x0b\x07\x73\x07\xe4\x42\xcd\xb4\x2a\x04\x46\xe9\x8a\x52\x63\xe8\x1d\x21\x7c\x83\x31\x28\xbc\xcf\x8c\x42\xa0\x95\xab\xa9\x4e\xd4\xfe\xac\x1d\x9f\xb8\xc4\xb5\xb3\x73\xbd\xf0\x4d\x1c\x7c\x27\xfb\x92\x9b\x2d\xd1\xd9\x48\xb3\xf5\xa9\xee\xaa\x4b\x6c\x80\x67\x63\x68\x68\x73\xaa\xeb\x92\x10\xe9\xa3\xd2\xed\xf4\xa1\x66\x85\x32\x2c\xbc\x54\xb9\x58\x9b\xe8\xc2\x89\x7d\x41\xaa\xcb\x95\xd0\x3e\x0c\x1b\x42\x5f\x1f\x89\xe8\x1e\x91\xa8\xda\x21\x9d\x4b\x25\xcd\xcb\x40\x58\xb2\x38\x2d\x16\xd6\xaa\xb3\x3c\x64\x70\x40\x8a\xd3\x74\x13\xc1\xf8\xbb\xc4\x69\x08\xce\x53\xa6\x59\xc9\xd8\x3a\x6b\x51\x16\x61\x67\x86\xec\x67\x1b\x10\x6a\x83\x71\xe6\x96\x0a\x8d\x90\x80\x6f\xf9\x10\x4f\x72\x07\x23\x89\x23\xa2\x11\x88\x13\x9a\xc2\x9e\xe2\xa1\x8c\x55\xc5\x20\xb5\x3f\xb2\xf7\x63\xa1\x8a\x5b\x51\x2c\xda\x1c\xe0\xfd\x87\x2b\x1f\xd6\x65\xb6\x7d\x6d\xb1\x1a\x90\x01\x90\xc4\x52\x64\x69\x45\x6a\x67\x81\x2e\x1f\x45\xe0\x34\x5b\x6e\xf6\xeb\x6a\x31\x4f\xc5\x30\x5b\x66\x02\x67\x0d\x0c\x2f\x9e\x7e\xe3\xfd\xc6\xe4\x15\x34\x08\x21\x58\x84\x85\x13\x44\xac\x08\xa2\xb4\xeb\x83\x01\xbb\x3e\x78\xe3\xfe\x06\xcc\x44\x1b\xd6\x67\x7f\x4e\x9c\xc5\x96\x24\x22\x2d\xae\x9d\x0b\x78\x0e\x42\xff\x21\x0c\x5e\x94\x88\x76\xe1\xc2\x8d\x2b\xf6\x26\xd8\xe8\x1f\x3d\xd1\xc0\x84\x2c\xb4\x18\x2f\x6d\x33\x4d\x79\x8b\x10\x43\xa9\x75\x33\x23\xea\x04\xb8\x71\x6a\x84\x06\x4d\xdc\x2a\xea\xed\xe8\x6e\x2a\xd0\x04\x50\x59\x18\xb4\x45\xd8\xbb\x1d\x0f\x75\xff\xac\xa7\xff\x30\x22\x1c\x40\x0c\x39\xc1\xc8\x55\xb2\x16\x80\xdf\x06\xcf\x8f\x41\x1e\xc5\x2d\x1c\x40\x43\x90\xe0\x2c\x14\x7e\xb1\x70\xf1\xd1\xc1\x36\xb3\x3f\x07\x5b\xc0\xfe\x32\x64\xef\xe4\x8d\x30\xb2\x00\xc4\x55\x26\xbe\x66\x85\x06\xc4\x0c\x09\x12\x53\x79\x6d\xee\x02\xe1\xd1\x34\xf0\xda\x08\x46\xe2\x83\xef\xc3\x01\xa0\xdd\x12\x23\x33\x30\x1c\x35\x1c\xd1\x91\x96\x66\xf3\x74\x03\x15\x48\xe8\xdb\x77\x0e\xa9\xc4\xbe\x91\xd8\xaa\x32\xa7\x76\x5e\xbc\xb1\x14\x52\x2b\xf6\x5f\x66\x40\x7f\x0e\x69\x91\xfd\xe5\x41\x57\xfa\xe6\x90\x24\xa0\x55\x62\xd4\x6f\x5f\x84\x63\xa7\x09\x9b\xa8\x5b\x51\x51\xf4\x33\x1f\xc9\x42\xd6\x0b\x57\xdc\x23\xce\xc5\x20\xe2\xa9\x03\x34\x47\x46\x70\x8e\x31\xfc\x56\xc8\x6e\x5d\x19\x74\x57\xb6\xa5\x0b\xcd\xd4\x1d\xd4\x03\x01\x3e\xf7\x9e\x8b\x7d\xe8\xe3\xd3\x75\x10\xfc\x86\x43\x1f\x35\x66\x94\xf9\x63\x45\x67\x58\x94\x80\x8c\xbb\x56\x0d\x87\x75\x18\xdb\xce\x42\x1c\xbb\x2c\x73\x4b\x67\x45\xa7\xa3\xb4\xaf\x38\xd9\x2c\x76\x06\x76\xb9\xa1\xf5\x0b\xae\x66\x9c\xd0\xdb\x83\x10\xee\xf6\xbe\xe0\xcf\xe9\x0b\x96\x9f\xd9\x17\xdc\x25\xf7\xbd\x3f\x78\xef\x0f\x7e\x5c\x7f\x70\x9a\x33\xee\x8a\xcd\xa6\x2d\xbb\xc9\x66\x4b\x2f\xa6\xd5\xbc\x15\xba\x78\x10\x6f\xd5\xe2\x9d\x2c\x9b\x7b\xf3\x6b\x53\x9e\xea\x8f\x1a\x40\x38\x01\x16\x5e\xcc\x0c\x3f\x2c\xa0\x3b\xb3\x76\x63\x0d\x7f\x26\x18\xb1\x51\x82\xce\x2b\x79\x2b\x0b\x31\x11\x6f\x74\xc6\x8b\x9e\x12\x2b\x7d\x2d\x59\x2e\x30\xef\x4a\x68\x08\xa4\x04\x09\x3d\xe3\xa5\x3d\x66\x3e\x7f\x6c\x6e\x5f\x66\xc2\xbd\xdd\xcd\x22\x0e\x8d\xf5\x75\x15\x65\xc0\x07\x55\x08\x49\x79\x7b\x75\x79\xf6\xba\x92\x66\xeb\x13\xf7\x48\xbb\x09\x72\x9f\x3b\x43\xef\x85\xb3\x3b\x16\xb2\x14\xec\xd5\xe5\x19\xcb\xa9\x11\x82\x1c\x53\xb2\x77\xa8\x9b\x0a\x5b\x10\x52\xcc\x46\x22\x0f\xa1\x27\xb1\xd4\xe4\x5c\x64\x81\x99\x04\xb9\x1b\xd6\x5e\x2b\x55\xf4\x05\x58\x9c\xa6\xb4\x1f\xef\xf6\xb2\x5b\x26\xdd\x5e\x07\x38\x85\x76\xfd\xf8\x1c\x95\x34\x99\x32\xa8\x24\x1a\xc5\x97\x4b\x16\x3e\x41\xd3\x04\xa2\x46\xd2\xde\x93\xd2\x96\x3b\x23\x6e\xa0\xb5\xc5\xbd\x96\xa1\x09\xc5\x30\x75\xa3\xf7\xc1\x22\x7b\x03\x24\xe3\x4d\x3d\x55\xd5\x21\x00\xa9\x67\x95\x40\xfa\xf9\x4f\xab\xbd\x1b\x36\x8e\xd1\xaf\x7e\x5c\xe6\x72\xc0\xd8\xdd\xd4\x5c\xcc\xa5\x6e\x0f\xd4\xeb\x4a\xcd\xc3\x87\x9b\x65\x68\x52\xef\x6f\x0b\x71\xff\x8b\x2a\x9a\xd9\x92\xd5\x0c\xda\x24\x08\xd2\xda\xb2\x4d\xab\x5b\x6c\x35\x64\xec\x8d\x0d\xcd\x2c\xa5\xd1\xf4\xa3\xa2\x9f\xbc\x28\xc2\xd6\x76\xf1\xb0\x4c\x24\xda\x0b\xa0\x72\x89\x20\xb0\x0e\x01\x6a\xb7\xbc\x15\xe8\x1e\xbc\xb3\xee\xed\x46\xf3\x89\x4b\x96\x0c\x3b\x0c\xdd\x39\x25\xa5\x6b\xd2\xb3\xeb\x03\x32\x73\x3e\x0a\xc5\xfa\x95\x0a\xd7\x18\x40\xb2\xd3\xa8\xe5\xed\x16\xc1\xfa\xb2\xf6\x02\x23\xd6\xb7\x69\x35\xa4\xe5\x4d\xac\xab\x6f\x14\x2d\xeb\xa3\xcc\xd6\x8e\x3a\x9c\xeb\x79\xa5\xb2\x9f\x55\x53\xd6\x3d\x16\xcf\xd3\x54\xb3\x25\x54\x15\x37\x1c\x2e\xa5\x2b\x74\x1e\x43\x11\x35\x60\xc8\xd1\xbb\x31\x95\x5d\xa1\x18\x4e\xd8\xe7\x10\x9e\x10\x35\x1e\x0b\x6e\xe4\x0b\x36\x2e\xf8\xc4\xf2\x50\x84\x54\xdf\xea\x94\x7d\x2c\x35\x1f\x8b\xcb\x85\xce\x92\xa0\x0e\xa9\x56\x31\xdb\x0a\xb8\xba\x5d\x99\x06\x5a\x33\x8d\xcd\xe3\x5b\xa8\x84\xa4\x66\x08\xb3\x46\xb4\x66\x73\x8a\xd0\xbb\xcf\xd9\xbc\xe0\xb2\xa4\xf7\x28\xf5\xba\x32\xd2\x27\xf0\xb4\xeb\x83\x6f\xae\x0f\xcc\x1f\xe8\x79\xc8\xb8\x4e\x54\xb4\x85\x28\x92\x79\x25\xc6\xf2\x3e\xdc\x2b\x1a\xca\x90\x5d\x22\xd6\xc4\x37\x74\x99\x18\xba\x8c\x47\x8b\x56\x59\x0b\x02\xf4\xa7\x66\x24\x0a\x51\xb3\x29\xb7\x3e\x0f\xa2\x03\xf3\x62\x7a\xba\xe1\x82\x18\x7e\x7d\xab\x64\x4e\x9a\x8e\x61\xb1\xd7\xe5\x75\xf9\x86\xc0\x94\x5f\x32\x31\x9c\x0c\xd9\xf5\xc1\x58\xa9\x13\x33\x39\xf2\xc8\xe2\x0f\x23\x5e\xa1\xcd\x1c\xff\xf1\x37\xf3\x0f\xc0\xf0\xf5\x2f\x0d\xdb\x2f\x0d\xc3\x97\x86\xc1\x4b\x1b\x91\x06\xed\xd7\x69\xbe\xe2\x4a\x4b\xb7\xf3\xd0\xa1\x68\x7f\x25\x37\x4c\xf7\x7a\x73\x26\xc9\x3c\xa8\xdc\xe2\x2b\x48\x37\x65\x11\xa4\x6c\xc0\x65\xee\x8b\x69\x17\xc5\x82\xe5\x95\x9a\x13\x32\x84\xbb\xa2\x86\x0c\xef\x30\xbe\x58\x71\x85\xf5\x8c\x7d\xe9\x2d\x16\x5f\xb3\x38\x6c\xe7\x1a\x0d\x10\x96\x9c\x31\x1c\x82\x49\x84\xe8\xe2\x6c\x13\xef\x4f\xdd\xa3\xab\xa2\xeb\xfb\xb7\x6b\x6d\xe9\x73\xc5\x0b\x16\x87\xa1\xb3\x8d\x0e\xb9\xc1\x7a\x3a\xb8\x2b\x04\x6d\x44\x95\x89\x39\xbc\x80\xf3\xec\x84\x53\xd8\xe9\x12\x4a\x83\x13\x00\x16\xbd\x90\x16\x44\xc7\xaa\x1a\xc9\x3c\x17\x65\x2f\x3f\x6a\xb7\xe8\xe5\x45\xae\xe1\x53\x60\x43\x9d\xc1\x24\x19\x51\xc8\x81\xdc\x1b\xcb\x19\x06\x36\xdb\x94\x63\x44\x6f\xed\x86\x65\x58\x9d\xa8\xbb\x61\xda\x95\x9c\xaa\xd7\xa8\x50\xe5\xaa\x72\x59\x54\x09\x2a\x3a\x99\x28\x51\xb5\x85\x74\xd0\x53\x44\xed\xd7\x01\x80\xa9\x9c\x9d\xbf\xea\x8e\x9f\x1e\xb4\x14\xb3\x40\x4b\x0d\xa2\x68\x8c\x6a\xaa\xc6\x00\x8e\x61\x5e\x71\xc1\x83\x1d\x4d\x24\x20\x79\xd3\x3f\xf9\x53\xd3\x1f\xb7\x69\x25\x1b\x0e\xc0\xbe\xb6\xf6\x20\xce\xcf\x5e\xa7\x07\x70\x7e\xf6\x7a\xd3\x8f\x9b\x57\xd6\xff\x70\x3a\xb7\xcb\x3d\x0a\x3f\x8e\x67\xce\x95\x96\x61\x41\x55\xb8\x20\x70\x05\x75\x4d\xb5\x7b\xe9\x32\xae\x89\x03\x61\x13\x96\xd3\x25\x8c\x74\xfe\xd9\x3a\x6a\xfd\x08\xca\x61\x1a\xce\xe1\xdf\x4b\x2f\x5a\x25\x78\xfe\xa1\x2c\x16\x17\x4a\xd5\x6f\x65\x21\xf4\x42\xd7\x22\x91\x1b\x99\x6e\x87\x4a\x8a\xad\x84\x5e\x35\x54\x48\x09\xab\xe3\xb9\xdb\x17\x4b\x1d\x34\xae\x0a\x96\xe9\x0b\xa5\xd8\x4a\xa9\x9a\x8d\x65\x01\x02\x4f\x2d\x66\x36\xdc\x32\xbc\xba\xa3\x6b\x3a\xac\x6f\x14\xf4\x58\xaa\xf2\xb8\xbf\x57\x14\x7c\x2f\xcf\xad\xad\x39\x17\xe5\x22\x0a\xd8\xa1\x09\x8c\x79\xa1\x45\xeb\xeb\x60\x5a\x5e\x67\xe8\x66\x2f\x20\x9e\x00\x60\xf4\x46\x4d\xed\xa2\x0b\xe8\xbe\x46\xfb\x13\x55\x67\x4b\x6d\x44\x5a\x50\x48\x6d\x45\xba\xa5\xab\x67\xd8\x2f\x1d\x19\x29\x67\xde\x2a\x72\x66\xd5\x7e\x76\x05\xf8\x8c\x50\x4a\xd5\x56\x23\xa4\xb2\x48\xf4\x16\x78\x77\x9d\x55\x16\x44\x96\xcd\x18\x3b\x58\xc3\x7a\x78\xfb\x85\x7b\xb6\x06\x7b\x77\xf2\x0e\xa4\xe4\x06\xaf\x12\xe2\x14\xd5\xc3\x02\x4d\x48\x8b\x3a\x11\x09\xa2\x66\xb2\xae\x7d\xdc\x70\x7e\xa8\xc3\x6e\xcc\x71\xaa\xf9\x8d\x80\x28\xa2\x5b\x84\x94\x0c\x1c\xfc\x91\x46\x15\xbc\x66\xd5\xa9\x09\x8c\xb1\xad\x4e\x6d\x53\x64\xd4\xf5\x9d\xb8\x66\xbc\x6d\x31\x51\xc7\x91\x1e\x6d\xb7\x96\xf0\x66\xcf\x52\x3e\x60\x22\xa6\xdb\xc4\x3c\xac\xb5\xb4\xeb\x64\xc4\x07\x1b\xcf\x81\x6a\x27\xef\x66\xe4\x97\x6f\x60\x10\xa9\x71\x77\xed\xb9\xdd\x29\x74\xda\xac\x2b\xbc\x84\x6f\x52\x31\x52\x38\x9b\xbb\x17\x64\x2e\x3b\x63\x4c\x4c\xf6\xb6\xcf\x78\x76\xdb\xb1\x98\x75\x2c\x3a\xd8\x84\xcd\x8b\x66\x22\xcb\x3e\xab\x4e\xa9\x58\xd2\x50\x76\x65\x8d\xd4\x46\xaa\xb5\x2d\x16\xa4\x96\x19\x31\xe1\xf0\x9b\xc3\x4d\xb8\xd0\xea\xe8\x1a\x5f\x22\x7e\x69\x24\x79\x5f\x14\xb9\x7f\xbd\x1b\x3e\xce\xe7\x73\x4d\x85\x6e\xbe\x3d\x09\x4a\xd1\x6f\x52\xeb\x26\xfc\x00\x06\x83\x5a\xbb\x58\x90\x42\x10\x15\xe2\x66\xb6\x5a\x79\x54\x27\xdb\xbc\x51\x2e\x28\x4f\xa2\x96\xb3\x35\xe0\x99\xf7\xce\xe1\x7d\xb8\xcd\x93\xf3\xbf\x92\xc0\xf8\x0e\x99\x3e\x60\x80\x07\x27\xc4\x50\x3c\x65\x9a\xb9\xa2\x61\xa4\xbb\x3b\xf9\xc6\x05\xf9\x72\x97\xc2\x75\xa4\x9f\xf9\x10\xd5\xa0\xbb\x19\x2f\xf9\xc4\x50\xcd\xef\x21\xc8\xa7\xe3\x4b\xd5\x6b\x01\x9e\xd1\xef\x21\x7b\xfb\x1a\x8a\xdc\xf8\xf1\x6e\x56\xde\x67\x06\xb0\xcc\x22\x43\x6c\x62\x35\x82\x88\xfd\xbc\x05\x2c\x1b\x2e\x06\x5c\x1b\x66\x03\xed\x45\x47\x58\x62\x50\xd2\x1e\xc0\x59\x66\x46\x8f\x2a\x73\x75\x07\xaf\x1b\xd6\xcc\xce\xd5\xbc\x71\x31\xfd\xb0\x17\xa4\x30\x5d\x08\x9e\x43\xfc\xee\x57\xb7\xca\xbb\xab\x26\x14\xdc\xd8\x5b\x86\x1b\xf8\x1e\x5e\xa9\x32\x97\x69\x53\x67\xa2\x51\x0b\x9b\xd7\x61\x18\x73\x7b\xe7\x82\x6e\x09\x97\x73\x26\x2a\x88\xde\x06\xee\xbb\x2a\x82\x00\x9e\x39\x0a\xec\x04\x07\x14\x5c\xd7\x57\x15\x2f\x35\x0c\xe2\x4a\xa6\xf0\x67\xaf\x6c\x8d\x62\x43\x40\x56\xd9\xa3\x51\xd7\xee\x5d\xab\x0c\xaa\x52\x58\x92\x85\xe4\x09\x08\x7d\x7e\x58\x8e\x00\x0c\x0b\x58\xb7\xd6\x3c\x55\xf0\xf5\x94\x4d\x9b\x19\x18\x2e\x78\x0e\x82\x3b\xb5\xb4\xa2\x21\x56\x65\xa8\xb9\x2c\x34\xe3\x23\x73\x4a\x6a\x8b\x7f\x0c\xe3\x48\x42\xf0\x57\x82\xeb\xd4\xe6\x5d\x81\x74\x65\x9e\x39\xbc\x60\xb7\x1e\x87\x9a\x56\x6a\x79\xd7\x2b\xf8\x81\x1a\xc7\xbd\x0e\x2c\x6a\xfd\x55\x65\x64\x91\xb7\xbc\xd0\x62\xc0\x3e\x96\x37\xa5\xba\x4b\x7f\x00\x7f\xe8\x8c\x7c\x31\x87\x6e\x42\x8a\x72\x1f\xd9\x2a\x65\xd2\x13\x72\x3a\x78\x31\x7e\x9e\xaa\xc1\xe4\x5b\xec\x41\x67\x9e\x54\xa0\xa1\x4d\xb5\x09\x37\x28\x35\x2c\xcf\x70\xcd\xc8\x72\x95\x69\x33\xa8\x4c\xcc\x6b\x7d\x72\xa7\xaa\x9b\x42\xf1\x5c\x9f\x78\x10\x6d\x7d\x42\xe4\x67\xbe\xe3\x7f\xde\xad\x49\x34\xe0\xe3\xfb\x70\xc5\xdf\x56\xb8\x62\x3c\xde\x27\x12\xb1\xd8\xe2\x83\x0f\x96\x1d\xd2\x31\x8a\xf1\x73\x67\xff\x69\xcb\xd2\xa1\xda\xb2\x5a\x15\x9f\xc9\xd2\x48\x7e\x8b\x4b\x61\xae\x82\x04\x23\xf8\x59\x96\x72\xd6\xcc\x02\x4b\x80\xc6\xa6\xe4\x74\x95\x90\x16\x55\x8a\xbb\x62\xc1\xb2\x4a\x70\x4a\xe0\x0d\x20\xef\xcc\xb5\xbc\x00\xc3\xb7\xb9\x7a\x79\x89\x29\x97\xb5\x0e\xac\xe3\x59\xc5\xf5\x14\x10\xe9\x4c\xa7\xd2\xfa\x1e\x42\xe7\xe5\x2d\x97\x85\xb9\xdc\x63\x30\xff\xe7\xec\xc8\x7c\xcc\xda\xa5\x53\x2f\x18\x6d\x4c\x2b\x05\x5e\x0c\xf4\x89\xc2\x80\x9e\xad\x57\xe9\xde\x9a\x3c\x7a\xb7\xc3\xc9\xef\x7e\x81\xac\x26\x63\xdf\x25\x51\x1d\x78\x0d\x30\x01\xc3\x1d\x14\xcb\x25\xd4\x40\x6e\xa4\x9e\xb2\x91\xa8\xef\x84\x28\x9d\xb3\x98\xfd\x4d\x54\x0a\xae\x8a\xb0\xa6\x40\x34\xf5\x17\x8f\xc9\x8f\x4f\xfe\xe1\x6e\xca\xeb\x63\xa9\x8f\xf9\xf1\x0a\x86\xbd\x6c\xf5\xf4\x8a\xec\x5d\x82\x62\xa1\xac\xd4\xbf\x36\xa2\x5a\x30\x75\x0b\xb8\x00\x79\x5c\x14\xdc\x57\x7a\xb0\xe2\x4b\xa6\x9a\xb2\x76\xa5\x08\x74\xd0\x9f\x47\x84\x01\xc3\x59\xa0\xa4\xe3\xb5\x0c\x0a\xbe\x85\x90\xf1\x00\x8c\xac\x16\xb3\x79\x01\x45\x27\xc0\x08\xc0\x6e\xc4\x42\xfb\x32\x03\x61\xe0\x28\x8e\x46\x96\x4c\x55\x39\x6e\x26\x12\x1f\x2e\x8e\x4f\x11\x0e\x44\xad\x8d\x77\xcb\xac\xc3\xad\x14\x77\x27\x04\x14\x71\x6c\x4e\xd0\x31\x85\xf9\x9f\xe0\x2c\x4e\xfe\x01\xfe\xf7\xd8\xce\xfe\x81\x3c\xb1\x9d\x8c\x6b\x17\x24\x21\x4b\xd2\x13\x4b\xfc\x74\x23\x62\x09\xa6\x48\x95\x81\x85\x0d\x7d\x47\x96\x49\xc8\x31\x93\xa5\x6e\xc6\x63\x99\xc1\x6d\x18\x19\x17\x73\x51\x43\xb2\xf5\x63\xd2\xf8\x3f\xcc\x55\x7e\xec\xa6\xb8\x7e\x8d\x96\x73\x95\xdb\xe9\x53\x5a\xd1\x26\xac\xbd\x47\xf6\x6f\xb7\x68\xd7\xf0\xeb\xd6\x99\x59\xc5\xe7\x43\xd9\xd9\x71\xb1\xae\xf8\x6c\xd9\xe4\x45\x2f\xa3\xbb\x8a\x98\x9b\xe7\xab\x6e\xc3\x8e\x90\xc3\x43\xc5\x09\x0b\x8d\xd0\xba\x57\x9e\x05\x98\xa6\xc1\x99\x58\x8f\x8b\x38\x25\x25\xbd\x6e\xe1\x32\x91\xcc\xed\x07\x89\x76\x14\xc2\x84\x6e\x2b\xd4\x87\x3a\xae\x1a\xb4\x63\xcf\x7c\xca\x18\xd0\x96\x36\xe6\x86\x93\x1c\xcf\x44\x35\x11\xc7\x37\x62\x71\xf0\xd2\xaa\xec\x89\x56\xd6\xd5\x73\xf0\xf2\x00\x5e\x80\xe8\xa4\xa6\x28\x16\x70\x70\x45\xbe\xee\x16\x7a\xe6\x3a\xe5\xb7\x8e\x21\x3a\xac\xa9\x80\x49\xda\x3a\x81\x01\x73\xf4\x75\x7f\xf1\x63\x6b\xef\xa2\xb5\x68\xfd\x41\x94\x84\x4d\x9c\x80\x0a\xea\xb4\x61\x95\x18\x7b\x9c\x87\x89\xff\x9d\x86\xd1\x63\x35\x4b\x1e\x8d\xf4\xe8\x7e\xf8\xde\xc6\x2f\x2c\xd6\x5d\x40\xa4\x77\x47\xff\x0f\x20\xed\xf5\xc5\x8b\xf6\x44\x71\x9e\xe1\x98\xac\xb0\xf1\xc4\xa5\x82\x35\xb8\xa5\x2a\x8a\x11\xcf\x6e\x5e\x41\xe1\xb6\x65\xce\xb3\xd5\xf2\x6d\x25\x6e\x65\xda\x38\x80\x86\x1c\x7c\x0a\x61\x20\xf4\x55\xd0\xc2\x7c\x30\xc7\xf3\x41\xf8\x84\x0e\x07\x6c\x05\xbe\xba\x16\x7d\xad\x37\x67\x59\x4e\x3e\x82\xce\xf7\x9a\x8b\x99\x2a\x93\x8e\x43\x10\xfd\xb1\x62\x9f\x59\xf3\x5e\xcb\x79\x0e\x5d\xc0\x24\x2a\xec\x9a\xf4\xc9\x35\x54\x02\x7e\xff\xb1\x74\x1c\x34\xbd\x70\x33\x7e\xdf\xd2\x0a\xdc\x98\x03\xf6\x42\xb9\x22\x8d\xef\x8d\xe5\x4d\x65\x79\x0c\x8d\x87\xf9\xe2\xa5\x23\x80\x51\xe0\x23\xad\x8a\xa6\x76\x07\xee\x48\xdc\xbf\x64\xff\xf4\x8c\x41\x41\xa3\xb9\xa8\xcc\x11\xb0\x99\x0c\xaa\xe6\x45\xff\x20\xc8\xef\xa2\xeb\xa0\xea\x2a\x7e\x15\x3b\x7d\xf1\xfc\x1f\x9f\x0d\xd9\x69\xeb\x7b\x80\xc7\x52\x64\x64\x26\xc7\x04\x2e\xff\xd5\xd1\x82\x55\xaa\x29\x73\x5c\xd1\xa1\x83\x83\x23\xa5\xfd\xb9\x13\xd2\xc9\x9e\x20\xb5\x91\xd4\x29\x58\xf2\xa5\xcd\xc6\x40\x75\x80\x48\xec\xbb\xe7\xff\x38\x30\x63\x85\x23\xfe\xdd\xf3\x7f\xb4\x43\x6d\xcf\xae\x54\xb9\x88\xa5\xe2\x91\x77\xc3\x02\x21\xe0\xa6\x03\xca\x96\x1c\x8a\x21\x49\x0b\x43\x22\x90\xf7\xd0\xd3\x65\x36\x15\x79\x53\x88\xfc\x19\xac\x39\x5c\x01\xf5\x54\x48\x12\xba\x75\x4d\xa1\x3d\x66\xb9\x4b\xbb\x5c\x5d\x27\x2f\x20\xe8\xd0\x53\x58\x60\x0d\x3e\x07\xf3\x36\x79\x85\xe3\xe9\x28\x2d\x3a\xdb\x53\xe6\x88\x67\x34\x32\x34\xa1\x59\x33\x37\x7a\x64\xbb\x15\xc6\xec\x99\xe1\x15\x3c\x13\x43\xf6\xa1\xcc\xd0\x0c\x6d\xda\x62\x3f\x95\xf0\x37\x3e\xc8\xfd\xd0\x2b\x44\xf5\x8a\x5c\x33\x55\xd6\x8a\xc0\x4f\xe3\xbe\x07\xac\x9e\x36\x1a\xbd\xdf\xb8\x86\xbc\xf6\x22\xcc\x3f\xe3\xd0\x55\x25\x27\xb2\x5c\x4a\x66\xe1\xf7\x19\x65\x96\x98\x45\xd2\x09\x72\xff\x8c\xc5\xf1\x63\x9e\x22\xe6\x85\x5a\xcc\x44\xf9\x00\xa6\xb2\x05\x27\xb9\x6c\xaa\x94\xc9\x3e\xcd\x43\x3a\x9c\x43\x5b\x5a\x65\x7c\xa4\x90\x4e\xdd\xc0\xe2\xd7\x1e\xc4\x46\x6c\x97\xf0\xfd\x80\x33\x38\xa8\x47\x7b\xb8\x8d\xd2\xf2\x73\xc4\x1e\xcd\x31\x7e\xfe\x50\x1e\xf2\x93\x83\xd7\x1a\x30\xee\x8b\xda\xbd\xb0\x01\xc7\xeb\xf0\x0f\x7b\x22\x2e\x5e\xf9\xc5\xe3\x66\xe5\x9a\x39\x93\xb3\x99\xc8\x25\xaf\x45\x98\x0e\x16\x6f\x26\x9d\xe1\x01\xe2\xdc\x38\x97\x75\x9b\x05\xa9\x22\xa7\x04\x02\x3a\x7b\xb9\x82\xc5\x11\xf7\xe6\xa8\xb1\x17\x74\xdc\xc3\x05\xa5\x13\x6b\xde\x84\x37\x80\xe1\x8c\x84\x28\xd9\x8d\x34\xca\xf2\xa0\x77\xd8\xe3\xa6\x32\x87\x76\xd0\x3a\xa0\xed\x31\x41\xaf\xad\x68\x14\xf0\x55\x75\x0e\x1f\x18\x1b\x88\x31\x25\x87\xba\x43\x3c\xcc\xed\x6e\xd1\xcf\x78\x77\xf6\x11\xfd\xf6\xa4\x9c\xab\xbb\xb2\xff\xd0\x00\x27\xa0\xe3\x12\x13\xfc\x58\xde\x8b\xfc\x01\x64\x6f\x48\xab\x43\x3f\x66\x30\xa6\xd5\x3f\x77\xb7\x79\x83\xf3\x40\xc4\x1b\x5d\x35\x20\xfd\x0f\x96\x7c\xd5\xd1\x2d\xa2\xaf\x51\xa9\x94\x8c\x53\xf7\xc1\x51\xed\x90\x76\xe2\xc8\xe1\x77\xd7\xbc\x5e\x88\xc2\xa3\x0b\xec\x71\x28\x7c\x8d\xeb\xa7\x37\xe8\x74\x49\xd0\x6e\xab\x69\x1c\x36\xe2\x42\x1d\x17\x73\x81\x58\x67\xe5\xc2\x01\xbb\xb9\x5a\xd6\x60\x5f\x8a\x5e\xe8\x26\xeb\xf7\x7f\xf0\x41\x09\xfb\x55\x53\x88\xae\x8d\x05\x13\x02\x12\xd1\xb5\x3e\x51\x20\x48\xbc\xb2\xf9\x03\x6a\xcc\x26\x32\x8f\xc3\x4f\xf1\x54\x58\x10\x36\x10\x01\x0b\x79\x03\x31\xc2\x18\x2b\xef\x0a\x57\x4f\x24\xc9\x56\x10\xff\xb9\xf0\x0f\xa0\x77\x5f\x98\x15\x41\x09\x41\x40\x36\x0b\x2a\xca\x7c\xc8\x2e\x6c\xd8\xb6\x91\x01\x7f\x6e\x74\x0d\xab\xb5\xeb\xba\xd0\xaf\x7d\xc2\x42\x95\xac\x2d\x55\x51\x81\xa8\x1d\xc7\x70\x6f\xe5\xe8\xee\x0b\x3b\x4e\x53\x72\xa2\xe5\xa3\x12\x72\xea\x7b\x4f\x89\x8e\x9b\xed\xe9\xb8\xf9\x3d\xd3\xf1\x8a\xf8\xf9\x8d\xc9\xb8\x27\x06\xbd\xab\x0f\x24\xdb\x3d\x16\x09\xf7\x7c\xed\x31\x08\x78\x77\xfb\xd3\x9f\x1b\xd0\x0d\xf7\xc1\xf4\x83\xde\xd5\x8e\x9f\x47\x49\x33\x98\x7c\xf5\xa3\xff\x2d\xa2\xe4\x35\x2d\x7d\x35\xd7\x37\x60\xdc\x1b\xcb\x49\x53\x89\xe3\xb9\xca\x8f\x9d\xeb\xf5\xc4\x96\x7d\x87\x9f\xc4\x7d\x7d\xb2\x81\x27\x84\x76\xce\x85\xf7\xaf\x41\x81\x46\x4c\x4a\xa5\x22\x39\x2b\x3e\x77\x92\x92\xcd\x43\xc3\x4a\xd6\x36\x02\x63\x1f\x5d\xbe\x8f\x2e\xff\x9a\xc3\x65\x68\x31\x6c\xcb\x1f\x3f\x57\x94\xf7\xc3\x62\x30\xd7\x09\xf3\x0e\x0f\x54\x3b\x88\x1b\xd4\xa3\xcf\x1d\x59\xbc\x6d\x1e\x93\x19\xeb\xaa\xd8\xed\xae\x3f\xf6\xcb\x4d\x33\x88\xdd\x7e\xc8\x8c\x77\x17\x47\x8d\x5c\x7e\xcb\x30\x28\xbf\xfc\x09\x0a\x0b\x23\x0b\x78\x8d\x8b\x27\xc8\xb1\x0b\x8b\x6f\xb8\x84\xe5\x3e\x6b\x38\x87\xfa\xbc\x6f\x5d\x23\xa3\x11\x3c\x78\x99\x09\xed\xc2\x7e\x49\xe5\xa7\xdb\x60\x37\xae\xaf\x70\x27\x96\xdd\x92\x7d\x21\x01\x9d\x35\xd8\x3e\x32\xa0\x7f\x71\x78\x56\x37\xb1\x55\xd0\xba\x5d\xfd\x22\x85\x07\x62\xa3\x35\x5a\x16\x34\xb4\x45\x98\x90\xb6\x71\x42\xad\x33\x99\x16\x95\x1a\x2d\xaa\xe3\x49\x23\x73\x41\x01\x36\x89\xf8\x9a\xf6\x6a\x22\x1a\xbf\x2a\x79\x71\x1e\xad\x5f\x37\x6d\xb9\xe6\xd5\x44\xd4\xfd\x15\x0d\x5a\xd8\xfc\x86\xce\x36\x98\xa0\x8f\x31\xd3\xa2\x92\xbc\x90\x7f\x03\x83\x5d\x90\x51\x08\x18\x33\x33\x3e\x3f\x46\x7c\x7a\x10\x3b\xcc\xaa\x88\x7b\x43\x57\x5a\xde\x82\x0c\x4b\x4f\xdd\x94\x7d\xcf\xb9\x2a\x85\x87\x0f\x92\x65\x5d\x29\xc3\x8a\x40\x32\x22\x64\x05\xbc\xaa\x35\x7a\x87\x48\x50\xb0\x81\x3f\xd4\x04\x34\x35\xdc\x75\x9b\x28\x05\x3b\x7a\x0c\x20\x66\x4c\x2f\xca\x9a\xdf\xbb\xb8\x2e\x5c\x33\xd4\x32\x20\x5f\xde\xe8\x81\x80\xc0\xe0\x27\xe2\x86\x3a\xc0\x29\x06\x19\xda\x28\x5a\xb5\x1b\xda\x87\x95\x60\x73\x9b\x0f\xf3\xd9\xe2\xb3\x36\xd7\xda\x56\xe6\xd5\x76\xa5\x8d\x55\xaf\xac\xd0\xe5\xb6\xd3\xe3\x56\x7e\xf4\x81\x28\xed\x5b\xdb\x1f\x12\x39\xd0\x88\x10\xb1\xd2\xfc\xd0\x7d\xf3\x77\x62\x8d\xe8\xcd\x1d\xb7\x18\x38\x74\x9a\x13\xa9\xe3\xcb\x09\xdc\x57\xbe\x32\x72\xa5\x2d\x24\xb9\xa4\x08\xa6\xbd\xf2\xa3\xe2\x97\xaf\xce\x5e\x5f\xb0\xa3\x37\xf7\x43\x76\x7d\xf0\xe2\x5f\xbf\x1d\xbe\xf8\xe1\x5f\x86\x2f\x86\x2f\x4e\xbe\xfd\xfe\xfa\x80\x32\x2e\xe3\xba\x41\xb5\xad\x12\x43\xa5\xcf\x20\x8b\xba\x5b\xa9\xeb\x50\x87\xe5\x4f\x90\x8d\x89\x7b\x73\xe0\x09\x92\xc9\x8f\xc7\x0c\x21\xe6\xcd\x6d\x40\x2d\xc2\xfd\xf4\x95\xbc\x57\xdc\xc5\x99\xcc\x13\xe5\xbc\xe0\xd7\xce\xfa\xc0\x02\x84\xea\x58\x47\x11\x3b\x3b\x67\xb8\x84\x58\xff\x44\x10\x5c\x13\x15\x40\x69\x2f\x5a\x4a\x9b\xc1\x89\x77\xbf\xfd\x06\x17\x04\xbf\x5e\x48\xac\x6c\xb2\xf6\x72\xf0\x72\xc3\xa1\x31\xfa\x1e\x19\xc2\xec\x75\x82\xda\xb2\x2b\x41\x86\x29\xb9\xaa\xa9\xb5\xcc\x91\x0f\xc0\x12\xc1\xc1\xdc\x3e\xad\x3f\xa6\xd6\xb8\x32\x72\x67\x5d\x5a\x15\x99\x1c\xa5\xc0\x59\xb2\xd5\x81\x12\x35\xd4\xd0\xc0\x41\x90\x74\xe7\x2a\x4f\x49\x19\x7b\x13\xc7\xde\xc4\xf1\x75\x99\x38\x7e\xb3\xa9\xec\xab\x33\xd7\x5d\x40\x68\xc4\x11\xd6\x51\xce\x97\xf0\x9b\xad\x4a\x58\x04\xfd\xe1\x5a\xf7\x94\xdd\x6e\x29\xeb\x1d\x3d\x7d\xc9\xb8\x82\x4a\x80\xcb\x39\xa2\x6f\xd8\x77\xab\x13\x0b\xb4\x2c\xb2\x7d\x8d\x53\x7e\xfb\x96\xd7\x78\xb7\xa8\x28\x6a\x0b\xa8\x4d\x40\x2c\x9a\x22\x5d\x07\xe4\xe0\xe5\xd5\x97\x96\x54\x98\x5d\x92\x4d\x99\x0b\x5d\xcb\x12\x89\x07\xbf\x6b\x48\xa5\x5d\x26\x92\x30\x20\x25\xa0\x81\x91\xfc\x50\x50\x02\xad\x2b\x02\x87\x15\xb4\x39\x2b\xd4\x04\xea\xce\x7e\xb8\xe8\xad\x19\xa8\x2a\x36\x93\x5a\x43\x7e\x95\x13\x46\x3a\xb5\x66\x35\x3b\xb2\x4b\x64\xd8\x4d\x25\xcc\x99\xb7\x05\xef\x4c\x83\x67\x89\x0f\xd8\x2c\x9a\xa0\x60\x53\xbb\x3e\x62\x2d\x66\xae\xc6\xb2\xfd\xb6\x45\xe8\x73\x95\x6b\x8b\xc5\x5a\xc5\x16\x01\x5f\x8f\x24\xcf\x55\x98\xa4\x0f\x38\x6a\x50\xc8\x18\x34\x76\xb5\xd6\x5e\xa6\xb7\xd1\xd1\xaa\xab\x1c\xe8\x03\xc5\x8d\x34\xc8\xce\xb0\x98\x47\xb8\xc3\x51\x9d\xbf\xee\x16\x33\x43\x6b\x1e\x56\x7f\xbb\xcd\x8e\x06\xbe\x64\xcf\x83\x76\x0f\xdb\xfa\x87\xee\xba\x3f\x08\xa0\xa2\x3d\xe6\xc6\x0b\x40\xcf\x5f\x5f\x08\x0c\x2b\x56\x2e\xe7\x7e\x41\xcb\x2d\xd9\xdf\xc3\xb4\x98\xd5\xec\xcf\x48\x26\xab\x95\x70\xd3\xaa\xff\x50\x90\xcc\x65\xab\xbd\xbb\x28\x65\xf0\x99\xd6\x8a\xf1\x2c\x0b\xf0\x93\x9f\xdc\xd1\xb0\xc3\x5f\x72\x2a\xb0\xc9\x36\x07\xe2\x51\xce\x03\x88\x93\x8f\x7f\x22\x06\xab\x6e\x36\x24\xa3\xf6\xb6\xcf\x78\x2e\x68\xcf\x25\x64\x63\x95\xab\xb7\x7e\x7f\xf7\x3d\x85\xbb\x6f\x7d\x16\x98\x86\xfe\xe8\x34\x89\x41\xb1\x93\x65\x91\xf7\x08\x20\x4f\x09\x01\xe4\xec\x31\x4b\x8d\x2d\xb3\xab\xec\x21\x3b\x7e\x5b\x90\x1d\x5f\xb6\xc2\xd8\xba\x1a\x70\x02\xb9\x63\x13\x2d\x18\xee\xc9\xe5\x5c\xd0\x34\x89\x45\x3f\x81\xd8\x01\x88\x4b\x6a\x99\x3f\x88\x61\xec\x83\xb9\x16\x2c\xd4\x17\x5e\x7c\x3e\x89\x19\xae\xa0\x08\x61\x7c\xa5\xd8\x26\xe7\x2b\x0d\xed\xc8\x1e\xc9\x3d\xa3\xca\x58\x36\xa5\x66\x89\x6b\x10\xa2\xf1\xcd\x15\x57\x52\xad\x02\xb2\x8a\x60\xc2\x15\x0d\x15\xa3\xe4\x37\xb7\x80\x58\xff\xc0\xaf\x83\x03\x57\x71\x7c\x75\x49\xf8\xf7\xb6\xa9\x26\x51\x21\x2b\x1a\x5d\x8b\xea\x58\x67\x6a\x2e\xa8\x08\xba\x8e\xa0\x98\xd7\x2e\x94\xfe\xa3\xb9\xac\xed\xd5\x3f\x6a\xea\x00\x6d\xc2\x95\xce\x2f\x0a\x5f\x1f\x5d\x43\xb1\x84\x33\x2a\xd3\x19\x80\x5e\x14\x5a\x99\xb5\x73\xf2\x41\xab\x84\x39\x50\x0b\x47\x30\x5c\x55\x08\xd7\x39\x01\x4b\x06\xf9\xda\x51\xc7\xd4\x93\x5f\x80\xb0\x6c\xfd\xfb\xf6\x12\x0e\xd9\x07\x57\x9a\xba\x35\x81\x73\x9f\x7b\xb7\x7e\x77\xbb\xae\x05\xbf\xa4\xfc\xbf\x77\x77\xb7\x76\x8a\x64\x50\x9a\xca\x39\x64\x20\x3d\xe2\x46\x43\x56\x05\x6d\x71\x67\x41\x9e\xfa\x46\xaf\xf5\x0d\xe4\x08\x87\x9a\xa9\xbb\xd2\xf7\xbc\xd3\xbd\x5e\x5f\xda\x04\xf1\x74\x05\x9f\x35\x82\x72\xc4\x67\xcd\x0f\x1d\x3e\xab\xca\xb5\xac\x79\xe9\xcc\x2d\xe8\x92\xb4\x19\x4c\x8a\x9d\x57\xaa\x56\x99\x2a\x82\x04\x28\xe2\x87\x46\xfd\x65\x65\x33\x13\x15\x28\x2b\xaa\x02\xe6\x90\xbb\x3e\xb8\xab\x1f\x10\x33\x56\x23\x53\xcc\x2b\x75\x2b\x73\xc4\x97\x97\xba\xa3\xb7\x20\x9b\xc1\x8c\x3c\x88\xc6\xd9\x69\x0a\x9b\x9d\x52\xcf\x12\xd0\x53\x76\x74\xf5\xea\x7c\xc0\x3e\xbe\x3e\x1f\x98\xb9\x5d\xbe\xba\x3a\x7f\x46\x87\xb0\x6b\x73\x80\x69\x9a\x89\x05\xf5\x20\x83\x59\x87\xd5\x70\xae\x5e\x9d\x6f\xea\x4d\xee\xda\xcb\x97\x53\x0a\xe4\xbd\xd2\x12\xf7\xa2\x69\xb5\xed\xe4\xcb\x34\x94\x90\x63\x75\xf4\x14\x01\x06\xa0\x7e\x15\x1a\x9f\x83\x92\xa8\x09\x52\x28\x28\x8c\xef\x41\x8e\x7c\x5e\x65\xdb\xe0\x18\x16\xf2\x83\x4b\x98\xca\x40\x95\x2a\x9a\x85\x74\xdc\xc2\x0a\xcc\x90\x31\x0e\x7a\x2c\x5e\x94\x4e\x0a\x70\x4c\x23\xa8\xa9\x42\x5f\x7b\x36\x60\x1f\x2e\xd6\xd2\x5c\x83\x89\x31\x9e\x55\x4a\x23\x01\x93\x9c\x90\x54\x05\x0d\x2f\xd4\x22\xb4\x62\xb9\xae\xeb\xa0\xe0\x46\x4a\xe3\xf7\xea\x76\xdc\x73\x21\x41\x72\x87\x2f\xb7\x17\x0e\xe6\x0e\x31\x6c\x9a\x69\x55\x08\x2c\x93\x86\xa8\xe8\x3e\x33\x0f\x73\x07\x03\xf6\x6f\xc4\x66\xad\x1c\x9c\x2e\x51\xef\xb3\xe8\xbe\x59\xee\x46\xd8\xa5\xe2\x14\x38\x62\xe0\x94\x94\x2b\xe8\x8d\x1a\x6c\x40\x70\x57\x5d\x3a\x33\x6c\x15\xc8\xe7\x0b\x11\x1c\xe9\x78\xd2\xd1\xc5\xa1\x66\x85\x32\x7c\xb6\x54\xb9\x58\x9b\x44\xc3\xb5\xf8\x82\x34\x9a\x2b\x81\x7c\x9f\x4a\x15\x94\x8b\x47\x22\xd1\xc7\xa1\xc0\xd0\x1a\xfe\xeb\x2a\x01\xee\x32\x90\x41\x30\xcc\x51\xd9\x6b\xa3\xbb\x30\xa4\xbe\x23\x79\x52\x78\x21\x8c\xbc\x4b\xc8\x86\x38\x3d\x15\x9b\x25\x8c\xcd\x8d\x16\x9b\x0d\xeb\x9a\xb2\x9f\x9b\xa2\x96\xf3\x42\xb8\x00\x8d\xb9\xa5\x58\x73\x85\xe3\x5b\x41\x4c\x97\xa8\x3d\xe2\xc0\x19\xed\x61\xc6\xb5\xc0\x4c\xe4\x78\x24\x63\x55\x31\xc1\xb3\x69\x6c\xba\xc6\x78\xd1\x5b\x51\x2c\xda\x7c\xe2\xfd\x87\x2b\x8a\xbc\xe3\x05\x5a\xe4\xd7\x95\x55\x83\xb2\xc4\x29\x72\xb4\x72\xaa\xb3\xa8\x96\x8f\x22\xc5\x99\x0d\x37\xbb\xd5\x53\xcb\xd4\xf2\x1d\x38\x63\x60\xc4\xf0\x74\x1b\xef\x76\x25\x0a\x2c\xe8\xa1\x86\x14\x22\x64\x03\x12\x31\x42\x88\xe8\x0c\x2b\xc4\xbd\x71\x7f\xab\xca\x3f\x1b\xd8\x9f\x7b\x04\xab\x40\xfe\xb0\xf5\x95\x6c\x51\x41\x8c\x15\x25\xe1\x4e\xdc\x4b\x5d\x8b\x12\x63\x9c\xa8\x6f\xf3\xa1\x37\xc1\x46\xff\xe8\x69\x06\x53\xf7\xd1\x18\xcc\x78\x69\x9b\x69\x8a\x92\x05\x8d\x5d\xeb\x66\x46\xc4\x09\x95\x7a\xa9\x11\xda\x05\x71\xab\xa8\xb7\x23\x5b\xd3\xd0\xc8\x8c\xaa\xc6\x30\xa7\xa0\x77\x3b\x1e\xea\xfe\x59\x4f\xff\xd4\xcc\x27\x5c\xf2\x12\xe4\xe1\xbb\x4a\xd6\x80\x1a\x80\x17\x34\x64\x10\x10\x23\x1e\x60\x69\x14\x23\xb7\x85\x15\xb2\x61\xd1\x6c\x1b\xac\x45\xfb\xe7\x60\x0b\xd8\x5f\x86\xec\x9d\xbc\x11\x86\x81\x0f\x0c\xdf\x4d\x7c\xcd\x72\x7a\x8c\x14\xa3\x5d\xf0\xb5\x5b\x48\x56\xf0\x37\x4c\x30\x12\xfb\x79\x1e\x0d\x00\x6d\x80\xe8\x2c\xc3\x50\xb3\x70\x44\x47\x5a\x9a\xcd\x03\x54\x0b\xf7\xed\x3b\x17\x9f\x66\xdf\x48\x6c\x55\x99\x53\x3b\x7f\x27\x59\x0a\xa9\x15\xfb\x2f\x33\xa0\x3f\x87\xb4\xc8\xfe\xf2\xa0\x8b\x7f\x93\x40\x34\x2a\xfc\x76\x75\x75\x4e\x5f\x87\xb2\xc2\x9d\x03\xd7\x6a\x60\x28\x43\x65\x12\x4e\x16\x87\xa2\xc7\xac\x12\x13\x71\x6f\x6b\x92\x8d\x78\x76\x03\x91\xaa\x67\x65\xa6\x66\x80\x55\x50\xb5\x71\xe1\xe0\x2d\xaa\x05\x79\xc7\xab\xa0\x46\xaa\x7d\x7b\x85\x84\x4c\xcd\xba\xd2\xb1\x7d\xd0\x99\xc5\x4f\xf8\x20\xb2\xdf\x57\x62\x2c\x2a\x73\x2a\xf1\x4a\x94\x59\x68\xad\xf5\xd7\x88\xbf\xf4\x6d\xd0\x60\x38\xec\x8d\xad\x51\x14\x62\x8b\x2b\x4a\xc3\x02\xae\x97\x5c\x7d\x58\x72\x43\xc7\x25\x83\x40\x5d\xf3\xd1\xf3\x0f\x97\x67\xff\x41\xab\xce\x6d\x10\x36\x5c\x49\x67\x6f\xde\xbc\x61\x97\x75\xce\x5e\x3c\x7f\xfe\xdd\xf0\xc5\x00\x00\x9c\x88\x6f\x29\x2f\x0a\x99\xe3\x31\x3f\x69\x4a\x79\x4f\x81\xf2\x03\xcb\x18\xd8\x5c\x54\x05\xfd\xf8\xcc\xf9\x87\xf9\x84\xcb\x52\xd7\x7e\xef\xd0\xa3\x21\xed\x0e\x93\x1d\x7b\xc8\x5e\x61\x32\x49\xb1\x30\xec\xd0\xdc\x7c\x96\xcd\x64\x53\x5e\xf1\xac\x16\x15\x14\x65\x77\x21\x8b\x41\xe1\x37\xb2\xf5\xf2\x82\x5d\xc3\x52\x5c\x1f\x80\xe1\x10\xb5\xa7\x8f\x17\xef\x5a\x33\xbd\x78\xfb\x8a\x7d\xf7\xaf\xff\xf2\xc3\x90\x61\x09\x6f\xaa\xc4\x3f\x91\xae\x38\xde\xe1\xc9\x21\xf0\xaa\x00\xfa\x76\xe0\x67\x10\xea\x88\x9c\x65\xe0\xc9\x06\xdf\xad\x40\x14\x12\xe7\x3e\xef\xa3\xcb\x75\x54\xc9\xce\x09\x33\x32\x0d\x80\xad\x2c\x3d\x66\xae\x55\xec\x37\x99\xd6\xf5\xdc\x67\x29\x20\x06\x30\x0c\x55\xd9\xe1\x59\x69\x42\xd8\x60\x58\x97\xa5\x72\xdd\x3c\x7f\xfe\x5d\x36\x55\xba\x86\xbf\x04\xfd\x00\x0b\x0d\x3f\xfc\x1b\xfe\xa0\x05\xaf\xb2\xa9\x59\x78\xfc\x99\x1d\xd3\xff\xd2\x17\xd8\x1d\x48\xe7\xf8\xdf\x39\xe0\x75\x59\x44\xb4\xaa\x60\x99\xaa\x2a\xa1\xe7\x0a\xa2\xa0\xdc\x16\x59\x97\xa9\xf5\xa4\xd8\x53\x64\xd3\x02\x30\x8c\xc0\xd2\x98\xb8\x15\xd5\xa2\x06\x56\xc1\xc7\x80\x71\x6c\xb1\xf2\x0e\x4f\x0e\x81\x9f\x8e\xc4\x58\x51\x90\xfe\x58\x56\xe6\xc1\xbf\x1d\x9a\xbb\xed\xf0\x1f\x0e\x57\xf1\x0d\xa8\xd1\xde\xe5\x1a\xf3\x74\x9d\xf8\xd3\x56\x99\x01\xac\xf0\x4e\xc9\xda\xf3\xa8\xfa\xa3\xdb\x80\x5d\x89\xc4\x69\xe6\xbc\x0e\x43\x3f\xeb\xd3\xd8\xec\x3d\x9f\x28\xa0\x40\xca\x1b\xd5\xb3\x57\x77\x4c\x96\x23\xd5\xa0\x47\xba\xc4\x66\x58\xe4\x12\x04\xd1\xd0\xad\x15\x1d\xca\x80\xfb\x9f\x7a\xb9\x82\xb0\x6d\x5c\xea\x38\x6c\xfa\x04\xf3\x84\x80\xeb\x6a\x60\x6d\x55\xc9\x8b\x62\x71\x0c\x9f\x80\x40\x0f\x73\x6f\x0c\x58\xa1\x78\xce\x46\xbc\xe0\x00\xd8\x86\xa7\x72\xc0\xb0\xe6\x28\xaf\x05\xbb\xbc\x7c\x37\x60\x6a\x3c\x16\x68\x10\x23\xb9\xeb\x56\x56\x90\x5d\x66\x28\xde\x90\x52\x5c\xf5\x77\x1f\x0f\xbd\x8f\x87\xfe\xea\xdc\xad\xbb\x8d\x87\xfe\xd2\xe1\xcf\xbe\x94\x3e\x46\x3d\xbb\x5a\x45\x90\x74\x62\x55\x8d\xdd\x4e\x70\xf3\x92\x51\xfd\xec\x75\xb3\xaa\x5c\x11\x3e\xf4\xd7\x34\xcb\xed\xb2\xb9\x97\x78\xcb\xed\xed\xb4\x4e\x5a\xf7\x6a\xb1\xb9\xef\x8e\xf3\xd2\xbe\xf3\xdf\x14\x45\x70\x67\x61\xae\x0c\xba\x5c\xac\xe8\x6f\x98\xe9\x5c\x55\x2b\x51\xd0\xa9\xfd\x7b\x3e\x83\x9a\x58\xf8\x2f\x70\x28\x75\xe4\x8a\xb0\x69\x5f\x12\x00\x5d\x24\x58\x8b\x7f\xdc\xa3\x97\xf4\x20\xc2\xf8\x4f\xaf\xe8\x1d\x9d\x44\xcb\x7a\x7f\x14\x38\xb7\xfe\x0d\x4c\x87\x7b\x05\x0f\x53\x52\x8a\x3d\x30\xfb\x00\xaf\xa7\x18\xe0\x65\x23\x0a\xd3\x3b\xb5\x0b\x69\xd8\xf2\x8e\x7d\x68\xd7\x5e\xd6\x78\xac\x68\xae\x90\x3f\x3d\xec\x8e\x4a\x47\xf3\x87\x01\xfc\x2d\x24\x0e\x54\xc2\x66\x1c\xa1\xaf\xad\xa5\x42\xb3\xa6\xcc\x45\x15\xd5\x53\x36\x5a\x8d\x65\x1e\x68\xe5\xce\x9d\x82\x6e\x75\xaa\xc0\x00\xe7\x68\x11\x4c\x6e\xa0\x32\x0b\x73\x30\x78\xed\xd2\x46\xa1\x47\x50\xc4\x29\xc0\xa4\x52\x4d\xdd\x31\xcb\x79\xdb\x5f\xee\xb3\xd4\x9d\x65\xaf\x6d\xbd\x58\xad\x70\x99\xaf\x26\x2c\x21\x0a\xd9\x3f\x28\xf8\x4d\x51\x2c\xd8\x5f\x1b\x5e\xe0\xcc\x73\x35\xe3\xb2\x74\xb7\x25\x77\xfe\x16\xd3\xd5\xa0\xd7\x46\xf4\x5e\x11\xee\x00\x5a\xc1\xb0\x94\xe3\xad\xe4\x01\xa0\x80\x79\x7a\x0d\x23\x0a\x2c\x4f\xe6\xc7\x8f\x17\x67\x61\xbf\x14\xce\x72\xf1\xf6\xd5\x4b\xf6\x62\xc8\xce\xce\x35\xf9\x2a\x6b\x6b\x6b\x0e\xcd\x60\xde\xbc\xee\x8d\x3a\x46\x1f\x06\x23\x39\x87\xec\x7f\x5c\xe2\xeb\xf2\xba\x66\xec\xec\xdc\x65\xc4\x1b\x19\xd9\x16\xce\xe0\x20\x3c\x5a\xa6\x7a\x5d\x7e\x8b\xae\xab\x4f\x2f\x3f\xb1\x5c\x80\x47\x1a\x11\x76\x29\xea\x7c\x4e\x2e\x2a\x91\xf1\x46\x0b\x9b\x9b\xd1\x1a\x24\x7e\xd0\x8f\x34\x14\x13\x02\xa7\x80\xd4\x4c\xce\x9c\xe9\xfe\xe5\xbf\x3c\x07\x82\x01\x53\x14\x2f\x73\xec\xe4\xe5\xf7\xdf\x7f\xe7\x7e\x36\xe3\xfb\x09\xf1\x33\x84\x16\xc0\x3b\xb3\x29\xe0\x1a\xd8\x5c\x83\xa6\x6e\x2a\xd1\x47\x9e\x29\x93\x23\x10\x67\x60\xf5\xe9\x10\x9a\x85\xf9\x98\x12\xe5\x74\x4c\x7e\x76\x36\x40\xd5\x28\x0c\x5a\x03\x5f\xe4\xa7\xf1\x47\x6c\x09\x31\x7b\x4e\x6a\xe6\xfb\x70\xcb\x8e\x37\x0a\xae\x2f\x3f\xa5\xc3\x52\x82\x87\xad\xfa\x49\x76\x01\xc0\x52\xa7\x45\xc5\xee\xa4\x9e\xa2\xbf\x1e\x7c\x53\xab\xcf\x6a\xaf\x65\xfd\x34\x70\x79\x21\x97\xc8\xf8\x1c\xab\xe6\x8c\x89\x1b\x45\xbb\x8c\xd5\x9d\x54\x79\x68\x13\x88\x78\xb9\xa0\xa4\x8d\xd3\xd0\x99\xae\xc6\xec\x90\x7a\x44\xf3\x1e\xf0\xc7\x43\x6b\xe9\x65\x41\x41\xb3\xd8\x5f\xe2\x9c\x9f\x3e\x58\xcb\x88\x26\x8a\xe7\x64\x46\xaa\x7c\x91\x2d\x70\x8a\xd1\xf8\xcd\x28\x21\x17\xc4\xbc\xe8\xbd\x44\x93\x42\x8d\xb8\xf3\xeb\xed\xcc\xdc\x0f\xb3\x49\xad\xa6\x33\xf7\x42\xa9\x16\xb8\x13\x1c\x80\x8a\x35\xa1\xc5\xfa\x63\xdb\xc8\x0d\x7e\xbe\x28\x45\x65\x10\x91\x3c\x84\xdb\x96\xee\x06\x69\x6d\xdf\xe3\x08\x6d\xce\x9b\x5f\x17\xa9\xc2\x38\xef\x2e\xdd\xe4\x28\xfb\x2a\xe6\x4c\xce\x67\x1a\x81\xf7\x38\xe0\x14\xf3\xbe\xf9\x69\xc0\xbe\xff\xfe\x3b\x58\x90\x99\x75\xc8\xcf\x04\x44\xb4\x39\xd1\x1d\x96\xd7\xee\x6e\x2e\xc7\xa0\x0c\xd5\xb0\xda\x9a\xaa\xb2\x5b\x03\xb5\xed\xe3\x3e\x60\x10\xe6\xe2\x01\x36\xc9\xb3\x4c\x55\x39\xd9\xdf\x2d\xf3\x81\x7b\xc9\x33\x91\x7a\x5a\xa9\x66\x82\xd7\xe4\xe5\xfb\x33\x18\xa6\x83\x5b\x19\xd8\x90\x12\xeb\xee\x0f\x88\x72\xdc\x14\x63\x89\x40\xe2\x61\x0b\x37\xf1\xcb\xf7\x67\x8f\xb3\x4d\x57\xef\x2e\x37\x31\x32\xf7\x61\x8c\x45\x8f\x1d\x2b\x5a\x6d\x0a\x59\xc9\x85\xcc\x29\xfe\x89\x4e\x71\x22\x36\x20\x78\xea\x93\xa9\xda\x5f\xf5\x40\x7b\xa6\xb7\x63\xcb\x14\xd6\x39\xd9\x16\xb2\x34\xfc\x90\xb3\x91\xac\xbb\x68\x66\x8d\xfb\x56\xcc\x50\x48\xcc\xb9\xa1\x0a\x34\x50\x5c\xc1\x17\xa2\x62\x16\x69\xb5\x23\x8b\xf9\x4b\x7b\x3d\xc1\x2b\xb1\x6d\x46\xf2\xa2\x84\x80\x88\x0d\x69\x0f\xbf\x42\x97\x38\x1c\x58\xd3\x1f\x44\x39\x52\x1d\x17\x82\x56\x89\x12\xee\x82\x44\x51\x6b\xe6\x38\x89\xb1\x7f\xea\x42\x5f\x8a\xac\x12\x75\x5c\x98\xd2\x3c\xba\x93\x45\x9e\x19\x7d\x04\x78\xa1\x16\x35\xf0\x68\x8b\x9c\xd7\xc7\xd1\xa3\xc3\x23\xb5\x5d\x15\x38\x6f\x85\x18\xd7\x51\x31\xcc\x0d\x7c\xe9\x83\x03\x0d\xe3\xec\x31\xe7\xb8\x67\xae\x94\x67\x60\xd2\xc1\x37\x1d\x23\x8f\xdc\x17\x41\x2c\x31\xb2\xaf\xb7\xf6\x26\x83\xd1\x76\xaf\x33\xf3\x8e\x91\x64\xcc\x0c\x9d\xf8\x62\xf8\x8b\x63\x41\xbc\x50\xa5\x17\x8b\xec\x23\xb3\xe2\xb8\xb1\xa2\xc4\x25\x1b\x17\x12\x42\xd0\xac\x2c\x7f\x0d\x24\x70\x7d\xc0\xa6\x82\xe7\x36\xef\x02\x47\x3d\x6a\x0b\xb3\x83\x56\xdf\xb4\xab\xb0\x3b\x34\x3d\x1b\x01\xe1\x8a\x32\x98\x37\x40\xbc\xa7\xfe\xc3\x97\x68\x46\x6b\xb8\x58\x55\x2e\x42\x4c\xf5\x5a\xce\xc4\xab\x82\xa7\x5c\x5e\xe1\x53\x67\xd9\xe1\x2c\x83\x7f\xab\x71\x50\x3b\xb6\xc2\x96\x96\xc5\x7a\xf2\xa4\xd0\x42\xa4\xf0\xa8\x3f\xe9\x2f\xe6\x5c\xe0\x94\x05\x05\x0d\x74\xfb\x0d\x1a\x03\x1c\x73\x51\xf8\x46\x1a\x37\x06\x42\xfd\xc2\x2f\x10\x96\xd1\x51\x66\xaf\xc2\x67\x6c\xc6\xcb\x86\x1b\x95\x28\xf2\xba\x81\x44\xa7\x2a\x1f\x06\x59\x29\x2c\x2b\x26\x2a\x34\x23\x05\x36\x3f\x9a\xd6\xb9\xca\x8d\x98\x88\xd3\xfa\x53\x33\x12\x85\xa0\xaa\xb6\x7a\xae\x4a\xcc\xb3\x85\x5d\x11\x5a\x15\xb7\xce\x6e\x12\x8c\x0e\x48\xdd\x75\x6c\xe5\xf3\xb0\x90\x14\x4c\x88\xbd\x55\x15\x02\x04\x52\xf1\xfc\x01\xd3\x42\xa4\x6c\x08\xa2\x9c\x9a\xb3\x3c\x33\x0a\xf1\xc9\x8d\x98\x6b\xc8\x0b\x33\xbb\x7d\x42\xab\x78\x0c\x1b\x37\x9c\xa5\x12\x95\x42\x0b\xe0\x94\x97\x79\x21\x12\xc1\xd3\x7b\x1b\xe0\xc3\x6c\x80\x76\x61\xbb\x37\x07\x3e\x88\x42\xb1\x04\x5a\x2e\x8a\x05\x88\xff\x74\x0e\x28\xcd\xd9\x4b\x7a\x3e\x7a\xef\xd5\xc5\x19\xe8\x9a\x08\x15\x07\xcf\x40\x12\x33\x3a\x6c\xad\x18\x7e\x1b\x23\x10\xed\x1e\x20\x3d\x30\xcc\xa5\xa0\xec\x70\xba\x85\xcc\xc9\xb1\x71\xf8\x76\x91\x0d\x2d\xb1\xeb\xe6\xf9\xf3\x6f\x7f\x80\xaf\xb5\x44\x4e\x76\x86\x66\x67\x1b\xfa\x46\xee\x70\xfa\x72\xd5\x2e\xd1\xa5\x4a\x0c\x56\xa0\x18\x61\x33\x33\xd7\xd2\xb2\x7d\x73\x46\x90\x23\x57\x82\x19\x0a\xbd\xe5\x05\xd5\x0b\xf6\xef\x0e\xe1\x8c\x50\xc8\xc6\x80\x71\xdb\x0d\xcb\x38\xd4\x01\xbe\x3e\xa8\x9a\x32\xbb\x3e\x60\x33\x39\x99\x7a\xe1\xd5\x2d\x9c\x79\xca\x3e\xbc\x3a\x73\x8b\x7c\x84\xf9\x6a\x86\x03\xdf\x0a\x06\xe8\xea\x01\xb7\x79\xd6\x89\xc0\x30\x1c\x89\xc2\x70\xba\x1c\xc9\x2c\xae\xdd\x5e\xb8\xcd\xcd\xaa\xa9\x6a\x66\x17\xf5\xf5\xfb\x4b\xaa\x74\x7c\x74\xf1\xf6\x15\x7b\xf1\xe2\xdb\xef\x9e\x59\xa8\x79\x38\xcb\xb8\x34\x60\x48\x98\x35\x35\x54\xdf\xde\x7b\x8f\x3f\x93\x45\xf7\x09\x5a\x6d\x43\x0f\xf1\xa6\x76\x5b\x73\x58\xda\x16\xdb\x48\x02\x58\xcb\x64\xdb\x27\x3f\xa4\x9d\x52\xed\x16\x71\x50\x56\x24\x11\xec\x11\x08\x9e\xb2\x83\xea\x51\x10\x08\x7a\x65\xd1\xbd\x93\xea\xeb\xc1\x1f\x78\x7a\x0e\xaa\x55\x8c\x6e\x6d\xff\x14\xc6\xaa\x3b\x12\x3d\x45\xeb\xff\xab\xcb\xb3\xd7\x95\xbc\x4d\x49\x72\xed\x16\x2c\xae\xaa\x82\xf6\x36\x59\x16\x46\xd9\x79\x75\x79\xc6\xa8\x55\x02\x66\xca\x56\x68\x5a\xc1\x0d\x8d\x78\xd4\x65\x86\x65\x52\xc9\x0e\xd5\xeb\x4a\x4c\x8c\x26\x0b\xf8\xfa\x81\xa6\x6d\xc6\x94\xe3\xdc\x56\x29\x92\xe9\xb5\x79\x5b\x88\xfb\x5f\x54\xd1\xa4\xbe\xdf\x69\x92\x5c\x1d\xf3\xf8\x16\x1f\x6f\xbf\x2c\x34\x87\xce\xc2\xe4\x3d\xfb\x86\xbf\xa7\x6c\x0f\xc1\x70\xb0\xd1\x6a\x15\x3b\xbd\x32\x46\x73\x4f\xe7\x08\xb4\x1a\x44\x77\x14\x58\x07\xe8\xfb\xbe\x06\x7f\x00\x16\x3d\x32\x4c\xca\x88\x85\xa4\xcd\x52\x7a\x85\x07\xae\x57\x66\xc1\x86\x46\x3a\xa7\x05\xd2\x3e\x8e\x7b\x5e\x89\xb1\xbc\xa7\x75\x25\xa5\x78\xb5\xfd\xcb\xbc\x7a\x0e\x6f\x76\xe7\xe2\x9f\xb9\x7c\xc0\xf0\x43\x56\xe8\x0e\xa7\x15\x65\x26\xd7\x3e\xff\x8e\x8c\x09\xec\xd3\x37\x9f\x20\xed\x51\x82\x51\x4a\x17\x1c\x7c\x2f\x80\x34\x5e\x41\x15\x49\xac\x1f\x79\xcb\x0b\x99\xf3\x3a\xca\x92\xa0\xcf\x52\x4c\x3b\x7c\xd4\xfc\x0e\x58\x01\x54\xd7\x52\xbf\x64\x9f\x4e\xc6\x4a\x7d\xa2\x4c\x13\x34\x12\xe1\x4f\x03\xfc\xdf\x93\x4f\x70\x59\xe3\xdf\x23\x5e\x7d\x8a\xdf\xf0\xb9\x82\xf0\x73\xfe\x89\xa9\x8a\x7d\x3a\x11\x75\x06\xad\x52\xfc\xb9\x12\x3c\xff\x50\x16\x09\xfc\x62\x98\x0a\x15\xd7\xac\x2b\x23\x27\xc0\x2e\x63\xff\xc1\xaa\x25\x72\x42\x68\xd9\x2d\x98\x95\xd1\xbd\xec\x0a\xab\xa6\xac\x7d\xe1\xcc\x0f\x54\xa5\x84\x86\x35\x52\xaa\x10\xbc\x5c\x45\xc6\x6f\x6e\x65\x56\x27\xc5\x2b\xfb\x84\x89\x5b\x30\x88\x61\x32\x2a\xdc\xa1\xe6\x9e\x04\xbd\x51\x37\x78\xf9\xd6\xca\x21\xaa\xb8\x14\x2b\xc8\xaa\xe4\x63\x51\x43\x62\x95\xae\x2b\x2e\xa9\x7e\x81\xab\xa6\xe0\x8b\x69\x10\x3e\xf3\x90\xb1\x53\x57\x9d\xca\x74\x0a\xce\x5a\x4c\x31\xa2\x81\x40\x49\x04\x4d\xb8\xf9\x70\x3a\xce\x3f\x5c\x5e\x91\xcf\x61\x38\x1c\x9e\x98\xf3\x61\x43\xf9\x15\xf2\x41\x8a\xef\xb7\xef\xaf\x61\x0c\xde\xcb\x9d\x0f\x93\x3b\x73\x51\x88\x5a\xf4\x56\x51\x78\x1d\x3e\xb6\x55\xde\x2c\x22\xc3\x83\xc4\x8b\xa8\xe7\xbd\x0a\xfd\x48\xf2\xa6\xd7\x57\x5b\x9e\x19\x73\xe2\xec\xfd\x3e\x12\x90\x65\x70\x0b\x70\x7f\xbb\x2b\x92\xb5\xa1\xd8\x38\xb7\xe8\x12\x24\x31\x3a\x86\xb7\x85\xa4\xf8\xf6\x72\xbd\xa2\xbb\xe9\x76\x3b\xa8\x0c\xf2\x78\x85\x3c\xc6\x7a\xb3\xf2\x1d\xb6\x3d\x7b\x3a\x45\x3b\x5a\x9b\xb5\xdb\x82\x1d\xb4\xa5\x0f\x2e\xd2\xd1\x1a\x24\x48\x87\xaa\xaa\x71\xa8\x49\xe7\xa3\x7b\x1c\x38\x6b\x70\x7d\x6d\x40\x04\xfa\xbf\x37\x17\x1e\x23\xe9\x91\xea\xfb\xb4\xf6\x69\xb5\x10\x19\xca\xe7\x33\x69\x8e\xd5\x8c\xdf\x77\x45\x74\xf3\x63\x67\x7a\x33\xee\xe4\x49\xf3\x2d\x1b\x8c\x6d\x26\x37\x40\xf7\xaa\x96\xb7\x62\xcd\xe2\x56\xe6\xe3\xdd\x2f\xc8\xd2\xef\x70\x10\xc0\xb6\xd5\x37\x96\x6f\xa5\xa5\xb7\xae\xb1\x05\x1f\x78\x38\x1c\xce\x66\xb2\x3c\x31\x93\x47\x59\x20\x3a\x8d\x10\x2a\xfc\x7a\xa5\xbd\xec\x0b\x2d\xf5\x0f\xdf\x3f\xfe\x52\x9b\x6f\x2c\x5f\xea\x73\x95\xbf\x96\xba\x6a\xe0\xd3\x3f\x35\xf9\x44\x24\x6c\x94\x89\x46\x94\x34\xac\x9c\xd0\x8a\x74\x4d\x21\x9b\xf7\x2c\x77\xed\x09\x6e\x80\xb2\xf4\xb8\xe5\xc9\xed\xe8\xfb\xf9\xbe\xa4\xc8\x3e\x85\xee\x2b\x91\xe0\x9e\x42\xf9\x0e\xfa\x3d\x71\x34\xd7\x89\x34\x5a\xcd\x05\x56\x65\xa0\xfd\x0c\xf1\x83\x22\xc3\x20\x3a\x57\x5c\x31\x8e\x80\x7a\xbc\xd1\x6d\x97\x39\xd6\x96\x60\x53\xdc\x6f\x0b\x61\x36\xd1\x4d\xda\xd9\xd3\xd3\x30\x95\x8d\x94\x68\xba\xf7\xfc\x7c\x61\xcf\xcf\x8e\xc4\xe9\x14\xd5\xed\xfd\x39\x4f\x80\x3b\x6f\xed\x50\x59\x83\xaf\x6c\xeb\x52\xe9\x63\xcd\xeb\xf0\x16\x9b\x09\x6d\x4d\x0b\x73\x77\x66\xfb\x38\xf3\x72\xf1\x6b\xc6\xef\x3f\x96\x2e\x42\x25\xc1\x4c\x62\xc3\x62\x00\xf3\xc8\x6b\x36\x33\x17\xc6\x75\xab\x8f\xeb\x83\x2e\xf0\xd9\xb5\x2b\xae\x7b\x7d\x00\x6a\x76\xe3\xdb\x07\xa0\x1d\xf6\x4b\x03\x26\x87\x62\xc8\xc4\xad\x80\x02\xaf\x7c\xa4\x2d\x12\x96\x6b\x85\xd8\x80\xad\x38\x18\x55\x62\xae\xcc\xbc\x32\xaf\xd6\xce\x1c\x5c\xd6\xbc\x5a\xb8\xde\x35\x94\xd3\xc0\x90\x18\x73\xd2\x9e\x87\x56\xd7\x59\x53\x63\xb8\x9c\xb8\x27\x89\xdc\x45\x91\x82\xc2\x7e\x6d\x24\xf9\x53\x3f\xd7\x5d\xe2\x9e\x86\x3d\x6f\xb8\x13\x98\x04\xd1\x1e\xdc\x8a\x8d\x00\x75\x58\xd7\xa4\x14\x6f\xb0\x21\x60\x24\x59\xb2\x29\xec\x52\x21\x08\x1d\x6e\x0c\xd8\x4b\x36\xdf\x97\xeb\x83\x17\xcf\x9f\xff\xe3\x6e\x97\xb8\xbf\xc6\xf3\xbb\x64\x8d\x67\x84\x5a\xf4\x23\xc4\x84\xa3\x92\x4f\x2c\xa0\x9f\x08\xd5\xa2\xd1\xba\xe2\xd0\xd6\x08\xc5\x6b\x8b\x51\x6b\xf1\x12\x14\xec\x02\x87\xa4\x2c\x51\xd5\x84\x30\xdc\x91\x6a\x6a\xab\xb0\xba\x42\xdf\x29\x26\xc3\xa8\x23\x73\x01\xd5\x15\x97\x05\x12\x08\x56\xeb\x76\x51\xfb\x9c\xe9\x85\xae\x45\xb2\xd4\x4f\xe4\xc6\x74\xdd\xeb\x53\x07\x32\x4f\x01\xad\x7f\x14\xbc\xa8\xa7\x86\x2b\x93\xf0\xec\x7f\x10\xf7\x98\xc4\x06\x75\x2c\xbb\xc5\x4c\xe3\xf7\x7b\xcb\xea\xfb\xda\xe2\x53\x6c\xda\x52\x62\x97\x99\x58\x5a\x43\x4a\x99\x00\xe4\xac\x99\xb1\x6e\x8d\xf7\x2d\xbe\x85\x8b\x44\xd3\xed\x7a\x10\xc2\xc7\x3e\xaf\xa1\xbb\xbd\x09\x22\x67\x77\x5c\xb3\x79\xa5\x32\xa1\xb5\xa7\xf2\xd3\xf3\x33\x44\x01\xad\x7c\xc3\xd0\x43\x65\x03\x10\x47\x4d\xcd\xa6\x1c\x9d\x99\x0b\x61\x84\x09\x51\x7a\x55\x82\x3a\x4b\x19\x1f\x7c\x38\xfe\x90\x9d\x82\xa5\x3c\xaa\xdf\x0d\x20\xd4\x73\x2f\xd4\x40\xd4\xe2\x9d\x05\x36\x0f\x46\xe7\x47\x1e\x32\xb0\xd0\x6d\xd6\x7d\x1d\x70\x64\x0d\xa3\x14\x25\xb8\xcc\x5e\xff\x14\x66\x07\x70\xcd\x8c\x82\x56\x4e\x70\x32\x33\x5e\xdd\x90\x61\x16\xfc\x38\xa6\xf7\x23\x55\x11\xd7\xe4\xd0\xb5\x6a\x10\x8d\x57\xb0\x1b\xb1\xb0\x1c\xd3\x8c\x3f\xe1\x6c\x37\x1f\x87\x2a\x80\x36\x1f\xc2\x36\xda\x72\x8a\x2e\x88\xdf\x8d\x2e\x97\x79\x79\x58\x33\x95\x65\x4d\x85\x60\x8f\x6e\xc6\xc0\xfc\x11\x3f\x57\xd6\x41\x89\xdb\x99\xba\x0d\xd1\xd6\xb0\x10\x56\x53\x2b\x43\x3c\x19\xdc\x8f\x66\x9d\x96\x6e\x23\x2d\x88\x56\x33\x9c\x0a\x8c\x2b\xc0\xea\x9a\x28\xa1\x99\x9e\x29\x57\x39\xdd\xac\x8f\x2f\xe1\x84\xa8\xa2\x36\x73\x03\x24\x0d\x5a\x30\xec\xec\x1d\xaf\x26\x22\x38\x43\xc2\x88\x9c\x42\x87\x8b\x8d\x02\x71\x0e\xf9\x26\x66\xd1\x46\x85\x98\x51\xea\x82\x99\xbf\x5d\x9f\xa4\x0e\xd6\x57\x5d\x7f\x7b\xc6\x7e\x25\x67\x68\x6e\x4f\x30\xb8\x6e\xd8\x8a\x9b\x17\x8c\xd4\xbf\x41\x31\xc6\x95\x4b\x50\x2a\x16\x2e\x41\x77\x3d\xd6\x11\x31\xca\xce\x87\x6b\x55\xf3\x22\x58\xd6\x39\x32\x90\xa6\x0c\x21\x6c\x3b\x57\xde\x7a\x5f\xb6\x6c\xe0\x0f\xa2\xa4\x92\x69\x4b\x6d\x10\x6c\xe2\xda\x79\x0e\x02\xe7\x01\xd4\x13\x97\xad\x63\x8e\x2b\x5e\x51\xc3\x98\x24\xed\xf2\xa2\x03\x09\x00\x4d\xe9\x2a\xf3\x8c\xd0\x9c\x82\x5b\x84\x7a\xa5\x18\x82\xee\x28\x99\xf8\x6b\xc3\x0b\xd0\x70\xcf\x5f\xff\x74\xe8\x94\x30\x3f\xbe\xdd\x58\x6d\xad\xbb\xa4\xaf\xce\x73\xa7\x09\x9b\x18\x49\x85\x12\xd6\xf8\x48\x16\xb2\x5e\x20\x3e\xde\x8d\x68\xa5\xcf\x12\x24\x6b\xe8\x95\x61\xe4\x96\x89\x7d\x23\x21\x86\xb1\xe3\x4d\x2e\xcc\x7b\x1f\x1b\xb0\xb7\xe7\x7e\x15\x16\x83\xaf\x1a\xa6\x64\x1d\x93\xb2\xc6\x94\x7d\x7f\x8a\xc8\x8f\x29\x4a\xf0\x45\xaf\x13\x52\xb0\x92\x05\x6d\x55\xfa\x39\x61\x38\x69\x31\xb6\xed\x4c\x26\x71\x27\xbd\xc6\xd8\x6e\xb3\x38\x92\xbb\xcb\x44\xf7\x31\xf8\x4f\xc2\x12\x1b\x2f\x9d\x7c\xcc\x18\xfc\x95\x57\xef\xde\x74\xbb\x0f\xc5\xdf\xa5\xe5\x38\xc1\xbb\x76\xc1\x04\x7b\xad\xc6\xdd\x66\xab\xae\x8a\xe5\xf8\x85\x90\x10\x68\x7e\x6d\xca\x53\xfd\x51\x83\x78\x0b\x51\x4d\x98\x79\x59\x40\xf4\x8f\x21\x85\xb1\x86\x3f\x13\x6c\xd2\x88\xe2\xe7\x95\xbc\x95\x85\x98\x88\x37\x3a\xe3\x45\x8f\x06\xd0\xd7\xd2\xa7\x4c\x6b\x30\x7a\x82\x70\x9a\xf1\x48\xb5\xc7\x90\xe1\xb9\x7d\x99\x09\xf7\x76\x17\xf3\x24\xc4\xf3\xae\xab\x08\xaf\xc7\x45\x07\x0f\x0e\x78\x2b\xb9\x21\x05\xc0\xd2\x6e\x82\xfc\xe1\x6e\x2a\x6b\x51\xb8\x9a\x37\x2e\xfd\x21\xa7\x46\x88\x0a\x4d\xd0\x34\x61\xb1\x03\x0c\x84\x06\x15\x78\x24\xf2\x9c\xd0\x1a\x6c\x7a\x25\x58\x48\x83\xba\x1b\xc8\x7f\x66\x82\x97\x9a\x95\x2a\xfa\x02\x2c\x4e\x53\xda\x8f\x77\x7b\xd9\x1d\x0b\xed\x64\x89\xfc\x1a\xac\x1d\x9f\xa3\x6e\x22\x53\xb1\x77\x89\x46\x31\xdb\xcf\xc2\x27\x61\xe0\x09\xed\x3b\xe9\x2a\xb9\x83\x1e\xf3\xca\x0a\x8b\x7b\x2d\xc3\x7a\x1c\x14\x56\xcb\x61\x81\x7d\x15\x1b\xc6\x9b\x7a\xaa\xaa\x43\x50\x72\xb3\x4a\x20\xed\xfc\xa7\x2d\x05\x61\x98\x2c\x1a\x43\xfc\xb8\xc0\xc0\x03\x01\x62\xa9\xb9\x60\x32\x3d\x1e\xa6\xd7\x95\x9a\x87\x0f\x37\xc3\x92\xe0\xed\x54\x92\xfe\xd5\x0c\xda\x24\x88\xd1\xba\x0e\x7c\x9a\x87\x1e\x32\xf6\xc6\xd6\xad\x2e\x65\xe1\xcc\x26\x1e\xe2\x3b\x6c\x6d\x17\x0f\xb2\x52\x18\x7a\x4f\xe6\xbc\xe2\x33\x41\xb0\x62\x02\xb4\x4d\x79\x2b\x50\xab\x76\x46\xac\x46\xf3\x49\x22\xcb\x44\x47\x0e\x8d\x92\x80\x25\xe8\xd9\xf5\x01\x95\xcc\xd9\x39\xb5\x06\x79\x3b\xc1\xfa\xda\x94\x94\xfe\xd5\x75\x2d\x82\xb5\x65\xed\xc5\x75\x89\x17\x7a\x48\x4b\x9b\x58\x53\xdf\x28\x5a\xd2\x9d\xcf\xd4\xe5\xe1\x04\xf3\x3c\xaf\x54\xf6\xb3\x6a\xca\xba\xa7\x6c\xce\x69\xaa\xd9\x12\x6a\x8a\x1b\x0e\x97\xd2\x13\x50\x05\xa4\x82\x23\x13\x8e\xde\x8d\xa9\xeb\x0a\x05\xe3\x20\x8b\x27\x6e\x3c\x16\xbc\x6e\x2a\xc1\xc6\x05\x9f\x58\xbe\x89\xe1\x9d\x5b\x9d\xae\x8f\xa5\xe6\x63\x71\xb9\xd0\x59\x12\x76\x2a\xd5\x2a\x66\x57\x01\x27\xb7\x2b\xd3\x40\x6b\xa6\xb1\x79\x7c\xf3\x94\x00\xbb\x02\xb5\xe7\x45\x59\x57\x0b\x38\x3d\x58\xbf\x91\xb3\x79\xc1\x65\x49\xef\x91\xcd\xb8\x32\x32\x21\xf0\xb2\xeb\x83\x6f\xae\x0f\xcc\x1f\x04\x20\xc2\xb1\xc4\x26\xd4\xab\x2f\xb5\xcc\x21\xcf\x0d\xea\x7b\x52\x46\x50\xb0\x57\x34\x94\x21\xbb\xc4\x88\xe4\x6f\xe8\x02\x31\x34\x19\x8f\x36\x2c\xf6\x3b\x74\xb0\x1f\x53\x6e\xcb\x66\x11\x1d\x70\x9b\xaf\xd3\x99\x6e\xb8\x20\x86\x4f\xdf\x2a\x99\x93\xee\x61\x58\x6b\x9c\x95\x24\x86\x93\x21\xbb\x3e\x18\x2b\x75\x62\x26\x47\xb5\xd8\xf0\x87\x11\xaf\xb0\xf0\x12\xfe\xe3\x6f\xe6\x1f\xa2\xce\x86\xc1\x4b\xc3\xf6\x4b\xc3\xf0\xa5\x61\xf0\xd2\x46\xa4\x41\xfb\x75\x9a\xaf\xb8\xca\xd2\xed\x3c\x6e\x39\x82\xa6\x51\x29\xaf\xee\xb5\xe6\x2c\x70\x79\x50\xde\xc6\xe3\xc2\x34\x65\x61\xf1\xf8\xec\x05\xee\xcb\x46\x02\xc0\x4b\xa5\xe6\x84\x5d\xe5\xae\xa6\x21\xc3\xbb\x8b\x2f\x56\x5c\x5d\x3d\x63\x5f\x7a\x7b\xc5\xd7\x2b\x0e\xdb\x95\xe2\x0b\x30\x20\x5d\x45\x25\xa8\x17\x2a\x04\xa6\x8f\x81\x67\x27\xc6\x88\x4a\xdd\x9f\x45\x8c\x35\xb8\xc1\x76\xad\x2d\x71\xae\x78\xc1\xfa\x34\x3a\xdb\xe8\xb0\xa5\x6c\xb9\x2c\x6e\x5d\x33\x20\xa2\x4c\xcc\xe1\x05\x1c\x1b\x27\x90\xc2\x4e\x97\x90\x21\x46\x10\x9d\xf4\x42\x5a\xf8\x1c\xab\x6a\x24\xf3\x5c\x94\xbd\xfc\xa8\xdd\xa2\x97\x17\xb9\x86\x4f\x81\x0d\x75\x06\x93\x64\x44\x21\x07\x72\x6f\x2c\x67\x18\xd8\x6c\x53\x8e\x11\xbd\xb5\x1b\x96\x61\xf5\xa0\xee\x86\x69\x97\x29\xb1\x4e\x62\x85\x4b\x24\xb1\x99\x15\xe4\x41\x4d\x64\x56\x6c\x28\x19\xf4\x64\xeb\xfc\x3a\x00\xa8\xb7\xb3\xf3\x57\xdd\xb1\xd3\x83\x96\x22\x16\x28\x94\x41\xed\xcc\x46\x83\x9c\xf7\x47\x7a\x45\x96\x11\xe3\x4a\x93\xbb\xe9\x9f\x0a\xf2\xa5\x3f\x4e\x0f\x37\x1d\x80\x7d\x6d\xed\x41\x9c\x9f\xbd\x4e\x0f\xe0\xfc\xec\xf5\xa6\x1f\x37\xaf\xac\xff\x61\x55\xa5\x50\xf6\xdc\xa3\xf0\xe3\x78\xde\x5c\x8a\x0b\x0b\x92\x98\xe2\xdc\x71\x71\x3f\x57\xbb\x95\x2a\xe3\xbc\x1c\xa8\xb8\x69\x39\x5c\xc2\x64\xe6\x9f\xad\xa3\xc2\x8f\x04\xc2\x9d\x69\xcf\x35\xf3\xf4\x82\xd9\xb4\xde\x0b\xa5\xea\xb7\xb2\x10\x18\x5e\x92\x48\x64\x4a\xb6\x63\xed\xac\x63\x3c\x7d\x98\xc8\x15\xc0\x1a\x11\xd8\x11\xa5\x53\x9b\xbe\x50\x7a\xad\x94\xaa\xd9\x58\x16\xc2\x86\xb5\x30\xeb\x77\xf7\x57\x76\x74\x3d\x87\xc5\x9f\x82\x1e\x4b\x55\x1e\xf7\xf7\x8a\x02\xef\xe5\xb9\xb5\xfa\xe6\xa2\xb4\xc0\xcb\x58\xe5\x95\x26\x30\xe6\x85\x16\xad\xaf\x83\x91\x77\x9d\xa1\x9b\xbd\x00\xef\x3f\x24\x99\x8f\x9a\xda\xc5\x02\xd0\x3d\x8d\x66\x22\x2a\x5d\x97\xda\x88\xb4\x80\x90\xda\x8a\x74\x4b\x97\x7a\xd7\x2f\x15\x19\xe9\x66\xde\xaa\x00\x67\xd5\x7c\x76\x05\xc8\xd1\x98\xeb\x4d\x89\x73\x94\x9a\x45\x6f\x81\x13\xd3\xd9\x48\x41\x54\xd9\x8c\xa1\x83\xe5\xab\x87\xa7\x5f\xb8\x67\x6b\xb0\x75\x27\xe7\x40\xa8\x5d\xf0\x2a\xa1\x90\x51\xb1\x30\xd0\x80\xb4\xa8\x13\x65\x44\xd5\x4c\xd6\xb5\x2b\x4d\x07\x95\x87\x83\x6e\xcc\x71\xaa\xf9\x8d\x00\x90\xe4\x5b\x04\xbb\x0e\xd0\x8e\x23\x4d\x2a\x78\xcd\xaa\x51\x13\x18\x63\x5b\x8d\xda\x90\x3f\xf8\x7e\x13\xd7\x8b\xb7\x21\x26\x52\x0e\xe9\xd1\x76\xeb\x08\x6f\xf6\x2c\xe3\x96\x93\x30\x5d\x26\xe6\x60\x2d\xa2\x5d\xaf\x1c\x3e\xd8\x78\xfc\x50\x60\x77\x17\xa3\xbe\x7c\x03\x03\x48\x8d\xb9\x6b\xaf\xed\x0e\xbf\xd3\x66\x5d\x41\x25\x7c\x93\x72\x65\x31\xd0\x77\xa7\x42\xcb\x65\x67\x7c\x89\x89\xde\xf6\x19\xc7\x6e\x3b\x16\xb1\x8e\xd5\x86\xc0\x23\xe6\x45\x33\x91\x65\x9f\xe5\xa6\x54\x2c\x69\x08\xbb\xb2\x06\x68\x0f\x43\xa1\xb1\x8a\x2c\x5f\x80\x48\x70\xf8\xcd\xe1\x26\x5c\x67\x79\xc0\x48\xff\x21\x5b\xc2\xa0\x36\x4b\xba\x36\x2c\x64\xcb\xc4\xeb\xd0\x7f\x00\xf9\xc5\x1d\x8f\xc0\xd6\xc9\xd8\x13\x23\xab\x87\x27\x05\x57\x7f\x9d\xbc\xec\x89\xcc\x7f\x07\x29\xd9\x9b\x5e\x31\x9b\xa6\x65\xf7\x72\xc6\x34\xe1\x25\x5a\x7e\x95\x74\xd7\x6c\x4f\x77\xcd\xef\x95\xee\x56\x5c\xc9\x1b\x91\x5d\xcf\xd5\xd6\xf5\x31\x27\xdb\x7d\x51\x92\xdb\xdd\xaa\xf6\x0b\x0a\x89\x6a\x6f\xb0\x0e\xbd\xeb\x14\x3f\x8f\x24\x67\xd4\xc0\x7e\xf4\xbf\x45\xb4\x97\xf2\xd6\x7b\xf7\xf8\x50\xaa\x93\x5c\x65\xfa\xa4\xe6\xfa\x46\x9f\xb8\x0a\x14\xc7\x73\x95\x1f\x3b\xa1\xfd\xc4\xa2\xd2\xc3\x4f\xe2\xbe\x3e\xd9\x00\x4c\x9f\x76\xd8\xdd\xf9\x2b\xe8\x66\xa5\xd0\xd0\x25\xa1\x55\xaf\x3c\x69\xb4\x92\x84\x2c\xb6\x26\x6e\x49\xf7\xcd\xdf\x01\xdb\xea\x95\x5f\x1f\x8a\x66\x52\x8d\x78\x66\xc8\xf5\x74\x32\xa9\xc4\x04\x6c\xc9\xe9\x12\x5f\xad\x06\x01\x6a\xd0\x54\xdd\x99\x6d\x2a\x14\xc4\xb0\xbf\x42\xb4\xf6\x0b\x55\x60\x21\x1e\x4e\xef\x99\xc3\x48\xfe\x82\xa0\xc9\x4a\x02\xcb\x7c\x5b\x9b\x70\x94\x20\xb7\x57\x89\x56\x6c\xaa\x8a\x3c\x8a\xcd\x72\x4f\xd0\x2c\xd5\xc6\x8b\x1e\xcb\x32\x8f\x87\x0f\x1a\xb9\x3f\x16\x50\xb6\x06\x2e\x53\xe0\xc4\xb6\x06\x82\xed\x35\x2c\x34\xd6\x9a\xe6\xa1\x66\x73\x51\xcd\xa4\xd6\x70\xe4\x22\x2f\xca\xf6\xd4\xb6\x49\x86\x56\x7a\xd7\xc3\x9d\x58\xb6\xa8\x94\x29\x4e\x40\xfc\x85\xb8\x15\xc5\x00\xab\x0a\x59\x4a\x94\xe5\x04\x23\x17\x0d\xfd\x5f\xf8\xc2\xdb\x2e\x0e\xc2\x41\xf5\x83\x9d\xbd\x29\x65\x8d\xd0\x36\xa6\xfb\x9f\x24\x96\xa7\x57\x55\xb8\x68\xf4\xeb\x1a\xe1\xdc\x9b\xd2\x2e\x81\x88\xcc\x31\x79\x82\xac\x0e\x58\xc1\xa9\x4d\xd5\xa3\x46\x16\x39\x19\x22\xcc\xa4\x30\xd9\x43\xea\x70\xa0\x40\x12\x89\x6f\x68\x51\x07\xe4\x80\xef\x43\x56\x84\xcf\x3f\xb1\x79\x7a\x86\xd2\x72\x59\x89\xac\xa6\xba\x62\x70\x76\xf0\x15\x4b\x2d\xba\x56\xb3\xb9\xd7\x54\x83\x64\xa4\x35\xae\xa5\xbe\x73\xfe\xeb\x60\x1f\x1d\xba\x8f\x86\x7f\xc2\x41\x98\xdd\x68\xf8\x1d\x86\xad\xf7\x94\x2b\xc3\x73\x47\xf7\x07\x26\x9f\x45\x9c\x2d\xc5\x04\x1e\x20\x34\xd8\xb3\xe9\x3f\x81\xd7\xf4\x26\x01\x9d\xd0\x07\xc6\x85\xc9\xbf\x61\x34\x61\x1b\x69\x39\x1e\x6c\x18\xd9\xd9\x09\xea\x4c\xdc\x0f\xc4\x8d\x97\x5e\x13\x96\x8f\x3b\x6e\x6f\xc8\x3f\x78\x3e\x00\xc3\xbd\xa1\x3f\x92\xb1\x99\xac\x11\xc4\x0c\x1d\x2c\xb6\xea\x4a\xf4\x92\x15\x6d\xa8\x62\x5d\xc9\x67\x42\xcf\x79\x46\x7c\x80\xe7\x98\x1c\x1a\xe5\x8d\xde\x4a\xce\x2e\x11\xd8\x74\xa5\x32\xa4\x0a\x71\x21\xc6\xfb\x98\xf9\x3d\x57\xdc\x73\x45\xcb\x15\xe9\x4c\x74\xf9\x22\x3e\xf0\xb5\x5e\x37\x3c\xb2\x2e\xed\x37\xe8\x88\xd6\x1d\x2b\x32\x59\x8f\xd1\x29\x31\x32\x5b\x9c\xa5\x12\x75\x53\x95\x80\x20\x5c\x55\x6a\x23\x81\x87\x3e\x85\xde\x05\x4c\xcb\x48\xe9\xd2\xf8\x84\x78\x7e\xc0\xbf\xe8\xcc\x51\x42\x07\xaa\x01\x66\x86\x98\x82\xa8\x63\x7f\xe3\xd6\x9c\x9f\xbe\xff\xd8\x6c\xdf\xf2\xf0\xad\xb9\x7f\x3a\xa3\x29\xdd\x2e\x85\x2e\xd5\x6d\x99\x02\xdf\xdb\x67\x34\x3d\xa1\xaa\x22\x4b\xb7\x6c\x6b\x82\x4f\x10\xe5\x3e\x9f\xe9\x2b\xbb\x34\xb6\x4e\x3e\xda\x8a\x69\x25\x12\x92\xd6\x61\x5c\x2b\x39\xd6\x1a\xac\x6a\xcf\xa3\xbe\x1e\x1e\xb5\x63\xe6\xb4\xe7\x4a\x7b\xae\x94\xe4\x4a\x9b\xb0\xa3\x40\xaf\x4f\x24\x42\xda\x67\x24\x7b\x86\x7a\x6c\xcb\x24\xe9\x70\xc0\xab\xc6\xea\xd2\xae\x28\x8b\x53\xa8\x3b\xf0\x49\x46\x39\xb6\xd6\xeb\x40\x6c\x65\x10\x13\x2e\xb3\xa9\x17\xcf\x53\xcd\x56\xe9\xcf\xb7\xa2\x1a\xa5\x79\x5f\x5f\xfc\xce\xe9\xf9\x59\x1c\xb6\x13\x02\x0d\xd9\x87\x64\x3c\x0e\x8b\x5d\x3b\x5e\x81\x7e\x22\x57\x0a\xfd\xf4\xfc\x2c\x0c\xe6\x09\xb2\x27\x79\xb9\x60\x3c\xc2\x1d\x12\x39\xe3\x13\xd3\xa3\x2b\xc6\x8f\x67\xab\x99\x89\x0a\x8a\x91\xb8\x8f\x00\xa6\x5f\xb9\xf0\xbd\x7b\xa3\x7d\x07\xc9\x66\x8d\xd0\xbc\x52\x95\x17\xd4\xf5\xc7\x8b\x77\x89\x55\x79\x1f\x37\x20\xc6\x82\x69\x18\x73\x5e\xd5\x92\x17\xac\xa9\xac\x57\x95\x8a\xe3\x12\xc3\x9f\xf2\x5b\xc1\x78\x06\x41\xfd\x86\x05\xb0\x6f\xa2\x10\x5b\xa4\x14\xd0\xd7\x38\x2e\xe5\xb8\x29\x8a\x01\x1b\xcb\x12\xb0\xcf\xc4\xdc\x05\xff\xf2\x7a\xca\x2e\xa5\xd1\xe7\x30\xe4\x93\x98\x16\x8c\xc8\xf4\x68\x28\xcd\x91\x0b\xe8\x6a\x51\xd0\x1f\x7c\xc2\x90\x4e\xc6\x6d\xa5\xdd\xc8\x9f\x12\x78\x01\x80\xb1\xf1\x94\xb9\x9f\xac\xde\x46\xc7\xb4\xd1\xfd\xe0\xd8\xab\x15\x6c\x86\xdf\xa1\x23\xac\x2a\xa3\xd9\xf5\xc1\x5c\xe5\xfa\xfa\xc0\x90\xf4\x35\x95\xb3\xd6\xd7\x07\xcf\x20\xb1\xab\x35\x0f\xca\x64\x0b\xde\x35\x5c\xed\xfa\xe0\xd9\x80\x39\xe3\xd4\x48\xd5\xd3\x0d\x23\x2f\xe9\x0b\xef\x79\x32\xa8\xeb\x22\x7c\xdc\xf6\x3e\xc4\x41\x5e\xb0\xba\x61\x11\xd4\xf8\x34\x32\x9f\x54\x6b\x88\x03\x13\x11\xa0\x75\x80\x5a\xe5\x13\x15\xb7\x9b\xc5\x92\x19\xb4\x2e\x5e\xbf\x19\x28\xa5\x74\x46\x6b\xdf\x3b\x2d\x8a\xa8\xa8\x18\xfc\xd3\x9e\xe7\x8d\x06\x89\x0c\xa7\x33\xc0\x5f\xcc\xcf\xf1\xe0\xf0\x27\x3c\x2f\x8e\x82\xde\xbd\xc3\x4b\x99\x3e\x6e\x2e\x71\xf4\xf3\x9d\xd6\x78\xdb\x89\x0b\x61\xbe\x46\x58\x8a\x36\x16\x20\x77\x99\xb9\x66\x8e\x43\x06\x9d\x27\x26\x05\x17\xe1\x03\xe2\xe7\x42\xab\x45\xda\xfe\x82\x73\x0c\x0f\xe1\xce\xfd\x70\x7b\x00\xa5\xbd\x71\x74\x2f\x51\x3e\x92\xcb\xe8\xeb\xf0\x15\x6d\xe2\x24\x5a\xea\x1d\xea\x75\x0b\x55\xaa\x5f\x86\xed\x71\x0a\x85\xa6\x65\x57\x83\x1c\x25\x57\x55\xad\x6d\x81\xae\x57\xfa\x8c\xf0\x42\xf0\x9d\x87\xcd\x46\x8b\x8e\xd4\x2c\x6b\x26\xee\xa5\x06\x68\x5a\x73\xe5\x05\x96\x32\x2c\x38\x3e\x91\xb7\xa2\x0c\x07\x6b\xe4\x24\x10\xda\x10\x83\x00\x07\xcb\x03\xd1\x6a\xef\xb5\xda\x33\xe6\x3d\x63\x7e\x04\xaf\x55\x1f\x3b\x71\xd8\xca\xdb\x70\x94\xbd\x4f\xeb\x73\xfb\xb4\xb6\x70\x66\xad\xf4\x62\xad\xe1\xbe\xda\xfb\xad\xbe\x34\x7f\x5e\xdf\x26\xbc\x63\x87\xd5\xde\x53\xf5\x15\x5f\x14\x8f\x69\x13\xde\xd2\x45\xd5\xef\x9b\x5a\xe6\x94\xda\x7b\xa3\xbe\x12\xce\xb3\x2b\x96\xb3\xe7\x35\x7b\x5e\x13\xf3\x9a\x4d\x99\xcc\x72\x91\x38\x55\x75\x03\x54\x51\xd8\x6c\x77\x44\x41\x3c\xc4\x6a\xd0\x8d\x0e\x53\x16\x92\x1c\xc8\x3a\x7f\xec\xc0\x07\x07\x46\x5a\xee\x77\x12\xf5\xfb\x88\xac\x8b\x08\x3d\x30\xb6\xd0\x82\x23\x66\x1c\x91\xb7\x69\x6e\xae\xd1\x99\xee\x20\x23\x2a\x30\x66\xaf\xd5\x2d\xcc\xa8\xeb\xc5\xe1\x33\xd1\x76\x6b\x6d\xd0\x6d\x8f\x31\xd8\x4a\xd2\x7d\x22\xbe\xdf\x46\x1e\x28\x38\x91\x94\x6f\xd4\x19\x70\x19\xc9\xdc\x1c\x1e\xc4\xb3\xa0\x6d\x25\xeb\x4c\x64\xb7\x07\x34\x86\xc0\x05\x63\x74\x08\xc6\x6d\x8a\xc2\xe9\xf9\x99\xe7\x21\xf4\xbd\x01\x6a\x4c\xc8\x84\xc6\xe4\x79\xb1\x2a\x86\xf5\xb6\xc0\x10\x0c\x63\xc7\x0d\x05\x25\x6a\x95\xad\xe3\xa1\x24\x84\xea\x0f\x39\x17\xe9\xc3\xb6\xb0\xad\xb7\x86\x93\x1e\x35\xb4\x68\x7f\x40\xfa\xd7\x07\x88\xbc\x04\xdc\x51\x66\xe2\x34\x83\x2a\x13\xb6\xb1\x6e\xb7\xee\x3d\xc2\xd4\xcd\x47\x3b\x7d\x1c\x99\xeb\x66\x43\xba\x55\x63\xbb\xfa\x6d\x92\x1a\xb2\x5f\x30\x8f\x95\xca\x3d\xbb\x6a\x18\x7e\xea\xbc\x12\xec\xfa\xc0\x8c\x04\x11\xa4\x60\x28\xe6\x4f\x33\xae\xeb\x83\x78\xa6\xd7\x07\x4e\xbd\x0d\xd4\x57\x67\xb0\x0b\x6e\x64\xd3\xc4\x0c\xd9\xde\xde\xad\x57\x48\x18\xa8\x04\xc0\x00\x85\x3a\xef\x26\x27\x8b\xb6\xad\x6f\xf2\x7d\xbd\x81\x9e\x9e\xee\x92\x74\xfd\x0e\x39\x58\x61\xc6\xce\x9e\x3e\x79\x43\x6c\xc3\xd0\x76\x10\x88\xee\x9d\x89\xb8\xae\xe8\x88\x8c\x56\x16\x76\xc1\x95\xce\x31\x8b\x87\x5e\xbc\x6d\xd7\x29\xcd\x2a\x08\x50\x73\x9f\xcb\xf7\xfb\xcb\xe5\xc3\xad\xdf\x27\xf4\xfd\xce\x12\xfa\xd2\x27\x7e\x9f\xd5\xb7\xf7\x04\xfc\x9e\x94\xae\x27\x9c\xd5\x67\xcb\x22\x7c\xa1\xd4\xbe\x74\xd1\x86\xbe\x3b\x63\x9f\xe4\xb7\x67\x92\x7b\x26\xf9\xfb\x60\x92\xbf\xa1\x24\x3f\x82\xfc\xfa\x0a\xbc\xa2\x16\xed\xe7\x0b\xa6\xfb\x6d\x75\x23\xec\x13\xff\x7e\x23\x1c\xfb\x0b\x27\xfe\xf5\x4a\x1c\x7b\x3f\xc7\x57\x76\x9b\x7c\xf1\xec\xbf\xcd\xf8\xd8\x3e\x0f\xf0\xf7\xc5\xb2\x1e\x83\x57\xed\x99\xd4\x9e\x49\xad\x9b\x0c\xb8\x06\x77\xda\xa7\x05\xee\xd3\x02\xf7\x69\x81\xfb\xb4\xc0\xdf\x61\x5a\xe0\xe1\x37\x87\xbd\xe9\x80\x2e\xc3\xc3\x9e\x58\xe6\xb8\xc6\x90\x1d\x7e\x73\x32\x56\x2a\x7a\x19\xda\x36\x23\xb7\x9b\x87\xd0\xc0\x10\xd9\xda\xdd\xee\x13\x10\xfb\x2d\x2a\xfb\x2c\xc4\xdf\xac\x60\xbd\x17\x65\xbf\x22\x51\xf6\x29\x66\x21\x7e\x16\xdf\xd6\x76\x4e\xad\x7d\x52\xe2\x3e\x29\x71\xcf\xa7\xf7\x7c\xfa\x4b\xf3\xe9\xdf\x4d\x52\xe2\xde\x07\xb7\x4e\x7a\xe2\x66\x37\xd7\x3e\x51\xf1\xab\xe5\xd9\x5f\x2a\x51\xb1\x2b\xfd\xec\x8d\xd6\x5f\xd9\x0d\xf2\xe5\xb2\x15\xd7\xe4\x4e\xfb\xbc\xc5\xdf\x2c\x23\xda\x29\x07\xda\xb3\x9e\x3d\xeb\x59\x99\xbc\xb8\x26\xcf\xd9\xa7\x31\x7e\xed\x69\x8c\xb1\xd8\xbd\xcf\x65\xdc\xe7\x32\xee\x73\x19\xf7\xb9\x8c\x09\x7e\x61\xc4\xac\xbc\x29\x64\x39\x01\xa0\xbb\x4a\x2a\xa8\x68\x58\x70\x9d\x90\x63\xa2\xc7\x4e\x0a\x9c\xf1\x39\xf8\xa0\xc8\x9d\x3c\xa7\x46\x2c\x83\x56\xc0\xd2\x88\xa5\xb8\x47\x46\x8c\x9b\xd8\x42\xb0\x43\x76\x65\xe4\x48\x98\x22\xf9\xac\xa8\x54\xbd\xcc\x6d\xcb\x95\x21\x10\xe6\xed\xbd\x3c\xbb\x6b\x79\x36\x5a\xb1\xf6\x02\x06\xff\x22\x7f\x3a\xaf\x46\xb2\xae\x78\xb5\xb0\x82\x26\x88\x05\x8d\x6e\x78\x51\x2c\xd8\xbc\x52\xb7\x32\x17\x9a\x4d\x1a\x99\x8b\x02\x56\x5c\x95\xec\x0e\x53\xfc\xa4\x6e\x53\x0e\xad\xa5\xad\xab\x9c\x1a\x1f\x9a\xe2\x88\x97\x76\x47\x18\x3d\x76\xce\x68\x6d\x3e\x09\x97\x13\x7c\x35\x26\x6a\xff\xd1\x4c\x95\x5a\xe6\xa2\x42\xbf\xa9\xd9\xb3\x9c\x3a\x72\xe3\x34\xac\x79\xae\x6c\x11\xe8\x5c\xc1\xf1\xc4\x48\x90\x72\xd1\x9a\xce\x90\x7d\x28\x8b\x05\x84\xbc\xc4\x5f\x24\x92\x9f\xf1\xea\x06\x3f\xf5\x29\x1a\xf6\xa7\x21\xfb\xa3\xba\x13\xb7\xa2\x1a\x30\x39\x66\x33\x05\x55\x5e\x21\x5d\xa0\xd5\x93\xd0\xd6\x0b\x61\xeb\xb0\xca\xaa\xdd\x19\x05\x8a\x68\x51\x03\x21\x56\x96\xe3\xea\x19\x2f\x0a\x43\x90\x78\x0c\xa1\x66\x6c\x36\xb5\xa6\x4e\x3b\xf1\xf6\xe7\xa2\x44\xe0\x9e\x45\x0a\xf6\x6d\xa4\x54\x21\x78\xb9\xb7\xb2\x7f\x7e\x45\x65\xc7\x43\x74\x63\xd8\x9d\xf1\x1e\x39\x78\x67\x4e\xfe\x6a\xb0\x7c\xb8\x7d\xac\x40\xe2\x24\xf9\x99\x67\x75\xc3\x0b\xdf\x84\xd4\x12\xb0\x7b\x67\x42\xde\x0a\xcb\x6d\x04\xb9\xdf\xe2\xd8\x37\x23\xba\xc2\x99\x44\x4b\xbf\x84\xd3\x0d\x7c\x23\xa0\x62\xba\x91\x0e\x06\x07\xa8\xfe\xe0\x4f\xdf\x7d\xbb\xb1\x1a\x17\x5c\xbd\x6d\xf5\x2d\xbe\x87\x57\x00\xd0\x2c\xb9\xc2\xd3\xc6\xa3\x4e\x93\x94\x15\x29\x5e\xe6\xd5\xd2\xf6\xde\xa2\xf4\x39\x2d\x4a\xd2\x5a\x94\x60\x26\x64\x53\x6a\xb1\xe7\x07\x58\x97\x96\x49\x85\x7b\x3b\xd3\x63\xb3\x6f\xd8\x4f\xdb\xee\x29\x72\xee\xad\x2d\x57\xeb\xb2\xbc\x75\x70\xb7\x22\x1a\xa5\xe0\x98\xe5\xea\xcb\xeb\x37\xe7\x17\x6f\x5e\x9d\x5e\xbd\x79\xcd\x8e\xf1\xda\x40\xcd\x96\x3e\xd3\x39\x42\x86\x96\x73\x43\x91\x19\xc4\x25\x8f\x16\xac\x33\xfe\x93\xdb\x17\x27\xd1\x3b\x43\xb6\x57\x92\x7e\x67\x2c\x7a\xaf\x24\xed\x95\xa4\xbd\x92\xf4\xd5\xdd\xb2\xbb\x55\x92\xb4\x9c\x1c\xf3\x2a\x9b\xca\x5a\x64\x75\x53\x89\xbd\xd6\xf4\xb4\xb4\xa6\xb4\xe7\x6b\x95\x0c\xb1\xd7\x9f\xbe\xf6\xcb\xf9\x09\xe8\x4f\x29\xd9\x74\xaf\x44\x7d\x35\x4a\xd4\x67\xe3\xec\x5f\x42\xab\xea\x61\x8b\xb5\xaa\xf8\x44\x00\x1c\x2e\xfe\xd9\xa3\x51\x85\x4f\x83\x24\x59\xcc\x63\xac\xf8\x4c\xd4\x86\xf8\x20\x3d\x8c\xee\x08\x23\x34\xe1\x4b\xf0\x33\x46\xd2\x9f\x9b\x11\xe9\x5a\x94\xf5\x2f\xaa\x68\x66\xc2\xc9\x7b\xf9\xa2\xe4\x33\x99\x79\xc9\x18\x19\xdb\xf0\xba\xbc\x2e\xc3\x6f\x0b\x9b\x1a\x19\x78\xd7\xf2\x1f\x3b\x99\xad\xf6\xcb\x38\x14\x9e\x65\xaa\x02\x0f\x76\xad\x98\xa8\x33\x38\x76\xb2\x64\xfe\x86\x1d\xbe\xe7\xb3\x95\x91\xf8\x7e\x5c\x55\x82\x7d\x17\x85\xba\xc3\x49\xbd\xb9\x9f\xf3\xb2\x87\x91\x27\x5a\x19\x46\x7c\x17\x4a\xe1\x9d\xe1\x9b\x97\xd8\x2d\xbc\xc5\x84\x79\x2d\x4f\x4a\x91\x94\x86\x78\xa5\xe6\xaa\x50\x13\xd9\x93\x59\x08\x49\x70\xb8\x60\x2a\x37\xba\xa8\x6d\x6d\x46\x50\x09\xfa\xce\xca\x8d\x61\x6f\x78\x36\xb5\x83\x9a\x17\xcd\x44\xfa\xbb\xc9\xf0\x14\x75\x57\x32\xdd\xcc\xe7\xaa\xaa\x01\x3b\x14\xbe\xb2\xb0\x5a\x47\xc6\xf1\x44\xf9\x04\x4b\x1a\xf5\xc2\x22\x72\x5e\x89\x6a\x66\x8f\x36\xa6\x5d\x9a\xc1\x81\x63\xd4\xf7\x56\xf9\x9c\x3e\x12\x74\xe2\xf4\xd8\xa9\x2a\x55\x45\x0a\x3d\xf1\x47\x4c\xdf\x2c\x21\x65\xd6\x2c\x02\x6e\xc6\xa5\x3b\x58\x6c\x2c\xb8\x39\xfc\x0f\x89\x88\xce\x54\x05\x47\x2a\x35\x27\x38\xf3\xfb\xbb\x7e\x9f\xba\xf1\x74\x2f\xd4\xaf\xd1\xa9\x34\x53\x4d\x59\x7f\x80\xa9\xa4\xec\x81\x69\x26\x96\xb8\x8e\xec\xa9\x6a\x71\xe0\x4a\x10\xca\x71\xee\xac\x09\x5a\xb0\xf0\xa3\x03\x26\x86\x93\x21\xfb\xf3\xf5\x41\xa5\x30\x6c\x46\xab\x71\x7d\x7d\xf0\x97\x21\x7b\xaf\x6a\x34\xdf\xc1\xfb\xc7\xf8\x9a\xbd\xa9\xce\x7f\x21\xc3\x81\x96\xb3\x79\xb1\x60\x63\x2e\x0b\x26\xc7\x60\xcf\x80\x5b\x0a\xde\xdc\x2c\x97\xda\xdf\xc8\x09\x95\xc6\xdf\xd6\x3e\xec\xa9\x75\x85\xa3\x71\xd2\x5d\x76\xc8\x33\x2d\x0b\x41\xb0\xe7\xdb\x65\xeb\x95\xba\x48\x79\x9e\xc3\xee\xf2\xe2\x3c\xba\x37\x13\xa3\x0f\xae\xd9\x84\x46\xe6\x87\x25\xcb\xdc\x5c\x24\x22\x0e\xd4\x6b\x0d\x3e\x69\x28\xab\x44\x56\x70\x39\xc3\x14\xcb\xcf\x42\x2e\xc0\xa8\x83\x8f\xc6\x71\x61\xaf\x45\x21\x6a\x91\x1c\x2a\x2e\x34\x05\x97\xff\xac\xf2\x84\x0d\xe0\x97\x76\x93\x60\x65\xa6\xea\xae\x33\xec\x57\x66\x18\xa1\x6d\x2f\x9c\xa3\xe1\xf4\x23\xd5\x94\xf9\x90\xb1\x7f\x9f\x8a\x92\x35\x25\xe0\x33\x47\x1f\x39\x9b\xcd\x44\x2e\x01\xb1\x5c\xa3\x39\xf2\xf1\x6e\xdf\x80\x32\x36\x12\x95\x49\xb2\x6d\xcb\xc9\x91\x98\xbb\xca\xf1\x90\x96\x8e\xd3\xb6\x82\x76\x8b\x94\xa9\x20\x22\x93\xbd\xa5\xe0\x69\x59\x0a\xce\x52\x96\x82\x58\xf7\x78\x88\xa1\xa0\x47\xd3\xda\xdb\x07\xbe\x1a\xfb\xc0\xd3\x33\x07\xac\xc1\xe3\xd6\x72\xb0\x7a\xda\x44\x86\x7c\x5a\xd7\x3c\x9b\xce\x44\x99\xe0\x73\xed\x16\x2c\xe3\x73\xc3\xb2\xf1\xdc\x98\xa3\x5f\x82\x37\x85\x43\x0b\xa6\x2a\x96\x0b\xf8\x2b\x86\x89\x21\xcd\xb1\x56\x27\x8e\x04\xfd\x43\xa3\x99\x82\xea\xdf\xf9\x98\x0d\x17\xef\x1a\x01\x56\x31\x53\xd3\xfb\x9e\x97\xee\x35\xb1\xaf\x89\x75\xd1\x62\x7c\x45\x7a\x18\x9c\xb2\xee\x84\x42\xab\x8f\x15\xd2\x73\xa1\x25\xb8\x93\xe1\x74\x9f\x10\x97\x20\xbe\x30\x12\x53\x7e\x2b\x55\x35\x64\xe7\x6a\xde\x14\x36\x2c\xc3\xbc\xf7\x27\xc7\x1f\x99\x5e\xe8\x5a\xcc\xd6\x49\xa7\x5f\xc2\xe2\xcc\xe0\x60\xe8\x35\xaf\x9b\xa4\xe9\xd3\xfc\x6e\x47\xdd\xe1\x48\x44\x61\x89\x81\x42\x1a\xcd\x82\x65\x6a\x36\x2f\x84\xa3\xf9\x0e\x5f\x34\xec\x08\x16\x66\xc0\xe4\x50\x0c\xf1\xd5\x7b\x3c\xf5\xc7\xd8\x7a\xbd\xda\x25\xcb\xe6\x88\x73\xdb\xd5\x05\xd3\xb9\x25\xb6\xbf\x60\xd2\xc2\x74\xaa\x55\x4a\xa0\xee\xbb\x1f\xf6\x92\xf5\x93\x97\xac\xdb\x5b\xb7\x23\xe1\xba\x43\x9a\x7b\x01\x7b\x2f\x60\xef\x5a\xc0\x4e\x32\xb1\xed\x79\xe0\x25\x50\xd6\x6a\x2e\x88\xed\x22\x6c\x42\x27\x47\x07\x26\xba\x91\xbd\x64\x0c\xe9\x5c\xc8\xc9\xb4\x66\xa5\xba\x43\x9b\x8c\xb3\x05\xb5\xfc\x6f\xf6\x05\xc0\xc6\xb2\xb7\x8f\xfd\xb5\x1a\x30\x59\xb2\x71\x63\xc4\x7c\x76\x27\x80\xc4\xd1\x29\xc5\x0b\xad\x98\x2c\x0b\x59\x7a\x93\xa0\x2c\x21\xa4\x64\xc8\xde\xdc\xf3\xac\xa6\x20\xaf\x99\x98\x8d\x44\x65\xbf\xa6\x45\xb2\xb8\x4c\xcc\x8c\xe7\x2d\xb3\xd5\xfb\x95\x59\x7f\xfe\x0d\xaf\x5e\xd0\x1c\xd6\xc8\x8f\x5b\x21\x21\xac\xde\x9d\xb9\xc8\x2c\x93\xd3\x6d\x81\x87\xf7\x0b\x0e\xab\xf2\xa5\x69\x0f\x0e\x06\x07\xc8\x81\x0e\x06\x07\x46\x3f\x7a\x9f\xce\x76\xb5\xad\xbb\xf7\x17\x3d\x69\x99\x4d\x43\xaf\x29\x2d\x5a\x5e\xc9\x5b\x6b\xf5\xfd\xf9\xe3\xe5\x15\x9b\xf2\x32\x2f\x84\xbd\xd6\x48\xdc\x09\xe3\x8a\xa0\x13\x04\x39\x42\xf1\xe7\x0f\xa2\x3e\x07\x9f\xa0\x19\xe5\xd1\xb3\x74\xde\xa5\x9d\x44\x32\xa8\x09\x9d\x93\x16\x99\x95\x46\xd6\x25\xf0\x18\xbb\xc8\x77\xae\x7b\x8e\x54\xf7\x08\x05\xdd\xf7\x1d\xa2\x07\xca\x5e\x38\x94\x4d\xe8\xad\x47\x12\x4d\xb7\x73\x34\xe7\xe4\xd4\x07\x13\x5b\xde\x47\x58\x6f\xaa\x4a\x25\x68\xeb\x0a\x24\x14\x5d\x63\x2e\x2a\x13\x25\xa4\x06\x43\xb0\x68\xde\xc0\xd5\x6a\xa5\xde\x40\xd6\x85\x1a\x91\x91\xe1\x18\xb0\xb2\x80\x4d\x21\x8f\x58\x4f\x90\x7e\x34\xf1\x19\x27\xfb\xeb\xc0\xaf\x4a\x57\xb2\x89\xce\x12\x91\x91\x84\x6c\xf6\x4c\x68\x3d\x6e\x8a\x62\x11\x30\xe3\xcf\x36\xd7\x44\x70\x80\xa3\x85\x9f\x7b\x6f\xf4\x8f\x73\x55\x06\x43\xa7\xaf\xb6\x81\xa7\xe7\x4e\xcf\x01\xdf\x06\x2f\x17\x11\x40\x44\xc8\x06\x52\x43\xc7\x53\x06\xd3\x1f\x09\x36\xe7\x5a\x03\x0a\x6f\xad\x8c\x34\xa4\x0d\x99\x96\x35\xfb\x77\x2e\xeb\xb7\xaa\x3a\x75\xba\xd2\xcf\xe0\x33\xcb\x78\x51\xe8\xcf\xbf\x8c\x5b\x38\xb1\x50\xb7\xdb\xfa\xb8\x24\x54\xc3\x87\x1e\x97\x47\xd7\x36\xe9\xb8\xac\x62\x73\x3d\x6b\x12\x3c\xf4\x16\x45\x9b\xdd\x9e\xe4\x28\xf6\xb8\xb9\x19\xad\x16\x29\x66\x42\x6b\x3e\x49\x5d\x0b\xb5\x5b\x76\x59\xd8\x15\xeb\xfd\xb4\x27\xcb\xd7\xad\x45\xa5\xfd\x21\x7d\xc2\xc8\x49\x23\xc1\x0a\x35\x99\x88\x7c\xc0\x8c\xa8\xe4\xee\x97\x10\x04\x55\x8b\x52\xcb\x5a\xde\x46\xf0\xa3\xc9\x6b\xad\x96\xc9\xfb\x52\xce\x44\x30\xe2\x3b\xae\xc3\x51\x3f\x0c\xbb\xc6\xf4\xbd\x64\x53\xa9\x9a\xc7\xe5\xd9\x6b\x10\x1a\xba\x63\x73\x8f\xfc\xae\x76\xab\x26\x70\xf6\x8a\x00\xb9\x2b\xeb\x71\x61\x67\x66\xf4\x63\x9e\x09\x76\xf4\xea\xf2\xec\x59\x4b\x38\xc9\xc5\xbc\x50\x0b\x91\x33\x45\xa0\x8e\x88\xde\x38\x64\xaf\x2e\xcf\xa8\x8d\xb6\x29\x08\xa5\xc0\xea\xc5\x41\x9d\x62\x3f\x2a\xd2\xe4\x10\xb6\xa4\x58\x18\x5d\x4b\xd7\x82\xe7\x18\x04\x6d\x76\xb0\xd1\x22\xfc\xc4\x31\xf6\x7e\x5c\x89\x89\xd4\x75\xc5\x2b\xa6\x65\x2e\x32\x5e\x39\x50\xf1\x6a\x88\x9e\x53\x37\x46\xe4\x93\xc1\xd0\x0c\x1d\xf0\xa6\x56\x66\x11\xd0\xcd\x8c\x63\xd3\xd8\x2a\x1e\x5a\x47\x1f\xc5\x3e\x86\xa1\x21\x8c\x18\x1b\x9d\xf1\xa0\x70\x6e\xa3\x2d\x5c\x3c\xf5\x56\x2b\xd3\x4a\x54\x33\x23\xb2\xdb\x98\x33\x7a\x9d\xc4\x3b\x23\x0c\x60\xef\x85\xa8\xd7\xec\x61\xae\xf2\x68\x5f\xcd\x9a\x83\xf1\xc2\xf3\x78\x55\x62\xe4\xc3\xb0\x33\xc5\xbd\x39\xff\xa9\x18\x70\xf6\x86\x92\xcf\x6a\xce\x77\x7f\x21\x34\x54\xaf\x62\x16\x70\x0e\x52\x89\xc2\xa5\x1d\x43\x64\x85\xfa\xd1\x70\x15\xd0\xd7\x46\xc8\xb0\x1c\x6e\x76\x47\x26\x33\xfd\xb5\x54\x34\x90\xad\x28\xfa\x87\xd7\x8e\xc7\x5c\x39\x7e\x83\x3d\x59\xb9\xed\x87\xef\x58\x36\xe5\x15\xcf\x20\x68\x48\x55\xac\x10\x5a\x0f\xd8\x48\x4c\x64\x59\xc2\xf5\x5c\xe6\x66\x27\xcd\x9f\x24\x26\x32\x5e\xcc\xa7\x1c\xaa\xbf\xc8\xcc\xbf\xcd\x8e\xfe\xcc\x8f\xff\xf6\xfc\xf8\x5f\x4f\x8f\xff\xef\xbf\x3c\xc3\xc6\x39\xd7\x53\xa1\xd9\xd1\xf1\xb3\x01\xcb\x55\xad\xd9\xd1\xf0\x19\xd5\xac\x0d\xfa\xd0\x6c\x24\xea\x3b\x21\xca\xdf\x96\x5f\xc4\x6c\x0e\xb2\xc7\xcd\xc4\xb0\xd6\x55\x8c\x6e\x8d\x1d\x19\xbc\xfc\x05\xbf\x59\x54\x79\x6b\x4c\x3d\xe5\xe2\xc2\xc7\xc9\x62\x71\xed\xfb\x62\x6f\xde\x7f\x4a\xe6\xfd\x64\x8a\x4d\x48\x31\x0f\x37\xeb\xb7\xc5\xcc\xbd\x51\x7f\x6f\xd4\xdf\xb5\x51\x3f\xe6\x52\x0f\xe2\x73\x69\x83\x71\xf4\x78\x89\xa5\xd8\xb5\x5b\xa3\x56\x0f\x08\xee\x17\x8e\xf5\xb5\x3f\x19\x3f\x8f\x24\x0c\xa9\xe1\xa6\x89\xd5\x2a\x62\xa2\x98\xbe\xde\x36\xdc\x1c\x8d\x44\xc6\x8d\x36\x24\x6b\x26\x67\xf3\x42\xcc\x9c\x01\xd5\xf4\xf4\xca\x69\x1d\xe7\xcd\xa8\x90\x7a\x8a\x2a\xfd\xd1\x33\x43\x46\x53\x95\x3f\xb3\x30\x77\x64\xd3\x5d\x47\x7d\xb1\x0c\xd4\x56\x5d\xa1\x86\xd6\xd0\xe6\x54\x44\xcc\x2e\xca\xa6\x22\xbb\x09\x4d\x71\xde\xe8\x65\xad\xa3\x66\x04\x77\xdc\x1c\xcf\xa6\xac\x65\xd1\x32\xdb\x39\xab\xf2\x48\x8c\x0d\xc5\xcf\x2b\x95\x09\x61\x33\x87\x40\x7b\x81\xa2\x69\x57\x34\xe5\x8e\xe1\x84\x65\x0a\x32\x8d\x60\x8d\x41\x94\xe9\xae\xb1\x19\x02\x32\x81\xe5\x43\xb5\xa9\xb8\xdd\x8d\x90\xda\x1a\x77\x7c\x49\x02\x47\x34\x17\xa8\x97\x2e\x6c\x28\x2d\x9b\x50\x9c\x2e\x86\xdd\xe6\xb4\x09\xc2\x43\x0d\xfa\xb8\xab\x5a\xb1\x31\x2f\x34\x65\xc1\x77\xbe\x6b\x13\xdc\xf5\x8d\x9c\xcf\x0d\x0b\xfb\x60\x74\xbf\x3b\x49\x0a\x72\x6f\x7b\xb3\x7d\x91\x46\x17\xd8\x25\xe7\x2a\x3f\x2b\xc7\xea\x43\x09\x16\xbe\x84\x85\x75\x1c\xa7\xe7\xc7\xed\x37\xa1\x68\x67\xbb\xeb\x28\xab\x47\x85\xbc\x11\xe6\x57\x23\x0a\xc3\x27\x3e\x9e\xbd\x1e\x30\x51\x67\xc3\x67\xd6\xe6\x43\x41\xfb\x76\x6e\x1a\x16\x9e\x46\x46\x6b\xd6\xee\x16\xa6\x4f\x5c\xbf\xa3\x03\x5b\x18\x06\x73\x9b\x98\xd7\x3d\x51\xd1\xc0\x3d\x3e\x43\x6b\xca\x5c\x43\x8d\x42\xc3\x2b\x22\x63\x88\xa1\x1d\x24\x07\x58\x28\xab\xbf\xc3\x28\xcc\xe7\x3b\xe3\xe3\x9a\xfc\x04\xe6\xe4\x8a\xfb\xda\x96\xbd\x30\x83\x78\xaf\x72\xd1\x3e\xc6\xce\xfa\x1a\x8d\x13\x64\x21\x3d\x57\xa5\x96\xb6\x0c\xe1\x9c\x57\xda\xea\x00\x94\xf8\x60\xaf\xdd\xf0\xfb\xce\xf6\xdb\x19\x09\x7e\x64\xac\x8a\x42\xdd\x99\x37\xdd\x43\x33\x4a\x4b\x55\xf6\xf5\x71\x87\x26\x74\x48\x32\x64\x92\xc3\xfb\x0c\x9c\xa1\x93\x4a\xdd\x61\x39\x22\xcc\x15\x10\x63\x79\x1f\x81\x37\x0c\xd9\xf5\x41\xa6\x3d\x7f\xa7\x6b\x6e\xae\xf2\xa1\x51\x82\xae\x0f\x5e\x9a\x4f\xa2\xd2\xb6\xb4\x25\x98\x32\xc2\xe6\x08\x26\xda\xfb\x4e\x23\x73\xd3\x1a\x2f\xea\x23\xf3\xcb\xc7\xb3\xd7\xcf\x12\xe7\x66\xb5\x3d\xee\x7d\x32\x55\x80\x1e\x24\xaa\x9f\x92\x21\xae\x28\x22\x0b\x9a\x2c\x75\x0d\x87\xd7\x50\x2e\xc7\xb8\xcc\xf5\x4d\x6c\xf0\xa9\x8e\x81\xed\x54\xb3\x42\x19\xea\xd0\x68\x63\xb3\xf6\x35\xd3\xf9\x1a\xc6\x35\xe4\x4d\x37\x21\x75\xc7\xa6\x34\xeb\x9f\x48\x8d\xc2\x66\xb7\x04\xf4\x1b\x1c\x27\xdb\x29\xa5\x33\xda\x41\xa0\x61\xd7\x2d\x1d\x21\x7b\x78\xed\x1a\x8a\xed\xe1\xd2\xc4\x58\xb0\x52\xb3\x99\xd4\xe6\x28\x0c\xcc\x9d\x89\x89\x8c\x04\x97\x8c\xf9\x8c\x68\xf7\x0a\x54\x3e\xcd\xf8\x2d\x97\x05\x24\x48\x90\x69\xd3\xf4\x0c\xd0\xc9\xf6\xd2\x34\x43\xb4\x48\x46\x86\xb2\xd5\x1d\x13\xa5\x6a\x26\x53\xbc\x5b\x25\x96\xd9\x2a\x0f\x6b\xbf\x1d\x4e\xba\x8d\xe7\xc1\x4b\xf6\xe1\xae\x34\x77\x86\x83\x84\xee\xc2\x7b\x67\xaa\xc2\x03\x0e\xf7\x60\xe9\x57\x73\x6f\xa2\xdb\x9b\xe8\x7e\x23\x6a\x8f\x33\xc4\x45\x46\xae\x96\x94\x0a\xa4\x5f\x52\xa2\xf8\xe3\x1a\x86\xf4\x32\x0d\xc1\x72\xf7\xad\x8c\x43\xe6\xcd\x5d\x9b\x86\x68\x34\x5b\x29\x4c\xe6\xdd\x25\xbe\x23\xff\xb8\xf7\xce\x4a\xae\x91\x2a\x63\x21\xa5\x7b\x8f\xad\x60\x5e\x80\x31\x8e\x41\x2a\x67\xaf\xbb\x5c\x2c\x0d\x41\xde\x89\x89\xd9\xc4\x7e\x4b\x82\xca\x8e\x2d\xb8\x7d\x91\x37\x67\xaf\xbb\xc3\xc7\xdf\xed\xa0\x81\xdc\xdd\x91\xa7\xe1\xe3\xb1\x57\x63\x76\x2b\xc5\x5d\xe4\x8d\x46\xf5\x42\x87\x07\xc6\x08\x04\x78\x82\x8d\x88\x8e\xfa\x90\x4d\x81\xc3\xd0\xed\x18\x2b\x4c\x4f\x79\x15\x4e\x5c\xcd\x44\x99\x15\xa8\xc5\x60\xbd\x80\xdc\x30\xdb\xb7\xaa\x62\xe2\x9e\x1b\x05\x68\x10\x7e\x0e\x99\x34\x70\x2b\xe5\x4b\x31\x9a\x59\x00\xf0\xba\xf9\xeb\xc5\xf5\x81\x97\xfc\xe2\xa1\xc4\xaf\x07\x83\x08\xdf\x3f\xbd\x3e\x20\xe7\x5e\xf0\x5d\xa9\x75\x23\xd0\x6a\x39\x9b\x81\x76\xa5\x52\xfd\xfb\x9c\x18\x1e\x86\xa7\x39\xda\xa5\x8b\x5e\x62\x31\x4c\x94\x8a\xdc\xea\xd6\x2a\x1e\x9b\xe3\x45\xac\xd1\x96\xb7\x9f\xbd\xf6\xca\x75\xeb\xdb\x20\x26\x35\x65\x2e\x2a\x5d\xf3\x32\xa7\x64\x65\x37\x27\x38\x1f\x82\x43\xdd\x00\xb7\x50\xed\x9c\x4e\xe7\x1a\x4c\x3a\xa6\x09\xea\xe0\x4f\x62\x91\xb0\x10\x86\x4f\xdb\x86\xc2\x1b\xf3\x9b\x47\x8a\x20\xfa\xb6\xfe\x07\x58\x6b\x1e\xe8\x1a\xc0\xe6\x78\x01\xb7\x2f\x9c\x65\x72\xcb\xc2\xc2\x39\x4c\x3d\x57\xcd\xdd\x41\x45\xc0\x67\xac\x7c\xe4\x57\x42\xb3\x23\x5a\x0a\xa3\x51\xf3\x72\x31\xcc\xd4\xec\xe4\x6f\xaa\x14\x98\xc4\x1d\xfe\x6a\xe4\x41\x55\x5e\x1f\x3c\x5b\x67\x58\x6e\x33\xdd\x98\x1c\x49\xc5\x63\xe2\x20\x0c\xc3\xd9\xb0\xd2\x44\xa4\xba\x89\xfb\xb9\x42\x09\x59\x77\x5e\xd5\xac\xe0\x23\x51\x00\x70\xa0\x05\xdd\x08\x05\xb4\x0e\xa9\x42\x5d\x06\xd7\x09\xbf\xe3\x55\x90\xfd\x6b\xe5\xd4\x88\xfc\x60\x9b\x5a\x2e\x5f\x99\x4d\xed\x87\x7d\x40\x43\x25\xea\x4a\x8a\xdb\x80\x65\x04\x23\x01\x21\x0a\x94\xd0\x11\xcf\x6e\x2c\x11\xdb\x4d\x3e\xab\x31\xae\x48\x7b\x15\x32\x97\x63\x10\x49\x6b\x3c\xf4\xe6\x0d\x33\x24\xff\x73\xb4\x12\x43\x5f\x8d\x64\x24\x08\x50\x44\x7a\xf5\xd8\x16\xa3\x20\x2a\x73\xef\x3e\xa0\xa0\x77\xcf\x4d\xd6\xeb\xe0\xb0\x0f\x7b\xdc\x1b\x81\x8e\xb2\x77\x6e\x7c\x15\xce\x8d\xf7\x91\x08\xb1\x0b\xd7\x06\xf4\xb8\x77\x6c\xec\x1d\x1b\x8f\xe0\xd8\x70\xbc\xe9\x01\x52\x7a\xaf\x53\xc3\x3e\xdc\x4c\x42\x5f\xc3\xd4\xb4\x82\x11\xd2\x9b\x5d\x56\x68\x1f\x74\x31\x7a\xed\xb7\xc2\x02\x7d\xe1\x78\x83\x71\x59\x7b\x0c\x80\xc8\x9a\xc3\x15\x58\xc0\xce\xb0\x99\x1f\xba\xe7\x0e\xe6\x46\x6d\x4a\x37\x19\x0a\x9e\xc5\x9b\x29\x53\x33\xba\x9d\x1e\x82\x2e\xb5\x5c\x89\x6a\xd3\xcc\x9c\xd7\xd9\xf4\x78\x26\xaa\x89\x38\xbe\x11\x0b\x23\xe5\xa3\x66\x93\x68\x05\xc6\x2e\x31\x59\x80\x42\x5c\x4d\x56\xc7\xfd\xed\x31\xe3\xf6\x98\x71\x7b\xcc\xb8\x3d\x66\xdc\xd7\x20\xdf\xed\xa5\xaa\x3d\x66\xdc\x1e\x33\x6e\x8f\x19\xb7\xc7\x8c\xdb\x63\xc6\xed\x0e\x33\x6e\x3d\x0d\x6a\x8f\x1e\xf7\xdb\x91\x23\xbe\x30\x7a\x5c\x42\xf1\xda\xdb\x8c\xf6\x36\xa3\xcf\x0c\x21\xb7\x1e\xdb\xdb\x83\xc9\xed\x59\xeb\x5e\x45\x7b\x2a\x4c\x6c\x0f\x26\xb7\x7b\x30\xb9\x34\x9f\xfb\x0d\x22\xca\xf5\x4c\xf4\xb3\xc2\xca\x6d\x77\xe9\xec\x01\xe6\x7e\x43\x37\xc4\x97\x07\x98\xeb\x91\x6c\xf6\x32\xf8\x5e\x06\xff\x02\x28\x73\xdb\xb1\xc4\x3d\xde\xdc\x93\xc2\x9b\x5b\x22\x44\xec\x41\xe7\xf6\xa0\x73\x0f\x10\xcf\x56\x21\xcf\x2d\x95\xea\xf6\xf0\x73\x5f\x08\x7e\x2e\xdc\x95\x3d\x06\xdd\x1e\x83\x6e\x8f\x41\xb7\xd5\x99\x59\x8b\xeb\xed\xd1\xe8\xbe\x7a\x34\x3a\x43\x39\x10\x14\xa5\x8f\x4d\x5b\x50\x90\xfc\x9b\x51\x03\x1f\x33\xd7\xe8\x5a\xcd\x2e\x48\xdb\x7a\x65\xb6\xae\x7c\xed\x06\x93\x88\x72\x5c\xda\x3e\xc8\xd5\x06\xfb\x41\x33\x2b\xc1\x27\x8e\x63\x81\x14\x56\x36\xaf\x24\x82\x07\xac\x97\x77\x04\x4d\x06\x07\xff\xe7\xe5\x87\xf7\xe7\xbc\x9e\x76\x2f\x44\xf7\xa4\x33\x56\xfb\x84\x94\x4e\x40\x6a\x60\xe6\x47\x36\xe7\xf5\x94\x8e\x1c\xb2\x4d\xa3\x06\x9b\xbd\xef\xdf\xe2\xa8\xeb\x4e\x38\xa5\xff\x17\x7e\x6c\xda\xcc\xb8\xe1\xbe\x3c\x07\x6f\x6d\xf8\xdc\x15\x10\x87\xe5\x49\x7e\xcb\xd6\x0b\x6f\x7f\x06\x7f\x87\x2f\x94\x4c\xcd\x91\xf9\xb1\x0f\x73\x51\x9e\x9e\x9f\xa1\x0f\xdf\x13\x12\x05\x23\xf8\x2f\x41\x2a\xf9\xa1\x59\xd6\x43\x16\xf4\x34\x9f\x17\x84\x78\x80\xce\x7f\x39\xe3\xd5\x82\xc9\xdc\x30\xae\xb1\x04\x24\x07\xd8\x47\x23\xd1\x6b\x0d\xd6\xa1\x92\x14\x6a\x6d\x9b\x2d\xcc\xb1\xa2\x76\x24\x05\x39\x05\x1e\xf2\x04\xd9\xa5\x10\xa1\x7e\x3a\x6d\x46\x90\x49\xf2\xe1\xf4\xec\x84\xc6\x7f\x1c\x99\x33\x4f\x46\x85\x1a\x9d\xcc\xb8\xae\x45\x75\x42\x8a\x9e\x3e\xf9\x76\xf8\xdc\x68\xa9\xe6\xc2\x3c\x06\x45\x1a\x26\x39\x53\x49\x9f\xf7\xa0\x27\x37\x0d\xc4\xe5\xd4\x2e\xc1\x03\x1b\xc2\xb1\x64\x7b\x6c\x9d\xf3\x6e\xd7\xae\x02\x3a\x6e\x11\x55\x80\xa7\x4d\x21\xf6\x55\x89\x82\x23\x53\x99\xcd\x55\x55\xf3\x32\x13\x2d\x9a\x80\xcb\x82\x57\xb8\x29\xaa\x9e\x8a\x4a\x0f\xd9\x3b\x75\x27\x2a\x56\x36\x46\x9b\xa3\x20\x09\x55\x9a\x03\x65\xda\x4d\xe5\x04\xb0\x07\xe9\xf3\x43\x86\x07\x93\x42\x06\x88\xdf\xa9\x99\xac\x6b\x84\x19\x28\xe4\x4c\x9a\x3f\x31\x0b\x5f\x67\xa2\xe4\x95\x54\x61\x54\x03\xe6\x8c\xf1\x4e\xcf\xeb\x94\xb7\xb7\x4d\x3a\xc9\x4f\x86\x40\x71\x65\xd6\xa6\xd9\x2f\x40\x37\xbb\x67\xaa\xe5\x6d\x9f\xa9\xb3\xaf\x65\x10\x25\x3c\x55\x77\x98\x3f\x88\x86\x4b\x9f\xf8\x63\x67\x47\x58\x39\x17\x2b\x5d\x75\x36\xa8\xb9\xc3\x42\x33\xf7\xdd\x0b\x71\x2b\xc5\x1d\x59\x5f\x13\x9a\xcf\xab\x9e\x96\x96\x27\x55\x48\x8f\xd6\xf2\x38\x87\x54\x3d\xf3\xcb\xa7\xf6\x9b\x9f\xfc\xf8\xcd\xa9\xf8\x77\x31\x9a\x2a\x75\xc3\xc4\xfd\x1c\xac\xca\xcc\x50\x07\x5d\x1b\x10\xe1\x55\x57\x0b\x9b\xfb\x34\x96\x95\x0e\x12\xff\x83\x98\x73\x8c\x93\x96\x2e\xc1\x09\xc1\x49\x4a\x55\x7a\x25\xdb\x7e\xd4\xbb\x45\xa1\x03\x9b\xe0\x15\xe5\xdf\xf9\x31\x0c\x98\x5f\x23\x1c\x0f\x84\x9a\x39\x72\xb5\xd6\xe6\x33\xb3\x15\xd6\x1a\x92\xbb\x59\x65\xaa\x1c\xcb\x49\x43\x32\x77\x70\x49\x62\xd0\xb1\x1f\x15\x2f\x73\x9f\xa5\x25\xcb\xac\x68\x72\x01\x42\xbd\x6b\x71\x53\xaa\xbb\xd2\x72\x6b\x33\xc0\x4b\x3b\x40\x23\x8e\xdb\x07\x77\xf4\x61\x37\x54\x8f\xb3\x52\x2b\xf6\xe9\xcf\x87\x44\xaa\x87\x7f\xf9\xb4\x59\x74\x9c\x8f\x8c\x6f\x93\xc6\x27\xfb\xe8\x53\x30\x41\xe4\xa4\x6e\xe5\x6c\x93\x21\x3b\xb5\x33\x07\xd3\xb9\xe1\x67\x2f\xd9\x31\xfb\xf4\x5e\x95\xe2\xd3\x4b\xb8\xa9\x88\xe0\x45\x85\x52\x75\x36\xe5\xe5\x84\xe0\x75\x9c\xef\x00\x51\x8c\x9c\xe0\x56\xab\x26\x43\x1d\x08\xb8\xa6\xd5\x92\x08\xcc\xe5\x62\x68\xbe\x40\x5b\xf2\xe9\x65\xb0\x78\xb8\x4c\x88\xad\xa4\x40\xba\xb5\x76\x38\xbb\x8e\xb5\x62\xb9\x6a\xcd\x66\xc8\x4e\x3d\x92\x4e\xa8\x74\x49\x0d\x30\x20\x22\x0f\xe8\x63\xde\x2b\x58\xd0\x27\x5e\xc1\x8d\xfa\x0a\x08\x25\xb1\xb8\x89\x56\x9f\xec\x55\x2b\x4b\x5d\x57\x0d\x78\x6a\x90\xb1\x59\x96\x61\xc1\xa2\xec\x2c\xe4\xd8\xed\x80\x79\xd7\xad\x45\x3b\x00\x0d\xb0\x25\x8f\x0b\x71\x2b\x0a\x58\xe1\x0d\x62\xd2\x62\x86\x46\x1f\x08\xf8\x5a\x10\xa2\xb6\x42\xf8\xdd\x86\xf1\xfe\x7b\x62\x2d\x77\xce\xcf\xd7\x17\x8f\x03\xc1\x38\x32\x1d\x07\xce\x8d\xc8\xe4\x85\x19\xae\x0e\xca\xd9\xb3\x9f\x21\x63\x67\xb5\x46\x01\xc5\xa6\xc5\x13\x59\x93\x24\x77\xdd\x3c\x7f\xfe\x5d\x36\x34\x27\x0f\xa1\x79\xcc\xbf\xc5\x30\xfc\x19\xac\xec\xf4\xfb\x3e\xaa\x63\x1f\xd5\xf1\xb5\xba\xc5\x1e\x3f\xa8\xa2\x2d\x7d\x4d\x01\x0d\xcb\x68\xf0\xd6\x64\xed\xf6\x19\x2e\x8c\xf9\x5c\xf0\xea\x71\x38\x5a\x1f\x43\x59\x33\xb2\x22\xf6\x36\xf0\xac\x6e\x78\x01\x06\x6a\x8f\xc8\xd1\xc7\xdb\x3e\xef\x74\xb6\x8b\x9f\x88\x3f\xd2\x49\xf7\xec\x9f\xda\x4a\xd7\xe1\x2e\x27\xf7\x4a\x95\xf9\x86\xf7\x85\x7b\xc5\x1a\xa3\x34\x19\xc1\x7c\x8e\x41\xd6\x54\xa0\x06\x64\xae\xa9\xe5\xad\x73\xb5\x32\x6c\x8f\xac\x2a\x44\x3d\x1d\x4e\x5f\x70\x5d\x5f\x55\x1c\xcc\x5f\xaa\xbc\x4a\x5a\xb7\xde\x71\x5d\xb3\xda\x9a\xb8\xfc\x28\x6a\xf7\x9e\x11\x80\x0c\xdf\x31\xe2\x37\x39\x45\x40\xbc\x02\xe1\x6c\x17\xe6\xaf\x41\xbf\xe5\xf0\x8f\x46\xb5\x3f\x76\xaa\x3d\xb5\xb3\xe7\xc1\x1b\x15\x35\x65\xe6\x82\x05\xd8\x0f\xbd\x27\xf1\x81\xeb\xd4\x26\x7e\x2c\xe5\x5f\xcd\x75\xa3\x4a\x71\x7c\xa7\xaa\x7c\xe0\xd9\x24\xc3\x77\x02\xab\x02\x2d\xd3\xa1\x5e\xeb\x93\xab\x8e\x77\xdb\xe3\x14\x7d\x03\x98\xb8\xe1\xe0\x57\x80\x83\xf8\x16\xc1\x19\x3f\x96\xa0\x42\xa4\xed\x98\x49\xbd\xfd\x8a\xf4\xf6\x76\xa2\x88\xff\xd0\xe3\x2b\xd1\xfe\x68\xf4\x20\x4b\x2c\x69\x1d\x67\x39\xf7\x8a\x68\xfb\x80\xa6\xa7\x1b\xd0\x54\xe6\xf2\x56\xe6\xe6\xf2\xea\xdb\xbe\x07\x04\x35\xed\x54\x25\xd8\xc7\x3f\x3d\x01\x41\x6f\xeb\x08\xa4\xed\x04\x8a\x75\xe3\x91\x76\x49\x68\x00\xa2\xba\x3e\x1f\x84\xe6\x89\xe0\x13\xe0\x12\x30\x12\xc2\x0d\xee\x97\x99\x96\x66\xf7\x17\x4d\xc5\x0b\xbb\x52\x5d\x03\x23\xaf\xc5\x44\x55\xc9\xac\xfa\x57\xee\x59\xcc\xa7\x61\x4b\x44\x1e\x88\xda\x19\x8c\x2d\xf8\x61\x24\x00\x32\xaa\x56\x84\x5d\x75\xc8\x8b\xe2\xf0\xd9\x46\xf6\xac\xe5\x47\x15\x2e\x57\x51\x59\x3c\x2b\xd3\xd8\x5e\x7e\x76\x14\xa0\x9a\x63\x6a\x7d\x35\x83\xa4\x47\x7f\xf9\x1b\x16\xab\x65\x39\x69\x0a\x9e\x4e\xa5\x34\x73\xfd\x53\x72\x04\xef\xe8\xc9\x8a\x51\xc0\x62\x39\x2b\x53\x30\xa6\x30\x41\x12\x8d\x00\xe6\x35\xd4\xfe\x4d\xdf\x69\xc7\x06\xee\x62\x37\x6f\x14\x7e\xb7\x43\xc1\x56\x51\xe8\x92\xe7\x56\x44\x4c\xb8\x2a\xe0\x13\x9f\xf1\x9a\xd2\x54\x22\x20\xc0\x1e\x3a\x3b\x0e\xb1\x66\x59\xad\xd4\x4b\xfa\x1e\x9a\x2f\xd0\x1c\xe5\x23\x16\x78\x51\xb0\x42\xdd\x89\x2a\x33\xac\x2a\x29\x41\x4d\x55\x55\xf7\x1c\x96\x4b\xf7\x0c\x1c\x2a\xd0\x94\x4e\x85\x15\xd8\xe2\x6d\x5e\xf5\xd9\x75\x0c\xa8\x44\x0f\x89\xd1\xd0\x13\xb7\xe5\xf6\xdf\xa9\x95\x5e\x32\x9e\x78\xf3\xdd\xcf\x79\x87\x0e\x3e\xa7\xd4\xd6\x83\x99\xb3\xa4\x75\x4b\x09\xe7\x2d\x15\x5c\x56\x11\xd5\x39\x1d\x7c\x19\x97\x42\x2e\x8f\x7e\x41\x73\xfb\xe8\x4c\xcd\x53\x51\x7c\x41\x60\x09\x48\x4d\xe4\x4d\x4b\x08\x76\x3d\x2d\x81\x9c\x02\x9c\xf5\x8c\x7e\xd6\x53\x75\x57\x62\xae\xbb\x2c\x01\x65\x39\xab\x0b\x06\x60\xde\x16\xce\x10\xbc\xa5\xe1\x06\x72\x9b\x0d\x7d\xcc\x6b\xe7\x16\xfb\x40\xce\x5f\xc4\x80\x9e\x14\x6a\x14\x7c\x05\x80\x64\x8a\xc2\xf9\x0c\x86\xec\x4a\xcd\x03\x73\xee\x5c\x54\xf6\x06\x74\xef\x98\x01\xcf\x9a\xba\x01\x0e\x26\xee\xb3\xa2\xd1\xf2\xf6\x21\x38\x1e\x8f\x10\x8c\x60\xa8\x33\x5b\xe2\x4c\xfb\xe4\x1f\x7e\x72\x82\x76\xe8\x7d\x10\xb5\x11\xb2\xfc\xe1\x7e\x75\xf1\xfa\x91\x0c\xd1\xbd\x1e\xc0\x5f\x07\x56\xd6\x68\x8f\xfe\x0f\xc0\xdf\xe8\xec\x23\xb3\x8b\x98\x3a\xdd\x76\xe6\x12\xef\xf3\x75\x27\x28\xd4\x73\x37\x7f\xe3\x37\x1a\x5d\xcb\xf6\x80\x91\xc7\x35\xbe\x5d\x3f\xaf\xfd\x07\x19\xf4\xaf\xf6\x48\x76\x79\xa3\xf9\x39\x10\x5f\x3c\xde\x4f\xb8\x42\x66\x16\x08\x82\xc9\x14\xb2\x4d\xeb\xe0\x56\x50\xa5\x21\xac\x35\xe0\x53\x1c\x93\xb7\x46\x33\xf2\xda\x4a\x77\x34\xc1\xd3\x16\x9e\x53\xf8\x22\xd0\x59\x3c\xe3\xf4\xc1\xed\xbc\xb4\xee\xe9\x8d\x5e\xec\x3f\xc2\x8f\xbe\x91\xe1\x82\x00\xee\x02\xd5\x3a\x48\x9d\xd2\x5f\xdc\xb3\xd6\xd2\xf9\x97\xa8\x4e\x4a\x6a\x01\x75\x7a\x05\x83\x77\x49\x97\xde\x68\x19\x49\x61\xfe\x82\x2b\xe8\x57\x05\xd6\xaf\x8f\xc5\xfd\xe2\xd1\xee\x03\x0b\x42\x2f\xa3\x60\x97\x3e\x9c\xba\xb8\xe3\x0b\x4d\xbe\x73\xc3\xc4\xcd\x63\xe7\xbe\x27\xd7\xdf\xd8\x82\xb4\xe6\xe1\x15\x33\x6a\x6a\xc6\x6b\x56\x08\x0e\x21\x8e\x20\x8b\xd8\x81\xa8\xca\x77\x62\xa5\x11\x2d\xa0\xac\xc7\xbc\x12\xe6\xb0\xe6\x2f\xd9\xb9\x79\x15\x6c\xe8\xec\x93\x6d\xfd\x29\x0d\xd8\xd1\x1b\x79\x10\x46\x1a\x84\xc9\x4d\x66\x8f\xbd\xd3\xde\xb9\xc9\x13\x32\xf1\x99\x1f\xb5\x0f\x9f\xa5\xe9\xb6\xc3\x6a\x6d\x70\xd5\x90\xf9\x8d\x79\xc9\x4e\x03\x7a\xc2\xd9\xda\x92\x0d\x00\x67\x9b\x26\xc2\x52\xdd\x0d\x21\xd4\x6c\xc0\x6a\x35\x67\x48\x81\xc1\x21\xf0\x5e\x57\x1f\x89\x65\x26\x85\x02\x9f\x16\x01\x05\x7f\xa8\x72\x51\xa1\x77\xdc\xee\x3c\xc8\x86\x61\xc9\x0e\xc2\x9a\x9e\x37\x54\xf7\x01\x42\x32\x5c\x3d\x86\xc0\x11\x2f\xcb\x89\xf9\xea\xf5\x81\x11\x43\x8e\x0b\x79\x03\x40\xbf\x92\xc0\x76\xb5\x11\x85\xf9\x48\xdd\x42\x42\x78\xdc\xaa\xd5\x8b\x1e\x50\xdc\x85\x39\x3e\x2e\x02\x44\xdc\xcb\x4c\x4d\x2a\x3e\x9f\x22\x16\xcc\x90\x5d\x1f\xfc\xa9\xdb\x87\x66\xba\xe6\x55\x6d\x2b\xc3\x5e\x1f\xdc\x9a\x51\xd4\x80\x2a\x5c\xd9\xca\x27\xe8\x72\xe6\x14\xfd\xc4\x8e\xcc\x4c\x66\xfc\xbf\x54\x65\x7b\x79\x46\xaf\xd8\x6d\x2b\x16\x64\x17\x85\x59\x5e\x1f\x80\x43\xfb\xfa\xc0\x50\xeb\xf5\x81\x39\x7e\xd7\x07\x58\x44\x11\x6d\xd1\x71\xc7\xb2\x0c\x3a\x86\xa8\x39\x8d\xf5\x29\x34\xd2\x18\x1e\xa1\xd1\x82\xfd\xe1\x14\x45\x6a\x73\xe2\x6a\x6e\xff\x86\x6f\xb1\x23\xc4\x83\xfb\xc3\x29\x2a\xb5\x3e\x74\xa4\x9e\xb2\x52\x31\xdd\x8c\xc7\xf2\x9e\x69\x88\x57\xd0\xf8\x3e\x30\xac\xf9\x94\xbb\xf2\x50\xa2\x34\x5f\xc1\x60\x30\x8c\x5b\x0d\xa6\x4c\x33\x8e\x46\x8b\x88\x70\x08\x08\x6e\x47\x6b\xcf\x89\x5d\xef\x97\xec\xf6\xc5\xf3\x01\xbb\xfd\x76\xc0\x6e\x5f\x98\xff\x07\x76\x04\xff\x7a\x6e\xfe\xfa\x6e\xc0\x6e\xbf\x03\x0e\x65\x7e\xfa\x16\x46\x84\xed\xe0\xcf\x6f\x07\x6c\xac\xd4\x0b\xfc\xef\xf3\x2f\x2a\x1f\x7a\xe9\xc1\x1a\x5e\xdb\xe0\xc4\x8f\xe0\xa1\x5a\x5f\x85\x49\x39\xe0\xd6\xf5\xbc\x2d\x53\x62\x9c\xd5\xdd\x68\x30\x3c\xcb\xc4\xbc\x16\xf9\x7b\xab\xd1\xd4\xaa\x12\xb9\x8b\xdf\xea\xaa\x36\x51\xfb\xae\x3e\x13\x3e\x6e\x49\x8d\x10\xab\x00\x7a\x4d\x46\x37\xe4\x48\x18\xaa\xb4\x4c\x07\x8d\x48\xb9\xd4\x99\xba\x15\xd5\xc2\x9c\x9b\x85\x0d\x3d\x0c\xd0\xaa\xa7\xbc\x0c\x3a\x95\x18\x0d\xf5\x59\xae\xd8\x84\xb4\x19\xac\x65\x2a\xd4\x8d\x9e\xb9\x4d\xa4\xfd\xa3\xca\x4e\xb5\xcc\x40\x3d\xe7\x1a\x42\xd6\x28\x0c\x6f\xe5\xa6\x7e\xc9\x83\xe2\x3d\x91\x18\xcb\x15\x11\x4b\x12\x8a\xc9\x3f\xc7\xbd\x0f\x6f\xc0\x8e\x33\x85\x88\xe4\xce\x70\x3e\x01\x45\x12\x6c\x24\xdc\x90\x5d\x55\x3c\xbb\x21\x13\x77\x70\xa9\x61\x08\x9c\x61\x91\x33\x39\xa9\x6c\x39\xac\x7a\x8a\x61\xe3\x30\x00\xdf\x56\x96\x00\x40\x4a\x45\xb1\xec\xbd\x39\x6b\x6a\xf0\xf1\x69\xd4\xa0\x7d\x3f\x41\xf9\xbc\x8c\x97\xc4\xb7\xcd\x52\xe8\x69\xf4\x3d\xef\x94\x74\x7c\xfa\x88\xd2\x31\x78\x6d\xb8\xb5\x2a\xf2\x08\x22\xa5\x10\x63\x57\x23\x8c\xb2\x29\x42\xa6\x5d\x89\x99\xba\x15\xd6\x5c\x53\x77\x42\x0f\xc9\x46\x4f\x21\x87\x43\xf6\x3e\x15\x9f\x18\x45\x25\x52\xf6\x26\x76\x9c\xb3\x08\xdb\x65\x18\x0b\x71\xdb\x43\xb9\x3f\x06\x47\x5e\x9b\x5d\xfe\xd2\x89\x7b\xf5\x97\x26\x68\x01\xa8\xaa\xaf\x91\x30\x00\x03\xcf\x89\x17\xf2\xc9\xd7\x69\xdf\xd9\xda\x60\xc3\xce\x13\x6d\x41\x54\x2d\x15\x56\x35\xa3\xf4\xa4\x5a\x51\xf0\x7e\x66\x5d\x82\x9a\x1d\xd5\xee\xb3\xc1\x8c\x48\x81\x68\x30\x35\x0c\xca\x63\x3c\xfb\xfc\x01\x83\xec\xfd\x87\xab\x37\x2f\x0d\x1d\x68\x07\x0f\x08\x51\xe9\x66\x26\x2f\x86\x2f\xbe\x0b\x52\xe1\xc0\x51\xed\x57\xb0\x6f\x13\x71\xf8\xa3\x05\xcb\x71\x3b\xcc\xb2\x83\x14\xbe\x60\xbc\x24\x6f\x18\x8e\x17\x83\x4f\x61\xbb\xc2\xbd\xe8\xeb\x79\xb0\xd9\x08\xac\xde\x24\xee\xe7\x85\xcc\x64\x5d\x2c\xec\x0e\x95\x4d\x51\x3c\x39\x13\x5c\x3a\xab\xe2\x3d\x65\x55\xd4\x2d\xe5\x84\xa0\x3d\xff\xd7\xff\xfc\x7f\x6f\x5f\xfc\xaf\xff\xf9\xff\x0d\xe0\xaf\x6f\xe1\x63\xf0\x4f\x51\x67\x69\xbb\x3d\x68\x50\x29\x4b\x10\x68\x56\x2d\xab\x8b\x57\xb7\x5a\xf6\x16\xa2\xda\x40\x37\x1b\xb0\x79\xd5\x60\x89\x0f\x88\xb6\xc6\xbd\xc7\x6a\xa6\xdb\x5a\x08\xa2\x53\x67\xdb\x6e\x71\xea\xba\x1a\xe4\x93\x39\x7f\x9f\xdf\x08\x42\x8c\xbc\x4b\x01\xf0\x3b\xea\x55\xe3\x82\x4f\x70\x36\xb2\x9c\x9c\xe4\x52\xe3\x5f\x78\x75\xba\x29\x98\xeb\x12\x85\x55\xec\x13\xb0\x16\xc0\xcd\x7e\x7a\x7e\xa6\x93\x19\xba\xf6\xf2\xe8\xc3\xa7\x84\x2f\xc7\xd4\xce\x3d\x92\xa9\xd3\xc7\xae\x40\x0b\xf4\x07\xdc\xe3\x32\x98\xf7\x27\x22\x4f\xbd\x95\x1e\xd0\x63\x59\x24\x1f\x66\x5d\x8c\x29\x3f\x7c\x61\x0b\xf2\x8f\xde\xff\x5d\x51\x7e\x6c\x40\xdd\xb5\x5c\x16\xf4\x7e\x99\xf1\x22\x55\x0e\x75\x69\x7b\xe7\x4c\xa1\xc4\x02\x1b\x2f\x60\x18\xaf\x79\x1c\xec\x5b\xca\x64\xbb\x4e\xb4\xf9\x85\x30\x77\x1f\xd7\x90\xc9\x69\xe3\xde\xa2\x1f\x13\x41\x8a\x23\x51\x58\x74\xf8\x74\x06\xe8\xbb\x76\x93\x28\xfe\xca\xa5\x82\x1a\xe2\x92\xb9\x48\x69\x70\x74\xff\xbb\xca\x9f\x20\x03\xc0\xa2\x0c\x51\xc3\x1f\xda\xee\x87\xec\x83\x21\x3c\xd7\x29\x96\xbd\xb6\x55\x3f\xe2\x0c\x53\xab\x4b\xa9\x3b\xa3\x1a\xfd\x6c\xbd\xb8\xf8\x32\x8c\x13\x0a\x73\xb1\x21\xae\x83\x6f\x42\x87\xe8\x4e\x55\x37\x68\x4b\xfa\xe3\xf9\xa9\x35\xee\x39\x84\x7f\x8c\x2b\xc2\x1e\xc0\x46\x0e\xb9\x7c\x34\xd1\x04\xe9\x0f\xc2\x20\x42\x58\x55\xa6\x69\x52\xb6\x36\x36\xbe\x76\xd2\xdd\x6e\x30\x16\xe6\x3e\xb5\x08\x42\x8f\xa0\x26\x01\x5e\xe5\xe9\xbb\xbd\xbd\xe1\xc9\x28\xec\xb0\xc5\x4e\xf7\xcd\x28\x4d\xb6\xf3\xc7\xd9\x35\xf3\x85\xdd\xec\x4a\xdf\x92\x23\xb0\x83\xcf\xc4\x57\x25\xfb\xc3\x9b\xab\x25\x31\xa4\x2b\xd6\xbb\xd3\xe6\x11\x4e\xca\xe3\xae\x39\x9d\x94\x5d\x9e\x85\x0a\x07\xbc\xf1\x21\x78\xfe\x19\x02\x62\x43\x1e\xbd\x96\x69\xb2\xf3\xc2\x12\xae\x8e\xcf\x57\xb1\x75\xe6\xa3\x90\x5d\x64\xa2\x87\x1a\xf9\x44\x5b\xf2\x69\x2d\xea\xa1\x0a\x7d\x80\x96\xfe\x0d\x25\x42\x19\x01\xef\xa4\x67\x2c\x18\x01\x1f\x79\xac\xd9\x37\xec\xfc\xe3\x55\x18\xdc\x48\xfb\xd5\xed\xa1\xe6\x37\x86\x88\xda\x1d\xe0\xed\x84\x7a\x81\x9c\x18\x01\x22\xd4\xfc\x78\xb9\xa8\xa7\x46\x88\x14\xf7\x99\x98\xd7\xd1\x4a\xd5\xbc\xfc\x1b\xc7\x01\x9c\x9c\x7f\xb8\xbc\x3a\x39\x3f\xbd\x7a\xf5\xc7\xce\x58\xda\x1f\xec\x7e\xa4\xd3\x69\xe7\xee\x7c\x3c\x3a\xda\x84\x84\x74\xc4\x1f\x68\xc4\x10\xef\xd6\x3e\x1d\x49\x2f\xee\x6a\x4c\x10\x9d\x16\x54\xac\x3c\x52\x2a\x67\x53\x5f\x47\x04\xf9\xcc\x32\x1c\x4a\x59\xab\xe3\xf7\xa3\x79\xac\x75\xe8\x3e\xf7\x44\x6c\x5e\xce\x8e\xa9\xee\x97\x25\x01\x02\x7d\x2d\xe3\xf0\xd0\xf5\xa2\x05\x56\xd3\x99\x42\x14\x81\x5f\xbe\xbb\xec\x31\x38\x7c\x88\x1b\x58\x1b\x87\x45\x30\xb8\xfd\xce\xaa\xea\xb5\x32\x57\x93\xaf\x55\xc2\x27\xdc\x28\x2d\x8f\xa4\x3f\x18\xa6\x8a\x23\x3a\xaf\xd4\x7c\x27\x5b\xf4\x86\xb2\x9e\x5f\xab\xac\x99\xd9\xec\x83\xee\x82\x24\x9b\x59\x3b\x7e\x45\x05\xf4\x01\x0a\x28\x48\xa4\x8e\x68\x1a\xbe\x9d\x8b\x9c\xe5\x61\x17\xab\xf7\xaa\x85\xc1\xd2\x91\x74\x9a\xaa\x48\x9a\xb9\x1f\xba\x30\x66\xad\xd3\xf0\x32\x51\x5e\x6f\xb9\xc0\xdd\xc7\x0b\x0f\x84\x06\xeb\x3e\x46\xd0\x09\x70\x22\xdb\x58\x85\x97\xcc\x68\xf7\x03\x26\xcb\xfa\x87\xef\x07\x6c\x5c\x28\x0e\x7f\xe0\xb0\x07\xec\xcf\x7f\x01\x53\xe1\x98\x67\xe2\xbf\x7f\x1d\xb0\x19\x9f\xff\x19\x1f\x85\xbf\x03\xcb\x2d\x65\x31\x7c\xf8\xb5\xd0\x26\xa8\xe4\x7c\x83\x06\x78\x1c\xcd\x8f\xc7\x97\xd6\xfc\x66\x68\xc0\xec\x7c\x8c\x4c\xfd\xba\xe2\xe3\x9a\x7d\xcf\x8e\xa6\x75\x3d\x7f\x79\x72\xf2\x5f\x5a\x95\xc7\x78\x68\x86\xaa\x9a\x9c\x3c\x5b\xbd\xf3\x78\x80\x12\x5b\xfe\xbf\x79\x3b\x61\xe7\x99\x37\xbb\x9e\x3d\xa2\xc5\xb4\xb5\x2c\x1f\xaa\x9f\x94\x2a\xe2\xcf\x9f\x27\xe6\xf2\x99\xc6\x50\x14\x1f\xc2\x85\xfb\x1c\x26\xe4\x2e\x67\x1a\x1c\xf0\x72\xf1\x24\xc6\x41\x42\xfa\x23\x7e\x11\xb1\xa2\x7c\x56\x92\x9f\xf3\x4a\xe0\xba\xcf\xb6\x06\x73\xc3\x7d\xcb\x2c\xc6\xcb\x7b\x02\xc3\xfb\x50\x21\xe0\xdb\x29\x50\xc7\xaf\x5d\xd4\xad\xce\x11\x17\x65\x33\xfb\x02\x64\x05\x63\xa3\x40\x9b\x47\xa6\x25\x67\x6a\xfd\x99\xdf\xcb\x59\x34\xdb\xc0\x3a\xec\x5b\xc9\x72\x59\x2b\x77\x73\x3f\xd6\xea\xa4\x65\x88\x08\xd3\xac\x9b\xfa\x97\xa7\x7f\xfe\x9c\x4c\x9b\x48\x6e\x70\x30\xe3\xf7\x67\x2d\x7f\x79\x1a\xe9\xea\x87\xef\xa9\xf9\x3b\x51\x4e\xd0\xa6\xb2\x5e\xfb\x24\x5a\xe5\x8a\x77\x5a\x7b\x8a\xf1\x6a\x61\xe3\x5c\x35\x23\x54\x39\x66\xb2\xdc\x68\x02\xb2\xdc\x6c\x02\xb2\xdc\x7c\x02\x1d\xa2\x5c\x3a\x81\xa6\xa8\xe5\xbc\x10\xd1\x85\xb1\xec\x85\x52\x3d\x26\x43\x8f\xd8\xe7\xe0\xa0\x6c\x8a\x82\x8f\xf0\xd8\x77\x4f\x98\x2a\xc5\x93\xb8\xe7\xe6\xbc\x36\xe7\x30\x79\xae\xe8\x59\x72\x17\x9f\xc0\x25\x60\xcb\x18\x3e\xdd\xc1\x79\xdf\x45\xff\x3e\x77\x13\xbf\x6a\x59\x47\x54\xd3\xcd\xba\xef\xea\x33\x00\x2c\xd0\x3e\xcd\x8e\xdc\x76\xa3\xd8\x24\xd8\xe0\x2a\xd1\x9f\xda\xb5\xf0\xf0\xc1\x48\x8a\x46\x60\xa3\xf9\x49\x08\xa8\x72\xc6\xda\x50\x73\x50\x95\xd1\x0d\xd1\xd0\xab\xc6\xed\xc7\x43\xf6\x33\x97\xe0\xc3\x13\x95\xb0\xf0\xa1\x90\xfc\x48\xe1\x61\x4d\x05\xd6\xc1\xdd\xeb\x3c\x24\x37\xaf\x9e\xbe\x69\x16\xce\x3e\x35\x41\x46\xfb\x64\x15\xc1\x30\xe6\xa7\xae\x1a\x6f\xc6\xb4\xed\x88\xe6\x17\x8f\x31\xaf\x50\xae\x5a\x3d\xbd\xa0\x75\xbc\xc7\xc9\x79\x52\x94\x35\x6c\xe7\x0e\xc6\x7e\x29\xaa\x5b\x99\x89\x0b\x32\x24\xa4\x6c\x80\xad\x16\x54\x8b\x95\x3b\xe3\x03\x64\x04\x52\xab\x61\x21\x26\x3c\x5b\xf8\x5c\xee\x55\x21\x64\x90\x14\x44\x49\x82\x5d\xa7\x63\x3a\xf8\xe5\x93\xf9\xf9\x53\x84\xc7\x6f\x6b\xa9\xd3\x28\xd8\x85\xfd\x4c\x5f\xee\x16\x7c\x36\xdd\x33\x3c\x8b\xba\xc7\xbc\xa6\x4d\xbe\x31\x4f\xfa\x7d\x3e\x99\x9f\x3f\xb5\x11\x65\x3f\x5e\xbc\x43\x7b\x3d\xc6\xf5\xdb\xf4\x02\x43\x05\x4c\x96\x60\xe8\x20\xcb\x36\x9a\xac\xa5\x76\x63\x78\x0c\xc7\x47\x0a\xd5\xad\x33\x93\x44\x23\x8f\x9d\x83\x28\x79\x1e\xa1\xaf\x56\x6c\x86\x2e\x80\xab\x77\x97\xa6\x59\x49\x85\x8e\x6c\x7d\x62\x0b\x99\x37\x64\x67\x35\x9b\x72\xed\x93\x3c\x30\xf2\x80\x6b\xc6\xf3\x99\xd4\x66\xa0\x61\xc6\xf2\xb2\x31\xaf\xb6\x72\x64\xfc\xa7\xa6\xcc\x53\x66\xef\x4f\xf6\x11\xee\x15\x3b\x7f\xf3\x33\x60\x49\xe7\x22\x67\xaf\x4e\xd9\x08\x9e\xb5\xb6\xcb\x06\x66\x5b\x8b\x64\x38\xaf\x43\x6d\xc1\x35\x33\xf3\x79\x30\xd5\x60\x8a\x4c\x53\x3a\x64\xcc\x01\x55\x02\x33\xec\x4a\xd7\xac\x52\xaa\xd6\x16\x9b\xce\x6d\x1e\x18\xb5\xa0\x8a\x6d\x67\xeb\x03\x61\x6d\xb4\xa8\x85\x8d\xe9\x91\x49\x3a\xa7\x27\x34\xbf\xe8\x24\x07\x34\xee\xf3\x7a\xdc\x06\xbd\xc1\x8b\xc6\x77\xa0\x2a\xf6\xa9\xa9\x8a\x4f\x3e\x1f\xc9\x4e\x08\x8a\x1f\x52\x26\x8c\xc3\x44\xd4\xac\x6a\x4a\x40\xe7\x35\x9b\x4f\x4e\x3e\x4a\x23\xa4\x24\x8b\x85\x6a\x6c\x38\x0a\xe4\x30\xd9\x4f\x41\x7f\xe7\xaa\xaa\xd9\xf7\xdf\x7f\x17\xaf\xbb\x1c\x33\x59\x63\x26\x91\x28\x07\x88\x47\x79\x27\xb5\xa0\x5f\xad\xdf\xf6\x91\x8c\xc3\x1d\x1e\xea\x8d\xa3\xad\x65\x87\x85\x9a\xc8\x5b\x72\x42\x14\x2a\xae\x26\x47\xab\x04\x65\x68\xb4\x2d\x40\x64\xd8\x83\xd9\x59\x76\xf4\x09\xac\x6f\xe2\xe5\xc9\xc9\x54\xe9\xfa\xe5\x5c\x55\xf5\x09\x70\x94\x67\x71\x11\x1a\x35\xa6\x2d\x51\xe1\x46\xa5\xf7\xe7\x6a\x2a\xd8\x27\xd3\xdd\xa7\x10\x93\x1d\x08\x02\xc3\x65\x2d\x29\xd8\x6d\x8b\xb7\xec\x47\x97\x93\xe5\x3f\x64\x71\x40\x21\x82\x08\xa3\xc7\xcd\x07\xd8\x0c\x4a\xf4\x8c\x30\xab\xbe\xb8\x6d\x17\xe1\x79\xfd\xfe\x12\xe6\xad\x66\x01\xbd\x6b\xc4\x9a\x18\xb0\x4f\x90\x11\xe5\x7e\xff\x64\xa4\x1e\x1c\x29\xf4\xc5\x64\x79\x6c\x93\x51\x4d\x47\xdc\x06\xc7\xbb\x84\x3c\x56\xf0\x85\x40\x20\x18\xa9\x0a\x58\xf6\x67\x43\x3b\x75\xac\xf4\xa3\xc1\xa5\xc0\x4b\x76\x76\xce\x78\x9e\x57\x42\x6b\xa4\x39\x4c\xa8\x2b\x95\x0d\x50\x6d\xb4\xe9\xe7\x93\xd9\xbe\x02\x3b\x30\x2b\xfd\xe2\xdb\x7f\x1e\x3e\x1f\x3e\x1f\xbe\xf8\x04\x0c\xcb\xf6\x6d\x48\x5e\xea\x9b\x05\x6b\xca\x42\x68\x0d\xe4\x0d\x1e\xd1\x49\x25\x40\x7a\xab\xe0\xd8\x55\x4d\x19\x1d\x35\x86\x56\x7e\x58\x3a\x4d\xbc\xc6\xb4\x31\xa2\x9c\xe3\x06\xf8\x33\x2e\x6c\x29\x90\x01\x01\xab\x0d\xe0\x69\xc3\xd3\x7b\xd9\x64\xe0\x16\xae\xe1\x31\x04\xd7\xcb\x1b\x51\x2c\xc8\x9b\x52\xaa\xf2\x18\x50\xb2\x47\x85\x18\x50\x16\x9d\x59\x64\xc1\x35\x34\x81\x20\x88\x66\x0e\xb7\x12\x2b\xc5\x9d\xa5\x02\x47\x49\x48\xa0\x8e\xd4\xae\x0f\x00\xc2\xe6\xfa\xe0\x47\x20\x11\x43\xc9\xf4\x68\x22\x89\xfb\x53\x93\x97\x27\x27\xd7\x07\xd0\xcd\x29\xf9\xae\x7d\x56\x20\x79\x88\x01\xdf\x18\x2e\x45\x4a\x73\x31\x17\x23\x49\x43\x73\x51\xc1\xf5\x30\x2a\x04\x0e\xee\xe3\xc5\xbb\x21\xfb\x4f\xd5\x40\x5b\x4b\xa2\xd0\x71\xad\xa0\xf0\x06\x8a\xc4\x23\x59\x57\xbc\x72\xdd\xc4\x70\xbe\x03\xf2\x9e\x80\xdd\x69\xc0\xb8\xcb\x76\xf6\x68\xed\x38\xe2\xba\x16\xb3\x79\x4d\x1d\x98\x8f\x11\x7a\x82\xaa\xd8\x88\x6b\x99\x31\xde\xd4\x53\x0c\xcc\xbd\x3e\x30\x4f\x5e\x9a\x11\xdc\xa9\x2a\xff\x3f\xae\x0f\x30\x72\xa2\xf6\x51\x17\x6f\x2b\x3e\x81\xba\x71\xec\xe8\xfa\xe0\x1f\x86\xc3\xe1\xf5\xc1\x33\x58\x81\xbf\x36\xa2\x5a\x84\xf5\xef\x8f\xae\x0f\xfe\xcd\x3e\x87\x52\xb2\xae\x97\x01\x29\x04\x2b\x05\x84\x0e\xaa\xcf\xd0\x65\x70\xfe\x5f\x0d\x87\x62\x1a\x5d\x36\x66\x9f\x50\x50\xa8\xbc\x17\xf9\x31\xa2\x1f\x25\xa0\xb4\x28\xdb\x0f\xae\x76\xca\xff\x24\x98\x80\x52\xe2\x66\x56\x7a\xca\x21\xa0\xb4\x29\xfd\x3f\xcc\x36\x82\x63\xc7\xcc\xfc\x3f\x4f\x7f\x7e\x07\x4c\xd1\xaa\xa2\x20\x71\xc2\x84\x8e\x70\x6d\xce\xca\xfa\x87\xef\xcd\xdf\x50\xc0\x45\x55\xda\x93\x64\xa4\xcd\x38\x24\xfe\x97\xe6\x39\x42\x74\xfc\x95\xa6\x43\x19\x85\xf4\x7f\x2f\x5f\xfe\x0f\x82\xf0\xd0\x72\x52\x8a\xfc\x3d\x4c\x03\xdb\xd0\xef\x90\x55\x48\xbf\x94\x8c\x1d\xbd\x77\x0c\xa2\xdb\xc0\x12\x2d\x44\x6b\x0d\x7c\x4e\xc9\xf5\xc1\xf5\x01\x03\x1c\x11\x59\xd2\x6b\xb9\xc8\xe4\x8c\x17\x97\x67\x84\x1e\xfb\xcc\x0e\x34\x97\x13\x59\xc7\xa3\xa4\x81\x3e\x67\x7f\x67\x2f\xd8\xdf\xd9\x70\x38\x64\x7f\x67\xff\xca\x82\xf6\xba\xfd\x82\x9f\x58\xd8\xdf\xdf\xbb\xbf\x25\x3a\xc1\x9f\xca\x60\x29\x7a\xfb\xd5\xa9\x8e\x75\x04\x94\xbb\xba\x9d\x99\x52\xef\x30\xcc\xbe\x74\x56\x03\x87\x71\xf0\xbf\x5f\x1f\x98\x1e\x0f\x8e\xaf\x0f\x7a\x77\x31\x1e\x74\x34\xa9\xbf\x77\x3e\x91\x68\x94\xd8\xe4\xc4\x62\x8c\x64\xc9\xab\x85\xdd\x4c\x3f\x4d\xdc\xe4\x37\xf7\x73\x55\x8a\xb2\xb3\x0b\x31\x09\xa4\xbb\x0a\x3e\xf5\x27\xc9\xfe\xce\x7e\x36\xff\xf9\x83\xf9\xcf\x95\xf9\xcf\xb9\xf9\xcf\x1b\x09\x94\x79\x86\x68\x74\xa4\x70\x5c\xa2\x9c\xa9\x8c\xf8\x29\x6b\xfd\x23\xbb\x14\x02\xd1\xc6\x5e\x9e\x9c\xcc\xa7\x0b\x2d\x33\x3d\x2c\xa5\xae\x87\x13\x75\x7b\x92\x35\xcd\xc9\x47\xd3\xee\x04\xbf\x3f\x9c\xd6\xb3\xc2\xd3\x64\x6b\xa4\x7e\x4c\x33\xd8\x00\xd8\x87\x1b\x33\x3a\x33\x38\x33\x36\x33\x34\x33\xb2\xd6\x91\x79\xf1\xfc\xdb\xef\xd9\xff\x60\x2f\xfe\x24\x21\x03\xfe\xc5\xf3\xe7\xcf\xcd\x3f\x6f\x7e\x64\x67\x2c\x97\x79\x79\x58\xb3\x6c\xaa\x14\xb1\xf2\x8c\xcf\x65\xed\x8e\xf5\xb0\x3d\x9c\xd6\xb2\x22\x4d\x88\x65\xb4\x60\xc6\xfa\x66\x49\x03\xc3\x2e\xde\x9b\xcb\xb5\xae\xdd\xbd\x4b\x52\x5b\x3d\xad\x04\xa2\x49\x9b\x4f\x02\x8b\x01\x77\xad\x91\x4c\xcd\xfd\xc9\x2c\x83\x21\x00\x40\x7b\x8d\xb9\x0c\x6b\x10\x04\xb0\x08\x5d\xc9\xbe\xfd\x7f\x7e\xf8\xee\xf8\x85\xe1\x06\x33\x3e\x29\x65\xdd\xe4\xc2\x74\x52\x21\xf4\x9c\x51\x8f\x6e\x05\xd4\x52\xc0\xe6\xdf\x31\x9a\x32\x9b\x17\x1c\xc2\xc4\xde\x53\xd1\x8a\x82\x57\x13\xbc\x84\xa0\xf5\xbc\x12\x99\x91\x88\xad\xdc\x9c\xf1\xf9\x5c\xe4\xe6\x71\xa5\x1a\x08\x0f\x68\xe6\x43\x76\xf4\x66\x38\x19\xbe\x64\xcf\x87\x2f\x66\x14\xf9\xe8\x1e\x42\xe6\xcf\x6c\x48\x21\xe1\x96\x9d\xd9\xd8\x02\x8b\x8f\x8d\xc5\x13\xe5\x98\xdd\x09\x46\xba\x7e\x30\x12\x3d\xe3\x90\x20\x48\x2b\x22\x05\xf2\x69\x08\x46\xe3\x2c\xbc\x57\xe6\xbc\xd2\x36\xf7\x8e\x3b\x2f\xbd\xcd\x97\xaf\x04\x15\x5a\x0c\x41\x32\x29\xcb\x1b\xd6\x28\x47\xa1\x01\x1a\x47\xa8\x01\xd0\x18\x62\x45\xd8\x9d\xf9\x2a\x2a\x08\x1e\xef\x0b\xc6\xf3\x93\x18\x9b\x25\xb3\xbf\xc2\xa7\xdd\xe0\xec\x02\xce\x1b\x50\xcf\xaf\x0f\x32\x5e\xaa\x12\x62\xec\xcd\xd6\x5f\x1f\x10\xbe\xfb\x4c\x70\x5b\x12\xc4\x92\xe3\x09\x0d\xd1\x76\xc1\xf3\xff\x6a\xa0\x72\x41\x33\x87\x32\xca\xea\xae\x64\x47\x94\x9b\xef\x43\x3b\xf1\x36\xcc\x2a\x10\x42\xa1\xda\x32\xfd\x2d\x4b\xf6\xb3\x19\x94\xd6\xfc\x19\x26\xb7\x9b\xaf\xbd\x34\x07\x8b\x0f\xd9\x7b\x45\x7b\x4e\xc1\x3c\x85\xd2\xb5\x79\x34\x82\x47\xe3\x8a\x67\xc4\x0e\x90\xb5\xba\x41\x09\x2c\x5c\x62\x9a\x66\x28\xbd\x3b\xd2\x3e\x32\x5b\x08\x53\x78\x06\x77\x3f\x11\x99\xf9\x63\xae\x50\xfc\x1a\xd2\xad\x2b\x27\xa5\xeb\xd1\x96\x42\x21\x01\x18\xac\x2a\x48\xf9\x80\xdd\x3f\x81\x02\x2d\xb0\xf0\x6f\x50\xd8\xd2\x30\x87\x17\xc3\x7f\x0a\x8c\x21\x0e\x90\x8d\x6b\x76\x7d\xf0\xe2\x9f\x9e\x3f\x9f\x5d\x1f\x50\xb3\x3f\xc8\x25\x0d\xbf\xfb\xe1\x67\x69\x5a\x9a\xf3\x5b\x07\x65\x16\xff\x1a\x6d\xe8\xfb\x37\xbf\xbc\xb9\x40\xa0\x77\xd4\x47\x8a\x45\x3b\xcc\x92\x63\xd4\x08\xc8\x9b\x20\xed\x58\xc9\xe6\x6a\x8a\xc5\x7d\x40\x76\x9c\xaa\x42\xd0\x73\x0b\x30\x2a\xee\x45\x65\xce\xde\x10\x07\x51\x1e\x7b\x8a\xa1\xac\x0c\x04\x81\xa8\xcd\x7f\x81\xf0\x61\x69\x55\x39\x41\x3d\x46\x2c\x40\xbe\xbb\x13\x05\x92\x98\x61\x2b\x86\x47\xda\x39\x57\xe2\x58\xf8\x6a\x33\x88\xd6\x15\x13\xe5\x90\x1d\x5d\x2a\x0b\x4a\x62\xce\x43\xfc\x78\x80\xd4\x67\x78\x6c\x2e\xc7\x63\x60\xa7\x25\x66\x7e\xb8\xca\x45\x66\x5d\xe0\xa4\x5b\x15\x43\x62\x63\x99\x51\x18\x2e\x1d\x33\x2d\x5c\xd9\x1c\x1b\x67\x7c\x57\x49\x58\x35\x50\xed\x00\xea\xc2\x9c\x56\xa3\x86\xf2\x02\xeb\x6d\x62\x41\xa3\xdc\x45\xfd\x4e\xd5\xdc\xa6\x37\xa3\x1a\x87\x15\x23\xcc\x27\xa0\xae\x94\x91\x8f\x55\x85\x71\xa2\x46\x6d\x43\xa1\x1b\x24\x51\x5a\x7b\xd7\xac\xbf\xc6\xd4\x5a\xd8\x96\xa7\xe7\x67\x7f\x48\x23\x48\xd9\x27\xb1\xdd\x0b\x93\xf0\x30\x13\xa8\x0d\x93\xe2\x92\x96\x83\x4a\x2d\x36\xfd\x05\x44\x65\xc0\xa1\x5a\x33\xf1\xf6\xb6\x1f\x75\x60\x8f\x8d\xbb\x2f\x1c\xf0\x65\xf0\x64\x97\x97\x00\x6b\x5b\xeb\xdb\xe4\x1e\xd6\xfc\xa2\xf3\xd1\x4b\xc8\xed\x16\xed\x64\x58\x7f\xc2\x28\x40\x3e\xac\x2e\x84\xe2\xdb\xbc\x52\x23\x3e\x2a\x16\x1e\xd7\xbb\x93\x18\xb8\x3d\x26\x2e\xb0\x06\x1a\xdb\x5b\x55\xbd\xb6\x40\x1d\x2e\xd5\xb2\x3a\x45\x0b\xd3\x4f\x0b\xb2\x5a\x9f\xbd\xbe\x48\x84\x01\x72\x36\xe3\x73\xb3\x60\x44\x04\xa6\x99\x4b\x1f\xa8\xac\x99\x0a\xb9\xa4\x75\x0c\xd8\x8c\x4c\x5c\x5f\x5f\xbc\x58\xb1\xa9\x28\xe6\xae\x9a\x5c\x25\x78\x36\x75\xf9\x7a\xc4\x79\x67\x4a\xd7\xac\x14\xf5\x9d\xaa\x6e\x8e\x85\x61\xef\xf0\xd9\x3b\xbe\xf0\x57\x3c\x7b\x45\x3d\x64\xbc\x74\xd2\x15\x9f\x1b\x2e\x54\x49\x00\xee\x88\x07\x67\xc4\x03\x92\xd5\x70\xf8\x74\x05\x2f\x10\xad\x14\x28\x16\x54\x60\x35\x66\x36\x1c\x01\x1f\x09\x3d\x70\xc3\x0d\x4c\xc2\x68\x3b\x2d\x27\xc2\x02\x9e\x9a\x29\x9b\xae\x51\x5e\xa1\xcf\x63\xd2\x0e\x65\x28\xd6\x53\xa3\x3a\xc0\x22\xd3\x62\x99\x21\xc8\xf2\x46\x7b\x89\x80\x96\xd8\xcc\x8a\x06\xf6\xd6\x1b\x80\x5e\xe2\xf2\x40\xa9\xb3\x76\x52\x90\x63\x68\x67\xe7\x38\x43\xf3\x49\xa8\x5b\x1a\x74\x0b\xcb\x2d\x1c\xbe\xac\x19\x21\xda\x11\xe3\x0e\x2c\x6f\x60\x85\x52\x37\x9a\xf1\x9a\xfd\xc7\xf1\x5b\x55\xdd\xf1\x2a\x17\xb9\xf9\x8b\x4d\x05\xcf\x51\x9c\xfe\x8f\xe3\x0b\xc1\x8b\xe3\xb3\x79\xf0\x9b\x2d\x79\x7c\x21\x66\xaa\x16\x86\xc8\xd8\x91\xa4\xca\xb3\x00\x17\xf5\xcc\x10\xc2\x44\x44\x53\x3e\x3b\x7f\x00\xb6\xd0\x92\x53\x70\xd9\x47\xe9\xe0\xa3\xef\x87\x1f\xbb\x0d\x51\x50\x22\xa0\x0e\x7f\xab\x5a\xc8\x8e\x36\x17\xd9\xe1\xf0\xfb\x0f\xf1\xa6\x48\xd7\x1e\xd5\xda\x09\x14\x31\x82\x75\x1b\xbc\x7a\x0d\x91\x24\x0d\xcd\x1f\x3e\x8d\x63\xf8\xed\x93\x01\x61\x9e\xa9\x3b\x77\xb6\x6a\xe5\xa0\x84\x1c\xb3\xe4\x35\x3b\x81\xef\xae\x03\xf3\xba\x17\x43\x76\x2e\x86\xd0\xba\x76\xd6\x0e\x7f\x4f\x6f\xed\xe3\x1c\x03\x47\xb2\x7b\xb4\xfd\x07\x48\x47\x0f\xe6\x18\x09\xdc\xfb\xcd\xb8\x86\xcd\xd3\x49\x9e\x47\x97\x58\x1a\x97\x13\xb4\xf2\x5a\x50\x46\x0d\x0c\x2b\x84\x08\x2b\x5b\xe8\xae\xeb\xa2\x06\x11\xd8\xf6\x7b\xfc\x67\x84\x0e\x0b\xb3\x86\x69\x8e\x12\x5c\x65\x19\xb6\x7d\xd6\x83\x6d\xef\x64\xcd\x08\xdf\x3e\x8d\xe2\xf9\x10\x74\xfb\x1e\xa8\xe1\x49\x08\x35\xec\xe5\x52\xfc\xb9\x0b\x34\xfe\x06\xf2\xb9\x8d\xfe\x6a\xf7\x20\x6a\x49\xda\xa6\x39\x50\x6e\xf0\x08\x6c\xf5\x16\xac\x33\x3e\x13\x90\x50\x36\xcd\x21\x02\xa3\x21\x0f\xab\x99\x22\xcb\x1b\x87\xf2\x0d\xa4\xd1\x5d\x1f\x24\x05\xf2\xf4\xa9\xbf\x09\x20\xf3\xe1\xef\x36\x8e\xbb\x5d\xcb\xb7\x4a\x1d\x76\x1a\x06\x24\x75\x38\x56\x2a\x5c\xec\x4d\x34\x8a\x25\x00\xf9\xbd\x65\x8a\x89\xd8\x92\xfd\xe2\xb3\x00\x4a\x50\x46\xd4\x1f\x91\x3b\x00\x1f\xab\xba\x07\x43\x64\x09\x16\xbe\x7f\x16\x93\xaa\x6e\x26\x46\xaa\x35\x77\x56\x00\x8f\xdf\x3f\xad\x0d\x20\xf0\xdf\x27\x57\x32\x7c\xba\x2e\x14\x3e\x28\x14\x94\x81\x16\x48\x10\x60\xc9\x71\xfb\x11\x56\x63\x60\x6a\xce\xff\xda\x88\x62\x41\xf2\x79\xeb\x9b\x60\x9f\x06\x7b\x67\x86\xe5\x15\x2a\x61\x64\x3c\x30\x19\x51\xad\xa5\x12\x4a\x8a\x97\x93\x42\x20\x9a\xae\xe9\x7d\xa4\xea\xa9\xff\x04\xc0\xa9\xd0\xa7\x7d\x12\xbb\xbf\x33\x2c\x3c\xd8\xab\x77\x67\xcc\xa5\x74\xf5\x64\xf0\x83\x1e\x48\x02\xca\x1f\xb9\x4e\x44\x72\x41\x50\x03\xd7\x53\xba\xe7\x6c\x68\x58\xac\x41\x0e\x22\x8d\xb4\x0b\x9e\x4d\x25\x57\xc1\xa4\x06\xc6\xe8\xbb\x4a\xd6\xb5\x70\xf5\x66\x73\x5e\x73\x44\xe5\x03\x60\xdc\xc6\x3b\xd6\x6b\x82\xe4\xe2\x9a\x96\x16\xa0\x4b\x71\x2b\x28\xdf\x5f\xfc\xb5\xe1\x85\xac\x1d\xa2\xa9\x36\x72\x13\xea\x78\x94\x60\xaf\x31\x56\xc9\x2b\x88\xbc\x24\x38\x55\xc2\x62\x71\x12\x11\x55\x83\x55\x55\x08\x8b\x17\x59\xfc\x5b\x20\x81\x1e\x1c\x8c\xb4\x6f\x1f\xb2\x00\xda\x18\x69\x46\x97\x9d\x95\x76\x9f\x9e\x18\x3d\x52\x6a\x42\x90\xc9\xa3\x9a\xa9\xd6\x05\xc0\x65\x10\x45\x27\x6e\x45\x49\x71\x40\x93\x8a\xe7\x8d\x39\xba\x7d\xa0\xc7\xa3\xb4\xca\x31\xea\x1c\x46\xab\x6b\x18\xe2\x61\xd8\xe2\x08\xf6\x91\x8a\x05\x6b\xa3\x48\x0d\xe0\x85\x01\xbb\x33\x3a\xe3\x80\xe0\xd2\x06\x24\x71\x0c\xd8\x1c\x7f\xce\x45\x21\xcc\x3f\xf1\x7f\x33\x55\x14\x18\x04\x87\x72\xe7\xbc\x52\xf7\x8b\xcd\x6e\x9b\x5e\xd4\xea\xdb\xd8\x22\x92\xb4\x35\xae\xbc\x73\x5a\x6d\xfb\x6e\x9d\x07\x5f\x3a\xb7\x2f\xd8\xd1\xdd\x54\x42\xdc\x06\xa0\x15\x70\x46\x61\x55\xdd\x21\x54\x7e\xcc\x87\xa4\xf7\x3d\x4b\xde\x57\x2b\x62\x1c\x92\x42\x51\xaf\x36\x15\x36\xe8\x48\xdd\x1e\xc8\x02\x25\x21\x1b\x05\x88\x90\x0a\x1d\x8b\x57\x80\xb7\x14\xea\xb1\xdc\x0a\x5d\x19\xf3\x75\x57\x1c\x13\xa1\xe8\x97\xe8\x5e\xdd\x48\xe8\x9a\x04\x6a\x2c\x3c\xb2\x5a\xc7\x5e\x67\x7b\x0c\x9d\xad\x77\x05\xc3\xa7\x71\xe9\x89\x60\xbf\x71\xf1\x12\x74\x37\x56\xe9\xaa\x46\x7b\x85\x6c\x6b\x73\xf5\x12\x28\x8e\xa0\x0e\x56\xdb\xbd\xd3\x3d\xcc\xfe\x84\xa2\xa7\x2e\x79\x34\x77\xab\x90\x3b\x5d\xee\x61\xa6\xa8\x88\xfb\x3d\x44\xb7\xec\xc7\x35\x0e\x1e\x02\xe7\xd4\xb1\x41\xcf\x03\x5d\xdf\x72\x59\x60\xe4\xe1\x26\xf6\x29\x6b\xcd\xa7\xf3\x54\x29\x55\x63\xa0\x9f\xad\xd9\x05\x09\x09\xe6\x9e\x39\x3d\x3f\x5b\xc5\x29\x9d\x45\x72\xa9\x91\x7e\xcf\x36\xf7\x1e\xb7\xa7\xc2\xc2\xf6\xbe\xa4\xbd\x2f\x69\xef\x4b\xda\xc8\x97\xc4\xe7\x72\xd9\xf5\xb3\x11\xa4\xfb\x03\xae\xde\x5f\xfc\x5d\xb3\xe5\xb5\xfb\x1a\x54\x49\xac\x1c\x94\x98\x78\xf4\xd8\x06\xec\xd9\x12\x3c\x68\x70\x00\x65\x94\xe8\xc6\xdc\xa9\x74\xcf\xac\x4c\x9d\xda\x5f\x78\x0f\xbb\xf0\xf2\x6a\x71\xd1\x24\xd6\x0e\x02\x21\x69\x39\x06\x51\x35\x13\x5e\xb3\x99\xca\x1d\xca\x8f\x0e\xb3\x75\xcc\xb6\xfa\xd2\x0f\xa7\x86\x05\x20\x32\x92\xaa\xe2\x99\xe2\x67\x59\x2e\x2b\x91\xd5\xf2\xd6\x81\x5b\x6a\xa8\xd2\x16\xe0\x5b\x62\xe4\x21\xd5\x54\x2d\x15\x1b\x37\x15\x98\xfb\xe7\x95\xca\x84\x06\x4e\xe3\x84\x60\x64\x11\x58\x63\xc9\xc6\xb3\xf1\x4a\xbc\x64\xc7\xec\xb4\x28\x5e\x42\x12\x4b\x5e\x2d\x20\x79\x45\xd7\x7c\x22\x7c\xa8\x21\x75\x17\xa6\x50\xae\x65\x66\xe7\x99\x38\x17\x95\x54\xf9\xa5\xc8\x94\xb9\x18\x93\xf6\xb9\xbc\xa1\x8a\x13\xb2\x64\x1a\x1b\xb2\x11\x46\x76\x9a\x91\x93\x8c\xe0\x81\x8f\xd1\x32\x93\xb7\x6d\x6d\xa5\x2a\x8f\x6d\x90\x22\x23\xdc\x05\xbc\x1b\x50\x1e\xf9\x9b\xa8\x54\xb0\x55\xd8\x0b\x93\xb3\x99\xc8\xcd\x05\x56\x2c\x08\x25\x13\xed\x6d\x68\x78\x2b\x25\x15\x54\xb3\x30\x96\x30\x27\xb3\x8b\x52\x79\x2b\xba\xcb\xd4\xc2\xa8\xd5\x30\xe3\xad\x5d\xd4\xc0\xdc\x89\x34\x21\xfa\xc8\x18\x48\xc3\x27\x7b\xe1\x38\x31\x28\x35\x31\x46\xbf\x03\xcb\xa0\x25\xf6\x82\xda\xd6\x82\x9a\xaa\xe6\x53\x5e\xbe\x26\x34\xa0\x3a\xc9\xaf\x7d\x0d\xb7\xb9\xaf\xe1\x66\xa6\x79\x5e\xa9\x39\x9f\x00\x35\x9f\xab\x42\x66\x8b\xa8\x82\x9a\x25\x8c\xdc\x75\x60\x48\xfe\xc5\xf0\x9f\x87\xb6\x22\x1d\x92\x1a\x7d\xda\x15\x57\x19\x09\x86\xa3\x82\xa5\x19\x43\x9e\xfc\xc9\x98\x17\x9a\x22\x18\xaf\x69\xd0\xd7\x07\x6c\x2c\x4b\x88\xaa\xad\x82\xd8\x65\x0c\x06\x3d\xe9\x94\x49\xc1\xee\x0f\xb5\x7f\xc9\x96\x5e\xa1\xe4\xd1\x60\xe8\xaa\xea\xce\xcd\x5e\x55\x80\x4e\x3a\x6a\x10\xd6\x7c\xa4\xea\x69\xda\xcd\x62\xe6\xbc\xa4\xb0\x90\x05\xb1\x1d\x37\xc5\x58\x16\x85\xc8\x2d\x0f\xe0\x74\xfb\xa1\x2d\x26\xe3\x55\x65\x4e\x9a\x6a\x6a\x58\x0b\xf3\x4d\x2b\xa4\x0e\x18\x67\xdf\x3f\xff\x57\xf6\x4a\x95\xe3\x42\x1a\x9e\x81\x5e\x09\x1f\x7f\x6b\x84\x37\x54\xf6\xb7\x97\x6f\xce\xa3\x79\x10\x2a\x47\xb4\x30\xc9\xfb\x02\x56\xd4\xb0\xe9\xa9\xba\x63\x13\x5e\x8d\xf8\x44\x30\x6f\x5e\xf6\xbc\x56\x54\x18\x3b\xdc\xb3\x0d\x1f\x5a\xf4\xd9\xbf\x0b\xc0\xfb\x2c\xe3\x9a\xe3\x96\x49\x0d\x79\x08\xb9\xb7\xf8\x8b\x7b\xa9\xe1\xe4\x7b\xd2\xd1\xc2\xd5\xf1\xb1\x85\xe7\x87\x01\x8d\xd8\xe0\x58\xcb\x21\x8e\x9d\x51\x34\xfe\xd8\x90\x61\xe1\x2c\x80\x96\x0f\x2f\x9c\x43\x9c\xc3\x21\x3b\x26\xba\x8e\xe9\x5e\xff\xc8\x0e\x7f\xe2\xd9\xcd\x04\x72\x1a\x4c\x2b\x34\x32\x80\x19\x2e\x5e\x38\xac\x73\x42\x6c\x32\xee\xc4\xce\x60\xe4\x7a\xfa\x91\x1d\xbe\x55\x95\x08\xba\x35\x1a\x48\xc6\x73\x8c\x14\x87\xf5\x81\x0b\x1c\xfb\xd3\x78\x23\x76\x3a\x1c\xbb\x3e\x52\x16\xed\x6d\x05\xcd\x58\x46\x6c\x8b\x9a\x83\xa0\x16\xbf\x4d\xb0\xef\xd4\xe1\x5f\xd6\x05\x15\xde\x4f\xf5\x13\x25\xea\x3f\xb0\xcf\x28\xed\xfa\xc1\x7d\x6d\x3d\xb2\x9d\x75\x94\x1a\xd6\x5c\x6f\x35\x88\x75\x5f\x7b\xc8\x27\xa1\x66\x61\xfc\x6e\x53\x4f\xb1\xb2\xc4\x03\x17\xb1\xa9\xa7\xaa\xb2\x69\x5c\x0f\xe9\x46\xe9\x0c\x12\x47\x3f\xc3\xdb\xdf\x26\xd6\x72\x9b\x2e\xe2\x25\x1d\xf1\x3a\x9b\x6e\x31\xfa\x0d\xde\xeb\x8e\x7b\xfd\x97\xa9\x36\x65\xf4\x76\x80\x66\xf1\xd0\x63\x99\x29\x55\xe5\xb2\x7c\x20\x1d\x6c\xdd\x4b\x77\x40\x9e\xe1\x6c\xdb\x03\x59\xbe\x64\x39\xd9\x7e\x42\x5b\xf6\x91\x18\x8c\xca\xc5\x46\x5d\x24\xb6\x7b\xe3\x3e\xba\xc3\xc0\xeb\x70\xdb\xb7\xab\x11\xcf\x86\x3b\x62\x19\x0f\xec\xab\x3b\x38\x9d\x4d\x45\xde\x14\x0f\xda\xee\x2d\xfb\x48\x0c\x06\x23\x2b\x1e\x30\x92\x2d\x3a\xa0\x61\xac\x6d\xbf\x7a\x6b\x64\xcf\x84\xc8\x8e\xbf\x63\xe4\x0b\x68\x95\x02\xdc\xed\x63\xfc\x19\xfc\xe5\x14\x1a\x53\x35\x19\x44\x8b\x14\x12\xe1\x85\x2a\x29\xa0\xac\x1c\x54\xa0\x00\x04\x15\x2c\xb7\x40\x56\x6b\xcc\xc8\xd5\x36\xdb\x99\x14\xbe\x69\x33\x1a\x66\x6a\x76\x12\x88\x57\x5a\x4e\xf4\x89\xeb\x3e\x3f\x9e\x89\x6a\x22\x8e\x73\x39\x1e\x2f\x2f\x10\xb0\x4d\x2c\x79\x67\xfa\x61\xcb\xd8\xfb\x78\x8d\xdb\x73\x42\x8b\x4e\x65\x95\xaf\x0f\xfc\xbf\x49\x01\x87\x80\x4d\x57\x16\xeb\x0c\xcc\xf9\x33\x0e\xd1\x15\x38\x2b\x23\xde\xde\x08\x31\x67\xc4\xe6\x46\xb2\x90\xf5\x62\xc3\x40\x02\xbb\xf7\x1d\x7f\xd8\x06\x6e\xf0\x38\xda\xf4\xf4\xfc\x2c\xe1\x11\xf7\x02\xf2\xac\xbb\x04\x4b\xea\x9a\xf7\x87\xc6\xc4\x5f\x4d\x7d\x47\x8d\xc3\x75\x8d\x1c\x1f\x9a\x53\xe1\x0e\xe7\x9d\x9c\x0a\x56\x57\x00\x90\x89\x99\x8d\x85\xac\x9d\xd1\x23\xdc\xcd\x87\x84\xaa\x9c\x19\x65\x12\x55\xa5\xee\xbc\x82\x87\x98\xab\xe9\xc1\xb7\xf8\x48\x35\x35\xfa\x05\x7c\x1b\x50\x47\xa6\x1c\x91\x47\x16\xa2\x86\x20\x31\xb4\x7e\xad\x13\xc0\xbb\x26\x4e\x5b\xe8\x2c\x27\x53\x9f\x73\x2e\x91\x85\x11\x10\x5b\xc6\xaa\xf2\xa3\x73\x1e\xa7\x8e\x2d\xfa\x21\x4b\x96\xe0\x32\xe1\x53\x56\x57\x3c\xbb\xb1\xf1\x52\x6a\x02\xae\x26\x35\xf6\xa3\xea\x85\xcc\x0f\xd7\xc6\x68\x74\x66\x84\x9d\xe5\xb1\x0f\x3a\x63\x38\x17\x94\xde\x1d\x86\x15\xc9\x68\x60\x60\xf9\x6d\x74\xcd\xc4\xbd\xc8\x9a\x1a\x52\x64\xc1\xf7\xe2\x6d\x99\xde\x8e\x26\x35\xbb\x95\xe4\x58\x03\x5b\x32\x9a\xc4\x75\xcd\xe6\xf6\x4b\x31\xa5\x90\xf1\x66\xe0\x0c\xbd\x5c\x16\x14\xe4\x05\x36\x61\x8d\xfa\x7f\x0d\x88\x6e\xc1\xb0\x88\x8b\xf8\xac\x6b\x2c\xa0\x29\x0b\xa7\xc5\xfb\x11\x65\x0a\x22\xbb\x2a\x8c\x57\xf4\xdd\xe4\x78\xc8\x71\xbc\xb6\x0e\xbf\x0d\x62\x7c\x14\x17\x52\x78\x86\xda\x1a\x35\x84\xe9\x11\xa3\xbf\x11\x0b\x22\xdf\x83\x64\x2b\xd0\xf9\xc4\xc4\x34\x82\x17\x28\x96\x84\xa0\xce\x5b\x64\x36\x8e\x17\xd3\x83\xde\xbd\xe5\xb2\x30\x97\x17\xdc\x6b\x83\x70\xd1\x02\x9b\x0d\x5a\xf5\x81\xed\x50\x70\xa9\x2b\x7c\x4c\xf6\xea\x01\x13\xa5\x6e\x10\xbf\x08\x1c\x73\x60\xdc\xc9\x02\xb7\xaa\x1a\xf9\x62\x43\xd6\xe6\xf5\x30\x5b\x55\xba\x50\xc9\x92\x17\xa2\xd2\x70\x09\x9f\x51\xbb\x10\x1a\x1e\x08\xf8\x0d\x61\x8f\x20\xf4\xc3\x89\x02\x95\xaf\x8a\x74\x85\x16\x23\xb3\xc0\x6a\x8c\xbe\x56\xf8\x98\x26\x9f\x4f\x9d\x4d\xdf\xdc\xcf\xcd\x81\x76\x4e\xc0\xd3\xf7\xaf\xc9\x51\x82\xb5\xd3\x5a\xdf\x26\x6f\x31\x90\x23\x99\x4a\x87\xec\x14\xaa\xc3\xf6\x35\x2d\x95\x6b\xb9\xd2\x77\xd6\x1e\x52\x77\x35\x3a\x83\x8e\xd8\x43\x6b\x08\xc4\x80\x66\x68\x3c\xbf\x9a\x8a\xe8\x97\x60\xbe\x8f\x72\xa2\xa2\x7d\xbd\xf0\x1f\x06\x8b\x55\xb0\x19\x3d\x93\xa4\x9d\x82\xf9\x51\x6c\xc2\x7f\xdf\x88\xc5\x00\xac\x7a\xbf\xb2\x39\x97\x15\xac\x3d\x85\x7e\x87\xcf\xac\x21\x31\xe8\xc6\xf4\x20\x35\x33\xa3\xb8\xe5\x05\xd4\xbf\x57\xe0\xd3\x42\x24\x00\x47\x1f\xc1\xd2\x0e\xd8\x1d\x38\xf3\x6f\xc4\xc2\x47\x2f\x5f\x1f\xdc\x88\xc5\xf5\x01\x1d\xc9\xb9\xa8\x38\x91\xe4\xf5\xc1\x59\x69\x7e\xb7\x3c\xce\x19\x1f\x2b\xbe\xf0\x92\x1a\xc4\x08\x5c\x1f\xc0\x43\x14\x1d\xd6\xd8\x93\x95\x68\xcb\xcb\xab\x89\x6f\xb3\x45\xab\x4f\x61\x30\x6a\xf2\xef\xd8\x27\x54\x7d\x8e\x66\x8c\xeb\x30\x60\xdc\xac\x23\x2e\x0f\x00\x9c\xd2\xca\x41\xe3\x4a\x14\xdc\x16\x5f\x32\xab\x0d\xbc\x1f\x3d\xaf\x2b\xae\x55\xc3\x8d\x07\x07\xb6\xb7\xee\xed\x0a\xdc\xba\x93\x9a\x22\x5c\x5e\x37\x4e\xca\xfc\xe0\xa2\x33\xdc\x3c\xf8\x9c\x42\x9e\x55\x0a\x50\x73\xc5\x05\x81\x03\x5b\xf3\x7e\x70\xe3\xef\x0c\xd5\xad\x53\x04\xfe\x7b\x23\x16\x87\x1a\x57\xcd\x10\xea\x54\xce\x2d\x1e\xa3\x2d\xc8\x04\x4e\x6b\x74\xbb\xda\x2e\x90\xb6\xce\xca\x01\x7b\xaf\x6a\xf3\x3f\x6f\xee\x21\xe2\xce\x2c\xf6\x6b\x25\xf4\x7b\x55\xc3\x2f\xe9\xc0\x78\xe8\x32\x21\x34\x23\x95\x53\x82\x80\x85\x91\x0e\x5d\x7d\xae\x10\x60\x74\x5a\xce\x8c\xa0\x62\x07\xd2\x39\x2e\xa1\x7b\x15\xd8\x70\xb2\x0f\x1a\xbf\xaa\xa2\xe1\x2f\xe9\x8e\xba\xc2\x14\x15\x78\x82\x21\x06\x05\xa4\xeb\xe4\x78\x4f\x82\x16\x64\x76\x48\x66\x0c\x36\x08\x83\xf4\xb7\x2f\xe6\xbf\xec\xf8\x49\x5d\xff\x2c\xea\x44\xa9\x2b\xfb\x24\xa8\x20\x6c\xdd\x22\x48\xa9\x7a\x51\xd6\x53\x51\xcb\x8c\xb5\xea\xfc\x4e\xf9\xad\x18\x50\x0e\x82\x99\x4f\xe1\x36\xf9\x96\x57\x52\x61\x35\x3b\xc8\x9b\xf1\xd7\x97\xf3\xbb\xba\xd0\x7c\xe0\x53\x84\x17\xfa\xdf\x1f\xa0\xa5\x19\xce\x80\xd9\x81\xfd\xba\x06\x86\xae\x2a\x6b\x59\x36\x09\xe1\xdf\x3e\x09\xfc\x48\x36\x88\x09\xc0\x11\xcd\xbf\xcd\xa5\x36\x93\xb5\xcd\x4b\x21\x50\x20\x23\x02\x9b\x65\x77\x7e\x35\x0a\x81\x8f\xa3\x21\x82\xd0\x27\xa3\xc8\x40\x0e\x11\x2c\x9d\x0f\xe4\x09\x9c\xf4\xd2\x25\xca\xd8\x48\x90\x00\xb2\x57\x6a\x0d\x0f\x50\x72\x8a\xb0\x96\x23\x77\xb3\xd9\x12\xac\x68\x0d\x32\x37\x5c\xc8\xb5\x32\xc3\xac\xa4\x20\xf9\xaa\x14\xf7\xb5\x3d\xa3\x6e\x24\x7e\x1f\x5e\xe1\xaa\x20\x11\x82\x60\xac\x6b\xc3\x5d\xa1\xaf\x19\x56\xe2\x04\xc9\x4f\x59\x34\xcb\x71\x38\xd3\x0c\xa0\x8d\x6d\x5c\x83\x99\x37\xa6\xe6\xe4\x0e\xe6\x0b\x40\xc1\x38\x1b\x8b\x3b\x36\x93\x65\x63\x96\x0b\x36\x7b\xce\xb5\x16\xb9\x13\x97\xb0\xd8\x9b\x2d\xbd\x0c\x17\x9f\x5d\x6d\x8c\x0c\xc2\x70\x32\x98\xa7\xdb\x49\x5c\x4a\x2b\x9c\xfa\xd2\xd2\xb4\x52\x51\xdd\xce\xb1\xac\x74\xed\xe2\x48\x06\x21\xf8\x29\x8c\xa7\x12\x99\x90\x6e\x29\x6b\x75\x23\xa8\x72\xb8\x8b\x41\x99\x09\xad\xf9\x24\x9d\xa2\xd5\x9a\x41\x02\xb4\xbc\xf6\x02\xb1\x83\xeb\x0c\xe3\xe5\x0e\x75\x10\x23\x14\x26\x9a\x78\x65\xca\x81\xeb\x5b\x52\xf1\x39\x56\xe8\x1d\xac\x45\x35\x93\xa5\xc0\x05\xb3\x4e\x75\x98\x1d\xed\xca\x26\x69\x5b\x98\x06\x04\xbb\xc4\x9a\x12\x63\x7d\xcc\x37\x79\x76\x13\xa2\x32\x8b\x6a\xc8\xce\xdb\xd9\x55\x08\x1c\x3d\x64\x17\x82\xe7\xc7\xe6\x58\xef\x3a\xb6\x21\xfb\xff\xd9\xfb\xde\xe6\xc6\x71\x23\xef\xaf\x82\xd2\xf3\x62\xec\x94\xac\xb1\x67\x92\xaa\xe7\x7c\x2f\xae\x14\xdb\xbb\xeb\x5b\xcf\xd8\x35\xf6\x24\xb5\x15\xa7\x2e\xb0\x08\x49\x58\x53\x00\x8f\x20\xad\xd1\x5e\xcd\x77\xbf\x42\xff\x01\x40\x8a\x92\x25\xcb\xb3\x99\x4b\xe9\x45\xb2\x1e\x91\x04\x40\x10\xe8\x6e\x74\xff\xfa\xd7\xd6\x8c\xea\xb2\x54\x66\xb4\x38\x82\x27\x6c\x7e\x24\x4d\x76\x14\x56\x30\xf8\x74\x3b\xc0\xa9\xf9\xf8\x4a\x9b\xc7\x8e\xb4\x43\xba\x82\x66\xc5\xe7\x4f\x57\x6d\xb4\x48\x74\x00\x6c\xf2\xba\x3b\x38\x09\x3e\x48\x23\x27\x2a\x43\x9f\xe3\x85\xa9\xba\x3c\x72\xcb\xf7\xe0\xb8\xe7\xb6\x7c\x1c\xe7\x76\x7e\xa4\xbd\x8c\x12\x70\xfd\xd6\xcb\x35\xb2\x0f\xd1\x95\xb5\x22\xed\x2a\x8a\x31\x74\x6c\xfa\xe7\xba\xac\x91\x57\x87\xe0\x25\xc8\xbb\xe6\x48\x02\x1c\xa0\x35\x16\xcc\xed\x0b\x4c\x60\xcb\x5e\xc8\x5f\xfd\xfa\x06\x1f\x2c\xb8\xc2\x42\x85\xf9\x64\x1c\xd0\x30\xbb\x22\x8d\x1a\xf9\xcd\x5d\x22\xa9\x70\x09\x4b\xbc\x39\x3e\x99\x8c\xe4\x41\x11\xf3\x57\xc5\xa4\xcf\x0f\x4a\xc8\xba\xb2\x33\x09\xf2\x27\x5f\xc4\x54\xca\x4e\x69\x31\x5e\xef\x67\x4e\xe4\x43\xcb\xd7\xbc\xdb\x21\x99\xdc\xdb\x70\x10\xf2\xeb\xa7\xc3\xf4\xc3\x85\x55\x92\x6d\x15\x79\x85\x03\x21\x38\x2d\x30\x01\x2d\x90\x4b\xd1\xa9\x64\x78\xcb\x38\x23\xb0\x9e\x3a\x97\xc5\x35\x5f\x62\xcb\x98\x99\x13\xc3\x33\x94\x4b\x91\x2b\x99\x05\xf2\xe8\x8e\xc5\xff\xa0\x80\xb0\x0d\xa5\x19\x2e\x0f\x30\x26\x9e\x52\x0c\x60\xe0\x8e\x27\x0e\xff\x52\x89\x37\xc3\xa2\xc8\x17\x6f\x60\x7f\xbc\xf9\x0c\xa0\xac\x37\x9d\x2f\x51\xe9\x2e\x7f\xe2\x9d\xa6\x1c\x65\x3d\x53\xae\x92\x33\x38\x2f\xce\xc9\xcd\x15\x66\x45\xcc\x15\x70\x37\x56\xb0\xda\x08\xde\x47\xd4\x77\x6c\x20\x7a\xb5\xda\x98\x0d\x1a\xd9\x4e\xdf\xdb\x0f\x6f\x1b\xc1\xa3\x47\xa5\xbd\xeb\x7c\xd1\x70\x09\x1c\x7a\x71\x57\xc0\x4f\xe0\x3f\x9a\xf9\x3b\x10\xd4\x28\x70\xaf\x05\xae\xc7\xb5\x95\x01\xfc\x94\x1f\xc1\xec\x6e\x3a\xcc\x68\x18\x76\x2c\xa8\x70\x0d\x02\x0c\x0d\xe3\x55\xe6\x79\xe2\xbf\xea\x34\x60\x29\x71\x87\x53\x69\x13\x7f\x0b\x98\x88\x74\x2f\x2e\xb3\x0d\x04\xa2\xe1\x2a\xe6\x5d\x49\x48\xf1\x22\x6d\xb6\xda\xc4\xf8\x0e\x1c\x0e\xd1\x7c\x99\xc9\x02\x03\x4f\x99\x20\x22\xce\xa6\x94\x4c\xac\xd9\x87\x45\x24\xaf\xaf\xac\x45\xbe\x75\x78\x16\x16\x78\x30\x0b\x23\xcd\x78\x40\x3d\xf9\x2d\xb3\x08\xa4\xdd\xe0\xe1\x02\x3b\x11\x92\xe6\x03\x20\x15\x14\x22\xd8\x9b\xb0\xc8\xc1\x26\x58\x40\x78\x87\xcd\xc9\x96\x96\x3f\x7d\x9b\x04\xb1\xbc\x9e\xcf\xec\xc8\xbd\xf5\x73\x79\x34\xa9\x75\xa6\xde\xa6\x73\xf4\x72\xd7\x43\xbf\x47\x4c\xe8\xdd\x94\x02\x77\xad\x3c\x39\xa6\x4d\xc7\xcf\x9d\xb8\x39\x23\xe7\x46\x8c\xaf\xb0\x4d\x9e\x21\x7a\xac\xd6\x6e\x9a\x2c\x1e\xf8\x24\xc0\xe3\x0a\x1d\x80\xd3\x3a\xd4\x67\xd1\x26\xc9\x35\xa6\x4e\x5d\x23\x71\x9c\xa8\xd6\x41\xbd\x99\xc5\x1c\x2a\x1e\x95\x48\x9e\x6f\xe7\xe8\xb6\x08\x79\xea\xda\x89\x89\x25\x4e\x77\x2a\x1c\xae\xe1\x04\x43\x28\x36\x5c\x96\x00\xb1\x06\x41\x16\x90\xd0\x5d\xf2\x0c\x6e\xd6\xd6\xdc\xb1\xe4\x5a\x9e\xb5\xb3\xf6\x2d\x68\x62\x44\x59\xb7\x04\xa7\xa5\x81\x56\x20\x14\x50\x0a\x46\xe3\x75\xee\xcf\x06\x2c\xa0\x49\xeb\xda\x4a\x4c\x6a\x59\x4a\x53\x51\xa9\x00\x3e\x96\xf9\xa3\x44\x51\x28\xe3\x8e\x28\xa6\x80\x01\x06\xe9\x65\x8c\x13\x4e\x15\xb2\x84\x77\x65\x89\xe9\x62\xda\x0e\x9f\x59\x20\x02\x10\x30\xce\xdc\x65\xca\xa0\xaa\x8d\xf8\xf4\xc3\xd9\xfb\xf7\xef\xff\x0d\x23\x6c\x12\x41\xc3\xda\x88\xcf\x77\x67\x54\xdb\xe3\x79\xbb\xf6\x63\x8d\x24\xa8\x78\xe6\x7d\x6d\x3b\x97\x37\xe8\x2b\xe8\x81\x7e\x8f\x5d\xed\x3f\x6e\x80\x57\xff\x18\x8e\xbe\x8c\x54\x0f\x04\x16\xac\x46\xf9\x54\x62\x11\x2c\x3e\xae\xbd\xe1\x83\x47\x10\xff\x71\xe8\xcb\xe9\x94\x16\xb6\x05\xcc\xe5\xe9\x04\x7e\x08\x08\x45\xc4\x1c\x90\xf6\xc2\xcb\x9d\x45\x1d\xfa\x41\x2e\x50\xb9\xfb\xc5\x32\xb5\x65\xa5\x00\x2e\xdc\x65\x7b\xaf\x43\x8e\x2f\xf5\xb2\x22\x5f\xa5\x3d\x90\x4f\x3f\x9c\x09\x58\x33\xb0\xc7\xc0\xb0\xf6\xeb\x5d\x56\x41\x9c\xa4\x86\x6c\x44\x42\x13\x94\xbf\xb9\xf9\x49\x6a\x27\x9b\x67\x8e\xcc\xd3\x3c\xa3\x0d\x48\x30\x6d\xe8\xb8\x1c\xbd\x20\xed\xf3\xba\xf5\x8b\x1e\x13\x29\x70\x32\x11\x8e\x0a\x34\xc1\x78\xa2\x6b\x9e\xb5\xc1\x31\xfd\xa5\x50\xa3\x2a\x6c\x3d\x1a\xa4\x38\x30\x16\x33\xd0\xca\x10\x0c\x83\x4f\xd6\x20\x5a\x70\x1c\xa2\xa3\xe4\x2f\xee\xcd\x8b\xbf\x43\x21\xc7\x15\x93\x61\x83\xd5\x60\x12\xcb\xab\x2f\x2c\x54\xf6\x81\x83\x46\x03\x90\x0d\x63\x42\x7f\xd9\xb0\xc1\x37\xbc\x74\x63\xf0\xf4\x82\x63\xa6\xdf\x98\xa6\x87\xdc\x8e\x1e\xfd\x5c\x5f\x73\x37\x9d\x2b\x8a\xe2\x88\x21\x0b\x22\x71\x76\xd4\x06\xac\xee\x92\xe5\x11\x67\x9b\x68\x43\x07\x5f\xe4\x18\xe9\x0b\x99\x57\x53\x5b\x4f\xa6\x7e\x95\xb3\x22\xe6\x25\x29\xda\xd4\x43\x74\x03\xcf\x72\x51\x6a\x44\xf5\xa2\xc3\x41\xcf\x54\x23\x25\xaf\xcf\x45\x3b\x30\x4b\x88\x5c\x40\x60\xc8\x88\xc2\x66\x08\x70\xc6\x96\xb4\x11\xef\x8f\x79\x9f\xe2\x57\xfe\xb9\x7e\xf0\x17\x39\x9f\x46\x8e\x60\x9d\x39\x8a\xb9\x26\xeb\x8b\xf7\x2b\x80\x10\xf4\xc4\x44\xef\x09\x4d\x71\x92\x3e\x59\xd8\x6c\x20\x86\xf4\x65\x65\x95\x74\x8a\xfe\xcf\x46\xa7\xbe\x2f\x21\xc5\x54\x96\x59\x57\x27\x07\xb7\x97\x3f\xfe\x7c\x79\x75\x75\xb8\xd4\x1d\xaa\x3d\xe8\x65\x94\x2b\x69\xea\xa2\x4f\x92\x83\x07\x11\x05\xc8\xf0\xe6\x12\x72\x28\x88\x56\xc4\x41\xc9\x28\x3b\xe6\x1c\x4f\x51\xc8\xb2\x42\x49\xd9\x6f\xc8\x2c\x3f\xa7\xc8\x6e\x0d\xa8\xf0\xb0\x5c\x53\x5b\xbe\x2f\x6a\x53\x41\xfc\x18\x6a\x7d\x19\x04\xd6\x5a\xc8\x43\xa4\xc3\x1e\x7c\x45\x84\x11\x8c\xa4\x49\x1c\x30\x6d\x6a\x8c\x96\x6c\xcc\x02\xa2\x1f\x16\xe1\xf2\x66\x27\x43\x85\x46\xcb\xb8\x88\x07\xa5\x4c\x14\x02\xeb\x34\xd4\x66\x62\xe4\x1b\xfa\x67\x5e\x55\x6f\xc5\xcd\xbf\x3a\x9b\x02\x4f\x51\xcb\xd9\x54\xc9\x36\x09\xab\x86\x50\xd2\x8b\x81\xb8\x90\xa3\xa9\x50\xc1\x7f\xd2\x38\xf1\x26\xd4\x61\x01\x18\x32\xb2\x33\x62\x9e\x8f\x2c\xe0\xc9\xda\xc4\x96\x42\x3f\x98\x63\x42\x41\x84\x65\x19\xd4\xfc\xc8\x20\xc1\xcd\x11\x24\x62\xf9\x76\x80\x34\xce\x24\x8e\x5d\x08\x9c\x93\xde\x23\x4d\xba\x45\x7c\x60\xe3\xb0\xd0\x44\x19\x6f\x54\xa9\x6e\x53\xfa\xc7\xe4\x6a\xbb\x6c\x60\x51\xaa\xb1\xfe\xd2\x0f\xae\xc9\xa8\xd5\xfa\x98\x95\x8b\x8f\x7a\xb9\x06\x85\x4d\xd1\x64\xbe\xfe\x78\xf5\x8b\xb8\xfc\x01\xee\xfe\x18\x2b\xec\x35\xd6\x3c\xe7\x88\xc6\xc4\xb5\xa0\x41\x11\x41\x17\x98\x30\x82\xcf\x98\xa5\x0a\xa6\x63\x05\x35\x1c\xcc\xf1\x8a\xb3\x31\xe0\xb1\xe8\x8c\x0e\xea\x00\x1e\xe1\x12\x5c\x23\x3b\x7b\xd0\x26\x1e\xc1\xe8\x05\xb0\xf4\x00\x4a\xdc\x90\xc7\x8a\x8f\x37\x8a\x06\x52\x09\x3e\xbf\xff\xca\x3a\x57\x8e\xb5\x5a\x7c\xdf\x7e\x1a\x06\xa8\xca\xda\x8c\xd2\x4d\x9d\x43\x85\xe6\x40\xea\x85\x35\x1b\x38\x22\x19\xf8\xef\xa3\xcb\x9b\x86\x47\x51\x0c\xf2\xd2\x86\xe2\x77\x0d\x03\x24\x64\xf4\x05\x17\x21\x7d\x26\x3c\xc8\xa0\x7c\x24\xf9\xce\x26\x0a\x94\x27\xb8\xbe\x0b\x39\xe2\x90\x8b\x74\xc4\x05\xd6\x62\x51\x0c\xaa\x01\x4b\xb7\xbd\x3b\x3e\x11\x67\xe4\x6f\xb6\xa5\xf8\xd3\xf1\x31\xce\xe6\x27\x25\x9d\x35\x94\x65\xe7\x77\x87\x85\x3a\x16\x10\x5b\x41\x65\x95\x2e\x97\x51\x9a\x64\x3a\xb6\xb5\x09\xbc\x5f\x68\x86\xe5\xb9\xad\x2a\x8e\xd0\xa4\x09\x79\x78\x88\xf5\x67\xe0\x85\x38\xe0\x35\x9b\x2f\x96\x2d\x15\x0c\xea\x84\x66\x3f\xf9\x27\x8e\x50\xeb\x61\x22\xfa\x21\x16\xd9\x02\x77\x64\x16\xe8\xc3\x78\x47\xb4\x92\x1c\x5f\x57\xac\xea\x4c\xcd\x0a\xbb\xd2\xbd\x4d\xdf\xae\xdb\x05\x2b\x9c\x97\xfb\x5e\x41\x52\x58\xab\x71\x7e\x4b\x19\x9f\x42\x2b\xbc\xe2\x32\xe5\x60\xa5\xb9\x0a\xca\x44\x6e\xe5\xff\x5e\x67\x83\xeb\xb5\x78\xb8\xa1\x69\x83\xc3\x20\x42\x55\x95\x16\x4a\xb6\xa0\xb9\xad\xcc\xd8\x22\x7f\x15\xd4\x72\x40\xed\xa7\xcd\x93\x2c\xb5\x34\x95\x37\xcb\x49\xbe\xf2\x89\x97\x2c\xad\xa6\x1d\xbe\x0e\xeb\x06\xf1\x13\x86\x25\x4a\x30\x97\xad\x69\x06\x04\xbc\x32\xd7\xb9\x5f\xd5\x54\x4d\x2b\xb5\x35\xbc\x24\x00\x29\xc6\x90\x46\xbf\x5e\x22\xe6\x6c\x20\xae\xb9\x38\x64\x7f\x35\x4e\xad\x36\x6d\x98\x9a\x76\x62\xaa\xb3\x4c\x19\x60\x40\xf0\xc3\x7f\x0b\x7c\x6f\x70\x71\xa2\x2a\xac\xb8\x77\x88\xda\x28\x02\x43\xe9\x85\xcc\x9b\xca\x5b\xff\xb9\x1e\x69\x7f\x5c\x90\xee\x11\x05\x09\x23\xb3\x9a\xfd\xb1\x7b\x27\x96\xc6\x31\xe9\x30\x71\x53\xf7\x1b\xf6\x07\x54\x0e\xa1\x75\x92\x28\xb1\x80\x35\xc3\xe8\x4d\x88\x4c\xa6\xd3\x4e\xe7\xc1\xa2\xd4\x4f\x3a\x57\x13\x95\xb1\xf3\x4d\xe2\x21\x11\x22\x8b\x99\x1e\x2f\x62\xbb\x64\xeb\xeb\x78\x82\xe8\xb3\x49\x4e\xa2\x22\xc4\xaf\xd8\x96\xf7\x07\x23\x03\xa5\xf8\x50\x34\x9e\x5f\xdc\x7c\xba\x38\x1b\xde\x5d\x9c\x83\x28\x4b\x56\x01\x90\x31\x04\x26\x42\xf4\x1d\x9b\x6c\xe9\x54\xab\x8d\x78\x3a\x19\x9c\xfc\x69\x37\x1f\x7d\x03\x22\xfa\xb5\xdf\xcb\x57\xa0\x95\x3e\x20\x38\x89\x40\x0f\x8f\x6a\xe1\x12\x00\xcb\x72\xa4\xd0\x7f\xda\x72\x22\x8d\xfe\x0d\xcf\xac\xcc\x4c\xfb\x9b\x12\x07\x6e\x64\x0b\xf2\xf4\x01\x0a\xe5\x30\x71\xe7\x49\xa2\x31\x09\x00\x15\x87\x68\x37\xbf\x72\x70\x3b\xc5\x1d\xe9\xa8\x0d\xa8\xba\xf9\x02\x5f\x20\xbd\xea\x2e\x6e\xc0\x59\x1a\x1a\x78\x26\x6c\x26\x66\xb2\x70\x69\xc4\xac\x49\x7a\xc6\x11\xce\x14\xe9\x1f\xb8\x39\xa8\x1f\x94\x7f\x50\xd5\x13\x5b\x89\x6e\xc3\x99\x75\x7e\x63\x21\x92\x98\x7c\xb2\x53\x5b\x3b\xf5\xa8\x54\x01\xf5\x9b\x7c\x6f\xb8\xb0\xab\x45\x41\x61\x23\xd4\x52\x7e\x73\x72\xf1\x4c\x5a\xf0\x49\xfe\x40\x54\xe0\x03\x31\x8c\x01\x19\xfa\xda\xec\x16\x78\xe3\xa8\xf2\x4b\x2a\x33\xc3\x8f\x64\xda\x46\x2e\xe5\x20\xfc\x65\x51\xf8\xbd\x27\xab\x29\xc6\xcf\xee\x7b\x23\x7d\x34\xca\x18\x36\xd6\xca\x7c\x70\x1c\xc7\x20\x65\x19\x29\xe3\x28\x92\x18\x86\x07\xab\xb0\xe5\x35\x8e\xd2\x6e\x10\xeb\xfb\x04\x91\x0c\xdb\x0d\xd7\x2a\xbc\x59\x02\x2c\xe0\x2d\xc7\xf5\x7c\x8c\xad\xf4\x7a\x16\xda\x97\x6f\xc8\x8e\x70\xec\xd7\x95\x34\xc0\x60\x04\x70\x70\x9d\xcc\x16\x2a\x2b\x2c\xa3\x63\x78\x20\x2e\x5d\x34\xdf\x60\x52\x50\x3b\x25\x64\x96\x2e\x71\x2e\x80\x6a\x4b\x02\x16\x50\x1b\xd6\x4f\x2a\x7b\x76\x10\xf4\xc1\x2e\x02\xd5\xd2\xe0\x50\xa0\x35\xf2\x17\xa1\xa3\x3a\x8d\x56\x0e\x82\xf1\x52\x94\x7a\x26\x4b\x0d\x1a\x8a\xaa\x2b\xf9\x15\x1c\x74\x67\xb4\x3f\x48\x8c\x34\xe0\x1f\x71\x6e\x3b\xb9\x0e\xb6\x95\x07\xf1\x2c\xe6\xfe\x1f\xcc\xdd\x96\xb5\xd3\x3f\x06\x47\x7c\x1a\x73\xc6\x5f\xe8\xa3\x00\x49\x94\x59\xfe\x68\x09\x16\x37\x71\xe7\xb7\x91\x9c\x98\x01\x43\xb9\xe0\xf7\xbd\x78\x2b\xe6\xa7\xa7\x97\x28\xbe\x19\xab\x5c\x35\x49\x66\x06\xe2\x23\xd6\x4a\x0d\xf1\x26\x59\xaa\x86\x85\xff\xa0\x04\xc8\xe9\x0c\x41\x77\x71\x54\x47\x89\xdd\x6f\x1b\xe6\x3d\x1e\x60\xad\x0b\x68\x9f\xa4\xa2\x5a\x51\x2d\x60\xcf\xf1\xf1\x59\x8a\xf3\x8f\xb7\xff\x75\x35\xfc\xf3\xc5\xd5\xab\x7c\xbb\x30\xbe\x6e\xea\x89\xb9\x51\x65\xa8\x4e\xdd\x21\xa8\xaf\xc8\x1a\xe3\x81\x53\x72\x3a\x09\xdc\xa6\xe5\x35\xbc\xba\x0a\xf7\x91\x18\x02\x53\x03\xec\x36\x30\xbc\x02\x2e\xbd\x11\x8f\xa0\xb9\x68\x25\xda\xa7\x87\xcc\x68\xe2\x24\xf2\x3e\x95\xa7\x54\x1f\x5c\x1a\xf6\x21\x98\x86\xa9\x03\x26\x90\x36\xb1\x4a\x7e\xfa\x64\xb4\x84\xa2\x49\x1b\x21\x06\x00\x43\xa8\x11\x31\x56\xaa\x04\x66\x10\x31\x55\xd6\xa8\x18\x85\x8f\x8d\x7c\x1b\x29\x78\xdd\xf8\x62\x1b\xe4\x2a\xd4\x3a\xdb\x2a\x55\x61\x3d\x7a\x6a\x68\x18\x9f\x84\x0b\x9d\x00\xbc\x01\x9d\x8a\xe9\x20\xdf\x1e\x3d\xf5\x21\xc1\xe9\xf9\xed\xe5\xcf\x91\x33\xed\x2a\x3d\x12\x09\x22\xa9\xcf\xfc\xd4\xbe\xcd\x84\x53\x19\x14\x22\x58\x53\x11\xdf\x00\x44\xe2\xc1\x55\x68\xcb\x8e\x84\x82\x10\xd9\xf2\x7b\x15\x10\x5b\x04\x2f\x60\xbc\x69\x03\x4a\xb8\x19\x62\xeb\x0e\x09\xea\x62\x24\x05\x91\x12\xc8\x82\x0f\x5e\xd3\x11\x90\x98\xaf\x1d\xd9\xa6\x21\xb2\x2d\x31\x67\xdf\x3d\x56\xec\xf6\x5b\x63\xc5\xfa\xb0\x7d\x96\xfa\xfd\x7c\x79\xce\x8a\x84\x6c\x0b\x6d\xc8\xed\xe1\x0d\x6f\x50\x07\xb8\x3f\x5a\x31\x3a\x8e\x7e\x46\x43\x33\x7a\x79\x9a\xe1\x27\x6b\x84\xab\xa1\x64\xf5\xb8\xce\xa3\xde\x5f\xae\xb7\xd1\x2c\x12\xee\x97\x17\x73\xb2\x1b\x71\xf3\xf9\x2e\x0d\xcd\x6e\xba\x4c\x76\xb1\x0f\x6a\xdd\x59\xe1\x64\x63\x4c\x49\x53\xbc\x2d\xe3\x4a\x1a\xd7\x63\xf4\x49\x19\x8c\xfe\x24\xe9\x8d\x95\x15\xb9\xaa\x00\x57\x4a\x03\x5c\xc0\x71\x79\x6e\x22\x50\x02\xcc\x8b\xc6\x2f\x61\x77\x90\x06\x0b\x90\x02\xfc\xaa\xe4\x2f\x0c\x1c\x2d\x7d\x0a\x4e\x11\xa8\xe0\x08\x4d\x83\xbe\x70\xb0\xcb\x4b\x72\x44\x25\x0d\xe0\x79\xe1\x99\xbc\x86\x04\xc1\x17\xaa\x9e\x50\xce\x99\x5f\x8f\xdb\xb2\xcc\x2e\xe3\x0c\xd1\xf7\xda\xb9\xe0\x21\x68\x07\xd3\xcc\x51\xd7\xce\xcc\x35\xaf\x14\xfb\x62\xf8\xf1\x9c\x71\xc8\x60\x4a\x04\x6f\xeb\x7d\x2f\x92\xd6\x70\x3b\x29\x59\x14\x29\xec\xf8\x60\x54\xac\x4b\x51\x82\x47\xb5\x38\xc2\xdd\x84\x10\x1a\x8c\x06\x51\x78\x97\x57\x42\xcc\x58\x6c\x12\xa0\x01\x69\x15\x64\x7e\x07\x1c\x02\xfb\x79\x31\xaa\xe7\xcf\x77\x0e\x4c\x44\xdf\xed\x7d\x4f\x14\x5e\xfb\xb8\x74\xbe\x60\x84\x7d\x4c\x9f\x9b\x6b\xa7\xc4\x1f\xdf\xbd\x13\x07\x9f\x0d\x85\x9c\x20\xe0\x7a\x01\x15\x63\x0f\x3b\x99\x9f\x96\x99\xa9\xa2\x95\xb0\x66\x72\x5b\x6f\x08\x16\x4c\x60\x33\x5c\x6f\x70\x24\x5d\xad\x21\x66\x6b\x2f\x87\xef\xa1\x22\xe4\xc7\x06\x8d\xf6\x8a\x81\xbd\xce\x89\x65\xa5\x68\x7f\xd5\xee\x77\x14\x88\x37\x40\xc3\xb2\x9c\x1e\x0c\xd6\x0b\x1c\x14\x29\xda\x51\x59\x31\xd1\x50\x56\xc1\xab\xd9\x52\x55\x09\x12\x0a\xd0\x9c\xb4\x70\x7e\x0e\x23\x17\x37\xc3\xbb\xb3\x9f\xc2\x79\xf5\xc1\x66\x1d\x69\xfe\x1b\x8f\x73\x3d\xd7\x5a\xe3\x72\x90\xb1\xcb\xcc\x6b\x26\xb1\xc8\x0e\xb8\x4e\x06\x17\xc8\x50\xd5\x68\x70\xd8\xa6\x64\x7b\x16\xfd\xf7\x7c\x46\x40\x23\xe5\xbf\x92\xe5\x44\x55\xe2\x53\xeb\xa9\x4d\xd7\x4f\x67\x63\x9f\x2f\xcf\x77\x01\xa2\xaf\xe6\xb7\xed\xb0\x88\x56\xdc\x0a\xa4\xcc\x2e\x0d\xc4\x34\x4c\xed\xc4\xf2\x68\x90\x3d\x03\x7f\x72\xe4\x44\xee\x93\xe6\x03\x7d\x69\x92\xd6\x3a\x19\x97\x9f\xd1\x72\xf1\xc9\x36\xa9\x7a\x47\x71\xaf\x35\xef\x7c\xc7\x8c\xcf\x70\x92\xc3\x68\x44\x9a\xe4\x8c\x7e\x53\x2c\x7e\x7d\x79\x03\x4a\x41\x4f\xea\x52\xf9\xe5\xb3\xe9\x8b\x77\x97\x03\x6a\x8c\x79\x59\xf3\x52\x7b\x7c\xfc\xe1\x10\xac\xab\x35\x42\x82\xd0\xc8\xe7\xcf\x81\x18\xd2\x2a\xb0\x37\xcb\x07\xfb\xa4\x02\xdf\xb4\x76\x7c\x64\x92\x62\x6a\x5d\x85\xee\x43\xfe\xeb\xb4\xb0\x65\xd5\xf7\x6f\x67\xfd\x3b\xc2\x3f\x77\x5a\x71\x98\xc5\xdd\x91\x3c\x03\xc9\x63\x60\x6e\x53\x34\x31\xda\xb9\x10\xe7\x20\x3e\x3b\xa8\x18\x4e\x77\x60\xf2\xd4\xc6\x59\xd0\x7b\x06\xe1\xdd\x18\x84\x47\x36\xeb\xd0\xab\xb7\xa1\x7c\xd8\x4f\x77\x77\x37\xfc\x69\xa0\xb2\x7a\x38\xa3\x60\x6a\x60\x5f\x1c\x07\x8e\x58\x55\x3d\x1b\x40\x7c\xff\x0e\x41\x7c\x95\xd4\x5d\xe1\x91\x8b\x2f\xe4\xbe\xc4\x0c\x3c\xe7\xec\x48\xc3\xf1\x23\xb8\x5d\x4a\x08\x3b\x0f\x04\x62\x40\xf0\x5f\x30\x9f\xf8\x85\x85\xae\x9c\xb7\xc0\x90\x8f\x06\x5a\xc2\xbe\xda\xa1\xc3\x00\x7f\xe0\x13\x3e\xf4\x18\x70\x08\x9d\x30\xd7\x91\x85\x03\x03\x66\x83\x2f\x78\xf5\xa8\x2f\x23\x55\x54\xcc\xcc\x38\x06\xbc\x01\x9d\x96\x68\x78\x7e\x46\x5e\x83\x27\xe1\x9c\xa6\x6d\x4f\xa0\xbb\x8b\x25\x49\xf9\x80\x5d\xa1\xf6\x69\x3d\x93\xe6\xa8\x54\x32\x03\x89\x9b\x5c\x8e\x95\xd9\x30\x1f\x96\x7d\x54\x6c\x7e\x74\x4a\xfc\x80\xa6\xea\x92\x8c\x26\x93\x65\x46\xf9\x9a\x01\xce\xff\x2d\x27\x62\x07\x72\x06\x4e\x3d\x06\x9f\x9f\x5f\xd2\x5d\x93\x47\x0d\xac\x9c\xbe\xf9\x74\xd1\x9a\x34\x82\x6d\xe3\x09\x90\x58\x4c\x80\x7b\xca\xcf\x71\x07\xdb\x35\x7a\xf6\xd3\x93\x72\x83\xa0\x28\xe6\xeb\x0e\x19\x9d\x32\xca\x65\x49\x19\x59\x06\x45\x19\x7d\x40\x10\x65\x0f\xb5\xd7\x3d\x0a\xb7\xba\x7d\x52\x65\xa9\x33\x2f\x41\x56\x54\xf3\x5b\xab\xe4\x6c\x9a\x73\x0e\xa1\x81\x6b\xc8\x88\x3e\x15\xf7\xbd\x5b\x74\xcd\xdc\xf7\xbc\xbe\x4d\xde\xf4\xb5\xbf\xb7\x2b\xd4\x08\x5c\x64\x34\xd6\xd7\x63\x7f\xbd\xe5\x06\x5f\x58\x61\x00\x9f\x3f\x93\xb5\xeb\x52\x36\xf1\x22\x1f\x50\x28\x0f\xbb\x93\x7f\x4a\x16\x9a\xda\x03\x96\x21\x00\xf4\xc6\x14\xf6\x91\x74\xca\x51\xc4\x92\xcb\x76\x40\x1e\x30\xc6\x66\x94\x19\xd9\xda\x6b\xe4\x6e\xd2\x8c\xa6\x6d\x01\xca\xa2\xdb\x82\x24\xba\xe3\xae\x4c\x4c\xc8\xa6\x96\x18\xbe\xf7\xcb\x17\x7a\xef\x0b\x89\x41\x5c\xd0\x0d\x5e\x42\xfe\xe7\xed\xf5\x47\x6f\xe4\x25\xb4\x50\xe0\xa7\xa6\x34\x26\x91\x59\xcc\xff\x2c\xac\xab\xc6\xfa\x8b\xe0\x84\x1b\x50\xc0\x06\x95\xb3\xac\x70\x55\x78\x9b\x61\x58\x96\x72\x81\x2f\xf9\x9b\x2a\xed\x91\x36\x99\xfa\xe2\x45\xad\x08\x71\xf3\x85\x90\x45\xa1\x64\xd9\x88\x46\x60\xc2\x4b\xca\xc8\x00\x83\x77\x22\xab\x15\x5a\xbf\xf0\xf4\x54\x42\x0d\x97\xd6\x9c\x0e\xc4\x35\xe9\x51\x70\x17\x5e\x20\x06\xda\x9d\xde\x1b\x21\xee\xe1\xcc\x7e\xdf\xa3\x50\x17\xce\x58\xf8\x91\xcf\x03\x84\x27\xe1\x29\xc4\x07\x21\xf2\xf1\xb7\xe3\xbf\x0f\x36\x68\x01\x13\xc4\x71\xf0\x21\x9c\x43\x4d\x74\xb3\xba\xed\xa4\x00\x30\x85\x94\xfe\x01\x93\xc0\x85\x4c\x71\x78\xa1\x3c\x06\xa7\xab\x48\x77\xa4\x89\x5c\xbf\x04\x1c\xda\x8a\x44\xf4\x97\x8a\xd5\x55\x83\x7a\xb1\xf4\xdc\xf9\x20\x70\xbe\xca\xba\x6b\x5c\x66\x22\x18\x64\x38\x08\x50\x11\x11\xb7\x20\x6e\xa7\x0f\xc3\x5f\x92\x44\xb9\x34\x5f\xc9\xb2\xb4\x48\x1f\xef\x10\x19\x81\x3d\x00\xb1\x10\xa4\x1a\xc2\x0e\x96\xe2\x36\x25\xb9\x08\x47\x85\x39\xa0\x46\xc2\x0e\x4b\x39\xca\x5a\xc1\x1d\x4a\xeb\x4a\xd1\x26\x99\x05\xa5\x12\x0e\x93\xc1\x32\xe4\x54\x59\x08\x61\x87\xd6\xfb\x69\xc6\x9e\x74\xae\x9e\x91\x30\xf1\x76\x66\xb8\x8b\x17\x17\x23\xa5\xb0\x3a\x47\x3f\x00\x4d\xb8\x93\x0d\xe8\x36\x60\x8b\xaf\x38\x1c\xe3\xf6\x27\xd2\x13\x4e\xaa\x44\x5e\x0c\xfa\x74\x5d\x86\x39\x4e\x22\x4f\x2e\x0a\xe6\x18\x1f\x4f\xaf\xa2\x28\xe2\x6f\x87\x6d\xaa\x8c\xc4\xce\x37\xaa\xf9\x93\xe8\x9f\x35\x15\xb6\xef\x62\x21\xc5\x30\xe7\x6d\x19\xdf\xf5\xee\x64\x54\xa4\x2f\xb9\x45\x89\xc5\x3b\x2e\x66\xbd\x7b\xa7\xe2\xda\x20\xec\x24\xc6\x71\xf0\x70\x04\x00\xea\x14\x4a\xcf\x29\x49\xa1\x0b\x7f\x76\xf8\x2e\x7c\xba\x21\xed\x73\xe7\xe9\x10\x07\x9c\xd4\x8d\x22\x2f\x94\x7e\x86\xe6\xc9\xf5\x83\x6e\x12\xa6\xce\xc9\x0e\x57\x88\xe7\xaa\x5c\x00\x98\x78\x65\xe6\xdd\xe5\x38\xe2\x87\xfb\x8d\x14\xaa\xae\x9a\x31\xc1\x04\x8e\x59\xba\x98\xe7\x9b\x0d\xc4\xad\xff\x80\x64\xb3\xe0\xd9\x0b\xb1\xcd\xe9\x39\x0b\x83\xca\xf2\x91\x20\x8e\xe0\x62\xa8\x94\x90\x58\xab\xe1\x28\x01\x91\x50\x43\x55\x53\x45\x85\x36\xa7\x76\x8e\x19\x5b\x95\x15\x73\xa9\xab\x30\x4a\xf9\xc8\xa7\xc5\x76\xf3\x1b\x1e\xf2\x9f\x77\x98\x73\xd9\xe0\x55\x9f\x29\xa6\xe3\xad\xf8\x54\xff\x4c\x57\x7b\x77\xc6\x3d\x27\xdb\x4b\x31\x2f\xbd\xb1\x55\x0a\x09\x51\x2d\x84\x2f\x63\xde\x3d\xbc\x0c\xd5\xed\x75\xa1\x5e\xf9\x4c\x96\x6e\x0a\xc4\xef\xfe\x53\xfc\x32\xfc\x70\x05\x3a\xc1\x9b\x89\x03\x21\xfe\x8a\xad\xa1\x7d\x17\xbc\xf8\x63\xa0\x0e\x34\x0b\x9e\xd2\xb1\x1c\x55\x16\xf3\xc3\xa7\x36\x4b\x08\x8e\x60\x29\x16\x72\xf4\x28\x27\x7e\x37\x8d\x55\xd9\x41\xfa\xb0\x53\x7a\xff\x5f\x81\x10\xef\xa9\x93\x0f\x0e\x7e\x6e\xb2\x92\xd1\x17\x56\x4f\xcc\xae\x87\x08\x8b\x44\x20\x3d\xe7\x0f\x86\x6b\x7d\xbe\xb6\xe4\x02\xa6\xdf\x57\x50\x0d\x08\x0d\x36\xea\x1f\xbc\x95\x74\xe7\x35\xb2\x76\x62\x08\x85\x68\x6c\x29\x3e\x10\x02\x03\xab\xeb\x19\x35\x47\x00\x7d\x33\xf1\x67\xd0\x7e\x1c\x09\xad\xe9\xa1\x8e\x07\xd2\x2a\x49\xbc\xc9\x02\x89\x66\xbb\xb1\x0b\xbf\x69\x4f\xc5\x1f\xa2\x07\xb5\x54\x5e\xf8\x82\x4b\xeb\xdf\xc9\x47\x0a\xd2\x15\x76\x33\xe4\x91\x38\x65\x1c\xd8\xcf\x4d\xaf\xbb\x97\xd4\xea\x4b\xb5\xb5\xff\xa9\xac\x0d\xac\xd9\x4f\x72\x7e\xc1\x14\xf6\x40\xa9\x01\xdf\xa4\x0b\xc5\xfb\xb2\xa3\x65\xb2\x70\x5e\x54\x55\x64\xe5\xf3\x2f\x2d\x29\xb2\x4d\x83\x6b\xeb\x89\x6c\xd7\xd0\xcb\xc6\xf4\x3a\xad\x3c\x57\xd3\x63\xd3\xee\x37\x7a\xe6\xc5\x9d\x6d\x5d\x3d\x64\xc3\x61\xaf\xe5\xee\xdf\xb8\x8d\xe5\xb2\x1d\xdf\xe0\xd1\x4d\x2b\x86\xac\x7d\x7e\x6d\xb9\x90\xcd\x06\xbd\xe9\x43\xcf\x16\x0a\x59\x39\xd0\x6d\xab\x84\x6c\x31\x84\xb5\xc5\x3d\x36\x7b\xff\x97\x35\xb1\x59\x71\x90\x2d\x1e\x5f\x53\xd5\x63\xb3\xf7\x78\x49\x03\x1b\xd6\x04\x59\xf9\xfc\xa6\x05\x41\xb6\x18\x40\xbb\x1a\xc8\x16\x8f\x6e\x50\xbe\x63\xb3\xa9\xdc\xa5\xa1\xad\x8a\x80\x6c\x36\x9c\x97\x34\xb0\x79\xf9\x8f\x0d\xc7\xb0\xed\xd3\x1b\x14\xfe\xe8\x34\x4b\x96\xac\xbc\xf4\x6a\xca\x06\x34\xb5\x79\x26\xe2\xa6\xf3\xa7\xb3\x40\xbd\xc4\xa5\x7c\x31\xa9\xc5\x52\xcd\x44\xed\xfa\x68\x5e\x71\x0e\x19\x9a\xef\x53\xe9\x44\xa3\x13\xe9\xc0\xab\x0b\xee\x1d\x6d\xc4\xc2\xd6\x65\x68\xba\x9f\x86\x9c\x81\x2c\x0a\xfd\x3d\x6c\x8b\xd2\xed\x21\x52\x8c\xf7\x0c\xc4\x2f\xb6\xc6\x54\x66\xce\x2a\x42\xed\xae\x4a\xbc\x9f\x39\x5a\x8b\xbc\x9e\x68\x8c\x32\xe2\xe0\xdf\xbe\x15\x97\xdc\x16\x19\xfd\xa7\x38\xb2\x0f\x8b\xe1\xcd\x25\x75\x4b\xd4\xfb\xff\x73\x6f\xee\x2b\x9e\x55\x6f\x7f\x02\x0d\xd7\x3f\x7e\x75\xd6\x9c\xde\xf7\xfa\xda\xe4\xda\xa8\xfb\xde\x3f\xfc\x6d\x1f\x16\x37\xd8\x17\xdf\x4f\x4d\xf1\xdd\x33\xba\x0e\xb7\x7f\xc5\x2e\xf1\x97\x61\xa3\xbb\x21\x7a\x8d\x39\x4a\xc9\x8f\x4b\xfc\x19\x9f\xa6\x17\xb9\xf8\xf2\xbb\xbc\x48\xe3\x5b\x7e\xc3\xd7\xb9\x46\xa7\xf5\x5c\x97\x94\x36\x0a\x61\x00\x70\x2d\xe6\xd6\x3e\x82\xf3\xa6\x9a\x22\x17\xef\x23\xae\xbf\x53\xec\xe4\x1e\x76\xcf\x7d\xef\xf4\xbe\x97\xbc\xfc\x7d\xaf\x8f\x17\x23\x0e\x02\x6e\x79\x3a\x09\x57\xe2\x5b\x70\x4b\x69\x5b\xf4\x3e\x7c\x77\x95\x0c\xfb\xf4\xbe\x37\xb6\x96\xae\x7c\xed\xd3\x4b\xdc\x5a\xf4\x8c\x12\xd3\xd3\x7f\x88\x73\x85\xb8\x00\xf0\xc3\x83\xeb\xd0\xbf\xbf\x3f\x48\x2d\xe4\x0c\x68\x49\x6a\x43\x87\x5b\x76\xdf\x72\x82\x2a\xc4\xdc\x81\x9d\xa5\xb1\x5f\xd2\xaf\x3b\x10\x77\x98\x00\x00\x2d\x83\xdf\x40\xce\x71\xd6\x28\xbd\x06\x48\xd6\x62\x69\xc9\xda\xf8\x95\xc2\x74\x82\x48\xa3\x5b\xa9\x82\x6a\xae\x8c\x6c\xb1\x10\x07\x48\x4a\x5b\x3c\x4e\xde\x22\x8c\xc3\x4f\xdb\x61\xa4\x89\x59\xda\x88\x40\xc0\x83\x2b\x85\xd7\xe1\x1b\xc7\xc0\xd1\xdb\xd1\x54\xcd\x90\x39\x20\xb6\x26\xc6\xb5\x19\x55\x24\x63\x5c\x25\x01\xb6\x86\xa2\x03\x3e\x36\x8e\x32\xae\x00\xa2\x8a\xd3\xa6\x21\x55\xfa\xa2\xaa\x4b\x80\x1b\xeb\x2a\x0e\x8f\x3d\x06\x9c\x20\xb1\x28\xd8\x7f\x5c\xd9\x32\xdc\x0c\xb7\xf2\x1c\x1e\xdc\x5d\x9f\x5f\x9f\x32\xe5\x0a\xd4\xb5\x47\xd6\xb2\x66\xe6\x32\x22\x5e\x6a\xf3\x68\xec\xdc\x70\xc3\x61\x8f\x7c\xa6\xdf\x5b\x99\x38\x23\x4e\x0c\xa0\x11\xa8\x6c\x70\xf8\xcc\xd9\xfd\x93\x9c\x2f\x9f\xd8\xfd\x8f\x5d\x82\x3c\x62\xe7\x33\x55\xe6\x90\x81\xd8\x08\x9b\xb5\x12\x46\xd6\xfa\x35\x1e\x16\xd5\x33\xd4\x8a\x75\xa5\xf3\x81\x36\x95\xab\xca\xc1\xa5\xa9\xae\x4b\x64\x00\xee\x2a\xfb\x12\x2e\x12\xc3\x1a\xc0\x26\x39\x5b\x05\x34\x0d\x56\xd1\x7f\xff\x0e\xb8\x67\x48\x3c\x0c\x04\x56\x54\x01\x95\xa4\x0d\x7e\x7e\x5b\xa2\xc7\x87\xf6\x49\x8e\xa5\xd4\xb3\xb8\x73\x72\xc8\x3d\xd5\x95\x28\x4a\x9b\xd5\x23\x05\x54\xe6\x23\x6b\x5c\x3d\x53\x9c\x47\x63\xc8\x27\xc0\x01\x29\x00\xf9\x23\x55\xb2\x57\x7d\x40\x95\x38\x6e\x32\x15\x41\xe7\xa8\xd7\xc2\xc8\x25\x14\x45\xa5\x64\x35\xdf\x0d\xf2\x0e\xac\x9d\x57\x6d\xaa\x23\x5b\x1e\x45\x87\xe9\xaa\xe9\xe5\x5a\x52\x97\x66\x6c\xbb\xe6\x74\x6c\x93\x6a\x00\x78\x2f\x56\x9b\x09\x51\x9d\x01\xb8\x2c\xe7\xea\x4d\x9e\x8b\xb9\x24\x64\xa2\x3f\xf3\xa2\xab\x18\x99\x9a\x93\xdb\x9f\x59\x8a\x33\xf9\xab\x2d\x7b\xfd\xde\x4c\x1b\xf8\xef\x44\x57\x11\xc4\x39\xd1\xd5\x99\x9d\xcd\x74\x85\x7f\xdf\x95\x4a\xdd\x56\xb2\x52\xbd\x7e\xef\xa1\xd6\x79\x76\x8e\x7f\x4f\x6c\x7c\x64\x64\x67\x85\xce\xc1\x25\x5a\xe4\xb2\xf2\xe3\x58\x5e\xea\xf1\xe1\x2e\xc6\x97\xd0\x44\xd7\xc5\x38\xa4\x15\x57\xe3\x20\x57\xdc\x90\xc0\xe5\x96\x2f\xdb\x75\x57\x71\xae\x3a\xaf\xc0\xec\x75\x5d\x09\x93\xd0\xc5\x7d\x1f\xd6\xc9\x63\xfd\xa0\x8e\xe4\x64\x52\xaa\x89\xac\x6c\x19\xdd\x8b\x6d\x97\xc6\xd3\xc9\x60\x78\x73\x79\x8b\xc9\xea\x9d\x88\x3f\xba\xd6\x72\x37\x62\xc8\x70\x29\x4f\xaa\x51\x54\x4b\x34\xd2\x80\x43\xd5\xae\x01\x98\xb3\xf7\xbd\x3d\x16\xf1\x5b\x63\x11\xf7\xa0\xb6\x1d\x40\x6d\x11\x6a\xb6\x43\xba\x68\xe4\xe8\xfd\xda\xef\xb9\x42\x8d\xba\x21\xeb\x09\x8f\x5f\x12\x6e\x07\x36\x4d\xcb\xf4\x3f\x90\x66\x0e\xef\x48\xbf\x10\x07\x13\x6e\xc5\x67\xbc\xd1\x2f\x93\x07\x7e\x68\x1b\x40\xb5\xc2\xe0\x33\x55\x6a\xa4\x00\xe9\x80\x19\x0d\x6f\x2e\xbf\xe9\x58\xb9\xf2\xd5\x76\x7e\xf3\xe7\x5c\xbc\x89\x70\x5c\x03\xd6\x7a\xd9\x90\xcf\x38\x25\x63\x9d\xdc\x0d\x37\x25\xd5\x48\x1a\x11\x11\x9c\x5a\x96\xd2\xc8\x8b\x18\x05\x32\xec\xbd\xcd\x22\x3f\xf4\x95\x97\x94\x6b\x2e\x5d\x75\x57\x4a\xe3\x60\x18\xdd\x61\xba\x2b\xe9\x2a\x0c\x8a\x51\x2a\x37\x8d\xb9\x0a\xcf\x71\x4a\x99\x35\x21\xb4\x0c\xb0\x5f\x08\xbd\xec\x06\xe6\x65\x7e\xbc\x95\x38\xa4\x9f\x9a\x28\x24\xba\x2f\x25\xd7\x0a\x40\x0c\x58\xad\x50\x98\x2f\x0e\x7d\x2b\x80\xd1\x67\xc8\x48\xed\xfb\xf7\x3c\x9a\xdb\x32\xeb\x47\x11\xc6\xf0\x65\x66\xd4\x0b\xd3\xf4\xc6\x6d\xd4\xe5\x33\xdb\x50\xbb\x25\x44\x6d\xd2\x07\x08\x58\x2f\x5d\xef\x20\xbb\xed\x07\x99\x3b\xd5\x17\x74\x04\xe9\xe6\x7a\xa7\xc0\x54\x2b\x20\x4b\x11\xb5\x2a\xa1\xa9\x6f\x76\xb4\x36\x06\xfc\xb2\x9d\x72\xa5\x5d\x57\x59\xac\xc6\xf5\x26\x7f\x55\xb2\x25\xd6\xa4\x3e\xa4\xbb\x00\x51\x31\xdb\x26\x77\xee\x6d\x90\x67\x6c\x90\x36\x11\xe3\x56\x20\xa4\x17\x9a\xb1\x5f\xf7\xb6\xcf\x3f\xdf\xf6\x89\x20\xf7\x6f\xa6\x92\x41\x2c\xbc\xba\x5a\xbe\xed\x34\xd3\x9a\xd7\x77\x37\xd8\x88\xdd\x0d\xbe\x26\x30\x50\x22\x7e\x05\xb1\x4e\x90\x4d\xbf\xb0\x35\x72\xae\x51\x15\xd6\x4c\x63\xae\x73\x12\xb6\xf3\xa2\x06\xff\xdc\xe0\x64\xee\x82\x1d\x03\x33\x7d\x53\x6a\x5b\xea\x6a\xf1\x41\x1b\x3d\xab\x67\x71\x1e\xf9\x42\x47\x1a\xa0\xfc\x73\x6d\xb2\xbc\x43\x2b\x9c\x0d\xf1\x0a\xee\xad\x9b\x8b\x0f\x00\x0c\xcf\x54\x26\xce\x86\xe2\x01\x2f\x25\xde\xba\x84\x8e\x8d\x38\x41\x55\xd3\x44\x7c\x83\xf9\x7a\x00\x40\x8f\xaf\x0b\x20\xdc\xda\x24\xb0\x30\xa2\xd9\xab\x4a\x7f\xc8\x2c\xad\xad\x1c\xc3\x98\x63\xc1\x00\x3f\x87\xbe\xb7\x0d\x1c\x59\x2b\x81\x8c\x70\xae\x65\xb5\x17\x8b\x61\x83\x47\x27\xc9\x2e\x84\x8c\xc0\xce\x3d\xd5\x39\xe5\xdd\xdd\xa4\x77\x99\x7a\xc6\xbd\x16\xf4\x33\xf6\x87\xfd\x93\xae\x00\x72\x16\x59\x89\x5c\x49\x57\x0d\xc4\x4f\x7a\x32\x55\x65\x7c\x60\xa6\xa4\x49\xb0\x4b\x13\x7e\x97\x02\x52\xac\xcb\x26\x05\x0c\xd4\x73\xcd\xed\x3c\x6d\xc0\x1a\xaf\x34\x3e\x5a\x76\x07\x21\x5c\x86\xe3\x3b\x41\xbd\x61\xc3\x33\xa8\xdb\x80\xdf\x68\x01\x80\x24\x31\xc5\x01\x75\xbe\x1d\x91\xb7\xb8\x1a\x70\xbd\x4c\x97\x36\xb5\x39\x0f\x74\xa2\xc0\xe3\x30\x6d\xbe\x14\x93\xcd\xea\x99\x2c\x17\xc2\xd9\x12\xf4\xff\x83\x74\x48\x4b\xb9\xd4\xd5\xac\x9e\xf5\xb1\x7a\x82\xca\xb0\x2d\x57\x31\x01\x68\x65\xe1\x85\x5d\x25\x0e\xde\x1d\x33\x94\xe8\xe4\xf8\x90\xa9\xde\xbc\x69\xd3\xd9\x0b\x82\xf9\x8a\xa9\x7c\x50\x58\x70\x6d\x64\x67\x85\x2c\xb5\x8b\x48\xf2\xb4\xde\x06\x6b\x7a\x71\xf0\x74\x32\x78\x90\xa1\x50\xf4\xd3\xc9\x60\x6c\xed\xa1\xf8\xab\x7a\x93\x45\x5c\x52\x2b\x74\x71\x2a\xfe\x40\x92\x50\x1c\x50\x86\x5c\x8c\xbb\x1d\xfa\xaf\x7f\xf2\xff\x8f\x8f\x8f\x41\xec\xdc\x48\x79\xab\x9c\x38\xb8\x2e\x94\xb9\x9d\xea\x71\xd5\x17\xe7\x4a\xfb\xbb\x80\x4d\x2b\x00\x9f\xc8\xe3\x4f\xbe\xed\x77\xc7\xc7\xc7\x6e\x33\x28\xa2\x36\x4e\x8d\xea\x52\xdd\x3e\xea\xe2\xee\xea\xf6\x2f\x5e\x0a\x75\x94\xe7\xba\xec\xba\x8d\xe5\x98\x13\x77\x57\xb7\x2b\x85\x19\xd1\xc1\x2d\xcb\xcf\x64\xb7\x45\x96\x41\x57\x95\xd6\x4c\x72\x68\x7b\x64\xeb\x52\x02\x4b\x11\xc4\xfb\x62\x12\x31\xbc\x64\x14\x54\xc8\xd2\xdb\xcd\xda\xe0\x56\xf9\xc3\xd8\xa6\xa4\x14\x5c\x26\x87\x48\x58\x85\xfc\xd5\x90\xd2\x19\x05\xda\x40\x88\x4b\x42\x99\xc6\x97\x02\x96\x18\x2f\xf5\xc5\x1f\xff\xf8\x9e\x09\xb2\x93\x2e\x80\x04\x1b\x33\x93\x69\x0b\x2b\x31\x95\x26\x03\x77\x36\x9f\x22\x82\x34\x0a\xd5\xf2\x1d\xde\xa4\x32\x50\x46\x39\x14\x93\x6c\xcf\x9b\x82\x7c\x61\xa2\xa8\xd7\xb3\xc2\xcf\x9d\xca\xbd\x9e\x0c\x6f\x63\xfc\x67\xcf\xa9\xad\x52\x8c\xa6\x52\x1b\x5a\x31\x81\x39\xe0\xb9\x83\xdb\x36\x1a\x98\x5e\xbc\xc1\xae\xf5\xb4\xca\xf4\xfe\x4b\x7c\x59\x9e\x84\x48\xba\xd8\x92\xc7\x03\xd1\x2c\x28\x80\xd1\xbc\xce\x4a\xab\x2d\x0d\xb8\xaa\x5b\xbe\x81\xe9\x3f\x70\x10\x20\x5e\x00\x25\x38\x8e\x9f\x3f\x7c\x15\xe0\xb0\xc5\x1a\x9a\x24\x2a\x07\x42\x30\xef\xdc\x04\x62\x3e\x25\xe6\x10\xfd\xa6\x4a\xfb\x8c\x7c\x6b\x8d\x63\x59\xb4\xad\x96\x69\xb7\x1a\x29\x62\xa1\xd0\x22\x8f\x49\xe2\x88\x88\x41\x1c\xc5\x22\xc1\x83\xdd\x4c\xe6\x79\x5f\x14\xa5\x7d\x90\x0f\xf9\x82\xa5\xc5\xc9\xb1\x03\x23\x15\x62\x5f\x76\x2c\xd4\x7f\xd7\x09\xe7\x18\x89\x69\xad\x88\x32\x9b\x7f\x27\xab\xbb\x6d\x04\x78\xb9\x59\x13\x20\x1b\x4b\xdc\xd0\xd0\x24\xcf\x14\x6d\x8e\x56\x3b\x58\x13\xda\xaf\x31\x2f\x22\xef\x7b\x91\x73\x1b\x66\x0c\x73\xf8\x8d\x35\xcd\xbb\x5a\xad\x38\x2e\x78\x25\xb9\xc0\x8e\xdf\x39\xea\x8b\x1e\xd9\x49\x29\x8b\x29\x93\x43\xde\xf7\x7e\x5e\x6e\x03\xd2\xb6\xcb\x8a\x6d\xbb\xfb\xde\x13\xd5\xa7\x36\xd0\xdc\xd8\x12\x31\x14\x30\xe6\xd1\xc4\x1e\x20\x83\xcc\xaf\x36\xe8\xd0\x43\x7a\x24\xe1\xe3\xc6\xa3\x3c\xbc\xe5\x7d\x0f\x94\x0c\xa7\x3b\x3e\xa8\xca\xff\x8d\xc5\x9c\x51\x15\x37\x1a\xd6\x26\x69\x18\xd6\x91\x53\x30\x18\x07\xf6\x25\x05\x96\x1f\x16\xe2\xc7\xa1\xb8\xaf\x8f\x8f\xdf\x2b\xe1\x9b\xe4\xbf\x91\x70\xf4\x00\xc3\x99\x3f\x0e\x51\xd4\xf1\x8c\xc1\x6b\x1a\xcb\xdc\xeb\xa0\xb5\x81\xd7\xb9\x92\x10\x93\xf3\xcf\x1e\xf6\x63\x29\x7c\x6f\x58\xa0\x4e\x34\x93\xe6\x2b\xd3\x1b\x37\x46\x8b\x74\x93\xb8\x4d\x79\xb4\x7c\xa0\xe7\xf9\x3e\x15\x4f\x27\xc7\x7d\xf1\xf4\xae\x2f\x9e\x4e\xfc\xff\x10\xc6\xe8\xff\x3a\xf6\x7f\xbd\xef\x8b\xa7\xf7\x80\x7b\xf1\x3f\x11\xec\x0d\xee\x83\x3f\xdf\xf5\xc5\xd8\xda\x13\xfc\xff\xe3\x8d\x90\xf7\x3b\x7b\x2f\x56\xd1\x39\xb4\xef\x78\x89\x23\xf5\xd9\x2a\xc0\x2b\x39\x61\xce\x02\xf3\x34\xea\x9b\xe8\x50\x2c\x34\x0d\xeb\xa5\xb9\x43\xbb\xba\x43\x9f\xa7\x55\x24\x97\xe5\x46\xbc\x8a\x2f\xfc\x7e\x4b\xea\x68\x95\x31\x10\xf9\xd0\xa6\x36\xcf\x96\x0c\x03\x9e\x4b\xaf\x5c\x47\x8b\x78\x9a\x5d\xff\xe5\xd6\xd0\x33\x91\xca\x4b\x2d\xcb\x78\xb4\x7b\x19\x31\x6c\xd2\x24\xfe\xf0\x5c\xbb\x2f\x9b\x53\xd8\x96\xfb\x78\xe3\xbf\xac\xaf\x6f\xef\x73\xdb\xc7\x1b\x77\x16\x0a\xdf\x7d\xd0\x71\x69\xc0\xbf\x73\xe4\x71\x19\xd4\xbb\xc3\xe0\xf7\x31\xc8\x7d\x0c\x72\x1f\x83\xdc\x78\xbb\xec\x03\x91\xff\x67\x8d\x93\xdf\x2b\x10\xb9\x64\xe4\xee\xa3\x91\xdf\x81\x65\xf4\xcf\x89\x46\xbe\xaa\xaa\xde\xc7\x25\xf7\x71\xc9\x7d\x5c\x72\x1f\x97\xdc\xc7\x25\xf7\x71\xc9\x7d\x5c\xf2\x77\x8b\x4b\xa2\x1a\xde\x07\x27\xf7\xc1\xc9\x7d\x70\x72\x1f\x9c\xfc\xd7\x08\x4e\xae\x70\x61\xee\x23\x94\x5b\x79\x4c\xbf\x87\x30\xe5\x0a\xed\xb4\x8f\x55\xa6\x9e\x3f\xb0\x9c\x46\xb5\x57\x46\xe7\x71\x2d\xf8\x4e\xfe\xac\x64\xa9\xca\x3b\xfb\xa8\x3a\xd4\x38\x5e\x14\x70\x55\x34\xa9\x91\x92\x65\x57\xe8\x9f\xd5\x82\x2b\x44\xb5\xd8\x8f\xfc\x72\xf4\x2d\x61\xc1\xf4\x5e\x3a\x10\x70\x32\x34\xba\xff\xdb\xdf\xbf\xfe\xfd\xeb\xff\x06\x00\x00\xff\xff\x28\xc1\x91\x6d\x7d\x30\x33\x00") func openapiJsonBytes() ([]byte, error) { return bindataRead( @@ -89,7 +89,7 @@ func openapiJson() (*asset, error) { return a, nil } -var _openapiPb = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x79\x9c\x1c\x57\x79\xef\x8f\xbf\xa6\x25\x4b\xf6\x09\x60\xe9\xc8\xc6\xb8\x6d\xd9\xa5\x9e\x19\x8d\xd4\x9a\xe9\x59\xb4\x8f\xd6\x69\x69\x64\xcf\x48\x96\xc6\x92\x6c\x87\xc5\xd8\x35\xdd\x35\x33\x85\xba\xbb\xda\x55\xd5\x23\x0f\x5c\x5f\xf6\x0b\xb9\xb9\x3f\xb6\xb0\x38\x31\x21\x06\x02\x5c\xf6\xfd\x72\x09\xb9\x21\x09\x10\xb3\x2f\xd7\xc9\x25\x09\x81\x40\xc2\x0d\x5b\x02\x09\x70\x81\x2c\xfc\xf8\xbe\xce\x39\xb5\x9c\xee\xa9\x9e\xea\xa5\xba\xa7\xd5\xf3\xf9\x07\xe4\xe9\xaa\x53\xa7\xce\x56\xcf\x79\x9f\xcf\xf3\x3c\x64\xdd\x58\x6a\x84\x5e\x47\xc8\xe9\xd2\xac\x66\x16\x34\x5b\xb3\xe8\x86\xc5\x91\xd4\x48\x6a\x24\xfd\xe8\xcf\x17\xe9\x67\x63\xe4\xaa\x61\xb5\xa8\x0f\xd3\x3f\x8e\xd1\xff\x15\x23\xeb\x33\x86\xa9\xc5\xe3\xf3\x9a\xad\xa8\x8b\xaa\x9e\x53\x67\x73\x9a\x32\x31\x33\xa5\x2c\x6a\xa6\xa5\x1b\x05\x2b\x49\xe7\x35\xfb\x84\x61\x6a\x13\x33\x53\x77\x3b\x7f\x1b\xdb\xa4\x16\x8b\x39\x3d\xa3\xda\xba\x51\x18\x7e\x96\x65\x14\xca\xff\xb2\xa4\xe6\x73\x63\xbd\xf2\x5f\x16\x0b\xd9\xd4\x25\xaf\x46\xa9\xa2\x69\xd8\xc6\x6c\x69\x6e\x7c\x59\x41\xe3\xcb\x0a\x1a\xaf\xa5\xa0\xe9\x1c\xb9\x93\xac\x1b\x1b\x19\xa1\xd3\xe4\x76\x12\x3b\x77\x9a\xa6\xc9\x71\x72\xb4\x77\x38\xab\xcd\xe9\x05\x9d\xdd\x6a\x0d\xeb\x46\xea\xd2\x01\x2b\xa5\x16\xf5\xbc\x9a\x59\xd0\x0b\x9a\xb9\x94\x2a\x5e\x9a\x67\x7f\xb0\x52\x79\xcd\x56\x53\x8b\xa3\x29\xe9\x35\xc9\x0d\x64\xdd\x9e\x91\x51\xba\x89\x3c\x89\x3c\xe1\xae\x82\x5a\xb2\x17\x0c\x53\x7f\xb6\x96\x3d\x7f\xd5\x82\x6d\x17\x2d\xfa\xe7\x31\x72\x35\x6f\xcc\xc5\xd1\x61\xfa\x58\x8c\x7e\x32\x46\x36\xb2\xf6\xbc\x6f\x71\x34\x7e\x43\x79\x93\x9a\x9a\x65\x94\xcc\x8c\x66\x25\xaf\x77\xda\xf3\xee\xd1\x89\x99\xa9\xf3\xee\x9f\x3b\xb0\x49\x8b\xe4\x2e\xd1\xa4\x67\xc9\x19\xde\xa4\xa7\xc8\x49\x92\x6e\xac\x49\xdd\xf7\x3c\xa3\x5b\x76\x68\xb3\x7e\x33\x41\x6e\x74\x9b\x35\x63\xe4\x8b\x46\x41\x2b\xd8\x96\xad\xda\x25\x4b\xb3\xe8\x9f\x26\xe8\x63\xeb\xfc\x76\xee\xcb\xe9\x96\xad\x18\xb3\xcf\xd2\x32\xb6\xa5\x18\x73\xca\x25\xbd\x90\x55\x4e\xb8\xb7\x5d\xe0\xb7\x25\x6f\x64\x57\x89\x56\xaf\xf8\x29\xb2\x86\x1f\xdb\x5a\x59\xd0\x21\xcb\x36\x35\x35\x7f\xe4\xb2\x6a\x67\x16\xc6\x46\x6a\x28\xa3\xec\x8e\xf1\x75\xc9\xe1\xe4\xf4\x2c\xb9\x4d\xf4\xc2\x71\x72\x94\xf7\xc2\x01\xb2\x8f\xec\xa9\xd6\x0b\x29\xd6\x2c\xac\xcd\x2b\xde\xb2\x96\x76\x7f\xd6\x2d\x64\xcb\x83\x43\x7e\xad\x86\xd4\x0c\x2b\x9e\x6e\xa4\x57\xb1\xd6\x23\xcf\xba\x93\xdc\x5a\xf6\xfb\xbc\x69\x94\x8a\x43\xce\x42\x31\xc4\xda\x9d\xa6\xe8\x20\xff\xeb\xb8\x92\x48\x10\xf6\x97\xf1\xca\xae\x20\xce\xf5\xe3\xca\xe2\x28\x99\xfe\xd1\x35\xe4\x1f\xaf\xa1\xdf\xbb\x26\xfe\x0f\xd7\xd0\xab\x1e\x28\x69\xe6\x52\xfc\xb1\x6b\x2e\x2e\x68\x4a\xc6\x28\xd8\x7a\xa1\xa4\x29\x46\x91\x55\x42\xb1\x16\x8c\x52\x2e\xab\xcc\x6a\x8a\xa5\xd9\xca\xe5\x05\xad\xa0\x98\x9a\x6d\xea\xda\xa2\x5e\x98\x57\xf2\x86\xc9\xa7\x58\x29\x67\x5b\xca\x9c\x69\xe4\x15\x7b\x81\x5d\x69\x2e\x6a\x66\x4a\xb9\xa0\x17\x32\x9a\x62\x2f\xe8\x96\xb2\xa8\xe6\x4a\x9a\xa2\x5b\xce\x6f\x0a\x6f\x45\x2d\x3b\xa8\x64\x72\x3a\x1b\x64\x4a\x5e\x5d\x52\x8c\x42\x6e\x49\x29\x59\x1a\x2f\xc4\xab\x88\xb8\x95\x17\xae\x2a\x45\x53\x5b\xd4\x8d\x92\xa5\xf0\x3a\x3b\x8f\x56\x2e\xeb\xf6\x82\xa2\x67\xb5\x82\xad\x67\xd4\x9c\xf3\x5b\x51\x35\xd5\xbc\x66\x6b\xa6\xa5\xec\xd0\x1e\xcc\x68\x45\x5b\x99\x33\x4c\x5e\xb6\x28\xd2\x98\xf3\x1e\xb2\x53\x51\x0b\x59\xa9\xee\xbc\x3a\xa6\xc6\xc6\xb6\xa2\x56\x56\x45\xb7\x95\xac\xa1\x59\x4a\xc1\xb0\x15\x53\xcb\x18\xf3\x05\xfd\xd9\x5a\x4a\x99\x9a\x13\x05\x14\xb5\x8c\x3e\xa7\x6b\xd9\x65\xb7\xb1\x3b\x94\x9c\x51\x98\xd7\x4c\xf6\x27\x3d\xcb\x9a\xd3\x5e\x60\xad\x51\xd2\x14\xdb\x50\xb4\x07\x8b\xba\xc9\xc7\xa9\xb2\x63\x5e\x2b\x68\xa6\x9a\xcb\x2d\x29\x73\xfa\x22\xff\x75\x4e\x9f\xb3\x35\xad\xa0\xe4\xf5\x42\xc9\xd6\xac\x9d\x8a\x61\x8a\xba\xcd\xe9\xf3\x25\xe7\xb6\xcc\x82\x5a\x98\xd7\x14\xa3\x20\xbd\xcb\xa0\xfc\x5e\x97\xf5\x5c\x8e\xb5\x5a\xd1\x28\x64\x45\xb3\xa9\xca\x9e\xd1\x11\xc5\x5d\x27\x26\x59\x15\xb4\xac\xa2\x99\x26\x6b\x2b\x63\x5e\x54\xd0\xb9\xd2\x7b\x23\xdb\xb8\xa4\x15\xbc\x57\x16\x7d\xa8\x14\x34\x2d\x6b\x89\xab\x2c\xdd\xb2\xd9\x9f\xd8\xf8\x1d\x64\x0d\x96\x2f\x59\xac\xb1\x2c\x5b\x35\x6d\x76\x8f\x6e\xf2\xdf\x78\xc1\x46\xc9\x2e\xef\xf1\x39\x5d\xcb\x65\x53\xca\x39\xf6\xe8\xcb\xba\xa5\x0d\xca\x4f\x61\x3d\x63\x69\x85\xac\xa2\x16\x0c\x5e\x37\x5e\x8e\xa9\x3d\x50\xd2\x9c\xf2\xf8\xd5\xbc\x86\xac\x7b\x34\x7d\x51\xcb\xfa\x7f\x67\x2f\xcb\x5f\x2e\xb4\x59\x78\xb9\xbc\xc2\x6c\xa4\x7b\x83\xbb\xa0\x3d\x68\x2b\x97\xb4\xa5\x41\x65\xb6\x64\xfb\x7f\xce\xa9\x36\x7b\xbe\x55\x50\x8b\xd6\x82\x61\x0f\x2a\x97\x17\xf4\xcc\x02\xeb\x74\xbd\x20\x35\x88\x77\xbd\x37\x90\x9d\xea\x8b\x29\x34\xe4\x2d\xa8\xf6\x82\x6a\x2b\xaa\xa9\x29\x19\x53\x53\x6d\x36\x53\xf2\x46\x96\x8f\xab\x41\xd6\xf1\x59\x2d\xa7\xd9\x5a\x56\x51\xe7\x6c\x4d\x8c\xe9\x39\xdd\xb4\xec\xca\xc6\xc8\xe5\xd8\xcc\xd5\x0b\x99\x5c\x29\xab\x65\x15\x5d\x8c\x0b\xf1\xa2\xac\x5d\x55\x8b\x0f\x48\xf6\xff\xa2\x53\x2e\x69\x4b\x16\x7f\xac\x5f\x70\xc2\x7d\xe3\x44\x8a\x90\x8b\x6c\x32\xf3\xfe\x11\xe3\xd9\x56\xac\x52\xb1\x68\x98\xac\x2e\x7c\x71\xe0\x2b\x28\xfb\xcd\x36\x4b\x5a\x4a\x39\x21\x4d\x6f\xd1\xf9\xaa\x73\x89\xd4\x72\xa2\x01\xf8\xf8\x73\x4c\x00\x67\xca\x98\x9a\x5d\x32\x0b\x5a\x56\x99\x5d\x92\x7b\x8b\xcd\x55\xf6\xe8\xbc\x6e\x59\x8a\x5a\x58\x72\x9a\x46\x2c\xf1\x56\x2a\x71\xb5\x3b\x92\xc6\x36\x58\xb6\xa9\x17\xe6\x1f\xed\xe9\x99\x7e\x49\x0f\x79\x51\x0f\x7d\x7e\x4f\xfc\xb9\xee\x82\xf7\x8c\x09\xc5\xd2\x72\x5a\xc6\xe6\x23\x9d\x8f\x4e\x53\xcf\x88\xb1\x28\x3e\x6e\x73\x7e\x0d\xdc\x7e\x11\x35\xd1\x4d\xd1\x08\x56\x4a\x39\xa9\xcd\xa9\xbc\xef\xd8\x04\x5e\xd4\xcc\x25\x7b\x41\x2f\xcc\xa7\x12\x4f\xe4\x17\x5c\x70\x1e\x20\xd7\xe4\x32\x29\x51\x2b\xfe\x80\x5b\x8d\x53\x6c\x16\x99\x25\x6d\x90\xad\x58\xb6\xce\xe7\x3c\xff\xc2\xa8\x39\xf6\x91\xf0\x2d\x18\xde\x2f\xd5\xfa\x32\x95\xb8\xce\xf9\xe9\xae\x82\x74\xf7\xd8\xc6\x59\xc3\xc8\x69\x6a\xa1\x15\x4d\x90\x53\x67\xb5\xdc\x4a\x4d\xc0\x2f\x08\x6a\x82\x7f\x23\xe4\xe7\x84\xfe\x94\xc4\xff\x85\xb8\x55\xf9\x73\x92\xd3\xf3\xba\xcd\x86\x8e\xaa\xe4\xd5\x07\xf5\x7c\x29\xaf\x14\x4a\xf9\x59\xcd\x14\xb5\x10\xef\x69\x89\x7a\xb2\x2a\xf1\xe5\xdc\x99\xa7\x19\x35\x97\xe3\xeb\x11\xff\x22\xe9\xb6\x96\xb7\x14\xed\x41\xbe\xfa\x54\x4e\x73\xf6\x1d\x63\x7f\xbb\xdf\x1d\x25\xf7\x3b\x03\xda\x59\x35\x79\x79\xcc\x84\xca\xaa\xb6\xca\x9e\xa6\x3a\xa3\x91\x4f\xc9\x8c\x5a\x60\x53\xaa\x64\xc9\x8b\x8a\xa5\xe6\x35\xb7\xcf\x9c\xaf\x8f\xa8\x25\xfb\x4e\x6a\xfe\xb2\xc1\x1e\x2d\xde\x85\x35\x57\x4a\xb9\xa0\xd9\x7c\x71\x61\x2f\xc1\xde\x5d\x7c\x75\xc4\xbb\x69\x97\xf9\xfc\x53\xdd\x6e\xe6\x53\x9a\xcd\xf8\xbc\x51\x2a\xf0\x62\xc4\x5b\xee\x28\x15\xd9\xc3\x9e\xad\x99\x86\xf8\xcb\x4e\x77\x68\x68\x8b\x6c\xc5\x51\xf9\xca\xe6\xde\xed\xf6\x21\x1b\x4a\x73\x7a\xce\xd6\xd8\x62\xcf\x16\x60\x36\xa7\xdc\x6f\xb1\xf3\xcd\x2f\xfb\x1c\x17\x4d\xcd\xd2\xd8\xe7\xdc\x98\x0b\x58\xac\x59\x0d\xb2\xec\x5b\x9b\xd7\x0b\x9a\xf7\x59\x2b\xb3\x0e\xf8\xa2\xe2\x9a\xe5\xec\xd5\x59\x8f\x88\x85\x21\xb3\x60\x18\x96\xc6\xa7\xb4\x6d\xb8\x0b\x8a\xd3\x17\xac\x59\x54\x73\xbe\x94\xe7\xef\xc2\x57\x67\xfe\x42\xbc\x91\xd8\xbb\x39\xf5\x29\xb3\xf8\x45\xeb\x4e\xcd\x29\xde\x90\xf2\xbf\xca\xee\x87\xbe\xe2\x05\x74\x4b\xd1\xf2\x45\x7b\xa9\xdc\x22\x51\x2d\xab\x94\x77\x7a\xbe\x60\xac\xf8\x42\x2b\xad\x8c\xfa\x5c\xc5\xba\xc8\x16\x52\x6f\x54\xce\x97\x54\x53\x2d\xd8\x9a\xe6\xac\xfa\xac\x76\x6e\x3f\x79\x93\x8f\x2f\xae\x25\x8b\x8d\x16\xaf\xe6\xde\xfa\xee\x59\x3e\xb6\xa1\xe8\x96\x55\x12\x63\x8a\x5d\x9c\xd3\xfc\xf9\xe1\x7d\x6c\xdd\xe1\x36\x24\x9e\xa7\x5b\x83\xec\xe5\xdc\x47\xd6\xf7\xc1\x71\xbf\x35\xec\x43\x67\x59\x25\x2d\x1b\xf8\xd5\x61\x8b\xb4\x55\x9a\xb5\xd8\xc5\x05\xdb\x7b\x83\xac\x7b\xbb\xe5\xb4\x1f\xeb\x29\x23\xaf\xd9\x7a\x5e\x63\xef\x3e\xa7\x99\x6c\x7c\xb2\x39\x58\x61\x58\xf8\xdf\x59\xd6\x9f\x5a\xc1\x2a\x99\x6e\xf3\xa9\xae\xa5\xe0\xbc\x9c\xd3\x6a\xe2\x95\xf9\xb4\xe4\x36\x81\x62\xe5\xd5\x5c\x4e\x33\x95\xcc\x42\xa9\x70\x89\xef\x60\x54\xb6\xf9\x5e\x52\x72\xaa\x39\xef\x76\x33\x9f\xef\xa2\x78\xf6\xd2\xcc\xf4\xd0\xf8\xb0\x2b\x1a\x96\xa5\xb3\xe1\xe6\x34\x1b\x1f\x6e\xf2\xec\x2a\x15\xb3\xac\x19\x95\x6c\xc9\x14\xdd\xc1\x9f\xa3\x65\x45\x7f\x70\x2b\xd4\xf9\xd6\x39\x23\x58\xdc\x2c\x6a\x7d\x59\xb5\x9c\x19\x67\x2b\xce\x88\x60\x6d\xb2\xfc\x43\x2f\xcc\x5f\xd5\x62\x1d\x9c\x29\xe5\xf8\x13\x75\x7f\xd8\xa4\x12\x57\xf1\xf7\x1e\xdb\xa8\x17\x6c\x6d\x5e\x33\xd9\xe2\x7b\x8e\xdc\x41\x4f\xc7\xa7\xdc\x85\x77\x68\x6a\x4e\x19\x60\xa3\x72\x80\xaf\x95\x62\xed\x30\x4a\x76\xb1\xc4\x5b\xaf\x68\x6a\xb6\xbd\xa4\x14\x4d\x56\x42\x36\x95\xd8\x20\xfe\x20\xaf\xe6\x8f\xaf\x23\x5f\x5e\x47\xbf\xb0\x2e\xfe\xd9\x75\x6e\xa1\xbf\xbf\xee\x1e\x56\x94\x3f\xed\x1c\xa3\x4a\x4c\x03\x36\x1a\x07\xd9\x32\x73\xd9\x72\x4c\x56\xa7\xef\x8c\x4c\xa6\x64\x7a\x63\x4c\xb5\xc5\x27\x91\xbd\x98\x29\x37\x97\xea\x7d\x14\xcb\x3f\x3e\x6e\x59\x9e\x6d\x31\xab\xcd\xeb\x85\x02\x6b\x7f\x63\x4e\x59\xd0\x2d\xdb\x30\x97\x52\x4a\x45\xd5\xd8\x67\x84\x35\xe7\xb8\x32\xc4\x66\x6a\xa9\x60\x69\xb6\xd4\x14\x4e\x23\x4b\xad\x2a\xca\x37\xb5\xbc\x61\x6b\x0a\x2b\x53\x9d\xd7\x94\x59\x95\x7d\x12\x8c\x82\xf2\x40\xc9\x30\x4b\xf9\x21\x53\x53\xb3\xca\x5c\x4e\x9d\x3f\x24\x8a\xd5\xed\x01\x4b\x19\x71\xca\xbd\xac\x29\x96\x9e\x2f\xe6\xbc\xe5\xfe\x32\xef\x75\x4d\xc9\x94\x4c\x53\x2b\xd8\xb9\x25\x65\x41\x5d\x64\x73\x48\xc9\xa8\x99\x05\x8d\x4f\x50\x6f\x9d\x70\x4a\xe4\x1f\x32\x43\x29\x18\x05\xbe\xfa\x07\x56\x59\xb5\x95\x9c\xc6\x0c\x2c\x95\xb5\x8a\x66\x2d\xb0\x7f\xcc\xeb\x8b\xcc\x36\x5e\x4c\x25\xae\xad\xb0\xbb\xe4\x5e\x7d\x43\x0f\x79\xa4\x87\x3e\xdc\x13\x7f\x4d\x8f\xdb\xab\xc5\x8b\x7a\x5e\x63\x2b\x88\xbb\x91\x62\xcd\x36\xec\xf7\xa9\x33\x8b\xf9\x90\xe3\x16\x25\x1b\xfd\x62\x67\xe2\x7e\x36\x78\xcf\x9b\xda\xbc\x6a\x66\x73\x9a\x25\xa6\x5d\x61\x49\x61\x5b\xde\x45\xdd\x5e\x62\x4b\x8d\x5e\x70\xff\x2b\x95\x78\x92\x2d\x9e\x78\x41\xcb\x18\x85\xac\x55\x36\x8e\xdf\xdf\x43\xde\xd3\x43\xdf\xd9\x13\xff\xef\x5e\x05\x7f\xb3\xe7\x1e\x61\x5c\x1a\xa6\x3f\xb0\x0c\x51\x13\xcd\xca\x98\xfa\x6c\xb9\x41\x55\xc8\xba\x1d\x60\x2f\x68\x79\xb1\xca\x08\x14\xc0\x2b\x96\xcd\x0e\x3a\xf3\x78\xd0\xb9\x36\x6f\x2c\xf2\x0f\x95\x64\x6e\x2a\x17\xf8\x48\x5a\xaa\xb4\x61\x53\x89\xab\x04\x80\x90\x4c\x30\xfa\xd6\xf5\x44\xa9\x8a\x58\x86\x9f\x53\x50\xf3\xda\x43\xf4\xf9\xeb\xe9\x8f\x24\xa2\x95\xe0\x43\xa9\x7c\x6f\xb9\x8c\xb3\xb0\x6b\x5a\xcb\x59\x04\x16\x79\x26\x39\x21\xb0\xc8\x61\x32\xce\xb1\xc8\x1e\x32\x46\x46\xea\xc5\x22\xa1\x48\x64\x6b\x30\x12\xd9\x40\xd7\xcf\x6b\xad\x21\x22\x87\xc9\x38\x3d\x90\xd8\x77\x75\x0f\x5d\x5f\x54\xed\x85\xf8\x4d\xac\x2f\xdc\x61\x5b\x71\x67\x62\x3d\xfb\x31\xe9\x4c\x96\x87\x5b\xb0\xa6\xd2\xbf\x4e\x10\xea\x0f\x14\xb6\xc7\xcf\xab\x45\x8b\x7e\x22\x41\x3f\x2d\x41\xb8\x01\x61\xa4\x9b\xce\xba\xba\x9c\xc6\xb1\x1b\xef\x50\x8b\xc9\x5e\x99\xc3\x39\x7f\x3c\x65\x98\x13\xb9\xdc\x59\x35\xaf\x59\x45\x35\x4a\x14\xda\x22\x22\xf7\x0c\x32\x21\x86\xde\x38\x39\xc0\x87\xde\x18\x19\x21\xa9\x1a\x86\x9e\xf3\xbe\x91\xb0\xb8\xd3\xe1\x23\x6f\x07\xdd\xbe\x7c\xe4\x39\x75\x00\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x6b\x17\x85\xfb\xab\x04\xd9\xec\xc2\x15\xad\x90\x2d\x1a\x7a\xc1\xae\x97\xad\x4c\xba\xf7\xc9\x6c\xc5\xfb\xe3\x1a\x61\x2b\xde\xfb\xae\x22\x5b\xf1\xea\x00\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\x02\xb6\xd2\x2e\xb6\xf2\x67\x09\xf2\x24\x8f\xad\xb0\xef\xb3\x45\x3f\x98\xa0\xff\x53\x02\x2b\xbd\x21\x60\x85\xdd\x94\xbc\x55\x82\x2a\xec\x0f\x57\x1a\x50\xf9\x75\x72\x44\x00\x95\x7d\x64\x0f\x07\x2a\x29\x32\x48\x92\xe1\x40\x85\xbd\x6b\x24\x30\xe5\xb6\x70\x98\xd2\x47\x13\xcb\x60\x0a\x7b\x3e\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x0a\x40\x4a\xbb\x40\xca\xdf\x26\xc8\x16\x17\xa4\xf0\x66\x32\x79\x25\xe9\x63\x09\xfa\x79\x89\xa6\xec\x58\x99\xa6\x9c\x61\x77\x9e\x67\x77\x26\xfb\x7c\xa4\xe2\xff\xf5\x4a\xe3\x2a\xf7\x92\xb4\xe0\x2a\x87\xc8\x41\xce\x55\x76\x93\x51\x32\x1c\xca\x55\xfc\x17\x8e\x04\xae\x9c\x09\x87\x2b\x3b\xe9\x40\x25\x5c\xf1\x2b\x01\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\x02\xc2\xd2\x2e\xc2\xf2\xce\x9d\x7e\x8c\x95\x82\x47\x40\xe8\xab\x77\xd2\x7f\x50\x6a\xf6\x03\xf2\xd0\x49\x72\x8b\xcf\x57\xbc\x3f\x76\x38\x4e\x49\x03\x3d\x00\x3d\x00\x3d\x00\x3d\xac\x19\xf4\x90\xee\x18\xf4\x10\x79\x4d\x1a\x26\x00\x69\x10\x00\x10\x00\x10\x00\x10\x00\x10\x80\xf6\x13\x80\x34\x36\xec\x5d\xb8\x61\x4f\x77\xfa\x86\x3d\x7d\x05\x6e\xd8\x1b\x8d\x52\xe1\xed\xc6\x57\x31\x4a\x85\x57\x87\xb2\xa3\xff\xc4\xff\xda\xe0\x83\x06\x2a\x96\x7a\x45\x95\x98\xc2\xf5\xe2\x6f\xad\xa2\x0a\x02\x02\x1c\x27\x47\xc9\x61\xba\x7e\xd6\xc8\x2e\xc5\xf9\xff\x2a\x3d\xc9\x5a\x9c\x55\xbc\xfa\xa4\xdf\x10\x23\x8f\xc4\xe8\xc3\xb1\xf8\x6b\x62\xee\x60\xfa\x45\x0f\x5f\x28\x9c\x65\x73\x50\xd1\x0b\x59\x56\x19\x77\xad\x2a\x33\xd5\x5d\x13\x87\x7d\xa6\x67\x35\xa5\xc8\x5a\x88\xd9\x47\x29\x65\xa2\xa0\xe8\x05\xb1\x49\x36\x4c\xa5\x54\xf0\xf6\xd9\x59\x25\x6b\x2e\x9d\x2f\x15\x94\xac\x6e\x6a\x6c\xc0\x6b\xde\xe6\x8d\x4f\x5e\xf6\x91\x73\x76\xaf\xae\xad\xea\xec\x17\x94\xb9\x92\xc9\xed\xa1\xa2\x69\x64\x34\xcb\x72\xd6\x37\xc9\xac\x4b\x29\x77\xf3\x27\x72\x3b\x93\x7f\x3e\xd8\xe2\x36\x91\xcb\x8d\xf3\x6f\x4d\xd6\x5c\x52\xcc\x52\x81\xed\x63\xd8\x0c\x71\x3f\xb0\x4e\x71\x5a\x36\xb1\x41\x54\x4d\xe6\x77\xdf\xea\x69\xcc\x1f\xc8\x1f\x36\x5c\xf6\x32\xca\x65\x2f\x1b\x4f\x08\x9b\xa0\xee\x32\x78\xe8\xe6\x31\x1e\xba\xf9\xea\x89\x4c\x46\x2b\x36\x52\x48\xe3\xf3\xa7\x68\x44\x3d\x7f\xa6\x5f\xd7\x43\x5e\xdd\x43\x5f\xd9\x13\x7f\x99\xb7\x8a\x65\xa6\xe6\x94\xa9\x80\xd3\xd7\x32\xbb\x73\x50\xfe\xc6\x33\xd3\x72\x56\xda\x65\xba\x86\x59\xc6\xc8\x17\x73\x1a\xdf\x12\x78\xe5\xf0\x01\x5b\xcb\xf9\x6e\xe4\x11\xa1\x3f\x7c\x0d\x19\x58\x4e\x2b\x45\xcc\x70\xfe\xef\x87\x86\x67\xd9\x24\x2b\xcc\x5b\xf4\x37\xae\x49\x3c\xbc\xde\x5f\x59\x36\x79\x2b\x4b\x5a\x5c\x91\xdc\x1a\xb8\xae\x64\x9d\x9f\x23\x5e\x5f\x8e\x92\xc3\x64\xbc\x62\x7d\x49\x92\x1d\xa1\x63\xce\xa9\xcd\xf4\xd7\x7a\xc8\x21\x31\x79\xf6\x90\x31\x3e\x79\x06\x49\x1d\xf7\x93\xe3\x62\xea\x1c\x24\xfb\xfd\xa9\x53\x5f\x09\x13\x62\xe2\xb0\xcf\x8e\x3f\x71\xea\x2b\xa2\xd9\x69\x33\x15\x3e\x6d\xb6\xd3\xbe\xca\x69\xe3\x3e\xbd\x6c\xd2\x60\xb5\x0e\x59\xad\x3b\x77\x55\xb9\x9f\x3c\x93\x3e\x23\xf1\x34\x2f\x4a\xfd\xb8\xf3\x30\x1e\xac\x9e\xb5\x18\x1b\x58\x8a\x95\x31\x8a\xda\xa0\x62\x95\x32\xdc\x62\xe5\xf6\xa6\xa6\xe6\x85\xc9\x56\x34\x0d\xbe\x2d\x4a\x5c\xe3\xad\x1c\x2d\x8d\x64\xff\xf8\x34\xd9\x19\xb2\x6e\x49\x01\xee\xdf\x32\x4d\xff\xb9\xf6\xc3\x17\x3f\xc0\xfd\xd6\x80\xc3\x97\xac\xf7\x33\x8e\x61\x70\x0c\x83\x63\x18\x1c\xc3\xe0\x18\x06\xc7\x30\x38\x86\xc1\x31\x0c\x8e\x61\x70\x0c\x83\x63\x18\x1c\xc3\xe0\x18\x06\xc7\x30\x38\x86\x69\xd3\x31\x4c\xe7\x26\x62\x4b\x3c\x16\x78\x0c\xe3\xd3\x85\x5b\x83\x71\x69\xf4\x7c\xa1\xb9\x03\x19\xaf\x3e\x38\x90\x69\xd5\x81\x8c\x3f\x80\x1a\x3f\x90\xf1\xcb\x68\xe2\x40\xc6\x2f\x64\x75\x0e\x64\x82\x67\x52\xf2\xa3\x12\xbc\xbb\x45\x98\x47\x4a\xc6\xc8\xb1\xcd\x8e\xb3\x82\xfa\xb3\x6a\xa7\xf8\xdd\x4d\x4b\xe9\x5e\xd4\xfa\xf9\x05\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\x06\xdc\xd6\x79\xb8\x6d\x9e\x9c\x11\xa4\x62\x92\x9c\xe0\xa4\xe2\x08\x39\x44\x0e\x56\x03\x04\x79\x35\xb3\xa0\x17\x34\x73\x29\x55\xbc\x34\xcf\xfe\x60\xa5\x98\x1d\x91\x5a\x1c\x4d\x5d\xb0\x55\xbb\x64\x85\xf2\x82\x64\x30\x2f\xd8\x42\x37\x8b\xf5\xd7\xdf\xce\x47\xcb\x0e\x56\x2f\x16\xcf\x15\xa8\xaa\xfa\x52\x2f\x19\xa9\x59\x55\x25\xfe\xfc\x10\xfd\x9d\x5e\xfa\x97\x92\x2c\xf4\x66\xbe\xde\x94\x6f\xdb\x25\x45\x15\xfb\xb5\x5d\xc4\xf3\xb9\xe4\x21\xfa\x9c\xf8\x92\xdb\x3e\xf7\x5e\x10\xd6\x1f\xb7\x20\x1f\xe4\x96\xd8\x2c\xfb\x97\x9a\xb1\x53\x8a\x32\xc9\xfe\xdf\xfd\x7b\x5e\xd5\x0b\xb6\xaa\x17\x2c\x25\x93\x2b\x59\xb6\x66\x0e\x39\x2f\x93\x71\x36\x29\x4a\x4e\xbf\xa4\x29\x03\xde\x3b\x0c\xa4\x12\x57\xf1\x92\xe4\x21\x90\xb6\x89\x49\x8b\xf1\x82\x5b\x81\x3b\xbd\x0a\x78\xf8\x66\xd6\xad\x8a\x96\xe5\x75\xe0\x4f\x67\x1d\x52\xb4\xdc\x27\x39\x9f\xfe\x92\xc5\xbe\xe8\x6a\x41\x18\x60\x62\xa6\xa7\x12\x1b\xc4\xdd\x65\x03\xaf\xc1\x2c\x11\xb5\xb3\xbf\xad\xc1\x73\x79\x03\x5d\x3f\xaf\x45\x8c\xfe\xe2\x2f\x97\x20\xfa\xad\xa6\x56\xcc\xa9\x19\xad\xea\xe8\x52\x9c\x0b\x80\xd4\xbb\x06\xa9\xbf\xbe\x23\x90\x7a\xe3\x33\xa2\x58\x8a\x1a\x86\xff\xf2\x5a\xe9\x58\xc9\x81\xe1\x65\xc7\x4a\x32\x00\x6f\xfd\x1c\xb8\x48\xce\x93\x19\x79\x0e\x24\xd3\xe4\x78\x03\x76\xc4\x49\x5e\xeb\x73\x1c\x91\x5b\x98\x17\x21\xf3\x22\xfd\xed\x18\xf9\x56\x8c\x7e\x23\x16\xff\x9a\xd7\x40\xef\x8f\x5d\x94\x0d\x5d\xbd\xa0\x58\xc2\x58\x55\x66\xb5\x39\x43\x6c\xf3\xdc\xbd\x98\x7f\x06\xe1\x6c\x7f\x79\x15\x4b\x9a\xa0\xca\xb3\xcc\xb4\x2c\x0c\x15\xb4\x79\x95\x37\x84\x63\xeb\x32\xab\xda\x45\xef\x82\xca\x78\x5d\xe0\x8c\x43\x3d\x9f\xd7\xb2\xba\x6a\x6b\xb9\x25\x07\x65\xcb\x07\x15\x05\x3d\x37\xe8\x98\xc0\x7c\xab\xa4\xcc\x9b\x6c\x35\x2f\x6a\xa6\x6e\x64\x3d\x53\xde\x5f\xd8\xed\xa5\xa2\x8f\x02\x4a\x16\xab\xa4\xbc\xc9\x52\xd9\x9d\xee\x0b\x39\x0f\x99\x93\x3e\x8f\x3a\xbb\x81\xd7\x33\xaf\xa9\x85\xc0\x3a\x26\x28\xaf\xc2\x0c\xaf\x41\x90\x69\xff\x95\x18\xf9\x62\x8c\x7e\x2e\x16\xff\xb4\xd7\xcc\x8f\xc6\x4e\x6a\x45\x53\x63\xef\x9d\x1d\x57\x8a\x6c\x57\xa3\x79\x30\x69\xc6\x34\x8a\xea\x3c\xef\x80\x19\x23\xa7\x67\x96\x06\x45\x1b\x08\x7c\xe2\xbe\x4b\xd6\x2b\x80\xf5\xd2\x68\x6a\x7f\x4a\x91\x6c\x93\xac\x56\xd4\x0a\x59\xb6\x41\xf6\xb8\xa4\xa6\x18\x66\x71\x41\x65\xfb\x5e\xc5\x31\x60\x87\xe7\xd4\x9c\xcb\xf1\x13\xe2\xd7\x84\x32\xa7\x17\xb8\x25\x6a\x7a\x8f\x52\xb3\x59\xce\x19\x86\xc5\x96\x21\xeb\x6f\x49\x45\xe1\x03\x96\x7f\x93\x20\xe7\x29\x65\x52\xe7\xc3\x59\xaa\xb8\x61\x2e\x7f\x33\xd7\x17\x81\x6f\x52\x67\x4b\xb6\x98\x6c\x86\xbd\x90\x4a\x6c\x12\xf5\x39\xe9\xbe\x88\x55\x66\x15\xbd\x74\x3d\x79\xf1\x7a\xfa\x82\xf5\xf1\x5f\x79\xbb\xf4\xaf\xb2\x5d\x3a\x7f\x28\x9b\x52\x0b\xc6\x65\x65\x5e\x35\x67\xd9\x6e\x56\x3a\xe6\xf3\xe6\x85\x66\xce\x19\x66\x9e\xb5\x45\x60\x4d\xcf\x55\x3c\xbc\x7a\x45\xf9\x78\x76\x07\x63\x51\xbc\x95\xce\x06\x4a\x46\xcf\xfa\x88\x9c\xd3\x56\x7e\x60\xe1\xb5\x2e\xdb\xf1\x3a\x5b\x02\x97\xa7\xa6\xa4\x66\x74\x49\x9c\xbb\x99\xf0\xad\xc7\xf2\x87\xa5\x14\x71\x3e\xcb\xe9\x9e\xbc\x38\x0c\x88\x77\x18\x50\x86\x9c\x8e\x2f\x1f\x18\xd6\x21\x65\x20\xad\x66\x2e\xb1\x2f\x46\x21\xcb\xae\x52\x73\x39\xe3\x32\xbf\xa8\xa2\xe1\x04\xfe\x76\x86\x7e\x79\x21\xee\x1b\xcc\x7a\x25\x1d\x52\x06\x4e\x19\xa6\x26\x15\xab\x64\x54\x2b\xa3\x66\xd9\xdb\x3b\xed\xc3\x17\x5b\x51\x9e\x25\x56\xaf\x65\x05\xce\x79\x65\xa4\x12\x9b\x8b\x95\xe3\x46\xfe\xba\x7f\xac\x27\xe2\x6d\xe8\x79\x71\xf6\x7d\x9a\x4c\x49\x67\xdf\x2d\xde\xda\x2a\xc1\x1f\xff\x6b\xe8\x46\xd1\x4c\xd1\x7e\xff\xd3\x1f\x97\x2c\xe2\x1d\xfe\x26\x56\xe0\x81\xaa\xa6\xf1\x2d\x45\xd5\xce\x2c\xb4\xc1\x28\xb8\xa9\xb2\xa0\x21\xfe\xe4\x5d\xec\x9f\xe3\x37\xcb\x3f\xe6\x35\x73\x5e\x93\x7f\xdd\x2e\xff\x6a\xd9\xa6\x6a\x6b\xf3\x7a\x66\xa8\xf2\xba\xf4\x59\x72\x86\x4c\x57\x98\xdd\xe3\xe4\x40\x03\x3d\x3c\xc3\x0a\x85\xb1\x11\x66\x84\xb7\x7c\x47\x79\x6b\xf0\x14\xba\x9a\x6e\xe0\xdd\x1e\x31\x12\xda\x47\xf6\xd0\xb1\xc4\x88\x47\x66\xae\xe7\x48\xc6\x69\x45\xef\x9e\xc4\x7a\xf6\x67\x99\xb7\x5c\x81\x44\xe7\xcb\xd3\x64\x47\x08\xd1\xd1\x0a\xd9\xa2\xa1\x17\x6c\x8b\xbe\xb9\x2e\x37\xb9\x49\xf7\xbe\x60\x37\x39\xef\x67\xb8\xc9\x41\xb7\x03\xdd\x0e\x74\x3b\xd0\xed\x40\xb7\x03\xdd\x0e\x74\x3b\xd0\xed\x40\xb7\x03\xdd\x0e\x74\x3b\xd0\xed\x40\xb7\x03\xdd\x4e\x9b\xdc\xe4\xbc\xdd\xf8\x2a\xba\xc9\x79\x75\x28\x77\x93\xfb\xd4\x86\xe5\x31\xc5\x7c\xb6\x50\xc5\x49\x2e\x7a\xba\xd0\xdc\x89\xbe\x57\x1f\xc0\xc4\x56\x39\xc9\xf9\xc3\xa7\xf1\x13\x7d\xbf\x8c\x26\x9c\xe4\xfc\x42\x56\xc7\x49\x2e\x78\x1e\xd5\xe0\x24\xe7\xcf\xaa\x50\x27\xb9\x56\xcd\x2f\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\x36\xc0\xb6\xce\x83\x6d\xdd\xe7\x24\x17\xcc\x0e\xe0\x24\x57\x87\xa4\xea\xf3\xbd\x64\xb8\x56\x49\x95\xeb\x23\xf7\x70\xb8\x8f\x9c\x24\xa7\x0a\xf2\x91\x6b\x15\x90\x81\x8f\x5c\x63\x0c\x72\x55\x7c\xe4\x82\x67\x6f\x2d\x3e\x72\xfe\xe8\xaa\xe6\x23\x07\xa2\x7e\xc5\x12\xf5\x46\x7d\xe4\xa2\x25\xea\xab\xe2\x23\x57\x85\x85\xff\xbb\xe4\x23\xb7\xc9\x61\xe1\xd2\x99\x52\xb0\x87\x5c\xab\x66\x00\x3c\xe4\xe0\x21\x07\x0f\x39\x78\xc8\xc1\x43\x0e\x1e\x72\xf0\x90\x8b\xd2\x43\x2e\xf8\xeb\x5f\x97\x87\x9c\x6f\x15\x04\x7b\xc8\xb5\xc0\x28\x80\x87\x5c\xd7\x19\x1b\xad\xdf\x4f\xb6\xc8\x43\xae\x0a\x0f\x5a\xd1\x43\xce\xbb\xa7\x2b\x3c\xe4\x1e\x9e\x26\xfd\x61\x38\x67\x91\xad\xdd\xf4\x87\x53\xf4\x9b\x92\xc6\xa6\x37\xc4\x3d\x8e\xdd\x94\xbc\x31\xd0\x35\x8e\xfd\x04\xb7\x38\x28\x75\xa0\xd4\x81\x52\x07\x4a\x1d\x28\x75\xa0\xd4\x81\x52\x07\x4a\x1d\x28\x75\xa0\xd4\x81\x52\x07\x4a\x1d\x28\x75\xa0\xd4\xa9\x57\xa9\xd3\x28\x7f\x61\x5f\xde\x48\x5c\xe2\x6e\x0b\xc7\x2f\x7d\x34\xb1\x0c\xbf\xb0\xe7\x97\xbb\xc3\xbd\x4b\x82\x97\xd7\xba\x59\xe3\x0a\x0e\x4e\xb8\xa9\x8a\x37\x5c\xa4\x40\x41\xec\xff\x0f\x93\x71\x72\xa0\x02\x21\xee\x20\xdb\x6b\x6b\x52\x00\xc3\x30\x60\xf8\x17\x3d\xe4\xa0\x18\xb1\x63\x64\x84\x8f\xd8\x24\xa9\xb9\x79\xc9\x51\x71\x5e\xbf\x9f\xec\xf5\xcf\xeb\xeb\xb9\xff\x98\x38\x04\x38\x40\xf6\x49\x87\x00\xf5\x14\xd0\xac\xe7\x5b\x54\xd3\x25\xf9\x6e\x89\xc8\xc5\x83\xbd\xde\xf8\xcc\xe9\x0f\xf5\x78\x6b\xc1\x1c\x02\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\xeb\x3c\x86\xd6\xc9\xde\x6e\x51\xf1\x02\x78\xba\xd5\x21\x8d\x7a\x51\x2f\x19\xac\x49\x1a\xe5\xba\xb9\x3d\x9e\xa0\x9f\x96\xdc\xdc\x9e\x12\xe4\xe6\x26\x64\x51\x81\x2e\x6e\x2d\x20\x30\x6b\xd4\xbd\xed\x62\x33\x70\xb1\x49\xd7\xb6\xa8\xa6\x6a\xfc\xe7\x57\xf9\x43\xe9\xa6\x2a\x6e\x6d\x7c\x34\xdd\x5c\xcd\xa5\x0d\x58\xfc\x4a\xc3\xe2\xaf\x5e\x55\x2c\xde\xa4\x0b\x5b\x64\x50\xfb\xc7\x92\xfb\xda\xb5\x6e\x8a\x37\xef\x0c\xa8\x8a\xf7\x5a\x0b\x06\x3b\x3c\xd7\xe0\xb9\x06\xcf\x35\x78\xae\xc1\x73\x0d\x9e\x6b\xf0\x5c\x0b\xf6\x5c\x8b\xea\xa3\x9f\x7e\xaf\x24\xfc\xe8\x0b\xf3\x5a\xe3\x96\x40\x3c\xd8\x63\x2d\x5a\x43\x00\xde\x6a\x5d\x67\x60\xb4\x76\x7b\x18\xea\xa9\x16\x19\xcb\x19\x23\x23\x34\x95\x18\xf4\x90\xca\xe6\x32\x2f\x35\x76\x7d\x57\x78\xa8\xfd\xdd\x34\x49\x86\x60\x18\x4e\x35\x4d\xce\x14\xe9\x07\xa7\xe9\x4f\x25\x51\xcc\x8e\x95\xdd\xd4\xce\xb0\x3b\xcf\xb3\x3b\x93\xb7\x04\xf9\xaa\xf9\xbf\xc3\x61\x0d\x62\x1b\x88\x6d\x20\xb6\x81\xd8\x06\x62\x1b\x88\x6d\x20\xb6\x81\xd8\x06\x62\x1b\x88\x6d\x20\xb6\x81\xd8\x06\x62\x1b\x88\x6d\xea\x15\xdb\xdc\x2b\x62\x6e\x8e\xf0\x98\x9b\xb1\x73\xa7\xe9\x6e\x32\x4a\x86\x43\x11\x8c\xbf\x1d\x8f\xc4\x6b\xed\x4c\x38\x8a\xd9\x49\x07\x2a\x51\x8c\x5f\x89\x72\xd7\xb5\x2f\x4a\x04\x73\x8b\xeb\xba\x26\x13\x06\x25\xd8\x7d\xad\x05\x8c\x41\x20\x81\x09\x72\x8c\x1c\xa9\x00\x8b\x43\x64\x57\x1d\xad\x0c\x96\x18\xc6\x12\xbf\xdd\x23\x8e\xdd\x47\xf8\xb1\x3b\x1b\xc9\xc3\xa4\xbe\x36\x16\xb9\xd8\x46\x79\x2e\x36\xef\xd8\xbe\xee\x42\x4e\x8a\xd3\x81\x23\xe4\x90\x74\x3a\x50\x77\x29\xcd\xfa\xb5\x45\x3a\xa1\x92\x7f\x28\x71\xbc\x5b\x03\x9d\xdb\xa4\xc9\x95\x0c\xf3\x70\x6b\xd9\x34\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\xeb\x3c\xf2\xd6\xc9\x6e\x6e\x91\xe2\x03\xf8\xba\xd5\x23\xb2\xea\x25\xa3\xb5\x8b\xac\x5c\x87\xb7\x77\xf5\xd2\xbf\x91\x1c\xde\xb6\x06\x38\xbc\xc9\x02\xab\x20\xaf\xb7\x96\x51\x99\x35\xea\xfa\xf6\xd4\xa6\x71\x64\x93\xfe\x6f\x91\xce\xe1\xf8\x6b\x24\xa6\xae\x04\x3b\xc1\x49\x23\x6c\x5b\x15\x4f\x38\x10\xf6\x2b\x98\xb0\xbf\xa1\x43\x08\x7b\x93\xde\x71\xd1\xa2\xf1\xe7\x6d\x92\xce\x9a\x5c\x17\xb9\xb2\xb3\xa6\x60\x37\xb9\x96\xcd\x04\xf8\xca\xc1\x57\x0e\xbe\x72\xf0\x95\x83\xaf\x1c\x7c\xe5\xe0\x2b\x17\xec\x2b\x17\xa9\x09\x90\xfe\x84\x64\x1a\xef\x0c\x71\x98\x93\x0c\x83\x5b\x03\xbd\xe6\x5a\x61\x17\xc0\x75\xae\xeb\xec\x8d\x36\x6c\x2f\x43\xfd\xe7\xa2\x85\x44\xfb\xc9\x5e\xba\x3b\x31\xea\xb1\x9a\x27\xcb\x4e\x74\xfe\x4d\x5d\xe1\x49\xf7\x92\x33\x64\x6f\x08\xe4\x71\x87\x6c\xc1\x5e\x34\x72\xa5\xbc\x96\xc9\xa9\x7a\xde\xa2\x5f\x38\x4d\x1f\xdd\xe6\x2f\x37\xbb\x57\x76\xaa\x9b\xf1\x0a\xb9\x9b\x17\x72\x82\x15\x92\xdc\x19\xe4\x5f\x17\x78\x29\x5c\xed\x20\xf8\x81\xe0\x07\x82\x1f\x08\x7e\x20\xf8\x81\xe0\x07\x82\x1f\x08\x7e\x20\xf8\x81\xe0\x07\x82\x1f\x08\x7e\x20\xf8\x81\xe0\xa7\x5e\xc1\xcf\x02\xb9\x43\x20\x9b\x53\xe4\x24\x47\x36\x47\xc9\x61\x32\x1e\x8a\x6c\x02\x77\xe6\x91\x78\xdd\xdd\x13\x0e\x70\xf6\xd0\xb1\x4a\x80\x13\x58\x9f\x72\x07\xbc\x47\x36\xfa\x88\xe2\x16\xcf\x01\x2f\x98\x46\xec\x0a\xf6\xc5\x6b\x2d\x8f\x10\xf8\xe0\x0c\x99\x26\xb7\x57\x40\xcb\x03\x64\x5f\x63\x3d\x02\x64\x19\x86\x2c\x5f\x1c\x23\x53\x62\x02\xa4\xc9\x71\x3e\x01\xc6\x49\xc3\xcd\x4d\xce\x0a\x29\xc1\x6d\x64\xd2\x97\x12\x34\x53\xde\x39\x71\x52\x71\x3b\x39\x25\x9d\x54\x34\x53\x60\xb3\x2e\x7c\xad\x9a\x9d\xc9\xaf\x4b\xde\x7c\xc9\x40\x6f\xbe\xe0\x99\xba\x37\xcc\xb1\xaf\x1d\x73\x16\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\x0f\xc8\xaf\xf3\x90\x5f\x27\xfb\xf8\xb5\x8a\x2f\xc0\xdd\xaf\x0e\x25\xd8\x07\xfb\xc9\xe1\x86\x94\x60\xae\xe7\xdf\x8f\xfb\xe8\x4b\xa5\xfc\x64\x3b\x02\x3c\xff\xaa\xa8\xc0\x82\x9c\x00\xdb\x41\x70\xd6\xa8\x3f\x60\x36\x4a\xf8\xd9\xa4\x6b\x60\xab\xa6\x7e\xfc\xab\x92\x14\x7a\x57\xb0\x97\x60\xf0\x68\x1c\xac\xe2\x30\x88\x63\x80\xae\x3b\x06\xf8\x50\x4f\x27\x1f\x03\x34\xe9\x5c\xd8\x32\x68\xff\x46\xc9\xcf\xf0\x16\xcf\xcf\xb0\xca\x91\x5a\xb0\xcb\x61\x3b\xe6\x12\xbc\x0f\xe1\x7d\x08\xef\x43\x78\x1f\xc2\xfb\x10\xde\x87\xf0\x3e\x0c\xf6\x3e\x6c\x95\x8d\x90\xfe\x91\x64\x7d\xef\x09\x71\x44\x0c\xb6\x1c\x92\x81\x3e\x89\x2d\x36\x1c\xe0\x9e\xd8\x75\x06\x49\x7b\x77\xbb\xa1\x9e\x8a\x2d\x43\x5d\x69\x72\x9c\x1e\x4d\x1c\xf6\x88\xd3\x36\xd9\x69\x31\xf0\xfe\xae\xf0\x5f\xfc\xd2\x16\x72\xa2\x19\x6a\x35\x6c\xf1\xb5\x94\xbe\x64\x0b\x7d\xe3\x3a\x7f\xcd\x1a\xe3\xf0\x4a\xfc\xe6\x36\x62\xd8\x8a\x35\x5c\x33\xc6\x12\xeb\x77\xb4\xfb\x9d\xb5\x41\x75\xbe\x23\x7d\x57\xf6\xba\x54\xa7\xbe\x6e\x1a\xab\x87\xef\xb4\xa2\xa7\x40\x79\x40\x79\x3a\x9e\xf2\xa4\x7f\x25\xcd\xb4\xa3\xcb\x2c\xb8\xfa\xa6\xdc\x48\xed\xb6\x5c\xd4\x13\x0e\x16\x5d\xf7\x4d\x68\x58\x74\xdd\x6c\xd1\xfd\xeb\x14\xe9\x0d\xb3\xe8\x8c\xac\x45\xbf\x32\x45\xff\x52\x92\x8f\x6f\x0b\x89\x3f\x61\x64\x93\x37\x04\x46\x9b\x30\xb2\x88\x2d\x01\xa1\x39\x84\xe6\x10\x9a\x43\x68\x0e\xa1\x39\x84\xe6\x10\x9a\x43\x68\x0e\xa1\x39\x84\xe6\x10\x9a\x43\x68\x0e\xa1\x39\x84\xe6\xf5\x0a\xcd\xef\x26\x87\x04\x9d\xd9\x43\xc6\x38\x9d\x19\x24\x49\xb2\x23\x9c\xce\x18\xd9\x48\x22\x49\x4c\x86\xe3\x98\x04\x55\x96\xe1\x18\x23\x5b\x1e\x37\xe2\x77\x25\xfc\xf9\x04\x3f\x6e\x84\x91\x4d\xde\x58\x25\x4a\x44\x84\x1c\x41\x6c\xfb\x39\xd5\xaa\xe0\x8a\xdb\x49\x5f\x2d\x2d\x09\x86\x18\xc6\x10\xbf\xd4\x43\xf6\x8b\x61\x3a\x42\x52\x7c\x98\xee\x20\x35\x36\x2e\x39\x2c\x8e\x00\xf6\x92\xdd\xfe\x11\x40\xed\x77\x1f\x11\x4a\x90\x7d\x64\x8f\xa4\x04\xa9\xfd\xf6\x66\x63\x39\x44\x33\x3f\x92\x6f\x93\xd0\xdb\x53\x82\x23\x37\x18\xd9\x64\x6f\x68\x9c\x86\xc8\x67\x0d\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x19\x60\x59\xe7\xc1\xb2\x4e\x8e\xca\x10\x0d\x29\x40\x0c\x86\x3a\xb4\x4f\x5f\x4f\x90\x64\x0d\xda\x27\x37\xe2\xc2\x7b\x12\xf4\x8f\xa5\x5c\xcb\x4f\x0e\x8a\xb8\x60\x64\x93\x37\x04\x0a\xd3\x23\x27\x2f\x6b\x34\x9a\xc2\xf9\xc6\x41\x62\x93\x2a\xfb\x68\x26\x68\xfc\x07\x52\xd0\x8e\x1b\xab\x44\x4a\x30\xb2\xc9\x78\x35\xdd\x3c\xc0\xf7\x95\x04\xbe\x5f\xb1\x6a\xe0\xbb\x49\xa5\x7b\x44\xe0\xfa\x07\xd7\x4a\x07\x3b\x7e\xf4\x02\x23\x9b\xbc\xb1\x4a\xac\x82\xc8\xc7\x37\x22\x13\x20\x32\x01\x22\x13\x20\x32\x01\x22\x13\x20\x32\x01\x22\x13\x04\x47\x26\x88\xe6\x6b\x9f\x7e\x9b\x24\xe3\x48\x84\xc5\x21\x30\xb2\xc9\xa7\x04\x7b\xaa\x45\x69\x02\xc0\x23\xad\xeb\x4c\x8b\x56\xee\x01\x43\xfd\xcf\x22\xc2\x34\x23\x24\x45\x07\x13\x49\x8f\x96\x5c\x5b\xe6\x6d\x66\x64\xbb\xc2\xb7\xec\xdd\x4f\x20\xa3\xb5\xf3\x95\x61\xd5\xb6\xd5\xcc\x02\xfd\xf9\xaf\xd1\xd7\xc6\xfc\x75\xa4\x3f\x63\x14\x0a\xec\x45\x6f\x9b\xbc\xe8\x9d\x2f\x70\xeb\x8a\x5f\xee\x69\x5f\x9c\xcb\xc4\x62\x72\x9b\x66\x97\xad\x27\x13\xfc\xda\x31\xb6\x1f\x10\xee\xfb\xfb\xc9\xcd\x62\x08\x5d\x4f\xb6\xf0\x21\xf4\x44\xf2\x6b\x1f\xe8\xb9\x9a\x38\xb5\x0f\x1d\x27\xdb\x82\xc7\x09\xa1\x57\x3b\xf5\x20\xcf\x3a\x1f\x3e\x52\x86\xe9\x50\xc0\x48\x11\x95\x75\x36\x1a\xe5\x3a\xb9\x87\xa5\x86\xd9\xee\x36\xcc\xcc\xb9\x0b\x2b\xb5\x4c\x5f\x59\xcb\xcc\x18\x56\x57\x36\xcd\xf4\xeb\x7b\xc8\x6f\xf7\xd0\xd7\xf6\xc4\x7f\xcb\xe3\xd1\xb6\x2b\x44\x52\xd9\x7a\xcb\x96\x31\x21\xa6\xe0\x12\x19\x2d\x53\xb2\x5d\x85\x50\x3e\xaf\x16\x2a\x6c\x77\x7e\x5a\x2a\xdd\xcb\x67\xa6\xc9\x77\x09\xfc\x27\xa3\x50\x51\x34\x3f\x55\x35\xb2\xa9\xc4\x35\xde\x9f\xe5\x35\xeb\x08\x39\x44\x0f\x26\xf6\x7b\xd3\xf7\xe6\x8a\x09\x5f\xf6\x66\xab\x31\xfb\x5f\xd8\x43\x9e\xd7\x43\xff\x73\xfc\x3f\xb9\xad\x77\xdf\x05\x3b\xab\x99\xe2\xd5\x4d\xb6\x75\x29\xff\xe6\x58\xce\xaf\xbc\xb5\x66\xd9\x72\x2f\x3e\x1e\x9a\xbf\x51\x72\xc6\xa1\x38\x9b\x90\x1b\x97\x1f\x9a\x26\x36\x88\x22\xca\xf0\xde\xf3\x7b\xc8\x73\xe9\x43\xf1\xe7\xc8\x95\xd0\x0b\x6e\x1d\x06\xbd\xa7\x88\xf3\x0d\xcb\x56\x0b\x59\xd5\x64\x9b\x14\xb6\x2a\xf9\x67\x07\x4e\x67\x38\x35\xd1\xad\x80\x3a\xf0\xdd\x49\x2a\x71\x95\xc5\x1e\x50\x56\x87\xc0\x96\x30\xd8\xaa\x57\xb5\x25\x0c\xb1\x26\x36\xd3\x12\x46\xa9\x1c\x74\xfe\x73\x0f\xf9\xa7\x1e\xfa\xfd\x9e\xf8\x77\xbc\xf1\xfc\xf9\x9e\x8b\x17\x9f\x5a\xad\x16\xaa\xc2\x96\x63\x6f\x57\x95\xcb\x19\x62\xff\x16\x58\x05\xf7\x74\xb6\xa8\xb2\x6f\xac\x62\x2f\x98\x46\x69\x7e\xc1\x3b\x48\x17\x83\xda\x2c\x15\xf8\x29\xa5\x25\x8e\x70\x58\xf1\xba\x25\x95\xec\x08\x2c\x2e\x1b\xe6\x25\xcd\x54\x0a\x46\x56\x73\x37\x24\xcb\xca\x08\x6c\xfa\x75\xec\x73\x21\xbd\x32\x7d\x1e\x21\x63\x75\x7c\x2f\x66\x59\x0b\x14\xe6\xe9\x67\xae\x49\xbc\x49\xe2\xf2\x37\x38\xfa\x61\xe7\x67\x71\x62\xc9\x16\x42\xa5\xaa\x94\x38\x2d\x2e\x8d\x18\x3c\xf1\x2c\x7f\x15\x76\x61\x2d\xda\x6c\xa7\x36\xd3\x5f\xeb\x69\x4c\xdb\xed\xdc\x4f\x8e\x0b\x7e\x78\x90\xec\xf7\xf9\x61\x7d\x25\x4c\x88\xcd\xca\x38\x39\x20\x6d\x56\xea\x2b\xa2\x59\x01\xed\x54\xf8\xa7\x62\x3b\xed\xab\xfc\x54\xb8\x4f\x2f\xfb\x42\xc0\xae\x0e\xb1\xab\x5f\xd7\x43\x5e\xdd\x43\x5f\xd9\x13\x7f\x99\xb7\xe4\x64\xa6\xe6\x94\xa9\x80\xa3\xbf\x32\x11\xce\xa0\x0c\xee\x1c\x96\xe1\x2b\x5d\x1c\x95\x4a\xc6\xc8\x17\x73\x1a\xc7\x14\x5e\x39\xbc\x61\x6b\x39\x5c\xdc\x43\xc6\xe8\x48\x22\xe5\x7d\xfe\xb6\xc8\x5f\x4f\xa7\xb3\xbb\xc2\x64\x7e\x0f\x21\xbb\xeb\x58\x02\xb5\x45\x5d\xcc\x97\x9f\x5d\x93\xf8\xa2\xb4\x06\x3e\xc5\x59\x03\xdd\xdf\xfd\x45\x70\x5b\xd5\x45\x70\xd2\xb9\x36\xe2\x55\xf0\x14\x39\x49\xd2\x15\xab\xe0\x18\x19\xa9\xba\x80\x38\xe0\x69\x71\x74\x56\xb3\xd5\xd1\x94\x5b\xab\xe9\x9f\xf4\x90\x13\x62\x35\x3c\x4c\xc6\xf9\x6a\xc8\x56\xc5\xba\xcb\x21\xb7\x8b\x55\x71\x82\x1c\xf3\x57\xc5\xc6\x4a\x9a\x12\xab\x63\x9a\x1c\x97\x56\xc7\xc6\x8a\x6a\x76\x95\xbc\x10\xbe\x4a\x8e\xd0\x94\xb3\x4a\x8a\x4a\x38\x2b\xa5\x57\x05\x69\xa9\xe4\x95\xc3\x7a\x79\x05\xaf\x97\x7b\xc9\x6e\x3a\x9a\x18\xf6\x56\xbe\xeb\xe4\xf5\xd2\xed\xf2\xae\x58\x30\xbf\xf5\x6b\x64\xb8\x9e\x05\xf3\x41\x2d\x43\xdf\xfd\x6b\xf4\x15\xd2\x46\xba\xb7\x1a\x61\x60\x17\xbb\xbb\xe8\x6d\x2b\xf2\x85\xc9\x07\xb5\x4c\x7b\xb7\xd0\x33\xe1\x33\x7e\x88\xee\x0a\xd8\x42\xb3\xaa\x06\xb2\x85\x57\x49\x4d\xd2\x57\x95\x2d\xc8\x6d\x92\x58\x99\x2c\x74\x41\xa3\x4c\x97\x88\x45\x1f\x88\x1b\xee\x78\x3d\x7f\x42\xb0\x02\xbe\xd9\xe3\x6b\x0b\x57\x21\x3a\x04\x41\x02\x0b\x29\x45\x35\xe7\x17\x15\xd5\x34\xd5\xa5\x94\x72\xd6\xb0\xdd\x1f\xc4\x04\x67\x2b\x99\x62\x2d\x68\xb9\x5c\x2a\xb1\xd1\xb9\x5b\x5e\x59\x1e\xee\x21\xaf\xe9\xa1\xaf\xea\x89\xbf\xdc\x57\xff\x9d\xe8\x0c\x90\x71\x88\x1c\xa4\xfb\x13\x7b\xbd\x35\x22\x5e\x01\x32\xa4\xa6\x5c\x8d\x05\xe6\x01\x62\xd0\x7c\xfc\x92\xdb\x6a\x67\xcf\x3b\x9b\xf1\x72\x5e\x20\xbe\x21\x75\xf1\x82\xea\xcc\xa2\xe2\x91\xe7\x82\x1f\x19\x29\xa2\x30\x49\x91\x16\xe2\xb9\x90\x47\x3a\x0b\x69\x83\xaf\x59\x09\x24\x1e\x24\x8b\xd4\x8e\x9b\xee\x33\x7f\xbd\x09\x16\xc1\x17\x91\xaa\xef\xbb\x8c\x0b\xfc\xe0\x49\x24\x55\xc7\x1a\x9f\x33\xe6\xe9\xff\x7c\x12\xfd\xa4\xb4\x9e\x6d\xe5\x5a\xbd\x9c\x31\x1f\x10\x43\x51\x88\xad\x02\x25\x7b\x67\x8c\xf9\x31\x62\x6b\x0f\xda\xc3\xc5\x9c\xaa\x47\x6c\x19\x37\xbd\x20\xb6\x45\xaf\x36\xfd\x8a\x1e\xf2\xff\xeb\xa1\xff\xb5\x27\xfe\x12\x6f\x29\x5a\x28\xe7\xaa\xac\x57\xbd\xf5\xc8\x19\x6c\x39\x63\xde\xaa\x63\x1d\xaa\x6f\x09\xba\x87\xdc\x45\x2f\xc4\xef\x74\xab\xb3\xe7\x94\xe1\x1d\x2e\xb3\x2e\x5e\x36\xde\x03\x47\xd9\x86\x39\x7e\x57\xd9\x10\x7f\x5e\x8c\xfc\xb2\x87\xfe\x5b\x4f\xfc\xe7\xde\xbb\xfe\x45\xcf\xd4\x9c\xe2\x4a\xd2\x25\x07\xa6\xd9\x25\xdb\x75\x5e\x52\xb3\x95\x2e\xab\x9e\x9e\x85\x7b\xd0\xa8\xdc\x88\x73\x6b\x27\x26\xa5\x83\xe0\x98\xf1\xc7\xec\xe3\xac\x6e\x15\x73\xea\x12\x77\x8a\xe0\x66\x9f\x26\xce\xf2\x95\x9c\x5e\xe0\x8b\x6b\xce\x98\x9f\xd7\x0b\xf3\x42\x08\x2d\xf9\x15\x59\x39\x7d\x7e\xc1\xce\x2d\x09\x5f\x16\xb6\xa6\xb9\x7f\xe0\xfa\x6e\xcf\xe1\xc8\x1f\xef\x5c\x1e\x9e\x4a\x08\xf7\xac\x34\x7b\x0b\x59\x4f\xb2\x26\x0e\xa6\xa6\x67\xc9\xfd\xf4\x99\xf1\x67\xb8\x05\x1e\x39\x2f\x1a\xd3\xf3\xa5\x74\xfb\xcd\x71\xbe\x15\xe3\x72\xf9\x90\x76\x46\xd2\xd5\xee\x7d\x65\x63\xe9\x0b\x31\xf2\xd9\x18\x7d\x2c\x16\xff\xa4\x24\xcc\x99\x50\x4c\x2d\x27\x24\x4b\x1c\xad\x06\x4b\xa0\x1c\x37\x04\x71\x09\x1f\x5a\xfe\xf4\x5a\x30\x2e\x3b\x35\x29\x57\x2f\x15\x4d\x2d\xa3\x65\x35\xcb\x77\x2e\x51\xf9\x52\x7f\x59\xb5\x84\xc3\x24\x77\xfc\x61\x73\x90\xdd\xad\x58\x8e\x4b\xb5\xf8\x1e\x08\x8f\x4a\x77\xbd\xf6\xbc\x4d\x96\x0b\xa4\x5c\xfd\x44\xc9\x2e\x99\xc2\x2d\x82\x97\xb6\xfc\xce\x73\xae\x69\x61\xcc\x89\x67\x39\xda\x25\x3e\x44\xd9\x7f\x5f\x64\x55\x74\x75\x2f\x9e\x1a\x2a\xf1\x04\xf9\xe2\xb2\x81\xf9\xe9\x1e\xf2\xa9\x1e\xfa\xa7\x3d\xf1\x8f\x7b\x73\xf3\x0d\x55\xe6\x26\x9b\x34\x92\x1b\x8a\x56\xc8\xba\x03\x98\xd7\xd6\x69\x46\xfe\x7a\x65\x62\xac\x41\xf1\xbb\x6a\x6a\xfc\x82\x82\x5f\x04\x87\x26\xb2\x23\x85\x37\x2a\xdc\xf7\x09\x7a\xbf\xc4\x35\xb6\xaa\xe7\xce\xb0\xda\x94\xbd\xca\x23\x3d\xe4\xe1\x1e\xfa\x9a\x9e\xf8\xab\xbc\x57\x79\xc0\xd3\xe9\xab\xd9\x2c\xdb\xe5\x9e\x3f\x75\x62\xf7\xee\xdd\x07\x59\x79\xce\x3f\xcf\xaa\x05\x83\xf7\xac\x65\xab\xf9\xa2\xeb\x47\x54\xe6\x63\xa3\x09\x87\x27\x7f\xcd\xf0\x56\x9b\x80\x61\x4b\xbc\xb2\xca\x06\x2e\x7d\xd9\x46\xb2\xaf\x8e\xaf\x6d\xd1\x30\xed\x39\xc3\xbc\xac\x9a\x59\xfa\xf8\x06\xfa\x16\xe9\xab\x9b\xac\xb6\xb1\x92\xee\x71\xf7\x12\x3b\x56\xdc\x5f\xcd\xf8\x37\xb4\x77\x47\xd1\x60\xb8\x59\x51\xe3\x53\xa2\xc6\x81\xbb\xad\xb7\x49\xed\xb4\xab\xea\x6e\x2b\xa0\xa1\x76\xae\xbc\xe9\xea\xba\x96\x0a\x09\xcc\x1b\x74\xff\x6a\x7c\xa3\x9e\x4a\xee\xa1\x77\xc5\x2f\xb8\xf3\x79\xff\x19\xc7\xdd\x9a\xf5\xa0\x98\x75\x4e\x37\x9e\xd7\x1e\x28\xf1\xd0\x08\x92\x0b\xe8\x3d\xda\xec\x05\x23\x73\x49\xb3\xad\xc4\x55\xfc\x06\x79\xb9\xa0\xdf\xdd\x4c\x46\xea\x99\x90\xa6\xf1\xe0\x12\xfd\xe0\x66\xfa\x5b\x41\x1b\xfa\x65\x53\x91\x5d\x1d\xbc\xa1\x5f\x36\x09\xd9\xa5\xed\x1d\x54\x77\x86\x0f\xaa\x14\x1d\x0c\x1a\x54\xac\xae\x41\xc3\x29\x1e\xd8\x2a\x33\x77\xd5\xdc\x2a\x33\xa5\x2e\x6c\x95\xc4\x6b\x82\x14\x37\xcb\x97\x23\xb9\x59\x7a\x43\x16\xa2\x6e\x68\x97\xe4\x6f\x4b\xed\x32\xe0\xb6\xcb\xc9\xc9\x33\x93\x17\x27\xab\xb7\x4c\x7f\x59\xcb\x08\xbf\x81\xee\x6b\x9b\xb1\x47\xa4\xb6\x71\x3f\xdf\xca\xb9\x99\x8b\x53\xe7\xce\x5e\xa8\xde\x38\xdb\xcb\x1a\xc7\x29\xb8\xfb\x5a\x67\x3c\x70\x46\xdd\x3e\x39\x71\xb2\xd6\x19\x75\xbb\xa6\x66\xbb\xaf\x5d\xd2\xaf\x0b\x94\xb0\x4d\x5c\x3c\x71\x7b\xf5\x86\xa9\x90\xb0\xa9\x76\x66\xa1\xfb\x5a\x66\xfa\x30\x19\xa7\x07\x12\xfb\x3c\x23\xe5\xa6\x4a\x43\x47\xba\x73\x35\x4c\x1c\x95\xdc\x47\xef\x8d\x3f\xdd\x35\x71\x26\x66\x54\x7b\xc1\x05\xe1\x77\x9d\x3f\xa3\xb0\xc7\xb2\xae\x2b\x59\x9a\x47\xfa\xdc\xad\xac\xe8\x4e\x37\xba\x04\xb7\x6c\xb3\xa9\x04\xaf\xa9\x7c\x9a\xf3\x0d\x4a\xf6\xd7\x6b\xea\x0c\x3f\x87\x95\xf2\x10\x7d\x13\xa5\x8f\xd4\x6d\xf1\x24\xc3\x2d\x9e\x7b\x74\x7b\x81\xbd\xea\x95\x3e\xbe\xe2\x81\xad\xb3\xa2\xe5\x93\x0c\xb7\x7c\xba\xa5\x75\x12\xbf\x5b\xbf\x05\xb4\xab\x06\x0b\xa8\x5b\xda\x27\xf9\xc6\x46\x2c\xa1\xa1\x9a\x2c\xa1\x6e\x69\xa3\xb1\x37\x37\x64\x11\xa5\x6a\xb3\x88\xba\xa5\x95\xc6\x03\x67\xda\xca\x96\xd1\xae\x1a\x2c\xa3\x6e\x69\x9f\xf4\xef\x35\x60\x21\x0d\xd6\x62\x21\x75\x4b\x0b\x75\xbc\xa5\xb4\x4c\x7e\xe3\x9a\x46\xb2\xcf\xa5\xb0\x7e\xda\x6c\x60\xbd\x77\x73\x5d\x2e\x39\x4e\xba\xce\x7f\xdd\x44\xff\x4a\x1a\x94\xca\xca\xe9\x3a\x8d\x6c\x72\x6b\x95\x03\xd5\x96\xa4\xe2\xbc\xe2\x43\x82\xfc\xbb\x14\x12\xa4\x37\x34\xcd\xa6\x91\x4d\x2a\xd5\x83\x83\xb4\x24\x85\x26\x42\x84\x20\x44\x48\xab\x42\x84\xa4\x3f\x22\x39\x0d\x0f\xd6\x9e\xfa\xd2\xc8\x26\x6f\xa9\xe6\x3e\x8c\xb4\x96\x98\x76\x70\x22\xee\x0a\xad\x06\xfd\x97\x69\xb2\x2b\xdc\x62\xb1\xb5\x7c\x91\x87\xce\xa6\x7f\x32\x4d\x7f\x21\x45\xcb\xdf\x19\x9a\xa8\xf2\xa2\x73\x6b\xf2\xd6\x2a\x09\x2b\xdd\x0b\x90\xb8\x12\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\x1f\xb1\xf8\x11\x8b\xbf\xde\x58\xfc\xcf\xac\xcf\x9d\x5f\xe2\x2f\xee\x7e\x3c\x92\x04\x96\x77\x84\xa3\x98\x24\xdd\x11\x80\x62\xdc\x5a\x94\xab\x08\xfe\x42\x82\x99\xd7\xc9\x89\x2c\x3d\xca\x50\x3d\x00\x43\xe4\x9c\x41\x60\x81\x34\x39\x4e\x8e\x56\x90\xc5\x14\x19\xac\xa7\xa5\x41\x13\xc3\x68\xe2\x77\x7a\xc8\x31\x31\x9c\x0f\x90\x7d\x7c\x38\x8f\x90\x3a\x1b\x99\x9c\x14\x30\xff\x08\x39\xe4\xc3\xfc\xfa\x4b\x99\x14\x51\x29\x8e\x92\xc3\x52\x54\x8a\xfa\x8b\x69\x36\x22\x45\xb4\xf3\x2a\xf9\x71\x09\xe9\x29\xd5\x12\x60\x7a\x73\x6c\x57\x0d\x89\x30\x5b\x34\xdb\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x3a\x0f\xc2\x75\x72\x42\xcc\x68\x09\x02\x12\x63\xd6\xa1\xb9\xfa\x7f\xbd\xb5\x04\xe2\xf6\x34\x57\x6e\x82\xcc\x3f\xea\xa5\xdf\x94\x82\xd0\xde\x12\x9c\x20\xd3\xd7\x5b\x55\x11\x89\xb7\x88\xcc\xac\xd1\x84\x99\x4f\x6b\x1e\x4c\x36\xa9\x92\x8f\x76\x22\xc7\x1f\x91\x10\xfb\xb6\xaa\x09\x34\xbd\x51\x96\xa8\xae\x95\x07\x70\xbf\x72\x81\xfb\xa3\x1d\x03\xdc\x9b\x54\xd1\x47\x0c\xca\x5f\xb8\x49\x3a\x80\x92\x13\x6e\xfa\x07\x50\x55\x13\x6f\xb6\x68\x3e\x20\x01\x27\x12\x70\x22\x01\x27\x12\x70\x22\x01\x27\x12\x70\x22\x01\x67\x70\x02\xce\x68\xad\x80\xf4\x63\x92\x8d\x9c\x0c\x4f\xc4\xe9\xd9\x06\x4a\x35\x8f\xba\xe8\x4d\x03\xf8\xd4\x75\x9d\xc9\xd1\x8e\xbd\x66\xa8\x6f\x5d\xc4\xd8\xe8\x00\xd9\x47\xf7\x24\xc6\x3c\x7a\x73\x43\x85\x8f\x9d\x7b\x57\x57\xf8\xda\xbd\xe4\x0c\xd9\x1b\xc2\x7d\xd8\x6e\xda\x19\xd0\x19\xa3\x60\x9b\xec\x1b\x62\x5a\xf4\x0b\xa7\xe9\xa3\xdb\xfc\x35\x67\xf7\xca\x5e\x77\xe7\xfd\x42\x4e\x78\x85\x24\x77\x06\xf9\xdf\x05\x5e\x0a\x4f\x3c\x88\x80\x20\x02\x82\x08\x08\x22\x20\x88\x80\x20\x02\x82\x08\x08\x22\x20\x88\x80\x20\x02\x82\x08\x08\x22\x20\x88\x80\x20\x02\xaa\x57\x04\xb4\x40\xee\x10\xd4\xe6\x14\x39\xc9\xa9\x0d\x4f\x5c\x1e\x4a\x6d\x02\x77\xe6\x91\xf8\xe4\x35\x96\x4a\x24\xb0\x3e\xe5\xde\x79\x8f\x6c\x94\xd4\x29\x9e\x77\x5e\x30\x8d\xd8\x15\xec\xa7\xd7\x5a\x1e\x21\xf0\xc1\x19\x32\x4d\x6e\xaf\xe0\x96\x07\xc8\xbe\xc6\x7a\x04\xd4\x32\x8c\x5a\xbe\x38\x26\x52\x39\x8f\xf0\x54\xce\x6c\x02\xf0\x78\x87\x8d\x35\x37\x39\x2b\x44\x05\xb7\x91\x49\x5f\x54\xd0\x4c\x79\xe7\xc4\x79\xc5\xed\xe4\x94\x74\x5e\xd1\x4c\x81\xcd\x7a\xf6\xb5\x6a\x76\x26\xbf\x2e\xf9\xf8\x25\x03\x7d\xfc\x82\x67\xea\xde\x30\x6f\xbf\x76\xcc\x59\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\x3f\x20\xbf\xce\x43\x7e\x9d\xec\xf7\xd7\x2a\xbe\x00\x0f\xc0\x3a\x94\x60\x1f\xec\x27\x87\x1b\x52\x82\xb9\xbe\x80\x3f\xee\xa3\x2f\x95\xd2\x9a\xec\x08\xf0\x05\xac\xa2\x02\x0b\xf2\x0a\x6c\x07\xc1\x59\xa3\xfe\x81\xd9\x28\xe1\x67\x93\x9e\x82\xad\x9a\xfa\xf1\xaf\x4a\x7a\xe8\x5d\xc1\x3e\x83\xc1\xa3\x71\xb0\x8a\xf7\x20\x8e\x01\xba\xee\x18\xe0\x43\x3d\x9d\x7c\x0c\xd0\xa4\x97\x61\xcb\xa0\xfd\x1b\x25\x7f\xc3\x5b\x3c\x7f\xc3\x2a\x47\x6a\xc1\x9e\x87\xed\x98\x4b\xf0\x41\x84\x0f\x22\x7c\x10\xe1\x83\x08\x1f\x44\xf8\x20\xc2\x07\x31\xd8\x07\xb1\x55\x36\x42\xfa\x47\x92\xf5\xbd\x27\xc4\x1b\x31\xd8\x72\x48\x06\xfa\x25\xb6\xd8\x70\x80\x87\x62\xd7\x19\x24\xed\xdd\xed\x86\xfa\x2a\xb6\x0c\x75\xa5\xc9\x71\x7a\x34\x71\xd8\x23\x4e\xdb\x64\xaf\xc5\xc0\xfb\xbb\xc2\x7f\xf1\x67\x94\xa4\x9b\xa1\x56\xc3\x56\x46\xcd\x69\xf4\xbd\x94\xbe\x7c\x9d\xbf\x64\x8d\x8a\x74\xc7\xec\xa7\xe5\x79\x48\x83\xd7\xab\x54\xcd\x10\xeb\x02\x2b\x36\xe2\x84\xc8\x4f\x27\xc7\xc5\x20\x3f\x48\xf6\xf3\x41\x3e\x4a\x86\xc9\x50\xd5\x41\xae\x96\x6c\x83\xbd\x9d\x5e\x98\xe7\xdf\x13\x56\xa3\x66\x49\xce\x4c\xf8\xc8\x1e\xa2\xbb\x9c\x91\x2d\x55\xc0\x19\xe2\xa2\x0e\x65\x08\xe7\x13\xf2\x47\xc4\x4b\x92\x5c\x4f\xa7\x8c\xd6\xc3\x72\x5a\xd0\x2f\xe9\x13\x64\x82\x1c\xab\x58\xed\xeb\xed\x18\x2c\xf1\x61\x4b\xfc\x9b\x7a\x22\x18\xfe\x93\x02\xdf\x1c\x25\x87\x7d\x7c\xd3\xd6\x59\xc4\xa9\x4d\xe4\xb3\x28\xfd\x4f\xd2\x2c\x3a\xb2\x3c\xd9\x72\x3d\xd3\x69\xb8\x76\x9b\x2c\xe2\xc9\x04\xc3\xac\xfb\x66\x6d\x3b\xbe\x59\xa1\xf6\x58\xe4\xf3\x6d\x7a\x8c\x8c\xd0\x54\x62\xd0\x33\xa2\x36\xcb\x86\x18\xbf\xbe\x2b\x0c\xaf\x2f\x6d\x21\x27\x9a\x33\xbc\xf8\x26\x96\xbe\x64\x0b\x7d\xa3\x64\x79\x8d\x09\xcb\xab\x4a\x0a\xf8\x2a\xcb\x52\xed\xa6\x57\xc4\x59\xe2\xb9\xed\xb5\x26\x8e\xd3\xbe\x23\x7d\x45\xf6\x7a\xb6\x58\x5d\xdd\x34\x56\x97\x31\xd6\x82\x9e\xc2\xf1\x1a\x8e\xd7\x3a\xfe\x78\x2d\xfd\x2b\x69\xa6\x1d\x5d\x6e\xaf\xd5\x35\xe5\x46\xea\x30\xd8\x22\x9e\x70\xb0\xd8\xba\x6f\x42\x03\xa5\x75\x33\x4a\x7b\xf9\x69\x32\x14\x6a\xd1\x89\x73\xa3\x07\x4a\x86\xad\x5a\xf4\xeb\xd3\xf4\x79\x52\x08\xb0\x5d\x61\x21\xc0\xc4\xcd\x77\xb2\x9b\x93\xdb\x82\x43\x7f\x49\x97\x20\xe4\x17\xfc\xff\xe0\xff\x07\xff\x3f\xf8\xff\xc1\xff\x0f\xfe\x7f\xf0\xff\x83\xff\x1f\xfc\xff\xe0\xff\x07\xff\x3f\xf8\xff\xc1\xff\x0f\xfe\x7f\xf5\xfa\xff\xdd\x2f\x0e\xb8\x47\xf8\x01\x77\xec\xdc\x69\xba\x8f\xec\x21\x63\x35\xb0\x1b\x69\x47\x1e\x49\xa8\xaf\x73\xe1\xd8\x66\x90\x26\x97\x63\x1b\xa9\x1e\xe5\x21\xbe\xfe\x5e\x02\xa6\x4f\x96\x42\x7c\xc9\xb4\xa1\xb7\x5a\x68\xaf\x56\xf0\x06\x81\x07\x4e\x92\x34\x39\x5e\x41\x27\x47\x48\xaa\xbe\x16\x07\x93\x0c\x63\x92\xff\xd4\x43\x26\xc4\xc0\x1e\x27\x07\xf8\xc0\x1e\x23\x75\x37\x33\x39\x25\x0e\x17\x8e\x91\x23\xfe\xe1\x42\x23\xe5\xdc\x26\x64\xbe\xc7\xc9\x51\x49\xe6\xdb\x48\x41\xcd\x86\xec\x8a\x7a\x96\x25\x3f\x25\x85\xea\x4a\x54\x09\xd5\x25\xcf\xb8\xa1\xf0\x10\x5d\xad\x9b\x7b\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x40\x73\x9d\x87\xe6\x3a\x39\x34\x57\xd4\x1c\x01\x21\xb9\xea\x50\x64\x3d\xd2\x47\xf6\xd4\xa5\xc8\x72\x43\x71\xfd\x5d\x2f\xfd\xee\x7a\x9f\xd7\x28\x81\xa1\xb8\xca\xd4\x58\xc1\x12\xfa\xd6\x11\x9a\x35\x1a\x7a\xeb\x19\x51\xc0\xca\x26\x7d\x04\xa2\x9e\xd2\xf1\xb7\x49\x00\xbe\xb7\x5a\xa8\x2d\x79\xb4\xf5\x55\xf5\x04\x00\x8e\xbf\xc2\x71\xfc\xef\x77\x14\x8e\x6f\x52\xe3\x1f\x39\x44\xff\x0d\x29\x74\xd6\x93\xa5\xd0\x59\x65\x47\x55\xd5\x42\x66\xb5\x6e\x6e\x20\x54\x16\x42\x65\x21\x54\x16\x42\x65\x21\x54\x16\x42\x65\x21\x54\x56\x70\xa8\xac\xa8\x6d\x81\xf4\x97\x24\xab\x79\x30\x34\x44\x96\x6c\x21\x24\xaa\x78\xf5\xb5\xc4\x40\x80\x1f\x5f\xd7\x19\x1e\xed\xd9\x85\x86\xfa\xef\x45\x8e\x96\xc6\xc9\x01\xba\x2f\xb1\xc7\x23\x3c\x37\x96\xfb\xed\x49\xf7\x75\x85\xbf\xde\x97\x28\x39\xd4\x08\x1d\x72\x23\x2f\xbc\x9c\xd2\xe7\x4b\x91\x17\x92\x21\x91\x17\xe4\x15\x68\x20\x14\x17\xb5\x24\xd2\x42\x57\xd2\x93\x8f\x48\xdf\x81\xa1\xf0\xc8\x0a\x72\x37\x24\x6b\xe1\x28\x2d\x89\xa4\x00\x9a\x02\x9a\xb2\xda\x34\x25\xfd\xb7\xd2\xcc\xd9\x57\x47\xa4\x04\x79\x0a\xed\x08\xb7\xa5\x10\x19\x01\x13\x15\x16\xd5\x5a\xb0\xa8\xde\x3a\x4d\xb6\x87\x58\x54\x96\x96\x31\x35\xdb\xa2\xff\x3e\x45\xbf\x2d\x29\xa2\xfb\x56\x0e\x7d\x70\x81\xdf\x95\x8c\x07\xc5\x3c\x10\xbf\x21\xd8\x01\x14\xd5\x50\x54\x43\x51\x0d\x45\x35\x14\xd5\x50\x54\x43\x51\x0d\x45\x35\x14\xd5\x50\x54\x43\x51\x0d\x45\x35\x14\xd5\x50\x54\xd7\xab\xa8\x7e\x2a\x39\x2a\x70\xcc\x7e\xb2\x97\xe3\x98\x61\x32\x44\x76\x85\xe2\x18\xb1\x15\x8f\x24\xca\xc1\xed\xe1\x28\xa6\x9f\xf6\x56\xa2\x18\x51\x81\xf2\xf0\x06\x1f\x90\x28\xe7\xb5\x5e\x78\x03\x87\x28\xdc\x1c\x1c\xd7\x20\x62\xa6\x20\x10\x00\x3f\x82\xaf\x80\x8a\x3b\xc9\x40\x8d\xad\x0a\x86\x18\xc6\x10\xff\xb2\x87\x8c\x8b\x51\xbb\x9b\x8c\xf2\x51\xbb\x8b\xd4\xde\xbe\xe4\x98\xa0\xfc\x07\xc8\x3e\x9f\xf2\xd7\x55\xc0\x71\xa1\xbb\x38\x48\xf6\x4b\xba\x8b\xba\x4a\x68\x36\x68\x41\x64\x93\x26\xf9\x3e\x89\xcd\xdd\x14\x18\xad\xc0\x99\x40\xdb\xc3\xc2\x14\xb4\x64\x2a\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x81\xa6\x75\x1e\x4d\xeb\xe4\xf8\x04\x91\x21\x03\x04\x26\xa8\x43\x28\xf5\xda\xde\xd0\x54\x31\x8e\x50\xca\x8d\x48\xf0\xed\x04\xfd\xbc\x14\x91\xe0\xc6\x80\x88\x04\xae\x48\x2a\x48\x5b\xde\x12\x0a\xb3\x46\x63\x10\xdc\xd5\x14\x66\x6c\x52\x3e\x1f\xd9\x7c\x8d\xff\xf2\x2a\x7f\x38\xdd\x1c\x1c\x75\xc0\x19\x51\x5b\xab\xc8\xe4\x41\xc9\xaf\x40\x4a\xfe\xda\x55\xa6\xe4\x4d\x8a\xe0\xa3\x43\xdc\x3f\xbd\x56\x3a\x17\xf2\x62\x09\xb8\xe7\x42\xc1\x41\x04\x5a\x32\xe2\x11\x3d\x00\xd1\x03\x10\x3d\x00\xd1\x03\x10\x3d\x00\xd1\x03\x10\x3d\x20\x38\x7a\x40\x64\x9f\xfd\xf4\x07\x25\x39\x48\x7f\x48\xd8\x00\xc7\x18\xb8\x29\xd0\xc7\x2d\x6a\x5b\x00\x6e\x6d\x5d\x67\x63\xb4\x78\xab\x18\xea\xcf\x16\x1d\xdc\xd9\x4d\x46\xe9\x70\x62\xc8\x63\x2c\x54\x76\x64\x13\x37\x74\x85\x07\xdb\x1b\x4e\x93\x54\x28\x98\x31\x17\xf5\x8c\xa6\x66\x32\x46\xa9\x60\x5b\xf4\x07\xd3\xf4\x45\x52\x12\xdf\xc1\x30\x4f\x36\x7e\xf7\x84\xb8\x3b\x99\x08\xf6\x68\x93\xaf\x81\x67\x1b\xb4\x38\xd0\xe2\x40\x8b\x03\x2d\x0e\xb4\x38\xd0\xe2\x40\x8b\x03\x2d\x0e\xb4\x38\xd0\xe2\x40\x8b\x03\x2d\x0e\xb4\x38\xd0\xe2\xd4\xab\xc5\x71\xa2\x79\x8d\xf0\x68\x5e\xb1\x73\xa7\xb9\x87\xdb\xee\x1a\x88\x8c\xbc\x25\x8f\xc4\xc3\x6d\x26\x1c\xce\x0c\xd1\x5d\xcb\xe1\x8c\x5c\x91\x72\x4f\xb7\xef\x4b\x68\xf3\x06\xc9\xd3\xad\x8c\x38\xf4\x55\xf3\x78\x6b\x09\x73\x10\x88\x60\x92\x9c\x20\x13\x15\xdc\x71\x94\x0c\xd7\xd9\xea\xc0\x8d\x61\xb8\xf1\x9f\x7b\x48\x5a\x8c\xee\x43\xe4\x20\x1f\xdd\xbb\x49\xfd\xed\x2c\x92\xf0\x8e\xf2\x24\xbc\xde\x19\x7f\x43\x05\xdd\x2e\xce\x12\x26\xc8\x31\xe9\x2c\xa1\xa1\x92\x9a\xf5\x8c\x8b\x7c\xb2\x25\x3f\x2d\x79\xc8\xf5\x56\xf1\x90\x2b\x9b\x78\xa9\x70\x4f\xb9\x16\x4e\x41\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\x3a\x50\xba\xce\xa3\x74\x9d\xec\x31\x17\x39\x4a\x80\xe7\x5c\x1d\x02\xad\xf7\xf4\x91\xbd\xf5\x09\xb4\x5c\x0f\xba\x9f\xf6\xd2\x7f\x94\x3c\xe8\xb6\x05\x7a\xd0\x95\x8b\xb3\x82\x3d\xe9\x5a\x48\x69\xd6\xa8\x47\xdd\xbd\x91\x60\xcb\x26\x3d\xeb\x22\x9f\xd7\xf1\x77\x4b\x3c\xbe\xaf\x9a\x87\x5d\xd9\x88\xeb\xaf\xea\x69\x07\x3a\x7f\xc5\xd3\xf9\xb7\x76\x18\x9d\x6f\xd2\x13\x2f\x7a\xa4\xfe\xdf\xa4\xec\xbe\x37\x48\x1e\x79\xe5\xe7\x57\xd5\x3c\xf3\x5a\x38\x43\xe0\xa1\x07\x0f\x3d\x78\xe8\xc1\x43\x0f\x1e\x7a\xf0\xd0\x83\x87\x5e\xb0\x87\x5e\xe4\xe6\x40\xfa\x71\x39\xb1\x63\xa8\xa7\x5e\x99\x91\xd0\x5b\xc5\x63\xaf\x35\x36\x02\x3c\xf7\xba\xce\xf6\x68\xd3\x96\x34\xd4\x83\x2f\x7a\xd8\x74\x88\x1c\xa4\xfb\x13\x7b\x3d\xe6\x13\x2f\xf7\xe4\x93\x6f\xec\x0a\x8f\xbe\x47\x93\x64\xa0\x36\x60\x64\xd1\x9f\xee\xa4\xdf\x95\x64\x3d\xfd\x35\xb9\xf2\x25\x6f\x5a\xc1\x87\x0f\xce\x7b\x90\x05\x41\x16\x04\x59\x10\x64\x41\x90\x05\x41\x16\x04\x59\x10\x64\x41\x90\x05\x41\x16\x04\x59\x10\x64\x41\x90\x05\x41\x16\x54\xaf\x2c\xe8\x69\x22\xfc\xe8\x08\x0f\x3f\x1a\x3b\x77\x9a\x8e\x90\x14\x19\xac\x15\xca\x44\xe2\xb5\x37\x15\x0e\x64\xb6\xd3\xbe\x2a\x40\xa6\xdc\x5d\xef\xa3\x12\xdf\xdc\x54\xe9\xae\x97\xdc\xba\xa2\x9f\x5e\xc4\x07\x9c\x47\xc9\x61\x32\x5e\x81\x17\x93\x64\x47\xad\x2d\x0b\x9c\x18\x86\x13\xbf\xd6\x43\x0e\x89\xa1\xbb\x87\x8c\xf1\xa1\x3b\x48\xea\x68\x60\x91\x5b\x6e\x94\xe7\x96\xf3\x0e\xfd\xeb\x2b\x61\x42\x9c\x1a\x8c\x93\x03\xd2\xa9\x41\x7d\x45\x34\xeb\x84\x17\xdd\xdc\x99\x7e\x5d\x0f\x79\x75\x0f\x7d\x65\x4f\xfc\x65\xde\xea\x95\x99\x9a\x53\xa6\x02\x14\x6f\x65\xf6\xe6\xa0\xfc\x6d\x77\xce\xcc\x7c\xa3\xce\x31\xc8\x32\x46\xbe\x98\xd3\xf8\x56\xc0\x2b\x87\x0f\xd4\x2e\xd5\xd4\xbd\xbd\xb7\xd6\xa0\x67\x9e\x98\xee\x67\x09\xfa\x65\x49\x4c\x17\xaf\x2e\xa6\x4b\xde\xb4\x82\x8a\x0e\xf2\xb9\x28\xe4\x73\x77\x37\xb7\xb6\x34\xa9\x9b\x8b\x6e\x56\xc7\x5f\x28\x7d\x11\xb7\xae\x28\x98\x4b\xde\xb2\xb2\x52\x0e\xdf\xc7\x2b\xeb\xfb\xf8\xf0\xaa\x7f\x1f\x9b\x54\xc3\x45\x37\x0b\x92\x3f\x97\x02\xd3\x6f\xaa\x94\xc1\x25\xb7\xae\xa8\x7f\x83\xf0\xad\x0b\x66\x03\x84\x6f\x10\xbe\x41\xf8\x06\xe1\x1b\x84\x6f\x57\x82\xf0\x2d\xba\x2f\x7f\xfa\x23\x92\xfd\xbb\xbd\x36\xc5\x5b\xf2\xe6\x95\xa4\x6e\xd0\xb8\xc1\xcc\xa8\x6e\x74\xb7\x78\xdf\x18\x2a\x6e\x8b\x90\x07\xed\x21\x63\x74\x24\x91\xf2\xa8\xcb\x96\x00\x55\x5b\x57\xc8\xd9\x3e\x74\x1d\xd9\x53\x1f\xab\x19\x2e\x9a\xc6\x83\x4b\xf4\xdf\xb7\xd0\xdf\x8b\xf9\xcb\xcb\x8e\x8c\x51\x28\xb0\x77\xbd\x6d\xf2\xa2\x77\xec\xc7\xbe\x26\xfc\x6a\x29\x7c\x55\x72\xbb\x73\xa5\x58\x62\x6e\xd3\xec\x65\xab\xcc\x0c\xbb\x65\x8c\x6d\x18\xf8\xae\x61\x7a\x3f\xb9\x59\x8c\xab\xeb\xc9\x16\x3e\xae\x9e\x48\x7e\xed\x03\x3d\x57\x13\xe7\x35\x42\x07\xce\xb6\xe0\x81\x43\xe8\xd5\x4e\x55\xc8\xb3\xee\x0a\x1f\x3a\x63\x74\xa4\xca\xd0\xe1\xf5\x75\x36\x23\xe5\x00\x22\xb0\x85\x66\xee\xaa\xab\x85\x66\x4a\x5d\xdc\x42\x89\x37\x4a\x2d\xb4\xd3\x6b\xa1\x73\x17\x42\x9a\x68\xa0\xbc\x89\x0c\xab\x8b\xdb\x28\xf9\x16\xa9\x8d\x76\xb9\x6d\x74\x72\xf2\xcc\xe4\xc5\xc9\x95\x5b\x69\x67\x59\x2b\x89\x4d\x73\xf7\xb6\xd3\xd8\xdb\xa4\x76\x1a\x74\xdb\xe9\xdc\xcc\xc5\xa9\x73\x67\x2f\xac\xdc\x50\xc9\xb2\x86\x72\x0a\xef\xde\x96\x1a\x0f\x9c\x75\xb7\x4f\x4e\x9c\xac\x67\xd6\xdd\xae\xa9\xd9\xee\x6d\xa3\xf4\x9b\xa5\x36\x4a\x7a\x2b\xd3\xc4\xc5\x13\xb7\xaf\xdc\x48\x3b\xca\x97\x26\x66\x9a\x74\x6f\x2b\x4d\x1f\x27\x47\xe9\xe1\xc4\xb8\x67\xf2\xdc\x1a\x60\x28\xc9\x77\xaf\x86\xd1\xf4\xe5\x18\xf9\x42\x8c\x7e\x36\x16\x7f\xcc\x33\xdc\xdf\x15\x9b\x51\x6d\x21\xd8\x5a\xd0\xb8\xae\x85\xd5\xf9\xae\xf3\x67\x1c\xcb\xdd\x39\x96\x53\x1c\xdb\x47\xd1\x0a\xd9\xa2\xa1\x17\x6c\x8b\x55\x61\x6e\x4e\x7f\x50\xb3\x84\x08\x41\x52\x83\xdb\x06\x27\x3b\x2e\x9a\x72\xc4\x23\xce\x00\x71\x85\x54\xb6\xe1\x96\x99\x52\x4e\x19\xa6\xa2\x3d\xa8\xe6\x8b\x39\x07\xcd\x5c\x5e\x30\x72\x9e\x81\xce\x6a\xc3\x2a\xc8\x7a\x78\x7c\x78\x38\x67\x64\xd4\xdc\x82\x61\xd9\x01\xd6\x1a\xeb\xd6\x21\x6b\xc9\xb2\xb5\xbc\x6f\xad\x69\x39\xd5\xb2\xf5\x8c\xa5\xa9\x66\x66\x61\x28\x67\xcc\xcf\xeb\x85\xf9\xe1\xfb\xc4\x7f\x1f\x7b\xe0\x48\xc9\xd2\xcc\xf1\x4b\x7a\x3e\xb3\xb0\x94\x52\xdc\xd6\x08\xfe\x39\xc1\x7b\x46\x36\x1b\xdf\x71\x3d\x39\xd4\x88\xd9\x38\xfc\x1c\x56\xd2\x43\xf4\xfb\xd7\xd1\xb7\x35\x64\x3d\xa6\x6a\xb3\x1e\xef\xd1\xed\x05\xf6\x4e\xdd\x30\xc7\xe2\x81\x2d\x15\x6a\x45\xa6\x6a\xb3\x22\xbb\xa9\xa5\x12\x6f\x6f\xcc\x9a\x1c\xae\xd1\x9a\xec\xa6\xb6\x4a\xbe\xbb\x51\xab\x72\xb4\x66\xab\xb2\x9b\xda\x6b\xec\xbd\x0d\x5b\x97\x63\xb5\x5b\x97\xdd\xd4\x62\xe3\x81\xb3\x31\xdc\xca\x1c\xae\xd1\xca\xec\xa6\xb6\x4a\xbf\xb3\x41\x6b\x73\xa4\x56\x6b\xb3\x9b\x5a\xeb\x8a\xb0\x3a\xf7\x92\xdd\x74\x34\x31\xec\x3d\xe1\x3a\xf6\xbf\xae\xfe\xd5\x3d\xec\x11\x96\x15\x8c\xd5\x96\x1a\xab\x3f\xda\x5c\x6b\x8c\x37\xcf\x58\xb5\xf8\x69\x0e\xfd\xf0\x66\xfa\xbd\x58\x59\xd0\x2d\x35\xab\x88\xdf\xdc\xd1\xb6\xfc\x04\x65\xdb\x0a\x02\x35\x71\x4a\x14\xad\xaa\xa2\x7b\xf4\x5a\xbf\x25\x9d\x57\x0d\xb8\x7a\xad\xb0\xe6\xee\x5b\x59\xb9\xd5\x8a\x16\x87\x7e\x0b\xfa\xad\xb6\xe9\xb7\xd2\x8f\x49\xb3\x62\x64\xd9\x29\x6e\xd8\xf4\x48\xac\x74\x9e\x1b\xf5\xe4\xc0\xa9\x6e\xf7\x4d\x45\x9c\xea\x5e\x79\xa7\xba\xef\x49\x90\x1b\xab\x59\x3c\x0f\xd1\x57\x24\xe8\x17\x25\xb1\xfd\xcd\x01\x62\x7b\x6f\xa5\x48\x6e\x09\xb0\x66\x20\xb3\x8f\x42\x66\xff\xeb\xe4\x88\x98\x58\xfb\xc8\x1e\x3e\xb1\x52\x64\x90\x24\x43\x27\x96\xf7\x2e\xcd\x1a\x6e\xa7\xc3\x27\xd6\x0e\xba\xbd\x72\x62\xf9\x8f\x2f\x33\xdd\x5e\x2c\x7d\xa4\x6e\x0d\x96\xda\xfb\x63\xea\xc9\xc1\x26\x5b\xc4\xc3\xea\x38\x39\x4a\x0e\x57\x7c\x29\xea\x6a\x60\x7c\x1b\xc2\xbe\x0d\xaf\xef\x69\x76\x0c\xa7\x85\xa1\x76\x88\x1c\xf4\x0d\xb5\xf6\xcd\x03\x6e\xaa\x45\x39\x0f\x92\x3f\x91\xc4\xf6\xd4\x13\xdb\xfb\x43\xff\xfa\x40\xb9\x3d\x64\xf6\x5d\x30\x1b\x20\xb3\x87\xcc\x1e\x32\x7b\xc8\xec\x21\xb3\xbf\x12\x64\xf6\x51\x7e\xf5\xd3\x1f\x96\xac\xdf\x1d\x21\x42\x7b\xdf\x16\xb8\x2e\x08\xcd\x00\xc6\xc0\xc4\xa8\x6e\x70\xb7\x7c\xcf\x18\x8a\x63\xa2\x9c\x37\xd3\xfb\xc8\x1e\x3a\x96\x18\xf1\xd0\xca\xf5\x32\x90\xf1\xee\x59\x8e\x64\x22\x07\x26\x9f\xdf\x48\x12\x55\x81\xc9\xb0\xfb\x19\xa1\x6f\xd9\x18\xff\xc5\x3a\x49\x36\xe1\x6e\x74\xdd\x0b\x96\x63\x58\x7f\xb6\x57\xf1\x30\x3f\xe5\xdc\xda\x69\x9b\x5f\xec\xed\x96\x8d\x56\xac\x4e\x21\xab\x53\xc7\x4c\xe7\x5f\x6c\x22\x4a\xf5\xe9\xec\x1c\xee\x3e\xbe\x89\x7e\x47\x3a\xdc\xdd\xbe\xe2\xe1\xae\x3f\x8f\x6f\x0c\x00\xa2\x2d\x39\xd6\xed\x2a\x3e\xf8\x1a\xc9\x42\xda\x19\x76\xb4\xeb\x37\xf6\xcd\xc1\x8b\x66\x4b\x0e\x75\xc1\x0b\xc1\x0b\xdb\xfd\x4d\x49\x7f\x4a\x9a\x17\x63\x35\x1f\xee\xfa\x13\x24\x1e\xb4\x87\xc0\xb1\x2e\xa6\x22\x76\x12\xab\x63\x7a\xfc\xcb\xed\xe4\x89\x9e\xe9\x61\x64\x35\x8b\xfe\xed\xed\xf4\x7f\x4b\x59\x20\x12\x2b\x67\x81\x38\x6b\x64\xb5\xe4\x93\xa4\x14\x10\x46\x16\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\x90\xf5\x01\x59\x1f\xea\xce\xfa\x70\x0f\x39\x2c\xc8\xc7\x5e\xb2\x9b\x93\x8f\x21\xb2\x8b\xec\x0c\x27\x1f\x46\x36\x9a\x94\x0f\xa7\xc2\xb9\x47\x2f\xdd\xb6\x8c\x7b\x18\xd9\x8a\x7c\x0f\xbf\x23\xa1\xc3\x27\x7a\xf9\x1e\x38\x3f\xd8\x54\x96\xec\x21\x4a\x82\x20\x36\xfc\x87\xc8\x41\xb2\xbf\x82\xd6\x0d\x90\xfe\x9a\xda\x10\x68\x2e\x0c\xcd\xfd\xef\x1e\x72\x40\x8c\xd0\x51\x32\xcc\x47\xe8\x4e\x52\x6b\xeb\x0a\xaa\x37\xca\xa9\x9e\x07\xc8\xeb\xb8\xfd\xa8\x10\xeb\xec\x27\x7b\x25\xb1\x4e\x1d\xf7\x37\x9b\xd3\x21\xa2\xc9\x91\x7c\x54\x22\x6e\x37\x3a\x52\x2b\x49\xb7\x66\xcc\x89\x89\x12\x97\xe5\xb8\x27\xbc\xdf\x5b\x30\x65\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\xc0\xc8\x3a\x8f\x91\xcd\x47\xec\x03\x14\x86\x05\x92\xc1\x58\x60\x0b\xdd\x2c\xd6\x5f\x7f\xeb\x1e\x19\x22\x98\xbe\x4c\x4a\xd4\x8a\x3f\xe0\xf6\xc9\x29\xc7\x89\x6f\x50\xf1\x65\x78\x72\xda\x47\xa9\x3b\xcc\xea\x16\x7e\x2d\x29\x1d\x23\xd7\x1c\x7d\x69\x1b\xb9\xae\x4c\x73\xe4\x46\x7a\xf8\x1f\xdb\xe8\x1f\x48\x91\x1e\x6e\x08\x8a\xf4\xc0\xf5\x46\x92\xa6\x39\x7a\xf4\xb1\x46\xe3\x3b\x5c\x68\x82\xe2\x35\x29\xdd\x8e\x68\x8a\xc4\xbf\x73\x55\x59\x4e\xce\xc0\xa8\x0e\x6c\xfc\x6c\x2e\x97\x69\x03\x38\x5f\x59\xc0\xf9\x55\xab\x08\x9c\x9b\x14\x63\x47\xc5\x8b\xbf\x2d\xc5\x6d\x78\xa2\x1f\xb7\x81\x1f\xa6\x94\x85\x6c\x88\x7e\x6c\x23\x5a\x03\xa2\x35\x20\x5a\x03\xa2\x35\x20\x5a\x03\xa2\x35\x20\x5a\x43\x70\xb4\x86\x88\x3e\xf3\xe9\x37\x4a\x9a\x89\xde\xb0\x40\x0d\xec\xe3\x7f\xad\xec\x5f\x15\xe9\xb7\x1f\x4e\x55\x5d\x67\x53\xb4\x74\xcb\x17\xea\x4f\x15\x15\x17\x19\x25\xc3\x74\x28\xb1\xcb\x73\xa5\xda\x54\xe6\x4a\x65\x64\xdb\xe1\x45\xf5\x27\x9b\x48\x3c\x88\x68\x38\xc9\x07\xdf\xb4\x89\xfe\x37\xc9\x75\xbb\x3f\x34\x7d\x0c\x9f\xcb\x37\x2e\xcb\x1d\x63\x64\x57\x23\x15\xd3\xf9\xf0\x8e\x1a\xa6\x43\x41\x1d\x55\x3d\x47\x4c\x60\x73\x54\xcd\x11\x13\xd0\x1c\x33\xa5\x2e\x6a\x8e\xc4\xcb\x64\xc7\xfe\xf0\x44\x30\x42\x0b\xb4\x3c\x0b\x4c\xd7\x34\x48\xf2\x55\x41\x39\x84\x56\xca\xf6\xc2\x9b\xe4\xe6\xa0\x54\x2f\x5d\xd3\x28\x63\xaf\x0e\x4a\x50\xb2\x62\x4a\x17\xde\x2a\x5b\x03\xf3\xb9\x74\x4d\xb3\x8c\x07\x4e\x9e\xea\x79\x5b\x02\x26\x0f\x4f\xda\xd2\x35\x0d\x92\x7e\x85\xd4\x20\x03\x35\x24\x67\xe1\x2d\x72\x53\x40\x66\x96\xae\x69\x92\xe9\x23\xe4\x10\x3d\x98\xd8\xef\x19\x09\x37\x57\x1a\x09\x2b\xa7\x5f\x99\x25\xf7\xd3\x67\xc6\x9f\xe1\x1a\x0c\x69\x39\xc1\xc9\x5d\xe7\xcf\x28\x6e\xae\x94\x9a\x72\x94\x30\x03\x21\x20\xed\xc7\x47\x36\x93\x6d\xd5\x6d\x08\x37\x13\xdd\x2b\x37\xd3\x57\xd7\x6f\x4a\x6c\xab\x6a\x4a\xac\x4e\x9e\x9d\x56\x98\x14\x81\xcd\xb2\xb2\x49\xb1\xad\xaa\x49\xd1\x35\xcd\x92\x78\x6d\x03\xa6\x45\xa2\xba\x69\xd1\x35\x0d\x93\xfc\x9d\x86\x4c\x8c\xbe\x95\x4c\x8c\xae\x69\x9c\xb1\xd7\x37\x66\x6a\xf4\xaf\x68\x6a\x74\x4d\xf3\x8c\x07\x4e\xaa\x10\x93\x23\x51\xdd\xe4\xe8\x9a\x86\x49\x3f\xdc\x88\xe9\xd1\xbb\x82\xe9\xd1\x35\x4d\xd3\xac\x09\xd2\x60\x7e\xb6\x76\x58\x2e\xff\x7d\x13\xb9\x29\xd0\x72\x71\x22\xd7\xbd\x74\x13\x7d\x5c\x1a\x17\xdb\x56\x8e\x5c\xc7\x46\xc4\x75\xe5\x02\x8f\x96\xc4\xab\xeb\x02\xbd\xc3\xcf\xaf\x2a\x4b\xf6\x16\x12\xa5\x8e\x35\xec\x0d\xcb\x94\x0f\x2d\x89\x4d\x07\xfd\x03\xf4\x0f\xad\xd4\x3f\xa4\xdf\x2f\x1d\x8c\x0c\xd5\x1e\x87\x8e\x4d\x81\xeb\x2b\x8e\x48\x10\x7d\x0e\x33\x0e\x07\x25\x6d\x3a\x28\x79\x6d\x2f\xb9\xc5\x35\x15\xdc\x71\x52\xb0\x17\x8d\x5c\x29\xaf\x65\x72\xaa\x9e\xb7\xe8\x4f\x12\x54\x0e\x5a\xbd\x7b\xe5\xf8\x73\x33\x5e\x21\x77\xf3\x42\x4e\xb0\x42\x92\xc3\x7e\x40\xba\xc0\x0b\x4e\x19\xe6\x44\x2e\xe7\xc9\x30\xa3\x9b\xfd\xad\x89\x58\x37\xbd\x40\xee\x10\xe3\xef\x14\x39\xc9\xc7\x1f\xcf\xe8\x19\x3a\xfe\x02\xdf\x3d\x92\xa0\x00\xf7\x84\x8f\xc9\x3d\x74\xac\x72\x4c\x06\xd6\xa7\x7c\x90\xc2\xef\x18\x7e\xc7\xf0\x3b\x86\xdf\xf1\x9a\xf1\x3b\x9e\xee\x18\xbf\xe3\xd5\xf3\x30\xe9\x18\x87\xe7\x69\x38\x3c\xc3\xe1\x19\x0e\xcf\x70\x78\x86\xc3\x73\xfb\x1d\x9e\x23\xdf\x6d\x4e\xc3\x83\xba\x0b\x3d\xa8\xa7\x3b\xdd\x83\x7a\xfa\x0a\xf4\xa0\xa6\x6f\x99\xf6\x53\xb0\x57\x82\x19\x8b\xbe\x64\x9a\xbe\x60\x9b\xcf\x64\x52\xf5\x31\x99\x64\xbc\x3a\x8e\xe9\x70\xf2\x82\x38\x68\xe0\x11\xe0\x11\xe0\x11\x6b\x87\x47\x20\x0e\x1a\xe2\xa0\x01\x0b\x00\x0b\x00\x0b\x00\x0b\x74\x04\x16\x40\x1c\xb4\x6e\xdc\xc5\x23\x0e\x5a\x2b\xe2\xa0\x65\xc8\xed\x42\x27\x30\x41\x8e\x71\x9d\xc0\x41\xb2\x9f\xec\xad\x5b\x27\x10\x89\x44\xa0\x31\x0d\x6d\x65\x55\xca\x9d\x19\x7e\x28\xc9\xbe\x6e\xf4\x72\x08\x2c\xe3\x0d\x37\xcb\xf9\x04\x5a\x46\x1c\x04\x20\xb8\x8d\x4c\x92\x13\x15\x5a\xac\xdd\x64\xb4\xee\x36\x87\x08\x2b\x4c\x84\xf5\xb3\x1e\x72\x52\x8c\xee\x23\xe4\x10\x1f\xdd\x7b\x49\x23\x2d\x4d\xa6\x84\x04\x32\x4d\x8e\xfb\x12\xc8\x06\x8b\x9a\x16\xe1\x27\x4e\x90\x09\x29\xfc\x44\x83\x65\x35\x9b\x8b\xa0\x05\x13\x2e\xf9\x49\x29\x2f\x41\x7f\x60\x5e\x82\x65\x93\x6f\x7b\x70\x8e\x82\x16\x4f\x43\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\x3a\x70\xba\xce\xe3\x74\x9d\x9c\xaf\xa0\x05\x18\xa1\x8b\x72\x17\x7c\xb0\x97\x28\x55\x75\x52\x6e\x1e\x83\x97\xf5\xd2\xef\x4b\x79\x0c\x7a\x03\xf2\x18\x2c\xd7\x48\xf9\x2e\xef\x2d\x46\x25\x6b\x34\xbf\xc1\x7d\x11\xd1\xc3\x26\x7d\xff\x5b\x30\xbd\xe2\xef\x95\xb0\xf8\xf6\xe0\xbc\x07\xcb\xc6\xdb\xd6\xb2\x48\x00\x80\xe4\x5d\x02\xc9\xdf\xd1\x81\x90\xbc\xc9\x98\x01\xad\xe0\xda\x2f\xdd\xb4\x3c\xdf\x6e\xd0\x41\x92\xcc\xb2\x5b\x3c\x47\x90\x57\x01\x79\x15\x90\x57\x01\x79\x15\x90\x57\x01\x79\x15\x90\x57\x21\x38\xaf\x42\x0b\x4c\x81\xf4\x57\x24\xe3\x79\x38\x24\xc7\xc2\x32\x03\xe1\x26\x29\x98\x50\xeb\xec\x03\x84\x14\xea\x3a\xbb\xa3\x6d\xdb\xd1\xd0\xf0\x42\xad\xe0\x3d\x2b\xc6\x3a\xac\xbc\xb5\x0d\x61\x87\xbe\xbb\x99\x0c\x84\x51\x1b\x37\x5a\xe1\x1f\x6e\xa6\x2f\x94\xe2\x0f\x0d\xad\x18\xad\x70\xd9\x82\xa0\x54\xc7\x38\x2d\x89\x62\xd8\xc5\x54\xe3\xe3\xd2\xc2\x3c\x12\x16\xdd\x70\x59\x47\xf4\xae\xc8\x37\x5a\x12\xf5\x10\x94\x03\x94\xa3\x93\x28\x47\xfa\x5b\xd2\x0c\x3a\x58\x73\x94\xc4\x65\x53\x69\xdb\x0a\x46\x0e\xa2\x27\x62\xb6\xc2\xd4\xe9\x20\x53\xe7\x0f\x13\xe4\x09\x9e\xa9\x63\x64\x2d\xfa\xce\x04\x7d\x9f\x64\xcf\x6c\x0b\xf1\xdd\x37\xb2\xc9\xad\x92\xbb\xbe\x91\xbd\xd2\x62\x25\xde\x4d\x0e\x89\xd1\xb6\x87\x8c\xf1\xd1\x36\x48\x92\x64\x47\xf8\x68\x33\xb2\x91\xb8\x3d\x4c\x86\x8f\xb1\x04\x55\x96\x8d\x31\x23\x8b\x38\x88\xd0\x33\x43\xcf\x0c\x3d\xf3\x1a\xd5\x33\x23\x0e\x22\xe2\x20\x42\x48\x0d\x21\x35\x84\xd4\x10\x52\xaf\x6d\x21\x35\xe2\x20\x42\x99\x8d\x38\x88\xab\x14\x07\xf1\xdb\x09\x72\x9d\x84\x4f\x6c\x2d\x5f\xe4\x3b\x07\xfa\xb9\x04\xfd\xb2\x84\x51\x76\x86\x62\x94\x8b\xce\xad\xc9\xfe\x32\x9c\xe2\xfe\xf9\x4a\xc3\x2a\xcf\x24\x27\x04\x56\x39\x4c\xc6\x39\x56\xd9\x43\xc6\xc8\x48\x2d\x58\xc5\x7d\xe3\x48\xf0\xca\x1d\xe1\x78\x25\x49\x77\x04\xe0\x15\xb7\x16\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xc0\x2c\xed\xc2\x2c\x72\x1e\x50\x53\xf3\x78\x04\x5b\x10\x4d\x83\x2d\x47\xf5\xe6\x01\x3d\xef\x17\x72\xc2\x2b\x44\xce\x03\x1a\x78\xc1\x95\x06\x61\x1a\xcc\x03\x1a\xf8\xee\xab\x98\x07\x34\xb0\x3e\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\xed\x02\x33\x3f\x4c\x90\x27\xfb\x60\x46\x5c\xff\x40\xc9\xb0\x55\x8b\x3e\x9e\xa0\x7f\x29\x01\x99\x5d\x61\x40\x46\xdc\x7c\x27\xbb\x39\x39\x20\x83\x18\xe9\x87\x2b\x0d\xc0\xdc\x4f\x26\x05\x80\x39\x4a\x0e\x73\x00\xb3\x8f\xec\x21\x63\x35\x00\x18\xe9\x9d\x23\x01\x2f\xe7\xc2\xc1\xcb\x20\x4d\x2e\x07\x2f\x52\x3d\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\xda\x05\x5c\x3e\x97\x20\xd7\xba\xc0\xc5\xd2\x32\xa6\x66\x5b\xf4\x23\x09\xfa\x87\x12\x69\xe9\x5b\x99\xb4\x5c\xe0\x77\x25\x15\x1f\xb1\x88\xbf\x5c\x69\x6c\xe5\xa9\xe4\xa8\x60\x2b\xfb\xc9\x5e\xce\x56\x86\xc9\x10\xd9\x15\xca\x56\xc4\xcb\x46\x02\x55\x6e\x0f\x87\x2a\xfd\xb4\xb7\x12\xaa\x88\x0a\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\x80\xa6\xb4\x8b\xa6\xfc\x24\x41\x6e\xf0\x69\x8a\xb9\xa8\x67\x34\x35\x93\x61\x5f\x74\x8b\x7e\x35\x41\xff\x46\xa2\x2a\x83\x61\x54\x85\xdf\x3d\x21\xee\x4e\xee\x90\xe9\x8a\xfc\xcb\x95\x46\x59\x54\x72\x4a\x50\x96\x63\xe4\x08\xa7\x2c\xfb\xc9\x5e\xb2\xbb\x06\xca\x22\xbf\x74\x24\xb4\x65\x26\x9c\xb6\x0c\xd1\x5d\xcb\x69\x8b\x5c\x11\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x17\x50\x97\x76\x51\x97\x2f\x27\xc8\xa6\x0a\xea\x62\xd1\x8f\x25\xe8\x1f\x4b\xb8\xa5\xbf\x26\xdc\x92\xdc\xb6\x8c\xb3\x5c\x69\x80\xe5\x69\xe4\x98\x00\x2c\x07\xc8\x3e\x0e\x58\x46\x48\x8a\x0c\xd6\x0a\x58\x22\x21\x2b\x53\xe1\x64\x65\x3b\xed\xab\x42\x56\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\xda\x85\x54\x1e\xeb\x25\x4f\x71\x91\x0a\xff\x75\x58\x6c\xe0\xf2\x6a\xd1\xa2\xef\xe8\xa5\xef\x5d\xef\xa3\x95\x92\xf3\xcd\x28\x64\xf5\x45\x3d\x5b\x52\x73\xf2\x2b\xa9\x9e\x7d\x76\x82\x17\x70\x87\x5a\x4c\x29\x59\xad\x68\x6a\x19\xb6\x08\x8c\x7b\x1f\xee\x01\x5e\xca\x80\xbf\x1d\x2e\xdb\xdf\x18\x45\xcd\xe9\x20\xbd\x60\xd9\x9a\x9a\x4d\x25\x77\x5c\xf6\xd3\xc2\x7b\x65\x9f\xd1\xad\x2b\x4e\x12\x73\x89\xcc\x08\x62\x33\x45\x6e\xe3\xc4\x66\x82\x1c\x23\x47\x1a\xc8\x07\xcf\xc7\xd4\x24\xb3\xa6\x42\x11\x4e\x6f\x30\xc2\x79\x02\x25\xbc\x62\x82\xe3\x9c\x0e\xe7\x38\x3b\xe8\xf6\x4a\x8e\xe3\xf5\x05\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x0e\x48\x4e\xbb\x48\xce\x9f\xf5\xfa\x2e\x49\x82\xe4\x68\x85\x6c\xd1\xd0\x0b\x76\xa3\x20\x67\xd2\xbd\xbf\x05\x20\xc7\x2b\x1b\x20\x67\xd5\x41\x8e\xd7\x17\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\xed\x02\x39\x1f\xe9\x25\xd7\x55\x80\x1c\xf6\x95\xb6\xe8\x1b\x7a\xe9\x9b\x25\x8a\xf3\x40\x8d\x14\x87\xdd\x1c\x11\xc1\xe9\x93\x09\x0e\x2b\x17\xf4\x26\x42\x7a\x73\x5b\x38\xbd\xe9\xa3\x89\x65\xf4\x86\x57\x00\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\x06\xe4\xa6\x5d\x39\x96\x7a\xc9\x8d\xe5\xe4\x86\x37\x96\xc9\xab\x4a\xdf\xdd\x4b\x3f\x20\xe1\x9b\xc5\xda\xf0\xcd\x19\x56\xc2\x79\xf6\x43\x44\x0c\x67\xa7\xc4\x70\xfc\xc2\x01\x72\x22\x04\x39\x67\xc2\x41\xce\x4e\x3a\x50\x09\x72\xfc\xce\x00\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x69\xa3\x0e\xa7\x22\x34\x4e\xc1\x43\x23\xf4\x77\x7a\xe9\xef\xd5\xef\x51\xe5\xb1\x95\x88\x58\xce\x53\x24\x96\xe3\x95\x7d\x46\xb7\x6c\xa0\x9b\xb6\x7a\x50\x79\x6d\x0f\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\xd3\x2e\x72\xf3\x07\x7d\x64\xb8\x1a\xb9\x19\x7e\x8e\xf7\xef\x87\xe4\x58\xc7\xff\xa5\x8f\xbe\x7d\xf5\x63\x1d\x27\x82\x80\x4e\xb6\x2c\xea\x31\xd0\x0e\xa2\x1c\x03\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\xb4\x0b\xed\xdc\x4f\x9e\x49\x9f\x91\x78\xda\xd5\x3d\x74\x7d\x51\xb5\x17\xe2\xe3\xce\x93\xd9\xc6\x92\x37\x27\xdb\xa0\x28\x56\xc6\x28\x6a\x83\x8a\x55\xca\x70\x1c\xc0\x4d\x67\x4d\xcd\x8b\xfd\x70\xd1\x34\xf8\x9b\x26\xae\xf1\x76\xa3\x49\x67\x79\x7f\x18\xf0\x08\xf0\x08\xf0\x68\xd5\xe0\xd1\xbb\xfb\xc9\xbe\x3a\xe1\x91\xf8\xf3\x43\xf4\xc7\x7d\xf4\xeb\x12\x43\x7a\x5f\x8f\xd3\xee\x12\x39\x2a\xb8\xcb\x94\x9b\x90\x3c\x5a\x82\x34\xe8\x1b\x25\xdc\xf0\x72\x3e\x61\xcc\xae\xf1\xad\xad\x81\x32\xcb\x5a\x2a\x3b\x95\xbc\x65\x65\xfe\x04\xf6\xb4\x9c\x3d\xdd\x1a\xcc\x9e\xae\xa6\x1b\x78\xc5\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\xc0\x9d\x1a\xe0\x4e\xfb\xc8\x1e\x3a\x96\x18\xf1\xb8\xd3\xf5\x1c\x38\x39\xb5\xf0\xf6\x0b\x89\xf5\xec\xcf\x32\x4d\x02\xaf\x02\xaf\x02\xaf\xea\x56\x5e\xf5\xd1\x3e\x92\xaa\x89\x57\xf9\xe9\xc0\x1a\xd3\x3a\x45\x9d\x0e\x2c\x58\xeb\x54\x96\x18\x0c\xbc\x09\x89\xc0\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xc0\x9c\xa0\x75\x02\x3b\x02\x3b\x02\x3b\x6a\x8e\x1d\xbd\xab\x9f\xec\xad\x8f\x1d\x35\x23\x75\x8a\x16\x20\xb5\x46\xea\xe4\xd5\x11\xe8\xa9\x6d\x52\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\x27\x60\xa7\x35\x8d\x9d\x56\x94\x3a\x79\xfb\x05\x48\x9d\x80\xab\x80\xab\xd6\x0e\xae\x7a\x47\x1f\xd9\x55\x1b\xae\x12\x09\xf3\xff\xad\x97\xfe\xee\xea\x26\xcc\xaf\x02\x99\xdc\xd4\xf9\x80\x4c\x48\x95\x0f\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\xc8\x04\x6d\x13\x60\x11\x60\x11\x60\x51\xe3\xb0\xe8\xb7\xfb\xc9\x58\x1d\xb0\xc8\x15\x36\xfd\x5d\x1f\xfd\x8a\xc4\x8c\xde\x55\x93\xb0\x29\x32\x62\xd4\xac\xa8\x29\x5e\x9d\x37\x81\x35\x35\x20\x68\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\x02\x67\xaa\x8b\x33\x8d\x91\x11\x9a\x4a\x0c\x7a\x9c\x69\x73\x99\x98\x89\x2d\x1a\x10\x32\x81\x4d\x81\x4d\xad\x1d\x36\xf5\x47\x7d\x64\xa4\x26\x36\xc5\xdb\xd0\xe4\x6f\x40\x7f\xa3\x8f\xbe\x4b\x22\x53\x8b\xb5\xa9\x99\xce\xb0\x12\xce\xb3\x1f\x22\x92\x34\xf5\x06\x22\x26\xff\x31\xd0\x35\x35\xa1\x6b\x3a\x13\xce\x9b\x76\xd2\x81\x4a\xde\xe4\x37\x3e\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\x13\xa0\xd3\x5a\x84\x4e\x00\x48\x00\x48\x00\x48\xdd\x0a\x90\x3e\xd0\x4f\xf6\xd7\x0b\x90\x5c\x85\xd3\xcf\xfa\xe8\x37\x25\x8e\xf4\xfe\x5a\x14\x4e\x11\x53\xa4\x66\x65\x4e\xb7\x86\x30\x28\xf0\xa7\x06\xb4\x4e\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\x60\x4f\xf5\xb3\xa7\xfd\x64\x2f\xdd\x9d\x18\xf5\xd8\xd3\x93\x65\xc1\x93\xbf\x61\x80\xea\x09\xd0\x0a\xd0\x6a\xed\x40\xab\x1f\xf4\x91\x43\x35\x41\xab\x22\x2b\x84\x2f\xc3\x8b\x46\xae\x94\xd7\x32\x39\x55\xcf\x5b\xf4\x9d\x7d\xf4\x8b\x12\xb8\x7a\x7e\x4f\x6d\x0a\xa8\x19\xaf\xb4\xbb\x79\x69\x27\x58\x69\x11\x89\xa1\x52\x81\x20\x2a\xf0\x89\xd0\x45\x35\xa1\x8b\xba\x27\x9c\x4d\xed\xa1\x63\x95\x6c\x2a\xb0\x1f\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\x80\xa9\xd6\x22\xa6\x02\x6d\x02\x6d\x02\x6d\xea\x56\xda\xf4\xbd\x7e\x92\x6e\x82\x36\xb9\x6a\xa9\x37\xf5\xd3\xe7\x5f\xe5\x43\xa7\x3f\xac\x45\x2d\xd5\x3a\xe2\xd4\xac\x70\x2a\x59\x3b\xaf\x02\xab\x6a\x40\x43\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\x05\x4e\xd5\x14\xa7\x4a\x93\xe3\xf4\x68\xe2\xb0\xc7\xa9\xb6\xc9\x72\xaa\xc0\xbd\x03\x94\x55\x60\x5d\x60\x5d\x6b\x87\x75\xbd\xa9\x8f\xec\xac\x8d\x75\x19\x59\x8b\xfe\xb4\x97\xbe\x4e\xd2\x51\x19\x35\xca\xa8\x8c\x6c\x44\xa2\xa9\x9b\x83\x21\x94\x91\x85\x44\xaa\x09\x89\xd4\x64\x38\x7a\x4a\x50\x65\x19\x7a\x32\xb2\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x6b\x11\x34\x01\x12\x01\x12\x01\x12\x75\x2b\x24\x7a\x79\x7f\x8d\x41\xc7\x8b\x46\xd6\x93\x3f\xfd\x75\x1f\xfd\x9c\xc4\x8a\xde\x51\x93\xfc\x29\x22\x52\xd4\xac\xd8\xe9\x29\xd5\x38\x13\x18\x53\x03\xd2\x26\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\x25\xf0\xa5\x3a\xf8\xd2\x08\x49\xd1\xc1\x44\xd2\xe3\x4b\xd7\x96\x09\x99\x8c\x2c\x64\x4b\x20\x52\x20\x52\x6b\x87\x48\xfd\x69\x1f\x19\xad\x95\x48\xd9\x5a\xbe\xc8\xb7\x3a\xf4\xbf\xf5\xd1\xf7\x4a\x48\xea\x72\xcd\xf2\xa5\x8b\x4e\x11\x11\xc9\x98\xfa\xaa\xe1\x25\xf7\x39\x90\x33\x35\x21\x67\xba\x23\x1c\x37\x25\xe9\x8e\x00\xdc\xe4\xb6\x3e\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\x13\xb0\xd3\x5a\xc4\x4e\x80\x48\x80\x48\x80\x48\xdd\x0a\x91\x3e\xd2\x4f\x0e\xd4\x0d\x91\x5c\x79\xd3\xbf\xf5\xd1\xbf\x97\x58\xd2\x07\x6a\x94\x37\x45\x4a\x92\x9a\x95\x39\x29\x61\x1c\x0a\x0c\xaa\x01\xb9\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x13\xf8\x53\x03\xfc\xe9\x00\xd9\x47\xf7\x24\xc6\x3c\xfe\x74\x43\x85\xec\xc9\xdd\x31\x40\xfe\x04\x72\x05\x72\xb5\x76\xc8\x55\xcd\xf9\xf0\x4c\xcd\xc3\x2a\x6c\x25\x37\x0d\xb6\x8e\x36\x9c\x0f\xef\xbc\x5f\xda\x09\xaf\xb4\x96\xe6\xc3\x0b\x7c\x22\xd4\x51\x6d\xcf\x87\x17\xd8\x0f\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\xe0\x54\x6b\x91\x53\x81\x36\x81\x36\x81\x36\x75\x2b\x6d\xaa\x39\x1f\x5e\x30\x6d\x6a\x26\x1f\x5e\xeb\x88\x53\x6b\xf2\xe1\x05\xd6\x17\xac\xaa\x6d\xf9\xf0\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\xc0\xa9\x6a\xc9\x87\x17\xb8\x77\x80\xb2\x0a\xac\x0b\xac\x6b\xed\xb0\xae\xcf\xf6\x91\xdd\x35\xb2\x2e\x51\xd8\x03\x25\xc3\x56\x2d\xfa\xaa\x3e\xfa\x61\x49\x51\xb5\x54\xab\xa0\x4a\x14\x72\x27\x2b\x24\x22\x21\xd5\xf6\x2a\x60\x4a\x7a\x12\x04\x54\x4d\x08\xa8\xce\x85\x83\xa9\x41\x9a\x5c\x0e\xa6\xa4\xf6\x07\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x02\x90\x5a\x8b\x40\x0a\x30\x09\x30\x09\x30\xa9\x5b\x61\xd2\x9f\xf4\x93\xf1\x06\x60\x92\x2b\x98\x7a\x41\x3f\xfd\x9e\xc4\x94\x3e\x54\x9b\x60\x2a\x6a\xa2\xd4\xac\x50\x2a\x11\xce\xa3\xc0\xa2\x1a\x10\x48\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x35\xc4\xa1\xc6\xc9\x01\xba\x2f\xb1\xc7\xe3\x50\x37\x96\x0b\xa3\xa4\x3d\x03\x04\x51\x60\x58\x60\x58\x6b\x87\x61\xbd\xa7\x8f\x0c\xd6\xc4\xb0\x2c\x2d\x63\x6a\xb6\x45\x7f\xd9\x4b\x1f\x95\xa8\x95\x59\x9b\x12\xea\x02\xbf\x3b\x22\x09\xd4\xad\x81\xc8\x49\x3c\x02\xda\xa7\x26\xb4\x4f\xb7\x87\x33\xa7\x7e\xda\x5b\xc9\x9c\x44\xc3\x03\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\xad\x45\xd8\x04\x60\x04\x60\x04\x60\xd4\xad\xc0\xe8\x0d\xfd\x35\x7a\xd0\x39\xc0\xc8\x55\x3b\xfd\x43\x1f\xfd\x73\x89\x1b\xbd\xbb\x16\xb5\x53\x84\xd4\xa8\x59\x99\xd3\x4d\x2b\x30\x27\xf0\xa6\x06\xf4\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\x60\x4d\xf5\xb1\xa6\xdd\x64\x94\x0e\x27\x86\x3c\xd6\x44\x65\x61\x93\xd8\x2c\x40\xd1\x04\x40\x05\x40\xb5\x76\x00\xd5\x17\xfb\xc8\x9e\x1a\x01\x95\xb9\xa8\x67\x34\x35\x93\x61\x56\x88\x45\x5f\xd3\x47\xff\xa7\x44\xa8\x9e\x5d\xab\xb2\x89\x97\x32\x21\x4a\x89\x48\xe1\x34\x50\x85\x36\xc9\x8f\x82\xd2\xa9\x09\xa5\xd3\x4c\x38\x7d\x1a\xa2\xbb\x96\xd3\x27\xb9\x03\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\x40\xa1\xd6\x22\x85\x02\x50\x02\x50\x02\x50\xea\x56\xa0\xf4\x67\xfd\xe4\x50\x23\x40\xc9\x55\x3e\xfd\x97\x7e\xfa\x8f\x12\x57\xfa\x70\x6d\xca\xa7\xc8\xa9\x52\xb3\x0a\xa8\xde\x1a\x98\x14\x78\x54\x03\x4a\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\x28\xb0\xa8\xc6\x58\xd4\x21\x72\x90\xee\x4f\xec\xf5\x58\x54\xbc\x5c\x11\x25\x6f\x1a\xa0\x8c\x02\xc8\x02\xc8\x5a\x3b\x20\xeb\x03\x7d\x64\xa8\x1e\x90\x65\xd1\xe7\xf5\xd1\x37\x4b\xe8\xca\xaa\x4b\x12\x15\x91\x16\x4a\x59\x89\x3b\x41\x04\xd5\x84\x08\x6a\x2a\x1c\x3c\x6d\xa7\x7d\x55\xc0\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\x13\x88\xd3\x5a\x24\x4e\x80\x46\x80\x46\x80\x46\xdd\x0a\x8d\xde\xdc\x5f\x9f\x3b\x9d\x27\x7b\xfa\x7e\x1f\xfd\xaa\xc4\x8e\xde\x53\x87\xec\xa9\x23\xf4\x4e\x37\xaf\xc4\x9d\xc0\x9c\x1a\x10\x3a\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\x81\x37\xd5\xc9\x9b\xf6\x90\x31\x3a\x92\x48\x79\xbc\x69\x4b\x80\xc2\x09\xd2\x26\x50\x2a\x50\xaa\xb5\x43\xa9\xde\xd1\x47\x6e\x5d\x99\x52\x3d\x44\xff\x4b\x1f\x7d\x5c\x02\x52\xef\xab\x05\x48\x79\xe0\xa7\x23\x90\xd4\x75\x41\x48\x0a\x28\xaa\x01\x14\x75\x3a\x1c\x45\xed\xa0\xdb\x2b\x51\x94\xd7\xe6\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x80\x51\x6b\x11\x46\xed\x23\x7b\xe8\x58\x62\xc4\xc3\x4a\xd7\xcb\x30\xca\xdb\x2f\x2c\xc7\x51\x80\x45\x80\x45\x80\x45\xab\x24\x69\xea\x25\x5b\x2a\x60\x91\x91\xd5\x2c\xfa\x9b\xbd\xf4\x15\x12\x20\x2a\xd6\xe6\xed\x76\xd6\xc8\x46\xe5\xea\xb6\x45\xe6\x3b\x46\x16\xde\x6d\xcd\x78\xb7\x9d\x0a\x47\x3c\xbd\x74\xdb\x32\xc4\x63\x64\x41\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\x40\x77\xd6\x24\xdd\x01\xa5\x01\xa5\x01\xa5\x59\x1d\x4a\xf3\xca\x3e\x12\x0f\xa0\x34\xae\x9a\xe7\xc7\xbd\xf4\x93\x12\xac\x79\x67\x4d\x6a\x9e\xa8\x50\x4d\xb3\x42\x9e\x6b\x2b\x40\x0f\x20\x4f\x03\x1a\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x9e\x7a\x00\xcf\x28\x19\xa6\x43\x89\x5d\x9e\x7c\x67\x53\x99\x7c\xc7\xc8\x42\xb9\x03\x26\x04\x26\xd4\x31\x4c\xe8\x17\xbd\xa4\xaf\x9c\x09\x15\xd9\xd5\x7c\x1d\x5c\x34\x72\xa5\xbc\x96\xc9\xa9\x7a\xde\xa2\x5f\xea\xa5\x7f\x2e\xd1\xa1\xe7\xf7\xd4\xa6\xe5\x99\xf1\x4a\xbb\x9b\x97\x76\x82\x95\x16\x91\xb8\x67\x8f\xc4\x7c\x02\x9f\x73\x46\xb7\xec\x53\x86\x39\x91\xcb\x79\xba\x41\x0b\x60\xa8\x41\xf5\xcf\x3d\xe1\x70\x68\x0f\x1d\xab\x84\x43\x81\xfd\x02\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\xb4\x16\x69\x11\xd0\x0f\xd0\x0f\xd0\xcf\xea\xa0\x9f\xc7\x7b\x2b\x23\xfc\x54\xa2\x1f\x8b\xbe\xb7\x97\x7e\x48\xa2\x3e\xff\xa9\x31\xe8\x13\x11\xef\xb9\x75\x05\xde\x03\xc7\xae\x26\xd0\xce\xf9\x70\xb4\x33\x4c\x87\xc2\xd0\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x0e\xa8\x4e\xbb\xa8\xce\x17\xfa\xc8\xf6\x10\xaa\xe3\x3a\x7c\xbd\xa9\x8f\x7e\x57\x82\x3b\x1f\xa9\xc5\xe1\xab\x25\x68\xa7\x59\xe7\xaf\x9b\x56\x00\x43\x80\x42\x0d\x38\x82\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x35\x0a\x84\x8e\x90\x43\xf4\x60\x62\xbf\xe7\x14\x76\xb3\xec\x14\x56\xb9\x6d\x80\x83\x18\x78\x12\x78\x52\xa7\xf0\xa4\xf7\xf6\x12\x5a\xc1\x93\x8c\xac\x45\x1f\xee\xa5\xbf\x2b\xb1\x23\xa3\x46\x61\x90\x91\x8d\x48\x0b\x94\x90\x91\x8f\x91\x85\xa7\x57\x84\x72\xa0\xc9\x70\xfa\x93\xa0\xca\x32\xfa\x63\x64\x01\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\x00\x7c\xd6\x22\xf0\x01\xb1\x01\xb1\x01\xb1\x59\x1d\x62\xf3\xa5\xde\xca\x30\xcf\x45\x23\x6b\x6b\xf9\x22\xdf\x3f\xd0\xf7\xf5\xd2\x0f\x4b\xe4\xe6\x72\xcd\xe4\xe6\xa2\x53\x44\x44\x04\x27\x59\x4e\x70\xdc\xd2\x41\x72\x22\x24\x39\x77\x84\x93\x9c\x24\xdd\x11\x40\x72\xdc\xde\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x69\x17\xd1\x59\x1e\xa4\xd9\xd4\x3c\x4e\xc1\x96\x45\xd3\x60\x8b\x52\xc3\x41\x9a\xcf\xfb\xa5\x9d\xf0\x4a\x6b\x41\x90\xe6\xc0\xe7\x00\xf8\xac\x7a\x90\xe6\xc0\x7e\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x01\xfa\x69\x17\xfa\xf9\x6a\x2f\xb9\xb9\x12\xfd\x88\xbb\x1e\x28\x19\xb6\x6a\xd1\xff\xd1\x4b\x3f\x26\x21\x9f\xa5\x5a\x89\x8f\x28\xe4\x4e\x56\x48\x44\xa4\x67\xb0\x8c\xf4\x48\xe5\x83\xf0\x44\x48\x78\xce\x85\x13\x9e\x41\x9a\x5c\x4e\x78\xa4\xfe\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x69\x17\xd9\xf9\x58\x2f\xb9\xbe\x9c\xec\x58\x5a\xc6\xd4\x6c\x8b\xbe\xb1\x97\xbe\x55\x42\x3a\x66\x6d\x48\xe7\x02\xbf\x3b\x22\x96\xd3\x2f\xb1\x1c\x51\x30\x20\x4e\x84\x10\xe7\xf6\x70\x88\xd3\x4f\x7b\x2b\x21\x8e\xe8\x08\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x1b\xd0\x9b\x76\xd1\x9b\xaf\xf5\x92\xad\x95\xf4\xc6\x5c\xd4\x33\x9a\x9a\xc9\xb0\xef\xba\x45\x3f\xda\x4b\xff\x48\xa2\x38\xcf\xae\x95\xe2\xf0\x52\x26\x44\x29\x11\xd1\x9c\xa1\x32\x9a\x23\x3f\x00\x54\x27\x42\xaa\x33\x13\x4e\x75\x86\xe8\xae\xe5\x54\x47\xee\x10\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x1d\xd0\x9d\x76\xd1\x9d\x8f\xf7\x92\x27\x07\xd2\x1d\x8b\xfe\x7e\x2f\x7d\xbb\x84\x75\xac\xba\xb0\x4e\x44\x3c\x67\xfb\x72\x9e\x03\x90\x13\x21\xc8\x99\x0a\x07\x39\xdb\x69\x5f\x15\x90\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\xd3\x2e\x82\xf3\xe9\x18\xd9\x30\xac\x16\x75\x6b\x98\xfe\xaf\x18\xfd\x83\x18\x59\xcf\xfe\x23\x1e\x9f\xd7\x6c\xe9\x13\x36\x31\x33\xe5\x0e\x77\x2b\xf9\xa4\x79\xcd\x9e\x98\x99\x72\x4a\x8d\x8e\x9e\x8c\x2f\x2b\x68\x7c\x59\x41\xe3\xb5\x14\x34\x9d\x27\xe7\x05\x30\x39\x4d\xa6\x38\x30\x39\x41\x26\xc8\xb1\x06\x80\xc9\xc4\xcc\xd4\x6d\xa6\x51\x2a\x9e\xd1\xad\x50\x64\x42\x5f\xb4\x8e\xf4\x8a\xa6\x54\xb3\x6c\x27\xa0\x1b\x05\x53\x9b\xd7\x2d\x5b\x8c\x38\xfe\x38\xdd\x18\xa6\x7f\x13\xa3\x7f\x15\x23\xd7\x07\x5e\x24\x1a\x5e\x2f\xcc\x19\x66\xde\x1b\xa7\xaa\xc8\x21\x9e\x54\x58\xc3\x07\xdd\xe5\x56\xb3\x03\xbb\x42\x27\x67\x45\x57\xdc\x46\x26\x79\x57\x1c\x23\x47\xc8\xa1\x26\xba\x22\xb4\x1b\xde\xbc\x8e\xec\xaa\xa1\x1b\x16\x47\x67\x35\x5b\x1d\x1d\xa6\x3f\x89\xd1\x7f\x8e\x91\xad\x81\x17\xdf\xe7\x5c\x15\xbf\xa1\x7c\x3e\x78\x33\x36\xb9\xab\x5a\x9f\xdc\x2d\xee\x9c\x98\x99\x72\x51\x46\x27\xce\x94\x22\xb9\x4b\x74\xcf\x59\x72\x86\x77\xcf\x29\x72\x92\xa4\x1b\xeb\x1e\xf7\x3d\x6b\x9a\x2c\x9f\x3f\x4b\x6e\xaf\xa3\x97\xf2\x25\x5b\x65\x3b\x93\xcb\xda\xec\x82\x61\x5c\x2a\x83\x4c\x16\xfd\xd5\x1d\xf4\xd5\x89\xb0\x2e\x1c\x17\xfb\x47\xd3\xf9\xe4\xbb\xa6\x91\x31\xa7\x5c\xd2\x0b\x59\xe5\x0e\xe7\x09\xf7\x88\x27\x9c\x90\x9f\x90\x3c\xcc\xee\x5d\xa9\x9b\x57\xba\xbb\xc3\xf1\x72\x1a\xe8\x15\xe8\x15\xe8\x15\xe8\x75\xcd\xa0\xd7\x74\xc7\xa0\xd7\xc8\x6b\xd2\x30\x01\x4d\x83\x80\x82\x80\x82\x80\x82\x80\x82\x80\xb6\x9f\x80\xa6\x01\x2c\xbb\x10\x58\xa6\x3b\x1d\x58\xa6\xaf\x40\x60\x39\xfd\xe2\x1e\xf2\x2c\x81\x2c\x32\x44\xe5\xc8\xe2\xe9\xe4\xa9\xe4\x9e\x6a\xc8\x22\x15\x8c\x17\x1c\x28\x90\x5a\x69\xdf\x5e\x0b\xc7\x78\xd6\x2d\xc1\x3a\xa9\x8d\xf4\x2a\x21\x91\x7a\x28\x5c\x22\xf5\x34\xfa\xeb\x8e\x44\x6a\x25\x14\xe2\x88\xa7\x56\xaa\xb0\xac\xa8\xe2\xaf\x47\x12\xff\xf7\xea\x30\x2c\xd2\x2f\x3e\x2e\x8a\xba\x32\x01\x39\x2a\x2e\x5b\x75\x06\x22\x90\x85\x4e\xe6\x89\x46\xd7\xcf\x1a\xd9\xa5\x38\xff\x5f\xa5\x27\x79\x17\xb9\xd0\x82\x41\x90\x7e\x43\x8c\x3c\x12\xa3\x0f\xc7\xe2\xaf\x89\xb9\x73\xe4\x17\x3d\x7c\xfd\x73\xbe\x06\x83\x5c\xd4\x98\x61\x7b\x3e\xb1\xe2\x96\xed\x40\x5c\xcb\x8d\x59\x1f\xb3\x9a\x52\x64\x3d\xc4\xcc\xbe\x94\x32\x51\x50\xf4\x82\xd8\xfb\x1b\xa6\x52\x2a\x78\xf8\x20\xab\x64\xcd\xa5\xf3\xa5\x82\x92\xd5\x4d\x8d\xcd\x63\xcd\xdb\x93\xf2\x35\x89\x7d\xbb\x9d\x4d\xb9\x6b\x82\x3b\xdb\x20\x65\xae\x64\x72\x33\xaf\x68\x1a\x19\xcd\xb2\x9c\x65\x5b\xb2\x56\x53\xca\xdd\xfc\x89\xdc\x7c\xe6\x5f\x45\xb6\x66\x4f\xe4\x72\xe3\xfc\x13\x9a\x35\x97\x14\xb3\x54\x60\xdb\x33\x36\xf1\x5d\xbb\xc1\x29\x4e\xcb\x26\x36\x88\xaa\xc9\xc7\x32\x7f\x13\x23\x73\x62\x42\xde\x47\xee\xe5\x13\xf2\x1e\xd2\x9a\xbe\x20\x97\xd8\x73\x46\x69\x96\xcc\x92\x8d\x27\x84\x4d\xd4\xba\x87\xe5\xd8\xc3\xc6\xa8\x46\x32\xe4\xea\x89\x4c\x46\x2b\xb6\xf4\x69\x8d\xaf\x33\x45\x63\xf5\xd7\x99\xe4\x07\xb7\x85\xad\x33\xa3\xc2\x5c\x55\x32\x46\x8e\x6d\x3e\x9d\x2f\xda\x8a\x6b\xce\xed\xe2\x96\x95\xd6\x9c\x13\x5e\x69\x6d\x5c\x7d\x00\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x01\x4c\x3b\x0f\x98\xce\x93\x33\x02\xcf\x4c\x92\x13\x1c\xcf\x1c\x21\x87\xc8\xc1\x06\x24\x5e\x17\x6c\xd5\x2e\x59\xa1\xa4\x22\x19\x4c\x2a\xb6\xd0\xcd\x62\xfd\xf5\x01\xc0\x6a\x53\x8b\xd5\x73\x7c\x8a\x5a\xf1\x4e\xff\xcf\x0e\x72\x2e\x2a\x39\xdd\xf0\x73\x0a\x6a\x5e\x7b\x88\xbe\x60\x07\xfd\x8f\xab\xc2\xb0\xce\x30\x5f\x74\xca\xf7\xee\x2b\x4b\xe9\xd8\x0d\x1d\x82\x91\x9f\x4b\x1e\xa2\xcf\x89\x2f\xb9\xdd\x70\xef\x05\x61\x34\x72\xc3\xf3\x41\x6e\xc0\xcd\xb2\x7f\xa9\x19\x3b\xa5\x28\x93\xec\xff\xdd\xbf\xe7\x55\xbd\x60\xab\x7a\xc1\x52\x32\xb9\x92\x65\x6b\xe6\x90\xf3\xfa\x19\x67\x6f\xa3\xe4\xf4\x4b\x9a\x32\xe0\x39\x99\x0f\xa4\x12\x57\xf1\x92\xe4\x71\x90\xb6\x89\x49\x8b\xf1\x82\x5b\x81\x3b\xbd\x0a\x78\xd4\x67\xd6\xad\x8a\x96\xe5\x75\xe0\x4f\x67\xfd\x5e\xb4\xdc\x27\x39\x16\x43\xc9\x62\x86\x80\x5a\x10\x76\x9b\x58\x20\x52\x89\x0d\xe2\xee\xb2\xd1\xf7\xfc\x9e\xb6\x11\xdb\xb0\xc5\x62\x6b\xf0\x62\xb1\x81\xae\x9f\xd7\x56\x9d\x6a\xc6\x5f\x14\x7a\x7a\x32\x66\x6a\xc5\x9c\x9a\xd1\xea\x99\x01\xc7\x9c\x7b\x3a\x64\x12\xe0\x2c\xa5\x73\xce\x52\x7e\xd8\xbe\x99\xd9\xd6\xb3\x94\xc6\x97\x81\x62\x69\xd5\x97\x81\xe4\xcf\x37\x85\x1e\xa2\x3a\x87\x1b\x61\x87\xa8\xe1\x07\x1a\x6d\x9c\xf8\x17\xc9\x79\x32\x23\x4f\xfc\x64\x9a\x1c\x6f\xc0\x2e\x3c\xc9\x5f\xea\x1c\x3f\xf2\xb0\x30\xc7\x43\xe6\x78\xfa\xdb\x31\xf2\xad\x18\xfd\x46\x2c\xfe\x35\xaf\x81\xde\x1f\xbb\x28\x6f\x5c\xf4\x82\x62\x89\xcd\x87\x32\xab\xcd\x19\x62\xdb\xee\xee\xad\xfd\x33\x25\x07\x67\xf0\x2a\x96\x34\x71\x4a\x30\xcb\xb6\x0a\x85\xa1\x82\x36\xaf\xf2\x86\x70\xf6\x2e\x6c\x97\xe4\x1e\xa5\x08\xca\xe6\x75\x81\x33\x72\xf5\x7c\x5e\xcb\xea\xaa\xad\xe5\x96\x9c\xa3\x09\xf9\xe0\xa9\xa0\xe7\x06\x9d\x2d\x0d\xdf\xfa\x2a\xf3\x26\xfb\xe8\x15\x35\x53\x37\xb2\xde\xd6\xcc\xff\xfe\xd9\x4b\x45\x1f\xed\x94\x2c\x56\x49\x79\xd3\xac\xb2\x3b\xdd\x17\x72\x1e\x32\x27\xd9\x2d\x3a\xbb\x81\xd7\x33\xaf\xa9\x85\xc0\x3a\x26\x28\xaf\xc2\x0c\xaf\x41\xd0\x56\xed\x2b\x31\xf2\xc5\x18\xfd\x5c\x2c\xfe\x69\xaf\x99\x1f\x8d\x9d\x94\xa2\x0a\x15\xd9\x2e\x55\xf3\xe0\xe0\x8c\x69\x14\xd5\x79\xde\x01\x33\x46\x4e\xcf\x2c\x0d\x8a\x36\x10\x38\xcc\x7d\x17\x3f\x2c\x11\xeb\xa5\xd1\xd4\xfe\x94\x22\x19\x8d\x59\xad\xa8\x15\xb2\x5a\xc1\xf6\x39\xb3\xa6\x18\x66\x71\x41\x2d\xb0\x37\x72\xb6\x17\xc3\x73\x6a\xce\x3d\x97\x49\x88\x5f\x13\xca\x9c\x5e\xe0\xfb\x04\xd3\x7b\x94\x9a\xcd\x72\x6e\x34\x2c\xb6\x80\x59\x1f\x31\x88\xc2\x07\x2c\xff\x26\x71\x12\x92\x52\x26\x75\x3e\x9c\xa5\x8a\x1b\xe6\xf2\x37\xe3\x58\x50\x1c\x4a\x8a\x83\x18\x3e\xd9\x0c\x7b\x21\x95\xd8\x24\xea\x73\xd2\x7d\x11\xab\xcc\x5c\x7d\xe9\x7a\xf2\xe2\xf5\xf4\x05\xeb\xe3\xbf\xf2\xa8\xcb\x57\xd7\xdd\xe3\x90\x52\x36\xa5\x16\x8c\xcb\xca\xbc\x6a\xce\xaa\xf3\x65\x07\xbd\xde\xbc\xd0\xcc\x39\xc3\xcc\xb3\xb6\x08\xac\xe9\xb9\x8a\x87\x57\xaf\x28\x1f\xcf\xee\x60\x2c\x8a\xb7\xd2\xd9\x40\xc9\xe8\x59\xff\xc8\x83\xd3\x73\x7e\x00\xe5\xb5\xae\xc5\xdd\xeb\xf8\xaf\x2e\x1f\x4f\x49\xcd\xe8\x92\x55\x77\xab\xe7\x9b\xf5\xe5\x0f\x4b\x29\x42\x12\xc0\x69\xad\xbc\x38\x0c\x88\x77\x18\x50\x86\x9c\x8e\x2f\x1f\x18\xd6\x21\x65\x20\xad\x66\x2e\xb1\x6f\x55\x21\xcb\xae\x52\x73\x39\xe3\x32\xbf\xa8\xa2\xe1\xc4\x71\x86\x33\xf4\xcb\x0b\x71\xdf\x60\xd6\x2b\xe9\x90\x32\x70\xca\x30\x35\xa9\x58\x25\xa3\x5a\x19\x35\xcb\xde\xde\x69\x1f\xbe\xd8\x8a\xf2\x2c\xb1\x7a\x2d\x2b\x70\xce\x2b\x23\x95\xd8\x5c\xac\x1c\x37\xb2\xa5\xf2\xb1\x9e\x88\xb1\xc2\x79\x21\xb7\x38\x4d\xa6\x24\xb9\x45\x8b\x51\x85\x12\x6c\x76\x5c\x43\x37\x8a\x66\x5a\x6d\xcb\x23\xfd\xf7\x1b\xc3\x2c\x8f\x43\x3e\xaa\x10\xd8\xa8\x9e\x9d\xc8\x91\xa2\x6a\x67\x16\x56\xdf\x1c\xb9\xa9\xb2\xa0\x21\x5e\xb1\x5d\xdc\xb3\xf1\x66\xf9\xc7\xbc\x66\xce\x6b\xf2\xaf\xdb\xe5\x5f\x79\xe5\xb5\x79\x3d\x33\x54\x79\x5d\xfa\x2c\x39\x43\xa6\x2b\x76\x39\xe3\xe4\x40\x03\x63\x6b\x86\x15\x0a\x33\x27\x6c\x2b\xd3\x41\x90\xe1\xd6\xe0\x69\x7e\x35\xdd\xc0\x07\xc8\x6a\xcf\xf2\xe9\x29\x72\x1b\x9d\x4c\x9c\xb8\xba\x87\xae\x2f\xaa\xf6\x42\x7c\x47\x41\xcd\x7b\x87\x94\x2b\x95\x95\x58\xcf\xae\x4c\x3a\xad\xfe\x70\x2b\xc0\xe2\xf7\xcf\x92\xe9\x3a\xc0\x22\x1f\xb8\x2b\x78\xea\x3e\x72\x96\xbe\x3e\xd4\x53\xf7\xf0\xca\x9e\xba\x77\x7b\xcf\x08\xde\x64\x85\xf9\xea\xae\x7c\x3f\xbc\x75\x21\x3e\x83\xf8\x0c\xe2\x33\x88\xcf\x20\x3e\x83\xf8\x0c\xe2\x33\x88\xcf\x20\x3e\x83\xf8\x0c\xe2\x33\x88\xcf\x20\x3e\x83\xf8\xac\x5e\xf1\xd9\x4b\x7a\x84\x1f\xdd\x08\xf7\xa3\x8b\x9d\x3b\x4d\xef\x25\x4f\x27\x4f\x6d\x90\x02\xad\xbc\x73\x8f\xc4\x5f\xf7\xb9\xe1\x28\xe8\x19\xf4\x69\xb5\xa3\xa0\x95\xab\x1c\xe0\xb1\xfb\x93\x50\xcd\xc9\x80\xe7\xb1\x1b\x42\x42\x8e\x87\xfb\xec\xb6\x89\x85\x08\x74\x71\x89\xe8\x64\xbe\x82\xc1\xde\x43\xee\x6a\xc9\x60\x00\xa0\x0d\x03\xb4\x7f\x17\x23\x0b\x62\x6a\xaa\xe4\x3e\x3e\x35\x9f\x4a\x5a\xd5\x1b\x24\x2f\xd4\x26\x73\x24\xeb\xab\x4d\x5a\xf8\xb8\x82\x38\x4c\x9a\x27\x9a\x74\x98\xd4\xc2\xe7\x35\xeb\xbd\xbb\xda\xab\x4e\xf2\xa3\xa1\xfe\xbb\xbb\x03\xfd\x77\x43\x56\xa0\xe9\x7a\x3c\x78\xdb\xba\x16\x01\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x76\x1e\x46\xed\x64\x1f\xde\xd5\x66\x17\x5d\xe4\xc5\xfb\x1f\x3b\xc8\x9d\xd1\x89\xed\x5c\x3f\xde\xb7\xee\xa0\x2f\xda\x10\x1a\x9e\x2d\xc0\x8f\x37\x4c\x68\x17\xe6\xc9\xdb\x56\xa0\xb3\x46\x7d\x79\x5f\xd8\xd3\x46\x8a\xdb\xa4\x37\xef\x6a\xaf\x14\xf1\x57\x84\x9e\xad\xec\x09\xf6\xe7\x0d\x99\x09\x13\x35\x78\xf4\xe2\xa4\x65\xcd\x9e\xb4\xfc\xb8\x9d\x73\xb4\xcd\x27\x2d\x4d\x7a\xf6\xae\xf6\x92\x90\xfc\x65\xa8\x6f\xef\x80\xe7\xdb\x1b\x76\xdc\x1a\x7e\xd8\xd1\xd6\x45\x00\xfe\xbd\xf0\xef\x85\x7f\x2f\xfc\x7b\xe1\xdf\x0b\xff\x5e\xf8\xf7\x06\xfb\xf7\xae\xb6\xfd\x91\xfe\x41\xa8\x87\xef\x91\x10\x0f\xdf\x10\xab\xe4\x58\xa8\x8f\x6f\xbb\x8c\x12\x78\xf9\x76\x9d\xb1\xd3\x59\xf8\x21\xd4\xcf\x77\xb5\x67\xfb\xf4\x69\x32\x45\x6f\x4b\x4c\x7a\x9e\xbe\x49\xd9\xd3\x77\xe5\xd2\xda\xe0\xeb\xfb\xe3\x3e\x72\xb6\x0e\xfc\xc8\x31\x75\x48\x66\xde\xdf\xeb\xa3\xbf\x1f\x1a\x43\xf0\xa5\x3d\xce\xa9\x64\x21\xab\x2f\xea\xd9\x92\x9a\x93\x29\xbc\xea\x29\x00\x56\x72\x85\x4e\x49\xa6\xdb\xb8\x67\xf4\x0d\xf0\x82\x07\x7c\x29\x54\x99\xb6\xc5\x28\x6a\x9e\x45\x6e\xd9\x9a\x9a\x4d\x25\x27\x2e\x37\x13\x11\xe1\x8c\x6e\xd9\x1d\xee\x3f\x3c\x7d\x89\xcc\x88\x09\x3b\x45\x6e\xe3\x13\x76\x82\x1c\x23\x47\x1a\x58\x21\xf9\x91\xc9\xe4\xa2\x56\x08\x17\x5d\xf7\x06\x4f\xcc\x27\x50\xc2\x2b\xd6\x09\x99\x92\xa6\x21\x08\x84\x20\x10\x82\x40\x08\x02\xd7\x8c\x20\x70\xba\x63\x04\x81\xab\x77\x82\xdb\x31\x4a\xc4\x69\x28\x11\xa1\x44\x84\x12\x11\x4a\x44\x28\x11\xdb\xaf\x44\x8c\x7c\x27\x3d\x0d\x69\x63\x17\x4a\x1b\xa7\x3b\x5d\xda\x38\x7d\x05\x4a\x1b\xe9\xcf\xfb\xc9\x5d\xd1\x42\x27\x57\xf7\xf6\xbb\xfd\xf4\xab\xa1\xec\xe9\x13\x0e\x7b\x92\x81\x53\xc1\x5d\x79\xdc\x88\x73\x2d\x07\x4f\x83\xbe\xe9\xc1\xcd\x2b\xe7\x43\xc5\xac\x17\xdf\xa6\x1a\x28\xb3\x9f\xa5\xb2\x53\xc9\x23\x4d\x61\x2b\x20\xab\x7a\x58\xf2\xe5\x8e\x88\x19\x09\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\x05\x5c\xb5\x36\x70\x55\x07\xc7\x8b\x07\xf9\x02\xf9\x02\xf9\xaa\x8d\x7c\xfd\x5b\x1f\x99\xa9\x9b\x7c\x85\x25\x58\x78\x4b\x1f\x7d\x47\x28\xf4\xfa\xaf\x35\x0a\xae\x56\x56\xa4\x45\x24\xb9\x3a\x11\xca\xae\xc2\xc3\x3e\x82\x60\x35\x28\xba\x5a\x75\x45\x24\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\x16\x38\xd6\xda\xe0\x58\x80\x4f\x80\x4f\x80\x4f\xab\x03\x9f\x9e\xbf\x9d\xdc\x13\x35\x7c\x72\x85\x57\x6f\xe9\xa7\x5f\x0f\x65\x50\x9f\xaa\x45\x78\xd5\x06\x00\xd5\xac\xf4\xea\x58\x93\xf8\x0a\xe8\xaa\x01\xf1\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x15\xb0\x55\x5b\xb0\x55\x47\x07\xf1\x01\x03\x03\x03\x03\x03\xab\x8d\x81\xfd\x63\x8c\xdc\xe4\x30\xb0\xa2\xae\x3d\x68\x6b\x05\x8b\x17\xe2\xb0\x2f\xfa\xf9\x18\xfd\x4c\x8c\x3c\xb1\xec\xc7\x78\x7c\x9e\x47\x98\x9c\x33\xcc\xbc\xd7\x98\xaa\xc2\x51\x43\xf2\x29\xf3\x9a\x3d\x21\x5f\x3d\x31\x33\x75\x1b\xfb\x25\xba\x20\x7a\xcb\x0a\x1a\x5f\x56\xd0\x78\x2d\x05\x4d\xeb\xe4\xac\xe0\x3a\xb7\x91\x49\xce\x75\x8e\x91\x23\xe4\x50\x03\x5c\xc7\x7d\xc7\x30\xaa\x43\x7f\x73\x1d\xe9\x5d\xa1\xb9\x5d\xd4\x48\xff\x3e\x46\xbf\x19\x23\xd7\x97\x5d\xe4\x61\xc3\x1b\x58\xf3\x97\x19\x2b\x62\xf8\x24\x7b\x2b\xdb\xde\xa1\x6f\x13\x33\x53\xee\xe6\xdc\xea\xc0\x6e\x28\x92\xbb\x44\x37\x9c\x25\x67\x78\x37\x9c\x22\x27\x49\xba\xb1\x6e\x70\xdf\xb3\x96\x44\xc8\xf4\xed\x67\xc9\xe1\x1a\x7a\x23\x53\xb2\x6c\x23\xef\x36\xb3\x54\x2b\xfa\xdd\x3b\xe8\xf3\x13\xd5\xba\x69\x9f\xd8\xfd\x98\xce\x37\xc6\xfd\xb0\xbb\x5c\xf7\x04\x2f\xd5\xad\xef\x49\xaf\xd4\xe4\x08\xbb\x2f\xa8\x1b\xab\xdd\xd1\xe1\xf8\x14\x79\x46\x01\x0a\x01\x0a\x01\x0a\xd7\x0e\x28\x44\x9e\x51\xe4\x19\x05\xaf\x03\xaf\x03\xaf\x03\xaf\xeb\x08\x5e\x87\x3c\xa3\xdd\x48\xc4\x90\x67\xb4\x15\x79\x46\x5f\xdb\x43\x9e\x23\x70\x84\x4d\x4c\x8e\x23\x72\xe4\x59\x64\xa1\x1a\x8e\xf0\x77\xe9\x43\x6a\x51\x77\x76\xa3\x1e\x99\x28\xe7\x0a\x6e\x8c\xff\x6a\x1b\xf9\x5a\xa0\xc5\xb3\x6e\x09\x16\x06\x6d\xa4\x57\x09\x77\xb6\x07\xc2\x75\x41\x67\xe9\x19\x57\x17\x14\xc0\x3d\x1c\x3d\x50\xb5\x4a\x2e\x57\x02\x25\x5e\x7c\x4d\x35\x06\xb2\x4d\x7c\x59\x14\xb5\x3a\xee\x18\x13\x97\xac\x0a\xf0\x10\x7c\xe2\xd9\xe4\x41\xb2\x58\x91\x31\x63\x8e\x64\xdb\xd1\xe3\xc8\xae\x11\x96\x5d\xe3\xe5\xeb\xc8\x65\x31\x1d\x8b\xa4\xc0\xa7\xe3\x02\x69\x53\xe7\x90\xff\x24\xf2\x08\x96\x88\xe5\xe7\x11\x6c\xdf\xd3\x1f\x12\xd9\x82\x16\x89\x2d\x65\x0b\x6a\xdf\xe3\x1b\x5f\x87\x8a\xc6\xea\xac\x43\xc9\x97\x6f\xab\xb6\x0e\x0d\x39\x39\xa6\xa4\x84\x5d\xc6\x5c\xf5\x35\xe9\xb0\x93\xc6\x30\x68\x4d\xf2\x4a\x68\xd3\xea\x04\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\x0a\x7a\xda\x79\xf4\x74\x3e\xe2\x94\xc9\x61\x14\x22\x19\x4c\x21\xb6\xd0\xcd\x62\xfd\xf5\x37\xfc\xab\x41\x24\x56\xcf\x4f\x27\xf2\xc4\xa8\xbf\xb9\x83\x9c\x68\x46\x2b\xe7\x3a\x46\x7f\x62\x80\x7e\xef\xaa\x6a\x98\x66\x17\x5f\x54\xca\xf7\xe6\xd5\x75\x72\xec\xe2\x55\xc4\xc6\xcf\x25\x0f\xd1\xe7\xc4\x97\xdc\x26\xbe\x57\x4a\x92\xaf\x3d\xc8\x0d\xb2\x59\xf6\x2f\x35\x63\xa7\x14\x65\x92\xfd\xbf\xfb\xf7\xbc\xaa\x17\x6c\x55\x2f\x58\x4a\x26\x57\xb2\x6c\xcd\xf4\x53\xb0\x8b\xbd\x8a\x92\xd3\x2f\x69\xca\xc0\x59\x35\xaf\x59\x45\x35\xa3\x0d\xa4\x12\x57\xf1\x92\xca\x52\xd5\xdb\xc4\xa4\xc5\x78\xc1\xad\xc0\x9d\x5e\x05\x3c\x8a\x33\xeb\x56\x45\xcb\xf2\x3a\xf0\xa7\xb3\x3e\x2d\x5a\xee\x93\x1c\x0b\xa0\x64\xb1\x0f\xbb\x5a\x10\x76\x98\x98\xf0\xa9\xc4\x06\x71\x77\xd9\xc8\x7a\x55\xcf\xea\x01\xd9\xb0\xd5\x60\x6b\xf0\x6a\xb0\x81\xae\x9f\xd7\x56\x05\x49\xc6\x7f\xeb\xea\x6a\x63\x3d\x65\x6a\xc5\x9c\x9a\xa9\x4c\x65\x5e\x75\xb8\xef\x76\xae\xc7\x41\x09\x0e\x4a\x82\x0e\x4a\x5e\x11\x5b\xab\x07\x25\x8d\xaf\x0a\xc5\xd2\xea\x1c\x54\x3c\xbe\xa9\xea\x81\xa9\x73\x50\xb1\xd2\x81\xe9\x0a\x87\x13\xed\x59\x07\x2e\x92\xf3\x64\x46\x5e\x07\x92\x69\x72\xbc\x01\x1b\xef\x24\x7f\x91\x73\xfc\xf8\xc2\xc2\x0c\x0f\x99\xe1\xe9\x6f\xc7\xc8\xb7\x62\xf4\x1b\xb1\xf8\xd7\xbc\x06\x7a\x7f\xec\xa2\xbc\x09\xd1\x0b\x8a\x25\x36\x12\xca\xac\x36\x67\x88\x2d\xb8\xbb\x4f\xf6\xcf\x87\x1c\x34\xc1\xab\x58\xd2\x04\xf1\x9f\x65\x66\x7f\x61\xa8\xa0\xcd\xab\xbc\x21\x9c\x7d\x08\xdb\xf1\xb8\xc7\x22\x82\x98\x79\x5d\xe0\x8c\x54\x3d\x9f\xd7\xb2\xba\x6a\x6b\xb9\x25\xe7\x98\x41\x3e\x44\x2a\xe8\xb9\x41\x67\x7b\xc2\xb7\xb1\xca\xbc\xc9\xbe\x79\x45\xcd\xd4\x8d\xac\xb7\xcd\xf2\x3f\x7f\xf6\x52\xd1\xc7\x34\x25\x8b\x55\x52\xde\x00\xab\xec\x4e\xf7\x85\x9c\x87\xcc\x49\x36\x8b\xce\x6e\xe0\xf5\xcc\x6b\x6a\x21\xb0\x8e\x09\xca\xab\x30\xc3\x6b\x10\xb4\xed\xfa\x4a\x8c\x7c\x31\x46\x3f\x17\x8b\x7f\xda\x6b\xe6\x47\x63\x27\xa5\x28\x3b\x45\xb6\xe3\xd4\x3c\xd0\x37\x63\x1a\x45\x75\x9e\x77\xc0\x8c\x91\xd3\x33\x4b\x83\xa2\x0d\x04\xda\x72\xdf\xc5\x0f\xd3\xc3\x7a\x69\x34\xb5\x3f\xa5\x48\x06\x63\x56\x2b\x6a\x85\xac\x56\xb0\x7d\x66\xac\x29\x86\x59\x5c\x50\x0b\xec\x8d\x9c\x6d\xc3\xf0\x9c\x9a\x73\xcf\x58\x12\xe2\xd7\x84\x32\xa7\x17\xb8\xfd\x6f\x7a\x8f\x52\xb3\x59\xce\x80\x86\xc5\x76\x2e\xeb\xe3\x02\x51\xf8\x80\xe5\xdf\x24\x4e\x35\x52\xca\xa4\xce\x87\xb3\x54\x71\xc3\x5c\xfe\x66\x1c\xf1\x89\x03\x46\x71\xa8\xc2\x27\x9b\x61\x2f\xa4\x12\x9b\x44\x7d\x4e\xba\x2f\x62\x95\x99\xaa\x2f\x5d\x4f\x5e\xbc\x9e\xbe\x60\x7d\xfc\x57\x1e\x41\xf9\xea\xba\x7b\x1c\xea\xc9\xa6\xd4\x82\x71\x59\x99\x57\xcd\x59\x75\xbe\xec\x90\xd6\x9b\x17\x9a\x39\x67\x98\x79\xd6\x16\x81\x35\x3d\x57\xf1\xf0\xea\x15\xe5\xe3\xd9\x1d\x8c\x45\xf1\x56\x3a\x1b\x28\x19\x3d\xeb\x1f\x5f\x70\x12\xce\x0f\x93\xbc\xd6\xb5\xb8\xcf\x1b\xff\xd5\x65\xdd\x29\xa9\x19\x5d\x4a\xea\x6e\x7d\x7c\x93\xbe\xfc\x61\x29\x45\x9c\xe5\x73\xf2\x2a\x2f\x0e\x03\xe2\x1d\x06\x94\x21\xa7\xe3\xcb\x07\x86\x75\x48\x19\x48\xab\x99\x4b\xec\x3b\x54\xc8\xb2\xab\xd4\x5c\xce\xb8\xcc\x2f\xaa\x68\x38\x71\x34\xe1\x0c\xfd\xf2\x42\xdc\x37\x98\xf5\x4a\x3a\xa4\x0c\x9c\x32\x4c\x4d\x2a\x56\xc9\xa8\x56\x46\xcd\xb2\xb7\x77\xda\x87\x2f\xb6\xa2\x3c\x4b\xac\x5e\xcb\x0a\x9c\xf3\xca\x48\x25\x36\x17\x2b\xc7\x8d\x6c\xa7\x7c\xac\x27\x62\x44\x70\x5e\xe8\x24\x4e\x93\x29\x49\x27\xd1\x62\xec\xa0\x04\x9b\x14\xd7\xd0\x8d\xa2\x99\x56\xc3\xaa\x48\x7f\x79\x63\x35\xab\x62\xbf\x8f\x1b\x04\xee\xa9\x75\xd3\x31\x5a\xe4\x91\xbd\x56\xc5\xd4\xb8\xa9\xb2\xa0\x21\x5e\x99\x5d\xdc\xd5\xf0\x66\xf9\xc7\xbc\x66\xce\x6b\xf2\xaf\xdb\xe5\x5f\x79\xb8\x2b\x6d\x5e\xcf\x0c\x55\x5e\x97\x3e\x4b\xce\x90\xe9\x8a\x0d\xcd\x38\x39\xd0\xc0\xb8\x99\x61\x85\xc2\x84\x09\xdb\xa4\x74\x32\x3c\xa8\x1e\x71\xad\x28\x22\xae\xad\x02\x3f\x9c\x24\x27\xe8\x44\xe2\x98\x17\x67\xa1\x4f\x8e\xb3\x50\xad\x9c\xd6\x47\x58\xa0\xff\xef\x7a\x32\x1d\x01\x0d\x1c\xb6\xf8\x72\x4b\xdf\x7a\x3d\x7d\xc1\xfa\x6a\x8b\xd7\x5e\x0e\x05\xc5\x95\xee\xab\xd7\xb0\x74\xed\xab\x17\x0f\x8a\xa5\x3f\xda\xad\x52\x47\x0f\xf8\xce\xa3\x65\x6f\xae\x4a\xcb\x0e\xb8\xb4\xac\xee\x71\x70\xb0\x01\x6e\xd6\x8a\xa1\x00\x7a\xd6\xc9\x1f\x26\xd0\xb3\x2b\x86\x9e\xa5\xbf\x59\xd5\xce\x9d\x58\x66\xe7\xd6\xbd\x5c\xec\xaf\xdb\xe2\x8d\x7a\xb1\x80\xdd\xdb\x7d\xcb\x4b\x27\x9b\x01\xb0\x7b\x6b\xb7\x7b\xff\xb4\x8f\xa4\x6b\xb0\x7b\x45\xa8\xf0\xea\x71\x63\xfe\xbd\x97\x3e\xaf\xea\x21\xf8\x8b\x6a\xcc\x4c\x57\xad\x19\x22\xca\x49\xb7\xf7\x72\xbd\x0b\x21\xb2\xd0\x35\x91\x85\x6e\x15\x26\x19\x3c\x4b\xe0\x59\x02\xcf\x12\x78\x96\xac\x19\xcf\x12\x04\xf0\x46\x00\x6f\xb8\xb4\xc0\xa5\x05\x2e\x2d\x70\x69\x59\xdb\x2e\x2d\x88\xb9\x0d\x1f\x19\xc4\xdc\x5e\xa5\x98\xdb\x9f\xe8\x27\x53\xcd\x43\x24\xd7\xa1\xe2\xff\xf5\xd1\x0f\x56\x65\x49\x1f\xaf\x25\xc3\x5c\x4b\x41\x52\xb3\xb9\xe5\x46\xeb\xc6\x50\x40\x50\x0d\x64\x93\x03\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x02\x7e\x6a\x11\x7e\xea\x50\x7d\x07\x28\x16\x28\x16\x28\x56\x6d\x14\xeb\xc7\x31\xb2\xd5\xa3\x58\x01\x69\xe5\x87\xe9\x97\x63\xf4\x0b\x31\x72\x6d\xc5\xcf\x2b\x66\x8f\x8b\x8b\x0c\x66\xf2\xf5\xc8\x1f\x27\x65\x2c\x7b\xc1\x3a\xa2\xac\xd8\xe8\x8b\xa3\xc3\xf4\xeb\x31\xfa\xd7\x31\x42\x2b\xae\xb8\x6f\x71\x85\xcc\x71\xca\xf2\x76\xbf\x1b\x69\xe3\xaa\x75\xc2\x19\xb2\x2b\xac\x13\x1c\xd9\xa6\x9e\xd1\x2c\xfa\xbf\x4f\xd3\x0f\x6d\x0b\xec\x8f\x1d\x2b\xa7\x88\x9b\x98\x99\xba\x20\x0a\x49\xde\xea\x24\x85\x5b\xd6\x43\xce\x05\x1d\x0e\x3d\x11\xc5\x18\xb0\x0f\xb0\x0f\xb0\x6f\xed\xc0\x3e\x44\x31\x46\x14\x63\x30\x37\x30\x37\x30\x37\x30\xb7\x8e\x60\x6e\x88\x62\xdc\x8d\x6c\x0b\x51\x8c\x5b\x11\xc5\xf8\x21\x32\x2b\xd0\xc2\xd3\xc9\x53\x39\x5a\xb8\x40\xee\x24\xe7\x02\xd1\x02\xdb\xfe\x0e\xa9\xf3\xf3\xac\xb1\x6c\xa3\xdc\x4b\xb3\x8c\x0d\x08\xd0\xe0\x6c\xd7\x23\xc9\xf4\x76\x7f\xb8\x66\xe7\x08\x3d\xe4\x6b\x76\x02\x50\x85\xa3\xda\xf1\x2b\x26\xeb\x74\x48\xe2\x47\x1b\x03\xb1\xc5\x75\x6e\x56\xb7\x82\x8c\x28\xb6\x79\x89\xdc\x5a\x0e\x29\x04\x53\x50\xc9\x7d\xe4\xde\x0a\x2f\xe6\x3b\xc8\xe9\x08\xbb\x09\x8e\xcd\x61\x8e\xcd\x9f\x8c\x91\x67\x8a\xa9\x72\x0f\xb9\x8b\x4f\x95\x73\x24\xda\x3e\x20\x19\x11\x1e\xe1\x19\xe4\x69\x7e\x78\x84\xc8\x1f\x92\x15\x41\xc4\xee\x25\x4f\x97\x82\x88\x45\xfe\x94\x66\x73\xaa\xb5\x7c\xc6\x27\xff\x46\x09\x9c\xf1\xb7\x06\xe6\x4f\x93\x26\xff\x2e\x2f\x28\x69\xf9\xe4\xf7\xd3\xa5\xb5\x6c\x19\x00\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\x04\x5a\xec\x3c\xb4\xd8\xc9\x09\xd2\x5a\x8e\x17\xba\x28\x1f\xda\x9b\xfa\xc9\x58\x1d\x22\x30\xd7\x5b\xf7\x07\x7d\xf4\xf5\x57\x05\x22\x96\xad\x01\xb9\xcf\x64\x01\x98\x13\xce\xb8\x4d\x6c\x75\x8d\x26\x37\x5b\x6a\x39\xcd\x6c\x32\x28\x73\xcb\xa7\x68\xfc\x35\xc1\xcc\x5f\x09\x4e\x57\x26\x8d\xd0\x84\x1f\x68\x19\x07\x00\x6b\xe6\x00\xe0\x1b\x3d\xdd\x71\x00\xd0\x64\x18\xe4\xd6\x93\xf9\x37\x6e\x0a\x3e\x8b\x73\x13\x86\x95\x9f\xc5\x55\xc1\xf1\x2d\x9b\x8a\x48\x09\x86\x94\x60\x48\x09\x86\x94\x60\x48\x09\x86\x94\x60\x48\x09\x16\x9c\x12\xac\xe5\x36\x42\xfa\x85\xc1\xb6\xfb\xce\x90\xf4\x5f\x92\xe1\xa0\xb8\xe9\x0f\x5a\x6f\x37\x20\xcf\x41\xd7\xd9\x23\x1d\xb0\x7f\x0e\xcd\x66\xd0\x7a\xc8\xb5\x9f\xec\xa5\xbb\x13\xa3\x9e\x73\xfb\x93\x65\xe7\x76\xff\xa6\x36\xa4\x2b\xf8\xa3\x2d\xe4\x60\xfd\x90\xca\xcd\xca\xf5\xbc\x2d\xf4\xc3\xeb\x02\x17\x94\x81\x15\x53\x72\x49\xcb\x49\x7f\x08\xb5\x6a\x49\xce\xad\xd5\x1f\x84\xab\x0e\x71\xde\x12\xfc\x21\x48\x86\x65\xd1\x92\xba\x6e\x47\x38\xce\x69\x49\x9a\x2c\x40\x9d\xd5\x5f\xc6\x01\x75\xda\x03\x75\xd2\xbf\x15\x3c\x4f\x77\xd7\x9c\xc7\x4a\x9a\xb0\xdb\xc3\x4c\x37\x24\xaa\xc2\xcc\x87\x01\x77\x45\x19\x70\xbf\xec\x25\xa3\x61\x06\x9c\x88\x13\x2c\x07\x9c\x78\xac\x97\x7e\x7e\x7d\xe0\xc2\xb2\x58\x5b\x6a\x29\xff\x1d\x23\x4a\x26\xd5\x77\x39\x64\x6d\x42\xee\xa8\x26\x72\x47\xb5\x7e\x46\x40\x63\x0f\x8d\x3d\x34\xf6\xd0\xd8\xaf\x19\x8d\x3d\x62\xf5\x22\x56\x2f\xc4\xfd\x10\xf7\x43\xdc\x0f\x71\xff\xda\x16\xf7\x23\xc8\x2e\xbc\x05\x10\x64\x77\x95\x82\xec\xfe\x4b\x1f\x39\x50\x37\xff\x71\xb5\xe6\x1f\xea\xa3\xcf\x0b\xd6\x9a\xbf\xbf\x96\xb4\x50\x11\x43\xa0\x66\x13\x41\x29\x61\x08\x09\xf8\xa8\x81\xbc\x4f\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\x40\x47\xd1\xa0\xa3\x8e\x11\x52\x80\x39\x81\x39\x81\x39\xd5\xc6\x9c\x5e\xb9\x8e\xf4\x87\x30\x27\x91\xa0\x9c\x7e\x27\x46\xbf\x1d\x23\x37\x2c\x07\x4c\x22\xf9\x78\xd5\x6c\x43\xfd\x41\xd9\x86\xf8\x3d\x48\x39\x14\x9c\x72\xe8\x8b\x67\xc8\x48\x4d\x7d\x22\xcb\xc0\x7e\xfb\x0c\xfd\xcc\xb6\xea\xdd\x53\x7b\xf2\xa1\xbe\xc0\xe4\x43\x6e\x87\x5d\x19\xf8\x0d\x61\x42\xc1\xa1\xc0\xa1\xc0\xa1\xd6\x0e\x87\x42\x98\x50\x84\x09\x05\x0e\x02\x0e\x02\x0e\x02\x0e\xea\x08\x1c\x84\x30\xa1\xdd\x08\x61\x10\x26\xb4\x15\x61\x42\x5f\xd0\x43\xe6\x05\x6a\xb8\x9f\x3c\x93\xa3\x86\x5f\x27\x77\x93\x8b\xcd\x3a\xe2\xf1\x3d\x7b\xd4\x79\x88\xb4\x70\x0d\x49\x9a\x1e\x6f\x5c\x43\xc2\x2b\x4d\x12\xaf\xba\xba\x3a\xcb\x08\xce\x48\xb4\xbd\x4a\x46\xa2\x56\x91\x0b\x01\x1a\xe6\x48\x96\xcc\x56\xf8\xac\x9e\x27\x33\x51\x77\x1d\x7c\x59\xc3\x7c\x59\x1f\x8f\x09\x2f\xf3\x11\xee\x65\xce\xe6\x10\x8f\x52\x17\x75\x47\x90\x05\xe1\xca\xae\x92\xfb\x7c\x57\xf6\xd6\x3c\x49\x17\x71\x8d\x66\xc9\xfd\x52\x5c\xa3\xd6\x3c\xaa\xd9\x54\x45\xed\x59\x14\x92\x3f\x50\xaa\x2f\x0a\xa1\x49\x8b\x46\xaa\x44\x49\xe4\xb7\x23\x73\x11\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\x24\x90\xe4\x9a\x44\x92\x9d\x9c\xb9\xa8\x3d\xb4\xa1\x8b\xd2\x17\xfd\x47\x3f\xd9\x5f\xaf\xa0\xcc\xf5\x2b\xfd\xe3\x7e\xfa\xbe\xab\xaa\x63\x97\x90\x44\x46\x7d\x81\x21\x61\x5b\x8b\x64\xd7\x68\x36\xa3\xff\xdc\x1e\xfe\xd9\x64\x34\xdc\xf6\xcc\xdd\xf8\x07\x37\x56\x1f\xb2\xe1\xc9\x8d\x06\xaa\x45\xc3\xc5\x59\xc2\x9a\x38\x4b\xf8\x6e\x4f\xb7\x9d\x25\x34\x19\x1b\xb7\x4d\x7c\xff\x7d\x9b\x56\x38\xf4\x0b\x4c\x7d\xb4\x7d\x25\xa8\x8f\xfc\x47\x5d\x35\x2d\x91\xff\x08\xf9\x8f\x90\xff\x08\xf9\x8f\x90\xff\xe8\x4a\xc8\x7f\xd4\x1e\x93\x21\xfd\xba\x15\x0c\xfd\x3a\x32\x21\xf5\x07\x87\xd3\x6f\x99\x19\x81\x68\xfa\x5d\x67\x9e\x74\xca\x06\x3c\x34\xa4\x7e\x9b\xf0\x59\xc7\xb8\x83\xd3\xdf\xb8\x8e\x1c\x6d\x10\x7f\xb9\xd9\x91\xfe\x6c\x0b\xfd\xcc\xba\xea\x2b\x4d\xcd\x29\x92\x92\xb5\xf0\xb0\x96\xe4\x49\xea\x90\xd1\xd9\x19\x78\xe8\x13\x2b\x7c\x35\xea\x49\x9b\x34\x54\x23\x28\x6a\x49\xee\x24\xe0\xa2\x0e\x59\xf8\x81\x8b\x56\x05\x17\xa5\xdf\xb6\xc2\x2c\x6e\x28\xa9\xd2\xae\x9a\xac\x40\x64\x56\xc2\x92\x00\x5b\xf0\x0a\xb5\x05\x5f\xd9\x47\xf6\xd5\x64\x0b\x2e\x4f\xb4\xf4\x7f\x7a\xe9\xd7\xd6\x57\x5f\x71\x56\x2b\xdb\xd2\xce\xe0\x50\xb9\x15\x8b\x16\x52\x2e\x35\x91\x72\xa9\x4d\xb3\x04\x1e\x02\xf0\x10\x80\x87\x00\x3c\x04\xd6\x8c\x87\x00\x82\xe7\x22\x78\x2e\x5c\x13\xe0\x9a\x00\xd7\x04\xb8\x26\xac\x6d\xd7\x04\xc4\xc0\x85\xaf\x03\x62\xe0\xae\x52\x0c\xdc\x17\xf7\x93\x23\x8d\x31\x21\x57\x24\xff\x89\x3e\xfa\xf2\x15\x44\xf2\x57\x62\x06\xa6\xfe\x9a\xb0\x12\x90\x52\x03\x69\x98\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x80\x93\x90\x8b\x09\x1c\x0a\x1c\x6a\xed\x72\xa8\xcf\xc6\xc8\xaf\xb9\x1c\xaa\x68\x0d\xd3\x3f\x88\xd1\x8f\xc4\xc8\x7a\xf6\x1f\xf1\xf8\x3c\x77\xbf\x9a\x33\xcc\xbc\xd7\x66\xaa\xc2\x19\x41\xf2\x5a\x9e\x61\xa9\x68\x4d\xcc\x4c\xdd\xc6\xfe\xd0\x81\xb9\x94\x74\x72\x56\x70\x98\xdb\xc8\x24\xe7\x30\xc7\xc8\x11\x72\xa8\xb1\x5c\x4a\xfc\x1d\x43\x93\x28\xfd\x75\x8c\x3c\x49\x6a\xcc\xc5\xd1\x61\xfa\x58\x8c\x7e\x32\x46\x36\xb2\xff\xbe\x6f\x71\x85\x8c\x55\xd7\x3b\xed\x79\x37\x32\x54\x55\x69\xdc\x97\xf7\x92\x6d\xe5\x8d\xcb\x3e\xf7\xa6\xc1\x3e\xb6\x6c\xd3\xcb\x86\xb8\x45\xbf\x97\xa0\x3f\x5c\xe7\xb7\xf7\xc8\xca\x29\xa8\x4e\x78\x25\x9c\x77\x4a\x48\x0e\x8a\x54\x54\xac\x27\x96\xff\x7a\xca\x30\x27\x72\x39\x2f\x14\x47\x74\xfd\xd3\x22\x14\xa9\x91\x69\xd1\x59\x27\xc8\x04\xef\xac\x43\xe4\x20\xd9\x5f\xad\xb3\x52\xac\xd5\x58\xd7\x2c\x7f\xf1\x48\xc2\x78\xdf\x1d\xce\x20\x77\xd3\x51\x8f\x41\x16\x2d\x87\x38\x2e\xaf\x0e\x12\xc0\x03\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\x02\x3a\xae\x45\xe8\x08\x76\x08\x76\x08\x76\xb8\x3a\xec\xf0\xef\x12\xe4\x29\xe5\x44\x26\xab\x6a\x79\x66\xd8\xd8\x16\xfd\x54\x82\x7e\x56\x02\x31\x03\x2b\x83\x98\x93\xfc\xc6\x0b\x9a\x9d\xec\xf5\xf9\x8b\xf7\xc7\x2b\x0d\xbb\x3c\x83\x4c\x08\xec\x32\x4e\x0e\x70\xec\x32\x46\x46\x48\x2a\x14\xbb\x78\xef\x1b\x09\x6d\xb9\x23\x9c\xb6\x24\xe9\x8e\xe5\xb4\xc5\xab\x05\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x0b\x20\x4b\xbb\x20\xcb\x77\x12\xe4\xc6\x0a\xc8\xa2\x15\x73\xc6\x12\xfb\xbc\x59\xf4\x33\x09\xfa\x45\x89\xb2\xec\x08\xa1\x2c\xde\x9d\xc9\x3e\x09\xb3\x78\x7f\xbd\xd2\x38\xcb\xbd\x24\x2d\x38\xcb\x21\x72\x90\x73\x96\xdd\x64\x94\x0c\x87\x73\x16\xef\x85\x23\x01\x2d\x67\xc3\x41\xcb\x2e\xba\x33\x00\xb4\x78\xd5\x00\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x01\x69\x69\x17\x69\xf9\x87\xd3\xe4\x40\x39\x69\x29\x78\x24\x44\x04\x5d\xe2\xff\x7e\x28\xd0\xef\xe8\xed\xa7\xe9\x6b\xb7\x35\xe3\x77\xb4\xdd\x07\x32\x1e\x80\xc9\x2e\xbf\xae\xc3\x91\x4c\x1a\xf0\x02\xf0\x02\xf0\x02\xf0\x62\xcd\xc0\x8b\x74\xc7\xc0\x8b\xc8\x6b\xd2\x30\x43\x48\x83\x21\x80\x21\x80\x21\x80\x21\x80\x21\xb4\x9f\x21\xa4\xb1\xe5\xef\xc2\x2d\x7f\xba\xd3\xb7\xfc\xe9\x2b\x70\xcb\xbf\x36\xe2\x63\x24\x5e\xba\xd1\x07\x13\x37\x89\xe5\x5f\x51\x83\x18\xc4\x0e\xf1\x63\x1b\x29\x84\x80\x06\x53\xe4\x36\x32\x59\x91\x2a\x70\x2f\xd9\xdd\x40\x3f\x20\x4b\x60\x58\x96\xc0\xff\xe8\x21\xa7\xc4\x98\x3f\x46\x8e\xf0\x31\xbf\x9f\x34\xd6\xd6\xe4\xb4\xc8\x0d\x7a\x92\xa4\xfd\xdc\xa0\x0d\x17\x76\x46\x64\x94\x9f\x24\x27\xa4\x8c\xf2\x0d\x97\xd6\xf8\x54\x2c\x1a\x2d\x9c\x8a\xc9\xff\xa3\x48\x2e\x71\xc2\xe6\x52\x32\xec\xfa\x8c\xbb\x2c\x07\x4c\xcb\x31\x71\xa1\x1b\x94\xc8\xbd\xba\x8d\x13\x14\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\x0f\x54\xaf\xf3\xa8\xde\xbc\x80\x09\x23\x1c\x26\xc4\xce\x9d\xa6\x47\xc8\x21\x72\xb0\x81\x10\xc5\x17\x6c\xd5\x2e\x59\xa1\x30\x21\x19\x0c\x13\xb6\xd0\xcd\x62\xfd\xf5\x37\xf8\xad\x8b\x81\xbb\x6a\xc2\xf5\xfb\xc9\x33\xe9\x33\x12\x4f\xf3\xa2\xfe\x8f\x3b\x2b\x22\x0f\xfe\xcf\xfa\x93\xb5\x97\x62\x65\x8c\xa2\x36\xa8\x58\xa5\x0c\x9f\x1c\x7c\x68\x6b\x6a\x5e\x8c\x8e\xa2\x69\xf0\x15\x38\x71\x8d\x27\xb2\x6a\x65\x7a\x00\xfa\xd2\x7e\x72\xac\x51\xa1\x97\x9b\x7d\xef\x93\x7d\xf4\xff\xbf\xde\x67\x39\xfd\x7c\x25\x2a\xdf\xd0\x07\x89\xbc\xd8\x65\x6d\xc7\xab\xcf\x25\x0f\xd1\xe7\xc4\x97\xdc\x06\xbc\xf7\x82\xb0\x14\xb9\xb5\xf9\x20\xb7\xda\x66\xd9\xbf\xd4\x8c\x9d\x52\x94\x49\xf6\xff\xee\xdf\xf3\xaa\x5e\xb0\x55\xbd\x60\x29\x99\x5c\xc9\xb2\x35\x73\xc8\x79\xbd\x8c\xb3\xa1\x51\x72\xfa\x25\x4d\x19\xf0\x5e\x66\x20\x95\xb8\x8a\x97\x24\x8f\x91\xb4\x4d\x4c\x5a\x8c\x17\xdc\x0a\xdc\xe9\x55\xc0\x43\x3d\xb3\x6e\x55\xb4\x2c\xaf\x03\x7f\x3a\xeb\xb1\xa2\xe5\x3e\xc9\x31\x13\x4a\x16\xfb\xfa\xab\x05\x61\xac\x89\x55\x21\x95\xd8\x20\xee\x2e\x1b\x99\x6a\x64\xa0\x33\x6c\x01\xd8\x1a\xbc\x00\x6c\xa0\xeb\xe7\xb5\xd6\xc1\xc4\xf8\x63\x1b\x24\xcf\x4f\x53\x2b\xe6\xd4\x8c\x16\x3e\x06\x77\x3a\x57\x82\xf2\x77\x31\xe5\x7f\x4f\x87\x52\xfe\xc6\x67\x52\xb1\xd4\x42\x2c\xff\x3b\x9b\xa4\x13\x32\x07\xcb\x07\x9f\x90\xc9\x28\xbe\x8d\x73\xe7\x22\x39\x4f\x66\xe4\xb9\x93\x4c\x93\xe3\x0d\x58\x34\x27\x79\xf5\xcf\x71\x58\x6f\x61\x1a\x85\x4c\xa3\xf4\xb7\x63\xe4\x5b\x31\xfa\x8d\x58\xfc\x6b\x5e\x03\xbd\x3f\x76\x51\x36\xb9\xf5\x82\x62\x09\xb3\x59\x99\xd5\xe6\x0c\xb1\xe1\x74\x77\x85\xfe\x69\x88\xb3\x11\xe7\x55\x2c\x69\x82\x6f\xcf\x32\x23\xb7\x30\x54\xd0\xe6\x55\xde\x10\x8e\xd5\xcd\xec\x7b\xf7\x10\x40\xf0\x21\xaf\x0b\x9c\x91\xa9\xe7\xf3\x5a\x56\x57\x6d\x2d\xb7\xe4\x40\x75\xf9\xc8\xa4\xa0\xe7\x06\x1d\x63\x9c\x6f\xda\x94\x79\x93\x7d\x17\x8a\x9a\xa9\x1b\x59\x6f\x53\xe1\x7f\x22\xec\xa5\xa2\x0f\x25\x4a\x16\xab\xa4\xbc\xdd\x53\xd9\x9d\xee\x0b\x39\x0f\x99\x93\x3e\xbe\x3a\xbb\x81\xd7\x33\xaf\xa9\x85\xc0\x3a\x26\x28\xaf\xc2\x0c\xaf\x41\xd0\x26\xe3\x2b\x31\xf2\xc5\x18\xfd\x5c\x2c\xfe\x69\xaf\x99\x1f\x8d\x9d\x94\xf2\x11\x17\xd9\xfe\x4a\xf3\xb0\xd6\x8c\x69\x14\xd5\x79\xde\x01\x33\x46\x4e\xcf\x2c\x0d\x8a\x36\x10\x20\xc7\x7d\x17\x3f\xa1\x31\xeb\xa5\xd1\xd4\xfe\x94\x22\x59\x3e\x59\xad\xa8\x15\xb2\x6c\xab\xee\x11\x52\x4d\x31\xcc\xe2\x82\xca\x76\xe0\x8a\x63\x3f\x0f\xcf\xa9\x39\xf7\x44\x21\x21\x7e\x4d\x28\x73\x7a\x81\x1b\xc2\xa6\xf7\x28\x35\x9b\xe5\xc4\x63\x58\x6c\x5e\xb2\xfe\xe6\x58\x14\x3e\x60\xf9\x37\x09\x86\x9f\x52\x26\x75\x3e\x9c\xa5\x8a\x1b\xe6\xf2\x37\xe3\x40\x4b\x1c\xa7\x89\x23\x04\x3e\xd9\x0c\x7b\x21\x95\xd8\x24\xea\x73\xd2\x7d\x11\xab\xcc\xe6\x7a\xe9\x7a\xf2\xe2\xf5\xf4\x05\xeb\xe3\xbf\xf2\x78\xc1\x57\xd7\xdd\xe3\x30\x3e\x36\xa5\x16\x8c\xcb\xca\xbc\x6a\xce\xb2\x7d\xb5\x74\x04\xe9\xcd\x0b\xcd\x9c\x33\xcc\x3c\x6b\x8b\xc0\x9a\x9e\xab\x78\x78\xf5\x8a\xf2\xf1\xec\x0e\xc6\xa2\x78\x2b\x9d\x0d\x94\x8c\x9e\xf5\x61\x3d\xe7\xbe\xfc\xe8\xc4\x6b\x5d\x8b\xa7\x1f\xe2\xbf\xba\x64\x37\x25\x35\xa3\xcb\x04\xdd\xbd\x8c\x6f\x9b\x96\x3f\x2c\xa5\x88\xf3\x64\xce\x19\xe5\xc5\x61\x40\xbc\xc3\x80\x32\xe4\x74\x7c\xf9\xc0\xb0\x0e\x29\x03\x69\x35\x73\x89\x7d\x4e\x0a\x59\x76\x95\x9a\xcb\x19\x97\xf9\x45\x15\x0d\x27\x40\xbc\x33\xf4\xcb\x0b\x71\xdf\x60\xd6\x2b\xe9\x90\x32\x70\xca\x30\x35\xa9\x58\x25\xa3\x5a\x19\x35\xcb\xde\xde\x69\x1f\xbe\xd8\x8a\xf2\x2c\xb1\x7a\x2d\x2b\x70\xce\x2b\x23\x95\xd8\x5c\xac\x1c\x37\xb2\x31\xf0\xb1\x9e\x88\x37\xc4\xe7\xc5\x59\xfd\x69\x32\x25\x9d\xd5\xb7\x78\x93\xad\x04\x5b\x06\xd7\xd0\x8d\xa2\x99\x5a\x66\x1c\xa4\xff\xaf\x64\x66\x8f\xfa\xdb\x69\xc1\x2c\xc2\xed\xed\x81\xa2\x48\x6a\xde\x3e\x8b\xe1\xa6\xca\x82\x86\x78\x15\x76\xf1\xb4\x4f\x37\xcb\x3f\xe6\x35\x73\x5e\x93\x7f\xdd\x2e\xff\xca\xf3\x7f\x6b\xf3\x7a\x66\xa8\xf2\xba\xf4\x59\x72\x86\x4c\x57\xd8\xf2\xe3\xe4\x40\x03\xdd\x3f\xc3\x0a\x85\x25\x12\x66\xd0\xb7\x6f\x33\x5b\x3d\x95\x7c\x51\xa4\x92\x6f\x15\xc2\x3a\x46\x8e\xd0\x43\x89\x83\x1e\x49\xba\x45\xce\x1f\xb9\xfc\xe6\xe5\x79\x24\xaf\x40\x14\xf5\xb7\xd3\x64\xb8\x26\x14\x25\x45\xd6\x7e\xe7\x34\xfd\xb1\xd2\x40\x64\xed\xad\x41\x1e\x86\xde\xcf\x70\x2c\x84\x04\x09\x12\x24\x48\x90\x20\x41\x82\x04\x09\x12\x24\x48\x90\x20\x41\x82\x04\x09\x12\x24\x48\x90\x20\x41\x82\x04\x09\x12\xa4\x7a\x25\x48\x5d\x98\x01\x2a\xf1\x19\x89\x83\x52\xcf\x8d\xd0\xe7\x0b\xb7\x06\x7b\x0f\x46\x4f\x18\x04\x10\x38\x4e\x8e\x92\xc3\x15\x08\x72\x90\x24\x6b\x6f\x63\x40\xc7\x30\xe8\xf8\xad\x1e\x72\x44\x0c\xe3\x7d\x64\x0f\x1f\xc6\x29\x52\x57\x13\x8b\xf8\xdc\xa3\xdc\xad\xd6\x13\x0f\xd4\x5b\xc6\x09\x71\xda\x70\x98\x8c\x4b\xa7\x0d\xf5\x16\xd2\xac\x43\x60\xb4\x73\x29\xf9\x31\x09\xe0\xdd\x12\xe8\x07\xe8\xcf\xab\x9d\x61\xee\x7f\xad\x9a\x61\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x40\x6e\x9d\x87\xdc\x3a\xd9\xeb\x2f\xe2\x5c\xec\x70\xf6\xab\x5d\x61\xf5\xf5\x5e\xb2\xaf\x4e\x85\x95\xeb\xe3\xf7\xa6\x5e\xfa\xd7\x92\x8f\xdf\xcd\x01\x3e\x7e\x92\xba\x2a\xc8\xb5\xaf\x55\x64\x66\x8d\x7a\xf4\xfd\x7a\xb3\x38\xb2\x49\x47\xbe\x68\xa7\x71\xfc\x95\x12\x50\xbf\x35\xd8\x7f\xcf\x1f\x5f\x4a\x15\xb7\x3d\xe0\xf5\x2b\x16\xaf\xbf\xbe\x23\xf0\x7a\x93\x2e\x79\x11\x83\xf1\x5f\x5d\x2b\x1d\x32\x79\x9e\x78\xd2\x21\x53\xb0\x03\x5e\xab\x66\x01\xfc\xee\xe0\x77\x07\xbf\x3b\xf8\xdd\xc1\xef\x0e\x7e\x77\xf0\xbb\x0b\xf6\xbb\x8b\xd6\x02\x48\xff\x89\x1c\xd5\x22\xc4\xdd\xce\xb7\x0b\x6e\x09\xf4\xb2\x6b\x81\x59\x00\xe7\xba\xae\x33\x37\x5a\xbf\xaf\x0c\xf5\xa9\x8b\x18\x10\xed\x23\x7b\xe8\x58\x62\xc4\xe3\x34\xd7\xcb\xae\x74\xde\x3d\x5d\xe1\x41\xf7\x08\x25\x47\x1a\xe3\x3b\xc3\x16\x5f\x01\xe9\x5f\x6d\xa6\x3f\x89\xf9\x6b\x0e\x8f\xd1\xa4\x88\xdf\xdc\x26\x0b\x5a\x71\x7a\x57\x04\x3e\x62\x75\x8d\x76\x37\xd2\x6d\xfc\xe3\x8d\xd2\x4a\xef\x46\x25\xaa\xa1\xe1\xb7\x87\x91\x90\x56\xb4\x3d\x78\x08\x78\xc8\x2a\xf0\x90\xf4\x57\xa4\x39\x32\xb6\xcc\x1a\x0a\x9f\x2c\x7d\x2b\xdb\x45\x51\x4f\x15\x58\x47\xdd\x37\x2d\x61\x1d\x5d\xb9\xd6\xd1\x0f\xa7\xc9\x48\x6d\xd6\x91\x56\xcc\x19\x4b\x79\xb6\xd1\xa5\x1f\x9d\xa6\x3f\x93\xf4\xc9\x3b\x42\x02\x0c\x78\x77\x26\x6f\x09\x8c\x30\xe0\xfd\x8e\x10\x03\xd0\x3b\x43\xef\x0c\xbd\x33\xf4\xce\xd0\x3b\x43\xef\x0c\xbd\x33\xf4\xce\xd0\x3b\x43\xef\x0c\xbd\x33\xf4\xce\xd0\x3b\x43\xef\x5c\xaf\xde\xf9\x5e\x41\x3b\x47\x38\xed\x8c\x9d\x3b\x4d\x77\x93\x51\x32\x1c\x8e\x65\xbc\xed\x78\x24\x31\x06\xce\x86\xa3\x99\x5d\x74\x67\x00\x9a\xf1\xaa\x51\x1e\x64\xe0\xcb\x12\xef\xdc\xe2\x07\x19\xf0\x19\x83\x52\x25\xca\x40\xf4\x94\x41\x40\x81\x09\x72\x8c\x1c\xa9\xc0\x8d\x43\x64\x57\x1d\xed\x0c\xc2\x18\x46\x18\xbf\xdd\x43\x8e\x8a\xb1\xbc\x9f\xec\xe5\x63\x79\x98\xd4\xd7\xc6\x22\x48\xc0\x28\x0f\x12\xe0\x91\xff\xba\x0b\x39\x29\xf4\x15\x47\xc8\x21\x49\x5f\x51\x77\x29\xcd\x86\x1a\x88\x78\x4a\x25\xff\x48\x62\x79\xb7\x06\xc7\x1a\xf0\xa7\x57\x32\x34\xd8\x40\xab\x26\x1a\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x1b\xe8\x5b\xe7\xd1\xb7\x4e\x8e\x36\x10\x31\x40\x40\xb8\x81\x3a\x04\x57\xff\xdc\x4b\xf6\xd7\x2b\xb8\x72\xe3\x0d\x7c\xa8\x97\x7e\x43\x8a\x37\xb0\x35\x28\xde\x80\x24\xb6\x0a\xd4\x9f\xb7\x8a\xce\xac\xd1\x88\x03\x4f\x6d\x1a\x4c\x36\x29\xb9\x8f\x78\x2e\xc7\x5f\x27\xf1\x75\xa5\x4a\xcc\x01\x7f\x8c\x6d\xab\x26\xb5\x07\x6d\xbf\x72\x69\xfb\x1b\x3a\x84\xb6\x37\x29\xb4\x8f\x1a\x93\xbf\x40\xca\x01\xbc\xc5\x8f\x3c\x20\x9d\x3c\x55\x09\x3d\xd0\xaa\xb9\x80\xd8\x03\x88\x3d\x80\xd8\x03\x88\x3d\x80\xd8\x03\x88\x3d\x80\xd8\x03\xc1\xb1\x07\x22\x36\x02\xd2\x9f\x92\x5d\x52\xc3\x82\x0f\xf8\xa6\xc1\xad\xc1\x5e\x76\x2d\xb0\x0c\xe0\x60\xd7\x75\x16\x47\x1b\x36\x99\xa1\x1e\x76\x51\x23\xa3\xfd\x64\x2f\xdd\x9d\x18\xf5\xc8\xcd\x93\xcb\x5c\xec\xbc\x9b\xba\xc2\xc7\xee\xbd\x35\x47\x20\x58\x86\x7c\x86\xad\x8c\x9a\xd3\xe8\x3f\x6d\xa6\xff\xba\x3c\x02\x01\xfb\x29\xc0\xb5\xd7\x5f\x75\x82\x23\x10\x78\xbf\x5f\x60\x05\x44\x1c\x81\xe0\xe9\xe4\xb8\x18\xaa\x07\xc9\x7e\x3e\x54\x47\xc9\x30\x19\xaa\x3e\x54\x4b\xb6\xc1\xde\x43\x2f\xcc\xf3\x65\x9f\xd5\xa8\x59\x22\x32\x13\x3e\x54\x87\xe8\x2e\x77\xa8\xfa\x15\x70\x46\xac\xa8\x43\x19\x13\x79\x77\x60\x1c\x82\xd0\xe6\xaf\x1a\x87\xa0\x95\x3d\x90\x3e\x41\x26\xc8\xb1\x8a\xd5\xb9\xde\x2e\xc0\x92\x1c\xb6\x24\xbf\xa9\x27\x82\x81\x3e\x29\x28\xc9\x51\x72\xd8\xa7\x24\x6d\x9d\x2f\x9c\x93\x44\x3e\x5f\xd2\x5f\x5d\x39\x26\x41\xe8\xc4\xa9\x12\x93\xa0\x55\xd3\x06\x26\x53\xf7\xcd\xcf\x76\x7c\x87\x42\x8d\xa6\xc8\x67\xd6\xf4\x18\x19\xa1\xa9\xc4\xa0\x67\xfd\x6c\x96\xcd\x26\x7e\x7d\x57\x58\x4c\xef\xa4\xe4\x68\xc3\x16\x93\x08\xda\xf4\xdd\xcd\xf4\xe7\x92\xc9\x34\xb0\x72\xd0\x26\x69\xed\x09\xb1\x99\x5a\x11\xb6\xa9\xeb\x0e\x91\xde\x26\x7d\x00\x92\xa1\x81\x9b\xfc\xc6\x1f\x08\xb7\x98\x5a\x11\xba\x09\x87\x4a\x38\x54\x5a\x9d\x43\xa5\xf4\x5f\x48\x33\x65\x77\xed\xe1\x9b\xfc\x29\xd3\x1f\x66\x2b\x21\x80\x13\xe6\x26\xf8\x52\x37\xf3\xa5\x9a\x63\x38\xb1\xaf\xab\xfe\xff\xb1\xf7\xee\xf1\x91\x5c\xe5\x9d\xf7\x47\x6d\xcd\x0c\x3e\x61\xdf\xf5\x9c\x31\x76\x68\xdb\xe3\x72\x4b\x9a\x9e\xe9\x91\x5a\x23\xcd\x5d\x9a\x9b\x5a\xd2\xcc\x48\x23\xcf\xc8\xa3\xb1\xb9\x04\x03\xa5\xee\x92\xa6\x99\x56\x77\x6f\x55\x6b\x06\x7d\xf8\x78\x01\xf3\x3a\x98\xb0\x90\x25\x0b\x21\x09\xc1\x61\x43\x92\x0d\x24\x31\x31\x2f\x49\x20\x5e\x48\x02\x1b\x63\x70\x70\xec\xf8\x35\x0e\x38\x98\xd7\x60\x60\x49\x48\x08\x21\xf1\x06\x13\xe2\xf7\x53\xe7\xd4\xe5\x74\x75\x55\x57\x5f\xaa\x5a\xad\xee\xdf\x3f\x78\x50\x57\x9d\x3a\x75\x6e\xf5\x3c\xdf\xf3\x3c\xbf\x93\x96\x35\xa5\x6e\x0d\xa7\xf3\xfc\x4e\x26\xa4\xeb\xa6\xe1\x64\xff\x0e\x0d\x27\x64\x91\x21\x8b\x0c\x59\x64\xc8\x22\x43\x16\x19\xb2\xc8\x90\x45\x86\x2c\x32\x64\x91\x21\x8b\x0c\x59\x64\xc8\x22\x43\x16\x19\xb2\xc8\x5a\xa4\xe1\x64\xbb\xe3\xeb\xaa\xe1\x64\x57\xa3\x16\x0d\x27\x81\x31\x78\x68\x38\x85\x40\x19\x9a\xdb\x00\xb0\x2b\x04\xc8\x18\x96\x86\x93\x30\x88\x1a\xdf\x00\x10\x0a\x69\x42\xc3\x49\x28\x65\xbd\x34\x9c\x3c\xa6\x54\x0d\x1a\x4e\xc2\xf4\xf2\xd5\x70\x0a\x6d\xa2\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\x81\xbe\xb5\x1f\x7d\xeb\x44\x0d\x27\x0f\x80\x00\x0d\xa7\x30\x34\x9c\x84\x80\xab\x3a\x34\x9c\xc4\x60\x2b\xb7\x68\xf4\xd0\xe8\x0c\x34\x9c\x1a\x04\x93\xeb\x14\x7e\xef\x31\x97\x6b\xd1\x70\x12\xc6\x98\x97\x86\x13\x68\xfb\x06\xa6\xed\x8d\x86\xdb\x07\x4d\xdb\xd7\x29\xdc\xde\x0b\x93\xbb\x6b\x38\x89\x3b\x4f\xee\x1a\x4e\xa1\xcd\x05\x68\x38\x41\xc3\x09\x1a\x4e\xd0\x70\x82\x86\x13\x34\x9c\xa0\xe1\x14\xac\x86\x93\x87\x11\x50\x97\x86\x93\x60\x1a\xb8\x6b\x38\x85\x61\x19\x20\xc7\xae\xe3\x2c\x8e\x16\x38\x99\xa1\xe5\xd8\x79\x21\xa3\xaa\x39\x76\xf6\x4d\x1d\x91\x63\x57\xb3\x86\x53\x25\xf2\x69\x40\xc3\x49\x58\x75\x5c\x35\x9c\xec\xdf\xa1\xe1\x14\x82\x86\x93\xd0\xfc\x5e\x1a\x4e\xa1\xf6\x00\x34\x9c\xa0\xe1\xb4\x21\x35\x9c\x84\x89\xe3\xae\xe1\x14\xda\xb4\x81\xc9\xd4\x79\xf3\x13\x1a\x4e\x1b\xd9\x62\xaa\x59\xc3\xc9\xcd\x62\x6a\x40\xc3\x49\x5c\x7b\x7c\x6c\xa6\x36\xd2\x70\x6a\xdf\x4d\xa4\xba\x34\x9c\x84\xc6\xf7\xd2\x70\x0a\xb7\xfd\xb1\xa9\x84\x4d\xa5\x75\xda\x54\x6a\x50\xc3\x49\x98\x32\xee\x1a\x4e\xe1\x4d\x18\x18\x4b\x9d\x37\x37\xc1\x97\x36\xb4\xb5\xf4\x93\x59\x32\x52\x93\xb5\xa4\x2f\x27\xca\xd2\x6a\x8e\x89\x38\x7d\x7e\x96\xbe\x20\x24\x7e\xed\xaa\x2e\xe2\xb4\x60\xdc\xca\x60\xb6\x9b\x8a\x93\x70\x01\x64\x9c\x90\x48\x86\x44\x32\x24\x92\x21\x91\x0c\x89\x64\x48\x24\x43\x22\x19\x12\xc9\x90\x48\x86\x44\x32\x24\x92\x21\x91\x0c\x89\x64\x48\x24\xab\x37\x91\xec\xb5\x9c\x7b\xee\x61\xdc\x33\x72\xee\x0c\xdd\x47\x46\xc9\x1e\x5f\x38\x23\xf8\xe3\x81\xe8\x38\x9d\xf3\x07\x34\x83\x34\x51\x09\x68\x84\x7a\x94\x0b\x39\x89\x9b\xc4\xd7\x5a\x42\x4e\x22\x67\xb8\xc5\x5d\xc9\x29\x0c\xd2\xc0\xc1\x40\x8a\x9c\x20\xc7\x1c\xe0\x31\x49\x06\xeb\x69\x6b\xc0\x46\x3f\xd8\xf8\x9d\x1e\x72\x9c\x0f\xe8\x43\xe4\x00\x1b\xd0\x7b\x48\x9d\x8d\xcc\x75\x98\x46\x58\x74\xa9\xb5\x13\x50\x7f\x29\xd3\x3c\x62\xf5\x18\x39\x22\x44\xac\xd6\x5f\x4c\xb3\x72\x4e\x41\xcf\xac\xc4\x9f\x09\x58\x4f\x72\xd5\x73\x12\x67\xd9\x6e\x3f\x41\xa7\xf0\xe6\x1b\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x1c\x40\x5c\xfb\x81\xb8\x76\x56\x74\x0a\x9a\x21\x40\xd2\xa9\x8e\xf8\xab\xb7\xf5\x93\x43\x75\xc7\x5f\x99\x9a\x4e\x0f\xf5\xd1\x6f\x08\x9a\x4e\xdb\x5d\x34\x9d\xca\x62\xaf\xdc\xc2\xd3\xc3\x23\x34\x5d\xaa\xea\xf4\xea\xe6\x11\x65\x93\x11\xf9\x41\x4f\xe8\xe8\x07\x05\xdc\x7e\x8b\xbb\xae\x93\x38\xce\x62\x1e\x91\xf8\x80\xef\x1b\x1a\xbe\x7f\xa8\x6d\xe0\x7b\x93\x71\xf8\x81\x43\xf3\x7b\x04\x75\xa7\x6b\x2d\x75\xa7\xb2\xed\x28\x77\x79\xa7\xf0\x66\x04\xf4\x9d\xa0\xef\x04\x7d\x27\xe8\x3b\x41\xdf\x09\xfa\x4e\xd0\x77\x72\xd7\x77\x0a\xda\x0e\x48\x7d\x41\x4c\x5d\xf5\x11\x78\x12\xad\x03\xc9\x35\x0f\x2f\x14\xe3\x00\x29\x78\x1d\x67\x74\xb4\xc2\xe3\xf4\xcd\xc1\x0b\x1c\x22\x1d\x22\x07\xe8\xbe\xd8\xa8\xc5\x72\xae\x2f\x53\x2b\xb0\xef\xea\x88\x2c\xbc\x3f\xac\x55\xb3\xc0\x85\x02\x19\x32\x4f\x3f\xdc\x4a\x7f\x5c\xa9\x59\xe0\x2e\x97\x22\xae\x3d\xae\x9a\x05\xc2\x05\x10\x7a\xaa\x51\xe8\xe9\x63\xae\xba\x05\xfe\x1d\xe0\xa5\x5b\x10\x6e\x1f\x40\xea\x09\x52\x4f\xeb\x2d\xf5\xf4\x95\xea\xfa\x05\xfe\x53\xc7\x5d\xbf\x20\xbc\x89\x03\xe3\xa9\xf3\x66\x28\xc4\x9e\x36\xb2\xe1\xf4\x20\x25\xc7\x1b\x37\x9c\xb8\xda\xd3\xff\x29\xb7\x9c\x76\x56\x55\x7b\x2a\x5b\x7e\xfc\x4c\xa7\x30\xf4\x9e\x3a\x70\x7b\x49\x94\xc8\xdc\xed\xa7\xf8\x24\x76\xc0\xce\x1a\x4c\xa7\x30\x34\x9f\xb0\xdd\x84\xed\xa6\xf5\xdb\x6e\x2a\xb3\x9b\xf6\xd5\xac\xfb\x24\x4e\x9c\x1d\xbe\x86\x13\x94\x9f\x30\x41\x81\x9d\x3a\x1c\x3b\x7d\x27\x46\x5e\x5e\x6e\x3d\x09\x9a\x98\xf4\x0b\x31\xfa\xe8\x55\x82\x5d\x54\x5d\xe4\x49\x94\xc1\xb4\x35\x9e\xec\xbf\x9e\x2c\xa8\x13\xb9\x9c\xb5\xd8\x04\xb7\xb6\x84\x23\xf4\x34\x7b\x27\x49\xf1\xd1\x3d\x4e\x0e\xb3\xd1\xbd\x97\x8c\x90\xe1\x3a\x74\xcd\x02\xc9\x9c\x0d\x5a\xda\x0c\x59\x73\xc8\x9a\x43\xd6\x1c\xb2\xe6\xba\x26\x6b\x6e\xb6\x6d\xb2\xe6\xd6\x2f\x2c\xba\x6d\xd2\xf5\x66\x91\xae\x87\x74\x3d\xa4\xeb\x21\x5d\x0f\xe9\x7a\xad\x4f\xd7\x0b\xdc\x7d\x9c\x45\xfe\x5f\x07\xe6\xff\xcd\xb6\x7b\xfe\xdf\xec\x06\xcc\xff\xa3\xdf\x8b\x91\x68\x39\x69\x29\xd3\xd3\xfe\x52\x8c\xfe\xd5\x55\x0d\xe9\x69\x0f\xd8\xac\x45\xf8\xf3\x46\x83\x2d\x1d\xaa\x53\x06\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x02\xdc\x12\x22\x6e\xf9\x61\x1f\x89\x97\xe3\x16\x76\xcd\xb0\xbe\x22\xaa\x05\x7d\x3d\xd2\xfd\x02\xfd\x76\x8d\x7e\xbe\x8f\xfe\x85\x20\xa2\xf3\x9f\x8d\x4f\x48\x3e\x93\xbd\x9c\xcd\xac\xca\x39\xf1\x0d\x65\xcb\x5c\x9b\xb4\x4a\x3a\x6f\x94\x94\x14\xf2\xc7\xc7\xac\x0f\x7a\x9c\x15\x17\xb7\xdd\xe4\x32\xbf\xa7\x50\x54\x2c\x59\x00\xad\xa4\xc8\x99\x64\x62\xe4\x8a\x1d\x9a\x57\xf9\x90\xb9\xac\xb6\xe1\xe0\xce\x25\x32\xcf\xe1\xce\x0c\x39\xc5\xe0\x0e\x3b\x32\xb5\x81\xb8\x3c\x36\xe8\xa6\x75\x73\xcb\x97\xf4\xf4\xb9\x93\x9e\x97\x52\xc2\x2a\xc6\x71\xcf\x1d\xfe\xb8\x67\x2f\x1d\xa9\xc4\x3d\x95\xdd\x02\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\x03\xea\xd3\x2a\xea\xf3\x97\x7d\x64\xbb\x1b\xf5\xc9\xc8\xca\x8a\x6e\xde\x94\x34\xfa\xbb\x7d\xf4\x01\x01\xf6\xac\xd6\x06\x7b\xa6\x58\x01\x0b\x4a\x29\x20\xc6\xb3\x53\x60\x3c\x56\xd9\x40\x3b\x01\xa2\x9d\x5b\xfd\xd1\x4e\x82\xee\xac\x44\x3b\x56\x6f\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\x80\xe8\xb4\x8a\xe8\x3c\xd1\x47\x6e\x76\x25\x3a\x4a\x31\x57\x58\xd3\x3f\x72\x1a\xfd\x58\x1f\xfd\x84\x80\x74\x2e\xd7\x88\x74\xac\x12\x02\x62\x3a\xbb\x44\xa6\x63\x15\x0e\xa8\x13\x20\xd4\x69\x54\x0c\xc7\xee\x0e\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x1d\x50\x9d\x56\x51\x9d\x6f\xf7\x3b\x4f\xbb\xe2\x54\xc7\xe3\xe8\x06\xb7\xa4\xad\x0f\xf7\xd3\x87\xda\x28\x69\x6b\xf7\x15\x37\x3d\x75\xf7\xf4\x2d\xe0\x1f\xa4\x6b\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\xad\x03\x06\xda\x78\x87\xf6\x00\x34\x01\x34\x01\x34\xd5\x06\x9a\xbe\x31\x40\xa6\x9b\x03\x4d\xc6\x51\xa1\xf4\x97\x06\xe8\x0b\x02\x6f\xfa\x54\x8f\xd1\x0d\x02\x65\xca\x9b\xab\x96\x29\xd3\x1c\x12\x6d\x1a\xb4\x8d\x15\x66\x90\x19\x9f\x36\xdd\xde\xb1\xad\xb0\x78\x99\xc5\x2d\x94\x9d\x4c\xc4\x6b\x64\x55\xe0\x54\xf5\x9c\x47\x77\x85\x9f\x47\x07\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\x05\x46\xd5\x0c\xa3\x3a\x4e\x8e\xd2\xf1\xd8\x61\x8b\x51\x6d\x17\x8f\xa4\xae\x74\x1c\x3a\xe1\x64\x6a\x40\x2e\x40\x2e\x40\xae\xda\x20\xd7\x67\xfb\xc9\xfe\x3a\x20\x97\x20\x86\x74\x6f\x3f\xfd\x9d\xf5\x17\x43\x8a\xb9\xf2\xa8\x32\x59\x24\xa0\x28\xc8\x20\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x81\x42\x21\x52\x0a\x10\x09\x10\x09\x10\xa9\x59\x88\xf4\x07\x03\xe4\x48\x43\x10\xc9\x0c\x90\xfa\xe7\x7e\xfa\x75\x81\x25\xfd\x7e\x2d\x01\x52\xc1\x92\xa4\x66\xe3\xa2\xb6\x57\xe7\x50\x60\x50\x0d\x84\x43\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x81\x3f\x35\xc0\x9f\x0e\x90\x7d\x74\x34\xb6\xc7\xe2\x4f\x2f\x13\xa3\xa0\x2c\x7f\x01\xc1\x4f\xe0\x56\xe0\x56\xdd\xc3\xad\x1e\xea\x27\x07\xea\xe1\x56\x82\x6e\xf8\x3b\xfb\xe9\xfd\x6d\xa0\x1b\xde\xe7\x8e\x9d\xca\x14\xc4\xc1\x9e\xa0\x18\x0e\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x85\x00\x28\x80\x24\x80\x24\x80\xa4\xa6\x41\xd2\x1f\x0f\x90\xa3\x8d\x81\x24\x33\x02\xea\x5f\xfb\xe9\x37\x04\x9e\xf4\x40\x4d\x11\x50\xc1\xd2\xa4\x66\x43\xa0\x6e\xf6\x61\x51\xe0\x50\x0d\xc4\x40\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x81\x41\x35\xc2\xa0\x0e\x92\xfd\x74\x6f\x6c\xc4\x62\x50\xd7\x95\x05\x41\x59\x0e\x03\xa2\xa0\x00\xaf\x00\xaf\xba\x07\x5e\xd5\x19\x05\xa5\x2a\x0c\xae\x30\x0d\xa8\xc6\xa2\xa0\xce\xf3\x12\x82\x13\x81\x72\x8f\x82\xb2\x1f\x83\x28\xa8\x75\x88\x82\xb2\x9b\x1f\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\x0a\x04\xaa\x1b\x09\x14\x40\x12\x40\x12\x40\x52\xa7\x82\xa4\x3a\xa3\xa0\x04\x90\xd4\x4c\x14\x54\xc0\x34\x29\x9c\x28\x28\xbb\x92\xe0\x50\x2d\x8c\x82\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\xea\x6e\x06\x55\x35\x0a\xca\x76\x18\x10\x05\x05\x78\x05\x78\xd5\x3d\xf0\xea\x8b\xfd\xe4\x60\x1d\xf0\x4a\x2b\xc9\x25\x65\x69\x35\xc7\xc2\xa0\xde\xdd\x4f\x1f\x10\xb0\xd5\x95\xda\xc2\xa0\x16\x8c\x22\x82\x8b\x83\xea\x77\x65\x4f\xc2\x73\x10\x08\xd5\x44\x20\xd4\x39\x7f\x08\x35\x48\x13\x95\x10\x4a\x68\x7f\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\x28\x50\xa8\x6e\xa4\x50\x80\x49\x80\x49\x80\x49\x9d\x0a\x93\xfe\x64\x80\x1c\x6b\x10\x26\x99\xa1\x50\xff\xd6\x4f\xbf\x25\x30\xa5\x8f\xd7\x12\x0a\x15\x34\x51\x6a\x36\x16\x4a\xf2\xe3\x51\x60\x51\x0d\x04\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x81\x43\x35\xc4\xa1\x0e\x91\x03\x74\x5f\x6c\xd4\xe2\x50\xd7\x8b\xd1\x50\x82\xc7\x80\x70\x28\x10\x2c\x10\xac\xee\x21\x58\x4f\xf4\x91\x9b\xdd\x08\x96\xa8\xfe\xf4\xb1\x3e\xfa\x89\x36\x50\x7f\xda\x25\x50\xa6\x72\xcd\xa7\x93\x05\x75\x22\x97\xb3\xc8\x93\x06\xdc\x04\x0d\x28\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\x27\x10\xa7\x16\x12\x27\x50\x1d\x50\x1d\x50\x9d\xf5\xa1\x3a\x4f\xf5\x11\xc9\x8d\xea\x94\x65\xb3\x7d\xbc\x8f\xfe\x51\x3b\x64\xb3\x25\x04\xae\xe3\xc8\x61\x03\xd8\x41\x4e\x1b\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x0e\xc8\x4e\xf7\x91\x9d\xef\x46\xc8\xb6\x32\xb2\xb3\xa8\x94\xe4\x91\x61\xfa\x78\x84\x3e\x1a\x21\x2f\x35\x60\x0e\xfb\x63\xf4\xfa\x65\xa5\x54\xfe\x5d\xe3\xd5\x4e\x44\x97\x95\x12\xe7\x2d\xec\xc2\x89\xf9\x19\xd3\x7d\x0b\x8e\xb0\x8c\x55\x14\x34\x56\x51\xd0\x58\x2d\x05\xcd\x16\xc9\xed\x1c\xaa\x9c\x25\x73\x0c\xaa\x9c\x24\x53\x24\xd5\x00\x54\x11\xde\x73\x2e\xab\xf9\x92\x15\xfa\xdb\x7d\x64\x87\x4b\x5b\xeb\x1f\x1f\xb5\xa0\x2f\xfd\xba\x0b\xa6\xf7\x94\x46\x7f\x12\xa3\x77\xf7\x3a\x9a\x7f\x0f\x37\x80\x55\x63\xcd\x32\xd7\x76\x33\x89\x6f\xd2\x2a\xe6\xbc\x51\x4c\x62\x44\xbf\x43\xe8\x98\xca\x4b\x36\x1a\x10\x7b\x03\x39\xc7\xfb\xee\x34\x39\xc9\xfa\xee\x04\x39\x46\x8e\x78\xf5\x5d\x52\x6f\xbf\xa4\xd1\x7e\xc9\xca\xb7\xaf\xa5\xd7\xde\xb0\xdd\x9d\x87\x6d\xa1\x9b\x38\x0a\xfb\x19\x7f\x14\x76\x88\x1e\xa8\x44\x61\x95\xd5\x11\x89\x18\xab\x32\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x18\xb0\x58\x98\x58\xec\x2d\x7d\x64\xbb\x0b\xaa\xc9\x28\xc5\x5c\x61\x4d\xff\xc6\x69\xf4\x6b\x31\xfa\x8d\xab\x1c\x88\x66\x67\x75\x44\x33\x65\xdd\x9e\xd8\xe5\x40\x33\xf6\x4f\x1b\x0d\xc9\x2c\x92\x53\x1c\xc9\x9c\x20\xc7\x18\x92\x39\x44\x0e\x90\x7d\xb5\x21\x19\xfb\xad\x03\x41\x31\x0b\xfe\x28\x66\x0f\x4d\x56\xa2\x18\xbb\x1a\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x40\x30\x2d\x45\x30\x0f\xcc\x91\xa3\x2e\x08\xc6\x43\x0a\xdb\x2d\x88\xe6\xfb\x67\xe8\x47\x6f\x69\x3a\x88\x66\xb7\x83\xd4\xd8\x82\xd4\x95\x17\xb7\x39\xab\x49\x81\x65\x80\x65\x80\x65\x80\x65\x74\x0d\xcb\x48\xb5\x0d\xcb\x08\xbc\x26\x0d\x23\x85\x14\x90\x02\x90\x02\x90\x02\x90\x02\x90\x42\xeb\x91\x42\x0a\x04\xa0\x03\x09\x40\xaa\xdd\x09\x40\x6a\x03\x12\x80\x6e\x4b\xf6\x88\xfd\xce\x16\x07\xac\xb8\x81\x7f\x0d\x24\xd9\x8d\x4b\x0c\xf1\x1f\x5b\x4d\x26\x38\x48\x38\x4b\xe6\xc8\x2c\xed\x5d\x2c\x64\xd6\xa2\xec\x7f\xa5\x9e\xc4\x18\x39\xd4\x68\xdf\xa4\xee\x8b\x90\x0f\x44\xe8\x2f\x45\xa2\xef\x8b\x98\xc3\xf3\x5f\x7b\xd8\xd2\x63\x2c\xc4\x83\x4c\x48\x28\xad\xbb\x5b\x7c\xb1\x2b\x33\xfe\x4d\xa3\x49\xff\xf0\x2f\x2a\x52\x51\x6f\x5a\xdd\xe2\x4a\x4a\x13\x79\x29\x9b\xe7\x6e\x77\x41\x95\x56\xf3\x96\xe7\x9e\x91\x32\xea\xda\xf9\xd5\xbc\x94\xc9\xaa\x8a\x3e\x85\x14\xcb\x1d\x64\xcb\x81\xfe\xd9\x34\xfc\x61\xd3\xfa\x35\x3c\x10\x69\x69\x55\x65\x16\x56\x51\x2d\xa4\x15\x4d\x33\x56\x4c\xc1\x50\x4c\x4a\x77\xb0\x27\x32\xcb\x95\x7d\x90\xf4\xe5\x72\x22\x97\x1b\x63\x5f\xaf\x8c\xba\x26\xa9\xab\x79\xdd\x33\xd2\xe7\x9c\xf9\xc9\x36\x8a\x53\x32\xb1\xcd\xbc\x6a\x22\x62\x7c\x67\x84\x9c\xe1\x93\x61\x8a\xa4\xd8\x64\x38\x42\x9a\x68\x70\xae\x2b\x34\xc2\x74\x85\xb6\x4c\x72\x9b\xa3\xc9\x12\x6f\xd3\x4b\x1c\xa5\xb3\xe4\x34\x79\xc9\x44\x3a\xad\x14\x9b\x2f\xb2\xf1\xd9\x5a\x2c\x84\x3d\x5b\x13\xdf\x92\x1c\xb3\x35\xce\xad\x34\x29\xad\xdf\x99\x36\x17\x72\x97\x99\x7b\x90\x5f\x58\x96\x98\x67\xde\xd2\xc2\x39\x0c\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\x08\x18\xd8\x7e\x30\x70\x99\xcc\x71\xfe\x31\x4d\x26\x19\xff\x38\x4a\xc6\xc9\xe1\x06\x54\x7b\x16\x4a\x72\x69\x55\xf3\x65\x0b\x09\x77\xb6\xb0\x8d\x6e\xe5\xeb\xaf\xed\xe5\x87\x2c\x01\xb3\x6e\x31\xf0\x1b\xef\xa0\x46\xfa\x8d\x01\x32\xd5\x54\xcc\x18\xff\xfd\x2e\xfa\xcb\x03\xf4\x17\x36\x39\xf8\xce\x00\x5b\x98\xca\xfd\x7b\xb7\x78\x31\xfd\xb2\xf5\xa1\xb2\x6f\x26\x77\xd1\x37\x45\xd7\xcc\xf6\xbc\x73\x81\x5b\x8f\xcc\x02\x7d\x23\xb3\xe4\x16\xf5\x7f\xc9\xe9\x52\x52\x92\xa6\xf5\xff\x9a\x7f\x5f\x91\xb3\xf9\x92\x9c\xcd\x6b\x52\x3a\xb7\xaa\x95\x14\x75\xc8\x78\xc7\xb4\xe1\xe4\x48\xb9\xec\x25\x45\x8a\x5b\x2f\x13\x4f\xc6\x36\xb1\x92\xc4\x21\x93\x2a\x11\x95\x16\xa3\x79\xb3\x02\xb7\x59\x15\xb0\xf0\xcf\xa2\x59\x15\x25\xc3\xea\xc0\x9e\xae\x77\x60\x51\x33\x9f\x64\x98\x0e\xab\x9a\x6e\x11\xc8\x79\x6e\xc0\xf1\x95\x22\x19\xdb\xcc\xef\x2e\x1b\xa8\x4b\xc1\xa2\x51\xbf\x95\xe1\x26\xf7\x95\x61\x33\xed\x5d\x56\x42\x86\x8e\xd1\x6f\x6d\x76\x66\x9c\xaa\x4a\x31\x27\xa7\x15\xff\x71\x99\x34\xae\xc4\x86\x41\x57\x6c\x18\x7c\xb2\xa7\xdd\x37\x0c\x1a\x9f\x67\xc5\xd5\xb0\xe1\xfe\x47\xae\x71\x6e\xc5\x19\x70\xdf\x7d\x2b\xae\x02\xe8\xb7\x70\x66\x5d\x20\xe7\xc9\xbc\x38\xb3\x12\x29\x72\xa2\x01\xbb\x68\x8a\xbd\xc3\x39\x86\xfc\x35\xcc\x2f\x9f\xf9\x95\x7a\x2e\x42\x9e\x8d\xd0\x67\x22\xd1\xa7\xad\x06\x7a\x20\x72\x41\x34\xdc\xb3\x79\x49\xe3\xc6\xb7\xb4\xa8\x2c\x15\xb8\xdb\x6a\xfa\x96\xf6\x9e\x8a\xe1\xce\xb3\x2a\xae\x2a\x9c\x92\x2f\xea\xa6\x72\x7e\x28\xaf\x2c\xcb\xac\x21\x0c\xdb\x5d\xf7\x12\xcc\xad\x04\x4e\x99\xac\x2e\x30\x86\x67\x76\x65\x45\xc9\x64\xe5\x92\x92\x5b\x33\xd0\xbc\xb8\xf1\x92\xcf\xe6\x06\x0d\x93\x9e\xb9\x7e\xd2\xb2\xaa\x7f\x3a\x8a\x8a\x9a\x2d\x64\x2c\xd7\xc4\xfe\x8a\x94\xd6\x8a\x36\xda\x58\xd5\xf4\x4a\x8a\x4e\xa3\xac\xdf\x69\xbe\x90\xf1\x90\x25\xe1\x73\x9d\xd5\x6f\x60\xf5\x5c\x51\xe4\xbc\x6b\x1d\x63\x94\x55\x61\x9e\xd5\xc0\xcd\x55\x79\x3c\x42\x1e\x8d\xd0\x47\x22\xd1\x87\xad\x66\xfe\x50\x64\x4a\x38\x26\xa6\xa8\x7b\x69\x8a\x05\xc7\xe6\xd5\x42\x51\x5e\x66\x1d\x30\x5f\xc8\x65\xd3\x6b\x83\xbc\x0d\x38\x0e\x32\xdf\xc5\x3e\x67\x46\xef\xa5\x91\xe4\xc1\xa4\x24\xd8\x4a\x19\xa5\xa8\xe4\x33\xba\xc3\x6f\x71\x56\x45\x2a\xa8\xc5\x8b\xb2\xee\xc7\x4b\x86\x01\x3e\xbc\x24\xe7\xcc\x7d\x89\x18\xff\x35\x26\x2d\x65\xf3\xcc\x92\x56\xad\x47\xc9\x99\x0c\xe3\x26\xc3\xdc\x05\xca\xd8\x2e\x36\x2f\x3c\xae\xd9\x37\xf1\x9d\x80\xa4\x34\x9d\x65\xc3\x59\xa8\x78\x41\xad\x7c\x33\x86\xc5\xf8\xa6\x1c\xdf\x88\x60\x93\xad\x50\xba\x98\x8c\x5d\xc3\xeb\x33\x65\xbe\x88\x56\x66\xa5\xdd\xdb\x4b\xee\xe9\xa5\x77\xf7\x46\x5f\xb4\xa8\xc3\x53\x57\xbd\xc2\x20\x85\xfa\x94\xba\x58\xb8\x22\x2d\xcb\xea\xa2\xee\x9d\x0b\xbb\x99\xd6\xbc\x50\xd4\xa5\x82\xba\xa2\xb7\x85\x6b\x4d\xcf\x39\x1e\xee\x5d\x51\x36\x9e\xcd\xc1\x58\xe4\x6f\x95\xd5\x07\x4a\x3a\x9b\xb1\x91\x3f\xa3\xc7\x6c\x03\xc6\x6a\x5d\xdd\x83\x37\x5c\x1a\x93\x0f\x27\x85\x66\x34\xc9\xa2\xe9\x0c\xd9\xd6\x6c\xf9\xc3\x92\x12\xdf\xa9\x66\xb4\x52\x5c\x1c\xe2\xfc\x1d\xe2\xd2\x90\xd1\xf1\xe5\x03\x43\x1b\x97\xe2\x29\x39\x7d\x49\xff\xba\xe4\x33\xfa\x55\x72\x2e\x57\xb8\xc2\x2e\x72\x34\x1c\xc7\xf9\xc6\xd0\x2f\x2f\xc4\x7c\x83\x45\xab\xa4\x71\x29\x7e\xb2\xa0\x2a\x42\xb1\x52\x5a\xd6\xd2\x72\x46\x7f\x7b\xa3\x7d\xd8\x62\xcb\xcb\xd3\xf8\xea\x55\x51\xe0\x92\x55\x46\x32\xb6\xb5\xe8\x1c\x37\xa2\x95\xf0\x60\x4f\xc0\x6e\xf5\x79\x1e\x05\x70\x86\xcc\x08\x51\x00\x21\xbb\xea\x92\xbb\xa1\x70\x35\xdd\xc2\x9b\x29\x5c\x5b\x21\xf5\x23\xa7\x4d\x3e\x62\x7b\xe6\x9c\x81\xf8\x1b\xe7\x83\x45\xfb\xcc\xaa\x16\x1a\x10\x37\x38\x0b\x1a\x62\xf5\xd8\xcd\xe4\x95\x6f\x14\x7f\x5c\x51\xd4\x65\x45\xfc\x75\x87\xf8\xab\x56\x52\xe5\x92\xb2\x9c\x4d\x0f\x39\xaf\xab\xd7\xf0\xaf\x32\x1a\xe6\xf5\x42\x61\x98\xf8\x19\xfe\x2d\xf6\x86\x6f\x76\x9f\x7c\x2f\xa1\x9b\xd9\x20\x08\x19\x8e\x1d\x27\x47\xe9\x78\xec\xb0\xc5\xa8\xb6\x33\x38\x65\xb4\x71\x65\x09\xb1\x5e\xfd\x77\x11\x41\x6d\x40\xc8\xf5\xa9\x33\x64\x7f\xed\x90\x4b\x94\xac\x7a\x71\x96\xfe\x9c\x33\x21\xb2\x76\xc9\xaa\x3e\xcf\x44\x48\xfb\x22\x24\x40\x22\xe6\x09\x31\x4f\x88\x79\x42\xcc\x13\x62\x9e\x10\xf3\x84\x98\x27\xc4\x3c\x21\xe6\x09\x31\x4f\x88\x79\x42\xcc\x13\x62\x9e\x10\xf3\x54\x6f\xcc\x53\x87\x4b\x2b\xc7\x7e\xe8\x24\xa7\xdb\xac\x84\x47\x81\x3b\x0c\x54\x49\x74\x0c\x81\x3c\x70\x50\xc0\xce\x84\x73\x60\xcb\x51\xb2\xa7\xde\xb6\x07\xae\xf4\xc3\x95\x3f\xec\x21\x93\x7c\x90\x1f\x21\x63\x6c\x90\xef\x23\x0d\x34\x34\x39\xcd\xe3\x13\x26\xc8\x71\x3b\x3e\xa1\xb1\x92\x66\xf8\x16\x46\x8a\x9c\x10\xb6\x30\x1a\x2b\xaa\xd9\x04\xc6\x30\x66\x5d\xe2\x4b\xce\xc4\xc5\x9b\x5d\x13\x17\x85\x19\x38\x5c\x53\xc2\x62\x68\x73\x11\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\x0e\xd0\xae\xfd\xa0\x5d\x3b\x27\x2a\x86\x72\x40\x1a\x12\x14\x6b\x8f\xdd\xfa\x62\x3f\x39\xd2\x50\xec\x96\x99\x98\xf8\x8e\x7e\xfa\x4f\xbd\x0e\x7e\x73\x93\x4b\x62\xa2\x18\xb7\xe5\x99\x90\x18\x1a\xb1\xe9\xd2\x44\xc4\xd7\x06\x83\x32\x9b\x4c\x40\x0c\x63\x92\x47\xff\xc0\x89\xea\x25\xf7\xc4\x43\x61\xdc\xed\xa8\x96\x70\x08\x70\xbf\xd1\xc1\xfd\x6f\xb7\x1d\xb8\x6f\x32\xa1\x30\x14\xd8\xfe\x1e\x67\x22\xe1\x36\x2b\x91\x50\xdc\xe2\xaa\x92\x40\x18\xda\x4c\x41\xe2\x20\x12\x07\x91\x38\x88\xc4\x41\x24\x0e\x22\x71\x10\x89\x83\xee\x89\x83\x61\xd8\x04\xa9\xaf\x38\x6d\xe9\x5d\x3e\x09\x83\x82\xa5\xd0\xef\x9d\x28\x18\x86\xa1\x80\x04\xc1\x8e\x33\x40\x5a\xe5\xa5\xfa\x26\x06\x86\x02\xa3\x0e\x92\xfd\x74\x6f\x6c\xc4\x62\x42\xd7\x89\x09\x81\xf6\x9d\x1d\x91\x08\xf8\xae\x9f\x22\xd3\xcd\xc0\xa4\x61\xb5\x90\xcb\xe9\xdf\x10\xfa\x39\x12\x7b\x8f\x53\xee\xea\x66\x23\x16\xcf\xbc\x88\x53\x79\x61\x29\xaa\x76\x00\x81\x7d\xd9\x79\xe3\xf6\x76\xd2\x13\xaa\xac\xdd\xec\xbb\x23\x01\x7f\xcf\x6e\xe3\x6e\xed\x2c\x39\x6d\xbb\xb5\x1b\xf0\x13\x19\x96\xc4\x7e\x65\x17\xb8\x4c\x66\x2c\xe5\x3e\x4b\xf9\xfb\x7b\xc8\x7b\x7b\xe8\x7b\x7a\xa2\xef\xb6\xf6\x47\xd2\x33\x4b\xd2\x8c\x0b\x39\x2f\xdb\xd1\x1e\x14\x3d\x4a\xc3\xc8\xb6\xb7\x8d\x8d\x2d\xdf\x74\x61\xa5\x98\x53\x98\xfd\x6c\x95\xc3\x1a\xb6\x16\x36\x5f\x35\x31\xbb\xb2\xf3\x3b\x62\x3d\xfe\x2c\x25\xa9\xa6\xd6\x63\x2d\x2d\xe7\x14\xfa\xe3\xad\xf4\xc5\x88\x63\x31\xde\xc1\x10\x3f\xfb\xdd\x6c\x44\x57\xf3\x70\x67\x0d\xac\x7f\x41\x2f\x25\xd8\xe5\x78\xf6\x55\xe4\x18\x5f\x3d\x0f\x92\xfd\x6c\xf5\x1c\x26\x43\x64\x77\x6d\xab\x31\xab\x4f\xb3\xd0\xfb\xac\xff\x3a\xb4\x9b\xee\xaa\x5c\x87\xf8\xc3\x2b\x79\xf7\xc7\x2a\x6c\x74\x93\x77\xfb\x77\xc2\xee\xda\xc0\x77\x08\xfd\x90\x9a\x20\xfa\xc4\x2b\xff\x2c\xd6\xd7\x11\xb0\x9f\xfd\x16\xdd\xfb\x7a\x9a\x1e\xec\x93\xdc\x38\xd0\x0d\x70\xcb\x38\x68\xe1\x8c\x61\xb8\x3b\xe0\x19\x93\xfa\x9a\x73\xc6\x8c\x56\x78\xb5\xfe\x53\x67\x57\x2d\xee\x6d\xc0\x13\x07\x3e\x6e\xe7\xcd\xd1\xf0\xbf\x47\xbe\xee\x6d\xc0\xf3\x6b\x76\x94\xec\xa1\xc9\xd8\xa0\x65\x10\x6d\x15\x2d\x2a\x76\x53\x47\x18\x51\xcf\x53\x32\xd9\x9c\x11\xc5\x1c\x1b\x7a\x3f\xa5\xef\xbc\xca\x79\x42\x17\xb7\xa2\xd8\x05\xd5\x97\xa1\x5a\xcc\x28\x56\x4c\xc0\x76\x54\x07\x47\x10\xfc\xb9\xf3\xfb\x90\xb0\x2c\x2a\xff\x0e\x19\xac\xd1\xa4\x0a\xa1\x4f\x10\x51\x80\x88\x82\x36\x8a\x28\x48\x7d\xd7\x39\x8f\xf6\x56\xda\x59\xfe\x13\x2a\x51\x93\xa1\x15\xf0\x74\x82\xa5\xd5\x79\x93\x16\xbb\x09\x1d\xb2\x9b\xf0\xf0\x19\x72\xa0\x76\xc3\x4b\x5f\x62\x94\xa5\xd5\x9c\xa6\x94\x34\xfa\xae\x33\xf4\xdd\x4e\x5d\xc1\x5d\xd5\x75\x05\x17\x8c\xfb\x17\x94\x52\xa2\xdf\x53\x58\x50\xb8\x0a\xca\x82\x48\x52\x46\x92\x32\x92\x94\x91\xa4\x8c\x24\x65\x24\x29\x23\x49\x19\x49\xca\x48\x52\x46\x92\x32\x92\x94\x91\xa4\x8c\x24\x65\x24\x29\xd7\x9b\xa4\x9c\xe6\x90\x74\x0f\x83\xa4\x91\x73\x67\xe8\x61\x72\x90\xec\xaf\x71\x7f\xcc\x76\xca\x03\x91\x16\xbc\xe0\x4f\x6e\x46\xe8\xb0\xcb\x46\x99\x5d\x0f\x17\x6d\xc1\x17\x9c\x98\xf4\x5a\x4b\x5b\x50\x64\x0f\x3b\xaa\x04\x31\x86\x41\x1f\x38\x2c\x38\x45\xa6\xc9\xa4\x83\x52\xee\x25\x23\x75\xb7\x3f\xf0\xa4\x1f\x9e\x7c\xbe\x87\x4c\xf1\x91\x7e\x94\x8c\xb3\x91\xbe\x9f\x34\xd2\xd2\x5c\x15\x70\x84\xa9\x02\x5a\x9b\x0a\x0d\x16\x35\xcb\xe3\x38\x27\xc9\x84\x10\xc7\xd9\x60\x59\xcd\xc6\x6f\x86\x32\xf9\x12\x8f\x39\x25\x06\x25\x57\x89\x41\x71\x22\xee\xa9\x49\x63\x30\xbc\x29\x09\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\xd7\x7e\xfc\xae\x9d\x45\x06\x43\x41\x0a\x50\x19\xac\x23\x94\xeb\x6b\xfd\xe4\x68\x63\xa1\x5c\xa6\xcc\xe0\x07\xfa\xe9\xf3\x4e\x99\xc1\xed\x2e\x32\x83\x65\x61\x5c\x9e\x41\xf3\xe1\x51\x9b\x2e\x15\x1a\x7c\x5d\x40\x50\xb3\xc9\x3c\x81\x50\x66\x7a\xf4\x41\x27\xb9\xbf\xc5\x5d\x6a\x50\x1c\x7b\xf1\x6a\xf9\x01\xe0\xf8\x1b\x9f\xe3\x7f\xb4\x0d\x39\x7e\x93\xd9\x01\xe1\xa0\xf7\xf7\x3a\x05\x07\xaf\xb5\x04\x07\xcb\xf6\xbd\xaa\x28\x0e\x86\x37\x5f\x20\x39\x08\xc9\x41\x48\x0e\x42\x72\x10\x92\x83\x90\x1c\x84\xe4\xa0\xbb\xe4\x60\x28\x66\x41\xa5\x3a\x43\xc2\x47\x73\x50\x34\x16\x06\xbc\x93\x05\x43\xb1\x15\x90\x27\xd8\x71\x36\x48\xcb\x5c\x56\xdf\x44\xc1\x70\xf0\xd4\x21\x72\x80\xee\x8b\x8d\x5a\x94\xe8\xfa\x32\x75\x06\xfb\xd6\x8e\x48\x15\xfc\x42\x5d\x1a\x0d\x2e\x7c\xc9\x50\xba\x7a\x2b\xa5\x6f\xf5\xd0\x68\x70\x57\x8a\x11\x17\x25\x6f\x8d\x06\xe1\x2a\x68\x5d\xd5\xa0\x75\xf5\x80\xb7\x32\x83\x7f\x37\x54\x55\x66\x08\xb7\x27\xa0\x76\x05\xb5\xab\xf5\x52\xbb\xfa\x7a\x0d\x2a\x0c\xfe\x93\xa7\x8a\x0a\x43\x78\x53\x07\xd6\x55\xe7\xcd\x52\xe8\x5d\x6d\x54\x5b\xea\x67\xb7\x91\xa9\x26\x6d\x29\x2e\x78\xf5\x69\x4a\x7f\xde\x69\x4c\xed\xac\x2a\x78\x55\xb6\x12\xd5\x64\x4d\x85\x21\x79\xd5\xd1\x7b\x59\x8f\x38\x3f\x13\xbb\xfd\x44\xaf\xc4\x4e\x19\xaa\xd5\xb6\x0a\x43\xf6\x0a\x7b\x5b\xd8\xdb\x6a\xaf\xbd\xad\xd4\xdf\x3b\x67\xd3\xbe\x9a\xa5\xaf\xc4\x69\xb5\xbb\x36\xab\x0b\xe2\x57\x98\xb9\x80\x5a\x5d\x03\xb5\xee\xe9\x23\x37\xbb\x18\x62\x65\x42\x57\xcf\xc6\xe8\xb7\x9d\x36\x56\x1d\x42\x57\x09\x87\xd0\x95\xf0\xdb\xc9\x82\x3a\x91\xcb\x59\x0b\x51\x70\xeb\x4e\x38\x72\x57\x9d\x9f\x40\x3c\x8b\x84\x40\x24\x04\x22\x21\x10\x09\x81\x5d\x93\x10\x38\xdb\x36\x09\x81\xeb\x17\xec\xdd\x36\x99\x88\xb3\xc8\x44\x44\x26\x22\x32\x11\x91\x89\x88\x4c\xc4\xd6\x67\x22\x06\xee\x5c\xce\x22\xb5\xb1\x03\x53\x1b\x67\xdb\x3d\xb5\x71\x76\x03\xa6\x36\xd2\xb7\xf7\x93\x41\x17\x0e\xc3\x2e\x1c\xd6\x97\x45\xb5\xa0\x2f\x4a\xba\x73\xa0\x97\xa1\xd1\x2f\xf7\xd1\xa7\x9d\xb9\x6a\xff\xd9\xf8\x98\xe4\x33\xd9\xcb\xd9\xcc\xaa\x9c\x13\xdf\x55\xb6\x0c\xb7\x49\xab\xb8\xf3\x46\x71\x49\x21\xde\x7a\xcc\xfa\xb4\xc7\x59\x71\x71\xdb\x61\x2e\xf3\x80\x0a\x45\xc5\x0a\xa3\xd7\x4a\x8a\x9c\x49\x26\x0e\x5c\x71\x20\xe6\xca\x27\xcd\x65\xb5\x0d\x47\x7d\x2e\x91\x79\x4e\x7d\x66\xc8\x29\x46\x7d\x58\x04\x4e\x03\x7c\x99\x8d\xc1\xe9\xcb\xb5\x28\xff\xf7\xb9\xd3\x9f\x97\x52\xc2\x2a\xc6\x11\x50\xa3\xc7\x90\x56\x76\x0b\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x10\x48\x50\x4b\x49\xd0\x77\xfa\x48\xbf\x27\x09\x12\x4e\xfe\xa5\x9f\xe9\xa3\x9f\x73\x12\xa0\xcb\xb5\x11\x20\xfb\x10\xbf\x80\xc8\x4f\xd2\x49\x7e\xec\x27\x80\xf8\x04\x48\x7c\x42\x39\xef\x11\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x07\xa4\x27\x3c\xd2\xf3\x42\xbf\xab\xa0\x10\x27\x3d\x1e\xa9\xf0\x6e\xa1\x40\x1f\xef\xa7\x4f\xb6\x5b\x28\xd0\x1e\x27\x10\xb2\xb3\x4d\xdd\x83\x82\x80\x84\x10\x04\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\x04\x34\xb4\x5e\x68\x68\xe3\xa9\x99\x00\x3e\x01\x3e\x01\x3e\xd5\x06\x9f\x9e\x1f\x20\xb3\x01\xc0\x27\xf3\xe8\xb4\xff\x31\x40\xdf\xb1\xc9\xc1\xa0\x3e\xd5\x63\x74\x88\x40\x9e\xf2\xe6\xfa\x65\x2a\x05\x85\x44\xa0\x06\x6d\xb3\x85\x99\x66\xc6\x47\x4e\xb7\x7c\x6c\x7b\x2c\x5e\x66\x7b\x0b\x65\x27\x13\x83\xf5\xf0\x2b\xb0\xab\x7a\xc4\xbb\xae\x70\xf1\x2e\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\x2b\x70\xab\xa6\xb9\xd5\x71\x72\x94\x8e\xc7\x0e\x5b\xdc\x6a\xbb\xa8\xdf\x5b\xe9\x3d\x74\x82\x8c\x2f\xc0\x17\xc0\x17\xc0\x57\x6d\xe0\xeb\xab\xfd\x64\xbc\x5e\xf0\x25\xa6\xdd\xfd\x4a\x3f\xfd\x74\xbb\xa4\xdd\xed\xf4\xa6\x54\xe5\x09\x78\x20\x54\x48\xb8\x03\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x42\x54\x15\xe0\x12\xe0\x12\xe0\x52\x30\x70\xe9\xd1\x01\x92\x6a\x02\x2e\x99\xd1\x54\x6f\x1f\xa0\x3f\x70\x32\xa6\x07\x6a\x89\xa6\x0a\x98\x30\x35\x1b\x45\xd5\x5f\x0b\x9f\x02\x9b\x6a\x20\x7a\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\xaa\x61\x2e\x75\x90\xec\xa7\x7b\x63\x23\x16\x97\xba\x4e\x8c\x9a\xb2\xbd\x06\x44\x4b\x01\x68\x01\x68\x75\x0f\xd0\x7a\xa6\x9f\x1c\xa9\x17\x68\x69\xc6\x09\xf3\x9a\x52\xd2\xe8\x07\xfb\xe9\x9f\x3a\x51\xd6\x95\xda\xc2\xa5\x84\x93\xea\x03\x8a\x97\xda\xe5\xcd\xa3\x1c\xc7\xf3\x03\x4a\x35\x18\x30\x75\xc1\x1f\x4c\x8d\xd0\xe1\x4a\x30\x25\xb4\x3f\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x54\xd7\x92\x29\x00\x26\x00\x26\x00\xa6\x4e\x05\x4c\x4f\x0c\xd4\x2f\x82\x2e\x02\x26\x33\x64\xea\x9d\x03\xf4\x9f\x9d\x9c\xe9\xe3\xb5\x84\x4c\x05\x4d\x99\x9a\x8d\x99\x1a\xa8\x89\x51\x81\x4f\x35\x10\x34\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\x05\x36\xd5\x38\x9b\x3a\x44\x0e\xd0\x7d\xb1\x51\x8b\x4d\x5d\x2f\x46\x4d\x09\x6e\x03\xc2\xa6\x40\xb5\x40\xb5\xba\x87\x6a\xfd\x5d\x1f\x19\xf0\xa4\x5a\x65\xf1\x51\x7f\xd6\x47\x1f\x6a\x9b\xf8\xa8\x61\x27\x7b\x72\x44\x45\x9d\x2c\xa8\x13\xb9\x9c\x05\xa4\x34\x50\x28\x44\x49\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\x81\x44\xb5\x9c\x44\x81\xf6\x80\xf6\x80\xf6\xac\x0f\xed\xf9\x6e\x84\x6c\xab\xa0\x3d\xa3\xc3\xf4\xf1\x08\x7d\x34\x52\xc6\x76\x46\xa3\xd7\x2f\x2b\xa5\xf2\xef\x1a\xaf\x76\x22\xba\xac\x94\x6c\xf2\x32\x3a\x31\x3f\x63\xba\x6f\xc1\x61\x96\xb1\x8a\x82\xc6\x2a\x0a\x1a\xab\xa5\xa0\xd9\x22\xb9\x9d\x93\x95\xb3\x64\x8e\x91\x95\x93\x64\x8a\xa4\x1a\x20\x2b\xc2\x7b\xce\x65\x35\x5f\xbc\x42\x7f\xbb\x8f\xec\x70\x69\x6b\x97\xa3\x09\xe9\x4f\x62\xf4\xee\x5e\x47\xf3\xef\xe1\x06\xb0\x6a\xac\x59\xe6\xda\xee\x7d\x1a\x61\x62\x44\xbf\x43\xe8\x98\xca\x4b\x36\x1a\x15\x7b\x03\x39\xc7\xfb\xee\x34\x39\xc9\xfa\xee\x04\x39\x46\x8e\x78\xf5\x5d\x52\x6f\xbf\xa4\xd1\x7e\xc9\xca\xb7\xaf\xa5\xd7\xde\xb0\xdd\x1d\x8a\x6d\xa1\x9b\x38\x0f\x0b\xef\x30\xc0\x51\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\x31\x60\xb1\x30\xb1\xd8\x8f\x63\xe4\x26\x17\x54\x93\x91\x95\x15\xdd\xba\x29\x69\xf4\x2b\x31\xfa\xcc\x55\x0e\x42\x13\xaf\x4e\x68\xa6\xd8\xdd\x0b\x4a\x29\xb1\xd3\x01\x66\xac\x5f\x36\x1a\x8f\x91\xc9\x49\xce\x63\x8e\x93\xa3\x8c\xc7\x1c\x24\xfb\xc9\xde\xda\x78\x8c\xf5\xd2\x81\x60\x98\xf3\xfe\x18\x66\x98\x0e\xb9\xa8\x8a\x9b\xb5\x00\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x69\x29\x7d\x79\x4b\x1f\xd9\xee\x46\x5f\xec\xd3\xe6\xe8\xd7\x62\xf4\x1b\x4e\xfc\xb2\xd3\x07\xbf\x58\xb7\x27\x76\x39\xf9\x8b\xf5\xd3\x46\x03\x30\x8b\xe4\x14\x07\x30\x27\xc8\x31\x06\x60\x0e\x91\x03\x64\x5f\x8d\x00\xc6\x7a\xeb\x40\x08\x4c\xf0\xe7\xba\x01\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x84\x8a\x60\x1e\x98\x23\x47\x5d\x10\x8c\x87\xaa\xb5\x5b\x0a\xd3\xf7\xcf\xd0\x8f\xde\xd2\x74\x0a\xd3\x6e\x07\xa9\xb1\x15\xa5\x2b\x2f\x6e\x73\x56\x93\x02\xcb\x00\xcb\x00\xcb\x00\xcb\xe8\x1a\x96\x91\x6a\x1b\x96\x11\x78\x4d\x1a\x46\x0a\x29\x20\x05\x20\x05\x20\x05\x20\x05\x20\x85\xd6\x23\x85\x14\x08\x40\x07\x12\x80\x54\xbb\x13\x80\xd4\x06\x24\x00\xdd\x26\xb5\x11\xfb\x9d\x2d\x0e\x58\x71\x03\xff\x1a\x48\xb2\x1b\x97\x18\xe2\x3f\xb6\x9a\x4c\x70\x90\x70\x96\xcc\x91\x59\xda\xbb\x58\xc8\xac\x45\xd9\xff\x4a\x3d\x89\x31\x72\xa8\xd1\xbe\x49\xdd\x17\x21\x1f\x88\xd0\x5f\x8a\x44\xdf\x17\x31\x87\xe7\xbf\xf6\xb0\xa5\xc7\x58\x88\x07\x99\xa0\x73\x5a\x77\xb7\xf8\x62\x57\x66\xfc\x9b\x46\x93\xfe\xe1\x5f\x54\xa4\xa2\xde\xb4\xba\xc5\x95\x94\x26\xf2\x52\x36\xcf\xdd\xee\x82\x2a\xad\xe6\x2d\xcf\x3d\x23\x65\xd4\xb5\xf3\xab\x79\x29\x93\x55\x15\x7d\x0a\x29\x96\x3b\xc8\x96\x03\xfd\xb3\x69\xf8\xc3\xa6\xf5\x6b\x78\x20\xd2\xd2\xaa\xca\x2c\xac\xa2\x5a\x48\x2b\x9a\x66\xac\x98\x82\xa1\x98\x94\xee\x60\x4f\x64\x96\x2b\xfb\x20\xe9\xcb\xe5\x44\x2e\x37\xc6\xbe\x5e\x19\x75\x4d\x52\x57\xf3\xba\x67\xa4\xcf\x39\xf3\x93\x6d\x14\xa7\x64\x62\x9b\x79\xd5\x44\xc4\xf8\xce\x08\x39\xc3\x27\xc3\x14\x49\xb1\xc9\x70\x84\x34\xd1\xe0\x5c\xda\x79\x84\x49\x3b\x6f\x99\xe4\x36\x47\x93\x25\xde\xa6\x97\x38\x4a\x67\xc9\x69\xf2\x92\x89\x74\x5a\x29\x36\x5f\x64\xe3\xb3\xb5\x58\x08\x7b\xb6\x26\xbe\x25\x39\x73\xef\xb8\x95\x26\xa5\xf5\x3b\xd3\xe6\x42\xee\x32\x73\x0f\xf2\x0b\xcb\x64\x91\xcc\x5b\x5a\x38\x87\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\x01\x03\xdb\x0f\x06\x2e\x93\x39\xce\x3f\xa6\xc9\x24\xe3\x1f\x47\xc9\x38\x39\xdc\x80\x66\xf2\x42\x49\x2e\xad\x6a\xbe\x6c\x21\xe1\xce\x16\xb6\xd1\xad\x7c\xfd\xb5\xbd\xfc\x90\x05\x78\xd7\x2d\x06\x7e\xe3\x1d\xb2\x48\xbf\x31\x40\xa6\x9a\x8a\x19\xe3\xbf\xdf\x45\x7f\x79\x80\xfe\xc2\x26\x07\xdf\x19\x60\x0b\x53\xb9\x7f\xef\x16\x2f\xa6\x5f\xb6\x3e\x54\xf6\xcd\xe4\x2e\xfa\xa6\xe8\x9a\xd9\x9e\x77\x2e\x70\xeb\x91\x59\xa0\x6f\x64\x96\xdc\xa2\xfe\x2f\x39\x5d\x4a\x4a\xd2\xb4\xfe\x5f\xf3\xef\x2b\x72\x36\x5f\x92\xb3\x79\x4d\x4a\xe7\x56\xb5\x92\xa2\x0e\x19\xef\x98\x36\x9c\x1c\x29\x97\xbd\xa4\x48\x71\xeb\x65\xe2\xc9\xd8\x26\x56\x92\x38\x64\x52\x25\xa2\xd2\x62\x34\x6f\x56\xe0\x36\xab\x02\x16\xfe\x59\x34\xab\xa2\x64\x58\x1d\xd8\xd3\xf5\x0e\x2c\x6a\xe6\x93\x0c\xd3\x61\x55\xd3\x2d\x02\x39\xcf\x0d\x38\xbe\x52\x24\x63\x9b\xf9\xdd\x65\x03\x75\x29\x58\x34\xea\xb7\x32\xdc\xe4\xbe\x32\x6c\xa6\xbd\xcb\x4a\xc8\xd0\x31\xfa\xad\xcd\xce\x8c\x53\x55\x29\xe6\xe4\xb4\xe2\x3f\x2e\x93\xc6\x95\xd8\x30\xe8\x8a\x0d\x83\x4f\xf6\xb4\xfb\x86\x41\xe3\xf3\xac\xb8\x1a\x36\xdc\xff\xc8\x35\xce\xad\x38\x03\xee\xbb\x6f\xc5\x55\x00\xfd\x16\xce\xac\x0b\xe4\x3c\x99\x17\x67\x56\x22\x45\x4e\x34\x60\x17\x4d\xb1\x77\x38\xc7\x90\xbf\x86\xf9\xe5\x33\xbf\x52\xcf\x45\xc8\xb3\x11\xfa\x4c\x24\xfa\xb4\xd5\x40\x0f\x44\x2e\x88\x86\x7b\x36\x2f\x69\xdc\xf8\x96\x16\x95\xa5\x02\x77\x5b\x4d\xdf\xd2\xde\x53\x31\xdc\x79\x56\xc5\x55\x85\x53\xf2\x45\xdd\x54\xce\x0f\xe5\x95\x65\x99\x35\x84\x61\xbb\xeb\x5e\x82\xb9\x95\xc0\x29\x93\xd5\x05\xc6\xf0\xcc\xae\xac\x28\x99\xac\x5c\x52\x72\x6b\x06\x9a\x17\x37\x5e\xf2\xd9\xdc\xa0\x61\xd2\x33\xd7\x4f\x5a\x56\xf5\x4f\x47\x51\x51\xb3\x85\x8c\xe5\x9a\xd8\x5f\x91\xd2\x5a\xd1\x46\x1b\xab\x9a\x5e\x49\xd1\x69\x94\xf5\x3b\xcd\x17\x32\x1e\xb2\x24\x7c\xae\xb3\xfa\x0d\xac\x9e\x2b\x8a\x9c\x77\xad\x63\x8c\xb2\x2a\xcc\xb3\x1a\xb8\xb9\x2a\x8f\x47\xc8\xa3\x11\xfa\x48\x24\xfa\xb0\xd5\xcc\x1f\x8a\x4c\x09\xc7\xf5\x16\x75\x2f\x4d\xb1\xe0\xd8\xbc\x5a\x28\xca\xcb\xac\x03\xe6\x0b\xb9\x6c\x7a\x6d\x90\xb7\x01\xc7\x41\xe6\xbb\xd8\xe7\xfd\xea\xbd\x34\x92\x3c\x98\x94\x04\x5b\x29\xa3\x14\x95\x7c\x46\x77\xf8\x2d\xce\xaa\x48\x05\xb5\x78\x51\xd6\xfd\x78\xc9\x30\xc0\x87\x97\xe4\x9c\xb9\x2f\x11\xe3\xbf\xc6\xa4\xa5\x6c\x9e\x59\xd2\xaa\xf5\x28\x39\x93\x61\xdc\x64\x98\xbb\x40\x19\xdb\xc5\xe6\x85\xc7\x35\xfb\x26\xbe\x13\x90\x94\xa6\xb3\x6c\x38\x0b\x15\x2f\xa8\x95\x6f\xc6\xb0\x18\xdf\x94\xe3\x1b\x11\x6c\xb2\x15\x4a\x17\x93\xb1\x6b\x78\x7d\xa6\xcc\x17\xd1\xca\xac\xb4\x7b\x7b\xc9\x3d\xbd\xf4\xee\xde\xe8\x8b\x16\x75\x78\xea\xaa\x57\x18\xa4\x50\x9f\x52\x17\x0b\x57\xa4\x65\x59\x5d\xd4\xbd\x73\x61\x37\xd3\x9a\x17\x8a\xba\x54\x50\x57\xf4\xb6\x70\xad\xe9\x39\xc7\xc3\xbd\x2b\xca\xc6\xb3\x39\x18\x8b\xfc\xad\xb2\xfa\x40\x49\x67\x33\x36\xf2\x67\xf4\x98\x6d\xc0\x58\xad\xab\x7b\xf0\x86\x4b\x63\xf2\xe1\xa4\xd0\x8c\x26\x59\x34\x9d\x21\xdb\x9a\x2d\x7f\x58\x52\xe2\x3b\xd5\x8c\x56\x8a\x8b\x43\x9c\xbf\x43\x5c\x1a\x32\x3a\xbe\x7c\x60\x68\xe3\x52\x3c\x25\xa7\x2f\xe9\x5f\x97\x7c\x46\xbf\x4a\xce\xe5\x0a\x57\xd8\x45\x8e\x86\xe3\x38\xdf\x18\xfa\xe5\x85\x98\x6f\xb0\x68\x95\x34\x2e\xc5\x4f\x16\x54\x45\x28\x56\x4a\xcb\x5a\x5a\xce\xe8\x6f\x6f\xb4\x0f\x5b\x6c\x79\x79\x1a\x5f\xbd\x2a\x0a\x5c\xb2\xca\x48\xc6\xb6\x16\x9d\xe3\x46\xb4\x12\x1e\xec\x09\xd8\xad\x3e\xcf\xa3\x00\xce\x90\x19\x21\x0a\x20\x64\x57\x5d\x72\x37\x14\xae\xa6\x5b\x78\x33\x85\x6b\x2b\xa4\x7e\xe4\xb4\xc9\x47\x6c\xcf\x9c\x33\x10\x7f\xe3\x7c\xb0\x58\x7e\x76\x78\x8b\x0c\x88\x1b\x9c\x05\x0d\xb1\x7a\xec\x66\x87\x5b\xdd\x28\xfe\xb8\xa2\xa8\xcb\x8a\xf8\xeb\x0e\xf1\x57\xad\xa4\xca\x25\x65\x39\x9b\x1e\x72\x5e\x57\xaf\xe1\x5f\x65\x34\xcc\xeb\x85\xc2\x30\xf1\x33\xfc\x5b\xec\x0d\xdf\xec\x3e\xf9\x5e\x42\x37\xb3\x41\x10\x32\x1c\x3b\x4e\x8e\xd2\xf1\xd8\x61\x8b\x51\x6d\x67\x70\xca\x68\xe3\xca\x12\x62\xbd\xfa\xef\x22\x82\xda\x80\x90\xeb\xa3\x67\xc8\xbe\xda\x21\x97\x20\x18\xfe\x83\x59\xfa\xb3\xce\x7c\xc8\x9a\x05\xc3\x63\x9e\x69\x90\xd6\x35\xc8\x7e\x44\xc0\x13\x02\x9e\x10\xf0\x84\x80\x27\x04\x3c\x21\xe0\x09\x01\x4f\x08\x78\x42\xc0\x13\x02\x9e\x10\xf0\x84\x80\x27\x04\x3c\x21\xe0\xa9\xde\x80\xa7\x8e\x3e\xd8\x2a\xf6\x3d\x27\x34\xa5\x56\xae\xa3\xcd\x1c\xfa\xab\xa4\x38\x06\x4f\x1d\x38\x24\x98\x26\x93\x64\xc2\xc1\x2b\x47\xc8\x70\x9d\xed\x0e\x4c\xe9\x87\x29\xff\xb1\x87\xa4\xf8\xf8\x1e\x27\x87\xd9\xf8\xde\x4b\xea\x6f\x67\xae\x3d\x3e\xc2\x32\x83\xad\xb0\x84\x86\x0a\x3a\xcd\x37\x2e\x26\xc8\x71\x61\xe3\xa2\xa1\x92\x9a\xcd\x5a\x0c\x61\xba\x25\xbe\xe8\x4c\x56\xdc\xee\x9a\xac\x68\x4f\xbd\x64\x4d\x39\x8a\x61\x4d\x42\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\x3a\x90\xba\xf6\x23\x75\xed\x9c\x9a\x18\xc6\xa1\xf4\xc8\x48\xac\x3d\x58\xeb\x8f\xfa\xc9\x78\x23\xc1\x5a\x66\x22\xe2\xff\xe9\xa3\xff\xd0\xeb\x60\x37\x37\xba\x24\x22\x0a\x81\x5a\x9e\xf9\x87\x61\xd1\x9a\x2e\x4d\x3b\xbc\x33\x10\x80\xd9\x64\xb6\x61\x08\xf3\x3b\xfa\x31\x27\x9b\xbf\xd9\x3d\xc9\xd0\x1e\x73\x03\xd5\x72\x0b\x41\xea\x37\x36\xa9\xff\xad\x36\x23\xf5\x4d\xe6\x0d\x86\x81\xd7\xdf\xed\x4c\x17\xa4\x56\xba\xa0\xb0\x9b\x55\x25\x4b\x30\xac\x39\x82\xe4\x40\x24\x07\x22\x39\x10\xc9\x81\x48\x0e\x44\x72\x20\x92\x03\xdd\x93\x03\x43\x30\x08\x52\x4f\x56\xe8\x74\xf8\xe4\x04\xda\x66\x42\x9f\x77\x2a\x60\x08\x56\x02\x32\x00\x3b\xce\xfa\x68\x91\x63\xea\x9b\xf8\x17\x06\x7a\x3a\x40\xf6\xd1\xd1\xd8\x1e\x8b\x00\xbd\x4c\xcc\xf7\xb3\x6e\xec\x88\x34\xbf\x6f\x53\x92\x6a\x82\x1c\x0d\x6b\x6c\x7d\xa4\xbf\x46\xe9\xdb\xaf\x72\x2c\x46\x3b\x18\x40\xe2\x17\x98\x8d\xe7\xb6\x14\xed\xf4\x47\x49\x7c\x15\x0e\xd6\x6b\xe9\x5c\xb2\xf2\x27\xce\xcf\xc2\x2e\x93\xac\xf8\x77\xc6\xee\x9a\x18\x4b\x18\xfd\x01\xd2\x02\xd2\xd2\x26\xa4\x25\x55\x21\x80\x36\x5a\x61\x58\xf9\x4f\xa5\x5d\x35\x98\x58\x41\x4f\x24\x18\x5a\x9d\x37\x5f\x61\x68\x75\x82\xa1\xf5\xa9\x33\x64\x7f\x1d\x86\x96\x52\xcc\x15\xd6\x56\x74\x8f\x9a\xbe\x38\x4b\x7f\xce\x29\xa8\xb0\xd3\x47\x50\xc1\xba\x3d\xd1\xe7\xad\xa8\x60\x5d\x04\x49\x05\x04\x6a\x23\x50\x1b\x81\xda\x08\xd4\x46\xa0\x36\x02\xb5\x11\xa8\x8d\x40\x6d\x04\x6a\x23\x50\x1b\x81\xda\x08\xd4\x46\xa0\x36\x02\xb5\xeb\x0d\xd4\x5e\xe4\x68\x74\x0f\x43\xa3\x91\x73\x67\xe8\x21\x72\x80\xec\xab\x91\xd7\x58\x3e\x79\x20\x9a\x0a\x0b\xfe\xcc\x66\x0f\x4d\xba\x30\x1b\xab\x1a\x2e\xa2\x0a\x3f\x74\xc2\xd1\x6d\xb6\xa8\x82\xcd\x1d\x06\xaa\xa9\x2a\x04\x4f\x1e\x38\x28\x38\x49\xa6\x48\xca\xc1\x26\x47\xc9\x9e\x7a\xdb\x1e\x4c\xd2\x8f\x49\xfe\xb0\x87\x4c\xf2\x41\x7e\x84\x8c\xb1\x41\xbe\x8f\x34\xd0\xd0\x5c\x0f\x61\x84\xe9\x21\x58\x9b\x08\x8d\x95\x34\xc3\xa3\x3e\x52\xe4\x84\x10\xf5\xd1\x58\x51\xcd\x4a\x2b\x84\x31\xeb\x12\x5f\x72\x6a\x2b\xdc\xec\xae\xad\x60\xcf\xc0\xe1\xda\xc4\x15\xc2\x9a\x8b\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\xed\x07\xed\xda\x59\x5d\x21\x0c\x9e\x00\x79\x85\x3a\x62\xb7\xbe\xd8\x4f\x8e\x34\x14\xbb\x65\xea\x2b\xbc\xa3\x9f\xfe\x93\x53\x5f\xe1\x26\x37\x7d\x05\x21\x6e\xcb\x3b\x2a\x3e\x2c\x62\xd3\xa5\x0a\x0b\xaf\x0d\x06\x65\x36\x99\x08\x10\xc6\x24\x8f\xfe\x81\x13\xd5\x4b\x1e\x1a\x0b\xf6\xb8\xdb\x51\x35\x01\x00\xe0\x7e\x83\x83\xfb\xdf\x6e\x3b\x70\xdf\x64\xf8\x7f\x28\xb0\xfd\x3d\x4e\xa5\x85\x6d\xb6\xd2\x82\xb0\xc5\x55\x4d\x6a\x21\xac\x99\x02\xad\x05\x68\x2d\x40\x6b\x01\x5a\x0b\xd0\x5a\x80\xd6\x02\xb4\x16\xdc\xb5\x16\xc2\xb0\x09\x52\x5f\xa9\xc8\xaa\xf5\x13\x5b\xb0\x2d\x85\xfe\x2a\xa9\x80\x21\x18\x0a\xc8\x02\xec\x38\x03\xa4\x55\x5e\xaa\x6f\x1a\x60\x28\x30\xea\x20\xd9\x4f\xf7\xc6\x46\x2c\x26\x74\x5d\x59\x1e\xa0\x75\x67\x47\x24\x02\x7e\xb6\x3e\xc5\x85\x0a\x98\x34\xac\xa5\xe5\x9c\x42\x7f\xbc\x95\xbe\x18\x71\x57\x5c\xd0\x7f\x77\x49\x4c\xb6\x97\xa3\x2a\x8a\x0b\xd6\x45\x0b\x7a\x29\x01\x2b\x2e\xbc\x8a\x1c\xe3\x63\xf8\x20\xd9\xcf\xc6\xf0\x30\x19\x22\xbb\x6b\x1b\xc3\xac\x3e\xcd\x42\x96\xb3\xfe\x83\x77\x37\xdd\x55\x39\x78\xf9\xc3\x6b\xd0\xb0\xb4\x95\x16\x7c\x3b\xa1\xba\xd2\x42\x98\xfd\x90\xd2\xbd\xf6\xa3\x8e\xc5\xbb\xbe\x8e\xc0\x7a\xed\xb7\x5e\xdf\xd7\xd3\xf4\x60\x9f\xe4\x8c\x45\x5f\xf0\x2d\xc6\xd2\xc2\x19\xc3\xf0\x4a\xc0\x33\x26\xf5\xb5\x1a\x94\x15\x7c\xa7\x4e\x35\x65\x85\xb0\x26\x0e\x6c\xaa\xce\x9b\xa3\xe1\x7f\x8f\x7c\xcd\xa9\x80\xe7\xd7\xec\x28\xd9\x43\x93\xb1\x41\xcb\x20\xda\x2a\x5a\x52\xec\xa6\x8e\x30\xa2\x9e\xa7\x64\xb2\x39\x23\x8a\xeb\x56\xdd\x4f\xe9\x3b\x9d\xba\x55\xf1\xea\xba\x55\xc2\x32\x54\x8b\x19\x15\x86\x72\x55\x07\xef\x58\xfd\xb9\xf3\xfb\x90\xf0\xd5\xae\xb2\x3b\x64\xb0\x46\x93\x2a\x0c\xf5\x2a\xec\x60\x61\x07\xab\x7d\x76\xb0\x52\xdf\x75\xce\xa3\xbd\xb5\x2b\x58\xd9\x13\x2a\x51\x93\xa1\x05\x0d\x2b\x4c\x5a\xd0\xab\xee\xa0\x57\xf5\xc9\x58\xe9\xdf\xe3\x6c\x5a\xd6\x94\xc6\x64\xac\xce\xf3\xdb\x99\x5e\xb1\xa7\x8c\x95\x7d\x11\x64\xac\x90\x11\x87\x8c\x38\x64\xc4\x21\x23\x0e\x19\x71\xc8\x88\x43\x46\x1c\x32\xe2\x90\x11\x87\x8c\x38\x64\xc4\x21\x23\x0e\x19\x71\xc8\x88\x6b\xa5\x8c\x95\xed\x93\xaf\xab\x8c\x95\x5d\x8d\xfa\x64\xac\x04\xee\x50\x4d\xc6\x2a\x04\xf2\x10\xc0\x5e\x82\x5d\x2b\x60\xc9\x50\x65\xac\x84\xd1\xd5\xe4\x5e\x82\x50\x52\xb3\x32\x56\x42\x51\xeb\x25\x63\x55\x6d\xd6\xd5\x2a\x63\x25\xcc\xc0\xda\x64\xac\x42\x9b\x8b\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\x80\x76\xed\x07\xed\x3a\x51\xc6\xaa\x1a\x4f\x80\x8c\x55\x68\x32\x56\x42\xec\x56\xbd\x32\x56\x62\xdc\x96\x67\x8c\x7c\x68\xc4\x06\x32\x56\xcd\xa0\xcc\x75\x4a\x0a\xa8\x36\xc9\x6b\x96\xb1\x12\xc6\x5d\x55\x19\x2b\x80\xfb\x8d\x0e\xee\x9b\x4a\x02\x08\x05\xdc\xaf\x53\x12\x40\x55\xd8\x5e\x45\xc6\x4a\xdc\xe2\xaa\x22\x63\x15\xda\x4c\x81\x8c\x15\x64\xac\x20\x63\x05\x19\x2b\xc8\x58\x41\xc6\x0a\x32\x56\xc1\xca\x58\x55\xb3\x09\xea\x97\xb1\x12\x2c\x85\x2a\x32\x56\x61\x18\x0a\x48\x04\xec\x38\x03\xa4\x55\x5e\x6a\x68\x89\x80\x55\x61\x54\xd5\x44\x40\xfb\xce\x8e\x48\x04\xac\x4f\xc6\xaa\x12\x26\x35\x2a\x63\x25\x2c\x47\xde\x32\x56\xf6\x45\x90\xb1\x0a\x43\xc6\x4a\xe8\x84\xaa\x32\x56\xa1\xf6\x03\x64\xac\x20\x63\xb5\xf1\x64\xac\x84\xa9\x53\x45\xc6\x2a\xb4\x89\x03\x9b\xaa\xf3\xe6\x28\x64\xac\x36\xaa\x11\x55\x9f\x8c\x95\x9b\x11\xd5\xa8\x8c\x95\xb8\x0c\xd5\x62\x46\xb5\x9b\x8c\x55\x9b\xef\x58\xd5\x2f\x63\x25\x74\x48\x55\x19\xab\x70\xfb\x04\x3b\x58\xd8\xc1\x6a\xa3\x1d\xac\x66\x64\xac\x84\x09\x55\x45\xc6\x2a\xbc\xe9\x04\x4b\xab\xf3\x26\x2d\xe8\x55\x87\xd0\xab\x87\xcf\x90\x03\xb5\x1b\x5e\xfa\x12\xa3\x2c\xad\xe6\x98\x8e\xd5\xbb\xce\xd0\x77\x3b\x75\xac\x76\x55\xd7\xb1\x5a\x30\xee\x67\x0c\xdd\x53\xc8\x4a\xb8\x0a\x4a\x56\x48\x8a\x43\x52\x1c\x92\xe2\x90\x14\x87\xa4\x38\x24\xc5\x21\x29\x0e\x49\x71\x48\x8a\x43\x52\x1c\x92\xe2\x90\x14\x87\xa4\x38\x24\xc5\xd5\x9b\x14\x97\xe6\x90\x74\x0f\x83\xa4\x91\x73\x67\xe8\x61\x72\x90\xec\xaf\x71\x7f\xcc\x76\xca\x03\x91\xb2\xba\xe0\x4f\x6e\x46\xe8\xb0\xcb\x46\x99\x5d\x0f\x17\x2d\xab\x17\x9c\x98\xf4\x5a\x4b\xcb\x4a\x64\x0f\x3b\xaa\x88\x59\x85\x41\x1f\x38\x2c\x38\x45\xa6\xc9\xa4\x83\x52\xee\x25\x23\x75\xb7\x3f\xf0\xa4\x1f\x9e\x7c\xbe\x87\x4c\xf1\x91\x7e\x94\x8c\xb3\x91\xbe\x9f\x34\xd2\xd2\x5c\x85\x6a\x84\xa9\x50\x59\x9b\x0a\x0d\x16\x35\xcb\x43\x6b\x27\xc9\x84\x10\x5a\xdb\x60\x59\xcd\x2a\x5a\x85\x32\xf9\x12\x8f\x39\x25\xad\x24\x57\x49\x2b\x71\x22\xee\xa9\x49\xd3\x2a\xbc\x29\x09\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\x07\x7e\xd7\x7e\xfc\xae\x9d\x45\xad\x42\x41\x0a\x50\xb5\xaa\x23\x94\xeb\x6b\xfd\xe4\x68\x63\xa1\x5c\xa6\xac\xd5\x07\xfa\xe9\xf3\x4e\x59\xab\xed\x2e\xb2\x56\x65\x61\x5c\x9e\x41\xf3\xe1\x51\x9b\x2e\x15\xb6\x7a\x5d\x40\x50\xb3\xc9\x3c\x81\x50\x66\x7a\xf4\x41\x27\xb9\xbf\xc5\x5d\xda\x4a\x1c\x7b\xf1\x6a\xf9\x01\xe0\xf8\x1b\x9f\xe3\x7f\xb4\x0d\x39\x7e\x93\xd9\x01\xe1\xa0\xf7\xf7\x3a\x05\xae\xae\xb5\x04\xae\xca\xf6\xbd\xaa\x28\x5c\x85\x37\x5f\x20\x71\x05\x89\x2b\x48\x5c\x41\xe2\x0a\x12\x57\x90\xb8\x82\xc4\x95\xbb\xc4\x55\x28\x66\x41\xa5\x3a\x43\xc2\x47\xe3\x4a\x34\x16\x06\xbc\x93\x05\x43\xb1\x15\x90\x27\xd8\x71\x36\x48\xcb\x5c\x56\xdf\x44\xc1\x70\xf0\xd4\x21\x72\x80\xee\x8b\x8d\x5a\x94\xe8\xfa\x32\x75\x06\xfb\xd6\x8e\x48\x15\xfc\x42\x5d\x1a\x0d\x2e\x7c\xc9\x50\xba\x7a\x2b\xa5\x6f\xf5\xd0\x68\x70\x57\x8a\x11\x17\x25\x6f\x8d\x06\xe1\x2a\x68\x5d\xd5\xa0\x75\xf5\x80\xb7\x32\x83\x7f\x37\x54\x55\x66\x08\xb7\x27\xa0\x76\x05\xb5\xab\xf5\x52\xbb\xfa\x7a\x0d\x2a\x0c\xfe\x93\xa7\x8a\x0a\x43\x78\x53\x07\xd6\x55\xe7\xcd\x52\xe8\x5d\x6d\x54\x5b\xea\x67\xb7\x91\xa9\x26\x6d\x29\x2e\x78\xf5\x69\x4a\x7f\xde\x69\x4c\xed\xac\x2a\x78\x55\xb6\x12\xd5\x64\x4d\x85\x21\x79\xd5\xd1\x7b\x59\x8f\x38\x3f\x13\xbb\xfd\x44\xaf\xc4\x4e\x19\xaa\xd5\xb6\x0a\x43\xf6\x0a\x7b\x5b\xd8\xdb\x6a\xaf\xbd\xad\xd4\xdf\x3b\x67\xd3\xbe\x9a\xa5\xaf\xc4\x69\xb5\xbb\x36\xab\x0b\xe2\x57\x98\xb9\x80\x5a\x5d\x03\xb5\xde\xd2\x47\xb6\xbb\x18\x62\x82\xc2\x28\xfd\x5a\x8c\x7e\xa3\xc2\xc4\xaa\xae\x73\x25\x8a\x8a\x3a\x64\xae\xec\x9f\x4e\x16\xd4\x89\x5c\xce\x5a\x85\x82\x5b\x74\xc2\xd1\xba\x9a\x5d\x24\xa7\xf8\xb0\x3f\x41\x8e\xb1\x61\x7f\x88\x1c\x20\xfb\xea\xd5\x7c\x0b\x24\x79\x38\x14\xd9\x37\xe4\x02\x22\x17\x10\xb9\x80\xc8\x05\xec\x9a\x5c\xc0\xd9\xb6\xc9\x05\x5c\xbf\x38\xef\xb6\x49\x42\x9c\x45\x12\x22\x92\x10\x91\x84\x88\x24\x44\x24\x21\xb6\x3e\x09\x31\x70\xbf\x72\x16\x59\x8d\x1d\x98\xd5\x38\xdb\xee\x59\x8d\xb3\x1b\x30\xab\x91\xde\xd3\x47\x6e\x76\x41\x30\x65\x5a\xe3\xcf\xc6\xe8\xb7\x9d\x0c\xa6\x0e\xad\xf1\x84\x03\xc2\x08\xbf\x6d\x34\x0a\xd3\xf1\x1a\x6e\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\xe0\x30\x21\x72\x98\xb7\xf7\x93\x41\x17\x0e\xc3\x2e\x1c\xd6\x97\x45\xb5\xa0\x2f\x4a\xba\x73\xa0\x97\xa1\xd1\x2f\xf7\xd1\xa7\x9d\x72\x41\xff\xd9\xf8\x98\xe4\x33\xd9\xcb\xd9\xcc\xaa\x9c\x13\xdf\x55\xb6\x0c\xb7\x49\xab\xb8\xf3\x46\x71\x49\x21\xe5\x7d\xcc\xfa\xb4\xc7\x59\x71\x71\xdb\x61\x2e\xf3\x80\x0a\x45\xc5\x52\x32\xd0\x4a\x8a\x9c\x49\x26\x0e\x5c\x71\x44\xf9\x55\x3e\x69\x2e\xab\x6d\x38\xea\x73\x89\xcc\x73\xea\x33\x43\x4e\x31\xea\xc3\x92\xa0\x1a\x08\xf1\x63\x63\x70\x5a\xb7\xbe\x7c\xe9\x4f\x9f\x3b\xfd\x79\x29\x25\xac\x62\x1c\x01\xfd\x8c\x3f\x02\x3a\x44\x0f\x54\x22\xa0\xca\x6e\x01\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x02\x09\x6a\x29\x09\xfa\x66\x1f\xe9\xf3\x24\x41\x19\x59\x59\xd1\x6d\x9c\x92\x46\x1f\xec\xa3\x7f\xea\x04\x40\xab\xb5\x01\xa0\x29\x56\xca\x82\x52\x0a\x88\xfb\x0c\x39\xb9\x8f\xf5\x00\xe0\x9e\x00\x71\xcf\x79\x7f\xdc\x33\x4c\x87\x2a\x71\x8f\xd5\x1b\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\xa0\x3c\x2d\xa5\x3c\xdf\xe9\x23\xfd\xde\x94\x47\x29\xe6\x0a\x6b\xfa\x97\x4e\xa3\x9f\xe9\xa3\x9f\x73\x62\x9e\xcb\x35\x62\x1e\xab\x98\x80\x38\x4f\xb2\x82\xf3\x58\x4f\x00\xe8\x09\x10\xf4\x34\xaa\xb0\x63\x77\x07\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x0f\x48\x4f\x4b\x49\xcf\x0b\xfd\xae\x27\x77\x71\xd2\xe3\x71\xe6\x84\x5b\xc2\xd7\xc7\xfb\xe9\x93\xed\x96\xf0\xb5\xc7\x09\x84\x6c\x59\x77\xf7\xd4\x2f\x20\x21\xa4\x7a\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\xad\x17\x1a\xda\x78\xc7\x06\x01\x3e\x01\x3e\x01\x3e\xd5\x06\x9f\x9e\x1f\x20\xb3\x01\xc0\x27\xe3\xdc\x53\xfa\x3f\x06\xe8\x3b\x36\x39\x18\xd4\xa7\x7a\x8c\x0e\x11\xc8\x53\xde\x5c\xbf\x4c\x3d\xe8\x90\x08\xd4\xa0\x6d\xb6\x30\xd3\xcc\xf8\xc8\xe9\x96\x8f\x6d\x8f\xc5\xcb\x6c\x6f\xa1\xec\x64\x62\xb0\x1e\x7e\x05\x76\x55\xcf\x29\x79\x57\xf8\x29\x79\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\xe0\x56\x4d\x73\xab\xe3\xe4\x28\x1d\x8f\x1d\xb6\xb8\xd5\x76\xf1\xa0\xec\x4a\xef\xa1\x13\xce\xcb\x06\xf8\x02\xf8\x02\xf8\xaa\x0d\x7c\x7d\xb9\x9f\x8c\xd5\x0b\xbe\x04\x71\xa5\xf7\xf7\xd3\x3f\x6e\x13\x71\xa5\xb8\x37\xa3\x2a\x93\x59\x02\x9e\x82\xac\x12\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\x22\xaa\x00\x96\x00\x96\x00\x96\x02\x01\x4b\x5f\x18\x20\x13\x8d\x83\x25\x33\x90\xea\x6d\x03\xf4\x1f\x9c\x7c\xe9\xf7\x6b\x09\xa4\x0a\x96\x2e\x35\x1b\x3f\xd5\x57\x03\x9b\x02\x97\x6a\x20\x6c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\x0a\x4c\xaa\x51\x26\x75\x80\xec\xa3\xa3\xb1\x3d\x16\x93\x7a\x99\x18\x2d\x65\x39\x0d\x08\x92\x02\xcb\x02\xcb\xea\x1e\x96\xf5\xd5\x7e\x32\x5e\x37\xcb\x12\xb4\xc9\x7f\xa5\x9f\x7e\xba\x5d\xb4\xc9\x77\x56\x41\x51\x65\x2a\xe5\xe0\x51\x50\x25\x07\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x42\xa0\x14\xe0\x12\xe0\x12\xe0\x52\x30\x70\xe9\xd1\x01\x92\x6a\x02\x2e\x99\x91\x52\x6f\x1f\xa0\x3f\x70\x32\xa6\x07\x6a\x8a\x94\x0a\x96\x30\x35\x1b\x2a\xd5\x5f\x0b\x9f\x02\x9b\x6a\x20\x56\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\x0a\x5c\xaa\x61\x2e\x75\x90\xec\xa7\x7b\x63\x23\x16\x97\xba\xae\x2c\x58\xca\xf2\x1a\x10\x2d\x05\xa0\x05\xa0\xd5\x3d\x40\xab\x91\x68\x29\x55\x61\x98\x85\x69\x4a\x35\x11\x2d\x75\x9e\x17\x13\x9c\xa8\x54\x95\x68\x29\xfb\x59\x88\x96\x5a\x87\x68\x29\xbb\xf9\x41\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\x40\xa5\xba\x96\x4a\x01\x2e\x01\x2e\x01\x2e\x75\x2a\x5c\x6a\x24\x5a\x4a\x80\x4b\x4d\x47\x4b\x05\x4c\x98\x42\x8c\x96\xb2\x6b\x0a\x36\xd5\xc2\x68\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\x29\x70\xa9\xea\xd1\x52\xb6\xd7\x80\x68\x29\x00\x2d\x00\xad\xee\x01\x5a\xcf\xf4\x93\x23\xf5\x02\x2d\xad\x24\x97\x94\xa5\xd5\x1c\x0b\x97\xfa\x60\x3f\xfd\x53\x27\xca\xba\x52\x5b\xb8\xd4\x82\x51\x4e\x70\xf1\x52\xbb\xbc\x79\x94\xf0\x30\x04\x4c\x35\x11\x30\x75\xc1\x1f\x4c\x8d\xd0\xe1\x4a\x30\x25\xb4\x3f\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x14\xc8\x54\xd7\x92\x29\x00\x26\x00\x26\x00\xa6\x4e\x05\x4c\x4f\x0c\x90\xc9\x66\x00\x93\x19\x32\xf5\xce\x01\xfa\xcf\x4e\xce\xf4\xf1\x5a\x42\xa6\x82\xa6\x4c\xcd\xc6\x4c\x0d\xd4\xc4\xa8\xc0\xa7\x1a\x08\x9a\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x6a\x9c\x4d\x1d\x22\x07\xe8\xbe\xd8\xa8\xc5\xa6\xae\x17\xa3\xa6\x04\xb7\x01\x61\x53\xa0\x5a\xa0\x5a\xdd\x43\xb5\xbe\xd3\x47\xfa\x3d\xa9\x96\xa8\x26\xf5\x99\x3e\xfa\xb9\x76\x51\x93\x4a\x3a\xc9\x53\xb9\x86\xd4\xc9\x82\x3a\x91\xcb\x59\x34\x4a\x03\x82\x82\xa6\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x14\x28\x54\xab\x29\x14\x48\x0f\x48\x0f\x48\xcf\xfa\x90\x9e\xbf\xeb\x23\x03\x9e\xa4\xa7\x2c\x13\xee\xcf\xfa\xe8\x43\x6d\x93\x09\x37\xec\x64\x3d\x8e\xfc\x37\xc0\x1e\xe4\xc3\x81\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x80\xf6\x74\x29\xed\xf9\x7e\x84\xdc\x68\xd0\x9e\x55\xbd\xbb\x4a\x46\x31\x0c\x2c\x64\x0b\xc3\xf4\xd1\x08\x7d\x24\x42\xfe\xaf\xf2\x5f\xa3\xd1\x65\xa5\x24\x65\xf3\x4b\x05\x75\xc5\x6a\x4e\x59\x62\x4e\x7f\xe2\xe5\xcb\x4a\x69\xa2\xec\xf2\x89\xf9\x99\x53\xfa\x4f\x81\x31\x97\xb1\x8a\x82\xc6\x2a\x0a\x1a\xab\xa5\xa0\xd9\x2c\x39\xcb\x31\xcb\x29\x32\xcd\x30\xcb\x71\x72\x94\x8c\x37\x80\x59\xcc\x77\xf4\x83\x2c\xf4\xc5\x08\xb9\xb9\x5a\x8b\x5f\x1e\x19\xa6\x4f\x47\xe8\x5f\x47\xc8\xd6\xf2\x0b\x5e\x77\x79\x24\x7a\xbd\xde\xee\x65\xa6\x05\x1f\x39\x89\x9b\x2b\x1a\xfd\x8e\x91\x89\xf9\x19\xd3\x8d\x0e\x0e\x77\x05\xd7\xf4\x45\x72\x3b\x6f\xfa\xb3\x64\x8e\x35\xfd\x49\x32\x45\x52\x8d\x35\xbd\xf9\x9e\x73\x59\xcd\x17\x73\xd1\x4f\x5e\x4d\x76\xfb\xf4\x00\xf3\xd6\x75\x8f\x58\xb9\xa2\xd1\x7b\xaf\x8e\xfd\xa8\xd7\xad\x37\xae\xe5\xa6\x89\x24\x4b\x17\xf4\xeb\xcf\xb3\xeb\x13\xb7\xf0\xbf\x3a\x7b\x43\xb8\x24\xb8\xce\xb8\x2a\x31\x9c\x48\xcd\x91\x59\x72\x9a\xf6\x2e\x16\x32\x6b\x51\xf6\xbf\x52\x4f\xe2\x10\x39\xe0\xd5\x92\x49\xc7\x5b\x5f\x1e\x49\x0a\x75\x9b\xbd\x27\x42\x66\x78\xbf\xa4\xc8\x09\xd6\x2f\x63\xa4\xe1\xd2\xf8\xec\x1a\x61\xb3\x6b\xcb\x24\x37\xe4\x9a\x2a\xef\x9c\x5e\xde\x28\x3d\x4d\x4e\x92\x97\x4c\xa4\xd3\x4a\xb1\xd9\x02\xfd\x98\xe8\x76\x77\x26\xba\x85\x6e\x2a\x16\xb4\x12\x79\xc3\xeb\xfd\x71\xe8\x51\x3a\x6e\xe2\x50\xb7\xf1\x66\xf0\x51\xb1\x52\x02\x1f\x25\xb3\xf7\x45\xc8\x07\x22\xf4\x97\x22\xd1\xf7\x45\xcc\xcf\xca\xbf\xf6\x30\x93\xc1\xb0\xc8\x06\x19\x6e\x4f\xcb\x25\xd3\x6a\x29\xc3\x0f\xa6\xf7\xa4\x7b\x00\x8b\x8a\x54\xd4\x8b\xd6\x5d\xaf\xa4\x34\x91\x97\xb2\x79\x0e\xfe\x0a\xaa\xb4\x9a\xb7\xd8\x61\x46\xca\xa8\x6b\xe7\x57\xf3\x52\x26\xab\x2a\xfa\xa7\x4f\xb1\x80\x14\xfb\x8c\xeb\xf6\xb3\x41\xe4\x4c\x37\xd8\x60\x20\xd2\xd2\xaa\xca\x5c\xad\xa2\x5a\x48\x2b\x9a\x66\x58\x3a\x82\xc7\x98\x94\xee\x60\x4f\x64\x2e\x2c\xb3\x4c\x75\x33\x67\x22\x97\x1b\x63\x66\x6c\x46\x5d\x93\xd4\xd5\xbc\xa4\x95\x64\xfd\x5b\x69\xda\xee\x46\x71\x4a\x26\xb6\x99\x57\x4d\x34\x0c\xde\xdf\x43\xde\xdb\x43\xdf\xd3\x13\x7d\xb7\xf5\xdd\x4d\xcf\x2c\x49\x33\x2e\xf8\xa1\xcc\xf5\x1a\x14\xcd\x5c\xdd\xbb\x5a\x14\x08\x8f\xe9\x9b\xa4\x0b\x2b\xc5\x9c\xc2\xbc\x62\xab\x1c\xde\x7b\x35\x00\x8e\xa0\x2d\x5b\xfa\xbd\x08\xb9\xc1\x5e\xba\xf4\x91\x5a\xfe\xb5\xfe\x8b\x08\xfd\x42\x84\xfc\x87\xb2\x1f\xab\x7e\xac\x7f\xda\xf8\x6e\x58\x57\xe3\x5b\x2d\x7c\x29\xfe\x2d\x42\xb6\x57\x69\x6e\xfd\x53\xfd\x95\x08\xfd\x72\x84\x5c\x53\xf6\x7b\xd5\x2f\xf5\x76\x67\x8b\xe3\x43\xed\xd5\xfc\x1f\xf8\x29\x72\xb6\x7a\xf3\x7b\xe8\x29\xe4\x0a\x69\x39\xa7\xad\xb2\x99\x2d\xa7\xf5\x95\xc3\xfc\x96\x3f\x4c\x62\x4f\x6d\x72\xe9\xae\x5b\xac\x4f\xf9\x9c\x7e\xef\x02\xbf\x77\x82\xdd\x6b\x7c\xd7\x0f\xda\xdf\x75\xa1\xef\x6c\x31\x03\xaf\x1b\x03\xfe\xda\xbf\x92\xdc\x41\x2e\x38\xbe\xf6\x55\xba\x23\x59\xde\x74\x97\x47\x92\x5e\xf5\x9c\xfd\x48\xa4\xae\x8e\xae\xbd\x64\xf2\x6a\x6e\x05\x2c\x90\xdb\x6c\x2b\x20\xa8\xb2\x7f\x86\x5b\x04\x17\xc8\x79\xc1\x22\x08\xaa\xf0\x66\xad\x83\x9c\xbf\x75\x30\x43\x4f\x09\xd6\x81\x73\x90\x1b\xc6\x81\x67\x05\x61\x29\x74\x86\xa5\xb0\xf1\xb2\xe7\xe8\x7f\x25\xe4\x40\xf5\xd5\x59\x53\x72\x4b\xae\xab\xf0\x93\x57\xc7\x1e\x72\x5b\x85\x25\x6b\x15\x5e\x50\x72\x4b\x6e\x8b\xf0\xa0\xeb\x22\xec\x71\x75\xc0\x2b\xef\x2b\xc8\xed\x64\xc1\xb1\xf2\x4e\x92\x89\xda\x97\x19\x8f\x6a\xce\xfe\x56\x84\x5c\xe0\x0b\xef\xad\xe4\x0c\x5b\x78\xa7\x49\x10\x05\x93\x57\xf1\x75\xf7\x3c\x99\xb7\xd7\xdd\x80\x8a\x7e\x35\x5f\x76\xf5\x25\xdd\x5e\x76\x03\x2a\xbb\xd9\x55\xf7\x92\xff\xaa\x7b\x9a\x9e\xf4\x5f\x75\xbd\xea\x87\x45\xb7\x33\x16\xdd\xc0\x97\xc4\x7b\x09\xd9\x5f\xf3\x92\xa8\xae\xe6\x14\x6b\x45\x7c\xf4\xea\xd8\x9f\xb8\xad\x88\x37\xbb\xad\x88\xe7\xf5\x3b\x8d\x05\x71\xb7\xdf\x82\x28\x5c\x1c\xf0\x7a\x78\x07\xb9\x40\xce\x3b\xd6\xc3\x14\x39\xd1\xd0\xfc\x17\x6a\x39\xfb\xe1\x08\x59\xe0\xcb\xe1\x1c\x99\x65\xcb\xe1\x14\x09\xa0\x5c\xf2\x4a\xbe\x1a\xde\x46\xce\xd9\xab\x61\x30\x25\xbf\x8a\x2f\x86\xfa\x3a\x6b\x2f\x86\xc1\x14\xdd\xec\x5a\xf8\x06\xff\xb5\xf0\x14\x9d\xae\x6b\x2d\x14\xab\x87\xa5\x10\x4b\xa1\xeb\x52\xf8\x8f\x57\x93\x51\x9f\xa5\xd0\xcd\x32\xfc\xd4\xd5\xb1\x8f\xba\xad\x83\x37\xda\xeb\xa0\x8b\x55\xb8\xd3\x7d\x11\x0c\xdd\x22\xd4\xad\x9f\x73\x8e\x15\xb0\x4a\x94\xae\xcb\xa4\x77\xb1\x06\x7f\x25\x52\x57\xe8\x6f\x4d\x85\x72\xc7\x7e\x84\x39\xf6\xd6\xda\x17\x40\xb1\x77\xf0\x85\xef\x1c\xb9\x55\x58\xf8\x02\x28\xb7\xd9\x55\x6f\xd9\x7f\xd5\x9b\xa2\xa9\x1a\x56\x3d\x58\x7f\x58\xf2\x6a\x5d\xf2\xbe\x1e\x21\xd4\x5a\xf2\x0a\x5a\x5a\xce\x65\xf3\xcb\xc3\xf4\xe1\x08\xfd\xf3\x08\xf9\x29\xe1\x6f\x55\x89\xfc\x75\x9c\x0f\x9b\xd7\x82\xc7\x0b\x40\xf8\xfb\x11\xf2\xb2\xca\x16\xbe\x3c\x32\x4c\x9f\x8c\xd0\xbf\xe2\x61\x0a\xe6\x9f\xab\x42\xf8\x1b\xcb\x1b\x19\x08\xde\xab\xc5\x1f\xe9\x23\x43\xae\x2d\xce\xae\x2b\xe4\x4b\x72\xae\x58\xc8\x98\xbf\x29\xaa\x46\x7f\xb9\x8f\xde\xd7\x5b\xd1\x13\xfb\x79\xf4\xae\x6a\x04\x5c\x99\x81\x69\xa6\x66\xf1\x69\xab\xb4\xf9\x42\x66\xc2\x2a\x2d\x71\x48\xbf\xad\xac\xa3\x3c\xae\xdc\x68\xe9\x3d\xff\x89\x7f\x3a\xf7\xb0\x4f\xa7\xde\xa1\xfa\x1c\x9a\xac\xf6\xd1\x34\x9b\x40\xef\x45\x8f\x46\xa8\xa5\x47\xab\x7c\x3a\x79\x7e\xcf\xa2\xff\xa7\xf3\x38\x3d\x6a\x7f\x3a\xcd\x7a\x19\x5f\x4c\x8f\xaa\x95\x7f\x35\x91\xed\x83\x6c\x1f\x64\xfb\x20\xdb\x07\xd9\x3e\xc8\xf6\x41\xb6\x0f\xb2\x7d\x90\xed\x83\x6c\x1f\x64\xfb\x20\xdb\x07\xd9\x3e\xc8\xf6\x41\xb6\x4f\x78\xd9\x3e\xbf\x72\x2b\x99\x72\xa5\x39\x1e\x71\x94\x9e\x90\xe7\xf1\x39\xfa\xd0\x2d\x41\x41\x9e\xd1\x0a\xc8\x63\x07\x55\x7a\xdc\xd3\xe6\x78\x27\x05\xc0\x01\xc0\x01\xc0\x01\xc0\xd1\x35\x80\x23\xd5\x36\x80\x23\xf0\x9a\x34\xcc\x19\x52\xe0\x0c\xe0\x0c\xe0\x0c\xe0\x0c\xe0\x0c\xad\xe7\x0c\x29\x60\x81\x0e\xc4\x02\xa9\x76\xc7\x02\xa9\x0d\x88\x05\xba\x3b\x18\x21\xf6\x37\x5b\x2a\x40\x86\x9d\x87\xe4\xc5\x2c\xf6\x59\x11\xa7\xeb\x41\x2d\x38\x64\xb8\x9d\x2c\x90\xdb\x1c\xd1\xa7\x13\xe4\x78\x93\xfd\x96\x42\x48\xa3\x4f\x48\xe3\x87\x22\xe4\x3c\x9f\x2f\x67\xc8\x0c\x9b\x2f\x93\xa4\xf9\x76\x27\xaf\xe0\x21\xba\xf3\xe4\xac\x1d\xa2\x1b\x48\xc1\xaf\xe4\x41\xba\xb7\x91\x73\x42\x90\x6e\x20\x25\x37\x1b\xa6\xdb\x82\xe9\x9d\x78\x41\xaa\x98\xde\x83\xdc\xcc\x93\xd2\x85\x9c\xee\xb4\x19\x5f\x02\xaf\xa9\x7e\x8c\x5f\x5d\x36\xd5\x27\xad\x3b\x5b\x3d\xe9\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\x41\x16\xdb\x8f\x2c\x2e\x93\x39\x4e\x4a\xa6\xc9\x24\x23\x25\x47\xc9\x38\x39\xdc\x40\xde\xda\x42\x49\x2e\xad\x6a\xbe\xc0\x21\xe1\x0e\x1c\xb6\xd1\xad\x7c\xfd\xb5\x3d\xfe\xd6\x24\x3a\xad\x5b\xb0\xfd\x06\xd4\x93\xfa\xd6\x0e\x72\x26\x88\xe0\x34\x7e\xd1\x5d\xf4\x7d\x3b\xe8\xfd\x9b\x2a\xd8\x4f\x82\x2d\x54\xe5\xfe\xbe\x67\x60\x9a\x7e\xed\xba\x22\xde\x37\x93\xbb\xe8\x9b\xa2\x6b\x66\x23\xdf\xb9\xc0\x2d\x4b\x66\x9d\xbe\x91\x59\x79\x8b\xfa\xbf\xe4\x74\x29\x29\x49\xd3\xfa\x7f\xcd\xbf\xaf\xc8\xd9\x7c\x49\xce\xe6\x35\x29\x9d\x5b\xd5\x4a\x8a\x3a\x64\xbc\x6f\xda\x70\x80\xa4\x5c\xf6\x92\x22\xc5\xad\x37\x8a\x27\x63\x9b\x58\x49\xe2\x38\x4a\x95\x88\x4a\x8b\xd1\xbc\x59\x81\xdb\xac\x0a\x58\x68\x68\xd1\xac\x8a\x92\x61\x75\x60\x4f\xd7\x7b\xb5\xa8\x99\x4f\x32\xcc\x8a\x55\x4d\xb7\x16\xe4\x3c\x37\xee\xf8\x2a\x92\x8c\x6d\xe6\x77\x97\x8d\xde\x95\x50\x00\xab\xdf\xe2\x71\x93\xfb\xe2\xb1\x99\xf6\x2e\x2b\xad\x81\x95\xd1\x9f\xaf\xdc\x8b\x18\x52\x95\x62\x4e\x4e\x2b\x35\x8e\xd9\xfd\xc6\xe5\xd8\x99\xe8\xc2\x9d\x89\x87\x7a\x36\xd6\xce\x44\xe3\x33\xb2\xb8\xda\xa2\xed\x83\xcf\x5c\x53\xb9\x3b\x68\x6c\x1f\x54\xd9\x1d\x74\xd9\x32\x68\xf5\x1c\xbc\x40\xce\x93\x79\x71\x0e\x56\xd3\xe6\xaa\x62\x79\x4d\xb1\x57\x39\xc7\x36\x15\x34\x4c\x41\x9f\x29\x98\x7a\x2e\x42\x9e\x8d\xd0\x67\x22\xd1\xa7\xad\x06\x7a\x20\x72\x41\x74\x0d\xb2\x79\x49\xe3\xe6\xbd\xb4\xa8\x2c\x15\xb8\x63\x6c\x7a\xaf\xf6\xae\x8d\x01\x0c\x58\x15\x57\x15\xce\xe1\x17\x75\x63\x3c\x3f\x94\x57\x96\x65\xd6\x10\x86\x77\xa0\xfb\x21\xe6\x66\x05\xe7\x58\x56\x17\x18\x43\x35\xbb\xb2\xa2\x64\xb2\x72\x49\xc9\xad\x19\xf0\x5f\xdc\xda\xc9\x67\x73\x83\x86\xd3\xc0\x9c\x4b\x69\x59\xd5\x3f\x38\x45\x45\xcd\x16\x32\x96\xf3\x63\x7f\x7b\x4a\x6b\x45\x1b\x9e\xac\x6a\x7a\x25\x45\xb7\x54\xd6\xef\x34\x5f\xc8\x78\xc8\x92\xf0\xd1\xcf\xea\x37\xb0\x7a\xae\x28\x72\xde\xb5\x8e\x31\xca\xaa\x30\xcf\x6a\xe0\xe6\x0c\x3d\x1e\x21\xec\x64\x92\xe8\xc3\x56\x33\x7f\x28\x32\x25\x1c\x24\x5b\xd4\xfd\x40\xc5\xc2\x6f\xf3\x6a\xa1\x28\x2f\xb3\x0e\x98\x2f\xe4\xb2\xe9\xb5\x41\xde\x06\x1c\x38\x99\xef\x62\x9f\x44\xab\xf7\xd2\x48\xf2\x60\x52\x12\x2c\xae\x8c\x52\x54\xf2\x19\x25\x5f\xb2\x49\xae\x22\x15\xd4\xe2\x45\x39\xaf\xbf\x91\x61\xdb\x0f\x2f\xc9\x39\x73\xe7\x23\xc6\x7f\x8d\x49\x4b\xd9\x3c\x33\xd2\x55\xeb\x51\x72\x26\xc3\xc8\xcc\x30\x77\xb2\x32\xb6\x13\xcf\x0b\x8f\x6b\xf6\x4d\x7c\xaf\x21\x29\x4d\x67\xd9\x70\x16\x2a\x5e\x50\x2b\xdf\xcc\x54\xcb\x61\x6e\xfd\xe2\x6a\x89\x4f\xb6\x42\xe9\x62\x32\x76\x0d\xaf\xcf\x94\xf9\x22\x5a\x99\xad\x77\x6f\x2f\xb9\xa7\x97\xde\xdd\x1b\x7d\xd1\xe2\x1a\x4f\x5d\xf5\x0a\x83\x45\xea\x53\xea\x62\xe1\x8a\xb4\x2c\xab\x8b\xba\xff\x2f\xec\x9d\x5a\xf3\x42\x51\x97\x0a\xea\x8a\xde\x16\xae\x35\x3d\xe7\x78\xb8\x77\x45\xd9\x78\x36\x07\x63\x91\xbf\x55\x56\x1f\x28\xe9\x6c\xc6\xde\x54\x60\x7c\x9a\x6d\xf1\x58\xad\xab\x31\x5d\x1d\xf6\xab\x49\xa0\x93\x42\x33\x9a\xec\xd2\xf4\xb3\x6c\x9b\xb8\xfc\x61\x49\x89\xef\x93\x33\x1e\x2a\x2e\x0e\x71\xfe\x0e\x71\x69\xc8\xe8\xf8\xf2\x81\xa1\x8d\x4b\xf1\x94\x9c\xbe\xa4\x7f\x72\xf2\x19\xfd\x2a\x39\x97\x2b\x5c\x61\x17\x39\x1a\x8e\x6f\x18\x18\x43\xbf\xbc\x10\xf3\x0d\x16\xad\x92\xc6\xa5\xf8\xc9\x82\xaa\x08\xc5\x4a\x69\x59\x4b\xcb\x19\xfd\xed\x8d\xf6\x61\x8b\x2d\x2f\x4f\xe3\xab\x57\x45\x81\x4b\x56\x19\xc9\xd8\xd6\xa2\x73\xdc\x88\x86\xc4\x83\x3d\x01\x3b\xee\xe7\x79\x0c\x82\x6e\x96\xd8\x31\x08\x21\xc3\x00\xc9\xdd\x7a\xb8\x9a\x6e\xe1\xcd\xd4\x12\x03\x22\xf5\xbe\x4a\x93\xfe\x80\xed\xfd\x73\xdc\x52\xa3\x6d\xbf\xb7\xc8\xce\xb8\x5e\x27\xab\xe2\x06\x67\x41\x43\xac\x3a\xbb\x99\xae\xd1\x8d\xe2\x8f\x2b\x8a\xba\xac\x88\xbf\xee\x10\x7f\xd5\x4a\xaa\x5c\x52\x96\xb3\xe9\x21\xe7\x75\xa9\xb3\x64\x8e\xcc\x3a\xfc\x86\x31\x72\xa8\x81\x21\x32\xaf\x17\x0a\x6b\xc5\xcf\x61\x58\x1f\x47\xfb\x66\xf7\x89\xf9\x12\xba\x99\x8d\x85\xd6\xa0\xb9\x29\x92\xa2\x27\x62\xc7\x2c\x42\xd6\xc7\xd0\x98\xd1\xe2\x1e\x25\xc4\x7a\xf5\x8b\x44\x0a\xb6\x01\x39\xdb\x73\xd7\x92\xf3\x01\x72\xb6\x61\x8d\xad\xc6\xf4\x5d\xd7\xd2\xcf\x5f\x55\xb1\xd4\xed\x63\xb8\x8d\x5f\x62\x36\xae\xff\x42\x77\xa8\x7e\xf0\xc6\xbf\x09\xc1\xfa\x50\xdd\xcb\xa1\x7e\xad\xf2\xa3\x75\xd0\xe4\x50\xf5\x76\xe6\x78\x43\x44\x2a\x8c\xfe\x04\x97\x02\x97\xea\x10\x2e\x95\xfa\xcd\xca\x19\x7a\xa2\xc2\xac\xac\x77\xaa\x1e\x6e\xc0\xc0\x0c\x7a\xa2\xc2\xcc\xec\xbc\xf9\x0f\x33\xb3\xfb\xcc\xcc\xdf\xe8\x27\x7b\x5d\xcd\x4c\x16\x25\xe0\x2d\x2d\xf2\xbd\x3e\xfa\x83\x4a\xfd\xd8\xb7\xf5\x18\x01\x60\xf9\x4c\xf6\x72\x36\xb3\x2a\xe7\xc4\x80\x07\xd9\x0a\xb6\xf4\x68\xd1\xa4\x80\xf6\xc6\x2c\x28\x18\x67\x65\xc6\xed\x80\xf3\xb2\x08\xe2\x42\x51\xb1\x88\xad\x56\x52\xe4\x4c\x32\xc1\x25\x3e\x6a\xd1\xa3\x9d\xcb\x6a\xa5\x8d\xa6\x49\x7b\xa9\x2e\xdd\xf9\x2a\xab\x22\x0b\x4a\x99\xbe\xac\xe4\xfd\x13\xc0\xfa\xdc\xe7\xe8\x4b\x29\x61\x15\x83\x24\x2d\xf2\x2a\x90\x57\x81\xbc\x0a\xe4\x55\x40\x92\x16\x92\xb4\x48\xe8\x40\x42\x07\x12\x3a\x90\xd0\x81\x84\x8e\x40\x13\x3a\x20\x49\x8b\x0c\x11\x48\xd2\xae\x93\x24\xed\xfb\x07\xc8\x6c\x15\x4c\x54\xaf\x30\xed\xc3\xfd\xf4\xef\xda\x95\x1e\x1d\xac\xa4\x47\xbe\x74\x7d\x2e\xab\x95\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xc0\x8d\xd6\x99\x1b\x6d\xbc\xa8\x0c\x90\x29\x90\x29\x90\xa9\x1a\xc9\xd4\x0e\x72\x5b\x70\x64\xca\x54\xa5\xf8\xb3\x01\x7a\x5f\xa5\x2a\xc5\x67\x0c\x40\x25\x52\xa9\xbc\xb9\x90\xf9\x9c\x9f\x14\x08\x9d\x1a\xb4\x8d\x18\x66\xa8\x19\x9f\x3c\xdd\x0e\xb2\xad\xb3\x78\x99\x25\x2e\x94\x9d\x4c\xec\x6d\x80\x6d\x81\x6b\xd5\x13\xb3\x78\xa5\x75\x31\x8b\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\x60\x5a\xdd\xc1\xb4\xba\x35\x5f\x09\x64\x0c\x64\x0c\x64\xac\x36\x32\xf6\xef\x11\x12\x75\x21\x63\xa3\x8b\x4a\x49\x1e\x1d\xa6\x5f\x8f\xd0\xbf\x89\x90\x6d\x65\x88\x8b\xff\x16\xbd\x7e\x59\x29\x95\x7f\x8d\xf9\x4b\x24\x6e\x59\x56\xca\x8e\x00\xe7\xd7\x4f\xcc\xcf\x98\xbe\x67\x80\x19\xc6\x15\x05\x8d\x55\x14\x34\x56\x4b\x41\xb3\x45\x72\x3b\x07\x44\x67\xc9\x1c\x03\x44\x27\xc9\x14\x49\x35\x00\x88\x84\xf7\xac\xe5\xd8\x34\xfa\x5c\x1f\x19\xf5\xee\x00\xcf\xe0\xb8\xdf\xeb\xa3\x1f\xef\x75\xef\x98\x06\x8f\x6e\x3f\xea\x3c\xba\x9d\x17\xe7\x71\xf9\x46\x4b\x88\xbc\x4c\x7e\x86\xf7\xef\x05\x72\x9e\xf5\xef\x1c\x99\x25\xa7\x6b\x4b\x5b\xe6\x0d\x11\xea\xe1\x78\xcb\xfe\x28\x70\x8a\xa6\x9a\x40\x81\xfc\x1d\xc0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbb\x85\x07\x82\xb3\x81\xb3\x81\xb3\xad\x0f\x67\xfb\xd6\xad\x64\xc6\x1b\xf3\xd4\x9b\x1a\xf9\xfe\x5b\xe9\x57\x6f\x09\x94\xfe\x1c\x74\xa7\x3f\x1b\x3d\xf0\x0b\x67\x6c\x83\x77\x80\x77\x80\x77\x74\x0f\xef\xc0\x19\xdb\x38\x63\x1b\xd8\x01\xd8\x01\xd8\x01\xd8\xa1\x2d\xb0\x03\xce\xd8\xee\x44\x4a\x80\x33\xb6\xc3\x38\x63\x1b\x51\x0a\x2c\x4a\x21\xf6\xe2\x16\x77\xb8\x61\x7c\x2c\xaa\x1c\xd7\x79\x98\x5f\xb1\x9e\x24\x83\x83\x87\x57\x93\x57\x92\x3b\x1c\x07\x13\x9c\x24\x53\x41\xf4\x25\x0e\x29\xf0\x3b\xa4\xe0\x63\x11\x7e\xa0\xc8\x1e\x76\xa0\x88\x3e\x91\x4e\x93\x80\x1a\x9f\xbc\x86\x9f\x54\x72\x3b\x59\xb0\x4f\x2a\x09\xae\xf4\x3b\xf9\xe1\x7a\x77\x90\x0b\xc2\xe1\x7a\xc1\x15\xdf\xf8\x0a\x50\x2c\xb4\x72\x05\x48\xbc\xc3\x03\x6f\x0e\x1a\xc7\x2c\x0a\x67\x56\x7a\x8b\xbd\x25\x26\x2b\x0f\xef\xe5\xe5\x4c\x5a\xb7\xb7\x7a\x5d\x00\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x04\x90\x6c\x3f\x20\xb9\x4c\xe6\x38\x47\x99\x26\x93\x8c\xa3\x84\x7c\xce\x7f\xc2\x9d\x3f\x6c\xa3\x5b\xf9\xfa\x6b\xbb\xfd\x2d\xcc\x99\x5a\xb7\xb8\xfd\x8d\x97\x7a\x4d\xff\x24\x4e\xe6\x03\x8b\x73\x33\x85\xd6\xfe\x76\x07\xfd\xec\x26\x77\x1e\x94\x60\xeb\x56\xa9\xa6\x23\x71\x0f\x3a\x8f\x22\x5f\x1f\x32\xfc\x66\x72\x17\x7d\x53\x74\xcd\x6c\xf3\x3b\x17\xb8\xb5\xc9\x2c\xd6\x37\x32\xcb\x6f\x51\xff\x97\x9c\x2e\x25\x25\x69\x5a\xff\xaf\xf9\xf7\x15\x39\x9b\x2f\xc9\xd9\xbc\x26\xa5\x73\xab\x5a\x49\x51\x87\x8c\x97\x4e\x1b\x4e\x91\x94\xcb\x5e\x52\xa4\xb8\xf5\x46\xf1\x64\x6c\x13\x2b\x49\x1c\x56\xa9\x12\x51\x69\x31\x9a\x37\x2b\x70\x9b\x55\x01\x0b\x17\x2d\x9a\x55\x51\x32\xac\x0e\xec\xe9\x7a\x27\x17\x35\xf3\x49\x86\xa9\xb1\xaa\xe9\x16\x84\x9c\xe7\x06\x1f\x5f\x59\x92\xb1\xcd\xfc\xee\xb2\xc1\xac\x86\x87\x64\x9b\x3c\x85\xbd\x55\x0b\x49\xf4\xf7\x3c\xb6\x35\x86\xcc\xf3\xd8\x6b\x1b\xc7\x63\x2e\xa7\xb0\x63\x93\xa3\xeb\x36\x39\x1e\xeb\xd9\xa8\x9b\x1c\x4d\x9e\xc9\xde\xb2\x4d\x88\x2f\x5d\xe3\xb1\x0d\x69\x6c\x42\x54\xd9\x86\xf4\xda\x78\x68\xf5\x0c\xbd\x40\xce\x93\x79\x71\x86\x26\x52\xe4\x44\x03\xf6\xdb\x14\x7b\x9f\x73\x6c\x6b\x42\xc3\xdc\xf4\x99\x9b\xa9\xe7\x22\xe4\xd9\x08\x7d\x26\x12\x7d\xda\x6a\xa0\x07\x22\x17\x44\x07\x23\x9b\x97\x34\xee\x24\x48\x8b\xca\x52\x81\xbb\xd7\xa6\x0f\x6c\xef\xfd\x18\xd8\x81\x55\x71\x55\xe1\x34\x7f\x51\x37\xe9\xf3\x43\x79\x65\x59\x66\x0d\x61\xf8\x18\xba\x37\x63\x6e\x79\x70\x1a\x66\x75\x81\x31\x5e\xb3\x2b\x2b\x4a\x26\x2b\x97\x94\xdc\x9a\xb1\x85\x20\x6e\x10\xe5\xb3\xb9\x41\xc3\xf5\x60\x2e\xaa\xb4\xac\xea\xdf\xa4\xa2\xa2\x66\x0b\x19\xcb\x85\xb2\x3f\x4f\xa5\xb5\xa2\x8d\x60\x56\x35\xbd\x92\xa2\x73\x2b\xeb\x77\x9a\x2f\x64\x3c\x64\x49\x30\x13\xb2\xfa\x0d\xac\x9e\x2b\x8a\x9c\x77\xad\x63\x8c\xb2\x2a\xcc\xb3\x1a\xb8\xb9\x54\x8f\x47\xc8\xa3\x11\xfa\x48\x24\xfa\xb0\xd5\xcc\x1f\x8a\x4c\x09\x12\xba\x45\xdd\x9b\x54\x2c\x88\x37\xaf\x16\x8a\xf2\x32\xeb\x80\xf9\x42\x2e\x9b\x5e\x1b\xe4\x6d\xc0\xb1\x95\xf9\x2e\xb6\x06\xaf\xde\x4b\x23\xc9\x83\x49\x49\xb0\xd1\x32\x4a\x51\xc9\x67\x94\x7c\xc9\xe6\xc1\x8a\x54\x50\x8b\x17\xe5\xbc\xfe\x46\x86\x73\x30\xbc\x24\xe7\xcc\xfd\x93\x18\xff\x35\x26\x2d\x65\xf3\xcc\xca\x57\xad\x47\xc9\x99\x0c\xe3\x3b\xc3\xdc\x55\xcb\xd8\x28\x80\x17\x1e\xd7\xec\x9b\xf8\x8e\x45\x52\x9a\xce\xb2\xe1\x2c\x54\xbc\xa0\x56\xbe\x19\xc3\x77\x7c\xf3\x90\x6f\x98\xb0\xc9\x56\x28\x5d\x4c\xc6\xae\xe1\xf5\x99\x32\x5f\x44\x2b\xb3\x0e\xef\xed\x25\xf7\xf4\xd2\xbb\x7b\xa3\x2f\x5a\x74\xe4\xa9\xab\x5e\x61\x10\x4d\x7d\x4a\x5d\x2c\x5c\x91\x96\x65\x75\x51\x5e\x2e\xdb\x86\xb5\xe6\x85\xa2\x2e\x15\xd4\x15\xbd\x2d\x5c\x6b\x7a\xce\xf1\x70\xef\x8a\xb2\xf1\x6c\x0e\xc6\x22\x7f\xab\xac\x3e\x50\xd2\xd9\x8c\xbd\x35\xc1\x28\x37\xdb\x28\xb2\x5a\x57\x53\x4a\xa6\xbb\x65\x72\xec\xa4\xd0\x8c\x26\x01\x35\x1d\x35\xdb\x8a\x2e\x7f\x58\x52\xe2\x3b\xf0\x8c\xaa\x8a\x8b\x43\x9c\xbf\x43\x5c\x1a\x32\x3a\xbe\x7c\x60\x68\xe3\x52\x3c\x25\xa7\x2f\xe9\x5f\xa0\x7c\x46\xbf\x4a\xce\xe5\x0a\x57\xd8\x45\x8e\x86\xe3\xdb\x0e\xc6\xd0\x2f\x2f\xc4\x7c\x83\x45\xab\xa4\x71\x29\x7e\xb2\xa0\x2a\x42\xb1\x52\x5a\xd6\xd2\x72\x46\x7f\x7b\xa3\x7d\xd8\x62\xcb\xcb\xd3\xf8\xea\x55\x51\xe0\x92\x55\x46\x32\xb6\xb5\xe8\x1c\x37\xa2\x85\xf1\x60\x4f\xc0\xee\xff\x79\x1e\xdd\x70\x86\xcc\x08\xd1\x0d\x21\x23\x05\xc9\xdd\x98\xb8\x9a\x6e\xe1\xcd\xd4\x3a\x7b\x22\xf5\x11\x0f\xfb\xff\x80\x0d\x12\x38\xbe\xa9\xd1\x11\x38\x54\x74\x2a\x75\xb7\xdc\xc8\xb8\xc1\x59\xd0\x10\xab\xd3\x6e\xa6\xc5\x74\xa3\xf8\xe3\x8a\xa2\x2e\x2b\xe2\xaf\x3b\xc4\x5f\xb5\x92\x2a\x97\x94\xe5\x6c\x7a\xc8\x79\x5d\xea\x2c\x99\x23\xb3\x0e\x27\x63\x8c\x1c\x6a\x60\xc4\xcc\xeb\x85\xc2\x78\xf1\x73\x2c\xd6\xd1\x53\xf7\xd6\x4c\x2f\x72\xcd\xf4\x96\x41\xbf\x6e\x15\x4f\xa4\x1f\x7b\x19\x79\x45\xd0\x04\x6f\x58\x63\x6b\x35\x7d\xe2\x5a\xfa\xf4\x55\xee\x6b\xe0\x3e\x06\xf2\xf8\x75\x66\x33\xfb\xaf\x80\x47\x1b\x44\x7a\xfc\xdb\x11\xac\xaf\x05\xc2\x45\xa2\x9f\xf6\xf8\xc2\x1d\x34\x09\x57\xbd\x1d\x7c\xa2\x71\xd6\x15\x46\x1f\x83\x78\x81\x78\x75\x30\xf1\x4a\x7d\xca\x63\xfe\x9e\xa8\xb0\x50\xeb\x9d\xc8\xc7\x1a\xb5\x55\x83\x9e\xc6\xb0\x58\x3b\x6f\x61\x80\xc5\xda\xcd\x16\xeb\x27\xfb\xc9\x21\x6f\x8b\x95\x1f\xf1\xe5\x29\xa5\xf2\xe3\x3e\xfa\x16\x8f\xbd\xe5\xf6\x38\x6a\x3e\x55\x71\x1c\x57\x55\x61\xde\xb9\xac\x56\xda\x68\xe2\xbc\x6d\x7b\xea\x3c\x64\x79\x91\x15\x82\xac\x10\x64\x85\x20\x2b\x04\xb2\xbc\x90\xe5\x45\x3a\x0a\xd2\x51\x90\x8e\x82\x74\x14\xa4\xa3\x40\x96\x17\xf9\x2d\x90\xe5\xed\x00\x59\xde\xdf\x19\x20\xe7\xfc\xd0\x51\xbd\xe2\xbc\x4f\xf5\xd3\x17\x3c\x8e\x66\x6a\x0f\xa2\x74\xc4\x83\x28\xf9\xa2\xf8\xb9\xac\x56\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x02\x4b\x6a\x07\x96\xb4\xf1\xa2\x37\x40\xab\x40\xab\x40\xab\x6a\xa4\x55\x3b\xc8\x1d\x01\xd3\x2a\x53\x62\xe3\xb1\x01\xfa\x7b\x1e\x61\x50\x9f\x31\xa0\x95\x48\xaa\xf2\xe6\x92\xe6\x73\xae\x54\x20\xc4\x6a\xd0\x36\x67\x98\xc9\x66\x7c\xfc\x74\x8b\xc8\xb6\xd3\xe2\x65\x36\xb9\x50\x76\x32\x71\xa8\x51\xde\x05\xd6\x55\x4f\xbc\xe3\x95\x16\xc7\x3b\x82\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x81\x73\x75\x07\xe7\xea\xd6\x5c\x27\xd0\x32\xd0\x32\xd0\xb2\xda\x68\xd9\x97\x22\xe4\xa5\x9c\x96\x2d\x32\x32\x46\xff\x67\x84\x7e\x2a\x42\x36\xb1\xff\x17\x8d\x2e\x33\x91\xa8\xa5\x82\xba\x62\xb5\x9a\x2c\x31\x2c\x91\xb8\x66\x59\x29\xa5\x18\x33\x9a\x9f\x39\xa5\xff\x25\xb8\xec\xe3\x8a\x82\xc6\x2a\x0a\x1a\xab\xa5\xa0\xd9\x2c\x39\xcb\xd9\xcf\x29\x32\xcd\xd8\xcf\x71\x72\x94\x8c\x37\xc0\x7e\xcc\x77\xf4\x23\x3f\xf4\x6b\x11\xf2\x1f\xc5\xf6\xbc\x3c\x32\x4c\xbf\x10\xa1\x0f\x45\xc8\x4b\xd8\x1f\x5e\x77\x79\x24\x7a\xbd\xde\xaa\x65\x76\x0c\xef\xfe\xc4\x75\x66\x93\xde\x31\x32\x31\x3f\x63\xba\xea\x01\xa6\x75\x07\xd6\xb0\x45\x72\x3b\x6f\xd8\xb3\x64\x8e\x35\xec\x49\x32\x45\x52\x8d\x35\xac\xf9\x9e\xb5\x9c\xbe\x47\xbf\x10\x23\xdb\x1c\xed\xfb\x86\xc2\xa2\x46\x1f\x88\xd1\x3f\xbc\x4a\x68\xe3\x5b\xaa\x9f\xf0\x3f\x5b\x58\x4c\x6c\xd7\x2f\x31\x9a\x7b\xb6\xb0\xb8\xd1\xf2\x41\x5f\x41\x8e\xf0\x2e\xd8\x4f\xf6\xb2\x2e\x18\x22\xbb\xc9\x2e\xcf\x74\x6e\xd6\x32\x7a\x8b\xcf\x16\x16\x03\x39\xe7\xf0\xb4\x3f\xc2\x1c\xa0\x7d\x06\xc2\x64\x4f\x37\xe0\xe5\x6c\x61\x51\x00\x95\x23\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\x60\x94\xdd\xc2\x28\xc1\xfe\xc0\xfe\xc0\xfe\xd6\x87\xfd\xbd\x77\x96\x24\x1c\x2c\xc5\x23\x30\x8e\x21\x96\x6f\xcd\xd0\x67\xa4\xfa\x10\xcb\x4f\x0b\x88\xc5\x0e\x24\x9b\x2d\x2c\xb6\x39\x5c\xc1\x01\xe4\x40\x12\x40\x12\x40\x12\xdd\x83\x24\x70\x00\x39\x0e\x20\x07\x19\x00\x19\x00\x19\x00\x19\x68\x0b\x32\x80\x03\xc8\x3b\xd1\x91\xc7\x01\xe4\x61\x1c\x40\xde\x31\xa1\x00\xb1\xdf\xda\x2c\x00\x86\x97\xf2\x35\x5e\x92\x19\x4b\x88\xf2\xff\x17\x2a\x4d\xe0\xce\xff\x38\x39\x4c\x0e\x3a\x4e\x26\x88\x93\x81\x9a\xda\x13\xc7\x10\xf8\x1d\x43\xf0\x57\x3d\xe4\x10\x1f\xad\x23\x64\x98\x8d\xd6\x5d\xa4\xd6\xd6\x25\x47\xf9\x01\x24\x07\xc8\x3e\xfb\x00\x92\x3a\x6e\x3f\xc6\x8f\xd6\x3b\x48\xf6\x0b\x47\xeb\xd5\x71\x7f\xe3\x13\xa5\x58\x08\x74\xa2\x24\x7e\x57\x24\x71\x3f\x6d\x9c\x8d\x28\x1c\x34\x59\x58\x62\x93\xa6\x9f\xff\x62\x4c\x9a\x49\xeb\xf7\x30\xa7\x0f\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x19\xd8\x59\xfb\xb1\xb3\xe5\x80\x4f\xef\xf7\x43\x04\x09\x77\x44\xb0\x8d\x6e\xe5\xeb\xaf\xed\xc3\x07\x99\x62\xb3\x6e\x61\xde\x1b\x2f\x7b\x98\xfe\x24\x46\x46\x6a\x0f\x8b\x32\xb5\xc1\x3e\x1f\xa3\x0f\xf5\x0a\x4c\xe6\x3a\xb6\xdc\x94\x7b\xed\x2c\x24\x4a\xff\x7b\x0b\x20\xe6\x9b\xc9\x5d\xf4\x4d\xd1\x35\xb3\x59\xee\x5c\xe0\x16\x1f\xb3\x1a\xdf\xc8\xac\xaf\x45\xfd\x5f\x72\xba\x94\x94\xa4\x69\xfd\xbf\xe6\xdf\x57\xe4\x6c\xbe\x24\x67\xf3\x9a\x94\xce\xad\x6a\x25\x45\x1d\x32\xde\x20\x6d\x38\x26\x52\x2e\x7b\x49\x91\xe2\x56\xed\xe3\xc9\xd8\x26\x56\x92\xd8\xf3\xa9\x12\x51\x69\x31\x9a\x37\x2b\x70\x9b\x55\x01\x0b\xd9\x2c\x9a\x55\x51\x32\xac\x0e\xec\xe9\x7a\x3f\x14\x35\xf3\x49\xc6\xe7\x7e\x55\xd3\xbf\xe2\x72\x9e\x1b\x5d\x7c\x76\x27\x63\x9b\xf9\xdd\x65\xe3\x6d\xa1\x09\xb8\xd8\xe4\xf9\xe1\x81\xcd\xd6\xe8\x0f\x37\x09\x03\xe9\xe5\xe6\xa9\xe0\x95\x63\xe9\x06\xe3\x27\x30\xf1\x0d\xce\xc4\x7f\x61\x1d\x99\x78\x93\xa7\x6e\x07\x87\xb4\xff\xf1\x3f\x8a\x7b\x3f\x06\xd2\x36\xf6\x7e\xca\x30\x76\x98\xe3\xfc\x02\x39\x4f\xe6\xc5\x71\x9e\x48\x91\x13\x0d\x58\x03\x53\xac\xc2\xe7\x18\xe8\xd6\x30\x01\x7c\x26\x40\xea\xb9\x08\x79\x36\x42\x9f\x89\x44\x9f\xb6\x1a\xe8\x81\xc8\x05\xd1\x5c\xcd\xe6\x25\x8d\x9b\x9c\xd2\xa2\xb2\x54\xe0\xce\x9a\xe9\x51\xd9\x3b\x09\x86\x13\xcb\xaa\xb8\xaa\x70\x36\xbc\xa8\x1b\x88\xf9\xa1\xbc\xb2\x2c\xb3\x86\x30\x2c\x56\xdd\x36\x36\x01\x3a\x67\x2b\x56\x17\x18\x83\x2f\xbb\xb2\xa2\x64\xb2\x72\x49\xc9\xad\x19\x40\x5a\xdc\x6e\xc8\x67\x73\x83\x86\x21\xcb\x1c\x1e\x69\x59\xd5\x97\xe9\xa2\xa2\x66\x0b\x19\xcb\x20\xb7\x57\xec\xd2\x5a\xd1\x76\xe8\x57\x35\xbd\x92\xa2\xab\x24\xeb\x77\x9a\x2f\x64\x3c\x64\x49\xf8\xe0\x65\xf5\x1b\x58\x3d\x57\x14\x39\xef\x5a\xc7\x18\x65\x55\x98\x67\x35\x70\x33\xd0\x1f\x8f\x90\x47\x23\xf4\x91\x48\xf4\x61\xab\x99\x3f\x14\x99\x12\xc4\x47\x8b\xba\x6f\xa2\x58\x48\x68\x5e\x2d\x14\xe5\x65\xd6\x01\xf3\x85\x5c\x36\xbd\x36\xc8\xdb\x80\x43\x10\xf3\x5d\x6c\xf5\x52\xbd\x97\x46\x92\x07\x93\x92\x60\x6d\x64\x94\xa2\x92\xcf\xe8\x6e\xae\x45\x17\x15\xa9\xa0\x16\x2f\xca\xba\xf7\x2a\x19\x96\xe8\xf0\x92\x9c\x33\x69\x7c\x8c\xff\x1a\x93\x96\xb2\x79\x66\x52\xaa\xd6\xa3\xe4\x4c\x86\xd1\x82\x61\x6e\xf8\x67\x6c\xc7\x92\x17\x1e\xd7\xec\x9b\x38\xff\x4e\x4a\xd3\x59\x36\x9c\x85\x8a\x17\xd4\xca\x37\x63\x30\x88\x6f\x45\x71\xfc\xce\x26\x5b\xa1\x74\x31\x19\xbb\x86\xd7\x67\xca\x7c\x11\xad\xcc\xce\xb9\xb7\x97\xdc\xd3\x4b\xef\xee\x8d\xbe\x68\xf9\xda\x4f\xe9\xbe\x36\x7b\xa8\x3e\xa5\x2e\x16\xae\x48\xcb\xb2\xba\xa8\xfb\xa4\xc2\x0e\x9d\x35\x2f\x14\x75\xa9\xa0\xae\xe8\x6d\xe1\x5a\xd3\x73\x8e\x87\x7b\x57\x94\x8d\x67\x73\x30\x16\xf9\x5b\x65\xf5\x81\x92\xce\x66\x6c\xd0\xcd\x98\x29\xdb\x76\xb0\x5a\x57\x63\x2a\x1f\xec\x57\x93\x8a\x26\x85\x66\x34\x79\x9a\xe9\x15\xd8\xf6\x60\xf9\xc3\x92\x12\xdf\x53\x65\x8c\x4e\x5c\x1c\xe2\xfc\x1d\xe2\xd2\x90\xd1\xf1\xe5\x03\x43\x1b\x97\xe2\x29\x39\x7d\x49\xff\x48\xe4\x33\xfa\x55\x72\x2e\x57\xb8\xc2\x2e\x72\x34\x1c\x87\xd8\xc6\xd0\x2f\x2f\xc4\x7c\x83\x45\xab\xa4\x71\x29\x7e\xb2\xa0\x2a\x42\xb1\x52\x5a\xd6\xd2\x72\x46\x7f\x7b\xa3\x7d\xd8\x62\xcb\xcb\xd3\xf8\xea\x55\x51\xe0\x92\x55\x46\x32\xb6\xb5\xe8\x1c\x37\xe2\x67\xfc\xc1\x9e\x80\x9d\xc9\xf3\x7c\xbf\xfa\x0c\x99\x11\xf6\xab\x43\x76\x50\x25\xf7\xef\xfd\xd5\x74\x0b\x6f\xa6\x00\x3f\xf9\xa9\xdf\x13\xc3\x3d\x62\xb6\x2f\xca\x5d\x7c\x17\x8b\xf7\xe5\x45\xfd\xea\x70\xed\x80\x1b\x9c\x05\x0d\xb1\x87\xee\x66\x7a\x29\x37\x8a\x3f\xae\x28\xea\xb2\x22\xfe\xba\x43\xfc\x55\x2b\xa9\x72\x49\x59\xce\xa6\x87\x9c\xd7\xa5\xce\x92\x39\x32\xeb\xb0\xa6\xc7\xc8\xa1\x06\x3a\x75\x9e\xb5\x07\xec\x0b\x1f\x03\x3b\x4c\xb7\xd0\x5b\xec\xb9\xc8\xc5\x9e\x83\xc3\x38\x7b\x48\x92\x0e\xc6\x12\x16\x4d\xf9\x8f\xa2\xa2\xdb\x6c\x61\xb1\x13\xd4\xdb\xe8\x17\xb7\x92\x43\x75\xf3\x97\x61\x8d\xad\x6e\xf4\x5d\x5b\xe9\xd7\x45\xad\x25\x89\x61\x18\xfe\xa3\xd9\x50\xe5\x4b\xca\x76\x2f\x20\xc3\xd7\xcb\x60\xfd\x8b\xce\xe0\x13\x6f\x13\x97\xed\x3e\x93\x4f\x54\x6b\xe4\x5b\xaa\x90\x8a\x30\xda\x19\xbc\x02\xbc\x22\x64\x5e\x91\xfa\xb4\x38\x0b\x06\x2b\x8c\x97\x6a\xd3\xe1\x66\x4f\x33\x26\xe8\xc9\x00\x63\xa6\xf3\x66\x1f\x8c\x99\x8d\x63\xcc\x3c\xd8\x47\x5e\xee\x30\x66\xf8\x11\x34\x2c\xa5\xfe\x83\x7d\xf4\xd7\xc5\x4d\xa3\x42\x6d\x27\x1f\xcf\x16\x16\x03\x3a\xe5\xb8\xef\x8a\xb0\x10\x19\xe9\x00\x1b\x4d\x08\xb1\x6d\x0f\x33\x86\x42\x22\x42\xaa\x11\x52\x8d\x90\x6a\x84\x54\x43\x21\x11\x0a\x89\x88\xe5\x46\x2c\x37\x62\xb9\x11\xcb\x8d\x58\x6e\x28\x24\x22\x38\x1c\x0a\x89\x1b\x20\x38\x9c\xde\xdf\x4f\xf6\xb8\xd2\x9b\x6a\x3a\x89\x3f\xea\xa3\xbf\xba\xae\x50\xe7\xa6\x2b\x5e\x74\x79\x2e\xab\x95\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x80\x73\x5a\x82\x73\x36\x5e\x0c\x03\x80\x11\x80\x11\x80\x51\x6d\xc0\xe8\x03\x03\xe4\x60\xbd\xc0\xc8\xcc\x20\xff\x7a\x3f\x7d\x4c\xe4\x46\x1f\xed\x31\x5a\x5e\xa0\x45\x79\x73\xa1\x12\x4e\xd9\x08\x84\x1a\x0d\xda\x06\x09\x33\xba\x8c\xcf\x97\x6e\xd3\xd8\x96\x56\xbc\xcc\xaa\x16\xca\x4e\x26\x5e\xee\xc9\x9c\xc0\x9b\xea\x89\xb2\xbb\x12\x74\x94\x1d\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x13\x58\x53\x77\xb0\xa6\x6e\xc8\xb0\x01\x9d\x02\x9d\x02\x9d\xaa\x8d\x4e\x7d\x2f\x42\xae\x2d\xa7\x53\x8b\x4a\x49\x1e\x19\xa6\x4f\x44\xe8\x63\x11\xf2\x1f\x4c\xf4\xc4\xfe\x1a\xbd\x7e\x59\x29\x95\x7f\x6d\x79\xc5\x13\x37\x2c\x2b\xe6\xa1\xae\xec\xca\x89\xf9\x19\xd3\xab\x0c\x30\x73\xb5\xa2\xa0\xb1\x8a\x82\xc6\x6a\x29\x68\xb6\x48\x6e\xe7\x80\xe7\x2c\x99\x63\x80\xe7\x24\x99\x22\xa9\x06\x00\x8f\xf0\x9e\xb5\x1c\x9b\x43\x9f\x8f\x91\x1b\xdd\x9a\x3b\xad\x16\xf2\x2c\x52\xec\xc9\x18\xfd\xea\x55\xce\x66\x1f\xa8\x7e\xac\xee\xa4\x5a\xc8\xcf\x16\x16\x13\x71\xe1\x68\x5d\x76\xa3\xf1\xc3\x46\xcb\xde\x7b\x3d\x99\xe6\xbd\x73\x8c\x1c\x61\xbd\x73\x80\xec\x23\xa3\xbe\xc9\xac\xec\x95\x93\xc6\x3b\x07\x72\x88\xd1\x6d\xfe\xc8\x2d\x49\x07\x5d\x90\x9b\x51\x09\x11\xbb\xb1\xda\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x81\xbd\x75\x0b\x7b\x03\xe7\x02\xe7\x02\xe7\x5a\xa7\x28\xac\x33\x64\xaf\x1b\x78\xf1\x08\xc2\xb2\x78\xcc\x37\x67\xe9\xdd\xb7\x34\xc8\x63\x6e\x71\xf2\x18\x3b\x08\xca\xb8\xa4\xcd\x49\x0c\xce\x6d\x05\xad\x00\xad\x00\xad\xe8\x1e\x5a\x81\x73\x5b\x71\x6e\x2b\xa0\x01\xa0\x01\xa0\x01\xa0\x41\x5b\x40\x03\x9c\xdb\xda\x89\x3e\x3e\xce\x6d\x0d\xe3\xdc\xd6\x0e\x8e\x1b\x88\x7d\x6b\xb3\x13\x42\x5c\xc3\x97\x7e\x49\xb6\x78\x43\x1f\xff\x4b\x6b\x88\x03\x07\x04\x53\x24\x45\x4e\x38\x84\xde\xf7\x90\x64\x7d\x6d\x0e\x79\x77\x3f\x79\xf7\xbf\xef\x21\x13\x7c\x68\x8f\x91\x43\x6c\x68\x8f\x92\xba\x9b\x99\x9c\xe4\xa7\x2c\x1c\x27\x47\xed\x53\x16\x1a\x29\xe7\x14\x3f\x82\xea\x04\x39\x26\x1c\x41\xd5\x48\x41\x8d\xcf\xb3\x62\x21\x9c\x79\x96\xf8\xbc\xe4\x9c\x67\x37\x1a\x47\x8b\x09\xe7\xb4\x15\x96\xac\x39\x37\x54\x76\x0c\x25\x8f\xba\xb2\x2e\x0c\x7b\xf6\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\xb5\x1f\x9e\x5b\x0e\xf8\x24\x6c\x3f\x7a\x90\x70\xa7\x07\xdb\xe8\x56\xbe\xfe\xda\x0e\x7d\x28\x99\x3e\xeb\x16\x6d\xbe\xf1\x12\x76\xe9\x87\xfb\xc9\x58\x03\xd1\x59\xa6\x4c\xd6\x73\x7d\xf4\x6f\x7b\x9d\xdc\x26\xca\x56\xa1\x72\x67\xde\x8a\xcc\x12\x0e\xf8\x6d\x09\x27\x7d\x33\xb9\x8b\xbe\x29\xba\x66\xb6\xd8\x9d\x0b\xdc\x2a\x64\x96\xe5\x1b\x99\x85\xb6\xa8\xff\x4b\x4e\x97\x92\x92\x34\xad\xff\xd7\xfc\xfb\x8a\x9c\xcd\x97\xe4\x6c\x5e\x93\xd2\xb9\x55\xad\xa4\xa8\xf6\x51\xfb\xdc\x79\x91\x72\xd9\x4b\x8a\x14\xb7\xde\x20\x9e\x8c\x6d\x62\x25\x89\x83\x22\x55\x22\x2a\x2d\x46\xf3\x66\x05\x6e\xb3\x2a\x60\x61\x9d\x45\xb3\x2a\x4a\x86\xd5\x81\x3d\x5d\xef\xa2\xa2\x66\x3e\xc9\x30\x09\x56\x35\xfd\x4b\x2f\xe7\xb9\x61\xc6\x57\x80\x64\x6c\x33\xbf\xbb\x6c\x28\xbe\x26\x08\x6c\xd9\xe4\x19\xc7\xc1\x4f\xed\xe8\x47\x2a\x60\xfc\x4d\xe6\x89\xc7\xee\xe3\xad\xbf\xfc\xac\x63\xa0\xf9\xce\x41\xf3\xbf\xd1\x56\x68\xbe\xc9\x93\x90\x43\x00\xea\xef\xbc\xa6\x62\xe3\xca\x00\xea\xc2\xc6\x55\x25\x44\x0f\x7b\x76\x5c\x20\xe7\xc9\xbc\x38\x3b\x12\x29\x72\xa2\x01\x5b\x64\x8a\xd5\xfc\x1c\xc3\xec\x1a\x66\x8b\xcf\x6c\x49\x3d\x17\x21\xcf\x46\xe8\x33\x91\xe8\xd3\x56\x03\x3d\x10\xb9\x20\x1a\xcb\xd9\xbc\xa4\x71\x83\x57\x5a\x54\x96\x0a\xdc\x55\x34\xfd\x39\x7b\x1f\xc3\x70\xa1\x59\x15\x57\x15\x4e\xa6\x17\x75\xf3\x34\x3f\x94\x57\x96\x65\xd6\x10\x86\xbd\xac\x5b\xe6\x26\xbe\xe7\x64\xc7\xea\x02\x63\x24\x66\x57\x56\x94\x4c\x56\x2e\x29\xb9\x35\x03\x87\x8b\x9b\x1d\xf9\x6c\x6e\xd0\x30\xa3\x99\xbb\x25\x2d\xab\xfa\x4a\x5f\x54\xd4\x6c\x21\x63\xb9\x03\xf6\xa2\x5f\x5a\x2b\xda\x38\x61\x55\xd3\x2b\x29\x3a\x6a\xb2\x7e\xa7\xf9\x42\xc6\x43\x96\x84\x4f\x69\x56\xbf\x81\xd5\x73\x45\x91\xf3\xae\x75\x8c\x51\x56\x85\x79\x56\x03\x37\xf7\xe0\xf1\x08\x79\x34\x42\x1f\x89\x44\x1f\xb6\x9a\xf9\x43\x91\x29\x41\x12\xb4\xa8\x7b\x46\x8a\x05\xa4\xe6\xd5\x42\x51\x5e\x66\x1d\x30\x5f\xc8\x65\xd3\x6b\x83\xbc\x0d\x38\x82\x31\xdf\xc5\xd6\x14\xd5\x7b\x69\x24\x79\x30\x29\x09\x76\x4c\x46\x29\x2a\xf9\x8c\xee\x64\x5b\x6c\x53\x91\x0a\x6a\xf1\xa2\xac\xfb\xce\x92\x61\xfe\x0e\x2f\xc9\x39\x73\x2f\x20\xc6\x7f\x8d\x49\x4b\xd9\x3c\xb3\x63\x55\xeb\x51\x72\x26\xc3\x58\xc5\x30\x77\x3b\x32\xb6\x5b\xcb\x0b\x8f\x6b\xf6\x4d\x9c\xbe\x27\xa5\xe9\x2c\x1b\xce\x42\xc5\x0b\x6a\xe5\x9b\x31\x14\xc5\x37\xc2\x38\xfc\x67\x93\xad\x50\xba\x98\x8c\x5d\xc3\xeb\x33\x65\xbe\x88\x56\x66\x41\xdd\xdb\x4b\xee\xe9\xa5\x77\xf7\x46\x5f\xb4\x3c\xfd\xa7\x74\x4f\x9f\x3d\x54\x9f\x52\x17\x0b\x57\xa4\x65\x59\x5d\xd4\x3d\x62\x61\xb3\xd0\x9a\x17\x8a\xba\x54\x50\x57\xf4\xb6\x70\xad\xe9\x39\xc7\xc3\xbd\x2b\xca\xc6\xb3\x39\x18\x8b\xfc\xad\xb2\xfa\x40\x49\x67\x33\x36\x66\x67\xc4\x96\x6d\x7a\x58\xad\xab\x7b\xcd\x86\x43\x61\x32\xd9\xa4\xd0\x8c\x26\xcd\x33\x5d\x11\xdb\xd2\x2c\x7f\x58\x52\xe2\xbb\xbe\x8c\x10\x8a\x8b\x43\x9c\xbf\x43\x5c\x1a\x32\x3a\xbe\x7c\x60\x68\xe3\x52\x3c\x25\xa7\x2f\xe9\xdf\x8f\x7c\x46\xbf\x4a\xce\xe5\x0a\x57\xd8\x45\x8e\x86\xe3\x08\xdd\x18\xfa\xe5\x85\x98\x6f\xb0\x68\x95\x34\x2e\xc5\x4f\x16\x54\x45\x28\x56\x4a\xcb\x5a\x5a\xce\xe8\x6f\x6f\xb4\x0f\x5b\x6c\x79\x79\x1a\x5f\xbd\x2a\x0a\x5c\xb2\xca\x48\xc6\xb6\x16\x9d\xe3\x46\xfc\xe6\x3f\xd8\x13\xb0\x2b\x7b\x9e\xef\xa8\x9f\x21\x33\xc2\x8e\x7a\xc8\xee\xb1\xe4\x6e\x0a\x5c\x4d\xb7\xf0\x66\x0a\xc3\x1a\x48\x3d\x5e\x61\x39\xef\xb0\xdd\x61\x8e\x1b\x3c\x4c\xe8\x58\x51\x50\x13\x0e\xdb\x44\xb8\xc1\x59\xd0\x10\x7b\xfa\x6e\xa6\x39\x73\xa3\xf8\xe3\x8a\xa2\x2e\x2b\xe2\xaf\x3b\xc4\x5f\xb5\x92\x2a\x97\x94\xe5\x6c\x7a\xc8\x79\x5d\xea\x2c\x99\x23\xb3\x0e\xf3\x7c\x8c\x1c\x6a\xa0\xbf\xe7\x59\xc3\xc0\xf4\xf0\x31\xd4\x5b\xe2\x8b\x7a\xab\x38\x17\xb9\x8a\x73\x08\xa0\x69\x1f\x19\xa5\x7b\x62\x49\x8b\xf7\x6c\x13\x25\xdd\x8c\xdb\x3a\x41\xd6\x8d\x3e\x49\xc9\x44\xe3\x94\x68\x58\x63\xeb\x22\xfd\x79\x4a\xdf\x56\xa1\xb0\xd4\xcf\x60\x11\xbf\xc2\x6c\xba\xca\x35\x28\xee\x8b\x8d\xf8\xda\x1b\xac\xaf\xd2\xa9\x14\xe5\x53\x15\xdf\x82\xb8\x49\x51\xfc\x3a\x22\x51\x0b\x4f\x09\xa3\x2f\x40\x55\x40\x55\xda\x80\xaa\xa4\x9e\xad\x98\x3b\x7b\x2a\xec\x28\xbf\x49\xb4\xd3\xdf\xa2\x0a\x7a\x0a\xc1\xae\xea\xbc\xa9\x0a\xbb\x6a\xa3\xdb\x55\x5f\xef\x23\x31\x37\xbb\x8a\x1f\x53\x63\x49\x21\x7c\xb2\x8f\x7e\xba\x62\x97\x4d\xab\xed\x24\x63\xa3\xb9\x02\x3a\xcd\x78\xf0\x8a\x73\xe5\x12\xb2\x37\x36\x9a\xda\x65\xdb\x1e\x6e\x0c\xf5\x4b\x04\xac\x23\x60\x1d\x01\xeb\x08\x58\x87\xfa\x25\xd4\x2f\x11\x29\x8f\x48\x79\x44\xca\x23\x52\x1e\x91\xf2\x50\xbf\x44\xe8\x3d\xd4\x2f\x37\x52\xe8\x3d\xfd\xab\x7e\x72\xd8\x9b\xf0\xf8\x69\x60\xbe\xb7\x9f\xfe\x51\x7b\x80\x9f\x1d\x15\xe0\xa7\x02\x59\xcf\x65\xb5\x12\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x0f\x90\x4f\x6b\x91\xcf\xc6\x8b\x85\x00\x54\x02\x54\x02\x54\xaa\x0d\x2a\x7d\x6e\x80\x9c\x68\x18\x2a\x99\xa9\xfb\xff\xde\x4f\xff\xae\x82\x2d\xdd\xdf\x63\xf4\x83\x40\x94\xf2\xe6\xb2\xe5\x38\x65\x25\x10\xb2\x34\x68\x9b\x28\xcc\x0c\x33\x3e\x68\xba\x95\x63\xdb\x5e\xf1\x32\x3b\x5b\x28\x3b\x99\x88\xf9\x73\x29\x30\xa9\x7a\xa2\xfa\xae\x84\x16\xd5\x07\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\x05\x1e\xd5\x1d\x3c\xaa\x5b\x32\x7a\x40\xb1\x40\xb1\x40\xb1\x6a\xa3\x58\xdf\x8d\x90\x28\xa7\x58\x69\x45\x35\x4a\x51\x34\xc6\x39\xb2\x85\x61\xfa\xc5\x08\xfd\x7c\x84\xbc\x54\xfc\x2d\x1a\x5d\x66\x3a\x3a\x4b\x05\x75\xc5\x6a\x4a\x59\x62\x14\x22\x71\xfd\xb2\x52\x9a\x14\x2e\x9e\x98\x9f\x39\xa5\xff\x10\x5c\x0e\x6d\x45\x41\x63\x15\x05\x8d\xd5\x52\xd0\x6c\x96\x9c\xe5\xc4\xe7\x14\x99\x66\xc4\xe7\x38\x39\x4a\xc6\x1b\x20\x3e\xe6\x3b\xfa\xf1\x1e\x7a\xef\x55\x66\xa2\xa1\x5b\x5b\x9b\xfc\x90\x32\x85\x30\x72\xad\x78\x8d\x85\x06\xf5\xf6\x2d\x37\x79\xf8\xc8\x49\xc4\x1c\x0d\x6f\x70\xb8\x89\xf9\x19\xd3\xc3\x0f\x30\x8f\x39\xb0\x3e\x28\x92\xdb\x79\x1f\x9c\x25\x73\xac\x0f\x4e\x92\x29\x92\x6a\xac\x0f\xcc\xf7\xac\xe5\x08\x2b\xfa\xfe\x5b\xc9\x11\xff\xae\x10\x7f\xcb\x2e\xeb\xcb\xb6\x69\xb6\xd0\x2f\xcf\xd1\x6f\xde\xe2\xd1\x49\x07\x7d\xce\xc7\xb6\xef\x59\xe0\xa5\x9e\xe7\xa5\x26\xf6\xe8\x37\xba\xf4\xa2\xe7\x1d\x6d\x4e\x55\x71\x42\x0f\x68\x23\x68\x23\x68\x63\xf7\xd0\x46\x9c\xd0\x83\x13\x7a\x00\xfd\x00\xfd\x00\xfd\x00\xfd\xda\x02\xfa\xe1\x84\x9e\x4e\x64\x61\x38\xa1\x27\x8c\x13\x7a\xd6\xc8\x6b\x39\x8d\x78\x05\xb9\x9d\xd1\x88\x73\xe4\x56\x72\xc6\x53\xca\xab\x8c\x1c\x58\x8a\x5e\x5e\xae\x7a\x20\x27\x6b\xff\x27\xff\x80\xa0\xb3\x74\xce\x08\x08\x72\x21\x1b\x66\x78\x90\x57\x25\x5d\x4e\xde\x7e\xcf\x4b\x3c\x28\x47\xcc\x3e\x80\xdb\x13\x68\x8c\xf2\x6b\xd6\x05\x69\x70\x02\x71\x27\xf9\x19\xf2\x2a\x87\x1e\xde\x0c\x39\x15\x50\xa7\x42\x1e\xcf\x4f\x1e\xef\x93\x11\xf2\x6a\x3e\xa9\x16\xc8\x6d\x6c\x52\x9d\x21\xc1\xb5\x3f\x79\x1d\x97\xb8\x7c\x25\xb9\xc3\x96\xb8\x0c\xf4\x01\xaf\xe7\xd2\xe4\xaf\x22\xaf\x10\xa4\xc9\x03\x7d\x42\xb3\xa7\x80\xb7\x7e\x4d\x48\xfc\xbc\x17\xf9\x4c\xba\x1f\x16\xee\xb9\x3e\x1c\xe1\xd7\xbb\xad\x0f\x56\x09\xad\x5a\x29\xc0\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xc1\x2a\xdb\x8f\x55\xb6\xf3\x69\xe2\xad\x27\x12\xeb\x97\x5a\x13\xf8\x69\x04\x3f\xda\x41\x26\x9b\x89\x4c\x33\x33\x8b\x1f\xd8\x41\x1f\xd9\xe4\x81\x69\x06\xdd\xce\x06\xf7\x8e\x4a\xd3\xaf\x5e\x47\x84\xdb\xa5\x87\x87\xaf\x86\x0a\x4e\x9b\x3c\x0f\xab\xf5\x53\x3c\xfa\x3f\xb7\x78\x8c\xe6\x61\x8f\xc3\xc7\x3d\x07\xf4\x5e\xe3\x06\x6c\x4b\x74\xed\xb6\xc4\x97\x7b\x36\xf6\xb6\x44\x93\x47\x72\xad\xc3\x9e\xc1\x13\xd7\x78\xed\x23\xda\xe7\xa1\x7b\xef\x23\x7a\xef\x13\xb4\x68\xc2\xe2\xc0\x74\x1c\x98\x8e\x03\xd3\x71\x60\x3a\x0e\x4c\xc7\x81\xe9\x38\x30\xdd\xfd\xc0\xf4\xd6\x5b\x15\xa9\x8f\x7b\x39\x05\x87\xfc\xce\x55\xf7\xb4\x35\x46\xd8\x91\x8a\xeb\x63\x6a\xe0\x80\xd0\x8e\x33\x61\xd6\xd9\x8f\xf7\x3d\x39\x74\x1d\x60\xdd\x49\x32\x45\x53\xb1\x13\x96\xa2\xc0\x40\x99\x0e\x81\x57\x41\x95\xca\x04\x81\xb3\xb7\x4f\x5f\x4d\xe6\x02\x60\x6f\xc3\x72\xb1\xa8\x16\x2e\xcb\x39\xfa\xbd\x97\x44\x3f\xe6\x05\xe1\xc6\x4d\x6c\x61\x5e\xed\x72\x54\xb1\xe7\x22\x35\xde\x00\xc2\x98\x30\x9e\xb3\xa1\x50\x06\x3c\xf5\x96\x4f\x4f\xac\xe8\x3e\x2b\x7a\xdb\xae\x5f\xdf\xbc\x96\xcc\x06\xb1\x7e\xf1\xa3\xd3\xe9\x7b\xaf\xa5\xcf\x5d\xe5\xb1\x7a\x1d\x60\x5b\x08\x9e\x67\xac\x7b\x2e\x5c\x07\xea\xdd\x4c\x08\xfa\x0c\x76\xa6\xf6\x09\xb6\x5e\xce\xd6\xff\xc2\xcb\x8c\x3e\x6c\x7e\xa4\xea\xef\xe9\xc3\x0d\x7c\xa2\xc2\xe8\x6c\xb0\x76\xb0\xf6\xee\xfa\x82\xa7\x3e\xeb\x35\x9d\x53\x15\x5e\x71\xfd\xf3\xfa\x60\xdd\xfe\x71\xd0\xb3\x1a\x5e\x72\xe7\x2d\x12\xf0\x92\x37\x8c\x97\xfc\xd9\x7e\x92\xf2\xb7\x32\xb9\x0c\x7e\x15\x05\xa5\x1f\xf7\xd1\xb7\x78\xf9\xc6\xf7\xf4\xd4\x78\xbc\xa2\x57\x33\x04\x74\xe0\xe2\xfe\x2b\xf5\xae\x75\x38\x7f\xb1\x89\xf3\x17\xd7\x61\x96\x21\xeb\x0b\x59\x5f\xc8\xfa\x42\xd6\x57\xd7\x64\x7d\x41\x0f\x1f\x7a\xf8\x48\x37\x43\xba\x19\xd2\xcd\x90\x6e\xd6\xdd\xe9\x66\xd0\x9d\x47\xfe\x1a\x74\xe7\xd7\x49\x77\xfe\x7f\x0d\x90\x99\xe6\x21\x92\x99\xec\xf4\x7c\x3f\xfd\x7f\xbc\x58\xd2\x9f\xd6\x74\x9a\x62\xa8\x20\xa9\xd9\xf3\x15\x47\xea\xc6\x50\x40\x50\x0d\x1c\xb7\x08\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x04\xfc\x14\x12\x7e\x6a\xd7\x00\x0f\x60\x2c\x60\x2c\x60\xac\xda\x30\xd6\xdf\x44\xc8\x56\x8e\xb1\x94\x37\x96\x94\xbc\xc6\xc0\x05\x7d\x28\x42\x3f\x17\x21\xc4\xfe\x53\xd5\x33\x13\x5f\xb6\xac\x94\xa6\xad\x4b\x71\x62\xa2\x70\x4c\xdf\x8f\x23\xe4\xe5\x15\xcd\x6b\x1d\x94\xf8\xb5\x08\xfd\x6a\x84\x50\xfb\x27\xff\x63\x12\xa5\xb2\xb6\xc6\x21\x89\x55\x5b\xff\x97\xfb\x48\x9f\x67\xeb\x67\x64\x65\x45\x77\x04\x4a\x1a\xfd\x41\x8c\x3e\x7f\x95\x6b\x3f\xc4\xab\x9f\x84\x38\xc5\xca\x58\x50\x4a\x89\xa4\x7e\x61\x45\xc7\x58\xbf\x9f\x2c\xa8\x13\xb9\x9c\x25\xd3\x14\x5c\x2f\x85\x84\x37\xeb\x53\x67\x4b\xda\x2d\x67\xc5\xb2\x5a\xaf\x1e\xc8\xb9\x11\xaf\xf4\x27\x9b\xfb\xe9\x5e\x83\x6c\xda\xb5\x31\x80\xa6\x55\x17\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\xcc\xae\x05\x98\x00\x8f\x00\x8f\x00\x8f\xeb\x03\x1e\xef\xeb\x23\xfd\xde\x6c\x46\x29\xe6\x0a\x6b\xfa\x97\x4e\xa3\xff\x12\xa3\x2f\xb8\xc3\x99\x9d\x3e\x70\xc6\x2a\x24\x31\xec\x4e\x67\xac\x0b\x36\x1a\x9e\xb9\x48\x6e\xe5\x78\xe6\x24\x99\x62\x78\xe6\x18\x39\x42\xc6\xea\xc2\x33\xd6\xbb\x07\xc2\x67\x5e\xe5\xcf\x67\x0e\xd0\x7d\x9e\x7c\xc6\xaa\x0c\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x4d\x4b\x01\xcd\x7f\xed\x23\x31\x4f\x40\xc3\x52\x18\x35\x4d\xd1\xe8\x77\x63\xf4\x1f\xdc\xf1\xcc\x40\x75\x3c\x33\xc3\x8b\x48\x0c\xba\xb2\x19\xe3\xd7\x8d\x06\x66\x14\x32\xcb\xc1\xcc\x24\x99\x60\x60\x66\x9c\x1c\x26\x07\xeb\x01\x33\xc6\x8b\x07\x42\x65\xee\xf0\xa7\x32\x7b\xe9\x88\x17\x95\x31\x6a\x02\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\xd3\x52\x24\xf3\x7f\xcf\x91\x31\x4f\x24\x93\xb7\x20\x09\x17\x95\x62\xff\xbe\x4b\x4c\x73\xfa\xf3\x33\xf4\xbe\x5b\x9a\x4b\x73\xda\xe9\x0a\x6b\x2c\x3e\x93\xb1\xae\x6c\x73\x50\x93\x02\xc2\x00\xc2\x00\xc2\x00\xc2\xe8\x1a\x84\x91\x6a\x1b\x84\x11\x78\x4d\x1a\x26\x09\x29\x90\x04\x90\x04\x90\x04\x90\x04\x90\x84\xd6\x93\x84\x14\x1c\xff\x0e\x74\xfc\x53\xed\xee\xf8\xa7\x36\xa0\xe3\xdf\x3d\x72\x1c\xb1\x5f\xdc\xe2\x0a\x28\x28\xff\x1a\x48\xb2\xc0\x22\x12\xfc\x6f\x2d\xa5\x11\x1c\x1e\xb0\xa3\xfd\x1c\x87\x2b\x1e\x24\xfb\x1b\xea\x0f\x9c\xac\xe8\x77\xb2\xe2\xdd\x11\x72\x9a\x8f\xfe\x09\x72\x9c\x8d\xfe\xc3\xa4\xd1\xd6\xe6\x79\x53\x23\x2c\x6f\xca\x3a\x6c\xb5\x89\xe2\x98\x9e\xd4\x28\xd3\x93\x7a\xc9\x44\x3a\xad\x14\x9b\x2c\xaf\xf1\x89\x59\x2c\x84\x3a\x31\x13\x7f\x23\xb9\x4e\xcc\xed\xdc\x20\x93\xd2\x85\x9c\xee\x5e\x19\x6b\xb6\x3d\x49\xf7\xf1\xdf\x2b\x26\xe9\xa4\x75\x7d\xf8\xd3\x15\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x0f\xac\x6f\xa3\xb3\xbe\x2a\x6a\xc9\x0b\x25\xb9\xb4\xaa\xf9\x22\x85\x84\x3b\x52\xd8\x46\xb7\xf2\xf5\xd7\xf6\xec\xc3\x94\xe1\x5d\xb7\xb0\xf6\xd7\x93\xd7\xd2\xd7\xc4\x5e\x6d\x1d\x62\x30\x66\xac\x89\xec\x2c\x03\xbd\x47\xf5\x16\x93\xb4\x74\xa1\xa8\x0c\x4a\xda\x6a\x9a\x4d\x0f\x36\xb8\x15\x79\x85\x8f\x8f\xa2\x5a\x60\x6b\x70\xec\x6a\x2b\xee\x2a\xcc\xe3\x0d\xe8\x87\x07\xc8\x44\xe3\x61\x60\xe6\x91\x83\x5f\xeb\xa7\x3f\xbb\xc9\x95\xe9\xdc\xc8\x16\xa6\x72\xff\x5e\x08\x01\xd3\x7f\x5d\x07\xe8\xfa\x66\x72\x17\x7d\x53\x74\xcd\x6c\xc6\x3b\x17\xb8\xc5\xc8\xac\xce\x37\x32\xeb\x6d\x51\xff\x97\x9c\x2e\x25\x25\x69\x5a\xff\xaf\xf9\xf7\x15\x39\x9b\x2f\xc9\xd9\xbc\x26\xa5\x73\xab\x5a\x49\x51\x87\x8c\xf7\x4a\x1b\x8e\x8d\x94\xcb\x5e\x52\xa4\xb8\xf5\x0e\xf1\x64\x6c\x13\x2b\x49\x1c\x29\xa9\x12\x51\x69\x31\x9a\x37\x2b\x70\x9b\x55\x01\x0b\xf9\x2c\x9a\x55\x51\x32\xac\x0e\xec\xe9\x7a\xbf\x15\x35\xf3\x49\x86\xb9\xb0\xaa\xe9\x56\x80\x9c\xe7\x46\x1b\x5f\x1d\x92\xb1\xcd\xfc\xee\xb2\xf1\x99\x0e\x10\x7e\xfa\x2d\x05\x37\xb9\x2f\x05\x9b\x69\xef\xb2\x12\x26\x5c\x8c\x3e\xb1\xd9\x75\x20\xde\xac\x2a\xc5\x9c\x9c\x56\x3c\xc7\xe2\x6e\xe3\x02\xec\x01\x74\xf8\x1e\xc0\xc7\x7b\xda\x77\x0f\xa0\xf1\x59\x55\x5c\x0d\x15\xd9\x7f\xe8\x1a\xf7\xbd\x34\x03\xd9\x97\xed\xa5\x79\x60\xfa\xf0\xe7\xd1\x05\x72\x9e\xcc\x8b\xf3\x28\x91\x22\x27\x1a\xb0\x76\xa6\xd8\x0b\x9c\x63\x20\x5f\xc3\x84\xf2\x99\x50\xa9\xe7\x22\xe4\xd9\x08\x7d\x26\x12\x7d\xda\x6a\xa0\x07\x22\x17\x44\x73\x3c\x9b\x97\x34\x6e\x52\x4b\x8b\xca\x52\x81\x3b\xa3\xa6\xc7\x68\xef\x94\x18\x4e\x3a\xab\xe2\xaa\xc2\xd9\xf7\xa2\x6e\x00\xe7\x87\xf2\xca\xb2\xcc\x1a\xc2\xb0\xc8\x75\xdb\xdf\xdc\x20\xe0\xec\xc8\xea\x02\x63\x48\x66\x57\x56\x94\x4c\x56\x2e\x29\xb9\x35\x03\xb8\x8b\xdb\x29\xf9\x6c\x6e\xd0\x30\xd4\x99\x43\x27\x2d\xab\xfa\xc7\xa1\xa8\xa8\xd9\x42\xc6\x72\x38\xec\xef\x44\x69\xad\x68\x03\x8b\x55\x4d\xaf\xa4\xe8\x0a\xca\xfa\x9d\xe6\x0b\x19\x0f\x59\x12\x3e\xc8\x59\xfd\x06\x56\xcf\x15\x45\xce\xbb\xd6\x31\x46\x59\x15\xe6\x59\x0d\xdc\x1c\x90\xc7\x23\xe4\xd1\x08\x7d\x24\x12\x7d\xd8\x6a\xe6\x0f\x45\xa6\x84\x03\x99\x8b\xba\xef\xa5\x58\xc8\x6b\x5e\x2d\x14\xe5\x65\xd6\x01\xf3\x85\x5c\x36\xbd\x36\xc8\xdb\x80\x43\x1e\xf3\x5d\xec\x13\x9d\xf5\x5e\x1a\x49\x1e\x4c\x4a\x82\x35\x94\x51\x8a\x4a\x3e\xa3\xbb\xf1\x16\x3d\x55\xa4\x82\x5a\xbc\x28\xeb\xde\xb9\x64\x58\xd6\xc3\x4b\x72\xce\xdc\x6d\x88\xf1\x5f\x63\xd2\x52\x36\xcf\x4c\x64\xd5\x7a\x94\x9c\xc9\x30\x1a\x32\xcc\x1d\x9b\x8c\xed\x38\xf3\xc2\xe3\x9a\x7d\x13\xe7\xfb\x49\x69\x3a\xcb\x86\xb3\x50\xf1\x82\x5a\xf9\x66\x0c\x76\xf1\xad\x36\xbe\xbd\xc0\x26\x5b\xa1\x74\x31\x19\xbb\x86\xd7\x67\xca\x7c\x11\xad\xcc\x0e\xbb\xb7\x97\xdc\xd3\x4b\xef\xee\x8d\xbe\x68\xb1\x84\xa7\xae\x7a\x85\xc1\xff\xf4\x29\x75\xb1\x70\x45\x5a\x96\xd5\x45\xdd\xe7\x16\xf6\x25\xad\x79\xa1\xa8\x4b\x05\x75\x45\x6f\x0b\xd7\x9a\x9e\x73\x3c\xdc\xbb\xa2\x6c\x3c\x9b\x83\xb1\xc8\xdf\x2a\xab\x0f\x94\x74\x36\x63\x83\x7c\xc6\x84\xd9\xb6\x8a\xd5\xba\x1a\x3b\x4c\x89\xfd\x6a\x52\xdf\xa4\xd0\x8c\x26\x2f\x34\xbd\x1c\xdb\x5e\x2d\x7f\x58\x52\xe2\x7b\xce\x8c\x41\x8a\x8b\x43\x9c\xbf\x43\x5c\x1a\x32\x3a\xbe\x7c\x60\x68\xe3\x52\x3c\x25\xa7\x2f\xe9\x1f\x95\x7c\x46\xbf\x4a\xce\xe5\x0a\x57\xd8\x45\x8e\x86\xe3\x90\xde\x18\xfa\xe5\x85\x98\x6f\xb0\x68\x95\x34\x2e\xc5\x4f\x16\x54\x45\x28\x56\x4a\xcb\x5a\x5a\xce\xe8\x6f\x6f\xb4\x0f\x5b\x6c\x79\x79\x1a\x5f\xbd\x2a\x0a\x5c\xb2\xca\x48\xc6\xb6\x16\x9d\xe3\x46\x34\x0b\x1e\xec\x09\xd8\x59\x3e\xcf\xf7\xf3\x75\xe3\xce\xde\xcf\x0f\xd9\x01\x97\xdc\xed\x83\xab\xe9\x16\xde\x4c\x21\x9a\x08\xa9\xbf\x77\x37\xbc\x77\xda\x5e\x37\x87\x1b\x9e\x16\xf8\xae\x22\x3b\xbf\xbc\xa5\x76\xc3\x0d\xce\x82\x86\x58\x25\x76\xb3\x33\xaa\x6e\x14\x7f\x5c\x51\xd4\x65\x45\xfc\x75\x87\xf8\xab\x56\x52\xe5\x92\xb2\x9c\x4d\x0f\x39\xaf\x4b\x9d\x25\x73\x64\xd6\x61\xdd\x8f\x91\x43\x0d\x0c\x82\x79\xbd\x50\xd8\x23\x7e\x06\x7e\x2b\xdd\x5c\xef\x73\xf4\x8b\xfc\x1c\xfd\xf0\x30\xd7\x01\xb2\x8f\x8e\xc6\xf6\x58\xb4\xe9\x65\xe2\x91\x99\xd6\x8d\x95\x47\x64\x6e\x40\x4a\xf5\xa7\xdb\xc8\xe9\xa6\x29\xd5\xb0\xc6\xd6\x50\xfa\x43\x4a\x7f\xcd\x5d\x65\x6a\x07\x83\x55\xfc\x32\xb3\x21\xdd\x16\xaa\x64\xad\xd8\x8a\xaf\xda\xc1\x7a\x39\xdd\x41\x71\xbe\xe9\xfe\x31\xd9\x65\x52\x1c\xff\x4e\x1a\xa9\x83\xe7\x84\xd1\x4f\xa0\x3a\xa0\x3a\x6d\x4e\x75\x52\x3f\x71\x9f\x65\xa3\x15\x26\x9b\xff\x74\x1b\xae\xd9\x78\x0b\x7a\xb2\xc1\x84\xeb\xbc\xd9\x0c\x13\xae\xd3\x4c\xb8\xff\x36\x47\xc6\xeb\x36\xe1\x84\xa3\x5b\x9e\x38\x43\x7f\xdd\x5d\x70\xa2\xf6\xa3\x5b\x76\xf9\x29\x4e\x58\x97\x42\x72\x02\x61\xe8\x08\x43\x47\x18\x3a\xc2\xd0\x11\x86\x8e\x30\x74\x84\xa1\x23\x0c\x1d\x61\xe8\x08\x43\x47\x18\x3a\xc2\xd0\x11\x86\x8e\x30\xf4\x7a\xc3\xd0\xbb\xe8\x88\xd1\xd8\x07\xdd\x45\x27\xb6\xd9\xa2\x13\x36\x8f\xd8\xed\xaf\x3a\x11\x3c\x91\xe0\x00\x61\x8e\xcc\x92\xd3\x0e\xa2\x79\x88\x1c\x68\xac\x4f\xc0\x33\xfd\x78\xe6\x3d\x11\x32\xc3\xa7\x40\x8a\x9c\x60\x53\x60\x8c\x34\xdc\xdc\x5c\x29\x62\x84\x29\x45\x58\xdb\x13\xcd\x94\x77\x8e\x47\xaa\x9c\x26\x27\x85\x48\x95\x66\x0a\x6c\x56\x7a\x22\xbc\xf9\x99\xf8\xba\xbb\xf6\xc4\xcd\xee\xda\x13\xf6\x5c\xdd\x5f\x8f\xf8\x44\x58\xb3\x16\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\x0f\xd8\xaf\xfd\xb0\x5f\x3b\xab\x4f\x84\x47\x18\x20\x3f\x51\x47\x54\xd8\x1f\x0e\x90\x54\x13\x51\x61\xa6\xfe\xc4\xf7\xfb\xe9\xcf\xb9\xeb\x4f\xdc\xe4\xa6\x3f\x21\x44\x84\xf9\x45\xf2\x87\x45\x72\xba\x54\x81\x22\x13\x24\x06\x6d\x32\x79\x21\xbc\x25\x20\xfa\x15\xf7\xb8\x6a\xc9\x43\x83\xc2\x1e\x8f\x83\x35\x24\x2d\x60\x4b\xa0\x23\xb6\x04\x3e\xd1\xd3\xce\x5b\x02\x4d\xa6\x2c\x84\x08\xf0\x3f\xec\xae\x44\xb1\xcd\x56\xa2\x10\x36\xd8\xfc\xa5\x28\xc2\x9a\x4d\xd0\xa2\x80\x16\x05\xb4\x28\xa0\x45\x01\x2d\x0a\x68\x51\x40\x8b\xc2\x5d\x8b\x22\x3c\x2b\x21\xf5\x03\x8f\xfc\x61\x3f\x31\x0a\xdb\x76\x48\xf8\x26\x34\x86\x60\x3a\x20\x97\xb1\xe3\x4c\x92\xd6\xfa\xbc\xbe\xc9\x8c\x21\x82\xaf\x83\x64\x3f\xdd\x1b\x1b\xb1\xf8\xd3\x75\x65\xd9\x8c\xd6\x9d\x1d\x91\xce\xf8\x3b\x3f\x45\xce\x34\x0f\xae\x86\xd5\x42\x2e\xa7\x7f\x67\xe8\xd3\x24\xf6\x11\x77\x82\x75\xb3\x11\x39\x68\x5e\xca\xf7\x04\x84\x85\x6a\x6f\x1d\x51\x84\xe7\x8d\x42\xc2\x76\x76\xa4\x9e\xc4\x09\x72\xac\xb1\x31\x6e\xd6\x71\xf6\xdd\x91\x80\xbf\x82\xb7\x71\x27\x79\x96\x9c\xb6\x9d\xe4\x0d\xf8\x61\xf5\x8b\x9e\x93\xfd\xa7\xf8\x31\x7a\xc4\x7f\x8a\x9b\x1d\xe1\x32\xd5\xb1\xe8\xfb\x2c\xfa\xef\xef\x21\xef\xed\xa1\xef\xe9\x89\xbe\xdb\xda\xaf\x49\xcf\x2c\x49\x33\x2e\x0c\xbf\x6c\x87\x7d\x50\xf4\x46\x0d\x03\xdd\xde\xc6\x36\xb6\xa0\xd3\x85\x95\x62\x4e\x61\xb6\xb7\x55\x0e\x6b\xd8\x5a\x76\x09\x8e\x93\xa3\x74\x3c\x76\xd8\x5a\x6c\xb7\xbb\xaf\xd2\x66\xe7\x77\xc4\x6a\xfd\xab\x8d\xe8\x07\x55\xae\xd6\x5a\x5a\xce\x29\xf4\x2f\x29\x7d\x7f\x55\xfd\x20\xfd\x2a\x17\xa9\x0c\x7b\xc5\xf6\xd5\x0f\xb2\x2e\x5d\xd0\xcb\x0a\x58\x3f\xe8\x75\x64\x8a\xaf\xaa\xfa\x32\xa5\xaf\xaa\xfb\xc9\x5e\x32\x52\xcf\x5a\xcd\x6a\xd5\x2c\x7e\xbf\xe0\xbf\x4a\x8d\xd0\x61\xaf\x55\x8a\x57\xa1\x66\xf5\x67\x5b\x37\xc8\xb7\x73\x6a\xd1\x0d\x0a\xb3\x7f\x52\xa7\xc8\x34\x99\x74\x7c\x4c\x1b\xe9\x20\x58\xe6\x7e\x8b\xf4\x47\x7b\x02\x9a\x0a\x33\xdc\xb0\xd0\x0d\x7c\xcb\xb0\x68\xf9\xac\x62\xe0\x3d\x94\x59\x95\xfa\x97\x9a\x75\x82\x7c\xa7\x97\xbf\x4e\x50\x58\x93\x0b\xbe\x75\xe7\xcd\xe0\x56\x7d\xcb\x7c\xdd\xea\x50\xe6\xdd\xec\x28\xd9\x43\x93\xb1\x41\xcb\xd4\xda\x2a\xda\x6a\xec\xa6\x8e\x30\xcf\x1e\xdb\x46\x66\x82\x30\xcf\xb8\xbe\xe3\xdd\xdb\xe8\x87\xdd\xed\xb3\x78\x75\x7d\x47\x61\x91\xaa\xdd\x40\x0b\x43\xe1\xb1\x4b\xa2\x24\xbe\xeb\xfe\x55\x49\xf8\x6a\x3c\xda\x1d\x35\x5a\x97\xb1\x16\x86\xca\x23\xa2\x26\x10\x35\xd1\xfe\x51\x13\xa9\xb7\xba\xa7\x25\xef\xad\x5d\xe9\xd1\x9e\x74\x7b\xea\x30\xe1\xa0\xf5\x88\x29\x8d\xfd\x91\xee\xdb\x1f\xf9\xdf\x67\xc8\xe1\x7a\x4d\xba\x6c\x7e\x59\xd5\x47\x89\x46\x3f\x7a\x86\xfe\xa2\xbb\xd8\xe3\x40\x75\xb1\xc7\x19\x5e\x44\x62\x87\x8f\xd2\xa3\x71\x1d\x64\x1e\x91\xef\x8d\x7c\x6f\xe4\x7b\x23\xdf\x1b\xf9\xde\xc8\xf7\x46\xbe\x37\xf2\xbd\x91\xef\x8d\x7c\x6f\xe4\x7b\x23\xdf\x1b\xf9\xde\xc8\xf7\xae\x37\xdf\x5b\x21\xb3\x1c\xe4\x4c\x92\x09\x06\x72\xc6\xc9\x61\x72\xb0\x1e\x90\x63\xb8\xe5\x81\x68\x3c\xde\xe1\x0f\x72\xf6\xd2\x11\x2f\x90\x63\xd4\xc4\x45\xe0\xf1\x1d\xee\x24\x75\xab\x29\xf0\x98\xb7\x20\xc4\x4e\xdf\xc0\xcc\xa0\x31\x04\xa7\x06\x33\xe4\x14\x99\x76\x10\xcc\xfd\x64\x6f\x03\x1d\x01\x78\xe9\x07\x2f\xff\xad\x87\x9c\xe4\x83\xfe\x38\x39\xca\x06\xfd\x41\xd2\x58\x5b\x93\x33\x7c\x33\x62\x8a\xa4\xec\xcd\x88\x86\x0b\x9b\xe3\x71\xa9\xd3\x64\x52\x88\x4b\x6d\xb8\xb4\x66\x23\x52\x43\x9a\x8b\x89\x2f\xbb\x8b\x39\xde\xe8\x2a\xe6\x68\x4e\xcb\xd1\x3a\x94\x1c\xc3\x99\xa0\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xc0\x7a\xed\x87\xf5\xda\x59\xc6\x31\x24\xb0\x00\x0d\xc7\x3a\x42\xbd\x5e\xec\x27\x27\x1a\x0e\xf5\x32\x15\x1c\xff\xb8\x9f\xfe\x7b\xaf\x2b\xcc\x89\xba\x28\x38\x5a\x61\x5e\x3e\x71\xfa\xe1\xe0\x9b\x2e\xd5\x6e\x94\x03\x23\x9d\x4d\xa6\x24\x84\x34\xe9\xa3\x9f\x77\xcf\x47\xb8\xc9\x5d\xb5\xd1\x1c\x83\xbb\xfc\x53\x10\x80\xf9\x37\x3a\xe6\xbf\xbf\x4d\x31\x7f\x93\x09\x07\x61\x71\xf9\x0f\xb8\x6b\x34\x6e\x35\x35\x1a\x85\x3d\x32\x5f\x85\xc6\x70\x26\x0f\xe4\x19\x21\xcf\x08\x79\x46\xc8\x33\x42\x9e\x11\xf2\x8c\x90\x67\x74\x97\x67\x0c\xc9\x3a\x48\x7d\xcb\xdd\xce\xde\xe1\xa3\xcd\x68\x9a\x0c\x71\xbf\xf4\xc3\xc0\x2d\x06\x64\x1d\x76\x9c\x25\xd2\x42\x6f\xd6\x37\xe5\x30\x2c\x88\xb5\x8f\x8c\xd2\x3d\xb1\xa4\xc5\x92\xb6\x89\xf9\x86\xc6\x6d\x1d\x91\x6c\xf8\xdf\xb7\x91\x53\xcd\x12\x28\x53\x3d\xe2\x49\x4f\x75\xaf\xfe\xaa\xea\x11\xe6\xea\x34\x58\x1b\x92\x0a\x45\x37\xa2\xe3\x09\xcd\x53\xee\x5f\x8e\xb8\x9f\x62\x84\xd9\x39\xc3\x35\xb3\x9a\x50\xb4\x22\x40\x6c\x40\x6c\xda\x93\xd8\x78\x29\x7c\xed\xa9\x59\x1f\xc2\x9c\x62\x43\x35\x5a\x67\x50\x86\xc0\x1c\x86\x8d\xd6\x3d\x36\xda\x9f\xcd\x91\xe3\xf5\xda\x68\x79\xa5\x74\xa5\xa0\x5e\x62\x2e\x7c\x56\xd1\xe8\x4f\xce\xd0\xfb\xdd\x65\x21\x76\x57\x97\x85\x38\xcb\x0b\xe2\x9e\x7c\x62\xd0\x47\x1c\xa2\xec\x6a\x48\x44\x20\x96\x1c\xb1\xe4\x88\x25\x47\x2c\x39\x62\xc9\x11\x4b\x8e\x58\x72\xc4\x92\x23\x96\x1c\xb1\xe4\x88\x25\x47\x2c\x39\x62\xc9\x11\x4b\x5e\x6f\x2c\xf9\x25\x32\xcf\x89\xce\x0c\x39\xc5\x88\xce\x04\x39\x4e\x8e\xd6\x43\x74\xca\x9c\xf3\x40\x84\x22\x5e\xe3\x8f\x76\x0e\xd3\x83\x5e\x68\xa7\xac\x3e\x2e\x72\x11\x1f\x77\x97\x8b\xb8\xce\x94\x8b\x70\xb0\x89\xa4\xaf\x66\x44\x38\x74\x82\xc3\x84\x73\xe4\x56\x72\xc6\x41\x38\xab\x04\x21\xf8\xf6\x0f\x10\xa7\x1f\xe2\xac\xf3\x8c\x33\xdf\x16\xaf\xff\x8c\x33\xff\x22\xeb\x8f\x4e\xf1\x2f\xb3\x59\x45\x89\x50\x27\x6d\xe2\x7f\xbb\xeb\x4a\xc4\x5c\x75\x25\xca\x27\xf0\xa1\x3a\xd4\x25\xc2\x9c\xca\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xe0\x82\xed\xc7\x05\xdb\x59\x63\x22\x54\xd4\x00\xa5\x89\x3a\x62\xc8\xfe\x71\x80\x9c\x6c\x32\x86\xcc\xd4\x9b\xf8\xcd\x01\xfa\x8b\x9b\x5c\x21\x8f\xe4\xa2\x37\xe1\x88\x1f\xf3\x09\xf1\x0f\x13\xeb\x74\xa9\xf6\x44\x7d\xeb\x43\xf3\xf8\xd1\x27\xbf\x21\xd4\x25\x21\xfa\x77\xee\xb1\xd8\x7d\xee\x3a\x14\xe5\x63\xb3\x86\x0c\x07\x6c\x20\x74\xd2\x06\xc2\x1f\xd7\x97\x8b\xba\x2e\x1b\x08\x4d\xe6\x3c\x84\xcb\xfa\x7f\xd7\x5d\xab\xe2\x3a\x53\xab\xc2\xb9\x41\xe7\x2b\x58\x11\xe6\xfc\x82\x6c\x05\x64\x2b\x20\x5b\x01\xd9\x0a\xc8\x56\x40\xb6\x02\xb2\x15\xee\xb2\x15\xa1\x9a\x0b\xa9\x9f\xb8\x1b\xe7\x83\x3e\xe2\x15\xe5\x46\x84\x6f\x92\x64\x48\x36\x04\x92\x24\x3b\xce\x36\x69\xb9\x6b\xec\x9b\x2a\x19\x2e\x2f\x1b\x23\x87\xe8\x81\xd8\x3e\x0b\x5b\xbd\x5c\x4c\x98\x2c\xbb\xb9\x23\xd2\x26\xff\xdb\x1c\x19\xaf\x17\x79\xa9\x0a\x9b\xa9\x9a\x52\xd2\xe8\x13\x67\xe8\xaf\xbb\xa7\x4c\xee\xac\x9e\x32\x79\x9e\x17\xb2\xa0\x94\x12\xbb\x7c\xf2\x25\xed\x4b\x91\x2c\x89\xa0\x28\x04\x45\x21\x28\x0a\x41\x51\x08\x8a\x42\x50\x14\x82\xa2\x10\x14\x85\xa0\x28\x04\x45\x21\x28\x0a\x41\x51\x08\x8a\x42\x50\x54\xbd\x41\x51\x17\xc9\xad\x9c\xec\x9c\x24\x53\x8c\xec\x1c\x23\x47\xc8\x58\x3d\x64\xc7\xf6\xcc\x03\xc9\x94\x7c\x95\x3f\xd9\x39\x40\xf7\x79\x91\x1d\xbb\x32\x2e\x69\x92\x1f\x74\x4f\x93\xdc\x66\xa5\x49\x0a\x3c\x62\xb7\x6f\x8e\x64\x08\x44\x82\x03\x84\x39\x32\x4b\x4e\x3b\xe8\xe6\x21\x72\xa0\xb1\x3e\x01\xdb\xf4\x63\x9b\xf7\x44\xc8\x0c\x9f\x02\x29\x72\x82\x4d\x81\x31\xd2\x70\x73\x93\xb3\x3c\xb2\xe1\x14\x99\xb6\x23\x1b\x9a\x29\xef\x1c\xdf\xfe\x38\x4d\x4e\x0a\xdb\x1f\xcd\x14\xd8\x6c\x52\x64\x78\xf3\x33\xf1\x75\xf7\x8c\xc8\x9b\x5d\x33\x22\x85\xb9\xba\xbf\x8e\x74\xc8\xd0\x66\x2d\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x1f\xb0\x5f\xfb\x61\xbf\x76\xce\x85\x0c\x8f\x30\x20\x11\xb2\x8e\xa8\xb0\x3f\x1c\x20\xa9\x26\xa2\xc2\xcc\x24\xc8\xef\xf7\xd3\x9f\x73\x4f\x82\xbc\xc9\x25\x09\x52\x8c\x08\xf3\xc9\x80\x0c\x8d\xe4\x74\x69\xfa\x63\x26\x48\x0c\xda\x64\xee\x63\x78\x4b\x40\xf4\x2b\xee\xb1\xd5\x92\x7b\xe2\xa3\x30\x1e\x07\xfd\xb3\x1e\xb1\x25\xd0\x19\x5b\x02\x9f\xe8\x69\xe7\x2d\x81\x26\x33\x1d\x43\x04\xf8\x1f\x76\x4f\x73\xdc\x66\xa5\x39\x8a\x1b\x6c\xbe\x39\x8e\xa1\xcd\x26\x24\x38\x22\xc1\x11\x09\x8e\x48\x70\x44\x82\x23\x12\x1c\x91\xe0\xe8\x9e\xe0\x18\x9e\x95\x90\xfa\x81\xbb\x05\xbe\xcb\x27\xbb\x51\xb0\x1d\x12\x7e\xa9\x8d\x61\x98\x0e\xc8\x6b\xec\x38\x93\xa4\xb5\x3e\xaf\x6f\x52\x63\x88\xe0\xeb\x20\xd9\x4f\xf7\xc6\x46\x2c\xfe\x74\x9d\x98\xd1\x68\xdf\xd9\x11\xe9\x8c\xbf\xba\x8d\x9c\x6e\x1e\x5c\x0d\x6b\x69\x39\xa7\xd0\xbf\xf4\x3c\xaa\x7b\x07\x3f\xaa\x5b\xbf\xaa\xf2\xa4\x5a\x61\xb1\x4a\xd6\xcc\xb1\x16\xf4\xb2\x02\x3e\xae\xfb\x75\x64\x8a\x8f\x70\xfd\x8b\xa2\x8f\xf0\xfd\x64\x2f\x19\xa9\x67\x84\xb3\x5a\x35\x0b\x74\x2e\xf8\x0f\xed\x11\x3a\xec\x35\xb4\x79\x15\x2a\x59\xce\x13\x1e\x5f\x12\xeb\xa8\x6e\xdf\xce\x19\xa9\x07\xea\x84\xd0\x3f\xa9\x53\x64\x9a\x4c\x3a\x96\xfc\x46\x3a\x08\x6b\xbd\xdf\x5a\xff\xd1\x9e\x80\xa6\xc2\x0c\xe7\x39\xfa\x27\xc3\xe2\x39\x2d\x9f\x55\x0c\xe5\x84\x32\xab\xbc\x8e\xe9\x1e\xad\x3c\xa6\xdb\x77\x7a\x0d\xd7\x6e\xa8\x05\x3c\xb9\x60\xad\x75\xde\x0c\x6e\xd5\xb7\xcc\xd7\x50\x0b\x65\xde\xcd\x8e\x92\x3d\x34\x19\x1b\xb4\x4c\xad\xad\xa2\x8d\xc6\x6e\xea\x08\xf3\xec\xb1\x6d\x64\x26\x08\xf3\x8c\x79\xba\xf4\xee\x6d\xf4\xc3\xee\xf6\x59\x9c\xdb\x67\xec\xb2\xea\x8b\x54\xed\x06\x1a\x2b\x2c\x60\x0b\xad\x4b\xf6\xdd\xbe\xeb\xfe\x55\x49\x58\xb6\x9a\x7f\x47\x8d\xd6\x65\xac\x85\xd0\x57\xd8\x87\xc3\x3e\xdc\x06\xd8\x87\x4b\xbd\xd5\x3d\xd1\x6d\x6f\xa5\x05\xe7\x3f\xe9\xf6\xd4\x61\xc2\x05\x3c\xe5\x60\xc3\x75\xde\x94\x06\x71\xeb\x40\xe2\xf6\xf6\x6b\xc9\x42\x83\x26\x9d\xde\x21\xe9\x42\xbe\xa4\x16\x72\x39\x45\x75\xc0\xb7\x8f\x6d\xa3\x7f\xe4\x6e\xdc\x1d\xa8\x01\xbe\xe9\x45\x4f\x5a\x45\x4f\xad\xae\xac\xac\x25\x8e\xd5\x66\xeb\xb9\xdc\x0a\x38\x57\x27\x9c\xfb\xa1\xbb\xc1\x77\xb8\x36\x38\xe7\xd6\x79\x13\x35\xdb\x7f\xad\xe9\x3f\xc0\x3b\xc0\xbb\x76\x83\x77\xef\x73\x37\xfd\x52\x75\xc2\x3b\xb7\xe9\x77\xbc\x46\x4b\x30\xfc\xc9\x07\xc3\xb0\xf3\x66\x38\xe0\x5e\x27\x58\x82\xf7\xf7\x91\x9d\xde\x96\x60\xf9\x31\x49\xf4\xad\x7d\xf4\x67\x7b\x5d\x97\xab\xdd\xd5\x75\x63\xcb\x85\xae\x47\xdd\xa5\x63\xc5\x6b\x4e\x16\xd4\x89\x5c\xce\x5a\xa9\x82\xf3\x51\xc3\xd1\x90\x9d\xbd\x44\xe6\xf9\x64\x98\x21\xa7\xd8\x64\x98\x20\xc7\xc9\xd1\x86\xf5\x96\x03\x11\xe6\x09\x57\x72\x19\xf2\x19\x90\xcf\x80\x7c\x06\xe4\x33\xba\x46\x3e\x63\xb6\x6d\xe4\x33\xd6\x2f\x2b\xb2\x6d\x74\x3b\x66\xa1\xdb\x01\xdd\x0e\xe8\x76\x40\xb7\x03\xba\x1d\xad\xd7\xed\x08\xdc\x0b\x9d\x85\x10\x48\x07\x0a\x81\xcc\xb6\xbb\x10\xc8\xec\x06\x14\x02\xa1\xdf\x3e\x43\x06\x3d\x81\x4d\xb1\x90\xd1\x94\xf4\xaa\x9a\x2d\xad\x59\xd0\xe6\x0f\xce\xd0\x4f\xb8\x1f\xf6\x33\x5c\x1d\xda\xcc\xb3\x74\x45\x56\x98\x01\x6e\x76\xb8\x82\x9b\x8a\xeb\xda\x1c\xd6\x40\xf9\x13\xe8\x02\xe8\x02\xe8\xa2\x7b\xd0\x05\x94\x3f\xa1\xfc\x09\x82\x00\x82\x00\x82\x00\x82\xd0\x16\x04\x01\xca\x9f\x9d\xe8\xf0\x43\xf9\x33\x0c\xe5\xcf\x02\xb9\xc0\x43\x0b\x6e\x25\x67\x58\x68\xc1\x34\x99\x24\x13\xf5\x84\x16\x54\x38\xe8\x81\x84\x17\xbc\xde\x3f\xbc\xe0\x28\x1d\xf7\x0a\x2f\xa8\xa8\x93\xcb\xf1\x3f\xff\xcb\x3d\x34\x2e\x6a\x1d\xff\x53\x49\x28\x76\x7a\x9c\x02\x14\x1e\xa3\xe0\x48\x61\x81\xdc\x46\xce\x39\xa2\xcf\xea\x0c\x00\xa9\xa8\x22\x42\xd0\xfc\x42\xd0\x7e\x25\xd2\x74\xd8\x4d\xe5\x38\xbc\x9d\x07\x9c\x9e\x25\x73\x76\xc0\x69\x00\xc5\xde\xc1\x55\x83\xce\x91\x5b\x05\xd5\xa0\x00\xca\x6d\xf6\x78\xa0\xd0\xa7\x71\xe2\x6f\xdd\x4f\x09\xda\xe1\x7a\x4a\x50\xe5\x94\x1e\xf5\x3d\x2c\x28\xec\xc9\x0d\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\x08\x5e\xd8\x7e\xbc\xb0\x9d\x4f\x0a\x0a\x1d\x36\xac\x5f\x68\x7c\xe0\x99\x79\x1f\x18\x20\x7b\xeb\x09\xf4\x32\xcf\xef\xf9\x66\x3f\xfd\x55\xf7\xf3\x7b\xfa\x5d\xce\xef\x71\x09\xf2\x72\x55\x5c\x08\x9b\xb1\x74\xe9\x19\x3e\xcd\xe7\x0d\xd6\x4f\x04\x7d\xc4\x25\x42\x9f\xa3\xd1\x1f\xb9\x0b\x4d\xc4\xdd\x4f\xf4\xa9\x1c\xa1\xbb\xbc\x64\x25\x40\xf9\x3b\x91\xf2\x7f\xb6\x67\xe3\x50\xfe\x26\x25\x26\xc2\x87\xf1\xf7\xbb\x9f\xf8\x13\xb5\x4e\xfc\x71\xd9\x53\xf3\x00\xf0\x61\xcf\x36\x9c\xfa\x83\x53\x7f\x70\xea\x0f\x4e\xfd\xc1\xa9\x3f\x38\xf5\x07\xa7\xfe\xb8\x9f\xfa\x13\xba\xc1\x90\x7a\x9b\x7b\x10\xce\x1e\x9f\xc3\x7f\x2a\xcd\x88\xb8\xbb\x1a\x55\x88\x56\x04\x54\xa7\x3a\xce\x3a\x59\x17\x87\xd9\x57\x81\x2a\x7c\xac\x75\x8c\x1c\xa1\x63\xb1\x43\x96\xb2\xd4\x4d\xa2\x1a\x55\x45\x01\x95\xca\x54\x81\xd3\xa9\xfb\xfa\x48\xbf\x27\x9d\x12\xd4\xdf\xe9\xbf\xc4\xe8\x0b\xee\x92\xa0\x3b\xab\xa7\x1f\x8a\x82\xef\xae\x79\x87\xf6\x05\x1b\x4d\x2d\xea\x22\xb9\x95\x0f\xe2\x93\x64\x8a\x0d\xe2\x63\xe4\x08\x19\x6b\x4c\x53\x37\x90\x58\xce\x10\x65\x75\x11\x3c\x85\xe0\x29\x04\x4f\x21\x78\xaa\x6b\x82\xa7\xa0\x13\x05\x9d\x28\x44\x6d\x21\x6a\x0b\x51\x5b\x88\xda\xea\xee\xa8\x2d\xe8\x44\x21\x0c\x0c\x3a\x51\xeb\xa4\x13\xf5\xe3\x3e\xb2\xcb\x13\xd0\xb0\xcb\x87\x33\xb2\xb2\xa2\x5b\x3a\x25\x8d\x7e\xa9\x8f\xfe\x95\xbb\xb2\xf7\xaa\xf1\x3d\xc9\x67\xb2\x97\xb3\x99\x55\x39\x27\xbe\xae\x6c\xd9\x6e\x53\xac\xac\x05\xa5\x94\x14\xf6\xa0\xc6\xac\x8f\x7a\x9c\x95\x12\xb7\x5d\xe5\x32\xdf\xa7\x50\x54\xac\xad\x45\xad\xa4\xc8\x99\x64\x62\xef\x15\x57\x5a\x6c\x3d\x66\x2e\xab\x6d\x38\xec\x53\x1f\xbb\xac\xc2\x8a\xd9\xd0\x9b\xd6\x8d\x2e\x5f\xf2\xd3\xe7\x4e\x7e\x5e\x4a\x09\xab\x18\xc7\x3f\xaf\xf4\xc7\x3f\xfb\xe9\x5e\x2f\xfc\x63\xf5\x09\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x0f\xe8\x4f\x4b\xe9\xcf\x8b\x7d\x24\xe1\x47\x7f\x94\x62\xae\xb0\xa6\x7f\xef\x34\xfa\x58\x1f\x7d\xd2\x1d\xff\x5c\xae\x11\xff\x58\x85\x05\xc4\x7f\xf6\x79\xf0\x1f\xeb\x39\x00\x40\x01\x02\xa0\xe6\xe2\x7f\xec\x4e\x01\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x6a\x29\x01\xfa\xe7\x6a\x07\xfb\x73\x02\x94\xcd\x2f\xab\x8a\xa6\x29\x1a\xfd\x7c\x1f\xfd\x0b\x77\xfe\xa3\xd5\xc6\x7f\x66\x78\x51\x01\xc1\x9f\x11\x77\xf8\x63\x3c\x04\xe4\x27\x40\xf2\x73\x87\x3f\xf9\xd9\x4b\x47\xbc\xc8\x8f\xd1\x23\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\xc0\x3e\x2d\xc5\x3e\xff\xd0\x4f\x4e\xf8\x60\x9f\xbc\x45\x4d\xb8\x64\x34\xfb\xf7\x5d\x62\x36\xd8\x47\xfa\xbd\x70\xd0\x3a\x65\x83\x0d\xb9\x03\x21\x8b\xff\x64\xca\xf2\xc2\x00\x83\x90\x07\x06\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\x04\x1c\xb4\x2e\x38\xe8\xf5\xe4\xb5\xf4\x35\xb1\x57\x5b\xda\xb5\x63\xc6\x93\x99\x84\xad\xde\x9c\xba\xb7\x22\x69\xe9\x42\x51\x19\x94\xb4\xd5\x34\x43\x08\xcc\x74\x56\xe4\x15\xee\x43\x17\xd5\x02\x7b\xd3\xd8\xd5\x96\xc3\x1a\xa6\xba\x2d\x80\x13\x80\x13\x80\x53\x6d\xc0\xe9\xd9\x01\x72\xaa\x59\xe0\x64\x1e\x5d\xf6\xbe\x01\xfa\x16\xf7\xa3\xcb\x7e\xbf\xc7\xe8\x13\x81\x36\xe5\xcd\x25\xcc\x54\x8c\x0e\x96\x3a\x0d\xda\x06\x0b\x33\xca\x8c\xcf\x9b\x6e\xf3\xd8\x96\x58\xbc\xcc\xea\x16\xca\x4e\x26\x76\xd5\xcc\xac\xc0\xab\xea\xd1\x5c\xbf\xc2\x35\xd7\xc1\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xaa\x9a\x63\x55\x07\xc8\x3e\x3a\x1a\xdb\x63\xb1\xaa\x97\x89\xe7\x2c\x59\x4e\x43\xe5\xf9\x4a\x60\x5c\x60\x5c\x60\x5c\x9d\xca\xb8\xfe\xa9\x9f\x4c\x34\xc8\xb8\x04\x91\xa5\xdf\xed\xa7\x7f\xd9\x5e\x22\x4b\x49\x5f\x44\x55\x26\xb7\x04\x4e\x05\x79\x25\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\xc0\x2a\x04\x56\x01\x3a\x01\x3a\x01\x3a\x05\x09\x9d\xbe\x3d\x40\x4e\x37\x0d\x9d\xcc\xc8\xaa\x5f\x1e\xa0\x6f\x73\x8f\xac\x7a\xa0\xa6\xc8\xaa\x60\xc9\x53\xb3\xa1\x55\x89\xda\xb9\x15\x98\x55\x03\xb1\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\xe0\x55\x4d\xf2\xaa\x83\x64\x3f\xdd\x1b\x1b\xb1\x78\xd5\x75\x65\xc1\x55\x96\xd7\x80\xe8\x2a\x80\x2e\x80\xae\xee\x01\x5d\xdf\xe9\x27\xc7\x1b\x03\x5d\xb6\x80\xf9\x87\xfb\xe9\x43\x6d\x24\x60\xbe\xdb\x0f\x50\x09\x52\xe6\x20\x54\x90\x2e\x07\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x02\xa2\x42\x48\x15\x48\x13\x48\x13\x48\x53\x60\xa4\xe9\xaf\x07\xc8\xc9\x26\x49\x93\x19\x50\xf5\xae\x01\xfa\x82\x3b\x70\xba\xbf\x96\x80\xaa\x20\x71\x53\xb3\xd1\x54\xf1\x1a\x61\x15\x40\x55\x03\xa1\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\x80\x54\xcd\x40\xaa\x7d\x64\x94\xee\x89\x25\x2d\x48\xb5\x4d\x8c\xa3\x32\x5c\x06\x04\x51\x01\x6d\x01\x6d\x75\x0f\xda\x7a\xb1\x9f\x4c\x37\x86\xb6\xf2\x4a\xe9\x4a\x41\xbd\x54\x2c\xe4\xb2\xe9\xac\xa2\xd1\x3f\xe8\xa7\x7f\xed\x4e\xb6\xd6\x6a\x0b\xa5\x3a\xcb\x0b\x9c\xd7\x0b\x5c\x0b\x28\xa0\x6a\xc4\x8f\x51\x95\x3d\x14\x61\x55\x4d\x84\x55\xbd\xc6\x9f\x58\x1d\xa6\x07\xbd\x88\x55\x59\x3f\x80\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x81\x5b\x75\x2d\xb7\x02\x81\x02\x81\x02\x81\xea\x54\x02\xf5\xfc\x00\x99\x0b\x84\x40\x99\x21\x56\xbf\x39\x40\xff\x8b\xbb\x66\xd5\x27\x6a\x09\xb1\x0a\x1e\x43\x35\x1b\x68\x35\x54\x17\xc4\x02\xc0\x6a\x20\xdc\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\x0a\xf0\xaa\x79\x78\x35\x46\x0e\xd1\x03\xb1\x7d\x16\xbc\x7a\xb9\x18\x74\x55\xe6\x38\x20\xf4\x0a\xe0\x0b\xe0\xab\x7b\xc0\x57\xe3\xa7\x03\xaa\x0a\x03\x2f\x9a\x12\xc4\xe9\x80\xe7\x79\x61\x0b\x4a\xcb\x4e\x07\xb4\x9f\x88\x80\xab\x75\x3b\x1d\xd0\xee\x04\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\xab\xae\x05\x56\x80\x4e\x80\x4e\x80\x4e\x9d\x0a\x9d\x1a\x3f\x1d\x50\x80\x4e\x01\x9d\x0e\x18\x30\x79\x0a\xfd\x74\x40\xbb\xbe\x60\x56\x2d\x3f\x1d\x10\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\x0a\xbc\xaa\xfa\xe9\x80\xb6\xd7\x80\xe8\x2a\x80\x2e\x80\xae\xee\x01\x5d\xff\xa5\x9f\x24\xfd\x40\x97\x43\xc1\xea\x2b\x7d\xf4\x99\xb6\x53\xb0\x3a\xe8\x41\xa5\x9c\xba\x55\x27\x0b\xea\x44\x2e\x67\xc1\x2a\xa8\xae\x43\xc7\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x0a\xa4\x6a\xfd\x48\x15\x70\x10\x70\x10\x70\xd0\xba\xe1\xa0\x51\x1f\x1c\x54\x2c\x64\x34\x25\xbd\xaa\x66\x4b\x6b\x16\x12\x7a\xb2\x8f\x7e\xd5\x1d\x09\xdd\x55\x1b\x12\x9a\x2f\x64\x16\x8c\x42\x03\xc5\x42\xbb\xdd\xb1\x50\xc5\xe3\x90\x61\xd7\x04\x0a\x7a\xbd\x3f\x0a\x3a\x4a\xc7\xbd\x50\x50\x45\x5f\x00\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\xb5\x14\x07\xbd\x7d\x80\x1c\xae\x1f\x07\x99\x79\x6f\x5f\xe8\xa7\xef\x76\xcf\x7b\xfb\x64\x2d\x79\x6f\xe1\x30\xa1\x66\xd3\xdf\xe2\x35\x12\x25\xd0\xa4\x06\x72\xdf\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x40\x92\x82\x21\x49\xc7\xc8\x11\x3a\x16\x3b\x64\x65\xb2\xdd\x24\xa6\xc0\x55\x38\x0f\x95\x99\x70\x20\x51\x20\x51\x20\x51\xeb\x43\xa2\x5e\xec\x23\x09\x1f\x12\x25\xca\x7d\x3f\xd6\x47\x9f\x6c\x2f\xb9\xef\x7d\xee\xdc\xa8\x5c\xe4\x1b\xd9\x69\x10\xfd\x06\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x6a\x0f\x82\x04\x02\x04\x02\x04\x02\xb4\x3e\x04\xe8\x9b\x11\xf2\xd3\x9c\x00\x19\x82\x44\xba\xa1\x74\xe9\x90\x96\xcc\x16\x86\xe9\x43\x11\xfa\xb9\x08\x21\xf6\x2f\xd1\xe8\xb2\x52\x92\xb2\xf9\xa5\x82\xba\x62\x35\xa3\x2c\x31\x8f\x3f\xf1\xb2\x65\xa5\x74\xd6\xba\x74\x62\x7e\xe6\x94\xfe\xe7\xc0\x60\xcb\x58\x45\x41\x63\x15\x05\x8d\xd5\x52\xd0\x6c\x96\x9c\xe5\x7c\xe5\x14\x99\x66\x7c\xe5\x38\x39\x4a\xc6\x1b\xe0\x2b\xe6\x3b\xfa\xd1\x15\xfa\xc3\x08\xb9\xc1\xab\x95\x2f\x8f\x0c\xd3\x27\x22\xf4\xb1\x08\xf9\x0f\xf6\x8f\xaf\xbb\x3c\x12\xbd\x5e\x6f\xeb\x32\x33\x82\x8f\x92\xc4\x0d\x65\x0d\x7d\xc7\xc8\xc4\xfc\x8c\xe9\x2e\x07\xc7\xb6\x82\x6b\xee\x22\xb9\x9d\x37\xf7\x59\x32\xc7\x9a\xfb\x24\x99\x22\xa9\xc6\x9a\xdb\x7c\xcf\xb9\xac\xe6\xcb\xb4\xe8\x2f\xcc\x99\x67\x1c\xba\xb6\xba\x87\xd4\xbc\x53\x98\xeb\x2f\xce\xd0\xff\x7e\x8b\xb3\x6f\x76\x73\x67\x44\x35\xbe\x1f\xe6\x77\xd6\x0c\xb2\x2b\x13\x62\x4a\xc4\xf5\x8b\xc5\x0e\xb3\x55\xdd\xcb\x2e\x6c\x73\x2e\x99\x02\xa3\x03\xa3\x03\xa3\x03\xa3\xeb\x1a\x46\x97\x6a\x1b\x46\x17\x78\x4d\x1a\x46\x65\x29\xa0\x32\xa0\x32\xa0\x32\xa0\x32\xa0\xb2\xd6\xa3\xb2\x14\xc8\x56\x07\x92\xad\x54\xbb\x93\xad\xd4\x06\x24\x5b\xb3\x4b\xe4\x0c\xc7\x0e\x53\x24\xc5\xb0\xc3\x11\x32\x46\x0e\x79\x61\x87\xa4\x80\x08\x2e\x8f\x24\x2b\x14\xae\x7d\x03\x68\xb6\xbb\x07\xd0\x6c\xa1\x9b\x78\xec\xcc\x6b\xfd\x63\x67\xc6\xe9\x61\x23\x76\xa6\x82\x57\xf8\x09\x3c\x93\xd8\x2f\x6e\x71\x32\x8a\xeb\xf8\xd7\x40\x92\x1d\x38\x62\x17\xff\x7b\x2b\x81\x04\xe7\x07\xb3\xe4\x34\x39\x49\x7b\x17\x0b\x99\xb5\x28\xfb\x5f\xa9\x27\x71\x80\xec\x6b\xa4\x4b\x52\xf7\x45\xc8\x07\x22\xf4\x97\x22\xd1\xf7\x45\xcc\x11\xf9\xaf\x3d\x6c\xb5\x31\xd6\xde\x41\x16\x8c\x96\xd6\x3d\x2c\xbe\xbe\x95\xd9\xfb\xa6\x9d\xa4\x7f\xeb\x17\x15\xa9\xa8\xb7\xa4\x6e\x64\x25\xa5\x89\xbc\x94\xcd\x73\x4f\xbb\xa0\x4a\xab\x79\xcb\x59\xcf\x48\x19\x75\xed\xfc\x6a\x5e\xca\x64\x55\x45\x9f\x35\x8a\xe5\x01\xb2\x15\x40\xff\x52\x1a\x2e\xb0\x69\xf0\x1a\x4e\x87\xb4\xb4\xaa\x32\xa3\xaa\xa8\x16\xd2\x8a\xa6\x19\x8b\xa4\x60\x1b\x26\xa5\x3b\xd8\x13\x99\xb1\xca\xbe\x41\xfa\x0a\x39\x91\xcb\x8d\xb1\x0f\x56\x46\x5d\x93\xd4\xd5\xbc\xee\x0c\xe9\xd3\xcc\xfc\x4a\x1b\xc5\x29\x99\xd8\x66\x5e\x35\x91\x96\xbf\xd8\x43\x4e\xf1\xf1\x7f\x82\x1c\x63\xe3\xff\x10\x69\xb0\xb1\xc9\x9c\x5e\xd0\x08\x9d\x26\x93\x64\xcb\x24\x37\x31\x9a\x28\xed\x56\xbd\xb4\x51\x46\x01\x5f\x32\x91\x4e\x2b\xc5\xe6\x8a\x6b\x7c\x62\x16\x0b\x2d\x98\x98\x89\xff\x4f\x72\x4e\xcc\x18\x37\xc8\xa4\x74\x21\xa7\xbb\x57\xc6\x9a\x5d\x3e\x49\xf7\xf2\x6b\xc4\x49\x3a\x69\x5d\xde\x9a\xe9\x0a\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\x07\xdc\xd7\x7e\xb8\x6f\x99\x53\x8a\x3d\x8c\x52\x44\xce\x9d\xa1\x47\xc9\x38\x39\xdc\x40\x94\xd1\x42\x49\x2e\xad\x6a\xbe\x58\x21\xe1\x8e\x15\xb6\xd1\xad\x7c\xfd\xb5\x9d\xfb\xd0\x11\xc3\xfa\x25\x70\x6c\xbc\x53\x4c\xe9\xa7\x06\xc8\xe9\xa6\x83\xc2\x4c\x2d\xb6\xef\xf5\xd3\x77\x6c\x72\xe2\x1d\x89\x2d\x50\xe5\x7e\xbe\x23\x20\x4c\xbf\xa2\xf5\xfc\xf5\xcd\xe4\x2e\xfa\xa6\xe8\x9a\xd9\x96\x77\x2e\x70\xe3\x91\x19\xa0\x6f\x64\x86\xdc\xa2\xfe\x2f\x39\x5d\x4a\x4a\xd2\xb4\xfe\x5f\xf3\xef\x2b\x72\x36\x5f\x92\xb3\x79\x4d\x4a\xe7\x56\xb5\x92\xa2\x0e\x19\xaf\x96\x36\x7c\x1c\x29\x97\xbd\xa4\x48\x71\xeb\x3d\xe2\xc9\xd8\x26\x56\x92\x38\x5c\x52\x25\xa2\xd2\x62\x34\x6f\x56\xe0\x36\xab\x02\x16\xfd\x59\x34\xab\xa2\x64\x58\x1d\xd8\xd3\xf5\xce\x2b\x6a\xe6\x93\x0c\xcb\x61\x55\xd3\x0d\x02\x39\xcf\xed\x37\xbe\x50\x24\x63\x9b\xf9\xdd\x65\x83\x74\x31\x38\x10\xea\xb7\x28\xdc\xe4\xbe\x28\x6c\xa6\xbd\xcb\x4a\xf8\xa8\x31\xfa\xff\x6e\x76\x8e\xc5\x3e\x55\x29\xe6\xe4\xb4\x52\x75\x38\x26\x8c\x8b\xb0\x23\xd0\xd1\x3b\x02\xbf\xdf\xb6\x3b\x02\x8d\x4f\xab\xe2\x6a\x0b\x08\xfe\x6f\x5c\x53\xb1\xb5\x66\x10\xfc\x8a\xad\xb5\x4a\x6a\xdf\x9a\x89\x74\x81\x9c\x27\xf3\xe2\x44\x4a\xa4\xc8\x89\x06\x8c\x9f\x29\x56\xff\x73\x8c\xeb\x6b\x98\x52\x3e\x53\x2a\xf5\x5c\x84\x3c\x1b\xa1\xcf\x44\xa2\x4f\x5b\x0d\xf4\x40\xe4\x82\x68\x9d\x67\xf3\x92\xc6\x2d\x6c\x69\x51\x59\x2a\x70\xdf\xd4\x74\x20\xed\x8d\x13\xc3\x67\x67\x55\x5c\x55\x38\x0a\x5f\xd4\xed\xe1\xfc\x50\x5e\x59\x96\x59\x43\x18\x06\xba\xee\x0a\x98\xfb\x05\x1c\x25\x59\x5d\x60\x8c\xca\xec\xca\x8a\x92\xc9\xca\x25\x25\xb7\x66\xf0\x77\x71\x77\x25\x9f\xcd\x0d\x1a\x76\x3b\xf3\xef\xa4\x65\x55\xff\x40\x14\x15\x35\x5b\xc8\x58\xfe\x87\xfd\xad\x28\xad\x15\x6d\x7e\xb1\xaa\xe9\x95\x14\x3d\x43\x59\xbf\xd3\x7c\x21\xe3\x21\x4b\xc2\x47\x39\xab\xdf\xc0\xea\xb9\xa2\xc8\x79\xd7\x3a\xc6\x28\xab\xc2\x3c\xab\x81\x9b\x3f\xf2\x78\x84\x3c\x1a\xa1\x8f\x44\xfe\x7f\xf6\xde\x3d\x4e\x8e\xab\xbc\xf3\xfe\x54\x6b\x74\x3b\xc6\xc6\x2e\x08\x8e\x07\xe3\x94\x6b\x46\x1e\xa9\x3d\xd3\xa3\x9b\x2d\x69\x64\x59\x9a\x91\x46\xb6\x46\x23\x69\x90\x64\x3b\x61\xb9\xa8\xa6\xeb\xcc\x4c\x45\x3d\x55\x4d\x55\xb5\xc6\xb3\x2c\x4b\x30\x31\x18\x08\x84\xd8\x40\x12\xb3\x01\x27\xe1\xcd\x72\x09\x37\x43\x62\x30\x10\x48\xb2\x64\x41\x10\x82\x77\xb9\x24\x10\xfc\xc2\x1b\xc3\xb2\x90\x05\x92\x85\x04\x1c\x82\xdf\xcf\xb9\xd6\xa9\xea\xea\xfb\x65\x5a\x33\x0f\x7f\xe0\x51\x77\xf5\xa9\x53\xa7\xce\xe5\x39\xdf\xe7\xf7\x3c\xa7\xff\xd3\xb2\x99\x1f\xca\x1c\x51\xf2\x87\x14\xc9\x56\x0c\x4b\x02\x36\xe3\x7b\x45\x6b\x9e\xbe\x00\x36\xda\x86\x59\x1b\x30\xe6\x23\x9e\x25\x4a\x40\x42\xde\xd2\x8e\xdc\x9e\x9c\xa1\x58\x44\x36\x2e\x62\xd7\x26\xbb\x7a\x09\x53\xb1\xe1\xf9\xc5\x05\x8b\x6c\xd6\x0d\x6e\x62\x8f\xce\x59\x05\xe1\x7c\x30\xd9\xb7\xa6\x31\xe7\xb8\xd4\x56\xf6\xe5\xad\x2c\xdb\xa6\x70\x64\x94\xed\x73\xec\x68\x1f\xcd\x0a\x1f\x0a\xa2\x1f\x31\xdc\x9f\x33\x26\x1d\xda\x9d\x95\x8a\x7b\x7e\xf9\x93\x51\xf6\xc5\x3c\x6f\xcc\xdb\x40\x07\x9b\x17\x2e\xe4\xcc\x2b\x59\x7d\x8e\x88\x07\x09\x62\xb6\xd8\x7d\x7d\xe8\xde\x3e\xfd\x9e\xbe\xfe\xa7\x24\x5a\xf8\xca\xba\xbb\x38\x0e\x24\x43\x6a\xc1\x5b\x32\xe6\x2d\x7f\x96\x6c\xc1\x15\x4f\xa5\x1c\x17\xd8\x9f\xf3\xfc\x45\xd2\x16\xa9\x35\x3d\x95\xb8\x79\xe5\x8a\xd2\xfe\x2c\x3a\x63\x91\x3d\x95\x43\x3a\x4a\xde\xb1\x23\xae\x4f\x11\x31\xf5\xb2\xc8\xd6\x0d\x68\x2c\x12\xfd\x56\x40\xe0\x9c\xd2\x8c\x02\x1f\x8a\xed\x4e\x64\xb3\xc6\x6f\x96\x33\x98\x17\x9a\x22\x49\x75\x72\x18\x62\xcf\x30\x64\x8c\xf0\x17\x1f\xef\x18\xc1\x7e\x63\x68\xc2\xca\x9f\x27\x0b\x8b\x6b\x93\xab\xac\x42\xc1\x5b\xa2\x17\x25\x1a\x8e\x31\x7b\xde\xf5\xe3\x85\x88\x27\x98\x95\x25\xed\x37\x86\x8e\x7a\x3e\x56\x8a\x35\xf2\x56\x90\xb7\x6c\xf2\xf4\xbc\x7d\xe8\x64\xcb\xca\x0b\xd8\xec\x55\x56\xe0\x9c\x2c\x23\x67\x5e\x55\x4c\xf6\x1b\xd5\x30\xf8\xa8\xd6\xe6\xbd\xf3\x69\xe6\xe1\x3f\x8e\x8e\x29\x1e\xfe\x0e\xef\xc7\x8d\x74\x1b\x61\xb3\xbe\x91\x35\x53\xc7\xcd\x84\x89\x1f\x96\x59\xdf\xc3\xd1\xfe\x9b\xc1\x8e\xaa\x66\xf8\xd6\xa2\x15\xe6\x17\xba\x6a\x3b\x3c\x3b\x59\xd0\x08\xad\xc3\x8d\x34\xdc\xeb\x5a\xf5\xcb\x45\xec\xcf\x63\xf5\xdb\x1b\xd4\x6f\x83\xd0\xb7\x42\x3c\xef\xe4\x47\x92\xd7\x4d\x9c\x44\xd3\x68\x2a\x61\xe2\x57\xd1\x61\x55\xe9\x08\x33\xa4\x50\xb0\x49\x6a\x99\xf9\x5d\xdc\xee\x56\xce\x3c\x5e\x64\x99\xc7\x3b\x0d\xbe\xc6\xd0\x5e\xfd\x66\x73\xb7\xe4\x4f\xd7\xa8\xb9\x07\x63\xbf\x2b\xcf\x3b\x78\x09\xb2\xab\x3f\x94\xe9\xda\xd2\xd9\x55\x22\x72\xf1\x47\xa6\xfe\xd3\x75\x2d\x45\x2e\x8e\x94\x45\x2e\xaa\x5f\x5f\x6a\x79\xd5\xd6\x96\x22\x14\x52\xaa\x81\x7e\x0b\xf4\x5b\xa0\xdf\x5a\x3b\xfa\x2d\x48\xa9\x06\x29\xd5\x40\x38\x06\xc2\x31\x10\x8e\x81\x70\x6c\x6d\x0b\xc7\x20\xa5\x1a\x28\xd1\x20\xa5\xda\x0a\xa5\x54\xfb\xe9\x20\xba\xad\x0a\xa5\x61\x69\xf5\xeb\x4c\x3e\xf5\x9e\x41\xfd\x0b\x7d\x49\x84\xb3\x5c\x5f\xb2\xfd\x18\x1a\x68\x53\xbe\xfd\xe1\xa5\x3a\x19\xf5\xb4\x13\x84\xbd\xce\x83\x7a\x36\xcf\x3e\x90\x21\x20\x43\x40\x86\x80\x0c\x01\x19\x02\x32\x04\x64\x08\xc8\x10\x90\x21\x20\x43\x40\x86\x80\x0c\xb5\x83\x0c\x5d\x7a\xb2\x07\x60\x4f\xc0\x9e\x80\x3d\xd5\xc7\x9e\x7e\xb8\x05\x9d\x6c\x13\x7b\x12\x31\x6e\xbf\xb7\x45\xff\xf5\xb2\x18\xb7\x0f\x69\xfc\xad\x28\xe0\xc9\x15\x93\x58\xaa\x96\xa8\x2d\x00\x6a\x38\x32\x5b\xa8\x69\xc6\x17\x39\x62\xf9\x44\xf6\xd8\x50\xcc\xf6\x56\xca\xce\x65\xb7\xd6\x8b\xaf\x00\x5d\x35\xa2\xf6\x5b\xea\x8e\xda\x0f\xb0\x15\x60\x2b\xc0\x56\x80\xad\x00\x5b\x01\xb6\x02\x6c\x05\xd8\x0a\xb0\x15\x60\x2b\xc0\x56\x6b\x03\x5b\xad\xad\x48\x1f\x40\x5e\x80\xbc\x00\x79\xd5\x87\xbc\x5e\x39\x88\xb6\xd7\x46\x5e\x09\x5d\xd5\x63\x03\xfa\x97\x7b\x49\x57\xb5\xb3\x1c\x4c\x25\xd5\x54\x97\x5a\xb4\x1d\xa8\xab\x00\x53\x01\xa6\x02\x4c\x05\x98\x0a\x30\x15\x60\x2a\xc0\x54\x80\xa9\x00\x53\x01\xa6\x02\x4c\xb5\xaa\x31\x15\x80\x20\x00\x41\x00\x82\x56\x06\x04\x7d\x21\x83\x2e\x67\x20\x88\x25\xc9\x1b\xd5\xff\x2c\xa3\x7f\x34\x83\x36\xb0\x7f\xf6\xf7\xcf\xd3\x7c\x81\x73\x9e\xbf\x28\xdb\xcd\x32\xe8\x3e\x3f\x7b\xd5\x3c\x0e\xd9\x5e\x7e\x7c\xe6\xd8\x6d\xe4\xa3\xf6\x25\x59\x2b\x2b\x68\xac\xac\xa0\xb1\x7a\x0a\x9a\x72\xd0\x49\x46\x54\x6e\x43\x93\x94\xa8\x1c\x44\x07\xd0\xfe\x26\x88\x8a\x78\xc6\x5a\x3c\x45\xff\x41\x06\xfd\x42\xac\x49\x2f\xec\x98\xc5\xa1\xb5\x63\x54\xff\x52\x46\xff\x1f\x19\x74\x05\xfb\xf8\x45\xfc\xe3\xfe\xab\x49\x13\xc7\xcc\x05\xd6\x1b\xb2\xd7\xca\xf6\xbd\x93\x5d\x3a\x3e\x73\x4c\xec\x8b\xdb\x47\xb2\xda\xd7\xd4\x45\x74\x07\x6b\xea\x93\x68\x9a\x36\xf5\x51\x74\x04\x4d\x34\xd7\xd4\xe2\x39\xeb\x49\x1a\xa5\x3f\x3e\x8d\x0e\xa5\xb6\x78\x05\xd1\x5e\xd1\xb3\x6d\x27\xf0\x4b\x94\x28\xcd\x96\xec\x79\x1c\x06\xfa\xef\x4e\xeb\x7f\x7a\x7d\xd9\xcb\xd9\x51\x3d\xf3\xd7\x8c\x67\x1f\x91\x25\x4d\xd0\x92\xb2\x39\xf2\x93\xd8\x7b\x8b\xf4\x72\x29\xd7\xf7\x38\x92\x84\x13\x0d\x81\xcc\x01\x99\x03\x32\xb7\x76\xc8\x1c\x9c\x68\x08\x27\x1a\x02\x20\x03\x40\x06\x80\x0c\x00\x59\x4f\x00\x32\x38\xd1\x70\x35\xf2\x2c\x38\xd1\xb0\x13\x27\x1a\x2e\xb2\x73\x14\xb6\xd3\x73\x14\x32\xa7\x8e\xeb\x87\xd1\x38\x3a\x58\x31\x5d\x35\x3f\xcc\x82\xef\xf6\x73\x29\xdb\xf3\xee\x67\xad\x66\x75\xe2\x92\x99\x94\x1a\xa9\xc2\x19\x5a\x6d\x64\x7e\x72\x63\x19\xb8\xb8\x96\xad\x0a\x86\x95\xca\x28\xb6\xb3\x6f\x57\x80\x52\x30\xa8\xf0\x5c\x74\x0a\x9d\x48\x1c\x70\x50\x05\xcb\xd5\xf1\x9e\xe0\x8c\x83\x5a\x67\x1c\xbc\x31\xd3\x10\x0a\xad\xa3\xcd\xd1\x19\x76\xa2\xd9\x34\x9a\x8a\x4e\x34\x6b\xb9\xd0\xb3\xec\x20\x94\x13\xe8\xb8\x72\x10\x4a\xcb\xa5\x36\x3f\x84\x8b\x5e\x17\x86\x70\xf6\xfb\x46\xd9\x10\xde\xca\xcf\xbe\x51\x0e\x12\xf2\xe6\x52\x87\xf3\x18\xbb\x32\x36\x9c\x0f\xcb\x5f\x75\x73\x60\x03\x2d\x04\x5a\x08\xb4\x10\x68\x21\xd0\x42\xa0\x85\x40\x0b\x81\x16\x02\x2d\x04\x5a\x08\xb4\x10\x68\x21\xd0\x42\xa0\x85\xbd\x47\x0b\xe7\xdb\x7c\x86\x6b\x2d\xc8\x90\x4d\x87\x0c\xcf\xd0\xaf\x62\xf3\x6f\xb4\xd3\xef\x38\x70\x58\xb9\xa8\x8f\x4b\x2f\xb2\x5c\xff\xdd\x1b\xc4\xe9\x04\xcd\x0b\xcc\x44\x6a\xb8\xbf\xde\xa2\xbf\x75\x7d\x19\xeb\xb9\x81\x4e\x50\xf1\x7d\x7e\xaa\xb8\x8c\x5c\xb7\x62\xd8\xf6\x65\xe8\xa5\xfa\x4b\xfa\x97\x45\xc3\xbe\x40\x39\xfa\x1b\xdf\x4d\xad\xba\x59\xf2\x97\x95\x0f\x73\x86\x31\x49\xfe\x2b\x3e\x5f\xb4\x1c\x37\xb4\x1c\x37\x30\xf2\x85\x52\x10\x62\x3f\x3a\x58\x9a\x6d\x78\x8c\x82\x73\x1e\x1b\x43\xf2\x69\x86\x72\xe6\x7a\x5a\x52\xec\x00\xee\x10\xf9\x7a\xb1\xdf\x15\x15\x78\xae\xac\x80\x44\x41\xb3\xa2\x2a\xd8\xa6\x75\xa0\x77\x27\x6f\xb2\x18\x88\x3b\x71\x33\xa2\x14\x10\xeb\xc0\x72\x95\x73\xd7\x97\x73\xe6\x06\xf6\xeb\x58\x8f\x6d\x4c\x43\xda\x0e\x1a\xf9\x9c\xf4\x89\x62\x83\xde\x47\x7e\xdd\xe9\xb9\xa1\xff\x5f\x37\x94\x75\xd0\x6d\x3e\x2e\x16\xac\x7c\xf2\x34\xe6\xb4\x3e\xba\x83\x5f\x0a\xde\x85\x35\xe4\x5d\xf8\x33\xed\xd2\xf0\x2e\x34\x3f\xf2\x8a\xa5\x2e\xb8\x01\x1e\xbe\xb2\xdc\x93\xc7\xdd\x00\x15\x3c\x79\x29\xe8\xbf\x9b\x63\xed\x2c\x3a\x8d\x66\xd4\xb1\x96\x9d\x40\x87\x9a\xb0\xa0\x8e\xd0\xc7\x38\x45\x2b\x1a\xc0\x70\xab\x31\xdc\x26\x9e\xc8\xa0\x6f\x66\xf4\xc7\x33\xfd\x5f\x93\x0d\xf4\x81\xcc\x59\xd5\xc4\x77\x5c\x23\x60\x66\xba\x31\x8b\xe7\x3c\xb6\xc1\x15\xbb\xd0\xc8\xfb\xc2\x37\xfe\xb4\x8a\x25\xcc\x78\xfa\x2c\x31\xaa\xdd\x11\x17\xcf\x5b\xb4\x21\xb8\x95\x4f\xf6\x13\xc2\xe9\xc0\x78\x94\x7c\x05\xbc\x8b\x3a\x8b\x8b\xd8\x76\xac\x10\x17\x96\x39\xc4\x57\x5d\x34\xae\x53\x18\xe6\xc6\x3f\xdd\x24\x1a\xf3\x3e\x59\x50\x8a\xd8\x77\x3c\x5b\x6e\x62\xa2\xb5\x25\x5c\x2e\x46\x10\xa4\x14\x90\x4a\xaa\xdb\x4b\x8b\xfc\x52\x3c\x10\xbf\xc9\x9c\xb2\x98\x3b\xe4\x07\xb4\x9e\x8b\xd8\x72\x53\xeb\x68\xea\xb4\x0a\x33\xb4\x06\x69\x9b\x9a\xc7\x32\xe8\xf3\x19\xfd\xb3\x99\xfe\x4f\xcb\x66\x7e\x28\x73\x44\x49\x5e\x52\x24\xfb\x39\x2c\x31\xda\x8c\xef\x15\xad\x79\xfa\x02\xd8\x88\x1c\x66\x6d\xc0\xc0\x91\x78\x96\x28\xfb\x09\x79\x4b\x3b\x72\x7b\x72\x86\x62\x49\xd9\xb8\x88\x5d\x1b\xbb\x61\x44\x64\xb1\xe1\xf9\xc5\x05\x8b\xec\xf8\x0d\x6e\xa7\x8f\xce\x59\x05\xe1\xc1\x30\xd9\xb7\xa6\x31\xe7\xb8\xd4\xe0\xf6\xe5\xad\x2c\xdb\xa6\x84\x65\x94\x6d\x96\xec\x68\x33\xce\x0a\x1f\x0a\xa2\x1f\x31\x9f\x41\xce\x98\x74\x68\x77\x56\x2a\xee\xf9\xe5\x4f\x46\x01\x1a\x73\xdf\x31\x97\x05\x1d\x6c\x5e\xb8\x90\x33\xaf\x64\xf5\x39\x22\x1e\x24\x88\xd9\x70\xf7\xf5\xa1\x7b\xfb\xf4\x7b\xfa\xfa\x9f\x92\x7c\xe2\x2b\xeb\xee\xe2\x4c\x91\x0c\xa9\x05\x6f\xc9\x98\xb7\xfc\x59\xb2\x8f\x57\x7c\x9f\x72\x5c\x60\x7f\xce\xf3\x17\x49\x5b\xa4\xd6\xf4\x54\xe2\xe6\x95\x2b\x4a\xfb\xb3\xe8\x8c\x6c\xd6\x25\xfd\xd4\xc6\x79\xc7\x8e\x9c\x03\x94\x33\x53\x57\x8d\x6c\xdd\x80\x06\x45\xd1\x6f\x05\x49\xce\x29\xcd\x28\x18\xa4\xd8\x33\x45\xb6\x6e\xfc\x66\x39\x83\xf9\xb7\x29\xd7\x54\x27\x87\x21\xf6\x0c\x43\xc6\x08\x7f\xf1\xf1\x8e\x11\xec\x37\x86\x26\xac\xfc\x79\xb2\xcc\xb8\x36\xb9\xca\x2a\x14\xbc\x25\x7a\x51\xa2\xe1\x18\xf8\xe7\x5d\x3f\x5e\x88\x78\x82\x59\x59\xd2\x7e\x63\xe8\xa8\xe7\x63\xa5\x58\x23\x6f\x05\x79\xcb\x26\x4f\xcf\xdb\x87\x4e\xb6\xac\xbc\x80\xcd\x5e\x65\x05\xce\xc9\x32\x72\xe6\x55\xc5\x64\xbf\x51\x8d\x86\x8f\x6a\x6d\xde\x80\x9f\x66\xda\x81\xe3\xe8\x98\xa2\x1d\xe8\xf0\xa6\xde\x48\xb7\x18\x36\xeb\x1b\x59\x33\x75\xdc\x68\x98\xb8\xb7\x5c\xfe\xb3\x33\xda\xc5\x33\x64\x52\x87\xdd\x3e\x5a\xb4\xc2\xfc\xc2\x4a\x58\x12\xcf\x4e\x16\x34\x42\xab\x72\x23\x8d\x46\xbb\x56\xfd\x72\x11\xfb\xf3\x58\xfd\xf6\x06\xf5\xdb\x20\xf4\xad\x10\xcf\x3b\xf9\x91\xe4\x75\x13\x27\xd1\x34\x9a\x4a\xec\x09\xc6\xd0\xde\x26\xba\xc5\x0c\x29\x14\x2c\x94\x5a\x1b\x82\xee\x6f\x9a\x2b\xe7\x5a\x2f\x36\x91\x6b\xbd\x09\xa4\x76\x08\xdd\xaa\xdf\x62\x8e\x49\xb2\xf5\x4b\x6a\xbe\xc5\x94\x22\x56\x43\xd6\x45\xfd\xed\xcf\x14\xa7\x27\xb4\xcc\xc6\x46\x03\x3a\xe3\xea\x8f\x3d\x43\x7f\x64\x5d\xd9\x94\xb6\x9d\x22\x32\x76\x89\x68\xd4\xea\x13\xda\xee\xc6\x60\x19\x9b\xef\xdb\xbb\x3f\x5a\x7b\xec\xe8\x55\xe5\x8b\xd1\x2e\xc1\x8e\x1a\x79\x79\x7b\x1a\xa6\x48\x9d\x78\x7f\xc0\x92\x80\x25\x5d\xa2\x2c\x69\xe2\x4d\xe5\x23\xf1\x96\x32\xb3\xb0\x91\x21\x79\x53\x83\x06\x62\xbb\x07\x24\x98\x89\xab\x6f\xac\x83\x99\xb8\x36\xcc\xc4\x47\x06\xd0\xb6\x54\x33\x31\x35\x19\xc7\xab\x07\xf4\xd7\xf7\xb5\x23\x19\xc7\xee\xb2\x64\x1c\x29\x57\x5d\x6a\x59\x82\xd7\x64\x90\x13\xa4\x08\x86\xd0\x02\x08\x2d\x80\xd0\x82\xb5\x13\x5a\x00\x29\x82\x21\x45\x30\xc4\x34\x40\x4c\x03\xc4\x34\x40\x4c\xc3\xda\x8e\x69\x80\x14\xc1\x10\x24\x01\x29\x82\x57\x28\x45\xf0\xbb\x8e\xa3\xad\x95\xc8\x4d\x80\xf3\x25\xdf\x09\x97\xe5\x19\x51\xff\x3e\xa5\xbf\xbd\x3c\x8b\xea\x68\x4d\x70\x73\x86\x17\xc4\x50\x4d\xd6\x4c\xc3\x36\xf1\x6b\x7a\x1c\xd2\x40\x26\x04\xc0\x15\x80\x2b\x00\x57\xac\x1d\x5c\x01\x99\x10\x20\x13\x02\x50\x03\xa0\x06\x40\x0d\x80\x1a\xf4\x04\x35\x80\x4c\x08\xab\x71\x93\x0f\x99\x10\x3a\x91\x09\xa1\xb1\x83\x87\x53\x24\x05\xf1\xcd\x79\x5b\x04\x05\xcf\xaf\x2d\x28\xd8\xa7\xef\xa9\x20\x28\x88\xd7\x27\x25\x67\xea\x3b\xca\xd5\x71\xfd\x6a\xce\xd4\x04\x91\x18\x4c\xc9\x98\xda\x39\x26\xc1\x10\xc2\x29\x74\x02\x1d\x4f\x88\xd1\xaa\x84\xb2\xd4\x7c\x2b\xa0\x46\xab\xa5\x46\x7b\x7d\xa6\xa1\x80\xa4\x9a\x2d\x8e\x9e\xcb\x74\xa7\x53\xe8\xf6\x48\x77\xda\x62\x91\x8d\xc7\x38\xd5\x2e\xb3\xd5\xec\xa8\x1d\x1d\xaa\xd9\xc7\xcb\x73\xa3\xde\x50\x29\x37\x6a\x62\xd8\xe6\xaa\x66\x46\xed\xf4\x00\x06\x06\x08\x0c\x10\x18\x20\x30\x40\x60\x80\xc0\x00\x81\x01\x02\x03\x04\x06\x08\x0c\x10\x18\x20\x30\x40\x60\x80\xc0\x00\x7b\x8f\x01\xf6\x72\x36\xd4\x8e\x02\x86\x95\x93\xb7\xb7\x3d\xcc\xee\x7f\x0e\xa2\xd1\x7a\xc5\x5a\x22\x23\xe9\xdb\x06\xf5\xdf\x28\xcf\x48\x3a\x98\x9e\x91\x34\x29\xd4\x2a\x4b\xb1\xd0\x69\xa6\xb2\x46\x73\x90\x36\x36\x38\x5b\x27\x7e\x35\xb2\x48\x74\x74\x3c\xf6\x7f\xb3\x3c\xff\xe8\x50\xc5\xfc\xa3\x89\x1e\xb9\x25\x2d\x6f\x04\x90\xfa\xd5\x46\xea\x1f\x6d\x2c\x75\xd8\x8a\x90\xfa\x16\xf3\x43\x74\x16\xaa\xff\x41\x79\xa6\xd1\x7e\x35\xd3\x68\xd2\xff\x95\x02\xd2\x3b\x3d\xaa\x20\xb7\x28\xe4\x16\x85\xdc\xa2\x90\x5b\x14\x72\x8b\x42\x6e\x51\xc8\x2d\x9a\x9e\x5b\xb4\xa3\x46\xc2\xc4\xff\x2d\x37\xc4\xb7\xd7\xce\x2c\x9a\x30\x1d\x06\xca\xd3\x46\x75\xd0\x72\x80\x24\x51\xab\xce\x22\xe9\xfa\xe6\xb7\x66\x8a\xa8\xce\xe2\xa8\x5b\xd1\x2d\xfa\x98\xb9\x57\xa6\x77\x7a\x4e\x22\x41\x54\xbc\x80\xf2\xf4\x50\x6d\xa7\x4a\xaf\xdc\x82\x8e\xa6\x52\x25\x0a\x11\x1b\xc9\xf4\xa9\x7f\x74\x50\x7f\xbc\x3c\xb3\xd3\xcb\xb8\xc7\xc8\xb5\x9d\x0b\x8e\x5d\xb2\x0a\x2a\x21\xb5\xa4\x77\x36\x25\x51\x50\x4e\xb1\x78\xc6\xa4\xad\x34\x44\xcb\x1b\x8a\xd4\x29\x31\xb9\x81\x57\xc4\xd2\x90\x0d\x42\x6c\xd9\xb9\xec\xae\xa5\xc6\x52\xdb\x4d\x3b\x41\xfb\xf2\x1f\x77\x28\x4d\x54\x63\x9a\xce\x2a\xb3\x14\xe5\xd6\x93\x17\xb0\x5b\x5b\xd3\x39\x90\x3e\x72\x9e\xa6\x23\x5a\x31\xc8\x14\x05\xb2\x2b\x90\x5d\x81\xec\x0a\x64\x57\x90\x29\x0a\x32\x45\x81\xde\x0b\xf4\x5e\xa0\xf7\x02\xbd\x17\xe8\xbd\xda\x97\x29\xea\xd2\x4b\x8d\x0c\xb9\xa8\x56\xa3\x44\x0d\x72\x51\x75\x22\x17\xd5\x2b\x6e\x40\x27\xda\x03\xa2\x84\xf8\xe9\x03\x5b\xf4\xfb\xcb\xc5\x4f\x8f\x6a\xfc\xad\x28\x14\xca\x15\x93\x58\x95\x7c\xe3\x6d\xa1\x51\xc3\x91\xf1\x42\x0d\x34\xbe\xd4\x11\xfb\x27\xb2\xca\x86\x62\x16\xb8\x52\x76\x2e\x3b\xda\x20\xcb\x02\x8e\xd5\x08\x01\x5e\xea\xce\x21\x01\xc0\xb0\x80\x61\x01\xc3\x02\x86\x05\x0c\x0b\x18\x16\x30\x2c\x60\x58\xc0\xb0\x80\x61\x01\xc3\x5a\x1b\x0c\x6b\x2d\x1e\x10\x06\x14\x0c\x28\x18\x50\xb0\xfa\x28\xd8\x03\x95\x82\xfc\x18\x05\x4b\xd5\x5d\xfd\xbf\x03\xfa\x13\x3d\xa8\xbb\xda\x57\xce\xaa\x2a\xa8\xad\x2e\xb5\x43\xfa\x40\x7d\x05\xe4\x0a\xc8\x15\x90\x2b\x20\x57\x40\xae\x80\x5c\x01\xb9\x02\x72\x05\xe4\x0a\xc8\x15\x90\xab\x55\x4d\xae\x80\x0a\x01\x15\x02\x2a\xb4\x32\x54\xe8\x67\x03\x28\x57\x9d\x0a\x95\x9d\xd6\xf7\x99\x01\xfd\xf3\xe5\x50\xe8\xa5\x75\x43\xa1\x78\x20\x62\x9b\x90\xd0\x50\x2a\x12\x2a\x3f\x5f\x00\x00\x50\x93\x00\xa8\xb3\xc1\xab\x80\x7f\x00\xff\x00\xfe\x01\xfc\x03\xf8\x07\xf0\x0f\xe0\x1f\xc0\x3f\x80\x7f\x00\xff\x00\xfe\x01\xfc\x03\xf8\x07\xf0\x0f\xe0\x9f\xce\xe1\x9f\x7f\x1d\x44\x37\x35\x86\x7f\x44\x08\xdc\xc7\x07\xf5\x7b\xca\x43\xe0\x3e\x5c\x67\x08\x5c\x07\x18\x50\xab\x01\x70\x03\x75\x10\x24\xa0\x47\x4d\x04\xbd\x01\x39\x02\x72\x04\xe4\x08\xc8\x11\x90\x23\x20\x47\x40\x8e\x80\x1c\x01\x39\x02\x72\x04\xe4\x08\xc8\x51\xeb\xe4\xa8\xd7\x52\x1e\x03\x79\x02\xf2\x04\xe4\xa9\x3e\xf2\xf4\xd3\x0c\x32\x18\x79\xf2\x67\xad\x7c\x4e\x70\x05\x5a\x14\x05\x14\x8e\x37\xaa\x7f\x31\xa3\x3f\x96\x41\x57\x91\x2b\xc6\xd5\x0b\xfa\xfb\xe7\xe9\x81\x17\x73\x9e\xbf\x28\x5b\xd5\x32\x28\x43\xc8\x5e\x3b\x8f\xc3\xd3\xc9\x5f\x8c\xcf\x1c\xbb\x8d\x7c\xdb\xbe\x23\x03\xca\x0a\x1a\x2b\x2b\x68\xac\x9e\x82\xa6\x1c\x74\x92\x41\x9b\xdb\xd0\x24\x85\x36\x07\xd1\x01\xb4\xbf\x09\x68\x23\x9e\xb1\x16\xb2\xd1\x5f\xbd\x0e\x0d\xd4\x6a\xfb\x0b\x3b\x46\x75\x7a\xa0\x0f\x7a\x66\x59\xf3\xbf\xe8\xc2\x8e\xfe\xab\xc9\x1b\x88\xd9\x2a\xac\x2b\x65\xcd\xb4\xe6\xbf\x73\xc7\xf8\xcc\x31\xb1\x35\x6f\x5f\x14\x5e\xfb\x5e\x42\x11\xdd\xc1\x5e\xc2\x49\x34\x4d\x5f\xc2\x51\x74\x04\x4d\x34\xf7\x12\xc4\x73\x4e\x3b\x41\x4d\x7c\xa6\xff\xd3\x71\x74\x73\x1d\xef\x82\x1f\x3e\xe8\x7b\x05\x3c\xeb\xb8\xb6\xe3\xce\x07\xfa\x9f\x1e\xd7\x3f\x7a\x7d\x85\xd7\xb3\x9d\x6d\x7a\x7c\xbe\xce\x88\xf5\x5c\x20\xd8\xc3\xac\xb8\xd3\x5e\x01\x4f\xb0\xe2\xb2\xdb\xc8\x2f\x52\x5e\x5c\xf9\xa5\x3d\x4e\x41\x27\x00\x09\x02\x12\x04\x24\x08\x48\x70\xcd\x20\xc1\x89\x9e\x41\x82\x6d\xaf\x49\xd3\x64\x6e\x02\xc8\x1c\x90\x39\x20\x73\x40\xe6\x80\xcc\x75\x9f\xcc\x4d\x00\x08\x5b\x85\x20\x6c\xa2\xd7\x41\xd8\xc4\x25\x08\xc2\xa6\x30\x9a\x62\xe4\xe1\x30\x1a\xa7\xe4\x61\x3f\xda\x87\xf6\x54\x3c\xa6\x90\x52\x82\x0b\x3b\x72\xe5\xdb\xf2\x7a\x70\xc3\xaf\x5e\x97\xae\xd6\xd9\xa8\xaf\x67\x61\x5e\xe7\x6b\x8b\x75\x6e\xd7\x8f\x72\xb1\x4e\x45\x62\xc1\xf5\x3b\xe5\x75\x54\x05\x3c\xc8\x7c\xcf\xc6\x0a\xf4\xe2\xd9\x6c\x81\x30\xac\x34\x50\x71\x23\xfb\xb2\xbb\xa8\x82\x91\x85\x63\xe8\x36\x34\x99\x38\xc3\xf3\x26\xb4\xab\x89\x97\x05\xc7\x77\xd6\x3a\xbe\xf3\x67\x1a\x3a\xca\x06\xc6\x41\x74\x80\x0e\x8c\x3d\xa8\xb9\xb6\x46\xc7\xd9\x29\xfd\x47\xd0\x44\x74\x4a\x7f\xd3\x85\x4d\xb3\x13\x7d\x27\xd1\x61\xe5\x44\xdf\xa6\x4b\x6b\x7e\xbc\x16\xbd\x6e\x8f\xd7\xec\xbf\x19\x15\xc6\xeb\x10\x3f\xcf\x59\x39\x1c\xdb\x9b\x4b\x1b\xbb\x37\xb1\x0b\xd3\xc6\xae\xfc\x69\xc7\x47\x31\xf0\x41\xe0\x83\xc0\x07\x81\x0f\x02\x1f\x04\x3e\x08\x7c\x10\xf8\x20\xf0\x41\xe0\x83\xc0\x07\x81\x0f\x02\x1f\x04\x3e\xd8\x7b\x7c\x90\x13\x87\xed\x94\x38\x64\x4e\x1d\xd7\x0f\xa0\xfd\x68\x5f\x13\xca\xa4\x33\xa1\x15\x96\x82\x9a\xc4\x21\x9b\x4e\x1c\x9e\xa1\x5f\xc5\xe6\xdf\x68\x8f\xdf\x5d\xfa\xb0\x72\xd1\x26\xed\x96\x09\xeb\x7f\x3e\x80\x0e\x34\xa7\xf9\x12\xd1\xb7\x4f\x99\xfa\x1f\xaf\xab\x00\x63\xb6\xd0\x79\x24\xbe\x1d\x4f\xd3\x7b\x91\xcb\x56\x00\xa2\x4e\x59\x6d\xe3\x7a\xb5\xba\xf2\x73\xd2\xbb\xf2\x06\xbd\x6f\x1e\x77\x99\x9d\xf5\xff\xe3\x86\x0a\xaf\x6b\xab\x8f\x8b\x05\x2b\x8f\x6b\xbf\xb1\x61\x7e\x25\x90\xef\xd5\x4d\xbe\xdf\xdb\xa3\xe4\xbb\xf9\xe1\x56\x2c\x75\x1b\x55\x7f\xe2\xca\x4a\xae\x25\x8e\xaa\xd3\x5d\x4b\x95\xf1\x74\xa7\x07\xd8\x59\x74\x1a\xcd\xa8\x03\x2c\x3b\x81\x0e\x35\xb1\xca\x1f\xa1\x4f\x70\x8a\x02\xec\x00\xc6\x5a\x8d\xb1\x36\xf1\x44\x06\x51\x95\x7b\xff\xd7\x64\x03\x7d\x20\x73\x56\x35\x43\x1d\xd7\x08\x98\x29\x69\xcc\xe2\x39\x8f\x6d\xc2\xc4\x4e\x29\xf2\x10\xf0\xcd\x29\xad\x62\x09\x33\xe6\x3b\x4b\x0c\x3f\x77\xc4\xc5\xf3\x16\x6d\x08\x6e\x89\x12\x9b\x57\x80\x71\xc6\x4c\xe4\x2b\xe0\x9d\xd3\x59\x5c\xc4\xb6\x63\x85\xb8\xb0\xcc\x41\xb3\xea\x46\x70\x9d\xc2\x30\x37\x50\xe9\x46\xc6\x98\xf7\xc9\xfa\x51\xc4\xbe\xe3\xd9\xd2\xd0\x8e\x96\x92\x70\xb9\x18\x6d\xd4\x4b\x01\xa9\xa4\xba\x05\xb2\xc8\x2f\xc5\x03\xf1\x9b\xcc\x31\x7a\x20\x8a\xc8\xb1\x7a\x2e\x62\xcb\x4d\xad\xa3\xa9\xd3\x2a\xcc\xd0\x1a\xa4\x19\xde\x8f\x65\xd0\xe7\x33\xfa\x67\x33\xfd\x9f\x96\xcd\xfc\x50\xe6\x88\x92\xf4\xa3\x48\xf6\x1c\x58\xa2\x9e\x19\xdf\x2b\x5a\xf3\xf4\x05\xb0\xe0\xad\x61\xd6\x06\x0c\x6e\x88\x67\x89\xb2\x86\x90\xb7\xb4\x23\xb7\x27\x67\x9c\x61\x2f\x84\xb5\x4e\x11\xbb\x36\xd9\xbe\x4a\x6a\x88\x0d\xcf\x2f\x2e\x58\x64\x57\x6a\x70\xf3\x71\x74\xce\x2a\x08\xca\x6e\xb2\x6f\x4d\x63\xce\x71\xa9\x1d\xe8\xcb\x5b\x59\xb6\x4d\x29\xc0\x28\x33\xe8\xed\x68\xc3\xc8\x0a\x1f\x0a\xa2\x1f\x31\xae\x9d\x33\x26\x1d\xda\x9d\x95\x8a\x7b\x7e\xf9\x93\x51\xc8\xc3\x5c\x4c\x0c\xab\xd3\xc1\xe6\x85\x0b\x39\xf3\x4a\x56\x9f\x23\xe2\x41\x02\xd5\x2c\x9d\xb8\xaf\x0f\xdd\xdb\xa7\xdf\xd3\xd7\xff\x94\xdc\x43\x7f\x85\xec\xa1\xe9\x4d\xc9\x90\x5a\xf0\x96\x8c\x79\xcb\x9f\x25\x7b\x4d\xc5\x33\x27\xc7\x05\xf6\xe7\x3c\x7f\x91\xb4\x45\x6a\x4d\x4f\x25\x6e\x5e\xb9\xa2\xb4\x3f\x8b\xce\xc8\x32\x78\x90\x7e\x6a\xe3\xbc\x63\x47\x00\x9b\xb2\x50\xea\x4e\x90\xad\x1b\xd0\x28\x1e\xfa\xad\xa0\x9d\x39\xa5\x19\x05\x27\x13\xa6\xfc\x08\xef\x90\xf9\xc4\xcd\x72\x06\x73\xc4\x52\xf6\xa6\x4e\x0e\x43\xec\x19\x86\x8c\x11\xfe\xe2\xe3\x1d\x23\xd8\x6f\x0c\x4d\x58\xf9\xf3\x64\xcd\x71\x6d\x72\x95\x55\x28\x78\x4b\xf4\xa2\x44\xc3\x31\x38\xcd\xbb\x7e\xbc\x10\xf1\x04\xb3\xb2\xa4\xfd\xc6\xd0\x51\xcf\xc7\x4a\xb1\x46\xde\x0a\xf2\x16\x59\x36\x44\xfb\xd0\xc9\x96\x95\x17\xb0\xd9\xab\xac\xc0\x39\x59\x46\xce\xbc\xaa\x98\xec\x37\xaa\xc5\xf0\x51\xad\xcd\x9b\xc4\xd3\xcc\xc9\x7d\x1c\x1d\x53\x9c\xdc\x1d\xde\x78\x1a\xe9\xe6\xc3\x66\x7d\x23\x6b\xa6\xee\x5a\x10\x13\xaf\xa9\x24\x4e\xd9\x11\xed\x37\xd9\x4e\xbf\xb6\xe5\x9e\x2d\x92\x6d\x7d\x97\xcd\x8a\x67\x27\x0b\x1a\xa1\xb5\xb8\x91\x86\x49\x5d\xab\x7e\xb9\x88\xfd\x79\xac\x7e\x7b\x83\xfa\x6d\x10\xfa\x56\x88\xe7\x9d\xfc\x48\xf2\xba\x89\x93\x68\x1a\x4d\x25\x76\x05\x63\x68\x6f\x13\x7d\x64\x86\x14\x0a\xe6\x4a\xad\xad\x41\xf7\xf6\xce\x95\xd3\x3a\x15\x59\x5a\xa7\xae\xb2\x9f\x83\xe8\x80\xbe\xdf\xdc\x27\x23\xbd\xaf\x53\x23\xbd\xcb\x7f\xdc\xf9\x50\x6f\xfd\xbe\xe3\xe2\x38\xc5\x7a\x19\x4e\xa0\x7f\x71\x4a\x7f\x5b\xa5\x80\xbd\x6d\x75\x07\xec\x65\xcd\xda\x91\x7a\x10\xa2\x07\x12\x1c\x90\xe0\x80\x04\x07\x24\x38\x20\xc1\x01\x09\x0e\x48\x70\x40\x82\x03\x12\x1c\x90\xe0\x80\x04\x07\x24\x38\x20\xc1\x01\x09\x4e\xa3\x12\x9c\x17\xa2\xc3\x8c\xba\xdc\x82\xc6\x28\x75\xd9\x8d\x76\xa2\xed\x8d\x50\x97\xb6\xc4\xe6\xd9\xb5\x89\xcb\xb8\x7e\xb0\x71\xe2\x12\x0f\xca\xfb\x59\x25\xa1\xc2\x33\xd3\x82\xf2\xb2\x83\xf5\x44\xe3\xb5\xd9\x57\x3a\x81\x0e\xa1\x5b\x13\xd8\x31\x87\x86\x1b\xc2\x60\x80\x1a\x6b\xa0\xc6\xff\xa5\xa1\x83\xac\xd7\xef\x45\x37\xd3\x5e\xbf\x1d\x35\xd8\xc8\xe8\x08\x93\x1f\x1c\x40\xfb\x23\xf9\x41\xe3\xa5\x4c\x32\x67\xc4\xad\xe8\x16\xc5\x19\xd1\x78\x31\xad\x86\xda\x75\x65\xf8\x65\xbf\x5d\x29\xc6\xce\xa8\x15\x63\x97\xcd\x35\x16\x5c\x07\x51\x75\x80\xf4\x00\xe9\x01\xd2\x03\xa4\x07\x48\x0f\x90\x1e\x20\x3d\x40\x7a\x80\xf4\x00\xe9\x01\xd2\x03\xa4\x07\x48\x6f\xd5\x23\xbd\x5e\x8e\xaa\xeb\x0a\x68\x58\x45\xe1\x74\x1f\x33\x1b\x4d\xa1\x2e\xe3\xe8\x5e\x6e\xea\x6f\xa8\x14\x47\x77\x5d\xf5\x38\xba\xac\x59\x3b\x80\xae\xcd\x91\x73\xcf\x6b\x9d\xc8\xb5\x18\x32\xd7\x95\xae\xd9\xff\x17\x95\x10\xf4\xf5\x35\x63\xe5\xb2\x5b\xea\x0a\x92\x03\x20\x7d\xe9\x01\xe9\x87\x7a\x06\x48\xb7\x18\x08\xd7\x1d\x90\xfc\xae\x4a\x11\x70\xcf\x4c\x8b\x80\xcb\x0e\xd6\x13\xfa\x06\x31\x6f\xab\x60\x20\x41\xcc\x1b\xc4\xbc\x41\xcc\x1b\xc4\xbc\x41\xcc\xdb\xa5\x10\xf3\xd6\x15\x63\x61\xe2\xfb\x95\x2c\xee\x6c\xfd\xc1\x6e\xd9\x81\x3a\xa2\xdc\x20\xbc\x0d\x2c\x93\xca\x26\x7e\x17\x36\xb8\x35\xe3\xda\xba\x43\x5f\xf6\xa2\x9b\xf5\xdd\xe6\x4e\x19\xd0\x76\x75\x85\x80\xb6\x2e\x44\xb2\xbd\x6d\x1a\x1d\xad\x03\x9f\x90\x7a\x04\x45\x2b\x2f\xe0\x09\xfd\xfb\xa5\xa3\xb1\x13\xe9\xbe\x78\x5c\x7f\x67\x93\x01\x6e\xb1\x44\x37\x15\x02\xdc\x4e\x8a\xdb\xda\x70\x1a\x1d\xe8\x62\x40\x17\x03\xba\x18\xd0\xc5\x80\x2e\x06\x74\x31\xa0\x8b\x01\x5d\x0c\xe8\x62\x40\x17\x03\xba\x18\xd0\xc5\x80\x2e\x06\x74\x31\xdd\x0f\x75\x6b\xf7\x31\x74\x6d\x85\x30\x15\xcf\x9f\x7b\x65\xa5\x14\x5f\x51\xa8\x9b\x8a\x25\x72\x15\x43\xdd\x3a\x0b\x26\x5a\xd3\x18\x40\xea\xdd\x2e\x04\xbd\xa9\x5d\xac\x79\x8d\x81\x5a\x4a\x0b\x41\x6f\xed\x3c\x5f\xae\x2b\x03\x31\xfb\xc3\xc6\x82\xde\xd4\x41\xb9\xb7\x8e\xa0\xb7\x6e\x0c\x4f\xc0\x7c\x80\xf9\x00\xf3\x01\xe6\x03\xcc\x07\x98\x0f\x30\x1f\x60\x3e\xc0\x7c\x80\xf9\x00\xf3\x01\xe6\x03\xcc\x07\x98\xaf\xf7\x30\xdf\x9a\x09\x7f\xeb\xbd\xd3\xe4\xce\xa1\x17\xea\xcf\x37\x9f\x27\x95\x5f\x63\x7c\x7e\xa4\x02\x30\xf2\x76\xc9\xd3\x18\x41\xde\x2b\xe2\x61\x23\x28\xe5\xe9\x50\xa1\x1d\x1d\x5b\x8b\xac\xaf\x14\x7d\x8f\xce\xc7\xe6\x66\x29\xc4\xea\xa8\x42\xec\xeb\x03\xe8\x44\x7b\x14\x62\x22\xee\xee\xb5\x03\xfa\x83\x8d\xc4\xdd\x25\x8e\x41\x4b\x8d\xbb\xeb\x02\xe5\x69\x56\xa0\xd8\xc6\x43\xeb\xba\x32\x3a\xfa\x3f\xd7\x60\x04\x9e\xfa\x7e\x46\x2b\x47\xe0\x01\x27\x5f\x25\x9c\xbc\xd9\x58\xbc\xf6\x73\xf2\x5e\x8a\xc5\xab\xc8\xb7\x3f\x54\x3b\x16\x2f\xe6\x68\xaa\xc8\xb4\xbb\x31\x80\x20\x2a\x0f\xa2\xf2\x20\x2a\x0f\xa2\xf2\x20\x2a\x0f\xa2\xf2\x20\x2a\xaf\x0b\x51\x79\x15\x8f\xa0\xfb\x49\xb3\x51\x79\xaa\x31\x31\x52\x29\x2a\xaf\xc3\xb6\x04\xc4\xe7\xad\x3a\x1b\xa5\x1b\xdb\xdf\xee\xc6\xe7\x55\xc4\x43\x55\xe3\xf3\xaa\x9e\x34\x77\x09\xf2\x9d\x3f\x3d\x8e\x0e\xb6\xc6\x77\x02\xfd\x9f\xa7\xf4\xd7\x55\x0a\xfd\x33\x6b\x87\xfe\x65\xb7\xd4\x15\xf3\x07\xc1\x7e\xa0\x02\x02\x15\x10\xa8\x80\x40\x05\x04\x2a\x20\x50\x01\x81\x0a\x08\x54\x40\xa0\x02\x02\x15\x10\xa8\x80\x40\x05\x04\x2a\x20\x50\x01\x35\xaa\x02\xba\x0b\xdd\xc2\x70\xce\x4d\x68\x17\xc5\x39\x23\xe8\x46\xb4\xad\x2e\x9c\xd3\x96\x28\xbf\x17\xd4\x46\x39\x63\xfa\xde\x06\x50\x4e\x3c\xbc\xef\x4b\x95\xf0\xe9\xe5\xb1\xf0\xbe\xec\x50\x9d\x71\x7d\x6d\xf6\xb3\xee\x47\xfb\xd0\x9e\x04\xbd\x1c\x42\x5b\xea\xa3\x69\x80\x2a\x6b\xa0\xca\xff\xa1\xa1\xbd\xac\x73\xef\x40\xa3\xb4\x73\x6f\x43\xf5\xb6\x2e\x3a\xc0\xa4\x09\x37\xa3\xdd\x91\x34\xa1\x81\x9f\xdf\xca\x7c\x16\x7b\xd0\x4d\x8a\xcf\xa2\x81\xdf\xb7\x1a\xb4\xd7\xd9\x71\x95\xfd\x5a\xa5\x68\xbd\x6b\x2a\x46\xeb\x65\x77\x34\x1c\xa6\x07\xf1\x79\x40\xe6\x80\xcc\x01\x99\x03\x32\x07\x64\x0e\xc8\x1c\x90\x39\x20\x73\x40\xe6\x80\xcc\x01\x99\x03\x32\x07\x64\x6e\xd5\x93\xb9\x5e\x8e\xcf\xeb\x2c\x5d\x80\xc0\xbc\x06\x84\x5b\x7f\x6b\xb6\x9a\xba\x5d\x46\xe4\xbd\xce\xd4\x7f\x9e\xa9\xc0\x75\xae\xae\x10\x91\x97\xdd\x52\x57\x28\x5e\x9b\x63\xf0\xce\xb4\x00\xf6\x5a\x0c\xbe\xeb\x6c\xd7\xef\xff\x83\x4a\xc0\xba\xbf\x72\xd4\x5d\x76\x6b\xbd\xe1\x76\x80\xaf\x2f\x21\x7c\x7d\xff\x0a\xe2\xeb\x16\x43\xea\x3a\x4c\x9f\xdf\x56\x29\x96\xee\xf2\x58\x2c\x5d\x76\xa8\xce\x20\x3a\x88\x9e\x5b\x05\xe3\x05\xa2\xe7\x20\x7a\x0e\xa2\xe7\x20\x7a\x0e\xa2\xe7\x2e\x85\xe8\xb9\xce\x5a\x08\x13\x7f\x5f\xc9\x8c\x1e\xa8\x23\x6c\x2e\x7b\x43\x7d\xf1\x72\x10\x28\x07\xe6\x48\x65\xf3\xbd\x93\x7b\xd4\x9a\x11\x72\x1d\x06\x34\x3b\xd0\xa8\x3e\x62\xde\x28\x39\xc9\x95\xc9\xd0\xb8\x55\x11\x13\xf7\xfe\x01\x34\x5a\x07\x5a\x89\x1d\x7f\xf7\x33\x53\x7f\x79\x5f\xeb\xc7\xdf\xed\xac\x10\x0a\xa7\x5c\x73\xd4\xf3\xc7\x0b\x05\x39\x23\x05\x3d\x1e\x17\xb7\xa6\x8e\x15\x98\x02\xa9\x11\x48\x8d\x40\x6a\x04\x52\xa3\x35\x23\x35\x9a\xea\x19\xa9\xd1\xca\x79\x8f\x7a\x46\xe3\x34\x05\x1a\x27\xd0\x38\x81\xc6\x09\x34\x4e\xa0\x71\xea\xbe\xc6\xa9\xed\xfb\xd0\x29\x10\x4d\xad\x42\xd1\xd4\x54\xaf\x8b\xa6\xa6\x2e\x41\xd1\x94\xfe\xba\x01\xb4\xb5\x4e\x64\x13\xe8\xdf\x30\xf5\x6f\x55\xca\x40\x5d\x4f\xbe\xa2\x1b\xab\x40\x9a\x4b\x8d\xce\xac\xee\x38\x50\xe0\x31\xc0\x63\x80\xc7\x00\x8f\x01\x1e\x03\x3c\x06\x78\x0c\xf0\x18\xe0\x31\xc0\x63\x80\xc7\x00\x8f\x01\x1e\x03\x3c\x06\x78\x4c\x07\x79\xcc\x7f\x1d\x44\xb7\xd4\xc1\x63\xe8\x0f\x47\xf3\x85\x52\x10\x92\xcd\x8a\xa2\xa7\xf9\xf6\x80\xfe\xbd\x4a\x7a\x9a\xff\xcc\x17\x19\xd7\x76\x2e\x38\x76\xc9\x2a\xa8\x6d\x60\x49\x83\xee\x30\x2b\x56\xd1\x6a\xe4\x14\xb9\xf1\x98\x5c\xf2\x87\x68\x71\x43\xd1\x46\x3a\xb6\x33\xf2\x8a\x58\xaa\xc8\x83\x10\x5b\x76\x2e\x9b\x5b\xaa\x20\x13\x2c\xbf\xe3\xb4\x13\x84\xbd\x8e\x80\xce\xa3\x19\x86\x80\x8e\xa1\xdb\x28\x02\x1a\x47\x07\xd1\x81\x26\x04\x82\xb4\x4f\x4e\x12\x6b\xac\x26\x16\x1a\x48\xc7\x42\x4f\xd3\x11\xad\x18\x63\x43\xe7\x6b\xb3\xa1\xdb\xf5\xa3\x75\xb2\xa1\xf2\x77\x03\xa4\x08\x48\x11\x90\x22\x20\x45\x40\x8a\x80\x14\x01\x29\x02\x52\x04\xa4\x08\x48\x11\x90\x22\x20\x45\x40\x8a\x80\x14\x01\x29\xea\x16\x29\xfa\xc3\x2d\xe8\x70\x2b\xa4\x48\x24\xb1\xf9\xda\xa0\xfe\xb6\xf5\x15\x80\xd1\x47\x34\xfe\x46\x14\x4c\xe4\x8a\xe9\x45\x48\x7b\x3a\x84\x8b\x86\x23\xab\x82\x5a\x4e\x7c\x0d\x22\x86\x49\x64\x2e\x0d\xc5\x4c\x63\xa5\xec\x5c\x36\x5b\x3f\x6c\x02\xd0\xd4\x48\xc4\xe4\x12\x8b\x98\x04\xc8\x04\x90\x09\x20\x13\x40\x26\x80\x4c\x00\x99\x00\x32\x01\x64\x02\xc8\x04\x90\x09\x20\x13\x40\xa6\xb6\x43\xa6\x83\xe8\x80\xbe\xdf\xdc\x27\x13\xa1\x5c\xa7\xe6\x4e\x29\xdf\x38\x94\x67\x52\x01\x4a\x05\x94\x0a\x28\xd5\xca\x50\xaa\xd7\x0e\xa2\x9b\x9a\xa1\x54\x81\xfe\xd8\x80\xfe\xe5\x4a\x42\xa6\xa5\x86\x85\x4c\x6d\x52\x30\x0d\xd5\x01\x95\x40\xba\xd4\x82\x74\xa9\xad\xd9\x86\x94\x97\x02\x38\x09\x70\x12\xe0\x24\xc0\x49\x80\x93\x00\x27\x01\x4e\x02\x9c\x04\x38\x09\x70\x12\xe0\xa4\xb5\x88\x93\x80\x06\x01\x0d\x02\x1a\xb4\x32\x34\xe8\xd7\xb6\x34\x17\xdd\x26\xc5\x4a\x9f\x18\xd4\x5f\x53\x49\xac\xf4\x70\x83\x62\xa5\x9e\x50\x29\x0d\xd4\x01\x94\x00\x26\x35\x21\x4f\x02\x90\x04\x20\x09\x40\x12\x80\x24\x00\x49\x00\x92\x00\x24\x01\x48\x02\x90\x04\x20\x09\x40\x12\x80\xa4\xf6\x81\xa4\xbd\xe8\x66\x7d\xb7\xb9\x53\xea\x92\xae\xae\xa0\x4b\x02\x41\x12\x20\x28\x40\x50\xbd\x82\xa0\x5e\xbf\x05\x4d\xd7\x8d\xa0\xaa\x1c\x02\x2f\x13\x2e\x7d\x7c\x50\xff\x46\x8b\x3a\xa5\xf6\x67\x5a\xda\x51\x09\x2b\xc5\x0f\x64\x84\x64\x4b\x3d\xa6\x58\x82\x00\x38\x00\x4d\x00\x9a\x00\x34\x01\x68\x02\xd0\x04\xa0\x09\x40\x13\x80\x26\x00\x4d\x00\x9a\xd6\x38\x68\xba\xf4\x4e\x02\x07\x20\x05\x40\x0a\x80\x54\x7d\x40\xea\x15\x37\xa0\x33\xed\x04\x52\x42\x2a\xf5\xee\x2d\xfa\x1b\x5b\x92\x4a\xf5\x5a\x42\xa7\x91\x86\x98\x16\xf0\xac\x95\x16\x4d\x01\xcb\x02\x96\x05\x2c\x0b\x58\x16\xb0\x2c\x60\x59\xc0\xb2\x80\x65\x01\xcb\x02\x96\x05\x2c\x6b\x8d\xb3\xac\xaa\xa2\xa9\xaa\x59\x9c\x80\x82\x01\x05\x03\x0a\xb6\x5a\x29\xd8\x3f\x0f\xa2\xc9\x76\x50\xb0\x40\x7f\xc7\xa0\xfe\xd9\x4a\x7a\xac\x62\xfd\x7a\xac\x36\x09\xb1\x2a\x66\x21\x8f\x43\x2b\x50\x60\xb5\xa0\xc0\x7a\x41\x6d\x6a\x35\xa6\xef\x6d\x80\x5a\x01\xae\x02\x5c\x05\xb8\x0a\x70\x15\xe0\x2a\xc0\x55\x80\xab\x00\x57\x01\xae\x02\x5c\x05\xb8\x6a\x2d\xe2\x2a\x80\x4e\x00\x9d\x00\x3a\xad\x56\xe8\xf4\x8d\x36\xc5\x02\x4a\xcd\xd5\x6f\x6e\xd1\x9f\xaa\xc4\x9e\xde\x5d\xaf\xe6\xaa\x27\xc4\x56\x37\xd4\xc7\xad\x80\x59\x35\xa1\xb2\x02\x5e\x05\xbc\x0a\x78\x15\xf0\x2a\xe0\x55\xc0\xab\x80\x57\x01\xaf\x02\x5e\x05\xbc\x0a\x78\x15\xf0\xaa\x36\xf0\xaa\x1d\x68\x54\x1f\x31\x6f\x94\xbc\xea\xca\xa4\xbc\x0a\x74\x55\x80\xb8\x00\x71\xad\x1d\xc4\xf5\x96\x46\xce\xdf\x8b\xe5\xb5\xfa\xe6\x80\xfe\xed\x9e\xcb\x6b\xb5\xa7\x12\x96\x4a\x64\xb3\x3a\xea\xf9\xe3\x85\x82\x64\x55\x01\x70\x2a\xc8\x6e\x05\xc8\x0a\x90\x15\x20\x2b\x40\x56\x80\xac\x00\x59\x01\xb2\x02\x64\x05\xc8\x0a\x90\x15\x20\xab\x15\x47\x56\x40\x87\x80\x0e\x01\x1d\x5a\x19\x3a\xf4\xd4\x00\xca\x35\x44\x87\x02\xfd\x73\x03\xfa\x63\xbd\x13\x5e\xb7\xbd\x1a\x0f\x02\x10\x04\x41\x76\x40\x80\x80\x00\x01\x01\x02\x02\x04\x04\x08\x08\x10\x10\x20\x20\x40\x40\x80\x80\x00\x01\x01\x02\x02\x04\x04\x08\x08\x10\x10\x20\x4d\xff\x9d\x75\x68\x6b\x6d\x02\x34\x8b\x43\x6b\xc7\xa8\xfe\xbd\x8c\xfe\x9d\x0c\xba\x26\x8d\xfd\xd0\x2b\xfa\xaf\x9e\xc7\x61\x7c\xe5\x63\x0f\x96\x1d\x9a\xc7\x61\x0a\xa5\xa1\xbf\x1a\x9f\x39\x26\x76\x7b\xed\xc3\x33\x63\x65\x05\x8d\x95\x15\x34\x56\x4f\x41\x53\x45\x74\x07\x23\x32\x27\xd1\x34\x25\x32\x47\xd1\x11\x34\xd1\x04\x91\x51\x9e\x73\xda\x09\x6a\x62\x19\xfd\x63\xd3\x68\x7f\xbd\xaf\x26\xcf\x8e\x1b\x8d\x09\xb8\x7e\x76\x5c\xff\x9b\xeb\xab\xbd\xad\xed\xcc\xa2\xf6\xf9\x24\x28\x16\x0b\x11\x8b\xa8\x1c\x61\xca\x45\x3b\xd9\x1c\xf9\x45\xa5\xf7\x58\x7e\x7d\x8f\xc3\xb6\x09\x80\x4e\x00\x9d\x00\x3a\x01\x74\x5a\x33\xd0\x69\xa2\x67\xa0\x53\xdb\x6b\xd2\x34\xfb\x99\x00\xf6\x03\xec\x07\xd8\x0f\xb0\x1f\x60\x3f\xdd\x67\x3f\x13\x80\x6a\x56\x21\xaa\x99\xe8\x75\x54\x33\x71\x09\xa2\x9a\xa9\x5f\x45\xa7\x18\x88\xb8\x1d\x1d\xa5\x20\xe2\x10\xba\x15\xdd\x52\x09\x44\xe4\x28\x34\xe0\x5b\xfd\x5c\xf9\xde\xbc\x1e\x04\xf1\xab\xd7\xa5\x2b\x43\x36\xea\xeb\x99\x28\xa4\x58\x5b\x14\x72\x42\x3f\x5e\xa7\x28\xa4\xbc\x8e\xaa\x44\x84\x3e\x07\x32\xbf\xb0\xb1\x1a\xd1\x78\x36\x5b\x2f\x0c\x2b\x0d\x5e\x6c\x67\x5f\xae\x00\xbe\x60\xb4\xe1\x24\x9a\x46\x53\x7a\xdf\xac\x67\x2f\xf7\xd3\xff\x37\xb4\xec\x18\xda\xdb\xec\x0b\x9c\x78\x6b\x06\xbd\x25\xa3\xff\x4e\xa6\xff\x4d\x19\xd1\x87\x7f\xa2\xd1\xf9\x89\xcf\xd6\xc3\x54\x89\x95\x27\x7b\x32\x36\x23\xc6\x76\x08\xc2\xb2\x22\xd6\xc1\x2c\x36\x8a\xa4\xa9\x89\x59\x96\x33\xc6\x5d\xc3\x71\xd9\xde\xdc\xf3\x8d\x92\x2b\xb7\xf7\xb6\x61\xfb\xcb\xa7\x4b\xae\x61\x3b\x3e\x26\xe3\x0c\xcb\x3d\x23\x9d\x33\xc8\xda\xca\x37\xcd\xc2\x44\xe6\xdb\x14\x63\xae\xe4\x53\x33\xac\xe8\x7b\x79\x1c\x04\x7c\x5a\x55\xac\xc9\x9c\x71\x27\xbd\x23\x35\x6f\xe9\xaa\x45\xe6\xd4\xf1\x42\x61\x8c\x2e\x71\xb6\xbf\x6c\xf8\x25\x97\x6c\x9f\xc8\xc0\x14\xeb\x3a\x2f\x0e\xdb\xe6\x06\x56\x35\x15\x18\xbf\x36\x83\x8e\xb3\x11\x73\x04\x4d\xd0\x11\x73\x0b\x6a\xa1\xc1\x99\x32\x6b\x07\x55\x66\x6d\x3c\xcc\x0c\x93\x16\x4b\x7c\x2e\x29\x71\xa7\x3e\x85\x6e\x47\x9b\xc6\xf3\x79\x5c\x6c\xbd\xc8\xe6\x87\x74\xd1\x5b\x91\x21\x9d\x7d\x4d\x55\x48\x39\xc4\x8c\x3d\x23\xef\x15\xc8\xd6\x8d\xaf\x07\x29\xc3\x7b\x8c\x5d\x58\x71\x78\xcb\xdf\x77\x7c\xa0\x03\x56\x04\xac\x08\x58\x11\xb0\x22\x60\x45\xc0\x8a\x80\x15\x01\x2b\x02\x56\x04\xac\x08\x58\x11\xb0\x22\x60\x45\xc0\x8a\xbd\x87\x15\xe7\xd1\x34\x83\x24\x93\xe8\x30\x85\x24\x07\xd0\x7e\xb4\xaf\x09\x7d\xd3\x99\xd0\x0a\x4b\x41\x4d\x00\x91\x4d\x07\x10\xcf\xd0\xaf\x62\xf3\x6f\xb4\xd1\x5f\x01\x18\xb1\x72\xb1\x10\xed\x16\xc1\xea\x6f\x19\x44\x13\x2d\xc8\xc7\x44\x4a\xfb\x2f\x0e\xe8\x9f\x5c\x57\x0d\xd0\x6c\xa1\xd3\x4a\x7c\x77\x9e\x26\x1d\x23\x97\xad\x14\x7b\x9d\x9a\x6b\x2f\x09\xac\xd5\xc7\x9f\x93\xde\xc7\x37\xe8\x7d\xf3\x78\x25\x18\x5b\xff\x6b\xaa\x62\xf3\xad\x3e\x2e\x16\xac\x3c\xae\xfd\x16\x77\xf0\x2b\x01\xa2\xaf\x15\x88\xfe\x61\xad\xd7\x21\x7a\xf3\x83\xb1\x58\x5a\x11\xe0\xfd\xf9\x2b\xab\xfa\xb0\x38\xf0\x4e\xf7\x61\xd5\x80\xdc\x9d\x1e\x7e\x67\xd1\x69\x34\xa3\x0e\xbf\xec\x04\x3a\xd4\x84\xad\x70\x84\x3e\xc6\x29\x8a\xc1\x03\x18\x84\x35\x06\xe1\xc4\x13\x19\xf4\xcd\x8c\xfe\x78\xa6\xff\x6b\xb2\x81\x3e\x90\x39\xab\x1a\xb3\x8e\x6b\x04\xcc\x20\x35\x66\xf1\x9c\xc7\xb6\x72\x62\xbf\x15\xf9\x19\xf8\x16\x97\x56\xb1\x84\x19\x39\x9e\x25\xe6\xa3\x3b\xe2\xe2\x79\x8b\x36\x04\xb7\x67\x89\xe5\x2c\xf0\x3a\x23\x2f\xf2\x15\xf0\x1e\xea\x2c\x2e\x62\xdb\xb1\x42\x5c\x58\xe6\xb8\x5a\x75\x46\xb8\x4e\x61\x98\x9b\xb9\x74\x3b\x64\xcc\xfb\x64\x89\x29\x62\xdf\xf1\x6c\x69\xae\x47\xab\x4d\xb8\x5c\x8c\xb6\xfb\xa5\x80\x54\x52\xdd\x48\x59\xe4\x97\xe2\x81\xf8\x4d\xe6\x18\x83\x10\x45\xe4\x58\x3d\x17\xb1\xe5\xa6\xd6\xd1\xd4\x69\x15\x66\x68\x0d\xd2\xcc\xf7\xc7\x32\xe8\xf3\x19\xfd\xb3\x99\xfe\x4f\xcb\x66\x7e\x28\x73\x44\xc9\x53\x51\x24\x3b\x17\x2c\x81\xd1\x8c\xef\x15\xad\x79\xfa\x02\x66\xbc\x82\x93\x5f\x1e\x66\x6d\xc0\x10\x89\x78\x96\x28\xd1\x05\x79\x4b\x3b\x72\x7b\x72\xc6\x19\xf6\x42\x58\xeb\x14\xb1\x6b\x93\x4d\xb0\x64\x8f\xd8\xf0\xfc\xe2\x82\x45\xf6\xb6\x06\xb7\x3f\x47\xe7\xac\x82\x60\xf5\x26\xfb\xd6\x34\xe6\x1c\x97\x1a\x92\xbe\xbc\x95\x65\xdb\x94\x25\x8c\xb2\x6d\x81\x1d\x6d\x3b\x59\xe1\x43\x41\xf4\x23\x46\xc7\x73\xc6\xa4\x43\xbb\xb3\x52\x71\xcf\x2f\x7f\x32\x8a\x8a\x98\xa3\x8a\xc1\x79\x3a\xd8\xbc\x70\x21\x67\x5e\xc9\xea\x73\x44\x3c\x48\xa0\xda\xb5\x13\xf7\xf5\xa1\x7b\xfb\xf4\x7b\xfa\xfa\x9f\x92\x3b\xf1\xaf\x90\x9d\x38\xbd\x29\x19\x52\x0b\xde\x92\x31\x6f\xf9\xb3\x64\xc7\xaa\x38\xf9\xe4\xb8\xc0\xfe\x9c\xe7\x2f\x92\xb6\x48\xad\xe9\xa9\xc4\xcd\x2b\x57\x94\xf6\x67\xd1\x19\x8b\xec\xa9\x1c\xd2\x51\xf2\x8e\x1d\x61\x70\x4a\x54\xa9\x53\x42\xb6\x2e\xd9\xd5\x72\x8b\x5e\x30\xd3\x9c\xd2\x8c\x82\xb6\x89\xbd\xc0\x08\xef\x90\xf9\xc4\xcd\x72\x06\x73\xf1\x52\x82\xa7\x4e\x0e\x43\xec\x19\x86\x8c\x11\xfe\xe2\xe3\x1d\x23\xd8\x6f\x0c\x4d\x58\xf9\xf3\x64\x09\x72\x6d\x72\x95\x55\x28\x78\x4b\xf4\xa2\x44\xc3\x31\xc4\xcd\xbb\x7e\xbc\x10\xf1\x04\xb3\xb2\xa4\xfd\xc6\xd0\x51\xcf\xc7\x4a\xb1\x46\xde\x0a\xf2\x16\x59\x36\x44\xfb\xd0\xc9\x96\x95\x17\xb0\xd9\xab\xac\xc0\x39\x59\x46\xce\xbc\xaa\x98\xec\x37\xaa\x29\xf1\x51\xad\xcd\x5b\xcd\xd3\xcc\x7d\x7e\x1c\x1d\x53\xdc\xe7\x1d\xde\xbe\x1a\xe9\xd6\xc4\x66\x7d\x23\x6b\xa6\x15\x30\x28\x26\xde\x5a\xd5\xba\xdf\x11\x6d\x5d\x19\x39\xa8\x6d\xe6\x8f\x16\x2b\xa4\xd5\xe9\xb8\x95\xf1\xec\x64\x41\x23\xb4\x2a\x37\xd2\x08\xae\x6b\xd5\x2f\x17\xb1\x3f\x8f\xd5\x6f\x6f\x50\xbf\x0d\x42\xdf\x0a\xf1\xbc\x93\x1f\x49\x5e\xd7\xe8\x16\xa2\x4a\x97\x99\x21\x85\x82\xf5\x52\x6b\x0b\xd1\xe5\xcd\x77\xe5\xf3\xd7\x8a\xec\xfc\xb5\xee\x53\xa5\x83\xe8\x80\xbe\xdf\xdc\x27\xcf\x58\xb8\x4e\x3d\x96\xa1\xbc\x84\xf2\x43\x1a\xda\x4e\x87\xfe\xe7\x71\xb4\xbb\x09\x3a\x14\xe8\x0f\x1e\xd7\x3f\x58\x55\xb0\xb3\xad\xee\xa8\xc2\xec\x50\x9d\xe1\x84\x10\x47\x08\x82\x1f\x10\xfc\x80\xe0\x07\x04\x3f\x20\xf8\x01\xc1\x0f\x08\x7e\x40\xf0\x03\x82\x1f\x10\xfc\x80\xe0\x07\x04\x3f\x20\xf8\x01\xc1\x4f\xa3\x82\x9f\x3c\xba\x9d\xe1\x98\x71\x74\x90\xe2\x98\x7d\x68\x0f\xba\xa9\x61\x1c\xd3\x96\x00\x42\xa7\x36\x8a\x39\xaa\x1f\x69\x1c\xc5\xa4\x44\x0e\xbe\xad\x2a\x24\x7d\x66\x5a\xe4\x60\x76\x5b\xdd\x21\x83\x6d\xf6\xb3\xde\x86\x26\xd1\xe1\x04\xa3\xdc\x85\x76\x34\xce\xcc\x00\x4e\xd6\x80\x93\xff\xa2\xa1\x23\x6c\x38\x1c\x40\xfb\xe9\x70\xb8\x09\x35\xd3\xd2\xe8\x18\x13\x36\x4c\xa0\x43\x91\xb0\xa1\xc9\xa2\xa6\x98\x5f\xe3\x30\x1a\x57\xfc\x1a\x4d\x96\xd5\x6a\x3c\x60\xf7\x46\x68\xf6\xc7\x46\xb5\x11\x6a\xd4\x0a\x04\xcc\xee\x6a\x22\x02\x10\x42\xff\x80\x04\x02\x09\x04\x12\x08\x24\x10\x48\x20\x90\x40\x20\x81\x40\x02\x81\x04\x02\x09\x04\x12\x08\x24\x10\x48\xe0\xaa\x27\x81\xbd\x1c\xfa\xd7\x3d\xee\xb0\x8a\x62\xfe\xde\x3c\xd0\x54\xca\x78\x19\xec\xf7\x65\x53\x7f\x7b\xd5\x60\xbf\xeb\xaa\x07\xfb\x65\x87\xea\x8c\xf2\x6b\x73\x78\xdf\x8b\xda\xc4\xf0\x5a\x8c\xeb\xeb\x5e\x9f\xed\xff\xc6\x86\x6a\xaf\xe9\xfa\x9a\x01\x7d\xd9\x6c\xfd\x91\x7c\xc0\xb6\x2f\x51\xb6\xfd\xae\x1e\x64\xdb\x2d\x46\xeb\x75\x11\x47\x7f\xa4\x6a\x98\xde\x33\xd3\xc2\xf4\xb2\xdb\xea\x8e\xcf\x83\xc0\xbc\x55\x30\xc2\x20\x30\x0f\x02\xf3\x20\x30\x0f\x02\xf3\x20\x30\xef\x52\x08\xcc\xeb\x9e\xed\x30\x71\x4f\x55\xb1\x49\xb6\xfe\x88\xbc\xec\xd6\x7a\x43\xf1\x20\x06\x0f\x0c\x95\xca\x5b\x81\x6e\xed\x90\x6b\x06\xdf\x75\x91\xeb\xec\x45\x37\xeb\xbb\xcd\x9d\x32\xea\xee\xea\x0a\x51\x77\x5d\x08\xb7\xfb\xee\x34\x3a\x5e\x2f\x98\x21\x95\x09\x8a\x56\x5e\x60\x19\xfa\xf7\x4b\x47\x63\x67\xfb\x3d\x38\xad\x7f\xbc\x95\x28\xbc\x58\x4e\x9f\x6a\x51\x78\x27\x45\x05\x6c\x38\xd7\x0f\x54\x38\xa0\xc2\x01\x15\x0e\xa8\x70\x40\x85\x03\x2a\x1c\x50\xe1\x80\x0a\x07\x54\x38\xa0\xc2\x01\x15\x0e\xa8\x70\x40\x85\x03\x2a\x9c\x15\x8a\xc7\x6b\xf7\x81\x7e\x6d\xa5\x33\xd5\x4f\xf2\x7b\x67\x9d\xf1\x78\x2a\xaa\xd8\x55\x3d\x1e\xaf\xb3\xb0\xa2\x0d\xea\x05\xc8\x3c\xdc\xad\xc8\x3c\xb5\xef\xb5\xa8\x5e\x50\x8b\x6a\x35\x32\xaf\x9d\x27\xf5\x75\x6f\xac\x66\x9f\x6a\x22\x32\x4f\x1d\xb7\x07\xea\x8d\xcc\xeb\xc6\x08\x06\x3a\x08\x74\x10\xe8\x20\xd0\x41\xa0\x83\x40\x07\x81\x0e\x02\x1d\x04\x3a\x08\x74\x10\xe8\x20\xd0\x41\xa0\x83\x40\x07\x7b\x8f\x0e\xae\x99\x18\xbd\x1e\x3d\x97\xef\x1c\x7a\xa1\xfe\x7c\xf3\x79\x52\x44\x36\xc6\x27\x49\xaa\x25\x23\xaf\x98\x3c\x92\x11\xe4\xbd\x22\x1e\x36\x82\x52\x9e\x8e\x17\xda\xdb\xb1\xb5\xc8\x3a\x4c\xd1\xf7\xe8\xa4\x6c\x6e\x96\x72\xae\x8e\x8a\xcd\x1e\x19\x44\xa7\xdb\x28\x36\x13\xc1\x81\xdf\x18\xd0\xdf\xdb\x70\x70\x60\xe2\xf0\xb8\xca\xc1\x81\x5d\x20\x3f\x2d\x89\x20\xdb\x78\xfc\x5f\xf7\x86\x4d\xff\x77\x9b\x09\x13\x54\xdf\xd9\xee\x1a\x61\x82\x80\xdc\x57\x13\x72\x6f\x29\x60\xb0\x43\xc8\xbd\x97\x02\x06\xab\x53\xf2\xbf\xac\x33\x60\x30\xe6\xd1\xaa\x4e\xc6\xbb\x31\xbc\x20\x74\x10\x42\x07\x21\x74\x10\x42\x07\x21\x74\x10\x42\x07\x21\x74\xb0\x0b\xa1\x83\xd5\x0f\xf3\xfb\x8d\x96\x42\x07\x55\xdb\x62\x67\xd5\xd0\xc1\x0e\x9b\x16\x10\x44\xb8\xea\x4c\x96\xae\xed\x9f\xbb\x1b\x44\x58\x1d\x3c\x55\x0d\x22\xac\x7a\x66\xdf\x25\x48\x8e\x5e\x3e\x8d\x8e\xb4\x81\x1c\x05\xfa\x87\x8f\xeb\xbf\x5f\x35\x3e\xd1\xac\x1d\x9f\x98\xcd\xd6\x1f\x98\x08\x11\x89\xa0\x39\x02\xcd\x11\x68\x8e\x40\x73\x04\x9a\x23\xd0\x1c\x81\xe6\x08\x34\x47\xa0\x39\x02\xcd\x11\x68\x8e\x40\x73\x04\x9a\x23\xd0\x1c\x35\xaa\x39\x7a\x3e\x1a\x67\x9c\x67\x0c\xed\xa5\x9c\x67\x27\xda\x8e\x72\xf5\x73\x9e\xb6\x84\x22\xce\xd6\x66\x3c\x07\xf5\x03\x0d\x30\x9e\x94\x18\xc4\x9f\x54\x95\x47\x5c\x1e\x8b\x41\xcc\x0e\x37\x12\x7c\xd8\x66\x1f\xed\x21\x74\x2b\xba\x25\x81\x3a\x87\x51\xb6\x01\xf4\x06\x70\xb3\x06\xdc\xfc\xa6\x86\x0e\xb0\x5e\x7f\x33\xda\x4d\x7b\x7d\x0e\x35\xd4\xc4\x68\x82\x89\x1e\xf6\xa3\x7d\x91\xe8\xa1\xd1\x32\x0e\x33\xf7\xc7\x2d\x68\x4c\x71\x7f\x34\x5a\x48\xab\x91\x85\x5d\x18\x7a\xd9\xef\x56\x0d\x29\xbc\xa6\x62\x48\x61\xf6\xe6\xe6\x62\x09\x21\x88\x10\x80\x1e\x00\x3d\x00\x7a\x00\xf4\x00\xe8\x01\xd0\x03\xa0\x07\x40\x0f\x80\x1e\x00\x3d\x00\x7a\x00\xf4\x00\xe8\xad\x7a\xa0\xd7\xcb\x41\x84\x5d\x80\x0d\x10\x3d\xd8\x80\x06\xec\xe1\x81\xb6\xa4\xaa\x97\x61\x83\xff\x9f\xa9\xdf\x5f\x35\x6c\xf0\xea\x0a\x61\x83\xd9\x6c\xfd\xf1\x82\x6d\x0e\x14\xfc\xe5\x56\x51\x60\x8b\x11\x82\x5d\x18\x13\xfd\x9f\xac\xca\xbe\xfb\x2b\x87\x06\x66\x47\x1a\x8a\x09\x04\x12\x7e\xa9\x91\xf0\xff\xd2\x13\x24\xbc\xc5\xb8\xbf\x6e\x30\xec\xf7\x56\x0d\xf8\xbb\x3c\x16\xf0\x97\x1d\x6e\x24\xd2\x0f\x42\xfc\x56\xc1\x40\x82\x10\x3f\x08\xf1\x83\x10\x3f\x08\xf1\x83\x10\xbf\x4b\x21\xc4\xaf\x0b\x06\xc3\xc4\x0f\xab\xda\xdc\x03\x75\xc4\xf6\x65\x6f\x6c\x20\xa8\x0f\xa2\xf9\xc0\x3a\xa9\x6c\xe6\x77\x7c\x93\x5b\x33\x8c\xaf\x1b\xe8\x67\x07\x1a\xd5\x47\xcc\x1b\x25\x81\xb9\x32\x19\xbf\xb7\x2a\x02\xf7\x3e\x33\x80\x76\xd7\x0b\x6d\x62\x07\x09\xbe\x61\x40\x7f\x53\x5f\x9b\x0e\x12\xdc\x53\x2d\x5e\x4f\xb9\xf0\xa8\xe7\x8f\x17\x0a\x72\xaa\x0a\x7a\x3c\x78\x6f\x8d\x1e\xd0\x30\x05\x12\x27\x90\x38\x81\xc4\x09\x24\x4e\x6b\x46\xe2\x34\xd5\x33\x12\xa7\x95\x73\x58\xf5\x8c\xb6\x6a\x0a\xb4\x55\xa0\xad\x02\x6d\x15\x68\xab\x40\x5b\xd5\x7d\x6d\x55\xdb\x37\xa8\x53\x20\xd6\x5a\x85\x62\xad\xa9\x5e\x17\x6b\x4d\x5d\x82\x62\x2d\xfd\x8f\x06\xd0\x48\x23\x2c\x27\xd0\x7f\x64\xea\x3f\xad\x2a\xb1\xa9\x27\xdb\xd2\xf6\x5a\xf4\xe6\x52\xc3\x36\x6b\x25\x8a\x15\x40\x0d\x80\x1a\x00\x35\x00\x6a\x00\xd4\x00\xa8\x01\x50\x03\xa0\x06\x40\x0d\x80\x1a\x00\x35\x00\x6a\x00\xd4\x00\xa8\x01\x50\xd3\x41\x50\xf3\xd1\x41\x34\x5e\x2f\xa8\xa1\xbf\x1e\xcd\x17\x4a\x41\x48\x76\x2c\x8a\x02\xe7\xc7\x03\xfa\x93\x55\x15\x38\xff\x99\x2f\x37\xae\xed\x5c\x70\xec\x92\x55\x50\x5b\xc3\x92\xa6\xdd\x61\x56\xb6\xa2\xe9\xc8\x29\x1a\xe6\x31\xb9\xf8\x0f\xd1\xe2\x86\xa2\x2d\x75\x6c\x8f\xe4\x15\xb1\x94\xa6\x07\x21\xb6\xec\x5c\x76\xd7\x52\x35\xc5\x61\xf9\x6d\xa7\x9d\x20\xec\x75\x36\x74\x1e\xcd\x30\x36\x74\x0c\xdd\x46\xd9\xd0\x38\x3a\x88\x0e\x34\xa1\x35\xa4\x5d\x74\x92\x18\x67\x35\x51\xd1\x40\x3a\x2a\x7a\x9a\x8e\x68\xc5\x18\x2f\x2a\xd6\xe6\x45\x27\xf4\xe3\x75\xf2\xa2\xf2\x77\x03\xf4\x08\xe8\x11\xd0\x23\xa0\x47\x40\x8f\x80\x1e\x01\x3d\x02\x7a\x04\xf4\x08\xe8\x11\xd0\x23\xa0\x47\x40\x8f\x80\x1e\x01\x3d\xea\x2a\x3d\x7a\x64\x0b\xba\xbd\x65\x7a\x24\x92\xec\x7c\x77\x50\x7f\xef\xfa\x6a\x10\xe9\x23\x1a\x7f\x37\x0a\x3a\x72\xc5\x44\x23\x74\x40\x1d\x42\x48\xc3\x91\x7d\x41\x6d\x28\xbe\x1a\x11\x13\x25\x32\x9c\x86\x62\x46\xb2\x52\x76\x2e\x3b\xda\x20\x80\x02\xf8\xd4\x48\x2c\xe6\x12\x8b\xc5\x04\xf0\x04\xe0\x09\xc0\x13\x80\x27\x00\x4f\x00\x9e\x00\x3c\x01\x78\x02\xf0\x04\xe0\x09\xc0\x13\x80\xa7\xce\x80\xa7\x83\xe8\x80\xbe\xdf\xdc\x27\x53\xac\x5c\xa7\x66\x65\x29\xdf\x3d\x94\xe7\x68\x01\x72\x05\xe4\x0a\xc8\xd5\xca\x90\xab\xb7\x0d\xa2\xb1\xa6\xc9\x55\xa0\x7f\x63\x40\xff\x56\x55\xc1\xd3\x52\xc3\x82\xa7\x36\x29\x9d\x86\xeb\x05\x4d\x20\x71\x6a\x41\xe2\xd4\xd6\x14\x46\xca\x4b\x01\xc4\x04\x88\x09\x10\x13\x20\x26\x40\x4c\x80\x98\x00\x31\x01\x62\x02\xc4\x04\x88\x09\x10\xd3\x9a\x45\x4c\x40\x88\x80\x10\x01\x21\x5a\x19\x42\xf4\xc6\x2d\x2d\x44\xc6\x49\x51\xd3\xe7\x07\xf5\xdf\xad\x2a\x6a\x7a\xb8\x41\x51\x53\x4f\xa8\x99\xb6\xd6\x0b\x99\x00\x30\x35\x21\x63\x02\xb8\x04\x70\x09\xe0\x12\xc0\x25\x80\x4b\x00\x97\x00\x2e\x01\x5c\x02\xb8\x04\x70\x09\xe0\x12\xc0\xa5\x36\xc3\xa5\xbd\xe8\x66\x7d\xb7\xb9\x53\xea\x97\xae\xae\xa0\x5f\x02\xe1\x12\x60\x29\xc0\x52\xbd\x82\xa5\xfe\x60\x0b\x7a\x6e\x63\x58\xaa\xca\x01\xf7\x32\x81\xd3\xe7\x06\xf5\x1f\xb4\x43\xcf\xd4\xfe\xcc\x4d\x37\x57\x45\x4d\xf1\xb3\x22\x21\x79\x53\x8f\x29\x9b\x20\x78\x0e\xe0\x13\xc0\x27\x80\x4f\x00\x9f\x00\x3e\x01\x7c\x02\xf8\x04\xf0\x09\xe0\x13\xc0\x27\x80\x4f\x97\xe2\xf9\xe4\x00\xa9\x00\x52\x01\xa4\xaa\x0f\x52\xfd\xf6\x0d\xe8\x97\xdb\x0e\xa9\x84\xa4\xea\xd1\x2d\xfa\x1f\xb6\x2e\xa9\xea\xb5\x04\x51\x3b\x1b\xe7\x5c\xc0\xb8\x56\x5a\x5c\x05\x7c\x0b\xf8\x16\xf0\x2d\xe0\x5b\xc0\xb7\x80\x6f\x01\xdf\x02\xbe\x05\x7c\x0b\xf8\x16\xf0\x2d\xe0\x5b\x35\xc4\x55\x55\xb3\x42\x01\x19\x03\x32\x06\x64\x6c\xb5\x92\xb1\x57\x6e\x41\x53\x6d\x23\x63\x81\xfe\xc8\xa0\xfe\xd5\xaa\xba\xad\x62\xfd\xba\xad\x36\x09\xb6\xaa\x67\x3a\x8f\x83\x2c\x50\x6a\xb5\xa0\xd4\x9a\xad\x4d\xb2\x0e\xea\x07\x1a\x20\x59\x80\xb0\x00\x61\x01\xc2\x02\x84\x05\x08\x0b\x10\x16\x20\x2c\x40\x58\x80\xb0\x00\x61\x01\xc2\x5a\xb3\x08\x0b\x40\x14\x80\x28\x00\x51\xab\x15\x44\xfd\xa8\x9d\x71\x84\x52\x9b\xf5\xd6\x2d\xfa\xeb\xab\x6a\xb3\xde\x5d\xaf\x36\xab\x27\x44\x59\x37\x36\xc0\xb2\x80\x63\x35\xa1\xc6\x02\x86\x05\x0c\x0b\x18\x16\x30\x2c\x60\x58\xc0\xb0\x80\x61\x01\xc3\x02\x86\x05\x0c\x0b\x18\x16\x30\xac\x76\x31\xac\x1d\x68\x54\x1f\x31\x6f\x94\x0c\xeb\xca\xa4\x0c\x0b\xf4\x57\x80\xbd\x00\x7b\xad\x1d\xec\xf5\xbe\x86\xcf\xfd\x8b\xe5\xc9\xfa\xe1\x80\xfe\xe3\xde\xcc\x93\x75\x4b\x55\x54\x95\xc8\x8e\x75\xd4\xf3\xc7\x0b\x05\xc9\xaf\x02\x60\x57\x90\x2d\x0b\x30\x16\x60\x2c\xc0\x58\x80\xb1\x00\x63\x01\xc6\x02\x8c\x05\x18\x0b\x30\x16\x60\x2c\xc0\x58\xbd\x81\xb1\x80\x18\x01\x31\x02\x62\xb4\x32\xc4\xe8\x81\x41\xb4\xab\x71\x62\x14\xe8\x5f\x1b\xd0\xbf\xd1\x63\xa1\x79\x37\xd5\x64\x44\x00\x87\x20\x40\x0f\xa8\x10\x50\x21\xa0\x42\x40\x85\x80\x0a\x01\x15\x02\x2a\x04\x54\x08\xa8\x10\x50\x21\xa0\x42\x40\x85\x80\x0a\x01\x15\x02\x2a\xc4\xa9\xd0\x3f\x64\xd0\x2f\x32\x2a\x14\xe4\x17\xb0\x5d\x2a\x10\x43\x89\xd3\x20\xfd\xaf\x32\xfa\x5f\x66\x10\x8a\xbe\xe9\xef\x9f\xc7\xa1\xe1\xb8\x73\x9e\xbf\x28\x9b\xd1\x32\xe8\xd6\x3f\xfb\x0b\xf3\x38\x3c\x23\x2f\x1d\x9f\x39\x76\x1b\xf9\xb8\x6d\xd4\x65\xac\xac\xa0\xb1\xb2\x82\xc6\xea\x29\x68\xca\x41\x27\x19\x68\xb9\x0d\x4d\x52\xd0\x72\x10\x1d\x40\xfb\x9b\x00\x2d\xe2\x19\x6b\x61\x16\xfd\x9e\x75\xc8\xa8\xd4\xca\x82\xb9\xe9\x5f\xcf\xe8\x5f\xcd\x20\x3d\xba\x42\x12\xb6\xab\x49\xab\xc7\x0c\x0a\xd6\x5f\xb2\x46\xac\xc9\x39\xff\x1a\x9f\x39\x26\x76\xcf\xed\x63\x5e\xed\x6b\xfd\x22\xba\x83\xb5\xfe\x49\x34\x4d\x5b\xff\x28\x3a\x82\x26\x9a\x6b\x7d\xf1\x9c\xd3\x4e\x50\x93\x75\xe9\x7f\x75\x1c\x8d\xd6\x7a\x09\x45\xdf\xf1\x7c\x27\x5c\xce\x17\xac\x20\xc0\x81\x7e\xff\x71\xfd\xdd\xd7\xa7\xbe\x93\x1b\xd9\x76\xc4\xe7\x2b\x88\x58\x69\x45\xe8\xe7\x0c\x2f\xe8\x30\x29\x28\x6b\x92\x8b\xcb\x5e\x54\xec\x9a\x1e\xa7\x93\x13\x00\xe8\x00\xd0\x01\xa0\x03\x40\xb7\x66\x00\xdd\x44\xcf\x00\xba\xb6\xd7\xa4\x69\x4e\x36\x01\x9c\x0c\x38\x19\x70\x32\xe0\x64\xc0\xc9\xba\xcf\xc9\x26\x00\x6b\xad\x42\xac\x35\xd1\xeb\x58\x6b\xe2\x12\xc4\x5a\x0d\x6a\x69\x72\x0a\x10\xe0\xfb\xfb\x5c\x6c\x73\x5e\x0f\x5f\xf8\xd5\xeb\xd2\xb5\x34\x1b\xf5\xf5\x4c\x46\x93\xaf\x2d\xa3\x39\xa4\xdf\xca\x65\x34\x65\x88\x82\xcb\x67\x62\xd5\x2a\xd7\xd1\x98\xef\xdb\x98\x4a\x2b\x9e\xc5\x16\x07\xc3\x4a\x80\x89\x41\xf6\x79\x97\xd0\x04\x23\x09\xa7\xd0\x09\x74\x5c\xef\x9b\xf5\xec\xe5\x7e\xfa\xff\x86\x96\xdd\x8f\xf6\x35\xfd\x72\x26\xde\x9a\x41\x6f\xc9\xe8\xbf\x93\xe9\x7f\x53\x46\x74\xd0\x9f\x68\x74\xf2\xe1\x53\xf1\x30\x15\xa7\xe5\xc9\x86\x8b\x4d\x77\x31\xf3\x5f\x98\x4d\x64\xe9\x9f\xc5\x46\x91\xb4\x29\xb1\xb9\x72\xc6\xb8\x6b\x38\x2e\xdb\x78\x7b\xbe\x51\x72\xe5\xde\xdd\x36\x6c\x7f\xf9\x74\xc9\x35\x6c\xc7\xc7\x64\x10\x61\xb9\x21\xa4\x13\x02\x59\x38\xf9\x8e\x58\xd8\xbf\x7c\x0f\x62\xcc\x95\x7c\x6a\x63\x15\x7d\x2f\x8f\x83\x80\xcf\x99\x8a\xa9\x98\x33\xee\xa4\x77\xa4\xb6\x2b\x5d\x92\xc8\x84\x39\x5e\x28\x8c\xd1\xf5\xcb\xf6\x97\x0d\xbf\xe4\x92\xbd\x11\x19\x75\x62\xd1\xe6\xc5\x61\xdb\xdc\xc0\xaa\xa6\x92\xf3\xd7\x67\xd0\x34\x1b\x0e\x93\xe8\x30\x1d\x0e\x07\x50\x2b\x2d\x8e\x9e\x4b\x4a\xdb\xa1\x4f\xa1\xdb\xd1\xc6\xc3\xcc\xec\x68\xb5\xc8\xd3\xa4\xc8\x9d\xfa\x71\x74\x0c\x6d\x1a\xcf\xe7\x71\xb1\x0d\x65\x36\x3f\x62\x8b\x5e\xb7\x46\x6c\xf6\x5b\x46\xea\x88\x35\x99\xe1\x66\xe4\xbd\x02\xd9\x86\xf1\xb9\x3d\x3e\x7a\x73\xec\x9a\xb2\xd1\x7b\x58\xfe\xa6\x93\xe3\x18\x88\x20\x10\x41\x20\x82\x40\x04\x81\x08\x02\x11\x04\x22\x08\x44\x10\x88\x20\x10\x41\x20\x82\x40\x04\x81\x08\x02\x11\xec\x3d\x22\x38\xdf\x10\x02\xa9\x22\x3b\x3a\x13\x5a\x61\xa9\x36\x5b\xc8\xa6\xb3\x85\x67\xe8\x57\xb1\xf9\x37\xda\xd7\x77\x87\x33\xac\x5c\x94\x47\xbb\xe5\xbd\xfa\x3f\x0f\xa2\x9b\x1b\x14\x72\x89\xbc\xfe\x8f\x0c\xea\x0f\xac\x4f\xe5\x2d\x06\x9d\x36\xe2\xbb\xef\x84\x88\x8b\x5c\xd1\x55\x52\xfa\x32\xf4\x52\xfd\x25\xfd\xcb\xa2\xe5\x5e\x70\x86\x59\x73\xd4\x22\xbc\x9b\x5a\x56\xb3\xe4\x2f\x2b\x1f\xe6\x0c\x63\x92\xfc\x57\x7c\xbe\x68\x39\x6e\x68\x39\x6e\x60\xe4\x0b\xa5\x20\xc4\xfe\x08\x7f\xaa\x3c\xdf\x74\x18\x05\xe7\x3c\x36\x86\x64\x74\xec\x50\xce\x5c\x4f\x4b\x52\x5f\xdd\x44\x88\x7c\xbd\xd8\xef\x8a\x0a\x3c\x57\x56\x40\xe2\x98\x59\x51\x15\x6c\xd3\x3a\xd0\xbb\x93\x57\x55\x0c\xc4\x9d\xf8\x52\x5e\x0a\xc8\x0a\x6d\xb9\xcc\xa0\x62\x23\x37\x67\x6e\x60\xbf\x6e\x61\xa8\xb6\x8e\x01\x9f\x93\x3e\x54\x37\xe8\x7d\xf3\xb8\x4b\x14\xb0\xff\x3b\x1b\x52\x7b\xe5\x80\x8f\x8b\x05\x2b\x8f\xab\x76\xcc\x2d\xfc\x22\xa0\xf8\xab\x9a\xe2\x3f\xaa\xf5\x3e\xc5\x6f\x7e\xa8\x15\x4b\xdd\x02\xee\xef\xbc\x32\xdd\x45\xc6\x81\x7b\x99\x8b\xac\x02\x64\xef\xe4\xe0\x3a\x8b\x4e\xa3\x19\x75\x70\x65\x27\xd0\xa1\x26\x6c\x95\x23\xb4\xea\xa7\x28\x86\x87\x11\x56\x6b\x84\x4d\x3c\x91\x41\xdf\xcc\xe8\x8f\x67\xfa\xbf\x26\x1b\xe8\x03\x99\xb3\xaa\x31\xed\xb8\x46\xc0\x0c\x62\x63\x16\xcf\x79\x6c\x2b\x29\xf6\x7b\x91\x9f\x83\x6f\xb1\x69\x15\x4b\x98\x91\xeb\x59\x62\xbe\xba\x23\x2e\x9e\xb7\x68\x43\x70\x7b\x9a\x58\xee\x02\xef\x33\xf2\x23\x5f\x01\xef\x90\xce\xe2\x22\xb6\x1d\x2b\xc4\x85\x65\x8e\xcb\x55\x67\x88\xeb\x14\x86\xb9\x99\x4d\xb7\x63\xc6\xbc\x4f\xd6\x8b\x22\xf6\x1d\xcf\x96\xdb\x85\x68\xe9\x08\x97\x8b\x11\x6e\x28\x05\xa4\x92\xea\x46\xce\x22\xbf\x14\x0f\xc4\x6f\x32\xa7\x2c\xd9\x0e\xf9\x01\xad\xe7\x22\xb6\xdc\xd4\x3a\x9a\x3a\xad\xc2\x0c\xad\x41\xda\xf6\xe1\xb1\x0c\xfa\x7c\x46\xff\x6c\xa6\xff\xd3\xb2\x99\x1f\xca\x1c\x51\x12\x83\x14\xc9\xce\x09\x4b\x60\x35\xe3\x7b\x45\x6b\x9e\xbe\x80\x19\xaf\xe0\xe4\x97\x87\x59\x1b\x30\x44\x23\x9e\x25\xca\x2c\x42\xde\xd2\x8e\xdc\x9e\x9c\xa1\xd8\x4b\x36\x2e\x62\xd7\x26\x9b\x70\xc9\x3e\xb1\xe1\xf9\xc5\x05\x8b\xec\xad\x0d\x6e\x0c\x8f\xce\x59\x05\xe1\x2b\x30\xd9\xb7\xa6\x31\xe7\xb8\xd4\xaa\xf5\xe5\xad\x2c\xdb\xa6\x2c\x63\x94\x6d\x4b\xec\x68\xdb\xcb\x0a\x1f\x0a\xa2\x1f\x31\x3a\x9f\x33\x26\x1d\xda\x9d\x95\x8a\x7b\x7e\xf9\x93\x51\x54\xc5\x1c\x65\xcc\x39\x40\x07\x9b\x17\x2e\xe4\xcc\x2b\x59\x7d\x8e\x88\x07\x09\x62\x96\xda\x7d\x7d\xe8\xde\x3e\xfd\x9e\xbe\xfe\xa7\x24\x09\xf8\xca\xba\xbb\x38\xbd\x23\x43\x6a\xc1\x5b\x32\xe6\x2d\x7f\x96\xec\x98\x15\x9f\xa2\x1c\x17\xd8\x9f\xf3\xfc\x45\xd2\x16\xa9\x35\x3d\x95\xb8\x79\xe5\x8a\xd2\xfe\x2c\x3a\x63\x91\x3d\x95\x43\x3a\x4a\xde\xb1\x23\x0c\x4f\x89\x2e\x75\x8a\xc8\xd6\x0d\x68\x68\x11\xfd\x56\x30\xdb\x9c\xd2\x8c\x82\xf6\x89\x8d\x49\x64\xd1\xc6\x6f\x96\x33\x98\xfb\x98\x12\x44\x75\x72\x18\x62\xcf\x30\x64\x8c\xf0\x17\x1f\xef\x18\xc1\x7e\x63\x68\xc2\xca\x9f\x27\xab\x8b\x6b\x93\xab\xac\x42\xc1\x5b\xa2\x17\x25\x1a\x8e\x21\x76\xde\xf5\xe3\x85\x88\x27\x98\x95\x25\xed\x37\x86\x8e\x7a\x3e\x56\x8a\x35\xf2\x56\x90\xb7\x6c\xf2\xf4\xbc\x7d\xe8\x64\xcb\xca\x0b\xd8\xec\x55\x56\xe0\x9c\x2c\x23\x67\x5e\x55\x4c\xf6\x1b\xd5\x4e\xf8\x68\x63\x76\x42\xed\xad\x6e\xe3\xae\xf9\xd6\xb7\xcf\x46\xba\xa1\xb0\x59\xdf\xc8\x9a\xa9\x3b\xb6\xc2\xc4\x93\xe9\x66\xf9\x70\xb4\x67\x66\x94\xa2\xaa\x7d\x3e\x50\xb4\xc2\xfc\x42\xb7\x0c\x88\x67\x27\x0b\x1a\xa1\xb7\xbf\x91\xc6\x6c\x5d\xab\x7e\xb9\x88\xfd\x79\xac\x7e\x7b\x83\xfa\x6d\x10\xfa\x56\x88\xe7\x9d\xfc\x48\xf2\xba\x89\x93\x68\x1a\x4d\x25\x6c\xff\x31\xb4\xb7\x89\xde\x30\x43\x0a\x05\xc3\xa4\x96\xe9\xdf\xed\x1d\x71\xe5\xf3\xee\x8a\xec\xbc\xbb\xae\x10\xab\x31\xb4\x57\xbf\xd9\xdc\x2d\x4f\xb0\xb8\x46\x3d\xf4\x22\xf6\xe3\xf2\xd3\x2f\xda\x0e\x9d\x5e\x33\x88\x6e\xaa\x05\x9d\x58\xda\xb4\x64\x0c\xe1\x17\x06\xf4\x2f\xf5\xa5\x4e\x23\xcb\xf5\x65\x4e\x8b\x3d\x6a\x9b\x52\xa8\xb1\x1f\x54\x9f\x93\xa6\x9d\x20\xec\xf1\xb0\xc4\xde\x4d\x9a\xd6\x95\x11\x02\x12\x2c\x90\x60\x81\x04\x0b\x24\x58\x6b\x46\x82\x05\x59\xd3\x20\x6b\x1a\x68\xbf\x40\xfb\x05\xda\x2f\xd0\x7e\xad\x6d\xed\x17\x64\x4d\x03\x31\x19\x64\x4d\x5b\xa1\xac\x69\x2f\xdf\x82\x6e\x69\x0a\x06\x09\x1d\xd2\x27\x07\xf5\x57\xa7\xeb\x90\x3e\xa4\xf1\x17\xa1\x90\x20\x57\xcc\x2a\xa9\xd9\xa5\xda\x42\x84\x86\x23\x3b\x82\xda\x4a\x7c\xd5\x21\xa6\x48\x64\x20\x0d\xc5\x8c\x61\xa5\xec\x5c\x76\xa0\x0e\x9e\x04\x2c\xa9\x11\xd2\xba\xd4\x45\xd2\x0a\x1c\x09\x38\x12\x70\x24\xe0\x48\xc0\x91\x80\x23\x01\x47\x02\x8e\x04\x1c\x09\x38\x12\x70\xa4\xb5\xc1\x91\x7a\x49\x65\x01\x0c\x0a\x18\x14\x30\xa8\xfa\x18\xd4\x57\x33\xe8\x17\x38\x83\x62\xfd\x46\xa6\xed\xff\x64\x46\xff\x78\x06\x6d\xe4\x1f\x57\xcd\xd9\xaf\xcf\xe3\xf0\x0c\xbb\x0e\x12\xf6\x2b\xb9\xe2\xbf\x1b\x1d\x8b\x10\x6f\xdc\x0b\x3b\x46\xf5\xbf\xce\xe8\x17\x33\x08\xf1\x6f\x5e\x74\xa1\x4a\x82\xfe\x5f\x8c\xda\xf7\x4e\x48\xcc\x5f\xa1\xb1\x3f\x31\x85\x6e\xa8\xd4\xd8\xfc\x13\xa1\xa5\x7b\xe3\x94\xfe\xaa\xeb\x63\x4d\x9f\xad\x9e\x87\x9f\x37\x3e\x13\xe2\x5e\x43\xd3\xf0\x8b\xd7\xa1\x7e\xd5\xe3\x68\x12\x72\x6d\x01\xa0\x03\x40\x07\x80\x6e\xed\x00\x3a\xc8\xb5\x05\xb9\xb6\x80\x93\x01\x27\x03\x4e\x06\x9c\xac\x27\x38\x19\xe4\xda\x5a\x8d\x68\x0a\x72\x6d\x75\x22\xd7\xd6\x2c\xba\x8d\x91\x84\x43\xe8\x56\x4a\x12\xf6\xa2\x9b\xd1\xee\xca\xe1\x8a\x7c\xd7\x4f\xa3\x83\xa3\x3d\x79\x5b\x92\xee\x3f\xaf\xb6\x7c\x66\x8f\x7e\x93\x90\xcf\xc4\xf0\x03\xd7\xce\xa8\x55\x52\xa5\x33\xc8\xfc\xe1\x86\x18\x89\xf8\x05\x99\x63\x3f\x06\x1d\x9e\xcd\x53\xec\x77\x14\x3b\x30\x4a\x40\x81\x4d\x22\x2e\x77\x27\xda\xde\x68\xc3\x43\x3c\x6e\xad\x78\xdc\xff\xab\xa1\xc3\xac\x87\xdf\x82\xc6\x68\x0f\xdf\x8d\x9a\x68\x68\x74\x3b\xcb\xc0\x33\x8e\x0e\x46\x19\x78\x9a\x2b\xe9\x18\x8b\xd1\x9f\x40\x87\x94\x18\xfd\xe6\x8a\x6a\x35\x6b\x7e\x07\x87\x5c\xf6\xa2\x11\x1b\x72\xd7\xa7\x26\xc9\x8f\x0d\xbf\x2d\x3c\x7d\x8f\x18\x7e\x51\x6e\xfc\x0e\x0e\x44\xc0\x75\x80\xeb\x00\xd7\x01\xae\x03\x5c\x07\xb8\x0e\x70\x1d\xe0\x3a\xc0\x75\x80\xeb\x00\xd7\x01\xae\x03\x5c\x07\xb8\xae\xf7\x70\x5d\x2f\xa7\xc6\xef\x20\x4c\x58\x45\x19\xf1\xff\x66\x00\x8d\xd4\xa7\xa0\x12\x01\xa8\xbf\x37\xa0\xff\xa0\x2f\xc6\x52\x7e\x29\x25\x01\x7e\x5c\x3d\x45\xf3\xdf\x77\x01\x63\xae\xd1\xb4\xf7\x2f\x6c\x0f\x53\x6c\x31\xdb\x7d\x07\x07\x5c\xff\xc3\x71\x60\x6e\xa6\x27\xb7\x8f\x75\xba\x6b\x45\x6e\x7b\xc0\xe7\xab\x07\x9f\xbf\xa3\xe7\xf0\x79\x8b\x79\xeb\x3b\x89\xbc\x5f\x7f\x65\xdc\xcb\x24\xd3\xd4\xc7\xbd\x4c\x09\xcc\xdd\xc1\x61\x02\xc9\xe9\x21\x39\x3d\x24\xa7\x87\xe4\xf4\x90\x9c\x1e\x92\xd3\x43\x72\xfa\xf4\xe4\xf4\x1d\x34\x08\x26\xbe\x1c\xb7\xa2\x6f\xac\x91\x8b\x3e\x66\x26\xf4\xb3\x54\xf4\x9d\xb5\x12\x20\x03\xfd\xaa\xb3\x3e\xba\xb5\x39\xad\x99\x78\xbe\x93\x3c\x68\x1f\xda\xa3\xdf\x64\xee\x92\x91\xd0\xbf\xa8\x46\x42\xab\x3f\xeb\x42\xba\xf9\x27\xa7\xd0\xb6\x4a\x44\xe7\x82\x57\x28\x2d\x62\x2b\x0c\xad\xfc\xc2\x22\x99\x86\xf5\xcf\x4d\xe9\xbf\x1d\x0f\x8b\xcb\x55\x0f\x8b\xbb\x93\x16\x31\x2e\x8b\xc8\x3e\x27\x16\x1a\x97\xfc\x1a\xc2\xe3\x40\x6f\x03\x7a\x1b\xd0\xdb\x80\xde\x06\xf4\x36\xa0\xb7\x01\xbd\x0d\xe8\x6d\x40\x6f\x03\x7a\x1b\xd0\xdb\x80\xde\x06\xf4\x36\xa0\xb7\x69\x54\x6f\x33\x87\x8e\x33\x96\x72\x04\x4d\x50\x96\x72\x0b\xaa\xc2\xae\x54\x96\x92\xdc\x97\xb7\x25\x44\xee\x85\xb5\x91\xca\x7e\x7d\x5f\x35\xa4\x92\xac\x56\x3c\x4c\xee\x37\x36\xc6\xc8\xc4\x35\x32\x4c\xae\x0c\x42\xfc\x52\x22\x54\xae\x63\x18\x82\x51\x83\x29\x74\x3b\x3a\x9a\x80\x88\x75\xc6\x29\x26\x6b\x06\x00\xb1\x16\x40\x7c\x4a\x6b\x3a\x28\xb4\xac\x7b\x4d\x33\xbf\xff\x24\x3a\x1c\xf9\xfd\x9b\x2f\xed\x04\xf3\x20\x1c\x45\x47\x14\x0f\x42\xf3\xc5\xb5\x1a\x3e\xd7\xe1\xe1\x98\xfd\x72\x3c\x84\x6e\x4b\x6a\x08\x5d\xd9\xd0\xdc\x56\x31\x8c\xae\xc3\x83\x14\xd0\x1e\xa0\x3d\x40\x7b\x80\xf6\x00\xed\x01\xda\x03\xb4\x07\x68\x0f\xd0\x1e\xa0\x3d\x40\x7b\x80\xf6\x00\xed\x01\xda\xeb\x3d\xb4\xd7\xcb\xa1\x74\x1d\x06\x0b\xab\x28\x9c\xee\xc1\x41\xb4\xbd\x6e\xf1\x95\x88\xa8\xfb\xd6\x80\xfe\x54\x3c\xa2\x6e\x20\x25\xa2\xae\x5c\x78\x15\x8b\xaa\xeb\x30\x4c\x59\xa3\x91\x75\xcd\xe7\xa3\x6b\x98\xee\xd5\x88\xae\xeb\xf0\x18\xec\xbf\x18\xd7\x06\xdf\x90\x1e\x61\x57\xd6\x09\x8d\x64\x94\x1d\x90\xf7\xd5\x43\xde\xdf\xdf\xb3\xe4\xbd\xc5\xa8\xbb\x4e\x93\xf2\x07\xe3\x91\x77\xd7\xc8\xc8\xbb\x72\xc7\x55\x82\x8e\x77\x78\xf8\x40\x04\x1e\x44\xe0\x41\x04\x1e\x44\xe0\x41\x04\x1e\x44\xe0\x41\x04\x5e\x7a\x04\x5e\x87\x8d\x83\x89\x6f\xc7\x2d\xed\xd1\x1a\x51\x78\x65\x26\xc3\x75\xf1\x48\xbc\xce\x59\x0c\x10\x8d\xb7\xea\x2c\x91\x6e\x6e\x68\x6b\x46\xe4\x75\x1a\x2b\x1d\x40\xfb\xf5\x7d\xe6\x1e\x19\x95\x77\xad\x1a\x95\x97\xfc\x69\x17\x22\xf3\x3e\xae\xa3\x3d\x8d\xc2\xa1\xd1\x80\x4e\x6b\xfa\xcb\x75\xfd\x77\xd6\xc5\xe6\x0d\xc6\x91\xd9\xd7\xe2\xa1\xaa\xcc\x1a\x03\x55\x69\x11\x9b\x3c\xdb\xbb\xd9\x58\x43\xf0\xe4\xab\xf1\x29\x7d\xbb\x80\x27\x75\xbf\x9d\x1b\x6a\x61\x94\x4e\xbc\x20\x80\x29\x00\x53\x7a\x1f\xa6\x4c\xfc\x4b\x7c\x70\xed\x2b\xb3\x97\xea\x1e\x65\x83\xd5\x2d\xa7\x76\x8f\x31\xb0\x9f\x56\xdf\x28\x06\xfb\x69\xe5\xec\xa7\x6f\x0f\xa0\xe1\x4a\xf6\x13\x75\xa8\x26\xcf\xfc\xfd\x93\x01\xfd\xd1\xb8\x63\xed\x6e\x2e\x8e\x71\x6d\xe7\x82\x63\x97\xac\x82\xea\x0c\xb6\xa4\x10\x4d\x4d\xd9\x90\x53\x00\xd0\x98\x44\x47\x43\xb4\xa0\xa1\x48\x81\x1b\x93\x54\x7a\x45\x2c\xb9\x5e\x10\x62\xcb\xce\x65\xaf\x5b\xaa\x98\x3f\x65\xda\x09\x7a\x3d\x4f\xc2\xd4\x79\x34\xc3\xfa\xfd\x31\x74\x1b\xed\xf7\xe3\xe8\x20\x3a\xd0\xc4\x3c\x43\xdd\xf0\x93\x17\xea\x19\x00\x03\xe9\x03\xe0\x69\x3a\xa2\x15\xeb\xf8\x31\x4d\x53\xa0\x20\x07\x05\x39\x28\xc8\x41\x41\xbe\x66\x14\xe4\x53\x3d\xa3\x20\x5f\x39\x4d\x50\xcf\x48\xd7\xa7\x40\xba\x0e\xd2\x75\x90\xae\x83\x74\x1d\xa4\xeb\xdd\x97\xae\xb7\x7d\xf7\x3a\x05\x5a\xf8\x55\xa8\x85\x9f\xea\x75\x2d\xfc\xd4\x25\xa8\x85\xd7\xff\x7e\x10\xed\x6a\x04\xf4\x08\x21\xf5\xdb\x07\xf5\xef\xc7\x79\xcf\x07\x35\xde\xee\x0a\xe5\x71\xc5\x24\x22\x52\x5a\xb6\x9d\xf6\x0c\x47\x56\x03\xb5\x8c\xf8\x1a\x43\x0c\x8f\xc8\x1c\x1a\x8a\x99\xbe\x4a\xd9\xb9\x6c\x7f\x65\x56\x04\x9c\xa8\x11\x50\xba\xd4\xf9\xd4\xaf\xc0\x88\x80\x11\x01\x23\x02\x46\x04\x8c\x08\x18\x11\x30\x22\x60\x44\xc0\x88\x80\x11\x01\x23\x5a\x1b\x8c\xa8\x87\x8e\x7d\x00\xbc\x04\x78\x09\xf0\x52\x7d\x78\xe9\xc7\x03\x68\xb4\x3a\x5e\x2a\x3f\x27\xe5\xcf\x07\xf4\xbf\x8a\xa3\xa5\xff\x54\x9f\x94\x28\xa9\x93\x6a\x93\x9c\xc8\x5c\xaa\x2a\x65\x04\x49\x51\x0b\x92\xa2\x4e\xeb\xea\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x20\x23\x40\x46\x80\x8c\x00\x19\x01\x32\x02\x64\xb4\x36\x90\x11\x70\x1f\xe0\x3e\xc0\x7d\x56\x86\xfb\xfc\x60\x10\xdd\xdc\x20\xf7\x11\xca\xa2\x0f\x0d\xea\x4f\xc6\xf1\xcf\x23\xf5\x28\x8b\x3a\x02\x7f\x5a\x55\x17\x5d\x57\x1d\x1d\x01\x36\x6a\x42\x61\x04\xc8\x08\x90\x11\x20\x23\x40\x46\x80\x8c\x00\x19\x01\x32\x02\x64\x04\xc8\x08\x90\x11\x20\x23\x40\x46\xed\x40\x46\x3d\x96\x86\x05\x88\x13\x10\x27\x20\x4e\xf5\x11\xa7\x9f\x66\xd0\x73\x2a\x10\xa7\x59\x1c\x5a\x3b\x46\xf5\xaf\x64\xf4\x2f\x66\xd0\xd3\x23\xb0\x44\x3f\xef\xbf\x7a\x1e\x87\xf1\x35\x92\x3d\x43\xf6\x39\xf3\x38\x94\xe8\x86\x5e\x3b\x3e\x73\x4c\xec\x06\xdb\x98\xbb\xac\xac\xa0\xb1\xb2\x82\xc6\xea\x29\x68\xaa\x88\xee\x60\xb8\xe6\x24\x9a\xa6\xb8\xe6\x28\x3a\x82\x26\x9a\xc0\x35\xca\x73\xd6\x73\x78\xb5\xfe\x9a\xe3\xe8\xc6\xaa\x6d\x9f\x48\x16\xf5\xd5\x29\xfd\x2d\xd7\x97\xbf\x89\x2c\xb3\xab\x7d\x3e\x97\x89\x25\x23\x2d\x76\x30\x7b\x1d\xb9\x36\xfe\x76\x2e\xa1\xd8\x3d\x38\x30\x17\x20\x13\x40\x26\x80\x4c\x6b\x07\x32\xc1\x81\xb9\x70\x60\x2e\xb0\x1e\x60\x3d\xc0\x7a\x80\xf5\xf4\x04\xeb\x81\x03\x73\x57\x23\x5b\x81\x03\x73\x57\xfe\xc0\x5c\x25\x13\x37\xdd\x97\xe7\x92\x09\x98\x6b\x6a\x40\xae\x4b\xd7\x80\x6c\xd4\xd7\xb3\xa8\xa1\x17\xd5\x96\x80\xdc\xa2\x8f\x35\x93\x64\x86\x56\x18\x99\x0f\x6c\x2c\xa7\x13\xbf\xc0\x56\x04\xc3\x8a\x83\x08\xbe\x50\x74\x01\x45\x30\x72\x70\x1c\x1d\x43\xb7\x25\xd2\xd0\xef\x41\x37\x35\xf5\x32\x20\x07\x7d\xad\x1c\xf4\xf7\x64\xd0\xed\xac\xeb\x8f\xa3\x83\xb4\xeb\xef\x43\xcd\xb6\x36\x3a\xc1\x8e\x92\x38\x8a\x8e\x44\x47\x49\xb4\x50\xdc\x49\x76\xa4\xd7\x6d\x68\x52\x39\xd2\xab\x85\xf2\x9a\x1f\x95\x45\xaf\x1b\xa3\x32\xfb\x77\x46\xf9\xa8\xbc\x9e\x9f\xe0\xa6\x1c\x87\x97\x48\x2a\x9f\xcd\x26\xce\xfd\xa4\x3f\x3c\x2c\xaf\xef\xe0\x58\x05\xca\x07\x94\x0f\x28\x1f\x50\x3e\xa0\x7c\x40\xf9\x80\xf2\x01\xe5\x03\xca\x07\x94\x0f\x28\x1f\x50\x3e\xa0\x7c\x40\xf9\x2e\x75\xca\xd7\xfa\xf1\xe0\xd9\x74\x9e\xf0\x0c\xfd\x2a\x36\xff\x46\x5b\xfa\xce\xb3\x85\x95\x8b\x3c\x68\xfb\xd1\x7d\xef\x1c\x44\x3b\x1b\x10\x63\x89\xb0\xcb\x7f\x1e\xd0\x5f\xb1\xbe\x9c\xaf\xfc\x12\x9d\x2b\xe2\x5b\xee\xb8\x10\x2b\x76\xd8\x71\xa7\xe9\xe7\xcb\xd0\x4b\xf5\x97\xf4\x2f\x8b\xd6\x7a\xc1\x19\x66\xbd\x51\x0b\xf0\x6e\x6a\x49\xcd\x92\xbf\xac\x7c\x98\x33\x8c\x49\xf2\x5f\xf1\xf9\xa2\xe5\xb8\xa1\xe5\xb8\x81\x91\x2f\x94\x82\x10\xfb\x23\xfc\x81\xf2\x7c\x93\x61\x14\x9c\xf3\xd8\x18\x3a\x69\x2d\xe2\xa0\x68\xe5\xf1\x50\xce\x5c\x4f\x4b\x52\x5f\xd7\x44\x88\x7c\xbd\xd8\xef\x8a\x0a\x3c\x57\x56\x40\xe2\x97\x59\x51\x15\x6c\xd3\x3a\xd0\xbb\x93\xd7\x53\x0c\xc4\x9d\xf8\xd2\x5d\x0a\xc8\x8a\x6c\xb9\xcc\x80\x62\x23\x35\x67\x6e\x60\xbf\x8e\x75\x92\x7c\x1b\x29\x64\x8b\xe7\x3b\x77\x7a\x24\xf6\x7f\x61\x43\x79\x2f\x34\xc5\x29\xcf\x55\x3a\xe2\xf5\xc9\x73\x9d\x81\xc4\xaf\x26\x12\xff\xb0\xd6\xbb\x24\xbe\xc5\x53\x9d\x3b\x0e\xce\x7f\xef\xca\x14\x77\x16\x07\xe7\x49\x77\x56\x1a\x2c\xef\xe0\x20\x3a\x8b\x4e\xa3\x19\x75\x10\x65\x27\xd0\xa1\x26\x6c\x8e\x23\xb4\xda\xa7\x28\x4e\x87\xd1\x54\x6b\x34\x4d\x3c\x91\x41\xdf\xcc\xe8\x8f\x67\xfa\xbf\x26\x1b\xe8\x03\x99\xb3\xaa\x51\xec\xb8\x46\xc0\x0c\x5b\x63\x16\xcf\x79\x6c\x4b\x28\xf6\x6d\x91\xbf\x82\x6f\x95\x69\x15\x4b\x98\x11\xe8\x59\x62\x86\xba\x23\x2e\x9e\xb7\x68\x43\x70\xbb\x98\x58\xe0\x02\xd3\x33\x82\x23\x5f\x01\xef\x8b\xce\xe2\x22\xb6\x1d\x2b\xc4\x85\x65\x8e\xbd\x55\xa7\x86\xeb\x14\x86\xb9\xb9\x4c\xb7\x55\xc6\xbc\x4f\x96\x84\x22\xf6\x1d\xcf\x96\x66\x7f\xb4\x3a\x84\xcb\xc5\x08\x1b\x94\x02\x52\x49\x75\x43\x66\x91\x5f\x8a\x07\xe2\x37\x99\x53\x96\x62\x87\xfc\x80\xd6\x73\x11\x5b\x6e\x6a\x1d\x4d\x9d\x56\x61\x86\xd6\x20\x6d\x1b\xf0\x58\x06\x7d\x3e\xa3\x7f\x36\xd3\xff\x69\xd9\xcc\x0f\x65\x8e\x28\x79\x29\x8a\x64\x07\x84\x25\x78\x9a\xf1\xbd\xa2\x35\x4f\x5f\xc0\x8c\x57\x70\xf2\xcb\xc3\xac\x0d\x18\x6a\x11\xcf\x12\x25\xb6\x20\x6f\x69\x47\x6e\x4f\xce\x50\xec\x20\x1b\x17\xb1\x6b\x93\xcd\xb4\x64\x98\xd8\xf0\xfc\xe2\x82\x45\xf6\xc8\x06\x37\x6c\x47\xe7\xac\x82\x60\xfe\x26\xfb\xd6\x34\xe6\x1c\x97\x5a\xa8\xbe\xbc\x95\x65\xdb\x94\x49\x8c\xb2\xed\x85\x1d\x6d\x5f\x59\xe1\x43\x41\xf4\x23\x46\xd9\x73\xc6\xa4\x43\xbb\xb3\x52\x71\xcf\x2f\x7f\x32\x8a\x9c\x98\xc3\x8b\x41\x7e\x3a\xd8\xbc\x70\x21\x67\x5e\xc9\xea\x73\x44\x3c\x48\x10\xb3\xc0\xee\xeb\x43\xf7\xf6\xe9\xf7\xf4\xf5\x3f\x25\x77\xf4\x5f\x21\x3b\x7a\x7a\x53\x32\xa4\x16\xbc\x25\x63\xde\xf2\x67\xc9\xce\x57\x71\x0b\xca\x71\x81\xfd\x39\xcf\x5f\x24\x6d\x91\x5a\xd3\x53\x89\x9b\x57\xae\x28\xed\xcf\xa2\x33\x16\xd9\x53\x39\xa4\xa3\xe4\x1d\x3b\xc2\xe9\x94\xcc\x52\xe7\x86\x6c\x5d\xb2\x3b\xe6\x5b\x05\xc1\x5e\x73\x4a\x33\x0a\x6a\x27\x36\x19\x91\xa5\x1a\xbf\x59\xce\x60\x6e\x5f\x4a\x02\xd5\xc9\x61\x88\x3d\xc3\x90\x31\xc2\x5f\x7c\xbc\x63\x04\xfb\x8d\xa1\x09\x2b\x7f\x9e\xac\x28\xae\x4d\xae\xb2\x0a\x05\x6f\x89\x5e\x94\x68\x38\x86\xca\x79\xd7\x8f\x17\x22\x9e\x60\x56\x96\xb4\xdf\x18\x3a\xea\xf9\x58\x29\xd6\xc8\x5b\x41\xde\xb2\xc9\xd3\xf3\xf6\xa1\x93\x2d\x2b\x2f\x60\xb3\x57\x59\x81\x73\xb2\x8c\x9c\x79\x55\x31\xd9\x6f\x54\x9b\xe0\xa3\x5a\x9b\xb7\xac\xa7\x99\x4b\x9d\x58\x76\x91\x4b\xbd\xc3\xdb\x60\x23\xdd\x38\xd8\xac\x6f\x64\xcd\xd4\x79\xfb\x60\xe2\xbb\x29\x26\xf7\x8d\xd1\xc6\x97\x61\x86\x6a\xb6\xf7\x2f\x15\x63\x79\x6e\x3a\x68\x34\x3c\x3b\x59\xd0\x08\xbd\xf5\x8d\x34\x6e\xea\x5a\xf5\xcb\x45\xec\xcf\x63\xf5\xdb\x1b\xd4\x6f\x83\xd0\xb7\x42\x3c\xef\xe4\x47\x92\xd7\x4d\x9c\x44\xd3\x68\x2a\x61\xd7\x8f\xa1\xbd\x4d\xf4\x80\x19\x52\x28\x18\x23\xb5\x4c\xfb\x6e\xee\x6e\x2b\xa7\x17\x2a\xb2\xf4\x42\x1d\x27\x4d\x3d\x74\x92\x81\xfe\xa9\xe3\x28\x57\x95\x15\x95\x67\x67\xbf\xff\xb8\xfe\xee\x94\xd8\xbd\x5c\xf5\xd8\xbd\x64\xec\x74\xd6\x2c\x8f\xdf\xbb\xc4\xb2\x63\x81\xba\x07\xd4\x3d\xa0\xee\x01\x75\x0f\xa8\x7b\x40\xdd\x03\xea\x1e\x50\xf7\x80\xba\x07\xd4\x3d\xa0\xee\x01\x75\x0f\xa8\x7b\x40\xdd\xd3\x83\xea\x9e\xc6\x72\x39\x97\x41\x96\xb4\x53\xcf\x5a\x8e\xe3\xcb\xd7\x66\x2d\x87\xf4\x5b\x9b\x4d\xe5\xcc\x63\xf9\xde\x97\x12\xcb\x77\x8d\x8c\xe5\x2b\x03\x13\x83\x69\xf1\x7c\x1d\x43\x13\x8c\x24\x9c\x42\x27\xd0\xf1\x04\x71\x6c\x24\xc0\x32\x59\x3d\x40\x8e\xb5\x90\xe3\xeb\x33\xad\x85\xb4\x96\xf5\xbb\xe7\x32\x45\xc1\x14\xba\x3d\x52\x14\xb4\x58\x64\xe3\xce\x88\xda\x65\xb6\x1a\xe3\xd7\x8d\x11\x9b\xfd\x56\x4a\x9c\xdf\x96\xd4\x38\xbf\xb2\xd1\x9b\xab\x1e\xeb\xd7\xe1\x71\x0c\x44\x10\x88\x20\x10\x41\x20\x82\x40\x04\x81\x08\x02\x11\x04\x22\x08\x44\x10\x88\x20\x10\x41\x20\x82\x40\x04\x81\x08\xf6\x1e\x11\xec\xe5\x78\xbf\x6e\x70\x86\x55\x14\xf3\xf7\xa3\x41\x74\x53\x63\x3a\x2e\x11\xf6\xf7\xe8\xa0\xfe\x40\x4a\xd8\xdf\x40\x4a\xd8\x5f\xb9\x86\xab\x3c\xf4\xaf\xc3\x80\x65\x8d\x86\xff\xb5\x98\x7f\xaf\x61\x0a\x58\x23\x04\xb0\x1b\x83\xb3\xff\x3b\x29\x9a\xe4\x1b\xd2\xc3\x00\xcb\x3a\xe6\x96\xd4\x50\x40\x80\xf8\xab\x0c\xe2\x3f\xda\x98\xfc\x7f\x45\x20\x7e\x8b\xa1\x81\x5d\xe1\xed\xef\x4c\x09\x0f\xbc\x46\x86\x07\x96\x7b\xc8\xd2\x18\x7b\x87\x07\x17\x84\x09\x42\x98\x20\x84\x09\x42\x98\x20\x84\x09\x42\x98\x20\x84\x09\xa6\x87\x09\x76\xc3\x56\x98\x78\x32\xc5\x2c\x1f\xad\x11\x2a\x58\x66\x41\x0c\xa4\x84\x0b\x76\xce\x80\x80\x90\xc1\x55\x67\x98\x74\x7d\x47\x5c\x33\x6c\xb0\x2b\xc0\xaa\xc7\x8e\x27\xd5\x9f\x1c\x40\x3b\xaa\x62\x27\x0a\x1d\x93\xa7\xff\xfd\xb7\x01\xfd\x33\x7d\xe5\xb3\xc8\xdd\xdc\x8b\xe4\xda\xce\x05\xc7\x2e\x59\x05\x95\x9a\x5a\xd2\x63\xab\x46\x48\xe6\x14\x1b\x67\x4c\x5a\x47\x43\xb4\xa0\xa1\x48\xaa\x12\xd3\x1e\x78\x45\x2c\x4d\xd7\x20\xc4\x96\x9d\xcb\x0e\x2c\x55\x8f\x5e\x9e\x76\x82\x5e\x0f\x46\x6c\x50\xde\x59\x65\x02\xa2\xd0\x7a\xf2\x42\x3d\x83\x62\x20\x7d\x50\x3c\x4d\x47\xb4\x62\xdd\x39\xab\x61\x0a\x44\x57\x20\xba\x02\xd1\x15\x88\xae\xd6\x8c\xe8\x6a\xaa\x67\x44\x57\x2b\xe7\x41\xeb\x19\xb5\xd7\x14\xa8\xbd\x40\xed\x05\x6a\x2f\x50\x7b\x81\xda\xab\xfb\x6a\xaf\xb6\xef\x68\xa7\x40\x3e\xb6\x0a\xe5\x63\x53\xbd\x2e\x1f\x9b\xba\x04\xe5\x63\xfa\x0f\x07\xd1\xde\x86\xe1\x8f\x90\x1d\x7d\x70\x50\xff\xf7\x14\x06\xf4\x41\x8d\xbf\x01\x85\xfc\xb8\x62\x3a\x11\xb9\xa4\xda\x4e\x80\x86\x23\xfb\x81\xda\x48\x7c\xb5\x21\x26\x48\x64\x18\x0d\xc5\x8c\x60\xa5\xec\x5c\xf6\x97\x6a\xf0\x23\x60\x47\x8d\x00\xd5\xa5\x2e\xe5\x61\x03\x6e\x04\xdc\x08\xb8\x11\x70\x23\xe0\x46\xc0\x8d\x80\x1b\x01\x37\x02\x6e\x04\xdc\x08\xb8\xd1\xda\xe0\x46\x3d\x94\x83\x19\x90\x13\x20\x27\x40\x4e\xf5\x21\xa7\x57\x0f\xa2\xdd\x75\x20\xa7\xf2\xa4\xe5\x5f\x18\xd0\xbf\x94\x82\x9b\xfe\x53\x7d\x92\xa3\xa4\xb2\xaa\x4d\xb2\xa3\xa1\x14\x6c\x94\x96\x66\x0d\xf0\x51\x93\xd2\xa3\xae\x68\xf2\x00\x23\x01\x46\x02\x8c\x04\x18\x09\x30\x12\x60\x24\xc0\x48\x80\x91\x00\x23\x01\x46\x02\x8c\xb4\x36\x30\x12\xb0\x20\x60\x41\xc0\x82\x56\x86\x05\xbd\x62\x0b\xda\xdf\x0c\x0b\x12\x0a\xa4\xbf\x1c\xd4\x5f\x9d\x92\xf8\xe8\x91\x7a\x14\x48\x1d\x01\x42\xad\xaa\x90\xd2\xa2\xd8\x2e\xb1\x23\xf5\x7a\x53\x89\x04\x18\x09\x30\x12\x60\x24\xc0\x48\x80\x91\x00\x23\x01\x46\x02\x8c\x04\x18\x09\x30\x12\x60\x24\xc0\x48\x6d\xc3\x48\x3d\x96\xd6\x05\x28\x14\x50\x28\xa0\x50\xf5\x51\xa8\xdb\xd1\x86\xd1\x82\x37\x1f\x8c\xea\xb7\xea\xb7\xa0\x3e\xf2\x67\x56\x2f\x78\xf3\x47\x9d\x02\x9e\x76\x82\xf0\x76\xcb\xb5\x0b\xd8\x9f\xba\xa6\x16\x86\xd0\xef\xd1\xd0\xd3\x59\x51\x2f\x29\x78\xf3\x64\x1e\x78\xa9\xee\xe9\x7b\x79\x99\x57\xf0\x32\xeb\x2e\x6f\x6a\x17\xda\xa1\x8f\x9a\x23\x72\x52\x79\x3a\xf9\x7f\xd1\x78\x05\x6f\xde\xdc\xc8\x6f\xa3\x4c\x25\xfa\x5f\x6b\x68\xf3\x28\x1f\x98\xa3\xfa\x27\x34\xfd\x63\x1a\xda\xc8\xff\xdd\xff\xcc\x79\x2c\xf6\x85\xb6\x9c\x2c\xb3\x57\xcc\xe3\xf0\xb0\x67\xcb\x1e\x57\x46\x98\xc6\xca\x3e\x99\x3a\x87\x26\x19\xe6\xb9\x15\xdd\x42\x31\xcf\xcd\x68\x37\xda\x59\x1f\xe6\xe1\xf7\xcd\x1d\x73\xe7\xbc\x9a\x8d\xf0\x93\xcf\x6f\x41\x3f\x46\x68\x52\x49\x05\x66\xd9\x64\x97\xe2\x78\xae\x8f\xe7\x1d\x9a\xd2\x8d\x94\x26\x12\x83\x9d\x28\x85\x16\xb1\x00\xef\xc2\xb3\x0b\x9e\x77\xfe\xb0\xba\x99\xd7\xdf\x8d\xcc\x7b\xb4\x6a\x57\xc8\x4e\x19\x08\x8b\x46\xf9\x8e\x8e\x0c\xdb\x90\xf7\x37\x96\x58\x09\x7c\x91\xa4\x69\x04\x0d\x9a\x5e\x8d\x51\x0e\xd7\xe6\xb6\x18\x25\x08\xd1\x82\x94\xbb\xa8\xbd\x65\x13\x7a\x4f\x06\x21\xab\xe8\xf0\x56\xd7\xdf\x9a\x31\xdf\x90\x19\x9f\x39\x26\xb6\x6b\x0c\xe7\x04\xea\xb2\x86\x6d\x23\xc8\x2f\xe0\x45\x8b\x8d\x5d\x3a\xff\xf1\x25\x4d\xa9\xa0\xb8\x89\xb4\x07\xb9\xed\x99\xf7\xdc\x0b\xd8\x57\xf8\x8a\x28\x4d\x0e\x48\xbe\xe1\x26\x03\xda\x77\xad\x02\xb3\xd1\x87\xe5\x73\xf0\xc7\x8a\xa5\x9c\x63\x09\xe1\x72\xc6\x09\xba\x47\x70\xe7\xbc\x31\x83\xbe\xb7\xb1\xd1\xd1\x79\x27\x14\x40\x37\xef\x2d\x2e\x96\x5c\x27\x5c\x1e\x25\x66\x8a\xef\xcc\x96\x42\xcf\x0f\x46\x6d\x7c\x01\x17\x46\xad\xa2\x33\x42\xeb\xe6\xb2\xd1\xbb\x68\x0f\xc8\xf9\xe0\x61\x6d\x13\xe2\x9d\x1b\xbd\x23\x83\xfa\x28\xaa\x7b\x5b\xc6\xfc\xad\xcc\x71\xc7\xb5\xd9\xc6\x86\x7d\x2d\xb7\xb7\xbc\x41\xc8\x47\xe4\x99\x4e\x4f\x9e\x39\x2b\xe7\x01\xd6\x68\xdc\x2a\x90\x97\x06\x71\xd3\xd9\x71\xe7\x64\xaa\x50\xb1\x6a\x61\xd7\x2e\x7a\x8e\x1b\xaa\xd4\x24\x28\xcd\xd2\x49\x55\xd8\x5b\x46\xe8\xe5\x8c\xc3\x96\xcb\x53\xf6\x71\x63\x25\x67\x1c\x73\x8d\xc3\xd6\x22\x2e\x1c\xb6\x02\xdc\xee\x86\x0a\x97\x8b\x38\xa0\x00\x33\xd6\x54\x9f\xd0\xd0\x26\xb1\xdd\xd2\x1f\xd6\x9a\xe2\xaf\xa7\x68\x2b\x9d\xc0\xa1\x65\xbe\xf8\x4c\x68\xb9\xb6\xe5\x8b\xbd\x8e\xdc\xca\xed\x6f\xf3\xe3\xc8\x1c\xa9\xe8\xdf\x34\xb4\x89\x8f\xae\x40\xff\xbe\x66\x1e\xe3\x83\x35\x60\xef\x5c\x6c\xa4\xc5\x25\x72\x0b\x62\xcd\xcd\xe1\x7c\x58\xb6\xa4\x48\x54\x1f\xe4\x1e\xd6\x36\xa2\xf5\x96\xef\x5b\xcb\x8f\x6a\x13\xe8\x10\xba\xb5\x62\xca\xc1\xea\xf3\x0c\xaf\xd0\x93\xda\x10\xba\x36\x06\x97\x69\x3a\x41\x9e\x60\xf2\x3c\x5e\xd6\x37\xea\xeb\x89\xbd\x87\xc8\x95\xcf\x4e\xb9\x92\x27\xa5\x5c\xd6\x37\xe9\x1b\xe8\xaf\xd0\x93\xda\x2b\xb4\xda\xc4\xfa\x9c\xfe\xc2\x11\x83\x33\xeb\xf4\xaa\x72\x82\x6d\x18\x8c\x61\x57\x9b\xf7\x90\x61\x94\x11\x6d\xf4\xad\xcd\xe8\x58\x5b\xe6\x5d\xb2\x8e\xea\xbf\xbd\xd9\x3c\x5e\xeb\xa2\xf8\xdb\xad\x76\x75\xee\x41\x6d\x3d\xdd\x9b\x5f\xd4\x3e\xb8\x11\xe6\xd2\x06\xe7\xd2\x37\x69\x88\xb5\x9e\xfe\x5a\xcd\xdc\x32\x5d\x4f\x7b\xab\xe3\xe6\x2e\x74\x07\x3a\xd3\xe4\xb8\xa9\xda\x0b\x61\x8e\xaf\x7b\x8e\xff\xb8\x3a\xc7\xbf\x5f\x43\xfb\x9b\x98\xe3\xc9\x8b\x4f\xcc\xf0\x31\x54\xd7\xc1\x47\x79\x52\x7b\x55\x1d\x73\x9c\xad\xcf\xb6\x6f\x8e\xa3\x07\x9e\xa7\xcd\x73\xef\x43\x68\x7f\xdd\xfd\xf7\x74\xa9\x80\xef\x72\xc2\x85\x53\x72\x49\xd1\x7f\xb0\xd9\xbc\x47\x2b\xff\x9c\x75\xdd\xb0\x54\x2c\x50\x14\xa0\x7c\x41\x66\x01\xe1\x1e\x0a\x72\xc6\x31\xbe\x97\x25\xcd\x89\x5d\x96\x87\xdd\x58\xb4\xce\x63\x83\x43\x12\x8b\x31\x47\xca\x2c\x68\x71\xf8\xee\xa2\xe5\x06\xac\x2c\x1f\x33\xd7\x57\xee\xa2\xf6\xed\x4d\xe8\x43\x1a\xda\x6c\x15\x9d\xdb\x48\x9b\x05\xfa\x1f\x69\xe6\xab\xb5\xf1\x99\x63\xec\x9f\x94\x95\x2d\x60\x63\x7c\xe6\x18\x6b\xd4\x40\xec\x4d\xf9\x52\x39\x8b\xa9\xeb\x82\x74\xf2\xa1\xec\x10\xad\x7f\xa1\xc0\x2f\xa5\x34\x86\x7f\x2a\x53\x18\xd3\x99\x0e\xbb\xf3\xe1\x82\xd8\x4e\x06\x05\x27\x1f\x9d\x0e\xe0\xb9\x38\x67\x9c\xc6\x2f\x2e\x39\x3e\xb6\x63\x53\xc8\xe5\xe8\x32\xb5\x37\x7f\x4c\x43\x97\x45\x13\x78\xa0\xff\xb1\x66\xfe\xa6\x16\xcd\xe0\xb1\xaa\x5f\x10\x9f\xd5\x53\x79\x71\x71\x67\xab\xff\x45\x0d\xa1\xc8\xc6\xd0\x3f\xa5\x99\xef\xd0\xe2\x1d\x81\x5a\xff\xd1\x27\xd4\x56\x91\xfb\x08\xba\x89\xc8\x5b\x3e\xb1\x56\x66\xc9\x6e\x7e\xc4\x38\x7c\x7a\x72\xfc\xec\xe4\xb0\x71\xc7\xcc\x11\xfa\x5f\xcf\x37\xb2\x8c\xce\x17\x0a\xaa\x39\xd3\xd1\xc7\x7a\x73\x1f\xda\x2c\x1b\x58\xbf\xaf\xcf\xfc\xde\x3a\xd9\x6d\xe3\x4b\x75\xf4\x1a\xd8\x5a\x5a\x2a\x60\x83\x6e\x1a\xe9\x76\x3f\x87\xd0\x51\xcf\x37\xf0\xdd\xd6\x62\xb1\x80\xc7\x8c\xa1\xa2\x67\x07\x43\xfc\xb8\x05\xf2\x77\x8e\x7d\x44\x76\xcf\xe2\x63\xbe\xc9\x25\x53\xb0\x9c\xda\xbd\x39\x71\x75\x56\x5c\xc6\x58\x3c\xbf\x79\x94\xb6\x5f\xf9\x95\x2c\x3c\xf6\x1b\xf5\x02\xb5\xdc\xd1\x20\x6f\x15\x70\xec\x4a\xf2\x41\xb2\xc0\xec\x68\x7a\x0d\x84\x21\xea\xf8\xf1\x5f\x20\x74\x6c\xce\x58\x72\x0a\x76\x9e\x4c\xb2\xc9\x97\x45\xc7\x2f\x33\x3b\x68\xcb\x51\xde\xcb\x11\x69\x54\xb4\xed\xd1\x47\xf3\x2e\x60\xbf\x60\x15\x19\xbf\xc3\x56\x7e\xc1\xa0\x4e\xdb\x1c\x42\xec\x28\x03\xca\xd6\xb8\xbb\xc2\xcd\x17\x3c\x96\xce\x9b\xae\x87\xc3\xf1\xc7\x5e\x74\xe6\x17\x42\x91\x62\x9c\x9e\x0c\x40\xd6\xb2\x7a\x3a\xc6\xeb\xd6\xa1\x7d\x75\xcf\x98\x64\xe1\x75\xf2\xf8\x34\x9e\xc3\x3e\x76\xf3\x58\xff\x9b\x8c\xb9\x3f\xf9\xa1\xb1\xe0\x15\xa8\xab\xdb\x97\x9f\x84\x9e\xc1\xaf\xca\x15\xf0\xbc\x95\x5f\xe6\x93\xfd\x83\xda\x66\x57\x9c\xf1\xf5\xa0\x46\x61\xea\x45\xed\xdf\x34\x74\x08\xd1\xbf\xf5\xbd\xe6\x8d\xe7\xc8\x1f\xe7\xc4\xb8\x53\x61\x6c\xc0\x4b\x94\x8f\xa9\x3e\xd6\x29\x14\x95\xac\x4f\x98\x37\x9d\x93\xff\x8a\x95\x45\x3f\xa9\xab\xc0\x39\x44\xd1\x8d\xfe\x42\xf3\xb9\xe7\xc8\x1f\xb4\x18\x62\x56\x52\x25\x88\x55\x30\xee\x38\x3d\x6d\x50\xac\xc3\x7c\xdb\x02\xf4\x53\x4a\xcd\x21\xbf\x70\x07\x50\xc3\x92\xcb\x3d\xc8\x0d\xd5\xfb\xfc\xda\x65\xe8\xb6\xba\xdf\xc7\x9d\xbc\xb7\x55\x60\x24\x1f\x42\xe6\xab\xb5\xea\xd7\xb4\x9b\x92\x70\x6b\x4d\x38\x53\x28\x30\x21\xbd\xd6\x01\x54\x02\xa8\x04\x50\x09\xa0\x92\x2a\xa8\xe4\xde\x3a\xb6\x11\xb3\xfa\xb9\xc6\xb6\x11\xd5\xa7\xbf\xd4\x4d\xc4\x3f\x6d\x46\xc7\xdb\x34\x05\x53\x5c\xf2\xfb\x9b\xcd\x53\xb5\x2f\x8b\xbf\xe3\xea\xd7\x2b\xc8\xe4\x11\x40\x26\x8d\xce\xa9\xbf\x2b\x91\xc9\x6f\x6a\xe6\xd0\x74\x7d\x2d\xae\x8e\xa0\x5f\x41\x77\xa1\x3b\x9a\x1c\x41\x35\xfa\x23\xcc\xf7\x6b\x07\x9b\xbc\xba\x8e\xf9\x6e\x4e\xb7\xdb\x39\xdf\x55\x04\x27\xbf\xf5\x8b\x68\x7b\xa3\xab\x80\xfe\xf7\x57\x9b\x77\xf2\xbf\x15\x3b\xd2\x72\x53\x2c\xc6\xe4\xf9\x68\xc9\x15\xca\x70\x42\x75\x97\xc9\x37\x03\x0f\x6a\x4f\x63\xfd\x90\x3d\xc4\x45\xed\xbb\xcf\x42\x6f\xd5\x50\xec\x43\xfd\x75\x1a\x9a\x6a\x6d\x39\x3b\xac\x14\x67\x1e\x54\xff\x25\x27\xcf\x05\x6f\x89\x8a\x20\xd8\xfb\xce\x5b\x21\x8e\x04\x6e\xa4\x88\x68\xd3\x80\xde\xab\xa1\xcb\xe7\x2c\xa7\x50\xf2\x31\x3b\xfe\x4c\xff\x2f\x9a\xf9\x7a\xed\xa8\xfa\x51\xac\xdc\xd8\x3c\x48\xe5\xb7\xca\xa0\x8c\x9a\x52\x0e\x4f\xcb\xc7\xc6\x02\xf5\x3d\xdb\xe2\x1c\x38\xac\x1e\xe8\x64\x1c\x9b\x77\x49\xaf\xf5\x7c\x83\xdc\x34\x2e\xe3\x60\xdf\xc5\xb6\x1c\xff\x4b\xe3\xdb\xad\xc7\x35\xf3\x0b\xda\xd9\xc4\x36\xab\xec\x5d\xe6\x8c\x93\xe4\xeb\x48\xfb\x3e\x57\x2a\x14\x96\x8d\x17\x97\xac\x02\x57\x44\xe1\xdc\x7c\x6e\xd8\x70\x16\xad\x79\xcc\x4f\xbd\x53\x22\x0e\x1c\x6f\xd8\x58\x5a\xc0\x3e\x36\x4c\xe5\x0a\x33\x6d\x87\xc7\x6f\xc8\x16\x8e\x58\x11\x69\x57\x7b\xfe\xbc\xe5\x3a\xff\x91\xbd\x61\x75\xef\x1b\x3d\xe9\xd7\x37\xa3\xab\xe4\xb6\x4f\x48\x2f\xf5\xff\xbe\xb9\xa9\xe3\x4b\xa7\x55\xfd\xa6\x79\xcf\xe6\x93\xc9\x82\xf9\xa9\x82\x81\x94\xfc\x85\x1e\x3d\x5b\x4b\x79\x34\xb2\xbd\x8f\x42\x5a\xa4\xcc\x45\xfe\x20\xb6\x4d\x65\xc2\x10\x2b\x94\x06\x29\xb1\xa4\xf8\xc2\x2e\x84\xaa\x52\x76\xce\xaf\x71\xc2\x00\x17\xe6\xd8\x1a\x22\x4b\x62\xa8\x82\xfe\x9c\xee\xcd\x82\xe8\x80\x45\x72\x77\xbe\xec\xcb\x39\x50\x28\x59\x13\x25\x07\x52\x64\xce\x4f\xf1\x36\x82\xbc\x57\x54\xac\x50\xaa\x6d\x77\xf1\x05\xf2\xcd\x79\x87\x23\x4a\xd1\x89\x62\x1c\x69\xb8\x62\xd3\x2c\x4b\xd9\xd8\xd2\x02\x95\x41\xca\xd6\xe0\x3a\x42\x2b\x08\xbc\xbc\x43\xa5\x5d\x74\x40\x9a\x7e\xc9\x2d\x90\xe9\xd7\x24\xfd\xc2\xdc\x6e\x92\x61\x60\xee\x30\xf7\x1b\xc6\xb2\x57\x8a\x8b\x5c\xa5\xba\xd7\x0a\x8c\x39\x8f\x8c\xa3\x60\xcc\x30\xcb\x3a\x88\x39\x66\xbc\x04\x19\x86\x49\x1b\x6c\xf2\x6e\xb2\xa0\x52\x10\x69\x8e\x19\xff\x01\x19\x86\x41\xbf\x25\xff\x33\xcf\xe3\x65\x73\x4c\xa9\xc2\xb0\xf8\x82\x4d\x74\xb4\x28\xf3\xa4\x17\x1e\x73\xa3\xaf\xd8\xb8\x95\x65\xd1\xcf\xb6\xcb\xaf\x0d\x52\x77\xfe\xf7\x0b\xe8\x7f\x5f\x8a\xc8\x5f\x2f\xa5\x18\x8a\x47\x2b\xb1\x27\xb3\x5c\x4a\x16\xa8\x30\xb5\xf1\xb6\x4c\xb6\x23\x15\xb7\x63\xf7\x82\xe3\x7b\x2e\x95\xba\xd1\xe6\x2c\xfa\x9e\xcd\x5a\x34\x08\x2d\xb2\xb1\x37\xf7\x77\xaf\x59\xd5\xda\xa4\xb6\x6c\xad\x66\xa5\xb5\x57\x5a\x56\x3c\x43\x7a\xfb\x9e\xc1\x58\x2e\xf9\xb1\xc9\x67\xd4\xf6\xf2\x01\x59\xf0\xf3\xb8\x18\x06\xa3\xde\x05\xec\x5f\x70\xf0\xd2\xe8\x92\xe7\x9f\x77\xdc\xf9\x11\xd2\x7e\x23\xbc\xa9\x47\xd9\xe0\x19\xa5\x83\x97\x2a\x64\x79\x97\xa7\xa8\x92\x7e\x29\xdb\x2b\xa0\xe0\x8f\x9d\x16\xca\x0d\x69\xaa\xba\x35\x62\x33\x8d\x08\x9e\x10\xa3\x5f\xd1\x94\xa3\xef\xf7\xa1\xf5\x7e\xa9\x80\x03\xfd\x89\x3e\xf3\x55\x7d\xa7\xc9\x9f\xca\xca\x4c\x85\x70\xca\x9a\xeb\x71\x6d\x9c\x5c\x94\x47\x63\x50\x51\xed\x40\x0a\xd2\x66\x67\xa8\xa6\x7c\xc1\x70\x98\x8c\xa4\x9b\xa3\xa1\x2d\xbc\x96\x2f\xb2\xdc\xe5\x17\x19\xa4\x42\x39\xe3\x76\x6f\x09\xd3\xd0\x1b\xc7\x35\x3c\xdf\x66\x13\x63\xd1\x67\x8a\xec\xc8\x7e\x19\x17\x0b\xcf\x5d\xea\x7e\x57\xb8\x85\xca\xbf\xa5\x4b\x66\xb1\x14\x4a\xab\x58\x4c\x4b\x8e\x4b\x0d\x68\xba\x66\xd3\xa6\xcb\x4b\xfb\x95\x2c\xbc\x17\xa8\xcc\x9b\xfe\x5a\x62\x2b\x8f\xbc\xa2\x10\x17\x96\x0d\xdb\x09\xac\xd9\x82\x28\xb2\x58\x28\xcd\x3b\xee\x70\x0b\xb5\x24\xeb\x33\x9b\x13\xf3\x56\xa1\xc0\x26\xdc\x68\x89\x95\x66\x36\xe9\x2e\x35\xc8\x9d\x7a\x9f\xd4\x0b\x84\xf8\x56\xdd\xba\x9c\x40\xc7\xd1\xb1\x26\xad\xa5\x72\xbf\x18\xfa\xea\x3a\x74\x59\xe0\xd8\x78\x92\x12\x88\x40\xbf\xb8\xce\xfc\xd8\xba\x33\xd1\x07\xac\xd9\x95\x15\x90\x6c\x38\x78\xd7\x39\x6f\x2c\x58\x81\x41\x7e\x6d\x60\x76\x75\xc5\xc3\x71\xef\x70\xcf\xbb\xde\x92\x3b\x6c\x9c\xf4\x5c\x3c\x6c\x9c\xf1\x16\x31\xfb\xfb\x94\x7b\x84\x9d\x94\x29\xdb\x97\x4e\x5e\x6a\xa1\xc6\x89\x3b\xce\x9c\x35\x1c\xf2\x42\x99\x4c\x9e\xbe\x74\x37\xef\x14\x1c\xd6\x4c\xc1\x72\x10\xe2\xc5\x61\x23\xa0\x01\x79\x96\xa4\xb4\xfc\x0c\x61\xb6\x59\x65\x61\x36\x96\x31\x57\x0a\x4b\x3e\x36\x82\x10\x17\x45\x24\x41\xf4\xf6\xb8\x3c\x4c\x46\xcb\xa9\xb5\x20\x8f\xcf\xce\xe4\x76\x31\x73\x0b\x92\xed\x93\x6b\x4b\x0f\x0e\x7d\xed\x72\xea\xe5\x07\x80\x5a\x21\xdb\x54\x44\x72\x76\xab\x14\x7a\x23\xb2\x4e\xce\x1c\x13\x5e\xd3\x61\x66\x58\x72\x54\xca\x56\x10\xef\xe1\xc0\x01\xd1\x88\x64\xf6\x26\x0d\x18\x37\x0b\xf9\x97\x31\x6b\xe9\xdd\x57\xa0\x5b\x5a\x31\xa5\xf5\xef\x5e\x2e\xf7\x07\x31\xa3\x9a\xec\x95\x2c\x87\x7b\x86\xc8\xde\xca\x5f\x64\xaf\x42\x38\x4b\x2d\xe3\xec\xf4\x19\x72\x99\x2b\x0f\x82\xe6\xed\xc2\x1f\xf0\xa2\xf6\xfa\xcb\xd1\xa7\x34\xb4\x29\x6f\x4d\x94\x88\x25\xac\x7f\x58\xd3\xfb\x66\x97\x43\x6c\xbe\x5d\x3b\x27\x3e\x64\x8c\xde\x98\x99\x3c\x61\x60\x37\xef\xd9\xd8\x36\x0e\x8f\x1b\xb3\xf4\xbb\x04\xa6\xa7\x21\x2b\xa1\x27\xfc\x37\x58\xbd\xd9\x90\x0c\xcc\xcc\x63\x9f\xab\x53\x59\x48\x63\xc9\x95\x4a\xe7\x61\xde\x8f\x8c\xd0\xa7\xd1\x7c\x9e\x17\x06\xc2\x79\x43\xcc\x46\x1e\x9c\xe5\xf3\x63\xcd\xd5\x76\xfe\x5c\x06\x6d\xe4\xae\x00\xfd\x93\x19\x74\x5b\x93\xc3\x33\xe9\x87\x31\x7f\xa4\x9d\xe3\xc5\xf2\x86\x88\x39\x64\x14\x8f\x07\xb7\x2c\xa3\xa1\x29\x8f\xd9\x8e\x0a\xf0\x7c\xe3\x5c\xc9\x2f\x9c\x93\xae\xc7\xe8\xc4\x75\x6a\x8a\xa8\x8b\x05\x75\x1b\x32\x69\x38\x79\x71\x7c\x9c\xf0\xe9\x98\x4b\xa9\x89\xd5\xc0\xb7\x10\xa5\x00\x47\x37\xca\x21\x34\xe3\xf9\xa1\xb1\x7b\xf7\xae\xf8\xcb\x61\xeb\x89\x13\x90\x25\xc6\x1d\x66\x9e\xb2\x25\x27\xc0\xfc\x53\x71\x22\x6e\x0e\xfd\x68\x13\x5a\x57\xf2\x0b\xfa\x3f\x6e\x32\x1f\xdf\xc4\xea\x3c\xef\x5c\xc0\xc2\x0f\x99\x8f\x69\xa6\xe5\x16\xc3\xa1\x67\xde\x32\x04\x70\xc7\xe9\x69\xd2\x24\x8b\xc6\xd6\x73\x14\x6c\xe1\xb1\xd1\xd1\x05\x2f\x08\xc7\x8a\x9e\x1f\x8e\x52\xef\xcf\xb6\x9c\x31\x79\xb7\x95\x0f\x0b\xcb\x86\xe7\xd2\x2d\x08\xbb\x93\xa7\xb6\x59\x5a\x53\x91\xb5\xf3\x1c\x29\xec\x9c\x7a\x30\x30\x7d\x33\x3c\xd4\x9c\xbf\x13\xd1\x82\xf1\xd6\xdb\x2f\x63\x8e\xa2\xdb\xf0\xb8\x1a\x9e\xca\x90\xae\xce\xe4\x06\xdc\x29\x38\xcb\x36\xdd\x85\x0b\x64\x8f\xe8\x58\x06\xbe\x9b\x43\xb9\x23\x27\xcf\xd0\xa7\xf6\x16\x95\x1e\x1a\x18\x5b\xd9\xee\xed\x1c\x31\x79\x46\xe4\xe7\xe7\xc4\xa2\xc9\xcb\x32\x1c\x77\x44\xac\xaf\xa4\x20\x8b\x07\x19\x2c\x89\x4d\xa1\x65\x14\xac\x65\xcc\xa0\x95\xe3\x15\x68\xa3\x6f\xcb\x89\x47\xa7\xe1\x43\x85\x80\x4e\x82\x96\x6b\x1c\x9b\x31\x2c\xdb\x26\x06\x20\x79\xfd\xec\x7c\x7d\xd7\x0b\xb9\x60\x82\x85\xa8\x9c\x23\xaf\xae\xc0\x7e\x4e\x5a\x79\xc7\xce\x3d\xb9\xed\xb9\xed\xb9\x1d\xe7\x98\xb4\x9c\x97\x4c\xfa\x9e\x13\x9c\x5f\x36\x88\x0d\x1e\x04\xb4\x9f\x85\x64\x4e\x99\xf7\x31\x8d\x50\xf3\x71\xb4\xd9\x88\x7a\x3c\x5d\x86\x0b\x05\xda\x70\x01\x9f\x1b\xc8\x35\x96\xab\x8c\x5e\x6e\x78\x31\x5f\x2b\x56\xc4\x1d\x64\x29\x0f\xa4\x5b\x4f\x0e\xa2\x33\x25\x9a\xd0\x32\x08\xe9\xd7\xe4\xce\x05\xe7\x3c\x31\x2a\xd8\xec\xef\x7a\xee\x08\xe9\x51\x64\xb9\x1b\x36\x9c\x1c\xce\x0d\xd3\xce\x80\xad\x80\x5e\x42\xb5\xf3\xa5\x22\xb3\x5f\x5c\xbc\x24\xfa\x80\x08\x90\xa2\x5d\x53\x76\x32\x93\xda\xaa\xe6\x7e\xda\x39\x48\x0f\xe6\x5f\xcc\x3b\x7c\xfa\x34\x85\x31\x6b\xe6\x10\x1a\x67\xbe\x4a\x3a\x9c\x98\x03\x93\xed\xb2\x9d\x39\x19\x5a\xc3\xd7\x3f\x1a\x9d\xc4\xe8\x63\x11\xfb\x74\x02\x22\xcb\x33\xad\xd4\x1d\xa7\xa7\x73\xc6\xaf\x78\x25\x7a\xad\x0c\x86\xe3\xda\xf6\xa2\x15\x30\x18\xe4\xcf\x3a\xa1\x6f\xf9\xb2\x18\x3e\xf9\xc8\xa1\x37\xa7\x6e\x04\xad\xc8\x6c\xa3\x81\x5b\x73\x0e\x7d\xe0\xf1\x30\x24\xb6\x30\xff\x39\xb9\x95\x45\xfe\xdf\x27\x5d\x61\xd6\x0a\x9c\x3c\x59\x18\x17\x28\x79\x30\x4c\xf2\xc5\x18\xb9\xfd\x92\xe7\xdb\x87\x4c\xb9\x55\x14\x7e\xf1\xa3\xbe\x35\x4f\xf3\x4f\x18\x5b\xcd\x81\x5c\x2e\x67\xb2\x08\xf7\xf2\xc8\x78\xf3\x20\xff\xd6\xc7\x6a\x09\xc3\x06\xa6\xd3\x63\x6c\x16\xff\xcc\x15\x68\x8b\x3a\x57\x17\x8b\x41\xee\xc2\x8e\xdc\x61\xcf\x0d\x7d\xaf\x50\xc0\xfe\x69\x7c\xc1\xa1\x80\xfe\x6d\x57\x98\x1f\x58\x5f\xfe\x79\x64\xa3\xd0\x66\x73\x16\x17\x4b\xcc\x12\x12\xe1\x5c\x64\x96\x61\x66\x2c\x43\x93\x22\x7c\xd8\xf2\x65\xa4\x2b\x7d\x35\xa4\x3d\x03\xec\xd3\x20\x57\x1a\x5d\xe5\xda\x64\x13\xa0\x7c\xa2\x06\xd1\xb1\xc0\x4d\xb6\x22\x73\xbd\x83\xe4\xf6\xf4\x6e\x39\xe3\x14\x33\x8c\x52\xaa\x4c\x2c\xb8\x59\x8c\x5d\x23\x28\xe5\xf3\x38\x08\x18\x0a\x92\x41\x72\x0e\x0b\x11\x4b\xc2\xe2\xb3\x5c\xfe\x73\x46\x09\x3c\x9d\xb3\x9c\x82\xaa\x9e\xf0\xe6\xd4\xe0\x4c\x11\xbd\xc6\x7a\x01\x1d\x77\xa5\x50\x2c\xd3\x47\xac\xd0\x12\x61\xf1\xe5\x75\xa4\xbc\x7b\xd8\x58\x10\x9b\x8e\x59\x2c\xc2\xf5\x72\xc6\x49\x31\xc7\x0c\x8b\x2c\x03\x4e\x18\xd0\xde\x35\xbb\x6c\xcc\x7a\xdc\xe6\x38\x62\xe1\x45\xcf\x3d\x83\x99\x87\xfb\x0c\xb9\xef\x5c\xa9\x40\xfe\x9d\x97\x77\x63\x16\x3b\x3f\x71\x9f\x86\xb3\x78\x85\xc2\xac\x95\x3f\x3f\x1c\xc3\xf1\x0e\x69\x2e\xf2\xee\xa2\x3d\x90\x1c\x68\x41\x89\xc7\xb8\x79\x0c\x6b\xb1\xa0\x98\x98\x5b\x46\x84\xdd\x38\xae\x30\x44\x7d\x4c\x67\xcb\x60\x38\x2d\x46\x95\xb4\xbb\x4d\x95\x24\x64\x7a\x73\x98\x39\x3e\xeb\x14\x9c\x70\x59\x48\xd5\x8a\xbe\xb3\x68\xf9\x4e\x61\x99\xd6\x5f\xbe\x78\xde\x04\xca\xf3\xe5\x1e\xd4\x36\xf9\xbc\x49\x2f\x6a\xff\x0e\x5e\xa7\x46\xbd\x4e\xcb\xa8\x8f\x7a\x2a\x5e\x8c\xc6\xea\x83\x8d\x7e\xc9\x0d\x9d\x45\x9c\x3b\x6d\x2d\x4d\xde\x1d\x62\x2a\x12\x34\x77\xd1\xce\xee\x08\xe8\xe7\x47\x71\xf0\xc9\x96\xa4\x17\xd0\xf1\x0b\x4e\xa5\xfa\x9d\x4a\x9f\x54\x9d\x4a\x1f\x6c\x59\x44\xe0\x27\x44\x04\x43\x41\xc7\x5c\x4b\xa2\x5c\x34\x8b\xe4\x40\xd5\xef\xd4\xd7\x3b\x6e\x78\xf3\x6e\x73\x3c\x5a\x65\x5c\x9b\x6e\x60\x84\xe8\x92\x7f\xac\xf6\x98\xe8\x05\xb3\x6d\x2f\xe9\x73\xb9\x87\xb5\xcd\x48\x44\x08\x3e\xa9\x3d\xbf\xb6\xeb\x6a\x9f\xbe\x27\x72\x5d\x15\x8b\x81\x74\x51\x95\xcf\xd1\x71\x97\x14\x42\xff\x67\x13\xda\x56\xd7\x5a\x4a\xfd\xeb\x9f\xd8\x64\xde\x91\xfe\x95\xd8\xf6\xf0\x3e\xcc\x57\x39\x91\x54\x80\xf9\x7d\x53\x56\x35\x01\x4e\x22\x2f\xfb\x4f\x37\xc0\x7c\xd7\xe0\x7c\xb7\x24\x9c\xec\xae\xb9\xf5\x18\x4d\xc6\xc0\x67\xad\xca\x0d\x1f\xa8\xa4\x6a\x0f\xba\x09\xed\xaa\xbc\x15\xae\xd8\x25\x60\xb6\xab\x7f\xb6\xfb\x03\x75\xb6\x7b\x53\x8b\x2e\xf4\x3b\x3b\x33\x9f\x3d\xa9\x9d\xab\x3d\xd7\x1c\xd0\xf7\xd7\x3b\xd7\x94\xbb\xc0\x11\x7a\xe4\x32\x74\x6d\x4a\xe7\x92\x86\x9f\xfe\xe6\xcb\xcc\x3d\x91\x19\x18\xf5\x88\x0a\xa2\x49\xc3\xa6\xd7\x1a\x01\x0e\x73\x17\xb5\x57\x20\x98\x3c\x40\xf6\x08\x16\x4b\x45\x8b\xe5\x2f\x34\xd4\x17\x14\x71\x5e\xff\x88\x86\x72\x35\xa7\x7c\x39\x0e\xcf\x14\x71\xde\x7c\x25\x15\x2c\xd8\x38\xa0\x99\xd9\x66\xf1\x82\x75\xc1\xf1\x7c\x39\x68\x94\x81\xd8\xe6\xda\x93\x0a\x8f\x58\xae\x3d\x42\x4c\xa6\x52\x80\x7e\x2f\x43\x5e\x09\xf9\x53\xbf\x3f\x83\xb6\x37\xf0\x18\xf4\x47\xe6\xd7\xe9\x83\xf0\x1c\x15\x06\x2b\x29\xf5\x31\xce\xb2\x0f\x42\x4b\x6c\x1c\xbd\x12\x5d\x4f\xe9\xd6\x73\x76\x99\x01\xbd\x25\xc7\xb5\xbd\x25\xfa\x7b\xb2\x87\x30\x66\xbc\x22\x4f\x80\x22\xb2\x85\x51\x5a\x9d\x33\x4e\x63\xcb\x1e\xf1\xdc\xc2\x72\x87\xdb\xe7\x49\xed\x4c\xed\x69\x7c\xbb\x9e\x4b\x9f\xc6\x65\x63\x25\x67\xee\x3f\xef\x4b\xa5\x2e\xf2\xfa\xc3\x9e\x6b\xd3\x77\xa0\xff\x76\x9f\x79\xac\xfc\xe3\x84\xfe\x9d\x99\xbf\x74\x0a\x57\x76\xfd\x34\x6d\x0e\xf6\x29\x21\xa1\x53\x43\xee\x41\xad\x8f\x0c\xc7\x07\x35\xfe\xca\x2f\x6a\x1f\x5e\x87\x7e\x4b\x43\x7a\xc1\x0a\xc2\xb3\xbe\xe5\x06\xb4\xf4\xb3\xce\x22\xd6\x5f\x82\xf6\x34\x31\x24\xc9\x4f\xcd\x43\xd3\x56\x10\x46\xc9\x6d\xf2\xb2\xd6\xa1\xbc\x85\x70\x5d\x7a\x2e\x16\x9d\x86\xa6\x49\xe5\x91\x24\xbf\x82\x36\x2e\xe2\x20\xb0\xe6\xb1\x7e\xd2\x1c\x1f\x37\x16\x4a\x8b\x96\x6b\xf8\xd8\xb2\x29\x5a\xe2\xdf\x89\x4d\x01\x99\x48\x6d\x1c\x5a\x4e\x41\xb8\x74\x69\xa0\x9a\xbc\x59\x0c\x78\x1d\x45\x1b\x7c\x6c\x05\x9e\xab\xdf\x62\x8e\x9e\xa5\x7b\x09\xf2\x2f\x99\xbf\x44\xd6\x76\x28\x60\x69\xec\x2a\x94\x33\x2d\xc7\xcd\x84\x79\xd3\x19\xa5\xdf\x2b\x45\x0c\x0b\xca\x7e\x96\xe6\x82\x3b\x6a\x15\x02\x3c\x9c\xea\xb4\xda\x81\xe8\x9b\xd1\xb7\x99\xd7\x9e\x5d\x2e\xd2\xdf\x44\x6f\x52\x96\x17\xfb\xc9\xfb\x37\x21\xa3\x5a\x1f\xa2\x9b\x8c\xd7\x6e\x32\x47\x62\x9f\xb0\x05\x29\x4f\x6c\x8b\xbc\x58\x90\xa3\x61\xaa\x6e\x1e\xfe\x05\x36\x0f\x8d\xae\xff\xcf\x17\x9b\x87\x33\xe6\xb3\xc6\xe5\x8e\x41\x6d\x5e\x75\xab\x90\x43\xc3\x28\x5b\xff\x84\x0b\xd6\x45\xfd\xd6\xc5\xa3\xaa\x75\xf1\x9e\x16\x77\x08\x6e\x77\x44\xb6\xd1\xce\xe1\xae\xda\x4b\xce\x6e\x7d\x67\x8d\x25\x27\x6d\xc3\xf0\xc7\x97\x55\x9f\x32\x88\x69\xa2\xbf\xea\x32\x73\x57\xec\x13\xc9\xed\x98\x3f\x30\x9f\xbe\x61\x78\x50\xdb\x24\x14\x41\x0f\x6a\x9b\x42\xbc\x58\x24\x63\xf5\xa2\xf6\x61\x84\xee\xcf\xa0\xa7\x2f\x3a\x2e\x59\xb3\x97\x79\xd6\x26\xfd\xe7\x1a\x65\x3c\xbb\x76\x9a\xdf\xa1\x16\xc4\xa2\xe3\x26\xb2\x43\x06\xec\x4a\x3a\x31\x33\x17\x16\x75\x27\x45\xa0\x5e\x99\x21\x8b\x9e\xad\x28\x3b\xc9\x3a\xb1\x1c\x65\xc6\x73\x97\x59\x66\xc5\x40\x90\x14\xec\x1b\x79\xdf\x0a\x16\x1c\x77\x9e\xb9\x71\x58\x12\xb9\x59\xcc\xb2\xd1\xd9\x54\x59\xa3\xa4\x01\x54\x15\x07\xdb\x8d\xad\xe4\x66\xc2\xc7\x9b\xf6\x03\xc3\x0a\x8c\xc0\xf3\x5c\xf2\x5f\x87\x47\x56\x5b\xf6\xf2\xb6\x18\x8b\x42\x9f\xd0\xd0\x33\x05\xc6\xba\x9d\xa5\x21\x9b\x76\x16\x9d\x50\xff\x23\xd9\x32\x6f\x60\xaa\x56\xd9\x22\x5e\xc1\x16\x19\xcb\x78\x2e\x4a\xea\xfc\xf0\x98\x83\x47\xb2\xfb\x28\xef\x9e\xc5\xd6\x7d\xe6\xa3\xb5\x9d\x80\x4c\x0a\x25\x27\x58\x30\x66\x71\xb8\x84\xb1\x6b\xe0\xbb\x8b\x05\x27\xef\x84\x2c\xd5\xa4\xc8\xc1\x1a\x39\x7e\x63\x8f\xbe\x63\x7b\xfc\x09\xfe\x3c\x83\xe4\x2b\xd7\x3f\x94\x69\x83\x1a\xf5\x07\xda\x38\x17\x97\x31\xa7\x96\x77\x01\xfb\x34\x30\x36\x4a\x9d\xbb\x68\xb9\xd6\x7c\x64\x0f\xc6\x0c\xe5\x52\xc0\x95\x5b\x31\x89\x16\x7b\x4b\x6c\x3b\x6d\x53\x07\xc2\x62\x74\x21\xf5\xfc\x79\xb6\x21\xfa\x2b\x5d\xf4\x99\x6e\x34\x65\x74\xb7\xac\xa7\x1b\xa0\xff\x1d\x91\xd2\x39\xf4\xeb\xeb\x90\x1c\x2b\xfa\xbf\x56\x33\xc0\xf3\x9e\x8f\x49\x8b\xcd\x78\xf6\x59\xfe\x03\xba\x93\xf8\x8b\xcc\xb8\x1b\xcb\x33\x18\x37\x0d\xe9\xc3\x51\x17\xb7\xe8\xb1\x6c\xf0\x30\x77\x56\x34\x82\xe8\xd7\xec\x3b\x03\x2b\x12\x81\xbc\x57\x5c\x96\x6b\x39\x29\xcc\x73\x99\x76\xcf\x70\x3d\x9b\x7b\xba\x55\x45\xaf\xd2\x90\xf4\x02\xa9\xaa\xdc\x4a\xb6\x37\xb1\xdf\x3a\x73\x86\xeb\x25\xae\x52\xd3\x7a\x6e\x6b\xf8\x1d\x90\xa6\x2f\x78\x96\x1d\x8c\x2a\x2e\xa0\x51\x1f\xcb\xdc\x61\xd1\xc7\x03\x45\xcf\x1e\x11\x95\x45\x0f\x68\xe8\x0a\xb6\x5e\x9d\x11\x11\x5e\xbf\xa6\xa1\xbd\xf5\x2f\xce\x77\xc4\x7e\x6c\x1e\x19\x77\x85\x57\x4d\x84\x8c\xb1\x11\x5b\x2c\x58\x79\xcc\xb2\xd8\x92\x05\x3a\x36\x83\x71\x1d\x95\x8b\x97\x58\x30\x38\xfa\xce\x95\xc8\xac\xbd\x05\xd3\xff\xfc\x4a\xf3\xd6\xc4\x67\x65\xac\xa7\x6c\x7f\x96\x98\xbb\x9f\xc5\xaf\x38\x49\x27\x9b\x33\xf9\x05\x6c\x97\x0a\xd8\x7e\x50\xd3\xd9\xf4\x73\xc2\x09\x82\xe8\xc3\x67\xf1\x8d\x6b\xd9\xd5\x97\xb1\xab\xe9\x4c\x7f\x51\x7b\xc7\xd3\xd1\x13\x1a\xba\x82\x18\x9b\x74\x9a\x3b\xec\x95\xdc\x50\x7f\x4c\xce\x6f\x1f\xd5\x0e\x8b\xbc\xb7\x0b\x56\xb0\x60\xc8\x0b\x03\x69\x8d\xcb\xe7\x4a\xf6\xd7\xe8\x4d\x1a\xa5\x40\x44\xfd\x33\x49\x89\x25\x2c\x5c\x86\xc5\xad\x0b\x9e\x63\x5b\x6e\x9e\x6c\x1b\xf2\x0b\x96\xeb\x04\x8b\x2c\xf3\xaa\x23\xd2\x9b\x87\x9e\xe8\xf9\x52\x9c\x2f\xee\xef\xe2\x25\x62\x6f\x96\xf3\xb8\xf8\x54\xf8\x63\x0d\x21\x69\xa5\x07\xfa\xb7\x35\x73\xfa\x74\xfc\x0d\x70\xc3\x35\x5a\x24\xbc\xd9\x00\xfb\x17\x84\xa4\x35\xb6\x75\x1b\x0a\x62\x2f\x0c\xe7\x1a\x07\xcc\xe5\x5b\xc6\xba\x82\x1f\x89\x39\xd5\x40\xf0\x23\xfa\x07\x0d\x55\xe8\x39\xfa\xa7\xe5\x6b\x7e\x38\xb1\x8c\x91\x11\xaf\xcc\xe8\x42\x31\x24\xf3\x52\xee\x10\x5d\x93\x4c\x37\x34\x92\xdb\xc7\x2c\xf1\x2e\x57\xbb\x09\x99\x78\x74\x59\x9b\x66\x0a\x56\x60\x80\xc3\xd1\xd8\xdb\xfd\x91\x86\x2a\xf4\x78\xfd\xef\xe4\x53\xfe\x25\x7d\xca\xd0\x0b\xad\x42\xfa\xb3\x2a\xf6\x09\x7f\xe2\xf8\x33\x18\x5b\x59\x76\x5d\xf2\x0d\xfb\x59\xde\xf3\x7d\x4c\x67\xe2\xf4\x5f\xb4\x6b\x82\xac\xf0\xd8\x17\x35\xf4\x74\xf6\x24\xe3\xa2\xd7\xea\x7f\x2a\x9f\xf7\xa1\xca\x6f\xb5\xe6\x93\x92\x97\x4a\x93\x99\xd2\xed\x31\x57\x98\xf3\xcd\xb3\x72\x99\xec\x19\xae\x6a\x5d\x6d\x65\xe6\x1d\x4d\x45\x22\xba\x0c\x59\x33\x72\x09\x13\x73\x5b\xec\x61\xbe\xae\xa1\x94\xa9\x4c\xff\x2b\xf9\x3c\xef\xaf\xaf\x97\xc6\xab\xc8\xf2\x7d\x08\x9d\xcd\x4a\xf6\xd1\xdf\xd1\x90\x3a\xf9\xea\xf7\xc9\x07\x0b\xba\xfa\x9e\xe8\xcb\x89\x4f\x8e\x9f\xd2\xd0\x55\xec\xfe\x77\xb8\xf2\x35\xea\xef\x93\x15\xfc\xdd\x76\xf4\x24\x97\x93\x96\x0e\x76\xa1\x02\xd2\xd9\xa4\x8d\xed\xdb\xe8\x49\x1e\x61\xdc\x57\x4d\xb7\x31\x1e\x4d\xe1\x9c\x27\x73\xf7\xbc\xbc\xc8\x10\xbf\x2b\x37\x5b\x95\x85\x2c\x97\xb8\xdb\xb3\xf8\x0e\x3a\x39\xe7\x9c\x16\x0d\x77\xa0\xc6\x8c\xa3\xf6\x5b\x99\xba\x5a\xb6\x4d\xec\x6e\x0f\xac\x43\xd9\xfa\xed\x1b\xfd\x89\x8c\xf9\xcb\x15\xbe\x93\x4c\xa2\x94\x0f\xa5\x3e\x99\x3f\x24\x7d\xf6\xa4\x5d\xc4\x32\xfe\x47\x0b\xfd\x45\xed\x95\x19\x74\xbf\x86\x2e\x27\xad\xe2\xb8\xf3\xac\x78\x62\x8f\x55\x04\x92\xb2\xbe\xa7\xd5\x9f\xc8\x22\xcd\x49\xfe\xb9\xb8\x37\x73\x7d\x31\xcd\x5c\x90\x33\x66\xb8\x74\x90\xc6\x20\x39\x73\x06\x59\x05\x8d\x03\x86\x19\x2b\xcd\xcc\x21\x8f\x43\xba\x79\xf3\x79\x02\xd2\x29\x2f\x92\x95\x4d\x09\x08\x15\x36\xc6\x7f\x4d\xa3\x8f\x4e\xb9\x47\xa8\x86\xcb\x94\x1b\x2b\xd2\x5a\xb1\x0b\x63\x88\xef\x3b\x9b\xd0\x73\xd2\xde\x0a\x2e\x16\xbc\xe5\x45\xec\x86\xfa\x5f\x6d\x32\x0f\x45\xff\x34\xb0\x4b\xfa\x77\x60\xd8\x38\x5f\xb0\x48\xdf\xbb\x20\xda\x9b\x99\x54\x33\xc4\xca\x64\xc9\xbf\xa8\x4d\x7c\x06\x87\x41\xee\xa2\xf6\x4e\xd0\x45\x81\xab\xaf\x63\x30\x6e\x4e\x61\x71\xcf\x6b\xd5\xd1\x77\x4d\xa5\xfc\x26\x39\x14\x70\x77\xdc\x79\x34\x5a\xdb\x3e\x96\x63\x86\x6e\xa2\xf7\x9e\x49\xb2\xad\xb0\xa2\x7b\x0e\x1b\xd1\x8f\xc9\x9c\x20\xdc\x00\x18\xed\x68\xe4\xb6\xcc\x7d\xb6\xfd\x44\xb4\x60\x90\x1d\xb7\x58\x27\x82\x98\x43\x41\xb9\xe1\x93\xda\xd9\xda\x74\x70\x87\x3e\x5a\x81\x0e\xca\x82\x92\x68\xf0\xe3\xeb\xd1\x0d\x55\x2b\x1c\xb9\xa4\xee\x5f\x6f\x1e\x4f\xf9\xbc\xb2\x4f\xca\x8e\x26\xa8\xba\x9c\x52\x1f\xe8\xeb\x49\xa7\xd4\x05\x74\x05\xa9\x12\x9b\xa7\x69\x75\xec\xe6\xab\xb3\xed\xac\x38\x26\x89\x57\xc9\x09\x94\x3a\x2d\x59\x81\x1c\xb2\x6b\xcf\x19\xb6\x93\xaf\xb3\x59\xf3\x39\x72\x9d\x8d\xba\x50\xba\x37\xec\x1b\x1b\xd1\xf5\x55\xfb\x2f\x75\x87\x3d\xba\xd1\xdc\x1a\xff\x28\x9e\xbf\x26\xfa\x4e\xf5\x84\xbd\x13\x3c\x61\x8d\x2e\x8f\x0b\xc2\x13\xf6\x22\xf3\xfa\x54\x19\x9d\xda\xd2\x2a\xde\x18\x45\x23\xe8\xc6\x06\xe6\x51\x58\x88\xeb\x5f\x88\x67\x95\x85\xf8\xce\xd6\x7c\x62\x57\x57\xf0\x89\x3d\xa9\xfd\x72\xed\xe5\xe9\x26\x7d\x57\xad\xe5\x29\xcd\x7b\xf5\xf3\xcb\x6b\x0c\x71\xea\xbe\xfa\xdb\xcb\xcd\x93\xf1\x8f\x2a\xfa\xaf\xea\x5c\xe3\x2b\x79\xb6\xbe\xff\x34\xf4\x8a\x14\xcf\xd6\x0f\xe4\xc6\xf6\xef\xb4\x13\x4d\x78\xb5\x2e\x09\x5f\x56\x6c\xf3\x78\x08\x6d\x28\x5a\x64\xab\xa7\xdf\x6c\x6e\x3d\xa6\x08\xb5\xf9\x31\x47\xca\xe4\xed\x04\x06\xbb\x94\x6d\x76\xf9\x31\x28\xe8\xa1\x75\xe8\xea\xa2\xef\xcd\xfb\x38\x08\x8e\x60\xcb\x2e\x38\x2e\x16\xed\xf9\xeb\xeb\x44\x7b\x7e\x3f\x43\xb7\xd8\xfc\x1c\x39\xba\x6e\x3a\x6e\xac\x45\x63\xb6\x86\x08\x73\x13\x05\x1b\xb3\x2c\x92\x99\x3d\x87\xf2\xb4\xac\xbd\xe6\x2c\xa7\x20\xfc\x22\xf1\xe5\x46\x80\x66\xe6\x23\x89\xce\xcb\x24\x25\xe7\x49\xc1\xec\xa7\xca\xaf\xd8\x26\xcb\x52\x57\x74\x76\xd8\xd1\x4c\xe2\x21\x27\xef\xce\x63\x6c\xd3\x48\x08\xba\xf0\xca\xfc\x9b\x25\x7f\xce\xca\x47\x47\x02\x2a\x15\x62\x0b\xad\x12\x05\x14\x3d\x20\xfd\x35\x9f\x68\x70\x10\x3a\x8b\xea\x69\x55\xa1\x38\x70\xca\x4a\x7f\x21\xb1\xae\x71\xf3\xf6\xed\x41\x9c\x47\xdc\xaf\xa1\x4d\xdc\x93\x12\xe8\xf7\xca\x3e\x5e\x3c\x29\xbb\xb6\x18\x4a\x2c\x93\x6d\x87\x7c\x90\xf1\x4a\xfd\x65\x25\x27\xea\xbb\x64\x05\xdf\x98\xe2\x44\x55\x76\xbf\xbd\xe0\x48\xfd\x17\x4d\x71\xa4\xfe\x6f\xad\x0d\x8e\xd4\xb7\x6b\xd3\xb1\x1c\x1d\x74\x70\xb0\xf7\x32\x29\x7c\x4f\x6a\x23\xb0\xcc\x2a\xd4\x07\x45\x61\x3b\xfd\x99\xc0\x55\x4e\x20\xbb\x25\x8d\xc0\x23\x86\x8e\xcc\xdd\x28\xae\x88\xba\x54\xfd\x2e\x56\xf4\x11\xf2\xe0\x82\x29\xfd\xb1\x56\x8f\x5f\x43\xd9\x40\x71\x5f\xdb\xd1\xb3\xc9\xf1\x11\x39\xdc\x68\x70\x67\x8a\xdf\x2d\xee\x6d\x23\x4f\x94\x7b\x52\x1b\xae\xee\xf5\xb8\x5c\xbf\x8c\x75\x94\xe3\x78\x39\x40\xe8\xc5\x8a\xe3\x16\x37\xe1\xb7\xdd\x21\xfe\x55\xee\xb0\x0d\xd2\x3d\xb6\xe8\x27\x97\xa1\x81\x3a\x36\x95\xfa\x17\x2e\x33\x6f\x4f\x7e\x28\x16\xc1\xc5\x06\xf7\x9b\x17\xb5\x7b\x2e\x43\xaf\xd1\xd0\x55\x72\x49\x38\x2d\x26\x81\x92\x18\x62\xe7\xce\x26\x18\x64\xb4\x7c\xd0\xa7\x49\xc3\xad\x49\xd2\x6a\x84\x96\x3f\x8f\x2b\xf4\xa8\xd8\x68\x79\xbc\xdc\xa5\xf8\x59\x39\xda\xff\xa4\x0e\x97\xa2\xd2\x53\xcf\xc6\xfe\xdd\x65\xa7\x62\x34\x00\xe3\x0f\xf8\xaf\x71\x67\xe2\x77\x34\xf3\x44\xe3\xce\xc4\xa8\xf5\xaa\x7a\x13\xf7\xa2\x9b\xd1\xee\x06\x46\x5d\x67\xdd\x89\xe7\x52\x09\xfb\x94\x20\xec\x37\x91\xd7\x55\x8d\xaa\xa7\xbd\xc9\x78\xdb\xbe\x00\x5d\x4e\x3b\xa3\xec\xc4\xd3\xa2\xe7\xec\x49\x76\x62\xd6\x69\xd9\x70\xac\xb7\x6f\xbe\x42\x5d\x24\x97\x44\xd1\xb3\xc9\xa2\x5d\xcf\x1d\x61\x07\xab\x0a\x8b\xaf\xea\x3d\x8c\xad\xea\xd9\xbc\xca\xb4\x2a\xa6\xf7\x6d\x65\xc2\x9c\x67\x94\xdc\xf2\x01\xfb\xce\x8c\xa8\xd1\x03\x99\x64\x95\x94\xeb\x6b\x3f\xb3\x5c\x17\xc3\x14\x07\x44\x5c\xaf\x13\x84\x0e\x8f\x87\xa6\xb6\x81\x18\x02\x71\x33\x8d\x7a\x70\x76\x6c\xdf\xbe\x45\xe9\xd2\x79\xab\x68\xe5\x69\xc8\xef\x59\x96\x2a\x66\x99\x87\xaf\x93\x29\x31\x7e\x0f\xe1\xe3\x10\xb9\xf7\x97\x71\x6c\x6c\xa8\x12\x22\x56\x1d\xee\x31\x0a\x59\x10\xb8\x98\x5f\x63\x6d\xf8\x1b\x1a\x7a\x3a\xdf\xab\xc9\xf6\x5b\x16\xcd\x67\xb7\xfa\x42\x69\x5d\x68\x2d\xd4\x3d\x88\x58\x4f\x98\x2f\x2a\x56\x9d\xfb\xd6\xa5\x0b\xc6\xcb\x96\x43\xfd\xf1\x4c\x7c\xf2\xe7\x8b\x61\xb4\xc8\xf0\x9c\x90\xf5\xac\x89\x17\xb5\x37\x64\xd0\x1f\x96\xb9\x62\x7e\xab\x1e\x69\x4c\xdc\x15\x23\x2b\x64\xde\xd1\x98\x2f\xa6\xfc\x51\xce\x32\xef\x4c\xdc\x6b\x82\x16\x38\x33\x3a\x67\x9e\x29\x67\x46\x8a\x53\x06\xb3\xb7\xcd\xfc\x31\x09\x07\x4f\x7d\x4e\x99\xd7\x5d\x9e\xea\x94\x89\x66\x73\xfd\x7b\x4f\x33\x7f\x25\xfa\x67\xf2\x24\xdb\xe8\x94\xd1\xd8\x98\x31\xc4\xbc\x91\x14\x45\x90\x3d\x1f\x3b\x9e\x93\xc6\x44\x5c\xd4\xfe\xe4\x32\xc0\x51\xe0\xad\xe9\x14\x24\x7a\x24\xa3\x50\xa2\x77\x65\x5a\xf5\xd7\x7c\x47\xe3\x59\x96\xa6\xd9\xe2\x45\x8d\x13\x65\x70\x90\xce\xce\x0f\xe9\xa6\x29\xc1\xc8\xbf\x6d\x36\x0c\xe5\xce\x3c\x14\xc7\xb1\x5b\xac\x4b\xcf\x78\xf6\x56\x62\x31\x0a\xbe\xa0\x14\xc7\xe4\xa1\xe4\xad\x74\x3f\x1e\xec\x09\x11\x0f\xf6\x35\xad\x0e\x0f\x54\x54\x69\xba\x1d\xf8\xaf\x1a\x45\x55\xea\xc8\x6d\x88\x57\x29\xc6\x64\x87\x23\xc6\xfe\x34\x8a\x18\x7b\x77\xa6\x0e\x9f\x97\xf2\xa0\xcc\xe7\xf5\x63\xad\x89\x2d\x89\xfa\x7c\x97\x6a\x28\x59\x2b\x9e\xbb\xe8\xf9\x93\x58\xf4\xb3\x7d\xa9\x9e\xbb\xe8\x07\x91\xe7\xee\xa1\x3e\xaa\x4b\x4c\x7e\x5e\xd9\x73\xc7\xd7\x24\xaa\x6f\xa8\xcb\x75\xf7\x67\xeb\xd0\x9b\xd2\x5d\x77\x2f\x6b\xde\x57\x76\x24\xe9\x2b\x83\x98\xb2\x7a\xdc\x68\xbb\xb8\x49\x74\xa3\x79\x9d\x30\x89\xd4\xf7\x99\xee\x47\xbb\x7f\x73\x2a\x64\x8f\x7a\x0d\xf5\xa3\xfd\xe3\x26\x33\xf1\x51\x5a\x5c\x99\x2a\x32\x89\xbc\x69\x5f\x02\xb1\x49\xa3\xe6\xcb\x23\xf2\xe8\x87\xf7\x68\xa6\x27\x8e\x7e\x50\x9b\xb7\x83\x4a\xf9\xc6\xbd\x73\xca\x5c\x05\x86\xd7\xda\x39\x18\xa2\x15\xcf\x5f\x7c\x32\x49\x2e\x71\xef\x46\x35\x26\x25\xea\xf9\xbb\x17\x99\xbb\xe3\x1f\x55\x89\x5c\x53\xec\x09\xc5\xbf\x77\x51\xfb\xe4\x66\x70\xea\x51\xe2\xf0\xfb\x19\x05\x65\xbd\x51\x92\xa3\x9f\x6b\x02\x87\xc8\xc3\x0c\xca\x1c\x40\xe2\x67\x2d\xf9\x4f\x94\x24\xb5\x49\x17\x50\x07\x27\xbb\xd1\x81\xa5\x05\x2b\x1c\x71\x82\x11\x6b\xa4\xc2\x6c\xa8\xb4\xd1\xbf\xab\x11\x70\x3f\x6c\x47\x04\xdc\xbb\x33\x67\x94\x50\x28\xab\x5a\x34\x1c\xef\x4e\x11\x0d\x14\x8b\x7b\xde\x2b\xb9\x61\x8e\x6d\xb8\x8c\xf3\x78\x99\x39\x23\x79\x62\x6a\x16\xb0\x55\x47\xa4\x9c\xc4\x56\x8a\xcd\xd0\x6b\xd1\x73\x0f\x64\x14\x27\xcc\x2b\x9b\x89\x9e\x7b\x4c\x93\x6e\x18\x71\x46\x6a\xc3\xa1\x74\x34\xc7\xaf\x1b\x94\xe6\xe6\x9c\x3c\x5d\x64\x62\x24\xc7\xc6\x21\xf5\x94\x75\x2f\x98\xed\x13\x9b\x52\xdd\x44\xc9\x7d\x98\xfe\xdb\x9b\xcc\x83\xc9\x0f\xeb\x09\x1c\x8b\x4f\x9d\xe2\x61\x2f\x6a\xff\x7d\x23\xba\x37\xd5\x51\x54\x14\x93\xc7\x7f\x88\xbb\x62\xa3\x09\x49\xb6\x58\x5d\xae\x22\x99\xf7\x59\xed\x9a\xb1\x81\xf9\x93\xb8\x0b\xe5\x7f\x6b\xe6\xc9\xc6\x5d\x28\x4a\xe9\x6d\xf0\xa1\xa4\xec\xbb\x3a\xe2\x43\x79\xad\x86\x9e\x49\xf3\x99\xd2\xf1\xaf\xd0\xeb\x40\xbc\x85\x17\xc6\xdf\x42\x34\xa3\x50\x20\xad\x3a\x19\x84\x3d\x56\x90\xec\x26\x39\xe2\xc5\x67\xe2\x05\x26\x5f\xc4\xcb\x52\x3d\x3a\x8e\xf0\xe8\x9c\x3d\x55\xf6\xa5\xe1\xe3\xb9\x82\xc8\x3d\x1f\xf3\xf6\xcc\x55\xa3\x05\x95\x9c\x69\xbf\x9c\x74\xf8\xdc\x26\x9a\x61\x67\xbc\x19\x58\xc7\x93\x1d\xb1\x76\x1f\xfb\x5b\xd5\xd7\xa3\x7a\x20\x93\x0b\x64\xb2\xc6\xac\xc2\xea\x9d\xc5\x72\xd9\x2b\xeb\xda\x6f\xa4\x27\x32\x4c\x8f\xae\xd0\x1f\xdf\x68\x4e\x50\x6b\x2b\x11\xe8\x91\x86\xaa\x94\x78\x09\x3f\xe6\x07\xc8\x5d\xd4\xde\xbc\x11\x3d\xb0\x11\x5d\xb1\x68\xdd\xad\xc6\x09\xfd\xda\xc6\x7a\x11\x64\x29\x74\x0a\x39\xc7\x0d\x83\xd0\xcf\x1d\x73\xc3\x53\xfe\x19\x6a\x58\x9b\x7f\xb6\x41\x95\x0d\x45\xed\x9e\x08\xbe\x65\x19\x85\x99\x9f\x40\xf5\x86\x29\xf2\x19\x11\xe2\x71\x27\xdd\xb6\xf0\x6b\x2d\xd7\xb0\x66\x03\xaf\x50\x0a\x65\x77\xda\x8a\xef\x1e\x33\x6e\xda\x66\x50\x45\x52\x11\xfb\xe4\xd5\x5b\xf3\x6c\xb0\x24\x3c\x47\x89\x4a\x70\xa2\x19\x84\x96\x1f\x8a\x1e\xcf\x1d\x25\xb4\xd0\x1d\xdb\xb7\x6c\xcb\x19\xe3\x89\xfb\x39\x81\x91\xb7\x0a\x79\xce\xb7\xd8\x89\x22\xd1\x5d\x67\x97\x0d\xdf\x2b\xb1\x73\x99\x4b\x45\x6e\x94\x45\x87\x89\x6c\x8f\xfc\x1e\x6c\x3b\xe6\x04\xc4\xc6\x9a\x14\x67\x65\x53\xb7\x76\xc8\x0d\x39\x7a\x58\x8e\x67\xec\xda\xbe\x65\x98\xd4\x95\x76\xed\x5d\xdb\xb7\x88\xaa\xb6\x16\xfe\x98\xc3\x39\xa1\x6e\x4a\x0f\xb7\xdc\x46\xdb\x5c\xf8\xcd\x1c\x6e\x0d\x05\xa1\x57\x2c\x72\xdf\xa2\x25\xe3\xae\xcb\x3d\x27\xd4\xdb\x2f\xa3\x8f\x2c\x3f\x0c\x28\x2c\x24\xbf\xe6\xae\x96\xf8\xe3\x78\x01\x2e\x7b\x3d\xec\x8c\x0c\xd7\x98\x25\x7d\x22\x30\x4a\x45\xea\x2c\x4b\x5c\x25\x33\x52\x53\x0f\x1b\x4f\x44\xcd\x1d\xff\x91\xc8\x46\xf6\x30\x9a\x4d\x99\x96\x4a\xf5\x64\xd8\x0e\x0c\xcf\x0d\x3d\x76\x56\x40\xa2\xec\x61\x23\x5c\x28\x05\xcc\xa5\xc4\xda\x90\xe6\x97\xe6\x2b\xe5\x1e\x56\x75\xcf\x77\xe6\x1d\xb7\x6a\x37\x53\xef\x6f\x88\xd3\xfd\x9d\x45\x1c\xa4\x74\x77\xf4\xf6\xa7\xa5\x06\x87\x55\xf0\xf0\xe9\x3f\xbe\xcc\xdc\x53\xef\x7c\x50\x36\x09\x7c\xf8\x32\xf4\xad\xf5\x68\xd3\xa2\x75\xf7\x99\x92\x3f\x8f\xf5\xbf\x5d\xdf\xea\xf0\x7f\xf3\xfa\xf4\xe1\x5f\x36\xe8\x65\x54\xa8\x61\xcd\x7a\x09\xd7\x6c\xfc\x67\x2d\xcd\x00\xaa\x4c\x4e\x1d\xd4\x62\x58\x0a\x01\xdf\x76\x62\x57\x9e\x88\x4d\x86\x64\x04\x6e\x6f\x75\xf8\xab\x7b\xa9\x9d\x37\x6d\xa9\x67\xa4\x8b\xbe\xab\x38\x5a\x64\x9b\x59\xa4\xc1\x4a\x45\xc3\x59\x5c\xc4\xb6\x63\xd1\xd3\x87\x78\x41\x38\xf1\x7a\xf9\xa8\x1b\x36\x82\x12\xdd\x3c\xf0\xc9\x2e\x39\x69\x78\x05\x16\xd7\x29\x47\x0b\x3f\x77\x1e\x53\xad\xa4\xb1\x83\x0f\xd0\xb8\xdc\x90\x8e\x31\xf2\x4b\xfa\x0b\x3a\x45\x50\xe7\xfe\x79\x87\x6c\x66\x86\x6b\x56\x7f\xae\xe4\x93\xe1\x36\x9c\x18\x5a\xa9\xe2\x86\x84\x73\x96\x42\xe9\xb2\x61\x43\xf7\x6f\x7c\x4a\x49\xad\x32\xfa\xeb\xf5\x65\x8b\xdd\xa3\x2d\xf7\xf6\x9f\xf4\xd5\xd9\xdb\x3b\xb7\xc4\x55\xea\xe0\xcd\x77\x5b\xdb\x5b\x72\x2b\x0f\x10\x3a\x51\xf0\xa1\xd1\x64\xe7\x8e\x8b\x42\x13\xbd\x83\xdc\x9d\x5c\xbd\xa7\xfc\x25\x36\xd0\xeb\x79\x17\x8d\x2d\x01\xd4\xe6\x1c\xae\xe3\xee\xb2\x77\xb2\x83\xe9\xd8\xee\x9c\x5c\xc0\x6e\x93\x32\x40\xcb\x3a\x72\x25\xa5\x4e\xbd\xcb\x00\xef\xcf\xb1\x85\x26\xde\x9f\x3f\x90\x41\xbb\x6a\x2d\x13\xca\x31\x04\x52\xb1\xf2\x53\xcd\x3c\x5f\xeb\x22\x72\xf7\x28\x98\x38\x3a\xcd\x54\x1e\x7b\x41\x57\xff\x5a\xa5\x9c\x5d\x2e\x92\x35\xe6\x3e\x8d\x6c\x54\x37\x17\x2d\x3f\x64\x7e\xb1\xbb\x85\xf1\x9e\x9f\x11\x9f\x25\x12\x8e\x7b\xbe\x4d\x57\x54\xb2\xfb\xa7\x80\x8f\x7c\xa8\x9e\xa9\x10\x99\x37\xb2\x58\x05\x5c\x45\x96\x55\x42\xfa\xfb\x4f\x08\x5d\x97\xd2\x66\x4a\xc9\xfa\xe7\x91\xf9\xb6\x8c\x7a\x2b\x65\x8b\xce\x3c\x39\xe2\x55\x52\xf1\x0e\x05\x7e\x41\x48\xb5\xdd\xf4\x28\x92\xd0\xc1\x41\xce\x38\x26\xff\x16\x2e\x76\xc7\x25\x2b\x5d\x30\x86\x8c\x11\xe3\x24\x0e\xc9\x66\x62\xcc\x18\x37\x02\xc7\x9d\x2f\xd0\x4e\x4b\xfa\x04\x3d\x24\xc7\xb5\xe9\x01\x33\xae\xb5\x88\x73\xe4\xea\x33\xa1\xe7\x5b\xf3\x78\xcc\x18\x27\xfb\x44\x77\xd9\xb8\xd3\x2b\x94\x16\xf1\xe1\x82\xe5\x2c\x06\x86\x25\xe9\x3a\xb6\x73\xf4\xc8\x17\xb5\xf2\xf3\x25\xcb\xb7\xdc\x10\x47\x7a\x18\x66\xa1\xb9\xac\x06\xa2\xce\xcb\x0c\xb2\x58\x85\x25\x6b\x99\xdc\xa4\x28\xcf\x7e\xa2\x87\xb8\xb2\x0a\xc8\x8b\x73\x17\xb5\x2f\x80\x57\x09\x44\x31\x1d\xf3\xcd\x1c\x57\x5c\x33\x07\x5b\x94\xc4\xa0\x90\xcb\x44\x0a\x75\xa4\xdb\x55\x27\x31\x19\xa8\x1c\xeb\xca\x62\x0e\x8e\x06\xbb\x9c\x0f\x1c\xbe\xe0\x05\x38\xcc\xa1\xf7\x69\xd2\xb9\xfc\x76\x0d\xed\x6c\xe8\xce\x4c\xb7\xe1\xc6\x65\x1b\xe5\x68\x70\x46\xbd\xa9\xf2\xfb\xe6\x14\x1b\x4f\x6a\x77\xd4\x76\x28\xed\xd4\xb7\xa7\x3b\x94\x94\xdb\x27\xbd\x49\x9f\xe9\x43\x43\xd5\x1f\x38\x52\x4c\xfc\x5e\x9f\x79\x22\xed\x8b\xca\x92\x89\x80\x5f\x5d\xb7\x64\xe2\x51\x48\xc1\xdb\xab\x72\x09\xf5\x5d\xa6\xcb\x25\xde\xb7\x31\x35\x45\x9b\xd2\x65\xa8\x5e\xe2\xbe\x8d\xe6\xf6\xc4\x67\x69\x82\x09\xe5\x12\x55\x31\xf1\xfd\xf5\xb0\xb6\x35\xb8\xb6\x1d\x15\x82\x89\x03\x2a\xa9\xdf\x8e\x72\x68\xb8\x91\x99\x0f\xd6\xc8\xfa\xd7\xc8\x63\xca\x1a\x79\xa0\x25\xf5\xc2\x93\xda\xaf\xd4\x9e\xf9\x6f\xd6\x77\xd7\x9c\xf9\xd3\xb4\x04\x9f\xbe\xba\xd6\x88\xa5\x62\x82\xdf\xbf\xda\xdc\x3b\x6e\x24\x3e\xad\xa2\x27\x50\x97\xbb\xf4\x80\xe1\x07\xb5\xcb\xf8\xd9\x97\x27\xad\x45\x7c\x51\xfb\xc4\xb3\xd0\x47\xfa\xd0\x33\x8a\x9e\x7d\x82\x8a\x56\x17\xb1\x1b\xce\x78\x05\x27\xbf\xac\xff\x7e\x9f\xf9\x40\x5f\xca\x17\x02\xa7\x31\x11\xbf\xdc\x46\x0a\x3f\x24\xdf\xb3\xd1\x46\xb7\x0a\x6c\x03\x69\x94\x8a\xc3\x6c\x67\xca\x04\xff\x52\xe9\xef\xb9\x8c\xce\x0e\x1b\x54\xb4\x80\x5d\xb9\x9f\x14\xbb\x6d\x29\xc4\x35\x8a\xec\xee\x4e\x60\x9c\x3b\xe5\x53\x31\x01\x75\xc8\x9d\xa3\x25\xfb\xb8\xbc\x26\x0e\xd9\x3f\x91\x7f\xd0\x33\x30\x99\x83\x79\x6b\xd1\xb3\x47\xb6\xf3\x73\x54\xc9\xdf\x3b\x86\x0d\x1c\xe6\xb7\xc9\x83\x87\x93\x91\xb6\x4b\x96\x43\x26\x90\xd0\x29\x18\xd8\xca\x2f\x50\x48\x2c\xb4\x0a\x22\x96\x97\x47\xe3\x3a\xee\x7c\xce\xb8\x2b\xf9\x10\xc3\x51\x40\x1d\xdb\x6d\x2f\x7a\x17\xa2\x90\x5a\xaf\x58\xf4\x02\x27\xc4\xac\x7a\xec\x81\xad\x02\x9d\xcd\x68\xde\x24\xe5\xa1\x67\x2c\xdf\x2a\x14\x70\xe1\x9c\x7a\xfc\x2e\x8f\xee\x12\x96\x56\x91\x5f\xc3\xc2\x8e\x85\x77\x5c\x58\x67\xec\x5d\x08\xc5\x07\x79\x32\xaa\xed\xb0\xd8\x19\x77\xec\x5b\xba\xd3\xa7\x45\xb3\x93\xfe\xe8\x6e\x5c\x78\x05\x3c\x37\x1f\x0f\x43\xf8\x4d\x55\x9f\x71\x8f\xd4\x67\xfc\xa3\xe6\x27\xdc\x4f\xe5\x08\x53\x5e\xc1\x17\x4b\xb6\x03\x13\x8e\x70\xda\x12\x01\xe6\x4d\x26\xca\x72\x79\xc0\x91\x1b\x60\x09\x14\x98\x5a\x9b\x9e\x14\xea\x86\x4e\xe4\x3a\x95\xfb\x34\x51\x24\x4b\x93\x47\x4c\x85\x0b\x8e\x5d\xb2\x0a\x8a\x87\xbc\x10\xf0\xf0\x1f\x2b\x65\xe7\xba\x5c\x7e\x5c\xb1\x5d\x39\x18\xf8\x3d\x99\x0a\xc1\xc0\xaa\x7a\x25\xed\x02\xe9\xa8\x2b\xa3\x66\xbe\x3c\x8d\x31\xe6\xf8\x5f\xb4\x1c\xa6\xd3\x91\x9d\x49\x19\xfe\x43\x41\x74\x3c\x19\xcf\xd6\xcc\x3a\x57\xf2\x53\xf1\xc0\xcc\xdd\x4c\xa3\xa4\xc4\xdd\xd8\x91\xb5\xb1\xd3\xcc\x2c\x61\x70\x17\x96\xc9\x7c\x57\x70\xb0\x5d\x36\x3d\xf1\x89\x2e\x3e\x78\x23\xa7\x4e\x82\x3d\xbc\x43\x55\xaf\xbc\xa5\x1d\xea\x95\x2f\x6b\x41\xbb\xd4\x2b\xbd\x25\x34\xf9\xb7\x0c\x52\x27\x6f\xfd\x7b\x19\xf3\xeb\x19\xe5\x03\xa9\x85\x22\x7f\x8b\x11\xc0\x4f\x44\xa6\x8f\x3b\x4f\xee\xeb\x06\x95\xb6\x46\xe2\x5a\xfa\xc8\x34\x22\x4b\x4c\x70\x89\xce\xc5\x8f\xbb\x0d\xca\x4e\x4e\x65\x04\x30\xc1\x50\x64\x4d\xc2\x1c\xdb\x9c\xcd\xe3\xd0\x38\x72\xf2\xcc\xa8\xc0\x39\xfc\x65\x30\xaa\xc8\x5a\xd9\x0a\xc9\x14\x38\x46\x67\x68\xb1\xce\x8d\xb0\x39\x27\xa7\x3c\x71\x8e\x77\xaf\x5c\x70\x21\x9f\x13\x27\xfc\xd2\xb3\x8e\xf9\x9a\x60\xa6\x14\x40\xcf\xb4\x4d\x64\xf0\x4e\x3f\x98\x34\x36\xd5\xfd\xb1\x2a\xf3\x79\x5b\x33\x32\x9f\xef\x6a\x61\xd7\x64\x3e\x93\x62\xad\x0a\x42\x6b\xb1\x88\x6d\xba\xd7\x4d\x79\x58\x76\x7e\x6c\xa9\x30\x47\xfe\x4b\xfb\x45\x7c\xba\xe4\xb3\x62\xc9\x75\x5e\x5c\x8a\x50\x57\x64\x1e\xfa\x38\x90\x2e\x62\xb5\x47\xa1\x6f\x95\x27\xb3\xfe\x1f\x5a\xe5\xe3\x3b\xd3\x4c\xa0\x44\x3a\xeb\x07\xb4\x52\x22\xc7\x63\x0c\x8e\x56\xfc\x61\xbc\x1d\xc9\xd3\x79\xcb\x8c\xe1\x72\xa6\x1c\x11\x83\x44\xdb\x90\xa5\xdc\x8a\x66\x4c\xda\x6d\x6c\x1a\xcb\x2f\x97\x29\xf4\xf3\x75\xe8\x99\x17\x22\xf2\x28\xbe\x08\xf4\x6f\xad\x33\xdf\xb2\x2e\xed\x9b\x78\xb2\xa7\x3c\xe3\x95\x2c\x85\x86\xf4\x8a\x72\xbe\x4e\x23\x24\xf9\xb9\xf3\x6c\x3e\x4d\xef\xa8\x69\x63\x71\xd1\x62\x1e\xe5\xc4\x78\x74\x30\x8b\x0a\x67\xb7\xa5\x27\x51\x2f\x59\xcb\x22\x85\x3a\x5b\x51\x58\x83\xaa\x03\xd8\x62\xb9\x63\x27\x69\xde\x74\xfa\x5b\x89\x58\x98\xb4\x97\x4c\x19\xac\xaf\x08\x3a\x4f\x76\xbc\x52\xbf\xb3\x75\x76\x99\x4e\x4b\xdb\x0c\xd6\x22\x27\x68\x7c\xbc\xe3\xf2\xec\xee\x42\x6f\xca\x5f\x42\x28\x8d\x80\xf1\xb4\x9b\x85\xd6\x79\x1c\x18\x45\x1f\xe7\xb1\x4d\x4f\xe4\xa7\xb3\xba\xe5\x2e\xf3\xc2\x83\x64\x39\xc3\x0c\x4a\x4b\x8b\x80\x32\x64\x75\x4b\x36\x86\xf6\xa2\x9b\x6b\x8f\x67\xb2\xb0\x51\xd3\x40\x41\xcd\xe8\x75\x57\xa0\xc1\x7a\xc8\x95\xfe\xc4\xe5\xe6\xa1\xb2\x4f\xab\x49\xdd\x70\xaa\x51\x1f\x49\xdd\x1e\xb8\x1c\xfd\xbc\x3c\x0d\xc1\xf7\xa4\x08\xe8\x4b\x5a\xfc\x2b\xc9\xcc\x6a\x25\x27\x48\x2c\x0d\x15\x7b\x5d\x0f\xe4\x3c\xff\x69\x5c\x63\xf7\xdd\xa6\x34\x76\x0a\x61\xa9\xaa\xb1\xdb\x87\xf6\xa0\x9b\x1a\x99\xc1\x3a\x2b\xb2\x7b\xbf\x86\x9e\xce\x2b\x2b\x85\x65\xff\x45\xbe\xfd\x57\x6a\x89\xef\xca\xa5\xd2\x74\xe2\x13\x0b\x4b\xd5\x95\x30\x9a\xf0\xd5\xef\xb9\xa5\x27\x27\x62\x5a\x88\xbc\x6b\xda\xeb\x7a\xbb\x5a\x65\x7e\xce\xee\x1b\x34\xf3\x1e\x2d\xf1\xe1\x30\x3b\x97\x21\x14\x51\x99\xf1\xa9\x5e\xdc\xb7\x7c\xdd\x91\xee\x39\x2e\xd9\x8b\x4f\xee\x01\x7e\x71\x89\x4e\x18\xff\x61\xfb\x70\xa2\x71\xb6\xc5\xd6\xfa\xbf\xd7\x52\x15\x83\x9f\xd2\x84\x64\xf0\x7d\x5a\xf9\xd7\x29\x4a\xbb\xd4\x3c\x11\x52\xd4\x17\x1b\x66\xc7\x42\x96\x69\x9d\x4c\xe2\xb6\xe4\x5b\x71\x8b\x3e\x2a\x6d\x98\xef\x01\x1d\x99\xa1\x91\xec\xe0\xe8\xb9\xee\xe4\x5e\xfc\x5d\x46\xe7\xc4\x97\xa5\x15\x48\xe8\x11\x5f\x22\x7a\xcd\x5c\xec\xf3\x96\xba\x4c\xa4\xe6\xb4\x68\x78\xe3\xb2\x71\x58\xa1\x97\x4a\x75\xe6\x94\x3d\xe4\xf3\x44\x45\x26\x93\x3b\xc8\x66\xea\x10\xbf\xcf\x07\xa4\x49\x22\xfb\xde\x5b\x35\xf3\x0d\x5a\xfc\xb3\x4e\x77\x3d\xf1\x5c\x23\x89\xc4\x0e\xc3\xe2\x8b\x6d\x31\xb4\x9b\x92\x01\xe2\x2d\x72\x8c\xdf\xab\x25\xbe\xeb\xd2\x18\x8f\xb7\x58\x62\x03\xdc\x87\x86\x1b\xb1\xeb\xf4\x9f\xad\x33\xff\x46\xab\x6c\xbd\xc5\xdb\x3f\x88\x19\x75\x55\x1e\x86\xda\x7b\x3c\xf3\x52\x11\xfb\x73\x9e\xbf\x28\x92\x50\xb3\xf3\xfb\xe9\x31\x07\x38\xa0\x76\x83\x65\xb3\x7e\x69\x15\x22\x5f\x7e\x60\xb8\x38\x8f\x83\xc0\x62\xe7\x1c\x89\x32\x14\x2d\x82\x58\xaa\xa2\xa6\x11\xb5\xcb\x5d\xd4\xfe\x28\x83\x3e\x52\x96\xb3\xe2\xbf\x6a\x68\xbc\xb1\x9c\x15\x29\xfa\x01\x73\x36\x76\x45\x4d\x51\x42\xc0\x16\x5d\xea\x4e\x48\xe6\x94\xa8\x24\x4f\x28\xcb\x64\x11\x7f\x0b\x21\x77\x4d\x54\xb5\xbb\xeb\xcc\x64\xf1\xbf\x9e\x9e\xa6\xeb\x9b\xc5\xa1\x95\x76\x42\xb5\xfe\xe1\xa7\x9b\x9f\xda\x70\x64\x72\xe6\xf4\xe4\xe1\xf1\xb3\x93\x47\x8c\x11\xb6\x77\xa5\x0c\x56\x1d\x9d\x29\x47\x93\xb3\xec\x27\x3e\x96\xdd\x98\xdc\x6b\x94\xdd\x6b\xe7\x68\x8a\xa5\x61\x9c\xc1\x98\xef\x72\x88\x4d\x4b\xb3\xb5\xf0\x1c\xe6\x8b\x62\xc3\xef\x2f\xd2\x29\x37\x97\x7a\xc3\xc5\x62\x01\x8b\x4c\x7c\x86\xb3\x48\xe6\x67\x62\x81\x04\xae\x55\x0c\x16\xbc\x50\x7a\x77\x0c\x16\x16\x77\x98\xe2\x75\xc1\x09\xe3\xe6\x7c\x80\x7d\xc7\x2a\x38\xff\x51\x9c\x23\x60\x63\xf5\x93\x68\x33\x29\xf4\x55\xcc\xa6\xe6\x12\x50\xe9\x1f\x61\x36\x0d\x13\x01\x59\x69\x55\x5e\xb0\x02\x26\x59\x0b\x4a\x79\xd2\xfb\xa9\x88\x5f\xcc\x1f\x54\x23\xaa\x68\x9f\x24\xe8\x3f\x1b\x5b\x6c\xf8\xa6\xd2\x72\xa8\x3f\xc6\xb1\x23\x40\xcd\x93\xf0\x30\x9f\x01\x13\x8d\x12\x1b\x9d\x65\x49\x2c\x85\xc2\x10\x3c\x62\x85\x16\x33\x29\xd3\x9a\x95\xfa\x2a\x86\x8d\x05\x6f\x09\x5f\xc0\xfe\x30\xa9\x08\x43\x95\xb6\x92\x8e\x70\xd8\xb0\x59\x76\x44\x27\xa4\xc3\x83\xbc\xee\x59\x8f\x6f\x02\x94\xe3\x49\x5d\xbb\xc2\x04\xc2\x5e\xb3\x90\xf1\xba\xb6\xcc\xc7\x37\x1c\x73\xa5\x38\xa4\xb9\xc8\xbb\xbb\x5d\x54\xc7\x09\x85\x7b\x39\x28\xf1\xed\xbd\xc7\x4c\x5b\x76\x32\x45\xcc\xfd\x45\xcc\xe2\x79\xb6\x61\x99\x2b\x85\x25\x5f\x76\xb5\x80\x31\x96\x3c\xef\x11\x1c\x54\x91\x76\xb7\x71\x11\x33\x60\x4b\x1e\x2d\x08\xad\x59\xa7\xc0\x20\x25\xcb\xa3\xe8\x3b\x8b\x96\xef\x14\x58\xf8\x8a\x7c\xf1\xbc\x09\x94\xe7\x63\x7b\x09\xd6\xa4\x17\xb5\x7f\x07\xe5\x4a\xa3\xde\xbd\x65\xd4\x47\xdd\x4c\x2f\xae\x4c\x35\xe2\xcc\xd2\x2f\xb9\x54\x53\x70\xda\x5a\x9a\xbc\x3b\xc4\x2e\x69\x42\x73\x17\xed\xec\xc2\xa5\xc3\x87\x34\x2e\xeb\x28\x02\xa2\xd1\xf1\x0b\x0e\xc1\x35\x75\xc4\xf7\x2c\x92\x03\x55\x39\xe8\x25\x5a\x65\x62\x4b\xb3\xa4\x55\x6a\x8f\x49\x62\x7c\xd2\xe7\x62\x56\xdb\x93\x9a\x55\xdb\xd9\x79\xab\x7e\x4b\xba\xb3\xb3\x7c\x8e\x8e\xfb\x3b\xe9\x62\x8e\xd0\xcf\x36\xa1\x5c\xfd\x2b\x3d\x95\x2c\x7c\x66\x93\x79\x47\xfa\x57\xac\xc3\xcb\xde\xcc\xd7\x3b\xba\x3a\x4a\xb6\x96\xb2\xbe\xf1\x45\x52\xd1\x35\xfc\x1c\xf2\xaa\x37\x3a\xf3\xfd\x27\xa1\x6b\x08\xcc\xad\xa9\x79\xd5\x53\x16\x6d\x95\xa3\xdc\x82\xc6\x6a\xe7\x6e\xab\xd4\x2f\x60\xf2\xab\x7f\xf2\xfb\x03\x75\xf2\x7b\x53\x8b\xd9\x1c\xee\xec\xd4\x49\xc3\xb8\xf6\xd4\x33\xa1\x1f\xaa\x77\xea\x29\x97\x5b\xf0\xe9\xe7\xe5\x28\x4d\x73\xc1\xba\x99\x12\x38\xf4\xd5\xcd\xe6\x7f\xd3\xea\xd8\x60\x1c\x89\xa5\xaf\xae\xb2\xb1\x50\x53\xbd\x36\xb2\xa1\x68\xfd\x44\xa5\x0f\x82\x51\x07\x72\xe4\x4b\xfe\x44\xa5\xbb\xb9\x52\xb9\x58\x3b\xbe\x3d\x39\x98\x5b\x3c\x56\x29\x94\xd2\xce\x5f\xad\xe2\x1e\xaa\x74\xef\xa6\xcf\x56\x6a\x45\x77\x56\xe9\x6c\x25\x3e\x07\xfe\xc5\x7a\x74\x63\xed\xaa\xc3\x29\x4b\x70\xca\x52\x0f\x9f\xb2\xf4\x83\x8d\x69\xb9\x06\x93\x9d\x98\xee\x1f\xfe\x5b\x53\x47\x2d\xbd\x17\xb6\x04\x8d\xae\x9b\x8b\x62\x4b\x60\x37\x78\xd4\xd2\x6e\xb4\xb3\x76\x04\x4a\xf2\xdd\xc2\x32\xdd\x63\xe7\x2d\xbd\xa0\xf6\x92\x35\xa6\xef\x6d\xfc\xbc\x25\xbe\x6c\xfd\xdb\xa6\xca\x3e\x82\xe8\xe7\xa7\x39\xa1\xd5\x3f\xb7\xc9\xfc\xe5\xc8\x82\x57\x2d\x69\x71\x09\x0d\xde\xe3\xe3\x57\x31\xba\xa3\x14\xf1\xa1\x27\x81\x6f\x6c\x55\x23\x4b\x98\x6b\x2d\xe2\x07\x35\x24\xbe\x3f\xeb\x5d\xd4\xfe\x05\x66\x0c\xb0\xb4\x3b\x36\x84\x6f\x47\xb4\xcf\xe9\x87\xcc\x5d\xa7\x79\x07\x1d\x63\xbb\xd2\x84\x3a\xf5\x24\x57\x7e\x5a\xf1\xb3\x21\xd4\x69\x5a\xe9\xb6\xfa\x8b\xea\xb5\xa8\xc5\xb0\x39\x4c\xd3\xe4\x9b\x43\x67\x17\x64\xca\x7c\xd1\x75\x95\x55\x5b\x9e\x5c\x84\xce\x21\x9d\xb7\xdb\x38\x69\x47\xa6\xb9\xd1\xa7\xcc\x11\x2a\x73\x8f\x3e\xe2\x79\xdf\x84\x94\x81\x58\x62\x4a\x81\xef\xd2\x2e\x47\x97\x29\x4f\x41\xff\x64\x6f\xbd\x35\x6e\x59\x3e\x2f\xa4\xce\x3e\x3f\xbf\xa2\x1e\x7b\x83\x06\x6c\xfc\xcf\x2b\x3a\x70\xee\x5b\x74\xd8\xdb\x8f\x2e\x87\xbc\x90\x70\xd8\x1b\x1c\xf6\xb6\x82\x87\xbd\xfd\x45\xa5\xc3\xde\xde\x29\x2b\xf8\x40\xef\x1d\xf6\xb6\x33\xfe\x10\xef\xd4\x62\xeb\xc0\x83\x5a\x93\x0b\xc1\xac\x6a\x65\x29\x8b\x42\x72\x45\x20\x83\x98\xa7\x23\xa1\x16\x15\x59\x5a\xef\x12\x73\x40\x01\x5b\x74\x02\x98\x23\x0f\x2b\x8d\x2e\x52\x80\xe7\xe2\x1c\xfa\x9c\x7a\x2e\xdd\x27\xda\x71\x2e\xdd\x4b\x56\xf0\x58\x3a\xf4\x67\xea\x69\x73\x1f\xa8\xe3\x0c\x9b\x72\xae\xb4\xe6\x8e\x9c\xbb\xe7\x69\x68\x6b\xbd\xc0\x4d\xff\x52\x5b\xcf\x9d\x7b\x15\x9c\x3b\xd7\xdd\x73\xe7\x7e\x16\x17\x74\xff\x9f\x4e\x9e\x3b\x77\x00\xed\x47\xfb\x1a\x1d\x7f\x70\xf8\x1c\x1c\x3e\x07\x87\xcf\x75\xff\xf0\xb9\xfb\xd7\xd5\xc3\x80\xa4\xaa\xf8\x1f\xda\x7a\x02\xdd\x9b\x32\xe8\x1d\x65\x6a\xde\x37\x57\x51\x13\x95\x9b\x4d\xab\xf2\x18\xba\xff\x47\xab\xbc\x35\x8e\xdb\x8a\xfa\x4b\xcc\xcb\x14\x6b\xf1\xa2\x76\x1e\x39\x8a\xae\xe9\x05\x62\x86\xbb\x3d\x16\xa4\xac\x62\x38\x62\x34\x1e\x9b\x13\x59\xf3\xb6\x0f\xab\xdf\xf0\x85\x81\xae\xee\x69\xa2\xf4\x77\x3c\x0d\x35\xfa\x72\xf4\x1f\xb5\x92\x41\xf4\x91\xcb\xd0\x13\x6a\x06\xd1\xaf\xb4\x9c\x53\xf1\x4d\x90\x41\x14\x32\x88\xae\x54\x06\x51\x48\x20\x0a\x09\x44\xd7\x48\x02\xd1\x87\x32\x68\x6f\x5d\x4b\x45\x5a\x16\xd1\x7f\xe8\x76\x16\xd1\x00\xbd\x58\xcd\x21\x6a\x0b\xfb\xec\x54\x9b\x73\x88\xc6\x56\xd3\xbf\x43\x69\x87\xcf\xb2\x26\x3a\x43\xde\xb7\xfe\x08\x32\x77\xd2\xbf\x12\x79\x42\xf9\xbb\xe6\x3e\x16\x0e\x50\x85\x3b\x27\x77\x51\x7b\xc7\x66\xf0\xa3\x81\x1f\xad\x53\x7e\xb4\x4f\xa8\x72\xd8\x87\x5b\x8e\x05\x78\x71\x25\xcd\xda\xfe\x0e\x45\x02\x50\x7a\xc8\xc4\x70\x7f\x52\xc7\xe9\xae\xca\x80\xa4\xe4\xed\xe5\x9a\x3a\x78\x92\x3e\x27\x3a\x51\x77\xf8\xf4\xd1\x1c\xfa\xef\x51\x02\xd0\x8f\x69\xb5\xcf\x6d\x55\x1f\x81\xe9\xe9\x64\x58\x7b\x82\xda\x75\xa5\xfa\xca\x31\xad\xad\x1d\xa4\x4a\x9f\x28\xd5\xd9\xf8\x11\x2d\xed\x94\xb9\xc4\xab\xd4\x1f\xd0\xcc\x7d\xf2\x5f\x09\x90\x6a\x85\xec\xc9\xb0\xc8\x6e\x40\xe7\xe1\xa0\x34\x2b\x86\xfb\x45\xed\x0e\x74\x46\xa1\x34\xd1\x61\x34\xe5\xdb\x04\x96\x57\x2b\x8f\x23\x82\xc8\x17\x74\x3e\x9b\xc6\xd6\x85\xd7\x6d\x4c\x3b\xf3\xa9\xec\x1d\xea\xdf\xda\x60\x8e\x2b\xff\xae\xe7\xb8\xa7\xb2\x87\x48\xa4\xc2\xd8\x80\x9e\xa7\x3c\xd1\x49\xf1\x44\xfb\xac\x7c\x58\x8a\x5b\xe5\x82\x98\x45\x4f\xa6\xf6\xa0\xf4\x07\x7b\x8f\xea\x83\x78\x48\x33\xef\xd1\x9a\x48\x2a\x15\x88\xac\x52\x89\x3e\x9a\x9e\x2b\xaa\x14\x60\x7f\x64\xbe\xe4\xd8\x98\xe7\x83\x4a\xa6\x83\xaa\xe2\x15\x47\xbf\xde\x87\xae\x60\xf0\x45\x38\x3d\xf4\x7f\x5a\x67\xfe\xc3\xba\xff\x9f\xbd\x37\x01\x93\xe3\x28\x0f\x86\x9f\x9a\xdd\x95\x56\x25\x1f\x7c\xfd\xe5\x83\xef\x27\x07\x95\xb2\x41\x5a\x33\x3b\x3a\x6c\x4b\x96\x6c\x30\xeb\x5d\x09\xaf\xad\x63\xd1\xae\x6c\x03\x01\xd3\x3b\x5d\xb3\xdb\xa8\xa7\x7b\xdc\xc7\xae\xc6\x84\x2f\x1c\x36\x01\x0c\x04\x62\x0c\x58\x1c\xb1\x09\x18\x62\x6e\x42\x38\x02\xd8\x1c\x01\xc2\x26\xbf\xc9\xf1\x11\x6e\x72\xe1\x70\x06\x92\x70\x04\x94\xfc\xc9\xff\xd4\x5b\x47\x57\xf7\xf4\x5c\x7b\xd8\x32\x0c\x3c\x8f\xb5\xd3\x47\x75\xd5\x5b\x6f\xbd\xf7\xe1\x15\x3b\x3e\x7a\x9c\x77\xea\x9a\x52\x79\x6a\x20\xf2\x1a\x31\xf1\x90\x61\x59\xb7\x1b\xe3\xf3\x36\x17\x70\x80\x43\xf2\xc5\xb2\x93\x7c\x83\x23\x77\x09\xca\x40\xc9\xbb\x7a\x25\xe9\xc8\x4e\xe0\x83\xdf\x02\x0c\xcc\x9c\xe1\x86\x01\x3f\x82\x52\x8c\x31\xb8\x4c\x24\xac\xd7\x92\xc7\x29\x87\x81\xca\xb5\x97\xe6\xe6\x3a\x17\x05\x05\x4a\xc1\x46\x8d\x83\x84\x45\xa2\xa6\x1f\xdb\x27\xc1\x96\x00\xe2\x24\xc0\x49\xa6\x34\xfb\x5e\x93\x44\x49\xa3\x11\x84\x71\x64\x2c\x44\x4f\xb5\xac\x92\x48\x53\xd3\x38\x48\x01\xf9\x07\xd5\x4d\x28\x4b\x28\x5b\x3e\x3f\x30\x55\xc2\x4c\x7e\x77\xcb\x59\x1d\xce\xa3\x51\xdc\xfd\x1f\xb7\xd2\x37\x0f\xf5\x90\xf2\x60\x8a\x89\x9d\x73\x1e\x32\xa5\x2d\xfa\x49\x7a\x18\x94\x98\xef\x52\x62\xfe\xcb\x83\x9c\x8e\x81\x84\xfc\xd0\x28\x31\xdf\x94\xb2\xea\x0d\xdd\x8b\x26\xb5\xd0\xa4\x35\xd6\x99\x7f\x5f\x2a\x66\xfe\x01\x6a\x1f\xb9\xdf\xfe\xf3\x0f\x52\xb1\xf9\xa7\x74\x97\x29\xf7\x5a\x17\xf7\x59\x6c\x5e\x4a\x96\xf7\x15\x16\x66\x69\x59\xfa\xa0\xec\xfc\x2f\x60\x1a\xc6\xaa\xca\xce\xdf\xb3\xb9\xa8\x85\x41\x0b\x42\x41\x22\xc6\xef\xae\xa9\xf6\xfc\x0f\x07\xb5\xe7\xfb\x65\x7a\x57\xab\x84\x8c\x2b\xcc\x88\x87\x8b\xf1\x85\x3d\x2b\xdd\x83\x02\xf4\x0f\x76\x01\xfa\xa7\x77\xe7\x06\x97\x5a\xfb\x56\x51\x80\x5e\x72\x84\xbf\x7c\x44\x4f\x07\x18\x2c\x0e\x6f\x5e\x5b\x29\xfa\x76\xf5\xe7\xef\x1b\xd4\x9f\x1f\xd4\x9f\x1f\xd4\x9f\x1f\xd4\x9f\x7f\xb0\xea\xcf\xbf\xd7\xac\x3f\xff\xe6\xf5\xa8\x3f\xff\x77\xeb\x58\x7f\xbe\xa6\xaa\x50\xca\x75\x08\xaf\xa1\xea\x84\xee\xab\xa3\x6d\x54\x4c\x1e\x54\xa2\x1f\x54\xa2\x1f\x54\xa2\x37\x2b\xd1\x7f\xa7\xb5\x12\xfd\x17\x10\xbe\xbc\x6f\x29\x78\x50\x8e\x7e\x50\x8e\xfe\xcc\x2f\x47\xff\xea\x73\xf0\x58\xcf\x06\x2e\xeb\xdb\xeb\x5d\x93\xfe\x35\x83\x9a\xf4\x1c\x00\x66\x0a\xc3\x0f\x36\xb4\x26\xfd\xe3\xf1\x65\xdd\xbb\x6a\xb4\x37\xf2\x0d\x0a\xd3\x0f\x0a\xd3\x0f\x0a\xd3\x0f\x0a\xd3\xff\x02\x14\xa6\x7f\xfd\x30\xde\xd5\xb7\x98\x67\x7d\xf3\xe7\xb2\x3a\xfd\x2b\x4a\xf8\x9e\x96\x7c\x96\xb7\x23\x7c\x70\x15\xf9\x2c\x0f\x56\x89\xfa\x23\xd2\x67\x71\x90\xee\x5b\x75\x89\x7a\x13\xa3\xff\xa1\x6d\x21\xfa\xdd\x45\x85\xe8\xff\xf0\x5c\xfa\xb1\x75\x2e\x44\x3f\xa8\x41\x3f\xa8\x41\x3f\xa8\x41\x3f\xf0\xf2\x0d\x6a\xd0\xff\x7c\xf9\x04\x07\x35\xe8\xcf\x8c\x1a\xf4\xbb\x3b\xd5\xa0\x2f\x62\xf2\x83\x1a\xf4\x67\x2c\xe5\x7b\xc0\x6a\xd0\x17\xe1\xc5\x80\xf8\x0d\x6a\xd0\xf7\x5f\x83\x7e\x37\xc6\x9f\x3d\xab\x5d\x76\xc7\xee\x8a\x96\x08\xad\xdf\x3f\x8b\xbe\xaf\xa7\x12\xf4\x5a\x86\x6c\xab\x51\xe8\x47\xfa\xac\x3d\xaf\x47\xce\xdb\x82\x21\x99\x3f\x09\x8d\x48\x0f\x07\x9e\x05\xaf\xda\x0a\x7a\x29\x1e\x50\xb2\x41\x78\xf2\x40\x90\x6a\x2b\x48\x7d\x46\x65\xf0\xdd\x83\xf0\x85\xbd\xf1\x1f\x7d\x18\xc1\x77\xfb\x02\x34\xd7\xb6\x72\x24\x84\x1c\xeb\xd3\xb8\xb1\xc9\x70\xf8\x8d\x25\x1d\x82\xfa\xea\x52\x6f\x21\xde\xe6\x5a\x44\x84\xf5\xd7\x60\x35\x45\x29\x7d\xb9\xb5\xac\x26\x9e\x9a\xcc\xa8\xdc\x1b\x65\x60\x8c\x9a\x51\xcc\xea\x66\x1e\xdf\xc6\x02\xe9\x34\xba\xae\x3b\x63\xb9\xd8\xba\xb0\x4d\x7d\x52\x05\xac\x42\x5e\xf2\xe9\xe1\xf6\xf6\x2a\xfd\x66\x1a\xcd\xfd\xea\x61\x3a\xdd\x7a\xb9\x7d\x2c\xb7\x61\xa0\xe8\x25\x92\xfb\x83\x83\x48\xee\x33\x22\x92\x7b\x97\xb4\x8a\x8e\xd1\x5f\x51\x91\xdc\xe9\x4e\x16\xc7\x71\xdf\x3b\x8a\x1f\xdd\x15\x91\x40\x15\xba\x6d\x94\x8e\x67\xae\x14\xc5\x70\xa7\xa7\xd6\x54\x71\xfe\x63\xa0\xe2\xf4\x2b\x18\xd8\x4a\xc5\xb9\x8e\x3e\x7c\x42\xeb\x35\x26\x78\x4d\x85\xe6\x42\xbc\xab\xb7\x94\x70\x63\x53\x07\xb2\x47\xef\xb2\xc7\x1f\x9b\xb2\xc7\x3b\xd6\xa8\xc7\xf8\x6d\x2a\xe9\x6f\x90\xd4\x71\x1a\xfd\x46\x77\x36\xb4\xcf\xda\xdb\x85\x0d\xb5\x55\x6b\xde\xbf\xb5\x07\x0a\x02\x61\xe4\x2f\xd9\x4a\x2f\xcc\x5c\xe9\x10\x42\x6e\xb0\xff\x53\x48\x07\x69\x66\x0a\x62\x7f\x14\xe3\xdf\x2d\x28\x88\xfd\x5f\xda\x11\xf9\x2d\x90\x2f\xea\xab\x28\x8a\x9d\x52\xcd\x87\x44\x79\xec\xac\xaf\xf3\xde\x76\x55\x8a\xef\xd2\x90\x79\x79\x41\x95\x62\x15\x93\xfb\x20\x54\x28\xce\xc7\xe5\x7e\xdc\x8c\xcb\x7d\xdf\x7a\xc4\xe5\xfe\x00\x4d\x74\x8a\xc5\xb5\x43\x96\x8f\xc5\xcc\xc8\xd2\x69\xa5\x7d\xd7\x97\xc1\xfc\x7a\x5b\x85\xfa\xef\x80\xff\x23\x57\x92\xdf\x8c\xce\x05\x41\x60\x9e\x79\xc5\xec\x63\xfd\xc3\x74\x6f\x1a\x32\x02\x45\xff\x7d\x35\x81\xa2\x9f\x28\x4d\xf8\xab\x88\x0d\x95\xb5\x65\xf5\x09\x32\x53\x05\xd8\x49\xbb\x0a\xd5\x77\x21\xd4\xae\xd1\xd4\xac\x9d\x0f\x16\xf8\x84\x41\x50\x9f\x1f\x38\x4c\x45\x01\xc6\xd5\x45\xe5\xd4\x4d\x01\x09\x0f\xe8\x40\xeb\xed\x5c\x03\xca\xbc\x0b\xb1\x12\xb9\xa7\xdc\x28\xc5\xbe\xb1\xbe\xf7\x80\x83\xde\x0b\x6c\x27\xda\x61\x78\xb0\x76\xc8\xe0\x08\x0e\xd1\xf4\xf2\x79\x8d\xc0\x19\x57\x93\xc5\xaf\x69\x0d\x40\xbd\xb9\xc7\xd2\x91\x06\xf9\xcc\x85\x9f\x4e\x4d\xf8\x69\x65\xae\xb4\xf0\x73\x4b\x39\xcb\x0c\x19\x33\x0a\x5b\x8a\x62\x57\xff\xf6\xb0\x76\x19\x40\x2d\xaa\x9a\xf5\xe9\x87\xd1\xc7\xe7\xae\xf5\x52\xb9\x23\x43\xc5\x1f\x2e\x9f\x10\x25\xdc\x67\x55\xa5\xc2\x53\xc8\x12\x84\xe8\xb0\x1b\x45\xe9\xc5\x87\x4b\x2d\xb7\xe5\xe9\xad\xe2\x69\xa0\xf9\x2b\xe8\x1d\xe7\xe2\x6f\xb4\xc6\x1c\xfe\xa5\xa6\x74\x1f\xee\xa1\x2c\x72\x6a\x26\xcb\x62\xee\x99\x15\x59\x78\x3a\x1b\x59\xf8\x5d\x44\x0f\xf5\x1f\x59\xa8\x17\xd7\x31\xae\xb0\x0f\xfb\x78\xab\x56\xb9\x21\x51\x85\xff\x88\x70\x1b\xf4\xb1\xfe\x54\xef\xf5\x7b\x73\x5c\x0d\xb2\xbb\x5a\xeb\xe4\xea\xb0\xe0\x5d\x0a\x3f\x39\xf5\x81\x0e\x0a\x21\x13\x15\x40\x64\xbc\x4a\x98\xf8\x26\x2f\x80\xb8\xe3\x75\x21\x1c\x62\xc0\x88\xc5\x3b\x32\x5b\xfc\x23\x84\xdb\xa0\xbd\xf5\x25\xbd\xca\x4f\xc2\x2a\xf3\x85\xf0\x8c\xb5\x1a\xe2\x8a\x5c\x71\x76\x0d\x64\xbb\x88\x30\x82\x88\x6c\x78\x0d\x62\xfc\x80\x30\x17\xbf\xb1\x5e\xf4\xb2\xcd\xb2\x57\x10\x3e\x57\xac\x64\x42\x97\x91\x7c\xbf\x5e\xef\x1d\xed\x77\xb5\xeb\x4a\xa1\xaa\x87\xbd\xc4\x84\x06\x2d\x8d\xdd\xaa\xff\x4a\xfa\x98\xc6\x0c\xdf\x14\xb6\x8a\x8a\xb7\x43\x69\xe2\x7c\x05\xf7\xcc\x62\xbe\x86\x70\x01\x3d\xb3\x3e\xad\xd7\xf3\xee\xde\xb0\x34\x3b\x45\x91\x06\xc1\xef\x83\x18\xf5\x20\xe2\xe8\x6b\x10\x36\x29\xb0\xf5\x42\xbd\xb0\xe8\x01\xdd\x27\xd8\x9c\x2c\x85\xfc\x14\xc2\xff\x43\x7c\xdf\x2c\x48\xfa\x2e\x3d\xc1\xdb\xd7\x03\x93\x7c\x69\x8c\xd9\x40\x14\xf2\x0a\xe3\x7c\x53\xcf\xfb\x5c\x0f\xf1\xbc\x2d\x52\x6c\xdb\x00\x54\x0f\x3f\x5c\xaa\xd6\x79\x9a\x73\x4c\x01\xee\x71\x5d\x28\x8e\x89\xb7\x2a\xf2\x37\x85\x4d\x36\x10\x73\xa8\x5d\x31\xe6\xb6\xe2\x8e\xf5\xed\x12\xbd\xae\xcd\x3d\x6d\xb1\x48\xaa\xb1\x11\x66\x98\x16\x6c\xce\x8b\x49\xa2\xea\x64\xca\xf2\x57\xd0\x2d\x25\xfc\xea\x96\x70\xc8\x9b\x11\xbe\xac\x37\x06\x98\xad\x20\xad\xc6\xa5\x07\xfa\xab\xee\x1d\x8b\x5a\xde\xf9\x42\xdc\x38\x90\x16\xbd\x05\xfa\x14\x5d\xcd\x3b\xdd\x52\x55\xe9\x56\x17\xf5\xce\xbc\x0d\x95\xbd\x8f\xfa\x53\x10\x9b\xd6\x6b\x51\xef\xff\xdc\xd2\xae\x51\xf6\x6e\xb3\x51\xf6\xe7\xb7\xd0\x7b\xd7\xa9\x51\xf6\xa0\x47\xf6\x43\xc9\x2e\x39\x30\x1a\x3e\xd4\x7b\x64\xef\x7e\x10\x7b\x64\xef\x3e\xa3\x7b\x64\xef\xee\xd4\x23\x7b\xf7\xa0\x47\xf6\xa0\x47\xf6\x43\xbd\x47\xf6\xee\x41\x8f\xec\x9f\xdb\x1e\xd9\xbb\x07\x3d\xb2\x7f\x31\x7b\x64\xef\xc6\xf8\x85\x6d\xbb\xd4\xe6\xb9\xbd\xf5\xb5\xb3\x37\xa0\x4b\x6d\xa1\x7f\xee\x87\x67\x0d\x1a\xd6\x0e\x1a\xd6\x0e\x1a\xd6\x3e\x88\x0d\x6b\x3f\xd9\xce\x15\x7c\xb7\x9e\xe0\x2b\xcf\xbc\x86\xb5\x79\x77\xf0\x4f\xcc\x0a\xec\xdf\x5e\x8f\x2e\xb0\x6f\x42\x0f\x62\x1b\xd8\x9e\x1d\xc5\xab\xeb\x17\xbb\x7b\xd0\x2f\xb6\x57\xe5\x73\xd0\x2f\x76\xd0\x2f\x76\xdd\xfb\xc5\x16\x1a\x0a\x06\xfd\x62\x07\xfd\x62\x07\xfd\x62\xcf\x80\x7e\xb1\x45\xdc\xf1\x4c\xea\x17\x9b\x77\x28\xfd\x1c\xf5\x8b\xbd\xf3\x9c\xf6\xae\xa5\x94\xc2\x5b\xa7\xcf\xa6\x5f\xec\xc5\xb5\x64\xb4\x1b\x6c\xeb\x5a\x32\x18\x47\x5f\xae\x25\x63\x6c\xe8\x41\x98\x36\xf2\xd0\x22\x6b\xf6\x08\x67\x0b\x20\xe6\x9a\x6b\x8a\xea\xb2\x90\x95\xb2\x82\xee\xdd\x3a\xb0\x9d\x0d\x7c\x4e\x1b\x65\xcc\xfa\x40\xc9\xb0\x66\xdd\x5d\x5a\xab\xd7\xe9\x5b\x48\x36\x4a\x3a\x24\xab\xce\xd6\xa0\x6c\x96\x3e\x1c\x1c\xd9\x65\x45\x2a\x5d\x0d\x39\x53\xad\x56\xea\x44\x50\xea\x50\xb6\x63\x9a\x09\x9c\xed\x5c\x8a\x55\xd6\x0f\x63\x38\x11\x82\x1b\x41\x27\xa0\x07\x3a\x37\xef\xdb\x2a\x37\xef\xef\x50\xaf\x7e\xb4\x74\xe6\xa0\xac\xbc\x05\xb5\xb4\x2c\xe9\xcb\xa4\x66\x12\xab\x8d\xcd\xde\xfb\x70\x9a\xbd\xf7\xee\x52\xaf\x9e\x3b\x63\xb5\xc2\x73\xf7\x63\xb4\x0a\x85\xc9\x5c\xe4\x43\x35\xad\x6f\x2d\xfe\xc7\x74\xfd\x85\x86\xdc\xbf\x18\x6e\xef\x7f\x4c\x5f\x4d\xfd\x8f\x77\x0c\x43\x14\x68\xfe\x7a\x7b\xff\xa3\x2a\x32\xdd\x73\x97\x96\x7b\x86\xf0\x6d\xc5\x0e\xc8\xdf\x5a\xbd\xc7\x6f\x2a\xef\xf1\x1b\xe4\xf7\xad\xb2\x53\x8b\xb9\x9f\xc5\xde\xc0\x3b\xb7\xb4\xf7\x0d\xa4\xa8\x03\xde\xc0\x9f\x8c\xd2\xdc\xa5\xa2\x1c\x3f\x33\x86\x26\xf5\x09\x0e\x7a\x93\xf5\x2d\xd7\x7c\x04\x29\xa7\xe0\x7b\x11\x0d\x0e\x49\x47\xa0\x09\xde\x0d\x4c\x53\x58\xa5\x8f\xd1\xa0\x5f\x03\xb1\xac\x67\xb1\xec\xa3\x66\xfe\xe0\xbb\xd7\x98\x3f\x78\xc3\x03\x93\x3f\x68\x2c\x65\x6d\xfe\xcb\x2c\x45\x29\x64\x7b\xef\xc6\xbd\xd0\x28\xf0\x5f\xde\x8c\xe9\x45\xd9\x4b\x1d\xb2\x08\x0d\x69\xc3\xf0\x52\xae\xa0\x8f\x6d\x19\xb8\x26\xc1\x50\x72\xa7\xd9\x43\xc5\xec\x12\xd2\xbe\x76\xab\x12\x5f\xd5\x6b\x6b\xf2\x02\x19\x9d\x4d\xf2\x8e\xac\x0d\xa4\x7d\x3b\xce\x5b\x5e\xb4\xe3\x71\x37\x1a\xb7\xc7\xdb\x10\x47\x03\x46\xff\x9f\x99\x8d\xf8\x2f\xeb\x91\x8d\xf8\xb6\xd2\xec\x7a\x75\x09\x11\x7e\xac\x13\xac\x29\x5c\xaa\x82\x7b\xc9\xe4\xb9\x1e\xb2\x16\xb5\xb5\xcd\x90\x23\xce\xb4\x4c\xc6\x5b\xcd\x96\x17\x2f\x58\x4d\x26\xe3\x5f\xa2\xb9\x07\xac\xe5\xc5\x03\x95\x58\xf8\xd9\xd1\xf6\x7e\xae\xbc\xaa\x66\xbd\x6e\x94\x5e\x9e\xbf\xd8\x4b\xfe\x5e\x96\x7e\xa6\x95\xfe\xff\x7c\x33\xbe\xb9\xd0\xd3\xd5\x50\x14\xe4\xa9\x59\xaf\x72\x4a\x95\x34\xd8\x7a\xf2\x75\xe9\xb2\xe4\x26\x7e\x66\x4f\x67\xd6\x07\xf4\xfd\x55\x15\xdc\x37\x46\x5f\x2f\x27\x50\x81\x56\xb6\x21\x4e\xa0\x5b\x10\xfe\x25\x28\x92\x0b\x94\xc0\x30\xbf\x47\x6a\x2b\x9e\x9e\xdd\x8a\x94\xb6\x80\x45\xdd\xf4\x92\x28\x19\xcd\xd3\xd6\x9e\xfc\xd9\x57\xd7\xd4\x2e\xe6\x77\xe3\xb7\x0a\x5d\x52\xae\x72\x49\xcd\x1d\x6d\x2d\x50\x1f\xb2\x9a\x27\xeb\x06\x67\xdd\x55\xb5\x4e\x56\x85\x76\x2e\xc1\xeb\xf2\x1e\xab\xb4\xc1\x7d\x16\x0c\x02\xfb\x34\x36\x76\x47\xb4\x2f\x9a\xce\x2a\xd3\x8f\x9a\x67\x95\xf9\x19\x8b\x09\xb7\x36\x1f\x3b\x73\x38\xdc\x2b\x3a\x14\xc6\x2c\xce\x6f\xb1\xbe\xbe\x99\x5e\x01\xc2\x57\x2e\xdf\xa6\xc8\xb8\x65\x64\xac\x84\x19\x1f\x46\x65\x05\xbd\x6a\x33\xbe\x75\x33\x3e\xa7\x6e\x9f\x34\x73\xb6\x9e\xb3\xb9\x57\xcb\x65\x12\xbb\x5e\xc5\xf5\xe3\x28\x0e\x2b\xd3\x7e\x7c\x34\x9c\x15\xdd\x95\xee\xd9\x34\x57\xd8\xcf\x2c\x97\x12\x2d\x6a\x55\x0b\x1f\x87\xe9\xd3\x33\x62\x82\x54\x92\xcd\x35\xa0\xcf\xc8\x67\x6d\x9f\xd8\xf3\x51\xe0\x25\xb1\xc6\xa9\xed\xec\xe4\x7e\x72\xf1\x18\x81\x30\xab\x06\x0b\xf9\xfe\xdb\x0b\xe2\xc4\xe4\xfc\x5f\xb9\x49\x48\x43\x68\x14\xdb\xa1\xee\x62\x24\x9d\x3c\x30\xe8\xae\x9d\x8f\x1e\xab\x90\x89\xdc\xf7\xdc\x88\x54\x6d\xaf\x2a\x8d\x61\xa0\x19\x19\x5f\x9d\x6f\x92\x30\x48\x7c\x47\x00\x5b\xca\x68\x55\xad\x0c\xed\x4c\x7d\x36\x69\x77\xb4\x0a\x39\x70\xd2\xae\x37\x3c\xb6\x5f\x78\xe8\x63\x29\xd7\xf1\x8d\x8b\x03\x72\xe1\xce\x47\x97\xf9\x5c\x01\xbf\x2f\xdc\xf9\x68\x35\xd5\xb5\xa5\xa2\x56\x58\x45\x85\x6c\x15\xa7\xbe\x8e\x01\xcc\x95\xf7\xcf\x95\xc2\x51\x14\x07\x8d\x86\xf4\x90\xda\x3a\x1b\xbe\xd5\xe1\x02\x81\x0b\x3a\x09\xcc\x0e\xe3\x08\x2c\x8b\xfc\x6d\xe9\xa1\xc9\x2e\x27\x88\x58\xcb\xf6\x88\xee\x8c\x3e\x99\xe7\x38\x11\x91\xa4\x01\xde\xbe\xdc\x53\xba\xd6\x39\xb8\x08\x65\x89\x73\x19\xc3\x60\x74\x53\x52\x18\x06\x75\xba\x45\x23\xc8\x30\xa8\x42\x1c\x44\xe0\xc7\x01\x01\xd3\x56\x6e\xec\x32\x89\x17\x93\x48\x78\xa2\x04\x0c\xa1\x72\xb9\xe4\x99\x7b\xc5\xd4\x83\xd0\x5d\x70\xfd\x8e\x68\x66\x7e\x1f\x40\xe5\x79\x00\xa4\xa8\x00\xdd\xf1\x5b\xcf\x6a\x9f\xa8\xd7\xc6\x45\x69\xfd\x68\x2b\xdd\xdb\x2b\x51\x68\xa1\x04\x1f\xd8\x8a\xbf\x31\x82\x47\xeb\xf6\xc9\xd9\x24\x5c\x60\xd6\x17\x46\xd6\x4a\x03\x6e\x1b\x29\xa6\x01\x2d\x27\x5f\xa7\xe9\x12\x7b\x3e\xc8\x79\x99\xb3\xaf\xad\x89\x0c\x98\x01\x80\xe6\xc9\x56\x67\x53\x85\x26\xee\xe4\xb2\xe6\xe1\x0c\x45\xe4\xc7\x70\xe7\x5a\x69\x80\xa9\x5f\xed\xbe\xf8\xd1\xbd\x1c\x77\x85\xc0\x86\x93\x46\xc3\xcc\xe6\x00\x4b\x1a\xc4\xad\xd7\x99\xe3\xda\x31\xf3\x9a\x6a\x20\x96\xdb\x5e\x79\xf4\xca\x24\x4a\x40\xa1\x90\x14\x2f\x4f\x39\x02\x4f\x24\xda\xea\x23\xe3\x04\xa2\xe9\x09\x44\x81\x92\x5d\xf2\x94\x66\x03\x29\xe1\xa0\xf1\x37\xe1\x0d\xa0\x13\x10\xa7\x70\xc2\xe5\x0a\x4e\xb9\xeb\xf4\x6b\x49\xc8\xcf\x5c\x39\x77\xbe\x0a\xe3\x34\x72\x8e\x5d\x30\x5e\xb7\x9c\x1d\xd0\xe9\x62\x20\x2b\x85\x33\xc6\xff\xef\x48\x0b\xc3\xfb\xe3\x35\x23\xfb\x4f\x87\x7b\x44\xf6\x8d\x63\x73\xed\xf0\x7b\xf5\x58\xab\x1a\xf1\x16\x9f\x0f\xa0\x13\xf2\x64\xac\x12\xb7\xb3\xd1\xae\x39\xe4\x80\x76\xb4\x71\xa0\x28\x6c\x66\x79\xbd\x23\xbd\xc4\xd0\x0c\x1b\x00\xe1\xb3\xdc\xc3\xd7\x35\x72\x8a\xb6\x94\x42\x61\x57\x1d\x7e\x93\x46\xc1\xf9\x6c\xc1\xe3\x76\x31\x47\xbd\xb2\x02\x81\xce\x59\x66\x93\xc5\xe7\xf7\x97\xf0\x25\x3d\xb1\x8a\x82\x76\x2e\xd6\xcf\x10\x3d\xd1\xed\xa1\xae\x3d\x64\x40\x0c\xe8\xa9\x73\xcc\x0a\x7a\x21\xe2\xba\xeb\x96\x86\x1d\xc6\xc2\x87\x76\x52\x89\xf2\xd5\x19\x75\x2d\x57\xd3\x3e\x08\x1d\x60\xad\x76\x2c\x0d\x7f\x71\xae\xbb\x4f\x2a\xe7\xe8\x61\x0d\x83\x56\x2a\x62\xe5\x02\x9b\xbf\x84\xf1\xaf\xb6\x03\xdc\x2c\xc7\x02\xeb\x03\x98\xee\x86\xbf\x4c\x6d\xdd\xd6\x18\x20\x4d\xdd\x32\xb6\x5f\x59\xd5\x2b\x2b\xe8\xad\x5b\x06\xde\x98\x41\x94\xc9\x46\xb9\x33\xee\x35\xdd\x19\xef\x5d\x73\x29\xe6\x1b\xda\xe5\x36\x5f\xba\x41\xc1\x1e\x10\x59\x2f\xa2\x3d\xfe\x08\xf5\x5a\x38\x13\x8e\x21\x98\x13\x9f\x8b\xcc\xc3\x93\x0f\xe3\x00\xf2\xbd\xc1\x31\x08\x15\xfc\x19\xa4\x3d\xcb\x1f\x41\x78\x57\x3f\x4b\x10\xd1\x1b\xba\x13\x63\x2e\x40\xe3\x01\x99\xbe\x11\xac\x71\x1a\xcd\x75\xf7\x2d\xed\xb2\x76\x14\xfb\x96\x60\x45\x85\x2e\xa5\x0f\xa1\xf6\xd5\xf6\xf5\x56\x5a\xb7\x22\xba\x4f\xff\xca\x59\x82\xed\x58\xac\x8c\xa9\xae\x9c\x40\x87\xa3\x64\x5e\x1d\xf7\x15\x74\x1c\xcf\x1a\x46\xa1\xd4\xd4\xd4\xaa\x3c\x88\x1e\xf1\x55\x96\x46\xd7\x4b\x36\x2f\xa9\x69\x86\x2f\xbc\x74\x33\x3e\xaf\x87\x3d\xb4\xee\xdf\x44\x27\x8c\xdf\xbd\x58\x74\x5b\x16\x91\x35\xec\xde\xba\x09\x3f\xc5\x58\xd1\x11\xb5\xa2\x7d\x76\x35\x4e\xb2\xb2\xba\xb2\xc4\xa5\x2b\x33\x31\xa8\x78\x61\xef\x30\x33\x79\xee\x40\xf4\x79\x68\x15\xae\x8f\x48\xf9\x3e\x72\x38\x5a\x6c\x3d\x4b\x22\x16\x8e\x2f\x24\xae\xc3\xa4\x83\x21\xef\x5f\xb8\x1b\x9d\x8d\xb7\x1a\xd4\x0d\xfe\x14\x93\xc7\x37\x0d\xe3\x73\x44\x60\xb2\x72\xd8\x58\xff\x3a\x44\xff\x71\xc8\x2b\xce\x1e\xea\x71\xde\xa9\xbf\x4c\xf5\x5b\x02\x41\xd8\x88\x6d\x85\x4e\x61\x75\xbb\x31\x3e\x6f\x73\xb1\x07\x38\x24\x5f\x2c\x3b\xc9\x37\x38\x72\x97\xa0\x91\xb9\xbc\xab\x57\x92\x8e\xec\x04\x3e\xe4\xf4\x40\xf2\x05\x67\xb8\x61\xc0\x8f\xa0\x14\x6d\x0c\x2e\x13\x09\x03\x89\xe4\x71\xca\xe5\xa1\xda\x43\xca\x54\x8c\x3a\x17\x10\x05\x4a\xc1\x46\x8d\x83\xdc\x45\xa2\xa6\x1f\xdb\x27\xa1\x51\x3d\x08\x99\x00\x27\xd9\x7b\xcf\xf7\x9a\xa2\x4a\x55\x18\x47\xc6\x42\xf4\x54\xcb\xaa\x19\x5a\x9a\x36\x02\x52\x40\xfe\x41\x75\x33\x64\xa4\xa1\x02\xbf\x1e\x18\xb7\x93\xc9\xef\x5e\x70\x56\x87\xf3\x98\x8a\x81\xd6\xd7\xb7\xd2\x3b\x86\x7a\x08\x5d\x36\x45\xc7\xb6\xb1\xcb\x99\x46\xac\xfd\x04\x2f\x9b\xa3\x67\xa5\x46\x16\x6b\xe9\x1f\x82\xd6\xc1\x6d\x0c\x5d\xa4\x8d\x96\xdc\x15\x32\x9d\xb6\xe7\x96\x01\x9d\x2e\x97\x0d\xed\x68\x3f\x26\xe3\xe4\x88\x68\xe2\xbd\x9f\x4c\x90\xc8\xf5\x17\x3c\xd0\x73\xb8\x1a\x31\x75\x64\x56\x94\xc9\x92\x0d\xf5\x2b\xfc\xe9\xd9\x38\x08\xed\x05\xb6\x9f\x4c\x40\xb7\xfb\x26\x31\xfa\x55\x47\x1c\xab\xa4\x78\xc3\x9c\x0a\xce\x77\x76\x5e\x48\xec\xd0\xf6\x63\x96\x46\x5f\x0b\xc3\x5e\x4b\x6f\x7f\xc0\x5b\xdb\x5b\xb6\x9b\x80\x6c\x4a\xde\x04\xfc\x8d\xc4\x04\xf4\xc3\x95\x41\xa8\xd2\x40\x38\xde\x48\xe1\xf8\x6a\x43\x36\xbe\x7c\x8d\xa2\x31\x6e\x4a\x31\xf5\x86\x5e\x7b\x6c\x98\x7a\xaf\x2e\xee\x93\xc1\x67\x25\x9b\x18\x4d\xf8\x15\x51\x50\xad\xed\x23\x16\x57\xf0\xfb\x52\x09\xf3\x0f\x50\xfb\x50\xcf\xf6\x9f\x17\x72\xa6\x9f\x0d\x12\x6e\x95\x49\x66\xcc\x2f\xe7\x3a\xbd\xf7\x1f\x1f\x7c\x1a\x3d\xa5\xbb\x38\xb9\xd7\xba\xb8\x8d\x38\x99\x7e\xbe\x50\xa8\xbc\x6f\x18\x97\x7b\x58\x7a\x1a\x9f\xfb\xfa\x61\x7a\xb8\xe8\x46\xfb\x00\x5d\xa3\xf7\x7b\x6f\x01\xba\x7f\x3c\x68\xbe\x71\xa6\x06\xe7\x9a\x7b\x59\x1c\x9c\x7b\xcf\xe6\xf6\x35\x98\x0d\xbc\x81\xe8\xdc\xdf\xdd\x4c\x77\xe6\xae\x15\x85\xe7\x1a\x8f\x98\xf1\xb9\x3f\x1c\x19\x30\xbd\x3e\x99\xde\xd5\x2a\x3c\xf7\x0a\x33\x06\xe4\x62\x7c\x61\xcf\xfa\xb6\x41\x4e\x06\x1c\xb4\x67\x0e\x3a\x6d\x70\xd0\xc7\xad\x29\x56\xf6\x34\x7a\x7a\x77\x6e\x70\xa9\xb5\xaf\x2b\x37\x68\x1b\xb9\xfa\x57\x8f\xe8\xe9\x00\x83\xb1\xe1\xae\x47\xd0\x4b\x26\x48\xee\x6a\x87\xe8\x55\x93\x19\x16\x17\xd9\x39\x85\xb6\x72\x2d\xdc\xad\xb2\x23\x76\x9d\xad\xa0\x3f\x79\x38\xfe\xd0\x30\xfe\x9f\x8d\xc0\x39\x0c\xa9\x54\x75\xe6\xc7\x33\x81\xe7\x56\x9b\xd6\x9d\xc3\xf4\xd6\xe1\x82\x1b\xca\x51\x2b\x92\x5c\xb5\x87\x42\x45\xbd\x49\x77\x00\x80\xdf\xf6\xa4\xf9\x20\x69\x94\x85\xd3\x43\x24\xc4\xea\x4c\xd8\xc0\x17\xce\xff\x32\x81\x10\x59\xe6\x6b\x43\xb5\x72\xe4\xe8\xf4\x30\xd2\x10\x5f\x77\x23\xf2\x8c\xa3\x21\x84\xae\x42\xe4\xd7\x33\x60\xe4\x90\xb5\xce\xc4\xe5\xaa\x2b\xff\xc1\xb5\x0e\x19\xce\xb8\xbd\x11\x38\xe3\x3b\xcb\xd2\x91\x1e\x38\xe3\xbb\xca\x84\xc5\xd5\x31\xe5\xb3\x6f\xa9\x4e\xb3\x6c\xbb\x9c\x9e\xc4\xae\x47\x98\x5d\x5d\x84\x18\x04\x15\x19\xab\xea\xdf\xc8\x0a\x36\xae\xbf\x50\x21\xd7\xe6\x17\x51\x4e\xeb\x4f\x08\x47\x4e\x3d\x58\x4a\xcb\xd0\x04\x8d\x46\x10\xb9\x31\x13\xd3\x13\x0b\xb6\x3d\x20\x6e\x50\x93\xd4\x58\xf4\x8c\x1d\xda\x9e\xc7\xbc\x67\x48\x97\x82\xd9\x26\x41\x09\x63\x0d\xf9\x8c\x28\xd5\xa3\xcc\x09\x4a\x80\x13\x7b\xa1\xe2\x8b\xf9\xca\x20\x92\xd8\x16\xcd\xb9\xc5\x5d\x70\x22\xc1\xd0\xa2\x45\x39\x38\x7a\x54\xd0\x09\xd7\x8f\x33\xdc\xe8\x77\xcc\x68\xe0\xe7\xe9\x68\xe0\xef\xa1\x30\x17\xe2\xd4\x6a\xdf\xd2\x4f\x48\x06\x2a\x34\x35\x15\x76\x09\x90\x88\x98\x04\x99\x1a\x4b\x5a\x19\x98\x1f\x31\xed\xab\x12\x39\x84\xc2\xa6\x14\xbb\x69\x8c\x9e\xd6\xe7\xd4\x90\xa2\x22\x36\x17\x1f\x96\x5c\x27\xb1\x3d\x23\x1e\xd3\x8b\x64\x8e\xbc\x5d\xa0\xe1\x36\xc1\x60\x61\xc4\x1d\x97\x15\x4a\x16\x15\xd0\x79\x47\xa9\x4d\x01\x1d\x33\x56\xba\xe8\x01\x1d\x0c\xd6\xe2\x90\x0d\x75\x1b\xf9\x4c\x98\x69\xdd\x76\x45\x54\xb8\x46\x26\xe3\xf8\x6f\x8b\xd2\xbe\xca\xb2\x4f\x8b\x40\xae\xfc\x55\xb5\x60\x61\xed\x83\x52\x02\xea\x6b\x9c\xb0\xe7\xda\x30\xdb\x4a\x1c\xf7\xc0\xec\xe0\xb9\xcc\x69\x21\x4f\x92\xe4\x65\x0f\x6f\x1a\x33\x94\xf3\x68\xbd\xd5\x8c\x95\x7e\xed\x7a\xc4\x4a\xff\x0d\x8a\xd6\x2b\x56\xfa\xcc\x0a\x6b\xfe\x8f\x12\x36\x89\xb7\xf5\xdd\x12\xfd\x5a\xc9\xb8\xa0\x23\xef\xf9\xdf\xea\x04\x88\xdb\x62\xb9\x0b\xfc\xbb\x7e\xd4\x4e\x71\x52\xcf\xc2\x92\xa1\x62\x81\x22\x70\x39\xe4\x12\x24\x03\xa8\x60\xd4\xe0\xe8\xc3\xe5\xf3\xb4\x02\x4b\xce\xd6\xa2\x67\x12\x57\x84\xea\xb6\xc0\x62\x32\x75\x64\x76\x87\x32\xfb\xc8\xcd\x10\x0e\x6b\x01\x65\x3b\xe6\x24\x70\x3f\x50\x68\xc5\xe7\xc6\x05\xcd\xa9\x18\x2b\xae\x48\xf4\xaa\x44\x4b\xd5\x4a\xd5\x4b\xa2\x98\x85\x15\x2f\xa8\xda\x9e\xe4\x09\xb4\x60\x00\xca\x67\x9e\xeb\xdd\x63\x1a\x91\x32\xa5\x4d\x52\x52\xf7\x76\x33\xa8\xfc\xf7\x56\x13\x54\xfe\x1d\x14\x3f\x60\x41\xe5\x07\x14\xaf\x8a\x62\xbb\xde\x60\x0e\x68\xc2\x05\x8b\x85\xe1\x6b\x89\x57\xe3\xff\x02\x5e\x64\xc9\xa5\xa4\x8a\x89\xef\xde\x90\xa4\x26\xb1\x54\x50\x0c\x59\xa4\x23\x10\x4d\x8c\xc2\xdf\x69\x6d\x63\xf3\x05\x84\x2f\xef\x5b\x0c\xce\x35\xb2\xb9\x15\x25\xb9\x72\xee\x19\xbf\x7b\xdb\x17\xb3\xc0\xe4\x4b\x0c\x9a\x22\x3c\x40\xc6\x2c\xa4\x46\x85\x1c\x80\x38\x3f\xb7\x53\xb2\x09\xb8\xe3\x80\xad\x5c\xf3\x2a\xfc\x5f\x43\xf8\x97\x96\x52\x33\xa5\xba\x11\x59\xf7\x0f\xd1\xd7\x0e\x15\xdd\xc9\x16\x4d\xad\x0a\xe3\xa6\xa8\x3d\xa7\x23\xef\x64\xfc\x06\x94\x11\xa9\xb1\x90\x71\xe6\x4b\xf2\x26\x4f\x43\x5e\x29\x38\x90\x75\x5b\x44\x2d\xe6\x0e\xa5\xcb\x44\x11\x25\xf1\x59\x97\x2f\x70\xd9\x6e\xaa\x0e\x4a\x82\xad\x08\x80\x9a\xa7\xd8\x16\xbd\x22\x0e\x40\xdb\x24\x78\x57\x5b\x61\x44\x5e\x19\xa7\x1b\x02\x61\x54\xf4\x07\x57\x85\x75\xa0\xf8\xf6\xf9\x26\xd0\xa6\x31\x22\x20\x72\x18\xca\x49\xb9\xbe\x6c\xee\xa4\x52\x9c\xe4\x26\xc4\x5a\x12\x98\x28\xfa\x58\x6c\x9f\x60\x11\x69\x84\xac\xca\x1c\x06\x01\x5d\x9c\xb4\xdb\x7e\x53\x0e\x1e\xe5\xc7\x29\x0b\x0b\xb6\x16\x0b\xc0\xe0\x6c\xaa\x69\xfb\xf1\x25\x1d\x32\xdb\xf5\xa1\xe6\xdc\x0d\xe4\x03\xc3\x2e\x8d\x5f\x7d\x0e\x1e\xeb\xd9\xc2\x65\x7d\xfb\x6c\xfa\x84\x96\xab\x9d\x7c\x71\xac\x50\xbc\x4f\x9d\x70\xaf\x39\x1b\xff\x57\x6b\xe9\xae\xef\xea\x90\xf3\xcf\xa3\xec\x2d\x6d\x5b\xeb\x56\xd0\x2b\xc7\x24\xda\xa2\xde\x19\xd0\xed\xe8\xbf\xb2\x69\x1d\x3f\x58\x55\x5a\x87\x61\x7f\xe9\x98\xd6\xf1\x78\x7c\x19\xde\xdf\x37\x2d\xdb\xd8\xbc\x8e\x77\x23\x7c\xae\x9c\xb1\xce\x65\x78\x9d\x46\x01\xed\xbd\x6f\x9f\xa7\x07\x24\x50\xf1\x99\x8e\x8c\x31\xa5\xff\xe6\x7d\xe5\xaf\x52\x24\x19\x06\xd1\x5f\x2d\xda\xb3\x37\x99\x53\x16\x0f\x58\x2f\x47\xf4\x79\x28\x77\xb1\x2c\x1a\xb4\xc5\xaa\x74\x48\x96\xe8\x1b\x7e\xb2\xfc\x94\x54\x0c\x98\xcc\x12\xc9\x92\xf9\x88\xdd\x90\x00\xe9\x78\xea\xce\x72\x0e\x38\x63\x19\xd6\xff\x55\x54\x98\xa4\xf2\x29\xa4\xb2\x54\xde\x85\x5a\x6f\x17\x24\x77\x14\xd6\x56\xd3\x79\x24\x99\xb3\x36\x1d\x8b\x1e\x4b\x9c\x9c\x3b\xda\xfa\x95\x15\xf0\xd3\xd1\xca\x52\x25\x74\x75\xe1\x73\xae\xd0\xd5\x13\x69\x73\x93\x7b\x39\x31\x33\x2d\x0d\x3f\x2d\xa5\xb8\x72\x29\x30\xcf\x52\x58\x53\xcb\x5c\x5f\x13\xca\xa4\x09\x44\x36\x04\x73\x34\xc9\xa4\x61\xe0\x34\xa6\x53\x33\x54\xca\xa7\xa8\x89\x1c\xc8\x2b\x94\xab\x99\x43\xf6\x3b\xef\xd1\x12\x8a\xc6\xbd\x37\x20\xfa\x72\x94\xbd\xb6\xd1\xa8\xa7\xd6\x35\x9e\x2b\x86\x56\x56\x37\xc6\x4c\x4c\x7c\x57\x41\xd5\xb4\xd7\xea\x33\x7e\x33\xca\xdd\x7b\x80\xce\x78\x16\x62\x59\x28\x7f\x60\x18\xef\xea\x5b\xcc\xb3\x9e\x3b\x4c\x3f\x87\xda\x0b\x73\xd9\x4d\x88\x32\x32\x5e\x87\x15\x81\xf8\x27\x8b\x97\x36\x58\x58\x0b\xc2\xba\x6a\xfa\x02\x27\x4e\x74\x39\x63\x11\x88\x11\xb6\x23\x90\xd3\xf6\xd2\xa8\xd1\x88\xf8\xac\xca\xa2\xc8\x16\x5d\x4f\xd5\x18\x46\xe8\xab\x62\x5a\x29\x7c\xd4\xec\x2a\x2b\xe8\x6d\x25\x7c\x4f\x4b\x9d\xb7\xb7\x23\x7c\x70\x15\x75\xde\x0a\xc2\x55\xe9\x7c\xe6\x89\xae\x31\xb0\x91\xe0\xc1\xe0\x7b\xc8\xd7\x61\x6b\x17\x0d\xdb\x52\xfd\x2d\xbb\x15\xb1\xf4\x63\x74\x94\xc5\x7b\xac\xfe\x76\x0a\x67\xf3\x55\x93\x78\x91\xcb\xa2\xc2\xde\x09\x7e\xa7\xe0\x04\xf3\x39\xd6\xb1\x65\xeb\x9f\xb7\xd0\xb7\x20\xe3\x02\xe1\x1a\x64\xbd\x21\x4c\x34\xc6\xab\x9c\xfa\xc4\xfc\x31\xb8\x4e\xc0\x29\xc3\xa1\x14\x8a\xf2\xcf\xfb\x89\x39\x86\xb6\x74\x4b\x6f\x62\xd5\xae\x2e\xa6\xc7\x66\x99\xcd\x2f\x06\xc1\x09\x39\x9c\xf1\x8d\x20\x24\x0d\x2f\x59\x70\x75\xe4\x0c\xe7\xde\xe3\x76\xc3\x8d\x04\xf1\x3d\x85\xc0\x45\xbb\x82\x3e\x37\x08\x2b\x18\x84\x15\x3c\x34\xc2\x0a\xfe\x8f\x0c\x2b\x58\xea\x24\xf6\x76\x3a\xa1\x46\x6c\xc1\x62\xe0\x01\x27\xd4\x11\x48\x86\x03\x57\xc5\xa7\xcf\x33\xbe\x77\x8c\xef\x27\x07\x20\x97\x14\x95\xeb\xf5\xf6\x8e\x9d\xd6\x3a\xce\x41\x04\x18\x3c\x39\x0d\x30\xa8\x41\xca\x0f\x3f\xa7\xaa\x36\x18\xe0\x80\xb0\x6f\x69\xca\xb6\xbc\xc8\x20\xc9\xce\x9c\xa0\xca\x77\x31\x48\x8b\x53\x39\x8d\x6a\xdd\xbd\x47\x93\xd6\x44\xea\x3d\xca\x4e\x57\x20\x80\x76\x27\x19\x53\xcf\xba\x92\x30\x7e\x5b\x2e\xae\xa0\x1b\xe8\xad\xd3\x43\xf4\x40\xee\x9a\x38\x39\xc2\xee\xd4\x30\x33\xa8\x5b\x28\x9a\xc8\xba\x86\x85\x57\x56\xd0\xbb\x86\xf0\x0f\x4b\x78\x8b\x9d\x38\x2e\x97\x61\x22\xeb\xfe\x12\xfd\xd3\xd2\x84\xfa\x99\x35\x6d\xa4\x46\x84\x9a\xcb\x0f\x97\xe6\xd1\xfa\x38\x4a\x90\xa7\x76\x66\xad\xa7\x8b\x79\xe8\xb7\x23\x62\x47\x15\xa2\xbe\x33\x6e\x2f\xdb\x61\xc1\x5c\x83\x50\x56\x57\x5f\x62\xa1\x5b\x6b\x9a\x39\x2d\xfc\xc9\x65\xf0\x23\xc4\xcc\x77\x54\x2e\xa8\x69\xab\x90\x13\xb6\xd3\xb5\x18\x36\x07\xf0\x03\xf8\x81\x71\x17\xa2\x0c\xc3\x60\xc9\x75\x98\x53\xce\xbc\xa9\x5c\x28\x82\xcf\x49\xd2\xaa\x6f\xca\xcf\x5c\xad\xf1\x84\xa4\xdc\xc1\x54\x33\xb3\x71\xa6\x78\x2f\x1e\x81\x45\x58\x15\xfa\xeb\x73\x02\x36\xd2\x8e\xd8\xb0\x6f\x48\x18\x99\x67\x76\x08\x25\x3b\x4e\xb0\x5c\xd0\x40\x2e\x5d\xbb\xfb\x21\xb1\x6e\x19\xa5\x53\x2d\x57\xd5\xf7\x42\x16\xf1\x65\xf5\x86\x2e\x1f\xdf\x8c\x7f\x77\xc4\x44\x97\x9b\x46\xe8\x37\x87\x27\x32\x40\xd4\x90\x31\x51\xa5\xba\x18\x44\x4c\x9f\xcc\x2c\x83\xd5\xb5\x89\xab\x41\xbd\x61\xc7\x60\xf0\x02\xbc\x91\x51\xa2\x2c\xc3\xc8\xc1\xb9\x07\x50\x21\x13\x06\x42\x09\x07\x81\xdf\xcc\x5c\xf1\xa5\xfc\xc6\x05\xa4\x34\x46\x22\x37\x22\x1c\x1f\x03\x0f\xa4\xf3\x10\xbe\xb1\x2d\x4a\xef\x08\xe3\x15\x70\x8a\xd6\x41\x40\x21\x13\x7e\x08\x16\xa7\x3e\xdd\x4a\x3a\xae\x30\xa6\x48\xd6\xbd\x64\x7b\xae\x63\xab\x16\x15\xb6\xb9\xf2\x02\xf0\x09\x6b\x60\x9c\x84\x86\x7f\x48\xc6\xd2\xe7\xc7\x8f\x03\x59\xb3\x36\x3d\x2b\xe6\x2c\xe5\xf9\x74\xd3\x65\x11\x38\x7a\x70\x1c\xec\x9c\xc0\xc4\x3f\xc8\xe1\x21\xd4\xa5\xfc\x17\xe5\x07\x85\x6d\x5e\xdf\x33\x28\x28\xff\x0a\x8d\xc3\x84\xd1\xb2\x49\x01\x22\xb1\x78\x62\x2f\xd8\xae\x1f\xc5\xdd\x0e\x13\x87\x6b\xf7\xd3\xb4\x80\xcf\xce\x7c\xdb\xba\x86\x5e\x39\x91\x9d\x4c\x6b\xe7\x95\x94\x88\xd8\x51\x14\x54\x5d\x5b\x13\xac\x8c\x30\x99\xe9\xc5\x72\x25\x1e\x61\x61\x18\x84\xd6\xe5\x74\xf7\x01\xfe\x47\xfb\x81\xab\x7c\xa7\xfd\x6d\x20\x3b\x54\x17\x59\xf5\x04\x73\xcc\x29\x2f\xe3\x61\x3e\xbc\x15\xe0\x0b\xfb\xe0\x80\xc7\x23\x16\x4e\xfb\xb5\x80\x5e\xc2\xff\x52\x67\x58\x5d\x6d\x59\x08\xb8\x1f\x24\x51\x93\xa7\x06\x7f\x75\x18\x3f\xba\xa7\x6f\x58\xef\x1d\xa6\x4f\xd1\x43\x0b\x4e\x2f\xce\x53\x11\xb7\xe7\x8b\x01\x03\xa0\xd0\x52\xdc\x7a\xc3\x63\xb2\x7e\xb7\xb8\x59\x81\x61\xe0\x30\xd6\x6c\xc8\x53\xfb\xab\x21\xec\xe3\x11\x76\x32\x0e\x6d\x8b\xd1\x7d\x13\x59\x4d\xcd\xfc\x8c\x5e\x43\x11\x01\xa9\xdc\x8d\x7e\x05\x3f\xb2\x3d\x76\x98\x31\xfd\x4f\xc2\x9b\x80\x5d\x47\xd6\x13\xe9\x63\xe7\xa4\x79\x12\x0c\x86\xe2\xb2\xe0\x10\x89\x84\xad\x0d\x19\x7d\x24\xa8\x75\xc2\xbd\x77\x22\x3c\x94\xb8\x8e\x75\x17\xa2\xaf\x41\x13\xca\xbd\x22\xa4\x57\x40\x09\x83\xe9\xa5\xa3\xdb\xd5\x30\x88\x22\x59\xa6\x60\xba\x96\xfd\xae\x70\xd7\xcb\xb6\xe4\x22\xa6\x4e\xdc\x53\x92\x8d\x32\x7a\xc3\x24\x1d\xc5\xb1\x64\x2c\x34\x18\x66\x1c\xb7\x06\x7e\x86\x98\x1c\x9f\x9e\x8a\x32\x1c\xe4\x37\xf0\x28\x1f\x8c\xbf\x6f\xcd\xd0\x49\x05\x05\x31\x59\x31\x7d\xaf\xd9\x66\xd6\xf5\xc0\x5f\x00\xd7\xb2\x5d\x15\x7d\x56\x23\x16\x66\x47\xff\xf6\x56\x7c\x51\x0e\xbd\x82\xd0\xbd\x51\x63\xd7\xa1\xa0\x6a\x7b\xb3\x09\x6c\xc7\x44\x95\x6b\xe0\x52\xed\x7b\xf7\x56\xfa\x4d\xd4\xee\xae\x38\x41\xa9\xf8\x16\x84\x60\xc8\xb1\xc5\xb4\x82\x50\x86\xd9\x73\x49\x4e\x69\xf2\xb6\x0f\x93\x14\x49\x0f\x3a\x7a\x9c\x6f\x77\x03\x6a\x34\x5c\x69\x2f\x41\x36\x77\x7a\x8d\x44\xd5\xa0\x01\xc5\xcd\xa4\x38\x53\x07\xc7\x84\x1b\x93\x7a\x52\x5d\x24\xcc\x8e\x5c\x51\x45\x6b\x21\xb4\xfd\xb8\xf5\x3d\x19\xe0\x21\x36\x5d\xd9\x1f\x1a\x2c\xac\xbb\x91\x30\xc5\xc3\x22\x5c\x7f\x21\x55\x1b\x3f\x3d\x3a\x50\x1b\x07\x6a\xe3\x43\x42\x6d\xfc\x57\x95\x35\xf9\x2d\x84\x27\x3a\xb2\xac\xcc\x79\x2f\x38\xcc\xa0\x3f\xbe\x11\xad\x56\x81\xac\x10\x21\x5b\xa5\xe7\x0f\xbc\x95\xf3\x8c\xb0\x1b\x12\xdb\x53\x58\x9c\xde\x6e\x06\x89\x74\xf4\x1a\x83\x4a\xf9\xa3\x42\x38\xf5\x55\x06\x61\x99\x91\x23\x6b\x98\x57\xf0\x5b\x52\x55\xf5\x75\x08\x4f\xae\x6d\xd5\x42\x63\x3d\xbe\x1e\x1a\x2b\x47\x78\xe9\x52\x16\x94\xf0\x34\x0a\xbb\x6b\xab\x47\xad\xc3\x19\x6d\x35\x9d\x71\x4e\x59\x6d\x47\x85\xf3\x9a\xeb\x9b\x4b\x59\x83\x70\x1e\x0a\x47\x02\xff\x98\x3c\x72\x13\x3a\x9f\xd2\xfa\x01\xa2\xcf\x2a\xbc\x93\x12\x4d\xc5\xe3\xf5\x68\x66\x3e\x66\xea\xf4\xab\xc1\xe2\xfd\x71\x7d\xae\x8d\x33\x28\xdc\x24\x72\x0c\x50\x06\xa4\xe0\xb1\x82\x02\x7c\x09\x1e\x6e\xd8\xf1\xa2\xb5\x93\x9e\x37\x63\xc7\x8b\x5a\x8e\x3a\x76\x88\xf0\xeb\x69\xa1\x33\x18\x2e\x17\xe8\xbd\xc4\xc2\x79\xeb\xb1\xf4\xd7\xae\x61\xe1\xbc\x0e\xe0\x54\x49\xcc\x57\xce\xcd\xcd\x70\x20\xcd\x9b\x2f\xfd\x6c\x28\x5b\xd8\xbb\x03\x9c\x8e\x25\x1e\xb3\x3e\x3b\x44\x0f\xe5\xae\x15\x1c\x94\x5c\xa8\x89\x4d\xc2\xc4\x8c\xdd\x31\xe0\x72\x0a\x8d\xf0\x29\x45\x2b\xe8\x07\x25\xfc\x67\x08\x9f\xeb\xa7\x83\x1f\x3f\x76\x28\xb2\x3e\x80\xe8\x29\x74\x24\x7b\x51\x25\x29\x8a\xb4\x31\x3b\x84\x10\xd0\x24\xf4\x74\x3e\x16\xb0\x5e\xc9\x54\x84\x33\x08\x50\x05\xe8\x1f\xb9\x20\x13\xf8\x20\x02\x50\x20\x31\x50\xe6\x12\xd6\x12\xcf\x2b\x93\x1a\x54\x56\x88\x62\xd6\x50\x7a\x0d\x07\x7f\x85\x10\x7a\x01\x25\x75\x66\xfb\x80\xe7\x9d\xa4\xaf\x37\x20\x2c\xd6\x66\xbd\x12\xd1\x93\x6a\x4b\x52\x9b\x45\x7a\x22\xb2\x98\xc2\xf5\x0a\x78\xaf\x4c\x3c\xf7\x04\xdb\x4f\x16\x58\x5c\x26\x8d\x20\xe2\xff\x4d\xe2\xb2\x94\xc1\xca\x04\x7c\xb4\x65\xb2\xc8\x6c\xa7\x4c\x82\x86\x20\xb9\x7d\x4c\xf0\xa5\x5b\x5a\xf4\xf5\xcc\xde\x17\x1c\x90\x2f\x8f\xd2\x78\x9d\x4e\x47\x9f\x27\xe3\xef\x36\xe3\xc3\x78\x04\x48\x84\x35\x45\xf7\x3e\x11\x84\x2a\x89\xe2\x1c\x62\xe2\x82\xae\xe6\x2f\x93\x88\x5b\xa1\x91\x2e\xff\x79\x08\x0f\x83\xa4\x79\x23\xad\xb7\x0b\x6c\xd3\x93\x14\x84\x5e\x27\x05\xca\xca\x16\x74\x81\xc5\xd0\x79\x46\x89\xc5\xf2\xb2\xf8\x49\x2b\x84\x52\xb2\x1d\x28\xf8\x58\x9b\x49\xfc\xa8\x84\xb7\x68\x76\x60\xfd\x53\x89\x7e\xb1\x74\x44\x73\x07\x63\x42\xe2\x82\x32\x1c\x09\xe1\x31\x37\xa7\x0a\x21\x93\x2a\x6c\x12\x84\xee\x10\x46\xf0\x55\xcd\x5b\xf5\x92\xa8\x79\xeb\x07\xc6\xb8\x20\xcd\x7b\x5e\x7a\x25\x32\x67\x6e\x32\x1e\x58\x61\x3b\x22\x9c\x7f\x4b\x68\xe7\xfc\x0d\x19\x35\x37\x9e\x13\x63\xa3\x56\x00\x51\xdb\xf3\xa8\x20\x9f\xed\x84\x5f\x29\xf5\xd8\xa4\x48\x1a\x0f\x42\x32\xcb\xbc\x5a\xc1\x2d\x13\xec\xd7\xe1\x51\x35\x9a\x75\x88\x5e\xae\xf0\x85\x4f\xda\x30\xd0\xe9\x7e\x4a\xa9\x74\xc6\xa5\x99\x8e\x58\xf5\x74\xbc\xd5\xc8\x62\xb7\x8e\xd2\x2b\x66\xd3\x9f\xbd\x8f\xaf\x86\xf7\x03\x3f\xeb\xaf\x7a\x3e\x92\x64\xfe\x59\xd4\x4f\x69\x8a\x41\x4b\x5a\xe8\x48\x86\x8c\x70\xe2\x53\x26\xcb\x82\x72\x08\x0f\x6d\x59\x0a\x82\x06\x61\x09\x83\x93\xcd\x8e\xab\x9c\xc5\x9b\x25\xbb\xb5\xae\xa4\x97\x2a\x85\xc0\x38\x8e\xd7\x64\x5d\xd6\x3d\x1d\xc8\xf7\x8c\xb6\xb8\xe2\x0a\xe9\x11\x30\xa2\x9b\x46\xe9\xdb\x51\x86\x0d\xe5\x1a\x57\x8b\x43\x22\x79\xa0\xc0\x06\x53\x38\x31\x1c\xab\x60\x47\x94\xa8\x25\xe2\x8f\xc4\x18\xa1\xc3\x44\x92\x41\xe4\x6f\x8b\x49\xe4\x2e\xf8\x90\x08\xe1\xc7\x65\x90\xc2\x65\x2c\x19\x71\x12\x51\xc7\x92\x45\x42\x11\x69\x04\x51\xe4\xce\x7b\x4d\x91\xb1\x5e\x0d\xea\x0d\x0e\xd5\x4a\xca\xe9\x3e\xbb\x09\x3f\xbf\x84\xb7\xd8\x0d\xf7\x89\x42\xe1\xff\x31\xa2\x5f\x44\x13\x33\xd3\xe2\x67\x11\x1d\x52\x37\x65\xc5\xac\xc0\x88\x9d\x33\xa6\xce\xe5\xc5\x7a\xe2\xc5\x6e\xc3\x13\xbb\x20\x2d\x07\xd0\xc1\x2d\x8d\x2b\x07\xbf\x73\xd5\xb4\x9f\xb2\xd4\xe8\x65\xa2\xa7\x9f\xd4\x21\xa8\xc0\x3c\x7a\x5c\x63\xf5\x9b\xe9\xe8\x3a\xda\x51\x02\xb6\x1f\x06\xf4\x21\x08\x09\x11\x23\x03\xd5\xb3\xde\x82\xe8\x8b\xf5\xae\xc2\x25\x61\x3c\x95\xec\x0d\x22\x6e\xdd\x38\xdd\x64\x23\xb0\x17\x60\xc1\xf1\x40\x44\x8c\x4b\x66\x3f\xa1\x6d\x84\x2c\x96\x93\x82\xa7\xd9\x12\x0b\x9b\xf1\xa2\xd8\xde\xd5\xcc\xfd\x1b\x08\x6f\xd1\x50\xb1\xfe\x06\xd1\x0f\xe9\x79\xe7\x7c\x13\x29\xec\x84\x42\xdc\x32\xc7\xcc\x37\xb5\x15\x55\x37\xf4\xd2\x78\x52\xc1\x84\x5e\xb0\xa3\x16\x04\x34\x1f\xc5\x67\x50\x1c\xb2\xad\x16\x04\xdb\x04\x23\x82\x38\x7b\x63\xe3\xda\x8d\xdb\x61\x99\xaf\xd7\x42\xcc\xad\x88\x2e\x77\x14\x62\xba\x08\x30\x6b\xa2\x3c\x6d\xe7\xf7\xae\xad\xf8\xc2\x8e\xda\x4e\x31\x2f\xb0\xfe\x1d\xd3\x9f\xa0\x36\x37\x0b\x2c\x3a\x66\xa8\x24\x08\x97\x85\xe6\x9c\x0a\x21\x47\x82\x18\x94\x27\x91\x9c\x24\x1b\xb3\x99\xfa\xa0\x60\x72\xfc\x56\x86\xdf\xd2\x0a\x01\xbe\x25\x45\x5b\xbe\x49\xb6\x47\xaa\x76\xc4\xca\x64\x9e\x55\xed\x24\x92\x16\x2d\x25\xd6\xca\xb2\x02\xfc\xe0\x71\x89\x2a\x0e\xc4\xac\x4d\x9d\xac\x59\x3c\x4b\x6d\xe1\xf9\xef\x41\x60\xc0\xc0\xc2\xf3\xd0\xb0\xf0\xdc\xad\x2c\x3c\x77\x22\x7c\xa0\x0f\x5b\x47\xf1\x01\x07\x2b\xcf\x75\x6b\x30\xf2\x08\x8b\xb3\xef\x28\x06\xab\xad\x3c\x9c\xd5\x3c\x94\x4c\x33\x37\x74\x37\xcd\x1c\xb1\x0e\xf5\x66\x9a\x69\x03\xec\xbc\x65\xe6\x93\xc3\x78\xef\x2a\xf7\xcc\xfa\xed\x61\x7a\x57\x3b\xaa\xdd\x31\xd6\x40\xea\xff\xca\x5d\x4c\xc8\x81\x93\x76\x15\xca\xa0\x0b\x71\x47\xeb\xb4\xe6\x6c\x0c\x05\x97\x03\xd7\x34\x0c\xb5\x79\x4c\xe1\x41\xc4\xe2\x15\xf4\xe5\x12\x47\xdb\xff\xe5\x17\x5a\x9a\x5e\xde\x31\x4b\xa5\x27\x6b\x15\x3d\x5c\x6c\xaa\x4a\xed\x2e\x26\x5a\x0b\xcd\x34\x63\x68\xc8\x02\x85\x4f\xd6\x0a\x5b\x67\x7a\x6b\xb7\x40\x98\x2e\x36\x03\x3a\xdb\x0d\x6a\x9d\x26\xdc\x6e\xb2\xbf\x77\x0e\xde\xdd\x23\x16\x71\xe5\x40\xb1\xfd\x6f\x9d\x4d\x5f\x38\x52\x7c\x2f\x15\x77\xa5\x4c\xc5\x5a\xd4\x88\xb6\x12\xc0\xb2\xcb\x45\x49\xd3\x61\xa3\xd2\x20\xa5\x6b\x3c\xaf\x94\xc8\x50\xbf\x54\x3d\x20\x0e\x6b\x30\x51\x5c\x36\xf0\x8d\x63\x0d\x6e\x7e\xd3\x9e\x52\x0f\x1c\xc9\x0e\xb9\x18\x0e\x1e\xdf\x88\xb0\x93\x0d\x16\x82\x9f\xda\x31\x0b\xa5\x4a\x92\x25\xaa\x2f\x15\x2f\x3a\xad\x10\x0a\x41\x9c\xf3\x4d\x72\x7c\x1a\x78\x71\xb4\x18\x2c\xef\x58\x74\x1d\x65\x6d\x10\xc9\xd3\x71\x40\x6e\x48\xdc\xea\x09\xaf\x49\x3c\x16\x83\x07\xde\x77\x04\x3c\x64\xb1\x0b\x4d\x3e\xdd\xd0\x74\x30\x41\xe4\xab\xfc\xd8\x91\xa3\x73\xe4\x8a\xf4\x83\xec\xa4\x64\xf5\xa2\x63\x22\x7c\xdd\x09\xdd\xa5\xbc\x25\xc9\x61\x55\x99\x37\x62\x2b\x51\xda\x76\x23\x06\x7d\x8b\x6a\x30\x98\xc3\x1a\x49\xdc\x2c\x8b\x08\x4a\xe2\xb9\x35\x16\xbb\x75\xb6\x23\x64\x4b\x41\x55\x46\xb0\x73\xc0\x41\xc8\x7b\x35\xf6\x39\x3e\x41\xb2\x64\xc8\xe7\x57\x40\x52\xc4\xe3\x60\xed\xc8\xc8\x87\x76\xa8\xca\x8f\xc0\x40\x22\xab\x29\xe0\xd2\x12\xa7\xc3\x6d\x26\xad\xac\x5b\x69\xd4\x80\x16\xc4\xfe\x76\x20\x88\x0d\x04\xb1\x87\x86\x20\xf6\x62\x25\x88\x3d\x17\xe1\xa9\x55\x09\x62\x06\xf5\x01\x39\x6c\xdf\xaa\xe5\xb0\x9c\xa0\x75\x45\xdf\x82\x96\x39\x15\x21\x67\x5d\xd3\xaf\x9c\x55\xc0\x29\xec\x16\xfe\x50\x39\x8d\x1a\xdd\x05\xad\xc3\xd6\xd5\x7d\x0b\x5a\xc6\x0a\xf2\x72\xd6\xf3\x11\xde\xb3\xba\x2d\xb1\xa6\x57\xd0\x41\x3c\x65\x1a\xa6\xf7\xd2\x0b\x52\xb3\x74\x1c\xe8\x4d\x00\x6b\x06\x24\xf2\x55\xc8\x31\x76\x43\xe2\x86\xd0\x81\x3f\x45\xbe\xaf\x6c\xc1\xfd\x8a\xbc\xd6\x5b\xb6\xd0\x99\x75\x0e\xb4\x48\x69\xed\xa0\xc8\xde\x80\xd6\x3e\x44\x68\xed\xcd\x8a\xd6\x3e\x7b\x3d\xa2\x1a\x56\x1f\x15\xff\x10\xd2\x67\xeb\xdd\xc9\xec\x55\xd6\x95\x3d\x92\xd9\xee\xba\xec\x27\x46\xbb\x58\x1f\xdb\xe8\xb1\x2f\x1e\xa5\x6f\x44\x0f\x05\x1d\xf6\xef\x37\xe1\x4f\x23\x15\x08\xf9\x11\x44\x7f\x07\x1d\xe0\x7f\x16\x65\x8d\xea\x40\xca\xca\x13\x59\x0c\x4f\x6d\x1f\x23\x75\x16\x2f\x06\x4e\x7a\x9c\xb3\xd1\x91\x84\xcc\xba\xbe\x2a\x1b\xe2\x72\xb4\x6c\x24\x46\x18\x7b\xea\x06\x56\xf9\xdb\xb6\xea\xca\x06\xa5\x65\x58\xc8\xfa\x09\xb0\x3c\xa2\x03\x2c\xa7\xe8\xf6\xac\xab\x45\x9a\x71\x9a\x41\xb2\x8d\x8b\xf6\x4c\x78\xe5\x38\x57\xeb\x60\x7a\x1e\x28\xf7\x1b\xa5\xdc\x3f\x5e\x84\xad\xee\xa5\x17\x1c\x9f\x9e\xea\x4c\xac\xa0\xdf\x48\x94\x2b\xa2\xf2\x36\x24\x23\x98\xdf\x88\xe8\x2b\x91\x19\x8e\x0c\xa2\x42\xc1\x36\x93\xe9\x1a\xc4\x62\x09\xef\x48\x93\x50\xfe\x12\x85\xd0\x10\xce\x55\xa8\x40\x17\x2a\x2b\x7a\xb9\xa2\x73\x2d\xe7\xd6\x8d\x50\x84\xc3\x46\x84\x5e\x0b\x58\x5c\x83\x90\x67\xb2\xcc\x42\x26\xc5\x93\x3a\xd3\xdd\x26\xfd\xa6\x44\xb5\x4c\x18\xc6\x66\x7c\xf1\xaa\xa8\xa8\xf5\xd7\x9b\xe8\xff\xd3\xf6\xee\x29\xb4\x59\x52\xc7\x15\x74\xf7\x26\x5c\xc5\xea\xa7\x75\x1d\xbd\x6a\x42\xd2\x4d\x57\x00\x1d\xc4\x36\x28\x25\xc9\x17\x60\x84\x18\x2c\x2b\xeb\x80\x8e\x96\xa9\xd9\x5e\xc4\x44\x3b\xb0\x65\x37\x62\xd9\x18\xf4\xe7\x95\xf0\x26\x87\xf9\x2e\x73\xac\x7f\x47\xf4\x5b\x68\x0a\xfe\x06\xaf\xb7\xf4\xdf\x75\xfe\x8a\x78\xb7\x9c\x0e\x2f\x3e\x07\xdb\x03\x29\x17\x76\x3a\x6f\x31\x11\x4e\xd4\x1c\xfd\x95\x9a\x28\x83\x19\xab\xc6\x37\x06\x0d\x59\xb4\x21\x14\x22\x68\xb8\x3e\xd0\x54\x3f\x65\x29\x41\xfa\x9c\x31\xab\x0a\x91\xb3\xe7\xa2\x89\x14\x2d\x62\x39\x77\x03\x7c\xfc\x52\x16\x08\x5f\x2f\xe1\x73\x53\xcb\x0b\x84\xe2\x5b\x2b\x25\xfa\x91\xd2\x81\xec\x45\xe9\xd9\x54\x95\x46\x55\xd8\x14\x54\x8f\x05\xbb\x0e\x09\xaa\x60\x71\xca\xd8\x74\xb2\xe6\x05\x10\x89\x45\x56\x71\x44\x38\x61\x0d\x99\xd7\x54\x1e\x68\x26\x12\xc3\x85\x99\x06\x06\xe4\xd0\x32\x3d\x46\xa2\xa2\x9c\xa8\xe8\x13\xd6\x5d\x3f\x3f\xbc\xac\x9f\xea\xfa\x24\x6a\xb8\xa2\x3e\x88\x1b\x57\xc8\x41\x48\x2e\x10\xe5\xf5\xcb\xe4\xd8\x15\x13\x93\x2a\x51\x0d\xcc\x3d\x10\xba\x1c\x06\x9e\x2c\xee\xc3\xfc\x20\x59\x58\x84\x0b\xd2\x15\x1d\xbb\x9e\xa7\x32\xb1\xc4\x9c\x82\xc4\x97\x25\x68\xb2\x46\x24\xcd\xed\xcc\x03\xf3\x34\x5d\x67\x75\x96\x1e\x3c\x26\xde\xc8\xa0\x98\xc8\xb2\x4e\x45\x87\x26\xd0\x1a\x21\x34\x40\x52\x45\x2a\x35\x08\xdc\xc9\x0c\xff\xdd\x2e\x61\xe2\xed\x94\x47\xeb\xbd\x5b\xe9\x37\x4b\xed\xee\xb6\x38\xed\x65\x6a\x93\x2d\x55\x28\xb9\x93\xa2\xa7\x14\x78\xf2\x24\x48\x3b\xdb\x08\xc5\x18\x1a\xcd\x23\x53\x82\x72\x85\x69\xcc\x5d\x48\x42\x9d\x3e\xd2\xd5\x6e\x68\xda\x0c\xaf\x90\x8e\xc7\x2c\x52\x88\xf9\x42\x08\x1d\xa4\x44\x2c\x31\xa8\x5e\x60\x6b\xcf\x36\xb3\x43\x59\xee\x07\xcc\x9e\x6e\xbc\x2d\x22\x91\x5d\x13\x95\xff\xa3\x28\x91\xc5\x7b\x55\x50\xc6\xa2\xad\x6a\x12\x69\x73\x61\x99\xb0\x25\x4e\x67\x6b\xe2\x86\x27\x4b\xca\x66\xa2\x29\x74\xe4\x00\x80\xfa\x14\x7a\x98\x9f\x0d\x4b\x8c\x4e\x21\x9c\xbe\xb0\x82\x5e\x39\x8a\x5f\x52\x70\x32\x7f\x8a\xe8\x77\x50\xfe\x64\x72\xd0\x8b\x85\xf0\x75\x54\x83\xfa\xbc\xeb\x8b\xc5\x03\x14\x61\xf8\x4a\x16\xcb\xf4\x19\xcb\x1f\x5a\x80\x4a\xfa\x55\xd9\x6b\xce\x86\x37\x0c\xfa\x24\x42\x26\x03\x26\x62\x4d\x44\x8b\x82\xd6\x77\x45\x0a\x98\x1d\x93\xcc\x4a\xf9\xe5\x1d\x41\x48\x72\x81\x99\x05\x66\xe6\x0c\xa2\x7f\x0d\x61\x03\x42\xd6\x7d\x88\xde\x8b\xa6\x53\x6c\x93\xc4\xcd\x68\x23\x06\x63\x6a\x9b\xb6\x6a\xd1\x5d\x85\xa4\x8b\x30\xf3\x19\xdd\xf1\x01\xea\x92\x70\xe5\x0a\x22\x2c\x99\x0f\xb5\x80\xa0\x21\xbc\x28\x79\x65\xc2\x20\x03\x1a\x6d\x15\x36\xef\x17\xc1\x27\x32\x51\x36\x43\x88\x5f\x55\xc2\x2d\x48\x61\x3d\xb7\x44\xdf\x87\x5a\x00\xb5\x96\xd8\x21\x53\xec\xda\xc0\xf8\xa1\x3e\xfa\x3d\x77\x09\xe2\xc5\x2f\x2a\xe1\xec\xe9\xe1\xdc\xfa\x1d\x68\xfd\x40\xf2\x00\x83\xa3\x73\x4d\xad\x8e\x71\x64\xf8\xeb\x43\x79\xe9\x2b\x90\x75\x55\xf9\xa3\x93\x61\x10\x45\xd2\x30\x24\x34\xf3\x63\xaa\x48\x9a\xf5\xa6\x21\x3a\xdf\xe1\x7e\x4a\xf0\x25\x03\xcc\x04\x48\x07\xe0\x3f\xe1\x22\xa7\xcc\x66\x6a\x4a\xbe\x50\x63\x40\x3c\x8c\x36\x38\x60\x7b\x39\x85\x20\x56\x75\x05\xbd\xb3\x84\xf7\x64\xcc\x57\xdb\xe9\x2f\xcb\x80\x1b\x33\xe0\x4e\xd6\x72\xcb\x04\x88\xdf\x8c\xa4\x1d\xe7\xd9\xb4\x01\x56\x9c\xdc\xb3\xeb\xdd\xd6\xca\xb0\x91\x50\x73\x1e\x9e\x8c\xbb\x75\xe8\xb5\x47\x32\xb1\xb6\x6d\xa6\xd1\xb5\x81\x8e\x91\xce\x7b\x1e\xd8\x2c\xcd\xaf\x7d\x10\xe7\x33\x01\xcc\x0d\xbe\x92\x63\x06\xdf\x28\x6f\x26\x70\x26\xe4\x3d\x16\x5a\xcf\xc3\x74\x5c\x31\x4f\xa3\xf4\xf1\xa2\x7e\x1c\xca\x1e\xda\xfa\x85\xca\x0a\xfa\xc6\x20\x61\x6a\x60\x59\xdc\x30\xcb\xe2\x3d\x66\x6f\xbb\xf7\xac\xb9\xb7\x5d\xa3\x5d\x6f\xbb\xf5\x5e\x8e\x1a\x17\x7f\x46\x59\x33\xef\xe9\x62\x43\xec\xe1\x78\x82\x41\x73\x59\x76\xb8\x4b\x42\x29\x03\xab\xa3\xb8\xd1\x3d\xee\x7e\x53\x9b\x43\xc3\xce\xc1\x48\xbd\xac\x44\xd8\x43\xc7\x54\x68\x41\xb1\xb1\xc3\x58\xdc\x69\xb4\xd8\xdd\xc6\x79\xc0\x9a\x34\x6d\x9c\x6a\x1e\xda\xb4\xd9\x66\x32\x79\xf3\xe6\x5b\x47\x3b\xf1\xc6\x36\x83\x40\x4f\x88\xef\x6f\xa6\x17\x28\xc9\xa1\x2d\xcd\x94\xa8\x67\x76\x83\xf8\xcc\xa6\x01\x0d\xed\x93\x86\xde\x8c\x54\x3b\x88\xdf\xec\x07\xe6\xa6\xfc\x34\x89\x27\x3a\x1b\x2c\x7b\xd8\xf6\x01\x2d\xef\x9d\x96\xcf\x1b\xa4\xfc\x9a\x35\x35\x92\xa0\x8f\xd0\x74\x5c\x14\xc7\x55\x54\xfc\x34\xf2\xba\x93\x89\x69\xeb\x89\xab\x21\x13\xad\x4d\x27\x30\xfe\xf1\xa6\x55\x90\x0a\xf0\x85\x7c\x78\x13\x1d\x2f\x68\x32\xd1\x5e\xd2\x3a\x85\xce\x81\xbf\xe6\xa0\xb1\xdf\x31\x56\x3b\x85\xb6\xd6\xed\x93\xc7\x74\x9d\xda\x6f\x8f\xe0\x97\x22\x6c\x5e\xb3\xfe\x8f\x2a\x5e\xe8\x26\x8d\x06\x0b\x89\x07\xb5\xf0\x75\x42\x62\x87\x16\xfc\x2c\x36\x2a\x3b\xc8\x29\x5c\xca\xef\x4a\x3c\x8a\xea\xb6\x2a\x3c\xe9\x93\xc3\xae\xaf\x3e\x99\xad\x4f\x18\xe3\xad\xf5\xf4\x9e\xc5\xd4\x74\x66\xb8\xf6\xb4\xd6\xe9\xe8\x4e\x01\xf9\x2e\x01\x2f\x28\xe1\x1c\xa8\xac\x1f\xf6\xc1\x7c\x3b\x28\x37\xf4\x6d\x48\x57\x8b\x86\x68\x31\xd1\x5b\x53\x1d\xe4\x4b\x3b\x10\x20\xc8\x17\xf1\x98\x1d\xfa\x99\x98\x3a\x4d\x03\xaa\x81\x1f\x25\x75\xe1\xf9\xe2\x24\x16\x9e\x87\xfe\xe8\x85\x0d\x1e\x00\x44\xf3\x4d\x92\x80\xdd\x91\x1f\xf8\xd9\x96\x56\xa2\xf8\x0b\x08\xff\x9a\xe8\x03\x39\x39\x73\xfc\x78\xec\x7a\x52\x1b\x9c\xd1\xed\xdd\xad\xf7\xe9\xfa\x96\x6f\x40\xb2\x65\xa4\xbd\xc4\xa0\x45\xdf\xe4\xcc\x71\x92\xa4\x2f\x91\xed\x66\xbb\x02\xa8\x41\x9c\xed\x37\x9f\x26\xd5\x4c\xce\x1c\x1f\x93\x25\xa3\xa1\xf0\xb9\x68\xa1\x71\xa9\x2a\xf6\x99\xe6\x62\xc4\x46\x13\x03\x63\x17\x54\xdd\x06\x95\x63\x93\x44\x60\xab\x34\xb6\xf8\xb9\x9b\xf3\xd1\xb4\x3d\x0b\x1d\xd6\xa7\x36\xd1\xf1\xa2\x5e\xac\x6d\xf7\xee\x14\xca\x97\xfe\x3d\x85\xce\x95\x5b\x92\x1e\xbf\xef\x8f\xe0\xbf\x45\xf8\x51\xf2\xc9\xb6\x00\xff\xb0\x06\xf8\x9b\x75\xcb\xdf\x76\x10\xd7\x20\xe4\xe0\x2b\x93\x7e\xe0\x5f\x26\xac\xb2\x50\x21\x7b\x77\x9a\xd9\x3f\xb6\xaf\x3f\x25\x3b\xad\x08\xf4\xf1\x83\x65\xd5\x4a\xde\x60\x1d\x62\xa0\x7c\xf9\xd8\x96\x2a\xc8\xb3\x6a\x3d\x8f\x57\xcb\x29\x6e\x43\x02\x18\x9b\xe9\x0c\x00\x45\x8f\x34\x7d\xcb\x7f\x27\x07\x60\xe3\x3b\x9d\xdb\x9d\xf4\xf5\x9d\x2f\x21\x7c\xb6\x67\x47\x31\x1c\x1e\xe8\xd2\xf6\x99\x0e\xcd\xf5\xba\xb5\x69\xbb\x05\x79\x99\x3e\x6d\x6d\xf0\x50\x91\x8d\x56\xa2\x77\xa9\x8e\x0e\xcd\x92\x3a\xe5\xb5\x08\x03\x0f\xfa\x02\x05\xb5\x58\x1a\x27\x73\x14\x01\xac\xe8\xb6\xbf\xc0\x9c\x0a\x7e\x7a\x61\x5d\xe5\x2b\x55\x59\xe5\x0b\xbb\xd5\x4e\xee\x06\xbb\xbf\xc7\xf8\x51\xed\xcf\xa0\x68\x98\xff\xd1\x55\x36\xcc\x7f\xfb\xa0\x61\xfe\xc0\xa8\x30\x68\x98\xdf\xb6\x61\xfe\xc7\x94\x55\xe1\x03\x1d\xbb\xcd\x17\x1c\xc9\x33\xa6\x65\xfe\x67\xd3\xf0\xaa\x7b\x50\xe7\x92\x6b\xad\x8b\x38\xd3\x9a\xe6\x5f\xd3\x5d\xeb\xb8\xd0\xda\xd5\x51\xeb\x28\xe8\x9d\x8f\xf1\x47\x50\xb6\xd5\x75\x9b\x0d\xb5\x5e\x89\xe8\xfe\x55\x37\xce\xaf\x6c\x58\xe7\xfc\x77\xb6\x54\xb6\x6b\xb3\x95\xd6\x4d\xc3\xeb\xdd\x3b\xff\xbd\x43\x1b\xda\x3b\xff\xaf\xcd\xd6\x5a\x9f\x2e\xd1\x0f\x96\xd6\xd2\x3b\x5f\xf9\x0d\xa1\x8e\x9c\xad\x3a\x6a\x64\xba\xda\x8b\xfe\x6a\xb2\xb6\x4d\x28\x23\x78\xea\x76\xdc\xae\xb1\xfc\x7c\x73\x1d\x9b\xca\xeb\xa3\x24\xad\x73\xd9\xb9\x45\x6b\xea\xf8\x6f\x52\xe6\x7f\x1c\xc2\xfb\xdb\x21\xcc\x6e\x51\xa8\x7d\xe0\x9b\x7a\xc8\xfb\xa6\xee\x1a\xce\xc7\x8f\xb6\xec\xf2\x01\xe9\x07\x3f\xcc\xe2\xd0\xad\xce\x8a\xaa\x22\xdf\x1f\xa2\x7f\x81\x8a\xee\x18\x01\x09\x5c\x3c\x56\x9a\x39\xe1\xba\x34\xe7\xc6\xa1\x5b\x15\x51\x69\xf9\xb2\xa2\x7e\xd3\x2c\x6d\x2a\xd9\xf7\x76\x4e\xd9\xd8\x49\xbb\xde\xf0\x18\xf1\x98\xbf\x20\xea\x4f\xdd\x90\xb0\x04\xce\x4d\xd5\x0b\x12\x47\xb6\x4c\xe6\x47\x4a\xf6\x4c\x83\x4c\xb1\x27\xcd\xcc\x0a\xb1\xc8\x0b\x6c\x67\xde\xf6\x38\x39\x09\x49\x98\xf8\x3e\xc4\xaf\x24\x71\xe4\x3a\x4c\x74\xa5\x82\xd2\x30\x63\x95\x53\x68\x93\x98\xe1\x29\xb4\x49\x68\xe0\x2b\xe8\xe6\x12\x7e\x3e\xc2\xf2\xba\xd5\x6c\x2f\xa0\x14\xc2\x4e\x40\x66\x5a\xef\x00\xbd\x44\x82\x20\x53\x41\x92\x11\xa9\xef\xcb\x9b\xb2\x7f\x14\x88\xb3\xea\x6c\xe2\x67\x63\x39\x27\x2b\xea\xec\x79\x6f\x33\x09\x61\x81\xa1\x7b\xe4\xa7\x94\xe6\x9f\xf9\xbe\x90\x4c\x15\x37\x11\x55\x21\xc5\x9c\xf0\x9f\x0f\xf5\x8b\x28\x82\x9b\xbc\x72\x88\xfa\x45\x37\x72\x19\x2c\x8a\xab\x88\x19\x00\x53\x59\xf0\x82\x79\xdb\xeb\x1b\x67\xcc\x5d\xdc\x2c\x87\x5d\x41\x2f\x2d\xe1\x9b\x10\x56\xbf\xad\x26\x7e\xfc\x2a\x40\x78\x0d\x9f\x9c\x14\x78\xf6\xaa\x19\x67\xa2\xaa\xb2\xcb\x28\x04\xe4\x99\x81\x4d\xef\x3f\x2b\x9f\x9b\xd3\xf2\xb5\x76\x8e\xe9\xff\xd8\x4a\xef\x43\xed\xf4\x69\xdd\x70\xcb\x74\x5c\x0b\x9d\xb2\xad\x51\x47\x75\xf5\xe1\x57\x38\x07\xa8\xda\x9e\xd7\x94\x76\x83\xc8\xe4\xd1\x69\x1f\x2f\xbe\xf3\x69\x49\x23\x55\x4e\x57\x69\x52\x2d\xe2\x08\x99\xb7\x23\xd1\x2b\x88\xdf\x16\x70\x89\x52\xe3\x57\x65\x05\xbd\x7f\xa0\xe5\x0e\xb4\xdc\x0d\xd3\x72\x3f\x67\x6a\xb9\x9f\x58\xb3\x96\xfb\x1c\xa4\x06\x6b\x29\xb1\xf8\x40\xf9\xd2\x7f\xa8\xb4\xde\xef\x20\x7c\x65\x5f\x44\xac\x93\x43\xfd\xf5\x28\x6a\xdb\xf8\x5b\x11\xd3\x8c\xcf\x3d\xe7\x9a\xde\x68\x45\xf9\xe5\xa9\xa2\x7c\x33\xc2\x57\xad\xcb\xba\x25\x3b\x89\x32\x8d\x07\xfa\x70\xc6\xf7\x9f\x70\xb4\x2a\x67\xfc\x6e\xd9\xd6\xfd\x83\x23\xf8\xf2\xd5\xad\x54\xb7\x41\xb3\x7e\x34\x4c\x59\xb7\x87\x72\x9a\xb3\xd1\x1d\xb2\x1d\xeb\x11\xcd\x02\x58\x08\x31\x7c\x40\x1d\xb8\x7a\xc0\x4f\xe4\x29\x24\x77\x6d\x05\xfd\x6c\x08\xbf\x0d\x61\xcb\xb3\xa3\x78\x2e\xb4\xfd\x08\xbe\x05\xd6\xe6\x57\xae\xc1\xda\xfc\xe4\xd6\xf1\x74\xf4\x62\xc6\x0c\xad\x1b\x37\x92\x58\x3f\xcd\x64\x76\x52\xe0\xab\x5e\x01\xa0\x47\x8a\xd2\xe6\x78\x01\x6f\x16\xe2\x2d\xb3\x7e\x83\x1e\x95\x7f\x0a\x42\xbb\x98\xd4\x6d\x7f\x3c\x64\xb6\x03\xe1\xf4\xec\x64\xc3\xb3\x65\x90\xb0\x14\x4a\xa0\x37\x3b\x8b\x6d\xd7\x8b\x0c\xf4\x49\x3f\x6d\xd2\xa8\x19\x1d\xd3\x7e\x90\xee\x0b\x75\x4c\xbb\x60\xbf\xf0\x4b\x9d\x40\xbd\x08\x68\x0c\xcd\x97\xa7\x07\xcc\x95\xe8\x53\x87\x65\x9a\x5e\x96\xc5\xef\xac\x91\x28\x85\xca\xf6\xb9\x90\x73\xb8\x83\x22\x8b\xe2\xb8\x0f\xad\x06\x32\x9d\xe1\xf6\xc9\xbe\x5c\xbb\xe8\xf9\xd0\x84\x2b\x8b\x26\x86\x50\xe6\xb4\xac\xf0\x27\xa3\x5d\x35\xda\x4e\x11\x25\x1f\x18\xa5\x57\x77\xb8\x9f\xad\x4a\xd6\x4f\xc8\xc9\x77\x06\x21\x27\xfd\xca\x1e\xaf\xd1\x21\x27\x2f\x43\x74\x2f\xfc\x95\x0f\x17\xee\x2f\x00\xe5\x4a\x7c\xb0\x73\x35\x81\x5e\x51\x65\x20\x16\xf5\x2e\x16\x85\x86\x54\x54\x5b\x5b\x14\xca\xb6\xb6\x12\x51\x3e\x2a\xa5\xff\x82\x53\xab\x8e\x4a\x51\x3c\xf3\xb5\x5b\x57\x4b\x78\xc0\xa2\xfc\x55\x4c\xaf\xef\x70\x3f\x47\x02\x95\x9d\xb8\x96\x88\x7a\xbb\xb6\x67\x34\xa7\x6f\x33\x4c\xf7\x88\x96\x2f\x6e\xc1\x7f\x90\x8b\x68\xb9\x5d\xbb\xcf\x9f\x8f\x8c\xeb\x3a\xd1\xb1\x63\x98\x8b\xb6\xba\xc6\x81\xd4\xfe\x72\x6e\xd6\xaa\xed\x4b\x3d\x2e\x69\x88\x36\xb1\x1a\x65\x3d\x28\xa4\x0d\x3d\xbc\xdb\x45\xbb\x3c\x77\x84\xb3\x4d\x50\xf3\xac\x1f\x0f\xd3\xbb\x87\x95\xce\x97\xd1\xd6\x33\x02\xa6\xb0\xa2\xcb\xb9\x04\xaa\x7d\x66\xd5\xf6\xaa\x89\xa7\xfa\x35\x2b\xd8\x66\xf5\xd1\xed\xa0\x54\xda\x27\xdd\x7a\x52\xcf\xdd\x92\x9d\x4c\x6c\xcf\xd3\x5a\xa7\x19\x49\x31\x56\x21\x60\x10\x2e\x1e\x57\x64\xb6\x88\xcf\x3b\xaa\xac\x6a\x53\x51\x0c\xd0\xad\x75\x31\xe5\x16\x23\x8e\x6a\xd5\x94\xb5\x48\x48\x77\x76\x6b\x78\x40\x23\x70\xa2\x0a\x21\x07\xc2\x85\xa0\xac\xa7\x0a\x1e\x70\xc8\xc6\x76\x58\x95\x0b\x01\xda\x20\xce\x29\xaa\x9e\xa4\xeb\x8b\x9b\x8e\x60\x0f\x4b\x6e\x95\xc1\x79\xb2\xa1\xa2\xa4\x80\x9c\xeb\x3b\xee\x92\xeb\x24\xa9\x41\xc7\xac\x37\x2c\x7a\xb8\x2b\x92\x93\x15\x78\x17\x83\x65\xc2\x6c\xbe\x29\xb2\xe7\xa6\x7c\x1f\xe6\x25\x53\xc0\x65\xc7\x32\x68\x30\x55\xce\x84\xb2\xc8\x87\x15\xd0\x21\x8a\x27\x20\x97\xec\x7c\x74\xbb\x48\x8f\x0c\x57\xb8\x14\xef\x6b\x2f\x14\x76\x30\xd1\xf0\x63\x89\x5f\x87\xb2\x21\x57\x2f\xd1\xe7\x65\xd9\xb8\xac\xd9\x56\xc7\x30\xac\x3e\x8e\x8b\x13\x2c\xfb\x70\x60\x24\x08\xe0\x9d\x5d\xd0\xd2\xbe\x87\xd0\xac\xfe\x74\xb9\x4e\xf1\x59\x77\xa1\xec\xe8\x42\x24\xd7\xf2\x85\x44\xd6\x94\xe5\x49\x43\xb1\xc0\x21\xa3\xa5\xab\x8a\x59\x32\x8e\xa7\x36\xe0\xe8\xd2\x61\xd5\xc0\xf3\x58\x35\x06\x14\x8c\xc8\x32\xf3\x3c\x22\x80\x25\x3c\x4c\x5e\x53\xc6\x62\xb4\x5a\x93\x2a\xf8\x5d\x18\x5f\xb6\x16\xdd\xcd\xfa\xfe\x16\xfa\x94\x8e\x4f\xb4\x11\x52\x7b\x8a\x78\xaa\xf4\x12\xf2\x74\x0a\x19\x2d\xe1\x57\xd0\xd7\x46\xf1\x7f\x66\xbb\xc4\xff\x33\xa2\x2f\x41\xe9\x6f\xcd\x24\x45\xf6\xa6\x71\x43\xe5\x62\xa7\xed\xba\xb3\xa1\x2f\x02\xc7\xb8\x3c\x21\x36\xb0\xdc\xa6\x4a\x86\x2c\x8d\x13\x2f\x06\x11\x33\xc7\xb7\x43\xb0\xbf\x65\x4e\xd9\x93\xf0\x51\x7c\x78\x3d\x64\x2f\xad\x3c\xe2\xb7\x23\x7c\x8e\x84\xda\x61\xc9\x06\x6e\x47\xf4\x70\xf6\x52\x46\x45\xe3\x6a\x54\xaa\x65\x9a\x66\xc2\x34\x0e\x28\x1f\x81\xd3\x47\x3a\x5c\x3b\x42\x01\x28\x80\x4f\x15\xb4\xb4\x7f\x81\x26\x17\x37\x14\x74\xb4\x5f\x53\x80\x17\x1c\x12\x58\x75\xc4\x32\x8d\x07\x0b\x83\x8b\xde\x84\x5a\x23\xc0\x5e\xae\x27\xf7\xac\xdc\x2d\x05\xd4\x35\x45\x86\xa5\x13\x34\x18\x60\x97\x69\x7e\xbf\x25\x7e\xec\xab\x6b\xd0\xe8\xef\x40\x99\xb1\x8a\xb5\xf9\xbe\x83\xca\xca\xeb\x19\x54\x76\xb2\x30\xa8\x6c\x5e\x05\x95\x1d\x5e\x7d\xab\xfe\x6e\xe1\x66\x6f\x1c\xce\x97\xd4\xea\xea\xaa\xb0\xbe\x3f\x44\x0f\xe6\x2f\x66\xf4\x5a\xed\xa3\x50\x59\xf4\x5e\x33\xf5\xb8\x0b\x0f\x82\x72\xeb\x48\x67\xef\x6b\x87\xf0\x3e\xe9\x2c\xdd\x45\xcf\xf7\xdb\x34\xd0\x30\x9d\x2f\x99\xdc\x63\x33\x6a\xe0\x2f\x4a\xf8\x09\xab\x51\x3f\xec\x79\xe6\xcd\xca\x41\xe8\x2d\x25\x3d\x5f\xad\x84\xf0\x4f\x8d\x33\xbf\x1a\xc8\x36\xac\x75\x19\x30\xa1\xb4\x13\xa3\x7a\x79\x2e\xc8\xa0\xc8\x79\x44\xae\x5d\x64\xbe\x10\x72\x44\x3b\xa6\x86\x1d\x45\x32\x04\xd5\x2f\xec\xe4\xae\x38\xa8\x66\x99\x22\x31\x5f\xcb\x5b\x4a\x04\x4e\x1f\xa8\x06\x0d\xbe\x91\xe2\x53\x89\x0f\x1f\x7b\x66\x22\x9b\x51\x8a\xa7\xc0\x2f\x6d\xca\xb1\x50\xe6\xc1\x06\xc2\x2f\xc7\xa9\xe0\x3f\x3d\x0b\x8f\xf5\x2c\x2c\x59\xa7\xce\xa2\xbf\x99\xfe\x34\xbc\x93\x19\x27\xb2\x76\xe3\xd8\x24\x72\xfd\x05\x4f\x4d\x88\x6c\x87\xe4\xee\x67\x70\x11\xf1\x19\x02\x89\x7c\x59\x22\x44\x44\x7a\x40\x8c\x86\xd9\x64\x54\xca\x82\x76\x4c\x02\xbf\xca\xc6\x94\xa5\x70\x05\xbd\x62\x2b\xfe\x51\x09\x8f\xaa\xe4\x6f\xeb\x9b\xa5\xce\xa5\xaf\x7a\x72\x97\xd3\x3b\x4b\x3a\x9b\x1c\x1c\xf9\x42\x36\xc9\xb9\x38\x55\x11\xa2\xde\x5d\x9d\x5c\xcc\x83\xfc\xe7\x28\x13\xb3\xad\xc1\x64\x4a\xd3\xd5\xa0\x0e\x50\x08\x83\x3a\xb4\x54\x0d\x7c\x08\xe9\x69\xef\x0f\x7f\x80\x9d\xef\xf8\x13\x48\x15\x4a\xb2\x3e\xd0\xa5\x7c\x51\x0b\xd0\xb5\x73\x24\x05\x79\xac\xed\x27\x29\xbc\x25\xa0\xa5\x38\x26\xca\x84\x48\x44\x3a\xd1\x31\xf6\xa0\x4c\x16\xdd\x38\x1a\x6f\xb0\x70\x3c\x62\x5c\x9c\x01\x24\xf4\xc9\xb4\xbf\x10\x72\x6d\x54\xbc\x32\x56\xc1\xb7\x95\xf0\x30\xa7\xd4\xd6\x4b\x4a\x7d\x3a\x77\x67\x02\x27\xca\x2c\x60\x05\x01\xc9\xef\x3c\x7f\xd0\x8c\x20\x82\x3c\x9b\xcc\x20\xce\x8b\x14\xb2\xb3\x2b\x01\x6b\xad\x4c\xa6\x1f\x6f\x84\x41\x95\x71\x1a\x62\xac\x4d\x69\xa5\xc2\x9e\x97\xb6\xd7\x10\x0a\x13\x3f\xec\x0b\x42\xc8\x9b\x67\x35\x4e\x43\x44\xb5\x36\x68\xd3\x1b\xa6\x32\xbb\xa9\x8d\x56\xf0\xed\x43\x46\xbf\x9b\x97\x0c\xf5\x79\xa6\x54\xbe\x7c\x06\x3e\x9f\x2e\x19\x0d\x9c\x52\x18\xa5\x0d\x2a\x25\x69\x50\x25\x1d\x84\x2c\x9a\x66\x3c\xb8\x7e\x6a\x13\xe3\x24\x03\x74\xaf\x68\x4c\xb6\xb7\x8d\x03\xf3\xbc\xf5\x0d\x71\x08\xf9\xe7\xaa\x25\x27\xb4\xac\x1e\x84\xcd\xb1\x0a\x99\x4d\x0c\xe5\x85\x4b\xc2\xf3\x89\xeb\x89\x50\x32\xf3\x6b\x42\xa6\x86\xae\x61\xaa\x0d\x83\x3a\xd9\xb2\xc7\x16\x78\xb2\x03\xd9\x6c\x8a\xaf\x2a\x6d\x6c\x15\x07\xc4\xe7\x67\xde\x23\x7c\x43\xf9\x3c\x53\x39\x56\x99\x0e\x28\x47\x2c\x4a\x54\x6e\xca\x1b\x90\xb4\xa9\xdf\x86\xe8\x6f\x23\x50\xb3\x25\xff\xca\xa9\xdc\xba\x83\x4e\x5a\x49\x79\x9e\xa9\xe2\x6f\x54\x9c\x41\x5a\x26\x74\x06\x86\x0f\x42\x42\xd5\xc6\xd1\xb2\x80\x5b\xdd\x6e\x34\x60\x16\x80\xcd\x59\xca\x2c\xe1\xa9\x23\xfc\x52\x56\xfd\xb2\xb3\xf2\x2d\xe2\x3a\x8a\xd3\xd6\xd7\xb7\xd2\xc7\x67\x62\x4d\xb2\xfa\x17\x17\xe2\xc6\xb3\xf2\x7e\x8e\x9f\xa4\xec\xe0\xd6\x75\x66\x07\xc2\xdb\x37\x60\x07\x0f\x20\x3b\x10\x20\x7f\x08\xb3\x03\xb1\x80\x01\x3b\x68\xc7\x0e\x04\x7c\x06\xec\x60\x9d\xd8\xc1\x1d\x8a\x1d\xbc\x1a\xd1\x17\xf5\xca\x0e\x14\x56\xf4\xc3\x0c\x72\x25\x3c\xfb\x60\x08\x5f\xd9\xd4\x23\x43\x10\xd6\x47\xeb\x6d\x9b\xa8\x6d\x5e\xc8\x28\x9e\x26\x66\x96\xb5\x59\x58\xfe\xe4\x7a\xa7\xbc\x92\x49\x07\xac\xa9\x1e\x49\xa9\xee\xa4\x79\xc6\x47\x47\xf0\xed\x25\x6c\xc9\xf7\x8c\xdc\x43\xeb\x79\x25\x65\x36\xf9\x1e\x6a\xbd\xad\xc1\x6c\xda\xf1\x55\x90\x8b\x9c\x44\xbe\x2b\xa4\xdc\x0a\xc3\xcf\x10\x32\x8f\x2d\xd9\x7e\xdc\x5b\xa6\x62\x9c\x56\xb8\x53\x1e\xdc\x96\x6f\x28\x4d\x54\xf8\x08\x74\x87\x47\xd1\xb2\x74\xc9\xf6\x5c\x61\x2d\x3c\x96\x9b\x93\x61\xe0\xcf\x58\x0f\xde\x8f\xf0\x59\x72\x39\x10\x50\x69\xbd\x19\xf5\xe1\xfb\xab\xe8\xd8\xef\x27\x25\xb6\x1f\xbb\x71\x93\xd6\xcc\xd1\xfa\x00\x62\x17\xd8\x91\xed\x00\xaf\x1b\xe4\x67\xc6\x70\x55\x9e\x8b\xa7\xd2\x23\x70\x12\x8c\xc4\x08\xb3\x38\xb0\x62\xdf\xf2\xe0\x18\x1b\x5c\x26\xd7\x68\xac\x9a\x30\xe6\x6c\xa2\xf6\x73\x10\x1e\x81\x49\x5b\xcb\x6b\x83\xca\x25\x4b\xdd\xc0\xa1\x28\x62\x76\x99\x15\xfc\x86\x11\xbc\xb3\xdf\x78\x58\xeb\xdb\xc3\x74\x4f\xcb\x55\x59\xec\xb9\x38\x32\x56\xf1\xaf\x15\xf4\x8e\x61\xfc\x3d\x54\x78\x60\x3e\xaf\xed\x8c\xf7\xaa\x04\xa3\x89\xb6\xe7\xa6\x25\x86\xf8\x8c\x3a\x38\x99\x33\xf0\x81\xfc\x19\xb8\x6b\x8d\x67\x60\xa1\xe8\x0c\xf4\x02\x90\x7e\x0f\xc1\x73\x35\x7e\x9e\x5c\xdb\x8c\xf7\x2d\x75\x9d\x6a\x3b\x04\xbd\x6f\xb8\x7d\x41\xad\xb6\x06\x01\xeb\x35\xc3\xf4\x45\xa8\xf5\x7a\x2f\x09\x0b\x19\x09\x71\x7d\x44\x43\xe1\xc4\x01\xad\xc4\x11\x93\xd2\x49\x07\x3a\x80\x7d\x05\x7d\xa3\x84\x9f\x86\xf3\x0f\x5a\x57\xad\x9f\x9b\xee\x0c\x09\x47\x7f\x90\x93\x1b\xbe\xda\x27\x42\x09\x92\x77\xd7\x30\x7d\x19\x6a\xbd\xde\x3d\xb3\x61\x23\xb1\xaa\x25\xf7\xa1\x15\xd1\x56\xd0\xf7\xce\x98\x6c\x88\x5f\x08\xec\xfe\x40\x77\x7f\x49\xde\xfa\x67\x3d\x7f\x98\xde\x8f\xf2\x57\xfb\xa4\x55\x1b\xa4\x0d\xae\xb3\x32\x38\xc8\xba\x6a\x7f\x3c\x7e\x3c\xd4\x0f\xe6\x08\xb2\xf4\xf1\x21\x7a\x0a\xe5\xaf\xae\x86\x28\x6d\x0c\xfa\x0c\xd2\xb3\x7a\x40\xbb\xaf\x8e\x74\xcd\xb6\x2b\xb2\x89\x5b\x6f\x1a\xa1\x2b\x43\x45\x77\x3a\x52\x8e\xbc\x50\x5c\x60\xf2\x00\x8f\x7c\x37\x63\x49\x79\x9d\x0c\x23\xeb\x46\x61\x2a\xe4\x0c\x35\xb2\x10\x72\xd4\x97\x7d\x53\xa8\x98\x2a\x15\x0a\x63\xc6\x3d\x59\x91\xae\x6e\x83\x30\x7e\x12\xe1\x2b\xa4\xcf\x7b\x3f\x1d\x6f\xe7\xf3\x4e\x53\xe3\x7c\x22\x9a\x54\xe4\x42\xf3\x1f\x64\xb2\xf6\xd3\xee\x59\xc7\x45\x36\x3e\xeb\x63\xc3\xf4\x6b\xa5\xa2\x3b\xdd\xc9\xdb\x19\x87\xe3\x67\x26\x62\x6a\x8c\x4b\x69\xf3\x9f\xa1\x33\x85\x36\x1b\x98\x7f\x64\xb5\x98\xff\x11\x8c\x1f\x61\xcc\x78\xde\x8e\xab\x8b\x95\xa5\x5d\x95\xab\x82\x79\xeb\x0e\x4c\x77\x5d\x15\xcc\xb7\x54\xbc\x68\xad\xc2\x2c\xbd\x04\xcf\x0c\xe6\x2b\x2b\xe8\x35\x83\xdc\xd1\x41\xee\xe8\x86\x25\x49\x7c\xcc\xcc\x1d\xfd\xc3\x35\xe7\x8e\x86\xb9\x0a\x49\xdb\xa2\x8d\x4f\x16\xfd\x13\x95\x2c\xfa\x61\x84\xc7\xda\x12\x0f\xf3\x28\x42\x36\xe8\x4b\xd1\x6c\xbe\x2a\xa7\x19\x59\x68\xd6\x4a\xb2\xe1\x28\x6e\x6c\xfa\x27\x7e\x77\x9a\xfd\xf9\x66\x84\x1f\xdb\xdb\x42\x04\xc9\x5b\x9a\x2c\x88\xf9\xdd\xf8\x29\x9f\x46\x47\xba\x67\xbb\x3c\xd6\x1a\xd3\xd9\x2e\x30\x75\x9d\xe7\x72\x55\x30\x9f\xaf\x82\xf4\x7b\x23\x98\xb4\x59\x6a\x9a\xdf\x79\x7a\x98\x66\x2e\x18\xfe\x77\x33\xf6\x99\xa5\x60\x68\x4d\xd4\x7c\xff\x30\x6e\x88\x80\xce\x99\x30\x98\x17\x01\x9d\xd7\xaf\x3e\x9e\xf3\xfc\x43\x6d\xf2\x30\x97\x6d\xd9\xed\x86\x39\x15\xfc\x92\xe2\xd4\xd0\xa5\xd5\x7f\xf7\xd2\x76\xdf\x95\x39\x93\x1d\x52\x3f\x2b\xf8\xba\x34\xf7\xf3\x30\x7d\xc2\x95\x49\xdd\xf6\x89\x4e\xf7\xd4\xa9\xa0\xb2\x7b\x53\x4b\xaa\x67\xa7\xd4\xcc\xab\x74\xb2\xe7\x13\xe8\x85\xdb\xe7\x43\x97\xd5\xc6\x56\x9b\xe6\x79\x48\x9f\x8a\x2b\xe8\xc5\xb3\xc5\x89\x9d\x65\xe5\x18\x2c\xca\xef\xcc\x8c\x76\xb9\x74\xb2\xec\xa5\x17\xcc\x49\x77\xe3\x33\x83\x79\x73\xa4\x49\xd5\x1e\x26\x08\xc9\x41\xdb\xf5\x72\xcd\x93\x5e\x33\x8a\x7f\xb9\x0d\x86\x42\x1a\xe7\x4f\x37\x53\x22\xff\x16\x3c\x47\xe6\x0e\x48\x0a\xf3\xcc\x60\xde\xcc\xcd\xfc\xf1\x20\x37\xb3\x5f\xde\xfe\x54\x95\x9a\x79\x8c\x3e\xb2\x30\x33\xf3\x2a\x0e\x62\x33\x7a\x7e\x0c\x6f\xc3\x8f\xee\x89\x9c\x0e\x04\x87\xde\x05\x87\x3f\x36\x05\x87\x77\xf4\xe3\x5f\x2a\xc8\xaf\xf4\xdb\x54\xf9\xde\x20\x91\xe1\x34\x3a\xd6\x9d\x71\xed\xb0\xc6\xdb\x33\xae\xa2\x12\xe1\x5f\xfa\xdf\x6d\x49\x03\x04\x21\x7f\xe8\x7f\xd3\xbd\xf2\x6f\x83\x65\x81\xbd\x64\x11\x84\x7d\xc2\x4e\xb2\x6a\x22\xf8\x06\x14\x91\x0e\x82\x13\xc4\x73\x4f\x40\xbd\xbb\x98\xd5\x1b\xfc\x64\xae\xa0\x7f\x7d\x04\xbe\x0f\xe1\xff\x65\x57\x63\x77\x89\x4d\x31\xdb\xf1\x5c\x9f\xcd\x82\xfd\x2b\x52\x65\x9e\xf7\x5c\x44\xdf\xa0\xe4\x1b\x95\xb9\xa9\x54\x0c\xd7\x27\xc2\x5a\xc6\xf1\xca\xb3\xf9\x28\xea\xe8\x47\xb1\x1d\xc6\x73\x82\x9d\xd8\xb1\x9e\x97\x6c\xb3\x25\xbe\xa8\x2c\x23\xf0\x7c\x33\x8a\x59\x9d\xc4\x21\x7c\x24\x20\xa2\xcb\x1e\xe7\xbd\x6e\x7c\xa9\x3c\x2e\xaa\xdf\x6a\x23\x88\xa0\x99\x1a\x91\x5e\xca\x8c\xc7\x32\xc4\x67\xcd\xdb\xd5\x13\x41\xad\x76\x88\xeb\xc1\x32\xcf\xe0\xc2\xdd\xf4\x70\x76\x11\x66\xbe\x87\xf8\xaa\x9c\x4d\xdd\x0e\x4f\x88\xf3\xe8\x46\x30\xe7\x9a\xa0\xdd\x64\xca\xc8\x53\xdb\x93\xf9\xe6\x5f\x0c\xe1\xad\xb2\xdd\x12\x64\x31\x7d\x6c\x48\x7d\xf4\xee\xa1\x1c\xe8\x5a\xb2\x4d\xa2\x04\xfa\x51\xd6\x12\xcf\x6b\x12\x8e\xf5\xd1\x22\x73\x54\x1d\x40\x01\xb4\xd4\xd6\x12\x26\xa2\xaf\x1a\x24\x2c\xc6\xb1\x8c\x50\xf4\x5d\xcf\x2c\xd9\x0c\xe0\x14\xa3\xaa\x12\x44\x5c\xa3\x8e\xdc\x05\xdf\xf6\xa2\x96\xdb\xba\x56\x34\x74\xbc\x13\x51\x79\x0d\x3b\xb4\x3d\x8f\x79\x6e\x54\xe7\x1f\x00\xad\x5e\x8c\x23\x21\x2f\x2c\xe2\x99\x59\xec\x32\xe7\x60\x0e\xe0\x46\xc2\x24\x21\x8c\x5e\xbb\x74\xc6\xa7\x31\x09\xf1\x4e\xfb\x49\x4a\x48\x14\x9e\xe2\x82\xa2\x72\xd5\xc0\xaf\xb2\x46\x1c\xed\x58\x0e\xc2\x13\x5e\x60\x3b\xd1\x0e\x99\xb5\xe2\xb1\x30\xda\xc1\x59\xe7\x78\x98\xf8\xe3\x71\x30\x9e\x6e\xdb\x8e\xcc\x96\x7e\x68\x04\x9f\x53\xb7\xfd\xc4\xd6\x69\x13\xd6\x5d\x23\xf4\xd5\x23\xd9\x6b\x2a\x19\x26\xca\xa4\xa7\x40\x0e\x8c\x48\x93\x88\x64\x63\xae\xd4\x64\x1a\x55\xc8\x21\xc6\xe1\xf9\x8c\xec\x50\xcf\x10\x39\x0c\x24\xf1\x21\x6d\xb8\x19\x24\x60\x6c\x51\x75\x42\x96\x39\x84\xd4\x45\x27\x48\x33\x1f\x64\x97\xd1\x50\xa5\x40\x18\x87\xa9\xe1\x56\x4f\xa8\x69\x24\xbe\x7b\x43\x22\x4f\xa7\xc4\x6b\xd8\xef\x46\x83\x41\x58\x13\x18\x64\xe4\xb3\x69\x32\x23\x51\xb4\xa2\x42\xc4\xd7\x62\x10\x8b\x62\xd5\x1f\x16\x24\x86\xa8\x11\xf8\xa2\x89\x26\x97\xc8\xf8\x47\xa1\xd5\xac\xf8\xa0\x01\x05\xd9\x31\x56\x17\xbf\x92\x0b\xaf\x10\x90\x8e\x92\x10\x66\x07\x73\xb6\x33\x6f\x8b\x9e\x67\xd0\x5e\x51\x64\xfb\xf8\x8e\x4c\x99\xe0\x1b\x29\x6c\x47\xb1\x4e\x23\x17\xd1\x5a\xd5\xd8\x6b\x56\x08\xb9\x32\x58\x66\x4b\x2c\x2c\x93\x27\x07\x09\x0c\x13\xb1\x16\xc0\x3f\x8e\xaf\xe9\x19\x9c\x96\x89\xe1\x38\xa0\xa1\x27\x6d\x35\x64\x69\x20\x2b\x04\x78\x79\x0e\x79\x06\x3b\x19\x33\x3f\x02\xce\xb4\xb4\x6b\x9e\xc5\xf6\xae\x67\x90\x89\x99\xe9\x8d\x45\xcd\xf3\x52\xd8\x8d\x37\x83\x24\x1c\x0f\x96\xfd\xf1\x46\xe0\xe8\x8a\x98\x99\x6e\x7e\x77\x0d\xe1\xad\xc6\x01\xb4\x5e\xa5\xc9\xd1\x73\x72\xe4\x48\x25\x83\xb7\x69\x16\x90\x23\x40\x9c\xfa\x40\x49\xf8\xa6\x34\x77\x71\x75\x41\xb8\xd9\x5a\x0a\xa4\x8a\x18\x50\x19\x37\xcb\xf9\x44\xcc\x6c\xa7\x29\xd5\x29\x65\x2b\x57\x09\xf2\xbe\xd8\x58\xf9\x36\xb4\x3b\xdc\xbe\xbd\xc2\xd7\x5c\x31\xc8\x2a\x19\x27\x15\x59\xe0\x28\x25\x9a\x63\xe4\x32\x22\x9e\x34\x56\x3c\x56\x26\x6e\x85\x55\xd2\x7e\x8c\x1c\xd8\xc4\x63\x35\x48\xaa\x76\x02\x20\x49\xfa\xdb\x75\xfb\xa4\x49\xaf\x1e\x40\x22\xf3\x7a\x33\xb5\xeb\xe5\xeb\x91\xda\xf5\x67\x68\x82\xf4\x53\x54\x56\xe7\xc7\x57\xc8\x11\x30\xc0\x7a\xcd\x0c\x09\x89\x18\xd8\x16\xa1\xf9\x3c\xf3\x44\xfc\x5c\x33\x48\xfa\x86\x11\x9f\xc7\x92\xcb\x96\x01\x58\x1c\x8b\xf9\xa1\x1a\x97\x05\x4e\x64\x91\xd7\x1d\xf9\x2a\xaf\xf8\x2b\x08\x6b\x69\xc5\xba\x0f\xe1\x9d\x6d\x65\xef\x6a\x10\x32\x0e\x8d\x99\xc0\x99\x93\x2f\x80\x69\xe6\x76\x34\x95\x09\xa9\x07\x9a\x06\x27\x5c\xa2\xa0\x3e\xe4\x1c\x55\xa4\xd4\x04\x71\x0e\x1b\xce\x6e\xf0\x0f\x87\xf1\x23\xe2\xd8\x93\xf2\xd6\x44\x2d\x66\xe1\x41\xc9\xff\xad\x2f\x0c\xab\x23\xfb\xf1\xe1\x36\xcf\x48\x3b\xbf\xd4\x58\x6a\x0c\x74\x77\x30\x54\x5c\x15\xcc\x8b\x45\x2e\xda\x51\x2a\x52\xa4\x22\xe1\x76\xe6\x02\xf9\x6c\x55\x50\xc7\xa0\x40\x81\xb1\xdf\x6e\x24\x4b\x15\xb4\x99\x83\x5d\x8b\x65\x34\x21\xff\xa8\xfc\x56\xa4\xb2\xfe\x98\xe7\x2e\xa8\xee\xca\xf3\x2c\x57\x37\xd1\x61\xfc\xdb\x8e\x64\x63\x6a\x08\x37\x92\x8e\x32\x79\xbb\x0c\x39\xdc\x7c\x7d\xd5\x66\xd5\x63\x64\x21\xb1\x43\xdb\x8f\x19\x8b\xa4\xbf\xa2\xe6\xfa\xb6\x07\x0d\x7d\xc7\xf4\xa6\x2e\x06\x7e\x00\x7d\xba\x5b\x16\x63\x30\x49\xfe\xb5\xe5\xc0\xdf\x16\x77\x98\x5a\x11\x30\xf8\x62\x6e\x64\x61\x90\x8e\x32\xcf\xaa\x41\x9d\xb5\x2c\x57\x8e\x42\xdc\x7a\x9d\x39\xae\x1d\x33\xaf\x29\xe1\xe5\xc6\x1a\x54\xb2\x8e\xb3\xfe\x80\xed\x35\x16\xed\x71\x8f\xeb\x1d\xaa\xc0\x00\x84\xaf\xca\x25\x91\xf9\xa6\x4c\x8d\x94\x27\x9a\xf9\xc2\x81\xb2\xc8\xc8\xdc\xdc\xa1\xec\xe6\xd4\x98\x1d\x27\x21\xcb\x46\xf4\xbd\x76\x0b\xfe\xd5\x8e\x36\x40\xeb\x67\xa3\x74\xa7\xfe\xd5\xa9\xaa\x76\x8a\x6e\x95\x15\xf4\xc9\x51\x3c\x89\x37\x09\xc1\xde\xda\xa7\xb0\xf7\xfc\xb9\x8c\xa8\x2d\x6e\x7b\x4d\xcd\x19\x5a\x23\x0e\xff\x0b\xe1\x73\xd2\x53\x02\x66\xad\xef\xae\x21\x3f\xfa\x5d\xe8\x98\xb1\x00\x7e\x44\x34\x53\xe0\x9c\x0d\xac\x6a\xf2\x18\x38\xaa\x3b\x38\x17\x27\x34\x9e\x39\x72\x37\xf9\xce\xbb\x3e\x59\x04\x89\x29\x1a\x97\xca\x02\xb4\x6a\x55\x41\x89\x11\xe3\x6c\x84\x83\xa5\x21\x65\xc1\x48\x0d\x69\x06\x69\xba\x3e\x39\x76\x70\xf2\xc2\x0b\x2f\xdc\x27\x12\x6d\xe5\x36\xbb\x3e\x39\x3e\x37\x59\xc1\x1f\x2f\x65\x2a\x22\xbc\xb7\x44\x5f\x87\xe6\x52\x63\x4a\xea\x34\x13\x69\xd0\xb2\x26\x8c\x69\xa9\xd9\x96\x33\x5f\x6e\x34\x47\x4b\x0d\x24\xbb\xf1\x4e\x5c\xe9\xc9\x40\xa2\x6d\xae\xa7\xd1\x36\xfc\x2b\x19\x0d\xba\xc1\x1f\x1b\xaf\xb3\x70\x81\x8d\x9f\x60\x4d\x6b\xb3\x35\x12\x37\x1b\x0c\xf3\x27\x7f\xb9\xe0\xc9\x28\xe6\x40\x5f\x68\x5a\xa3\xd6\x26\x78\x0b\xe3\xc3\x78\x93\xd0\xda\xac\x49\x85\x89\x95\xb9\xd6\x2c\x75\x51\xa5\x23\x64\x76\x15\x74\xae\x45\x3b\x62\xa9\xa5\xce\xc0\xc9\xdf\x2d\xe1\x2d\x5a\xa1\xb5\x6e\x2a\xad\x1e\x1d\xff\xb4\x3b\x3a\xda\xd5\x13\x7e\xb0\xec\x31\x67\x21\xcd\xc0\x97\x96\x45\xb9\x15\x67\x06\x9e\xce\xe2\x2d\x20\x86\x31\x87\x39\xd6\x41\x05\xe6\x5d\x3d\x82\x79\x56\xbd\x9a\x85\xf4\x2d\x5b\x0b\xcd\xf6\x20\x67\x57\x26\xc3\xc0\xbf\x2a\x98\xb7\xfe\x09\xd3\xfd\xf2\xef\xde\x5d\xa0\xd5\x30\xf0\xa5\x1f\xf4\xcf\x07\x7e\xd0\x81\x1f\x74\xe0\x07\x6d\xef\x07\xfd\x8e\xf2\x83\xfe\x3d\xc2\xbb\xbb\x92\xf3\xcc\xe1\x04\xa9\xfb\xee\x7e\x1c\xa2\xea\x60\x96\x89\xeb\x57\xbd\xc4\x49\x8b\x63\x2f\x32\x27\xd9\xf0\xa6\x2c\xf8\x9e\xd4\x5b\xfa\x87\x08\x5f\xd4\xe7\x72\x85\xdb\xf4\x59\x45\x6e\x53\x4d\x71\x36\xda\x77\x7a\x6d\x77\x13\xf4\x45\xd6\xee\x36\x26\x68\xb9\x90\xac\x09\x1a\xd6\x88\xf1\xc7\x46\xf1\xf9\xdd\x20\x00\xbe\xaa\x57\x8f\xd2\x31\xe3\x77\x91\xbf\x4a\x41\xc3\x74\x5a\x3d\x6f\xf3\x80\x10\xf7\x49\x88\x17\x95\xd3\xea\x7a\xfa\x6b\x85\x4e\x2b\xb9\x0d\x59\xc7\x55\x6f\x72\x59\x66\x5f\x07\x24\xff\x17\xc5\x83\xf5\xd4\xee\xe4\xe3\x12\x6b\x4f\x67\xf2\xd1\xea\xc5\x92\x24\xe4\x4f\xb6\x76\x27\x21\xe0\xd3\x7a\xed\x56\xfa\x64\xe3\x77\x9f\x7e\x2d\xd1\xff\x94\x8b\xd2\xae\xb4\xed\xe8\x82\x7a\x61\xe2\x57\x4e\xa1\x51\xc5\x4e\x4e\xa1\xad\xcf\x0c\xe6\xe7\xb4\x0f\xec\xf7\x31\xfe\xf3\x12\xfe\x1f\x5c\xf7\x01\x1a\x5e\x6d\xce\x40\x27\x51\xeb\xfd\x25\xfa\xd6\xd2\x6c\xbe\xbe\x4f\x1c\x32\x1b\x02\x02\x95\x86\xa5\x67\x14\xa5\xda\x30\xb9\x06\x92\x4d\x65\x64\xb0\x1d\xb2\xfd\x64\x9c\xd0\x09\xcf\x0b\x96\x29\xd9\x2e\xeb\x1d\x8e\xed\x57\xde\x16\x75\x64\xf9\xf8\x61\xe2\x1b\xa3\x7b\xcd\x4b\xf9\x9b\x07\x83\x70\xde\x75\xe8\x7e\x2e\x87\xcf\xbb\x4e\x64\x7e\x3f\x4c\xfc\xa8\x4c\xa2\x13\xae\x28\x58\xe1\xb3\x93\x70\x8d\xb8\x35\xd2\x08\xd9\x92\x1b\x24\x60\x87\x25\x8b\x76\xe4\x6f\x8b\x53\x73\x50\x93\xc5\x30\xf6\x31\xd6\xf0\xec\x2a\xa3\xfb\x49\xd5\xf6\xab\xcc\xd3\xba\xa3\xa1\xa5\x2b\x6f\x41\x28\x9e\x8d\x04\x90\xe3\x45\x62\x13\x9f\x2d\x93\xc0\xcf\x64\x86\x7e\x00\xe1\x87\x0b\xed\x8b\x2f\xea\x4a\x37\x8a\x83\xb0\x29\x9c\x71\xaf\xd3\x69\x92\x2f\x40\x59\x45\x41\xbc\x90\x4e\x4f\x99\xf6\x43\x16\xdb\xae\x9f\x76\xbb\xb2\x45\x79\x46\x51\x30\xca\x71\x23\x4e\x78\x12\x37\x5a\xd4\x05\x46\xd9\xc9\x86\xe7\x56\xdd\x18\x6c\x34\x30\xeb\x4c\xff\xd8\xac\x1b\x2f\xd7\x05\xf8\x45\x08\x9b\xc8\x61\xdd\x88\xf7\xf4\x48\x34\xaf\x4a\xdf\x02\x09\xe8\x09\x59\x3b\xfb\x33\x95\x45\xae\xab\xd9\x51\xe2\x42\x05\x3f\x0d\x6b\x94\xb5\x9e\x44\xa7\xe6\x0c\x89\x88\xab\x60\xfc\x39\xd9\x84\xab\x0c\x5e\x0d\x45\x12\x98\x5f\x59\x76\x4f\xb8\x0d\xe6\xb8\x76\x25\x08\x17\x76\xf0\x5f\x3b\xf8\xe3\x99\xe8\x93\xcf\x20\xfc\x08\x50\x69\x5d\x7f\x21\xef\xf9\x7d\x9b\xf6\xfc\xde\x86\x8e\xca\x22\x67\xc4\x91\x0f\x99\x4e\xdf\x5a\x10\x12\x35\x88\x5e\xa7\x5b\xe3\xe8\x51\x77\xa3\x88\x45\x7a\xca\x8e\x50\x76\x21\x9d\x16\x5a\xa2\xd8\x51\xe0\x57\x08\x39\xec\x42\x5d\x30\xd8\x6d\xe3\x24\x69\x30\x05\x89\xca\x6b\x95\x08\x12\xf8\x2c\x67\x30\xba\x17\xe1\x47\xa6\xfe\x80\x16\x94\xbb\x43\xa3\xdc\x8b\x73\x28\x97\xbe\xf4\x40\xa3\xdd\x85\xd9\x15\xdc\x81\xf0\xe6\x28\x89\x1a\xcc\x77\xac\x57\x22\x7a\x33\x12\x26\x41\xcf\x5e\x20\x31\xf3\x3c\xad\xd9\x4a\xf5\x1f\x92\x22\xc4\xe3\x9c\x29\x46\x9c\x1f\x66\x08\x11\x98\x5f\x9d\x80\xc9\x92\x2c\x8d\x86\xd7\x84\x70\x2d\x2f\x54\x3e\x98\x30\x36\x0d\xc2\x51\x85\x64\xa6\x07\x2e\xc5\x4a\xc6\xa5\xf4\xdf\x25\xfc\x98\xde\x64\x61\xeb\xff\x96\xe8\xbe\xcc\x95\x1e\x4c\x88\x86\x72\x7e\x5b\x09\xdf\xa8\xed\x88\x0d\x3a\x3e\xa1\x25\x1b\xb9\x03\x30\xc5\x42\x1a\x95\x95\x79\x2e\xc2\xbb\x7b\x70\x18\xe4\x13\xf1\x5e\x85\xf0\xc3\x44\x45\x45\x81\xb8\x60\xf1\x79\xee\x1a\x0c\x90\x07\xa7\x8d\x62\x36\x70\xdc\x97\xed\xa2\x1a\x8d\xca\xfc\x93\x89\x07\xd0\xc7\xa7\x82\x3f\x38\x8c\xb7\xf7\x4a\x7e\xac\x5b\x86\xe9\x93\x72\xd7\xf2\xd5\xb7\xed\xd8\x96\xae\x02\x29\x19\x83\x93\x1f\x26\xa8\x88\x13\x88\x63\x36\x49\xe3\x45\xde\x37\x84\xbf\x65\x8a\x3a\x5f\x59\xb3\x76\x7b\x3b\x6a\xaf\xde\x1a\x8e\xff\x28\x3b\x27\x10\x16\x53\xd7\xf4\x06\x69\xc1\x9f\x56\x5a\xf0\x47\xfb\x8a\x06\xfe\x9d\xde\x95\xdf\x4e\x61\x0d\xeb\xa8\xe1\xde\xbd\x05\xef\x33\x51\x9f\x85\xb1\x98\x1e\x8b\xd2\x33\x9c\x5e\x9c\x75\x17\xf8\x89\x3a\x26\xe4\x6c\xeb\x7b\xa3\x74\x5b\xea\x44\x13\x9d\x4b\xe4\x93\x10\xae\x61\x34\x65\x5e\x41\x9f\x1a\x68\x74\x03\xd3\xda\x86\xe9\x59\x57\x1b\xb4\xe7\xf2\x35\x92\x1e\x4e\xe9\xc5\xf1\x7e\x29\xc2\x57\xb7\xe7\x13\x7d\x1d\x16\x20\x00\x8f\xe7\x62\x86\x79\x4a\x54\xcb\x72\x37\x8e\x98\x57\x13\x71\x37\x7e\xd3\x2c\x83\x6a\x14\x3c\xab\xe0\xe7\xa6\x06\xa9\xe5\x0e\xf5\xa6\xfb\x9c\x99\x30\x54\x3d\x66\x8a\x85\xae\xe8\x5b\x5b\xd4\xb0\x49\xce\xb4\x72\x1a\x2d\x77\x57\x0a\xe7\xac\x63\x5a\x29\xcc\x4c\x46\x6c\x7a\xaa\x22\xb6\x9b\x53\xa1\xc2\xf8\xf6\x21\x7c\xc5\xaa\x57\x99\x86\xf6\xdf\x5f\xd2\x65\x8e\xbe\x5c\xc2\xbf\x89\xcf\xe1\xdc\xf6\x38\xe0\x2e\xb0\xf4\x67\xae\x9e\xa3\xef\xe0\x3c\x3b\x8a\xed\x7a\x43\x87\xa0\x03\x2b\x17\x27\x43\x87\x58\x69\x1f\x1e\x9e\x4d\xc3\xe3\xaf\xa4\x97\x2e\x16\x87\xc7\x83\x3e\xd5\xda\x03\x49\xe1\x0e\x08\x4b\xd9\xfe\x42\x2a\x32\x7e\x07\xa5\x10\x18\x9f\x8f\x8b\x6f\xfb\xea\x55\x32\x74\xfd\x0a\x7a\xb1\x7a\xc6\x6e\x34\xc2\x60\xc9\xf6\xc4\xc3\x65\x43\xbe\x9a\x80\x3b\x5c\xf2\x0e\xc9\x14\xf3\xdd\x5c\x14\xfb\xe7\x37\xe3\xc7\xad\x7a\xbb\xc0\x76\x78\xeb\xe6\xd4\x20\xf8\xa2\x41\x14\x7b\xbf\xec\xc3\x56\x06\xc1\xeb\x4c\xe1\xf7\x6a\x3c\x8d\x9f\xb8\x4e\xa4\x63\xc0\xa1\x7a\xe7\x50\xd3\x06\x87\x7a\xdc\x9a\xec\x80\xa7\xd1\xb3\xba\x93\xe0\xeb\xac\x6b\xd6\x46\x82\xdb\xda\xed\x6e\x1e\x5d\xc3\xb9\x06\x1d\xe4\x93\x9b\xe9\x3d\x42\x93\x35\x79\x0d\xff\x59\xaf\x27\x31\xd0\xbe\x34\x7a\x48\xb3\x48\x2d\xe9\x57\x44\xe6\x39\x60\x92\x22\x52\xbe\x43\x8e\x47\xd0\x6c\x15\xe2\x65\x22\xe8\x26\x22\x7d\xde\x81\xd4\x5b\x44\x12\x0f\xc4\x37\xc9\x87\x20\x62\x56\xb2\xbd\xf9\x4c\x39\x52\x3e\x60\xda\xae\xa7\x1e\x38\x22\xa1\x7a\xbe\x09\xd1\xad\x51\xe5\x14\xda\xac\x25\xdb\x1f\x8d\xe0\x17\x20\x3c\xc2\x4e\xc6\xa1\x6d\x3d\x9b\x3e\xe9\x00\xff\xa3\x33\x1b\x85\x30\xd8\x88\x85\x15\xe8\x2e\x03\x7f\x71\x65\x50\x50\x92\x9a\x2d\x0b\x6f\x49\x9a\x5f\xb9\x1b\xfd\x0a\x7e\xa4\x79\x86\xcf\xc6\x5b\x0d\xd4\x82\x3f\xc5\x01\xc2\xcb\x78\x13\x6c\x7a\x64\xd5\xe9\x93\x9e\xc8\xff\x5a\xcf\x89\xb4\x9f\x03\x7e\x1c\x56\x00\xb1\x76\x5b\xc3\xf3\xcd\x98\xd1\x47\x5d\x61\x47\x6c\xcf\x45\xba\x76\xfc\xcc\xd5\x93\xb3\xe7\xed\xda\x49\x26\x67\x8f\x81\x92\x69\xbe\x5e\xc5\x43\x89\xeb\x58\xbf\x41\x8f\x1e\x9f\x9e\x5a\xdf\x29\xa7\x1f\xb9\x1f\xe1\x4d\x09\x60\x89\xf5\x65\x44\x3f\x8a\xc0\xc8\xca\x1c\x89\x38\x69\x05\x00\x5b\x75\x15\x81\x87\xc1\xbe\xc2\x4e\x4a\x13\xc5\x09\xd6\xd4\x36\x28\x5d\x38\x10\xa6\x92\x12\x8f\x38\x08\xbc\xa8\xe2\xb2\xb8\x06\x66\xb6\xc5\xb8\xee\xed\x08\x6b\xd5\x8b\x77\x5f\xb2\xf3\xbc\x48\xf8\xbd\xc6\x2f\xaa\xec\xae\xec\xaa\x5c\x88\x09\xff\x5f\xff\x2f\xee\xda\xdd\x61\x2f\x1c\x3c\xca\xc1\x02\x89\xe6\xd7\xd1\xab\xa7\x37\x06\x9a\xdf\x2f\x65\xda\x68\xae\x46\xe8\xb4\xee\x2e\xad\xa0\xbb\x4a\xf8\x06\xbc\xd5\x78\xdd\x9a\x97\x08\x74\x74\xba\xa6\x8f\x3f\xc4\xbf\x48\x81\xa3\x9c\x37\x7b\xc1\x86\x80\x01\x1a\xee\xb8\x51\x94\x30\x27\x23\x68\x2f\x32\x88\x76\x4b\x67\xff\xee\x6c\x77\x99\x3b\x11\x7d\xfc\xa4\xd1\xe3\xa5\xd1\xf0\xdc\xb4\x14\x87\x9c\x44\x99\xa8\xca\xab\x5a\x28\x02\xd8\xf8\xae\xed\x65\xce\xc6\x1c\x3e\x86\x67\xd6\x89\xc7\xa6\x1d\x61\xfe\x03\x67\x4a\x4e\x28\x3b\xd5\xc4\xb5\xb3\x07\xb8\x94\xe9\x56\xaf\xf0\x82\xea\x89\xd9\x38\x08\xd9\x35\x81\x97\xd4\x99\xac\xa8\xf2\x49\x4c\xef\x2c\x19\xc1\x45\x36\x99\xe1\x44\x3d\x8a\x39\xc7\x9c\x72\xa3\x13\x99\x92\x03\x13\xd7\xce\x56\x30\x9e\x80\x3f\xc8\x81\x2b\x66\x89\xc3\x9f\x80\x04\x1b\x76\xd2\x85\x34\x1b\x91\x0c\x13\x24\x7e\xac\x0b\x61\xcb\x3a\x08\x1c\x8f\xa0\x1b\x98\x7e\xc7\xf6\x22\x08\x3e\x92\xe5\x25\x22\xbb\xce\x60\xe4\x1b\x03\x5f\xb7\xe2\xe2\x9c\xcc\x63\x71\x85\xe4\xbf\xca\x89\x38\xc4\x38\xce\xcb\xef\x09\x83\x2f\x97\x90\x77\x2c\x87\x6e\xcc\xa0\xf5\x41\x45\xbf\xb4\x04\xcb\x8e\x48\x94\x34\x1a\x41\x18\x93\x60\xd9\x67\x61\xb4\xe8\x36\x64\xa3\x96\x3a\x5f\x31\x27\xed\xb3\x07\x0e\xb9\x7e\x72\x12\x72\x93\xe6\x19\x14\x7b\x38\x85\x46\xc5\xeb\xd3\x53\x2b\xe8\xe5\xa3\xf8\x4f\x4a\x78\x53\x2d\x9a\xe3\xd2\xf0\x87\x4a\xf4\x6d\xa5\x83\xae\xc7\x54\x2a\x92\xcc\xea\x04\x49\x13\xde\x11\x26\xfc\x66\x90\x90\x65\xdb\x87\x38\xd0\xba\x08\x9d\x9e\x73\x1b\xfb\xc9\x01\x3f\x82\x1c\x06\x95\x82\x53\xcb\x0d\xe5\xea\x19\xa7\x71\x5d\x8b\x41\x14\xab\x28\x2c\x7f\x41\x06\x5d\x57\xc8\x01\x51\xa6\x28\xda\x4f\x28\x3b\x19\x5f\x44\xcb\x84\x9e\xac\x45\xfc\x1f\x3f\xae\x45\xb4\x42\xa6\xeb\xc2\xda\xec\x49\xa1\x29\xd4\xe1\x5f\xe2\x05\xe2\xd6\x48\xe2\x1b\xd6\xe7\x3e\x03\x00\xa3\x38\x08\xed\x05\xb6\x43\x82\xfa\x3c\x7b\x39\x62\x02\xfb\xe6\x39\xf6\xf1\xdb\x2c\x67\xc3\xd8\xd2\xb0\xc3\x58\xe8\x5e\xa7\x74\xf5\xd8\x9b\x4a\x1c\x4f\xf4\x1d\x85\x1f\x5d\xc0\x39\x5d\x23\x41\xdd\x8d\x63\x45\x03\x54\x8f\x34\x37\xd2\x0f\x71\x00\xca\x51\x38\x01\x34\x41\x76\x30\x08\xd5\x2d\x2e\xbe\xed\x88\x1c\x7b\x57\x19\x3e\x23\x93\x28\x44\x20\xb8\x9e\x93\x1d\x11\xba\x8b\x56\xc8\xac\x5b\x77\x3d\x3b\x54\x01\xf0\x72\x88\xf4\x39\x4e\x21\xd5\x80\x7c\x2a\x74\x27\x25\xdb\x45\x38\x3c\xa0\xb0\x07\x59\x3d\x30\x76\xc8\xb7\x34\x6e\x12\x56\x6f\xc4\xcd\xb1\xac\xb1\xff\x1b\x08\x8f\x72\xd4\xe6\xd2\x8d\xf5\x05\x44\xff\x54\x9a\x0b\x9b\x84\xc6\x61\xc2\x28\x18\xe0\x03\x7e\x4c\x45\xa1\xa5\x58\x8a\x40\xe2\x8d\x74\x6c\xd7\x27\xe2\xfc\x1f\xe6\xf0\x00\xc8\x88\x01\x3a\xc2\x8f\x82\x6d\x9f\x6e\x10\x42\x18\x0e\x83\xf7\x21\xac\x4f\x9a\xf5\x16\x44\x6f\x47\xc7\x45\x4a\xcf\xf4\x94\x3a\x54\x8d\x94\x3e\x39\x05\xf4\x89\x6c\x9f\xa8\xdb\x37\x06\xbe\x71\xe6\xc7\x36\x1c\x91\xef\x1b\xce\x64\x5e\x6a\xea\x5b\x03\x1a\xdf\xb4\xde\x39\x4c\x77\xa9\x1f\x42\x09\x02\x41\x0c\x54\x4c\x75\x59\x1a\xed\xc1\x2e\x9a\x78\x2c\xaa\xac\xa0\x7f\x1f\xc2\x4b\xf8\x2c\x3f\x70\x98\x1e\xa9\x86\xc7\xbb\x3a\x27\x8e\x18\x2f\xd0\x8b\x53\x23\x2c\x1f\xa8\xfd\xf7\xcc\x72\xae\x15\xbe\x11\x5b\x1b\x81\xa3\xbf\xfb\x26\x84\xcb\xbd\xa4\x51\xe8\xef\xc6\xe9\x77\xa1\xe3\x5b\xdb\xcf\x8a\x78\xfc\x6a\x30\xee\x05\x55\xd1\x88\xd2\x8d\xcc\xa2\x43\xc0\x15\xf8\xd4\xcb\xc0\x17\xca\x84\xc5\xd5\x0a\x94\x32\x0a\xea\xaa\x09\x4e\x23\x70\xb6\x47\x63\x63\x15\xfc\x29\x84\xcf\xe5\xd3\xf6\x63\x57\x4f\xfd\x3d\x3d\x66\x80\x98\x2f\xd1\x67\xe7\xa6\xef\xc7\xee\x78\xb7\x35\xd8\x4b\x81\xeb\x90\x46\x22\x73\x1b\xd7\xb2\x8e\x97\x96\xf0\xaf\x17\x21\x54\x1c\x43\x34\xac\x38\xc2\xd6\x37\x11\xbd\x28\x7b\xc9\x70\xd7\xd8\x8a\x16\xd9\xf2\x09\xc1\x8c\xf9\x0c\x74\x15\x24\xec\xb0\x25\xb7\xca\x66\xec\x78\x71\x05\xdd\x8e\x30\xc3\xc6\x15\xeb\x5a\x7a\xd5\x94\xfe\x95\x77\xc7\x89\xe7\x48\x83\xdf\x5a\xe6\x12\x94\x49\xfe\xd2\xd4\x53\x1d\x77\x6e\x1e\x97\x9d\xb2\xd0\xd1\x76\xfa\xcb\x47\x8c\xe2\x46\x7a\xa2\x62\x14\xf3\x8d\x57\x6e\xce\xb8\xb1\x34\x3c\x6e\x4c\x42\xc6\xa5\x94\x8c\x4c\xf3\xcd\x4d\x74\x4e\xdf\x31\xe7\x6d\xfb\x04\xae\x93\x29\x3b\xb6\x85\x74\x23\xd8\x42\xe0\xa7\x7c\x95\xd3\xcf\x79\xd7\x77\xe4\xad\x34\xab\x91\x4b\x01\x9c\xe2\x1c\x11\x05\xa4\xf8\x9f\xc7\x8f\x4d\xaf\xa0\x9f\x8e\xe0\xab\xf1\xd6\x2a\xe8\xe6\x0b\x87\x03\x87\x59\x97\xd1\x1d\x57\xf2\xa1\x26\xc5\x35\xae\x22\xb2\xfd\xe4\x08\xec\x3a\x27\xc9\xa0\xa3\xca\x3f\xaf\xe5\xa2\x4a\x46\xfa\x3c\x88\xf5\x67\xac\xfd\x74\x9c\xb3\x42\x13\x4a\xe0\xe3\x02\xca\x27\x11\x6b\xde\x0b\xe6\x89\xa4\x58\xe6\x38\x13\x58\xcd\xd1\xda\x43\xc7\xf8\x30\xc7\x8f\x4d\xf7\x37\xc4\xc7\x90\x96\x73\xfe\x08\xd1\xb7\xa0\xbc\x9c\x93\x32\xdf\xc3\x32\xc9\xda\x6e\x11\x60\x7a\x97\x5e\x2a\xeb\x25\xb7\x98\x4b\xf8\x3b\x24\xad\x50\x5f\x40\xf4\xb3\xe8\xc0\xc9\x06\xf4\xd1\x54\x41\x36\xb3\x8b\x76\xc8\x9c\xfd\xaa\xfb\xac\x84\x04\x07\x4d\xc4\x19\x8d\x82\x09\xb1\xab\xa2\x1d\x2c\x99\x62\xa2\x10\x9b\xb3\x5f\x45\x88\xeb\x37\x8a\x5f\x38\x2c\xba\x00\xee\x27\x36\x60\x9e\x6a\x0a\x98\x6e\x81\xe8\xed\xe5\xfa\xfa\x96\x3c\x32\x2e\x34\x36\x8e\x58\x3c\x56\xc9\xf4\x3a\x8d\x60\xca\xe6\x12\x4f\x1a\xa2\x81\x47\x9f\xde\xe2\x93\x27\xdb\x53\xa1\x78\xac\x92\x0a\x05\x70\x6a\x41\x3d\x12\x92\x43\x46\x62\x88\x64\x8a\x76\x4e\x60\xc8\xfa\xf7\x3f\x3c\x8c\x77\xb7\x3b\x96\x1c\x57\x52\x5d\x22\x73\x40\x6f\x1a\xa6\xd7\xea\x67\x0a\x0f\x28\xdc\x98\x15\x1d\x56\xfa\x3c\xa3\x38\x62\xd5\x90\xc5\xe2\x94\x6e\x01\x68\x1d\x81\x7e\x7a\x2f\x1b\x7a\x10\x21\xf5\x74\x6c\xcc\xcb\x9a\xa1\x93\xb1\x51\xd9\x4d\xdc\x11\x82\xad\x2e\x1a\x27\x00\x31\x2b\xf1\x69\x42\xe2\xd3\x11\x55\x4b\xf3\x6a\xd6\x34\x71\xe0\x16\x84\xcf\x4d\x3f\x10\x35\xec\x2a\xb3\x4e\xd2\x13\xea\x2b\x70\x41\x51\x90\x55\x7e\x2e\x23\x50\x2b\x86\x26\xb5\xb4\x99\x20\x83\x91\xe7\xe3\x14\xf0\xd6\x23\x28\x86\x63\x06\x83\x99\x4f\xfd\xfe\x50\x7b\xa2\xce\x11\x20\x83\x33\x3f\x29\x3d\x18\x38\xf3\x9c\xd2\xcf\x31\xce\xf4\xb6\x4b\xf7\x6e\xc1\x8f\x2c\xd8\xa5\x2b\x5c\xdf\x71\xfd\x05\xeb\x8e\x2d\xf4\x4e\x24\x7f\x90\xd8\x65\x91\x28\x85\x24\x4c\xf6\x69\xb5\xa7\x4b\x49\xa6\x90\xae\x2d\x24\xa3\x88\xcc\x07\x89\x6f\x48\x26\x9c\x47\xd8\x3a\x7e\x25\xac\x90\x29\xbe\xd1\x40\x70\x39\xac\x76\x55\xf6\x96\x49\xc3\x83\x56\xdd\x22\xb1\x9f\xc1\x9e\xba\xfe\x02\x57\x93\xe7\xb5\x2e\xa0\x1b\x8a\xfa\x90\x41\x5e\x31\x4a\x8c\xbe\x7e\x10\x6b\x30\x88\x35\x18\xa4\xf1\xb4\x0f\x60\x32\x8b\xe7\xf6\x1d\x09\x47\x2f\x9f\x4b\x4b\xe4\x2a\x2a\x90\x37\xd8\x00\x19\x4e\x2b\xfe\x98\x0b\xac\x9c\x46\x47\xbb\x3b\xb0\xca\xd6\x05\xda\x81\x45\xa9\xf6\x57\x49\x32\x94\xaf\x8b\xf4\xdf\xe7\xe2\x72\xc1\xcc\x27\x67\xa7\xdb\xc8\x27\xf7\x9d\x4b\x8f\x19\x36\x51\x25\xd3\xa9\x8e\x75\x46\x63\x67\xdb\x27\xba\xd5\xdd\xe4\xec\xb4\xd2\x7f\x9c\xd0\x5d\x62\x21\xd9\x7e\x05\x8b\x6d\x95\x4f\x3d\x76\x0a\x6d\x12\xd7\x4f\xa1\xb3\xc4\x73\x57\xda\xbe\xe3\xb1\x15\xf4\xf5\x73\xf0\x3b\x86\xf0\x23\x53\xa3\xf5\x4c\x32\xef\xb9\xd1\xe2\x2c\xd0\xf8\x63\xac\x66\xbd\x6c\xa8\x87\xad\xd0\x8f\xcb\xad\xf8\x52\x69\xb2\xed\x88\xe2\x00\x87\xea\x59\xbd\x1b\x82\xab\xc8\x8d\x93\x7c\x45\x74\xbb\xf3\x75\xf5\xa4\xd4\x63\x10\x07\xd0\xa2\x57\xbd\xcd\x21\x20\x97\x0e\x1d\x9f\x65\x9d\x00\x75\xab\x65\x36\x52\x67\xe5\x54\x2e\xbd\x77\xdc\x6f\x64\xee\x56\x6d\xcf\x6b\xc9\x77\x57\x4d\x94\x53\x12\x39\xcf\x84\xdd\x8c\xeb\x02\x7e\xa0\x16\xe2\xa6\x2d\xdf\x65\x5a\x7e\x9b\x35\x46\xa2\x5f\x30\x54\xf6\x80\x72\x85\xf0\x50\x19\xea\x1c\x89\xbf\x85\x47\x50\x74\x24\xae\xe0\x27\x63\xb9\x99\xd6\x51\x7a\xc5\x94\x58\x73\x41\xbd\xde\x14\x1a\x9c\x5d\xe9\xa6\xf3\x62\xfb\x2b\xe0\xa2\x84\xb9\x65\xda\x41\xa6\x4a\xd7\xf3\x11\x5d\x7a\x70\x74\x2e\x73\x42\xb7\x0d\xe1\x5f\xe2\xcc\xb9\x05\x2b\xff\xb3\xb4\x0a\xac\xfc\x4c\xe9\x48\xc1\x58\x0f\x06\x3e\x1a\xf3\x30\x30\x91\x5f\x7d\x68\xe0\xe0\x9d\x43\xd8\xe2\xfb\x32\x1b\xdb\x0b\x2c\xdd\x95\x17\xaf\x86\x56\x7c\x1e\x76\x25\x3b\xd2\x83\xb5\x27\x30\x8b\xdc\x8e\x14\x5d\x3b\xee\x47\xc6\xd5\x33\x73\x8f\x72\xda\x83\xca\x8b\xd8\x9f\xf6\x00\x30\x01\xd4\x86\x42\x4a\x6f\x5f\xa5\x35\xdc\x3e\xab\x7c\x64\xb4\x87\xe3\xf8\x61\x82\xcc\x4c\xc4\x82\xfb\xb3\xc8\x9a\xa0\xe7\xa7\xbf\xf2\x5e\xaa\x80\x48\xa4\xaf\xdc\xdd\x21\x88\xe0\xbd\x08\x67\xb8\x97\x75\x27\xa2\xb7\xa2\x6b\x8c\x2b\x8a\x0e\xca\x62\x5c\x86\xbf\x85\x84\x2c\x4e\x42\x3f\x25\x4b\x06\xcb\x6c\x78\xc9\x82\xeb\xff\xc3\x73\x6e\x8f\xc8\x24\x84\x72\x5c\xa3\xa7\x05\x18\xa8\xf0\x47\x3e\x1e\xf8\x02\xe4\x69\x22\x83\xdc\xff\x42\x92\xfa\x37\x08\x3f\xaa\x48\x02\xb0\x1b\xc2\xce\xe2\xb2\xc8\x7a\x2f\xa2\x97\x4d\x38\x4e\x24\x53\x96\xea\xc1\x12\x8b\xc8\xcc\xd1\xd9\xe9\xeb\x48\xd5\x78\x4e\x48\xa6\x2a\x7d\x40\xbb\x36\xa3\xca\x0a\xba\x01\x5f\x8c\x87\x6c\xc7\xb1\x2a\xd4\x9a\x70\x1c\xe6\x64\x5e\xec\xe0\x93\xbf\x04\x0f\x3b\x61\xd0\xb0\x76\xd2\x5f\x3a\x06\x1f\xee\xf9\xcd\x8f\x61\x5c\x74\xba\x27\x59\x63\xf1\xe0\x6c\x1b\xe9\xe6\x25\x98\xbe\x14\x65\x5c\xbe\xfc\x71\x62\xf0\x19\xa9\x21\x73\x71\xc7\xb3\xa3\xc2\x62\x41\x5c\x7d\xe3\xaf\xd5\x22\xed\x58\x75\x44\x45\xb5\x8e\xfe\xd5\x20\x6c\xe3\x5e\xad\x07\xbe\xcb\xe5\xd3\x15\xf4\xcf\xa3\xf8\x8f\xb8\x10\x2d\x2f\x58\x6f\x45\xf4\x16\xa4\x76\x75\x3f\x39\x2c\xaf\x17\x25\x0b\xc3\x3a\xd4\x8b\x45\xe2\x71\xc8\x40\x77\x54\x81\x4e\x3b\xae\x3c\x30\x31\xb5\x43\x2a\xa5\x91\xf2\xf6\xec\xa8\xc2\xba\x76\x1c\x3b\x30\x31\x75\xf8\x00\x17\x8d\x17\x83\xe5\xf1\x38\x18\x4f\x22\x36\xee\xc6\x1d\x76\x83\xe1\xe1\x86\x1d\x2f\x5a\x4f\xa3\x33\xe9\x41\x3f\x1e\x09\xc7\x34\x87\xa1\xf2\x53\x87\x41\x10\x97\x49\x68\xcb\xa6\x8a\xb6\x30\x53\xd4\x12\xcf\x13\x6b\x88\x43\xc6\xca\xa6\xbd\x65\x87\xf9\x99\xaf\x9a\xbe\xc0\xcf\x21\xfa\x31\x94\x7e\x6d\x63\xcd\x13\x1b\x07\x53\x83\x70\xfd\x39\x52\x76\x0f\x8e\x92\xd6\x47\x11\x7d\x97\xb1\xc0\x59\x7d\x47\xd1\x19\x70\x41\xc4\x01\x44\xdf\x80\x3e\xca\xc5\xac\xe3\x11\x0b\xb3\x10\x64\x71\x15\x66\xb1\x03\xe2\x58\x24\x71\xdf\xb0\xf5\xa4\xbb\xf5\x23\x84\xb7\x44\x9a\x39\xff\x53\x2f\xce\xa8\x3c\x73\x7e\x4f\xcb\xfa\x25\x77\x6e\xe1\xcd\x76\x12\x2f\x72\x9d\x4e\x26\x91\xc8\x55\x16\x02\x04\xb8\xe0\x86\xed\x28\xbe\x0b\xe1\x61\x0e\x69\xeb\xf5\x88\xfe\x0e\xca\x1c\x07\x2d\x29\x87\xb6\x13\x44\xa2\x24\x24\x67\x0f\x99\xe9\xd9\x4e\xdd\xf5\x1f\x88\xfd\xf9\x30\xc6\x8f\x6e\x4b\x42\x33\x84\xf3\x15\x67\x36\xe1\xfc\xb7\x01\xe1\x1c\x10\xce\x9f\x23\xc2\xf9\xb3\x0c\xe1\xfc\x2e\xc2\x17\x77\x25\x9c\x87\x82\xaa\xed\xe5\x2d\x52\x03\xea\xb9\x81\x9b\xb4\x32\x5a\x2c\x80\xba\xbe\xc3\xc2\x36\x02\xe8\xab\x46\xe9\x77\xb3\x74\xb4\x0a\x8f\x2b\xd9\xde\x8c\xe8\x39\xda\x60\x5c\xcb\xab\x9e\xa8\x90\x09\x32\x99\x79\xac\xcf\xb0\x43\xf3\xad\xa2\xc0\xc3\x90\x2d\xc8\xb8\xae\x4c\xd8\x61\xe6\x9b\xeb\x10\x3d\x78\xfb\x26\xfc\x8a\x34\x7a\xf0\x05\x25\xfa\xd3\x0d\xf6\xaa\x3f\x00\x31\x81\x9d\x91\xaa\xde\x8c\x6e\xf0\xc6\xc5\x16\x8f\x37\x9c\x14\xab\x4c\x3c\xfa\x9c\x49\x9a\x3f\x81\xe8\x1f\x9e\xc1\xa4\xb9\xc3\x82\x0c\x6a\x7c\x7b\x86\x7c\xdd\xb2\x1a\xb9\xef\xda\x14\x06\xe0\x03\x11\xed\x53\xda\x1b\x60\x1a\x76\x68\xd7\x19\x24\xbb\x27\x91\xd8\xc7\x6a\xe0\xfb\xd2\x13\xc7\x8f\xd2\x2c\x1c\x25\xfc\x4a\x33\xcc\xee\xb7\x11\xbd\x51\x1e\x0e\xd7\xd1\x2f\xca\xa6\x8e\x4d\x53\xe9\x76\x7d\x75\x52\x37\x06\x09\x3e\x35\x5a\x2c\x8a\xc1\x5b\x19\x12\xf2\xda\x5f\x64\x12\xf2\x86\x01\x09\xf9\xc5\x20\x21\x6f\xc8\x90\x90\x97\xaf\x5a\x02\xfa\x45\xa3\x23\xf7\x17\x47\x4f\x4e\x82\xf7\x78\x7a\x66\x12\xaa\x7d\x5a\xf7\x96\xe8\x93\xb2\x97\x3a\x96\x05\x05\x7b\xa9\x78\x9e\x4c\xcf\x90\x79\x9b\x2f\x30\x62\x11\x84\x0c\xa8\xd0\xd0\xca\x0a\xfa\x16\xc2\xf7\x23\x7c\x0e\xd7\xf8\x82\x24\x56\xc5\x71\xfe\x4a\xd7\x93\xf9\x08\xca\xde\xca\x75\x17\x55\x45\x72\xf4\xc7\xa6\x67\xe4\x71\x95\x9f\x8a\x62\xb7\x7a\xa2\x69\x14\xd1\xcf\x76\x39\x79\xfc\x4e\xf2\x98\xc7\x90\xcb\x1e\x77\xc9\x9e\x8b\x76\xee\x84\xee\xc5\xbb\x88\x63\x37\xc7\xf8\x21\x94\xc1\x31\x3a\x12\xf9\x71\x8f\x23\x54\x7d\x84\x6a\xeb\xb2\x1c\xd0\x8d\xc8\xae\x9d\x97\xc8\x31\x2e\x24\x8b\x41\x12\x46\xb9\xa0\xf4\xdb\x86\x8b\xe9\x75\x50\x6f\x04\x3e\xf3\x8d\xbc\xea\xef\x0e\xd1\x1d\xc5\xa9\x46\x69\xcb\x30\x51\xd2\x45\xbd\x5b\xd0\x33\xed\xae\x21\x5c\xc5\x23\x2c\x0c\x83\xd0\x7a\x0a\x3d\x9c\xf6\x5f\x83\x4b\xa4\x1a\x38\xb2\x54\x90\x31\x0a\xc4\xf5\x1b\x61\x27\x8b\xcc\xf6\xe2\x45\xd1\x12\xcd\x78\x2f\x63\x2d\x8e\xd2\xc4\xeb\x45\xfa\xd4\xc3\x32\xd3\xba\x68\xca\x9d\xbf\xd6\x9a\xa9\x96\xfd\x7e\xe6\xa3\x37\xea\xec\xfd\x06\xad\xb6\x69\x33\xd6\xfa\xbd\x4c\xc5\x30\x7e\x97\x5e\x09\x1f\x68\xd2\xfd\x84\xce\x85\x09\xe3\x64\x1a\xda\x91\xd1\x32\xe1\xb7\x65\x4f\xb2\xac\x83\xef\x88\xcc\xec\x3e\x48\xf7\xa9\xa6\x64\xbd\x7d\x73\x7f\xfa\x3d\x73\xbc\x4f\x6c\xc1\xb4\x13\x5e\xc8\x04\xaf\xd7\x6e\xa1\x87\x72\xd7\xc8\x76\xe1\x0c\xce\x5c\x3c\xe4\x46\xf1\x18\x59\x0c\x3c\xd9\x5b\xa2\xea\x25\x51\xcc\x19\x2a\x9f\x88\x6a\x29\x54\x0b\x2a\x2b\xe8\x07\x83\xd8\x9e\x7e\x63\x7b\xee\xcb\xe6\xba\xdd\x8b\xe8\xa3\x0f\xc9\xca\x49\x7a\xcf\x53\x6c\x88\x64\xf9\x70\xe6\x98\xd6\x9c\xbd\xf8\x62\x7c\x61\x57\xd6\xd4\x4a\x16\x36\xa4\x88\xf7\x20\x58\xe9\x17\x28\x58\xa9\xef\x2a\xb6\x46\xb4\x50\x8e\xca\xe4\xa3\x86\x7e\x34\x9a\xa9\x5d\xd6\x86\x88\x41\x2d\x8a\xcf\x8e\xd2\xb9\x94\x64\xdb\x9e\x97\x25\xdb\x91\xd1\x73\x52\x9d\x28\x9b\xa3\xa4\x2e\xbe\x9a\x23\x82\xb2\xc1\x89\x51\xf2\xf6\x45\x03\xc2\xd6\x2f\x61\xf3\x54\x85\x8b\x2a\x25\x87\xba\x00\xba\xff\x02\x70\x79\xe4\x19\x50\x9d\x9e\xa9\xce\x47\x4d\xaa\xf3\xee\x35\x96\xbd\xbd\xe1\x81\x29\x7b\x6b\x2c\xa5\xef\xca\xb7\xed\x49\x4e\x51\x13\xc7\x8f\x9e\x8d\x7f\xa5\x10\xdf\xb8\x2a\x72\xd8\x6e\x58\xaf\x3b\x9b\xee\xd5\xbf\xa4\x54\x94\xed\x5f\x00\xb9\x25\xd0\x54\x0d\x3a\x38\x81\xf2\x16\x25\x75\x56\x59\x41\xb7\x9c\x35\xa0\x23\x7d\xd2\x91\xd7\x0c\x61\x3c\xef\xfa\x76\xd8\x9c\xe2\x08\xfb\xa2\x21\x7a\x7f\xe9\x0a\xfd\x3b\xdb\xe4\x5f\x3c\x47\x04\x06\x1e\xb0\xab\x8b\xe0\x5b\x01\xd5\x8c\xef\x81\xa4\x42\xd0\xac\xc7\x4f\xea\x2c\x74\xab\xa4\xba\x68\x87\x76\x95\xeb\xda\x65\xb2\x6d\x7c\x5b\x99\x6c\xbb\x7e\x1b\x97\xd4\xb7\x55\xb6\x55\x88\xf9\x1d\xdb\x57\xdf\x22\xf3\xcd\x98\xeb\x83\x37\x24\x5c\xbb\x97\x1d\x7d\xec\x90\x81\x17\x51\xda\xa3\x8e\xcf\x1d\x1c\xbf\x84\x84\xb6\xbf\x20\xb5\xc4\x13\xac\x29\x22\x59\x45\x24\xbd\x31\x32\x4c\x8f\xbf\x1a\x2c\xb1\xd0\xb3\x1b\x46\xe7\x3a\x8e\x08\x72\x40\x78\x14\xe2\xaa\xca\x02\x07\xdc\x88\x30\x1f\x8c\x24\x0e\x71\x12\x45\xe5\x94\x40\xde\x08\x83\x2a\x8b\xa2\x0a\x39\x1e\xe9\x64\x48\x11\x95\x05\xc6\x15\x19\x6c\x45\x76\x55\x76\xed\x7c\x2c\xe1\x47\x1b\x90\x06\xf6\x5c\xd9\xcd\xee\x46\xff\x13\xff\x0f\x51\xed\xa1\x4d\x2c\xd2\xe7\x4a\x78\x18\xa8\xc8\xa7\x4b\xf4\xad\xa5\xd6\xed\x68\x3d\x16\xeb\xb2\x2b\xd7\x08\x75\x0b\xc0\xe4\x07\xfe\xb8\x80\x75\x6e\x53\x60\x78\x95\xa3\x60\x40\x1b\x80\x50\xb8\x25\x5d\x36\x03\x9e\x96\x9b\x91\x1f\xaf\xaf\x2d\xe9\x14\xdd\x35\x60\x63\xbf\x50\xc2\xf3\x93\xba\x73\xb2\x8a\x55\x2e\xe6\x64\x92\x03\xe5\xf9\xd7\x27\x87\xda\xd8\x84\xe4\xf3\x07\xfc\x25\x69\xc3\xbf\x7d\x88\x7e\x02\xb5\x5e\x97\x1d\x3e\x21\xbc\x42\xb3\xb9\x38\x20\x8d\xa0\x91\x78\xb6\x0c\x15\x65\xfe\x92\x1b\x06\x3e\x98\xcc\x97\xec\xd0\xb5\xe7\x3d\x79\x22\x2b\x18\xcf\xc9\x02\x30\x60\xc7\x93\x36\x14\x99\x91\xa0\x47\xdc\x16\x19\x14\x4d\xd1\x24\x89\xab\xea\xb8\x8d\x0b\x74\x6f\xd8\x6e\x18\x71\x81\xbd\xf0\xa3\x95\x15\xf4\x17\x08\xdf\x84\x64\x4a\xf3\x6f\xd2\xc0\x4c\xd6\x95\x2e\xe6\x78\x9d\x3b\x1f\x42\x4a\xdf\x8e\xf3\xe0\x1f\x13\x27\x9f\x88\x47\x55\xc4\xab\x75\x29\x1d\x57\x25\x22\x96\x17\x99\x0c\x98\x60\x06\x4c\x95\xc5\x50\x70\xfc\xac\xe5\xf9\x2b\x25\xbc\xad\xd3\x2e\x5e\xcd\x9a\xba\xc1\xed\xbb\x4a\xf4\x51\xb3\x7a\xcf\x38\x69\x95\x15\x80\xf5\xd3\x95\x53\x68\xe8\x04\x6b\xae\xa0\x9b\x4a\xf8\x31\x98\xff\x69\x3d\x8a\x5a\x92\x04\x42\x4e\x2b\xbc\x9e\xb1\x49\x9d\x21\x10\x9d\x35\x20\xfa\x44\xba\xaf\x33\x44\x83\x90\xb8\xfc\xe0\x6a\xf6\xd2\x06\xba\xef\x1f\xcd\xb4\xab\x6a\x81\x2e\x28\x95\xaf\x18\xa5\x93\x99\x2b\x2a\x1c\x5b\x92\x59\xc3\x5e\x6f\x6a\x92\x7a\x2e\x2d\x3a\xe4\xb7\x06\x55\x12\xfb\x95\xfd\x6a\x4a\x87\x7c\x1a\x25\xd3\x85\x6d\x53\x14\xbc\xb3\x3a\x64\x05\x97\xf1\x05\x3d\xe8\x90\x8a\x86\x0e\xd8\x6e\xcf\x6c\xf7\x8d\x26\xdb\xbd\x6d\x8d\xda\xe3\x35\x1b\xc5\x58\x8f\x77\x67\xac\xbb\xad\x9d\x1d\x19\x6b\x91\x72\xf8\xe1\xcd\xc5\x99\x6c\xea\x9d\x23\x81\xc3\xc4\x0f\xc9\x63\x5f\xbc\x99\x7a\x6d\xef\x66\x85\xe5\x5c\xce\x46\x1a\x1c\x65\xf2\x61\x5b\xc4\x0e\x82\xb3\x4c\xe2\x9d\xb2\x6d\xf1\xd1\x2b\xa7\xd0\x16\x9d\x6e\xae\xab\x8c\x3c\x4c\x4a\xf4\x62\x98\xab\x39\x23\xf8\xb7\x11\xfc\x21\x84\x5b\x6e\x58\x6f\x42\xf4\x55\xe8\xea\xdc\x55\xe2\xb0\xaa\x67\x87\x4c\xb5\x04\xe4\xe4\x35\xcb\x0d\xb8\xc0\x9b\x4e\x12\x5a\x79\x47\x0d\x70\xa3\x49\x32\x93\x19\x52\x29\x04\x51\x1c\x26\xd5\x38\x09\x59\x2e\x69\x44\x65\x82\x70\x69\xdb\xf6\x3c\x52\x05\x77\xa4\x89\x84\x0d\xc9\x9b\x16\xe9\x53\x81\x37\x49\xaa\xa0\x05\x36\xbf\x95\x61\x65\xa6\x98\x4f\x53\xe9\xfe\xc5\xdf\xc2\x29\x60\xad\x90\x32\x9d\xe5\x5f\xf8\xed\x4c\xba\xff\xfa\x4c\xe0\x3d\x08\x9f\xab\x68\x8d\xe2\x1f\x10\x9c\x76\x2c\x7b\xb1\x65\x3e\xf9\xfb\x7d\xcc\x4a\xf4\xad\x71\x18\x54\x00\x03\xfc\xe2\xfc\xb7\x2c\x33\x34\xd2\x19\x8b\x5b\xa2\xc7\xb7\x39\xe7\x97\x20\x51\x39\xf2\x26\x44\x97\xa1\x74\x64\x6e\x6a\xc7\xd3\xaa\x52\x0f\xc4\x74\xee\xdc\xd2\xc6\xa2\x2c\xbf\x37\x13\x06\xcf\x14\x31\xb9\xd6\x4f\x46\xe9\xfd\xa5\x09\xc7\x6e\xe4\xe4\x60\xd7\x07\xcf\x7d\x43\x3c\xa9\x4b\xe5\xac\x5e\xe8\x9d\x67\x24\xd3\xba\xb3\x75\x6c\xe8\xa2\xe2\x72\xf1\x3a\x89\x14\xe7\x31\x75\x51\x63\x44\x19\xf8\xc2\x9f\x16\x55\x27\xca\x24\xf1\x65\xc7\x74\x46\x44\xdf\x31\xe6\x89\x40\x17\x28\x8e\x24\x24\x7a\xd9\x2b\x5f\xfa\xc1\xab\xa4\x6e\x43\x53\x22\x58\x06\x7c\x09\x32\xa4\xe2\xc5\xa8\x42\x8e\x04\xb1\xae\x95\x27\x14\x5e\x11\x5f\x50\xb5\x3d\x1d\xb1\x53\x73\x17\xea\x76\x43\x97\x22\x12\x54\x8a\x7f\x41\xf9\x6f\x55\x9c\x64\x9d\xef\xd3\x0a\x7a\xf1\x26\x7c\xf7\xb0\x62\xf4\x77\x0c\xd3\x7f\x18\x9a\xce\xc4\xab\x94\x09\x93\x36\x03\x43\x21\x28\x58\x7d\x27\x92\x94\xc2\x5a\x01\x17\x76\xd2\x88\x89\x00\xca\x0a\x90\x5b\x5e\x0c\x22\x99\x2f\xe5\xa6\x75\x45\xa1\xe8\xac\xd8\x5f\x75\x19\x66\x03\xe9\x6a\xc6\x5c\x95\x74\xc2\x1c\x01\xbb\x0e\x5f\xd6\x6f\x09\xe8\x0a\x44\x4e\xfc\x96\xb7\x25\xd7\x97\x78\x02\x1f\x14\x72\xbe\x1b\x19\x63\x08\xda\x2c\xfb\xcb\x2a\x4d\x4a\x42\x49\x03\x22\x53\x24\x2f\x62\x71\x22\x41\x23\x3c\xf1\x12\x59\x5c\x99\x65\x1d\x9e\x60\x8e\xce\xe0\xab\x90\x19\x3e\x49\x2d\x57\x87\xcc\xb3\x21\xd7\x50\x89\x8a\xfc\xb3\xca\x40\xc6\x3f\xb2\xad\x52\xd9\x26\x42\x9c\x55\xbb\x21\x81\x66\xfc\xfa\x2a\x84\xb5\xab\x59\x73\x2e\xe0\x53\x38\x53\x34\x93\x39\x43\x33\xb9\x92\xee\xef\x59\x33\x89\x3a\xaa\x26\x5f\xdc\x5a\x58\x93\x45\x8f\x94\x89\xc2\x7b\xdb\x56\xfa\xa9\x0e\x54\x6a\xfd\x69\xd3\x19\x48\x91\xd2\x55\xaf\x25\xbe\x6f\x05\xfd\xed\x28\xfe\xab\x12\xde\x2a\x69\x13\x94\x11\xfb\x84\x2e\x88\xf9\xf6\x52\x1a\xc1\x55\x87\x32\x29\xae\x08\xe2\x4a\x22\xa6\x4b\x58\x43\x1f\x34\x0e\x95\x79\x5d\xaa\xc7\x0c\xff\x13\xb4\x4b\x35\x9e\xda\x09\x33\xd9\xb9\x77\xef\xde\x6c\x56\xe9\xce\x3d\x17\x5d\x54\x21\x53\x6e\x08\xba\xbd\x2b\x8d\x2a\x12\xb0\x70\x9a\x94\xa1\xd9\xae\xd5\x04\x3d\x81\xe8\x41\xd1\xe4\x9e\xab\x26\x92\x6b\xd6\xdd\x85\xc5\x58\x06\x48\x72\xa2\xec\xb9\x55\x79\x00\x45\xa9\x3b\x81\xbb\xca\x78\x0d\x63\xa5\x5b\x55\x87\x32\x79\xd0\xa1\xaf\x16\x41\xa5\x6a\x41\x9c\xc4\x31\x8b\x38\xf1\x96\x35\xbc\xc5\x60\x29\x4c\x22\x16\x67\x63\x94\x06\xa4\x7d\x40\xda\x07\xa4\x1d\xd2\x83\x2e\x69\xe7\x59\x14\x31\xce\xd6\xdb\x2e\xa1\x13\x13\xaa\xac\x1d\x54\xb9\x96\x89\x30\x3a\x0c\xba\xb5\x94\x4b\x98\xf8\x8a\x42\xd8\xb2\x98\x16\x40\x70\x05\x7d\x6d\x2f\xfe\xdb\x61\x3c\x6c\x87\x0b\x91\xf5\x37\xc3\xf4\x43\xc3\x13\xe1\x42\x52\x67\x32\xfa\x54\x58\x1e\xe2\xb0\x09\xb6\x07\x59\x18\x3a\xa8\x9e\x60\x21\x71\xeb\xf6\x02\xdb\x16\x91\xc9\xc3\x20\xb1\x43\x20\xa9\x5b\xd3\x02\x9f\xc0\xc1\x60\xc9\x75\x98\x53\x21\xd7\x48\x3b\x6c\x7a\x36\x23\x72\xfe\xf6\x6b\x26\x8e\x5d\x7f\x64\xe2\xf0\x81\x31\xa0\x56\xec\x64\xc3\xf6\x1d\xe6\x18\xec\x42\xaf\x68\x5b\xc6\xac\x2b\x0f\x80\x32\xee\x1a\x55\xfe\xb9\xea\xe3\xe9\xf2\xe2\xa9\x72\x2c\x31\xd2\xf5\x1b\x49\xac\xcc\x35\xea\x5c\x26\x7e\x75\xd1\xf6\x17\x98\x74\xf7\x98\xd3\x8a\x9a\x7e\x6c\x9f\x54\x44\x8c\x45\x55\xbb\xa1\x98\x8e\x4d\x9c\x20\xe1\x1f\x3f\xff\xfc\x32\x71\xd9\x7e\x72\xbe\xf1\x62\x85\x1c\x90\xcf\x1a\xeb\x15\x27\x99\x2d\xb1\x10\x06\x93\xab\x2d\x93\x90\x2d\xd8\xa1\x03\xe7\x2e\xa8\x65\xb0\x47\x2f\x10\x62\xdf\x23\x8e\x43\x7e\x10\x17\x9a\x78\x7a\x43\xf8\xd8\x8e\x4e\x44\x3b\x5c\x9f\xe3\xf5\x38\xd7\xad\xc6\x0d\xfc\x11\xe7\x8f\x8d\x57\x83\x7a\xdd\xf6\x9d\x71\x5b\x22\xc2\xb8\xde\x85\x1d\xe7\xc9\x84\xfa\x71\x5b\x3f\xe5\xfa\xe3\xf6\x78\xb4\xc8\x3c\xaf\x43\xe2\xe0\x7f\x0c\xe3\xcd\xf2\x05\xeb\x07\xc3\xf4\xaf\x86\x0f\x68\x9c\x22\xf0\x06\xa8\x0c\xb2\x67\xa1\x84\x30\xa0\x2a\x0c\x5c\x88\x76\x07\x8e\xcc\x1d\x7b\xf2\xcc\xd1\xe9\x23\x73\x03\xec\x1b\x60\x5f\x47\xec\xfb\x5b\x84\x87\x98\xbf\x64\x7d\x01\xd1\x69\x15\x62\x54\xec\x99\x02\x1f\x87\xe6\x99\x46\x5a\x49\xeb\x9a\xcd\xef\x3d\x16\x8f\xe1\x6d\x5d\xf9\xd7\x01\x7f\xe9\x1a\x3b\xec\x29\x98\x92\x93\xe6\x7e\x82\x29\xff\x66\x08\x6f\x66\xfe\xd2\xc1\x30\xa8\x5b\x2b\x43\xf4\x85\x43\x6a\x99\xd2\x58\x9e\x71\xcc\x15\x2f\xbd\x75\xcd\xda\xf7\x2d\xb9\x94\x71\x2a\x85\xb2\x5e\xd7\x42\xeb\xe4\xf5\xd3\x53\x07\x8e\xcc\x4d\x1f\x9c\x3e\x70\xac\x42\x26\x3c\x8f\xb8\xbe\xe8\xac\x91\x91\x80\x42\x26\x33\x59\x6c\xa8\x07\xc9\x96\xf8\x14\xa0\x29\x65\xe6\xd3\x20\xd5\xc8\xc6\xb3\x15\x72\x2d\xbf\x2f\xa4\x1d\x89\x88\xae\x9f\x16\x82\x95\x0b\x2c\xa7\xe2\x18\xb1\xa3\x28\xa8\xba\xa9\x7a\x10\xab\x16\x5e\xda\xc6\xe0\x79\x24\xb6\x4f\x80\x3c\x55\x65\x0e\x83\xfe\x03\x32\x5a\x40\xad\x55\x14\x0d\x3b\xe0\x2f\xe9\xf3\x96\x08\x54\x35\xda\x87\xb4\x8c\xd1\x19\x4b\x3a\xb7\x69\x37\xb0\x84\x6f\xa3\x50\xdd\xf0\x4b\x4b\x78\x04\x28\x9e\xf5\xfc\x12\xfd\x31\x9a\x32\x68\xa0\x2c\x8d\xdf\xa7\xa4\x93\x56\x42\xd9\x01\xa3\x44\x6d\x2a\xf1\x88\x96\xb2\x5e\xb0\x4c\x16\xdd\x05\x4e\x11\x3c\xb6\xc4\x3c\x65\x53\x36\x34\xa5\x38\xd0\x86\x9a\x20\x84\x70\x88\xd0\x75\x32\x9b\x29\x3e\xe3\xfa\x84\x0b\x57\x5e\x60\x3b\x46\xdb\x8f\x48\x68\x0f\x53\xac\xe1\x05\xcd\xba\x2c\x14\xea\x90\xd9\xd8\x8e\x59\x2d\xf1\x66\x59\x9c\xb5\xcd\xfd\x76\x09\x9f\x0b\x03\xce\x24\x9e\x27\x5b\x79\xff\x10\xd1\xfb\xd1\x34\x80\xa4\x91\x78\x1e\x69\xc0\xe5\x0a\x39\xea\x83\x60\x38\xe1\x2d\xdb\xcd\xa8\x4c\x8e\x70\xda\x57\x26\xd3\xb5\x23\x41\x3c\xa3\x04\x69\x53\xa7\x12\x0f\x72\x2e\xb2\x5f\xba\xbb\x62\x7b\x21\x23\x61\x43\x6c\xbe\x39\x80\xd0\x6b\x96\xdd\xa8\x70\xf3\xd7\xbc\x37\xe7\xc1\x48\x9c\xe2\x89\xdf\x99\x62\x8f\x08\x6f\xf1\xdc\x1a\xab\x36\xab\x1e\xb3\x4e\xa1\x1e\x04\xe8\x43\xea\x71\xea\x4d\x54\x0d\xb5\x0e\x8c\xad\xe9\x8e\xca\xe4\x33\xe9\x1b\x04\x24\x77\x7d\x22\x4c\xf5\x11\x93\x81\x6a\x72\x73\xf5\x0c\xc4\x61\x8e\x8a\xc0\x80\x9f\x57\xc2\x67\x7b\xee\x12\xf3\x59\x14\xcd\x84\xc1\x3c\xb3\xfe\x05\xe1\xc7\x74\xaf\xf5\xce\x1f\xa5\x9f\x42\x33\x2c\x74\x03\xc7\xad\x72\x86\x3e\xaf\xb2\x1e\xf4\xf7\xc5\xb0\xa0\xe0\xcb\x6b\x29\xb5\x51\xbd\x90\x5d\xd9\x92\x00\xde\xaf\x41\x17\x9c\x75\xd8\x2e\x85\xce\xd1\x8e\x46\x20\xfe\x33\xae\xc1\x71\x9e\x9e\xe2\x38\x7c\x35\xc2\xb7\x29\x9d\xe5\x25\x88\xfe\x96\xa9\xb4\xa4\x8b\x49\x35\x39\x50\x45\xa7\x8e\xcc\x5e\x7f\x68\xe2\x8a\x03\x87\x64\x34\x94\x71\xa4\xa4\x14\x2f\x28\x30\xb4\xf6\xb5\x55\x1d\x27\xd0\x5a\xb7\xeb\x77\xc7\x8a\xa9\x92\x51\xb2\x7d\x04\x8f\x70\xaa\x1c\x59\x2f\x1e\xa1\x2f\xd6\x8c\x03\x2e\xf1\xbd\x66\x27\x1b\x5c\x19\xd6\x7e\x48\x83\x41\x1c\xe0\xb7\x84\x63\x1b\x2c\x29\x90\x94\xb7\xe0\x2e\xa9\x14\x29\x81\x47\xc5\x8d\x30\x8d\x3c\x1d\x9f\xc5\x1c\x94\x2a\x77\x4d\x34\xef\x31\x56\x9b\x44\x9c\xbe\xcf\x27\xc2\xf4\x13\xba\x75\x3b\x74\x45\x0e\xa3\x1a\x8c\xeb\xa6\x47\x74\x43\xee\x66\x7e\x4a\x53\x47\x0f\xcc\x92\x23\x47\xe7\xa0\x65\x3e\x53\x95\x3f\xe0\x3e\x2c\x6b\x9e\xf1\x37\xc4\x42\x9d\x0a\x99\xf0\x9b\xe2\xa6\xd6\xa7\x41\x1f\x07\x17\xbe\xac\x54\xac\x28\x1e\xdd\x59\x81\xff\x53\xbe\xca\x10\x34\x67\x3f\xe2\xe4\xcf\x9c\xbf\xc2\x47\x1b\x5a\x3f\xbb\x5c\xa2\xd2\xd0\x94\x6b\x5f\x1f\xd6\xa1\x8f\xc0\x4c\x10\xc6\xa7\xd1\xa5\xf8\x91\x19\xe9\x81\xaf\x62\xbc\x6e\x37\xb8\x90\x11\x59\xbf\x6a\xfd\xf2\x78\x3a\x49\xfe\x06\x1e\xe7\x27\x24\x0e\xaa\x81\x87\x4f\x23\x82\x1f\xde\xfa\x36\xa4\x1f\x6d\xb2\x86\xeb\x76\x03\x9f\x46\x3b\xbb\x08\x32\x0f\xb3\xce\xc9\x7e\xa0\x0f\x89\xe6\xce\x12\x3e\x27\x64\xb6\xe3\xa6\x44\xe3\x65\xa5\x9e\x89\xc6\x3f\x76\x24\x1a\x91\x2c\x3e\xad\xc7\x2f\xa6\x1e\xa2\xc2\x17\x6c\x95\x7a\x43\x39\xe1\xa3\x33\x82\xa4\x7c\x1b\xe1\x2d\x3a\x1e\xc2\xfa\x4a\x2f\x79\xa7\xca\xcb\x27\xeb\xcd\x00\xc7\xa5\x77\xa2\xc9\xa0\xde\x48\x62\x46\xd4\x6d\xc3\xd3\xa8\xcc\x86\x1d\x85\xe1\x55\x70\xba\xd4\xc1\xbb\x43\xf0\x1e\x2e\xd3\xf3\x49\x8c\xeb\x25\x19\xa2\x3f\x7e\x79\x09\x0a\xa7\x27\xa1\x1b\x37\x27\x45\x33\x37\xeb\x3f\x7b\x4c\xd6\x37\x5f\xa2\x9f\x41\xea\x8a\x61\xdb\x84\x02\xe3\x8a\xe3\x29\x5b\x49\xdf\xab\x12\x82\xc7\x0e\x35\xcd\x71\xd9\x74\x6e\x47\x5f\xea\x91\x02\x0d\x1b\xe7\xbb\x9f\x42\xa0\x65\x54\xfc\x39\x84\x47\xa2\xd8\x71\x7d\xeb\x53\x88\xbe\x1f\x5d\xab\x55\x37\x73\xb7\xd4\xa2\xb8\x2c\x07\xd2\xab\x4d\xe6\x93\x5a\x8d\x85\x10\x10\x00\xaf\xb7\x88\xfe\x1c\x02\x22\x6f\x75\x3a\xab\x51\x47\x2c\x2e\xc3\xa9\x91\x71\x29\x6d\x5e\x87\x23\x64\x0b\x69\x4a\x9a\x81\x5d\x9f\x1c\x38\x7a\x30\xcd\x5d\xe5\x22\xa7\xed\x45\x2c\x5b\x0b\xf1\x0b\xc3\x78\x0b\x8c\x79\xd4\xaf\x32\xeb\xb3\xc3\xf4\x8f\x87\xaf\x35\x14\xd2\x96\x09\xea\xf8\x25\x2f\x90\x11\xbc\x62\x46\x5c\xa3\xf6\x99\x27\x3b\x50\xba\x9c\x45\x46\x64\x9e\x31\x9f\x04\x0d\xa6\xa4\x7b\x6d\x41\x83\x76\x26\x52\xcf\x90\x2b\x8a\x48\x1c\x26\xe6\x88\x51\x1c\x32\xbb\xae\x02\x10\xeb\xb6\x2b\x86\x22\x76\x35\x0c\xa2\x28\x55\x47\xc4\x60\x2a\x09\x38\x12\xa6\x61\xb5\x22\x22\xac\xef\x60\x57\x0b\x13\x56\x4e\xbf\x26\xa7\x95\xb1\xe1\x81\xf0\x52\xd6\x45\x6c\x08\x5f\xb2\x27\x6d\xef\x61\x14\xab\x18\x20\xd9\x8d\x45\xe8\xae\x7c\x3c\x6d\x82\xf7\xe5\x4c\x23\x39\x55\xdf\x01\x16\xd4\x88\x23\x91\x7a\x90\x0e\x28\x87\x72\xdc\x48\xf2\xe0\xa8\x4c\x6c\xc5\xff\x04\xa0\xd5\x4c\x01\xd4\x8e\x2a\xbe\x08\xa3\xcb\x4b\xc6\x70\xa6\x22\xa7\xa5\xb0\x14\x9b\x6a\x9e\x90\xab\x01\x03\xca\x19\x5e\x29\x83\x9f\x55\xb4\x7c\x0b\xae\x19\x56\x0c\xae\x77\x09\xeb\x73\x31\x6a\x65\x30\xeb\x53\x43\xf8\xe1\x31\x0b\xeb\xae\x0f\x24\x47\x26\x0b\x43\xfb\x9c\xbb\x87\xe8\xeb\x86\x52\xbf\x0d\x34\xd1\x49\x17\xaf\x5c\x1d\x71\x60\x5c\x31\x0d\x43\xc6\xa8\x46\xb7\x67\xc1\x43\x96\x43\x37\x8e\x19\xc0\x4d\x55\xc6\xd2\xa6\x7f\x73\x8c\xb4\xe4\x43\x85\xa8\x3c\x66\xe3\x5d\xd7\x8f\x19\x98\xa6\x44\xb5\x06\xd1\x0e\xba\xe6\xfa\xb2\xa1\x73\x12\x19\x4d\x0d\x7d\xae\xfe\xb2\x50\xa4\x04\xdb\xae\x07\xcd\x4c\xc4\x90\x15\x72\xad\x9c\x57\x1c\x26\xbe\x28\xd6\x2f\x4b\x4a\x40\x4d\x7f\xb7\x46\x16\xc0\x41\x25\x4b\x76\x5d\xb4\x73\xdf\x1e\x08\x97\x8f\x84\x2d\x20\x0e\x62\xdb\xd3\x6b\xf4\x98\xbf\xc0\x21\x25\x0e\x00\x04\xa3\x68\xf5\x45\x03\xc0\x73\xeb\x6e\x2c\x26\xbe\x6b\xf7\x89\xf9\xac\xbe\x05\xed\xd6\x0c\xf0\x8d\x7b\xc1\x42\x37\x69\xf5\x9f\x86\xf0\xff\x2e\xd8\x47\xa1\x08\x7e\x76\x88\x7e\x78\x68\xda\x77\x64\xbb\xc8\x60\x59\x78\x30\x0b\x36\x28\x6d\x7c\xa4\x5d\x89\x15\xd1\x98\x02\x66\xae\xf2\x01\x32\xce\xd0\x42\xec\x69\x89\x78\xce\x9c\xdf\x38\x89\xf4\x27\x03\x9f\xcc\x07\xf1\x22\xdf\x29\x8e\xe1\x70\x82\xe4\x06\x55\xc8\x41\xdb\xf3\xe6\xed\xea\x89\xb9\xe0\x50\xb0\x10\x1d\xf5\x0f\x80\x33\x26\x33\x17\xb0\x60\x54\x17\x13\xff\x44\x4e\x03\x0a\x16\x48\x90\xc4\x0d\x2e\x1e\xd7\xda\x2e\xb8\x26\xeb\x89\x09\x52\xa2\x7c\x74\xe9\x28\xec\xa4\xab\xed\x25\xb6\xcc\xd4\x17\xbb\x6e\x8e\x1f\x99\x1b\xba\x7b\xe7\x45\x22\x9b\x02\x2c\x83\x97\xec\x24\x1e\x97\xa5\xca\xe2\x98\x30\x59\x68\x3b\xaa\xdb\x9e\x6c\x10\x91\x6e\x3c\x07\x74\xb7\x8d\x7e\x2e\xc2\x43\x71\xdc\xb4\x6e\xa4\x5e\xcf\x8c\x6d\x6e\xee\xc9\xc0\xd5\x44\x27\xfe\xb2\xa8\xfd\x22\x05\x99\x88\x6c\x03\x0a\xb2\x4d\x1e\x22\x4e\x80\xbb\xb1\xa3\x5b\x4a\xf8\x6c\xe1\x28\x13\xfd\xb5\x22\xeb\x67\x88\x5e\x9f\xb9\x92\x0f\x34\x85\xbe\x73\xb2\xe9\x56\x24\x3f\x05\xb6\x69\x79\xd0\x32\xe6\x35\x57\x16\xf9\x9b\x37\xca\xcf\x67\xc4\xfe\x5d\x78\x47\x0f\x7d\xe4\xae\x31\x26\x74\x1a\x8d\x77\x11\xca\xcf\xb6\xb6\xa6\xbd\xc3\xfa\x91\xc8\xff\x55\x57\x14\x16\xe5\x54\xac\xbf\x43\xf4\xca\x99\xc0\xd1\x0e\x75\xdd\xbd\xb1\x2b\x8d\xeb\xac\xec\xec\xc4\x95\x1e\x9a\xd8\x19\x95\x5d\x4e\xa3\x72\x97\x45\x9f\x65\x61\x98\x5a\xbf\x6b\xfe\x18\xc2\x58\xba\x04\xa7\xdc\xd0\x7a\x0f\xa2\xbf\x8f\x26\x8d\x45\xc9\x7b\xc4\x91\x8e\xf8\x26\x30\x39\x5f\xab\xa2\xae\xd9\xe8\x36\x23\xba\x6c\x8b\xb4\x12\xa9\x3d\x01\x11\x7f\x5a\x70\x19\xed\x96\xd7\xe2\xa0\xd3\x2a\x67\x81\x51\xa8\xdb\x41\xfa\xa3\x36\x45\x56\xd4\x28\x60\x38\xb3\x7e\xa7\x44\x1f\xa9\x5a\xe9\x65\x18\x32\x7c\xe3\x14\x02\x8b\x74\xb4\x82\xbe\x89\xf0\x9d\x08\x8b\x5f\xd6\xab\x11\x7d\x16\x04\x38\x72\xec\x56\xdc\x11\x5a\x80\x73\x92\xe3\x46\x04\x6a\x58\x54\x08\x74\xdd\x7b\x2a\xe5\x53\x58\xa8\x86\x5c\xde\x5d\x6c\x36\x58\xc8\x37\x60\xff\xd2\xae\xca\xce\xca\x5e\x5a\x26\x54\xf8\x77\x16\x93\x79\xfe\xc0\x42\x10\x2c\x78\xec\x7a\xc3\x22\xd6\xf2\xca\xd3\x3a\x58\xfc\x27\xf0\x96\xc8\xbd\x91\x5d\xc1\xa9\x93\x75\x11\x84\x67\xec\xb9\x88\x3e\x8a\xd3\x33\x7e\x5d\x99\x5e\xe4\x44\x7d\xc9\xe5\x32\x01\x09\x7f\xbd\xa9\x5d\xf0\x7f\xaa\xd0\x5a\xef\xdc\x04\x2d\x87\xd3\x2b\x99\x8e\x47\xda\xb2\x01\xd6\x04\x61\x39\x17\x32\x67\x4a\x06\x4e\xa1\xb3\x33\x3a\xf2\x0a\xfa\xf2\x08\x7e\x21\xc2\xd9\xab\xd6\xb2\x0a\x31\x99\x3f\x92\xd4\xe7\x59\xa8\x4c\x34\x86\x85\x46\x9a\x26\x1a\x81\xb3\x2d\x22\xd3\x33\xca\x22\xa1\xe2\x3c\xcc\x00\x13\xd7\x11\x2f\xfb\x30\x56\x99\xec\x24\x97\x91\x93\xe4\x32\xb2\xe7\xe2\x8b\x2f\xdc\x93\x05\xc3\x04\xde\xb4\x18\x44\xf1\xf4\x8c\xb5\x97\x5e\x70\x2d\x97\xc9\xa0\xfc\xd4\xf4\x4c\xda\x20\x64\x91\xa5\xcd\x35\xe4\x9c\xf2\x2d\xbb\x47\xf9\x4b\xb0\x90\x2f\xea\x02\x3b\x9f\x40\xdd\x96\xc2\x5f\x6a\x0d\xae\xe8\x6f\x31\xfc\xf5\x2b\x83\x28\x3e\x22\xb7\x22\x6b\xce\x4d\x47\xab\x73\x12\x40\x32\x7b\xc9\xf5\xbf\x28\x36\xc5\x1a\x59\x01\xd6\x67\x9c\x03\x2e\xba\x39\x8c\xf9\xb4\xb2\xf0\x41\x45\xcf\x4e\xd3\xf6\xc9\xf4\xc4\x91\x89\xeb\x67\xaf\x99\x04\x87\x9d\x8c\xfa\x00\xf3\x9d\x19\xc6\x13\x38\xd2\xf2\xc7\x47\x75\x0c\x2c\xea\x60\xfa\xab\x88\x36\x52\x69\x93\xd0\x50\x35\x9f\x12\x5e\x44\xf0\x08\xaa\xca\x5f\x4d\x65\xd8\xc8\x1a\xd9\x9f\x8c\x47\x95\x21\xc8\x3a\x4c\x9f\x30\x23\xff\x96\xb9\xca\xa1\x11\xae\x74\x7c\x6a\xa6\x4c\xe6\x26\x67\xc0\x30\x3e\x3b\x39\x37\x93\x65\xf4\x74\x6e\x72\x26\x5b\xc2\xe6\xd6\xe1\xce\xd4\x08\x0c\xff\xd6\x3f\x0f\xd1\x37\xa3\xec\x35\x99\x41\xcd\xd7\x2e\x6d\x68\x11\x5c\x36\x65\xa1\x0a\x34\x6c\x14\x8d\xad\x6a\x5c\x0a\x20\x75\xc6\x71\x22\x52\x1d\x05\x8c\xda\x66\x40\xa6\x7d\x45\x09\xea\x2d\x78\x91\xda\xf8\xf8\x53\x6e\x44\xb2\xd3\xb9\xd6\x76\x63\x11\x10\xf6\xf1\x12\xae\xe1\xcd\xd2\x33\x69\x3d\x15\xef\xe9\xdd\x4c\x07\x23\x1d\x13\x6f\xd2\x5f\x9f\x12\xfd\xd9\x75\x09\xa2\x96\xda\xf5\x38\xc0\x58\xc9\x76\xcc\xb1\x6c\xbc\xaf\xcf\x4f\xcd\xe9\x97\xe9\xf9\xf9\xaf\xa5\x03\x1b\x1f\xac\xe1\xcd\xcb\x62\xa1\xab\x58\x98\x04\x51\xeb\xc2\xe4\x90\xc6\x77\xee\x47\xed\xa2\x19\x5b\x01\x65\x7d\x10\xd1\x4b\x0a\xef\xc8\xc4\x2b\xf9\x43\xa3\x87\x59\x1e\x70\x05\x3d\x0b\x37\xf1\x16\xa9\x91\x4e\xc4\x96\x87\xf7\xae\x22\x31\x65\xce\xad\x33\xba\x8b\xff\x37\xab\x29\x1a\x26\x10\x3b\x12\x12\xfb\xf6\x90\x8d\x8f\xc9\xef\xe1\xd7\x6e\xc2\x8f\xed\x63\x97\xac\xef\x8e\x18\xec\x25\x77\x53\xac\xd6\xd8\xb6\xc2\x05\x9f\x42\xa3\x5c\xb4\x9f\x0c\x1c\xb6\x82\x5e\x37\x82\x8f\xe1\xad\xfa\xe6\xf4\x94\x35\x49\xf7\x98\xe2\xcc\xf4\x94\x12\x32\x84\x69\x9d\x6c\x13\x4c\x79\xff\x8e\x1d\x97\xe9\xd7\xae\x77\x9d\xc7\x6f\x33\xcf\xf4\xb5\x58\x7f\xc3\xba\x5a\x51\xf7\x3d\x07\x4e\xba\xb1\xd2\x81\xb4\xb9\x1b\x40\x62\xea\x27\x79\x1f\x48\x86\xa0\xc6\x18\xf3\x8d\x89\x16\x61\xab\x6a\xab\xdf\xaa\xc7\x76\xda\xaa\xcc\x9c\x98\x83\x8f\xa6\x65\xc5\xa6\xe8\x5e\xa5\x8e\x8b\x30\x09\x15\x19\xd2\xc3\x3a\x52\xf8\xcc\xe0\x4d\x21\xb3\xa3\xc0\xb7\x0e\xd2\x7d\xdb\x41\x7b\x1f\x23\xe2\x4a\x5f\x90\xc9\x8c\x18\xb9\x0b\xbe\xed\x59\x07\x15\xbc\x77\xcd\xc2\x85\xd5\x82\xfa\xb9\xc8\x3c\x15\xf1\xea\x41\xbd\x2f\x0b\xea\x46\xc8\x96\xdc\x20\x89\x64\x68\x4f\xd1\x3c\x88\x3a\x1d\x37\x97\x7a\xa0\x02\x92\xaa\x58\x5f\x6c\xa1\x02\xf2\x8e\x38\x17\x8a\xc6\xb4\xa1\x02\xa7\x50\xd7\x6d\x5e\x5e\x6c\xb6\x1a\xb3\x38\xf7\x6f\xb2\x58\x11\x99\x4a\x36\xa9\x57\x6d\xf3\xe3\xe8\xce\xdc\x36\xf7\x35\xd0\xdd\xed\xca\xb2\x19\xab\x4d\x22\xeb\xf9\x5b\xe8\x55\xb9\x6b\x69\xa6\x98\x23\x69\xae\xae\x68\x94\x84\x21\xf8\x76\x8d\x8a\x75\x19\xa3\xbe\xce\x02\x1b\x09\x99\xed\x34\x4f\xa1\xb3\xa4\xe1\x6e\x92\xeb\x4d\xa7\xd0\x88\x54\x04\x36\xc3\xbf\xd3\x53\x2b\xe8\xf9\xa3\x78\x36\x4b\x4d\xa6\xa0\xe2\xc9\x2a\xa8\x49\xae\xc2\x9e\x8c\x78\xb8\x81\x3a\x73\x5a\x48\x6f\xb5\x2b\x4a\xc8\xad\xd9\xc9\x6e\x7e\x7b\x1f\x56\xeb\xb3\x2a\xf4\xd7\xa7\xc5\x9f\x2d\x18\xbb\x4d\xaa\x38\x99\x69\x37\xf1\x16\x7e\xe4\x84\x00\xe3\xe1\x1d\x7d\x72\x4b\xba\x2f\xcb\x26\xf3\x1f\x6c\x39\xce\xba\x6c\x55\x05\x87\x52\xee\x7c\x26\x7d\x5a\x4e\xd6\x5f\xbd\x0b\xb9\x9b\x5a\x79\x0d\x16\x88\x62\x1d\xa6\x97\xcf\xea\xca\x98\xcb\x85\xd6\xfa\x45\x3b\x92\x8d\x96\x88\xc8\x56\x95\x6e\x37\xe1\x3d\xcb\xda\x5c\xee\x2d\xe1\x0c\xe6\x59\xef\xd4\xd1\xf5\xaf\x29\x71\x74\xf0\xb5\xd2\xc0\xd5\xe8\xa8\xe0\x53\x60\xe8\xd7\x66\xe7\xb2\xc2\x7d\xaf\x29\x8b\x81\xca\xf3\x98\x0e\xe4\x30\xdb\x31\xc5\x7c\x90\x97\x01\x24\xea\x98\xca\x21\xc1\x23\x58\x94\xdd\x54\xb5\xbd\xaa\xcc\x48\x00\x02\x9c\x1b\xb1\x42\xae\x80\x2d\xe5\xba\x8d\xf1\x1d\x3b\x64\x24\x4a\x74\x0b\xd6\x05\x3b\x9c\xe7\xa8\x9e\xf6\x7c\x90\xba\x9b\x08\x6b\x02\x33\xc1\x02\xe3\x92\x7c\xa3\xc1\x1c\x4e\x63\x2f\xe6\x22\xfc\x13\x27\xb3\x6a\x88\x87\x47\x80\xea\x59\xd5\xfe\x91\x70\x67\x67\x24\x54\x54\xc4\xc0\xbd\xf7\xa3\x42\x81\x7e\xca\x66\xf5\xc0\x3f\x20\xdd\xa5\xd6\xcb\x11\x9d\xcc\x5e\x4a\x49\x55\x51\xf9\x4d\xa9\x26\x8b\x57\xb4\xd7\x95\x13\x29\xa1\x23\x4f\xe0\xcb\x31\xfc\x69\xed\x55\xd8\x41\x67\x52\x25\x50\x9d\xd8\x05\x77\x89\x19\xaf\x67\xc0\xf4\xd9\x62\x6e\x33\x15\x2c\xfb\xcb\x76\xe8\x4c\xcc\x4c\x1b\x79\x7e\xaf\x2b\xd1\xdb\xcd\x3a\xd6\x8e\x7c\x8a\x4c\xcc\x4c\xc3\x02\x84\x6e\x24\x5f\x80\xd2\xc3\xc5\x09\x80\xdd\x33\xe3\x9c\x74\x02\xbd\xe7\xc6\x3d\x1b\x3f\x4b\xa5\x4f\x84\x74\x4c\xa7\xc0\xa7\x05\x07\x8c\x65\xc9\x86\x5d\x35\xd7\x63\xa6\x05\x65\x3f\xbe\xa4\x07\x11\xbf\x65\x9c\x83\xae\xc7\xf0\x1f\x8e\x76\x83\x65\xfa\xb0\xf5\x82\x51\x7a\x5d\xe1\x1d\xd3\x76\x92\xcb\x72\x16\x89\x33\xa9\x37\xc6\x28\xaa\xa0\x9c\xb7\x10\xc1\x76\x0a\x41\x83\x92\x15\x74\xe7\x66\x7c\x17\xc2\xa3\x70\xf1\x18\xab\x59\xb7\x23\x7c\x51\x8f\x3d\x52\x0f\xf2\x77\x54\xd5\x0c\x6a\xa7\x9d\x59\xd2\xe2\x19\x99\x6c\x93\x46\xe0\xec\x27\xd0\x1c\x1e\x08\xa6\x28\x42\x5c\x26\x90\x33\x14\x95\x45\x3c\x0e\x57\xf0\xd3\x84\x5f\x71\xee\x65\x55\xef\x0a\xfe\xfd\x12\x1e\xe6\xfb\x68\x9d\xd2\xa4\xee\xa6\x2e\x89\x44\xb2\x4e\x93\xc7\xca\x59\x5b\x48\x9b\xcc\xa1\x62\x9b\xa4\x6a\x82\x9a\xa6\x32\x65\x4c\x91\x67\x58\x82\xd0\xd7\x91\x6c\x3e\xf3\x79\x44\x3f\x63\xf4\xcb\x01\x2f\x8c\x1b\x11\x39\xa6\x4c\x49\x81\xac\x13\x33\xbd\x5b\x39\xf1\xe6\x99\xca\xc2\x92\x56\x0c\xc9\xe3\xec\xf9\x28\xf0\x12\x2e\x2b\x86\xc5\x39\x2c\xa9\xd1\x23\x89\x6b\xe3\x97\x10\xe6\x57\x03\x47\x45\x6d\x0b\x8f\x2c\x3f\x80\x69\x2a\x8a\x39\x13\x5d\x2e\x2a\x97\x05\x63\x72\xd4\xef\x23\xfc\x30\x15\xfa\x70\x50\xe1\xed\x97\x50\x0f\x87\xf2\x98\xf9\x96\xc6\xdc\x37\xa0\x14\x61\xcd\x86\xdb\x19\xa2\x2e\x31\x57\x87\x5c\x08\x07\x4f\xa4\x73\xa5\xa1\xaa\xc4\x76\x71\xb1\x52\x6d\x24\x65\xf9\x40\xa5\xce\xea\x41\xd8\x2c\xeb\x87\xf8\xcd\xcc\x5b\xf2\x09\x11\x5c\x9f\xb2\x60\x03\xef\x5f\x3f\x82\x2f\xe8\x85\x6a\xc8\x2c\xc6\xef\x0f\xd3\x5b\x51\x9b\x9b\x59\xb3\xab\x44\x6c\x83\x48\xb4\xd0\xeb\x8a\xa6\x88\x24\x25\xb4\xab\xcd\x09\xfc\xbf\x43\x83\x9c\xc0\x8d\x38\xf2\xcf\x56\x3c\x2d\xa6\x8f\x2d\xe0\x69\x4e\xeb\x0e\xae\x2b\x57\x7b\xf5\xe6\xc2\xe2\x4a\x07\xea\x8d\xb8\x39\xe5\x66\x1b\x5d\x7c\x77\x13\x4d\xcc\x3e\x17\xbe\xf4\xb4\x6a\xc7\x90\xac\xcf\x2d\x6c\xba\xb9\x5b\x6b\xc3\xbe\x7f\x19\xe1\x9a\xf3\xa6\x3a\x73\xdc\xa4\x6e\x9d\x46\xf4\x7b\x08\xec\xf4\xb1\x2c\x11\xae\xda\x62\x8b\x07\xb4\xeb\xdb\xae\x9e\x10\x7b\x6f\xf8\xae\xe6\x0c\xc9\xc2\x8d\x08\xa5\xca\x1b\xc5\x6c\x5f\xe3\xac\x8a\x17\x30\x3c\x58\x62\x68\x03\x63\xd5\xf2\x65\xae\xcb\x76\xf9\xe0\x18\xa7\xae\x87\x81\x2e\xf4\xad\xb7\xc9\x65\xa8\xde\x47\xe7\xc1\x07\x1c\x37\x63\x17\xb9\x7f\x48\xf8\x7d\x0e\x71\x1a\x65\x7d\x61\xa8\x8f\xaa\x33\x15\x45\x02\x2b\x4f\x4a\x6c\x3f\x76\xe3\x26\x7d\xf5\xd0\x1c\x44\x3c\xd8\xc2\xab\x19\xd4\x88\x17\x54\x21\xe6\x42\x00\x54\x87\xc8\xe9\x7e\xd1\x0a\x35\xb4\xb4\xa7\x1d\x4e\x40\x35\x01\x7d\xbd\x28\x50\x49\x7b\x10\x09\x1a\x84\x44\x50\x4a\x0d\xc5\x39\x08\xc7\x3e\xe9\xd6\x93\x3a\x49\x54\xec\x40\xe6\x99\xf4\x43\xcb\x2a\x8e\x01\x62\xb8\x5d\x1f\x5e\xca\x92\x0b\x7e\x67\x56\x01\xc5\x88\x31\x86\xd0\x58\x75\x32\xa3\x04\x38\x97\xfc\x8a\x64\x02\xb2\x48\xb2\xa1\xb1\xe8\xf4\xc1\x3c\xaa\xf8\xae\x97\xc5\x15\x15\x57\xae\x17\x9e\xf8\x32\xb5\xa2\x65\xe7\x8b\x37\x3e\x89\x58\x38\xbe\x90\xb8\x4e\xeb\x96\xe3\x77\x8f\x14\x5a\x48\x94\x6e\x31\x21\x3c\x5f\xd6\x8b\x46\xe8\x65\xb9\x6b\xd2\x6a\x9a\x34\x3c\x29\x85\x3b\xd2\xe9\x19\x29\x9d\xc3\xf0\x9c\x9d\x42\x25\xb7\xb1\x82\x3e\x31\x8c\xf7\x08\x0f\x16\x68\xd9\x17\xd0\x5f\xe5\x8b\xbf\x52\xfe\xd6\xb6\x14\xa5\x66\x98\x08\x79\x47\x09\x97\xdc\x86\x75\x7b\x89\xde\x02\xca\xeb\xf4\x4c\xcb\xe3\x15\x72\x58\xa6\xce\xce\x33\xe2\x05\x41\x03\x4e\xe6\xf6\x5d\xbb\xf7\x8a\xd0\xe2\x1d\x97\x8c\x71\x72\xea\x9f\x18\x17\xd8\xb7\x7d\xd7\x9e\x7d\x95\xdd\x17\x5f\x04\xf7\x76\xed\x19\x03\xd7\x8b\x71\x1f\x42\xd1\xaa\x60\x7a\xde\xbe\x7b\xf7\x45\x72\x90\xdd\x17\x8d\x55\xc8\xf4\xcc\xd2\x9e\x14\x07\x21\x14\x8c\xf3\x80\x44\x88\x26\xb5\xc4\x33\xf9\xb3\x6a\xdd\xdb\xf0\xec\x98\xcb\xe2\x51\x85\x4c\x78\x51\x50\x26\x55\x16\x82\x74\x94\xee\x59\x5a\x2f\x3b\x92\x94\x9f\xdf\x1b\x6f\x84\xc1\xc9\x66\x59\x33\x1d\xf8\x3a\xd8\x0c\x32\x86\x84\x65\x3c\xca\xa9\xc9\x11\x0e\xda\x13\x66\xe7\xe5\x23\x9c\x31\x70\xa8\xeb\xc2\xa4\x29\xc8\x80\x4d\x49\x36\xa2\x3a\x98\x38\x4c\x98\x47\xcc\x28\x5d\x01\x12\xd0\xab\xfc\x7c\xfb\x08\x0f\x6f\x11\xc5\x0d\xb8\x9c\x75\x7d\x0f\x91\xa4\xf9\x76\x2d\x8f\x3d\x66\x36\xa6\x93\x25\xbd\x44\xd2\xa1\x52\x4c\xf4\x8c\xf1\x6d\x43\x85\xad\x8d\x15\x7a\x82\x2e\xfb\xaf\x25\x7a\xb1\x79\xa1\x03\xb2\x6a\x15\x19\xfc\x71\x5c\xed\x01\xbd\xf8\x5d\x25\xfc\x22\xe5\x85\x7c\x0e\xa2\xd1\x5c\xa6\xcf\x3d\x54\x4e\x08\x63\xb2\x3d\x57\x79\x49\xf6\x1b\x01\x9f\x27\xdf\x87\x31\x53\xf6\x30\x4c\x48\x6a\x6f\x84\xcc\xe8\xd6\xc0\x35\xd6\x90\x13\x55\xa7\xdb\x04\xf1\xe3\x30\xcc\xcb\xba\x58\x09\x43\x40\x36\x1a\xad\x8a\x7a\xb1\x8a\xfe\xff\xb3\xf7\x2e\xd0\x91\x5c\xe5\x9d\xf8\xb9\x2d\x8d\x66\x74\xc7\x36\x50\x40\x92\x4d\x80\x53\xff\x6b\xc8\x48\x4e\x77\x6b\xc6\xe3\xe7\x60\x6c\x64\x49\x33\x56\x3c\x0f\x59\xd2\xd8\x3c\xe2\x40\xa9\xfb\xb6\xba\xa2\xea\xaa\x76\x55\xb5\xa4\x36\xf8\xc4\x60\x5e\xc1\x84\x97\x81\x85\x81\xe4\x9f\xe5\x65\x5e\x21\xe1\xe5\xf0\x70\x12\x20\x40\xb2\x4a\x30\x84\x47\x36\x6c\x58\x5e\xc9\x6e\xb2\x09\x09\x6c\x36\x90\xc5\x09\xec\x9e\xfb\x7d\xf7\xde\xba\xb7\xba\x5a\x6a\x69\x66\x08\xc4\x3a\xc7\xc7\xa3\xae\xba\x75\xdf\xf7\xbb\xdf\xf3\xf7\x2d\x19\x76\xc8\x9b\xd9\xac\x3c\x40\x6d\xd3\x1c\xa9\x07\x35\x88\x4d\x52\x74\x73\x71\x6a\xce\xea\xe2\xff\xd9\x57\xa8\xbf\x50\xcb\xb0\xd0\x59\x4a\x78\xea\x7c\x6e\x1f\x7b\xdf\x90\xfd\x0c\x17\x07\x80\xc1\x80\x50\x22\xcd\x50\x78\xb3\x90\x89\xa3\x05\xc9\x09\xb3\x70\x0a\xa4\x9a\x3a\xd0\x54\xbe\x32\x7c\xca\x51\x9b\x35\xe5\xc5\x29\x4f\x7c\x0f\xa0\x60\xeb\x9d\x1a\x94\x9a\xd4\xf5\xaf\xbb\x73\x58\x99\x95\xc4\x04\x54\x1d\x47\xa8\xeb\x3e\x8b\xba\xae\x9b\x15\x3f\xe2\x3e\xfd\x59\xcc\x6f\xb3\x23\x2e\x3b\x74\xb0\x2a\xfe\xab\x1e\x62\x77\x94\x5d\xfb\xe1\xa5\xd5\x4b\xd9\x1d\xb7\x96\xe1\x53\xa8\xfd\x88\xf8\x4b\x7c\x2a\x76\x8f\x28\xe7\xb1\xb2\xcb\xc4\x28\xd8\x11\xf7\xaa\x2b\xae\xbc\x1c\xaa\x50\x2f\x97\x8c\x97\x87\x0f\x5e\x7d\xc7\xad\xd4\x75\xef\x00\x38\x11\xe4\xf8\x30\xeb\x7c\x6e\xb4\xf2\xf8\xae\xfa\x7c\x0d\x22\x5e\x8e\x40\xeb\xde\x11\xf7\xe9\xae\xee\xe9\x11\xd1\x54\xd9\xd5\x9d\x84\xdf\xae\xec\xe8\x92\x5d\xf4\xf0\xc1\xab\xcd\x92\x87\x0f\x5e\xed\xde\xba\x41\x5e\xbb\x87\xfe\x1d\xa1\xa3\x7a\x79\x9c\xff\x46\xd8\xeb\x48\x46\xe4\x35\x5a\x59\xd4\x68\x48\xc5\x25\x88\x6e\xd2\xde\x6e\xa0\x36\x4b\x34\x04\x2f\x91\x44\x4c\x2c\x66\x62\x12\x9b\xcc\xa9\x10\xe0\x8a\xeb\x5c\xf0\x06\x89\xd7\xc0\x4b\x1e\x02\xdf\x96\xbc\xc0\x0b\x6b\xa0\xfb\x0b\xeb\xd2\xed\x16\x19\xab\xd4\x0f\xfc\xdb\xf9\x0e\x10\xee\x73\x17\x1c\x7d\x7b\x89\x3e\x22\x8c\xd2\x79\xd1\x47\xbd\x0b\x9c\x7b\x4a\xec\x33\xdb\x19\xb5\xb8\x14\x14\xe1\xce\x84\xb7\xdc\x14\xb8\x4b\xbc\xe6\x49\x96\xb0\x6b\x2b\x4c\x95\xdd\x4e\xc7\x71\x96\xf1\x7d\xcc\x6b\x58\x55\xc3\xf3\x03\x51\x95\xa1\x0d\x86\x64\x3b\x70\x6a\xfb\x14\x55\xc1\x5e\x3a\x2d\xcf\xd9\xce\xd5\xb3\x55\xe8\x53\xc2\x0e\x1b\xea\xc3\xc4\xf5\x56\x3d\x3f\x00\xfe\x4c\x2a\x8b\xd5\xec\x98\x53\xb8\x03\x57\x3d\x93\xba\xd3\x3f\xba\xa8\x10\xe8\x41\x95\x49\x9c\x7b\x2f\x62\xdf\x2f\xcd\x98\xe4\x21\x9f\x10\x38\xdb\x7c\xb0\x4d\x7d\x41\x0b\x5a\x0a\x1a\xd7\xab\xa5\x1d\xc1\xae\x22\x75\xd7\x09\xe2\xc4\x39\x13\x54\xfe\x88\xcb\x5a\xdd\x64\xb5\xc6\xc4\x69\x42\x9a\x26\xa8\x05\x1c\x2d\x24\x22\x67\x45\x46\x34\x21\x39\x1b\x22\xe2\xba\x77\x94\x07\xec\xd0\xe1\xea\xe1\x81\xdb\xbe\xfa\x70\xdf\x96\xaf\xbc\xc2\x68\xf8\xd6\x0d\xf2\x19\xba\x8b\xc6\xba\x4d\x34\xd6\x5d\x94\xd4\x87\x10\x38\x39\x7d\xf7\x30\xdd\x9b\x20\xf5\x70\xde\x38\xcc\xbe\x3a\x04\x32\x2f\x4f\x95\xf4\xd8\xc3\xde\x74\x42\x75\x02\x82\xc0\x95\x5f\x56\x0d\xfe\x46\x5c\x3b\xed\xc0\xab\xa9\x60\x09\x59\x44\x08\x2c\x91\xf4\xc0\xc0\x53\x30\x3b\x97\xe0\xcd\x93\x34\xbd\x98\x57\xdd\x0c\x13\x47\xca\x7a\xc0\x89\xe9\xd0\x1c\xa0\xf4\x65\x37\x89\x90\x1d\xc6\xfb\x4f\x34\x86\x77\x99\x38\x3c\xbd\xef\xc4\x1e\x19\xb3\xae\xb9\x9a\x28\x83\x46\x3e\xbf\x81\x70\x43\x86\x84\x3c\xae\x42\x84\x54\xd4\x13\x10\x62\xd9\x1f\x8c\x33\xad\xfb\x49\x3b\xf0\xba\xe8\xd0\x9b\xd5\xa1\x86\xa9\x2c\xf6\xd9\x1b\xc9\x3b\x9e\x8c\x8c\x81\x05\x81\xeb\xb5\xdb\xdc\x03\x43\x2e\xc4\x15\x18\x13\x18\xd6\xdd\x93\x79\x0e\xc0\x4a\x80\x8a\x6d\x89\xd3\x24\xa5\x7c\xeb\x5b\x83\xef\x11\x82\x5d\xec\x27\x1c\xb2\x50\xe2\x35\x62\x5e\x7a\x87\xe9\xa1\x01\x6c\x8c\x36\xdf\x7c\x36\x68\xf6\xfa\x2e\xcc\x03\xee\xbe\xa5\x18\xa9\x5b\x97\x07\xa4\xee\x3b\xf7\xb1\x27\x58\x4f\x6c\x75\xa2\xde\xa8\x06\x16\xf7\x77\x76\xb1\xb8\xb7\x4b\xfd\x9f\xa2\x94\xb6\xa7\x98\x73\xbc\x67\x6a\xb7\x8f\xfa\x95\xad\xf9\xee\xbd\xf2\xd0\xc9\xdd\xb4\x73\x60\x6e\xeb\x84\xe7\xe9\xc4\x6b\x86\xfa\xd0\x09\x03\x73\xc5\xf9\x5f\x25\x76\xc4\x7a\x92\xcf\x37\x9b\xd9\xd2\x3c\x75\xd3\x65\x00\xf3\x1b\xe4\x3d\x25\x5a\xa3\x17\xd4\xd4\x93\x79\xde\x70\x16\x06\xca\xbb\x98\x4f\xb1\xc1\x1e\xb3\x68\x41\xc8\xe9\x0c\x0c\xb0\x2f\x69\x48\x47\xda\x31\x6f\xf8\xeb\x4e\x9d\xdd\x32\x19\x66\xd0\x2d\x32\x97\xaf\x2f\x76\x71\xe4\xb6\x63\xde\xe6\x21\xa8\xc8\x14\x8a\x62\x0f\x28\xa0\xa9\xf0\xb1\xb0\x7c\xcc\x4d\xf5\x34\x33\xcb\xf1\x89\x81\xf3\xa4\x67\xc3\xf9\x0f\x62\x38\xf8\x30\x3f\x96\x97\x8e\xd0\xff\xd0\x17\x32\xc9\xf9\xf6\x1e\x36\x89\x7f\x5a\x86\xbe\xb0\x10\xca\xc8\x44\x3e\xf4\x32\xb7\xed\x0c\xf1\xee\x8d\x7b\xe8\x49\xa9\x23\x3b\xca\xae\x36\xa1\x38\x8a\xaa\x1b\x68\x6a\x3e\x32\x44\xf7\x00\xfd\x71\xde\x33\xc4\xde\x34\xb4\x43\xbc\x31\xed\x2c\xa9\x40\x88\x06\x43\x6a\xc2\xc8\xde\xb0\x6b\xa0\x14\x14\x25\x40\x79\x88\xa3\x96\x59\x71\x09\x76\x50\xc2\x2b\x08\x1d\x85\xd5\x03\xfc\xac\xbb\xc8\x40\x82\xbc\xd8\x8d\x72\x5f\xcf\x2f\xd8\x10\xfb\x45\xf3\x7f\x20\x51\x60\xa1\xc6\x0d\x21\x41\xeb\x74\x22\x67\xf1\x1c\x8c\x1c\x55\xfa\xcd\x91\x3e\xfa\xe2\xac\x5d\xe7\x8f\x46\xd8\x35\xe6\x03\xdb\x0a\x9e\xc3\xfd\xc7\x46\x90\xf5\xc0\x8f\xaa\x1b\xe4\x05\x23\xd4\xa7\x0f\xab\x19\xe9\x62\xc4\xd9\xbe\x79\x00\x20\x89\xa2\x14\x33\xec\xb1\x76\x7e\x19\x20\x90\x19\x8d\xa1\xdf\x33\x3d\x72\xbe\xb9\x53\x8f\x9c\xf7\x91\xcd\x1c\x71\xa4\xfd\x22\xb1\x81\xf6\xcb\x05\xb8\xfb\xc6\x33\xe5\xab\xa3\x1f\x58\x9e\x3c\x49\x9b\xd7\xaa\xca\x46\x21\x7f\xca\xa3\x36\x59\xab\x45\x9d\x30\x95\x2f\x10\x4a\x1e\xc3\xa5\xf4\xcf\x76\x54\x9f\x9d\xab\xd2\x37\x97\x0a\xbc\x3b\x5e\x56\xda\xb1\x77\xc7\x17\x7e\x28\xde\x1d\xf2\x27\x6f\x37\x79\x8b\xc7\x5e\x50\x91\xb6\x4f\xdb\xef\xa3\x9c\x77\xfa\xb0\x1d\x41\x7a\xbe\xde\xc4\x27\x64\x95\x5e\x80\x77\x8c\xdc\x8a\x0d\x7a\xe9\x80\xd7\x8c\xb9\x0f\x0f\x16\xec\x43\x99\x45\xdf\x37\xa3\xe4\xf4\x5e\xa0\xdf\x78\x14\xfd\xa9\xa2\xe3\x26\x18\x14\xe7\x93\x8f\x62\x57\xc2\x5f\x2a\xb5\x0f\x5a\xe9\x1b\x19\x86\x9d\x10\x1c\xd7\xc0\xa0\xaa\x88\x33\xe6\xbe\xae\x9e\x21\x9a\x0f\x3b\x43\x2e\xf2\xc3\x55\xa0\xb4\xb8\xad\x37\xc8\x1b\x1e\x49\x6f\xa6\x23\x1e\xfa\x18\x1e\x67\xd7\x81\xdd\x1e\x7f\x42\x04\x49\xea\xad\xf0\x70\x42\xea\x3f\x8d\x08\x04\x94\x03\xe6\xf5\x03\x29\x4a\x98\x34\x6d\x57\x6c\xd9\x9e\xd8\xf2\xf3\x74\x0f\x1c\x65\x67\x52\xd9\xaa\xca\xc5\xde\xc6\x7e\x22\xd7\xbc\xe9\x25\x6e\x54\x83\x5d\x5c\xb7\xed\x56\x1d\x3a\x0a\x45\x16\xfd\x16\x77\x9a\xf4\x9a\x1d\x30\xdf\x27\xfc\x5a\x1c\x41\x40\xc5\x18\x04\x54\x48\x90\x44\x3f\x71\x71\x23\xae\x01\xb6\x7a\x2c\xc4\x2b\x99\xe8\xbb\x4a\xdf\x4a\xe8\x45\xf0\x4c\x7c\x91\xa4\x5e\xab\xed\xdc\x43\x76\x1e\xc9\xf1\x14\xc0\x7c\xe8\x09\x9c\xe1\xb9\xf6\xc5\x72\xc5\xe0\x08\x87\x3d\x8d\x1a\xae\x4c\x12\x09\x00\x1d\xed\x14\x11\x2c\xdc\xc5\x6e\x9b\x0b\x71\xa2\x3a\x4e\x7f\x89\xe6\x4e\x82\xf3\x94\x1d\x98\x5f\x1f\x2f\xfa\x27\x45\xb9\xcc\xa1\x96\xeb\x73\xba\x14\x75\xd2\xea\xae\xd0\x38\xb8\xd0\xf8\x6a\x42\x2f\x0c\x3c\x73\xfb\xdc\x75\x16\xdb\xe7\x86\xe2\xed\xd3\x8a\x70\xcf\x00\x78\x22\x9e\x9e\xb0\x66\x38\x51\xe8\xdd\xa5\xf7\x15\x3d\x9d\x45\xea\xfc\x3c\x7b\xd2\xa4\xdb\xec\xb4\xbc\xb0\x12\x73\xaf\x0e\x7c\x1e\x1a\xc5\xdb\x66\x6c\x51\x2e\xca\x25\x6a\x73\x44\x9a\xaa\xfe\x3b\xd3\xbd\xbe\x8e\xe8\x98\xa3\x97\x12\x76\x27\x01\xb7\x88\xcc\x0c\xe9\x89\xbf\xe3\xb4\xec\xca\x11\x80\x0f\x4e\x9c\x40\x3f\x31\x82\x36\xc6\x0d\xef\xa5\x06\x6c\x9f\x8a\x4c\x93\x7c\x63\x1a\x7b\x61\x02\x73\x92\xe1\x3a\xe8\x11\xda\x61\x45\xd6\xf4\xc6\x74\xaf\x34\x9a\x39\xcb\x3b\x38\xdd\x87\xb5\xb3\x41\xc2\x6b\x91\x98\xd8\xae\x3a\x82\xe0\x32\x25\x26\xb4\x16\xb5\xda\x01\x5f\x97\x37\x66\x52\xa5\x6d\xea\xe0\xe5\xec\x87\xcb\x3a\x87\xb3\xf3\x34\x76\x22\x8f\xb7\x88\xe0\xa3\x38\x72\xde\xf2\xd3\x54\x06\x74\x23\x75\x2d\x23\x62\xc1\x33\x6d\xaf\x24\x99\x04\xeb\x99\xd6\x28\x4f\xd3\x47\xe8\x16\x67\x43\x31\xb5\x35\xee\x3c\x99\x1d\xb6\xa3\x86\x64\x73\xbe\x2c\x60\xd6\x1f\xf0\xb4\xb2\xde\xbd\xbd\x61\x57\xfb\x52\x42\x47\x12\x1e\xfb\x3c\x11\x67\x70\x6b\x30\x0c\xe8\xf6\x02\x7c\xc0\x16\x20\x21\x42\x16\xc0\x81\x17\x06\xd6\x66\x1e\x32\x43\x58\x10\x32\x92\x1f\x08\x51\x04\x20\xea\x95\x73\x49\x1a\x85\xf8\x75\x95\xbe\x4c\x74\x08\xa5\x8e\xe7\x0d\xde\x21\x14\x8f\x16\x17\xad\x94\xfa\x7a\xbe\x8c\xce\x54\xdd\x85\xfc\xae\xdd\x7c\xd3\x56\xa9\x47\x87\x01\x8d\xf0\xa9\xec\xf8\xa2\xf4\x74\x34\x06\x37\x76\x32\x8a\x5b\x5e\x50\x76\x6f\xf1\xe2\xd0\x0f\x97\xc7\xcb\x6e\xc8\xd7\xc0\x27\x32\x71\x6b\xba\xa9\x7a\x3d\xc3\xd5\x68\x74\xd2\x4e\x6c\xa6\x30\x7e\x90\x9c\xd8\x5a\x0b\x75\x89\x33\x56\xa8\x85\x12\xbd\xc8\x6b\x9f\x5e\xba\xaf\xd8\xe0\x2b\xca\x82\x86\xfa\xef\xf7\xb2\xc7\xe9\x5f\x39\xed\x34\xc2\xab\x66\xaa\xe9\xbf\xdf\x55\x4d\x6f\x97\xc7\x9b\x53\xaa\xe9\x63\xec\xa2\xe3\xd6\xbc\x9a\x6a\xe9\x4b\xe8\xd8\x00\x38\x93\xb8\xc0\xbb\xdc\xc5\x43\x47\x25\x7d\x16\x66\x2b\x75\xa4\xf3\x04\xe1\x77\x86\xe8\xe3\x36\xa7\xe6\xce\xab\x86\xd8\x6d\xc6\x6f\x1d\x9b\x62\x06\x48\x81\x9b\x19\xbc\xd5\x1b\xba\xec\xfa\x55\x5e\x15\x3b\x46\x5d\xf0\x6b\x5e\x32\xe1\x27\x6e\xd3\x6b\xb7\xb9\xc6\x95\xf0\xc3\x4e\xd4\x49\x02\xf4\x4e\x07\xeb\x27\xe0\x3e\x6e\x90\x5f\x2b\xd1\x67\x2a\x89\xe8\x16\x25\x11\x5d\x9f\x01\xb6\x64\xac\x9b\xd4\x47\x42\x10\x01\xf4\xa1\xd3\xce\xa8\x41\x92\xba\x4d\xee\xc5\xe9\x12\x17\xfc\xb9\xdf\xe2\x96\x9c\xb4\x4e\x1f\x2e\x8a\x9c\x92\x12\x0c\x88\x4b\xf5\xb3\x14\x97\x1e\xaf\x84\x10\xdd\x01\x93\xcb\x94\x2d\xd1\xeb\x54\x8c\xe4\x15\x6c\x7c\x41\x85\x88\xc3\x20\x70\x9a\x8f\xb8\xa7\xc2\xe5\x08\x44\xeb\xd8\x3d\x2a\x7d\x99\xcc\xdd\xfc\x35\xb2\xc9\xca\xe1\x3d\xf9\xbb\x84\x99\xbf\x8b\x03\x1e\x21\x2a\x40\x6a\x11\xaa\x1b\xe4\x57\x08\x3d\x4a\x47\xf5\x5d\xe9\x5c\xcd\xca\x9a\x8f\xc1\x93\x9f\x17\xc4\xfc\xc4\x5d\xe6\xa1\xe0\x6f\x73\xbe\x97\xd7\xd1\xe1\x66\x94\xa4\xce\x95\xec\x12\xf0\xa4\x45\x37\xd0\x70\xf0\x0a\x5e\x3e\x4c\x1f\x5b\x34\xc4\x75\x5e\x43\xf4\x70\xe7\x1f\x86\xd8\xa1\xec\xa7\xe5\x9d\xca\xe2\x4e\x28\xc3\x47\x50\x15\xc5\x24\x97\x56\xdd\x20\xbf\x33\x44\xdf\x3f\x94\xe5\x03\x79\xdb\x10\xbb\x7b\x68\x0a\x7f\x28\x1f\x01\xf9\x0e\x20\xe5\x10\x17\x08\x12\x83\x28\x74\x65\x4b\xc9\x85\x6a\xeb\x1e\x24\xae\x2c\xf4\x5d\xd6\x05\x41\xe3\x51\x94\xba\x63\x07\x26\x0e\x8c\xf7\x68\xd1\x73\x10\x65\x8b\xc6\x97\x62\x6f\xfb\xad\x76\xd0\x85\x7e\x1c\xa8\x97\x65\x7e\x24\x41\x55\x71\x9c\x12\xf3\x19\x12\x51\x94\xdd\x24\x12\x5c\xb3\x46\xbd\x86\xa7\xc0\xfc\xc5\x1d\x09\x6f\x3d\x76\xe0\xd9\x07\xca\x2e\x4f\x6b\xe3\xee\x5a\x14\x1e\x48\x5d\x04\x81\x5e\xc4\x08\x0b\x5d\x51\x37\xea\x48\xb0\x21\x80\x46\x0a\xfc\x9a\x9f\x06\x5d\xb7\xe6\x05\x81\x0b\xec\x5d\x84\x67\x5b\x66\x49\x31\x21\x37\xa2\x86\x7b\x10\x71\x4c\x31\xbc\xc8\x4b\xc0\x7d\x6e\xa2\xc9\xbd\x20\x6d\xa2\x86\x2e\x8c\xc2\xca\xed\x3c\x8e\xd0\x3d\x5f\xbe\xa9\x6e\x02\xab\xf5\xb7\x23\x85\xce\xb2\x47\xa7\xac\x58\x98\x4f\x8c\xb0\x77\x9a\xc1\xb2\x9e\x7b\xd4\x5f\x8a\xb9\x3b\x25\x51\x59\x55\x70\x44\xd1\x53\x74\x0b\x05\xad\xe5\x12\xd7\xa0\x99\xd2\xe1\x70\x62\x2d\xf6\xc5\x51\x85\x5c\x0b\xc5\x5f\xef\x2c\x84\xe6\x95\x7b\x84\x34\x38\xd2\x48\x04\x27\xe9\x7c\x80\xb0\x7b\xc9\x51\xbd\x17\x30\x90\x46\x81\xdb\x99\xe6\xa0\x46\xae\x4c\xe6\x3b\x2f\xd1\xfe\x00\x2a\x4b\x4a\x9f\xe1\xb2\xab\xf6\xd6\xcc\x7a\xd5\x65\x7c\x3d\xbd\x8c\x95\x5d\xb6\xde\x48\xc4\x3f\x61\xda\x48\x58\xd5\x9d\x6d\xe9\x55\x86\x3b\x3f\xd6\xa8\x9f\xf8\x81\xe0\xd1\x8d\xc4\x68\xd6\x81\x3d\x42\x87\x82\x4e\xe8\x1c\x56\xe4\xfa\x71\x99\x2f\xfd\xd1\x29\x95\xc8\x2f\xe8\x84\x52\xa9\x65\x91\xe2\xe7\x12\xba\x4f\x4c\xf1\xa9\x30\xe8\x3a\xab\xac\x99\x7d\x6a\xda\x4d\x00\x23\xd1\x1d\xcb\xd6\x62\xbc\xea\xce\xcb\xaf\x30\x9e\x04\xec\x35\x8d\x08\xf9\x1a\x9e\xbd\x94\x01\x66\xe2\xd4\x19\xc0\x7d\x89\x1d\xfb\xbf\x48\x29\xf6\xf2\x96\x5b\x4e\x26\xce\x51\x76\x49\xd1\x00\xd6\xa2\x38\xa8\xaf\xf9\x92\xa2\x25\xee\x98\x28\x3c\xbe\xc9\xa6\xfd\x00\xa1\x7b\xd6\xd6\xfc\x7a\xe2\xbc\x93\xb0\x97\x12\xab\x4e\x19\x35\x06\x75\xba\x50\x69\x66\x3b\x4d\xdc\x31\xf8\x6c\xdc\x9d\xf1\xc1\xba\x04\xbf\x30\x3e\xb4\xb5\x64\xa2\xaa\xe8\x3e\xc3\x0e\x13\x33\xac\x82\x72\x01\x30\x59\x05\x58\x20\xfc\xa7\xdf\xea\x04\xa9\x17\x72\xb8\x77\x37\x3b\x6c\xcf\xdb\x47\x2b\x45\x87\x2d\xe0\xeb\x73\x82\x89\x48\x52\x1e\xa6\xd6\xc1\xfb\xdc\x5e\x76\x17\xe9\xff\xde\x36\x0f\x01\xd1\xf7\x6b\x6e\x5b\x97\x55\xb3\x61\x70\xa6\x9e\xc4\xdc\x8f\x56\x7d\x14\x1f\x26\x24\xdc\xb0\x32\x5b\x8a\xbb\x6b\x9d\xd7\x24\xb2\x42\x3b\xe8\x2c\xfb\x61\xf5\x0c\x19\xa9\xc7\xfe\x2a\x8f\x37\xc8\xef\x8f\xd0\x53\x54\xfe\x72\x66\xd8\x55\xd3\xf0\x97\x22\xf3\x66\x80\x2e\x96\x51\x41\x66\xda\xb7\x5f\x12\x0b\x73\x62\x3e\x91\x1d\xd5\x0f\x11\xf6\xce\x7f\xab\xa3\x6a\x46\x40\x19\xd5\xd7\xc1\xda\x9e\x88\xab\x56\x2c\x85\x8c\xb6\x47\x15\x95\x35\x8c\x53\x74\xaf\x0c\xa4\x74\xa6\xd9\x81\x6c\x5b\xce\xac\xa7\xb1\xa7\xef\x1e\x15\x6b\xe9\x0b\xc1\xac\x5b\x7d\x47\x6e\x97\xc0\x9f\x28\x3c\xfc\x68\x9c\xe1\x07\x4a\xa6\x97\xc0\x47\x4b\x03\xbb\x09\x64\xaa\x9f\xbb\x8d\x88\x59\xfd\x0e\xa1\xa4\x8d\x78\x1b\xd0\xf3\xa1\x4d\x47\x0a\x4f\x46\xbc\x6f\xc2\x41\x67\xb5\xda\x93\x2e\xbd\xed\x25\x5a\x58\xc5\xdd\x2a\x97\x46\xe3\x24\x22\x52\x1c\x86\x2f\xfa\x0d\x37\x8c\x72\xad\x98\x40\x71\x12\xd2\xba\x4f\x47\x12\xd4\x52\x01\x96\x72\x14\xaa\x42\x65\xf4\x7b\x84\xbf\xa5\xb3\x23\x42\xa3\x14\xf7\x8a\xfe\xe5\x5e\x7a\x71\x1f\x32\x60\x1d\xfe\x8f\xec\x65\x4d\x63\xc3\x15\x9e\xf5\xf3\x70\xc0\x3f\xb1\x7b\xc0\x1f\x5a\x07\xfc\xf3\xd6\x01\xff\x64\x69\x00\x5f\x81\xe3\x51\xcd\x0b\xf2\x0a\xde\xdd\x53\x6e\x9e\xf2\xaf\x0f\x15\xe6\x9c\x3f\x1a\x00\x62\x96\x75\xd0\xef\x1b\x62\x7f\x90\x63\xaf\xb1\x94\x3a\xde\x8a\x6b\x96\x1b\x5f\xbd\xf5\x96\x41\xd1\x7a\x2a\xc4\xa8\xdf\xc8\x80\xca\xac\x7b\xa9\x97\x70\x70\x63\x80\x77\xf2\xf7\xe9\xd3\xb3\xd3\x86\x39\x01\x5c\x86\xed\xb6\x34\x24\xea\xa6\x7c\x77\x14\x17\xb3\xdd\xdf\x24\xf4\x45\x84\xee\x37\x5a\x77\xba\x2c\x30\x75\xf5\xf2\x15\x84\x5c\xa3\x1c\xa0\x54\x3d\x6e\xe5\x5a\x2d\xd2\x9a\x25\x05\x5d\x51\x7d\x2c\x0c\xc8\xf2\x12\x71\x82\x63\x0e\xf8\xf7\xe6\x71\x7d\x86\xee\x89\x18\xb7\x33\xc7\xa6\x60\xfc\x76\x4f\x32\xd8\x6e\x89\x95\x65\xf8\xda\x81\x9b\x81\x6a\x5b\x96\x37\x1b\xb8\x7f\x3f\x3d\x58\xb0\xc6\xc7\xa6\x66\x32\x7e\x6d\xda\x4f\x56\xac\xd5\x7e\xe1\x7e\xf6\xb1\x92\xb5\xda\x59\x61\x57\x94\xce\xa8\xb9\x1f\xba\xc7\x00\x36\xd9\x55\xe9\x5c\x66\xc2\x65\x3f\xe4\x55\x4a\x27\xdd\x63\x53\x33\xee\xdc\x34\x32\xa6\xe0\x19\xe5\x2e\xf1\x86\xd8\xb8\xb0\x5b\xa4\x57\x81\x97\x4f\xff\x57\x17\x0d\xc0\x37\x10\x33\xbc\xc4\x2d\x37\x72\x51\xa7\x44\x38\x82\x6d\x73\xbb\xd8\x4e\x32\x95\xb7\xb4\x6d\x54\x5d\xdd\xf4\x60\x82\x9d\xd8\x2c\xe2\x51\x05\x8a\xb6\xbc\xb0\x8b\x96\xf7\xaa\xac\x66\x67\x22\xde\x19\x32\xd2\xae\x9f\x04\xef\xbf\xfb\xf6\xd1\x8f\x95\xf4\xfd\x72\x5f\x89\xbd\xad\x94\xbf\x5f\xe4\x92\xcb\xe3\xd4\x93\x4b\x57\xde\x3d\x8b\x7e\xfb\x88\x3b\x13\x26\x9d\x98\x67\xe1\xee\xf9\x6b\xc8\x4f\xb6\x71\x13\x41\x78\x56\x72\xe4\x5c\xc9\x86\x67\x8b\xb0\xb0\x5c\xe3\x99\x70\x20\x76\x82\xb9\x99\xbf\x57\xa2\xa3\x6d\x2f\x4e\x81\xea\x3b\x7f\xa7\xe1\x4e\xbe\x08\x71\xee\xfa\x8d\xda\x2f\x5b\xcc\xe5\x6c\xc3\x8d\xd0\x0c\x67\x63\xef\xfa\x06\xaa\xfc\x92\x02\xca\x90\xf8\x74\xd9\x7c\x1d\x8d\x34\xed\x83\x9c\x12\x49\xdd\x3b\x84\xca\x13\x99\x10\x4c\x22\xa0\xa8\x3e\x79\x89\xcb\x0e\xb1\xaa\xbb\xe0\xb7\xfc\xc0\x8b\x83\xae\x85\x87\x94\x95\x13\xb4\x44\x55\x08\x78\x18\x07\x99\x3b\x16\xc5\x50\xb3\xd8\xcd\x01\xf7\x56\xb9\xf4\xdc\x14\xeb\x99\x76\xf1\x46\x19\x3f\x1f\x53\x6f\x08\xeb\xef\x25\x54\x6e\x67\xe7\x5e\xc2\x5e\x47\x4e\x1b\x99\xdf\xe4\xde\x9d\x9b\xb6\xe9\xc2\xd4\x4c\xd5\x3d\x2d\xef\x1f\x49\xb2\xba\x32\xcc\x24\x59\xd1\x25\xce\xe7\x86\xf9\x3d\x93\x79\x79\x0f\x61\x6f\x24\x67\xc7\x94\xf4\xf2\x3c\xe7\x69\xd6\x15\xe3\xf3\x9e\x91\xc2\x2b\xfa\x98\x9f\xce\xf3\x76\x64\x11\xed\x17\x8c\xb0\x7f\xb6\x89\xb6\xb9\xff\x21\x62\x5d\x66\x1d\xc9\x32\x94\x9a\xb9\x46\x3c\x77\xd9\x47\x43\x69\xe2\x23\x32\xcb\x31\xf9\x7b\x3b\xf7\x6e\xc1\x57\xaa\x78\x01\x89\xa4\x74\x7a\x66\x6e\x7e\x66\x6a\x72\x71\x66\xfa\x88\x2b\x47\x85\x81\xfd\xea\xb6\x04\x05\xa5\x96\x15\x72\x39\xee\xc0\xbd\x57\x75\xbb\x2c\xcf\xac\x17\x66\x50\x25\x08\x89\x17\xba\xb3\xa1\x9f\x66\xe9\xd6\x30\xcc\x28\x88\x42\xed\x7d\xd0\x8e\xa4\xe8\xb1\xec\xa7\x70\x30\x43\x59\x19\x18\xb3\xad\xda\x60\xa7\x83\x27\x9f\x09\x64\x4a\xb3\x89\xdb\x20\xff\x52\xa2\x77\x97\xe8\xa8\x56\x0b\x3b\xdf\x27\xec\x5b\x64\x11\x75\x49\x99\xb2\x58\xe6\x52\x55\x30\x5d\xca\xca\x52\x90\xb7\xde\x15\xc4\xea\x40\xf5\x80\x22\xed\x41\x0f\x9e\x9a\xae\x54\x39\x4b\x23\x14\xa1\xbd\xa0\xee\x29\x95\x39\xb4\x2c\xe8\x76\x31\x34\x1b\x54\x60\xa2\x91\xd9\xb5\xe8\xcb\xb8\xb3\x64\x36\x2a\x37\x14\x82\x1f\xc2\xc0\xcc\x73\x38\x4e\x8d\xf9\x71\x7e\x86\x5d\x34\x9f\xd5\x77\x7a\xfe\xb8\x59\xf4\xc9\xe2\xc4\xe2\x62\x3b\x97\xb1\x03\x53\x51\xab\x85\xb9\xb4\x9a\x5a\xb9\x9e\xc1\xc9\xa8\x92\x56\x63\xf7\xed\xa3\x97\x16\x9d\x19\xf4\x8e\x6c\x24\x7d\x14\x59\xff\x77\x2f\xbb\xdb\x66\x71\xf5\x17\x7a\x2f\x78\x29\x98\x77\x54\xfa\x95\x06\x4f\xa5\xe1\x47\x02\xd4\x64\x5f\x9c\x3d\xab\x7a\x86\x8c\xea\x10\x26\x0d\x31\xf8\x5f\x47\xe8\x87\x08\xcd\x5e\x38\xef\x24\xec\xd7\x88\x0e\x3f\x01\x36\x56\x8a\xc1\xda\x54\x0b\x24\x5a\x42\x79\x20\xd0\x66\xd6\xcd\x34\x6a\x47\x41\xb4\x5c\x8c\x8c\x14\xf3\x80\x7b\x09\x4f\x94\x25\xf3\x86\x99\xc9\xe9\x09\x09\xfe\x90\x28\x02\x36\xb1\xac\x2a\x9b\x98\x9f\x99\x9c\x3e\x31\x53\x6d\xd5\x2f\x46\x7c\xb1\x8a\x57\x69\x47\x16\xbb\xfb\xa6\x12\x75\xb8\xd9\x59\x70\x84\x75\x5e\x52\x62\x3f\xb0\x07\x81\x98\x85\x86\x40\x8f\x0f\x64\x7c\xa0\x94\x81\xb2\x61\x64\x20\x2d\x3a\xdd\x97\xca\x2d\x0c\x97\x23\x6e\x70\xd5\x42\xd6\x40\xdd\x20\xe7\x9a\xc3\x34\x30\x13\xb1\xfd\xa5\xa8\x13\xd6\xdd\xb9\x9b\xa7\x7e\x48\xb3\xf4\x4a\x85\x3a\xf8\x2b\x84\x3d\x5b\x41\x0d\x8a\x8e\xe4\xb7\x97\xc2\x08\xfc\x61\x74\xea\x6b\xe6\x55\xfa\x79\xc2\x3e\xb1\xf9\x55\xda\xd3\x55\x64\x1a\x15\x0f\x0e\x04\x23\x63\xb9\xdb\x3c\x6e\xf9\x2a\x7b\xdd\x60\x77\xec\xb9\x1a\xa1\x71\xd9\xbe\x60\xa4\x10\x51\x54\x0f\xc5\x22\x17\x5f\xda\xf3\x63\x40\x2e\xde\x3f\xfc\x63\x4d\x2e\x76\x0f\xc2\xbf\xcd\x41\xf8\xd2\x9e\xc2\x88\xc5\x1b\x16\x17\xe7\x8e\xf1\x54\x1a\xe2\xdf\xbf\x87\x3d\xc9\x7a\x62\xda\xe2\x43\x15\x51\xa0\xd1\xaf\x45\x51\xf7\x18\x4f\xb3\x10\x0d\x0d\x20\xf5\xb7\xc3\xf4\x0e\xe9\x38\xd0\x61\xcd\x1b\x84\xa4\x8a\x9b\x30\x52\xe9\x99\xdd\x34\x2a\xf7\x10\xeb\x76\x54\x77\x67\xe7\xaa\xee\x53\xa3\x0e\x80\x7a\x7b\x4b\x41\x57\xcb\x78\x09\x4f\x5d\x26\xaa\x62\x82\x61\x11\x73\x75\x03\xf7\xea\x08\x27\x97\xa4\xdc\xab\xe7\x83\xb1\xf6\x1b\x65\x9c\xe7\x10\x36\x35\xd5\x49\xd2\xa8\xe5\x36\xe5\x67\xb2\x4e\x5f\x41\xb3\xc0\x20\xaa\x38\x2c\xc8\x59\x0f\x6e\x6d\x68\xf7\x96\xdf\x58\x86\xb6\x09\x5a\xa1\x3f\xb7\xa5\xd6\x52\x54\x87\x9d\xa0\x57\xca\xbd\x3f\xc1\x98\x4a\xfa\x87\xc9\x9c\x95\xf6\x09\x9a\x46\xb7\x77\x6b\x30\x7f\x48\x24\x02\xd6\xef\x0d\xec\x5f\xdc\x49\xfd\xa0\x2a\x28\x42\x1a\x57\x67\xc3\xf4\x54\xbc\x00\x55\xb1\x3b\x50\x2f\x16\xe7\x90\xb3\x54\xe6\x24\xbb\x3f\x86\x1a\x47\xfa\xec\x28\x8b\xa4\x9a\x34\x2f\x5c\xe6\xee\x21\xf1\xe5\x15\x97\x5f\x7e\xf8\x72\x99\x36\xa8\x5f\x86\xa2\x2a\x9d\xa7\x23\xe0\xeb\xc7\x9d\x1b\xd8\x13\x17\xe0\x2f\x53\x95\xaf\x72\x77\x67\xd1\x29\x98\xbc\xc9\x3c\x37\x62\x92\xac\xd9\x79\x80\x14\x7a\x98\x64\x13\xef\xbc\x8b\xb0\x6b\xb3\x9f\x96\x87\x49\xcd\xdc\x13\x66\xa6\x3d\x5f\x6e\x70\x4c\x92\x9c\xe5\x35\x00\x67\xbc\x0d\xf2\x34\x7a\x89\x0c\xfe\x64\xec\xd1\x8b\xa2\xa3\x58\x03\x72\x29\xe2\x85\xd9\xc5\xb2\x8a\xeb\xbc\x98\xfd\x44\x4f\x61\x78\x63\x96\xfe\xf6\x10\xfd\xe9\xa2\x01\x79\x61\x3d\xe0\xb1\xf3\xa7\x43\xec\x0a\xf9\xb7\x76\xce\xf4\x14\x0b\x5d\x53\xc7\x54\x7a\x74\x68\x60\x47\x6f\x85\x87\x1b\xe4\xd5\x43\xe2\x64\x0c\xf3\x75\x5e\x73\x5e\x44\x06\xd8\xbe\x99\x63\x0e\x7b\x6a\x91\xce\x17\xb4\x55\x91\x38\x2d\xa0\x84\xca\xb4\xbc\x99\xfe\x48\x54\xa1\x7f\x23\xb5\x57\x7d\x8c\xa0\x5f\x55\xba\x42\xf7\x8a\xc3\x7a\x8c\xa7\xce\x33\x07\xc8\x50\x6e\x11\x29\xa6\x7e\xe6\xda\x10\x15\xaa\x53\x0d\xda\x7c\x1e\x37\xa2\xb8\x55\x85\x38\xcd\xb4\xd6\x5e\x88\x6a\x2b\x3c\x75\xee\x1a\x24\xfb\xf3\xe2\xd4\x1c\x16\x97\x4d\x9e\xd2\x0f\x8c\x46\x33\x12\x89\x61\x29\x98\x3f\x7e\x71\x6a\x4e\x22\xcb\x89\xbf\x9a\x51\xb4\x92\xa5\xed\xd0\x3a\x3d\xfa\xfa\x52\xa1\x4f\xaf\x20\x77\x93\x81\xef\x25\xce\x83\x84\x45\xfa\x97\xcc\x62\x05\x81\x10\x5e\xbb\x2d\x1a\x52\x30\x9d\xb3\x73\xb0\x44\x0a\x66\x52\x02\x70\x28\x11\xd2\x0f\x25\x8e\xbc\x27\xe3\x9e\xd3\x4c\xfc\xc3\x58\x36\xf1\x21\xba\x30\x55\x37\xc8\xf3\x09\x3d\x4e\x47\x75\x5d\xce\x75\xec\xe2\x1b\x74\xc5\x4a\x76\xf3\x96\xa2\x55\x0b\xef\x72\x13\x67\x84\xcb\x01\xc7\x72\x82\xb1\xac\xb8\xda\x44\xa0\xce\x04\xe8\x5f\xe8\x95\x75\xc2\x7f\x30\x54\x08\xa1\x2b\xfa\x22\x08\xa9\xed\xbd\x30\xc4\x56\x2d\x26\x0e\x2a\x46\xf8\x6c\xcc\x78\xa0\x40\xf5\x05\xbf\x76\x83\x7e\x79\x2e\xf8\x35\xc9\xa3\x7d\xa6\x44\x3f\xa9\xf8\x9c\xfb\x09\x7b\x37\x01\x6a\xaf\x2c\x00\x5a\xc4\xce\xa7\xa7\x4b\x15\xbe\x32\xfa\xfe\x76\x5b\x81\x1f\xae\x80\x93\x98\x64\x40\xc4\x29\x93\x8c\x67\xb8\xa2\x08\x64\xcc\xbd\xa0\x3f\xb3\xb4\x1d\xbd\x95\xe8\x88\xa8\xc8\xf2\x1e\x21\xd2\x3f\xfe\xd9\x2c\x02\xff\x78\xb1\xea\x6a\xde\xa5\x26\x2d\x17\x13\x7d\x3e\xba\xf1\xe5\x0b\x69\xb5\x60\x03\xcc\x2e\x4c\x2d\xcc\xf6\x11\xfe\xdf\x7e\x21\x7b\x37\xd9\xa4\x40\x0e\x02\x00\x4a\x82\x1a\xb3\x2a\xff\xde\xae\x27\x99\xfd\xd5\xce\xcc\x0b\x17\xa0\x13\xd0\x5c\x14\xa7\x5e\x70\x86\x0c\xf9\xb7\x85\x67\xc8\x50\xd0\x09\x37\xc8\x97\xf6\xd3\x9b\xe9\x23\x6a\x4d\xaf\x3d\xd9\x49\x9b\xd3\x7e\x52\x8b\x56\x79\xdc\x75\x26\xd9\x61\x15\xb7\xae\xda\xf4\xa1\x27\xba\x88\x3b\x75\xc3\xe4\x9c\xeb\x75\xd2\x26\x66\x88\x10\x24\xca\x62\x0e\xe7\xe9\xc3\x54\xbd\x0b\x98\x71\xdc\xb9\x8e\x1d\x2a\xae\x55\x16\xd8\xb2\xce\x0f\x64\xc6\x91\x77\x94\xd8\x1b\x76\x8d\x23\xc5\x9b\xdd\x4f\x6a\x89\x6f\xee\xf4\x2f\x10\x7a\x21\xdc\x44\x5e\x1a\xc5\xa0\x9b\xff\x38\x61\xef\x27\x92\x75\xc5\x35\x98\x55\xef\x81\xdb\x02\xda\x61\x7d\x62\x99\x9d\x51\x1e\x81\x76\x66\x43\x21\x2f\x78\x35\x9e\x73\x1f\xc3\xa0\x16\xac\xdb\xd7\x65\xae\x91\x9e\x72\x6d\xd8\x8c\xd7\x1e\xb9\xc6\x30\x9b\x5c\xab\x6f\x14\x8d\x3b\xaf\xdd\x64\x91\x83\xcb\x69\xf0\x0e\x52\xb1\x97\x9d\x71\xf6\x18\xa9\x33\xc5\xd6\x6e\xea\x78\x01\xf6\xf2\x64\x5e\xc1\x18\xd2\x8b\xec\x4e\x3b\xbf\xc0\x4e\xa9\xf1\xab\x3e\x9e\xd4\x92\x6d\x07\x61\xa7\x64\xbd\x10\x6d\x86\xb7\xae\x49\x9c\x0e\x48\x81\xe3\x80\x3b\x96\xd6\xda\xe3\x56\x7b\x97\xa1\xdb\x63\x45\x59\xa0\x7e\x0a\x6b\x92\xdd\x3d\xae\xfd\x1d\xed\x18\xdd\xf7\x11\xba\x17\x27\x28\x71\xee\x25\xec\xc5\xc4\xfa\x0a\xcf\xb1\x7b\xdc\x4f\x52\x34\x84\xca\x07\x7e\xe2\x72\x74\x06\xf4\xe0\xc6\x8e\x62\xd7\x6f\x3f\x43\x5c\x88\x47\xf0\xa8\x19\x4c\xb9\x9f\x48\x84\x7b\x70\x0d\x50\x16\xad\xb1\xb4\xdb\xf6\x6b\x5e\x10\x74\x35\x83\x91\xb8\x57\x5d\x81\x98\xfe\x87\x2f\xbd\xe2\xe0\xf8\x66\xd7\xf0\x8a\x21\xef\x3e\x83\xdd\x74\xce\x2d\x28\x16\x25\xb8\xdd\x74\xf4\x68\xed\xc0\x91\xeb\x6a\xa0\x35\x12\xf0\x05\x12\x73\xe3\x1a\xe3\x1c\x83\x67\xb5\x3e\x10\x36\x45\xa2\x6f\x26\xd4\x22\xa9\xce\x3d\x84\x3d\xbf\x68\x8d\xfe\x2d\x96\xc7\xc0\x7d\xb9\x90\x3e\xbe\xdf\xf5\x66\x5d\x6a\xaf\xbc\x90\xbd\x92\xcc\xff\x78\x5d\x5c\x5f\xd9\xbd\xb8\x76\x2f\xae\xdd\x8b\xeb\xc7\xfb\xe2\x6a\x3f\x04\x2f\xae\x5f\x36\x2f\xae\x78\xa7\x0e\x8a\xff\xfe\x6f\xaf\xaf\x0f\x17\xea\x2e\x6e\xe4\xdd\xc5\x48\x88\x89\xce\x47\x87\x59\xf9\x84\xd7\x36\x22\x5a\x57\x78\x17\x1d\xc5\x40\xde\x95\xf9\x85\x94\x7b\x43\xf5\x0c\x19\x5a\xe1\x5d\x2d\x4e\x3f\x67\x98\x1e\xa0\xe2\x89\xe3\xb2\x47\x8a\x81\xca\xaf\xa5\xcf\x58\x35\x67\x8e\xdc\x4d\x82\xb6\x65\x46\xa4\xdf\x52\xda\x89\xb7\x12\xf6\x5a\xb2\xd8\x93\x67\x2c\x97\xec\xac\xe5\xb5\xd1\x19\x0f\xe6\xdd\xca\x34\xe2\x85\x59\xca\x33\xa9\x84\x90\x2f\x4d\x7f\x03\xa8\x94\x4b\x4c\x71\x74\x7f\x50\xc5\x0c\xbf\x08\x84\xdc\x80\xfd\x01\x65\xcc\x75\xfd\xd0\x68\xe1\x1e\x3b\xee\x37\x78\xad\x5b\x0b\xb8\xf3\xda\x51\xf6\x8e\x92\xfe\x69\xaa\x78\x6b\xc6\x9c\xa2\xc6\x4c\xb3\x33\xf2\x32\x96\x5a\xcb\xd4\x5b\x81\x95\xc1\x9c\x16\x89\xb2\x56\xa8\xfc\xce\xba\x6e\x19\x43\x0f\xfe\x62\xe8\x3a\x02\xf9\x5a\x63\x3c\xcd\x73\x31\x5f\x48\xa3\xb6\x51\xbe\x89\xba\xda\xa4\x6c\xa9\x90\xf2\xe9\x8b\x97\x82\xa8\xb6\x92\xb8\x9d\x30\xf5\x03\x53\x47\xea\x27\x12\xa0\x22\xe5\x65\xb7\x13\x02\x56\x9d\xfd\x65\x3b\x8e\x40\x69\xdf\xf0\xfc\x20\x29\x8b\x11\x60\x70\x66\xcd\x93\x69\x96\x64\x07\x24\x9c\x0d\x20\x64\x6d\x90\xbf\x1e\xa1\xcf\x19\xa2\xa3\x6d\xd5\x79\xe7\x7f\x97\xe8\xd8\xd6\x9a\x57\xac\x8a\x7d\xaa\x94\x8d\x1a\x13\x97\x06\xbc\xee\xfa\xad\x16\xaf\xfb\x5e\xca\x83\xae\xeb\x35\x52\x41\x82\xec\x6c\xbb\x3a\x67\x9e\x54\x77\xa9\x9e\xc9\xae\xa7\xf9\xec\xbc\x46\x5e\x72\xc4\x02\x93\xd9\x58\x6d\x14\x67\x0c\x55\xc7\x9d\xd4\x8e\x02\xbf\xd6\xad\xa2\x5f\xcc\xf6\x26\xbc\x19\x45\x2b\x7a\xae\x8b\xa1\x04\x06\xcc\x08\xac\xff\xac\xe8\x5d\x50\x01\xcd\xef\xc4\xc5\xd9\x2b\x78\x40\xbf\x36\x44\xf7\xb6\x71\xcb\x38\x5f\x18\xda\xc6\x0a\xdc\x3b\xa4\x76\x5a\xf1\xfc\x4b\xbf\x5c\xaf\xdf\x84\xaa\xd8\xd4\x3e\xb3\x0d\xab\x67\x2e\x91\x31\x31\x8b\x39\x78\x17\x23\x9d\xb0\x9f\xe4\x3c\xd4\xe5\xe7\x55\x09\x33\x16\x18\x1a\xdf\xa8\x93\xd6\xa2\xcc\xd7\x50\x96\x2c\xd8\x05\x70\xe0\x3a\x70\x1f\x99\xfd\xff\x71\x59\xe2\xb7\x8d\x16\xda\xa7\x20\x91\xd6\xbc\x17\x2e\x73\xe7\x05\xa3\xec\x54\xf6\xd3\x05\x00\x6f\xed\x77\x89\xb9\xbb\x24\xe4\x9e\x98\x6f\x84\x5f\xf5\x43\x40\x2c\x34\xdd\x33\x3d\x57\xfb\xc1\x54\x37\xc8\x97\xf7\xee\x22\x7b\xec\xa6\x1c\xd8\x4d\x39\xd0\x17\xf6\xea\x23\x84\x0e\x0b\x36\xce\x79\x2f\x19\x00\x7e\x3e\x3b\x9f\x0b\x6d\x5e\x63\xbf\x2c\xfe\x6f\x9d\x20\x79\x42\x79\x08\x22\x48\xb1\x84\x7d\x16\xdd\x16\x3d\xad\x78\x61\xbd\x82\x91\xf9\x0f\x92\xf9\xad\x81\x44\x26\x9c\x4a\x11\x90\x48\x36\x94\x3c\x92\xc8\x1f\x8c\x16\x46\xe6\x67\x1f\xcc\xa6\xbc\xe5\xfc\xda\x28\x5b\xb0\x1f\x19\x76\xe8\x96\x1f\x4e\xb4\xbc\x75\x93\x6c\x49\x78\x8a\x6e\x2e\x62\xb0\xe5\xa5\xb5\x26\x07\x67\x03\xd1\xaf\xea\x06\xf9\xc4\x3e\xfa\x5e\x42\xf7\x4a\x2e\x5a\x70\xa7\xb7\xa8\x9c\x5b\xfa\x53\x99\x2e\x11\x08\x3e\xd6\x2e\x79\x75\xa3\x7a\xf0\x35\xf1\x0d\xe2\xa8\xd3\x07\xca\xf0\x80\xea\x3b\xc8\x75\xf4\x49\x67\x95\xd7\xd1\x8c\xa8\xfb\x3c\xa1\x17\xc9\x4e\xcf\xe3\x51\x75\x3e\x4a\xd8\x6d\xd3\xd6\x23\xe5\xe9\x54\xdf\x6c\x44\xca\x5e\x3d\xc0\x98\xe2\xac\xda\xf3\x33\xaa\xbb\x09\x1d\x6a\x79\xeb\xce\x5d\x84\x5d\x76\x42\xaf\x68\x2d\x0a\x93\x34\xf6\x20\x15\x87\x92\x9e\xe0\x32\xca\x77\xf6\x1c\xf7\xe6\xbf\x94\xe8\xa3\x5a\xde\x3a\xee\x3b\x1c\xfa\xbc\xb8\x92\x9c\xdf\x2b\xb1\x7f\x20\x27\x0a\xde\x14\x38\x44\x8b\x7e\xd5\xb3\x6e\x82\xbc\x07\x59\xa2\x3c\x3d\x9d\x88\x17\x22\xb6\x8b\x4e\xd9\x05\x11\xf7\x1a\xe5\x02\x01\x5a\xb1\x48\xdd\x5f\xf5\xeb\x5c\x8e\x5d\x2f\x87\xe4\xd1\x3d\x70\xfc\xe6\xb7\x75\x30\x77\x20\x12\xf9\x4e\x0b\x31\x52\x70\x85\x9f\x98\xbb\x63\x95\x4d\x7f\xdd\x5d\xea\xc4\x49\xaa\x95\x53\x76\xbf\xcf\xc7\x3a\xfb\x21\xae\xb3\x1f\xfe\x1b\xaf\xf3\xa4\x34\x38\x5f\xcd\xca\x0a\x90\xcd\x26\x1b\xd0\x13\x9c\x7e\x48\x80\xca\xe1\x5a\xb4\xae\xf1\xad\xa8\x18\xa0\xa4\x3d\x77\x94\x55\xec\x47\x36\x54\x9a\xc1\x90\x01\xdc\x97\x01\x9a\xf6\x0f\xbb\xac\xd5\x76\x59\xab\xcf\x12\x85\x9a\xf6\x29\xc2\x5e\x48\x0a\xf2\x30\x1b\xf3\x8d\x73\xb0\x23\xfe\xbc\xe1\x2f\x77\x10\xa5\x73\x02\x25\x83\x4a\x0d\xa3\x18\x2b\xba\x5b\x15\xcd\xa0\x4f\x6c\xdf\x9d\xcf\xb8\x3b\x77\xb9\xc5\x87\x0e\x6a\xdb\xcd\x5b\x33\x5b\x87\x9d\x43\x9b\x33\x5b\x45\xd0\x6d\xaf\x2c\x6d\x41\xaa\x04\x9b\xe9\x7c\x93\xb0\x93\xf6\xa3\x01\x18\xae\x0c\xae\x3d\xe3\xb6\x34\xaf\x75\x86\x8c\x20\xbf\xba\x41\x5e\x46\xe8\x4b\x08\x95\x3f\x9d\xe7\x10\x76\xdd\x71\xe4\x64\x7d\xc5\xd7\xe6\xcf\x27\x70\x7c\xf2\x8c\x66\xb7\xa4\x66\x7c\xb7\x9f\xda\xc9\xae\x9a\xde\x5f\x1c\xc5\x7e\x3c\xf2\xea\xd7\xcb\xcc\x97\xb3\xe1\x32\xe4\x66\x7e\xc5\x10\x7b\x39\x29\x78\xd1\x93\x6b\x45\xc3\x59\x79\x90\x42\xb3\xa2\x52\x68\xba\xbe\xfc\x00\x8e\xd3\x11\x37\x8d\xbd\x46\xc3\xaf\x01\x19\x85\xbc\x1a\x3a\x44\x49\x66\xc5\x30\x03\xd9\xd1\xe4\xe7\x85\x76\x25\xd5\x0d\xf2\x20\xa1\xcf\x32\x72\x3d\x47\x6c\x49\xe7\x79\xc6\x34\xf9\x3a\x97\x67\x9f\x8e\x18\xf3\x3a\x7d\x72\x41\xfa\x5c\x1b\x7a\xf9\xc9\x5b\x16\xec\xcf\x93\x71\xf3\xbc\x3d\x0b\xfc\xec\x3a\xac\x39\x3b\xb7\xfd\x06\x67\xe7\x7a\xdb\x3b\x36\x35\x23\x98\x99\x53\x6d\x1e\x2e\xa4\x5e\x6d\x65\xb3\xc6\x1f\x28\xd1\x27\x6c\xb1\x7c\x0b\xb0\x1c\xce\x9b\x4b\xec\x9a\xde\xc7\x03\xaf\x5d\x75\x83\x7c\x83\xd0\xaf\x12\xba\x57\x0e\xc5\xf9\x3c\x61\x77\x13\xb5\x05\xb2\xdb\xc5\x00\x7b\xc8\x0d\x5a\xad\xae\x5d\xaf\xbb\xb8\xfd\x5d\x90\x42\x1a\x57\xbb\x7a\xeb\x28\x5c\x45\xaf\x18\x20\x55\x45\xc1\x5e\xa6\xef\x2a\x15\xba\x3f\x16\x99\x9b\x9c\x3b\x4b\x2c\x29\x7a\x91\xc5\x58\xf1\x30\xea\x2c\x37\xf3\x58\x17\x01\x47\x3b\x76\x10\xd5\xbc\x94\x4b\xa3\x82\xfc\xb6\xae\xe1\x2c\x32\xdc\x3c\x3b\xae\xaa\xba\x41\x5e\x48\xc0\x59\x10\xf6\xfb\xb3\x59\x64\xc2\x2f\xc8\x8a\xd2\x6d\xdf\xe7\xd1\xaa\x98\x6e\xbe\x36\x21\x61\xf9\x2a\x6b\x7e\xda\xac\x48\xca\x33\x01\xad\x4f\x5c\x0c\xff\x98\xfb\xef\xc5\xc3\x85\xde\x14\x30\x2b\x96\x37\xc5\xd7\x87\xd8\x71\x78\x6a\xee\x38\xf4\xcf\x0c\xba\x15\x8d\x60\xa3\x12\xf5\x83\x91\x22\x8c\xea\xdc\x15\x9b\x43\xdc\x24\xee\xd8\xf5\x3c\xf5\xdc\x06\xf7\xd2\x4e\xcc\xc7\xb5\xc5\xea\x45\x43\xf4\xce\xcc\x8d\xe0\x3b\x84\xfd\xf5\x26\xe0\x33\xb3\x19\x1f\x0b\xde\x1a\x12\xa3\x9f\xbb\x73\xda\x17\x14\xf4\x98\x6e\x9d\x63\x02\xd6\x1f\x1a\x5a\x8d\x4e\x28\x23\x88\x5c\x27\x8d\x2a\x32\xd5\x12\x36\x8c\xed\x6e\x02\x24\xf7\x5c\x65\x65\xba\x9d\xb5\x16\x01\x19\x39\x40\x4f\x55\xc5\xb1\x4a\xa3\x99\xf4\x83\x85\xcc\xea\x62\x36\x54\xca\x1f\x69\xc4\x34\x3d\x66\x63\x6b\x2a\xdc\xb1\xba\x9f\xac\x94\xb3\x50\xfb\xb2\x5b\xad\x56\x6d\xe3\xe4\x1b\x8a\x73\xfc\x9f\x3c\xba\x60\x6d\x85\xef\x0c\xb3\x3b\x73\x8e\x35\x27\x8f\x2e\x0c\x1c\xf6\x25\xca\x9e\x0b\x07\xe2\x11\x0c\xfe\xd0\x1b\xe9\x2b\x43\xf4\x4e\x35\x8b\xeb\x6c\x05\xa3\x46\x64\xf0\x37\x5f\xb7\xd7\x5a\xf4\x41\xc6\x8e\x9c\xad\x73\x47\xd8\xb0\x0e\xd4\x1f\x98\xf1\x51\xf7\x11\x76\xef\xe6\xf1\x51\xa2\x23\xd8\xb9\x73\x1e\x19\xb5\xed\x41\x18\xe6\xfc\x57\x22\x18\xfa\x2a\x8f\x9d\x17\x12\x76\x3b\x72\xd8\x8a\xc9\x51\x57\xb5\x58\x99\x5e\xdf\xf4\xf3\x37\xb5\xcf\xdd\x5f\x68\xd7\xcc\x02\x69\xbf\x4e\x11\x76\x1e\xc3\x57\x21\x6a\xbe\x8e\xf1\x1e\xb5\x48\xba\x63\xc3\x6b\xc0\x65\x10\xfd\xd5\x89\x4a\x35\x71\x86\x9b\x50\x65\x75\xab\x6e\x90\x0f\x8f\xee\x4a\xaf\xbb\x86\x81\x5d\xc3\x40\x5f\xc3\xc0\x27\x95\x61\xe0\x7e\x32\x40\x30\x92\x3e\x9d\x60\x17\xf8\x15\xd2\x63\x18\x58\xe2\x4d\x6f\xd5\x8f\x74\xac\x5d\x66\xa4\x3b\xbf\x26\x02\xfa\xa7\x82\xe2\x21\xa7\xfd\xa9\x41\xa2\x9c\xb2\x91\xc0\x47\xec\x15\x44\x32\xe4\x99\x37\x05\xec\x41\x2b\x5b\x07\xde\x82\x3f\xac\x31\x9d\x0d\x7e\xba\xee\x63\x5e\x08\x7f\xd3\x68\x61\x70\xac\x2e\x0f\xea\xc2\x1f\xec\x63\x3f\x6b\x3d\xb1\xb5\x57\xfa\x95\xa9\x27\xfc\xc7\x5d\x3d\xe1\x76\x29\xed\x17\xb4\x9e\x70\x83\xb0\x97\x64\x7a\x42\x53\x13\x91\xdd\x87\x4a\x09\x21\xfd\x8c\x02\xf0\x57\x3c\xf7\x42\x06\xac\xeb\xc4\xf6\x93\x0e\x67\x3b\x6e\xf7\x02\x79\xe8\xe8\x0a\x77\x9e\x74\xd8\xa2\x2f\x79\x2a\xf5\xfb\xa5\xcd\xa9\x14\x68\x0a\xcf\x94\xd8\x15\xd6\x93\x1c\xed\xf6\x52\x1c\x0d\x9a\x5d\x6d\x87\x91\xaf\x10\xfa\x17\x84\xd2\x86\x1f\x7a\x81\x7f\x3b\x8f\x13\xe7\x4f\x08\xfb\x2d\x72\x54\xff\x86\x2d\x1b\xba\x51\xdb\xbb\xad\x93\x9d\x46\x24\x0e\x52\xc9\x28\x45\x53\x44\xc4\xc4\xa0\xdb\x96\x17\x62\x7e\xc6\x98\xb7\xa2\x55\x9d\x6b\x0d\xb6\xa7\xe4\x8e\x07\x3d\xb3\xa9\x97\xac\x24\x13\x5e\xbd\xe5\x87\x7e\x92\xf2\xb8\x22\xf3\x23\xf6\x3b\xa5\x39\xef\xe1\x97\x97\x8a\x65\x41\xfb\xda\x73\xfe\x27\x61\xc7\x72\xcf\x30\xf9\x5c\xa6\x30\xc9\xd2\x22\x6d\x7e\x19\x6e\x90\x37\x10\xfa\x3a\x42\xf7\xb4\x9b\x5e\xc2\x9d\x97\x11\xf6\x1c\x32\x27\xfe\xd4\x19\x0a\xe4\xe7\x99\xb7\x20\x94\x54\xac\x42\xb8\xe9\xb5\xba\xe3\x19\x32\xf0\x38\xf6\xd3\x9f\x2c\x9a\x92\xa8\xce\x9d\xef\x52\xe6\x43\xce\x07\xa0\x54\x82\x3a\xf2\x18\xf5\x1f\x7e\xe8\xde\x98\xb5\xed\xce\x78\x35\xa9\x18\x01\x49\x50\x1a\x54\x7b\x91\x2d\x55\xae\x04\xaf\xd6\xe4\xee\x18\x64\x16\xf1\x43\x97\xa7\xb5\xfa\x78\x75\x83\x7c\x70\x57\x2c\xd9\x15\x4b\x76\xc5\x92\xfe\x62\xc9\x6f\x2a\xb1\xe4\xcd\x84\x8e\x6f\xcd\x7b\x44\x75\x94\x48\xd6\x36\x15\x48\x3c\xa9\x77\x3b\x0f\xe2\xc7\x5f\x67\xe2\xc7\x97\x07\x81\x9a\x80\x1e\xa3\xe4\xf1\x2e\x72\x22\x4b\xf0\x18\x74\x75\xc6\x1d\x2b\x25\xa3\x52\x19\xce\x69\x14\x44\xa9\x09\x53\x6a\xce\x79\xa5\x6a\x3a\xef\x42\xc9\xf1\xad\xaf\xfc\x71\xe7\x40\xe1\x95\x1f\xd5\x7b\xe4\x91\x6f\x17\x67\x05\x12\x45\x27\x51\x31\xe5\x7c\x9a\xb0\xab\x8c\xdf\xfd\xb3\x02\xa9\x69\x3a\x90\x68\x7c\x86\x33\x04\x3c\x2c\xce\x90\xbd\xf2\xc9\x06\xf9\x65\x3a\x4e\xd5\x2f\xe7\x71\xec\x11\x8b\xf2\x2b\x03\xd3\x21\x3b\x4a\xf3\xd2\x43\xe3\xe7\xd9\x93\x4e\x1a\x65\x40\x05\x5d\x56\xb8\x20\xca\xde\x55\x76\x67\xd6\x91\x76\x62\x28\xca\x6c\xa8\x7e\x59\x75\x7e\x6f\xb4\x30\x4f\x39\x0c\x51\x2a\xdb\x9d\x2f\x8e\xb2\x27\x9e\xb4\xd4\xef\x40\xec\x60\x4e\x45\x93\xb6\x6a\x5e\x10\xf2\x7a\x27\x10\x44\x2f\xee\x04\x3c\xa9\x6e\x90\x57\x8d\xd2\xaf\xec\xa1\x13\x6d\xb0\x47\xc4\xbc\x3e\xdd\x11\x6d\x2f\xe8\x82\xb3\xcb\x61\xa4\x1f\xcf\x40\xae\x20\x71\x0d\xbd\x63\x0f\xfb\xca\xb0\x98\x11\x59\x25\xe0\x54\x06\x81\x8b\xf5\x00\x8c\x90\x7c\xe1\xb6\xa3\x3a\x5c\x1d\xa2\x2b\x92\x25\x4a\xbc\xd4\x4f\x24\x4a\xaa\xee\x1c\x5f\x17\x84\x16\x54\x9f\x46\xc0\x1b\x6c\x5f\x85\x74\x87\x09\x3f\xfc\x14\x08\x70\xad\x19\x45\x90\xd1\x07\xc6\x08\xf5\xae\xfa\x11\x5c\x4e\x38\xe1\x32\x95\xa5\x3c\x17\x46\xf5\xa8\xd1\xcf\x3e\xf3\x13\xcc\x9d\xaa\x27\x41\x71\x22\xa2\x9a\x0c\xf4\x11\xfc\xf4\x13\x41\xd1\x5b\x90\x19\x9f\xfb\xcb\x4d\x9d\x0e\x4c\x3b\x21\x67\xd5\xb6\x38\x00\x94\x07\x81\xce\x9d\x6a\x4c\x7f\xe6\xdf\x96\xb8\x63\x79\xff\xb5\xb2\x7a\xdf\xb3\x1c\x85\xd3\x05\xe9\x8e\xaa\xe3\x65\x57\xba\x75\x88\xdb\xae\xd3\x12\x53\xe7\xa7\xca\xcc\x91\x36\x63\x30\x71\xc1\x54\x04\xb2\xe1\xc8\x82\x11\x14\x17\xb8\x57\x87\x00\x02\x86\x83\x63\x1a\x31\xb0\xd3\x52\x31\x52\x30\x3e\xe5\xa6\x88\xae\xe5\x31\x46\x87\xc0\x97\xf0\x66\x26\xeb\xdb\x13\xf5\x47\x63\xc9\x78\x36\x99\x4d\x7f\xb9\xa9\xe6\xd2\x8b\x51\x47\x6e\xaf\x81\x65\x27\xbc\x86\x1e\xa1\x57\x6d\x49\x2c\xe7\xd4\xb7\xd9\x7c\x2d\xf2\xb8\x45\x7f\x7b\x88\x56\xfb\x4d\x68\x9f\xfd\xfd\xfd\x12\xad\x0c\x46\x9c\x55\x62\xf4\x3f\x2e\xc9\xf8\x0d\xbd\x42\xd6\x1a\xf7\xd9\xd1\x30\x78\xc1\x0a\xb4\x78\xea\x8a\x93\x91\xad\x74\xea\x0b\x4a\x21\x51\x68\xf0\x74\x49\x9e\x41\x1d\xad\xba\x1b\x29\xa8\x56\x69\x28\xda\x49\x0f\x6a\xdc\x4b\x34\x5e\x9b\xec\x45\xd4\xe2\x68\xae\x75\xeb\x30\x31\xd0\x05\xae\x66\xc7\x1d\x83\x24\xab\xf5\x0e\x97\xa6\x7e\x64\x62\xc6\xcb\xc6\x4d\x03\x47\x54\x1c\x41\x19\xd3\x94\xc6\x20\xfb\x18\x61\x0b\x7c\xd5\x97\xa1\x5c\xa2\x72\xe0\xa1\x04\x9f\x04\x23\xa1\xf7\x16\x63\xb3\x89\x19\x9f\x12\x3b\x0d\x16\xe9\xb9\x7b\x90\xe0\xeb\x27\x19\xc9\xaf\xe9\x47\x3d\x29\xe1\xb0\x05\x4d\xf0\xe5\x75\x0c\x28\x82\x77\x12\xfa\x88\xc0\x4b\xd2\x1b\x54\x62\x3d\xc8\x9b\xb7\xb2\xf3\x4c\xcd\x07\x8f\x7b\x09\x66\xe7\x73\xd7\xb8\xbb\x1c\xa5\xd9\x6c\xa1\xac\x89\x48\xb2\xba\xb7\x55\xfa\x12\x42\x1d\xc8\x14\xad\x73\x03\x43\x1f\x56\x77\xde\x87\x27\x66\x7d\x90\x91\x20\x72\x66\x64\xfa\x61\x9c\x7a\xc8\xaf\x80\x8c\x04\xac\x29\xc4\xcb\x55\xe9\x53\xb2\x04\xd1\x27\xd8\x93\x6f\xe8\xb4\xbc\xd0\xd5\xe9\xa1\xe5\x1b\xd7\x0f\xeb\x10\x9e\x19\x2e\x6b\x30\x45\x14\x06\x21\x49\x60\x96\xe5\xb8\x6a\x67\x85\x57\xf9\x95\x9f\xcc\x0e\x8f\x2d\xc5\x3e\x6f\x8c\xe7\x13\x24\xeb\xbe\x1e\x48\x36\xad\xeb\xb8\x66\xaa\xae\x67\x97\x2f\x58\xec\x90\xae\x42\xdf\xc2\x8b\xb1\x90\x56\x8e\x7a\x41\xc2\xcb\xee\xe9\x70\x25\x8c\xd6\xec\xda\xca\xf2\x2e\x7f\x3c\xfb\x49\xe5\x6d\x09\x44\x2f\x5b\x25\xb3\xf4\xaf\x95\x0a\x93\xc8\xc8\x7d\xd9\xf0\x97\x95\x35\x95\xb0\x4e\xfe\xa1\x09\x94\xe5\xca\x2b\xc0\x68\x2d\xf3\xdb\x83\x60\xf7\x5a\x2a\x21\xc6\x92\xce\x12\x1e\xdd\x31\xbe\x5e\x0b\x3a\x48\x77\x25\x47\x3c\xae\xf5\x0d\x61\x14\x56\x42\x3f\xa8\x6e\x90\x67\xd1\x2e\x1d\xc5\xfa\x4e\x78\x6d\x27\xa0\x47\xb6\x24\x6d\x53\xaa\x74\xbe\xcb\x2c\x7b\x85\xac\x86\x95\x53\xc4\x03\xde\xed\x40\xe2\xea\x42\xf4\xeb\x3f\xb9\xd5\xfc\xe0\xca\x7d\xe8\x27\xd9\x2d\xf9\x87\x39\x45\x4d\x92\x5f\xd9\x86\xbf\xec\x7a\x49\xe2\x2f\x87\x48\xd5\xc4\xf7\x55\xc1\xda\x57\xcd\x2e\x57\x37\xc8\x97\x7f\x02\x32\x13\x78\xb5\xd4\x5f\xe5\xce\x7d\x25\x7a\x68\x20\xe2\x6e\x0d\xfc\xce\xd2\x24\x7c\x2e\xb3\x2c\xcb\xcb\xaf\xc9\x6b\x2b\x40\x29\x79\x5d\xf5\x48\xdf\x92\x3e\x46\x5a\xae\xf2\xa0\x8b\xb8\xdb\x55\x57\x56\x01\xd4\x5c\x4b\x96\xca\xac\x6f\x2a\x3f\x24\xf3\xab\x06\x3b\xa9\x46\x89\x6d\x94\xdd\xc8\x2e\x2e\xce\xf8\x8d\x62\x27\x1f\x8b\xa2\xac\x10\xe6\xd3\x81\x5c\x9b\xa1\xab\x20\x20\xbc\x34\xe5\xad\xb6\xc2\x13\xec\xc8\x78\xc8\x5c\x03\x32\x7a\x16\xb4\xc8\x5e\xe8\xf2\x38\x8e\xe2\x2a\xfd\xde\x30\xdd\xa7\xe6\xdb\xf9\xe6\xf0\x4e\x66\xf1\xbe\x61\xdd\xd2\xc0\xf3\x08\xb3\x25\x2f\x90\x8e\x90\x8e\x6f\x69\xf2\xb0\xcf\x62\x43\xfe\x10\x94\xa9\xcb\x59\x0d\x59\xf5\x52\xe5\x97\x24\x51\xcd\xf7\x8c\xc6\xda\x5e\x37\x88\x3c\x08\xd1\x0b\xc0\xfd\x05\xdd\x28\xbc\x20\x0a\x97\x15\x04\x3b\xe6\xcd\x37\xc9\x9d\xf6\x85\xc2\x5a\x0c\xc6\x12\x8e\x85\x54\x99\xf8\x2a\xe5\x3e\x44\xcf\x22\xdb\x2a\xae\x3a\xd9\x74\xd6\xb9\xb2\x8c\xe8\x54\xf3\x92\x7d\xe8\x87\x7a\x85\xaa\xd9\x5a\x81\xcb\x00\x8e\x56\xeb\xfb\xe5\x21\xc9\x82\x15\x65\x0d\x4d\x2f\x71\x97\xb8\xb8\x6c\xcc\xa9\x4e\x23\x09\x93\x72\x8b\xf2\xb0\xb9\x11\xb3\x8b\x60\xba\x20\x19\x5a\x0a\x80\x6b\x29\x66\x39\x8f\xdc\x96\xb7\x52\xbc\x67\xe0\x19\x6e\x70\xf9\x64\xa9\x0b\x5e\x64\x98\xed\x0a\xd4\x40\x7e\xdd\xd3\x4a\x17\xab\x27\x6a\x01\xb4\x6e\x0c\x4e\xb4\x1e\x34\xfd\x8d\x7d\x74\x0f\x6c\x43\xe7\x35\xfb\xd8\x8b\xf6\xcd\x88\x3f\x2d\x2c\xd6\x2e\xc0\x52\x06\xbc\x85\x93\x16\xd6\xfc\x40\x35\xd4\xbb\x4b\x24\xdb\x64\xf5\xb6\xea\x42\xa5\xa8\xde\x81\xd4\xb6\x65\x64\xeb\x11\x67\xa4\x9c\x3b\x39\x59\xef\xfb\xd7\x8f\x5b\xc9\xd8\xf1\x62\x29\x36\xa9\x08\x03\xc3\x71\x22\x8c\x3d\x0a\xfb\xaf\xa7\x91\x7c\x3d\xf0\x55\x14\xab\x59\x2e\x5c\x23\x14\x15\x7a\x06\x2a\x98\xbe\xba\xdf\x40\x97\x34\xe5\x07\xb8\xd6\xf4\x03\xc1\xce\x85\x35\x99\xd3\x18\xe7\xc8\x8b\x03\x9f\xc7\x48\x12\x12\xc5\x0a\x46\x6b\xa1\x6a\x3e\x1b\x8e\xf8\x0c\x8b\x8d\x67\xfc\xab\x0c\xcb\x87\xd0\xcc\x38\x0a\x82\x25\xaf\x06\xb8\x7d\x16\x05\x33\xb5\x89\x49\x14\xac\x72\xd7\xab\xc5\x51\x92\xe8\xdd\x19\x73\xd8\x8e\x55\xf7\xb8\x97\xe6\x3b\xa3\x76\x5c\x36\x15\x88\x3a\x59\x40\x63\xc6\x15\x25\x1e\xa0\x4f\xa0\xa2\x93\xfa\x4f\xd1\x66\xcd\x83\x04\x03\x70\x52\x3a\x09\xf2\xb4\xed\x28\x49\xfc\x25\x44\x08\x50\x3d\x07\x89\x0b\x76\xeb\x52\xd7\x6d\xf8\xeb\x7a\xf7\xe7\xee\x2f\x3f\xec\x5d\x62\x84\xfd\xad\x79\xa1\xdb\xf0\xa5\x74\x86\x2e\x2b\x3d\x6c\x6d\x9d\x2f\x75\x96\x97\x01\xf5\xb2\xeb\x26\xdc\x8b\x6b\x4d\xd5\x10\x36\x9e\x31\x6b\xd6\x31\x0f\x22\xb5\xef\xf1\x3a\x6f\x0a\x16\xaf\xa2\x59\x3c\x3c\x60\xed\xd4\xb8\x8a\xb0\x3a\xc8\xf1\xfc\x44\x57\x32\x9f\x08\xac\x04\x13\xac\xef\x99\x28\x86\xf5\xd6\x75\x4b\x88\x7a\x21\xc1\x4b\x55\x33\x6e\x87\x40\xa3\x3e\x26\xa9\xb7\xe4\x07\x42\x70\x91\x4d\xe1\xb7\x29\x5f\x4f\xf3\xeb\x2f\xaf\x47\x5b\x09\xf3\xdd\x11\x7a\x61\x60\x2e\x99\xf3\x57\x23\x3b\xb9\xa3\xde\x3d\x62\x5f\xa7\xdb\xbb\xa8\x1a\x42\xe2\x57\x3b\x08\x1c\x17\xfd\xd4\xe5\x21\x24\xfc\x16\x57\x82\xba\x4e\x07\xbb\x88\xf1\x4a\xc9\x53\xda\x25\x5e\x8b\x5a\x92\x2b\x2a\xba\xfa\x33\x87\x49\xe8\x57\x9d\x63\x8c\x38\x37\x20\x1f\xf2\x55\xfa\x09\xcc\x7f\x80\x70\xb6\x20\xd4\xd7\x8c\x9c\x5c\x92\xd1\x08\xba\xae\x2f\x88\xa1\x10\x29\x25\x64\xaa\x7b\xe8\x60\xa5\xe5\x87\x9d\x94\xbb\x49\xe4\xad\xb8\x6d\x1e\xfb\x51\x1d\x41\x2c\xc4\xd8\x74\x57\x02\xe9\x56\x0a\xd7\x51\xd4\x28\xea\x41\xa6\x0d\x2f\x64\x7b\x44\x11\x49\xb2\xe5\x28\x38\x46\x7c\xc3\x55\x89\x0d\xc3\x91\xec\x3b\x3f\x55\xf7\x64\x94\x2a\xb5\x4f\xa3\x80\x70\xe3\xb5\xc7\xc1\x4d\x2f\xf4\x03\x77\x4c\xac\x8b\xe4\x08\xa4\x3b\x9e\x94\x73\xed\x79\x17\x87\x27\x48\x22\x0b\x6e\xc0\xac\xa8\x2c\xfa\xe4\xa9\x45\xb6\x2a\x34\x06\xe7\x05\x6b\x5e\x37\x11\x34\xa1\xd3\xe2\x75\x77\x19\x7a\x2c\x48\x80\x71\x62\xe0\xfa\x85\x12\x12\x19\x25\x33\xbc\x49\xa5\x66\x8b\xa7\xcd\x08\xe6\x45\x2d\x7c\x46\xc0\x8d\x43\x66\xac\x73\xc8\x93\xa4\x8c\x89\x20\x64\x0a\xbf\x5a\x13\xa3\x8e\x62\x39\x97\x99\x3c\x22\xb6\x88\x24\x22\x8d\x4e\xda\x89\x79\x95\xfe\x77\x52\x18\x9c\x20\x0e\xd6\xb4\xc7\x5b\x51\xa8\xb1\xf8\x9d\x0f\x13\x76\xb4\xe0\x39\x58\x4e\x13\x09\xab\x13\xb5\xb9\x64\xe8\xeb\x50\x2a\x71\xe3\x4e\x18\x4a\x36\x16\xbc\x85\x04\xeb\xb7\x41\x22\xda\xa2\x0f\x93\xd9\xd0\x54\x4d\xce\xd3\x06\x88\xad\xb0\x1b\x67\x07\xd4\x5f\x59\x12\x77\x83\x0b\x0a\x00\x27\x15\xf2\xf8\x7c\x64\x1f\xfd\x99\x3e\xe3\x04\x7f\x98\xd7\xef\x63\xa7\xd4\x0f\xa5\x43\x5c\x6b\x46\x41\x66\x18\x16\xb4\xe1\x24\x28\x42\xb1\x1d\xb0\x0b\x02\x5b\x16\xf3\x65\xb0\x4e\xaa\xeb\xbe\xe5\x89\x5f\x86\xe3\xcc\xdf\x8d\xec\xda\x02\xb7\x69\x0b\x3c\xa9\xfc\x66\x66\xd8\x85\xc7\xe5\x0a\x80\x1a\xda\xd4\x2d\x8e\xd3\x03\xf4\x09\x03\x5d\x12\xbb\xb6\xc5\x87\x90\xc7\xca\xdc\xd6\xe6\xab\x8a\xf3\x73\xfd\xcc\x57\x45\xce\x2a\xaf\x1a\xea\x6b\xcf\x51\x5a\x64\xe7\xdb\x25\x76\x3f\x99\xc4\x5b\x3b\x91\x0f\xf3\xb1\x3f\x9d\xd0\xe0\xc6\x94\x9c\x1e\x35\x2c\xa3\x07\xf8\xcf\xbb\xb7\x75\x38\x08\x6d\xd1\x2a\x04\x0d\x88\xdb\x48\x9d\x80\x27\x2a\xd3\x07\xdc\x97\xb9\x16\x4e\xcd\x6b\x93\x85\xec\x83\x41\x37\x32\x9b\xa2\xdd\x4b\x71\xd3\x24\xd5\x33\xe4\x11\xa1\x31\xa0\x45\xf1\x70\x83\xbc\x8e\xd0\xd7\x10\xda\xfb\xc6\xb9\x93\xb0\x6b\xe6\xa5\x6a\xbe\xea\x4e\x6a\x3a\x59\x54\x35\x70\x42\xf0\x27\x68\xcd\x4f\xcd\xe7\x8c\x04\x97\xd3\xc3\x03\x72\x7b\x66\x1f\xe8\xaf\x8e\xd0\x4b\xb6\x28\x37\x9f\xe9\xd1\x9d\xaf\xec\x61\x6b\xbd\x0b\x94\xa1\x15\x20\x41\xd0\x3d\xb7\x52\x39\x21\xe9\x2b\xbb\x9e\xbb\xc2\xbb\x48\x25\xc1\x77\x88\xc7\x9e\x2e\x0c\xa8\x63\x92\x88\xaf\xf0\xae\x92\x9b\x3b\xe0\x44\x89\x18\x70\xfb\xd4\x17\x1b\xe4\xb3\xc3\xf4\x3a\xc4\x81\xbb\x8a\xfd\xdc\x62\x53\x2d\x3c\xa0\x92\x29\x4e\x4f\x77\xa6\x4f\x68\xf8\x4b\x09\xd5\x35\x3a\xcf\x21\x2c\xb5\xa0\xe2\x57\x78\xf7\x40\x22\xb1\xd0\xa2\x10\x82\x36\x40\xd1\x27\x37\x93\xa2\xe6\x37\x0b\x49\x4b\x0f\x05\x57\x68\x36\x2c\x0b\x76\x4b\xfc\x33\xb3\x2e\xee\xf7\xb2\x3b\x1d\xf1\xe4\x64\x94\xc2\xcf\xaa\x7b\x4c\x6a\x3c\x8e\xdb\x80\x75\xff\x52\xa2\x23\x58\xaf\x38\x0f\x9f\x2f\x4d\x86\x2e\x2c\xb1\x68\xcf\x24\xb5\x89\xe6\x13\xf5\x14\xfa\x89\x20\x76\x51\xac\xda\x85\xab\x10\x9d\xb1\xb0\x0a\x53\x3b\x0a\x12\x49\x61\x1d\xd8\x5d\x51\x8f\xd9\xe1\x4d\xaa\xeb\x5f\xd5\x31\x88\x6c\x39\xde\xf7\x63\xe9\x19\x94\xf8\xe1\x72\xa0\x4d\x73\x65\xc9\x1e\x64\x39\x0a\x52\x1e\xb7\x63\x9e\xa5\x29\x90\xb0\x75\x92\x41\xc7\xfa\xf0\x76\x0f\xbc\x1a\xaf\x2b\xbb\x0d\xdc\x4d\x5e\xca\x97\xfd\x9a\xdb\xe2\xf1\x32\xe0\xce\xd5\x9a\x9b\xe1\x49\x3e\x67\xb8\xaf\xc2\xd6\x3c\x37\xce\x97\x86\xd8\x5b\x04\xa9\xea\x04\x01\x60\x3a\x80\x7b\x5b\xef\xb9\xd5\xb6\xc2\x30\xca\x62\xd8\x17\x9b\xdc\x36\x4e\x21\xb9\x41\x5b\xe0\xe4\xc9\x69\x05\xc5\xb5\x28\x33\x31\x99\x0d\x4b\x9c\x58\x25\x85\xc0\x71\xeb\x2c\xc9\xed\xa8\xb8\x43\xf3\x83\xea\x06\xf9\xcd\x92\xa0\x3f\x0f\xcf\x1b\x27\xc5\x6e\xbf\xa2\x1f\xd1\xb1\xfa\xb7\xd4\x55\xcc\x35\x1c\xb0\x64\x07\xd6\xc9\x3e\x04\x05\xb2\xf2\x40\xc7\x8e\xfa\x3c\xa8\xef\xa8\x4f\x60\x0d\x38\x97\x7d\xfa\xc2\xde\xbe\x8c\x2e\xb8\x54\xbe\x7f\x2f\xbb\x56\xfd\xe8\xef\x4d\x89\xd1\xb3\x5a\x17\xae\xd0\x65\x05\x7b\x5b\xdd\x20\xdf\x1e\xa1\x7f\x46\xe8\x05\x35\xd3\x48\xf2\x49\xb2\x13\x79\xfd\x65\x64\xb6\x07\xd5\x24\xd1\x7a\xb8\x65\x9e\x16\x58\x54\x90\xb1\x12\x7b\x6c\xba\x1b\x7a\x2d\xbf\x26\x39\x7e\xac\x58\x85\x2f\xba\xcb\x5e\x9a\xa5\xee\xe1\xa1\x10\x7e\xb2\xc0\x57\x25\x24\x68\xe9\x5d\xd9\x54\xe9\x0b\x08\xa5\x5c\xf9\x78\x4c\x3b\xeb\x6c\x65\xda\x48\xf5\x79\x32\x4a\x41\x10\x90\xa2\x4b\x82\xc7\x1c\x64\x45\x5d\x45\xd5\x9d\x47\xd7\x50\x69\x26\x06\x75\xee\xa1\xea\xa1\xc3\x55\x37\xe1\x3c\x63\x77\xfc\x24\xe9\x64\x59\xb1\xae\x38\x74\xf5\x15\x57\x98\x87\xf9\x26\xba\xb7\x1d\xd5\xa7\x66\xa7\xe7\x9d\xa3\xec\xea\x39\xfc\x33\x7f\xdd\x63\x8a\x29\x99\xb8\x48\xeb\xa3\x4c\xcb\xb2\x45\x1f\x08\xa5\x32\xe6\x2a\x9e\x9d\x76\x12\xd6\xc8\x52\x79\xa3\xbb\x89\x61\x91\x41\x66\x35\xea\xd4\x55\x98\x96\xf6\x78\x44\xf5\xd5\x11\xf7\x9a\x39\xf9\xe2\xa4\xd7\xe2\xd7\x1e\x99\x98\xd0\x0f\x16\x64\xf6\x1e\xb1\xde\xb3\xd3\xd7\x9a\x7d\xa8\xd1\x91\x14\x60\x58\x9c\xa7\x32\xb7\x77\xf1\xe5\xb1\xc0\x22\xd6\xb1\xb8\x84\x8e\xd1\x9f\xdd\x3a\xb5\x8d\xf8\x90\x7e\x86\xd0\x0b\x3b\xa1\x34\xb6\x8b\x95\x77\x7e\x97\xb0\x77\x93\xd3\xe6\x23\xb8\xdb\xe3\x28\x48\xe4\x41\x55\x6f\xb4\x1a\x2b\xe4\x6b\xe0\x01\x53\x75\xaf\xef\x2a\x81\xbf\xac\x8f\x84\x51\xd3\xb6\x7d\xf4\x81\x8d\x83\xff\x4f\x5c\xdc\xf2\xc2\x8e\x17\x54\xc4\x8f\x8a\x72\x74\x8d\x7b\x71\xbc\xff\xf2\xe1\x85\xa8\x7b\x99\x93\x99\xf3\xb1\x87\xa3\x03\xd3\x4e\x5c\x7c\x43\x94\xca\x7f\xf0\x30\xfa\xe1\x12\x1d\x95\x1e\x50\x3c\x71\xde\x55\x62\xaf\x25\x4a\xfc\xd2\x8f\xdd\x98\x7b\xb5\xa6\x27\x95\xa5\x99\x0f\xc3\x4d\xc0\xb3\x4a\x87\x00\x7b\xeb\x40\x3a\x57\x6f\xd5\xf3\xcf\x7e\xc2\x74\x37\xcc\xcd\x71\x90\x56\x69\x79\x20\xf2\x23\x5d\xcc\x1e\x24\x07\xe8\x63\x2c\x29\x01\x6e\xd7\x0a\xdc\xb4\x15\xc1\x95\xed\x75\xf6\x88\xeb\x8a\x8a\x92\x3f\x53\x50\x52\xde\xce\x5d\x67\x9f\x33\x02\x5f\x51\xfa\x29\x42\xf7\x7b\x01\xc4\x9c\xc3\xa6\xbb\x8f\xb0\xe5\xc9\xec\x77\xfe\xf0\x66\x90\x16\x7a\x11\x32\xd8\x02\x3d\x59\x40\xb3\x32\xe7\x12\x3b\xb6\x74\xca\x6b\x7b\x35\x3f\xed\x9e\x63\xd4\xa2\x6f\x10\xba\xaf\x26\xab\x76\xbe\x48\xd8\xf3\x89\x6a\x28\x3f\x86\x34\x4a\x41\x33\xd8\x33\x92\x1d\x87\x96\x66\xc9\xa6\x2b\x2a\xca\x54\x75\xe5\xdc\x0e\xf2\x2d\x25\x4a\xb5\x63\x40\xe2\xbc\xa6\xc4\xee\x24\xda\x1f\x45\x45\x07\x68\xee\x55\x1d\x1b\xed\xbb\x69\x3b\x16\x6c\x1f\xdd\xc7\xdc\xd3\xba\x1a\x73\x4f\x5f\x4a\x0f\x0e\x12\xaf\x67\x7a\xd1\x9c\x97\x5d\xfd\x0a\x42\x47\xf0\x02\x76\x5e\xb0\xcd\x4b\x1e\xdd\x5f\x6f\xea\xf1\xeb\xb0\xac\x27\x06\x0d\x71\x57\x7d\x0f\x7e\xd4\xf1\x66\xd7\xf7\x74\xcd\xba\xdb\xab\x34\xa5\x0f\xab\xe7\xd4\x93\xde\x00\x70\x14\x05\xea\x4b\x36\x9e\x69\x32\xa3\xc6\xa6\x6a\x4b\x7a\x1b\x1d\xf1\x5b\xde\x32\x4f\x9c\x65\xf6\x04\x45\x16\x0d\x6c\x57\x78\xa7\xe1\xc5\xc4\x80\xb6\x0f\x1e\xa3\x93\x80\xcf\x8a\xda\xe8\x6f\x11\xba\x4f\x54\x34\x1b\x36\x22\xe7\x8d\x83\x20\x3b\xc2\x1d\x00\x8e\x5c\xe2\x1b\x16\x2d\x20\x7b\xed\xd7\x93\x89\x4e\xc7\x47\x87\x4e\x0c\x66\x08\xba\x76\xd6\xfb\x1d\x1d\x5b\x73\x1b\x8b\xaf\xe8\xa7\x75\x7c\xc8\x1f\x10\xf6\x01\x22\xba\x63\xc5\x88\xf4\x7a\x41\xf7\x8b\x16\x39\xdb\xee\x60\x6d\x80\xd5\xa0\x92\x2d\x87\x7c\x95\xc7\x59\xa2\x79\x94\x61\xc3\x68\x2d\x97\xd2\xdd\x64\x58\xee\x22\xf4\x61\x92\x10\x4d\x4a\x0c\x0d\xa7\xcd\xaa\x6a\xf9\x15\x4e\x42\x46\xb8\x15\xd0\x86\xcd\x85\x6d\x77\x1f\xa8\xb6\x10\xd7\x81\xd6\xe9\x05\xb2\xa5\xd9\xf0\x74\xc2\x9d\x45\x76\x95\xbe\x97\xa1\x24\x5c\x15\xaa\x33\x00\x7b\xc7\xdd\x31\x09\x55\x30\x6e\xaa\x7d\x36\x13\x20\x3f\xba\xbf\x10\xbf\xc9\xde\x52\xce\x99\xfd\x6c\xca\x7e\xa4\x54\x27\xdb\xda\x69\x67\xc8\xa8\xa4\xd8\xb3\xd3\x67\x08\x45\xe7\xc3\xd3\xa7\xc5\x8f\x91\xa5\x28\x4a\xc5\x1f\x17\xae\x88\x95\x0e\xa4\x9a\xfc\x0c\xd9\x1b\x25\x70\x2e\xce\x90\x9f\xd4\xe7\x6e\xbe\x13\xa6\x7e\x8b\xeb\x32\x17\x49\xe6\x5c\x3f\x78\xb8\x78\x30\x17\x47\xeb\x5d\xfd\xe8\x61\x1a\x45\x04\x07\x71\x86\x5c\x00\x76\xd7\x94\xd7\x04\x81\xd9\x20\xf7\x8d\xd2\xeb\xa9\xf5\xcc\xb9\x94\x3d\x01\x0c\x7a\xc6\x33\x69\x5f\xb4\xf5\x6a\x76\x36\x0b\x39\x14\xe7\x12\xf6\xd8\xeb\xa3\x28\x75\x67\xa7\x0b\x3f\xb2\xb6\xdc\x0b\x09\xed\x37\x3c\x27\x60\xcf\x98\xca\xbd\x72\x95\x15\xa1\xa8\x62\xed\x3e\x1c\xcb\xc2\x31\x6f\x45\x29\x77\x27\xe7\x66\xb5\x07\x40\x6d\x85\xc7\x47\x26\x26\x0e\x55\x2f\xaf\xe6\x92\x21\x84\xd4\x5e\x01\xe7\x56\x36\x77\x23\x3c\xd8\xbc\x51\x60\x01\x0f\x74\x00\x83\xa2\x12\x1f\x90\x2d\x1d\xae\x1e\xba\xa2\x7a\xb0\x72\xb0\xba\xd4\x8e\xaa\x97\x55\xbc\x56\xfd\x8a\xcb\xec\xf6\x6e\xa0\x3d\x8b\xe5\x5c\xc6\x0e\xdc\xa8\x9e\x6d\xda\xaa\x55\xd3\x34\xcd\xed\x03\xb1\x7e\xea\x3a\x19\xb8\x96\xaf\x12\x9a\x6d\x52\xe7\x4f\x09\xfb\x03\x72\x42\xfd\x2c\xfe\x1a\x70\xf4\x65\xb0\x98\xfc\x52\x3b\xc6\xd4\x24\xaa\xb8\x0c\x1c\xc3\x58\xb6\x5c\x3a\xf8\xcc\x8b\xda\x3d\xce\xbd\x38\x44\xa5\x30\xcc\x67\xcb\x0b\xc7\x2e\x1f\x57\xb5\x56\xfc\x3a\x92\xc4\x23\x13\x13\x2d\x2f\xbc\xb2\x1a\xc5\xcb\x13\x81\x1f\x76\xd6\xc5\xcf\x4a\x5b\xdc\x45\xe2\xaf\xcb\x27\xb2\x0f\xaa\x97\x57\x9b\x69\x2b\x30\x47\x38\x4b\xf3\x67\xc1\xb9\x82\x8d\x8b\x8d\x7e\x4a\x03\xed\xe0\xf3\x2d\x37\x7b\x48\xd5\xf1\x74\x6a\xec\xe6\x53\x0b\x2e\xfc\xbd\xc9\x06\x99\xe0\x69\x6d\x22\x4a\x2a\x32\x43\xb4\xdc\x25\xd3\x7c\xc9\xf7\x42\xf7\xd8\xc9\xd3\x13\x88\x29\x73\xa5\x3b\xb6\xd6\xe4\xfc\xf6\xee\xb8\xbd\x59\x5e\x59\xa2\x06\xd5\x70\xee\x2a\xb1\xef\x90\x05\xfd\x7b\xc7\xcb\x93\x2d\xb0\xbd\x1c\x8b\xd6\x3a\xe9\x04\xb5\x69\xe4\xce\xf3\xba\x7b\x83\x97\xca\x6c\xa3\xea\x9a\xc2\xe4\xc3\xd5\x98\xd7\x9b\x5e\x5a\xad\x45\x2d\x71\x55\x75\x5a\xca\x7e\x37\xc1\xc3\xca\xe9\x85\x89\x79\x5e\x7f\xc6\x0d\x5e\xfa\x8c\x85\xce\x92\xf6\xd7\x78\xc6\x09\x8d\xad\x33\x71\x68\x42\xac\xd8\xc4\xfc\x0d\x0b\x27\x26\x96\x31\xf5\x4b\x05\x07\x5d\x11\x44\xb6\x67\x3d\x3f\x52\x2a\x34\xe8\x62\xb0\x17\xe8\xa9\xb4\xc5\xe2\xe5\x25\x76\x5d\xc1\x73\xa9\xb3\x02\xf6\x37\x33\x51\x0a\xb9\x0e\xc6\x6e\x99\x1d\xcf\x90\x51\x78\x3a\x07\xf8\x3e\xbf\x4f\x68\xd3\x32\x73\x3e\x8d\x9d\xb8\xd9\xf6\x86\x94\x26\x4d\xf1\xe7\x51\xf5\xa1\x98\xce\xb5\xd8\x4f\x53\x8e\x67\x03\xec\x04\x51\xc3\x4e\xa8\xcd\x56\x0f\x31\x6b\xf5\x17\x68\xd6\x34\x68\x48\xac\x54\x1f\xa2\xa7\x90\x11\x3b\x40\xa4\x2f\x6c\x5c\xfb\xd1\x0b\xea\x27\x2d\x3c\x56\xa5\xaf\xbe\xa0\x30\xa6\x36\x0f\x4b\xf6\x0f\xfb\xd9\xad\x3b\x44\x24\xf3\x01\x5e\x2a\x45\x73\x4f\x5d\x5d\x88\x3a\x7c\x45\xce\xeb\x06\xb9\x7b\x3f\xbd\xd2\x9a\xcb\x71\xf6\x18\xa3\xd7\x3d\x60\x64\x16\xea\xc0\xb0\x39\x37\x9f\x1a\x66\x1f\x1c\x9e\x6d\xc8\x36\xa4\xcf\x8a\xe7\xb6\x7d\x8e\x3e\xcb\x7a\x35\x55\xe6\x71\xf9\x50\x1c\x8a\x58\x05\x38\x97\x91\x4c\x49\x1d\x7e\x66\x64\x86\xa4\x28\x1e\x7a\x6b\xb9\x3f\xbf\x70\xea\xe4\xc4\xb1\x48\x29\xbe\x30\xf9\x36\xb8\x1b\xa1\x66\x3c\xe9\xd4\x9a\xae\x07\xbe\xc1\x7e\xcc\xeb\x42\x2c\xe0\xd5\x96\x17\xfa\x0d\x9e\x88\x13\xa2\xd2\x11\x3c\xfd\xd2\x5b\xf1\xa0\x6a\xff\x3d\x19\xc1\xa2\x8d\xaf\x6a\xd2\x25\x9a\x97\xc1\x84\xeb\xec\x3b\xed\xa8\x2e\x3b\xbd\x96\xe5\x43\x89\x42\x9d\x0d\x27\xf0\x57\xf8\x11\x97\x89\xd5\x30\x9a\x7e\x96\xb8\xb2\xee\x60\x40\x71\x62\xee\x32\xf1\x93\x59\x2e\xa1\x12\xbb\xba\x27\x3b\x03\x1a\x6d\x62\x7f\x79\x19\x3c\x01\xc0\xf0\xbb\xca\xc3\x74\x1c\x52\x16\x35\xdc\xd0\x4c\xbf\x12\xf6\xa4\x07\xcb\x77\xe4\xe9\x97\xde\xca\xdc\x31\x7b\x5c\xae\x1f\xd6\xf9\xba\x7b\x29\xee\x67\x41\x9d\xa2\xfa\xb8\x24\x4c\x49\x37\x4c\xbd\x75\x50\xd6\x36\xa3\x84\xcb\x5c\x79\x69\x84\x56\x0a\x08\x0b\x59\xe3\x41\x50\x41\x4f\x83\xba\xbb\x86\x62\xad\x9a\x4a\xb4\x38\xb4\xbd\x38\xb5\x0f\x78\x3e\x7b\x2e\x58\x4f\x9f\xcd\xa2\x1b\x7d\xe5\xbe\xb3\x05\x20\xde\xb9\xb7\x4f\xff\x88\xe0\xf2\xbd\x94\xd0\x51\x1d\x86\xee\xdc\x49\x58\x62\x00\x79\x9c\xff\x1e\xf5\x06\xbf\x7f\x91\xd0\x87\x29\x85\x87\x22\x1a\x1f\x23\xec\x7d\x44\x69\x63\xdd\xdc\x5b\xf4\x72\xf3\x6b\x4d\xe5\x5e\x62\x9c\xaa\x96\x57\xc7\x63\xe7\x85\xe7\x3c\xde\x54\x0c\x13\xb4\x29\xb5\x6e\x45\x2a\x61\x21\xfc\xb4\x16\x85\xa8\xf9\xa9\x75\x73\x5a\xeb\xa1\x8e\x5f\x77\x6e\x67\xad\xd3\x99\xbe\xfa\xfc\xae\xb6\x10\x5f\xcc\x3e\xfc\xeb\x05\x85\x96\xb5\x7c\x2e\x66\xe7\x0b\x17\xb0\xf7\x90\xfc\x53\x77\x6c\xee\xe6\x71\xe5\x6e\x82\xe0\x8b\xda\xa7\x04\x14\xa4\xf2\x7e\x5d\xea\x82\xc6\x29\x53\x02\x47\x31\x20\x08\x82\x26\xca\x0b\xa2\xe5\x48\x86\xf8\x9c\x6b\x05\xdb\x06\xf9\x18\xdd\xf5\x50\xda\x45\x2b\xd8\x45\x2b\xe8\x8b\x56\xf0\xe2\x92\x44\x2b\x78\x4e\x69\x80\xd4\x89\x3d\x39\xda\xdb\xbc\xc6\xfe\x90\xe4\xa0\xae\x95\x08\x91\x1d\x16\x37\x3b\x9b\x1a\x4e\x74\xcd\xb2\xc7\x81\xc8\x58\x75\xe7\xb6\x22\x1b\xe7\x4e\xf9\xde\xfb\x88\xde\x53\xd2\x51\x7b\x2f\x2a\xf5\x0f\x6f\xec\x3f\x1d\xa8\x17\xfe\x13\x52\x8c\x90\xac\x54\xed\x06\x07\x3d\x21\xad\x55\xca\x7e\xdb\x33\x4f\x3b\xc6\x4d\x38\x67\xb3\xf2\x20\x79\xca\xd6\x7e\x67\x97\x3b\x87\x8b\xfc\xce\xf2\x13\x94\xf7\x3f\xbb\xeb\x02\x3a\x36\xc0\xbc\x4e\x05\x9e\xdf\x72\xfe\x6c\x3f\x3b\x59\xf8\x06\xe9\x53\x27\xe1\xf1\x01\x4d\x26\x64\x32\x9b\xba\x5b\x83\x12\x28\x19\xe4\x27\x77\x83\xbc\x71\xf7\x7e\xd8\xbd\x1f\x76\xef\x87\xfe\xf7\xc3\xff\x51\x68\x36\xdf\x22\x03\xc4\xe8\x16\x1e\x4f\xb8\x24\x7e\xbb\x17\x70\x53\x4a\xcb\x6e\xad\xe9\xc5\x5e\x2d\xe5\xb1\x9f\xa4\x7e\x4d\x9a\x5a\xe5\x2d\x21\x17\x55\xde\x06\xe0\x16\xe2\x75\xd2\xe6\xf9\xba\x09\xf0\x09\x90\x8c\x84\xbe\x20\xbb\x0d\xfe\x85\xd0\x6b\x76\x38\x78\xbc\x12\x3e\xbc\xfd\x2b\xa1\xcf\xbd\x09\x9d\x3b\xef\xc4\xdf\x9c\x88\x07\xc9\xad\x5b\x5f\x00\x47\x9c\xab\x06\xb9\x00\x60\x4e\xf2\xb7\xc0\xf3\x46\xe8\xa1\x41\xe7\x33\x83\x5a\x78\x60\x0f\xbb\x7e\xf3\x22\x52\x2f\x11\x24\x39\x0c\x00\xd0\xdc\x88\xf9\x6d\xaf\xd6\x7a\x41\x17\xbe\x3b\x4c\x43\x0c\xda\x9a\x8b\xa3\x25\x0e\x58\x07\xb7\xee\x1c\xeb\x80\x59\x78\x0b\x6d\x51\x65\x5d\x69\x58\x14\xc2\xc2\x2b\x8a\x11\x16\x9e\xb5\xf3\x56\x9f\xbc\x05\xc2\x82\x54\x7c\x6e\x0f\x66\xa1\x72\x6e\x60\x16\xfe\x27\xd1\x38\x0b\x5f\x21\xec\xb3\xe4\x34\x68\xad\x95\x22\x4e\x67\x6c\xf0\xc4\xdf\x71\x5a\xd6\xea\xec\x4e\x58\xe7\x71\x02\x24\x50\xf4\x41\xde\x37\xa0\x9e\x5a\xf6\x57\xb9\xb2\xc2\x6a\xb8\x86\xcd\xa0\x1a\x20\xa7\x7d\xaa\xc3\xe8\xd8\x3c\x4f\xfc\xdb\xf9\x02\xc6\x16\x33\x05\x96\xe3\x85\xca\xbd\xbd\xce\xe3\xa0\x0b\xa8\x23\x3d\x07\xd2\x4f\xdc\x25\x8e\x00\x3a\xa2\x0e\xdb\xc8\xfa\x68\x4d\x42\x2c\x7b\xe4\x23\x25\x9e\x83\xf5\xf0\xcb\xa3\xb4\x3c\xe8\x31\x80\xd8\x9e\x77\x8e\xb2\xa9\xbe\x6f\x6d\xdc\xdb\x3e\x7c\x53\x2e\x61\xd6\x77\x77\x81\x70\xb7\xcb\x0d\xfd\xb9\x06\xc2\x7d\x80\xb0\xe7\x91\xcc\x4b\xb6\x0f\xe5\xde\xbe\x3f\xcd\xb6\xe9\xb5\x69\x07\x3f\x42\xaf\xa2\x57\xec\xec\xe6\xda\x65\xf4\x1e\x42\xa1\x45\xde\xd6\x37\xfc\xb5\xce\x35\x03\xdf\xf0\x45\xb1\x46\xbf\x7e\xd1\xe0\xe4\x0d\x3c\xba\xff\xfe\x42\xf6\x9c\x1e\x9d\xa3\x7e\x9d\x47\x3b\x8f\x5a\xad\x28\xb4\x80\x73\x1b\x5a\x2b\x89\x79\x48\x12\x8c\x6e\x09\x82\x68\x4d\x6c\x63\x19\x5d\x2b\x6e\x0a\xe5\xcd\x59\xd1\xc6\xcf\xac\x9e\x0d\xf2\xdf\x2f\xa0\x7f\x4c\xe8\x7e\x34\xfb\x9c\x88\xea\x3c\x71\x3e\x42\xd8\xaf\x93\xc9\xec\x41\x66\x24\x33\x19\x5b\x69\x28\x6a\x49\x94\x39\x9d\x49\x45\x92\xbe\xa6\xb7\x7a\x4e\xbd\x09\xb1\xb9\x0a\x34\x57\x39\xb4\x89\x37\xcc\x37\x86\x29\x15\x3b\x4a\x7a\xb8\x7f\x7e\x78\x00\xce\x7e\xb1\xdb\xe6\xf5\xa2\x8c\x45\xec\x55\xc3\x86\x01\x59\x46\x03\xe0\x70\xa5\x52\x24\xf4\xda\x49\x33\x4a\xa7\x75\x8b\xae\x17\xb4\x9b\x9e\xed\xd0\x8e\x60\x5f\xca\x9d\x1d\x04\x77\x1d\xde\x6d\xd7\x93\x21\xe1\x05\x5d\x23\x95\x8e\x18\x90\x74\xb1\xd7\x41\x2f\x99\x12\x3a\x06\x34\x00\x95\xec\x25\x57\xa1\xf1\x29\x84\x9e\x81\xef\x3b\x86\x06\xb8\x1e\xb8\x4b\xcb\x85\x13\xdd\x82\xc2\x2a\x08\x26\xe6\x62\x3d\x32\x9f\x28\x55\x4e\x46\x39\x79\x82\xfd\xf2\x5b\xc5\x1d\xaa\x47\x10\x81\x92\x0e\xd4\x2b\x59\xb1\x09\xb9\xa6\x62\x17\x44\xa7\xc0\x36\xec\xf9\x41\x47\xa5\x79\x59\x32\xdc\x13\x30\x3a\x07\x6c\x76\x1a\x30\x02\xc3\xa4\xcb\xc0\x92\x06\x1e\x58\x4c\x54\x37\xc0\x2f\xc3\x68\x1c\x82\x5b\x12\xdd\x4c\x3e\x4d\x82\x39\xa4\x2c\x4a\xbb\x4a\xbf\x42\xe8\xa8\xbe\x31\x9d\xcf\x92\x01\xb4\x8b\xf3\xb2\xb8\x11\xf6\x91\xb0\xd7\x90\x79\xed\x84\x9b\x4f\xc0\xea\x87\x7e\xab\xd3\xb2\x52\xe8\x9d\xef\x43\xa6\xdb\xa2\x77\x11\xba\x4f\x45\xc1\x38\x6b\xf4\xc9\x3b\x21\xf9\xde\x12\x0f\x34\x5c\xdf\xe1\x49\x23\x46\xb2\x8b\x11\x92\xda\x0b\x0f\x8c\xac\x09\x44\x2b\x08\x8a\xb5\xe4\x03\x88\x52\x95\xbe\x99\xd0\x87\xcb\xee\x4e\x05\x5e\x02\xb6\x3a\x04\xb0\x36\x4d\x88\x0b\x46\x09\x0d\xe4\x98\x29\x5f\x41\xa2\x3c\x87\x6e\xcd\xa2\x19\x41\x81\x32\x92\xf3\x01\x42\x29\xbe\x16\xf4\xd2\x79\x2b\x61\xaf\x25\xd9\x6f\xcd\x56\xae\x81\xad\x59\x22\x9c\x65\xfc\x75\x9f\x1e\xdf\x0c\x1c\x48\xd4\x70\x8d\xac\x5d\x7e\x02\x71\x58\x3e\xaf\x23\xca\x83\x38\x2c\x7e\x58\x0b\x3a\x75\xc4\x33\x41\x75\x20\xd8\xa4\x35\x90\x84\xe7\x2e\x19\xf9\xc1\x2c\xfe\xfd\x97\x54\xb7\x61\x5e\x7f\x81\x9d\xba\x59\xff\x52\x74\x48\x2e\x85\x8d\x3a\x26\x5e\xf4\x98\xcb\x96\xbc\xda\x0a\xb2\x49\x7e\x22\xc7\x60\xb6\x75\xcf\x5e\x5a\xdd\x9e\x5a\xc1\xf9\xda\x08\x3b\xb5\xc9\xfb\x3c\x7c\xf9\x20\x9a\x85\x0d\x72\xf7\x08\xfd\x5c\xee\xbe\xfb\x38\x61\x6f\xe9\x7f\xdf\x79\xb5\xb4\xe3\x05\x7d\xaf\xbb\x6c\xd8\xdc\x9d\xbb\x79\xca\x6d\x7a\xe7\x94\x09\x1e\xf8\xda\x7b\xb5\xe9\xfc\xff\x22\xc2\xae\x9e\xb7\xc9\x89\x1c\x86\xe5\xf3\x9f\x93\xfe\xa4\x4e\xfe\xdc\xfa\xeb\xff\xa1\xed\xaf\xff\xc1\x12\x7b\x05\x99\x92\x2b\x96\xe9\x32\xfa\x8b\x14\x70\xbb\x6c\x4b\x44\x15\xc3\xc2\x7b\x20\xab\x5f\x5d\x1b\x12\x1f\xe4\x80\x25\x11\x1f\xb0\x9c\x6b\xa7\xe8\x24\xbd\x6e\x67\x42\xc5\xf9\xf5\xe8\x9f\x57\x1e\xda\xb3\xec\x1a\xf4\xcd\xee\xa3\x6e\xd3\xfe\xd8\x85\x9d\xb4\x4e\xe5\xdb\xf7\xd0\xcb\x06\x1d\x9d\x95\xab\xee\xdb\xc3\xec\xd7\x4b\x5b\x16\xcb\xc8\x86\x54\x35\xa0\x15\x43\x9c\x13\xe5\xdc\x65\xa7\x70\x44\xaa\x25\x17\xb6\x21\xb8\x77\xa4\x42\x51\x27\xac\xbb\x73\x37\xa3\x5c\x1c\x75\x74\xaa\x50\x55\x52\x19\x98\x22\x08\x6a\xdf\xba\x5f\x7e\x52\x76\x79\x02\x92\x9d\x17\x04\xdd\xb2\xeb\xb9\x6b\xb1\xd7\x6e\xf3\xd8\xf5\x62\x68\x4c\xaa\x8a\xf2\xf4\x5a\xe1\x17\x6b\x03\x5f\x12\xb5\x78\x14\x72\x97\x07\x09\x77\xc7\x32\x0b\xd6\x78\xf5\x0c\x19\x85\x1d\x2c\xc8\xe9\x06\xf9\xfd\x12\xfd\x3a\xa1\xd9\x13\xe7\xf3\x84\x7d\x92\x4c\xa9\x9f\x8a\x98\x29\x2f\x25\xaf\x9f\x52\xa3\x68\xda\x10\x48\x06\xe3\x0a\x01\xf7\x10\x89\xb0\xb2\xb1\x9d\x7f\x91\x3c\xdb\x50\x4f\x35\xb2\xf4\x9d\x60\xd7\xdd\x62\x67\xe5\xd3\x29\xfb\x12\xf4\x89\x14\xc3\xb9\x59\x5e\x94\x1d\x10\x9d\x65\x98\x94\x4c\xbf\x67\x05\xd3\xbd\x69\xb4\x30\x03\x69\x7e\x9e\x40\x79\xf4\xcf\xfb\xd8\xd5\x45\x2f\x36\xd7\x1b\xf5\xa8\x8c\xfe\x74\x57\x65\xb4\x5d\x95\xd1\xfb\xb4\xca\xe8\xed\x84\xf1\xe3\xfd\xf4\x45\xe7\xf2\x92\xdc\x3e\x26\x45\x8f\xe5\x76\x57\x1b\xf4\xd0\xd1\x06\xfd\xc2\xd6\xda\xa0\xab\x9d\x2b\x07\xd1\x06\x15\x29\x82\x3e\x7f\xf9\x40\x54\x0a\x74\x40\xf7\x5e\xce\x26\x8b\x5e\xa8\xcb\x60\x10\x57\x93\xea\x06\xf9\xda\x65\xf4\xfe\x1c\x4b\xfb\x2e\xc2\x5e\x56\xcc\xd2\x7a\x41\xe0\x02\xe6\x99\xc1\xc3\xca\x64\xb7\x32\xee\xe8\x7c\xb1\xaf\x9b\x30\xaf\xef\x29\xd1\x47\x79\x6b\xc9\x4c\xe0\x25\xa9\x5f\xbb\x3e\x88\x6a\x2b\x42\xa8\xe3\xce\x6b\x4b\x74\x72\xeb\xa0\xab\x5b\x16\x7a\xbe\x34\x6f\x7b\xf6\x39\x52\x54\xc4\x64\x9f\xbc\x10\xb2\x99\x4f\xfb\xc9\x8a\x79\xa0\xf1\xae\x37\x63\xc3\x3c\x05\x22\x70\x20\xc1\xc4\xc6\xca\x7e\x23\x35\x08\x21\x64\x9d\x4d\x32\xa5\x09\xb0\x24\x67\x99\xaf\xd5\x5b\x4b\x38\xf6\x1e\x32\x0f\x83\x56\x86\xbe\x81\xd0\x51\xef\xf6\x4e\xcc\x45\xa7\x9d\x97\x92\x01\x34\xe1\x93\xaa\xb8\x35\x3b\x8b\xfa\x71\x7e\x46\xc4\x73\x77\xda\x4b\x3d\x9c\x18\x4c\x44\x2c\x63\x2b\x61\xf0\x62\xd0\x42\x42\x54\x39\x8a\xb3\x21\xd3\xb7\xab\xee\x09\xf1\xd5\x79\x3d\xe9\xaf\x42\xb0\xbb\x27\x8a\xf7\x9c\x09\xec\xe8\x2d\xba\x40\x61\x47\xe1\xc5\x82\xcc\x8d\xbe\xad\xbe\x7e\xdb\x94\x9d\xfe\x92\xb0\x7b\xc8\x64\x11\x10\x67\xcf\xd9\x03\x87\x1c\x25\x4f\x81\x56\x4f\x05\x76\xff\xc8\x87\x51\xbf\x86\xd0\x91\x1a\x6f\x37\x1b\x89\x73\xf7\x26\xae\x1b\x59\x80\x2b\x6f\x37\x8f\x2e\xf4\x59\x98\x9f\xc7\xb7\xd6\xaa\xb8\xe2\x99\xab\xd3\x57\x9b\x2b\x81\x29\x49\x9a\x5e\x0c\xfe\x74\xed\xa8\x7e\x20\xd1\xf9\xac\x21\x61\x4f\xcd\x17\xf2\x9e\xf3\xe5\x81\x3a\x06\x65\xfb\x74\xec\x0c\xc1\xd7\x76\xcf\xb0\xfa\x4c\x9d\x29\x4f\xb7\x96\x2d\x00\xe8\x39\x03\x0b\xb1\x8e\x79\xc1\xba\xca\x38\x28\x8d\x09\x72\xc3\xcc\xe4\xf4\x84\x8c\x81\x48\x26\x5a\xdd\xe4\xb6\xa0\x82\x4d\x56\xda\xf5\x89\xf9\x99\xc9\xe9\x13\x33\xd5\x56\x9d\xfe\x59\x89\xee\x03\x06\x7a\x9e\x37\x9c\xff\x5c\x1a\x20\x37\x6a\x8f\x72\xba\x34\x25\xbf\x87\xa0\x27\x15\x06\xe0\x2e\xf9\x15\xcc\x57\x8e\xd0\xb5\x4a\x87\xb3\xc4\xd3\x35\xce\xc3\x5e\xb6\x57\x8c\xbc\x58\x56\x74\x67\xd6\xdb\xbc\x26\x81\xab\x33\x8c\x7b\xd4\x3e\x81\x54\x56\x95\x62\x7a\xaf\xea\x08\x5d\x59\x7c\xc1\xf4\xae\xa2\x22\x29\xeb\x01\x4a\x72\x73\x37\x4f\x9d\xcb\x93\x22\xc7\x49\xef\x21\x74\xa8\x96\xf8\x62\x63\x0f\x00\xbc\xbf\x30\xdb\x67\xf3\x9c\x98\x5a\x98\x35\x37\x8e\xb2\xb7\xc0\xf6\x6d\x7a\x61\x3d\xd0\x6e\x9c\x0a\x7a\xc6\x15\x9f\xd4\x63\x7f\x95\xc7\xb9\xb4\xfc\x55\xfa\x0e\x42\x4b\x8d\x9a\xf3\xa6\x41\xa2\xc1\x8f\x4e\x59\x3d\x69\x1f\x9d\xb2\x77\xf0\x51\x7f\x29\xe6\xee\x54\xd3\x0b\x43\x1e\x9c\x87\x0b\x8b\xde\x47\x28\x6d\x04\x7c\x5d\x3a\xc8\xdf\xbb\x09\x9b\x97\x75\x3a\xe0\xeb\x7d\xa6\xb2\x79\x54\xd7\x65\x0f\x64\x99\x87\x3c\xf6\x6b\x99\x43\x54\x6e\x24\x86\xa3\xfd\x84\x1e\x15\x8a\xb8\x30\xed\xbc\xe6\x2e\x79\xa2\xf3\xed\xa0\xb3\xec\x87\x55\xfa\xf7\x84\xee\x6d\x04\x10\x1b\xeb\x7c\x9d\x0c\x00\x2e\x70\x14\x0b\x5b\xdd\x7d\x1b\x91\x4f\x73\xb3\x2e\x1f\xe6\x09\xc7\x56\xb3\xdc\x3b\xc1\xa0\xb0\x10\xfc\x7d\x27\x81\xcc\x93\xa0\xf5\xc0\xe4\x01\x89\x22\x95\xaa\x35\x19\x6b\x01\xb9\xdf\xc5\xcd\x26\x75\x5d\x88\x74\x40\x7f\xb7\x44\x1f\xb1\x5c\x33\x6e\x4c\xe0\x06\xee\x2d\xd1\x6b\xb7\x1c\xf9\xb1\xa9\x19\xfb\x33\x6b\x0e\xfe\x8a\xf4\xbc\xb7\x67\xe3\xd8\xd4\xcc\x79\xe3\x97\xfa\x38\x4a\x9f\x35\x23\xb5\x5c\xe3\x19\xdd\xa8\xfb\xc9\x0a\xbd\xa7\x44\x47\x97\xd1\x3f\xbb\x91\x38\xcf\x2f\x0d\xc0\xa6\x1c\x53\xc5\xfb\x6c\xf6\x8f\x12\x5d\x22\x37\x63\xfa\x71\x4e\x99\x64\x4f\x98\xe6\x56\xce\x76\x66\x36\xbf\x98\xe4\x9c\x4c\xe8\xd1\x1b\x57\xd3\x77\x4a\x74\x9f\xe8\x06\x44\x22\xfe\xcd\x20\xbe\xf3\x37\xc8\xd2\xd6\x4c\xbc\xbb\xa4\x1e\xdb\x13\x81\x97\x53\x14\x77\x4d\xb6\xa0\x77\x6c\x2e\xc8\x73\x51\x1b\xb1\xcd\x53\x8e\x4e\xf4\xca\xae\xd1\x49\x78\xa3\x13\x20\xce\x0e\x60\xf9\x55\x24\xf4\x36\x7c\x03\xd0\x90\xb0\xc7\x78\x92\x22\x24\x48\xd0\xfd\xff\xdc\x53\x61\x05\xa6\x57\xd1\x72\xdf\x32\x52\xa2\x11\xc5\x0b\xbb\x10\x67\x27\xbe\xbe\x65\xf6\xf8\x71\xf7\xe4\xa9\x45\xf7\x96\x53\xf3\x37\x22\x5e\x7d\xab\x13\xa4\x3e\xb6\xa5\x1d\xfb\xcf\x72\x5b\x8a\x2e\xb5\xbd\xb4\x49\xbf\x48\xe8\x1e\x3f\x11\x77\xd7\x1f\x0f\xe2\x93\x39\xbb\xd0\xff\xf6\x7a\x31\x81\xb7\x39\x4e\x19\x9f\xfd\xb0\x8f\x2d\x7d\x36\xdd\x03\x08\xdc\x4e\x42\x2f\xdd\x72\x54\x60\x87\xb7\xc6\xf2\xa4\xe3\x12\xc9\x5c\x0f\x05\x77\x50\xd0\xad\xe8\x4e\xab\x15\x85\x88\x4b\x2b\x0b\x1f\xfd\x07\x42\x2f\x00\xc6\xee\x14\x02\x78\x3b\xff\x8d\xb0\x8f\x1a\xce\x4c\x92\x43\xc5\x97\x65\x17\xc2\xd9\x9f\xce\xe2\x88\x95\x5d\x96\x44\x8d\x94\xdd\x8a\x10\x72\x2a\xcf\x43\xdd\xad\xc8\x6f\x10\x47\xce\x6f\xb5\x83\x2e\x58\xa8\x5d\x1f\x51\x61\x01\xc6\x0b\x8a\x9f\x43\xfe\x66\xe2\x62\x68\xb4\x22\x3b\xba\x89\x38\xfd\x31\x42\x87\xc2\x46\xe2\x7c\x68\xa0\x84\xfb\x47\x17\xac\xc9\x7e\x1e\x39\x99\x63\xe5\x43\xf7\x64\x11\x1f\x7f\xfe\xc8\x74\xd8\x48\xe8\x5f\x11\x7a\x41\x68\x66\x5e\xfc\x3c\xa1\x87\xb7\x1c\x8c\xe4\x42\x8d\xef\xd8\xeb\x89\xf9\x53\x2b\x6c\x6b\x51\x98\xa4\xb1\xe7\x6b\x53\x42\xe0\xb7\xfc\x14\x6d\xb4\x2a\x73\x62\x66\x8a\x90\x1a\x12\x54\x67\x48\xdf\x52\x1b\x5b\x20\x6c\x04\x9d\xcc\xd0\x61\xa4\x95\x8b\x1a\x32\x23\xa3\xa8\x59\xc3\x16\x4a\xe5\x0d\xbd\x7f\x88\x3e\xb6\x9d\x3b\xc1\xf3\xa8\x57\x9f\x8b\x02\xbf\xd6\x75\xce\x0c\xb1\x97\x0c\xdd\x82\x3c\x67\xbb\xcd\xc3\xa4\x4f\xb8\x07\xf2\xe4\x92\xe6\x1b\xf9\xdd\x32\x73\x32\xe0\xc5\x4a\x08\xfb\x98\xbb\xf3\x1c\xc2\xc0\xc7\x14\x2a\x7e\x03\xb2\xc7\x85\x98\x58\x43\xf9\x5f\xe4\xa9\x4b\x32\x5e\x76\xa7\x05\x61\xe0\xf6\x87\x12\xfa\x09\x93\x72\x18\xdb\xa2\xe8\x7b\x41\x43\xe6\x25\x76\xd0\x58\x86\xdf\x33\x5e\xd5\x4f\x15\x00\x64\x46\x97\xa5\x6d\x5c\x0e\x15\xb9\x3d\xd3\x2c\x08\x93\x9a\x6f\xec\xdc\xba\x46\xc0\x44\xfa\xe1\xb2\x79\xd2\x1e\x20\xf4\x51\xed\x66\x94\x46\x61\x8e\x03\xfb\x00\x19\x40\x71\x35\x57\xf0\xa5\xcd\xf8\x17\x95\xb0\xef\x52\x2c\x31\x85\x4c\x62\xc0\x63\x73\x63\x08\x0e\x67\x7b\xf2\x2d\x7d\x0b\xa1\x17\x89\x29\x5f\x8b\x62\xc5\xfc\xbf\x72\x10\xef\x96\x39\xeb\x1b\xd9\xfd\xa7\xda\x4f\xed\x8e\xab\x56\x76\x24\x87\xd3\x97\x11\xba\xf7\xb6\x4e\xb4\xd4\x4d\xb9\x73\xd7\x20\x7c\xfe\x4d\x58\xd8\xea\xdf\x8d\xf2\xa1\xdd\x31\xf5\x70\x9b\x8a\x8b\xaf\x13\x3a\x14\x2f\xd5\x9d\x2f\x0d\x22\x75\xce\x5f\x3f\xdd\x57\x65\x31\x7f\xfd\xb4\xdd\xa1\x79\xaf\x1e\x25\x2e\x28\x2e\xdd\x69\xde\x47\xbd\xb5\x59\xdf\xce\x82\x3b\x8c\x97\x4c\x95\xc5\x5b\x09\xdd\x9b\xd4\xbc\x80\xcf\x9e\x72\xce\x90\x01\x64\x8c\x05\x2c\xdc\x67\xac\x4f\x91\xaf\xed\xe1\xaa\x87\xbd\x14\xae\xdf\x16\xc9\xf2\xc0\x23\xe9\xae\xd2\xb7\x15\x39\x0e\xdd\x43\xd8\xf3\xb5\xe3\x90\xe5\x34\x64\x87\xd4\xf7\x36\xbc\xc4\x83\x28\x5c\x4e\xaa\xee\x0c\x80\x2e\xa3\x39\x48\x79\xd0\x7b\xa9\x75\x55\x68\xcf\x37\xfc\x08\xc3\x0e\xba\x56\x7b\x96\x09\xfe\x65\x25\x3a\x2a\xbb\x1a\x25\xce\x73\x06\x91\x40\x64\x5d\xa7\xfa\xe9\xe3\xee\x27\xba\x44\x6e\x6a\xf5\xe3\x4d\x24\x10\xb1\xa5\x36\xe1\xfe\xd4\xbc\xfb\xa1\x21\xcf\xee\x78\x7f\xe9\x91\x1b\xbb\xec\xeb\xb6\x3b\xd5\xe7\x08\xfb\x44\x91\x3b\x95\x6f\x44\x52\x01\xc3\x25\x53\xc3\xa1\xa6\xaa\x93\xa8\xc4\x1e\x9e\x84\xbe\x4d\x01\x0c\x47\xfb\x52\x45\x31\x26\x8d\x6a\x89\x4b\xd0\x0f\xdd\xd8\x5b\x73\x41\xbd\x8e\x11\x34\x3b\x73\xc0\x1a\xd8\xf5\xea\x5d\x84\x5e\xb8\x9a\xb4\x9b\x5c\x99\x2a\xc4\x79\xda\xda\xed\xe4\x66\xf9\x89\x1f\xa7\x1d\x2f\xe8\xb9\x2f\x6e\xb9\xd9\xac\xd2\x5e\xfb\xd5\x05\x78\xb5\x33\x72\xfb\xc1\x61\x3a\x3e\x70\x88\xb0\xf3\xe2\x61\xd6\x4b\xde\xb6\xef\xb3\x55\xdd\x20\x1f\x1d\xa2\xbf\x94\x85\xea\x3c\x83\xcd\x4f\xe6\x13\x66\x6d\x19\xac\xb3\xd6\xb4\x58\x07\x3f\xd1\x38\x2c\xb8\xce\x16\x0c\x93\x46\x41\x7c\x0f\x61\x6f\x22\x12\x01\x11\x6b\xee\xdd\x71\x1a\xec\xb5\x2c\x1d\x54\x10\xd4\x46\xb0\x09\x90\x2f\x52\xf3\x62\x20\xcc\x9e\x73\x47\x44\xe8\xa8\xe5\x62\x97\x85\x1e\xbd\x88\xb0\x67\xcd\x63\xb0\x10\xee\xc3\xd8\xe7\x8d\xcc\x54\x6c\x85\x17\xd9\x39\xfd\x94\xa3\xad\x87\x26\x70\x41\xe4\x14\x6b\x88\x34\xa0\xed\xc5\x89\xca\x2f\x98\xfa\xf5\xae\xe0\x32\xda\x01\xd8\xb6\xd1\xe9\xea\xf8\xac\x35\xa7\x77\x0f\xd1\xc3\x3b\xe0\x7d\x9c\xcf\x97\xd8\x55\xf3\xbd\x9c\x8e\xbb\x09\xab\xa3\x2d\x1e\x67\xc8\x70\xbb\x3e\x3b\xbd\x41\x5e\x5a\xa2\x1f\x25\x74\xa4\x91\x2c\x76\xdb\xdc\xf9\x00\x61\xf7\x12\xe3\x34\x83\x6f\x4f\x1a\xe1\xf6\xaf\xba\x27\x24\xd7\xe9\x99\x64\x02\xca\xf4\xf0\xa1\x70\x38\x34\x02\x9b\x0e\x5a\x9f\x59\xaf\xba\x8c\xaf\xa7\x97\x09\xd1\x71\xbd\x91\x88\x7f\xc2\xb4\x91\xb0\xaa\x3b\x2b\xc8\x46\xcd\x87\x84\x5e\xa1\x84\x8d\x42\x4a\x85\x1f\x88\xcd\xd5\x09\x35\xb2\x50\xd5\x46\x7b\x83\xe1\x38\x93\xec\xb2\xd9\x69\x49\xb3\x55\xd6\xc6\x64\xeb\x79\xb1\xe0\x66\xf6\xd3\x9f\x28\x64\xdf\xea\xce\x87\xf7\xb3\xb5\x39\x99\x59\xcb\xad\x89\x9a\x6a\xca\xfa\x95\x01\x1c\xc9\x04\x1b\x5e\xe8\xc6\x9d\x10\x81\x99\x50\x16\x5c\x44\x47\x97\x44\x67\xf5\x52\x12\xc4\x52\x57\x3a\x35\xa0\x89\x2c\x97\x4b\x1b\xc0\xd7\xaa\x1b\xe4\x5b\xa3\xbb\x9e\x36\xbb\xa1\xea\xbb\xa1\xea\x7d\x43\xd5\x3f\xa9\x42\xd5\xef\x27\x74\x6c\x00\x71\xac\x0e\x81\xe9\x2f\xd3\x30\x52\x9e\x69\xc9\x56\x31\x3c\x3d\xe1\x0e\x7d\x9c\x15\xce\x62\x00\xa2\xcf\x80\x13\x85\x57\x7d\x2e\xee\xfc\x92\x81\x46\xa2\x80\x47\x4e\x08\xaa\xdb\x8b\x44\x6c\xa7\xa9\x86\x31\xa0\x41\xc5\x4b\x3d\x9d\x0f\x1f\x76\x20\xa4\xdf\x05\xe6\x6e\x87\xb8\x23\xe7\x6e\x22\x1e\x24\x37\x6e\xed\x87\x34\xe6\xfc\x6c\xa1\x1f\x52\x54\xcf\xbb\x1d\xbd\x6f\x3f\x7d\x5c\xf1\xec\x69\x05\xda\xcb\xf7\xb3\xeb\x04\x7d\x57\x7a\x51\xa4\x16\x50\x3b\x00\x00\x0b\x2a\x87\x18\x04\xaa\x80\xa1\xc5\x8a\x3b\x01\x17\x74\xfa\x8f\x29\xfd\xe6\x1e\x3a\xa1\x01\x36\xa7\x21\xed\xcd\x82\x2e\x38\xbb\x1c\x46\xfa\xf1\xcc\x3a\xaf\x75\x20\x9c\xfd\x83\x7b\xd8\x37\x87\x17\x33\xc5\x18\x40\xe3\x05\x81\x04\xea\x84\x00\x1d\xf9\x42\x2a\xcb\x22\xad\x84\x13\x62\xad\x97\xfa\x89\xc4\x5c\xd4\x9d\xe3\x59\x5a\x19\x03\x90\x0f\x56\x53\x69\xe5\x30\xf9\xa9\x9f\xca\xd0\x1d\xc8\x03\x6d\x22\xf6\xaf\xfa\x11\xe6\x7e\x32\x33\x79\xa9\xac\xab\x59\xf5\x46\x96\x69\x25\x2f\xb5\xc4\x4e\xd4\x93\x90\x05\x6d\x49\xfd\xb3\xf8\xb1\x0c\xf7\x5f\x22\xe8\x62\x4b\x54\xba\xc6\xfd\xe5\x66\x9a\x94\x5d\xbf\xca\xab\x98\xe7\xd8\xab\x35\x8d\x6a\x5b\x5c\xb0\xdd\x5e\x10\x98\xa8\x9b\x6a\xfa\xcd\x3c\x34\x63\x9a\x7c\x4b\x52\x5b\xd6\x31\x24\xf9\xe5\x28\x9c\x2e\xcc\x49\x3c\x5e\x76\x6b\x51\xab\xdd\x81\x30\x30\xd1\xc7\xa5\xae\xeb\xa7\x8a\xa3\x51\xf8\xc3\x30\x15\x81\x99\x34\x48\xab\x3c\x3d\x99\x20\x37\x5c\x76\x19\x0e\x8e\xa9\x8b\x53\x54\xe7\x1b\x19\x4a\x9a\x5e\x82\xeb\x8a\x52\xb6\xca\x50\x84\xa1\x8d\x71\xcc\x93\x76\x84\x2e\x0a\xed\x6c\xbf\x2e\xf2\xb8\xf5\x44\x5d\xc5\x18\xa4\x34\x96\x53\xdb\xf4\x97\x9b\x6a\x66\xbd\x18\x5d\x8b\xed\x15\xd9\x41\x6a\x9e\x5b\x60\x08\xbc\x3e\x67\x77\x81\x7e\x69\x98\x56\xfb\x4d\x6f\x9f\xdd\xfe\xd6\x61\xf6\x8d\x21\x19\x14\xa7\x17\xc0\x5a\xc2\x3e\x1b\x16\x46\x03\x39\x47\x79\xea\x8a\x8d\x9f\x2d\x64\xea\xb7\x78\x59\xcb\xdb\x66\xa8\x5c\x8e\xa3\x4a\x35\x68\xee\x8e\x7a\x50\x03\x4c\x5f\xe4\x4c\x55\x2f\xa2\x16\xc7\x1c\xd5\x2a\xcb\x95\xe8\x02\x57\xc3\x55\x80\xd4\x1d\x2e\x35\xd3\x51\x5d\x86\x7a\xe1\x95\x2f\xd3\xb7\x4a\x7e\x1a\x52\x60\xc7\x9a\x2c\xcb\x2c\xf3\x10\xbf\x87\x9a\x67\xbe\xea\xd7\xd2\xcc\x50\xae\xd4\xd8\x38\x24\x95\x35\x5d\x08\x28\x31\x47\x5b\x5c\x3b\x4b\xe3\x95\x60\x53\x98\xdb\x54\x65\xde\xcb\x6d\x31\xd1\x9a\x38\x78\xb9\xad\x06\xf5\x01\x0d\x4c\xc0\xe1\x45\x9e\x53\x71\x1c\x11\xda\x56\xeb\xa4\x81\x18\xf9\xb9\x3d\x76\x19\xbd\x74\x00\x5b\x4b\xcf\xde\xda\x57\x08\x5c\x9b\x2b\xe6\xbc\x77\x1f\xfb\x6a\x69\x3a\x43\x20\x43\xc4\x76\x38\x50\x63\xa1\x60\xa5\xc4\x0a\x0a\xe2\x06\x07\x4b\x71\x7a\x81\x19\x7f\x27\x13\xca\xad\xea\xf8\xad\x65\x7f\x95\x87\x59\x08\xc1\x58\x32\x3e\x6e\xe8\xb2\xc4\xd4\x67\x60\x15\xb5\xa8\x02\xe9\x50\x78\xdd\x1d\x53\xbb\x69\x5c\xe5\x9b\xb6\x5e\x86\xa9\x5f\xc9\x4a\x88\x03\x5b\x76\x11\x93\xd5\x28\x06\xbe\x0e\x88\x67\xea\x59\x39\x1b\x24\x6d\x5e\x83\xb1\xac\x2a\xf5\x8b\x1e\x0b\x12\x80\x15\xde\x75\xaf\x49\x65\x9e\xb2\x1b\x79\xf7\x5a\x83\x9c\x78\x12\x07\x55\xe6\x45\xd3\xd9\x65\x71\x53\xea\x14\x8b\xd9\xf4\xf9\xba\xfd\x33\x64\xbf\x51\xe9\x06\xf9\xbd\x3d\xf4\xa5\x84\x5e\x68\x4d\xa2\x73\xc7\x39\x08\x84\xbc\xba\x20\x10\x52\xaf\xa9\x66\xf4\xcb\x5a\x4b\x51\x13\xe7\x11\x32\x1a\xd1\xf7\x10\x4a\x33\x18\x51\xe7\x8d\x84\x3d\x9f\x64\xbf\xf5\x91\x56\x64\xd6\x78\xd5\xbb\x1f\xb2\xdc\x84\xee\x98\x9a\x40\x6f\xd9\xf3\xc3\x24\x1d\x7f\x62\x2e\xc9\x9c\xf4\xcd\xf6\xc2\xc4\x65\x6a\x7b\x1c\x48\xb2\xfa\xd9\x26\xb6\xc8\xef\x96\xa8\x39\xb1\xce\xff\x28\xb1\x3f\x2f\x2d\x9e\xdb\x3d\xa6\xa8\x45\xb2\xd9\x01\xe8\x41\x93\xce\xa6\xe7\xbc\xec\x51\x63\xd0\x83\xec\xd0\xb0\x6b\xa7\x00\xe5\xf5\xfc\x0e\x55\xda\x67\xb3\x62\xe9\xbf\x00\x61\xff\x39\xa5\xc1\x17\xf7\xf7\xa5\x2d\x61\xea\x6b\xae\xf0\xdd\xfb\xd9\x2c\x70\x85\x61\xea\x0f\xc0\x1a\x5a\xa5\x0a\xf8\xc3\xaf\x52\xfa\xdd\x1d\xf0\x87\x1f\xdf\xc3\xbe\x7b\x8e\xf8\x43\x73\x7b\xec\x32\x89\x83\x31\x89\xfd\xe6\x6c\x97\x53\xdc\x0e\xa7\xf8\x97\xdb\xe7\x14\x7f\x7b\x98\x7d\x53\x73\x8a\xd6\x2a\xfc\xdb\xb1\x8b\xdb\xef\xc6\x2e\xcf\xf8\x43\xe4\x19\x5f\xb2\xb7\x30\xab\xf5\x5c\x54\xcf\xd0\xe3\xfe\x66\x84\x4d\x9b\x0f\xb2\xf0\x1f\x65\x1b\x51\x11\xb3\xca\x10\x53\x33\x43\xb1\xd5\x1d\x5f\xed\xc5\x8f\x7b\xe9\xc8\x2e\x7e\xdc\x79\xc5\x8f\xfb\x45\x6d\xc3\x59\x64\xc7\x14\x78\x5c\x14\xf2\xca\x5a\x14\xd7\xcb\x86\x09\xc7\xc0\x82\xb3\x06\x51\x80\x07\x67\xd6\xff\x3b\x44\xeb\xdf\xde\x45\xd8\xaf\x13\xdb\x2e\x97\xe4\x73\xbe\xc9\x45\x70\xa7\xd0\x01\x6a\x31\x16\xdd\x39\xea\x05\x09\x2f\xbb\xa7\xc3\x95\x30\x5a\xdb\xbe\xbb\xd7\x5a\x14\xaf\x04\x91\x57\x4f\x26\x04\xa5\x17\xff\xab\xe8\x64\x62\x17\x8b\x5f\x19\x5e\x40\xce\xbc\x85\xb8\x72\x2f\x26\xec\x8e\x45\xc8\x49\x2c\xb3\x19\xca\x10\xed\x5c\x97\x7f\x38\xbd\xfa\xd2\x48\xbf\xe3\x38\x7d\x72\x01\x13\xea\x39\x1f\x18\x61\xcf\x30\x1f\x58\xb6\x8c\xe9\x93\x0b\x6e\xdb\x8b\xbd\x16\x17\x74\x44\x9a\x42\x23\xf4\x44\xad\xab\x7d\x19\x49\x01\x0f\xfc\xe5\x81\x41\x85\xdd\x39\x7d\x72\x01\xbd\xc4\xaa\x1b\xe4\xb3\x7b\xe8\x27\x08\xdd\x0f\x5c\x2d\x6a\xef\x9d\xf7\x13\xf6\x1f\x0d\x3f\x47\xd1\x12\xc4\x97\xe3\x7b\x77\x76\x2e\xcb\x0e\x2a\x55\xa6\x0a\x27\x01\x3c\xcd\xea\x99\x3f\xc0\x92\xd8\x71\x46\xd5\xfd\x3b\xe2\x4e\x77\xda\x81\x8f\x4c\xb4\xf9\x41\x06\xdc\xd3\x8a\x56\x73\x84\x30\x27\x32\x7c\xa0\x44\xf7\x4a\x47\x35\xe7\xed\x25\xf6\x8d\xdc\x10\x04\x63\x13\x88\xfe\xcb\x32\xb9\xae\x03\x5a\x42\x3d\x63\x01\xa0\xeb\xca\xef\x6d\xa0\x6e\xf3\x30\x85\x2c\xfe\xf9\x2e\xbb\xf3\xa2\x65\xbc\xbf\x74\x85\x20\x46\xfb\xa1\x2b\x7d\x4b\xf1\x23\x21\xd4\xc5\x3e\xf0\x6c\x51\xa2\xd2\x83\xb6\xdb\xdc\xd3\x62\x08\xf4\x2a\x6b\xde\x9c\x8d\x2b\xe9\xe5\x03\x78\x3a\x9a\xfb\x09\xdb\xa6\x0f\x00\x66\x8f\x17\x0b\x8e\xc9\xf9\x18\x61\x6f\xce\x4d\x1c\xbe\x73\xeb\x51\x0b\xae\x02\x41\x39\x9a\x51\x92\x56\x60\x4f\x04\x51\xb4\xd2\x69\x0f\xb2\x0d\x64\x35\x6d\x2f\x6d\x0e\x38\xa1\xd6\x17\xdb\xd8\x08\xbf\x46\xe8\x13\x06\x1a\xba\x93\x42\xae\xe5\xdc\x53\x7d\xcc\x8a\x76\x8d\x3e\x68\xd5\x0d\x72\x05\x7d\x9c\x4c\x4e\xf2\x13\x6c\x54\xe2\x33\xd9\xc2\xd4\xa3\xe8\x1e\x90\xf5\x6c\x4c\xcb\xcf\xef\xa3\x3f\x5d\xdc\x3f\x00\x21\x78\xff\x3e\xf6\xd3\xf2\xef\x1c\xee\x80\x90\xe6\x33\x94\x81\x0f\xef\xa2\x0c\x6c\xd7\xf6\xf9\x06\x8d\x32\xf0\x4a\xc2\x9e\xae\x51\x06\x20\xef\xf3\x39\x6d\xde\xdc\x9d\x63\xf4\x67\xe9\xe3\x07\x39\x98\xbb\xa6\xd9\x87\x10\x9c\xc0\xa9\xad\xcd\x78\x65\xe7\x92\x3e\x66\xbc\x22\x04\x81\xbf\x25\xc5\x59\x6b\xa2\xfa\x3c\xf7\xea\x82\x0e\x24\xc7\xbc\x94\x3b\x1f\x27\xec\x48\xfe\xa1\x0d\x5d\x65\x81\x76\x21\x57\xa1\x99\x98\x33\xe4\x42\xfd\xb7\x60\xa6\x36\x48\x42\x6f\xa3\xf6\x33\xe7\x99\x6c\x61\xca\x7c\x60\xa4\xd4\xf2\x0c\xb6\x59\xde\x69\xa8\x15\xcc\x1e\xc3\x1a\xc0\x3d\x9c\xa9\xe5\xba\x6d\xdb\xe3\xea\xcb\x8f\xea\x47\xe2\x17\x78\xad\x13\xfb\x69\x77\x2a\x0a\x53\xbe\x9e\x3a\xef\x7d\x14\xfb\x27\xd2\xfb\xdc\x6d\x46\x41\x1d\xa4\x95\x4a\x20\xd6\xcb\x4d\xe4\x7b\x13\x2d\x13\x62\xb3\x11\x43\x33\xcb\xcd\x25\x31\x68\xc4\x91\x8a\x5a\x32\xfb\x1c\x7a\xc6\x7b\x41\x12\xb9\xf2\xc4\x01\xac\x9a\xfa\xa6\x9a\xd8\x8d\x57\x5d\xcc\x87\x27\x49\x9f\xe5\x2a\x93\x2f\x8b\xa9\xcc\xda\x31\xaf\xf1\x3a\xac\x09\x68\x7e\x1b\xb9\xcf\x7b\x07\x58\xdd\x20\xbf\xe3\xd0\x3f\x1a\xa2\x7b\x1b\xc9\x31\xb1\x87\x9c\xfb\x87\x9c\x3d\x7e\x98\x5e\x71\x19\x7b\xeb\xd0\x24\x0a\xe5\x5e\x00\x3e\x4a\x28\xd1\x7a\x81\x54\xdd\x29\xbe\x43\x29\x7a\x85\x60\x6a\xb8\xf2\xa8\x84\x6b\x72\x02\x94\x4b\x28\x02\x22\x06\x41\xb4\x06\xab\xaa\xb2\x6f\xa6\x91\x44\x3f\x44\x2d\xd6\x9a\xa8\xa2\xe9\xb7\xf1\xfa\xc9\xa0\x98\x50\x0b\x60\xe5\x3f\x69\x47\xf5\x23\x94\x1e\x42\x0d\x59\xb4\x06\x9a\xd4\x63\xb3\xd3\x9a\x13\x80\x68\xc7\x05\x18\x9b\x7b\x29\x96\x4a\x78\xba\xec\xd7\xdd\x25\x1f\x6e\xce\x84\xa7\xee\x58\xc8\xd7\xd0\x2f\x4b\x7b\x16\xc9\x6d\x67\xa2\x47\x9a\x4d\xcb\x2a\xc7\xdd\xc3\x58\x67\x9b\xc7\x2d\x1f\xf4\x5a\xa2\x5e\x5c\xe9\x53\xf3\x07\x24\xab\x18\xaf\x55\xe2\xb5\x4a\xa5\x52\xa1\x14\x00\xc7\x12\x9e\x96\xad\xf1\x6b\x1d\x8a\x91\x00\x30\x9b\x05\xb1\xc3\xb2\x06\x12\xa5\xe4\x95\x8e\x8c\x80\x63\x24\xae\xd2\x65\x1e\xd3\x37\x95\x28\x8d\x3b\xe1\xa4\x5c\xcd\x57\x95\xd4\x6a\xfe\x80\x88\x6e\x8a\x99\x49\x23\x70\xaf\x42\x72\x9e\xc6\x5d\x24\xe8\x3d\xc9\xeb\xda\x71\x04\xc9\x2a\xdd\xd3\x90\xdf\x5f\xa6\x8a\x55\x61\x19\xbe\x1c\x46\xd5\x3d\xe1\x75\x71\x4f\x4b\x04\x34\x3f\x74\xf3\x9b\xcc\x75\x67\x1b\xea\xdd\x52\x94\x36\xf3\x05\x30\x5e\xbb\x67\x73\xe2\x14\xe1\x7d\x96\x69\x87\x7a\xeb\x87\xcd\x9f\x98\xbb\x1f\xe5\x56\x2f\x35\x0e\x8c\x35\x4b\x1f\x1e\xa2\x17\xc0\x2c\x9d\x8c\xc2\xf9\x28\x4a\x9d\xb7\x0f\xb1\x33\x43\xb3\xda\x17\x53\xda\xaa\xcc\xe9\x00\x6d\x8b\x98\x37\x2f\x01\x0d\x6e\x58\x89\xa3\x08\x62\x6e\x62\xd4\x6e\xc5\x1d\x5e\xb0\xa6\x2a\xac\x0b\xde\x40\x36\x70\xd7\x4b\xf5\x6c\xa6\x91\xcb\xc3\xa4\x13\x2b\xb5\x6e\x9a\x39\x78\xcb\xa6\x4e\xcf\x4e\xbb\x07\xdd\x31\xd1\xd6\x38\x4c\x13\x44\x82\xa5\x91\x10\xa6\xe3\x7c\x1f\xfd\x86\xaa\x42\x02\xdb\x81\xe1\x27\x46\xbc\xab\xb2\x1b\x46\x98\x6e\x51\xf6\xc9\x84\xae\x6b\xf3\xb8\x11\xc5\x2d\xc0\x67\xf9\xd1\x5b\x4f\x1b\xaa\xeb\xa3\x25\x3a\x0a\x8b\x77\x3a\xe1\xb1\xf3\x5e\xbd\xc3\xdf\x50\x12\x3b\xfc\xf4\x0e\x76\xf8\xb4\x91\x54\x54\x2c\xa8\xdd\x3b\x5c\x35\x75\xdd\xe7\x5d\x29\x7f\x14\xe7\x6b\xcb\xfd\xff\xfc\x21\x7a\x51\xc2\x21\x95\xae\x0a\x5b\xfc\xc7\xd2\x00\xd0\x01\x0b\x33\xe6\x37\xec\xf7\x60\xc6\xe5\x43\x68\x0b\x7a\x13\x49\xe9\x0e\x3c\xd9\x7b\x6e\x06\xb5\x35\xd5\x80\xca\xb9\x55\x51\x67\x03\xb6\xa6\xb8\x29\x6a\x08\x26\x1c\x7b\x61\x3d\x6a\xf5\xb4\xa6\xcd\x18\xd9\x50\xdd\x1f\x97\x35\xa1\x7f\x4d\xa8\x63\x5e\xad\x40\xb4\x13\xe7\xb3\x84\xbd\xd3\x10\xaf\xe1\xbe\x4d\xcc\x19\x4d\x21\xa1\x6d\x0c\xa6\x06\xd8\xc3\xb0\xdf\xfd\x30\x37\x13\xe5\x5e\x3d\x8f\x31\xd3\x07\x44\xf7\xfc\x96\x17\x77\xc5\xb5\x80\x13\x62\xad\x4b\x18\xa9\xa6\xb5\xc8\x5e\x97\xf2\xba\xb8\x7e\xcc\xbd\x95\xc9\x31\x8f\xa6\x8f\x94\x07\xd2\xda\x71\x7f\x4a\xe8\xde\xa4\x9b\xd4\xd2\x20\x71\x3e\x49\xd8\x8b\xc9\x02\xfe\x00\x0e\xcb\x90\x5e\xb5\xdd\xb4\xee\xca\xe2\x18\x6c\x61\x81\x30\xce\x81\x0d\x47\x5c\xac\x9d\x30\xf3\x9e\x56\xe5\xc7\x14\xd4\x6d\x7e\x4b\x8d\xbb\x2d\x7f\xb9\x99\x6a\x12\x1a\x78\x9d\xb0\xd6\xb4\x7a\xff\x73\x74\x9c\x1e\xd8\xfa\x18\x40\x4b\xf4\xfd\x47\xfb\x49\xe8\x00\xc0\xf5\xea\xa3\x8c\xc9\xbf\x51\x40\xcb\xa1\xfe\x78\x52\x0b\x4e\xb3\xb3\xb1\x41\xbe\x36\x43\xff\x95\xd0\x47\x7b\xb5\xd4\x5f\xe5\xd3\xdc\xab\x07\x7e\xc8\x17\xb8\xe0\x7b\x13\xe7\x1b\x44\xd1\xba\x3f\x21\x78\x06\xbd\xc0\xad\x77\x62\x9d\x43\x3c\xc1\x82\xda\x58\x21\xc4\x38\x88\x2c\x05\xe7\x0c\x19\xd1\x05\xa6\x30\xd3\x63\x03\x90\x4a\x17\x7d\x08\x45\x6a\x44\xd2\x90\x25\xad\x23\x78\x0a\xe1\xfb\xa0\xab\x8c\x23\x2d\x2f\x5e\x11\x37\x8d\x98\x48\x19\xe4\xb1\x02\xe5\x92\x24\xaa\xf9\xc0\x3e\x99\xe7\x1d\x63\x5d\x5a\xda\x01\xbe\x1d\x25\x3e\xb4\x2d\x37\x87\x4d\x9b\x96\xe9\x3e\x65\x20\x72\x9e\x4e\xc7\xb7\x06\x76\x52\xb1\xb8\x55\x71\xa0\x6d\xaa\x82\x42\x83\x61\xb9\x32\x02\x73\xe9\xab\x09\x7d\x8c\xd7\x49\x23\x70\xd0\x97\xd0\x4e\x93\xb5\x9a\xf8\xb5\x18\xad\xf0\xd0\xe9\xb0\xe5\xc9\x4d\xde\x1b\xb1\x1b\x6b\x4d\x0e\x78\x9e\x9e\x06\xd2\xf0\xb0\xa0\x9b\x42\x49\x23\x35\x8b\xa8\xd0\x4b\x65\x30\xab\x02\x45\xb3\xee\xb7\xfb\x11\xd4\x56\x4e\x9f\xf3\x9b\x25\xf6\x7a\xa2\x94\x10\x06\x83\x8d\x11\x60\xd2\x80\xa4\x8f\xc6\x54\x56\xa0\x86\x22\x78\x06\x06\xaf\x0f\x30\x78\xec\x48\xb5\xe3\x22\xd8\xae\xf4\xe2\xa4\x6e\xc0\x3d\xd1\x56\x68\x31\x16\x82\x99\x9f\x83\xfa\x7b\xe4\x7a\xf3\xf8\x54\x69\x79\x00\xaf\x5b\xdd\xc7\x81\x90\x6c\x05\x45\xd8\x0e\x92\xed\xa7\x08\x1d\xad\x87\x89\xd4\x8e\x7f\x90\xd0\xca\xb6\xd4\x9d\xec\x05\xca\xab\x79\x73\x15\x7a\xd5\x9d\xcb\x1e\x66\x37\x01\xcc\x66\x4e\x5b\xac\x9c\xa2\xb4\x36\x53\x54\x59\x83\xd6\xd4\xd9\x45\x9c\x99\x28\x34\x74\x9c\xf4\xbb\x25\x18\x88\x8c\xd4\xfe\x9b\x12\xfb\xaf\xa5\x05\x9e\x62\x7f\xe0\x99\x4d\x14\x4d\x26\x86\x4d\x21\x78\xc4\x51\x71\x47\x30\x15\x9f\x2d\x05\x41\x21\x9a\x1c\x30\x0b\xdc\xe2\xa7\xcd\x1b\xa2\x24\x3d\xc9\xd3\x03\x65\xfb\x95\xf8\x2d\x2b\x3e\x20\xb6\xcd\x81\x93\x51\xc8\x0f\x54\xf3\x93\xa2\x15\xd5\x99\x15\xa2\x9f\xc6\x5c\x76\x5d\xfb\xa1\xc0\x0b\x43\xb3\xbb\x28\xd3\x53\x8b\x16\x94\x36\x55\x5c\xd3\x1e\xc4\x3b\x42\xe9\x26\xf6\x75\x2d\x8a\x57\xca\x90\x40\x1d\x3e\x10\x3c\x31\x2c\x43\xd7\x9c\x22\xbe\xae\x23\x63\xd2\xa8\xff\xb0\x2d\xb5\xc1\x5f\x10\xea\x60\x3a\x05\x79\xea\x8f\xfb\xe1\x4a\xe2\x7c\x82\xb0\x0f\x90\x99\x9e\xe7\x05\x64\xc0\xcc\xf3\x2e\xf3\x66\xe1\x07\x66\x92\x26\x3f\xfc\x25\x9c\x01\x88\x75\x44\x4a\xc5\xc3\x55\x3f\x8e\x42\xc0\x17\x59\xf5\x62\x5f\xb4\x95\x94\x6d\xc7\x23\x99\xd5\x3b\x6a\xb8\xd3\x88\xe1\x13\x88\x5e\x54\x5d\x75\x21\x1c\xb1\x76\x82\x10\x4b\x6c\xf2\xf2\x91\x12\xdd\x2f\x66\x70\x32\xf0\xbd\x84\x27\xce\x3b\x05\x7d\xb9\x21\x7b\x80\xb9\x85\xe5\xdc\x7b\x81\xbe\x99\x21\x98\x06\x68\xfd\xec\x9c\x94\x90\xd4\x1a\xdb\x43\xc9\x08\x2f\x7e\x22\xe4\x6a\xc1\x35\x1b\x3c\xb3\x8a\x61\x84\x44\x14\x98\x28\xbe\x01\xde\x58\x88\xa0\x22\x17\x17\x55\xae\xdb\xa7\x2f\x7a\x30\x0f\x92\x27\x6c\x41\x5f\xf6\x38\x43\x7e\x7b\x7b\x38\xd9\x7b\x45\x0f\x67\xe7\xa6\x9c\x63\xec\xea\xd3\x09\xd7\x11\x5b\x07\x12\xd7\x6f\xd7\x4c\xb8\xe9\x9e\x15\x11\x0b\x52\x80\x3d\xfc\x51\x82\x2b\x22\x87\xed\xfc\x36\x61\xff\x09\x56\xc4\x0d\xf1\x89\xf2\xbf\xc1\x74\x7e\x78\xea\xa5\x11\xdd\xcd\x75\x41\x7e\x61\x76\x63\x56\xaa\xf0\x71\x45\xa5\xca\x43\xdd\x8f\x71\x9a\x5b\x4b\xe0\xb6\xb4\x6b\x41\xb6\x64\x9b\x0f\x41\x4e\xcb\xdc\xec\x74\xc1\xb4\xb4\xfd\xfa\x4e\xa6\xe5\x05\x04\x71\x82\xc0\x76\x72\x3b\x6b\xd9\x64\x59\xbd\x51\x62\xdd\x5c\x54\x17\x23\x05\xc0\x9d\x22\x26\x40\x97\xcf\xa1\xb5\x7b\x92\xd3\xd1\x59\xf0\x81\x4a\x5a\xf4\xe0\xbf\x0c\xd3\x87\x83\x10\x38\xd7\x09\x82\x05\x5e\x8b\x79\x9a\x38\x1f\x1f\x66\x6f\x19\x9a\xcd\x3d\xed\x77\x76\x4c\xa4\xf2\x48\x70\x69\x58\xb8\x10\x6e\x1b\x65\x50\x4c\xae\xd3\x09\xa4\x0b\x95\xf6\xdf\x83\x7e\x48\x9e\x58\xf9\xc9\x48\x26\x13\x56\xda\x1e\x3b\x18\xd4\xb0\x31\x2d\xe9\x7b\x89\x44\xd6\x11\x74\x6b\xd5\xaf\x77\xbc\x00\x1a\x12\x74\xab\xa5\x24\x11\xa4\xbb\xf2\x7e\x69\xc9\x3e\x55\xdd\xa3\x42\xd8\xc2\x28\xeb\xb2\xea\x7e\x4d\xe2\xc1\xd7\x81\x1a\x95\xf1\x4c\x23\x69\x92\x57\x01\x46\x39\xca\x7e\x88\xdb\xa7\x19\x81\xbf\xd2\xb6\xad\xe8\x19\xf7\x33\x81\xf3\x70\xb1\xa4\xf8\x7e\xb8\x5c\x81\x27\x62\x20\xb2\xa5\x4a\x14\x56\xbc\x4a\x3b\xb2\xac\x2c\x57\xd3\x2b\x07\xc0\x9b\x28\x4a\xd6\x73\x5e\x78\x95\xef\xed\xa5\x17\x89\x8e\x64\x5c\x9b\xf3\x3f\xf6\xb2\x2f\x8c\x28\x76\x0f\x3a\xe9\x05\xfe\xed\x9e\xe9\x68\xd3\x9f\xfb\x9b\x0d\xfd\xd4\x2c\x25\x26\x1b\xdd\xa2\x50\x48\x8d\xe2\x3a\xe8\x3d\x7c\x8c\x4f\xb7\xea\x83\x50\x53\xcc\x59\x00\x3b\x49\x6c\x3a\xdf\xaa\x0f\xf8\xfd\x24\x73\xfc\xf2\x13\x9d\x59\x05\x77\x14\xdc\xc3\x86\x50\xe0\x27\x1a\xca\x50\xf0\xc3\xb1\x72\x77\x42\x6b\x11\x34\xa6\xaf\x7d\x05\x4f\x8f\xc9\x87\xf3\x2d\xc3\xe5\x10\xb7\xbc\x20\xaf\x91\x13\x14\x0b\xfc\x58\x5c\xaf\x25\x18\x84\x1e\x5d\x43\x6e\x46\x94\x9b\x17\x74\xf5\xb8\x72\xc1\x00\x09\x07\x5c\x12\xb5\xc1\x03\xfd\x85\x12\x88\xb5\x3e\x2e\xd8\x9b\xec\x19\xf6\x36\x2e\x48\xb9\x23\xed\xa2\xb9\xce\x83\x6f\xa0\x87\x12\x83\xa0\x38\x52\x34\x90\xae\x6b\x86\x74\xb2\xd4\x85\xb4\x04\xea\xa6\x57\xfe\x85\x92\xf4\x4f\x20\x88\x90\x56\x78\x64\xc6\xbc\x6e\x5b\x1a\x4f\x01\x3c\x4b\x81\xf4\x73\xb7\x85\x7c\x82\x56\xa2\xa3\x43\x71\xac\x7d\x23\x23\xe5\x1b\x69\xcf\x6c\x52\x75\x8f\xfb\x2d\xa5\xc5\x36\xd4\x0e\x7e\x6e\x32\x41\x2c\x48\xfc\x96\x1f\x78\x62\x73\x24\x4d\xcc\x0f\x99\x2b\x35\x98\x1c\x52\x60\x30\x3c\x3b\x1f\x1b\xd1\xd9\x8a\x41\x31\x7e\xd4\xe4\x94\x2f\x10\xba\x4f\x88\xe2\x80\x1e\xf2\x87\x84\x7d\x08\xa0\xa4\x14\xc6\xa9\xa7\xb3\x71\x9b\xee\xc9\x3a\x7c\x02\xbc\x2b\xb3\x74\xf1\x99\x93\x25\xda\x34\x04\x23\x05\xde\xf5\x65\xd3\x8d\x97\xc7\x0a\x4e\x4c\x3d\x48\x72\x35\xa6\x0a\xa0\xaa\x2c\x64\xf9\x4e\x4b\x87\xf1\x8b\x7d\x27\x4f\x6d\xe6\xf7\xab\x76\xbd\x75\x59\xbe\xa1\x84\xd0\x5a\x3a\xac\xe1\xee\x12\xfb\x7b\x18\x5a\xe6\x2c\x8f\x71\x26\xf2\x97\xf4\xc5\x95\x87\x59\xf0\xab\xa6\x5c\x03\xbc\x81\x9f\x66\xce\xf1\x55\x77\xa1\xe0\x4b\xe0\x90\x65\x09\xf0\x51\x5b\xe2\x86\x1f\xa2\xac\x27\xe7\x9f\x9a\x8d\x76\x27\x17\x51\x26\xbc\x4d\x78\x49\xe2\x2f\x87\xe2\xaa\x01\xe4\xbe\x89\x77\xe4\x5c\x4d\x4c\x68\xe4\xcf\x94\xe8\x3e\xa0\xbf\x7e\xda\x75\x3e\x8e\xba\xeb\xc3\x97\xb2\x77\x81\x26\x55\xbd\x90\x3c\x88\x7b\xb3\x17\xfb\x51\x27\x51\xba\x98\x5a\xd4\x6a\x47\x21\xd0\x19\x0d\xf5\x85\x26\x3e\x98\x24\x99\x65\x4c\x57\x62\x86\xac\x82\x9b\xea\x9c\x7a\x33\x59\x57\xb6\x2a\x23\xae\xdf\x4f\x54\x0e\x39\xc8\xe4\xd6\x8e\xc1\x05\x16\x9a\x8a\xa5\x07\x80\x4a\xac\x91\xb5\x8c\xa4\xd0\xd3\xf5\xd5\x0c\x9c\x00\x19\x04\x9b\x98\x1d\x85\x6a\x54\x3f\x34\x78\x0e\xd6\x02\xe4\x2e\xce\xf4\xab\xe5\x8c\x08\xc6\xd6\xc8\x6c\x7d\xd1\xab\x86\xe8\x23\xda\xf9\x1a\x9d\x1f\x94\xd8\xb7\x4b\x36\x3f\xe4\x1b\xe6\x1d\xc5\x15\xea\x2a\x5d\x26\xd9\x40\xb1\x82\x95\x5a\xec\x83\x8a\x86\x01\x55\x55\xaf\x24\x22\xa3\xf9\x56\x50\xf6\xb5\x48\x9b\x49\x57\x78\x77\x2d\x8a\xb5\x83\xb9\x6a\xd1\xa2\xe6\xb2\x49\xf4\x01\x93\x42\x31\xd8\x5e\x62\x79\x09\x17\x14\xee\x56\xdd\x49\xc1\x03\x82\x74\x09\xd7\xa4\x3a\x2f\x8a\x6b\x5d\x92\xa8\x6a\xc0\x2e\xda\x33\xac\xfc\x3c\x64\x6b\x62\xcf\x7b\x32\xb1\x5e\x31\xb7\x9c\x6d\x21\xc5\x34\x2a\xab\x5f\x14\xbb\xb7\xf3\x38\x92\x4e\xf5\xb1\x84\xb8\x54\xaf\x2d\x3a\xf0\xc2\x21\x7a\x51\x6c\x7a\x0f\x24\xce\x3f\x95\xd8\x6f\xe5\xd6\x44\x5c\xd7\xba\x14\xa4\x33\xcc\x38\x55\x2e\x76\x81\xa7\x24\x1e\xd1\x2f\x5d\xb2\xea\x4e\x2a\x0e\x44\x3c\xeb\x22\x5e\x8e\xa8\x0c\x40\xe9\x6c\x06\x08\x4b\x4c\x9e\x9c\x56\xcc\x81\x74\xb4\xb4\xf5\xf7\xe8\xd2\x60\xf7\x04\x98\x04\xe9\xb5\xca\x6f\x13\x8c\x72\x1a\xb9\x6c\x31\xee\x70\xd6\xc7\xe9\xa3\xd9\x59\xaa\xd6\xa2\x96\x41\x3c\x0c\xff\x8f\xa5\x20\x5a\x9a\x68\x79\x62\x0f\x4d\xac\xf0\x76\x32\x91\xf8\xcb\x15\x29\xb0\x4d\x1c\x3c\x78\xf0\x4a\x20\x21\xd0\xdd\x27\x5c\x7a\xfd\x13\x2e\xbd\x3e\xe7\x22\x34\x60\xfa\x91\x9c\xd7\x06\xfd\x3a\xa1\x17\x5a\xdc\x96\xf3\x19\xc2\x3e\x46\xe6\xf1\x91\xa9\x4b\xca\x99\xf0\xc5\x86\xc9\xbc\x2f\xaa\xee\xa9\x10\x18\xfd\xc9\x60\xcd\xeb\x26\x65\xf7\x54\x78\x14\xe1\x5c\xca\xee\x49\xbe\xca\x63\x4b\x46\xc4\x42\xe7\xd4\x4f\x76\xe2\x62\x39\x8a\x0a\x76\xd9\xdc\x6d\xaf\x1c\xa6\x0f\x97\x5a\xfe\x8c\x06\x7c\x7f\x88\x7d\x6b\x68\x3e\xf7\xd4\xf2\x32\x31\x5f\xaa\x63\xe2\x67\x5a\x72\xe9\xc2\x83\x56\x90\xb2\x3c\xd4\x99\x06\xa7\x23\x05\x29\xb4\x35\x2a\x81\x1c\xcf\x95\x5d\xb5\xbe\x36\xcd\x90\x13\x71\x0a\xeb\x2e\x64\xfc\x2b\x0e\xa6\x88\x3b\xa1\x6d\xc7\x35\xae\x74\x16\xf0\x65\xaf\xd6\x65\x76\x3b\xa6\x10\xaf\xfa\x8b\x22\xa9\x2f\x11\x62\xb0\x3d\x89\x5d\x15\xca\x10\xbc\x6c\x47\x69\x20\x49\x95\x8e\x15\x17\x54\xd9\xe4\x90\x9b\x2f\xc6\xa4\xdd\xd9\xee\x17\xf7\xe5\xc1\x83\x87\x2e\xab\xc8\x26\x2a\xd0\xbf\x6a\xab\x9e\xe1\x5c\x85\xb9\xa4\xa7\xca\x4b\x50\x3a\x8c\xf8\x66\x5a\x4e\x8b\x04\xbd\x89\xd0\x0b\x35\xeb\x03\x3b\xe2\x15\x84\xdd\x45\x0a\xcd\x04\x19\xa9\xf3\x13\x60\xd9\x64\x02\x2e\x4d\x22\x74\x45\x9b\x11\xce\xe2\x4a\xd4\x2c\x66\x55\x98\xbd\xfc\xdf\x84\x3e\x2c\xe7\xcd\xe3\x7c\x75\x10\x38\xd2\x5e\xe3\x24\xbb\x97\x9c\x07\x07\xa6\x62\xc5\x22\xec\x9c\xaa\xeb\x2e\x70\xe9\x23\x6f\x5a\xb7\x00\xb4\x53\x8e\x3a\x73\x3f\x02\xa9\x05\xd9\x06\x7a\x0f\xa1\x17\x25\x96\x4d\xc5\xb9\x93\xb0\x64\x5a\x03\x76\xda\x06\x17\x65\x40\x13\x6f\xd1\xc0\xe4\x05\xbe\x87\x1c\x9e\x5d\x12\xf9\x89\xac\x9e\x23\xa0\x21\x4b\x7a\xca\xb8\x7e\x98\xa4\xdc\xb3\x3d\x71\x3f\x4b\xa8\xd3\x5b\xd4\xf9\x10\x61\xef\x24\xbd\xcd\xe4\xd3\xaa\x89\xbf\x73\xdd\x96\xca\x9c\x1e\x22\x31\x18\x59\x4c\xbd\x64\x25\x63\x36\x79\x45\x06\x0a\xe0\x0a\x19\xcf\x65\x97\x2b\x52\xb2\x9c\x30\x87\xf4\x27\x43\xf4\xd1\x80\xdc\x38\x87\x96\xe2\x93\x4a\xd1\xe4\xbc\x77\x88\xbd\x69\x68\xa1\x09\x32\x9e\x44\xb9\xd6\xe6\xe4\x4c\x1d\xa5\xb2\x2a\x18\x51\x81\x85\x5e\x5e\x32\x10\x0a\xcf\xac\xa0\x57\xd6\x45\x22\xcd\xc7\x4b\x01\xcc\xc5\xaa\xcf\xd7\x10\xaf\xc9\x5f\x0e\xbd\x40\xb5\xca\x25\x9b\x89\x6c\x8e\xdd\x8a\x56\x94\xb5\xa3\x7a\x39\x4b\xdc\x6b\xd9\xc0\x7b\xec\xdf\x16\x35\x45\x2e\x9d\xd7\xdd\xb9\xd9\x69\xf7\x50\xd5\xbd\x01\xf5\x95\x50\xd7\x42\xd1\x04\x29\xc1\x15\xbc\x03\x50\x61\xb8\xa9\xf2\xd2\x42\xec\x4d\x00\x9d\x4f\x1e\x3a\x45\xb1\x90\x32\x60\x9e\x66\xcd\xfb\x89\x63\x5c\xd8\x7c\x86\xec\x67\x28\x45\x1f\x20\x74\x34\xe9\x2c\xa1\x9b\xbd\xf3\x51\xc2\xde\x5b\x40\xcf\x1a\x9d\x20\xe8\xba\x82\x61\x41\xda\x35\x17\xd5\x7b\xf5\x9f\xec\x1a\xf5\xe8\xda\xea\x35\xba\xca\x6b\xab\xd7\x08\x42\xa6\xd7\xff\xda\x6a\xb2\x5a\xab\x5e\x23\x59\x5f\xe9\xde\x7f\x2d\xdb\x92\x08\x6a\x1d\x8b\x27\xbf\x81\xb6\x3d\x88\x26\xb6\x8e\xdc\xa7\x87\xe9\x63\x53\x1e\xb7\xfc\x10\x84\xa9\x63\xb1\x07\x09\x07\x7c\x20\x6e\x60\xf5\x7e\xe7\xb0\xb2\x7a\xbf\x7a\x78\x20\xab\x77\xc8\x39\x46\xf1\xaa\x7a\xb9\xbb\x2c\xaa\x85\x69\x41\x87\x1d\xe0\x69\x05\xc3\x9c\x20\xf7\x57\x47\xd4\x61\x29\x73\xe7\x4d\xd6\x90\x98\x84\x2f\x7b\x96\xd1\x1a\x64\x16\x54\xa9\x20\x4f\xac\xc5\x0b\x59\x99\xdf\x6a\xf1\xba\x20\x56\xa2\x51\xa5\x84\xc7\x0f\x04\xdb\xec\x07\x65\xeb\x8e\x85\x2e\xba\x6d\x18\xba\xad\x8d\x57\x94\x0a\x5a\xb4\x8a\x49\x02\x54\x34\x19\x5e\x23\xd5\x62\x93\x3a\x5d\x2a\xd2\x3c\x63\xea\x80\x41\x06\x4f\x54\xcf\x35\x56\x41\x1d\x4c\x75\xce\xd0\x21\x47\x65\x3e\xcd\x2a\x14\x5f\x37\xa2\xb8\xe6\x2f\x05\x5d\xb7\xe9\x05\x69\x06\x8b\xb9\x82\xe8\xe5\xa2\x1a\x21\xb2\xa7\xe6\xf0\x83\x28\x5c\x86\xce\x79\xd2\x49\x4b\xe5\x81\xa9\x89\x3d\xde\x69\x63\x7b\x82\xb6\x77\xa3\x4e\x1f\x3f\xad\xc3\x07\xd5\x50\x6d\x71\xf0\x36\xba\x3f\x8d\x02\x8e\x13\x92\x38\x4b\xec\xf1\xfd\xdc\x02\x8c\x62\x96\x91\x69\x82\x56\xe8\xcf\x6d\x9d\xd5\x5d\x7f\x4d\xdf\x55\xa2\x7b\x25\x6e\xa2\xf3\x1b\x25\xf6\x02\x6d\xad\xd7\x29\xa8\x15\xac\x5d\x96\x07\x0d\x04\xb6\xad\xd4\xb9\x67\x87\x74\xbe\x7d\xbf\x16\x84\x48\xdc\x8e\xb6\xeb\xd2\xcd\xb5\x5d\x8f\x74\x1e\x01\x5f\x95\x63\x80\x03\xbf\x91\x77\x13\x4a\xbf\xf5\x38\xfa\x98\xcd\xb0\xb8\x9c\x07\x1e\xc7\xee\x23\xfa\xa7\x09\x34\xda\x6b\x58\xb5\xe3\x0a\x95\xc7\x31\x3e\x10\x24\x37\x8d\xc1\xd9\x27\xcb\x51\x0c\xb8\x9c\x58\x16\xc5\xfa\xb2\xcb\xa5\xf8\x1e\x74\xad\x68\x71\x4c\xc5\x03\x26\x4c\x75\x5a\x94\x2a\x53\x2c\x5c\x2d\xf3\xbe\x8c\xa3\x00\x72\xc1\xf3\xea\x06\x79\xc5\x63\xe9\xeb\xed\xac\xc4\x2f\x29\xb1\x75\x95\x94\x58\xb9\x87\xe8\x5e\xec\x64\x9d\xb7\x15\x4c\x98\xed\x81\x43\x74\x62\x30\x5f\x88\xf3\x9b\x69\xf8\x5d\x25\xfa\x08\xbd\xf3\x71\xa5\x78\xe2\xbc\xa6\xc4\x3e\x07\x1e\xca\x60\x32\x6b\x7a\x88\x88\x00\xde\x9b\x82\xd8\xd9\xbe\x28\xa8\xdb\x0e\xfd\x06\xd0\xea\x19\x71\xe7\x63\x49\x3f\x31\xd4\xcc\xe0\x43\xdd\x49\xdb\x1d\x38\x8b\xcf\x44\xfb\x94\x20\xa6\x82\xd8\x3c\xf3\xdc\xcf\xba\x17\x1a\xdc\x99\x04\x62\xdb\x7e\x44\xf6\x94\x3d\x35\x74\x99\x8e\xa0\xc1\xd9\xb9\x95\xcd\x65\x41\x95\x8a\x17\x43\x78\xee\x0c\x61\x5a\x5b\x66\x14\xbb\xa3\x80\x3d\x7c\xbc\xaf\xbb\x3c\x93\x43\x6c\xde\xf7\x5f\x4b\xf4\xd1\x96\x2d\x4a\xaf\xcd\x37\x4a\xec\xd7\x4b\x9b\xac\x4d\xce\xdc\xd1\xb3\x40\x8b\x0a\x17\x01\xd1\xf5\xdc\xa4\x03\x99\x0e\x1a\x9d\x20\xff\x29\x5c\x7b\xc0\x36\xa0\xd2\xe6\x49\x86\x5b\x75\xcb\xc2\xe7\x93\x96\xaa\xc2\x6f\x13\xed\xcf\x86\x0e\xea\x3f\x16\xeb\xbc\x92\x05\x7d\x3f\x93\x2d\x48\x24\x62\x77\xfb\x48\xc4\x72\xf9\x35\xc0\x8f\x0e\x59\xce\x31\x5d\x8f\x08\x23\xe4\x8d\xea\xca\xec\xe0\xfc\xce\x30\x7b\xfb\x70\xcf\x63\xc5\xcf\x83\x5d\x77\x4d\x73\xf9\xa8\x27\xe4\x42\x0c\x4c\x24\xc7\x0e\xd0\x1a\x86\x93\xa1\x06\x3f\xa9\x69\xdb\x4e\xa6\x7f\x8f\xc1\x15\xd3\x83\x5c\x38\x89\xaa\x49\xd0\xf5\x55\xbf\x96\xfa\xad\x04\x96\x1a\x1c\x14\x9b\xdc\x8f\x35\x03\x67\x71\x29\xc8\x05\x25\x16\xe7\xad\x1d\xe8\x97\x3b\x5e\xec\x85\x29\xe7\x99\x37\xbf\x29\xa2\xe7\x2c\x01\xbe\x02\x74\x58\xd0\xb6\x12\x71\x7d\xd4\x79\x0d\x22\x6d\x23\x41\xdf\x65\x9e\x69\xc0\x9a\x08\x12\x8e\xb0\x3e\x7e\x43\xa9\x65\x01\xda\x61\x89\xd7\x22\xc1\xe8\x2a\xf4\x66\x37\x89\x22\xf0\x49\xb6\xeb\x05\xe7\xe4\xac\xf2\x65\x39\x50\x33\x83\xbe\xd1\x2b\x99\xba\x09\x35\xe1\x5a\x39\x0b\x56\x0d\x89\x06\xa3\xa2\x56\x90\xeb\xcb\x66\xb3\xea\x4e\xa2\x2d\x29\xe9\x04\xe0\xf3\xa1\xe7\x49\xcb\x23\x0d\x30\x70\xa7\xc8\x8d\x29\x57\x02\x65\x98\x32\x98\x3e\xdc\x57\xc5\xb4\xe3\x53\xa3\x0a\xda\xfa\xfe\x51\xf6\xee\x51\xb0\x65\xa8\x3c\xf1\xe0\x38\x28\x6d\x3e\x3e\x7a\x0e\x88\x91\x28\x7d\x44\xa7\x05\x1e\xc8\x51\x43\xc2\x24\x29\x5f\x0e\xdc\xc3\x7e\x8a\x89\x06\xe0\xf4\x21\x25\x31\x14\xb8\x70\xe0\xca\x4a\x75\x9b\x08\xa6\x40\x48\x5a\xf2\xa8\x60\xcc\x55\x26\x2c\x1a\xfe\x0e\x86\x9a\x03\x59\x05\xa8\x49\x6b\x8e\x11\x86\x07\xcf\x97\xc1\x67\x48\x6f\x52\xf8\x42\x39\x4e\x02\x07\x2c\x56\xaf\x1d\x25\x89\x2f\x16\x1c\x07\x8e\x5a\x8f\x23\x94\xce\x71\x30\xe8\x1e\xc1\x28\x21\x21\x88\x79\x62\x97\x08\x89\xba\x26\x08\x4e\x16\xc9\x64\x24\x1a\x50\x9c\x89\x38\x3f\x05\xc8\x40\x06\xad\x45\x77\x10\x51\x27\x9e\x30\x1e\xaa\xbd\xa0\xbc\xac\x10\x40\x3e\x41\x9e\x5a\x3a\xf8\x4a\x6b\xbf\x3e\x02\x5e\xe2\xae\x71\x70\xe0\xc5\x62\x49\x1b\xe0\x9d\xa3\xb5\x50\x50\x42\x10\x19\xb0\x21\x08\x2b\x83\xf3\xad\xfc\xef\xf0\xe2\xa9\x81\x4e\x14\x82\xd0\x3c\xf1\x48\x2c\xd6\x3c\x4a\x1b\x05\x23\x37\x00\xcd\xa5\xb1\x31\xac\xf7\x51\x30\x00\x41\xb7\x87\x35\xd9\xc7\x47\x55\x2c\x8d\x38\xdc\x52\xca\x01\xcb\xbd\xaf\x95\x07\x4a\x49\x10\x35\xf0\x7e\x00\xc4\xad\x58\xb9\x21\x00\x02\xd6\x82\xb8\x97\x78\x9d\xd7\x8f\xb8\x93\x3d\xc1\x6c\xa9\x1e\x84\x38\xaa\x4a\xb0\x44\x5c\x7e\xbc\xcf\x70\x18\x96\x02\x97\x6b\x87\x8a\xa3\xe0\x15\xb1\x8d\x8a\xe5\xa4\x14\x8f\x55\xcc\xa4\xdd\x07\x89\xac\xae\x8f\x88\x2c\xc8\x7d\xa0\x4d\x7c\xdd\xd7\xa2\x99\x10\x66\x41\x60\x55\x6c\x73\xec\xae\xd9\xd5\xe5\x40\x6b\x25\x12\xc7\x11\xf0\xfe\x01\xe8\x1d\x79\xd8\x14\xef\xcd\x0d\x53\xa3\xdc\x09\x72\x02\xa2\x25\xe8\x87\x10\xbb\xba\x6d\xe9\xf3\xac\x60\x79\x42\x97\xc7\x31\x42\xa7\x49\x25\xb1\xbc\xd7\x32\x7c\xa5\x28\x49\x4d\x2b\x26\xa5\xe7\xfa\x2a\xef\x41\xb9\x5f\xa7\x7b\xda\x51\x7d\x76\xce\x89\xd8\x92\xc1\x6c\xa9\x30\x14\x3b\x23\xd9\x7c\xd4\x49\x81\xc6\xeb\x55\x32\x2c\x26\x3a\x7d\x5b\x0f\xfb\xa5\x2b\xb3\x48\xe8\x5d\x25\xba\xef\xb6\x28\x01\x3d\xbe\xf3\x5d\xc2\xfe\x06\xb8\xe1\x9b\x3a\x5e\x20\x6d\xb9\x2a\xf9\xf0\xd8\x4d\xa7\x16\xc6\x51\x8d\x9f\x41\x2f\x6b\xe5\x96\x91\x36\x43\xfb\x14\x17\x1a\xed\x41\x71\x3b\x17\xd5\x6f\x3a\xb5\x20\xd3\x94\x74\xdb\xd2\xfb\x46\xdf\x5d\x37\x9d\x5a\xc0\x86\x78\xb2\xd3\x20\x67\xb4\x8c\xc7\x51\x3b\x4a\xbc\x20\x99\x00\x7d\xbf\xea\x4f\xe5\xb6\x08\xa3\xe0\xb3\x59\x58\xd5\x00\x35\x01\x7b\xc6\x64\x4f\x66\x81\x9d\x72\x41\x32\xe9\x06\xc0\x42\x1d\x98\x11\x1c\x06\xaf\x1f\xc8\xb9\xfc\x8e\x6a\xb6\xd1\xf9\x34\xd9\x39\xfc\xcf\x2b\xc8\xfc\xd1\x29\xf7\xf0\xe1\xc3\x57\x03\x18\xb4\xcc\x64\x80\xba\xaf\x8c\x49\x57\x26\x59\x2f\x71\xbd\x9a\x38\x5e\x01\xaf\x2f\xdb\x57\x41\xc0\xd3\xcc\x51\xd6\x08\xcc\x50\xe1\x85\xe0\xb3\x57\x2f\xba\x0f\xc6\x92\x71\xcb\x35\x9c\x7e\x62\xb4\x1f\x7e\xf3\x22\x6f\xb5\x03\x2f\xe5\xce\x7f\x1a\x05\xa4\x3e\xf5\xdb\xcc\xdb\xe0\xa6\xea\xa1\xa8\x54\x5b\x99\x6b\x51\xdb\xe7\x4a\xea\x8e\xb9\x32\x44\x23\xe8\xc5\xbf\xee\xa2\x4e\xec\x22\xee\xef\x22\xee\xf7\x47\xdc\xff\x0b\x42\xf7\xa9\x73\xe5\x3c\x30\x48\x2a\x45\xe3\x74\x02\xfa\xfe\xeb\x88\x71\x58\xb3\xb3\x94\xa5\x03\x54\x92\x8e\x92\x0d\xe4\x6a\x4b\xd9\x4d\x35\x5e\x3d\x2f\xf0\xf3\x0b\x5b\xe3\x56\x1c\x74\xaa\x7d\x70\x2b\xd4\xb8\x7a\x60\xe8\xfb\x02\x1a\xab\x2f\x00\x19\xe7\x25\xfb\xd8\x25\xb9\x67\x3d\x08\x39\xea\xa5\x89\x94\xf3\xe0\xc8\x2e\xcd\xda\x26\xcd\xba\x55\x01\xe5\x2c\xb2\x47\x1b\x38\x39\x7a\x73\x59\x7a\x91\x83\xb4\x4a\xcb\xdb\xd9\xe6\xbb\x24\xf1\x21\x84\x74\x73\xcb\xd6\x14\xe3\x32\xe7\xd2\x2d\x28\x46\x11\xe2\xcd\xaf\x0c\x6f\x45\x35\x20\x5a\xf7\x1b\x43\xec\xa6\xdc\x33\x83\x09\x02\x2b\x9b\x97\x7a\x12\xe8\x46\x1e\x5f\x10\xd9\x40\x43\x62\xd1\xd8\x8c\x63\xda\x20\x77\x0f\xfd\x7b\xb8\xad\xfe\xbd\xe4\x87\xb9\x7b\x98\x1e\x18\x30\xbf\xa8\xf3\xd5\x21\xf6\xc4\xa2\x17\xb9\x0c\xa9\xb9\x44\xa3\x46\x96\xb0\x7d\xf8\x68\x76\x7a\x83\xdc\x33\x44\x3f\x9d\x65\x0a\xfb\x38\x61\xef\x27\x47\x17\x24\xe6\x91\xae\x0c\x1d\x1a\x8a\xf3\x87\x9d\x8f\xf4\x61\x67\x97\x36\x6c\x9d\xee\x8b\xb9\x57\x3f\x15\x06\x5d\x27\x60\xbf\x68\x9a\x66\xc1\x1d\xc2\x1d\x13\xaf\x27\xd6\x62\x3f\xe5\xe3\x98\xf9\x46\x94\x35\x02\x64\x1b\x51\x2c\x35\xaa\xfa\xa5\x72\x30\xf6\x43\xf7\x66\x99\x93\xb1\x83\x0e\xe6\x86\x0b\xc4\x31\xaa\x67\xd6\x79\x22\x93\x46\xcb\xd9\x69\x19\x07\x22\xc6\x92\xa5\x2f\xeb\x59\x20\x73\x08\xff\x3c\x44\x2f\x29\xda\x0d\x0a\xbd\x39\x03\x58\x86\x44\x09\x7f\x34\xc4\xde\x4d\x26\x95\xcf\x5c\x06\xbd\x6d\x02\x23\xf3\xb8\xa5\x7d\xfc\x40\xa1\x05\x47\x54\xfa\xdb\x69\x1f\x3c\x84\xa9\x76\x0f\xba\x63\x00\xe9\xeb\x8b\x33\xec\xb9\x61\x54\x89\xda\xe3\x55\x77\x12\x01\xf2\xb7\x6e\x20\x8c\x74\xfd\xb2\xa2\x04\x15\xcb\xba\xae\x33\x64\x04\xdb\x3a\x43\x68\x5b\x07\xa1\x6d\x90\xef\x13\xfa\x5c\x42\x8d\x47\x4e\x3a\x80\x67\xa9\xe9\xc4\x2f\x66\x84\x5d\x37\x89\xea\x69\xed\xcb\x2f\xba\x57\x36\x61\x00\xb4\x2e\xc7\x86\x3c\xc6\x4e\x55\x85\xb8\x8f\x7f\x3a\x81\xf2\x84\xbf\x05\x01\xb0\x7b\x2a\xb1\x62\x60\xed\xda\xc2\x5c\xbf\x74\x68\x5a\x0c\x0e\x82\x87\x2a\x87\x0e\x1e\xb4\x9d\x04\xfe\xd7\x7e\xfa\x53\x85\x2b\x1f\x2d\x71\xe7\x0b\xfb\xd9\x9d\x04\xfe\xb4\xa4\xe0\x26\xf7\x82\xb4\xe9\xd6\x9a\xbc\xb6\x22\x4f\x89\x46\xcd\x51\xc9\x0d\x10\xb8\x4c\xca\xe2\x69\xe4\xd6\x39\xaa\xd5\x78\x16\x1a\x8c\xbc\x68\x00\x78\x0c\xb1\x34\x73\x41\xaa\x50\x69\xed\x88\xbd\x46\xc3\xaf\x55\x37\xc8\xa7\x29\x7d\x05\xa1\xc3\x7c\x9d\xd7\x9c\x17\x91\x01\x3c\x12\x66\xd6\x79\x6d\x12\xe2\x98\xd8\x53\x4f\xc9\x7c\xaa\x60\xb4\x89\x42\xad\xa1\x6b\x44\x41\x10\xad\x01\x59\xd0\x6e\xac\x46\x90\xa7\xa8\xc2\xc8\xf4\x20\xcd\xe6\x0a\x3c\xc4\x5b\xe1\x55\x7a\x2f\xa1\x0f\x97\xca\xc6\xc5\x66\xcc\x93\x66\x14\xd4\x9d\x57\x12\xb5\x7c\x77\x9c\xf0\x43\xbf\xd5\x69\x41\x64\x18\xe0\x71\xcb\x90\xb0\x4e\xcc\x8d\x80\x0c\x98\x5d\x9c\x44\x23\x84\x4c\x85\x8e\x81\x11\x43\x5c\x0e\xa2\x9f\x4a\x29\x9b\x73\xff\xa8\xba\xaa\x25\xed\x52\x73\xc8\x5e\xe4\x15\xba\x57\x5c\x21\xc7\x78\xea\x3c\x93\x56\xb7\x8e\x1a\x5e\x5c\x9c\x3b\xc6\x53\x39\x83\xea\x67\x6e\x36\x44\x85\x66\x64\x8e\xdc\x01\x55\xfa\x0d\x42\x1f\x29\xa3\xf5\xa6\x79\xe0\x75\x95\xf3\xd2\x86\x9e\x99\xf7\x93\x93\x9d\xd6\x12\x87\xeb\xae\xd7\x49\xc7\xd6\xed\x2a\xeb\xa6\x54\xfb\x04\x76\xfc\x99\x44\x06\x17\x8d\x9d\x83\x38\x29\x5b\x2b\x9a\x19\x36\xb1\x2d\x6b\x46\xef\xa0\x17\xb6\x2d\xd7\xac\xec\xd4\xde\x10\xad\xb9\x51\x23\xe5\xa1\x3b\x96\x39\x21\x8d\x1b\x53\x94\xad\xbb\xe5\x27\x7e\x28\x73\xe3\xd9\x72\x41\x3f\x4e\xe8\xc3\xa5\xae\x3d\xdb\x7a\xbf\xa9\x27\xf8\x3f\x92\xa2\xbd\x27\x3f\xd8\x7a\xf3\x19\x56\x69\x6b\x03\xe2\xa6\xb4\x77\xdf\xa1\x2c\x9f\xe7\x21\xa8\x57\xad\xd0\xd6\x83\x78\x05\xa1\xa3\x69\xad\xbd\x10\xd5\x56\x78\xea\xdc\x35\x88\xe4\xbf\x38\x35\x87\xc5\xe5\xde\x3c\xa5\x1f\x18\xbb\xd3\x0b\xd5\x51\xf5\xc3\xd5\x28\x58\xc5\x40\x90\xc5\xa9\x39\x08\xf2\xae\xc2\x5f\xcd\x28\x5a\x49\x32\x37\x00\xc5\x38\x88\xcd\x7b\x51\xea\xb7\x78\xd4\x49\xd5\xca\x7e\x46\x4f\xeb\x87\xfa\xee\x5b\xc3\xe7\x00\xa7\xd4\x6f\xf1\xc4\x8d\x3a\x69\x6e\xb2\xe4\x67\x85\x73\xf3\xc3\xdb\xbc\xcf\x1f\xa6\x63\xc5\x34\x1f\xc1\x0b\x2c\xe6\xef\xcf\x87\xd8\xe3\xad\xfc\xb0\x6d\x55\x4c\x31\x7a\xc8\xe6\x9d\x21\x7b\xa5\x58\xbc\x41\xde\x3c\x44\xef\x2b\xd1\xfd\xd2\x9f\x0f\xb2\x4b\xbf\x55\x07\x78\xbd\xbc\x04\xe9\xa5\x01\x1b\x50\x3a\x05\x47\x86\xd8\x00\xd0\x83\x99\xab\xb8\x99\x2e\x16\x27\x4b\xb9\xe1\x1e\x04\xb2\x7e\xf0\xca\x2b\xaf\xac\xba\xd3\x7e\x0c\x77\x9e\x0a\x25\x52\xc6\x24\x2f\x6d\xea\xe4\x0d\x5e\xa3\x81\xdd\x56\xc1\xe2\x92\xc5\x92\xaa\x65\x04\x44\x02\x08\x07\x40\x24\x09\x7c\x15\x28\x84\x46\x6d\x85\xc0\x81\x60\x8f\x50\x97\xe6\x53\xdd\x16\xd8\xee\x02\x7f\x85\xbb\x12\x3d\x32\x33\xb6\xa2\xc5\x59\x39\xbd\x61\x65\x2d\x3d\x03\x09\x4f\xed\x53\xe1\x53\x35\x8f\xce\x2f\xb2\x9f\x0e\x2c\xff\x39\x35\xf7\x79\x7f\xa6\xc1\xc2\x61\x70\x59\xe7\x74\x15\xf4\x83\x23\xf4\x67\x07\x4b\xe1\xef\xfc\xea\x08\x7b\x21\x99\xef\x9f\xbe\x1f\x66\x25\xf0\x94\x87\x98\xca\x88\x6f\x78\xa2\xa9\xf2\xca\x13\xb0\x1e\xa1\xd7\x2c\x1e\x3d\x03\xe2\xb1\xe5\x85\xde\x32\x58\x66\x04\x5b\xa0\x40\xce\x62\x0e\x91\x8c\x62\xbd\xce\x90\x7d\x31\x5f\xf6\x93\x34\xee\x9e\x21\x23\x58\xdf\x06\xf9\xbb\x61\x7a\x8c\xee\x01\x99\xd8\xb9\x96\x1d\x42\x98\x4b\x40\x68\x6a\xeb\x5c\xdc\x40\xd6\xc4\x43\x45\x76\x31\x68\x0b\x3e\x32\xd9\xe1\xe7\x12\x83\xa5\x5f\x65\xcd\x4d\x59\x76\x7b\x60\x2a\x3d\x87\xf4\x6d\x44\xcc\x4b\x95\xeb\xd2\x84\xae\xb4\x29\x43\x01\xe8\xc3\xd7\xa1\x13\x38\x4e\xe7\x0b\x84\x7d\x8a\xcc\xcb\x5f\xb6\xdc\x25\xfd\xd5\xa3\x38\x4b\xb9\xa1\xba\xa4\x3f\xc8\x40\x57\x74\x14\x87\x67\xa8\x8f\x3c\x04\x85\x38\x02\x2b\xd1\xf6\xfc\xd8\x1d\xcb\xd2\x77\x48\x94\x76\x74\x8f\x6d\x7b\x71\xc6\x88\x0a\x19\xd4\x4b\xc6\x55\x6a\x25\xc1\x7d\x7b\x32\x87\x8c\xf8\xca\x0b\x5c\xd5\x7f\xb8\x19\xb4\x33\x66\x36\xd1\x37\xd1\xe1\x4e\xc2\x63\x67\x96\x5d\x73\x3a\x41\x46\x71\xb3\xf5\x92\x98\x11\xb1\xbf\x5a\xe3\x2a\x76\x5c\x7c\x6f\x56\x59\xa7\x72\x4b\x38\x4f\x63\x27\x6e\xce\x92\x88\x5b\xb9\xb8\x0d\x14\x0a\x08\xaa\x41\xe6\x53\xd1\xa0\xdc\x8a\x2e\x75\x31\x4c\xd0\x02\xc2\xb8\x90\x96\x0b\x8e\xce\xfc\xf5\xbd\x09\xd9\xf1\x00\xbd\xf5\x42\xf6\x22\xfb\x00\xcd\x7b\xf5\x28\x71\xaf\x87\x54\xf8\xd3\x1c\x0c\x9a\x83\x9e\xa5\xf9\xeb\xa7\xf5\x39\xda\xf4\x00\x81\x47\x7f\xe1\x09\x6a\x45\xa1\x9f\x46\x71\x72\x86\xec\x01\x4b\xd9\x06\x79\xde\x05\xf4\x7d\x25\x2d\x99\xbf\xad\xc4\xce\x94\xf2\x39\xbc\x25\xeb\xac\x76\xba\xe8\x67\x37\xea\xb8\x6b\x1e\xc6\x77\xc8\xfc\xde\x8b\x7e\xfb\x88\x3b\x63\x80\x79\x16\x89\xf3\x7e\xb2\x0d\x71\x1d\x60\x36\x92\x23\xe7\x2a\xe7\xf7\x59\x7a\x13\x5f\x1c\x2f\x59\x96\xda\x3b\x09\xc5\x39\x74\xd6\xd8\x2f\x01\x1e\x02\xac\x2c\x82\x65\x62\x80\x69\x41\x83\x32\x6b\x7d\xa2\x14\x3a\x37\xcc\x4c\x4e\x4f\x48\x44\x91\x44\x35\x35\x11\x2f\xd5\x27\xe6\x67\x26\xa7\x4f\xcc\x54\x5b\xf5\x8b\x9b\xd1\x5a\x25\x8d\x2a\x9d\x84\x57\xfc\xd4\xec\xc2\x87\x08\xdd\xbb\xc2\xbb\xe2\x6f\xe7\x37\x09\xfb\xff\xc9\x8d\xf8\x43\xb9\xc5\xc3\x45\x98\x46\x90\x30\x0d\x9e\x8b\xf3\x38\x7f\xfd\xf4\xe9\xc4\x0c\x56\xf4\x13\x77\x82\xa7\xb5\x89\x1a\x6f\x37\x27\x64\x75\xe7\xbf\xef\x6f\x20\x54\xef\x46\xe7\x65\x84\x25\x93\xb9\xac\xe8\x53\xbc\xdd\x74\x55\x89\xf3\xd5\x9f\xbe\xc9\x11\x5e\x46\xe8\x70\x3b\x8a\x02\xe7\x05\x84\x75\xb3\xd5\x15\x8f\xe4\xe2\x1a\xd3\x17\x2f\x15\xef\xae\x73\x3a\x61\x1f\x37\x6f\xa7\x0f\x10\xf6\x56\x72\x76\x2a\xa5\x82\x8b\xe8\x3c\x8d\xc1\xb8\xdd\x9e\x5b\xa2\xa3\x08\x4f\x33\xcf\x1b\xce\x3f\x0d\xc2\xfc\x2f\xa8\xe2\x48\xba\xd9\xef\x13\xfd\x04\x2e\x72\x23\xf6\xcc\xeb\xa4\x4d\x1e\xa6\x4a\xdd\x8a\x0d\xd9\x9b\x7e\xb6\x21\xb8\xa9\x55\x1f\xd0\x37\x64\x1e\x91\xc4\xd5\xbb\xde\xe4\x10\xfc\xe0\xfc\x4c\x08\x68\x35\xe0\xfe\x7b\x11\x61\xcf\xca\xf6\x16\x00\xef\xf6\xec\x2d\xaf\xde\xf2\x8b\xd3\xed\x9c\xd3\xdd\xf5\xb9\x0b\x0b\x8d\x04\xf3\xd7\x4f\x5b\xf7\xd9\x3b\x7f\xe4\xef\xb3\x5f\xd9\xbd\xcf\x76\xef\xb3\xdd\xfb\x6c\xf7\x3e\xfb\xa1\xdc\x67\x2f\xb4\xee\xb3\xef\x91\x1d\x62\xab\xed\x5e\x6a\xe7\x65\x8b\x7d\xf9\xc2\x42\x8d\xd7\x3c\xc7\xdc\x59\x7e\x14\x66\xf0\x3f\xce\x6f\x5d\xc8\x4e\x15\xbe\xc9\x9b\x28\x6d\xe0\x5a\xb8\xce\xe2\xec\x3b\x03\x01\xa8\xba\x41\x1e\xdc\xbf\xeb\x52\xb3\xeb\x06\x78\xbe\x7c\x5e\x1e\x28\x19\x8e\x15\x1f\x2b\x9d\xad\x63\xc5\xff\x25\x32\x49\xed\x71\x44\x0f\x83\xad\x5d\x7c\x24\x00\x57\x51\x83\xb1\x74\xe1\xb7\x54\xdd\x6a\xae\x45\x23\x16\x48\xed\xd0\x5c\x54\x1f\x4b\xc6\x33\x5e\xaa\xf8\xd0\x48\xbe\x2f\x81\x20\xd6\x1f\xb6\x9b\xc7\xbf\x28\x37\x8f\x7f\x24\xf4\xc8\x96\x94\xbc\x70\x6a\xc0\xf1\xe3\x7d\x44\xba\xcf\x64\x67\x3b\xd9\x8e\x27\x48\x1f\x7a\x72\x9e\x9d\x43\x3e\x5d\xd2\xc9\x4b\x3f\x5e\xa2\xd7\xec\x70\xfc\x50\x01\x7b\x4e\xc9\x4e\x7d\x6a\x07\x2f\x46\x4b\x90\xb8\xb2\x9e\xcb\x88\xda\x6f\xd8\xa0\xa9\x07\xef\x23\x19\xb4\x15\x61\x48\x2b\xf8\x97\x2f\x75\x31\x26\x63\xcd\x0f\xeb\x60\x83\x03\x33\x4c\xd5\x9d\x93\xf0\x6b\x3d\xe1\x1c\xf3\x4a\x2f\x7b\x9e\xe7\xf3\x41\x72\xeb\xd6\x2e\x5d\x47\x9c\xab\x8a\x5c\xba\x0a\xa7\x36\xef\xd8\xf5\xcf\xc3\xf4\xd0\xa0\xcb\x92\x65\x2f\xfe\xd8\x30\x5b\xda\xbc\x48\xce\xed\xcb\x08\x18\xef\x73\x64\x3d\xb0\xfb\xf3\x18\x42\xc7\x80\x80\x16\xe4\x36\xfe\xcf\x43\xf4\xd5\xc5\xb9\x86\x7f\x79\xe7\xc1\x06\xd3\x10\x95\x7b\xb6\xf9\x86\x9f\x9a\x85\x9e\x9e\x64\x93\xdb\x0f\x3d\x05\x84\x88\xe2\x84\xc0\x47\x75\x3c\xc7\x35\x6c\x62\xb1\xb9\xe3\xc4\xc2\xc7\xf5\xd1\xbc\x9e\x5d\xbe\x50\x9c\x47\xb8\xac\x1c\x1d\x0a\xf3\x08\x9b\xb5\x5d\x2b\x73\xfd\x5e\xc1\xc6\x17\xa5\x44\xdc\x67\x69\x8b\xc3\x67\xbf\x30\x5a\xac\x07\x2f\xda\x56\xe0\x92\xfc\xa6\x51\x36\xd3\xf7\x2d\xde\xef\xb6\xb4\x54\xdc\x1d\xd3\x5b\xf9\x9b\xbb\x11\x16\xdb\x65\xad\x1e\xd0\x79\x3d\x3f\x41\xd8\xb3\x8e\x6b\x6c\xee\xe2\xa9\xde\xb9\x65\xda\xa8\x65\xc2\xa8\x3d\x7b\x6c\x0a\xaa\x47\xe8\x55\xf4\x8a\x9d\xdd\x35\xbb\xbc\xe2\x43\xc8\x3f\xda\xdb\xfa\x32\xbd\xd6\xb9\x66\xe0\xcb\xb4\xc8\x53\xfa\xad\xfb\x07\x27\x6b\xe0\x33\xfd\x1d\xca\x6e\xec\xfb\x56\x67\x7d\xcf\x73\x7e\x9b\xc8\x8b\x6f\xa6\xf4\xae\x12\x7d\x58\xcb\x0f\x05\x97\xa2\x9d\xa8\xbe\xa5\x9d\x51\xbe\xa4\x7d\x7c\xc2\x1e\xa7\x94\x86\x86\x04\xf6\xdc\x90\xaf\x05\x99\x69\xd3\x70\xd9\x5e\x52\xd0\x12\x6b\x7e\xda\x14\x97\x97\xc4\xd6\xb7\x70\x43\xdd\x5a\xec\x25\x4d\x88\x21\x16\x95\xfa\x69\xaf\xb7\x90\x0e\x92\xb4\x15\x2f\x07\xdd\x31\x13\x64\xa0\xe8\x03\x21\x0f\x24\x11\xc4\x6c\x4a\x6f\x40\xe8\xd0\xb8\xe5\x0f\xf1\x1b\x25\xba\x4f\xce\x52\xe2\xdc\xa3\xbd\x48\xbe\x4f\xe4\x74\x6b\xc6\x32\x9b\x06\xc5\x4c\xab\xcf\xb2\xe0\x41\x0f\x99\x12\xe9\x92\xe8\x27\x82\x12\x74\xfc\xa4\xa9\x9d\x4a\x54\x92\x14\x04\xb2\x12\xd4\xda\x52\xb4\xe6\x3d\x9f\xce\x1b\x5d\xbc\x78\xad\xe9\xa5\x15\x3f\xa9\x78\x95\x3e\x74\xd3\x98\xa2\x0f\x0e\xd1\x7d\xca\xf1\xd4\x79\xe7\x10\xfb\xd5\x21\x1b\x60\x1a\xf4\xe4\xee\x6d\x1d\x1e\x77\x31\x6c\x3d\x8b\x8c\x92\x7b\x01\x41\xa3\x51\xbb\x26\x67\xb5\x86\xca\xef\xd9\x86\x6b\x56\x26\x45\x3d\x5c\x2d\x4b\xce\xc3\x4b\x0f\xc4\x45\x95\xd2\x55\x06\x46\xcf\x59\x31\x56\x20\x52\xba\x2b\xbc\x8b\x68\x8b\x12\x13\x11\x3a\x63\xe0\x57\x6b\x84\x7e\xbd\xdd\x70\xe0\x99\xf7\x4e\xf1\xc9\x29\xbb\x7e\x23\x83\xf2\xcc\x7a\x27\x7b\x16\x85\xb9\xde\x6c\x73\x05\xc5\xec\xad\xfa\x7c\x6d\x42\xe6\x22\xa9\x88\xb3\x53\x91\xae\xc7\x13\xd8\xc8\xc4\xc5\xf0\x6f\x45\xad\x48\xb2\x19\x08\xf6\xef\x96\x8c\xe0\xb7\xdf\x2e\xed\x20\xf8\xed\x5f\xb2\xe0\x37\x79\x10\xe4\x15\x06\x53\x6a\x33\xf0\x1a\x27\x23\x1f\x10\xe7\x37\x5c\x3f\x4c\x3a\x8d\x86\x5f\x83\xeb\x4b\x9d\x1c\x29\xce\xa7\xe0\x38\x25\x8f\x51\x4f\x3a\x3f\xd8\x52\x9e\xab\xba\x31\xcf\x1b\xe7\xf5\x64\xb4\xa3\x7a\x45\x4d\x19\x7d\xcb\x28\xad\x6e\x4f\x20\x75\xfe\x71\x1f\xbb\x79\x93\xf7\x3d\x4a\x3e\x85\x57\x65\x40\x6b\xf5\xa1\xda\xe0\x98\x84\x13\xb7\x41\xee\xfe\x7f\xec\xfd\x79\x7c\x25\x47\x75\x37\x8c\x7f\xea\x5e\xcd\xa2\xb2\x31\xa6\x59\x1e\xf2\xfc\x92\x27\x9d\xf6\x8f\x47\x33\x46\xba\x9a\xf1\x8c\xb7\xf1\x86\x46\xd2\xd8\xc2\x33\x1a\x21\x69\xec\x18\xde\xe0\x69\xdd\xae\x2b\x35\xea\xdb\x7d\xdd\xdd\x57\x9a\x0b\x09\x01\x6c\xc0\xc1\xac\x76\x48\x60\xc2\x62\xb6\x10\xcc\x4e\x80\xb0\xf3\xb0\x05\x10\x10\xc0\x24\x18\x43\x48\x08\x09\xd9\x1e\xb2\x40\x08\xe4\x75\x42\x78\x3f\x75\x4e\x55\x75\x55\xdf\xbe\x9b\x66\x06\x26\xb1\xfe\x99\xd1\xed\xa5\xba\x96\x53\xe7\x9c\x3a\xe7\x7b\xce\xd9\x49\x5f\x4c\xe8\xc3\x14\xb3\x93\x1b\xcb\x7a\x9a\x64\x61\xb5\x45\x83\x6b\x65\x6c\x51\xcd\xfe\x2e\x64\xd0\x10\x8a\x2e\x03\xeb\x73\x12\x61\x77\x56\x04\xa7\x43\xaf\x0c\x56\xf1\x42\x33\x21\xd7\x4f\x88\x73\xd3\xbc\x39\x5e\xa1\xb8\x66\xbd\xc1\x23\xba\xa8\x83\xd2\x65\xf8\x23\x89\x31\x57\xcc\xc8\x24\x37\x49\x27\xe8\x35\x9b\xd3\xed\xce\x6c\x0e\xae\xdf\x26\xf4\x11\x90\x0d\x11\xf8\x12\xf3\xd4\x32\xfd\xba\x5c\xa6\xa7\x98\xcb\x94\xf1\x4e\x88\x79\x12\x8c\xc5\xc0\xe4\x07\xca\x6a\xa6\x36\x9d\xdc\xa2\xdd\xed\x1b\xc6\x52\xdd\x41\xa8\x25\xcd\x23\xd7\x62\xc1\x34\x7e\xb6\x69\xca\x14\x90\xc7\x8f\xb6\xdd\xb4\x63\x56\x0b\x20\x0a\x22\xcd\xaa\xac\x69\x56\xa6\x0e\xb6\x97\x7e\x7a\x53\xa5\x0f\x01\x62\x54\xf3\x33\x2f\xe7\xe7\x2a\x73\x7e\x90\x64\x15\x09\x0f\x44\x9d\xf7\x11\x4d\xd6\xeb\x78\xf1\xbc\xac\xcf\x0f\x04\xc7\xa1\x77\x42\x4a\xfe\xb3\x44\x44\x7f\xb8\xdc\xc1\x01\x81\x67\x0f\xa8\x6e\xae\xea\x44\xbc\xb8\xec\x3c\xb1\xf0\x8e\xce\x9b\xb4\x9a\x9e\x2a\x53\xd2\xae\x6a\xa3\x39\x6a\xd7\x59\x3d\x8a\x5b\xbb\x25\x00\xd5\x8f\x65\xee\x37\xcc\x18\x08\x5c\x0a\xdf\xd8\x20\x6f\x28\xd1\x9b\xa0\x1a\x3d\xb6\x05\xc9\xaf\xae\x73\xae\x50\x29\xb9\xc0\x63\x73\x40\xa6\xcb\xf0\x74\x1c\xdf\x68\x56\xdc\x09\x0a\xb1\x84\x6b\xf6\x9a\x1b\x1b\x47\x8d\x17\x13\xba\xc3\xf3\xd7\xfc\x24\x8a\xad\xdb\x06\x39\x69\x54\x54\xf0\xd8\x13\x9a\x6e\x98\xfa\x69\xcb\x99\x36\x8b\x5e\x19\x43\x92\xf4\xcd\x4e\x34\xa2\x04\x08\x5a\xcc\xc8\xa8\xd4\x02\xb0\x16\xe0\x5e\x87\x5e\x4c\xd5\xe8\xad\xdd\xce\xcf\x8b\x92\x35\xde\x01\xed\x18\x18\x89\x28\x1e\x7d\x24\x3f\xa0\xd4\xee\xb2\x7e\x4f\x68\x46\xa9\x6b\x7d\x91\x3a\x87\x8c\x2b\x76\x02\x75\x9e\x96\x97\x63\xb6\xcc\x77\xff\x2d\x70\x31\x66\xbc\x51\x44\xf1\xda\x2c\x04\xcf\x26\x54\x35\xcf\x72\xcd\x6e\x90\x37\x0f\x6f\x19\x35\xb6\xfc\x45\x5b\x69\x23\x3a\x7a\x68\xde\x29\x3d\x34\xbf\x47\xe8\x45\x7d\x68\x16\xda\xb6\x04\xbd\x39\x6e\x73\xcc\xc8\x63\x23\xec\xd2\x33\x91\x0c\x82\x7e\x95\x28\xe3\xed\xe7\x08\xdd\x3f\x60\xaf\xd1\x9f\x72\x27\x11\x7a\xaa\xde\x75\x91\xd1\x55\x31\x13\x64\x34\x50\x78\x2c\xcd\xd4\xb2\x66\xe2\x2e\x9f\xa1\x2c\x17\xc7\x7a\xdb\x64\x2e\xb2\xf6\x14\xdb\x64\xb4\x31\xe6\xed\x30\xaf\x1e\xa6\xff\xff\x5e\xf3\x02\x66\xe5\x1f\xee\x74\xf6\xb5\x5d\x35\x73\x5d\x98\x9c\x19\xac\x9f\x9a\x11\xf9\xfe\x2d\x23\xf2\xa0\xfc\xf6\x83\xca\x88\xfc\x4e\xe2\x34\x66\xf8\x5f\xdd\x66\x5c\x9c\x92\x07\x56\xc9\xb0\xc4\x89\x96\x2a\x8b\xb7\x66\x16\x31\xbb\x88\xee\xe9\x23\xac\xd1\xa4\xb4\x2d\x69\xf1\xe0\xb1\x18\xdf\xd4\x9b\x3b\x5d\x62\xed\xef\xc9\x9d\x8a\x2c\xc5\xf7\x6f\xef\xcd\xa1\xc0\x42\xfc\x8e\xed\xce\xb5\x6d\x57\x0b\xe5\xcf\x0a\x4e\x4e\x5d\x04\xc8\x09\xa6\x0e\x4a\x36\xbc\x58\xd9\x20\x7f\xb9\x8d\xfe\x39\xa1\x43\xfc\x49\xeb\xab\xc4\x79\x0e\x81\x77\xa4\x99\x99\xa5\xba\x15\x54\x6f\x4e\x55\x4c\xc4\x8a\x3b\x4a\xcb\x3e\x4d\x7b\xf2\x1e\x72\x0d\xbd\xea\x94\xd4\x7c\xdd\x36\xf6\xa7\x25\xfa\x90\xa4\x1a\x35\xb2\x02\x7a\x1b\xa5\x3e\xb6\xf9\x82\xfe\x8a\xf3\xdb\x25\xa3\x09\x2d\x31\x80\xe9\x66\xac\xf9\x01\xd4\xef\x86\x18\x3e\x78\xa5\xdd\x28\x09\x33\x27\xad\x6b\xb1\x5b\x5d\x45\x73\xa4\x2b\xc4\xed\x52\x33\xe5\x27\x90\x98\x41\x59\x59\xac\x3d\x69\x74\xe6\x28\x40\x81\x55\xa2\xc7\x25\x99\xbc\x17\x82\xa9\x54\xd6\x54\xc9\xc1\x0f\x45\x31\xe6\xab\x55\xc7\x12\xe8\xc5\x28\x56\xe1\x10\x5d\x9c\x98\x9d\xb2\xcd\x01\xee\xd2\xeb\x4b\x43\x4e\xce\x06\xab\xee\x1e\x55\x15\x1c\x30\x65\x82\x57\xa1\xaf\xe6\xca\x08\xb4\x62\xfd\x26\x71\x4e\xe4\x51\xaa\x72\x42\x06\x9b\x84\x4e\xd5\x30\x70\x86\x0a\xf2\x41\x54\xba\x40\x55\x7f\x52\x2e\x8c\x4f\x2c\xd0\x8a\xac\x3f\x2e\xe7\x8e\x5e\x05\x4a\x92\xd2\x8e\xf4\x1d\x01\xa9\x01\xa4\x21\xa4\x99\xb0\xca\x06\xb9\xbd\x4c\xbf\x25\x37\xd7\x7d\xc4\x79\x2e\xb9\xae\x7d\x73\x15\xb6\xf5\x5f\x6a\x77\xbd\x16\x61\x9a\x9e\xf5\x72\xe2\x3c\xfe\x18\x14\xd7\x30\x0d\x9e\x6a\x56\xd2\x28\x75\x03\x54\x1e\x33\xfb\x95\xa0\x4a\x59\x22\x4c\xd5\xb4\x3e\xbd\x9d\x7c\xf6\xf6\xc2\x2c\x35\xf3\x05\x05\x67\xad\xfb\xb7\x39\x13\x45\x37\x72\x36\xf0\x6a\x54\x6f\x34\x53\xd6\xa1\x7e\xe7\x06\xb9\x73\x1b\xfd\x31\xa1\xdb\x71\x49\xad\xef\x13\xe7\xb5\x44\x94\x80\x35\xdb\xa9\xbb\x27\xc0\xfb\xe6\x62\x90\x43\x54\x6b\x6b\x19\x93\xa5\xae\x6f\xae\xba\xb3\x56\x54\x13\x71\x70\x63\xa2\xf9\x31\xd5\xbc\x56\x00\xe9\xf4\xce\xfa\x8b\xca\x74\xa7\x54\x43\xac\x67\x95\x9d\x77\x95\xe6\xa5\x52\x92\x9b\x03\xe1\x81\xec\x36\x07\xd2\x74\x04\x9c\x41\xb5\xc3\xf5\xa6\xba\x9f\xca\x92\x86\x5a\xb2\x10\x70\x2e\xe9\x56\x1b\x31\xfb\x7e\x4d\xa5\xf8\x96\x4e\xba\xa0\xa5\xb3\x19\x80\xf0\xac\xfb\x89\xcc\xa9\x6b\x96\xf0\xce\x15\x35\xff\x2f\xb6\x22\xef\x2c\xd3\x5f\x2a\x12\x75\x18\x0a\x83\xa5\x80\x12\xeb\x8e\xb2\x73\xa5\x79\x09\xcb\x72\x66\x26\x69\xf4\xa6\x69\x75\x8c\x8d\x84\x1b\x1b\xe4\xb3\x25\xfa\x04\xba\x0d\xf2\x91\x5b\xd7\x39\x57\x1c\x86\xc4\xe4\x7e\xa2\x62\x6e\x30\x53\x39\xfa\x13\x31\x10\x1e\x9a\x4a\xda\x9a\x32\x40\x42\x73\x74\x28\x8e\x02\x30\x2c\xce\x47\x81\x08\xc7\x55\x61\x3c\xfc\xca\x26\x5a\x04\xd8\xd2\x75\xce\x15\x8b\x22\xfa\x26\x6b\x11\xe2\x71\x36\xd1\x22\x80\xd6\xaf\x73\xae\x80\x48\x64\xa3\x45\xc0\xae\x0f\xda\xe2\xb7\x28\xdd\x53\xa8\x9e\xb8\x01\x9b\x39\xda\x21\x4c\xf8\xcd\xd4\x99\xea\xfa\x84\x19\xfb\xdd\x50\xcf\xd8\xe2\x2d\x61\x9d\x3d\x49\x76\x2c\xbb\x29\x5b\x77\x5b\x27\xc9\x76\xc4\x3b\x9e\x24\x59\x80\xc2\x06\xf9\xf8\x30\xbd\x3b\xcb\xc3\xf5\x52\x2e\xe6\xf2\xd1\x51\x59\x04\xd4\x19\x48\xb9\x95\x45\x3b\x69\xd1\x00\x70\x47\x9f\xc3\x29\x2a\x87\x61\x5d\xee\x8c\x2e\xca\xf6\x73\x95\x3f\xe4\xd0\x27\xe6\x66\xec\x6b\xf1\x71\x63\x25\x6a\xf4\xfc\x46\x1c\xa5\xa8\xdb\x4c\x61\xbd\xb0\x79\x67\x7a\x31\x5f\xb0\x4e\x34\x33\xa7\x9e\xb5\xf1\x61\x1d\xa3\x87\x75\xe6\x3c\x5b\xc4\x50\x9d\x25\x89\xc0\x3e\x47\xf4\xe8\x93\x0f\x6f\x26\x9a\xf2\x76\x2d\xf0\x44\x0b\x8f\x17\x24\xae\x05\x9b\xc8\x69\x82\x4d\x01\xea\x13\xa4\xb4\x48\x18\xa0\x15\xd7\x98\x5e\x9a\x28\xab\xf6\xe5\x63\xb6\x15\x19\x9d\x32\x6a\x1f\x8e\x96\xfd\x50\x52\x0a\x28\xc1\x7c\xfc\xae\x1f\x54\xe8\x71\x4a\x93\x24\x98\xc6\x12\xcc\xd6\xbc\x33\x75\x28\x70\x97\xf1\x28\xc4\x2f\x8d\x8b\xca\x71\xf6\xc2\xc2\x61\x3d\x61\xba\xd4\xa4\x05\x09\x28\xdb\x3f\x4e\xbe\x31\x5f\x77\x12\x7a\x8e\x58\x41\xc8\x4e\xf2\x2c\xe2\x34\x67\x54\xd5\x32\x99\xa1\x0a\x31\xaf\xf0\x94\x90\x52\x32\xe3\x89\x42\xd0\x2c\xae\xf8\xd5\xd5\x39\x3e\x28\x61\x0f\x8a\x62\x7e\x2d\xd4\x2e\x19\x14\x9e\xbf\xa7\x93\xcf\x93\x54\x9f\xe6\xa2\x28\xb0\x0e\x3b\xd7\x2c\x6a\x54\xb9\x20\x3a\xc2\xef\x15\xe6\x15\xcb\x48\x5c\xd4\x99\x33\x1a\x3f\x4a\x05\x1b\xb0\xa6\x9d\xcb\xf2\x94\x2f\x07\x29\x76\x36\xa0\x3f\x14\xa5\xfb\xa1\xec\x83\xd1\xe0\x33\x09\xa5\x38\x1d\xe0\x34\x4a\x84\x3b\xdb\x95\x81\x9d\x32\x87\x43\x2e\xb7\x82\x50\x18\xe5\xa8\x24\x2f\x11\x92\xbd\x7d\x5c\x7e\x62\xa6\x99\x31\xfa\x70\x2f\x2d\x3c\x20\x88\xc6\x0d\xc6\xfa\x46\xea\x1c\x28\xb8\x7e\xba\xd8\xe9\x67\x86\xe9\x6b\x32\x76\xfa\x5b\xc4\xb9\xfd\x6c\x61\xa7\x95\x2d\x7e\x3a\x38\x3f\xfd\x92\xc1\x4f\x3f\xbe\xe9\x68\xbe\x2d\xa6\xba\xc5\x54\xff\xab\x31\xd5\x3f\x2c\x15\xba\xba\x0d\x4b\x96\xf5\x9a\x92\x13\x4e\xa0\xe5\x29\xcb\x79\x99\x43\x4e\x4d\xcc\x4e\xa9\xb9\x90\x58\xb8\xec\x19\x2d\x1c\x87\xb7\xe2\xa9\x53\x94\xde\x9e\x71\x32\x7f\x2b\xa1\xf7\x10\x7a\x3e\x18\x91\xa6\xd1\xce\x06\xc7\x9e\x97\x12\xe7\x71\x13\xca\xe9\xd0\xd6\x27\xcd\x12\xb0\xd4\x12\xb7\x73\x66\x0c\xd3\x0a\x75\x88\x4e\xd1\x83\xfd\x99\x19\x3d\x69\x70\x90\x13\xa3\x19\x1e\xe8\xa7\xb7\xd1\xfd\x9b\x79\xd1\x7a\xe1\x36\xe7\xc5\x64\xa2\xaf\x79\x11\x3e\x0b\x95\x75\x14\xca\x6b\xe2\x71\x44\x94\x18\x4d\x46\xf9\x03\x30\x6a\x4e\x47\xa2\x98\x8e\x64\x12\xf2\x9d\x98\x81\xaf\x29\x5b\x0f\x24\xba\x0c\xa1\x59\xe1\xf2\x8e\xdf\xe0\x84\x79\x92\xec\x94\xaf\x6f\x90\x6f\x95\xe9\xad\x84\xaa\x0b\xd6\xba\xf3\x14\x23\x2f\x04\xbc\x35\x92\xe0\x27\xf8\x6c\xae\xf8\x0d\xac\x78\x24\x6c\x69\xd2\xe0\x79\x83\x1b\xf8\x9e\xea\x17\x9e\x5d\x67\xc2\x51\x7b\x36\x4a\xf9\x7f\xd3\x27\xfc\x24\x4d\x46\xed\xa9\x88\x25\xb3\x51\x0a\x3f\x0d\xc2\x3d\x42\xb3\x1e\x5a\x8f\x73\xf6\xb5\x6d\x48\x18\x97\x8a\x3a\x54\x93\x96\x9d\xe6\x8c\xe6\x6e\x2f\xd1\xed\xd8\x35\xeb\xc7\xc4\xf9\x16\x99\x08\xb1\x36\x16\xd6\x4d\xca\x9c\x44\x89\xe0\xc7\x2c\x9b\x52\x3f\xb1\x67\x42\xce\xb5\x44\xd7\x53\x59\x1f\x57\x94\xd7\x32\xca\xe9\x8a\xf2\xe1\x05\x6d\xe0\x88\x79\x3b\xfa\x98\xbb\x34\x27\x9a\x02\x98\x26\xde\x11\xc0\x2b\xb7\xca\x3c\xdb\x6b\x62\xb2\x2f\x5b\xc0\xe0\xfc\xaa\x0d\x20\x38\x1b\xc0\x71\xdd\x0c\xb1\x7f\xfb\x10\xfa\x73\x1d\x8f\x10\xd6\xc6\x43\x9c\x67\x09\x39\x27\x8a\xac\x0b\xc1\x06\x81\x7a\xc0\xb7\x64\x48\x18\x57\x72\xb0\x30\x13\x1a\x15\x97\x5a\x29\x53\x6a\x87\x18\x92\x60\x66\x53\xfc\x65\x51\xa0\x4d\x0c\x2f\x80\x6c\x60\x2b\x6e\x68\x1f\x71\x4f\xe0\x07\x17\xfc\xa7\x32\x6c\xa5\xb2\x41\xfe\x79\x2b\xc6\x7a\xe0\x40\xa0\x12\x1d\x02\xb7\xde\xa7\x4a\xce\x6b\x4a\x30\xe7\x8a\x7d\x68\x2a\x0a\x7a\xe8\xa0\xbc\xe8\x2a\x13\xf4\x06\x88\x7e\xe4\xb9\x6e\xd0\x58\x71\xc3\x66\x9d\xc5\x7e\xd5\xae\xae\xb8\xb1\x5b\x4d\x59\x9c\x8c\xda\x23\x63\x23\xa3\xf6\xc8\xcd\x23\x9c\x86\x47\x2a\x23\xb8\xf4\x09\x8b\x7d\x37\x80\x91\x42\x3a\x54\x25\x23\x32\xa2\x01\xae\xb6\xe4\x26\xec\x92\xfd\x36\x0b\xab\x91\x07\x1a\x62\x0c\x71\x08\x6d\x3e\x59\x37\x5e\xf2\xd3\xd8\x8d\x5b\xf6\x2e\xe1\x44\x69\xc1\xc6\xc2\x17\x76\x63\x8b\xe8\xcf\xe5\x9a\x21\x57\x1d\xd0\x88\x09\x82\x53\xce\x6c\x1a\x45\x41\x52\xf1\x59\x5a\xab\x44\xf1\xf2\xf8\x4a\x5a\x0f\xc6\xe3\x5a\x75\xff\x25\xfb\x2f\xbb\x20\x41\x15\x60\x6c\xff\x3d\xe4\xe1\xf4\x61\xd6\x10\x27\xb8\x0e\x80\xee\x2d\xb7\xf2\x83\x09\x84\xf4\xf6\x12\xa5\x38\x1a\xbe\x75\xac\xbb\x4b\xce\xb3\x4a\xd9\x6f\xb4\xff\xcb\xa4\x8b\x2d\x4c\xd0\x1d\x8e\x2d\xf9\xa1\x0b\x39\x19\x35\x7a\x0f\x25\x81\x40\x0e\x65\x7b\x06\x04\xbb\x4a\xe5\x01\xb9\x1a\xe1\x98\x83\x69\x24\xb1\x3b\x3e\xa0\xef\xeb\x2c\x5d\x89\xbc\x0a\x94\xd3\xcb\x47\x55\x70\x09\x0a\x2c\x9e\x53\xba\xe0\x47\x5e\xc6\x57\xb9\x6e\xcf\x1b\x1d\x05\x08\x3f\xff\x13\xe4\x43\xd8\xb2\xd9\x09\x8c\x8d\xc9\x24\x1c\x26\x0d\x61\x6b\x4c\xa1\x49\xa1\xda\x03\xd7\x43\xa1\xdb\x92\x06\x27\xe6\x66\x2a\xdd\x02\x1e\x8e\x08\xcb\xed\xb4\x73\x19\x38\x9d\xe0\x2c\x57\xf5\x03\x1f\x62\x8b\x1b\x71\xb4\x1c\xbb\x75\x7e\xce\xa9\xda\x2b\x6e\xe8\x41\xaa\x77\x8c\x6c\x52\x7c\x48\x6b\xf9\x01\x32\xdb\xdb\xb5\xff\x58\x6b\x77\x91\x6b\x1f\x05\x48\xde\x9f\xff\xee\x72\x61\xfa\x2b\x7c\x78\x3a\x5c\x93\xf9\x50\xcb\xce\xfb\x49\xee\xa2\xd0\x28\xc0\x70\x8c\xdd\x4d\x23\xbb\x21\x82\xcf\xc5\x06\x5d\xf3\xe3\x28\x04\xc5\x6d\xcd\x8d\x7d\x7e\xe0\xc2\x84\xb5\x15\x4a\x65\xb9\x42\x50\x9b\x04\x4f\x4c\xdd\x78\x99\xa5\xa2\xb9\x91\x44\x17\x8a\x70\xb4\x53\xdc\x01\x9e\x5e\x65\xad\x31\x64\x30\x0d\xd7\x8f\x21\x19\x67\xe1\x17\x2b\x1b\xe4\x0b\x84\xde\x46\xe8\x10\x57\x8f\xac\x5f\x75\xa2\x59\x4d\x4d\x12\xe7\xd4\xc1\xcb\x05\x77\x0f\x8e\x01\x17\xe1\xf8\x05\xf0\x9f\x69\x92\xd8\x29\x71\xc4\xd6\x65\xce\x85\x88\xf2\x6d\x19\xc7\x45\x31\x9b\x52\x0d\x10\x9e\x1c\xf3\xec\x59\x2e\x84\x61\xe0\x9b\xd7\xb3\x96\x3a\xb8\xfc\x5d\xc9\x19\x6d\xbb\xaa\xad\x1c\x17\x6f\xa0\xb2\xe0\x43\x95\x93\xa4\xbc\xca\x5a\x1b\xe4\x9d\x25\x7a\x03\xe5\x7f\x5a\x47\x9d\x83\x8b\x38\xd9\x39\xc9\xa5\x80\xc3\xb0\x1b\x2a\xb6\x99\xb9\xd8\xf7\xe4\x73\xab\xcc\x34\xa7\x9c\x25\x0b\x31\xa7\x2d\xc4\x94\x73\x49\x97\x85\x80\x40\xc0\x91\x24\x53\x05\x3a\x2c\xca\x77\x77\xd2\x5f\xe8\xb8\x28\x00\xdb\xdb\xd8\xe9\xfc\x62\xf6\xd3\x44\x8f\xa9\x05\x90\x10\xbd\xcf\x6c\x41\xf4\x06\x55\xef\xee\x51\x10\xbd\xbb\x89\x53\x2b\x80\xe8\x09\x92\xdc\x2c\x36\xcf\x74\x8b\x62\x63\xfa\x39\xe2\xb1\x74\x37\x1d\xe9\xd3\x15\xb1\xa5\x3a\x3d\x88\x10\x79\xf3\xbd\xc5\xf6\xb8\x35\xd6\x59\x6c\x17\x41\xf1\x3e\xb8\x93\x5e\xd0\x91\xba\xb2\xb4\xe7\xd6\x5d\x3b\x9d\x17\x94\x26\x3c\xb7\x81\xe6\x09\xdc\x01\xa0\x1f\xb5\x27\xb7\xdf\xa4\x5c\x5e\x62\x76\x66\xe6\xf2\xc3\xa2\xac\xf9\x6e\x22\x72\xdd\x23\x50\x4c\xc8\xef\xa2\xe3\xaf\x9b\x15\x44\x42\xa0\x4d\xc5\x9e\x8d\x52\x65\xc9\x40\x3b\x30\x56\xfa\xa9\xba\x81\x34\xad\xc0\xa8\x0c\x2b\x9f\x0a\xf4\x46\xb0\x21\x9a\x4f\xeb\x91\xc7\x2a\x1b\xe4\x27\xdb\xe8\xeb\x87\x24\xaf\x38\x39\xe4\xfc\x69\x79\xc6\xc8\x31\x39\x8a\xc0\x26\x53\xc3\x28\xe8\xab\x29\xba\xaa\xcc\x93\x32\x23\x9b\x16\x39\x0f\x4a\x23\xcd\x26\x04\x1d\x22\xf6\xfa\x4a\x94\x08\xd3\x8d\xc0\x24\x71\x49\xc3\x59\xaa\x58\x07\x79\x59\x60\x39\x66\x6a\x79\xb8\x19\x27\x64\xe6\xe1\x84\x76\xf9\x72\x86\x93\x6b\xb8\xe9\x8a\x28\x5b\xdd\x0c\xdb\xde\x16\x3b\x5e\x2c\x29\x7c\x10\x35\x05\x5f\xcf\xa8\x8e\x11\xf7\xca\x26\x8f\x7a\x99\x34\xcd\xc2\x2c\x8c\xea\xe3\x4d\x58\xda\x6c\x60\xfb\x58\xfe\xb9\x19\x82\x81\x03\x63\xab\xeb\x6e\xbc\xca\x3c\x15\x62\x55\xb1\xe7\x78\x0f\x95\xb8\x45\x63\xda\x1a\x53\x82\x86\x7f\x53\xd6\x6c\xe7\x1f\x19\xa9\x54\x46\x30\x4d\x66\x14\x63\x11\x15\x34\xfe\xf2\xeb\x86\xa9\xa7\x42\x47\xe9\x85\x3d\x59\xf4\xf5\xac\xb5\x18\xf1\x2e\x9c\x2d\xda\xca\x51\x4d\x5b\x99\x74\x2e\xee\xa5\xad\xf4\x56\x56\xfe\xa4\xd4\x45\xf1\x57\x1e\x1d\xeb\x6d\x25\x27\xc8\x5d\x33\x7d\x88\xe2\xab\xea\x2e\x9c\x9d\x56\x40\x15\x8f\x9a\xcb\x2b\xba\x23\x07\xab\x1d\xa5\xb1\xcf\xd6\x58\xc6\x87\xe0\x00\xa6\x45\x82\x7d\x88\xd0\x1b\xc4\x94\xcf\x3a\x13\xb3\x62\x57\x60\x89\x2f\x59\xec\xc2\xcd\x5e\xc0\x46\x65\xd7\x14\x27\x50\xf0\x22\x7d\x12\x97\xe8\xb0\x7a\xcf\x3a\xe6\x5c\x37\xab\x1a\x31\x13\x96\xb9\x55\xf5\xa5\xac\xd2\x89\x68\x18\xb6\xa9\x9c\x58\xec\x95\x59\xcd\xfb\x1c\xfa\x98\x8e\xf3\x6a\xb8\x68\xef\xa7\xce\x3f\x10\xc5\x97\x17\x0c\xbe\x7c\x9a\xb9\xf1\xe9\xe0\xc1\x0b\x3a\x8b\xdd\x5c\xde\xe2\x0d\xf2\x9d\x9d\xf4\xde\x5c\xa5\x94\x8f\xab\x1c\x17\x6f\x29\x1d\x15\x24\x7e\x40\xab\x18\x72\xda\x6a\xa6\xe8\xc9\x3a\x2e\xd9\xbf\xff\xbf\x55\x15\x95\x2d\x61\xb6\x25\xcc\xfa\x10\x66\x4f\xd0\xa4\xc8\xb4\x73\x69\x7f\x67\xde\xa4\xab\x1c\xb9\x8b\x50\x8a\xac\x11\xfc\x50\xb7\x11\x67\x5d\x17\x93\x19\x9b\x4f\x31\x37\xc0\x48\x62\xf2\xee\x66\x87\x43\xc4\x20\x09\xbd\xe5\x41\x2c\xe3\xc2\x5f\x79\x64\x27\xe9\xd6\x8c\xfd\xb4\x35\xc9\x49\xf1\x44\x6a\xbd\xe5\x91\xce\x9f\x92\xdc\xc5\xcc\xa7\x03\x57\x73\x59\x6f\x8d\x74\x22\x1a\xb0\x54\x43\xf4\x56\xec\x85\xa8\xce\x70\x4f\xa1\x4d\x52\xa3\x27\x08\x66\xc8\x7f\x91\xd3\xc1\x1c\xd4\x56\xd3\x2f\x57\x6c\xfb\xc6\x15\x26\x5e\xc1\x72\x34\xa6\x33\xcc\x0f\xdb\x5a\x4a\xdd\x55\xa6\xe5\x2a\xa9\x6c\x90\xcf\x3e\x9c\x8b\xfa\x47\x83\x69\x76\x2e\xf6\xd7\xfc\x80\x2d\xb3\xe9\xa4\xea\xa2\x77\xd2\x7a\x5f\xc9\x79\x53\x69\xa2\xc3\x5d\x99\xb9\x20\x83\x33\x80\x66\x0f\x65\x6a\x38\x6b\x5a\xe6\x14\x5b\x8f\x60\x88\xe2\x65\xe1\xb1\xe2\x5c\xaa\xe1\x02\xb0\x5e\xbc\x20\x38\x26\xa7\x1b\xdb\x03\xce\x8b\x96\x5d\x6c\xdf\x47\x72\x09\xa3\x9b\x43\xb6\x7e\x33\x6f\x2d\xb1\x6b\x81\xbb\xac\xe6\x1a\x9c\xa7\xa1\x89\x3f\xcd\x9a\xee\x38\x00\xce\x6c\xe2\x26\xb3\xdd\x60\xdd\x6d\x25\x68\xc4\x35\xdb\xf0\x93\x03\xf6\xde\xdd\x76\xdc\x84\xbc\x4c\xaa\x0d\xcf\xbe\x68\x37\xe8\x31\x93\x13\x73\x37\x2f\xdc\xb4\x70\xf3\xc4\xd4\x91\x99\x59\x83\xf4\xff\x90\xd0\x73\xab\x6e\xc3\x5d\xf2\x03\x3f\xf5\x59\x62\xbd\x87\xd0\xb1\x9e\xbb\x71\x52\x7b\xc3\xb9\x95\x80\x80\xd7\x2e\x01\x31\x79\xde\xb8\x17\x47\x0d\x61\x73\x6e\x86\x21\x17\xd7\xaa\xcb\xb9\x94\xdf\xfa\xf1\x46\xb8\x98\x8d\x06\x97\x63\x57\x87\x1f\x68\x89\x14\x9a\x21\x64\x0c\xa5\x6f\x80\x8a\xa0\x72\xe0\xd6\x6f\x11\xe7\xb9\x64\xbe\x19\xea\x93\x14\x66\x2b\xec\xe1\x21\xca\x9e\xc3\xc9\x47\x42\xd4\xee\x66\xfd\xc4\x6c\xb9\x09\x98\x2f\xdc\x20\x68\xd9\xec\x96\xa6\xbf\xe6\x06\x0c\xeb\x0d\xc4\x51\xa4\xd6\x74\x25\x4a\xd2\x9e\x25\xa2\x9e\x57\xa2\xc3\x7c\xc9\x01\xc2\x64\xfd\x07\x71\xfe\x91\xa8\x9f\xb6\xc7\xc2\x48\xba\xf4\x65\xb5\x03\x7e\x57\x56\x65\x40\x35\x42\x83\x62\xa9\xc9\x5c\xd4\x26\xd0\x4f\x64\x27\xe6\x54\xcb\x28\x1b\x9a\x89\x8a\xa8\xc8\x4d\x60\x06\xdf\xaf\x89\xc2\x9e\x58\xfc\x0a\x98\x3e\xf2\xf8\x64\x55\xca\x29\xb1\x0d\x04\xa6\x41\x24\x08\x96\x9f\x02\x70\x77\x8d\xb9\x69\x33\x66\x48\xfe\x88\x60\x47\xcc\x92\x89\xf4\xb9\x85\x3e\x4a\xa2\xc5\xe6\xa3\x28\xcd\xe0\x77\xd6\x8d\xce\xcc\x8d\x8a\xa3\xfb\x49\xae\xc2\xa4\xab\xd5\xe7\x82\x15\xc8\x40\x79\x06\xca\xa8\x60\xfe\xef\x2a\x51\x1a\x37\xc3\x09\x54\x56\xac\xdb\x4a\x32\x37\xcb\x3f\x02\x19\x5f\x3b\x33\x05\xcb\xda\x0c\x85\x8d\x29\x8d\x5b\x68\x65\xca\x12\x76\xe6\x37\xee\x31\x3e\xab\xb9\x79\x14\xf5\x1e\x18\x57\xec\xdc\x16\xc6\xaf\x09\x0e\xe0\x87\xc5\x8c\x92\x6b\x11\x6c\x50\x06\xab\x31\x53\x33\x84\xac\x88\xab\xea\x29\xa0\x2a\xf9\x5c\x27\xe7\xc2\xac\xcc\x46\x21\x5f\x09\xeb\x2d\x65\xe7\x95\xe5\x0c\x09\xa6\x10\x18\xd9\xf0\x41\xa0\x0a\x8e\xe3\x82\x93\x0c\x56\xa2\x29\x93\xda\xa7\x90\xc7\x94\xbf\x73\x7d\x73\x89\x05\x52\x05\x03\xb3\xba\x74\xae\x60\x7d\x0a\x37\x55\xb3\x07\xd8\xb6\xac\x6a\x87\x9f\xda\x5e\xc4\x50\xa1\x11\x9f\x3a\x36\x33\x65\xef\xb1\x77\xf1\x6f\x61\xba\x94\x9a\xeb\x83\x01\x05\x75\x8c\x1c\x5f\xac\xc9\x26\xa0\x4b\xb0\x20\x5c\x2d\xa8\x61\x76\xd5\x30\xb2\x93\x66\x75\x45\xf6\x49\xa1\xef\xf4\xe2\xb8\x67\xf7\xfa\x49\xaa\x7e\x47\x89\x0e\xc3\xfa\x1d\x4b\x58\x6c\xbd\x56\x11\xf5\xf3\x4b\x9c\xa8\x8f\x6d\x82\xa8\x75\x36\x06\x08\x47\xa3\x77\xb8\x70\xd2\xec\xd8\x5e\xdc\xe4\x2c\x9e\x32\x49\xf2\x3f\x28\xd1\xf3\x12\x66\x04\xe3\xfc\x45\x89\x8e\xf7\xb6\x7c\x1b\xd1\x3a\xce\x5b\x61\x86\xe5\x41\xb1\x2a\x3f\xdd\x35\x68\x47\x12\xa3\x79\x66\x68\xe7\xc9\x40\x8c\x5c\xeb\xe1\x9b\x90\x33\x3d\x37\xf4\xa2\x7a\xdb\xc7\x54\x0c\xa3\xf6\x81\xb3\x75\x09\xe8\xeb\xce\xa5\xff\xb3\x50\xab\x85\x6a\x87\xd6\x6d\xe7\x3a\x7f\x43\xc4\x0f\x74\x25\x60\x60\xa6\xbb\x94\xa4\xb1\xab\x22\x5d\x93\xa8\x96\xae\xa3\x3e\x89\x8f\xee\x82\x49\xc0\x52\x13\xa3\x76\xbd\x95\xdc\x12\xec\x96\x70\x17\xe1\x8f\xe6\xd3\x18\x40\x3d\x59\xe3\x69\x7b\xdf\xbe\x3d\x97\x68\x99\xed\x1b\x71\x74\xa2\x85\x07\xb8\x30\xb1\xa3\x30\x3b\xcf\x9a\x90\x3d\x55\x1d\x3b\x11\xc2\x15\xb2\x8c\xe1\x92\x85\xc9\x3a\x8b\x33\x27\x84\xf0\xf6\xc6\x60\x4c\x52\xdf\xa8\x6c\x90\x4f\x6e\x65\x0c\xda\xca\x18\xb4\x05\xd6\xe9\x0c\xd6\xf9\x7d\x99\x31\xe8\x1e\x42\x47\xfb\x70\x4a\x02\x33\x80\x5c\x41\x4f\x6d\xcb\xd5\xa0\xd7\x69\x70\x25\xe3\x38\x23\x39\x83\xfe\x21\xcb\x19\xf4\x6d\xd2\x4f\xfa\x03\xd1\x6f\xcc\x16\xf4\x76\x72\xa4\x9f\x7a\x0b\x6a\x00\x67\x41\xad\x84\xa3\xbd\x5d\x83\xa3\xd6\x85\xc5\xae\x41\x18\x45\xde\x2f\xf8\x37\xe7\x17\x07\xcf\xe2\xd3\x13\x58\x47\xd6\xfa\xd8\xf9\xce\x07\x88\x79\xcd\x5e\xe2\xbb\xc0\x4e\xa3\x65\x38\x3c\x1c\xb0\x2f\x14\x22\x64\xd4\x6e\x86\x1e\x8b\x93\x34\x8a\x60\xa2\xb8\x4e\x23\x0c\x6e\x0d\x16\xaf\xb8\x0d\xb0\xc6\x36\x58\xec\x37\x56\x58\xec\x06\x62\x16\x13\x4c\xa2\xec\x86\xc2\x5b\x97\xb6\xa0\xc5\x46\xec\x87\x55\xbf\xe1\x8a\xe0\x52\x61\xe2\xd4\xaa\x3d\x71\x91\x15\x7a\x70\x25\x8a\x81\x47\x5e\x98\xa1\xa7\xd1\xd6\x93\x6c\x90\x37\x9e\xb7\xc5\xff\x07\xe4\xff\xf7\x11\xfa\xf3\x6e\x33\x8d\xe0\x44\x6c\xae\xfd\x62\xb4\xca\x42\xeb\xbd\xc4\x79\x23\x99\xe8\xf2\x84\x2c\x05\xa1\x05\xb8\x80\xe8\x96\x36\x0a\xf0\x1b\x80\x95\x1c\x55\x0b\x59\xb5\x58\x4c\x20\xa4\x10\x75\x43\x88\xb4\x4a\xa1\x3d\xe8\x8e\x0b\x9e\xdc\xa0\x25\xcb\x48\x83\x10\x00\xbb\x37\xd6\xf4\xf2\xf8\x83\xa9\xb4\x20\x62\x54\xb6\xa9\xc3\x7f\xa7\x4c\xcf\x07\xbd\x7a\xae\x19\x08\x7f\x55\x62\x7d\xa9\xec\x3c\xb7\x3c\x93\xbb\x6a\xe2\x41\xcc\x20\xa5\x44\x3e\x82\xba\x3e\xd4\xf0\xc9\x1b\x2b\x81\xa4\x1b\xcd\x20\x90\xd8\x41\xf8\x2c\xda\x40\x54\xaa\xd4\xcc\x21\x05\xb3\x61\x4e\x64\xc5\x6e\xeb\x13\xa4\x1d\x06\x6d\x4b\xa0\xa9\x6c\x79\x67\x89\x55\x5d\xfe\x55\xf9\x5b\xec\x16\x59\x6f\x3b\xb3\xab\x8e\x42\x3e\x96\xc2\x96\xe1\xa8\x8f\xc5\xa5\x33\x46\xb7\x8a\x07\xcb\xcd\x40\x60\x84\xe1\x64\x1c\x47\x3e\x7e\x41\x86\xf7\x1c\x83\x4b\x7c\x76\xc4\x54\x8e\x45\xe1\x98\x3b\xd6\x88\x3c\xdd\x6a\x7d\x39\xbd\x74\x93\x01\x66\x5b\x1a\xcc\x83\x4a\x83\xf9\x64\x89\xee\x10\x84\x64\xbd\xaf\xe4\xdc\x4d\xb4\x3d\x2c\x3d\x45\x9a\x4c\x90\xf9\x47\xc4\x09\xb2\x29\xa8\xdd\x60\x50\xd2\xf3\x59\xb0\x2b\x4f\x33\x16\x6c\x3f\xbd\xa8\x8f\xb0\xf4\x1c\x81\xf7\x95\xf3\x99\xb3\xa4\x01\x72\x3e\x3f\x40\x6e\xe8\xad\x62\xec\xb3\xf6\x76\x51\x31\xc4\x1c\xe5\x35\x8d\xb7\x0c\x77\xf0\x75\xeb\x2f\x01\xf0\xf1\x59\xc3\xce\x25\xed\x97\xf3\x00\x48\x43\x19\x11\x88\x88\x0c\x0f\xf9\x17\x5b\x78\xc8\x41\x05\xfe\x27\x14\x1e\xf2\xfd\xc4\x59\x3f\x5c\x38\xd1\x7d\xa3\x20\x53\x37\x59\xcd\xc8\x9e\x71\xae\xae\x25\x80\xc9\xae\x0b\xd9\x3f\x26\x64\xbf\x91\xb9\x70\x1f\xdd\xdb\x8f\x99\xc8\xa4\xba\x2d\xa6\xff\xe0\x01\x4a\x3e\xb1\x37\xab\xba\xd4\xba\xb8\x37\xab\x2a\x02\x4c\xfe\xfd\xce\xe2\x0c\x35\xed\x6a\xae\x86\x9e\x7c\xcf\x4e\xe7\xbb\xa4\xeb\x23\xb9\x9c\x0a\x0a\xa9\x90\xd7\x81\x51\xe1\x15\xc8\x1e\xf4\x02\x35\xb2\x46\x84\x62\xd7\x14\x41\x22\x7e\x98\x70\xc6\xe3\x76\x68\x45\xa1\x20\xa4\x70\x03\x9b\xa7\x96\x5e\x81\x6b\xa9\x5c\x6f\x74\x97\x5d\x3f\x4c\x52\xae\x71\x27\xf6\xae\xeb\xd5\xc4\x82\x0a\x8e\xc4\x6f\xf3\x63\xbd\x4c\x26\xb5\xbb\x72\x92\x0c\x35\xdc\x74\x65\x83\x7c\x70\x3b\xbd\xb3\x44\x77\xba\x4d\x0f\x22\x6f\xac\x67\x97\x9c\x1f\x91\x09\xf1\x4b\x8a\x60\xce\xf8\x42\x88\xd9\x91\x37\x24\x48\x89\xf7\xb3\x62\x4f\x70\xde\xe9\x37\x60\xdf\x80\xed\x00\xfb\x0f\x0e\x10\x3c\x15\xd6\x5a\xb6\x9f\x26\x2c\xa8\x21\xc6\x41\x9d\x16\x6b\x7e\xde\x70\x0e\xc1\x6f\x45\x9f\x19\xcd\x52\x08\x40\x42\x2c\xc1\xbd\x05\xf3\xd5\x7a\xb3\xa8\xb7\xe0\xe5\x7c\xa8\xda\x67\x65\x05\xe2\x86\x0f\xe6\x03\x33\xd1\xd1\xfb\xcb\xf4\x61\xec\x44\xc3\x47\xc9\x2f\x2b\x15\xbd\xae\x2c\xfd\x06\x2f\x28\x4f\xe7\xef\xca\xd9\x12\x1c\x03\x83\x53\x95\xfc\x01\x17\x0a\x3f\x1d\x9b\xd6\x09\x73\xc9\x2b\xf6\x44\x92\x0d\xc5\x76\x1b\x8d\x38\x72\x21\xbb\x60\xd6\x97\x51\x5d\xb3\x97\x50\x95\x46\xd0\x5c\xf6\x85\x73\x06\xde\x49\xfd\x35\x06\xbe\xbf\x54\xba\x92\x3a\x7c\x70\x51\x6b\x0c\x5e\x17\x6e\xa2\x18\x42\xbb\xc0\x81\xab\x9a\x10\x64\x59\xd3\x7f\x24\x76\x14\x40\x4d\x9b\x15\x37\xb4\x2f\xdb\x63\x37\x58\x5c\x15\x74\x00\xc0\x2e\xe1\xb4\x0a\xfc\x35\x06\x78\x93\xce\x2f\x5f\xb4\xdf\x5e\x89\x9a\x71\x52\x31\x0a\x12\xc1\x35\x14\xb5\x12\xff\x25\xab\x86\xec\xdd\x63\xd7\xfd\xb0\x99\xb2\xc4\x74\x5c\xac\x50\x20\x6e\xeb\xb8\xb3\x30\xe7\xa6\x2b\x46\x7d\x75\x05\xcb\x11\xf4\x80\x7e\x63\xc3\xd7\x03\x08\xa7\x34\x92\xfb\x56\xef\x6f\x98\x0b\xa7\x7e\xe5\x4e\xfa\xbf\x3a\x33\x1b\x50\x8a\x1e\xd8\xe1\x3c\x46\xfb\x2d\x80\x27\x7a\xb0\x02\xdc\xd3\xd3\x36\x7f\x6f\xfb\x96\x0e\x34\xa0\x0e\xb4\x28\x55\xa0\xeb\x9d\xf3\x0f\xe7\x66\x56\x57\x4d\x46\xe9\x85\x74\x57\xbf\xaa\xc9\x96\x4e\xf2\x20\xd2\x49\x16\x7a\xeb\x24\x7b\xac\x4a\x17\x9d\xa4\x48\x19\xf9\xc8\xb9\xdd\xf8\xc3\x5c\x14\xa7\xd6\xef\x9c\xeb\xec\xd3\x7e\x67\x91\xea\x3a\xa6\x1a\x2a\xe3\xc3\x33\x23\x09\x38\xe8\x40\x80\x47\x71\xba\x41\xbe\x71\x0e\x7d\x76\x49\x40\xa9\x01\x2c\x63\x66\x88\xf0\xf1\x79\x1d\xfa\xaa\xec\xe2\x08\x6e\x55\xa8\xda\xa9\xd9\x85\x9b\x0f\x4f\x1c\x9c\x3e\x8c\x71\xb7\xfc\xb5\x24\xc3\x62\x6b\xae\x03\x7c\x07\xcc\x7c\x02\xb1\x2d\xd0\xc3\xd8\xa0\xdb\x50\x4c\x63\x64\xd6\xad\xb3\x11\x81\x3c\xf5\x43\x7b\x5a\x10\x35\x8c\x54\xc5\x67\x49\x40\x30\x17\x0e\x60\xc6\x8a\x42\x66\xeb\x73\xe2\xcb\x9c\xb7\x1e\x22\x89\x32\xdb\xa3\xc1\x8d\xdf\x55\xa6\x3b\xc3\xc8\xc3\x79\x7d\x43\x59\x22\x8e\x5f\x54\x5e\x04\x1d\x2a\x06\x1c\x12\xe6\xb2\x8d\x3c\x00\x1b\x4b\xe0\xb7\x66\xcc\xc4\x54\x9c\x50\x71\x05\x71\x64\xad\x06\xbb\x6a\x56\xb4\xca\x25\xd8\xe1\xc8\xf5\x0e\xba\x81\x1b\x56\x59\x5c\xb1\x8f\x25\x4d\x30\x6a\xba\x49\xe2\x2f\x87\xed\x2e\x06\x13\xf9\xea\x6b\xb0\x42\xe1\xb5\xf6\xb2\xc4\x49\xa2\x03\x35\xbb\x19\x82\x86\x18\xc5\x36\x0b\x12\x51\xd0\x4c\xab\x78\x24\x9f\xcc\x12\x21\xe9\x90\x9e\x34\x02\x7b\xeb\x98\xe6\x16\x87\xb1\x0b\xc9\x2b\xe6\x55\x16\xc6\xd5\x8d\x24\x19\x5e\x29\x0a\x37\x81\xd7\x14\xec\x76\x2c\x64\xa9\x88\x7a\x90\xd7\xc6\x61\xab\x8d\xf1\x59\xe7\x5d\x31\x84\xf5\xf5\x14\x08\xd9\x9a\x94\xcb\x55\x51\xab\x65\xc0\x30\xe5\xa2\x64\x10\x6d\x49\x00\x5a\x63\x4f\xa1\x3b\x1b\x71\x94\x46\xd5\x28\xb0\x9e\xec\x3c\x81\xb7\x34\x33\x67\xcb\x4b\x59\xdd\x26\xd8\x42\xf6\x02\xa2\xdb\x13\xdb\x59\x9c\x9c\x73\x46\x6d\xe7\xd8\x14\xff\x8f\x8b\x34\x67\x61\x72\x71\xce\x4c\x3c\xb6\x38\x39\x67\x50\xdb\xb7\x87\x28\x45\x90\x3e\xd0\xdb\x57\x86\xfa\x35\xbe\x35\x53\x3f\xa8\xf8\x61\x9a\xa4\x71\x65\x26\x4c\x8f\xc6\x0b\xd0\xa0\xf3\x92\xa1\x59\x51\xeb\x29\x36\x52\xbc\xe0\x5c\x44\xc2\xb8\x2b\xb1\x74\x68\x87\x86\xef\x6b\x54\x27\xb7\xb6\x68\x49\x6e\x6e\xb1\xf3\x63\x37\x5c\x66\xf6\x5e\xde\xd8\x25\x17\x5f\xbc\xef\xe2\x8a\x3d\xab\x07\x3a\xb8\xa1\x3d\x33\x31\x3b\x71\xf3\xc2\x0d\x93\x37\xcf\x4e\x1c\x99\x36\x72\x72\xb9\x2a\x57\x85\x46\xc4\x41\x14\xad\x32\xcf\x6e\x36\x04\xc6\x09\x90\x08\x48\x6d\xa1\x1e\xc5\x30\x07\x90\x60\x0d\x44\xc3\xa7\xbd\x2d\xe5\x57\x0e\xee\x81\xe2\x55\x4c\xc2\x08\x7f\x45\x71\x92\x04\x8f\x50\xbb\x74\xaf\x53\xdd\x6d\xec\x16\x2c\x48\x3d\xe5\x2f\x87\x91\xac\xf0\x24\xe9\x13\x4f\x20\xd5\xa0\x99\xa4\x2c\x9e\x99\xbb\x6a\x36\x0a\x85\x1e\x93\x25\xeb\x92\x69\x7c\xe1\xb5\xd4\x66\xb7\x34\x31\x06\x2d\xdf\x93\xd3\xbb\x49\x90\x78\xc2\xe5\x31\x57\x9a\x57\xe8\x87\x1e\xdb\x4d\x80\x40\x0e\xfe\x97\x3f\xd6\x39\xa4\x33\x67\x33\x9b\xb1\x9b\xa2\x20\x94\x10\x35\x17\xb1\x4a\x18\x65\x01\xc4\x94\x79\x7a\x37\xc8\x17\x2e\xa4\x77\x6d\xa3\xc3\x6a\x72\xac\x67\x6f\x73\x7e\x34\xa4\x7e\x4a\x4d\x7a\x66\x2e\x9f\x5d\x4f\x1d\x2e\x42\xb1\x3a\x39\xae\x88\xc0\x9c\xa0\x25\x09\xb5\xee\xf2\x16\x11\xa7\x1f\xaa\xc6\x0c\xb0\x7e\xdd\x0d\x45\x23\xd8\x26\xa7\x10\x3f\x84\xf3\xee\x52\x0b\xcf\x81\x49\x5f\x1c\xf5\x8a\xec\xd0\x38\xda\x0f\x2f\xd5\x48\x88\x9f\xd7\x85\x72\x55\x5d\xe1\x9b\xc7\x53\x28\x15\x54\xb6\x54\x86\x27\x2d\x39\x85\xc3\x29\xca\x19\x15\x15\x3b\x85\xae\xb8\xcb\x71\x76\x8f\xda\x98\x1a\x0e\x5e\xc8\xe6\xb0\x22\xde\x90\xd6\x81\x6c\x0a\x38\xd9\xae\x30\xd7\x83\xa8\x83\x8c\x7e\xb9\x58\x02\x80\x0c\xa4\xfc\x13\xe0\x3f\x95\x91\x1a\x12\x02\xea\xc9\x7c\xb9\x96\x63\x4f\xca\x35\x1c\xb5\xa5\x30\x43\xa2\x37\xc5\xd9\x8c\xd8\x30\x5c\x58\x88\x1c\xc4\xd3\x27\x50\xe3\xe7\xac\xe2\xf4\xd2\xfb\x9a\x1f\xa7\x4d\x37\x18\xf3\x1b\x09\x3a\xcb\x85\x4d\x91\x8f\xcd\x37\xf5\xfb\xef\x97\xe8\x39\x4c\x74\x64\x66\x2e\xb1\xbe\x5d\x72\x3e\x55\xd2\x2e\x98\x46\xe6\x6c\x6e\x99\x5e\x37\x98\xcb\x1f\xe5\xf7\x13\x44\x2d\x21\x64\x09\xf2\xd7\x06\xe4\xff\xaf\xd5\xfc\x6a\x26\x2c\x14\x53\xe5\x67\xe5\x84\x53\x7f\xa2\x22\x87\x30\x1c\x0a\xf8\x6f\x66\x76\xc1\x27\x71\xa3\xc1\x39\x2c\x69\x44\x21\xd6\x41\xc0\xa2\x72\x09\x26\xad\x42\x44\x95\xf8\x9c\x1b\xc7\xfe\x1a\xa7\xa0\x14\xc0\xa2\x1e\xd3\xf2\xda\xcd\xcc\x55\x6c\x7b\x02\x32\x18\x72\x0d\x46\xc0\xb2\x40\x53\x11\xa7\xb1\x20\x72\xbd\xb1\x25\xb1\x8c\x72\xab\x8b\x3e\x36\xf8\x79\x5e\x90\xbb\x66\x1b\x12\x1a\x4a\x97\x0c\x59\xaf\x28\xd1\x73\x99\xb6\xfa\xd6\x1d\x25\xe7\xc7\x44\xbf\x22\x19\x82\xea\x87\xee\x13\x75\x53\x30\x2c\x78\x21\x64\xfb\xd2\x50\xe1\x22\xcb\x47\xda\x8c\x05\x36\x76\x92\x4b\x1b\x38\x7b\xc6\x5e\xc1\xbc\xcf\x46\x19\xb9\xcb\xcd\xee\x87\x6b\x51\xb0\x06\x50\xca\x5c\x42\x8a\xf9\x43\x93\x63\x7b\xf7\x5e\xb4\x0f\xd0\xe6\x20\x47\x77\xf5\x48\x87\xc4\x9f\x46\xa8\xac\x52\x80\x16\x45\x72\xd3\x25\x66\xd2\xbf\x3e\x3d\x1f\x2b\xd3\x47\xca\x81\x2f\xe2\x2a\xce\x41\x91\x03\xeb\x8d\x65\xe7\xe5\xe5\xc2\x5b\x0a\xc0\xee\xe7\x54\x2f\x2c\x6c\x92\xa0\xc1\xa5\x99\x6a\x53\x2a\x09\x24\x8d\x80\x2c\xc6\x10\xa5\x17\xc5\x92\x82\xc7\xd6\x7d\x2f\x3b\x2e\x72\x6e\x02\x4e\x55\x07\x03\x52\xe2\x35\x09\x68\x17\x47\x48\x3c\x95\xf2\x1d\x12\x7a\xb6\xbb\x16\xf9\x9e\x08\x18\x8f\x42\xcf\x5e\x89\x1a\x30\xff\x3a\x53\x80\x07\x67\x85\xea\x26\x32\xba\x8a\x5d\x8d\xee\xe8\xd8\x4f\x56\xb9\x4a\x95\xaa\x08\x00\xbf\x2e\x48\xd1\x53\xbd\x4f\x1a\x22\xab\x4e\xc5\x76\x04\x2f\x72\xec\x68\x29\xa9\x36\xe3\x6e\x1d\xe4\xa7\x63\xf4\x8d\x1b\x7d\x84\x64\xf8\x18\x2f\x17\x42\x7c\x1d\xef\x87\x0e\x3f\x58\x8e\x22\x0f\x80\x05\x6e\x20\x36\x47\xd6\x01\x7d\x0d\x1f\x28\xd1\x87\xaf\x30\x37\x48\x57\x26\x57\x58\x75\x55\xb2\x46\xeb\xdb\x2a\x5e\xf1\xf3\xa5\x82\xfb\x8a\x47\x63\xd7\xf1\x89\x2a\x7f\xc2\x96\x07\x10\x15\x84\xa0\xc8\xb8\xbd\x88\xc8\x75\x05\x2d\xfb\x89\x0a\x81\x34\x95\x3a\xdb\x6d\xf8\xf6\x92\x5b\x5d\x65\xa1\x96\xcb\x33\x13\x7a\xf2\xc3\x15\xfb\x46\xbe\x47\xf8\x9c\x71\x0e\x34\x96\x89\x13\xd5\x35\xd4\xac\x8c\x9a\x2a\x32\x6e\x04\x16\x41\x08\x11\x06\xa1\x8c\x42\xe0\xc8\x94\xf4\x09\x26\x85\x69\xa3\x90\xe9\x42\x72\xd7\x5f\xa8\xba\x81\xa9\xad\xff\x65\x89\x9e\x17\x68\xed\xcc\xcc\x59\x5f\x2a\x39\x1f\x2f\xe5\x25\x98\xdc\x23\xbc\x0b\x07\xcc\x2f\x1b\x3f\x80\x37\x70\x75\x53\x4e\xa0\x9a\xa5\x99\xb9\xbc\x91\x59\x8a\x78\x29\xee\x45\x38\x86\xc7\x1a\x2c\xf4\x12\x3c\x1b\x66\xf1\x72\x80\x8c\x0a\x80\x01\x55\x83\xa8\xe9\x8d\x89\x2c\x56\xb1\x8c\x90\x35\xf2\x61\x81\xb9\xcc\x18\x17\x4e\xa1\x0b\x57\x6d\xc9\xa6\xb5\xa5\x36\x94\x0e\xc5\xe2\x34\x59\x0c\x4b\x63\x7c\x58\xc1\xfe\x65\x8c\x2e\x98\x2e\x71\x18\x06\x89\xdf\x55\xa6\x8f\xd6\x7b\x83\x81\xc9\xf3\x5c\x9b\x49\xac\x1f\x96\x9c\xfb\x4b\xfa\x19\x15\x15\xe1\x7c\xc6\xe6\x46\xe0\xa6\xb5\x28\xae\x8f\xe2\xcc\x09\x06\x8e\x15\x3f\x33\x06\xa5\xe1\x77\x73\x9d\x35\xc4\x93\x1a\xa0\x6c\x41\xd3\xd8\x54\x37\x04\x37\x98\x99\x4b\x4e\xf7\xdc\x38\x03\x79\x42\xf1\xd0\x35\x06\xd4\x88\xa9\x83\xc7\x04\xdf\xd5\x9c\xa1\xe6\xe7\xc7\x6a\x7e\xcc\xd6\xdd\x20\x18\xef\x22\x5b\x3f\x5c\xa2\xdb\x80\x70\xac\xdf\x2f\x39\xaf\x06\xa3\x8d\xd4\x5e\x90\x9e\x94\x08\xef\x74\xf0\xfd\xe9\xaa\x62\xd9\x40\xf6\xd0\x4a\xff\x48\x53\xce\x6e\xfa\x82\x3b\xf0\x41\x0f\x52\xe2\xfa\x5d\x65\xfa\xe8\x46\x73\x29\xf0\x93\x95\xd9\x28\x85\xe2\xe1\x13\x52\xe5\xb3\x5e\x5a\x76\x9e\x53\xee\x74\x77\x14\x37\xa3\x60\x4b\x18\x84\xe3\x9b\x71\x3c\x53\xb3\x0b\xb9\x4a\x2b\xc2\x4e\x26\xda\x14\x51\x8c\xb9\x86\xc1\xe6\xdc\x5c\x82\xf2\xb8\x92\xf9\x4b\x83\x57\x51\xc2\x62\x65\x8b\x31\x83\xd3\x04\x73\x96\xb1\x59\x70\xaf\x11\xfb\x75\x37\x06\x4c\xa6\x5d\x75\x05\x3e\x4d\x26\xfd\x4e\x8d\x23\xaf\x00\xb0\xb9\xf6\x42\xea\xa6\xac\xd6\x0c\x16\x20\x7d\xc0\x75\xf2\x18\x21\x99\x29\x3a\x38\x1a\x2e\xd4\xf0\x5d\x98\xbf\x41\xa8\x5f\xd8\x75\x3f\x4d\xf8\x99\x3d\x51\xd9\x55\xb8\x0e\x0b\xbe\x10\xd8\xa7\x7e\x2c\x72\xe4\xf1\x06\x11\x2a\x17\x73\x22\x05\xea\x65\x7c\x03\xfa\x49\x95\x4b\xdf\x96\x09\xe0\x7b\x73\x99\xee\x94\x31\x02\xd6\xab\xca\xce\x33\xca\xf3\xa0\xeb\x48\x09\xa7\xa9\x3a\x0d\xf9\x75\x51\xa2\x24\x9f\x05\x50\xab\x4d\x0e\x7b\x02\x1b\x05\x21\x8b\xe7\xae\x28\xd6\xa3\xbc\x47\x4d\x13\x1b\x2c\x47\xb3\x8e\x8c\x47\xe2\x15\x95\xc6\x25\x83\x5f\x41\xb9\x87\x33\x56\x9a\x64\x0a\xd6\xa8\x38\x4d\x68\xaa\xb4\x0a\x41\xaf\x47\x9e\x5f\x6b\xfd\x17\x3a\x83\x75\xcb\x6a\xf8\x86\x12\x7d\x68\x82\xf9\xa8\x27\x6a\xb0\xd9\x5b\xd6\x4b\x4a\xce\xad\xa5\xcc\x6e\x36\x09\x5c\x7a\x66\xce\x41\xa3\x19\x1c\x63\x21\xdc\xcf\xc3\xd2\x6e\x3e\x86\xbb\x8b\x56\x6c\x57\x34\x53\xb1\x31\x65\x7b\xc6\xe5\x21\x2f\xaa\x57\xf0\xa0\xd4\xee\xe5\x97\x30\x01\x71\xc8\xcc\xf8\xab\xd9\xd3\x6e\xb0\x1c\xe0\x6c\x7a\x92\xd0\x47\xe6\xe6\x69\x12\x44\x83\xf5\x0c\x42\x2f\xe9\x83\x53\x16\xbc\xea\x1c\x2a\x6c\xd1\xcc\x63\x6b\x80\xd3\x90\xfd\xe4\xe7\x8f\xfe\xfb\x76\x91\x9b\xf2\xfb\xdb\x9d\xbf\xda\x0e\xf4\xa4\xc5\xe5\xac\x44\xeb\x3a\x23\xd2\x8c\xdf\xe6\xfc\x2a\xca\xcd\x12\x5a\x67\xa5\x98\x74\xe2\x1c\xed\x97\xc8\x1d\xfd\x2d\xc7\x70\x1a\x64\x4a\x00\x33\xc8\xde\x51\x4d\x3b\x4a\xed\xe5\x67\x17\x79\x0e\x52\xae\x49\xcd\x3c\xc5\x99\x93\xa6\x7c\x08\x97\xb6\x76\x58\xd2\x18\x74\xac\x4d\x8d\xa6\x7c\x8b\x90\x26\xe9\xbb\xc6\xf4\xf3\x39\x45\x7e\xa9\x25\xcc\x55\x10\x51\x95\xc6\xcd\xaa\xe6\x72\xcd\x3e\x21\x9d\xaf\x33\x35\xdb\xb0\xa9\x49\x8b\x51\x18\xd9\x82\xee\x6c\xbc\x91\x69\xf7\x32\xc4\x8a\x19\xfd\x15\xf2\x48\x66\x53\x55\x75\xfc\xe4\x33\xb1\x2b\x54\x58\x17\xec\x7c\x29\x6c\x3a\xbe\x8a\x8e\x5c\x1b\xc7\x5e\x6a\xfa\x01\x6a\xbc\x6a\x7e\xf1\x6c\xa8\x4d\xb1\x72\x9e\x70\x9e\x2e\xac\x13\xc0\x04\xe1\xac\x9a\xd5\x8c\xca\xc8\xc4\xd1\x97\x5b\xff\x88\x3a\xe8\x40\xb6\x10\x61\x86\xd4\xb9\xaf\xa9\x2b\x42\xe5\x47\xa5\x8e\x4a\xdb\x8d\xa8\xe6\x07\x7a\xd7\xee\x5e\x5d\x39\x9d\x6c\x41\x4c\xb8\x1f\x2e\x8f\xa9\xe7\xc6\x14\x73\x00\x36\xaf\xb3\x86\x67\x74\x28\x3b\xa0\x87\xb3\x58\xdf\x20\xce\xe5\xc6\x95\x7c\xcd\x01\x39\xdc\x2c\xbc\x45\xb7\xd9\xbe\x82\xd0\x97\x13\x7a\xae\xae\xe2\x5b\xb7\x13\xba\xaf\x0f\xec\xb5\x76\x28\xc0\xc8\x9a\x27\x18\xe7\x29\x93\xd9\xb4\x75\x42\x1e\x73\xd4\x62\x8d\xa2\x03\x8f\x61\x9a\x5f\xcc\xc4\x42\x9f\x53\xa2\xbb\xfa\xe5\x7a\xd6\xfd\xc4\xb9\xae\xf0\x4e\xdb\x94\xf4\x66\x7d\x1b\xe4\x0e\x42\x6f\x27\x74\x67\x55\x88\x0e\xeb\x57\xfb\x40\x25\x4a\x39\x23\xd8\xf0\x8c\x7c\xb9\x17\xe7\x9d\xec\x25\xc9\xe8\xd7\x87\xe9\x45\x45\x13\x81\x69\x4e\x8e\x2e\x74\x28\x9e\xf6\xba\x61\xe7\x22\xa3\xf4\x80\x7a\x41\xaf\xec\x23\x60\x40\x2a\x21\xd6\x06\xf9\xbf\x3b\xe9\xff\xc9\x8a\xf7\xbc\x87\x38\x6f\xfc\x59\x15\xef\x99\xa9\xab\xca\x86\x00\x74\x88\x15\x78\x1b\x5f\xc8\x07\x47\x9f\x1d\xd5\x72\x36\x8c\x6a\x39\x1f\xea\xa7\xfa\x58\xbe\x50\xce\x73\xb5\x42\x39\xa6\xc1\x28\x4b\xae\x2b\x83\x4d\xa2\x25\x4e\x5d\xd2\x7a\x90\xad\xf1\xc4\xdc\x0c\xe7\x92\x1e\xda\xd6\x12\x8c\x47\xce\x49\x1f\xe3\xe4\x90\xa5\x53\x72\xd3\x94\xab\xc2\xcc\xab\xd0\x3b\xcc\x12\x2c\xbf\xe6\x34\x6e\x50\xbf\xa4\x0d\x77\xa5\x59\x77\xc3\x31\x3e\x9d\x20\x25\x8c\xa2\x47\xaa\x3b\x12\xd8\x28\x26\x0e\x1d\xff\x59\xfc\x49\xc7\x04\x6e\xc6\xa2\x7e\xa9\x4c\x1f\x9a\xf5\x06\x13\xb5\x7d\xa8\xec\xbc\xad\x7c\x83\x79\x31\x3f\x69\x7a\x95\x13\x41\xf0\xe2\x4b\xaa\x83\x72\x7e\xb4\x88\x1e\xc3\xa9\x94\xca\xd4\x30\x73\xb9\x24\x45\x72\xd2\x9a\xa0\xfb\x88\x6a\x13\x98\xe9\x3c\x67\x37\x87\x89\xe1\x7d\x11\xca\xc4\x12\xb3\xeb\x7e\x1c\x83\xca\x9e\xef\x0e\x9e\x03\xfd\xe5\x95\x14\xd2\xab\xa4\x6c\x39\x16\xd5\x8e\x16\x58\x6a\x6b\x6b\x00\x06\x4d\xcc\x90\xc7\xff\x16\x21\x51\x48\xb7\x72\x79\x45\x78\x66\x33\xc6\xb7\xd3\xc8\x76\xc4\x2d\xd8\x42\xad\xa8\xa9\x4c\xfe\x18\x00\xa1\x46\x97\x14\xcc\xd3\x6c\x76\x13\xa3\xb5\x23\x79\x5e\x1a\x83\x44\xe9\xed\x63\x91\x53\x24\x6d\x56\xfa\x92\xfe\xc9\x70\x31\x97\x97\x2f\x1b\x2c\xed\xf7\x36\xc9\xd2\xfe\x79\x8b\xa5\x9d\x12\x4b\xfb\xa2\xc1\xd2\x3e\xb6\xe9\x02\x60\x5b\x7c\x6d\x8b\xaf\x3d\x48\xf8\xda\x47\x49\x71\x91\xa0\x56\x52\x4d\x03\xeb\x35\xc4\x79\x2c\xfe\xa9\x10\xb9\xae\xbd\xca\x27\x34\xb0\x1b\x6e\xec\xd6\xf9\x71\x52\xcc\x65\xc2\xd2\x93\x04\x60\x7a\x27\xc9\x36\xa0\xe8\x0d\xb2\x44\x2b\x02\xb9\xf7\xbf\x9d\x9f\x9b\x55\x05\xd1\x1a\x31\x67\x46\x69\x0b\xa3\x55\x8d\x94\x77\x7b\x28\xbe\x6b\x8d\x38\xff\xf3\x06\x89\x8f\xe9\xfa\xc6\xf3\x8b\x6b\x3f\x2c\x4e\xce\x2d\x44\xd5\x55\x96\x4e\x60\x04\xc4\x77\x4a\xce\x55\xb9\x6b\x1a\x92\x84\x1f\x1f\xf1\x1a\x6a\xb7\x11\x94\xda\x0a\x45\xe5\x25\x78\x47\x01\x12\x7f\xa7\x44\x8f\xd2\x21\xce\x53\xad\x6b\x9d\x03\x59\xb2\xcf\xeb\x38\x97\x95\x84\x50\x8d\xc2\x10\xed\x89\xa3\x6d\x10\xfd\x46\xe4\xf1\x33\xaa\x3e\x88\x4f\x13\x81\x12\xfb\x48\xdf\x21\x8e\x9d\x50\x56\xbf\x36\x08\xc8\x4a\xcb\x17\x73\x7a\x10\x55\xf4\x3f\x86\xe8\xa3\x8b\x96\xc3\xf5\xc3\xd4\xfa\xf3\x21\xe7\x38\xc0\x37\x23\x4f\x00\x87\xe1\x3a\x58\x02\xd2\xd4\xad\xae\x48\x83\x25\x6e\x5e\x07\x1d\x74\x0e\xa0\x78\x42\x88\x81\x94\x34\x2f\xfc\x1f\x69\x14\x70\xa9\x86\xfb\x0d\xda\x12\xb5\x1f\x4e\x92\xed\xf8\xf2\x06\xf9\xfb\x32\x14\x4d\xc6\x9f\x58\x34\x79\x5e\x81\x49\x78\x6f\xf0\x4e\x96\x97\x16\xa0\xf2\x7a\x20\xb4\xd8\x62\xc6\xc7\xe0\x31\x69\x2d\x92\x8e\x44\xbe\x8d\x67\xa3\x05\x3e\x8e\x66\xc0\x46\xed\x39\x80\x0b\x64\x57\x84\xab\x79\xfa\x04\xab\x36\x53\x96\x2b\xf2\x09\x75\x2a\xae\x72\xf6\x98\x9d\xc3\xee\xac\xb2\x56\x7b\x46\x21\x84\x51\x18\xad\xbc\x95\xd0\xe1\xd4\xaf\xb3\x09\xcf\x63\x9e\xf5\x6a\x42\x2f\xdd\x04\x4c\x79\xd1\xaf\x33\xc7\x5b\x94\xcd\xe4\x8f\xa6\x10\xf1\xe0\xa6\x5a\x52\x61\xec\xe3\xba\x9b\xd8\x2e\x7f\x41\x16\x9e\x01\xc9\xc2\xc5\x7c\xca\xb0\x7a\xa8\x1a\x39\xbe\x91\x54\xe8\x51\xb9\xdd\x0f\x39\x97\x17\x8d\x1b\x7d\x05\xd5\x28\x46\x8c\x89\x27\x58\x77\xaa\x4f\x8c\x31\x01\x5f\xa4\x85\xd5\x2b\x16\x71\xe9\x38\x23\x78\x2b\x75\x5e\x40\x16\xc5\x36\x44\x1a\x54\x37\xf3\x84\x28\x57\x3c\x01\xf2\xc3\x2f\x02\x45\x80\x75\x5e\xa6\xe9\x8b\xfd\x46\xc0\xec\x2b\x57\x59\x6b\x14\x83\x06\x90\x1c\xae\xd6\x12\x14\x2b\x6b\xbe\xaa\x14\x77\xa5\xfc\xeb\xea\xca\x06\x79\xf9\x30\x7d\x5f\x46\xa2\x6f\x25\xce\xab\xc9\x34\x12\xa5\xee\xb8\x91\x63\x16\xf4\x0a\x06\xe8\xb4\xba\x52\xb1\xa7\xc1\x21\x50\x67\x6e\x28\xfc\x06\x5c\x02\x1a\x0f\x27\x15\xcc\xc2\xa9\x29\x1f\x32\xcc\x58\x03\x76\x6d\x92\x74\xbf\x42\x90\x76\x3f\x47\x9c\x0f\x93\xeb\x31\x27\x6d\x6a\x92\xae\x4c\xad\x94\x66\x53\xad\x15\xf0\xeb\x3a\x80\x55\xd6\xca\x8a\xf5\x89\x8c\xb7\xe0\x01\x19\xcd\x26\x53\xb2\x23\xac\xbd\x77\x85\x4c\x18\x58\x5f\xf2\x43\xfc\x18\x36\x2d\x67\x0c\x5a\x97\xe3\x46\x4b\x20\x7e\x46\x1f\xd5\x0f\xf5\xf2\x88\x7f\x47\x9c\x6f\x90\xa3\xf2\x73\x46\xa8\xdc\x2a\x6b\x15\xd4\x49\x4c\xb3\xdc\xc0\x45\x15\x12\x45\x91\x40\xc0\x15\xdc\xd2\x74\x03\xd3\x1a\x2d\x2e\x89\x87\xf8\x78\x8d\x8c\x93\xeb\x7e\xe0\x55\x5d\x81\x24\x12\x61\x2a\x49\x24\xe1\x8f\x9c\xac\xab\x6e\x98\x71\x2b\x35\x95\xc2\xb2\xd6\x70\xe3\xd4\xaf\x36\x03\x37\xb6\x39\x65\x2d\x47\xb1\xb9\x85\xfe\xa6\x44\x1f\x96\xad\x93\x8c\x0c\xfb\xb2\xca\x28\xf7\xc1\xd2\x62\xfe\x6e\x9e\x45\x34\x58\xec\x47\x98\x8a\x19\xc2\xa3\xcc\x95\xdf\x85\x9c\x43\x2e\x5a\x54\x93\x14\xad\xc8\x6b\x54\x0b\x83\x4b\x8b\x00\xaf\xbb\xb5\xad\xa9\x71\xe3\x83\x2a\x9b\xf6\xa8\x48\x62\x0c\x1a\x37\x4b\xa5\x4f\x4b\xd2\x41\x9e\x91\xf3\xa9\x84\x32\x59\xbb\x04\xaf\x67\x6b\x7e\x35\xdd\x5d\xb1\x9f\xc8\xe2\x08\x96\x29\x64\xcb\x18\x57\x95\x53\xd6\x53\x01\xc5\x70\x13\x7b\x8f\xbd\x0b\x5e\xb3\xfd\x7a\x9d\x79\xbe\x9b\xb2\xa0\xb5\x3b\x87\x97\x37\xf0\x21\xaf\x25\x92\xfd\xbd\x8c\x38\xcf\x23\x37\x48\xc7\x68\x9a\xe3\x7f\xb9\xf9\x53\xcc\x27\xea\x52\x80\xd2\x48\xd0\xa6\x70\xbf\x72\xe3\xa8\xd9\x7d\x0a\x5f\x04\xd7\x8e\xd9\x32\x10\x04\x92\x80\x19\x02\x56\xa6\xfb\x0a\x39\x6a\x23\x0a\xa2\x65\x55\x8d\xe9\xb0\xbb\xc4\x02\xbd\x1e\xea\x77\x4a\xce\xd3\x27\xec\x54\x3c\xd6\x77\x1d\x54\x39\xb8\x65\x7f\x8d\x85\xe8\x1b\x15\x00\x09\x1f\xd5\xb4\xa0\xb1\xe2\x2a\x38\x8b\x82\x50\x01\x78\x55\x2a\x2d\xb5\x26\x00\x21\x94\x26\x80\x4b\xb6\x41\xee\x25\xf4\x1a\x64\x55\x97\x39\x8f\x05\x44\x82\x74\xbd\xf6\x5f\x60\xf4\x85\x44\x15\x18\xbd\x95\x38\xcb\x5d\xea\x8b\x1e\x0d\xe5\xfc\x03\xa5\x23\xe7\x49\xd5\x57\xa5\xd6\x1c\x40\x9c\xad\xa8\xd3\x08\x89\x19\xe1\x90\x2b\x92\x23\x27\xf6\xd1\x79\x50\xd9\x3b\x97\xf9\x2c\xd3\x91\x3e\xd6\x67\x91\xc5\x75\x7e\x58\x7b\x49\xa9\x68\x51\x52\x16\xd7\xf3\x9b\x58\x24\x6f\x8f\x6a\xa2\xc3\xb7\x34\x59\xec\xf3\x81\x4d\xd8\x61\x33\x00\x84\x1e\x7a\xa2\x3b\x34\x27\x57\x32\x8c\xb2\x48\x98\xc5\x15\x66\x16\xf7\x45\xa5\xab\x0e\x4c\x71\x62\x76\x4a\x28\x0f\x02\x69\x02\xd4\x01\x80\x03\xfe\x5c\xad\x19\x56\x51\xd7\xf6\xd3\x16\xdf\x6f\xb3\x91\xc7\xf4\xe1\x6d\x96\x4e\x36\xc8\xeb\x09\x7d\x0d\xa1\x8f\x84\x1e\x03\x21\xeb\x95\x8a\x9f\x4b\x9c\x7d\x59\xa5\xe2\xae\x04\x0d\x19\xa4\x60\xb6\xcc\xe2\xc4\xd3\x74\x92\x4e\xf4\xb4\x45\xf4\xda\x52\xf4\xf7\x86\xe8\x68\xd1\x7b\xad\x06\xf3\x8a\x0c\x19\xd6\x8f\xca\xce\xd3\x3b\xde\xcd\x2c\xfe\xc5\x45\x2e\x02\x96\xc2\xd9\x54\x44\xd9\xa4\x22\x23\xb1\xa7\xa7\xd6\x17\x71\x7f\x7e\x98\xc8\x43\xaf\x99\x6e\xa8\x72\x92\x40\x80\xa1\x38\x19\x6e\x90\xef\x94\xe8\xd7\x09\xdd\xe9\x36\x7c\xcc\xbe\xfb\x05\xe2\x7c\x94\x4c\xcc\xcd\xc0\x2f\xc9\xfb\x20\x04\x4d\x41\x4c\x54\xa4\xe1\x12\xe3\xdb\x2b\xfb\x3a\x70\x3f\xfd\xdd\x82\x18\x8b\xcc\x82\x00\xd1\x8d\xb9\xd3\x0d\x9f\x41\xb0\xd4\xc0\x17\x2b\xf6\x21\x48\xf4\x25\xc0\xf7\x5c\xf2\xc4\xde\x18\x17\x97\x2d\x04\x38\x8c\x1a\x5f\x53\x88\x74\x7d\x37\x1e\x14\x01\x95\x07\x9c\x31\x19\x4e\x99\x6a\xa9\x9c\x3b\x8e\x25\xd7\x06\x9c\x99\x0f\x38\x63\xba\x9d\x47\x9e\xe6\xfa\x6a\xe3\x2b\x95\xc2\x73\x3d\x5a\x2e\xac\xf7\x54\x9c\x27\xdd\x20\xcd\x8f\x9a\x2e\x83\xf1\x2d\xc2\x44\x83\x15\x90\xe4\x91\x8b\xef\x9e\x25\x66\x24\x60\xe2\x33\x65\x24\xd7\x16\x87\xdb\x8a\x5a\xed\x2f\x8c\xd1\x77\x96\xe8\x23\xdc\xf5\x64\x3a\x70\x93\xd4\xaf\x1e\x0c\xa2\xea\xea\x42\x1a\xc5\xcc\x7a\x59\xa9\x8f\x2d\x31\x71\xe3\x42\xdb\x9b\xba\xa9\xd5\xb9\x97\x14\x3d\x62\x8c\x2a\xb4\x27\x6e\x5c\xb0\xa7\xfc\x64\x55\x0f\x5a\x75\xdb\x4e\x9d\xae\x0c\x13\x1f\x49\xd0\x62\x2a\x8e\x48\xd2\x35\x1d\x2a\xa4\x5a\x76\x8e\x3f\xe5\xa4\xff\xee\x7a\xc2\xb0\xf7\x4b\xbc\xf7\xfc\x36\xa3\xaf\x20\x74\xd8\x7d\x6a\x33\x66\xbc\xd3\xd6\x0b\xfb\x01\x59\x4c\xc8\xc7\x8d\xd9\x59\x54\x97\xf3\x33\xc2\xaf\x63\xd5\x0c\xb8\x8b\x51\xe2\x5a\x16\x73\x18\xf4\x12\x6c\x19\x99\x78\x5c\x0e\x99\xbe\x5a\x76\xef\x90\x1f\x30\xeb\x25\x7d\x77\x8f\x3f\x6e\x74\xef\x46\x75\xb9\xb0\x7b\x70\x43\x22\x37\x06\xea\xe1\xf3\x09\xdd\x5e\x65\x8d\x95\x5a\x62\x3d\xb3\x1f\x4f\xf1\x24\x6b\xac\x1c\x32\x6c\xf8\xce\xe3\xf1\x9a\xb9\x3f\xf8\x35\xfb\xd0\x42\x41\x67\x80\xa0\x92\x15\x37\x16\x70\x02\x6f\x24\xb1\x03\xbf\xc6\xb8\xfe\x4b\xbf\xc9\xbb\xe3\x87\x1e\x8b\xad\x7b\xfb\xea\x0e\x3c\x6b\x74\xe7\x24\xc1\x8b\x66\x7f\xb0\x51\x55\xbe\x44\x12\xb3\x2b\x27\x05\x2d\x59\x82\xac\x73\x54\x5d\x40\xb8\x31\x0b\x98\x9b\xb0\x44\xc6\x1b\x5f\x37\x3d\x31\x35\x2e\xa2\x31\x92\x71\x48\xa9\x3b\x86\x9f\x1c\x6b\x78\xe3\xf3\xd3\x13\x53\x47\xa6\x2b\x75\x8f\xde\x4e\xe8\x30\x7a\x8c\x8f\xb8\x0d\xeb\x69\x7d\xd0\xc3\xa4\x7c\xda\x18\xe4\x84\xba\x9c\x1b\xa6\xba\x2c\xa6\x19\xd4\x59\xad\x48\xab\x9f\x88\x39\xa0\xaf\x22\xf4\x1c\x2f\x5a\x0f\xd7\xdd\xd8\x9b\x98\x9b\xe1\x9b\xe7\xb2\x9e\xbd\x99\xca\x5e\x30\xfa\x33\xaf\xdd\xd0\x7b\x24\x3f\x00\xa2\xc3\x5d\x92\xd5\xd9\x14\xaf\xec\xd6\xc1\xaf\x12\xba\x13\xd4\xa6\x29\x3f\xb6\x3e\xdb\x8f\x8b\x62\x5a\x3c\x6d\x74\xed\x45\x44\x5e\x36\xa7\x2a\x65\xf5\x46\x04\x65\xb5\x3d\x51\x17\xa8\xd5\x95\x36\x4f\x99\x81\xc1\x58\x3c\x3f\xa6\xf7\x10\x5a\xaa\x55\xad\xd7\x91\x3e\x40\x08\x87\x26\x8d\xc1\x34\x0e\x4d\x9a\xa3\x38\xe4\x2f\xc5\xcc\x9e\x5c\x71\xc3\x90\x05\x67\x80\x6b\xd3\xb7\x10\x4a\x6b\x01\x3b\x21\xe4\xe1\x2b\x09\xdd\xdb\xbb\xd3\xea\x79\xd1\xed\x95\xec\x8a\xd9\xfd\x65\x16\x42\x51\xf5\x9c\x87\x4f\xf5\x1f\xd4\x5b\xcc\x69\x31\xae\xc6\x82\xc6\x22\x00\x0a\xb1\xaa\x30\x43\x63\xd6\x93\x0a\xfd\x0c\xa1\x3b\x6a\x5c\x3e\xb0\xd8\xfa\x10\xa1\xfb\xfb\xe8\x2b\x3c\x6c\x74\xf7\x56\x22\xae\xe6\xe6\x5a\x5c\xcc\x33\x91\x2e\x73\x2b\x14\x6d\x2d\x96\x80\x4f\xac\x6c\x48\x54\x43\x51\x60\x54\xa1\xa6\x60\xea\x3a\xfa\xfa\x12\x7d\xd8\x72\x95\x65\x60\x10\x94\x71\x25\x7a\x75\xcf\x41\x5d\x3b\x39\x6d\xbe\x66\x0c\xef\x73\xa4\xed\xbe\x39\xd0\x6b\x27\xa7\xcf\x56\x2d\x60\xb9\xca\x32\xc7\xb0\xe7\x27\xab\xf4\xb3\x25\xba\x63\xd9\x4f\xe7\x59\x23\xb2\x3e\x5c\xea\x63\xc5\xaf\xc5\x87\x8d\x29\xb9\xad\x24\xae\xe6\xc8\xd3\x87\x4c\x1d\x51\xe2\x03\x7b\x40\xab\x51\x66\x14\x8a\x19\x12\x67\xc5\x9e\x9a\x9e\x9b\x9f\x9e\x9c\x58\x9c\x9e\x3a\x60\xcb\x96\x70\xdd\x63\x56\x15\x61\x1d\x51\x46\xcd\x7a\xf9\x20\x91\x06\x49\x7d\x6b\x54\xc8\x4c\x37\xb4\x15\xe3\xc2\x2a\x71\xa1\x3d\x13\xfa\xe9\xa4\x7a\x11\xd3\xe9\x06\x91\x4c\xff\xc2\xdf\x16\x9b\x63\xd9\x47\x9c\x73\x28\x45\xfe\x0a\xcb\xb5\x96\x79\x08\x33\xcf\x06\xfd\x6b\x42\x87\x97\x11\x2e\x57\x4b\xac\xaf\xf5\xa3\xaf\x5c\x2b\x1f\x37\xe6\xf3\x95\x44\x5d\xcf\x91\x96\xba\x3c\x98\x66\x50\x48\x38\xdd\xa5\xb0\x20\x99\x71\x35\x20\x4d\x0e\xff\x66\x99\xee\xe4\xdf\x9c\x73\xd3\x15\xeb\xb9\xe5\x3e\x64\xcb\x75\xe2\x69\x63\x98\x5f\x28\xc9\xcb\xf9\xa4\x60\xc2\xc5\x08\xb5\xe3\xb9\x72\x16\xc5\x9a\x98\xd1\x07\x2d\x37\x8d\xdc\x61\xaa\x54\x52\x6e\xf3\x68\xfe\x27\x79\x76\x07\xe6\x09\x51\x76\x10\x02\x0f\x81\x00\x08\x6e\x70\x97\xd1\x64\x20\x12\x7d\xe9\xd5\x7a\xd2\x15\x3f\x5c\xd6\x62\x4a\xb4\x1c\x9a\x09\x63\x6d\xfd\xe2\xf3\x9e\xa4\x7a\x8d\x1f\x30\xe7\xcd\x1e\x5d\xb4\x43\x86\xcd\x0d\x5e\x56\x39\xbf\xa9\xf9\x07\x1b\x6e\xba\x42\xff\x9d\xd0\x6d\x7e\x52\x4d\x7c\xeb\x7b\x84\x5e\xd4\x73\x4d\x66\x16\x26\x17\x4c\x3d\xe4\x03\x04\xae\xe5\x94\x64\xbc\xf6\x53\xe4\x68\xfd\x11\x26\x8c\x54\x23\xca\xb7\xc9\xd2\xa3\x6f\x20\xce\x6f\x13\x1c\x97\xf0\xe0\xeb\x20\x16\x95\x9c\x45\x54\xc0\xd3\xf1\x08\x9b\x65\xb3\x9b\x2b\x52\xfa\x49\x42\xcb\x61\x2d\xe9\x0f\x12\x37\x9b\x3b\x36\x3c\x97\xcc\xe6\x0e\x0d\xa1\x3d\x3b\xf0\x89\xe1\x54\x49\x2f\xac\x25\xf4\x2d\x25\xfa\xc8\x46\x0e\x72\x39\x19\xb8\x7e\xdd\xba\xb3\x44\x0f\xf6\x1c\x58\x1e\xad\x09\xaf\xe6\x04\x6e\xcf\x67\x4c\xfe\xa1\xc5\x4e\x73\xaa\x2c\x7c\xbb\x38\x6b\xf5\xa6\xf7\x62\x36\x01\x63\x72\x6e\xb2\x4b\x78\xa5\xca\x3f\x9b\xd0\x3f\x22\xf4\x11\x8d\x95\x28\x8d\xc2\x9c\x6a\xf2\x1e\xd2\x87\x9d\x62\xae\xe0\x4d\x53\xc5\x2d\x7a\xc2\x9c\x1e\x7c\x62\x12\xb5\xa7\x80\xf3\xb7\x0c\x2b\xc6\x75\x82\xc1\xce\x77\xf4\x0d\x84\x9e\xd7\x88\xe2\x74\x3d\x8a\xa5\x9a\x7b\x67\x3f\xc7\x8d\x39\xe3\x1d\xd1\xfd\x9b\xcc\xab\x39\xb9\x20\xee\x6d\xea\x1c\x4a\xef\x20\x50\x0e\x0d\xd3\x4d\x5a\x4f\xef\x43\x38\xcf\xc9\xa7\x8d\x2e\x4e\x61\xa1\x7c\xc8\xd5\x1f\x04\x9c\x8e\xa2\x30\xd3\xbd\x13\x99\x5e\x79\x54\x9c\x26\xeb\x6e\x43\x24\xff\xd7\x4f\x73\xf4\x45\x84\xee\xb8\xa5\x19\x2d\xb5\x52\x66\xdd\xda\x8f\xa6\xfd\x04\x7c\xd8\xe8\xca\xf5\xe2\xa2\x39\x4d\xf2\xe2\x80\xc6\x83\xfb\x08\x2d\xc7\x4b\x9e\xf5\xc5\x7e\xd8\xd1\xfc\xc1\xa9\x9c\xd9\x60\xfe\xe0\x94\xd9\x8d\x79\xd7\x8b\x12\x1b\x6c\x65\xf6\x14\xeb\x60\x5b\x39\x43\x4a\x4b\xbc\xa4\x9b\x0d\x5e\x41\xe8\x8e\xa4\xea\x06\x6c\xe6\xa8\xf5\xe2\x7e\xe6\x7a\x01\x1f\x36\x46\xf8\xcb\xe2\x62\xae\x9e\xb3\xb8\xd8\x0e\xb7\xec\x44\x9c\x3a\x50\x2c\xf2\x58\x52\xa1\x9f\x22\x74\x3b\x12\x8d\xf5\x81\x7e\xac\x36\xed\xc5\x91\x9d\x67\x09\x20\xa1\xd9\x39\x09\x22\xec\x61\x2a\x38\x4d\x05\x45\xe9\xcb\x09\x1d\x16\xb7\xa2\xc4\xba\xa3\xaf\x90\xad\x22\x58\xab\xf3\x84\x0c\x52\x16\x17\xa3\x5b\x07\x9e\xe3\xb7\x10\xfa\x90\xb5\xa4\xb1\xc2\xa4\x59\xd7\x3a\x49\xe8\x35\x3d\xfb\x77\x83\x78\x05\x63\x89\xda\x98\xed\x8d\x37\xe8\x4d\x9a\x9d\x5d\x5b\x80\x5b\x9b\xe3\x55\x9f\x2b\xd1\x5f\xec\x68\x55\xc7\xcd\x64\xbd\xb1\xe4\x3c\x7e\x4d\xbb\xa0\xa3\xcc\xec\xba\xdb\x68\x88\x62\x54\xae\x1d\xbb\xeb\x36\x58\x7d\x6d\x8f\x89\x1c\x3d\x02\x7e\x99\xa9\xc5\x0a\x52\x47\xf1\x99\x39\x48\x6a\xfb\x09\x42\x03\xaa\x5d\xb1\x9e\xec\x3c\x21\xfb\x65\xe4\x03\x15\xae\x99\xb6\x32\x6f\xca\xe1\xa9\xbe\x8d\xfe\x6c\xde\x43\x50\x05\x0d\xb7\xc6\x82\xd0\xe1\xae\x77\xae\xce\x4a\x87\x67\x1e\xcd\x30\x83\xf6\x75\x13\xea\x50\x41\x21\x6b\xf4\x27\xdb\x0a\x73\x3f\x69\xf8\x5e\xeb\x4f\xb7\x39\x8f\xd3\x7e\x9b\x73\xc9\xaf\xa8\xc9\xbc\xc1\xc0\x95\x16\x4e\xe1\x30\xbc\x81\x33\x78\xeb\x36\x7a\x0b\xcd\x2e\x58\x9e\x73\x23\x4c\x9d\xa6\x71\x66\x73\x65\x80\x9d\x64\xed\x64\xe5\x53\x57\xe5\x3e\x50\x9b\xd5\xcb\x20\x8f\x1c\x18\x31\x51\xe4\x84\x9e\x8f\xdf\x14\x91\xc9\x7e\x14\x5a\xff\x87\x38\xef\x22\xf9\xab\xf9\x20\x46\xb8\x2f\xeb\xf0\x8a\xa8\x66\x2f\x4b\xa6\x89\x4c\x3b\xd2\xfb\x2c\xe2\xe9\xf0\xa8\xb4\xee\xb6\x6c\x37\x8e\x9a\xa1\x27\x80\x40\x0a\x17\x71\x24\xf7\xe1\x59\x11\xdf\x84\x78\x5a\x33\xdb\xd8\x12\x4b\x5d\xbe\x96\x7b\x2b\x7b\xf7\x18\xe3\x3a\x20\xc8\xe3\x22\xe7\x31\x59\xce\xc5\x8c\x3c\x32\xe4\x27\xae\x92\xf1\x6e\xaa\xc1\xc5\x57\x9c\x27\x1e\x11\x7b\x30\x2b\xef\xe9\xcb\x4a\x92\x70\x09\x60\xe3\x1a\x80\x61\x17\x62\xca\xa1\x78\xb5\x72\xf6\xed\xee\x59\x84\xf5\x56\x2e\x7b\x9a\x4b\xb0\xf6\x27\x9c\xd5\xfc\xda\x8b\x45\x86\xf9\xcd\x96\x5e\xcd\xee\x48\xd2\x85\x0c\xf4\x2f\x3b\x8e\xbd\x6b\x4d\x1e\x79\xa0\x62\xa5\x31\xf6\xe7\x94\x0a\x4b\x0f\x08\x7c\x71\xe4\x31\x15\x97\xfc\xa7\xc4\x79\x72\xfb\x65\x85\xca\xc5\xa8\x4c\x04\xf9\xc0\xce\x0e\xfc\xba\xcf\xa9\xd6\x4d\x45\x56\x28\x4d\xb0\xa8\x62\x45\xd2\x97\xc7\x87\x59\xd9\x20\x2d\xba\xce\xd7\x02\xbd\x9a\xd6\x6a\x1f\x55\x80\x75\x0f\xbc\x73\x40\x02\xf8\x34\xf8\xf7\x0a\xd7\xab\x00\xed\xd9\xd6\x43\xe9\x8a\xad\xb3\xb4\x42\xff\x7e\x88\x5e\xd0\x71\x22\xb4\x3c\xe6\x1f\x1f\x72\xae\xd3\x72\x96\xeb\x9e\xc9\x2c\x65\xb9\x1b\x44\x90\x48\x49\xd5\xaf\xcf\x02\x22\xc4\x04\x80\x37\x77\x83\xfc\xa0\x4c\x53\xdd\x73\xb1\xdc\x87\x0e\xa2\x5c\x14\x59\x37\x9c\x71\xdd\x73\x9e\xf9\x03\x32\xb7\x05\x94\xc8\xcc\x32\x2e\xd3\xa7\x9a\x4e\x8a\xd5\x3e\x44\xb2\xe6\x8a\xd0\xbe\xbc\xb7\xf8\xcb\x5a\xe3\x6d\xdf\x5e\x55\x5a\x8d\xdb\x87\xd1\x1b\xf5\x17\xed\x8b\xa3\xc5\x5f\x14\x3a\x4d\xfe\x63\x77\x12\xfa\xf0\xa4\xa0\x44\xd3\xd3\xfa\x30\xf7\x76\x4d\x57\xef\x5c\xde\xa9\x1f\xed\xd5\x9e\xf2\x9d\xfa\xcc\x10\xdd\x3b\xb0\x52\x61\xdd\x39\xe4\x3c\x66\xbe\x8b\x26\xa1\xe2\x78\x4e\x12\x11\xb2\x81\x92\xe6\xeb\xe5\xff\x1e\x41\x3d\x0f\x15\x3a\x24\x26\x3e\x9a\x99\xb2\xb8\xee\x8d\x97\x6c\x91\x0c\xe9\x20\x38\x2d\x8e\x40\xca\x38\xc0\x77\xed\x5a\x98\x3b\x78\x64\x37\x9f\x78\x30\x17\xce\x4c\x15\x67\x09\xd1\x1b\x6e\xcb\x42\x76\x03\x7d\x58\x92\x7f\xc0\x9a\x70\xf6\x0f\xf8\xed\x30\xdf\xee\x24\xd5\x96\xc9\xba\xd8\xd9\x05\x32\x00\x0d\x68\x32\x87\x7e\x92\x5f\xe4\xb5\xba\xb7\x6a\xc0\x8d\xcb\xf4\xc2\x02\x52\xba\x91\x41\xe8\x88\x37\x17\x79\x92\x55\x03\xfe\xea\xee\xb2\xb3\xb6\xb8\xc2\xec\x75\xb8\x8f\x78\xcc\x20\x90\xca\x19\x02\xa6\x3c\xbb\xc3\xdb\x7a\x2d\x7e\xc0\x59\x73\x65\x6b\x0c\xa1\xf4\x91\x5d\xf3\x85\xc0\xaf\x73\xba\x68\x80\xad\x25\x16\x39\xb1\x76\x25\xbb\x4f\x92\xed\xf8\xd1\x93\xe4\xa1\x0d\xb3\xdd\x0d\xf2\x1b\x25\x7e\xee\xcd\x5f\xb7\x7e\xb5\x8f\x03\x67\xae\x8f\xce\x75\x19\x8a\x7b\x02\x1c\xa2\x32\x3e\x18\x30\x61\xa3\x85\xeb\x6f\xc2\xbb\xb1\x9b\x15\xda\xa4\xa2\xc7\xd6\xaa\x4c\x55\x76\x03\x5e\x68\x6b\x44\xcb\x95\x92\x6f\x2d\x37\xa6\xd1\x5c\x5c\xc3\xd8\xde\x3d\x7b\x4c\x4c\xe6\x4b\x4b\x54\x1f\x27\x3b\x91\xb2\x10\x70\x60\x95\xb5\xbd\x5c\xff\xd9\x5b\x99\x40\xdb\x72\xe6\xfc\xb3\xfe\x82\x38\x2f\x20\x6d\x97\x73\x87\x3e\x3f\x5c\x0e\x98\xcd\x6f\x4b\x21\x24\x6d\xb5\x6d\xf5\x9e\xb8\x0e\x21\x5d\x2c\x07\x20\xd2\xac\xbd\x71\x50\x4d\x1a\x48\xfb\x9c\xcd\x0b\x58\x52\x98\xa4\xcc\xf5\x2a\x27\xc9\x76\x2f\xf6\xd7\x58\xbc\x01\xd8\x33\xf1\xc3\xba\xdc\x19\xc5\xbf\xf2\x98\x22\xf4\xdf\xa9\xae\xe1\x43\xc6\x76\xf9\xf0\x36\x3a\xd6\xd7\xbc\x48\xdf\x81\x75\xc7\x36\xe7\x8f\x48\xee\xa2\x91\xd8\x1f\x38\x98\x54\x49\xf8\x7a\x61\xb0\xb9\x99\x15\x19\x6b\xc6\x03\xdc\x48\x0e\x17\x12\xf2\x40\x70\x06\x84\xe1\x01\x62\xd0\xa8\x44\x0f\x07\x1f\xbe\x05\xfc\x13\x62\x56\x45\x76\xed\x8e\x13\xab\xfa\xd7\x7d\x5a\x37\xc8\x7b\xcb\x50\xba\x80\x7f\x61\x0e\x3e\x80\xa5\x0b\xb2\xdf\xc6\xe1\x4b\xf6\x41\x9e\xb5\xf4\x11\x67\x3a\x32\x0c\xa0\x2d\xa5\xd7\xf1\x0b\x8f\x57\xec\xc5\xd8\xf5\xa1\x46\x5f\x12\xb8\xc9\x8a\x80\xe9\xa7\x31\x00\x8c\x31\xcd\x93\xac\x5c\x2e\xa8\x5f\xff\xac\x70\xc1\xc1\x47\xf9\xf5\x0a\xa5\xd3\xc2\x22\x73\xc0\x3e\x3e\x5e\x8b\xa2\xe3\xf6\x3a\xa8\xaf\x40\x82\xe2\xd2\x28\xfe\x3f\x7e\x1c\x8e\x10\xf8\xf7\x92\x1b\x1f\x37\xdf\xe0\x3d\xd5\xde\xf2\x8e\x73\x0d\xfc\xf8\x38\x4b\xab\xf0\x94\x4e\x39\xb7\x12\x4d\xc3\x5f\x77\xfc\xf6\xec\x54\xaa\xca\xf5\xba\x3e\x43\x89\xb9\xaf\xb5\x29\x96\xc7\x02\x80\xf1\x8b\xd9\xcc\xce\x47\xf2\x5b\xa6\xc2\xff\xd7\xe7\x1a\x30\xd9\x02\xfa\x9d\x72\x59\x3d\x0a\x17\x58\x6a\x7d\xe0\x5c\xe7\xfd\x24\x73\x7e\xda\x63\x78\x0e\x42\x58\xa2\xc8\x7f\xcf\x77\x8d\x7a\xc3\xf4\x8a\x02\xb1\x36\x1a\xc9\x38\xb6\x7c\xd1\xb8\x7a\xae\x62\x2f\x08\x6f\x94\xb0\x97\xd9\x98\x2c\x93\x53\x74\x5d\x1a\x7b\x84\x52\x53\xd1\x9a\xef\x96\x1c\x02\x0f\x56\x1e\x3c\xcb\xa7\xb5\xb2\x41\x5e\x4e\xb7\xea\x6b\x6c\x15\x95\xde\x2a\xc9\xd8\xb1\x24\xe3\x17\x64\x51\xe9\x4f\x12\x7a\x79\x47\x1d\xa7\x1b\x8f\x80\x0a\xd3\xcf\x21\x98\xd7\x2e\x81\x53\xaf\x5e\x5d\x1a\x16\x58\xdb\x93\x67\xb6\xfc\x32\xa7\x5e\x59\x6e\xfa\x95\xa5\xce\xa5\x49\xba\x8f\x08\x33\xe4\x7c\x13\xc6\x54\x94\x0c\x27\x37\x22\x84\x00\xf1\xa3\x95\x38\x80\xf3\x23\x58\x54\xe3\x97\x20\x81\x79\x12\x81\x39\x2e\xf4\xa2\x75\x19\x08\x74\x56\x54\xaa\x7e\x72\xef\x3a\x28\x57\x58\x97\xab\x3a\x28\xd9\x94\xa9\x7a\x28\x6a\xca\xcc\x6a\x28\x30\x9f\x94\x7e\x7e\xc8\xa8\xcf\xd6\x6d\xca\x27\xa5\xd2\x63\xfd\xf6\x90\x33\xd3\x7e\x39\x97\xea\x3e\x81\x3a\x55\xc0\xee\x33\xd1\x00\xe8\x9d\x2a\x8b\xc1\xde\x08\x6c\xa4\x72\x92\x40\x46\xb4\x93\x44\xd0\xc4\x06\x79\x5f\x99\xbe\x84\x50\x2b\x70\x93\x74\x31\x76\xc3\x04\x5a\x5f\xf4\xeb\xcc\x7a\xda\xe6\x23\x44\x1f\x77\xd8\x4d\xd2\x2c\xc0\x4b\x69\x70\x76\xaa\x3e\x21\x4d\x94\x51\xc8\x24\x29\x65\x99\x8d\x2b\xf4\x26\xba\xa3\xce\x92\xc4\x5d\x66\xd6\xac\x33\x31\x81\x99\x0c\x6c\x95\xc9\x40\xdc\x93\x31\x90\x9c\xe9\x7a\x2c\x75\xfd\x20\xd1\x0e\xfc\xd9\xc7\x0c\x75\xf5\x10\xdd\x1e\x33\x37\x89\x42\xeb\x4a\x67\x1c\xa3\x4e\xf8\x2f\x15\x54\xa0\x7a\x3b\x92\xd8\x01\x8c\xa3\xb8\x9d\xc3\x6a\x63\x1d\x74\x2e\x5e\x30\x52\x43\xa9\x26\x46\x61\x7c\x51\xcd\x5e\x04\x6d\xe6\x90\x1b\x24\x6c\xd4\x3e\x16\xae\x86\xd1\xba\xd9\xda\x5e\x91\xab\x6e\xb7\xf3\xf3\xb2\x3e\x49\xb6\x92\xaa\x3d\xe3\x95\x2f\xef\xa4\x8f\xed\x93\x9c\xa0\x1c\xd7\x6b\x76\x3a\x63\xc6\x15\x94\x63\xd5\x28\x08\x98\x4a\xda\x96\xed\x63\xbd\x2c\xd7\x33\xb7\x4a\x93\x0e\xaa\x36\x2c\xcb\xb2\x5c\x4f\x76\x1e\x95\xc5\x08\xe9\xd3\xdb\x7f\xc9\xe8\x6e\x4b\xbb\xa5\x9f\xf4\xaf\x9f\x7c\x40\xd7\x4f\xde\x7a\x8a\x95\xba\xc2\x9f\x4e\xa5\x2e\xd9\xee\x03\x64\xa9\xb7\x78\xba\xc6\xba\xaa\x2f\xf1\xd4\x5e\xb0\x4b\x88\xa8\x9f\x9c\xdb\x37\x4f\x81\x0a\x2c\x5f\x3c\xd7\xd9\x67\x5c\x91\x87\x5c\x61\x2b\xac\x16\x1f\x44\x4e\x92\x9d\x29\xab\x37\xf8\x0e\xde\x20\x77\x9c\x4b\xef\x2c\xd1\x87\xd6\xfd\x10\x92\x0a\xcb\xb0\xe2\xff\x24\xd2\xb8\xf3\xb7\xa0\x78\xd4\xfd\xd0\xaf\x37\xeb\x76\x28\x92\x58\xd4\x44\x56\x7c\xbd\xcc\x85\x6b\x87\x6c\x3d\x68\xa9\x2c\xe8\x19\x0b\x6d\x44\x7a\x91\x1b\x2e\x48\x5a\x2a\xc3\x2f\xc4\x75\x61\xcd\xc6\xcc\x4b\x56\x8d\x5d\x48\x76\x38\x2a\xb2\x02\x0b\x73\x41\x35\x02\xaf\x29\xd7\xea\xdc\x35\xd7\x0f\xb8\x38\x32\x1d\x3b\x7b\xec\x5d\xfc\x63\x2a\xb5\x4a\xc1\x0b\xb6\x9b\xd8\x49\x14\x41\x09\x08\x0c\x46\x86\x0e\xed\x36\xed\x4d\x1f\x25\xf4\x11\x12\x71\x7b\x9d\x9f\xa4\x51\xdc\x3a\xec\xd7\xfd\xd4\xfa\x5d\x35\x33\x2f\xc6\x92\x67\x6a\x46\xa2\xc0\xb3\x57\xf0\x51\x28\xa7\xc0\x40\xf6\x73\xc1\x0a\x47\xe8\x38\x0a\x82\x25\xb7\xba\xaa\x85\x43\xa2\x62\x80\xa9\x5a\xb0\x42\xff\x72\xd3\x4f\x56\xec\x25\x96\xae\x33\x04\x00\x82\x65\xd8\x7e\xaa\x0a\x77\xd6\x43\xe9\xcc\xa1\xef\xcd\x59\xcc\x3e\x5d\xd2\x92\x1e\x7f\xa0\x44\x1f\xb7\x99\xfd\xe6\x2e\xb1\x40\x79\x92\xfe\x95\x4c\x68\x31\xa7\x2d\xc8\xaa\xa3\xa5\xe3\xe0\x87\x7c\xad\x2e\x09\x38\x3c\x74\x55\x3b\x73\x3e\xfa\xa1\x1d\xc5\x9e\x4a\x51\x53\x95\xd8\x2a\x2f\xcb\xa3\xac\xd2\xb3\xa0\x05\x0e\x83\x37\xed\x28\xb4\xe7\x22\xcf\x96\xe4\x7b\x9a\x91\x87\xf8\x91\xf1\x0b\xe0\xff\x31\x39\x77\x09\xbd\xad\x4c\xd5\x8e\xb1\x7e\x54\xea\xcf\xfc\xba\x28\x5e\x80\x13\xc9\xc7\x4b\x13\x52\xd6\x8a\xd4\x25\x86\x06\xa9\x22\x54\xf2\x29\x81\x20\x30\x37\xdb\x47\x70\x1b\xef\xd9\xec\x84\x0b\xc8\x5d\xae\xe3\x54\xa3\x46\x4b\x2b\xbb\xe7\xe5\x52\xa6\xb6\xa7\xc6\x10\x7d\x1b\x41\xc0\x47\x16\x33\xbb\x8b\x1f\x93\x8c\x77\x7d\xcc\xfe\x64\x3c\xa5\x67\x80\xda\x3d\xf0\x1a\xf0\xa9\x0f\x22\xd7\x4b\xc6\xd5\xba\xc7\xc9\x78\xcc\x54\xa2\xfb\xec\xf2\x05\x8d\xc8\x1b\x93\x9d\xe5\x5b\xd2\x92\x3f\xae\x05\x34\x32\xe8\xe8\xbf\x47\x64\x06\x84\x3b\x35\xe3\x50\xc5\x9e\xb0\x13\x2e\x04\xc3\xaa\xda\xa3\x86\x1c\x76\x15\x97\x14\xd0\x66\xbd\x3a\x53\x46\x60\x1d\x4f\x46\x33\xa9\xaa\x9b\xc4\x52\x34\x7d\x79\xb2\xbc\x4e\x56\x3a\xcf\xdc\x92\xaf\x22\xf4\x3c\x14\xc1\x0b\x32\xb3\xfc\x1d\x84\x4e\x6e\x4a\xf5\x38\x66\xb4\xe3\x4c\x4d\x84\x42\xba\xdb\x32\x6b\x3d\x32\xa1\x46\xe0\x56\x39\xb5\x08\x7c\xb8\xc1\x94\x45\xa6\xf3\x90\xad\xc3\xaf\x0a\xfd\xcf\xf3\x7b\x59\x93\x73\xe7\x52\xeb\xf3\xe7\x3b\x57\xe7\xae\xf5\x93\x46\xd6\x10\x47\x8f\x12\x4f\x60\xaa\x23\x99\xd9\xc4\x3b\x49\x2c\x5c\xb8\x23\x7e\x92\x64\x17\x1f\x25\x0e\xf6\x6d\x4f\x9f\x83\x4f\x83\x1c\xdb\x20\xbf\xff\x50\xfa\x57\x84\x9e\xc7\x15\x6c\x60\xe2\x93\x00\x5c\xf9\xb2\xe2\xde\x1f\x24\x93\x08\xaf\xab\xd9\x2b\x6e\xb2\x62\xab\x07\xb3\x24\xfa\x9a\x7d\xd0\xdc\x87\x19\x85\xda\xcd\x44\x3a\xf1\x11\x8e\xe1\x4a\xad\x5e\x84\x5e\xac\x45\xbe\xe7\x72\x1a\xac\xb3\xea\x8a\x1b\xfa\x49\x1d\xed\xc3\x7e\x0a\x90\x76\xe0\xdc\x62\x47\x2b\xc3\xbf\xfc\x7e\xc8\xd6\xb9\x8e\x9d\x41\x4f\xe7\x65\x08\x88\x41\x55\xcf\x28\x51\x9a\xd9\xe9\xad\xef\x11\xe7\xf0\xbc\xb9\x02\x42\x59\xcf\x44\x60\xb4\x94\xb0\x78\x2d\xcb\x22\xab\x9d\x5c\x47\x12\x63\xc1\x98\xa1\x29\x1f\xa4\x8f\xeb\xe2\x21\xee\xeb\x4c\xdd\x57\x55\x06\xae\x42\x0e\x52\x95\xe1\x2f\x09\xed\x40\x44\xd6\x67\xd4\x8a\xbf\x2b\x27\xaf\x25\x00\x43\x88\x2e\x11\x09\xa5\x95\x79\x96\x54\x0a\xfe\xb2\xd0\x83\xa7\xc0\x0d\x20\x40\xf9\x71\x33\xd4\xa5\xdc\x66\xa0\xf0\xc5\xcc\x10\x1b\x4c\x58\x3a\x6e\x2c\xf4\x0f\x08\xed\x40\xfc\xd6\xfd\x6a\x94\x9f\x80\x51\xa6\x51\xea\x06\xc5\x63\xd5\x14\x31\x31\x62\x73\x0c\xf6\x2e\x3f\xac\x06\x4d\x70\xd3\xe1\x6b\xe0\xba\x03\x61\x53\xfc\xc6\xe9\x92\x01\x1d\x86\xbd\x41\xe8\x43\x71\x24\x13\x92\x80\xad\xf7\xaa\xf1\xde\xdd\x79\x55\x7b\x8e\x94\x2f\x2a\x54\x61\x00\x43\x81\xb0\xf5\x0b\x11\xa0\x3d\xa6\x28\x23\xd4\xd5\xc8\x5d\xa8\xc7\x02\xb0\x59\x92\x0c\x17\x29\x95\x9c\x2e\xbd\xdb\x18\xcc\x37\x09\x2d\xe0\x6a\xd6\x1f\xaa\xf1\xbc\xa3\x3f\x2a\x35\xbb\x88\x85\xa8\x64\xb6\xc2\x9f\x25\x8d\xbe\x8c\x50\x9d\x0f\x5b\xb7\xab\x81\x25\x3f\xd5\x75\x82\xc5\x31\xf9\xe4\xa7\x08\x7d\x18\x7e\xff\x58\xa8\x96\xd1\x7a\xbb\xea\xe0\xcb\x4f\x07\x25\x85\xc2\xe6\x74\x06\x49\x28\xa0\x16\xf2\x6f\xe6\x69\x6a\xd0\x0d\x52\x0b\x9a\x58\x94\x68\x83\x98\x41\x45\x7c\x5d\xbd\x11\xef\xb5\xeb\xe7\x9a\x4c\xab\xe4\xbe\xf6\x28\x61\x35\xc8\xf3\x9c\x79\x39\x71\x57\xf5\xe0\x38\x3a\xdd\x8a\xb6\xb4\xb9\x31\xf7\x7a\x89\x5e\xbc\x29\x05\xc8\x7a\x71\x69\x83\x3c\xbf\x44\x5f\x49\xe8\x43\xf8\x30\xfc\x70\x19\x1f\xe0\x1a\x56\xe7\xb0\x9a\x82\x0f\xcc\xeb\x6f\xab\xaf\x39\xd3\xe2\xba\xd4\xb2\xd0\xd9\x87\xe9\x36\x93\x8a\x3d\x87\xf2\x56\xf9\x40\x01\x1c\x74\x95\xed\x18\xad\x39\x15\xfa\x14\x61\x6a\x5c\x72\x8e\x49\x53\xa3\xb6\x08\xd8\x36\x58\x6c\x00\xff\x63\xbe\xcd\x49\xdf\x39\x1a\x4e\xb1\x80\xf1\xb6\xf4\x22\xc1\xf2\xaa\x61\xa3\x7c\x39\x35\x92\x23\x17\x4d\x26\x6b\x04\x51\x0b\xf2\x42\x7d\x77\xd8\xf9\x64\x5f\xce\x55\xf5\x4a\x2f\xef\xaa\x7a\x70\x40\xf7\x6a\xf6\x01\x44\x19\xf0\xaf\x54\x03\x37\xc6\x3c\x5f\xa2\xfe\x29\xbc\x0c\xa5\x82\xf8\x96\x9a\xc7\xd3\xc3\x02\x4b\x93\xca\x06\xf9\xe8\x96\xc1\x74\xcb\xcf\x7a\xc6\xec\x98\x35\xcd\x8c\xf9\xc4\x53\xf5\xb2\xfe\x5c\xce\xcb\x9a\x59\x32\xe9\xd3\x85\x2f\x74\x8d\x1e\x18\x48\xe3\x56\xdb\x07\x2c\x0f\x97\x2d\xe4\x6d\x81\x69\x47\xdf\x28\xd3\xf6\x5e\x85\x3e\x55\xb9\x58\x1a\xf4\xca\x4d\xf6\x00\x7d\x97\x7b\x8e\x64\xd2\x28\x68\x65\x42\xc8\x2c\xe9\xa1\x7d\xfb\x01\x72\x73\x6f\x73\xeb\x95\xd6\x81\xae\xe6\x56\xd5\x5c\xa1\xad\xf5\x33\xdb\x0c\xb0\x69\xd7\x61\x64\xfe\xc0\x3b\xb7\x39\xd7\x17\x5c\xef\xec\x10\xf4\x32\x66\xd6\x97\x47\xf0\x9d\x43\x67\xa5\x47\x70\x8d\x9e\xc7\xbb\x84\x72\x08\xba\xe3\x6d\xbe\x3b\xbb\x31\xc5\x5f\xd6\x25\x48\x0a\x2a\xfb\xb4\xee\x26\x6a\x7b\x3f\xf8\x3c\x91\x17\x09\xf5\xe0\x42\xe7\x17\x94\x7a\x90\x91\x50\xb1\x2b\xf2\x99\x3b\x8d\xf4\x73\x5d\x49\x19\x7c\x91\x5f\xda\xe1\xec\x32\x2f\x99\x65\xac\xb3\x7b\xba\x1b\xf2\xdd\xdb\xb7\xa4\xea\x80\x52\x35\x91\x6e\xc8\xa7\x38\xbf\x84\x61\xb0\xc2\x41\x53\x34\xd3\xba\x9d\xe5\x00\xbd\xac\x4b\xec\x41\xd7\x15\xde\x12\xe5\xfd\x8b\xf2\x25\x4d\x94\xdf\x70\x6a\x0e\xc9\xff\xd1\xc1\x21\xf9\x00\xa9\xf6\x16\x65\x8f\xb3\xae\xee\x4f\x94\x75\x74\x1d\xbe\x60\xb8\x27\xba\x45\x35\x32\x2f\x1c\x51\xd6\xd7\x76\x3a\xbf\xac\x5b\xcc\xdb\x1f\xb1\x21\xf1\x1d\xd2\xac\x1e\xd8\x21\xa3\x91\xb0\x6c\xb8\x78\x56\x97\x76\x5a\x80\xa4\xbc\xbf\x18\x6d\x90\xff\xd8\xe2\x21\x5b\x9a\xf9\x19\xdb\xce\xd7\x89\x70\xc7\xc7\x39\xfb\x64\xb8\xc3\x01\xbb\x7b\xe0\xa3\x46\xb1\x26\xe3\xd6\xc8\xd6\x62\x83\x69\xe0\x72\xf3\x88\x52\x6e\x23\x8b\x0a\x1a\x9c\x01\xf6\x32\x99\xae\xdc\xc2\xf4\x38\xb5\xc4\xec\x4d\xf0\xd9\x44\xeb\xbc\xf5\x78\x67\x8c\x37\xe0\x66\x97\x64\x44\x82\xb0\xa4\x40\xd2\x8e\xac\xc1\x2e\x95\x55\x1f\x20\xcb\xbd\x79\xd1\x94\x75\xb0\x3f\x5e\x24\x87\x59\xc8\x8f\xfe\xf5\xfc\xfe\x75\x12\xc0\x32\x7c\xf2\x7c\x67\xd6\xbc\xd4\x11\xcc\xd0\xe7\x01\xc6\x80\x39\x7c\xe7\xa1\xf4\xd6\x02\x98\xc3\x3f\x29\xe3\xdf\xfd\xe4\xc8\x26\x20\x0e\xff\x25\x80\x0d\x86\x81\x6d\x9d\x6e\x6f\xb8\xcd\x84\x79\x56\xdd\xb9\x79\xc6\x2c\x3f\x8d\x13\xab\x9b\x77\xf0\x51\x60\x85\xaa\xd6\x30\xc6\x74\x66\xe9\x66\x73\x6f\xe5\xed\x88\x12\xe8\xff\x0f\x65\xfa\x3f\x1a\x71\xb4\x1c\xb3\x24\x99\x62\xae\x17\xf8\x21\x53\x49\xec\xcb\xca\x2b\x57\x06\xeb\xa5\x7b\x02\x96\x02\xce\x07\x50\xc7\x37\x5b\x08\xe3\x4c\x05\x95\x03\x56\xa1\x43\xd0\xb0\xbd\xc4\x6a\xc0\x69\xa0\xf7\xda\x24\xe1\x34\xd7\x5c\x3f\x90\x5e\xf5\xc2\x2e\x0b\x0f\x7b\xc4\x19\x69\x53\xd6\xaa\x86\xc2\x2c\xf8\xaa\xf6\x96\x28\x51\xa0\x9f\x5c\x30\xae\x63\x2e\x37\xc8\xe9\x13\x55\xc6\xb0\x5e\x07\x1c\x30\xe4\x12\x26\xcd\xb8\xe6\x56\xb3\xe2\xa2\x5a\x87\xf0\x40\x51\xb1\x67\xa3\x54\x78\xef\xd5\x00\xf5\x65\x60\x49\xea\xd7\xd1\x9a\x9a\x79\x9e\xb1\x0c\x48\xe1\x3a\x66\xc8\x13\x19\xe6\x81\x73\x2d\x84\x08\x27\x56\xbe\x08\xf6\x2e\xbf\xc2\x2a\xf6\x45\x7b\xf7\x5f\xba\xff\xb2\x7d\x97\xec\xbf\x14\x92\xe5\xab\x04\xfe\x7a\xc6\x7e\x27\x8c\x6c\x4f\x8c\xd3\x31\xed\xc6\x77\x42\x78\x09\x98\xe5\x12\xeb\xd9\x6a\x9f\x35\x66\xd5\xf6\x92\x7b\x18\x5c\xcf\x67\x0a\x14\x63\x76\xea\x75\xa5\x0e\xa8\x9e\xe7\x95\x64\x07\x7f\x50\x80\xea\xd1\xcc\x8b\x3f\x2d\x64\xcf\x69\x5f\x29\xec\x34\xf8\x20\x82\x40\x8c\x4a\x0e\x2a\xb7\x74\x6f\x27\x86\xf8\xbb\x9b\x9c\x92\xfc\x5b\xd2\x55\x4c\x4d\x16\xe6\x05\x21\xe7\x57\xc2\xc4\x0e\xea\x24\xd7\x2b\x6e\x94\xec\x2e\x60\x2e\xf0\xba\x1a\x9f\x53\xa5\x71\xf2\x06\xa2\x90\x55\xe8\xe7\x89\x86\x75\xfa\x28\x39\x0d\x58\xa7\xa7\xc1\xcf\x0c\xf3\x22\x83\xdb\x44\xf9\x0f\xde\x4b\x9d\x2a\xd6\x57\xa2\x84\x21\xa4\x02\xbc\xc4\xa2\x7c\x00\xf2\x47\x5f\x2b\x4b\xb1\x02\x4e\xac\xc4\x76\xa1\xb4\x86\xf6\x84\xa6\x89\xd0\x4f\xf2\xe1\x48\xc7\xc6\x1f\x90\x01\x5d\xee\x9a\xf9\x4d\x80\x43\x0e\x2d\xe6\xf9\x4b\x86\x10\x69\x26\xac\x10\x28\x62\xc2\x43\x78\x9f\x2b\x0f\x90\xd1\xee\x0e\xf9\x87\x58\xe7\x20\x99\x5d\xcf\x5a\x09\xa5\xb7\x68\xb0\x29\xb6\x09\xd4\xd4\x5e\xf9\xab\x1d\x2e\x95\x14\xe3\xa5\xe8\x0b\xcf\xa5\x95\xc1\xac\x93\xd6\x37\xce\x71\xae\xcb\x5f\x94\xba\x47\x7d\x40\xc3\xe5\x06\x79\xc1\x39\xf4\x79\x84\x3e\x4c\x09\xe5\x79\xc9\x02\x9b\x92\xc1\x1c\x5f\xcc\x79\xca\x32\x01\x0e\x03\x2b\x72\x0a\xe6\xfd\x81\x76\xea\xc6\xcb\xac\x03\xf9\x18\x7b\xf9\xcf\xda\x31\x30\x9f\x53\xcc\xf8\x3d\x7d\x60\x60\x34\x2f\xce\xa2\xf1\xfb\xa7\x8c\x82\xc9\x76\x9b\x39\xc0\x67\x99\xe8\x97\x7f\x21\xce\x91\xc1\xd1\x2f\xd9\xec\x75\x85\xbf\x4c\xd2\x89\x2e\x59\x90\xfa\xb3\x21\x9f\x11\xfc\xcb\xf1\x42\x97\xf0\xe3\xa5\x4b\xf8\x62\xbe\x72\xdd\xdc\xc0\x9d\xd5\x37\x39\xcd\xbf\x42\x1f\x02\x74\xa9\xe8\xf9\xb0\x24\xa2\x4b\xf3\xf4\x8c\xf4\x8b\x9b\xb4\x5f\x32\xbd\x55\xd7\x16\xd6\x65\xd3\x4b\xf9\xa6\xc3\x28\x1c\xc3\xfc\x3b\x52\xfd\xee\xfa\x0d\x7b\x57\xba\xc2\xfc\x58\xa2\x47\xb3\x03\xa0\x64\xeb\x39\xd0\xef\xc7\x4a\xf4\xe1\xcd\xb0\x7d\xef\xbe\x49\x69\x07\x77\x95\xf2\x5d\xd2\x9e\xef\x3d\x66\x25\xd6\xd3\x02\x8f\xb9\x89\xa4\x4d\x52\xce\xdb\x94\xa1\x45\xee\x06\x53\xf9\x05\xc8\xc1\xde\x3d\x7b\x1e\xa3\x51\x77\xd5\x6d\xb8\x55\x3f\x6d\xc1\x7e\x6d\xc1\xd9\x9e\xf9\x90\x6f\x65\x89\xe5\xbe\x21\x9d\xf2\x4b\x4d\xcc\x8f\xd4\x62\xc6\x36\xd1\xc1\xbd\xd8\x1d\x01\x71\xe0\xda\x27\x0b\xb5\xc2\x95\xda\x1c\x3e\x9f\xd0\x87\x8a\xa3\xa9\x9a\xbf\x96\x9c\x3e\xef\x54\x17\x14\xfa\x02\xbd\xd0\x4f\x81\x52\xca\x20\x78\xc2\x84\x5c\x96\xfb\x37\x8c\x29\x2c\xc1\xdf\x95\x4c\x91\x20\xa4\x65\x26\x85\x56\xa2\xf5\x7e\x85\x26\x14\xa6\x7c\x5b\x1b\x2a\xe1\x15\x03\xe2\x3e\x4d\x54\x82\xea\x9b\x73\x6c\x30\x58\x42\xfb\xa8\x16\x11\xa8\x60\xb4\x5f\xa1\x2b\xc2\x0f\x71\xdc\x59\x68\xf7\x43\x68\xf8\x04\x86\x34\x80\xd0\x84\x1c\xd6\x41\xc7\x27\x98\xcd\x1b\x25\x36\x87\xe8\xfe\xee\x43\x3f\xb4\x00\xd1\xfe\xb2\xc3\x58\xd9\x33\xb1\x5e\x38\xe4\xbc\x9a\x14\xdf\x33\xac\x88\x99\xb2\xc3\x07\xc2\x55\xed\x48\x3c\xd5\x14\x18\x29\x4d\xf2\xc8\x87\xdb\x33\x12\x74\xf8\x52\xaf\xc4\x04\x7f\x5b\xa2\xff\x4e\xe8\x76\xc8\x6b\x91\x58\xff\x4c\x9c\x37\x11\xfc\x1b\x53\x06\xac\x64\x39\x91\xc5\xe5\xa8\x66\xd7\x04\xec\x42\x54\x27\x6e\x45\x4d\x11\xdd\x1f\xf8\xab\x98\x54\x04\x0a\x31\xab\xe4\x15\xf2\x79\x1b\xb2\x06\x27\xcd\x46\x23\x68\x65\x77\x31\xa5\x86\xca\xea\x01\x19\x5c\x93\xd4\x8d\xb1\x52\x07\x0b\xbd\x8a\x3d\xaf\x73\x99\x23\xcd\x24\x9d\x6f\x86\x13\xa6\x47\xe2\x52\x7a\x71\x97\x5c\x8b\x05\xab\x36\x33\x35\xcf\x3f\xcc\x29\x29\x6e\x06\x40\x49\xfc\x7f\x65\xd5\x51\xab\xa2\xf4\x38\xcf\xaf\x82\xe3\x14\xb2\x63\x89\xe9\x96\x29\xcf\xe4\x21\x79\x81\x55\x9b\xb1\x9f\xb6\x26\xa3\x30\x65\x27\x4c\xa3\xdd\xb3\xb7\xf7\x02\x2f\x5f\xb7\xb8\x38\x37\x13\xc2\x41\x1a\x52\x61\x7c\x65\x9b\xd3\xcc\x5d\xcb\x92\x98\xc0\x29\x0e\x93\x6d\x2f\x33\x95\xb5\x81\x9f\x3b\x60\xce\x66\xc2\x6a\x54\x87\x8d\x17\x07\x05\x29\x11\x60\x79\x6b\x51\xbc\xee\xc6\x5e\x96\xc2\x59\xbe\x7d\x92\xec\x10\x7f\x6e\x90\x3f\x1a\xa2\xaf\x27\x54\xfe\xb6\x5e\x36\xe0\x69\x4b\xf4\xfd\x20\xbe\xee\x3c\x51\xfc\x61\x6c\x01\xad\x32\x94\xcc\xfe\x9f\x99\x76\x23\xbd\x62\x68\xec\xd6\x6a\x7e\x55\xe9\xd5\xfa\x00\x2a\xf4\xf5\x65\x3a\xc4\xc7\x66\xfd\x4e\xd9\x79\x41\x59\xa6\x34\x84\xd2\x08\x29\x0b\xf9\x53\x73\x47\x17\x66\x7e\x59\x4c\x98\x2b\xb7\x21\x30\xf2\x99\xe9\xe9\x69\x7b\x21\xf5\xb8\xb4\xda\x57\xd9\x3b\x0a\x47\x57\xa1\x32\x46\x59\x5d\x68\xb6\x1c\xb3\xc6\x78\x33\xf4\x4f\xd8\x49\x2b\x4c\xdd\x13\xa3\x58\xe2\x15\x8b\x17\x06\xe2\xe2\x6e\x95\x93\xc7\x5d\x76\xf9\x5e\xcb\xa6\x1d\x7d\x01\xbe\x5c\x1c\x61\xa5\xae\xd8\x93\xa8\xd4\x71\x2e\x88\xc0\x7d\x99\x0b\xb0\xba\xe2\xc6\x6e\x35\x65\x71\xc2\x0f\xea\x72\x33\x2a\x13\x78\x66\x79\x76\x03\xdb\xe1\x9f\x70\x20\x29\x3f\xea\x8d\xc7\xe6\x0f\xe7\xc6\x39\x7f\x68\xd2\xde\x77\xf9\x65\x97\x54\x6c\x3e\x3f\x89\x4c\xa7\xb6\xec\x2b\xfb\xd0\xc8\xf8\x08\x84\xb9\x68\x29\x9d\x46\xb3\xfe\xeb\x45\x89\x5d\xbb\xaa\xca\x62\x26\x4c\x54\x59\x15\x2b\x94\x23\x28\x7d\x1f\xfc\x5b\x99\x5e\xd4\xf7\x3e\x98\x6f\x06\x0c\x8a\xda\x59\x1f\x2b\x3b\xaf\x2b\x15\xdd\x31\x9d\xc3\x2b\x69\xda\x50\xfa\x53\x82\x76\x0e\x59\xb9\x1b\x3b\x93\x80\xf1\x1f\x56\x13\xd3\x9a\xa0\xcd\xff\xc0\xf8\xf8\x95\x2b\x51\x92\x5e\x3d\x7e\x25\x1f\xe9\xd5\xd7\x5c\x99\x30\x37\xae\xae\xf0\xd9\xbc\xda\x1e\xbb\x5a\xbe\xce\x4f\x06\x31\x13\xff\xf2\x9b\xea\xa0\xd5\x8c\x03\x2d\x8d\x10\xff\xa2\x9c\xed\x51\xe9\x17\x12\x0e\x0f\xbd\xfa\xb8\x56\x5e\x54\x10\x0b\x84\xb7\x40\x6a\x7a\x61\x50\x48\x25\x20\x61\x64\x7c\x04\xeb\x17\xa1\x19\x91\x5f\xaf\xf9\x31\xbf\x71\xcd\x08\x17\x71\x23\x17\x8c\x54\x4e\x92\x6d\xbc\xff\xc9\x06\x79\x11\xe1\xda\x0e\xfe\xb2\x9e\x45\x9c\xfd\x13\xb9\x78\x5e\xb8\x23\xc3\x6f\x1a\xba\xcb\x24\x9b\x2b\x9d\xc9\x5e\x43\xaf\x1a\x2c\x4b\x40\x8e\x79\xd1\x57\x94\x7b\x45\x10\x42\x46\x9d\x28\x4e\x81\x39\x5b\xdf\x2d\x39\x5f\x20\xc6\x25\xad\xa0\x38\x0a\x0e\xbe\xe4\x90\xa9\x26\x8a\xd3\xcd\x24\x01\x32\xb2\x00\x2d\x45\x52\x0a\xe9\x02\xa8\x57\x32\x20\xb3\x83\xbd\x32\x2c\x95\xeb\x7e\xc8\xff\x75\x4f\x6c\x90\xe7\x13\x3a\x49\xf9\x9f\xd6\x95\x52\x05\x1d\xa9\xbb\x2a\x19\x10\xff\xb6\xa0\x2d\x18\xec\xa8\x0d\xd0\xf7\xc4\x5f\x63\xa6\x16\x39\x4d\x79\xab\xd6\xd5\xb2\x91\xdd\x75\x3f\xcc\x24\x99\x60\x07\xbd\x9b\x79\x8f\x99\x57\xb2\xb3\xd4\xb4\xee\x28\x39\x75\xf1\xb7\x5e\x75\xb1\xee\x87\xe3\xbc\xff\xc8\xe5\x0c\xcd\x81\x5f\x9b\x99\x4a\xda\x67\x4f\x36\x73\x2a\xf3\x76\xc9\xfe\xd3\x30\x6f\x97\xec\xdf\xec\xbc\xbd\x66\x5b\xcf\x79\x9b\x83\xcc\xd9\xd6\x8f\x86\x9c\x7b\x4a\x1a\x8a\x75\x6f\xe5\xf2\x8e\x48\x56\xf1\x4e\x3b\x8c\x35\x64\xa9\x88\x0f\x1c\x5f\xdb\x3b\x2e\x1e\xab\xa8\xe7\xf5\x64\xb7\x5a\x7d\x96\xc9\x99\xa9\x79\x7b\x17\xe4\xf9\xdb\x7b\xf9\x45\x95\xbd\x97\x5c\x56\xd9\x5b\xd9\x3b\x7e\xd1\x7e\x67\x77\x51\x4e\x31\x65\xc8\x92\xa2\x0c\x76\xd1\x2c\x7e\x1a\x93\xe7\x2d\x34\x58\x75\x04\x02\xfa\xa4\x59\x52\x14\x46\x3f\x51\x65\x8d\x54\x14\x25\xcd\x7a\xc3\x3b\x60\xe2\xd5\x85\x9f\x00\xe3\x39\x44\x56\x36\x50\xa4\x38\xaf\x6c\x06\x50\x06\xb2\xea\x7b\xf1\x06\xf9\x68\x89\x56\x29\xfc\x6d\x3d\xc9\x99\x85\xa1\xe8\x5e\xe6\x36\xff\xf2\xcc\x9c\x48\x55\x2e\x0a\xad\x8b\xfc\x55\xa0\xf5\xe4\x87\xaf\xcb\xa6\xfb\x08\xdd\x8e\xdd\xb7\x3e\x4f\x9c\xb7\x93\x69\x1c\x0a\x7e\x2b\xe0\x8a\x49\x54\xeb\x7f\x20\x6e\x38\x50\x47\x6c\xf1\xb5\x5c\xa9\x60\x74\xf0\x73\x1d\x13\x68\xb1\x05\xef\x46\xcd\x54\xd5\xce\x84\xe9\x00\x0a\xed\x52\xef\xf5\xde\x73\x7b\xd2\x28\x32\x6a\xeb\xf7\xce\x75\x9e\x51\x12\x3f\x8a\xb2\x40\xf0\x95\x91\x87\x74\xf0\x2f\xf8\xe1\x52\xd4\x0c\x01\xca\x10\xe2\x63\xc2\x0d\xe1\x0a\xb5\x4d\x2a\x73\x86\x26\xa2\xe9\xaa\x13\xa1\x2d\xbf\x27\x62\x16\x65\xaa\x2a\xa4\xc5\x65\x7f\x4d\xa5\xe8\x4c\x40\x9b\x8b\x43\x37\x08\x5a\x63\xf0\x09\x30\x06\x70\x2d\x77\xd4\x0e\x22\xd7\xb3\x97\xdc\x00\x6c\x79\x42\x15\x19\xb5\xd5\x01\xde\x5e\x58\x38\x3c\x6a\x47\xb5\x1a\x8b\xd1\x86\x87\xe5\xb2\xd6\x30\x75\x27\xc8\x11\x4e\x40\x2c\xad\x56\x36\xc8\xc7\x87\xb7\xb0\x20\x5b\x58\x90\xad\x6c\x58\x1d\xb3\x61\x7d\x5e\x66\xc3\xfa\x04\xe9\x0c\xb6\xed\xc2\x68\xc0\x87\xf2\x5c\xa2\x63\x29\xa4\xc1\x4c\x21\x94\x81\x97\xe3\xe3\x67\x3a\x19\xd6\xbd\x44\x21\x65\x3f\x3d\x60\x7a\x2f\x39\x20\x84\x93\xff\x06\x31\x9d\x34\x86\xbd\xfe\xa7\x3b\xa8\x07\xc8\xff\xd3\x1b\x51\x73\xb9\x75\x69\x37\x44\x8d\xe8\x69\x21\x8c\xe6\x2f\x4a\xbd\x60\x34\xe6\xf1\xdf\x7a\x47\xc9\x99\x32\x2f\xe9\xea\x4a\x10\x68\xa2\x02\xc1\x14\x58\xcf\x5d\x5a\x05\x38\x9f\xe3\x8a\x7e\xe5\x24\x39\x47\x5c\x9b\x05\x14\x9f\xfc\xc5\xd5\xf0\x0d\xb2\x41\xe8\x0c\xd5\x1f\xb0\x0e\x38\x63\x0b\x2a\xbb\x78\x9a\xcb\x60\xda\x6e\x7e\x30\xce\xab\xbf\x46\xf5\xd6\xad\xb0\xdf\xbd\xda\x4c\xfd\xa0\xc2\x87\x92\xc6\x95\x99\x30\x3d\x1a\x2f\x40\x7b\xf9\x9e\x40\xd6\xce\xce\x3d\xa1\x5f\xda\x49\x77\xf7\x35\xc7\x80\x9d\x7e\xed\x4e\x67\x44\xfb\x5d\x24\xbf\x25\xe9\x65\xd0\xe9\xe7\x6d\x05\x24\x0d\x2a\xea\x02\x09\x9d\xae\x3a\xbf\x50\x08\x9d\x96\xb3\x7c\x6a\x46\x4a\xb1\xf7\xb6\x04\x6b\xdf\x82\xf5\x23\xba\x60\x7d\xe7\x29\xa6\x71\xfa\x19\x88\xd5\x07\xc8\xf1\xde\x2c\xfb\x2a\xeb\x8a\x3e\x58\x76\x47\x34\xf6\x5d\xfd\xb2\x94\xf9\x66\xc0\xac\xef\xec\x70\xbe\x4b\xb4\x0b\xf9\xfc\x19\x78\x1e\x90\x25\x6a\xa4\xa5\x30\xb1\x9b\x50\x64\xda\xd5\x6a\xe9\xcb\x72\x23\x22\xd4\x12\xcf\xb3\x42\x0c\x48\xf5\x5e\xb3\x5c\x2b\xea\x02\x5b\x35\xd8\xb9\x18\x27\x75\xac\x61\x02\xe2\x41\x94\xd9\x49\xab\x2b\xa2\xc2\x67\x1c\x35\xd3\x36\x7b\x76\x61\xfa\x70\x65\x12\xcf\xdb\x13\x2b\x1b\xe4\xfb\xdb\xe8\xeb\xb6\xd1\x21\xde\xba\x75\x72\x9b\xf3\xfc\x6d\xd7\x45\xc8\x4b\xc1\xe2\xd6\x0c\x82\x96\x7d\x4b\xd3\x0d\x70\x54\x5e\x54\x77\xfd\x50\x2b\x66\x23\xce\xe7\xd0\xb9\xd1\x8e\xf6\x57\x01\x9e\x63\xc2\xbe\x8c\xc1\x41\x6b\xbe\xab\xf9\x6d\xf8\x5d\x87\xb7\x92\xd9\x74\xf9\xa5\x63\xf3\x33\x7a\xab\xc2\xf5\x30\x7f\x68\xf2\x80\xbd\xb7\x62\xcf\xcc\x25\x2a\xd2\x5e\x9c\xe7\x75\xf3\xb2\x1b\xb6\x0d\x18\x0e\x5d\xe0\x81\x73\xc1\x35\x83\x93\x47\x87\x6d\x7e\x7a\x95\x8e\x0d\xae\xa5\x89\xef\x37\x5c\xd0\x67\x24\x87\xa3\x17\xe1\xb1\xff\xf8\x81\xe3\xb6\xc7\xa0\x82\x08\x66\x0a\xe7\x3d\x88\x19\x5f\x7e\x58\x68\x56\x75\x9b\x09\x13\x86\xba\x7c\x0f\xf9\xd7\xb2\x4e\xea\x72\x31\xeb\x30\x6f\xd3\xcf\x8a\x11\x1c\xb8\x6c\x0f\x50\x01\x58\x7c\xdd\xd0\xe3\x4d\x1c\xd8\xbf\x7f\x9f\xba\x98\x54\xe8\x41\x61\xd0\x4b\x18\xf0\xb7\xea\x0a\x98\x9a\xc4\x98\x6a\xcd\xb4\x19\xb3\x4e\x04\x57\x64\xc2\x07\x72\xd3\x8c\xaf\x6d\xa4\x63\xcf\xd4\xb2\x07\xfd\xa4\xdd\x88\x2e\x87\x02\x74\x8a\x2a\x8f\x34\x99\xe3\x61\x54\x94\x53\xcb\x36\x4d\xdb\x37\x74\x6e\xf7\x78\x3a\xc4\x47\x6a\x1d\xec\x0c\x29\xeb\xd7\xc0\x4e\x5f\xdc\x2f\x57\x00\x40\xf4\xb7\x77\x38\x57\x68\xbf\x73\x10\x28\x39\x4c\x30\x8b\x27\x00\x5c\x85\x3c\xe4\x69\x84\xce\xe8\xca\x06\x79\xcd\x0e\xfa\x81\x52\xe6\x57\x7a\x5b\xe9\x94\xfc\x4a\xff\x44\x26\xa4\x6f\x42\xed\xfa\xaa\xdb\x40\xa0\x40\x4d\x70\x17\x63\x8d\x31\xcf\x55\x14\x8e\x48\xe4\xbd\x1b\xb6\xd0\xea\x64\x4f\x48\x5c\x93\x08\x8b\x1b\x11\x2d\xa2\x8d\x1d\xf8\xdd\x88\x2a\x44\x93\x07\x45\xaa\xb2\x47\xe8\xc6\x75\x83\x0c\x88\x09\xfa\x41\xe4\x7a\xc2\x42\x11\xeb\x10\xa5\x28\x96\xfd\xe7\xbd\x0c\xa2\x65\x74\xa2\x60\xeb\x2d\xae\x09\x07\xd1\x92\x1b\xc8\x87\x2a\xf4\x6b\x84\x6e\x83\xae\x58\x7f\x44\x9c\x5b\x49\x96\x46\x12\x68\x0f\x99\xb2\xf2\x20\x4b\x73\x8a\x79\xf6\xc8\x7b\x79\xa2\xd8\x0e\x23\x78\x55\xa6\xe3\x1a\x35\x28\x14\xf0\x9e\xa1\x62\xe1\xb9\xf9\x36\x54\x9d\x2b\xe8\xe5\x9b\x3a\x14\x72\x72\xa4\xcf\x29\xd3\x72\x1a\x24\xd6\x7f\x96\x9c\x77\x97\x16\x0f\x2f\x98\x99\xcb\x2b\x39\x46\x21\x69\x0d\x38\x98\x48\x83\xaf\x95\x4e\xe0\xef\xf3\x4b\xa3\xf6\xfe\xfd\xfb\x60\xcc\x75\x3e\xc9\x0d\x88\xcf\xac\x2f\x71\xd5\x47\x2a\xb0\x30\x83\x72\xc6\x3d\xbf\x06\xca\x78\x0a\x13\x9a\x8c\xa2\xed\x4d\xd5\x3b\x13\x6d\x9c\xd0\xb6\x2c\x17\x00\xc0\xb5\xdc\x6a\x35\x8a\x3d\xe1\x75\x92\xec\x00\xe4\x43\xb6\xad\xd3\x95\x38\x6a\x2e\x8b\x4a\x26\xb3\x33\xd0\x4d\x35\x2d\xa3\xc2\xd6\x67\xfb\xd2\x2c\x96\x11\x4a\xad\x19\xd4\x7c\xc4\x54\xe8\x4f\xa8\x81\x2f\xcc\xce\x9c\x5a\xac\x9e\x98\xcf\xc5\xc3\x0b\xf4\x87\xa4\x97\xbf\xc6\x38\xfa\x5a\x7f\x48\x9c\xcb\x8c\x2b\x8a\x2d\xf4\x3e\x09\x6f\x90\xdb\x09\x7d\x36\xa1\xe7\xf2\x1d\x72\x50\xec\x10\xab\xd9\x47\x05\xc5\xc3\xda\x0b\xe2\x0c\x7e\xb5\x7e\x4d\xfa\x52\x3b\xa5\xfb\x92\xdb\x72\x4c\xee\xcb\x0a\xbd\x6d\x7b\xaf\xd4\x14\xd9\x2c\x59\xf7\x6d\x73\x8e\x64\x3f\x73\x9c\x10\xc2\x72\x81\x2a\x02\xb7\xc5\x62\x3b\x11\x08\x81\x36\x9d\x24\x93\x73\x95\x0d\x72\xdb\x36\x7a\xb2\x44\xb7\x01\xe5\x59\x2f\x2e\x39\xff\x02\x5e\x30\x51\xc4\xc5\xd8\xe9\x49\x66\x75\x16\x62\x0d\x36\x0c\x8b\x53\x0c\x4a\x61\x28\x9c\x85\x4d\x59\x5a\xd7\x31\x08\xb0\xbd\x1a\xdf\xb8\x09\x67\x48\x83\x04\x2b\x39\x99\xa8\x75\x7e\x6b\xdd\x0f\xbc\x2a\xd7\x8c\x81\xdd\x24\x2c\xc5\xf2\xde\x02\x06\xd6\x89\xcb\x19\xc4\xeb\x27\x72\xc4\x40\xef\x01\xab\xa5\xb9\x42\x42\x1d\xad\xd9\x7f\x55\xa2\x14\x6b\x47\xc1\xf1\xfe\x4f\x4a\xce\xa7\x4b\x0b\xea\x77\x51\x99\x12\x51\x69\x4a\x72\x44\xc3\x26\xac\x18\x5c\x14\x22\x93\x38\x24\x79\x38\xf4\xa9\x9d\x91\xf3\x77\xb8\x04\x47\x30\xb8\x10\xdb\x7c\x17\xab\x8d\xee\x06\x51\x98\xa9\x03\xf2\x96\x0d\x35\x06\x03\xa8\x74\x88\x13\x53\x0b\xfc\x6a\x9a\x64\x5a\xa9\x73\x1d\xa8\x7b\x2b\xcc\xe5\xca\x33\xca\x92\xa6\x88\x64\x31\x55\xb7\xd1\x5c\xcb\x49\x56\xf8\x5c\x0e\x0e\xb0\xad\xa1\x97\xa1\xf2\xf9\x1b\xa0\xca\x8a\xf6\xf5\x97\xc4\x78\x0c\xf5\xe2\x9f\x86\x7b\xed\x7f\xc3\x21\x64\x7d\x74\xd8\x79\x0b\xe9\xd3\xbd\x65\xbc\xd9\xcb\xc9\x65\x3c\x5c\xc9\xbd\x9b\x6d\x38\x2c\x5c\x27\xd4\x6f\x4d\x6a\x29\xd8\x04\x1c\x1a\x20\x21\x62\x0d\xb2\xb3\x6c\x90\x37\x6e\xd9\x3e\xb6\xcc\xfc\x5b\x66\xfe\xce\x66\xfe\xe7\x48\x33\xff\xd3\x3b\xf7\xbe\x27\x67\x00\x5b\xff\x55\xfd\xe5\x7a\x41\x19\xe2\x27\xe6\x2e\xaf\x9c\x8e\x1c\xd7\x46\x8b\x85\xa6\x91\xbb\x69\xaf\x04\x5f\x46\x1b\xd3\x99\x99\xe4\xaf\x87\x9d\x4f\xf7\xeb\xda\xef\xd0\xc6\x40\x5c\x30\x7b\xad\xd2\xb1\xbd\x0e\x50\x00\xc1\x00\x15\x56\x2b\xe7\xfd\x17\x15\x39\x36\xe9\xfd\x97\xad\x6a\xda\x05\xc0\x6a\x84\x5a\x0e\x70\x1a\x71\x54\x02\xc4\xab\x28\x10\x3b\x16\x70\x4a\xc4\x32\xb1\x97\x6d\x90\x97\xed\xa0\xef\x2e\xd3\x6d\xf0\x92\x75\x4f\xd9\xb9\xbf\x74\x58\x66\xc9\x67\x49\x2a\x85\x1b\xb6\xc9\x09\x26\x6a\xa6\xcb\x91\x06\x40\xab\xd8\xd3\x6e\x75\xc5\xf6\x53\x56\x37\x95\x1e\x88\xbb\xac\x2f\x81\xe5\xa4\x99\x60\xa6\x5d\x38\x6d\xb9\x81\x7d\x74\x5e\x48\x6c\xfd\x18\x07\xe9\x9e\x21\xab\x9f\x9f\x24\x10\x1a\xab\xf0\x09\x2a\x69\x31\x3f\x24\x61\x5f\x76\xc9\xe1\x0b\xe3\x47\x1a\xfb\x32\x8c\x8a\x3f\xb0\xbb\xe0\x03\x82\xf9\xc1\xd4\x28\x4d\xd5\xd5\x8f\xa0\x7c\x14\xc2\xbe\x95\x7d\xdb\x15\xa8\x44\xa5\xba\x88\xc4\x6e\xfa\x12\xc8\xee\xe9\x8d\x81\x2e\x2a\xf4\x3b\x3e\x23\x86\x9a\x35\x41\xaf\x39\x85\x5d\x3e\x17\xc5\x29\xfd\xb3\x32\x2d\xa5\x91\x75\x5f\xd9\x79\x4e\xb9\x60\xcd\x8a\x97\x4b\xd1\x9b\x8a\x4c\x53\x5c\x00\x8f\xe4\xc2\xc6\xae\xaf\x24\xd7\x85\xbb\x2c\xa5\x2c\x72\xc9\x0f\x8c\x9b\x5e\x54\xa3\xe3\x5d\xd6\x56\x7b\xee\xd4\x96\xf8\x54\x57\x37\x23\x78\x40\x62\x9f\xee\x05\x66\x2c\xa6\xf7\x0f\xd3\x4b\x06\x78\x47\x37\x25\xbf\x6a\xd8\xf9\xb3\x4d\xe9\x87\xba\xf9\x79\x10\x26\xa9\xbd\x27\x78\x4e\xc7\x66\x55\x02\x72\xa9\x36\xd6\x10\x8c\xdf\x65\xe6\x35\xbe\x36\x31\x3b\x25\xeb\x21\xbf\x7f\x07\xfd\x66\x99\x0e\xf1\x5f\xd6\x1f\x97\x9d\x5b\xd5\x2e\x10\xaa\x94\xc0\x33\x67\x71\xf9\x60\xa4\xe2\x67\x0b\x28\xac\x9c\x21\xaf\xce\xb2\xbd\x20\xbb\xdf\x65\x1b\xe0\x23\x9b\xd9\x01\x67\x64\x03\x80\xd6\x78\x26\xb6\xc0\x57\x95\x68\xfa\x7c\xd9\xf9\x77\x25\x9a\x90\x14\xf2\xcb\x5b\x77\x3d\x59\x34\xdb\x07\x73\x64\xd8\x7b\x89\xb7\x84\xd7\xcf\x46\x78\xfd\xf9\x70\xaf\x32\xae\xc6\x3b\xe0\x72\x7f\xf3\xb0\xf3\xda\x4d\x31\x35\xe9\xa0\xef\x9b\x9b\xf1\x17\x94\xb2\x27\x2b\x18\xb7\xe7\x47\x33\x4f\xc7\xa2\x7a\x84\xe6\xee\x7f\xc9\xd6\x91\x77\xd0\x23\xef\xba\x74\xf7\x87\x8e\xa3\xdc\xfd\xd9\x8c\xcb\x99\x11\x53\xad\x13\xe5\x55\xf4\x8a\xc1\xc0\x44\xe6\x19\x65\xeb\xac\xfd\x20\x29\xe0\x54\xeb\x7d\xb8\x9d\xb4\x26\xfa\x3e\xdc\x76\xf4\xfd\xdf\x41\x07\xe2\x70\x5c\xdc\x59\xf7\x0d\x3b\x4f\xd9\x0c\x83\xe3\x2f\x0f\xc4\xe0\xf8\x0b\x95\x0d\xf2\x37\x3b\xe9\x3b\x08\xdd\xe1\x37\x10\x34\xff\x7a\x32\x20\x6a\x06\x81\xf0\x4e\x3d\x43\xc4\x23\x3b\x13\xd1\x05\x51\x68\x1e\x87\x33\x04\x7d\x5e\xba\x41\x76\x13\x2e\xb9\x42\x11\xa2\x2c\x6c\x16\x90\x76\x54\x16\x56\x47\xc8\x72\x85\x7e\xbd\x4c\x1f\x16\xba\x75\x96\x34\xdc\x2a\x93\x67\x62\xeb\x93\xe5\xd3\x90\xed\xe3\x27\x25\xfc\x33\x81\xd4\x60\xf0\x81\x44\x28\x00\xd5\xa0\x99\xa4\x2c\x1e\x4b\xaa\x51\x83\x79\x22\x94\xdc\x70\x45\xca\xf8\xb5\x44\x51\xb4\x99\x3a\x24\x61\x75\x37\x4c\xfd\x6a\x72\x05\x17\xc1\x52\xa0\x2f\x35\x53\x59\xe9\xc8\x4f\xc5\xc3\xa8\x2b\xa8\x31\x26\x15\x4a\x67\xc0\x8e\xba\xa0\x95\xde\x71\x83\x24\xe2\x13\xa7\x64\x3e\x2b\x20\x0a\x48\xc0\xb0\xbe\x12\x05\x4c\x35\xcd\x1f\x9c\x53\x26\x07\x3e\x34\xa3\x61\xd1\x52\x36\x7c\x3d\x87\xc9\x6c\x7e\xda\x2b\xf6\x51\xbe\x44\xeb\x7e\xc2\xf2\xdd\x87\x6f\x0c\xda\x1c\xfd\xe3\x32\x3d\x47\x33\x75\x9c\xae\x65\xcd\x12\xf2\xe4\x16\x45\x28\x91\xa2\xdf\x73\x59\x0a\xa2\x33\xb3\xa6\x58\x5e\x87\xaf\x66\xdb\xd8\xcf\xf6\x35\xed\xeb\x1b\xb8\xf3\x47\x12\x3b\x5a\x0f\xb3\x96\x2b\xf4\xc7\x43\x83\x71\xc3\x28\x4e\xad\xcf\x0e\x6d\x92\x1b\x82\xee\x3a\x08\x37\x8c\xe2\xb4\xb2\x41\xee\x2f\xd3\x3f\x2c\xd1\x21\xae\xfa\x5a\x1f\x2e\x9d\x2a\xfa\xf4\xdf\xc9\x4c\xcd\xce\x47\x76\x02\xd4\x06\x67\x0a\x01\xb7\x8d\x38\x4a\xa3\x6a\x14\x54\x6c\x1c\x19\xe7\x71\x59\x96\x06\xd7\x0e\x9b\x75\x16\xc3\xb1\x23\xc2\x50\x0a\x4f\x35\xe2\x62\x11\x8f\x76\x66\xca\x55\x04\x11\x2b\xe6\x89\x73\x48\xfe\x08\x82\xbc\x05\xf3\x4d\x41\x0e\x06\x04\x29\x08\xfa\x1d\xc5\x73\x82\xe6\xac\x33\x91\x32\xb2\xd3\x70\x18\x87\xe6\x94\xb7\x1e\xad\x98\x15\xfa\x02\x42\x77\xca\xc7\xac\x67\x10\x27\x39\x2a\x7c\x7b\x30\x50\x96\x35\xb1\x6b\x71\x72\x6e\xd4\x3e\x36\x35\x07\xa8\x88\x85\xc9\xc5\xb9\xdd\x32\x0e\xb9\xcd\xbe\x09\x7d\x34\xf2\x63\x8d\xea\x43\xd7\x43\x66\x17\x27\xe7\x0c\x07\xdb\x27\x1e\x31\x10\xfd\x01\xf2\xe6\x45\x8f\xd8\x1c\xfd\x49\xa0\x7d\xdf\xf4\xc7\x5f\xa8\x9c\x24\x3a\xdf\xdb\x20\x2f\x79\x38\xfd\xe3\x21\xba\x9d\x61\xac\xd0\x67\x87\x9c\xef\x2b\xfb\x06\x13\xd0\x26\x8c\x0f\x82\x98\x49\xb7\xd1\x08\xfc\x0c\x8f\xa7\xf6\x37\xa6\xaa\x3a\x9a\xb7\x02\x6a\x46\x68\x3c\x0d\xc6\x4c\x20\xc5\x8c\xa1\xf8\x8a\x55\x28\xc4\x61\xe4\xd9\xbb\xe0\x0c\x8a\xe2\x50\x89\x7a\xc5\x31\xdc\x2c\x88\x5b\x7c\x6d\xf7\xa8\x7d\x74\xbe\xaf\x53\xa7\x36\x30\xdb\xad\xc6\x51\x82\x14\x2b\x94\x81\xc2\xe3\x56\x96\x71\x4b\xb1\x22\xbd\xc2\x1d\x6c\x91\x0e\xa7\xf5\xec\xa8\x6c\xb6\x0c\xc8\x3a\xf1\xe5\xfc\xc4\xc1\xd8\x21\x69\x4e\x62\x27\x51\xc0\x10\xc5\xc7\xc2\x04\x31\x3f\x22\x79\x22\x98\x1c\x74\xce\xcf\x55\xd9\x24\x52\xf5\xe3\x04\xa5\xee\xce\x23\x99\xda\xec\xf3\xfa\x01\xe7\x5a\x3a\x3d\x58\xaa\x90\x0e\xce\x0a\xfa\xde\x21\xba\x43\xa0\x59\xac\x7b\x86\x9c\x7b\x15\x5d\x49\x88\x4b\xff\x84\xb5\xd8\x4e\x4f\x10\xaf\xce\xc9\x64\x70\xc2\x6a\xa7\x12\x71\xb0\xf2\xd5\x62\x8e\x24\x76\x10\x71\x76\x18\x46\x1e\xeb\x9b\xae\xf4\x81\xfd\x0c\x09\xcb\x8b\x58\x92\x81\x31\x01\x07\x77\x86\xe8\x4a\xa7\x9b\xeb\xe8\x21\x3a\xb5\x69\xba\xd1\xe1\x62\xdf\xcc\xe9\x66\x5f\x38\x1d\xba\xd9\xed\xe5\x05\x4d\xc1\x90\x21\xe3\x32\x15\x45\xdb\x1c\x8a\xe3\x35\x92\x65\x22\xa4\x09\x8c\xb4\x9d\x82\x39\x55\x66\xe4\xcb\xa7\xdb\xb4\x05\xca\xbc\x42\xb0\x7c\x15\xfb\x88\x84\xab\x49\x60\x43\x43\x92\x2a\x97\xca\xf8\x56\x06\x40\x13\xbe\x3d\xdc\x07\x98\xe8\x00\xe4\x77\x22\x00\x23\x66\x57\x6a\x51\x6c\x43\x98\xa6\x61\x40\x76\x3d\xcf\x4f\xfd\x35\x16\xb4\xf2\x9c\x60\xf6\xe8\x62\x06\x87\xe1\xb4\xd1\xb7\x22\x0a\x51\x9e\x48\x87\x45\xb4\x2b\x95\x50\x65\xef\x0c\x33\x25\xed\x55\xdb\xf9\xfa\xf2\x69\x5e\xe4\x27\x7f\xeb\x85\xdb\x9d\xef\x6d\x93\xcc\x01\xf6\x0e\x58\x04\x32\x7a\x34\x97\x06\x91\xe6\x68\xa9\xc0\x28\x5c\x99\x60\x87\x0f\x5a\x21\x90\xa6\xc5\xff\x51\xac\xae\x4d\x67\x38\xc9\x76\x55\x46\x13\xf6\xbe\xcc\x10\xa3\x00\x91\x1a\x92\x17\xf0\xae\x50\xe6\x33\x8b\x0a\xe1\x1f\x99\xd6\xd6\xe1\x8a\x6c\x4d\x61\x10\x32\xf9\x87\x1b\xca\xc7\x12\x11\xbf\x03\x00\xb0\x24\x69\xd6\x05\xf1\x40\x9a\x46\xd5\x77\x48\xf9\x0a\x33\x29\x5a\xdb\xb5\xbe\xc2\xf0\xe0\x1a\xcb\x44\x25\x2d\xbd\x75\xd9\x1f\xd1\xfc\xee\x0e\xed\xeb\x88\x51\x48\xf7\xe3\x8a\xcc\x2c\xb1\x9f\x32\xc8\xb0\x02\xf7\xc7\x40\x3f\xc3\xa5\x1a\x85\x07\x41\x49\x92\xc9\x44\x83\x96\x02\x57\x6a\xcb\x69\x3f\xc9\x76\xb0\xff\x8e\xfd\x2b\x15\xfb\xb0\xbf\xca\xb8\xc0\x06\x48\x58\xc1\xb7\xa4\x64\xc7\xf0\x6b\x2d\x92\xca\x4d\x39\x37\x67\x59\xd8\x32\x32\x7e\xad\x1f\x19\x96\x56\xff\x3c\x9a\xd0\xd0\x07\x8e\x48\xba\xac\x3f\xbb\x12\x9f\x2f\x5c\xd2\x84\xdc\xca\xe2\xcb\xeb\x2a\xe4\x5b\x3e\x5f\xb0\x4c\xa1\x27\x9e\xcb\x34\x10\x49\x1d\x69\x64\x3f\x85\x77\xe7\x49\xb6\x23\xe6\xd5\xb1\x7f\x65\x30\x99\x9b\x43\xc3\xfd\xa8\xa7\xd5\x1a\x8e\x44\x08\x3c\x14\x50\xad\x4f\x0c\x3b\x9f\x22\x6d\x97\xed\xe5\x68\x8d\xc5\x02\x29\xe9\x2e\xf9\x81\x9f\xb6\x54\x16\x63\x13\x3a\x2d\x48\x23\xd5\xb2\x1e\xd9\x22\xed\x91\x99\x86\x43\xe7\x75\xaa\x18\x9d\x4a\x39\xdd\x9e\x10\xa2\xbd\x53\xbd\x92\x58\xbd\x70\xcb\xa0\xbd\x85\xe1\xda\xc2\x70\x75\xc6\x70\x85\x02\xc2\x55\xa3\x13\x83\x68\x5c\x6d\x3b\x11\x60\x5c\xbf\x94\x60\xbc\x47\xb6\xa3\xc4\xd6\x64\x21\x24\x7e\xf3\x2a\xa7\xc3\x9a\xdd\xf6\xed\x42\x6b\xf6\xe7\x86\xe9\xbe\x01\xc7\x00\x3e\xbb\xbb\x86\x9d\x67\xb5\x73\xbf\x76\x57\x5a\x3b\x2f\x92\x3e\x9e\xde\x6c\x0b\x5a\xeb\x95\xd5\x46\xfa\xe4\x5e\xba\xc5\xc2\x06\x65\x61\x4f\x93\x3e\xb9\xd8\x71\xfc\x81\x7c\x72\x03\x3b\x8a\xdb\x89\x71\x8b\x7f\x3e\x48\xfc\x72\x4f\xe9\xcd\xc9\xae\xb5\xa6\x07\xe2\x64\x1d\x7d\x73\xff\xb2\x7b\x60\x6e\x06\x16\xc1\x0f\xee\x76\xd6\x0b\xef\x74\xe5\xd2\xbd\x39\x18\x34\xd1\x8b\x83\xed\x48\xd8\x61\x3f\x6c\x9e\x38\x49\x86\xe3\x66\x38\x91\x1c\x4b\x58\x7c\x92\x58\x90\xe6\x93\xd5\x39\x2b\x0a\xe0\x95\xe4\x24\xd9\x51\x4b\xe0\xcf\x0d\xf2\x1b\xbb\xe8\xeb\x09\x7d\x34\xe8\xe8\x73\xb1\xbf\xe6\x07\x6c\x99\x4d\x27\x55\x37\xc0\xd4\xd0\xcf\x25\x4e\xab\xd3\x4d\xdb\x63\x18\xe0\xc0\x8f\xd2\x35\xa1\x53\x56\xdd\x50\xd2\x7e\x16\xa6\xd1\x90\x2f\xdb\x4c\xbd\xdd\x1e\xf5\xa6\xdb\x67\xd3\xb8\xc9\xcc\xba\x20\xef\x2a\xd1\x87\x8b\xa3\xc4\xa4\xdb\x40\x95\xd8\x67\x89\x75\xb2\xe4\xfc\x98\x14\xdc\x30\x99\x50\x55\xbf\x83\x47\x3b\x4c\x70\x24\xfa\x2a\xd4\x62\x4f\x19\xb2\x34\xbd\xd8\x6c\x35\xd4\x8f\xa0\x9c\x33\x70\xcd\xda\xf3\xf8\x69\x5d\x19\x61\x6c\xb7\x99\xae\x44\xf1\x08\xa4\x8a\xac\xc6\x0c\xc7\x7b\x93\x3c\xff\x70\x5e\x80\x68\xb1\xac\x5f\x9c\xc3\x20\x8e\xad\x68\x2c\x58\xa9\x1a\x93\xaf\x4e\xc5\x51\x43\xbf\xd9\x2d\x3c\xe7\xe3\x25\x6a\x89\xf6\x0e\x05\xec\xc4\x0d\x51\xd0\xac\xb3\xc4\x7a\x73\xc9\xf9\x3a\x69\xbf\x8e\x53\xb6\xbe\xe2\xa7\x4c\xce\x9b\xb4\xda\xf1\xa7\xd6\xf0\xa9\x8a\x6d\x4f\x4b\x34\x53\xe8\x07\xb2\xa8\xa2\x96\x8a\x4a\x7f\x5a\x4e\x11\xd6\x15\xc1\xb3\x15\x24\x1d\x66\x22\x38\x99\xc1\xf1\xc5\x87\xa2\xdd\x41\x0b\xd3\xbd\x63\xb4\xaa\xbb\xac\x62\x65\xf4\x06\x75\xdb\x34\x3e\xea\x88\x5b\x8e\xb0\xd4\x9c\x92\x88\x99\xc8\x4f\x0b\xfd\x1c\xa1\xe7\x8b\x2f\x42\x86\x41\x48\xe3\xf8\x5e\xe2\xac\xe4\x2f\x6a\xf3\x67\xe7\x27\x10\x73\x23\xf2\xa7\x2a\x62\xfa\x0a\xe6\x2d\x7b\xc8\x98\xb6\x53\x4a\xfd\x38\x61\x76\x92\xfe\xbf\x84\x3e\x52\x74\x6a\x2e\x8e\xaa\x47\xa2\x66\x98\xa2\x39\xe7\xcf\x89\xf3\x71\x32\x51\x74\xab\x0b\x61\x98\x0f\x56\xba\x92\x06\x7a\x8d\xa0\x38\x00\xec\x74\xe3\x5d\x93\x50\x16\x51\x89\x12\xe9\x20\xc1\xb5\x68\x3c\x5c\x63\x6e\xda\x8c\x99\x5d\x0b\xdc\x65\x61\x89\x16\x59\x26\xbb\x6d\x87\x7f\x2c\xd3\x47\x88\x8e\x1f\x0b\x13\xb7\xc6\x16\x5a\x49\x35\x0d\x12\xeb\x4f\xca\xce\xfb\xca\x45\x77\x4c\x2e\xa2\x19\x50\xe4\xf8\x9b\xf0\xb4\x9d\xe0\xe3\x26\x13\x0b\x21\xf4\x0c\x20\x84\x98\x83\x8f\x93\x3b\x3a\xef\x5c\xbb\x11\xb8\x7e\x28\xde\x13\x01\x72\x31\xd7\x28\x80\xc5\x38\x17\x3a\xfc\x3f\xb4\x72\x56\xdd\xa4\xa0\x52\x11\x78\x79\x1b\x31\xab\xf9\x27\xf4\xf5\x10\x1d\xa9\xd8\x0b\x18\x75\x7b\xa1\xa8\xeb\xc2\xc9\xcb\xec\x2b\x9a\x98\x64\x62\x82\xeb\x9b\x4b\x2c\x60\xa9\xbd\xe2\x4a\xfb\xaa\x58\x6b\xfe\x62\xf1\x60\xf5\xe9\xe0\xcc\x73\x2d\xf2\x3d\xa1\x8b\x72\x7e\x47\xe9\xb4\x48\xb2\x77\xc0\x66\x95\xe5\x8a\xed\xd4\xa2\x68\xfc\x42\x47\x7a\x80\xe0\xe7\x92\x1b\x3b\xa3\xf2\xcf\xa7\x3a\xa3\x90\xf3\x2d\x7b\xbc\x62\x3e\x5e\xc9\x1e\xaf\x64\x8f\x77\x59\xf0\x3b\xcb\xf4\x51\x62\x45\x26\x3c\x53\x6e\xfc\xa8\xe4\x7c\xbd\x54\x7c\x2f\xcb\x82\x85\x86\x22\x61\xca\x6d\x97\x21\xca\xb2\xe2\x69\xb9\x9b\xb3\x22\x5e\xcd\x30\xd0\x70\xc4\x60\xf6\xca\xaa\x94\x05\x41\xcb\xf6\xe2\xa8\x21\x82\x61\x95\x1c\xa8\xd8\x28\x28\xdc\x56\x0f\x39\xd1\xa1\xef\x5d\x45\x85\x29\xcb\xb0\xdb\xca\x07\xa3\xa5\x74\x50\x36\x3b\xf0\x00\x33\xd6\x9e\x59\x51\xb0\xde\x22\x61\xd5\x86\x07\xcd\x2d\xca\x1f\x10\xfa\x8b\xb2\xf3\x9d\xf4\x8e\xbb\x88\x73\x1b\xe9\xf1\x90\x8c\x67\x6d\x5b\x2c\x15\x01\x2b\x8d\xae\xae\x2a\xcf\xc5\xa5\xfe\x32\xdf\x78\x50\x4f\x5e\xe9\x25\xb0\x9e\x21\xd4\x60\x13\x49\x35\xc4\x0b\xa6\x0e\xf2\x82\x32\x3d\xbf\x16\xc5\x4b\xbe\xe7\xb1\x50\xf2\x8e\x7f\x2b\x39\xdf\x28\xe5\xaf\x76\xe4\x1b\xea\xc1\x9f\x3d\xcb\x68\xeb\x4a\x21\xd3\xd0\xb9\x85\x7a\xa3\xf3\xe6\xc6\x47\xfa\xdf\xdd\xfa\xf3\x03\x6f\xef\x37\x11\x2a\x55\x59\xeb\x95\x84\x1e\x1c\x44\x2e\x16\xe7\xe9\x77\x6e\x14\xed\xf5\x9b\x7f\x5e\xe5\xd4\x97\x21\xbc\xa2\x54\x4a\x3e\x01\x3d\xf5\xe8\x0e\x2e\xde\x67\xe6\x26\xad\x9b\x9c\xeb\xc5\x9f\x39\x15\x5a\x3b\x1d\x68\x6e\x72\x7e\x24\x88\x6a\x10\x2f\xcc\x5f\x51\x48\x1a\x4f\x2b\x63\x21\x29\xb4\x41\xcf\xe1\x4d\x0b\xc7\x8b\xe5\x3a\x0b\xda\xcf\x41\xbf\x26\x5f\xeb\xfa\x45\x31\xae\xb9\x99\x29\x39\xae\xb9\x99\xa9\x41\xbf\xc4\x5f\xe9\xfa\x95\xbb\x09\x1d\x5e\x11\xe9\x9d\x13\xeb\x4e\xe2\x1c\x52\xbf\xf4\x6f\x21\xf5\xab\x3c\xd4\xb6\x56\x42\x41\xf3\x3f\x73\x65\xe1\x44\x23\xca\xab\x56\x03\x23\x84\x8d\x7c\xd3\xf4\x66\x4a\x15\x3f\xf1\xac\x27\x38\x93\xd9\xaf\x7e\x4e\x4a\x4b\x50\x66\x85\xef\xd1\xec\x3d\x73\x0e\x7e\x58\xa2\x8f\x8a\x99\xeb\x1d\x0d\x83\xd6\x7c\x14\xa5\x87\xfc\x80\x25\xad\x24\x65\x75\xeb\x1b\x25\xe7\xf3\xa5\xe2\x7b\xa8\x51\xcb\xf2\x70\x71\x53\x24\x3d\xc7\xd2\x10\x4a\x56\x61\xa2\xd8\xa6\x4a\x3e\xcf\xdb\x42\x7d\x2d\x8e\xa2\xd4\xae\xf9\x01\x88\xfd\x94\xd5\x25\xa2\x48\x17\x74\x86\x50\xd3\xb3\x97\x6b\x2d\x86\x51\x38\xd6\xb9\x55\x54\xf1\x16\xe6\xa4\x4d\xcc\x63\x61\xcb\xf0\xa3\x8b\x01\xd4\xdc\x20\x61\xb9\xaf\x83\x09\xac\x9f\xae\xf3\xb9\x07\x17\x21\xa4\xc0\x59\x6a\xa6\xca\x61\x28\xa4\x1b\x1e\xc8\xed\x34\x32\x27\xfe\xd3\x84\x3e\xba\x93\x48\xb5\xee\x21\xce\x0b\x48\xa7\xbb\xaa\x78\x47\x67\xdd\x81\xeb\x00\x8d\x5c\x25\x01\x79\xf2\xb4\x17\x21\x63\x12\x94\xe0\xd1\x2a\x29\x6b\x6f\x81\x0b\x47\x59\x97\x40\xa0\x77\x63\x98\xef\x2b\x51\x0a\xc6\x01\xe4\x99\x6f\x2a\xd1\xe9\x81\x8a\xcb\xa8\x57\xf3\x6c\xf3\xcf\x49\x76\xaf\x0f\xd6\xa9\x54\x07\x08\xb9\xd2\x5e\x15\xe9\x31\x44\x2a\x7c\x38\x10\x24\x2c\x2d\xf0\xfc\x46\x75\x3f\x4d\x33\xdc\x9c\x37\x92\xe8\xcd\xf0\xbd\x95\xba\xab\x0c\x9c\xfa\x6b\x98\x11\x4a\x73\xeb\x19\x07\x0b\xed\x35\x79\xaa\x58\x86\x3e\x1a\xa7\x0a\xfa\x4e\x42\x33\xbb\x8a\xf5\x3a\x32\x18\x66\x62\x5e\xbe\x99\x9f\xb8\x27\xa9\x36\x37\x37\x6d\xf0\x66\x87\x59\xa3\xaf\x21\x54\x5a\x85\xac\x97\x0e\x28\x1f\x17\xa6\xe1\xbd\x7c\x7f\x8f\x8a\xf6\x06\xee\xad\xa8\xad\xd5\xd6\xc7\xaf\x12\x5a\x60\xa3\xb2\x3e\x4a\xe8\x91\x81\xba\xdb\xd6\x44\xbe\xe7\x61\xfb\x57\xfa\x15\xf2\xfa\x9b\xa2\xe4\x0e\x6c\xca\xae\x02\xff\x6d\x84\xee\x10\x86\x09\xeb\xb5\xc4\x79\x36\x59\x6b\xb3\xb2\xb4\x59\x09\xf0\x11\xbb\x11\x34\x97\xfd\xb0\x93\xa5\x20\x8c\xec\x42\xe3\xca\xa2\x34\xb7\x71\xb5\x4d\x3e\xd1\x12\x67\x09\x2e\x6c\x47\x2e\x1c\xe9\xc6\x1c\x3e\x72\x5e\xaf\x5c\x3b\x59\x6d\x3d\xeb\x25\xe7\x39\xdf\xd4\x83\xad\x3a\x21\x1f\xb3\x57\xda\x21\x8f\x6e\xa3\x91\x8c\x63\xdb\x17\x8d\x6b\x75\xfb\xec\x05\x86\xd4\x13\xb3\x80\x71\x4d\x36\x8c\x52\x81\x91\xa9\x4b\xeb\xb2\xa8\x30\x5f\xd1\x3f\x80\x70\x28\x69\x4f\xd1\x00\xa9\x46\xed\x34\x5b\xd6\x8f\x33\x4a\x9b\xb9\x58\x88\x19\x51\xb7\xa9\x5f\x67\x95\x0d\xf2\xb9\x73\xb6\x7c\x41\x5b\xee\xec\x33\xe5\x8e\xf9\x83\x92\xe6\x8e\xb9\xa7\x6f\x3c\x79\x27\x77\xf6\xdf\x12\xa1\x96\x1d\x46\x46\x0b\x19\x30\xb5\xcd\xc1\x89\x5d\xc4\x1c\xa8\xe2\x05\xe2\xe4\xa9\xb4\x0a\x05\x5e\x73\x15\x9c\x7f\x57\xb2\x3b\xc3\x73\x69\xcd\xd5\xdd\xd0\x5d\xe6\x44\xf5\x33\xf0\xa2\xff\x93\xcc\x84\xf2\xd7\x83\x56\x1c\x56\xfd\x07\x07\xfa\x1b\x49\x9b\x6f\x66\xa0\x22\xf2\x3a\xcb\x3a\xb3\x39\xd1\x3f\x56\x52\x39\xd1\xdf\x5b\xa2\x57\x6e\x72\xcc\x98\x92\xed\x5f\xc9\x26\x6a\xd7\xea\x43\x05\x46\xcf\x17\x42\x8a\x1f\x91\xa7\x04\xea\x0a\x42\xf0\x79\x9d\x1f\x32\x42\x2f\x5a\x87\xd7\x39\x33\xb5\xe7\xa2\x46\x53\xe1\x50\x61\xa6\xc5\x69\x62\x9e\xb9\x1e\xe0\xd5\xce\x78\x0a\xf6\x9b\x7b\x7b\x10\xaf\xb4\x0e\x74\xf3\x20\x66\xb3\x50\xe8\x36\xfc\xea\x10\xdd\xdb\xef\x62\xa8\x3a\xaf\xd6\xdd\x43\xce\xe1\x82\xeb\xb9\xf4\x75\x2a\x55\x9f\x2b\xe5\x17\x1c\x89\x40\xd0\x55\x59\x0c\x38\x42\xe0\x7e\x95\x93\x04\x4a\x32\x9e\x24\x82\x62\x36\xc8\x47\xca\xf4\xa5\x84\x5a\x81\x9b\xa4\x8b\xb1\x1b\x26\xd0\xfe\xa2\x5f\x67\xd6\xaf\x77\xce\x0d\xd9\x85\xeb\xf0\x57\x9d\xa9\x45\x59\x0c\x0b\x2a\xc9\x8b\x93\x8b\xe8\x7b\xaa\x3e\x23\x4f\x36\x51\xc8\x24\x49\x01\xd6\x16\xe0\x78\x15\x7a\x13\xdd\x51\x67\x49\xe2\x2e\x33\x6b\xd6\x99\x98\xb0\x57\x9a\x75\x38\x16\xbb\x1e\x28\x8d\xe2\x9e\xd4\x80\x30\x37\x6f\xea\xfa\x41\x62\xbb\x4b\x9c\xec\x52\x99\xd9\x0f\x3e\x66\x84\x74\x1c\xa2\xdb\xb1\x92\xbe\x75\xa5\x33\xbe\x08\xda\x04\xd4\xd5\x97\xa9\xf1\x54\x6f\x47\x12\x31\x8e\xe2\x76\x0e\xab\xad\x77\xd0\xb9\x78\xc1\xd8\x15\xaa\x89\x51\x99\xa1\x74\x31\xe6\xc2\xf8\x10\x3f\xa5\x8e\xda\xc7\xc2\xd5\x30\x5a\x37\x5b\xdb\x27\x0a\x66\x3e\xd6\xf9\x5f\xb2\x60\xa6\xbe\x9e\xaa\x45\xe3\xa5\xdf\x1f\xee\x95\xde\x3f\x23\x20\x80\xd5\x3c\x6b\xd8\xc9\x5d\x2a\x4a\x40\xaf\x15\x26\xd7\x10\x30\xdf\xda\x42\xc0\x0c\xaa\xf5\x7c\x9c\x48\x08\xcc\xfb\x88\x13\x49\x44\xb4\x3e\xbd\x45\xbd\xc8\x58\x11\xef\x88\x17\x55\x13\xde\x87\x2a\x6b\xa4\xc9\xf8\x7a\x14\xaf\x06\x91\xeb\x25\xe3\x59\xd2\xc6\x64\x5c\x50\x0a\xef\x4c\x76\xf9\x94\x72\x8c\x6a\x1c\x6d\x4b\x75\xeb\x5b\x75\xfb\xb0\x8e\xa4\x79\xc7\x29\x22\x69\x6e\xf9\xe9\x20\x69\xb4\xa1\x3c\x40\xaa\xbd\x45\xe1\xe3\xac\xab\xfb\x13\x85\x1d\x51\x34\xf7\xd1\xfe\xb9\x16\xc0\x67\x7e\x97\x3a\xfb\xcd\x4b\xea\x80\x9e\x57\xcb\x74\xd5\xb6\xb2\x41\xbe\x3b\x4c\x6f\x2d\xd1\x87\xe6\xca\xdf\x5b\xff\xa4\x2a\xd8\xdf\x4f\x8e\xf8\xa1\x5f\x6f\xd6\xb5\xb3\x60\x82\x4f\x09\x4f\x91\x0f\xd0\xf2\x90\xad\x07\x2d\x59\xb0\x1a\x6d\xd1\x2a\x7f\x0c\xd6\x2b\x5f\xf7\xd3\x15\x2e\x79\xf8\x69\x31\xaa\x81\xcb\x28\x33\x45\x56\x63\x37\x59\x81\xf4\x2e\xbc\x51\x5f\x1a\x76\x75\x1f\x8c\x2c\x9b\x6d\x66\x72\xdd\x63\xef\xe2\x1f\x93\x46\xc1\xa2\x17\xb8\x52\x9e\x44\x11\x98\x88\xd1\xb5\x03\x1d\xda\x6d\x56\xc0\x2b\x69\xf5\xd1\x7f\x53\x95\x23\xff\x4f\x22\x6b\x6c\xab\x94\xac\x6a\x1a\xa4\x76\x2b\x5f\xcb\x8a\x8f\xbb\xa8\x51\xf0\xdd\x1a\xd9\x1e\x96\xae\x6e\xfa\xc9\x8a\xbd\xc4\xd2\x75\xc6\x42\xe5\xd7\xb2\x9f\xca\xe2\x08\x98\xb1\x9e\x36\xd6\x18\xe0\xde\x33\xc9\x02\xc7\x2f\x58\x5f\x71\xd3\x31\x3f\x19\x73\xc7\x3a\xf0\x48\x6d\x8e\xde\x54\xa6\x3b\x65\x5c\x8c\xf5\x8a\xd3\x11\xa3\x74\x5f\xc9\x08\xd2\x16\xb1\x37\xb7\x34\x59\xdc\xb2\xa3\x35\x66\xd4\x47\x47\x72\xca\xb2\xfd\x4a\xe9\x5f\x8d\x9a\x61\xaa\x12\xd5\x26\x5a\x7b\x59\xa4\x38\x58\x50\xb4\x23\x1b\x4a\x46\x38\xee\x35\x54\x01\x6f\xe5\x45\x91\xd5\xce\x2b\x78\x24\xb4\x57\x59\x2b\xc9\xd2\xd0\x4a\x53\x5c\x96\x1d\xd0\x0f\xed\x28\xf6\x70\xb5\x91\x06\x71\xf6\xb2\x40\x28\x4d\x53\x19\x78\x39\xf9\x3c\xac\xf9\x6c\x7d\x5c\x44\xb9\x8e\xf1\x8d\x34\x26\x50\xa1\xe3\x38\x8a\xf1\x0b\xe0\xff\x31\x55\x36\x96\xde\x55\xa2\x3b\xe5\x38\xac\xe7\x94\xe8\x9e\x9e\x49\xa8\xe7\x22\x6f\x51\xbc\x00\x87\xbc\x2f\x13\xf9\x53\x92\xbe\x90\x4f\x98\x77\xde\x50\xb2\x61\xd6\x74\xe3\xbc\x64\x04\x7e\xcd\xf6\xc3\xa4\x59\xab\xf9\x55\x90\x4d\x86\x09\xc9\x63\x29\xc4\x8b\x9d\x49\x0a\xbf\xa0\x11\x79\x63\x72\x22\xe8\x9f\xec\xa4\x95\xc1\x4e\x7d\xd6\x6b\x77\x3a\xd7\xe4\x2f\xe6\x0b\x88\xb4\x67\xe4\x36\xd8\xec\x49\xa2\x58\xcb\x06\xb9\x77\x07\x7d\x36\xa1\x0f\x53\xdc\x49\xd5\xf0\x6f\x48\x9e\xf3\xa4\x45\x83\xcd\x64\x7c\x4c\x4d\xde\x2e\xe4\xa8\x90\x0c\x58\x86\x63\xe6\x58\xf8\x6e\x2d\x21\x97\x46\x7c\xc6\x7e\xbe\xb5\x44\xa9\xd2\x9b\x13\xeb\x07\xc4\x99\x9d\x37\x07\x26\xb4\xc7\xac\x0b\x78\xca\x15\xe9\x04\xf3\x87\xaa\x91\xc4\x4c\x90\x6e\xd8\x4c\x27\xe9\x04\xbd\x66\x73\x1a\x96\x3a\xda\x3d\x40\x46\xe8\xcf\x1b\xf2\xb7\xc1\x37\xe0\x58\x9d\xc5\xcb\x6c\x6c\x95\xb5\xac\x1d\xd6\x36\x2e\xaf\x29\x7f\xf2\xff\x57\xf0\xa4\x34\x58\x5b\x3b\xad\xed\xf0\x16\xa5\x77\x10\xfa\x08\xa8\x88\x02\x9b\x9d\x79\x6a\x41\x12\xb9\x20\x4f\x36\x17\x24\xe3\x49\x2b\xee\x9a\xe2\x23\x46\x81\xf2\x40\x99\x92\xf2\x3c\x25\x2b\x94\x85\x5f\xc9\xaf\xc9\xaf\x53\x4b\x5a\x12\xae\x65\xa1\xc8\x79\x67\xf9\xb2\xbe\xeb\xe2\xd1\xb6\x9b\x76\xcc\x6a\x59\x9c\xe7\x72\x76\x5d\x7c\xa9\x83\x99\x42\xa3\x4f\xa3\x03\xbf\x4c\x1f\x02\xd4\xa5\xa6\xe1\x5a\x39\x0d\x17\x99\xd3\x80\x34\xa8\x68\xb2\x37\xb9\x7d\x8d\x68\x22\xf6\x73\x4a\xc3\x78\x4f\x9b\x88\xcd\xf7\x18\x3b\xac\x7f\x59\x0a\xdc\xb3\x45\x32\xbe\x99\xf4\xd4\xd8\xa2\x20\x58\x72\xab\xab\x93\x50\x08\xc2\x7a\x9a\x73\x4e\xe6\x03\xa8\x6c\x90\x55\xea\xf3\xc9\x59\xf3\xe1\xdc\xf8\x2b\x72\xb9\xaf\xc3\xe3\x37\x5e\x06\xbf\xb0\x68\x06\x74\xfa\xcc\xbb\xbb\x67\x54\xbf\x23\x48\x10\x26\x11\x5f\x35\x17\xe2\xb7\x77\xd2\xfd\xbd\x7b\xeb\x87\xcb\xc7\xe0\xa8\x30\xe5\xb2\x7a\x14\x2e\xb0\xd4\xfa\xb3\x1d\xce\x41\xd0\x2e\xb1\x22\x07\x9f\x89\x8e\x76\x3e\x0f\xde\x82\x0e\xc6\xd8\x9a\x38\x79\x54\x36\xc8\x6f\xed\xa0\x77\xed\xa0\xe7\xd5\xdd\x13\xc7\x42\xc5\x5b\xac\x67\xec\x38\xd5\xd4\x20\x1f\xd9\xbe\x08\x75\x91\x4e\xe4\x14\x56\x35\x02\x6d\xef\x0a\x18\x73\x33\xeb\x80\xed\x35\x63\xb9\x81\x45\x57\xed\xac\xbc\xd0\x12\x44\x49\xba\x4b\x49\x14\x34\x53\xb5\x0f\x76\xb1\x13\x07\xec\x8b\x77\xdb\x90\x96\xbd\xc1\x62\x4e\xb3\x12\x7e\x1b\xa5\x6e\xd0\xb9\x13\xc2\x32\x6c\x14\x69\xc6\xaf\x62\xa3\x7b\xf7\x3c\x66\x77\xc5\x9e\xc8\x7d\x0f\x22\xa1\x83\xaa\xb0\x08\x22\xb2\x3d\xfb\xea\x52\xcb\x8e\xa3\x26\xd6\xb1\x6f\x36\x2a\x2a\xf3\x89\x38\xf9\xed\x51\x9a\xa5\x38\x94\xfa\x09\x57\x2f\xa7\x65\x11\xf9\x75\x15\x5e\x2f\x33\x47\x45\xf6\xbe\x3d\x8f\x19\xe5\x7d\x85\x3d\xb9\x6f\xcf\x63\x64\x57\xf3\xa3\x0b\x23\x8f\x99\x9a\xda\x52\xe6\x23\x02\x1a\x41\x7a\x80\x3c\x17\x7e\x85\x55\x84\xb0\xac\x08\xda\x99\x85\x96\x16\xaa\x2b\xcc\x6b\x06\xcc\xdb\x0d\x73\x0e\xfc\x35\x5d\x61\xbe\x50\x04\x93\x54\xb8\xfc\xf9\x74\x87\x72\xba\xda\x3d\x50\x10\xbb\x2e\xee\xc2\x04\x27\x60\x5e\xe5\x6f\x0b\x97\x95\x39\x9c\x28\x61\x6d\xcb\x13\x7a\x98\x6e\x60\x89\xd3\x44\x62\x37\x1b\xfc\x88\x93\x7f\x0a\xa1\x37\xbc\x7b\x81\x5b\x65\x15\xfb\x28\x94\xed\xe5\x6c\x92\xad\x8b\x76\x62\x96\x89\x4f\xd0\x45\xa1\x55\x40\xc9\x31\x2f\xb1\xa3\x30\x8d\x44\x36\x2e\xb3\xed\x51\x3b\x5d\x69\x26\xe8\x9a\xc3\x39\x74\xd3\x4c\xda\x5f\x8a\x5d\x8f\x62\x7f\xd9\x0f\xbb\x92\x99\xfe\x7d\x5b\xc0\xa5\xf9\x24\x25\x05\xe4\x4e\xdf\x76\x6e\xaf\xe4\xe1\x26\x67\x60\x8d\x20\x6a\xd5\x59\x98\x5a\x3f\x38\xc7\xb9\xb4\x5f\xd6\xd0\xc6\x0f\xfe\xe0\x1c\xfa\x9d\x6d\x74\x67\xdd\x3d\xb1\xd0\x8c\x97\x99\xf5\xb5\x6d\xa7\xca\x09\x7e\x6b\x5b\x31\x27\x68\xdb\xff\x89\xa4\x38\xdb\x5d\x8a\x90\xda\x54\x9f\xcd\xd7\x4e\x89\x19\xc8\x26\xe1\xfb\xda\xfe\x56\xb9\x89\xe4\x16\xe5\x1a\xf3\x11\x83\x2f\xf2\xcd\xb8\xe7\x54\x39\xc1\x41\x95\xc3\x62\xd4\x76\xb3\x72\x1a\x7b\x25\xfa\xae\x1f\x2e\x20\xe9\x7a\x7e\x32\x9b\x3c\x97\xcf\x5c\xb3\x61\xfb\xf5\x3a\xf3\x7c\x37\x65\x7a\x24\x82\xb9\xce\x62\x27\x8e\x62\x30\xba\x72\x8d\xe5\x19\x49\x14\x78\x02\x3c\x2b\x76\x90\x17\xc1\xe4\xb0\x13\x7c\xc3\xd8\x7b\xc5\xa6\xd5\x27\x54\xec\x3b\xfe\x26\xbc\x01\x6c\x63\x89\x9f\xb3\x57\x7d\x7e\x0c\x1b\xed\xd8\xed\x5a\x33\xe6\x5b\x6f\x34\xb7\xcd\xf2\x7d\x82\x56\x73\x0e\x6f\x30\xde\xb7\x6d\x21\x38\xc6\xa6\xc0\x5d\x0a\x7b\x4a\x3f\xbf\xad\x4d\xee\xbd\xff\x94\xa9\xfd\x47\x43\x7d\x52\xfb\x99\x93\x76\x9d\x08\x7c\xf3\x64\xeb\x45\xeb\x61\xe7\x0d\x02\x8c\x42\x6c\x0d\x93\xb8\x6b\xfe\x09\xe6\x9d\x02\x89\x73\x32\x6a\xa3\x15\xde\x19\xfe\xd4\xa5\xed\x6b\x3a\x00\xed\x0b\x42\x35\x84\x03\xa8\xd1\xa3\x5d\xbe\xaa\x68\x14\x33\x95\x88\x3c\xd5\x55\x57\x34\xaf\x6d\xcb\x36\x32\x2e\xd8\x5e\xf8\xdd\x3e\x05\x02\x52\xb3\x29\x72\x4c\x72\xfe\xce\x10\xbd\x74\x93\xd0\x37\xeb\x4d\x43\xce\x9b\x48\xc7\xdb\xa6\x77\x59\xe1\x8c\x5a\x0d\x2c\xa2\x0c\x56\x44\xf1\xa4\x2a\x12\x07\x46\x07\xe3\x85\xf6\x18\xc1\xce\x1f\xec\x15\x27\x38\x14\x37\x03\xb6\x41\xbe\x5f\xa2\xcf\x2c\xd1\xed\x88\x90\xb5\x7e\x48\x9c\xb7\x13\x0d\x2d\xab\x61\xfb\x25\x88\x36\xaa\xd9\xcb\xbe\x67\x22\xb8\x90\x20\x65\x32\x12\xd0\x97\x02\x7f\x15\xb0\x73\x08\x30\x55\xd5\xdf\x96\x7d\xa1\x88\x00\x96\xaa\x95\xdd\x80\xd6\xb3\xba\x4b\x98\x3b\x07\xb4\x49\x3e\x3f\x2c\xf4\x2a\xf6\xbc\xc4\x3e\x72\x85\xe9\x48\x33\x49\x61\xf0\xa7\x58\xd1\x77\x0a\x51\xbb\x01\x85\xf9\xb0\x3c\xe7\xc6\x58\x24\xb5\x3f\xcd\xd8\x45\xdd\x71\xf0\x17\x43\xbd\x52\xf6\x77\x02\x0a\x5a\xbf\x3b\xe4\xbc\x91\x74\xba\x7b\x46\xa9\xac\xe8\x7b\x7d\x12\xd9\xf7\x36\x41\x64\xcd\xcd\x13\x59\xf3\x2c\x25\xb2\x55\x41\x64\x55\xe7\x86\xcd\x13\x59\x37\xa4\xa7\x4e\x63\xbf\x3b\xd4\xeb\x58\x5c\x0c\xed\xb4\xfe\xa1\xec\xbc\x8e\x14\xdf\x3b\x53\xf4\xd5\xe1\x6b\x7d\x52\xd7\x87\x4a\xd4\x15\x33\x7b\x93\x73\x78\x53\x33\xdb\x01\x95\xaa\xcf\xe7\x57\x09\x3d\x4f\x80\x5e\xe5\x4c\x7d\x82\xd0\xf1\x9e\x86\x68\x31\x36\x09\x3f\x7d\x11\x31\x1b\x31\x10\xdd\x88\xfc\xbf\x22\xbb\x66\x10\x61\x9f\xf6\xa1\xd4\x4d\x56\xc1\x24\x84\x25\x46\xc7\x1a\x91\x37\xa6\x5c\x53\xe3\xb2\xde\x21\x5c\x62\x27\xd2\x71\xfa\x7f\x29\xbd\xa0\x07\xa1\x70\xf9\x6d\x7d\x82\x3a\xa3\x9a\xa5\xd8\x55\x52\x5b\x46\x2f\x60\x35\x37\xe9\x04\xae\x6c\x90\x77\x0f\x6f\x41\x08\xb6\x80\x93\x67\xca\xfb\xfe\x51\xdd\xfb\xfe\xae\x53\xce\x03\x74\x4b\x0e\xc1\xa8\x3c\xf0\x57\x9c\x21\xfc\x62\x85\x7e\x52\x02\x18\x3f\x48\xe8\xc5\x03\xa1\xdc\xf9\x86\x04\xb7\xd6\x33\x89\xbe\x85\xf2\xc8\x44\x50\xbc\xcf\x30\xa0\xae\x42\xbf\x40\x14\x34\xea\xe3\x64\xb0\x2a\xc3\x38\x10\x04\x24\x3e\x87\x14\x97\x82\xfd\xa9\x0c\x42\xc3\x1f\x3e\x40\x9e\xd8\x1b\x16\x71\xa9\x75\x71\x37\x58\x04\x8c\xab\x10\x0d\xf1\x1e\x42\x47\xfa\x5c\x5c\xeb\x37\x88\x33\x6e\x7a\x26\xdd\x14\xc7\xc6\x84\xbb\x0a\xe6\x86\x6f\x52\xb9\xf9\x37\xc8\x31\xba\xa0\x39\x26\x32\x77\x47\xbb\x19\x88\x0b\x52\x37\xac\xb2\x44\x61\xe1\xc4\x41\x4d\xf0\x56\xc3\xca\xfe\xdc\x1d\xbd\xaa\x91\x6b\x6b\x69\xdd\xbf\xdd\xb9\xb8\x0f\xaf\x62\x5b\xf7\x4d\xe7\xe2\x5d\xdb\xe9\x13\xb5\xb1\xcc\xca\xb1\x5c\xee\x56\xd3\xa6\x69\x66\x91\x7e\xa0\x6c\x4c\x3a\xf5\x14\x0f\xe9\xad\x44\x03\x00\xdc\x4d\x9c\x67\x91\x4d\x38\xec\x13\xe9\xb1\xcf\xd1\x67\xb1\x6c\x6e\x26\x2c\x1e\x5b\x6e\xfa\x1e\x13\xae\xee\xbc\xa7\xfb\x9e\x5c\x34\x06\xfc\x89\x9d\xa7\xb7\x0d\xd1\xf3\x52\x37\x5e\x66\xa9\x4a\xad\xfa\xbd\xb2\xf3\x97\xe5\x5c\x8a\x4f\xbe\x98\x03\xf4\x3b\x43\x79\x24\x2c\xf6\xdd\xc0\x7f\x2a\xd8\x32\xb4\xd8\x0d\x08\x33\xaf\xbb\x8d\x31\xcc\xa3\x09\x92\x92\x0f\x96\x9d\xe0\x0b\x9c\xf8\x6b\xa0\x2c\x89\xbb\x6a\x24\x59\xcb\x5e\x14\xb2\x2c\x33\x80\x1f\xa6\x71\xc4\xb7\x1f\x08\x73\x11\xed\x89\xd2\x26\x41\x53\xb7\x90\x75\xd2\xf9\xee\x6b\xe5\xbc\x31\xe0\x43\xe2\xd2\x61\xa1\xc6\x20\x8d\x88\x9d\xb4\xc2\xd4\x3d\xa1\x80\x13\x38\x4f\xa8\x9a\x9a\x85\xc8\xb3\x81\xa8\xae\x8e\xe2\x10\xb5\xc8\x32\xd4\x06\xf2\x0f\xca\x9b\x31\xb3\x1b\x12\xc7\xfc\xd3\x01\x40\xe8\x72\xef\xf6\x6d\xf4\x9a\x53\x0c\x82\xb2\x3e\x39\xe4\xbc\x87\xf4\x7c\xac\x87\xba\xbf\x39\x55\xbf\xe7\x47\x7b\x65\x97\xbc\xbd\x4c\x5f\x94\x1d\x26\x6f\x2b\x39\x1f\xee\x7d\x98\x2c\x88\xdc\xc2\x00\xd6\x9e\x67\xc9\xf6\x37\xcf\xca\xa3\x65\x2a\x0e\x40\x81\x73\x73\x9f\x07\xa0\x8e\x11\x6d\xbe\x59\x73\x3c\x1f\xd0\xa6\x93\xe2\xa7\x86\xa8\xad\xf5\x2f\xcb\x5d\xcf\x75\x2b\x51\xc6\xc5\xba\x7b\xc8\xf9\x0a\xc9\x4a\xbf\x14\x56\x40\x9d\x9c\x99\x9a\xb7\x77\x4d\x9f\xa8\xd8\xce\xde\xcb\x2f\xaa\xec\xbd\xe4\xb2\xca\xde\xca\xde\xf1\x8b\xf6\x3b\xbb\xdb\xca\xa1\x0a\x3d\x7e\x93\xe5\x50\xd9\x09\xbe\x0d\x45\x56\x85\xac\x37\xbc\x03\x26\xc7\xcc\x67\xba\xe0\x4b\xeb\x6b\x35\xd3\xf8\xf9\xb3\xea\x7b\xf1\x06\xf9\x68\x89\x56\x29\xfc\x6d\x3d\xc9\x99\x85\xa1\xe8\x3a\x7b\x9b\xb6\x3e\x33\x67\xe3\x64\x60\xf6\x63\x26\x32\x28\x00\xf9\xe6\x87\xaf\xcf\xf6\x7d\x84\x6e\xc7\xee\x5b\x9f\x27\xce\xdb\xc9\x34\x0e\x05\xbf\x15\xf8\x98\xd1\xb8\xef\x81\xb8\xe1\x40\x1d\xb1\xc5\xd7\x84\xe5\x41\x32\x67\x3c\x2e\xa9\xfa\x00\x18\x4f\x14\x35\xd3\xc4\xf7\x70\x2f\xc2\x74\xc0\xe6\xe8\x12\x72\x78\xeb\x30\xfd\xdf\x1d\xe9\xc8\x2c\x69\xfe\xb5\x9d\xce\xcc\x69\x2c\x37\xfe\xda\x2d\x94\xfb\xd6\x11\x75\x2b\x55\x6d\xe7\x20\xbb\x67\xca\x33\x6a\x8b\x5e\xd6\x51\x30\x75\xd9\xb0\xa7\xa5\xd2\xb8\xd7\xfb\x40\x36\x61\x5d\xa3\x0e\x64\x5a\x77\x70\xf8\xfd\x14\x1c\xa7\xf4\xe4\x30\xdd\xd3\xdf\xa0\xb4\x32\xe3\xdf\xd9\xe9\x7c\x89\xfc\xf7\xab\xf7\xfd\xc2\x1d\xf4\xed\xaa\xa8\xea\x1b\xb6\xea\x7d\xff\x94\x4a\xa6\x5e\x49\x0f\x6c\x6e\x9b\x41\xb5\xd4\xfb\xb1\xd4\xf7\xbd\x5b\xa5\xbe\xcf\xc6\x52\xdf\x9b\x5f\x5b\xc6\x62\x7a\xf7\xb0\x11\x54\xda\xe5\x71\xbd\xc0\xf7\xdf\xef\x74\xde\x4d\x3a\x96\xd8\xde\x1c\x7b\x3a\x35\xfd\xbb\x37\x7b\x12\x65\xbb\xdf\xbe\x83\x7e\x4d\x96\xed\xfe\xe2\x56\xd9\xee\xb3\xae\x6c\xf7\xa9\x91\xf3\x97\x95\x70\xf9\xf4\x56\xc5\xee\xff\x26\xe2\xe7\xef\x76\xd2\x0b\xfb\x7b\x1c\x82\x93\x3f\xb0\xd3\xb9\xb8\xb0\xfe\x76\xff\x95\xb3\x9f\xbf\x75\x7a\x1b\xf4\xf4\x16\xcb\x10\x65\x7f\xd0\xca\xd9\x97\xd1\x4b\xe8\xfe\xcd\x10\xc7\xd6\x89\xf1\xc1\x92\x9c\x7f\xa5\xf7\x39\x6d\xda\x9a\x1c\xf4\x9c\xd6\x1e\x59\x4c\xe9\x33\x68\xbf\xbc\x06\x2a\x66\x7f\x79\xd8\xf1\xdb\x2b\xe4\x1a\xfa\x0f\xc3\x88\x47\x4c\x9d\x25\x59\x28\xe8\x22\xf6\x51\xce\x5c\x65\x76\x0d\x14\x1f\x59\xcc\x98\xa8\x3a\xad\xe5\x96\xdc\x20\xdf\xde\x49\xdf\xac\x15\xcc\x7e\x35\xa1\x95\x3e\x37\xce\x56\xad\xec\xad\x5a\xd9\x5b\xb5\xb2\xb7\x6a\x65\xf7\x51\x2b\xfb\x1b\xe5\xbe\x59\x60\x14\xa7\xd6\x5b\xca\xce\x25\xed\xf5\xaf\x0d\x16\xc8\x2f\xb4\xb1\xc0\x28\xdc\x20\xff\x5c\xa2\x7f\x47\x44\xc9\xeb\x6f\xf5\x6d\xc6\xec\x84\xef\x7f\x15\x59\xec\x51\xe4\x7a\x93\x35\xae\x4f\x53\x89\x6b\xfa\x4c\xbd\x2a\x75\xd3\x59\xf9\x59\x54\xa2\x7e\xff\x23\xfa\x5d\x5d\x80\x8a\x3c\xef\x11\xce\x35\xed\xd5\xa5\xc5\xd8\x3b\x26\xcf\x30\xde\xc8\x57\x96\xfe\x83\x87\xd3\x2f\x66\x95\xa5\x3f\xb9\x55\x59\xfa\xc1\x5e\x59\xfa\x20\x7d\x1c\xbd\x7a\x33\x07\x00\xad\xa8\xf4\x5f\x6a\x45\xa5\xef\x1b\x72\x6e\x1b\x3a\x5b\x8a\x4a\x9f\x16\x9a\xda\xaa\x43\xbd\x29\x2a\xec\x3f\xb1\x42\x7f\x66\x4f\x2e\x1a\x0d\x8d\xe7\x73\xa7\x43\xe3\x79\xce\xa9\x55\xa0\x3e\x2b\x0a\x50\x6f\xd5\x9f\xde\xaa\x3f\xbd\x55\x7f\xfa\xbf\x7b\xfd\xe9\x2f\x12\xfa\x58\x8d\x69\x62\x3f\x3b\x57\x36\xb3\x5e\x4d\x9c\xc3\x6d\x57\x6d\x33\xd6\x03\x51\x6e\x59\x01\xb6\x22\xb7\x90\x0c\xd2\x3a\x49\xb6\x7b\xb1\xbf\xc6\xe2\x0d\x32\x4d\x27\xa9\xf8\x61\x5d\xee\x8c\xe2\x5f\x2a\xf9\x18\xd4\xae\xc9\x97\x76\xb3\xf1\x21\x43\x1b\x7e\x60\xc8\x40\x1f\x17\x8f\x48\xd6\x36\xb3\x3e\x3f\xe4\xbc\x88\xe4\x2e\x1a\x96\x60\xa8\x0c\x22\xbe\x96\xa5\x0c\x32\x73\x3e\x89\x8c\xff\xe8\xda\x12\x4b\x9d\x41\x6b\x23\x3e\xd2\x8a\x3d\x93\x9a\x45\x04\x1a\xfc\x4b\xa2\xb4\x8e\xa8\xd0\x00\x9f\xf5\x2a\x1b\xe4\xbd\x65\x30\x56\xf3\x47\xe6\xe0\x09\x34\x56\x67\xbf\x95\xde\xa0\x37\x22\x79\x98\xde\x65\xe3\x80\x91\x66\x72\x5a\x60\x5c\xed\xe3\x17\x1e\x07\xf5\xc8\x87\xf0\x9c\x24\x70\xa1\xd0\x05\xa0\x23\x63\x08\xef\xc5\xc0\xde\x35\xce\xfc\xdc\x4c\x0b\xd2\x3e\x2b\x6a\x68\xa8\x42\x74\x46\xa1\x9f\xe3\xe3\xb5\x28\x3a\x2e\xe8\x19\x75\x03\xbc\x34\x8a\xff\x8f\x1f\x07\x7a\xc7\xbf\x97\xdc\xf8\xb8\xf9\x46\xa6\x51\xc0\x65\xef\x38\x67\x46\xc7\xc7\x59\x5a\x85\xa7\x0c\x5c\x18\xe4\xd8\xc1\x72\x26\xd6\xba\xe3\xe7\x6b\x98\x8c\xe2\x6a\x61\x6b\xda\x0c\xe5\xf2\x17\x69\x53\x2c\xfd\x24\x59\x6e\x7c\xbb\x1e\x35\xc3\x34\x8b\x5e\xe6\xdf\x32\xeb\x7e\xbc\x6d\x98\x3a\x9d\x89\x6f\x7a\xcd\x87\x3d\x6e\x3d\x77\xd8\xb9\x97\xc8\x5f\x36\xe3\x7f\x24\x42\x1d\x05\x6b\x34\x57\xe9\xb9\x1a\x68\x27\x4d\x91\x79\x2c\xd2\x52\xf6\x0a\x06\x0d\x7a\x95\x5b\x63\x29\xb0\xe5\x24\x8d\x5d\x5f\xe0\xa2\x15\x4a\x3b\x43\xcb\x0b\x18\x5b\xc5\xb6\x27\xf4\x12\x32\x55\xb7\x99\x48\x26\x25\x3a\x02\x50\xeb\x44\xe5\x31\x5b\x6a\xd9\x73\x47\x17\x16\x61\x7e\x22\xbb\x52\xa9\x8c\x73\xaa\x1e\xbf\x92\xf7\x95\x6f\xca\xab\xc7\xe5\x5b\x49\x65\x83\xdc\xbb\x7d\xcb\xcb\x32\xb0\x97\xe5\x21\x1e\x0b\x58\xca\x24\xe0\xda\xdd\x94\x02\x3a\xa5\xb7\xe1\xfc\x82\xf1\x53\xc6\x29\x4a\xfb\xc6\x96\x97\xa5\x7f\x2f\xcb\x33\x74\x2f\x4b\x7a\xaa\xb0\xbc\x7d\xd9\xdf\x9d\x12\x09\x82\x00\xe7\x53\x0e\xfb\x0a\x4a\xb2\xdf\xd4\xdb\x57\x72\x89\xb5\x5f\xf9\x4a\x1a\x12\xb2\x86\x0e\x12\xc9\x67\x0a\x63\x8c\xfe\xad\x6c\x00\xd9\x72\x0c\xab\xb8\xe2\x99\xf5\x89\xb2\x73\x53\xf1\xad\xd3\x10\x06\xb0\x41\xfe\xaa\x44\x7f\x44\x14\x6a\xff\xbb\xc4\x79\x53\x6f\xd4\xbe\x2c\xaa\xd6\x2f\x56\x5f\x15\x61\x3b\x83\x08\xfd\x7d\x74\x6f\x97\xa0\xdf\xdc\x54\x4b\x74\xfe\x8a\x40\xe7\x1f\x77\x16\x06\x41\xe7\x8b\xe5\x18\x04\x91\xff\x8d\x92\x11\x5e\x96\xeb\x8f\x51\xa9\xcc\x7a\x7b\xc9\x79\x31\x31\x2e\xa9\x95\x76\xc5\x6c\x45\xb5\xac\x8a\xda\x66\xf4\x23\x43\x41\x12\x41\x36\xb9\x59\xcf\xe9\x49\x27\x49\xb9\xee\x87\xfc\x5f\xf7\xc4\x06\x79\x3e\xa1\x93\x94\xff\x69\x5d\x29\x83\xbf\x46\xea\xae\xd2\x94\xf8\xeb\x32\x03\x21\xef\xef\x28\xaa\xe0\x89\xbf\xc6\xcc\x50\xaf\x69\xca\x5b\xb5\xae\x96\x8d\xec\xae\xfb\x61\xb6\x0a\x5a\xce\xb2\xee\xcd\x3c\x40\xe8\x2f\xf5\x5c\x6d\xeb\x8f\x89\x73\x89\xf8\x3b\xb3\xc0\xba\x76\xdd\x0f\xc7\x79\xdf\x51\xf0\x19\xd4\x0e\x47\xc1\xa9\xa4\xc7\xe0\x2f\xd9\x7f\x1a\x06\x7f\xc9\xfe\xcd\x0e\x7e\x63\x98\x8e\x75\x1e\xfc\x5c\xe4\x4d\xf9\x49\xdc\x04\x66\x70\xb0\xe9\x2d\xb3\xd4\x7a\xd9\xb0\xb3\x52\x70\x1d\xc4\x52\xa8\xf2\xaf\x46\x62\xed\xa1\x0b\x7c\x7c\x9e\x7a\xde\xc8\xf6\x03\x6a\x8d\xb0\xf1\x99\x09\xec\x1b\x00\xe5\xff\xc4\x16\x18\x64\x0b\xca\x7f\xc6\x54\x86\xeb\x35\x8d\xa1\x4b\x29\xf1\xbe\x34\x06\xfa\x02\x09\xaa\xbf\x8d\x74\x31\x76\xf6\xde\x61\x00\xae\x9f\xe8\x0f\x5c\x2f\xae\x17\xb4\x52\xa1\xb7\x67\x11\xdc\x4f\xa7\x13\xa7\xd2\x21\x0c\xe5\xbe\xfc\x48\x3f\xc5\x64\x8a\xba\x32\x30\xd6\x3f\xa7\x17\x15\xb4\x59\xa8\x22\x7d\x77\x87\x01\xa7\xed\x3d\x32\x80\xac\xbd\x77\x87\xf3\xb8\x0e\xf7\x8a\x0a\x6b\x14\x3c\xaa\xa3\xd7\x7e\xbc\x6d\x8b\x61\x0d\xc8\xb0\x8e\x49\xf4\xda\xe1\xfe\x8b\xe1\xf7\x5e\xdb\x2d\x3e\xd8\x3f\x1f\x9c\xd1\xf8\x60\x97\x59\xef\x03\x9e\x36\x30\x5c\xac\xf7\x56\xef\x58\x83\xe2\xeb\x83\x6e\x77\x70\xaa\xbf\x7e\x87\xf3\xff\xb1\xf7\x2e\x70\x92\x64\x65\x9d\xe8\x2f\xb2\xba\xbb\xaa\x4f\xcf\x00\x13\x8c\xac\xab\xbb\x72\x0c\xd1\xee\x1e\xb2\xa2\xfa\x31\x30\x4e\xcf\x8b\x9a\x7e\xcc\x14\xd3\x8f\xa2\xab\x66\x86\xe1\xd9\x51\x19\x27\x33\x63\x2a\x32\x4e\x4e\x44\x64\x55\xe7\xcc\x70\xef\x88\xb0\x22\x08\x0a\xe2\xab\x14\x17\x05\x04\x07\x14\x11\x05\x9f\xbb\x88\xe2\x48\x2d\x7a\x5d\x57\xe5\x0a\x8a\x0f\x1e\x0b\x57\xd6\xbb\x0b\xea\xe2\x28\xd7\xfb\x3b\xdf\x77\xce\x89\x73\x22\x1f\x95\xf5\x6a\x06\x48\x7e\x3f\x7a\x2a\x23\x4e\x9c\xf7\xf9\xce\xf7\xfc\x7f\xb7\x0f\x78\x87\xfb\x03\xa5\xbd\x76\x61\x50\xef\x47\xd2\xd6\x9d\x3f\xdf\x47\xfe\x67\xa5\x07\x28\xf1\x2f\x46\xce\xf5\x36\xc8\x91\xe2\xc7\x2b\xb3\xb6\x7e\xc7\x30\xa9\x2b\x54\x58\xcf\x6e\xd5\xeb\x35\x2d\x79\xca\x38\xe3\x61\x32\x4b\x03\x54\x31\xa8\x43\xd6\x07\xb1\x4b\x65\x2b\x55\x0a\x68\xb7\x6c\x85\x41\xec\x7e\xb0\x94\x29\x53\x86\x2e\x85\x06\x5a\x9f\x9e\xe1\xa9\x0a\x29\xc5\xbc\x48\x82\x8f\x6b\xa7\xe2\xd3\x5c\xeb\xdf\x92\x3c\x48\xbb\xba\x76\x04\xb6\x45\xb5\xbc\x38\x65\x47\x4c\xc5\x57\xab\x93\x77\x20\xb3\x30\xbb\x2c\xf9\x53\x9d\xe4\x1d\x84\x3a\xaf\x15\x25\xb3\x7a\x9c\x3e\x79\xac\x42\xae\x32\x1f\xb9\xef\xdb\xf6\x84\xff\xbd\x33\x74\xc2\xd1\x82\x6b\xf7\x63\xe8\x7c\x83\x2c\x95\xe5\x52\xa2\xda\xc4\xbc\x83\xbc\x3c\x64\xee\xe9\x02\x47\x5b\x1e\xce\x3f\x88\xce\x9b\x9f\x7e\xef\xe8\x91\x23\xdf\xee\xf9\xe4\x27\x4c\xa0\x8c\xef\x77\x76\xc0\x96\x7a\xd7\xd9\xbe\x48\x1b\x68\xc3\x2e\xba\x23\xf6\x23\x66\x18\xd4\xf9\xe2\x0c\xe1\x60\x49\x72\x2f\x1f\xbf\x9a\x1c\xdf\x02\x97\xe2\xbe\xe5\x6a\xef\xd5\xce\xc0\xd7\xa6\xfd\xc3\xc8\x34\x6a\x24\x1c\x33\x91\x4c\xfa\x1d\x7c\x2a\x2b\x12\x94\x3f\x4f\x83\x08\x21\x84\x25\x76\x89\x91\xc8\x4d\xa6\xc0\x5b\x73\xdc\x62\x70\x99\x34\x5f\xac\x39\x4f\x92\xc0\x29\x77\xb2\x20\xce\x9b\xdd\x35\xe7\x49\x92\xb5\xd3\x0f\xae\x62\x97\xdb\xb0\xbb\x30\xa4\xf9\x23\x07\xc8\x69\x52\xfa\xca\x3d\xae\x24\xdf\x6f\x51\x38\x2c\x05\x78\x4a\x13\xcb\xc0\x12\x58\x12\xdf\x39\x52\x6a\xcb\xbd\x49\x55\xf3\x1d\x2d\x99\x47\xa7\x17\x56\x66\x60\x75\xaf\x9d\x24\x57\xcb\x11\x62\x5f\xdd\x7f\xde\xe7\xbd\x7b\xdf\x29\xf3\x51\x11\x02\xd1\x3b\xe7\x7d\xb6\x08\x5d\x85\x44\xe9\xbc\xc6\x32\x23\x07\xef\xec\xfc\x1c\x3a\x27\xa4\x45\x41\x53\x6d\xde\x0c\x92\x30\x66\x29\xf8\x14\x36\x03\xb4\x9d\x74\x59\x8e\x20\xbb\x9a\x59\x95\x95\xf5\x13\x60\x0b\xdc\x7c\x9f\xce\x52\x33\x63\x8f\x32\x57\xb7\x82\x76\x71\xc5\x03\xb8\xae\xc6\x52\x35\x7a\x57\xf4\xdc\x3c\xeb\xa6\x2e\xbf\xf7\x73\x70\x6f\x11\x14\x85\x25\xa0\xc7\x3f\x75\xbb\xd1\x1d\x1a\x00\x5e\xb0\x38\xbc\x30\x98\x56\x90\x2e\x4b\x75\x16\xe8\xa3\x45\xed\x87\x78\x2a\x09\x4c\x00\x55\xf3\x0e\xfa\x01\x31\xba\xcc\xba\x8a\xb8\x88\xfe\xf7\xb1\xd2\x89\xc6\x25\x96\x78\x01\xba\xbe\x8d\x21\x6a\xbc\x16\xdd\xbb\x30\x0a\x93\x83\x39\xe5\xb5\x5a\x27\x45\xfb\xb5\x1e\x31\xd0\x49\x74\xeb\x89\x72\x03\x81\xa0\xc5\x57\xcc\xc4\xe9\x18\xc9\xd5\xc9\xb9\xd8\x3c\x98\x8b\x5e\xcc\xd3\xd0\x65\x94\x13\x02\x29\x2b\x11\x73\x7d\xae\x2e\x88\x6d\xda\xcd\xc1\x8a\xd4\xe0\x2c\xa3\x59\x8b\x6b\x98\x18\x31\x3f\x45\x80\x12\xfa\x31\x28\x14\x25\xb8\x77\x15\xb0\x3c\x54\x76\x36\x48\x1b\x66\xb2\x09\x26\x18\x30\x96\x99\x93\x8d\xec\x21\x26\x78\x16\x93\xb6\x14\xb3\x56\x86\x17\x9b\x18\xbf\x9a\x9f\xcc\x7f\xd4\xb9\x89\xdc\xb8\xe5\x7c\x8d\x26\x9e\xd0\x25\xd2\x87\xe0\xb8\xcf\x55\x47\xfc\x59\xe7\xad\x74\xc9\x46\x51\x89\xde\x9e\x6a\x50\xa7\xb8\xab\x6e\x42\x5b\x65\xf4\x42\x62\xd1\x26\xf7\x2e\x55\xf7\xb3\xfb\x02\xf9\x02\x22\x91\xe1\xef\xd2\x43\xeb\xad\xca\x3f\xe5\xf4\x4d\x2e\xf2\xfb\x8e\xd2\x73\xbd\xdf\x31\xc4\x50\x2b\x95\x88\x3a\xe2\xb0\x61\x81\x9b\x46\x9e\x3e\xca\xe0\x3c\x29\x4c\x30\x6b\xcf\xa8\x09\x42\x9d\x37\x38\x51\xc8\x0b\xa0\xa0\x54\x62\x9b\xae\xa0\x4b\x89\xb4\x33\xf6\x76\x90\xb2\x07\x3a\x41\x0c\xf2\xd6\xfc\xa9\xdb\x0f\x6a\x99\xa1\xe8\x9f\x3d\x87\x8f\xee\x1f\x66\xcc\x07\x7f\x61\x54\x07\x4b\x80\x8c\xc7\xa7\xbc\x57\x38\x3d\x8f\x69\x43\xdc\xb2\x89\x44\x11\x5b\x8a\xe2\x28\x07\x97\xad\x56\xb0\xcc\x0c\x31\x03\xd6\x15\x7d\x3c\x4c\x4d\x33\x95\xaa\x66\x5b\x03\x6c\xfa\x2c\x69\xca\xa0\x91\x26\xfd\x75\xe7\xd5\x63\x8d\xdc\x58\x23\x37\x06\xd7\x18\x0c\xae\x71\xbf\x54\x03\x2e\x0d\xee\xfc\x86\x07\x1e\x74\x80\xdf\x9a\x95\x33\x58\x4b\x8b\x0c\x4b\xc0\x46\x16\xfa\x8f\x3b\x4b\x1b\x4b\xdb\xb7\xb9\xb7\x0c\x91\xb6\xed\x76\xfb\xca\xd9\xff\x34\x45\x36\xd3\x77\x50\xaa\x7d\x68\xca\xbb\xa5\xef\x1b\x3b\x32\xb1\x97\xa4\xf5\xc6\x83\xbe\x7e\x4c\x70\x36\x4b\x70\x56\x95\x46\x2d\xf1\xbc\x68\x53\xf1\xa0\xb7\x90\x9b\xc8\x8d\x5b\xde\xb6\x63\x4a\xf7\xf5\x12\x14\x5a\xdf\x98\xee\x9c\x74\x67\x47\xa6\x3b\x03\x75\x7c\xaf\x3e\xbc\x29\xda\x03\x1a\xbe\x3f\x3d\xe4\x1d\xeb\xfb\x66\x28\x2d\x5d\x73\x26\x25\x88\xf7\x9a\xb3\x3f\x55\xa0\xec\x6b\x8e\x9b\xf5\x80\x1b\xae\x39\x93\x75\xcc\x0b\xb0\xee\x7c\xee\x20\x79\xab\x43\xbe\x11\x38\xe5\xf9\x34\x5a\x89\x62\xd6\x60\xa7\xb3\x5a\x10\x23\xe7\xfa\x3d\x8e\xd7\x1d\xf4\x12\xb2\x4b\xa6\x2d\xe8\x52\x54\x97\xfc\x56\x2d\xb0\x64\x45\x74\x83\x6b\xab\x8f\x29\xd3\x5f\x83\x38\x63\xe4\x64\xad\x5a\xa1\x47\x79\xda\x61\xb6\xc7\xdb\x2f\x56\xc8\x53\x25\x43\x7f\x32\x68\x23\xbb\x18\xb1\xcc\x5d\xab\x78\x5f\x76\xfa\xbc\xb0\x69\x46\xcd\x7c\x63\x5a\x70\x65\x5f\x25\xcb\x18\xea\xc0\x8e\x82\x67\xa4\x76\xad\x89\xe9\x67\x2d\xfd\x9d\x82\x30\x14\x4c\x78\x5e\xc8\xa3\x9d\xbc\xc9\xd3\x83\x20\x2e\xd4\x52\x86\xe3\xbd\x4f\x39\xf9\x8a\xe3\x8b\x12\x61\xd1\x2f\x90\x72\xc1\x1b\xa1\xdf\x58\x04\x61\x56\x00\xec\xa7\x52\xde\x36\x5f\xfa\x43\xbc\x6e\xff\x53\x85\xb8\x41\xd9\x8b\x36\x73\xdf\x5e\xf1\x3e\xe6\xf4\x3e\xc7\x29\x5b\x6d\x46\x39\x53\xf3\xa6\x94\x89\x85\x2b\x6c\xe6\x53\x7a\x5a\x01\x50\x24\x51\xac\x25\x44\xc5\xaa\xc7\xb1\x59\xda\xce\x94\x80\xaa\x53\x40\x47\x15\x7b\x07\xe2\x3d\x80\xb5\x8f\x56\x24\x26\xaa\x96\xd7\x3b\x99\xca\xf2\x66\x79\xe2\x66\x96\x8a\x13\x8b\x7a\xf2\x95\x27\xa3\x11\xb6\x7c\x23\xf4\x38\x1c\x93\xc7\x1c\xf2\x94\xc0\xf6\xda\xcd\xdc\x5f\x74\xbc\x66\xf9\xa1\x31\x77\xb4\x3c\x79\xda\x65\x35\xf3\xe5\xd4\xf5\x99\xb3\xa2\x90\x35\x65\xe6\x58\x86\x0a\xd9\x1b\x38\x20\x93\x7f\x72\xc8\x37\xc8\x0e\xcd\xa7\xbc\x76\x4e\xc8\xb5\x18\xab\xf0\x97\x8e\xf7\x41\xe5\x9a\x6c\xbf\x1a\xb2\x21\xec\x82\xfe\xd0\x2d\x01\x0b\x2b\x16\x4a\xe6\xc6\xb3\xbe\xb5\x37\xc8\x22\xf2\x3a\x86\xfb\xb2\x5d\xb8\xce\x82\xbc\x93\x32\x5a\x8f\x83\x86\xf4\xd2\x91\x4e\x3f\xc3\x8e\xc1\xdf\x4d\x90\x6b\x65\xc7\xef\x4e\xb2\xa0\xce\x16\xba\x59\x2d\x8f\x33\xf7\x4f\x26\xbc\x5f\x99\xe8\xf7\xc6\xa6\x1e\x46\x74\x80\x1a\x7f\x07\x4a\xd3\x0c\x8b\xdb\xc4\x2b\xe1\x89\x42\x7b\x41\x4c\x4f\xb1\xcd\x31\x6a\x34\xa0\xed\x38\x88\x12\xf9\x9d\xd4\x63\xa5\xe2\xf2\x07\xd2\xe2\x5d\xe7\x89\xff\x60\x00\x4f\x2d\xc0\xc8\x5c\xc0\x87\x29\x92\x6e\x83\x03\xaf\xf4\x1c\x2e\xd6\x43\x76\xc4\xa7\x0b\xe8\x59\x76\x1d\x6d\xb1\x20\xc1\xa0\x15\xbb\xaf\x26\x2c\x80\x4f\xef\xea\x2c\xb1\x98\xa1\xce\x11\x43\x87\xe4\x5a\x07\xca\x89\xb9\x67\xb0\xe6\x74\x68\x08\x65\x64\x19\x05\x9d\x33\xdd\xb2\x99\xdf\xf0\xa9\x57\xe7\x7c\xe6\x3a\x4f\x05\xac\x79\xd2\x05\xdb\xab\xaa\x3f\x1f\xf4\xaa\x94\xe5\x35\xbf\x28\xee\xdb\xc5\xfd\xa2\xb8\x5f\x14\x1f\xb2\xe0\x6f\x98\x20\x4f\x93\x2b\x32\x1b\xda\xf7\xc5\xff\xae\x78\x1f\xab\xf4\x7f\xa7\x14\x87\x2a\x0a\x42\x86\x29\xf5\xde\x1d\x5a\xdb\x00\x74\xbf\x7c\x63\xd0\x4e\x12\x1b\x68\x4f\x60\xbd\x28\x22\x5d\xe3\xb8\x4b\xc3\x94\xb7\x25\x02\xb9\xa6\xff\x3e\xc5\x0b\x22\xe8\x6e\x70\x3f\x0c\xe8\xfb\xd0\x2b\xc2\xbe\xc3\xb0\xdb\x3a\x16\x31\x6a\x95\x77\x77\x55\xe6\x87\x63\xbd\x48\xad\xca\xd0\xd3\xe7\x92\xea\x81\xee\x29\x2d\xca\xfb\x1d\xf2\x74\xd5\xf9\x41\xfc\xc6\x0f\x3a\xde\x2b\x9c\x0d\x0a\x29\x1d\x69\xcf\x62\x01\x47\x8e\x29\xf3\x99\x3a\x6d\xa8\xea\x85\xdb\xbe\x21\x0e\x1e\xa0\x84\x6b\x7e\x04\xd6\x33\x01\x37\xf8\x76\x00\x26\x08\xf9\x81\xcd\x7b\xbc\x76\x82\x3c\xa5\xce\xd3\xa5\x28\x0c\x59\xa2\x68\xc7\x97\x2a\xde\xc7\x2b\xe5\xa7\x03\xe9\x86\x2e\xf8\x95\x27\x19\x3d\x5d\xe9\x4b\x34\x4c\x6a\xa1\xbf\x18\x7c\xb8\xb1\xc8\xe8\xa7\xdb\x2c\xbf\xe9\xe3\xfd\x36\x87\x28\x16\xd6\xfd\x31\x67\x48\x00\xf0\x48\x6e\xc6\xde\xbd\xb2\xae\x51\x7d\x60\xb5\x4f\xaf\x72\x82\x95\x66\x99\xb2\x13\x2c\x09\xc9\xa4\xb8\xd6\xe7\xe6\x4f\xba\xf7\x79\x77\xc9\x3f\x4b\x6c\xb3\xc1\xcc\x1b\x11\xbd\x9d\x0c\x78\x9f\x3b\xe5\x27\x51\x62\x51\x13\x7b\x77\xb6\xc9\x01\x51\xb5\x8c\x28\x74\x03\x6f\xc1\xf8\xb9\xd9\xd6\xd4\x67\x43\x5b\x94\xe3\x9a\x9f\x3b\xa5\xc6\x35\x3f\x77\x6a\xb3\x2d\x89\x4f\x86\xb6\xf2\x13\x0e\xd9\xdf\x94\xae\xc0\x99\xfb\x3a\xc7\x3b\xa3\x7f\x99\x6d\xe1\xce\xd7\x2e\xc1\xd4\x70\xe1\xb6\xe3\xc0\xd8\xe5\x36\x2f\xb3\x54\x37\x92\x1b\x86\xa4\x39\x19\xe6\xaa\x4c\x5e\x4a\x88\xa6\x23\xa1\xfb\x3c\xef\x64\xf1\x6b\x14\xc9\x08\x93\xf7\x52\xb0\x15\xaa\xef\xec\xf1\xff\x63\x85\x3c\x4d\x45\xff\x5c\xe4\x3c\x3f\x13\xc5\x0c\xed\xb2\xee\xc7\x2b\xde\x47\x2a\xfd\xdf\xd1\x72\x40\x12\x6e\x60\x74\x4b\xd7\x77\x54\xa6\x52\x3b\xc9\xa8\x2a\x51\x17\xf2\x69\x29\xe7\x39\xad\x47\x31\x53\x36\x60\xaa\xec\x61\xc5\x05\x67\x5d\x66\x86\x72\xc2\xac\x31\xe1\xc9\xf4\xe0\x5a\x91\xb5\x5b\x98\x57\x2a\xab\x90\x25\x5d\x2b\x28\x5c\x0e\xa0\x1e\xc4\x19\x2b\xb5\x0e\x1a\xaa\x51\xba\x2e\xe6\x1e\xac\x72\x10\x6b\xb6\xd4\xc9\xb5\x8d\x4e\xde\x6a\x28\x3b\xd3\x9c\xdb\x13\xff\x98\x43\xbe\x71\xd0\x55\xea\x3e\xea\x78\xaf\x75\x06\xbd\xd5\x81\x03\x83\x79\x06\x71\xf7\xb7\x4d\xdb\xa0\x21\x69\xd2\xc5\x26\xcb\x98\x0c\xfb\x2a\x52\x70\x19\x5f\x81\x39\x43\x2b\x80\xe0\x22\x1f\x46\x28\x7f\xa9\x42\x48\xaa\xd3\x00\xba\x6f\xab\x8c\xee\x49\x39\x30\x8b\xa3\xf7\x97\x46\x4a\xc9\x5d\x48\x4a\xd8\x1b\xca\xcc\x5b\x51\x9e\x23\x4e\x89\x42\x30\x30\xaa\x11\xe7\x2a\x0f\x96\x19\x04\xa9\x43\x9d\x56\x9c\xaa\x25\x4c\x18\x9f\x29\x49\xa2\x01\x7d\xb4\x24\x09\xf2\x73\x0e\x29\x74\x28\xee\x7f\x1c\xe2\x5d\xd2\x77\xd6\xfa\x64\x25\xf4\x5e\xa8\xeb\xdb\xf9\x14\x7b\xe4\x4d\x0e\x51\xda\x1f\xf7\xf5\x9b\xb8\x0f\xfb\xe7\xb8\xf3\x2e\xc8\xba\x76\x2a\x65\x1d\xf9\x23\x87\xf4\xd1\x43\xb9\xbf\xee\x90\xb9\x91\xbb\xba\x51\x8e\x0e\x2f\xe9\x6d\x61\x3b\x29\x27\xc0\xef\x6c\xd8\xe5\xfe\xf3\x0e\x99\x94\x8a\x07\xf7\xa7\x1d\xef\x95\xce\x4a\x8f\x16\xa5\x47\x13\x20\xc3\x3b\xdb\x71\xa7\x11\x25\x83\xb4\x01\x09\xa7\x7d\x95\x27\x8b\x4a\x9d\x56\x04\x8a\x66\x18\x39\x1e\x74\xe1\x62\x3d\x78\xdd\xc1\x61\xc4\xe0\x07\xf7\x0c\xf3\x49\x1a\x9c\x45\xf6\xe3\x13\xde\xa5\xdd\x4e\x22\xab\x13\x27\xfe\x5d\x85\x7c\xb9\x88\xc9\xfa\xc2\x57\x79\xee\xd7\x2d\x45\x66\x5d\xd9\xbc\xaf\x3f\xb0\x87\x1c\xdb\x3c\x3d\x73\xff\x6c\xc2\x7b\xe9\x2e\xa7\x7c\xd5\x7b\xe2\x7f\x6c\x61\x4f\x3c\x71\x53\xb5\x6e\x69\x4f\x5c\xd1\x34\xad\x1f\x1f\x1a\xab\x39\x20\x45\xeb\xcf\x4c\x78\x2f\xde\xd5\x0c\xad\xe3\xdc\xaa\x3b\x93\x5b\xf5\xe7\xf7\x90\x9b\xb6\x71\xcf\xba\x7f\x37\xe1\x85\x57\x22\x4d\xd7\xba\xf3\x8a\x09\xf2\x9a\x22\xab\xd6\x23\x5f\x53\x59\xb5\xb6\x44\x05\xbe\x32\x19\xb5\xde\x3d\x61\x61\x4d\xa4\x4b\x41\x4d\x6c\xf4\xd9\x46\x23\x65\x0d\xd0\xc8\x01\xae\xff\xab\x26\xbc\x7b\x4a\xcf\x8c\xd0\xf3\x26\x5f\x85\x0c\x04\x1c\x9c\x09\x4f\x22\xa8\xd9\x45\x2e\x81\xd5\x02\xf9\x9d\xd8\xee\x52\x9d\x6a\x14\x59\x77\xde\x55\x21\x3f\x5b\x21\xd7\xd6\x8a\x67\xca\x6d\x3b\x73\x7f\xa0\xe2\xfd\x86\x73\xb2\xcf\x1b\xda\xe4\x80\x82\x5b\x38\x0e\xe8\x37\xa8\x33\x50\x22\x99\xda\x85\xf5\x28\x09\xed\xae\x81\xb8\x55\xec\x4d\x00\x42\x82\x4b\x04\x88\x96\xcc\xe6\xa8\x6b\x05\x80\x0f\x03\xd3\xd3\xa8\xea\x60\x46\xdb\x2c\x05\xbc\x76\xb1\xef\x2d\x05\xb2\xb9\x2d\x4e\x91\xdb\xb7\xef\xca\x4e\x7e\xe8\x00\xf9\x96\x3e\x2b\x66\xf4\xc7\xfd\x02\xf1\x5e\x65\xce\x9a\x8c\x15\x93\x60\x73\x00\xea\x53\xd5\x28\xf4\xb0\x67\xa2\xa4\x81\x3e\x2f\x62\x6b\x5e\x44\x48\x3c\xcb\x90\x5a\x67\x29\x4b\x6a\x4a\xdf\xd8\x49\xa2\x1c\x03\xb1\x45\xf5\xb7\x0b\x1e\x57\x54\x90\x9a\xb3\x22\x9f\xfa\x6b\xce\x5e\x98\xda\x75\xe7\xef\xa6\xc4\x42\x3f\x39\x28\xed\xad\x1f\xaa\x90\x23\x03\x0f\xcb\x80\x0d\xe9\xfd\x95\x53\xde\x8e\x32\xc8\x57\x81\x83\xa1\x80\x08\x83\xe8\xd9\xa8\x4b\x9d\x28\x0e\xa5\xcc\x18\xeb\x74\xa4\x51\x66\x76\x1f\x76\x42\x9f\x36\x6c\x64\x57\xfc\x1e\xc1\xcb\xb4\x6f\xaf\x8a\x20\x10\x1b\x2c\x8c\x52\x56\xcb\x69\xad\x89\x44\x2c\xe7\xf2\x13\xb5\x49\xb2\x9c\xb7\xda\x85\x20\x62\x38\x7a\x8f\x3d\x8b\xc6\xae\x8c\xbb\xe5\xe0\xd3\x34\xfc\x7b\x5e\xb4\x5d\x47\xc6\x6f\x1e\xe2\xc8\x48\x1e\x22\x78\xfa\xdd\xd4\xbb\x1e\x77\xbe\x24\xdc\xe8\x5a\x6f\x51\x9c\x7e\xc7\xd0\xa4\x9f\x33\x64\x9a\x3c\x73\x43\x4a\x51\xd4\xf8\xb8\x73\xff\xc6\xae\x40\x77\xb8\xa7\xb5\x2b\x10\x54\x81\xee\x1d\xd1\x83\xe8\xc8\x52\xc2\x89\x37\x7a\x56\x46\x88\xff\x4b\x42\xbe\x7d\x38\x5d\x96\x14\xd1\xfd\x65\xe2\xfd\x47\xa7\xf7\x79\x41\x65\xc5\xae\x35\xde\x57\x41\xbd\x29\xb6\x8d\x42\xce\x8b\x72\x84\xba\x40\xb5\xb3\xfc\xca\xfe\x48\x5d\xfe\x8d\x98\x2f\x05\x06\x10\xb9\x04\xe9\x0b\x31\xb4\xc5\x8a\x7a\x59\x89\x02\xba\x80\x58\x51\xfe\x9a\x33\x99\xf2\x98\x5d\x64\xf5\x75\xe7\xf5\x53\x63\x5a\x34\xa6\x45\x5f\xfd\xb4\xe8\x83\x0e\x51\x9b\xda\x7d\x9f\x43\x0e\x6d\x48\x4a\x2e\x62\x61\xef\x7b\x1d\xf9\x17\x1c\x38\x34\x47\x6c\xee\xd4\xe9\xb8\x23\xa3\x22\x39\xf7\x62\xbd\xe3\x15\xa5\x01\x9f\x95\xd4\x47\xb0\x11\x1d\x08\x26\xc9\x3b\x29\x40\x65\xb2\x34\xe5\xa9\x4f\x5e\xe1\x90\x29\x09\xe8\x96\xb9\x97\xbd\x5b\xe4\x81\x55\x74\xd5\xa0\x21\xf2\xa0\x28\xbc\x5e\xe0\x71\x45\x17\x25\x42\x2c\x5a\x46\x0a\xea\x5a\x25\xd7\x8d\x30\x25\xb2\xb9\xc7\x9d\x07\x36\x26\xad\xe7\xdd\xb3\x5b\x23\xad\x92\x20\x96\x29\xec\x3b\xa7\x2c\x50\xc6\xc1\x14\x16\xdc\xbc\xbf\x3c\xe9\xdd\xd2\xff\x55\x3f\xe8\x84\xde\x92\x59\xe1\xe6\xfd\x6b\x63\x40\xba\xcd\x12\xc0\x8e\x72\xf3\x8e\xbd\xef\xe8\x93\xf6\xa7\xcf\x74\x8f\x9e\x96\x7a\xf0\xc2\x8f\xe9\xee\xe8\x74\xb7\x6e\xd0\xdd\x17\x6c\xcf\xc5\x7b\x18\xd5\x7d\xdc\xe9\x6c\x4c\x29\x2e\xba\xf3\xdb\xa2\x14\xfd\x32\xf6\x7c\xd7\x54\x5f\xcd\x86\xf1\x31\x90\x89\x8f\x4d\x7a\x33\xa5\x67\x1b\xd0\x07\x83\x30\xbc\x6b\x4c\x18\x36\x4b\x18\x1a\x8a\x30\xbc\xc4\x7b\xfa\x70\xc2\x60\x51\x84\x23\xc4\x27\xd5\xcd\x50\x84\x31\x29\x78\x02\x92\x82\x64\x63\x52\x70\x97\x3b\xb7\x35\x52\xd0\x8f\x06\x7c\x81\x90\x7f\x3f\x54\x44\x74\xff\x90\x78\x3f\xe5\x14\xbf\x25\x17\x65\x4a\x45\x25\x15\x92\xc6\x1e\x14\x62\x2d\x4a\x66\x1a\x0f\x59\x8b\x67\x3d\x50\x02\x42\xd4\x52\x4a\x46\x83\x01\xa3\x3a\x7b\x91\xe6\x14\xfb\x15\xf3\xd7\x9c\xbd\x2b\x2c\x5d\xca\xd6\x9d\x37\xef\x27\x5f\x74\xc8\xfe\xa0\x1d\x49\x3b\xfb\xa7\x1d\xef\xf7\x9c\xd9\xf9\x39\xdb\x28\x6e\xc6\xd0\xab\x97\x16\xb4\xbb\xe4\x07\xd5\x09\x45\x35\x7a\x4b\x01\xfd\xcf\xce\xcf\x99\xa6\x72\x23\x8e\x23\x48\xba\x34\xb0\x42\xea\x59\x48\x83\x86\xa8\x11\x73\x49\x28\x74\x10\xc8\x9e\x03\xe0\xbf\xba\x11\x00\x70\x49\xba\x45\xed\x85\xaa\x54\x07\x73\x0f\x34\x70\xff\xc6\x04\x79\x72\xc2\x93\x8b\xb2\xb2\xbb\x2f\x9e\xcd\xdc\x77\x4c\x78\xaf\x99\x38\x6f\x3f\x94\x87\x5c\x26\x21\x08\xd2\x3c\x0a\x62\xda\x49\x95\x41\x28\xa0\x9d\x8c\xa5\x8a\x98\x36\x83\x15\xa6\xf3\xb7\x72\x9f\xd2\xeb\x2c\xdf\x32\x5c\x5e\xe0\xf7\x03\x9c\xb0\x7a\x27\x8e\xab\xb4\x1e\x25\x80\xa8\xc1\xda\xda\xc9\x2d\xc8\x9b\x74\x01\xc0\xda\xd1\x37\x4a\x12\x10\xe8\x11\xe6\x04\xc9\x8b\x35\xb6\xb3\xf2\x08\x12\x03\x4d\x88\xf5\xae\x81\x09\xab\x6e\xab\x52\x33\x53\x01\x0b\x44\x26\xe8\xa7\x69\x95\xaa\x45\x23\x8f\x51\x00\xd6\x8d\x9c\xc3\x94\x17\xeb\x70\x08\xb1\x9a\x33\xea\xb5\x79\x98\x79\x62\x17\x7a\x19\xab\xa5\x2c\xcf\xbc\xc3\x08\xd5\x6f\x8f\x41\xc6\x2e\x14\xdf\x09\xe2\xe2\x1d\xae\x52\xad\x99\x58\xe2\x79\x73\xd8\xf2\xbd\xc3\x21\x57\xab\x1a\x21\xa7\x94\xfb\xc3\x8e\xf7\xe0\x45\xf3\x49\x59\x83\x6b\x7b\x59\x60\xda\x24\x0d\x4f\x5e\x3e\x21\xb4\x48\xef\x20\xd6\x1e\x5d\x5d\xa1\xb4\x81\xaa\x50\x44\x97\x0c\xeb\xea\x7f\x70\xc8\x7e\x3d\x57\x6e\xd7\x7b\xf1\xc5\x62\x03\x9b\x57\x55\x31\x9f\x46\x96\x54\xb3\x47\xea\xbb\xd9\x38\xb6\xc0\xed\xe1\xa7\x3a\x78\xc3\x1c\xbc\x1c\x82\xc7\x1e\xfd\xd2\xee\x11\x7f\xda\x5d\xc0\x47\xb8\xb1\xf5\x52\x9f\x3d\x8b\x37\x99\x6c\x42\xdc\x7c\x68\xec\x98\xcd\xf1\x8a\x60\x17\x65\xa2\x58\x30\x57\x28\x73\x62\xa8\xc3\x9f\x30\xa1\x2d\x54\xde\xa7\xeb\x70\x7b\x0c\xeb\xf6\x7b\xa7\xc8\xbf\x19\x20\x4c\xbb\x3f\x32\xe5\x35\x0b\x8b\x84\x79\x20\x76\xdc\x1c\x61\x18\x1e\x7e\x7d\xcc\xa6\x8d\x15\x58\x5f\x03\x0a\xac\x5c\x29\xd3\x97\xbd\xe9\x91\x95\xe9\xdb\xd7\xa2\xd7\x36\xe6\xda\x9e\xe3\xde\xba\x09\xae\xad\x9f\xfa\xfc\x7b\xae\xea\x6b\xd6\x34\xf5\xe6\x9f\x3a\xe0\xbd\xbf\x32\x50\x61\x9e\xf2\xc1\xfc\xd8\x00\x75\xb9\xa9\xb1\x03\x53\x7f\xc1\x85\xf1\x74\x64\xc5\x5e\xbe\xa1\x36\x5d\xa6\xfb\xd3\x95\x9b\xc5\x96\xba\x3d\x1c\x60\x94\x63\xd2\x1e\xc1\x30\x89\x6b\xc4\x50\x92\x00\x0b\x25\xd3\x17\x1a\x9d\x15\xec\x03\xf0\x32\x18\x70\x89\x9d\x0d\x0c\x8e\xc3\xd2\xe7\xbf\x7b\xac\xcf\x1f\x93\xc3\xaf\x01\x72\xf8\x57\x86\x3e\xff\x8f\x37\xa3\xcf\x7f\xbb\xa5\xcf\x1f\x44\x11\x34\x70\xdd\x56\x88\xc2\xd7\x98\xb6\x7f\xc7\x0d\xa9\x43\xd4\xfc\x03\x14\x77\x65\xfd\xfe\xc7\x26\xbd\x99\x11\x14\xfb\xfd\x35\xfa\x63\xc5\xdd\x4e\x2b\xee\x06\xa9\xf2\x47\x53\xdc\x8d\x75\xf8\x5f\x67\x8a\xbb\x0d\x94\xf7\x1f\x9d\x24\xdf\x3c\x60\x9b\xc0\xe1\x7f\xff\xa4\xf7\xad\xc3\xd4\xf5\x25\x3d\xfd\x4f\x8e\x8f\xfb\x66\x8f\xfb\x7d\xea\xb8\xcf\x7b\xdf\x38\xe0\xb8\x5b\xe7\xfc\x30\x39\x48\xbe\x7d\xa4\x73\x3e\x3e\xe0\x4f\xc0\x03\xde\xd8\xf8\x80\x9f\x72\x6f\xdf\xe4\x01\xef\x7b\xb2\x2b\xe4\x9b\x06\xb3\x66\xee\xaf\x54\xbc\xdb\x34\xd7\xd4\x0f\x9a\x17\xe4\x1a\x58\x42\x7d\x90\x80\xcf\xc1\x74\x57\x9d\x8c\x85\x6b\xce\x94\x52\x8f\xaf\x39\xb0\xd1\xd6\x9c\x3d\x82\x37\x5b\x77\x3e\xe6\x90\x79\xa2\xdf\xba\xa7\xbc\x1b\xb4\x72\x5c\x2a\xce\x51\x2f\xad\x90\x55\xf5\x76\xc3\xda\x0b\xbd\x93\xb9\x46\xb7\xcb\xdd\x7c\xc2\x9b\x56\x7b\x59\x7c\x0b\xfe\xf0\x86\x9a\x70\xa3\x3a\x44\x0f\x45\x1d\xe7\x85\x20\x5a\x52\xe3\x8f\x54\xc7\x5b\x27\xfb\xce\xac\xe4\xe1\xdc\x57\x4e\x7a\xbf\xeb\xc8\x1f\xc5\xd4\x06\x06\xfb\x6b\xb1\x90\x82\xd9\x05\x55\x79\x14\x8a\x6d\x8a\x01\xb0\x72\xaa\xa5\xf8\x6d\x29\x3b\xcb\x29\xf4\x05\x83\x4a\x03\xe5\xff\x3a\x3b\x3f\x57\x9c\x56\xd9\x5e\x15\xf9\x69\x3c\xee\x75\xa9\x75\x56\xfc\xab\xd2\x34\x43\x17\x04\x49\xc4\x85\x01\x16\xdb\x2f\x2f\xeb\xa3\x7b\xc9\x6f\x3b\xc6\xba\xbe\xcf\xf1\xde\xa1\x6d\x22\x92\x55\x96\x96\x10\x59\x8f\x4a\x40\x54\x28\x12\x25\x97\xed\x2b\x1c\x1b\xd8\x5d\x1e\x60\x19\x00\x51\x89\x6a\x6c\xb6\x06\x80\xb1\xaa\x68\x56\x2a\x3b\xf0\x4c\x60\x25\x77\xab\x91\x60\xaf\x74\x25\xe6\x12\xfe\x95\x23\xf7\xd2\x47\x1d\xef\xc3\x0e\xec\x26\x5e\x57\x13\x57\x5e\x7b\xc8\x26\xdc\x61\x2a\x1c\xa3\x80\xb1\x2d\x86\x19\xa4\x8c\x7a\xa2\x61\xaf\x4a\x3d\x68\xd7\xc3\x0b\xc6\xb3\x87\xe4\x69\x89\xc5\x90\x48\xb4\x1a\xc5\xb8\x80\x44\x11\xd1\x41\x75\x59\x95\x3e\x91\x77\x5f\xca\x20\x58\x5f\x8b\x31\xe6\x10\x6f\x94\x3b\xfd\xa8\xf7\x8c\xf3\x86\x91\x6a\xd0\x18\xcd\x4f\x7f\xdb\x21\xfb\xb5\x8c\xe5\xfe\xb2\xe3\xbd\xdd\x39\x5f\xc8\x66\x3d\x2b\xaa\x2e\x66\x35\x34\xd9\xc4\xb2\x3c\xa3\x62\xb7\x19\x5e\x91\xda\xb4\x01\xd3\x05\x26\x11\x73\xc2\x60\x62\x35\x02\xb5\x98\x15\x9d\xcb\x7c\x93\x13\xf0\x4b\x13\x56\xc6\x34\x79\x4c\x25\xae\xd3\x38\xec\xe2\x89\x1a\x76\xf1\xe8\x01\xf2\x6d\x83\x96\xcd\x8c\xbd\x78\xf9\x81\x27\x64\xec\xc5\x3f\x4d\x91\x9f\xef\x13\x7b\xb1\x56\x19\x82\x90\x31\x6c\x6b\x8e\x03\x30\xc6\x22\xc3\x58\x49\xfa\x55\xa0\x24\x7d\xc4\x51\x46\xa3\xd5\xed\x47\x60\x5c\x4f\x8e\x6d\x1c\xab\xa5\xf0\x4f\x0b\x03\x12\xdf\x58\xb8\x38\xeb\x3e\x77\x27\xc2\x30\x24\x34\xeb\x17\x09\xb9\x6e\x04\x62\xad\x0c\x4b\xbf\xf3\x55\x16\x90\xf1\xe3\x63\x03\xce\x98\x36\x7d\x0d\xd0\xa6\xc7\x0c\x03\xce\xaf\x3b\x64\x7a\x34\xca\xf2\x44\x8c\xca\xf8\x5e\xd3\x4e\xf3\xb2\x1d\xb4\xd3\x1c\x25\x33\xa3\xce\x8b\x36\xd6\xac\x6c\x4c\x6e\x17\xdc\xe7\xed\x60\x68\x86\xa4\xba\xbf\x36\x45\xfc\xd1\xa9\x2e\xe8\x71\xbf\x67\x6a\xc7\x82\x34\xfe\xf3\x58\xc7\xbb\x59\xa2\xf8\xa0\xd2\xf1\x3e\xb0\x95\x20\x8d\x9b\xc9\x09\xf2\x9d\xa3\x6d\xcd\x71\xa4\xc6\x57\x85\x12\xf8\xc1\x8d\x09\xc7\xbd\xee\xdd\x3b\x1c\xa9\x21\x89\xc7\x0f\x4c\x0d\x56\x8b\x94\x63\x36\x3e\xb5\x9d\x98\x8d\xf7\x8c\xe9\xc4\x66\xe9\x44\xac\xe8\x44\x6d\x53\x31\x1b\xcf\x22\xc7\xc9\xd1\x4d\x13\x88\x31\x65\x78\x02\x52\x86\x6c\x63\xca\x30\xef\x9e\xdf\xa9\xc0\x0d\x49\x12\x3e\x79\xa0\x9f\x23\x48\x59\xbc\x74\x7f\xe3\xc0\x57\x57\x08\xc7\xf7\x91\x71\x08\xc7\x38\x84\x63\x1c\xc2\xb1\x8b\x21\x1c\x5f\xb0\x42\x38\x3e\xe5\x78\x8f\x39\x5b\x0d\xe2\x38\x78\xdd\xc1\x81\xc1\x1b\xda\x77\x58\x1d\x2e\xaa\x0f\xb5\x4f\x0f\x5e\x37\x53\xe7\xdc\xfa\x18\xca\x1a\x79\x61\x0f\x42\x01\xb1\x53\x46\xae\xf6\x6b\x2f\x5c\xe4\x83\x53\xe4\xdf\x0d\x13\xf5\xdd\x9f\xfa\x8a\xc4\x8c\x7c\x60\xcc\x26\x8e\x75\x6c\x5f\x03\x3a\xb6\xae\x52\xff\xb7\xb7\x11\x33\xb2\x45\xbd\x7f\x73\x63\xae\xf1\xb4\x7b\x72\x5b\x81\x23\x92\x55\xfc\xf1\xab\x06\x5b\x67\x4d\x4d\xff\x17\xc7\x21\x24\x3b\x12\x42\xf2\xab\x63\x0b\xc4\x98\x3a\x7e\x0d\x50\xc7\x4f\x1b\x16\x88\x3f\xdb\xb4\x05\xe2\xab\x27\x8e\xe4\x09\x65\x9f\xd8\x71\x73\xf0\x46\x86\x89\x61\xba\xc5\xb2\x45\xe2\x53\xdb\x09\x2b\x19\xeb\x16\x77\x5a\xb7\x38\xc8\xf8\xb0\x09\xdd\xe2\xd8\xea\xf0\x75\xa6\x5b\x1c\xc5\xdc\xf0\x99\x49\x42\x87\x6d\x18\xa0\x05\xbf\xb5\xb9\x28\x93\xb7\x8c\x4f\xff\x66\x4f\xff\x4b\xd4\xe9\xbf\x7b\xb4\x28\x13\x9f\x54\xc9\x75\xa3\x1f\xfb\xf1\x79\x7f\x02\x9e\xf7\x78\xe3\xf3\x3e\xe7\xde\xb1\xed\x50\x13\x79\xd0\xff\xbc\x42\x9e\xbe\x01\x1f\x37\x0e\x3a\xd9\x7a\xd0\xc9\xcf\x4e\x0e\x9e\xde\x71\xe4\xc9\x38\xf2\x64\x1c\x79\xf2\xc4\x89\x3c\x79\xdb\x93\xc8\x33\x8d\xb3\x2a\x18\x85\xb0\x13\x47\x49\xa3\x50\xde\xa5\x11\x87\x4c\x21\x71\x90\x65\xee\x3f\x5c\xed\x3d\x64\x3d\xd1\xfc\x4b\x2b\x68\x83\xbe\x5d\x1a\xb2\xda\xb2\x10\xad\x41\x29\x20\x20\xf2\x48\xeb\x57\x82\x01\x69\xa8\x14\x45\x3e\x5d\x14\x1c\x10\x0c\x4a\xea\xe7\x65\x82\xbf\x28\x54\x25\xc1\x62\x2a\x4a\xac\x3b\x8f\x5c\x35\x66\xac\x36\xc9\x58\xbd\xc6\x21\x07\xd0\xe2\x0d\xb6\x38\xf7\x61\x8f\x1b\x3f\xa5\x9d\x2e\x48\x97\xa2\x3c\x0d\xd2\xae\xe2\x87\xe0\x9e\xeb\x64\x1d\xc8\xfd\xd9\x4e\xf9\x4a\x14\xb2\x8c\x36\x3a\x51\xc8\x62\x98\x5f\x9e\xa8\x24\xfe\x51\x56\x5e\x76\x39\x73\x45\x72\xfb\xa2\x37\x3f\x33\x41\xae\x46\xe5\x86\xa4\x5b\xee\x1b\x27\xbc\x57\x4e\x58\x8f\xb4\xb9\x2b\xd3\x29\x9e\xa1\x15\x7b\x07\x16\x8d\xd8\x39\x90\x73\x23\x5b\xb4\xee\x97\x20\x7e\x6d\xae\x72\x85\x85\x1c\x4e\x0f\x1a\x8c\x93\x6e\xa9\xfb\x3e\xbd\x90\xc4\x5d\xb0\x7f\xdb\x2d\xca\xfd\xd9\x0a\xd2\x65\x6c\xea\x92\xd5\xed\x4b\x3e\xbd\x93\xaf\xb2\x15\x96\x56\x69\x54\xc7\x14\xd4\x90\x77\xba\xa7\x26\x96\x29\x9d\xac\xca\x2f\x14\xa5\xe5\xca\xa4\x3d\xd9\xc8\xf0\x8a\x94\x2e\x6b\x05\x71\x2c\xb6\x1b\x9e\x19\xc8\x85\x54\x6b\x2a\x85\x91\x1a\x78\xb9\x39\x2b\x18\x6b\xc0\x24\xd9\xd9\x51\xc7\xfc\xf2\xc8\xfc\xf2\x07\x1c\x83\x61\x7e\xaf\xb3\x5d\x35\x65\x3a\x84\x67\xde\xe1\x01\xa9\x7a\xc9\x3b\x1c\x82\x24\xd6\xfd\x49\xc7\xdd\x1b\x25\xf9\xf1\x63\xde\xab\x9c\x82\x34\x2b\xc2\x59\x3e\x29\xc0\x71\x49\x6e\x31\xa8\xe5\x9d\x20\x2e\x8a\x48\x56\x19\x94\x8a\x35\x16\xad\x30\x45\x30\x98\xb4\x2f\xd8\xbe\x2d\x82\x75\x83\x63\x86\x2a\xd0\x28\x2d\xe5\x8b\x96\x97\xc1\xe3\x4e\xb4\xb1\xd4\x70\xc6\x3d\xa5\xa5\x06\xe3\x72\x2b\x49\x0b\xd6\x21\xe9\x2b\x32\x3c\x3e\x45\x66\x36\x71\x4f\x82\xaa\xe0\x77\xa7\xbc\x67\xf7\x3c\xed\xa7\x33\xb0\xe7\x12\x58\x4a\xa5\x3f\x78\xc3\xe4\xf8\x9a\xdb\xe4\x35\xd7\x55\xfa\x83\xb6\xf7\x8c\x48\xe9\x0f\xa0\xdb\x52\x83\x50\x22\x89\xa6\x2e\xe1\x16\x72\x13\xb9\x71\xa0\x2e\x61\xa3\x55\x1f\x93\xca\xd1\x49\xe5\xaf\x9a\xa4\xf2\x5d\xce\xf6\x94\x0b\x2d\x4d\x28\x61\x8d\x55\xbd\xbb\x44\x23\x1f\x77\x5a\x1b\x13\x9e\xe7\xba\x77\x6e\x96\xf0\x0c\xd4\x57\xbc\xf2\x5a\xcb\xe9\x31\xcb\x79\x1a\x34\x30\xf9\x24\xfe\x89\xbc\xf9\x27\x9e\xea\x7d\xd2\x31\x9f\x18\xfe\x8d\xe8\xcd\x96\x06\x2d\x96\x8b\x4d\x04\xfe\x45\x92\xca\x0a\xc6\x01\x3f\x82\xc7\x68\x36\x9e\x17\x9d\xc8\x72\x96\xe4\xf7\xc8\xc4\xc3\x92\xe7\x09\xbb\x49\xd0\x92\x99\xe0\x81\x1b\x44\x82\xe3\x13\x62\xb6\xcc\x94\x7b\x9c\x21\xd5\x84\x37\xf5\xf8\x30\xaa\x76\xb1\x23\x41\xad\xc6\x53\x90\xe5\x73\x4e\x59\x5e\x83\xc3\x13\x25\xb4\xb8\x11\x7d\x21\x61\xf9\x6b\xce\x81\xa2\xe5\x74\xdd\xf9\xee\x6b\x48\x42\xae\x05\x17\x30\xec\xec\xe9\xcb\xed\x20\x01\x62\x79\x8f\x77\xe7\x6c\x9f\xe7\x82\xd4\xad\x9a\x3c\x65\x4f\x57\x20\xef\xb2\xcc\xde\xcc\xc4\x67\xa1\xc5\x13\xbd\x7a\x82\x5c\x23\x7d\xce\x16\x79\x9b\xc7\xbc\x11\xb1\xcc\xfd\xfb\x8a\xf7\xce\x8a\xf2\x8c\xc2\xc1\xf2\x50\x88\x3d\xaa\x84\x68\x31\x65\x3a\x97\xf3\x06\x53\x4a\x4f\x07\xb5\xa6\x9d\x42\x5a\x53\x7b\x71\xaa\xf9\x2a\x26\xab\xe4\x69\x0e\x81\xf5\xd0\x4a\xb7\x48\xd6\x8f\x1b\xb7\xf0\xa0\x93\x3d\xed\xaa\xf8\xf5\x45\x96\xb6\xd4\x81\x41\xbf\x3a\xd1\x39\x10\x28\x8b\xda\xd2\xc2\xd1\xcb\x4a\xb3\xae\xdc\x1b\x9b\x3c\xe1\x29\x8a\xfb\x99\xa4\x50\xe8\x9f\x07\xb9\xd5\x61\x12\x70\xf2\x17\xf4\x21\x50\xa9\xd8\x2d\xa3\xe1\x8d\xe4\x86\x21\x61\xe7\x2a\xd9\x6a\xbf\x21\x8c\x2f\xc8\xb1\xd7\xc1\x98\xa1\x1f\xc8\xd0\x7f\xde\x21\x57\xb5\x78\x27\xc9\x75\x7a\x77\xc7\xfb\x4f\xce\xa9\xfe\x34\xa7\x0f\xdd\x57\x27\xa4\x44\x20\x53\x26\x11\x3b\x42\x2d\xba\x66\x8c\x9a\x0d\x55\x29\xf3\x1b\x3e\x7d\xa1\x97\x72\xaf\x4a\xbd\x8c\xd7\x73\xef\xc5\x3e\x3d\xcf\x73\x54\xea\xc0\xb7\xd3\xf8\x89\xba\x10\xe6\xef\x91\x12\x6a\x16\xb5\xda\x71\x97\xd6\x83\x28\x16\x22\xb4\x10\x9c\xe1\x32\x80\x2f\x87\xb9\x8e\xbe\xde\x21\xa4\xb8\xe8\xdc\x97\x3b\x1e\x9b\x2f\xee\xbd\x42\xfb\x5a\xba\x0c\x51\x2f\xa5\x2f\x15\xa4\x61\xea\xbc\x23\x32\xc9\xca\xb0\x09\xf1\x1f\x2d\x75\x04\xfe\xc4\x55\x26\xe7\x89\x79\x61\xb9\xb7\x79\xc7\xe6\x8d\xa6\xa2\x24\x14\xc4\x9a\xd9\xda\xfa\x52\x87\x2c\xd5\xc9\x8f\x80\xd7\x75\x2d\x0e\xa2\x16\xba\xd6\xb9\xaf\x74\xbc\xcb\xbb\xb0\xa4\x40\x18\x8d\x76\x6c\x1d\xf3\x29\x16\xb3\x9c\x59\x3d\xfb\x92\x43\xae\xc1\x79\x92\xc6\xd6\x73\x3c\x64\xee\xdf\x38\xde\x1f\x3b\xf7\x94\x1f\x1b\x03\x6f\xf2\xd5\x9e\x6e\x9e\x14\xcd\x9a\xca\x1d\x73\x4c\x82\x92\x2e\xf1\x4e\x12\xfa\x94\xde\x2b\x64\xc9\x4e\x02\x18\x20\x56\x23\x73\xad\x16\x0b\x23\x40\xbb\xc9\x64\x3a\xf8\x1d\xbf\xc0\xf4\xd0\x1f\x77\x2e\x6d\xcc\x14\xde\xe2\xde\x54\x30\x85\x92\x8b\x2b\x71\x84\x26\x17\x55\xc6\x49\xfb\xf3\x29\xf2\x1d\x1b\xf3\x81\x20\x7b\xbe\x67\xca\xbb\xbe\xfc\xb0\x9f\xe8\x69\x6d\x01\x4b\xf2\x7c\xd5\x58\xf2\xdc\xec\xc5\xca\x95\xe4\x59\xf7\xbe\x6d\xae\x9f\xe4\x69\xb3\xc8\xa3\x7b\xd3\x0e\x58\xe9\xf1\x4d\xfe\x75\x22\x6f\x86\x1b\x93\x96\x59\xf7\xb6\xcd\x90\x96\x7e\x30\x8c\xbf\x7f\x60\x10\x79\x41\x02\x38\x9b\xe7\x41\xad\xd9\x62\x49\xee\xfe\xf4\x01\xef\x47\x9c\xf2\x53\x5a\x0b\xda\x82\x2c\xe2\x9e\x17\x67\x34\x01\x95\x75\x00\x25\x28\x4f\x69\xc8\xe0\x2f\x3b\x90\x45\x0a\x38\x39\x9f\xd1\x7b\xab\x78\x29\x04\x28\x9f\x90\x9e\xa6\x94\x65\xb6\x57\xca\xf4\xd7\x9c\x3d\xe2\xfb\x75\xe7\x87\xf7\x8f\x29\xd8\x58\x34\xd8\x2d\x82\xf2\x9f\x4c\x82\xf2\x9e\x6d\x8b\x06\xed\x92\x68\xb0\xfb\x82\xc1\x5b\x1d\x02\x07\xc5\xfd\x71\x67\x08\x66\xc3\x10\x2a\xb0\xd0\x66\x35\xef\xa5\x0b\xa6\xba\x41\x71\xae\x21\xcb\x22\xb0\xc2\x41\xe1\x19\x79\xee\xe5\x49\x5f\x62\xcd\x60\x25\xe2\xa9\x4f\xe7\x79\xbb\x13\x03\xc3\x29\xa1\xd6\xee\xd2\x34\x8e\x66\xdd\x2c\x67\x2d\x9f\xfc\xa1\x23\xa6\x3c\xc8\x3b\x99\xfb\x21\x87\x9c\xd8\x52\x47\xe1\x73\xef\x3f\x38\xf8\x87\xea\x64\x0f\x51\x91\xbb\xac\x4f\xbf\xc0\xe9\xa4\x4b\x6b\xbc\xd5\x8e\x99\xde\xf7\x3d\x84\x8d\xb7\x59\x0a\xf3\x50\xa5\x91\xcf\x7c\xfc\xf4\x32\x9e\xf4\x69\x2c\xcd\x52\x7f\xa7\xe8\x79\xb9\xff\x65\x7a\xfe\xa5\x29\x0b\xf1\x6a\xc8\x04\x01\xcb\xf8\xe1\x29\x6f\xb6\xdf\x8b\x7e\x6c\xe3\x20\x7a\x6c\xf0\x8f\xdf\x3f\xe6\x1f\x37\x4b\x7d\x57\x14\xff\xd8\x32\xb0\x57\x4c\xfe\xb1\x3c\xed\x16\x0b\xf9\x9d\xe4\xd9\xe4\xfa\xad\x1c\x8f\x31\xd5\xff\x3a\x61\x23\x37\x19\x7b\x37\x22\xd9\xe9\xc7\x4a\x7e\xb2\x42\xaa\x23\xd2\x66\xd8\x3e\xee\x2f\x56\xbc\xbf\xe8\x61\x28\xf1\x9d\x15\x3d\xac\xb9\x45\x43\x3f\xb3\xa4\x28\xb1\xd8\x13\x17\xa3\x46\x33\xa7\x09\x5f\x45\xe9\x5e\x6b\x15\x4a\x66\x0c\xf5\x01\xc4\xd3\x29\x12\xad\x9e\xa6\x55\x1a\x25\xb4\xde\x11\xcc\x2c\x5d\x65\xb0\x77\xd1\x22\x10\xc4\x19\xa7\x51\x12\x47\x49\xa1\x0f\x8a\x12\xb0\x6d\xfb\xf4\xf4\xe5\xa0\x96\x4b\x7f\x91\x16\x6b\x2d\xb1\x54\xb5\x96\xb1\xdc\x5f\x77\x2e\x90\x73\xe4\xda\x76\x49\xcd\x71\x3e\x68\x31\xf7\x59\xde\x21\xd3\xfd\xac\x28\x53\x30\xc7\xb2\x6f\x96\xb6\xe5\x5f\x27\x46\x25\xf0\xe2\x92\x76\xff\x70\xc2\xbb\xb3\xdf\x0b\x45\x65\xb2\xf2\x4d\x1e\x0c\xbe\x22\xd7\x9c\x29\x35\x59\x6b\xce\x3e\xa4\x01\x6b\xce\x94\x60\xd7\xcf\x83\x17\xe4\x27\x2b\xe4\x47\x1c\xa2\x0b\xb9\xaf\x76\xbc\x97\xcd\xca\x1f\x25\x95\x97\x69\x11\x92\xe3\x0d\xd3\x68\x45\x69\xe1\xce\xdd\xbd\xb0\x48\x9b\x41\x12\xc6\x4c\x5d\x09\xf2\x9a\x36\x7d\x0e\xa0\x12\x8c\x71\xc2\x6b\xfb\x0e\x96\xcf\x83\xcd\x44\xf4\xe7\xd0\x61\x6b\xe2\xee\x24\xba\xa7\xee\xcd\xde\xcc\xa2\xb6\xd4\x28\x1c\x02\xd9\x8d\xde\x0d\x86\xb1\x4e\x45\x4d\x2f\x23\x72\xf0\x6e\xb6\x45\xde\x04\xbe\xf6\x9e\xd5\xbb\xd7\x8d\x7e\x0c\xda\xed\xe4\xbf\x4e\x8d\x7c\xce\x90\x85\x7a\xf3\x94\x77\xb2\xff\x2b\xbd\x0b\x34\x8f\x34\xd2\xf2\x87\xeb\xce\x47\x26\xc9\x67\x1c\x72\x00\x1f\x9c\x4e\x53\x9e\xba\x7f\xea\x90\x99\xd1\x67\x03\xbe\xf1\x7e\x1a\xbc\x4c\xe2\x20\xcb\xd1\x4f\x91\xb2\x04\xdc\x41\xc1\x9d\x2b\xec\xc0\x55\xa4\x38\x2e\x83\xcf\x02\x90\x68\x4b\xb3\x07\xe1\x6e\x70\xfa\xf1\xe8\x8d\xc6\xc4\x8d\xc4\xba\x91\xf7\x14\x7b\x3a\x74\xdf\xea\x78\x3f\xe4\xcc\x59\x7b\x59\x2e\x58\x04\x3e\xc3\x35\x96\x65\xf5\x4e\x1c\x77\x0d\xfa\x74\x65\xfa\x69\x19\x2b\x7f\xbb\x42\xdc\x40\xaf\xe1\x39\x7d\x7b\x55\xbc\xd7\x55\xee\x6e\xf3\xc4\xe8\xaa\x6c\xa5\x0c\x64\xd2\xd6\xfc\x30\x28\x86\x83\xa4\x6b\xb9\xc2\x9b\xc7\xae\x5f\x57\x71\xff\xc2\x70\x97\x18\x6d\x07\x59\x06\x50\x11\x39\x17\x37\x7d\x26\xb6\x54\x92\xd3\x7b\x83\x28\x3f\xc3\xd3\x59\xcd\x53\x9f\x03\xc3\x40\x2d\x88\xe3\xec\x4a\x4d\xdb\x30\x25\xfe\x67\xc0\x7b\x72\xf7\xb7\x78\x1f\x51\x62\xbb\x5b\x7c\x53\xd2\x09\x79\xc5\x04\xf9\xd6\x0d\x87\xe2\x7e\xa2\xe2\x9d\x32\x7e\x17\xba\x1f\xe5\x66\xdc\xf7\xf8\xaa\xf3\xa1\xbb\xe2\xaf\x3b\x6f\xac\x90\x9f\x73\xc8\x64\x8b\x65\x59\xd0\x60\xee\x4f\x39\xde\x0f\x3a\x0b\xb9\x9e\x8b\x28\x56\xc3\x18\x58\x6d\xb1\x67\x4e\x95\x46\x2a\x27\x4d\x32\xb2\xad\xa0\xbb\xc4\x68\xcc\x1b\x0d\x16\x56\xa9\xb8\xc9\x35\x55\x35\xe3\xfa\x33\x96\x64\x51\x1e\xad\x58\x11\xf5\x16\xd5\x5f\x22\x7b\xf2\xa8\xc5\xdc\x17\x90\x1b\xb6\xc0\xff\x2d\x46\x2d\xe6\x3d\x5d\xfc\x6b\x0c\x6b\x35\xc8\xcc\xa1\xf9\xe4\xfb\xaf\xb5\x02\x54\x8b\x65\x90\x81\x14\xa6\xe7\xc7\x27\xc7\x9e\x1f\x63\xcf\x8f\xb1\xe7\xc7\x58\xc1\x30\x56\xef\x8e\x3d\x3f\xc6\x9e\x1f\x63\xcf\x8f\xb1\xe7\xc7\x95\xf4\xfc\x60\x1b\xeb\xd5\x6e\x77\x9f\xb3\x75\xcf\x0f\xe9\x06\xfc\xb7\x53\x76\xac\xde\x10\x8e\x10\x14\xfa\xbf\xbe\x6d\x1f\x90\xd7\x8e\x75\xf8\x9b\xbd\x62\x73\xa5\xc3\x5f\xde\xb4\x0f\xc8\x70\x46\x68\xd8\x72\x8f\x2f\xf6\xaf\x13\x0d\xfe\x66\x23\x9e\xb6\xe2\x08\x22\xa9\xcd\x5f\x1f\x18\x4a\x6d\x7a\x5c\x42\xde\xf3\xd5\xe0\x12\xf2\xe6\xb1\x4b\xc8\x58\x66\x18\xbb\x84\x0c\x92\x18\x7e\x56\xb9\x84\xbc\x79\x48\xe7\x37\x24\x05\x57\xc6\x2f\xe4\x4f\x0a\xbf\x90\x75\x87\xdc\xb6\xf5\xde\x3e\xd1\x9c\x43\x76\x86\xc6\x0f\x77\x0e\x91\x34\xfe\x7b\xf6\x93\xcd\x4c\x15\x70\x95\xff\x6d\x67\xdd\x44\xde\x38\x66\x31\x37\x4b\x91\x1f\x52\x2c\x66\xba\x15\x37\x91\x0d\x42\x5c\x37\xd8\x02\xe3\xeb\xe0\xeb\x84\xd3\xdc\x6c\x88\xeb\x56\x7d\x45\x24\x25\xfa\x6c\x85\x1c\xdd\x0c\xd1\x1e\x7b\x8d\x6c\xd9\x6b\xe4\xd5\x7b\x36\x45\xf4\xc1\x75\xe4\x4f\xaf\xa4\xeb\xc8\xe7\xbe\x3e\x5c\x47\x5e\xee\x68\xdf\x91\xcb\xdb\xe1\x5f\xb6\xe5\x40\xf2\x57\x53\x9b\x3b\x77\xc8\x70\x3d\xba\x0b\x5e\x24\x7f\x3a\x49\xfe\xb6\xe4\x45\xf2\x71\x67\x24\x87\x46\xb3\xab\x63\x57\x92\xb1\x2b\xc9\x13\xde\x95\xe4\x6f\x4b\xae\x24\xbb\xba\xcf\xbf\xe2\xfe\x24\xdf\x3b\x31\x20\xac\xa8\x67\x3c\x63\xa7\x92\xdd\x76\x2a\x79\xe7\x7e\xf2\xa2\xa2\x3a\xb1\x58\xe0\x15\x91\x4d\x8b\xba\x80\xfb\x2e\x6a\xb6\x0a\x14\x59\xf9\x3a\x59\xce\x5b\x2a\x33\xd0\x49\x31\xf3\xc9\x29\xdd\x59\x77\x7d\xca\xbb\x6b\x78\x11\x03\xd3\x0d\xc4\xc5\x4e\x2b\x01\x3b\x1c\x36\x4f\xb3\x28\x04\x84\x40\x90\x1d\x7c\x09\xaa\xb9\xe6\xec\x11\x3c\xf6\x9a\x33\xf5\xdc\x85\x0b\xe7\xe7\x83\xbc\xb9\xee\xfc\xd5\x24\xb9\x48\xf4\x6f\xf7\x8c\x77\xa3\xfa\x5b\x0a\x24\x91\xd8\xb3\x54\x3c\x84\x3c\x57\x72\x93\x22\xd5\x11\xa2\x90\x58\x9e\xde\x55\xb8\xd7\xc6\xc8\xbb\xd3\xbb\xa9\x8c\x91\x47\x9b\x9d\x16\x40\xfb\x07\x21\xd8\x89\xcc\xf7\x1a\xbf\x0a\xc6\x65\x55\xfc\xcb\x15\xb2\x0f\x17\xde\x7d\xb4\xe2\xfd\x44\x05\xff\x2e\x67\xc7\xba\xd0\x66\xc9\xec\xfc\x1c\x1a\x03\x8b\x4d\x50\xa4\x61\x91\x35\x03\x58\xe2\x41\x31\x37\x90\x2c\x4a\xd5\x04\x18\xa8\xa1\x01\xb4\xd8\x0a\xd2\xae\x04\x4d\xad\x47\x82\xb5\xc4\x09\x17\x9c\x61\x96\x81\xd4\x9e\x48\x49\x2a\x53\xc5\xba\x62\x57\xcb\x72\x91\x9d\x50\x0e\x58\x25\x21\xa7\x31\x53\xd8\x68\x76\x96\xfc\x1a\x6f\xcd\x5c\x98\x9d\x9b\x91\xfd\x9f\xb6\xb4\x3f\x33\x4b\x31\x5f\x9a\x69\x05\x59\xce\xd2\x19\xc9\xfb\x67\x33\xc7\xfc\x23\x42\xe4\x10\x17\xc8\x34\x48\x50\x30\xc8\x16\xb7\xad\x6b\x26\x22\x6d\x22\x11\x69\x7b\x96\x00\x5e\x28\x63\x6e\x9f\xb9\x7f\x65\x85\x4c\x29\x90\x2d\xf7\x4b\x1a\xd7\xec\x6f\x9c\x02\x8a\x12\x96\x41\x01\x52\xe2\xc4\x4b\x0a\x91\xb2\x38\xc0\x83\xdb\x6a\xf3\x34\x0f\x92\x1a\x2b\xad\x33\xd0\xc7\x20\xc5\x89\xe7\x79\x93\xa5\x99\x4f\xcf\xf2\x55\x96\xd2\xa4\x23\x38\x7a\x69\x62\x2d\xd0\x09\x9b\x51\x43\x30\xb3\x1a\x70\x8f\xe2\x29\x91\x06\x48\x21\x39\x2c\x31\xca\x5b\x51\x9e\x63\x52\xad\x38\x6a\x45\xe2\x4f\x44\x17\xcd\x6a\x2c\x09\xd2\x88\x9b\x36\x52\x4c\xde\x12\xf4\xd4\x6c\x22\xa6\x91\x77\x39\x04\x0e\x92\xfb\x16\xc1\x6e\xc0\x1e\xc3\x81\x8f\xbc\xed\xae\xe8\xd2\xff\x97\x7d\xe4\x9e\x9d\xa5\x56\x89\xec\x82\xfb\x3f\xf7\x7a\xe7\x06\xbd\x34\x9c\xe7\x9a\x7c\x55\xac\xa9\xd2\x18\x85\x51\x1d\x00\x5d\x73\x25\xc1\x4a\x0e\xf7\xe4\x45\xc1\xcb\x66\x79\x1a\xe4\xac\xd1\x5d\x77\xde\xb0\x97\xfc\xe7\x0a\xd1\x0f\x84\x9c\xfa\xd6\xca\x25\xf5\xf3\x92\x41\x02\x71\xc3\xea\x96\x55\x11\x9f\xce\xa2\x8f\x99\xd4\x2b\x89\xfd\x73\x82\x4e\xd3\x4b\xe7\x79\xc2\x2e\x9d\x80\xd3\x2f\x3b\xc5\x52\xbc\xb8\x6b\xcd\x20\x69\x20\xf1\x2f\x94\x69\xa0\xb2\x5a\xd5\x97\x51\xce\x01\x57\x36\xe9\xe2\x2e\x55\x5c\x19\x66\x1a\x39\x79\xd1\x17\x2d\xdc\xcb\x96\x9a\x9c\x2f\x5f\x3a\x01\xc8\xbd\xa8\x92\x41\xcf\x8c\x1a\xe4\x87\xe2\x70\x19\x2b\xd9\x77\x15\x4b\x8b\xc7\x21\x2f\x8d\xc6\xa7\xb3\x61\x18\x49\xc2\x66\x32\x79\x51\x46\x13\xc6\x42\x16\x16\xfb\x0b\x09\xa0\xb5\xfa\xbf\x5f\x21\x4f\x95\xd5\x9f\x04\x0a\x75\x92\x27\xf5\xa8\xe1\xfe\x72\x85\xbc\x74\xd0\x05\xb9\x95\x3d\x72\x6f\x6f\x1b\xde\x7f\x75\x2e\xf5\x69\xfa\x92\xa2\x87\x51\x92\xe5\x69\x47\x66\xbf\x13\x63\x50\xfb\x44\x65\xd0\x52\xd3\x12\xd5\xf5\x92\x8a\x6f\xf5\xe4\x96\xfd\x11\x82\xb8\xdd\x0c\xa6\x63\xb6\xc2\x62\x58\xb2\x4d\xb8\x28\xd8\xbb\x58\x0d\xa6\xd8\x52\xca\x63\x81\xbc\xf6\xc0\xce\x9e\x26\xe3\xd6\xff\x45\xe2\xbd\xd1\x19\xf4\xd6\xd6\xc4\x18\x4a\x40\x4b\x24\x65\x97\xdb\x5c\xf0\xf2\x1c\x37\xa3\xd8\x7b\xb2\x53\x94\xce\xe5\x12\x40\x18\xe4\xf9\x25\x9d\x1b\x47\x5e\x7c\x37\xfb\x80\x0d\x29\x4a\xdc\xea\xcb\x1f\xa0\x96\xba\xd5\x88\x05\x1f\x27\xa7\x1a\x1b\xfe\x76\x4d\xd3\x7b\x97\xa1\xe8\xbd\x6d\x9b\x66\x3f\xf2\xf3\xca\x08\xf7\x36\x87\x34\x77\x92\xd0\x0d\x3a\xa0\x60\xaf\xbb\x11\xd4\x79\xa5\x9b\xaf\xc9\x10\xf2\x7e\x35\x50\xfa\x24\x23\x37\x2a\x17\xec\x26\x0b\x52\xf2\x6b\x85\x25\xee\xdd\x0e\xb9\xff\x8a\x74\x19\x8d\x76\xb3\x4a\xe9\x64\x29\x4e\x24\xfc\xac\xe8\x92\x56\x0e\x0e\xaa\xe8\x71\x67\x75\x63\x45\xf7\xa2\x7b\x51\x2b\xba\xed\x7e\x96\x33\x58\x0f\x68\xa5\xaf\xca\xfb\x7d\x7b\xc9\x4b\x77\x67\x76\x4e\xf2\x04\xef\x5d\xf7\x8f\xf6\x78\xf7\x6d\x58\xaa\xc8\xbf\x80\xa2\x71\xe1\x17\xa9\xd2\x94\xd5\x74\x51\x0d\xff\xcb\xc1\xab\x02\xa5\x32\xb9\xfa\xeb\xce\x27\x27\xc8\xeb\x1d\xe2\xc6\x41\x96\x2f\xa6\x01\x08\xbc\x3c\x11\x32\xa9\xfb\xd0\xd6\x85\xda\xe7\x9c\x0d\xb2\x9c\xe6\x4a\xb2\x2d\xfa\x92\xeb\x26\x54\xfe\x64\x9e\x68\xcd\x23\xf0\x29\xc0\xe5\xf8\xe4\xf9\x85\x22\xe0\x9c\xf7\x9c\x3b\x85\xec\x30\xad\x65\x07\xf9\x46\xed\xa1\x42\x43\x90\xc9\x24\xdf\xa0\x5e\x29\xda\xf2\xed\x5c\x35\xfb\x52\x16\x64\x3c\x71\x17\xbd\x3b\xee\x4e\xa2\x07\x04\xfd\xe6\x09\x9b\x5e\xe5\x69\x58\x2d\xe8\x10\xc5\x52\x86\x8c\x22\x07\x71\x30\x1b\x5a\xff\x0b\xf4\xc9\x9a\xf7\x4e\x0e\xd2\xb0\x5a\x15\x02\x49\x14\xf4\x70\x11\x80\xc2\xcf\x04\x71\xc6\xaa\xf4\xee\x64\x39\xe1\xab\x76\xdd\x37\x48\x59\x60\xc6\xf3\x16\xa5\x24\x50\x76\x43\x2d\x6a\xb5\x0c\x08\xfb\xc9\x0b\x76\x67\xe3\x82\x81\xf9\x9d\x3d\x2a\x04\xbb\x80\x9d\x0e\x68\x20\xd7\xd1\x6b\x6a\xfe\xe3\x71\x2e\xa6\xcd\xf2\x00\xef\x74\x94\xad\xf9\xa7\x1c\xef\x3a\x69\x6c\x4e\xc2\x68\x25\x0a\x05\x89\x1d\x34\xf9\x96\xc1\xb9\x49\xea\x24\xbc\x12\x97\xc2\x98\x63\x19\x9d\x63\x99\x33\x38\x96\x5b\xb6\x65\x99\x7e\xdc\x79\x68\xe3\x1b\xf4\xf9\xee\x3d\xdb\xbb\x41\x07\x1a\x8e\xff\x66\x92\xbc\x70\x77\xb6\x13\xe6\xb3\x7f\xf9\xa4\xf7\xfc\xa1\x25\xfa\x58\x24\xe1\x70\x43\xe3\xb8\x49\x06\x7d\xbf\xe6\xec\x6b\xc7\x9d\x34\x88\x65\x0a\xa1\x75\xe7\x8d\xfb\xc8\x43\x84\x88\xda\x1a\x3c\x8d\x58\xe6\xb6\xbc\xe7\x9d\xd4\xbf\x6c\xca\x07\xd3\xc9\x42\x83\x25\xab\x41\x3b\xc6\x83\x25\x16\x73\x0c\xaa\x3b\x04\x11\x19\x07\x83\x38\x3e\x78\x78\x48\x0c\x45\x24\x0f\x50\xe0\x2d\x9a\x29\xa4\x32\x96\x46\x41\x0c\xc4\x67\x59\xa6\x01\x32\x99\x41\x4c\x83\x0c\xe1\x63\x69\x0b\xa2\x10\x8a\x8b\x4f\x10\xb2\x2c\x4a\x1a\x9d\x38\xb0\x43\x19\xda\x64\x4a\x8c\x44\x34\xe3\x86\xde\xbd\x67\xe5\xdf\x1b\x34\x09\x83\xd7\x5a\x03\xa3\x03\x66\x78\xc2\xcd\xe2\x8b\x5b\x45\x8d\x56\x8b\xbf\xe5\x10\x39\xdf\x98\x93\x69\x1e\xfe\x56\x0d\xe2\x1b\xcb\xa2\x5c\x10\x05\xb9\x9c\x38\x50\x30\x96\xb4\x82\x5c\xba\xad\x9a\x5f\x0c\x5a\xe9\xe9\x94\x35\x22\xd0\x04\x00\xe3\xc2\xf9\x09\xd9\x9e\x2f\x53\x23\x89\x81\x17\x76\xad\x20\x8e\x69\xcc\x57\x59\x5a\x13\x14\xc1\x1c\xc3\x03\x84\x64\x4d\x9e\xe6\xb8\x39\x6b\xde\x1d\x0b\xfa\x17\xe8\x18\xe1\xa5\xdc\x84\xe5\xe4\x61\x46\xef\xfb\xb4\x31\x70\x4f\x3c\xe2\x90\x29\xb5\x82\x6e\xee\x35\x16\xe4\xdf\x7a\xa5\xd4\xef\x7e\x53\x37\xa4\x4d\x7b\xcd\xf4\xe3\x50\x2e\x9f\xd9\x85\xf7\xfd\x9b\xdd\xe2\x38\xc0\xbb\xe1\xa3\x4f\xf3\xe6\x87\x15\x28\x89\x45\x41\x49\x28\x8a\x52\x6b\xa7\xa0\x54\xb4\xe6\xec\x6d\x60\xe6\xb7\xbd\xb0\x1a\x6b\xce\xde\xac\xc6\xdb\x6c\xdd\xf9\xdc\x37\x90\x7f\xa9\x90\x6f\x0c\xb4\x6e\x6c\x3e\x85\xdb\x5f\xaa\x80\xdd\xbf\xac\x78\x7f\xed\xcc\x0e\x78\x0b\x8b\x5c\x7c\x2a\xf5\xb2\xc0\x6f\xac\x26\x18\x76\x15\x25\x54\x10\xe3\x5a\x1e\xd3\x84\x5d\xce\x15\xa3\x81\xaa\x7b\x73\xca\x03\x15\xf4\x33\x1d\xe4\x5a\xc1\x7b\x41\x5a\x22\x30\xc7\x8c\x4c\x26\xa3\x5a\x81\xe0\xe1\x38\xd6\xda\x4f\x9f\x2e\xf2\xb6\xa1\xb6\x6a\xb3\x54\xd1\x7d\xfd\x8d\xe8\x70\xab\x93\x63\xfe\x20\x76\xb9\x16\x77\xb2\x68\xc5\xde\x70\x09\x89\x77\x53\x6c\x2c\x5b\xa0\xc8\xbb\x1c\x42\x0a\x35\xa5\xfb\x26\x67\x37\xf9\x93\x42\x15\xe7\x3d\xeb\x52\xd1\xea\x25\xcd\x6c\x9a\xea\x5f\x96\xe7\x90\x8f\x5d\x1d\xdd\x93\x17\x4f\xf9\x64\x96\xe0\x56\x72\xbf\xd3\x7b\x66\x9f\x1c\x81\x16\x25\x94\x24\x5f\xdc\x4a\xe6\x01\xfa\x05\x87\xe0\x36\x74\x7f\xc6\x21\xd1\x95\x60\xc6\x80\x24\x79\x37\x16\x94\xa9\xb8\x1c\x21\xf5\x50\xce\xf5\xa9\x92\x16\x06\xfb\xf2\x22\x29\xc1\x03\xe3\x46\xde\x8b\x16\xc4\x1f\xc6\x45\x6b\x25\x83\xd2\x43\x87\xbc\x31\x90\x40\x9b\xf2\xd4\x48\xad\x0d\xd5\x84\xc5\x1d\x01\x37\x95\x0e\x0e\xb0\x32\x17\x56\xc8\x55\x59\x67\x49\x5f\xa0\xee\x8f\x56\x48\x7d\xf7\x66\x6b\xc1\x68\xca\xfb\x39\xc7\xfc\x59\x0a\xe0\x37\x3b\x05\x9b\xc3\xae\xa8\xff\xa9\xed\xf9\x68\xd4\xa3\x6b\x7d\x38\xe0\xfc\x92\x47\x2b\x84\xc8\x68\x4e\x71\x88\x7e\xbc\xb2\x9b\x87\xe8\x1e\xdd\x90\xf7\x8b\x4e\xf1\xa3\x34\x4b\x45\x77\x68\x8b\xe5\x4d\x1e\xf6\x9b\xab\xac\xff\x64\x19\xdf\x4a\x79\x6f\x53\x33\x26\x85\xba\x41\x93\xf5\x19\x87\x4c\x2a\x72\xf3\x31\xc7\xfb\x88\xa3\x24\xce\xc8\x12\x36\x07\x9e\x65\xba\x50\xf8\x6e\xc5\xab\x41\x37\xa3\xf5\x28\x15\x62\x63\xce\x5a\xe2\xf5\x3d\xca\x1c\x25\x2d\x0a\x75\x95\xa9\x2d\x34\x29\xfa\x52\x27\xa7\x41\x4e\x63\x16\x80\xb7\x07\x5c\xd6\xaa\x23\x3c\x2d\x2a\x51\xd7\x75\xc6\x20\x03\x65\x3b\x65\xe2\xd8\x85\x27\xe8\xbc\xf8\x14\x74\x82\xf4\x92\x2a\x7d\xc9\xe2\x4f\xbe\x6f\x8a\x4c\xa9\x09\x73\xff\x75\xd2\x7b\x64\x52\xd7\x5a\x72\x52\x16\x53\x5b\x60\x18\x68\x7b\x5a\x1f\xde\x6e\xae\xe8\x65\xe1\x46\x24\x87\x57\x76\x2f\x52\x86\x74\x48\x47\x29\x17\xf4\x04\x9d\x35\x96\x11\x47\x27\x86\x00\x07\x4b\xf0\x2c\xfd\xd7\x3e\xe1\xab\x3e\xf8\x0c\x54\x69\xce\xdb\x14\x17\xde\xd8\x7b\x85\xf1\xa6\xb0\xba\x8b\x41\x21\x07\x94\x31\x63\xe3\x5c\x48\x43\x96\xa2\xd5\x4e\xad\x34\x30\x4b\x56\x32\x36\xb0\x33\xb6\xda\x9d\x1c\x7b\xc6\xc5\x37\x3a\x13\xa6\x61\x20\x14\x72\x6b\x94\x51\x4f\x5c\xf2\xd3\x71\xb4\xcc\xbc\xaa\xe0\x1d\x31\x78\x1a\x12\x3d\x2e\xf1\x15\x08\x81\x32\xcb\x94\x6a\xc8\xaa\x12\xee\x43\xec\x58\x68\x8a\x85\x34\x66\x97\xa3\x1a\x6f\xa4\x41\xbb\x89\xd1\xc4\x3e\xf5\xee\xea\xa9\x21\xa3\x59\x1e\xa4\xb9\xf4\xa4\xa0\xde\x8a\x07\x07\x29\x81\xaa\xea\x5c\xda\x2d\x97\xba\x34\x90\xd6\x6f\x7a\x48\x8c\xa0\x15\xdc\xcf\x53\x55\xc7\x61\xf9\x89\x5a\xae\xb8\x2b\x75\x5a\x30\x3a\x0f\xcc\x61\x98\xf6\x52\x50\x03\x0f\xce\x9b\x54\xe7\xd9\x95\x46\x89\x51\x29\x78\x45\x08\x99\x43\x30\xc2\xb8\xaf\xf0\x98\x2c\x75\xe9\x1d\xb3\xf4\x56\x2a\x2a\xa3\xb7\xa2\xb5\x8d\x1e\x42\x48\x8e\x3b\x66\x51\xac\x52\xf3\x03\xc3\x4a\x38\xcd\x3a\xf5\x7a\x74\x59\x67\xe2\x84\x4f\x81\x22\xb4\x9b\xc1\x61\x95\x86\x93\x25\xa2\x6e\x34\xff\xa3\x33\x90\x31\x48\x39\x46\xab\x8f\x08\xca\x71\x39\x00\xdf\x14\xd9\x47\x75\x22\xd4\xfc\x0a\xe9\xf6\x48\x95\xae\x1c\xab\xd2\x95\xa3\xe2\xff\x40\x12\xe1\xd7\x11\xf1\xd7\xf1\x2a\x5d\x39\x0e\x54\x52\x3c\x3a\x06\x3d\xc2\x72\xf0\xe7\xb1\x2a\xad\x73\x7e\x14\xff\x3d\x62\x31\x5a\x9c\xb4\xc8\xf2\x95\xb8\xfd\xe5\x79\xdd\x71\x7f\xa3\xb2\x05\xc0\x5d\x9f\xf2\x2e\x0e\x2f\x52\x92\xcf\x47\xb2\x0a\xac\x39\x44\xab\x3e\xb3\x35\xe7\xea\xa0\x56\x63\xed\x9c\x85\xe7\x91\x93\x7f\x52\x96\xf3\x94\x85\x8a\xb2\xad\x3b\xbf\x33\x49\xbe\xe4\x10\xbb\x98\xfb\x99\x2b\xca\x69\x75\x67\xcd\xc6\x4b\x1c\x17\xd8\x5a\x41\x72\xa8\xc9\xbb\xa9\xc8\x52\x5d\xe8\x2a\xc2\x28\xab\xf1\x15\x96\x76\xc5\x31\xea\x2a\x2f\x94\xc2\xe7\x01\x52\x58\x16\x95\x46\xe8\xca\xe5\x93\xbf\x40\x76\x5a\x4e\x97\xfb\x07\x8e\x77\x5e\xdb\x16\x8a\xe9\x97\x33\x0f\xf9\x37\x83\x34\x8f\x6a\x20\x33\x06\xa2\x8a\x5c\xb9\x51\x0c\x18\xa1\xb9\x85\x1f\x20\x9c\xb4\xae\xc4\xb4\xea\x21\x90\xcf\x4c\x90\xd2\x8a\xbb\xff\x6d\xc2\x7b\xdf\xc4\x82\xf5\x0c\xe7\xd7\xbc\x68\x7a\xb4\xd3\x72\x21\x56\x05\xd9\x61\x2b\x2c\xd5\x2e\xfb\xa1\x4f\x17\xd3\xa0\xb6\x2c\x55\x92\xc6\xdd\x81\x11\x04\x82\x3e\xb5\xa2\x86\x54\x1f\xb4\x83\xbc\x89\x2e\x73\xd0\x81\xa2\x6c\x94\x00\x78\x12\x3a\x87\xe9\xeb\xa9\xd5\xc9\xc1\xd0\x91\xa1\x1c\x58\xd4\x03\x0a\x44\x1e\xc7\x32\xe2\x00\x49\xa5\x18\x7e\xd6\xb4\xda\x2b\x4c\x29\x9a\x48\x1e\x92\x0e\x9f\x41\x2e\x48\x25\x8f\x43\x2b\xfa\x36\x66\xf5\x5c\xd9\xe8\xa5\xbb\xa7\x49\x31\x53\xd6\xe2\x32\xe9\x63\xca\x32\x8d\x00\x52\xb0\x00\xa8\x53\x8d\x32\xa0\x8c\x3e\x3d\x2f\x59\x15\xab\x50\x94\x14\x45\x54\xc0\x04\x56\x1c\x52\x2b\x68\xd8\xb7\x79\xa3\x61\x9a\x8e\x4f\x5f\x43\x5e\xbc\xab\xf4\xd0\xfd\xee\x6b\xbc\x9b\x37\x28\x63\xf0\xb4\xc5\xa5\x04\x6c\xec\xc5\x53\x85\x3f\xe4\x3e\xe8\x4f\xb8\xe6\x4c\xca\x09\x5e\x77\xde\xfe\x14\xf2\x1f\xf7\x0d\xd1\x2b\xbc\x7c\x9f\xf7\x8a\xbd\x5f\x31\xbd\xc2\x96\x15\x05\x74\xbe\x4f\x59\xe0\xe1\x12\x9e\xc3\x81\x93\x2e\xcb\x39\x97\x1e\x8c\x35\x65\x46\xc9\xe8\xa1\x5c\x37\x6b\x8c\xc8\x48\x49\x0c\xae\x3c\x2c\x08\x0f\x5f\x79\x87\x1c\x7a\xfe\xc2\xe2\xe9\x13\x62\x59\x33\x8d\xbe\x02\x6e\x7b\x62\x24\x47\xfd\xa3\xc7\x0d\x5f\x79\x30\xcc\x15\x33\x38\x68\x11\xb1\xfb\x4b\x5d\x95\xd1\x57\x4c\x3b\xb0\xa7\x5d\x1a\x24\xd2\xde\x80\xfd\x45\x6f\x31\x58\x2e\x73\x2d\x06\xd5\x5c\xdd\x5c\x0f\x94\x00\xc1\x2e\xb7\xe3\xa8\x16\xe5\x71\x57\xad\x50\xd2\x89\xe3\xaf\xa4\xea\xe7\x79\xd2\x9b\x74\xce\xbb\xf9\xbc\xf4\x26\xcd\x4b\x5c\xb9\x44\x2f\xfa\x9b\x47\x7e\x62\xe5\xe8\xdf\x3c\xf2\xa6\x2a\xfc\x75\x0c\x6a\x87\x9f\x2c\xaf\x59\x22\xcf\xe7\x27\xc8\x3e\x14\x1b\xdc\xbf\x9e\xb8\x42\x42\xf0\x97\x2a\x0b\x28\xa8\x94\xd4\x04\x85\xf4\x52\x52\x10\xc8\xbd\x6e\x88\x3a\x55\xda\x4e\x3b\x49\x94\x34\x90\x32\xcb\x1d\x13\x25\x8d\x6d\xc8\xb9\xd6\x59\x55\x65\xb7\x70\x56\x7b\x05\xb2\x27\xcc\xa9\x25\x4d\x22\x69\xaf\xfb\x12\x6f\x1e\xac\x82\xd2\xca\x58\x8f\x83\x06\xd6\x18\x25\x8d\x99\x30\xca\xf0\x2f\x99\xac\x5f\x55\x23\xae\x26\x64\xbe\xb0\x16\x08\x25\x04\x13\xe4\xec\xfc\x5c\x66\x05\xdb\x3c\x4c\x14\x71\x77\x1f\xf0\x6a\x0b\x0a\xa9\x31\x0e\x1a\xf6\xa6\x0d\x0a\x3c\x27\x2d\x65\x2c\x82\x6c\x53\x9c\xc3\x22\xc6\x50\x7c\xdf\xc0\xdc\xdf\xe5\xaf\xac\xd6\xff\xef\x89\x92\x2e\xec\xb1\x89\x2b\xa6\x0b\xfb\xf3\xca\x36\x74\x61\xdb\xd3\x6b\xd9\x5b\xd8\xfc\x60\x0b\xfb\xd8\xfa\xfe\x89\xb3\x85\xff\x07\xd9\x59\xa9\xcc\x58\xac\x85\x5a\x10\x33\xf7\xfb\x88\xf7\x92\xe1\x45\xb4\xf6\x5b\x7a\xce\x2a\x6b\xa9\xa0\x61\xe2\xb5\x31\x73\xfd\x74\x78\xfe\x9a\xf3\x14\xc1\xdc\x5d\x64\xe2\x82\x09\xb2\xf9\x20\x6f\xae\x39\x2e\xfa\xc4\x98\x0f\xd7\x9d\x47\xf6\x93\xb7\x4f\x90\x6b\xe2\x60\x89\xc5\x0a\x3c\x12\x22\x46\x5e\x3f\xe1\x7d\xf7\xc4\xd9\xf2\x63\xcb\x07\x44\x07\x8f\x88\xd5\x8a\x42\xd6\x4f\x4c\x91\xf7\x29\x4f\x53\x96\xb5\x79\x12\xc2\x9d\x0a\x63\xf4\x51\x00\xf5\x55\xf5\x3e\xbd\x20\x56\x52\x57\x8a\x49\xff\x79\x07\x7d\x06\xec\x98\x14\x25\x4d\xf0\x55\x21\x1c\x9c\x53\xf6\x33\xfc\x18\xfa\xd9\x49\x42\x96\x52\x1f\x87\x5c\x14\x91\xbb\x72\x95\xa7\xcb\xa8\xca\xb8\x73\x7e\x56\x69\x91\x34\xc6\x27\x7a\x42\x60\x0d\xa0\x03\x85\xe0\x01\x39\xd0\x3e\x7b\xa9\x6a\x7a\x1c\xc1\x4c\xd2\x4c\x0e\x4a\xd6\x25\x3f\x9b\xe9\x5d\x3d\xd0\x4b\xc9\xdb\x45\xf1\x8c\x88\x4a\x8a\xf7\xa7\x75\x97\x7e\xbc\x42\x7a\xd6\xd5\xfd\xdd\x8a\xf7\x2b\x95\x85\xd2\xd3\x1d\x5d\x27\x21\x26\xa8\xca\x77\x67\x95\x44\x0b\x3b\xb3\x0a\x83\xa6\x18\x23\x27\x8b\x48\x39\x9e\xd0\x3b\x4e\x2f\x5a\xb3\xfb\x0f\x15\xd2\xe7\x88\xb8\x9f\xa8\x78\x7f\x58\x59\xe8\x79\xbe\x0b\x27\x61\x77\xe7\x58\x9e\x84\x9d\xdc\xeb\x29\x76\x78\xd3\x9b\xfc\x88\x35\xef\x8f\xee\xd9\x59\xb9\xd2\x24\xa6\xa8\x06\xfb\xbd\x09\xef\x43\x13\x1b\x14\x1a\x42\x72\xf1\xfd\x46\x34\x97\x16\x0e\x88\xda\x33\xaa\x88\xd4\xbd\x24\x17\xe0\xd2\x48\x7b\xc5\x47\xf0\x46\x80\x6e\xbc\x4e\x3a\xff\x0b\x26\x6a\x66\x40\x5f\xd0\x1b\xd5\xb2\x10\xd2\xeb\xe8\xfc\xdd\x8b\xa6\x73\x95\x5c\x9d\xde\x1a\xf2\x60\x59\x6c\x99\x72\x05\xa8\xb3\x40\xfe\x37\x6a\x88\xfb\xd5\x94\x8b\x82\xa4\x9b\x37\x05\xa3\xc6\x2e\xd7\x58\x3b\xb7\x66\x2a\x0f\x92\x07\x03\xec\xc0\xcc\xfc\x85\x85\xc5\x99\xf9\xd9\xc5\x93\x77\xf6\xf4\xa5\xdc\x60\x6f\x23\x3d\x95\x92\xb7\xee\x21\xcf\xdf\x2d\xc6\xca\x7d\x6c\xa2\xec\x0f\x5c\x62\xb4\x8a\x13\x2f\x7b\x05\xfe\x3b\xe5\xfd\xde\xd7\xae\xe6\xaf\x3b\x9f\xad\x90\x77\x3b\x64\x2f\x94\x77\xdf\xb6\xab\xbe\xe0\x65\x86\xc2\xbb\x41\xf1\x15\x09\xd7\xba\xde\x51\x58\x09\xf2\xde\xc2\x7d\xfd\x1d\xce\x6e\xaa\xc7\x7b\x4e\xa4\x77\xa3\x3e\x99\x46\xa7\x47\x3a\x8c\xe4\xd3\x95\x9d\x8d\xe6\x29\x84\x4b\xf7\xd5\x95\x72\x6c\x9c\x61\xf5\xb2\x5c\xd0\x46\x33\xb8\xfa\xeb\xce\xfb\x1d\xf2\x4b\x0e\x79\x32\xc7\x10\xc1\x7b\x8e\xa3\xf4\xea\xbe\xd9\x21\x2f\xdc\xc9\xf9\x16\x94\x07\xab\x9e\x4f\x79\x3b\xf3\x66\x2f\xd8\x0d\x2a\x71\x5f\x85\x3b\xae\x1c\x57\xf2\x65\xce\xc5\xad\x52\xa0\x13\x07\x8d\x40\x30\xe8\x60\xb9\x5d\xd8\x5e\xa7\x4e\xcb\x58\xb9\x53\xbc\xd6\x69\x29\xb7\x61\xf7\x75\x8e\x77\x5f\xdf\x37\x4a\xe3\x9b\x32\x50\xbb\xd7\x20\xc4\xdd\x88\xb8\xb3\x76\x05\x34\x17\xb2\x90\x86\x66\x15\xfe\xba\x73\x84\x7c\x93\x1d\xc8\x6c\x29\x3a\x5d\x32\xd1\x49\x63\xfb\xd9\x47\x1d\x72\xfb\xf6\x67\xdf\xfd\x01\xc7\x7b\xad\x03\x37\x80\x19\xf6\x95\x74\x71\x6e\xf1\x6e\x80\xdb\x54\x19\xeb\x30\xfe\x13\x4c\x76\xca\x1a\x7c\x82\x0a\x21\xb4\x4a\xa3\x24\x7f\xf6\xf5\x55\x5a\x8f\x79\x00\x7f\x60\x4f\xab\xf4\x85\x2f\x06\x9d\x53\x3d\xa8\xb1\x87\x5e\x56\xa5\xad\xa0\xfd\x42\x7c\x65\x3e\x07\xca\x95\x44\xb1\x4f\xbe\xeb\x5a\x72\x6e\x47\xf7\x95\xfb\xee\xa7\x7a\x2f\x2c\x3d\xc3\x83\x21\x1e\x4e\x2f\x28\x2d\x8c\x58\x48\xb1\x7c\x36\x14\xde\xa9\x34\xa8\xe7\xf4\x7a\x7a\xa8\x99\xe7\xed\x13\x33\x33\xf7\x67\x3c\x99\xc6\x6d\xe8\xf3\xb4\x31\x73\xd8\x5f\x77\xfe\xc0\x25\x4f\x25\x7b\x9e\x91\xb2\xba\xbd\x48\x4f\x23\x93\xcf\x90\xba\xa6\x03\x76\xe6\xb8\x27\x17\x2a\x39\x70\xd3\x76\x6b\x24\xd8\xc5\xa3\x75\x21\xbd\x9d\xf3\x98\x3c\x44\xae\x35\x55\x81\xbc\xcd\xd2\x3c\x62\x57\xa8\xf1\x0e\xd9\x1b\xc4\xf1\x85\xba\x6b\x69\x14\x5f\x4a\x5e\xbc\xab\x44\x05\x9a\x4d\xba\x57\xbc\xd9\x17\x93\x49\xc9\x60\xba\x17\xc9\xfc\x4e\xb7\x44\x1e\x16\xe4\x42\xd7\xe8\xb6\x1e\xdd\xf5\x11\x99\x88\x28\xaf\x76\xc8\x55\x21\x6b\x0b\x5a\x96\xd4\xc4\x06\x7a\xf0\x51\x27\x26\xf7\xef\x6c\xfc\x5b\xcf\x2e\x42\x40\x90\x59\xb1\x80\x66\x67\x86\x51\xce\x88\xec\x61\x49\xa7\xe5\x06\xe6\xda\x2f\x92\xdd\x58\x91\x17\x93\x49\xe9\x28\xb0\x2b\x0b\x4e\xc9\x53\xb4\xd6\xeb\x5c\x70\x39\x6a\x75\x5a\xee\x55\x96\x06\xd0\x2a\x11\x25\x7d\x4a\x64\xe4\x2a\x56\xdc\x61\x3b\x7e\xec\xfb\xde\x8f\xe4\x1b\x34\x8e\x86\xb5\x32\xd7\x90\x4a\x14\xda\x8f\x5a\x2a\x78\x25\x24\x4b\xbb\xba\x91\x60\x0b\x91\xa7\x93\xa9\x56\x70\x19\xa9\xef\x53\x01\x63\xe2\xd9\xd7\x5b\xf0\x0b\x94\xec\x6f\x05\x97\xcf\xb2\xa4\x91\x37\xfb\x97\x78\x06\xb9\xba\x15\x5c\x36\x08\x69\xdf\x52\xdf\x42\x26\x5b\x72\xc5\x9e\xea\xee\x0b\x79\x67\x29\x66\x30\x6e\x74\x8d\x81\x8e\x44\xc9\x06\x1d\x89\x92\x8d\x3a\x12\x25\xa3\x74\x44\x6e\x8c\xbe\x1d\xf9\x56\x42\x5a\x9d\x38\x8f\xda\x31\xbb\x50\xef\x5f\x24\x24\x13\x09\xcf\xdd\xdd\xa7\xd9\x3c\x61\x57\x9c\x66\x3f\x8d\x4c\xb6\x83\x5c\x6c\x62\x7b\x63\xbe\xdc\x21\xd7\xc8\x17\xc6\x14\x5f\x61\x9a\xfb\x10\x21\xed\xaf\x58\xe3\xdf\x41\xa6\x84\xb0\x1c\xa5\x2c\x74\xbf\x69\x88\x49\xfe\x5a\xb2\x37\x8f\xf2\x98\xd9\xf3\xf7\x54\x19\xba\x68\x3d\xfc\x66\x72\xa0\x03\x11\x98\xb8\xf1\x6d\x4a\xf5\x05\x87\x2c\xee\xc6\xa1\x77\x7f\xcc\xf1\x7e\xd8\xe9\xff\xae\x04\x41\x09\x2a\x24\x54\x91\x09\x7e\x3e\x02\x87\x0a\xad\xca\x32\x59\x49\x9e\x0a\x8e\x1f\xd5\x60\xbc\x5e\x7e\xed\xd3\x73\x41\x04\x26\x01\x96\x32\x05\x9d\x04\xb1\x32\xd2\x3d\xa4\x93\x82\x36\xc5\x27\xbf\xb7\x6d\xd9\xa5\x2f\xe3\xe5\x3e\xe0\xf1\xbe\x2f\xcc\x01\xf7\x1b\x13\x95\xab\xa1\x04\x00\xd3\x69\x20\x4f\x3b\x85\xa6\x47\x95\x93\xfb\xb3\xeb\x93\x77\x39\xdb\x8d\x00\x19\x76\xfb\xbb\xe7\xbd\xb3\xc3\xde\xdb\x2b\xd9\x77\x68\xd2\x75\x11\x16\xcd\x27\x3f\x3d\x41\xce\x6f\xaf\xbb\x0b\x2c\x5d\x89\x6a\xec\xa2\x94\x02\x99\xfb\x7f\x55\xbc\x9b\xca\x0f\x65\x56\x9b\x40\x0b\x8b\x10\x80\x22\x4b\xf9\x31\x6b\x04\xb5\xae\x8c\xb0\x5b\x73\xf6\x6b\x9f\x77\xe9\x45\xb2\xee\xfc\xb3\x43\x9e\x23\x0d\xe2\xdf\xe9\x3d\xf3\x92\xf8\xe3\x92\x85\x8a\xa9\xb2\xb5\xc9\x1a\xe9\x45\x79\x66\xcd\x73\x77\x81\x14\x35\xbb\xb7\x7b\xcf\xba\xa4\x7f\x59\x75\xa1\x2f\xfe\x28\x15\xd6\xc9\x9e\x76\x90\x37\xdd\x97\x78\xcf\xbb\x24\xfe\xb8\x54\x06\xc9\xba\xfb\xe2\x59\xd4\x2f\xa2\x0b\xab\xf2\xa2\x15\xeb\x43\xa3\x04\xa4\x4d\xa9\x89\x43\x15\x5b\x94\xe9\x06\xcd\x76\xde\xf2\x64\xf2\xbc\x1d\x87\x8e\x71\x7f\xff\x49\xde\x5b\x9c\x3e\x2f\x8a\x28\x7b\x44\x90\x29\xe0\x70\x72\x4e\x5b\xa8\xa0\x5c\x3c\xbb\x20\x8a\x25\x12\x41\x5b\xa5\x57\x52\x70\x32\x3e\x9d\xcb\x69\x33\xc8\x0a\xcf\x65\x34\x1b\x06\x19\x0d\xc2\x56\x94\x89\xce\x99\x81\x66\xc3\xfa\xe9\xaf\x3b\x6f\xb9\x9a\x7c\xc8\x21\x53\xb5\xe0\xf6\x4e\x12\xc6\xcc\xfd\x15\xc7\xdd\xb3\xd4\xcd\x99\xf7\x56\xe7\x92\x7a\x88\x73\x4f\xe7\x4f\x9f\x03\x20\xb9\x90\x85\xf4\xe4\x2c\x5d\x82\x77\xa5\xe9\x57\xce\x84\x4a\x89\x62\xf6\xfc\x60\xa6\xf0\xdd\x6a\xe2\xbe\x01\x59\x18\x3d\xbb\x3b\x89\xce\xec\x50\x95\xd8\xee\x82\x16\x64\x39\x4d\x39\xcf\x33\x85\x07\xa3\x97\x04\x34\x05\x90\xd2\xc7\x5c\xca\xbf\xae\x90\x49\xb9\xc4\xee\x9f\x54\xc8\x8b\x76\xf2\x16\x2b\x1f\x3a\xef\xef\x9d\x4b\xb2\x2d\x39\x3b\xd6\xe9\x33\xb6\x77\xe1\xcc\xae\x17\xf0\x34\x92\xfd\xa2\x02\x9e\xd2\x4b\x9d\x34\xbe\x54\x38\xdd\xab\xe9\xf0\x09\x91\xce\xdf\x1a\x4d\x28\xa3\x69\x27\x01\x60\x32\xb1\x35\xa4\x39\x42\xc6\xbc\x48\x6f\xe3\x2e\xef\x28\x4b\x33\xb8\xe9\xab\x86\x7c\x42\xe6\x79\x9a\xd3\xeb\xaf\x3f\x6e\xaf\x58\x54\xa7\x51\x8e\xae\xf3\x2c\xa9\x22\x30\xd4\x6a\x94\x31\xf9\x54\xd9\x93\x7c\xf2\xf7\x53\xa8\x35\xfa\xfc\x94\xf7\x89\x29\xec\x73\x23\x5a\x91\x5a\xcb\x98\xdb\x40\xff\xb2\xcb\x00\x89\x9c\x29\xe4\x6a\x71\x6e\xc5\xb6\xa7\x87\x2e\x81\x12\x83\x9d\x98\x99\x69\xf2\x2c\x3f\xd1\xe6\x69\x3e\x03\x47\xfd\xb0\x0d\x88\xcc\xeb\x72\x76\xb8\x39\x67\xfd\xa6\x6a\xb1\xc9\xe8\x25\x51\xd9\x25\x13\x7d\x11\x56\x06\x7d\xd2\xd4\x9a\xa8\x19\xb4\x67\xef\x26\x1d\x11\x50\x34\xa3\xd0\xb1\xc0\x4e\x8f\x4e\x95\xa2\x01\xda\x02\xb0\xe8\x25\x0c\x72\x8c\x57\xca\x70\xd0\xa7\xce\x2f\xc0\xa8\x79\xcb\xd8\xb6\x19\x46\xe0\x56\xe9\x25\x70\xc9\xd7\xcf\x2f\x09\x66\x00\x7b\x0a\x75\xd1\x28\x99\x56\x41\x4c\xa2\xa2\x40\xf9\x8c\xea\xf0\x0f\x1a\x07\x5d\x86\xf1\xec\x11\x8f\x61\xd2\x0f\xfb\x6a\xe8\x88\x39\x9d\x81\x32\x33\x48\xe8\xdc\x3c\x0d\xc2\x30\x65\x59\x26\x96\x1f\x83\x37\x12\xae\x7c\xc0\x3a\x99\xa8\xe5\x92\x58\xba\x18\x3f\x17\xb3\x7c\xf4\xd8\x0d\xfe\x11\xff\x88\x7f\xf4\x12\xd0\x15\x55\xb3\xd8\x7b\x51\xb6\xdc\xa5\x9d\x24\x66\x59\x06\xfb\x0c\xcc\x2a\x8d\x94\x01\x4b\x93\xc2\xee\x4f\x3b\x89\xb5\xe3\x29\x2a\x34\x61\xe2\x32\x49\x30\x44\x19\xc1\xdf\xe8\x23\x8d\x8f\x71\x5a\x13\x86\x54\x04\x28\x22\x20\xb6\x6a\x1a\xae\x0f\xd1\x42\xa7\x06\xb6\xa5\x1c\x5e\x83\xc7\x69\xb4\xcc\xe2\xae\xd4\xe2\x26\x3c\x99\x06\xa4\xbe\xa5\x98\x55\x65\x04\x87\x98\x62\x16\x64\x50\x04\xec\xa4\x9d\x36\x5c\x15\x34\x61\xab\x6a\x0f\xc8\x5d\x84\x5b\x53\x6f\x32\x0f\x82\xf0\x3d\x4c\x61\x2a\x76\xb0\x7c\xd1\x88\x24\x81\xf6\x54\x94\xbe\xe7\x13\x32\x2b\x0d\x5f\x45\x24\x8a\x34\x2f\xd5\xa9\xe4\x20\x94\x5f\xb5\xb8\xa5\x24\xd3\xd0\x66\x29\x50\xef\xa5\x98\x61\xa7\xee\xbe\x78\xd6\xa7\xf7\xf1\x0e\x94\x55\x1b\x13\x2a\xce\x39\x80\xde\x22\x7f\xb8\x14\xe5\x69\x90\xea\x6a\x24\xf1\xd1\x47\x0f\x15\xc4\xa0\x41\xa8\x42\xce\x57\xdc\x56\x05\x1a\xa4\xe8\x6f\x9e\xb3\x56\x3b\x97\x9f\x8b\xa6\x64\x74\x2b\x4f\xe9\x52\x90\x45\x35\x1a\x74\xf2\x26\x7a\xc4\x79\xe2\xc5\x09\xd1\xfc\x2a\x4f\xc3\xe7\x78\x68\x60\xcd\x0b\xe3\xec\x99\x34\x68\x40\xbe\x01\x7a\xc8\xfb\x36\xdf\xf7\xbd\xc3\x30\xf6\x07\x3a\x2c\xed\x9a\x69\xf7\x0e\x79\xb7\xc9\xb7\x90\xaa\x47\xd7\x50\x95\x5c\xb1\x9d\xf2\xee\xa9\x64\x7a\x08\x20\x81\xaf\xe3\x84\x9e\xd7\x09\x00\xad\xd6\xfd\xb4\xeb\x7d\xd4\x55\xbf\xa4\x6f\x56\x74\x99\x85\xd3\x08\xd0\xd0\x07\xbf\x43\xc6\x94\xc0\xfd\x2a\x23\x8b\x64\x5c\x66\x12\xe1\x92\xa5\x59\x33\x00\xbf\xae\x4e\x52\xfc\x10\x8b\x05\x0a\x6d\x31\xca\xfb\x66\xcf\x9d\x05\x72\xa7\x14\xa2\xc0\x8a\xc1\x18\x0e\xe1\x3c\xcc\x09\xf9\x59\xfc\x0d\x10\xc9\x3c\xcd\xd4\x86\xb3\xd8\x77\x8d\xe6\x79\x82\x90\x9b\x1f\x90\xa3\xb8\x95\xca\xff\x9d\x38\x71\x0b\xbd\x39\x8b\x1a\x09\x0b\xcf\x43\x9f\x6f\xbd\x19\x03\x55\x6e\x25\x94\x1e\x3a\xaf\xcf\xb6\x7a\xaa\x76\x1b\x78\x5c\x54\x0b\xcf\x68\xcf\xa3\x10\x83\x1d\x25\xf4\xe6\x90\xd5\xa2\x56\x10\x2f\xcc\xdd\xea\x1f\x26\x37\x87\x51\x23\xca\x75\x7b\xb2\xc9\x23\xf4\x61\x7a\x94\x3e\x4c\x7d\xdf\xa7\x0f\xd3\x1b\x29\x96\xca\x6e\xb5\x4b\xa9\x6f\x1f\x56\x7f\xe9\x62\x37\xe3\x04\xf7\x2d\x9f\x15\x1f\x64\xb7\xfa\xfd\x9e\x89\x86\x8b\xaa\xc4\xe8\xcd\xfe\x41\x55\xde\x33\x3d\xfa\x30\xf5\xa6\xbd\xd2\xec\xe8\xa6\x54\x07\x1e\x96\x15\xe8\x07\x7a\xa6\xec\xae\x2d\x45\x49\x90\x76\x17\xe6\xb0\x23\x38\x43\xa7\x2f\xb7\x79\xc2\x92\xdc\x7c\x26\x4a\x18\x85\x8d\x2a\xee\x8a\xe8\xc3\xf4\x9c\xf8\xe7\x0e\xf1\xcf\xa2\xf8\x67\x5e\xfc\x73\x3a\x12\x6b\x35\x87\x88\x2f\x92\xa5\x5d\x40\xce\x87\x0b\x86\x28\xca\xb3\x9b\xe8\x02\x63\x88\xff\x71\x62\x66\xa6\xdd\xec\x66\x51\x2d\xf3\x93\x28\xcb\xfd\x06\x5f\x99\xa9\x75\x3a\x33\x77\x8b\x72\x33\xd8\xb2\xdf\xcc\x5b\xb1\x58\xbb\xa2\x4f\x45\x3f\x5a\x62\x62\xc4\xec\x2c\x8b\xfe\x88\xee\x88\xde\x88\xce\x88\xbe\xd8\xdb\xe6\xe8\x91\x63\xd7\xd3\x5b\xe8\xd1\xbb\x22\x08\x16\x3c\x7a\xe4\xc8\x11\xf1\x73\xf9\x26\x3a\x47\xc3\x28\x4c\x0e\xe6\xb4\xd6\xe4\x5c\x52\xa4\x5a\xd0\x8e\x72\xbd\x73\xfd\xa2\x03\xc5\x44\xc1\xda\xb0\x9e\x55\x79\x98\x7a\xa7\xcb\x0f\x09\x39\x2f\xc8\x7e\x9e\xeb\x1b\x41\xf2\x12\x79\x33\x65\x08\x10\x28\xea\x84\x03\x92\xa9\xc4\x8e\x82\xb2\x53\x75\x4a\x24\x62\x8e\x22\xb4\x3a\xfe\x0c\xae\x28\xcc\x09\x90\xd0\x63\x2f\x79\xf6\xf1\xe9\xa3\x62\xe3\xb7\x82\x46\x12\xe5\x9d\x90\x89\x4a\x52\x44\x76\x11\xfc\xf5\x0a\x03\x28\x52\x2c\x7e\x9c\xca\x31\xd1\x76\x1c\x80\x17\xc4\x79\x09\xe9\x1a\x07\x69\x03\x09\x25\x94\x6e\xa7\xac\x26\xd8\x26\xc5\x5c\xd5\x82\x76\x9b\x85\xe2\x75\xca\x3b\x60\xa3\xeb\xb4\x7d\x7a\xe8\xb4\xdf\xf0\x4f\xd0\x23\xfe\xd1\x96\x74\xdb\xd1\x2f\xc1\xed\xbb\xe5\x4b\x87\x40\x75\x6e\x95\x81\x4f\x41\x1e\x62\x7a\x89\xa8\x4e\x57\x19\x95\x1a\x14\xa3\x27\x59\x2b\x80\x78\x0e\x39\x23\x11\x13\x34\x06\x3c\x2d\x02\x6a\x52\xc4\x76\x90\x66\x2a\x50\x22\xd0\x76\x35\x15\x45\x98\x32\x99\x88\xc2\xc4\x83\x92\xf1\x70\x30\x43\x21\x5e\x6a\x50\xd8\x8a\xa4\x84\xc2\x60\x3b\xa5\xab\xa2\x55\xe4\x21\x0b\x2c\x0f\x9f\x90\xdb\x59\x5d\x4c\x97\x7a\x06\x0d\xeb\xae\xa9\xc9\x6b\x77\x40\x92\xf3\x6a\x41\xc2\x13\x70\xae\x14\xab\xee\x49\xd8\x4c\x95\xb4\x3a\xc8\xa9\xda\x69\x33\xb2\x7b\xaa\x82\x20\xbc\x5f\xdc\x76\x30\xaf\x3c\xa5\x21\x5f\x4d\xe8\x21\x19\xb1\x58\x78\x28\x21\x0d\xaf\xa5\xc0\x18\x41\xa6\x26\xf9\x77\x94\xd0\x73\xa2\x4b\x59\x16\x1c\xc6\x10\x40\xd1\xda\x09\x42\x69\xe0\xd3\xf3\x5c\x2e\xb6\xb4\x87\xc7\x1c\xb0\x69\x96\xe0\x4d\x3d\x0d\x6a\xf2\x4c\x23\xc5\xd2\x5d\x62\x08\xe7\x4b\x28\xad\x21\x33\xa9\x77\xf4\x21\xb1\x72\xd0\xff\xc3\x70\x5d\xc9\xbd\x25\xfe\x68\x73\xe4\x0b\x7c\xbc\x29\xa2\x46\xa2\xeb\x53\xf0\xc0\x92\x21\x03\x39\x1b\xf7\x3b\xe0\xab\x36\x00\xb4\xd8\x27\xe4\x34\xb2\x00\x99\xe8\xfd\x51\xff\x59\x86\xb8\xac\x11\x56\x82\x8c\x7a\x47\x9f\x75\xe4\x48\xcb\xc3\x32\x77\x44\x83\x4b\x1d\x7f\xf6\xb9\xc8\x13\x67\x35\x37\x92\x5e\x3c\x60\x2d\xe0\xf9\xd3\xf7\x9c\xbe\x88\x38\x9d\xc8\x13\xc7\xdd\xb2\xc7\x50\x80\x56\x5d\xe0\x7e\xe0\x56\x56\x37\xf0\x62\x13\xa1\xac\x81\x93\x69\xf2\x98\xc9\xf7\x0a\x7d\x8b\x5d\x66\xa9\x38\x67\xbe\xe8\x42\x32\x5d\x6c\x10\xe9\x7d\x8b\x61\xb0\xb9\xf8\x17\x36\x39\xcc\x26\x4f\x1a\xc8\x49\xb3\x2e\xf0\x1c\xab\x2c\xc6\x1d\x25\x08\x88\x20\x74\x6a\xb4\x29\x9b\x66\x05\xea\x32\x62\x7b\xd8\x7b\xd0\xa7\x87\x16\xb8\x0a\xc2\x16\x7b\xdf\x7e\x5d\xc5\xdd\x26\x08\x65\x18\xd5\xeb\xfe\x61\x71\xc5\x47\x99\x81\xd1\x0d\x49\x10\x43\x83\xc9\x8d\xb0\x68\x54\x93\xbe\x63\xf2\x40\x65\x4c\x83\x47\x2b\xe7\xb8\xd5\x34\x82\x19\x03\xd1\x02\x42\x7d\xc5\xb9\x14\x42\x50\x10\x63\x9a\x13\x84\xee\x0e\xb5\xab\x5a\x93\xb7\x55\xd4\x19\x8a\x11\x88\xe3\x2b\x9a\x00\x78\x74\xc1\xad\xf1\x14\xdd\x9d\x84\xd8\x80\x0c\x20\x70\x4b\x72\xde\x75\xb1\x5e\xa8\xf4\x8f\x3f\x79\x28\x67\x56\x40\x45\xcd\xce\xcf\x01\x6e\x85\xfb\xb3\x4f\xf6\xee\x53\x3f\x6c\x7d\x08\x06\x5e\xa0\x7b\x77\x39\x26\x5c\x87\x8e\x89\x63\x57\x67\xa9\x11\xf3\x86\xdc\x1b\xe0\x60\x14\xb1\x51\x3a\x00\x7d\xdd\xf9\xf4\xd5\x63\xc8\xb7\x31\xec\xeb\x6e\x81\xa8\x1d\x97\xba\xd3\x67\x7a\xdf\x92\x18\xc1\x44\xa6\xe6\x14\xb7\xa6\xf9\xd1\x63\x0e\x79\x8a\xde\xc7\x6a\x57\xfe\xa2\x43\xee\xda\x02\x06\x1b\x1c\x24\x59\xc7\x19\x9e\x9e\x52\x01\xbc\x5e\xad\xdc\x42\x39\xd0\xa9\x38\x49\xd2\x7d\xb3\x00\x5c\x56\xc8\x00\xed\x94\x2f\x05\x4b\x71\xb7\x00\x9c\xb4\xa3\x45\xc8\x67\xf7\x92\x6f\xc2\x4f\x66\x51\xc9\x70\x7b\x57\x6a\x18\xe7\x4e\x5d\xcc\xdc\x0f\xef\xf5\x3e\xb7\x27\xa0\xad\xa0\x2d\x26\x43\xae\xa6\x78\xa5\x9d\x4f\x53\xa5\x9d\x40\xe2\xa4\xd4\xb4\x2a\x66\x06\xe7\xae\x48\xd5\xc4\x69\x93\xc5\x6d\x9d\xae\x20\x65\x41\xad\xa9\x83\x21\x24\xc1\x6b\xf1\x2c\xa7\x09\xcb\x57\x79\xba\x3c\xcd\x04\x55\x85\x66\x57\x83\x6e\x71\x95\xd2\x93\xb2\x86\x5a\x90\x68\xf6\x25\x68\xb7\x53\xde\x4e\x21\x69\x78\xa9\x73\xe2\x1a\x96\xcc\x10\x76\x5f\xde\x7a\x5d\x04\x01\x83\xad\x07\xc2\x14\xaf\x53\x65\xee\xc4\x57\x2c\xab\xea\xee\x1a\x4a\x39\x54\x98\x25\x0d\xa6\x70\xc4\xc4\x90\x45\xd5\xc8\x17\xc8\xe6\xd1\xa1\x5b\x86\x7f\xe4\x4d\xc1\x74\xc3\xc4\xca\xc9\x12\x5d\x88\x92\xe5\xac\xb8\x84\xe5\x14\x8b\x51\xc9\x8e\x9d\x29\x34\x00\x27\x70\x7a\x00\x88\xbf\xec\x30\xae\x29\xd1\xdc\x3c\x8e\x50\x34\x09\x79\x62\x8c\x6a\x61\xba\x99\x06\x67\x13\x3d\x44\x05\x92\x5d\x81\x3a\xe4\x34\xe6\x7c\x39\xa3\x41\x4e\x9f\x3f\x7d\x86\xa7\xab\x41\x1a\xb2\x50\xfc\x45\x9b\x2c\x08\x91\x5b\x7d\xfe\xf4\x45\x16\xc4\xd3\x73\x6d\xe3\x99\xca\x0d\x75\x91\xb5\x78\xce\xc4\xc6\xa2\x87\x22\x99\xf6\x07\x70\x2a\x0e\x8b\x8d\xd0\x60\xd6\x90\xe7\xe6\xad\xb0\xde\x79\x72\x9e\x9c\xdd\xc2\x71\x5a\x18\xb4\x99\xc9\x9b\x1c\x03\xd6\xe4\x07\x1c\xef\xd8\x8a\x19\xf5\x6d\x05\x26\x17\xf7\x97\x0a\x51\x56\x34\xa0\xe8\xe0\x05\x72\x6e\x47\xcf\xfb\xe3\xce\xfc\xc6\x18\x8c\xd3\xee\x33\x35\x06\xa3\xe7\x69\xc4\x45\x75\x1f\xdb\xe8\x8a\x84\x7c\x60\xd2\xcc\x0c\x36\xc2\xed\x0e\xe0\xad\xaf\x9e\xf4\x2e\x9a\x0f\x6c\x7f\x51\xf5\xa6\x2a\xb1\x52\xf8\xaa\x3e\x1e\x39\xd7\xf8\x03\x9a\x1e\x05\x39\x9d\x81\xa6\xd6\x9c\x7d\xd0\xf1\x6c\xdd\xf9\xa3\xbd\xe3\x1b\x7d\x93\x37\x7a\x87\xc8\xd9\x73\x97\xbd\x7f\x8f\x7f\xf5\x5f\x16\x6b\x8f\xde\x46\xb6\x86\x0b\xaa\xf7\xd3\x98\x91\x18\x95\x91\x78\xdc\x59\xdc\xf8\xf8\x1e\x75\x67\x86\x1d\xdf\x5e\x80\x54\x42\x3e\x70\x15\x39\x32\xea\x9a\x29\x6f\x6d\xf7\x35\x57\x79\xcf\x35\x7e\x97\x72\x95\x28\xde\xc6\x48\xe4\x00\x9a\x00\x09\xc8\x16\x95\xc0\xd5\x0a\xa6\xfc\x2a\x05\x13\x79\x1e\x7e\x92\xa2\x8c\x04\x3f\x5d\x73\xf6\xae\xb0\x74\x29\x5b\x77\xbe\xf7\x00\x79\x99\x05\x82\xca\xbd\x85\xda\x00\x10\x54\xcd\x63\x59\x40\xa8\xfd\x61\xb4\x46\x87\x41\x7d\xcc\x51\x90\x7b\xbf\xe9\x78\xef\x76\x1a\x26\xe8\x5e\xc1\x39\xe1\xe3\x5e\xc0\xcb\xd3\x10\xdd\x26\x04\x27\x35\x6b\x56\x49\x29\xf7\x88\x0d\xaf\xbb\x88\x40\x17\x67\x40\x0f\x50\x44\x59\x48\x70\x2b\xb1\xc9\x41\x2b\x15\x98\x09\x68\x90\xc4\xd4\xcd\x1b\x1e\x03\x21\x2c\x6e\x33\x94\x67\xf0\x45\xde\x85\x65\x03\x5d\x15\xfe\x2e\xe3\x83\xaa\xd9\x39\xc3\xf9\xc1\x9e\x82\xc6\x82\x1f\xac\x73\x2e\xa6\xaf\x68\xe5\x16\xc9\x08\x3f\xcb\x3b\x64\x32\xc2\x43\x20\x55\xad\x4e\x2e\x12\x63\x3b\xb8\x67\xbc\xef\x2c\x7e\x19\xe8\x3d\x91\xb5\xeb\xac\x6d\x06\x78\x7f\x3c\xb7\x03\x98\x9b\x16\x54\xea\x0b\xbc\x5b\x8b\x5f\xf6\x1e\xca\x3a\x0d\xc1\x8a\x09\xb2\x6e\xa0\xa7\xf6\x76\x78\xe0\x76\xf9\xc9\x0a\xb1\xb6\xb7\xfb\xda\x8a\xf7\xaf\x8e\xf9\x64\x54\xac\x54\xe0\x75\x65\x00\x80\x71\x33\xca\x14\xa6\x72\x3e\x4d\x48\x5d\xca\xdb\xc1\x03\x1d\x16\x77\x25\xeb\x58\x6a\x13\x34\x93\xa0\xef\xaa\x21\x6c\x6e\xca\x04\x73\x02\x4a\x04\x89\x1f\x9f\x40\xae\xb4\xa4\x11\x33\x44\x93\x13\xb5\x2f\xf1\xbc\x59\x34\x01\x61\xd4\xb2\xe9\x22\x16\xaf\x20\xb6\x0a\x15\xe4\xe4\xd9\x39\xaa\x1d\xf0\xfd\x32\x8c\x38\x1c\x6e\xf7\xa7\x1c\xef\x15\x0e\xfc\x59\x5e\x03\xc5\x35\x89\xda\x28\x96\x38\x04\xdb\x3f\x4a\x6a\x71\x27\x64\x99\x60\xfa\xaa\xf0\x41\x95\xae\x0a\xfe\xb6\x2a\x61\x33\xaa\x92\x76\x57\x69\x1b\x1f\x87\x2c\x66\xe2\x27\xfe\xb7\x48\x49\x8e\x37\x72\x3b\xe5\x97\xbb\xc3\x4e\xff\xf7\x56\x0a\xb0\xbe\x2f\x3b\xde\xff\xeb\xac\xd8\x32\x54\x5f\x2d\xc4\x86\x34\xa0\x54\x76\x10\x15\xd8\x36\x11\x58\x39\x4a\x0f\xad\x36\x23\x30\x25\x42\xf4\x5d\xa0\xc0\xb2\x7b\xbb\x90\x16\x7d\x3e\x28\xf9\xd4\xc3\x36\xfd\xf8\xad\xfd\xe4\xfa\xcd\x5e\x21\xc0\x08\xbe\x6a\xbf\xf7\x33\x4e\xe9\x61\x0f\xd7\x51\xc4\x5c\xe2\xc5\xa1\x5c\x48\x30\x1e\xb0\x47\x98\x36\x62\xe9\x4d\x26\x3b\xd0\xe9\x87\x69\x81\xa6\xac\x31\xd8\xa4\xf5\xd5\x22\x74\xe5\x3b\xea\xaa\x86\xc1\x58\xaf\x39\xfb\x75\x43\xeb\xce\x67\xc6\x49\x03\x36\xcb\x6f\xbe\x94\x58\xf3\xe9\x5e\xf0\x6e\x37\x7f\xdb\xe8\xb5\xc6\x5a\xe1\x4c\xf5\xd9\x33\x75\x6e\x9b\x84\xc7\x9c\xe5\xc8\x2a\xaa\xb7\x3b\xa4\xd8\xcd\xee\x8f\x39\xde\x9d\x06\x5c\x7c\x59\x01\xdb\x7b\xce\x8a\xc3\x83\x8a\x73\xe3\xd4\x98\x04\xf4\x76\xf2\x1c\x72\xeb\xd6\x64\x05\xb5\xd6\x8f\x3b\xf7\x6e\xcc\x03\x5f\xef\x1e\x1b\xc0\x03\x9b\x5b\xa6\xcc\x06\x7f\xf6\xea\xd1\xd9\x60\x8d\xf0\xf6\xde\xab\xbd\xd7\x3a\xc6\x03\x20\x5b\x99\x2d\xea\x17\xb0\x7a\x2b\x41\x14\xa3\xbb\xc9\x66\x04\x5b\xa5\x69\x53\x59\x36\x39\xcf\xd1\xcb\x43\x81\xdd\x83\x03\xa7\xa0\xe8\xb3\xf3\x73\xbe\xa1\xd8\x5e\x73\x86\x28\xde\xd6\x9d\x9f\x3a\x30\xa6\x59\x63\xad\xf7\x6e\x91\x94\xb1\xda\x77\xac\xf6\xfd\x3a\x51\xfb\xde\x67\x68\x7d\xcf\x79\x47\x7b\x94\xbe\x41\x3b\x1a\x76\x1b\x0c\x91\x19\x1f\x77\x16\x36\xbe\xee\x8e\xb8\xfe\x80\xeb\x4e\xdd\x4a\xe5\xab\xee\x17\x9e\x4e\x8e\x8d\x34\xe6\x53\x20\x1a\x21\x34\x78\xe6\xfe\xd3\xb7\x78\x27\xac\x27\xca\xfd\x44\xc1\x6c\xa3\x37\x07\xc8\x53\x72\xed\xc5\x35\x26\xef\x82\x75\xe7\x73\xd7\x8c\x2f\x9c\x4d\x5e\x38\x6f\xae\x90\x7d\x61\xda\xbd\xd8\x49\xdc\x1f\xaa\x78\x5f\x72\xc0\x49\x47\x0e\xbf\x6a\x61\x16\x07\x39\x6d\xf1\x50\xc7\x8f\x67\xa6\x7f\xb3\x58\xa2\x02\x43\x76\x56\x1c\x49\x8c\xb3\xe7\xa9\x3d\x32\x6c\x8a\x86\x51\x2a\x44\xe1\x15\x8d\x19\x94\x41\x3e\x04\x03\x36\x08\x3d\x63\x64\xe2\x9e\x84\xd3\x7a\x27\xcd\x31\xa1\x34\xaf\xb1\x0c\x4e\xbe\xe6\x12\xf1\xc8\x22\x26\x7a\x29\x51\xf1\x6c\x1c\x9f\x00\xc7\xdf\x30\xed\x82\xc3\x6f\x96\x07\x0d\x56\x38\xc3\xc8\xea\x58\x38\x44\x0e\xff\x44\x85\xb8\x8d\x34\xa8\xb1\x79\x96\x46\x3c\x5c\x60\x35\x9e\x84\x99\xfb\x58\x45\x86\x22\x7a\xef\xa9\x08\xba\x19\x76\x24\x4e\x2d\x64\xd9\x87\x32\x74\x09\x9d\x8c\x44\x37\xe5\x85\x5c\xa0\xaf\xa1\x56\x20\x84\x7e\x77\x0a\x3f\xdf\x84\x27\xd3\xca\x6b\x46\x25\x02\x47\xc2\x8c\x97\xff\x83\x2c\xe5\xc6\xba\x60\x2d\x34\x6a\xb5\x58\x28\x6e\x8f\xb8\x2b\x91\x87\xa2\x4c\xa1\x05\x65\x34\x89\x64\x92\x01\x05\x0d\x04\xc3\x11\x4b\x16\xf1\x42\xff\xa6\xdd\xd8\xd1\x7d\xca\xf4\xce\x2f\x03\xab\x8a\x0b\x49\x0e\x48\x36\x52\x87\x7d\x50\x78\xc2\x63\x3f\xd1\x43\xaa\x4f\x1f\xad\xf0\xcd\x31\xd3\x33\x32\xd3\xf3\x3b\x15\xf2\x14\x9e\xb6\x9b\x41\x72\x4a\x86\xa9\xe7\x99\xfb\xee\x8a\xf7\xe6\x8a\x99\x1f\xa1\x5d\xe4\x47\x10\xc3\x9a\x4f\x79\x3b\x68\xc0\xe6\x9c\xe7\x71\x54\xeb\x5a\xd9\x0a\xd4\x3a\x87\xba\x02\xb1\x83\x8f\xfa\x37\xf8\x2a\xdb\x03\xee\x1c\xd9\x9c\x46\x58\x5e\x62\x14\x7b\x02\x53\x51\x87\xc8\xb9\x99\x3a\xe6\x79\x04\xd7\x5e\x7c\xeb\xd1\x7a\x94\x80\xe7\x56\x6a\x78\xc5\xa1\xe3\xd1\x4c\x0f\x52\x32\x56\x7e\x30\x2b\x3e\x52\xe8\xcb\x32\x62\xc5\xe8\x38\x4f\x7b\x47\xa6\x2e\x0c\x00\x74\x5a\xea\x20\x50\xe2\x12\xcf\x9b\xb6\x4e\xf6\x83\x0e\xb9\x5a\x8c\xb6\x40\x0b\xff\x05\x87\x3c\x67\x0b\x77\xf6\xbc\x59\x89\x17\x2b\x58\xb0\x7a\x27\xae\x47\x71\xcc\x42\x45\x01\x02\x79\x69\xa1\xda\xa1\x16\xa4\xa9\x38\x67\xbc\x93\xc3\xd4\x89\x4e\x2a\xfe\xb0\x4a\x03\x7a\xfd\x91\x1b\xe9\x49\x9e\xd4\xe3\x48\x50\x0c\x54\x90\x16\xae\x61\x82\x6f\x62\xa1\x4f\xfe\x79\x82\x5c\xd3\x2e\x4f\x80\xfb\xe9\x09\xef\xa3\x13\xf7\x4a\x3b\x88\x20\x9e\x4d\xbe\x4a\x1b\x41\xba\x14\x34\x18\x2d\x74\x90\x05\x05\x64\x29\x7a\xa0\x0d\x98\xe2\x0b\xa5\xdd\x36\x78\x86\x81\x48\x29\x0a\xd3\xc6\xe5\x88\x32\xf0\x5b\x0d\x0b\x07\x0f\x76\x39\xca\xe0\x0c\x17\xdb\x22\x63\x1a\xa6\x5b\x25\x03\xf4\x8d\xf5\x57\x5e\x57\xea\xac\x4f\x6b\x35\x9b\xdd\x98\x4f\x11\x7b\x1e\x80\x28\xcd\x6b\xe0\x20\x8e\xe1\x20\x9d\x96\x3b\xd6\xde\xd1\xd9\x4d\xf4\xe0\xed\x41\x6d\xb9\x01\x3e\xb0\xa2\x14\x4a\xce\xa0\x1c\xb2\x27\x0e\x41\x91\x25\x3d\xb3\x2b\x51\x23\x58\xd2\x35\xdd\x44\x0f\x9e\xe1\x29\x33\xaa\x15\x7c\x7a\x2d\x08\xd1\xdb\x10\xe6\x07\xae\x55\xac\x2f\xc3\x7b\xaa\xa7\xc2\xba\xae\xc3\xb7\x18\xb7\x8f\x5c\xb5\x31\xe7\xf6\x8e\xab\xdc\xb7\x5d\xd5\x8f\x77\xb3\xb8\xac\x12\xf7\x56\x64\x48\x54\xc1\x7c\xe5\xec\x88\x43\xbe\xc6\x74\x88\xbd\x55\x58\xf1\x80\x5b\xaf\x6e\x58\xce\xc6\x4d\x55\xb3\xc5\xfe\xec\x44\x1d\x3d\x9d\x69\x67\x9b\x6d\x7a\xb4\x2f\xb6\xd8\x10\x64\xf9\x30\x3e\xeb\xe4\x4d\x84\x96\xdd\xfa\x5c\x75\xf2\x26\x4f\x95\x7f\xfe\x16\x6b\xe0\x59\x0d\xa2\x5d\x76\xf3\xc3\x63\xa5\xb1\x2f\x09\x41\x76\x73\x0d\x8e\xfc\x49\x69\x75\x46\xfd\x4e\xe6\x59\x29\x3e\x34\x22\x59\xb7\x71\x24\x8a\x63\xb5\x85\x8f\xa5\xc6\x23\x4a\x1a\x5b\x5a\x5c\xa4\x85\x5b\x68\x37\x5d\x0a\x6a\xfe\xf6\x37\xd7\xb6\xaa\x29\x75\x49\x08\x7f\x61\x27\xde\xdc\x54\x94\xeb\x40\x0f\xc7\x2d\x8d\x65\xf3\xdf\xca\x04\xb6\x7f\x31\x41\x6e\xd9\x96\xf3\x97\xfb\xe3\x13\xde\xaa\xf9\xd2\x56\xec\x7b\xd0\xc1\x19\x95\x83\x10\x6e\x75\x4f\xff\x92\xac\x3e\x78\x74\x68\xf0\x70\x4c\xe6\xda\x0a\xc0\x78\x98\xe5\x69\xa7\x06\x8e\xe9\xcb\x8c\xb5\xd5\x7e\x5d\x8a\xe2\x28\xef\xf6\x9a\xce\x94\xe1\x74\xdd\x79\x65\x85\x44\x25\x43\xd0\x7d\xde\x59\xcb\x10\x64\xbb\x96\xcc\xce\xcf\xf5\xb1\x09\x15\x97\x71\xab\x3c\x14\x2b\x4a\xd0\x48\xb0\xf6\x1a\xc7\xfb\x3f\x56\xfa\x36\xd1\xaf\x52\x5e\x2f\xa6\xc3\xd2\x3a\x66\x81\x84\x47\xd5\x9a\xfc\x26\xa3\x79\x0a\x08\x36\xe8\x78\x1f\x47\xb9\x96\x8a\xcc\x05\xb0\x8c\x55\x9f\x75\x46\xb4\x3e\xcc\x09\x06\x18\x79\x2f\xf7\xbd\x8e\x77\x97\xf1\x1b\xe3\x06\x0a\xc4\x00\x4c\x4c\x0f\x1a\xb8\xa2\x0c\xb0\x34\xcd\x00\x63\x32\xbb\x2c\x87\xb4\x54\x28\xea\x6a\xc0\x87\x17\x91\x17\x48\x57\x8d\x8b\xde\x69\xd3\xe4\x23\xe5\x71\xad\x91\x95\x6a\x00\x08\x49\x15\x72\xaa\x6e\x48\xab\x69\xa5\x5e\xc6\x1c\xea\xbb\xf6\x8d\xe8\x32\x68\x0c\x2d\x73\xff\x71\xaf\x77\xdc\x7c\x40\xf3\x34\xa8\x2d\x2b\x53\x3b\x6f\x80\x32\x96\xd7\x8b\x2e\x20\xa5\x58\x73\x26\x05\xc7\x16\x25\x8d\x75\xe7\xbd\x7b\xc9\x47\x26\x88\xfa\xed\x7e\x60\xc2\x5b\xab\xcc\x33\x19\xdf\x63\xda\x9c\x23\xab\x1d\x50\xad\x08\xc9\x81\x5d\x66\xb5\x4e\x0e\x51\x13\xa0\x6c\x2c\xf4\x07\x85\x70\x2b\xe4\xfa\x48\x6a\x92\x41\x59\x83\x3a\xa6\x2c\xa7\x6d\xd5\x92\xbd\x60\x52\xc6\xaa\x6a\x4d\x4a\x10\xc5\xd2\xdc\x2f\x93\x50\x02\x2b\x9f\x03\x1a\x84\xd1\x2d\x79\xe0\x8a\x00\x1c\x4c\x9c\x11\xc5\x9a\x21\x2f\x7a\x54\xe3\x60\xe3\x4f\x31\x3a\xa7\xa8\x26\xc4\x33\x84\xfd\x55\x89\xe9\xe4\x3e\xde\x11\xcb\x9d\xb1\x60\x8f\x3b\x07\xc9\xbf\xb3\x18\x62\x70\xc3\x98\x6e\xb1\xb4\xc1\xa6\x97\x59\xd7\x9d\x74\x21\xf9\x28\x11\x25\xbf\xb9\x4f\x49\xe0\xe5\x58\xa3\xeb\x4e\xb9\xfb\xe0\x2b\x42\xfe\xda\x21\xfb\x70\xa2\xdc\x3f\x75\xc8\x8d\x5b\xd1\xea\x22\xc4\xea\x8f\x3a\x73\x75\x7b\xca\x0b\x58\x8d\x33\x41\x14\x77\x52\x89\xa2\x51\x35\xa7\xd6\x10\xd2\x50\xb9\x06\x04\x41\x3a\xc0\xeb\x44\x46\x52\x93\x54\xa5\x2c\xc9\x3a\x18\x82\x0d\xfa\x6a\x90\xe6\x6a\x86\xb5\x81\x2f\x15\x60\xcb\x4a\x1e\xf5\xc9\x2b\xf7\x8d\xa8\xac\xb5\x40\xea\xdd\x3f\xd8\xeb\xfd\x17\x67\xb6\x0c\xc3\x8e\xdb\x1c\x9e\x61\xbc\x35\x18\x1c\x03\x18\x30\xaf\x17\x26\x5d\x94\x16\xe5\x84\xf0\x3a\x9a\x0c\xa0\x81\x4c\xaa\x46\xf3\x5a\xf3\xf4\xe5\xb6\x38\x75\x5a\xd7\x3d\x7b\xfe\x94\xd4\x2f\x22\x72\x7b\xa9\x6d\x69\xf4\xc0\xec\x87\xa8\xa5\xf0\xe9\x2c\xe4\x7a\x19\x54\x34\xe1\xba\xe4\xba\xf3\x2f\x13\xe4\xc3\x0e\x79\x4a\xb9\x69\xf7\x97\x1c\xef\x9e\x9e\xfe\x58\xe7\xb9\x54\xbb\x0c\x88\x6c\xa1\x0a\x6a\xb1\xc9\xac\x27\xc6\x50\x76\xc2\x19\xdb\x5a\x95\x8b\x45\x3b\xe4\xe7\x2a\xe4\x80\x31\xad\xee\x9b\x2a\xde\xbf\x3a\xe6\x3c\xc3\x10\xa4\x81\xec\xa1\x65\xd6\xad\x82\xd0\xfc\x32\xda\x0e\xa2\x14\x66\x4e\xfa\x63\x99\xef\x94\x9c\x6e\x54\x23\x6a\x88\x32\x2a\x5a\x5e\x09\x62\xc8\xd0\xc6\x41\x91\x8b\x01\x5b\x7a\x75\x8d\xd9\xab\xd2\x55\xb0\x28\x2d\xb3\x6e\x91\x72\xc2\x5b\x66\x5d\x4f\x6e\xff\x36\x4b\x03\xb9\x9d\xbc\xb9\xc4\x2b\x42\xaf\xb4\x5c\x9f\x06\xdd\x82\xc1\x00\x23\x95\x07\xef\xbc\xa1\x13\xfe\x68\x49\xb9\x6b\x62\x81\xbd\x71\xdf\x88\x1c\xd0\xa0\x19\x77\xff\x68\xaf\x77\xb9\xe7\x44\x18\x3d\x91\x6a\x4d\xf5\x46\xe2\xd4\xcb\x31\xe0\xc8\xaa\x34\x10\xb3\x52\x95\xa9\x26\x8b\x99\x80\xc2\x29\x8b\x75\x06\x41\x31\x77\x40\x5d\xd1\x58\xb0\xe6\x4c\x2c\xb3\xee\x9a\x33\xa5\xbe\x58\x77\x7e\x7b\x0f\x59\x73\x88\x78\xec\xbe\xc1\xf1\x8e\x89\x0f\x54\xf2\x53\xe8\xa2\x78\xa0\xcd\x77\xba\x57\x98\x46\x14\x94\x9e\x96\xbe\xe1\x3b\x36\xa0\xae\xfb\xdc\x3d\xcb\xac\xbb\x19\xe2\xfa\x3a\x87\xe8\xde\xba\xdf\xe5\x78\xb9\x1e\xac\x85\x73\xb5\xcc\xba\x07\x33\x1c\xba\xd8\x3b\xcd\xa8\xad\x90\x54\x14\xf8\x33\x18\x4b\x50\xfd\xaf\xaa\xc0\x45\x9f\x4b\xaa\xf4\x3c\xcf\xc5\x7f\x4e\x5f\x06\xc7\x09\x31\x63\xa7\x38\xcb\xce\xf3\x1c\x9e\x58\x8c\xc3\x1b\x2a\x64\x1f\x56\xe7\x7e\x4f\xc5\xfb\x7f\x1c\xb9\xd9\xa2\xcc\xc2\x41\x33\xd5\xd2\x1a\xe7\xdf\xda\xb2\x73\x90\xc7\x56\x36\xdc\xb3\x6b\x4d\x4d\x3f\xd0\xb1\xbe\x75\xc8\xfe\xf2\xd4\xea\xee\x90\xea\x64\x55\xe8\xba\x09\x6f\xd0\x94\x15\x83\x67\x6a\x88\x17\x03\xf0\xd1\x62\x1d\xa2\x1a\x85\x55\x40\x5f\xc5\x61\x5e\xa5\xbf\x43\x46\x0c\xaf\x3c\x1b\x65\xf9\x39\x96\x07\xee\x1b\x88\xf7\x16\x47\xfd\x32\xb2\xe6\x28\xe5\x1e\x6e\xba\xac\x9b\xe4\x4d\x96\x47\x35\x5a\xca\x6d\xd3\x0c\x56\x58\x55\xba\x5b\x8a\x3e\xc7\x7a\xe1\x56\x82\x34\xe2\x08\x51\x0f\x3e\xa3\x05\x8d\xd7\x76\x00\xed\x9f\x08\x24\x41\x62\xf7\x3c\x74\x01\x4a\x8a\xee\x54\xa9\xea\xd8\xcb\xfc\x75\xe7\xb3\x53\xe4\x53\x7b\xc8\x94\x38\x83\x51\xd2\x61\xee\x47\xf7\x78\x1f\xde\xa3\x7e\x19\x9a\x4e\x65\x8c\x06\x48\x12\xf1\x5b\x90\xfe\x56\x94\x2b\x58\x28\x19\xf0\x2c\x38\xbb\x9c\xb5\x32\xad\xa4\x95\x6e\x7f\xb6\x15\xcd\x30\x61\x0b\x36\x19\x7c\x63\x61\x5a\x0a\x83\xad\x61\xef\x01\x08\x97\xe0\x81\x0e\xd3\x16\x43\x03\xe3\x2a\xca\x32\x78\x81\x57\xbd\x05\x36\x66\x99\x36\xc4\x74\x63\x9a\xa7\x22\x59\x61\xce\x45\x37\xd3\x88\x49\x86\x00\x92\xe9\xc9\x33\xa5\x7b\x52\xcc\xf1\x49\x9c\x15\xdc\x44\xc0\xef\x65\xb9\x20\x69\x50\x57\x0b\x13\x65\x00\xab\xc2\x15\x82\x4c\xdd\x1c\x69\x0d\xd0\xbe\x94\x89\x4c\x8c\x1b\xb3\x0f\x84\x1a\xb8\x00\x60\x0e\x02\x5a\x67\xab\xb4\x15\x25\x1d\x31\x5d\xb0\x90\xed\x20\x03\x0b\xd4\xa2\xa1\x02\xb6\xf3\x30\xab\xd9\x46\xeb\x30\xba\x05\x60\x2e\x77\xb5\x92\x38\x95\x8a\x9b\x2a\x52\x25\xc9\x99\xb2\xd2\x6a\x60\xfe\x49\x65\x7f\xac\x9a\x40\x43\xd0\x9f\x94\xd5\x58\xa4\xa7\x32\xe7\xcb\x4c\xa6\xd3\xd2\xb6\xcb\x16\xcb\x32\x21\x83\x9b\xa7\xe8\x8d\x13\xe4\xc9\xa5\xde\xbb\x8f\x4c\x78\x5f\xa8\x2c\xe4\x05\xc7\xa6\x21\x71\x4c\x3f\x87\x83\x99\x61\x3b\x36\x3d\x67\x0b\x99\x40\xa3\x39\xaa\xad\xb1\xd4\xb5\xfc\xbe\x58\xce\xd2\x56\x94\x30\x9c\x20\x65\xc0\x81\xd1\xc8\x55\x28\x5b\x21\x73\x99\x08\x30\xd0\xbb\xcf\xa8\x12\xbc\x97\x61\x55\x68\x27\x41\x9b\xb0\x68\x33\xa8\x2d\x9b\xc0\x63\x2c\xf5\xe9\xbc\xce\x1c\x28\xb5\xff\x88\xac\xe6\xd3\x8b\x2c\x08\xa7\xc5\x11\xdd\x69\xbb\x59\x8d\x27\xb5\x4e\x9a\xb2\xa4\xd6\x9d\x96\x89\x45\xa7\x83\x24\x9c\xd6\x3b\xb6\xd6\x35\x97\xa5\x49\xa6\x32\x16\xd7\xcf\x46\xc9\xb2\xfb\x22\xef\x82\xfa\x1b\x2f\xea\xbb\x2f\x9e\x2d\x9b\x1d\x0b\x81\x73\x94\xb1\x99\x2d\xbd\xca\x21\xfe\x48\x64\xf4\x5c\x54\x4b\xf9\x62\xd4\x62\xee\x3d\xee\xfe\x30\xc8\xd9\x74\x1e\xb5\x98\x77\xab\x7e\x4e\x8d\x3c\x6e\xbc\x4e\xe1\x11\xc8\x12\x2d\x51\x02\x4d\xcf\x32\x4d\xb8\xc6\x87\xb0\xba\xf2\xc8\xcd\x64\x34\xd6\xb2\x20\x9b\xee\x47\x6e\xf2\xe2\xe2\x27\xe8\x65\x2c\x6a\x2e\x78\xee\x42\x4a\xe9\x4b\xd1\xa5\x93\xa1\x72\xa3\x37\xb8\x74\xa0\xab\xb2\x2c\xfa\xd2\xfb\xeb\xce\xc7\x4e\x90\x0f\x54\xc8\x01\x30\xbb\x06\xd2\x48\x57\xf1\xde\x50\x99\x2d\x1e\xc8\x9b\xb9\x93\xa0\xac\xda\x11\xf2\xa7\x60\x6a\xf0\x3c\x0b\xbe\x54\xa6\xa6\x95\x88\x1b\xa9\x95\x21\xc8\x20\xef\x4b\xdd\x02\x37\x2d\xe7\x1c\xc1\xbe\xe0\x5b\xd8\xec\x9a\x4e\x16\x58\x57\xda\x50\x85\x49\x8a\x15\x82\x14\xc8\x3c\x40\x38\x21\x3a\x42\x1b\xfb\x61\x13\x01\x01\x86\x23\x08\x87\xa6\x0b\x1a\x2f\x45\x5f\x4b\xc7\xe0\xc4\xcc\x4c\xc1\x42\x89\x83\x10\xf2\x5a\x36\x23\xe6\x69\xba\xd1\x89\x42\x36\x63\xcc\xcb\x30\xa6\xf6\x4d\x15\x72\x40\x22\x6e\x15\x21\x21\x8b\x25\x47\x5b\x05\xc9\x85\x2b\x64\xc8\x9f\x45\xc8\x52\xa1\x92\x52\x77\x4f\x88\x76\xbc\x4e\x94\x35\x8d\xf5\x86\x99\x06\x0c\x16\x68\x00\x74\x0e\x1a\x75\x33\x4a\x8c\xa0\x01\xd9\x68\xe6\x97\x32\xcf\x81\x1f\x81\xb8\x62\x93\x2e\x66\x46\x4f\x11\x90\x8d\xaf\x22\x4f\xac\xe1\xda\xa2\x8c\x36\xb8\x44\x0c\x93\x19\x6d\x22\xb8\xa9\xa5\x3d\x11\x77\x12\xb8\xa0\x60\xc6\x51\xe5\x29\x62\x9e\x85\xbf\x98\x20\xd7\x40\xc1\x88\x27\xe2\x24\x65\x79\xd0\x6a\xbb\x8f\x4d\x90\x1b\xb6\x20\x8a\x89\x0a\xbc\xd7\x4c\x9c\x2c\xd7\x87\xe4\x24\xd7\x3f\x7b\x7c\x19\xe4\x88\x72\x38\xca\xa8\xd4\x29\xa8\xfb\x6a\xa0\x13\xb3\x2a\x9d\xa8\x98\xa3\x46\x27\x48\x83\x24\x97\x38\x75\x8a\x4f\x11\x77\x6b\xbb\xcd\x92\x6c\x5a\xea\x8e\x50\x91\x14\x08\xca\x90\xd1\x8c\xb5\x83\x14\x26\x05\x38\x4d\x20\x9a\xda\x1f\x51\x5d\xe2\xa0\xe9\xd1\xfe\x23\xaa\x49\x13\x38\x25\x4a\xe8\xc5\x33\x27\x8f\x1f\x3f\x7e\x23\xea\x2e\x65\x82\xc0\x28\xa1\x77\x2f\x9e\x04\x84\xc7\x8d\xc9\xfe\xf9\x0e\x62\x9f\x20\x7b\xb7\xd3\xd7\x80\x3a\x9e\xe4\x7f\x3a\xe4\x9b\x94\xaa\xe3\x8e\x5e\x27\x9e\xff\xea\x28\x27\x9e\x5f\x77\xce\x6b\x26\x4e\xb9\xef\xe8\x10\x23\x85\x9f\xa9\xee\x5b\x8e\x1e\x34\xf5\x4e\x1c\x77\x29\x5e\xae\x62\x56\xe5\x94\x47\x26\x90\x4b\x39\x15\xb4\x9c\x09\x48\x3c\x06\x5a\xa0\xc2\xa3\xad\xbc\x63\xe2\x8c\x8b\x22\x3e\x3d\x27\x04\x8f\x24\x46\x72\xd5\xe4\x69\xce\xc0\xe9\xc2\xbc\x68\x0c\x77\x9a\x1f\x3c\x40\xae\xe9\xa9\xd0\xfd\x32\xd9\xfa\x96\xfe\x2d\x72\xaa\x5f\x07\x2f\x9e\x39\x49\x61\x13\xc0\xe9\x02\x09\x5d\x6c\xe0\x20\xd7\x84\xc4\x0c\x7f\x2c\xfc\x4c\xa4\xdf\x93\x7d\xec\x25\x19\x36\x4e\xc3\x2a\xe2\x45\xa9\x99\xb6\x3c\x28\xe4\x51\x2e\x76\x98\xa0\x8c\x55\xb5\x11\xc5\x2e\x46\x17\x33\x9c\x64\x74\x09\x00\xb8\x1f\xe4\x61\x6c\x6e\x12\xb4\x17\x97\xdb\xac\x96\xeb\xb3\x24\x3b\x49\x0f\x25\x1c\x7d\x65\x53\xad\xc5\x84\xa5\xb4\x62\xa5\x32\xa5\x5b\x95\x6e\xaa\xaa\x35\x41\xf8\x0e\xd3\xa0\x9e\x2b\x08\x2b\xb8\xbc\x13\xc3\xc1\xa2\x4a\x39\xc0\xb5\x02\xdb\x69\x39\xbc\x40\x9f\x50\xa2\x9b\xb5\x90\x83\x7a\x0a\x6a\x05\x02\x88\x1e\x55\x6b\x9a\x96\x62\x5e\x5b\x16\x73\x7d\x41\x35\xd3\x77\xa7\x49\x05\xb0\x76\x19\x33\xd8\xf9\x4e\x02\x22\x41\xaa\x08\x8c\xf2\xc3\x8b\x12\xc9\xea\x21\x12\x58\x95\x06\x71\xde\xe4\x9d\x46\x53\xec\x7e\x75\xb3\xaa\xad\x4a\xcb\x11\x9e\x2a\xa7\xbf\x9c\x65\x9d\x6e\x1a\x59\xea\xa8\xc5\x2c\xe7\xe1\xaa\x02\x83\x44\x7f\x49\x29\xe4\x00\xd7\x41\xdb\x3c\x44\x27\x13\xac\x29\x4a\xe8\xf1\x23\xea\xfc\xe2\x2a\xdf\xd5\x59\x12\x2f\x95\xa7\x61\x50\xcb\x31\x79\x29\x2a\xcb\x8d\xfd\xa5\xce\x31\xd8\x6b\xa2\x46\x52\xc8\x07\x72\x8a\x0d\x47\xef\x36\x0f\x7d\x3a\x2b\x57\x36\xc8\x8d\x46\x51\x42\xb7\x1a\x15\x6d\xd1\x80\x36\x83\x34\xec\xd7\xc8\xa1\x85\xb9\x3b\xee\x9a\x3b\x7b\xf6\x70\x4f\x73\x78\xe1\x41\x2b\xb5\x98\x05\x49\xa7\x5d\x35\xb3\xd6\x8b\xb1\x6b\xc2\x32\x3b\x3f\x07\x1e\x69\x32\x32\x30\x03\x1c\x60\x5e\x57\xb6\x59\xda\x0e\xd2\x1c\x0f\x7e\xd5\xa2\x65\x62\x4e\x11\xa7\x0a\x3c\x73\xf4\x76\x95\x0b\x01\x7b\x44\x08\x41\x39\x28\xfe\xc1\xa1\x23\x41\xaf\x07\x0e\x1e\xd3\x41\x27\xe7\x2d\x99\x34\x1c\x6d\x37\x42\x10\x29\x44\x8e\x72\xc0\x5b\x89\x66\x86\xda\x01\x0a\x36\x61\xef\x61\x97\x2c\x8a\xec\xad\xb2\x2b\x2d\x31\x48\xe0\x2f\x89\xc0\xe0\x2b\x67\x34\x22\xb2\x8b\xf2\x88\xbe\x88\xfe\xb8\x42\x48\x71\x74\xdd\x0f\x55\xbc\xff\xcf\x39\x67\xaa\x6e\xfa\x38\x8b\x1a\x1b\x5b\xaf\xb3\x74\x3a\xe9\xfa\xf4\x74\x50\x6b\x52\x96\xe4\x69\x57\xf2\xc1\x05\xa2\xaa\x19\x53\xad\xed\x67\x35\xde\x92\x40\x6f\x05\x06\x97\xb1\x9b\xb0\x26\xdd\x0e\x7a\xdd\x49\xc5\x54\x2f\xd5\xb0\x97\x05\x68\x6e\x32\x0d\x7e\xa6\xa2\x1e\x88\x8f\x4f\x0c\x65\x03\x58\x1f\xe4\x0d\x26\xef\xc4\xa1\x5e\xe9\x23\xeb\x10\xdf\x36\x49\xae\x6a\xb0\x44\x70\x33\x0c\x18\xdc\x37\x4e\x7a\xff\x61\xf2\x0e\xe3\x49\x19\xb5\xbd\x9d\xb2\x7a\x74\xb9\xaa\x05\xe5\xe2\xc6\xa9\xa2\x6f\x3f\x7e\x2a\x68\x0e\xa4\x71\x40\x46\xf6\xc2\xf9\xb3\xf7\xd1\xb9\x33\x50\xfa\x7c\x01\x79\x6e\xed\x47\xe5\xa5\x5e\x78\xe0\xea\xdb\x0d\x31\x22\x75\x80\x9b\xd6\x58\xa8\x13\x8f\x8e\xa7\xfa\x8a\xd4\x4c\x72\xae\xbc\xd5\xe0\xb3\x42\x15\xa2\x49\x35\x7c\xa2\xa0\x96\x6b\xbc\xb5\x14\x25\x85\xbc\x23\x07\x80\x98\x7e\x48\x0d\xb5\x27\x3d\x7e\x6e\xa1\xb8\x1b\x69\xf4\xd2\x4e\xcc\x32\x75\xe3\x14\xe3\xad\x9a\x4a\xa8\x3c\xed\x24\x35\xf3\xc8\xc5\x90\xc8\x45\x63\xeb\x23\x12\xa2\x4a\xaf\xa1\x71\xe6\x0a\x85\x8b\xec\x9e\xd4\xa1\x49\x9d\x81\x44\x1b\xb7\x58\x03\xed\x98\xac\xac\x00\x6a\x91\x50\xb8\x40\xca\x25\x29\xaf\x62\x1e\x00\x00\xf0\xc2\xa2\x8e\x33\x01\xa7\xca\x69\x05\xa3\x5d\x80\x4c\xca\x04\x18\xb2\xd8\xb1\x23\x47\xe9\x49\xa9\xfb\xe0\x29\x7d\xd6\x91\x23\x38\x97\x17\x59\x90\xf1\x44\x7a\x13\x8b\x53\xc0\x01\x19\x12\xf4\x7a\x78\x8d\x98\x9b\xa5\x66\x3a\xc6\xd7\x79\x27\xd1\xb8\x99\xc8\x20\xc5\x31\xcf\x73\xa5\x1d\x34\x1d\x8f\x51\x5e\x14\xe2\x66\x97\x1e\x52\x3b\x36\xee\xf6\xf2\x10\xa8\x50\xd4\xd5\x5e\x14\x5f\x4c\xe3\x7d\x84\xc1\x2c\x87\x7d\x42\x66\x41\x93\x1f\xe2\xc1\x8b\xea\x54\x9d\x86\x92\xa7\xf6\xce\x12\xbc\x28\x64\xad\x36\xef\x51\xb4\xbc\xc1\x21\x44\xae\x5a\xc4\x13\xf7\xbb\x35\xdf\x9d\xcc\xd2\x4c\xd0\x61\x71\x5d\x49\x35\xaa\x25\x1e\x99\x51\xd5\xfa\x7b\xb5\xc7\x42\x96\xc1\xde\xca\x72\xc0\xf1\x1f\x49\x25\x63\x70\xca\xbf\xb9\x97\x5c\x65\xda\xbc\xdd\x77\xed\x25\xb7\x6d\xcf\x0a\x9d\x79\x9f\xdd\x33\x9b\x94\x6d\xf0\xa0\x31\xcd\x53\x0e\xa0\xa8\xc8\x1c\xb3\xa4\xce\x31\x86\x1c\x50\x14\xf1\xb6\x8a\x92\x95\x20\x8d\x82\x24\x17\x4c\xb4\xa4\xad\x4a\x3a\x95\x7c\x51\x29\x4d\xfb\x10\x97\x02\xd0\xef\x29\x27\x8c\x00\x98\x5b\x9e\xd8\x3a\x2c\x71\xf5\x46\xb1\xd8\xe9\x12\x98\xd9\xe4\x0c\x04\x6d\x00\xba\xa6\x1c\x38\xc4\x2e\x2a\x4c\xfb\x3e\xbd\xa0\x30\xfa\xab\x83\xdd\x01\x3a\x49\xd9\x1b\x20\xca\x68\x33\x0a\x43\x96\x40\x64\x95\xe8\xfe\x0c\xc0\x28\xc0\xcb\x06\xcb\x11\x6d\xfd\x30\xde\x44\x85\xcf\x8b\x1c\x50\x72\x30\x17\xbc\x7a\x1c\xd5\x22\xc1\xdc\x07\xd9\x32\x92\x16\x65\xda\xb6\xdb\x53\xda\x15\x05\x3e\x9b\x98\x9d\xc4\x63\x5e\xb5\xb8\x05\xc0\xeb\x94\xbb\xc8\xb8\xbe\xb4\xa9\x1e\x75\x8b\x5a\x4f\x6e\x4e\xba\x94\xe9\xda\x69\xb4\x12\xc5\xac\xc1\x42\xa5\xd5\x0a\x50\xd0\x03\x3d\x77\x18\xd5\xbb\x45\xbd\x92\x2f\x8f\x0a\x6e\xbf\xaa\xd8\x67\x49\x3c\xb4\x76\x55\xf1\xdd\x42\x88\x49\x00\x8c\x3d\xf5\xc9\xcb\x2b\x64\x5f\x8c\xc6\xdd\xff\xed\x78\x7f\xe6\x9c\x43\x5b\xae\x34\x50\x2d\xb3\x6e\x66\x58\x08\x7b\xb5\xc4\x62\xda\xd2\x46\x90\x44\x0f\xa2\xf4\xa6\xc0\x6d\x1e\x64\xf4\x50\x56\xe3\x6d\xa9\xc4\x02\xc3\xe0\x61\x43\x53\x15\xc8\xd0\x43\x6d\x33\xcc\xd0\xb4\x0f\x39\xaa\x73\xe5\xf9\x85\xbb\x5d\x66\xee\xc5\x5c\x06\x5b\x50\x73\xe1\xf0\x86\x69\xb8\xfe\xa1\x22\x5d\x89\x3e\x5f\xf1\x3e\x51\x01\x1a\xa7\xb4\xd8\x92\x26\xcb\x24\x15\x41\xa1\x89\xf2\xe9\x5c\x56\xdc\x4c\xc0\x23\xe2\x31\x33\x60\x30\x32\x43\xa6\x81\x33\x6a\x28\x35\x21\xbd\x41\xcc\x57\xb5\x40\x89\xd6\x14\x25\x99\xb0\x12\xa9\x82\x2c\x03\x45\x80\x27\x6a\xc6\x90\x6f\x8e\xc4\x6e\xef\xfa\x9a\x36\xb7\xd3\xa8\x15\xa4\x11\x1c\x35\x09\xd0\x2a\x78\x39\x4d\x04\x0a\xf2\x2a\xd7\xcc\xb2\xab\x14\x94\xab\x6f\xc0\xca\x66\x27\xbf\x60\x28\xb3\x6f\x83\xb9\x33\x29\xfa\x4f\x4c\x98\x09\x77\x5e\x37\xe1\x3d\x32\x71\x5e\x6b\xfa\xac\x0c\xce\xf0\x44\x2e\x02\x44\xcd\x26\xbd\x8b\x64\x78\x75\x18\xfa\xc2\xb2\x57\x01\x38\x12\x4a\xaf\x7f\xaf\x28\x88\x81\x08\xc5\x0b\x69\xe5\x2e\x20\x71\xed\x88\x3e\x9f\x9e\x47\xb0\x7f\xad\x7f\x0e\x52\x66\x31\x2a\x42\x78\x15\x07\x20\x44\x4b\x73\xd1\xa3\x69\x83\x7d\xe1\x16\x9f\x82\x1c\x37\xcf\xb4\xc9\xcc\x00\x5c\x16\x62\x3c\x21\x45\xce\xf8\x53\xe7\x17\x5e\x7a\x76\xf6\xf6\xd3\x67\x77\x64\x95\x74\xef\xac\xe5\xf9\xd2\x04\x79\x32\x5f\x4d\x58\xaa\x13\xc6\x64\xee\xa7\x26\xbc\xdf\xa8\x9c\x95\x17\x86\xea\xa6\x8c\x38\x90\x77\xa6\x7d\x39\xcc\x9e\x3d\xab\xcb\x49\x56\x03\xe8\x21\x5c\x2d\x70\x37\x68\xdf\x23\x4b\x63\x29\x47\x5e\x8a\x9e\x30\x39\xe3\x82\x0e\xb7\x82\x24\x68\x28\x34\xe6\x82\x70\xc8\x3c\x32\x41\xa2\x44\x9c\xc4\xa2\xc7\x40\xa7\xa3\xa4\xc8\xac\x64\x7e\x59\x90\xeb\xe2\xd6\xc5\x55\x92\x5e\x6c\x79\x2a\x13\xff\xa6\x4c\x25\x3e\x59\x32\xd1\xd6\x79\xc2\xb0\x5f\x08\x64\xac\x2a\xb1\x44\x96\xd3\xe4\x24\x99\xdd\x02\xb3\x70\xc1\x5a\x94\x91\xfc\x2a\x3a\x51\xb8\x19\xbf\x8a\x47\xf6\xf6\xda\x1a\x3f\xbf\xc7\xfb\x84\x60\x4c\xa4\x35\xcf\xc8\x02\x67\xf8\x5a\xa0\x0f\xe0\xee\xdb\x1a\xcf\x19\x56\x6c\x71\x6e\x04\xa7\xdb\x8a\xb2\x3c\xaa\x51\xc3\x7e\x57\x95\x1f\x40\x9d\x06\x70\x92\xe8\x25\x72\x0c\x5a\x8b\x8d\xf0\x51\x45\x42\xfd\xb4\x8f\xbf\x99\x56\x73\x8b\x63\x08\xf6\x4d\x8a\xf0\xd6\xca\x9b\xc2\x32\xb4\x8f\x66\xdf\x5c\xc4\x30\xfc\x42\x3b\x8b\x51\xaf\x08\x54\x06\x1a\x97\x1a\x40\x57\x0d\xed\xd9\x68\xfa\xf2\x4d\xda\x67\x9f\x58\x76\xd5\x85\xdd\xb3\xab\xbe\xb7\x42\x26\x3a\x51\xe8\xbe\xb3\xe2\xbd\xa9\x72\xf7\xdc\x29\x45\xfc\xe5\xdd\x1f\x25\x52\xe6\x12\x5c\x08\x90\x70\xdc\xfa\x25\x95\xbe\xb2\x72\xe4\xdd\x36\xde\xc8\x86\x88\x69\x6b\xa5\x79\x42\xb3\x0e\x64\x4e\xa9\x77\xe2\xe2\x5e\xee\xc5\x22\xb4\xb3\xd2\x88\x9d\x23\xb7\x33\x4f\xe8\xfc\xdd\x8b\xa6\x09\x66\xb4\x1d\xb0\x9d\xdb\xbb\x13\xd9\x71\xa4\x9f\x9b\x22\xc7\xb7\x40\xad\xdc\xf7\x4c\x79\x8f\x39\xf6\xb3\x42\x01\xcd\x12\x54\x00\xdb\x39\xe5\x62\x96\x83\xf3\x84\xec\x4e\x17\xb8\xf0\xd5\xa4\x30\x7e\xc2\xd5\x6f\x3d\xd1\xdb\x5c\xde\x39\xda\x9e\x88\x2b\x28\xd5\x12\x3a\x54\xae\x2a\xf5\xd3\xd2\xa2\x38\x8d\x57\x77\x95\x66\x70\x58\x53\x29\xf3\x1a\x15\xc0\x5d\xe0\xaf\x39\x06\x52\x80\x46\x7f\x94\x38\x91\x62\x4f\xad\x3b\x1f\xdc\x47\x6e\xb0\xf0\x04\x0e\x7b\xff\x0e\x12\xf6\x97\x01\xd7\x50\x5d\x63\x6d\xcc\x3f\xa8\x10\x17\xf4\xef\x30\x5d\xca\x80\xe2\xbe\xbf\xe2\xbd\xa3\x22\xc3\x65\xab\x74\xf6\xfc\x29\xe5\x28\x03\x97\xb5\x56\xc8\x78\x45\xd8\x9f\xfa\xd4\x88\xa4\x95\x97\x63\xf1\x59\x71\x89\xf5\x28\x0c\x97\x59\x77\x1a\xf7\x3c\x1a\xb4\x51\x95\x2b\x6d\x33\x6a\x0d\x0b\x3f\x71\x3b\xd4\x1b\xe2\x79\x7d\xba\xc8\x0b\xab\xa0\x52\x04\xa1\x4a\x3e\x61\x2c\xcc\x04\xeb\x25\x5a\xf5\x74\x0a\x29\x43\x71\x2b\xfa\x67\xe6\x73\xbb\xfe\xd8\x31\x7a\xe8\xee\x44\x6a\x8b\xc1\x56\x72\x1a\x92\x36\x1c\xee\x8d\x71\xb5\x82\x76\xef\x21\xa4\xb8\x8a\xdd\x3b\xbd\x13\x7a\x16\x4b\x83\x01\xc6\x40\xe3\x2f\xf4\xbf\xc7\x8d\x7a\x5f\xe1\xc8\xf0\xf3\x87\x3d\x0e\xc1\xe7\xe5\x55\xbd\x32\xa1\xdd\xb1\x14\x63\x42\xef\xde\xf3\x16\x08\xd6\x80\x5e\x6c\x8f\x7b\x8f\x90\x6a\x2e\x79\x77\x0b\x9a\xb9\xa3\x6d\x95\x69\xcd\xab\x1c\x72\xdd\x68\xc1\xd4\xe2\x52\x77\x5f\xe0\x3d\x1f\xfe\x40\x69\x48\x6a\x2b\x73\x0e\x49\xfe\x90\x43\xac\xa5\x2c\x37\xfc\x0b\x00\xad\x40\x2e\xf6\x5d\xba\x97\x74\x7e\x76\xf1\xe4\x9d\x5a\x28\x5b\xe2\x61\xd7\x27\x1f\x72\x46\x74\x75\xb7\xe2\xba\xdd\xd7\x39\xde\x0b\xac\x27\x9a\x40\xf5\x06\x7a\x27\x06\x57\x72\x48\x01\x42\x2a\x24\x48\x96\xd7\xfc\xc3\xe5\x08\xf0\x75\x67\x86\x4c\xe3\x72\x7c\x87\xf7\x6f\x17\xac\x48\xa1\x3c\x48\x1b\x2c\xa7\x77\xcf\x9d\xb2\x68\xcb\xda\x1e\x72\xeb\xf6\x30\x65\xdc\x8f\x4e\x78\xaf\x75\x06\xbe\x06\xac\xa3\xcc\xd4\x4d\x5a\xbc\x9d\x71\x1f\x5a\x18\x4a\x00\x4b\x54\x40\x0d\x55\x25\x8d\x06\xca\x9e\x18\xb5\xf5\x05\x32\x5a\x73\x48\xf1\x76\xcd\xb9\xda\x02\x77\x5a\x77\x7e\xa6\x42\x1e\x71\x88\x51\xc4\x4d\x3d\xb6\xa8\x50\x91\x80\xe5\x47\xcd\x9a\x19\xf1\x80\x7a\x0a\x4c\xa0\x32\x37\x0f\x14\x4d\x48\xcb\x4c\x4c\xfc\xa8\xa3\xb0\x66\xfe\xcd\x0e\xb1\x3b\x26\x36\xc7\x23\x8e\xfc\xa1\x99\x65\x65\x50\xc8\x3a\x11\x1a\x9f\x91\x25\x54\x73\x89\xee\x47\xb9\x46\x34\x0a\x96\xf8\x0a\xd3\x18\x4c\x51\xa6\x18\xec\x00\x12\x16\x62\x52\x12\xf5\x17\x64\xa9\xac\x8a\xd1\x70\x31\x26\xf8\x69\x75\xf1\xcf\x9f\x44\x9e\xb9\x89\xd0\x14\xf7\x5d\x4f\xf2\x4e\xe2\x9f\x2a\x8d\x28\xa8\xc2\x0b\x3e\x49\xa6\x3f\x84\x50\x75\x48\x29\x23\x4b\xa0\xd7\x69\x11\x3f\xf1\x86\x71\x96\x93\xcd\xc2\xef\xdc\x43\xf6\xd4\x78\xc8\xdc\xf3\xa0\x0e\x3f\x7e\xcc\xbb\x71\x41\xa3\x00\xdf\xb9\xb8\x38\xaf\xa6\x1a\x92\xe9\x68\x9e\x15\xfd\x9f\xab\xf4\x88\xc6\x5d\x61\xb9\xad\xd9\x7e\x57\x85\x4c\x86\x2c\x0f\xa2\x38\x73\xdf\x5c\xd9\x12\xb4\x05\x6e\x89\x53\x58\x89\xf7\x71\xe7\xb4\x4a\x01\x86\xbe\xca\x59\xc6\x6b\x11\x70\xac\x5a\xda\x4e\xc1\x48\xe2\x53\xb4\x4c\xe2\x2f\x98\x64\x5c\x76\x1a\xe5\x99\x60\x07\x8a\x64\x62\xb2\x87\x65\xa5\xb6\x36\xd5\x29\x69\x0f\x5a\xd4\x36\xb3\xbe\xfe\x4f\x35\x0e\x5c\x27\x86\x9e\x74\xd5\x96\x62\x97\x6b\xac\x9d\x2b\x94\x85\x3a\xd8\xc6\x24\x83\x2d\xbb\x27\x2e\x0f\x7f\x8c\x40\x33\x3a\x9b\x72\x37\x99\x94\xfe\xcd\xee\x73\xbd\x5b\x66\x69\xb3\xd3\x0a\x92\xe9\x94\x05\x21\xd0\x39\xf4\xf6\x6f\x9b\x46\x1a\xe5\xad\xaf\xf4\x08\xea\x7a\xb4\x88\xd6\x6f\x3a\x64\x4a\xd9\xca\xdd\x5f\x70\xb6\x04\xf9\xaf\x3c\xfb\xbd\x07\x16\x54\xaa\x5f\xf4\x4e\xd7\xbe\x9a\xbb\x36\x43\xe4\x53\x10\x28\x28\xb6\x94\xfb\x67\x0e\x04\xc6\xc9\x8e\x0e\x9c\x9a\xd5\x66\xb7\x34\x21\xd2\x87\x0e\xd8\x7f\x19\x13\xe8\xc9\xd9\xeb\x03\xea\x84\xca\x52\x53\xc0\xb1\x42\x73\x8b\x58\x82\x59\x65\xbd\xac\xc5\x41\x8a\xac\x45\x90\x20\x75\x91\x4b\x03\xd4\x65\xa9\x23\xc8\x3b\xc3\xc3\xc5\x57\x58\x9a\x46\xa1\x38\xb3\xd6\x32\xbd\xdb\x11\x7f\xc2\xb5\xf1\x56\xc7\xfb\x61\x67\xc1\x58\x5b\xc3\xab\xd0\xa7\x17\x20\xf2\xe2\x04\xf5\x16\x50\x58\xf6\xc4\x6d\xa5\x47\xb5\xd3\x2b\x91\xb5\x59\x0d\xd4\x11\xd8\x37\xcb\x95\xe0\xfc\xc6\x30\x29\xcf\x74\x0f\xf7\x03\x49\xc1\xc1\x95\xb1\xed\xfe\x79\xdf\x88\x81\xd4\xf8\xf9\xc9\xa0\x93\x31\xf7\x77\xf7\x79\x97\x8d\xdf\x45\x76\xd7\x96\x9a\x87\x9e\x98\xea\xa0\x1d\xc9\x2a\x20\x64\x17\x9c\xac\x8a\xa0\x98\x5a\x90\xb1\x4c\x3a\x13\x2b\xd0\x47\x88\x3e\x40\x65\x36\x4b\x6a\xbc\x23\xae\x3c\x16\xfa\xeb\xce\xef\xed\x25\xef\x9b\x20\x7b\x81\xc0\xba\xef\x9a\xf0\x7e\x72\x62\xb1\xa9\x3c\x18\x4a\x58\xbb\x45\xf8\x36\xa4\x67\x93\x51\x0e\x50\x73\x55\x08\xde\x82\x03\x01\x1a\x2a\xc8\x13\x24\x9d\xb5\xd2\xc6\xa2\x6e\x4f\xfa\x78\xd3\x90\xe7\xa8\x4c\xe3\x59\x5e\x8f\x2e\x53\xe5\xb1\x0c\x37\x59\x82\xb7\x5c\x90\xe3\xfa\x8a\x0b\x77\x36\x4d\x83\x2e\x0e\xe0\x41\x96\xf2\xe9\x28\x09\xd9\x65\x41\xe7\xe8\x19\xd1\x57\x69\x78\x69\xb7\x59\x90\x5a\xca\x5a\x74\x2d\x36\x63\xb4\xa0\xf3\x19\x0d\x3b\x0c\x79\x3e\xf8\xba\x19\x00\xba\x67\x69\xbe\x7c\x7a\x41\xde\x37\xa5\x24\x85\x9e\x18\xab\x27\x55\xfe\x38\x59\xf2\x91\xe2\x65\xa5\x31\x50\xcd\x9d\xf8\x06\x9c\xf0\x5e\x78\xe4\xc5\xfe\x46\x1f\x63\x98\x09\x76\x58\x6b\xb8\xf1\x73\x0b\x51\xe0\xff\x2c\xe8\x6d\xee\x35\x46\xa1\xb7\x98\x57\x4f\xfe\xc0\xa4\xe9\xd4\xbc\x61\x35\xa6\xa2\x72\xe7\x0d\xb2\xe9\x48\x02\xbb\xa5\xe0\x3c\x60\x1d\xf9\xd7\x14\x94\xed\x11\xc7\xcb\x36\x26\x6c\x83\xfa\xb0\x65\x0a\x66\xf6\xe6\xc3\x57\x8d\x28\xc1\x59\xec\x8b\xfb\x86\xab\xbc\xcf\x55\xac\x47\x2a\x16\x13\xe3\x9d\x64\xae\x64\x70\x0f\x12\x54\x2c\x8f\x94\xc1\xf4\xdc\xec\x7d\x46\x94\x80\xe9\xac\xcd\xd5\x29\x36\x3f\xef\x73\x94\x75\x2c\x11\x7a\xe0\x48\x62\xac\x4f\x5f\x40\x17\xcc\x70\x36\xcd\x23\xaf\x82\x83\xa3\x3e\x1d\x66\x20\x7e\x49\x99\x2d\x9d\xdf\xe5\x2e\x97\x7c\x3a\x90\x71\x2d\xfe\x68\xee\x47\xa5\x51\x05\x3b\x9c\xae\xbd\x6a\x86\x2b\x04\x59\xd6\x69\x49\x42\x20\x78\x29\x5d\xaa\x94\xc4\x59\x62\x3c\x56\x11\xe4\x31\x64\xa9\x6a\xc4\x5f\x77\x7e\x7a\x3f\xf9\x2b\x87\xec\xc3\x63\xe8\xfe\x89\xe3\x7d\x37\x04\x1d\x9c\xc4\x63\x29\xc3\x13\x55\x24\x08\x46\xc0\xc9\x65\xe9\xc7\x58\xe2\x04\xa9\x89\x43\x62\x58\x18\xf1\xcc\xb7\x48\x22\xd4\xba\x60\x9d\x2c\x94\xe4\x60\x47\x10\x07\x0c\x2a\x4e\x96\x54\x7a\x96\xfb\xbc\xb3\x8b\x05\x94\xbc\x9e\xaf\x32\x6d\xed\x37\x36\x79\x05\x9b\x83\xb0\x36\xfc\xbf\x28\xed\xd4\x17\x1d\xef\xd3\x30\x89\x90\x0b\x65\xfb\x8d\xd0\x0b\x09\xda\xb5\x0b\x45\x34\x32\xeb\xe0\x7c\x66\x3a\x1c\x2a\x57\x6b\xdd\x84\x60\x90\xaf\x10\xbb\xf9\x23\x8e\x54\x8b\x81\x98\xad\x03\x57\xb6\x3d\x7c\x7a\x48\xc6\x59\x48\xe2\xa3\x93\x8f\x40\xf5\x52\x91\x80\x42\xb8\x0a\x60\x0d\x0f\xdb\x09\xe1\x2b\xe4\x1a\xf0\xd4\x02\xb7\x2b\x15\x50\xf0\x5d\x15\x25\xc9\xfd\xad\x33\x57\x2f\xdc\xac\xaa\x96\x07\x78\x3f\x7c\x50\xcd\x05\x16\x51\x43\x18\x77\x14\xfa\x74\x41\xac\x93\xbc\xde\x51\x8e\x40\x07\x30\x53\x66\x40\xbb\x56\xb0\x0c\x3a\xa8\x20\xc6\xac\xde\x8c\x62\x1a\x60\x3a\x6d\x18\xa8\x65\x45\xb9\x7d\x25\xe8\x3a\x9b\x7c\x15\x1d\xce\x73\x4e\x57\x83\x28\xd7\xbd\x0c\x96\x95\xe4\x53\xae\xde\x16\x3e\xdf\xe6\xa0\x36\xeb\x4d\x8e\xf7\xfd\x8e\xa5\x5e\x54\x79\x49\x06\x4d\x7e\x11\x2c\x30\x60\x01\x76\x54\x31\xf9\x05\x87\x1c\x1e\x39\x08\xc2\xfd\x1d\xc7\x0c\xc7\x7b\xa7\xa3\x42\xf1\x02\xba\x9a\x0a\x9e\x24\xa5\x01\xa8\xeb\xd1\x4f\x0b\xa3\xf2\x60\x14\x32\x49\x48\xa6\x13\xe0\x18\x99\xfb\x73\x0e\x09\xfb\x81\xfc\x0a\x6e\xca\xa7\xf4\x5e\xac\x0d\xd9\x20\xad\x00\xad\x03\x68\x45\xd2\x55\x73\x59\x0f\x6a\x39\xc7\x38\xb4\x26\x0f\x8d\xc8\x62\xd8\x62\xed\xa0\xb6\x1c\x34\xc4\xe1\xa8\xb3\x34\xb3\xb5\x43\x4f\x1e\x31\xf8\xef\x5e\xc0\x6c\x10\x47\xd4\x7d\xc7\x93\xbd\x67\xc3\x5f\x76\x60\xbe\x5c\x34\xb6\xa2\x30\x1f\xd0\x2c\x6b\x50\x0a\x7f\xcd\xd9\x23\x0e\xf6\x9a\x23\xbd\x75\xd6\x9d\x8f\x56\xc8\x7f\xae\x28\xe7\x1d\xf7\x97\x2a\xe4\xc4\x68\x44\x38\xed\x24\x30\xb1\x17\x83\xd5\xd3\x0a\xab\xcc\xfb\x07\xe7\x82\xf2\x23\x38\x41\xe8\x75\x82\xc5\x58\x14\x17\x5c\x94\xd1\x59\xc0\x18\xe5\x29\x3d\x27\x0d\xb8\x08\x41\x9e\xb0\x55\xf4\x16\xb4\x3d\x98\xfd\xd2\xd7\x88\x97\x25\xbf\xe9\x53\xde\x04\xb3\x55\xe7\xa3\x40\x54\xb1\xeb\x3a\x2d\x8e\xdb\x09\x7a\x5d\xa1\x63\x4b\x99\xa0\x8e\xa0\x03\xb9\x49\x6a\xd1\x80\xfc\xc1\x39\x04\x27\xd9\x8c\x25\x99\xe0\x27\x6d\x05\xaa\xa0\xa4\xec\x72\xee\x93\xa7\x12\x98\x56\xd7\x76\x9a\xfe\xae\x11\x10\x21\xff\xe2\x80\xfb\xb1\x03\xfd\x84\x9d\x62\xb9\x37\x0d\x07\x39\xe8\xd3\xad\x60\x41\x8e\x5a\xd7\x30\x20\xc8\xd1\xeb\xd8\x4a\x4f\xb6\x5d\xc1\x30\x58\xc6\x51\x1a\x1d\xa1\xf8\x56\x9a\xd8\x14\xec\xe3\x08\xfd\x1c\x86\xa7\x37\xd2\xe7\x3d\xb8\x8d\x3b\xfa\xd5\x70\xa8\xc7\x8d\x9b\x1a\xad\xfc\x50\x90\xc7\x41\x3d\xdb\x0c\xc2\xe3\x88\x0d\xf7\x81\x77\x1c\xf1\xcb\xc1\xd8\x8e\x1b\xcf\x51\x09\xd8\x71\xc4\x16\x37\x86\x63\xdc\xb8\xe5\xad\xd7\x31\x32\x9e\xe3\xa8\x15\xf4\x07\x64\xdc\x78\x08\x9b\xfc\x50\xc2\x38\x7e\xe8\x00\xa9\x6e\xe6\x0a\x75\xdf\x78\xc0\xfb\x55\x62\x3e\x31\x63\xbc\x9b\x3c\x0e\x8d\xbd\x23\x58\x57\x1d\x27\xaf\x12\x4e\xf8\x84\x2c\x72\x89\x35\x1e\x65\x55\xbc\xbf\x02\x05\x2e\x0e\x1c\x50\x33\xc8\xa8\xd5\x44\x90\x81\xfe\x08\x84\xd1\x28\xa1\x5d\xde\x49\x75\xc5\x55\xd3\x32\x04\x71\xfd\x28\x9d\xaa\x9b\x5e\x16\xd7\x06\x1d\x2c\xe3\xd3\xfb\x78\x07\x03\x61\x12\x69\x12\x40\xda\xcc\x52\x2c\xaf\xb0\x63\xda\x71\xa7\x11\xa1\xde\x5f\x74\x7d\x66\x86\xce\xa9\x9a\x24\xd7\x74\x02\xfb\x75\xae\x3b\x3b\x3f\x27\x1b\x95\x58\x78\x0f\x91\xfd\x6a\x0e\xc5\xe5\x0e\x48\x08\x97\xee\xcf\x78\x72\xc2\xab\x46\x49\x1c\x25\xcc\xbb\x44\xf6\x9f\xeb\xce\x63\x1b\xaa\xac\xac\x44\x96\x6c\xc9\xd7\xde\x25\xf2\x32\x6c\x09\x7f\xcf\x1a\xad\xcc\xa2\x4a\x4a\xd9\x1f\xe4\x97\x01\x3e\x15\x1f\x42\xc7\x4f\x5f\xde\xe5\x8e\x5b\x6b\xb6\xe3\xdd\xbf\x80\x8a\xb0\xd5\x28\x95\x01\x04\xa0\x4e\x04\x35\x47\xcc\xf9\x32\x08\xa7\x79\x13\x11\x80\x96\x71\x77\x9d\x10\xb5\x7b\xe2\x20\x78\x27\x3c\x63\x9c\x5e\x95\xec\xf7\x0a\xbb\xa3\x77\xc2\x5b\x39\x0a\xcf\x74\x6f\xe1\x4b\xfd\xa9\xec\xb2\x28\xb2\x5f\xf7\xeb\x84\x57\xe7\x5c\x3c\x7a\x59\x55\xf4\x70\x81\xa3\x0a\x46\xc6\xd3\xdf\x46\x4f\x31\xb4\xc2\x81\xe2\x0e\xf4\x18\x62\x5c\x82\xc5\xec\x06\x2d\x88\x15\xed\x24\x92\xb5\x57\x7a\x22\x15\x87\x00\x06\x2c\x08\x99\xb5\xb6\xba\xb9\x54\x3e\x5d\x44\xcf\x4a\xa8\x19\xc4\xa5\x60\x15\xa7\x44\x3a\x24\x03\x94\x45\x81\xb9\xde\x49\xc4\xb2\x2b\x64\x1c\x44\xef\xc9\x59\x5b\xa2\x86\xd6\x78\xbb\x4b\x0f\x21\x16\x4e\x7b\xb9\x31\x83\x86\x52\x31\x39\x87\x8b\xd8\xdd\x9e\x33\x04\x51\xd1\xb8\xf8\x6a\x53\x1d\xcc\x94\x43\xd0\x42\xad\xc9\x5a\x18\x32\x56\xd4\x46\xeb\x9d\xa4\x26\xc1\x38\x92\x2c\x0f\xc0\x17\x02\x4f\x3d\xac\x24\xf6\xb2\x58\x5e\x09\xc8\x11\x25\x16\x41\xa8\xd2\xbc\x93\x82\x03\x58\x94\x17\xdd\x53\xf2\x92\xf2\x3c\xed\xb6\x95\xa2\x2a\xe7\xa9\x2e\x0c\x45\xd5\x1c\x1e\x5a\xbc\x70\xea\xc2\x09\x15\x07\x0b\x69\x91\x10\x44\xc2\x0e\x50\x41\x9b\x72\x27\x59\x4e\xf8\x6a\xa2\x2a\xd6\xdb\xfe\x6e\xf9\xbc\xe4\xcd\x5c\x53\x3e\x97\xb2\x07\x2c\xf4\x0f\xaf\x39\x13\x17\x83\xd5\x75\x00\xef\x13\x7f\xb9\x67\xdc\x3d\x4b\xdd\x9c\x79\xc7\x2f\x06\xab\x85\x2b\x62\xc8\xd2\x18\xe0\x3e\x2c\x65\x79\xc9\xb5\xd6\x12\xd3\x3e\x58\x19\x2c\xa6\x75\xf2\x28\xf6\xa3\x24\xcf\xf2\xd4\x9f\x4b\xf2\x0b\x29\x62\x08\xb9\xaf\xab\xb8\x57\x47\x49\x3e\xcd\xd3\x69\xac\xc5\xfb\x5f\x8e\xf1\x5e\xa2\x50\x80\xb7\x8c\x72\xe2\x05\x02\x8f\x29\x94\x8e\x1f\x83\x70\x5e\x79\x68\x85\x20\x8a\x68\x4a\xb8\x5a\xb0\x78\x3c\x45\x69\x55\xee\xf2\x18\x73\xf0\x84\xc5\xbe\x17\x4f\x20\x84\xa5\x9d\xf2\xb0\x53\x63\x80\x5f\x56\xe3\x49\xd6\x69\x31\xe5\x5e\x9c\x48\x69\xa7\x94\x66\xb6\xcb\x3b\x98\x62\x76\xc5\xce\x24\x2a\x16\x06\x1a\xc7\x0b\x45\xf7\x3c\x00\xac\x7f\xe9\x9c\x0f\x89\x77\x21\x78\xcc\x9a\xc4\xdf\x9f\x20\xcf\x18\x34\x89\x0a\x65\x78\x2e\xa9\x73\xf7\xad\x13\xde\xa2\xf8\xc3\x40\xe3\xc3\xd7\x88\xa7\xaa\x55\xba\x3e\x28\x47\x56\xd9\xc1\x38\xa6\xab\x81\xf4\x8a\x11\x02\x00\xea\xa2\x10\xc4\xc9\x28\xbe\xe6\xec\x6d\x05\xf7\xf3\x54\xfc\x37\x4a\xc4\x7f\x49\x23\xca\x8b\x04\x9f\x8d\x28\x3f\xc9\x5b\xad\x28\x5f\x73\xae\x6a\x44\xf9\x62\xca\x98\x90\x12\xd9\x9a\xb3\x7f\xa9\x13\xc5\xe1\x29\xfc\xbb\xc1\xf5\x27\x53\x35\xde\x6a\x47\x31\x4b\xd7\x9c\xa9\x76\x1c\xe4\xa2\xad\x75\xe7\x53\x0e\xf9\x46\x52\x7c\x62\xc9\x85\xe4\xdf\x10\xfd\x91\xfd\xe2\x1b\x49\xd1\x01\xfb\xcd\x37\x13\xab\x3b\xf6\xcb\x7f\x4b\x8c\x41\xf4\xd6\xc8\xfb\xbe\xb9\x96\xe0\x4c\xf4\x3e\x15\xf3\xd2\xd3\x61\x35\x34\xfb\xc5\x17\xf7\x6b\x84\x46\x21\xe5\x4e\x07\x8d\x46\xca\x1a\x41\xce\xd3\x42\x7d\x51\x16\xca\x30\x9f\xe2\x02\x06\x20\xb9\xef\xd9\xef\xbd\xb0\xf8\x59\x52\x67\xa0\x5e\xbf\xc7\x79\xdb\x82\x54\xa6\x56\x80\x91\x42\x6c\xf6\x81\x67\xf3\xfc\x75\xe7\xbf\x4f\x8e\x7d\x60\xc6\x39\x0f\x77\x4b\x1b\x7e\x97\xe1\x24\x71\x1b\xb9\x65\x2b\xd1\x27\x1a\xc3\x8b\xfc\xb4\x43\xf6\x64\x6d\x56\x73\x7f\xcc\x21\x17\xfa\x56\xb5\xb5\x43\xb6\xd0\x66\x35\xef\x8c\xf8\xd7\xc0\x26\x31\xcc\x62\x00\xfa\xc3\x55\xe0\x34\xc4\xb0\xc1\xe4\xc8\x27\x32\x76\x1d\x4f\x23\xf9\x91\xc2\xe1\xe0\xfb\x1c\xf2\xbc\x9d\xec\x26\x02\x33\xdf\xb0\xa0\x7c\x20\x64\x57\x43\x96\x02\xbc\x5f\x5f\xa3\xfc\xec\xfc\x9c\xec\xd9\xe3\x4e\x7d\x63\x6d\xdb\x49\x77\x76\x54\x6d\x51\xd1\xb1\xb2\xc3\xc1\x07\xf7\x90\x33\xdb\x1a\xe9\x49\xe5\xb7\xea\xfe\xef\x89\x42\x21\x8b\xb3\xba\xee\x7c\x72\x82\xbc\xde\x21\x6e\x1c\x64\xf9\x62\x1a\x24\x59\xa4\x80\x1e\xdc\x87\xb6\x8e\x18\xf4\x9c\xb3\x41\x96\xa3\x2e\x5a\xc6\x61\x61\x0f\x68\xae\x9b\x50\x3e\xea\x3c\xd1\x06\x1a\x70\xde\x02\x7d\xa8\x4f\x9e\x5f\xd8\xbd\xcf\x79\xcf\xb9\xd3\xb6\x7a\xcb\x37\x66\x04\xbe\xb6\x1f\xc2\x52\x01\x20\x7a\xd1\x96\xc5\x15\xbc\x44\xdb\xb3\x17\xbd\x3b\xee\x86\x30\x91\xaa\xe8\xc5\xf4\x2a\x4f\xc3\x6a\x71\xa6\x95\x8b\x98\xc2\xd2\xd0\x83\x38\x98\x0d\xad\xff\x05\x7a\xc7\xce\x9b\x8e\x95\x65\x57\x28\xa3\x42\x20\x2f\x82\xb6\x2c\x82\x3b\xfb\x19\x4c\xa2\x25\xd9\x50\xab\xee\x1b\xa4\xe2\x77\xc6\xf3\x94\x7a\x19\x94\xfe\xd2\xaa\x6b\xd7\x6a\x7e\xf8\xe5\x49\x32\xbb\xad\x4d\x04\xd9\xd4\xdf\x3f\xe9\xcd\xd8\x8f\x7a\x72\xa9\xab\xab\x55\xb9\x85\xae\x39\x7b\xc1\xa9\x61\xdd\x79\xed\x38\x85\xf9\x66\xaf\x46\x46\x70\xf2\xdc\x17\x8d\x86\x14\xbe\xb5\xa5\x1d\xdf\xc0\xa3\xdf\xc0\x73\xc6\x0d\x7c\xcb\xb6\xbc\x14\x1f\x77\xee\xdf\xf8\x02\xb9\xc3\x3d\xbd\xf9\x0b\xa4\x5f\xf2\xf1\xcf\x3f\x6d\x9b\xe7\x5f\xdc\xe7\xee\xcf\x3c\xcd\x7b\x8b\x63\x3f\xdb\xfe\x1d\x2f\x81\x13\x60\xcd\x00\xee\x05\xed\xa5\x68\x33\x87\x88\x32\x21\x1b\x42\x46\x5b\x99\x45\x22\x8c\x30\x6e\xc8\x50\x8c\x8b\xd1\xea\xdc\xa4\xfe\x9a\x33\x29\x21\x07\xd6\x9c\x6b\x61\xfa\xe6\xd3\x88\xa7\x51\xde\x3d\x17\x25\x51\xab\xd3\x5a\x73\x9e\x2c\xa7\x47\xbd\x58\x77\x3e\x7c\x2d\xf9\x5d\x87\x4c\xd5\x82\xdb\x3b\x49\x18\x33\xf7\x57\x1d\x29\xcb\xbf\xcd\x39\x39\x8b\xcf\xf0\x58\xcc\x9f\x3e\x07\x0e\x76\x21\x0b\xe9\xc9\x59\xba\x84\xaf\x0c\xa5\x87\x01\xb0\x20\x31\x75\x98\xcd\x3c\x1c\x2c\x72\x4d\x1b\x63\x00\x17\xa9\x4e\x62\xf8\x0c\x48\x58\x8a\x3c\x15\xf2\x46\xca\x79\x9e\x29\xf7\xb1\x02\x06\x53\x4c\x0c\xe4\xe8\x34\xb7\xe9\x49\xe5\x99\x72\xc2\x9b\x06\xf9\x45\xdd\x14\x45\x76\x1b\x90\x9b\x8d\x60\x05\x08\x30\xb0\xf6\xfa\x7b\xf6\x92\xbe\x93\xe7\xfe\xe8\x5e\xe5\xe4\xf0\xf2\xbd\x77\x94\x0b\x24\x9d\x96\x6a\xac\x2d\x1f\x1b\x09\xb5\x15\x65\x86\x80\xe0\x20\xa7\x31\x0b\xb2\xdc\xa7\x77\x46\x0d\xcc\xee\x2a\x3f\xc0\xc4\xa1\xda\xa8\xdd\x50\x43\x68\x43\x88\x52\x6a\x87\x1d\x73\x4c\xf8\xbc\x6a\x56\xc0\x13\x41\xa2\xcf\x73\x25\x95\xa3\x95\x55\x27\x49\x56\x97\x09\x56\xdc\x02\x84\x51\x9c\xf7\x2e\xd8\xb3\x69\x13\x3b\xd4\x77\x74\x32\x60\x38\xeb\x80\x6f\x95\xec\xe2\x6a\x93\xc7\xaa\xa3\x0d\x06\x02\x65\xd3\x1e\x94\x02\x60\x8a\x5a\x41\xda\xa5\x19\x4f\xe1\xf2\x5c\x0a\x32\x04\x66\xe9\x69\xaa\xd5\x69\x55\x11\xbe\x93\x85\x58\x57\x96\x2b\x88\x9c\x9c\xc3\x80\xb3\x9c\x1e\x3a\x76\x44\x19\xa0\x8f\x1e\x39\xac\x52\x78\x0b\x26\xa0\x6f\x2b\xe8\xbd\xd1\x6e\x06\x4b\x0c\x21\xb0\x6b\xbc\xd5\x0e\xd2\x28\x2b\x7c\xf7\x4c\x64\x58\x75\xaf\xd2\x43\x2b\x47\xfd\xa5\x40\x67\xa4\x59\x39\xea\xd7\x39\x3f\x4c\xef\x65\x07\xc3\xc2\x9c\x5d\x52\xd9\x9e\xa0\xd7\x49\x22\x45\x0f\x49\x4f\xfc\xc2\x96\x70\x58\xac\xfe\xd1\xef\x3c\x72\xe4\x08\xd0\x87\xf9\x20\x58\x60\x19\x3d\x74\xa1\xcd\x92\x85\x66\x54\xcf\xab\xf4\x14\x8b\x44\x29\x80\x66\xd0\xf6\x72\xa9\x0c\x95\x6a\xbf\x63\x47\x8e\x1c\xc9\x2c\xdf\x93\xdf\x77\xc8\x37\x44\x49\xc6\x6a\x9d\x94\x2d\x2c\x47\xed\xc5\xb3\x0b\xf7\x08\xca\xd0\x75\xdf\xeb\x78\x6f\x75\xe6\xfa\xbd\x52\xf4\x24\xa3\x8b\x67\x17\x06\x12\x15\x09\x13\xd2\x4b\xc7\x8c\x33\x54\xa0\xe4\x66\x79\xca\x93\x46\x0c\x75\xd7\x78\x27\x0d\x20\xf0\x1d\x8c\x14\xa5\x54\xec\x05\x6d\x41\x68\x2a\x3b\x38\xf1\x8b\x15\xa2\x48\x99\xfb\xdf\x2b\x3b\x20\x00\x49\xd2\xad\xc3\x77\xbd\xd7\x57\x14\xcb\x26\xa3\x7f\x54\x18\xa5\x11\xeb\x2e\xde\xea\xe8\x93\x82\x8c\xf9\x94\xce\x49\xc7\xa3\x62\x5e\x20\xc0\x59\x10\x70\x7a\xfd\xf5\xc7\x15\x80\x9c\xd1\x84\x4c\x46\x1c\xe4\xfa\x90\x33\xda\x0c\x92\x10\xb4\x89\x8a\xd7\xd6\x64\x4a\xa7\xca\xca\xb0\x10\x0b\xe1\x5e\x89\x01\xdc\xbf\x3c\xf5\x0c\x42\x95\x24\xe8\x62\xd4\x6a\x8b\xe9\x67\xb1\x98\x14\x3d\x9a\x44\x5c\x51\xb1\xac\x2b\xa5\xb5\x66\x10\x25\x72\x4f\xe9\x58\x3e\x10\x3e\x54\x16\xaf\x73\xde\x73\xee\x29\xfa\xa0\xfa\xa6\xba\xd5\x43\x3f\x7d\x6a\x23\x57\x7a\x2b\x47\x2d\x77\xde\x4f\x4d\x92\xf2\xcd\xe3\xfe\xe1\xa4\x22\xa7\xbf\x36\x79\x8f\xfd\x4e\x05\xad\x62\xcb\x40\x0c\x74\xea\x6b\xb9\x14\x45\x32\xb1\x2c\x0a\x19\xe6\x20\x90\x84\xcd\xa7\x54\x81\x8e\x34\x40\x79\x9d\xa2\xc7\xf4\x83\x2c\xe5\x1b\x50\xa3\x52\x3f\x7a\x09\xd1\x60\x0a\xb4\x10\x21\xa8\x11\x00\xd7\xab\x3e\x05\xd8\x23\x89\x81\x87\x44\x4c\xba\x77\x65\xad\x20\x8e\xab\xb4\x9d\xf2\xa5\x60\x29\xee\xaa\xb3\x7d\xf4\x48\x06\x1c\x1e\x28\xf1\x79\x9d\xb2\x07\x3a\x06\x2a\x85\x24\xaa\x11\x93\xb0\x6f\x3a\xd1\x1a\xb2\xac\xe5\x6b\x58\x50\xb9\x8e\xf4\x97\x43\x44\x64\xd9\xb5\x40\xcd\x94\xdc\xa8\xa5\x7a\x20\x2d\x8d\x38\x5d\x82\x9e\x79\x05\x6a\x1c\xcc\x17\x46\xed\x25\x3c\x31\xcb\x94\x6a\xc8\x14\xee\x79\xa0\xb0\x98\xc5\x0e\x66\x97\xa3\x1a\x6f\xa4\x41\xbb\xa9\xf0\x7f\xbc\xbb\x7a\x6a\x80\x38\xaf\x34\x57\xcc\x92\xb7\xe2\x29\x4c\x94\x54\x9c\x46\x89\x2b\x00\xb0\x29\x72\x42\x0f\x61\xbc\xf3\xfd\x5c\xdf\x74\x87\xe5\x27\x06\x96\x1c\xca\xa1\x30\x3a\x0f\x6e\x02\x0c\xcd\x58\x62\x79\xe0\xc9\xac\x33\x78\x59\x5a\x95\x46\x89\x51\x29\xec\x9d\x8c\x41\x47\x32\x60\xd5\xa4\x55\x6c\xa9\x4b\xef\x98\xa5\xb7\x52\x51\x19\xbd\x15\x2f\x1a\x70\xf6\x4b\x99\x78\x01\x04\x46\xcd\x0f\x0c\x2b\xe1\x0a\x27\x10\x6e\x53\x40\x1c\xcb\x03\x30\x44\x88\x6f\x0f\x57\x8b\x2c\x57\xe2\xc2\xc7\xbb\x2a\x69\xd8\x83\x94\x63\xb4\xfa\x88\x78\x42\x78\x0a\x55\x1f\x95\x94\xaa\xe6\x57\x70\xc6\x47\xaa\x74\xe5\x58\x95\xae\x1c\x15\xff\x47\x1f\x18\xf1\xd7\x11\xf1\xd7\xf1\x2a\x5d\x39\x0e\x76\x75\xf1\x48\xba\x65\x40\x39\xf8\xf3\x58\x95\xd6\x39\x3f\x8a\xff\x1e\xb1\x5d\x20\x1f\x99\x20\x27\x77\x40\x3b\xe5\xfe\x4a\xc5\x9b\x2d\x3f\xdc\xb4\xaa\x6a\xdd\xf9\x5f\x0e\xf9\x3b\x07\xc2\xe7\x55\x48\xf3\x5f\x3a\xde\x33\x4e\x6a\x30\x33\x24\xce\xda\xcf\x2d\x68\x47\xb2\x45\xcb\x65\xfa\xf9\xe4\x1e\xb2\xb8\x83\x72\xa7\xd6\x4b\x8d\x94\xba\x4d\x08\x64\x9b\x41\xc1\xf9\xee\xca\x96\x96\xa0\x7c\x3f\xba\xbf\xee\x78\x37\x95\x1f\x82\xdd\xac\xe7\xb6\x54\x73\x26\x6e\x9c\x5a\x57\xb2\x3e\xeb\xce\x43\xe4\x7a\xe9\xc3\x5c\xf5\x9e\xae\x70\xbe\xca\x8c\x96\x5c\x03\x9b\x87\x37\xf0\xb5\x9e\xed\x1d\x3e\x6f\xe2\x62\xa9\xef\xf1\xc1\xe0\x4a\xbe\x87\x90\xdb\x37\x3f\x0b\xb0\xe9\x4d\xbb\xc9\x07\x76\xdb\x6e\xf2\xbf\xc6\x76\x93\xb1\xdd\xe4\xab\xc3\x6e\xf2\x76\x65\x37\xf9\x49\x67\xfb\xe4\xb0\x7c\xd2\x76\xd4\x78\xf2\x13\x85\xf1\xe4\xf5\x0e\xb9\x67\xc7\xfb\xba\x5d\x0b\xca\xf2\xc6\x0a\xb0\x3b\xdd\x33\xdb\xb5\xa0\x48\xcf\xb8\xc7\xf6\x90\xbb\xb6\x3f\xe6\xb1\x2d\x65\x6c\x4b\xf9\xbe\xa9\xad\x18\xe4\xca\x3b\x09\x0c\x2a\xbf\xb5\x1d\x83\xca\x1b\xc6\x06\x95\xcd\xde\x99\xf7\x2b\x83\x4a\x60\x32\xb6\x8b\xe4\x22\x99\xdf\x69\xea\x38\xbe\x9f\xbf\x32\x56\x15\xbe\xf1\xa5\x72\xd6\x7d\xee\x4e\x58\x55\xe4\xc5\xf2\x8f\x4f\xdb\x09\x72\x00\xf6\x95\x77\x7e\x2d\xdb\x57\xfe\x60\x6c\x5f\x19\xdb\x57\xc6\xf6\x95\xb1\x7d\xe5\x89\x64\x5f\xf9\x92\x61\x5f\xf9\x7c\x65\xa7\x64\xa4\xb1\x91\x65\x6c\x64\x19\x1b\x59\xc6\x46\x96\xb1\x91\x65\x37\x8d\x2c\xaf\x9e\x20\x77\xee\x94\x16\xcb\xfd\xcd\x9d\xb1\xb4\xfc\xa3\x43\xbe\x68\x5b\x5a\x3e\xb5\x05\x4b\xcb\x8b\xc9\x0b\xc9\x7d\x3b\x2d\x90\xee\xae\xb9\xe5\x55\x95\xad\x2f\xc6\xd7\x98\xcd\xe5\x63\x8e\x15\xa6\x22\xc1\x49\xe4\x2c\x80\x09\xec\xde\x85\xd3\x71\x90\xe5\x51\xed\xf6\x98\xd7\x96\x17\x72\x9e\xb2\x7b\x78\xdc\x69\xb1\x05\x10\xfb\xdd\x1f\x75\x06\xa7\x96\xf0\x6b\x3c\x65\xa3\xd4\xe2\x2d\x9c\x62\xed\x94\xd5\x50\xaa\x9f\x17\x92\x00\xd0\x6a\xba\x85\xba\x34\xf3\x44\x5e\xef\x90\x6f\x1f\x3e\xb8\x3a\xf4\xba\xeb\x36\xc9\xe1\x8d\xc7\x20\x0b\x7b\x37\x6d\xa2\xaf\xf2\x9b\xa2\x4f\x6f\x71\x34\xe2\xed\x80\x3e\xe5\x79\x50\x6b\xb2\x10\x87\xe4\xe6\x64\x66\xe3\x9e\x59\x9f\x78\xb3\x9b\xe8\x9f\xf5\x65\xd1\xcb\x5f\x2d\xc0\xa7\x07\xf4\xf2\xc1\x4e\xca\x4e\x45\xd9\xb2\xb5\x17\x5e\xee\x90\x67\x6f\xdc\xdb\x7e\x9f\x7a\x77\x6e\xa2\xd3\xfd\x2a\xd8\x6c\xdf\xcf\x44\x31\xdb\x62\xdf\xcb\x9f\x6e\xba\xef\xe5\x0a\x8a\xbe\xbf\xce\xd1\x51\x80\xfd\xfb\x7e\x7b\x04\x08\x2b\x6e\x9d\x1c\xda\xb0\xb3\xb2\xac\x77\x62\xf4\xee\xc9\x4f\x8a\x0e\xbd\xa9\xc0\x1d\xea\xdf\xa1\x93\x41\x3b\x58\x8a\x62\xe0\xbc\xdc\x36\x99\xde\xb0\x57\xe6\x07\xde\x6d\xa3\x77\xcd\xfc\xae\xe8\xdf\xbb\x1d\x32\x33\xbc\x7f\xac\xdd\x3c\xb3\x60\xad\xf4\xc3\xe4\xff\x67\xed\xda\x5a\x2c\x49\xb6\xb2\x79\x1e\xce\x43\x8a\x88\xf5\xa8\x2f\xe3\x56\xcf\x11\x2f\x83\xc7\x73\x9b\x71\x7a\x2e\x75\xef\x9a\xbe\xed\xa9\x5d\x5d\xa3\x0f\x5e\xb2\xf6\x8e\xae\xca\xe9\x5d\x99\x35\xb9\x73\x77\x77\xcd\x83\x88\x8c\x32\x78\x43\x64\x50\x18\x44\x06\x11\x41\x98\x07\x11\x1c\x7c\x10\x06\x06\x04\x41\x10\x04\xc1\x27\x41\x10\x04\x41\x10\xfc\x01\x72\xd8\x91\xb9\x33\x32\x32\xe3\xf2\x7d\x91\xf9\xda\x1d\xdf\x57\x6b\xed\x8c\xb5\x62\xc5\x8a\x15\x2b\xbe\xe9\x97\xb2\x07\x9b\x1c\x12\xb2\xf6\xd0\x8c\xc4\x69\xb6\x10\x05\x2f\x71\x0f\x46\x49\xdc\x43\x33\x12\x6f\x5f\x6b\x55\x27\x4e\x90\xc4\x3d\x18\x25\x71\x0f\xad\x24\xfe\xcb\xa8\xe9\x2c\xe1\x91\xb8\x8e\xa8\x9e\xc5\x3f\x87\x8b\x5b\x9f\x25\xee\x05\xc8\xba\x3d\x16\xda\x0a\xfa\x37\x51\xd3\xa0\x15\x12\x54\x1e\xc4\xfc\x7a\xfc\x2d\x56\xd8\x0d\x6e\x72\x14\x2c\x70\x75\xd8\xb3\x15\xfa\xe3\x28\xfe\x9a\x47\xe8\xec\x49\x7a\xf9\x20\xb9\xd9\x79\x2f\xfe\x29\x40\xd4\x7a\xf4\xe4\x0e\x23\x60\x0d\xa2\xa6\x69\x8d\x39\xcc\x9e\x31\x86\xd5\x83\x71\xd3\xb4\x8b\x56\x12\x7f\x1e\xc5\xdf\xc0\x24\xbe\x27\x6e\x67\xf5\x03\x86\x3b\xbf\x11\xc5\xdf\xc6\x85\x6e\x21\x27\xc7\x01\x62\xb7\xf0\x4a\xf0\x4f\xd5\x33\x19\x1e\xc1\xe5\x84\x2d\xe2\x97\x71\x81\xe5\x54\x7d\x2b\x40\x52\x7d\x92\x02\x96\x55\xe3\xa6\x45\xfe\x5e\xf5\x66\x17\x68\x59\x3d\x1c\x67\x59\x3d\x38\x11\xba\x34\x68\x3e\x74\x31\x42\x99\xd0\xc5\x48\xc0\x79\x85\xea\xa9\x78\xd4\x2b\x54\xa3\x49\xaf\x50\xbf\x46\x8f\xc7\xdb\x0d\xe6\xe4\x5a\x36\x2e\x06\xe2\x6d\x1d\xc2\xc4\xdb\x3a\x92\x33\xa8\x0a\x38\xcd\x0b\xd8\xa0\x14\x82\x34\x28\x05\x0c\xf9\x21\xab\x3e\x0c\xd4\x0f\x29\x21\x41\x3f\xa4\x44\x72\x16\xd4\x02\x9e\xae\xb3\x6c\x13\x4e\xa3\x16\xd4\x87\x92\x16\xd4\x27\x50\xb2\x7f\x19\xc5\xdf\x26\x64\x3f\x93\x0f\xdc\x6c\xfe\xee\xce\x47\x51\xfc\x2a\x29\xbe\x42\x4f\xee\x85\x6a\xa0\x38\x82\x3f\xc0\xbb\x49\x5a\x06\x7e\x80\x1a\x1a\xfe\x01\x6a\x02\x2a\x6c\x6c\xe1\xe1\xb0\x51\xc3\x70\x61\xa3\x06\x25\x6c\xf1\x20\x11\xd7\x79\x76\x58\x57\x56\x40\xb6\xa8\x43\x18\x5b\xd4\x91\xc4\x54\x38\xc8\x9f\x67\xcf\x93\x62\xb1\x3b\x3d\x69\x2d\xc2\xd0\x54\x30\x42\x99\xa9\x60\x24\x08\x93\xbd\x5a\x0f\x37\x9b\x7a\x5a\x76\x05\x0d\x94\x5d\x11\x28\xd9\xbf\x88\xe2\x6f\x71\xb2\xd7\x71\xc4\x6f\x47\xf1\x2b\xbc\xf4\x75\x24\xf1\xf6\x00\xf9\xe9\xc0\xf8\xf0\xfa\xa6\xbc\x3d\x48\xf5\x5d\x32\x14\x18\x9b\x90\x4c\x60\x6c\xc2\x13\x1e\x64\x6b\x25\xdb\x17\xb9\x10\x0f\xd2\xc1\x30\x1e\xa4\x03\x25\xf2\x3a\x5b\xa4\x8c\x37\x90\xbc\x4e\x1b\xc0\xe4\x75\xda\x38\xc2\xc3\x6d\x61\xb3\xf5\xc5\x4a\x60\x1e\x4e\x87\x30\x1e\x4e\x47\x12\x31\xef\x16\xb8\x82\x62\xde\x66\x34\x13\xf3\x36\x20\x22\x9a\x6c\x30\xf0\xf6\x4c\x43\x30\xd1\xa4\x06\xa4\x44\x7c\x76\x54\xe4\xd7\xb5\x69\x63\x22\xb6\x10\x9c\x88\x2d\xa0\x12\xf1\x77\xa3\xf8\xc7\x7c\x22\x9e\x27\xc5\xce\x22\xfe\x3a\x22\xdb\x79\x52\x4c\x5e\xa5\x84\x3a\x4f\x0a\xca\x60\x37\x80\xfa\xf7\xc2\x0c\x56\x01\x38\x83\x55\x38\x25\xdf\x47\x51\x3c\x71\xcb\x27\xdb\xb3\x5f\xc4\x5f\xf3\x0b\xb6\x19\x39\x79\x85\x90\x48\x76\x75\x27\xac\x72\x33\x5e\x4e\x7d\xc8\x2a\xb7\xa3\x29\xab\xdc\x82\x94\x58\x9f\x44\xf1\x4f\xfa\xc5\xaa\x3f\x60\x16\xff\x0c\x26\x58\xfd\xfd\xde\x20\x45\xeb\x7e\xbe\x3f\x89\xe2\xaf\xbb\x85\x7b\x21\xe6\xbb\x55\x80\xb6\x8c\x7f\xda\x2f\x5b\x33\x7c\xf2\x3a\x21\x5a\x83\x22\x56\x82\xa3\x7d\x2d\x0a\x40\x56\x02\x1d\xc2\xac\x04\x3a\x52\x49\xf9\x57\x51\xfc\xb3\x6e\x29\x97\xe2\x85\x26\xe7\x8b\xf8\x1b\x7e\x39\x3b\xa0\xc9\x3e\x21\x69\x07\x4b\xa4\xc6\x8e\x96\xf9\xfc\x69\xe7\x08\x02\x49\x8d\x19\x70\x4c\x6a\xcc\x00\x57\x42\xff\x4b\x14\xff\x82\x53\xe8\xe3\xfd\xc3\xa9\x28\xaa\x07\xde\xcb\xde\xc9\xe4\x1f\x45\xf6\x17\x74\x1a\x01\x9c\x14\x93\x29\xae\x89\x93\x88\xf8\x10\xc7\x69\x79\x2a\x6e\x72\xfa\x43\x18\x70\xcc\x87\x30\xc0\x89\x9d\xd1\x71\xf5\xb4\xf9\x93\x15\x9f\xa3\x34\x42\x99\x9d\x91\x91\x80\x88\x3a\xee\x9e\x9d\x4d\x8f\x45\x59\x3b\x3a\x24\xea\xd0\x10\x4c\xd4\xa1\x01\x09\x47\xbc\xc1\xdd\x95\x4f\x9f\x41\x8e\x58\x0d\x67\x1c\xb1\x42\x11\x67\xd3\x77\xab\x1a\x4a\xe8\x6c\xba\x1e\xcb\x9c\x4d\xd7\x10\x62\x9d\xbf\x9b\xaf\xca\xdd\x65\x9a\x60\xd1\x77\x33\x9a\x59\xe7\x1b\x10\xb1\x79\xdd\x60\xa6\x49\x79\xc5\x6f\x5e\x4d\x48\x66\xf3\x6a\xc2\x2b\xc1\x3f\x8b\xe2\x97\x9d\x82\x9f\xcc\xf6\x67\x7a\xc6\xe0\x83\xf8\xe7\xbd\x42\xf7\x50\x93\x03\x5c\xe2\x1e\x98\xf8\xfc\xf7\xc4\xed\x59\xbe\x51\x17\xfa\xfc\xcd\x68\xe6\xf3\x37\x20\x42\xac\xfb\xe9\x13\x31\xbf\x9d\x2f\x05\x24\x56\x33\x9a\x11\xab\x01\x11\x7e\xe5\x7e\x7a\x9d\x96\xa7\x49\x76\x29\x20\xbf\xa2\x86\x33\x7e\x45\xa1\x88\x00\x4f\x81\x4e\x4a\x71\x0d\x05\x78\x3a\x84\x09\xf0\x74\x64\x90\x94\x72\x67\xc1\x49\x29\xb7\x17\x41\x52\xea\x7b\x0c\x42\x4a\x79\x89\x8b\x93\x52\x5e\xf8\x0e\x92\x52\xde\x0e\xc3\xe3\x9e\xfb\x79\xb2\xd8\x4b\x96\x49\x36\x17\xc5\x49\x76\x29\x33\x65\x48\xdc\x63\xc0\x31\x71\x8f\x01\x4e\x94\x17\xb4\xd1\xf5\xf9\x00\x52\x5e\xd0\x87\x31\xe5\x05\x7d\x34\xb1\x10\xdd\xcf\xe7\xc9\xb2\xea\x16\xa0\xea\x59\xa1\x85\xc8\x84\x64\x16\x22\x13\x9e\x58\x88\x24\x9c\x5e\x88\x7a\x28\x66\x21\xea\x81\x89\xa4\xef\xc3\x4e\x01\x1a\x92\xf4\xed\x60\x98\xa4\xef\x43\x5b\xe9\x99\x77\x69\x6a\x4a\x88\xa1\xa5\xa9\x19\xcd\x2c\x4d\xad\x2a\x65\x38\x2a\x6f\x30\x70\xba\x52\x43\x30\x51\xb9\x06\x0c\x11\x51\xba\x55\x4a\x44\xe9\x55\x43\x44\xd4\x9d\xaa\x7f\x16\x36\x38\xfc\xf0\xb2\x83\xa1\x66\xa1\x0e\x55\x82\xfe\x56\x14\xff\xa8\x5b\xd0\x7c\x21\x76\x7e\x2d\xfe\x09\xbf\x74\xf9\x42\x4c\xbe\x4b\x88\x94\x2f\x04\x91\x8f\xdb\x0c\xdf\x9e\xd3\x20\xf9\xb8\xd6\x78\x26\x1f\xd7\x82\x11\xe9\x5e\x89\xda\x96\xaf\x23\xe9\xde\x36\x80\x49\xf7\xb6\x71\x8c\x41\xe4\x8b\x56\x03\x12\xc8\x20\xda\x08\xca\x20\xda\x40\x22\xca\xd8\xe0\xf4\xb3\x6b\x2c\xca\x30\xe0\x98\x28\xc3\x00\x27\xae\x2c\x6c\xd0\xd2\x0d\x22\x57\x16\xb6\x83\x99\x2b\x0b\x5b\x0c\x39\x17\x9b\xf2\x44\x74\x2e\x36\x55\x89\xe4\x5c\xec\x57\x23\x7a\xcf\xbb\xdb\xb0\x53\xf1\xfe\x3a\x2d\xc4\xb5\xc8\x4a\xec\xbc\xdb\x02\x66\xce\xbb\x2d\x14\x44\xf6\xb8\xcd\x70\x26\x8a\x6b\x28\x7b\xdc\x05\x31\xd9\xe3\x2e\x96\x9c\xa1\x72\x15\x44\x67\xa8\x5c\x00\xc9\x19\xaa\xaf\x7d\xde\xcd\xad\x84\x54\xcb\x1e\xb2\xb9\x55\xc3\x99\xcd\xad\x42\x11\x1b\x32\x09\x92\xad\x1d\xe4\xeb\x4e\xc8\x86\x4c\x87\x30\x1b\x32\x1d\x49\xb8\xca\x2a\x54\x3f\x4a\xc5\x72\xd1\x18\x3a\xe2\x2a\x0d\x38\xc6\x55\x1a\xe0\x44\xc0\xd3\xdd\xd9\x20\x01\x4f\x77\x4f\x43\x04\x3c\xd6\xed\x8c\xd7\xba\xd5\x59\x41\x7d\xe9\x0b\xb1\xee\x2e\x88\xb1\xee\x2e\x96\xc8\xee\x77\xa1\xfb\xcb\x24\xbd\xc6\xb2\xfb\x46\x28\x93\xdd\x37\x12\x28\xd9\xff\x21\x8a\xbf\xc3\xcb\x2e\x17\xd3\xdf\x89\xec\x6f\x7b\xbb\xff\xbc\x5c\x5e\xef\x0f\xd4\x41\x5f\x6f\xc3\xf4\x90\x2e\x37\x5c\x0f\xe9\x84\x87\xea\xa1\x7b\xe5\x7f\x8a\xe2\x57\x02\xf4\xa8\xdc\xf4\x1f\x44\xf1\x9d\x40\x4d\x2a\xc7\xfd\x70\xa8\x2e\x1d\x4f\xfe\xef\x51\xfc\x06\xaf\x8d\xb6\xef\xff\x24\x8a\xf7\xc2\x74\xd2\x52\x01\x67\x03\x35\x0b\xac\xb9\xeb\x72\x49\xc3\x81\xb2\x45\x26\x24\x93\x2d\x32\xe1\x07\x08\x2e\x2d\x25\x48\x70\x69\x24\x03\x04\xd7\xed\xe3\xef\xa3\xf8\x9b\x9c\xe0\x95\x69\x7c\x18\xd9\x1b\x34\xda\xff\x74\x65\x15\x27\x03\x84\xef\x18\x84\xf7\xea\xf8\xf4\x2a\x2f\xf3\xcc\x71\x28\x0f\x5d\x1d\xf7\xb1\x30\x57\xc7\x7d\x5c\x4a\xb9\xdf\x8c\xe2\x97\xdc\xca\xe5\x8b\x9d\x5f\x89\x7f\xdc\x2f\x7e\xbe\x98\x7c\x87\x90\x30\x5f\x10\x19\x8a\x69\xbe\x68\x72\x00\x48\x86\xa2\x35\x9e\xc9\x50\xb4\x60\x44\xf8\xd5\x42\xc9\x2d\x0b\x12\x7e\x75\x30\x4c\xf8\xd5\x81\x92\x82\x66\x65\xda\xfc\x92\xa8\xa0\x2d\x0c\x2b\x68\x0b\x4a\xec\xb3\xa7\xf9\x42\xa5\x54\x90\x7d\x76\x1b\xc0\xec\xb3\xdb\x38\xa2\x00\x60\x9a\x2f\xe4\xa2\x80\x14\x00\xd4\x63\x99\x02\x80\x1a\x42\x1c\xc9\x4c\xf3\xc5\x4c\xcc\xd7\x45\x5a\xde\xee\xe7\x59\x29\x5e\x94\xd0\x91\x4c\x1f\xc6\x1c\xc9\xf4\xd1\xdc\x4f\x28\x97\x27\xf0\x27\x94\x0b\x12\xf7\x13\xea\x6b\x90\xf7\x48\x60\x83\xa8\x96\x1d\xe4\x48\xa0\x19\xcd\x1c\x09\x34\x20\xce\xf3\x9d\x89\xeb\x9b\x65\x52\x62\xb5\x92\xad\xf1\xa4\xe7\xdb\xc2\x38\x87\xb2\x45\x49\x7b\x00\x1d\x4a\x1b\x43\x3a\x94\x36\x34\x4c\x50\x39\xeb\x48\x41\xe5\xec\x0b\x13\x54\x9f\x85\xfe\x10\x2e\x2f\xca\xe7\x79\xf1\x82\x2f\x99\x31\x21\xa9\x10\xce\x80\x27\x52\x8f\xd3\x6d\x93\xca\xd9\xfc\x4a\x2c\xd6\xcb\x34\xbb\x94\x8b\x21\x94\x7a\xb4\x80\x99\xd4\xa3\x85\x82\xa8\xdb\x9e\x16\xf9\x85\x80\xea\xb6\xe5\x48\xa6\x6e\x5b\x02\x98\xdc\x43\x75\x51\x6b\xdb\xae\x86\xa9\x2c\x34\x42\xa9\xdc\x83\x89\x80\xc8\xa0\xbd\xb3\xce\x2f\x6e\x4b\x41\x97\x72\x1a\x70\x4c\x06\xcd\x00\x27\xfc\xc3\xe9\xde\x01\x7d\x70\xdd\xc1\x30\xfe\xa1\x03\x25\x66\xc6\xa9\xb8\x59\xd6\xbd\x39\xf7\xab\x06\x89\x4b\x51\x60\x33\xc3\x08\x65\x66\x86\x91\x40\xc9\xfe\xaf\x51\xfc\x1a\x2f\xbb\x8a\xf3\x3e\x8e\xe2\x37\xc3\x94\x50\xa1\xdf\x3b\x03\xb5\x31\x04\x83\xde\x24\x95\x91\x08\x4f\xb6\x59\xe1\x4c\x92\xca\x4a\x32\x54\x0f\x3c\xd9\x66\x85\x0f\xd6\x83\x4c\xb6\x99\x39\x88\x64\x9b\x83\x80\x49\xb6\x39\x68\x28\x83\xaf\xba\xce\xeb\x47\x12\xa0\xc1\x1b\xa0\x9c\xc1\x1b\x08\x88\xa3\xf1\x2d\xfe\x9d\x75\x5e\x26\xd0\xd1\xb8\x86\x60\x8e\xc6\x35\x20\x51\x60\xa5\xe1\xa4\xd1\x22\x05\x56\x3d\x14\x53\x60\xd5\x03\x87\x8a\x2b\x6d\x93\x16\x57\x9a\x64\xa8\xb8\x64\x79\xa3\x8e\xad\x4c\x10\x89\x05\x0c\x38\x26\x16\x30\xc0\x89\x10\x7c\x8b\x6e\x1d\x60\xaf\xb0\x10\xdc\x84\x64\x42\x70\x13\x9e\x38\x61\x9d\x1d\xde\x4f\xb3\xf5\x8b\x47\xb2\xe3\xed\x0a\x3a\x61\xd5\x21\xcc\x09\xab\x8e\x24\xe6\xc4\x6c\x9e\x2c\xc5\xc9\x23\x3a\x3e\x34\xe0\x98\x39\x61\x80\x13\x37\x60\x67\x62\x5e\x88\x12\xba\x01\x5b\x0d\x65\x6e\xc0\x56\x08\x22\x5a\xad\x00\xaa\xb9\x17\x12\xad\x76\x30\x4c\xb4\xda\x81\x12\xee\xaa\x42\xb6\x7b\x7a\x21\xee\xaa\x87\x62\xdc\x55\x0f\x4c\x14\x4f\x54\x58\xb9\x0a\x20\xc5\x13\x6a\x38\x53\x3c\xa1\x50\xc4\xc1\x79\x05\x6a\xf5\x0e\x41\x0e\xce\xbb\x20\xe6\xe0\xbc\x8b\x25\x72\x91\x15\x94\x6e\xeb\xd8\x87\x31\xb9\xc8\x3e\x9a\xb3\x27\x2d\x75\x0a\xda\x93\x96\x37\xe5\xec\x29\x30\x69\xba\x7d\xf9\x11\x49\x9a\xd6\x63\x99\xa4\x69\xf3\x56\x01\xbe\xe4\x54\x88\xdd\xf9\x3c\x5f\x83\xed\x77\x74\x08\xb5\xe4\x68\x48\x6a\x46\xb6\x81\xd2\xbe\xb1\x19\xd9\x85\x71\x33\xb2\x8b\x26\xb2\xbe\xed\xe7\xc8\x90\xac\x6f\x6b\x3c\x93\xf5\xd5\x9e\x38\x63\x85\x93\x0d\x53\x08\xe1\x64\xbf\x14\x5e\x38\xbd\x5d\x0a\x2a\x9c\x8c\x8d\x09\xe1\x64\x54\xcc\x0b\xa7\xc7\xc3\xde\x0d\x91\xde\xdd\x1e\xd9\x10\xe9\xaf\x3a\x12\x1b\x22\xbd\x67\x7e\x23\xe2\xbf\x45\xf1\x1d\xb7\x88\x65\x5e\x24\x97\xe2\xd1\xac\x77\x2a\x5e\xb9\xf2\x3f\x8e\xe2\xb7\xfc\x52\xbb\x49\x26\xa7\x84\x1e\x6e\x2a\x62\x27\xdd\x30\xf1\x49\x55\x23\x94\xd9\x49\x1b\x09\x88\x15\xea\x6c\x7f\x3a\xcb\xe7\x4f\x9b\x0b\xdb\xc8\x0a\xd5\xc1\x30\x2b\x54\x07\x4a\x24\xd1\xcf\x92\x14\x6c\x7e\x22\x47\x32\x49\x74\x09\x20\xa2\xb9\xb3\x7c\x29\xaa\x37\x0d\xa0\x68\x4e\x0d\x67\xa2\x39\x85\x22\x76\x13\x75\xf1\x23\xb2\x9b\xa8\x4b\x1e\x89\xdd\x44\xb7\xd0\xd1\xeb\x31\x2b\xc0\x03\xb9\x80\x23\x1e\xb3\x35\x9e\xf1\x98\x2d\x18\x11\xf8\x56\x28\x32\xf0\xed\x82\x98\xc0\xb7\x8b\x25\xf2\xdb\xe7\xab\x9b\x2b\x51\x88\xf3\xb4\x28\xd7\xc9\xb2\x57\x04\x04\xe5\xb7\xdd\x1c\x4c\x7e\xdb\xcd\x44\x9c\xec\xbd\x2b\xd2\xcb\xab\x52\x2c\xba\x65\x2e\xd0\xc9\x9e\x05\xcc\x9c\xec\x59\x28\xb4\xcc\xb6\xbd\x63\xca\x86\xeb\x66\xd5\xbc\x6a\xa2\x32\xb1\xa7\xe2\x59\x2a\xdf\xb9\x72\xea\xe1\x01\x23\x7a\x78\x28\xb4\xce\x2f\xf6\xc2\x4b\xaf\x1e\x32\x56\x74\xe6\xb7\x01\x02\x24\xbf\x0d\xd0\x68\x29\x02\xfb\xaa\xdc\xd1\xe9\x40\xdc\x2c\xf3\x5b\x79\x61\xc5\xb5\xbe\x59\x30\xc8\xfa\x66\x81\x2a\x71\xff\xd1\x65\xe3\x56\x71\xd5\x19\x96\xb3\x3f\xad\x0f\x8d\xf4\xa7\xf5\x71\x28\x55\xfe\xce\x75\xde\x63\x55\xc5\xdb\x77\xdf\x81\x43\xd2\x71\x0e\x78\x98\x41\x2b\x8e\xd3\x7c\xb9\xbc\x48\xe6\x4f\x09\x83\xee\x83\x69\x83\xee\x53\x0c\xfd\x04\x72\xeb\x12\xf0\x09\xaa\x57\xea\x83\xc5\xd7\xb7\x32\x5f\xb8\x4e\xd9\xec\xa2\x57\x1b\x1b\x67\x4c\xed\x84\x22\x31\xb5\x93\x60\xe8\x24\x9a\x6d\x1f\xd1\x0a\x99\x44\x5b\xf0\x80\x49\xb4\xa5\x08\x9b\x44\xdb\x29\x58\x75\xb0\xc7\x27\x91\x8e\xa3\x27\x91\x0e\xd7\x22\xa6\x37\x19\xd1\xd3\xec\xf2\xb1\x7c\xf0\xba\xb5\x12\xfc\x61\x14\xbf\x8e\x2b\x61\x60\x98\x3c\x0a\xd0\xc6\xc0\xa3\xd4\xfa\xdf\x48\x7b\x55\x0d\x57\x4b\x36\xe3\x7e\xb2\x5e\xce\x84\x9a\x67\x7f\x1e\xc5\x47\x01\xfa\x19\xa8\x26\xbf\x38\x44\x51\x03\xa1\x56\xb0\x6b\x0f\xd3\x3b\x1a\xcb\x83\x16\xe7\x8e\xab\x3f\x1c\xd9\x71\xf5\x51\xda\x36\xc2\x7e\xa6\x67\x92\xcf\xdb\x13\xc6\x0c\x41\xb2\x95\x66\xa4\x96\xad\xb4\x5f\x86\x30\xca\x5a\x39\x55\xd7\xc6\xc7\x06\x42\x36\x3e\x36\x6c\xa0\xc4\x6a\x1a\x11\x12\x2b\x10\x2f\xb1\xc2\x6a\x17\x4e\xbe\x1b\x20\xb1\xff\xa2\x8f\x0b\x89\x9c\xf4\xba\xf0\x83\xc5\xf7\x5f\xf7\x71\x21\x87\x88\xaf\xcf\xf0\x2f\xa3\xf8\xd5\x10\xf1\x81\x4b\x3f\x6e\x2c\x72\xe9\xc7\xcd\xa0\x5d\xfa\xd9\x0d\x50\x62\xeb\x4c\x6b\xef\xee\xdc\xf3\x63\x1c\xc8\x9e\x1f\x63\xc2\xa3\xbb\x75\x79\x25\xb2\xb2\x2e\x5e\xaa\xd2\x5c\x4f\x45\xb6\xd9\xe1\x89\xe7\x9e\xe8\xce\x05\x85\xa2\x3b\x17\x81\x56\x05\x66\xcf\x63\x7b\x34\xf0\xd7\xb4\x79\xe1\x48\x4d\x9b\x97\x04\xdf\xf9\x3b\x99\x80\xca\x36\x80\x00\xda\xf9\xfb\x69\x94\x4e\x7f\xeb\x7a\xe4\xc5\xa4\xd3\xe3\x95\x28\x64\x6b\x00\xd7\xd9\x9c\x1d\x86\x9c\xcd\xd9\xd1\x4a\xee\xff\x8c\xe2\x03\x8f\xdc\x79\x91\x7e\xd0\x30\xc8\x7e\x59\xb3\xb5\xbc\x13\xbf\x3b\x9f\x8b\xd5\xaa\xb6\x13\xe7\x25\x58\x98\x06\xb9\x04\x0b\x93\xe1\xee\xad\xcb\xf8\x30\xcf\xb6\xd5\x49\xbb\x65\x59\xa4\x17\xeb\x52\xac\x3c\xee\x0d\xe2\x80\xdc\x1b\xc4\x44\x99\x93\x46\x67\xd0\xcc\x6b\x4e\x1e\x02\xd4\x9c\x3c\x34\x4a\xa7\xff\x88\xe2\x7d\x46\xa7\x99\x58\x3e\x31\xcd\x4a\xe7\x55\x54\x94\x05\xb9\x8a\x8a\x72\x29\x15\xff\x27\x8a\x8f\x47\x50\x51\xba\xf7\x4f\xa3\xf8\x70\xb0\x9a\xd2\xd3\xbf\x3b\x9e\xaa\xba\xd3\xf7\xed\x8e\x7b\xa4\x86\xaf\xe9\xde\x1d\x03\x0c\xd0\xee\x18\xe0\x19\x30\x51\x2d\x5f\x90\x9c\xa8\x96\xaf\x17\x34\x51\x7d\x5f\xee\xbf\xa2\xf8\x70\xa8\x8a\xd5\xaa\xfd\xa7\x51\xbc\x3f\x4c\xc9\x6a\xf1\x7e\x3c\x92\x9a\x9d\x35\xdc\xaf\x68\xbe\x9a\x27\xcb\x34\xbb\xdc\x10\xee\x17\xf9\x6a\x75\x2e\x8a\x55\x9a\x67\xdd\x96\x34\x3e\x45\x41\x1e\x50\x51\x90\x8d\x59\x0e\xdb\x94\x77\x37\xbf\x63\x9e\x95\xc9\x72\x9a\x2f\x76\xeb\xff\x13\x85\x77\x39\x04\x38\xc0\xe5\x10\x60\x0a\xfd\x8a\x16\x3a\xb9\x37\x66\xbe\xa2\x83\x27\xe0\x2b\x3a\xd8\x46\x56\x54\x3a\x9f\x11\x14\x95\xee\x67\x34\x45\x75\x07\xe4\x5f\x29\x11\xca\xca\x05\xf9\x56\x4a\x98\x09\x5c\x29\x61\x3e\xad\x0c\xd1\x5e\xe0\xd7\x53\xb7\x4a\x40\xba\xba\x06\x98\x00\x48\xd7\x00\x13\x0e\x4f\x93\x19\xc0\x72\xae\x39\xd3\x64\x16\x10\x94\x26\xb3\x60\x99\x2d\x5a\x9f\xc0\xdf\xef\xd9\x0e\x03\xb7\x68\x16\xb4\x56\x60\x63\x2f\xfd\x59\xbd\x7c\x91\x94\xf3\xab\x0d\xf8\xed\xfc\xc2\xd9\x5e\xb5\x3d\x10\x69\xaf\xda\x1e\xaf\x15\x6f\xd9\x6f\x3c\xe8\xd2\x60\x7d\x42\x8d\x08\xa4\xf6\xcf\x08\xd4\x2a\xa6\xec\xd5\xbc\xba\xa0\xde\xc6\x9b\xdd\xc1\x48\x5b\xc3\x2e\x26\x48\x32\x6f\xc3\xc5\xee\x60\x56\x32\xdd\x44\x3c\x27\x1f\x1a\xd0\xdf\x76\xb1\x3f\x1c\x39\xf9\xe8\xa3\x94\x7c\xff\x17\xc5\x27\x0e\xf9\xe6\xa2\x28\xd3\x27\xe9\x86\xbe\x55\xb3\xa1\xfe\x71\x96\x5e\x66\x69\x76\x79\x2a\xde\x5f\x8b\x55\xb9\xf3\x17\x51\x7c\x6c\x2f\xe9\xa1\xb8\x26\xbf\x04\x54\xf8\x50\x8c\x4a\xe9\xdf\xff\x4a\x7c\x3a\x9a\xd2\xca\x26\x3f\x8f\xe2\xe9\x48\xda\x2b\xb3\xbd\x18\xfb\x67\x30\x18\xf6\xff\x47\xf1\x83\xd1\x7e\x0f\x69\xfa\x9f\x45\xf1\xbd\x91\x7e\x0a\xe9\x1d\x7e\x79\xec\x5f\x41\xf7\x1f\xa3\xfe\x00\xd2\xc3\x8c\xf8\x03\x48\x27\x34\xfa\x0f\xa0\xbb\xa9\x0f\xbf\x12\x3f\x1a\xef\x07\xa8\x1c\xd9\x5f\x47\xf1\x83\xb1\x7e\x82\xca\xd7\xfd\xea\xe8\x3f\x42\xc7\x1b\x7a\x0e\xce\xc4\x8b\x52\x64\x9b\x7d\x60\xab\xf2\x42\xf6\xa7\x9e\x09\xcf\xb9\x9f\x0b\x89\x1c\x9c\xb9\xf0\x70\xf5\x99\x8b\x44\x5a\xad\xb3\xfa\xcc\x87\x46\xaa\xcf\x7c\x1c\xa3\xa8\x22\xed\x2f\x58\x15\x69\x6d\x03\x55\xd1\x6d\xeb\x9f\x5d\xed\xff\x3c\xaa\x54\x96\xf4\x7b\x51\xfc\x5a\x98\x32\x95\xdd\x3c\x18\xa8\x0e\x97\xd5\x71\x51\x75\x8e\x37\x9d\xdb\x64\x9c\x07\xd9\x26\xe3\x6c\xf0\x31\xa7\x89\x52\x15\x1e\x39\x8f\x39\x9d\x50\xe4\x98\xd3\x49\x00\xe7\xa5\x9c\x2c\x60\x67\x15\x8c\x03\xc9\x4b\x61\x4c\xf0\x19\xae\x93\xce\xdf\x5f\xc5\x0b\x47\xce\x70\xbd\x24\xda\xcd\xaa\xb7\x42\xb5\x69\x4a\x57\x9d\xaf\x77\x42\x14\xc8\xeb\x9d\x10\xd1\x38\xdf\xc9\x7f\xd6\xee\x85\x0f\xfe\x4e\xd4\x59\xbb\x9b\x09\x38\x6b\x07\x08\x90\xc3\x41\x80\x66\x9c\xb9\xd7\x38\xf3\xf0\xb9\xd7\xf8\xf1\xa1\x73\xaf\xef\xc2\x3d\xa7\xf1\x06\xb6\xa3\xd9\x71\x91\xaf\x6f\xb6\x54\xdb\x6e\x18\xce\xd3\x78\x98\x06\x39\x8d\x87\xc9\x86\x84\x18\x77\xcf\xce\xa6\xf5\xcb\x6d\xf2\xe1\x47\x36\xc4\xe8\xe0\x03\x43\x8c\x0e\x8b\xd6\x43\x7c\x2f\x58\xa1\xd3\xf5\x52\x9c\x27\xcb\xb5\xe7\xb2\x29\x48\x82\x5c\x36\x05\xa9\x86\x84\xb7\xf2\x45\xd2\xbc\xa8\x1f\x9e\x64\xc3\x5b\x0d\x1d\x18\xde\x6a\x1c\x70\x12\xd8\x40\x74\x72\x50\x29\xe1\x4a\x02\xdb\x61\x48\x12\xd8\x8e\x1e\x24\x77\xfd\xc0\x22\x2b\x77\xfd\xbe\x62\xa0\xdc\xdd\xe7\x15\xf9\xd5\xb4\xa6\xd8\x4b\xe6\x4f\x45\xb6\xa0\x57\x53\x1d\x1e\xb8\x9a\xea\x24\x70\xad\xa7\x9d\x49\x06\x70\xce\x5a\x4f\x37\x16\xa9\xf5\x74\x33\x8c\xa0\xc4\xc6\x33\x84\x2a\xb1\xc1\x0e\x53\x62\xc3\x30\x82\x12\x32\x44\x0b\x54\x42\xc6\x67\x83\x94\xd0\x83\x33\xde\xaf\x6e\x69\xaa\xc8\x8c\xf5\xab\x1a\x3a\xd0\xaf\x6a\x1c\x43\x36\x9f\x35\xd1\xd9\xfd\x19\xbd\xf9\x54\xd0\xc0\xcd\xa7\x22\x18\xf2\x31\x1e\x8a\xf2\x79\x5e\x3c\x9d\xe6\xcb\x74\x7e\x4b\x7f\x0c\x0d\x1d\xf8\x31\x34\x0e\xa5\xca\x7f\x47\xf1\xd1\x00\x55\xda\xe6\xfe\x67\x51\x7c\x10\xac\x55\xdb\xf6\xcf\x87\x2b\x68\x74\x04\x9e\xba\x32\x1f\xa7\x74\xcc\xce\xba\x32\x84\x01\xa9\x2b\x43\x78\x46\x53\x6b\x2a\x44\x31\x4c\xad\x0d\xc3\x18\x6a\x6d\x78\xc6\x53\x2b\x2f\x06\x7e\x2d\xd9\x96\x67\x0c\xb5\xb4\x3e\x3d\x03\xd5\x92\x6b\xd2\x20\xb5\xe4\xca\x34\x82\x5a\x54\xcd\xa6\x81\xac\xf5\x48\x42\xed\x16\x59\xb5\x7a\x0c\x81\x6a\xf5\x78\xe0\x9a\x4d\x84\x4c\xba\x0d\x67\xcd\x26\xca\x82\xd4\x6c\xa2\x5c\xa3\xaa\xe8\x2f\x4b\x45\x59\xc6\x52\x91\xba\xb3\x6d\x20\xac\x5b\x14\xcf\x04\x9f\xee\x56\xd0\xc0\x88\x43\x11\x0c\x49\x77\x2b\x96\xf0\x74\xb7\x81\x23\x30\xdd\x6d\x60\x1a\xb2\xf1\x53\x74\x41\xe9\x6e\x1d\x1e\xb8\xf1\xd3\x49\xc6\xd1\x26\x28\x29\xac\xc3\x07\x6b\x33\x34\x29\xdc\x62\x0a\x4b\x0a\x77\x09\x02\x93\xc2\x5d\x9a\x41\x5f\x48\x6f\x1f\x40\x7f\x21\xbd\x8b\x40\xe0\x17\xb2\xf4\x12\xe0\x13\xc1\xfa\x3d\xfe\xe6\x9c\x9f\x4d\x04\x9b\x69\x02\x13\xc1\x66\xb2\x21\x47\xb3\xb6\xbe\x09\xec\xd1\xac\xad\x7b\x42\xd8\xd1\xac\xb7\x87\x02\xbf\x21\x3b\x5d\x67\xbb\xab\xc7\x2b\x51\x74\x33\xfb\xec\x86\xcc\x46\x14\xb8\x21\xb3\xd1\x0d\x99\xba\x75\x73\xed\xa1\x67\x18\x66\x9a\xc0\xa9\x6b\x26\x83\xcb\x9f\x4d\x8c\xb2\x50\xdb\x55\xfe\x6c\x03\x21\xe5\xcf\x36\xec\x90\x6a\x21\x55\xb4\xcd\x56\x0b\xa9\xca\xed\xb0\x6a\x21\x43\xf5\x36\x9f\xf0\x6b\x57\x70\xb3\x09\xbf\x76\x19\x77\x58\xc2\xcf\x58\xca\xed\x29\x5c\x33\xd1\xac\x6f\x6e\x96\xb2\x37\x7e\xb2\x94\xa7\x6a\xab\xae\x99\x38\x0b\xd7\x42\x18\x91\xc2\xb5\x10\x5e\xb8\xc9\x4f\x56\xed\x48\xeb\x9a\x78\x3d\xcb\xe6\x6a\xf2\xe3\xc0\x21\x4d\x7e\x1c\x70\x38\x66\x77\x70\xb4\xb3\x6a\xce\x98\x1d\xe3\x40\x62\x76\x8c\x09\x6e\x22\xe5\xa0\x93\x11\xbb\xb3\x89\x94\x07\x8c\x34\x91\xf2\x50\x8c\xa1\x87\xcc\x9b\x85\xea\x21\x53\x66\xc3\xf4\xd0\xb3\x65\x03\xf4\xc8\x8b\xf0\xef\x21\x73\x64\x03\xf5\xd0\xd2\x63\xe1\x7a\xc8\xd5\x27\x54\x0f\xb9\x00\x0d\xd3\x43\x5f\x83\x3c\xed\x1d\x6f\x24\xa4\x71\x88\x87\xcf\x52\x7f\xfb\x62\x0b\x06\x69\xef\x68\x81\xc2\x75\x16\x1d\xfc\x34\x5f\x1c\xa4\xab\x62\x2d\x9d\xf5\xde\x7a\x71\x29\x4a\x77\x9d\x85\x1f\x8f\xd4\x59\xf8\x59\x60\xe7\xeb\xa7\x92\x6e\xca\xe9\x7c\x31\x0e\xc4\xf9\x62\x4c\x23\x2a\x27\x6d\x65\xa0\x72\xd2\x64\x46\x51\x4e\xb7\x1c\x4f\x3e\x12\xa0\xab\xe2\x38\x67\x3e\x12\x65\x41\xf2\x91\x28\x17\xbc\x23\x28\x2e\x92\x79\x43\xb7\xbf\x5c\xaf\x4a\x51\x9c\xe6\x9e\x1d\x81\x0d\x84\xec\x08\x6c\x58\xd8\x2d\xdb\x08\xf6\xd2\x6c\x91\x66\x97\x6e\xb7\xec\x01\x23\x6e\xd9\x43\x01\xa7\xb3\x3c\x3c\xfe\x4e\xc2\x00\x01\x92\xce\x02\x68\xe0\xdd\x9a\x8d\xcb\xdf\xd3\xcd\x85\x44\x76\x6b\x2e\x3c\xbc\x52\x6a\x24\xd5\x4a\x2b\xe3\x62\xd7\x4a\x69\xc1\x20\x2b\xa5\x05\xaa\x75\x8d\xb7\xbf\x48\xd0\x11\x57\x1a\xad\xeb\xd1\xec\xde\x68\xe4\xd1\xec\x1e\x28\xcc\xb1\xb4\xed\x13\x76\x2c\x6d\xbb\x64\x1d\x8b\xd1\x20\x99\xc9\xdb\xb5\x44\x7c\xf2\x76\x4d\x90\x9d\xbc\x56\xdb\xf3\x5c\x71\xee\x91\x48\xb9\x5d\x57\x9c\x8d\x08\xe4\x8a\xb3\x11\x08\x77\x0a\xe8\xa1\x4f\xc5\x13\x67\xa7\x00\x13\x00\xe9\x14\x60\xc2\x85\x49\x59\x77\x69\xc1\xa5\xac\x01\xb4\x94\x35\x0e\xf6\x58\xab\xea\x49\x93\xd6\xeb\x26\xfb\xcb\x64\xb5\x72\x7a\x2c\x0b\x06\xf1\x58\x16\x28\x9c\x42\xb1\xe0\xbd\xfd\xce\x1d\x38\x24\x85\xe2\x80\xc3\xde\x41\x71\xd4\x5f\xaa\xfd\x73\x3b\xbd\x83\x0b\x89\x78\x07\x17\x1e\xae\x13\x73\x91\xf8\xaf\x2d\xfa\xd0\x48\x9d\x98\x8f\xa3\x51\xe5\xe2\x87\xe2\x1f\x8c\xbf\x7f\x4f\x24\x85\x28\x64\x6b\xc3\x9d\xef\x7b\xef\x51\xfc\x40\xff\xa7\x37\x76\xee\xc4\x5f\x4d\x6e\xd2\x7b\xe2\x76\xe7\x07\xb4\xae\x4a\x3f\xfc\xd5\x2b\x91\x2c\x44\x31\xf9\x91\x6a\xfc\x4b\x12\xf0\x92\xde\x75\xf0\x7b\x01\x00\x00\xff\xff\xa1\x4a\x99\xee\x9f\x23\x27\x00") +var _openapiPb = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x78\x1c\xc7\x75\xe0\xfb\xcd\x00\x14\xa9\x92\x6c\xd1\x65\x3b\x8e\x46\xa2\x54\x1c\x90\x02\x39\x04\x7a\x38\x20\xc5\x07\x20\x8a\xc4\x00\xa0\x08\x10\x22\x61\x80\xa6\x62\xc7\x31\xdd\xd3\x5d\x18\xb4\xd8\xd3\xdd\xee\xee\x01\x04\xed\x3a\x0f\x29\x76\x9c\x87\xef\x3a\xf6\xf5\x23\x4e\xec\x68\xaf\xb3\x5a\x2b\xab\xf8\x15\x6f\xb2\x59\xdf\x6c\xbc\xc9\xb5\xa3\xb5\x12\xad\xbd\x71\xa2\x24\xbe\xf1\xae\xaf\x7d\xf3\x70\xe2\xac\x63\xfb\xfb\x92\xf8\x26\xeb\xfb\xd5\xa3\xbb\x6b\x5e\x98\xc1\x70\xf0\x20\x79\xfe\xa1\xa0\xe9\xee\xea\xea\x7a\x9c\x3a\xe7\x57\xa7\xce\x41\x7d\x23\xda\x61\xfc\x0a\x84\xce\x57\x4b\xd4\x77\x68\x48\x03\x7c\xcb\xf2\x61\xed\xb0\x76\xb8\xf8\xad\x77\xff\x74\x0a\xff\xec\x1e\x34\x93\xd7\x3d\x2b\x60\xff\xd0\xc7\x42\xea\x04\x96\xeb\x04\xda\xd5\x13\x81\x66\xb9\xf9\xe5\x42\x89\x86\x7a\x21\x6f\x54\x83\xd0\xad\xf8\x34\x70\xab\xbe\x41\x4d\xba\x68\x39\x56\xc8\x6e\xcc\xff\x0b\x47\xaf\xd0\x37\xe7\x83\x50\x0f\xab\x01\xfe\xed\xbb\xf1\x13\xfd\xe8\x95\x35\x65\x5d\x91\x85\x64\xee\xf7\xa9\x6e\x12\x71\x27\x71\x17\x49\xb8\x44\x49\xe0\x51\xc3\x5a\xb4\xa8\x49\x26\xf8\x2b\xe6\xe5\x2b\x26\xe3\x57\xe4\x8e\xb1\xc7\xc6\xd5\x12\x2f\x8b\x02\x5b\x3d\xb1\xc0\xdf\x30\xb2\x5b\xf7\x3c\xdb\x32\x74\xf6\x53\xfe\xd1\xc0\x75\x6a\x7f\x59\xd5\x2b\xf6\xc8\x80\xfa\xcb\xb2\x63\x6a\x57\xe3\x76\xd2\x3c\xdf\x0d\xdd\x52\x75\x71\xb4\x2f\x97\xcf\xcd\xbc\x33\x85\x56\x50\xdf\xc8\xe1\xc3\xd8\x43\x0e\x4a\x5f\x3c\x8f\x97\xd0\x22\x32\x07\xf2\x6a\x63\x58\x2e\x6f\xb8\x9a\xcf\x1f\x66\xad\x4b\xfd\x65\xea\x6b\xde\xd5\x32\xbb\x56\x77\x83\x26\xdb\x47\x6b\xf5\x3d\xe8\x55\xa8\xef\xe8\xe1\x02\xde\x8d\x5e\x8a\x6e\x7f\x8d\xa3\x57\xc3\x25\xd7\xb7\x1e\xa7\xe6\xfc\x8e\xa5\x30\xf4\x82\x47\xf7\xa0\x97\x3f\x36\x9c\xd4\x7c\x58\x37\xd8\x63\xf8\x16\xdc\x5f\xa6\x21\x7a\xf4\x4d\xe8\xde\x9a\xcb\x65\xdf\xad\x7a\xc3\xcb\xd4\x67\xaf\x1f\xbe\x6a\x39\x26\xbe\x80\x67\xf9\xaf\xa3\xa4\xd9\x30\x40\xec\x9e\xd1\x96\x3d\x84\x64\x51\xa3\x44\x7e\x09\xca\xfc\x9f\xa8\xd5\x20\x38\xe1\x53\xcf\xd6\x0d\xba\xfe\x71\x70\x52\x3e\xb9\xd5\x43\xa1\xf8\x38\x7a\x0c\x2d\xe3\xfe\x92\x6b\xae\x66\xf8\xbf\x24\x95\xdb\xa4\xa1\x50\xfc\x60\x1a\xfd\x7c\x1a\xbf\x2f\x9d\x79\x77\x1a\xef\x78\x53\x95\xfa\xab\x99\x7f\x48\x3d\xb2\x44\x1d\xe2\xf9\x34\xa0\x4e\x38\x44\x2c\xc7\x64\x9f\x41\x03\x12\x2e\xe9\x21\xa9\xb8\xa6\xb5\x28\xbf\x2b\x20\xc1\x92\x5b\xb5\x4d\xe2\xb8\x21\x29\x51\xe2\xb1\x8e\x0b\x42\x6a\x6a\x64\xdc\x21\x96\xb3\xac\xdb\x96\x49\x5c\x9f\x54\x1d\x9f\x1a\x6e\xd9\x61\xa3\x8c\x98\xfe\xea\x7c\xd5\x21\xa6\xe5\x53\x23\xb4\x96\x29\x59\xb1\x6c\x9b\xf8\x34\xa8\xda\x21\xb1\x1c\xa2\x3b\x84\xfa\xbe\xeb\xb3\x9f\x3c\xd7\x09\x28\xd1\x1d\xf6\x0a\xb2\x58\xf5\xc3\x25\xea\x13\xcf\x77\x0d\x1a\x04\x96\x53\x8e\xba\xdb\xa7\x6f\xaa\xd2\x20\xd4\xc8\x65\xfe\xc6\x65\xdd\xae\xd2\x80\xe8\x3e\x1d\x25\xc3\x64\xdc\xb6\x47\x89\x6e\xdb\xec\xc5\xc4\xaf\x3a\x6c\xa8\x94\x69\x20\x5e\xcb\x6a\x2d\x8a\xa3\x66\xf6\x16\x51\xb5\x91\x5b\x82\xd0\xb7\x9c\xf2\x53\xa9\x54\xf1\x3d\x69\xf4\xae\x34\x7e\x47\x3a\xf3\xf6\xb8\x81\xbe\x9e\x5a\xb4\xa8\x6d\x3e\xac\x3b\x7a\x99\xfa\xc4\x0a\x88\x4e\x98\xd4\x22\x7a\x10\xb8\x86\xa5\x87\xd4\x24\x2b\x56\xb8\xc4\x6b\xa6\x1b\xa1\xeb\xb3\x26\xa0\x4e\x68\x85\xab\xa2\x0d\xad\x80\x54\xf4\xab\xac\xfe\xe1\x12\x0d\x28\x31\x96\x74\xa7\x4c\x03\x8d\x5c\x5a\xa2\xa2\xf2\xa4\x52\x0d\x78\x93\xda\x34\xe0\x0d\xef\xb0\x32\x0a\x23\x27\xd8\xbd\xbe\x6e\x84\xd4\x0f\x88\xed\x3a\xe5\x21\xde\x38\xae\x63\xaf\x12\xc3\x75\x42\xdd\x62\x3d\x67\x39\xa1\x5e\xb2\xa9\x72\xef\x10\xd1\x03\xc2\xc7\x13\x35\x49\x69\x95\xf0\x89\x3e\x9a\xcf\x97\x5d\x5b\x77\xca\x9a\xeb\x97\xf3\xde\xd5\x72\xbe\xea\x58\x86\x6b\xd2\xfc\xc0\x74\x30\xc7\x4a\xd1\xb2\xb7\xab\xdf\xaa\x34\xcc\xcc\x3b\xd2\x5b\x27\xc0\xfe\x25\x7b\x71\x01\x57\x51\x80\x76\x4e\xf8\x94\xb5\xf8\x75\x21\x3e\xbd\x6a\xc7\xe2\xb3\x41\x06\x5e\x83\x3c\x2d\x7e\xf5\xf6\x56\xe2\x73\xdc\xd3\xfd\xd0\xd2\x6d\x7b\x95\x54\x3d\x53\x0f\xbb\x90\xa3\xc7\x3d\x3d\x34\x96\xb6\x52\x8a\xde\x55\x5f\xd0\x30\xaf\xd2\x21\xf6\xe7\xe8\xdd\xea\xc5\x0a\xf5\xcb\x54\xbd\x7a\x9f\x7a\x35\x08\x7d\x3d\xa4\x65\xcb\x18\xae\xbf\xaf\x78\x01\xcd\xa2\x99\x3a\x19\x3d\x8a\x4e\xb4\x1a\x6f\x15\xdd\x58\xb2\x1c\xea\xaf\x26\x83\xac\x42\x43\x5d\x5b\x2e\x68\x73\xac\x50\x90\xbb\xed\xe4\xee\x47\xfb\xd0\xb3\x7d\xf8\x99\xbe\xcc\xd3\x7d\x51\x03\x3d\xd9\x77\xf3\xc8\x5d\x72\x69\xc9\x0a\x08\xff\x5e\x56\x6b\xd6\xce\x96\x4f\x4d\xb2\xe8\xfa\x84\x0d\xd9\xd5\xa8\xe9\x03\x72\x40\x1d\xc2\xfc\x9a\x18\xb8\x07\x49\xa9\x1a\x12\xd7\x63\xbf\xeb\x36\x7f\xd2\x71\x9d\x61\xf1\x34\xbf\x83\x84\xab\x1e\x0d\xc8\x81\x99\xc0\x75\xf8\xb0\x1c\x22\x0f\xb3\x81\x2f\xff\x5e\x88\xa6\x43\xf2\xe3\xc1\xd6\x0b\x42\xf1\x85\x14\x7a\x3e\x85\x9f\x4b\x65\x3e\x93\x8a\x7a\xec\xc3\xa9\xb3\xae\x6f\x50\xf6\x05\x65\x97\x37\xbb\x4b\xb2\x8b\xec\xa7\x2c\x19\xaf\xf9\x0a\x8d\x4c\x87\xa4\x42\x75\x27\x20\xd5\x80\xfa\xd1\xd0\x1c\xd6\x0d\xfe\xe1\xac\x8d\x17\x6d\xcb\x08\x59\x21\xbc\x02\x01\x71\x57\x64\x9b\xba\x62\x70\x52\xd7\xb3\xa9\x46\xc4\x1b\x17\x6d\xbd\x1c\xf7\x65\xd5\x09\x68\xd8\xb4\x01\xe2\xd7\x67\x77\xf0\x6a\x8d\xec\x2c\xb9\xae\x4d\x75\x87\xad\x70\xdb\x59\x45\xbf\xb7\xf9\x1a\xb3\x0b\xdf\xc2\x3f\x6c\x2b\x94\xf4\x99\x29\x34\x81\xc7\xb3\xa7\x77\xa5\x70\xbf\xa7\x87\x4b\x99\x7d\x7c\x72\x4a\x49\xd1\xaa\x9c\x6c\x3f\xbb\x2b\x27\xc7\xd1\xfb\x52\xa9\x99\x8b\xe8\x61\x7c\x3e\x33\x1d\x8d\xa1\xe1\xe9\x45\x32\x18\xfa\x55\x3a\x38\xc4\x0a\x72\x78\x69\x6e\x35\xf4\xaa\x7c\x3e\x7b\x3e\x0d\xc3\x55\x31\xf7\xa8\xa9\x65\x6f\x11\x3f\x28\x03\x13\xff\xd5\x3e\x34\x15\xd9\xa4\x5e\x90\x5f\x2e\xe4\x57\x58\x1b\xe5\xd9\x8b\x03\x4f\x37\xa8\xb4\x3a\xf9\xdf\x6f\xce\xb3\xe9\xec\xbb\xb6\x4d\x7d\x9f\x2e\x5b\x81\x62\x95\xe2\x5f\xdc\x87\xbf\xdb\x8f\x76\xb2\x62\xae\x2c\x17\x32\xbf\x91\xe2\x05\x45\x62\x84\x8d\x6e\x26\x2f\x4a\x8f\x52\x23\x64\xdf\xcd\x5a\x90\x4c\xc4\xc5\xcd\xcb\xe2\x34\x62\x52\xcf\xa7\x4c\xb6\x9b\xa3\x6c\xb8\xf3\x4f\x1a\xe4\x65\x0d\x12\x4f\xf7\xf5\x0a\x0d\xf9\x1c\x08\x97\x88\x4e\x6c\x2b\x60\xd3\x98\xfa\x7c\x86\x13\xcb\x09\x42\xaa\x9b\x43\x64\xd1\xb2\x43\xca\x64\x02\x7b\x2d\x61\x52\xd9\xa6\xc4\x0a\x69\x25\x11\x82\x83\x7c\xaa\x2c\x50\x9b\x32\x69\xa8\x94\xad\xe5\xc4\xeb\xc6\x3d\x2f\xb8\x5c\xb8\x10\x7d\xbc\xd9\x58\xd9\x9e\xad\xd2\x23\x7b\xea\x0b\x1a\x0b\x42\x9f\xea\x95\x53\xbc\x26\x23\x87\x3b\x28\xa3\xe6\x09\x61\x47\x5f\x45\x73\x62\x8e\x4e\xa3\x87\xf8\x1c\x1d\x47\xa7\xd1\xa9\x2e\xd6\xe5\x47\x58\x99\x53\xcb\xd4\x09\xaf\x61\xf2\xad\x88\xc9\x77\xb9\xfd\xe4\x3b\x82\x0b\xf1\xe4\xf3\x82\x68\xb2\x35\x34\xbf\x3a\xcd\xd0\xcc\xff\xbc\x15\xfd\xcd\xad\xf8\xaf\x6e\xcd\xfc\xf9\xad\xd1\xf4\xf8\xdd\x5b\xd9\xda\xc5\xc6\xac\xe5\x54\xa9\x14\xf7\x91\x7a\x50\xa2\x84\x49\xbe\x15\x36\x6d\x7c\x1a\xfa\x16\x5d\x66\x02\xb4\xe2\xfa\x54\xae\xfb\x01\x59\xf4\xdd\x8a\x50\xf5\x84\xc4\x22\x0b\x96\x63\xb0\x21\x69\x05\x72\x49\xb4\x02\x79\x2d\x5a\xc8\x86\x88\x61\x5b\xd4\x09\xd9\x6a\xba\x2a\xd6\xc0\x68\x14\xc7\x15\x11\x8f\xf2\xc2\x75\x36\x49\x97\x2d\xb7\x1a\x10\x5e\xe7\x48\xe5\xe0\xc3\xd4\x32\xd9\x02\x6d\xe8\xb6\xbc\x16\x0f\xd1\x80\x1c\xa0\x8f\x19\xd4\x13\x82\x3b\x8c\x17\x68\x77\x31\x7e\xc9\x41\xbe\x06\x27\x75\xe7\xd5\xf1\x29\x9f\x7e\x7a\x7d\x55\xac\x90\x98\x2e\x0d\xb8\xca\x14\x2b\x45\x1a\x99\xae\xd7\x73\xeb\x1f\x63\x4f\xf0\x15\x9f\xfa\x44\xe8\x55\x2b\x4b\x94\xaf\x38\x66\x95\xb2\xb9\x47\x1f\xf3\x2c\x39\x37\x0f\x94\xa9\x43\x7d\xae\x4d\x2f\x32\x05\x2b\x74\xc9\xa2\xb5\x18\x52\xea\x90\x8a\xe5\x54\x43\x1a\x1c\x64\xea\x04\xaf\xdb\xa2\x55\xae\xca\xc7\x84\xfc\x20\xae\xa3\x7c\xcb\x90\xfa\x5d\x91\xa2\xe6\xb9\x8e\x19\x89\x85\xa3\x85\xc3\x24\x12\xa7\x53\xac\x0a\xd4\x94\xea\x5b\xe8\x96\x45\x05\xe5\x9d\xf1\x17\x85\xee\x55\xea\xc4\x9f\x2c\xfa\x90\x38\x94\x9a\x81\xb8\x8b\xeb\x90\x4e\xc8\x25\xce\x10\x6b\x30\xbe\x80\xfa\x34\x08\x75\x3f\x64\xcf\x58\xbe\x90\x46\xac\x60\xb7\x1a\xd6\xf6\x38\x97\x35\x1a\xb9\xc8\x5e\xbd\x62\x05\x74\x48\x7d\x0b\xeb\x99\x80\x3a\x26\xd1\x1d\xb1\x5c\xf3\x72\xe4\xf2\x9b\x08\x2c\x5e\x43\xd6\x3d\xd4\x5a\x56\xb5\x39\xf6\xb1\xfc\xe3\xda\x36\x0b\x2f\x97\x57\x98\xab\x0a\xd1\xe0\x76\xe8\x63\x21\xb9\x4a\x57\x87\xb8\x52\x14\xff\x6c\x33\xfd\x3a\x24\x81\xa3\x7b\xc1\x92\x1b\x0e\x91\x95\x25\xcb\x58\x62\x9d\x6e\x39\x4a\x83\xc4\xf7\xc7\x03\x59\x56\x5f\x4c\xa1\x61\x29\xf3\xa5\xa6\xae\x33\x7d\x45\x58\xa5\x43\x52\x6d\x67\x7f\xb9\x6c\xfe\xd8\x94\x69\xa9\xfa\x22\x93\xef\xac\xc0\x45\xcb\x0f\xc2\xfa\xc6\x10\xea\xb1\xe5\x18\x76\xd5\xa4\x26\x53\xcd\x85\xae\x2d\xb4\x72\xae\x52\xb2\x01\xc9\xfe\x2b\x3a\xe5\x2a\x5d\xe5\x5a\xb7\x52\x70\x36\xfa\xe2\xac\x86\x50\xad\x32\xc9\x66\x40\x50\xf5\x3c\xd7\xe7\x1a\x33\x13\x0e\x62\x1d\xb3\x02\xc2\x16\x5a\x8d\x4c\x28\xd3\x5b\x74\xbe\x2e\x6f\x51\x5a\x4e\x34\x00\x1f\x7f\x97\x85\x90\x92\x53\xc6\xa7\x61\xd5\x97\xba\x99\xd2\x5b\xc2\x98\x08\x49\xc5\x0a\x02\xa2\x3b\xab\xb5\x16\x8d\x96\xdd\x15\x8d\x24\x95\x32\xfc\x44\x0a\xfd\x78\x0a\xff\x58\x2a\xf3\x23\x91\xc0\x7b\xfd\x38\x09\xe4\x82\xc6\xe6\x17\x1b\x9d\xbe\x65\x88\xb1\x28\x96\xca\xc5\xa4\x06\x51\xbf\x88\x9a\x58\xbe\xd4\x1d\x35\x32\x49\x17\x75\xde\x77\x6c\x02\x2f\x53\x7f\x35\x5c\xb2\x9c\xb2\x96\x7d\x49\xcd\x8a\xb9\x91\x35\xb1\xf5\x12\xb5\xd7\xaa\x09\xbf\xa1\x59\x4d\xbe\x8b\xd0\xdf\x23\xfc\x1d\x94\xf9\x3b\x14\x55\xe5\x8b\xc8\xb6\x2a\x56\x28\x6c\xa2\x8a\xfe\x98\x55\xa9\x56\x88\x53\xad\x94\xa8\x2f\x6a\x21\x86\x4e\x20\xea\xc9\xaa\x24\x2c\x09\x51\x4f\x43\xb7\x6d\x2e\x16\xf8\xc2\xc0\x54\x88\x80\xd0\xc7\xb8\x10\xa8\x9f\x6d\x6c\x39\x61\xbf\xbd\x31\xea\xac\x37\xca\x71\x25\x85\x17\x2f\x8f\x2d\xa9\xa6\x1e\xea\x42\x33\x11\x83\x82\xcf\x0c\x43\x77\xb8\x3e\x1e\xa8\x73\x3b\x60\x5a\x22\x5f\xab\xe3\x45\x40\xd4\x92\x2d\x57\x34\x99\xbd\xec\xd5\xe2\x5b\x58\x73\x69\x64\x81\x86\x7c\x8e\xb3\x8f\x60\xdf\x2e\x84\xbf\xf8\x36\xba\xc2\xa7\x81\xee\xa8\x56\x2a\x9b\x78\x15\xb7\xea\xf0\x62\xc4\x57\x1e\xa8\x7a\xec\x65\x8f\x53\xdf\x15\xbf\x1c\x8c\x66\x1b\x65\x9a\x00\xb7\x5e\x93\xa7\xa3\x3e\x64\x33\x2d\xd6\xbe\x98\x1c\x64\x43\x3b\x5a\x12\xe5\xd2\x5b\xb3\x2a\x0a\x9b\xde\x88\x95\xe1\x5a\x99\xc9\x6a\x60\xb2\x25\xaf\x62\x39\x34\x5e\x5d\x6a\x16\x69\x3e\xb7\x97\x75\xcb\x66\xe6\x25\xfb\x74\xd6\x23\x62\x7e\x1a\x4b\xae\x1b\x50\x3e\xb3\x42\x37\x9a\xd7\xb2\x2f\x58\xb3\xe8\x7e\xb9\x5a\xe1\xdf\xc2\x85\x24\xff\x20\xde\x48\xec\xdb\x64\x7d\xe2\xa2\x93\xd6\x9d\x5e\x24\xf1\x90\x4a\x16\xc7\x68\xbd\xad\xfb\x00\x2b\x20\xb4\xe2\x85\xab\xb5\x8a\x81\x1e\x04\xd5\x8a\xec\x79\xc7\x5d\xf3\x83\xd6\x12\x50\xd6\x62\x9d\x78\x62\xf2\x2c\x1e\x95\xe5\xaa\xee\xeb\x4e\x48\x23\x4c\xc2\xad\x03\xd9\x4f\xf1\xe4\xe3\x32\xae\xca\xc1\x45\x5c\xf3\x58\xcc\xc6\x0a\x48\xe8\x12\x2b\x08\xaa\x62\x4c\x49\x7d\x3a\x9e\x1f\xf1\x9a\x17\x0d\xb7\xe1\x08\x29\x0c\xb1\x8f\x8b\x5e\xb9\x3e\xb9\x1f\x89\x7c\xb6\xde\x04\x41\x95\x9a\x4d\x85\x3f\x93\x95\x41\xb5\x14\xb0\x9b\x9d\x30\xfe\x02\x53\x31\x9e\x79\xfb\xb1\x9e\x72\x2b\x34\xb4\x2a\x94\x7d\xfb\x22\x33\x60\x84\x75\x50\xb7\xbe\x27\xcb\x1d\xeb\x4f\xea\x04\x55\x3f\x6a\x3e\x3d\x5a\xb0\x23\x5e\x22\x5a\x4d\x7c\x32\x9f\x96\x7c\x69\x26\x41\x45\x67\x6a\x2a\x31\x96\xaa\xce\x55\x4e\x0b\x75\xc2\x84\x17\xb1\x75\xbf\x1c\x75\x33\x9f\xef\xa2\x78\xf6\xd1\x4c\x03\xa0\x7c\xd8\x79\x6e\x10\x58\x6c\xb8\xc9\x66\xe3\xc3\x4d\x9d\x5d\x82\x45\x9a\xc4\xac\xfa\xa2\x3b\xf8\x7b\xa8\x29\xfa\x83\x2b\x83\x72\xc9\x91\x23\x58\x1a\x5d\xbc\xd6\x2b\x7a\x10\x51\x34\x22\x47\x04\x6b\x93\xc6\xf5\x56\x68\xa1\x7a\xc0\x3a\xd8\xa8\xda\xfc\x8d\x56\x32\x6c\xb4\xec\x0e\xfe\xdd\x23\x3b\x99\x6d\x59\xa6\x3e\x13\xbe\xa7\xd1\x29\x3c\x96\x3d\x19\x1b\xb9\xf7\xd4\x18\xb9\x0d\xfa\x7b\xa3\x79\xfb\x46\xf4\x06\xfc\xfa\xec\xeb\xe2\x02\x46\x65\xd5\x05\xc9\x62\x1a\x52\x35\x5c\x22\x81\xe1\x7a\x74\x88\x04\x55\x63\x89\x75\x1f\x57\x81\xa9\x5e\x09\xf8\x1d\x9e\xef\xf2\xa6\xca\xde\x1a\x9b\xad\x1b\x69\x40\xcf\xfc\x41\x1f\xfa\x7c\x1f\xfe\xfd\xbe\xcc\xe7\x62\x16\xf7\x4b\x7d\x1c\x56\x26\x92\x41\xaa\x5f\xd2\x20\xd6\x6d\x7b\x88\x49\xc2\x95\x20\x31\x8e\x59\xd7\xb8\x86\x51\xf5\xe3\x69\xa0\x87\x84\xe3\x67\xd6\xf6\xbe\xda\xa3\x7a\xac\x59\xd4\xae\x8f\x51\x59\xb1\x16\x52\xa2\x65\xcb\x71\x24\x90\x5c\xb2\x82\xd0\xf5\x57\x35\x52\x57\x35\xd6\x78\xac\xc7\x47\xc9\x30\x13\x26\x9c\x06\x29\x4d\x11\x01\x50\x45\x5e\xf0\xf2\x7d\x5a\x71\x39\x0f\x77\x7d\xbd\x4c\x49\x49\x67\xab\x96\xeb\x90\x37\x55\x5d\xbf\x5a\x19\xe6\x9b\xcf\x8b\xb6\x5e\x1e\x13\xc5\x5a\xe1\x60\x40\x0e\xcb\x72\x57\x28\x09\xac\x8a\x00\x5c\x5c\xd8\xae\xf0\x81\x49\x89\x51\xf5\x7d\xea\x84\xf6\x2a\x59\xd2\x97\xd9\x34\x27\x86\x6e\x2c\x51\x2e\x43\x62\x51\x26\x4b\xe4\x6b\xad\x4b\x1c\xd7\xe1\x0b\x54\xd3\x2a\xeb\x21\xb1\x29\x53\xc5\xd8\x20\xf1\x69\xc0\x47\x4b\xd9\x5a\x66\x5a\xf4\xb2\x96\xbd\xa3\x4e\x43\x53\x7b\xf5\x83\x29\xf4\xf3\x29\xfc\xbe\x54\xe6\xdd\x31\xaf\xf3\x2e\x59\x15\xca\x84\x5c\x64\x72\xb1\x66\xcb\x27\x7d\x2a\x05\x0d\x9f\x15\x5c\xf7\x64\x13\x54\xd8\x30\xd1\xca\xc6\x7b\xde\xa7\x65\xdd\x37\x39\x42\x65\xbd\xe9\xac\x12\x66\x22\x2f\x5b\xe1\x2a\x93\x86\x96\x13\xfd\x9f\x96\x7d\x69\x28\xde\xb8\x40\x0d\xd7\x31\x83\x9a\xa9\xf6\xf1\x14\xfa\x48\x0a\xff\xbb\x54\xe6\xc3\x71\x05\x7f\x3a\xf5\x88\x50\x43\x5d\x5f\xa5\x2e\xbc\x26\x34\x30\x7c\xab\xc4\xc5\xa2\xf8\x66\x31\x59\x64\x07\x84\x4b\xb4\x22\x04\xa1\x60\x08\xbc\x62\xa6\x39\x24\x45\xcd\x90\xbc\xb7\xe2\x2e\xf3\xb5\x54\x51\x4c\xc9\x02\x1f\x49\xab\xf5\xda\xae\x96\xdd\x21\xc8\x85\xc2\x0c\xf1\x4f\xf6\xa1\x01\xc1\x9a\xfc\x92\x6e\x68\x11\x3b\xe0\x45\x25\x4e\x10\x79\xfc\x95\x34\xfe\x72\x1a\xbd\x82\xdd\x34\xae\xde\x73\x65\xb9\x90\x79\x55\x99\x86\xb5\x4b\xb2\xf8\x9c\x5c\xb6\x4c\xc3\xf9\xfa\x27\x2e\x17\xc6\xe7\xa6\x23\x43\xb0\x87\x9b\x2a\x0d\x05\x8d\x36\x14\x34\xda\x49\x41\x33\x1e\x7a\x8d\x20\x34\x17\xd0\x2c\x27\x34\x67\xd1\x24\x2a\x76\x41\x68\x94\xef\x9c\xb5\x82\xb6\x98\x06\xff\x1f\x03\xe8\xfe\x0e\xfa\x42\xc0\x40\xdf\xb5\x69\xc9\x72\x4c\xcb\x29\x07\xf8\x2f\xb3\xf8\xcf\xfb\x5b\xf4\xce\x8a\x54\x46\x1c\xd3\x5a\xb6\xcc\xaa\x6e\xd7\xe0\xbf\x58\xf1\x9f\x77\x6d\x5a\x14\xe5\xf5\x84\xf7\x69\xb9\xe3\xfc\x81\x26\xfd\xaf\xbc\x8a\xb5\xcb\x59\xd7\x1f\xb7\xed\x98\xe9\xf5\x6e\x48\xdc\x40\x04\xcf\x6c\x0f\xe8\xc6\xf1\x69\x09\xe8\x5a\x8e\x1e\x49\xed\x94\xf6\xaf\xc1\x75\x8f\x0e\x34\xe7\x84\xb7\x63\xc4\x3f\x9f\x75\x34\x30\x3d\x60\x7a\xc0\xf4\x80\xe9\x01\xd3\x03\xa6\x07\x4c\x0f\x98\x1e\x30\x3d\x60\x7a\xc0\xf4\x36\x99\xe9\x01\x30\x03\x60\x06\xc0\x6c\x6b\x80\xd9\x17\x07\xd0\x7d\x79\xdd\xb3\x12\x12\x13\x39\xb3\x3a\xe1\xb2\x6b\x57\x2b\x34\xf6\xbe\x7a\x66\x00\xff\x65\x3f\xda\x69\xb8\x3e\xbd\xb2\x5c\xc8\xfc\x7a\x27\xde\x57\x73\x71\x61\x97\x79\x61\xdb\xc2\xf7\xea\x2e\xfe\xba\x09\xd7\xa7\x97\x0b\xf5\x15\x04\x5a\xd3\x85\xbf\xd5\x7c\x7b\x9c\x93\xc7\xc3\x12\xe7\x64\xb3\x92\xdb\xd4\x37\x3d\xf8\x5a\x01\x97\x01\x2e\x03\x5c\x06\xb8\x0c\x70\x19\xe0\x32\xc0\x65\x80\xcb\x00\x97\x01\x2e\xb3\x85\x5c\xe6\x14\x1a\xc3\x27\xb3\xc7\x63\x57\xa9\xbb\x55\x5f\xab\x7a\xed\x7d\xe3\x0f\x12\x01\xd6\x01\xac\x03\x58\xa7\x33\xac\xf3\x9d\x2c\x1a\x16\xbe\x37\x72\xdc\xd4\x47\x80\x11\xac\xc7\x08\x2c\xd3\xb7\xd8\x88\xc7\xbf\x9d\xc5\x9f\xee\x47\x77\xc8\xdb\xe3\x03\xea\xd5\xce\xdc\x6d\x26\x16\xa6\x27\x79\x41\x3d\x72\xb6\x11\x13\x78\x41\x54\x26\x3a\xce\x1e\xbd\x63\xd6\x0a\x42\xe0\x34\x8d\x9c\xa6\x13\x7f\x97\x47\x5f\xdf\x9e\xd5\x9c\xc4\xc7\x25\xab\xa9\x1d\x3c\xd1\x29\xb9\xa8\x1f\x9a\x9c\x41\x05\x6a\x03\xd4\x06\xa8\x0d\x50\x1b\xa0\x36\x40\x6d\x80\xda\x00\xb5\x01\x6a\x03\xd4\x06\xa8\x0d\x78\xd3\x00\x76\x01\xec\x72\x13\x60\x97\xcf\xa5\xd1\x6d\x4a\xa8\x23\xfc\x1f\xd3\xf8\xd7\xd3\xa8\x9f\xfd\x4f\x26\x53\xa6\x21\xb1\x9c\x45\xd7\xaf\xc4\x6d\xa6\x13\x6e\x68\xe7\xee\x28\xd3\x70\xdc\xf3\x82\xf1\xb9\xe9\x87\xd8\x0f\xdb\xf0\x18\x99\x85\x2e\x08\xa0\xf1\x10\x9a\xe2\x40\xe3\x34\x3a\x85\xc6\xba\x3b\x46\xc6\xbf\xb1\xed\xf9\xb1\x2f\xa6\xd1\xae\xc8\x35\x09\xff\x6e\x1a\xff\x5f\xe9\xc4\xf9\xa8\xe5\x19\xbd\x57\x96\x69\x28\x3c\x7b\xe0\x58\x5e\xf3\x66\xfd\xcc\x00\x3a\x5c\xeb\xf1\xd5\x22\x10\x17\x9f\xe7\x3e\x9f\x65\xf8\x1d\x03\xf8\x59\xc5\xf7\x6b\xb9\x33\x2a\x38\xcb\x4a\x98\x67\x17\x7a\x84\x05\x07\x14\xcf\xad\x24\x6a\x56\xf2\x1a\x20\x83\xd7\x40\x06\x67\xdb\x93\xc1\x83\x78\xb0\xde\x8b\x2b\x69\x7c\xf0\xdf\x02\x12\x08\x24\x10\x48\x20\x90\x40\x20\x81\x40\x02\x81\x04\x02\x09\x04\x12\x08\x24\x70\x0b\x49\x20\x84\xba\x02\xd6\x08\xac\xf1\x46\x65\x8d\x7f\x38\x80\x8e\x76\xc4\x71\xd8\xea\x63\x19\x54\x37\x0c\xa6\x50\x04\xf8\x17\x06\xf0\x7f\x50\x58\xce\xe3\x9d\xb1\x9c\x05\x51\xca\xb8\x28\xa5\x47\x3c\x67\xb0\x29\xcf\xa9\x7d\x15\x30\x9d\x6b\x60\x3a\x73\xed\x99\xce\x30\x3e\x54\xcf\x74\x6a\x3b\x00\xb8\x0e\x70\x1d\xe0\x3a\xc0\x75\x80\xeb\x00\xd7\x01\xae\x03\x5c\x07\xb8\x0e\x70\x1d\xe0\x3a\xc0\x75\x80\xeb\x00\xd7\x01\xae\xd3\x73\xae\xf3\xa7\x59\x74\x6f\x9b\x88\x4c\xf8\xd7\xb2\xf8\x93\x0a\xc2\xf9\x97\x9d\x21\x9c\x0d\x09\xc6\xa4\xe5\xee\x5d\x23\x9c\x12\xc0\x9b\x6b\x80\x37\x10\x56\x09\xf0\x0d\xe0\x1b\xc0\x37\x80\x6f\x00\xdf\x00\xbe\x01\x7c\x03\xf8\x06\xf0\x0d\xe0\x9b\xeb\x1e\xdf\x00\x5c\x01\xb8\x02\x70\x65\x6b\xe0\xca\x3f\xa6\xd1\x1e\x71\x40\xcf\x70\x5d\xdf\xb4\x9c\x86\xcc\x70\x2f\xa6\xf1\x17\xd3\xe8\x0e\xf5\xf2\x9a\x07\xce\xf6\xf0\x03\x67\xc9\xcd\x70\xf0\xac\xd5\xc1\xb3\xbf\xc9\xa0\x69\xd1\xf6\xf4\xb1\x90\x3a\x01\x7f\x53\x14\x8f\xaa\x85\xef\x92\x4f\xf9\x07\x05\x34\x8c\xc2\x90\xe7\x83\x50\x0f\xab\x01\xfe\x60\x06\x7f\xa8\x0f\xe1\xa4\xa8\x38\x64\xd5\x20\x9f\xfa\xe2\xb6\x68\xdc\x27\xd2\x66\x5e\x94\xb8\x40\xc3\x5c\x9e\xdd\x38\x15\x17\x20\xc3\x4c\x25\x7e\x48\xc9\xad\x0b\xbc\xb0\xde\x75\x26\xe7\x4e\x66\xcb\x16\x43\xd3\xa2\x87\x8a\xe8\x0c\xef\xa1\x51\x74\x02\x1d\x6b\xd5\x43\x5a\xd2\x04\x9a\x6c\x02\x2d\xa9\x79\x04\x9c\xf6\x34\x07\x4e\xb7\xe0\xfe\x32\x0d\xd1\xa3\xaf\x6d\x8f\x9a\x8e\xe1\xa3\x0d\xf1\x9e\x24\x7b\x4a\x6a\x10\xa5\x64\x8b\xdf\x8f\x32\x4f\xdc\xda\xb4\x97\x72\xac\x6b\x75\x83\x76\xd2\x51\x23\xf2\xde\x2d\xeb\xab\xe2\x2c\x9a\x41\xe7\x70\x7f\xc9\x35\x57\x33\xfc\x5f\x92\xca\x75\xdd\x27\xc5\x0f\xa6\xd1\xcf\xa7\xf1\xfb\xd2\x99\x77\xa7\x23\xc9\xf9\x0f\x29\xbe\x2a\x4a\xa5\x63\x88\xb3\x5c\x43\x0f\xa3\x85\xb9\xc6\xd0\x8d\x0c\x04\xa6\xe4\x96\x28\x89\xf0\xb0\xa9\x91\x71\x87\x58\x8e\x40\x4c\xae\x4f\xaa\x4e\x4c\xa9\x4c\x62\xfa\xab\xf3\x55\x87\x98\x96\x4f\x99\x74\xa7\x31\xfa\xe0\x2b\x15\x53\x11\x25\xfb\x89\x2c\x3d\x69\x6d\x93\xc5\xaa\xcf\xad\x09\xcf\x77\x0d\x1a\x04\x72\x31\x57\x8c\x22\x8d\x5c\xe6\x6f\xe4\x56\x1a\x57\xbe\xd8\x4a\x3e\x6e\xdb\xa3\x5c\x53\x33\xfd\x55\xe2\x57\x1d\xd6\xcf\x6c\x39\x88\xd4\x53\x59\x1c\x35\xb3\xb7\x88\xaa\x29\x6b\x5f\xf1\x3d\x69\xf4\xae\x34\x7e\x47\x3a\xf3\xf6\xb8\x81\xbe\x9e\xe2\xca\xfd\xc3\xba\xa3\x97\xa9\x2f\xcc\x54\xb1\xe1\x15\x04\xae\x61\x71\xcd\x2b\x36\x08\x75\x6e\x51\xbb\x3e\x61\x8a\x79\xb8\x1a\xab\xa2\x15\xfd\x2a\xab\x7f\xb8\x44\x03\x1a\x2d\x50\x6c\xd1\x8c\x50\x1d\xa7\x55\x25\x4a\xf8\xd2\xc8\x8d\x3f\xd7\x27\x85\x91\x13\xec\x5e\x5f\x37\x38\x53\xb4\x5d\xa7\x2c\x96\x23\x6e\xa0\x31\x5d\x5a\xb7\x1c\xa1\xa0\xf1\xb5\x21\xb9\x97\x73\x16\x49\x3c\x99\xd9\xce\xa7\xe2\x68\x3e\x5f\x76\x6d\xdd\x29\x6b\xae\x5f\xce\x7b\x57\xcb\xf9\xaa\x63\x19\xae\x49\xf3\x03\xd3\xc1\x1c\x2b\x45\xcb\xde\xae\x7e\xab\xaa\x14\x7c\x32\xb5\x19\x42\x43\x1c\xf5\x2e\xf0\xa3\xde\x3b\x27\x84\x3d\xb2\xb1\x42\xc8\xab\x6e\xa8\x10\x2a\xfe\xf8\xed\x4d\x85\xd0\x11\xae\xdf\x72\xda\x2a\xf4\x8c\x4e\xa4\xd1\x61\x8f\x73\xfe\xad\x90\x45\x77\xd5\x17\x34\xcc\xeb\x72\x88\xeb\x03\x77\xab\x17\x2b\xd4\x2f\x53\xf5\xea\x7d\xea\xd5\x20\xf4\xf5\x90\x96\x2d\x63\xb8\xfe\xbe\x22\xd3\x0a\x66\xea\x24\xdd\x28\x3a\xd1\x85\x7e\x30\xc7\x0a\x05\x59\xd7\x4e\xd6\x7d\xb4\x0f\x3d\xdb\x87\x9f\xe9\xcb\x3c\x1d\x5b\x6f\x4f\xf6\xdd\x3c\xb2\xae\x0e\xdc\xb0\x76\xe6\x1b\x11\x1c\x2e\x7a\xc2\x44\x13\x8c\x82\x1c\x50\x87\x30\xbf\x26\x06\xee\x41\x4e\xe4\xc5\xbe\x95\x6e\xf3\x27\x1d\xd7\x19\x16\x4f\xf3\x3b\x48\xb8\xea\xd1\x80\x1c\x98\x09\x5c\x87\x0f\xcb\x21\xf2\x30\x1b\xf8\xf2\xef\x85\x68\x3a\x24\x3f\x1e\x6c\x2d\x84\x8b\x2f\xa4\xd0\xf3\x29\xfc\x5c\x2a\xf3\x99\xd8\xf0\xf9\x70\xea\xac\xeb\x1b\x7c\xaf\xa7\xec\xf2\x66\x77\x49\x76\x91\xfd\x94\x25\xe3\x35\x5f\xa1\x91\xe9\x90\x54\xa8\xee\x04\xa4\x1a\x24\x3b\x10\xc3\xba\xc1\x3f\x9c\xef\xeb\xd8\x96\x21\xf6\x1e\x38\x6a\x26\xee\x8a\x6c\x53\xb1\xef\xe1\x51\xd7\xb3\xa9\x46\xc4\x1b\x99\x89\x1b\xf7\x25\xb7\x9d\x9b\x36\x40\xfc\xfa\xec\x0e\x5e\x2d\xd5\x2a\xda\x5c\x4d\xb4\x75\x36\x19\x4f\x64\x93\xe9\x6c\x19\xe8\x40\xea\x37\x86\x27\x3d\x8e\xee\xc7\x47\xb2\x85\xd8\x73\xe6\xfb\xd4\x88\xd6\xc9\x93\x8d\xb1\xac\xaf\x3f\x97\x1b\xfc\xb6\x7d\xe8\x01\x19\x02\xd8\x58\xa2\x66\xd5\xb6\x9c\x72\xf3\x28\xc0\x9e\x6f\xb9\xbe\x15\xae\x1a\xb6\x1e\x04\x49\xbe\xa7\xdf\x1d\xc0\x3f\xb9\x03\xe1\xe4\xe9\x78\xd9\xfc\x64\x47\xa9\x9f\x64\xa9\x13\xac\xd4\x6d\x91\xf7\x49\x44\x0f\x59\x88\xbf\x47\x2e\xdc\x35\x15\x05\x67\x85\x2e\xf2\x3f\x19\xed\x67\xec\x19\xfc\xa0\x74\x4f\x50\x5b\xbb\x71\x8a\x46\x81\x87\xeb\x87\x2c\x78\x2e\x80\xe7\x02\x78\x2e\x80\xe7\x02\x78\x2e\x80\xe7\x02\x78\x2e\x80\xe7\x02\x78\x2e\x80\xe7\x02\x78\x2e\x6c\xb2\xe7\xc2\x28\x3a\x81\x8f\x65\x8f\xc6\x56\xf0\x9d\x35\x09\xa1\x54\xc5\x1e\xb2\x41\x81\xd7\x03\x78\x3d\x6c\x17\xaf\x87\xb7\x1f\x12\xd9\xa0\xf2\xcb\x2d\x37\xda\x03\x6a\xf8\xc9\x26\x3b\xfe\x52\x0e\xff\xdb\x1d\xc9\x01\x93\x3b\xf9\xb8\xaa\xb5\x15\x17\xf8\x13\xb9\x0c\xbb\xd4\x18\xc1\x83\x5d\xeb\xf1\x1e\xec\xb3\x29\xf4\x4c\x0a\x3f\x9d\xca\x7c\x28\x6e\xf9\xb7\xa6\x16\x84\xc6\xc1\xb5\x96\xc7\xf8\xea\x5f\x62\x7f\xe9\x46\xa8\x11\x32\xc5\xfe\x1b\xfd\x5e\xd1\x2d\x4e\xaf\x03\x62\xd8\xd5\x20\xa4\xfe\xb0\xfc\x16\x23\xe2\xac\xb6\x75\x95\x92\xc1\xf8\x2b\x06\xd9\x34\x8f\xa0\x95\x46\xe6\x6c\xdd\x71\xe4\xc4\xe5\x5d\xa2\xdb\x6c\xa6\x14\xb4\xc2\x09\x2d\xbb\x83\xbf\x52\x6d\xf4\xe2\x53\x29\xf4\x81\x14\x7e\x7f\x2a\xf3\xde\xb8\xba\x8f\xc7\xb5\x8d\xf9\x42\x29\xaa\x37\x7b\x05\x99\x12\x55\x65\xd3\xc1\x0b\xa2\x6a\xc9\xb5\x89\xd3\x62\xb6\xa8\x70\x0d\x41\xf4\xfe\x3a\x6a\x78\x8b\x78\x4d\x0d\xf7\x7d\x0d\x1a\x15\x30\xe9\x08\x2a\x70\x98\x74\x08\x1d\x44\x83\x2d\xf1\x2e\x1b\x0d\xda\x72\x41\x13\xbd\xdb\x16\x1b\xb5\x71\x39\x38\xd7\x1e\x1a\xed\xc7\x03\x8d\xa1\x49\xf8\xbb\xd5\x33\x2d\x99\xf7\xec\x4a\x46\xea\xdd\x91\x5b\x41\xd3\xc1\xba\x47\x5e\xdd\x94\xf1\x7a\x0a\x8d\xa1\x93\x75\x3b\x69\x9d\x37\x2f\x6c\x9c\x81\x93\x40\x97\x4e\x02\xef\x49\x5d\xd3\xbc\x3e\x2d\x36\xff\x4f\xa0\x63\xc9\xe6\xff\x26\x09\x06\xee\x06\xd0\x99\x60\x50\x25\x40\x0b\x21\x91\xfb\xce\x1d\x89\x60\xb8\x43\xd8\x21\x44\x8f\x64\xc1\xdd\xe2\x87\x4d\x11\x05\x97\xd0\x3c\x9a\x53\x45\x41\xae\x88\xce\x74\x01\xed\x27\x79\x95\x2f\x72\xce\x1d\x80\x84\x68\x27\x21\xbe\x96\x46\x5f\x49\xe3\x2f\xa7\x33\x5f\x8a\x1b\xe8\xe3\xe9\x4b\xaa\x82\x68\x39\x24\x10\x4a\x1e\x29\xd1\x45\x57\xd8\x6a\x91\x41\x95\x6c\x24\x48\x1b\x96\x57\x51\x91\x00\x8e\xeb\x0c\x3b\xb4\xac\xf3\x86\x90\x3a\xa2\x2a\x29\x04\x5a\x89\xbb\x40\x8e\x40\xab\x52\xa1\x26\x93\x45\xf6\xaa\xe4\xd1\xea\x6e\x83\x63\xd9\x43\x52\x75\xe4\x26\x06\x29\xfb\x6c\x39\xf3\xa8\x6f\xb9\x66\xac\x02\x27\x2b\x5b\xb8\xea\x25\xf6\x7c\x35\x60\x95\x54\x8d\x13\x9d\x3d\x19\x7d\x90\x7c\xc9\xa2\xa2\x42\x58\xec\x01\x5e\x4f\xb1\x27\xdd\xa4\x8e\x59\xcc\xab\x30\xc7\x6b\xd0\x44\x25\x2e\x7e\x21\x8d\x5e\x48\xe3\xe7\xd3\x99\xe7\xe2\x66\x7e\x2a\x3d\xa9\xec\xf7\x79\xcc\x1a\xa0\x31\x11\x9a\xf3\x5d\x4f\x2f\xf3\x0e\x98\x73\x6d\xcb\x58\x1d\x12\x6d\x20\x18\x48\xf4\x2d\xc9\x86\xa1\x50\x62\x8e\x6b\x44\x51\xf6\x4c\xea\x51\xc7\x64\x56\x6e\x0c\x17\x29\x71\x7d\x6f\x49\x67\xc6\x2b\x6f\x56\xbf\x4a\xf3\x8b\xba\x1d\xc1\xf8\xac\xb8\x9a\x25\x8b\x96\xa3\xdb\xd6\xe3\x11\xd5\x2b\x51\xa6\x72\x73\x58\x90\x17\xaa\xb6\x99\x98\x72\xa2\xf0\xc1\x20\x79\x48\xe0\x6f\x8d\x4c\x59\x7c\x38\x2b\x15\x77\xfd\xc6\x2f\xe3\x2c\x48\xec\x44\x09\xfa\xce\x27\x9b\x1b\x2e\x69\xd9\xdd\xa2\x3e\x93\xd1\x87\x04\x35\xda\xe3\xdb\xfa\xd1\x5b\xfa\xf1\x13\xfd\x99\xef\xc5\xd6\xed\x8b\xcc\xba\xe5\x2f\x65\x53\x6a\xc9\x5d\x21\x65\xdd\x2f\x31\x2b\xd0\x70\x6d\x9b\x72\x21\x9a\xcc\x0b\xea\x2f\xba\x7e\x85\xb5\x45\xd3\x9a\x5e\xac\x7b\x79\xeb\x8a\xf2\xf1\x1c\x0d\x46\x4f\x7c\x95\xc5\x06\x8a\x61\x99\x09\xe7\xe6\xc8\x54\xf8\x2c\x44\xad\x1b\xf0\x7c\x27\xfc\x6a\x04\x45\x35\xa5\x19\x23\x9c\x16\x19\x30\x89\x3a\x5e\xfb\x32\x8d\x8c\x1b\x06\xf5\xc4\xb2\xa9\x0a\x87\x41\xf1\x0d\x83\x64\x58\x76\x7c\xed\xc0\x08\xc6\xc8\x60\x51\x37\xae\xb2\xc5\xc1\x31\xd9\x5d\xba\x6d\xbb\x2b\xfc\xa6\xba\x86\x13\x0c\x5b\x0e\xfd\xda\x42\xa2\x2f\x28\xc5\x25\x8d\x91\xc1\xb3\xae\x4f\x95\x62\x89\xa1\x07\x86\x6e\xb2\xaf\x97\xed\xc3\x85\xad\x28\x2f\x10\xd2\xab\xa1\xc0\xc5\xb8\x0c\x2d\xfb\x32\xaf\x7e\xdc\xa8\xcb\xf9\xa7\x52\x68\x56\x2c\xe7\x53\x68\x82\x2f\xe7\x5c\xb3\xec\x62\xf9\x10\xee\x68\x68\x9e\x95\x36\x82\xcf\xa3\x69\xb4\x4b\xb4\x2d\x35\xaf\xb5\xcc\x76\x6b\x3e\x69\xbe\xe6\xdf\x8a\x77\x8a\x66\xea\xa1\x3d\x50\xfc\xb5\xdb\x92\x65\x7f\x7f\x83\x87\x5f\x53\xc3\xe0\x2e\xaf\x79\x20\xca\xde\xea\x02\xe0\xbe\x77\xe3\xe9\x18\xe0\xbe\x07\xee\x7b\x5b\xec\xbe\xb7\xb1\x18\xa7\x67\x72\xb9\xad\xe7\xdf\xcc\x11\x54\xc0\xf9\xec\x70\xbc\xbf\x80\xd5\xfd\x05\x51\xe2\x0d\xe1\x9a\xf7\x3b\x7b\xd1\xed\x11\x8f\xf5\x5c\x33\xc0\x9f\xd8\x8b\x3f\xd6\x97\x2c\x5a\x7b\xc5\x0e\xba\x2f\x37\x2e\x22\x0d\x37\xf6\xac\x73\xcd\xdc\x1e\x76\x8b\x8c\xb9\xe3\x9a\x67\x5d\x7f\xdc\xb6\xe3\x85\x6b\xdb\x7b\xb1\x5d\x6e\xed\x70\x3a\x26\x86\xf2\x51\x34\xc2\x87\xf2\x10\xca\xa1\x03\x6d\x87\xf2\x9c\x6b\xce\x5a\x41\xec\x62\x7a\x4f\xf3\x81\xb6\x13\xef\x10\x81\x75\xa6\xda\x0f\xe9\x2c\x26\x0d\x81\x75\x5c\x13\x62\xe9\x80\x47\x1a\x78\xa4\x81\x47\x1a\x78\xa4\x81\x47\x1a\x78\xa4\x81\x47\x1a\x78\xa4\x81\x47\x1a\x78\xa4\x41\x2c\x1d\xf0\x2a\x03\xaf\xb2\x9b\xce\xab\xec\x6f\xf7\xa2\x3b\x95\x64\xf7\xcb\x05\x35\x5a\x0b\xfe\xfc\x5e\xfc\x42\x1f\xda\xc9\x2e\x5d\x59\x2e\x64\x0e\xac\x8d\x34\x94\xe3\xf5\xfb\xd8\x9d\xe3\x9e\x17\x5c\x2e\x24\xbf\x5e\x6f\x80\xe3\x87\x50\x51\x70\x8c\x31\x74\x92\x73\x8c\x23\xa8\x80\xf2\x2d\x39\x06\x6b\x25\x6d\x59\x3d\x2d\xdb\x49\x44\x9d\xb6\x9c\xe3\x42\x7b\xce\x71\x08\x1f\x6c\xe2\x49\xc1\xea\xd3\x78\x9e\x16\x80\x07\x00\x0f\x00\x1e\x00\x3c\x00\x78\x00\xf0\x00\xe0\x01\xc0\x03\x80\x07\x00\x0f\x00\x1e\x00\x3c\x00\x78\x00\xf0\xb8\x19\x80\xc7\x37\x06\xd0\x83\xb5\xc0\x63\xcd\xbc\xdb\x4c\x50\xfa\x2e\x13\x53\x4c\x6b\xe7\x31\xaa\xf0\x2f\x0f\xe0\xcf\xf6\x27\x54\xe4\x87\x3b\x4b\xdc\x34\x11\x97\x34\x2f\x4b\xea\x51\xea\xa6\x43\xfc\x01\x01\x5b\x12\xb7\xc7\xc6\xd7\x41\x1a\xa7\xe6\x00\xe6\x72\x7b\xc0\x72\x04\x17\x1a\xa1\x4a\x63\x0b\xd7\x7a\x4a\x75\x92\x1e\x0a\x68\x0c\xd0\x18\xa0\x31\x40\x63\x80\xc6\x00\x8d\x01\x1a\x03\x34\x06\x68\x0c\xd0\x18\xa0\x31\x9b\x4b\x63\xae\xbf\xb3\x07\xc0\x7b\x80\xf7\x00\xef\xe9\x8c\xf7\xfc\x7f\x59\x74\xa0\x65\xc2\x22\x81\x7e\x2c\xa7\xec\xd3\x20\xa0\x01\x7e\x21\x8b\x7f\xaf\xbf\x69\x92\x89\xa0\x33\xc8\x33\x2d\x8a\xea\x11\xd9\x29\xac\x34\x4d\x52\x21\x5f\x32\x6b\x05\xd7\x9d\x4b\xcd\xb6\x4d\xd3\xbd\x2e\x08\xd4\x10\xaf\x5e\xf6\x48\x93\x60\xf5\xc0\x77\x80\xef\x00\xdf\x01\xbe\x03\x7c\x07\xf8\x0e\xf0\x1d\xe0\x3b\xc0\x77\x80\xef\x00\xdf\x01\x6f\x1b\xa0\x2f\x40\x5f\x6e\x02\xfa\xf2\x8d\x7d\xe8\x5c\x1b\xfa\xd2\x71\xd2\x68\xfc\xd4\x3e\xfc\xe4\x8e\xa6\x74\xe6\xe3\x9d\xe4\x32\x4b\x0e\xc1\x6c\x8b\x44\x66\xb9\xe6\x70\xa7\x59\x06\x52\xa0\x3a\x5d\xe4\x33\xdb\xc0\x0c\x84\x00\x75\x00\xea\x00\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x80\x3a\x00\x75\x00\xea\x00\xd4\xd9\x54\xa8\x73\x13\x25\x01\x07\xde\x04\xbc\x09\x78\x53\x67\xbc\xe9\xeb\x87\x50\x5e\xf0\x26\xc7\x35\x69\x7d\xa6\x7c\xbf\xea\xb0\xef\xad\x4b\x91\xff\x6b\x87\xf0\x7f\xdb\x81\x6e\x67\x0f\xc4\x40\xe9\xde\x26\xb9\xd2\xe6\xc5\xd3\x3c\x35\x62\xee\x2e\x76\xc3\x05\xd7\xa4\x12\xdb\xa8\x17\x21\x65\xda\x36\x4f\x99\xf6\xc6\xd6\x91\x8b\xa7\x04\xc8\x7a\x10\x3d\xc0\x41\xd6\x31\x74\x14\x8d\xb4\x8c\xf8\xc3\xc7\x98\x1c\x32\x9a\x3a\x02\x3a\xcc\x9e\xf6\xfa\xf6\x88\xea\x24\x3e\x2e\x11\x95\x32\xa0\x23\x46\xa5\xbc\xb1\x91\x52\x65\x5e\xdc\x55\x37\xa8\xb3\xcd\xd3\xaa\xd5\x8c\xeb\x7b\xe4\x3d\x9b\x33\xb4\xcf\xa1\xb3\x68\xb2\x2e\xd1\x41\x57\x0d\x0e\x29\x0e\x20\xd1\x5a\x97\x89\xd6\x9e\x4d\xf5\x68\xd2\xa3\x19\x91\x73\x6d\x02\x8d\x27\x39\xd7\xba\x2d\xeb\x1a\xd3\xaf\x75\x26\x59\x1a\x64\x46\x67\xa2\x26\xf7\xbf\xef\xae\x93\x2c\xaf\x8c\xf3\xb2\xd5\x08\x93\x3d\xe2\xe7\xcd\x91\x25\x90\x9e\x0d\xd2\xb3\x41\x7a\x36\x48\xcf\x06\xe9\xd9\x20\x3d\x1b\xa4\x67\x6b\x9e\x9e\xad\x33\xb5\xa0\x13\xeb\xa2\x89\xa6\x50\xfc\xca\x6d\x75\x6a\xc1\xa1\x36\x79\xdb\x6a\x94\x85\xbb\x79\xfe\xa0\x0d\xd7\x15\x20\x7d\xdb\x8d\xa7\x83\x40\xfa\x36\x48\xdf\xb6\xc5\xe9\xdb\xde\xd8\x2b\x23\xb2\x7b\xbf\x27\x91\x7f\x6d\x63\x4d\xbf\x99\x93\xe8\x38\xbe\x3f\x7b\x24\xde\x3e\xf9\xfe\x9a\x7d\x17\xe5\xd6\xc6\x9d\x97\x9e\x67\x60\xfb\xd9\x21\x74\x58\xc0\x5e\xb9\x49\x90\xf0\xde\xfc\xb2\x6b\x57\x2b\x54\x0f\x43\xdd\x58\xaa\x30\x9d\x20\xa2\xbd\xff\xf7\x21\xfc\xa7\x3b\x10\x92\x4f\x5c\x59\x2e\x64\x06\x9a\xb0\xde\xcb\xfc\xf1\xf1\xf8\xf1\xdc\x1e\x76\xd3\x82\x78\xe8\x72\xa1\xfe\x32\x10\xdf\x6d\x4e\x7c\x4b\xe8\x21\x31\x3d\xcf\xa0\x07\xf9\xf4\x3c\x81\x8e\xa1\xa3\x2d\xa7\x67\x34\x9e\x96\x0b\x5a\x7d\x57\x5f\x03\x99\xe1\xcc\xf7\x0d\xed\xa7\xe7\x18\x3e\xd9\x24\x9c\x7b\xed\x18\x97\x93\xb3\xa1\x76\x99\xaf\xee\xaa\x19\xdc\xf7\x35\x67\xbe\x0d\xe3\x9b\xc8\xfb\x36\x6b\x88\xcf\xa0\x73\xe8\x6c\x9d\x8e\xd4\x65\x8f\x80\x7e\x04\xec\xb7\x4b\xf6\xfb\xb1\x54\xef\xe4\xc2\xac\xa0\xbf\xcc\x7e\x8c\xe9\xef\xc6\x49\x99\xce\xc4\xc8\xba\x44\x47\x4d\xf0\xc2\xb5\xf9\x72\xee\xfd\xbb\x6b\xa4\xcc\x9d\x31\xff\x6d\x10\x2c\xf7\x8a\x4b\x9b\x25\x57\x80\x02\x03\x05\x06\x0a\x0c\x14\x18\x28\x30\x50\xe0\x9b\x93\x02\x77\xa6\x19\x74\xa0\x03\x34\x57\x1e\xda\x53\xe6\xe2\x5f\xdd\x56\xa3\x1c\xe4\xdb\x50\xe0\x06\x95\xe1\x1e\x4e\x32\x36\x41\x63\x00\x16\x7c\xe3\x69\x22\xc0\x82\x81\x05\x6f\x31\x0b\xde\x44\xd8\xb4\xd1\x66\x60\x3b\xda\x3c\x73\x0a\x8d\xe1\x93\xd9\xe3\x31\x0f\xbe\x5b\xe5\xc1\xf5\x65\x6f\x02\x13\xfe\x24\x42\x83\x79\xdd\xb3\xf2\xcb\x85\x56\x27\xcb\x4b\x4c\x40\x3a\xe5\x00\xbf\x0d\x65\xdf\xd7\x8f\x76\x1a\xae\xcf\xd7\xa9\xdd\xe2\xd0\x08\xd1\x49\x51\xdc\x91\xdb\x23\x7e\x99\x70\x7d\xaa\xa6\x56\x90\x97\x7b\x6c\xb9\x3e\x88\x1e\x40\xa3\x75\x2b\x45\x0e\x1d\x68\x39\x6c\x58\xb5\xd9\x98\x91\xb5\x99\xf9\x52\x0a\x8d\x89\x61\x77\x14\x8d\xf0\x61\x37\x84\xd6\xf1\x3c\x3a\x23\xf8\xc5\x49\x74\x3c\xe1\x17\xeb\x2b\x61\x5c\x68\x3b\xa3\xe8\x84\xa2\xed\xac\xaf\x88\x76\xe3\x7d\xba\xfd\x78\xbf\x0f\xef\x93\xe3\x3d\x9b\x95\x63\x3c\x2a\xbd\x66\x68\xb7\xce\xbb\xe9\xb9\x41\x88\x66\x60\xa5\x5d\x7b\xa5\x9d\x01\xaa\xd8\x82\x2a\x5e\x7f\x47\x8c\xf0\x2f\x0f\xa3\x07\xda\x88\x4d\x19\x90\x83\x0d\xee\x24\x29\x4e\xbc\xad\xf6\x57\x43\xf8\xab\x3b\x12\x59\x7a\xa0\xd9\xf9\x89\xa4\x80\x24\x75\x4a\xee\x20\xbb\xb3\x5e\xc2\x36\xbd\x15\x36\xd9\xb6\xf9\x26\x9b\x89\xa6\xc5\x02\x54\x44\x67\xf8\x02\xc4\x56\x82\x63\x6d\x65\x7f\xd3\xce\xbe\xd6\x6d\xb6\x47\xda\x2f\x14\x47\xf1\x48\x13\x73\x37\x5e\x34\x9a\x57\x2b\xf3\xcd\x5d\xc9\x28\x3f\xd4\xe2\x40\x45\xd3\x81\x3e\x24\x6f\xde\x8a\xb1\x3e\x8b\x66\xd0\xb9\x3a\xdd\xa2\xeb\xae\x01\x1b\x14\xf6\xdb\xba\x5c\x19\x3f\x99\xea\xa5\x88\xb8\x20\x34\xd6\x87\xd0\x54\xa2\xb1\x6e\x8d\xc8\xe1\x67\x2e\x3a\x13\x39\x9d\x89\x19\x55\x30\xe5\xfe\xf5\xee\x44\xe4\xdc\x93\x9c\xb4\x68\x2a\x65\x0e\x89\xeb\x5b\x21\x64\x60\xeb\x0d\xb6\xde\x60\xeb\x0d\xb6\xde\x60\xeb\x0d\xb6\xde\x6e\xce\xad\xb7\x8d\xd2\x00\x3a\xd8\x73\xfb\xd6\x6d\x89\x8e\x70\xb4\xdd\xb1\x8b\xa6\x9a\x43\x8e\x13\xdd\x4d\x56\x1c\x60\x07\xee\xc6\x53\x48\x60\x07\x0e\x76\xe0\xb6\x78\x07\x6e\x53\x49\xd4\x86\x49\xfd\xb6\x9b\x6f\x45\x74\x06\x3f\x98\x7d\x20\x06\xcd\x7b\x9b\x04\xc1\xaa\x7d\xc1\x8d\x10\x0f\x0b\xff\xe1\x3e\x54\xac\x49\xe1\x5e\xa2\xa1\x3e\xb2\xee\x70\xd2\xff\xdb\x3e\xfc\x77\xfd\xe8\x76\x99\xc6\x9d\x97\x71\x5d\x06\x92\xde\xa7\xe4\x7f\xe7\x5f\x01\x21\xa4\x7b\x14\x42\x7a\xa1\xfd\xcc\x3e\x8c\xb5\xc6\xcc\xf0\xad\x83\x47\x8f\x40\xf0\x68\x08\x1e\x0d\xc1\xa3\xdb\x34\x0b\x04\x8f\x86\xe0\xd1\x10\x3c\x1a\x82\x47\x43\xf0\x68\x08\x1e\x0d\xc1\xa3\x21\x78\x34\x04\x8f\x86\xe0\xd1\x10\x3c\x1a\x82\x47\x6f\x70\xf0\xe8\x3f\xcf\xa2\xac\xe0\x4a\x25\x8e\x92\x6a\xf3\x94\x19\xbe\xeb\x3c\xea\x96\x02\xfc\x5b\x59\xfc\x9b\xfd\xe8\x25\xfc\x9e\xf5\xe6\x87\x9f\xf0\x5d\x67\xc6\x2d\xf5\x28\x3f\xfc\x10\x7f\xa0\xc8\xfe\x91\x31\xb3\x64\xf9\x90\x1a\xbe\x87\xa9\xe1\x5f\xdd\x9e\x02\x69\x78\x48\x52\x20\x3e\x2a\x24\x06\x92\x9d\x01\x09\xc4\x80\x01\x01\x03\x02\x06\x04\x0c\x08\x18\x10\x30\x20\x60\x40\xc0\x80\x80\x01\x01\x03\xda\x6a\x06\x04\xa0\x05\x40\x0b\x80\x96\xad\x01\x2d\xcf\xef\x43\xd3\x02\xb4\x18\xd4\x97\xa5\xd0\xa0\x3e\x5b\x97\xc4\x2e\xca\x1d\x56\x99\x8d\xe2\x48\x5a\x46\x7e\x3c\xff\x3c\x80\x7f\x75\x07\x7a\x85\x7a\x63\x8c\x65\x3e\xdd\x89\x3f\xcf\x44\xf2\xe4\x82\x78\xc5\x7c\xe4\x1c\xb9\x0d\xdc\x7b\x0a\xfc\x75\x4a\x1d\xa3\x4c\xf1\x2d\xab\x0d\xa4\xa7\x0b\x5f\x9f\x37\xb5\xa7\x3c\x17\xf0\xac\xa4\x3c\x4d\x86\x6d\xc4\x7c\x5a\x75\x0a\x50\x20\xa0\x40\x40\x81\x80\x02\x01\x05\x02\x0a\x04\x14\x08\x28\x10\x50\x20\xa0\x40\x40\x81\xb6\x9a\x02\x9d\x45\x93\xb8\x98\x3d\x13\x3b\xf4\xec\x57\x3d\x81\x5a\xea\xf2\x1b\x1f\xc7\x0e\x68\x12\xd0\x24\xa0\x49\x9d\xd1\xa4\x5f\xcf\x46\x39\xdf\xfd\x92\x6e\x68\x91\xed\xcf\x8b\x52\x32\x02\xf9\xae\x4d\xe3\xd0\x8f\x4f\x66\xf1\x8f\xf5\xa3\x57\xb0\x07\xc6\xd5\xfb\xaf\x2c\x17\x32\x07\x85\xb6\xe7\xcb\x89\x15\x09\xb2\xf8\xf4\x97\x6b\xd3\x28\x40\xe4\x08\xbb\x75\xbe\xbe\x90\xcb\x05\xe5\x9e\xeb\xcd\x0d\xe7\x0d\x68\x42\xc0\x99\x07\xd0\x28\x87\x33\x47\xd1\x08\x3a\xdc\xf2\xe8\x24\x6f\xf2\xe5\x82\xa6\x7c\xf1\xac\x15\xb4\xe7\x31\xad\xa3\x2f\x0a\xa7\x1b\xb3\x3d\x8e\x19\xc7\xa7\x25\x8e\x69\xd9\xef\xd1\x79\xac\xa4\x72\x35\x27\x2c\x81\xc0\x00\x81\x01\x02\x03\x04\x06\x08\x0c\x10\x18\x20\x30\x40\x60\x80\xc0\x00\x81\x01\x02\x03\x7e\x38\x40\x4e\x80\x9c\xdc\x0c\xe4\xe4\x9d\x03\xe8\xfe\x0e\xc8\x89\x74\xc4\x11\x61\xce\x7d\xd7\xa6\x01\xfe\xe3\x2c\xfe\xa3\x56\xfc\x64\xa5\xc3\xa3\x50\xa2\x3c\x66\x9b\xf7\xe8\x38\x94\x78\xa0\x09\x8e\x51\x5e\x35\x6b\x81\x7f\x4c\x33\x1e\xd3\x53\xde\xa2\xb4\x77\x6d\x44\xab\x4e\xce\x5b\x01\x94\x01\x28\x03\x50\x06\xa0\x0c\x40\x19\x80\x32\x00\x65\x00\xca\x00\x94\x01\x28\x03\x50\x06\xa0\x0c\x40\x19\x80\x32\x37\x03\x94\xf9\xb1\x7d\x68\x4e\x46\x37\x36\x99\x16\x69\xb9\x8e\x4f\xcb\x16\x8f\x70\x5f\xc3\x65\xd4\x53\x52\xdc\x66\xd3\x99\xa6\xb0\x42\x4b\x4b\xae\x7b\xb5\xc6\xf6\x0a\xf0\xb3\x03\xf8\x97\x77\xa0\x3d\x4d\x4b\x8c\x0f\x4b\xfd\x54\xaa\x33\x72\x73\x39\x7e\xd9\x23\xe2\x65\x13\xea\xcb\x7a\x04\x73\x26\x44\x54\xe3\x66\x15\x96\xe7\x9f\xd6\xae\x06\x80\x9e\x6b\x08\x79\xf3\x23\xed\x69\xd0\xeb\xf1\xeb\xa2\xc0\xc7\x6b\x0c\xd3\x28\xc9\xf0\x9a\x5d\x05\x47\xa3\x80\x01\x01\x03\x02\x06\x04\x0c\x08\x18\x10\x30\x20\x60\x40\xc0\x80\x80\x01\x01\x03\x02\x06\x04\x0c\x08\x18\xd0\xcd\xc9\x80\x3e\x37\x8b\x8e\x36\xc9\x70\xd5\x22\xb7\x95\xa9\xd3\x0a\x53\x7a\xc2\x00\xff\xec\x2c\x7e\xeb\xde\xba\x9c\x56\x83\x6b\x9f\x67\x9a\xe4\x4f\x2f\xd0\x30\x97\x65\x37\x36\xcd\x23\x15\xdf\xb3\xcd\x89\x4a\x11\xb8\x01\x70\x03\xe0\x06\xc0\x0d\x6e\x1a\x6e\x50\xdc\x36\xdc\xa0\xe7\x35\xe9\x9a\x1b\x14\x81\x1b\x00\x37\x00\x6e\x00\xdc\x00\xb8\xc1\xe6\x73\x83\x22\x98\xf9\x37\xa0\x99\x5f\xdc\xee\x66\x7e\xf1\x3a\x34\xf3\x67\x74\x74\x56\xec\xff\x9f\x46\xa7\xf8\xfe\xff\x71\x74\x3f\x3a\xd2\x32\xd6\x06\xb3\xea\x35\x69\xd5\x6b\xb1\x49\xde\x93\x70\x1b\xf3\xed\x37\xfc\xf3\x78\xb8\x31\xd3\x71\x5c\x8b\xc6\x44\xc7\xd9\xb7\xdc\x5a\x07\x22\xb0\x90\xfd\x44\x57\x98\xc3\x3e\xf1\xdb\x26\x51\x07\x01\x09\xa6\xd0\x04\x1a\xc7\xfd\x25\xd7\x5c\xcd\xf0\x7f\x49\x2a\x57\x40\xf9\x75\xb6\x7b\xf1\x83\x69\xf4\xf3\x69\xfc\xbe\x74\xe6\xdd\xe9\x68\xc4\xfd\x43\x8a\x4b\x13\x29\x5b\x87\xb8\x27\x0d\x0f\x12\x2b\xe4\x57\x8d\x3e\x1f\xe9\x41\x6c\x2d\x2f\x51\xe2\xb1\xf6\x63\x4a\x94\x46\xc6\x1d\x62\x39\xc2\x92\x76\x7d\x52\x75\x62\x63\xdc\x24\xa6\xbf\x3a\x5f\x75\x88\x69\xf9\x94\xcd\x0a\x1a\x5b\x78\x7c\x86\xb3\x95\x50\x9a\xb8\x91\x42\x2b\x8d\x0a\xb2\x58\xf5\x45\xae\x7d\xdf\x35\x68\x10\x48\x21\xa8\xe8\x7e\x9a\x70\xd2\x10\xca\x28\x5f\x63\x98\x04\x1c\xb7\xed\x51\xbe\x20\x99\xfe\x2a\xf1\xab\x0e\x33\x76\xd8\x34\x8a\x56\x61\x59\x1c\x35\xb3\xb7\x88\xaa\xa9\x32\xe3\x3d\x69\xf4\xae\x34\x7e\x47\x3a\xf3\xf6\xb8\x81\xbe\x9e\xe2\x3a\xcc\xc3\xba\xa3\x97\xa9\x2f\xb4\x71\x91\x3c\x2f\x08\x5c\xc3\xe2\x0b\x4c\xac\xf7\xea\xdc\x70\x70\x7d\xc2\xf4\x8f\x70\x35\x5e\x71\x2b\xfa\x55\x56\xff\x70\x89\x06\x34\x9a\xd8\x4c\xd8\x44\x44\x82\x1b\xe5\x25\x4a\xb8\x48\xe1\x3a\xae\xeb\x93\xc2\xc8\x09\x76\xaf\xaf\x1b\x1c\x9d\x30\xf3\x50\x4c\x63\xae\x87\x32\x95\x41\xb7\x1c\xc1\xaf\xb9\x9e\x97\xdc\xcb\xcd\x49\x09\x76\x98\x75\xc2\x67\xd4\x68\x3e\x5f\x76\x6d\xdd\x29\x6b\xae\x5f\xce\x7b\x57\xcb\xf9\xaa\x63\x19\xae\x49\xf3\x03\xd3\xc1\x1c\x2b\x45\xcb\xde\xae\x7e\xab\xca\x4c\xbf\x99\x42\x45\x31\xf1\xc7\xd0\x49\x3e\xf1\x8f\xa0\xf5\x0f\x40\xf4\x10\x2b\xa3\x80\xcf\xa0\x07\xd1\xce\x09\xa1\x56\x75\x57\xd0\x39\x56\xd0\x08\xf7\x3e\xda\x35\x6e\x18\xd4\xeb\xba\xa4\xee\xe5\x90\xe7\x6e\x90\x1c\xca\x7d\x8e\xd4\xc9\xa1\x7b\x84\xb6\x49\x0c\xd7\x66\xb6\xa3\x5c\x90\x12\x99\xa4\x89\xeb\x8a\x4c\x9a\x88\xef\xdc\x78\xe9\x04\x08\x13\x10\x26\x20\x4c\x40\x98\x80\x30\x01\x61\x02\xc2\x04\x84\x09\x08\x13\x10\x26\x20\x4c\x40\x98\x80\x30\x01\x61\x6e\x3f\x84\x59\x46\xb3\x82\x64\x4c\xa1\x09\x4e\x32\x4e\xa1\x31\x74\xb2\x8b\x23\x4c\x0b\xa1\x1e\x56\x83\xb6\x00\x21\xd7\x1c\x20\xbc\x1c\xbf\x4c\xc8\xdf\xc4\xa6\xef\x14\x26\x34\x00\x83\xb5\xe8\xc2\xcc\x1b\xd1\x1b\xf0\xeb\xb3\xaf\x8b\x03\xc6\x8f\x4a\xa1\x24\x20\x16\xb3\x7d\xaa\xe1\x12\x09\x0c\xd7\xa3\x43\x24\xa8\x1a\x7c\x7c\xf2\xd1\x45\xf5\x8a\xe8\x20\xcf\x77\xb9\x10\xcc\xde\x1a\xfb\x70\x6d\x64\x28\x79\xfc\x89\xfd\xe8\xb2\x74\x26\xab\x86\x6e\x60\xe8\xb6\xe5\x94\xf3\xcb\x23\xea\xf9\xc1\x16\x9e\x65\xbc\xf1\x5d\x27\xd4\x6d\xcf\x35\xa3\xa7\xa9\x1f\xa7\x5e\x7b\x71\x1f\xfe\x95\x1d\xe8\xe5\x4a\xb9\x57\x64\xb9\x99\xff\xd4\x49\xe6\xb5\x73\x71\xf9\x73\xae\x39\x1e\x97\xbf\x2d\xf2\xae\x9d\x10\x07\x10\x93\x4f\xbb\x2c\xbe\x2c\x21\x40\x2d\x6a\xbf\xcd\x7d\xe4\xb6\x67\xfa\xb5\x72\xfb\xb9\x3a\x89\x8b\xd1\xd4\x4c\x3a\x45\xce\xd0\x16\x5d\xa1\xd0\xc0\x11\x38\x59\x08\x78\x0d\xf0\x1a\xe0\xb5\x9b\x0d\xaf\xc1\xc9\x42\x38\x59\x08\x78\x0d\xf0\x1a\xe0\x35\xc0\x6b\xdb\x02\xaf\xcd\x4c\xa2\x22\x3e\x93\x7d\x30\xb6\xa1\x07\xd4\xa4\x6b\x2d\x34\xf9\xc6\x94\x6b\xd7\x9f\x25\x0e\x27\x20\x6f\x44\xae\x08\x27\x20\x37\xe2\x04\xe4\x6f\x0d\xa0\x13\xad\xa0\xd5\x88\x84\x56\xad\xe8\x14\x7e\x62\x00\xff\x68\x53\x2c\x35\x92\x79\xb2\xc3\x18\x57\x1b\x49\xa6\xb4\x5c\xb1\x39\x5b\x1a\x69\xf1\xd6\x59\x2b\x08\xaf\xb7\x3c\x72\x57\x5b\x32\xa1\xde\xe3\xa7\x88\x32\x6d\x0e\x44\x1a\x81\x38\xe6\x40\x9a\x80\x34\x01\x69\x02\xd2\x04\xa4\x09\x48\x13\x90\x26\x20\x4d\x40\x9a\x80\x34\x6d\x47\xd2\x04\x04\x07\x08\x0e\x10\x9c\xad\x21\x38\x6f\xdf\x87\xce\x0a\x82\xe3\xb9\xb6\x65\xac\xd6\x45\x2c\x6f\xe1\x71\xe4\xb9\xa6\x69\x05\x7e\x95\x5b\xc6\xa5\xaa\x59\xa6\x61\x80\x7f\x7b\x00\x7f\xb9\x1f\xbd\x54\x94\x13\x87\x2b\xff\x91\xce\x48\xce\x9c\x6b\x4e\xc6\x25\x16\x79\x89\x3d\xa2\x38\x47\xf8\x03\x73\xbc\x56\x32\x26\x79\xe2\x1c\xd4\xe4\xb5\x10\x92\xfc\x1a\x42\x92\xbf\xa1\x3d\xdb\x19\xc3\x27\x25\xdb\x11\x23\x45\x62\x9d\x26\x3d\x01\x11\xc7\x81\xd6\x00\xad\x01\x5a\x03\xb4\x06\x68\x0d\xd0\x1a\xa0\x35\x40\x6b\x80\xd6\x00\xad\xd9\x6a\x5a\x03\x1e\x3d\xc0\x83\x80\x07\xdd\xa8\x3c\xe8\x4f\xee\x44\xc7\x05\x0f\x92\xe3\x26\xc9\x64\x97\x5f\x76\xed\x6a\x85\xea\x61\xa8\x1b\x4b\x6c\x41\x8d\x0e\x98\xe5\x03\x7e\x2a\x10\x7f\xe0\x4e\xfc\xbe\x3e\x84\xe4\x83\x57\x96\x0b\x19\x31\xc8\xc4\xe5\xa8\x85\x93\x71\x7d\x99\x97\x37\x1e\x97\x97\x1b\x60\xb7\x2f\x88\xc7\x2f\x17\xea\x2f\x8b\xb3\x87\xbd\x8d\xe3\x33\x53\x12\xf1\x99\x0e\xf3\xf8\x4c\xe9\x8b\xe7\xf1\x09\x74\x0c\x1d\x6d\x19\x50\x29\x6a\x94\xe5\x82\x56\x5f\xbd\xb6\x00\x65\x4f\x73\x80\x72\x0b\xee\x2f\xd3\xf5\xa2\x93\xda\xce\x89\xf2\xb7\xd5\xd7\x48\xcd\xea\x9f\xf9\xf6\xae\x9a\xae\x39\xec\x53\xcf\xd6\x0d\xda\x79\xef\xdc\x27\x9f\xd8\xd4\x0e\x2a\xce\xa0\x73\xe8\x6c\x5d\x18\xb8\x2e\x7b\x08\x62\xc1\x41\x2c\xb8\x2e\x63\xc1\x7d\x2c\xd5\xda\x51\xae\x67\x02\x64\x56\x44\x8a\x9b\x42\x13\x49\xa4\xb8\xae\x4b\x8b\xa4\xce\x06\x8b\x95\x35\xa4\x9a\x57\x0d\x51\xf1\x1f\x6f\xab\x91\x3a\x27\xb9\xbe\xc4\xf9\xa0\x58\xb7\x3a\x17\x3f\xfb\x3c\xb6\x58\x6d\x9a\xf0\xb9\xab\xbe\xa0\x61\xfe\xfe\x43\xec\xcf\xd1\xbb\xd5\x8b\x15\xea\x97\xa9\x7a\xf5\x3e\xf5\x2a\x4f\xb5\x49\xcb\x96\x31\x5c\x7f\x5f\xf1\x02\x9a\x45\x33\x75\xa2\x6d\x14\x9d\xe8\x02\xe3\xcf\xb1\x42\x41\xbc\xb5\x13\x6f\x1f\xed\x43\xcf\xf6\xe1\x67\xfa\x32\x4f\xc7\x76\xc0\x93\x7d\x37\x8f\x78\xab\x83\x0c\xac\x9d\x39\x34\xe7\x20\xcc\x13\xca\xbe\xb0\xa7\xc9\x01\x75\x08\xf3\x6b\x62\xe0\x1e\xe4\xf4\x58\xec\xb1\xe8\x36\x7f\xd2\x71\x9d\x61\xf1\x34\xbf\x83\x84\xab\x1e\x0d\xc8\x81\x99\xc0\x75\xf8\xb0\x1c\x22\x0f\xb3\x81\x2f\xff\x5e\x88\xa6\x43\xf2\xe3\xc1\xd6\x72\xb7\xf8\x42\x0a\x3d\x9f\xc2\xcf\xa5\x32\x9f\x89\x55\xe8\x0f\xa7\xce\xba\xbe\xc1\xf7\x25\xca\x2e\x6f\x76\x97\x64\x17\xd9\x4f\x59\x32\x5e\xf3\x15\x1a\x99\x0e\x49\x85\xea\x0e\x33\xe2\x13\x5a\x3e\xac\x1b\xfc\xc3\xf9\x1e\x84\x6d\x19\x82\x93\x73\x2c\x4a\xdc\x15\xd9\xa6\x82\xd1\x7b\xd4\xf5\x6c\xaa\x11\xf1\x46\x66\x2c\xc5\x7d\xc9\xad\xb0\xa6\x0d\x10\xbf\x3e\xbb\x83\x57\xab\x26\x12\xc7\x26\xea\x9b\x1b\x2d\xf9\x5b\x47\x0b\xe0\xed\x80\x66\x4e\xa1\x31\x7c\x32\x7b\x3c\x26\x05\x77\xab\x27\x88\xea\xcb\x6e\x3c\x3a\xd4\xf3\x10\x1b\x7f\x32\x8c\x26\x1b\xf2\x35\x15\x5a\xed\x71\xb3\x19\xe8\xbb\xb6\x4d\x7d\x9f\x2e\x5b\x01\xef\x19\x19\x50\xe3\x1d\xc3\xf8\x1b\x3b\x6a\xc2\x95\x16\x32\xfb\xb9\xa9\x53\xbb\x86\x4d\xc4\x45\xcc\xcb\x22\x72\x87\xd8\x6d\x49\xcc\x52\x65\x2b\xba\xf1\xe6\x1e\x6b\xd2\xcf\xa6\xd0\x33\x29\xfc\x74\x2a\xf3\xa1\x78\x2e\xbd\x35\xb5\x20\x64\x3e\x07\xbe\x8f\x71\x70\x5a\x62\x7f\xe9\x46\xa8\x11\x32\xc5\xfe\x1b\xfd\x5e\xd1\x2d\x2e\x92\x02\x62\xd8\xd5\x20\xa4\xfe\xb0\xfc\x50\x23\x9a\x3c\xb6\x75\x95\x92\xc1\xf8\x8b\x06\x35\x32\x19\x6f\xe0\x6b\x64\xce\xd6\x1d\x47\x4a\x1b\x6e\xa7\xea\x36\x5b\x20\x0a\x5a\xe1\x84\x96\xdd\xc1\x5f\xa9\xce\x94\xe2\x53\x29\xf4\x81\x14\x7e\x7f\x2a\xf3\xde\xb8\xba\x8f\xc7\xb5\x8d\xb7\x66\x4b\x51\xbd\xd9\x2b\xc8\x94\xa8\x2a\xeb\x72\x2f\x88\xaa\x25\xb1\x1e\x17\x01\x86\xee\x08\xb8\x2a\x4c\xe2\x75\xd4\xf0\x16\xf1\x9a\x9a\xc9\xbc\x88\xce\x8b\xc9\x3c\x89\x8a\x7c\x32\x3f\x80\xd6\x58\xbf\xd5\x68\xbc\x05\xad\xb1\xbb\xaf\xd5\x80\xfc\xc1\xf6\xf3\xfd\x04\x3e\x26\x66\x76\x93\xb7\x37\x6c\xb6\xab\x11\x76\x32\xff\x6b\x57\xdd\x78\x3f\x10\xd9\x8f\x6d\x87\xbc\x26\xef\xdc\x9a\x51\xbf\x4e\x25\xab\x5d\x27\x81\x92\x05\x36\x64\x97\x36\xe4\x7f\x48\xf5\x56\x5c\xcc\x09\x73\x71\x1a\x3d\x94\x98\x8b\x5b\x25\x80\x98\xad\xd7\xa1\x00\x6a\x0c\xdc\xd5\x89\x30\xca\x3d\xb3\xbb\x4e\x00\xdd\x25\xe3\x83\xeb\xcd\x64\xce\x70\x7d\x70\xf0\xcd\x14\x39\x97\xd0\x3c\x9a\x53\x45\x4e\xae\x88\xce\x74\x61\xd5\x4d\xf2\x6f\xb8\xc8\x95\xed\x00\x04\x4f\x3b\xc1\xf3\xb5\x34\xfa\x4a\x1a\x7f\x39\x9d\xf9\x52\xdc\x40\x1f\x4f\x5f\x52\x19\xbf\xe5\x90\x40\x70\x7a\x52\xa2\x8b\xae\xd8\x94\x8b\x76\xce\x12\x8f\x31\xb9\x59\xc9\xab\xa8\x08\x16\xa6\xe7\x3b\xb4\xac\xf3\x86\x90\x98\x5f\x15\x40\x62\x0f\x3d\xee\x02\x39\x3c\xad\x4a\x85\x9a\x4c\xc4\xd9\xab\xd2\xf1\x48\x75\x2b\x73\x2c\x7b\x48\xd2\x7f\xbe\x4b\x44\xca\x3e\x5b\x53\x3d\xea\x5b\xae\x19\xef\x62\x24\xcb\x2b\x33\xae\xe2\xd6\xa8\x06\xac\x92\xea\xfe\x92\xce\x9e\x8c\x3e\x48\xbe\x64\x51\x51\x78\x2c\xf6\x00\xaf\xa7\x30\x8b\x9a\xd4\x31\x8b\x79\x15\xe6\x78\x0d\x9a\xc5\x3f\xfc\x42\x1a\xbd\x90\xc6\xcf\xa7\x33\xcf\xc5\xcd\xfc\x54\x7a\x52\xf1\xd4\xf4\x6c\xaa\x07\x34\xde\xfa\x9f\xf3\x5d\x4f\x2f\xf3\x0e\x10\x4e\x98\x43\xa2\x0d\x84\x1d\x1a\x7d\x4b\xe2\xea\x29\x54\xae\xe3\x1a\x51\x54\x53\x93\x7a\xd4\x31\xa9\x13\x26\x5e\x24\x94\xb8\xbe\xb7\xa4\x3b\xec\x8b\x58\xb3\xfa\x55\x9a\x5f\xd4\xed\xc8\xeb\x2a\x2b\xae\x66\xc9\xa2\xe5\xe8\xb6\xf5\x78\x64\xfe\x95\x28\xd1\x4d\x93\xef\x0a\xe7\xc5\x6e\x89\x99\xec\xc6\x89\xc2\x07\x83\xe4\x21\xe1\xe7\xa4\x91\x29\x8b\x0f\x67\xa5\xe2\xae\xdf\xf8\x65\x7c\xd3\x5f\xb8\x1c\x0a\x37\x2b\x3e\xd9\xdc\x70\x49\xcb\xee\x16\xf5\x99\x8c\x3e\x24\xa8\xd1\x75\xdf\xd6\x8f\xde\xd2\x8f\x9f\xe8\xcf\x7c\x2f\x06\x13\x2f\xf6\x3d\x22\xfd\x20\xd8\x94\x5a\x72\x57\x48\x59\xf7\x4b\x7a\xb9\x26\x21\x42\x3c\x2f\xa8\xbf\xe8\xfa\x15\xd6\x16\x4d\x6b\x7a\xb1\xee\xe5\xad\x2b\xca\xc7\x73\x34\x18\x85\x83\x26\x1b\xa7\x26\x35\x2c\x33\x71\x68\xe2\xbe\x31\xc2\x6c\x8e\x5a\x97\x59\xc3\xd2\x73\x24\xf2\x7e\xd1\x94\x66\x8c\xfc\x26\xa2\x3d\xa8\xc4\x78\xa8\x7d\x99\x46\x44\x6a\x0b\xbe\x1a\xab\xc2\x61\x50\x7c\xc3\x20\x19\x96\x1d\x5f\x3b\x30\x82\x31\x32\x58\xd4\x8d\xab\x6c\x75\x71\x4c\x76\x97\x6e\xdb\xee\x0a\xbf\xa9\xae\xe1\x84\xb3\x92\x1c\xfa\xb5\x85\x44\x5f\x50\x8a\x4b\x1a\x23\x83\x67\x5d\x9f\x2a\xc5\x12\x43\x0f\x0c\xdd\x64\x5f\x2f\xdb\x87\x0b\x5b\x51\x5e\x20\xa4\x57\x43\x81\x8b\x71\x19\x5a\xf6\x65\x5e\xfd\xb8\x51\xb5\x84\x4f\xad\x41\x9a\x7b\x1b\xc4\x73\x5e\xe4\x13\x39\x8f\xa6\x95\x7c\x22\xd7\x56\x66\xa4\x28\x90\xe6\x8a\xc2\xad\x78\xa7\x68\xa6\x8d\xd5\x15\x8a\xff\x74\x5b\x9d\xae\x50\x68\xc0\xce\x6d\xad\x96\x21\x0e\x31\x36\x5d\x81\x00\xec\x7c\xe3\x29\x26\x80\x9d\x01\x3b\x6f\x31\x76\xde\x64\x52\xd5\x0e\x0d\x6f\xa8\xf8\x9f\x39\x8d\x4e\xe1\xb1\xec\xc9\x98\x3b\xdf\xa3\x72\xe7\xc6\x12\x6e\x84\xa0\x55\xf8\xcb\xe7\xd1\xfe\x16\x7e\x3b\x82\x72\x1b\x81\xe5\xb8\x26\x0d\xf0\x27\xcf\xe3\x9f\xd8\x8b\xee\x48\x36\x65\x25\xbf\x16\x0e\xdb\xbe\xf4\x80\x8b\xf4\xec\x28\x06\xf4\xc4\xc2\xf4\x05\xd7\xa4\xb9\x3b\xd9\x6d\xf1\x26\x2c\x7f\x54\x5e\xda\xe6\x67\xa6\x20\x63\x17\x1c\x1d\x82\xa3\x43\x70\x74\xe8\xe6\x39\x3a\x04\x19\xbb\x20\x63\x17\x1c\x1d\x82\xa3\x43\x70\x74\x08\x8e\x0e\x6d\x8b\xa3\x43\x90\xb1\xeb\x46\x3c\x87\x03\x19\xbb\x36\x22\x63\x57\xd7\x7e\x82\x92\xd9\x08\x9b\x7c\xd6\x0a\xae\x25\xdb\xb7\x88\xe9\xf1\xba\xf6\xac\xe6\x38\xbe\xbf\x95\xfb\x50\x53\xc7\x42\x59\x3d\x94\xfd\xc9\x5b\x1b\x49\xc4\x6e\xb1\x0e\x10\x3d\x86\x0e\x77\x89\x5f\x36\x16\x3b\x08\x4a\x70\x16\x4d\xa2\x62\x1d\x1c\x1f\x41\x87\xd7\xdb\xf0\x00\xc5\xc1\x4d\xa8\x4b\x37\xa1\x6f\xa7\xd0\x84\x98\xfa\x0f\xa0\x51\x3e\xf5\x8f\xa2\x2e\x46\x20\x3a\x27\xdc\x83\xc6\xd1\xe9\xc4\x3d\xa8\xbb\x92\xa6\xc5\x46\x61\x11\x9d\x51\x36\x0a\xbb\x2b\xaa\x7b\x59\xe4\xb9\x9d\xcb\xa2\x5a\x21\xd3\xa1\x64\xca\x7d\x8e\x34\xca\xa2\xbb\xe5\x36\xb1\xb2\xe7\xee\x2e\xc6\x72\x69\xbf\xb8\x5a\x27\x97\xe2\x5b\x37\x46\x42\x01\xc7\x04\x8e\x09\x1c\x13\x38\x26\x70\x4c\xe0\x98\xc0\x31\x81\x63\x02\xc7\x04\x8e\x09\x1c\x13\x38\x26\x70\x4c\xe0\x98\xdb\x8f\x63\x96\x37\xc9\x9b\x39\x02\x08\x9d\x01\x82\x4e\xd8\x64\x03\x36\x78\x34\xd7\x1c\x4e\xbc\x1c\xbf\x4c\xc8\xf6\x04\x12\xa0\xde\x3b\x78\xfd\xca\xed\xa8\x90\xd7\x3d\x2b\xbf\xdc\xf2\xc4\xb2\xe7\x9a\x71\x48\x26\x11\xa5\x09\xff\xfd\x6d\xf8\x3d\x69\xb4\xd3\x70\x7d\x1e\x7e\x63\xbf\xe1\x3a\x0e\x93\x91\x0f\x4d\x5d\x4a\xbc\x2e\xd9\xea\xc0\x6f\x97\x81\xb8\x73\x03\xf2\xb6\x09\xd7\xa7\x97\x0b\x0f\xd1\xb0\x26\x60\xb6\x38\xb3\x3d\xd2\x97\xcb\xe7\x44\x0c\xa5\xe3\xe8\x6e\xd1\x95\xaf\x44\x2f\xe7\x5d\xf9\x12\x74\xdb\x27\x52\xbb\x90\xac\x7d\x5b\xe8\xb3\xb7\x79\xbb\x22\xbc\x4b\xd6\x03\x3d\x3a\xdf\xbe\x5b\xf3\x78\x58\x76\x6b\x36\x9b\xc4\x94\x16\x95\x95\x67\xa8\x6a\xce\xaf\x67\xdf\xa7\x34\xcc\x7d\x51\xc3\xcc\x5d\x5c\x58\xab\x65\xf6\xd5\xb4\xcc\x9c\x1b\xdc\x90\x4d\x33\xf3\x0b\x29\xf4\x73\x29\xfc\x9e\x54\xe6\x5d\xb1\xa4\x09\x23\xc4\xa4\xb3\x79\xc8\x04\xb5\x30\x93\x39\xfc\xa0\x46\x35\x8c\xd8\x4f\xa5\xa2\x3b\x75\xc7\x92\x54\x8a\xca\x9e\xe5\xa2\xd1\xe7\x5c\x85\x5f\x72\x9d\xba\xa2\xb9\xbe\xec\x9a\x5a\xf6\xd6\xf8\x67\x15\x91\xae\x19\x58\xa0\xfe\xcb\xb6\xc2\xbd\xf3\xc9\x14\xfa\xd1\x14\xfe\xe1\xcc\xbf\x8c\x5a\xef\xca\x42\x68\x52\x5f\x7c\xba\x5f\xa5\xf5\xec\x3f\x90\x57\x79\x6b\x95\xd8\x7a\x26\x20\x3e\x4d\xce\x80\xc9\x71\x28\x56\x1d\xb5\x71\xb9\x3a\x9c\xbd\x45\x14\x51\x23\x7b\x7f\x2c\x85\x7e\x04\xbf\x39\xf3\x2f\xd4\x4a\x58\x4e\x54\x87\xa1\xf8\x2d\x62\xe5\x0a\x42\xdd\x31\x75\x9f\x69\x9b\x4c\x2a\x25\xab\x82\xec\x0c\x59\x13\x2b\x68\x52\x07\x7e\xf0\x4a\xcb\xee\x08\xd8\x0b\x6a\xea\xd0\xb4\x25\xd8\x8a\xda\xba\x25\x5c\x21\x13\xaf\xa5\x25\xdc\x6a\xed\x41\xfd\x6f\xa6\xd0\x37\x52\xf8\xeb\xa9\xcc\x5f\xc4\xe3\xf9\xf7\x52\x97\x2e\xbd\xb6\x55\x2d\x74\xc2\xc4\x71\x7c\x60\xcc\xb6\x5d\x71\x34\xad\x69\x15\x22\xbd\xdb\xd3\x03\xa6\x11\x85\x4b\xbe\x5b\x2d\x2f\xc5\x26\x92\x18\xd4\x7e\xd5\xe1\xfa\x67\x20\x16\x67\x56\xbc\x15\x28\x25\x4b\xd3\x79\xc5\xf5\xaf\x52\x9f\x38\xae\x49\x23\x72\xd2\x50\x46\xd3\xa6\xef\x63\xcb\x85\x1a\xc8\xef\x5b\x69\xb4\x27\x0a\x76\x61\xf9\xb4\x6c\xf1\x13\x21\x6c\x99\x96\x8e\xc1\xf8\xf3\x69\xfc\xfb\x69\x74\x47\xdd\xe5\x4c\xa6\xcc\x4f\x72\x2d\xba\x7e\x25\xd6\x64\x74\xc2\xe5\x47\x8e\x5d\x1b\xaf\xbd\x7f\x7c\x6e\xfa\x21\x76\xad\x77\x94\xbb\xa1\xa0\xd1\x86\x82\x46\x3b\x29\x68\xc6\x42\x17\x84\xf0\x7d\x08\x4d\x71\xe1\x7b\x1a\x9d\x42\x63\x5d\xa8\x18\xd1\x37\xb6\x13\xd7\xf8\x6f\xb3\x68\x5f\x43\x84\x91\x28\x11\xaa\x49\x3d\xdb\x5d\xe5\x81\x13\xf1\x67\xb2\xf8\x77\xfa\x6b\x0e\x29\x8d\x64\x96\x3b\xcb\x94\x31\x19\x17\xd3\xa3\x04\x19\xda\x4a\xed\x49\xa7\x91\xe4\x0d\x90\xd2\xb4\xb3\x94\xa6\x0b\xed\xd7\xe0\xc3\x58\xab\xd3\x28\x47\x50\xe3\xf9\x86\xa4\xe9\x21\x7d\x29\xec\x06\xc1\x6e\x10\xec\x06\xc1\x6e\x10\x24\xc4\x80\x84\x18\xb0\x1b\x04\xbb\x41\xb0\x1b\x04\xbb\x41\xdb\x70\x37\x08\xd2\x55\xc0\xf6\x12\xa4\xab\xd8\xa2\x74\x15\xff\x94\x46\xf7\x48\xe0\x22\xcd\xfc\x1a\xc6\xb5\x5c\xc8\xe3\x3f\x49\xe3\x3f\x4a\xa3\xdd\x35\xd7\xaf\x2c\x17\x32\xaf\x2a\xd3\xb0\x76\x99\x13\x5f\x91\xbb\xa7\x4c\xc3\x71\xf5\xee\xcb\x85\xf1\xb9\xe9\xc8\xb0\xea\x61\x88\xf1\x9e\x81\x2e\x0f\xbd\x46\x90\x8d\x0b\x68\x96\x93\x0d\xee\xc5\xde\x1d\xe8\x8a\xbe\xb3\x93\xa3\x03\xf8\xb7\x06\xd0\x89\xb8\xf9\xdd\xc0\xd0\x6d\xcb\x29\xe7\x97\x47\xd4\x14\xb2\xfc\x11\xd7\x09\x75\xdb\x73\xcd\xe8\x36\xea\x07\xf8\x89\x01\xfc\xa3\x3b\xd0\xcb\x95\x27\xaf\xc8\x27\x33\x4f\xa6\x3a\x63\x61\xe7\xe2\xb2\xe7\x5c\x73\x3c\x2e\xbb\x47\x60\xac\x28\xc0\x58\x52\xbf\xcb\xa2\x7a\x2d\xde\x7a\x7d\xc2\xb2\x6d\x9a\x48\xb6\xdc\x9e\xa8\x4d\xe2\x62\x04\xd0\x92\x2e\x92\x1c\xad\x45\x17\x29\xbb\x5c\x23\x90\x51\x16\x00\x1a\x00\x34\x00\x68\x00\xd0\x00\xa0\x01\x40\x03\x80\x06\x00\x0d\x00\x1a\x00\x34\x00\x68\x00\xd0\x00\xa0\xdd\x3c\x00\xed\x9f\xcf\xa3\x03\x82\xe0\x38\xae\xd9\x10\x34\x52\x7a\x9c\x19\xb6\x1e\x04\x34\xc0\x9f\x3f\x8f\xff\xd5\x5e\x74\x3b\xbb\x33\x3e\x21\x9d\x5b\x3b\x6e\xe4\xbc\x28\x61\x82\x95\x90\xbb\x8b\xdd\x7b\xc1\x35\xa3\xa3\xd2\xea\xc5\x6d\x4e\x4a\xe0\xd8\x35\x70\x02\xe0\x04\xc0\x09\x6e\x1e\x4e\x00\xc7\xae\xe1\xd8\x35\x70\x02\xe0\x04\xc0\x09\x80\x13\x6c\x0b\x4e\x00\xc7\xae\x6f\x44\xb3\x1e\x8e\x5d\x6f\xc4\xb1\x6b\x53\x04\x6d\x3b\xcc\x83\xb6\xa5\x2f\x9e\xc7\xa3\xe8\x04\x3a\xd6\x32\x5c\x1b\xb7\xfd\xa3\x58\x6d\xaa\x55\xde\x93\x00\x92\xaf\x6f\xbf\x97\x7f\x12\x1f\x97\x7b\xf9\x0a\x86\x90\x7b\xf9\x6a\x7d\x1a\x4f\x65\x67\xdf\x7b\x6b\x1d\x91\x78\x65\x1c\x3f\xb2\x06\x3e\xec\x11\x3f\x6f\x34\x7e\x10\xb4\xe0\x1c\x3a\x8b\x26\xeb\xc2\x48\x1e\x45\x23\xeb\xef\x00\x08\x24\x09\x81\x24\xbb\x0c\x24\xf9\x8f\x29\x34\x25\x84\xc0\x83\xe8\x01\x2e\x04\x8e\xa1\xae\xc6\x20\x9a\x11\xa1\x24\x27\xd0\x78\x12\x4a\xb2\xdb\xb2\xce\x8b\x60\x92\x93\xa8\xa8\x04\x93\xec\xb6\xb0\x6b\x0d\x27\xb9\xa1\x92\x29\xf7\x79\x52\x27\x99\xf6\x36\x8d\x26\x59\x23\xa5\x06\xc5\x2d\x8a\x94\x4a\xe2\x49\x6e\xa0\xbc\x02\xba\x09\x74\x13\xe8\x26\xd0\x4d\xa0\x9b\x40\x37\x81\x6e\x02\xdd\x04\xba\x09\x74\x13\xe8\x26\xd0\x4d\xa0\x9b\x40\x37\xb7\x1f\xdd\x2c\xf7\x38\x13\x7e\x3b\x8c\xb0\xa1\x98\x60\x6b\xc3\x4a\x7e\x70\x3f\xfa\x01\xe1\xff\xe5\x97\x74\x43\x6b\x71\x8a\x52\x3d\xcf\xd7\x22\xf8\xa4\xef\xda\xb4\x64\x39\xa6\xe5\x94\xa3\x20\x94\xf8\x3f\xef\xc3\x1f\xda\x81\xee\x64\x25\x8f\xd7\x1d\xbf\x14\x40\xe4\x13\xf2\x9c\x9f\x7a\xb8\xcf\x89\x44\x6e\xec\x42\xe6\xda\xb4\x28\x4a\xee\xc9\xc1\xbe\xa1\x44\xc5\xe2\x6a\xa4\x5c\x90\x99\x96\x96\xe8\x8e\x83\x35\xea\xba\x52\xb6\x96\x1b\xe1\xaf\x9b\xaf\xff\x28\x89\x6b\x92\x78\x90\x4a\xbd\xb7\xb9\x73\xdb\x96\x1c\x03\x6c\x9d\x23\x7c\x45\xe4\x08\xb7\xda\xcf\xba\xb3\x78\x52\xce\xba\x96\xa3\x37\x9a\x83\x49\x67\x34\xc9\x18\x0e\xf8\x0b\xf0\x17\xe0\x2f\xc0\x5f\x37\x0d\xfe\x82\x43\x80\x70\x08\x10\xf0\x17\xe0\x2f\xc0\x5f\x80\xbf\xb6\x05\xfe\x9a\x39\x81\x8e\xe1\xa3\xd9\x91\x38\x28\xfb\xab\xd4\x98\xee\x8a\xf6\xbe\x15\xe1\xdc\xe1\x80\x22\xb0\x3e\x38\xa0\xb8\x35\x07\x14\xbf\x30\x80\x8e\x44\x79\x4f\xd6\x06\x50\xb2\xb0\x37\x55\xdd\x50\x0f\xf0\xcf\x0d\xe0\x7f\xdf\x9f\x24\xf8\x58\xed\x2c\xa0\x54\x64\xf8\xbd\x9a\x15\xd2\xa3\x30\x52\xf7\xf1\x07\x44\xc6\x10\x85\x0e\xa9\x6f\x9a\xb5\x82\x10\x18\x51\x97\xa1\xa2\x2e\xb6\xe7\x44\x43\x38\x57\x9f\x00\xa5\xa6\xfd\x6b\xb3\x9f\x00\x0d\x02\x1a\x04\x34\x08\x68\x10\xd0\x20\xa0\x41\x40\x83\x80\x06\x01\x0d\x02\x1a\x04\x34\x68\x53\x69\x10\x30\x1d\x60\x3a\xc0\x74\x6e\x54\xa6\xf3\x81\x59\x91\xcb\x36\x4e\x93\xd7\x8a\xe9\x04\xa1\x1e\xd2\xc5\xaa\x1d\xd0\x30\xc0\x7f\x71\x1e\x7f\x97\xa0\x9d\x32\x67\x5e\xe6\xe0\xda\x81\xa7\x16\xe4\xa3\x0b\x34\xcc\xdd\xcb\x6e\x15\x09\xee\x12\x00\xa3\xdc\xb0\xcd\xd1\x0b\x9c\xce\x02\x20\x01\x40\x02\x80\xc4\xcd\x03\x24\xe0\x74\x16\x9c\xce\x02\x20\x01\x40\x02\x80\x04\x00\x89\x6d\x01\x24\xe0\x74\xd6\x8d\x68\xdd\xc3\xe9\xac\x8d\x38\x9d\xf5\x06\x34\x21\x1c\x05\x1e\x40\xa3\xdc\x51\xe0\x28\x1a\x41\x87\x5b\x46\x77\x61\xf6\x7c\x74\x16\x4b\xda\xe3\x3d\x89\x3a\xb5\x2e\xb7\x00\x25\x05\xbb\x52\x8f\x1a\xb7\x80\xec\x37\x77\x25\xf0\xe1\x15\x71\x8c\x29\x95\x33\xec\x15\xbf\x6e\x06\x69\x10\x60\xa0\x88\xce\xa0\x07\xeb\xc2\x4c\x69\x68\x68\x3d\x6d\x0d\x01\xa6\x20\xc0\x54\x97\x01\xa6\xfe\x22\x85\x4e\x8b\x99\x7e\x02\x1d\xe3\x33\xfd\x30\x5a\xe7\xe8\x43\x93\x22\xb4\xd4\x29\x34\x96\x84\x96\x5a\x7f\x29\x53\x22\xa8\xd4\x83\xe8\x01\x25\xa8\xd4\xfa\x8b\xb9\xd6\x70\x52\x9d\x89\x9c\xb5\xc5\x8c\x2a\x90\x72\xff\x59\xe1\x9d\xa4\x69\xf0\x28\x55\xfc\x1c\x12\x77\x08\xf1\x93\x84\x8d\xda\x0c\x41\x04\x84\x12\x08\x25\x10\x4a\x20\x94\x40\x28\x81\x50\x02\xa1\x04\x42\x09\x84\x12\x08\x25\x10\x4a\x20\x94\x40\x28\x81\x50\x6e\x3f\x42\xb9\xd9\xf1\xa3\x7a\x8d\x22\xd7\x15\x32\xea\xfa\x73\xa5\xc4\x5f\x19\x40\x63\x35\xfe\x61\x25\x1a\xea\x23\x6b\x1f\xff\x33\xa9\x67\xbb\xab\x4c\x9f\x08\xf0\xbf\x1e\xc0\xbf\xd9\x8f\x6e\x97\xe4\x84\x3f\x9c\x59\xee\xec\x00\xe0\x64\x5c\x4c\x8f\x4e\xff\x1d\xe0\x0f\x08\x26\xc3\x6b\x92\xe0\x98\xe4\x5d\x70\xfe\xef\x1a\xce\xff\x2d\xb4\x9f\x5d\x87\xb1\xd6\x38\xbb\x92\xe6\xaf\x8f\x08\x35\x02\x67\x00\x01\x68\x01\xd0\x02\xa0\x75\x13\x01\x2d\x38\x03\x08\x67\x00\x01\x68\x01\xd0\x02\xa0\x05\x40\x6b\x5b\x00\xad\xeb\xd0\x70\x85\x33\x80\x37\x22\x83\x83\x33\x80\x1b\x71\x06\xf0\x4f\xf7\xa1\x89\xf5\x32\x1e\xf5\x38\x60\x14\x63\xfc\x9d\xfb\xf0\x77\xea\x59\x4f\x47\x61\xc5\x15\xb8\xb6\x2d\xc2\x8a\xef\x6f\x0d\x8a\xae\x9f\xa3\x8a\x5b\x42\x89\x2e\xb5\x07\x40\x05\x9c\xef\x18\xaf\x0a\x02\xd4\x36\x3e\x39\x20\x22\x40\x44\x80\x88\x00\x11\x01\x22\x02\x44\x04\x88\x08\x10\x11\x20\x22\x40\x44\x80\x88\x36\x17\x11\xad\x19\x34\x5c\x51\xef\x21\x68\x38\xc0\x25\x80\x4b\x37\x0f\x5c\xfa\xdb\x87\xd1\xe1\x08\x2e\x59\x3e\x2d\x5b\x41\xe8\x37\x4d\x69\xc7\xee\xa1\xfe\xb2\x65\xd0\x00\xff\xc6\xc3\xf8\xbf\xec\x45\xaf\xaa\x7b\x22\xce\x55\x77\x60\xed\x78\x53\xe3\x73\xd3\x0b\xa2\xa4\xdc\x3e\x11\x6e\xaa\xa6\x18\x99\x1d\x2e\xb9\x6b\x9b\x83\x1c\x38\xd1\x05\x74\x03\xe8\x06\xd0\x8d\x9b\x87\x6e\xc0\x89\x2e\x38\xd1\x05\x74\x03\xe8\x06\xd0\x0d\xa0\x1b\xdb\x82\x6e\xc0\x89\xae\x1b\xd1\xe0\x87\x13\x5d\x1b\x71\xa2\xeb\x89\x54\x4b\x2f\x01\x54\x16\x0e\x09\x6f\x44\x6f\xe0\x0e\x09\x3f\x80\x2e\xa3\x4b\x4d\x1d\x12\x98\x61\x3c\xac\x97\xcb\xac\x19\x43\xd7\x4f\x7c\x12\xea\x21\x82\x44\x02\x5a\x62\xcd\xcf\x5a\x41\xd8\x69\x60\x2a\xda\xde\x5d\xa1\x88\xcf\x34\x24\x29\x17\x3e\x0b\xc9\x2b\x93\x48\x31\xcd\x08\x07\xca\xfe\x3b\xd4\x9a\x65\xc4\xe1\xab\x1c\x95\x5b\xdc\x17\x85\xaf\xda\x24\x72\x21\x40\xc3\x22\x32\x51\xa9\x2e\x86\xd5\x3c\x9a\xeb\x75\x0f\x41\x9c\x2b\x88\x73\xd5\x65\x9c\xab\x3f\x48\x23\x43\xc8\x90\xd7\xa3\xd7\x71\x19\x72\x09\x6d\xc0\x08\x45\x4b\x22\x16\x96\x8e\xae\x24\xb1\xb0\x36\xe6\x4d\x96\x88\x97\x55\x42\x6f\x54\xe2\x65\x6d\xcc\xab\xda\x39\x6f\x75\x26\x0d\xd7\x96\x75\xed\x65\x65\xbb\xd0\x5d\xb9\xbf\x26\xad\xa5\xe5\xbd\x4d\x23\x6f\x29\x82\xf3\x70\x14\x78\xab\x99\xe0\x4c\x02\x71\x6d\x98\x08\x05\x56\x0b\xac\x16\x58\x2d\xb0\x5a\x60\xb5\xc0\x6a\x81\xd5\x02\xab\x05\x56\x0b\xac\x16\x58\x2d\xb0\x5a\x60\xb5\xc0\x6a\xb7\x1f\xab\xdd\xec\xe8\x5b\xeb\x08\x96\xb5\x49\x34\xa2\xf7\x11\xb3\xfe\x64\x16\xdd\xdf\xe4\x34\x65\x07\xb1\xb2\x7e\x71\x16\xff\xd4\xde\xba\xf3\x93\x6d\x5c\xdd\x92\xc0\x49\xb9\x81\x24\xb3\x62\xcb\xe0\x56\xe0\xe9\x06\xf4\x04\xe8\x09\xd0\x13\xa0\x27\x40\x4f\x80\x9e\x00\x3d\x01\x7a\x02\xf4\x04\xe8\x09\xd0\x13\xa0\x27\x40\x4f\x80\x9e\xac\x97\x9e\x94\xd0\x43\x82\x9e\x9c\x41\x0f\x72\x7a\x72\x02\x1d\x43\x47\xdb\xa5\x39\xe3\xc6\xb9\x56\x1b\x70\xfa\x9a\x33\x2c\x6e\x44\xe0\xe5\xec\xcf\xdc\x5a\x07\x23\x5e\x1e\xa7\x5a\x54\xb8\xc3\x7e\x35\xd3\xe2\xc6\x93\x07\x01\x0a\xce\xa2\x49\x54\xac\xf3\x54\xeb\x20\xb3\x65\x7d\xdb\x83\x27\x1a\x78\xa2\x75\xe9\x89\xf6\xed\x54\x57\xb9\x55\xeb\x47\x20\x3a\x27\x3c\xcd\xc6\xd1\xe9\xc4\xd3\xac\xbb\x92\xa6\x85\x27\x59\x11\x9d\x51\x3c\xc9\xba\x2b\xaa\x9d\x38\xea\x4c\xdc\xb4\x17\x31\xaa\x40\x6a\xeb\x17\xf6\xfb\xa4\x4e\x1c\x35\x77\x06\x53\x44\x53\x5e\xcd\xc2\xc8\x9f\x69\x96\x8a\x71\xc3\x84\x14\xd0\x4c\xa0\x99\x40\x33\x81\x66\x02\xcd\x04\x9a\x09\x34\x13\x68\x26\xd0\x4c\xa0\x99\x40\x33\x81\x66\x02\xcd\x04\x9a\xb9\xfd\x68\xe6\x76\xf6\x05\xdb\x90\xbc\x72\xd7\x5f\xdc\x41\xfc\x67\x03\x68\x74\xdd\xd9\x18\x75\x5a\x61\xda\x64\x18\xe0\x0f\x0e\xe0\xff\x58\x1f\xa0\xbf\xda\x61\x32\x46\x5e\x4a\xaf\x02\xf4\x6b\xb9\xc1\x35\x72\x31\x46\xaf\x82\x54\x8c\xcd\x67\xce\x7c\xfb\xd9\x90\xc7\xc3\x6b\xc2\x36\x39\x3d\xa2\x96\x46\x1d\xa5\x77\x84\x30\xfb\x00\xb4\x00\x68\x01\xd0\xba\x79\x80\x16\x84\xd9\x87\x30\xfb\x00\xb4\x00\x68\x01\xd0\x02\xa0\xb5\x2d\x80\xd6\x75\x68\xb4\x42\xb0\xfc\x1b\x91\xc1\x41\xb0\xfc\x8d\x08\x96\xff\x9f\xf6\xa1\x73\x82\xef\xf8\x25\xdd\xd0\x22\xd3\xbf\x69\xbc\x7c\x01\x7d\x0c\xbb\x1a\x84\xcc\x34\xb1\x69\xc9\x72\x4c\xcb\x29\xc7\xe9\x18\xff\x6e\x00\x7f\x64\x07\xba\x93\x95\x34\xae\x16\x14\x07\x53\xfa\x8d\x4e\x72\x33\x4e\x88\x17\xcc\xbb\x36\x2d\x8a\x17\x6c\x8b\x14\x8d\xe2\xf3\xe7\xeb\xbf\x2d\x0a\xf4\xd4\x50\x69\xe0\x48\x8d\x1c\xa9\x5d\x5a\xc5\x47\xbd\xf6\xa0\xe9\x61\x7c\x5e\x72\xa5\x96\x23\x56\xc2\xa6\xc6\x3e\x69\x3c\x9e\x0b\x84\x09\x08\x13\x10\x26\x20\x4c\x40\x98\x80\x30\x01\x61\x02\xc2\x04\x84\x09\x08\x13\x10\xa6\xcd\x25\x4c\xa7\xd1\x29\x3c\x96\x3d\x19\x13\xa6\x7b\xd4\x44\x8e\x8d\x4a\x7c\x63\x3e\x47\x00\x48\x00\x90\x00\x20\x6d\x0d\x40\x7a\x66\x1f\x7a\xf5\xfa\x00\x52\x0b\xaf\x21\x15\x28\xe1\x3f\x18\xc0\xff\xb3\x7f\x2d\x92\xb4\xd2\x99\x13\x51\xaf\x21\x92\x96\x3b\xb6\x26\x06\x4a\x7c\x8a\x94\x37\x5f\x1f\x5e\x45\x2d\x53\x68\xf4\x1c\x13\x45\x34\xa8\x13\x0f\xa0\x47\xad\xf6\x44\xe8\x2c\x9e\xec\x90\x08\x01\x0a\x02\x14\x04\x28\x08\x50\x10\xa0\x20\x40\x41\x80\x82\x00\x05\x01\x0a\x02\x14\x04\x28\x68\x1b\xa1\x20\x70\x36\x02\x56\x04\xac\xe8\x46\x65\x45\xff\xbc\x0f\xcd\x34\x1c\x26\x6b\x83\x85\x98\x3c\xf6\x5d\x26\x0d\x99\x71\x10\x70\xde\x20\xdd\x8d\x3e\xb2\x0f\xff\xe4\x8e\x9a\xc3\x65\x9d\x7a\x18\xc5\x65\xce\xcb\x32\xb7\x85\x87\xd1\x50\xdd\x09\x35\x85\x26\x35\xd6\x78\xfb\x03\xa5\x6d\xe8\x5e\xf4\x83\xed\x61\xd2\x09\x7c\xac\xf1\xd8\x5a\x63\xf3\x03\x3e\x02\x7c\x04\xf8\x08\xf0\x11\xe0\x23\xc0\x47\x80\x8f\x00\x1f\x01\x3e\x02\x7c\x04\xf8\x68\xab\xf1\xd1\xda\x9e\x44\x0d\x4a\x7c\xa3\x27\x11\xf0\x27\xe0\x4f\xc0\x9f\x6e\x54\xfe\xf4\xb1\xe1\xe8\xb0\x9b\x43\xc3\x15\xd7\xbf\xca\x74\xb9\xd8\x47\xa9\x15\x81\x92\xf7\x7a\xae\x6d\x19\x16\x8d\xe9\xd3\x57\x87\xf0\xd7\x76\xa0\x97\x24\x25\x5d\x59\x2e\x64\x08\x1f\x78\xb5\x36\xeb\x05\x71\xc7\x1c\x7b\x7e\x35\x37\xc8\xee\xb8\x10\x3f\x74\x59\x81\x3c\x35\x37\xf6\x38\x32\xf4\xb3\x29\xf4\x4c\x0a\x3f\x9d\xca\x7c\x28\xee\xae\xb7\xa6\x16\x84\x36\xc4\x35\xaa\xc7\xb8\x66\x52\x62\x7f\xe9\x46\xa8\x11\x32\xc5\xfe\x1b\xfd\x5e\xd1\x2d\x1e\xea\x3c\x20\xf2\xf8\xdf\xb0\xfc\x3e\x43\x2a\xed\xc4\xb6\xae\x52\x32\x18\x7f\xcc\x20\x93\x0d\x11\x51\xd3\xc8\x9c\xad\x3b\x8e\x9c\xed\xbc\x1f\x75\x9b\x4d\xaf\x82\x56\x38\xa1\x65\x77\xf0\x57\xaa\x3d\x55\x7c\x2a\x85\x3e\x90\xc2\xef\x4f\x65\xde\x1b\x57\xf7\xf1\xb8\xb6\x31\xfb\x28\x45\xf5\x66\xaf\x20\x53\xa2\xaa\x6c\x0e\x79\x41\x54\x2d\xb9\x6e\x56\x03\xb6\x1c\xea\x8e\xd0\x5e\xc4\x90\x59\x47\x0d\x6f\x11\xaf\xb9\x96\x5c\x0c\xca\x88\x5b\x2e\x68\x35\x5d\xdd\x96\x6b\xed\x69\xce\xb5\x6e\xc1\xfd\x65\x1a\xa2\x47\xdf\xd0\x9e\x6a\x8d\xe1\x93\x0a\xb0\x8a\x02\x33\x35\xcc\x02\x89\xbb\x6a\x6b\x97\xf9\xc6\xae\xfa\x61\x3e\xe0\x53\xcf\xd6\x0d\xba\xe6\x48\xcf\xc9\x9b\x36\x7f\xb0\xcf\xa0\x73\xe8\x6c\x5d\xae\x86\x2e\xfb\x06\xf2\x35\x40\xbe\x86\x2e\xf3\x35\x7c\x2c\xd5\x3b\x09\x31\x2b\x72\x36\x4c\xa1\x89\x24\x67\xc3\x56\xc8\x1b\xaf\xba\xf1\xf2\x26\xf7\x4b\xbb\xeb\xe5\xcd\xf7\xc9\xbc\x0b\x7a\x9d\x88\x39\x28\x7e\xdf\x7c\x09\x73\x09\xcd\xa3\x39\x55\xc2\xe4\x8a\xe8\x4c\x17\x9b\x1b\x93\xbc\xfe\x17\xf9\xbe\x40\x00\xb2\xa6\x9d\xac\xf9\x5a\x1a\x7d\x25\x8d\xbf\x9c\xce\x7c\x29\x6e\xa0\x8f\xa7\x2f\xa9\x9a\xae\xe5\x90\x40\x68\xab\xa4\x44\x17\x5d\x61\xdb\x46\x06\x68\xb2\xf1\x22\x6d\x7e\x5e\x45\x45\x96\x38\xae\x33\xec\xd0\xb2\xce\x1b\x42\x2a\xbb\xaa\xcc\x11\x28\x2a\xee\x02\x39\x2a\xad\x4a\x85\x9a\x4c\xaa\xd9\xab\x92\xdf\xab\xbb\x33\x8e\x65\x0f\x49\x1d\x98\xdb\x4a\xa4\xec\xb3\x95\xd3\xa3\xbe\xe5\x9a\xb1\x2e\x9f\x2c\xa2\xe1\xaa\x97\xf0\x8f\x6a\xc0\x2a\xa9\x5a\x59\x3a\x7b\x32\xfa\x20\xf9\x92\x45\x45\xad\xb1\xd8\x03\xbc\x9e\x15\xaa\x3b\x4d\xeb\x98\xc5\xbc\x0a\x73\xbc\x06\xcd\x82\xc9\x7e\x21\x8d\x5e\x48\xe3\xe7\xd3\x99\xe7\xe2\x66\x7e\x2a\x3d\xa9\x6c\x90\x7a\xcc\xac\xa1\x31\x41\x9b\xf3\x5d\x4f\x2f\xf3\x0e\x10\xb3\x6d\x48\xb4\x81\x60\x46\xd1\xb7\x24\x3b\xac\x42\xb1\x3a\xae\x11\x45\x01\x35\xa9\x47\x1d\x93\x3a\x61\x02\x63\x29\x71\x7d\x6f\x49\x67\xc6\x3e\x6f\x56\xbf\x4a\xf3\x8b\xba\x1d\x6d\x5e\x64\xc5\xd5\x2c\x59\xb4\x1c\xdd\xb6\x1e\x8f\x28\x68\x89\x32\xdb\x81\xc3\x95\xbc\xb0\x19\xcc\xc4\x26\x15\x85\x0f\x06\xc9\x43\x62\xbb\x40\x23\x53\x16\x1f\xce\x4a\xc5\x5d\xbf\xf1\xcb\x38\x3b\x13\x3b\x77\x62\xb7\x82\x4f\x36\x37\x5c\xd2\xb2\xbb\x45\x7d\x26\xa3\x0f\x09\x6a\x34\xda\xb7\xf5\xa3\xb7\xf4\xe3\x27\xfa\x33\xdf\x8b\xcd\xf4\x17\x99\x99\xce\x5f\xca\xa6\xd4\x92\xbb\x42\xca\xba\x5f\x62\xe6\xac\x92\x5f\x26\x9e\x17\xd4\x5f\x74\xfd\x0a\x6b\x8b\xa6\x35\xbd\x58\xf7\xf2\xd6\x15\xe5\xe3\x39\x1a\x8c\x9e\xf8\x2a\x8b\x0d\x14\xc3\x32\x93\x7d\x01\x8e\x98\xf9\x2e\x4d\xdc\xba\xcc\xe4\x95\x00\x36\x82\xc8\x9a\xd2\x8c\x11\x7e\x8c\x2c\xb1\xc4\x44\xa8\x7d\x99\x46\x44\xae\x20\xbe\x00\xab\xc2\x61\x50\x7c\xc3\x20\x19\x96\x1d\x5f\x3b\x30\x82\x31\x32\x58\xd4\x8d\xab\x6c\x31\x71\x4c\x76\x97\x6e\xdb\xee\x0a\xbf\xa9\xae\xe1\x04\xf3\x97\x43\xbf\xb6\x90\xe8\x0b\x4a\x71\x49\x63\x64\xf0\xac\xeb\x53\xa5\x58\x62\xe8\x81\xa1\x9b\xec\xeb\x65\xfb\x70\x61\x2b\xca\x0b\x84\xf4\x6a\x28\x70\x31\x2e\x43\xcb\xbe\xcc\xab\x1f\x37\xaa\x62\xf0\xa9\x54\x8f\x03\x1f\xcf\x8b\x3c\x4c\xe7\xd1\xb4\x92\x87\x69\x83\x83\x29\x93\xe6\x3a\xc2\xad\x78\xa7\x68\xa6\x4e\xd5\x84\x75\xa9\x06\xaa\x4e\x51\xfc\xf6\x6d\xf5\x6a\xc2\x10\x07\x56\x7c\x87\x57\x80\x83\x35\xed\x93\x03\x9e\x1e\x1a\x4b\x9b\xaa\x3b\xdc\x55\x5f\xd0\x30\xaf\xc3\x21\xf6\xe7\xe8\xdd\xea\xc5\x0a\xf5\xcb\x54\xbd\x7a\x9f\x7a\x35\x08\x7d\x3d\xa4\x65\xcb\x18\xae\xbf\xaf\x78\x01\xcd\xa2\x99\x3a\xdb\x67\x14\x9d\xe8\x62\x20\xcc\xb1\x42\x41\x27\x69\xa7\x93\x7c\xb4\x0f\x3d\xdb\x87\x9f\xe9\xcb\x3c\x1d\x0b\xf6\x27\xfb\x6e\x1e\xfb\xa7\x6e\x77\x88\xb5\x33\xf7\x76\xe0\x3b\x98\x9e\x80\xac\x62\x23\x84\x1c\x50\x87\x30\xbf\x26\x06\xee\x41\xbe\x3e\x09\xe7\x18\xdd\xe6\x4f\x32\x45\x4c\x3c\xcd\xef\xe0\x4a\x51\x40\x0e\xcc\x04\xae\xc3\x87\xe5\x10\x79\x98\x0d\x7c\xf9\xf7\x42\x34\x1d\x92\x1f\x0f\xb6\x36\xcc\x8a\x2f\xa4\xd0\xf3\x29\xfc\x5c\x2a\xf3\x99\x18\x2e\x7d\x38\x75\xd6\xf5\x0d\xae\xaf\x95\x5d\xde\xec\x2e\xc9\x2e\xb2\x9f\xb2\x64\xbc\xe6\x2b\x34\x32\x1d\x4a\xd5\x8a\x43\x25\x39\x34\x87\x75\x83\x7f\x38\x77\x1e\xb1\x2d\x43\x2e\x9d\x9c\x41\xb9\x2b\xb2\x4d\x85\x73\x85\x47\x5d\xcf\xa6\x1a\x11\x6f\x5c\xb4\xf5\x72\xdc\x97\x9c\x7e\x37\x6d\x80\xf8\xf5\xd9\x1d\xbc\x5a\x5b\x85\xa2\x5a\xbb\x58\x79\xc2\xc5\x6a\x83\xa5\xfe\xcc\x28\x3a\x81\x8f\x65\x8f\xc6\x3b\x34\x77\xaa\x5b\x3c\x35\xcf\xdd\x08\xbb\x3b\xf8\x77\xef\x44\x0f\xd6\xb8\x4c\xb6\x0c\xba\x1f\x27\x1e\x88\x08\x75\x3e\xe0\x2b\x39\xfe\xf1\x3b\xf1\xdf\xa7\xd1\x4e\xe9\x26\x99\xe1\x00\x9a\x88\x6b\x51\xbb\x25\x4b\xa4\x92\xcb\x70\x1f\xbb\x51\x78\x23\x36\x4b\x5d\x28\xf4\x84\xde\xda\xd5\x33\xaf\x6d\x7d\x0c\xf5\x41\x31\xc4\x8f\xa3\xfb\xf9\x10\xcf\xa3\x61\x74\xa8\x5d\x9a\x49\x25\xc3\x64\x87\x2c\xf5\x42\xfb\xe1\x7b\x08\x1f\xec\x34\xef\x03\xca\x7c\x7a\x57\xd2\xf2\x11\x10\xed\xa4\xf1\x07\xe5\xbd\x9b\xdb\xfe\x45\xee\xa4\x59\xa7\x3d\xac\xaf\x9d\x41\x61\x00\x60\xda\x25\x30\xfd\x60\xea\x5a\x27\xb9\x48\x90\x5b\xe0\x09\x72\x63\x4e\xba\xee\x42\xae\x11\x8f\xf6\x58\x84\x14\xff\xf8\xb6\x44\x84\x1c\x69\xb0\x70\x3a\x90\x25\xfb\xbd\xc4\xaf\x7c\x33\x24\x09\x58\x39\x37\x9e\xd0\x02\x2b\x07\xac\x9c\x2d\xb6\x72\x5e\x7b\xcd\xab\xc3\x35\x1b\x37\x9d\x89\xf6\x35\xc5\xb9\x2a\xf7\x67\x8e\xa3\xfb\xf1\x91\x6c\x21\x36\x48\xbe\x4f\x35\x66\x92\x02\x6e\x08\x4b\xe6\x5b\x59\xb4\xbf\xe5\xe1\x2f\xb6\x8a\xd1\xc5\xaa\xcd\x93\x86\x3d\x97\xc5\x9f\xed\xaf\x3b\xd7\xd5\x61\xbc\x9f\x05\x59\x4e\xef\xd2\x86\xe5\xeb\x0f\x65\x29\xaf\x98\xb5\x82\xf0\xac\xeb\x8f\xdb\x76\xbc\xac\xf6\x6e\x19\xbd\x81\xce\x65\x5d\x6a\x3f\x6d\x0a\x38\x2f\xa6\x8d\xd2\xbc\x8d\x67\xac\x6a\xb2\xf7\x43\x02\x31\x38\x94\x05\x87\xb2\xe0\x50\x16\x1c\xca\x82\x43\x59\x70\x28\x0b\x0e\x65\xc1\xa1\x2c\x38\x94\x05\x87\xb2\xb6\xdf\xa1\x2c\x38\xf1\x04\x27\x9e\xe0\xc4\xd3\xd6\x9c\x78\xfa\x60\x12\x71\xa7\x1a\xba\x81\xa1\xdb\x96\x53\xce\x2f\xb7\x89\xb9\xc3\xcd\x77\xd7\x09\x75\xdb\x73\xcd\xe8\x41\xea\x07\xf8\xbf\x0e\xe0\xbf\xee\x47\x2f\x55\xca\xba\xb2\x5c\xc8\x3c\x99\xea\x0c\xce\x9c\x8b\x8b\x9d\x73\xcd\xf1\xb8\xd8\x1e\x81\x9a\xe3\x02\xd4\x24\x55\x53\x37\x3b\x5a\xbc\xfa\xfa\x88\xcc\xbc\xf9\xc0\xa6\xd4\x1e\xd8\x9c\xc6\xa7\x22\x1a\x93\x34\xb9\xdc\xc9\x6a\xd1\xda\x35\x1c\x14\xf0\x0d\xe0\x1b\xc0\x37\x80\x6f\x00\xdf\x00\xbe\x01\x7c\x03\xf8\x06\xf0\x0d\xe0\x1b\xc0\x37\xdb\x10\xdf\x5c\x7f\xae\x06\x00\x88\x00\x10\x01\x20\xea\x0c\x10\xfd\xf9\xf7\xa3\x13\x02\x10\x95\x38\x11\x6a\x7d\xc0\xe0\x51\xb7\x54\x7f\xb2\xe0\x99\xef\xc7\xff\x3d\x8d\x76\xf1\x27\x93\xe8\x37\xad\x3c\x52\x67\xdc\x52\xee\x1e\x76\x47\x91\xdd\xaf\xd2\x99\x19\xb7\xb4\x21\xa7\x09\x16\xd0\x09\x81\x4e\x0a\x28\xcf\xd1\xc9\x41\x34\x88\xf6\xb7\xf4\x18\xe3\xdf\xa1\x2d\x17\xb4\x19\xb7\x74\xad\x31\x59\xce\xb5\x27\x28\xfb\xf1\x80\x24\x28\xfc\xc5\x92\x9d\xb0\x77\xd7\x9c\x20\xf8\x85\x5d\x4a\x0b\x0f\xb4\x3b\x42\xc0\x1a\x79\xaf\xbc\x69\xb3\xda\xb9\x38\x86\x4e\xa2\xe3\x75\xde\xb8\x9d\x36\x34\xb8\xde\xc2\x79\x81\x2e\xcf\x0b\xbc\x33\x75\x0d\xf3\xfb\x94\x38\x29\x70\x0c\x1d\x4d\x4e\x0a\xf4\x50\x3c\xf4\x6c\xfe\xb7\x39\x6d\x50\xfc\xf4\x6d\x8a\x78\x68\x3c\x00\xbd\x96\x9c\xb8\x97\x7b\xb5\x6e\x86\x94\x80\x13\x01\x37\x9e\x58\x82\x13\x01\x70\x22\x60\x8b\x4f\x04\x6c\xa4\x7e\xd7\xf6\x2c\x40\xcf\x24\xfc\xcc\x61\xa4\xe1\xa1\x6c\x2e\xb6\xb0\xef\x50\x4f\x01\xcc\xb8\xa5\x1b\xc2\xfd\xff\xa7\xb3\x68\x40\x18\x1a\x86\xeb\xfa\xa6\xe5\xd4\x65\x08\xce\xf3\x90\x42\x01\xfe\xea\x5e\xfc\x95\x3e\x74\x87\x7a\x13\x57\x7c\x05\x5f\xf6\xa5\xc1\x1e\xa1\x93\x28\xa3\xcb\x2c\x7b\x38\x37\xc8\x6e\x9a\x50\x9e\xbc\x5c\xe0\x17\xae\x37\x1f\xfd\x37\xa2\x29\x31\xae\x1f\x44\x0f\xf0\x71\xcd\xb4\x94\x91\x96\xe3\xba\xa6\x41\x97\x0b\x1a\xff\xe6\x59\x2b\x68\xbf\xcf\xfb\x03\xed\xc7\xf0\xfd\xf8\x48\x93\xe3\x2b\x4d\xfa\x50\x8e\x6e\xfe\x72\xf4\xe8\x3d\xcd\xa7\xcf\x4e\xbc\x03\x36\x76\x61\x63\x17\x36\x76\x61\x63\x17\x36\x76\x61\x63\x17\x36\x76\x61\x63\x17\x36\x76\x61\x63\x17\x36\x76\xc1\x2f\x1f\xb6\x5d\x61\xdb\xf5\xa6\xd9\x76\xfd\xf6\x79\x74\x30\xaf\x7b\xd6\x1a\xfb\xad\xc2\xb0\xaa\xe8\x5e\x80\x3f\x73\x1e\x7f\x93\xa0\x9d\x86\xeb\x53\x1e\xc1\x6d\x6d\x16\x32\xc1\x1f\x7c\x58\xf7\x72\x7b\x04\x0f\xf1\xe9\xe5\xda\x54\xb2\xe2\xf2\x36\xa7\x20\x45\x40\x04\x80\x08\x00\x11\x00\x22\xb8\x69\x10\x41\x71\xdb\x20\x82\x9e\xd7\xa4\x6b\x44\x50\x04\x44\x00\x88\x00\x10\x01\x20\x02\x40\x04\x9b\x8f\x08\x8a\x60\xd1\xdf\x80\x16\x7d\x71\xbb\x5b\xf4\xc5\xeb\xd0\xa2\x9f\x79\x3d\x1a\x17\x7b\xf6\xa3\xe8\x04\xdf\xb3\x1f\x41\x87\x91\xb6\xc6\x9e\xbd\x4f\xb5\xe5\x82\x16\x5b\xe3\x1d\xed\xd7\xb7\xd9\x55\x7f\xf4\x7c\xfb\xfd\xfc\x03\xf8\x3e\xb9\x87\x9f\xcd\xca\x2d\xfb\xb8\x0e\x35\x6e\x29\xd9\xff\xb1\x2b\x41\x0e\x58\x88\x7a\xa2\x2b\x74\xe1\x5e\xf1\xdb\xc6\xf3\x05\x81\x03\xce\xa0\x07\xd1\x03\x75\x0e\x7e\x43\x28\xd7\x79\x0b\x83\x4b\x1f\x78\x1a\x77\xe9\x69\xfc\x95\x94\xf0\x17\x3e\xcc\x3d\x71\xd8\xec\xd6\xd0\xba\xc6\x1e\x2a\x0a\x77\xe3\x31\x74\x32\x71\x37\x5e\x6f\x19\x13\x22\xcd\xd3\x03\x68\x54\x49\xf3\xb4\xde\x42\xda\x89\x98\x5e\x8a\x90\x35\xe4\x95\xe7\x06\x21\xca\xfd\x86\x42\x35\xef\x91\xe9\xba\x94\xdc\x67\xee\xa2\x22\x6e\x64\xae\x47\x21\x6e\x26\xe2\x9b\x36\x5e\xf0\x00\x87\x04\x0e\x09\x1c\x12\x38\x24\x70\x48\xe0\x90\xc0\x21\x81\x43\x02\x87\x04\x0e\x09\x1c\x12\x38\x24\x70\x48\xe0\x90\xdb\x8f\x43\x96\x7b\x9c\x5b\xba\x1d\x2f\xc8\x35\x37\xf1\x5f\x8e\x5f\x26\xe4\x6f\x62\xce\xf7\x16\x4f\x5e\x8f\x67\xe0\x7e\x6a\x2e\x8e\xc6\x6a\x32\x85\xdc\x72\x1d\x9f\x96\x2d\x7e\xaa\xb9\xe6\x30\x9c\x48\x8d\xc3\x0d\x5f\x9d\xa9\x5b\x2b\xb4\xb4\xe4\xba\x57\x6b\x0c\xd8\x00\x7f\xea\x22\xfe\x85\x2c\xda\xd3\xb4\xac\x38\x71\xce\x03\x6b\x3b\x8b\x5d\x8e\xdf\xf1\x88\x78\xc7\x84\xfa\x8e\xdc\x83\xec\xe9\xf1\x66\x2f\x90\xd9\x70\xd6\x7e\x1e\x5c\xcc\x00\xed\x00\xda\x01\xb4\x03\x68\x07\xd0\x0e\xa0\x1d\x40\x3b\x80\x76\x00\xed\x00\xda\x01\xb4\x03\x68\x07\xd0\x0e\xa0\x9d\xf5\xa2\x9d\x9f\x48\x21\x5b\xb0\x1d\x8a\x0c\xce\x76\x7e\x08\xfd\x20\x7a\x6d\xeb\x0c\xc8\x4d\x21\x83\x04\x03\xda\xda\x96\x7b\x4f\xdc\xd1\x7e\xa4\x3d\xef\x79\x3d\x7e\x5d\x94\x46\x64\x0d\x24\x22\x49\xd0\xda\x55\x6e\x4c\x17\x9b\xfd\x99\xdb\xda\xe1\x91\xc1\xd8\xb1\xad\x0d\x09\x39\x23\x6e\xdc\x06\x2c\x44\xa0\x8b\xab\xc8\x42\xe5\x3a\x77\xb8\x47\xd0\x6b\x36\x64\x30\x80\xe7\x1c\x78\xce\x75\xe9\x39\xf7\xff\xa4\xd1\x92\x90\x59\x3a\xba\xc2\x65\xd6\x6b\xd1\x46\x0d\x53\x54\x11\x4e\x76\x8b\xc8\x4c\x9c\xec\x36\xf0\x75\x8e\xf0\xc7\x2b\x23\xaa\xf8\xe3\x6d\xe0\xfb\xba\x17\xc7\xdc\xdb\xae\x43\x71\xdc\x9d\xa8\xed\x44\x88\xe7\x7e\x63\x6f\x3b\x71\x7c\xa4\xa9\x13\x60\x1b\xd1\x3c\x23\x1e\x5a\x4b\x34\x27\xfe\x82\x9b\x2a\xa4\x81\x2f\x03\x5f\x06\xbe\x0c\x7c\x19\xf8\x32\xf0\x65\xe0\xcb\xc0\x97\x81\x2f\x03\x5f\x06\xbe\x0c\x7c\x19\xf8\x32\xf0\xe5\xed\xc7\x97\x37\xdb\x75\x70\xab\xf1\xf0\x7a\x7c\x17\x7b\xef\x0c\xf8\xb9\x7d\x68\x5a\x3a\x03\x7a\x16\x7d\x2c\xa4\x4e\xc0\xbb\xac\xce\x09\x50\x24\x6a\x37\xaa\x41\xe8\x56\xa2\x4e\x54\x3b\x44\x64\xe4\xc2\xff\x34\x80\x7f\x75\x07\x7a\x65\x4d\x51\x31\x55\xf9\x2d\x99\xa0\x5d\xcd\xca\xee\x44\x22\x38\x0e\x1b\xc7\x5f\x11\x59\xa8\x93\xf1\x2b\x7a\x92\x9e\x7d\x28\xd1\xbf\xb8\x8e\x29\x57\x6b\xa6\xc2\x25\x8a\xe5\x60\x8d\x2e\xaf\x94\xad\xe5\x0a\x22\xb9\xbb\xfa\x75\x11\xd9\x69\x51\xed\x6d\xee\x7a\xb8\x25\x69\xdd\x5b\xe7\xb4\x58\x11\x39\x2d\xde\xd4\x7e\x46\x5e\xc0\xb3\xd1\x8c\x6c\x32\x6c\x23\x97\xdd\x16\x9d\xd2\x38\x07\x21\x11\x00\x20\x32\x40\x64\x80\xc8\x6e\x1e\x44\x06\x89\x00\x20\x11\x00\x20\x32\x40\x64\x80\xc8\x00\x91\x6d\x0b\x44\x36\x33\x85\x26\xf0\x78\xf6\x74\x7c\x92\x6e\x9f\x9a\x7f\xae\x95\x2a\xdf\x98\x94\x0e\xf2\x09\x00\xba\x83\x7c\x02\x5b\x93\x4f\xe0\xc5\x59\x34\xba\x66\x76\xc5\x16\x49\x06\x64\xd2\xc5\xf7\xcd\xe2\x9f\xdc\xdb\x65\xd2\xc5\xbd\x8d\x49\x17\x93\x98\x5c\xfc\x96\x6d\x8e\x62\xc0\x4b\x07\x10\x04\x20\x08\x40\x10\x37\x0f\x82\x00\x2f\x1d\xf0\xd2\x01\x04\x01\x08\x02\x10\x04\x20\x88\x6d\x81\x20\xc0\x4b\xe7\x46\x34\xf5\xc1\x4b\x67\x23\xbc\x74\xde\xd8\x72\x9b\x1f\x4d\x09\x8f\x82\x07\xd1\x03\xdc\xa3\xe0\x18\x3a\x8a\x46\xd6\x08\x0d\xae\x80\x82\xe5\x82\xc6\x4d\xf5\x59\x2b\x08\x23\x6f\x81\x1f\x68\xef\x0c\x70\x3f\x3e\xa2\xc6\xe4\x92\x8e\x01\x4d\x10\x84\xf4\x0b\xe0\xef\x58\x2b\x2c\x38\x3f\x37\x9a\x7d\xcb\xad\x8d\x2c\xe2\xa5\xf1\x41\x4d\x81\x1d\x06\xa2\xec\x03\x9b\x01\x1e\x04\x27\x98\x44\x45\x74\xa6\xee\xc8\xe5\xda\x39\x1e\x9a\xb4\x30\x9c\xa5\x84\xb3\x94\x5d\x9e\xa5\xfc\x46\x0a\x9d\x15\x27\x1c\x4f\xa3\x53\xc9\x09\xc7\x76\x89\x46\x9a\x0c\x42\xf4\x90\x38\xba\x78\x06\x3d\xa8\x1c\x5d\xec\xa6\xa0\x96\xb2\x68\x9d\xd9\x50\x9a\x94\xdd\xe9\xb1\xc6\xce\xe4\x54\x87\xb2\x49\x15\x67\xb9\x17\x48\xa3\x1c\xca\x34\x3d\xa1\x28\x64\xd2\x70\x94\xa2\x40\x95\x49\xcd\x52\x15\x6c\x84\x74\x02\x8a\x09\x14\x13\x28\x26\x50\x4c\xa0\x98\x40\x31\x81\x62\x02\xc5\x04\x8a\x09\x14\x13\x28\x26\x50\x4c\xa0\x98\x40\x31\xb7\x1f\xc5\xdc\xce\x69\x0a\x36\x0c\x28\x5c\x8f\x39\x0b\x7e\xee\x3c\x1a\xc8\xeb\x9e\xb5\x86\x13\x99\xe7\x9a\x01\xfe\xbb\x19\xfc\xc7\x4a\x36\xc7\xbd\x6b\xbb\x8e\xcd\xb9\x66\xee\x55\xc2\x71\xac\x36\x7b\xec\x9c\x6b\x82\xbb\x18\x80\x16\x00\x2d\x00\x5a\x00\xb4\x00\x68\x01\xd0\x02\xa0\x05\x40\x0b\x80\x16\x00\x2d\x00\x5a\x00\xb4\x00\x68\x01\xd0\xb2\x5e\xd0\x72\x19\x8d\x09\xd0\x72\x14\x8d\x70\xd0\x32\x84\x72\xe8\xc0\x1a\x9e\x18\x3e\xd5\x96\x0b\xda\x9c\x6b\x76\x94\x02\x60\xaa\x3d\x2b\xc9\x62\x52\x9f\xd2\x71\xce\x35\x6b\xc0\x48\x5b\x8f\xb0\x5f\xdb\x95\xa0\x85\xdb\x63\x4f\xb0\x39\xd7\xcc\xdd\x19\xf9\x81\x6d\x1c\x47\x10\x66\xff\x28\x3a\x81\x8e\xd5\x79\x7f\xdd\x87\xf6\x75\xd2\x92\xe0\xf3\x05\x3e\x5f\x5d\xfa\x7c\xfd\xd7\x14\x3a\x25\x7c\xb5\x8e\xa1\xa3\x8a\xaf\xd6\x01\xd4\xe1\xd8\x6b\xed\xa1\x75\x5c\xc8\x85\xc3\x48\xe3\x72\xa1\xf3\x12\x1f\x10\x4e\x68\xf7\xa3\x23\x89\x13\x5a\xc7\x4f\x77\xea\xd5\xd5\x99\x60\x69\x2e\x4e\x12\x71\x93\xfb\xb7\x0a\x93\xfc\xfe\xa6\xae\x5b\x4c\x88\x0c\x44\x8e\x5b\x4c\x88\x34\x73\xd8\xea\xbd\x38\x01\x8a\x08\x14\x11\x28\x22\x50\x44\xa0\x88\x40\x11\x81\x22\x02\x45\x04\x8a\x08\x14\x11\x28\x22\x50\x44\xa0\x88\x40\x11\xb7\x1f\x45\xdc\x6c\x77\xad\xce\xac\xff\xe6\x36\x7f\xc2\x04\xd6\x15\xe0\xfd\x3a\xf4\xcd\xfa\xe8\x2c\x1a\x6e\xe3\x9b\x15\x75\xee\x9b\xaa\x6e\xa8\x07\xf8\x9f\xcf\xe3\x1f\xdd\x9b\x10\x91\x43\x6b\x7b\x69\x45\x36\xe9\xab\xd9\xc3\x51\xa0\xaf\x5a\xce\x5a\x73\x0b\x78\x6e\x01\x73\x01\xe6\x02\xcc\x05\x98\x0b\x30\x17\x60\x2e\xc0\x5c\x80\xb9\x00\x73\x01\xe6\x02\xcc\x05\x98\x0b\x30\x17\x60\x2e\xeb\x0f\xf4\xb5\xce\x78\x5e\xc2\xc7\xa2\xc6\x22\xef\xc8\x87\xab\x8d\xf3\xd5\xa3\x17\xdb\xc3\x98\x21\x9c\x13\xd8\xa5\xe6\xed\x2d\x9c\x32\xb2\xff\xa4\x78\x73\x7d\x5f\xec\xcd\x55\x4b\x1b\x06\x9a\xfb\x75\x6d\x0c\x6f\xe8\x36\xbe\x57\x93\x16\x07\x5f\x2f\xf0\xf5\xea\x3e\xbe\xd7\x3a\xa3\x66\x35\x19\x7f\x5d\x85\x08\x6b\x56\x4e\x57\x21\xc2\x9a\x15\xd4\xbd\xf8\x11\x9e\x60\x9d\x89\x9f\x7a\xfe\xdb\x5a\x10\xe5\x3e\xa3\xf8\x84\x65\x9b\xfa\x84\xd5\x8a\xa2\xe1\x76\xde\x61\x1b\x29\x94\x80\x59\x02\xb3\x04\x66\x09\xcc\x12\x98\x25\x30\x4b\x60\x96\xc0\x2c\x81\x59\x02\xb3\x04\x66\x09\xcc\x12\x98\x25\x30\xcb\xed\xc7\x2c\xb7\x73\x58\xaf\x5e\x73\x84\xeb\xd1\x63\xec\xb7\xb3\xe8\x95\x91\xc7\x18\xef\xbd\x7c\x40\x0d\x9f\x86\x01\xfe\x70\x16\x3f\xdd\x9f\x70\x11\x5f\xae\xbf\x8e\x69\x2d\x5b\x66\x55\xb7\xd5\xf1\xa6\xc7\xba\xee\x02\x7f\x5a\x23\x26\xf5\x7c\x6a\x30\x69\x3a\x1a\x6b\x40\x83\xbc\x88\xc1\xc4\xbc\xaf\xb1\xd7\x5c\x8f\xca\xa9\x63\x39\x41\x48\x75\x53\xcb\xed\xe7\x0f\x08\xcc\x22\x0a\x9e\xb5\x82\xf0\xac\xeb\x8f\xdb\x76\x0c\x5b\x82\x6d\xee\x64\x36\x73\x15\xcd\x89\x29\x30\x8d\x1e\xe2\x53\x60\x1c\x9d\x46\xa7\xba\x98\x02\x7c\xaa\x4f\x31\x9d\xb4\xed\x34\x18\x68\x3e\x0d\x6e\xc7\x88\x57\x4c\x60\xfc\x73\xed\xc7\xff\x7e\x3c\x50\x3f\xfe\x45\x47\xd4\x0e\x7c\x60\x52\xc0\xa4\x80\x49\x01\x93\xba\x69\x98\xd4\xcc\xb6\x61\x52\x3d\xaf\x49\xd7\x4c\x6a\x06\x98\x14\x30\x29\x60\x52\xc0\xa4\x80\x49\x6d\x3e\x93\xea\xb9\x65\x38\x03\x90\xeb\x06\x84\x5c\x33\xdb\x1d\x72\xcd\x5c\x87\x90\x0b\xff\xe3\x00\xba\x90\x67\xa6\x7a\x5e\x37\x99\x16\x69\xb9\x8e\x4f\xcb\x56\x10\xfa\x6a\x14\xf8\xfc\x72\xa1\x44\x43\x3d\xe2\x2c\x95\x6a\xa8\x33\x3d\x61\x85\x96\x96\x5c\xf7\x6a\x8d\xe5\x15\xe0\xa7\x07\xf0\x2f\xed\x40\x7b\x9a\x96\x77\x45\x16\x94\x79\x5b\xaa\x33\x28\xf3\xb0\x7c\xd5\x23\xe2\x55\x13\xea\xab\x7a\x84\x6a\xc6\xf9\x03\xe3\xcd\xaa\x7b\x59\xd4\x76\xad\x4a\xcc\x5a\x41\x08\x18\xa7\x11\xe3\xbc\xb9\x3d\xa1\x79\x1d\xfe\x01\x49\x68\xd6\x1a\x7b\x92\xdd\xac\xd5\x07\x2a\xd1\xe1\x1d\x86\x3a\xa2\x48\xc0\x7e\x80\xfd\x00\xfb\x01\xf6\x03\xec\x07\xd8\x0f\xb0\x1f\x60\x3f\xc0\x7e\x80\xfd\x00\xfb\x01\xf6\x03\xec\x07\xd8\xcf\xcd\xc0\x7e\xde\x3a\x80\x72\x82\xfd\xd0\xc7\x42\xea\x04\x9c\x03\xd4\x92\x1e\x93\x7a\xb6\xbb\xca\xd6\xbb\x00\xbf\x98\xc5\x7f\xd8\x8f\x70\x72\x6f\x0c\x73\x96\x3b\x63\x39\x93\x71\x61\x3d\x22\x37\x47\xf9\x03\x53\x71\x85\x24\xae\x49\xde\x03\x3e\x37\x3d\xf4\xb9\x79\x6d\x7b\xa2\x73\x0c\x1f\x95\x44\x27\x19\x25\x92\xdf\x24\x9d\xd2\x48\x6b\x00\xc4\x00\x88\x01\x10\x03\x20\x06\x40\x0c\x80\x18\x00\x31\x00\x62\x00\xc4\x00\x88\x01\x10\x03\x20\x06\x40\x0c\x80\x98\x9b\x01\xc4\x3c\xd1\x87\x88\x00\x31\x0e\x0d\x57\x5c\xff\x2a\x53\x94\xea\x3c\x6f\xf0\x9f\xa5\xf1\x9f\xa6\x11\x4e\xee\x88\xf1\xcb\xab\xca\x34\xac\x5d\xea\xc4\x97\xe4\x48\x99\x86\x17\xe2\xfb\x25\x1d\x19\x9f\x9b\x8e\xcc\xab\xde\xb1\x90\xd1\x86\x82\x46\x1b\x0a\x1a\xed\xa4\xa0\x19\x0f\xbd\x46\xe0\x8f\x0b\x68\x96\xe3\x8f\xb3\x68\x12\x15\xbb\xc0\x1f\xca\x77\x76\x12\x39\x0c\x7f\x20\x8b\xee\x89\x8e\x93\x45\x91\xaa\x9c\x70\xd9\xb5\xab\x15\x6a\xd8\xba\x55\x09\xf0\x77\xf7\xe2\x7f\xe8\x4b\xce\x95\x1d\x59\x3b\xe2\xf8\x5c\x5c\xc8\x65\x5e\xc8\x04\x2b\x24\x97\x4f\x22\x8f\x37\xbd\xe1\x7a\xc3\x55\x4b\xe8\x61\xd1\x5f\xac\x9f\x58\x7f\x3d\x88\x1e\x40\xa3\xed\xb3\xe7\x35\xfb\xf6\x9e\x44\x78\x7b\xa4\x3d\xa6\x3a\x8a\x47\x1a\x42\xec\x37\xab\x0f\x9c\x14\x03\x48\x05\x90\x0a\x20\x15\x40\x2a\x80\x54\x00\xa9\x00\x52\x01\xa4\x02\x48\x05\x90\x0a\x20\x15\x40\x2a\x80\x54\x37\x1d\xa4\xfa\xd5\x7d\xe8\xfe\xda\x70\x3b\x2d\xd2\xb4\x51\xc7\xf4\x5c\xcb\x09\xe5\xaf\x6f\xc6\xff\x38\x80\xff\x4c\x09\xc7\xf3\x31\x79\xf4\x4b\xf5\x11\x72\x22\x19\x12\xc1\x93\xa9\xa8\x90\x9e\xb8\x0a\x0d\x25\x1a\x03\xd7\x8a\xe4\xfa\xc2\x94\x8e\x44\x15\x1a\xac\xd1\x3e\x95\xb2\xb5\xdc\x3d\x4a\x34\x9f\x24\x54\x72\x5c\xc7\xed\xce\x68\xb6\xc2\xa5\xe8\xde\xe6\x98\x66\x17\xbe\x85\x57\x0c\x3d\x7a\xbe\x3d\xa7\x39\x80\xef\xab\xe7\x34\x71\x9b\x03\x9b\x01\x36\x03\x6c\x06\xd8\x0c\xb0\x19\x60\x33\xc0\x66\x80\xcd\x00\x9b\x01\x36\x03\x6c\x66\x0b\xd9\xcc\x31\x74\x14\x8f\x64\x0f\xc7\x11\x64\x5f\xc9\x43\xc7\xca\x5a\xc4\x6a\x7b\xb6\x9f\xfd\xac\xc6\x85\xbd\xfe\x22\xcf\x02\x35\x02\x6a\x04\xd4\xa8\x33\x6a\xf4\xbd\x21\x74\x5a\xc6\x17\xf2\xbc\x60\x8d\xe4\xfe\x4c\x78\xfb\x2e\x13\x9d\xcc\x92\x10\x67\xd1\x24\x3f\xfa\xd4\x10\xfe\x93\x1d\x68\x27\x2b\xe0\xca\x72\x21\xb3\x9f\x8f\xb4\x5a\xdb\x74\x22\x7e\x7a\x5e\x3e\x9d\xbb\x8f\xdd\x36\xee\x79\x81\x8a\x6c\x1a\xef\xeb\x71\x8a\xab\x67\x53\xe8\x99\x14\x7e\x3a\x95\xf9\x50\xdc\x47\x6f\x4d\x2d\x08\xcd\x87\x6b\x4f\x8f\x71\x2d\xa4\xc4\xfe\xd2\x8d\x50\x23\x64\x8a\xfd\x37\xfa\xbd\xa2\x5b\x3c\x4b\x5b\x40\x0c\xbb\x1a\x84\xd4\x1f\x96\xdf\x68\x48\x05\x9d\xd8\xd6\x55\x4a\x06\xe3\x2f\x1a\x64\x02\x21\xe2\x63\x1a\x99\xb3\x75\xc7\x91\x53\x9c\x77\x9e\x6e\xb3\x39\x55\xd0\x0a\x27\xb4\xec\x0e\xfe\x4a\xb5\x7b\x8a\x4f\xa5\xd0\x07\x52\xf8\xfd\xa9\xcc\x7b\xe3\xea\x3e\x1e\xd7\x36\xe6\x1c\xa5\xa8\xde\xec\x15\x64\x4a\x54\x95\x4d\x1c\x2f\x88\xaa\x25\xd7\xc8\x6a\xc0\x96\x3e\xdd\x11\x9a\x8a\x18\x27\xeb\xa8\xe1\x2d\xe2\x35\x35\x61\xd8\x65\x16\xb8\xc3\x3c\x0b\x5c\xfa\xe2\x79\x7c\x1c\xdd\x8f\x8e\xb4\x74\x30\x62\xa3\x44\x5b\x2e\x68\x8d\x3d\xdd\x16\x59\xed\x69\x8e\xac\x6e\xc1\xfd\x65\x1a\xa2\x47\x2f\xb7\x07\x56\x47\x70\x21\x8a\x68\xe4\x79\xd1\xc9\xb7\x26\x35\x51\xd9\x55\xe6\x7f\xec\x4a\xc6\xf6\x01\x9f\x7a\xb6\x6e\xd0\xf6\xc3\xfb\xa0\xbc\x73\xd3\x47\xf8\x34\x7a\x08\x4d\xd5\x65\x96\xec\xae\x43\x20\xbd\x24\xa4\x97\xec\x32\xbd\xe4\x47\x52\xe8\xbc\xc8\x0d\x39\x89\x8a\x49\x6e\xc8\x9e\x8b\x86\x5e\xc9\x9e\xf6\x22\xc6\xab\x6e\x9c\x88\xc9\xbd\x7f\x77\x22\x62\xee\x92\x59\x22\xf5\x66\x52\xe5\x80\xb8\xb8\xe9\x42\xe5\x12\x9a\x47\x73\xaa\x50\xc9\x15\xd1\x99\x2e\x36\x28\x26\x79\xf5\x2f\x72\xd6\x1f\x80\x7c\x69\x27\x5f\xbe\x96\x46\x5f\x49\xe3\x2f\xa7\x33\x5f\x8a\x1b\xe8\xe3\xe9\x4b\xaa\x1a\x6b\x39\x24\x10\xaa\x28\x29\xd1\x45\x57\xd8\xab\x91\x51\x99\x6c\xa6\x48\x3b\x9e\x57\x51\x91\x1f\x8e\xeb\x0c\x3b\xb4\xac\xf3\x86\x90\x9a\xac\x2a\x67\x04\x5e\x8a\xbb\x40\x8e\x4c\xab\x52\xa1\x26\x93\x64\xf6\xaa\x64\xf2\xea\x8e\x8b\x63\xd9\x43\x52\xc1\xe5\x86\x10\x29\xfb\x6c\xc1\xf4\xa8\x6f\xb9\x66\xac\xa8\x27\x6b\x67\xb8\xea\x25\x4c\xa3\x1a\xb0\x4a\xaa\x26\x94\xce\x9e\x8c\x3e\x48\xbe\x64\x51\x51\x5f\x2c\xf6\x00\xaf\x67\x85\xea\x4e\xd3\x3a\x66\x31\xaf\xc2\x1c\xaf\x41\xb3\xec\x37\x5f\x48\xa3\x17\xd2\xf8\xf9\x74\xe6\xb9\xb8\x99\x9f\x4a\x4f\x2a\xdb\x9a\x1e\xb3\x59\x68\x4c\xc5\xe6\x7c\xd7\xd3\xcb\xbc\x03\xe6\x5c\xdb\x32\x56\x87\x44\x1b\x08\x0e\x14\x7d\x4b\xb2\x2f\x2a\x14\xa8\xe3\x1a\x51\x14\x4d\x93\x7a\xd4\x31\x99\xa5\x1f\x03\x56\x4a\x5c\xdf\x5b\xd2\x99\x01\xcf\x9b\xd5\xaf\xd2\xfc\xa2\x6e\x47\x1b\x12\x59\x71\x35\x4b\x16\x2d\x47\xb7\xad\xc7\x23\xb2\x59\xa2\xcc\x30\xe0\xc0\x24\x2f\x0c\x02\x33\x31\x38\x45\xe1\x83\x41\xf2\x90\xd8\x02\xd0\xc8\x94\xc5\x87\xb3\x52\x71\xd7\x6f\xfc\x32\xce\xc3\xc4\x6e\x9c\xd8\x81\xe0\x93\xcd\x0d\x97\xb4\xec\x6e\x51\x9f\xc9\xe8\x43\x82\x1a\xcd\xf5\x6d\xfd\xe8\x2d\xfd\xf8\x89\xfe\xcc\xf7\x62\x1b\xfc\x45\x66\x83\xf3\x97\xb2\x29\xb5\xe4\xae\x90\xb2\xee\x97\x98\xad\xaa\x64\xc4\x8d\xe7\x05\xf5\x17\x5d\xbf\xc2\xda\xa2\x69\x4d\x2f\xd6\xbd\xbc\x75\x45\xf9\x78\x8e\x06\xa3\x27\xbe\xca\x62\x03\xc5\xb0\xcc\x84\xf5\x73\x6c\xcc\x77\x5e\xe2\xd6\x65\xf6\xac\x84\xaa\x11\x18\xd6\x94\x66\x8c\x90\x62\x64\x66\x25\xa6\x40\xed\xcb\x34\x22\x52\x1a\xf3\x45\x57\x15\x0e\x83\xe2\x1b\x06\xc9\xb0\xec\xf8\xda\x81\x11\x8c\x91\xc1\xa2\x6e\x5c\x65\xcb\x89\x63\xb2\xbb\x74\xdb\x76\x57\xf8\x4d\x75\x0d\x27\x38\xbe\x1c\xfa\xb5\x85\x44\x5f\x50\x8a\x4b\x1a\x23\x83\x67\x5d\x9f\x2a\xc5\x12\x43\x0f\x0c\xdd\x64\x5f\x2f\xdb\x87\x0b\x5b\x51\x5e\x20\xa4\x57\x43\x81\x8b\x71\x19\x5a\xf6\x65\x5e\xfd\xb8\x51\x95\x81\x4f\xa5\x7a\x9c\xa9\x69\x5e\xa4\x8b\x3e\x8f\xa6\x95\x74\xd1\x1b\x9c\xfd\x89\x34\xd7\x0c\x6e\xc5\x3b\x45\x33\x75\xaa\x1c\x34\x49\x53\xbf\xb6\xa2\x50\xfc\xcb\xdb\x12\xe5\xa0\xc0\xf9\x13\xdf\xa7\x15\x1c\xa0\xbd\x21\x32\xe8\xf1\xf0\xb9\x9b\xa8\x31\xdc\x55\x5f\xd0\x30\xaf\xc2\x21\x7e\xec\xe8\x6e\xf5\x62\x85\xfa\x65\xaa\x5e\xbd\x4f\xbd\xca\x03\xcd\xd2\xb2\x65\x0c\xd7\xdf\x57\xbc\x80\x66\xd1\x4c\x9d\x91\x33\x8a\x4e\x74\xd1\xfd\x73\xac\x50\xd0\x44\xda\x69\x22\x1f\xed\x43\xcf\xf6\xe1\x67\xfa\x32\x4f\xc7\xe2\xfc\xc9\xbe\x9b\xc7\xd2\xa9\xdb\xe7\x61\xed\xcc\xfd\x16\xf8\x5e\xa4\x27\xb8\xa9\xd8\xd2\x20\x07\xd4\x21\xcc\xaf\x89\x81\x7b\x90\xaf\x4a\xc2\xcd\x45\xb7\xf9\x93\x4c\xfd\x12\x4f\xf3\x3b\xb8\x2a\x14\x90\x03\x33\x81\xeb\xf0\x61\x39\x44\x1e\x66\x03\x5f\xfe\xbd\x10\x4d\x87\xe4\xc7\x83\xad\x4d\xb0\xe2\x0b\x29\xf4\x7c\x0a\x3f\x97\xca\x7c\x26\x46\x47\x1f\x4e\x9d\x75\x7d\x83\x6b\x69\x65\x97\x37\xbb\x4b\xb2\x8b\xec\xa7\x2c\x19\xaf\xf9\x0a\x8d\x4c\x87\x52\xa1\xe2\xc8\x48\x0e\xcd\x61\xdd\xe0\x1f\xce\xdd\x40\x6c\xcb\x90\x0b\x26\x27\x4c\xee\x8a\x6c\x53\xe1\x26\xe1\x51\xd7\xb3\xa9\x46\xc4\x1b\x17\x6d\xbd\x1c\xf7\x25\x07\xda\x4d\x1b\x20\x7e\x7d\x76\x07\xaf\xd6\x16\x81\xa6\xd6\xbe\x51\x9e\xf0\x8d\xda\x20\x3b\x70\xe6\x34\x3a\x85\xc7\xb2\x27\xe3\xbd\x96\x7b\xd4\x3d\x9a\xc6\x87\x6f\x84\xcd\x1a\xfc\x2b\xc3\xa8\xd8\x32\xca\x59\x0b\x18\xed\x53\x3e\xc5\x02\x9a\x38\x31\xfe\xf9\x10\xfe\x7f\x77\x34\x8d\x7e\xb6\xa7\x09\x8f\x9e\x17\x05\x2c\xd0\x30\x77\x90\x5d\x6e\x88\x51\x96\xac\x94\xc9\xad\x80\xa2\xb7\x39\x8a\x36\xd1\xb4\x90\x10\x45\x74\x86\x4b\x88\x51\x74\x02\x1d\x6b\x29\x21\x92\xb1\xa2\xc9\xb1\xa2\x25\x9d\x7d\xad\x34\xba\xb3\x68\x6c\x0d\xa1\xd6\x5a\x85\x67\x53\x2a\x96\xf9\xd6\xae\xa6\xe3\x9c\x34\x67\xd3\xca\x50\x1f\x92\x77\x6c\xc5\x68\x9f\x45\x33\xe8\x5c\x9d\xc6\xd6\x75\xe7\x80\xbe\x06\x64\xba\x4b\x32\xfd\xc9\x54\x2f\x85\xc4\x05\x01\xb9\x1f\x42\x53\x09\xe4\xde\x1a\xa1\xc3\xf9\xf4\xb5\x85\x80\x54\xea\xd1\x20\x97\x72\x1f\xda\xdd\x54\xe8\xbc\x3c\xa6\xd5\x8a\x9c\x39\x24\x7e\xdc\x0a\x31\x03\xa0\x1a\x40\x35\x80\x6a\x00\xd5\x00\xaa\x01\x54\x03\xa8\x6e\x0e\xaa\x37\x4e\x4b\x28\x7e\xe7\xb6\xa6\x5a\xc2\xc1\x36\xd8\x5a\xd1\x1d\x72\x5e\xd3\x98\xe1\x1b\xab\x3a\x00\xb1\xbe\xf1\x54\x12\x20\xd6\x40\xac\xb7\x98\x58\x6f\x2a\x8f\xda\x38\xa9\xde\x96\x87\xcf\x1c\x47\xf7\xe3\x23\xd9\x42\x8c\x9d\xbf\x4f\xe5\xd6\x49\xd1\x37\x04\xaf\xfe\x37\x59\xb4\xaf\x25\xaf\x56\xc0\x34\xfe\xa7\xbd\xf8\xbb\x7d\x4d\x97\xc3\x03\x6b\x07\x26\x54\x56\x43\x1e\x8d\xb0\x61\x31\x4c\x6e\xb8\xc1\xa3\x11\xae\x39\x23\x7a\x12\x8d\x70\xe3\x66\x0d\x9c\x79\x87\x33\xef\x70\xe6\x1d\xce\xbc\xc3\x99\x77\x38\xf3\x0e\x67\xde\xe1\xcc\x3b\x9c\x79\x87\x33\xef\x70\xe6\x7d\x73\xcf\xbc\xc3\xc9\x72\x38\x59\x0e\x27\xcb\xb7\xe6\x64\xf9\x77\xb3\x68\xb0\xf6\x64\xb9\x88\x4a\xd8\xe4\x20\x39\x7e\x21\x8b\x7f\xaf\x3f\xf1\x72\xff\xe1\xce\xf2\x95\x36\x3a\x44\xf6\x28\x6f\x69\x61\x25\x71\x99\x6f\x7c\x09\x24\x2d\xed\x61\xd2\xd2\x8d\xf2\xa4\x05\xf8\x02\xf0\x05\xe0\x0b\xc0\x17\x80\x2f\x00\x5f\x00\xbe\x00\x7c\x01\xf8\x02\xf0\x05\xe0\x0b\xc0\x17\x80\x2f\x00\x5f\x6e\x02\xf8\xf2\xaf\x6e\x43\xc7\x24\x7c\x91\x76\x39\x2f\x25\x49\x5a\x9a\x0f\xa8\xbd\x18\x54\xb9\x2c\xd0\x0d\x83\x06\x01\xd3\xd7\xe9\x4a\x80\xbf\x88\xb2\x9f\xdd\x81\x76\xd7\x3c\x77\x65\xb9\x90\x91\x02\x9b\xe8\x64\x81\xda\x8b\x0b\xe2\xd1\x71\xfe\xe8\x3c\x7f\x34\x37\x24\xee\x18\x57\x9f\xbc\x5c\x68\x71\x77\x8f\xcf\x7d\x3c\x82\x5e\x83\x16\xea\xdc\x2b\x27\xd0\x78\xeb\xd3\xc1\x35\xcd\xb2\x5c\xd0\x5a\x54\x73\xe6\xe9\x34\xba\x24\xd0\xc9\xc3\xe8\x3c\x47\x27\x53\xa8\x17\x05\xa3\xd7\x8a\xa3\x43\xf3\x68\x2e\x39\x3a\xd4\xa3\xa2\x5f\x27\xdc\x8e\x17\xd0\xab\x15\xb7\xe3\x1e\x95\xdd\xbd\xc3\x8d\xe7\x06\x21\x7a\xf4\x6a\x7b\xe0\x73\x0e\x9f\x8d\x80\x4f\x93\xc1\x2b\x01\x50\xab\xfa\xd5\x50\x20\x70\x92\x5d\xdb\x49\x76\x06\x8e\x09\xb6\x38\x26\xd8\x73\xb7\xc1\xcf\x67\xd1\x51\x21\x91\xfd\x92\x6e\x68\x2d\xc4\xb2\xf4\x22\x74\x6d\x5a\x62\x03\xd3\x29\x07\xf8\xbd\x59\xfc\xee\x7e\x74\x27\x7b\x6a\xbc\x4e\x26\x4b\xe7\xfa\x36\xde\x84\xae\x4d\x8b\xa2\xb0\xdc\x71\x76\xeb\x7c\x7d\x49\x91\x57\x61\x72\xe3\xf5\x86\xb7\x0d\x74\x4e\xc8\xe8\x71\x74\x9a\xcb\xe8\x93\xe8\x38\xba\xbf\xa5\xb0\xe3\x3d\x10\x3b\x14\x26\x9f\xdd\x13\x8f\x42\xab\xbd\x80\x3b\x8b\x27\xa5\x80\x6b\x39\x16\x22\x07\xc3\xa4\x72\xe0\x61\x08\x90\x1b\x20\x37\x40\x6e\x80\xdc\x00\xb9\x01\x72\x03\xe4\x06\xc8\x0d\x90\x1b\x20\x37\x40\x6e\x80\xdc\x00\xb9\x6f\x4e\xc8\xfd\x44\x0a\xdd\x91\xb7\xdd\x72\x90\xff\x17\xb6\x5b\xf6\xf4\x70\xe9\xcd\xd8\xc5\x27\x50\x3f\xfb\x2d\xf7\x52\xdb\x2d\x9f\xb5\x6c\x7a\x4e\x77\x4c\x9b\xfa\x33\x77\xb6\xb3\xec\x67\x8e\xa0\x02\xce\x67\x87\xe3\xc3\xa8\x77\xb0\x7f\xa3\x4f\xb6\xdd\x72\x76\xa7\x7c\x8d\x72\xbe\x14\xff\xfb\x01\x34\xd4\x51\xda\xe5\x80\x1a\x3e\x0d\x03\xfc\xe3\x03\xf8\x29\x25\xdb\xb2\xdf\x99\xaf\xe3\x02\x7f\xba\x47\xfe\x8d\xf7\x36\x4d\x97\x2c\x5e\x31\x6b\x05\xbd\x0b\xac\x70\x03\x79\x33\x9e\x6b\x8f\x75\xf6\xe3\x81\x26\xd1\x9d\xe3\xd4\xc8\xa2\x7d\x51\x47\x7e\x91\x80\x76\x00\xed\x00\xda\x01\xb4\x03\x68\x07\xd0\x0e\xa0\x1d\x40\x3b\x80\x76\x00\xed\x00\xda\xd9\x5c\xb4\x73\xfd\xc5\x26\x02\x78\x04\xf0\x08\xe0\x51\x67\xf0\xe8\x9d\x19\x34\x51\x73\x3c\xb5\x44\x43\x7d\xa4\xf3\x84\x13\xf9\x80\x87\xe3\xc4\x9f\xbb\x13\xff\x74\x1f\xba\x5d\x1e\x5d\xe5\x85\x64\x06\xf9\x90\x13\x37\x44\xed\xdd\x3a\xf7\x84\x38\x67\xca\x9f\x6c\x16\xe5\x52\x84\xfd\xec\xad\xbb\xe4\xcc\x1b\xd0\x84\x20\x28\x0f\xa0\x51\x4e\x50\x8e\xa2\x11\x74\xb8\x5d\x2e\x15\x5e\xc7\x1e\xe6\x48\x58\x68\xcf\x54\x0e\x63\xad\xf1\xf0\x67\xeb\xb0\x5b\x23\x28\xf3\xe5\x5d\x75\xbd\x91\x8b\xf2\x22\x74\xd0\x21\x43\x35\x59\x7b\x37\xb5\x4f\x8a\x67\xd1\x24\x2a\xd6\xb9\xb0\x76\xd1\x29\x10\x19\x14\x72\x23\x74\xe9\xf4\xf8\xe1\x54\x6f\xc4\xc2\x39\xe1\xda\x3c\x8e\x4e\x27\xae\xcd\x9b\x2d\x60\x78\x3e\x84\x8d\x10\x30\xc5\xbf\xb9\xad\x4e\xc0\x1c\x69\x88\x6e\xdc\x81\xa4\xc9\x29\x69\xf9\x36\x4d\xce\x40\x9c\xe3\x1b\x4f\x9a\x41\x9c\x63\x88\x73\xbc\xc5\x71\x8e\x37\x49\x9b\x6c\x9b\x96\x6f\x23\xc4\x3d\xc4\x36\x8e\x4e\x25\x98\xd4\xb3\xdd\xd5\x0a\x75\xae\x25\xb6\xf1\x64\x5c\x48\x8b\xd8\xc6\xc9\x0d\xd7\xdb\x21\x84\x6b\x8f\x6d\x9c\x7c\xfb\x36\x88\x6d\x9c\x54\x06\x4e\x1e\xc0\xf6\x34\x6c\x4f\xc3\xf6\x34\x6c\x4f\xc3\xf6\x34\x6c\x4f\xc3\xf6\x34\x6c\x4f\xc3\xf6\x34\x6c\x4f\x6f\xf5\xf6\x34\x6c\x1e\xc3\xe6\x31\x6c\x1e\x6f\xcd\xe6\xf1\x57\xd3\xe8\xfb\x05\x27\x71\x68\xb8\xe2\xfa\x57\x99\xa2\x24\x83\x38\xe0\xcf\xa6\xf1\xef\xa4\x11\x4a\xae\x64\x32\x65\x9e\xa0\x73\xd1\xf5\x2b\x71\x33\xea\x84\x1b\xde\xb9\x57\x96\x69\x78\x21\xbe\x75\x7c\x6e\xfa\x21\xf6\x73\xef\x90\x7f\x43\x41\xa3\x0d\x05\x8d\x76\x52\xd0\x8c\xd5\x92\x47\x88\x2c\xd8\x87\x79\x16\xec\xf4\xc5\xf3\xf8\x34\x3a\x85\xc6\xba\x00\xfe\xd1\xc7\x4b\xbe\x81\xff\x39\x8b\x0e\x8b\x56\x0e\x8c\x25\x6a\x56\x6d\xa5\x95\xe3\xd3\x16\x9e\x6f\xb9\xbe\x15\xae\x1a\xb6\x1e\x04\x34\xc0\xcf\x65\xf1\x67\xfb\xd1\x4b\x92\x27\xae\x2c\x17\x32\xab\x9d\x1d\xb2\x98\x93\x65\x4d\xb0\xb2\x7a\x74\xd6\x22\xcb\x1f\x58\x88\xab\x73\xb9\x50\xf3\x16\x38\x6e\x71\x0d\xc1\xa3\xdf\xd0\x1e\x70\x8d\xe1\x93\x02\x67\xd5\xb4\x3a\x6a\x72\x4e\xa3\x61\x8c\x01\xe5\x02\xca\x05\x94\x0b\x28\x17\x50\x2e\xa0\x5c\x40\xb9\x80\x72\x01\xe5\x02\xca\x05\x94\x0b\x28\x17\x50\x2e\xa0\x5c\x37\x05\xe5\xfa\x2f\x03\xa8\xd0\x51\x68\x0b\xcf\x35\x43\x5a\xf1\xb8\x76\x8f\xdf\x35\x80\x3f\xaa\xc4\xb7\x58\xe9\x10\xbd\xb8\xe6\x25\x59\x44\x8f\xc0\xcb\xbe\xa6\x41\x2e\x94\xf7\x00\x7a\xb9\x06\xf4\xf2\x70\x7b\xf4\x92\xc3\x07\xea\x43\x60\x28\xad\x0f\xe9\xba\x80\xb4\x00\x69\x01\xd2\x02\xa4\x05\x48\x0b\x90\x16\x20\x2d\x40\x5a\x80\xb4\x00\x69\x81\x70\x17\xc0\x72\x80\xe5\x00\xcb\xe9\x39\xcb\xf9\xeb\x2c\x1a\x89\x13\x82\xb9\x81\xa1\xdb\x96\x53\xce\x2f\x8f\x88\xa8\x17\x9c\x00\xb8\x4e\xa8\xdb\x9e\x6b\x46\x37\x50\x3f\xc0\x9f\xcc\xe2\x4f\xf4\xa3\x97\x2b\xcf\x5c\x91\xcf\x64\xee\x5f\xfb\xa0\xd7\xb9\xb8\xc8\x39\xd7\x1c\x8f\x8b\xcc\x9d\x62\x8f\x8d\x27\xe5\x5d\x16\xc5\xb5\xb8\xfd\x7a\x3b\x03\xb6\xdc\xda\x49\xea\x07\x05\xc8\xb9\x84\xe6\x39\xc8\x99\x45\x33\xe8\xdc\x5a\xe9\xb8\xa2\x06\xd2\x64\x83\x6b\x2d\x9a\x68\xd6\x0a\xc2\x08\xdd\x94\xdb\x53\x99\x49\x5c\x4c\x92\x6b\x45\xef\x90\x78\xa6\xc5\x1b\x14\x54\x23\xaa\x82\xda\x1d\x3d\x03\x9e\x03\x3c\x07\x78\x0e\xf0\x1c\xe0\x39\xc0\x73\x80\xe7\x00\xcf\x01\x9e\x03\x3c\x07\x78\x0e\x78\xce\x00\x6d\x01\xda\x72\x33\xd0\x96\xb7\xf5\xa1\xac\xa0\x2d\x86\xeb\xfa\xa6\xe5\x34\x4d\xf3\x8b\xbf\x92\xc6\x5f\x4e\xa3\x57\xa8\xf7\xc4\x71\x74\x5e\x55\xa6\x61\xed\x72\x27\xbe\x26\x97\x2d\xd3\x70\x42\x79\x42\xc6\xcd\x19\x9f\x9b\x8e\x8c\xac\x1e\x06\x8c\xeb\xd9\xe9\x31\x0f\xbd\x46\xf0\x8f\x0b\x68\x96\xf3\x0f\x1e\xed\xb2\xbb\x43\x62\xd1\x77\x76\x12\x24\x07\x7f\xe7\x20\x3a\xdb\x3e\xef\x72\xcb\xb8\xaf\xae\x1d\xfd\xf2\x66\xfc\xcc\x41\xfc\xbf\xd2\xe8\x15\xcd\x32\x31\x67\x5e\xc5\x05\x41\xad\x81\x3e\xef\xda\x34\xb7\x9f\x5d\x68\x92\x72\x59\x09\xf7\xe7\xda\xb4\xc7\xe1\x5d\x17\xd0\x09\xd1\xda\x05\x94\xe7\xad\x7d\x10\x0d\xa2\xfd\xed\xf2\x21\xf3\x54\xc8\xd7\x1a\xd3\xf5\x87\xda\x23\xa8\x51\x7c\x62\x1d\xe9\x8f\x6b\x1c\x85\x32\x9f\xda\xd5\xa2\x03\x32\x51\x94\xd7\x26\x7d\x70\x40\x5e\xdb\xe4\x6e\x28\x8e\xa1\x93\xe8\x78\x5d\x2c\xc4\x4e\xfb\x01\x02\x1f\x42\x18\xd7\x2e\xc3\xb8\xbe\x33\x75\x0d\xd3\xff\x94\x88\xdd\x7a\x0c\x1d\x4d\x62\xb7\x6e\x8a\xf4\xe0\x01\x5b\x37\x56\x7a\xe4\x7e\x71\x77\x0b\xe9\xf1\x12\x61\xf8\x10\x5d\x08\x8c\x41\xf1\xbf\x9b\x2d\x2f\x2e\xa1\x79\x34\xa7\xca\x8b\x5c\x11\x9d\xe9\x62\x8d\x9c\xe4\xb5\xbf\xc8\x09\x7b\x00\x82\xa4\x9d\x20\xf9\x5a\x1a\x71\x4d\x2c\xf3\xa5\xb8\x81\x3e\x9e\xbe\xa4\xaa\xb5\x96\x43\x02\xa1\x9a\x92\x12\x5d\x74\x85\x95\x18\x99\x72\xc9\x16\x86\xb4\x9e\x79\x15\x15\x41\xe1\xb8\xce\xb0\x43\xcb\x3a\x6f\x08\xa9\xd9\xaa\x02\x45\x40\x9d\xb8\x0b\xe4\x50\xb4\x2a\x15\x6a\x32\x91\x65\xaf\x4a\x12\xae\xee\x73\x38\x96\x3d\x24\x15\x5e\x6e\x18\x91\xb2\xcf\x16\x3f\x8f\xfa\x96\x6b\xc6\x8a\x7b\xb2\x0e\x86\xab\x5e\x42\x12\xaa\x01\xab\xa4\x6a\x52\xe9\xec\xc9\xe8\x83\xe4\x4b\x16\x05\xde\x88\x8a\xd0\x44\x3d\x45\xe8\xd1\x26\x75\xcc\x62\x5e\x85\x39\x5e\x83\x26\x8a\x7c\xf1\x0b\x69\xf4\x42\x1a\x3f\x9f\xce\x3c\x17\x37\xf3\x53\xe9\x49\xc5\xd5\xdb\x63\x36\x0c\x8d\x59\xd4\x9c\xef\x7a\x7a\x99\x77\xc0\x9c\x6b\x5b\xc6\xea\x90\x68\x03\x41\x5f\xa2\x6f\x49\x7c\xc5\x59\x2f\x15\xb4\xe3\x1a\x59\x10\x1d\x22\x5a\xc7\xa3\x8e\xc9\xec\xeb\x18\x6b\x52\xe2\xfa\xde\x92\xce\xcc\x66\xde\xac\x7e\x95\xe6\x17\x75\x3b\xda\x06\xc8\x8a\xab\x59\xb2\x68\x39\xba\x6d\x3d\x1e\xf1\xc4\x12\x65\x86\x02\xc7\x14\x79\x61\x20\x98\x89\x01\x2a\x0a\x1f\x0c\x92\x87\x04\x78\xd7\xc8\x94\xc5\x87\xb3\x52\x71\xd7\x6f\xfc\x32\x4e\xa1\xc4\x1e\x98\xe0\xfe\x7c\xb2\xb9\xe1\x92\x96\xdd\x2d\xea\x33\x19\x7d\x48\xa0\x1a\x1a\xc5\xb7\xf5\xa3\xb7\xf4\xe3\x27\xfa\x33\xdf\x8b\x6d\xf2\x17\x99\x4d\xce\x5f\xca\xa6\xd4\x92\xbb\x42\xca\xba\x5f\x62\xb6\xab\xe1\xda\x36\xe5\xf2\x36\x99\x17\xd4\x5f\x74\xfd\x0a\x6b\x8b\xa6\x35\xbd\x58\xf7\xf2\xd6\x15\xe5\xe3\x39\x1a\x8c\x9e\xf8\x2a\x8b\x0d\x14\xc3\x32\x13\xc2\xce\x61\xad\x08\x4d\x1b\xb5\x6e\xc0\x63\x63\xf0\xab\x11\x8e\xd5\x94\x66\x8c\x40\x5e\x64\x00\x0d\xcb\x01\x69\xd4\xbd\x4c\x23\xe3\x86\x41\x3d\xb1\xba\xaa\xc2\x61\x50\x7c\xc3\x20\x19\x96\x1d\x5f\x3b\x30\x82\x31\x32\x58\xd4\x8d\xab\x6c\x4d\x71\x4c\x76\x97\x6e\xdb\xee\x0a\xbf\xa9\xae\xe1\x04\x3d\x97\x43\xbf\xb6\x90\xe8\x0b\x4a\x71\x49\x63\x64\xf0\xac\xeb\x53\xa5\x58\x62\xe8\x81\xa1\x9b\xec\xeb\x65\xfb\x70\x61\x2b\xca\x0b\x84\xf4\x6a\x28\x70\x31\x2e\x43\xcb\xbe\xcc\xab\x1f\x37\xea\xaa\xff\xa9\x14\x9a\x67\x6b\xf7\x08\x3e\x8f\xa6\xd1\x2e\xd1\x1a\xd4\xc4\xa7\xd0\x18\x3a\xd9\xc5\x22\x22\x62\x8f\xb7\xde\xcf\x9e\x15\x2a\xc6\x14\x9a\xe0\x2a\xc6\xb5\xbd\x26\x52\x0f\x48\x73\xf5\xe0\x56\xbc\x53\x34\xd3\x46\x6b\x08\xc5\xff\x7e\x5b\x0b\x0d\x61\xa0\x21\xc8\x7b\x13\x43\xe3\x3e\x1e\x88\x78\x13\xd5\x06\x08\xe8\x7e\xe3\xa9\x23\x10\xd0\x1d\x02\xba\x6f\x71\x40\xf7\x8d\xe4\x47\x6d\xa3\xb8\x6f\xac\x84\x9f\x29\xa0\x3c\x1e\xce\x1e\x8a\xfd\x5c\x77\xd7\xc4\x73\x77\x6d\x7a\x43\x44\x72\x7f\x71\x2f\xda\x1d\x9d\xdd\x0c\xa8\xbf\x6c\x19\x34\xc0\xbf\xbd\x17\x7f\xba\x2f\x39\x9a\xb9\x7f\x6d\x0f\xbe\x05\xf1\x58\x6e\x2f\xbb\x4d\x9c\xa3\x94\x3f\x5d\x6f\x5e\x79\xaf\x43\xa7\xc5\x70\x3e\x81\x8e\xf1\xe1\x7c\x18\x69\x68\xa8\xe5\x70\x66\xed\xc3\x55\x13\xf1\xb5\x1d\xc5\x62\x9f\x6e\x3f\x68\xef\xc3\xfb\x1a\x53\x82\xf3\x37\xd4\x0c\x50\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x03\xdf\x3a\xf0\xad\x4b\xe1\x4f\x0f\x20\xad\xa3\xa8\x54\xd4\x31\x3d\xd7\x72\xc2\x00\xbf\x7d\x00\x3f\xa3\x84\xa4\xaa\x76\x16\x92\x6a\x2a\x7a\xbe\xa7\x91\xc0\xeb\x03\x52\xc5\x6f\x81\x70\x54\xcd\xc9\xca\xf9\xf6\x64\xe5\x00\xbe\x4f\xf0\x94\xb8\x31\x9b\x05\xf8\xce\x66\x51\x47\xb1\xad\x00\xb0\x00\x60\x01\xc0\x02\x80\x05\x00\x0b\x00\x16\x00\x2c\x00\x58\x00\xb0\x00\x60\x01\xc0\xb2\xb9\x80\xe5\xfa\xdb\x71\x07\x84\x03\x08\x07\x10\x4e\x67\x08\xe7\xa9\x7d\x22\x18\x55\x7b\x84\xc3\xd4\x83\xf8\xfc\xdd\x5f\x0d\xe0\x2f\x28\x18\xe7\xd9\x94\x6c\x73\x05\xde\x38\x91\x88\x8a\x9c\x58\x38\x63\xe8\x09\xc0\x19\x4a\x94\x11\xae\x70\xc9\xa5\x8b\xe9\x33\x89\x96\x35\x58\xa3\xd8\x2a\x65\x6b\xb9\x4c\x73\xfc\xc3\xea\x07\xd8\x67\x3d\x6e\x62\x2b\xc2\x4d\xec\xa1\xf6\x5c\x68\x1f\xce\xd6\x7b\xdc\x88\x97\x43\xec\x71\xc0\x3d\x80\x7b\x00\xf7\x00\xee\x01\xdc\x03\xb8\x07\x70\x0f\xe0\x1e\xc0\x3d\x80\x7b\xb6\x0e\xf7\x8c\xa0\xc3\x58\xcb\x0e\xc5\xb8\xe7\x65\xea\x99\x0c\xae\xb2\xdf\x08\x87\x32\x00\x11\x01\x22\x02\x44\xd4\x19\x22\xfa\xd6\x00\x1a\xeb\x2c\xf7\x9c\x3c\x00\xea\x84\xcb\xae\x5d\xad\x50\xc3\xd6\xad\x4a\x80\x3f\x31\x80\x5f\x50\x58\xd1\x8f\xa5\x3a\x4c\x43\x17\x97\x76\x99\x97\x36\xc1\x4a\xeb\x91\xff\x8f\xd6\x3c\x21\x5d\xb3\x37\x82\x2f\xd0\x35\xa4\xa6\x7b\xa4\x3d\x18\x3a\x8a\x47\x1a\x52\xd3\x35\xeb\x07\x00\x45\x00\x8a\x00\x14\x01\x28\x02\x50\x04\xa0\x08\x40\x11\x80\x22\x00\x45\x00\x8a\x00\x14\x81\x5f\x10\x40\x1f\x80\x3e\x00\x7d\x7a\x0e\x7d\xbe\x9c\x45\x77\xd7\x42\x9f\xe8\xa9\x37\x55\xdd\x50\x0f\xf0\x6f\x66\xf1\xa7\x14\xaa\xb3\xda\x19\xd4\x89\xec\xb4\x57\xb3\x42\x7a\x04\x73\x86\x14\x98\x53\x53\xfe\xac\x15\x84\xd7\x5b\x7c\x9c\xad\x40\x39\x17\xdb\x53\x9a\x21\x9c\xab\xa7\x34\x35\x4d\x5d\x1b\x36\x07\x8e\x76\x01\xc2\x01\x84\x03\x08\x07\x10\x0e\x20\x1c\x40\x38\x80\x70\x00\xe1\x00\xc2\x01\x84\xb3\xfd\x10\x0e\x00\x16\x00\x2c\x00\x58\xb6\x06\xb0\x7c\xa8\x0f\x1d\x12\xc9\xd0\x74\x93\x69\x91\x96\xeb\xf8\xb4\x6c\xf1\xe8\xef\xcd\x12\xd4\x7d\x3b\x8d\xbf\x99\x46\x7b\x9a\xde\xdc\x3e\x53\xdd\xa1\x32\x0d\xc7\x9b\x3d\x0a\x29\xeb\xd6\x4c\x59\xf7\xed\xbd\x28\x23\x7b\xc9\xf3\x02\x1e\xc1\x39\xd4\x43\xba\x58\xb5\x03\x1a\x06\xf8\x8b\x7b\xf1\x7f\xeb\x43\x3b\xd9\xb5\x2b\xcb\x85\xcc\xc1\x36\x51\x9c\xe5\xa3\x0b\x34\xcc\xf1\x80\xcf\xe3\x9e\x17\x5c\x2e\x28\x3f\x5f\x6f\xb4\xea\x0d\x68\x42\xf4\xcb\x03\x68\x94\xf7\xcb\x51\x34\x82\x0e\xb7\x8c\xe6\xcc\xda\x29\x4a\x34\x21\xbf\xb8\xa3\x88\xce\xeb\x02\x54\xec\x25\x51\x4c\xe7\xe4\x3d\x10\xd7\x19\xd8\x14\xb0\x29\x60\x53\xc0\xa6\x80\x4d\x01\x9b\x02\x36\x05\x6c\x0a\xd8\x14\xb0\x29\x60\x53\xc0\xa6\x80\x4d\x01\x9b\xaa\x63\x53\x7f\x31\x80\x8e\x0a\xea\x21\xc7\x4d\x3d\x8d\x12\x1e\x41\x46\x60\x99\xbe\xc5\x46\x7c\x14\x16\xe8\x23\x03\xf8\x3b\xfd\xe8\x0e\xf9\x54\x8c\xa5\x3e\xd6\x49\x78\xa0\x89\x85\xe9\x49\x5e\xda\xb6\x08\x11\x74\x37\x7f\xdd\x82\xf8\x10\x09\xc9\xe2\x1a\x6e\x77\x2c\xb3\x2d\x83\x04\xbd\xbe\x3d\xc4\x39\x89\x8f\x4b\x88\x53\x3b\xee\x24\xce\x89\xdb\x5f\x85\x39\xbc\x67\x80\xd8\x00\xb1\x01\x62\x03\xc4\x06\x88\x0d\x10\x1b\x20\x36\x40\x6c\x80\xd8\x00\xb1\x01\x62\xb3\xc9\xc4\xe6\x18\x3a\x8a\x47\xb2\x87\xe3\x03\x61\xaf\x54\x23\x07\xc5\xba\x7b\x63\xf4\x20\x20\x3d\x40\x7a\x80\xf4\x6c\x0d\xe9\xf9\xb3\x01\x11\xfe\xb9\x3d\xe9\x71\x5c\x93\xc6\x9c\xe7\xe9\x01\xfc\xb7\x4d\x38\xcf\x47\x3a\xe4\x3c\x17\x5c\x93\x6e\x0b\xca\x93\x69\x4e\x79\x58\xfd\xb6\x3f\xe3\x69\x45\x64\x7a\x0f\x7f\x3a\x66\x3c\xaf\x6b\xcf\x78\x8e\xe3\xfb\xdb\x30\x1e\xd6\xfa\x40\x78\x80\xf0\x00\xe1\x01\xc2\x03\x84\x07\x08\x0f\x10\x1e\x20\x3c\x40\x78\x80\xf0\x00\xe1\xd9\x6a\xc2\x73\x14\x8d\xe0\xc3\x59\x2d\x26\x3c\x2f\xaf\x23\x3c\x4c\x73\x07\xbe\x03\x7c\x07\xf8\xce\x76\xe1\x3b\xff\x66\x08\xdd\x1f\x85\xf1\x69\x11\xb5\x99\xad\x25\x96\x41\x75\xc3\x60\xea\x41\x8c\x78\xfe\xfa\x10\xfe\xdd\x1d\x49\x7c\x9f\xbd\x7c\x7c\xd5\x5a\x8b\x0b\xe2\xc9\x71\xf1\x64\x2e\xcb\x6e\xa9\x8f\xa9\x5c\x7b\x4f\xef\x8e\x96\xf5\xe5\xf2\xb9\xe2\xb3\x29\xf4\x4c\x0a\x3f\x9d\xca\x7c\x28\xee\x91\xb7\xa6\x16\x84\x0e\xc2\xf5\x98\xc7\xb8\x3e\x50\x62\x7f\xe9\x46\xa8\x11\x32\xc5\xfe\x1b\xfd\x5e\xd1\x2d\x27\xd4\x2d\x27\x20\x86\x5d\x0d\x42\xea\x0f\xcb\x6f\x33\xa4\xaa\x4c\x6c\xeb\x2a\x25\x83\xf1\xd7\x0c\xb2\xe9\x1f\x41\x2b\x8d\xcc\xd9\xba\xe3\xc8\x09\xcd\xbb\x4a\xb7\xd9\x0c\x2a\x68\x85\x13\x5a\x76\x07\x7f\xa5\xda\x19\xc5\xa7\x52\xe8\x03\x29\xfc\xfe\x54\xe6\xbd\x71\x75\x1f\x8f\x6b\x1b\x13\x87\x52\x54\x6f\xf6\x0a\x32\x25\xaa\xca\xa6\x89\x17\x44\xd5\x92\xab\x55\x35\x60\x8b\x90\xee\x08\x9d\x41\x8c\x8a\x75\xd4\xf0\x16\xf1\x1a\xb5\x8a\x33\x3f\x84\x8a\x02\x1e\x8d\xa1\x93\x1c\x1e\x1d\x41\x05\x94\x6f\x79\xa0\x8b\x8d\x0e\x7e\xa0\xab\xa6\x97\xdb\xfa\x0a\xed\x69\xce\x91\x6e\xc1\xfd\x65\x1a\xa2\x47\xe7\xda\x53\xa4\x61\x7c\xa8\x3e\x1e\x51\x5d\x1d\xd4\xf3\x5e\x99\xcf\xee\x4a\x46\xf2\x3e\x9f\x7a\xb6\x6e\xd0\xb5\x07\xf3\x7e\x79\xd7\xa6\x8e\xe7\x29\x34\x81\xc6\x71\x7f\xc9\x35\x57\x33\xfc\x5f\x92\xca\xad\xbf\xf9\x8b\x1f\x4c\xa3\x9f\x4f\xe3\xf7\xa5\x33\xef\x4e\x47\xe3\xec\x1f\x52\x7c\x11\x92\x9a\xc1\x10\x8f\xd3\xc5\xc6\x88\x1c\x4b\x35\xd6\x68\xa4\xc5\xb3\x51\x55\xa2\x24\x8a\xea\x6e\x6a\x64\xdc\x21\x96\x23\x38\x90\xeb\x93\xaa\x13\xa3\x24\x93\x98\xfe\xea\x7c\xd5\x21\xa6\xe5\x53\x26\x4c\x69\xcc\x27\xf8\xc2\xc0\xf4\x38\x09\x68\x22\x73\x4c\x9a\xc4\x64\xb1\xea\x73\x95\xdf\xf3\x5d\x83\x06\x81\x5c\x3b\x15\xcb\x45\x23\x97\xf9\x1b\xf9\xec\xe0\x1a\x12\x5b\x38\xc7\x6d\x7b\x94\xab\x53\xa6\xbf\x4a\xfc\xaa\xc3\x4c\x75\x26\x7d\x23\x1d\x52\x16\x47\xcd\xec\x2d\xa2\x6a\xca\x52\x53\x7c\x4f\x1a\xbd\x2b\x8d\xdf\x91\xce\xbc\x3d\x6e\xa0\xaf\xa7\xf8\xdc\x7a\x58\x77\xf4\x32\xf5\x85\x2d\x29\x22\x19\x06\x81\x6b\x58\x5c\x3d\x8a\xad\x36\x9d\x9b\xbd\xae\x4f\x98\xf6\x1c\xae\xc6\xfa\x62\x45\xbf\xca\xea\x1f\x2e\xd1\x80\x46\xeb\x01\x5b\xa3\x22\x9e\xc6\x91\x52\x89\x12\xbe\x12\x71\x0b\xcd\xf5\x49\x61\xe4\x04\xbb\xd7\xd7\x0d\x0e\xfe\x6c\xd7\x29\x0b\xe9\xcf\xad\x28\xa6\xf0\xea\x96\x23\xf4\x21\x6e\xa5\x24\xf7\x72\x18\x22\xb1\x24\xb3\xad\xf9\xe4\x1a\xcd\xe7\xcb\xae\xad\x3b\x65\xcd\xf5\xcb\x79\xef\x6a\x39\x5f\x75\x2c\xc3\x35\x69\x7e\x60\x3a\x98\x63\xa5\x68\xd9\xdb\xd5\x6f\x55\xd7\xe0\xa7\x53\x3d\x99\xff\x0f\xb1\x32\x0a\xf8\x0c\x7a\x10\xed\x9c\x10\x46\xc1\x66\x0b\x12\xaf\xda\xb1\x20\x69\x2b\x3e\x12\x49\x93\xfb\x99\xdd\x89\x20\x79\x95\xb0\x6c\x88\x5e\x2f\x3b\xf6\x89\x0b\x9b\x2a\x3a\x2e\xa1\x79\x34\xa7\x8a\x8e\x5c\x11\x9d\xe9\x02\xfa\x4f\xf2\xaa\x5f\xe4\x24\x3d\x00\x49\xd2\x4e\x92\x7c\x2d\x8d\xbe\x92\xc6\x5f\x4e\x67\xbe\x14\x37\xd0\xc7\xd3\x97\x54\x45\xd4\x72\x48\x20\x94\x49\x52\xa2\x8b\xae\xb0\x06\x23\x93\x2d\xd9\xaa\x90\x56\x32\xaf\xa2\x22\x29\x1c\xd7\x19\x76\x68\x59\xe7\x0d\x21\x75\x51\x55\xa2\x08\x78\x13\x77\x81\x1c\x91\x56\xa5\x42\x4d\x26\xb3\xec\x55\x49\xbc\xd5\xfd\x0c\xc7\xb2\x87\xa4\x8a\xca\x4d\x19\x52\xf6\xd9\x72\xe8\x51\xdf\x72\xcd\x58\xd5\x4e\x56\xc6\x70\xd5\x4b\x88\x41\x35\x60\x95\x54\x8d\x20\x9d\x3d\x19\x7d\x90\x7c\xc9\xa2\xa2\x92\x58\xec\x01\x5e\xcf\x0a\xd5\x9d\xa6\x75\xcc\x62\x5e\x85\x39\x5e\x83\x26\xaa\x77\xf1\x0b\x69\xf4\x42\x1a\x3f\x9f\xce\x3c\x17\x37\xf3\x53\xe9\x49\x65\xff\xd0\x63\x56\x07\x8d\x99\xd3\x9c\xef\x7a\x7a\x99\x77\xc0\x9c\x6b\x5b\xc6\xea\x90\x68\x03\x41\x59\xa2\x6f\x49\x36\x20\x85\x52\x74\x5c\x23\x8a\xf2\x68\x52\x8f\x3a\x26\xb3\xa3\x63\x7c\x49\x89\xeb\x7b\x4b\x3a\x33\x8f\x79\xb3\xfa\x55\x9a\x5f\xd4\xed\x08\xf7\x67\xc5\xd5\x2c\x59\xb4\x1c\xdd\xb6\x1e\x8f\xb8\x61\x89\x32\xd5\x9e\xe3\x88\xbc\x50\xe9\xcd\xc4\x64\x14\x85\x0f\x06\xc9\x43\x02\xb0\x6b\x64\xca\xe2\xc3\x59\xa9\xb8\xeb\x37\x7e\x19\xa7\x4d\x62\xaf\x4b\xf0\x7d\x3e\xd9\xdc\x70\x49\xcb\xee\x16\xf5\x99\x8c\x3e\x24\xa8\xd1\x46\xdf\xd6\x8f\xde\xd2\x8f\x9f\xe8\xcf\x7c\x2f\xb6\xa2\x5f\x64\x56\x34\x7f\x29\x9b\x52\x4b\xee\x0a\x29\xeb\x7e\x89\x59\x9b\x86\x6b\xdb\x94\x0b\xd7\x64\x5e\x50\x7f\xd1\xf5\x2b\xac\x2d\x9a\xd6\xf4\x62\xdd\xcb\x5b\x57\x94\x8f\xe7\x68\x30\x7a\xe2\xab\x2c\x36\x50\x0c\xcb\x4c\x48\x3a\x87\xb2\x7c\x5f\x23\x6e\x5d\x66\x91\x4a\x64\x19\x61\x57\x4d\x69\xc6\x08\xd8\x45\x86\x52\xa2\xde\xd7\xbe\x4c\x23\xe3\x86\x41\x3d\xb1\xbc\xaa\xc2\x61\x50\x7c\xc3\x20\x19\x96\x1d\x5f\x3b\x30\x82\x31\x32\x58\xd4\x8d\xab\x6c\x7d\x70\x4c\x76\x97\x6e\xdb\xee\x0a\xbf\xa9\xae\xe1\x04\x25\x97\x43\xbf\xb6\x90\xe8\x0b\x4a\x71\x49\x63\x64\xf0\xac\xeb\x53\xa5\x58\x62\xe8\x81\xa1\x9b\xec\xeb\x65\xfb\x70\x61\x2b\xca\x0b\x84\xf4\x6a\x28\x70\x31\x2e\x43\xcb\xbe\xcc\xab\x1f\x37\xea\xb2\xff\xa9\x14\x9a\x15\xcb\x3e\xd3\x40\xd9\xb2\x7f\x0a\x8d\xa1\x93\x5d\x2c\x1f\x0b\xa1\x1e\x56\x03\x34\xcf\x4a\x1b\xc1\xe7\xd1\x34\xda\x25\xda\x96\x9a\xd7\x5a\x66\x3b\x5d\x80\x34\xd7\x05\x6e\xc5\x3b\x45\x33\x6d\x80\x3a\x50\xfc\xa3\xdb\x12\x75\x60\x98\xb3\x23\xbe\xff\x29\x6c\xf8\xb5\x0d\x8c\x01\xaf\x59\x0a\xa2\x8d\xd2\x11\xee\xaa\x2f\x68\x98\xbf\xfe\x10\x0f\xca\x72\xb7\x7a\xb1\x42\xfd\x32\x55\xaf\xde\xa7\x5e\xe5\x61\x63\x68\xd9\x32\x86\xeb\xef\x2b\x5e\x40\xb3\x68\xa6\xce\x78\x19\x45\x27\xba\xe8\xf0\x39\x56\x28\xe8\x1e\xed\x74\x8f\x8f\xf6\xa1\x67\xfb\xf0\x33\x7d\x99\xa7\x63\x01\xfe\x64\xdf\xcd\x63\xc5\xd4\xed\x9b\xb0\x76\xe6\x7e\x00\x7c\x6f\xcf\x13\xac\x53\x6c\x11\x90\x03\xea\x10\xe6\xd7\xc4\xc0\x3d\xc8\xd7\x21\xe1\x36\xa2\xdb\xfc\x49\xa6\x70\x89\xa7\xf9\x1d\x5c\xf9\x09\xc8\x81\x99\xc0\x75\xf8\xb0\x1c\x22\x0f\xb3\x81\x2f\xff\x5e\x88\xa6\x43\xf2\xe3\xc1\xd6\xe6\x55\xf1\x85\x14\x7a\x3e\x85\x9f\x4b\x65\x3e\x13\x03\xa0\x0f\xa7\xce\xba\xbe\xc1\xf5\xb2\xb2\xcb\x9b\xdd\x25\xd9\x45\xf6\x53\x96\x8c\xd7\x7c\x85\x46\xa6\x43\xa9\x42\x71\xf0\x23\x87\xe6\xb0\x6e\xf0\x0f\xe7\x6e\x15\xb6\x65\xc8\x25\x92\x73\x22\x77\x45\xb6\xa9\x70\x3b\xf0\xa8\xeb\xd9\x54\x23\xe2\x8d\xff\x3f\x7b\xff\x1e\xdf\xc6\x79\x1e\xf8\xe2\x1f\x40\x94\x2d\x3d\x76\x62\xe9\xb5\x13\x57\xf0\x6d\x04\x4a\xa2\x04\x92\xa0\x40\xdd\x49\xdd\x08\x5e\x24\x42\x94\x04\x8b\xb2\x9c\xbb\x32\x04\x86\xd0\x48\x20\x66\x32\x03\x52\x96\x7f\xbf\x74\x73\x9c\x38\x9b\x6e\x77\x7b\xc9\xb6\x9b\x1e\xb7\xe9\x7a\x93\xd4\x8d\x53\x9f\xa4\xb9\xb4\xdb\x6d\xb6\xe9\x6e\xdb\xa4\xde\xb8\xf1\x69\xd2\xa4\x69\x93\x34\x5d\xf7\xb8\x97\xdd\xb6\xbb\x69\x7b\xda\xed\x75\x73\x3e\xef\x65\x66\x5e\x00\x33\x18\x00\x04\x40\x90\x7a\xfe\x89\x15\x62\xe6\x9d\x77\xde\xcb\x33\xcf\xfb\x7d\x6e\x8b\x45\xb5\xe0\xce\x25\x83\xd0\xbe\x03\xe0\x3e\x3e\xbe\x99\x75\x6b\x0d\x70\x51\xb0\xdb\x91\xc9\xdd\x8e\xda\x0e\x8c\x32\xe3\x70\x8c\x1c\x89\x1f\x72\x2d\x1d\x31\xd9\xd2\x51\x79\xe3\x46\x28\x87\x49\x7e\x7b\x17\x9c\xe1\x7e\x80\x39\xc3\xb0\xf2\x7a\xa9\x2a\x09\x59\xfd\xc2\x7f\x4c\xf9\x76\xc9\xf1\xbf\xd8\x45\xfe\xb2\x0f\xee\x91\x1b\xa2\xdf\xc7\x17\x1a\x71\x0e\x9c\xa3\x2d\xf5\x84\x6b\x60\x5c\x64\x95\xf7\x5e\x42\xfe\x4e\xb3\x7e\xa2\x8b\x60\xad\x8b\xe0\x1b\xc2\xb7\xe2\x21\x72\x40\x6c\x45\x9f\xb5\x26\xf6\x26\x1b\xdf\xca\x9c\x5d\x61\xce\x87\xe8\x20\x88\x0e\x82\xe8\x20\x88\x0e\x82\xe8\x20\x88\x0e\x82\xe8\x20\x88\x0e\x82\xe8\x20\x88\x0e\x82\xe8\x20\xd8\x5d\x07\xc1\x51\xd8\x4f\x92\xf1\x21\xf7\xe4\xbb\x5d\x3e\x36\x33\x9d\x7e\x23\x9c\x96\xd1\x01\x11\x1d\x10\xd1\x01\xb1\x31\x07\xc4\xf7\xf4\x43\xca\x49\xa0\xae\xfb\x27\xb8\x17\x6c\x89\x5e\xc4\xc1\x9a\x4d\x5e\x8e\x93\xdf\xe8\x03\x52\x75\xcb\xd5\x95\x54\x6c\xa5\xb1\x3a\x83\x13\xd9\x59\x41\xe9\xda\x54\x64\x70\x17\xbb\x61\xa2\xb2\x43\x57\x52\xde\x73\xe6\x74\xbb\x7d\xf6\x9a\x0d\x94\x17\xac\x91\x5a\x80\xd7\xdf\x1e\x4e\x8d\x4e\x90\x71\x19\x07\x71\x4c\xe4\x0d\x3f\xb8\xd9\xdf\xfd\x56\x19\xc2\x21\x84\x43\x08\x87\x10\x0e\x21\x1c\x42\x38\x84\x70\x08\xe1\x10\xc2\x21\x84\x43\x08\x87\x30\xa3\x3b\x62\x18\xc4\x30\xb7\x05\x86\x79\xa6\x1f\x46\x38\x86\xe1\xfe\xc3\x55\xf9\xbd\x4c\x23\x9f\xd7\x6d\x6b\x99\x1d\x81\x17\x96\xf3\x05\xad\x6c\x93\x3f\x8a\x93\x57\xfb\xe0\xb5\xfc\x06\x37\xc7\xd7\x3f\x6b\x0c\xc0\x64\x8d\xfc\x94\xdb\x62\x9a\xb5\xd8\x26\x12\x73\x8c\xdd\xc0\x9d\x98\x45\xca\x2e\x9f\x87\xcd\xe9\xf6\xba\xab\xa6\xd7\xb3\x78\xe6\x6d\xe1\x78\x66\x9c\x1c\xab\x49\xd9\x25\x90\x0c\x5f\x40\x82\xd8\xf8\x4c\x15\xc2\x19\x84\x33\x08\x67\x10\xce\x20\x9c\x41\x38\x83\x70\x06\xe1\x0c\xc2\x19\x84\x33\x08\x67\x10\xce\x20\x9c\x41\x38\x73\x5b\xc0\x99\xbf\x9a\x73\xca\xed\x59\x0b\x6a\x2e\xe9\x1c\xd2\xab\xdc\x64\x38\xaf\x11\x99\xaa\x2c\xa3\xa8\xd9\xe4\x17\xe7\xc8\xa7\x77\xc2\x0e\x7a\xd7\x84\x7c\x93\x0b\x6b\xf6\x71\x7d\xcd\x12\x5b\xcc\x11\x45\x6e\x2a\x76\xde\xd8\x25\xa3\xa8\x25\x06\xe8\xa5\x97\xaa\x5b\x72\x72\xa2\x7b\x17\xf6\x38\x44\x49\x23\x4b\x40\x96\x80\x2c\x01\x59\xc2\x6d\xc3\x12\xd2\x3d\xc3\x12\xda\xde\x93\x96\x59\x42\x1a\x59\x02\xb2\x04\x64\x09\xc8\x12\x90\x25\x74\x9f\x25\xa4\xf1\xe8\xbf\x01\x8f\xfe\xe9\x5e\x3f\xfa\xa7\xd7\xe1\xd1\x3f\x93\x83\xb3\xdc\xe4\x3f\x01\xa7\x98\xc9\xff\x18\x1c\x81\x43\x81\x09\x74\x18\x1f\x10\x87\xfb\xa4\x74\x28\x9f\xd3\xed\x70\x53\xbf\x1e\x6e\xc5\x9f\x21\x53\xc2\x68\x1f\x48\x22\x9c\x3a\x5d\xde\xc3\x6b\x6b\x75\x5d\x7f\xd8\xdf\xab\xe0\x4e\xb2\x99\x39\x14\xc4\x7f\x61\x6b\x3d\x6a\x71\x1f\xff\x42\x28\x6a\x05\xa0\xd8\xc7\xff\xda\x4d\x44\xc1\x89\xc2\x19\x98\x86\xc9\xaa\xc4\x66\x07\x20\xd5\xf4\x24\x61\x46\x33\xcc\xcb\xdc\x62\x5e\xe6\xbf\x89\xc0\x2c\xcf\xa9\x9c\x86\xd3\x5e\x4e\xe5\x43\xd0\xca\x3a\x84\x0c\xcf\xce\x38\x09\x13\x52\x76\xc6\x16\xdb\x0a\xcc\x30\x34\xc5\xe5\xda\x09\x18\x67\x72\xad\xb5\xe6\x1d\xd1\x15\x2c\x4f\x4c\xc3\x2e\x43\x83\xa2\xad\x01\xc9\x15\x2a\xfd\x12\x7f\xad\xd4\x13\x5d\x4e\x8a\x4f\x29\x5f\xaa\xb1\x58\x21\xc6\x0e\xf0\x2b\x02\xc5\x98\x7b\x63\xe7\x04\x1a\x22\x52\x44\xa4\x88\x48\x11\x91\x22\x22\x45\x44\x8a\x88\x14\x11\x29\x22\x52\x44\xa4\x88\x48\x11\x91\x22\x22\x45\x44\xda\x7b\x88\xb4\xd0\xe6\xda\x14\x61\x98\x34\xe1\xcf\x1a\xee\x25\xdb\xb9\xfc\xf5\x8e\xf6\x8d\x72\x87\x76\x20\xd5\xf6\xa7\xfc\xfe\xc1\x21\x27\x33\x93\x9d\xbb\xa6\xe5\x97\x8b\x54\x5f\xf4\x92\x32\x99\x96\x6e\x58\x7a\xf9\x56\xae\xa8\xda\x52\x72\xef\xdf\x1d\x24\xdf\xd8\x0c\xaf\xf1\x6e\xb9\xba\x92\x8a\x29\x3e\xc5\x21\xb3\xe2\xfe\x49\x7a\x7f\xe2\x21\x7a\xc5\xbc\x7b\xd3\x95\x54\xc5\xcf\x58\x16\xb2\xc7\xcb\x42\x2e\xf0\x92\x6e\xfb\x59\x49\x37\xba\x07\x8f\xc2\x61\x38\x18\x88\xf3\xa4\x05\xb5\x92\x4a\x56\x4c\x75\xe8\xf6\x6b\x2c\xd6\x50\x04\x13\x56\xb4\xec\x53\xa3\xa5\x66\x65\x43\x48\xed\xc9\xd8\xff\xb3\xa5\x7a\x71\xf7\xfb\xd7\x8b\xac\x5c\xdf\x8a\xb8\xa8\x5b\x4b\x3c\x03\x67\x61\xa6\xca\x26\xd1\xe2\x8c\xa0\x59\x02\xcd\x12\x2d\x9a\x25\x7e\x36\x12\xcc\xff\xdb\x26\x30\xe6\xb8\xe1\x83\x7e\xfd\x5d\xc3\x47\xcb\xad\x35\x58\x38\xb2\xe9\x80\xe7\x60\x81\xe3\x27\xa9\x12\xcf\x6c\xab\x96\x32\xaf\x77\x8b\x49\x56\x0a\x96\x47\xf8\xdf\xbb\x25\x57\xb0\x8c\x24\x96\x91\xc4\x32\x92\x58\x46\x12\xcb\x48\x62\x19\x49\x2c\x23\xe9\x5f\x46\xb2\x31\xe5\xa0\x29\x85\x40\xd6\x24\xd2\xff\xed\xae\x6a\xe5\x60\x28\xa4\xb4\x64\xa5\xca\xf0\x30\xab\x8a\xd6\x05\x8d\x01\x8b\x4a\x6e\x3c\x4d\x04\x8b\x4a\x62\x51\xc9\x35\x2e\x2a\xb9\x81\x60\x53\x58\xe5\xca\xcc\x18\x1c\x25\x87\xe3\x07\xdd\xe2\x17\x3b\xe4\x82\x19\x15\x4f\xac\x2d\x9c\xd1\x76\x22\xfc\x62\x14\xee\xe0\x44\x98\xfc\x52\x94\xfc\x62\x14\xfa\xe8\xff\x89\xc5\x0a\x5a\x59\xb2\xed\x4e\x64\x67\x1d\xc3\x92\x9d\x78\x6d\x41\x2b\x4f\x64\x67\x05\xbf\x6f\xe3\xb7\xa5\xa6\xa1\xb1\x9a\x86\xc6\x1a\x69\x28\xb3\xc4\xb5\x88\xfd\x4c\x8b\xa0\xab\x69\x12\x26\xe0\x54\x0b\x1f\x90\x89\xec\xec\x19\x3a\xd1\x8d\xf8\x5a\x93\x6f\x25\xe1\x9c\x28\x7b\xb0\x5c\x36\xec\x9c\x4a\x97\xc5\xc8\x4a\x2a\xa8\x82\x26\xbb\x9d\xca\xb3\xa2\x69\xe4\x9d\x5b\x34\xcb\xc5\xee\xff\x32\x49\xbe\xef\x0e\x78\xad\xd4\x18\xd5\x0b\x12\x3e\xdc\xfd\xac\xdb\x52\xd6\xc8\x4f\xb8\x2d\x25\x46\xe9\xb5\x13\xde\xfd\x72\x35\xcb\x80\x7b\x10\xcb\xf7\x38\x96\x6f\x6e\x6d\x27\xa5\xd5\x43\x17\x74\xc0\xac\x87\x0a\xcd\x85\x70\xa1\x79\x8a\x9c\x70\xea\x31\x78\xcf\x14\x9a\x6f\xd0\x63\x2b\x8a\x7d\x86\x50\xfa\x8f\x6e\xad\xd9\x0b\xc3\xfe\x98\x3e\x68\x3b\x1c\x12\x97\xaf\xe9\x8e\x78\x0c\xe6\xe1\xd1\x2a\xed\x76\xf5\x13\x88\x4a\x2e\x02\xfd\x16\x81\xfe\x17\xea\x00\xfd\x4e\x88\x9a\xc7\x39\xdb\xcf\xc2\x05\x8f\xed\xb7\xa3\xe1\x06\x31\x7f\x17\x24\x59\xe2\x73\xdb\x6a\x44\x95\xe2\xb2\xfe\x20\xe9\x74\x90\x5f\xb1\xa6\xc2\x09\x4d\x01\x68\x0a\x40\x53\x00\x9a\x02\xd0\x14\x80\xa6\x00\x34\x05\xf8\x9b\x02\xba\xa0\x40\xa4\x7f\xec\xee\x1a\x05\xe2\x70\x88\x3d\x20\x48\xad\x38\xc0\xa8\xd3\x5a\x69\x15\x68\x2e\xd8\x78\xda\x0a\x9a\x0b\xd0\x5c\xb0\xc6\xe6\x82\xb5\x81\x60\x61\x64\xbf\x1b\x9f\x86\xcc\x14\xa4\xc9\xe9\xf8\x49\xd7\x7a\xd0\x2f\x5b\x0f\x02\x5a\xd8\x08\x05\xb8\xc9\x2f\x9f\x87\x99\xf0\x8c\xa9\x41\xb0\xdd\x32\x8a\xda\x02\x95\xdb\xa5\x82\x4d\xfe\xdf\x39\xf2\xfc\x4e\xb8\xcf\x2f\xa4\x3f\x2c\x7d\x2a\x4b\xea\xc1\xdb\x49\x0c\x05\xa4\x4f\xf5\xbe\xaf\xd2\xd5\x98\x43\x15\x13\x04\x60\x82\x00\x4c\x10\x80\x09\x02\x30\x41\x00\x26\x08\xc0\x04\x01\x98\x20\x00\x13\x04\x60\x82\x00\x4c\x10\x80\x09\x02\x30\x41\x00\x26\x08\x68\x36\x41\xc0\xdb\x60\x92\x03\xa0\xe3\x30\xc6\x00\xd0\x41\x18\x85\xfd\x61\xb9\x06\x93\xd2\x79\xbc\xa1\xf4\xa9\x21\x39\x4d\xaf\xe7\xc3\x81\xcf\x04\x39\xd5\x60\x2e\x00\xa9\x73\x15\xc8\x27\xfe\x6f\xb7\x06\xb0\x0a\x2f\x69\xaa\x8c\x25\x92\x81\x49\x53\x3b\x0b\x26\x38\x47\x48\xc3\x69\x38\x59\x85\xe3\x93\x30\xd4\xcc\xd4\x20\x82\x47\x67\xa6\x16\x9d\x99\xfe\x38\x02\xa7\xb8\x60\x38\x0a\x87\x99\x60\xd8\x0f\x4d\xae\x3e\x9e\xc5\x34\xc5\x0c\x8d\xae\x83\x52\xf3\xad\x4c\x73\xe3\xe5\x49\x38\x2e\x19\x2f\x9b\x6f\xa6\x75\x09\xc5\xb3\xa4\x76\x45\x42\x25\xbe\xa3\x04\x48\x28\xff\xdc\xa8\xb2\xb4\x3a\x1a\x98\x1b\xd5\x4b\x8b\xda\x0d\xb9\x85\xfc\x13\xf9\x27\xf2\x4f\xe4\x9f\xc8\x3f\x91\x7f\x22\xff\x44\xfe\x89\xfc\x13\xf9\x27\xf2\x4f\xe4\x9f\xc8\x3f\x91\x7f\xf6\x1e\xff\xec\xe5\x04\xa9\x5d\x41\x0e\xeb\xd1\x83\xed\x57\xe2\xb0\x83\x7b\xb0\x2d\xd0\x09\x1d\x59\x49\xf1\x35\x3f\x72\xdd\x58\xb0\xc9\x47\xe2\xe4\x43\x7d\xb0\x85\xfd\x74\x75\x25\x15\x33\xc4\x97\xb9\x94\xd7\x57\xf4\xfc\xb2\x5a\x94\x57\xa2\xea\x6a\xc1\x19\x63\x21\x29\xc5\xa0\x8c\xb9\x8a\xd1\x00\xbb\x7f\xc0\x3b\xf5\x57\x1c\xe3\x0c\x53\x73\x43\x8b\xec\xb2\xa6\xe6\x93\x89\x7e\x76\x43\x9a\xfe\xcf\x95\x54\xc6\x58\x98\xd3\xed\xf2\x8c\x61\x4d\x14\x8b\x2e\x7f\x69\x5f\xb0\x7f\x67\xbc\xd8\x32\x37\x20\xcb\xf7\xc5\x2c\x9c\x61\xfb\x62\x02\x4e\xc1\x89\x16\xf6\x05\xdb\xff\xd3\x54\x51\x0d\xdd\x1b\x67\xc3\xd7\xfb\x6e\xd2\x2f\xd6\x3b\x9b\x5e\xb1\xb6\x33\xc6\x42\x65\x04\x74\xbf\xff\x2e\xbb\x9b\x00\x7b\x45\x66\x73\xc8\x20\xa8\x42\x50\x85\xa0\x0a\x41\xd5\x6d\x03\xaa\x32\x3d\x03\xaa\xda\xde\x93\x96\x41\x55\x06\x41\x15\x82\x2a\x04\x55\x08\xaa\x10\x54\x75\x1f\x54\xb5\xfd\x64\x98\x41\xf2\xb5\x01\xc9\x57\xa6\xd7\xc9\x57\x66\x1d\x92\x2f\xf2\xe5\x7e\x38\x22\xb2\xec\x99\xa6\xed\x31\x94\x80\xb8\x3f\xbb\xac\x96\xb5\xc5\xe5\xa2\xad\x95\x6d\xf2\xa3\xfd\xe4\x93\x7d\x70\x27\xbd\xf1\xea\x4a\x2a\x76\xb3\x31\xc2\x32\x2f\x9a\x98\xd7\xca\x6d\x22\x2d\xbb\xd8\x0d\x13\xa6\x69\xcb\x3e\x79\xd2\x73\xe6\x74\xbb\x8c\xa8\xa5\x16\xb5\x34\x02\x48\xae\x5f\x0c\xe7\x31\x43\x24\xe1\x44\xe1\x9a\xa6\x2d\x70\x8c\x34\xfe\x95\xa8\x11\x89\x0b\x12\x17\x24\x2e\x48\x5c\x90\xb8\x20\x71\x41\xe2\x82\xc4\x05\x89\x0b\x12\x17\x24\x2e\x5d\x25\x2e\xeb\xcf\xda\x8f\x4c\x07\x99\x0e\x32\x9d\xc6\x98\xce\x2b\xfd\x30\x5e\xc1\x74\x16\xb4\xb2\x3a\x5a\x1f\xec\x58\x1a\x83\x16\x8c\xeb\xfc\xbb\x7e\xf2\x4b\x7d\x70\xb7\xe0\x3a\xec\xe6\xd8\x4a\x63\x70\xe7\x12\x6f\xa6\x7d\x6c\x67\xaf\xc4\x76\x58\x4f\xa4\xe0\x25\xf7\x59\xc8\x77\x56\xc1\x77\xe6\xc3\xf9\xce\x7e\x92\xac\xaa\xa6\x3d\x0a\xb5\xc0\xc7\x9b\x0f\x64\x3c\xc8\x78\x90\xf1\x20\xe3\x41\xc6\x83\x8c\x07\x19\x0f\x32\x1e\x64\x3c\xc8\x78\x90\xf1\x20\xe3\x41\xc6\x83\x8c\x07\x19\x4f\x5b\x18\xcf\x2f\xc4\xe0\x2c\x67\x3c\xda\x13\x65\xad\xc4\x4a\x87\x0a\xd2\x13\x9c\xb4\xdb\x63\x3c\xa2\x28\xe6\x08\x4b\x68\x4e\xfe\x74\x07\xf9\xc0\x26\x20\x5e\x4b\x02\xfb\xa4\x62\x7b\xd8\xea\x63\x57\x39\x23\xef\xad\x77\xef\xc0\x9f\x48\xd2\xeb\xa6\xdd\xfb\x39\xab\x49\xf9\xb1\x9a\x79\xda\x56\x7b\x93\xcd\x64\xae\xf2\x24\x43\xfb\x59\xd8\x5e\xf4\xe2\x39\x72\x08\x0e\x40\x2a\x30\x31\x90\xf7\x9e\x49\xf1\x9e\x49\xd6\xab\x50\x9e\x72\x39\x1c\x95\xa4\xc8\x88\x20\x23\xde\x53\x1c\x87\x18\xf6\x8c\x2a\x90\x12\x5e\xa8\xf1\xcf\xb6\xf8\xce\xcc\x3e\xa7\x58\x63\xf8\xe4\xa4\xc4\xa5\x6b\x35\x3f\xe9\x33\x30\x0d\x93\x55\x49\xcc\x5a\x99\x20\xcc\x64\x86\x99\xcc\x5a\xcc\x64\xf6\xb1\x08\xcc\xf2\x44\x64\x69\x38\xed\x25\x22\x6b\xb3\xa0\x68\x8f\x1c\x6a\xb0\xf4\x62\x47\xa4\x51\xfa\x6f\xef\xf2\x15\x37\xa3\x35\xf5\x92\xc2\xe5\xce\x08\xab\xe3\xb1\x16\x52\x07\xeb\x24\x6d\x3c\xd1\x86\x75\x92\xb0\x4e\xd2\x1a\xd7\x49\x5a\xdf\x7a\x66\x58\xbd\xa5\xcc\x28\xec\x27\xc9\xf8\x90\x4b\x0c\xb6\xcb\xb5\x90\x58\xab\x1b\xa2\xf2\xd1\x7b\xfb\x21\xd9\x40\xe5\x23\x6e\x2e\xb7\x8c\xa2\x66\x93\xdf\x8a\x93\x2f\xf7\x05\xe4\xe4\x34\x1b\xb4\x8c\x1b\x74\x2d\xb6\xc5\x26\xbe\x9f\xdd\xe0\x93\xe2\x93\x3e\x03\xd3\x4c\x34\x66\x1b\x7f\x6b\xf8\x1e\x1b\x23\x47\xbd\xac\x29\x15\x31\x0c\xa1\xd9\x56\x30\xf7\x04\x5a\xc9\xd1\x4a\x8e\x56\x72\xb4\x92\xa3\x95\x1c\xad\xe4\x68\x25\x47\x2b\x39\x5a\xc9\xd1\x4a\xde\x83\x56\x72\xb4\x61\xa3\x0d\x1b\x6d\xd8\x6b\x63\xc3\xfe\x93\xed\xb0\x7f\x44\x35\xf5\x3a\x75\xa6\x4d\x23\xef\xda\xaa\x4d\xcb\x78\xe2\x16\xf9\xf4\x76\xf2\xaf\xa3\x70\x67\xce\xb0\xb4\xab\x2b\xa9\xd8\xae\x9c\x51\x2a\x51\x51\x71\x66\xfa\xb2\x47\x40\xcb\x86\xc2\xae\xa6\x1d\xcf\x1a\xf9\x44\x5c\x5c\x35\x69\x58\xda\x95\xd4\x19\xad\xec\xd9\x20\xb2\x46\x3e\x4b\x2f\x1d\xdd\x94\x18\x49\x70\x1c\x71\x04\x1e\xe4\x38\xe2\x75\x70\x2f\xc3\x11\xaf\x81\xbb\x3e\x15\xd9\x02\x62\x3d\x84\xa2\x85\x9d\xfe\x67\x7f\x20\x5b\x44\x37\xe0\xfa\xa3\xe1\xf4\x21\x49\x86\x38\x7d\x70\x7a\x78\x91\xb1\x00\xdb\x0f\x44\xc4\xe3\x10\xf3\x1d\x95\xec\x63\x0d\x8f\x4a\x76\x79\x9d\x8c\x8a\xf7\xce\xe1\xe3\x13\xff\x51\x69\x54\x76\xbb\xa3\x72\x71\xbe\xce\xb0\xf4\x57\x0e\x8b\x61\x87\x8d\x4b\xa0\x35\xb0\xee\x80\x39\xe3\xd2\xfe\x97\x6e\x60\xa8\x13\xff\xa7\x34\x2e\x03\xce\xb8\x4c\x4d\xcf\x4d\x5f\x9e\x0e\x1e\x99\xdd\x15\x23\x33\xc5\xb4\xa0\x8e\x8e\xcd\x9a\xec\xa4\xd1\x1f\x97\xc6\x66\xaf\x33\x36\x17\xb3\x97\x67\x2f\x5e\x98\x0f\x1e\x9c\x3d\x15\x83\x23\x1e\xb1\xf1\x76\xd4\x98\xef\x8e\x3a\x3b\x3d\x31\xd5\xe8\x8e\x3a\xab\xa9\xf9\x8e\x8e\x4b\xfb\x97\x44\x03\x43\x9d\xfe\x80\x34\x2e\x7b\x5c\x49\x33\x71\x79\xf2\x6c\xf0\xc0\xec\xaa\x14\x35\xf4\x0b\xb9\xf1\x56\x4c\xe6\x38\x8c\x91\xa3\xf1\xc3\xae\x8d\xe8\x01\xd9\xae\x54\x75\xe7\x5a\x58\x98\x54\xb8\x4a\xde\x1a\x7b\xb3\xa3\x37\x4d\x64\xd5\x32\x3f\x9d\x5e\xd3\x94\xc7\x2e\xcd\x29\xf4\xb1\x74\xea\xe8\xf1\xdf\x51\xf6\x84\x6e\x2a\xa6\xd3\x39\xf8\xd1\xf9\x35\xf2\xc9\x38\xeb\xa9\x6c\x73\x7a\x2a\x0e\x0f\xf9\x84\x64\xe6\x55\x6d\xc9\x28\xb1\xa0\xcb\xff\xba\x93\x7c\x7b\x53\x55\xd0\xe5\x00\xc7\x4e\x96\x38\x29\x38\x27\x2a\x63\x51\xa1\xa3\xae\x4c\xb1\xbb\xe7\xb5\x72\x62\x2f\xbd\x50\x0a\x92\x74\x7f\x59\x6f\x96\x20\x15\x66\xf8\x02\x3f\x05\x27\xd8\x02\x3f\x02\x87\xe0\x40\xa0\x85\x95\x8e\x96\xb0\xad\x8e\x26\xdd\x97\x6e\x4b\x2d\xd2\x4b\xe1\xfb\x60\x84\x0c\xd7\x46\x41\xba\xbd\xa8\xb6\xc0\x8e\xa2\xbd\x07\xed\x3d\x68\xef\x41\x7b\x0f\xda\x7b\xd0\xde\x83\xf6\x1e\xb4\xf7\xa0\xbd\x07\xed\x3d\x68\xef\x41\x7b\x0f\xda\x7b\xd0\xde\x73\x5b\xd8\x7b\x7e\xf1\x02\x4c\x09\x08\xb2\x5c\x36\xec\x9c\x5a\xd4\x4b\x85\x3a\xc6\x1f\x76\x62\x37\x4a\x65\xb5\x68\x1a\x79\xe7\x16\xcd\xb2\xc9\x5f\x9c\x27\x5f\xd8\x09\xaf\x95\x5a\xb9\xba\x92\x8a\x1d\xaa\x4f\x4b\xce\xba\xad\x65\x8d\xfc\x84\xdb\x5a\x62\x94\xb1\x13\xaf\x29\x39\x87\x78\xc0\x3d\x3d\x4e\x51\xb0\xf8\x3e\x72\x06\xe4\x0c\xc8\x19\x6e\x1f\xce\x80\xc5\xf7\xb1\xf8\x3e\x72\x06\xe4\x0c\xc8\x19\x90\x33\xf4\x04\x67\xc0\xe2\xfb\x1b\x11\x0b\x60\xf1\xfd\x4e\x14\xdf\x7f\x07\x5c\xe1\x36\xff\x8b\x70\x9e\xd9\xfc\x59\xba\x98\x60\x9b\xbf\x77\x54\x4f\xae\xa4\x92\x01\x47\xf4\xb6\xf8\x00\x2c\x84\xfb\x00\x9c\x22\x27\x1c\x1f\x00\xaf\x5f\xc2\x15\x20\xa0\x6b\x95\x0e\x8a\x7f\xbd\xb5\x06\x64\x88\xaf\x83\xa2\x06\x32\x8b\x83\xfc\x8a\x35\xa2\x16\x1c\x32\x3c\x06\xf3\xf0\x68\x55\x02\x8c\x09\x38\xb5\xca\x79\xc3\x3c\x18\x98\xe2\xa7\xc5\x14\x3f\xcf\x46\xe1\x0d\x54\x90\x8c\x92\x47\xe1\x22\x6c\x99\xc8\xe5\x34\xb3\xac\xe5\xc9\x24\xac\x7e\x59\x06\xfb\xb1\x5e\xe2\xb2\xeb\x1c\xcc\x32\xd9\xd5\x96\x87\x3d\xce\x33\x15\x65\xe1\x82\x97\xa9\xa8\x1d\x0d\x87\xcb\x3d\xd3\xe8\x92\xdc\x4b\xfc\xbd\x52\x23\xf7\x86\xb8\xfe\xab\xe4\x8c\x22\x3d\xcd\x8a\x4f\x64\x90\x0c\x3c\xc9\xaf\xae\x90\x81\x93\xee\x9d\xdd\x96\x86\x88\x5c\x11\xb9\x22\x72\x45\xe4\x8a\xc8\x15\x91\x2b\x22\x57\x44\xae\x88\x5c\x11\xb9\x22\x72\x45\xe4\x8a\xc8\x15\x91\x6b\xef\x21\xd7\x02\xcc\x71\x6c\x31\x0d\x93\x0c\x5b\x9c\x80\x71\x38\xd6\x42\xc2\xbd\xf9\xb2\x5a\x5e\xb6\x43\x41\x6b\xc2\x1f\x38\xdc\x4b\xb6\x73\xf9\xeb\x9d\xf8\xbb\x02\x1f\xd6\x63\xd6\xca\xa7\xfa\x61\x5f\x60\xc2\x7f\x9e\xab\x52\x8a\x26\xfc\x6a\x9c\x7c\xa5\xcf\x37\x91\xf3\x72\x63\xe9\x2a\xdd\x30\xb6\x36\xe5\xac\x3c\x70\xd3\x37\x17\x74\x45\xcc\xde\x7a\x0b\x56\xec\xd9\x92\x8e\x6f\x08\xdf\x42\x87\xc8\x81\xa0\xfc\xb1\x81\x11\x8c\x29\x8c\x60\x44\xcc\x85\x98\x0b\x31\xd7\x6d\x84\xb9\x30\x82\x11\x23\x18\x11\x73\x21\xe6\x42\xcc\x85\x98\xab\x27\x30\x17\x46\x30\x22\x37\xc3\x08\xc6\x35\x8a\x60\xfc\xbb\xa8\x93\xc6\x49\xac\x1b\xaf\x5e\x08\x07\x31\xe4\xeb\x51\xf2\xd5\x28\xdc\x23\x7e\x76\xa9\xcb\xfd\x05\xad\x5c\xf9\x91\xe3\xef\x90\x78\xa8\xa0\x95\xe7\xf9\xc5\x02\x89\x4c\x64\x67\x9d\x53\x55\xfb\x08\xc8\x58\x4d\x43\x63\x35\x0d\x8d\x35\xd2\x50\xc6\x84\xc7\x38\xf4\xb8\x00\x73\x0c\x7a\xcc\xc0\x14\xa4\x5b\x80\x1e\xd2\x7b\x36\xe2\xac\x49\x3e\x36\x08\x8a\x93\x2d\xd4\x71\xeb\x2b\x95\x57\x8c\xe2\xf2\x92\x13\x37\xfa\x4e\xf2\xf4\x20\xf9\xfc\x66\x2f\x0f\x5b\x3f\xdb\xc6\x95\xc7\xeb\xac\x7b\xef\x15\x76\x6f\x22\x46\x2f\x12\x19\xd8\xaa\x7e\x6b\xb3\x93\xd0\x0b\x11\x78\x3e\x42\x9e\x8b\xc4\x3e\xec\x2e\xf9\xf7\x46\xe6\xb9\xba\xc6\x54\xbe\x27\x98\xea\xb4\x40\xff\xa5\xe6\xca\x49\x45\x99\xa6\xff\x75\xfe\xbe\xa4\xea\xcc\x9f\xce\x56\x72\xc5\x65\xbb\xac\x59\xc3\xe2\xad\x72\x4e\x05\xa4\xa2\x7e\x43\x53\x06\x5c\x82\x36\x40\xe5\xab\x03\xef\x92\x4a\xb6\xa8\x96\x4a\x42\x62\xb2\xbd\xa0\x16\xa9\x88\x4a\x25\x53\x47\x93\xf1\xcd\xec\x91\xf2\x6a\x4f\x3f\x1b\x81\x0f\x46\xc8\x33\x91\xd8\x07\xdc\xee\x3e\xe9\xf6\xd6\x85\x33\x0b\x4e\xbf\xe9\x23\x94\x69\xde\x55\x2a\x87\x4c\xdb\xe9\x96\xf8\xb0\xb3\x3a\x4e\xf4\x8b\xcc\xd4\x2b\xbe\xed\x9a\xe8\xe1\x1d\xfc\x31\xab\xa9\xc8\x44\xd7\x05\x2b\xb9\x56\x35\xcf\xa1\xd8\xad\xa9\x6c\x60\x5e\x56\xbc\xea\xc7\x54\x64\xe9\x0c\xa9\xfb\xf9\xe2\x16\x29\x9f\xa0\x53\xec\x33\x64\x29\x3f\x24\xae\xeb\xca\x6a\x6e\xb6\xaa\x67\xd0\xe0\xa3\xcb\x2f\xba\xfc\xb6\x5e\xd5\xb3\x3d\xfb\xbf\xf9\xda\xa0\x2d\x8b\x92\x90\xaa\x9e\x1d\x90\x34\x89\xf7\x6d\xf3\x44\xc9\x0e\xe1\x64\xab\xd6\x4a\x8f\x07\xf9\x4f\x5d\x11\x1e\x97\xe1\x12\x64\x65\xe1\x91\x48\xc3\xe9\x16\xb4\x08\x9e\x84\x58\x24\x0f\x45\x49\x12\x26\x49\x5e\x8d\xc2\x2b\x51\xf2\xed\x68\xec\x9b\xee\x00\x7d\x32\x7a\x59\xd6\xf4\xf5\x92\x62\x73\x6d\x5d\x59\xd0\x16\x0d\x7e\x70\x76\x4e\xb7\x9e\x55\x47\x00\x05\xd6\x45\x49\x52\x94\x8c\xd2\x70\x49\x2b\xa8\x6c\x20\x84\xb2\x2f\x4b\x14\xce\xb9\xdc\x29\x10\x6b\x51\x5f\x5a\xd2\xf2\x54\x66\x15\x6f\x09\xe3\x80\x6c\xfa\x29\xe9\xc5\x21\x71\x06\x60\x67\x45\xa5\x60\xd1\x4f\xa1\xa9\x59\xba\x91\x77\xcf\x32\xde\x57\xb1\x7c\xcb\xf4\xe0\xca\xb2\x4d\x3b\x29\x9f\x32\x55\x7a\xa7\xf3\x42\xe2\x21\x8b\x92\x4a\xa2\xd3\x1b\x58\x3f\x79\xf5\x49\x9f\x3e\xc6\x09\xeb\x42\x96\xf5\xc0\xcf\x27\xe0\xcb\x51\x78\x39\x4a\x5e\x8a\xc6\x5e\x74\x87\xf9\xd9\xe8\x94\x64\x47\x35\xe9\xb1\x4e\x73\xf1\x5c\xd6\x32\x4c\xb5\xc0\x26\x20\x6b\x14\xf5\xdc\xad\x21\x3e\x06\x1c\x48\x39\xef\xe2\x19\x62\xb9\x52\x74\x24\xa9\x48\xca\x63\x5e\x33\xb5\x52\x5e\x2b\x95\x3d\xd2\xab\x29\x86\x65\x5e\x53\x4b\xf4\x8d\xe8\xb0\x5a\xcb\xda\xc8\xa2\x5a\x74\x2c\x23\x71\xfe\x6b\x5c\x59\xd4\x4b\x6a\x51\x7f\xd2\x41\xac\x0b\x1a\x3d\x3b\x31\x72\x33\xc2\xcf\x4c\x79\xef\x4c\xce\x1b\x1f\xb0\xbd\x9b\xb8\x2d\x22\xa9\x4c\xeb\x6c\x39\x4b\x1d\x37\xac\xda\x37\x63\x60\x8e\x9b\x05\xb9\x29\x84\x6d\x36\xa3\x7c\x2d\x19\xdf\xc6\xfb\x33\xe5\xbc\x88\x5d\xa1\x8d\xbe\xaf\x0f\x9e\xee\x23\x4f\xf5\xc5\xbe\xeb\x62\x8a\xaf\x6f\x7a\x5c\xb0\x4a\xba\xa5\xae\x19\x37\x95\x82\x6a\x2d\xd0\xe3\xbc\x14\x42\xe0\xee\x0b\xcd\x5a\x34\xac\x25\x3a\x16\xbe\x3d\xbd\x58\xf5\xf0\xe0\x8e\xb2\xf5\xec\x2c\x46\x93\xbf\x95\x4e\x17\x4a\x4e\xcf\x7b\x46\x07\xc6\xaf\x79\x75\x52\x67\x74\xe9\x91\x5f\xd0\x5d\x87\x50\x27\xa5\x61\x74\xd8\xa6\x73\x3a\xf4\xd4\xfb\xca\x87\x25\x15\x1e\xdb\xc2\x3e\xaf\xb2\x70\x18\xe0\xef\x30\xa0\x0c\x8b\x89\xaf\x5c\x18\xf6\xb8\x32\x90\x56\x73\x37\xe8\xc7\xa3\x94\xa7\x57\xa9\xc5\xa2\x71\x93\x5d\x54\x35\x70\xdc\xa0\x20\x96\x7e\x65\x23\xce\x1b\x2c\xb8\x2d\x8d\x2b\x03\x33\x86\xa5\x49\xcd\x2a\x39\xd5\xce\xa9\x79\xfa\xf6\x62\x7c\x98\xb0\xe5\xed\xd9\x5c\x7a\xd5\x34\xb8\xe8\xb6\x91\x8c\x6f\x37\xab\xd7\x8d\xfc\xd9\xff\x6c\x24\x38\x1e\xa7\xbd\x8e\x2d\x97\x78\x40\xd1\x39\x98\x95\x02\x8a\x56\xd7\x66\x73\x47\x0a\xff\x7c\xe4\x01\x1f\xfd\xeb\x8a\xbf\x6e\xb1\x95\xdc\xc9\x87\x1e\xd2\x5f\xbd\xcb\x53\x05\x46\x6a\x6a\x7a\x87\x1c\x2f\x1e\x60\x85\x62\x3b\xad\x1f\x60\xf1\xee\x8d\xa7\x77\x60\xf1\x6e\x2c\xde\xbd\xbe\x8a\x77\xf7\x14\x2a\x0a\x2d\xdd\x7d\x02\xc6\xc9\xb1\xf8\x11\xd7\xa1\xf1\xc1\x8a\x12\x0b\x55\x6d\xd7\xd6\x58\x68\xbb\xb7\xe2\x5f\xef\x84\xd7\x3b\xb0\xd6\x51\x67\xde\xb1\x6c\x94\x55\x9b\x7c\x63\x27\xf9\x9d\x4d\xde\x47\x68\xb0\x7e\xd6\x3e\x07\x11\x3f\x4a\x6f\x4e\xb0\x82\x08\xfc\xfb\x53\xf1\xc3\x7a\xf3\x1c\x7c\x3b\x4c\xf3\xb5\x78\x12\x8e\xb3\xb5\x78\x18\x0e\xc2\x68\xe8\x5a\xac\x78\xe7\xb6\x64\x38\xb8\x18\xbe\x58\x87\x48\xa2\x9e\x12\x52\xd1\x27\x74\x10\x44\x07\x41\x74\x10\x44\x07\x41\x74\x10\x44\x07\x41\x74\x10\x44\x07\x41\x74\x10\x44\x07\x41\x74\x10\x44\x07\x41\x74\x10\x44\x07\xc1\xdb\xc2\x41\xf0\xaf\xf6\xc3\xa3\xa2\xc4\x41\x9e\x6a\x91\xba\x51\xb2\xb4\x82\xce\x50\x34\xbd\xa7\xca\x5d\x90\x9d\xd6\x54\xaa\x23\xdc\xd4\x16\xae\x19\xc6\x8d\x8a\x53\x97\xeb\xd5\xf6\xc1\xfd\xe4\xf7\xef\x80\x87\x7c\x9b\x74\x5d\x0c\x53\x3e\xbe\x6e\x57\xdc\xf6\x1f\xe7\xed\x4f\xca\xed\x27\x4e\xd2\x5b\x26\xfc\x5a\x15\xbe\x88\xf5\xef\x47\xef\xb8\x1e\xf7\x8e\x7b\x77\x04\xae\x71\xce\xa4\xc2\x55\xc6\x99\xde\x08\x8f\xc3\x63\xc1\x59\xe4\x7c\xd7\xac\x58\x60\xc9\xfa\x8b\x61\x15\x7e\x2f\x05\xad\x0c\xd7\xff\x59\x38\x89\x7a\x0b\x79\x93\x13\xf6\x5d\x67\x73\x09\x2e\x15\xd2\xdb\x9a\xd0\xd6\xd8\xf3\x10\xb6\xc3\x0e\xfa\x7b\xe1\x85\x6c\xb2\x09\x71\x57\xcf\xec\xb3\x1b\xa0\x43\xa1\xca\xf8\xd5\xa9\x55\x81\x96\x31\xf4\xed\x6b\xd1\xb7\xef\x2f\xbb\x29\xbc\x96\xb8\xff\xdf\x22\xe4\x3d\xff\xbf\x9e\x94\x95\xcc\x47\x70\xad\x65\x65\xe2\x9f\xb6\x85\xc9\xca\x01\xd7\xcd\x30\x44\x3c\x9e\x16\x69\x3c\x7b\x45\x3a\xa2\x63\x22\x3a\x26\xa2\x63\x22\x3a\x26\xa2\x63\x22\x3a\x26\xb6\xe2\x98\xd8\x01\x8f\xc1\x2e\x39\x3b\x3a\xca\x47\xa8\x13\xe1\x9a\xeb\x1f\xe9\xff\x71\x77\x98\xfe\x71\x22\xc4\xb7\x31\x44\x2b\x39\xc5\xfc\x6a\x7a\x41\x29\x41\x6f\xc8\x8d\xa7\xec\xa0\x37\x24\x7a\x43\xae\xb1\x37\x64\x4f\xa1\xc1\x30\xf7\xc6\x35\xff\xe0\x64\xce\xc1\x2c\x39\x13\x9f\x76\xfd\x2b\x13\xb2\x7f\x65\xfd\xd6\xba\xe0\x6d\xf9\xc3\x9b\x60\xb7\xb0\x3a\x98\x7a\x3d\x7b\x03\xf9\xe3\x28\x79\x35\x0a\xf7\x57\x5d\x16\x9e\xa6\x60\x77\x41\x2b\x4f\x54\xde\x84\xe9\x0a\xea\xa6\x2b\xf8\x46\x1c\x1e\x71\xe6\xc4\xb4\x47\x56\x9c\x24\x9d\x96\xc6\x3a\xcd\xb2\x74\xfe\x7c\x9c\x7c\xa6\x0f\xee\xa4\x17\x5c\x5d\x49\xc5\x56\x1a\x4b\xcd\x79\x89\xb7\xd0\xbe\xdc\x9c\xfb\xd8\x0d\x13\xa6\x69\x5f\x49\x79\x8d\xaf\xcf\x8c\x9c\x81\xaa\x72\xdb\x53\x75\x36\x95\x91\xf3\x42\xb8\x00\x1b\x24\xfb\x1c\x01\x66\x9a\xb6\xeb\x5d\xeb\x4c\x47\x65\x02\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\x5b\x74\xb3\x45\x37\xdb\xdb\xc0\xcd\xf6\x63\x71\x48\x70\xb8\x52\xd2\xca\x37\x0d\xeb\x06\x55\x94\x5c\xd6\xe5\xfc\x91\x59\xf8\x74\xcd\x26\xff\xb0\x93\xfc\xdd\x26\x78\x8d\x77\x6d\x03\x81\xc7\x17\xf8\xc5\xdc\xc6\x97\x18\xa6\x17\x5f\x70\xef\xbf\x92\xaa\xf8\x79\xbd\x61\x92\x45\x38\xc7\x69\xc8\x14\xa4\x19\x0d\x39\x0e\x75\xec\x3d\x49\x69\x8c\x57\x52\xc9\x8a\x37\x6f\x28\x08\xf9\x6d\xe1\xf0\x63\x9c\x1c\x13\xf0\xa3\x66\x42\x05\x09\xa9\x78\x6c\x65\x74\x7c\x48\x90\x33\xc2\x12\x84\x25\x08\x4b\x10\x96\x20\x2c\x41\x58\x82\xb0\x04\x61\x09\xc2\x12\x84\x25\x08\x4b\x10\x96\x20\x2c\x41\x58\x72\x3b\xc0\x92\x1f\xdb\x04\x7b\x39\x2c\xb1\x16\xd4\x5c\xd2\x39\x9f\xfb\x3b\x08\xfd\x69\x94\xfc\x49\x14\x76\xd0\x2b\x27\xe4\x0b\xc3\x5d\x84\x06\x0a\x5a\xf9\x52\xf5\x6d\xe8\x24\x54\xd7\x49\xe8\x0b\x83\xb0\xdf\x49\x93\xe7\x96\x11\x16\x61\xdf\xec\xdf\xef\x1c\xe1\x67\xde\x25\xd5\x74\xa3\xc1\x7f\x78\x90\x7c\x5a\xaa\x71\xf2\xa0\x4f\xdc\x37\x77\x40\x3b\xaf\x9a\x89\x87\xbc\xe2\x26\x2e\x9f\xca\xbb\x3f\x63\x04\x77\x8f\x47\x70\xbf\x01\x4e\xf0\x95\x79\x18\x0e\xb2\x95\x99\x84\x21\x48\x84\x26\x0a\x74\x27\x78\xb5\x51\xd9\xe7\xc2\xd1\xdd\x5e\xb2\xa7\x5e\x7e\x40\xaf\x2b\xb1\x8f\x4a\x15\x4d\x1e\xf1\x8f\xa5\xf6\x16\xae\x52\x51\xca\xa4\xf3\x6b\xf7\x34\x9c\x84\xe3\x55\x4e\xf0\x4d\x0d\x35\xba\xbd\x63\xa8\x73\x8b\xa1\xce\x3f\x51\x27\x9f\xf9\x2a\xf7\x7f\x9a\x07\x36\x8f\xc3\x31\x2f\xb0\xb9\xc9\x36\x1a\x0c\x4a\x6e\x4c\x54\x04\x8b\x87\x8a\x8a\x25\xff\x74\x8f\x27\x2a\x88\x1b\x4a\xec\x49\x87\x47\xe4\x52\x25\x9d\x17\x0e\x18\x14\x8c\x41\xc1\x18\x14\x8c\x41\xc1\x18\x14\x8c\x41\xc1\xad\x04\x05\xf7\x7c\x51\x92\xd0\x73\x42\x3b\xbf\xee\x0d\x94\x29\xf9\x15\xa9\x4c\xc9\xde\x90\x50\x5e\x4f\x2b\x78\x58\xaa\x4f\xd2\x51\xa5\x00\x83\x72\x37\x9e\xb2\x81\x41\xb9\x18\x94\xbb\xc6\x41\xb9\x1d\xa7\x3d\x6d\x95\xe2\xa1\x45\x49\x0e\xc3\x41\x32\x1a\xdf\xef\x06\xcd\xbe\x4e\x0e\x9a\x75\x1b\xad\x8d\x8f\x7d\x3b\xbc\x8d\xbc\x25\xfe\x26\xf7\xbe\x31\xa1\xfe\xf2\xad\x57\xca\x2b\xf4\xc5\x14\x3b\x67\x98\xda\x90\x62\x2f\xe7\x98\x81\x81\x69\xd6\x9a\xba\xc4\x15\x13\xd3\x32\x98\x56\x19\xdf\xea\xa2\xd4\x8e\x46\xe0\xbe\x7f\x08\x0e\x86\x80\xdc\xca\x32\x28\x0e\xcc\xfd\xdd\x41\xf2\xab\x12\xcc\x55\x7c\x60\x6e\x65\x09\x94\x9d\x7e\x40\xb7\xe2\x12\x84\xba\x3d\x0e\x75\xdf\x02\x13\x7c\x9b\x8f\xc1\x51\xb6\xcd\x47\x61\x3f\x24\x9b\xab\xfe\xb2\x5a\xb0\xdb\x58\xe1\x97\xfa\xc5\x5e\x64\x69\x10\xfb\x4f\x5b\x2a\xca\xae\xfb\xc1\xdd\xca\x85\xbc\x2b\x00\xf0\x76\x72\x2d\x4f\x41\x1a\x4e\x57\x29\x55\x4d\x0f\x3d\xaa\x52\x08\x7a\x5b\x04\xbd\x1f\x89\xb4\x63\xeb\xcf\x70\xa6\x7b\x0a\x4e\x78\x4c\xb7\x13\x22\xa4\xdd\x32\x22\x84\x20\x27\xbe\x4f\x2a\x53\xfd\x7a\x17\xfa\x56\x4a\x8d\x7e\x7f\xf0\xdb\x49\xa1\x81\xf0\x17\xe1\x2f\xc2\x5f\x84\xbf\x08\x7f\x11\xfe\xde\x9e\xf0\x37\x3c\x23\x64\xbb\x55\x85\xf4\x57\x24\x00\x3c\x14\x02\x80\x2b\x35\x84\xb8\x2f\x04\xee\x90\x82\x80\x20\x78\xe3\x29\x1e\x08\x82\x11\x04\xaf\x31\x08\xee\x0a\x21\x0a\xcd\xba\xd8\x6e\xa1\x9e\x19\x83\xa3\xe4\x70\xfc\xa0\x0b\x76\x77\xc8\x40\xb8\xe2\xbe\x0d\x01\x85\xff\x74\x27\xdc\xe7\x40\x61\xd3\xc8\x97\xb5\x25\x93\x45\x4e\x92\xaf\xec\x24\xbf\x29\x95\xc0\xde\x57\x3f\x12\x3d\x6b\xe4\x2f\x8b\x5b\x13\xbb\xbd\x02\xd8\xd2\x9f\xd7\x5b\xfc\xf9\xdb\x60\x92\x2f\xef\xe3\x30\xc6\x96\xf7\x41\x18\x85\xfd\xe1\xa5\xd8\xbd\x37\x6e\x4b\xf1\xeb\xf3\xe1\xeb\x3b\x41\xf6\xd6\x73\x6e\x95\x7a\x84\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x8e\x61\xe6\x18\x66\x7e\x5b\x84\x99\xff\x5c\x3f\x8f\x65\xb6\x47\x16\x58\xa1\x03\xb7\xe2\x41\x80\x3f\xdc\x75\x63\xc1\x26\xef\xea\x27\x3f\xd1\x07\x5b\xd8\x1d\x57\x57\x52\x31\xa3\xb1\x12\x08\x19\x63\xa1\x4d\xb5\x0f\x1e\x62\x37\xa4\xe9\xff\xc8\xe6\x82\x8c\xb1\x30\xa7\xdb\xe5\x5e\x07\x29\x37\xda\x5f\xd6\x20\x94\xaa\x34\x54\xef\xe0\x6c\x38\x5a\xd9\x4d\xfa\x05\x4e\x61\xb3\x2f\x88\x4a\xc6\x58\xc0\x4a\x07\x48\x55\x90\xaa\x20\x55\x41\xaa\x82\x54\x05\xa9\x0a\x52\x15\xa4\x2a\x48\x55\x90\xaa\xac\x21\x55\x59\x7f\xa6\x77\xe4\x36\xc8\x6d\x90\xdb\x34\xc6\x6d\xfe\x31\x0e\x23\x9c\xdb\x88\x75\x23\x15\x52\xe0\x00\x67\xc5\x28\x2e\x2f\x69\x6a\xb9\xac\xe6\xae\xd1\xcf\xaa\x4d\x5e\x8c\x93\x2f\xf4\x01\x88\x1b\xae\xae\xa4\x62\xff\xff\xc6\xc0\xcd\x15\xd6\xd4\x84\xdb\x54\x9b\x28\x4e\x9c\xdd\x30\xcf\xbb\x73\x25\x55\xfd\x14\x44\x39\xab\x40\x39\x4d\x55\x6f\xa8\x5c\x42\x4e\xb5\xdd\xaa\xe9\x40\xc0\x83\x80\x07\x01\x0f\x02\x1e\x04\x3c\x08\x78\x10\xf0\x20\xe0\x41\xc0\x83\x80\x07\x01\x0f\xba\xcd\x20\x7e\x41\xfc\x72\xdb\xe1\x97\x9f\x8b\x3b\xd5\x19\xb4\x27\xca\x5a\xc9\x66\x07\x7d\xa7\x1c\x43\x75\x21\xcb\xf7\xc5\xc9\x7b\xfb\x80\x78\x57\xba\x65\x19\x9a\xaa\x66\x39\x4a\x2f\x9e\x76\x1b\x11\x45\x1a\xd6\x75\x49\xcb\xe6\xf0\x49\xd2\x1b\xc1\xa4\x18\xc1\x16\xea\x5a\xbe\x25\x9c\x8c\x1c\x23\x47\x04\x19\xf1\x9e\x18\x56\xd0\x92\x75\x07\xab\x5a\x22\x37\x41\x6e\x82\xdc\x04\xb9\x09\x72\x13\xe4\x26\xc8\x4d\x90\x9b\x20\x37\x41\x6e\x82\xdc\x04\xb9\x09\x72\x13\xe4\x26\x91\x08\xf9\xd8\x2e\x98\x0c\xaf\x6a\x29\x3c\x58\x44\xea\x69\xcb\x28\x6a\x0b\x7a\x29\xaf\x97\x0a\x6e\x02\xee\x3f\xe8\x27\xff\x76\x33\xdc\xe7\x57\xf0\x32\xf6\x1f\x22\x62\x46\x24\x57\x96\x92\x23\x5e\x1c\xb4\x32\xc9\xdb\xbe\x64\x14\xb5\x34\x6f\xbb\x2d\x4e\x2d\x43\x9e\x56\xc1\x34\x27\xf1\x0d\xa2\x8a\x89\xa7\x2e\x0d\x54\x68\xa8\x52\xdb\xc9\x44\x82\x3d\xce\xa7\x20\x67\x6d\x7f\x7b\x9f\xed\x04\x56\x47\x6b\xbb\xcf\x4c\x78\x72\xa4\x9b\x3c\x39\xd2\x8d\x70\xf8\x73\x96\xcc\x08\xf8\x13\xb8\x44\x9d\x0c\xfb\x35\x73\x82\x3e\x32\xc8\x7a\x90\xf5\x20\xeb\x41\xd6\x83\xac\x07\x59\x0f\xb2\x1e\x64\x3d\xc8\x7a\x90\xf5\xac\x21\xeb\x39\x05\x27\xc8\x78\xfc\x98\x1b\x04\xf5\x70\x45\x31\xab\x1a\xfd\xbd\x36\x81\x29\xc2\x22\x84\x45\x08\x8b\xd6\x08\x16\x25\x80\xd4\x96\x67\x23\xff\x3a\x41\xfe\x48\xf1\xf2\xf0\x0e\x84\xf8\xd0\xb8\x91\x8b\xf7\x7a\x59\x78\xdd\x3f\xf6\x38\x44\x49\x23\x42\x40\x84\x80\x08\x01\x11\xc2\x6d\x83\x10\xd2\x3d\x83\x10\xda\xde\x93\x96\x11\x42\x1a\x11\x02\x22\x04\x44\x08\x88\x10\x10\x21\x74\x1f\x21\xa4\xf1\xc0\xbe\x01\x0f\xec\xe9\x5e\x3f\xb0\xa7\xd7\xe1\x81\xbd\xd5\x02\x48\xee\x69\xbc\xa1\xf8\x8d\xd6\xaa\xe1\xbb\xcf\xa8\xac\x6d\x1b\x12\xae\x11\xff\x6d\xa9\x3e\x36\xe1\xa2\x5e\x51\x25\xa6\xf0\x3a\xfe\xb7\x4e\x51\x05\x0e\x01\x4e\xc3\x49\x38\x5e\x55\x4b\x6e\x08\x12\x8d\x8f\x2b\x56\x8f\xc3\xda\xd7\x2d\xd6\xbe\x7e\x25\x02\x27\xf8\x9e\x3e\x0c\x07\xd9\x9e\x4e\x42\x53\x6b\x0f\xd2\xbc\xee\xf5\x38\x1c\xf3\xea\x5e\x37\xdb\xc6\x24\x2f\x9f\x79\x1c\xc6\xa4\xf2\x99\xcd\x36\xd2\x7a\xe1\x29\xd3\xb0\xcb\xd0\x56\xc1\xd3\xfe\xb2\x65\xff\x90\x80\xa1\x5a\x58\x5a\x91\xbb\x9b\x9d\x70\x5c\x17\xba\x2f\x26\xc8\x87\x37\x7b\xd2\xed\x7b\xd8\x27\xbd\x92\x8c\x31\xdf\xaa\xc4\x0e\xfa\x4b\x75\x65\x4e\xf6\x53\x9b\xe5\xdc\x0b\x11\x78\x3e\x42\x9e\x8b\xc4\x3e\xec\x7e\xf2\xde\x1b\x91\x0a\x10\x6b\x4f\xb0\x93\xce\x02\xfd\x97\x9a\x2b\x27\x15\x65\x9a\xfe\xd7\xf9\xfb\x92\xaa\xb3\x9d\x61\x2b\xc2\x71\xd0\x2b\x6f\x2b\x2a\x00\x16\xf5\x1b\x9a\x32\xe0\xbe\xc4\x00\xd5\xaf\x1c\x97\xbf\xa4\x92\x2d\xaa\xa5\x92\xd0\x98\xd8\xb7\x50\x2d\xf2\x32\xc8\xa9\xa3\xc9\xf8\x66\xf6\xc8\x8a\x7a\xc1\xcf\x46\xe0\x83\x11\xf2\x4c\x24\xf6\x01\xb7\xbb\x4f\xba\xbd\x75\x59\xea\x82\xd3\x6f\xfa\x08\x65\x9a\x77\x95\x4e\x9b\x69\x3b\xdd\x12\x7a\x38\xab\x63\x48\x15\x68\xaf\x54\xf4\xad\x26\x7a\x78\x07\x7f\x4c\xc5\x07\xf9\x32\x1c\xe3\x9b\x97\x7e\x88\xe9\xe6\x4d\xc0\x5e\xd8\x13\xba\x67\x1a\xcb\x43\x75\x26\x7c\x3f\xec\x22\xf1\xea\xfd\xc0\xdb\x6e\xb0\xc0\x7c\x41\x2b\x43\xec\x87\xa4\x6f\xf0\x03\x96\x66\x16\xd5\x5c\x75\x2d\x59\xbe\x50\x1f\x14\x3f\x76\x63\xad\x52\x51\x74\xb4\xea\x9b\xdc\xf0\xd0\xe2\xf7\x18\xbf\xc7\x2d\x7e\x8f\x7f\x24\xb2\x9a\x2d\x7d\x92\x7f\x8b\x8f\xc0\x21\xef\x5b\xdc\x4e\x91\x10\xbc\x93\xcd\xe5\x32\xb4\x4d\x62\x24\xfe\xf2\x1e\x4f\x24\xdc\x23\x8a\x88\xab\x25\x21\x06\x1e\xe0\x7f\xe8\x86\x14\xb8\x0c\x97\x20\x2b\x4b\x81\x44\x1a\x4e\xb7\xe0\xc9\x3c\xc5\x7a\x7c\x91\x99\xf2\x6c\x94\x0e\x61\xd2\xe1\xd5\x28\xbc\x12\x25\xdf\x8e\xc6\xbe\xe9\x0e\xd0\x27\xa3\x97\xe5\x03\xb9\x5e\x52\x6c\x7e\xa8\x56\x16\xb4\x45\x83\xe3\x28\x87\x19\x79\xb6\x52\x81\xe9\x58\x17\xa5\xdd\x5f\x32\x4a\xc3\x25\xad\xa0\xb2\x81\x10\x67\x72\x59\x4a\x70\x7a\xec\x4e\x81\x58\x80\xfa\xd2\x92\x96\xa7\x72\xa8\x78\x4b\x98\xdc\x64\x83\x6a\x49\x2f\x0e\x89\xa3\x3a\x2f\xb5\x5f\xb0\xe8\x77\xcc\xd4\x2c\xdd\xc8\xbb\xc8\xc1\xfb\xa4\x95\x6f\x99\x1e\xb2\x5c\xb6\x69\x27\x65\x18\xa4\xd2\x3b\x9d\x17\x12\x0f\x59\x94\x34\x07\x9d\xde\xc0\xfa\xc9\x8b\x24\xfb\xf4\x31\x4e\x58\x17\xb2\xac\x07\x7e\x08\xe2\xcb\x51\x78\x39\x4a\x5e\x8a\xc6\x5e\x74\x87\xf9\xd9\xe8\x94\x14\x24\x61\x16\x35\xd5\xd6\x5c\xe8\x9d\xad\x2e\xa9\x3f\xc4\xc7\x80\x63\x5e\xe7\x5d\xbc\x28\x0b\xae\xbb\x1c\x49\x2a\x92\x8e\xe7\x56\xed\xf7\xec\x27\x9a\x62\x58\xe6\x35\xb5\x44\xdf\x88\x0e\xab\xb5\xac\x8d\x2c\xaa\x45\xc7\xde\x18\xe7\xbf\xc6\x95\x45\xbd\xa4\x16\xf5\x27\x1d\xc3\xc5\x82\xa6\xa8\xf9\x3c\xe3\xa1\x23\x1c\x6d\xe4\x3d\x74\xc6\x1b\x1f\xb0\xbd\x9b\xb8\x85\x2f\xa9\x4c\xeb\x6c\x39\x4b\x1d\x37\xac\xda\x37\x63\xb8\x9b\x1b\xdb\xb9\x81\x91\x6d\x36\xa3\x7c\x2d\x19\xdf\xc6\xfb\x33\xe5\xbc\x88\x5d\xa1\x34\xbe\xaf\x0f\x9e\xee\x23\x4f\xf5\xc5\xbe\xeb\xd2\xc4\xaf\x6f\x7a\x5c\x58\x00\xe8\x96\xba\x66\xdc\x54\x0a\xaa\xb5\xa0\x16\x34\x25\x67\x14\x8b\x1a\x13\xa1\xde\xbe\xd0\xac\x45\xc3\x5a\xa2\x63\xe1\xdb\xd3\x8b\x55\x0f\x0f\xee\x28\x5b\xcf\xce\x62\x34\xf9\x5b\xe9\x74\xa1\xe4\xf4\xbc\x67\xca\x63\x56\x21\x5e\x44\xdb\x19\x5d\x5b\x2b\x3b\x36\x13\xc7\xee\x93\x94\x86\xd1\xb1\x18\x38\xc0\xc8\xd3\xc2\x2b\x1f\x96\x54\xf8\x49\x8e\x7d\x32\x65\xe1\x30\xc0\xdf\x61\x40\x19\x16\x13\x5f\xb9\x30\xec\x71\x65\x20\xad\xe6\x6e\xd0\xcf\x44\x29\x4f\xaf\x52\x8b\x45\xe3\x26\xbb\xa8\x6a\xe0\xb8\x99\x4e\x2c\xfd\xca\x46\x9c\x37\x58\x70\x5b\x1a\x57\x06\x66\x0c\x4b\x93\x9a\x55\x72\xaa\x9d\x53\xf3\xf4\xed\xc5\xf8\x30\x61\xcb\xdb\xb3\xb9\xf4\xaa\x69\x70\xd1\x6d\x23\x19\xdf\x6e\x56\xaf\x1b\xf9\x53\xfe\xd9\x08\x5c\xe2\xe7\xda\x73\x30\x2b\x9d\x6b\x4f\xc0\x38\x1c\x6b\xe1\x23\x32\x5f\x56\xcb\xcb\x76\x70\xd4\xcd\x1c\xd7\x1b\xa6\x61\x92\xe9\x0d\xab\x7b\x8c\xf3\xc5\x57\xfc\xbf\xf8\x5b\xc9\x9d\x7c\x98\xda\xf7\xd1\x4f\x7f\xea\x2e\xef\xa3\xbf\x8b\xa1\x73\xe6\x77\xc1\x11\xa6\xef\x81\x20\xc6\x4a\xa2\x77\x58\x11\x78\xa0\xba\x21\x5e\x4d\x7f\x90\xfe\x73\xec\x41\xf9\xc7\x25\xcd\x2a\x68\xf2\xaf\x7b\xe4\x5f\x6d\xa7\x7a\xfe\x70\xf5\x75\xe9\x0b\x30\x07\x99\xaa\xc3\xc6\x18\x1c\x6d\x61\xf2\x58\x51\x7e\x54\x30\xc2\x14\x8c\x4f\x6c\x82\x17\x36\x91\xe7\x37\xc5\x9e\x73\xa5\xf4\xbb\x37\xdd\x3e\xc7\x8f\x2a\xeb\x2c\x1d\x67\xe6\x6d\xc4\x3c\x08\x4c\x6e\xd8\xe1\x86\x48\x65\xaf\xbc\x84\xd9\x6f\x7c\xe1\xee\x63\x1f\x1b\xee\x9c\xa6\x16\xd9\x9d\x54\xab\xe2\x77\xb3\x2b\x98\x86\x63\x2b\x7b\x33\xb6\x51\x62\xcb\x72\x48\x39\x4f\x17\xbe\xf8\xf7\xbc\xb3\x1d\xbc\x3f\xee\x0b\x3e\x17\xa5\x5f\x8e\xc0\x4b\x11\xf2\x62\x24\xf6\x79\x17\xc6\x7c\x34\x32\x63\x58\x39\xa6\x7c\x15\x0c\x36\xec\x86\x12\x5f\xa4\x7f\x8a\x2b\x13\x15\x6f\x91\x54\x66\xcb\x42\x4f\x62\x10\x46\x2c\xcd\x61\x35\xc7\x5e\x9c\x39\x6f\x15\xf5\x9c\xf8\x0e\x32\x66\x63\xdc\x14\x63\xca\x9d\x9b\x4c\xcd\x30\x8b\x5a\x52\xe1\x4f\x5c\x2c\xaa\x05\x77\x2e\x99\xc5\xcd\x77\x00\xdc\xc7\xc7\x37\xb3\x6e\x75\x0f\xdd\x04\xc7\x49\x9a\x3c\x4e\xb2\x5d\x42\x3b\x33\x0a\xfb\x49\x32\x3e\xe4\x3a\x60\x6f\x97\x1d\xb0\xd9\xf5\xb5\x3e\xd7\xeb\xaf\x72\x05\x79\xa5\x1f\xc6\x79\x5c\xb3\x6a\x9a\x5e\x26\xb8\xba\xa5\x14\xf3\x9a\x59\x34\x6e\xf1\xd4\xfc\xff\xae\x9f\xfc\x52\x1f\xdc\x4d\x6f\x76\x93\xc3\xad\x34\x96\x9c\x7f\xca\x6d\xa6\x4d\x69\xf9\xf7\xb2\x1b\x26\x4c\xd3\x4d\x31\xe7\x7e\x3a\xbd\x67\x61\x72\xfe\x55\x24\xe7\x9f\x0f\xdf\x5d\xfb\x49\x92\xef\x29\x6f\xc8\x6b\xb3\xcd\x89\xfd\x47\x57\x0d\x46\x1b\xa3\xab\x30\xba\x0a\xa3\xab\xf0\x6d\xe4\x2a\x8c\xd1\xc6\x18\x6d\x8c\xae\xc2\xe8\x2a\x8c\xae\xc2\xe8\x2a\xdc\x13\xae\xc2\xeb\xf0\xe0\x8a\xe1\xc8\x1b\xd1\xbb\x19\xc3\x91\x3b\x11\x8e\xfc\x0f\x51\xd8\x11\x98\xf3\x9f\xfc\x5e\x94\x7c\x23\xea\x9b\xe4\xff\xfe\x82\x56\xae\xfc\x8a\xf2\x57\x48\x28\x05\xad\x36\x9f\xff\x44\x76\xd6\x39\xb9\xb5\x2f\x7d\xff\x58\x4d\x43\x63\x35\x0d\x8d\x35\xd2\x50\xc6\x84\xc7\x38\x53\xb9\x00\x73\x8c\xa9\xcc\xc0\x14\xa4\x5b\x60\x2a\xd2\x7b\x36\xe2\xf6\x4d\xbe\x70\x0e\xf6\x84\xf8\x37\xda\x5a\xce\xd2\xca\x36\xf9\xf1\x73\xe4\x55\x29\x40\x7c\x57\xfd\x00\xf1\x79\x76\x57\x22\xe6\x13\x1d\x9e\xe7\xbf\xf5\x38\xe7\xc2\x20\x71\x24\x3f\x48\x7e\x90\xfc\xdc\x3e\xe4\x07\x83\xc4\x31\x48\x1c\xc9\x0f\x92\x1f\x24\x3f\x48\x7e\x7a\x82\xfc\x60\x90\xf8\x46\xc4\x28\x18\x24\xde\x89\x20\xf1\x37\xf2\x28\x94\xfd\x2c\x0a\x25\x7a\xf1\x1c\x19\x81\x61\x18\x0c\x75\x6c\xe2\x47\xf1\x86\x22\xc4\xcf\x86\xbb\x57\xec\x26\xfd\xd5\xce\x4b\xfc\x01\xcd\x85\x87\xbf\x24\x85\xa6\xdd\xe3\x86\x87\x0b\xa2\xf0\xa0\x6f\x6c\x78\xbb\x99\x02\x47\x00\xcc\x99\xb7\xca\x43\x74\x1f\x0c\x34\x38\xaa\xe8\x10\x8a\xf1\x68\x2d\xc6\xa3\xfd\x4e\x04\xc6\xf8\x76\x3e\x00\x29\xb6\x9d\x07\xa1\xf1\x85\x07\xa7\x78\x40\xda\x51\x38\xec\x05\xa4\x35\xd5\xc0\x69\xee\x41\x7f\x0c\x8e\x48\x1e\xf4\x4d\xb5\xb0\xda\xb0\xf0\xb6\x49\x9b\xc4\xcf\x4a\xd0\x52\x04\xb1\xc9\x21\x20\xc6\xa2\x23\x59\xf6\xc8\x11\x6e\x93\xee\x15\x1d\x96\x31\x88\x19\x11\x33\x22\x66\x44\xcc\x88\x98\x11\x31\x23\x62\x46\xc4\x8c\x88\x19\x11\x33\x22\x66\x44\xcc\x88\x98\x11\x31\x63\xef\x61\xc6\x42\x7b\xe3\xdd\x43\x31\x41\xc2\x1f\x13\xdc\x4b\xb6\x73\xf9\xeb\x1d\xe4\xdb\x88\x0c\xd6\xa1\xc7\x29\xf9\xdc\x1c\x24\x43\x1d\xb9\xac\x15\x3d\xa7\xa9\xb9\x1c\x55\x98\x6c\xf2\xfd\x73\xe4\x3d\x3b\x3d\x36\x32\x14\xe6\xd0\xc5\xee\x9e\xe0\x77\x27\xe2\xfe\x8e\x5d\xf2\x35\xe8\xe0\x85\xe4\x05\xc9\x0b\x92\x17\x24\x2f\x48\x5e\x90\xbc\x20\x79\x41\xf2\x82\xe4\x05\xc9\x0b\x92\x17\x24\x2f\x48\x5e\x90\xbc\x34\x4b\x5e\x54\x98\xe1\xe4\xe5\x14\x9c\x60\xe4\xe5\x08\x1c\x82\x03\x0d\xb8\x63\xc8\x47\xf2\x86\x1c\xbd\x42\xdc\xb3\xae\x67\xc3\x39\xcb\x30\x19\xac\xe5\x2c\x72\x47\x2a\x78\x4b\xfc\xdd\x5b\x3d\x0c\x71\xbf\xe4\xf0\x55\x41\x1c\x76\x05\x39\x7e\x75\x84\x39\x70\x44\x30\x0d\x93\x30\x51\xe5\x00\x96\x82\x91\x26\x47\x1d\x1d\xc1\xd0\x11\xac\x45\x47\xb0\xef\x44\x82\x33\x8f\xa6\xb9\x3c\x18\x87\x63\x4c\x1e\x1c\x80\xe6\x57\x26\x9c\xe1\x9e\x62\xa7\xe1\xa4\xe7\x29\xd6\x52\x43\x67\xb9\xc7\xd8\x04\x9c\x92\x3c\xc6\x5a\x69\xa9\x51\x07\xb1\xb6\x4b\xa1\xc4\x8b\x92\xa3\x58\x7f\x80\xa3\x58\x85\x44\x4a\x86\x3b\x8c\x75\x50\x36\x21\xbe\x44\x7c\x89\xf8\x12\xf1\x25\xe2\x4b\xc4\x97\x88\x2f\x11\x5f\x22\xbe\x44\x7c\x89\xf8\x12\xf1\x25\xe2\x4b\xc4\x97\xbd\x87\x2f\xbb\xed\x38\xd6\x18\x1e\x90\xcf\xff\x21\xa8\xa0\x19\x57\xb4\xf5\xe8\x40\xf6\x89\x38\xcf\x04\x56\x95\x6b\x9f\x7e\x60\x2c\xfa\x66\x16\x3d\xed\xb0\x94\x6a\xe4\x3d\x71\xf2\x54\x75\x5a\xfd\xfd\xf5\xbd\xc7\x26\xdd\x66\x2e\x89\x66\x12\x29\x7a\x87\x94\x0f\xbf\xf6\x92\x19\xc3\x9a\x28\x16\x5d\x9c\xd2\xbe\xc4\x6d\x1d\xca\x8c\x7f\x1d\x2e\xf2\x35\x7e\x16\x66\xd8\x1a\x67\x25\xa6\x03\xf9\x17\x1d\xbf\xa4\x18\xbf\x64\xed\xdb\x37\xc4\xea\xdf\x1c\xbe\xcc\x8f\x92\xc3\x75\x53\xdc\xf3\xd5\x5e\xfb\xfc\xd0\x38\x6d\xcc\x8d\x8f\x04\x0a\x09\x14\x12\xa8\xdb\x87\x40\x61\x6e\x7c\xcc\x8d\x8f\x04\x0a\x09\x14\x12\x28\x24\x50\x3d\x41\xa0\x30\x73\x3d\x22\x2d\xcc\x5c\xbf\x46\x99\xeb\xff\x79\x1c\x1e\xf6\x21\x26\x72\x01\xc2\x57\x77\x92\x3f\xd8\x54\x45\x4a\xf6\xd6\x27\x25\x5e\x65\xba\xc4\xbe\x2a\x42\xe2\xfd\xb4\xde\xc8\xc8\x02\x77\x34\xda\xcf\x88\x48\xf4\xe2\x39\x96\x9a\xea\x60\x63\x64\xa4\xb2\x3a\x62\x28\x11\x69\xac\x0a\x60\x2d\x00\xa9\x57\x11\x10\x49\x08\x92\x10\x24\x21\x48\x42\x90\x84\x20\x09\x41\x12\x82\x24\x04\x49\x08\x92\x10\x24\x21\x48\x42\x90\x84\x20\x09\x41\x12\x12\x21\xff\x13\x60\x54\x90\x10\x71\x1e\x67\xad\xb0\xf3\xbc\x6e\x8c\xac\xa4\x46\xec\x65\x26\x07\xd4\x5c\x4e\xb3\x6d\xaa\xab\x6b\x37\x6d\xf2\x0b\x10\xff\xd8\x66\xd8\x56\x71\xcf\xd5\x95\x54\xec\x41\x2f\x04\x90\xdf\x36\xc1\x6e\xbb\xc4\x6e\x4b\xec\xe5\xbf\x4e\xc8\x77\x5d\x49\xf9\x5c\xd9\xe6\x78\x9b\x79\x78\x14\x2e\x56\xc5\x02\x9e\x82\x13\xc1\x10\xa3\x62\x28\x56\x52\x49\x9f\x2e\x66\x9e\x89\x42\x96\x93\x91\x59\x38\xc3\xc8\xc8\x04\xac\xb6\x51\x5e\x4b\x30\xc5\x6a\x09\xba\x41\x5d\x6d\x68\xf6\x0a\x0f\xf1\xba\x08\xe7\xa5\x10\xaf\x36\xb4\xbb\xda\x54\xe1\x85\x70\xe2\x33\x45\xd2\x0e\xf1\xf1\x59\xa0\x8e\xc3\x97\x4f\xdf\x2a\xd2\x82\x61\x18\x67\xfd\x30\xce\x0c\x86\x71\x06\x84\x71\xb6\xdd\x5b\xef\xcf\x77\xc1\xd9\xc0\xaa\xa9\x4c\x40\x07\x65\x81\x93\xf0\x34\xff\xfb\x3b\xc9\xb3\xbb\xc8\xbb\x37\xfb\x16\x59\xfd\x64\x44\x7c\x06\xbd\xaf\x0e\x1d\x5c\xae\xd3\xd5\x12\xeb\xa4\x92\xd7\x4c\x4b\xa3\x1b\x20\x3f\xe6\x1e\xb2\x06\x58\x1b\x03\x1e\x41\xac\x40\x42\x86\xa9\x89\x8f\xa9\x5e\xb2\xcb\x9a\x9a\x1f\xf2\x8e\x70\xec\x98\x2a\x14\x7e\x7a\x0a\xf4\x56\xca\x40\x05\x0e\x90\xda\x4e\x26\x12\xec\x71\x35\x15\x60\xbd\xa8\x4c\xaf\xbf\xbd\x8e\xcd\x6f\x34\xf5\x71\xa8\xe3\x34\xcb\xf4\x87\x69\x7a\x72\x0e\x95\xb6\x6f\x0c\x97\xa6\x87\xc9\xc1\x70\x66\x2e\xe4\xad\xb7\xa8\xe0\xfa\x23\xfe\x82\x7c\x0b\xb9\x83\xbd\x33\x62\x74\xc4\xe8\x88\xd1\x11\xa3\x23\x46\x47\x8c\x8e\x18\x1d\x31\x3a\x62\x74\xc4\xe8\x88\xd1\xbb\x8c\xd1\x8f\xc0\x21\x72\x20\x9e\x72\x23\xd7\x5e\xcf\x0e\xeb\xa2\x17\x9e\xbe\x1f\xef\xa3\x7f\x97\x03\xd2\xd6\x5f\xc8\x1b\x12\x7e\x24\xfc\x48\xf8\x1b\x23\xfc\xef\xda\x05\x67\x38\x6f\x2a\x69\xe5\x9b\x86\x75\x83\xea\x70\x1e\xde\xaf\x4b\x9c\xc4\x1d\xa6\x51\xd4\x73\xba\x66\x93\xcf\xf4\x93\xdf\xec\x83\xd7\x78\x0d\x5d\x5d\x49\xc5\x6e\x89\x6f\x60\x29\xaf\xaf\xe8\xf9\x65\xb5\x58\xc1\x9c\x5c\x7d\xf3\x02\xbf\x29\x4b\xdb\xba\xd5\x16\xdc\x94\x4c\x0c\xb1\x1b\x2e\xb8\xdd\x91\xb3\x0b\x56\x3c\x6f\x4e\xb7\x11\x19\xf9\x20\xa3\x7e\x7f\xae\x73\x37\x01\xd6\x31\x9e\x35\xf2\x6d\xe1\x5c\x69\x9c\x1c\x13\xd4\xa8\x66\x91\x09\x44\x5f\x31\x1d\x95\x70\x1e\xd9\x11\xb2\x23\x64\x47\xc8\x8e\x90\x1d\x21\x3b\x42\x76\x84\xec\x08\xd9\x11\xb2\x23\x64\x47\x5d\x65\x47\x88\x80\x10\x01\x21\x02\xda\xa8\x08\xe8\xbf\xf4\x43\xda\x09\x77\xd5\x3d\xb7\x0e\x8f\x02\xc9\xce\x47\xb9\x65\xbb\x6c\x2c\x39\xcd\x4a\xf0\x81\x3c\xd5\x4f\xde\xb5\x19\x5e\x57\xd1\x86\xeb\x6f\xf4\x9e\x48\x63\x18\x68\x92\x35\xef\x1c\xf1\xa6\xdc\xe6\xdb\x44\x84\x0e\xb1\x1b\x26\xe4\x2e\x3a\x49\xca\x02\x1e\x8c\x68\x68\x15\x68\xe8\x1d\xe1\x68\xe8\x02\x99\x73\x43\x76\x6b\x17\x9f\x93\xc3\x2c\x60\x72\x6a\x9d\x93\x90\x16\x21\x2d\x42\x5a\x84\xb4\x08\x69\x11\xd2\x22\xa4\x45\x48\x8b\x90\x16\x21\x2d\x42\x5a\xd4\x5d\x5a\x84\x2c\x07\x59\x0e\xb2\x9c\xb5\x61\x39\x7f\x35\x0c\x47\x5c\x96\x63\x69\x05\xdd\x2e\x5b\x55\x21\xbb\x9c\xe6\xd0\x6b\x78\x1e\x7c\x37\x5a\xec\xdf\x0f\x93\xef\xbf\x03\xee\xaf\xba\xd1\x45\x38\x0f\xb1\x15\x57\x79\x12\x9c\xc8\xce\x8a\x6c\xfa\x89\x5d\xf4\xe7\x89\xca\x7b\x05\x5b\xf1\xae\x6a\x73\xe4\xee\x0b\x11\x78\x3e\x42\x9e\x8b\xc4\x3e\xec\xce\xd0\x7b\x23\xf3\x5c\xbb\x60\x1a\xca\x13\xec\x4b\xbf\x40\xff\xa5\xe6\xca\x49\x45\x99\xa6\xff\x75\xfe\xbe\xa4\xea\x2c\x56\xd0\x56\x72\xc5\x65\xbb\xac\x59\xc3\xe2\xcd\x72\x42\x09\x56\x8a\xfa\x0d\x4d\x19\x70\xbd\x86\x06\xa8\x38\x70\x30\x54\x52\xc9\x16\xd5\x52\x49\x6c\x70\x36\x75\x6a\x91\xee\xa8\x54\x32\x75\x34\x19\xdf\xcc\x1e\x29\x4f\x4e\xfa\xd9\x08\x7c\x30\x42\x9e\x89\xc4\x3e\xe0\x76\xf7\x49\xb7\xb7\x2e\x4b\x58\x70\xfa\x4d\x1f\xa1\x4c\xf3\xae\xd2\x6d\x63\xda\x4e\xb7\xc4\x77\x68\xd9\xa6\x9f\x17\xb5\xc4\xb5\x01\xbe\x4a\x9a\xe8\xe1\x1d\xfc\x31\x15\xd5\x1c\xbe\x17\x72\x1c\x25\xbd\x05\xde\xc4\x50\xd2\x65\xb8\x04\x59\x5f\x94\x44\x67\x65\x58\x2d\x14\xe8\x66\x2b\x1b\x96\x47\x93\xaa\x57\x9e\x93\xef\xcd\x5b\x06\xa1\x74\xe9\x21\x7f\xba\x74\x07\xe9\x2b\x68\x65\xb8\xae\x85\x73\xa5\x34\x39\xed\x71\x25\x9f\x8d\x50\x8b\x8e\x38\x6a\x92\x3a\x19\xfb\x8d\xad\xc1\xbb\x41\xb1\x34\xb3\xa8\xe6\xb4\xe0\x0d\x31\x20\xae\xe8\xf2\x9e\x58\x84\x3c\x2c\x54\x45\xb3\x77\x60\x0a\xb1\xf4\x2d\x96\xbe\x6d\x31\x66\xfa\x4f\x22\xdd\x11\x32\xd7\x78\xb6\x04\x15\xae\x7a\xd9\x12\x7a\x4d\x9c\x99\xcb\x5d\x13\x67\x89\x9f\xdd\x16\x2c\xce\xee\x13\x65\x71\xd5\x92\x2c\xc2\xf6\xf0\xbf\x76\x59\x82\xb1\x39\x92\x25\x58\x22\x0d\xa7\x5b\xb0\x66\x4c\xb1\xce\x5f\x64\xb8\xdf\x46\x79\x15\x26\xaf\x5e\x8d\xc2\x2b\x51\xf2\xed\x68\xec\x9b\xee\x00\x7d\x32\x7a\x59\xd6\xb1\xf5\x92\x62\x73\x3d\x59\x59\xd0\x16\x0d\x7e\x64\x75\xce\x95\x9e\x3d\x45\x1c\xe5\x59\x17\x25\x79\x54\x32\x4a\xc3\x25\xba\xb9\x74\x76\xf0\x60\x6a\xb6\x2c\xb7\x38\x61\x72\xa7\x40\x2c\x48\x7d\x69\x49\xcb\x53\xc9\x58\xbc\x25\xb0\xbc\x6c\x74\x29\xe9\xc5\x21\xa1\x7d\xb3\x53\x9a\x52\xb0\xe8\x37\xd9\xd4\x2c\xdd\xc8\xbb\xa7\x08\xef\xf3\x5c\xbe\x65\x7a\x58\x63\xd9\xa6\x9d\x94\xcf\x77\x2a\xbd\xd3\x79\x21\xf1\x90\x45\x49\xbb\xd2\xe9\x0d\xac\x9f\x4b\x9a\x5a\xf2\xed\x63\x9c\xb0\x2e\x64\x59\x0f\xfc\x6a\x7c\x7d\x39\x0a\x2f\x47\xc9\x4b\xd1\xd8\x8b\xee\x30\x3f\x1b\x9d\x92\x8c\x9b\x26\x3d\x50\x69\x2e\x18\xcb\x5a\x86\xa9\x16\xd8\x04\x70\xef\xe8\x21\x3e\x06\x1c\x05\x39\xef\xe2\x59\x47\xb9\x7e\x77\x24\xa9\x48\x7a\x70\x5e\x33\xb5\x52\x9e\x1e\xf6\x5d\xc6\xaa\x29\x86\x65\x5e\x53\xe9\x19\x9e\x0d\xab\xb5\xac\x8d\x2c\xaa\x45\xc7\x26\x11\xe7\xbf\xc6\x95\x45\xbd\xa4\x16\xf5\x27\x1d\xb8\xb9\xa0\xd1\x53\x0b\x63\x26\x23\xfc\xb4\x92\xf7\x4e\xc3\xbc\xf1\x01\xdb\xbb\x89\x5b\x01\x92\xca\xb4\xce\x96\xb3\xd4\x71\xc3\xaa\x7d\x33\x86\xc4\xb8\x41\x8e\x1b\x21\xd8\x66\x33\xca\xd7\x92\xf1\x6d\xbc\x3f\x53\xce\x8b\xd8\x15\x8a\xf5\xfb\xfa\xe0\xe9\x3e\xf2\x54\x5f\xec\xbb\x2e\x20\xf8\xfa\xa6\xc7\x05\x25\xa4\x5b\xea\x9a\x71\x53\x29\xa8\xd6\x02\x3d\x48\x4b\x95\xbf\xdd\x7d\xa1\x59\x8b\x86\xb5\x44\xc7\xc2\xb7\xa7\x17\xab\x1e\x1e\xdc\x51\xb6\x9e\x9d\xc5\x68\xf2\xb7\xd2\xe9\x42\xc9\xe9\x79\x0f\xf7\x33\x72\xcc\x8c\x2f\xee\xe8\xd2\xc3\xb6\xe0\xaa\x0e\x1b\x4e\x4a\xc3\xe8\x50\x45\xe7\x0c\xe8\x9d\x54\x2a\x1f\x96\x54\x78\x02\x1f\xf6\x11\x97\x85\xc3\x00\x7f\x87\x01\x65\x58\x4c\x7c\xe5\xc2\xb0\xc7\x95\x81\xb4\x9a\xbb\x41\x3f\x32\xa5\x3c\xbd\x4a\x2d\x16\x8d\x9b\xec\xa2\xaa\x81\xe3\x28\x5f\x2c\xfd\xca\x46\x9c\x37\x58\x70\x5b\x1a\x57\x06\x66\x0c\x4b\x93\x9a\x55\x72\xaa\x9d\x53\xf3\xf4\xed\xc5\xf8\x30\x61\xcb\xdb\xb3\xb9\xf4\xaa\x69\x70\xd1\x6d\x23\x19\xdf\x6e\x56\xaf\x1b\x59\xb9\xf8\x6c\xa4\xcd\xf5\xe8\x2e\xf1\xe4\x48\xe7\x60\x56\x4a\x8e\xd4\xe1\x1a\x77\xdd\x51\x08\xae\x2b\xfe\x6a\xc9\x56\x72\x27\x9f\x0d\x48\x3f\x73\x77\xb0\xca\xb0\x8f\xb1\x33\x66\xc9\xe5\x0c\x23\xf8\x28\xb4\xdb\x14\x6e\x17\x5d\x52\x23\x1e\xa8\x6e\x68\x98\x75\x60\x90\xfe\x73\xec\x41\xf9\xc7\x25\xcd\x2a\x68\xf2\xaf\x7b\xe4\x5f\x59\x57\xb5\x82\x9e\x1b\xae\xbe\x2e\x7d\x01\xe6\x20\x53\x75\xcc\x1a\x83\xa3\x2d\xac\x89\x2c\x6d\x14\xd5\x93\x30\xf5\xe4\x13\x9b\xe0\x85\x4d\xe4\xf9\x4d\xb1\xe7\x5c\x19\xff\xee\x4d\xb7\xcf\x71\xaa\xca\xfe\x43\xc7\x99\xf9\x33\x30\x1b\xa5\xc9\x49\x2f\x37\x75\x28\x7b\xe5\x25\xcc\x7e\xe3\x0b\x77\x1f\xfb\x54\x71\xf7\x17\xb5\xc8\xee\xa4\x3a\x19\xbf\x9b\x5d\xc1\xf4\x23\x5b\xd9\x9b\xb1\x8d\x12\x5b\x96\x43\xca\x79\xba\xf0\xc5\xbf\xe7\x9d\xed\xe0\xfd\x71\x5f\xf0\x39\x2f\xfd\x72\x04\x5e\x8a\x90\x17\x23\xb1\xcf\xbb\xb8\xeb\xa3\x91\x19\xc3\xca\x31\xd5\xad\x60\xb0\x61\x37\x94\xf8\x22\xfd\x53\x5c\x99\xa8\x78\x8b\xa4\x32\x5b\x16\x5a\x16\xc3\x5c\x62\x69\x0e\xab\x39\xf6\xe2\xcc\x3d\xa4\xa8\xe7\xc4\x57\x94\x51\x31\xe3\xa6\x18\x53\xee\x3e\x61\x6a\x86\x59\xd4\x92\x0a\x7f\xe2\x62\x51\x2d\xb8\x73\xc9\x10\xbc\xef\x00\xb8\x8f\x8f\x6f\x66\xdd\xaa\x82\x63\x41\x82\xbb\x2b\x07\xda\x2e\x7f\x1d\x82\x93\x3a\x99\x3c\xa9\x53\xdd\x88\x72\xaf\xa5\xda\x88\xf2\xb6\x27\x4d\x7b\xe6\x6e\xb8\x50\x3f\x4d\x65\x40\x04\x6b\xd1\xc8\xa9\x45\xdf\x14\x96\xbf\x7e\x57\xfc\xeb\x7e\x29\x2c\x77\xba\x29\x2c\xe7\xe8\xbd\x7e\x79\x2c\x8f\xf8\xe6\xb1\xf4\x42\x4f\x83\x6e\x6c\xf3\x31\xfa\x0d\x70\x05\x2e\x57\x7d\xa1\xa6\x20\xdd\x78\x4a\xc7\xa0\x7e\x66\x9e\x8f\x06\x6f\x84\xc7\xf8\x46\xa0\x9f\x47\xba\x11\x66\xa0\x2d\x8f\x84\x37\x71\x96\x33\x0f\x8f\x7a\x2c\xa7\x5d\x6d\xbf\x99\x6b\x78\x74\xcf\x7a\x1a\x5e\x9b\x1a\x6f\x34\xd5\x65\x31\x7c\x4f\xcf\x92\x33\xe1\xa9\x2e\x03\x5f\x12\xf3\x5d\x62\xbe\xcb\x36\xb0\xdb\xf5\x17\x09\x42\xde\x7b\x1e\x86\x02\x33\x6a\x9a\x46\xde\xd6\x72\xcb\x96\x5e\xbe\xe5\xa6\x31\xf8\xda\x1c\xf9\xcc\x4e\xdf\xac\x99\x23\xf5\x2b\x3c\x65\x19\xf1\x61\x8d\xf1\x83\x69\x62\x0f\xbd\xa1\x26\x63\x65\xcd\x75\x3d\xee\x60\x9e\x46\xa7\x6a\x74\xaa\x46\xa7\x6a\x74\xaa\xbe\x6d\x9c\xaa\xd3\x3d\xe3\x54\xdd\xf6\x9e\xb4\xec\x54\x9d\x46\xa7\x6a\x74\xaa\x46\xa7\x6a\x74\xaa\x46\xa7\xea\xee\x3b\x55\xa7\xd1\x07\x7a\x03\xfa\x40\xa7\x7b\xdd\x07\x3a\xbd\x0e\x7d\xa0\x33\x46\x30\x9d\xbc\xcc\xe9\xe4\x79\x38\xc7\xe8\xe4\x34\x4c\xc2\x44\x20\xe4\x93\xa2\x91\x1d\x18\x5f\x73\x72\x9f\xd3\xed\x72\x38\xe3\xe3\xd1\xd0\x6f\x0f\x67\x7c\x27\xc8\x78\x03\xf5\x16\x38\xea\xab\xe9\x0b\xc4\x7f\x6f\xab\x2f\xb6\x88\xb9\xcc\xba\x96\x50\x88\xa2\x4b\x5d\x64\x14\xad\x15\x5d\x6a\x64\x32\xd0\x88\x8a\x3e\xa9\x2d\x72\xcd\x66\xcb\x75\x35\xb2\x1c\x5b\x28\xd7\xd5\x50\xb3\x2d\x94\xeb\x6a\xa8\xdd\xd5\x96\xeb\x6a\x4c\xbe\x35\x2e\xce\x6a\x24\x61\xe2\xbf\x2b\xbe\xf2\x4d\xb8\xa9\xca\x9e\x5d\xc6\xa2\x8f\xac\x1b\xe5\xd7\xd5\xc8\xba\x49\xf7\xbe\x4e\x4b\x3d\x04\xa9\x08\x52\x11\xa4\x22\x48\x45\x90\x8a\x20\x15\x41\x2a\x82\x54\x04\xa9\x08\x52\x11\xa4\x22\x48\x45\x90\x8a\x20\xb5\xf7\x40\x6a\xa1\xcd\xa1\x34\x61\x80\x21\xe1\x0f\x18\xee\x25\xdb\xb9\xfc\xf5\xce\xf7\x8d\xc2\x86\x86\xd1\x42\x2d\x95\x68\xbf\x23\xda\xf7\xf5\xc3\x48\x70\xa9\x1d\x39\xc9\xaa\x5e\x2a\x58\x9a\x6d\x6b\x36\xf9\x5a\x9c\xfc\x56\x1f\x90\x8a\x92\x3a\x1c\x7a\xd8\x8d\x25\x54\x9d\xe5\x4d\xb5\x29\x7f\x6a\xaa\xa6\xa2\x0e\xeb\x8c\x78\xc8\x9c\x6e\x97\x67\x0c\x6b\xa2\x58\x74\x9d\x9d\xed\x1e\x77\x6d\xcb\xdc\x08\x36\x16\xb4\x3d\xa9\x6a\x53\xb9\x53\xdf\x1a\xbe\xc0\xc7\xc8\xd1\x90\xb2\x3a\x62\x62\x30\x4f\x2a\x92\x28\x24\x51\x48\xa2\x6e\x67\x12\x85\x79\x52\x31\x4f\x2a\x92\x28\x24\x51\x48\xa2\x90\x44\xf5\x04\x89\xc2\x3c\xa9\x88\xb6\x30\x4f\xea\x1a\xe5\x49\xfd\xcb\x7e\x18\x1f\x51\x4d\x3d\xb4\xc6\xb1\xa5\xb9\x54\x81\x4a\x4b\xcb\xa0\xb2\xca\x26\x9f\xea\x27\x2f\xf7\xc1\x9d\x39\xc3\xd2\xae\xae\xa4\x62\xff\x47\x83\xe5\x6d\x2e\x79\xad\x4d\xba\xad\xb5\x89\xcd\x24\xd9\x0d\x93\x86\xa5\xc9\xc1\xe6\xbe\x4f\xc4\xa2\x36\xab\x28\x6a\xf3\x78\x38\x98\x39\x48\x46\x05\x98\x89\xc7\x05\x89\xf1\x9d\x07\x2c\x74\x8c\x48\x06\x91\x0c\x22\x19\x44\x32\x88\x64\x10\xc9\x20\x92\x41\x24\x83\x48\x06\x91\x0c\x16\x3a\x46\xe8\x83\xd0\x07\xa1\x4f\xdb\xa1\xcf\x1f\xcd\x39\x0e\x38\x76\xee\x9a\x96\x5f\x2e\xfa\x38\xe0\x98\x96\x6e\x58\x7a\xf9\x56\xae\xa8\x32\x07\x9c\x4f\xcd\x91\x9f\xd9\x09\xc4\xbb\xc1\x75\xc0\x19\x0c\x49\x06\x25\x1a\x9a\xa4\x0d\x25\xe2\xf4\xe2\x79\xb7\x11\x27\xc8\x52\xbe\xa6\xc7\x81\x0c\xc6\x2e\x21\x9e\x40\x3c\x81\x78\xe2\xf6\xc1\x13\x18\xbb\x84\xb1\x4b\x88\x27\x10\x4f\x20\x9e\x40\x3c\xd1\x13\x78\x02\x63\x97\x36\xe2\x59\x1f\x63\x97\x3a\x11\xbb\xd4\x9c\xfb\x40\x52\x02\x02\x6e\x82\x14\xf9\x70\x3e\xa7\xdb\xe1\xee\x03\x61\x09\xa0\x72\xe1\x9e\x03\xa7\xc9\x49\xe1\x39\x50\x83\x28\x9c\x3c\x29\x72\xb7\x6a\x03\x3b\xe2\x2f\x6e\xf5\xa5\x15\xaf\xf7\x72\x40\x55\x80\x89\x5d\xfc\xef\x5d\x42\x13\x9c\x24\x5c\x84\xf3\x70\xae\x2a\xf7\x53\x9d\xc0\xb2\xd0\xc9\xc1\xbc\x4f\x98\xf7\xa9\xc5\xbc\x4f\x3f\x10\x6d\x2a\xc6\x31\x74\x29\xc2\xa3\x3c\xe7\x53\x06\xce\x7a\x39\x9f\x56\xd9\x64\xf3\x15\xc8\xc2\xdb\x5c\x6d\xae\xa7\x6e\x88\xb2\xc4\x1f\x2a\xbe\xa2\x2c\xee\x9f\xee\xa9\x42\xac\x25\xf9\x35\x35\x62\x4d\x4a\xf5\xd4\x41\x01\x87\xa8\x14\x51\x29\xa2\x52\x44\xa5\x88\x4a\x11\x95\x22\x2a\x45\x54\x8a\xa8\x14\x51\x29\xa2\x52\x44\xa5\x88\x4a\x11\x95\xf6\x1e\x2a\xed\x76\x9a\xa7\x6e\xb0\x83\x66\x72\x49\xb5\x3f\xd3\xd3\x4f\x9f\x87\x43\x4e\x74\x61\x40\x5c\xa1\x03\x19\x4b\xe5\x15\xa3\xb8\xbc\xa4\xe5\x8a\xaa\xbe\x64\x93\x3f\x9f\x23\xcf\xee\xf4\xe2\x0a\x0f\x84\xf8\x98\xb9\x8d\x5c\x61\x8d\x4c\xd2\x46\x12\xfb\xe8\x4d\xd5\x71\x80\xbe\x97\xa2\xcb\x19\x72\x14\xe4\x28\xc8\x51\x90\xa3\x20\x47\x41\x8e\x82\x1c\x05\x39\x0a\x72\x14\xe4\x28\xc8\x51\x90\xa3\x20\x47\x41\x8e\xd2\x2c\x47\xb9\x06\xe7\x39\x47\x99\x81\x29\xc6\x51\x4e\xc2\x71\x18\x0b\xf4\xd1\xa0\x67\xfc\xe4\x4a\x2a\xe9\x7b\x32\x6f\x8b\xbf\x59\x6b\x99\x6a\x7c\xfb\x53\x91\xa9\x26\xfe\x99\xad\x1e\xa2\x78\xd8\x73\x2c\xf3\xa5\x11\x83\xfc\xf7\xee\xf2\x08\x8e\x0f\xe6\x20\x03\x67\xab\xfc\xcc\x8e\xc2\xe1\xd6\x66\x04\x9d\xcc\xd0\xc9\xac\x45\x27\xb3\xa7\xa3\xc1\x49\xc6\x67\xb9\xc8\x48\xc3\x69\x26\x32\xc6\xa0\xe5\x05\x0a\x17\xb8\xeb\xd9\x19\x98\xf6\x5c\xcf\x56\xd3\xde\x45\xee\x77\x76\x16\x66\x24\xbf\xb3\x55\x34\xd8\xa8\x6f\x59\xa7\xc4\x56\xe2\xf7\x14\x4f\x6c\x25\xfc\x9d\xc8\x7c\x45\xd8\x21\x7e\x2d\x17\x61\x9e\x07\x59\x77\x85\x19\xb2\x50\x64\xa1\xc8\x42\x91\x85\x22\x0b\x45\x16\x8a\x2c\x14\x59\x28\xb2\x50\x64\xa1\xc8\x42\x91\x85\x22\x0b\x45\x16\xda\x7b\x2c\xb4\xdb\x3e\x65\x9d\x62\x06\x4d\xf9\x91\xad\xbf\xec\x81\xe4\x1b\x71\x78\x84\xa7\x44\x53\x4d\xd3\xf6\xb2\xe1\xe7\x35\xb3\x68\xdc\xa2\xba\x83\x4d\x7e\x3e\x4e\x3e\xd3\x07\x77\xd2\x0b\xae\xae\xa4\x62\x2b\x8d\xa5\xba\x9f\x72\x5b\x68\x53\x7e\xfb\x7d\xec\x86\x09\xd3\xb4\xaf\xa4\xbc\xc6\xd7\x67\xcd\xc1\xee\xa7\xb6\xbf\x10\xbe\x41\x06\xc9\x3e\xb1\x41\xe8\x54\x8b\x2d\xe2\x8d\x74\xe5\xbe\x68\x24\x55\x3e\x66\xb4\x47\x66\x85\xcc\x0a\x99\xd5\xed\xc3\xac\x30\xa3\x3d\x66\xb4\x47\x66\x85\xcc\x0a\x99\x15\x32\xab\x9e\x60\x56\x98\x6f\x1e\x21\x18\xe6\x9b\x5f\xa3\x7c\xf3\x3f\x3f\x02\x59\x01\x57\x96\xcb\x86\x9d\x53\x8b\x7a\xa9\x30\xb2\x32\xca\x33\xcd\x07\x04\x06\xb2\x73\xbb\x51\x2a\xab\x45\xd3\xc8\x3b\xf7\x69\x96\xb8\xe8\x9d\xe4\x95\x24\xf9\xe0\x1d\x70\xaf\xd4\xe2\x55\xd1\x62\x2c\xc1\x96\x61\xe5\xf1\xf0\xac\xdb\x5c\xd6\xc8\x4f\xb8\xcd\x25\x8e\xd0\x6b\x27\xbc\x46\xae\xf0\x36\x3c\x9f\x96\x80\x1b\xdb\xec\xd5\xf2\x42\x04\x9e\x8f\x90\xe7\x22\xb1\x0f\xbb\xd3\xfa\xde\xc8\x3c\x57\x49\x98\x5a\xf3\x04\x53\x0f\x16\xe8\xbf\xd4\x5c\x39\xa9\x28\xd3\xf4\xbf\xce\xdf\x97\x54\x9d\x39\x72\xd9\x4a\xae\xb8\x6c\x97\x35\x6b\x58\xbc\x79\x4e\x68\xce\x4a\x51\xbf\xa1\x29\x03\xee\x6b\x0d\x50\x19\xe2\xc0\xa8\xa4\x92\x2d\xaa\xa5\x92\x90\x0a\x6c\xbe\xd5\x22\xdd\x86\xa9\x64\xea\x68\x32\xbe\x99\x3d\x52\x9e\xd1\xf4\xb3\x11\xf8\x60\x84\x3c\x13\x89\x7d\xc0\xed\xee\x93\x6e\x6f\x5d\x00\xb1\xe0\xf4\x9b\x3e\x42\x99\xe6\x5d\xa5\x7b\xcd\xb4\x9d\x6e\x89\x8f\xd7\xb2\x4d\xbf\x49\x6a\x89\xab\x10\x7c\x69\x35\xd1\xc3\x3b\xf8\x63\x2a\xc8\xab\x05\x8f\x73\xb8\x94\x85\x0b\x0c\x2e\x9d\x85\x19\x98\x0a\xf4\xd8\x92\xd6\x51\x52\xac\xa3\x64\xc0\xd4\x87\x32\xa6\x42\x38\x63\x9a\x22\x69\x87\x31\x79\x0f\x16\xa8\x29\xe8\xb1\x1e\x77\x1a\x15\xc1\xbd\x0f\xf9\xc3\xa7\x3b\x48\x5f\x41\x2b\x43\xec\x0b\x5b\xfd\xf7\xc7\xb0\xa5\x99\x45\x35\xa7\x35\xb8\x45\xc6\xc4\xe5\x6b\xbf\x4b\xde\x04\x6f\x80\x2b\x55\x8e\xac\x6d\x9a\x54\x74\x6b\x45\xb7\xd6\x16\xdd\x5a\x7f\x33\x02\x6f\xe1\x2e\xa7\x8f\xc1\xbc\xe7\x72\xda\x79\x79\xd3\x31\x09\xe7\x08\xb2\x60\xf9\x62\x2e\x97\xa1\x6b\x72\x2e\xf1\xa5\x6d\xfe\x82\x4c\x1c\xd0\x14\x35\x50\x76\x1d\xe3\x57\xac\xbd\xe8\xba\x0c\x97\x20\x2b\x8b\xae\x44\x1a\x4e\xb7\x60\xea\x98\x62\xef\x73\x91\x99\x0b\x30\xe1\x6b\xa8\xd0\x7a\x35\x0a\xaf\x44\xc9\xb7\xa3\xb1\x6f\xba\x03\xf4\xc9\xe8\x65\x59\x47\xd7\x4b\x8a\xcd\xf5\x6c\x65\x41\x5b\x34\xf8\x91\xd7\x39\x97\x7a\xf6\x18\x81\x02\x58\x17\x25\xa1\x54\x32\x4a\xc3\x25\xad\xa0\xb2\x81\x10\x6a\xba\x2c\xbc\x38\xa1\x72\xa7\x40\xac\x57\x7d\x69\x49\xcb\x53\xf1\x58\xbc\x25\xb0\xbe\x6c\xb4\x29\xe9\xc5\x21\xa1\xbd\xb3\x53\x9e\x52\xb0\xe8\xc7\xda\xd4\x2c\xdd\xc8\xbb\xa7\x10\xef\xbb\x5d\xbe\x65\x7a\x58\x64\xd9\xa6\x9d\x94\xcf\x87\x2a\xbd\xd3\x79\x21\xf1\x90\x45\x49\xd1\xd2\xe9\x0d\xac\x9f\x4b\x9a\x5a\xf2\xed\x63\x9c\xb0\x2e\x64\x59\x0f\xfc\x4c\xf3\x5f\x8e\xc2\xcb\x51\xf2\x52\x34\xf6\xa2\x3b\xcc\xcf\x46\xa7\x24\x6b\xa7\x49\x0f\x64\x9a\x0b\xd6\xb2\x96\x61\xaa\x05\x36\x01\x59\xa3\xa8\xe7\x6e\x0d\xf1\x31\xe0\x28\xc9\x79\x17\xcf\x5c\xca\x55\xbd\x23\x49\x45\x52\x89\xf3\x9a\xa9\x95\xf2\x5a\xa9\xec\x31\x5a\x4d\x31\x2c\xf3\x9a\x5a\xa2\x6f\x44\x87\xd5\x5a\xd6\x46\x16\xd5\xa2\x63\xd3\x88\xf3\x5f\xe3\xca\xa2\x5e\x52\x8b\xfa\x93\x0e\x1c\x5d\xd0\xe8\xa9\x87\x31\x97\x11\x7e\xda\xc9\x7b\xa7\x69\xde\xf8\x80\xed\xdd\xc4\xad\x08\x49\x65\x5a\x67\xcb\x59\xea\xb8\x61\xd5\xbe\x19\x43\x6a\xdc\xa0\xc7\x8d\x18\x6c\xb3\x19\xe5\x6b\xc9\xf8\x36\xde\x9f\x29\xe7\x45\xec\x0a\x1d\xfb\x7d\x7d\xf0\x74\x1f\x79\xaa\x2f\xf6\x5d\x17\x30\x7c\x7d\xd3\xe3\x82\x32\xd2\x2d\x75\xcd\xb8\xa9\x14\x54\x6b\x81\x1e\xc4\x25\xf7\x7d\x77\x5f\x68\xd6\xa2\x61\x2d\xd1\xb1\xf0\xed\xe9\xc5\xaa\x87\x07\x77\x94\xad\x67\x67\x31\x9a\xfc\xad\x74\xba\x50\x72\x7a\xde\x33\x17\x30\xf2\xcc\x8c\x37\xee\xe8\xd2\xc3\xba\xe0\xb2\x0e\x5b\x4e\x4a\xc3\xe8\x50\x49\xe7\x0c\xe9\x1d\x5a\x2a\x1f\x96\x54\x78\xd8\x05\xfb\x92\xcb\xc2\x61\x80\xbf\xc3\x80\x32\x2c\x26\xbe\x72\x61\xd8\xe3\xca\x40\x5a\xcd\xdd\xa0\x5f\xa0\x52\x9e\x5e\xa5\x16\x8b\xc6\x4d\x76\x51\xd5\xc0\x71\x53\x80\x58\xfa\x95\x8d\x38\x6f\xb0\xe0\xb6\x34\xae\x0c\xcc\x18\x96\x26\x35\xab\xe4\x54\x3b\xa7\xe6\xe9\xdb\x8b\xf1\x61\xc2\x96\xb7\x67\x73\xe9\x55\xd3\xe0\xa2\xdb\x46\x32\xbe\xdd\xac\x5e\x37\xb2\x86\xf1\xd9\x48\x9b\xdd\x48\x9a\x4f\xa5\xbc\x7a\xd7\x14\xc5\x5f\x99\xd8\x4a\xee\xe4\xc3\xd4\xa8\x3e\xd1\xa4\xf2\xe0\xa3\x7e\xa4\x5f\xb8\xdb\x5f\x9f\x38\xcc\xc8\x1b\xb3\x03\x73\x02\xd2\xe0\x09\xe9\xa8\xc9\x5c\x32\xd6\x52\xc9\x78\xa0\xba\xa1\x61\xd6\xa7\x41\xfa\xcf\xb1\x07\xe5\x1f\x97\x34\xab\xa0\xc9\xbf\xee\x91\x7f\xb5\xcb\x96\x5a\xd6\x0a\x7a\x6e\xb8\xfa\xba\xf4\x05\x98\x83\x4c\xd5\xe9\x6b\x0c\x8e\xb6\xb0\x62\xb2\xb4\x51\x54\x5e\xc2\x94\x97\x4f\x6c\x82\x17\x36\x91\xe7\x37\xc5\x9e\x73\xbf\x00\xef\xde\x74\xfb\x9c\xb8\xaa\xac\x4b\x74\x9c\x99\xb7\x04\xb3\x80\x9a\x9c\x23\x73\x43\x8a\xb2\x57\x5e\xc2\xec\x37\xbe\x70\xf7\xb1\x0f\x19\x77\xae\x51\x8b\xec\x4e\xaa\xb1\xf1\xbb\xd9\x15\x4c\x7b\xb2\x95\xbd\x19\xdb\x28\xb1\x65\x39\xa4\x9c\xa7\x0b\x5f\xfc\x7b\xde\xd9\x0e\xde\x1f\xf7\x05\x1f\x05\xd3\x2f\x47\xe0\xa5\x08\x79\x31\x12\xfb\xbc\xcb\xc5\x3e\x1a\x99\x31\xac\x1c\x53\xec\x0a\x06\x1b\x76\x43\x89\x2f\xd2\x3f\xc5\x95\x89\x8a\xb7\x48\x2a\xb3\x65\xa1\x83\x31\x1e\x26\x96\xe6\xb0\x9a\x63\x2f\xce\x9c\x4f\x8a\x7a\x4e\x7c\x63\x19\x3e\x33\x6e\x8a\x31\xe5\xce\x19\xa6\x66\x98\x45\x2d\xa9\xf0\x27\x2e\x16\xd5\x82\x3b\x97\x0c\xf0\xfb\x0e\x80\xfb\xf8\xf8\x66\xd6\xad\x5e\xa1\x68\x8f\xf8\x7f\x2f\xb6\x90\x3b\x58\xbf\xbb\x77\xfc\xcc\x4c\x41\x9a\x9c\x8e\x9f\x74\xfd\x19\xfb\xd9\x8e\x13\xdb\x3f\xa0\x99\x78\x1f\xbd\x48\xf6\x59\x5c\x87\x5e\x91\x7f\xd7\x0f\x13\x1c\xdc\x6b\x4f\x94\xb5\x92\xcd\xa6\xdb\xa9\x10\xcb\x1d\x24\x03\xe8\xbd\xa5\xb1\xfd\x68\x6b\x65\x9b\x7c\xba\x9f\xfc\xdf\x7d\x40\xbc\x26\xdc\x0a\x06\x0d\xba\x50\x5e\xe2\x8d\xcd\x6b\xed\x72\xa1\x4c\xb2\x1b\xa6\xdd\x0e\x89\xa2\x08\xde\xe7\xda\x7b\xe2\x9c\x6e\x97\x7b\xdf\x8f\x32\x90\x10\xb5\xdd\xc1\xd2\xd9\x9d\x8d\xf8\x3d\x5e\x7f\x63\xf8\x0e\x3d\x4c\x0e\x8a\x1d\xea\xad\x0f\xb1\x41\xbd\x49\xa8\xcd\x6b\x89\x2e\x95\xe8\x52\x89\x2e\x95\xe8\x52\x89\x2e\x95\xe8\x52\x89\x2e\x95\xe8\x52\x89\x2e\x95\xe8\x52\x89\x2e\x95\xdd\x75\xa9\x5c\x7f\x07\x5a\x74\xda\x44\xa7\x4d\x74\xda\x6c\xcc\x69\xf3\x7f\xc4\x61\x57\x45\x44\xac\x4c\x7d\xe4\xb0\xd8\xcf\xc7\xc9\xaf\xf6\xc1\xdd\x22\x2c\xb6\x29\xb0\xd3\xf6\xd8\xd8\xa4\x14\x1b\xcb\x7a\x82\x01\xb2\xcd\x06\xc8\xce\x87\x33\x9b\xfd\x24\x59\x2f\x28\xb6\xd2\xee\x66\x9a\x36\x46\xc9\x22\xd2\x41\xa4\x83\x48\x07\x91\x0e\x22\x1d\x44\x3a\x88\x74\x10\xe9\x20\xd2\x41\xa4\xd3\x8b\x48\x07\x81\x0b\x02\x17\x04\x2e\x6b\x03\x5c\xfe\xf3\x10\x1c\xaf\x01\x2e\xa3\x41\x0e\x36\x12\x81\x71\x22\x62\xdf\x35\x44\xbe\xb4\xb9\x02\xc4\x8c\xc6\x1e\xf2\x09\x85\xf5\x4e\xed\x89\x7e\x16\xfd\xea\xe2\x92\x51\xcf\x03\xc6\xbb\x08\x23\x5d\x7b\x3c\xd2\xf5\x6d\x30\xc9\x29\xd1\x71\x18\x63\x94\xe8\x20\x8c\xc2\xfe\x60\x1f\x3d\xd3\xb4\x93\x62\x7d\x24\x25\x82\xd3\x1e\x30\xd4\x68\xe6\x34\xf6\xf8\xd0\x08\xd6\x97\xb7\x54\xad\x67\xc5\x3f\x74\x55\x5a\xd2\x7b\x9c\x68\xd5\xae\xae\xea\x19\x98\x82\x74\x95\x6f\x74\x0b\x93\x80\x3e\xd1\x18\x85\xda\x62\x14\xea\x47\x23\xed\x11\x03\x67\x79\x28\xeb\x04\x9c\xf2\x42\x59\x3b\x23\x50\x42\xa2\x4b\x3b\x21\x6f\x12\x3f\xbc\xad\x4a\xa0\xdc\xeb\x86\x90\x4a\x32\x64\xb7\x88\x1a\xed\xaa\x08\xc1\x08\x51\x8c\x10\xc5\x08\x51\x8c\x10\xc5\x08\x51\x8c\x10\x6d\x25\x42\x34\x30\x06\xa0\xe7\x43\x47\x1b\x8f\x10\xed\x84\x4e\x90\xfe\xd6\x5d\x55\x3a\xc1\xbe\x90\x30\x50\x49\x53\xd8\x65\x56\x3a\x1c\x74\x58\x51\xc0\x28\xcf\x8d\xa7\x80\x60\x94\x27\x46\x79\xae\x71\x94\xe7\xdb\x82\x3f\x1e\xed\x38\x53\x36\x1c\xd1\xd9\x1e\xdf\xa3\xd1\x0a\xdf\xa3\xcc\x11\x38\x44\x0e\xc4\x53\xae\x9b\xea\xeb\xe5\xe8\x4d\xaf\x95\x0d\x11\xb0\xf9\xa1\x18\x4c\x35\xce\x90\xed\xb2\x5a\xd6\x16\x97\x8b\xb6\xe6\x42\x64\xf6\xb7\x65\x9b\xfc\xee\x0e\xf2\x83\x9b\xaa\x3e\x8b\x7b\x19\x4b\xe6\x17\x38\xe3\xe7\x7d\x14\xe7\x45\x63\xf3\x5a\x39\x91\x08\xc4\xca\xd2\x55\xfc\xdb\xdf\xde\x43\x74\xe6\x2a\x4c\xf1\x05\x4b\x35\x12\xba\x60\x0f\xc1\x01\x48\x35\xb6\x60\xa5\xbe\xad\x82\x5d\x14\xb4\x32\x5c\xbf\x1c\xbe\x90\x53\x64\xa4\x56\x4f\x91\xbb\x50\xb3\xaa\x63\xaf\x56\xd3\xd0\x41\x87\x86\x36\x32\x29\xc3\xf5\xc0\x68\x87\xe7\x25\x7d\x06\xa6\x61\xb2\x4a\xab\x68\x65\x62\x50\x9d\x40\x40\xda\x22\x20\xfd\x58\xa4\x4d\xb2\x61\x96\x13\xd2\x34\x9c\xf6\x08\x69\xd7\xc5\x0c\x43\xa4\x1d\x11\x33\xe9\xef\x54\x9f\x87\x0e\xd6\x9c\x87\x1a\x91\x37\x83\xc1\x47\xa3\x0e\x4a\x1b\x3c\x21\x6d\x3c\x91\x86\x27\x24\x3c\x21\xad\xf1\x09\xa9\x5b\x7a\x65\xe8\x11\xa9\x23\x22\x3f\x73\x14\x0e\x93\x83\xf1\x51\xf7\xa8\x73\xbf\x7c\x46\x92\x6e\xdd\x10\x87\xa4\xf7\x9d\x87\x63\x81\x59\x6d\x02\x8e\x4a\x7a\xa9\x60\x51\xf9\x64\x93\x2f\xce\x91\x7f\xb3\xd3\x37\x9b\xcd\x6e\xee\x16\x6d\x09\x4f\x36\xc7\xe6\x60\x2c\x2a\x74\x0a\x94\x59\xde\x44\x62\x0f\xbd\xac\x4e\xee\x19\x71\x5d\x8f\xc7\x26\xa5\x31\x5a\x07\xa3\x75\x30\x5a\x07\xa3\x75\x6e\x9b\x68\x9d\x74\xcf\x44\xeb\xb4\xbd\x27\x2d\x47\xeb\xa4\x31\x5a\x07\xa3\x75\x30\x5a\x07\xa3\x75\x30\x5a\xa7\xfb\xd1\x3a\x69\x0c\xae\xd9\x80\xc1\x35\xe9\x5e\x0f\xae\x49\xaf\xc3\xe0\x9a\x8c\x06\x19\xce\x6f\x26\x61\x82\xf1\x9b\x71\x38\x06\x47\x02\xf9\x8d\x77\xba\x17\x14\x27\x95\x14\xc7\xf2\x39\xdd\x0e\xa7\x38\x0f\xfb\x53\x9c\x3b\xc9\x66\x9e\x17\xf5\x4a\x38\xc4\x39\x40\x52\x41\x79\x51\x45\x4f\x6a\x53\x6e\xc4\x3f\xb4\xd5\x17\x4c\x6c\xe7\x5f\x02\x45\x2d\xb9\x10\x62\x2f\xff\x53\x17\x31\x04\xa7\x06\xb3\x70\x06\xa6\xab\xd8\xf9\x21\x38\xd0\xc2\x44\x20\x36\x47\x4b\x60\x8b\x96\xc0\x7f\x8c\xc0\x0c\x97\x06\xa7\xe0\x04\x93\x06\x47\xa0\xb5\x45\x08\xe7\xb8\x2d\x70\x0a\xd2\x9e\x2d\xb0\xe5\xc6\xe6\xb8\x6b\xe5\x34\x4c\x4a\xae\x95\x2d\xb7\xd6\xba\x90\x32\x8d\x0e\x0a\xa9\xc4\x6f\x2b\xbe\x42\xea\x41\xe1\x5a\x2b\xf9\x29\x1b\x8b\xae\xbc\x1a\xe5\xbf\xd6\xc8\xab\x49\xf7\xea\x4e\x4b\x2e\xe4\x9d\xc8\x3b\x91\x77\x22\xef\x44\xde\x89\xbc\x13\x79\x27\xf2\x4e\xe4\x9d\xc8\x3b\x91\x77\x22\xef\x44\xde\x89\xbc\xb3\xf7\x78\x67\xa1\xcd\x51\x9f\x61\x30\x21\xe1\x0f\x13\xee\x25\xdb\xb9\xfc\xf5\x4e\xf5\x1d\x03\x0b\xeb\xd1\x15\xed\xcb\x51\x20\xdc\x15\xad\x64\xe4\x35\x36\x1d\xba\x31\x42\x7e\x31\x4a\xfe\x7d\x14\xfa\xe8\xdf\x62\xb1\x02\x0b\x91\x5e\x34\xac\x25\x77\x85\xab\x0a\x1b\x9d\xc4\x3d\x05\xad\x7c\xc1\xc8\x6b\x13\xd9\xd9\x33\xf4\x0f\xed\x43\x1e\x35\x0d\x8d\xd5\x34\x34\xd6\x48\x43\x19\x1d\x2e\xf0\x85\x78\x06\xa6\xd9\x42\x3c\x05\x27\x60\xbc\x85\x85\xe8\xbc\x63\xd8\x52\x24\xff\x69\x10\x86\xf8\x98\x0a\x91\xe9\x0c\xab\xe3\xe2\x97\xb3\x75\x3a\xb2\x6e\xde\xac\x1f\x1c\x24\x5f\xdc\x0c\xf7\x88\xab\x5d\x20\x15\xf3\x49\x9d\x35\x39\x3f\x4b\xc7\x3b\xb1\x83\xfe\x36\xcf\x6f\x70\x48\x14\xff\x09\xb3\x65\x6d\xac\x6c\x59\xce\x1a\x72\xe8\xaa\x98\xe6\xd5\x06\x88\xbd\x29\x5c\x06\x1e\x21\x87\x84\x0c\xac\x5c\xc7\x42\x0e\x3a\x1d\xa9\x91\x83\xb1\x97\xb6\xd4\x2e\xe6\x87\xfc\xf3\x66\x39\xeb\xf9\x41\xf1\x73\x37\x96\x74\xb3\xa9\xb2\x02\x66\x00\xed\x3f\x68\xff\xe9\x52\xaa\xac\x20\x19\xd0\x7c\xaa\xac\xf6\x4b\x13\x16\x07\xd6\x98\x34\x09\x91\x1b\xfe\xc2\x26\xf1\x03\xdb\x6a\xa5\xc9\x36\x37\x69\x96\x23\x40\x1e\xe0\x7f\xe9\x86\xfc\xc0\x3c\x59\x98\x27\x0b\xf3\x64\x61\x9e\x2c\xcc\x93\x85\x79\xb2\x30\x4f\x96\x7f\x9e\xac\x0e\x1e\x2f\xd2\xbf\x7b\x57\xad\x42\xb0\x27\x24\x63\x96\xa3\x26\xc4\x58\x14\x63\x87\xb5\x04\x0c\x01\xdf\x78\xda\x07\x86\x80\x63\x08\xf8\x9a\x27\xc9\xea\x0a\x38\x0a\x8d\x00\xef\xa0\x6c\xcf\x1c\x84\x51\xb2\x3f\x9e\x74\x11\xfa\xbd\x72\x1c\xb8\xb8\xad\x36\x06\xbc\xfd\x58\xfc\x3c\x9c\x68\x3c\x8d\x15\xdd\x70\x16\x55\x3e\x2c\x4b\x5b\xd1\x99\xad\x80\xfc\xe0\x79\xf2\xb1\x9d\x55\x69\x4c\xf6\xd7\x8f\xcf\x9e\x74\x9b\xb9\x24\x9a\x49\x0c\xd2\x3b\x7c\x33\x98\xd4\x5e\x8c\xf1\xda\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xe8\xbf\x88\xfe\x8b\xcd\xfa\x2f\x5e\x87\x8b\x1c\xb6\x9c\x85\x19\x06\x5b\x4e\xc3\x49\x38\xde\x58\xbe\xbd\xda\xb3\x79\x5b\x82\xb6\xdf\x1c\xce\x5d\x8e\x92\xc3\xb5\x99\xf7\x6a\xbb\x53\x9b\x80\x2f\xfe\x6b\x5b\xab\x60\xc5\x03\x4e\xcc\xb6\x1f\x97\x18\xe6\x3f\x76\x9b\x4c\x70\x90\xd0\x24\xfb\x0e\x9b\x1b\x64\xdf\xe8\xc7\xd3\xa2\x1f\xcf\xf7\x47\x79\xfc\xf5\x7e\x16\x7f\x4d\xa5\xc4\x71\x58\xc5\x4a\x84\x2c\xf7\xe7\x99\x85\x33\x9e\x3f\xcf\xea\x5a\x7c\x94\x1b\x01\x33\x70\x56\x32\x02\xae\xae\xc9\x30\x31\xd6\x49\x31\x15\x16\x33\x9e\xf8\x43\xa5\x4a\x8c\x0d\xf8\x46\x75\xfb\x88\xb4\x23\x35\x25\xf7\xfc\x42\xbb\x3b\x2e\xdc\x90\x92\x22\x25\x45\x4a\x8a\x94\x14\x29\x29\x52\x52\xa4\xa4\x48\x49\x91\x92\x22\x25\x45\x4a\x8a\x94\x14\x29\x29\x52\xd2\xde\xa3\xa4\xdd\x8e\xf2\xee\x28\x5b\x68\x22\x84\x7c\x3d\x86\x7a\x7f\x7b\x07\xa4\x1b\xf7\x69\xcb\xbb\x75\x29\xbd\xca\x8c\x39\xb5\xa8\x91\x0f\xec\x20\xdf\x8d\x56\x41\x96\x3d\xbc\x30\x23\xfd\xbd\xb6\x24\x97\x54\xac\x78\x6f\x60\x59\x46\xef\xa2\x79\xda\x4a\x9b\x8b\x32\xbe\x31\xd8\xe7\xfe\x24\x5f\xbf\x47\xe0\x10\x5b\xbf\x23\x30\x0c\x83\x0d\x56\xd5\xa1\x1d\x6d\x30\xda\xf6\x42\xf8\xba\x1d\x24\xfb\xea\x96\x11\x15\x55\x74\xe8\x43\x21\xf6\x62\x75\x21\xc6\x7d\x6e\x21\xc6\xd0\x49\x18\xac\x57\x86\xb1\xa3\xf3\x90\x9e\x80\x53\x70\xa2\x8a\xdc\x37\x37\xde\x08\xeb\x11\xd6\xb7\x08\xeb\x7f\x32\xb2\xda\xcd\xce\xfd\xaf\x53\x8c\x9f\xbb\x7c\xbe\xe9\x46\x56\x19\x6a\xdb\x98\x28\x09\x92\x1c\xb5\xc5\x16\xff\x6b\x75\xb1\xc5\xd1\xda\x62\x8b\xa1\x32\x65\x5f\x23\x55\xe8\xdb\x2c\x51\x30\xca\x66\xe3\x09\x2f\x8c\xb2\xc1\x28\x9b\x35\x8e\xb2\xe9\xbc\xae\xd8\x98\x04\xaf\x2b\xb5\x65\xf1\x1e\x1a\xb0\x93\x19\x85\xfd\x24\x19\x1f\x72\x0f\x2b\xdb\x2b\x8a\x2b\xd2\x27\x6c\x88\xb2\x8a\xef\xdd\x05\xd3\x81\x65\x15\xd9\xd9\x35\xe8\xb0\x53\xd2\xca\x37\x0d\xeb\x06\x8b\xf7\xd5\x35\x9b\xfc\xc7\x7e\xf2\x3b\x7d\xbe\x49\xc2\x6f\x09\x4e\x59\xca\xeb\x2b\x7a\x7e\x59\x2d\xca\xe7\x72\xd5\xb5\x09\x5c\xe0\x0d\x66\x45\xcc\x73\x5e\x0a\x9f\x77\x80\xf1\x00\x6b\x69\xc0\xb3\x86\x56\x98\xb7\x0c\x53\x73\x93\x1a\xd8\x65\x4d\xcd\x27\x13\x29\x76\x43\x9d\x82\x09\x15\x0f\x9d\xd3\xed\x72\x8f\x47\x04\x65\x6e\x04\x6f\xb5\x2c\xdf\x6a\xb3\x70\x86\x6d\x35\x76\x70\x68\xe1\xb3\xcb\xf0\xc9\xf4\x8a\x56\x2a\x3b\x9b\xaf\xdf\x7f\xb3\xdc\x4d\x80\x75\x8c\x7b\x5a\xbd\x25\x7c\x87\x1e\x23\x47\x82\x12\xc4\x55\xcc\x83\x4f\x8c\x1b\x9a\xf8\xd1\xc4\x8f\x26\x7e\x34\xf1\xdf\x36\x26\xfe\x4c\xcf\x98\xf8\xdb\xde\x93\x96\x4d\xfc\x19\x34\xf1\xa3\x89\x1f\x4d\xfc\x68\xe2\x47\x13\x7f\xf7\x4d\xfc\xeb\xf0\x74\x9b\x41\xaf\x84\x0d\xe8\x95\x90\xe9\x75\xaf\x84\xcc\x3a\xf4\x4a\x20\xff\xb4\x0b\xe6\xda\x02\x82\x9c\x04\xdd\x2f\xec\x22\xff\x72\xb3\x2f\x0f\xfa\x4c\x44\x4c\x8c\x44\x81\x4a\x8e\x1c\x73\x12\xbb\xb4\x9f\x06\x0d\x79\x9a\x0b\xd3\xce\xc4\x77\x8e\x2a\x3f\x9e\x4a\x36\x50\xa1\x05\x4b\x6d\x27\x13\xc3\x4d\xb1\xa4\xde\xe7\x48\x6d\xc7\x45\xa1\x56\xba\x8e\x22\xa2\x3a\x48\xf7\x26\x47\xba\xc8\x90\x90\x21\x21\x43\x42\x86\x84\x0c\x09\x19\x12\x32\x24\x64\x48\xc8\x90\x90\x21\x21\x43\xea\x2a\x43\x1a\x83\xa3\xe4\x70\xfc\xa0\xcb\x90\x76\xc8\x5e\x15\x15\x0a\xfe\x46\xf0\xae\x40\xfe\x84\xfc\x09\xf9\x53\x63\xfc\xe9\x3f\x0f\xc1\xf1\x9a\x48\x8b\x54\xe3\x91\x16\xe4\x5d\x43\xe4\x4b\x9b\x2b\xdc\x72\x59\x01\xad\x9a\x6a\x70\x92\x07\x6e\x7f\x65\x68\x45\xca\xcf\x01\x17\x4b\xc3\xf5\x7c\x69\xb8\x40\x87\xa8\xa6\x52\x7f\x4b\xbe\x87\xa9\xa4\x37\xff\x0d\x06\xab\xcc\x87\xa3\xad\xfd\x24\x59\xeb\x61\xee\x3d\xc8\xa7\x26\xdc\xcb\x5b\xaa\xd6\xb3\xe2\x5f\x10\x4e\x5a\xd2\x7b\x6a\x02\x55\xba\xb1\xaa\x9b\xad\x0e\x17\x30\xd6\xe8\xeb\x8d\x81\x2a\x5d\xaa\x0e\x17\xb0\x02\x5b\xa8\x0e\x17\xd4\xd2\x2a\x43\x56\x3a\x21\x50\x12\x3f\xbc\xad\x4a\xa0\xdc\xeb\xd6\x84\x93\x64\xc8\xee\xea\xac\x4e\xdd\x10\x21\x58\x20\x0e\x0b\xc4\x61\x81\x38\x2c\x10\x87\x05\xe2\xb0\x40\x5c\x2b\x05\xe2\x7a\xbe\x0e\x5c\xa8\x42\x10\x5e\x20\xae\x31\x9d\x20\x5c\x0f\x90\xb5\x86\xf4\xb7\xee\xaa\xd2\x09\xf6\x85\x94\x85\x93\x34\x85\x5d\x55\x21\xac\x1d\x56\x14\x30\x7a\x75\xe3\x29\x20\x18\xbd\x8a\xd1\xab\xeb\xab\x46\x5c\xab\x07\xbe\xd0\x1a\x71\x9d\x38\xf2\x65\x8e\xc0\x21\x72\x20\x9e\x72\xad\x26\xaf\x97\x2d\x2e\xde\x9d\x1b\xc1\xdc\x42\xbe\x3a\xd4\x4c\x05\x3a\xbb\xac\x96\xb5\xc5\xe5\xa2\xad\x79\x10\xf9\xfd\x43\xe4\xcb\x9b\xab\x72\x3b\x3c\xec\x03\x91\xe7\xc5\xbd\xf3\x5a\x39\xb1\x2b\x30\x41\x8f\x74\x15\x62\xe4\x1e\xc7\xc8\x57\x61\x8a\x0b\x01\xaa\xe5\x51\x21\x70\x08\x0e\x40\xaa\xc1\x48\x75\x6f\x9e\x57\x81\x7d\x18\x47\xbe\x1c\x2e\x03\x52\x64\xc4\x27\x53\x89\xd4\x85\x9a\xc8\xf7\xd8\x57\xab\x53\x1f\xed\xf4\x07\xc9\xf2\xb2\x1e\xa8\x97\xf2\xa8\x73\x2b\xfb\x0c\x4c\xc3\x64\x95\x02\xd6\xca\x44\xa0\xe6\x85\x2c\xb9\x45\x96\xfc\xb1\x48\x9b\x64\xc1\x2c\x87\xc9\x69\x38\xed\xc1\xe4\xae\x8b\x15\x46\x93\x3b\x22\x56\x12\x3f\xb2\xad\x4a\xac\xdc\xe7\xe2\x64\x59\x92\xec\xa9\xa9\x12\xd0\x0d\x41\x82\x40\x19\x81\x32\x02\x65\x04\xca\x08\x94\x11\x28\xdf\x9e\x40\xb9\x23\x1f\xfd\x70\x4c\x5d\x9b\x1d\x31\x11\x42\x94\x65\x65\x61\x77\x70\x56\xc4\x8e\xe8\x0a\xc8\x94\x37\x9e\x0e\x82\x4c\x19\x99\xf2\x1a\x33\xe5\x6e\xe1\xa4\x50\xa8\xdc\x91\x8f\x40\xe6\x28\x1c\x26\x07\xe3\xa3\x2e\x1c\xbe\xbf\x22\x3b\xa2\x77\xeb\x86\xc0\xca\xff\x6b\x17\x5c\xe0\x58\x59\x84\xba\xeb\xa5\x02\x9b\x39\xdd\x18\x59\x69\x2d\x38\xfe\x23\xbb\xc8\x7b\x36\xc3\x6b\xbc\xf6\xae\xae\xac\xdb\xb8\xf8\xbd\xec\x71\x17\xdc\x57\xb9\xb2\x7e\x43\xe2\xbb\x9f\x5a\x31\x2c\x68\xfd\xfa\xdb\xc2\xf7\xef\x38\x39\x26\xf6\x6f\xcd\xfa\x0c\x0b\x9d\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\x78\x0c\x8a\xc7\xa0\xf8\x35\x0f\x8a\x7f\x39\x0e\xdf\x33\xa2\x9a\xba\x87\x99\xf8\x29\x6f\x49\x35\x6d\xf2\xc9\x38\xf9\x44\x1f\xdc\x99\x33\x2c\xed\xea\x4a\x2a\xb6\xdc\x58\x95\x8d\x49\xd6\xc0\x79\xd5\x6c\x53\x85\x0d\x4e\x7f\x26\x0d\x4b\xbb\x92\x72\xdb\x9e\xd3\xed\xf2\x8c\x61\x4d\x14\x8b\x2e\x0a\xb2\x7b\x9f\xfe\x74\x3f\x21\x62\x43\x85\x35\xce\x85\x13\xa0\xbd\x64\x8f\x0c\x75\x04\x0d\x8a\xc7\xbd\x4a\x9e\x7c\x5e\x10\xf7\x20\xee\x41\xdc\x83\xb8\x07\x71\x0f\xe2\x1e\xc4\x3d\x88\x7b\x10\xf7\x20\xee\x41\xdc\xd3\x65\xdc\x83\x40\x05\x81\x0a\x02\x95\xb5\x01\x2a\x3f\xf5\x00\x9c\x74\x22\x44\x75\x4b\x2b\xe8\xcc\x6d\x93\x5e\xed\xfa\xf3\xf0\xbc\x83\xf4\x1a\xcd\x5a\xd1\x5d\x7f\x1e\x1e\x2f\xba\x6c\x93\x3f\x88\x91\xff\xb2\x09\xee\xaf\xba\xdf\xcd\x9e\x30\xc0\x16\x1e\xbf\xb6\xb6\xfc\xf7\x44\x76\x76\x9e\x37\x9b\x48\xf0\xb0\xd1\x8a\x56\x44\x16\x05\xef\x2a\xee\xe9\xdb\xde\xc8\x98\xcc\xf7\x06\xfb\xb9\xe4\x38\x02\x79\x0b\xbc\x89\x21\x10\x16\x43\xe3\x8b\x40\x68\xe3\xc3\x6a\xa1\x40\x97\x52\xd9\xb0\x3c\x0a\x52\x3d\xae\x4e\xa0\xb4\xf7\x4e\x0d\x46\x42\x6a\xe1\xd8\x23\x4d\x4e\xd7\x04\x3c\x73\xe2\xe1\x3d\xcd\x4b\x76\xe1\x37\xdf\x10\xfb\xd6\xd6\xe0\xb9\x4c\x38\x51\x92\x0d\x4c\xe7\xb0\x1b\x2e\xd9\xfd\x19\x4d\x2f\x42\x1e\x16\xaa\x3c\x8c\x3b\x30\x73\xe8\x79\x8c\x31\x95\x2d\xc6\x54\xfe\x49\xa4\x2b\xb2\x05\xae\xf1\x90\x4b\x15\xae\x7a\x21\x97\x9d\x79\x52\x18\xdb\x6d\x4c\x7e\xd5\x97\x4e\xe1\xd2\x2d\x24\xf0\x33\xfd\xb1\xbb\x83\xc5\xdb\x81\x9a\xb0\x8c\x06\xe4\xdc\xa0\x88\xcf\xe8\xae\x94\xc3\x28\x8d\x8d\x27\x2b\x31\x4a\x03\xa3\x34\xd6\x38\x4a\xe3\x7b\xbb\xf3\x51\xea\x91\x4f\x45\x58\xac\x48\xfd\x5c\x41\x5e\x4b\xb5\x5e\x28\x6d\x0f\xb9\xf8\xda\x2e\x48\xfb\x64\x83\xaf\x1b\x6a\xe1\x93\x13\xfe\x07\x76\x91\xbf\xe8\xab\x4a\x6f\xf7\xc9\x46\xa2\x2c\xbc\xc4\x48\x3d\x11\x62\xb1\xeb\x66\x37\xf3\xec\x6d\x20\x03\x7b\x68\x78\x45\x47\x72\x6e\xa1\x91\x1d\x8d\xec\x68\x64\x47\x23\x3b\x1a\xd9\xd1\xc8\x8e\x46\x76\x34\xb2\xa3\x91\x1d\x8d\xec\x68\x64\xef\xaa\x91\xfd\x36\x4a\x7b\x8b\xf6\x7f\xb4\xff\xa3\xfd\xbf\x31\xfb\xff\xbf\xda\x05\x19\xce\x95\xac\x05\x35\x97\x74\x80\x81\xaf\x0b\x40\x5d\xd8\x64\x19\x45\xcd\x26\x9f\xeb\x27\xdf\xe8\x83\x1d\xb4\xad\x09\xb9\x29\x17\x36\x99\x8d\x05\x65\x5c\x32\xe8\xd7\xb5\x2d\xf1\x18\xbc\xdb\x97\xaa\x7b\x54\xc3\x8d\xe8\x23\xe7\x74\x1b\xa9\x51\xab\x61\x19\x0b\xe1\xe4\xe8\x14\x39\x21\xc8\x51\xe0\x6a\x13\x38\x89\xce\x06\x82\x24\x04\x49\x08\x92\x10\x24\x21\x48\x42\x90\x84\x20\x09\x41\x12\x82\x24\x04\x49\x08\x92\xd6\x1a\x24\x21\x0f\x42\x1e\x84\x3c\x68\xa3\xf2\xa0\x3f\xda\x09\xf7\x3a\x09\x36\xd8\x30\x59\xac\x93\xe4\xe5\x9d\xe4\x37\x36\x79\xb9\x35\xf6\x72\xf5\xce\x12\xfb\xc5\x91\x5c\x8e\xb7\xd0\x1c\xbd\xf3\x12\xbd\x33\xb1\x8b\x5e\xc9\xb3\x61\x78\x7f\x5d\x6f\xa9\x30\xde\x0a\x69\xce\x5c\xc6\xe1\x18\x63\x2e\x07\x20\x05\x23\x81\xc9\x8b\xe9\x28\x25\x57\x52\x49\xef\x85\xe7\x74\x3b\x9c\xb2\x3c\xec\x4f\x59\xee\x24\x9b\x39\x60\x99\x0b\x07\x2c\xfb\xc8\x40\x75\xae\x0b\xaf\x13\x98\xe7\x14\x51\x0a\xa2\x14\x44\x29\x88\x52\x10\xa5\x20\x4a\x41\x94\x82\x28\x05\x51\x0a\xa2\x14\x4c\x7c\x81\xa0\x03\x41\xc7\x6d\x07\x3a\xbe\xb2\x13\xee\x71\x40\x87\xad\xe5\x2c\xad\x6c\x93\xcf\xed\x24\xff\x51\x82\x1c\xbb\xea\x43\x8e\x79\x76\x57\x42\xf1\x00\x07\xff\xcb\x7a\x83\x1b\x6f\x84\x93\x1c\x6e\x1c\x81\x43\x0c\x6e\x8c\xc0\x30\x0c\x86\xc2\x0d\xfe\xb2\x0d\x81\x8d\xb3\xe1\xe0\x62\x37\xe9\xaf\x97\xb0\x93\x3f\x0c\xc2\x10\x09\x42\x0d\x84\x1a\x08\x35\x10\x6a\x20\xd4\x40\xa8\x81\x50\x03\xa1\x06\x42\x0d\x84\x1a\x08\x35\x10\x6a\x20\xd4\x40\xa8\x71\x3b\x40\x8d\x2f\xf5\xc3\xe1\x8a\x2c\x31\x0d\x27\x88\x21\xef\xef\x27\x1f\xef\x83\x3b\x45\x66\x98\xd8\x4a\x63\x71\x3a\x6d\x4e\x0b\x93\x4c\xf4\x4b\x89\x5d\xfc\x72\xba\x60\x84\x8e\x3f\x62\xb9\x10\x8e\x58\x06\xc9\xbe\x46\xd3\xb6\x40\x43\x11\x3f\x48\x5b\x90\xb6\x20\x6d\x41\xda\x82\xb4\x05\x69\x0b\xd2\x16\xa4\x2d\x48\x5b\x90\xb6\x20\x6d\xe9\x2e\x6d\xc1\x68\x1c\xe4\x39\xc8\x73\x36\x2a\xcf\xf9\x9f\x51\x78\x1d\xe7\x39\x26\x2b\x77\xed\xa6\x62\x21\x5f\x8b\x92\xaf\x44\xe1\xb5\xfc\xcf\x6e\x76\x95\xfb\x0b\x5a\xb9\xf2\xeb\xc9\xbb\x9e\x78\xb0\xa0\x95\x79\xc5\x6c\x2f\x33\xbd\x73\x5a\x6b\x63\x56\xfa\x9a\x86\xc6\x6a\x1a\x1a\x6b\xa4\xa1\x8c\x09\x8f\x71\x84\x72\x01\xe6\x18\x42\x99\x81\x29\x48\xb7\x80\x50\xa4\xf7\x6c\xc4\x55\x85\xbc\xb4\x03\x4e\x54\x12\xb4\xa0\x7c\x37\x1a\x7b\x0b\x5b\x2b\x7b\xf5\x70\x72\x6a\x51\x23\xdf\xb7\x83\xfc\x5d\xd4\x03\x69\x7b\x78\xf9\x1b\xfa\x53\x6d\x19\x81\x4b\xbc\x91\x79\xad\x9c\xe8\xe7\xd5\x6f\x2a\xb9\x97\xf7\xfb\x3c\x6d\xa0\xcd\x65\x6f\xde\x0c\xa7\xf9\x20\x1f\x83\x23\x6c\x90\x53\x30\x02\xc3\x81\x8e\x3f\xea\x72\xd9\xa0\xef\x41\x8f\x03\x2b\xa9\x24\xeb\x51\x28\x97\x0a\xa9\x69\x93\x0d\xc7\x56\xc3\x64\xd0\xc1\x56\x5e\x07\x1c\xb7\x20\xd6\x07\x19\x5c\xc5\xbe\xb0\xc5\x1b\xfb\x7d\x6e\xb9\x9a\xd0\xe1\xdf\xe3\x56\xab\xe9\xe2\x0c\xa4\x27\x61\x02\x4e\x55\x95\x58\x68\x76\x0a\xb0\xae\x02\xd6\xa0\x69\xb1\x06\xcd\x87\x22\xc1\x85\xaf\x56\x2f\x1a\xa6\x79\xe5\x99\x93\x70\xdc\xab\x3c\xd3\x7c\x33\x8e\x20\x69\xbb\xa4\x08\x2b\x14\xf3\x8d\xbb\x3c\x41\x32\x5a\x5b\x18\x26\x54\xa2\xec\x32\xfd\x2c\x19\x1d\x93\x27\x58\x10\x66\xe3\x09\x2e\x2c\x08\x83\x05\x61\xd6\xb8\x20\x4c\x37\x74\xc4\xb0\x32\x2c\x0d\xca\xfe\x20\x41\xef\xf3\x4d\xc8\x8c\xc2\x7e\x92\x8c\x0f\xb9\xd8\x64\xbb\x9c\x0d\x97\x35\xb1\x11\x12\xe1\x92\x7f\xda\x09\x0f\xf2\xd3\xcc\x02\xf3\x03\x70\x8e\x8f\x39\xcb\x28\x5d\x37\x16\x6c\xf2\xad\x9d\xe4\x1b\x9b\xe0\x35\xec\x57\xf7\x14\xb9\xbb\x7e\xdc\xc3\xa4\x65\x94\x32\xc6\x42\x62\x80\x5e\x96\xa6\x97\x88\x33\xa5\xf8\x61\xbd\xc5\x3f\xbc\x3d\x58\x09\x9a\xe6\x6b\x9f\xaa\x30\x74\xed\x1f\x86\x83\x30\x1a\xb8\xf6\xd9\x20\xba\xd5\x8e\xc4\x60\xd0\x43\x67\xa3\xf9\x1d\x1e\x0d\x5f\xe6\x49\x32\xc4\x97\xb9\x68\xbe\x36\x45\xa6\x58\xed\x0b\xbc\x80\x11\x5a\xe8\xd1\x42\x8f\x16\x7a\xb4\xd0\xa3\x85\x1e\x2d\xf4\x68\xa1\x47\x0b\x3d\x5a\xe8\xd1\x42\x8f\x16\x7a\x8c\x87\x40\xfb\x39\xda\xcf\x6f\x03\xfb\xf9\x17\x87\x60\xc4\xd7\x7e\x6e\x1a\x79\x5b\xcb\x2d\x5b\x7a\xf9\x16\xfb\x45\xd7\xdc\x12\xb9\xff\x66\x88\xfc\xf1\xe6\x1a\xcb\xfa\x2e\xb6\xc0\x2a\x0f\x7e\x59\x23\x3f\x2f\x1a\xe1\xb6\xf5\x44\x9c\x5e\x55\x61\x67\xaf\xb9\xa6\xcd\x16\xc4\x17\x22\xf0\x7c\x84\x3c\x17\x89\x7d\xd8\x9d\x95\xf7\x46\xe6\xb9\x46\xc1\xb4\x92\x27\xd8\xd7\x7d\x81\xfe\x4b\xcd\x95\x93\x8a\x32\x4d\xff\xeb\xfc\x7d\x49\xd5\x19\xb7\xb5\x95\x5c\x71\xd9\x2e\x6b\xd6\xb0\x78\xbd\x9c\x43\x18\x8b\xfa\x0d\x4d\x19\x70\x69\xce\x00\x15\x01\x4e\x9c\x47\x52\xc9\x16\xd5\x52\x49\x6c\x6a\x36\x5d\x6a\x91\xee\xa2\x54\x32\x75\x34\x19\xdf\xcc\x1e\x29\x4f\x48\xfa\xd9\x08\x7c\x30\x42\x9e\x89\xc4\x3e\xe0\x76\xf7\x49\xb7\xb7\x2e\x3f\x58\x70\xfa\x4d\x1f\xa1\x4c\xf3\xae\xd2\xad\x62\xda\x4e\xb7\xc4\xb7\x87\x71\x52\xfa\xd1\x60\x1a\x00\x5f\x19\x4d\xf4\xf0\x0e\xfe\x98\x0a\xe2\x59\x80\x39\x4e\x7d\xa6\x61\x92\x51\x9f\x13\x30\x0e\xc7\x02\xa9\x0f\x5f\x27\x2e\xf6\xa9\x99\xef\x50\xfa\xf9\x96\x70\xea\x73\x8c\x1c\x11\x58\x87\x3f\x4d\xd8\xb4\x6a\x9f\x55\x43\x83\x42\xec\xef\xb1\xbf\xdf\x52\xb3\xd2\x07\x1c\xa3\x79\xd8\x62\xdf\x2d\x2e\xec\xea\x7a\xbf\x08\xe7\xe1\x5c\x95\x0d\x6a\x35\xd3\x83\x46\x28\xb4\x9e\xb7\x68\x3d\xff\xc5\x48\x9b\x25\xc5\xa3\xdc\x60\x9e\x81\xb3\x9e\xc1\xbc\xc3\xc2\xa7\xbe\x0d\xbc\x41\xd9\xd4\xb0\x34\xaa\x14\x62\x89\x0f\x6d\xab\x11\x3e\x31\x7e\xf0\x51\x54\x1f\x79\xb3\x8b\xff\xd6\x55\x71\x73\x19\x2e\x41\x56\x16\x37\x89\x34\x9c\x6e\xc1\xe0\x3d\xc5\xba\x7e\x91\xb1\x76\x1b\x65\x4e\x98\xcc\x79\x35\x0a\xaf\x44\xc9\xb7\xa3\xb1\x6f\xba\x03\xf4\xc9\xe8\x65\x59\xc1\xd5\x4b\x8a\xcd\x95\x54\x65\x41\x5b\x34\xf8\x79\xd1\x39\xd4\x79\xc6\x0c\x71\x8e\x66\x5d\x94\x64\x4a\xc9\x28\x0d\x97\xb4\x82\xca\x06\x42\xe8\xb8\xb2\xec\xe1\x78\xc7\x9d\x02\xb1\x28\xf5\xa5\x25\x2d\x4f\xa5\x5b\xf1\x96\x60\xe2\xb2\xc5\xa3\xa4\x17\x87\x84\xea\xcb\x8e\x48\x4a\xc1\xa2\x5f\x51\x53\xb3\x74\x23\xef\xaa\xf0\xde\x07\xb5\x7c\xcb\xf4\x98\xc2\xb2\x4d\x3b\x29\x1f\xae\x54\x7a\xa7\xf3\x42\xe2\x21\x8b\x92\x9a\xa3\xd3\x1b\x58\x3f\xb9\xc5\xd8\xa7\x8f\x71\xc2\xba\x90\x65\x3d\xf0\x51\xe9\xd3\x5f\x8e\xc2\xcb\x51\xf2\x52\x34\xf6\xa2\x3b\xcc\xcf\x46\xa7\xa4\x30\x5e\x93\x9e\x66\x34\x97\x4a\x65\x2d\xc3\x54\x0b\x6c\x02\xf8\x6e\x1b\xe2\x63\xc0\x39\x8c\xf3\x2e\x5e\x1c\x30\x57\xb4\x8e\x24\x15\x49\x21\xcd\x6b\xa6\x56\xca\xd3\x93\xb6\x0b\x38\x35\xc5\xb0\xcc\x6b\x2a\x3d\x40\xb3\x61\xb5\x96\xb5\x91\x45\xb5\xe8\x18\x04\xe2\xfc\xd7\xb8\xb2\xa8\x97\xd4\xa2\xfe\xa4\x43\x16\x17\x34\x7a\x64\x60\xc0\x62\x84\x1f\x15\xf2\xde\x51\x94\x37\x3e\x60\x7b\x37\x71\x04\x9f\x54\xa6\x75\xb6\x9c\xa5\x8e\x1b\x56\xed\x9b\x31\x1e\xc5\xad\x61\xdc\x02\xc0\x36\x9b\x51\xbe\x96\x8c\x6f\xe3\xfd\x99\x72\x5e\xc4\xae\xd0\x70\xdf\xd7\x07\x4f\xf7\x91\xa7\xfa\x62\xdf\x75\x4f\xe7\x5f\xa7\xa7\x73\xf6\x50\xba\xa5\xae\x19\x37\x95\x82\x6a\x2d\xd0\x53\x6c\xce\x28\x16\x35\x26\x72\xbd\x7d\xa1\x59\x8b\x86\xb5\x44\xc7\xc2\xb7\xa7\x17\xab\x1e\x1e\xdc\x51\xb6\x9e\x9d\xc5\xc8\xe5\x2c\x5d\xa7\x79\x2d\xa7\xe7\x3d\xd6\xce\xb0\x2d\xf7\x28\x70\x46\x97\x9e\x74\x05\xd4\x74\xc0\x6c\x52\x1a\x46\x07\xe9\x39\x07\x30\xef\xc8\x50\xf9\xb0\xa4\x32\x91\xcb\x69\x26\xff\x10\xcb\xc2\x61\x80\xbf\xc3\x80\x32\x2c\x26\xbe\x72\x61\xd8\xe3\xca\x40\x5a\xcd\xdd\xa0\x5f\x8b\x52\x9e\x5e\xa5\x16\x8b\xc6\x4d\x76\x51\xd5\xc0\x71\x8e\x2e\x96\x7e\x65\x23\xce\x1b\x2c\xb8\x2d\x8d\x2b\x03\x33\x86\xa5\x49\xcd\x2a\x39\xd5\xce\xa9\x79\xfa\xf6\x62\x7c\x98\xb0\xe5\xed\xd9\x5c\x7a\xd5\x34\xb8\xe8\xb6\x91\x8c\x6f\x37\xab\xd7\x8d\xac\x20\x7c\xb6\x8e\x7b\x5d\x33\x9a\x43\x9d\xef\xca\x7c\x59\x2d\x2f\xdb\x70\x89\xb6\x36\x4a\xce\xc1\x2c\x6c\xe1\x83\x1e\xa6\x3a\x84\xb6\xe9\x68\x08\x8a\xbf\x86\xb0\x95\xdc\xc9\x87\xa9\x51\x25\xa1\xc5\x03\x4c\xfa\x6f\xee\xaa\x51\x12\xf6\xd7\x78\xe3\x85\x1d\x55\xfa\x99\x23\x49\xb7\x34\x07\x74\xc5\xdb\x78\x1a\x09\xba\xe2\xa1\x2b\xde\x1a\xbb\xe2\x75\x1b\x4c\x85\xba\xe5\x75\x54\xf0\x67\x4e\xc2\x71\x32\x16\x3f\xea\xba\xdb\x3d\x24\xbb\xe8\xd5\x34\x50\xeb\xae\xd7\x76\x67\xba\x8f\xbd\x0e\xc6\x9d\x8c\xc1\x01\x41\x41\xb6\x66\xad\xe8\xee\x1f\xdf\x39\x62\x5a\xc6\x13\xb7\x46\xfe\x7f\xb4\xff\xef\x24\xff\xfd\x3e\xf2\xd3\x51\xa9\x84\x52\xce\x28\x95\xa8\x72\x7f\x66\xfa\xb2\xb7\x7b\xca\x86\xc2\x6e\xa2\x2f\x3a\xcf\x5b\x4b\x24\xc5\x95\x3c\xc9\xf0\x19\xad\xec\xb9\x93\x8b\x4b\xb2\xf4\x96\xc7\xf5\xf2\xb5\xac\x5a\xbe\x36\x4a\x4f\xae\xdc\xb5\xed\x08\x3c\xc8\x97\xcc\xeb\xe0\x5e\xb6\x64\x5e\x03\x77\x7d\x2a\xb2\x05\xc4\x5b\x85\x2e\x81\xc7\xc2\x67\x78\x94\xec\xaf\x4d\xd6\xeb\x75\x4a\x1c\x79\x2b\x3d\xef\x77\xfa\xaf\x2c\x20\x5b\xc4\x9b\x42\xcc\x77\xa4\xb2\x8f\x35\x35\x52\xd9\xe5\x66\x46\x2a\x50\x55\xab\x3b\x84\xce\x48\x85\xbf\x52\x87\x06\x33\xfe\xbc\x34\x52\xfb\xdc\x91\xba\x38\x1f\x32\x54\x23\x95\x43\x65\xd8\xdd\x5b\x55\x6b\x36\x56\x89\xff\x4b\x1a\xab\x41\x67\xac\xa6\xa6\xe7\xa6\x2f\x4f\xd7\x1f\xad\x54\xc5\x68\x71\x9a\xb3\xf1\xc7\x6b\xf4\x13\xd2\x78\x0d\x39\xe3\x75\x31\x7b\x79\xf6\xe2\x85\xf9\xfa\x03\x36\x5a\x31\x60\xa2\xf1\x8d\x3f\x62\x63\xbe\xbb\xf1\xec\xf4\xc4\x54\x33\xbb\xf1\xac\xa6\xe6\x37\xfe\x58\xa5\x7f\x46\x1a\xab\x84\x2b\xb9\x26\x2e\x4f\x9e\xad\x3f\x58\xfb\x2b\x45\x17\x55\x46\x36\xfe\x68\x65\x4e\xc3\x49\x72\x3c\x3e\xe6\xea\x43\x8f\x54\x84\x2c\xd4\xde\xbd\x16\x01\x0c\x87\xe0\x00\x49\xc5\x47\xdc\x27\xdc\x47\xff\xd7\x71\x09\x70\x78\x51\x9c\xfd\x26\xdf\xf6\x9b\x51\xf8\x52\x94\x7c\x31\x1a\xfb\x75\xf7\xf4\xf9\x42\x94\x4e\x1c\xf3\xe0\xba\xa6\x31\xbf\x14\xfa\xaa\x8f\x5d\x9a\x13\xc7\x4f\xe1\xee\xa4\x08\x8d\x4b\xd1\x4a\x79\xd3\xd0\x4b\x65\x9b\xf6\x7c\x71\x51\x7f\x42\xb3\xf9\x91\x48\x72\x0f\x2f\x1b\x8c\x64\x3a\x28\x56\x38\x7f\x88\xf5\xe5\x78\x56\x95\x0d\xa7\x4d\xa6\xbb\x2b\xda\x13\xea\x92\x59\x14\x28\xf2\xe6\x35\xa3\xe8\x9e\x32\x69\x6f\x68\x07\xe9\xc2\x18\x1b\x19\x29\x1a\x39\xb5\x78\xcd\xb0\xcb\x3e\x3a\x22\x5d\x0d\xc3\xf6\x2d\xbb\xac\x2d\x79\x3a\xa2\x56\x54\xed\xb2\x9e\xb3\x35\xd5\xca\x5d\x1b\x2e\x1a\x85\x82\x5e\x2a\x8c\x5c\xe5\xff\xff\xd4\x3b\x4e\xd0\x83\xc7\xd8\x0d\x7d\x29\x77\xed\x56\x52\x71\x46\xc3\xff\x67\x3e\xa4\xb2\xb2\xfa\x67\x31\x98\xe5\x9e\x0f\xda\x13\x65\xad\x64\xb3\xd3\x81\xe3\xfd\x10\x9e\x0e\xd2\x0d\x69\x67\x2c\x88\xfc\x64\x8c\x7c\x78\x13\x10\xaf\x29\xd9\x5a\xac\xe6\x15\x7e\x59\x6d\x38\xa4\x97\x5d\x30\x31\x42\x2f\x9c\x76\x1b\x10\x14\xc6\x2f\xc5\x23\xe7\x4f\x6d\x8e\x75\xcf\xc3\x2c\xdf\xf7\x69\x38\xcd\xf6\xfd\x18\x1c\x85\xc3\x81\x87\x27\xef\x4d\xdd\x03\x94\x94\x29\x31\x4c\x48\xbc\x31\x5c\x02\x1c\x26\x07\x85\x04\xf0\x1e\x55\x37\x25\x63\x63\xf6\xfc\xa7\xb6\xfa\xce\x52\xc2\x0d\x84\x0f\x9f\xa8\x51\x71\xed\x9a\xcd\x55\x7a\x0e\x32\x70\xb6\x0a\x6e\xb5\x3c\x59\x88\xb6\xd0\xc0\xdf\xa2\x81\xff\x33\x75\xf8\x7d\x1b\xa5\xc9\x05\x6e\xf6\x3f\x03\xd3\x9e\xd9\x7f\x15\xed\x35\x68\xda\xef\x9c\x8c\x4a\xbf\xe7\x6e\x5f\x21\x74\xa0\x36\x88\x3e\x5c\x1a\xed\x67\xac\x69\x4d\x64\x11\x62\xfc\x8d\x27\xeb\x10\xe3\x23\xc6\x5f\x63\x8c\xbf\x51\x34\xd1\x30\xf3\x40\xe6\x08\x1c\x22\x07\xe2\x29\xf7\x30\xf8\x7a\xf9\xc0\xea\x35\xbd\x21\x02\xed\xff\xba\x1f\x4e\x07\x1e\xb7\xea\xe7\xe0\x57\xb5\x25\x2a\x15\xcb\x36\xf9\xd9\x7e\xf2\x1b\x7d\xbe\x9f\xce\xe5\x06\xb3\xf1\xb3\xb6\xe6\xb5\x76\x25\xe3\x1f\xbe\x19\xf6\xf1\x75\x1e\x88\x69\xf9\xfd\xf7\xdf\x1b\xc2\xf7\xdf\x21\x72\x20\x70\xff\x39\xc3\xeb\xb3\xfd\x30\x41\x3f\x86\xff\x63\xf8\x3f\x86\xff\x63\xf8\x3f\x86\xff\x63\xf8\x3f\x86\xff\x63\xf8\x3f\x86\xff\x63\xf8\x7f\xef\x85\xff\xaf\xbf\xc3\x2c\x26\x18\xc0\x04\x03\x98\x60\xa0\xb1\x04\x03\xbf\xbf\x0b\x66\x5a\xe3\x3e\x7a\xa9\x60\x69\xb6\xed\xe5\x1d\xf8\x91\x5d\xe4\xef\xfd\xe9\xcf\xc7\x23\x62\x4a\x24\xe6\x53\x72\x24\x98\x93\x95\x71\x96\xb7\xd7\x16\xf2\x33\xe4\x69\x2b\x4c\x23\x13\xdf\x36\xaa\xf0\x78\x6a\xd8\x40\x85\xe6\x2b\xb5\x9d\x4c\x0c\x84\x71\x23\xd1\x59\x24\x46\xcd\x78\x5d\xdf\xe4\x5e\xd7\x57\xc2\x91\xd2\x01\x92\x0a\x8a\xbd\xad\x61\x4c\x62\x2a\x90\x15\x21\x2b\x42\x56\x84\xac\x08\x59\x11\xb2\x22\x64\x45\xc8\x8a\x90\x15\x21\x2b\x42\x56\xd4\x65\x56\x74\x10\x46\xc9\xfe\x78\xd2\x65\x45\xf7\xca\x1e\x13\x42\x51\xdf\x08\xee\x12\x48\x98\x90\x30\x21\x61\x6a\x8c\x30\xfd\x70\x3f\x1c\xe2\x84\xc9\xce\x5d\xd3\xf2\xcb\xac\xb4\xca\x8d\xa3\x76\x52\x37\xaa\x40\x93\x69\xe9\x86\xa5\x97\x6f\xe5\x8a\xaa\x6d\x6b\x36\xf9\x7a\x9c\x7c\xad\x0f\x88\x77\x9b\x0b\x94\x6e\x35\xe6\x4e\x94\x15\x0d\x4e\xd2\x06\xdb\xe4\x52\xc4\x6f\x98\x77\xfb\xe4\x64\xe3\x90\x1f\xb5\x3e\x9c\x89\x02\x5d\xc3\xdb\xce\x8c\x1c\x34\x94\x0b\x27\x3f\xa7\xc9\x49\x01\x7a\x6a\x56\x8b\x13\x7a\x2f\x8f\x34\xfa\x15\x21\x2b\x42\x56\x84\xac\x08\x59\x11\xb2\x22\x64\x45\xc8\x8a\x90\x15\x21\x2b\x42\x56\xb4\x2e\x58\x11\x32\x19\x64\x32\xc8\x64\xd6\x86\xc9\xfc\xea\x20\x2f\x2b\x52\x27\x13\x9c\x9b\x8f\xc4\x71\xef\xf9\xc1\x41\xf2\xe9\xcd\x5e\xbe\x9b\x07\x7d\xea\x89\x4c\x3b\xf7\x24\x1e\xa2\xbf\xf2\xf4\x36\x9e\xd3\x8c\xfb\x33\x96\x10\xe9\xf1\x12\x22\x6f\x80\x13\x9c\x01\x1d\x86\x83\x8c\x01\x25\x61\x08\x12\x81\x21\x9e\x74\x4d\x24\x57\x52\x49\x77\x82\x57\x91\xb6\xbf\xa0\x95\xe1\xfa\xb9\x70\x50\xb4\x97\xec\xa9\xce\x40\xe4\x3d\x5e\xce\x3b\x14\xfb\xe8\x16\x6f\xd5\x3e\xe2\x5f\x1b\xc4\x5b\xb8\x8a\xb8\xa0\x5b\x6b\xf7\x34\x9c\x84\xe3\x55\x01\xf4\x4d\x0d\x35\x86\xcc\x63\x7a\x90\x16\xd3\x83\xfc\x44\x9d\xf4\x20\xab\xdc\xff\x69\x9e\x12\x64\x1c\x8e\x79\x29\x41\x9a\x6c\xc3\x11\x15\xed\x94\x05\x21\x39\x45\x12\xff\x70\x8f\x27\x2a\xb6\x89\xac\xec\x9e\x6c\x78\x84\xff\xa5\x5b\xa2\x01\x4b\x77\x60\xe9\x0e\x2c\xdd\x81\xa5\x3b\xb0\x74\x07\x96\xee\xc0\xd2\x1d\xfe\xa5\x3b\xda\xa9\x1c\xa4\x7f\xe5\x2e\x29\x65\x77\x48\x89\x0e\x4f\x2b\x78\x98\x65\x8b\xe9\x82\x52\x80\xe9\xbc\x36\x9e\xb2\x81\xe9\xbc\x30\x9d\xd7\x1a\xa7\xf3\xea\x38\xeb\x09\x2d\xc3\xd1\x4e\x21\x9e\x39\x0c\x07\xc9\x68\x7c\xbf\xeb\x4c\xfa\x3a\xd9\x05\xd5\xbd\x67\x23\x38\xa1\x92\x3f\x7d\x2d\x24\x43\x28\xae\x69\xe4\xdd\x54\xc8\x45\xa3\x40\x7e\xe1\xb5\xe4\xd7\xa4\xa4\xe5\x0c\xd3\x2a\x45\xa3\x50\x9b\xc2\x32\x6b\xe4\x13\x31\x3f\x8a\x9b\x35\xf2\x73\x46\x61\x14\xca\xda\x13\xe5\x11\xb3\xa8\xea\xa5\x36\x67\x3a\x5e\x6d\x86\xf3\x10\xb6\x38\x1d\xbe\xda\xe2\x44\xa9\x5e\x6d\x59\x23\x5f\xb9\xce\x7e\x28\x02\xff\x2a\x42\xfe\x45\x24\xf6\xcf\x5d\x39\x70\xcd\x71\x20\x53\xe9\x47\x91\x2d\x0e\xee\x05\x53\x36\x1c\x9c\x5f\x34\x0a\x55\x9e\x0a\xb2\x6c\xa5\xe2\x9e\xcd\x83\xc5\x84\x89\x51\x92\x9b\x13\x2a\xa0\x69\xe4\x93\xf1\xad\xee\x9f\x65\x9d\xef\x71\x78\x8c\xcc\xc7\x1e\x75\xba\x73\x70\xc6\x70\x75\x57\x3a\xc5\x9e\x45\xc1\x69\xa7\xa2\x23\xec\xd4\x93\x8c\xdf\xb1\xc8\xee\xaa\x10\x11\xef\x8a\xc2\x3f\x45\xc8\xdf\x47\x62\xff\xcb\x7d\xd7\xaf\x45\x66\x17\x15\xc7\x42\x25\x39\x48\x2c\xdc\x2a\x3b\xce\x11\x6a\xbe\xda\x25\xce\x3d\x2e\x33\x0b\xbd\x5a\x16\x9f\x28\xbe\x00\xd9\xca\x17\x5f\x04\x7a\xae\xa0\x1f\xfd\xbc\x6e\x9b\x45\xf5\x16\x33\xba\x2e\x99\x4c\xd3\x66\x87\x01\xa5\xa8\x97\xd8\xa6\x16\x49\xc7\xf9\x67\x4a\xf2\x5b\xb0\x8b\x7a\xe1\x5a\xb9\x78\x8b\xdb\xca\x0d\xcb\xfb\x83\xf7\xc5\xab\x5c\xef\xcc\x5a\x94\x8c\x73\xf7\x8f\x34\x7d\x8b\x0a\x2b\xcf\x7e\x48\x92\xa1\x78\xc2\x15\x0f\xf7\x54\x15\xf3\xd9\x08\x02\x25\xb3\x00\x6f\x27\x6f\x8b\xbd\xc5\x69\xf0\xc4\x25\x3e\x98\xae\xaf\x96\x33\x6f\xc2\xb9\x8f\xaf\xcb\xda\x25\x2d\x56\xd2\x16\xe7\xbe\x8a\xb5\xf4\xa5\x28\x7c\x31\x4a\x7e\x3d\x1a\xfb\x35\xe9\xdc\x3f\xa1\x58\x5a\x91\x13\x11\x66\x60\xf6\x27\x2c\x4e\xbe\x7b\x76\x09\x5b\x5a\xde\xf6\xa2\x27\x5b\xde\x93\x4a\x38\x62\x5a\x5a\x4e\xcb\x6b\xb6\x67\xbc\x56\xe9\xd2\x67\xc6\x6a\xe6\x90\xc5\x1c\x0b\xe8\x1e\xa4\x77\x2b\xb6\x70\xd9\x64\xfb\x43\x78\x6c\x39\x8a\x9c\x6b\xcd\xae\xe5\x2f\xce\xf1\x6c\xb9\xbc\x6c\x71\x2b\x29\x6b\xad\xf6\xce\x8b\xf4\x49\x06\x5f\xbb\xec\x59\x02\x8d\xb0\x25\x4a\xff\xff\x65\xda\x45\xe7\x58\xed\xc2\x96\xf8\xdd\xf2\xc5\x15\x0b\xf3\xc5\x08\x7c\x3e\x42\x7e\x25\x12\xfb\x65\x77\x6f\xfe\x64\xc0\xde\xa4\x9b\x46\xb2\x4a\x6b\x54\xb3\x5b\x74\x36\xa0\xed\x0c\x23\x7b\xbd\x0a\xd6\x33\xc4\x7f\x57\x2d\x8d\x5d\x50\xf2\x9a\x60\x4e\x1a\xb2\x5d\xd5\x5d\x15\xce\xfb\xf8\xbd\x5f\x7c\x6b\x59\xd5\x8b\x73\xb4\x37\x15\xaf\xf2\xe3\x11\xf8\xb1\x08\xf9\xd1\x48\xec\xfd\xee\xab\xbc\x43\x30\x99\x21\x45\xcd\xe7\xa9\xea\x7e\x69\x66\xf2\xc0\x81\x03\xc7\x68\x7b\xe2\x9f\x17\xd4\x92\xc1\x66\xd6\x2e\xab\x4b\xa6\xe3\xa7\x50\x61\x72\xd7\xb8\x43\x85\x27\x33\x5c\x69\xe3\xb3\x6c\xc1\x6d\xab\x62\xe1\x92\xff\x1d\x85\x18\xf7\x63\x57\x97\xcb\x86\x9d\x53\x8b\x7a\xa9\x30\xb2\x32\xca\x3d\xd8\xc9\xef\x47\xc9\xb7\xa2\x70\xaf\xf4\xdb\x55\xf1\x5b\xec\xfe\x82\x56\xae\xf4\x0c\xe2\x86\xdf\xc4\xce\x82\x56\x9e\xf0\x6e\xb8\xc2\xaf\x9f\xc8\xce\x3a\xee\xa8\x6d\x3c\x3d\xd6\x34\x34\x56\xd3\xd0\x58\x23\x0d\x65\x4c\x78\x8c\x7f\x9e\xe9\x61\x91\x7e\x9e\x67\x60\x0a\xd2\x2d\x1c\x11\xa5\xf7\x9c\xd3\xed\xd0\xc4\x02\xe4\xb7\xef\x82\x39\x3e\x01\x39\xcd\x12\xa6\x6f\xcd\xae\x0e\x25\x90\x7f\xd3\x0b\x25\x96\xa5\x82\x6b\xbf\x8e\x1e\xa4\x9a\xa6\x65\xac\xa8\x45\xf2\xf4\x5d\xb1\x4f\x6c\x86\xfb\xe4\x3b\xdc\x08\x83\x71\xc7\x50\xe8\x5c\x5d\xab\x21\x4d\x7a\xf7\xcd\xf3\x27\x5d\xe2\x4f\x4a\x38\x37\x4b\x57\x38\x29\x24\x02\x6f\x9a\x10\xcf\x69\xb3\x11\xe1\xad\xf0\x66\x78\x63\xd5\x89\x7e\x16\xce\x04\xab\xf7\xf2\xd0\x3a\xf9\x7a\x03\x3b\x9d\xf9\xed\x08\x5c\xe5\xa6\x9e\x37\xc0\x15\xcf\xd4\x73\x0e\xda\xf7\x8c\x60\x8e\xf5\x26\xbe\x0e\xe7\xe1\x51\xb6\x0e\xdb\xf9\x50\x47\x97\x7c\x47\xb8\xb2\x78\x81\xcc\x09\x65\xd1\x67\x59\x0a\xed\x31\xf8\xe5\x9a\x29\x90\x61\x2e\x97\x21\x83\x48\xa5\x3e\x52\xc9\xa0\xb9\x37\xc0\xdc\x3b\x03\x53\x24\x1d\x3f\xed\x2a\xa4\xbb\x65\x15\x36\x70\x85\x76\xa1\x2e\xe5\xbf\xd8\x0d\xf3\x5c\xb0\x5b\x0b\x6a\x2e\xe9\xec\x70\xb6\x60\x3d\xf1\x5e\x3f\x1b\x91\x65\x14\xb5\x05\xba\xf0\x4b\x05\xd7\x63\xe9\x53\xbb\xc8\x8f\x6c\x86\xfb\x68\xa3\x13\x72\x9b\xf4\xe4\xfb\xa9\x46\x52\x12\x5d\x32\x8a\x5a\x9a\x37\xda\x13\x69\x89\x78\x3a\xeb\x4b\xd5\xef\x23\x9f\xce\xa5\x2e\xf7\x7e\x04\x5a\x0f\x26\x27\xca\x87\x0b\xfc\x09\x72\x4a\x08\xfc\xc0\xe5\x2a\xc4\xbe\x34\x19\x95\xf0\x00\xc3\xcf\x30\xfc\x0c\xc3\xcf\x30\xfc\x0c\xc3\xcf\x30\xfc\x0c\xc3\xcf\x30\xfc\x0c\xc3\xcf\x30\xfc\x0c\xc3\xcf\xba\x1a\x7e\x76\x14\x0e\x93\x83\xf1\x51\xf7\x34\x7c\xbf\x7c\x1a\x96\x14\xf7\x0d\x61\xd8\xc1\xd0\x38\x0c\x8d\xc3\xd0\xb8\x86\x42\xe3\xfe\x70\x2b\xc4\x83\x9c\x2a\xde\x39\xe2\xb8\xa2\x92\xcf\x6d\x8d\xfd\xed\x26\xcf\x91\x62\xd0\x31\x17\x38\x17\xd4\x9a\x0b\x5c\x46\x93\x78\xd8\x3f\xc6\x68\x46\xdc\xda\x23\x11\x46\x6e\xbf\x32\x3f\x11\x59\x45\x3c\x87\xdb\x4c\x9b\x63\x4d\xdc\x76\x9b\x8b\x13\x91\x31\x4c\xb5\x8f\x87\xd7\x55\x84\xf0\x08\xe1\x3b\x03\xe1\xeb\xba\xa7\xb9\x0b\xb0\x0b\xd0\xfd\xf3\xe7\x60\x87\x23\xe7\x9c\x05\x58\x2a\xaf\x18\xc5\xe5\x25\xcd\x26\x3f\x7d\x8e\x3c\xb5\xd3\x13\x6f\x49\x7e\x0c\xb6\x84\x76\xe0\x68\x78\x0e\x27\xcf\xba\xf7\x5f\x61\xf7\x27\x62\xf4\x7a\x2e\xde\xaa\x7f\xeb\x71\x2a\x9d\x46\x34\x8b\x68\x16\xd1\x2c\xa2\xd9\xdb\x06\xcd\xa6\x7b\x06\xcd\xb6\xbd\x27\x2d\xa3\xd9\x34\xa2\x59\x44\xb3\x88\x66\x11\xcd\x22\x9a\xed\x3e\x9a\x4d\x23\xad\xdc\x80\xb4\x32\xdd\xeb\xb4\x32\xbd\x0e\x69\x65\x26\x07\x67\x39\x3c\x9b\x80\x53\x0c\x9e\x1d\x83\x23\x70\x28\x14\x9e\x55\x1f\xca\x1b\xf1\xbf\xbe\x7e\x29\x1c\xb0\x8d\x90\xe1\x9a\xc0\xa9\xaa\x47\x55\xe6\x63\x79\xd8\x9f\xb3\xdd\x49\x36\xb3\x3c\xdd\xf1\x7f\xbe\xd5\x83\x10\x3b\xb8\xe0\x57\xd4\x5a\xde\xf0\x20\xff\xa9\xc3\xc4\x81\x03\x82\x33\x30\x0d\x93\x55\x3c\xf5\x00\xa4\x9a\x1e\x73\x0c\x8e\xc6\xc4\x4d\x2d\x42\xc4\xbf\x89\xc0\x14\xdf\xf6\x27\x60\x9c\x6d\xfb\x43\xd0\xca\x12\x84\x59\x8e\xf5\xd3\x70\xda\xc3\xfa\x2d\x36\x95\xe1\x69\x20\x26\x61\x42\x4a\x03\xd1\x62\x5b\x61\x92\x28\x58\x6a\x98\x86\x5d\x86\x4e\x48\xaa\xc4\xaf\x29\x9e\x24\xda\x2d\xb2\x7e\x48\x29\x54\x8c\xc5\x5a\xa9\xb4\x47\xce\x17\x35\xe9\x5e\xdb\x61\xf9\x84\x00\x13\x01\x26\x02\x4c\x04\x98\x08\x30\x11\x60\x22\xc0\x44\x80\x89\x00\x13\x01\x26\x02\x4c\x04\x98\x08\x30\x11\x60\xf6\x1e\xc0\x0c\x4e\xe7\xd4\xde\x34\x95\xcd\x41\xcc\x7a\x5e\x82\x35\x98\xe0\x7a\xc2\x1f\x47\xdc\x4b\xb6\x73\x99\xee\x61\x02\x68\xbf\x1f\xd7\x7f\x73\xd3\x92\xf8\x65\xc5\x20\x2c\xd7\x0e\xdc\x2d\xff\x16\x8b\x15\x58\x92\xd5\x45\xc3\x5a\x72\xd7\xa2\xca\x33\x5e\x25\xee\x2f\x68\x65\x39\x6d\xc5\x44\x76\xf6\x0c\xfd\xa1\x07\x13\x91\xe8\x70\x81\xaf\x90\x33\x30\xcd\x56\xc8\x29\x38\x01\xe3\xad\x25\x22\x61\xef\x18\x9a\x81\xe4\xb9\x7e\x18\x0b\x0f\x54\x97\x4b\x9a\x8a\x8a\x12\x96\x51\xd4\x6c\xf2\xc7\x71\xf2\x87\x7d\xb0\xc3\x2f\x1e\x9d\x27\x1d\xb9\xd9\x58\x59\xd3\x49\xde\xe8\x25\x83\x6a\x45\x6d\x29\x6a\x3a\x14\x14\x58\xce\x73\x96\x78\xcf\x5b\x1f\x95\x4d\xbb\x1f\x57\xae\x87\x8b\x95\x19\x32\x25\x92\x81\x78\xc3\x59\x9b\xfe\x23\x34\xb2\x1c\xeb\x9b\x22\x04\x44\x08\x88\x10\x10\x21\x20\x06\x98\x63\x80\x39\x42\x40\x84\x80\x08\x01\x11\x02\xf6\x1e\x04\xc4\x20\x6e\xa4\x8a\x18\xc4\xbd\x46\x41\xdc\x9f\x8b\xc3\x7d\x4e\x70\x23\x07\x31\xec\x2b\x6d\x93\x9f\x8a\x93\x0f\xf7\x79\x8e\x3c\xef\x68\x0c\xb8\x30\x06\xd0\x26\xd4\xb2\xeb\xa6\x57\x2e\x86\xb5\x3b\xa7\xdb\xe5\x19\xc3\x9a\x28\x16\xdd\xf0\xcf\xf6\xa5\xfd\xdd\x40\x88\xe5\x4c\x38\x62\xd9\x45\xe2\x35\x55\x22\x58\xdb\x15\x3e\xa7\x08\x50\x10\xa0\x20\x40\x41\x80\x82\x00\x05\x01\x0a\x02\x14\x04\x28\x08\x50\x10\xa0\x20\x40\x41\x80\x82\x00\x05\x01\x0a\x02\x14\x0e\x50\x3e\x7d\x1e\xc6\xb9\xa7\x8b\xf6\x44\x59\x2b\xd9\xec\x44\xef\xb8\xb6\x04\x95\x60\xd0\x18\x4a\xb0\xb5\xb2\x4d\xfe\x6a\x8e\x7c\x68\x27\x10\xef\x66\xd7\xc7\x65\x6f\xfd\x54\x52\x97\x78\x23\xf3\x5a\x39\xb1\x8f\x5e\x39\xed\xb6\x20\x9c\x51\xa4\x52\x07\xee\xa5\x3d\x8e\x4b\x30\x24\x0b\x61\x02\xc2\x04\x84\x09\xb7\x0f\x4c\xc0\x90\x2c\x0c\xc9\x42\x98\x80\x30\x01\x61\x02\xc2\x84\x9e\x80\x09\x18\x92\xb5\x11\xcf\xfe\x18\x92\xd5\x89\x90\xac\x6b\x70\x9e\x1b\xf7\x67\x60\x8a\x19\xf7\x4f\xc2\x71\x18\x0b\xcc\xe2\xe2\x9d\xf1\xdd\xb2\xaa\xde\xc9\xbc\xa1\xc4\x52\x21\x49\xa0\xae\xbf\x31\xdc\xf2\x7f\x98\x1c\x14\x96\x7f\xaf\x3b\x4e\x11\x3e\xb7\x33\xb5\xd1\x16\xf1\x9f\xdf\xea\x0b\x29\xee\x75\x53\x4d\x49\x3c\x62\x90\xff\xb1\xbb\x44\x82\x03\x84\x39\xc8\xc0\xd9\xaa\x9c\x53\x47\xe1\x70\x6b\x73\x82\x89\xa7\x30\xf1\x54\x8b\x89\xa7\x9e\x8e\xf2\x94\x51\xfb\x59\xca\x28\x2a\x1b\xc6\xa0\xe5\x75\xc8\xc3\xf7\x52\x2c\x7c\xcf\xcd\x3e\xb5\x9a\xf6\x2e\xf2\x14\x54\x67\x61\x46\x4a\x41\xb5\x9a\x06\x57\x9b\x87\xaa\x73\x82\x2b\xf1\xfb\x8a\xaf\xe0\x7a\xc4\x37\x33\x95\x24\xc4\x0e\xf1\x0b\x6a\x84\x98\x97\x9e\xaa\x0b\xe2\x0c\x79\x28\xf2\x50\xe4\xa1\xc8\x43\x91\x87\x22\x0f\x45\x1e\x8a\x3c\x14\x79\x28\xf2\x50\xe4\xa1\xc8\x43\x91\x87\x22\x0f\xed\x3d\x1e\x5a\x68\x6f\x26\xaa\x50\xaa\xd0\x39\x6a\xd0\x54\xa6\xaa\xf5\x57\xe6\x98\x7c\xa9\x1f\x0e\x73\xaf\x35\xd5\x34\x6d\x2f\xf8\xaf\x01\x87\xb5\xf7\xf7\x93\x8f\xf7\xc1\x9d\xf4\xbe\xab\x2b\xa9\xd8\x4a\x63\x81\x81\xde\x60\xb7\x29\x3a\xb0\x9f\xdd\x30\x61\x9a\xf6\x15\x5f\xae\x8c\xf9\x97\xfc\xf7\x4c\x23\x31\x7d\xd7\x2f\x84\x6f\xac\x41\xb2\x4f\x6c\x2c\xba\x12\xea\x6e\x29\x8c\x11\x44\x8c\x85\x18\x0b\x31\xd6\x6d\x84\xb1\x30\x46\x10\x63\x04\x11\x63\x21\xc6\x42\x8c\x85\x18\xab\x27\x30\xd6\x3a\x3c\xa4\x62\x14\xe2\x46\x24\x6f\x18\x85\xd8\x89\x28\xc4\x3f\x1b\x84\x51\x27\x8d\x53\x00\xc3\x31\x8d\x7c\x59\x5b\x32\xd9\xc9\x81\xff\xf0\x4e\xf2\x73\x83\xe4\xb3\x9b\xbd\x24\x4f\x0f\xb3\xc5\x55\x79\xac\xcc\x1a\xf9\xcb\xe2\xb6\xc4\x23\xf4\x77\x9e\x90\xc9\x43\x2e\xd2\x05\x6d\x76\x7e\x79\x21\x02\xcf\x47\xc8\x73\x91\xd8\x87\xdd\x89\x78\x6f\x64\x9e\xab\x29\x4c\xd5\x79\x82\xa9\x0c\x0b\xf4\x5f\x6a\xae\x9c\x54\x94\x69\xfa\x5f\xe7\xef\x4b\xaa\xce\x3c\xbe\x6c\x45\xe4\x16\x1f\x16\x6f\x95\x13\xda\xb4\x52\xd4\x6f\x68\xca\x80\xfb\x2a\x03\x74\xd7\x3b\x68\x2a\xa9\x64\x8b\x6a\xa9\x24\xf6\x31\x9b\x21\xb5\x48\x37\x4e\x2a\x99\x3a\x9a\x8c\x6f\x66\x8f\x94\xe7\x20\xfd\x6c\x04\x3e\x18\x21\xcf\x44\x62\x1f\x70\xbb\xfb\xa4\xdb\x5b\x17\x4a\x2c\x38\xfd\xa6\x8f\x50\xa6\x79\x57\xe9\xee\x30\x6d\xa7\x5b\xe2\x83\xb6\x6c\xd3\xef\x94\x5a\xe2\x6a\x05\x5f\x0c\x4d\xf4\xf0\x0e\xfe\x98\x0a\x40\xfb\x26\x38\xc5\x81\xd3\x51\x38\xcc\x80\xd3\x7e\x48\xc2\x50\x78\xd9\x41\x6f\x8a\x43\xf9\xd2\x43\xfe\x7c\xe9\x0e\xd2\x57\xd0\xca\x70\xfd\x7c\x38\x59\x4a\x90\xbd\x35\x95\x04\xa4\x0e\xc8\x60\x29\xf6\x99\x2d\xde\xea\xdd\x69\x69\x66\x51\xcd\x69\x75\x16\x70\x5c\x5c\xd2\xbd\x35\x9c\x86\xd3\x70\xb2\xca\x1f\xb5\xc9\x21\x47\x2f\x54\xf4\x42\x6d\xd1\x0b\xf5\xd9\xc8\xea\x37\xfc\x14\xf7\x3d\x3d\x01\xe3\x9e\xef\x69\xfb\xc5\x46\x7b\xe5\x42\x1d\x29\x64\x2e\x97\x21\xf1\xee\x6d\x9e\xd8\xb8\x4f\x38\x82\xaa\x15\x92\x62\xa7\x5c\x91\xb4\x1b\x82\xe2\x32\x5c\x82\xac\x2c\x28\x12\x69\x38\xdd\x82\x29\x60\x8a\xf5\xfb\x22\xc3\xe9\x36\x8a\x8e\x30\xd1\xf1\x6a\x14\x5e\x89\x92\x6f\x47\x63\xdf\x74\x07\xe8\x93\xd1\xcb\xb2\x86\xa9\x97\x14\x9b\x6b\x89\xca\x82\xb6\x68\xf0\x23\xa1\x73\x6e\xf3\xec\x15\xe2\xa8\xcc\xba\x28\x89\x86\x92\x51\x1a\x2e\x69\x05\x95\x0d\x84\x50\x32\x65\x11\xc2\x09\x8e\x3b\x05\x62\x2d\xea\x4b\x4b\x5a\x9e\x0a\xa9\xe2\x2d\x81\xbd\x65\xa3\x46\x49\x2f\x0e\x09\xdd\x93\x9d\x51\x94\x82\x45\x3f\x7b\xa6\x66\xe9\x46\xde\xd5\xa1\xbd\x2f\x60\xf9\x96\xe9\x61\x83\x65\x9b\x76\x52\x3e\xdd\xa8\xf4\x4e\xe7\x85\xc4\x43\x16\x25\xa5\x43\xa7\x37\xb0\x7e\x2e\x69\x6a\xc9\xb7\x8f\x71\xc2\xba\x90\x65\x3d\xf0\xb3\x66\x7f\x39\x0a\x2f\x47\xc9\x4b\xd1\xd8\x8b\xee\x30\x3f\x1b\x9d\x92\xec\x80\x26\x3d\x4e\x68\x2e\x78\xca\x5a\x86\xa9\x16\xd8\x04\x64\x8d\xa2\x9e\xbb\x35\xc4\xc7\x80\xa3\x16\xe7\x5d\x3c\x43\x22\x57\x7b\x8e\x24\x15\x49\x3d\xcc\x6b\xa6\x56\xca\xd3\xc3\xb4\xcb\x30\x35\xc5\xb0\xcc\x6b\x2a\x3d\x23\xb3\x61\xb5\x96\xb5\x91\x45\xb5\xe8\x30\xff\x38\xff\x35\xae\x2c\xea\x25\xb5\xa8\x3f\xe9\xc0\xc3\x05\x8d\xea\xec\x8c\x49\x8c\x70\x5d\x3d\xef\x9d\x05\x79\xe3\x03\xb6\x77\x13\xa7\xec\x49\x65\x5a\x67\xcb\x59\xea\xb8\x61\xd5\xbe\x19\x43\x4e\xdc\xe0\xc5\x21\x3f\xdb\x6c\x46\xf9\x5a\x32\xbe\x8d\xf7\x67\xca\x79\x11\xbb\x42\xdf\x7c\x5f\x1f\x3c\xdd\x47\x9e\xea\x8b\x7d\xd7\x3d\x1e\x7f\x9d\x1e\x8f\xd9\x43\xe9\x96\xba\x66\xdc\x54\x0a\xaa\xb5\x40\x8f\x91\x92\x9b\xbb\xbb\x2f\x34\x6b\xd1\xb0\x96\xe8\x58\xf8\xf6\xf4\x62\xd5\xc3\x83\x3b\xca\xd6\xb3\xb3\x18\x4d\xfe\x56\x3a\x5d\x28\x39\x3d\xef\xe1\x74\x46\x66\x99\x71\xc3\x1d\x5d\x9b\x95\x57\x62\xbf\x3a\xec\x35\x29\x0d\xa3\x43\xed\x9c\x13\x90\xa7\xc0\x57\x3e\x2c\xa9\xf0\x20\x06\xf6\x3d\x95\x85\xc3\x00\x7f\x87\x01\x65\x58\x4c\x7c\xe5\xc2\xb0\xc7\x95\x81\xb4\x9a\xbb\x41\x3f\x2b\xa5\x3c\xbd\x4a\x2d\x16\x8d\x9b\xec\xa2\xaa\x81\xe3\xa8\x5c\x2c\xfd\xca\x46\x9c\x37\x58\x70\x5b\x1a\x57\x06\x66\x0c\x4b\x93\x9a\x55\x72\xaa\x9d\x53\xf3\xf4\xed\xc5\xf8\x30\x61\xcb\xdb\xb3\xb9\xf4\xaa\x69\x70\xd1\x6d\x23\x19\xdf\x6e\x56\xaf\x1b\xf9\x3b\xff\xd9\x48\x97\x8a\x83\xc1\x25\x1e\x39\x72\x0e\x66\xa5\xc8\x91\xf6\x14\x1c\x6b\xb3\x0a\xa0\xf8\xab\x00\x5b\xc9\x9d\x7c\xd4\x21\xfd\xc5\xbb\x3c\x2d\x20\xc1\x88\x10\xb3\x80\xf2\x93\x79\x9d\x53\x84\x62\x7a\x89\x89\x3b\xac\x1a\x3c\x50\xdd\xd0\x30\x7b\xf6\x20\xab\x06\xf6\xa0\xfc\xe3\x92\x66\x15\x34\xf9\xd7\x3d\xf2\xaf\x76\xd9\x52\xcb\x5a\x41\xcf\x0d\x57\x5f\x97\xbe\x00\x73\x90\xa9\x3a\xa1\x8c\xc1\xd1\x16\xa6\x33\x4b\x1b\x45\x95\x23\x4c\xe5\xf8\xc4\x26\x78\x61\x13\x79\x7e\x53\xec\x39\x57\x6e\xbf\x7b\xd3\xed\x73\x5a\xa9\xb2\x99\xd0\x71\x66\x3e\x00\xcc\xae\x67\x72\x76\xc9\xcd\x03\xca\x5e\x79\x09\xb3\xdf\xf8\xc2\xdd\xc7\x3e\x3f\xdc\x65\x44\x2d\xb2\x3b\xa9\x9e\xc5\xef\x66\x57\x30\x9d\xc7\x56\xf6\x66\x6c\xa3\xc4\x96\xe5\x90\x72\x9e\x2e\x7c\xf1\xef\x79\x67\x3b\x78\x7f\xdc\x17\x7c\x8c\x4a\xbf\x1c\x81\x97\x22\xe4\xc5\x48\xec\xf3\x2e\xd9\xf9\x68\x64\xc6\xb0\x72\x4c\x1d\x2b\x18\x6c\xd8\x0d\x25\xbe\x48\xff\x14\x57\x26\x2a\xde\x22\xa9\xcc\x96\x85\xe6\xc4\x88\x8e\x58\x9a\xc3\x6a\x8e\xbd\x38\x73\xa9\x28\xea\x39\xf1\x65\x64\x00\xc8\xb8\x29\xc6\x94\xbb\x1c\x98\x9a\x61\x16\xb5\xa4\xc2\x9f\xb8\x58\x54\x0b\xee\x5c\x32\xa8\xec\x3b\x00\xee\xe3\xe3\x9b\x59\xb7\xaa\x38\x50\xe0\xe7\x62\xb5\xe7\xc5\x0e\x49\xf3\x47\xfc\xa5\xf9\x16\x72\x07\x7b\x5d\xc8\x1c\x85\xc3\xe4\x60\x7c\xd4\xb5\x6f\xdc\xcf\xf6\x8f\xd8\xcc\x52\xb3\xf1\x3e\xfa\x83\x6c\xb7\x58\x7f\x96\x11\xf2\x9d\x73\xb0\x37\x04\xf7\x6a\xa5\xbc\x69\xe8\xa5\xb2\x4d\x7e\xf5\x1c\xf9\x8e\xe2\x7d\xe9\x06\xea\xa7\x95\x9b\x76\xee\x4b\x3c\x44\x2f\xac\xfe\xca\xb9\x3f\xf7\xb8\x6f\x1d\x46\x4e\xa2\xcb\x19\xba\x9c\xa1\xcb\xd9\xed\xe3\x72\x86\x91\x93\x18\x39\x89\x2e\x67\xe8\x72\x86\x2e\x67\xe8\x72\xd6\x13\x2e\x67\x18\x39\xb9\x11\xfd\xb7\x30\x72\xb2\x13\x91\x93\x6f\x81\x09\xce\x5d\xc6\xe0\x28\xe3\x2e\xa3\xb0\x1f\x92\xa1\xdc\xc5\x3d\x8d\xb7\x25\x7b\xdc\xb9\x70\x64\xb3\x97\xec\x91\xb1\x4c\x4d\x0d\x39\xa7\x3f\x10\xff\xb6\xe4\x99\xb3\x4d\x24\x89\xf3\xd8\xc2\x23\xfc\x2f\x9d\xa7\x0b\x1c\x06\x9c\x86\x93\x70\xbc\x8a\x71\x0f\x41\xa2\xf1\xf1\x45\xaa\x8d\x3e\x38\x2d\xfa\xe0\xbc\x12\x81\x49\x6e\x34\x3b\x0e\x63\x92\xd1\x2c\x09\x4d\xad\xc0\x60\x62\x7b\x82\x4b\x8e\xc3\x70\x90\x49\x8e\x66\xdb\x4d\x73\xff\x9e\x71\x38\xe6\xf9\xf7\x34\xd9\x46\xa3\x59\xde\x1a\x13\x30\xc1\x42\x45\x16\x3d\x89\xff\x20\x31\xcd\x87\x7d\x93\xb9\x79\xe2\x66\x9f\xec\xcd\xe3\x97\xc0\xad\x53\x82\x07\x29\x24\x52\x48\xa4\x90\x48\x21\x91\x42\x22\x85\x44\x0a\x89\x14\x12\x29\x24\x52\x48\xa4\x90\x48\x21\x91\x42\x22\x85\xec\x3d\x0a\xd9\xed\xfc\x6d\x4d\x24\x59\x6b\x2b\x3b\x58\x8f\x2e\x5f\x3f\x70\x27\xcf\xd8\x56\x3f\xc2\xd7\x89\xec\x1d\xa1\x9f\xe2\x45\xc3\xba\xa9\x5a\x79\xf2\x5b\x77\x90\x9f\x8a\x4a\xae\xce\x39\xa3\x54\xa2\x6f\x7b\x66\xfa\xb2\xe7\x6b\x59\x36\x14\xe9\x1e\xba\xc0\xb2\x46\x3e\xb1\x57\x5c\xcb\xc9\xc9\x19\xad\x5c\xe1\xef\x9c\xf5\x6e\x18\xdd\x94\x18\x49\xf0\xac\x66\x47\xe0\x41\xbe\x8a\x5e\x07\xf7\xb2\x55\xf4\x1a\xb8\xeb\x53\x91\x2d\x20\x5e\x26\x74\x55\xec\xf4\x5f\x15\x40\xb6\x88\xce\xc0\xf5\xc7\xc3\x17\xc3\x41\x32\xea\xe3\x5c\x48\x7b\x3c\xc3\x7b\x2c\x42\xa4\x2a\x16\x46\xfc\xa7\xa5\x71\x1a\x74\xc6\x29\x7b\x71\x3e\x74\xa0\xf6\x55\x0c\x54\xd6\xb0\xbb\x31\x52\x9d\x1a\x86\x06\xa6\x20\x93\x86\xd3\xe4\x64\xfc\xb8\xbb\x85\x76\x56\xf9\x5b\xd6\x3e\x62\x2d\x3c\x2f\xdf\x08\x8f\x93\xc7\x62\xf3\xce\x36\x3c\x32\x27\x4e\x79\x74\x06\xd9\x54\x3a\xd3\x78\xc9\x71\x43\x96\x34\xcf\xc7\xb5\x85\x79\x23\x77\x43\x2b\xdb\xf1\xcd\xec\x06\x59\xc0\x93\xbf\xd8\x01\x13\x3c\x85\xe2\x02\x4b\x9d\x18\x52\xf3\x37\x67\x19\xa5\xeb\xc6\x82\xbb\x41\x6d\x26\x22\xc9\xcf\xec\x20\xef\xde\x04\xaf\x61\x4d\xb8\xb5\x29\x76\xb1\xcf\x33\xbf\xc2\x19\x52\x4f\x23\x98\xb4\x8c\x52\xc6\x58\x48\x0c\xd0\xab\xd2\xf4\xc6\x9a\xf2\x3a\xe2\x12\x2e\x86\xdb\x8b\x34\x9b\x35\x55\xb1\x37\x73\x4b\x86\x88\x8e\x85\xae\xec\x47\xc3\x57\x76\x92\x0c\x89\x95\xcd\x1e\x21\x16\xb7\xf3\x80\xda\x8c\x9e\xf5\x03\xd3\x63\x5f\xd9\x52\x3d\x0b\x03\x4e\x3c\x79\xd8\x44\x24\xc4\x85\x5d\x9f\x8b\xf4\x14\xd0\x6d\x58\x69\xd7\x6a\x7a\x32\xd0\xb6\x85\xb6\xad\x16\x6d\x5b\x1f\x89\xc0\x0c\x37\x1f\x9d\x82\x13\x9e\xf9\xa8\x9d\x12\xa1\x0d\xd2\x66\x4d\x84\x8a\xb9\x5c\x86\xf4\xab\x77\x55\x0b\x95\xfd\x35\x71\x66\x61\xd2\x65\x2f\x0b\x70\xe8\xaa\x6c\xc1\xa8\xb3\x8d\x27\xc3\x30\xea\x0c\xa3\xce\xd6\x38\xea\xac\x2b\x9a\x63\x58\xa0\x58\x83\x5f\x81\x1a\x51\x5f\xe7\xb3\x90\x39\x08\xa3\x64\x7f\x3c\xe9\x9e\x63\xee\x95\xcf\x42\xe2\xaa\x0d\x11\x77\xf6\x4b\x31\x38\xc3\xcf\x3c\x5e\x36\xfd\xb0\x83\x8f\x5e\x2a\x58\x54\x2a\x55\x9f\x7c\xfe\x62\x07\xf9\xc0\x26\xdf\xd2\x7c\xf5\x8f\x3f\xb3\xbc\xbd\xc4\x10\xbd\xaa\x4e\x89\x51\x71\x5d\x47\xce\x40\x2a\x57\x7b\xf6\x33\xb5\x87\xae\xe4\x23\x70\x08\x0e\x34\x53\x3b\x51\xf4\x2e\x74\x39\x5f\x09\x5f\xad\x07\x48\x2a\xa8\xc4\x81\xf3\x94\xa6\x4f\x43\xdf\xd9\xe2\x3b\x33\xa1\x47\x22\x67\x72\x46\xc4\x85\x6b\x33\x3f\xe9\x59\x38\x03\xd3\x55\xda\x45\x6b\x13\x84\x8a\x05\x1e\x8e\x5a\x3c\x1c\x7d\xbc\x4e\x52\x8e\x76\x89\x8f\x73\xfc\xf4\x35\x05\x69\xef\xf4\xd5\x6a\x63\xcd\x89\x9c\xa0\x0f\x64\xa0\x0c\x0a\x3b\x2b\xfd\xed\x5d\xbe\x22\xa7\xf1\x03\x93\x23\x7b\xb8\xb6\xd6\x7d\xc9\x83\xa7\xa6\x8d\x27\xdc\xf0\xd4\x84\xa7\xa6\x35\x3e\x35\xad\x7f\x5d\x33\x34\x77\x47\xdd\xf3\x93\x68\x77\x43\x9c\x9f\x3e\x72\x1e\x4e\xf3\xf3\x53\x49\x2b\xdf\x34\x2c\x2a\x04\xd8\xcc\xe9\x46\xc3\xc7\x28\xf2\xfb\x73\xe4\x83\x3b\x81\x78\x2d\xb8\xdf\xca\xdd\xf5\x53\x7b\x38\x1f\xc8\x3d\xf4\xb2\x0b\xee\xed\x41\xdf\x47\xcc\xf0\x81\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\x8f\xbe\xf5\xe8\x5b\xdf\xac\x6f\x7d\x70\x09\x0c\xc8\x70\xbe\x33\x09\x13\x8c\xef\x8c\xc3\x31\x38\x12\xc8\x77\x24\x70\x50\xc5\x77\xe6\x74\xbb\xdc\x68\xaa\x8f\xb7\x86\xa3\x9e\x31\x72\x54\xa0\x9e\x1a\x56\x11\x46\x7c\xe2\xcf\x6f\xf5\xe5\x13\xdb\x45\x1e\x10\xb5\xe4\xb2\x88\xbd\xfc\x4f\x5d\xa4\x11\xad\x59\x08\x83\x87\x1d\x21\x3a\x5a\x08\x5b\xb4\x10\xfe\x63\xa4\x39\xb6\x1b\xbc\x08\x5b\x30\x04\xd6\x69\x6c\x8e\xe7\x2b\x99\x86\x49\x29\x5f\x49\xcb\xad\xb5\x9e\x96\x88\x67\x0d\xe9\xac\xac\x4a\xfc\x9e\xe2\x2b\xab\x1e\xf4\x4d\x29\xe2\x88\xad\x51\xfe\x6b\x8d\xd8\xf2\xcb\x2d\xd2\x19\x01\x86\xf4\x13\xe9\x27\xd2\x4f\xa4\x9f\x48\x3f\x91\x7e\x22\xfd\x44\xfa\x89\xf4\x13\xe9\x27\xd2\x4f\xa4\x9f\x48\x3f\x91\x7e\xf6\x1e\xfd\xec\xe5\xcc\x22\x9d\xe5\x0b\xeb\xd1\x4d\xed\x8f\xfb\x1d\x37\xb5\x9c\x61\x58\x79\xbd\xc4\xa6\xdc\x73\x54\xe3\x4b\x3f\xc8\x53\x8d\x55\x72\xb5\xc9\x87\xfa\xc9\xe7\xfa\xe0\x1e\xb9\x85\xab\x2b\xa9\xd8\x3b\xc4\x07\xbc\x94\xd7\x57\xf4\xfc\xb2\x5a\x94\x17\xac\xea\x2a\xcb\x73\xb4\x91\xa4\x54\xe1\x75\xcc\xd5\xa0\x06\x58\x0b\x03\x1e\x1e\xa8\x38\xef\x19\xa6\xe6\x16\xee\xb5\xcb\x9a\x9a\x4f\x26\xf6\xdc\xe4\xf5\x1a\xbd\x8e\xc8\x39\xa7\xd9\x93\xe6\x74\xbb\xdc\xe3\xfe\x6e\x99\x1b\x90\xe5\x7b\x68\x16\xce\xb0\x3d\x34\x01\xa7\xe0\x44\x0b\x7b\x88\xc9\x8a\x69\xaa\xd4\x86\xee\xa3\x7e\xff\x7d\x74\x37\x01\xd6\x31\x6e\x4c\x78\x43\xf8\x06\x3a\x44\x0e\xf0\x7d\xc2\x46\x1b\x7c\x72\x88\xfb\xac\x34\xc8\x20\xe4\x42\xc8\x85\x90\x0b\x21\xd7\x6d\x03\xb9\x32\x3d\x03\xb9\xda\xde\x93\x96\x21\x57\x06\x21\x17\x42\x2e\x84\x5c\x08\xb9\x10\x72\x75\x1f\x72\xad\xc3\xe3\x6b\x06\xb9\xdc\x06\xe4\x72\x99\x5e\xe7\x72\x99\x75\xc8\xe5\xc8\x77\xcf\xc1\x08\x27\x3d\xaa\x69\xda\x75\x72\xcb\xe6\x55\x6d\x89\x6a\x54\x65\x9b\xbc\x74\x8e\xfc\xa5\x02\x77\xd2\x1b\x1a\xa8\x27\x3e\xc5\x6e\x9c\xd7\xca\xbc\x9e\xf8\x84\x69\xda\x32\x7d\x71\x7f\xee\x71\xfa\x82\xfe\x36\x88\x22\x10\x45\x20\x8a\xb8\x7d\x50\x04\xfa\xdb\xa0\xbf\x0d\xa2\x08\x44\x11\x88\x22\x10\x45\xf4\x04\x8a\x40\x7f\x9b\x8d\x78\xae\x47\x7f\x9b\x1e\xa8\x27\x4e\xcf\xf2\xc9\x95\x54\xd2\x3d\x8d\x37\x54\x4f\xfc\x7c\xb8\xdd\x3f\x41\xf6\x0a\xfb\x3e\x7d\x84\xf0\x95\x71\x9f\x52\x59\x74\x24\x24\x66\x31\xfe\x07\x5b\x3c\xe8\x40\x9c\x48\x42\x89\x2f\x88\x9a\xe2\x9d\x27\x0c\xad\xd5\x14\xaf\x19\x63\x0c\x1c\xc4\xc0\xc1\xd6\x6b\x8a\x37\x55\xf5\xbb\x66\xed\xb5\x50\xf5\xbb\xb6\x8d\x16\xca\x9a\xd7\x36\xb2\xda\xe8\xc0\xf6\x0a\xa1\xc4\x67\x25\xb2\xe9\x5f\x55\xdc\x13\x38\xa2\xaa\x38\x17\x38\x7e\x91\x7f\x9d\x12\x3d\xc8\x22\x91\x45\x22\x8b\x44\x16\x89\x2c\x12\x59\x24\xb2\x48\x64\x91\xc8\x22\x91\x45\x22\x8b\x44\x16\x89\x2c\x12\x59\x64\xef\xb1\xc8\x6e\xc7\xfe\xb5\x19\x4b\x36\x11\x4a\xb8\x0e\x9d\x25\xc9\xaf\xdd\x0f\x0f\xb8\x75\xc5\x8d\x7c\x4d\x99\xae\x8f\xdc\x4f\x7e\x4b\x2a\x8a\xbd\xb3\x6e\x6d\xae\x0b\x46\x5e\x4b\xdc\x47\x2f\xe1\x75\xb0\xe9\xff\xef\x48\x01\xae\x79\x38\xca\xd7\x54\x0a\x46\xd8\x9a\xda\x07\x03\xb0\x3b\x10\x3b\xd1\xde\xd3\x15\x44\xfb\x13\xba\x7e\xea\x97\xc6\xba\x3e\x13\xbe\xbc\xfa\xc9\x4e\x9f\x08\x37\xb7\x00\x37\xeb\x45\xec\x87\xb6\x78\xa3\xba\x2b\xac\xae\x16\x1b\xd8\xfb\xc5\x55\x9d\x1d\xdb\x34\xcb\x3f\x58\x05\xb6\x1b\x1d\x5c\x64\xda\xc8\xb4\x5b\x64\xda\xef\x8f\xac\x62\x4f\x9f\xe0\x38\xfb\x30\x1c\xf4\x70\x76\x57\x44\x82\xb9\xdc\xb0\x48\xf0\x15\x03\xb2\x9c\x48\x7f\xe6\x2e\x4f\x24\x0c\x37\x5c\xf7\x8a\xc9\x86\xd7\x99\x3c\xc6\xb9\x53\x92\x01\x8b\x5b\x6d\x3c\x51\x84\xc5\xad\xb0\xb8\xd5\x1a\x17\xb7\xea\xa4\x1e\x17\x5a\x09\xb8\x4d\x62\x3b\x93\x82\x11\x32\x1c\x1f\x74\xb5\xfe\x6d\x72\xf9\x2a\x7a\x79\x6d\xed\xaa\xb6\xab\xf1\x9f\x39\x07\x09\x1e\xc8\xc1\x2a\x14\xd7\x89\xe4\xb8\x6e\x2c\xd8\xe4\xe9\x73\xe4\xdb\x0a\x6c\x71\x6a\xd3\xc7\x76\xd6\x0f\xe2\xc8\x18\x0b\x89\xef\xa1\x97\x88\x32\xf4\x9e\x89\x33\x63\x2c\x60\xe4\x06\x5a\x4b\xd1\x5a\x8a\xd6\x52\xb4\x96\xa2\xb5\x14\xad\xa5\x68\x2d\x45\x6b\x29\x5a\x4b\xd1\x5a\x8a\xd6\x52\xb4\x96\xa2\xb5\x14\xad\xa5\xcd\x5a\x4b\x1f\x87\xe3\x9c\x88\x1c\x82\x03\x8c\x88\x0c\xc3\x20\xec\x0b\x24\x22\xec\x04\x9f\x5c\x49\x25\x33\xc6\x42\x43\x41\x1b\x61\x95\xa1\xce\x86\x43\x91\xdd\xa4\x5f\x40\x11\xf6\x74\xc1\x45\x32\xc6\x42\x05\x16\x89\xff\xf2\x16\x09\x30\xdc\xed\x06\x6c\x64\x8c\x85\x44\x8c\xff\xbf\x8e\xd2\x84\xd6\x8c\x59\xf2\x78\x22\x41\x46\x63\x56\x8b\xc6\xac\xaf\x44\x82\xcb\xbd\x35\x45\x3c\xe5\xf5\xd8\x82\x95\xab\xe2\xf6\x93\x3c\x5e\xe3\x08\x1c\x92\xe2\x35\x1a\xbf\xbf\xd1\x88\x8c\xb6\x49\x90\xc4\x0b\x32\xa2\xfc\x1e\xdf\x68\x0c\x2a\x4d\x76\xf1\x5f\x84\x34\xf1\x0b\xc4\x68\xbf\x5c\x41\xa8\x88\x50\x11\xa1\x22\x42\x45\x84\x8a\x08\x15\x11\x2a\x22\x54\x44\xa8\x88\x50\x11\xa1\x22\x42\x45\x84\x8a\x08\x15\x7b\x0f\x2a\x76\x3b\x04\xa3\x6d\x08\x60\xa3\x47\x5f\x3c\x33\x0c\x13\xdc\x6d\x4b\x7b\xa2\xac\x95\x6c\x36\x13\xa2\x74\x54\x78\x2a\x5e\x11\xaa\x41\xbe\x3a\x44\x5e\xd9\x0c\xc4\x6b\xc2\xab\x62\xcd\xe4\x41\xe5\xb1\xda\x4b\x60\xb1\x97\xfe\x3a\xed\xde\x55\x53\x7a\xbf\x53\xf9\x2b\x5e\x88\xc0\xf3\x11\xf2\x5c\x24\xf6\x61\x77\x0b\xbd\x37\x32\xcf\xb5\x35\xa6\xf1\x3d\xc1\x34\xa7\x05\xfa\x2f\x35\x57\x4e\x2a\xca\x34\xfd\xaf\xf3\xf7\x25\x55\x67\x2c\xcf\x56\x72\xc5\x65\xbb\xac\x59\xc3\xe2\xe5\x72\x8e\xdf\x62\x51\xbf\xa1\x29\x03\xee\x8b\x0c\x50\x79\xed\x14\x92\x4a\x2a\xd9\xa2\x5a\x2a\x09\x09\xcc\xf6\x96\x5a\xa4\x22\x2f\x95\x4c\x1d\x4d\xc6\x37\xb3\x47\xca\xbb\x27\xfd\x6c\x04\x3e\x18\x21\xcf\x44\x62\x1f\x70\xbb\xfb\xa4\xdb\x5b\x97\xcd\x2c\x38\xfd\xa6\x8f\x50\xa6\x79\x57\xe9\x4c\x9b\xb6\xd3\x2d\xf1\x5d\x67\xde\x97\xf4\x83\xcc\xb4\x2b\xbe\x8d\x9b\xe8\xe1\x1d\xfc\x31\x15\x1b\x3c\x07\x67\xf9\x06\x9f\x80\x53\x6c\x83\x1f\x83\x23\x70\x28\x10\xeb\x79\x2b\xc5\xad\xd6\xde\x78\x46\x96\x90\xf8\x98\xc6\xaa\x41\x89\xbd\xef\x75\xa4\x5e\x10\x16\xaf\xa4\x16\xfb\xb3\x2d\xbe\x6b\xfc\x11\x27\x78\x26\x68\x99\x0f\x8a\x0b\xd6\x60\xa5\x9f\x83\x59\x38\x53\x65\x7e\x68\x75\x62\xd0\x1c\x81\xe6\x88\x16\xcd\x11\x9f\xaa\x63\x8e\x68\x9f\xe0\x38\xcf\xcd\x13\x33\x30\xe5\x99\x27\x5a\x6f\xce\x11\x37\x1d\x93\x27\x21\x51\x3d\x89\x67\xb7\xf9\x8a\x1b\x22\xec\x10\x72\xea\xb9\x04\xff\xdb\x1a\x08\x98\xcb\x70\x09\xb2\xb2\x80\x49\xa4\xe1\x74\x0b\x8a\xdd\x14\x7b\x81\x8b\xcc\x66\x61\xa3\xa4\x09\x93\x34\xaf\x46\xe1\x95\x28\xf9\x76\x34\xf6\x4d\x77\x80\x3e\x19\xbd\x2c\x9f\x3c\xf4\x92\x62\xf3\xd3\x83\xb2\xa0\x2d\x1a\xfc\xdc\xed\x1c\x8e\x3d\xa3\x90\xe0\x11\xac\x8b\x92\x24\x29\x19\xa5\xe1\x92\x56\x50\xd9\x40\x88\xc3\x87\x2c\x71\x38\x26\x73\xa7\x40\x2c\x49\x7d\x69\x49\xcb\x53\x99\x56\xbc\x25\x6c\x0b\xb2\xe5\xa8\xa4\x17\x87\xc4\x99\x84\x9d\x5d\x95\x82\x45\xbf\x9a\xa6\x66\xe9\x46\xde\x3d\x5b\x79\x1f\xd0\xf2\x2d\xd3\x63\x33\xcb\x36\xed\xa4\x7c\xea\x55\xe9\x9d\xce\x0b\x89\x87\x2c\x4a\x2a\x8d\x4e\x6f\x60\xfd\xe4\x31\x27\x3e\x7d\x8c\x13\xd6\x85\x2c\xeb\x81\xdf\x59\xeb\xcb\x51\x78\x39\x4a\x5e\x8a\xc6\x5e\x74\x87\xf9\xd9\xe8\x94\x54\x13\xd4\x64\xc5\x46\x5d\xba\x97\xb5\x0c\x53\x2d\xb0\x09\xc8\x1a\x45\x3d\x77\x6b\x88\x8f\x01\xe7\x59\xce\xbb\x78\x45\x45\xb9\x52\x75\x24\xa9\x48\xca\x67\x5e\x33\xb5\x52\x5e\x2b\x95\x3d\x50\xac\x29\x86\x65\x5e\x53\x4b\xf4\x8d\xe8\xb0\x5a\xcb\xda\xc8\xa2\x5a\x74\x0c\x2b\x71\xfe\x6b\x5c\x59\xd4\x4b\x6a\x51\x7f\xd2\x21\xb4\x0b\x1a\x3d\xcb\x31\xf0\x33\xc2\xcf\x70\x79\x8f\x11\xf0\xc6\x07\x6c\xef\x26\x6e\xca\x48\x2a\xd3\x3a\x5b\xce\x52\xc7\x0d\xab\xf6\xcd\x18\xd7\xe3\x56\x45\x6e\x49\x61\x9b\xcd\x28\x5f\x4b\xc6\xb7\xf1\xfe\x4c\x39\x2f\x62\x57\x68\xb3\xef\xeb\x83\xa7\xfb\xc8\x53\x7d\xb1\xef\xba\xd8\xe4\xeb\x9b\x1e\x17\xa8\x93\x6e\xa9\x6b\xc6\x4d\xa5\xa0\x5a\x0b\x6a\xa1\xc2\xd8\xea\xee\x0b\xcd\x5a\x34\xac\x25\x3a\x16\xbe\x3d\xbd\x58\xf5\xf0\xe0\x8e\xb2\xf5\xec\x2c\x46\x93\xbf\x95\x4e\x17\x4a\x4e\xcf\x7b\x36\x0b\x86\xbf\x79\x4c\x92\x33\xba\xb6\x56\x76\xe0\xb0\x03\xb8\x93\xd2\x30\x3a\x68\xd4\x39\x19\x7b\xc7\x83\xca\x87\x25\x15\x6e\x05\x67\x9f\x5f\x59\x38\x0c\xf0\x77\x18\x50\x86\xc5\xc4\x57\x2e\x0c\x7b\x5c\x19\x48\xab\xb9\x1b\xf4\x9b\x53\xca\xd3\xab\xd4\x62\xd1\xb8\xc9\x2e\xaa\x1a\x38\x6e\x8f\x10\x4b\xbf\xb2\x11\xe7\x0d\x16\xdc\x96\xc6\x95\x81\x19\xc3\xd2\xa4\x66\x95\x9c\x6a\xe7\xd4\x3c\x7d\x7b\x31\x3e\x4c\xd8\xf2\xf6\x6c\x2e\xbd\x6a\x1a\x5c\x74\xdb\x48\xc6\xb7\x9b\xd5\xeb\x46\x56\x0b\x3e\x5b\x47\x2d\x68\x2f\x30\xb8\xc4\x5d\x0f\xa8\x3a\xec\xb9\x1e\xac\xae\x4d\x47\x3f\x50\xfc\xbf\xe2\x5b\xc9\x9d\x7c\x98\x3a\x78\x22\x49\x7f\xe7\x2e\x5f\x15\x61\x6f\x4d\xec\x6e\xd0\xd1\x64\x1f\x0b\x45\xeb\xae\xde\x80\xa1\xbc\x1b\x4f\x1f\xc1\x50\x5e\x0c\xe5\x5d\xe3\x50\xde\x6e\x22\xa8\xce\x9d\x09\xc3\x82\x86\x33\x87\xe1\x20\x19\x8d\xef\x77\x21\xf3\xeb\xe4\x60\x5f\xb7\xe5\xda\x88\xdf\x75\x08\xa7\x3f\xde\x0f\xc7\x39\x9c\xb6\x16\xd4\x5c\xd2\x99\x06\xb9\x44\xfb\xc8\x4a\x8a\x1b\x62\x46\x04\x8a\xb5\x8c\xa2\xb6\x40\x65\x71\xa9\x60\x93\x3f\x8f\x93\x3f\xed\x83\xfb\xe8\xdd\x13\xf2\xcd\x57\x57\x52\xb1\xef\x15\x96\xe4\x52\x5e\x5f\xd1\xf3\xcb\x6a\x51\xb6\x9c\xa8\xae\xd7\xc6\x24\x6f\xf6\x92\x51\xd4\xd2\xbc\xd9\xa4\xa4\xbf\x8f\xb9\x9a\xff\x00\x6b\x6e\xc0\x73\x5a\xab\xf0\x42\x32\x4c\xcd\x3d\x96\xd9\x65\x4d\xcd\x27\x13\x49\x76\xc3\xa5\xea\xae\x5d\x49\xd5\x3e\x71\x4e\xb7\x7b\xbd\x3c\x5d\xe6\x06\x64\xf9\xee\x9b\x85\x33\x6c\xf7\xd1\x5d\x78\xa2\x85\x0f\x2e\xb3\x64\x4d\xaf\x68\xa5\xf0\x5d\xd8\xef\xbf\x57\xee\x26\xc0\x3a\xc6\xfd\xc9\x6f\x84\x6f\xd5\xb3\x64\xc6\x27\x5d\x52\xe0\x9a\x13\xbb\xb8\x76\x9e\x20\x83\x5e\x99\xe8\x95\x89\x5e\x99\xe8\x95\x79\xdb\x78\x65\xb6\xbd\x4a\x7f\xcb\x5e\x99\x6d\xef\x49\xcb\x5e\x99\x19\xf4\xca\x44\xaf\x4c\xf4\xca\x44\xaf\x4c\xf4\xca\xec\xbe\x57\x26\x56\xf3\x47\x37\x4f\xac\xe6\xbf\x46\xd5\xfc\x5f\x4e\xc0\xb9\x70\x60\x53\xd7\xb9\xd0\x32\x8a\x6e\x0a\x68\xf2\xbf\xf7\x91\xf7\x6f\x82\x1d\x7e\xfc\x86\x1b\x3a\xee\xf7\x71\x2f\xa4\x07\xf2\x44\x82\xfe\xe0\x03\x57\xaa\xac\x1b\xf4\xda\x36\x67\x86\x7e\x43\x73\x95\xd1\xd8\x40\x39\x00\x92\x76\x27\x94\x7a\x2c\x84\x03\x8d\x53\xe4\x44\x83\x10\x83\x3d\xb1\x19\xcf\x94\x82\x56\x86\xd8\xef\x6e\xa9\x37\x29\x31\x7f\x7f\x38\x36\x2f\xc3\xe2\xb7\xb5\x98\x9a\xa6\x2b\x26\xd6\xcc\x0d\xda\x81\xd0\x03\xae\x45\x0f\xb8\x9f\xa8\x63\xea\x5e\xa5\xc0\x68\xbe\x94\x62\x4d\x1b\xbd\x21\x5b\x98\xd7\xdb\xc7\xb7\xd5\x93\x2d\xaf\x71\x9d\xdf\x98\x38\x19\xe2\xff\x77\x4d\xa4\x09\x7a\xbe\xa1\xe7\x1b\x7a\xbe\xa1\xe7\x1b\x7a\xbe\xa1\xe7\x5b\x2b\x9e\x6f\x3d\xef\xe0\x16\x7a\x12\x09\xf7\x7c\xeb\x82\x3e\x91\xfe\xab\xbb\xea\x29\x0c\xfd\x21\xae\x70\x4c\x8d\x18\x34\x03\x6c\xf1\x1d\xd5\x22\xd0\x0f\x6e\xe3\x69\x27\xe8\x07\x87\x7e\x70\x6b\xec\x07\xb7\x21\x00\x54\xa8\x1b\x5c\xdd\x9a\x17\xb4\xd1\x0d\xe1\x01\xf7\x85\x41\x18\xe6\x40\x55\x80\x78\xc9\xed\x4d\xfc\x25\x57\x54\x6d\xdb\x43\xa6\x3f\x32\x48\xbe\xb8\x19\xe0\xff\x63\xef\xed\xc3\xe3\xc8\xca\x03\xdf\xa7\x5b\xf2\x8c\xfd\xda\x03\x9e\x33\x0c\xe0\x9e\x0f\x97\x4a\x1a\xcb\x6a\x49\x2d\xb5\xfc\x21\x5b\xf2\x97\x5a\x92\x6d\xc9\xb2\x2d\x24\xe3\x21\x04\x98\x94\xba\x4b\xed\x9a\x69\x75\x35\x55\x2d\x79\x3c\xbb\xdc\x67\x19\x96\x84\xcd\x07\x10\x92\x00\x97\x04\x76\x08\xc9\x5c\x86\x0c\x21\x70\xc9\x92\x00\x9b\x9b\xdd\x1b\xb2\x43\x66\x33\x0f\x24\x59\x20\x3b\x09\x0b\xc9\x64\x13\xb2\x40\xb8\x9b\xdd\xdc\x64\x93\xfb\xcc\x7d\xce\x39\xf5\x71\xaa\xba\xaa\xab\xd5\xea\x6e\xb5\x5b\xef\x3f\x8c\x51\x57\x9d\x3a\x75\x3e\xde\x7a\xdf\xdf\x79\x3f\xac\x1f\x1f\xd9\x60\xe1\xa9\x15\x8c\x74\x99\xff\x3c\x4d\xef\x4d\x1e\xa0\x17\x58\x7f\xb9\x9e\x16\x7f\xc2\xb0\xeb\x36\x0f\xbb\x7e\x0b\x4c\xf3\xbd\x7e\x0a\x26\xd8\x5e\x3f\x0a\x63\x30\x1a\xba\xd7\xed\x45\xc4\x54\x3c\x77\x9a\xb7\x1a\x71\xfd\xc6\x68\x81\x30\x4e\x8e\x05\xb8\xd8\x79\x17\xb5\x25\x11\x3c\x3d\x4b\x3c\xbf\xdb\xb3\x98\xe5\x60\xb6\xec\x59\xcf\xf7\x5b\xd7\xb4\x62\x49\x9f\x87\x19\xc8\xf8\x14\xac\x3a\x66\x00\x15\x2b\x04\xcb\x75\x82\xe5\x8f\xc7\x1a\x23\x03\x2e\x72\x8a\x3c\x05\x67\x5d\x8a\xdc\x6a\x69\xc2\x8a\x19\x36\x51\x9a\x24\xdf\xbd\xdf\x23\x4d\xee\x75\x68\xb2\x47\x80\xdc\xc7\xff\xdc\x0a\xf9\x81\x10\x19\x21\x32\x42\x64\x84\xc8\x08\x91\x11\x22\xef\x4c\x88\x5c\xdb\xe7\xbe\xe6\x4f\xbc\x27\x79\x5b\x24\xa0\xce\xfc\xf1\x5e\x8f\x42\x30\x18\x41\x8b\x3d\x6a\x42\x82\xa1\x88\x26\x6b\x09\x08\x89\x3b\x4f\xfb\x40\x48\x8c\x90\x78\x9b\x21\x71\x8b\xc0\x51\x64\x09\xe4\x26\x4a\xff\xf9\x93\x30\x4e\x8e\xc9\x47\x1c\xde\xfb\x5a\x11\x11\x8b\xb7\xb5\xa0\x3c\xf2\xe7\xee\x86\x9e\x11\xa5\xa4\xb1\xba\xc8\x7a\xce\xe1\xb5\x23\x25\x43\x7f\xfc\xd6\xc8\x3f\xa3\x1d\x7c\x1b\xf9\xe9\xbb\xc9\xcf\xc6\xdd\x12\xfc\x0f\x65\xf5\x62\x91\xaa\xe7\x17\x66\xaf\xb9\x7b\xa2\xac\x4b\xec\x26\xfa\x26\xac\xf4\x7e\x8f\x75\x19\x2f\xbe\x7f\x41\x2d\xd3\xbf\x2e\xd2\x4b\x1e\xd6\xca\x37\x16\x95\xf2\x8d\x31\x6a\x6b\x72\xf7\xd4\x71\xb8\x9f\x4f\xfc\xbd\x70\x0f\x9b\xf8\xbb\x60\xef\x67\x62\xbb\xc1\xea\x6b\xe4\x8c\xf6\x04\xcf\x28\x90\xdd\x56\x2f\xe0\xd1\xa5\xe8\x39\x1d\x21\xc3\x41\x65\xad\x59\xa7\x2d\x23\xd6\x33\x97\x89\xc0\x61\x59\x7c\x7d\xed\xc3\xb2\xb8\x1e\x31\x2c\xa1\xde\x79\x55\xc7\x6b\x7b\x87\x45\x7e\xbf\x30\x2c\x87\x9c\x61\xb9\xba\x5c\x6d\x5c\x64\xef\xb8\xe8\x66\x07\xae\x97\xe4\x87\x84\x81\x39\x6c\x0f\xcc\xcc\xec\xc2\xec\xb5\xd9\x2a\x43\xd3\xe7\x19\x1a\xce\x54\x3a\x6f\x70\xc6\x7e\x41\x18\x9c\x01\x7b\x70\xae\x2e\x5e\x9b\xbb\x7a\x65\xb9\xca\xe8\x3c\xe4\x19\x1d\xab\xe5\x66\x6e\xaa\x26\xbc\x7b\x0d\x43\x3e\x11\xb8\xa9\x2e\xce\x4e\xcd\xd4\xbc\xa9\x2e\xaa\x4a\xae\x99\xeb\x66\x7b\x06\x26\xf3\x41\x61\x60\xfa\x1d\x69\x33\x75\x6d\xfa\x62\x95\x91\xe9\xf5\x8a\x1b\xfa\xd9\xef\xbc\x35\x33\x7f\x1a\x26\xc9\x49\x79\xdc\xd1\x35\xee\x17\x75\x0d\x7f\xeb\x95\xfa\xc6\x31\x38\x42\xd2\xf2\x88\x73\xfb\xab\xe8\xff\xda\xb1\x3d\x36\x07\x91\xd9\x6f\xe2\x6d\x2b\xf0\x23\xe4\x2d\x89\x37\xd9\x6a\x4a\x86\x8e\x25\x8b\xc2\xbc\xa1\x4a\xaf\x5f\x5a\x90\xec\x56\xd6\x4d\xd5\x01\x84\x56\x0c\x96\x35\x4b\x76\x80\x23\x8b\xb4\xca\xa9\x29\xfe\x0c\x51\x73\xf9\x03\x19\x0e\xd8\x9a\x0b\xcf\xb4\xc2\x02\xa0\x0c\x66\x5d\x90\xcf\xca\xe4\x33\xdd\xee\xaa\xd8\xa8\x2d\xa9\xca\x02\x6d\x61\x89\xfe\xd0\xa0\x64\x2a\x03\xec\x06\xbe\xc4\xdc\xc6\x17\x34\xb3\x7c\x5e\x37\xa6\x0a\x05\xe7\x48\xb8\x71\x96\x79\x07\xe5\x51\x59\x88\xde\x33\x03\xa4\xdf\xbf\x67\xdc\x71\xf6\xee\x96\x5a\xb2\xb2\x60\xa2\x14\x4c\x94\x82\x89\x52\x30\x51\x0a\x26\x4a\xc1\x44\x29\x98\x28\x05\x13\xa5\x60\xa2\x14\x4c\x94\x82\x89\x52\x30\x51\x0a\x26\x4a\xc1\x44\x29\x3b\x21\x51\xca\x4f\x74\x41\x2f\xf7\xeb\x57\x4a\x9a\x90\x89\xd8\x97\x23\x85\xfc\x79\x9c\x7c\x2b\x0e\xf7\x7a\x2e\x72\x93\x9f\xe4\xd5\xb2\xf7\x83\xc7\xdf\x27\xd9\x9b\x57\xcb\x53\xe2\x2d\x56\x20\xdb\xd4\xe2\x9c\x6d\x67\x35\xd0\x43\xa1\xa2\xa1\x89\x8a\x86\x26\x6a\x69\x68\xbe\x04\xaf\xe7\xe8\xe3\x0a\x2c\x30\xf4\xc1\x9c\xab\xeb\x40\x1f\xc2\x7b\x2e\x68\x66\x24\xff\x20\xcf\xbf\x16\xd2\xce\xe1\x5c\x70\x5a\x9a\x92\x9e\x73\x8e\xec\x4c\xe6\xd8\x42\x7e\xee\xb5\xe4\x8f\x05\x20\x2a\xb1\x9d\xce\x7f\xb3\x97\xb9\x2b\x5c\x16\xf5\x5c\xf2\x01\x7a\x05\x67\x54\x6e\x48\xe1\xa2\x9e\xe3\x8e\x32\x0d\x4e\x43\xb3\x04\xe3\x7c\x30\x47\x21\xc5\x06\xf3\x30\x1c\x82\xbe\xd0\x03\x5e\xfa\x16\xcc\x83\x43\xcf\x6d\x35\x1a\x60\x36\x9a\x26\xc9\x44\x0a\xf0\xdf\x75\xc8\x12\xed\x44\xe2\x67\x77\xbb\x63\xdb\x6b\x7b\xfd\x57\x1b\x5e\xc9\xba\xa8\x45\x23\x9c\x99\x80\x13\x70\xdc\xe7\x36\x53\xe3\x10\xa3\x8b\x0c\xba\xfb\xd7\xe9\xee\xff\xde\x58\xfd\x1b\xfb\x14\x77\xf1\x3f\x06\x47\x5c\x17\xff\x56\x88\x05\xe6\xd6\x5f\x9b\x58\x08\x12\x05\xa2\xa8\xc8\x7c\x7e\xaf\x2b\x16\x86\x2a\xbc\xf5\xaa\xc9\x87\x07\x4b\xee\x19\x41\x53\xa5\x03\xba\xec\x75\x9e\x3c\x42\x97\x3d\x74\xd9\xdb\x66\x97\xbd\x26\x6a\x74\x8d\x91\xcd\xd1\x41\xdb\xa3\x90\x22\x43\x72\xd2\x39\xe6\x7e\xa5\x78\x4a\xbe\xa8\xe7\x3a\x22\x66\xfb\x9b\x07\x20\x63\xdb\x76\xa5\xe8\x62\xda\x6a\xa9\xa0\xdf\x5a\x53\x8b\x65\xd7\xbe\xc8\x2a\x05\x95\x7c\xe0\x00\x79\x39\x0e\xfb\x68\x1b\x8e\xc5\x77\x88\xdb\x18\xf4\xf7\xca\x6f\xdc\x8c\xd3\x12\xaf\xab\x3d\x55\x2a\x05\x94\xf3\x72\x2e\x5a\xa6\xad\x34\xd8\xe8\xf8\x21\x38\xc3\x97\xe8\x38\x1c\x63\x4b\x74\x04\x86\x61\x30\x74\x89\xd2\x77\x73\x52\x0f\xb0\xfe\x6c\xd5\xf6\xb8\x12\xbd\x90\x07\xc9\x80\xb5\x90\xe9\xe3\x6d\x27\x52\xf6\xf0\xca\x8a\xcf\xcf\xed\xf6\xcd\xc0\x80\x63\x89\x44\x4e\x82\x5d\xf5\xb9\xf5\xf3\x90\x61\x3e\x03\x3e\xf5\x60\x73\x13\x81\x1a\x01\x5a\x28\x75\x5a\x28\x1f\xb1\x02\x92\xd3\xcc\xb7\xdc\x31\x34\x1a\x26\x0a\xb6\x2a\x63\x6c\x51\xd2\x60\x59\x11\x61\xff\x64\xbe\xb5\xd7\x27\x4a\xc6\x2a\xad\x97\x48\x99\xc2\xcb\x35\xb6\x56\xa2\xa0\x39\xd3\x79\xc2\x0b\xcd\x19\x34\x67\xb6\xd9\x9c\x69\xbe\xae\x18\x19\x7c\xd4\xe0\x2f\xc0\xfc\x18\x8c\x92\x94\x3c\xe4\x18\x2b\x77\x7b\x02\x8e\xe8\x4d\x9d\x6b\xe0\x8c\x85\x26\xf4\x57\xd9\xfe\x31\xd5\x68\x03\x67\xac\xba\x81\xb3\xc4\x5b\x5a\x56\x2b\x0c\x9c\x31\x21\x45\xa3\x73\x51\x7b\x19\x38\x63\x35\x2e\xda\x86\xae\xc9\xb1\xc8\x4c\xfe\x3e\x03\x67\x2c\xd2\xc0\x11\x26\xa1\xd2\xc0\x69\xd5\x3c\x6c\xc5\xc0\x19\x43\x03\x07\x0d\x9c\xad\x1a\x38\x5b\x95\x02\x5b\x32\x90\x6a\x15\x25\x11\x07\x32\x0d\x96\x34\x7e\x03\x67\xac\x76\x03\x47\x90\x29\x7e\x03\xa7\x15\x12\x05\x0d\x9c\xce\x13\x5e\x68\xe0\xa0\x81\x73\xdb\x1a\x38\xb5\x0a\xf8\xd6\x1a\x38\x63\x3b\xc6\xc0\x79\x6a\x10\x52\x11\xfe\x60\xa6\x6a\x6c\x68\x59\x37\xed\xee\xf7\x92\xe4\x57\x76\xb9\x9e\x09\x89\xa0\x9c\xbb\xfc\x96\xe4\x7d\x41\x6e\x60\xd6\x8f\x98\x70\xb7\xcd\x13\xee\x5e\x87\x49\xbe\xa9\x8f\xc2\x18\xdb\xd4\x43\x90\x84\xc3\x91\x87\xb0\xd6\xf4\x46\xee\xe8\xb9\xe8\x0d\x7b\x88\xf4\xf9\x0f\x62\xed\xd6\x3d\x87\xb1\x11\x86\xdf\x2f\x08\xee\x75\x0f\x84\x24\xd5\xb5\x16\xec\x83\x21\x8e\x75\xcd\x59\xb3\x67\xe0\x14\x4c\xf8\x54\xa5\x4d\x0c\x31\xaa\x46\x68\xd7\xd5\x69\xd7\x7d\x30\x06\xe7\xb8\x5d\x76\x12\xc6\x5d\xbb\xac\x31\x3b\x7c\x4b\x72\xa3\x46\x8b\xae\x71\xd2\x23\xf9\xff\xbe\xd2\x15\x0f\xfb\xdd\x2c\xb9\x96\x44\x78\x80\xff\xa5\x35\x02\x01\x53\xe4\x62\x8a\x5c\x4c\x91\x8b\x29\x72\x31\x45\x2e\xa6\xc8\xdd\x99\x29\x72\xa3\xeb\xac\xd5\xf6\xe5\x0f\xff\xde\xbb\x3a\x81\xc7\xc1\xfe\x50\x54\x3a\x5c\x4b\x1f\xb8\x3f\xd0\xb5\xbe\xe1\xea\x00\x82\xda\xce\x53\x33\x10\xd4\x22\xa8\xdd\x66\x50\x7b\xfb\x30\x9d\x48\x07\xfb\xa3\x30\x46\x46\xe5\x94\x03\x5b\xef\xf1\x00\x5a\xde\x64\x47\x20\xda\x9f\x9e\x87\xbb\x3c\xf9\x74\xc9\xcb\x73\xe4\x0f\x24\xf7\xd3\x25\xf3\xbc\x35\x86\x95\x6a\xc0\x56\x74\xf5\x55\x89\x8e\x2f\x4f\x4d\xf8\x0a\x7a\x8d\xf5\xd5\xd2\x73\x8d\xfb\x50\x35\x27\x35\x5c\x06\x73\xa6\x61\xce\x34\xcc\x99\x86\x39\xd3\x76\x4c\xce\xb4\x4c\xdb\xe4\x4c\x6b\x78\x4f\xea\xce\x99\x96\xc1\x9c\x69\x98\x33\x0d\x73\xa6\x61\xce\x34\xcc\x99\xd6\xfa\x9c\x69\x19\x4c\x71\xd6\x81\x29\xce\x32\xed\x9e\xe2\x2c\x73\x1b\xa6\x38\x9b\x7f\x98\xa7\x9b\x19\x65\xe9\x66\xe2\x57\x2f\x91\x61\x18\x84\x81\x48\xaa\x42\x0d\xf1\x5a\x92\x76\x3d\xfa\x60\x30\x0b\xb9\x93\xec\x62\x19\xc6\x1f\x3d\x1f\x8d\x5d\x7a\x49\x4f\x50\x21\x00\x6f\x89\x95\xff\x53\x70\x94\xb9\x8b\x0b\x78\x49\xe1\xfc\x60\x3f\xff\xbf\x4d\x20\x08\xdc\xe0\x9f\x84\x93\x30\xee\x83\xd1\xfd\xf0\x50\x4d\x63\x88\xe4\x19\xfd\x60\xea\xf4\x83\xf9\x03\x2b\xbe\x61\x8c\x79\xae\xba\xa7\x5c\x03\x50\xeb\xe2\x0b\xf7\x82\x39\xc1\x65\x42\x1a\x46\x98\x4c\xd8\x44\x93\xa7\xb9\x6b\xce\x71\x38\xea\xba\xe6\xd4\x7e\x7b\xb4\xd4\x28\xe9\x0d\x94\x1a\xc9\xa7\x04\x14\x79\xc0\x3a\x1c\x15\x4e\x9a\xed\xe2\x28\x09\xd1\x91\x66\xda\xf9\xbd\x09\xb2\x04\xe1\x21\xc2\x43\x84\x87\x08\x0f\x11\x1e\x22\x3c\x44\x78\x88\xf0\x10\xe1\x21\xc2\x43\x84\x87\x08\x0f\x11\x1e\x22\x3c\x6c\x3f\x78\x98\x6f\xb0\xd7\x6e\x14\x4c\x6c\x90\xd9\xff\x68\x32\x18\x2f\xdc\x43\xee\xe6\x72\xdc\x45\x00\xd0\x78\x9f\xa8\xf7\xf7\xc1\xa8\xb7\x52\x67\x74\x31\x03\xf2\xed\x5e\xf2\xbc\x50\xc0\xf3\x13\x31\x6b\x99\x0a\x65\x3b\x8b\xb6\x88\xb4\x9d\xa7\x16\xf5\x5c\x43\xea\x76\x0e\xb9\xaa\x10\x53\xf7\xac\x0f\x27\xd5\xa6\x5c\x1d\xaf\xdf\xa3\x56\x0b\x6d\xa7\x92\xaf\xbd\x19\x92\xd1\xbb\xcd\x3d\xb9\xb6\xa5\xc8\x67\xb8\xef\xe0\x4d\x1e\x2c\xde\x98\xba\x0d\x58\xd9\x13\x41\x13\x82\x26\x04\x4d\x3b\x07\x34\x61\x65\x4f\xac\xec\x89\xa0\x09\x41\x13\x82\x26\x04\x4d\x6d\x01\x9a\x76\x44\x99\x0d\xac\x36\xda\x89\x34\x0d\xab\x8d\x36\xa3\xda\xe8\x77\xe2\x70\x4f\x40\xc2\x66\xf2\xd5\x38\x79\xc1\x9f\x81\x39\xb4\xa8\x68\x82\x15\x15\x75\xf2\x72\x62\x2d\xd1\xe0\x5a\xa2\x3f\xd7\x07\x0b\x7c\xac\x8d\x15\x25\x9b\xb2\x2f\x60\xbd\x75\xcb\xbb\x56\xe7\x73\x86\x5e\x50\x57\xb4\x62\x4e\x2b\xe6\x4d\xf2\x3b\xbd\xe4\x5b\xdd\xf0\x2a\xda\xda\x94\xd8\xd8\x23\x1b\xe9\xc4\x4d\x4b\xe9\x28\xe6\xb4\x0d\x2d\xb7\xae\x14\x3c\xdc\xce\x51\xf0\x97\xf4\x82\x9a\xe1\xed\x35\x84\xdb\xa5\x92\x69\x76\xc3\x92\xbf\x4f\x22\x86\x13\x1e\x4a\x07\x0e\x91\x5c\x25\x92\xeb\x0d\x46\x72\xfb\x08\xb0\x8e\x71\x3f\xd6\x5c\x34\x96\x9b\x22\x67\x2d\x14\x17\xba\xe6\x2c\x42\x27\x4c\x8a\x07\x5c\x23\xb5\x43\x6a\x87\xd4\x0e\xa9\x1d\x52\x3b\xa4\x76\x48\xed\x90\xda\x21\xb5\x43\x6a\x87\xd4\xae\xb5\xd4\x0e\x19\x1c\x32\x38\x64\x70\x9d\xca\xe0\xfe\xb1\x0f\x5e\x17\xcd\x85\x78\xa9\xe8\x48\x38\xe4\x78\x6f\xfd\x72\x1f\x79\xf7\x2e\x38\x10\x04\x87\x78\x91\xd1\x5f\xa9\xc5\x9f\x6b\x49\xa7\x5f\xca\x36\x70\xe8\x1a\x0c\xc3\x4a\xbe\x5a\xa7\xb4\xc3\xed\x0f\x94\x42\x83\x20\x1b\x4e\x9a\x6a\xf6\xf1\x5a\x89\x86\x49\x67\xc9\xe9\x4d\xc0\xa4\x80\x2a\x88\x88\x92\x10\x25\x21\x4a\x42\x94\x84\x28\x09\x51\x12\xa2\x24\x44\x49\x88\x92\x10\x25\x21\x4a\x6a\x29\x4a\x4a\xc3\x08\x19\x96\x07\x1d\x94\xb4\x5f\x74\x00\xa3\x6a\x3b\x7a\x80\x21\x7d\x42\xfa\xb4\x73\xe8\xd3\x33\xbd\x30\x50\x73\x68\x20\xf9\x47\x99\x7c\x40\x88\x09\xd4\x6b\xf3\x32\x6a\x54\x54\x60\x2a\x79\x7f\x58\x5c\x1f\x3a\x12\x05\x3b\x12\xd5\x16\xba\x17\x14\xae\xe7\x89\x5e\xad\xc5\x1f\x09\xf1\x0e\xe2\x1d\xc4\x3b\x88\x77\x10\xef\x20\xde\x41\xbc\x83\x78\x07\xf1\x0e\xe2\x1d\xc4\x3b\xe8\x29\x84\xac\x06\x59\x0d\xb2\x9a\x46\xb0\x9a\x1f\xf4\x41\xa6\x26\x56\x63\xa8\x0e\x9f\xa0\xf2\xd8\xd0\xa9\x34\x74\x5c\x83\x9e\xe9\x23\x6f\xdf\xe5\x42\x9c\x2f\xd6\xe4\x08\xe4\xb6\x38\xed\xb4\xd8\x16\x9e\x41\xc9\x40\x24\x14\xd8\x5f\x04\x44\x95\x80\xe8\xe1\x68\x40\x74\x94\x8c\x55\xcb\xed\x14\x38\xd4\xd5\x2a\x52\x72\x8f\x23\xc4\x45\x88\x8b\x10\x17\x21\x2e\x42\x5c\x84\xb8\x08\x71\x11\xe2\x22\xc4\x45\x88\x8b\x10\x17\xb5\x16\x17\x65\xe0\x1c\x39\x23\x9f\x72\x70\x51\x8f\xc7\x1b\x28\x48\xaf\x47\xf7\x20\x44\x4e\x88\x9c\x76\x0e\x72\xfa\xcf\x71\x78\x85\x27\x41\xd4\x08\xf9\x0f\x71\xf2\x3b\x71\xb8\xd3\xca\x0d\x15\x9e\x16\xea\x5e\x27\x2d\x54\xdb\x67\x84\x0a\x8d\xc7\x6a\x4e\xaa\x28\x3b\x23\xd4\x97\x7b\xe1\x98\x77\x70\xab\x52\xbd\x9c\xa2\xae\x51\xc5\xb7\x6c\x92\xf7\xf4\x92\x5f\xe9\x76\xe7\x60\xbd\x36\x3f\xac\x19\xd6\xc0\xb2\x5a\x6e\x90\x37\x96\xcc\x6e\xe0\x73\xec\xa2\x37\xe7\x29\xe8\x93\x15\x8c\xdc\x2e\x47\x23\xb7\x24\x39\x1c\x80\xdc\xe8\x74\x5b\xd0\xcd\x19\x64\xf4\xcd\x42\xd8\x86\xb0\x0d\x61\x1b\xc2\x36\x84\x6d\x08\xdb\x10\xb6\x21\x6c\x43\xd8\x86\xb0\xad\x1d\x61\x1b\x82\x32\x04\x65\x08\xca\x3a\x15\x94\xfd\xea\x10\x4c\x06\x64\x52\x8f\x44\x39\xb6\x53\xd6\xf7\x07\xc9\x97\x77\xf9\x32\xae\xdf\xcf\x96\x9a\xd7\xc8\x74\x0c\xff\xa4\x4c\x7f\x15\xf2\xae\x07\x10\x98\xc6\xc1\xb6\xae\xe4\x48\x32\xf3\x6c\x0c\x9e\x89\x91\xa7\x63\x89\x8f\x39\xf3\xf2\xa3\xb1\x65\xae\xb5\x30\xcd\xe7\x71\xa6\x41\xac\xd0\x7f\x29\xd9\x72\x4a\x92\x66\xe9\x7f\xed\xbf\xaf\x29\x5a\xb1\xac\x68\x45\x53\xca\x16\xd6\xcd\xb2\x6a\x0c\x5b\xaf\x95\xb5\x94\x6b\xa9\xa0\x3d\xa6\x4a\xfd\xce\x8b\xf4\x53\x21\x60\x73\xaa\x94\xb4\x58\x50\x8a\x45\x6b\x5b\xb3\x09\x53\x0a\x74\x1f\xa5\x53\xe9\x13\x29\x79\x17\x7b\xa4\x38\x25\x99\xa7\x62\xf0\xe1\x18\xf9\x50\x2c\xf1\x01\xa7\xbb\x4f\x38\xbd\x75\x18\xc5\x8a\xdd\x6f\xfa\x08\x69\x96\x77\x95\x6e\x96\x92\x69\x77\xcb\xfa\xbe\xad\x9b\xf4\xb3\xa5\x14\xb9\x96\xc1\xd7\xc6\x26\x7a\x78\x07\x7f\x8c\xa7\x9a\xe5\x9b\x21\xc3\xf1\xd3\x24\x9c\x64\xf8\xe9\x08\xa4\x61\x24\x0c\x3f\xa5\xe8\xea\x48\x59\xab\x23\xe5\x22\xa0\x28\xe0\xf4\x40\x30\x21\xba\x83\x74\xe7\xd5\x32\x3c\xba\x14\xcd\xa3\x46\xc8\x70\x35\x06\xe5\x4b\xf5\x34\x06\x89\xe7\x76\xfb\xd6\xf2\x41\x43\x2d\x15\x94\xac\x1a\xba\x9c\x1f\xb2\x2e\x68\xe9\x8a\x9e\x85\x69\x98\x22\xdd\x2b\x7a\xee\x56\x82\xfd\xaf\x14\x4b\x6e\x7e\x02\x32\x1f\x89\xc3\xcf\xc7\xc9\x07\xe3\x89\x9f\x8b\xdb\x2b\xed\xef\x63\xec\x63\x64\x69\x13\x43\x8c\xcd\xd2\x55\x62\xad\x26\x8f\x05\x6b\x6b\xfe\x74\x5d\xad\xa8\x52\x89\x8e\xa6\xc9\x16\xd4\x54\x51\xd2\x8a\x9c\x1d\xe9\x86\xb4\x5e\x74\xf0\x53\x4e\xca\x19\xb7\x96\xd6\x8b\x52\x4e\x33\x54\x2a\x54\x55\x87\x69\xb0\x0f\x04\xd5\xfd\x2c\xa8\x63\x9b\x70\x96\x19\x2d\xad\xae\x1b\xcc\x4c\x28\x19\x7a\x56\x35\x4d\xeb\x1b\x2a\x58\x3b\x29\xe9\x3a\x7b\x22\xdb\x1f\x4c\xab\xa2\x1f\xd0\xa9\x42\x61\x82\xa9\x60\x39\xe3\x96\x64\xac\x17\xa9\x79\x4f\xa5\xb0\xad\x77\x5a\xcd\xa9\x39\xf9\x0e\xde\x35\xb1\x14\xee\xfb\xe3\xf0\x33\x71\xf2\xde\x78\xe2\xa7\x9c\x01\xfa\xeb\x18\xdb\x5d\x97\x95\xa2\x92\x57\x0d\x6e\x7f\x72\x55\xc8\x34\xf5\xac\xc6\x54\x2a\xc7\xd2\x53\x98\xa9\xac\x1b\x12\xd5\xb8\xcb\xb7\x1c\x1d\x73\x4d\x79\x8c\xf6\xbf\x7c\x43\x35\x55\xfb\xbb\x40\xbf\x55\x36\x83\x63\x18\x6a\x45\x95\xd8\x17\x89\x59\x75\xba\x21\xa5\xc7\x4e\xd0\x6b\x0d\x25\xcb\x60\x61\x41\x2f\xe6\xf9\x57\x80\x59\x5e\x54\x49\x56\xb4\x22\xd7\x8b\x98\x65\xe3\x5e\xcb\x00\x8a\x85\x32\xa9\x3d\xce\xb6\xd7\xc4\xc8\x48\x5e\x2f\x28\xc5\x7c\x4a\x37\xf2\x23\xa5\xc7\xf2\x23\xeb\x45\x2d\xab\xe7\xd4\x91\xde\x39\x73\x91\xb6\x92\x92\xf7\x89\xef\x2a\x7e\x8b\x9f\x8e\x35\x44\x02\x5c\xa0\x6d\xa4\xc9\x39\x38\x03\x77\x4e\x73\x43\xa2\x39\xa2\xa4\x36\x59\x51\x21\x0f\xaa\x02\xec\x70\xf1\x54\x5a\x2f\x43\xf2\xdd\xfb\x7d\xa2\x84\x70\xa3\x48\x52\x04\xe9\xd1\xc7\xff\xd6\x52\xe1\x71\x0d\x96\x60\x51\x14\x1e\xc9\x0c\x9c\xab\xe3\xe8\x60\x86\x75\xfd\x2a\xe3\xef\x26\xca\x92\x28\x59\xf2\x52\x1c\xbe\x1d\x27\xdf\x8c\x27\x5e\x74\x06\xe8\xd3\xf1\x6b\xa2\x4a\xaa\x15\x25\x93\xab\x95\xd2\x8a\xba\xaa\x73\x1b\xd2\x36\xf4\xdc\x03\x0e\xcb\xb6\x66\x5d\x14\x64\x45\x51\x2f\x0e\x17\xd5\xbc\xc2\x06\xc2\xd2\x4a\x45\x99\xc2\x91\x8f\x33\x05\xd6\x62\xd4\xd6\xd6\xd4\x1c\x95\x5a\x85\x5b\x16\x27\x17\x4f\x41\x8a\x5a\x61\xc8\x52\x56\x99\x51\x23\xe5\x0d\xfa\x2d\x2c\xa9\x86\xa6\xe7\x1c\xa5\xdb\xfd\x2c\x96\x6f\x95\x5c\xce\xb0\x6e\xd2\x4e\x8a\xe6\x90\x42\xef\xb4\x5f\xc8\x7a\xc8\xaa\xa0\x96\x68\xf4\x06\xd6\xcf\x35\x55\x29\x06\xf6\x51\x26\xac\x0b\x8b\xac\x07\x41\xc5\xc1\xbf\x1a\x87\x17\xe2\xe4\xf9\x78\xe2\x39\x67\x98\x9f\x8a\xcf\x08\xc7\x86\x25\x6a\x7f\xa8\x0e\xa9\x5a\x34\xf4\x92\x92\x67\x13\xb0\xa8\x17\xb4\xec\xad\x21\x3e\x06\x9c\xcd\xd8\xef\xe2\x9e\x3b\x72\xc5\x68\x3c\x25\x09\x0a\x64\x4e\x2d\xa9\xc5\x1c\xb5\xbe\x1d\xe8\xa9\x4a\xba\x51\xba\xa1\x50\xa3\x9a\x0d\xab\xb1\xae\x8e\xac\x2a\x05\xfb\x90\x40\xe6\xbf\xca\xd2\xaa\x56\x54\x0a\xda\x13\x36\x6d\x5c\x51\xa9\x92\xcf\x20\xc6\x08\x57\xee\x73\xae\xf1\xc8\x1b\xef\x37\xdd\x9b\x38\x96\x4f\x49\xb3\x1a\x5b\xce\x42\xc7\x75\xa3\xf2\xcd\x18\xa3\xe2\x27\x64\xfc\x54\x80\x6d\x36\xbd\x7c\x23\x25\xef\xe7\xfd\x99\xb1\x5f\xc4\xf4\x68\xa4\xef\xea\x86\x77\x76\x93\x27\xbb\x13\x2f\x3b\xf6\xf4\xd7\xa9\x3d\xcd\x1e\x4a\xb7\xd4\x0d\xfd\xa6\x94\x57\x8c\x15\x6a\x77\xba\x15\xc1\xdd\x7d\xa1\x1a\xab\xba\xb1\x46\xc7\x22\xb0\xa7\x57\x7d\x0f\x0f\xef\x28\x5b\xcf\xf6\x62\x2c\xf1\xb7\xd2\xe8\x42\xc9\x6a\x39\x97\xbf\x33\x94\xcb\x4e\x43\x9c\xd1\xa5\xb6\xa9\x05\x3a\x6d\x58\x9b\x12\x86\xd1\xc6\x7c\xb6\xc9\xe4\xaa\xf8\xde\x87\xa5\xa4\xa9\x6c\x56\x2d\xf1\x0f\xac\x28\x1c\xfa\xf9\x3b\xf4\x4b\xc3\xd6\xc4\x7b\x17\x86\x39\x29\xf5\x67\x94\xec\x63\xf4\x83\x52\xcc\xd1\xab\x94\x42\x41\xbf\xc9\x2e\xf2\x0d\x1c\x67\xeb\xd6\xd2\xf7\x36\x62\xbf\xc1\x8a\xd3\xd2\xa4\xd4\x7f\x5e\x37\x54\xa1\x59\x29\xab\x98\x59\x25\x47\xdf\xde\x1a\x1f\x26\x6c\x79\x7b\x26\x97\x5e\x15\x0d\xae\x3a\x6d\xa4\xe4\xbb\x4b\xfe\x75\x23\x7e\xf8\xbf\x10\x6b\x70\x21\xfb\x25\xda\xda\x18\xb9\x04\x73\xb0\x9b\x8f\xad\x9a\x6b\x76\x71\x7c\x29\xf8\xcb\xbd\x87\xdc\xc9\x87\xa9\x29\xb6\x45\xe6\x1b\x7b\x7d\x0a\xc1\x61\x06\x93\xd8\xe1\x29\x37\xea\x43\x8d\x8c\xde\x92\xeb\xb1\xd0\x7c\x2d\xe1\x3e\x7f\x43\xc3\xec\xf1\x83\xcc\x59\xe5\x7e\xf1\xc7\x35\xd5\xc8\xab\xe2\xaf\x87\xc4\x5f\xcd\xb2\xa1\x94\xd5\xbc\x96\x1d\xf6\x5f\x97\xb9\x02\x0b\x30\xef\x33\x60\x26\xe0\x44\x1d\x53\xbe\x48\x1b\x45\xed\x23\x4a\xfb\xf8\x54\x17\x3c\xdb\x45\x9e\xe9\x4a\x3c\xed\x88\xf0\x77\x74\xed\x1c\x4b\xc6\x77\xde\x42\xc7\x99\xf9\x0f\xb0\x33\xc1\x12\xe7\x9e\xfc\x68\x41\x3a\x2c\x2e\x61\xf6\x1b\x5f\xb8\x03\xec\x4b\xc4\xdd\x4d\x94\x02\xbb\x93\xaa\x5c\xfc\x6e\x76\x05\x53\x7f\x4c\xe9\xf0\xbc\xa9\x17\xd9\xb2\x1c\x92\x2e\xd3\x85\x6f\xfd\x7b\xd9\xde\x0e\xee\x1f\x07\xc2\x4d\xac\xcc\x0b\x31\x78\x3e\x46\x9e\x8b\x25\xbe\xe4\x60\xa0\x8f\xc7\xce\xeb\x46\x96\x69\x66\x79\x9d\x0d\xbb\x2e\xc9\xab\xf4\x4f\xb2\x34\xe5\x79\x8b\x94\x34\x57\xb6\x94\x28\x86\x7f\xac\xa5\x39\xac\x64\xd9\x8b\x33\x77\x8c\x82\x96\xb5\x3e\x92\x8c\x16\xe9\x37\xad\x31\xe5\xee\x0a\x25\x55\x2f\x15\xd4\x94\xc4\x9f\xb8\x5a\x50\xf2\xce\x5c\x32\x20\x1d\x38\x00\xce\xe3\xe5\x5d\xac\x5b\xdb\x00\x8d\xc2\xe3\xf7\x4a\x3c\x63\x78\x13\x44\xfb\xfc\x71\x38\x4a\xc6\xe4\x51\xe7\x8c\xe4\x5e\xd1\x21\xd9\xb9\xb1\x13\x9c\x90\xc9\xe7\x06\x79\x30\x6f\x2d\x69\xff\x2d\x5e\x2a\x56\x7f\xb4\xb9\xf1\x0f\x92\xe4\xb7\xbb\xaa\xe5\xf9\x7f\x28\x00\x22\x4f\xf3\xf6\x84\x9a\x7f\xc9\x14\xbd\x2c\x2c\xbf\x7e\xe5\xf5\x8d\x35\xa5\xe7\x57\xe1\x12\x5f\xd2\x33\x90\x61\x4b\xfa\x14\x54\xf9\x8a\xa5\xd8\x88\x59\x2f\x98\xaa\xec\xdc\x56\x81\x68\x29\x7a\x65\x5f\x26\x97\x6a\xcc\x85\x1f\xd0\xbd\x8a\xcc\xf8\x89\x8f\xed\xa9\x36\x85\x87\x83\xd9\x69\xc0\x2c\xa6\xad\x2b\xb7\x6b\x22\x37\xab\x8f\x44\xcd\x24\xea\x23\x48\x56\xeb\x24\xab\xbf\x11\x6b\xac\x4c\x59\xe4\x88\x75\x0e\x2e\xb8\x88\x75\xbb\xa4\x54\x69\x7d\x3b\xa4\x54\xf2\x85\xfd\xd5\xa4\xd4\x7d\x0e\x96\x0d\x10\x4c\xa3\xfc\xc7\x6d\x93\x4b\xc8\x6a\x91\xd5\x22\xab\x45\x56\x8b\xac\x16\x59\x2d\xb2\xda\x60\x56\xdb\x72\x85\x22\xf3\xd1\x7d\xd5\x14\x8a\x74\x04\xd6\x0d\x50\x33\x46\x4a\xd5\xca\xc4\x35\x53\xcb\x40\xd6\xdb\x79\xda\x0b\xb2\x5e\x64\xbd\xdb\xcc\x7a\x5b\x0c\xc6\x6a\xfb\x04\xd4\x2e\xe1\x23\x3f\x16\x91\x98\x79\xfe\x2c\x9c\x26\x93\xf2\x49\x07\xed\x3e\x28\x22\xe1\xca\x3e\x54\xb2\xe1\x86\x93\xdb\x97\x65\xe8\xf3\xa6\x61\x0c\xce\xb7\x48\xbe\x26\x93\x3f\x12\xaa\x65\xbc\x3d\x56\x5b\x98\x76\xf3\x72\x2d\xa6\x92\x47\x85\x6c\x89\x81\xcf\x59\xd0\xcc\xf2\x79\xdd\x98\x2a\x14\x9c\xa3\xd1\xc6\xc5\xec\x77\x50\x10\x77\x2d\x51\xd7\x35\x26\x57\xac\x2d\xa1\xa2\x18\x0f\x8e\xe1\xdc\x18\xce\x8d\xe1\xdc\x18\xce\x8d\xe1\xdc\x18\xce\x8d\xe1\xdc\x18\xce\x8d\xe1\xdc\x18\xce\x8d\xe1\xdc\xad\x0d\xe7\xc6\x60\x6b\x0c\xb6\xc6\x60\xeb\xed\x09\xb6\xfe\x8b\x5e\x38\x55\x11\x6c\x1d\x91\x3d\xcf\x2c\x2b\x65\x75\x75\xbd\xc0\xf2\xe7\xfd\x52\x2f\xf9\xed\x6e\x8f\x17\x79\x3a\x71\xb3\x36\x3a\xb3\x6c\xb5\xd3\xb8\x34\x7a\x03\x37\xbd\x4e\xe9\x42\x2e\x3d\xe1\x61\x98\x4d\x6f\x0b\x20\xe6\x5a\x34\x88\x49\x93\x91\x4a\x5f\x55\x61\xfc\x2b\xe1\x26\x52\x18\xa4\x30\x48\x61\x90\xc2\x20\x85\x41\x0a\x83\x14\x06\x29\x0c\x52\x18\xa4\x30\x48\x61\x5a\x4b\x61\x6e\xbf\xc0\x2f\xe4\x3c\xc8\x79\x90\xf3\xd4\xc6\x79\x7e\x4c\x86\x07\x03\x92\xea\x59\xee\x36\x8c\xe4\xbc\xd4\x43\xfe\xac\xcb\x9f\x0f\x80\xab\x7b\x86\xb5\x7f\x6c\x49\xe6\xab\x65\xba\xac\x96\x93\x03\xf4\x4a\x21\x1d\x80\xfb\xd3\xed\xe6\x03\xb3\xc2\x73\x40\x8d\xb2\x1c\x50\xf1\xab\x97\xc8\x09\x38\x0e\x47\x6b\x0b\x0a\x76\xdf\x7a\x41\x33\xa3\x89\xcb\x83\xc1\xc4\xe5\x4e\xb2\x8b\xc3\x96\xe5\x68\xd8\x32\x4a\x52\x35\xe4\x88\x72\xfb\x85\xac\x05\x59\x0b\xb2\x16\x64\x2d\xc8\x5a\x90\xb5\x20\x6b\x41\xd6\x82\xac\x05\x59\x0b\xb2\x16\xf4\x78\x41\x12\x82\x24\x64\x47\x90\x90\xbf\x89\xc3\xfd\x16\x09\x59\xa7\xd3\x55\xb6\x9a\xb1\x33\x45\x11\x16\xff\x0f\xaf\xf0\xfe\x9a\x48\xe4\x59\x08\xf8\xaa\x6e\xac\x39\xc3\xa9\x48\xcc\xd2\x4e\x1e\xc8\xab\xe5\x29\xcf\xe5\x53\x8b\x73\x17\xe8\x4f\x6d\x58\xa3\x53\x83\x2b\x1c\x6f\x5c\x80\x59\x86\x37\xce\xc2\x69\x98\xac\xaf\x14\x27\x7b\xc7\x28\xca\x41\x9e\xbf\x1f\x1e\x76\x46\x5c\x37\xb3\x4a\x41\x2b\xe6\x47\x36\xc6\xaa\xd6\x75\x60\x6d\xe8\xc5\xb2\x52\x28\xe9\x39\xfb\x3e\xd5\xb0\xb3\x75\x31\x27\xa4\x75\x93\xfc\xcd\x7d\xe4\xc5\x2e\xb8\x47\x68\xf8\x11\xab\xe1\xc4\x51\xb6\xff\xf9\x75\xf6\xe2\x77\x45\xce\x45\xa7\xfd\x45\x3d\x37\xe5\xb4\x9f\x3c\xcd\x6a\x41\xb8\xcd\x5d\x1f\xf3\x65\xb7\x0c\xb9\x91\xc7\x8e\x37\x38\x99\x97\x01\x0f\xf3\xb9\x5a\x84\x2b\x6c\xae\x2e\xc2\x79\x98\x09\x47\x51\x6e\xb7\x53\xd6\x28\xa4\x42\xba\xbb\xd5\xc4\x5e\xf9\x68\x32\x35\x43\x32\x36\x88\x72\xfb\x65\xf1\xa8\xb0\x5e\xb9\x28\x6b\xcc\x2a\x7f\xf0\xb5\x3d\xc1\xb3\x3b\x6e\x67\xf2\xda\xec\x04\x9f\xb3\xab\x23\xb4\xc7\x1c\x67\xde\x08\x6f\x80\xeb\xbe\x58\xf4\x06\x4d\x32\xc6\xa5\x63\xce\xaf\x3a\x73\x7e\x7d\x25\x16\x5e\xca\xb9\x69\x32\xe9\x4d\x3c\x31\xd8\xeb\x61\xd9\x4d\x0c\xd6\xb0\xd6\x6d\xc1\xd6\x2a\xc9\x15\x91\x74\x2c\xf3\xc5\x7d\xc1\x82\xed\x5c\x45\xae\x8e\xcd\x4a\xb8\x33\x3c\x35\xf3\xf6\xcb\x37\xcc\xe4\xd1\x79\x12\x13\x33\x79\x60\x26\x8f\x6d\xce\xe4\xb1\x8d\x5a\x71\xcb\x3e\x1e\x91\xc9\x3c\x66\x20\x43\xce\xc9\x67\x1c\x77\x9d\x5e\x31\x99\x47\xc8\x73\x3a\x22\xdb\xf3\xef\xc7\x61\x1f\xb7\x26\x57\x58\x90\x0a\xf9\x62\x9c\xfc\x66\x1c\x76\xb1\xff\x57\xd5\x4c\xdf\x9f\x57\xcb\x19\xf6\x69\x44\xeb\xdc\xb5\xce\x3f\x73\x19\xa6\xf8\x78\x16\xd5\xf2\x4d\xdd\xa0\x62\xd8\xcd\x9a\x1d\x66\x9e\x5b\xd7\xb2\x1c\x71\x9a\x6a\x92\xef\x2e\x90\x8f\xf6\xc0\x5d\x6e\x13\x8f\x6c\xa4\x13\x83\xd5\xbd\x47\xae\xf0\x8b\x79\x96\xb8\x64\x3f\xbd\xf8\x8a\x73\xff\x75\x21\x76\xc7\x73\x61\x9b\xbb\x8f\x64\xd0\xbd\x02\xdd\x2b\xd0\xbd\x02\xdd\x2b\x76\x8c\x7b\x45\xa6\x6d\xdc\x2b\x1a\xde\x93\xba\xdd\x2b\x32\xe8\x5e\x81\xee\x15\xe8\x5e\x81\xee\x15\xe8\x5e\xd1\x7a\xf7\x8a\x0c\x7a\x43\x74\xa0\x37\x44\xa6\xdd\xbd\x21\x32\xb7\xa1\x37\xc4\xfc\x6a\xf8\x31\xcf\xa6\xd2\xe5\x0a\xec\x60\x23\x9d\xf2\x18\xec\x0b\x9a\x59\xae\x35\xe0\xe1\x2d\xd1\x7c\x6d\x92\x9c\xb4\xf8\x5a\x05\xaf\xb0\x28\x9b\xe7\xe9\x9e\x6c\x9f\xf2\xa7\xf6\xf8\x19\xc5\xab\xf9\xd7\x40\x52\x7c\x38\x62\x80\xff\xbd\x95\x40\x82\xf3\x83\x79\xb8\x08\xe7\x7d\x27\x1a\xd5\xe2\x4f\xaa\x8c\x3c\x9e\x66\xe0\xf9\x6f\x9d\xe7\xbf\x2f\xc7\xe0\x32\x2f\xad\x70\x1e\x66\x84\xd2\x0a\xd5\x63\xa1\xaa\xac\xc5\x70\x39\xb3\xa9\x68\xab\x6a\x4f\x58\xe0\xc7\xc7\xb3\x30\xed\x1e\x1f\xd7\xdd\x9a\x2d\xb1\x9a\x2c\x91\xaa\x48\xc4\x92\x6e\x96\x21\xf9\x2d\xc9\x2f\xb1\x64\xab\xb8\x87\x50\x29\x45\x5f\xf5\x49\xaf\x23\xfc\x1a\x51\x7a\x4d\x3b\x97\xb7\x46\x8e\x21\x07\x45\x0e\x8a\x1c\x14\x39\x28\x72\x50\xe4\xa0\xc8\x41\x91\x83\x22\x07\x45\x0e\x8a\x1c\x14\x39\x28\x72\x50\xe4\xa0\xed\xc7\x41\xf3\x0d\xae\x4b\x19\xe5\x48\x98\x0c\x36\xfb\xef\x21\x77\x73\xf9\xeb\x1a\xf7\x4d\x87\xa2\xb7\xa3\x13\xe0\x4f\xca\x70\x30\x20\x9d\x91\x27\x33\xf5\x5f\xf5\x90\xff\xea\xcf\x67\x34\x50\xdd\x23\x4d\x48\x52\x9c\x4c\xfa\x12\x1a\x09\xbf\xdd\x6e\x19\x8d\xb2\x70\x91\x2f\xee\x29\x38\xcb\x16\xf7\x49\x18\x87\x63\xb5\x65\x34\xf2\xe5\xcd\x8e\x5c\xd8\xb5\xe5\x87\x8e\xcc\x09\xed\x4d\x62\x14\x75\x6e\x80\x39\x8d\x10\x36\x21\x6c\x42\xd8\xb4\x73\x60\x13\xe6\x34\xc2\x9c\x46\x08\x9b\x10\x36\x21\x6c\x42\xd8\xd4\x16\xb0\x09\x73\x1a\x21\xbd\xc2\x9c\x46\xdb\x94\xd3\xe8\x9d\x57\x61\xae\x61\x19\x76\xc8\xe7\xae\x90\xff\xdc\x13\x9c\x9c\xe0\x58\x75\x7e\x12\x96\x91\x60\x9c\xb1\x94\xcd\x27\x24\x68\x73\xb0\x82\x3e\x2e\x88\x1d\x10\x3b\x20\x76\xd8\x39\xd8\x01\x7d\x5c\xd0\xc7\x05\xb1\x03\x62\x07\xc4\x0e\x88\x1d\xda\x02\x3b\xa0\x8f\x4b\x27\x52\x02\xf4\x71\x69\x86\x8f\xcb\x06\xfc\x30\x77\x03\xb8\x06\x4b\xcc\x0d\x60\x01\xe6\xe1\x62\x23\xf2\x66\xd5\xe4\x19\xd0\xb2\xdc\x59\x11\xce\x02\xf2\x07\x21\x18\x6e\x48\x4e\x28\x60\x18\xc7\x38\xc9\xaf\xd8\x4e\x92\x81\x49\x63\x31\x68\xb0\x5d\x83\x06\x3f\x15\xef\xb4\xa4\xb1\xf0\x66\x1e\x04\x79\x1d\xae\x09\x41\x90\xb7\x6f\x4e\xda\xa8\x68\xc3\x7f\x15\xc2\x7d\x87\x02\x63\x0e\xc3\xc4\xe4\x34\xbf\xba\x52\x4c\x06\xc5\x20\xb6\x46\x60\x22\xa9\x45\x52\x8b\xa4\x16\x49\x2d\x92\x5a\x24\xb5\x48\x6a\x91\xd4\x22\xa9\x45\x52\x8b\xa4\x16\x49\x2d\x92\x5a\x24\xb5\xed\x47\x6a\x5b\x1d\x8d\xd8\x32\xfe\xb0\x89\xb0\xc7\xdb\x31\x2c\xf1\xe7\x86\xe1\x3c\xf7\xc3\xcb\xea\xba\x91\xd3\x8a\x9e\xca\x82\x3c\xb2\x2d\x34\xa5\x3e\xdd\x81\xf6\x9f\xde\x46\x7e\x6f\x88\x7c\x6b\x17\xbc\x4a\x6c\xc7\x8a\x62\x4c\x27\x5e\xcb\xa4\x86\xd7\xf8\x5e\xa0\x77\x27\x0f\xd1\x5f\xa6\x85\x7b\x78\xf0\xa2\x90\xba\x8e\x5d\xd7\x60\xb8\xf2\x6c\x0c\x9e\x89\x91\xa7\x63\x89\x8f\x39\x5b\xec\x47\x63\xcb\x5c\x9b\x63\x1a\xe1\xe3\x4c\xb3\x5a\xa1\xff\x52\xb2\xe5\x94\x24\xcd\xd2\xff\xda\x7f\x5f\x53\x34\x46\x29\x4d\x29\x5b\x58\x37\xcb\xaa\x31\x6c\xbd\x56\xd6\x2e\x29\x52\xd0\x1e\x53\xa5\x7e\xe7\x25\xfa\xa9\x3c\x2f\x19\x6a\x56\x61\x5c\x79\xb1\xa0\x14\x8b\x96\x84\x66\x7b\x4f\x29\x50\x91\x98\x4e\xa5\x4f\xa4\xe4\x5d\xec\x91\xe2\xee\xca\x3c\x15\x83\x0f\xc7\xc8\x87\x62\x89\x0f\x38\xdd\x7d\xc2\xe9\xad\xc3\x6e\x56\xec\x7e\xd3\x47\x48\xb3\xbc\xab\x74\xaa\x4b\xa6\xdd\x2d\xeb\xbb\xcf\x0a\xa3\xd0\x0f\x36\xd3\xbe\xf8\x36\xdf\x44\x0f\xef\xe0\x8f\xf1\x08\x00\x05\xce\x73\x01\x70\x16\x4e\x33\x01\x30\x0e\xc7\xe0\x48\x28\x72\xf4\xac\x36\x6b\x95\xa4\xd8\x4c\x47\x6e\xfd\x37\x47\x6f\xfd\x09\x72\x82\xef\x73\xde\xa2\x2f\x52\x33\x6d\x47\x6a\x06\x2c\xf9\x6a\x45\xb0\xf2\x6a\x19\x12\x7f\xb9\x3b\x64\x89\xdf\x67\x97\xf7\x0b\x5a\xe5\x03\xd6\x8f\x2d\x5f\xe8\x73\x70\x01\x66\x7d\xc7\x2e\xf5\xcd\x0b\x9e\xb2\xe0\x29\x4b\x9d\xa7\x2c\xbf\x1a\x6b\x98\x70\xb8\xc4\xcf\x4e\x66\x20\xe3\x9e\x9d\x6c\xb3\xa4\xa9\x22\x4c\xaa\x0a\xa1\x88\x72\x7b\xc9\x8f\xee\x0f\x91\x34\xaf\xb0\x8e\x36\x14\x4b\xb8\x1c\xe6\xff\xbf\xe5\xb2\xe5\x1a\x2c\xc1\xa2\x28\x5b\x92\x19\x38\x57\x87\xca\x37\xc3\xba\x7f\x95\x9d\x66\x98\x28\x66\xa2\xc4\xcc\x4b\x71\xf8\x76\x9c\x7c\x33\x9e\x78\xd1\x19\xa0\x4f\xc7\xaf\x89\x36\x89\x56\x94\x4c\x6e\x57\x48\x2b\xea\xaa\xce\x2d\x72\xdb\x6c\x76\x8f\x8b\x2c\x52\xc1\xba\x28\x88\x91\xa2\x5e\x1c\x2e\xaa\x79\x85\x0d\x84\x65\x96\x88\xe2\x86\x03\x34\x67\x0a\xac\xc5\xa8\xad\xad\xa9\x39\x2a\xd0\x0a\xb7\xac\x53\x07\xf1\x4c\xa9\xa8\x15\x86\x2c\x6b\x85\x59\xb5\x52\xde\xa0\x9f\xca\x92\x6a\x68\x7a\xce\xb1\xba\xdc\xaf\x66\xf9\x56\xc9\xa5\x36\xeb\x26\xed\xa4\x68\x0f\x2b\xf4\x4e\xfb\x85\xac\x87\xac\x0a\xca\x8c\x46\x6f\x60\xfd\xe4\x85\xe0\x02\xfa\x28\x13\xd6\x85\x45\xd6\x83\x20\x2b\xec\xab\x71\x60\x75\xb5\x13\xcf\x39\xc3\xfc\x54\xdc\x55\x91\x26\xa4\x12\x53\x7f\x1d\xee\xb7\x68\xe8\x25\x25\xcf\x26\x80\xa7\x2c\x19\xe2\x63\xc0\x49\x97\xfd\x2e\x39\xa7\x01\xae\x4e\x8d\xa7\x24\x41\xed\xcc\xa9\x25\xb5\x98\x53\x8b\x65\x17\x21\xab\x92\x6e\x94\x6e\x28\x45\xfa\x46\x74\x58\x8d\x75\x75\x64\x55\x29\xd8\x47\x2e\x32\xff\x55\x96\x56\xb5\xa2\x52\xd0\x9e\xb0\xd9\xed\x8a\x4a\xad\x3c\x86\x84\x46\xb8\x75\x97\x73\xe9\x01\x6f\xbc\xdf\x74\x6f\xe2\x87\x1c\x29\x69\x56\x63\xcb\x59\xe8\xb8\x6e\x54\xbe\x19\x23\x7e\xfc\xbc\x91\x9f\xb1\xb0\xcd\xa6\x97\x6f\xa4\xe4\xfd\xbc\x3f\x33\xf6\x8b\x98\x1e\x3d\xf6\x5d\xdd\xf0\xce\x6e\xf2\x64\x77\xe2\x65\x07\xa8\x7c\xbd\xeb\x61\x0b\x82\xd2\x2d\x75\x43\xbf\x29\xe5\x15\x63\x45\xc9\x7b\x4e\x6e\x9d\x7d\xa1\x1a\xab\xba\xb1\x46\xc7\x22\xb0\xa7\x57\x7d\x0f\x0f\xef\x28\x5b\xcf\xf6\x62\x2c\xf1\xb7\xd2\xe8\x42\xc9\x6a\x39\xf7\x34\x83\x81\x71\x5e\x28\xd0\x1e\x5d\x93\x55\x6b\x63\xbf\xda\xe8\x3b\x25\x0c\xa3\x0d\x4d\x6d\x9b\xd9\x35\x0c\xbc\x0f\x4b\x49\xfc\x6c\x9e\x7d\x7b\x45\xe1\xd0\xcf\xdf\xa1\x5f\x1a\xb6\x26\xde\xbb\x30\xcc\x49\xa9\x3f\xa3\x64\x1f\xa3\x1f\x9d\x62\x8e\x5e\xa5\x14\x0a\xfa\x4d\x76\x91\x6f\xe0\xf8\x49\x85\xb5\xf4\xbd\x8d\xd8\x6f\xb0\xe2\xb4\x34\x29\xf5\x9f\xd7\x0d\x55\x68\x56\xca\x2a\x66\x56\xc9\xd1\xb7\xb7\xc6\x87\x09\x5b\xde\x9e\xc9\xa5\x57\x45\x83\xab\x4e\x1b\x29\xf9\xee\x92\x7f\xdd\x88\x3a\xc1\x17\x62\xb0\xc4\x3d\x15\x2e\xc1\x9c\xe0\xa9\xd0\x24\x6e\xd0\x58\x3c\x61\x2b\x08\x52\xf0\x17\x7c\x0f\xb9\x93\x0f\x13\x34\x59\x85\xc8\xfc\xcd\xde\x10\x1d\xa1\xaf\xa2\x26\x6f\x90\x59\xd2\xcf\x4a\x33\xb6\x52\x71\xc0\x02\xbb\x9d\xa7\x90\x60\x81\x5d\x2c\xb0\xbb\xcd\x05\x76\x5b\x47\x9f\xa2\xca\xdc\x36\x59\xe2\xcf\x8f\xc1\x28\x49\xc9\x43\x0e\x63\xbe\x5b\xac\xa2\xcb\x6e\xea\x88\x9a\xb9\x7f\x38\x08\x4b\x9c\x4b\x1b\x2b\x4a\x36\x65\xcf\xc3\x66\xe8\xb4\xa1\x17\xd4\x15\x2a\x99\x8b\x79\x87\x51\xff\x53\x92\xfc\x6a\x17\x1c\xa0\x6d\x4e\x89\x4d\x3a\xdf\xcd\x07\x03\x40\xf5\x92\x5e\x50\x33\xbc\xa1\x64\x9a\xfe\xbe\xe4\xbf\xbd\xe2\xab\x29\xdc\xd2\x58\xa3\x7b\xfe\x91\x70\x15\x67\x86\x6f\x01\xaa\xda\xd0\x2d\x70\x0c\x8e\x40\x3a\x74\x0b\xb0\x61\xb5\x97\xbe\xd0\x5d\x7b\x9d\x57\xc7\xa0\x8f\x6a\xd1\xab\xfc\x3c\x99\xb1\x56\x79\xe8\x14\x5a\x6b\x5d\x78\x7c\xe5\x8a\x4f\xbc\x63\x4f\xb5\x09\xeb\x09\xc6\xae\xe2\x9c\x1d\xb5\x2e\xd9\xc6\x69\xcb\x5c\x80\x59\x98\xf6\x29\x25\xf5\x4c\x0f\x6a\x23\x48\x61\xeb\xa4\xb0\x9f\x88\x35\x46\x42\xc0\x1c\x67\xb0\x19\x38\xe7\x32\xd8\x3a\x9b\x8a\xfa\xda\x56\x47\xa4\x2d\x94\x42\xc9\xff\x7b\x7f\x35\x29\xf4\x2a\x07\xc9\x8a\x82\xc7\xaa\x69\xb3\x9d\x72\x07\x19\x2d\x32\x5a\x64\xb4\xc8\x68\x91\xd1\x22\xa3\xad\x87\xd1\x36\xd6\xab\xab\x95\xc4\xd7\x56\x21\x5a\xa7\x23\x44\xe3\xe0\xcc\x7b\xf6\x55\xd3\x22\x92\x11\xd0\x56\xd4\x2d\xc6\x18\x6e\xd8\x26\xd5\x02\x29\x6e\xe7\xa9\x2c\x48\x71\x91\xe2\x6e\x33\xc5\x7d\xa4\x41\x06\x6a\x63\x3e\x09\x35\x48\xfc\xc8\xaf\x46\x24\x2e\x9e\x3f\x01\xc7\xc9\x51\x79\xcc\x61\xb3\xaf\x11\x79\xae\xf0\xf0\x8e\xa0\xba\x4f\x0d\xc1\x18\xa7\xba\x56\x74\x81\x1f\xe5\x5a\x7f\xce\x16\x14\x53\xf0\x2c\xfe\xce\x20\xf9\xe6\x2e\x78\xa5\xf5\xa3\xf3\xb9\x3c\x18\xc0\x6a\x97\xf9\x35\xd3\xb4\x81\x24\x83\xb9\xd6\x5f\xac\x0f\xa3\xf8\x3b\xfa\x14\xb7\xb9\x4f\xf1\x26\xab\xc0\xd8\x6b\xca\x16\x09\xe2\x5c\x6f\x81\x34\x31\xde\xfd\x48\xb4\xc8\x38\x45\x26\x2c\x79\xe0\x5d\xdc\x60\x97\x8e\x11\x7a\x53\x49\xb9\xbf\xb3\xbb\x72\x81\xcb\xc1\x6c\xdb\xb3\xc6\x6d\xfe\xdd\xb2\x65\x4e\x95\xf7\x0b\x3e\xc5\xac\xde\x59\x41\xad\x0c\x69\x76\x9d\x34\xfb\x33\xb1\x06\x0a\x87\xcb\x9c\x68\x9f\x87\x19\x97\x68\x6f\x8b\xac\x61\x54\xbb\x36\x59\x53\x8b\x54\x09\x96\x47\xc9\x0f\xef\xaf\x94\x35\xf7\x3a\x04\xdb\x23\x5e\x2c\x96\xd0\x32\xe9\x82\xbc\x1a\x79\x35\xf2\x6a\xe4\xd5\xc8\xab\x91\x57\xef\x4c\x5e\x1d\xed\x53\xdc\x6c\x5b\x24\xf3\xbd\xbd\x95\xfa\xc1\x60\x04\x9b\xf6\x68\x0d\x07\x19\xdc\x68\x85\xd2\x80\x24\xba\xf3\x94\x11\x24\xd1\x48\xa2\xb7\x99\x44\xb7\x92\x3c\x45\x7a\x14\x37\x5b\xde\xcf\x9f\x84\x71\x72\x4c\x3e\xe2\x90\xe4\xd7\x8a\x0c\x5a\xbc\xb7\x12\x42\x37\x1c\x11\x3f\x39\x0a\xd3\x76\x9d\x6c\x4d\x7d\xbc\xac\x16\x4d\x96\x8d\xc4\x07\x8a\xb3\xeb\x66\x59\x5f\xb3\x35\x22\x71\x5a\x2c\x66\xfc\xf9\x11\xf2\x3b\x77\xc0\xbd\x9e\x46\xdc\x8f\x59\x00\x39\x9e\x66\x2d\xda\x59\x16\x67\x9c\x16\x93\xa3\xf4\xe2\x29\xb1\x1d\xeb\x8b\x16\x76\x07\x72\xe5\x36\xe7\xca\xef\x8b\xc1\x4d\xbe\xbd\x4b\x50\x64\xdb\xfb\x06\xac\x42\x2e\x6c\x7b\xbb\x13\x3f\x4c\x17\x26\x4f\x9d\xea\x7c\xdc\xbd\xcb\xd4\x96\x00\x61\x6b\x63\xab\x1c\xfa\xad\xd1\xb2\xe0\x0a\x59\x08\x03\x41\x41\x5b\xca\x12\x11\xa1\x1d\x4e\x3c\x0b\x61\xdb\x28\x15\xcc\xa7\x43\x77\xd2\x11\xeb\xfa\x6d\xdc\x4c\x4f\xc0\xe3\xb0\xe1\x53\xe6\x5a\x34\xf5\xa8\xf8\x21\xec\xae\x13\x76\xbf\x37\xbe\x7d\x02\xeb\x9f\x73\x36\xbe\x0e\xa6\xcb\xc6\x6f\x07\x71\xc9\x50\x7a\x6d\xe2\x72\x0b\xd2\xb1\xd2\x51\xfc\x0f\xf7\x87\x89\xcb\x1e\x07\xb1\x87\x4a\xc8\x31\x2b\x0f\xf9\xf6\x09\x48\x04\xf0\x08\xe0\x11\xc0\x23\x80\x47\x00\x8f\x00\x7e\x67\x02\xf8\xd6\xeb\x0c\x35\x38\x8e\xff\xe1\xbe\x30\xad\x62\x3c\x02\xcc\x87\xea\x1a\x69\x86\x97\xb6\x47\xd5\x40\x6c\xdf\x79\x2a\x0c\x62\x7b\xc4\xf6\xdb\x8c\xed\xdb\x19\xec\x45\x62\xfe\xd6\x7f\x77\xe6\x67\x61\x9a\x4c\xc9\x67\x1d\xf0\xdf\x27\x82\xff\xb0\x76\x5a\x70\x08\xf0\xa1\x05\x18\x08\xf1\x13\x1f\xd9\xd0\x0b\xeb\x6b\xaa\x52\x2e\x2b\xd9\x1b\x6b\x54\x4d\x21\xdf\xbd\x44\x3e\xd0\x03\xe0\x9e\x58\x27\x52\xbc\x24\x8b\x61\xa5\xe5\xb7\xf5\x6e\x7d\x55\xa2\x43\x24\x5d\x67\x4d\x4c\x39\x4d\x24\x1f\xa0\xd7\x3b\xc7\xd5\xfe\x9f\x1b\xf6\xd9\x1b\x7b\xc0\xdf\xd0\x24\x4f\xca\x7e\x9a\x27\x54\x1f\xad\xa1\x0d\xcf\x1d\x58\x29\x0c\x2b\x85\x61\xa5\x30\xac\x14\x86\x95\xc2\xb0\x52\x18\x56\x0a\xc3\x4a\x61\x58\x29\x0c\x2b\x85\x61\xa5\x30\xac\x14\x86\x95\xc2\xb0\x52\x58\xbb\x56\x0a\x5b\xe5\x35\x3c\x46\x59\x0d\x8f\xf8\xd5\x4b\xe4\x14\x54\xc1\xb2\x82\x6b\x65\xca\x6f\x97\x2f\x68\x66\x39\x12\xbb\x84\xd7\x0f\xa7\x33\x07\x8f\xbe\x25\x9a\xba\x4c\x92\x93\x02\x3a\x09\x09\xaa\xe3\xec\xc5\xdf\x45\x90\x7f\x79\x8f\x87\x4c\x1c\xe0\x9f\x02\x49\xa9\x84\x10\x07\xf9\x4f\xcd\xc7\x10\x9c\x1a\xcc\xc3\x45\x38\xef\xe3\xe3\xc7\xe1\x68\x3d\x13\x81\x6c\x1c\x3d\x9b\xea\xf4\x6c\x7a\x39\x16\x9e\xcf\xf6\x02\x97\x13\xe7\xe0\x0c\x93\x13\x27\xa0\xce\xe5\xc9\xcf\x24\xd3\xec\x4c\xd2\x71\x61\xaa\xbf\xb5\xcb\xfc\x4c\xf2\x3c\xcc\x08\x67\x92\x75\x37\x17\x2d\xa7\x4a\x7a\xed\x72\x6a\x53\xb2\x49\x14\x6a\xc9\xaf\x49\x1e\x39\xf5\x90\x75\xc4\x2c\x9c\xd7\xeb\xab\x95\x32\x6b\xc0\x17\x1e\x3c\xed\x5c\xde\x64\xe9\x85\xcc\x13\x99\x27\x32\x4f\x64\x9e\xc8\x3c\x91\x79\x22\xf3\x44\xe6\x89\xcc\x13\x99\x27\x32\x4f\x64\x9e\xc8\x3c\x91\x79\xb6\x1f\xf3\xcc\x37\xd8\x2d\x3a\x0a\x7a\x26\x83\x61\xc2\x3d\xe4\x6e\x2e\x7f\x5d\xab\xbe\xe9\x60\xa1\xf1\xce\x61\xbf\xd5\x07\x27\x46\x94\x92\x36\xb2\x91\xe6\x8b\x30\xac\x00\x54\x49\xcf\x95\xd5\xb5\x12\xb3\x6c\xec\xb0\xf0\xb7\xf7\x91\x3f\xef\x86\x3b\xb3\xba\xc1\x30\xc7\x67\x62\xd6\x32\x76\x57\x8d\x52\xb4\x45\xa8\xed\x2e\xb6\xa8\xe7\xae\x59\xed\xa4\x84\x58\x8f\x09\x47\xa9\xe9\x67\x8d\xf4\xbb\x16\xbb\xc7\x04\xd3\x4b\xaa\x13\xc2\x63\x96\x55\x25\x37\xe4\xaa\x4c\x4c\x2d\xb4\x3e\xb0\x54\xeb\x72\x75\xc1\x7e\x8f\xfa\x2d\xb4\x9d\x4a\x72\x71\x3a\xad\x1b\xea\x75\x21\xd1\xb7\xd0\xcb\x36\x77\x58\x9b\x7f\x0c\x16\xf9\x76\x98\x83\x0b\x6c\x3b\x4c\xc1\x59\x38\x5d\xc7\x76\x60\xdb\x7e\x96\xea\xa7\x5b\x70\xbf\xbc\xc9\xdd\x2f\x2f\x47\xef\x83\x24\x39\x6c\xed\x03\x59\xb6\xd6\xbe\x30\xea\xde\x65\x8f\x80\x0a\x01\x15\x02\x2a\x04\x54\x3b\x06\x50\xcd\xb7\x0d\xa0\x6a\x78\x4f\xea\x06\x54\xf3\x08\xa8\x10\x50\x21\xa0\x42\x40\x85\x80\xaa\xf5\x80\xaa\x7a\x69\x0d\x41\x71\xef\x84\xd2\x1a\xf3\x48\xe3\x3a\x90\xc6\xcd\xb7\x3b\x8d\x9b\xbf\x0d\x69\x1c\xf9\xe5\x3e\x38\x52\x13\x40\x32\xd5\xac\xa1\x96\x1d\x76\xf4\xbd\x5e\xf2\x47\x02\x3b\xfa\x64\x2d\xec\x68\x99\x35\xd1\x16\xd8\xe8\xbe\x40\x6c\xc4\x3b\x88\xc4\xa8\x92\x18\x5d\x8c\x06\x42\x0f\x91\x5e\x2b\xc1\x26\x1b\x45\x08\x70\x13\x95\xe5\x6a\x45\xa0\x38\x7b\x42\x58\x84\xb0\x08\x61\x11\xc2\x22\x84\x45\x08\x8b\x10\x16\x21\x2c\x42\x58\x84\xb0\x08\x61\x51\x6b\x61\xd1\x11\x48\x93\x11\x79\xd8\x41\x3e\xc4\x93\x03\x9f\xa9\xf7\xc8\x89\x90\x13\x21\x27\xda\x39\x9c\xe8\x27\x65\x38\x68\x97\xa2\x28\x99\x42\x8d\x62\xa5\xac\xae\xae\x17\x4c\xb5\x6c\x92\xbf\xea\x21\xff\xb5\x0b\xf6\xd1\x0b\x9c\x8c\x8c\x03\xd5\xb3\x4f\x2d\x5b\xf7\x2f\xab\xe5\x64\x92\x5e\x3a\x55\x2a\x99\x4e\x91\x24\xe7\xb7\xf3\xba\x31\x55\x28\x38\xa0\xa6\x71\x35\x93\x9a\x84\x68\xb2\xe1\x81\x7c\x9b\xaa\xa5\x42\x87\x52\x28\xa4\xe2\x8c\xc7\x82\x66\x3a\xc1\x72\xd7\xa2\xd1\x4c\x9a\x8c\x38\xa9\xd2\x4a\xa6\x53\x07\xc5\x69\x2e\x20\x0b\x67\x44\xa8\x30\x52\x1a\xa4\x34\x48\x69\x90\xd2\x20\xa5\x41\x4a\x83\x94\x06\x29\x0d\x52\x1a\xa4\x34\x48\x69\x5a\x4b\x69\x10\x87\x20\x0e\x41\x1c\xb2\x3d\x38\xe4\xdf\x8c\xc0\xa2\x85\x43\xd6\xcb\xba\x99\x55\x0a\x5a\x31\x3f\xb2\x31\x46\xad\xe7\xb1\x30\x17\x1a\x86\x00\xf4\x62\x59\x29\x94\xf4\x9c\x7d\x9f\x6a\x38\x3e\x35\xdf\x4e\x91\x0f\xdf\x01\xf7\x08\x2d\x3e\x62\xb5\x98\x48\x06\x14\xe9\xbc\xe8\x34\xb7\xa8\xe7\xa6\x9c\xe6\x92\xe3\xac\x46\xa7\xdb\xc8\x75\xde\x86\xeb\xe6\x12\x72\x23\x96\xea\x6c\xf3\x52\x9d\x06\x3c\xcc\xe1\xd1\x22\x5c\x61\xf0\xe8\x22\x9c\x87\x99\x70\x78\xe4\x2e\x81\x94\xb5\x8e\x52\x21\x53\x1f\xe9\xff\x93\x8f\x86\x4c\x33\x24\x63\x43\x26\xf7\xc1\x16\x6b\x0a\x7b\xac\xcb\x9d\x78\xff\x20\xa2\xe4\x67\xe2\x77\xf7\x04\xef\x8f\xe1\xe0\xea\x9b\x61\x5b\x64\xc2\x2e\xbe\xb9\xed\xbb\xe4\x8d\xf0\x06\xb8\xee\xcb\x3c\xd7\xa0\x49\xc5\x4c\x74\x98\x89\xae\xce\x4c\x74\x5f\x89\x35\x4f\xd4\xbc\x89\x27\xa0\x7b\x3d\x2c\xbb\x09\xe8\x76\x94\x20\x2b\xad\x97\x21\xf9\xfb\xfb\x83\x05\x99\xe4\xd4\xc5\x0c\x93\x5d\x27\xad\xb2\x98\xdb\x2e\xba\xb0\x3a\x26\x56\xc7\xc4\xea\x98\x58\x1d\x13\xab\x63\x62\x75\xcc\x9d\x59\x1d\x33\xb2\x54\x65\xcb\xd4\x8d\xcc\xb3\xfb\x82\xf5\x89\xe3\x11\x15\x31\xc3\xb4\x8c\x13\xbc\x20\xe6\x76\x2a\x19\x58\x17\xb3\xf3\x94\x17\xac\x8b\x89\x75\x31\xb7\xb9\x2e\xe6\x36\x52\xb4\xc8\xb2\x97\xb5\x7d\x2e\x36\xf9\x6d\x08\xf8\xba\xcc\xcf\x40\x86\x9c\x93\xcf\x38\xce\xba\xbd\xa2\x87\x6f\x48\xcb\x9d\xe0\xf2\x4b\x3e\xf3\x10\x5c\x0f\x07\xf7\x55\x23\x60\xa3\xf0\xfd\xd7\xfb\xc8\x27\x77\x05\x7f\x85\x7f\xab\x96\xf0\xd8\x90\x61\x6f\x8b\x78\xd9\x13\x37\xb7\x5b\x1d\xe8\xa0\x60\xda\xc8\xf4\x6b\x2d\x13\x03\xe8\xc5\x89\x5e\x9c\xe8\xc5\x89\x5e\x9c\xe8\xc5\x89\x5e\x9c\xe8\xc5\x89\x5e\x9c\xe8\xc5\x89\x5e\x9c\xe8\xc5\xd9\x52\x2f\xce\x9d\x6a\x89\xa3\xb7\x29\x7a\x9b\xa2\xb7\x69\x6d\xde\xa6\xdf\x95\x61\x90\x43\x2b\x6f\xcd\x01\x27\x0c\x97\x73\xab\xac\xa9\x15\xf5\x9c\x6a\x92\x2f\xca\xe4\xf3\xdd\xf0\x4a\xb7\x84\x21\x8f\xc5\x35\xad\xcf\x5e\x31\xa7\x6d\x68\xb9\x75\xa5\xe0\xe1\x51\x8e\x8a\x39\xbd\x3c\x77\x45\xcf\x35\x26\xbd\x7f\x2a\xf9\x20\xbb\xc1\x29\x8a\xc8\x7a\x62\x3d\x61\x41\x33\x31\xd9\x5a\x00\x1f\xea\x0d\xe6\x43\xfb\x08\xb0\x8e\xf1\x5a\xbd\x6f\x8c\x66\x44\xe3\xe4\x58\xb5\x52\x15\xd6\x2c\x54\x06\xff\x22\x16\x42\x2c\x84\x58\x08\xb1\x10\x62\x21\xc4\x42\x88\x85\x10\x0b\x21\x16\x42\x2c\x84\x58\xa8\xb5\x58\x08\x71\x0b\xe2\x16\xc4\x2d\xdb\x83\x5b\x7e\xb3\x17\x86\x6b\xcc\x89\x6f\x6c\x68\x59\xd5\x24\x3f\xd6\x4b\x3e\x26\x64\xc3\xaf\x11\xb4\x2c\xf3\xdb\x1b\x04\x5a\x82\x2b\x21\x5a\xcf\x40\xd4\x12\x8c\x5a\xe6\xa2\x29\xca\x21\xd2\xe7\x2f\x74\x68\x0d\xaa\x27\xc5\x7d\x4d\xd4\x06\xc9\x0a\x92\x15\x24\x2b\x48\x56\x90\xac\x20\x59\x41\xb2\x82\x64\x05\xc9\x0a\x92\x15\x24\x2b\xad\x25\x2b\xe8\x2a\x83\xec\x06\xd9\x4d\xa7\xb2\x9b\xbf\xef\x85\x13\x76\x9e\x7a\xcd\x50\xf3\x1a\x8b\xfe\xa5\x57\x3b\x2e\x33\x16\xd3\xa1\x17\x59\xfc\xc6\x8e\xe0\xfa\x42\x2f\xf9\x17\xbb\x80\xf8\xee\x7c\x64\x23\x9d\xf8\x74\x2d\x01\x5c\x53\x8b\x73\x8d\x44\x3a\x5b\x8d\xd9\xe2\xb2\x60\xca\xfb\x32\xd7\xd3\x6e\x2f\x11\x08\xd5\x11\x9b\xf5\x23\xd1\xc4\xe8\x34\x99\x74\xd2\xed\x07\xad\x41\x0f\x37\xe2\x44\xc9\x9d\x14\x64\x44\xc8\x88\x90\x11\x21\x23\x42\x46\x84\x8c\x08\x19\x11\x32\x22\x64\x44\xc8\x88\x90\x11\xb5\x98\x11\x8d\xc3\x31\x72\x44\x4e\x3b\x8c\xe8\xd5\x62\x50\x96\xab\xab\x57\xc6\x61\x21\xfa\x41\xf4\x83\xe8\x67\x7b\xd0\xcf\x1f\xc8\xdc\x6d\xc7\x97\xda\x27\x1d\x9a\xb8\x87\x3c\x25\x93\x8f\x74\xc3\x2b\x3c\x19\x7b\xd2\x89\x63\xd5\x4b\x16\x86\x66\xcc\x63\xe5\x0b\x85\x0c\x39\xe9\x90\x2b\x6f\xb7\x62\x86\x6f\x85\xeb\x1c\xc3\x5c\x85\xcb\x0c\xc3\x5c\x80\x59\x98\xae\x2d\x61\x56\x3a\x2c\x57\xd6\x82\x66\x46\xc3\x98\x88\x22\x84\x8f\xae\x44\xb3\x98\xb3\xe4\xf4\x16\xb2\x2b\x62\x2c\x14\xd2\x18\xa4\x31\x48\x63\x90\xc6\x20\x8d\x41\x1a\x83\x34\x06\x69\x0c\xd2\x18\xa4\x31\x18\x0b\x85\x50\x05\xa1\xca\xce\x80\x2a\xdf\xef\x81\x03\xb6\x3f\x4d\xc9\x1c\xd9\x48\x8f\xe4\xd4\x52\x41\xbf\x45\x3f\x6f\x26\xf9\x4a\x0f\x79\xa1\x0b\xee\xa4\x3f\x3d\xb2\x91\x4e\x1c\xae\x4e\x4e\x66\x9c\x3b\x93\x7d\x0c\x96\x94\x4a\xe6\xf5\xb4\xfb\xd7\xdb\x0d\x8c\xbc\x19\x32\x1c\x8c\x4c\xc2\x49\x06\x46\x8e\x40\x1a\x46\xc2\xc1\x48\xa9\x64\xf2\x7a\x47\xf6\x0b\x37\x04\x82\x5c\x89\x86\x20\x83\x64\x80\x13\x0f\xf7\xd1\x1e\xc8\xe1\x78\xab\x94\x4c\x04\x1e\x08\x3c\x10\x78\x20\xf0\x40\xe0\x81\xc0\x03\x81\x07\x02\x0f\x04\x1e\x08\x3c\x10\x78\x20\xf0\x40\xe0\x81\xc0\x63\x47\x00\x8f\x3f\x1a\x84\xe3\x5e\xe0\x11\x92\xfc\x25\xa7\xa8\x6b\x54\xdf\x29\x3b\xe1\x43\xff\xfb\x20\xf9\xf5\x5d\x2e\x0d\xb9\x9f\x2d\x30\xaf\xe1\x37\xc3\x6e\x5a\x56\xcb\xc9\x07\xe8\xaf\x9c\x80\xb8\xd9\x5a\x9c\x9f\x1b\x5c\xaa\xf9\xd9\x18\x3c\x13\x23\x4f\xc7\x12\x1f\x73\x26\xe2\x47\x63\x42\xe1\x59\xf5\x71\xf6\x41\x5f\xa1\xff\x52\xb2\xe5\x94\x24\xcd\xd2\xff\xda\x7f\x5f\x53\x34\x56\x0b\xcf\x94\xb2\x85\x75\xb3\xac\x1a\x6e\x59\x53\xab\x6a\x5b\x41\x7b\x4c\x95\xfa\x9d\x17\xe9\xa7\xbb\xde\x0e\x80\x4a\x49\x8b\x05\xa5\x58\xb4\xf6\x31\x9b\x21\xa5\xc0\xcb\xdf\xa6\x4f\xa4\xe4\x5d\xec\x91\x9e\x3a\xb1\x4f\xc5\xe0\xc3\x31\xf2\xa1\x58\xe2\x03\x4e\x77\x9f\x70\x7a\xeb\x20\x83\x15\xbb\xdf\xf4\x11\xd2\x2c\xef\x2a\xdd\x1d\x25\xd3\xee\x96\xf5\xb9\x61\xb5\xe7\xe8\x77\xc2\x2d\x11\x7c\x6b\x13\x3d\xbc\x83\x3f\xc6\x53\x45\xee\x0d\x70\x9a\xb3\x9f\xe3\x70\x94\xb1\x9f\x14\x0c\x41\x32\x9a\xfd\xd8\x13\x1c\x89\x7d\xc2\xeb\x87\xe7\xd5\x32\x3c\x7a\x39\x9a\xfa\x24\xc9\x61\x11\xec\x58\x04\xc8\xe9\x80\x08\x80\x12\x9f\xd8\xed\xae\xdb\x83\x86\x5a\x2a\x28\x59\x7f\xa5\x50\x77\xe9\x4a\xd6\x05\xad\x5a\xbd\xe7\xe0\x0c\x9c\xf2\x55\xe9\xdc\xd4\x60\x63\x5d\xce\xa8\xba\x9c\xef\x8f\xc3\xcf\xc4\xc9\x7b\xe3\x89\x9f\x72\x06\xe8\xaf\x63\x3b\xa7\x2e\x67\x68\xf9\xcb\xf9\x5f\x88\x6d\x75\xa3\x33\x46\x9c\x66\x8c\xf8\xce\x69\xae\xb9\xb7\x50\x58\x94\xd6\x1b\x2e\x2c\x92\x2f\xbf\xd2\x15\x16\xc4\x2a\x30\xad\x08\xf2\xe1\x20\xff\x5b\xab\xc4\xc3\x35\x58\x82\x45\x51\x3c\x24\x33\x70\xae\x8e\x28\xd1\x19\xd6\xeb\xab\x0c\x6e\x9b\x28\x32\xa2\x44\xc6\x4b\x71\xf8\x76\x9c\x7c\x33\x9e\x78\xd1\x19\xa0\x4f\xc7\xaf\x89\x1a\xa5\x56\x94\x4c\xae\x15\x4a\x2b\xea\xaa\xce\x0d\x34\xdb\x8a\x72\x4f\x0f\x2c\xc3\x95\x75\x51\x10\x09\x45\xbd\x38\x5c\x54\xf3\x0a\x1b\x08\x4b\xa9\x14\x45\x07\xe7\x29\xce\x14\x04\xd4\xf8\xe7\x10\x5a\x3c\x62\x28\x6a\x85\x21\x4b\xd7\xe4\xd5\xd8\xf3\x06\xfd\xd0\x95\x54\x43\xd3\x73\x8e\xce\xec\x7e\xf3\xca\xb7\x4a\xae\x11\xbf\x6e\xd2\x4e\x8a\xd6\x8c\x42\xef\xb4\x5f\xc8\x7a\xc8\xaa\xa0\x64\x68\xf4\x06\xd6\x4f\x5e\x03\x37\xa0\x8f\x32\x61\x5d\x58\x64\x3d\x08\xd0\xa1\x33\x5f\x8d\xc3\x0b\x71\xf2\x7c\x3c\xf1\x9c\x33\xcc\x4f\xc5\x67\x84\xe8\xf2\x12\x35\x1f\x54\x07\x03\x2d\xfa\xab\xae\x0f\x89\x45\xf2\xed\x77\x71\xc3\xd3\xb9\x9a\x33\x9e\x92\x04\x75\xd0\x29\xec\xee\x12\x45\xd5\x2a\x47\x4f\xdf\x88\x0e\xab\xb1\xae\x8e\xac\x2a\x05\x9b\xc0\xcb\xfc\x57\x59\xa8\x94\x6f\x3f\x4a\xc9\xe5\x18\x21\x18\xe1\xba\x79\xce\xb5\xfd\x78\xe3\xfd\xa6\x24\x14\xd0\xa7\xf6\x4a\x48\x75\xff\x8a\x37\x0b\x2f\xef\x2f\xef\xe7\xfd\x99\x71\x2a\xd4\x7b\xf4\xcb\x77\x75\xc3\x3b\xbb\xc9\x93\xdd\x89\x97\x1d\x73\xf8\xeb\xd4\x1c\x66\x0f\xa5\x5b\xea\x86\x7e\xd3\x5f\x4e\x9f\x2e\x68\x67\x5f\xa8\xc6\xaa\x6e\xac\xd1\xb1\x08\xec\xe9\x55\xdf\xc3\xc3\x3b\xca\xd6\xb3\xbd\x18\xad\x3a\xfb\x1a\x5d\x28\x59\x2d\xe7\xc2\x6d\xc6\x49\x79\x8d\x64\x7b\x74\xa9\x69\x69\x51\x44\x9b\x84\xa6\x84\x61\xb4\x19\x9a\x6d\xf1\xb8\x0a\xbb\xf7\x61\x29\x89\xd7\xca\x67\xdf\x51\x51\x38\xf4\xf3\x77\xe8\x97\x86\xad\x89\xf7\x2e\x0c\x73\x52\xea\xcf\x28\xd9\xc7\x78\xb1\x7f\x7a\x95\x52\x28\xe8\x37\xd9\x45\xbe\x81\xe3\xe0\xda\x5a\xfa\xde\x46\xec\x37\x58\x71\x5a\x9a\x94\xfa\xcf\xeb\x86\x2a\x34\x2b\x65\x15\x33\xab\xe4\xe8\xdb\x5b\xe3\xc3\x84\x2d\x6f\xcf\xe4\xd2\xab\xa2\xc1\x55\xa7\x8d\x94\x7c\x77\xc9\xbf\x6e\xc4\xef\xfb\x17\x62\xb0\xc0\xbf\xef\xb3\x30\xcd\xbe\xef\xa7\x61\x12\x4e\xd6\xf1\xf9\x58\x2e\x2b\xe5\x75\x13\x96\x68\x6b\x63\xe4\x12\xcc\xc1\x6e\x3e\xb6\x6a\x6e\xab\x6d\x46\x7d\xfe\xa5\xe0\xcf\xff\x1e\x72\x27\x1f\xa6\x46\x6b\x00\x99\xdf\xd9\x2b\x1c\xfa\x33\x02\xc4\xce\x23\xb9\x25\x1e\x6a\x37\x3c\x58\xe2\x09\x29\x9a\xae\x16\xdc\xe7\x6f\x48\xa8\xf9\x3f\x71\xbf\xf8\xe3\x9a\x6a\xe4\x55\xf1\xd7\x43\xe2\xaf\xa6\x5d\x2a\x7d\xd8\x7f\x5d\xe6\x0a\x2c\xc0\xbc\xcf\x26\x99\x80\x13\x75\xcc\x31\xab\xc0\x8e\xea\x46\x94\xba\xf1\xa9\x2e\x78\xb6\x8b\x3c\xd3\x95\x78\xda\x91\xd9\xef\xe8\xda\x39\x16\x8a\xef\xf4\x82\x8e\x33\x3b\x8d\x67\x27\x6c\x9e\x9a\xfb\xd2\x61\x71\x09\xb3\xdf\xf8\xc2\x1d\x60\x9f\x1e\xee\xbc\xa1\x14\x02\x0b\xe7\x53\x7d\xc7\x94\x0e\xcf\x9b\x7a\x91\x2d\xcb\x21\xe9\x32\x5d\xf8\xd6\xbf\x97\xed\xed\xe0\xfe\x71\x20\xdc\x74\xca\xbc\x10\x83\xe7\x63\xe4\xb9\x58\xe2\x4b\x0e\xc5\xf9\x78\x8c\xd7\xf1\xd7\x4c\x29\xaf\xb3\x61\xd7\x25\x99\x95\xe8\x97\xa5\x29\xcf\x5b\xa4\xa4\xb9\xb2\xa5\x35\x31\x7a\x63\x2d\xcd\x61\x25\xcb\x5e\x9c\x39\x37\x14\xb4\xac\xf5\x55\x64\xb0\x47\xbf\x69\x8d\x29\x3f\xfc\x2f\xa9\x7a\xa9\xa0\xa6\x24\xfe\xc4\xd5\x82\x92\x77\xe6\x92\x01\xe4\xc0\x01\x70\x1e\x2f\xef\x62\xdd\xf2\x31\x9f\x30\x41\xbc\x45\x1b\x31\x3a\xf9\x4c\x89\x27\x9f\xa9\x4d\x8c\x87\xb9\xf6\xf8\x45\xfa\xfc\x71\x38\x4a\xc6\xe4\x51\x27\xcc\xf5\x5e\x31\xcc\xd5\xb9\xae\x13\xaa\x0d\x92\xbf\xe8\x85\x53\x1e\xac\x5b\x43\xc1\x7f\xb3\xac\x94\xd5\xd5\xf5\x82\xa9\x96\x4d\xf2\x4b\xbd\xe4\xb7\xbb\x61\x9f\xf5\xd5\xe3\x65\xfd\x6f\xd6\x98\xe7\xdb\x6a\x67\x59\x2d\x37\x28\xd7\xf7\xc0\x4d\xf7\x4b\xea\xab\xc3\x2f\x3c\x0c\x93\x7e\x6f\xa1\xbe\xda\xb5\xe8\xad\x96\x26\x23\xbe\xda\x69\x63\x01\xfb\x4d\x98\x10\x74\xae\x43\xe7\x3a\x74\xae\x43\xe7\x3a\x74\xae\x43\xe7\x3a\x74\xae\x43\xe7\x3a\x74\xae\x43\xe7\x3a\x74\xae\xc3\xfc\xdf\xe8\xbe\x87\xee\x7b\xe8\xbe\xd7\x10\xf7\xbd\xdf\xef\x83\xc9\xcd\xd4\x6e\x53\xb2\x59\xaa\x50\x38\x3e\x7c\x3f\xd5\x47\xbe\x2b\x54\x72\xfb\xf5\x5a\xf2\x7e\x5b\xd9\xe0\xa6\x78\x53\x6d\x91\xfb\xbb\xb7\x5a\x31\x38\xab\xa3\x88\x86\x2a\xd1\xd0\x62\x34\xf5\x19\x26\x83\x21\xf5\xe0\xac\x71\xf5\x96\x85\x8b\x4a\x28\x8e\x48\x08\x91\x10\x22\x21\x44\x42\x88\x84\x10\x09\x21\x12\x42\x24\x84\x48\x08\x91\x10\x22\xa1\xd6\x22\xa1\x49\x38\x49\xc6\xe5\x63\x0e\x12\x4a\x88\x7e\x10\x5e\xe5\xbe\x13\x9c\x21\x90\x27\x21\x4f\x42\x9e\x54\x1b\x4f\xfa\xf2\x55\xd7\x6f\x48\x53\x1f\x2f\xab\x45\x93\x35\xe2\x54\x93\x5b\x51\xcb\x4a\x7a\x24\xbb\x6e\x96\xf5\x35\xbb\x41\x81\x50\x90\x77\x5d\x25\x6f\x97\xe1\x5e\xcf\xdd\x96\x03\x51\x3a\x71\xbc\x7a\xc2\xac\x69\xd6\xaa\x6d\x10\xce\x38\xad\x26\x47\x79\xfa\x2c\xa1\x49\xee\x07\x94\x0e\xbb\xa3\xcd\x59\x4f\x06\x21\x08\x42\x10\x84\x20\x08\x41\x76\x0c\x04\xc9\xb4\x0d\x04\x69\x78\x4f\xea\x86\x20\x19\x84\x20\x08\x41\x10\x82\x20\x04\x41\x08\xd2\x7a\x08\x92\x41\x28\xd0\x81\x50\x20\xd3\xee\x50\x20\x73\x1b\x42\x81\xf9\xf7\xc7\xe0\x9f\x71\xd7\x84\x32\x18\xcc\x35\xa1\x00\x8f\xc2\x8d\x30\xd7\x04\xd7\x4a\x1f\xb6\x8a\xce\xab\x86\xeb\xa5\xe0\xe5\x0a\x16\x19\x48\x85\x19\xf2\x0d\x49\x19\xfd\xd6\x68\x2f\x87\x2b\x64\xc1\xad\x61\x5e\xc1\x3d\x2c\xbf\x87\xb0\x4e\x82\x2f\x2c\x26\x0d\xf2\x47\xf6\x86\x31\x90\x1e\xfe\x65\x91\x94\x70\xdc\x31\xc6\x2f\xd9\x16\xe0\xc1\xf9\xc4\x13\xf0\x38\x6c\xf8\xc2\x7d\x57\x21\xd7\x8a\x19\xc7\xd0\x60\x4c\x5e\x54\x67\xf2\xa2\xf7\x74\xc1\x4d\x2e\xa7\x4a\x50\x64\x72\xea\x06\xb4\x68\xd5\xc2\x3f\xe7\x69\x8f\xd6\xc1\x74\xd3\x1e\xb5\xee\xe9\x6f\xe3\x59\x18\x36\xa0\x2c\x64\x61\x68\xdd\xe3\xeb\x17\xd0\x25\x7d\x7b\x04\x74\xf2\x3d\x3d\x61\x02\x7a\xd8\xca\xdd\x21\x24\x42\xd1\x57\xc3\x85\xf5\x29\x3b\xfb\x53\x80\xb0\x76\x5a\x68\x91\xd8\x46\xac\x8c\x58\x19\xb1\x32\x62\x65\xc4\xca\x88\x95\x11\x2b\x23\x56\x46\xac\x8c\x58\x19\xb1\x32\x62\x65\xc4\xca\x88\x95\xdb\x0f\x2b\xe7\x1b\x9c\x8a\x32\x8a\x42\x24\x83\x29\xc4\x3d\xe4\x6e\x2e\x7f\x5d\x83\x7f\x3b\x88\x44\xe3\x73\x80\xfd\x69\x1c\x5e\xc9\x7d\xf9\x56\x58\x64\xe8\x46\x7a\x84\x7c\x39\x4e\x7e\x37\x0e\xbb\xd9\x1f\x1e\xd9\x48\x27\x5e\x93\x57\xcb\xde\xcf\x3b\x5f\x0e\xc9\x57\xe7\xd5\x72\x86\x5e\x75\x3d\x3d\xb5\x38\x67\xbf\x40\xe3\x6a\x54\x4e\x54\x34\x34\x51\xd1\xd0\x44\x2d\x0d\xcd\x97\xe0\xf5\x7c\x19\x5d\x81\x05\xb6\x8c\xce\xc3\x0c\x64\xea\x58\x46\xc2\x7b\xd6\x72\xec\x40\x7e\xe9\x32\x4c\xf0\xf1\x75\x67\xdf\xf1\x90\x8c\xac\xa2\x41\xfe\x62\x81\x7c\xa4\x07\x48\x00\x81\xea\x8f\xa8\x2b\xea\x64\x18\x65\x05\x48\x67\xfd\xd8\xa9\x99\xb9\x46\xd1\x1f\x12\xc1\x15\x82\x2b\x04\x57\x08\xae\x10\x5c\x21\xb8\x42\x70\x85\xe0\x0a\xc1\x15\x82\x2b\x04\x57\x08\xae\x10\x5c\x21\xb8\x0a\xce\x7f\x1f\xe0\x49\xe3\x18\xe6\x0d\xf1\x6f\x7c\x43\x34\xac\x3a\x46\x8e\x54\xa9\x70\xc2\x09\x94\x45\xb3\xdc\xee\x82\xfc\xa9\x3d\x81\x80\x82\x38\x3e\x8c\x2e\x8b\x48\xf2\xbf\xb5\x94\x46\x70\x78\x70\x09\xe6\xe0\x82\xcf\x59\x71\x1c\x8e\xd5\x35\x1f\xe8\x7d\x88\xde\x87\x75\x7a\x1f\x3e\x19\x0f\xaf\x97\x71\x91\xcb\x8b\x29\x38\xcb\xe4\xc5\x49\xa8\x77\x7d\xc2\x65\xee\x67\x78\x1e\x66\x5c\x3f\xc3\x2d\x34\x77\x85\x3b\x0e\x5e\x80\x59\xc1\x71\xb0\xfe\xf6\x6c\x89\x55\x9b\x44\xaa\x14\x38\x91\x32\x2a\xca\x95\x30\xf9\x27\x52\xa0\xc4\x7a\x30\xd0\xa9\xcf\x95\x5e\x47\xf9\xef\x15\xd2\xcb\x75\xe1\x6b\xbe\x1c\x43\x08\x8a\x10\x14\x21\x28\x42\x50\x84\xa0\x08\x41\x11\x82\x22\x04\x45\x08\x8a\x10\x14\x21\x28\x42\x50\x84\xa0\x08\x41\x6f\x77\x08\xda\x5a\xef\xbd\xa6\xe1\x87\xdb\x30\xfb\x25\xf9\xcb\x41\x18\xf7\x94\x02\x0d\xf3\x4d\x33\x54\x06\x2a\x4c\xd5\x2d\x0f\xf1\x2b\x83\xe4\x37\x77\xb9\xb5\xaf\x1f\x60\xa2\xc0\x6b\x51\x2f\xf1\xbb\x58\xc1\x6b\xfa\xb3\xbf\xde\xb5\xfb\x7b\x83\x71\xc9\xb3\x31\x78\x26\x46\x9e\x8e\x25\x3e\xe6\x6c\x9a\x1f\x8d\x2d\x73\xfd\x8c\xe9\x78\x8f\x33\x5d\x69\x85\xfe\x4b\xc9\x96\x53\x92\x34\x4b\xff\x6b\xff\x7d\x4d\xd1\x18\x1d\x34\xa5\x6c\x61\xdd\x2c\xab\x86\x5b\x33\xde\x2a\xb0\x5b\xd0\x1e\x53\xa5\x7e\xe7\x4d\xfa\xa9\x84\xb6\x2b\x5d\xa4\xa4\xc5\x82\x52\x2c\x5a\x32\x97\xed\x26\xa5\x40\x85\x5c\x3a\x95\x3e\x91\x92\x77\xb1\x47\x7a\x8a\xf0\x3f\x15\x83\x0f\xc7\xc8\x87\x62\x89\x0f\x38\xdd\x7d\xc2\xe9\xad\x43\x63\x56\xec\x7e\xd3\x47\x48\xb3\xbc\xab\x74\x2e\x4b\xa6\xdd\x2d\xeb\x4b\xce\xca\x04\xd3\x4f\x30\xd3\xa7\xf8\xc6\xdd\x44\x0f\xef\xe0\x8f\xf1\x6c\xe9\x1f\x82\x33\x7c\x4b\x8f\xc3\x31\xb6\xa5\x47\x60\x18\x06\x23\xeb\xfa\xba\x33\x1c\xb9\x89\x1f\x08\xde\xc4\x77\x90\xee\xbc\x5a\x86\x47\xaf\x44\xef\xdb\x41\x32\x50\x59\x73\x54\xe8\x81\x58\x8c\x22\xf1\x6b\xbb\xdd\xb5\x2b\xd1\xe5\xad\x64\xfd\xe5\xda\x85\xe5\xdb\x63\x5d\xd1\xb2\x15\xcc\x0a\x7c\xf8\x0e\x2e\x36\x37\xe0\x78\x5c\x81\xc7\x15\x75\x1e\x57\x7c\x24\xb6\xe5\xdd\x3e\xcd\xcf\x22\x4e\xc1\x84\x7b\x16\xd1\x42\x91\x51\x5a\x6f\xbc\xc8\x48\x3e\xb9\xdf\x15\x19\xf7\x58\x87\x06\x8a\x28\x25\x24\x3b\xde\xbf\x45\x42\xe2\x1a\x2c\xc1\xa2\x28\x24\x92\x19\x38\x57\x87\x9a\x35\xc3\xba\x7d\x95\x9d\x20\x98\x28\x37\xa2\xe4\xc6\x4b\x71\xf8\x76\x9c\x7c\x33\x9e\x78\xd1\x19\xa0\x4f\xc7\xaf\x89\x76\x80\x56\x94\x4c\xae\xcb\x4b\x2b\xea\xaa\xce\xad\x60\xdb\x54\x75\x8f\x68\x2c\x3a\xc0\xba\x28\xc8\x85\xa2\x5e\x1c\x2e\xaa\x79\x85\x0d\x84\x65\x0a\x88\xf2\x83\x43\x2b\x67\x0a\xac\x95\xa8\xad\xad\xa9\x39\x2a\xa1\x0a\xb7\x2c\xd2\x2f\x9e\xe3\x14\xb5\xc2\x90\x65\x21\x30\x4b\x52\xca\x1b\xf4\x83\x57\x52\x0d\x4d\xcf\x39\x96\x8e\xfb\xed\x2b\xdf\x2a\xb9\xa4\x64\xdd\xa4\x9d\x14\x6d\x50\x85\xde\x69\xbf\x90\xf5\x90\x55\x41\xdd\xd0\xe8\x0d\xac\x9f\x6b\xaa\x52\x0c\xec\xa3\x4c\x58\x17\x16\x59\x0f\x82\x2c\x9f\xaf\xc6\xe1\x85\x38\x79\x3e\x9e\x78\xce\x19\xe6\xa7\xe2\x33\x42\x41\xb1\x12\x35\xfa\x54\x87\xb5\x2d\x1a\x7a\x49\xc9\xb3\x09\x58\xd4\x0b\x5a\xf6\xd6\x10\x1f\x03\x4e\x97\xec\x77\x71\x2b\x92\x71\x85\x67\x3c\x25\x09\x8a\x61\x4e\x2d\xa9\xc5\x9c\x5a\x2c\xbb\xd8\x56\x95\x74\xa3\x74\x43\x29\xd2\x37\xa2\xc3\x6a\xac\xab\x23\xab\x4a\xc1\x3e\xe6\x90\xf9\xaf\xb2\xb4\xaa\x15\x95\x82\xf6\x84\xcd\x4b\x57\x54\x6a\x59\x31\x0c\x33\xc2\x2d\xaa\x9c\x6b\xb1\xf3\xc6\xfb\x4d\xf7\x26\x7e\xb0\x90\x92\x66\x35\xb6\x9c\x85\x8e\xeb\x46\xe5\x9b\x31\xca\xc6\xcf\xf8\xf8\xb9\x06\xdb\x6c\x7a\xf9\x46\x4a\xde\xcf\xfb\x33\x63\xbf\x88\xe9\xd1\x34\xdf\xd5\x0d\xef\xec\x26\x4f\x76\x27\x5e\x76\x20\xc6\xd7\xbb\x1e\xb6\xc0\x23\xdd\x52\x37\xf4\x9b\x52\x5e\x31\x56\xa8\xb1\x2f\x1c\x88\x3a\xfb\x42\x35\x56\x75\x63\x8d\x8e\x45\x60\x4f\xaf\xfa\x1e\x1e\xde\x51\xb6\x9e\xed\xc5\x58\xe2\x6f\xa5\xd1\x85\x92\xd5\x72\xee\x09\x02\x83\xd1\xec\x3c\xc7\x19\x5d\x53\x2d\xdb\xa8\xd6\xc6\xcd\x29\x61\x18\x6d\x50\x69\xdb\xa9\xae\xea\xee\x7d\x58\x4a\xe2\x67\xda\xec\x63\x2a\x0a\x87\x7e\xfe\x0e\xfd\xd2\xb0\x35\xf1\xde\x85\x61\x4e\x4a\xfd\x19\x25\xfb\x18\xfd\x6c\x14\x73\xf4\x2a\xa5\x50\xd0\x6f\xb2\x8b\x7c\x03\xc7\x4f\x07\xac\xa5\xef\x6d\xc4\x7e\x83\x15\xa7\xa5\x49\xa9\xff\xbc\x6e\xa8\x42\xb3\x52\x56\x31\xb3\x4a\x8e\xbe\xbd\x35\x3e\x4c\xd8\xf2\xf6\x4c\x2e\xbd\x2a\x1a\x5c\x75\xda\x48\xc9\x77\x97\xfc\xeb\x46\xfc\xc8\x7f\x21\xd6\x60\x2b\x7d\x89\xfb\x0b\x5c\x82\x39\xc1\x5f\xa0\xc9\x96\xbf\x14\xac\x01\xec\x21\x77\xf2\x61\x6a\xb8\x12\x90\x79\x6e\xaf\xab\x04\x0c\x30\x70\xc7\x4e\x7d\x39\x40\x09\x37\x20\x0e\x96\x94\x72\xf6\x46\x2b\x34\x83\xfb\xfc\x0d\x0d\xb3\x47\x0f\xb2\x38\xba\xfb\xc5\x1f\xd7\x54\x23\xaf\x8a\xbf\x1e\x12\x7f\x35\xcb\x86\x52\x56\xf3\x5a\x76\xd8\x7f\x5d\xe6\x0a\x2c\xc0\xbc\xcf\x38\x99\x80\x13\x75\x4c\xf3\x22\x6d\x14\x35\x8e\x28\x8d\xe3\x53\x5d\xf0\x6c\x17\x79\xa6\x2b\xf1\xb4\x23\xb6\xdf\xd1\xb5\x73\x2c\x15\xdf\x29\x11\x1d\x67\xe6\xf5\xc0\x4e\x32\x4b\x1c\x30\xf3\x03\x11\xe9\xb0\xb8\x84\xd9\x6f\x7c\xe1\x0e\xb0\xaf\x0f\x77\x92\x51\x0a\xec\x4e\xaa\x66\xf1\xbb\xd9\x15\x4c\xe5\x31\xa5\xc3\xf3\xa6\x5e\x64\xcb\x72\x48\xba\x4c\x17\xbe\xf5\xef\x65\x7b\x3b\xb8\x7f\x1c\x08\x37\xa1\x32\x2f\xc4\xe0\xf9\x18\x79\x2e\x96\xf8\x92\x83\x74\x3e\x1e\x3b\xaf\x1b\x59\xa6\x8d\xe5\x75\x36\xec\xba\x24\xaf\xd2\x3f\xc9\xd2\x94\xe7\x2d\x52\xd2\x5c\xd9\x52\x9c\x18\xca\xb1\x96\xe6\xb0\x92\x65\x2f\xce\x9c\x48\x0a\x5a\xd6\xfa\x30\x32\xf2\xa3\xdf\xb4\xc6\x94\x3b\x59\x94\x54\xbd\x54\x50\x53\x12\x7f\xe2\x6a\x41\xc9\x3b\x73\xc9\xc8\x7f\xe0\x00\x38\x8f\x97\x77\xb1\x6e\xb5\x18\x00\x85\x97\x07\x65\xdd\x6b\xb8\x28\x9f\x1f\x87\x63\xe4\x88\x9c\x76\x80\xed\xab\xc5\x5a\x47\xee\x4d\x9d\x50\xe7\x88\xfc\x43\x2f\xcc\x72\xd2\x6b\xac\x28\xd9\x94\x3d\xfa\x6c\x9f\xb8\x15\x5c\xaa\xd7\x09\x36\xf4\x82\x6a\x92\x4f\xf5\x92\xe7\xbb\xe1\x55\xb4\x99\x29\xb1\x15\xfa\x41\x2c\x59\xe7\xb5\xc5\x9c\xb6\xa1\xe5\xd6\x95\x82\xa7\x5a\xb0\xe3\x1b\xb1\xa4\xd3\xb5\xd9\x80\xda\xc0\xa9\x64\x92\xdd\xb0\xe4\xef\x8c\xe7\x23\xab\x17\x58\xd0\x76\x9b\x07\x3a\x6f\x4b\x91\xdf\x37\x47\x6f\xa9\x09\x72\xc2\xda\x52\xa1\x2b\xc7\xde\x67\x7a\x41\xf5\x56\xfc\xed\x0d\xde\xd2\xfb\x08\xb0\xf7\x66\x2e\xea\x58\xf5\x17\x7d\x1b\xd1\xb7\x11\x7d\x1b\x77\x8e\x6f\x23\x56\xfd\xc5\xaa\xbf\xe8\xdb\x88\xbe\x8d\xe8\xdb\x88\xbe\x8d\x6d\xe1\xdb\x78\x1b\x1a\xb4\x58\xb8\xb7\x13\xdd\x31\xb1\x70\x6f\x33\x0a\xf7\xbe\xb7\x17\x8e\x72\xf6\x63\xad\x1b\x7f\xc9\x5e\x4e\x7d\x36\xf4\xc2\xfa\x9a\xaa\x94\xcb\x4a\xf6\x06\xfd\xb6\x9a\xe4\xeb\x32\xf9\x4f\xdd\xf0\x4a\xeb\x2e\x27\x60\xf2\x9f\xd7\x46\x79\xae\xb3\xf6\xa6\x9c\xf6\x1a\x44\x7c\xf8\x0d\xcb\xbc\x4f\x56\x28\xa6\xff\x51\x88\x7b\x82\x71\x4f\x2d\x3c\xe6\xd1\x6c\x34\x13\x3a\x47\xce\x84\xa5\x08\xf0\x2e\x31\x8b\x0c\xf9\xe7\x07\xa1\x0f\x42\x1f\x84\x3e\x08\x7d\x10\xfa\x20\xf4\x41\xe8\x83\xd0\x07\xa1\x0f\x42\x1f\x84\x3e\x2d\x86\x3e\x88\x64\x10\xc9\x20\x92\xd9\x1e\x24\xf3\x89\x61\x38\x35\xa2\x94\xb4\x2a\x21\x97\xb6\x1b\x63\xb1\xcc\xc1\x4c\xb6\xa0\x68\x6b\x4e\xf4\xe5\x77\x86\xc8\x9f\xef\x82\x3b\xb3\xba\xa1\x3e\xb2\x91\x4e\x1c\x0e\x88\xbe\x5c\x74\x1a\xe0\xe6\xf7\x34\x6d\x20\x39\x40\xaf\x9c\xd6\x0d\x55\x74\x91\x09\xbc\x14\x63\x32\xdb\x3c\x26\x33\x07\x73\x9c\x20\x65\xe0\x1c\x23\x48\x13\x70\x02\x8e\x87\xba\xe4\xd1\xb5\xc2\x7c\x6e\x83\x26\x7b\xab\xe1\x99\x0f\x47\x43\xa3\xa3\x64\x8c\xd3\xa0\xe0\x0e\x88\x8e\x43\x16\x4b\x92\x65\x48\xfc\x60\xb7\xbb\xca\x07\x83\xe3\x34\x83\x17\xfa\x90\x75\xf1\x76\xac\xf5\x05\x98\x87\x8b\x3e\x07\xe9\xba\xa7\x06\xdd\xa3\x31\x90\xb3\xce\x40\xce\xcf\xc6\x1a\x29\x22\xae\xf0\x98\xce\x0b\x30\xeb\xc6\x74\x36\x53\xe4\xd4\x26\x53\x5c\x59\x51\xab\x74\x89\x88\x1b\x4d\x7e\x74\xbf\x2b\x72\x1e\x74\xe2\x3c\x83\xa5\xcc\x20\xff\x7d\x3b\x84\x0c\x46\x7f\x62\xf4\x27\x46\x7f\x62\xf4\x27\x46\x7f\x62\xf4\x67\x3d\xd1\x9f\xad\x8c\xd7\x6c\x6c\xa8\x69\xed\xd1\x9f\xcd\x52\x21\x32\xff\x7d\xaf\xab\x23\x1c\x8d\x08\x03\x0d\xd6\x1c\x92\x2c\xaa\xa9\xc5\x8a\x03\x06\x87\x76\x9e\x42\x82\xc1\xa1\x18\x1c\xba\xcd\xc1\xa1\x2d\x25\x51\x4d\x33\x0b\xa3\x02\x50\xe7\x33\x70\x8e\x9c\x91\x4f\x39\x6e\xb2\x3d\x62\xc0\x68\xe0\x03\x3a\x22\x76\xf4\xff\xb8\x0c\xc7\x22\x60\xb5\x95\x1f\x90\x8e\x17\xdd\xe3\x06\x55\x81\x0c\x93\x7c\x6f\x81\x3c\xd5\xe3\x7e\x28\x8f\x54\x2f\x5e\xbb\xe4\x36\x32\xed\x34\x92\x1c\xa0\x37\xf9\x3f\x93\x81\x97\xb6\xb9\xc7\x1f\x16\x71\x40\x9f\x37\xf4\x79\x43\x9f\xb7\x9d\xe3\xf3\x86\x45\x1c\xb0\x88\x03\xfa\xbc\xa1\xcf\x1b\xfa\xbc\xa1\xcf\x5b\x5b\xf8\xbc\x61\x11\x87\x4e\x74\x51\xc3\x22\x0e\xcd\x28\xe2\x70\x83\xd7\x93\x1c\x65\xf5\x24\xe3\x57\x2f\x91\x33\x70\x0a\x26\x22\x99\x4e\xa0\x65\xde\x90\x52\xb6\xf5\x71\x9f\xc0\xfe\x78\xb8\x8f\xfc\xd9\x3d\xc2\x79\xbf\x53\xbe\x36\x98\x46\x0c\xf2\xdf\x5b\xcb\x23\xb6\xe6\x54\x14\xd8\x37\xc4\xea\xe8\x54\x54\xa7\x53\xd1\x3b\xab\x14\xb3\xad\x0b\x03\x07\x6f\xd1\xfa\xbd\x8d\x82\xdb\xbb\xca\x8f\x3b\x2f\xc2\x79\xe1\xb8\x73\x0b\x0d\x6e\x0d\x47\x47\x8b\xa5\xc8\x72\xb6\x7f\x2a\xb9\x62\x2b\x19\x58\xc3\x36\x58\x84\x1d\x13\x5d\x96\x82\x8a\xd8\xb6\x42\x98\x21\x0b\x45\x16\x8a\x2c\x14\x59\x28\xb2\x50\x64\xa1\xc8\x42\x91\x85\x22\x0b\x45\x16\x8a\x2c\x14\x59\x28\xb2\x50\x64\xa1\xed\xc7\x42\xdb\xb9\xa0\x6d\xb3\xf8\xc3\xed\xe8\xa9\xf6\x9b\x7d\xbc\x9e\x6d\x64\x29\x03\xb6\xd6\x0d\xb6\xd2\xec\x88\xea\xff\xaf\x97\x7c\xab\xdb\x25\x2a\x9f\x8e\x59\x1b\x44\x48\x6d\x57\xb4\x85\xb3\xed\xb1\xb6\x40\x9b\x59\xa2\x17\x34\x24\xb9\xdd\x90\xab\x8b\x31\x7d\xd3\xfa\x72\x53\x75\xce\x55\x32\xfb\x3d\x7a\xbd\xd0\x76\x2a\x79\xf0\x66\x90\x4b\xb9\xdb\xc9\x36\x77\x90\xdb\x96\x94\x78\xe1\x4e\x9f\x37\x79\xd5\x91\x85\xe8\xfd\x35\x40\xfa\xfd\xfb\xcb\x1d\x74\xef\xa6\x42\xee\x85\xdc\x0b\xb9\x17\x72\xaf\x1d\xc3\xbd\x30\xef\x1d\xe6\xbd\x43\xee\x85\xdc\x0b\xb9\x17\x72\xaf\xb6\xe0\x5e\xd5\xcb\xfe\xb9\x7a\x7b\x27\x84\x6e\x61\x4a\xbe\x4e\x64\x7c\x98\x92\xaf\x19\x29\xf9\xbe\x1b\x87\xfb\x78\x95\x04\xa5\xa4\xa9\x8f\x97\xd5\xa2\xc9\x1a\xb1\x6a\x25\x90\xff\x18\x27\x5f\x8e\xc3\x5d\x9e\x1f\x13\x89\x3c\xcb\x47\xb1\xaa\x1b\x6b\xce\x60\x2a\x12\x83\x01\xc9\xd7\xe6\xd5\xf2\x94\x78\xf5\xd4\xe2\xdc\x05\xfa\x4b\xe3\x5c\x69\x2a\x1a\x9a\xa8\x68\x68\xa2\x96\x86\xe6\xb5\x70\x97\xae\x2b\x1c\xc9\x5c\x80\x59\x86\x64\xce\xc2\x69\x98\xac\x03\xc9\xd8\x2f\x6f\x71\x17\xf2\x64\x02\x32\xf6\x70\x97\x4c\xab\x14\xc5\x58\x18\xaf\xcb\x29\xea\x1a\x55\x7f\xcb\x36\xae\x1b\x31\x19\x49\x25\x5f\x38\x40\x7e\xac\x0b\xf6\x59\x15\xb9\x59\x1b\x89\x43\x6c\x83\xf3\x0b\xec\xd5\xed\xca\x94\x19\xd6\xd4\xb2\x5a\x4e\xb2\xa4\x89\xbc\x24\x37\xbb\xd1\x45\x66\xce\x35\x9c\xd7\x36\xd6\xf7\x69\xfe\xcd\x90\xe1\x63\x3a\x09\x27\xd9\x98\x1e\x81\x34\x8c\x44\x95\xd2\x65\x5d\x4c\x39\x3d\xdb\x6a\xc2\xbe\xa5\x68\xac\x35\x42\x86\x2b\x8b\xe9\xba\x1d\xf0\x55\x80\x18\x83\xc4\x37\x76\xfb\x66\x62\xc0\x4e\xd8\x17\x3d\x19\x76\x6e\xbf\xd6\xcf\x47\x66\x16\xa6\x61\xca\xe7\x58\xbb\xf9\x09\x41\x8f\x5a\xf4\xa8\xad\xd3\xa3\xf6\xe9\x58\x43\x24\xc2\x05\xee\x31\x7b\x0e\xce\xb8\x1e\xb3\x2d\x16\x2d\xa5\xf5\xe6\x88\x96\xcc\x5f\xed\xf5\x89\x96\xb1\x8a\xa4\x3b\xd1\x32\x66\x80\xe5\x71\x68\xad\x84\xc1\x8c\x3b\x9d\x27\xc8\x30\xe3\x0e\x66\xdc\xd9\xe6\x8c\x3b\xad\xd1\x21\xa3\x32\xe2\x34\x43\xd4\xcf\x1f\x87\xa3\x64\x4c\x1e\x75\x30\xcb\xbd\x22\x9f\x71\x6e\xec\x04\x3c\x43\xfe\x78\x81\x67\xd6\xa9\xcd\x08\xb2\x92\xec\x50\x2b\x88\xfc\xeb\x05\xf2\xe3\x3d\xbe\x4f\xe2\xe1\x9a\xd2\xeb\xd0\x0f\x61\x2f\xbd\x32\xf0\x3b\xe8\x5e\xd4\xe6\xce\x02\x18\x41\x82\x27\xe9\x78\x92\x8e\x27\xe9\x3b\xe7\x24\x1d\x23\x48\x30\x82\x04\x4f\xd2\xf1\x24\x1d\x4f\xd2\xf1\x24\xbd\x2d\x4e\xd2\x31\x82\xa4\x13\x4f\x97\x31\x82\xa4\x19\x11\x24\x2b\x9c\xce\x8f\x32\x3a\x1f\xbf\x7a\x89\x9c\x80\xe3\x70\xb4\x36\x5e\xe3\xda\xe4\x0d\xc9\xa3\xb3\x1c\xcd\x6c\x46\x49\xaa\x92\xd9\xb8\xdd\xa8\x84\x36\xf2\x4f\xee\xf1\xc1\x88\x7b\xfc\x89\x74\x96\xd5\x72\xf2\x21\xfe\xc7\x56\x91\x07\x0e\x0a\xce\xc3\x0c\x64\x7c\x78\x7c\x0c\x46\x37\x3b\xf6\x88\xc5\xf1\x7c\xaf\xce\xf3\xbd\xbf\x8d\xc1\x34\xdf\xfd\xa7\x60\x82\xed\xfe\xa3\x50\xc7\x0a\x84\x8b\xfc\x80\x6f\x0a\xce\xba\x07\x7c\xf5\xb5\x34\xc7\x93\xe1\x64\xe0\x9c\x90\x0c\xa7\xbe\xa6\xea\x17\x47\x2c\x8d\x4d\x53\xc4\x51\xf2\xf7\x25\x9f\x38\x3a\x58\x2d\x41\x0e\x15\x4d\x23\xfc\x02\x41\x34\x55\x49\x8d\xd3\x78\x21\x85\x34\x13\x69\x26\xd2\x4c\xa4\x99\x48\x33\x91\x66\x22\xcd\x44\x9a\x89\x34\x13\x69\x26\xd2\x4c\xa4\x99\x48\x33\x91\x66\xb6\x1f\xcd\x6c\xe7\x7c\x38\xcd\xe0\x09\xb7\xa3\x6f\xd9\xef\xf7\xc0\x2b\xec\x5c\x38\x4c\xe5\x31\xc9\xe7\x7b\xc8\x6f\x74\xb9\x29\x6e\x7a\xab\xfb\x8b\xb1\xfc\x29\xc9\x83\x6e\xf9\x35\xf6\x87\xf3\xba\x31\x55\x28\x38\x44\xa4\x71\x9e\xd2\x4d\xca\x29\xf3\x06\x38\xcd\x97\xea\x71\x38\xca\x96\x6a\x0a\x86\x20\x19\x99\xf2\x99\xbd\x6b\x43\x70\xfb\x85\xe8\xf5\xd8\x47\x64\x7f\xfe\x18\x9e\xbc\x06\x53\xc7\x20\x22\x42\x44\x84\x88\x68\x67\x22\x22\x4c\x1d\x83\xa9\x63\x10\x11\x21\x22\x42\x44\x84\x88\xa8\x2d\x10\x11\xe6\x67\x41\xe6\x84\xf9\x59\xb6\x29\x3f\xcb\x73\x7d\x30\x51\x53\x6e\x5f\xbb\xb1\xb7\xae\xeb\x65\xc5\x49\xef\xfb\xaf\xfa\xc8\x77\x84\xf4\xbe\x9f\xad\x25\xbd\xaf\x6d\x61\xbd\x8e\xb6\xd4\x16\x19\x7e\xe5\xc0\x0c\xbf\x9e\x7e\xb6\x3b\x90\x79\x2c\x3c\xd5\x4c\xc3\xb3\xff\xd6\x9c\xe4\xf7\x6a\x34\xa4\x19\x22\xc9\xca\x24\xda\xc2\xb8\x23\xac\x41\x58\x83\xb0\x06\x61\x0d\xc2\x1a\x84\x35\x08\x6b\x10\xd6\x20\xac\x41\x58\x83\xb0\x66\x1b\x61\xcd\x04\x9c\x20\xc7\xe5\xa3\xce\x99\xfd\x01\x31\x8f\x8c\x47\x75\xef\x84\x5c\x32\x88\x92\x10\x25\x21\x4a\xaa\x0d\x25\xfd\x1b\x19\x88\x17\x25\x95\xf4\x9c\x49\xfe\xb5\x4c\x3e\x2c\x20\x22\xdd\xfa\x96\x15\x73\xda\x86\x96\x5b\x57\x0a\x1e\x58\xe4\xe8\x8d\x8b\x7a\xae\x21\x68\xc8\x0b\x77\x16\xf5\xdc\x82\x66\xde\x76\xde\x36\xdb\x51\xc1\x69\x36\x9a\xdd\xc8\x44\xf2\xb3\x9b\x45\x3d\xe7\x2d\xb7\xde\x1b\xcc\x88\xf6\x11\x60\xef\xc7\x9c\x79\x10\xeb\x20\xd6\x41\xac\x83\x58\x07\xb1\x0e\x62\x1d\xc4\x3a\x88\x75\x10\xeb\x20\xd6\x41\xac\x83\x3e\x38\x08\x4e\x10\x9c\xec\x04\x70\xf2\xe3\x57\xe0\x12\xcf\x57\x6d\xac\x28\xd9\x94\x6d\x8b\xb3\xa6\xec\x42\x49\x3c\x66\x2a\x1d\xea\x9d\xa3\x17\xd4\x15\xad\x98\xd3\x8a\x79\x93\x7c\xfe\x32\xf9\xb7\x3d\x70\x80\x36\x36\x25\xb6\x65\xa5\x6d\x49\x27\x06\x22\x52\x5a\xeb\x05\x35\xc3\x1b\x4b\xa6\xe9\xa5\x4b\xfe\x96\x78\x2e\x17\xd1\x57\xc6\xbd\xa5\xcd\x61\x0a\xe6\x84\x41\xd8\x80\xb0\x01\x61\xc3\xce\x81\x0d\x98\x13\x06\x73\xc2\x20\x6c\x40\xd8\x80\xb0\x01\x61\x43\x5b\xc0\x06\xcc\x09\xd3\x89\x6c\x00\x73\xc2\x34\x23\x27\x4c\x96\xa7\xa7\x1d\x65\x47\xfe\xf1\xab\x97\xc8\x49\x18\x87\x63\xa1\x89\x36\x18\x40\xb0\xcc\xfc\x94\x60\x94\x37\x24\xe7\x86\x16\xed\x12\x70\x9e\xcc\x58\x2e\x01\xa1\x28\xc3\x8e\xf2\x70\x3b\xe7\xcf\x0c\x93\x06\xf9\xdf\xef\xa9\xc6\x2f\x5e\xe5\x66\xc1\x16\x50\xc5\x11\xfe\xd7\xed\x81\x15\x9c\x2d\x5c\x80\x59\x98\xf6\x25\xc5\x3e\x02\xe9\x4d\x4f\x17\x66\xc5\xc6\xac\xd8\x75\x66\xc5\xfe\xbb\x18\xcc\x70\x89\x71\x1a\x26\x99\xc4\x38\x06\xf5\x2c\x41\x9e\xcc\x3a\xcd\x92\x59\x3b\x69\xb1\xeb\x6c\x6a\x9e\xe7\xc5\x9e\x86\x29\x21\x2f\x76\x9d\x6d\x6d\x35\x31\x76\x6d\x42\xac\x06\x19\x15\x29\xe7\x92\x2f\x4b\xd5\x84\x98\x14\x9c\x3b\x5b\x10\x68\xa7\xf9\x15\x61\x02\x2d\x30\x93\x76\xd3\x44\x1b\x62\x53\xc4\xa6\x88\x4d\x11\x9b\x22\x36\x45\x6c\x8a\xd8\x14\xb1\x29\x62\x53\xc4\xa6\x88\x4d\x11\x9b\x22\x36\x45\x6c\xda\x7e\xd8\xb4\xd5\xa9\xb4\x5b\x47\x15\x36\x93\xb5\xfb\x36\x0c\xb8\x25\x3f\xbf\x00\x49\xee\x0c\x67\x66\x6f\xa8\xb9\xf5\x02\xd5\x48\x1d\x27\xb8\x91\x92\xa1\xe9\x86\x56\xbe\x95\x2d\x28\xa6\xa9\x9a\xe4\xbb\x97\xc8\x07\x7a\xe0\x2e\xf7\xda\x47\x36\xd2\x89\xc1\xea\xfe\x6d\x8b\x56\x1b\xd3\xb4\x8d\xe4\x03\xf4\xe2\x65\xe7\xfe\xeb\x69\xcf\xcf\xe8\xcd\x86\x58\x06\xb1\x0c\x62\x19\xc4\x32\x88\x65\x10\xcb\x20\x96\x41\x2c\x83\x58\x06\xb1\x0c\x62\x19\xc4\x32\x88\x65\x10\xcb\x6c\x16\xcb\xac\x86\x67\x29\xbe\xc4\x79\xcd\x0c\x64\x18\xaf\x39\x05\x13\x70\x22\xd4\x3b\x44\x40\x03\x1b\xe9\x94\xc7\x60\x5f\xd0\x4c\x27\x41\xf1\x5b\xa2\xa9\xcc\x24\x39\x69\x21\x97\x0a\xdc\x60\xa7\xb4\x11\x5b\xf7\x26\xb7\x89\x70\x98\x93\x7f\x79\x8f\x9f\x4c\xbc\xda\xf1\x5c\xf3\x42\x88\x83\xfc\xef\xcd\xc7\x10\x9c\x1a\xcc\xc3\x45\x38\xef\xf3\x53\x3b\x0e\x47\xeb\x19\x6f\x74\x55\x43\x57\xb5\x3a\x5d\xd5\x5e\x8e\x71\x4a\x9b\x66\x94\xd6\x71\x32\x3b\x01\x75\x2e\x45\xb8\xcc\xfd\xcc\xce\xc3\x8c\xe0\x67\x56\x7f\x73\xa1\xb2\xea\x02\x97\x55\xe7\xe0\x0c\x93\x55\x75\x3f\xa1\x56\x9f\xb5\x26\xcb\xb1\xe4\xd7\x24\xbf\x9c\x92\x03\x9d\xd3\xbc\x32\x6b\x80\x5f\x23\xca\x2c\xd7\x25\xad\x99\xd2\x0b\x99\x27\x32\x4f\x64\x9e\xc8\x3c\x91\x79\x22\xf3\x44\xe6\x89\xcc\x13\x99\x27\x32\x4f\x64\x9e\xc8\x3c\x91\x79\x22\xf3\x6c\x3f\xe6\xd9\x6a\x57\xb4\x4d\xf8\x87\x35\x1b\x2c\x34\xde\x3b\xec\x17\x2f\xc3\x20\xf7\x0e\x53\xa8\xad\x97\xd7\xcc\xb2\xe1\xcb\x93\xc6\x7e\x56\x8d\x0d\x2d\xab\x9a\xe4\xbf\x2f\x90\xcf\xf6\x00\xf1\x5d\xfc\xc8\x46\x3a\x71\xb8\xba\x8f\xd8\xd4\xe2\xdc\x32\x6f\x24\x79\x90\x5e\x39\xe5\x6d\xe1\x7a\xda\xbd\x00\x5d\xc4\x10\x97\x20\x2e\x41\x5c\x82\xb8\x04\x71\x09\xe2\x12\xc4\x25\x88\x4b\x10\x97\x20\x2e\x41\x5c\x82\xb8\x04\x71\x09\xe2\x92\xcd\xe2\x92\xb7\xc1\x0a\xc7\x25\x3f\x0c\x3f\xc4\x70\xc9\x32\xbc\x0e\xae\x06\xe2\x12\x6a\xfe\x0e\x2b\xf9\x3c\x1d\xac\xb2\x6e\xb8\xc4\xc4\xcf\x06\x36\xd2\x29\xd7\x5c\x6f\x48\x2a\xb4\x1f\x89\x06\x27\xa7\xc9\x24\xe7\x23\xee\xa3\xed\xe8\xbe\x60\x76\xe1\x41\x27\xf2\xbb\x20\x10\x5b\x38\xa9\xcf\x8a\x22\xa2\xe8\xe1\x7f\x6d\x05\xa4\xe0\x4c\x41\x81\x47\xe0\xcd\x3e\x07\xb2\xcb\x70\xa9\x81\xd3\x84\x7e\x65\xe8\x57\x56\xa7\x5f\xd9\xef\xc4\xe1\x2d\x5c\x86\x3c\x0c\xaf\x67\x32\xe4\x2a\x34\x76\x71\x42\x96\xfb\xad\xbd\x09\xde\xe8\xfa\xad\x35\xfc\x21\x39\xee\xce\xf6\x66\xf8\x61\xc1\x9d\xad\xe1\x4f\x89\x12\x85\xb5\x89\xba\xda\x25\x5b\x85\x50\x8c\x72\x7f\x4b\xfe\x89\x14\x28\x0a\x0f\x06\xfa\xa8\x09\x52\x71\x90\x5f\x50\x21\x15\x5d\x2f\xb5\xa6\xc9\x47\x64\xae\xc8\x5c\x91\xb9\x22\x73\x45\xe6\x8a\xcc\x15\x99\x2b\x32\x57\x64\xae\xc8\x5c\x91\xb9\x22\x73\x45\xe6\x8a\xcc\xb5\xfd\x98\x6b\xab\x5d\xd4\x9a\x8f\x14\x36\x93\x24\xad\xe1\x4e\x6a\xdf\x89\x43\x82\x3b\xa9\x65\x75\xdd\xc8\x69\x45\x8f\x87\x1a\xf9\xbd\x38\xf9\x0f\x71\xd8\x27\xfe\x96\x48\xe4\xd5\xb2\xa4\x15\x57\x75\x63\xcd\x59\x99\x8a\xc4\x46\x20\xf9\x9a\xbc\x5a\x9e\x16\x2e\x9e\x5a\x9c\xbb\x40\x7f\x68\x1c\xb2\xa8\x68\x68\xa2\xa2\xa1\x89\x5a\x1a\x9a\xd7\xe0\x0a\x5f\x48\x17\x60\x96\x2d\xa4\xb3\x70\x1a\x26\xeb\x58\x48\xf6\x3b\x46\x2d\x25\xf2\xb7\x71\xb8\xaf\x4a\xba\x38\xf2\x87\x71\xf2\x95\xb8\x3f\xba\x91\x8e\xa8\x57\x95\xe2\x5b\x2f\x79\x5f\x5e\xf5\xa4\x82\x9b\x5a\x9c\xb3\x2d\xf7\x06\x06\x31\x36\x6c\xb8\x4b\xf0\x7a\x3e\xdc\x57\x60\x81\x0d\xf7\x79\x98\x81\x4c\x7d\xc3\x6d\xbf\x67\x2d\xc7\x23\xe4\xaf\x16\xe0\xb8\xed\x86\x59\x32\xa3\x8a\xd3\x9a\x65\xa5\xac\xae\xae\x17\x4c\xb5\x6c\x92\x4f\x2e\x90\x77\xf7\xc0\x3e\x7a\x5f\xad\xf5\x68\x97\xad\xfb\x97\xd5\x72\xb2\x8f\x3b\x63\x96\xcc\x8a\xaa\x2e\xc2\x55\xe8\x91\x89\x74\x10\xe9\x20\xd2\x41\xa4\x83\x48\x07\x91\x0e\x22\x1d\x44\x3a\x88\x74\x10\xe9\x20\xd2\x41\xa4\x83\x48\x07\x91\x0e\x36\xb9\x04\x2d\xb5\xec\x9d\xca\x8d\x82\x51\xde\x10\xbf\xcb\x6b\xd1\xe4\x30\x4d\x46\x1c\x72\x58\x32\x2d\x36\x28\xf4\x23\xa0\xda\xec\xcf\xec\xf1\x01\x09\xb7\xc0\xac\xc8\x1e\x0e\xd9\x5e\x96\x2d\xa2\x0f\xf5\xd5\x94\x0d\x1b\x7f\x74\xa8\x44\x87\xca\xfa\x6b\xca\x6e\xbe\x1a\x6c\xd8\x3a\xac\xa7\x1a\x6c\x68\x5b\xa1\x29\xfa\x36\x55\x03\x37\xac\xf9\x5a\xf3\xf3\x35\x45\x2a\x25\xbf\x22\xf9\xa4\x52\x70\xc5\x58\x51\x42\x8d\xda\x1e\x8f\x8e\x84\x0a\x2a\x12\xdb\x3c\x59\x85\x60\x13\xc1\x26\x82\x4d\x04\x9b\x08\x36\x11\x6c\x22\xd8\x44\xb0\x89\x60\x13\xc1\x26\x82\x4d\x04\x9b\x08\x36\x11\x6c\xb6\x1f\xd8\x6c\xb5\xdb\x63\x53\x30\x41\xa7\xd7\x83\xfd\xf1\x87\xe0\x32\x77\x35\x2b\xe9\x05\x2d\x7b\xcb\x71\x36\x63\xf3\x19\xe6\x72\x56\xd2\x73\x39\xcd\x34\xd6\x19\x6d\x58\x59\xcf\xe5\xd5\xb2\x75\xc1\xdb\xc8\x6f\xf4\x91\xf7\xed\x82\x57\xf0\xe6\x1c\xb8\xf2\xf9\x98\xb5\x75\xdc\x95\xaa\x14\x6d\xb1\xed\x54\x8e\xd5\x73\x33\x4e\xb3\x19\xd6\x6c\x4a\xca\xa9\x25\x43\xcd\x52\xe1\x3c\xe1\x28\x54\xfd\xac\xb1\x7e\x97\x16\x78\xcc\x3f\xbd\xa4\x5a\x3b\x51\x2b\x9a\x65\x55\xc9\x0d\xb9\xea\x1a\x53\x49\xad\x8f\x3b\xd5\xf8\x5c\x3d\xb4\xdf\xa3\xfa\x0b\x6d\xa7\x92\x7c\x30\x16\xd9\x1b\x55\xa0\xe9\x80\x4e\xb7\xb9\x83\xdc\xfc\x63\xb0\xc8\x77\xe6\x1c\x5c\x60\x3b\x73\x0a\xce\xc2\xe9\x3a\x76\x26\x93\x40\xb3\x54\x55\x8e\xdc\x9d\x07\x83\xf7\xd1\x6e\x72\x07\xeb\x58\xad\xc9\x32\xc3\x2a\x3a\xf3\xe5\x66\xa7\xcc\xac\x9c\x12\x98\x47\x78\x86\xf0\x0c\xe1\x19\xc2\xb3\x1d\x03\xcf\xe6\xdb\x06\x9e\x35\xbc\x27\x75\xc3\xb3\x79\x84\x67\x08\xcf\x10\x9e\x21\x3c\x43\x78\xd6\x7a\x78\x36\x7f\x0e\xce\x90\x53\xf2\x84\x63\x1f\x1f\x64\x86\xb1\xd5\x8b\x00\xa5\x5d\xee\xa6\x17\x88\xf6\xef\xed\x67\x61\xcf\x23\x31\xec\x40\x62\x38\xdf\xee\xc4\x70\xfe\x36\x24\x86\xe4\x43\xbd\x70\x84\xc3\x28\x63\x45\xc9\xa6\x6c\x88\xe0\xab\x40\x21\xf2\x29\x43\x2f\xa8\x26\xf9\x33\x99\x7c\xab\x1b\x0e\xd0\x9b\xa6\xc4\x7b\x1c\xfa\x54\xb2\x3e\x82\xc5\x9c\xb6\xa1\xe5\xd6\x95\x82\x87\x43\x39\x0a\xe7\x92\x4e\xbf\xa7\x0d\x00\x4e\xa9\xe4\x31\x76\xc3\x92\xbf\x47\x16\x3d\xa2\x0f\x5a\xd0\xcc\xf2\x79\xdd\x98\x2a\x14\x1c\x96\xd4\xb8\x20\xd8\x0e\x02\x47\xbd\xc1\xe0\x68\x1f\x01\xd6\x31\xee\xb8\xba\x12\x0d\x8f\xce\x92\xd3\x16\x2b\x0a\x5d\x5c\x16\x3e\xa2\xb3\x53\x49\x82\x11\x20\x21\x40\x42\x80\x84\x00\x09\x01\x12\x02\x24\x04\x48\x08\x90\x10\x20\x21\x40\x42\x80\xd4\x5a\x80\x84\x70\x06\xe1\x0c\xc2\x99\xed\x81\x33\x17\xe1\x8e\x91\x82\x9e\x37\x47\xc8\x19\x72\x0a\xba\xe9\x3f\x93\xa4\xa0\xe7\xcf\x6b\x9c\x65\x5c\x54\x8a\xb9\x82\x6a\xcc\x1f\x88\x4c\x6f\xf5\xdf\x12\x30\x3d\xa2\x94\xb4\x91\x8d\xd0\x9c\x56\x86\xea\xe0\x09\x2a\x71\x0d\x9d\xca\x3b\xdb\xc5\x88\x65\xbc\x5a\x37\xc9\xc7\x12\xe4\xa3\x5d\x70\x67\x56\x37\xd4\x47\x36\xd2\x89\x31\xb6\x6e\xf9\x6f\xf6\xa4\xb9\x5b\x65\xc9\x6d\x71\xda\x69\x31\x39\x42\xef\x99\xd6\x0d\xf5\xba\xe0\xd1\x13\x78\x29\x77\x42\x6b\x6c\x40\xd7\x7c\x8e\x07\xfe\x8d\xb2\xc0\xbf\xf8\xd5\x4b\x64\x02\x4e\xc0\xf1\xd0\x40\x3a\xfa\xa6\xa9\x8d\x74\x2a\xb0\x83\x91\x20\xe5\x81\x60\x90\x72\x07\xe9\xce\xab\x65\x78\xf4\xe1\x68\x84\x72\x94\x8c\x59\x08\x45\x96\x6d\x56\x12\xd8\x15\x31\x7b\x60\xe2\x5f\xec\x71\xe7\xe8\x18\x9d\x58\x25\xab\x6e\x72\x9a\xc6\xac\xdb\xb6\x6d\xa6\x32\x0b\x30\x0f\x17\x7d\x61\xc2\x75\x4f\x15\xc6\x0a\x63\xac\x70\x9d\xb1\xc2\x9f\x8d\xf1\x1c\x90\x69\x96\x03\xd2\x89\x15\x6e\x86\xdc\x68\xa0\x6c\x8a\x16\x41\xa5\xf5\x26\x8a\xa0\xcc\x93\xfb\x5c\x11\x74\x86\x29\x66\x0c\x13\xf2\x0f\xe4\x26\x65\xd1\x68\x89\x7e\x1a\xb7\x45\x12\xdd\xe7\x6f\x68\x98\xf5\x65\x90\x25\xb9\xbc\x5f\xfc\x71\x4d\x35\xf2\xaa\xf8\xeb\x21\xf1\x57\x96\xec\x55\xcd\x6b\xd9\x61\xff\x75\x99\x2b\xb0\x00\xf3\x3e\x39\x37\x01\x27\xea\x40\xfc\x8b\xb4\x51\x94\x74\x51\x92\xee\x53\x5d\xf0\x6c\x17\x79\xa6\x2b\xf1\xb4\x63\x81\xbc\xa3\x6b\xe7\x48\x3a\x1f\x7c\xa0\xe3\xcc\x60\x3a\x03\x64\x25\x6e\x66\x70\x3b\x5b\x3a\x2c\x2e\x61\xf6\x1b\x5f\xb8\x03\x8c\x2a\xf3\xb3\x17\xa5\xc0\xee\x2c\xea\xc5\x61\x7e\x37\xbb\x42\x2a\xdf\x2a\xa9\xa6\x74\x78\xde\xd4\x8b\x6c\x59\x0e\x49\x97\xe9\xc2\xb7\xfe\xbd\x6c\x6f\x07\xf7\x8f\x03\xe1\x22\x38\xf3\x42\x0c\x9e\x8f\x91\xe7\x62\x89\x2f\x39\xca\xfb\xc7\x63\xe7\x75\x23\xcb\xce\x2b\xf2\x3a\x1b\x76\x5d\x92\x57\xe9\x9f\x64\x69\xca\xf3\x16\x29\x69\xae\x2c\xad\xa9\x4a\x91\x1a\xf7\x2e\x45\x1f\x56\xb2\xec\xc5\xd9\xd9\x44\x41\xcb\x72\x7e\xce\x70\xa9\xa4\xdf\xb4\xc6\x94\xb3\xfb\x92\xaa\x97\x0a\x6a\x4a\xe2\x4f\xa4\x66\x9a\x33\x97\xcc\xfe\x0b\x1c\x00\xe7\xf1\xf2\x2e\xd6\x2d\x4f\xa0\x46\x4b\xb5\xd0\x66\xc9\xf8\x2a\x0e\xe6\x6c\x08\x60\x3e\x03\xe7\xc8\x19\xf9\x94\xe3\x3b\xd2\x23\x7a\x9f\x04\x3e\xa0\x13\xfc\x4f\xc8\xe7\x0e\xc0\x69\x4f\x32\xe1\x30\x9b\x2b\xa7\xa8\x6b\x54\x1a\x96\xfd\x76\xd6\xff\x7c\x2d\xf9\xdb\x38\xdc\x69\x25\xcb\x48\x1c\xaa\x6a\x67\xcd\xb0\x56\x96\xd5\x72\xb2\x97\x5e\xc7\x73\x65\xb8\xdf\x49\xe7\xe7\xa6\xd8\x53\x6f\x80\xd3\x7c\x25\x1f\x87\xa3\x6c\x25\xa7\x60\x08\x92\x51\x89\x49\x52\x4e\xa7\xb6\x6a\x43\x5d\x8e\x5e\xdc\x49\x72\x98\x2f\x69\xf7\xa1\xe2\x32\x16\xc3\x93\x12\x9f\xdf\xed\x8e\xfa\x40\x94\xe5\xe4\x0e\xfc\x21\xeb\xd2\x96\x8e\x7d\xe6\x1c\x9c\x81\x53\x3e\xcd\x61\x53\x83\x8f\xba\x02\x5a\x45\x75\x5a\x45\xbf\x10\xdb\xea\xc6\xcf\x70\xa3\x6a\x12\x4e\xba\x46\x55\xeb\x84\x07\xb3\x7e\x6a\x13\x1e\x95\xf1\x8b\xc1\x82\x24\xf3\x47\x7b\x5d\xe1\x31\x56\xb3\xcd\xe3\x4a\x91\x3e\xf6\xd9\x6c\x99\x0c\x41\xdb\xa6\xf3\xe4\x15\xda\x36\x68\xdb\x6c\xb3\x6d\xd3\x74\x8d\x30\xca\xec\x68\xb0\x58\x9f\x3f\x0e\x47\xc9\x98\x3c\xea\x58\x20\xf7\x8a\x56\x8c\x73\x4f\x47\x58\x2e\x5f\xe9\x83\xa9\x8a\x32\x28\x63\xd5\x23\xd3\x2b\x8c\x18\xf2\xe3\x7d\xe4\xfb\xdd\x9e\x54\x7f\x63\x89\x5f\xab\x25\x1a\xdd\x19\xcc\xb6\x88\x41\xef\xbd\xe9\x7e\x8e\xd9\x4b\x04\x7c\x93\xd1\x7d\xb8\x8e\xb8\xf3\xa5\xe8\xfd\x39\x42\x86\x6b\xdc\x9f\x6c\x66\xd0\x55\x18\x5d\x85\xd1\x55\x18\x5d\x85\xd1\x55\x18\x5d\x85\xd1\x55\x18\x5d\x85\xd1\x55\x18\x5d\x85\xd1\x55\xb8\xc5\xae\xc2\x3b\xc7\x4e\x46\x27\x66\x74\x62\x46\x27\xe6\xda\x9c\x98\xff\x5d\x2f\x8c\xd8\xae\xc7\x55\x39\x12\x37\xfc\xd6\x94\x92\x49\x7e\xaa\x97\x3c\xd3\xed\xfa\x8f\xad\xd7\x16\x4b\x3e\xcd\x1a\xb8\xac\x94\x1a\x14\x50\x2e\xdf\x0c\x72\x3b\x73\x9e\xb2\xa0\x99\x88\x7f\xea\x8d\x1e\xbf\x14\x8d\x80\x0e\x93\x43\x7e\x9f\x14\x67\xec\xbd\x80\x16\xd9\x0f\xb2\x1f\x64\x3f\xc8\x7e\x90\xfd\x20\xfb\x41\xf6\x83\xec\x07\xd9\x0f\xb2\x1f\x64\x3f\x2d\x65\x3f\xc8\x70\x90\xe1\x20\xc3\xe9\x54\x86\xf3\xd3\x0b\x30\x18\x11\x3e\x5e\xd2\x73\x65\x75\xad\xc4\x2c\x07\xf2\xed\x4b\xe4\xef\x25\x97\xdf\x0c\x70\xb5\xcf\xb0\xf6\x91\x2d\xd1\x84\x1a\x14\xd7\xac\x5b\x93\x07\xe9\xa5\x7e\xe4\x22\x5c\xd0\xe6\xc0\x05\xeb\x85\x22\x8a\x40\x14\x81\x28\x62\xe7\xa0\x08\xac\x17\x8a\xf5\x42\x11\x45\x20\x8a\x40\x14\x81\x28\xa2\x2d\x50\x04\xd6\x0b\xed\x44\xbb\x1e\xeb\x85\x36\xa3\x5e\xe8\x5b\x60\x9a\xbb\x07\x9c\x82\x09\xe6\x1e\x70\x14\xc6\x60\x34\x32\x0d\x85\x60\x8f\x2f\x68\x66\xb4\x47\xc0\x83\xc1\x1e\x01\x77\x92\x5d\xdc\x19\xa0\xb6\x78\xad\x80\x98\x7d\xc7\x31\x40\xe8\x11\xc8\xdf\xdf\xed\xa2\x87\x57\x71\x71\x2f\x29\x1e\xca\xd0\xc3\xff\xda\x0a\xce\xc0\xb1\x40\x06\xce\xc1\x19\x5f\x1c\x6c\x0a\x86\x36\x33\xd2\x18\xfb\x8a\xb1\xfa\x75\xc6\xea\xff\x65\x0c\x66\xe9\x3e\x1f\x23\x67\xe0\x14\xec\x9e\xca\x66\xd5\x52\x59\xcd\x91\x51\xd8\xe4\x1a\x0c\x4f\x5c\x76\x96\xcb\x91\x13\x70\x9c\xc9\x91\xcd\xb7\x3c\xc3\xb3\x01\x9c\x86\x49\x37\x1b\xc0\xa6\x5b\x89\x16\x38\x25\xbd\x76\x81\x53\x4d\xc8\x88\xc2\x28\xf9\x7f\x09\xac\xd3\xd2\x24\x25\xb7\x48\x31\x5d\xf8\xa2\xf0\x19\xe4\x57\x70\xe1\x33\xed\x5c\xd6\x0a\x31\x84\x74\x12\xe9\x24\xd2\x49\xa4\x93\x48\x27\x91\x4e\x22\x9d\x44\x3a\x89\x74\x12\xe9\x24\xd2\x49\xa4\x93\x48\x27\x91\x4e\xb6\x1f\x9d\xcc\xc3\x02\xa7\x0a\xb3\x30\xcd\xa8\xc2\x69\x98\x84\x93\x75\x04\x2f\xf1\xc4\x79\x91\x98\xb2\xb1\x54\xe0\xd1\x64\x30\x84\xb8\x87\xdc\xcd\xc5\xb9\x4b\x08\xe0\x36\x74\x9f\x24\x3f\xe8\x83\x4c\x4d\x71\x7d\x36\x69\x2c\x96\x37\xf4\xc2\xfa\x9a\x9a\x2d\x28\xda\x9a\x93\x2b\xea\x99\x3e\xf2\xf6\x5d\x2e\x3e\xf9\x62\x2d\x69\xa2\x16\x9d\x16\xaf\xb3\x16\xa7\x69\x8b\x6d\x91\x32\x2a\x19\x18\x32\x18\xd8\xdf\x36\xf7\x64\x6b\xcf\xcc\x51\xf5\xa5\xb2\x0e\x1c\x7f\x0c\x21\x44\x32\x86\x64\x0c\xc9\xd8\x0e\x25\x63\x18\x42\x88\x21\x84\x48\xc6\x90\x8c\x21\x19\x43\x32\xd6\x16\x64\xac\x7a\xb1\x98\x40\x15\x1e\x53\x49\x21\x10\x6c\x4f\x20\x88\x61\x88\xcd\x08\x43\xfc\xdd\x3e\x38\xe3\xad\xab\x54\x15\x3c\x99\x65\xa5\xac\xae\xae\x17\xc4\xd4\xe4\xef\xe8\x23\x7f\xd1\xed\x56\xe9\xf8\x4c\x2d\xb8\x69\xd9\x6a\xa7\x5d\xf2\x92\x4b\x37\x83\xca\x84\x08\xbd\x44\xb4\x54\x89\x96\xae\x46\x93\xa3\x21\x92\x0c\xab\x0b\xc5\x39\x92\x30\xc4\xd5\x8a\x9f\x71\x56\x85\x48\x09\x91\x12\x22\x25\x44\x4a\x88\x94\x10\x29\x21\x52\x42\xa4\x84\x48\x09\x91\x12\x22\xa5\xd6\x22\xa5\x13\x70\x9c\x1c\x95\xc7\x1c\x1c\xf4\x1a\x11\x29\x09\xda\x3c\x82\x24\x04\x49\x08\x92\x76\x0e\x48\xfa\xc5\x04\xcc\x54\x94\xb9\x0b\x4d\x6d\x15\xc0\x91\xec\x3a\xdd\x7f\x7c\x80\xbc\xa7\xcb\x53\xe9\x2e\x9d\x38\x5c\xb5\x58\xb7\x20\x75\x92\x49\xb7\x5c\x37\xbb\x35\x10\xe6\x34\xa5\x6a\xf7\x23\x3c\xde\x6e\x94\xb9\xd4\xc5\xaf\x5e\x22\xc7\xe0\x08\xa4\xa3\x6a\x34\xb2\x4e\xa6\x44\x0a\xb2\xc5\xe2\xdd\xd7\xa2\xa1\x4c\x9a\x8c\x54\x07\x31\xbe\x52\x70\x69\x48\xbc\xb4\xdb\x37\x23\x83\x51\x85\xbc\xc5\x49\x19\xf6\x94\xf2\x6e\xed\xbc\x64\x2e\xc0\x2c\x4c\xfb\xe2\x84\xeb\x99\x18\x0c\x16\xc6\x60\xe1\x3a\x83\x85\x3f\x11\x6b\x90\x6c\x98\xe3\x11\xbd\x19\x38\xe7\x46\xf4\xb6\x5c\xcc\xb0\x32\xdf\xb5\x89\x99\x1a\x44\x8b\x28\x89\x32\x3f\xd8\xeb\x13\x33\x47\x6b\x2e\xf9\x2d\xca\x9b\xc1\x92\xb7\xca\x68\x6b\xa4\x0d\xd6\xfe\xee\x3c\x91\x86\xb5\xbf\xb1\xf6\xf7\x36\xd7\xfe\x6e\x95\x5e\x19\x59\x02\xbc\x29\x9a\xe5\x8e\xe2\x09\xe4\xc7\x64\x78\x30\xa0\x16\x78\x4e\x2d\x15\xf4\x5b\x6b\x6a\xb1\x6c\x92\x97\x7a\xc8\x9f\x75\xf9\x0a\x7d\x1f\xae\x9e\xec\x77\xc6\xb9\x3d\xc9\xd2\x02\x0b\xe5\xb5\xdd\x9f\xce\xeb\xc6\x54\xa1\xe0\x7c\x08\x1b\xf7\xdd\x6b\xd2\x81\xf6\x4a\x78\x62\x94\x0b\x7c\x3f\x9c\x83\x33\x6c\x3f\x9c\x80\xe3\x70\xb4\x96\xfd\x30\x96\x72\x87\x63\x41\x33\xcb\xf6\xca\x5f\x8e\x5e\xd8\xa3\x24\x65\xd5\xcb\x76\x5a\xa8\x2c\x98\x2d\x2e\xfd\xa8\x04\x4d\x78\x94\x8d\x47\xd9\x78\x94\x8d\x47\xd9\x78\x94\x8d\x47\xd9\x78\x94\x8d\x47\xd9\x78\x94\x8d\x47\xd9\x78\x94\xdd\xda\xa3\x6c\x3c\x2e\xc6\xe3\x62\x3c\x2e\xde\x9e\xe3\xe2\xff\x12\x07\x62\x91\x90\xf5\xb2\x6e\x66\x95\x82\x56\xcc\x8f\x90\xe7\xe2\xe4\x4b\x71\xd8\x2b\xfc\x2d\x91\xc8\xab\x65\x49\x2b\xae\xea\xc6\x9a\x33\x82\x8a\xc4\x6c\xed\xe4\xab\xf3\x6a\x79\xca\xbd\x76\x6a\x71\xee\x02\xfd\x7b\xe3\x98\x7e\x45\x43\x13\x15\x0d\x4d\xd4\xd2\xd0\xbc\x06\x57\x38\xb5\xb8\x00\xb3\x8c\x5a\x9c\x85\xd3\x30\x59\x07\xb8\xb7\xdf\x31\x8a\xe7\x91\xff\xd5\x03\xaf\xb1\x93\x89\xd0\x0f\xac\x96\x55\x95\x6c\x96\xea\x4c\x26\xf9\x66\x0f\xf9\x93\x2e\x37\x43\xc8\x50\x75\xbe\xb4\xcc\xef\x9e\xe2\x77\x27\x0f\xbb\xf5\xa4\xbc\xbf\xdc\x6e\x88\x49\x09\x47\x4c\xe7\xf9\x64\xd1\x49\xa2\x93\x35\x0e\xc7\xe0\x48\x64\xd6\x5c\xef\x68\x88\x84\x29\x2a\x5b\xf7\x62\x34\x81\x1a\x26\x83\xfe\x1c\x1c\xde\xe7\x61\xf2\x0d\xc4\x4b\x88\x97\x10\x2f\x21\x5e\x42\xbc\x84\x78\x09\xf1\x12\xe2\x25\xc4\x4b\x88\x97\x10\x2f\x21\x5e\x42\xbc\xb4\xe3\xf0\xd2\xef\xc5\x61\x17\x83\x1f\xe4\xb7\xe3\xe4\xdf\xc6\xa1\x9b\xda\xe8\x1c\x25\xb9\x5f\xb0\xa9\xc5\x39\x7b\xb5\x9b\x49\x92\x57\x19\xd4\x98\x5a\x9c\xb3\x1a\x6e\xa0\x6b\x68\xc3\x30\x52\x01\x5e\xc7\xc9\xc4\x3c\x5c\x64\x64\x82\x55\xc1\xaa\x0f\x23\xd9\xaf\x19\x49\x92\xfe\xe5\x01\xe8\xb7\x49\x92\x3f\xf3\xac\x3f\x7a\xe3\x1b\xaf\x25\xef\x10\xc8\xd2\x70\xd5\xc0\x0d\x7f\x06\xa2\xa4\x44\x2f\xe7\x68\xc9\xff\x5b\x3b\xc4\x6c\x38\xe5\x91\x7c\x7d\xdb\x6a\xcc\xc6\x52\x34\xfe\x19\x21\xc3\x51\x29\x58\x3d\x00\x28\xf1\x0d\xa1\x62\xdb\x68\x54\xb0\x46\xc5\x44\xf4\x5a\x77\xb4\x6e\x2e\x36\x1d\xa7\x11\x36\x19\xe8\xd4\x8c\x71\x1a\x2d\x8a\xd3\x08\x95\x07\x9b\x8f\xd3\x68\x82\x68\x61\x71\x1a\xb5\x89\x96\x1a\x04\x8a\x2b\x7d\x32\x2f\xed\x75\x45\xcb\xc9\x9a\x03\x34\x2a\x64\x4c\x4f\xc9\x4d\xec\xdd\x6c\x09\x83\xb1\x19\x9d\x27\xc6\x30\x36\x03\x63\x33\x6e\xaf\xd8\x8c\xba\x85\x7c\x64\x6c\x46\x13\x34\xc8\xf9\xd3\x30\x49\x4e\xca\xe3\x4e\x7c\xc5\xfd\xd5\x92\x87\x56\x86\x67\x34\x3c\x78\xe2\xa7\x7a\x61\x94\xbb\x0c\x14\xd5\xf2\x4d\xdd\xa0\xbb\x94\x0d\xad\xa6\x0b\x79\x0b\xf9\x4f\x25\xbd\xa0\x65\x35\xd5\x24\xdf\x90\xc9\xd7\xba\xe1\x2e\xf7\x0e\xfa\xd1\xba\x65\x51\xc2\x62\x4e\xdb\xd0\x72\xeb\x4a\xc1\x93\xac\xd0\x21\xf2\x57\xf8\x4d\x8b\xb4\xad\x5b\x0d\x49\x53\x98\x4a\x8e\xb1\x1b\xae\x38\xdd\xb9\x9e\xf6\x3c\x65\x41\x33\x6f\xbb\x63\xf4\xed\x48\x3d\xd8\x1b\xbc\x21\xf6\x11\x60\x1d\xe3\xa7\xea\x6f\x89\xde\x14\x93\xe4\xa4\xb5\x29\x2a\xd6\x94\xb5\x47\x3c\xd3\x83\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\x8e\x67\xec\x78\xc6\xbe\xe3\xce\xd8\x7f\xfb\x3e\xb8\xc2\x79\x0c\xa3\x2d\xb7\xa2\x72\xfe\x95\xf4\x5c\x4e\x33\x8d\x75\x66\x13\xaf\xac\xe7\xf2\x95\xb9\xff\xbe\x97\x20\x9f\xeb\x82\x57\xf0\xf6\x9c\x24\x50\xa3\xd5\x0f\x91\xf5\xdc\x8c\xd3\x6c\x86\x35\x9b\x3c\x4a\xef\xe0\x26\x7b\x45\x06\xa8\x80\xeb\x9b\x72\xb6\xbc\xb9\x88\x8f\x14\x7f\x67\x27\x73\x4b\x40\x2f\xb7\x7a\xca\xbc\x29\x1c\xc2\xbb\xe3\xd6\xe3\xad\xe8\x4c\x65\x8e\xc0\xa7\xf6\x54\xcc\xdc\x91\xc8\x83\xe7\x80\xc9\x1b\xb7\x6e\xda\xde\xf9\xcb\xbc\x0e\xe8\xc7\xc5\x7b\x9e\xb3\xb5\x09\xc4\x23\x1d\x3c\x99\xae\xf3\x64\xfa\xb7\x62\x0d\x97\x26\xcb\xfc\x8c\x7a\x01\xe6\xdd\x33\xea\x6d\x14\x51\xec\xb4\xba\xc9\x22\x2a\xf3\xc1\x7d\x15\x22\xea\x54\xed\x07\xd8\x01\xb2\xea\x18\x3b\x7f\xd9\x3e\x49\x85\xe7\xda\x9d\x27\x04\xf1\x5c\x1b\xcf\xb5\xb7\xf9\x5c\xbb\xf5\xba\x6b\xe4\x09\x77\x6d\x9f\x86\xb0\xf4\xb2\x91\xdf\x8a\xf9\x73\x70\x86\x9c\x92\x27\x9c\xd3\xee\x83\x9e\xd3\xee\xca\x3b\x3a\x22\x1f\xe1\x4f\x5f\x86\xe3\xdc\x84\x33\x56\x94\x6c\xca\x9e\x16\xb6\xa1\x84\xa3\xf5\x6c\x61\xdd\x2c\x53\x01\x59\x50\x57\xa8\x6c\x2e\xe6\x4d\xf2\xb5\x05\xf2\x85\x1e\x78\x15\xbd\x6f\x4a\xbc\x8d\xf9\x9b\x56\x8f\x27\x9f\xe6\xcd\x2d\xe9\x05\x35\xc3\x9b\xe3\x79\x0b\x97\xfc\x6d\x5d\x4f\x57\x5e\xda\xe6\xa7\xe1\x19\x3c\x14\xc6\x43\x61\x3c\x14\xc6\x43\xe1\x1d\x73\x28\x9c\x69\x9b\x43\xe1\x86\xf7\xa4\xee\x43\xe1\x0c\x1e\x0a\xe3\xa1\x30\x1e\x0a\xe3\xa1\x30\x1e\x0a\xb7\xfe\x50\x38\x83\x67\xb8\x1d\x78\x86\x9b\x69\xf7\x33\xdc\xcc\x6d\x78\x86\x3b\xaf\xc2\x3c\x07\x3d\xd3\x30\xc5\x40\xcf\x24\x9c\x84\xf1\x50\xd0\xc3\x28\xc1\x46\x3a\x55\x69\x96\x2f\x68\x66\x34\xe4\x89\x4a\x83\xf6\x58\x34\xe3\xb9\x48\xce\x5b\x48\x27\x94\x58\x58\x94\xa7\xb2\x8f\x1e\xef\x6d\xf9\x77\xf7\x84\xd0\x8b\xfb\xf8\x07\x42\x52\x82\x40\xc5\x20\xff\xb1\xb5\xa8\x82\x93\x85\x39\xb8\x00\xb3\x3e\x10\x5f\x2d\x2d\x5d\xf8\x64\x21\x83\xc7\x83\xc8\x3a\x0f\x22\xff\x29\x06\x97\xf8\xc1\xe1\x0c\x64\xdc\x83\xc3\xea\x09\x12\xc3\x57\x22\x2c\xd0\xc6\xc6\xc8\x2c\x4c\xc3\xee\xa9\x6c\x56\x2d\x6d\xa9\xb5\xc6\xe4\x73\x0c\x7f\x80\x2d\xc8\x5a\x29\xa8\xaa\x48\xcd\x92\x6e\x96\x21\xf9\x8f\x52\x88\x20\xeb\xe7\x3a\xad\x94\xd5\x0b\xd4\x42\xb5\x3e\x7b\x01\x42\xed\x18\xbf\x30\x48\xa8\x39\xb7\x36\x5d\xbc\x21\x38\x45\x70\x8a\xe0\x14\xc1\x29\x82\x53\x04\xa7\x08\x4e\x11\x9c\x22\x38\x45\x70\x8a\xe0\x14\xc1\x29\x82\x53\x04\xa7\xed\x07\x4e\x2d\x72\x31\xca\xc8\x45\xfc\xea\x25\x96\x01\xe6\x64\x1d\x4e\xb1\xdc\x23\x38\x12\x9d\x26\x83\x21\xc0\x3d\xe4\x6e\x2e\x7f\x5d\x1b\xbf\xb5\x18\xb5\xf1\x3e\x69\xff\x74\x89\x67\x9b\x34\x47\xac\x1d\xe9\x3a\xa2\xf1\xf0\xa2\xac\xa9\xe5\x0c\x8d\x76\x82\x7c\xe5\x12\x79\x4f\x0f\xbc\xd2\xba\xd0\xf1\xe9\xee\x8f\xf0\x3f\x5b\x9e\x9b\x61\x0d\x24\xef\xa3\x17\x2e\xf3\xbb\x2d\xf7\x6d\xe7\x47\x74\x34\x43\x5e\x82\xbc\x04\x79\x09\xf2\x12\xe4\x25\xc8\x4b\x90\x97\x20\x2f\x41\x5e\x82\xbc\x04\x79\x09\xf2\x12\xe4\x25\xc8\x4b\x36\xcb\x4b\x72\x3c\x27\xfa\x28\xcb\x89\x1e\xbf\x7a\x89\x4c\xc0\x09\x38\x1e\xea\x82\x61\x9b\xfe\x76\x48\xa1\x63\x95\x37\xc4\xcf\xec\x4d\xd1\x80\xe4\x24\x19\xb7\xf8\x87\xfd\xe4\xca\x70\x72\x8b\xa0\x78\x31\x05\xc8\x1f\xd8\x53\x49\x24\x88\xeb\x53\xe6\xc0\x87\x07\xf8\xdf\x9a\x8d\x1f\x38\x2d\xb8\x08\xe7\x61\xc6\xe7\x3c\x76\x14\xc6\x36\x3f\x01\xe8\x3b\x86\xbe\x63\x75\xfa\x8e\xfd\x43\x0c\x66\xb9\x10\x38\x03\xa7\x98\x10\x38\x0e\x75\xad\x41\xee\xb4\x9a\x66\x4e\xab\x8e\x0b\x5a\xbd\x6d\x5d\xe2\x1e\x68\x33\x90\x11\x3c\xd0\xea\x6d\xac\x7e\xc9\xc4\x7c\xb9\x6a\x94\x4c\xc1\x82\x27\x52\x5e\x25\xbf\x22\x55\x4a\xa6\x07\x83\x9d\xc4\x1c\x29\x65\x39\x91\xf9\xa4\x94\xeb\x16\xd6\x24\x79\x85\x74\x13\xe9\x26\xd2\x4d\xa4\x9b\x48\x37\x91\x6e\x22\xdd\x44\xba\x89\x74\x13\xe9\x26\xd2\x4d\xa4\x9b\x48\x37\x91\x6e\xb6\x1f\xdd\x6c\x67\x6f\xb0\xa6\x22\x85\xc6\xbb\x7f\x7d\x7b\x2f\x8c\xd8\xc5\x86\xc3\x13\x49\x3b\x89\xa3\xd5\xc7\xd5\x2c\xf9\xe4\x5e\xf2\xde\xb8\x5b\x93\xb2\x37\xab\x17\x8b\x54\x46\x5e\x98\xbd\xe6\x26\x0b\x64\xf6\xab\x9a\xa5\x2b\x60\x51\xcf\x25\x7b\xac\x8b\x78\xfd\xc9\x0b\x6a\xd9\x93\xb7\x73\xf6\x71\x35\x3b\xd6\x95\x1c\x49\xf2\x5c\xce\xe3\x70\x3f\x9f\xdf\x7b\xe1\x1e\x36\xbf\x77\xc1\xde\xcf\xc4\x76\x83\xd5\xef\xc8\xf9\xea\x09\x9e\x2f\x20\xbb\xad\x5e\xc0\xa3\x8b\xd1\xd3\x34\x4c\x06\x2b\x2a\xb8\xf1\xae\x5e\x65\x2c\xc4\xf4\x06\x38\xbf\x4f\x18\x92\x3e\x7b\x48\x16\xaf\x2e\x87\x8f\x89\xec\x19\x93\x45\xdd\xec\xb8\x41\x99\x5f\x07\x93\xbc\x35\xa1\xdb\xeb\x75\x69\x5a\x5f\x5b\xa3\x32\x40\x33\x2d\x11\xcb\xa4\x7f\xd6\xfa\xab\x35\x3e\xeb\x65\x35\x45\xb5\xcb\x0d\x49\x31\x0c\xe5\x56\x4a\xba\xa2\x97\xed\x1f\xf8\x37\x90\xea\x2e\x92\x79\x43\x2d\x14\x52\xf2\x9d\xd6\xdd\x22\xfa\xfc\x60\x0c\x7e\x2e\x46\xde\x17\x4b\xbc\xc7\x95\xba\xd3\x1c\xbe\xaa\x54\x34\x5a\xd6\xb8\xfb\x3c\x4b\xf7\x64\x0d\x79\xbf\x86\x22\xb8\xa5\xf7\x32\x09\x6c\x30\x7c\xc3\x7e\xd2\x8b\xaa\xf8\x33\xdf\x82\x25\x3d\x97\x92\xf7\x38\x7f\x16\xbb\x36\x09\x27\xc9\xb8\x7c\xcc\x49\x5b\x98\xf0\x25\x3e\x14\x86\x72\x3b\x72\x1e\xbe\x15\x74\xb2\x96\x78\xcc\x1e\xb5\x2b\x4b\x2a\x3f\x05\xe0\x06\x55\x59\x29\xe6\x14\xc3\xc6\x41\xae\x8c\xb7\xde\xd9\xfa\xa2\x69\xa6\xf5\x1d\x13\xc7\x91\x29\xd8\xf2\x1d\x66\x39\xa7\x1a\x86\x47\x9a\xfb\x1e\x79\x35\xf8\x91\x5a\x91\x0a\xb5\x4d\x3d\x72\x55\x29\x98\x6a\x4a\xde\x65\x96\x73\x5a\xd1\xf3\x48\x03\x4a\xa4\x98\x28\x44\x3c\xd2\x12\xa4\x75\xbe\xa6\xbe\x5e\xf6\x3c\xf3\x71\xd8\x20\xe5\x84\x61\x3f\xf3\x0d\xd7\xae\xfd\x10\x5b\x4d\xc6\xba\xea\x3f\xc1\x51\x24\x2a\xb6\x6d\x8d\x5d\x29\x14\x74\x56\x07\xd1\x51\x18\x98\x10\x09\x7d\xdf\x2e\x2a\xe2\xc5\xca\x01\xef\x4b\x40\x26\x42\xc6\x1b\xaa\x03\x8a\xe9\xaa\x35\xe8\x07\xcd\x70\xcb\x05\x64\x95\x82\x4a\x9e\x3f\x40\xde\x23\xd4\x9a\x4f\xf3\x32\x01\xf4\xa7\xca\xe4\xcd\x4b\x6e\x7b\xd3\x4e\x7b\xc9\x94\x5b\x6f\xde\x95\x74\x81\x97\x2e\xd3\x66\x1b\x5c\x21\xe0\x87\xe1\x1c\x17\xa0\x27\x61\x9c\x09\xd0\x34\x8c\xc0\x70\xe8\xa9\x83\xb2\x5e\xd6\xe9\xdb\x69\xc5\x3c\x53\x15\x68\x8f\xb6\x5a\x13\xa0\x36\x01\x1b\x50\x07\x5a\xe8\x8c\x25\x75\x79\x7f\x12\x7f\x22\xd4\x9d\x3f\xea\xa4\xff\xdf\xcc\xa4\xa4\x3d\xb5\xe7\x5b\x3f\x2f\x99\x69\x98\x82\xb3\xbe\xb3\xd2\xcd\x4e\x0c\x1e\x93\xe2\x31\x69\x9d\xc7\xa4\xbf\x18\x6b\x80\x5c\x98\xe5\x27\xa4\x67\xe0\x94\x7b\x42\xda\x52\xf1\xc2\xf2\xf9\xd7\x26\x5e\x44\xf9\x11\x21\x6a\x32\x3f\x10\x6a\xcf\x9f\xae\x4c\xdd\xbf\x19\x39\x33\x22\xd4\x9f\x6f\xad\x94\xc1\xac\xfd\x9d\x27\xce\x30\x6b\x3f\x66\xed\xdf\xe6\xac\xfd\xad\xd0\x27\x23\xf3\xf4\x6f\xca\x64\x0f\xd3\x22\x3d\x26\xfb\x18\x8c\x92\x94\x3c\xe4\xd8\x98\x77\x8b\x06\x2a\xbb\xbe\x23\x72\xf1\xff\xc4\x01\x38\x16\x61\x14\x99\xaa\xb1\xa1\x39\x7f\x74\xaa\xa6\x7d\xf5\xb5\xe4\x3b\x22\xeb\xa9\x5a\x2e\x6d\x99\xb7\x91\xec\x09\x32\x7d\xac\x1f\x9b\x52\x0f\xed\x7a\x78\x76\xae\x49\xbe\x6c\x8f\xc2\x18\x5b\xb6\x43\x90\x84\xc3\xa1\xcb\x96\xbe\x26\x5b\xaf\xbc\xaf\xf6\xc2\x9c\x8b\x5e\x77\x87\x48\x9f\x1f\x15\x59\x8d\x78\x13\x6e\x55\xb7\x99\x12\xcf\x0a\x16\x4e\x7f\x54\x81\x33\x7b\xb8\xfb\x42\x8c\x9a\x26\x8e\x78\x86\x2a\x7f\x13\x3e\x1d\x60\x13\x23\x8b\xdf\x7c\x34\x61\xea\x34\x61\x3e\x18\xdb\xd2\x9e\xe6\xdf\xb1\x34\xfb\x8e\x39\xd6\xcb\xe6\x5a\x88\xfa\x8e\xb5\x44\x5c\x50\x1b\x28\xf3\x7b\x82\xc5\x32\x5a\x73\xb1\x31\x5b\x6e\xc8\x81\x46\x4a\x93\xa4\x06\xda\x25\x9d\x27\xa3\xd0\x2e\x41\xbb\x64\x9b\xed\x92\xeb\x5b\xfb\x18\xb4\x50\x94\x47\x59\x37\xf3\x47\x61\x8c\x8c\xca\x29\xc7\xae\xb8\xc7\x63\x8b\xf0\x26\x3b\xc2\x1a\xf9\xe8\x65\x98\x89\xae\x0c\x56\xb5\xde\xb3\xa1\x17\x54\x93\x7c\x63\x81\x7c\xb4\x07\x0e\x04\x25\xa8\xe5\x01\x08\x72\xf5\x64\x2d\x4b\x7a\x41\x4d\x26\x43\xca\x83\xf9\x0a\x6e\xd2\x6b\x31\x6d\x0b\x06\x36\x60\x60\x03\x06\x36\x60\x60\x03\x06\x36\x60\x60\x03\x06\x36\x60\x60\x03\x06\x36\x60\x60\x03\x06\x36\x60\x60\x03\x06\x36\x60\x60\xc3\x66\x03\x1b\xde\x04\x53\x1c\xdd\x4c\xc0\x09\x86\x6e\xc6\x60\x14\x52\x51\x95\x73\x78\x56\x04\x6a\x8d\x37\x24\x5d\xcb\x4a\x34\xe0\x39\x4b\x4e\xd7\x98\xcf\x96\xf6\xaa\x32\x8e\x41\xfe\xe9\x3d\xd5\x18\xc5\x5d\x4e\xfa\x16\x86\x23\x86\x42\x8b\x80\x35\x13\x48\x70\x7e\x70\x0e\xce\xc0\x29\x1f\x40\x1f\x82\x64\xed\x53\x82\xc8\x1c\x8f\xf5\xea\x3c\xd6\xfb\x76\x2c\xfc\x0c\xff\x34\x97\x13\xc7\xe1\x28\x93\x13\x29\xd8\xd4\xa2\x84\x0c\x3f\xf1\x9b\x84\x93\xee\x89\xdf\x66\xdb\x98\xe6\x99\x5c\x4e\xc1\x84\x90\xc9\x65\x93\x8d\xd8\x32\xa9\x36\x99\x53\x4d\xa4\x44\xca\xa3\xc8\xc2\x5e\x7f\x2d\x55\x93\x49\x07\x02\x13\xb7\x30\xf9\x74\x3c\xb4\x9e\x97\x2f\x7b\x4b\x53\x25\x15\x92\x4e\x24\x9d\x48\x3a\x91\x74\x22\xe9\x44\xd2\x89\xa4\x13\x49\x27\x92\x4e\x24\x9d\x48\x3a\x91\x74\x22\xe9\x44\xd2\xd9\x7e\xa4\xb3\x9d\x53\xb8\xb4\x00\x80\xde\x8e\x3e\x6a\x1f\xec\x85\xe3\xdc\x47\x4d\xa1\x16\x65\x5e\x63\x7e\xc7\x01\x0e\x6a\x6c\xb6\xd9\x95\x56\x00\x0d\xf9\x53\x99\xbc\xd8\x0d\xaf\xf1\xdd\xe7\xb0\x95\x0d\xeb\x1b\x5e\xcc\x69\x1b\x5a\x6e\x5d\x29\x88\x6b\x56\x71\xf4\xe5\xa9\xc5\x39\xcb\xe7\x2f\x25\xe5\xd4\x92\xa1\xb2\xac\x08\x13\x8e\x26\xd5\xcf\x9a\xe9\x77\x31\x81\xc7\xee\xd3\x4b\xaa\xb5\x05\xb5\xa2\x59\x56\x95\x5c\x2a\x39\xc0\x6e\x98\xf2\xf6\xca\xa2\x36\xee\xc3\x16\x34\xb3\xdc\xe6\x6e\x6e\xf3\x8f\xc1\x22\xdf\x4e\x73\x70\x81\x6d\xa7\x29\x38\x0b\xa7\xeb\xd8\x4e\x4c\x6c\xcc\x52\xfd\x36\x72\x4b\xf5\x06\x6f\xa9\x7d\x04\x58\xc7\xf8\x61\x82\x1a\xbd\x97\x32\xe4\x9c\x1d\x9f\x16\xb8\xae\x2a\x77\x0f\xdf\x59\xee\x0c\xc1\x3c\xc2\x2f\x84\x5f\x08\xbf\x10\x7e\xed\x18\xf8\x35\xdf\x36\xf0\xab\xe1\x3d\xa9\x1b\x7e\xcd\x23\xfc\x42\xf8\x85\xf0\x0b\xe1\x17\xc2\xaf\xd6\xc3\xaf\x86\xdb\x9b\xf3\x48\xd3\x3a\x90\xa6\xcd\xb7\x3b\x4d\x9b\xbf\x0d\x69\x1a\xf9\xd0\x10\x4c\x70\x34\xb3\xc2\xd8\x4b\x44\xa8\x60\xd6\xd0\x8b\x8f\xea\x2b\x76\x62\x13\xf2\xe2\x20\xf9\xd2\x2e\xb8\x8b\xdd\xeb\x40\x99\x04\x5b\x6a\x5e\x13\x70\xda\xd0\x8b\xf3\xfa\x0a\xcf\x66\x92\xa1\x97\x57\xf8\xe0\x59\x97\x34\xd8\xb9\xe5\xd9\x18\x3c\x13\x23\x4f\xc7\x12\x1f\x73\x26\xe5\x47\x63\xcb\x5c\xa1\x60\x4a\xc9\xe3\xec\xe3\xbe\x42\xff\xa5\x64\xcb\x29\x49\x9a\xa5\xff\xb5\xff\xbe\xa6\x68\xcc\x71\xcb\x94\xb2\xbc\xbe\xfe\xb0\xf5\x4e\x59\x3b\x2a\xb7\xa0\x3d\xa6\x4a\xfd\xce\x6b\xf4\x53\x09\x60\x13\xa6\x94\xb4\x58\x50\x8a\x45\x6b\x4f\xb3\xd9\x52\x0a\x74\x13\xa5\x53\xe9\x13\x29\x79\x17\x7b\xa4\x38\x1f\x99\xa7\x62\xf0\xe1\x18\xf9\x50\x2c\xf1\x01\xa7\xbb\x4f\x38\xbd\x75\xf0\xc1\x8a\xdd\x6f\xfa\x08\x69\x96\x77\x95\xee\x94\x92\x69\x77\xcb\xfa\xf4\xb0\xd8\x62\xfa\xcd\x60\x0a\x00\x5f\x18\x9b\xe8\xe1\x1d\xfc\x31\x5b\x71\x35\x65\x6b\xc3\xad\xc0\xc5\x27\x79\xab\xe9\x30\x5f\x17\x0d\x87\x52\x64\xc8\x82\x43\xac\x07\x76\x8a\x6c\xeb\xf9\x15\x64\x28\xf1\xef\x77\xfb\xd7\xf1\x03\x76\xce\x98\xe0\xa5\x6c\x67\x8a\x69\xe5\x6a\x9e\x81\x0c\x9c\xf3\x39\x95\x6e\x7a\xf0\xd1\xb1\x14\x1d\x4b\xeb\x74\x2c\xfd\xa5\x58\x23\x36\xff\x79\xee\x43\x7a\x16\x4e\xbb\x3e\xa4\xcd\x10\x22\x8d\x97\x12\x11\x39\x64\x92\x3f\xb1\xdf\x2f\x44\xf6\x5b\xde\x9f\x8a\x23\x37\x7a\xf9\x5f\x5a\x29\x36\xae\xc1\x12\x2c\x8a\x62\x23\x99\x81\x73\x75\x30\xfe\x19\xd6\x73\x2b\xc9\x38\x8a\x91\x28\x31\xf2\x52\x1c\xbe\x1d\x27\xdf\x8c\x27\x5e\x74\x06\xe8\xd3\xf1\x6b\xa2\x16\xaa\x15\x25\x93\x6b\x92\xd2\x8a\xba\xaa\x73\xa3\xce\xb6\xbc\xdc\x13\x07\xcb\xd8\x65\x5d\x14\xc4\x44\x51\x2f\x0e\x17\xd5\xbc\xc2\x06\xc2\x52\x44\x45\x71\xc2\x19\x8c\x33\x05\xd6\x4a\xd4\xd6\xd6\xd4\x1c\x15\x58\x85\x5b\x16\xb8\x16\x8f\x25\x8a\x5a\x61\xc8\xd2\x4f\x99\x1d\x23\xe5\x0d\xfa\x09\x2c\xa9\x86\xa6\xbb\x79\xc4\xdd\xaf\x61\xf9\x56\xc9\x35\xfc\xd7\x4d\xd5\x97\x04\x5f\xa1\x77\xda\x2f\x64\x3d\x64\x55\x50\x46\x34\x7a\x03\xeb\x27\xcf\x85\x12\xd0\x47\x99\xb0\x2e\x2c\xb2\x1e\x04\x9d\x62\x7f\x35\x0e\x2f\xc4\xc9\xf3\xf1\xc4\x73\xce\x30\x3f\x15\x9f\x11\x8e\xf9\x4a\xd4\xe4\x50\x1d\x74\xb4\x68\xe8\x25\x25\xcf\x26\x60\x51\x2f\x68\xd9\x5b\x43\x7c\x0c\x38\x2c\xb1\xdf\xc5\x3d\x27\xe4\xea\xd0\x78\x4a\x12\xd4\xc6\x9c\x5a\x52\x8b\x39\x6a\x0e\x3b\x14\x52\x95\x74\xa3\x74\x43\xa1\x56\x2e\x1b\x56\x63\x5d\x1d\x61\x89\xd5\xf9\x78\xca\xfc\x57\x59\x5a\xd5\x8a\x4a\x41\x7b\xc2\xc6\x7f\x2b\x2a\xd5\xeb\x19\x55\x18\xe1\xfa\x7c\xce\xb5\x17\x79\xe3\xfd\xa6\x7b\x13\xe7\xe4\x29\x69\x56\x63\xcb\x59\xe8\xb8\x6e\x54\xbe\x19\x83\x46\xfc\xc8\x8a\x63\x7a\xb6\xd9\xf4\xf2\x8d\x94\xbc\x9f\xf7\x67\xc6\x7e\x11\xd3\xa3\x87\xbe\xab\x1b\xde\xd9\x4d\x9e\xec\x4e\xbc\xec\x98\xd0\x5f\xa7\x26\x34\x7b\x28\xdd\x52\x37\xf4\x9b\x52\x5e\x31\x56\xa8\xa9\x29\x78\xb6\x3b\xfb\x42\x35\x56\x75\x63\x8d\x8e\x45\x60\x4f\xaf\xfa\x1e\x1e\xde\x51\xb6\x9e\xed\xc5\x58\xe2\x6f\xa5\xd1\x85\x92\xd5\x72\x2e\x10\x67\x6c\x95\xe7\xca\xb1\x47\x97\x9a\xa3\x16\x79\xb4\xe9\x69\x4a\x18\x46\x9b\xbb\xd9\x56\x92\xab\xd8\x7b\x1f\x96\x92\x78\x88\x02\xfb\xb6\x8a\xc2\xa1\x9f\xbf\x43\xbf\x34\x6c\x4d\xbc\x77\x61\x98\x93\x52\x7f\x46\xc9\x3e\x46\x3f\x2f\xc5\x1c\xbd\x4a\x29\x14\xf4\x9b\xec\x22\xdf\xc0\x71\xd8\x6d\x2d\x7d\x6f\x23\xf6\x1b\xac\x38\x2d\x4d\x4a\xfd\xe7\x75\x43\x15\x9a\x95\xb2\x8a\x99\x55\x72\xf4\xed\xad\xf1\x61\xc2\x96\xb7\x67\x72\xe9\x55\xd1\xe0\xaa\xd3\x46\x4a\xbe\xbb\xe4\x5f\x37\xe2\x37\xff\x0b\xb1\x06\x7b\x5c\x2c\xf1\xf0\x8f\x4b\x30\x27\x84\x7f\x34\xd9\x8b\x43\x0a\xfe\x6e\xef\x21\x77\xf2\x61\x6a\x86\x49\x91\xf9\xa3\xbd\x7e\x6d\xe0\x50\x45\x5e\xb9\x60\xdb\x82\x67\x93\x6b\x91\x8a\x80\xd9\xe4\x3a\x4f\xf5\xc0\x6c\x72\x98\x4d\x6e\x9b\xb3\xc9\xbd\x29\x3c\x06\x71\xeb\x36\x64\xcd\x69\xae\x6b\x13\xeb\x11\x92\xdc\x23\xf5\xab\xe7\x96\xb3\xda\xe8\x88\xdc\x72\x5f\x18\x82\x29\x0e\x87\xb3\xba\x6e\xe4\xb4\xa2\xcf\x69\x2f\x8c\x12\x33\x75\xdb\x61\xc4\xff\x73\x90\xfc\xc7\x5d\xf0\x4a\xb1\x89\x47\x36\xd2\x89\xd7\x06\x50\xe2\x05\x7a\xa3\x9d\xf1\xda\xbd\x5c\xcc\xa8\xca\x2e\x41\x46\xdc\x59\x8c\xd8\xb3\xbc\x36\xd2\x29\x36\xc9\x5b\x65\xc4\x6f\x88\xde\xf9\xc7\xc8\x11\x6b\x6b\x07\x2c\x70\x4b\xbd\xe3\x7d\x11\xb3\x4f\x26\xbe\xbc\xbb\x72\x39\xdf\x17\x0c\x8b\xf9\x8a\x76\x93\x8a\xb7\x6e\x51\x6f\x16\x15\x07\xce\x01\x2a\x5a\x88\x8a\x5b\x84\x8a\x83\x65\xc0\xe6\x51\x71\x7d\xb2\xa4\x69\xc2\x22\x8a\x18\xbf\x6f\x7f\xa5\x2c\x79\x85\xc3\x8c\xb9\xf8\xb0\x88\x71\x2b\xa5\x07\x12\x63\x24\xc6\x48\x8c\x91\x18\x23\x31\x46\x62\x8c\xc4\x38\x98\x18\x37\x4d\x67\xc8\xbc\xb8\xb7\x52\x29\xe8\x8b\x40\xc7\x5c\x55\xb0\xcb\x90\xb4\x44\x53\x40\x70\xdc\x79\x1a\x08\x82\x63\x04\xc7\x1d\x02\x8e\x03\x2d\xc1\x9a\xc1\x71\x6d\xd2\x3d\x4c\x84\x57\x91\xfa\xd5\xeb\x24\xb2\xa6\x3a\x82\x1e\xbf\xbd\x17\xd2\x9c\x1e\x5b\x2e\xe9\xc1\xd1\xde\xd6\x8f\xd9\x82\x62\x9a\xaa\x49\x9e\x97\xc9\x97\xbb\xe1\x95\xd6\x5f\x9d\x83\xd3\xc7\x6b\x0b\xf4\x5e\xe6\xb7\x4d\xd3\xc6\x1a\x14\xea\xdd\xcb\x6e\xb0\x1a\xb6\x0e\x63\xc5\xc7\x60\x90\xf7\x16\x82\xbc\x1f\x89\xde\x64\xa7\xc8\x84\xb5\x99\xbc\xcb\xc8\x2e\x0f\x24\x4c\x45\x40\xb6\x04\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\x6e\x0c\xef\xc6\xf0\xee\x1d\x10\xde\xfd\xe4\x02\x24\x47\x94\x92\x56\xcd\x59\x8f\x8e\x9e\xc1\xfa\x4e\xfe\xf0\x12\xf9\x1f\x92\x5b\x05\xfd\x70\xf5\x8a\xaf\x0b\xf4\xce\x25\x7a\x67\xf2\x41\x7a\xa5\xbf\xf8\xb9\xfb\x7b\x9b\xf3\x11\xac\x80\x80\x94\x00\x29\x01\x52\x82\x9d\x43\x09\xb0\x02\x02\x56\x40\x40\x4a\x80\x94\x00\x29\x01\x52\x82\xb6\xa0\x04\x58\x01\xa1\x13\x8d\x7a\xac\x80\xd0\x8c\x0a\x08\x6f\xe6\x45\x18\x47\x59\x11\xc6\xf8\xd5\x4b\xe4\x08\xa4\x61\xa4\x8a\x1b\x8c\xa1\x32\xf7\x17\xc7\x1c\x6f\x48\xb1\xd7\x85\xe8\xa3\xfb\x01\xd2\x6f\x1d\xdd\xcb\xb2\xed\xec\xe8\x74\xc2\xe3\x2e\x23\xff\xe5\x6e\x17\x3b\xdc\xe3\x14\x71\x15\x08\x83\xf5\x05\x68\x01\x63\xe0\x48\x80\x79\x48\xf8\x1c\x0f\x87\x61\x70\x13\xa3\x8c\xbe\x86\x18\x3b\x55\x67\xec\xd4\x4b\x31\x38\xc3\xb7\xf8\x38\x1c\x63\x5b\x7c\x04\x36\xb7\xf8\x78\x8d\xd5\x34\xab\xb1\xea\x04\x4e\x6d\xba\x91\x19\xee\x77\x7d\x1a\x26\x05\xbf\xeb\x4d\xb7\x12\x25\x69\x6a\x93\x24\x55\xe5\x87\x2b\x66\x22\x8b\xb5\x7e\x51\x00\x9c\x07\x03\x4b\xb3\x0a\x52\x27\x69\x47\x5e\x51\xa9\x13\x54\x8e\xb5\x69\xf2\x07\x91\x24\x22\x49\x44\x92\x88\x24\x11\x49\x22\x92\x44\x24\x89\x48\x12\x91\x24\x22\x49\x44\x92\x88\x24\x11\x49\x22\x92\x6c\x3f\x24\xd9\xea\xa2\xac\x0d\x85\x8f\x9b\x29\xf1\x7a\x3b\x06\xe2\xfd\xb7\x04\x4c\x47\x38\x81\xd9\x70\xb1\x58\xde\xd0\x0b\xeb\x6b\x6a\xb6\xa0\x68\x6b\x76\x06\xb7\x11\x93\x4d\x0a\xf9\x58\x82\x7c\xb4\xcb\x85\x27\x63\x4c\x14\xf0\xdf\xec\x7d\xe0\x4a\x9f\x45\xa7\xc5\xeb\xac\xc5\x69\xda\x62\x72\x84\xa7\x76\xf3\x32\xdc\xc0\x4b\xf9\x42\x68\x2c\x54\x99\xcf\xc1\x1c\x5f\xa6\x19\x38\xc7\x96\xe9\x04\x9c\x80\xe3\x91\x2c\x2b\xb0\x83\x5b\x4d\x4f\xf6\x70\xf4\x12\x3e\x4a\xc6\xfc\x4b\x38\xb8\x2b\x9e\xec\x64\xff\x62\x8f\x3b\x47\xc7\xec\xac\x64\x9b\x9b\xa6\x31\x27\x5f\xd9\x36\xcd\x54\x66\x01\xe6\xe1\xa2\x0f\xbf\xd7\x3d\x55\x48\xe2\x91\xc4\xd7\x49\xe2\x3f\x1b\x0b\x0f\x46\x6f\xa0\x2c\xb9\xc2\x69\xfd\x05\x98\x75\x69\xfd\x16\xda\x8b\x16\x41\xa5\xf5\x26\x8a\xa0\xcc\x93\xfb\x5c\x11\x74\xa6\x22\x6f\xc9\xe6\x64\xd1\xa8\x95\xd1\x64\x1b\x24\x11\xe6\x37\xe9\x3c\x49\x87\xf9\x4d\x30\xbf\xc9\x36\xe7\x37\xc9\xb5\xe2\x93\x52\x73\x9e\x93\x66\x7d\x04\xe6\x33\x70\x8e\x9c\x91\x4f\x39\x96\x52\x8f\x98\xe6\x24\xf0\xfe\x8e\x48\x7b\xf2\x7e\x19\x7a\x78\xda\x13\xa5\x54\x32\xa9\xcd\x45\xf7\xb1\x41\x4d\x48\xc3\x50\x37\x34\x3a\x40\x26\xf9\x41\x0f\xf9\x7e\x17\xdc\x49\x2f\xa1\x1f\xc9\xd1\xea\x91\x36\xd3\x4e\x0b\x4b\x56\x0b\xc9\x21\x7a\xc7\x54\xa9\x64\x5e\x4f\x57\xfe\x7a\x5e\x37\xa6\x0a\x05\xe7\x6b\xd9\xb8\x4f\x62\x93\xf2\x93\xa8\x30\xcf\x17\xfe\x34\x4c\xb1\x85\x3f\x09\x27\x61\x3c\x74\xe1\xd3\x51\xa3\x0b\xbf\xf2\xc5\x1b\xe2\xd9\x74\x3d\x7a\x47\x1c\x21\x69\x6b\x47\xd0\xbe\xd8\x85\x40\x2a\xba\xe3\xdd\x10\x78\xa4\x8f\x47\xfa\x78\xa4\x8f\x47\xfa\x3b\xe6\x48\x1f\x73\x91\x60\x2e\x12\x3c\xd2\xc7\x23\x7d\x3c\xd2\xc7\x23\xfd\xb6\x38\xd2\xc7\x5c\x24\xe8\x23\x80\xb9\x48\xb6\x29\x17\xc9\xbb\x7b\x61\xc8\x03\x46\xc4\x2c\xb0\x41\x8c\xe4\x4f\x65\xf2\x62\x37\xec\xb3\x18\x09\xcf\x03\xfb\xbf\xd5\x96\x07\xb6\xd2\x14\x6f\x50\x36\xd8\xe3\xec\x06\xce\x5d\x58\x8f\x82\x19\xc4\xed\x06\x60\xda\x36\x41\xec\x0f\x47\xb3\x98\x13\xe4\xf8\x66\x59\x0c\x26\x87\x45\x20\x83\x40\x06\x81\x0c\x02\x19\x04\x32\x08\x64\x10\xc8\x20\x90\x41\x20\x83\x40\x06\x81\x0c\x02\x19\x04\x32\x3b\x07\xc8\x7c\xbf\x17\xce\x72\x20\xa3\x3e\x5e\x56\x8b\x0c\xba\xf8\xb0\x4c\x48\xb8\x80\x56\xcc\x1b\x2a\x2b\xd7\xf3\x89\x5e\xf2\xbb\xdd\x40\xdc\x06\x1c\x52\x63\xd6\x46\x6a\xe6\x78\x53\x0d\xc2\x33\x83\xec\x86\x59\xa7\x37\x16\xa4\x71\xfd\x46\xad\xc7\x61\xd1\x9e\x2d\x30\x99\x4d\xf9\xc7\xb8\x2b\xc3\x22\x33\xd6\x0c\x20\x8e\x41\x1c\x83\x38\x06\x71\x0c\xe2\x18\xc4\x31\x88\x63\x10\xc7\x20\x8e\x41\x1c\x83\x38\x66\xbb\x71\xcc\xed\x17\x6f\x81\xc0\x07\x81\x0f\x02\x9f\xda\x80\xcf\xcf\xf4\x42\x2a\x0a\xf8\xa8\xe5\x9b\xba\xf1\x58\x49\x2f\x68\x59\x4d\x35\xc9\xb7\x64\xf2\xcd\x60\xbe\x73\xab\x36\xbe\x73\x85\x37\xb8\x48\x1b\xbc\xd5\x20\xca\x33\x1e\x42\x79\xc4\x47\xa1\x17\x4e\x03\x89\xcf\x9b\xa2\x89\xcf\x49\x32\x1e\x46\x7c\x3c\xf3\x82\xdc\x07\xb9\x0f\x72\x1f\xe4\x3e\xc8\x7d\x90\xfb\x20\xf7\x41\xee\x83\xdc\x07\xb9\x0f\x72\x9f\xed\xe6\x3e\x48\x65\x90\xca\x20\x95\xd9\x1e\x2a\xf3\x49\x19\x86\x39\x95\x31\x56\x94\x6c\xca\x36\xd1\x59\x53\xcc\xd6\xd7\x74\x07\xd2\x18\x7a\x41\x35\xc9\x3f\xf6\x90\x7f\xe8\x82\x03\xf4\xf2\x29\xf1\x6a\x87\xcd\xc8\xd5\xd3\xc9\x2c\xe9\x05\x35\xc9\x52\xce\x2c\xf9\x9b\xb0\x50\x0a\xbd\xe2\x76\xa3\x27\x6f\x82\x29\x4e\x4f\x26\xe0\x04\xa3\x27\x63\x30\x0a\xa9\xd0\x24\x32\x6c\xb0\xad\x01\x4b\xd1\xf7\x6d\x48\xee\x98\x95\x68\x52\x72\x96\x9c\xb6\x48\x49\xe8\x7c\x5b\xe0\x84\xf6\x0a\x79\x09\xf2\x12\xe4\x25\xc8\x4b\x90\x97\x20\x2f\x41\x5e\x82\xbc\x04\x79\x09\xf2\x12\xe4\x25\xc8\x4b\x90\x97\x20\x2f\xd9\x99\xbc\xe4\xdd\x0b\x30\xea\x4d\xb0\x1b\x12\xa5\x64\xa8\x0c\x23\x98\x6a\xd9\x24\x7f\x7c\x89\xfc\x9d\xe4\xe6\xdb\x3d\x1c\x01\x48\xf8\x9d\xcb\x6a\x39\xf9\xa0\x9b\x67\xd7\x8d\x22\x72\x7f\x6f\x73\x28\x82\x65\x64\x91\x15\x20\x2b\x40\x56\xb0\x73\x58\x01\x96\x91\xc5\x32\xb2\xc8\x0a\x90\x15\x20\x2b\x40\x56\xd0\x16\xac\x00\xcb\xc8\x76\xa2\x69\x8f\x65\x64\x9b\x51\x46\xf6\xcd\x90\xe1\x47\xf8\x93\x70\x92\x1d\xe1\x1f\x81\x34\x8c\x44\xd6\x81\x71\xcd\xf1\x86\x9c\xe1\x5f\x89\x3e\xc3\x1f\x24\x03\xd6\x11\xbd\xf3\x68\x4f\xad\x17\x31\x21\xa9\xfc\x9d\xdd\x2e\x78\xb8\x87\x8b\x7b\x49\x11\x19\x83\xf5\x0d\x68\x01\x65\xe0\x50\x80\x85\x95\xf8\x8a\xce\x0d\xc3\xe0\x26\xc6\x19\xeb\xcc\x61\x45\xcd\x3a\x2b\x6a\xbe\x14\x83\x33\x7c\x93\x8f\xc3\x31\xb6\xc9\x47\x60\x73\x8b\x0f\xa6\x79\xb5\xcc\x53\x30\xe1\x56\xcb\xdc\x74\x23\x33\xb4\x91\x31\x56\xa8\x7a\xf7\x54\x36\xab\x96\xea\x6a\x25\x4a\xd6\xd4\x26\x4b\x2a\xf3\x17\x87\xc8\x95\x2a\xb2\xab\xa4\x9b\x65\x48\xfe\x96\x00\x39\x0f\x72\x25\x52\x72\xcb\x57\xd3\x65\x2f\xc8\x9d\x24\xbf\xc0\xae\x22\x66\x5f\xd5\x02\x09\x84\x58\x12\xb1\x24\x62\x49\xc4\x92\x88\x25\x11\x4b\x22\x96\x44\x2c\x89\x58\x12\xb1\x24\x62\x49\xc4\x92\x88\x25\x11\x4b\xb6\x1f\x96\xcc\xc3\x02\x27\x16\xb3\x30\xcd\x88\xc5\x69\x98\x84\x93\x75\xe4\x65\x59\x2e\x2b\xe5\x75\xb3\xe5\xd0\x20\x19\x0c\x0d\xee\x21\x77\x73\x79\xee\x02\x02\xb8\x0d\x33\x80\x91\xef\xf5\xc1\x65\xee\x10\x66\x65\x2f\xa2\x6a\xa7\x2f\x70\xae\xb6\x74\xd6\xfc\xaf\x6f\x23\x3f\xdf\x47\xde\xbe\x0b\x88\xdb\x9c\x13\x59\xf7\xab\x31\x6b\xe3\x08\xb9\x8e\x8a\xb6\xd0\xb6\xdd\xc7\x1a\x99\xd3\x7a\xc8\x55\xd0\x98\x12\x6a\x7d\xce\xa9\x8e\xe7\x6a\x9e\xfd\x1e\x65\x5f\x68\x3b\x95\xe4\x8f\xbb\xe2\xbc\x49\x58\x46\xec\x36\x77\x64\xdb\x96\xdc\x48\x6f\x8e\xde\x87\x13\xe4\x44\x44\x5a\x6b\x6b\x9b\x56\x2c\x4d\x78\xf4\x60\xf0\xb6\xdc\x4d\xee\x60\xef\x8d\x81\x7e\x48\xc9\x90\x92\x21\x25\xdb\x41\x94\x0c\x03\xfd\x30\xd0\x0f\x29\x19\x52\x32\xa4\x64\x48\xc9\xda\x82\x92\xcd\x1f\x85\x31\x32\x2a\xa7\x1c\x73\xf8\x1e\x66\x07\x5b\xbd\xb0\x74\x7e\xb9\x9b\xfe\x51\x34\x71\x6f\x3f\x23\x1a\x03\x10\x3b\x11\x07\x62\x00\x62\x33\x02\x10\xbf\x31\x00\xc7\xa3\x13\x36\x8d\x64\x0b\xeb\x66\x99\x5a\x31\x05\x17\x2c\x7d\x78\x80\xbc\xb7\x0b\x5e\x15\x94\xb9\x29\xf1\x20\x5b\x6d\x5e\xeb\x74\x9a\xb7\xc1\x12\x36\xc9\xf4\xf7\x80\x84\x4d\xc2\x35\x8d\xf5\xd2\x99\x7f\x23\x9c\xe5\xcc\xe5\x04\x1c\x67\xcc\x65\x14\x52\x30\x14\x95\x51\x29\x25\x74\x28\x12\xb1\xe4\xa2\x11\xcb\x14\x39\x5b\x63\xbe\x24\xf1\xc1\x1e\x00\xfa\x40\x30\x69\xb9\x83\x74\xe7\xd5\x32\x24\x5e\xdc\x1d\x32\x25\x3d\x86\x5a\x2a\x28\x59\xb5\xca\xac\x3c\x64\x5d\xd2\xca\x89\xc9\x64\xe0\x1c\x9c\xf1\x39\x70\x6e\x72\x66\xd0\x83\x13\x3d\x38\xeb\xf4\xe0\x7c\x2a\xb6\x75\xb9\x30\xc3\x5d\x38\x4f\xc3\xa4\xeb\xc2\xd9\x78\xe9\x12\xbe\xef\x4b\xeb\x65\x68\x8d\xf0\x49\x7e\x62\x7f\x88\x74\x79\x95\xe5\x9f\xa9\x78\x04\x4a\x1f\xff\x6b\x4b\xe5\xc9\x35\x58\x82\x45\x51\x9e\x24\x33\x70\xae\x0e\xb6\x3e\xc3\xba\x7e\x95\x41\x69\x13\x25\x4c\x94\x84\x79\x29\x0e\xdf\x8e\x93\x6f\xc6\x13\x2f\x3a\x03\xf4\xe9\xf8\x35\x51\xe3\xd2\x8a\x92\xc9\xb5\x26\x69\x45\x5d\xd5\xb9\x61\x65\x5b\x3f\x2e\xf5\xb7\x0c\x4e\xd6\x45\x41\x82\x14\xf5\xe2\x70\x51\xcd\x2b\x6c\x20\x2c\xa5\x4b\x94\x34\x9c\x83\x38\x53\x60\x2d\x47\x6d\x6d\x4d\xcd\x51\x59\x56\xb8\x65\xc1\x63\xf1\x68\xa0\xa8\x15\x86\x2c\x5d\x8c\xe9\xec\x52\xde\xa0\x1f\xc8\x92\x6a\x68\x7a\xce\xd1\x29\xdd\x6f\x65\xf9\x56\xc9\x35\xbe\xd7\x4d\xda\x49\x51\xdb\x57\xe8\x9d\xf6\x0b\x59\x0f\x59\xe5\x44\xc0\x6e\x22\xc5\xfb\xb9\xa6\x2a\xc5\xc0\x3e\xca\x84\x75\x61\x91\xf5\x20\xe8\xc8\xf9\xab\x71\x78\x21\x4e\x9e\x8f\x27\x9e\x73\x86\xf9\xa9\xf8\x8c\x70\x34\x57\xa2\xea\xb5\xea\xe0\x9b\x45\x43\x2f\x29\x79\x36\x01\xbc\x66\xc5\x10\x1f\x03\x0e\x2c\xec\x77\x71\xcf\xf6\xe8\x2c\xa5\x53\xe3\x29\x69\x99\x4f\x08\x1f\x9d\x92\x5a\xcc\x51\x93\xd4\x21\x81\xaa\xa4\x1b\xa5\x1b\x0a\xb5\x34\xd9\xb0\x1a\xeb\xea\xc8\xaa\x52\xb0\xc9\xb9\xcc\x7f\x95\xa5\x55\xad\xa8\x14\xb4\x27\x6c\x04\xb7\xa2\x52\x1d\x96\x59\xf6\x23\x5c\x77\xcd\xb9\xb6\x11\x6f\xbc\xdf\x74\x6f\xe2\xac\x3a\x25\xcd\x6a\x6c\x39\x0b\x1d\xd7\x8d\xca\x37\x63\xe0\x86\x1f\x1b\x71\x54\xce\x36\x9b\x5e\xbe\x91\x92\xf7\xf3\xfe\xcc\xd8\x2f\x62\x8a\x3a\x70\xe6\x5d\xdd\xf0\xce\x6e\xf2\x64\x77\xe2\x65\xc7\x5c\xfc\x3a\x35\x17\xd9\x43\xe9\x96\xba\xa1\xdf\x94\xf2\x8a\xb1\x42\xcd\x2a\xc1\x01\xdd\xd9\x17\xaa\xb1\xaa\x1b\x6b\x74\x2c\x02\x7b\x7a\xd5\xf7\xf0\xf0\x8e\xb2\xf5\x6c\x2f\xc6\x12\x7f\x2b\x8d\x2e\x94\xac\x96\x73\xa1\x34\xe3\x9b\xec\x88\xc0\x19\x5d\x6a\x7a\x59\xf4\xcf\x26\x98\x29\x61\x18\x6d\xf6\x65\x5b\x04\xc3\xd6\x82\xcc\xfa\x1e\x96\x92\x78\xf4\x00\xfb\xec\x8a\xc2\xa1\x9f\xbf\x43\xbf\x34\x6c\x4d\xbc\x77\x61\x98\x93\x52\x7f\x46\xc9\x3e\x46\x3f\x2f\xc5\x1c\xbd\x4a\x29\x14\xf4\x9b\xec\x22\xdf\xc0\x71\xe0\x6c\x2d\x7d\x6f\x23\xf6\x1b\xac\x38\x2d\x4d\x4a\xfd\xe7\x75\x43\x15\x9a\x95\xb2\x8a\x99\x55\x72\xf4\xed\xad\xf1\x61\xc2\x96\xb7\x67\x72\xe9\x55\xd1\xe0\xaa\xd3\x46\x4a\xbe\xbb\xe4\x5f\x37\xa2\x3a\xf0\x85\x58\x83\xdd\x23\x96\x78\x64\xc6\x25\x98\x13\x22\x33\x9a\xec\x72\x51\x9b\x2a\x50\xfd\x4b\x1f\xa9\x28\x3c\x2a\x05\xeb\x23\x7b\xc8\x9d\x7c\x32\x20\xf3\xff\xec\x0d\x51\x16\x92\x8c\xa2\xb0\xb3\x46\x6e\xcd\x56\xb1\x49\x7a\x4b\xd4\x66\x6d\x95\x06\x71\x9f\xbf\xa1\x61\xf6\xf8\x41\xfa\xcf\x89\xfb\xc5\x1f\xd7\x54\x23\xaf\x8a\xbf\x1e\x12\x7f\x35\xcb\x86\x52\x56\xf3\x5a\x76\xd8\x7f\x5d\xe6\x0a\x2c\xc0\xbc\xcf\xde\x99\x80\x13\x75\x2c\x87\x45\xda\x28\x6a\x26\x51\x9a\xc9\xa7\xba\xe0\xd9\x2e\xf2\x4c\x57\xe2\x69\x47\xbc\xbf\xa3\x6b\xe7\xd8\x3e\xbe\x03\x0a\x3a\xce\xec\xc0\x9d\x1d\xa2\x95\x38\xf2\xe3\x2c\x5e\x3a\x2c\x2e\x61\xf6\x1b\x5f\xb8\x03\xec\x2b\xc5\xfd\x33\x94\x02\xbb\x93\xaa\x63\xfc\x6e\x76\x05\x53\x8d\x4c\xe9\xf0\xbc\xa9\x17\xd9\xb2\x1c\x92\x2e\xd3\x85\x6f\xfd\x7b\xd9\xde\x0e\xee\x1f\x07\xc2\x8d\xb2\xcc\x0b\x31\x78\x3e\x46\x9e\x8b\x25\xbe\xe4\x80\xb4\x8f\xc7\xce\xeb\x46\x96\x69\x6d\x79\x9d\x0d\xbb\x2e\xc9\xab\xf4\x4f\xb2\x34\xe5\x79\x8b\x94\x34\x57\xb6\x14\xac\x75\xd3\x3d\x69\x1f\x56\xb2\xec\xc5\x99\xff\x42\x41\xcb\x5a\x1f\x50\xb5\x90\x33\x25\xfd\xa6\x35\xa6\xfc\x7c\xbf\xa4\xea\xa5\x82\x9a\x92\xf8\x13\x57\x0b\x4a\xde\x99\x4b\xc6\x62\x03\x07\xc0\x79\xbc\xbc\x8b\x75\xcb\xe3\x74\xd7\x31\xf0\x29\xdc\xcd\xa7\xc4\xdd\x7c\x4e\xc0\x71\x72\x54\x1e\x73\x4e\x0b\x5e\x23\x9e\x31\x08\xcd\x56\x9e\x33\x34\xdc\x95\xee\x27\xfb\xe0\xb4\x9d\x5b\x4d\x33\xd4\xbc\xc6\x84\x72\x40\x22\x7a\xee\x4f\x47\xaf\x54\x8d\x0d\x2d\xeb\x12\xce\xdf\xeb\x25\xef\xd9\x05\xaf\xf1\xdd\xee\xf8\xcf\x7d\xba\x16\xff\xb9\xa9\xc5\xb9\x65\xde\x6c\x5b\xb8\xd0\x3d\xc4\x1e\x37\xe5\x7d\x23\xcb\x8f\xce\xed\x2a\x3a\xd0\x55\x6e\x30\x35\x7a\x83\x65\xc8\x39\xc7\x91\x35\x68\xc5\x55\x3a\xd4\xf1\xed\xe6\x0e\x3c\x3a\xd2\xa1\x23\x1d\x3a\xd2\xa1\x23\x1d\x3a\xd2\xa1\x23\x1d\x3a\xd2\xa1\x23\x1d\x3a\xd2\xa1\x23\x1d\x3a\xd2\xb5\x9b\x23\xdd\x38\x1c\x23\x47\xe4\xb4\x63\xe4\xbe\x5a\x34\x72\x5d\x65\xbe\xf9\x36\x2e\x7a\xba\xa1\xa7\x1b\x7a\xba\xd5\xe6\xe9\xf6\x57\x0b\xb6\xa7\x9b\x95\x6a\x9f\x5a\xe0\x63\x61\x61\x94\x66\x59\x29\xab\xab\xeb\x05\x96\x70\xff\x93\x0b\xe4\xdd\x3d\xb0\xcf\xca\x45\xc5\xee\x4b\x0c\x54\xcf\xba\xbf\x6c\xdd\xbf\xac\x96\x93\x7d\x6e\xda\x7d\x76\xaf\x1b\xaf\x28\x5c\xd5\xe6\xc8\x05\xb3\x5c\x21\x76\x40\xec\x80\xd8\x61\xe7\x60\x07\xcc\x72\x85\x59\xae\x10\x3b\x20\x76\x40\xec\x80\xd8\xa1\x2d\xb0\x03\x66\xb9\xea\x44\x63\x1f\xb3\x5c\x35\x23\xcb\x55\x16\x2e\x72\x07\x81\x29\x38\xcb\x1c\x04\x4e\xc2\x38\x1c\x8b\x4a\x86\xcd\xac\xf3\x94\x60\x94\x37\x24\x05\xff\xb5\x68\xc7\x81\x34\x19\xa9\xcc\x80\x25\xf4\xc3\xef\x38\x30\x06\xf2\xcf\xec\xf1\x01\x89\x57\x39\xd9\xf8\x45\xf6\x70\x48\x4c\xc7\xdf\x02\xfa\xc0\x61\xc1\x05\x98\x85\x69\x9f\x8f\xe3\x11\x48\x6f\x7a\xfc\xd1\xb9\x11\x03\xbb\xea\x0c\xec\xfa\xbb\x58\xe8\xc6\xe5\x01\x5b\xa3\xcc\x0d\x9b\xca\x86\x63\x50\xcf\xda\x84\x39\x1e\xf6\x95\x81\x73\x6e\xd8\x57\x9d\x4d\xcd\x73\x2f\xf1\x69\x98\x12\xbc\xc4\xeb\x6b\x2b\x5a\x2a\xb1\xe4\xfa\x35\x4a\xa5\x1a\x24\x91\x28\xb8\x92\x5f\x91\x7c\x52\x49\x0a\xcc\xdb\x2f\x4a\xa8\x51\x31\x71\x3f\xbb\x29\x28\x7b\x7f\xf3\x64\x15\x82\x4d\x04\x9b\x08\x36\x11\x6c\x22\xd8\x44\xb0\x89\x60\x13\xc1\x26\x82\x4d\x04\x9b\x08\x36\x11\x6c\x22\xd8\x44\xb0\xd9\x7e\x60\xb3\xd5\xe9\xfb\x37\x91\x6e\xbf\x39\xa0\xf3\x36\xcc\x3f\x48\xfe\x47\x2f\x8c\x73\x57\x33\x33\x7b\x43\xcd\xad\x17\x3c\x49\xfc\xad\x78\xc3\x92\xa1\xe9\x86\x56\xbe\x95\x2d\x28\x62\xba\xfe\xdf\xe8\x25\xff\xab\x1b\xee\x72\x6f\x7c\x64\x23\x9d\xf8\x6c\x2d\x91\x86\x8b\x56\x83\xd3\xb4\xc1\xb6\x08\x36\x7c\x90\x3d\x6e\xd9\x79\x95\xeb\x69\x4f\x1f\xdb\xdc\xe5\x6d\x5b\xa2\x0c\xdf\x12\xbd\x87\x26\xc9\xc9\x80\x4c\x0d\x15\x2b\xcd\xda\x5c\x9e\x11\xc7\xf0\x42\xc4\x61\x88\xc3\x10\x87\x21\x0e\xc3\xf0\x42\x0c\x2f\x44\x1c\x86\x38\x0c\x71\x18\xe2\xb0\x36\xc3\x61\xf3\x13\x70\x82\x1c\x97\x8f\x3a\x16\xef\x01\x31\xbc\xd0\xa3\xcf\x63\x84\x21\xb2\x39\x8c\x30\x6c\x13\x36\x47\x7e\xe3\x12\x3c\x34\xa2\x94\xb4\x91\x8d\x74\x58\x58\x21\xfb\xe4\x9b\xe4\xdd\x97\xc8\xb7\x24\xb8\x33\xab\x1b\xea\x23\x1b\xe9\x44\x6f\xf5\x58\x42\x46\x0e\x92\x07\xe8\x45\xd3\xba\xa1\x5e\x17\x0a\x1e\xb2\x9f\xda\x9c\xa3\xa0\x87\x0d\x22\x05\x44\x0a\x88\x14\x76\x0e\x52\x40\x0f\x1b\xf4\xb0\x41\xa4\x80\x48\x01\x91\x02\x22\x85\xb6\x40\x0a\xe8\x61\xd3\x89\x56\x3c\x7a\xd8\x34\xc3\xc3\xe6\x0d\xe1\x71\x43\xa7\xb9\x3b\xc0\x71\x38\xca\xdc\x01\x52\x30\x04\xc9\xd0\x00\x1d\x6a\xdc\xa7\x36\xd2\x29\x66\xa2\x2f\x68\x66\x0d\x91\x39\x3c\x5e\xf0\x42\xb4\x0b\x40\x1f\x91\x03\x5c\x00\x64\xd9\x3a\xf3\xe7\xae\x06\xf2\x97\x76\xbb\x88\xe1\x95\x76\x74\x60\xd1\xc2\x09\xf7\xf1\x3f\x34\x17\x28\x70\xfb\xff\x14\x4c\xc0\x09\x5f\x34\xe0\x61\x38\x54\xdb\xc8\x61\x08\x20\x86\x00\xd6\x19\x02\xf8\x9f\x62\x70\x92\xef\xd8\x31\x18\x65\x3b\x36\x09\x35\xaf\x3b\x38\xc3\xc3\xfb\xc6\xe1\x98\x1b\xde\xb7\x99\xfb\xcf\xf2\x98\xbe\x13\x70\x5c\x88\xe9\xdb\x4c\x03\x51\xae\x42\xb5\xc9\x09\x51\x22\x04\xcb\x8c\xa8\x50\xc1\xe4\x27\x05\x54\x99\x08\x8c\xe7\xe3\x22\xe5\x21\xfe\x1b\x17\x29\x41\x41\x7c\xcd\x10\x2e\x08\x17\x11\x2e\x22\x5c\x44\xb8\x88\x70\x11\xe1\x22\xc2\x45\x84\x8b\x08\x17\x11\x2e\x22\x5c\x44\xb8\x88\x70\x11\xe1\x62\xfb\xc1\xc5\x76\x0e\xdf\xab\x8d\x27\x04\xb3\x46\x91\x2c\xdc\x8e\x11\x7b\x5f\xec\x83\x53\x9e\xe4\xf0\x56\x90\x5e\x88\x1b\x57\x4e\x51\xd7\xa8\xf2\x58\x76\xc2\xf6\xfe\xb1\x97\xfc\x97\x6e\xb8\xd3\xca\x7d\x94\xf8\xb5\x5a\x02\xf6\x66\x58\x2b\xcb\x6a\xb9\x8d\x82\xf5\x78\x1a\x26\x17\xd9\x38\x7d\x6c\x73\x27\xb3\x6d\x09\xd6\x8b\x0a\xa6\x7b\xf4\x72\xf4\x96\x4a\x92\xc3\x01\x58\x4e\x88\x8e\x75\x66\x00\x63\xf3\x90\x75\x21\xeb\x42\xd6\xb5\x83\x58\x17\xc6\xe6\x61\x6c\x1e\xb2\x2e\x64\x5d\xc8\xba\x90\x75\xb5\x05\xeb\x9a\x3f\x0e\x47\xc9\x98\x3c\xea\xd8\xb6\xf7\x8a\xb1\x79\x8e\xaa\x5e\x19\x97\x77\xfb\xd9\xc4\x18\xf9\xd7\x89\x58\x0f\x23\xff\x9a\x11\xf9\xf7\xef\xfa\xe0\xf4\x26\xf0\x91\xa1\x32\xc2\x21\xf2\xa3\x97\x7b\xc9\x9f\x09\xfc\xe8\xd3\xb5\xf0\xa3\x25\xde\x4c\xbb\x00\xa4\x83\x81\x00\xc9\xed\x24\x12\xa4\x4a\x82\x74\x25\x1a\x10\x0d\x92\x81\xea\x80\xc8\x1d\x61\x4c\xef\x84\x08\x09\x11\x12\x22\x24\x44\x48\x88\x90\x10\x21\x21\x42\x42\x84\x84\x08\x09\x11\x52\xbb\x21\xa4\x71\x38\x46\x8e\xc8\x69\x07\x05\xbd\x5a\x44\x48\xae\x32\x8f\x0c\x09\x19\x12\x32\xa4\x1d\xc4\x90\xf6\x43\xc2\xc9\x1e\xa5\xe7\x9c\x8c\xe0\x23\x25\x43\x7f\xfc\x16\xf9\xc5\xfd\xe4\x27\xe3\x6e\x1c\xd6\x43\x59\xbd\x58\xa4\x9b\xff\xc2\xec\x35\x47\x8a\xd3\x17\x62\x57\xd3\x2e\x5e\xd1\x73\x6a\xf2\x80\x75\x19\x8f\xc9\xba\xa0\x96\xe9\x5f\x17\xe9\x25\x63\x5d\xc9\x91\x24\x07\x1f\xe3\x70\x3f\x07\x1f\xf7\xc2\x3d\x0c\x7c\xdc\x05\x7b\x3f\x13\xdb\x0d\xd6\x8c\x47\x42\x8c\x9e\x60\xe8\x00\x64\xb7\xf5\x74\x78\x74\x29\x9a\x73\x8c\x90\x61\xbf\x6f\x99\xd3\xd9\xab\x8c\x49\x98\x1e\x37\xb3\x44\xe0\x70\x2c\xbe\xbe\xf6\xe1\x58\x5c\xef\xa0\xe1\x90\xdf\x2d\x0c\xc7\x21\x67\x38\xae\x2e\x57\x1b\x8f\x84\x77\x3c\x74\xb3\x83\x06\x24\xf9\x3e\x61\x40\x0e\xdb\x03\x32\x33\xbb\x30\x7b\x6d\xb6\xca\x90\xdc\xef\x19\x92\x19\xa6\x76\x35\x63\x50\x6a\x7b\xe3\x1a\xde\x53\x08\xe4\x8c\x1e\xe8\xb1\x9f\x15\x06\x65\xc0\x1e\x94\xab\x8b\xd7\xe6\xae\x5e\x59\xae\x32\x2a\x0f\x78\x46\xc5\xea\x46\xe7\xac\x95\x89\xc0\xcd\x73\x71\x76\x6a\xa6\xe6\xcd\x73\x51\x55\x72\x9d\x33\x20\x99\xf7\x0a\x03\xd2\xef\x48\x93\xa9\x6b\xd3\x17\xab\x8c\xc8\x7d\x5e\x71\x42\x3f\x71\x9d\x33\x24\xf3\xa7\x61\x92\x9c\x94\xc7\x1d\xf5\xfb\x7e\x51\x6f\xf7\xdf\x5a\xa9\xbd\xaf\xc0\x8f\x90\xb7\x24\xde\x64\xeb\x23\x99\x45\xa5\xcc\x0d\xd2\x1b\xaa\xf4\xfa\xa5\x05\x89\xb6\x49\x87\x94\x5a\xfc\xb6\x12\x65\xe9\x7c\xd6\x30\xdb\xb6\x1e\xd3\xec\x72\x6a\x4a\x66\xfd\x10\xdd\x98\xbf\x26\xbb\x3a\x84\x55\x65\x44\xcf\x95\xd5\xb5\x12\xa3\x94\xe4\x73\x32\xf9\xf5\x6e\x77\x5e\x6f\x5a\x46\x71\x31\xa7\x6d\x68\xb9\x75\xa5\xe0\x39\x6e\x72\x00\xd4\xa2\x9e\xbb\x66\x35\xd1\x90\x73\xa6\x54\x32\xc9\x6e\xb0\x3f\x3a\x4e\xeb\x0b\x9a\x59\x3e\xaf\x1b\x53\x85\x82\x73\x7c\x74\x1b\xd4\x08\x09\xcd\x16\xd2\xf0\xd3\x24\x7b\xfd\xf7\x06\xaf\xff\x7d\x04\x58\xc7\x78\x16\x91\xda\x5c\x8f\xfd\x3b\x40\x98\x0d\xef\xe2\xc7\x73\x23\x3c\x37\xc2\x73\x23\x3c\x37\xc2\x73\x23\x3c\x37\xc2\x73\x23\x3c\x37\xc2\x73\x23\x3c\x37\xc2\x73\xa3\x96\x9e\x1b\xe1\xe1\x0c\x1e\xce\xe0\xe1\xcc\xf6\x1c\xce\x7c\x4a\x86\x43\x1e\x07\x5f\x56\x9c\x76\x84\x0a\x44\x43\xa7\xe2\x88\x6a\xe7\xf4\x6e\x93\xfc\x4b\x99\x3c\xd9\x0d\xfb\x2c\x4f\x5e\x76\x5d\x62\xb4\x7a\x81\x8f\x69\xa7\x99\x25\xab\x99\x64\xfa\xff\x67\xef\xdd\xc3\xe3\x38\xae\x43\xcf\x6f\x86\xa0\x44\x16\x29\x8b\x2c\xea\x61\x8e\x5e\xcd\x06\x49\x90\x43\xa0\xc1\x01\x1f\x00\x01\xbe\x30\x00\xf8\x00\x41\x12\x02\x28\xca\x96\x25\xd1\x8d\x99\xc6\xb0\xc9\xc1\xf4\xb8\x7b\x00\x8a\xda\xcf\xf7\xb3\xec\x48\x71\xb2\x89\xe3\xf5\xe6\xc6\x89\x1d\xd9\x4a\x94\x68\x2d\x5b\x91\x23\x27\x37\x4e\xe2\xbd\xde\x9b\x9b\xd8\x51\xac\x58\x6b\x27\xd7\xf6\xb5\xe5\xe8\xc6\x89\x1d\x27\xeb\x5c\x27\x59\x27\xf1\xe6\xa9\xfd\xea\xd1\xd5\x35\x33\xdd\xd3\x33\x83\x79\x11\x38\xff\x58\x34\xa6\xbb\xba\xba\xba\xea\xd4\xa9\xdf\x79\x91\x3b\x98\x2f\x2d\x6d\xa2\xfc\x92\x1b\x8d\x94\x5c\x41\xe7\x19\x10\x39\x85\x4e\x50\x20\x72\x1c\x1d\x45\x87\x03\x73\x21\x92\xf1\xd3\xf8\xf8\x69\xe5\x6f\x3f\x65\x3a\xe1\xde\xb5\x61\x99\x56\xdf\x16\xce\x48\x86\xf0\xc1\x72\x8f\xdb\xf2\xee\xf8\xd4\x2d\x06\x62\x02\xc4\x04\x88\x09\x10\x13\x20\x26\x40\x4c\x80\x98\x00\x31\x01\x62\x02\xc4\x04\x88\x09\x10\x13\x20\x26\x40\x4c\x56\x01\x31\xf9\x9d\xde\x92\x8c\x7a\x8c\x98\x54\x1f\x11\xfd\xae\x5e\xfc\xc5\xb5\x25\x1c\xe5\x1e\x3a\xd7\x8a\xcf\x80\x9e\xc7\x7c\xbc\x9b\xfc\x2c\x41\x93\xa6\x46\x21\xb3\xf2\x03\x2f\x44\xd0\xf3\x11\xfc\x5c\x24\xf6\xac\xf8\x34\x4f\x45\x66\x99\x5a\x41\x55\x93\xc7\xe8\x16\x3f\x47\xfe\xa5\xa7\x0a\x9a\xa2\x4c\x90\xff\xba\x7f\x5f\xd0\x4d\x5a\x11\xc3\x51\x52\xd9\x45\xa7\x60\xd8\x7d\xfc\xc5\x52\x5c\xfb\x55\xb2\xe6\x55\x43\xe9\x11\x6f\xd2\x43\xe4\x80\xeb\x82\xa3\x29\xd3\x59\x3d\x97\xe3\x2b\x9b\x7e\x33\x3d\x4b\x96\x52\x42\x4b\x0c\x69\xea\x5a\xfa\x48\xf9\xab\x24\x9f\x89\xa0\xa7\x23\xf8\x43\x91\xd8\x07\x45\x77\x1f\x17\xbd\x15\x10\x61\xce\xed\x37\x79\x84\x32\xc1\xba\x4a\xd6\x4b\xde\x71\xbb\xc5\x37\xa0\x45\x87\xec\x2b\x7a\x8e\xa9\x01\x6c\x7a\xd4\xd0\xc3\x9b\xd8\x63\x8a\x52\x64\x3e\x8a\xc6\x18\x27\x3a\x8c\x86\x29\x27\xda\x8f\x06\xd0\xde\xea\x38\x91\x14\x0a\x1d\xc6\x86\x66\xc3\xd9\xcf\x5e\xac\x55\x8c\xb6\x2e\x63\x3e\x57\xee\xf1\x07\x4e\x37\xe1\xae\x8c\x51\x40\xb1\x57\xd7\x95\xcc\x67\x85\xcc\x7b\x3d\x65\x04\x4f\xe9\x9d\xfc\x8a\xd6\xce\xea\x13\x68\x1c\x25\x4b\x2a\xf6\xd4\xf1\x11\xa0\x76\x0f\xd4\xee\xa9\xb3\x76\xcf\xc7\x22\xc1\x8e\x75\x0d\x91\x0f\xa7\x58\x79\x9f\x51\x74\xcc\x2b\xef\x53\x57\x4b\xae\x40\x09\x5e\xfb\xf9\xc5\x02\x6a\x8a\xbc\x89\xff\x6f\x9b\x4a\x04\xca\x16\x5e\x9e\x47\x97\x65\x08\xaf\xcb\xd3\x5a\x11\x72\x01\xcd\xa0\x69\x59\x84\xc4\x93\xe8\x78\x1d\xee\x8f\xcc\x03\x9f\x7b\xd5\x82\x40\x09\x13\x28\xdf\x8e\xa2\x6f\x45\xf1\xeb\xd1\xd8\x6b\x62\x80\x5e\x8a\x5e\x90\xf5\x53\x33\xa7\x38\x4c\xc7\x54\xe6\x8c\x79\x8b\x1d\xf7\xdc\x33\x99\x67\x8b\xe0\xc7\x60\xda\x45\x49\x60\xe4\xac\x5c\x5f\xce\xc8\xe8\x74\x20\xb8\x8a\x2a\x0b\x16\x46\x67\xc4\x27\xe0\xd3\xd1\x5c\x58\x30\xd2\x44\x74\x65\xaf\x73\xa4\x2d\x1b\x2c\x72\x66\xb6\x97\x6b\xae\xf4\x84\xa3\x64\x6c\xb2\x27\xe6\x0d\xdb\xb4\xd2\x42\x03\xf7\xb6\xc7\xc2\xf5\xbc\x87\x04\x16\x1d\xd2\x49\xf9\x6c\xa4\x93\x3b\xdd\x17\xe2\x0f\x99\x97\x14\x14\x93\xdc\x40\xfb\xb9\x60\xe8\x39\xdf\x3e\xaa\x98\x76\x61\x9a\xf6\xc0\x2f\xf7\xf8\x97\xa3\xe8\xd5\x28\x7e\x25\x1a\x7b\x59\x0c\xf3\x33\xd1\x71\xc9\x37\x3a\x4f\x0e\x23\x86\x80\x4a\xd3\xb6\x95\xd7\x33\xf4\x03\x4c\x5b\x59\x33\x75\xbd\x97\x8d\x01\xc3\x28\xee\xbb\x78\xce\xd5\x4c\x45\x1a\xd4\x14\x49\x95\x4c\x1b\x79\x23\x97\x26\x07\x65\xc1\x27\x0d\xc5\xb2\xf3\x97\x75\x72\xfe\xa5\xc3\x6a\x2f\x1a\xfd\xf3\x7a\xd6\xe5\xf9\x2a\xfb\x55\x55\xe6\xcd\x9c\x9e\x35\x1f\x77\xc1\xe0\x9c\x41\x34\x7e\xca\x1b\xfa\x99\xa6\x9f\xf6\x4e\x92\xac\xf1\x1e\xc7\xbb\x89\x11\x74\x4d\x99\x30\xe9\x74\x96\x3a\x6e\xd9\xe5\x6f\x46\x71\x12\x33\x66\x31\x80\x4f\x17\x9b\x55\xb8\xac\xa9\x9b\x58\x7f\xc6\xdd\x17\x71\x8a\x74\xd3\xf7\x76\xa1\x27\xbb\xf0\xbb\xbb\x62\x6f\x88\xc3\xf5\xd7\xc8\xe1\x9a\x3e\x94\x2c\xa9\xcb\xd6\x35\x25\xa3\xdb\x73\xe4\x10\x2a\xd5\x1f\x13\xeb\xc2\xb0\xe7\x2d\x7b\x81\x8c\x85\x6f\x4f\xcf\x97\x3c\x3c\xb8\xa3\x74\x3e\xbb\x93\x31\xcf\xde\xca\x24\x13\x25\x65\xa6\x3d\x54\x4e\xa9\x2b\x35\x5c\x88\xd1\x25\x07\x55\xce\x24\x5d\xae\xaa\x49\xc3\xe8\x12\x39\xf7\xfc\xe4\x29\xfb\xc5\x0f\xd3\x14\x56\x30\x8e\xee\xb2\xb2\x70\xe8\x61\xef\xd0\xa3\xf4\xf1\x0f\x5f\x3c\x31\x9c\x11\xa5\x27\xa9\xa7\xae\x92\x5d\x24\x97\x26\x57\xe9\xd9\xac\x75\x8d\x5e\x54\x32\x70\x0c\x83\xf3\xa9\x5f\xdc\x88\xfb\x06\x73\xa2\xa5\x11\xa5\xe7\x84\x65\x1b\x52\xb3\x4a\x4a\x77\x52\x7a\x9a\xbc\x3d\x1f\x1f\x2a\x6c\x59\x7b\x0e\x93\x5e\x65\x0d\xce\x8b\x36\x34\x75\x73\xbe\x74\xde\xc8\xbb\xff\x67\x22\x0d\xce\x93\x3f\xc3\x8a\xf1\x9d\x41\xa7\xa5\x62\x7c\x4d\xce\xbd\xdf\x94\x13\x86\xe2\xaf\x65\xac\xc7\x37\xb3\xb1\x47\xc9\x6f\x6e\x28\xd1\x09\x76\x53\xb4\x44\x0d\x9d\xec\x88\x1f\x7c\xda\xd8\x9e\xf7\x52\x78\xb5\x40\x51\xb8\xab\xb4\xa1\x3e\xfa\xfc\x3d\xe4\x9f\xc3\x77\xcb\x3f\x2e\x18\x76\xc6\x90\x7f\xdd\x29\xff\xea\x14\x6c\xbd\x60\x64\xcc\x54\x5f\xe9\x75\xc9\x73\x68\x0a\x4d\x96\x9c\x64\x86\xd1\x50\x1d\x5f\x9d\x86\x33\x81\x02\x12\xa6\x80\x7c\x72\x0d\x7a\x61\x0d\x7e\x7e\x4d\xec\x39\x21\xc5\xdf\xb3\x66\xf5\x9c\x68\x4a\xac\x23\x64\x9c\xa9\xb5\x9f\x5a\xf0\xf2\x8c\x83\xf2\xf0\xb9\x5d\xf2\x14\xa6\xbf\xb1\x89\xbb\x9b\x6e\x46\xcc\x39\x44\xcf\xd2\x3b\x89\xd6\xc5\xee\xa6\x57\x50\x0d\xc8\x51\x76\x4d\x3a\x56\x8e\x4e\xcb\x5e\xe5\x2c\x99\xf8\xfc\xdf\xb3\xee\x72\xf0\xfe\xb8\x3b\xf8\xa8\x95\x7c\x35\x82\x5e\x89\xe0\x97\x23\xb1\xcf\x09\x26\xf4\xb1\xc8\x09\xcb\x4e\x51\xe5\x2c\x63\xd1\x61\xb7\x14\x75\x9e\xfc\x49\x55\x46\x8b\xde\x42\x53\x4e\x17\xb8\x1e\x45\x59\x10\x9f\x9a\x7d\x7a\x8a\xbe\x38\x75\x9e\xc8\x9a\x29\xbe\x4f\x52\x74\x64\x5d\xe3\x63\xca\x9c\x0b\xf2\x86\x95\xcf\x1a\x9a\xc2\x9e\x38\x9f\xd5\x33\xe2\x5b\x52\x40\xed\x3b\x00\xe2\xf1\xea\x5a\xda\xad\x76\x10\xa4\xe0\x5c\x7b\x79\x56\xfd\xa1\x19\x1b\xc0\x6a\xca\x1e\x82\xff\x3a\x8a\x6e\x63\x0c\x79\x8e\x06\x33\xb2\x41\x48\xf4\xe3\x3f\x8e\xe2\x2f\x45\xd1\x2d\xf4\xaf\x7c\x9f\x4b\xc4\xee\xcc\x18\x85\x62\xeb\x28\x83\xdf\xf1\xbb\x32\x46\x21\x49\x2e\x65\x9b\x5a\x62\x74\xfa\xb4\xeb\x8c\xd3\x38\xaf\xb9\xe1\xb2\x86\x86\xcb\x1a\x1a\xae\xa6\xa1\xc9\x3c\x7a\x80\x4d\x5f\xb2\x77\x91\xe9\x4b\x69\x5c\x1d\x3b\x96\xf4\x9e\xd5\xb8\xcb\xe1\x4f\x9f\x73\x91\x7d\xca\xb0\x39\xf8\x37\x1c\xfa\x20\xd3\x12\x83\x2f\xff\x66\x66\x72\x66\x2e\xe3\x2e\x46\xfc\x8f\x67\xf1\x9f\x6f\x43\xb7\xc9\x57\x88\xaf\x33\x18\xe2\x02\xe9\xdd\x33\xcb\x5a\x9d\x61\xad\xc6\xa9\xef\xa4\xf4\x33\x57\x4d\x12\x81\x77\x74\xb8\x23\x24\x54\x2c\x06\xc7\x40\x70\x0c\x04\xc7\xc0\xd5\xe3\x18\x08\x15\x8b\xa1\x62\x31\x38\x06\x82\x63\x20\x38\x06\x82\x63\x60\x47\x38\x06\x42\xc5\xe2\x95\xe8\xc7\x07\x15\x8b\x9b\x51\xb1\xf8\x3a\x7a\x94\xd1\x88\x07\xd1\x03\x94\x46\x9c\x47\x67\xd1\x99\x40\x98\x56\x44\x0e\xf8\xd9\x5f\x0b\x3c\xaa\x37\x24\x8a\xef\x1d\xe1\x98\xed\x1c\x9e\xe2\x98\xcd\x87\x6c\xb8\x41\x7d\x41\x9d\x2c\x85\x70\x09\xa4\x7e\x1c\x05\x50\x0e\x95\x6d\x1d\x8a\x5e\x01\x68\x0c\xb0\x6b\xda\x82\x34\x18\x81\x78\x04\xbd\x0d\xbd\xb5\xc4\x28\x72\x1a\x9d\x6c\xd0\x47\x05\x1b\x09\x78\x7d\xd5\xe9\xf5\xf5\x9b\x51\xf4\x76\x66\xa9\x7d\x2b\x7a\x50\xb2\xd4\x9e\x41\x8d\x9b\x9e\xc1\x7e\x65\x0f\x31\x41\x37\x8b\xee\xa7\x82\xae\xa1\x0f\xbd\xc4\xdc\xcd\xde\x82\x2e\x7a\xee\x66\x8d\x7c\x40\xb8\xb0\xcc\x5b\xed\x11\x96\xf1\x9f\x0a\x42\xc2\x1a\x77\x3f\x90\x7c\x39\xac\xf9\x0a\x82\xf3\x30\xbb\xde\x4f\x70\x8a\x16\x5a\x25\x42\x01\xe2\x02\xc4\x05\x88\x0b\x10\x17\x20\x2e\x40\x5c\x80\xb8\x00\x71\x01\xe2\x02\xc4\x05\x88\x0b\x10\x17\x20\x2e\x40\xdc\xce\x83\xb8\xc1\x35\x15\x1a\xeb\x67\xef\x52\x88\xb8\x3f\x85\xd8\x82\x37\x33\xf9\xeb\x9d\xf8\xab\x25\x12\x35\x63\x87\x0a\x08\xa3\xf1\x8e\x8a\xff\x1e\x65\x75\x17\x9c\x7e\x7d\xb1\x60\x39\x29\x3d\x6b\xe6\x32\xfd\x4b\x03\x2c\xe6\x1d\xff\x8f\x28\xfe\x66\x14\x6d\x91\x7e\xbb\xc4\x7f\x0b\x76\x5a\xdc\x96\x31\x0a\xa3\xde\x0d\x17\xd9\xf5\xe0\xba\xe8\xef\xba\xf8\xc6\x5d\x68\x72\x39\xae\x8b\x6e\xad\x2d\x87\x4e\x63\xfc\xab\x77\xe1\x6f\xaf\x09\xa0\x56\x07\xa9\x88\x65\x17\xba\xf2\xc5\x93\xea\xc1\xf4\x8a\xde\x57\x0b\xf4\x67\x4b\xaa\xb1\xdc\x6a\x72\xb1\xa9\x94\x33\xcc\x94\x53\x39\x3e\xbe\x0d\x70\x32\xf6\x9d\xf5\x01\x9f\xf9\x90\x1b\x9a\x5f\xfb\x97\x76\x6f\x6d\xf7\xc7\x06\x3b\x0f\xd8\x79\x3a\xd3\xce\xf3\xd5\x48\xd3\x0d\x22\x6d\x31\xf3\x54\x99\x0b\xa0\xf5\x72\x2e\xf9\xb9\x8d\x01\x72\x2e\x59\x16\x1d\x58\xbb\xc0\x1b\xa4\x01\x2f\xed\x14\x77\x10\x49\xb8\xf2\xa4\x27\x44\x12\x42\x24\x61\x9b\x23\x09\xdb\xab\x2d\x87\x06\x18\xb6\x7e\x1f\x99\x3c\x81\xc6\x71\x52\x3d\x2e\xa2\x08\x77\xc8\xe1\x87\x81\x0d\x95\x47\x23\x36\xfc\x08\xfe\xbe\xed\xe8\x10\x3b\x01\x1a\x8f\x15\x8c\x1c\xcd\xc5\x2f\x0e\x7e\xa2\x16\xa2\x63\xa4\x16\x6d\xb3\x70\x9d\x26\x2d\x30\x45\x8d\x65\xfc\xa5\x6e\xfc\xbe\xb5\x08\x7b\xb7\x8a\xfd\xf1\x37\x23\x1c\x34\x49\xa5\x11\x73\x2e\xe4\x74\xa3\xd7\xa6\x69\x96\x10\xda\xf2\x34\xcf\xe0\xd0\x80\x42\x89\xbd\x9e\x69\x83\x9a\x6f\x38\x08\x37\x0b\xc6\x82\x27\xe5\x7a\x8a\xcc\x64\x52\xdb\x5a\x9c\x3d\x6e\x42\xbc\x13\xdf\x94\xcb\x3a\xdb\xe1\x01\x73\x6d\xa9\xb1\x18\xbc\xf6\xae\xb1\xb5\xf7\xf6\xf0\xb5\x77\x04\x8f\x04\x61\x29\x6f\xa2\x79\x85\x17\x8b\x3f\x0a\x14\x10\x00\x17\x13\x70\x31\x01\x17\x93\x55\xe4\x62\x02\x05\x04\xa0\x80\x00\xb8\x98\x80\x8b\x09\xb8\x98\x80\x8b\x49\x47\xb8\x98\x4c\x1e\x45\x87\xf1\xb0\x3a\x24\x4e\xbb\xf7\xc8\xa7\xdd\x32\x95\xbd\xf9\xa7\x5c\x28\x40\xb0\x12\x7d\x5e\xa0\x00\x41\x33\x0a\x10\xfc\x8f\x33\x6e\xc9\x46\x3e\x6f\x3c\x6f\x00\xf7\x2f\xa9\xac\xee\x38\x86\x83\x7f\xfd\x0c\xfe\xd1\x6d\x08\xf1\xbf\x5e\x5a\x4a\xc4\xe2\x95\xb3\x15\xcd\xb2\x2b\xc7\xc8\xfd\xf1\xad\xe4\x5a\xfe\x97\x8b\x09\xf9\xa7\x0e\x07\x2b\x10\xc4\x02\x84\x01\x08\x03\x10\x86\xd5\x43\x18\x20\x88\x05\x82\x58\x80\x30\x00\x61\x00\xc2\x00\x84\xa1\x23\x08\x03\x04\xb1\xac\xc4\x03\x3d\x04\xb1\x34\x23\x88\x65\x0e\x9d\x64\xd6\xfe\xe3\xe8\x28\xb5\xf6\x0f\xa1\x83\x68\x7f\xa0\x33\x8e\x7b\xea\xa7\xc1\x29\xde\x99\xbc\xaa\x94\x43\x0f\x85\x1b\xf7\x07\xf1\x01\x6e\xcb\x2f\xc6\x0b\xdc\x9e\x2f\x3f\x52\x76\xa3\x41\x61\xe9\x8c\xd4\x1f\x5b\x5f\x44\x22\x6e\x17\x19\x85\x8a\xa0\xc3\x5d\xec\xcf\xcd\xc5\x0e\xf5\x15\x83\x0b\x18\x78\x70\x78\x04\x77\xf1\x3a\xdd\xc5\x7f\x10\xa9\xa3\x5c\x5b\xc0\x34\x44\xa7\x59\x82\xa1\x24\x3a\x2e\x25\x18\xaa\xaf\xa9\xc6\x54\xa8\x0b\x68\xbd\xda\x8c\x3e\xd5\xc9\x2a\x59\x04\x55\x2d\xb7\xe2\x5f\x50\x8a\x64\xd1\x36\xdf\x84\x3d\x45\x72\x89\xd7\x9a\x13\x72\xc9\xcb\xcc\xd3\x44\x09\x05\x1c\x13\x38\x26\x70\x4c\xe0\x98\xc0\x31\x81\x63\x02\xc7\x04\x8e\x09\x1c\x13\x38\x26\x70\x4c\xe0\x98\xc0\x31\x81\x63\x76\x1e\xc7\xcc\x34\xb8\xb6\x6d\x3b\x61\x66\x0d\x89\x7e\x1a\x1f\xf2\xf7\xa7\xdb\xd0\xe6\x7e\x3d\x6f\xf6\x2f\x25\xfa\x8d\x5c\x3a\x6f\x99\xb9\x82\x83\xbf\xb0\x0d\xbf\xbc\x06\xdd\x9c\xb2\x6c\xca\x2c\x7a\x2a\x7b\x72\x4d\xb8\xf7\xc5\xbb\x69\x9d\x39\xcb\x36\x2e\x26\xc4\x1f\x4f\x58\xf6\x68\x36\x2b\x8a\xe0\x76\xba\x43\xd7\xe4\xc3\x68\x94\x4d\xad\x61\x34\x44\xa7\xd6\x00\xda\x8b\xb4\xe0\x78\x55\xcb\xa6\xd8\x49\xbc\x6f\x43\xf2\xf1\x9f\x09\x9f\x6f\xbb\xf0\x4e\x3e\xdf\x54\x95\xcf\x31\xd1\x87\xa2\x09\x06\x41\x70\x80\x76\x00\xed\x00\xda\x59\x3d\x68\x07\x82\xe0\x20\x08\x0e\xd0\x0e\xa0\x1d\x40\x3b\x80\x76\x3a\x02\xed\x40\x10\x1b\xb0\x22\x08\x62\x6b\x53\x10\xdb\xeb\x18\x0d\xba\x88\x23\x27\x30\x04\xcb\x5a\x44\xff\xfd\x4e\x9a\xd5\xc8\x4d\x5f\x9b\xb7\xad\xc7\xae\xf7\xff\x2f\x79\xbd\x70\xf9\x9d\xf8\x17\x31\xfe\x70\xd4\x03\x21\xdb\x53\x56\x2e\x47\x24\xc6\xc9\x89\x0b\x5e\xea\xb0\x82\xa5\xd0\x9b\x48\xff\xa7\xad\x74\x3c\xce\xaf\x62\x20\xe4\xa4\x51\x10\xf0\x23\x3d\x6d\xa5\xa7\xc9\xa5\x0f\x9a\x85\xcb\xd3\x7a\xe1\xf2\xc0\x9a\x78\x7f\x9c\x71\x87\x41\x74\x37\xe3\x0e\xb7\xa3\x2d\x94\x3b\xdc\x82\x36\x7c\x2a\xb2\x0e\xf1\xe9\x11\x8a\x14\xb6\xf9\x23\x05\x84\xd7\xf1\xee\xa0\x2b\xf7\x87\x53\x05\x0d\xf7\x96\x52\x05\xb7\xcf\xe7\x29\x24\x28\x66\x0b\x31\xdf\xd1\x99\x7e\xa0\xea\xd1\x99\x5e\x5c\xc1\xa3\xa3\x3e\x2d\x8d\xce\x0e\x31\x3a\xe7\x67\x2b\x0c\xcf\x9e\xe2\xe1\xb1\x9c\x6a\xc7\x27\xd0\x91\xaa\xe2\xc0\xb9\xe3\xd3\xf8\x97\xaf\x62\xc8\xe3\xbf\x20\x8d\x4f\x8f\x3b\x3e\xe3\x13\x53\x13\x17\x26\x82\x47\xa8\xaf\x68\x84\xc6\xa9\x92\x74\x63\xcd\xa1\xf0\xc1\xf3\x06\x7a\xe0\x59\x69\x8c\x76\xb9\x63\x74\x7e\xfa\xc2\xe9\xf3\xe7\x66\x83\x07\x49\x2b\x1a\x24\xfe\x88\x1b\x6b\x94\xfc\xc7\xc3\x7f\xec\x86\x7d\x57\xda\xa9\x89\xd1\xf1\x6a\x57\xda\x29\x43\x4f\xb7\x64\xa5\xb5\x65\x16\x25\x3f\x2a\x8d\xcf\x4e\x21\x89\x46\x2f\x8c\x9d\x0a\x1e\xa0\xde\x62\x51\x44\x36\xd6\x96\xcc\xa0\xc6\x4f\x8f\x2a\x06\x7d\xf2\x30\x1a\xc6\x43\xea\x41\x91\xa7\xe2\xae\x92\x3c\x15\x72\x83\xe5\x59\x2a\xde\x8e\x1e\xc5\x0f\xab\x0f\x89\xbb\x87\xf9\xd1\x82\x39\x1a\xe7\xd2\x0a\x79\x4d\xc5\x49\x59\x79\xa3\x57\x71\x16\x53\x54\x29\xa4\x2a\x9d\xa1\x2f\x30\xad\x28\x6f\x5b\xf4\x28\xa3\xae\x17\x9a\x89\xfc\x84\x03\x68\x1f\x4e\xa8\xfd\xe2\x09\xb7\x91\xff\x75\x35\x2d\x57\x0f\x52\xe9\x6f\xf2\x6d\x3a\xba\x84\x1f\x89\xbd\xcd\xd5\xd6\x46\xc9\xb7\xa2\x67\xe2\xcb\x86\xf2\xc0\xcc\x94\xe2\xb6\xb2\xe8\x18\x42\xc5\xe4\x1a\x31\x9f\x0d\xee\x71\x93\x4c\x0f\x2b\xad\xb1\x47\xc8\x36\xa4\xbf\x8f\xa3\x04\xcb\x12\x30\x47\x73\x44\x06\xeb\x59\x57\xac\x39\x91\x2e\xf2\xb3\x71\xfc\x0b\x6b\xd1\x3a\x7a\x0b\x99\x95\x77\x50\xed\xbd\x98\xaa\x4f\x5a\x73\xf1\x37\x93\xbf\x27\xc9\x55\x17\x13\xde\xf4\x9b\xb4\xe6\x1a\xec\x00\xfb\x42\x04\x3d\x1f\xc1\xcf\x45\x62\xcf\x0a\xd5\xf6\xa9\xc8\x2c\xc3\x32\x14\xed\x3c\x46\x11\xc9\x1c\xf9\x97\x9e\x2a\x68\x8a\x32\x41\xfe\xeb\xfe\x7d\x41\x37\xa9\x3b\xb7\xa3\xa4\xb2\x8b\x4e\xc1\xb0\xfb\xf8\x6b\xa4\xdc\x4c\xab\x59\xf3\xaa\xa1\xf4\x88\x57\xe8\x21\xe7\x28\x37\xbf\xa5\xa6\x4c\x67\xf5\x5c\x8e\x9f\x8c\xa8\xce\xab\x67\xc9\x51\x24\xa1\x25\x86\x34\x75\x2d\x7d\xa4\xac\xd5\x26\x9f\x89\xa0\xa7\x23\xf8\x43\x91\xd8\x07\x45\x77\x1f\x17\xbd\x15\x46\x98\x39\xb7\xdf\xe4\x11\xca\x04\xeb\x2a\xf9\x72\x79\xc7\xed\x16\x3f\xc0\xd3\x7c\xb1\xe4\xe4\x4d\x31\x0a\x53\xaf\x6b\xe8\xe1\x4d\xec\x31\x45\x46\xda\x59\x34\xc4\xe4\x40\x02\xf5\x53\x39\xb0\x1b\xf5\xa0\x1d\x81\x96\x34\x3a\x13\xb4\xa5\x84\x36\x69\xcd\x85\xca\x88\x53\xe1\x32\x62\x07\xee\xe6\x72\x81\xb6\xcc\x45\x03\x69\xbc\x48\x4d\xa9\x5c\x4f\x21\xf6\x13\xeb\xa4\x39\xba\xd5\x2d\x68\x50\x3e\x4d\xef\xe2\x3f\xb5\x60\xa6\x8e\xa0\x43\x68\xb0\x24\x98\xa4\xda\x81\x85\x08\x12\x88\x20\xa9\x33\x82\xe4\x03\x91\x65\xac\xe7\x23\x2c\xf6\xe4\x20\xda\xef\xc5\x9e\x34\x50\x1c\x84\x14\x0b\x68\x98\xb4\x88\xff\xed\xad\x92\x38\xd8\xc8\x63\x39\x74\x2a\x01\x62\xec\xff\xb5\x40\x00\x5c\x40\x33\x68\x5a\x16\x00\xf1\x24\x3a\x5e\x87\xf3\x0b\x3b\x3b\x71\x9d\x06\x24\x43\x98\x64\xf8\x76\x14\x7d\x2b\x8a\x5f\x8f\xc6\x5e\x13\x03\xf4\x52\xf4\x82\x4c\xdc\xcc\x9c\xe2\x30\x6a\xa6\xcc\x19\xf3\x16\x03\xd8\x2e\x65\xf6\xbc\x2b\x38\xd8\xa7\x5d\x94\x56\x7e\xce\xca\xf5\xe5\x8c\x8c\x4e\x07\x82\x43\x37\x59\x42\x30\x7b\x93\xf8\x04\x7c\xf2\x99\x0b\x0b\x46\x9a\xc8\xa0\xec\x75\x6e\xa4\x97\x5d\x30\x72\x66\xb6\x97\xb3\x38\xca\x6c\x95\x8c\x4d\xf6\xaf\xbc\x61\x9b\x56\x5a\x28\x7c\xde\x56\x56\xb8\x9e\xf7\x8c\x1c\x8b\x0e\xe9\xa4\x4c\x7b\x75\x72\xa7\xfb\x42\xfc\x21\xf3\x92\xca\x60\x92\x1b\x68\x3f\x59\x16\x7a\x9f\x3e\xaa\x98\x76\x61\x9a\xf6\xc0\xcf\x1f\xed\xcb\x51\xf4\x6a\x14\xbf\x12\x8d\xbd\x2c\x86\xf9\x99\xe8\xb8\x94\x0a\x3c\x9f\x35\x74\xc7\x10\x66\xb2\x69\xdb\xca\xeb\x19\xfa\x01\x58\x0e\xb9\x5e\x36\x06\xcc\x30\xe4\xbe\x8b\x97\x4b\x9c\x29\x2d\x83\x9a\x22\x29\x77\x69\x23\x6f\xe4\xd2\x44\xe7\x15\x16\x57\x43\xb1\xec\xfc\x65\x3d\x47\xde\x88\x0c\xab\xbd\x68\xf4\xcf\xeb\x59\xd7\x43\x41\x65\xbf\xaa\xca\xbc\x99\xd3\xb3\xe6\xe3\xae\xa9\x73\xce\x50\xf4\x74\x9a\x5a\x50\xfa\x19\xbb\x4c\x7b\x6c\x9c\x35\xde\xe3\x78\x37\x31\x9f\x00\x4d\x99\x30\xe9\x74\x96\x3a\x6e\xd9\xe5\x6f\x46\x0d\x64\xcc\x3d\x87\xb9\x24\xd0\xc5\x66\x15\x2e\x6b\xea\x26\xd6\x9f\x71\xf7\x45\x9c\x22\x6d\xf1\xbd\x5d\xe8\xc9\x2e\xfc\xee\xae\xd8\x1b\xc2\x5c\xf0\xb5\x35\x0f\x72\x9b\x21\x59\x52\x97\xad\x6b\x4a\x46\xb7\xe7\xf4\x4c\x51\x68\x9a\x58\x17\x86\x3d\x6f\xd9\x0b\x64\x2c\x7c\x7b\x7a\xbe\xe4\xe1\xc1\x1d\xa5\xf3\xd9\x9d\x8c\x79\xf6\x56\x26\x99\x28\x29\x33\xed\x19\xff\xa9\x1d\x99\x55\x29\x70\x47\xd7\x31\x0a\xae\x95\xd5\xb5\x14\x6b\xd2\x30\xba\x36\x46\xf7\x24\xe4\xa9\xdf\xc5\x0f\xd3\x14\x16\xb0\x48\xb7\x4b\x59\x38\xf4\xb0\x77\xe8\x51\xfa\xf8\x87\x2f\x9e\x18\xce\x88\xd2\x93\xd4\x53\x57\xc9\x26\x91\x4b\x93\xab\xf4\x6c\xd6\xba\x46\x2f\x2a\x19\x38\x66\xd8\xe7\x53\xbf\xb8\x11\xf7\x0d\xe6\x44\x4b\x23\x4a\xcf\x09\xcb\x36\xa4\x66\x95\x94\xee\xa4\xf4\x34\x79\x7b\x3e\x3e\x54\xd8\xb2\xf6\x1c\x26\xbd\xca\x1a\x9c\x17\x6d\x68\xea\xe6\x7c\xe9\xbc\x91\xb7\xf1\xcf\x44\x1a\xec\x3b\x39\xc3\x82\x41\xcf\xa0\xd3\x52\x30\x68\x93\xfd\x31\x15\xff\xfd\x7e\x3d\xbe\x99\x0d\x53\x03\xb7\xfc\xe4\xaf\x6e\x90\xb6\x7c\xb5\xac\xd4\x4f\xf9\x51\x60\x2b\x2d\x2d\xd1\x5c\x3d\x00\x8a\xf5\xac\x3c\xfd\x02\x8a\xf5\x40\xb1\x9e\x36\x17\xeb\xb9\x31\x90\x4d\x58\x51\x9f\xc9\xbd\x48\xc3\xbd\x6a\x5c\xb0\xd2\x5b\x65\x96\x3b\x69\xcd\xb5\x83\xdf\x36\xdc\x75\xff\xaf\x7a\xd1\x41\x9e\x9c\x35\x75\xd9\x48\x2f\x66\xcd\x5c\xa6\xb4\x5a\x6b\xde\x36\x2d\xdb\x2c\x5c\xe7\x59\x5a\x5d\xf6\xfa\x62\x2f\xfe\xfe\x5a\x84\xbd\xfb\x44\xa9\x1e\xc5\x87\xc2\x4e\xf3\x46\x58\x76\x02\x95\x5c\x31\x2b\xee\x74\x0b\xe2\xc8\xd7\x00\x99\xed\x70\x32\x5b\x5b\xf8\x8c\x26\xcd\x2f\xb7\x22\x57\xd1\xf7\x0e\x5d\xfa\xa9\xf0\xa5\x7f\x1c\x1f\x75\xc3\x67\x4a\x67\xb3\x6b\xd4\x29\x7a\x64\x59\x55\xa0\x30\x90\xfb\xc4\x7a\xdf\x09\xdf\xed\x8f\x74\x8b\xe7\xfc\x0e\x7e\x51\x4b\xa7\xfd\x79\x74\x16\x9d\x29\xd1\xbf\x96\xf3\x95\x40\x01\x03\xf4\x5b\x27\xfa\xfd\xed\x48\x63\x8a\xdf\x87\x4b\x92\xfb\x19\x27\x9e\x44\xa7\x3c\x4e\xbc\xbc\x26\x6b\x93\x41\x41\xc5\xc6\xaa\x13\x4a\x21\x1c\x3a\xfe\xfc\x26\x5f\x19\x74\x87\xe0\xc8\xc5\x62\x67\x3b\x4f\x04\xd4\x4a\xa9\x03\x6c\x19\xd8\x32\xb0\x65\x60\xcb\xc0\x96\x81\x2d\x03\x5b\xf6\x67\xcb\xad\x50\x25\x92\xff\xb6\xc1\x57\x57\xe8\x0d\x01\xd0\xc5\x1a\x44\x37\x05\x22\xad\x52\x20\x00\x4a\xaf\x3c\xc5\x04\xa0\x34\x40\xe9\x36\x43\xe9\x56\xd3\xaa\xd0\x9a\xf1\xad\xc0\x59\x93\xc3\x68\x08\x1f\x54\xf7\x0b\x22\xbd\xb5\xc8\x1f\x59\xbe\xb9\x05\x95\xe1\xdf\x50\xd1\x76\x37\x86\x8a\x17\x82\xe7\xa2\x2e\x57\x58\xb2\xb2\x8b\x0b\x46\x2a\xab\x9b\x0b\x0e\xfe\xaa\x8a\xff\x5b\x97\xe7\x6a\xfe\x04\xaf\xfc\x4e\x64\xe8\x92\x99\x5e\xd4\xb3\x45\x45\xe0\x45\xc0\xfb\xb4\x68\xed\x22\x6d\x6d\x8c\xb4\xd6\x90\x02\xf0\x5a\x7c\x3f\xbd\x81\x3b\xb1\xfb\x3d\x67\xca\x74\x0a\x37\x5a\x96\x9a\xab\x8d\x2f\xdb\x1e\xba\x2e\xba\xfd\xd7\xc5\x46\x8c\x68\xc7\x58\xe6\x9a\x07\xc3\xd7\xc6\x7e\x3c\x50\xe6\xb0\xef\xf7\x5d\x20\x8b\x0d\x64\xb1\x81\x2c\x36\x90\xc5\x06\xb2\xd8\x40\x16\x1b\xc8\x62\x03\x59\x6c\x20\x8b\x0d\x64\xb1\x81\x2c\x36\x90\xc5\x06\xb2\xd8\x40\x16\x9b\x55\x97\xc5\xe6\xeb\x53\xe8\x00\xf3\xf6\xd3\xf3\x79\x47\x38\xf8\x05\x04\x5a\xa7\x8d\x7c\xd6\xba\x4e\xb6\x3e\x07\x7f\x74\x0a\xff\xf8\x36\xb4\x91\xdc\x26\xac\x08\xbb\x2a\x67\xf4\x1d\x17\xb7\xb3\x94\xbe\xa3\xf9\xbc\xc3\x4d\x07\x9e\x3f\xbb\x77\x51\x87\xc3\x12\xa8\x6d\x04\xe8\x00\xd0\x01\xa0\x83\xd5\x83\x0e\xa0\xb6\x11\xd4\x36\x02\x74\x00\xe8\x00\xd0\x01\xa0\x83\x8e\x40\x07\x50\xdb\x68\x25\x9e\xf4\xa1\xb6\x51\x07\xd4\x68\x27\xe7\x7a\xe1\xe8\xe2\x9d\xc9\x1b\x52\x86\x66\x36\xdc\x98\xbf\x17\x6b\xdc\x98\x4f\x3a\xc2\xcd\xf9\x5e\x37\xca\x1d\x5b\xd4\x9f\x58\x5f\x02\x23\xb6\x88\xf2\xec\x12\x77\xd8\xc1\xfe\xd8\x2a\xf2\x50\x5f\x99\xf6\x80\xb1\x07\xaf\x42\x88\xb4\xaa\xbf\x4c\x7b\x4d\x85\xcf\x03\x66\x60\x1d\xb5\xde\x83\x5a\xaa\xa3\xd6\x7b\x50\x53\xf5\x8b\x23\x56\xa6\xbd\x3a\x71\x14\xe4\x77\xed\x2f\x9f\xe2\x5f\x54\x4a\xc4\xd1\x7d\xbe\x15\xda\x25\xd1\xd4\xcf\x2e\x90\x44\x93\x57\xa1\xbd\x05\x42\x0a\x68\x26\xd0\x4c\xa0\x99\x40\x33\x81\x66\x02\xcd\x04\x9a\x09\x34\x13\x68\x26\xd0\x4c\xa0\x99\x40\x33\x81\x66\x02\xcd\xec\x3c\x9a\xd9\xea\x4a\xed\x35\x54\x53\x6f\x0a\xde\xbc\x11\x33\xc9\x7d\x50\x45\x2a\xf3\x2d\x33\x1e\x2b\x18\x39\x87\x7e\x14\xd7\xc3\xcc\xcc\x65\x6c\xc3\x71\x0c\x07\xff\xed\x36\xfc\xfd\x35\x08\x7b\xd7\x08\x64\xb2\xa3\xb2\x3b\xd9\x69\xd6\x44\xbc\x97\x5c\x36\x21\x6e\xe7\xf0\x84\xff\x7a\xa3\x45\xe0\x19\xc1\x29\x91\x26\xd9\x8c\x1f\x43\xa3\x74\xc6\xd3\x7a\x0d\x81\xb0\xcc\x1b\x4e\x81\xcc\xf8\x88\x4c\x99\x4e\xa1\x5a\x52\x7f\x31\x7c\x2a\xef\xc3\x09\x3e\x95\xbd\x47\xf2\x09\xcd\x1f\xe8\x33\x9b\x01\x36\x01\x6c\x02\xd8\x04\xb0\x69\xd5\xc0\x26\x88\xba\x83\xa8\x3b\x80\x4d\x00\x9b\x00\x36\x01\x6c\xea\x08\xd8\x04\x51\x77\x40\xaf\x20\xea\xae\x4d\x51\x77\xbf\xb2\x01\xed\xab\xa1\x76\xbc\xb1\x64\xb2\x73\xf9\x3f\x20\xf5\x55\x29\x0d\xd2\x9b\xb9\x87\x9b\xfb\x3b\x5b\x14\xd3\x56\x3a\xbe\x8d\xfd\xc2\xb2\x13\x15\x55\xd7\x9d\xe0\xd7\xb6\xd9\xc5\x8d\x67\xb6\x74\xd1\x84\xdb\xab\xc9\x1f\x54\x48\x09\x5d\x93\x07\x53\xc0\x03\xea\xf0\x60\x0a\x6a\xa9\x0e\x0f\xa6\x80\xa6\x5c\x1a\x53\x13\x38\x64\x6d\x71\xd2\x22\x3a\x55\x9e\xbf\x3e\xc4\xfb\x69\x12\x9c\x0a\x2b\x3b\x15\x4e\x82\x53\x61\x80\x53\x61\x59\xe9\x68\x39\x95\x9c\x3b\x23\x57\x44\x4d\x94\xf7\x76\x23\x8d\x91\xec\x94\x65\xd9\x69\x33\x47\xe7\x7e\x69\x55\x14\x96\xc1\x8e\x66\x7a\x76\xf0\x57\x54\xfc\xc7\x5d\xe8\x36\xf9\x7a\xc1\xb5\xdf\x51\x5d\xf6\xba\x29\xd2\x52\x83\xb2\xd5\x25\x78\xb6\x3a\xaf\x37\x1c\x93\xd3\x87\x40\xaa\xba\xea\x52\xd5\x3d\x12\x2e\xa0\x87\xf1\x10\x17\xd0\x3e\x53\x85\x4b\x6b\x3a\xe6\x3e\xa2\xba\x9a\x4c\x78\x80\xce\x01\x9d\x03\x3a\x07\x74\x0e\xe8\x1c\xd0\x39\xa0\x73\x40\xe7\x80\xce\x01\x9d\x03\x3a\x07\x74\x0e\xe8\x1c\xd0\xf9\x6a\x40\xe7\xff\x7e\x16\x1d\x67\x28\x86\x01\xd0\xb0\x94\x75\x79\x2b\x9d\x36\x1d\x7b\x91\x9e\x89\xe7\x16\xd3\x19\xa3\xe0\xe0\xdf\x3a\x8b\x7f\x63\x1b\x7a\x13\x6b\x41\x60\x99\x44\x65\x77\xc3\x69\x2b\x3d\x2e\x5a\x4a\xd2\x96\xe2\x1a\xb9\x85\x15\x2c\x2a\x0b\x27\xf7\xb9\xbe\xc3\x99\x0a\xc4\x80\x02\x5b\x00\xb6\x00\x6c\x61\xf5\xb0\x05\x88\x01\x85\x18\x50\x60\x0b\xc0\x16\x80\x2d\x00\x5b\xe8\x08\xb6\x00\x31\xa0\x2b\x11\x05\x40\x0c\x68\x33\x62\x40\x17\x58\x1d\xdf\xbd\xb4\x8e\x6f\xf4\xfc\x19\x1a\x19\x77\xac\x5a\xe7\x2b\x9f\xe3\x79\x43\x92\xdb\x3d\x1a\xee\x23\x30\x82\x0f\xf9\x39\x71\xf9\xf4\xc8\x27\xcf\xdd\xd7\xd7\x97\x81\x8b\xbb\x45\xa6\x3b\x3f\x46\xb1\x97\xfd\xda\x06\x4a\xc1\xa0\xc2\xfd\xe8\x3c\x3a\x5b\xe2\x1a\x78\x04\x8d\x2c\xe3\x3b\x41\x22\x3c\x48\x84\x57\xa7\xcf\xda\x4f\x47\xd1\x39\x26\x34\x4e\xa2\x09\x2a\x34\x8e\xa1\xe5\x4d\x46\x34\xcb\x3c\x4a\xa7\xd0\xa4\xe7\x51\xba\xec\x46\x2f\x30\xe7\xd2\xb3\xe8\x8c\xe4\x5c\xba\xec\x56\x97\x9b\x29\xaf\xc9\xb2\x2d\xfe\x7d\xa5\x4c\xb6\xed\xf2\x4d\x9b\xe7\x27\xe7\x86\xd9\x95\x45\x72\xce\x2f\x83\x5e\xf3\x25\x1e\x60\x54\xc0\xa8\x80\x51\x01\xa3\x02\x46\x05\x8c\x0a\x18\x15\x30\x2a\x60\x54\xc0\xa8\x80\x51\x01\xa3\x02\x46\x05\x8c\xda\x79\x18\xb5\xd5\xa9\xf4\x9a\x0c\x11\x6a\x49\xd5\x77\x23\xc6\x22\xbe\x5f\x43\x27\x97\xeb\x00\xc7\x03\xcb\xf1\xef\xf5\xe1\x7f\x5a\x5b\x86\x5c\x76\x52\x39\x51\x7c\xdc\xf6\x75\x7e\x23\xd7\xb5\x0d\x2b\xbf\x10\x41\xcf\x47\xf0\x73\x91\xd8\xb3\x62\xa9\x3d\x15\x99\x65\x5a\x1d\xd5\x0c\x1f\xa3\x1a\xd6\x1c\xf9\x97\x9e\x2a\x68\x8a\x32\x41\xfe\xeb\xfe\x7d\x41\x37\x29\x77\x74\x94\x54\x76\xd1\x29\x18\x76\x1f\x7f\xd9\x14\x3f\x7c\x28\x59\xf3\xaa\xa1\xf4\x88\x57\xea\x21\x72\xdd\x8d\xc4\xd4\x94\xe9\xac\x9e\xcb\x71\x49\x4d\xd7\xa0\x9e\x25\xa2\x31\xa1\x25\x86\x34\x75\x2d\x7d\xa4\xbc\xca\x92\xcf\x44\xd0\xd3\x11\xfc\xa1\x48\xec\x83\xa2\xbb\x8f\x8b\xde\x0a\x86\x33\xe7\xf6\x9b\x3c\x42\x99\x60\x5d\x25\xdf\x3e\xef\xb8\xdd\xe2\xfb\xff\xa2\x43\xb6\x75\x3d\xc7\xb4\x30\xb6\xdc\x6b\xe8\xe1\x4d\xec\x31\x45\x82\xc0\x6c\x38\x1a\x0d\x13\x05\xf7\xf8\x2f\xd5\x9b\x70\x17\xb9\xbb\xd9\x92\x22\xf6\xfe\x72\x53\xca\x6e\xdb\xc8\x67\xf5\x94\x51\xc5\xf4\x4f\xf0\x4b\xc1\xb0\x02\x86\x15\x30\xac\x7c\x36\xd2\x1c\x43\x48\x60\x36\x90\x06\xcb\xaa\x70\x91\x94\x5f\x6c\x81\x05\xe4\x53\x9b\xca\xad\xbb\xdc\x02\x12\x60\xdd\xf5\xb1\x7a\xb4\x52\x08\x5d\x40\x33\x68\x5a\x16\x42\xf1\x24\x3a\x5e\x87\xf2\x38\x4e\x5f\xe3\x3c\xed\xa8\x03\x72\x28\x4c\x0e\x7d\x3b\x8a\xbe\x15\xc5\xaf\x47\x63\xaf\x89\x01\x7a\x29\x7a\x41\x3e\xdd\x98\x39\xc5\x61\x27\x14\x65\xce\x98\xb7\xd8\xd9\xde\x3d\x80\x7b\x86\x27\xce\x3c\x68\x17\x25\x39\x93\xb3\x72\x7d\x39\x23\xa3\xd3\x81\xe0\x07\x1c\x59\x1e\x31\x14\x27\x3e\x01\x9f\xa2\xe6\xc2\x82\x91\x26\x12\x2f\x7b\x9d\xdb\x2f\x64\xeb\x54\xce\xcc\xf6\xf2\x73\x0f\x3d\x1f\x2b\x19\x9b\xec\xb4\x79\xc3\x36\xad\xb4\x38\xbf\x79\x9b\x6e\xe1\x7a\xde\xe3\x3f\x8b\x0e\xe9\xa4\x7c\xb2\xd6\xc9\x9d\xee\x0b\xf1\x87\xcc\x4b\xea\x90\x49\x6e\xa0\xfd\x5c\x30\xf4\x9c\x6f\x1f\x55\x4c\xbb\x30\x4d\x7b\xe0\x77\x9e\xfb\x72\x14\xbd\x1a\xc5\xaf\x44\x63\x2f\x8b\x61\x7e\x26\x3a\x2e\x25\xe4\xc8\xd3\x74\x1f\x82\x20\x4e\xdb\x56\x5e\xcf\xd0\x0f\xc0\x56\x64\x2f\x1b\x03\xc6\xcc\xdc\x77\xf1\x32\x7a\x30\x85\x6c\x50\x53\x24\xc5\x35\x6d\xe4\x8d\x5c\xda\xc8\x15\x3c\x18\x6d\x28\x96\x9d\xbf\xac\xe7\xc8\x1b\x91\x61\xb5\x17\x8d\xfe\x79\x3d\xeb\x1a\x6f\x54\xf6\xab\xaa\xcc\x9b\x39\x3d\x6b\x3e\xee\x52\xe0\x39\x83\x9c\x17\x29\x5c\xea\x67\xe7\xc4\xb4\xc7\x21\x58\xe3\x3d\x8e\x77\x13\x33\x97\x68\xca\x84\x49\xa7\xb3\xd4\x71\xcb\x2e\x7f\x33\xca\x0e\x99\xe5\x92\x59\x6b\xe8\x62\xb3\x0a\x97\x35\x75\x13\xeb\xcf\xb8\xfb\x22\x4e\x91\x26\xfc\xde\x2e\xf4\x64\x17\x7e\x77\x57\xec\x0d\x81\x66\xbe\xb6\xe6\x41\x8e\x53\xc9\x92\xba\x6c\x5d\x53\x32\xba\x3d\xa7\x67\x8a\xcc\xbe\x62\x5d\x18\xf6\xbc\x65\x2f\x90\xb1\xf0\xed\xe9\xf9\x92\x87\x07\x77\x94\xce\x67\x77\x32\x32\xa9\x4b\xe6\x69\xda\x48\x99\x69\xcf\x2e\x42\x11\x3b\xb5\x52\x89\xd1\x75\x8c\x82\x0b\xa0\x5d\x88\xae\x49\xc3\xe8\xe2\x57\xf7\xf4\xed\x1d\x2d\x8a\x1f\xa6\x29\xcc\xb4\x4f\x37\x67\x59\x38\xf4\xb0\x77\xe8\x51\xfa\xf8\x87\x2f\x9e\x18\xce\x88\xd2\x93\xd4\x53\x57\xc9\x36\x93\x4b\x93\xab\xf4\x6c\xd6\xba\x46\x2f\x2a\x19\x38\x66\xf3\xe0\x53\xbf\xb8\x11\xf7\x0d\xe6\x44\x4b\x23\x4a\xcf\x09\xcb\x36\xa4\x66\x95\x94\xee\xa4\xf4\x34\x79\x7b\x3e\x3e\x54\xd8\xb2\xf6\x1c\x26\xbd\xca\x1a\x9c\x17\x6d\x68\xea\xe6\x7c\xe9\xbc\x91\x95\x86\xcf\x44\x1a\xcc\x1e\x66\x98\xdb\xc4\x19\x74\x5a\x72\x9b\xb8\xc1\x79\x86\xe2\xaf\x91\xac\xc7\x37\xb3\xcf\x80\x92\xef\xdd\x58\xa6\x34\x0c\x50\x4a\x49\x4d\xdc\x8c\x16\x55\x71\xa0\xe9\xcf\xeb\x85\xd4\xe5\x76\x68\x12\x77\x95\x36\xd4\x47\xbb\xb2\x87\xfc\x73\xf8\x6e\xf9\xc7\x05\xc3\xce\x18\xf2\xaf\x3b\xe5\x5f\x9d\x82\xad\x17\x8c\x8c\x99\xea\x2b\xbd\x2e\x79\x0e\x4d\xa1\xc9\x92\xc3\xd2\x30\x1a\xaa\x63\x5a\x4c\x93\x46\x41\x43\x09\xd3\x50\x3e\xb9\x06\xbd\xb0\x06\x3f\xbf\x26\xf6\x9c\x10\xf3\xef\x59\xb3\x7a\x4e\x4a\x25\xb6\x32\x32\xce\xd4\xf7\x83\xda\x73\xf3\x0c\xb3\x33\xb3\x90\xb2\x4b\x9e\xc2\xf4\x37\x36\x71\x77\xd3\xdd\x8a\xb9\x0a\xe9\x59\x7a\x27\x51\xcb\xd8\xdd\xf4\x0a\xaa\x22\x39\xca\xae\x49\xc7\xca\xd1\x69\xd9\xab\x9c\x25\x13\x9f\xff\x7b\xd6\x5d\x0e\xde\x1f\x77\x07\x1f\xe1\x92\xaf\x46\xd0\x2b\x11\xfc\x72\x24\xf6\x39\x81\xa8\x3e\x16\x39\x61\xd9\x29\xaa\xbd\x65\x2c\x3a\xec\x96\xa2\xce\x93\x3f\xa9\xca\x68\xd1\x5b\x68\xca\xe9\x02\x57\xb4\x28\x9a\xe2\x53\xb3\x4f\x4f\xd1\x17\xa7\xae\x34\x59\x33\xc5\x37\x52\x4a\xb2\xac\x6b\x7c\x4c\x99\xab\x49\xde\xb0\xf2\x59\x43\x53\xd8\x13\xe7\xb3\x7a\x46\x7c\x4b\x6a\xff\xf0\x1d\x00\xf1\x78\x75\x2d\xed\x56\x9b\x81\xd6\x7d\xfe\xb2\x7a\x1d\xbe\x89\x76\xb7\xda\xf3\x63\x50\xad\xd9\xd0\xdd\x63\xf2\x38\x3a\x8a\x0f\xab\xc3\x02\x68\xdf\x27\xe7\xe4\xf3\xb9\x63\x45\xa4\xe7\xfb\x69\x15\xed\x62\x48\xdc\x9e\xd3\x53\x9a\xfb\x59\x4a\x92\xf4\xf5\xdb\x56\xd6\x70\xf0\x77\xb7\xe1\xef\xac\x41\xb7\x91\x2b\x47\xe5\x0b\x2f\x2d\x25\x62\x6a\xe5\x08\xf0\x19\x2b\x6b\xc4\xf7\x90\x6b\x66\x4a\xef\xbe\x98\x20\x3f\xde\x68\x39\xf4\x1e\x44\x87\xd9\x02\x39\x80\xf6\xd1\x05\xd2\x87\xf6\xa0\xdd\x81\x0b\x84\x8e\xee\x52\x42\x23\xaf\xda\x10\x5f\xf9\x9a\xf2\xe9\x05\x7e\x5b\xbe\x1e\x48\xaf\x64\xf5\x09\x52\xe5\x81\x1f\x26\xf8\x61\x82\x1f\xe6\x2a\xf2\xc3\x84\x54\x79\x90\x2a\x0f\xfc\x30\xc1\x0f\x13\xfc\x30\xc1\x0f\xb3\x23\xfc\x30\x21\x55\x1e\x38\x76\x42\xaa\xbc\x36\xa5\xca\xfb\xee\x76\x34\x55\x05\x16\x61\x65\x0b\x02\xbc\x07\x29\x33\x71\xdd\x05\x7f\x66\x3b\x7e\xa3\x2b\x00\x9d\x7c\x22\xc2\x3f\x8d\x54\xc9\x20\xe7\xca\x19\x19\xa0\x34\xa4\xa0\x41\xaf\xa7\x50\x50\xa5\x89\x6f\x3f\x44\x27\xf1\x34\xa5\x9e\x22\xe5\x54\x6a\x5b\x8b\xef\xa4\x8f\xf3\xa1\x38\x9e\xc1\x83\xf4\xb5\xd3\xf9\x4d\x3b\x6a\x20\x04\x23\xce\x6b\x0c\x71\x02\xd4\x01\xa8\x03\x50\x07\xa0\x0e\x40\x1d\x80\x3a\x00\x75\x00\xea\x00\xd4\x01\xa8\x03\x50\x67\x25\x41\x9d\x04\xea\xc7\x7d\xea\x1e\xe1\x22\xb0\x49\x76\x32\x20\x1a\xfb\x4a\xf0\x2a\x00\xd2\x04\xa4\x09\x48\x53\x75\xa4\xe9\xe7\xfa\xdc\x98\xd4\x9c\x51\xb8\x66\xd9\x57\x89\xf6\x56\x52\x1d\x33\x00\x30\x99\xb9\x8c\x6d\x38\x8e\x07\x99\xbe\xd8\x8b\xff\x74\x2d\xc2\x5e\x43\xc2\xa7\x35\xe6\x13\x97\x7a\x9a\xdd\x1e\xa7\x31\xab\xe7\xc4\x3d\x65\xee\xab\xfc\x3a\x88\x41\xed\xf0\x18\x54\x1d\x9d\x60\x44\xeb\x18\x3a\x42\x89\xd6\x20\x3a\x80\xf6\x05\x7a\x24\x49\xd3\xcd\x75\xdb\xe3\x5f\x7a\xb9\xb1\xa7\x35\x51\xac\xb2\x59\xcf\xe9\x95\xdb\x97\xf2\xd0\xd3\xef\xae\xf3\x9d\xe2\xf7\xf8\x87\x9f\xba\xb3\xdc\x8d\x4e\x6d\xf9\x44\x3f\x8d\x4e\xa2\x89\x12\xef\xe9\xfa\xbe\x0b\x38\x4e\x43\x88\x69\x9d\x21\xa6\x2f\x46\x1a\x26\x1c\xce\xb0\x50\xd5\x71\x94\xf4\x42\x55\xdb\x20\x69\x68\x48\x69\x73\x25\x4d\xfc\x17\x37\xf9\x4a\x9a\xcd\x6e\x54\x69\x4e\x48\x17\x9e\x6a\xb3\xe5\xc2\x05\x42\x48\x21\x84\x14\x42\x48\x21\x84\x14\x42\x48\x21\x84\x74\x75\x86\x90\x86\x86\x78\x56\xa9\x24\x84\xe8\x02\x81\x3a\x44\xf2\x6f\x36\xf8\x2a\x09\x3b\x43\xa2\x48\x5d\xcd\xa1\x87\x46\x37\xb5\x52\x71\x80\x88\xd1\x95\xa7\x90\x40\xc4\x28\x44\x8c\xb6\x39\x62\xb4\x75\xf8\x29\x34\x52\xb4\xb9\xc7\xc2\xc9\xfd\x68\x00\xef\x55\x35\x61\x90\xd9\x22\xdb\x70\xf8\x6d\x2b\xc1\x8c\x83\xbf\xbe\x07\x25\xfa\xf5\xbc\xd9\xbf\x14\xc8\xa0\x29\xd9\xb7\xa9\x5c\x70\x29\xf4\xb3\x7b\xf0\xa7\xd7\xa2\x9b\x53\x96\x6d\x5c\x5a\xa2\x5c\xae\x0c\x3d\x4f\x91\xbb\x66\xc8\x5d\xf1\x7b\xc9\xcf\x63\x96\x6d\xc8\x0e\x84\xde\xef\x40\x9d\x3b\x9c\x3a\xbf\x15\x1d\x65\xcb\x9e\x2c\x77\xb2\xec\xfb\x51\x1f\xda\x13\xb8\xec\xc9\xac\x20\xfb\xba\xf7\x85\x97\x4b\x9b\xa7\xc2\x17\xfb\x6e\xdc\xc3\x17\xbb\xaa\xf2\xd5\x2d\x3d\x5f\x76\x91\x8c\xbd\xb8\xce\x9b\xb9\x8a\x3f\x51\x96\x26\xef\x36\x7e\x45\xcb\xe6\x2f\x75\x52\x2d\x51\xac\x6a\x1b\x6e\xd0\xa5\x00\x22\xd7\x09\x91\x3f\x12\x41\x63\x0c\xfe\x1e\x46\xc3\x1e\xfc\x6d\xd8\x82\x5f\xae\x24\xa9\x12\x1a\x57\x27\x30\x2a\x8a\x09\x4f\x9a\xc4\xdf\xb5\xc9\x13\x18\x5b\x44\xba\x41\x49\x46\xf0\xe3\x7a\xcb\x44\x04\x20\x61\x40\xc2\x80\x84\x01\x09\x03\x12\x06\x24\x5c\x0f\x12\x0e\xdc\x9d\x3b\x9e\x15\xbb\xfb\x7f\x43\x4f\x04\x55\xe4\x10\xfc\xfc\x06\x4f\x05\xd8\x1d\x82\x7d\x25\xc5\xe0\x3e\x4a\x2b\x5a\xa1\x17\x00\xf1\x5d\x79\xfa\x06\x10\x5f\x20\xbe\x6d\x26\xbe\xcd\x47\x3f\xd5\x49\x72\xff\x93\x59\x99\x54\x0f\xe5\xc6\x93\x83\xe8\x00\xde\xa7\x26\x04\xa2\xbd\x43\x06\xbb\x5e\x4b\x2b\x82\xed\x7e\x66\x0a\xed\x63\x7e\xc7\x73\x34\x88\x3d\xc4\xd7\x38\x65\x5b\xb9\x2b\xd6\x9c\x83\xdf\x33\x85\xdf\xbd\x0d\xdd\x42\x6f\x12\xc6\xce\x1d\x95\x93\xff\x8d\xd9\x56\x6e\xd2\x9a\x8b\x6f\x23\x97\x25\xc9\x25\x65\x56\x4e\x7e\x49\x87\x47\x8d\x43\x79\x62\x88\xa0\x86\x08\x6a\x88\xa0\x5e\x3d\x11\xd4\x50\x9e\x18\xca\x13\x43\x04\x35\x44\x50\x43\x04\x35\x44\x50\x77\x44\x04\x35\x94\x27\x5e\x89\xb1\xc5\x50\x9e\xb8\x19\xe5\x89\xdf\x8e\x26\x18\xa0\x39\x8a\x0e\x53\x40\x73\x10\xed\x47\x03\x81\x80\x86\x9e\xe9\x85\x37\x1e\x3f\x91\x37\x24\x59\xfd\xfd\xe1\x1c\x47\xc3\xbd\x8c\xd8\xf0\xe7\x06\xba\x60\xd3\x5e\x22\xf5\xdf\xd7\x95\x42\x88\x4d\x4c\xf4\x2b\xba\xe0\x0d\xdd\xec\x2f\xad\x21\x0e\x0c\x10\x8c\xa3\x24\x3a\x5e\xc2\xc1\xf7\x22\xad\xb6\x31\x07\xfa\x0d\x3e\x3a\x75\xfa\xe8\xfc\xcf\x08\x1a\x65\x6b\x7e\x18\x0d\xd1\x35\x3f\x80\x6a\x9e\x7f\xcc\x93\x37\x41\x3d\x79\x85\x9b\x4f\x3d\xed\x9c\x64\x46\xbe\xe3\xe8\xa8\x64\xe4\xab\xa7\xa1\xfa\x05\x50\xde\xaa\x5e\x00\x55\x16\x39\xc5\xe2\x29\xfe\xfb\x4a\xa9\x00\x72\xab\x8d\x4a\x26\x72\x6b\x5e\x08\xa3\x3e\xf6\xab\x2c\x8c\xc6\xc4\x85\xcd\x16\x4b\xc0\x2d\x81\x5b\x02\xb7\x04\x6e\x09\xdc\x12\xb8\x25\x70\x4b\xe0\x96\xc0\x2d\x81\x5b\x02\xb7\x04\x6e\x09\xdc\x12\xb8\x65\xe7\x71\xcb\x4c\x83\x7d\x8d\xc3\xe8\x41\xe3\xf1\xe4\x95\xb8\x3f\x90\xd8\x82\x79\xf2\x28\x8f\x11\xa0\x1b\xd1\x7b\xec\xd7\x6f\x43\xfb\x43\x22\x83\xc9\x36\x6b\x8a\x3f\xbe\xb3\x3f\x6f\x5b\x8f\x5d\xc7\xff\xb2\x05\x7f\x34\xea\xb9\x4b\xef\x4a\x59\xb9\x1c\x79\xd7\x93\x13\x17\x3c\x8f\xcd\x82\xa5\xd0\xab\xc9\xf4\x9a\x65\xcd\xc4\x77\xf2\x2b\x99\xbf\xf4\x49\xa3\xe0\x21\x13\x7e\xc9\x34\xb9\x65\x60\x4d\xbc\x3f\xce\x2a\x7c\x0c\xa2\xbb\xd9\x2c\xba\x1d\x6d\xa1\xb3\xe8\x16\xb4\xe1\x53\x91\x75\x88\xbf\x46\xe8\xac\xd8\xe6\xff\x09\x11\x5e\xc7\xbb\x82\xae\x3c\x10\x3e\x71\x06\xf0\x5e\x36\x71\xe4\x5e\xf2\xa8\xaa\x80\x98\xb2\x98\xef\x08\x4d\x3f\x50\xd3\x08\x4d\x2f\x56\x33\x42\x81\xce\xfe\x15\x87\xae\xed\x23\xa4\xfe\x82\x34\x42\xbb\xc5\x08\x9d\x9f\x0d\x19\xa2\x9e\xe2\x21\xb2\x9c\x15\x3c\x8b\xe2\xbf\x2c\x8d\xd1\x1e\x77\x8c\xc6\x27\xa6\x26\x2e\x4c\x54\x1e\xa5\xdd\x45\xa3\xc4\xe2\x00\x6f\x9c\x71\xaa\xe4\x0d\xec\x37\x7a\x03\xff\x87\x34\x4e\xbd\xee\x38\x9d\x9f\xbe\x70\xfa\xfc\xb9\xd9\xca\x03\x15\x2f\x1a\x28\xde\xe0\x8d\x33\x52\xd5\x8c\x8e\x3c\x9a\xc3\xbe\xab\xee\xd4\xc4\xe8\x78\x2d\xab\xee\x94\xa1\xa7\x6f\x9c\x31\xaa\x75\x36\x25\x9f\x95\xc6\x28\x2e\x24\xd3\xe8\x85\xb1\x53\x95\x07\x69\x57\xb1\x68\xa2\x49\xa1\x6e\x18\xf9\x5d\xeb\x4c\xaa\x5c\x6b\xdf\xe7\xee\x76\xb8\xdc\x7f\x29\x8a\xbe\x18\xc5\x5f\x88\xc6\x7e\x5f\xd8\x18\x5f\x88\x4e\xeb\x05\xc6\x13\x2e\x1b\xf4\xd8\x45\xfa\xfc\xc0\xcc\x14\x3f\x99\xf1\xc3\xb7\xc2\x75\x1f\xc5\xc8\xa5\xf3\x96\x99\x2b\x38\xa4\x0b\xf3\xf3\xe6\x63\x86\xc3\x74\x64\xc9\x58\x51\xb0\x28\xed\x71\x0f\x0b\xfc\x6c\xc3\x27\x88\x7b\xce\x2f\x58\x6e\x9b\x34\x80\x43\x31\x1e\xd3\x17\xf2\x59\x4e\xca\xaf\x5d\xb6\xb2\x82\x55\x91\xde\x90\x0e\x92\x2f\x3c\xdc\xdf\x9f\xb5\x52\x7a\xf6\xb2\xe5\x14\x7c\xb4\x35\xf2\x59\xfb\x9c\xeb\x4e\xc1\x58\xf0\xb4\x35\x23\xab\x3b\x05\x33\xe5\x18\xba\x9d\xba\xdc\x97\xb5\x32\x19\x33\x97\xe9\xbf\xc4\xfe\xff\xb1\x77\x1c\x59\x74\x0c\x7b\xf8\xaa\xb9\x90\xba\x7c\x5d\x53\xdc\xd1\xf0\xff\x59\xa5\x5f\x46\x56\x1b\x3f\x36\x85\xfa\xab\x28\xab\xc7\x93\xab\xd0\x02\x7a\xf8\xef\xcf\xe0\x8f\x6e\x0b\xa8\x9c\xb7\x3b\x24\xee\x80\xb5\x33\x63\x65\x8d\xb8\x4a\x2e\xf5\xa9\x5a\x27\x5d\x03\xc1\x07\x60\xc4\x03\x23\x1e\x18\xf1\xc0\x88\x07\x46\x3c\x30\xe2\x81\x11\x0f\x8c\x78\x60\xc4\x03\x23\x1e\x18\xf1\xc0\x88\x07\x46\x3c\x30\xe2\xd5\x6a\xc4\x7b\x34\x18\x4e\x8d\x31\x38\x75\x18\x0d\x53\x38\xb5\x1f\x0d\xa0\xbd\x81\x0e\xc1\x94\x14\x2c\x25\x34\xe9\xa0\x3e\x45\x8e\xf2\x9c\x61\xa5\xc3\x01\xd5\x28\x3e\x56\x65\xc9\x74\xe9\x19\xc5\x49\x80\x42\x02\x1c\xd4\xff\xb8\x3e\x80\x50\xdc\xe6\x05\x25\x48\x30\x62\x3b\xfb\x6b\x8b\x70\x04\xa3\x07\x49\x74\x1c\x1d\x2d\x89\x4c\xd0\x50\x6f\x2d\xe3\x0e\x71\x09\x10\x97\x50\x67\x5c\xc2\x77\x2b\x24\x16\x3b\xc6\xc4\xc1\x10\x3a\x48\xc5\xc1\x5e\x54\xe3\xb4\x44\xe3\x2c\x5c\xe1\x08\x1a\xf1\xc2\x15\x6a\x6f\x65\x82\x05\x2b\x1c\x45\x87\xa5\x60\x85\x9a\x9b\xa9\x36\x22\xa1\x25\x72\x2b\xfe\x17\x4a\x80\x5c\x52\xfc\x63\x15\x24\x19\xa5\xb1\x2b\xfc\x64\x94\xb8\xa7\x79\xd2\x0a\x58\x27\xb0\x4e\x60\x9d\xc0\x3a\x81\x75\x02\xeb\x04\xd6\x09\xac\x13\x58\x27\xb0\x4e\x60\x9d\xc0\x3a\x81\x75\x02\xeb\xec\x3c\xd6\xd9\xea\x80\x85\xd6\x40\xcf\x5a\x62\x18\x1a\x1e\x61\xf0\x8f\xbd\xe8\x38\x73\x15\x33\x1e\x2b\x18\x39\x87\x8e\x61\x48\x92\x5a\x93\xd5\x5e\xf3\x4a\x91\xbd\xd4\x8b\xbf\xbe\x16\x61\xaf\x05\x91\xab\x21\xe6\x53\x95\xcc\x2d\xc9\xb9\x93\xfc\x36\x21\xee\x69\x51\x29\x6f\x28\x4d\xd6\xe8\xd2\x64\x35\x56\x24\xf4\x66\x49\x03\xcb\xd4\xd3\x12\x65\x17\xc3\x97\xeb\x3e\x9c\xa8\xae\x02\xad\xd7\x4b\x14\xfb\xd3\x75\xbe\x73\xfb\x1e\xff\xba\x65\xee\xf4\xde\xcd\x7f\x6e\xf9\x0c\x3f\x8d\x4e\xa2\x89\x12\x0b\x44\x7d\x1f\x04\x0c\x11\x60\x88\xa8\xd3\x10\xf1\x62\xa4\x61\x52\xe1\x0c\x33\x3b\x8c\xa3\xa4\x67\x76\x68\x83\x88\xa1\x45\xcd\xaa\x13\x31\x55\x08\x95\x62\x29\x14\xff\xf0\x26\x5f\x11\xb3\xd9\xad\x74\x96\x13\x62\x65\x17\xfb\x53\xcb\xa5\x0a\xd4\x3b\x83\x7a\x67\x50\xef\x0c\xea\x9d\x41\xbd\x33\xa8\x77\x56\x4f\xbd\xb3\x8e\x2f\x6b\x16\xaa\x1a\x84\x56\x28\xab\x52\x3b\x08\x53\x06\xca\xb4\x87\xe4\x5f\x6e\xf0\xd5\x0e\x76\x86\x14\x41\x73\x55\x86\x1e\x5a\x77\xa7\x95\x1a\x03\x54\x42\x5b\x79\x9a\x08\x54\x42\x83\x4a\x68\x6d\xae\x84\xa6\x07\x3b\xb7\x35\xe8\xb0\xe9\xca\xfa\xb0\x1a\x66\xcd\x12\xf5\x93\xfb\xd1\x00\xde\xab\x6a\x22\xde\x7a\x8b\x1c\xb1\xcd\x6f\x5b\x11\x85\xd1\x9e\x3a\x8b\x86\x18\x78\xd6\xf3\x79\xa7\x42\x82\x1b\xb2\x98\x6d\xa2\xe4\xd8\xb6\xb1\x64\xd2\x51\xc4\x7f\x30\x85\x7f\x66\x1b\xba\x99\xdc\x79\x69\x29\x11\xdb\x1b\x12\x9f\x2c\x5a\x98\xe1\x2d\xc4\x77\x92\x3b\x46\xf3\x79\x47\xae\x09\x5a\x7e\x1d\x84\x2a\x83\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\x81\xfb\x1e\xb8\xef\xd5\xea\xbe\x67\xa0\x49\x46\x69\xc6\xd0\x28\xa5\x34\x23\xe8\x10\x1a\x0c\xa4\x34\xe4\x74\x4f\xa3\xfe\xca\x8e\xe5\x55\x15\x4b\xab\xd9\x54\xef\x5a\xe9\xc9\x73\x5d\x9f\xbd\xb2\x47\x87\xc7\x28\xff\xc2\x7a\x0f\x4c\xdc\xe5\x85\x25\x97\x33\x88\x5d\xec\xc7\x16\x52\x88\xfa\xfc\x83\x82\xbf\x03\x40\x73\xf0\x0f\xaa\xd3\x3f\xe8\x5f\x6b\xf4\x0f\x0a\x9e\x84\x75\xf8\x07\x55\x68\x6c\x8a\x19\x16\x27\xd0\x98\x64\x58\xac\xbb\xb5\xe5\xd6\x53\xab\x89\x32\x57\x96\x5b\x45\xf1\xca\x5f\x55\x3c\x19\xd5\xe3\x1f\xa2\x5c\x2e\xaf\x06\xd8\x85\x4c\x5e\xf9\xd6\x54\x6b\xb6\xe4\x02\xdc\x09\xb8\x13\x70\x27\xe0\x4e\xc0\x9d\x80\x3b\x01\x77\x02\xee\x04\xdc\x09\xb8\x13\x70\x27\xe0\x4e\xc0\x9d\x80\x3b\x3b\x0f\x77\xb6\x3a\x5a\xb9\x86\x38\xe2\x66\xc1\xd1\x1b\xd1\x11\xed\x6f\xa2\xe8\x76\xee\x88\xb6\x58\xb0\x9c\x94\x9e\x35\x73\x99\xfe\xa5\x44\x3f\xfe\x4a\x14\xff\x51\x14\xbd\x49\xfa\xf3\xa5\xa5\x44\xec\xce\x8c\x51\x28\xd6\x18\xd8\x0c\x8b\xdf\x9d\x31\x0a\xa3\xde\xb5\x17\x13\xa3\xd3\xa7\xdd\x13\x6a\x03\x7d\xab\xcb\x1a\x1a\x2e\x6b\x68\xb8\x9a\x86\x26\xf3\xe8\x01\x36\x3f\xcf\xa1\x29\x3a\x3f\x4f\xa0\x71\x94\xac\x63\x7e\x4a\xef\x59\x0d\x99\xc7\xaf\xdc\x8d\x1e\xf4\x19\xf1\x81\x8a\x41\xe7\xb4\x0d\x2b\x57\xd0\xb3\x79\x2b\xed\xde\x67\xd8\xa2\xee\x9d\x43\x17\x09\xfe\x9b\xbb\xf0\x6b\x6b\xd0\x96\xa2\x6f\xc6\x1a\x8e\xed\xa7\x62\x9a\x5d\xe7\xca\x28\x6f\x67\x38\x25\xda\x9f\xb6\xd2\xa3\xa2\xfd\xf8\x11\x72\x97\xfc\x59\x07\x4a\x9c\xe7\x03\x6e\x64\x8b\xb6\xb1\x00\x6c\xd2\x46\x0f\xb2\x4f\x36\x8d\xce\xd1\x4f\x76\x0a\x9d\x40\xe3\xc1\x64\xd2\xeb\xb6\xc6\x47\x41\x0b\xe8\xee\x72\x63\xaf\x33\xe1\x02\x65\x1c\x27\x5d\x21\xe2\xf5\x8b\xcb\x92\xa0\x5e\x79\x12\x88\x75\x1f\xc5\xbe\xba\xde\xff\xeb\x0e\xba\xd1\xd8\xb5\x7e\xe0\xe3\xfc\xc6\x0e\xf9\xc6\xc9\x87\xd0\x5b\xd0\xc5\x12\xf3\x4c\x83\x3e\x32\xd8\x6b\xc0\x5e\x53\xa7\xbd\xe6\x4b\x91\xe6\x89\x9e\x87\x99\x01\xe7\x01\x34\xeb\x19\x70\x5a\x27\xd8\x5a\x25\xb9\x42\x42\xcb\x93\xff\xe7\x46\x7f\xc1\x76\xbc\x2c\xca\xab\x56\x09\x77\x94\xc6\x2c\x74\x80\x7c\x83\xb0\xb0\x95\x27\x31\x21\x2c\x0c\xc2\xc2\xda\x1c\x16\xd6\x46\xad\xb8\x65\x9b\x47\x58\x40\xda\xe4\x38\x4a\xe2\xe3\xea\x51\x71\xf2\xee\x96\x03\xc7\x02\x9e\xb3\x22\x02\xc9\xbe\xde\x8d\x0e\xb1\xd3\x24\xad\x09\x2f\x92\x97\x51\x20\x13\x18\x54\x66\x5b\xb9\x2b\xd6\x9c\x83\x3f\xdc\x8d\x3f\xdd\x85\x6e\xa1\xb7\x8a\xc0\x6a\x87\x03\xf7\x5c\xda\x5c\x32\xd3\x8b\x7a\x56\x06\x4c\xba\x30\x6e\xf1\x1a\xf5\x9a\x94\xe7\x61\x58\xd8\x3c\x7a\x68\x1b\x3d\x9e\x41\xbf\xc8\x42\x6b\xe5\x0d\x91\xbe\xc3\x29\x18\x7a\x5a\x8b\xef\xa4\x37\x24\xc9\xff\x94\x05\x68\xf3\x27\x91\xd3\x75\x87\x87\xa4\x4d\x5e\x45\xd3\x6c\x31\x9e\x46\x27\xe9\x62\x1c\x45\xc7\xd0\x91\x3a\xf6\x5f\x4a\xf7\x26\x96\x8c\x5c\xb8\xab\x5f\xb7\xff\xe2\xd8\x88\x11\xed\x18\xf5\xcb\xbb\x72\x7f\xf8\x52\xd5\x70\x2f\x5f\xaa\x74\x3e\xb8\x9c\x8b\x0d\xbe\x4f\xb0\x26\xf8\xa3\x80\x3f\x0a\xf8\xa3\x80\x3f\xca\xaa\xf1\x47\x99\xec\x18\x7f\x94\x86\xf7\xa4\x6e\x7f\x94\x49\xf0\x47\x01\x7f\x14\xf0\x47\x01\x7f\x14\xf0\x47\x69\xbd\x3f\xca\x0d\x78\x60\x9d\x04\x17\x9a\x15\xe8\x42\x33\xd9\xe9\x2e\x34\x93\x37\xa0\x0b\x0d\xfe\x7b\x15\xed\x66\x6c\x27\x65\x59\x76\xda\xcc\xc9\x79\xf5\xfb\x97\x5c\xc8\x43\x73\x73\x3a\xf8\xf3\x2a\xfe\xbd\x2e\x74\xab\x7c\xe9\xa5\xa5\x44\xec\x1d\xd5\xd1\x9c\x29\xd2\x48\x83\x58\x4e\x2f\xbd\x61\x4c\xea\xc8\xc5\x04\x6d\x7f\xca\x74\x0a\x27\x2c\x7b\x34\x9b\x15\x70\xa7\x71\xf6\x95\xd5\x46\x74\xde\x12\x4e\x74\x0e\xe0\x7d\x9c\xe8\xf8\x4c\x20\xce\x77\xe8\x87\x29\x8a\x8f\x02\xb0\x03\x60\x07\xc0\x0e\x80\x1d\x00\x3b\x00\x76\x00\xec\x00\xd8\x01\xb0\x03\x60\x07\xc0\x4e\x6b\xc1\x0e\x60\x17\xc0\x2e\x80\x5d\xda\x83\x5d\x7e\x49\x45\xbb\x2a\x61\x17\xe6\x60\xc3\xa9\xcb\x0f\xb7\xe1\x7f\x58\x83\x6e\x2b\xa1\x2e\xcc\x91\xa6\xbb\x72\x62\x66\x7a\xf2\x8e\xf7\x92\x8b\x8a\x59\x09\xbd\x9b\xfe\x7a\xa3\xc1\x92\x1a\x73\x5c\x15\x8d\xaf\x9b\x8b\x5c\x90\xa2\x65\xe4\x8f\x61\x84\xe4\x91\x70\x42\x32\x8c\x87\x6a\x27\x24\xe0\xff\x02\x98\x04\x30\x09\x60\x12\xc0\x24\x80\x49\x00\x93\x00\x26\x01\x4c\x02\x98\x04\x30\x09\x60\x12\xc0\x24\x80\x49\x56\x0f\x26\xf9\x66\x14\x6d\x66\x98\xc4\x2b\xf0\xd5\x8f\x3f\x1f\xc5\xbf\x1b\x45\xc8\xfb\x53\x2c\x96\xa1\x65\x44\xe7\x2d\x7b\x41\x8c\x9f\xae\xd0\x53\x77\xfc\xf6\x8c\x51\xf0\x2a\x33\x8e\x4e\x9f\x3e\x49\xfe\xdc\x81\xd9\x42\x4c\x74\x8e\x81\x8d\x93\x68\x82\x82\x8d\x63\xe8\x08\x1a\xa9\x2f\x5b\x08\x7d\xc7\xd0\x34\x21\xff\x7b\x37\x1a\x28\x1b\xde\xe2\xe8\xae\xbc\x95\x76\x8c\xd4\xa2\x6d\x16\xae\xd3\xb2\xa5\xa6\xe1\xe0\x6f\xaa\xf8\x1b\x5d\xbe\xf5\x32\xdf\x59\x9d\x23\xd0\x34\x2d\x11\x4c\x1b\x9d\xe6\xe5\x5b\x1b\xe2\x14\xb4\xe7\x9a\x6f\x19\xce\xb2\xc7\x41\x94\x97\x3f\xec\x7a\x7b\x38\xcc\x3a\x82\x47\xaa\xae\xbd\x5e\x36\xee\xa8\x2a\xaf\x23\x80\x5e\x00\xbd\x00\x7a\x01\xf4\x02\xe8\x05\xd0\x0b\xa0\x17\x40\x2f\x80\x5e\x00\xbd\x00\x7a\x01\xf4\x02\xe8\x05\xd0\x6b\x35\x40\xaf\x2f\x45\xd1\x2d\x8c\xca\x50\xe2\x72\xbd\x1f\x7f\x36\x8a\x3f\x13\x45\x37\xb1\xff\x5b\x11\x76\x6d\xce\x18\x05\x76\xd6\x06\xd0\x25\x81\xae\x7f\xde\x53\x65\x29\x7c\xa7\xa0\x17\x8c\xf9\xc5\xac\x63\x14\xdc\xbc\xb7\xf8\x3f\xef\xc1\xff\x79\xad\x57\xcd\xe9\x5e\xba\x6a\x8b\x4f\xd3\xb3\xfc\xb6\x59\xa3\x10\xbf\x8f\xa6\xb3\x2d\x29\x39\x27\x5d\xd0\xe0\x64\xa6\x2f\x44\xd0\xf3\x11\xfc\x5c\x24\xf6\xac\x98\xe1\x4f\x45\x66\x99\x76\x46\x35\xbc\xc7\xa8\xa6\x34\x47\xfe\xa5\xa7\x0a\x9a\xa2\x4c\x90\xff\xba\x7f\x5f\xd0\x4d\x9a\xb2\xcd\x51\x52\xd9\x45\xa7\x60\xd8\x7d\xfc\xad\x52\x6e\x72\xb1\xac\x79\xd5\x50\x7a\xc4\xab\xf4\x10\x71\xea\xb2\x3a\x4d\x99\xce\xea\xb9\x1c\x17\x90\x74\xea\xeb\x59\x22\x91\x12\x5a\x62\x48\x53\xd7\xd2\x47\xca\x93\x3b\xf9\x4c\x04\x3d\x1d\xc1\x1f\x8a\xc4\x3e\x28\xba\xfb\xb8\xe8\xad\x60\x31\x73\x6e\xbf\xc9\x23\x94\x09\xd6\x55\x22\x76\xf2\x8e\xdb\x2d\xbe\x8f\xd3\x14\x69\x64\x03\xa6\xda\x14\x5b\x65\x35\xf4\xf0\x26\xf6\x98\xa2\x64\x67\x0f\xa1\x63\x6c\x7a\x0e\xa1\x83\x74\x7a\xee\x45\x1a\xea\x0d\x2d\x4e\x26\x7d\xe2\xe5\xa6\xfa\x3d\x1f\xce\xe1\x7a\x71\xbc\x3c\x5f\xb8\xdc\x05\x39\xda\x2e\xf6\x1b\xeb\xbc\xf9\xbb\xcd\x4d\xe3\x1b\x3c\x85\x55\x37\x61\x6f\xcb\x66\x71\x12\x1d\x47\x47\x4b\x92\x4a\xd6\x38\xe8\x90\x48\x12\x52\xef\xd6\x99\x7a\xf7\x99\x48\xe0\x8a\x5d\xbe\x2c\x18\x67\xb9\x77\x8f\xa0\x11\x2f\xf7\x6e\xcd\xad\xb8\x82\xa3\xd1\x92\x21\x24\x65\x6e\xfc\xc9\x4d\x9e\xe0\xb8\x8d\x97\x31\xd4\x8b\x64\xc5\x36\xb9\x66\x61\x2b\x44\xc5\x05\x34\x83\xa6\x65\x51\x11\x4f\xa2\xe3\x75\x28\x0f\xe3\xb4\xdf\xe7\xa9\x25\xc1\x01\xe1\x11\x26\x3c\xbe\x1d\x45\xdf\x8a\xe2\xd7\xa3\xb1\xd7\xc4\x00\xbd\x14\xbd\x20\xab\xef\x66\x4e\x71\x98\x0a\xae\xcc\x19\xf3\x16\x3b\x0d\xbb\x47\x56\xcf\x54\xc3\x29\x01\xed\xa2\x24\x1c\x72\x56\xae\x2f\x67\x64\x74\x3a\x10\x5c\x83\x97\x85\x08\x83\x57\xe2\x13\xf0\xb9\x68\x2e\x2c\x18\x69\x22\xa6\xb2\xd7\x39\xf1\x97\xed\x39\x39\x33\xdb\xcb\x15\x7b\x7a\x00\x54\x32\x36\xd9\xf8\xf2\x86\x6d\x5a\x69\x71\x40\xf1\xf6\xc0\xc2\xf5\xbc\x47\x4c\x16\x1d\xd2\x49\xf9\xe8\xa8\x93\x3b\xdd\x17\xe2\x0f\x99\x97\x14\x0f\x93\xdc\x40\xfb\xc9\xd2\xb7\xfa\xf4\x51\xc5\xb4\x0b\xd3\xb4\x07\x7e\x65\x58\xbe\x1c\x45\xaf\x46\xf1\x2b\xd1\xd8\xcb\x62\x98\x9f\x89\x8e\x4b\xc6\xd1\x3c\x0d\x0a\x10\xcc\x6d\xda\xb6\xf2\x7a\x86\x7e\x00\xa6\xf7\xf7\xb2\x31\x60\x94\xc9\x7d\x17\xcf\xba\xca\x54\x9f\x41\x4d\x91\x54\xc4\xb4\x91\x37\x72\x69\x23\x57\xf0\xf0\xad\xa1\x58\x76\xfe\xb2\x9e\x23\x6f\x44\x86\xd5\x5e\x34\xfa\xe7\xf5\xac\x6b\xee\x50\xd9\xaf\xaa\x32\x6f\xe6\xf4\xac\xf9\xb8\xcb\x4d\xe7\x0c\x72\x20\xa2\x38\xa6\x9f\x1d\x84\xd2\xde\x41\x9b\x35\xde\xe3\x78\x37\x31\x03\x83\xa6\x4c\x98\x74\x3a\x4b\x1d\xb7\xec\xf2\x37\xa3\xb4\x8d\xd9\xfa\x98\x7d\x83\x2e\x36\xab\x70\x59\x53\x37\xb1\xfe\x8c\xbb\x2f\xe2\x14\xe9\x9c\xef\xed\x42\x4f\x76\xe1\x77\x77\xc5\xde\x10\xec\xe1\x6b\x6b\x1e\xe4\x00\x92\x2c\xa9\xcb\xd6\x35\x25\xa3\xdb\x73\xe4\x8c\x2e\x15\x69\x15\xeb\xc2\xb0\xc9\x61\x8b\x8c\x85\x6f\x4f\xcf\x97\x3c\x3c\xb8\xa3\x74\x3e\xbb\x93\x91\x1d\xe7\xc8\x3c\x4d\x1b\x29\x33\xed\x59\x12\x28\x94\x66\xe9\x7d\xdd\xd1\x75\xe8\x91\x8f\xfe\xea\x62\x67\x4d\x1a\x46\x17\x58\xba\xc7\x4b\x4f\x89\x2f\x7e\x98\xa6\xb0\x8a\xbb\x74\x47\x95\x85\x43\x0f\x7b\x87\x1e\xa5\x8f\x7f\xf8\xe2\x89\xe1\x8c\x28\x3d\x49\x3d\x75\x95\x6c\x2c\xb9\x34\xb9\x4a\xcf\x66\xad\x6b\xf4\xa2\x92\x81\x63\x56\x02\x3e\xf5\x8b\x1b\x71\xdf\x60\x4e\xb4\x34\xa2\xf4\x9c\xb0\x6c\x43\x6a\x56\x49\xe9\x4e\x4a\x4f\x93\xb7\xe7\xe3\x43\x85\x2d\x6b\xcf\x61\xd2\xab\xac\xc1\x79\xd1\x86\xa6\x6e\xce\x97\xce\x1b\x79\xa7\xff\x4c\xa4\xc1\x25\x83\x66\x58\x35\xe3\x33\xe8\xb4\x54\xcd\xb8\xc9\x65\x88\xaa\x53\x02\x2a\x97\x16\x92\x15\x82\x2b\x8a\xbf\x12\xb0\x1e\xdf\xcc\xc6\x1d\x25\xff\x70\x83\xa7\x07\xc4\xcb\xd2\xe5\x07\x9f\x24\x58\x72\xe9\x96\x28\x07\x90\xfa\x7e\xe5\x29\x1d\x90\xfa\x1e\x52\xdf\xb7\x39\xf5\x7d\x0b\x68\x50\xc3\x0f\x75\xa1\xa9\xec\x87\xd0\x41\xbc\x5f\x1d\x10\x39\xfd\xee\x94\x53\xd9\x4b\xcd\xae\x88\xf4\xf5\x7f\xb4\x15\x1d\xad\x17\xfe\xf6\xd3\x34\xfe\xf8\xa7\xb6\xe2\x7f\x89\x4a\x05\xfd\x59\x9d\x33\xf2\x53\x79\x8d\x18\x79\xfb\xdb\x1e\xc2\x82\x67\x49\x13\x0d\xae\x60\xf6\x36\x74\x9c\x4d\xd8\x43\x68\x90\x4e\xd8\x04\xea\x47\x7d\xd5\xd5\x6a\x48\x68\xb4\x47\xa1\x33\x76\x3a\x7c\xc6\xf6\xe1\x3d\x7e\x1a\x48\x59\x81\x06\xf6\xc0\x10\x22\x1a\x7b\x59\x02\x98\x71\x51\x87\x2c\xfc\x03\xf4\x84\x93\xcc\x26\x7c\x83\xe4\x18\x1a\x45\xc7\x4a\x14\x85\x5a\x3f\x02\x68\x07\xc0\x33\xeb\xe4\x99\xbf\x18\x69\x80\x0c\x98\x60\xdc\xf2\x28\x3a\xec\x71\xcb\xb6\x89\x12\x59\x56\x84\x88\x95\xb0\x2a\x60\xdf\x94\x8e\x32\xfb\xca\x2b\x7f\x85\xcb\x94\x1d\x61\x67\x9a\x06\x4b\x14\x38\xd8\xac\x3c\xd1\x05\x07\x1b\x38\xd8\xb4\xf9\x60\xd3\x0a\x3d\x31\xec\x20\x52\xa5\xf4\x0f\x51\x1e\x8b\x12\xcb\x0e\xa0\xbd\x58\x53\x7b\xc5\x01\x65\x73\xd1\xd1\x86\x5c\xbf\x22\x0e\x35\x1f\xe8\x43\xfb\x02\x43\xb7\x7c\x82\xb6\x5c\x67\x96\x6f\xf4\xe2\x1f\xae\xf5\x8d\xdd\xda\xee\xe3\xd7\x52\x16\xc1\x13\xdf\x49\xae\x0a\x8f\xb0\x02\x27\x97\x0e\x77\x72\xa9\x2d\xbc\x4c\xf3\xe6\x8b\xc8\xa1\x54\x1e\xdd\xb5\x4c\xaf\x97\xea\xa2\xcf\xaa\x0f\x36\x2b\x8b\x53\x8b\x7d\x60\xbd\xef\xcc\xef\xf1\xf7\x88\x29\x9f\xfc\xbb\xf9\x85\x2d\x9f\xff\xb3\xe8\x7e\x74\xbe\x44\x3f\x5b\xee\xe7\x02\x25\x0d\xce\x97\x75\x9e\x2f\xff\x6b\xa4\x09\xd2\xe3\x01\x76\xde\x24\x47\x11\x71\xde\x6c\x81\x50\xaa\x4e\xea\x54\x2d\x63\xca\xc5\x53\x98\x8b\xcd\x8b\x9b\x7c\x85\x52\x4c\x78\xdb\x94\xcb\xa1\x5d\xec\xb7\x96\x8b\x21\x70\xbd\x01\xd7\x1b\x70\xbd\x01\xd7\x1b\x70\xbd\x01\xd7\x9b\xd5\xe9\x7a\x13\xea\x29\xd3\xfc\x53\x4c\xf2\xa9\x8d\xbe\x0a\xc3\xde\x10\xb7\x9c\x72\x35\xa2\x27\x5f\x5d\xba\x14\x40\xd9\xa0\x9d\x00\xca\x06\x94\xdd\xb1\x28\xbb\x1d\x30\x2b\x14\x6d\x37\x7d\x23\x98\x3c\x8a\x0e\xe3\x61\x75\x48\x60\xeb\x7b\x64\xd4\x5d\xd6\x40\x39\xf6\x6e\x38\x94\xfe\x65\x51\x4c\x30\x67\x14\xae\x59\x36\x59\xc0\xa5\x39\xed\xcd\x5c\xc6\x26\xb2\xc4\x4d\x6b\x8f\xbd\x4b\xc5\x56\xb6\xa3\x72\x52\xfb\xd3\xac\x09\x96\xd6\xfe\x9c\xb8\x9d\x6f\x5f\xfc\xd7\x15\x9e\xd6\x5e\x1a\x60\x77\x0e\xf3\x17\x6f\x61\x5a\x7b\x36\x55\xf9\x73\x03\x59\x48\xd9\x5c\x80\x0c\x5f\x90\xe1\x0b\x32\x7c\x41\x86\x2f\xc8\xf0\x05\x19\xbe\x20\xc3\x17\x64\xf8\x82\x0c\x5f\x90\xe1\x0b\x32\x7c\x41\x86\x2f\xc8\xf0\x05\x19\xbe\x56\x45\x86\xaf\xa7\x55\x74\x6f\xbf\x9e\x37\xfb\x97\x12\xfd\xb6\x21\x68\x01\x11\x88\xb6\x45\xc4\x91\x83\xff\x79\x1b\xfe\xff\xd6\xa0\x9b\x53\x96\x6d\x50\x47\xf5\xca\x44\x64\xc6\x6b\x64\x4c\x34\x12\xef\x67\x65\xff\x6c\xe3\x62\xc2\xf7\x82\x1b\x0d\x91\x5c\x46\x67\x19\x22\x39\x81\xc6\x29\x22\x39\x8a\x0e\xa3\xe1\x0a\x95\xff\x6c\x43\x5b\x4a\x68\xbe\xef\x5e\x15\x25\x79\x30\x9c\x82\xec\xc7\x03\x1c\x73\xa8\x2a\x47\x77\xbe\xcf\x2b\x0e\xd0\x0b\xc1\x2f\xc0\x47\x80\x8f\x00\x1f\x01\x3e\x02\x7c\x04\xf8\x08\xf0\x11\xe0\x23\xc0\x47\x80\x8f\x00\x1f\x01\x3e\x02\x7c\x04\xf8\xc8\x6a\xe0\x23\xbf\xb3\x1d\x1d\x29\xce\xd8\xc2\x8a\xd1\x05\xe4\x6d\x49\x1b\xf9\xac\x75\x9d\xec\x7d\x22\xcc\xf1\x8d\x6e\xfc\x67\x5d\x5e\x9c\xff\x4b\x11\x3e\xfc\x52\x35\xba\x9c\x2b\x4b\x5c\x88\x32\x2e\x9a\x69\x48\x39\xba\x5e\x4f\x75\xa0\xea\x11\xdf\x68\x88\xf6\xe1\xe9\x44\x3d\x45\x6a\xa8\xd4\xb6\x16\xbf\xef\x9a\x5f\x9a\x01\xaf\x93\x9d\x4e\x6b\xda\x51\xc0\x2e\xd8\x29\xeb\x1a\x73\xca\x3a\x17\x4e\x74\xf6\xe0\xdd\xe5\xa9\x96\xbc\x61\x2f\x8e\x36\x06\x50\x03\xa0\x06\x40\x0d\x80\x1a\x00\x35\x00\x6a\x00\xd4\x00\xa8\x01\x50\x03\xa0\x06\x40\x4d\x4b\x41\xcd\x20\x3a\x80\xf7\xa9\x09\x11\x05\x71\x87\x1c\x05\xe1\xe9\xed\x2b\x21\xeb\x0f\x30\x24\x60\x48\xc0\x90\xaa\x63\x48\x1f\x88\xa1\xb1\x22\x86\xc4\xc2\x8f\xaa\x46\x48\x34\x1b\xf0\xa2\x83\xbf\xb0\x15\xff\xaf\x6b\xd0\x46\x4e\x92\x44\xc2\x20\x3d\xad\xb0\x0b\xca\x73\x45\x7a\x32\x27\xbe\xdb\xcb\xff\x4b\xef\xf4\xe3\x38\x2c\xf2\xb8\xc1\x49\x80\x1f\x45\x63\x0c\xbe\x1c\x46\xc3\x14\xbe\xec\x47\x03\x68\x6f\x58\xd6\x6a\x16\x47\x24\xb1\x8e\x30\xde\x32\x1b\x8e\x53\xf6\x62\xad\x12\x42\x29\x8a\x14\xa2\xc0\x25\x2c\x15\xf0\xeb\xeb\x4a\xbe\x86\x97\x0f\x38\xfc\x83\xf4\x16\xe5\x03\x6e\xe9\x37\x49\x9e\x40\xe3\x28\x59\x12\x99\x5c\xc7\x47\x81\x88\x64\xc8\xdb\x54\x67\xde\xa6\x8f\x45\x1a\x23\x16\x4e\xb1\x54\x4d\xa3\xe8\x98\x97\xaa\xa9\x9d\x02\xa6\xa2\x3c\x29\x93\x3e\x61\x09\x82\xff\x7a\x43\x89\x80\xf1\xc9\x12\x1c\x2e\x69\xe2\x52\x96\xe0\x96\xc9\x19\xc8\xaf\xb0\xf2\xa4\x19\xe4\x57\x80\xfc\x0a\x6d\xce\xaf\xd0\x51\xda\x64\xb5\xc6\x39\xb6\x13\x84\xd7\x42\x59\x45\xfc\x00\x3f\xb1\xdd\xf7\x50\x54\xd1\xba\xee\x45\x25\xd8\xc6\x92\x49\x73\x54\xe0\xdf\xea\xc6\x5f\xe9\x2a\xd9\x25\xff\x03\x67\x82\xb9\xb4\xb9\x64\xa6\x17\xf5\x6c\x91\xb5\x5d\xf0\x77\xcf\x25\x7e\x86\x37\xd7\x10\x6b\xbb\x16\xdf\x7b\x2d\x70\xc3\x2d\x7f\xe6\x94\xe9\xdc\x00\x06\xf4\xc0\xa2\xb4\x0d\xb7\xac\xbb\x4b\xb0\xdb\x7f\xb5\x6c\xc4\x88\x76\x8c\x25\x87\x78\x5b\xf8\x3a\x1d\xc2\x07\xab\x50\xca\xca\xbf\x0b\x58\xd4\xc1\xa2\x0e\x16\x75\xb0\xa8\x83\x45\x1d\x2c\xea\x60\x51\x07\x8b\x3a\x58\xd4\xc1\xa2\x0e\x16\xf5\x16\x5b\xd4\x6f\xbc\x83\x2d\x18\xc6\xc1\x30\x0e\x86\xf1\xea\x0c\xe3\xef\xe9\x46\x1a\x63\x40\x2c\xcb\x77\x09\x05\xf2\xa9\x1d\x85\xbf\xa4\xe2\x57\xbb\xd0\x9b\xd8\xf5\x02\xf8\xbc\xb3\x3a\xe0\x53\x96\x88\xb4\x41\xbc\x87\xdd\xc0\x9a\x0c\xca\x5c\x7d\x63\x60\x9e\xd6\xc7\x49\x3c\x1c\x4e\x70\x0e\xe1\xc1\x20\x82\xc3\xe6\x41\x60\xa2\xda\xaa\x20\x12\x70\x1e\xe0\x3c\xc0\x79\x80\xf3\x00\xe7\x01\xce\x03\x9c\x07\x38\x0f\x70\x1e\xe0\x3c\xc0\x79\x5a\xcb\x79\x80\xc2\x00\x85\x01\x0a\xd3\x1e\x0a\xf3\xb7\x9a\xeb\x89\x93\x32\x6c\xde\x8a\xe1\x94\x16\x4b\x91\x7f\x33\x33\x39\x5a\x3b\x85\xc9\x49\x37\xd1\xc5\xc7\x34\xfc\xdc\x4d\xe8\x36\xf9\x42\x01\x68\x7a\x7d\x2a\x7a\x8f\x79\x17\xce\xb2\x16\x67\x58\x8b\xf1\xbd\xe4\x6a\xe9\x67\xd7\x8d\x26\xf0\x0e\xa8\xf1\xdd\xe1\x35\xbe\x17\xd1\x43\x8c\x2c\xcd\xa2\xfb\x29\x59\x3a\x83\x4e\xa3\x93\xc1\xf9\x52\xe5\x89\xe8\xba\xef\x05\x7e\xfd\xe5\x56\xfb\x7e\x47\x38\x82\x3a\x87\xa7\x38\x71\xf2\x59\x23\xae\x0b\x51\x60\xff\xca\xcb\x7f\x7f\x65\x7d\xc0\x42\xe9\xf7\x2f\x00\x1e\xbc\x56\xf6\xf1\x1b\xda\xb8\x5c\x1e\x41\x6f\x43\x6f\x2d\xf1\xc3\x6e\xdc\xd7\x05\xb7\x6c\x08\x32\xa9\x33\xc8\xe4\xab\x91\xa6\x8a\x9d\x4b\x2c\xf6\xe4\x2d\xe8\xa2\x17\x7b\xd2\x21\x72\x2d\xbf\xd8\x16\xb9\x16\xff\xe3\x4d\x01\x72\x4d\x15\x35\xc4\x83\x45\xd9\x00\xbb\xa6\x8d\x92\x0c\xaa\x8a\x43\x55\x71\xa8\x2a\x0e\x55\xc5\xa1\xaa\x38\x54\x15\x5f\x9d\x55\xc5\x5b\xaf\x33\x84\x17\x32\x4f\xfe\xa7\x8d\x01\x5a\xc5\x50\x48\xa1\xf1\x60\x5d\x23\x41\x43\xae\xda\xa3\x6a\x40\x68\xec\xca\x53\x61\x20\x34\x16\x42\x63\xdb\x1c\x1a\xdb\x5e\xc6\x16\x5a\x84\xbc\xf5\x3b\xcb\xe4\x09\x34\x8e\x93\xea\x71\xe1\x3d\xbc\x43\x8e\xa7\x0d\x6c\xa8\x05\xd5\xc9\x3f\xbe\x11\x9d\x61\xc8\xdd\xab\xb6\x5e\x47\x5e\x20\xdb\xca\x66\x89\xc2\x83\xbf\xb1\x41\x7d\x7e\x2d\xc2\x5e\x63\x62\x87\xbc\x8f\x99\x4e\x15\xf7\x52\x66\xaa\x92\x92\x43\xec\x63\x17\x4c\x88\x5b\x2b\xe4\x88\x98\xe1\x8d\x34\xfb\xd4\xad\x44\xe2\xc7\xd1\xd1\x5a\x8a\xe6\x97\xf7\x71\xf2\x7d\xd1\x06\xab\x63\xf7\x33\xdc\x33\x89\x4e\x79\xb8\xe7\x06\xd4\xf0\x82\x0b\x7e\xe5\x2d\xa7\x80\xae\xe8\xe1\xeb\xf4\x28\x3e\xcc\xd7\xa9\xf7\x29\xca\x02\xe0\xdd\x0f\xe1\xb3\x2e\x41\x9b\xa8\xac\x4d\x4c\x02\xd1\x0d\x20\xba\xc7\xd0\x11\x3c\xa2\x1e\x12\x12\xfd\x5e\xff\x0c\x09\xee\xdc\x5b\x11\x99\x12\xbe\xdb\x87\x4e\xd4\xba\x59\xe4\x8c\xc2\x35\xcb\xbe\xea\xba\xcd\xbb\x26\xda\x9f\xef\xc3\x7f\xe7\xbf\x4f\x28\x3e\x06\xda\x73\xac\x11\x76\xd2\x8d\x53\x13\x6e\x85\x6d\xa2\xe8\x6a\x30\xc8\x76\xb8\x41\x36\x53\xd3\xe6\xe8\xb7\xe5\x16\x7d\xef\xe5\x9a\x60\x97\x17\x05\x50\xb6\x0b\x15\xf7\x2d\xf6\x23\xeb\x7d\xe7\x7c\xb7\xbf\xad\xb5\x78\xda\xbb\x06\xd9\x36\xcd\xfc\xf3\xe8\x2c\x3a\x53\xa2\x1b\x2d\xe7\x43\xc1\x49\x1e\xac\xa9\x75\xee\xbd\xbf\x5d\x1b\xdf\x0c\x97\x19\x35\x2b\xd4\xcd\x14\x43\xd4\x62\x5a\x9d\x18\xaa\x4e\xea\x94\x1b\x47\x5f\xd8\xe4\x2b\x86\xee\x10\xa6\xd1\x62\xc9\xa3\xb1\xbf\xb7\x49\xf0\x80\x29\x14\x4c\xa1\x60\x0a\x05\x53\x28\x98\x42\xc1\x14\xba\x3a\x4d\xa1\x4d\x55\x06\xaa\xb0\x7a\xbe\x6b\xa3\xaf\xba\xd0\x1b\x62\xf3\x2c\x56\x22\x98\x6d\xa5\xf5\x3a\x04\xd8\x38\x57\x9e\x6e\x02\x36\x4e\xb0\x71\xb6\xd9\xc6\xd9\x6a\x6c\x15\x6a\xd5\x6c\x2a\xb8\x9a\x1c\x46\x43\xf8\xa0\xba\x5f\xd0\xea\xad\x32\xee\x2e\xba\x76\x45\x90\xee\xbf\xda\x86\xde\x5c\x5c\x6c\x37\xad\x1b\x0b\x44\xec\x15\x1c\xfc\x87\xdb\xf0\x17\xd6\x78\x75\x74\x7b\x58\x2c\xb8\xcd\xc3\xf7\x5c\x95\x5a\x54\xd0\xa5\x37\xce\x1a\x85\x78\x37\xb9\x90\xe5\xe2\x15\x7f\x3c\x61\xd9\xa3\xd9\xac\xd8\x04\x1b\x97\xf6\xbe\x49\x89\x59\x1e\x46\xa3\x6c\xda\x0f\xa3\x21\x3a\xed\x07\xd0\x5e\xa4\x85\x65\xbd\xd6\xc4\xfb\x4e\x99\x55\x58\xf0\x83\x0d\x83\x2c\xd7\xee\xd9\xf0\xa9\x1e\xc7\xbb\x7c\x72\x62\xbb\xbd\x80\x7a\xb5\x90\x75\x05\xb2\xae\x40\xd6\x15\xc8\xba\x02\x59\x57\x20\xeb\x0a\x64\x5d\x81\xac\x2b\x90\x75\x05\xb2\xae\x40\xd6\x15\xc8\xba\x02\x59\x57\x56\x5d\xd6\x95\xef\x75\xa3\x03\x8c\x75\xe4\xac\xb4\x51\x9a\x6d\x85\x25\xc0\xb5\x17\x73\xe4\xad\x53\x59\xdd\x71\x3c\x27\xbe\x97\xba\xf1\xdf\x77\xa1\x8d\xe4\x36\x61\x14\xf8\xb5\x08\x1f\x7b\x29\xed\x6d\xce\x15\x24\x2e\x13\x99\x61\xcd\x8d\x91\xe6\x1a\x92\xf9\xb6\xd7\xd3\x1c\xa8\x76\xc4\xf7\x19\xa2\x7c\x78\x2a\x51\x4f\x91\x16\x2a\xb5\xad\xc5\xef\xa6\x8f\x3b\x67\xa5\x0d\x6e\x96\x90\x7b\xd8\xe9\x4c\xa6\x1d\x35\x91\x82\x71\xe4\xb5\x5a\x70\x24\x67\x34\xd2\xc4\xe3\xa8\x46\x1e\x7f\x1f\xbf\x6d\x40\x36\x80\x6c\x00\xd9\x00\xb2\x01\x64\x03\xc8\x06\x90\x0d\x20\x1b\x40\x36\x80\x6c\x00\xd9\xb4\x14\xd9\x1c\x42\x83\xf8\x80\xba\x4f\x58\xf5\xdf\x2c\x7b\x04\xc8\xea\x7b\xf3\xa3\x98\x81\xf6\x00\xed\x01\xda\x53\x1d\xed\x79\xd7\xdd\x68\x86\x7b\xb6\x2c\x16\x2c\x27\xa5\x67\xcd\x5c\xa6\x7f\x29\x30\x7e\x93\x92\x04\x2b\x57\xd0\xb3\x79\x2b\xed\xde\x62\xd8\x22\xf2\xdf\xa1\x2e\xac\xf8\xf9\xbb\xf0\xef\xaf\x41\x6f\x92\xda\xbc\xb4\x94\x88\xed\xa7\x73\x90\x5d\xe2\x7e\x00\x6f\xda\x9f\x12\x4d\x4f\x5b\xe9\x51\xd1\x74\x7c\x88\xdc\x35\xea\xb5\x74\x51\x72\x12\x0d\xb8\x87\x39\xd2\x36\x36\xf0\x64\x72\x81\x39\xfb\xee\xa5\xce\xbe\xd1\xf3\x67\xf0\x18\x1a\x45\xc7\x82\x7d\x5d\xbc\x1e\x6b\x4b\x09\x2d\xa0\xa7\xcb\x8d\x4f\x9c\x0b\xe7\x2a\xc7\xf0\x11\xd7\xf7\xc5\xeb\x12\xe7\x2a\x41\xbd\x92\x1d\x62\x62\xbf\xb9\xbe\xec\x4b\x0e\xba\x11\x8a\xb5\x7e\xcc\x11\x7e\x63\xfb\xbf\x67\xf2\x01\x34\x8b\xee\x2f\x71\xd3\x5d\xfe\x07\x05\x6f\x5d\x88\x63\xac\x33\x8e\xf1\xf3\x91\xa6\x48\x98\x07\x59\x34\xe3\x34\x3a\xe7\x45\x33\xb6\x44\x74\xb5\x40\x36\x85\xc4\x4d\x26\x3f\xb6\xb1\x4c\x74\x1d\x2f\x0b\x53\xa8\x55\x86\x1d\xa2\x2e\xb6\xed\x95\x60\x10\xc6\xb0\xf2\x04\x23\x84\x31\x40\x18\x43\x9b\xc3\x18\xda\xa3\xe3\x86\x06\x33\x54\xb7\x93\x54\xbf\x6d\xf8\xec\x39\x93\xe3\x28\x89\x8f\xab\x47\x05\xc0\xe8\x96\x01\x46\x40\xa3\x2b\x22\xb8\xe1\x07\x51\x74\x17\x37\xf8\xb3\xc0\x0d\xf2\x35\x85\xd9\xbf\x1f\xff\x71\x14\x7f\x29\x8a\x6e\xf1\x7e\x24\xbb\xe8\x9d\x19\xa3\x50\x8c\x47\xd9\x11\x36\x7e\x57\xc6\x28\x9c\x13\x97\x5e\x4c\x8c\x4e\x9f\x76\xad\x71\x0d\xdc\xfe\xca\x1a\x1a\x2e\x6b\x68\xb8\x9a\x86\x26\xf3\xe8\x01\x36\xe1\xc9\x6e\x47\x26\xfc\x09\x34\x8e\x92\x75\xec\x71\xd2\x7b\x56\x13\xd4\x80\x3f\xb5\x1d\x9d\xf7\x39\x78\x0f\xcc\x19\x05\x7d\x80\xbb\x59\xd4\x78\x06\xc7\xaf\x77\xe3\x7f\xee\x42\x5b\x8a\x14\x1e\xd6\x60\xec\x3d\x91\xea\x2a\x11\x07\x4c\xf4\x06\xd5\x23\x3e\x7c\xad\x54\x73\x62\xdd\x0b\x55\x9f\xa0\x48\xb1\xbf\xe4\xac\xa6\x8c\xf0\x95\x4c\xb8\xf4\x1c\xc7\xc9\x65\xe8\xe1\xec\x23\x82\x1b\x06\xb8\x61\x80\x1b\x06\xb8\x61\x80\x1b\x06\xb8\x61\x80\x1b\x06\xb8\x61\x80\x1b\x06\xb8\x61\x80\x1b\x46\x8b\xdd\x30\x6e\x3c\xfe\x00\xde\x1a\xe0\xad\x01\xde\x1a\xd5\x79\x6b\x7c\x61\x3b\x3a\xce\xa0\xd1\x1c\x05\x44\xc5\x51\x39\x01\xb8\x28\x65\x5b\xb9\x2b\xd6\x9c\x08\xd3\x79\x72\x3b\xfe\x5e\x17\xba\x85\xb6\x20\xe2\x74\x5e\xac\x26\x4e\x67\xcc\xb6\x72\x93\xd6\x5c\x47\x84\xe8\xa8\xf4\x71\x49\xf2\x3f\x65\xa9\xc3\x78\x3f\x01\x18\xd5\x82\xda\x79\xa0\xce\xfd\xe1\xb0\x48\xc3\xbd\x1c\x16\xd1\x39\xe4\xd6\x3f\x61\x83\x0e\xd1\x39\x80\x85\x00\x0b\x01\x16\x02\x2c\x04\x58\x08\xb0\x10\x60\x21\xc0\x42\x80\x85\x00\x0b\xb5\x1b\x0b\xed\x47\x03\x78\xaf\xaa\x09\x2c\xb4\xa5\xa8\xe0\x20\xd3\xdc\x57\x82\x33\x0b\xc0\x24\x80\x49\x00\x93\xaa\x83\x49\x9f\x55\xd1\x6e\x06\x93\x58\xa6\x7d\x41\x93\xf2\x56\x3a\x6d\x3a\xf6\x22\x3d\x94\xcf\x2d\xa6\x33\x46\xc1\xc1\xef\x57\xf1\xfb\xba\xd0\x9b\xd8\xa5\x02\x1b\x25\x2a\x27\xbb\x9d\xb6\xd2\xe3\xa2\xa5\x24\x6d\x29\xbe\x9f\xdc\xc2\x72\x03\x73\x70\xe3\x73\xd5\x8d\x96\x07\xb7\x46\xbf\x49\x5e\x8d\xc1\x4d\xfd\xec\x33\x00\x0d\x49\x8c\xfb\x68\x38\xcb\x19\xc1\x87\x38\xcb\x61\x7d\xe2\x30\xc7\xa7\x47\x00\x76\x00\xec\x00\xd8\x01\xb0\x03\x60\x07\xc0\x0e\x80\x1d\x00\x3b\x00\x76\x00\xec\x00\xd8\x69\x37\xd8\x01\x80\x02\x00\x05\x00\x4a\x7b\x00\xca\x9f\xc4\xd1\x11\x06\x50\xec\x39\x3d\xa5\xb9\xe7\x73\xda\x94\x14\x40\xc7\x4b\xbb\xdb\x56\xd6\x98\x33\x73\x69\x33\x97\x11\xae\x38\x1f\x8e\xe3\x17\xd6\xa0\xdb\xc8\xed\xa3\xf2\xdd\x97\x96\x12\xb1\x1d\x3e\x85\xef\xc7\x58\x53\x33\x56\xd6\x48\xb2\xa6\xe2\xbb\xc9\x65\x33\xa5\x0d\x5c\x4c\x94\x5f\xda\xe0\x74\x28\x3a\x3a\xc1\x90\xc7\x31\x74\x84\x22\x8f\x41\x74\x00\xed\x0b\x44\x1e\x74\x88\x96\x12\x5a\x79\xbf\x42\x31\xc7\xd5\x70\x8c\x71\x0a\x9f\xe0\x18\x23\xf0\x53\xb8\x6e\x2a\xe5\xcf\xaf\x32\xa1\x40\xc6\x28\xa0\xd8\x93\xeb\x03\x3e\xd7\x2e\xff\x9a\xed\x3e\x5f\xac\x97\x5f\xd9\x86\x8f\x96\x3c\x8d\x4e\xa2\x89\x92\x98\xfe\xfa\xbe\x1a\x84\xf3\x43\x9e\x93\x3a\xf3\x9c\xbc\x18\x09\xce\x50\xdd\x28\x99\x72\x86\x25\x3d\x19\x47\x49\x2f\xe9\x49\xbd\x8d\x55\x59\xa3\xbd\x95\x62\x2a\xfe\x7f\x6d\x0a\x90\x43\x77\x89\xa2\xed\x3e\xa2\x67\x0f\xfb\xb1\x1d\x92\x07\xca\xb6\x43\xd9\x76\x28\xdb\x0e\x65\xdb\xa1\x6c\x3b\x94\x6d\x5f\x9d\x65\xdb\x43\x0b\xab\xb7\x54\x83\x48\xfe\xe4\xc6\x00\x0d\x22\x11\x52\xc7\xdd\x47\xaf\x88\xd3\x3c\x3d\x2d\x56\x2b\x20\x05\xda\xca\x53\x57\x20\x05\x1a\xa4\x40\x6b\x73\x0a\xb4\x15\xca\xb5\xc2\x72\xac\x4d\x1e\x43\x47\xf0\x88\x7a\x48\x38\x7b\xde\x5b\xe4\x22\x5a\xd6\x7a\xf3\xd3\xb8\xe3\x2f\xee\x15\x29\xb2\xd2\x0b\xa6\x43\xde\xc5\x36\x32\x26\x95\xd7\x45\x88\x95\xb9\xad\x2d\x2c\x16\x74\x32\x53\xae\x19\x73\x97\x2d\xeb\x6a\x91\x4f\x8b\x20\xae\xff\xd4\x8f\xbf\x76\x13\xba\xc7\xb7\x41\xe1\xd5\xd6\xef\x83\x5e\xcf\xf2\xd6\x1f\x64\xad\x8f\xc9\xad\xc7\x0f\xd3\x14\xd5\x7e\x6d\x72\x17\xb7\x4a\x77\x37\xf8\xa0\xfd\x42\x04\x3d\x1f\xc1\xcf\x45\x62\xcf\x8a\x05\xf9\x54\x44\x3a\x36\x18\x8f\x51\x8b\xec\x1c\xf9\x97\x9e\x2a\x68\x8a\x32\x41\xfe\xeb\xfe\x7d\x41\x37\xa9\x5c\x73\x14\xce\xad\x3d\xa5\x94\xaf\xc0\xac\x79\xd5\x50\x7a\x84\x6f\x5e\x0f\x39\x6d\xb9\xe7\x14\x4d\x99\xce\xea\xb9\x1c\x17\x59\xf4\x2c\xa1\x67\xd9\xe1\x25\x31\xa4\xa9\x6b\xe9\x23\x8b\xb4\xfc\x67\x22\xe8\xe9\x08\xfe\x50\x24\xf6\x41\xd1\xdd\xc7\x45\x6f\xc5\xa9\x70\xce\xed\x37\x79\x84\x32\xc1\xba\x4a\x66\x4a\xde\x71\xbb\xc5\xed\x85\x54\x8e\xa4\xf4\x9c\x74\xc0\xbb\x5e\x43\x0f\x6f\x62\x8f\x29\x92\x08\x4f\x54\xe0\x55\xf3\x4c\x56\x5c\x42\x8f\x50\x59\xf1\x20\x7a\x00\xcd\x06\xa7\x4b\xf4\x9d\xc6\xae\x17\x60\xa5\x39\x52\x65\x36\xf0\x77\x86\x4b\x94\x87\xf0\x5b\xdc\x4c\x5f\x15\x16\x15\x17\x2a\x95\xba\x54\xee\x0f\x18\x7b\x1a\x85\xad\xac\x01\x7f\x4a\x5e\x71\x71\x1d\x73\x53\x86\x77\xc6\xfa\x32\x51\x06\x19\x25\x3a\x61\x73\x3e\x3a\xa8\x8b\x80\xd8\xeb\x44\xec\xdf\x8f\xa0\xab\x8c\x80\xa7\xd1\x9c\x47\xc0\x9b\x25\x9e\x3a\x46\x3e\xb6\x57\x00\x86\x58\x08\xe2\x3f\xdc\x14\x26\x1f\x77\x08\x7a\x5f\x51\x24\x1e\x65\x97\x75\x88\x44\x04\xb4\x0f\x68\x1f\xd0\x3e\xa0\x7d\x40\xfb\x80\xf6\xeb\x41\xfb\xad\x84\xf1\x8d\xb5\x23\x54\x8f\xf6\xdb\xab\x98\x24\xff\x62\x63\x98\xe6\x31\x12\x42\xfd\x2b\xea\x23\x47\x58\x45\x94\xb6\xab\x23\x60\x12\x58\x79\x6a\x0e\x98\x04\xc0\x24\xd0\x66\x93\xc0\x13\x91\x56\x9d\x63\x97\x5f\x2a\xa5\xbd\x1b\xcd\xe4\x69\x74\x12\x4f\xa8\x63\xc2\x8a\xb0\x4b\xb6\x22\x54\x6a\xab\x05\xf6\x84\x7f\xea\x46\xa3\xcc\x9e\x60\x3c\x56\x30\x72\x0e\xfd\x6c\x55\xa5\x50\x4c\x1b\xf9\xac\x75\x7d\x81\x68\x38\xf8\xd7\xba\xf1\xff\xdd\x85\xb0\xd7\x84\xd8\x42\x97\xaa\x2b\xb1\x31\x2e\x1a\x6b\x50\x55\x0d\x8d\xde\x30\x21\x3a\x54\x96\x0f\xd1\x7b\x22\xd4\xd1\xf0\x5f\x56\x6f\x0d\x5f\x35\x07\xf1\x7e\xbe\x6a\xbc\x4f\xcf\xd7\x88\x37\xbe\x3e\x4c\xa8\x9a\x12\x1d\x10\x49\x0f\x91\xf4\x10\x49\x0f\x91\xf4\x10\x49\x0f\x91\xf4\x10\x49\x0f\x91\xf4\x10\x49\x0f\x91\xf4\x10\x49\xdf\xda\x48\x7a\x48\x76\x08\xb1\xfa\x10\xab\xbf\x52\x63\xf5\x3f\xbc\xdd\x65\x3f\x95\x62\xf5\x65\x14\x24\x85\xed\x0b\xef\xd1\xaf\x74\xe3\x9f\x5b\x8b\xb6\xfa\x85\x4d\x30\x04\xf4\xa9\xaa\xca\x68\x78\xce\xb4\x1d\x51\x4a\x63\xd7\xb5\x80\xe8\x0d\xfa\x4e\x52\x6f\x81\x1c\x95\x93\x23\x33\x9c\x1c\x9d\xc0\xe3\xb5\x3b\x71\xfb\x90\xa4\xb0\xda\x1d\x40\x91\x80\x22\x01\x45\x02\x8a\x04\x14\x09\x28\x12\x50\x24\xa0\x48\x40\x91\x80\x22\x01\x45\x6a\x2d\x45\x1a\x42\x07\xf1\x7e\x75\x40\x50\xa4\x3b\x03\xa2\x28\x9b\xef\xee\x00\x74\x08\xe8\x10\xd0\xa1\xea\xe8\xd0\x8f\x6f\x47\x23\x8c\x0e\xf1\x79\xe3\x8f\x84\x96\xac\xec\xe2\x82\xa1\x17\x0a\x7a\xea\x32\x75\x06\x72\xb9\xd0\x17\xba\xf1\x8f\xad\x45\xb7\xf2\x9b\x05\x0d\xfa\x74\x35\x34\xe8\x22\x6d\x74\x54\x34\xda\x11\x48\xa8\x9b\x3e\x6e\x96\xbd\x0f\x07\x41\xa5\x1d\x05\x1a\x54\x4e\x83\x52\xe1\x34\xe8\x38\x3e\x5a\x86\x76\x38\x1e\x2a\x9e\x7c\x9c\x09\x95\x0e\x3b\x70\x20\xe0\x40\xc0\x81\x80\x03\x01\x07\x02\x0e\x04\x1c\x08\x38\x10\x70\x20\xe0\x40\xc0\x81\x3a\x8d\x03\x1d\x41\x23\xf8\x90\x3a\x28\x38\xd0\xdd\x32\x07\x2a\x55\xe9\x01\x06\x01\x0c\x02\x18\xd4\x29\x30\xe8\x97\xe3\x68\x6b\xbf\x9e\x37\xfb\x97\x12\x65\xf1\x60\xef\xc4\x3f\x1a\xc7\xcf\xaf\x45\x37\xa7\x2c\xdb\xb8\xb4\x94\x88\xdd\xed\x93\x2a\x4e\x04\x5e\xc5\xb7\x90\x5f\xc7\x2c\xdb\xb8\xe8\x45\x63\x41\xba\xb7\x0e\x4f\xf7\xf6\x16\x74\x84\x71\xa3\x83\x68\x3f\xe5\x46\x1a\xea\x45\xf1\xc0\x60\x4f\x32\x13\xb4\xa5\x84\x26\x46\x28\x14\x12\x85\x24\x71\x3b\x13\xce\x90\x76\xe1\x9d\x0c\x0e\x79\x0f\x95\x93\x3d\x72\x9c\xa4\xaa\x28\xf6\x91\x75\xde\x5c\xbd\xcf\x3f\xf9\x9a\x37\x5d\xef\xe0\x17\x34\x77\xc6\x1e\x47\x47\xd1\xe1\x92\x08\xfa\x9a\x06\x18\x62\xe6\x21\x2f\x5a\x9d\x79\xd1\x7e\x3e\xb2\xdc\xc5\x9d\x64\x69\xd5\x46\xd0\x21\x2f\xad\x5a\xa3\x05\x44\x75\x12\xc0\x5b\xe5\x95\x64\x41\x58\x4e\xb2\x1f\xdc\xea\x09\x08\x2c\xb2\x8f\x79\x32\xe1\x76\xf6\xb7\xe6\x8a\x04\xc8\x20\x06\x19\xc4\x20\x83\x18\x64\x10\x83\x0c\x62\x90\x41\x6c\x75\x16\x07\x69\xe8\x96\x1f\x9a\x8e\x2c\xf9\x9b\x1b\xbc\x5d\x7f\x57\x48\xe6\x2f\x4f\x17\xb8\x8d\xe6\x98\x69\x9a\x2a\x00\xd9\xbb\x56\x9e\x8a\x01\xd9\xbb\x20\x7b\x57\x9b\xb3\x77\x35\x9d\xe7\x84\xe6\xe4\x6a\xa4\x70\x9f\x3c\x88\xf6\xe3\x01\x75\xaf\xb0\x2c\xdc\x2e\x5b\x16\xc4\x3d\x2d\x48\xa7\xf5\xef\xdb\xd1\x03\x35\x94\xe7\x60\x2e\x74\x55\x15\xe9\xf8\xa5\xed\xf8\x6b\x6b\xc3\x12\x56\xfe\x6e\x35\xce\x75\x95\x32\x8e\x75\x84\xa3\x1d\x73\x58\x6b\x7b\xe6\xcc\x15\xe4\x82\xd7\xe6\x14\xf0\xe0\x9c\x07\xce\x79\xe0\x9c\x07\xce\x79\xe0\x9c\x07\xce\x79\xe0\x9c\x07\xce\x79\xe0\x9c\x07\xce\x79\xe0\x9c\xd7\x59\xce\x79\x1d\x9c\xa4\x1a\x1c\xf5\xc0\x51\x0f\x1c\xf5\xaa\x73\xd4\xfb\xce\x56\x34\xc6\x01\x54\x3e\xef\x66\x72\x1f\x08\xca\xe1\xee\x14\xf4\x82\x31\xbf\x98\x75\x0c\x11\xb7\xd9\xef\xa4\xf4\xac\x81\x9f\xde\x8a\x9f\x58\x83\x36\x92\x46\x38\x5d\x1a\x88\xf5\xd0\x29\x47\x7f\x77\x87\xdb\x9b\xe4\xb3\xbc\xa9\x59\xa3\x10\xdf\x4d\x4b\xbf\xe6\xf3\x3c\xeb\xfa\x80\x97\x75\x5d\xba\x6a\x96\xb4\xd3\x58\x9f\x89\xc9\xb7\xa2\xa3\x8c\xad\x0c\xa2\x03\x94\xad\xf4\xa3\x3e\xb4\x27\xb8\x26\x41\x3e\xef\xf0\x12\x04\x03\x1a\xed\xcf\x72\xfd\xd4\xce\x85\x83\x96\x3d\x78\x37\x83\x28\xec\x81\x25\xb4\x64\xc0\x75\x54\x23\x7d\x43\xb1\x2f\xac\x2b\xf9\x06\x71\xd7\x5f\xad\x8a\xcf\xd0\xeb\x16\x09\x6d\xfd\x97\x48\x52\xa8\x55\x62\x54\xaa\xed\x53\x80\x1d\x09\x3c\xda\xea\xf4\x68\xfb\x48\x04\x8d\x31\x97\xb4\xc3\x68\xd8\x73\x49\x6b\x98\x30\x58\xae\x94\x09\x17\x26\xf9\xc5\xaa\x85\x89\x2c\x2f\x2a\x0a\x96\xe4\x9f\x6d\x28\x11\x26\xfb\xca\xac\xdc\x55\x48\x95\x38\xab\x6b\xd5\x5a\x99\x02\x66\xf0\x95\x27\xbe\xc0\x0c\x0e\x66\xf0\x36\x9b\xc1\xdf\xda\x74\x11\xdf\x60\x85\x30\xd4\xae\x3e\x39\x80\xf6\x62\x4d\xed\x15\xe7\xf8\xcd\xf2\x39\x9e\x3e\xa1\xfc\xc0\x7e\xe3\xa5\xf9\xc6\xdf\x57\xd1\x76\x9f\x73\x0e\x33\xa8\x13\xbd\xd7\x4c\xe9\xe4\x54\x83\x3f\xa7\xe2\xdf\xed\x2a\xd9\xf7\xaa\x2c\x4a\x35\xc3\x9a\x99\x35\x1a\x5b\x94\x4a\xda\x3a\xbd\x27\x4c\x99\x4e\xe1\x84\x65\x8f\x66\xb3\x62\x3b\x75\xc0\x92\x5d\x7e\xfe\xaa\xa6\x72\xd4\x95\xd9\xf0\x45\xb7\x17\x6b\xe5\x8a\x93\xf7\x39\xca\x57\x21\xd8\xa8\xc1\x46\x0d\x36\x6a\xb0\x51\x83\x8d\x1a\x6c\xd4\x60\xa3\x06\x1b\x35\xd8\xa8\xc1\x46\x0d\x36\xea\xd6\xda\xa8\xc1\xb0\x0c\x86\x65\x30\x2c\xb7\xc7\xb0\xfc\x46\x14\xdd\xc7\x81\xcb\x22\xf9\x5c\x05\xde\x8c\x17\xd2\xd0\x8f\x5f\x8b\xe2\xff\x1e\x45\x9b\x8b\x2f\xb8\xb4\x94\x88\xdd\x99\x31\x0a\xc5\x1b\x1d\x7b\x8f\xf8\x7d\x19\xa3\x30\x5a\x74\xf9\xc5\xc4\xe8\xf4\x69\xf7\x6c\xd5\x38\x04\x32\x5c\xd6\xd0\x70\x59\x43\xc3\xd5\x34\x34\x99\x47\x0f\x30\xea\x71\x0e\x4d\x51\xea\x71\x02\x8d\xa3\x64\x1d\xd4\x43\x7a\xcf\x29\xd3\x09\x45\x1f\xf8\x87\xdd\x68\xa8\x8a\x84\xcc\xfc\xc7\x54\x56\x77\x1c\x2f\x45\xcf\x6f\x77\xe3\x7f\xeb\x2a\xcf\xc6\xfc\x6b\xd5\x04\x8c\xf0\x94\xc7\x63\xa4\xc5\x8e\x08\x10\xb9\xcf\x27\x13\xb3\xdc\x49\x00\x67\xb5\x04\x64\xb1\x18\x8c\x2b\x97\xc2\xa1\xd9\x61\x3c\x5c\x29\x2b\xb3\xfc\x09\xca\xa3\x40\x00\xa0\x01\x40\x03\x80\x06\x00\x0d\x00\x1a\x00\x34\x00\x68\x00\xd0\x00\xa0\x01\x40\x03\x80\xd6\x5a\x80\x76\x08\x0d\xe2\x03\xea\x3e\xe1\xe8\xf1\xe6\x22\xe7\x10\x49\x7d\x87\xa0\x0e\x60\x6f\xc0\xde\x3a\x85\xbd\x7d\x64\x07\xba\x5f\xb0\x37\xcb\x49\xe9\x59\x33\x97\xe9\x5f\x72\x89\x4f\x40\x70\x07\x05\x00\x56\xae\xa0\x67\xf3\x56\xda\xbd\xd1\xb0\x05\x12\x7a\x79\x3b\xfe\xc8\x5a\xf4\x26\xa9\xc9\x4b\x4b\x89\xd8\x67\xab\x21\x42\xa7\x44\xd3\xd3\x56\x7a\x54\x34\xdd\x11\x70\x68\x1f\x73\xb2\xf2\xde\x4a\xca\xcb\x95\x0e\xe8\x38\x00\xa3\x3a\x80\xd1\x5c\x38\x30\x3a\x86\x8f\xb8\x5e\x56\xde\xf7\xe0\xb4\x28\xe0\x53\x14\x27\xf6\x01\x66\x04\xcc\x08\x98\x11\x30\x23\x60\x46\xc0\x8c\x80\x19\x01\x33\x02\x66\x04\xcc\x08\x98\x51\x4b\x99\xd1\x38\x4a\xe2\xe3\xea\x51\xc1\x8c\xba\x65\x66\x14\xa0\xc4\xaf\x84\x10\x23\x00\x54\x00\xa8\x00\x50\x55\x07\xa8\xfe\xbc\x1b\xed\x0b\x70\x4d\xaa\xe8\x95\xf4\x89\x6e\xfc\xfd\x2e\x84\x3c\xaf\xa4\x1b\xd4\x21\x29\x56\xec\x90\x74\x63\xf9\x22\x05\x86\xc0\x36\x9c\x39\x55\x8d\x96\x1e\x0a\x47\x4b\x83\xf8\x40\x3d\xbe\x48\x80\x94\x00\x29\x01\x52\x02\xa4\x04\x48\x09\x90\x12\x20\x25\x40\x4a\x80\x94\x00\x29\x01\x52\x02\x37\x24\xa0\x3c\x40\x79\x80\xf2\x54\xa6\x3c\xff\xb6\x1d\x4d\x06\xe6\x5c\x0a\x70\x42\x22\x82\xd6\xb6\x88\x98\x23\x5a\xbf\x23\x57\x34\x7a\x71\x3b\xfe\xb1\xb5\x25\x99\x99\x7e\xab\x1a\xfc\x33\x26\xda\x9c\xe1\x6d\x76\x04\x04\xea\x2d\xcd\xee\xe4\xb9\x1d\x95\xf7\xb8\xf3\xb1\x50\xeb\x3d\x8e\xde\x16\x4e\x7d\x86\xf0\xc1\xf2\xb4\x4d\xe5\xa3\x5b\x9e\xbe\x09\x6a\x10\x01\x17\x02\x2e\x04\x5c\x08\xb8\x10\x70\x21\xe0\x42\xc0\x85\x80\x0b\x01\x17\x02\x2e\xd4\x61\x5c\xe8\x18\x3a\x82\x47\xd4\x43\x82\x0b\xdd\x2b\x73\xa1\x72\x2d\x1f\xbc\x8c\x80\x3f\x01\x7f\x5a\x3d\xfc\xe9\x5b\x67\xd1\x31\xc6\x9f\x8c\xc7\x0a\x46\x8e\xc1\x24\x37\xf9\x51\x00\x7f\xca\x19\x85\x6b\x96\x7d\x35\x6f\x65\xcd\x94\x69\x38\xf8\xe9\xb3\xf8\xc5\x6d\x08\x7b\x0d\x88\x54\x48\x7b\x98\x5a\x69\xf3\x65\xe6\x4a\x4c\x17\x3a\x9d\x63\x0d\x4d\x93\x86\xae\xc7\x7b\xc9\xc5\x13\xa2\x11\x9e\x83\xc8\x03\x3e\x45\x57\x77\x38\xeb\x49\x02\xf9\x00\xf2\x01\xe4\x03\xc8\xc7\xaa\x21\x1f\xc9\x8e\x21\x1f\x0d\xef\x49\xdd\xe4\x23\x09\xe4\x03\xc8\x07\x90\x0f\x20\x1f\x40\x3e\x5a\x4f\x3e\x92\x40\x01\x56\x20\x05\x48\x76\x3a\x05\x48\xde\x80\x14\xa0\x46\xcf\x04\xcd\x3b\xe9\xf3\x02\x6d\x09\xad\xe8\x70\x5e\x4d\xea\xe5\x2b\xf7\xfa\x3b\x0f\xdc\x8c\xd7\xb2\x82\x53\x0f\x87\x7b\x2e\x1c\xc2\x83\xdc\x73\xc1\xeb\x11\xf7\x5f\x28\xea\x4f\x79\xe2\x5c\xf5\x95\xf5\xbe\xc0\xe2\x0e\xb6\x2b\x28\x7a\x09\x9b\xd0\xd8\xdf\x5b\x4e\x27\x18\x4c\x38\x8f\xce\xa2\x33\x25\x65\x34\x47\xd0\xa1\xba\xbf\x0f\xd4\xd1\x84\x32\xc0\x75\x96\x01\x7e\x5f\x14\x4d\x31\x51\x31\x81\xc6\xa8\xa8\x38\x82\x96\x33\x15\xd1\xfd\xac\xa8\xf0\x24\x3a\xe5\x15\x15\x5e\x66\x93\x33\xa4\xc9\x01\x7c\x06\x9d\x46\xeb\x46\x53\x29\x23\xdf\x80\x36\xeb\x97\x66\x79\xab\xe9\xd2\x2c\xfe\x97\x8a\xaf\x34\x53\x99\x36\xab\xa4\xac\x2c\x39\x9b\xf2\x0d\xaf\x58\xb2\x0d\xb1\x6b\xca\x24\xdb\x98\xb8\xa7\x35\x32\x0e\x80\x29\x00\x53\x00\xa6\x00\x4c\x01\x98\x02\x30\x05\x60\x0a\xc0\x14\x80\x29\x00\x53\x00\xa6\x00\x4c\x01\x98\x02\x30\xed\x3c\x60\x9a\xa9\x89\x82\x54\x08\xe5\x9a\x2d\xe8\x85\x45\x27\x14\x2f\xc4\xfd\xf1\xc2\x16\xbc\x99\xc9\x5f\xef\x84\xdf\x64\xd4\x70\x03\xba\x83\xe2\x7f\x50\x91\xc6\x7c\xdc\x72\x56\x3a\xa0\xc2\x9f\xbd\x98\x23\x53\x94\xe7\xd2\xc2\xff\x55\xc5\xff\xa5\x0b\x6d\x24\xd7\x0b\x9a\xf2\x18\xdf\xaa\x73\x69\x73\xc9\x4c\x2f\xea\xd9\xa2\x88\x4a\xa1\x16\xcf\xb0\x96\x1a\x97\x48\x4b\x8b\x33\x71\x7b\xce\x4a\xbb\x85\xf9\xe4\x67\x4c\x99\x4e\xa1\xc3\xbd\xe1\xda\x92\x10\xab\xa6\x65\x20\x4d\x0c\xbe\x0e\xe4\x21\x2e\x5f\x06\x57\xba\xfd\x17\xe4\x46\x8c\xe8\x6b\x53\x13\x06\x84\x3f\x02\xd3\x02\xa6\x05\x4c\x6b\xf5\x30\x2d\x08\x7f\x84\xf0\x47\x60\x5a\xc0\xb4\x80\x69\x01\xd3\xea\x08\xa6\x05\xb1\x85\x00\xc9\x20\xb6\xb0\x4d\xb1\x85\x9f\xdf\x8d\x6e\xeb\xd7\xf3\x66\xff\x52\x82\x92\x17\x91\xa5\xea\x57\x76\xe3\xff\xb8\x16\xdd\x9c\xb2\x6c\x9a\x9f\xfc\x4e\x3a\x7d\x8a\x8f\x75\xe7\xac\xb4\x11\x7f\x13\xf9\x61\xcc\xb2\x8d\x8b\x09\xf2\xff\x1b\xec\x71\xf2\x42\x04\x3d\x1f\xc1\xcf\x45\x62\xcf\x8a\x21\x7d\x2a\x32\xcb\xd4\x01\xaa\x52\x3c\x46\xb7\xe6\x39\xf2\x2f\x3d\x55\xd0\x14\x65\x82\xfc\xd7\xfd\xfb\x82\x6e\x52\xc7\x2b\x47\x49\x65\x17\x9d\x82\x61\xf7\xf1\xde\xa7\xb8\xd6\xaa\x64\xcd\xab\x86\xd2\x23\xdc\x67\x7a\xc8\xfa\x75\x69\x90\xa6\x4c\x67\xf5\x5c\x8e\xaf\x48\x3a\xd6\x7a\x96\x2c\x81\x84\x96\x18\xd2\xd4\xb5\xf4\x91\xf2\x68\x26\x9f\x89\xa0\xa7\x23\xf8\x43\x91\xd8\x07\x45\x77\x1f\x17\xbd\x15\x87\xff\x39\xb7\xdf\xe4\x11\xca\x04\xeb\x2a\x99\xe7\x79\xc7\xed\x16\xdf\x38\x16\x1d\xb2\x1f\xe8\x39\xb6\x7d\xb3\xcf\x5a\x43\x0f\x6f\x62\x8f\x29\xa2\xa2\xb3\x68\x88\xd1\x9c\x04\xea\xa7\x34\x67\x37\xea\x41\x3b\x02\x9d\xae\xc8\xf7\xd7\x96\x12\x1a\xf9\xb6\xa1\x04\xf4\x44\x38\xce\xe9\xc6\xdb\xe4\xac\xe4\x1c\xed\xa8\xaa\x4b\x36\xc9\x63\xae\xdc\xe3\x0f\x6e\x6e\xc2\x5d\x19\xa3\x80\x62\xef\x5a\xe7\xcd\xcb\x98\x6d\xe4\xb3\x7a\xca\xf0\x9b\x9a\x9b\xf9\x6f\x4d\x9b\x9d\x23\xe8\x10\x1a\x2c\xf1\xf9\xac\x76\x30\xc1\xbf\x13\xfc\x3b\xeb\xf4\xef\xfc\x40\x04\x1d\x61\x1e\x99\x07\xd1\x7e\xcf\x23\xb3\x01\x0b\xb9\x7e\xd9\xe0\x8a\x80\xe0\xa5\x9b\x5f\x2c\xa0\x2a\x25\x84\xaf\x54\x90\xc5\x46\xfc\xdb\xb7\x7a\x22\xe0\x16\xee\x41\xa9\xb3\x55\xbf\x89\xfd\xdf\xa6\x2d\xfa\x0b\x68\x06\x4d\xcb\x8b\x3e\x9e\x44\xc7\xeb\xa0\xe1\xe3\xb4\x9b\xe7\x29\x5c\x76\x40\x1a\x84\x49\x83\x6f\x47\xd1\xb7\xa2\xf8\xf5\x68\xec\x35\x31\x40\x2f\x45\x2f\xc8\x1a\x9d\x99\x53\x1c\xa6\x95\x29\x73\xc6\xbc\xc5\x0e\x48\xee\x29\xc6\xa3\xf7\xfc\xe0\x48\xbb\x28\xad\xf6\x9c\x95\xeb\xcb\x19\x19\x9d\x0e\x04\x57\xea\x64\xa9\xc0\x78\x86\xf8\x04\x7c\xce\x99\x0b\x0b\x46\x9a\xc8\x9d\xec\x75\x0e\x81\x65\xc4\x9f\x33\xb3\xbd\x5c\xd7\xa3\x67\x02\x25\x63\x93\xad\x2a\x6f\xd8\xa6\x95\x16\x3a\xab\xb7\x6b\x15\xae\xe7\xbd\x43\xf4\xa2\x43\x3a\x29\x9f\x26\x74\x72\xa7\xfb\x42\xfc\x21\xf3\x92\x6a\x60\x92\x1b\x68\x3f\x17\x0c\x3d\xe7\xdb\x47\x15\xd3\x2e\x4c\xd3\x1e\xf8\x19\x7a\xbf\x1c\x45\xaf\x46\xf1\x2b\xd1\xd8\xcb\x62\x98\x9f\x89\x8e\x4b\x06\xb2\x3c\x51\xdf\x0d\x81\x61\xa6\x6d\x2b\xaf\x67\xe8\x07\x60\xe6\xc8\x5e\x36\x06\x0c\x3c\xb8\xef\xe2\x59\xd8\x98\x72\x32\xa8\x29\x92\x12\x97\x36\xf2\x46\x2e\x4d\x8e\x96\x82\xe8\x19\x8a\x65\xe7\x2f\xeb\xe4\xc4\x48\x87\xd5\x5e\x34\xfa\xe7\xf5\xac\x4b\xc0\x55\xf6\xab\xaa\xcc\x9b\x39\x3d\x6b\x3e\xee\xa2\xb4\x39\x83\xe8\xc8\xf4\x84\xde\xcf\x74\xe3\xb4\x77\xf6\x62\x8d\xf7\x38\xde\x4d\x8c\x39\x6b\xca\x84\x49\xa7\xb3\xd4\x71\xcb\x2e\x7f\x33\x0a\x60\x98\xf9\x87\x21\x6f\xba\xd8\xac\xc2\x65\x4d\xdd\xc4\xfa\x33\xee\xbe\x88\x53\xa4\x15\xbe\xb7\x0b\x3d\xd9\x85\xdf\xdd\x15\x7b\x43\x1c\x47\xbf\x46\x8e\xa3\xf4\xa1\x64\x49\x5d\xb6\xae\x29\x19\xdd\x9e\x23\xc7\x36\xc9\x0f\x5c\xac\x0b\xc3\x9e\xb7\xec\x05\x32\x16\xbe\x3d\x3d\x5f\xf2\xf0\xe0\x8e\xd2\xf9\xec\x4e\xc6\x3c\x7b\x2b\x93\x4c\x94\x94\x99\xf6\xe0\x32\xe5\x94\x14\xf5\x8b\xd1\x25\x47\x3b\x4e\xf1\x5c\x12\xa9\x49\xc3\xe8\x32\x2c\xf7\xc4\xe1\xa9\xd9\xc5\x0f\xd3\x14\xe6\xeb\x4f\xb7\x48\x59\x38\xf4\xb0\x77\xe8\x51\xfa\xf8\x87\x2f\x9e\x18\xce\x88\xd2\x93\xd4\x53\x57\xc9\xc6\x90\x4b\x93\xab\xf4\x6c\xd6\xba\x46\x2f\x2a\x19\x38\x06\x8e\xf9\xd4\x2f\x6e\xc4\x7d\x83\x39\xd1\xd2\x88\xd2\x73\xc2\xb2\x0d\xa9\x59\x25\xa5\x3b\x29\x3d\x4d\xde\x9e\x8f\x0f\x15\xb6\xac\x3d\x87\x49\xaf\xb2\x06\xe7\x45\x1b\x9a\xba\x39\x5f\x3a\x6f\xe4\xad\xfb\x33\x91\x06\x3b\x25\xd4\x1e\x47\xb1\x7c\x47\x07\xc5\x7f\x8f\x5f\x8f\x6f\x66\xc3\xd4\xb0\x6d\x3e\xf9\x4b\x1b\xbc\x6d\xbe\x9b\xa2\x17\x6a\x08\x64\x47\x60\x3f\x95\xff\xd6\x3c\x39\xe1\x36\x63\xef\xbf\xab\xb4\xa1\x3e\xfa\xa8\x3d\xe4\x9f\xc3\x77\xcb\x3f\x2e\x18\x76\xc6\x90\x7f\xdd\x29\xff\xea\x14\x6c\xbd\x60\x64\xcc\x54\x5f\xe9\x75\xc9\x73\x68\x0a\x4d\x96\x1c\x27\x86\xd1\x50\x1d\x1f\x72\x9a\x34\x0a\x3a\x45\x98\x4e\xf1\xc9\x35\xe8\x85\x35\xf8\xf9\x35\xb1\xe7\x84\x60\x7e\xcf\x9a\xd5\x73\xc2\x28\x31\x11\x90\x71\xa6\x26\x6f\x6a\xc6\xca\x33\x18\xc8\x68\xb8\xb2\x4b\x9e\xc2\xf4\x37\x36\x71\x77\xd3\xfd\x85\x79\x48\xe8\x59\x7a\x27\x51\xa4\xd8\xdd\xf4\x0a\xaa\xd4\x38\xca\xae\x49\xc7\xca\xd1\x69\xd9\xab\x9c\x25\x13\x9f\xff\x7b\xd6\x5d\x0e\xde\x1f\x77\x07\x1f\x7d\x92\xaf\x46\xd0\x2b\x11\xfc\x72\x24\xf6\x39\x01\x58\x3e\x16\x39\x61\xd9\x29\xaa\x6f\x65\x2c\x3a\xec\x96\xa2\xce\x93\x3f\xa9\xca\x68\xd1\x5b\x68\xca\xe9\x02\x57\x8d\x28\x58\xe1\x53\xb3\x4f\x4f\xd1\x17\xa7\x1e\x04\x59\x33\xc5\xb7\x3e\xca\x61\xac\x6b\x7c\x4c\x99\x85\x3d\x6f\x58\xf9\xac\xa1\x29\xec\x89\xf3\x59\x3d\x23\xbe\x25\xa5\xb4\xbe\x03\x20\x1e\xaf\xae\xa5\xdd\x6a\x19\x8e\x09\x4e\xfd\x9d\x67\xe5\xe6\xaa\x13\xd3\x01\xc2\xd9\x93\xde\x93\x09\xd4\x8f\xfb\xd4\x3d\xc2\xdf\x6c\x93\x9c\xbf\x90\xdc\xd8\xfc\x7a\x16\xf8\xeb\x7d\x68\xdc\x27\x49\x7f\xed\xe9\xf9\xdf\xdf\x87\xff\x67\x69\x7a\xfe\x1d\x3e\xf4\xb3\x3c\x2f\x63\x7c\x0f\xb9\xac\xd5\x89\xf0\x01\x94\x36\x07\x94\xce\x07\x53\x92\x33\x6c\xc9\x8e\xa3\x24\x5d\xb2\x87\x51\x85\x5d\x5a\x23\x13\x89\x07\xac\x0e\x68\xe5\xf3\xa0\x25\x45\x00\x42\x80\xea\xbf\xaf\x2b\x99\xef\xbb\xfc\xa9\xaa\xcf\x94\xd7\xf8\x95\xed\x99\xf5\x35\x6a\x4c\x61\xdf\x02\x34\x26\x60\xb2\x75\x32\xd9\xdf\x8c\x30\x2f\xd9\x04\xf5\x92\x15\x4c\x76\x59\xa2\x61\x55\x08\xa0\xfc\x62\x01\xc5\x9f\xdf\x54\x22\x80\xee\x12\x4c\xd7\x47\xe6\xf4\xb1\x1f\xdb\x23\x72\x00\xff\x02\xfe\x05\xfc\x0b\xf8\x17\xf0\x2f\xe0\x5f\xc0\xbf\xfe\xf8\xb7\x99\xaa\x44\xf2\x5f\x37\x94\xe8\x0a\x89\x10\x30\xec\xa3\x41\xf4\xe6\xdb\x51\xb2\x0e\x18\xf2\x0a\x54\x4c\x80\x21\x03\x43\x6e\x33\x43\x9e\x6f\xe8\x79\xb0\x53\xcb\x55\x32\x66\xbd\x1a\x6b\xe5\xe0\x27\xcf\xa3\xd3\x9c\x6d\x2f\x16\x2c\x27\xa5\x67\xcd\x5c\xa6\x7f\x69\xa0\x62\x05\x10\xfa\xd5\xc8\x8a\xcf\xe6\xad\xb4\x7b\x9f\x61\x3b\xf8\xd3\xe7\xf0\x37\xb6\xa1\x2d\x52\x53\x97\x78\x53\xb1\x03\x95\x6b\x81\x9c\x12\x4d\x4e\x5b\xe9\x51\xd1\x64\x7c\x90\xdc\x36\xea\xb5\x77\x71\xa0\x24\xf1\x66\xc0\x8d\x1d\x1e\x12\x0d\xf9\xee\x20\x36\x18\x62\x83\x21\x36\x78\xf5\xc4\x06\x43\xbe\x3b\xc8\x77\x07\xb1\xc1\x10\x1b\x0c\xb1\xc1\x10\x1b\xdc\x11\xb1\xc1\x90\xef\x6e\x25\x86\xf2\x42\xbe\xbb\x66\xe4\xbb\x5b\x0a\xf6\x17\x78\x1b\xe3\x43\x17\xd0\x0c\xe5\x43\x53\x68\x12\x9d\x0a\xe6\x43\xde\x41\x5e\xe3\x60\x40\x0b\x38\xc0\x4f\x99\x8e\xc8\xe5\x95\x09\xc7\x42\xe3\x38\xc9\x50\x50\x40\x73\x12\x0f\x62\xcf\x75\x9d\x0c\xa5\x2e\xa1\xb0\xa2\x24\xea\xcf\x22\x7f\xb8\xa1\x88\xba\x21\x41\x1c\xe3\x10\xbb\xa2\x9d\x24\x83\x81\x87\x87\xd0\x5b\xd0\xc5\x12\x8a\x7f\x02\x8d\x37\xe2\x93\x01\xd1\x07\x1f\xa7\x3a\x7d\x9c\x3e\x19\x45\x0f\x32\x41\x32\x8d\xce\x51\x41\x72\x0a\x35\x68\x56\xa2\x87\x99\xf3\xd4\x03\x68\xd6\x73\x9e\x6a\x5c\xeb\x8f\x30\x33\xe9\x45\x74\x41\x32\x93\x36\xae\xf9\xe5\x16\x1e\xa9\x4e\x74\xfa\xc8\xc2\x1a\xa5\x69\xfc\xc7\x02\xb8\x6f\xaf\x6f\x11\x92\x20\x31\x39\xc6\xfd\xaf\xca\xc4\xa4\x5f\x3d\x92\xd6\x08\x4c\x20\xb5\x40\x6a\x81\xd4\x02\xa9\x05\x52\x0b\xa4\x16\x48\x2d\x90\x5a\x20\xb5\x40\x6a\x81\xd4\x02\xa9\x05\x52\x0b\xa4\xb6\xf3\x48\x6d\x27\x57\x26\x69\x15\x8b\xb8\x11\xfd\xf0\x3e\xb5\x1d\x9d\x0f\xf6\xc3\x63\x45\x4a\x6a\xf5\xc6\x7b\xbd\x1b\xff\x73\x97\x3f\x95\x79\x4f\xa4\xba\x6a\x26\x01\x63\xde\xa0\xc2\x26\x87\xe9\x0d\x75\x30\xf1\x1b\xa3\xe8\x49\xc3\x6b\x9b\x84\xae\xc6\x56\xad\x30\xa8\x7f\x02\xe4\x0c\xc8\x19\x90\x33\x20\x67\x50\xff\x04\xea\x9f\x00\x39\x03\x72\x06\xe4\x0c\xc8\x59\xe7\x91\xb3\x1b\xf0\x24\x0c\x15\x56\x56\x22\xec\x83\x0a\x2b\xcd\xa8\xb0\xf2\xbd\x5e\x74\x80\x41\x23\x3e\x6f\x4a\x8b\xdb\x2e\x59\xd9\xc5\x05\x43\x2f\x14\xf4\xd4\x65\xb2\xab\x8a\x4c\x84\x2f\xf5\xe2\xef\xaf\x45\xb7\xf2\xdb\x44\x8d\xdb\x6e\x9f\x64\x84\x17\x69\x1b\xa3\xa2\x8d\xb8\x4a\x2e\x9a\x65\x77\xf2\x82\xb4\xa5\xd7\x40\x06\xc2\x0e\xcf\x40\x58\x1b\x26\xd6\xdc\xe9\xc5\xe7\x89\x56\xfa\xbd\x43\xc1\x54\xe5\x2c\x81\x57\x52\xe1\xdc\xea\x38\x3e\xca\xb9\x55\xf1\x5c\xe7\xe8\xaa\xac\x47\x65\x35\x7b\x63\x4f\xac\x2f\x9f\xf0\x3b\xfd\xb3\x11\x96\xcd\xf9\x1d\xfc\xba\x96\x4e\xfb\xf3\xe8\x2c\x3a\x53\xe2\xaa\xbb\x9c\xaf\x04\xfe\xb9\xe0\x9f\x5b\xa7\x7f\xee\x6f\xd7\x96\x5d\x28\x5c\x60\xdc\xcf\x9c\x72\x27\xd1\x29\xcf\x29\xb7\x6d\x32\x88\xd6\x8f\x69\x85\x0c\x8a\x3f\xbf\xa9\x5c\x06\x6d\x15\x09\x09\xcb\xc4\xce\x76\xf6\x53\x4b\xa5\x0e\x64\x21\x84\x2c\x84\x90\x85\x10\xb2\x10\x42\x16\x42\xc8\x42\x08\x59\x08\xfd\xb3\x10\xb6\x42\x57\x48\xfe\xdb\x86\x72\x5d\xa1\x3f\x24\x21\x61\x99\x06\xd1\x4d\x73\x5b\xb5\x4a\x81\x80\x2c\x84\x2b\x4f\x31\x81\x2c\x84\x90\x85\xb0\xcd\x59\x08\x5b\x4d\xab\x42\xab\xdb\x54\x27\xff\xab\x95\xf4\xfe\xfb\xc4\xe4\x11\x34\x82\x0f\xa9\x83\xc2\x76\x73\xb7\x9c\x8e\xb0\xb4\xd5\x16\x94\xc1\xf9\xe8\x1e\xd4\x23\xea\x79\xfb\xbb\x22\x3a\x86\xbd\x64\xa6\x0c\x07\xff\x20\x8e\xff\x52\xf1\x0a\xac\xed\xa8\x9c\xfc\x6f\x96\xdd\x16\xbf\x8b\x5c\xc6\x2b\xac\x09\x17\x40\xfe\x63\x87\xbb\xfb\x41\x98\x28\x38\xbb\x81\xb3\x1b\x38\xbb\xad\x1e\x67\x37\x08\x13\x85\x30\x51\x70\x76\x03\x67\x37\x70\x76\x03\x67\xb7\x8e\x70\x76\x83\x30\xd1\x95\xe8\x39\x06\x61\xa2\xcd\x08\x13\x7d\x08\x1d\x63\x44\x65\x08\x1d\xa4\x44\x65\x2f\xd2\x50\x6f\x68\x6d\x60\x7e\x16\x9f\x32\x9d\x70\x88\x72\x3a\x9c\x91\xec\xc4\xdb\x19\x23\xe1\xed\x06\x14\x01\x0e\x4d\xcb\xf7\x47\xeb\x3c\xd4\xb0\x49\xa4\xe2\x73\xa9\xc2\x3d\xec\x2f\xcd\xe6\x0a\x0c\x03\x1c\x45\x87\xd1\x70\x09\x9e\x8e\xa3\x5d\xd5\x8e\x2c\xe0\x68\x70\xd1\xa9\xd3\x45\xe7\xb5\x08\x1a\x61\x6b\x7a\x3f\x1a\xa0\x6b\xba\x17\xd5\x30\xf3\xd0\x71\xe6\x91\x73\x08\x0d\x7a\x1e\x39\xb5\xb5\x30\xca\x6c\x75\xc3\x68\x48\xb2\xd5\xd5\xd6\xc4\x72\xd3\xdd\x55\x27\x74\x3c\xd1\x12\x2c\x7e\x6e\x40\xd7\x79\xfc\x73\x7d\x68\xc0\x2d\x54\x6e\xda\x46\xc6\xa4\x76\x34\xb2\x07\x08\xbf\x60\xfa\x33\xa7\xb4\xae\x33\xf0\x9f\xf5\xe2\x1f\xae\x45\xb8\xe4\x1e\x22\x4c\xef\xf1\xf1\x07\x1e\x9d\x3e\xed\x4a\xd6\xfb\x58\x51\xf2\xa2\xdb\x2e\x26\xbc\x0b\xc0\x0d\xb8\xc3\xdd\x80\xaf\xa3\x47\x99\xc8\x78\x10\x3d\x40\x45\x06\x75\x39\xf5\x5d\xad\xe4\xab\xf4\xe9\x99\x0c\xd1\x99\x0a\x96\xed\x99\x53\x4b\xa7\xda\x52\x42\xf3\x66\xc0\x72\x1d\x83\xdf\x1e\xbe\x9e\x8f\xe0\x11\x51\x10\xca\x6f\xd2\x17\xad\x6a\xb6\xde\xa5\xfe\xc5\x5e\x5c\xef\x3b\xf3\x15\x7f\xc7\x60\x69\xf2\xab\xa2\x3c\x79\xab\xe6\xbf\x8e\x2e\xa1\x47\x4a\x74\x8b\xc6\x7e\x2e\x50\x3f\x40\xfd\xa8\x53\xfd\x78\x3d\xd2\x74\x59\x92\x62\x1a\xca\xc3\xe8\x21\x4f\x43\xe9\x20\x81\x45\xbd\x88\x9b\x2e\xb0\xe2\xbf\xb0\xc9\x57\x60\xdd\xe6\x7a\x11\xe7\x64\x21\xb5\xcd\xad\x67\xde\x2a\x19\x05\xde\xc3\xe0\x3d\x0c\xde\xc3\xe0\x3d\x0c\xde\xc3\xe0\x3d\x0c\xde\xc3\xfe\xde\xc3\x4d\xd7\x11\x92\x4f\x6d\xf4\xd5\x11\x76\x87\x78\x0f\x4b\x8a\x83\xc2\xcb\x98\xb7\x40\x6f\x00\xa7\xe1\x95\xa7\x8f\x80\xd3\x30\x38\x0d\xb7\xd9\x69\xb8\xfd\x6c\x2b\xd4\x8d\xb8\xe9\x1b\xc1\xe4\x20\x3a\x80\xf7\xa9\x09\x01\xb1\xef\x90\x7d\x88\xbd\x0b\x5b\xe0\x3d\xfc\x55\x15\xdd\xeb\xb2\xe9\xbc\xd3\xbf\xe4\x26\x35\x4d\xeb\xc6\x02\x91\x56\x05\x07\xff\x9a\x8a\x5f\xea\x42\x37\x93\xdf\xc9\x6e\xb5\x58\x5d\x8a\xd2\x71\xda\xc0\xac\x51\x68\x50\x52\xd2\x5d\x2c\x29\x69\x3e\xef\x5c\x4c\x88\xb6\xa7\x4c\xa7\x70\xc2\xb2\x47\xb3\x59\x41\x87\x9d\x0e\xf7\x48\x6e\x4b\x02\xd2\x6a\xf2\x82\x5e\x39\x1b\x3e\xed\xe3\x78\x17\x9b\xcc\xe2\x0b\xf8\xd9\x86\xc9\x4c\x81\x34\xa3\xe0\x79\x0d\x9e\xd7\xe0\x79\xbd\x8a\x3c\xaf\x21\xcd\x28\xa4\x19\x05\xcf\x6b\xf0\xbc\x06\xcf\x6b\xf0\xbc\xee\x08\xcf\x6b\x48\x02\x0a\xae\xdc\x90\x04\xb4\x4d\x49\x40\xbf\x30\x85\x76\x31\xb0\xc2\x4c\x32\x22\xf9\x67\xde\x4a\x3b\x46\x6a\xd1\x36\x0b\xd7\xe9\x2f\xa6\xe1\xe0\xa7\xa7\xf0\x2f\x6d\x43\x6f\x62\x57\x7a\x59\x45\x2a\x87\x67\x4f\x53\x63\x28\x6d\x88\xd9\x6c\xe2\x2a\xb9\x81\xfd\x9b\xe7\x14\x29\xbb\xa6\xc3\xe9\x08\xc4\x6b\x03\x35\x00\x6a\x00\xd4\x60\xf5\x50\x03\x88\xd7\x86\x78\x6d\xa0\x06\x40\x0d\x80\x1a\x00\x35\xe8\x08\x6a\x00\xf1\xda\x2b\xf1\x90\x0f\xf1\xda\xcd\x88\xd7\xae\xcd\x96\xaf\x71\x7f\x52\x37\x01\x5e\xd9\xe1\xbc\xaa\x00\xee\x87\xc3\xcd\xf4\x87\xf0\x60\x50\x36\x3b\xd6\x05\xee\x92\x52\xd6\x81\xf0\x98\xee\xdf\x59\x5f\x86\x29\x62\x22\xb4\xbb\x9c\x48\x6c\x67\xbf\xb5\x88\x49\xd4\x57\x9f\x21\xec\xab\x80\x5b\x21\x44\x5f\xd5\x19\x7d\xf5\xbe\x68\x6d\x29\x32\xc3\xa6\x62\x1d\xf5\x19\x42\x9b\xac\xdd\x19\x3b\xbc\xcd\xc6\xc8\xb0\xea\x44\x56\x99\xa4\x0b\x8b\x46\x8f\xbf\xae\x94\xc9\xb0\x9d\xdc\xf7\x5e\x0a\x64\xb0\xe6\x7d\xe4\x99\xc6\xae\x2b\x92\x67\x63\xe2\x9e\x66\x4b\x36\x80\xa3\x00\x47\x01\x8e\x02\x1c\x05\x38\x0a\x70\x14\xe0\x28\xc0\x51\x80\xa3\x00\x47\x01\x8e\x02\x1c\x05\x38\x0a\x70\xb4\xf3\xe0\x68\x6d\xe5\x41\x96\x1f\xe1\x1d\xf7\x3f\xf6\x6f\xc1\x9b\x99\xfc\xf5\xce\xf6\xa8\xb9\x10\xb5\xf1\x51\x7a\xdf\xdd\x86\xb6\xba\x35\x3e\x52\xd6\x42\xde\xca\x91\x5d\x96\x0e\x8b\xe1\xe0\x3f\xd8\x86\x7f\x7f\x8d\x97\x6a\x73\x3b\x53\x3e\x4b\xbc\xc5\xc6\xdc\xdb\xd8\x68\xc6\xb7\x7a\x45\x3d\x4a\x7e\xea\x70\x17\xb1\xc9\x39\x74\x92\xcd\xab\xe3\xe8\x28\x9d\x57\x43\xe8\x20\xda\x1f\x9a\xcb\xb0\xe4\x2d\xab\x62\xed\x21\x34\xfc\xca\xfd\xe1\xd3\x48\xc3\xbd\xa5\x79\x0d\x4b\x7a\x52\x9c\xdf\x10\x18\x0f\x30\x1e\x60\x3c\xc0\x78\x56\x0d\xe3\x81\xb0\x39\x08\x9b\x03\xc6\x03\x8c\x07\x18\x0f\x30\x9e\x8e\x60\x3c\x10\x36\x07\xd0\x08\xc2\xe6\xda\x14\x36\xf7\xee\x35\x48\x09\xcb\x95\x8f\xff\x24\x8a\xbf\x11\xf5\x4d\xa5\x77\x67\xc6\x28\x14\x6f\x75\xec\x4d\xe2\x4a\xc6\x28\xf8\xa5\xcd\x73\x8f\x57\x8d\xa3\x1e\xc3\x65\x0d\x0d\x97\x35\x34\x5c\x4d\x43\x93\x79\xf4\x00\x03\x1d\xe7\xd0\x14\x05\x1d\x27\xd0\x38\x4a\xd6\x01\xd0\xa4\xf7\xac\x06\x7b\xe0\x5f\xdc\x8e\x06\xd9\x47\x98\xa3\xc9\xa0\x44\x56\xa8\x80\xfa\xb2\x57\xac\x39\x51\xb5\xe0\x2f\xba\xf1\x97\xba\xd0\x3a\x7a\x23\xf9\x22\x1f\x8f\xf0\xe9\x2f\x25\x89\xca\xb9\xb2\xdc\x85\x53\x93\xd6\x5c\x43\xd2\x44\xf5\x7a\x3a\x1b\xd5\x4b\xf9\x0e\x4f\xd4\x3e\x4f\x19\xed\x29\xd2\xff\xa5\xb6\xb5\xf8\x56\xfa\xb8\x24\xf9\x1f\xb9\x26\xcd\xa4\x35\xd7\xe9\x50\xac\x1d\x59\xa5\x82\x13\xa9\x5d\x63\x89\xd4\x4e\x85\xe3\xb1\x1d\xb8\x9b\xe3\x31\x3a\x63\x38\x21\x9b\xb4\xe6\x80\x8a\x01\x15\x03\x2a\x06\x54\x0c\xa8\x18\x50\x31\xa0\x62\x40\xc5\x80\x8a\x01\x15\x03\x2a\xd6\x46\x2a\xb6\x17\x69\xb8\x57\x8d\x8b\x9c\xc5\xb7\xca\x39\x8b\x27\xad\xb9\xf2\x64\xc5\x37\x5e\xa9\x3e\x20\x75\x40\xea\x80\xd4\x55\x47\xea\xfe\x9f\xed\x68\x8a\x41\xa2\x94\x65\xd9\x69\x33\x57\x82\xe9\x58\xb6\xab\x8a\xdc\x88\x56\xe5\x11\xe4\xe8\xe7\xb6\xe3\x27\xd6\xa2\xdb\xe4\xd6\x44\x7c\xd6\x0b\xd5\x50\xa4\x29\xd2\x5c\x47\x70\x24\xf6\xb8\x31\xe9\x4d\x78\xac\x98\xc7\x94\x68\x67\x81\x2a\xd5\x41\x95\x1e\x09\xa7\x4a\xc3\x78\x88\x53\x25\x9f\xb9\xc9\x19\x13\xfd\x00\xe5\xd1\x83\x80\x9a\x00\x35\x01\x6a\x02\xd4\x04\xa8\x09\x50\x13\xa0\x26\x40\x4d\x80\x9a\x00\x35\x01\x6a\x6a\x2d\x6a\x1a\x40\x7b\xb1\xa6\xf6\x0a\x70\xb4\x59\x46\x4d\x54\x6f\x07\xd8\x04\xb0\x09\x60\xd3\xea\x81\x4d\xdf\xdd\xe3\x7a\x24\xb9\x65\xea\x02\x90\x52\xda\xc8\x67\xad\xeb\x64\x2f\x16\x5c\xe9\x13\x7b\xf0\x6f\xad\xf5\xea\xd7\xdd\x43\x67\x58\xf1\x79\x74\x5c\xdc\x15\xbf\x97\xfc\xcc\xca\xcc\x79\xb0\xc6\xfb\xbd\xc1\x19\x7d\x5e\x88\xa0\xe7\x23\xf8\xb9\x48\xec\x59\xf1\x2d\x9e\x8a\x48\x55\xa6\x8d\xc7\xa8\xa6\x31\x47\xfe\xa5\xa7\x0a\x9a\xa2\x4c\x90\xff\xba\x7f\x5f\xd0\x4d\x9a\xce\xca\x51\x52\xd9\x45\xa7\x60\xd8\x5e\x0d\x63\x5e\xcf\x31\x6b\x5e\x35\x94\x1e\xf1\x26\x3d\x64\xe1\xbb\x78\x4c\x53\xa6\xb3\x7a\x2e\xc7\x97\x32\xfd\x48\x7a\x96\xd5\xba\x4e\x0c\x69\xea\x5a\xfa\xc8\xa2\xa2\xd0\xcf\x44\xd0\xd3\x11\xfc\xa1\x48\xec\x83\xa2\xbb\x8f\x8b\xde\x0a\x96\x31\xe7\xf6\x9b\x3c\x42\x99\x60\x5d\x25\x0b\x24\xef\xb8\xdd\xe2\xfb\x20\xad\x4a\x49\x36\x30\xaf\x1e\xf8\xf5\x1a\x7a\x78\x13\x7b\x4c\x51\xd4\xe9\x5b\x03\x01\x13\x3a\xca\x58\xd6\x20\x3a\x40\x59\x56\x3f\xea\x43\x7b\x02\xc3\x06\xc9\x74\x61\x15\xef\xdd\x4f\xef\x02\xaa\x7b\xfc\x01\xd5\x4d\xb8\x2b\x63\x14\xd0\x95\x73\xe1\x78\x6a\x0f\xde\x2d\x97\xca\xe3\x25\xf5\xc4\x83\x8a\x5c\x9f\x62\xbf\xba\xce\x9b\xbb\x8a\x6d\xe4\xb3\x7a\xaa\xb4\x40\xb0\x34\x7d\xb7\xf1\x2b\x5a\x36\x83\x29\x11\x2c\xc9\xb6\x57\xdb\xb8\x42\x7e\x3d\xc8\xaf\x57\x67\x7e\xbd\x8f\x44\x96\xbb\xa8\xd1\x18\xcb\xa8\x77\x18\x0d\x7b\x19\xf5\x6a\x6e\x24\x8c\x69\x07\x8b\x8c\xfc\x62\xd5\x22\xa3\xa2\x98\x90\xe5\x49\xfc\xdd\x9b\x3c\x91\xb1\x85\x67\xb6\xd3\x65\x29\xc1\x0f\x4b\x2d\x13\x12\x17\xd0\x0c\x9a\x96\x85\x44\x3c\x89\x8e\xd7\x61\x46\x18\xa7\xdd\x3e\x4f\xf9\xbb\x03\x72\x23\x4c\x6e\x7c\x3b\x8a\xbe\x15\xc5\xaf\x47\x63\xaf\x89\x01\x7a\x29\x7a\x41\x56\x2f\xcd\x9c\xe2\x30\x15\x51\x99\x33\xe6\x2d\x76\x86\x74\x0f\x7a\x9e\x81\x83\x9f\xad\x69\x17\x25\xb9\x90\xb3\x72\x7d\x39\x23\xa3\xd3\x81\xe0\x1a\xa6\x2c\x3f\x18\xf2\x11\x9f\x80\xcf\x44\x73\x61\xc1\x48\x13\x09\x95\xbd\xce\x39\xb9\x6c\x05\xc9\x99\xd9\x5e\xae\x78\xd2\x03\x8a\x92\xb1\xc9\x86\x97\x37\x6c\xd3\x4a\x0b\x05\xda\xdb\xfb\x0a\xd7\xf3\x1e\x67\x58\x74\x48\x27\xe5\xa3\x8d\x4e\xee\x74\x5f\x88\x3f\x64\x5e\x52\x37\x4c\x72\x03\xed\x27\xab\x93\xed\xd3\x47\x15\xd3\x2e\x4c\xd3\x1e\xf8\x25\xe7\xf8\x72\x14\xbd\x1a\xc5\xaf\x44\x63\x2f\x8b\x61\x7e\x26\x3a\x2e\x59\x21\xf3\xd4\xd0\x29\x48\xd5\xb4\x6d\xe5\xf5\x8c\xce\x32\x46\x66\xcd\xd4\xf5\x5e\x36\x06\x8c\xcd\xb8\xef\xe2\x99\x31\x99\xc2\x33\xa8\x29\x92\x62\x98\x36\xf2\x46\x2e\x4d\x4e\xdf\x02\x7a\x1a\x8a\x65\xe7\x2f\xeb\xe4\x50\x4d\x87\xd5\x5e\x34\xfa\xe7\xf5\xac\x6b\x24\x50\xd9\xaf\xaa\x32\x6f\xe6\xf4\xac\xf9\xb8\x4b\x1b\xe7\x0c\xa2\xb0\x53\x88\xd1\xcf\x14\xf5\xb4\x77\x10\x64\x8d\xf7\x38\xde\x4d\x0c\xcb\x6b\xca\x84\x49\xa7\xb3\xd4\x71\xcb\x2e\x7f\x33\xca\xa8\x98\x85\x8c\x59\x05\xe8\x62\xb3\x0a\x97\x35\x75\x13\xeb\xcf\xb8\xfb\x22\x4e\x91\xa6\xf9\xde\x2e\xf4\x64\x17\x7e\x77\x57\xec\x0d\x71\x36\xfe\x1a\x39\x1b\xd3\x87\x92\x25\x75\xd9\xba\xa6\x64\x74\x7b\x8e\x9c\x21\xa5\xac\x9d\x62\x5d\x18\xf6\xbc\x65\x2f\x90\xb1\xf0\xed\xe9\xf9\x92\x87\x07\x77\x94\xce\x67\x77\x32\xb2\xcc\x1f\x64\x9e\xa6\x8d\x94\x99\xf6\xf8\x3b\x45\xb9\xac\x8e\xba\x3b\xba\xe4\x9c\xc9\x41\xa7\x0b\x6b\x35\x69\x18\x5d\xcc\xe7\x1e\x7f\x3c\xd5\xbd\xf8\x61\x9a\xc2\xb2\xb2\xd2\xcd\x54\x16\x0e\x3d\xec\x1d\x7a\x94\x3e\xfe\xe1\x8b\x27\x86\x33\xa2\xf4\x24\xf5\xd4\x55\xb2\x33\xe4\xd2\xe4\x2a\x3d\x9b\xb5\xae\xd1\x8b\x4a\x06\x8e\xb1\x75\x3e\xf5\x8b\x1b\x71\xdf\x60\x4e\xb4\x34\xa2\xf4\x9c\xb0\x6c\x43\x6a\x56\x49\xe9\x4e\x4a\x4f\x93\xb7\xe7\xe3\x43\x85\x2d\x6b\xcf\x61\xd2\xab\xac\xc1\x79\xd1\x86\xa6\x6e\xce\x97\xce\x1b\x79\x93\xff\x4c\xa4\xc1\x89\x64\x6a\xcf\x78\xbb\xfc\xe4\x34\x8a\xbf\x06\xb0\x1e\xdf\xcc\x86\xa9\xe1\xe7\x86\xe4\xcb\x1b\x3c\x25\x60\x37\xe5\x41\xd4\x66\xca\xce\xe5\xc1\x07\x88\xfb\xf2\x5e\x9d\xf5\xe6\x6a\x06\x77\x95\x36\xd4\x47\x1f\xbd\x87\x86\x4c\xdd\x2d\xff\xb8\x60\xd8\x19\x43\xfe\x75\xa7\xfc\x2b\x8d\xe7\x32\x32\x66\xaa\xaf\xf4\xba\xe4\x39\x34\x85\x26\x4b\x0e\x27\xc3\x68\xa8\x8e\xcf\x3c\x4d\x03\x83\x40\xe3\x08\xd1\x38\x3e\xb9\x06\xbd\xb0\x06\x3f\xbf\x26\xf6\x9c\x10\xdb\xef\x59\xb3\x7a\x4e\x2a\x25\x36\x16\x32\xce\xd4\x67\x80\xda\x01\xf3\x8c\x5b\x32\x73\x82\xb2\x4b\x9e\xc2\xf4\x37\x36\x71\x77\xd3\xdd\x87\xb9\x98\xe8\x59\x7a\x27\x51\xb3\xd8\xdd\xf4\x0a\xaa\xf2\x38\xca\xae\x49\xc7\xca\xd1\x69\xd9\xab\x9c\x25\x13\x9f\xff\x7b\xd6\x5d\x0e\xde\x1f\x77\x07\x1f\xa1\x92\xaf\x46\xd0\x2b\x11\xfc\x72\x24\xf6\x39\x81\x74\x3e\x16\x39\x61\xd9\x29\xaa\x8d\x65\x2c\x3a\xec\x96\xa2\xce\x93\x3f\xa9\xca\x68\xd1\x5b\x68\xca\xe9\x02\x57\x9c\x28\xca\xe1\x53\xb3\x4f\x4f\xd1\x17\xa7\x2e\x18\x59\x33\xc5\x37\x46\x4a\x7e\xac\x6b\x7c\x4c\x99\x8b\x42\xde\xb0\xf2\x59\x43\x53\xd8\x13\xe7\xb3\x7a\x46\x7c\x4b\x0a\x94\x7d\x07\x40\x3c\x5e\x5d\x4b\xbb\x55\x02\x80\x96\x7b\x24\xac\xdf\x43\x29\xcf\x3c\x94\x1a\x2c\xca\x27\x07\xd1\x01\xbc\x4f\x4d\x08\xdb\xc6\x1d\xb2\x3d\xc4\xbb\x69\x25\x18\x45\xf0\x5f\x45\xd1\x96\x22\xd2\xcb\xfc\x08\xf1\x97\xa3\xf8\xd5\x28\xda\xc8\x77\x34\xe6\x15\x18\x18\xed\x1b\xa3\xd1\xbe\x64\x0b\xa3\x17\x42\x9c\xaf\x7f\x9c\xef\x57\xb6\xa3\x64\xd9\x58\x0f\x54\xf6\xd9\xf4\x01\xec\xef\xdb\x8e\xff\xae\xab\xe8\xd3\x0c\xc4\x5e\xaa\xc6\x61\xd3\x9b\xba\x1d\xe1\xb5\xb9\xfd\x9a\xa7\xfa\xd0\xb7\x68\xaa\xfe\xd3\x34\x97\xcd\x40\xfe\xdd\x70\x5f\xce\xaa\x5d\x36\x67\xc3\x05\xe2\x5e\xac\x95\xf8\x62\x0e\xa0\x8a\x12\x12\x1c\x35\xc1\x51\x13\x1c\x35\xc1\x51\x13\x1c\x35\xc1\x51\x13\x1c\x35\xc1\x51\x13\x1c\x35\xc1\x51\x13\x1c\x35\x5b\xeb\xa8\xb9\x8a\xc0\x04\x78\x6b\x82\xb7\x26\x78\x6b\x56\xe7\xad\xf9\xb7\x51\x14\x63\x5c\x29\x67\xa5\x8d\xd2\x90\x60\x17\xe5\x91\xdf\xaa\x43\x79\xe7\xac\xb4\x01\x28\xaf\x22\xca\xfb\xea\x14\x3a\xc6\x86\xdc\x9e\xd3\x53\x9a\x7b\x41\x69\xea\xc4\x00\xa8\x67\x5b\x59\xc3\xc1\x1f\x98\xc2\x3f\xb9\x0d\xdd\x46\x1a\x18\x95\xef\xbf\xb4\x94\x88\xa9\x4c\x87\xb7\xb9\x6c\x2b\xad\x2e\x31\x63\x65\x8d\xf8\x0e\x72\xcd\x4c\xe9\xdd\xb2\x19\x91\x5c\xd6\xe1\x00\x0d\x8a\x6c\x02\x56\x02\xac\x04\x58\x69\xf5\x60\x25\x28\xb2\x09\x45\x36\x01\x2b\x01\x56\x02\xac\x04\x58\xa9\x23\xb0\x12\x14\xd9\x5c\x89\xa8\x05\x8a\x6c\x36\xa3\xc8\xe6\x83\xe8\x30\x03\x0e\x07\xd0\x3e\x0a\x1c\xfa\xd0\x1e\xb4\x3b\xd0\xdb\x8d\xc2\x81\xa5\x84\x46\x0e\xe2\x0d\xa9\x80\x58\x53\x32\xae\x40\x34\xc1\xbd\x3b\x48\xaf\x8a\x3c\xdf\xd4\xef\xaf\x0b\xe0\x11\xb7\xb0\x4d\x40\xd1\x19\x7a\xe8\x61\xff\xb7\x75\xf0\x81\xb1\x82\x11\x74\x08\x0d\x96\xf8\x17\xf7\xa0\x1d\x55\x0d\x3f\x38\x13\x43\xd8\x63\x9d\x61\x8f\x7f\x14\x41\x43\x6c\xd5\x27\x50\x3f\x5d\xf5\xbb\x51\xb5\xd3\x0e\x1d\x61\x01\x8f\x07\xd1\x7e\x2f\xe0\xb1\x86\xdb\x8f\xb2\xe0\x89\x41\x74\x40\x0a\x9e\xa8\xe1\xfe\xfa\x05\x4e\xde\xaa\x5e\xe0\x04\xc8\x93\x50\x39\x14\x7f\x4d\x09\x10\x38\x5b\x79\x78\x8c\x14\x6b\x64\xcd\x33\xe1\x93\x60\x3f\xf9\x08\x9f\x31\x71\x71\x53\xc5\x10\x20\x4b\x40\x96\x80\x2c\x01\x59\x02\xb2\x04\x64\x09\xc8\x12\x90\x25\x20\x4b\x40\x96\x80\x2c\x01\x59\x02\xb2\x04\x64\xd9\x79\xc8\x32\xd3\xe0\x74\x0e\x61\x44\x21\xee\x4f\x14\xb6\xe0\xcd\x4c\xfe\x7a\x27\xfa\x66\xe3\xcc\x1b\xd0\xed\x15\x7f\x6b\x1b\xc2\xfd\x7a\xde\xec\x5f\x4a\xf4\xb3\xe3\xe9\x82\x9e\x77\xf0\x17\xb6\xe1\x97\xd7\xa0\x9b\x53\x96\x6d\x5c\x5a\x4a\xc4\x7a\x2a\xbb\x87\x8d\xd1\x1b\xcf\xea\xf9\x78\x37\xb9\x70\xcc\xb2\x8d\x8b\x09\xf1\xc7\x13\x96\x3d\x9a\xcd\x0a\x42\xd2\x38\xbf\xbe\x26\x85\x58\x3e\x1c\x1c\x62\x39\xca\x66\xf6\x30\x1a\xa2\x33\x7b\x00\xed\x45\x5a\x20\x17\x23\x83\x47\xe6\xb1\x18\x88\x29\xd3\x29\x54\x0b\xde\xcf\x84\xcf\xd4\x5d\x78\x27\x9f\xa9\xaa\xca\xa7\xa4\x78\x14\x94\x57\x05\x80\x04\x00\x09\x00\xd2\x2a\x05\x48\x10\x4a\x09\xa1\x94\x00\x90\x00\x20\x01\x40\x02\x80\xd4\x11\x00\x09\xe2\x15\x81\x48\x41\xbc\x62\x9b\xe2\x15\x7f\xfa\xcd\x48\x71\x19\x47\x69\x84\xdc\x3b\xfb\x1d\x8a\x99\xf0\xdf\xdc\x89\xbf\x1b\xf5\x88\xc7\x4e\x3a\x95\xd8\x6f\xee\x38\x7a\xb3\x57\xc0\x8c\xf8\x56\x72\x1d\x03\x1e\xe2\x8f\x0c\x5c\x35\xd6\x09\x64\xf2\x2d\xc1\x54\xe2\x08\xa3\x12\x07\xd1\x7e\x4a\x25\x34\xd4\x8b\xe2\xa1\x54\x42\xf4\xb6\xca\xba\x07\xd5\x01\x09\x86\x21\x44\xdb\x7e\xde\x39\xaa\x8a\x62\x2f\xae\xf3\x46\x7a\xb7\x5b\xf4\x20\x7c\xb0\xef\xe6\x97\xb6\x60\xbc\x93\xc7\xd1\x51\x74\xb8\xc4\xf7\xaf\xa6\x71\x05\x07\x40\x70\x00\xac\xd3\x01\xf0\xe7\x23\xcd\x5a\xec\x28\xc9\xdc\x03\x47\xd0\x21\xcf\x3d\xb0\xe1\x02\x83\x56\x3d\xa8\x8f\x60\xfa\x8b\x0e\x9a\xed\xd8\x15\x18\x03\x65\xd9\x8e\xc3\x25\x47\x2c\xcf\x2a\x36\x37\x55\x6e\x40\xc6\xe3\x95\x27\xa3\x20\xe3\x31\x64\x3c\x6e\x73\xc6\xe3\xa6\x6b\x7e\xa1\x09\x8f\x1b\x29\xca\x27\x0f\xa2\xfd\x78\x40\xdd\x2b\x8c\xa4\xb7\xcb\x49\x85\xc4\x3d\xe5\x39\x85\x1a\x6e\xfa\xfc\xf5\xed\xe8\xa0\x7b\x2c\xa8\x98\x13\xd7\xb3\x8b\xba\x29\x71\xff\xa9\x1b\xff\x49\x97\xb7\x23\xfd\x6a\x35\xd9\x70\x85\x6d\xae\x23\x92\xe1\xde\x7b\xcd\x67\x43\x4c\x8b\x3e\x76\xba\x8d\xf6\x6a\xe3\xb3\xdd\x86\x3a\x1a\x34\xd2\x24\x1b\x9a\x53\x17\x6c\xb6\x60\xb3\x05\x9b\x2d\xd8\x6c\xc1\x66\x0b\x36\x5b\xb0\xd9\x82\xcd\x16\x6c\xb6\x60\xb3\x05\x9b\x6d\x6b\x6d\xb6\x15\x4f\xaa\x42\xaf\x87\xec\xb7\x60\x4d\x06\x6b\xf2\xea\xb1\x26\x7f\x23\x86\x0e\xb9\x55\x95\x4c\xdb\xc8\x98\x14\xd7\x17\xe7\x61\x25\x3f\x1b\xf6\x92\x59\x6e\x66\xfe\xf9\x18\xfe\x4f\x6b\x10\x2e\xb9\x95\xfa\xd8\x57\xb4\x38\x8f\x4e\x9f\x9e\x65\x2d\xc6\x77\x90\x0b\x47\x8b\x1b\xb8\x98\xf0\x2e\x68\x8a\xf9\xf9\x3a\x7a\x94\x01\x97\x07\xd1\x03\x14\xb8\x9c\x47\x67\xd1\x19\x5f\xe0\x42\xda\xe8\xd3\x33\x19\x32\x45\x0a\x96\xed\x31\x97\xd2\xf1\x62\x79\x70\x79\xaf\x97\x51\x64\x9b\xda\xa7\xdf\x1e\x4e\x67\x8e\xe0\x11\xc6\x64\xa4\xa7\x8a\x1a\x44\x7e\x9f\xb2\xb8\x52\xff\x67\xd7\xfb\x7e\xb7\x78\x98\xfd\x5a\xfa\x74\xbb\x44\xf9\xfe\x96\x7e\xbd\xa4\x8e\x2e\xa1\x47\x4a\xcc\x46\x8d\xfd\x7c\x60\x49\x02\x6b\x77\x9d\xd6\xee\xd7\x23\x4d\x97\x2d\x29\x66\xf5\x7e\x18\x3d\xe4\x59\xbd\x5b\x2e\xc0\xaa\x93\x50\xb2\xc8\xa9\x51\x5a\x85\x58\xe4\x93\x3f\xb3\xd1\x57\x80\xed\xab\xda\x9e\x2e\x49\xb2\x9d\xbc\x8e\x70\xcb\xe4\x18\x18\xd7\x57\x9e\x48\x04\xe3\x3a\x18\xd7\xdb\x6c\x5c\x6f\xbf\x5e\x1b\x6a\x7d\xaf\x6e\xdf\xa8\x5e\x91\x2d\xdb\x55\x2a\xd7\xf9\xf1\x2e\x6c\x81\x4d\xfe\xf7\xb7\xa2\xa3\x45\x25\x6b\x03\x4b\x5a\x18\x74\x3d\x38\x46\xa1\xf4\x84\xf5\x23\x5b\xf1\x0f\xa3\x5e\x6d\xfc\xca\xc7\xaa\x19\xd6\xcc\xac\x51\x88\x6f\x67\xc7\xaa\xe2\xc2\xf8\xde\xef\x4d\x39\x55\xd5\x59\xcc\xda\xeb\xd5\x72\x4f\x4d\xf5\x96\xb2\x96\x7a\x50\x74\x46\xfa\x2f\xeb\xbc\x91\x0f\x3d\x18\x49\x83\xdf\x23\x0e\x46\xad\x1c\xff\x24\xf5\x1a\x28\xd9\xf1\x6b\xfb\x00\xb0\xc9\xc3\xb9\xa7\xce\x73\xcf\x47\x22\xcb\x5e\xfd\x63\xec\x5c\x73\x18\x0d\x7b\xe7\x9a\x16\x8a\x10\xea\xe7\xdb\x60\x11\x92\xfc\xef\x1b\x3c\x11\x52\xfd\xd1\x44\x92\x25\x3b\xf2\x5e\x9d\xef\x56\x48\x12\x38\x99\xac\x3c\xa1\x05\x27\x13\x38\x99\xb4\xf9\x64\xd2\x7c\xdd\x30\xf4\xe4\xd1\x60\xd1\x5e\xf9\x9c\xe1\xdd\xb4\x12\x2c\xaa\xf8\x13\xdd\x68\x1f\x3f\xc9\x2c\x16\x2c\x27\xa5\x67\xcd\x5c\xc6\x73\x35\xa6\x9f\x82\xac\xdc\x6c\xde\x4a\xbb\x57\x18\xb6\x83\x7f\xa0\xe2\xbf\xeb\x42\x6f\x92\x6e\x22\x1b\xe1\x7b\xb8\x87\x31\x91\xca\x4b\x66\x7a\x51\xcf\x16\x39\x1b\x0b\x1f\xa4\x53\xa2\xd9\x69\x2b\x3d\x2a\x9a\x6d\x88\xcb\xb1\x16\x67\x1e\xb8\xa3\x5e\xd7\x2e\x26\x02\x1e\x38\x65\x3a\x85\x1b\x2d\xef\x53\x3b\x7c\x8a\xbb\xfd\x97\xe0\x46\x8c\x68\xc7\x58\x2e\xa8\xb9\xf0\x65\x78\x0c\x1f\xf1\x09\xb5\x94\x26\x11\x5f\x99\x01\x9f\x0b\xdc\x8d\xc1\xdd\x18\xdc\x8d\xc1\xdd\x18\xdc\x8d\xc1\xdd\x18\xdc\x8d\xc1\xdd\x18\xdc\x8d\xc1\xdd\x18\xdc\x8d\x21\x45\x14\x38\xf5\x82\x53\xef\xaa\x70\xea\xfd\x66\x0c\x9d\x62\xb4\xc6\x78\xac\x60\xe4\x1c\x7a\xd8\x5f\x4a\xcc\x19\x05\x3d\xd0\x04\x9d\xd6\x8d\x05\xa2\xfa\x94\x59\xa0\x7f\x2a\x86\x3f\xba\x06\x61\xaf\xa5\x4b\xbc\xa5\x90\xac\x52\xe3\xb4\xc1\x59\xa3\x10\xd7\xc8\x75\x13\xe2\xfe\x8b\xec\x76\xcf\x98\x21\xae\x6c\x8a\x55\x3a\x85\x4e\x31\x10\x32\x8a\x8e\x51\x10\x72\x08\x0d\xa2\x03\x81\xe4\xd1\x7b\x4f\x8d\xbf\xa7\x26\xfa\x17\x0a\x40\xde\x12\xce\x36\x0e\xe0\x7d\x9c\x67\x78\x4f\xe2\x38\xc3\x7b\x8e\x44\x3f\x68\x17\x2a\x39\xc3\x65\x8c\x02\x8a\xfd\xeb\x3a\xdf\x2f\x14\x9a\x8d\xca\xfb\x48\x09\x7e\x69\xbb\xbe\x53\xf2\x0c\x3a\x8d\x4e\x96\x58\x85\xea\xfd\x50\x60\x12\x02\x3b\x76\x9d\x76\xec\x4f\x45\x1a\x28\x2f\xce\x32\x8b\xf6\x09\x34\xee\x59\xb4\x57\x98\xf8\xa1\xbe\xb8\xef\xda\xe8\x2b\x7e\xaa\xcf\x6d\xe5\xc9\xa1\x7e\x6a\xad\x69\x87\x14\x02\xcb\xf7\xca\x13\x73\x60\xf9\x06\xcb\x77\x9b\x2d\xdf\xad\xd4\x3f\x43\x6d\xe0\xd5\xed\x10\x65\xf2\x3f\x7c\xcb\xa8\x1c\x5e\x2c\xae\x5b\x11\xc6\xf0\x3f\x8f\xa2\x37\xb3\xe3\x95\x93\xba\x6c\xa4\x17\xb3\x66\x2e\xe3\x86\x4b\xe2\xcf\x47\xf1\xef\x46\x11\xf2\x7e\x89\xc5\x32\x06\x11\x8c\xf3\x96\xbd\x20\x4e\xa9\xba\x42\x87\x34\x7e\x7b\xc6\x28\xcc\x8a\x4b\x47\xa7\x4f\x9f\x24\x7f\x6e\xdc\x9e\x56\xd6\xd0\x70\x59\x43\xc3\xd5\x34\x34\x69\xa2\x73\x6c\x16\x9f\x44\x13\x74\x16\x1f\x43\x47\xd0\x48\x1d\x1b\x97\xfb\x8e\x61\x73\x19\x7f\x67\x0a\x69\x7c\x94\x19\xfc\xf0\x22\x52\xd9\x41\x76\xc9\xca\x2e\x2e\x18\x7a\xa1\xa0\xa7\x2e\x2f\x18\xb9\x82\x83\x3f\x35\x85\x3f\xb1\x0d\xdd\xca\xaf\x17\x6a\x88\x56\xb9\xde\xd3\x45\xda\xce\xa8\x68\x27\xae\x92\xeb\x67\x59\x23\x5c\xfd\x28\xbd\xa6\xc3\xad\xff\x50\x64\x1b\x0c\xe0\x60\x00\x07\x03\xf8\xea\x31\x80\x43\x91\x6d\x28\xb2\x0d\x06\x70\x30\x80\x83\x01\x1c\x0c\xe0\x1d\x61\x00\x87\x22\xdb\x2b\xd1\x5e\x0d\x45\xb6\x9b\x51\x64\xbb\x36\x5f\x75\xcd\xe5\x01\x2e\x1f\x2b\x3d\x9c\x4f\x99\x4e\x38\x2a\x0b\x2b\x59\x9c\x0a\x27\x65\xc7\xf1\x51\x0e\xc6\x8a\x09\x05\x87\x63\xa5\xdd\x2a\x37\xab\xa8\x2f\xaf\x2f\xa7\x15\x5b\xd9\xce\xa0\xe8\xe5\x60\x62\x3b\xfb\xa9\x45\x68\x82\x91\x04\x9a\x41\xa0\xc4\x64\x51\xa1\x02\x7a\xe8\xc7\x01\x9b\x05\x98\x66\xeb\x34\xcd\xbe\x2f\x8a\xee\x67\x06\xd5\x49\x74\xca\x33\xa8\x56\xac\xc8\x1f\x3a\x1f\xd1\x0c\x69\x72\x00\x9f\x41\xa7\xd1\xba\xd1\x54\xca\xc8\x37\xa0\xcd\xc0\x12\x17\x53\x4c\xce\x4d\xa0\x31\x2a\xe7\x96\xf7\x98\x70\x51\x96\xb7\x5a\x25\xca\xe2\xdf\x51\xca\x45\xd9\x0e\xa6\xce\x2a\x29\x2b\x4b\x0e\xa7\x7c\xc7\x2b\x13\x6b\x1a\xbb\xac\x58\xac\x8d\x89\x7b\x9a\x2c\xe0\x00\x95\x02\x2a\x05\x54\x0a\xa8\x14\x50\x29\xa0\x52\x40\xa5\x80\x4a\x01\x95\x02\x2a\x05\x54\x0a\xa8\x14\x50\x29\xa0\xd2\xce\x43\xa5\x99\x9a\x10\x42\x05\x3f\x2c\xe6\x3d\x1d\x8a\x49\x5b\xc1\x0e\xae\xc4\xfd\x01\xc6\x16\xbc\x99\x09\x79\x8f\x1f\xa0\xc6\x7b\xf3\xfd\x6b\x37\x3a\xc1\xfc\xcc\x72\x46\xe1\x9a\x65\x5f\x95\xbc\xf9\x5c\x57\xb3\x8a\x05\x35\xcd\x5c\xc6\x36\x1c\xc7\x70\xf0\x4b\xdd\xf8\x8b\x5d\x08\x7b\xed\x08\x12\xe2\x54\x97\xf0\xe6\x34\x6b\xaa\x41\x09\x6e\xf6\xd0\x1b\xce\x89\xde\x94\xb9\xd2\xf3\xc7\x4d\x99\x4e\xa7\x3b\xb4\xb5\x25\x9d\xcd\x23\xe1\x73\x7f\x18\x0f\xf1\xb9\x5f\x36\x79\xf8\xf4\xe7\x63\xec\x33\xeb\xab\xc9\x96\x03\x99\x6c\x80\x4e\x01\x9d\x02\x3a\xb5\x7a\xe8\x14\x64\xb2\x81\x4c\x36\x40\xa7\x80\x4e\x01\x9d\x02\x3a\xd5\x11\x74\xea\x06\x8c\x50\x83\x5c\x39\x2b\x11\xa8\x41\xae\x9c\x66\xe4\xca\xf9\x6f\x71\x14\xef\xd7\xf3\x66\x85\xea\x2c\x79\x2b\xed\x26\xc5\xc1\xbf\x1c\xc7\x1f\x5e\x8b\x6e\x4e\x59\xb6\x71\x69\x29\x11\xbb\x83\x4e\xaa\xe2\xe3\xe4\xb4\x95\x8e\xdf\x49\xfe\x3e\x66\xd9\x86\x9c\xb4\x7f\xda\x4a\x37\xd8\x77\xe5\x85\x08\x7a\x3e\x82\x9f\x8b\xc4\x9e\x15\x03\xfe\x54\x64\x96\xa9\x23\x54\xa5\x79\x8c\xaa\x06\x73\xe4\x5f\x7a\xaa\xa0\x29\xca\x04\xf9\xaf\xfb\xf7\x05\xdd\xa4\xfe\x5b\x8e\x92\xca\x2e\x3a\x05\xc3\xee\xe3\x6f\x91\x72\xa3\xa3\xb3\xe6\x55\x43\xe9\x11\xaf\xd0\x43\x56\xb7\x4b\xa6\x34\x65\x3a\xab\xe7\x72\x7c\xbd\xd2\x2f\xa1\x67\xc9\x02\x49\x68\x89\x21\x4d\x5d\x4b\x1f\x29\x8f\x75\xf2\x99\x08\x7a\x3a\x82\x3f\x14\x89\x7d\x50\x74\xf7\x71\xd1\x5b\x01\x1f\xe6\xdc\x7e\x93\x47\x28\x13\xac\xab\x64\x15\xe4\x1d\xb7\x5b\x7c\xe3\xa2\x31\xde\x64\xc7\xa1\xea\x03\xfb\xe8\x35\xf4\xf0\x26\xf6\x98\x22\xbe\x3a\x83\x06\x19\x67\xda\x8b\x34\xca\x99\x76\xa1\x9d\x68\x7b\xa0\x8b\x16\x99\x07\x34\x1d\x83\x95\x5e\x6e\xf1\x9a\x89\x70\xda\xa4\x62\x85\xd3\x26\x55\xe5\x78\x89\x3c\xb8\xa8\x66\xcd\x8f\xac\xf3\x66\xe7\x56\x37\xfd\x4f\xf9\x04\x8d\xf1\x9f\x9a\x3f\x47\x87\xd1\x10\x3a\x58\xe2\x40\x5a\xe5\x90\x82\xaf\x28\xf8\x8a\xd6\xe9\x2b\xfa\xfe\x08\x3a\xcc\x7c\x45\x0f\xa0\x7d\x9e\xaf\xe8\xf2\x57\x73\xdd\xf2\xa1\xca\x02\x34\x8d\x11\x03\xf1\xef\xdd\xea\x89\x81\x8d\xdc\x0d\x53\xa7\x2b\x7f\x2b\xfb\x7f\xcd\x5f\xf8\x17\xd0\x0c\x9a\x96\x17\x7e\x3c\x89\x8e\xd7\x41\xec\xc7\x69\x7f\xcf\x53\xcc\xed\x80\x48\x08\x13\x09\xdf\x8e\xa2\x6f\x45\xf1\xeb\xd1\xd8\x6b\x62\x80\x5e\x8a\x5e\x90\x35\x3f\x33\xa7\x38\x4c\x7b\x53\xe6\x8c\x79\x8b\x1d\xd5\xdc\xf3\x94\x67\x47\xe0\x47\x58\xda\x45\x69\xc9\xe7\xac\x5c\x5f\xce\xc8\xe8\x74\x20\xb8\xf2\x27\x8b\x06\x46\x56\xc4\x27\xe0\x73\xcf\x5c\x58\x30\xd2\x44\xf8\x64\xaf\x73\x1c\x2d\x1b\x1b\x72\x66\xb6\x97\xeb\x84\xf4\xec\xa0\x64\x6c\xb2\x6d\xe5\x0d\xdb\xb4\xd2\x42\xb7\xf5\x76\xb0\xc2\xf5\xbc\x77\x9c\x5f\x74\x48\x27\xe5\x53\x87\x4e\xee\x74\x5f\x88\x3f\x64\x5e\x52\x12\x4c\x72\x03\xed\x27\xcb\x15\xe3\xd3\x47\x15\xd3\x2e\x4c\xd3\x1e\xf8\x19\x8f\xbf\x1c\x45\xaf\x46\xf1\x2b\xd1\xd8\xcb\x62\x98\x9f\x89\x8e\x4b\x66\xbb\x3c\x51\xf3\x0d\x01\x84\xa6\x6d\x2b\xaf\x67\xe8\x07\x98\xb6\xb2\x66\xea\x7a\x2f\x1b\x03\x86\x40\xdc\x77\xf1\xec\x7e\x4c\x4d\x19\xd4\x14\x49\x9d\x4b\x1b\x79\x23\x97\x26\x87\x5c\xc1\x16\x0d\xc5\xb2\xf3\x97\x75\x72\x76\xa5\xc3\x6a\x2f\x1a\xfd\xf3\x7a\xd6\x65\xf1\x2a\xfb\x55\x55\xe6\xcd\x9c\x9e\x35\x1f\x77\xa1\xde\x9c\x41\x74\x69\xca\x0a\xfa\x99\x0e\x9d\xf6\xce\x68\xac\xf1\x1e\xc7\xbb\x89\xd1\x6f\x4d\x99\x30\xe9\x74\x96\x3a\x6e\xd9\xe5\x6f\x46\x51\x10\x33\x44\x31\xf8\x4e\x17\x9b\x55\xb8\xac\xa9\x9b\x58\x7f\xc6\xdd\x17\x71\x8a\xf4\xc3\xf7\x76\xa1\x27\xbb\xf0\xbb\xbb\x62\x6f\x88\x63\xeb\xd7\xc8\xb1\x95\x3e\x94\x2c\xa9\xcb\xd6\x35\x25\xa3\xdb\x73\xe4\x78\x27\x39\x95\x8b\x75\x61\xd8\xf3\x96\xbd\x40\xc6\xc2\xb7\xa7\xe7\x4b\x1e\x1e\xdc\x51\x3a\x9f\xdd\xc9\x98\x67\x6f\x65\x92\x89\x92\x32\xd3\x1e\xe6\xa6\xc4\x94\xe5\x12\x72\x47\xd7\xa1\xb9\x5e\xe8\xaf\x2e\x13\xd5\xa4\x61\x74\x69\x9a\x7b\x32\xf1\x14\xee\xe2\x87\x69\x0a\x0b\x45\xa0\xfb\xa4\x2c\x1c\x7a\xd8\x3b\xf4\x28\x7d\xfc\xc3\x17\x4f\x0c\x67\x44\xe9\x49\xea\xa9\xab\x64\x7f\xc8\xa5\xc9\x55\x7a\x36\x6b\x5d\xa3\x17\x95\x0c\x1c\x43\xd8\x7c\xea\x17\x37\xe2\xbe\xc1\x9c\x68\x69\x44\xe9\x39\x61\xd9\x86\xd4\xac\x92\xd2\x9d\x94\x9e\x26\x6f\xcf\xc7\x87\x0a\x5b\xd6\x9e\xc3\xa4\x57\x59\x83\xf3\xa2\x0d\x4d\xdd\x9c\x2f\x9d\x37\xf2\xfe\xfd\x99\x48\x83\x1d\x1d\x6a\x0f\xf3\x58\xbe\xf3\x84\xe2\xbf\xd5\xaf\xc7\x37\xb3\x61\x6a\xd4\x6e\x9f\xfc\xf8\x06\x6f\xb7\x57\xcb\x92\xee\x95\x6b\xff\x6f\xa6\xe9\xa0\x9a\xaa\x02\x40\x36\xbd\x95\xa7\x5a\x40\x36\x3d\xc8\xa6\xd7\xe6\x6c\x7a\x4d\xe4\x33\x8d\x91\xc5\xa1\x39\xf8\x26\xf7\x22\x0d\xf7\xaa\x71\x61\x4f\xb8\x55\xce\x94\x37\x6d\xa5\x57\x44\x8e\xbc\x97\xba\xd1\x1e\x17\xab\x56\xf4\x9e\xa3\x56\x57\x07\x3f\xd1\x8d\x9f\xee\xf2\x36\xb1\x77\x54\xe7\x2f\x47\xfd\xb8\x1a\xe4\x2d\x77\xef\x35\xbf\x3d\x91\x3e\x01\x1c\xe4\x96\x51\xef\xed\x64\xf8\xb2\xda\x8e\xd5\xd2\x65\xc5\x3a\x50\x54\x6f\x11\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\xc0\x15\x0e\x5c\xe1\x1a\xe0\x0a\xf7\xb3\xdd\x28\x56\xc2\x6c\xac\xb4\x21\x5c\xdf\xfe\x49\xc5\xbf\x27\x21\x9a\x4f\xf0\x22\xfe\x32\x98\xc9\xb9\xa2\xc8\xcd\xad\x7f\xce\x4a\x1b\x0d\xe1\x33\xbd\x9e\xce\x41\xf5\x2a\xbe\x43\x11\xb5\xc5\x53\xa6\x7a\x8a\xf4\x57\xa9\x6d\x2d\x7e\xab\x4c\x77\xac\xb4\x01\x38\xa7\x96\xea\x21\xd7\x58\xf5\x90\x13\xe1\x28\xa7\x1b\x6f\x2b\x45\x39\x64\xb8\x81\xe4\x00\xc9\x01\x92\x03\x24\x07\x48\x0e\x90\x1c\x20\x39\x40\x72\x80\xe4\x00\xc9\x01\x92\xd3\x46\x92\x93\x40\xfd\xb8\x4f\xdd\x23\x48\xce\x26\xd9\x09\x81\x68\xec\xe5\x5e\x08\x80\x66\x00\xcd\x00\x9a\x69\x0f\x9a\xf9\xeb\x28\xba\x8b\x25\xa9\x72\x8f\xed\xb4\x15\x51\x75\xf2\x0f\xa3\xf8\x0f\xa2\xe8\x96\xa2\x1f\x2b\x16\x9e\x7c\x73\xc6\x28\x8c\xca\x57\x43\xed\x49\xa9\xf6\xe4\xf7\x54\x34\x20\x86\xdb\x72\x52\x7a\xd6\xcc\x65\xfa\x97\x06\x58\x36\x30\x7a\xb1\x95\x2b\xe8\xd9\xbc\x95\x76\x2f\x30\x6c\x07\xff\xba\x8a\x3f\xd5\x85\xb6\x48\xf7\x5c\xe2\xf7\xc4\x0e\x54\xae\x41\x79\x4a\x34\x39\x6d\xa5\x47\x45\x93\xf1\x23\xe4\xb6\x51\xaf\xbd\x8b\xac\xb9\x80\xcb\x4f\x58\xf6\x68\x36\x2b\x9c\x97\x1a\x57\x1b\xbb\x49\x90\x6b\x09\xbd\x8d\x7d\xd8\x0b\x68\x86\x7e\xd8\x29\x34\x89\x4e\x05\x3a\xf3\x49\xe3\xaa\xf1\x71\xd5\x02\x46\xa2\x21\x25\x40\x32\xe1\xb8\x6b\x1c\x27\x39\xee\x92\x3a\xc7\xb9\x57\x40\xd7\x24\x14\xc6\xde\x01\x78\x18\xf0\x30\xe0\x61\xc0\xc3\x80\x87\x01\x0f\x03\x1e\x06\x3c\x0c\x78\x18\xf0\x30\xe0\x61\x2d\xe6\x61\x00\xb7\x00\x6e\x01\xdc\x6a\x0f\xdc\xfa\x95\x3e\x94\x64\xb4\xc5\x78\xac\x60\xe4\x1c\x7a\xee\x77\x53\xaf\x07\x84\x8d\xa5\x8d\x7c\xd6\xba\x4e\x36\x40\xe1\x9f\xf4\x17\xbd\xf8\x3b\x6b\x11\xf6\xda\x10\xd9\xd7\xef\xf1\xc9\xd2\x35\x2e\x1a\x88\xef\x26\x3f\x4f\x88\xdb\xca\xd2\xa4\x7b\x97\x42\xfa\xae\x0e\x4f\xdf\x95\x46\xa7\x19\x51\x4a\xa2\xe3\x94\x28\xd1\xec\x53\x81\x44\xc9\x9b\x2b\xa2\xc8\xa2\xf7\xb1\x97\x9b\xd0\xeb\xad\xe1\xf8\xe8\x20\xde\xcf\xf1\x91\xd7\x13\x4e\x8f\xa4\x7e\x94\xa5\x8e\x8f\xfd\xbf\xeb\x7c\xe7\xb9\xe2\x9f\xef\x4b\x9a\xea\xbd\xfc\x8a\x76\xcc\x76\x0a\xf7\x4a\xc2\xf5\xeb\xfe\x38\x10\xac\x0f\xa9\xc1\xea\x4c\x0d\xf6\xeb\x11\x66\x4f\x48\x50\x7b\x82\x48\x0d\xd6\x0c\x49\xd1\x40\x69\xe4\x0a\x9d\xea\xa4\x4a\xb8\x0c\x29\x97\x3b\x21\x99\xc9\xe2\xcf\x6e\xf2\x15\x3a\x5b\x44\x76\x31\x49\xce\xec\x61\x7f\x6c\x87\x98\x81\xb4\x63\x90\x76\x0c\xd2\x8e\x41\xda\x31\x48\x3b\x06\x69\xc7\x20\xed\x98\x7f\xda\xb1\xea\x94\x88\x2a\x74\x86\x32\x3d\x23\xf9\xf7\x1b\x7c\xb5\x84\xdd\x21\x59\xc9\x24\xdd\x21\x4e\xf3\xe4\xb4\x58\x75\x80\x74\x65\x2b\x4f\x25\x81\x74\x65\x90\xae\xac\xcd\xe9\xca\x5a\xca\xa3\x9a\x07\x9c\xc2\x93\x9a\x0d\xa2\x03\x78\x9f\x9a\x10\xfe\xc4\x77\xc8\xfe\xc4\x5e\xd3\x2b\x22\xb7\xd9\xb3\x77\xa1\xd9\x5a\x79\xb5\x6d\x88\x05\x46\xd6\xba\x4d\x94\x21\xdb\x45\xd7\xfd\xd4\x33\x0c\xbf\x12\xc3\x9f\x5e\xe3\xbb\x7b\x1e\xa4\x00\x9b\x5e\xe5\x8e\xa9\xb7\x75\xce\x78\x4d\x8f\x89\xa6\xc7\x17\x17\x16\xae\xc7\x8f\x86\x90\xed\xe0\x5b\x67\xc9\xb3\x1a\x7b\x32\x9f\xbc\x84\xc6\xd9\x62\x20\xfa\x0f\x59\x0c\x07\xd0\x3e\x94\xa8\x65\x31\xd0\x5e\x2d\x97\xcb\x5e\x08\x5f\x26\x09\xdc\xcf\x16\x05\x7b\x60\x15\x8a\x50\xec\x27\xd6\xfb\x7e\xb9\x43\x2e\x92\xad\xfd\xe3\x8d\x86\xb3\xda\x96\x7e\xbf\xe4\x49\x34\x81\xc6\x4a\x14\x98\x7a\x3e\x20\x68\x2e\xc0\x6e\xeb\x64\xb7\x1f\x8f\xb0\x0d\x35\x41\x37\x54\xc1\x6e\x1b\x2c\x48\x1a\x23\xa7\xaa\x2c\xf8\x50\x9d\x38\x0a\xda\xb5\x03\x04\x54\xf2\x67\x37\xfa\x8a\xa3\x64\xd9\x31\xac\x76\xb9\x74\x2c\xec\x7c\xd6\x32\xa9\x04\x87\xb6\x95\x27\xfa\xe0\xd0\x06\x87\xb6\x36\x1f\xda\x5a\xa5\xa7\x36\x45\xf2\x87\x1f\xd5\x06\xd0\x5e\xac\xa9\xbd\xe2\xc4\xb5\x59\x3e\xaa\xd1\x56\x57\xc4\x29\xed\x8b\x2a\xba\xb3\x38\x9b\x91\x91\x4b\xe7\x2d\x33\x57\x70\xf0\x4b\x2a\xfe\xa4\x94\xca\x68\xb1\xca\x6c\xd3\xee\xfd\x0d\xca\x38\xbd\x4b\xca\x49\x24\xda\x9e\x32\x9d\xc2\x8d\x16\xc7\xd5\x8e\x64\x45\x67\xc2\x17\xcf\x2e\xbc\xb3\x2c\xad\xb4\x3b\xcc\xc5\x39\xdb\xab\x49\x64\x0d\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\x05\x51\x5a\x10\xa5\xb5\x1a\xa2\xb4\x3e\xae\xa2\x2d\x3e\xd9\xa1\xf1\x07\x54\xfc\x7e\x89\xa5\xe4\xab\x63\x29\x0d\x4b\x0c\xad\xc5\xb7\x94\xa4\x76\x86\x6a\x5d\xcb\xa8\xd6\x05\x29\x9e\x01\x96\x00\x2c\x01\x58\x02\xb0\x04\x60\x09\xc0\x12\x80\x25\x00\x4b\x00\x96\x00\x2c\x01\x58\x02\xb0\x04\x60\x09\xc0\x92\xaa\x61\xc9\x3f\x76\xa3\x83\x2c\x44\x80\xcf\x1b\x37\x53\xb3\x80\x27\x4b\x56\x76\x71\xc1\xd0\x0b\x05\x3d\x75\xb9\x28\x8d\xcd\x67\xba\xf1\x3f\x77\x21\xc4\xef\xbb\xb4\x94\x88\x7d\xba\x9a\x4a\x5b\x17\x69\x7b\xa3\xa2\xbd\x8e\xa8\xba\xc5\x6a\xaa\xcf\xb2\x57\xb9\x98\x28\xed\x23\x50\x9a\x3a\x8a\x70\x3d\x1a\x4e\x68\x46\xf0\x21\x4e\x68\x8a\x67\x1f\xa7\x35\xa5\x9f\x01\xc8\x0d\x90\x1b\x20\x37\x40\x6e\x80\xdc\x00\xb9\x01\x72\x03\xe4\x06\xc8\x0d\x90\x1b\x20\x37\x6d\x24\x37\x47\xd0\x08\x3e\xa4\x0e\x8a\x68\x8b\xbb\xe5\x08\x8d\x52\xed\x1d\x0a\x75\x01\xf8\x01\xf0\xd3\x29\xe0\xe7\x5f\xba\xd1\x04\x03\x3f\x29\xcb\xb2\xd3\x66\xae\xa8\x4e\x97\x9b\x24\x82\xfb\xcf\xf8\xa7\x8a\xa0\x09\xdc\x1c\xfc\x52\x37\xfe\x62\x17\xba\x4d\x6e\x46\x84\xf1\xbe\xa3\x3a\x27\x9b\x29\xd2\x52\x83\xbc\x6c\xf6\x70\x2f\x1b\xaf\x37\x65\x71\xbf\xf4\x71\xe0\x7d\xe3\xcf\x75\x1e\x09\xc7\x36\xc3\x78\x88\x63\x1b\x9f\xb9\xc3\xd9\x0d\x1d\x63\x9f\xa8\x3f\x88\x60\x02\xb4\x03\x68\x07\xd0\x0e\xa0\x1d\x40\x3b\x80\x76\x00\xed\x00\xda\x01\xb4\x03\x68\xa7\xf3\xd0\xce\x8d\x97\x48\x03\xe8\x0f\xd0\x1f\xa0\x3f\xd5\xd1\x9f\xdf\xe8\x46\xc3\x8c\xfe\xd8\x73\x7a\x4a\xf3\xad\xd5\x5e\xcc\x80\x6c\x2b\x6b\xcc\x99\xb9\xb4\x99\xcb\x38\xf8\x87\x2a\xfe\x87\x2e\xb4\x95\xdc\x5b\x54\x9b\x5d\x70\x9f\x6b\xd5\x71\x9f\x19\x2b\x6b\x24\x59\xa3\x0d\xa2\x3f\x87\xe9\x0d\x33\xa5\x1d\xe3\x08\x48\x7a\x1e\xa4\xaf\x69\x60\x30\x96\x19\xce\x8c\x4e\xe0\x71\xce\x8c\x02\x67\x1c\x27\x47\xd2\x47\x2a\xe7\x47\x80\x86\x00\x0d\x01\x1a\x02\x34\x04\x68\x08\xd0\x10\xa0\x21\x40\x43\x80\x86\x00\x0d\x01\x1a\x6a\x2d\x1a\x02\x70\x03\xe0\x06\xc0\x4d\x7b\xc0\xcd\x73\x5d\x48\x71\x93\xdb\xa4\xac\x85\xbc\x95\x23\x7b\x0d\x2d\xb7\x66\x88\xc8\xac\x27\xba\xf0\xdf\x44\xbd\x4c\x37\xaa\x4f\x55\xf1\x31\xf7\x5e\x56\xaa\x2d\xbe\x95\x5c\xc3\x52\xd3\x94\xfc\xd4\xe0\xda\x2a\x8f\xa2\x31\xc6\x30\x0e\xa3\x61\xca\x30\xf6\xa3\x01\xb4\x37\x30\x67\x35\x79\x07\x6d\x29\xa1\x95\x74\x6a\xb9\xa5\x55\xee\x0f\x07\x16\x1a\xee\x2d\xcd\x1e\x53\xda\x89\xa2\x70\xa4\xc3\x68\x18\x0f\xa9\x07\x05\x30\xbf\x4b\xf6\x85\x2c\xb9\xb3\xf9\xae\x90\xf8\x7b\x5b\xd1\x88\x3b\x51\x02\x4b\xfd\xb0\xf9\xf6\x8e\x45\xab\xa0\x7b\x25\x7e\x68\x0f\xf1\x27\xb6\xe2\x27\xd6\x78\x73\x28\xce\x0a\xfb\xd0\xdf\xfc\x8a\x30\xb0\x96\xee\x27\x2d\xc5\x7b\xbc\xb9\x24\xd7\x5a\x90\x2e\x69\xca\xcc\x7a\x18\x8d\xb2\x99\x35\x8c\x86\xe8\xcc\x1a\x40\x7b\x91\x16\x3a\xb3\x8a\x3a\xb6\xdc\x79\x75\x3e\x7c\x5e\xf5\xe2\x78\xe9\xbc\x2a\xee\x82\x3c\xab\x62\x5f\x5a\xe7\x7d\x83\x3e\x51\xa2\xa7\xaa\xcf\x10\xe7\x97\xb7\xfc\x4b\x24\xc7\x51\x12\x1d\x2f\xa9\x45\x51\xf3\xa7\x80\x0a\x14\x50\x7c\xa7\xce\xe2\x3b\xbf\x14\x69\x84\x28\x38\xc1\xea\xf7\x1c\x43\x47\xbc\xfa\x3d\xad\x15\x29\xb4\xec\x4e\xa3\x45\x4a\xf2\xcf\x36\x78\x22\xe5\x60\x79\x99\x9d\xaa\x64\xcb\xae\xbc\x94\xca\xae\x35\x92\x05\x6a\xe8\xac\x3c\x09\x06\x35\x74\xa0\x86\x4e\x9b\x6b\xe8\xb4\x44\x6b\x0c\x2b\x75\xd3\x70\x21\x3f\x39\x8c\x86\xf0\x41\x75\xbf\x38\x8d\x6c\x95\x4f\x23\x45\xf7\xad\x88\x1a\x3a\x3f\xb2\x06\x75\x33\x7f\x06\x3d\xbd\x60\x3a\x64\x1c\x6c\x23\x63\x52\x59\x2f\xb9\x34\xe0\x6f\x46\xf1\xd7\xa3\xe8\x76\xdf\x8b\x62\xb1\x0c\x2d\x4e\x3f\x6f\xd9\x0b\x82\x39\xe8\x0a\x1d\xf4\xb8\x92\x31\x0a\xa3\x7e\x77\x8d\x4e\x9f\x3e\x49\xae\x68\xdc\x46\x57\xd6\xd0\x70\x59\x43\xc3\xd5\x34\x34\x69\xa2\x73\x6c\x6a\x9f\x44\x13\x74\x6a\x13\x55\x66\xa4\x8e\xdd\xcc\x7d\xc7\xb0\x79\x8e\x9f\xd8\x8e\xc6\xf8\x67\xc8\xe7\xdd\x52\xb3\x03\x95\xa3\x88\xbc\x2a\xb3\xb6\xb1\x64\xd2\xc2\x51\xf8\xb7\xba\xf1\x57\xba\xd0\x46\xd2\x08\x77\x29\x19\x88\xfd\x87\xea\x5c\x4a\xbc\x42\x7e\x33\xbc\xb9\x06\x79\x96\xec\xa5\x37\x8c\xe6\xf3\xbc\x8e\xe0\x80\xa7\xf7\x94\x3f\x13\x82\x8b\x96\xe1\x4d\xf2\xb6\x70\x61\x38\x84\x0f\x72\x61\x48\xe6\x88\xc0\x33\xa5\x9f\xa1\xd4\x7f\x64\x00\xfc\x47\xc0\x7f\x04\xfc\x47\xc0\x7f\x04\xfc\x47\xc0\x7f\x04\xfc\x47\xc0\x7f\x04\xfc\x47\xc0\x7f\x04\xfc\x47\x20\xb4\x08\x3c\x54\xc0\x43\x05\x3c\x54\x1a\xe2\xa1\xf2\x52\x37\xba\xaf\xa4\xfc\x52\x09\xf8\x79\x27\xfe\xc9\x6e\xfc\xc7\x52\x29\xa6\x5f\xad\x26\x6f\xb0\xc0\x2d\x1d\x91\x30\xf8\xb6\x6b\x3e\x06\x30\x20\x3e\x75\xa4\x09\xae\xae\x3e\x36\x2f\xdf\xe4\x8e\x74\x11\xec\xf6\xb0\x38\xd0\x1d\xa0\x3b\x40\x77\x80\xee\x00\xdd\x01\xba\x03\x74\x07\xe8\x0e\xd0\x1d\xa0\x3b\x40\x77\x5a\x4b\x77\x0e\xa2\xfd\x78\x40\xdd\x2b\xe8\xce\xed\xb2\xe7\x89\x50\xe0\x21\x19\x30\x30\x1b\x60\x36\x9d\xc2\x6c\x7e\x74\x3b\x3a\x1c\x9e\x0e\x86\xe3\x9c\x54\x76\xd1\x29\x90\xb3\x46\xd6\x03\x3a\x9f\xef\xc6\x3f\xbe\x16\xdd\xe6\x97\x10\x26\xf6\xa9\x6a\xe8\xce\x18\x6b\x74\xc6\xca\x76\x06\xdf\xe9\x0e\xca\x23\x23\x75\x14\x70\x4f\x1d\xb8\x27\x1d\x8e\x7b\x46\xf1\xb1\x2a\x53\xc5\x48\x1f\x03\x6a\x43\x01\x07\x02\x0e\x04\x1c\x08\x38\x10\x70\x20\xe0\x40\xc0\x81\x80\x03\x01\x07\x02\x0e\xd4\x46\x0e\x34\x84\xfe\x7f\xf6\xde\x04\xbc\x92\xa3\xba\x17\xff\xfa\x4a\xb3\xd5\x18\x83\x1b\x27\x84\x61\x49\xbb\xbd\x68\x24\x4b\x57\xa3\x59\x3c\xb6\xc6\x9b\xb6\x99\xd1\xac\x42\x92\xc7\x18\x63\x4c\xeb\x76\x5d\xa9\x3d\x7d\xbb\x2f\xdd\x7d\xa5\x91\x79\x24\x60\x62\x42\x02\x0f\xc2\x12\x08\x13\x08\x4b\xf2\xc2\x9a\xc5\xc0\x83\x04\x02\xc9\xe3\xb1\x05\x1e\x49\x48\x48\x0c\x21\x26\x7f\x08\x64\x83\x7f\xfe\x09\xe4\x4f\xc0\x59\x78\x5f\x9d\x53\x55\x5d\x7d\x6f\xdf\x45\xeb\x8c\xc7\xf5\x7d\x7c\x78\x74\xbb\xba\xba\x96\x53\xa7\xce\xf9\x9d\xed\x06\x73\xbf\xbd\x57\xe2\x40\x4f\xc9\xe4\x43\x48\x05\x77\x8d\x04\x69\x24\x48\x23\x41\x17\x0b\x12\xf4\x0d\x9b\x3c\x23\xeb\xbd\xc3\xae\x0f\xaf\x44\x9d\x52\x89\x49\x04\xb1\xf9\x07\xb6\xf9\x71\xc5\x77\xe7\xfe\xce\xc2\xb2\x66\xb0\x97\x11\xec\x65\x9d\x42\xb2\x06\x14\x27\x9c\xec\x07\x74\x76\xdf\xce\xe0\x9a\xa9\xf6\x68\xcc\x80\x79\x7d\x7d\xdc\x69\x76\xad\x33\xc8\x8b\xae\xef\xa4\xe1\x19\x0d\xcf\x68\x78\x46\xc3\x33\x1a\x9e\xd1\xf0\x8c\x86\x67\x34\x3c\xa3\xe1\x19\x0d\xcf\x5c\x84\xf0\x8c\x06\x59\x34\xc8\xa2\x41\x96\x0b\x03\xb2\x3c\xfc\x54\x72\x5b\x26\x4d\x4e\xb3\xdc\x38\x71\xe2\x24\xb4\x5c\xf3\x63\x9a\xd4\xe7\x67\x7d\xdd\x53\xcd\x7f\x2f\x90\x6d\x3c\x45\xce\xae\xdd\x2d\xf3\xb3\xce\xf0\x7e\x66\x68\xd2\x77\x2d\x6b\x89\x69\x6c\xd2\x0c\x36\x4a\x83\x0d\xc9\xcd\xfa\x1c\x72\x1b\x62\x1b\x37\x92\x1b\x00\xdb\xd8\x43\x8a\xa4\xbf\x69\x96\x2d\x36\xab\xe2\xe2\x50\x51\x19\xd6\xa6\x66\x66\x55\x92\xca\xa8\x43\xc8\x64\x66\xfd\xf4\xf6\x74\xf5\xaf\x6f\x97\x99\x55\xdd\x80\xdd\xbc\xf1\x26\xef\xc1\xe8\x28\xb9\x9d\xdc\x5a\x97\xdd\x70\x85\x9b\xa0\x33\x1a\xea\x9c\xac\xab\xcc\xc9\xfa\x36\x63\xed\x2c\x60\x1c\x33\xb2\xde\x42\x0e\xa5\x19\x59\xd7\x9f\x91\xac\x37\xa7\x68\x93\xe0\x75\xf4\xaf\x76\xa6\x8c\x64\x7f\xc7\xf9\x58\x55\x8e\x72\x5d\x35\x4d\x4d\xb6\x29\xfc\x44\xe7\x62\xbd\xf4\x38\x97\xce\xc5\xaa\x73\xb1\x5e\xe0\x5c\xac\x9b\x20\x25\xae\x6f\x26\xd6\x0e\xb8\x7f\x6b\x3f\x08\xe5\xad\x4b\x22\x0f\xeb\x5f\xe6\x25\x00\x6d\x96\x07\xa2\xb9\x92\x63\xbe\xf6\x1a\xf3\x5f\xb3\x09\x40\x3b\x8c\x23\x50\x16\xf4\xa2\x88\x23\xb8\xb6\x2e\x6b\x68\xfe\xfd\xac\x4d\xd3\xab\x88\x24\x98\x6d\x7f\x52\x87\xcc\xc1\x8e\x4f\xaa\xae\x2f\xab\x4d\xd3\xda\x34\xad\x4d\xd3\xda\x34\xad\x4d\xd3\xda\x34\xad\x4d\xd3\xda\x34\xad\x4d\xd3\xda\x34\x7d\xd1\x45\x0e\x5c\x62\x1a\xb3\x36\x9b\x6b\xb3\xb9\x36\x9b\x77\x66\x36\xff\xfb\x6b\xc8\x11\x04\x97\xe8\xb9\x84\x06\x50\x2a\xa6\x33\x88\xc9\x75\x68\x85\x09\x67\x29\xc0\xf4\xe6\x6b\xcc\x17\x6f\x21\x66\xda\x91\x84\x99\x3a\x4a\x46\x3a\x0e\x1d\x5e\x2c\x20\x53\x2f\x7c\x6e\x42\xce\xa5\x01\x6a\x92\xc3\xd5\x40\xd3\x2a\x80\xa6\x67\xb7\x07\x9a\x0e\x98\xfb\x38\xd0\x94\x52\x14\x87\x9b\xe4\xda\x6b\xb0\x49\x83\x4d\x1a\x6c\xd2\x60\x93\x06\x9b\x34\xd8\xa4\xc1\x26\x0d\x36\x69\xb0\x49\x83\x4d\x1a\x6c\xba\xd0\x60\x53\xcb\x74\xa5\x52\x76\xd7\x50\x93\x86\x9a\x34\xd4\xf4\xf8\x81\x9a\x5e\x76\x35\xe9\x6b\x03\x35\x45\x14\x00\x8e\x98\x26\xb1\xf9\xb0\x6d\xfe\x79\x77\x2e\x9a\xb4\xd8\x59\x7a\x8c\x69\xec\x6c\xbd\x00\xa5\x62\xdf\xfe\x7c\x48\x28\xfd\x8e\xce\x90\xb1\x8e\x15\x8b\xef\x6a\x8f\x10\xdd\x60\xee\x6f\x86\x10\xa5\x9b\xa2\x21\x22\x0d\x11\x69\x88\x48\x43\x44\x1a\x22\xd2\x10\x91\x86\x88\x34\x44\xa4\x21\x22\x0d\x11\x69\x88\xe8\x42\x43\x44\x1a\x88\xd1\x40\x8c\x06\x62\x2e\x0c\x10\xf3\x5f\x57\x93\x03\x08\xc4\x54\x43\xdf\x2b\x2d\xd7\x81\x30\xd5\xd0\x8d\x69\xa9\x16\x79\xc9\x32\x3c\xf7\xd2\x92\x34\x9f\xbc\xda\x7c\x60\x0b\xb9\x1c\x5f\x93\x78\xcc\xef\x74\xe2\xdd\x33\x15\xba\x33\xbc\xd7\x29\x78\xfd\xa2\xf0\xf2\xc1\x92\x34\x38\x20\x0e\xe7\x34\x0c\x54\x23\x38\xab\xf0\xef\x79\x6e\x7b\xf4\xe6\x26\xf3\x60\x03\x34\xc3\xe1\x1c\x24\x30\x0e\xe5\x34\x6c\x88\x06\x70\x34\x80\xa3\x01\x1c\x0d\xe0\x68\x00\x47\x03\x38\x1a\xc0\xd1\x00\x8e\x06\x70\x34\x80\xa3\x01\x9c\x4d\x06\x70\x6e\x25\x37\x9b\xc3\xf6\x8d\xd2\x57\xe7\x19\xaa\x8f\x4f\x83\xc8\xae\x0b\xd2\x68\x00\x48\x03\x40\x17\x0b\x00\xf4\xc3\x3e\x72\xb2\x83\xd2\xc4\x4d\x02\xbf\xa2\xd0\xa7\x73\x5e\xe0\x7a\xc1\xbc\x04\x86\xde\xd9\x67\x9e\xef\x6a\x52\xab\xf8\x99\x40\x84\x59\xe5\x72\x3a\xf4\xe9\x28\xf6\xd1\xd7\xcf\x9e\xe7\x54\x05\x4e\x43\xad\x94\xd6\xeb\x9e\x43\xb5\x19\xd2\xb1\xb2\xb4\x59\xb0\x8e\x8b\x43\x45\x65\xa4\x02\x2a\xe9\xac\x38\x2f\xf7\x5a\x49\x5f\xcf\x24\xbc\x6a\x5b\xba\xb7\x4d\xa6\xd6\x5d\xdf\xda\xde\x64\x73\xae\x12\x59\x56\x9b\xef\xcf\x20\x6f\x72\x61\xb6\x68\xc5\x29\x56\x73\xb6\x42\x27\x2a\xd4\x29\x56\x37\x29\xc5\x6a\x0e\xf5\xad\x22\xc5\x6a\x5e\x2f\xed\x20\xd9\x75\x2d\x02\xde\x8c\x11\xb5\xc9\xbb\xda\xf7\xc1\x27\x35\xe1\x33\x57\xa2\xe8\x6f\x39\x19\xd6\x52\xc4\x5f\x2f\x10\x67\x99\x25\xd3\x64\x4a\xe5\x2c\x7d\xa3\xe4\xf6\x55\xe0\xe6\xe3\x30\x89\xd3\x80\x38\xc7\x9a\xd7\xb4\xe3\x35\xdf\x2c\x90\xaf\x17\xcc\xaf\x15\x76\x7d\x55\x2e\xd0\x43\x85\x59\x55\x4c\xf3\x02\x2b\x46\x51\xcb\x9a\xa3\xe5\x10\xb5\x26\xa1\xda\xa4\x90\x3e\xd7\x26\x61\x88\x0a\x2f\x09\xc2\x60\x20\xa0\xf3\x0e\x2c\x04\x97\xd4\x54\x9e\x83\x20\x87\xdc\x02\x4e\x98\x5e\xa5\x42\x5d\xc6\xd5\xfc\x65\x8e\x0c\xab\xb8\x7f\xe0\xf9\xfd\x5c\x80\x03\x41\xdf\x9a\x8f\xd8\xa5\x59\xa5\x91\x17\xba\x52\x10\x4d\xef\xcf\x64\xb9\x9a\x6a\xd6\xb5\x98\x0d\x52\x55\x11\x1c\xf6\xa6\x98\x10\xff\x48\x19\xd5\x7d\xd1\x45\x11\xc7\x89\xd9\x44\x73\xc6\x68\x9b\x30\x84\x29\x18\x41\x8e\x60\x3a\xfa\xc5\x02\xf9\xa3\x82\xf9\xf9\xc2\xae\xcf\xca\x65\x7e\x5b\x61\x5c\x31\xb9\x55\x99\x4c\x4e\x25\x36\x33\x15\x85\x55\x67\x1e\x36\x00\x75\xb6\x7e\x5c\x03\x44\x23\xc4\x5c\x52\x9b\x1d\xdb\xa5\xa1\xe2\xc1\xa2\x35\x83\x1b\x82\xab\x53\xa5\x81\xcb\xf4\x4d\x09\xf3\x51\x2b\x8c\xaa\x0b\x0e\x53\x23\x61\x59\xa3\x1a\x1d\x2c\x3b\xbe\x80\xc5\x6d\x7c\x6a\x5b\x65\x2f\x70\x7c\xef\x7e\x81\xaf\xcd\x51\x26\xf8\x82\xda\x3e\x88\x02\xaf\x9b\x2a\x54\xd8\x79\x4f\x9c\xbe\x84\x40\x74\xd1\x9a\xf0\x80\x9c\x95\x81\x87\x51\xe3\xcc\x00\x95\x41\x9b\x10\xe2\xe0\x70\xd8\xc2\x64\xa1\x68\x3f\x09\xc7\x33\x2e\x26\x12\xab\x82\xf3\xe8\xcb\xbb\xc9\x83\xdd\xe6\x03\xdd\xbb\x7e\x24\x75\xcc\x87\x99\x8e\x09\x1f\x65\x47\x6a\x21\x5c\xb2\xe6\x9d\x68\x8e\xe9\x62\xa5\xd0\xf7\x29\xb0\xc7\xf4\x5c\xd0\xa8\x1c\x46\x15\xb6\x16\xb9\x23\x3d\x5d\xf7\xf1\xe6\x03\x05\x7a\x16\xc4\x88\xe6\x32\x46\xa7\x2e\x2d\x79\x6e\x8a\x38\x03\x78\x89\xd9\x66\xc5\xea\x32\x7d\x8d\x43\x7b\x02\x9e\x2c\x2a\xcb\x28\x80\x2d\xa1\x46\x0c\x70\x82\x2c\xd5\x7d\xac\x68\x8d\x94\x4a\xb4\x8a\x17\xb0\xca\x1c\x7a\x70\x0e\x3d\xd6\x00\xdf\xf8\x2c\x61\xc4\x87\xac\x9e\x51\xa7\x74\x96\xdd\x43\x81\xcb\x5a\x39\xbe\x1f\x2e\x41\xa3\xba\x85\x43\x34\x99\x93\x7e\xb6\x13\x31\x83\x39\xd9\xd3\x21\xab\xe7\x70\x18\x51\xa5\x5b\xab\xe4\xc4\x25\x87\x5d\x1b\x62\x7d\x80\xd9\x62\x7f\x31\x72\xaf\x86\x0e\xcb\xb2\x8f\xa2\x7d\x45\xb5\x9e\x6e\x54\xc1\xe0\xa3\x06\x39\x81\x82\xc1\x04\x19\x03\xc1\x80\xdd\xef\x37\xad\xe2\xfa\xc0\x44\xe2\x64\x9a\xf5\xb6\xd7\x3c\x4e\x26\xc9\x76\x5c\x5b\xea\xae\xb5\xcf\x76\x32\x83\x95\x7f\x9b\xef\x30\xb7\xe1\x32\x91\xcd\x91\x2a\x46\xff\x7d\x67\x13\xb1\xa1\xaf\x21\x77\x7b\x73\x3d\x05\x13\x46\x6f\xbe\x2c\xa1\x13\xb7\x5f\x7a\x32\x8a\x4e\xdc\xae\x13\xb7\x5f\xf0\xc4\xed\x17\x09\x34\xb5\x56\x95\xb1\x5d\x7a\xf8\xd6\xb9\xe9\x94\x6e\x2f\x85\x80\x61\xf3\x4b\xfd\xe4\x96\x9c\x6c\xee\x2b\xc9\xe3\xde\x6f\x7e\x71\x4b\x5d\x1e\xf7\x3c\x8c\x55\xad\x66\x72\x4d\x5a\xa0\x6a\x13\x32\xa6\xa3\x7a\xfd\x3e\x83\xbc\xdb\x30\x7f\xdd\xd8\xf5\xab\xf2\x44\xbe\xcc\x50\x94\x05\x7a\x0e\x2c\xb4\x73\xec\x5f\x4e\x29\x29\x5a\xd6\x04\xfb\xaf\xf8\xbd\xe2\x78\xc0\xd8\x62\xab\xe4\xd7\xe2\x84\x46\xa9\x28\xca\x8f\xa0\xef\x9d\xa5\x56\x8f\x9c\x4a\x0f\xd3\xb1\x84\x76\x52\xb4\xa6\x7c\x27\x08\x38\xcf\x02\x0d\xc2\xf1\x51\x65\x19\xba\xb1\x68\x6f\x81\x4f\x66\x64\xfb\xb7\x19\xe4\x2d\x86\x79\xde\xd8\xf5\x46\x39\xdc\xfb\xe5\x68\xa5\x2e\x38\x27\xc6\xcd\x3e\x61\x4d\xe0\x50\xd9\xee\x56\x63\x31\x2c\x6e\x3f\x04\x46\x52\x72\x02\x45\xad\x5b\x5e\xc1\x08\xb7\xe2\x67\x32\x2c\xe1\x5e\x84\x92\xf6\x80\x58\xc8\x4e\xfe\x01\xb2\x8f\x0c\xb5\xab\xe5\x00\x1b\xbe\xa2\x82\x0e\x9d\x65\x81\xef\x20\xf3\xbb\x9a\x28\xbe\x1d\x44\xfd\xa5\xed\x75\x34\xdd\x04\x9a\x56\xc9\xba\x27\x53\xf6\x6b\xd3\x28\xfb\x08\x99\x20\x63\x75\xe2\xd8\x6a\x36\x42\xcb\x61\x1a\x97\x5e\x25\x2e\xfd\x1e\x63\x9d\x78\xc1\x24\x82\xd3\xa3\xe4\xf6\x14\x9c\xde\x20\xb6\xd2\x1a\x3b\xde\x18\xae\xd3\xf7\xfa\x27\xd5\xb1\x95\x14\x89\xce\x94\xfb\xc2\x5f\x37\x99\x91\x68\x04\x5a\x23\xd0\x1a\x81\xd6\x08\xb4\x46\xa0\x35\x02\xbd\x1a\x04\x7a\x33\x31\xe3\xf5\x85\xbb\x57\xa6\x6a\xac\xb0\xe0\x54\x7b\x5c\x7b\xf4\xff\xd9\x59\x27\x16\xb4\x43\x9a\x33\xe5\x9e\xab\x9b\x5a\x80\x4c\x23\xcc\x97\xa0\x0c\xa2\x11\x66\x8d\x30\x5f\x60\x84\x79\xb3\xe0\xa4\xb6\xf5\x41\x37\xa6\xea\xe0\xe3\xa9\xe4\x89\xf9\xad\xa7\xe6\x16\x09\xed\x1c\x56\x1e\x8c\x4b\x8e\x4f\xcd\xb7\x3c\xd5\x7c\x49\x57\xdd\xd5\xd8\x03\xe0\x32\x3c\x6f\x5d\x33\xbb\xb7\x13\x94\x79\x86\xf5\xb3\xce\x6e\xbc\x77\x35\x97\x5a\x6e\x45\x12\x3f\x48\x0e\x00\x89\x0f\x92\x01\x72\x7d\x87\x24\xce\x06\xda\x1e\xbb\x98\xa7\x09\xb9\xef\x54\x7b\x0a\xbe\xde\xec\xcd\xa1\x60\xf6\x8d\x46\xda\xdd\xf5\xb9\x7a\x30\xb4\x4f\x80\xa1\x1d\x6c\x43\x7f\x87\xa8\xe8\x06\xec\xc4\x28\xc4\x9e\xd7\xc9\x11\x2b\x5b\x71\x2d\x3a\x68\x50\x74\x95\xa0\xe8\xaf\x18\x6b\x3d\xee\x64\x0c\xe1\xd0\x9b\xc9\x70\x0a\x87\xae\xb8\x93\x35\x02\xa1\x9d\x31\x93\x96\xb0\xa7\xca\x5d\x46\xbf\x51\xaf\xeb\xec\x6b\xd0\x75\x3a\xe0\x2a\x7d\x1d\x29\x3d\xeb\xcc\x53\xb4\xe6\x73\xe9\xb1\x2f\xad\xf9\x68\xcd\xe7\x02\x6b\x3e\x1b\x2f\x2f\xb6\xd5\x79\xd6\x59\x62\x3c\xb6\x97\xec\x31\x8b\x76\xbf\xd4\x59\xae\xc8\x68\x3b\xec\xa5\x4b\x42\xcf\xf9\x47\x9b\x5c\xdd\xa0\xe7\xec\xe5\x99\xab\xd2\x92\x74\xe6\x27\x6c\xf3\x0f\xba\x33\xd7\xde\xde\x5d\xb5\xce\xf2\x86\xaf\x6f\x1d\xba\x62\xdf\xc0\x52\xf6\xe2\xdc\x2b\x3f\xa0\xf3\x85\x77\x96\x6d\x6a\xba\xfd\x59\x19\x34\x07\xea\xce\xc4\xde\x1c\x81\x28\xad\x1b\xd7\x51\x0e\x72\x9d\x67\x4a\xe7\x99\xd2\x79\xa6\x74\x9e\x29\x9d\x67\x4a\xe7\x99\xd2\x79\xa6\x74\x9e\x29\x9d\x67\x4a\xe7\x99\xd2\x79\xa6\xac\x4d\xcd\x33\xa5\xf3\x44\xe9\x3c\x51\x3a\x4f\xd4\x85\xc9\x13\xf5\x71\x9b\xfc\xc4\xa0\x53\xf5\x06\x17\x45\x6e\xf0\xd4\x9e\x6c\xbe\xdd\x36\xdf\xda\x4d\xb6\x95\xc2\x88\xde\xbb\x38\xd4\x29\xb8\x22\x81\x8e\x75\x02\x57\x7e\x02\x5e\x18\x0b\x23\xaa\xc4\xf9\x9e\xf0\x62\x5d\x95\x7f\xb5\x75\xd7\x8e\xb7\x07\x5b\x76\x9b\xd7\x71\x6c\xc5\xb6\x39\xb2\x22\xd7\x3e\x13\xfb\xa7\x01\x14\x0d\xa0\x68\x00\x45\x03\x28\x1a\x40\xd1\x00\x8a\x06\x50\x34\x80\xa2\x01\x14\x0d\xa0\x68\x00\x45\x03\x28\x1a\x40\xd1\x00\xca\xe3\x01\x40\x79\xcf\x35\x64\x7f\x33\x00\x25\xeb\x90\x4f\xa3\x45\xaf\x94\x16\x5a\xfb\x97\xab\xcd\x87\x15\x70\xe5\x37\x3b\xa9\xb0\x36\x83\x7d\x5c\x14\x75\xd5\x9e\x9e\x07\xcb\xb8\x7c\x84\x1a\x9a\x69\x84\x66\x26\xdb\xa3\x2e\xd7\x99\xd7\xd4\xa3\x2e\x7c\x41\x3b\xcd\xb7\x84\xb5\xd9\x34\x28\xa3\x41\x19\x0d\xca\x68\x50\x46\x83\x32\x1a\x94\xd1\xa0\x8c\x06\x65\x34\x28\xa3\x41\x19\x0d\xca\x6c\x2e\x28\xb3\x9f\xec\x35\xf7\xd8\x45\x19\x79\xf1\xe4\x4c\xb4\x06\x4a\xf5\x97\x42\xbc\x86\x06\x8b\x34\x58\xa4\xc1\xa2\xce\xc0\xa2\x57\x9d\x20\x7b\x32\xa1\x4d\xcd\xc0\x22\x97\x56\xfd\x70\x99\xdd\xc6\xb1\xf9\x95\xe3\xe6\xf7\x2d\xb2\x8d\xc7\x39\xed\xda\x8d\x12\x63\xc4\x0f\x93\x60\x86\x02\x22\x1a\x97\x6f\xf6\x3d\x93\xb5\xc4\xa0\xa4\x14\xa0\x49\x9f\x5f\xe4\x18\xcd\xa8\xc6\x30\x34\x86\xa1\x31\x0c\x8d\x61\x3c\x6e\x30\x8c\xd1\x8b\x06\xc3\x58\xf7\x91\xac\x1a\xc3\x18\xd5\x18\x86\xc6\x30\x34\x86\xa1\x31\x0c\x8d\x61\x6c\x3e\x86\x31\xaa\x55\xfb\x4b\x50\xb5\x1f\xbd\xd8\x55\xfb\xd1\xc7\xa0\x6a\x7f\xec\x1e\x32\x8a\x1e\x05\x87\xc8\x4d\xe0\x51\xb0\x8f\x0c\x91\xc1\x76\x69\x65\x8a\xa9\x3a\x7e\xc2\x8b\xdb\xfb\x10\x3c\x33\xdf\xf0\xbf\xcd\xdc\x82\x91\x1d\xab\x4d\x39\x93\x0e\x23\xe3\x68\x60\xff\xc3\xf6\x14\x78\x78\x32\xb2\x7b\xcb\x51\x31\x06\x7e\x07\x6c\x02\xca\xb0\xa6\xe4\x83\xca\x3a\xeb\xec\x5d\x3a\xf9\xe0\x2a\x93\x0f\x7e\xd3\x58\xdf\xa4\x52\x0a\x55\xae\x3e\x2b\xa1\xda\xc9\x38\x26\x8b\xbf\x85\x1c\x52\x92\xc5\xaf\xb4\x97\xf6\xbc\xa6\x1a\x6e\x00\xaf\xe9\xfb\xb8\x02\x72\xfe\x24\xcf\xc8\xaf\x94\x37\x08\xcb\x2a\xdf\xe9\x53\x8b\xb9\x8c\xc9\x56\x9b\xc0\x81\x34\x2c\xa9\x61\x49\x0d\x4b\x6a\x58\x52\xc3\x92\x1a\x96\xd4\xb0\xa4\x86\x25\x35\x2c\xa9\x61\x49\x0d\x4b\x6a\x58\x52\xc3\x92\x1a\x96\xbc\xf8\x60\xc9\xf9\xf5\xad\xe9\xd6\x16\xa0\x5c\x71\x61\x83\xbc\x14\xbe\x29\x40\x70\x5f\x5f\x3e\x08\xf1\x64\xf3\x0a\xe4\xe7\x29\x40\x40\x1e\x83\xbe\x93\xe6\x6b\x77\xe5\xd4\xf4\xd9\xdb\x81\x57\x98\x2c\xe9\x03\xdb\x62\x7e\xee\xa9\xe6\x2b\xba\xea\x72\x61\xf3\x9a\x3e\xd0\xa0\xb1\xee\x83\x82\xa5\xd4\xd5\xf4\xd9\x9b\x07\xa2\xe0\xf6\xaf\x73\x4d\x9f\xe7\x21\xea\xb5\x07\x50\x2f\x46\x9c\xfb\xc9\x5e\xb2\xa7\x93\x54\xec\x7b\x55\xd4\x6b\xf5\xb5\x38\xa0\xb0\xcf\x4c\x7b\x92\xdd\x63\x16\x3b\xc5\xb1\x30\x2f\xf5\xae\xaf\x6d\xaf\xdb\x8d\xb4\xba\x4f\xfb\x0d\x69\xac\xee\xb3\x69\x7b\x32\x7a\x98\x8c\x93\xd1\x3a\x80\x7d\x15\x9b\xa2\x51\x76\x8d\xb2\xaf\x12\x65\x7f\x97\xb1\x3e\x6c\xe1\x28\x22\xea\x23\xe4\xb6\x14\x51\xdf\x6c\x06\x03\xc5\x7e\x36\x82\xc1\x8c\x7e\x67\x67\x1d\x83\xc9\xa9\xf8\xd3\x9e\xd3\xd4\x57\xfc\xd9\x14\x3e\xa3\x2b\xfe\x5c\x7a\xdc\x4c\x57\xfc\xd1\x15\x7f\x2e\x70\xc5\x9f\xe7\x35\x37\xce\xae\xc7\x7d\xd2\x71\xd9\x9f\x8d\x60\xf7\xc7\x0e\x92\x03\xe6\x3e\x7b\x48\xea\x36\x3f\xae\x46\x93\xa5\x6f\x5e\x0a\x01\x65\xe6\xcf\xee\x24\x07\xb8\x52\xc4\xb7\x10\x0e\x0b\x6c\x90\x17\x0e\x2e\x0e\x0d\xc6\xd4\x2f\xc7\x35\x98\x48\x54\xf3\x69\x1c\xd1\x45\x8f\x2e\xc5\xe6\x17\x88\xfd\xfb\x5b\xc8\x93\x32\xaf\x81\x39\x59\xba\xae\xcc\x50\xbf\x3c\x83\x6f\x4e\xb3\x37\xa7\xe1\xcd\xbe\xeb\xb9\x1b\x8b\xfa\xe2\x99\xa1\xfc\xc6\xeb\x2c\x70\x9f\x21\xb3\x64\xba\xee\xaa\x1a\x25\xb7\x37\x27\xcf\xcc\x9a\x30\xcd\x3c\x77\x94\xc7\x7e\xb5\x40\x66\x90\xec\x4f\x90\x63\x40\xf6\xe3\x64\x1d\xfa\x25\xcf\x46\xb1\xea\x59\xe4\x74\x2a\x56\xad\x4f\xcf\x77\xa1\xf7\xc2\x34\x99\x52\xbc\x17\xd6\xa7\xeb\x76\x12\xdc\x7d\xed\xcf\xec\x11\x73\x42\x9c\xd9\x1c\xaa\x94\xd9\x5a\x72\x3f\x9f\x49\xde\xd2\xc6\xaf\xe2\x98\x96\x35\x5a\xcb\x1a\xc7\xb4\xe6\xd4\x44\x73\x5a\x77\x4e\xfc\x81\x93\xe4\x10\x72\x62\x7a\x2e\xa1\x41\x0c\xc7\xaf\x4d\xe1\x69\x35\x74\xf1\x7b\x27\xcc\x77\x5c\x45\xcc\xf4\x65\x59\x9f\xb4\xf3\x28\xc6\x5e\xd6\x72\x42\xf6\xd0\x50\x99\x54\x07\x34\x6a\xcf\x21\xed\x39\xa4\x3d\x87\xb4\xe7\x90\xf6\x1c\xd2\x9e\x43\xda\x73\x48\x7b\x0e\x69\xcf\x21\xed\x39\xa4\x3d\x87\xb4\xe7\x90\xf6\x1c\xd2\x9e\x43\xab\xf7\x1c\x5a\x20\x27\x11\x3e\x3c\x4c\xc6\x01\x3e\xbc\x95\xdc\x4c\x86\x9b\x22\x71\xa9\x8e\x2f\xab\xe5\xaf\x73\x6c\xe3\x5d\xed\x31\xba\x1b\xcc\xfd\x0d\x65\xf3\x39\x68\x97\x8e\xaf\x11\x6e\xb7\x3f\xb4\x23\x17\xa4\xc8\x8d\x78\xe4\x50\xf1\xe6\x22\x12\x08\x20\x9c\x20\xc7\xc8\xd1\x3a\xa8\xf8\x46\x72\xc3\xea\xf6\x44\xdb\x34\xb5\x87\xc6\x2a\x71\xc6\x07\x0b\xe4\x14\x5a\x01\x8e\x90\x89\xd4\x0a\x30\x4c\x56\x4d\x8c\xe4\x34\x62\xff\x47\xc9\x61\x05\xfb\x5f\x4b\x87\x4d\x6d\x81\x93\xc8\xd5\x46\xc9\xed\xc0\xd5\xd6\xf0\x8d\x4e\x03\x25\x3b\x63\x5c\x1d\xf0\xa9\x06\xde\xd6\xf7\xd7\x56\x2e\xe3\x6a\x1b\x3e\x79\x00\x1b\x34\x30\x31\x1d\x49\xa9\xf1\x50\x8d\x87\x6a\x3c\x54\xe3\xa1\x1a\x0f\xd5\x78\xa8\xc6\x43\x35\x1e\xaa\xf1\x50\x8d\x87\x6a\x3c\x54\xe3\xa1\x1a\x0f\x7d\x9c\xe3\xa1\x9b\x1d\x49\xb9\x82\xc8\xc7\x0e\x11\x86\xf6\x78\x42\x23\x06\xf1\x58\xf4\x1f\xfe\xe2\x49\x72\x4b\x43\x50\x65\x53\x7f\x35\x76\x01\x45\x6c\x2d\x23\xa6\x0d\xc1\xac\xcd\x57\x9f\x34\xdf\x73\x55\x26\xbe\x66\x68\xd7\x9e\xd6\x1e\x6b\x63\xb2\x9b\x69\xde\x4d\xdf\xf5\x69\xfe\xfd\x3a\x84\xb8\xb1\xb1\xf6\x5d\xd3\x58\x8d\xc6\x6a\x34\x56\xa3\xb1\x1a\x8d\xd5\x68\xac\x46\x63\x35\x1a\xab\xd1\x58\x8d\xc6\x6a\x34\x56\xa3\xb1\x1a\x8d\xd5\x68\xac\x66\xa5\x58\xcd\x7d\xe8\x4f\xb2\x07\xfc\x49\x0a\xa7\x8f\x9b\xb7\x93\x5b\xc9\xcd\x9d\x44\x7c\x0f\x15\x1b\x75\xf3\x75\xf1\x5e\xbb\xbb\x3d\x44\x73\xa3\x79\x43\x33\x44\x46\x09\x13\x6f\x1c\x1f\xb1\x3f\xb9\xa3\x0e\xac\x78\x9a\xf4\x5c\xcb\xc1\x25\x06\xd4\x9c\xfd\x9b\x87\x4c\x20\x90\xb0\xc2\xcc\x1c\xed\xf6\x46\x7b\xb1\x69\x2f\xb6\x55\x7a\xb1\xbd\xa2\xd0\xdc\x49\xec\x38\xb2\x8f\x71\x32\x0a\xec\xe3\x66\xb2\x06\x12\x25\x53\xe8\x2b\x37\x49\x8e\xa4\xbe\x72\x6b\xeb\xf1\x59\xe8\x2d\x77\x8c\x1c\x55\xbc\xe5\xd6\xd4\x65\xa7\xbe\x6c\x9d\xb1\xb1\x8e\xb8\x56\xa3\x37\xdb\xb7\xac\x3a\x36\xd6\x93\xeb\xc7\x96\xc3\xd2\x0e\xaa\xe5\x00\x9a\x7a\xb2\x6d\x38\x73\xd3\x28\xa9\x46\x49\x35\x4a\xaa\x51\x52\x8d\x92\x6a\x94\x54\xa3\xa4\x1a\x25\xd5\x28\xa9\x46\x49\x35\x4a\xaa\x51\x52\x8d\x92\x6a\x94\xf4\xe2\x43\x49\x2f\x66\x8f\xb6\x8d\xc4\x19\x1e\x8b\x3e\x6d\xaf\xba\x9a\xf4\xe7\x14\x0a\x80\x4d\xcd\x75\x61\x7b\xc4\x36\xbf\xda\x5d\x97\x22\xfa\xa7\xf8\x3d\x1d\xb8\xde\xa2\xe7\xd6\x1c\x5f\xa5\x4b\x47\xca\xc4\x8d\x6b\x58\xb4\x5c\x5a\x8d\x68\x89\x71\xe0\x61\x29\x35\xf5\x40\x77\x3d\x29\x24\x90\xd1\xf1\xc2\x2a\xe5\xc7\xcd\x0b\xe2\x84\x3a\x6e\xb1\xef\x86\xa5\xba\x6c\xd3\xf9\x58\xfb\xe1\x30\x1a\xf1\x7d\x09\xdb\xac\x5f\xe6\xe9\x8d\xf1\x8d\x3b\x76\xb6\x39\x8e\x38\x85\x07\x6c\x92\x1c\x81\x03\x06\xd5\x6b\x57\x71\xc0\x80\x91\x4c\x2c\x2a\x31\xa7\x57\xe7\x9f\xa5\xcb\x4c\x02\x03\x5b\x89\xcd\x61\x35\x87\x68\x2f\x39\xa6\xb1\x2e\x8d\x75\x69\xac\x4b\x63\x5d\x8f\x1b\xac\xeb\xd8\x45\x83\x75\xad\xfb\x48\x56\x8d\x75\x1d\xd3\x58\x97\xc6\xba\x34\xd6\xa5\xb1\x2e\x8d\x75\x6d\x3e\xd6\xb5\xee\x5a\xe6\x31\x0d\x9e\x5d\x82\xe0\xd9\xb1\x8b\x1d\x3c\x3b\xf6\x18\x04\xcf\xcc\x97\x77\x11\x1b\x01\x99\x12\x8d\x78\x2f\x34\x4e\x6b\x94\x60\xcc\xa1\xf9\xf5\x82\xf9\xb5\x02\xb9\x52\x6d\x23\xbd\x5b\x9e\x32\x4f\x93\xec\x75\x87\xb3\xe9\xb3\xe7\x69\x32\xa6\xbc\xc1\x5d\x5a\x46\xa6\x26\x85\x92\xb5\x8e\xd5\xb8\x1a\x3a\x1a\x6e\xe8\x68\xb8\x93\x8e\x8e\x55\xc9\x1d\x88\x76\x9c\x22\x27\x00\xed\x80\x52\x82\xab\x40\x3b\x94\x79\x76\xe2\x7a\x69\x7e\xcd\x26\x56\x06\x1b\xe3\xb0\x58\x9c\x38\x09\x2d\xd7\xfc\x98\x26\xb1\xf9\xbb\xb6\xf9\xe1\x6e\xb2\x8d\xe3\x61\xbb\x96\x3a\x83\xc2\x66\x78\x17\x33\x34\x59\x27\x0c\xac\x4f\xc1\xc0\x94\xde\x1f\x9b\xb8\xd7\xba\xc3\x5b\x6d\x31\xe4\xd3\xed\x21\xad\x7e\xb3\xaf\x11\xd2\x52\x96\x3a\x5b\x8d\xa5\x13\x20\x4d\x63\x5d\x1a\xeb\xd2\x58\x97\xc6\xba\x34\xd6\xa5\xb1\x2e\x8d\x75\x69\xac\x4b\x63\x5d\x1a\xeb\xd2\x58\x97\xc6\xba\x34\xd6\xa5\xb1\xae\xc7\x03\xd6\xf5\x87\x57\x93\xd1\xf6\x58\x17\xf7\x45\x52\x5a\x78\xf3\x8c\x8a\x05\xb7\x34\x1f\xb8\xda\x7c\xf1\x96\x26\x58\xd8\x83\x46\x87\xbe\x49\xe9\xcb\x33\xd8\xfd\xb4\x88\x9c\x5c\x17\x78\xe6\x00\xbc\x90\x03\xbe\x35\xfd\xf0\x09\x2f\xbe\xd8\x2b\x4f\x5e\x10\xa4\xa6\x23\x0f\xa5\x17\xb4\x87\x73\x4e\x99\x27\x38\x9c\x93\x43\x7c\xc2\x61\xa9\xd9\xe6\xe4\x38\xff\x69\x2c\x47\x63\x39\x1a\xcb\xd1\x58\x8e\xc6\x72\x34\x96\xa3\xb1\x1c\x8d\xe5\x68\x2c\x47\x63\x39\x1a\xcb\xd1\x58\x8e\xc6\x72\x34\x96\xf3\x38\xc0\x72\xfe\xea\x24\x39\x84\x58\x4e\x34\xe7\x94\x8a\x42\x6f\x87\xae\xea\x11\x9d\x92\x5f\x8b\x13\xa6\x32\xf8\x74\xce\x0b\x5c\x2f\x98\x8f\xcd\x37\x9f\x34\xff\xf8\x2a\xf2\x54\xf6\xf2\x88\xfa\x6e\xc7\x79\xd2\xb1\xcf\xe9\xd0\xa7\xa3\xd8\x67\x5f\x91\xbd\x31\x5d\xdf\xa1\xc0\x5d\x1a\xda\x5f\xe4\x60\x8b\x4e\x02\xa4\x01\x06\x0d\x30\x68\x80\xe1\xf1\x03\x30\xe8\x24\x40\x3a\x09\x90\x06\x18\x34\xc0\xa0\x01\x06\x0d\x30\x5c\x14\x00\x83\x4e\x02\x74\x29\xe2\x01\x3a\x09\xd0\x45\x90\x2a\x1d\x40\x03\x99\x46\xb8\x41\x37\x5f\x97\x54\xe9\xd5\xf6\x4e\x01\x27\xcd\xe3\xcd\x52\xa5\x37\x85\x35\x84\xaf\x40\xc3\xa0\x89\xfd\x0f\x3b\x5a\x21\x1a\x4a\x32\xf5\x46\xf0\x62\x0f\x3e\xbc\x00\xf0\xc5\xea\xf2\xa9\xb7\xd9\x40\x9d\x4f\x5d\xe7\x53\x5f\x7d\x3e\xf5\x15\xa5\x4d\x6f\x43\x89\xab\x48\x9b\xde\xae\xc7\x55\xa4\x4d\x6f\xd7\xe5\xea\x79\x1d\xe6\x53\xef\x8c\xd7\xad\x9e\xb5\x35\x26\x59\xff\xf9\x96\xe8\x6d\x93\x8c\xeb\x8d\x7c\x6f\x18\x1b\x36\xe5\x7b\xf2\xfd\x0d\xe7\x80\x1a\x6f\xd5\x78\xab\xc6\x5b\x35\xde\xaa\xf1\x56\x8d\xb7\x6a\xbc\x55\xe3\xad\x1a\x6f\xd5\x78\xab\xc6\x5b\x35\xde\xaa\xf1\x56\x8d\xb7\x5e\x7c\x78\xeb\x66\x27\x5d\xdf\x74\x80\x61\x25\x69\xde\xd7\x3f\x4f\xfa\x03\x5d\x22\x17\x54\x5c\x5a\xa0\x6e\xcd\x67\x62\x63\x7d\x52\xae\x47\x0a\xe6\x5f\x16\x88\x99\xb6\x68\x9f\x92\xcb\x9a\xa7\xc9\x8c\x6c\xaf\x13\x72\xb5\x4c\xc8\xf5\x8f\x05\xf2\x13\x7c\x13\x90\x37\xa6\x3b\x30\x68\x7e\xa1\x60\x7e\xae\x40\x08\x7f\x72\xef\x62\x8b\x45\xff\x09\xb6\xe8\xd8\xee\x8c\x5e\xec\x26\x8b\xfd\x8e\x93\xe4\x36\x1e\x9c\x1b\x86\x91\xeb\x05\xb9\xae\x9c\xb2\x4a\x41\x3c\xf8\x42\xf9\xef\x17\x0d\xb2\xab\x81\xc6\xe6\xd7\x4e\x98\x6f\xb9\x8a\x5c\xa9\x76\x20\x8f\xc4\xd5\xad\xfd\x39\x4f\xb0\x1e\xfa\xae\x63\x8d\xc6\x94\xd7\x1b\x0a\xcb\x42\x3b\xed\xba\xa9\xa1\x44\x0d\x25\x6a\x28\x51\x43\x89\x1a\x4a\xd4\x50\xa2\x86\x12\x35\x94\xa8\xa1\x44\x0d\x25\x6a\x28\x51\x43\x89\x1a\x4a\xd4\x50\xe2\x4a\xa1\x44\x4a\x8e\x21\xe4\x30\x46\x46\x00\x72\x38\x44\x6e\x22\x07\x9b\xba\x32\x65\xe0\x01\xe1\xd2\x04\x6a\xf9\xba\x78\x6d\xde\xd3\x1e\x68\x1c\x36\x6f\x44\x1c\x11\xbe\xda\x08\x1d\x8a\x3c\x4f\x8d\x38\x06\xb1\xdf\xb5\xa3\x09\x3e\x71\xb9\xf4\xce\x44\x28\x62\x37\xfe\xbd\x89\x60\x04\x62\x07\x93\xe4\x08\x99\xa8\x73\xc4\x3c\x40\xf6\xad\x62\x3b\xb4\x0f\xa6\xf6\xc1\x5c\xa5\x0f\xe6\x7f\x18\xe4\x30\xf2\x84\xdb\xc8\x2d\xc0\x13\x0e\x92\xd5\x11\x21\xfa\x72\x0e\x81\x2f\xa7\x74\xbf\x5c\x75\x67\x27\xd0\xf3\x72\x82\x8c\x29\x9e\x97\xab\xee\x6d\xad\x4e\x97\x9d\xb1\xaa\x16\xdc\xa8\x25\x17\xeb\x7b\xc4\x6a\xc2\xaa\x76\xe5\x3a\x57\x22\xdb\xda\x8b\xcf\x72\xd8\x56\xea\x4a\xb9\xb1\x0c\x4c\x83\x9f\x1a\xfc\xd4\xe0\xa7\x06\x3f\x35\xf8\xa9\xc1\x4f\x0d\x7e\x6a\xf0\x53\x83\x9f\x1a\xfc\xd4\xe0\xa7\x06\x3f\x35\xf8\xa9\xc1\xcf\x8b\x0f\xfc\x6c\x1e\x7a\xb9\xbe\x0e\x96\x02\x53\x58\x81\x57\xe3\x06\xe3\x0b\xc7\x9e\x4f\x9e\x67\x3e\xd7\x7e\xce\x76\xc3\xec\xae\x3a\xc9\xc2\xae\x61\xce\x9f\x10\xee\x62\x6a\x50\x2d\x59\xb0\xe2\x52\x58\xa5\xfd\x56\x5c\x2b\x01\xa9\x02\xa1\x51\xa7\x82\x7b\x55\x8d\x42\xe0\x87\xf6\x0e\xe9\x0c\xd6\xc7\x29\xf6\x97\x36\x20\x41\xa7\xf9\x97\x05\xf2\x63\xb9\x1e\x81\xe6\x1f\x14\xcc\x8f\x15\xc8\x36\xfe\xf3\xae\x5d\xf3\x34\xb1\xbc\xa0\x1c\x46\x15\x49\xee\x8e\x05\x4b\xd5\x67\xa6\xee\x80\x23\x53\x93\x47\xd8\x6f\x17\xa1\x23\xa0\x47\x4e\x21\xfd\x1d\x21\x13\x40\x7f\xb7\x91\x5b\xc8\xa1\xd5\x39\x02\xc2\x1c\xdb\x7a\x00\xfe\xed\xf5\xa4\xd8\xc4\xdd\x92\xe7\x71\x8c\x3d\x37\xf2\x18\x21\xa1\xf3\xdf\x8b\xcc\x0f\x5c\x6f\xfe\xe9\x16\xf2\xc4\xd4\x09\x13\x01\xaa\xa7\x03\xaf\xcd\x42\x16\x63\x33\x93\xe3\xf0\x72\xdf\xd3\xd8\x53\xe9\x8f\x89\xd8\x94\x78\xb8\xce\x58\xd4\xfb\x0c\xf2\x6e\xc3\xfc\x75\x63\xd7\xaf\x4a\x8e\xf4\x32\x63\x06\x85\x5f\x10\xa0\xcf\x81\x20\x3a\xc7\xfe\xe5\x94\x92\xa2\x65\x4d\xb0\xff\x8a\xdf\x2b\x8e\x07\xa8\x6b\x6c\xf1\x14\x96\x03\x7c\x3e\x25\xae\xa3\x59\xbe\x77\x96\x5a\x3d\x12\x50\xeb\x61\xd7\x9f\x28\x1f\x52\xb4\xa6\x7c\x27\x08\xf8\x85\x06\xac\xca\xf1\xd9\x0d\x32\x54\x1c\xba\xb1\x68\x6f\x81\x4f\xaa\xcc\x68\xf4\x6d\x06\x79\x8b\x61\x9e\x37\x76\xbd\x51\x0e\xf7\x7e\x39\x5a\x09\x75\xcd\x89\x71\xb3\x4f\x58\x13\x38\x54\x76\x46\xaa\xb1\x18\x16\x17\x93\x6a\x31\x93\x7e\x9c\x00\x85\x55\xe4\x8a\x2b\x18\xe1\x56\xfc\x4c\x86\x5f\x3e\x9f\x4c\x20\x59\xde\x4a\x6e\x06\xb2\xbc\x81\xec\x27\x7b\x9b\xa2\xaf\x82\x92\x64\xe8\xbb\xd8\xe8\xb6\xe0\xeb\x33\xf2\x19\xe5\x56\xb3\x7b\x9e\x26\xe4\xbe\xe7\xb6\xe7\x8d\x37\x99\x07\x39\x6f\xcc\xd2\xb3\x70\x42\x97\x43\x69\x60\x8d\xbb\x1e\xde\xde\x48\xd4\x3f\x19\xd1\xaa\xef\x94\x68\x53\xba\x7e\x26\x6f\xb0\x39\xa4\x7d\x94\x1c\x26\xe3\x75\x76\xa2\x55\xed\x84\x36\x13\x69\x33\xd1\x2a\xcd\x44\xef\x33\xd6\x8b\x1b\x1c\x43\x2b\xd1\x18\x19\x49\xad\x44\x1b\xc5\x59\x36\x94\x75\xb4\xe0\x5b\xd5\x5a\x42\xfa\x5e\xff\xa4\x46\xce\x62\x72\x7b\x8e\xa3\x30\x93\x67\xe0\x6f\x9b\xc3\x4b\x66\xc9\x34\x99\x52\x79\x49\xdf\x28\xb9\x7d\x15\xa2\xc6\x38\x8c\xf9\x34\x98\x77\x62\xcd\x57\xda\xf1\x95\x6f\x16\x08\xd4\xf5\xdf\xf5\x55\xb9\x40\x0f\x15\x66\x55\x25\xcd\x0b\xac\x18\x15\x2d\x6b\x8e\x96\x43\x84\x28\x04\x8e\x90\xda\xcf\x38\x74\x03\x43\x54\xf8\x46\x10\x06\x03\x01\x9d\x77\x60\x21\xb8\x9e\xa6\xf2\x17\x44\x14\xe5\x16\x70\x2a\xf4\x2a\x15\xea\x32\x0e\xe6\x2f\x73\x33\x8c\x6a\x64\x0b\x3c\xbf\x9f\xab\x6f\xa0\xe6\x5b\xf3\x11\xbb\x13\xab\x34\xf2\x42\x57\xaa\xa1\xe9\xf5\x98\x2c\x57\x53\x18\xab\x16\xb3\x41\xaa\x00\x81\xc3\xde\x14\x13\xe2\x1f\x29\x2b\xe2\x8a\xc7\x5e\x80\x71\x56\xa8\x13\xe4\x8e\xd1\x36\x61\x08\x53\x30\x82\x3c\xb5\xf4\x8b\x05\xf2\x47\x05\xf3\xf3\x85\x5d\x9f\x95\xcb\xfc\xb6\xc2\xb8\x52\xe5\xad\x0a\xe1\x2b\x12\x08\x9d\x8a\xc2\xaa\x33\x0f\x1b\x30\x15\xfa\x5e\x69\xb9\x1f\xd7\x00\xa1\x3f\x31\x97\xb4\x4c\x1c\x0a\x4c\x07\x8b\x96\x22\x58\xba\xb4\x4a\x03\x97\x06\x49\x8a\xa9\x53\x2b\x8c\xaa\x0b\x4e\xc0\x66\xc4\x96\x35\xaa\xd1\xc1\xb2\xe3\x0b\x1b\x94\x8d\x4f\x6d\xab\xec\x05\x8e\xef\xdd\x2f\xc0\xec\x39\xca\xd4\x5e\xc0\xc8\x06\x51\xdd\x75\x53\x38\x05\x3b\xef\x89\xd3\x97\xd0\xea\x53\xb4\x26\x3c\x20\x67\x65\xe0\x61\xd4\x38\x33\x80\x40\xd1\x00\x8b\x46\x27\x38\x6c\x61\xb2\x50\xb4\x9f\x84\xe3\x19\x17\x13\x89\x33\x92\xea\xcb\xbb\xc9\x83\xdd\xe6\x03\xdd\xbb\x7e\x24\x11\xa6\x87\xbb\xee\xe4\xa8\x30\x3b\x52\x0b\xe1\x92\x35\xef\x44\x73\xce\x7c\xc6\x4e\x2d\xcf\x05\x8d\x98\x6e\xc6\xd6\x22\x77\xa4\xa7\xeb\x3e\xde\x7c\xa0\x40\xcf\x82\x18\xab\x38\x2b\x8f\x11\x4a\xc9\x73\x53\xf3\x0e\x58\x0a\xc0\xd8\x26\x57\x37\x06\x0d\x11\x9e\x0a\x5b\x40\x51\x59\x46\x81\x22\x0b\x10\x21\x15\xfd\xb3\x1f\x2b\x5a\xe8\x88\x00\x97\xad\xca\x1c\x7a\x70\x0e\x3d\xd6\x00\xdf\xf8\x2c\x61\xc4\x87\xac\x9e\x51\xa7\x74\x96\xdd\x33\x81\xcb\x5a\x39\xbe\x1f\x2e\x41\xa3\xba\x85\x43\xd3\x0d\x27\xfd\x6c\x27\x62\x06\x73\xb2\xa7\x43\x56\xcf\xe1\x30\xa2\x4a\xb7\x56\xc9\x89\x4b\x8e\xcb\x66\xcf\xd7\x07\x98\x2d\xf6\x17\x23\xf7\x6a\xe8\xb0\x2c\xfb\x28\xda\x57\x54\xeb\xe9\x46\x15\x02\x3e\x6a\x6c\x12\x84\x42\xa6\xd1\xfb\xe3\x38\x99\x54\xbc\x3f\xd6\x07\x96\xd9\x58\x99\xc0\xca\x97\x09\x76\x98\xdb\x70\x13\xc8\xe8\xd7\x77\x36\x8a\x05\xbb\x01\x6b\x05\x43\x3d\x62\x5e\x4d\x35\x8f\xa7\x57\x9d\xa4\xb4\xb0\xe1\xb2\xc2\xd3\xea\x3b\x1a\x80\xef\x5e\x0f\x30\xc7\xd3\xd5\x87\x15\x1a\xcd\x53\xf5\xe9\x75\xea\xd3\x38\x89\x9c\x84\xce\x7b\xa5\x81\xfa\x76\x2b\x4d\x43\xd8\x62\x7f\xa7\x58\xa7\x5a\x06\x69\x27\x83\xfc\x56\x17\x79\x5f\x97\xf9\xee\xae\x5d\xbf\x2e\x19\xf9\x4b\xbb\x1e\x3f\xba\x4d\x9d\x51\x8f\xad\x33\x38\xa9\x80\xe1\xb9\x8a\xf6\x00\xb4\x5f\x59\xbb\x55\x12\x86\x67\x48\xb8\xbd\x70\x1f\xa1\x4f\x93\xe3\xc3\x9b\x4c\xf0\xc2\xb7\xa1\x05\x08\x41\xb1\xb5\xfb\x58\x1c\x06\x40\x96\xfd\xd6\x49\x46\xf8\xfc\xdf\x33\xe2\x38\xa4\x3f\xf6\x36\x57\xba\x46\xff\xc8\x20\x9f\x37\xcc\xcf\x1a\xbb\x3e\x25\x41\xa2\x77\x19\x87\xc3\xa8\x04\xf2\xd9\x7c\x08\xcb\x1e\x5a\x76\x99\xfd\x64\x5b\x23\x99\x59\x14\xad\xc9\x84\x8b\x52\x00\x0e\x71\xd2\x1c\x70\x4a\x30\x71\xf0\xf9\xf1\xbd\x12\xbf\x2a\x01\x4b\x0a\x97\xf8\x9a\xa2\x4f\x4c\x95\x86\x55\x9f\x16\x2d\xfc\x62\xd9\x77\xe6\xe5\x5e\x82\xa1\x26\x77\x01\xe4\xe7\xed\x2d\x30\xac\x0b\x03\x29\xfd\x64\x3e\x1b\xde\x6e\x6e\x85\x51\x6e\x30\xa8\x74\xec\x06\xb2\xdf\xdc\x6b\xef\x91\x78\xfb\x8f\xc1\xa1\xe2\x27\x5c\xbe\x68\x77\xb3\x9f\x37\x14\x45\xff\xb4\x4d\x7e\x7c\xd0\xa9\x7a\x83\x8b\xa2\xda\x72\x4c\xa3\x45\xaf\x44\x63\xf3\xbd\xb6\xf9\xee\x6e\xb2\xad\x14\x46\x10\x52\x1f\x77\x56\x4d\x79\x06\x5f\x5f\xa7\xda\xc9\xd7\x61\xed\xe4\x30\xa2\x67\x86\x78\xcf\x27\xbc\x38\x39\x1c\x46\x23\xbe\x2f\xa1\xd6\xf5\x0b\xde\xdf\xb0\x62\xc9\x4d\xc5\xa2\x75\xaf\xa2\x2c\x28\x7c\xb2\x3d\x01\x5f\x67\x5e\xc3\x09\xd8\xb6\x39\xd1\xf2\x45\x56\x49\x96\x74\x54\x77\x59\x17\x41\xd6\xbe\x9e\xda\xd7\x53\xfb\x7a\x3e\x7e\x7c\x3d\x75\x11\x64\x5d\x04\x59\xfb\x7a\x6a\x5f\x4f\xed\xeb\xa9\x7d\x3d\x2f\x0a\x5f\x4f\x5d\x04\x59\x3b\x8f\xea\x22\xc8\x17\xa8\x08\xf2\xcb\xaf\x25\x77\xa2\xc7\x9c\xe3\x32\x29\xd2\x0b\x83\x88\xce\x7b\x80\x6f\xe7\x24\xcf\x43\xac\x05\x74\x36\x87\x49\x0a\x4b\x74\x6e\x21\x0c\xcf\x66\x74\x2f\xe9\x5a\xf7\xbe\x6b\xcc\x47\xb6\x90\x67\xe4\x76\x2c\x4d\x04\x9f\x32\xf8\x76\x29\xa8\x4c\x20\x78\x8f\x48\xad\x77\x46\x7e\xf0\x4e\xfc\xe0\x98\xfa\xc1\x75\x01\x6d\xfa\x53\xf1\x03\x44\x2c\x7e\x59\x31\x09\x26\x95\xab\x7a\x32\xa2\xac\xd2\x77\xb1\xef\x36\xf8\xdc\x48\xde\x5c\xb9\x39\xa3\xf5\x24\x2e\x7e\x2c\x68\xdd\x21\x9f\x35\xa0\x9d\x4b\x88\x76\xfe\x74\x7b\xb0\xe8\xb9\xe6\x73\x9a\x65\x57\x68\x45\xf1\x1c\x57\x6a\xbd\x67\x1a\x3d\xd2\xe8\x91\x46\x8f\x34\x7a\xa4\xd1\x23\x8d\x1e\x69\xf4\x48\xa3\x47\x1a\x3d\xd2\xe8\x91\x46\x8f\x36\x19\x3d\x3a\x4e\x26\xcd\x23\xf6\x84\xf4\x49\xe8\x53\x7d\x12\x5a\xcb\xef\x1b\xef\xa8\xa0\xa1\x28\x0d\x45\x69\x28\xaa\x33\x28\xea\xf3\x4f\x25\xb7\x70\x28\xaa\x5a\x8d\x07\x17\x9b\x96\x6a\x70\x69\xd5\x0f\x97\xd9\x15\x2a\xa0\xa6\xc1\xb8\xe4\xf8\xd4\xfc\xb9\xa7\x9a\x3f\x2c\x90\x6d\xec\xf5\x7b\x17\x87\x76\x5d\x07\x74\x06\x8f\xc4\x1a\xa7\x94\x3d\x2e\x3b\xe9\xbb\x9a\xb5\x1b\xa9\x56\xe3\x33\x4a\x62\xc4\xf4\xf9\x0c\xeb\x60\x7d\xc3\x55\x8e\xdd\x4d\x6e\x47\x34\xe5\x26\x72\x10\xd0\x94\x21\x32\x48\x06\x9a\x3a\x8c\x39\xb5\x24\x64\xf3\x60\x72\xe8\xe2\x50\x11\x46\xd4\x16\x3d\x99\x6a\x0f\x8e\x0c\x98\xd7\x0b\x2c\x24\xfd\x82\x70\xa9\x81\x8f\x64\x1c\x6a\x5a\x07\x34\xee\xfa\xf4\xf6\x74\xed\x7b\x45\xa8\x61\xfb\xe5\xbf\x8e\x37\xdd\xd4\x1d\x18\x1d\x23\x23\xe4\xb6\x3a\x37\xdd\x95\x6e\x81\xf6\xcd\xd5\x71\x87\xab\x8c\x3b\x7c\x87\xb1\x0e\x1c\x60\x02\x43\x0e\x6f\x25\x37\xa7\x21\x87\x1b\xc0\x48\x5a\xc7\x03\xae\x3f\x9f\x19\xfd\xcb\x9d\x29\x23\xd9\xdb\x10\x42\xd0\x9e\xa3\x5c\x03\xce\xb0\x9b\xc6\x4f\x74\x50\xc1\xa5\xc7\xb8\x74\x50\x81\x0e\x2a\xb8\xc0\x41\x05\x9b\x21\x23\xb6\x8d\x27\x58\x77\xe6\x7e\x6c\x2f\xd9\x63\x16\xed\x7e\xa9\xaf\x5f\xa1\xea\xeb\xd0\xbe\x51\x2d\x7f\x0c\xe6\xf9\xf9\x93\xab\xc8\x93\x51\x9b\x99\x43\x9b\xf9\xd0\xe0\x7d\xe1\x5c\x6c\xfe\xce\x55\xe6\x87\xba\xc8\x76\xf8\x91\xdd\x6f\x57\xb5\x2e\x2a\x77\x2c\x9c\xeb\x7b\x26\x6b\x32\xca\x1e\x9f\x19\x3a\x16\xce\x3d\xd6\xa2\x08\xee\x24\x37\x23\x1d\x1f\x20\xfb\x80\x8e\x07\xc8\xf5\xa4\xb7\x29\x1d\xc3\xca\x30\x0a\x3e\x16\xce\x75\x94\x8e\xff\x68\x7b\x12\xbd\xd6\xbc\x9a\x93\x28\xf4\xce\x89\xf3\x58\x38\x97\xd5\x6f\xda\x24\xf6\xd7\xd6\x5e\x6d\xed\xd5\xd6\x5e\x6d\xed\xd5\xd6\x5e\x6d\xed\xd5\xd6\x5e\x6d\xed\xd5\xd6\x5e\x6d\xed\xd5\xd6\xde\xcd\xb5\xf6\x6a\x03\xad\x36\xd0\x6a\x03\xed\x85\x31\xd0\xfe\xce\x2e\x72\x14\x21\x0d\x7a\x2e\xa1\x41\x0c\x9a\x7b\x9b\xb2\xfa\x4d\x6d\xb5\xdf\x7e\xaa\xf9\xc6\x2e\x62\xa6\x3d\xc9\x88\x80\x4e\xcd\xb6\x45\xd6\x6e\x42\xbe\xdf\x50\xda\x6e\x63\x2d\xb8\xf7\x92\x71\x44\x35\x6e\x21\x87\x00\xd5\x38\x40\xf6\x91\xa1\xa6\xa8\x46\x3a\x4f\x99\xf5\x63\xad\xc6\x17\x48\x22\x3b\xdb\x1e\xfc\x18\x32\x07\x39\xf8\x91\x0e\xa2\x19\x3c\xc7\x93\xc7\x7e\x67\x7b\xee\xce\xac\xc0\xa8\x3b\xc4\x9b\x5e\xa8\xfd\x19\x3d\x42\x26\xc8\x58\x9d\xc5\x64\x35\x1b\xa4\x4d\x25\xda\xc6\xbb\x4a\x1b\xef\x7b\x8c\x75\xe2\x11\x93\x68\xe7\x1d\x25\xb7\xa7\x76\xde\x4d\x67\x37\x60\xeb\xdd\x10\x76\x33\xfa\x83\x9d\xb9\xec\x66\x35\xa6\xdf\x41\xb0\x5b\x5c\x08\xae\xa3\xad\xc0\x97\x1e\x6b\xd3\x56\x60\x6d\x05\xbe\xc0\x56\xe0\x7b\x9b\xe7\xe0\x5a\x97\xcb\xa5\x63\x4b\xf0\x86\xb0\xfe\xc7\x8b\x35\xf8\x3d\x27\xc8\xf5\x2d\x0b\x93\xf0\x9f\x4b\xbe\x13\xc7\x34\x36\x1f\x3d\x6e\xfe\xf2\x55\x8d\xf9\x54\xfb\x5a\x1b\x8b\x79\xfa\xd4\x31\xd6\x09\x5a\x8d\xb3\x09\x55\xd5\xe7\x17\xb9\xd5\x58\xd7\xe0\xd5\xb6\x56\x6d\x6b\xd5\xb6\xd6\xc7\x8f\xad\x55\xd7\xe0\xd5\x35\x78\xb5\xad\x55\xdb\x5a\xb5\xad\x55\xdb\x5a\x2f\x0a\x5b\xab\xae\xc1\x7b\x29\x9a\x46\x75\x0d\xde\x8d\xa9\xc1\xbb\x92\x3a\x31\x0d\x05\x00\x54\xc5\xbc\x23\x9f\xe7\x7b\xdb\x83\x31\x37\x9b\xc3\xad\xd2\xfc\xab\x9f\xcc\xa9\xf7\xd2\xc6\x15\xda\x7e\xdf\x8e\x46\x74\xe2\xc7\xf0\x46\xb0\x9c\x2c\x10\xc1\x2f\x8a\x4d\x80\x22\x10\x39\x38\x4e\x26\xc9\x91\x3a\x94\xfc\x20\x39\xb0\xaa\xcd\xd0\x10\xb9\xb6\xfe\xad\xd2\xfa\xf7\x40\x81\x1c\x45\x9e\x30\x42\x6e\x03\x9e\x70\x13\x59\x2d\x19\x92\x93\x68\x01\x3c\x4c\xc6\x53\x0b\xe0\x1a\xba\x3b\x85\x65\xa8\x8e\x90\x09\xa5\x0c\xd5\x1a\xfa\x5b\x1f\x76\xd5\x2c\x4f\x5f\x7b\xfe\xd5\x82\x5d\x55\xc3\x38\x21\x7d\x5f\xb1\x1a\xd9\xd5\x55\xbc\x1c\x99\x52\xdb\x2d\x2c\x67\x59\x57\x5f\x6e\x09\x4b\xd9\x7e\x03\x99\x98\x86\x3f\x35\xfc\xa9\xe1\x4f\x0d\x7f\x6a\xf8\x53\xc3\x9f\x1a\xfe\xd4\xf0\xa7\x86\x3f\x35\xfc\xa9\xe1\x4f\x0d\x7f\x6a\xf8\x53\xc3\x9f\x8f\x75\xf8\xb3\x7d\x99\xec\x0b\x0e\x7f\xf6\xe5\xe3\x09\x4f\x36\xaf\x40\x06\x9f\x62\x06\x64\xfd\x9d\xc5\xbe\x6b\x93\x6b\x33\x89\x10\xd9\xa0\xf6\x8a\x3a\xa7\x89\x93\xd0\x72\xcd\x8f\x69\x12\x9b\x9f\xb5\xcd\x4f\x77\x93\xcb\x78\xae\x2c\x68\xb6\x6b\xa9\xc3\x82\xa7\xbc\x9f\x19\x9a\xac\x53\xd1\x53\x1c\x20\x66\xdd\x82\xa1\x28\x9f\x78\x6c\x56\x3f\xdd\xfc\x8a\x17\x9d\x39\x59\x0a\x12\x96\xcb\x5b\x4f\xc1\x7b\x65\x89\x8b\x6a\x35\xd6\x85\x50\x35\xe2\xa4\x11\x27\x8d\x38\x69\xc4\x49\x27\x37\xd1\xc9\x4d\x34\xe2\xa4\x11\x27\x8d\x38\x69\xc4\xe9\x22\x44\x9c\x74\x72\x13\x0d\x61\xe9\xe4\x26\x17\x28\xb9\xc9\xfb\xfb\xc8\x21\x04\x5d\xa2\x39\xa7\x54\x14\xaa\x79\x6e\x15\xd4\x92\x5f\x8b\x13\xa6\x32\xf8\x54\x16\x3b\xfd\x6e\xaf\xf9\x6b\x5d\xe4\xa9\xec\xe5\x11\xf5\x5d\xe9\x6e\xf2\x4c\xa0\xbb\xac\x3e\x38\x86\x1d\x4d\x87\x3e\xed\xeb\x61\xcf\xa7\xeb\x5f\x17\x3e\x27\x69\xc3\x0b\x9b\xc7\x04\x16\x47\xf8\x00\x29\xa3\x5a\x6b\x1e\x13\xaf\x3d\xf0\x71\xd8\x1c\xe7\xa8\x46\xd3\x1d\xe2\xe0\x9e\x3a\xae\xc6\xe4\x26\x3f\xdc\xde\x6a\x9b\xae\x12\x39\x4e\x9a\xef\x54\x1f\x6f\xb2\xe9\x9b\xb5\xe2\xa4\x26\xcd\x76\x4b\xbb\x35\x6a\xb7\xc6\x4d\x4a\x6a\xd2\x94\x61\xac\x3c\xa9\xc9\x06\xf0\x1e\x48\x6a\xb2\x79\xbc\xa7\xef\x77\x9f\xd4\x8a\xf7\x5c\xc9\x3d\x12\x9d\x0c\xbb\xe9\xc5\x5f\x37\x9f\xdb\xcc\x92\x69\x32\xa5\x72\x9b\xbe\x51\x72\xfb\x2a\xf0\xef\x71\x18\xff\x69\x40\x8f\xb5\x47\x75\x5b\xd6\xf3\xcd\x02\xf9\x7a\xc1\xfc\x5a\x61\xd7\x57\xe5\x02\x3d\x54\x98\x55\x45\x36\x2f\xb0\x62\x14\xbb\xac\x39\x5a\x0e\x51\x03\x12\x6a\x4a\x0a\xcf\x73\xcd\x10\x86\xa8\xb0\x96\x20\x0c\x06\x02\x3a\xef\xc0\x42\x70\xa9\x4d\x65\x41\x08\x58\xc8\x2d\xe0\x34\xe9\x55\x2a\xd4\x65\x4c\xce\x5f\xe6\x28\xaf\x8a\xe1\x07\x9e\xdf\xcf\x85\x39\x10\xfa\xad\xf9\x88\xdd\xa1\x55\x1a\x79\xa1\x2b\x85\xd2\xf4\x3a\x4d\x96\xab\xa9\x96\x5c\x8b\xd9\x20\x55\x75\xc1\x61\x6f\x8a\x09\xf1\x8f\x94\x51\x75\x17\x5d\x14\x71\x9c\x98\xad\x23\x67\x8c\xb6\x09\x43\x98\x82\x11\xe4\xd9\x59\xbf\x58\x20\x7f\x54\x30\x3f\x5f\xd8\xf5\x59\xb9\xcc\x6f\x2b\x8c\x2b\x86\xb0\x2a\x93\xcf\xa9\xc4\x59\xa6\xa2\xb0\xea\xcc\xc3\x06\x4c\x85\xbe\x57\x5a\xee\xc7\x35\x40\x64\x41\xcc\x25\xb5\xa4\xb1\x5d\x1a\x2a\x1e\x2c\x5a\x33\xb8\x21\xb8\x3a\x55\x1a\xb8\x4c\x77\x94\x90\x1d\xb5\xc2\xa8\xba\xe0\x30\x95\x10\x96\x35\xaa\xd1\xc1\xb2\xe3\x0b\x88\xdb\xc6\xa7\xb6\x55\xf6\x02\xc7\xf7\xee\x17\x58\xd9\x1c\x65\x42\x30\xa8\xe0\x83\x28\xfc\xba\xa9\x72\x85\x9d\xf7\xc4\xe9\x4b\x08\x2a\x17\xad\x09\x0f\xc8\x59\x19\x78\x18\x35\xce\x0c\x10\x16\xb4\xef\x20\xa6\x0d\x87\x2d\x4c\x16\x8a\xf6\x93\x70\x3c\xe3\x62\x22\xb1\x2a\x44\x8f\xbe\xbc\x9b\x3c\xd8\x6d\x3e\xd0\xbd\xeb\x47\x52\xdf\x7c\x98\xe9\x9b\xf0\x51\x76\xa4\x16\xc2\x25\x6b\xde\x89\xe6\x98\x5e\xa6\xf8\x5d\xcb\x73\x41\xa3\x72\x18\x55\xd8\x5a\xe4\x8e\xf4\x74\xdd\xc7\x9b\x0f\x14\xe8\x59\x10\x63\x15\x67\xe5\x31\x42\x29\x79\x6e\x8a\x1e\x03\x10\x89\xd9\x5c\xc4\xea\x32\xdd\x8d\xc3\x74\x02\x6a\x2c\x2a\xcb\x28\x40\x2a\xa1\x52\x0c\x70\x82\x2c\xd5\x7d\xac\x68\xa1\x5f\x3d\xdc\xc7\x2a\x73\xe8\xc1\x39\xf4\x58\x03\x7c\xe3\xb3\x84\x11\x1f\xb2\x7a\x46\x9d\xd2\x59\x76\xdb\x04\x2e\x6b\xe5\xf8\x7e\xb8\x04\x8d\xea\x16\x0e\x91\x61\x4e\xfa\xd9\x4e\xc4\x0c\xe6\x64\x4f\x87\xac\x9e\xc3\x61\x44\x95\x6e\xad\x92\x13\x97\x1c\x97\xcd\x9e\xaf\x0f\x30\x5b\xec\x2f\x46\xee\xd5\xd0\x61\x59\xf6\x51\xb4\xaf\xa8\xd6\xd3\x8d\x2a\x27\x7c\xd4\x20\xd3\x18\x65\x70\x9c\x4c\x2a\x51\x06\x1b\xe4\x19\xb0\xbe\x0e\x08\x42\x70\xb0\xf2\x05\x87\x1d\xe6\x36\x5c\xa6\xcd\x94\x1d\x46\x1f\xbc\xac\x95\xec\xd0\xd7\x90\x2c\xad\xb9\x02\xb3\x1b\x52\xfa\x6c\xaa\x40\xa1\xb3\xa3\x5d\x7a\x82\x8a\xce\x8e\xa6\xb3\xa3\x5d\xf0\xec\x68\x9b\x83\x5e\xb5\xcd\x8e\xb6\x79\xf7\xc0\xb1\x1b\xc9\x0d\xe6\x7e\x7b\xaf\x4c\x7f\xf6\x14\x35\x65\x9a\xf2\xea\xc6\x57\xb7\x36\xbf\x60\x90\x1d\x83\x7c\x84\x83\xe6\xef\x1b\xe6\xef\x19\x64\x1b\xff\x7b\xd7\x95\xf3\x54\x78\x71\xb8\xd2\xa6\xd2\x77\xf9\x3c\x4d\xc6\x42\x57\xe2\xda\x0d\x37\xcc\x70\xc3\x2f\xc7\x9e\x8f\x95\x2e\xf7\x40\xa5\x4b\xb6\xcb\x37\x90\xfd\x64\x6f\x67\x8c\x9d\x7f\xb7\x38\x19\x94\xc3\x76\xdb\x6c\xbe\xf2\x32\x32\xd1\xe0\x79\xb7\x92\xdc\xd6\x51\xe8\xfb\x4c\xe8\x32\x3f\xb1\xd3\x7e\xcd\x96\x8c\x67\xde\xd0\xae\x9f\xe4\xf1\xd1\xa2\x11\x1a\x4c\x94\xe4\xa5\x03\xd8\x20\x75\xa1\xcb\xcd\x5b\x3a\xcd\x5f\x5f\x67\x6d\x7f\x85\xd7\x67\x91\x4d\x4d\x9e\xa5\xc6\xd1\x1d\x7b\x55\x81\x3c\x0b\x21\x9e\x63\xe4\x68\x0a\xf1\xac\x51\xfe\x7b\xec\xcb\x94\x77\xb7\xe7\x14\x37\x9a\x37\xa8\xfe\x7b\xc8\x14\x1a\x97\x78\x45\x61\xfb\x10\x07\x7b\x4c\xcb\x34\xad\x65\x9a\x63\x1a\xf7\x6d\x82\xfb\xde\x46\x6e\x31\x0f\xd9\x37\xc9\x5b\xe7\x99\xea\xad\xd3\x48\x9b\x97\x44\xd6\xce\xaf\xec\x22\xa7\xf0\x3a\x08\x68\xb2\x14\x46\x6c\x0b\xeb\x6d\x81\x4d\xee\x06\x2f\x98\x8f\x18\x91\xa5\x55\x0f\x80\x09\x98\x2f\xdb\x65\xfe\x4a\x17\x31\xd3\xfe\xe4\xed\x70\x0d\x96\x3d\x80\x66\x8d\x29\xae\x27\xb1\xbf\xbe\x7e\xd6\xea\x94\x7c\xbb\xe1\x9a\xe0\xed\x90\xe5\xac\xb3\xa9\xd0\x21\x87\x91\x21\xde\x46\x6e\x01\x86\x78\x90\x1c\x20\xfb\x9a\x5e\x10\xca\x9a\x89\x6b\x82\x8f\x6e\xad\xc6\xc2\x7b\xda\xb3\xd0\x61\xf3\x46\xce\x42\x1b\xb6\x8e\xf3\x53\x31\x96\x46\x03\xe1\xbf\x6d\xcf\xdd\xa0\x1e\x59\xfd\xa0\xcd\x1e\x0d\xf2\x86\x17\x66\x9b\x46\x27\xc9\x11\x32\x51\x77\x91\xaf\x6e\x9f\xb4\x0a\xac\xcd\x84\xab\xbc\x2e\x7e\xd3\x58\x37\x66\x71\x1c\xa5\xc8\x71\x32\x9a\x4a\x91\x17\x80\xf3\x80\xa9\x70\x63\x39\xcf\xe8\x8f\x76\xe6\x72\x9e\x3d\x8d\x85\x10\xda\xb0\x20\x84\x17\x36\x9f\x01\x69\x98\xef\xd2\xe3\x71\x1a\xe6\xd3\x30\xdf\x05\x86\xf9\x36\x4f\xf2\x6c\x0b\xf4\x6d\xec\x0d\x70\x6c\x3f\xd9\x6b\xee\xb1\x8b\x52\x4b\x7a\xb2\xaa\x66\xf1\xd7\x2e\x09\xdd\xea\xff\xb5\x49\x7f\x93\x8a\x08\x32\xd2\x35\x53\x12\xe1\xf7\x6c\xf3\x23\xdd\x84\xa4\x59\xbc\x76\x9d\xeb\x34\xd2\x35\x0d\xf5\x5d\xa7\x50\xd7\x67\xc2\x0b\x32\x2d\x58\x7d\xfa\x46\x1d\xd9\xda\x78\xb0\x3a\x89\x41\xbd\xef\x39\xed\x0f\xd7\x41\xf3\xc0\x6a\xe2\xba\x75\x7c\xab\x8e\x6f\xd5\xf1\xad\x3a\xbe\x55\xc7\xb7\xea\xf8\x56\x1d\xdf\xaa\xe3\x5b\x75\x7c\xab\x8e\x6f\xd5\xf1\xad\x3a\xbe\x55\xc7\xb7\xea\xf8\xd6\xc7\x45\x7c\xeb\x77\x4e\x8b\xe2\xfd\x8e\xcb\xa4\x48\x2f\x0c\x22\x3a\xef\x01\xd0\x9e\x13\xe2\x5a\xa9\x25\x0e\x93\x10\x96\xe8\xdc\x42\x18\x9e\xcd\xe8\x5c\xb1\xf9\xd6\xd3\xe6\xeb\x6d\xf2\x8c\xdc\x9e\xa4\xd5\x62\xb8\x75\xb1\xca\x93\xfc\x0b\x77\xe2\x17\xc6\xd4\x2f\xf4\xdd\xcc\xde\x1d\xc9\xeb\x9e\x5b\x32\x5a\xbd\x7d\x91\xc3\x2f\x3a\xb7\xbb\x46\x22\x34\x12\xa1\x91\x88\xc7\x0f\x12\xa1\x73\xbb\xeb\xdc\xee\x1a\x89\xd0\x48\x84\x46\x22\x34\x12\x71\x51\x20\x11\x3a\xb7\xfb\xa5\x08\x1c\xe8\xdc\xee\x1b\x91\xdb\xfd\x41\x83\xdc\x87\xde\x02\x25\xe2\x80\xb7\xc0\xdd\xe4\x2e\x72\x67\xf3\xb8\xa0\x5c\x78\x41\xf8\xe1\xb4\xd2\xdb\x3b\xaa\x7c\xd9\xa6\x30\xe5\x7d\x2f\x6a\xef\x42\xf0\x1c\xf3\xd9\x22\xbc\xa6\x05\x14\xc2\x1d\x0a\x5a\x0d\xb8\xd1\x7f\xc7\xfe\x2f\xd2\x0e\x16\xb9\x56\x56\xc9\x6c\x89\x80\xdc\xca\x63\xc1\x2e\x34\x06\x82\x90\x85\x47\xe6\x09\xad\x73\xba\xbc\x83\xcc\x6c\x00\x11\x68\x7f\x4c\xed\x73\xbe\x4a\x9f\xf3\xbf\x2a\x10\x1f\xc3\x03\x29\x29\x29\xe1\x81\x77\x92\x8d\x21\xd5\xe6\x81\x83\x65\x64\x98\xf7\x92\x7b\x80\x61\x6e\xd8\x00\xce\xa2\x6b\xbc\x4b\xe6\x52\xd7\xf8\x8d\xfa\x98\x60\xc0\x17\x96\xc1\xb6\xad\xf4\xf9\x81\xab\xda\x31\xe0\xa1\xdc\xba\x9f\x2d\x99\xf1\x51\x7c\xa5\x15\x33\x4e\xab\x82\x6e\x22\x5b\xd6\x48\xb2\x46\x92\x35\x92\xac\x91\x64\x8d\x24\x6b\x24\x59\x23\xc9\x1a\x49\xd6\x48\xb2\x46\x92\x35\x92\xac\x91\x64\x8d\x24\x6b\x24\xf9\xe2\x43\x92\x37\xbb\x4a\xe8\x0a\x8a\x78\x5e\x60\x54\x63\xfd\xc3\x2b\x7f\x58\x20\x56\xbb\x72\x16\xe6\x97\x0a\xe6\x17\x0b\xe4\x8a\x86\xa4\xa2\xbb\x76\xcd\x43\x16\xdc\x72\x18\x55\x24\x05\x3b\x16\xcc\xbe\xef\xe9\xf3\x34\x69\x48\x1d\x3a\x32\x35\x79\x84\x3d\x5d\x3f\x7c\xa3\x4d\x5e\x38\xd6\xd1\x70\x27\x1d\x1d\xf3\xc8\x29\xa4\xba\x23\x64\x02\xa8\xee\x36\x72\x0b\x39\xb4\x0a\xaa\x13\x73\x6c\x9b\x45\xee\xc3\x84\x5c\xcf\x5d\x2d\x6b\x6c\xf7\x12\x3e\x44\x25\xc2\x15\xf4\x5a\xa6\x3b\xd2\xa5\xd8\xfc\x59\x62\xff\xb0\x9b\x5c\x91\x6d\x7c\xef\xe2\xd0\xae\x2b\xa5\xa9\x60\x96\xb5\x9f\x86\xf6\x7d\x57\x71\xcb\x40\xa6\xf9\x99\x21\xa5\xc9\x3a\xa3\x4c\x27\xc8\x31\x72\xb4\x0e\xfc\xbf\x91\xdc\xd0\x1c\x63\xcc\xce\x7a\x71\xa8\xa8\x8c\xed\xd8\x83\x05\x4c\xfd\xbf\x07\x52\xff\xb3\x0d\x19\x26\xab\xee\x0d\xf7\x76\x08\xf6\x56\x22\xa0\x6b\xe9\xef\x34\x02\xc8\x47\xc9\x61\x05\x40\x5e\x4b\x87\xab\xb7\x67\x01\x9e\x79\xdf\xf3\xdb\x33\xa6\x5b\xcc\x43\x82\x31\xe5\xd1\x1b\xe7\x48\xea\xa0\x32\x81\xb1\xda\xe0\xa2\x73\xc2\xad\xce\xe0\xb2\xee\xb7\xd6\xdb\x6c\x72\x35\x72\x4e\x7a\x2e\xa1\x41\x0c\x47\x4d\xb8\xa4\xbb\x0e\xad\x30\x52\x48\x62\xf3\x07\x57\x99\xdf\xef\x22\x66\xda\x28\x4d\xd2\xd5\xda\xe9\x7c\x1c\xfa\x98\xa1\x49\x5f\x91\x35\x9c\x90\x1d\x70\x14\x5f\x3e\x7f\xac\x15\xab\x5e\x99\x6c\x55\x4c\x57\x2e\x4d\xe1\x29\xa6\xbe\x2e\x66\xf8\x67\xb7\x67\x5b\x07\xcc\x7d\x9c\x6d\xa5\xa3\x11\xb9\x2e\xc5\x58\x72\x44\x25\x6d\xf3\xd0\x36\x0f\x6d\xf3\xd0\x36\x8f\xc7\x8d\xcd\x43\xc7\xf1\xeb\x38\x7e\x6d\xf3\xd0\x36\x0f\x6d\xf3\xd0\x36\x8f\x8b\xc2\xe6\xa1\xe3\xf8\xb5\x11\x45\xc7\xf1\x5f\xa0\x38\xfe\x4f\x5c\x4d\x46\x3a\xad\x53\x8d\x79\x14\x95\x6a\xd5\x73\x5e\xe0\x7a\xc1\x7c\x6c\xfe\x87\x6d\x3e\xda\xdd\xaa\x9c\xd8\x4f\x75\x96\x5b\x51\xad\x29\x8c\x7d\xaf\x53\x86\xc5\x7d\x4b\x1d\x96\x28\xe3\x9f\xd5\x69\x17\xf3\x71\x9a\x6a\x7b\x1c\xe6\xa4\x79\x7c\xe5\x75\x89\xf8\xb2\xe7\x38\xe8\x76\x92\xe8\x51\x83\x38\x1a\xc4\xd1\x20\x8e\x06\x71\x34\x88\xa3\x41\x1c\x0d\xe2\x68\x10\x47\x83\x38\x1a\xc4\xd1\x20\x8e\x06\x71\x34\x88\xa3\x41\x9c\xc7\x03\x88\xf3\x23\x42\xf6\x0e\x3a\x55\x6f\x70\xb1\x69\x01\xc1\x6a\xe8\xca\xda\x81\x1c\xb6\x31\x3f\x4b\xec\x77\x74\x93\x6d\xa5\x30\x82\xfa\x17\x4f\xe1\xee\x81\xfc\x31\x1e\x89\xa9\xd0\xed\xe3\xcc\x7b\x2c\x8c\xe8\x19\xa5\xe6\xd3\x54\xe8\x72\xb5\x7d\x9d\x1d\x04\x6f\x25\x37\x93\xe1\x3a\x07\xc1\x3e\xb2\xbb\xa9\xf7\x09\x9b\x40\x71\x71\xa8\xc8\x47\x73\xec\xab\x46\xf3\x50\xea\x43\x08\x99\xec\x27\x7b\x01\x32\xe9\x27\x2b\xe8\x98\xdc\x8e\xde\x81\x37\x91\x83\xa9\x77\xe0\xca\x7a\x18\x41\x7f\xc0\x61\x72\xa3\xe2\x0f\xb8\xa2\x2e\x04\x12\x33\xd9\x1e\x89\xb9\xce\xbc\x46\xf5\xcc\xe3\xa8\x8c\x6d\x73\xf8\x45\x8c\x49\x57\x79\xd5\x1e\x7d\x1b\xe4\xd1\xd7\xb2\xfc\x10\xa7\xbf\x4b\xa1\xfc\xd0\xb1\xf7\xbf\xf7\x3a\xf2\x27\xdb\xc9\xb5\x39\xe7\x76\xcc\x0b\x5c\x1a\x9d\x09\xfd\x5a\x85\xce\x00\x2b\x37\x7f\x7d\xbb\xfd\x6d\x63\x9a\xf2\xd3\x03\x42\x28\x34\xb2\x16\xa1\x95\xe4\xf9\x8c\xd0\x4f\x57\x69\x10\x27\x4e\xe9\x6c\xd1\x1a\xb1\xc6\x32\xcd\x60\xfb\x41\x1f\xb5\xe6\x68\x99\x69\x11\xa0\xc5\xf1\x72\x5c\x8e\xd8\x6b\x1a\x71\x9a\x51\xde\x72\xfc\x38\x44\x71\x3a\x55\x35\x23\x3a\xcf\xee\x54\x04\x4f\x2c\xc6\x0f\x7c\x9a\x14\xb3\xdf\x8c\xa5\x22\x15\x2e\x05\x34\x8a\x17\xbc\xaa\x55\x81\x7d\x97\xaa\xd4\xcc\xc4\x09\x2f\xa8\x9d\xb3\x22\x0a\x8a\x3a\xd3\xd9\xcf\x1b\xdb\xf1\xf5\xc9\xf1\xf7\x1b\xdb\xc9\x56\xdc\xcf\xcf\x19\xbf\xb2\x95\xbc\xa6\x40\xb6\x96\xe3\xd9\xe5\x2a\x35\x5f\x56\xb0\x7f\x60\x1c\xf6\x7c\x1a\x2f\xc7\x09\xad\x40\x0d\x33\x36\x11\x98\x54\xd1\x3a\xc9\x89\xdd\x61\x2a\x66\xa6\x4d\xaa\x12\x71\x60\x65\x21\x4c\xad\x00\xc1\xbc\x85\x6d\x8b\xd6\xc4\x39\xa7\x52\xf5\x69\x3c\x6c\xd9\xf4\x5c\xb2\xdf\xee\xb7\xec\x73\xe5\x98\xfd\x27\x48\xca\xb1\x5d\xb4\x26\x2b\xec\x86\xf2\x98\xa0\xe4\x05\xa9\x9a\x30\x47\xf9\x0b\x5c\x90\x13\x32\x5e\xd1\x3a\x09\xb8\x40\x50\x0e\x87\xe5\x61\x89\x28\x13\x8d\x68\x2c\x8c\x27\x47\x27\x46\xc6\x07\x29\xff\xf2\x60\x65\x39\x7e\x81\x3f\x80\xbb\x3d\x50\x75\x07\xa7\x27\x46\xc6\x4f\x4e\x14\x2b\x2e\xac\x0b\xd2\x13\xf9\x63\x83\x6c\x67\x82\xde\xe9\xc0\x5f\x36\x3f\x61\xd8\x1f\x30\x4e\xf3\x5a\x6f\xc3\x19\xc1\xb4\xec\xf8\x31\xb5\x76\xb3\xa6\x83\x4b\x91\x97\xd0\xde\xa2\x35\xcd\xdf\xb3\x16\x68\xc4\x99\x26\xd4\x3f\x83\x75\x91\x0f\x63\x0e\x11\x78\x81\x85\x84\x79\x92\xad\x71\xbc\xbe\x13\xda\x41\x84\x8c\x42\x7e\xc5\x20\x3b\x62\x5a\x8a\x68\x32\x4d\xcb\xe6\x2f\x18\xe4\x40\xdb\xeb\xee\x44\x58\x72\xfc\xd3\x40\x28\xd3\x4c\x65\xa3\x41\x89\xda\x77\xa6\x0b\x51\x0d\xbd\x20\xe1\xe6\x23\xec\x5a\xe8\x3a\x9c\xec\xd9\xfc\x14\xd0\x1c\xb0\x15\x26\xcd\x87\x41\x00\x1a\x51\x08\x47\x6b\x06\x8e\x16\x79\xbd\x41\x24\x89\x9a\x3f\x6b\xd8\xf7\xf3\xc3\xe2\xb9\xf2\x45\xd4\x87\xcb\x48\x61\xe2\x71\x20\x4e\xee\xc6\x50\xc2\x6f\xef\x20\xc5\x9c\xb5\x99\xa6\x52\x92\x1a\x0b\x83\x24\x0a\x99\xca\x89\x51\x4c\xe6\x7f\x6e\xb7\xcf\xb4\x78\x6e\x45\x29\xdb\x01\xd1\x19\x55\x03\xa5\x02\x28\x53\x83\xe4\xeb\xb0\x98\xf8\x3e\x3b\xc5\xfc\x49\x9c\x39\xc5\xaf\xd8\x4e\x1e\x06\x8a\xc5\x67\xe6\xe7\x0c\x73\x8b\x17\x24\xfb\xf6\xda\x1f\x34\xf8\x48\x40\x07\x67\x9f\xab\x84\xa0\x60\x96\x50\x1b\x09\xe7\x68\xb4\x48\xdd\x0c\x20\x87\xed\x73\x29\x51\x11\x18\xbd\x70\xd0\x0d\x4b\xf1\x60\x29\x0c\x98\x10\x15\x0f\x2e\x85\xd1\x59\x3f\x74\x5c\xf8\x89\x8f\x38\x1e\x54\x66\x92\xfe\x7c\x35\x53\x8b\x06\xbc\x78\xc0\x19\xc8\x7d\x0e\x94\xcb\x35\x02\xf2\x0b\x06\xb9\x42\xe2\x31\x62\x36\xe6\x0b\xc5\x0c\xcb\x8c\xb1\xa6\xc3\x57\xf1\x22\x3e\x71\x38\x9e\xcb\x88\x2a\x0a\xb5\xa9\xe2\x05\xec\x28\x2e\x73\xfd\xa3\x97\x6b\x3e\xa0\x0c\xe6\x2e\x7d\x66\x48\xaf\x2a\x10\xc2\xde\xc3\xb3\x63\xfe\xc8\xb0\xef\x9a\xce\x6e\x2a\x47\xef\xd3\xd1\x84\x73\x31\x8d\x16\xb9\x38\xd6\x62\x8f\x7b\xe2\x0c\x41\xd0\xe2\xfb\x8d\x6d\x64\x8b\x13\x45\xce\xf2\x47\x8c\x31\x32\x42\x6e\x6b\x7b\x6e\x73\x69\x6f\x4c\x0c\xf7\x51\xa3\x87\x3c\x3d\x23\x6c\x42\x1d\x44\x5e\x96\xf5\x2c\x5d\x66\x52\x27\x63\xea\x84\xb5\x7c\x5a\x4e\x4b\x5e\xca\x75\xd9\xdc\x6e\x6e\x85\xb7\x08\x79\xa3\x41\xae\x2c\xd7\x7c\x7f\xf9\x04\xbb\x70\xa8\x2b\xb7\xe9\xa7\xc5\x36\xdd\x97\xdd\x26\xa6\x0c\xa1\x90\x05\xfa\x30\x22\xce\x56\x85\xf5\xcf\xe5\x2d\xf1\x1b\x17\x55\xaa\xa1\x6b\x25\xb4\x52\x65\x0b\x9b\x8a\x93\xed\xb7\xea\x15\x06\x31\x71\xed\xa9\x7b\x04\x4c\x60\x20\x59\xd7\x60\x5c\x37\xec\xb7\x9f\x7f\xba\xe1\xa1\x15\xd1\xb2\xcf\x6d\x26\xd4\x9a\x4f\x7f\xe7\x9f\xad\x3f\x41\xf8\x7e\x47\xa3\x29\x91\x27\x00\x31\xca\xf5\x99\x16\xeb\x73\x4b\x76\x7d\x90\x64\x25\x09\xaf\x88\x3a\xff\xc5\x20\x33\x29\x59\xa4\xae\xf8\x03\x4e\xd5\xe3\x96\x54\x69\x80\xce\x34\x90\x91\x03\x13\xe7\x12\x1a\x05\x8e\x3f\x1e\x96\x00\xa0\xc5\x35\x7b\x93\x61\xdf\x95\xfb\x84\x49\xed\xe1\x12\x07\xf6\x68\x50\x02\x5c\x2c\x80\x20\x00\xd6\x36\x15\xa6\xd8\x34\xe0\x73\x2e\xd3\x2f\xd4\x2e\x8a\x19\x7e\xb6\x87\xec\x22\x3b\x51\xb1\x87\xdb\xc6\xdc\xa9\xb2\x64\x93\x74\xd5\x22\x3f\xfb\xdb\xe7\x76\x90\x5d\xcd\x35\x36\xf3\xbd\x3b\xec\xb7\x1b\xfc\x0f\x2b\xf1\x68\x6c\x85\x41\x8a\xcc\x85\xc2\xf4\x77\x88\x8f\x10\x2e\x88\x7e\xcb\x01\xaa\xf3\x62\x6b\x2e\xac\x05\x08\x57\x5a\x41\xe8\x52\x26\xe4\x38\x56\x5c\x5a\xa0\x6e\x8d\xad\xbe\x35\x2e\x1d\x24\xd8\x7d\x34\x54\x3c\xd8\x6f\x55\xe1\xe6\x91\x30\xbb\xf0\xd3\xb0\xe2\xda\x9c\x5c\x0e\x71\x0e\x84\x8f\xc4\x79\x63\x6b\xe2\x44\xf3\x34\xc9\x2c\xc6\x5b\xb6\x91\x17\x11\xfe\xc0\x8c\xc9\x9e\xb6\xe7\xbf\xfe\xca\xbe\x8d\x91\x16\xbe\x9f\x01\x23\x97\xc3\x9a\xb5\xe4\x04\xb0\x00\x6c\x7c\x02\x51\x89\x13\x27\x70\x9d\x48\x18\x15\x8a\xe4\x37\x0a\x84\x38\x55\x8f\xe3\x1f\xe6\xaf\x14\xec\x5f\x28\x8c\x4c\x4d\x0a\xd3\x1a\xea\x2b\xb1\x8a\x7d\x52\x17\x96\xa7\xe2\xe0\x99\xf1\x94\x4b\x2f\x0d\x3f\x0d\xc4\x07\xa4\xd1\x80\xab\xa9\xa5\x30\x58\xa4\x91\x62\x0b\x17\xbd\x49\xd0\x87\xb3\x57\x46\xf1\x40\x61\xa0\x8c\xa1\x8e\xa5\x18\xda\x33\xea\x2c\x2a\x9b\xb9\xb7\xda\xbc\x97\x08\x09\xa1\x14\x56\x2a\xb5\xc0\x4b\x96\xf1\x12\xf3\xe6\x6a\x49\x18\xc5\x83\x2e\x5d\xa4\xfe\xa0\x53\xf5\x06\x60\x6c\x01\x22\x44\x15\xf7\x6a\x89\x39\xa9\xc4\xf8\xae\x02\xe9\x06\xf5\xff\xad\x05\xfb\x35\x85\xe3\x6c\x69\x3d\x8e\x40\x31\xfa\x13\xa6\x48\xbe\x20\x82\xdf\x4d\x4f\xcc\xcc\xa6\x47\x05\x16\x8d\xef\x56\x2a\x30\x64\xed\x2b\x20\x21\x63\x4b\x89\x8c\xd2\xc0\x05\xb9\x4c\xb5\x70\xc7\xb5\x39\x00\xee\x64\x59\xe3\x24\x2c\x5a\x63\x4e\xc0\xe1\x00\x8e\x68\x17\xad\xc9\xc0\x1a\x73\x2a\xd4\x1f\x73\x62\xba\xde\x0b\x05\xe5\x90\x01\x14\xc9\x2c\xd5\x1f\x18\x64\xbb\xb0\xc9\x99\x1f\x30\x56\xe5\x3c\x83\xf4\x7e\x92\x26\x8e\xcd\x44\x2c\x95\x76\x7b\x62\x69\xf1\x5b\xef\x09\x89\x7e\x1f\x35\x4e\xb7\xc7\x81\xfa\xcd\xbe\x01\x2b\x45\x7f\x2c\x2b\x8b\xff\x58\x96\x8a\x12\x91\x47\x9e\x42\x7a\xd4\x70\xd4\x6a\x55\xb0\xe6\xbd\x10\x29\x4f\xcb\x35\x7f\x86\x26\x33\x55\x5a\x32\x1f\x7a\x8a\x7d\xe3\x88\x55\xf7\xab\x90\xf5\xb8\x9e\x54\x52\x42\xbe\x95\x96\x4c\x9c\x14\x56\xe2\xf3\xc6\x76\x71\xbb\x9e\x37\x76\xb2\x5b\xc2\x2b\xd1\x53\x4e\x85\x66\x58\xd1\x27\x7f\x9c\xfc\x6e\x37\x79\x72\x35\xe4\x48\x03\x63\xdf\x53\xa1\xef\x95\x96\xcd\xb7\x77\xdb\xaf\xeb\xce\x79\x20\x6e\xa9\xd8\x5a\x08\x97\x90\xdd\x29\x4e\x08\xc2\x8a\x22\x6c\xac\x71\xc9\xf1\x19\x41\xf6\x0b\xc7\xa0\xaa\xef\xc0\x75\x02\x2f\x86\x01\xb0\xdf\x18\x0c\x57\xd0\x80\xb5\x67\x8f\xdd\x70\x29\x40\x15\xdb\x45\xed\xcc\xaa\xe2\xd7\xbd\xd8\x7a\xfe\xe9\xc8\xa5\x11\x93\x49\x1c\x77\xf9\xf9\xd0\x73\x44\x1b\x47\xe2\x05\x96\x17\xb0\x3f\x10\xb0\x62\xef\x58\xbb\xab\xa1\x3b\x20\xb0\x7d\xf6\xef\xa1\x7e\x8b\x26\xa5\xde\x8c\xb1\x11\xaf\x60\x54\xf4\x96\x1c\x8f\xb1\x9d\xc4\xf3\x2d\xea\x94\x16\xc4\xfd\x81\xb7\x39\x47\x08\xb8\x91\x0c\x3c\xeb\xee\xac\x9f\x44\xbf\x10\x76\x70\x70\x08\x4c\x4b\x3f\x8b\xb0\x5a\x0d\x63\x8f\x09\x40\x6c\x78\x38\x61\xc7\x07\x1e\x08\x08\x9d\x32\xe9\x29\x27\x72\x7c\x9f\xfa\xcf\xe7\x7e\x23\x30\x3c\x0e\x2f\xf3\x4b\x07\x74\x33\xd6\x06\x54\x7c\x2c\x5a\x8e\x80\x3a\x78\xec\xe0\x5e\x08\xdb\x22\x9b\x99\x97\xe2\x58\xfc\x29\x1b\x32\x76\xcd\x53\x30\xa2\x09\xcd\x05\x03\x05\x53\x0c\x8a\xea\x61\x7f\x75\x41\xd1\x51\x1e\x28\x08\xd1\xe7\x3b\x46\x54\xa7\xa3\x88\x21\x34\x6a\x25\x42\x06\x43\x53\xc7\x2c\x27\x59\x58\x89\x98\xf2\x25\x13\x7d\x09\x9f\xa5\x20\xa6\xd2\x00\xbb\x0c\x6d\xd8\x85\xeb\x04\x89\x97\x8a\xe3\x12\x82\x11\x5d\xa2\x37\x8e\xe2\x2d\x29\xfb\x05\xe0\x06\xa4\xd6\x8c\xe5\x12\x95\xd3\x64\x19\x0c\x86\x0a\x44\xd1\x2f\x48\x12\x2e\xaf\xa1\xac\xa8\xf6\x1b\x05\x72\x65\x44\x17\x3d\x76\xf6\x8f\xa2\x19\xeb\x84\x57\xf1\x12\xf3\xf5\x72\x75\xfe\xcb\xc8\x6b\x20\xb5\xb9\x1c\x87\x0a\x6c\xcd\xc5\x6b\x81\x9e\x56\x1c\x0f\xa1\x28\x49\x4c\x0a\x27\xe8\x89\xe5\x6b\xa9\x35\x6d\x16\x24\xec\xec\xaf\x62\xc2\xa8\xc2\x00\x1c\x2c\xbe\x86\xce\x6b\xfc\xa2\x42\x20\xc8\x51\xcc\x5e\x60\x7a\xa0\x6e\x03\xa7\xe2\x8c\x2f\x7b\x78\xa5\x7f\xdb\xd0\x9e\xec\x7a\xbd\xab\x40\x24\xcb\x32\x7f\xb9\x40\x6e\x5f\xc5\x75\x71\x42\x75\x5e\xb1\xff\xc2\x90\x8e\x32\x70\x47\x83\xd6\xc1\x7d\x3d\xc2\x45\x1a\x29\x9a\x0a\x97\x4e\xd2\x93\xc2\x49\xc2\x2a\x21\x3c\x36\xc9\xbd\xd2\xd2\x06\xaa\xd2\xd2\x13\x4b\xbf\x9a\x15\x2a\xd6\x6c\x18\x8b\x1e\x5d\x1a\xe4\x95\xe7\x07\xd8\x99\x1c\xe0\x36\xe9\x41\xec\x74\xf0\x6a\xf8\xef\x80\x98\x4c\x4c\xfe\xbd\x40\x54\x3e\x6e\x7e\xbb\x60\x3f\x52\x50\x7e\x10\x14\xa4\xe2\xc1\xfc\x31\x4e\x77\x9e\x7d\x17\xc8\xc8\x8b\x33\xd7\x06\x1a\x03\x45\xdb\x46\x08\xb4\x8e\xb8\x90\x65\x00\x17\x04\x3b\x01\x58\xd7\x85\xa1\x91\xd7\xd3\x97\xa7\x27\x1d\x49\x52\xb4\xa6\xd8\xd2\x33\xa9\x75\xfc\xd4\xcc\xe0\x42\x18\x27\x80\x24\xe3\xe8\xca\x21\xd3\x39\x70\x95\x9d\x84\xb1\xc0\x61\xe0\xd0\xe2\xca\x1b\x40\x9e\x53\x54\x66\x5c\xe4\xe4\x55\x8c\x17\x4b\x45\xee\x43\x5d\xf4\xc3\x92\xe3\xf3\x3b\xc1\xce\xe9\xc0\x46\x2b\x00\xbb\xd4\x24\xb8\xa9\x4c\x2e\xab\x84\xa5\xac\xee\x7d\x05\x22\x2f\x54\xf3\xad\x85\x0e\xa4\xf6\xa9\xd0\x15\xbc\x87\x1d\x0c\xfb\x1f\x0d\xa9\xee\xf2\x9d\x52\x65\x77\x61\xf5\x8c\x53\x3a\x53\x4f\xbb\xbc\xd4\xca\x8c\xd7\xd5\xca\x65\xaf\x04\x92\x60\xca\xc4\x22\x0a\x8e\x3d\x25\x10\xfc\x26\xc4\x5d\x15\x27\x4e\xa5\xca\x3d\x87\x72\x26\x8b\x60\x66\xcd\x2f\xb3\xff\x02\x5d\x64\xd9\x25\xe7\x8a\xb5\xc0\x7b\x41\x8d\xa6\x7b\x2a\x85\xd3\x88\xa2\xeb\x59\x5d\xbf\x45\xf2\x8f\x06\xb9\x1c\xc5\xd0\x19\x01\x2e\x3c\x6c\xb4\x80\x3a\x9a\x89\x44\x77\x64\xfa\xb0\x5f\x67\x64\x3b\xcd\x18\xc9\x32\x43\xc8\xbe\x98\x5d\x4c\x36\xc5\x70\x19\x21\x48\xec\x0f\x29\xb3\x91\x8f\xa2\x50\xe2\xa4\x6c\x13\x68\xc7\x05\x0c\x5d\xde\x55\xe4\xbf\xba\xc8\x95\x88\x5e\x8e\xf9\x8e\x57\x11\x0f\x62\xf3\x5b\x5d\xf6\x2f\x77\xe5\x3d\xe1\xac\x89\x3b\xee\x95\xd8\x33\x7e\x0c\xa4\xa4\x00\x2a\x38\x8e\x51\xa8\xe1\x78\x2d\x36\xa1\xd6\xbc\x03\x59\x71\xaa\x55\x26\x88\xd4\x1d\x4a\x0f\x8d\xed\xfc\xb3\x5e\x00\xee\x1e\x7c\x8d\xc4\xb5\x82\x0b\xaa\x9e\x62\x50\x9e\x8b\xd6\x04\xb8\xde\xc0\xbb\xb8\x60\x1e\xf7\x50\x05\xbe\x81\x04\x23\x40\x39\xa6\x93\x4b\x08\x68\xf7\xdc\x32\xf0\xa6\x5e\x8e\xf4\x02\x3e\xce\xba\x60\xad\xa4\x5d\x45\x6c\x42\x22\x25\x81\x91\xbc\x8f\x25\xce\x59\x0a\x56\xa4\x12\x75\xd1\xdb\x0d\xdd\x3e\x97\xa5\x51\xa5\xae\x9f\xfe\x3a\x27\x40\x36\x92\x0c\x14\xd7\x3a\x83\x8c\x3c\xd4\xdc\xd2\x1a\x24\x67\xd2\x6d\x25\xff\xba\x93\xec\xaf\x4b\x37\x93\xfa\xe7\x0b\xe0\x7d\xa6\x06\xc7\x7d\xa4\x54\xa2\x71\x8c\x59\x5e\xcc\x8f\xee\xb4\xff\xce\x68\xf6\xd4\x2a\x2d\xd0\xd2\xd9\x58\x7a\xe9\x85\x11\xdc\xc9\x8e\x55\x8b\xf1\x2f\xd0\x3f\xc0\xf1\xa9\x4a\xa3\x72\x18\x55\x98\x0a\x8e\x96\x66\xdc\x55\x14\xaa\xa4\xb9\xae\x68\x1d\x75\x16\xd1\xc7\x49\xfe\x86\x36\xbf\xd4\xd7\xc2\xaa\xc0\xca\x82\x43\x76\x69\xc1\x62\xd2\x33\x05\x97\xd3\xf9\xc8\x09\x92\xc6\xf7\xb8\x84\x8a\xe6\x55\x74\x24\x8b\xd9\x70\x78\xfa\xad\x18\x27\x81\x16\xab\x6e\xc6\x8a\x33\xfa\xc7\xa7\xb7\x6b\x2c\x42\x63\x11\x1b\x85\x45\x1c\x57\xa0\x88\xd5\x85\xf1\xa4\x48\x04\xf9\x17\x83\x00\xfd\x9a\x7f\x6f\x90\x91\x96\x99\xa6\x32\x47\x3f\xe7\x5c\x83\x34\xf0\x0e\x03\xa4\xe5\x85\xd0\x87\x8b\x27\xcd\xe3\xe6\xcc\x89\x68\x07\xe1\xb1\x39\x47\xd9\x2e\x52\xb6\xb3\xb8\x94\x00\x03\x14\xd3\xa3\x28\x7c\x16\xe8\x0b\x6a\xe8\x5a\x2a\xc4\x40\x7c\xbc\x1c\xd6\xf8\xa5\xa5\x74\xea\xcc\x33\x26\x9f\x14\x2d\xa6\xdd\x70\x87\x5a\xd4\x42\xb8\x50\x45\xdd\x22\x79\xa7\xc1\xd6\x12\x6c\x60\x6f\x36\xc8\xd8\xda\x66\x0d\xfd\xd8\x77\x70\x9b\x19\xf8\xe0\xfa\x3e\x6a\x2f\x8d\xce\xfb\xe9\xbd\x2e\xb8\x9f\x3a\x78\x46\xf0\xfc\x7a\x44\xa6\xf8\xa8\x11\xb5\xc7\x6c\x4e\x9b\x27\x25\x66\x93\x1b\x42\x25\x50\x9c\x66\x0c\xb9\x1e\xd6\x79\xe9\x0e\x72\x55\xce\x1d\x31\xc1\x4f\xc9\x4c\x6d\x2e\xa6\x89\xf9\xc8\x76\xfb\x03\x5d\xd9\xdf\xf0\xc4\x22\xfb\x46\xf7\xb5\x88\xc6\x31\xb8\xc6\xf0\x28\x9a\x4a\x85\xa9\xe4\xe8\x85\x5e\x0d\xa3\x84\xfb\xa8\xd0\x73\x55\x07\xb0\x76\xfe\x48\x1c\x48\xa9\x68\x8f\x39\x51\x42\x63\x8f\x5d\x09\x51\xe8\xd6\x4a\xd0\x6a\x44\xf6\x7f\xce\x9a\xc2\xce\x0e\xab\xb0\x38\x5c\x13\xc3\xc4\xb2\x5e\x48\x2c\xcb\x4a\x9b\x0f\x5b\x77\xbf\xd0\xf6\xaa\xf6\xb0\x65\x0f\xed\x29\xb2\xff\x15\x87\xec\x17\xf5\x5b\xd9\x1f\xf7\x16\xf7\xda\x2f\xba\xa7\x1f\x5e\x85\xde\x87\xd9\xbf\xd8\xab\x8c\x04\x59\x3b\xc7\xee\x67\xa2\x78\x94\xd8\xc3\xd6\x8d\x37\x1c\x3c\x00\x5d\x88\x87\x73\xca\xc3\x7d\x7b\x6e\x7a\xd1\x3d\xc4\xb2\x5e\x44\x66\xa5\x73\x24\x78\x1b\xd4\xcf\x96\x3b\xf7\xb3\x4d\xa1\xae\xe5\xc4\xc3\xf0\x75\x67\xd8\xba\xdb\x92\x23\x1d\x66\x9f\xea\xb7\xe4\x20\xe1\x6f\x8b\x0f\x74\x2e\xdb\x74\xdf\x9e\x9b\xd4\x96\xfb\xf6\xdc\x64\xdd\x93\xb9\xa8\x7e\x69\x0b\xf9\x6f\x64\x0b\xec\x84\x19\xdb\xfb\xd8\x3c\xb9\x8a\x1e\xab\x36\x41\xe1\xd5\x89\xfe\xbd\x93\x53\xe9\xd6\x66\x64\x8d\x21\x32\x48\x06\xda\xca\x1a\x82\x66\xd8\xc7\xc8\xb7\x0d\xb2\x43\x76\x66\x3e\x62\xd8\x6f\x32\xd4\xee\x39\x28\x14\x96\xcb\xf2\xa8\xe0\x18\x60\xc8\x69\xac\x50\xc5\x89\xce\xc2\x8a\x21\x84\x25\x70\x96\x74\x65\xd3\x68\x3e\x40\x06\x00\x68\xb3\x62\xa7\x8c\x02\xa5\x1f\x3a\xae\x35\xe7\xf8\x4e\x50\x82\x99\x2b\xb1\x08\x4c\x96\x4e\x3c\xdf\xbb\x3f\x2b\x56\xed\x27\x7b\x3b\xd0\x95\xc4\x54\x39\xe9\x91\x77\x17\xc8\x15\x41\x98\x00\xc2\x27\xc9\xd1\x7c\x5d\xc1\xfe\xe3\x95\xcc\x9a\x69\x30\x6c\xd2\xec\x2a\x4a\x81\x8b\xba\x25\xb0\xe6\x68\xc9\xe1\x56\x1d\xee\xcc\xcb\xda\x2f\xd3\xc4\x62\x43\x8e\x17\xa8\x2b\x63\xbc\xfa\xf1\xb9\x34\x15\x96\x1d\x8f\x71\x30\x07\x7a\x62\x62\x0a\x17\x77\x00\xcf\x6c\xd2\xd4\x67\x87\x4d\xb6\x5c\x87\xb5\xfa\xe7\x02\x39\xb3\x36\xeb\xe0\x58\x2d\x4e\xc2\x8a\x08\xf0\x03\x57\x3e\x34\x10\xfe\x62\xc1\x3e\xd9\xec\x61\x56\x85\x59\x4c\x7f\xaf\xd0\x64\x81\x29\x31\x8c\x5e\xb2\x2f\xc7\x59\xa3\xe0\x87\x0d\xf2\x41\x83\x3c\x31\xac\xd2\x80\x09\x7c\xfb\x66\x40\x0c\x33\xdf\x66\x90\xbb\x9b\x2d\xc2\x6a\x66\x77\x6c\xe6\xf4\x29\xec\x7a\x2a\x0a\xab\xb1\x3d\x72\x3a\xfb\x41\xc1\x3a\xf9\xcf\xd6\xe2\x3e\x21\x5e\xa2\x9f\x12\x9f\x1a\xdb\x3c\x7e\x67\x92\x0f\x5e\x46\x9a\x28\xaf\x43\xc5\xe9\xd0\xf7\xbd\x60\x1e\xf5\xcf\x71\xca\x34\xcd\x0a\x0d\x12\xf3\xc5\x97\xd9\x07\xe1\xca\x47\x87\x19\xa6\xb5\x65\xa0\xd1\x39\xba\xe0\x2c\x7a\x21\x42\x7e\xd8\x07\x17\x9e\xb2\xab\xf6\x3b\x3b\xc9\x17\xb6\x90\xcb\x2b\xce\xb9\x3b\x02\xc9\x79\xcc\x8f\x6c\xe9\x54\xbe\x61\x87\xb4\xc8\x8e\x7a\x12\x15\x27\x83\xe4\x74\x34\x83\xb0\xc8\x0f\xba\x67\x73\xe1\xc7\x14\x2e\x13\x11\x55\xe9\x67\x05\xda\xcf\xe6\xc1\xc7\x6a\x9d\x01\x01\x94\xb7\x65\xfa\xc8\x5c\x1c\xfa\xb5\x44\xda\xc2\x77\xd3\x73\xc3\xd6\x01\x1e\x9b\x5a\xa5\x11\x3b\x1f\xce\x3c\x20\x56\x62\x29\xe0\x93\xd0\x6e\x68\xcf\xb5\xbd\x45\x6b\xa4\xae\x0b\x2f\x13\x45\x01\xd2\xa9\xd2\xd1\xdc\xb2\x15\x85\x35\xb4\x0c\x0b\x33\x82\x87\x57\x06\x97\x49\xf7\x58\x5e\xd9\x3a\xe9\x9c\x9b\xa9\x45\xf3\x00\xc6\xec\xc9\x46\x27\xec\x3d\x70\xad\xf4\x6c\x1b\x46\x08\x20\x11\x41\x2f\xe8\xca\xbf\x6f\xcf\xb5\x08\xec\x87\xbe\x6b\x71\xdb\x3f\xa8\xe3\x38\x6d\xc0\xd2\x5d\x04\xd3\x93\xd0\x3a\xb8\xe7\xda\x86\xe9\x79\x95\x0a\x75\x3d\x27\xa1\xfe\xb2\xf8\x02\xad\xdb\x77\x64\x3b\x71\xd1\x3a\xcd\x14\xdc\x80\x2e\xa9\x66\x04\xc7\x5d\xee\xef\xe0\xeb\xdc\x75\xb7\x9f\xc3\x6b\x08\x79\x09\xfb\x44\xad\xca\x21\xbb\x25\xa5\x97\x7e\x8c\xa2\xc1\x6d\x15\x21\x2d\x61\xe2\xf8\xf5\x34\x91\x52\x81\x83\xc1\x6b\x18\x0c\xd4\x40\x12\x99\xe8\x86\x9c\xa5\x28\x92\x6f\x6d\x21\xdb\x2b\x7c\x3b\xcc\x2f\xaf\x99\x92\xdf\xb0\xa5\x43\x4a\x16\x06\x7f\x97\x09\xdd\x3c\xfc\xaf\xd1\x52\x01\x63\xdc\x08\xb2\x6e\x46\x96\xca\xb9\xe6\xc4\xb9\xfa\x03\x50\xab\xae\x9a\xb4\xb3\x64\x51\x47\x5c\xb5\xea\x0a\x28\x98\x7b\x14\x37\x25\x27\x46\xc6\xe0\x6a\x2e\x48\xdc\x0d\x61\x4d\xe8\xb9\x12\xa5\xae\x35\xb4\x2f\x87\x68\xf0\x50\xb0\x37\xe1\x0d\xb8\x6c\xe7\x28\x0d\xac\xb3\xa0\x55\xf4\xb7\x1d\xbe\x3c\x19\x75\xe4\x9e\x47\xea\x51\x0d\x63\x93\x18\xa1\x07\xcb\x18\xe1\xd5\x8c\xce\xc1\x99\x28\x77\xc8\xe4\x1b\xdb\xc8\x75\x39\x17\xfa\xb3\x6a\xe1\xdc\x72\x42\x33\xee\xcc\x1f\xde\x66\xff\x6c\xd6\x9d\x99\xb7\x42\xd7\x5d\x1c\xab\xef\xc4\xc2\x3b\xcd\x2b\x43\x2c\x9e\x82\xd3\x89\xf6\x02\x0f\xe3\x6b\xda\xd2\xd7\x38\x8c\x9a\xb8\x1a\xf3\x2c\xea\xcb\xe7\x8d\xad\xd8\x5f\xe6\x4a\xfa\xf9\xad\xe4\xcd\x06\xd9\x9a\xd0\xc0\x09\x12\xf3\x35\x86\xfd\x52\x63\x16\xfe\xcd\xbe\x22\x16\x09\xb1\xa8\xec\xa8\x04\x48\x37\xea\x94\xce\xd2\xc0\xb5\xee\x90\xc1\xba\xee\x72\xe0\x54\xbc\x12\xa4\x37\xa8\x46\x21\xa2\xaf\xd4\xad\x9f\x55\xbf\x9a\x36\x42\x22\xdc\x55\xbf\x36\xef\x05\x2a\x12\xf0\x2c\xd2\x5d\x8b\x69\x64\x4e\xda\x37\xdf\x11\x23\x9e\x55\x71\xaa\x62\x14\x0e\xe8\x78\xec\x47\xf5\xa8\xc4\x34\xf2\x16\x4b\xd4\x29\x81\x35\x08\x40\x37\xb5\x4b\x97\xf0\xa5\x30\x9f\x63\x9f\x3c\xc3\xa7\xa3\x00\x31\xb0\x43\x12\xb9\x8d\x81\x67\xf8\x28\x71\x0a\x30\xbf\x6e\x31\x38\x3e\x9a\x31\x3b\x1c\x21\x5b\x40\x4d\x34\x6f\xb5\x87\x20\xb5\x79\xbb\xa1\xf3\x24\x12\xf0\x92\xda\xd1\x03\xaa\x03\xf4\xa2\xbd\xd0\xd2\xa9\xb9\x6e\x60\x28\x07\x01\xe1\x89\xfd\x61\x5d\x0d\x40\xf4\x83\x82\xf5\x15\x1b\x5d\xa9\x8b\x19\x9f\xe5\xaf\xc3\x20\x90\x94\xcc\x2f\x19\xf6\xa7\x8d\x69\xfe\x97\xea\x43\x2b\x03\x62\xc3\xc8\xaa\x30\x0d\xb0\xea\xa7\x43\x92\x2f\x70\x3b\x50\x26\x62\x58\x59\x7e\x27\x06\x97\xf5\x61\x20\xf6\xaa\xe3\x45\xd6\x6e\xd9\x17\x0d\x92\xc8\xc3\x38\x15\x2b\xa6\x55\x27\x4a\x43\x47\x98\xe6\xed\xc4\xbd\x5c\xb1\x70\x20\x46\x94\x7b\xf5\xb2\xb7\xc0\x6c\xcc\x07\xc0\xe4\x5b\x4e\x86\x99\x85\xee\x26\x7d\x79\xc0\xb1\x08\x92\x9d\xc1\x4b\xc7\x0b\xe6\x67\x69\x54\x31\xff\xac\xcb\xfe\x4d\x63\x24\x40\x08\xc6\xaa\xca\x50\xda\x58\x36\xb3\x12\x1a\x55\x10\x46\xa7\x31\x46\x52\xf3\xe8\x55\x4c\x6a\xc2\x1d\xec\xad\x25\xea\xcd\x2f\x24\xd6\x1e\x6b\xb7\x57\xa4\x45\x0c\x63\x74\xac\x20\x1c\x08\xab\x4c\x86\xb2\x82\x9a\xef\x77\xf0\x01\x25\xc0\x98\x77\xc4\x2d\xe4\xb2\xaf\xf3\xc6\x56\xfc\xd6\x79\x83\x54\x25\x85\x67\x38\xc2\x7f\x1a\x8c\xe0\x94\xa7\x66\x42\x86\xda\x6a\x36\xa7\x42\x97\x0a\x3b\x2e\x5b\x1c\xfb\xb6\x11\x74\xcf\x4b\x53\x1f\xd0\xa8\xd2\x9f\x1b\xef\x53\x0a\x23\x9e\x9d\x83\xcd\x08\xc7\x57\x24\x8b\x84\x0f\xd5\xf4\x85\xf9\xfd\xce\x3b\x71\x9d\xea\x3b\xc9\xb8\xaa\x66\x7b\x0b\xea\xc6\xd5\x2f\xd3\x64\x40\x2e\x95\xa1\x81\xa1\x3d\x75\x66\xed\xef\x15\xc8\x90\x32\x41\x1e\x7a\x2a\x75\x04\x64\x17\x23\x49\xe2\x94\x16\x18\xe3\xe5\x4c\xff\x63\x05\xfb\x11\x23\xff\x59\xf6\x7c\x88\x73\xa9\x18\xb1\x99\x54\x02\xef\x50\xb7\x68\x4d\xc3\x0c\x83\x70\x09\x03\x94\xa4\xd1\xe2\x0c\xbf\x0b\x84\x18\xc3\x5f\xb0\x16\x3d\x27\x75\xee\xe4\xbf\x46\x30\xcb\x72\x2d\xa9\x31\xfe\x40\x31\xca\x1e\x4c\xb4\x40\x0d\x5e\xe0\x7b\x01\x55\xad\x2d\x78\x2d\x4f\x9c\x73\x4a\xe0\x45\x1b\x50\xab\x42\xe1\x16\x15\x57\x2f\x4d\xb2\x9a\xcc\x69\x72\x92\x5c\x59\xad\x33\xa8\x80\x69\xfb\x80\xbd\xfb\x94\x62\xc5\x4e\xdb\x28\x1c\x09\x87\x99\x61\x96\x2f\x29\x90\xeb\x95\x55\xe7\x56\x2f\x76\x85\x89\x85\x9f\x0c\xe6\x99\xce\xcc\xfd\xfa\xbf\x68\xd8\x37\x66\x7e\x91\x56\xd8\x06\x3f\x7e\x39\x16\xde\x3e\x3b\x93\x97\x1b\xe4\x41\x83\x5c\xe6\x87\x8e\x3b\xca\xc1\x11\xb3\x46\xf6\x75\x10\x90\x91\xbe\xc0\xf1\xd1\x5b\xd5\xdf\x84\x59\xac\x59\x5c\x01\x5c\xfd\xa1\xe3\x0e\x08\x48\xa6\x48\x7e\x69\xe7\xfa\xa2\x01\xe3\x72\x06\xe6\xc7\x88\xfd\x7a\xa3\xd9\xd3\x2c\x81\x2a\x96\x86\x0c\x89\xd2\x73\xd5\x90\x47\x5f\xb3\xb1\x33\x75\x5b\xa4\x82\xb2\x26\x93\x18\x7d\x17\x4e\xde\x31\x33\xab\x04\x52\x21\x34\x6e\xdd\x5c\x94\xa8\xf7\xad\x45\xfe\x07\xdc\x72\xb7\xe6\x5a\x96\xde\xa0\x2d\x4b\xda\xb2\xf4\xd8\xb0\x2c\xfd\xa6\xb0\x2c\xfd\x0f\x83\x2c\xac\x27\xf2\xd5\xec\xac\x82\x01\xea\x26\x00\xa3\x52\xb7\x93\x05\xee\x7c\x03\xc6\xe5\x25\x47\xc4\xbd\xa4\x31\xf8\x8c\xe7\x56\xab\xd4\x89\xc8\x47\x52\xb3\xd0\x6f\x19\xe4\xbe\x4d\x19\x32\x72\xc7\x11\x61\x3d\xca\xb8\x7d\x38\xa5\xa4\xe6\xf8\x59\x3e\xdd\xac\xa3\x47\x8d\xa5\xf6\x96\xa2\x59\x73\x3a\xb5\x14\x65\xc6\x59\x67\x29\x6a\xf6\x95\xac\xa5\x08\xd3\xee\x91\xbf\xbb\x5c\xbd\x9e\xda\x16\xcf\x32\x3f\x7c\xb9\x3d\x96\x5a\xcb\x1c\x91\x00\x81\x67\xbb\x0b\x23\xc8\xd1\xc0\x11\x0d\x37\x0c\x7a\x12\xd1\x02\xb3\x9e\x89\x7c\x27\x19\xb6\xf8\xda\x27\x90\x33\xa4\xbb\x14\xba\xd4\x3c\x25\x24\xa2\x9b\x66\x6a\xf3\xf3\x98\x75\xe8\xe8\xec\xec\x94\xe8\x85\x35\x4a\xe3\x54\x70\xbf\xfb\x11\xa4\x00\x45\x12\xae\x73\x45\xe6\x79\x5f\x81\x6c\x73\x69\xe2\x78\x7e\x6c\xbe\x6d\x75\x9e\x7c\x38\xdb\x71\xec\xc4\xfe\xaa\x31\x21\x43\x4b\x9c\xc4\xc9\x15\xfb\x22\xea\xc4\x61\x50\xb4\xd0\xe3\x09\xff\x02\x26\x83\xdc\xdd\x62\xfc\x23\x5c\x0a\x94\x20\x15\xec\xbc\x3e\x0d\x50\xc8\x83\x20\xa5\x23\x30\x7c\x51\xe6\x11\xe1\x89\x82\x64\x62\x0f\x11\xf6\x08\x4e\x17\x10\x6e\xb2\x2c\x6e\x0e\x9e\x48\x90\x3b\x75\xc9\xc0\xef\x74\xb0\x10\x60\x5b\xd4\xdc\xb6\x73\x6e\x7b\x07\xd9\x56\xa1\x71\xec\xcc\x53\xf3\x98\x7d\xcb\x88\xb5\x50\xab\x38\x01\xe4\x6d\x41\x10\x3a\x8d\x2b\x92\xde\x86\x8a\x88\x04\xbb\xcb\x23\xbe\x32\xe2\xe2\xc7\xd4\x50\x85\xdf\x36\x56\x55\x71\xec\x84\x17\x63\xa0\xc2\x0b\x64\xa0\x42\x26\x2d\xd9\x06\xae\x10\xf9\xa6\x41\xb6\x22\x49\x99\x5f\x31\xec\xcf\x1b\x23\x16\x1f\x68\xd3\xa5\x59\x5a\x58\xae\x5b\x10\x4c\x3f\x08\x6b\x66\x1f\x76\x3c\xbf\x16\x51\x9b\xaf\x1e\x4f\xde\xa8\xa6\xe6\x44\x25\x35\x01\xc8\x00\x71\x86\x8c\xe7\x42\x9a\x63\x6b\xc4\x9a\x46\x5a\x2f\xf9\x4e\xc4\x94\x73\xc0\x3f\x80\xbb\xf0\xad\x01\xee\x32\x57\x53\x12\x65\x86\x8b\x34\x8a\x3c\x97\x9d\xd9\xcc\x36\xfd\x56\x7a\xdb\xfc\x9a\x61\xbf\xc1\x98\xc9\x88\xbf\xe9\xd6\x5a\xa7\x03\xc6\xfd\x87\x2d\x7b\xa6\x06\xa8\x88\x6d\x85\x51\x3a\xab\xf5\xde\x09\x76\x63\x0f\x38\x81\x3b\x80\x63\x53\x47\xac\x05\xcf\x15\x09\x9e\x8f\x1a\xa7\xda\x5f\xc9\xd7\x9b\xbd\x03\xfc\xd2\xe5\xb5\x25\xb3\xce\x18\x96\x12\x8d\x43\xbe\x6b\x90\xde\x8e\x8e\xef\xac\x57\xa1\xe6\x27\x0d\x73\x07\x63\x6e\x03\x89\x57\xa1\xf6\x7b\x0d\xf6\x23\xf2\xe2\xa5\x88\x49\x3c\x91\xe5\x44\x18\x2f\xe8\x55\x28\xbc\xc2\xe1\x21\x8e\xa5\xc6\x08\x17\x94\x12\xab\xe2\x44\xf1\x02\xda\x56\x92\xd0\xba\x6b\xe4\xe4\x09\x58\xe2\x63\x33\xa7\x4f\x15\x2d\xeb\x4e\xec\x0d\x71\x27\x00\x35\x5d\x9e\xd4\xaa\xc2\xee\x0f\x4e\xd0\x65\xc8\x5c\xb2\x2c\xcd\xa8\x29\x6a\xce\x3e\x5c\x75\x4a\x67\xd1\xac\x50\xa6\x51\x9c\x39\x27\xbf\xbe\x35\xa3\xfd\xca\x5c\x19\xc2\xb3\x12\xdc\x46\x67\x21\xf3\x1f\x64\xd9\xf9\xfe\x16\xfb\xd6\x66\x0f\x71\xfa\x49\xfa\xb7\x94\xad\xd4\x14\x18\xe7\x8d\xed\xf4\x9c\x97\x8c\x85\x6e\x16\xfd\x79\xf3\x16\xf2\x12\x83\xec\x00\xf0\x9f\xba\x23\x89\x99\x90\x83\xab\xe0\xad\x6c\xa5\xed\x9b\x60\xbd\x9d\x84\x2f\xb9\x4c\x8a\x4a\xcf\xd1\x52\x2d\x93\xb0\x4a\x7a\x90\xf2\xef\x92\x69\xb2\x53\xfe\x38\x39\x6e\x8e\xd9\x37\xc8\xe9\xf6\xc4\xd6\xe4\x78\x9d\x82\xd9\xe3\x86\xa5\xb3\x34\x1a\x1e\x1c\xbc\x59\xbe\x76\xaf\xe7\xde\xda\xa3\x2e\xf2\x9d\x44\x4e\xd9\x3c\x2e\x04\xa8\x1b\x26\xce\x79\x52\x2d\xcf\x66\x2d\x15\x4b\x98\x37\xd0\x8c\xf4\x94\x10\x22\xdc\x0d\x46\x12\xb3\xbc\xfa\x05\xbb\x3e\xbb\x60\xd9\xa5\xc9\x8c\x89\xba\xe4\x74\x7a\xb3\x8e\xdb\x07\x4f\xe2\x3f\x79\xd6\xaf\x34\x6c\xbb\xed\x3c\xd2\xf5\x99\x92\x57\xd2\x61\xfb\xa6\xdd\x73\x91\x47\xcb\xbd\x42\xee\x59\xc9\xca\x64\x7a\x8c\xbd\xf9\xc0\xf1\xcd\xc3\x62\xbd\x87\x66\xe0\x87\xd5\x2e\xf5\xb7\xb7\x65\xdc\xb6\xb8\xf5\xbe\x98\xda\xea\xd9\xa5\x6e\x7e\x6a\x9b\xbd\x3b\xfb\x53\xd6\xe3\x21\x7d\x16\x17\xcf\x1b\x5b\x20\xa3\x67\xe6\x14\xbc\x7b\x2b\x99\x53\x04\x8c\x33\x6b\x93\x2f\x9e\xd2\x44\xbe\xd0\x97\xcd\x0a\x51\x8e\x05\x82\x7b\x65\xde\x6b\x5f\x35\x09\x89\x59\x3d\x61\x43\x6b\xdc\x58\xd5\x3b\x67\x90\x0c\x90\xeb\xdb\x05\x30\x28\x54\xa4\x25\xfc\x8e\x25\xfc\x47\x8d\xce\x8a\x11\x0e\xe4\x5f\xf9\x6c\xed\xa5\x4a\x9e\x3d\xb3\x84\x7c\xa5\x3b\x03\xc5\x3b\xb5\x24\xe4\xfe\x0f\xc5\xc5\xbd\x18\x6f\x22\xb1\x98\xc8\x2b\x71\x28\xfe\x57\xbb\xed\x9f\x33\x1a\x7f\x57\x80\x07\xc0\x4b\x42\x1e\x36\xc9\xa4\x5f\x76\x26\x23\x4f\x42\x2a\xe8\x67\x9f\x4e\x49\xec\xe2\xee\x4c\x46\x82\x05\x2f\x89\x07\xaa\x34\x1a\x88\x21\x6f\x09\x74\x14\x08\x90\x99\xbf\xd2\x5b\x3c\x6f\x3c\x51\x66\x45\xc4\x41\xc9\xcc\x02\xe7\x8d\xad\xf8\xdd\x0c\xef\xf9\x66\x81\xdc\x43\xea\xdf\x31\x8f\x91\xa3\xad\x5c\x78\x1b\xd6\x65\x2c\x0a\xe3\x98\x33\x92\xba\x1c\x04\xe4\xa5\x06\xe1\x1f\x36\x97\x9b\x03\x60\xb9\xdd\xe2\x82\x4e\x62\xee\x1f\x8f\x46\xf6\x8d\x7c\xe5\x3c\xf1\x13\x1e\x48\x9e\xe1\x80\x3f\xe4\xd6\x51\x60\x23\xc2\x1e\x94\xc9\xa3\xd0\xbc\x94\x66\xf3\x41\xcc\xc2\xcb\xf6\x0d\xfc\x53\xc2\x94\x98\xf9\x7e\x8a\xb7\xa4\x66\x6c\x1c\x13\xf9\xdf\xdd\xaa\x9c\xd9\x34\x48\x84\xe3\x39\xbf\xd8\x6d\x8f\xe7\x3f\x12\x2c\x28\x2f\x73\x50\x83\xf1\x23\x0b\xe8\xfc\x41\x17\xb9\x2f\xbd\xc4\xef\xb5\xa7\x1b\xd4\x63\xfe\x4c\x90\x2e\xb8\x45\x21\x08\xc2\x7d\xcd\x51\x2b\x4c\x6d\xf2\xb1\x0c\xb5\x11\x09\x6b\x52\xee\xf9\x51\x83\x6c\xa9\x2e\x38\x31\x35\x1f\x32\xec\x5f\x35\xa6\xd8\x3f\x95\x43\xe1\x95\x53\xeb\x94\xa7\xb8\x08\xf5\xab\x19\x37\x20\x9c\x07\x5c\x24\x79\x3a\x27\x11\x5b\xca\x7e\x5f\x71\x30\x25\xb7\xad\x0d\xa6\xeb\x34\xc0\x8d\x52\x57\xc3\x40\xd5\xd1\xbf\x2e\xd5\x98\x5f\x6e\xd8\x2f\xe4\x3a\x2a\x30\x65\x10\x55\x52\xbe\x97\xb1\xe2\xa7\x20\x29\x93\xd3\xcb\xa8\x50\x8a\x20\xc8\x0a\x75\x82\x84\x4b\xf1\x70\x8d\x5b\x55\x27\x8a\x31\x63\x0a\x53\x19\xdc\x65\xcb\xf5\xe2\xaa\x0f\x8c\x1a\xa1\xc9\x13\x93\x99\x35\xfd\xc5\x2e\x72\x94\x53\x11\x9b\xe8\x80\x33\x3f\xcf\x24\xb0\x24\xcc\xa2\xa5\x99\x4a\xf6\x02\x2f\x1d\x99\x9a\x9c\x41\x43\x38\x27\xb2\xcf\x16\xec\x91\xfa\x1f\x53\x33\x92\x4b\x23\x0f\xc3\xcf\xeb\x03\x0e\x9c\x40\xb1\xc6\x64\x28\xec\xfb\x06\xf9\x9e\x91\x49\x8f\xf4\x4d\xc3\xbe\x66\x4c\x90\x2a\x8f\x1a\x4d\x15\x84\xaa\xc7\x3f\x9e\xb9\x3d\xef\x21\x77\x93\xbb\x72\x4f\xe8\x1a\xe6\xbc\xb1\x39\x90\xfe\x63\x07\x39\xae\x72\x11\x97\xfb\x39\xe4\x0e\x4a\x38\xc6\x06\xf3\x77\xd2\xb9\x85\x30\x3c\x3b\xa6\x96\xdd\x00\x89\xf2\x7d\x3b\xec\xd3\xed\x9b\x65\xa5\xcc\xd6\xed\xf3\x05\xcf\x0f\x6f\x23\x6f\x32\x84\x94\xf3\x6a\xc3\xee\x39\xd1\x59\x67\xea\x76\xdd\x45\xee\x24\x77\x34\x67\xa8\x6b\x58\x0a\x2d\x16\x75\x0e\x7c\x3e\xd6\x11\x4a\xad\x9b\xac\x10\x08\xfb\x39\xa3\xbd\x1c\x5c\x36\xdd\xd4\x38\x95\x7b\x10\xeb\x8c\x54\xed\x79\x4e\xae\xb9\xea\x97\xb7\x67\x92\xd6\x40\xe5\x29\xc5\xc9\x5d\x2d\xeb\x65\xfe\x7f\xdb\xec\xc1\xba\xdf\xf0\x50\x97\x42\x9f\x89\x6a\x7c\xe7\x94\x26\x71\x2e\xeb\x7a\x68\xab\xa6\x99\x15\xea\xb3\xbe\xe0\xf4\x25\xfb\x27\xa5\x3e\x9b\x5e\x20\xea\x92\xab\x0c\xfe\x00\xd9\xd7\xc2\x23\xab\xd9\x66\x6b\xe6\xdd\x39\xf3\x2e\x2b\xbc\xfb\x39\x6b\x63\xdd\x4f\x6b\x91\x05\xeb\x51\x23\x6e\xcf\x33\xa6\xcc\x53\x92\x67\x34\x2f\x21\x27\x18\x46\xdd\x49\xce\xe5\x0e\x5f\xdd\x9e\xf1\x65\xae\xf7\x70\x1b\x9b\x99\x3c\x15\xba\x14\x98\xc3\x6f\x6f\xb7\x07\x95\xbf\xf3\x18\x03\x7f\x2c\x6d\xd6\xb9\xcc\xe1\x25\xdb\x34\x73\x58\x3d\xd8\xf5\x74\x2f\x0f\xec\xe2\x0b\xdf\x79\x14\x5a\x93\x8d\xd6\x8c\xa1\x73\xc6\xf0\xbb\xaa\x54\xf7\xbe\x35\x4a\x75\x95\x7c\xa9\x6e\xc3\x72\xe3\xb9\xed\x99\xcd\x88\x79\xdb\x40\x23\xc7\x90\x68\x9d\xa0\xa0\x7a\x57\x9a\x94\x43\x10\xf2\xae\x2d\xb9\x4e\xd4\xe3\xe1\x52\xb0\xe4\x44\x2e\x3b\xf2\x6a\xb4\xc4\x0f\xbb\xed\xd7\x19\x4d\x1e\xe6\x7a\xce\x2a\xf9\xac\x5d\xfe\x1a\xa8\xbf\x6c\xc1\x8a\xd6\xb8\xfa\xd3\x5a\x92\xb4\x67\xd8\xd7\x97\xba\xc8\x9f\x16\xc8\x4e\x1e\x5e\x7f\x32\x74\xa9\xf9\x09\x99\x14\xec\x7d\x85\x34\x0d\x77\x05\x4c\xe3\x1e\x8f\xa9\x8d\x01\x5d\x14\x21\x03\x90\xa7\xdd\x9a\x5b\x16\x51\xfa\x6a\x0e\x77\x3c\x63\x73\x34\x59\xa2\x34\xb0\xf6\xc0\xa0\xf6\x1c\x3c\x78\x30\xeb\x96\xbf\xe7\x86\xfd\xfb\x8b\xd6\x38\x14\x81\x08\xc1\x0d\x7e\xc9\x4b\x16\x38\x34\x51\x75\x92\x05\x19\x32\xeb\x94\xcb\x90\x4e\x08\xdd\x57\x30\xc4\x22\x81\x2c\x77\xe0\x3b\x53\x01\x27\x63\xf4\xd3\x2c\x85\x41\xd9\xf7\x4a\xbc\xba\x22\xf7\x3f\xaa\x26\x69\xd6\x32\xec\x0b\xcd\x6d\x9e\x4f\x61\x8e\xfd\x96\xef\x9d\xa5\x56\x39\x86\xc0\x86\x7e\xe9\x7a\xa3\x14\x74\x9a\xa3\xbc\xb3\x74\x4d\x1a\xfc\x8e\x5e\x24\x78\x5c\x62\x5f\x9f\x23\x00\xb9\x8d\x9b\x09\x43\x58\x79\xee\x97\x06\x02\x3b\xec\xf9\xb4\x45\x2c\xe8\xde\xcd\x88\x05\xd5\xb1\x73\x3a\x76\xee\xf1\x10\x3b\xa7\x63\x9e\x75\xcc\xf3\xa5\x14\xf3\xfc\xbf\xb7\x90\xdb\xda\x98\xa8\x8e\x32\x05\x8d\x09\x2a\xfe\x54\xe8\x8e\xf0\x06\x4a\xe2\x7f\xf3\x47\xdd\x36\x6d\xd7\xa8\x2e\xb1\xa0\xe2\xc7\xd3\xe4\x4d\x0b\x2b\x33\xd2\x08\x6b\x1a\x31\xb9\xba\x78\xde\xe8\x66\xb2\xec\x79\x63\xab\xe2\xec\x26\x2e\xa1\x1f\x76\x65\xbd\x3e\x22\x69\x55\x51\x7c\x5e\x85\xf9\x4c\x5a\x11\x20\x7b\x66\x9c\x58\x49\xe4\x04\xb1\xd7\xe0\x9b\x39\x23\x7d\xfe\x26\xed\x9b\xe3\x8c\x91\x2c\x1b\xfe\x22\x3b\xb4\x76\xcf\x46\x4c\xf3\x3a\xec\xf8\x31\xed\xb7\xee\x08\xce\x06\xe1\x52\xd0\xab\x76\x7a\x13\x81\x69\x98\x43\xf6\x35\x50\xe4\x26\xbb\x34\xc2\xf8\x26\x7b\x54\x5f\x7d\xaf\x41\x4c\x36\xde\x59\x39\x5c\x70\x1d\x7b\xbd\xb1\x7a\x47\x9d\xbb\x1a\xfb\x93\xda\x19\xac\x8c\xa8\x23\x99\x4e\x31\x5d\x2c\xc1\x03\xc2\x40\x2e\x48\x9a\xf5\x9e\xcc\xa7\x16\xc1\xe7\xda\xa7\xa5\x01\x90\x89\x45\x75\xc6\x41\x7a\xae\xea\x3b\x41\x5a\x7e\x40\x08\xc5\x19\x03\x21\x1c\x07\xf9\x69\x75\x59\x3e\xbd\x8d\xf4\xe7\xfb\x9c\x95\xbd\xf9\x93\x4e\x95\x49\xf4\xf8\x07\x97\xd4\x7f\x71\x9b\xed\x37\x7d\x9a\x0d\x77\x52\x6d\x54\x6a\x12\x44\xcb\xb1\x64\x0f\xb2\xdc\x68\xd9\x9b\xb7\x94\x9a\x04\xec\x7d\xd6\x7b\xf1\xbc\x91\x56\xab\x3a\x6f\x40\x59\xac\xf3\xc6\x93\x78\x21\x26\xec\xe6\x38\x5d\xce\xd0\xf3\x77\xb7\x30\x0d\xad\xa1\x0d\x3a\x9f\x1e\xaf\xfb\xd5\x72\x69\xc9\x77\x22\x99\x8a\xe6\x2c\x5d\x4e\x8b\x59\xf0\x01\xbb\xca\x78\xd3\xc0\x42\x89\x20\x64\xba\x14\x55\x18\xe3\x24\xaa\x95\x20\xf4\x2e\xeb\xa7\xce\xd4\x59\xe0\x22\x1e\x16\xd5\x2d\x39\x31\xcd\xba\x01\x56\x09\xcc\xd2\x5c\xb0\xef\x56\xb3\xc2\x4a\xbc\x48\x4d\x0f\x9b\x37\xc4\x7a\xcf\xf8\xf6\x5f\xfc\x69\x92\xae\xb1\x19\xd9\x54\x96\x33\xcc\xfd\x36\x3e\x59\xd7\x01\x3c\x64\x90\xfa\xfa\x98\xe6\x5b\x0c\xfb\xd5\xc6\x74\x5d\xcd\xf0\xfa\xf1\xd4\x3f\x5f\xc1\xa8\xca\x61\x34\xe7\xb9\x2e\x85\x4c\x8b\x40\x6a\x4c\xa0\x17\xd5\x27\xd3\x11\xe3\x23\x74\xa8\x56\xc7\xfc\x4a\x83\x74\xd5\x3c\xd7\xfc\x19\xc3\x5e\xba\x63\x72\xbc\x61\x68\xec\xb7\x4d\x1c\xce\x3b\xbb\x32\xce\xa3\x39\x91\x39\x47\xc3\x18\x32\x51\x4d\x3b\xc1\x3c\x35\xff\xad\x60\x7f\xc1\xc8\xfc\x24\xc1\x37\x87\x87\xc5\x86\x65\x2c\x1a\xa6\x64\xa0\x92\x09\x58\x03\xc6\x7c\xb8\xd9\x9f\x67\x90\x64\xc7\x16\xe5\x2e\x50\x7a\x21\x20\x50\x0c\x3d\xb6\xe6\x42\x91\xbc\x13\x4b\xc4\x43\x2d\x61\x51\x49\x8c\x87\x59\xa8\x65\x3b\x86\x41\x71\xce\x0e\x10\x85\x26\xfc\x1a\x53\x06\x31\x9e\x3e\xad\xd5\xd1\x55\xf1\x02\xf6\xff\xce\xb9\x0c\x3f\x78\xa5\x41\xc6\x08\xfb\xd5\xbc\x59\x68\xeb\x3d\x15\xe7\x9c\xd8\x31\x36\x0c\xb1\x51\xec\x33\xfd\x98\x06\x33\xf6\x16\x69\x56\x4f\x9d\x20\xec\x03\xe6\xad\xa2\x93\xde\x8a\x17\x28\x77\x5a\x94\x74\xd6\xcd\x1f\x3e\x91\x5c\xa3\x06\xb9\xb2\x0d\x95\x48\x7d\x2d\x60\xb7\xc6\x98\xef\xc4\xb1\xf9\xb6\x27\xda\x5f\xee\x52\x7f\x51\x76\xa8\x04\x7f\x87\x65\xc5\x35\x34\xc2\x96\x6a\x31\xec\x80\x03\x6a\x98\x58\x19\x12\xd0\x65\xfa\xf3\xd2\x12\x60\x6a\x4d\x71\xc6\x07\x1b\xfb\x55\x1a\x47\x35\x7e\x92\x45\x23\x9e\x84\x16\xf2\x56\xa8\x5f\xe0\x31\xfa\xbb\x65\xf2\xae\x5e\xab\xe2\x04\x35\xc8\x0a\xa1\xc4\xd6\xa4\x19\x51\xf9\x58\x95\x94\x11\x91\x38\x03\xf2\x0c\xf1\x69\x4d\x85\x2e\x3b\x22\x38\x2d\xce\x83\xf3\x72\xe8\x32\xc6\xe2\x2f\x4a\xc0\x52\x19\xdd\x29\xac\xf0\x27\xae\x25\x9e\x2c\x5b\xe8\x3b\x09\xa6\x71\x2e\x5a\x90\x6b\x0f\x0a\x92\xf3\x5b\xb5\x1f\x6a\x53\xe7\xa0\x72\x34\x58\x70\x82\x12\x20\x4a\xf1\xe0\x59\x5a\x8d\x07\x63\x6f\x7e\x80\xed\xf0\x20\x5f\xc5\x01\xd8\xb8\x62\xc5\x3d\x6f\x6c\x5b\x70\x02\xd7\xaf\xf3\xd5\xf8\x0c\x21\x9f\xe8\x26\xe2\x91\xf9\xa1\x6e\xfb\x5d\xdd\x47\xf1\x8f\x3a\xe7\xa6\x5a\xe0\xd2\xc8\x5f\x66\x23\x15\x3b\x04\xd9\xdc\x32\xb7\x90\x14\x86\xc7\xa6\x27\x21\xd1\x00\x4d\x4b\x04\xc1\x59\x86\xbc\x69\xa1\x85\xdf\xe3\x35\x1d\x38\xcc\x8e\x23\x85\xd5\x95\x25\xb8\xd3\xfa\xa0\xb2\x92\x85\x4c\x57\x19\xba\xd4\xba\x0e\x3e\x94\x19\x03\xf2\x01\x26\xba\x40\x85\x77\x9e\x16\x9b\x51\x0f\x9f\x64\x5d\x7d\x77\x2b\x0c\x2c\x0a\x29\x8a\x03\x80\x98\xd8\xa4\x64\x4b\xb5\x2e\x00\x3a\x93\x45\x90\x35\xd3\x5b\x74\x7c\xc8\x7f\xa2\xbe\x5b\x97\x24\xd1\x11\xdd\x40\xd8\x1d\x75\x2d\x3b\xaa\x05\x25\x9b\xc3\x60\x31\x2f\x2d\x2c\x57\x8c\x3d\xb4\x4e\x8f\x4d\xca\xd5\xdd\x8d\xd5\xcd\x79\x61\x07\x84\x0a\xd3\x03\xd0\x2b\x79\xa3\x7a\x48\x32\x3e\xcc\xea\x21\x61\xab\x2a\xf6\x15\xb2\x7f\x2a\xb1\x68\xec\xa5\xf1\x53\x33\x16\xa4\xc5\xb7\x76\x4f\x1f\x1e\xb3\x86\x86\xf6\xee\xeb\x15\xcc\x14\xc8\x4b\xe6\x70\xf7\x2a\x95\x1a\x14\x2d\x2d\xea\x50\xe0\x55\xa1\xf9\xbf\xa6\xa2\xf9\x6f\x5c\x73\xc1\x9b\x33\x1b\x03\xdc\x6b\xcb\xd9\x4a\x5d\x31\xe6\xda\x1b\x3a\x6e\x33\x6f\x91\x56\x55\xe0\x18\xf5\x76\x54\xe5\xb2\xc8\x35\xa2\xfe\xd3\x4e\x62\x37\xb3\xba\x63\xb5\x9d\xe9\x9a\x4f\xcd\xcf\xec\xb4\xdf\x6e\xa4\x7f\xe7\x24\x0d\xae\x77\x53\x14\x62\x4e\x54\xf3\x79\x26\x7f\x19\x66\x27\xaa\x15\x37\xba\x00\x2e\x2d\x84\x9c\x75\xf9\x94\x97\xf7\x80\xcd\x82\xda\x3c\xec\x52\x4f\xc5\xf7\x9c\x66\xc5\xf3\xc6\x96\x45\x1a\xcd\x65\xc1\x81\x57\x12\xf2\x2e\x83\x3c\x41\x2c\x31\xa8\x06\xe6\x1b\x0c\xfb\xfe\x69\xf5\x17\x60\x2e\x41\x1a\x84\xbb\xb4\xe0\x25\xa9\x8d\x52\x29\x12\x91\xf7\x5d\xcb\x92\xe9\x73\x62\x70\x17\x76\x84\xd1\x01\x78\x79\x02\x49\x5d\xd2\x8c\xc1\x19\x37\xb7\x27\x90\x4c\xd1\xb9\xef\x1a\x64\x87\xa4\x06\xf3\x9b\x86\xfd\x19\xa9\x42\xd4\x59\x15\x94\xb0\x78\x38\x19\x0d\x63\xea\xe9\xeb\xc9\x58\x9e\x7c\x5f\x79\x47\x54\xb2\x49\x33\x17\x55\x3d\x90\x46\xe3\xa2\xd5\xd3\x37\x58\x0e\xc3\x9e\xfa\xa2\xa2\x6a\x99\xb9\x1e\x68\x00\xe5\x2f\x3b\xed\xb6\xc5\xa4\x3f\x68\x10\xdc\x38\xf3\x3d\x86\xfd\xdf\x8d\x33\xec\x9f\x75\x4e\x88\xf0\x13\x5e\xbc\xd5\xaa\xbf\xcc\x88\x62\xe4\xc4\x09\xe4\xf9\xfc\xeb\xec\x8e\xc0\x84\xb0\x23\x09\x9e\x39\x3a\x4d\xd9\x17\x4a\x68\x05\x12\xd7\x98\x2b\x9d\x8b\xd9\x9a\x15\x2d\xe8\x7c\x04\xa6\x91\x59\x2c\xe0\xb3\xad\x86\xfd\x3d\x83\xec\x90\xf3\x33\xbf\x65\xd8\x9f\x35\x46\xa6\x26\xf1\xcf\xbc\x52\x28\xe2\x21\xc7\x75\x55\xa4\x41\xae\x20\x66\xc3\x96\x79\xa2\x98\x92\x30\x8f\x1d\x2a\x22\x0b\x75\xfb\x01\xc9\xe6\x89\xf6\xf9\x95\x94\xa6\x07\xc5\x4a\x84\x65\x7e\x97\xd5\x2a\x14\xd3\x4b\x65\xb6\x89\xbd\x2f\x7b\x97\x57\x7f\x07\x14\xfa\x7b\x5d\xe4\x89\x41\x18\x88\x55\xbf\x63\xfa\x44\x6c\xbe\xab\xcb\x7e\x45\xd7\xa9\xec\x8f\xfc\xba\xe6\x09\xa4\x9d\x08\x8a\x71\xd5\x22\x91\x2e\x80\x4b\xcc\x9c\x57\x63\xd1\x06\x91\x49\xac\x68\x59\x7d\x99\x12\x14\xc8\x40\x20\x93\x10\xcf\x85\x55\xae\xf9\x7e\xbf\x55\xf6\x02\xc8\xba\x40\xab\x96\x6a\x3e\x9c\xf1\x00\xba\x0d\x83\x01\x49\xb0\x30\x22\x61\x56\x94\x5c\xc4\xed\xe7\x37\xbf\x0c\xc2\x0f\x44\x5d\xa1\x92\x23\xc4\xef\x31\x94\xe8\xa7\x43\x9f\xc6\xaa\x14\x0f\xe2\x82\xa3\x3e\xe6\x1e\x2b\x4c\x83\xf0\x79\x8e\x23\xea\x81\xf1\x30\x25\xda\xa9\x49\x65\x1f\x76\x8b\x3a\xe7\x36\x13\x5c\x31\x5a\x18\xcb\x1e\xc7\x76\x2f\x26\x16\xcf\xce\x01\xe6\xa7\xbe\xc7\x6e\x13\xbb\xb7\xdf\x82\x05\x02\x59\x24\x4c\x16\x5a\x6d\xdf\x5f\x74\x67\xbc\x66\x44\xd0\x50\x8a\x44\xa7\xe0\xee\x7b\xbb\xed\x13\x39\xbf\x37\xc7\x73\x45\xf1\x22\xb6\xe9\x2b\xc5\x70\x3f\xde\x45\x4e\x48\xc4\x75\xd4\x3e\x30\x93\x8f\xb1\xf6\x0b\xda\xce\x83\x5a\x33\x02\xe4\x3e\x0e\xb5\x5e\x6f\x3f\x73\x76\xb9\x4a\x95\x8a\x5f\x30\x3e\xd9\x63\xd6\x11\x3e\x1f\x64\xfd\xe9\xd5\x63\xac\xe3\xb3\x6b\x47\x53\x8b\xe4\xae\x14\x4e\x3d\x65\x8f\xf0\x00\x0b\xab\xf3\x00\x8b\x2c\x7e\x9a\x99\xf2\x61\x89\x9c\xdf\x6c\x0f\xce\xae\x1e\x2f\xff\x9f\x3b\x32\xf8\x0d\x5e\xff\x8a\x2c\xe1\xce\xd0\x52\x2d\xf2\x92\x65\x5e\xdd\xef\xc1\x1d\xf6\xcf\x18\x0d\x3f\x2b\x25\xa2\xa8\xe5\xcc\x79\xbe\x97\x2c\x63\xc2\xc1\xb3\x54\x91\xbd\xeb\x0c\xfa\xa2\x0f\x6b\x2c\x0c\x12\x7a\x2e\xc9\x62\x3d\xa2\x4e\x18\x84\x7e\x54\x43\x57\xa8\x99\x3c\x86\x38\x9b\x48\x72\x1b\xb9\x8f\xe7\xc2\x99\x6b\x11\x54\xd4\x6e\x76\x90\xdf\xe6\xaa\x18\xf3\xdb\xa4\x72\x2d\x97\x89\x68\x00\x89\x0e\x5d\x1d\x3a\xa9\x13\x44\xe9\x32\xa8\x2d\x5c\xbd\x3a\xd5\x80\x50\xd9\x69\x38\x85\x79\x1a\x8f\x74\x02\xc3\xb3\x48\xc8\xab\xb7\x66\xa2\x33\x5b\x96\x59\x4a\xef\xc6\xaf\x6c\xb1\x47\x5b\x37\xe1\x1c\xc6\x8f\xeb\x58\xb1\xbc\x2f\xab\x8b\xa5\x96\x37\xe2\xf7\xbb\xc9\x8f\xc9\x1b\x31\x73\x87\x3f\x99\x5f\x6d\x99\x1f\x03\xf2\x04\xc6\x9e\xa7\xa2\x70\x8e\xc2\xa5\x75\xcf\xea\x2f\x2d\xfb\x84\xbc\xb0\x96\x20\x51\xc4\x1c\x75\xb3\x97\x41\x91\xbc\x26\xff\xaa\x7c\xe1\xea\xbf\x7a\xfb\x89\xb5\x5e\x93\xcf\x4e\xaf\xc9\x93\xf6\xed\x47\x57\x18\x85\xd8\xea\x76\xfb\x87\x34\x6e\xef\x6b\x86\xfd\x27\xc6\x1d\x50\x8f\x8e\x8b\x8f\x4a\x02\x4c\xf6\xef\x28\xe9\x97\x91\x78\x00\x72\x62\xf5\x6b\x36\x06\x35\xa6\x6f\xde\x5b\xa4\x0d\x16\xea\x56\xb7\x2d\xd3\x0c\x3c\xe0\x59\x60\xcf\xb0\xa7\x69\xec\xdd\x4f\x67\x30\xd7\x84\xcd\x8b\xa7\x71\xdd\x33\x03\xaf\x36\x66\xaf\xf4\x62\x5e\xd3\x27\x82\x3e\xdc\xcc\x5c\xbf\xb4\x9d\xec\x6e\xea\x4f\x26\xe5\x41\x1e\xed\xf7\xce\xed\xf6\x6d\xf5\x3f\xd6\x6b\x8e\x79\x41\xa5\xe9\x3b\x98\xdd\x19\x8b\x08\x66\x0e\xc0\xff\xd9\x46\xbe\x6c\x28\xe5\x5d\x3f\x6f\x08\xc3\xc5\xff\x34\xa6\xeb\xca\xbb\xd6\x17\xd0\xc7\xfa\xf9\x8d\xc5\x5e\x57\x1c\xdc\xb9\x14\x46\x67\xfd\xd0\x71\xe3\xc1\xb4\xd0\x5d\x3c\xa8\xd4\xcc\x4f\x7f\x1e\xbc\x7a\x69\xc1\x49\x06\xbc\x78\xc0\x19\xc8\x6d\x90\xb1\xa2\x3c\x68\x90\x2b\x24\x66\x2c\x8b\xf7\x57\xc5\x14\xef\xce\x16\xef\x4f\xd1\x65\x59\x6f\x71\x37\xa6\x72\x06\x25\x5c\x38\x7a\x54\xbc\x00\x2a\x96\xcc\x40\x2c\x77\xdc\xdb\x50\xe5\xbf\xd1\x79\xf1\x3f\xb3\x91\x95\xff\x64\xd8\xa7\xa6\xb3\xdb\xc7\x45\x02\x05\xe0\x9e\x8b\x69\xb4\x98\x56\xba\xcd\x48\xfe\x3d\x71\x36\x6d\x69\x46\x19\xb9\x85\x1c\x6a\x15\x25\x9d\x4f\x69\x1b\x1b\x63\xf9\x0a\x83\x5c\xc9\xb4\xc9\x65\x40\xab\xa9\x2b\xb7\x22\x16\x5b\xf1\xbc\xec\x56\xa4\xae\x59\xa0\xb5\x62\xb1\xd4\x6c\xf2\x5e\xfe\x9b\x48\x1e\xab\x94\x6c\x4d\x2d\xaa\xf8\x95\xfa\xdd\xf8\x69\x62\xe2\xea\x52\xf7\x08\x0d\x78\x62\x29\xd3\x83\xa1\xdc\xb0\xdf\x9e\x3d\xdd\xf0\x90\xa9\xa4\x3e\x24\x4b\x86\xe0\xf0\xf4\x77\xfe\xa5\xfa\x93\x81\xef\xab\xe7\x2f\x33\x80\x67\x93\x27\x00\x5d\xc9\x65\x38\x22\x96\x61\x6f\x76\x19\x90\xfa\x24\x35\xb6\x27\xb4\xf7\x5c\x4e\xf6\xb6\xac\xd8\x45\xfd\x32\x2f\x79\x05\xfa\x33\x2f\x50\xf8\xbd\x27\xd8\x2f\xdf\x92\xff\x2c\x05\x37\xb8\x2a\x8a\x60\x83\x53\x12\x6e\xbf\x29\xeb\x01\xb0\x41\xad\x53\xc8\x5d\x8e\x1d\xb5\x36\x21\x6a\x3f\x3c\xe1\x9e\x80\x9e\x44\x6f\x4c\x2c\x04\x57\xe3\x52\x58\xa9\x42\x61\x6a\x97\x56\x29\x3a\xbc\x85\xa2\x2e\x34\x93\x20\x7b\xe2\x6c\x6d\x2f\xee\x69\xcc\x24\x68\x27\x58\xb6\x68\x14\x85\x51\x6c\xd1\x73\x55\x1a\x79\x88\x24\x28\xce\x5b\xbc\xc6\x1a\xb0\xfb\x26\x93\x4e\x6f\x9b\x1a\x0f\x5c\xbf\x63\x12\xd3\xc5\x2f\x84\x4b\x83\x0b\x9e\x4b\xc5\x98\x21\xc2\x3d\x09\xad\x17\xd4\xbc\xd2\x59\x7f\xd9\xf2\x29\x44\x59\xd3\xc0\xc5\xf5\xe0\xf7\x8e\x54\x11\xbd\x28\x9b\x4b\x7d\x52\x26\xce\x3d\x75\x7a\xd6\x1a\x4d\x3f\x28\x33\x35\xc7\xcb\x31\xf8\x3b\x27\xa1\xe5\x46\xde\x22\xad\x9b\xb9\x4b\x4b\xbc\x94\xb3\x23\x60\x4a\xc7\x8b\x29\x60\x71\x65\xe8\xcc\xa5\xd5\x5a\xb2\xdc\x6f\x95\x9c\x92\x52\x44\x60\x30\xa2\x8b\x21\x72\xcf\x7e\xae\xad\x41\x7a\x2b\xac\x5a\xc4\x58\x73\xc4\xc6\x97\x53\x20\x0d\x9b\x43\xf9\xb4\x4c\x21\x4b\x27\x12\x42\x05\xe6\xc9\x82\x6a\xa3\x21\x53\xb0\x68\xd4\x74\xd0\x5c\x25\x52\x72\x04\xe7\xe5\xf9\xfd\x6b\x1d\x14\xa4\xd5\xb8\xc7\x46\x9e\xdf\x9f\x17\x79\x7e\x5f\x62\x90\xf1\x15\xd4\x52\xcc\x65\x44\x4a\x0e\xdf\xd5\xd4\x90\xac\x2b\xed\x38\xba\xe2\xd2\x8e\xea\x50\x30\x37\xef\x99\x95\x56\x76\xcc\xb9\x34\x9c\x86\xab\xa2\xf8\xa8\x51\x6d\xaf\x87\x9e\x34\x8f\xcb\xec\x80\xb9\xcb\xd5\x2c\x5b\x60\x6e\x1c\x24\x79\xd3\x65\x19\x34\xad\xd1\x39\x77\x88\xe7\x8f\xe1\x62\xf8\x3f\xec\xb4\x6f\x55\x7f\xa8\x03\x69\x99\x2a\x01\x9a\x90\x0a\xd7\xf2\x1a\x17\x98\x49\x46\xa0\xb3\x19\xd6\xf6\xba\x9d\xe4\x13\x86\xf8\xd3\xfc\x70\xcb\xf2\xd9\x39\x23\xcc\x64\x2f\xc2\x2d\x4a\xe4\x89\x2d\xb3\x43\x0a\x90\x5c\x5e\xd6\x22\x3e\xb6\xf5\x49\x5e\x44\x7e\xb1\x40\xba\x99\xd8\x66\xbe\xb2\xb0\xa2\x4c\x41\x80\xec\xc5\x99\x09\x7c\xce\xc0\x98\x82\x96\xe3\xa7\xa2\xf8\xb9\x70\x60\x12\x02\x31\xa4\x6a\xe2\x59\x7d\xb2\x33\x01\x3d\x8f\x13\xe1\x40\x35\x0a\xd9\xdd\x45\x5d\x65\x6e\xbd\x45\x0b\x04\x14\xee\xc1\x22\xc1\xcd\x45\x1a\x41\x21\xf9\x24\x9c\xc7\x32\xa5\xdc\x0b\x08\xcf\x1b\x13\x56\x9c\x08\xc1\xcf\xa4\x2e\xa3\x50\x91\xbc\xa9\x8b\xa9\x57\xc8\x50\xcd\x57\x76\xb5\xae\x2a\xdb\xb0\x36\xc2\xda\x93\x59\x9f\x4f\x17\x24\x87\x56\xd7\x28\x2d\xee\x8c\x8b\x25\x2d\x18\xc9\x42\x18\xab\x06\x43\x2f\x48\xb9\x30\x3b\xac\xbe\xc7\x38\x73\xaf\x05\x00\x3f\xeb\xeb\x78\x4a\x12\x2b\x5e\x71\x5a\x9c\x2f\x5a\x63\x53\x77\x40\x5d\x17\x5a\x09\xa3\xe5\x5e\x26\x45\x94\x16\xf8\xb0\xd0\x44\x34\x57\xf3\x7c\x28\x0b\x9e\xf9\x9a\x70\xe4\x59\xe4\xa3\x65\xd2\x0f\xf7\xe8\x17\x71\x66\xe0\x26\x5c\xc5\x1b\x9d\xcd\x2a\xd5\x98\x92\xd0\x0a\x18\x6f\xf4\x19\x53\x19\x60\xe3\x14\x1f\x44\x9f\x1c\x36\x64\x6e\x03\xc2\x75\x2a\x92\xb7\x19\x1c\xe5\x79\xa3\x61\xff\x9c\x01\xde\xe2\x5c\xd7\x4d\xb8\x39\x83\x2f\x25\x7f\x01\xbc\x94\x04\x55\x70\x23\x89\x8d\x27\xd0\xee\xb7\xec\x29\x69\x60\x12\xdb\x66\xf7\xe3\xaa\xd5\x39\x04\x3b\xa9\x2a\xc3\xcd\x62\xb8\xa2\x5c\x14\x51\xef\xa6\x7f\x2d\x90\xed\x42\x14\x34\xff\xae\xb0\x42\xf2\x99\xe0\x6f\x66\xc8\xe7\xed\x05\x29\x5b\xaa\xe4\x33\xef\x87\x73\x8e\x2f\x66\x8c\xa5\xbe\xd1\x99\xa0\x3e\x25\x37\x13\xb1\x8f\xd7\x73\x0d\x10\x65\xc1\x96\x08\xb2\xb9\x18\x8a\x35\xe7\xf0\x52\x10\xea\xd5\x55\x0a\x2b\x30\x79\x26\x30\xb0\xe3\x13\x06\xa0\x09\x0b\xaf\xba\xb0\x96\xc4\x4c\xc6\x86\xaa\xf9\xe8\xeb\xa7\x9e\x64\xcb\xa7\xc1\x7c\xb2\xc0\x1e\xbf\xa0\x46\x6b\x18\x9b\xe8\x87\x35\x97\xe3\x4f\x58\x4c\x16\x72\x07\x81\x78\xfe\xac\xa9\x19\xfc\x94\x1f\x3a\xae\x28\xa2\xd1\xe2\x63\xbd\x45\xf2\x08\xc9\x2d\xe2\x35\xc3\x48\x7d\xf2\x74\x26\x2c\xf5\xfd\xc4\x1e\xce\xf9\x3d\x1b\x91\xaa\xc0\x43\xbc\x2d\x87\x89\xce\x1b\xdb\xe6\x9d\x84\x2e\x39\xcb\xe7\x8d\xad\x28\xea\x9f\x37\x76\xa0\x81\x72\x9a\x96\x33\x57\xc5\x67\x77\x90\x32\x79\x52\x35\x0a\x13\x8c\xa9\x1f\x0f\x2b\x8e\x17\x98\xd3\xf6\xc4\x6c\x9d\x19\x5c\x7c\x63\x4a\xb6\xb5\xb0\xb1\x6a\x72\x02\xf7\x3b\xc8\xfa\x8a\xa1\xba\x2a\xd9\xfd\x89\x41\xd2\x41\x98\x9f\x30\xc8\x81\x0e\xca\x9c\x94\x1c\xbf\x2e\x81\x9c\xfd\x72\x63\x46\xf4\xa2\x96\xc9\xe2\x9c\x12\xbf\x00\x63\x12\x23\x06\xc9\x80\x71\x01\x8c\x08\x8d\x29\x20\x73\x8b\x99\x40\x81\x34\x67\x35\x27\x50\x91\x66\xb7\xdf\x3a\x11\xce\x7b\x81\x92\xf8\x1a\x4b\x5e\x39\x9e\x5f\x24\xaf\x35\xc8\x4e\x3e\x55\x08\xcb\x7d\xc0\xb0\x6b\x93\xb9\x05\xa8\x79\x2b\x84\x7d\x04\x9c\x97\xaa\x84\xb3\x0b\x5e\xe9\xec\x94\x52\xae\x2c\x8c\xd8\x6f\x81\xf2\x53\x51\x2d\xd4\x55\xff\x4c\x5d\xe7\xbb\xe5\x98\xa6\xc2\xd0\x37\x4f\xd8\xb7\xcd\x2a\xdb\x37\xc3\x07\xc2\x9e\xe5\x26\xc6\x4f\x69\xc1\x72\x61\x7f\x33\x9d\x8f\x13\x41\x5b\xe6\x4d\x76\x3f\xeb\x18\x5c\xb5\x79\x61\xdd\x7a\x5a\x01\x67\x69\x6c\x9e\xe9\xe5\x9c\x52\x52\xcc\xb7\x9f\xd7\x50\xfc\x0b\x41\xb2\xc1\xa5\xc8\x4b\x68\x6f\xd1\x6a\x59\x72\x4c\x3e\xe4\x41\xc6\xec\xe4\xe2\xa1\x39\x19\xd6\x30\x15\xa7\x52\x48\xec\xf9\x84\xc4\xb1\x3f\x81\x6e\xe4\xe6\xb4\x3d\x7e\xd8\x77\x20\xe7\x32\x7a\x96\x0f\xba\x5e\x0c\x9c\x7f\x66\xe6\x84\xc5\x55\x81\x92\xd8\xf6\x64\x41\x4c\xa6\x5f\x44\x51\xe3\x70\x33\x5f\x38\x4d\xf8\x99\x33\x27\xec\x1b\xeb\x0f\x91\x20\x03\x6c\xc1\x2e\x52\xe5\xd0\x78\x81\x58\xb8\x6c\x71\x22\x83\x90\xc5\xb4\xc4\x51\x6c\x97\xd5\x5e\x25\x31\xd5\xd7\x88\xe3\xfc\x5f\x6c\x05\xff\xa2\xe0\xc1\x8d\x3b\xef\xc5\x92\x2c\xf1\x66\x52\xc7\xf0\x76\x83\x6c\x2d\xc7\xb3\xec\x5e\x7b\x83\x61\xbf\xdc\x38\xec\xf9\x54\xf4\xc8\xae\xb5\x24\xc4\x2a\x6f\x6a\x54\x79\xb9\xae\x4d\xea\x1f\xce\x65\x7b\xa0\x1c\x7e\xae\x18\x7b\x85\xb6\x45\x6b\xe2\x5c\xd1\xb2\xe9\xb9\x64\x3f\xbb\xff\xce\x95\x63\xf6\x9f\x20\x29\xc7\x76\xe6\x04\xc0\x93\x6c\x86\xc1\xed\xc4\xca\xcb\xab\xea\xd0\x4a\x18\xcc\x50\x4c\xce\xfb\x86\xed\xf6\x40\xe6\x97\xbc\xa4\x22\x2e\x34\x60\x04\xd5\x24\xa1\xc8\xf7\x75\xb6\xa1\x95\x62\x07\xcf\x15\xc1\xf6\x33\xf6\x8f\x8f\xa4\x31\xf6\xca\x4a\xab\x80\x73\x91\xf4\x93\xbe\xf6\x29\x73\xc5\x46\x6a\x64\xa2\x73\x64\xe2\x23\xaa\x81\xf9\x37\xd6\x98\x44\x24\xd8\x9c\xd4\x70\xa9\x69\xf9\xce\xf6\x2a\xfd\x7e\x73\xef\x40\x7e\x82\x5f\xf5\xdc\xd7\xe9\xf5\xe4\x17\xae\xcc\x78\xd4\xa6\xd9\x6a\x8a\xfc\xc6\xc4\xd8\x98\x7f\x78\xb2\xfd\x37\x86\xfa\x4b\x9d\xc6\x5e\x75\x22\xa7\x42\x13\x46\x2f\x78\xd5\xcb\x80\x19\x55\x02\x40\xaf\xd8\x7a\x43\xb4\x2c\xaf\xd7\xa4\x86\x69\x91\x10\xf5\xcb\x54\x78\xc6\x05\x03\xa9\x67\xdc\xa1\x06\xf7\x45\xf1\x5d\x1c\x88\x53\x2a\x85\x3c\x43\x7b\x68\xd1\xa4\xe4\xf2\xac\xad\x29\xda\x54\x64\xb7\x4c\xf1\xbc\xb1\x53\x09\x85\xc9\x30\xbf\x97\x5e\x41\x5e\x63\x10\x92\xce\x94\x89\x3d\x74\x2a\x9d\x38\xc2\x4a\x39\xab\xc1\xc5\x0b\xd1\x6b\xa6\xc6\x1b\x5e\x5b\x32\x69\x8a\x60\x91\x99\xd1\x17\xdf\x53\xe7\x16\xa7\x8c\x8b\x9c\x22\xea\x88\xcd\xdb\xec\xbd\x53\xca\xa7\xb2\xe0\x91\x50\xc5\xea\x06\x54\xbc\xb4\x1c\x31\xc8\x77\x0c\x72\x19\x5c\xcb\x98\x22\x26\x36\xbf\x6a\xd8\x1f\x37\xc6\x9b\x54\xc8\x6d\x24\xc7\xdc\x4d\x00\xa2\x13\x42\x86\x90\x1a\x63\x5e\xe5\x95\x7f\xa8\xdf\x02\x95\xfd\x6e\x3b\x0a\xd9\xed\x1d\x87\xe5\xc4\xbe\xa7\x68\x9d\x0a\x13\xa5\x28\xfe\x00\xaf\x48\xcc\xf7\x61\xea\x0c\x47\x47\x62\xaf\x52\xf5\x31\x5b\xae\xe5\x95\x41\x27\x06\x1a\x85\x37\x5b\xf9\x48\xea\x2b\x59\xc3\xf9\x1b\x74\x69\xbe\x11\x42\x11\x20\xcf\xb4\xf0\x83\x34\xec\x73\x1b\x70\x92\x80\x04\x95\xef\x64\x73\x6d\x8c\x53\x9f\xd6\xe5\xd5\xfe\x81\x41\xae\x40\xa6\xc9\xdd\x98\x41\x11\xfd\x86\x61\x7f\x89\x17\x84\x55\x7e\xae\x4b\x42\x9f\xeb\x08\xa5\xba\xc5\xa8\x73\x62\x34\x0b\xa9\xb8\x8b\x96\x75\xe7\x02\x0d\xac\x5a\x10\xd3\xa4\xdf\xca\x7c\x64\x52\xe4\xe9\x10\x41\x9b\x0d\xd5\xd2\x40\x8b\x0b\x83\x30\xe2\xc9\x35\x38\x99\x60\xd4\x45\x80\xa0\xdb\x02\xe5\xbd\xa6\x15\x8f\xad\x32\x75\x92\x5a\x94\x9d\x7a\x40\xae\x04\x70\x08\x1b\x4f\x9c\xab\x3a\x10\x79\x6c\x9e\xb1\x8f\x8e\xe4\xfc\x0e\x86\xd6\x7c\xad\x9c\x6f\x07\x14\xa9\xe5\x4a\x10\x65\xaf\xb9\x19\xcd\xee\xe7\xbb\xc8\x15\xdc\xb3\x7d\x36\xac\x86\x7e\x38\xef\xd1\xd8\xfc\xd7\x82\xfd\xde\x82\x88\x58\x48\x23\x12\x13\xd9\x82\x7d\x31\x4a\x6f\xb6\x36\x77\x3c\xd6\xa3\xe3\x83\xc0\x7a\xe4\x92\x73\x89\x9a\x74\xa9\x26\xc5\xbf\xb2\x2c\xa3\x22\xd1\xbb\xa3\x98\x46\xb6\xf0\x91\x2e\xab\x65\x88\x85\xb0\xc6\x7d\x8e\x64\x4d\x2e\xd9\x5b\x94\x06\x60\x6c\xc0\x0e\xa6\x0c\xfc\x26\x72\xb0\x03\x14\x28\x6f\x0a\x8f\x1a\xcf\x6f\x2f\x09\xde\x62\x1e\x4a\x4b\x3f\xa5\x82\x53\x33\x93\x4e\x5d\x7e\x39\xf2\xa1\x1d\xe4\xb9\x1b\x59\x94\xd2\xfc\xf3\xed\xf6\x74\xeb\x26\xf5\x46\xaf\x4e\x0a\x55\x9e\x37\x14\xc7\xa0\xf3\xc6\x13\x9c\x52\x89\x56\x13\xea\x42\xc0\xd4\x79\xe3\x72\x36\x4d\xea\xf2\x5b\x31\xab\xd7\x7e\x72\x1b\xe3\x27\xd9\x37\xcc\xbf\x35\x88\xb7\x19\x95\x3a\xe1\x6b\xf6\xf2\x88\xfa\x71\xe9\x00\xa0\x84\x72\x41\x80\x09\x14\xee\xf4\x97\xb9\xb9\x44\x84\xbe\xc2\x00\x2c\xd7\x8b\x4b\x21\x44\xe3\xce\x2e\xd0\x65\xe1\x01\xe2\x7a\x65\xc0\x0a\xc1\xcb\x3c\x50\x3a\xf5\x02\x38\x3d\x45\xf2\x48\xd6\xa5\xea\x8f\x0c\xfb\x94\xf4\x61\x4a\x77\x82\x6f\x02\x64\x1d\x70\xa2\xc4\x2b\xd5\x7c\x27\xb2\x1c\xd6\x45\xc2\xdd\xaa\x9a\xcd\x50\x25\xfd\x17\x90\x90\x54\x36\x63\x59\xe5\x14\xc8\xdf\x76\x91\xba\xcd\x37\xff\xac\xcb\xfe\x50\xd7\x4c\xe6\x37\x11\xc0\x23\xce\x08\xcc\x29\xdb\xb9\x48\xca\xc0\x38\x07\x5d\xa4\x91\x84\xa2\x19\xbf\x8f\x9c\xd2\x59\x2e\x2b\xc4\x34\xed\x44\xc0\xf8\x56\xc5\x9b\xe7\x40\x2a\x04\xfd\xb0\x75\xc4\x41\xa5\x6d\xbd\x00\x54\x13\xf4\xec\x91\x9c\x87\x87\x1b\x5b\x31\xca\x56\x69\x3f\xa9\xa7\x1e\x30\xd7\xb2\x17\xc5\x89\x85\x35\xb1\x32\xdf\x4b\x5d\x4e\xc5\xa7\x78\xa1\x7a\x98\x4d\x10\x42\x86\x28\x51\xc2\x9e\xad\x82\x4f\xcb\x89\x8c\x8d\x43\xe6\xd0\x2b\xb3\x0d\x06\x56\x44\x2b\x22\x81\x1d\x63\x98\xe2\x5c\xca\x69\x70\x61\xc7\x8b\x81\xdf\x32\xf1\x37\x8d\xef\x52\xe7\x2a\x9b\x88\xbb\x01\x3b\x76\x53\x69\x09\xe8\x53\x6e\x10\xac\x48\x2b\x41\xf8\x6f\xb7\xb6\xb1\x42\x67\xab\x98\x98\x1f\xda\x6a\x3b\xea\x0f\x19\x51\x59\x35\x3d\xf6\x0b\xbb\xa5\xf8\x93\xa9\xb8\xfc\x97\x5a\xe2\xf9\xc2\x17\x07\xed\xd4\x22\x50\x1f\xcd\x3f\x79\x86\xea\x8f\x6d\x21\x1f\x32\xc8\x65\xbc\x0b\x48\x86\x66\xfe\x8f\x95\x40\x12\x45\x21\x88\x16\x9f\x55\x73\x82\xc4\x4b\x96\xed\xb2\xda\x9b\xb4\xbd\xa9\x15\x59\xf8\x16\x88\x81\x0b\x87\x3b\x34\x52\x39\xa5\x28\x8c\x45\xd8\xa5\x4f\x17\x9d\x20\xe1\x29\xd6\x20\x63\xd0\x0b\xf8\x67\x7a\x49\x89\xdb\xf9\xee\xb6\x4f\x81\x3a\xa9\xd8\x66\x54\x11\x43\xd8\xbe\xb8\x21\xf0\x8e\x74\x95\xfa\x31\xfb\x1b\x2c\xe2\x88\x32\x66\x75\x27\x5f\x6c\x90\x2d\x30\x68\x73\x69\x6d\xab\x72\xe3\x62\xbb\xe5\x10\x16\xde\xec\x34\x8b\xe4\x4d\x05\x62\xf2\xa5\x52\x06\x6f\x3e\x20\x33\x90\x7e\xc7\x68\x7c\xbc\x82\x75\xaf\x37\x31\x37\xdb\x80\xfe\x74\x85\x99\x38\x1a\x37\x24\xc4\x53\xbc\x56\x84\x1e\xd5\xf0\x0d\x89\x42\x40\x36\xc3\x31\x91\x1d\x04\xa5\x1a\x50\x30\xa1\xc9\x74\xdd\x98\x84\xb2\x03\xf4\xab\xf8\x46\xbe\x63\x5b\x26\xd3\xbd\x10\x58\x26\x98\xe4\x35\xee\x45\x19\x9b\xde\xf7\xb7\xda\x35\xc5\x43\xd7\x11\x02\x9a\xcb\x13\xaa\x72\x97\x60\x4c\xd3\x30\x51\xf7\x68\xdd\x72\xc9\xfe\xf3\x16\xf2\x60\x81\x6c\x65\x62\x7a\xad\x62\x3e\x6a\xd8\xdf\x31\xee\x84\xf8\x68\x8e\x88\x08\x89\x18\x1b\x48\x5d\xc0\x29\x9d\x45\x36\x25\x87\x84\xcc\xd9\x55\x00\x79\x9b\xc3\x5a\x5c\xae\xc4\x0c\xb4\x42\x1e\xee\x89\x65\x5b\xec\x5a\xb1\x14\xc8\x20\x6c\xd4\x3b\x77\xf3\x86\x10\x49\x79\x12\xcc\xfd\xab\xae\xed\x23\x0a\xfa\xc0\x07\x5c\x2f\x53\x1f\xf0\x5b\x5d\x64\x47\xec\xdd\x4f\x4f\x78\x15\x2f\x31\x1f\xee\x5a\xdb\x01\x7b\x63\xd7\x2c\xe4\xfd\x73\x24\xa8\xe1\x87\x25\x88\x72\xc5\x05\x95\xb9\x94\xa4\xc7\xad\xa0\x12\x51\x9d\x09\x16\x94\x0d\x08\x9d\x27\x30\xf2\x3c\x0e\xeb\xe3\x5a\xd1\x01\x42\xae\xa2\x9a\x87\xb2\x06\x81\x12\x61\x90\x6d\x93\x7e\x68\x49\x28\x76\x78\x7f\x06\xf0\x52\x36\xf9\x2f\x98\x8c\xc4\xa2\x28\xfe\x1d\xa0\x25\x88\x3c\xbb\x71\xad\x82\x8e\x0c\xf0\x15\x74\xf5\x00\x9e\xdf\x2c\x35\x4f\x1d\xa9\x04\x9e\x9f\xa5\x15\x11\xa1\x2f\x27\x5e\x0b\x64\x6a\xa6\xba\x9d\xcf\xdf\xf8\x5a\x4c\xa3\x81\xf9\x9a\xe7\x36\x6e\x39\xf9\x8f\xcb\x33\x71\x11\x39\xa2\x53\xea\x54\x6d\xfe\xf1\xe5\xf6\x23\xc6\xf8\xc4\xd4\xf4\xc4\xd8\xc8\xec\xc4\xb8\x35\x80\xea\x0f\x86\x5b\x2f\xa6\xd9\xbe\x94\x44\x92\xec\x54\xc8\xf4\x51\x90\x55\xa8\x5a\x8d\x07\xb9\x3f\xfc\xa0\xe2\xb0\x6d\xcd\x50\x21\x2d\x40\xf5\x2a\x2b\x08\x99\x60\x5f\x16\x59\x7e\x32\xe6\x68\xe5\x03\x90\x62\x52\x4a\xbf\xca\xa6\x64\x9c\xdb\x53\x9f\x6e\x47\x49\x26\xc4\x93\xa7\x62\xf1\x31\x28\x43\x9b\x61\x07\xff\xb5\x93\x7c\xb6\xa0\xe0\x9c\x1f\x6d\xe1\x68\xd5\x19\xce\xf9\x43\x63\x12\x79\xee\x09\xe9\x4c\xaf\x46\x8d\x60\xe2\x1c\xb6\x35\x90\x12\x74\x19\xfe\xe6\xa4\x41\x45\x5a\xae\x44\xa4\xda\xe1\x51\xe3\x53\xa1\xbb\x3b\xee\x4d\xc9\x44\xe9\x0e\xd9\x5f\x5c\xb4\x36\x08\x5e\x8d\xbd\xf9\x01\x27\x2a\x2d\x78\x09\x85\xac\x7a\x2d\xf1\xd6\x17\x17\xb8\x9f\xe6\xbf\x19\x64\xb8\xa9\x5a\xdb\x92\x00\xc1\x3b\xf3\x77\x8c\x99\xfa\x10\xd4\x8c\x7e\x2f\xae\xb5\xbc\xac\xcf\xd9\xf5\xd9\xf0\xb9\xd7\x15\xb3\x26\x7f\x5a\x90\xde\xa1\x9f\x29\x90\x9b\x57\xb9\x08\xe8\x54\xf4\xb2\x42\xb6\xc8\x5d\x93\x90\x88\x6c\x5a\x4f\x75\xee\x70\x74\x21\xa9\x3d\xd7\x01\xc3\x1a\xb7\x3a\x26\x90\xf9\x36\x0e\x2b\xd4\x5a\xf2\x02\x37\x5c\x82\xd7\xd9\xf1\xb0\xa6\xc2\x2a\xcf\x95\x2b\x5c\x50\xb9\x5d\x7a\x9a\x3a\xee\x00\x13\x14\x36\x7d\x51\x35\xb0\xad\x81\xed\x8d\xaa\x9f\x7a\x6f\x7b\x18\xed\x66\x73\xb8\x55\x59\x86\xf4\x28\xa7\xf9\x8b\xe4\x21\x24\xe4\x3d\x3b\xc9\xd5\xad\x0f\x3e\xb8\xa8\x98\x0f\xec\xb4\xfb\x33\xfe\x6d\xc2\xdb\x4f\x78\xa2\xa3\x78\x2c\x25\xaf\xcc\x3d\xf6\xf7\x3b\xc8\x17\x55\x7b\xdd\x27\xd7\x6c\xaf\x7b\xc0\xa8\xbb\x51\xe4\x7d\x72\x68\xb3\xee\x93\x22\xf9\x73\xe1\xf8\xff\x7f\x5a\x79\xcb\x35\x5b\x52\xb8\x4b\x5e\x6b\xa8\xec\xa1\xfe\xa6\x00\x3f\xdb\xcd\xe6\x67\x45\xf2\xb5\x34\x86\xe0\xcf\x5a\x24\x42\x6e\x3e\x33\xbc\x20\xde\x68\x34\x86\xa8\x5e\xb8\x59\x29\x17\x84\xe6\xd8\x9a\x63\x6f\x18\xc7\x7e\x4e\x7b\x8e\x7d\xd0\x3c\x30\xd0\x82\x3d\xc3\x19\xca\xcd\x2b\xf7\x95\x6e\xf2\xb4\x1c\x40\x63\xa4\x0c\xc7\x73\xd9\xfc\xdd\x6e\x7b\x48\xfc\x81\x3b\x84\x9a\x11\x23\x4e\xf1\x73\x9c\xda\x7c\xa2\x9a\x2f\x32\x2e\x0b\x4e\xfd\x6f\x5d\xe4\x83\x06\xd9\x59\x0d\x5d\xd9\xe9\xaf\x19\xa4\xbf\xad\x11\x68\x2a\x7d\xc1\x4e\xc6\xa5\xcf\x0d\xe4\x85\x69\xf6\x65\x1e\x39\x50\x0a\x07\x98\x2e\x9e\x70\x12\x51\xc2\x0d\x30\x9f\x27\xc4\x79\xde\x1f\x06\xb4\xdf\xa2\x49\xa9\xc8\xb4\x0e\x90\x0c\x11\x2a\xae\x82\xf2\xd1\x5b\x24\x9f\x32\xc8\x13\xd9\xb0\x83\xc4\x93\x43\x7f\xc8\x68\x51\xf1\x4a\x1d\xba\xf2\x92\xfd\xa2\xba\xe1\x07\x89\x37\xd0\x6e\x0e\xce\x62\xe8\xb9\x56\xb5\x96\x70\xe2\x5f\xc3\x3c\x16\xc9\x65\xac\xa9\x9c\x43\x99\x0c\xb4\x9d\xc2\x29\xe5\x05\xfb\x40\x3a\x7e\x30\x75\x36\x1f\xbb\x02\xb7\x15\xc9\x9b\x2f\x27\xd7\xb6\xe6\xed\x3c\x00\xc8\xfc\xee\x13\xec\x57\x74\x89\x68\xa0\x1c\xff\x4c\xec\x5c\xe4\x73\x0d\x97\x2c\x2f\xc0\x2a\xd1\xa5\x30\x08\xa8\x08\x23\x0e\xad\x08\x02\x25\xd4\x33\x1e\x67\xb3\xff\xce\x39\xa5\xb3\x34\x70\xc1\x5c\x2a\xbe\xc7\x31\x78\xc5\x2f\x37\x09\x41\x7f\x16\xfe\xff\xb1\x8c\xa3\xf5\x97\x07\xe0\x13\x80\xcd\xd4\x22\x3f\xee\x87\x70\x00\x8b\xc7\x03\x58\x49\xc4\x96\xa6\xd4\x6f\x61\x8a\x63\x46\x81\x33\x33\x27\xfa\xad\xb0\xcc\xb8\x10\x38\x69\x61\x28\xc3\xa2\x17\x25\x35\xc7\x07\x8f\x58\x08\x8b\x61\xdb\xd7\x01\x0a\xa1\xac\x51\x16\x82\x08\x68\xb2\x14\x46\x67\xbd\x60\x5e\x70\x1f\xbe\xc6\xe2\x95\x15\x81\x11\x59\xdf\xd7\x1d\xfa\x76\xd3\xb7\xdb\x46\x39\xda\xfc\xa9\x2a\xc5\x7f\x6a\xcd\x52\xfc\x4b\xeb\xa5\xf8\x0b\x82\x0b\x3d\x22\xc4\xf8\x2f\xad\x50\xd8\xe5\x87\x15\x04\xf9\x5f\x42\x50\x88\x63\x21\x02\xfa\xc9\x78\x04\xc8\xb3\xbd\xc9\xf8\xc4\xdf\xa4\xe2\xfc\x97\x8d\x16\x89\x42\x5a\xcc\x10\x05\xfa\xf3\x46\x16\xf1\xc9\x64\x24\xb9\xc0\xb3\x7c\xd4\x78\x6e\x7b\xc1\xeb\x26\xf3\xa0\xf0\x38\xe1\xc3\x6c\x99\xcc\x4a\x91\xcd\xc8\xe7\xae\xcc\x54\x2e\x54\x38\x38\xbb\x7f\xf1\xaf\x34\x4b\x9d\xf9\xcb\x57\xda\xb7\x35\xfc\x2a\xa2\x96\x9a\x60\x86\x8e\x95\x79\xe3\xbc\xc1\xc4\x30\xe1\x55\x93\x35\xcc\x3e\x99\x7c\xb5\x8b\xa8\x8f\xcd\xcf\x77\x91\xdb\x57\xe3\x2a\xee\xcc\x51\x5f\x74\x62\xbf\xac\x0b\xff\x19\x4b\x2b\x1c\xe3\xe0\x68\x0b\x00\xbe\x95\x19\xa0\xe0\x77\x3c\x3f\x2e\xda\x11\xc0\xe4\xcd\x66\xe3\xf1\xcb\x0f\xa5\x01\xc6\x50\x95\x84\x81\xc1\x32\xf6\x1e\xc3\xe7\x94\x52\x84\x68\x3c\xb7\x4e\x8a\x54\xad\x7c\x9d\x31\xaf\x98\xc7\xfd\xb3\xf0\xad\x54\xb4\x12\xe9\x50\xc1\x6a\x38\xc9\x2d\xf6\x25\x27\xa6\x58\xd7\x2a\x3b\x12\x88\x2a\x64\x82\x07\xb8\xf7\x85\x95\x39\x90\x37\x1c\xd7\x85\xa0\x33\x7f\xb9\xde\xa3\xea\xd4\xe9\xd9\x34\x81\x31\xbb\xb1\xb0\xfa\x54\x6c\xc5\xd2\xb7\x1e\x12\xb2\xc7\x7c\x11\xad\x98\x56\x98\xcc\x58\x52\xdd\xbc\x94\x9d\xc2\x40\x50\x8a\x26\x54\x2c\x9f\xc5\x47\x9c\xe6\x4c\x21\xbf\xb6\x95\xed\x2e\x5b\xe4\x59\xc6\x88\xcd\xd7\x6f\xb5\xff\x6d\x8b\x28\xf7\x0f\x49\x89\x81\x41\xa7\x98\x7b\x76\x63\x22\xea\xa3\x53\x52\x58\xc4\x2a\xe1\x32\x98\x96\x4d\xda\xe6\xb4\x6f\xf7\x5b\xf6\x84\xf8\x57\x18\xc9\xdf\xfb\xf9\x8f\x69\xd0\x9d\x5c\x0c\x76\x05\x29\xe9\x72\x3d\x1e\x1b\x2b\x8c\x47\x32\xf2\x13\xae\xb6\x73\xe0\xbd\x88\x45\x61\x64\xf0\x78\x64\x4d\x28\xbb\x71\x28\xdd\x58\x35\x7d\x2f\x13\x36\x78\xb3\x98\xcb\x95\xe0\xf6\x22\x4a\x05\x84\x22\x4d\x25\x36\xe2\x69\x60\x60\x3d\x79\x6f\xbb\x85\x91\x1f\xd2\xbd\x26\x68\xcc\x50\x7a\x17\xe3\xe1\xdd\xf7\x36\xe9\x5f\x32\xb3\xc9\xb2\xb5\x1c\xd6\xac\x25\x27\x80\x9a\x69\x10\xfa\x06\xa6\x51\x78\x0e\xb0\x02\xcf\x7d\xd7\x0f\x0d\x21\x79\x3f\x3d\x57\x65\xc3\x49\xfc\x65\x59\x47\x40\xd9\x54\xeb\x6e\xb9\xfc\xd6\x3d\x45\xeb\x84\x77\x96\x2e\x79\x8c\x66\xbd\xdc\x6f\x89\x34\x97\xe8\x95\xaf\xd4\x7c\x40\xe7\x18\x9a\x8a\xe3\x22\xbb\xaf\x1c\x87\xf8\xb8\x93\xf9\x3c\xca\x35\x18\x71\x16\x94\xfc\x9a\x4b\xd3\xf1\xec\x8e\x21\xd9\x2f\x86\x93\x8b\x2f\xa3\x7d\x92\xad\xa6\x68\x9f\xb3\x4d\x81\xcb\xdb\x81\x5a\xc3\x26\x24\xa9\x23\x09\xad\xfb\xd8\x70\xee\x4e\x29\xd0\xba\xa7\xb7\xfe\xbc\x31\x1e\x3c\xe0\xb3\x6b\x80\x1d\x8c\xa1\xe2\x8d\x2d\x3c\x69\xfe\xb8\x9b\x6c\xc5\x89\x9b\x9f\xec\xb6\xbf\xdb\x25\x4e\x08\x55\x0f\x3c\x1a\xad\x14\xee\x83\x71\xa8\x9c\xf1\xf0\xc2\x89\xb5\x64\x3e\x04\xc9\x0e\x75\x02\x65\x1d\xd9\x76\xa0\x17\x26\x86\x73\x64\x8e\x1a\xdb\x01\xec\x4a\x29\x0d\x62\xed\x86\xe4\x3a\xa2\x64\x09\xe7\x95\x72\x39\xb8\xab\x55\xb2\x20\x35\x90\xde\x7e\xeb\xf4\x34\xff\x8e\x1c\x81\x64\x13\x22\x0b\x59\x18\x50\x75\x62\xaa\x27\x06\xbf\x7a\xf3\xb8\x73\x6c\x2d\x41\xd4\x7c\x1e\x07\x12\xba\x5f\xe3\x39\x47\xae\x95\xc8\x6a\x81\xd9\x9e\xb9\x49\x19\xbe\x5c\xbf\x70\x30\x77\x30\xfd\x30\xf5\xd6\xa7\x98\xa0\x19\x6d\xa4\x29\xbb\x42\xbe\x97\xf0\xb5\x43\xb6\xe4\xc5\xa1\x34\xec\x08\x1f\x83\x15\x11\xc7\x28\xb9\x9d\xdc\xda\x54\xba\x69\x71\x63\x23\x0d\x4f\xd7\x7c\x4a\xfe\xa6\x9b\x6c\xe3\xf7\x85\xf9\x70\xb7\xfd\x33\xdd\x82\xa4\xb2\x97\x48\x27\x34\x35\xdb\x48\x4a\x32\x57\xee\x05\xa2\x29\xae\xac\x78\x72\xeb\x7b\x62\xee\x07\x81\xe8\x44\x87\x54\xa8\xae\xc5\x05\x24\x43\x59\xfa\x00\x51\x06\xa8\x42\xba\x21\x54\xa8\x12\xd9\x18\x19\x69\x91\xaf\xa5\x05\x91\x71\x96\x07\x54\xf6\xcf\x57\x90\x7b\x36\xc6\x9d\x54\x28\xfd\xaf\xba\xc2\xbe\xb9\x4d\x9b\x4c\x5d\x09\x81\x5a\x40\x6a\xf6\xe9\xf1\xa2\xac\xa9\xb7\x15\xcd\xb8\xe7\x8d\x6d\xdc\x55\x26\x23\x88\xbe\xf3\x49\xe4\xad\x5b\xc9\x4f\xa0\xf4\xc4\x24\xa4\xa9\x08\x94\xfc\xb1\xd0\xaf\x55\x82\xd8\x7c\x60\xab\xfd\x33\x5b\x46\x9a\x3c\xc5\x3b\x57\x3e\xb4\x4a\xfc\xe7\x78\x21\x5c\x0a\x30\x44\xc9\x0b\x20\x59\x4d\x29\xf1\xad\x00\x32\x50\x87\xd2\x33\x38\x1b\x7a\xe1\x88\x48\x8d\x01\x90\x22\x58\x47\x45\x6b\x36\xac\x72\x66\xc1\xc8\xa1\x4a\x23\xa1\x0d\xc8\x4f\xb1\x11\x54\x6a\xdc\x59\x99\x9e\x13\x85\xb9\xac\xa9\x9c\xb6\x70\x95\x72\x72\x83\xd2\xa4\x58\x3e\xd5\x73\x99\x52\x52\x12\xa8\x46\x6c\xed\x4e\xe4\x67\x95\x19\xa9\xc9\xe5\x78\x69\xb2\xde\x3a\xe6\xe6\xf8\xd5\x05\x47\x19\xf0\x0a\xdc\xf9\xb3\x5b\x7d\x27\x9d\x5b\x08\xc3\xb3\x63\x80\xcb\xe0\xb6\x72\xef\x7e\x26\xcd\x4e\x0c\xb3\x1d\x8e\x65\x68\x4b\x35\xf2\x30\xa1\xdd\x50\x71\x68\x9f\x55\x95\xf6\x75\x60\x03\xe9\x0a\x36\xdb\x44\x1c\xbe\x5a\xb9\x7c\x36\xe4\x99\xf9\x9d\x40\x94\x4d\x45\xe1\x6e\xc1\x09\xe6\x91\x79\xaa\x7b\xd1\xac\xe7\xfe\x95\x8d\xa0\xc2\xfd\xd5\x54\xa1\x0b\x77\x28\xa8\xf9\xbe\x7a\x84\x03\xe2\x93\xfb\x36\xce\xb7\x1b\x87\x95\x1e\x37\xf2\x2c\x5e\xb9\x71\xd2\xbe\x59\xad\xdc\x28\xe6\xcf\x9e\xf1\x88\xbc\x6f\xbc\xf8\xcd\x8b\x43\xdf\x78\xf1\x5b\xfa\xe1\x5f\x98\xd1\x05\xfe\xa4\x49\x29\x13\x5b\xf3\x9d\x2e\xb2\x15\x31\x36\xf3\xeb\x5d\xc4\xdd\xb8\xc9\x9c\xc1\x78\x40\x2f\x0c\xec\x1f\x14\x66\x10\x23\xac\xab\x54\x80\x3f\x02\xe3\xc8\xbc\x2a\x68\x5d\xc4\x14\x82\x4f\x6d\x35\xaa\x05\x5e\x30\x8f\x12\x3b\xa7\x18\x2c\x3d\xdf\xf4\xac\x0a\x2c\xb1\x93\xb3\x2a\xda\xae\xe2\xac\xa6\xa3\x14\x53\xba\x68\x4e\x2d\x59\x20\x9c\x0d\x9b\xcf\xb3\xa7\x66\xd0\xaf\x06\x20\xca\xb2\xef\xcc\x63\x8f\x5e\x30\xcf\xb3\x63\x48\x0b\x84\xec\x26\x0a\x2b\x3c\x12\x83\xfb\xe4\x2c\x7a\x0e\xe2\x97\x23\x53\x93\x71\x26\x88\xea\xbf\x11\xc1\xe7\xcd\x17\xd8\x25\x91\x8d\x84\x7d\x26\x4b\xb4\x4e\x1a\x2c\xc7\x7f\x02\xf5\x1f\xb6\x48\x9c\x43\xa7\x84\xbe\xbb\xf8\xfe\x3c\xba\x05\xd7\xbf\x95\xf9\xfa\x97\xbb\xc8\x65\x4a\x41\x9c\xd8\xfc\x4c\x17\x29\x6f\x1c\x71\xcf\x28\x9f\xb2\xff\xaa\xa0\xfe\x59\x4f\xe4\xea\xa3\x1c\x52\x6f\x41\xbd\xea\x9b\x1d\x91\xb0\xfa\xc2\x2a\xe8\x38\xf3\xfe\xc5\x43\xc2\x6f\x7c\x32\xe9\x0c\x91\xba\x93\x49\x85\x13\x8b\x34\x48\xcc\xbf\x31\xed\x1b\xe0\x5f\xd9\xcc\x4a\x3c\x8b\x1d\x85\x27\x70\xf7\x2f\x81\x24\x99\xd6\xe2\x51\x8a\xa2\xa0\xa4\x92\x11\x5a\x1e\x2e\x90\xdf\x2f\xc8\xfc\x7b\x1f\x2c\x34\x77\x06\xcc\x0e\x93\x57\xfc\x2b\x4e\x3b\x4b\x13\x82\xb4\xec\xff\xdf\x40\x3c\xdb\xf2\xe2\x61\x62\xf5\x31\x19\x76\x96\x07\x13\x8c\xb8\x2e\xa6\x0a\x3a\x19\xba\x00\x98\x0c\xa3\xf0\x42\x97\xb2\x88\x29\x37\xab\xd4\xbd\x8d\xc1\xa4\xfc\x9d\x9c\xf6\x99\xaa\xeb\x3c\x3b\x9d\xcb\xde\x81\x3c\xf2\xd9\xbe\x26\xa2\x28\x8c\x86\xad\xbe\x14\xbe\x8d\x68\x29\xac\x54\x68\xe0\x52\xf7\x10\xb7\x40\x22\xa2\x54\x71\x96\xb1\x2c\x48\x4c\x83\x98\x12\xcb\xca\x26\xe4\x2d\x61\x29\x90\x62\x6e\xb6\xfc\x47\x8d\x87\x9e\xd8\x1e\x84\xfd\xef\x4f\x34\x7f\xfe\x89\x03\xf9\x31\x7e\xb6\x2d\xad\xe0\x29\x1d\x90\x34\x5f\x84\xcb\xd3\xe8\xd6\x57\x64\x53\x1a\xe7\x00\xba\x8d\xef\x47\x74\xde\x83\xac\xd5\x6b\xe8\x2b\xc3\x60\x56\xdd\xc7\x6a\x46\xb2\xe6\x0e\x1a\x86\xa1\xa4\xe1\x68\xf1\xd1\x4e\x3a\xb5\x32\x9d\xae\xec\x13\xe0\x92\xad\xbc\x53\x63\x9a\x5f\xc2\x11\xf2\x55\x2c\x4e\x5e\x0e\xd0\x15\xbd\x2e\xe2\xb2\x36\xe6\xad\xbd\x62\x1b\xda\xb7\xda\x9b\xc9\x6c\x2a\x3f\x20\xbf\x3a\xc7\xde\x5d\xc1\x28\x3b\x6b\x5f\x47\x26\x1d\xbd\xb4\x17\x2e\x93\x15\x53\x4b\x89\x46\x09\x1a\x43\xa8\x3c\x4c\xf2\xc3\xa5\x10\x92\xa2\xac\x72\x1f\x57\xf3\xb6\x98\xf9\x8a\xdc\x2a\xf3\x38\x56\x83\xa5\x7f\x05\x03\x5f\xf9\xbb\x39\xc3\xe6\xdb\x61\xb5\xaa\x67\x99\x19\x78\xf3\x29\xb7\x7d\x35\x5b\x03\x66\x85\xd4\x05\x45\x32\xd7\x78\x64\x57\xdf\x47\xdd\x60\x52\x57\x99\x95\x0f\x62\xe5\xef\xe6\x6c\x5b\xd3\xb0\xf7\x56\x0b\xdf\xbe\x69\x9e\x53\xd9\x1f\x66\xa3\xe4\x94\x72\x11\x43\x50\x51\x9e\x96\x6b\xbe\xc8\xcf\xf6\x96\x6d\xf6\x9e\xba\xdf\xf2\x3c\x80\x94\x26\x4d\x52\xb4\x7d\x6f\x8b\x76\x53\x59\xa1\x9b\xca\x71\x91\xa2\x6d\x54\x05\x33\x0e\x90\x7d\x64\xa8\x93\xda\x1f\x99\xcd\xd4\x3e\x2f\x9d\xfb\xbc\x4c\x2a\x2e\x2f\xb7\xac\x29\x1f\xdb\xa3\xc6\xf3\xda\x8b\xc7\x87\xcc\x9b\xf2\xa5\xa6\xba\x73\x97\x7b\x96\x3f\xb3\x93\xec\xc9\xf1\x0f\x3c\x32\x36\x91\x66\x93\x19\xf7\xe2\xb3\x99\xd0\xd7\xd7\xee\xb4\xff\x57\x41\x8d\x7d\x55\x52\xcf\x58\xac\x75\xba\xe5\x5e\x60\x1d\x09\x43\xa6\x7d\x8d\x85\x95\x6a\x2d\xa1\xd6\x44\x30\xef\x05\xb4\x48\xc8\x88\x75\x64\x6c\xc2\x9a\x1a\x17\xa6\x4f\x0f\x60\x00\x50\x4b\x20\xe6\x92\x27\x35\x73\x94\x1a\x81\x18\x78\xc8\x3e\x00\xef\x40\x38\x25\x14\x03\x49\x4d\xfb\xac\xcf\x6a\x14\xa2\x9f\x41\xe0\x82\xff\xa4\x88\x3b\x3b\x8b\xc5\xfd\x8b\x96\xfc\x74\x89\x9d\xfe\x00\xf4\x21\xfc\x28\x62\x0e\x69\xb6\x52\x2b\x04\x7b\x34\x14\xe9\x40\x67\x70\xab\x02\x76\x03\xaf\xc2\x4e\x31\x76\xb3\xba\x38\xde\xf3\xc6\xd6\x2a\x64\xc5\xc8\xf0\xb9\x0f\x6d\x27\xff\xab\x20\x93\x73\x7e\xa8\x60\xbf\xab\x50\x9f\x9c\x53\xa4\x1c\xc0\x9c\x32\xa0\x60\xab\xe6\x5f\x9e\xb8\x73\xd6\xab\x0e\x5b\x13\x75\x06\x8c\xfa\x1c\x9e\x5e\xbc\x82\x34\x9e\x90\x58\x39\x1e\x6e\x96\xcc\x73\xb2\x22\x71\x54\x38\xc4\x91\x8c\xff\xc3\x17\x2c\xaf\x6c\xd5\x02\xe9\x0c\xb0\xe6\x18\xe0\xf9\x12\x4d\x53\x26\x33\xa2\x50\xcf\xe0\x0f\x0b\x64\x07\xa4\xf3\x80\xe0\xf6\x6f\xcb\xe0\xf6\x3f\x2f\xcc\x62\x1e\x3b\x7c\x22\x48\xa7\xcd\x5a\x4e\x96\xad\xb0\xe2\x25\x09\x56\xaa\xcd\xc4\xbe\x8a\x46\x6c\xf5\x78\x2f\x68\x6c\x48\xd7\xeb\x70\x28\x62\x82\x2d\xc6\x4b\x06\x63\xd7\x19\x42\x63\xbb\xb0\xb3\x27\x99\x31\x39\xb1\x65\x0f\xd9\x45\x6b\xc6\xab\x78\xbe\x13\xf9\x18\x5a\x29\x73\x08\xc9\x76\xe5\x30\x92\x1d\x42\xc4\xf6\x1e\xdb\xda\x1d\x46\xd0\x33\x23\x6c\x9f\x3a\x3c\x9d\x45\x35\x62\xfb\x99\x2c\xa3\x7d\xac\x77\x23\x96\x5e\x89\xa2\x7f\xbf\x41\x38\x65\x9b\xef\x34\xec\x37\xf1\x22\x6d\x99\x24\x86\x53\xe3\x59\x16\x31\x36\x51\xb4\xee\xe0\x49\x5f\x10\xab\xe2\xab\x02\x87\x5d\xb4\xd8\x48\x82\xf9\xb8\xa1\xe4\x30\x7e\xc8\xb0\xdf\x61\xac\x2d\x4b\xb1\xd5\x90\x04\x79\x83\x56\x5d\x40\xa1\xdf\xdc\x9e\x49\x78\x99\xe3\x67\x3f\x4b\xa3\x8a\xf9\xb1\xed\xf6\x5f\x17\xc6\xb9\xa8\xe4\xa8\x9e\x50\xd6\x6e\xb6\x43\xfe\x32\xcf\x9a\xdf\x58\x49\x4b\xda\x61\xc1\x5b\xc8\x5b\xa4\x42\x0c\xc2\x68\x64\xe9\x8d\xb4\x3b\xee\x95\xc1\xbd\xdc\xaf\x3d\x85\x15\xa5\xf3\xbe\x6b\xed\x16\x8e\xe6\xbd\xc2\xe9\x26\xf3\x50\x75\xa3\xef\x85\x7c\x6a\xfd\x3c\xf5\x96\xd2\xcc\x4b\x3d\xc0\x1d\x25\x39\x3c\x54\x94\x0a\x5d\xca\x8d\xc8\x99\xe4\x11\xe8\x7d\x05\xf9\xd9\xce\xd2\x65\xeb\x66\x91\x25\xeb\x38\x5d\xbe\x55\x31\x31\x3b\x58\x8f\x24\x58\xc6\x8e\xc2\x80\xbb\xb5\xa1\x3d\x5e\x44\x26\x29\xcb\xe7\xc9\xef\x9f\x37\x76\x2a\x9d\x66\xeb\x2b\x6f\x21\x0f\x19\x84\xc8\xb5\x8a\xcd\x77\x18\xf6\x83\x46\xfa\xb7\xe2\xa9\x53\x57\x6b\x3f\xce\xd9\x09\xa5\x38\xff\x6e\x69\x79\xc7\xea\xe3\xbd\x87\xc0\x8e\xc5\x96\x16\xad\xe2\x4a\x92\x30\x5b\x6c\x4c\x8f\xe2\x44\x66\xb7\xf0\x9b\xf9\x7e\x81\xa8\x53\x32\xff\xb6\x60\x7f\xb9\x30\xbb\xbe\xbb\x9b\x5a\xd8\x5b\x90\x5e\x43\x65\xfb\x74\x79\x36\x84\x3a\x94\x49\x77\x42\x1b\xc1\x72\x4a\x19\x8a\x6f\x87\x42\x1b\x22\x17\x88\xda\xb1\xa7\x78\x25\xd4\x25\x7f\x7f\x95\x41\x9e\x90\x59\x01\xf3\x45\xeb\xe0\xb6\x79\xd3\x08\x9f\xe7\x0b\x6a\x34\x5a\xb6\x42\x28\xc9\x23\x88\x59\xea\x12\xfd\xd2\xd1\xb0\xe4\xc4\x3c\xc7\x0a\x79\xe5\x1e\xf2\xd4\x1c\x36\x83\xbc\xcf\xfc\xa7\x41\xfb\x6e\xfc\x67\x16\x81\x67\xbb\xe4\xca\xaa\x97\x3c\x8f\x04\x2f\x95\x89\xa1\xdc\x58\x75\x9e\x07\x72\x04\xcb\xa9\xd0\x27\x4b\xca\x87\xae\x70\x32\xc8\x9c\xa8\x7f\x2f\x92\x7f\x37\xc8\x16\x2f\x2e\xc5\x9e\xf9\x2f\x06\xd9\xdb\x36\xf8\x65\x72\x66\x6c\x66\x52\x15\x68\xed\x8f\x18\xf0\x5b\x66\xcc\x81\x85\xbf\x65\xe5\x59\x99\x6f\x3d\x49\x1c\xb0\x20\x80\x84\xca\x05\xcb\x9e\x18\x85\x27\x51\x75\x54\x66\x96\xa2\xe7\xaa\x61\x9c\xfa\xfd\x80\xef\x4a\xce\x65\xc0\x43\x37\x04\x9e\x35\x78\x74\x62\x64\x7c\x90\x17\xb4\x88\xc5\x35\x30\x08\x33\x1d\x9c\x9e\x18\x19\x3f\x39\x51\xac\xb8\xe4\x15\x06\xd9\xc1\x25\x5e\xea\x9a\x3f\x45\x6e\x68\x1f\xc0\x24\x5a\x67\x16\x61\x7c\x12\x6a\xc8\x41\x58\xae\x0f\xee\x52\x4c\x74\x56\x4c\x43\x58\x11\xbf\x9f\x87\xd2\x54\x9c\x2a\xf7\xa3\x74\xc3\xa5\x60\xc9\x89\x5c\x6b\x64\x6a\x92\xfc\x61\x81\x6c\x9b\xf7\x92\x69\x5a\x0d\xcd\x8f\x15\xc8\xfe\xb6\x83\x39\x82\x8d\x33\x43\xf9\x99\x02\xff\x35\x4b\x45\xf3\xbc\xec\x6a\xec\x41\x12\x1d\xc8\x9e\xa1\xe4\x6c\x8b\x28\x66\x5d\x54\x43\x6d\x86\x2d\xd1\x53\x26\xa6\x06\x7c\x0e\x64\x9a\x46\x55\xc7\xe0\xe5\x4b\xe4\xb7\xfa\xb9\x78\xe7\x04\x69\xde\x15\x2f\x00\x97\x64\x6b\x32\xf0\x92\x31\xf9\x22\xba\x2c\xf8\x61\x20\xcb\xc9\x56\x43\x5e\x57\x66\xde\x4b\xfa\x91\x12\xb0\x33\xf6\x38\xdb\x1b\x4f\x8b\xd1\x13\x2b\xda\x0e\xf9\x94\x41\xb6\xe2\xaa\x9b\x1f\x31\xc8\xbe\xb6\x4b\x89\x75\x34\x32\x2b\xf9\x00\x2f\xae\x51\x67\x10\xc3\xdf\xd4\x7c\xcd\xc2\x8d\x43\xad\x1c\xb0\x66\x89\x05\xbf\x43\xde\x6a\x90\x1d\xce\xfd\xb5\x88\x32\x4d\xc6\x7c\x8d\xd1\x01\x89\x8e\x88\xe6\x99\xd9\xdc\x29\x7f\xae\x3b\xaa\xf0\xbb\x05\x0f\x66\x30\xaa\x4b\x24\x23\x0e\x52\x9d\x06\x52\x9e\x7a\x81\x2b\x36\x21\x3d\x8c\xe4\x95\x06\xd9\x5a\xa2\xd5\x85\x72\x6c\xbe\xa4\x93\x95\x1e\xa3\xd5\x85\xc3\x33\x99\xb1\x1d\xc3\xdf\xb2\x0b\xcd\x7e\xb3\x0e\xcf\xe4\x0c\x86\xaf\xbd\x13\x81\x18\xc6\x3d\xeb\x78\xdd\x45\xf2\x17\x06\xd9\x4e\x39\x7d\x98\x7f\xd8\x49\x65\x95\xbc\x14\x55\xf6\xab\x0d\x49\x64\x99\x51\x25\xb4\x52\x0d\x23\x27\x52\x33\x52\xb5\x1a\xcf\xba\xa5\x6b\x22\xaf\xef\x22\xdb\xd9\xf4\xa7\x9c\x64\xc1\xfc\xd9\xae\x0e\x26\x76\x94\xb7\xce\x4c\xec\x0b\x05\xf1\x73\x5d\x09\x9d\x88\x0e\x00\x90\x80\x65\x93\x7c\xd0\xdc\xd3\x39\xaa\xeb\x2f\x78\xb4\x60\xe8\xff\x97\xbd\x77\x81\x8f\xe4\x2a\xef\x44\x7f\xd5\xd2\xcc\x48\xc7\xd8\x90\xba\x49\x76\x2f\x04\xb6\x28\x3b\x99\x19\xe8\x6e\x69\xc6\xaf\xf1\x60\x1b\x34\x92\xc6\x16\xcc\x68\x64\x49\x33\xe6\x11\x62\x57\x77\x9f\x56\x17\xaa\xae\x6a\x57\x55\x4b\x6a\x13\x6e\x30\x86\xf0\x7e\x6e\x08\x44\x0b\xec\xf2\x34\x98\x57\x1c\x82\x79\x06\x48\x78\x2f\x84\x10\x92\x85\x24\x64\x97\x6c\x96\x47\x58\xb8\x09\x2c\x0b\xbb\xcc\xcd\x26\xf7\x77\xbe\xef\x3b\xa7\xce\xa9\x2e\xb5\x5a\xf3\x70\x08\xd1\x8f\x1f\x1e\x75\x3d\x4e\x9d\xe7\x77\xbe\xf3\x3d\xfe\x7f\x7c\x0a\xbc\xec\x86\xac\x36\x8c\x0f\x48\x27\x83\xe4\xae\x41\xd0\x43\x1f\x39\x20\x1e\x12\xff\xc7\x0a\x54\x24\x8a\x65\x8e\x66\xec\xaf\xf9\x01\x07\x5e\x30\xa1\xd0\xe8\x88\x97\x59\x84\x67\x42\x99\x7b\x7a\xbd\x44\x97\x27\xa9\x8e\xbe\x04\x07\x90\xf9\x53\xcb\x4e\xc8\xb1\xb8\x9d\x93\x28\xe7\x87\x45\x7c\xb0\xe3\xa5\x2d\xf6\x0e\x8b\x5d\xba\x96\x74\x84\xfa\x44\x1b\xf9\xe6\x20\x92\x39\xb5\xe9\xd3\x2b\x98\xed\x98\x37\x13\xb9\xb7\x9e\xd1\x8b\x34\x47\x6a\x6d\xa9\xa3\xa1\xe8\x66\xdb\xa9\x27\x97\x27\xa6\x05\xd0\xc6\x6a\xee\xab\xec\x3f\x8b\xd5\xea\x87\x0d\x1e\xdb\x5f\x1a\x6a\xb5\xc2\xb3\x46\xdd\x36\x2d\xbc\x68\xd6\x0a\x0b\x3d\xa7\x4a\xed\x7c\x3f\x6f\xf7\x92\x3b\x82\x0a\x7e\xb2\xd2\x69\x68\x3b\xfa\xdb\x2d\x36\x22\xb4\x99\x37\x0e\x93\x8d\x9c\xd7\x65\x22\xa1\xb4\x1c\xc8\xb6\x25\x19\x92\x33\x17\xa6\x3c\x6e\x7a\x75\x7e\x50\x6f\xb3\x8c\xae\x91\xcb\xa0\xe5\x85\x8d\x40\x6a\x61\x19\xc1\xac\x28\x13\x98\x65\x63\xe7\xc0\x54\xd0\x69\x79\x32\x4e\xe3\x60\x95\xbd\xa3\xc4\x7e\xae\x53\x04\x3d\x6d\xbf\xa2\x34\x80\x4f\x72\x20\xc3\xbf\xd1\xa2\xcf\x59\xdb\x3e\x63\x0e\xa3\x62\x91\x42\xed\xac\xf0\x6d\x33\xd5\x3a\x23\x1f\x3e\xc7\x25\x95\x75\x40\x45\xae\xae\xec\x12\x5e\x01\x14\xf0\x84\xbd\xce\x62\x97\x48\x8d\x69\x6a\x61\xce\x7e\x89\xc5\x8e\x6c\xdb\x49\x33\xd9\x0b\x46\xd7\x2c\x6a\x37\xf4\x3e\xd0\x55\x32\x8d\x04\x54\x29\xdd\x03\x36\x7d\x21\x0c\x58\x33\xe0\x1b\x24\x09\x5e\x6b\x0d\x70\x17\xc8\xfa\x1d\x57\xcf\x53\xc5\x5a\xd9\x95\x9c\x0e\x27\x84\xa7\x5f\x97\x6b\xac\x4f\xb1\xd6\xb0\xb3\x27\xd4\x02\x44\x2d\x0a\x26\x24\xaf\x53\xd2\x10\x62\x69\x57\xd9\x57\x2c\x36\x12\xd7\x1a\xf6\x1f\x0d\xb3\x58\x16\x8f\xcd\xe4\xc4\xc0\xe2\xb1\x19\xb3\x82\x8b\x5e\x23\x4a\x9c\x63\x41\x54\x5f\x75\x66\xf8\x16\xaa\xc4\x8e\x77\xcb\xe1\x54\xfb\xb8\xa6\x8b\x81\xd7\x48\xb5\x49\x48\x56\x31\x4f\x86\x54\x9b\xfa\x04\xf1\xb2\xba\x5c\xa8\x36\xcd\x78\xa9\x87\xc7\x9c\x1d\xe9\x4c\xef\xb2\x28\x4c\xf5\xcd\x96\xfb\x2a\x02\xa7\x27\x7b\x82\x4e\x1b\x35\x33\xbf\x74\xdb\x89\xa9\x63\xb3\x27\xa0\xac\x2e\xda\x02\x89\xf6\x7b\xd0\x61\x68\xd0\xaa\x13\x07\xd6\x35\x9f\xaf\x4f\x90\xbb\xbb\x22\xca\xab\x50\xe2\xc0\x04\xac\xe6\x89\xcb\xe1\x1f\xfd\x2c\xfd\x3c\x8b\x8d\xe3\xd9\xe5\xa4\xd7\xb1\x9f\x3e\x44\x77\x4e\xcb\xa7\x8d\xee\x9c\x52\x97\x73\xbb\x87\xba\xbc\xed\x1a\x7b\x8d\xc5\xf6\x25\xc8\xe4\x65\xbf\xcc\x1a\xe2\x94\x54\xc0\x1e\xe8\x3e\x51\x72\x81\x19\xb5\x90\x17\x35\x3a\xc1\x6d\xf6\x33\x8d\xa7\x31\x8c\x1a\x3c\xa9\xb2\x6f\x5a\x6c\x7c\x05\x53\x47\x9a\x90\x03\xbc\x7d\x57\xdd\x24\x1f\x37\xaa\xf8\x5a\x4b\x5d\x37\x6b\x99\x5d\x7e\xc0\x16\x97\x6a\x90\xb6\xc4\x3e\x61\xb1\x91\xb0\x99\xd8\x1f\x1e\x46\x78\xcc\xe7\x34\xfe\xe7\x5a\xf3\x39\x7d\x3f\x74\xe6\x77\xac\xec\x9f\xaf\x12\x17\x36\x13\xf6\x66\x8b\x5d\xd6\x89\xe2\x74\x3d\x8a\xa5\xd8\x7e\xc5\x30\xa7\x86\x05\xe3\x1d\x6a\xd6\x93\xcc\xab\x39\x0d\x9b\xee\x9d\x9b\xe2\xf6\x5b\x16\x1b\xa7\xfa\x47\x89\xfd\xc2\x61\xe6\x15\xa9\x2f\xa7\xcc\xae\xbf\x45\x5d\xce\x4d\x7e\x75\x79\xc7\x73\xfe\xbe\x12\xfb\x59\x6f\x3d\x99\x0d\xbc\x24\xf5\xeb\x20\xff\x01\x48\xdd\x7e\xf5\x20\x46\x55\x25\x78\x6f\x5d\xea\x7b\xd3\xa8\xf1\x97\xac\xa2\x47\xf2\xf2\xf8\xd6\xa5\x07\xd2\xde\xb4\x93\x69\xe6\xad\x27\x1c\x6b\x5f\x13\xb5\x07\x88\x77\x76\xaf\xc5\x4a\xcd\xba\xd0\x53\x27\xb6\x57\x11\xa6\x8d\xfe\xe8\x1c\x9f\x36\x87\xee\xb8\x5f\x8b\xb9\x33\xdd\xf2\xc2\x90\x07\x17\xa1\x03\xd8\x17\x2c\xf6\xb3\x9d\x56\x94\x46\xa1\xe9\xda\xb6\xdf\x6b\x0d\x31\xc0\x0b\x05\x6f\x9a\x0d\x2a\x7a\xc2\x6c\x22\x3e\x31\x9d\xc1\xdb\x6b\x32\x1a\x1c\x5d\x3b\x5b\x4d\x2f\xb5\xd8\xbe\x3b\xba\x51\xad\x97\x72\xfb\xee\x61\x36\x91\x5b\xf0\x61\xa3\xda\x4f\xa0\x8b\x66\x4d\xe5\xc5\x1d\xda\x2d\x3e\x63\xb1\x7d\x4d\x31\x3d\x78\x2c\x44\xea\xf6\x35\x3a\x8e\x0f\x1b\x35\xba\xdb\xa2\xab\xb9\xf9\x41\x17\xf3\x0b\x7b\xc0\x7c\x90\x88\xa1\x10\x8f\x9c\xc8\x66\xc8\x82\x88\x66\x40\xc2\x00\x51\xc2\x03\x99\xe9\xd9\x9b\x4a\xec\x67\x56\xea\x3c\x37\x55\x5e\x52\x1a\x90\x30\x3a\x54\xf0\x84\xfb\x39\xab\xef\x7e\x6e\x6b\x9c\x9e\xfd\x49\x15\x02\x7d\x1e\x48\xf6\xf2\x92\x01\x02\x65\xba\x03\x74\x94\x29\xfb\x5b\x96\xfb\x2b\xfd\x97\x55\xd4\x56\x3d\x0a\x93\x34\xf6\x00\xd3\x09\xda\x8b\xd8\xd1\xeb\x98\xad\x8e\x10\x18\x19\xa5\x29\x81\x3a\x29\xa7\x41\x33\x8e\xda\x26\xac\x51\x8f\xad\xb3\x31\x09\xd2\x6d\xaf\x0e\x89\x89\xa5\x3c\x24\x47\x17\x25\xbe\x77\xe6\x8f\x6b\x89\x03\x15\x38\x7c\xfa\x2a\x2b\x73\x58\xda\x3c\xad\xb2\xe7\x94\xd8\x23\xb5\xf2\x31\xba\x31\x43\x48\x99\x59\xf4\xc2\x15\x6e\x7f\xcd\x72\xaf\xa1\xbf\x33\x98\x0f\xcf\x69\xfb\xe1\x44\xdb\xdb\xa0\xc8\x34\x69\x25\x8a\xe1\xb1\xa8\xe9\xcc\xcd\x24\xd5\x4d\x6b\xa4\xed\x87\xe2\xbf\xde\x86\xd1\xe6\x17\x59\x6c\x9a\x89\xab\xf6\xf5\x10\xef\x70\xcd\x55\xee\x7e\x51\x16\xe5\x8f\xf1\x50\xf9\x2d\xa1\xbc\x32\xa6\xe5\x43\x46\x89\xe1\xc0\x9f\x65\xe2\x03\xf6\x8d\xb2\x90\x83\x6d\x5f\x31\x00\x24\xa9\x17\xa7\xc3\x15\xf3\xdb\x26\x81\xab\x32\x55\x4a\xec\x2e\x08\x10\x7c\xe1\x98\xfb\x8b\xc6\x15\x0c\x2b\x93\x84\xa2\x0a\xe8\xab\x38\x2a\xf0\x87\x7b\xd9\xef\xe9\x08\x43\xbf\x7d\x9e\xfc\x97\x77\x3c\x30\xfc\x97\x5a\xe0\xd8\x6e\x54\xe3\x0e\xa3\x1a\x9f\x28\xa3\x1a\x4f\xb9\xf6\x89\xbe\x59\x32\x3c\xe9\x6c\xdf\x74\xdc\x0d\x71\xdc\x01\x68\xe5\xe9\xed\xe3\x12\x0f\xdb\x93\xdb\x27\xed\x18\x4b\x9f\xb1\x2f\x8c\x14\x6e\x27\xea\xc0\x3d\x1b\xae\x51\x0c\xe2\x9b\x46\xdc\x3f\xb0\xfa\xaf\x67\xa9\xf9\x4e\x76\x4a\x4f\x23\xfd\x14\x2e\x3a\x7b\xcd\x8f\xa3\x10\x82\xf3\xd6\xbc\xd8\xf7\x6a\x01\x4f\xc0\x26\x51\x65\x6c\x99\x8c\xfe\x68\xc9\x27\x70\x03\xa4\x3d\x51\x25\xee\x4f\xd0\x68\x82\x09\x71\x60\x99\x57\x83\x8d\x91\x86\xbc\x57\xc1\xf9\xd2\xf1\xfc\x38\x71\xbc\xa4\xf8\xa3\xe6\x9e\xf5\x45\x8b\x3d\x5b\x1a\x55\x7e\xd5\x8d\xe6\xb5\x80\x29\x32\x69\x16\x03\xc0\x5f\x78\x53\xc9\x4d\x6c\x4c\x42\x18\xd9\x8f\x71\x2b\x4b\x14\xa7\xa6\x13\xe1\x64\xdd\x2b\x37\x3f\x0a\xb5\x30\xa2\x92\xbe\x31\xce\x0e\x0f\x3a\xd5\xe5\x6d\xb3\x34\xba\xef\x1a\x77\x0f\x2f\x16\x1f\xec\xfa\xed\x1a\xc5\x10\xd2\xdf\x19\xfb\x27\xa4\xa5\xff\x8f\xe2\xa0\x0b\xce\xcf\x45\xde\x1c\xce\xba\x80\x59\x81\x8b\xd2\x74\xed\x3e\x97\x3c\xb7\x8b\xbc\x69\xa0\xf7\x70\xe5\xbd\x45\x46\x96\x66\x14\x3b\x51\x2d\xf5\xfc\x50\x4a\xa4\xac\xaf\xa6\x16\xe6\x9c\x7a\xcc\x21\xa0\xce\x0b\x92\xaa\xe3\xcc\x35\xf3\x90\x4c\x32\x96\x91\x12\x43\xa1\xd9\x35\xd0\xaf\x79\xbb\x23\xe4\x0b\x7b\xa1\x49\x58\xff\x0c\x97\xcc\x61\x7a\x6e\x7a\xab\xdb\xf6\xc2\x8a\xe8\x4e\xc8\xf4\xd4\x63\xfd\xf2\x67\xf2\xaa\x43\x1d\x47\x7c\x6d\x5e\xcc\x31\x06\xd7\xb4\x0d\x7a\x9a\x55\x5e\x9f\x9a\x5f\x1c\x61\x0f\xce\x6a\x03\xf7\xed\x0f\x8f\xb8\xef\x1a\x39\x63\x5e\xcc\x77\x5a\x3d\xea\x0b\x9d\xa5\x2f\xa9\x0a\xca\xfe\xc9\xbe\x0c\x01\xb2\x2a\xd6\x88\x70\x45\xa4\xa7\x3e\x7b\x4a\x76\x1a\x52\x64\xe2\xa9\x43\x43\x58\xd1\x8d\x0d\x00\x3f\x56\x8f\x3a\x14\xdd\x2c\x74\x46\x3f\x8e\x21\x6b\x36\x5f\x1d\x84\x5b\xf5\x57\x5a\x29\x44\xc1\xa4\x9c\x88\xcf\xc4\x6e\x92\x3a\xda\x18\x10\x40\x5a\x48\x7f\x8b\x25\x1f\xfb\x0d\x6e\x84\xaa\x12\x52\x78\x37\xc6\xb7\xd3\xc8\x71\xe9\x96\x2b\xf1\xa3\x10\x5a\x26\x25\x6b\xbb\x16\x77\xd6\xdf\x4f\xf3\x7a\x50\x9a\x97\x3a\x8d\x08\xde\x54\xfe\xd7\xfe\xb6\xc8\x2e\x22\x10\x89\x3c\x35\xb3\x0c\x78\x7e\xaf\xe5\xde\x63\xe5\x03\x9e\xb3\x40\xdc\xcc\xac\x9c\x8f\x64\x1e\x3e\x8c\xb9\x7a\xa1\x02\x98\xf5\x26\xdc\x3f\xc6\x0e\x6a\x8b\x1a\xf2\x8a\xc4\xc6\x85\x36\xc7\xc5\x28\x90\x94\xaa\xa0\xf4\x3e\x6f\xcc\xbd\xa1\xf8\x56\x51\x72\x4c\xff\x93\x49\xa1\x32\xfc\xc1\xbd\xbb\xca\xe4\x0e\x95\xc9\xae\x54\x26\x03\xf7\x97\x30\xfc\xc9\x38\x7d\x14\xf4\xbc\xae\x60\x5e\xcb\xae\x1e\xe0\x7d\xde\x7a\x0e\xec\x6a\x9a\xc3\x27\xd3\x34\xb5\xd3\xdd\x93\xcf\xef\x70\xf7\xb0\x01\xd8\xb1\x67\xad\xee\xf6\x1a\xed\xa2\xbd\xb0\x83\xcc\xc1\xe2\x05\x9e\x4b\x02\x64\x3f\xb8\x54\x4f\xc0\x19\xd0\x8c\x6c\x19\x27\xf6\x47\x2e\x75\x5f\x6c\x69\x17\x60\xc2\x1a\xcb\x5a\x8f\x34\x59\xf3\xfc\x40\xec\xca\x65\xd8\x28\x00\xfa\x0a\xc7\x1d\x16\xa9\x64\x57\x85\xb7\xc1\x5d\x9c\x3a\x62\x7c\xca\x14\xd3\x4a\x1b\x7c\x1c\x09\xf9\xee\xa5\x2d\x15\x28\xcb\x57\xbc\x7a\xcf\x59\x3b\x24\x5e\xaa\x6e\x5a\x63\xf2\xcb\x9b\xd6\x43\x11\xfc\x61\xaa\xd1\x88\x79\x92\x1c\xeb\x4d\xc3\xd7\xa6\xe7\x66\x16\x4d\x81\xf5\xfa\x4b\x76\x05\xd6\x2e\xf4\xf4\xc5\x92\x1c\x7f\xb3\x87\x0d\x98\x88\xf6\x67\xf7\xb8\xdf\x1e\xf5\x9c\xb6\x07\x6c\x07\xd4\x1c\x71\x4b\x11\x0f\xc7\x8e\x87\x2f\x2a\x03\x2c\x98\x8a\x25\x5a\x0e\x08\x82\x2c\x2a\x2c\x8d\x9c\x16\x0f\x3a\x6a\x69\x21\x58\xbd\x84\x41\x21\x67\x37\x50\x5e\x51\x9a\x76\x85\x37\x9b\x7e\x1d\x3e\xbb\xee\xf5\x9c\x4e\x94\x24\x7e\x2d\xe0\x55\x67\x9a\x4a\xa8\x7b\xa1\xe2\x5c\xf4\x3a\x9d\x38\xea\xc4\xc0\xc5\x9e\xab\x9c\x97\x88\x33\x11\x9e\xc9\xa0\xfa\x94\xec\x45\x01\xeb\xd0\xf7\x10\xc0\x1d\x35\x9d\xb6\x84\xc9\xa5\x58\xf6\xb2\xaa\x2e\xad\x0f\xf9\xbd\x20\x0a\x57\x38\x58\x95\x29\x14\x5f\x14\x4d\x94\x86\xf8\xf9\x98\xa7\xdd\x38\x24\xe0\x17\x4c\x19\x81\x8e\xa5\xce\x82\xe4\x8f\x70\x55\x43\x9c\xa5\x2e\x16\xad\xa2\x8a\x1d\x8f\x62\x87\xdc\xb4\x88\x5a\xd2\xf6\x00\xad\x90\x0e\xd4\xa2\x7c\xb1\x94\xd5\x52\x9c\x5b\xc0\x16\x8a\x4f\x96\x25\xf0\x20\x15\x0b\xdd\xad\x0e\x48\x50\x43\x15\x35\xa2\x15\x20\x67\xb9\x13\x44\xd1\x2a\xa0\x14\x3e\xb1\x72\x3c\x8a\xd7\xbd\xb8\xc1\x1b\xe2\x2f\xa7\xc5\xbd\x06\xc2\xc0\x3e\xb1\xb2\xc8\xbd\xa0\x32\xd7\xd1\xae\xd1\x3c\xaf\x2e\xf2\x76\x94\x72\x31\xb1\x9c\x03\x30\xb6\x5e\xea\x44\x71\x83\xc7\x07\x81\x5e\x80\x1b\x4d\x9e\x5b\x30\xec\x52\x0b\x6c\x9e\x9d\x38\x87\x8d\x6c\x69\xab\xc9\xcc\x9e\xc4\x94\xf4\xb5\x4f\xba\x87\xd6\x74\xea\x67\x9c\x3d\xfe\xa0\x8d\x61\x00\xf7\xf0\x59\x6b\x69\xfb\x7d\x71\xd2\xae\x56\x0a\x6c\x3b\xda\x06\x95\xdf\xf5\xde\xb6\xc7\x48\x3b\xdd\x9a\xd1\x18\x18\x74\x89\x5e\xfd\x7f\x8e\xba\xd7\xf4\x5d\x75\x5a\x51\xd0\x30\xd1\xc5\x51\x08\x22\xbd\x14\x12\xbe\x1a\xbb\xce\x3b\x47\xd9\xfb\xf2\x24\xc5\x6f\x39\x4f\x92\xe2\x95\x22\x92\x62\xb3\x3e\x17\x86\xa5\xf8\x2e\x45\x20\xbc\x71\x7e\x35\xbe\x6e\x6d\xdb\xaa\x6e\xc5\x20\xfc\x5d\xab\x90\x41\xf8\x3f\x59\x32\xc9\xf2\xa3\x92\xc7\x69\x6a\x4b\x22\xe1\x61\xfa\xe6\x9f\x8e\x49\xd8\x70\x63\xfc\xc5\x88\x01\xe4\x2e\xed\x35\xb7\x72\x38\x99\x37\xf2\x09\x76\x6f\x1f\x71\xd7\x84\x98\x5c\x87\xfb\x8a\x47\x55\xf6\x29\x01\x4f\x6d\xf1\x36\x5a\x14\x15\xd0\x25\x47\x68\x30\xf0\x39\xa5\x91\xd3\xf4\x89\xb0\x15\xb6\x91\x0e\xd8\x04\xc5\x21\x55\xdc\x3f\x90\x1c\xdc\xb4\xf6\xe2\x47\x37\xad\x07\x77\xcc\x72\x8d\x05\xf0\xfc\x12\x7b\x29\x71\xdf\xe8\x15\xff\xd5\x21\xa9\x6f\xb4\x77\xdc\x9b\xa5\x9b\xac\xea\x4c\x99\xdc\x3d\x29\x8f\xdb\x65\xc7\x4b\x92\xa8\xee\x43\x2e\x96\x4a\xf1\xaa\x47\x71\xcc\x93\x4e\x84\x10\x51\x58\xe3\x2a\xeb\x32\xaa\xbc\xbd\x2a\xa7\xd1\x19\xbc\xd0\x57\x88\x91\x1e\x66\x96\x96\x6b\x53\x59\xee\xbb\xe8\x3f\x3b\x54\x39\x34\x39\x69\x0e\xee\xb7\xc6\x59\x79\xd8\xa0\x54\x38\xba\xdf\x3f\xee\x4e\x6f\x79\xd7\x3c\x3d\x6e\x11\x77\x2a\x8e\x99\xc5\xde\xac\x1f\xed\xdb\xd5\x87\x77\xa8\x0f\xff\x99\x25\x4f\xf0\x5f\xb0\xdc\x67\x5b\x53\xaa\xf3\xfb\xcd\xc4\x18\x7f\x7b\xf1\x23\x7c\xf5\xcd\xf4\x28\x3b\x32\x4c\x3e\x56\xd1\x44\xd9\x55\xf5\x87\x57\xf5\xff\x99\xfb\x80\xcf\x5a\xde\xf6\x4a\xd6\x8d\xf6\xf5\x45\x4a\xd6\x96\xb2\x28\xaf\x72\x7d\x8e\xb1\xad\x33\x99\xb6\x70\xc3\xbc\x8a\xb9\x2f\xb6\x16\xfb\x13\x9a\x32\xdb\xab\xcc\x67\xf3\x52\x27\xf0\xa4\x0d\x42\x85\x36\x02\x47\x89\xd8\x16\xa6\x21\xb7\x4a\xd1\xde\x93\xb9\x78\x20\x6a\x46\x14\x17\x83\x66\x8c\xb5\xa3\xd0\x17\x5d\x6b\x88\xce\xff\x77\x8c\x71\x36\xda\xf1\xd2\x96\xfd\x54\x77\xe1\x14\xf9\xae\x8e\x22\xa8\x80\x27\xf9\x86\x31\xa0\x2a\x8e\xa2\xb4\xec\xc4\x1e\xb9\xb2\x3c\xdc\x22\x9a\xdd\x20\xc0\xe6\xa5\x31\xe7\x65\x1d\xe3\x61\x42\x9f\x6b\x7f\xa9\x03\x05\xfc\x91\xe5\x7e\xcc\xca\xbe\x76\x71\x3d\x4c\xe7\x1e\xfa\x8a\xa9\x6d\x59\xdc\xeb\xe5\xad\x68\xbd\x92\x46\x95\x6e\xc2\x2b\x7e\x6a\x78\xae\x3e\x6f\x31\x86\x0e\x26\x48\xd6\xfb\x3d\xcb\x7d\xb7\xd6\xc0\x25\x75\x47\x61\xc2\x7b\x62\x5b\x8f\x20\x59\x1a\xe4\x92\x50\xa4\x4e\x27\x3c\x36\x7b\x90\xa7\x75\xa8\x05\x30\xbb\x57\xc9\x83\x75\xd1\xda\x93\x8d\xd6\xff\x34\x1c\x71\xdf\x1c\xc6\x11\xa7\xdc\x6e\xe4\x88\xbb\xaf\xaf\xfd\x8b\xbc\x89\x90\x98\x5a\x9a\x09\xe8\xaf\x06\xfe\xa0\xf4\xd3\x15\x76\x08\x64\xc4\x5d\xb4\x11\x65\x6f\xb1\xd8\xa8\xe8\x69\xfb\xb5\x96\xfb\x52\xcb\x58\x0e\xb1\xb2\xe8\x41\xa2\x83\x78\x8a\x10\xa5\xb5\xea\x79\x8d\xb6\x1f\x3e\x10\xe3\xf3\x5e\x21\xb9\x69\x41\xdb\x6f\xb5\xdc\x17\x5a\x52\xa3\x3c\xea\x9c\xa4\xeb\x85\x3e\x11\xb1\x50\xe5\x8b\x17\xaf\xa2\x5b\x02\x22\xfc\xe1\x78\x21\xda\xc6\x74\xd4\xee\x44\x21\x0f\x89\xf2\xdc\x7e\xcb\xb8\x7b\x22\x77\x0d\xa9\x06\x72\x17\x85\xc0\x3e\xa8\x1f\x65\x89\xb7\x41\xc3\x98\x16\xcd\x33\x3d\xdc\x7f\xb7\x8f\x7d\x4c\xdf\xf8\xde\x73\xde\xf4\x6a\xf1\x45\x62\x57\x1b\x44\xa6\xb6\xab\xf1\xee\x4c\xe3\xfd\x82\xc5\x58\x5d\x1c\x77\xe0\x31\xfb\xa3\x96\xfb\x8b\x32\x0c\xaa\x2e\x27\x95\x93\x3d\xa0\x78\xf5\x87\x77\x5c\xf5\x4d\xe6\x69\x59\xda\x59\x6b\x3f\xfb\x05\x43\x51\xe9\x88\xb3\x58\xa5\xcd\xe3\x15\x5e\x59\xe5\x3d\x7b\x9f\xbd\x47\x28\x36\x4c\x3c\xf9\xb0\x82\x27\x01\x78\x96\xaf\xf4\xec\x31\x7b\x2f\xbc\xc5\x76\xf5\xdc\x1d\x84\x5d\xdd\xba\xbd\x9e\x78\x95\x7d\xb8\x48\x4f\xcc\x09\x9c\xbc\x76\xf8\x57\xa5\x42\x79\x96\xdb\x0b\xed\x0f\x94\xdc\x20\x77\x2d\x97\x80\x81\x7b\x9e\xba\x5b\x75\xe6\x52\xa7\x05\xe1\x4f\x51\x77\xa5\xa5\xd3\x90\x22\xa3\x6b\x1a\xfb\x7c\x4d\xc5\xb4\x00\xd7\x56\x2f\x8b\x3d\x30\xe4\xdd\x87\x2d\x76\x86\xa2\xa3\xe6\xdd\x29\x19\x7d\xb2\x65\xd4\x08\x96\x2f\x6b\xa9\x40\x0f\xcc\x68\x21\x5a\x54\x35\x36\xae\xde\xb3\x4f\xbb\x37\x67\x51\x24\xba\xfc\x91\xc1\x1e\xf0\x25\x49\x72\xa7\xea\x0e\xe1\x17\x32\x16\x0a\x6b\x65\x7c\xe3\x1d\x7b\xb6\xe5\xcb\x5d\x80\xcc\x10\xfb\x59\x7b\xdc\x7b\x4b\x1a\x5d\xec\xa1\xea\x75\x5b\x53\xc6\xe2\x3b\x83\x28\x63\x27\xd6\x0e\x4d\xd0\x63\x55\xf5\xbc\xce\xe5\xa2\x61\x68\x80\x7d\xfd\x00\x04\x49\x1c\xba\xee\x70\xf5\xd0\x35\x47\xaa\x87\xaa\x87\x26\x0e\x5f\xe5\x1e\xcc\xc2\xd0\xb3\xd4\x75\x13\xb2\x47\xd2\xf0\xf6\xf1\x18\xee\x4f\x74\x1e\x1f\x74\x23\xf0\x0d\x71\xbe\x76\x78\x98\xc6\x3d\xad\x36\x9a\x0f\x81\x04\x36\xad\x3b\xa2\x10\x6b\x64\xb9\x83\x3e\x12\x0a\x55\x37\xad\xd1\xba\xdf\x30\x09\x0f\x3f\x5a\x62\x75\x06\x97\xed\xa7\xb8\xf3\xd0\x2a\x5d\xa8\xf4\x89\x93\xb9\x05\x4a\xf9\x44\xf6\x3b\xa9\x28\x20\xfd\x5d\xae\x27\xf4\x41\xfd\x8a\xc5\xf6\x62\x4b\xec\xcf\x0b\x55\x79\x16\x5b\x85\xdf\x0a\x7c\xe4\xb2\x1b\xba\x4d\x5e\xb8\xa3\x8a\x38\xf4\xb5\x5c\xe8\x16\x6e\x50\x8a\x88\xac\x87\x11\x56\xdd\x34\x91\x31\x41\xd0\x1d\x60\x12\x1b\xa0\xe1\xfc\xfa\xbe\x21\x1d\xd3\x28\x50\xa6\xbd\x6e\xc2\xed\x3f\xde\xeb\x6e\x68\xbf\xb3\xc0\xf6\x3c\x07\x31\x25\x25\x7b\xa1\x23\xd6\x02\x69\x46\x4d\xcf\x0f\xba\xb1\x0c\x28\x07\x83\x5e\x5d\xe8\x70\xce\x3a\x40\xa7\x48\xdf\x15\x8f\x63\xa1\xf4\x89\x56\xf1\xb0\x0e\x87\xba\x58\x86\xe3\xc8\xf1\xff\xcc\x1e\x76\xff\x08\xdb\x03\xe6\x54\xfb\x1d\x23\xee\xeb\x46\x96\x01\xfe\x90\x07\x8d\x3e\xd3\x2f\x0c\x8c\x90\x51\x75\x0f\x00\x1d\x60\x66\xc1\x47\xca\xe2\xe8\x88\xd8\x45\xb5\x9e\x23\x36\x85\xc7\x2f\x9d\x9a\x77\x12\x1e\xfb\x9e\xb4\x68\x57\x9d\x93\xb0\xb9\x20\xc1\x5d\x23\xc2\x9c\xd9\x4e\x94\xa4\x4d\x7f\x43\x0c\xb4\xa7\xc0\xfa\x42\x34\x40\x7b\x29\xee\x00\x42\x61\x98\x12\x7d\x8f\x6d\xb9\x93\xc7\x51\xc5\x0f\x1b\x7c\x03\x82\xc8\x8e\xa3\x25\x58\xec\x5c\x5e\xa7\xc3\x3d\xe2\x71\x86\xf3\x2a\x80\x52\xe2\x7c\x51\xf4\x99\x50\xf9\xc4\x69\x74\xc9\x54\x0c\x6f\xb7\x3c\xf0\x57\xe6\xba\xae\xea\xc8\x13\x41\x95\x31\x85\x53\xc8\x1c\xc7\x15\x6d\x75\x9d\x0a\x1e\x88\xa1\xb3\xe8\x12\xe5\xce\x48\xb3\xbd\xec\x3b\xf1\x0e\x98\xdf\x9e\x32\xf9\xd4\xea\x76\x2f\x37\xfd\x38\x49\xa9\xc2\xb8\xec\xfd\x90\x5e\x37\xd6\xd4\xaf\xb1\x7d\x6d\x9e\x24\xde\x0a\xb7\x53\x77\x65\x2a\x1f\x5b\x88\xb2\xa2\x23\x35\x3d\xa8\x16\x4c\x36\xfa\x01\x6d\x94\x51\x78\x44\xf5\x83\x18\x53\xba\x93\xa0\xe2\x13\x0d\x54\x0c\xbe\x3d\x43\x52\xbf\xd0\x62\x7b\x63\xee\x25\x51\x68\x3f\xd3\x72\x93\x29\x99\x5b\xb3\xe3\x3a\x48\x7e\x32\xe5\x6b\x51\xfc\x64\x40\x1c\xe6\x84\x91\xb9\x26\x34\x87\x9c\x01\x01\x76\x8d\xe9\x2b\xd3\x62\x4e\x60\x8f\x0e\x9a\x4b\x5d\x8c\x1e\xed\x06\x3c\x59\xe4\x6b\x3e\x5f\x07\x52\xd9\x65\x63\x4d\x1c\x67\x33\xfa\x36\x77\xad\xfb\xa8\x79\x7d\xaf\xe4\xa2\x96\x5e\xca\x33\xda\xd3\xaa\xa3\xcc\xfb\x7a\x85\xfe\x82\xb1\x87\x17\xe8\x0a\xcb\x51\xc0\x31\x40\xd1\x7e\x3f\x73\x5f\x6c\x2d\x2b\xc0\x01\x3f\x71\xb2\x9b\xf9\x44\xa6\x14\xef\x08\x11\x17\xf6\x9c\xd4\xf3\xa5\x3d\x49\x67\x7b\x4b\x63\x98\xbe\xd7\xaf\xf2\x5e\x19\xd5\x71\x0e\x7c\x9b\x37\x92\x93\x57\xb9\x56\x00\xdf\x0d\x82\xfe\xa2\xd8\xb9\x5e\xfe\x75\xa3\x29\x1c\x7e\x6b\x9c\xbd\x5f\xc8\x6d\x28\xc2\x7e\xa7\xe5\xfe\x7b\x6b\x16\xe9\x3b\xfd\xb0\x81\x90\xf2\x14\xf6\x2d\x2a\x83\x8f\x41\x10\x22\xba\xad\x11\xc0\x0d\x91\xf4\xe0\x12\x38\x78\xf4\x87\x93\xaa\x73\xab\x10\x59\x5a\x98\xad\xdc\x34\x49\x56\x8b\x05\x3f\x1f\x2d\x21\xf2\x37\x2f\x3b\x0b\xa0\xa9\x64\x57\x40\x88\xcc\x47\xb3\x1b\xbc\xde\x4d\xcd\xf9\xf0\x27\x16\x1b\x11\xaa\xf6\xe7\x2c\xf7\xf7\x2c\x82\x8f\xcb\x6a\x0b\xa0\x75\xd2\xe5\x9e\x66\xbd\x9e\x21\x05\x0e\x6e\xc0\x2a\xef\x25\x34\x71\x21\x8c\x5d\xcd\xda\x72\xd6\xaf\x52\xc9\x99\xdd\xf0\x93\x34\x79\x0c\x61\xc4\x01\x33\x2e\x7e\x0c\x8b\x96\x3d\x06\xa5\xcb\x76\x13\xef\x2a\x7c\xc6\x40\x18\xb4\xd8\x98\xfc\x80\xfd\x6d\xcb\xfd\xaa\x75\x4a\x7e\xce\x50\x30\x57\x79\x6f\x7f\x42\x08\x94\x51\x08\x46\x43\xd2\x43\xe0\x0b\x19\x7d\x2d\xbe\x8c\x3d\x8d\x15\x85\x8f\xcf\xde\xd1\xf5\x02\x13\x9d\x93\x2e\xd1\x43\xa2\xbd\x77\x74\xfd\x35\x2f\x20\xb6\x98\x75\x3f\x68\xd4\xc5\x99\x58\x88\x70\x3a\x0b\x26\x11\xb9\xd1\x61\x86\xd7\xbd\x50\x4d\xe3\xac\x2b\x13\x32\x7f\x66\xca\x95\x98\x59\x2b\x51\xdc\x33\x1a\xfe\xad\x12\xfb\x99\x6c\x9c\x96\xb8\x38\xba\x25\xf6\x1f\x97\x64\xf2\xd5\x87\x4a\xcb\xf9\xbb\x7a\x8f\x80\x06\xc6\x63\x9f\x30\x29\xfd\x36\xcf\x8f\xfc\x01\xd4\x54\xe5\xa0\x45\x4d\x39\xa3\xd5\xf4\x2a\x6b\xc4\x90\x26\x9f\xa2\xbf\x02\x84\x3e\x07\xb5\x55\xaa\xa6\x5a\xd5\x39\xa6\x38\xdc\x80\xd9\x57\xd2\xfd\xf2\x54\xc6\x8e\xc9\x79\x40\x5d\x93\xcd\xd2\x66\x14\x73\x00\x93\x21\x4b\x30\x5f\xf3\xeb\xe9\xc1\xaa\xf3\x64\x1e\x47\x30\x4c\x21\x5f\x41\x88\xd1\x9c\x6e\x93\x12\x07\x9d\x97\x38\x93\xce\x01\x78\x4d\xe7\xb5\x39\x28\xa3\x7f\x29\xdc\xd7\xf0\xf5\xbd\x41\xf9\xce\x5f\x6d\xb9\x2f\xb0\x0c\x5f\x3d\x56\x4b\x32\xdc\x1a\xfd\xa7\xe4\x50\xa4\xd6\x85\x5a\x09\x7e\x42\xd3\xa6\x9c\x4d\x41\x0d\x0e\x53\x2e\x1c\xd5\xbb\x40\x67\x2b\xf6\x9c\x15\x98\x10\x38\x05\x8c\xe9\xf0\x8f\x63\xec\x97\xb6\x37\x2c\x81\x2b\xf2\x4f\xc7\xdc\x65\xd2\x9c\xc8\xc9\x8c\x0e\x51\x75\xf4\x97\x3e\xed\xcc\x2e\xe0\x19\xd1\xad\x39\xc3\x14\x25\x85\x14\xfb\x26\x9f\xbf\xeb\x9b\xdc\xa9\xa5\x26\x90\xae\xc9\xba\xeb\x9c\xd8\xa6\xcf\x75\x45\xfc\x2a\x76\x78\x18\xdc\xa7\xdc\x81\x7e\xd7\x8c\xf2\x2f\xc7\x5d\xf8\x94\xed\xcd\x40\x47\xec\x6b\x2a\xc5\xa6\x9f\x02\xe7\xa0\x9e\x99\xc7\xee\x2a\xb1\x47\x6f\x63\xa7\x40\x66\x5a\xb2\x71\xff\xb1\xe5\x1e\x31\xae\xa8\xd3\xbc\x71\x64\x30\x18\xc9\x24\x4d\xba\x21\x62\x9e\x67\xb1\xe7\x58\xec\x41\x41\xe4\x35\x8e\x79\x81\x17\xd6\x79\x6c\x77\x87\xb0\x53\x9e\xd0\x5e\xc0\x1a\xb8\x37\xea\xd7\x24\x8a\x5e\xd2\x57\x9f\xae\xca\xf0\x13\x1f\xad\xd4\xe8\x85\x2a\xfb\xdf\x66\x3a\x07\xb1\x62\x54\x33\xe8\x86\x45\xc2\x1a\x05\x41\xfc\x1f\xc7\xdc\xd3\xc5\xb7\x70\x09\xaa\xf5\x45\x15\x81\xb0\x44\x4d\x0c\xe7\xdf\x1c\x2c\x89\x7f\xbc\x9b\xe6\xb1\x53\x49\xbc\x2e\x25\x71\xe8\x1e\x50\x69\x1e\xe8\xa9\xde\x6a\x0c\x76\x90\xe8\xb1\xf5\xec\xd8\x15\xca\xc3\x0b\xe5\x37\xe8\x42\xf9\x95\xe7\x29\x94\xcf\x5c\x1c\x67\xd5\x59\xeb\xf6\xed\x25\xef\x0d\xf6\x63\x8a\xf9\x58\x8a\x45\x44\xde\x12\xff\xe1\x31\x76\x60\xd0\x71\x5f\x52\x67\x8a\xb3\xbe\xfd\xd2\x31\xf7\x1d\x96\x7e\x25\x3f\xb1\xbd\x7a\x4a\x41\xbf\xc0\x49\x4a\xc4\x93\xba\x09\xb7\xc3\xe3\x66\x14\xb7\x9d\x28\xcc\xb0\x9e\xd1\x42\x8b\x65\xc4\x0d\x0e\x73\xd5\x4f\xc2\xfd\xa9\x93\xf8\x2b\x21\xd0\xae\x85\x69\x19\x66\x1e\x89\x34\xa7\xd1\xed\x04\x78\x74\x2e\x4b\x03\x58\xe2\xd7\x90\x59\xc5\x0f\x85\x06\x1a\xf0\x94\x0b\x89\xb6\xc6\xe3\x9a\x29\xd1\x3e\xbb\x97\xdd\x5d\x62\xe3\x5e\xc7\xbf\x49\x74\x5b\x62\xff\xd0\x72\xff\xcc\x9a\x5a\x98\xc3\x9f\xb2\x4d\x7a\x52\xa9\xbc\x49\xa8\xcb\xba\x80\xd7\x5a\x21\xf4\x75\x65\xfb\x9a\x5a\x98\xc3\x61\xc1\x33\xa1\x7e\x36\x0f\x7b\xd4\x51\x5a\x98\x28\xc1\xe8\x03\x08\xb6\xb4\xea\x84\xdd\x36\x9c\x64\x1a\x1a\x2c\x36\xb9\x2c\x54\xe9\x59\x06\x2d\xc1\xb9\x3b\x8e\xfb\x28\x97\x8e\x42\x5e\x10\x0c\x08\xb6\x66\x1f\xb0\xd8\xa5\xb2\x64\xb0\xcd\xd8\xf7\x88\x93\xca\xa2\x7e\x09\x86\x2f\x74\x64\x7a\xb6\x38\x69\xa5\xd9\x78\x63\x4a\xad\x32\x00\x20\xe1\xbe\x76\xf4\x77\xa6\x42\x32\x42\x25\x5c\xb2\x01\x20\x45\xeb\x1a\x8f\x7b\x00\x52\xab\xcd\x8f\x9d\xd4\xfd\xeb\x16\x1b\xcf\x78\x78\xbf\x6c\xb9\x1f\x50\xf5\xce\x65\xd5\x65\x7d\xa7\x6c\xf8\x66\x1d\x8d\x6f\xf6\x43\xfe\xab\x79\x52\x65\x8e\xfb\xa8\x89\x66\x14\xb9\xf9\x13\xb1\xc6\x69\xeb\xec\x6f\x46\xd1\x7e\x05\x6b\x6e\x0c\xdc\x56\xe5\x0e\x68\xe6\x6b\xc5\x21\x52\xcc\x60\xfb\xdf\x5a\xee\xfa\x19\x1e\xd7\xcc\xc6\x65\xb2\x21\x93\xe0\x62\x6e\xc0\x3b\x65\x27\xf0\x57\xf9\x51\x67\x45\x1c\x91\xc5\x1b\x65\x64\xa2\x2d\x53\x5a\x6c\x99\x24\x70\x19\x89\x59\x79\xd9\xe9\xc4\xd1\x46\x6f\x27\xc3\xf0\xcc\x7d\xec\xea\xad\x22\xeb\x0f\x55\x6f\x16\xa2\x44\x2c\x96\x60\x21\x6a\x4c\xd1\x3d\x1e\x83\xb1\xf0\x53\x7b\xdd\x0a\x75\x46\x3d\xd3\x09\x9c\x96\x7a\x05\x03\x7c\xd5\x4b\xd5\x4d\xeb\x32\xf8\x6b\x19\xd0\x11\x16\x79\x73\xd3\xba\xa4\xed\x6d\x2c\x72\x90\x04\xe6\x12\xff\xf6\x1e\xf6\x62\x8b\xe9\xb7\xed\xff\x47\xc6\xf9\xfa\xdd\x4e\x87\xc7\x04\xf8\x23\xcf\xac\x61\xb7\x5d\xe3\xb1\x22\xd7\xc0\x65\x8e\xa8\x3f\x62\xe6\xd2\x31\x3f\xab\xcd\x63\xc4\x5d\xda\xc6\x92\xb6\x07\xf0\x5a\x60\x2b\x3f\xe9\x87\xf2\x93\xa6\x39\x20\x65\x97\xb4\xb3\x7b\x36\x97\xd5\x59\x10\x53\xff\x7c\xab\x93\x45\xd3\x1c\x32\xbf\xfa\xeb\x25\x96\xeb\x35\xfb\x07\x16\x9b\xde\x5a\xb9\x30\x07\x70\x3a\x8e\x92\x84\xf4\xbc\x3c\x62\xc0\xdb\x2d\x23\x22\x09\xbe\x92\x49\xaa\xc7\x6c\x3d\x92\x28\xb2\x02\xee\xc5\xc5\x56\x7e\xc0\x3b\xea\xb6\xd1\xdc\x2d\x84\x3b\x3c\x9f\x50\x92\x4b\x83\x27\x00\x94\x94\xeb\xa2\x5a\x8f\x6c\xb3\x42\xdf\x00\x50\x4a\x7d\x55\x02\x6e\xeb\x23\x10\x57\x63\x7a\xe1\xb4\x96\x21\xb0\xa0\x42\xf7\xed\xdf\x55\x19\x05\xaf\xb3\x08\x82\x43\xa6\x08\x4c\x2f\x9c\x76\xba\x5a\x5a\xc1\x81\x6d\x52\x00\x32\xb9\x3e\xbd\x70\xfa\x20\x31\x5e\x90\xc5\x44\x54\xf7\x31\x8e\x9f\x43\x46\x30\xb2\xe7\xb5\x51\x20\xb6\x4a\x33\xe7\xdf\x18\xe2\x2f\xed\x63\x57\x0e\x4c\x6e\x39\x54\x9d\x25\x60\x65\x4c\x67\xa1\x68\xcb\xcd\x7d\xee\x8f\xad\xa2\x3b\x9a\x59\xba\x15\xad\xab\xb1\x45\x22\x13\x4a\x8e\x00\x02\x91\x5c\xa0\xbc\xd8\x97\x34\xec\x01\xd2\x21\x0f\x34\xb3\xb4\x2b\x27\xe0\xe1\x0a\xe6\x74\xde\xd1\xe5\x5d\x70\x2a\xd5\x83\xa8\xdb\x70\xd0\x03\x23\x29\xe0\xfd\x3a\x2f\x3b\x51\xec\xdc\xb2\xb0\x84\x0a\xa6\x38\x2f\xc9\xe3\x52\x46\xac\x42\x3e\x46\xc8\xa7\x83\x00\xa6\x83\xc0\x83\xa5\x68\xdd\x5d\x1c\x45\x97\x52\xf6\x95\x9d\x2c\xe1\x69\x75\xd3\x62\xd8\x94\x3e\x4a\xb4\x67\xed\x61\x27\x98\x76\xd3\xbe\xd1\x3d\x94\xfd\x2a\xd2\x0e\xa8\x4f\xfc\xd0\x81\x51\x47\xda\xf8\x4c\x46\xde\x63\xb1\xcb\xf0\x11\xc5\xaa\xf2\x1b\xd6\x05\xa0\x55\x59\x30\x0b\x85\xe8\x84\x3c\xa9\x95\x27\x67\x58\x1d\x8d\xb5\x09\x8f\xfd\x0c\x62\xc1\x23\x2e\x25\x2c\xa8\xca\x3e\x67\x31\x1b\xfb\x6c\x4a\x4f\x57\xfa\xdd\xf3\x4c\x57\xea\xf6\x97\x99\x19\x42\x61\x9d\x75\x78\x5c\x11\x42\x42\x25\xcb\xac\x04\x51\xcd\x0b\xb6\xca\x09\x72\x4e\xf6\x91\xd4\xe3\x14\x44\x29\x07\x5f\xa8\x0a\xf5\xe6\x92\x34\xbb\x60\xbf\xed\x3c\x9b\xf1\x34\xad\xb0\x5c\xfd\x87\x49\x64\xda\xa6\xd2\x7a\xef\x54\xd9\x5b\xc6\x0d\xa7\x17\x50\x1b\x8b\x19\xf0\xf8\xa8\x46\x76\x90\x67\x8f\xbb\x93\xea\x57\x5e\x21\xe9\xb3\x82\x78\xce\xe3\xa3\x9a\x69\xff\xf8\xf8\x18\x9b\x66\x7b\x85\x22\xba\xc6\xed\xeb\xa4\xe8\xbb\x62\xd9\xd8\x7e\xf0\x76\xd0\x53\x8b\xae\x3f\x61\xe9\x1f\x2c\x76\x19\x29\xdc\x7e\x14\x2e\xfb\x6d\x6e\x7f\xc7\x62\xd7\x9e\xc3\xf4\x16\xef\xba\xef\xd6\x23\xc0\x61\xce\xae\x4b\x1c\x94\xa7\x45\x35\x67\xdd\x03\xdf\x0f\xa8\xf7\x0d\x08\xf7\x21\x3f\xc0\x4a\xd7\x8b\xbd\x30\xe5\x0a\x45\x23\xc1\x00\x9f\x96\xd7\xe9\xf0\x30\xa9\x10\xd7\x23\x1c\x30\x64\x6e\x57\xc2\x3b\x1e\xb8\x0a\x08\xb8\x43\x9c\xbf\xa8\x48\x5d\xc0\xfb\xa1\xb3\x78\x7c\xfa\xca\x2b\xaf\xbc\xce\x81\xb3\x8b\x87\xe7\x6a\x3f\x74\x4e\x2f\x4f\x57\xd9\xef\x97\x8c\x10\xb9\xdf\x29\xb9\xaf\x01\x6f\x24\x19\x29\x94\x9b\x95\x62\xe3\x3c\x0a\x94\xd3\x2c\x20\xfb\x13\x73\xc4\x76\x9c\x35\xb2\x1e\xc5\xab\x42\x46\x26\x13\x75\x75\xea\x4b\x26\x9e\x16\xd5\x92\x4a\xdc\x0d\x2b\x69\x54\xc9\x46\x68\x42\x57\xe7\x0e\xb3\x49\x56\xdd\x52\x1b\xd0\xa7\xdd\xc5\x8d\xca\x3b\xc9\xf6\x36\x3d\x3f\xe0\x0d\x7b\x5a\xce\xc4\xea\x72\xbf\x22\x84\x7e\x1e\x4c\xbe\x6d\x38\x9d\x96\x97\x70\xe7\x38\xbc\x67\xce\xc9\x57\x94\xd8\x38\x40\x07\xc2\x74\x7c\x76\xe9\xdc\xa7\xe3\x67\xb6\x9f\x8e\x5e\x7d\x35\x8c\xd6\x03\xde\x58\xc9\xe0\x60\xc4\xbd\x6c\x28\x7e\x32\xe6\xe9\x12\x1b\x4f\xba\xf5\x3a\xe7\x0d\xde\xb0\x8f\xcb\x6e\x3e\x34\x64\x37\x2f\xc9\x57\xcd\x9e\xfe\xfa\x16\x91\xc9\x26\x4d\x84\xfd\x7b\xe3\xee\xb2\x91\xd9\x41\xaa\x1e\x50\xa7\x29\xe5\x5f\xf2\x62\x12\x00\x4f\x99\x12\x34\x06\xf0\x43\x6c\x5a\x7b\xf1\x0f\x43\xb4\xfd\xd1\x18\xfb\x03\x8b\x3d\x04\x8b\x9b\x52\xf1\x2f\xf6\x3b\x2d\xf7\xa5\x04\x1d\x9f\x5d\x05\x52\x0a\x9e\x50\x81\xea\x4c\x22\x59\x2c\x7d\xae\xe5\x30\x77\xbc\x44\xc3\x38\xcd\xaa\x51\x75\xa6\x85\xce\x1a\x00\x9d\x67\x4c\x17\xf7\x27\x4e\x23\xaa\x77\xdb\xca\xe8\x09\xd4\x2d\x0a\x38\x88\x0c\x92\xf7\xe6\x8e\x54\x5a\x43\xd8\x1b\x2c\x46\xcd\xb3\x5f\x65\xb9\xcf\xb7\x66\x90\x13\xa3\x40\x05\xd1\x18\x33\x28\xbe\x28\x6c\x04\x26\x8a\x69\x56\x47\xd8\x75\xa0\xa2\x18\x78\x9f\x39\xee\xe2\x58\xa8\x6c\x50\x30\xf0\xd2\xae\xf8\x09\x44\x3b\xc9\xd3\x2b\xe9\x59\x86\x7a\xf3\xb9\x0c\x4e\xe9\x63\x96\xfb\x3b\x03\xe0\x94\x06\x81\x21\x35\x09\xd1\x09\x02\xb8\x88\xf7\x14\x2d\x07\x2a\x9a\xc5\xec\x7c\x4d\xfb\xd4\x1a\x8f\x33\x17\x94\xe5\x06\x4f\x79\xdc\x46\xd2\x9d\x4c\xb5\xd6\x81\x9c\x22\xb0\x03\x98\xfe\xf1\x37\x8f\xb0\x9f\x0d\xa3\x06\x5f\xe8\xd6\x02\x3f\x69\xa9\xe8\x53\xfb\x45\xc3\xd0\x07\x9d\x88\xea\x5e\x90\x3f\x28\x7d\xa9\x34\x5f\x50\xa0\xb4\xd5\xe7\x92\x3a\x28\xba\x93\x94\x67\xcd\x82\x9f\xf0\x30\xf1\xc1\x47\x9d\x0b\x6a\x15\xdd\xd2\x3f\x23\xc5\x15\xb9\x4f\xaa\x5b\x5a\x3d\x08\x13\x0d\xe3\x3e\x1a\xfc\x74\xd8\x31\xae\xd7\xbd\x20\x48\xaa\x7a\x50\x93\x9f\x28\x23\x10\x9a\xdc\x64\x98\x13\x8e\x12\x9c\x67\x54\x5c\x2d\x9a\x7c\x31\x53\x77\xae\xb9\x75\xc3\x12\x23\xca\x4c\x3e\x04\xe1\x2b\x59\x00\x2d\xf5\x50\xa2\xad\xc0\x2a\x6b\x6b\x69\x51\x9e\xbb\xb4\xa4\xd0\xd7\x3c\x8d\x3b\x19\x29\x12\xba\x71\xb6\xfc\x52\x05\xc7\x56\x40\x99\x6a\xa6\x4f\x19\x79\x4a\x9f\x1a\x63\x0f\xdb\x02\xc4\x17\x7c\x32\x6f\x19\x73\x4f\xc9\x1f\x72\x7d\xae\xb7\xa2\x40\x33\x8d\x06\x01\xf4\xb4\x94\xae\x2d\x6f\x8d\x3b\x35\xce\x43\x7d\x99\x51\xc2\x31\xac\xb1\x42\x6f\xcc\x77\x76\xbd\x31\x3b\xf5\xc6\xcc\x4b\x6f\xcc\xac\x7b\xa9\xf4\x8b\x03\xc4\xb3\xae\x07\x1d\x64\xfb\xd9\x2f\x0e\x85\xd9\xbc\xeb\x64\xf9\x17\xe4\xf9\x5e\xd8\xde\xff\x52\xb1\x1f\x5d\x94\x00\x21\x85\x41\xde\xdf\xf2\x3f\x1e\x62\xa0\x75\x67\x99\x0f\x60\xf5\x98\xaa\x43\x80\xb1\xfd\xf9\x87\xb8\x1f\xb4\xcc\x6b\xc0\x8b\x23\x06\x77\x05\x40\x51\x8f\x3a\x8f\xa2\xec\x83\xb2\xd3\x0d\x1b\x3c\x4e\xd2\x28\x6a\xa0\x19\x8c\xc7\xd2\x2b\xc2\xe3\x96\xd7\x01\xe3\x58\x87\xc7\x7e\xa7\xc5\x63\x2f\xa0\x60\xa5\xa4\x8c\x46\xea\x90\x8c\x05\x69\x0f\x4a\xec\xc4\x7e\x58\xf7\x3b\x5e\x60\x18\x1d\xb5\x54\x43\xa2\x0b\x90\x8e\x22\xde\x80\xd7\x88\xcc\x95\x48\x3b\x0d\x91\x75\xcf\x65\xbb\x22\x6b\x87\x22\xeb\x2b\x16\xfb\x05\xaf\x9b\x46\xa0\x37\x99\xd3\x60\x39\x5a\xe5\xa1\x7d\xbf\xe5\xde\x63\x4d\x0d\x78\x42\xb3\xe1\x49\x14\x5d\xd0\xec\xe5\x31\xde\x23\xd5\x50\xb2\x11\x78\x34\xc9\xa8\x03\x61\x73\xf2\x42\x70\x25\xa4\x50\x1e\x54\xc7\x13\x33\x20\x08\x7a\x32\xb7\x19\xe4\x0c\x44\xf9\x21\x06\x68\x43\x3c\x98\x71\x7f\x05\xa2\xd1\xe6\x3e\xfa\x8d\x11\xf6\x10\xbf\xed\xad\xf0\x85\x6e\x40\xa9\x3d\x89\xfd\xc5\x11\xf7\xb9\x23\x73\xb9\xab\x79\x27\x8e\xd2\x02\x52\xa9\x66\x24\xc5\xa4\x6a\x3a\x52\x6d\xa7\x1b\x04\x88\xca\xd4\x73\xe0\xb3\xf0\x4e\x66\x53\xd7\xd4\x2f\xd1\x1b\x66\x47\x56\x9d\xbe\x3a\x09\x0d\xa4\x01\x84\x8f\xf5\x14\xa5\xb2\xbc\x53\xe3\x18\x91\x2d\x7f\xd3\xc2\x91\x49\xe0\x19\xfb\x54\xd9\xa9\x75\xd3\xe2\x92\x41\x67\xd1\x99\x89\x21\x28\x16\x79\x17\x76\x6c\x12\xc8\xb8\x1c\x27\xb0\xe5\x13\x97\x13\xff\xbf\x1f\xae\x54\xe0\x92\xe8\x1d\xea\xca\x4a\x14\x56\xbc\x4a\x27\x32\xf2\xf6\xae\x63\xd7\x9e\xa3\xce\xbb\xbb\x49\x0e\xbf\x49\xfe\x14\x24\xd5\x7e\xa2\xc4\xf6\xd1\x44\xb2\xdf\x5f\x72\xff\x83\xa5\xad\x61\x3d\x3c\x40\xae\x5b\x2d\x1e\x80\x5c\x1a\xb0\x45\xe9\x02\x4a\x06\xda\x17\xac\xca\x9d\x2f\x84\xec\x10\x30\x81\x55\xd8\x79\xfc\x63\x6e\x82\x0f\x65\x04\x13\x22\x69\x07\x46\xb0\xb3\xd6\x99\xed\xd5\x8d\x2b\xed\x43\x45\xea\x86\xd9\x47\x79\xa5\xe3\xb7\x4b\xec\xd0\xa0\x20\x8f\xf9\x28\x94\xce\x73\xcd\x5a\x72\xd6\x72\x9f\x5e\x78\x47\xa6\x1f\x25\x0a\x86\x40\x95\xa6\x65\x1b\x69\x86\x4f\xc8\x46\x8a\xc2\x8a\x5a\xda\xda\x32\xc4\xf8\x0a\xa9\x4d\x20\xf2\x34\x10\x87\x1a\x4a\x44\xc4\x8e\x10\xde\xc6\xa4\x7b\x39\x30\xf1\xd2\xd4\x3a\xbd\x78\xc2\xc0\x09\xa5\x92\xf5\x05\x76\x25\x1b\x5d\xe3\x71\xcd\x7e\xb4\xfb\x08\xe9\x40\x4f\x91\x5a\x04\xd7\xc9\xcd\xcb\xcb\x0b\xe0\x30\xd7\x5f\xfa\xe1\x98\x01\x19\x57\xac\xa7\xc1\x56\x4b\xf4\xe6\x42\xb1\xf9\xd8\x98\xfb\x5d\x6b\xe0\x23\x79\x02\x61\x62\x46\xef\xdb\x87\x71\xd3\x95\x27\x55\x38\x86\x77\xb2\x42\x68\x73\x51\xde\x9e\x30\x11\xda\x8e\xb7\x45\x29\x8a\xf1\x5b\x2e\x30\x30\x63\x6a\x86\x10\x31\x3c\x62\xef\x92\x31\x28\x53\x0b\x73\x89\x73\x40\x73\xe5\x09\x35\x80\x80\x0c\x25\xd9\xf0\xba\x9f\xf0\x83\xd5\x4d\x0b\x06\xc5\x18\xaa\x0f\xed\x65\xaf\x28\xb1\x31\xaf\xdb\xf0\x21\x89\xf7\x39\x25\xf7\x7f\x59\x53\xf4\x4b\x76\xbe\x18\xe5\xb0\x21\x74\x49\x79\x43\x72\x1f\x88\x2a\x57\x9d\x29\xa1\xbb\xf9\x1d\x90\xdd\x60\x1a\xc4\xa6\x40\x56\x81\x72\x6e\xf9\x69\xc2\x83\xa6\x74\x3e\xca\xeb\x3e\x8f\x35\xb7\x2a\x6d\xbc\x85\x9f\x41\x7d\x2f\x0b\x97\x27\xe5\x87\x94\x3f\xad\x36\xcb\x7a\x09\x0d\xcd\x6c\x00\x4d\xc9\x3e\x2b\x81\xe5\x3a\x3e\x62\x42\x1a\x96\xa5\x0f\x8c\xb0\x9f\xe1\x1b\x1d\xdf\xcc\xbc\x78\xe3\x88\xcc\xbc\x78\xf1\xc8\x6c\xfe\xae\xc2\xce\x50\xee\xe4\x86\x34\x66\x44\x4d\x44\x6b\x10\x7a\x7b\x24\x2d\x2c\x05\xa3\x5f\x75\xa6\x92\xac\x29\x08\xec\x89\xd0\x95\x59\x5d\xca\xba\xa2\x21\x8d\xb0\x48\x78\x8a\xa6\x34\x78\x47\x3a\x82\xa2\x54\x26\x57\x6c\xf1\xc1\x65\xad\x30\x74\xdd\x03\x89\x4f\x1a\xf7\x08\x85\x5e\x2b\x82\x66\x68\x53\xff\x91\x38\x51\xd0\x90\xf1\x14\x47\x26\xa5\x6b\x5d\x34\xd3\x97\x46\xf8\x34\x72\x02\x7f\x0d\x08\xb7\x07\xbc\x7c\xf8\x2a\xa7\x15\x75\xe3\xa4\xaa\x9b\x7a\x0e\xc1\x35\x54\xf5\x25\xbe\x7b\xea\x04\xdc\x4b\x52\xe7\xd0\xa4\xd3\xf6\x43\xc8\x95\x34\xac\xdc\x2d\x12\x3e\xb7\xbb\x4b\xba\xf0\xe9\x20\x25\x78\x80\xb9\x23\x34\x1f\x10\xa3\x08\x35\x10\x1a\x19\xe0\x06\x4f\x23\xb9\x84\xf5\xfa\x86\x69\x64\xcc\x92\xbf\x2e\xb1\x87\x16\xa0\x7a\x2f\x46\x01\x5f\xe4\x4d\xfb\xe3\x25\xf7\xb1\xf4\x77\x66\x43\x33\x0c\x82\x42\xad\x45\x8e\x13\x59\xa1\x38\x0a\x24\xdd\x98\x90\x18\x9b\xd6\x98\x0c\x3d\xda\xb4\x40\x49\xdb\xb4\x20\xcd\xdd\x58\xc5\x7f\x61\xb1\x63\xa4\xc2\x1d\x75\x2b\x52\x81\x83\x8a\xf7\x3a\x5c\x8f\xab\x92\x4c\x66\x72\x6b\x6c\xe8\xcd\x39\x46\x19\xf4\x47\xdd\x4a\x91\xf7\x7c\xa8\x32\x16\x98\xaa\xb0\x3d\xe3\x5e\xab\x62\xf1\xa8\x2c\x0c\x83\x93\xc6\xbd\xa1\x4a\x7c\xe1\x08\x9b\xa6\x4e\x16\x13\xb5\xe2\xad\xac\xc4\x7c\xc5\x4b\xa3\x38\x53\xad\xbc\x8e\x8f\x86\xb9\x58\x6d\x93\x53\x0b\x73\x24\xdc\xc9\x07\xfb\xf1\x92\x3b\x95\xbf\x98\x0d\x4b\x83\xc7\xfe\x1a\x88\xa0\x82\x3c\x64\x21\x52\x51\x48\x18\xdd\xfe\x7d\x8b\xfd\xad\x89\xb8\xf1\x35\xcb\xbd\x62\x5a\x3a\x07\x69\xc1\x65\x6e\xdd\x8e\x4f\x1f\x37\x82\xb4\x9e\xc8\xce\xb0\xe5\x42\x95\xe6\xdc\x9a\x7b\x71\x7d\x7f\x1f\xbc\x24\x1f\xc0\xb2\x65\xc6\xe9\x14\x1c\x8e\x30\xe5\xd4\x7e\xd6\x25\xee\x8f\xac\x2d\x6e\x3a\xf5\x16\xaf\xaf\x66\x87\x5f\xe9\xe1\xa0\x8e\x04\x18\x22\xb1\x8b\xca\x70\x54\x2f\xa4\x90\xcc\xaa\xe3\xcc\x47\xe0\x26\x08\x08\x14\x0b\x43\x28\xaa\xd9\xf9\x12\x03\xe3\x5c\x1f\xf8\xd2\x34\xe2\x0a\xb7\xea\x38\xa2\x3a\x74\xd2\x11\x5b\x90\x17\x40\x4a\x79\x59\x1d\x0f\xc1\x38\x23\x37\x1a\x2f\x58\xf7\x7a\x09\x08\xa0\x1a\x0a\x08\xa8\xb5\xce\x7b\xd3\x2b\xae\xe5\xa6\x35\x2a\xca\x37\xa6\xce\x3f\xee\xa6\x4c\xed\xc2\x9b\x5f\xb4\x53\xea\x13\xb4\x43\xea\x63\xcf\xf3\x8c\xca\xee\xb5\x18\xcc\x5f\xfb\xf5\x16\x9b\x1d\x14\x8b\x38\x94\x20\x58\xea\xf0\xba\xfb\x44\xf1\x5f\x82\xb4\xea\x17\xb8\x9a\x12\x45\x1b\x83\x4c\x3f\x6f\x54\x1d\x94\x06\x62\x4a\x52\xbc\xb6\x54\x0b\xc0\xb3\xc5\xee\xb1\x44\x27\x80\xbc\x7f\xcd\x36\xa1\x93\xb9\xea\x16\x54\x15\xf3\x85\x4e\xd3\x56\x01\xce\xb5\x20\x40\x35\x55\xa6\x92\x12\xdc\xba\x98\x8b\x7d\x36\x3c\xbd\x1d\x5a\x5c\x3d\x1c\xaf\xd2\xb3\xd6\x1d\xdb\x9f\x1f\xe7\xed\x13\x59\xba\xc0\x20\x3e\x89\x2d\x3a\x3b\x7f\xb4\xfc\x87\x71\x76\xc3\x79\xed\x2d\xf6\x87\xc7\xdd\xa7\x64\x3f\xcd\x03\x12\x75\x06\x82\x6b\x6b\xa9\xcd\xa0\x00\x90\x58\x43\x7a\x20\x35\x68\x2e\x55\xaf\x0a\x8d\x74\xcd\x98\xa7\x6f\xed\xca\xc8\x5d\x19\xf9\xcf\x43\x46\xbe\x41\xca\xc8\xdf\xb2\xd8\xa9\x0b\xa8\xcb\x81\xb4\x3c\x0e\xd2\xb2\xf0\x00\x21\xd6\x1a\x46\xe5\x80\xdd\x5c\x4c\x60\xe8\x1c\xba\x82\x87\x6d\x5a\x98\xec\x55\x99\x6c\x7c\x91\xc5\x6e\xb9\x90\xd5\x44\x49\x79\xed\x39\x2a\xd5\x67\xad\xe6\xf6\xb2\x70\xda\x9e\xd2\x52\xa7\xcc\xca\xe4\xa4\x61\x56\xb1\xbc\x00\xfc\xf6\x18\x7b\xc4\x96\x94\xc4\x00\xa5\x6a\x7f\x6a\xcc\x7d\x9c\xf6\xdb\x00\xc3\x82\xd3\x22\x44\x33\x37\x1d\x4f\x32\xd5\xa9\xf0\x5c\x65\xc4\xaf\xd2\x19\x6d\xd3\x1a\x87\x37\x16\xf2\x56\x97\xbf\xde\xc7\xee\x60\xd9\x3d\xbb\xe1\xde\x0a\x27\x55\x05\x5f\xc5\xb3\xc2\xc4\x79\x37\xc3\x13\xa3\xf3\x7e\x16\x1e\xad\x9c\x3b\xc8\x7f\x26\x16\x96\x4c\xbb\xda\x7f\x74\xbf\x71\x5a\xfd\x4f\x16\x7b\x08\x7e\x33\x8e\x3a\xde\x0a\xc2\xb1\x40\x14\x50\xfe\x6a\x16\x8e\x83\x51\xe5\x70\x9f\x42\x3a\xe8\x29\x22\x56\x86\x4a\x21\xf9\x77\xa4\xd7\x99\xc0\xe8\xc1\x5c\x03\x14\x26\x5e\x1c\x75\xc3\x06\x61\x9f\x28\x28\x88\x93\xb9\x0f\xcf\x47\x21\x97\xa1\xd1\xf9\x80\x96\x1a\x4f\x3d\xb1\xf5\x1e\xaa\x1e\x9a\x34\xda\x75\x94\x8e\xad\x87\xdd\x5f\x84\x37\x60\x73\x41\x74\x11\x51\x07\x49\x95\x29\x07\xcc\x78\x37\xd5\x22\x53\x5a\xee\x93\x4f\x4a\x18\x60\x15\x95\xe2\x37\x9d\x34\x16\x12\x1e\x2e\x41\xb4\x89\x66\x84\x3a\x80\xa1\x28\x51\xac\x93\xbf\x1d\x2c\x88\x56\x31\x1d\x6b\x77\x5b\x6c\x5f\xd2\xad\xc1\xd8\x6f\xb8\xab\xf9\xb1\xa7\x41\x86\xfe\xcd\x86\x5e\xf5\xee\xfe\x64\xc0\x34\xd0\xbf\xec\xba\xce\x01\x7c\x72\x7f\x02\xc8\xc6\x07\x8d\xb6\xff\x65\x89\x5d\x42\xb5\x98\xdd\xe8\xc4\xf6\xe7\x4b\xee\x47\x4a\xb3\x1b\x1d\x0f\x6c\x7d\x9d\x0b\x58\xa9\x63\xbc\xe5\xad\xf1\xc4\x49\xfc\xb6\x1f\x78\x71\xd0\x13\xb5\x5b\xc2\x4f\x83\x87\xad\x88\x00\x55\x77\x23\x5e\x71\xe0\xcc\xd4\xe2\x6d\xf3\x53\x27\x67\x0f\x22\xb6\x97\xac\x65\x06\xf1\xa3\xd7\x44\x2b\x6e\xdb\x1e\x91\xf5\x10\x5d\x00\xf3\x56\xd6\x4b\x7c\xa7\xdd\x17\x05\x9e\x9f\x95\x5e\xd0\x69\xc9\x69\x79\x95\xd1\xbd\x67\x1f\xc1\x7e\xa1\x98\x26\x81\x0c\x12\x7f\xfe\x08\xf7\x7e\x4b\xfd\xd4\x75\xa9\x62\x9d\x38\xcb\x4a\xf7\x90\xb1\x9d\x5e\x14\x1b\x72\x1a\x7b\x3e\x66\xac\x78\x75\x51\x65\x3d\x98\x1c\x0d\xc7\x65\x87\xd3\x29\x97\x66\x75\x8b\x23\x61\x39\x86\x20\x46\x12\xa0\x9b\x40\x6b\x94\x20\x21\x0b\x98\x64\xc4\xef\x04\x5e\x98\x63\x53\x7d\xf9\xc3\xd9\x9a\x02\xc5\x0a\xdc\xdb\xa6\x9c\x5a\xec\xf3\x66\xb6\xa3\x53\xc2\x88\xca\x55\x11\x43\xd6\xe0\xa9\xe7\x07\x09\x35\x6f\xbd\xd5\x53\x1f\xf7\xc9\x55\xec\x27\x32\xbe\x9a\x57\x57\xaa\xce\xfe\xd9\x35\xbf\x9e\xf2\xc6\x7e\xbd\x8f\x57\xd8\x5e\x51\xf3\xb9\x05\xfb\xa9\xee\xc2\xdc\x82\xe2\x3d\x22\x53\x9e\x14\x4c\xd9\x7c\xa5\x0f\x78\x49\xe2\xaf\x84\x62\x6a\xce\x66\x01\x71\xa9\xd3\xe3\x29\xe8\x7b\x8d\x6e\x90\xc3\xb5\xfa\xc3\x51\xf6\x33\x61\xd4\xf6\x43\x21\xf9\xe6\xa3\x06\xd2\x9d\xbe\x6f\xd4\x7d\xdb\x68\xdf\x65\x64\x83\x4a\xd1\x43\x4c\x01\xc8\x3e\xa0\x1c\x3a\x9d\x98\x8b\x73\x4a\x42\x82\x11\x6c\xfc\x84\x80\x26\xc6\x02\xdd\xcd\x7e\xaa\xe7\xab\xc9\xea\x38\x31\x12\x5e\x80\x30\x4d\x64\x49\x62\x86\x88\x7e\xf1\xdb\x62\x02\xd5\x39\x98\x36\x5b\xdc\x8f\x9d\x95\xd8\xab\xf3\x66\x37\x70\x50\x92\xe3\x64\x42\x34\x20\x33\x56\xb0\x11\xf1\x5c\xb0\x73\x96\x23\x2a\xea\x2c\x93\x99\xb2\x9a\x44\xd4\x22\x51\xe5\xaa\x23\x61\xa9\x62\x98\x88\x0d\x5e\xf7\x91\x91\xa4\x13\x78\x84\x5e\x2e\x4a\xe1\x41\xc2\xd7\x11\xdb\xac\x49\xad\x47\xea\xfe\x1a\xaf\x47\x6d\x8d\x70\xc8\x49\xa2\x48\xec\xa1\xb9\x72\xbd\x20\x89\xb4\xc2\x57\xa8\xa1\x5a\xce\xa6\x5e\x2b\x84\x6f\x6b\xf9\x2b\xd0\xcb\xb1\x1f\xc5\x7e\xda\x23\xc4\x31\x04\xaa\xac\x4b\xb0\xa0\x66\x0a\x8f\xc8\xde\x04\x13\x3c\xc0\x32\x00\x74\x51\xda\x07\x14\xd7\xf0\x9b\x48\xb7\x8c\x56\x6b\xb1\x7e\xc1\xe2\x24\x07\x5f\x45\x9c\xd3\x54\x2b\x9e\x4f\x9f\x1a\x67\x7b\x20\x54\x5b\x9c\xa8\xde\x35\x0e\x78\x68\x2d\x22\xe2\xf2\x44\xa1\xa4\xb7\xfb\xed\x4e\xc0\xcb\xd0\x92\x0a\x44\x68\x38\x49\xb7\xdd\xf6\x62\xf0\x23\x60\x7f\xa6\x48\x3a\x4b\xeb\x46\x68\xdb\x81\xdf\xe4\xf5\x5e\x3d\xe0\x68\xde\xd7\x50\x7f\xc0\xe4\x58\xa6\x8e\x13\xeb\x15\x0f\x2e\xb4\x3c\x11\x18\xb0\xac\x76\x6f\xb1\x5c\xd7\xfc\x86\x10\x27\xd9\xd6\x4e\x52\xc8\x43\x70\x42\xa9\x6b\x40\x64\x28\xae\x69\x4d\x62\x75\x80\x0b\x17\xdf\x80\xba\xc4\x1c\xc4\x6a\x53\x8c\x9e\x24\x35\xa3\x86\xe3\x29\xe9\x28\x63\x0b\x1c\xf8\x5a\x8e\x3a\x12\x24\xae\xe5\x25\x18\x7b\xe9\xd5\xeb\xbc\xa3\xd1\xb8\x6a\x4e\x2f\x29\xe3\xc4\xfa\x81\xac\x6c\x82\x44\x94\x00\x7c\xaa\xfa\x14\x58\x22\xca\xc4\x15\xc6\x43\xc5\x3b\x4b\x7c\x6d\xca\x5f\xea\xb7\xb9\x43\x11\xfe\x68\x87\xc8\x96\x80\x97\x38\xeb\x3c\x08\x20\x34\x07\x52\xb5\x3a\x62\x46\x34\xa2\xf5\x30\x88\x3c\x40\xa7\xa4\x0f\x29\xfa\x44\xc2\x5c\x95\xf0\x57\x75\xd8\x24\x53\x6f\x95\x3b\x9e\xb8\x24\x06\x6b\x11\xdd\xe9\x05\x2d\xaf\x09\xe5\x09\x27\x35\xca\x09\x89\x95\x96\x6f\x5f\xa2\x85\xaa\xaa\x66\x4d\x49\x8f\x89\xe8\x19\xad\x2b\xc4\xd0\x00\x9d\x1a\x7e\x17\xb2\xf8\x7c\x15\xa8\xd3\x89\xa3\x3a\xc9\x52\xf0\x09\x81\xde\x1b\x8b\x95\x41\xbf\xaa\x59\x9a\xc1\x51\x67\x2a\x08\xf4\x5a\x64\x21\x34\x58\x21\x29\x84\xd0\x7a\x02\x99\x0d\x09\xcd\x34\x90\x2f\x24\xed\xa8\x70\x51\x69\xcc\x14\xd9\x41\xc1\xd4\x29\xc5\x6d\x15\x3d\x69\xd6\x81\x00\x45\xd5\x12\xa1\x07\xb9\x0f\xb2\x89\x6f\xf8\x2a\x55\x32\x8c\xc2\xca\x9d\x3c\x8e\xd4\x06\x1c\x43\x26\x89\x56\x9c\x09\x2c\xe6\x9c\x0e\x57\xc3\x68\x3d\x3c\x0a\x24\x76\x49\xd4\x56\x8b\x4d\xee\xe2\x6a\x5e\xc2\x66\xab\xa3\xbe\x22\x5b\x37\xc4\xd4\xf7\x3a\x14\xbf\x45\xb0\x9d\x5e\x88\xd0\x91\x90\x87\xd9\x7f\xcc\x53\xfb\x5d\x56\x74\x95\xb1\x73\x4e\x4d\x12\x5b\x93\xf8\x4f\x45\x09\x93\xcb\xc5\x2f\x58\xab\xba\x20\xdb\x60\x7b\x3a\x51\x63\x6e\xc1\x8e\xdc\x9a\xb6\x01\x7b\x01\x1c\x4b\x0d\x24\xe0\xaa\xb3\x18\x75\x53\x90\xf1\x6a\x94\xf4\x13\x0f\xa5\x2b\xf4\x6f\xc9\xaa\x30\x43\x84\xde\x5d\x62\x63\x77\x44\xc9\x74\xe0\x25\x89\xfd\x23\xcb\xfd\x1b\xc8\xe3\xba\xa5\xeb\x05\xe4\x66\x95\x46\xaa\x03\xb7\x9c\x5a\x3a\xe8\xd4\xc5\x73\x59\xfe\xba\xd4\x00\xb4\xfa\x39\x35\x2f\xc1\xdd\xcd\x08\x7d\xf0\x63\x20\x1d\x49\x9c\x25\x0e\x82\xf6\x96\x53\x4b\xf0\x4d\xf4\xad\x81\xb5\x4b\xed\x5d\xb7\x9c\x5a\xc2\x0f\xf1\x42\xe2\x81\x61\xac\x18\xa2\x5a\x15\x71\xca\x8a\x12\x2f\x48\x26\xc4\x72\x9f\x90\xf5\xa9\xdc\x11\x25\xd5\xb6\xe1\x1d\xfb\x77\x66\x3e\xdb\x8b\x4a\xee\xc6\x96\x0e\x28\x18\x83\x0b\x3d\x23\xb2\x8f\xeb\x4e\xad\x43\x6c\x82\x55\x86\xa1\x0c\xbb\xb8\xde\xaa\x77\x94\xd8\xcf\xa8\xb5\x8d\xea\x32\x4f\xec\xdf\x2c\xb9\x5f\xb2\x14\x8a\x89\x10\x0d\x42\x58\x20\xec\x6c\x27\xc3\x84\x82\xf8\x16\xf4\x12\x7b\xa1\xdf\xe4\x49\x5a\x75\x66\xbd\x7a\x4b\x02\xd4\xaa\x3c\xc0\x00\x97\x7f\xd4\x4d\x3b\x5d\x58\x7f\xb7\x37\xa2\xfa\x2a\xbc\x2e\x54\xee\xf4\xf6\x0b\xdf\xeb\x5e\x08\x3d\x8f\xd5\xac\xa0\x60\x3a\x17\x9c\x38\xa3\x6b\xd8\xdf\x97\xd8\xcf\x89\xe7\xa7\xfb\xba\xec\xaf\x4b\xee\xeb\x4a\x03\xba\x4c\xbc\x35\xa8\xdf\x96\x25\x33\x9d\x50\x52\xc1\x30\x08\x3b\x80\xd0\x4f\x73\xaf\xc2\x76\x00\xa2\x5d\x9c\xb8\x7b\xce\x0d\x74\xfe\x4e\xcd\x12\x82\x9e\x43\x5b\x45\xe1\xbb\x2a\x9f\x10\xf2\xc7\xff\x99\x74\xff\x6a\x06\x6e\x7c\xbb\xbb\x44\xe0\xc6\x8e\x02\x16\x3e\xd7\x53\x94\x5a\xa1\x86\xf8\xfc\xaa\xa5\x67\x5d\xfe\xe1\x79\x24\x01\xbf\xdc\x5a\x3c\x3e\xed\x40\x26\x63\x03\x50\x4e\x85\xaa\x22\xba\xde\xb0\x5c\x91\x45\x79\xab\x1c\xcc\x27\xc8\xc8\x59\xc9\x99\x4b\x8a\x97\x76\x0f\x02\x84\x09\x7c\x21\xa7\xd0\x1d\x48\x0e\xea\x2c\x8d\x55\xf6\xa7\xa3\x6c\x7f\x01\x0c\x97\xe8\x68\x71\x28\x5a\xe2\x19\x71\x85\xfd\xd6\x51\xf7\x64\xd1\x0d\xcd\xf4\x67\x6c\xdc\x1e\xfe\xd9\xec\x06\xe2\x94\x07\x48\xaf\x75\x1e\x83\x1a\x0c\x06\xf0\xea\xa6\x35\x2a\x04\xd5\xa6\xb5\x57\xce\x0c\x9d\x89\x7f\x84\xbd\xdc\x62\x76\xe0\x25\xe9\x72\xec\x41\x9a\x18\x25\x62\x3f\xfd\xdc\x87\xe0\x71\x27\xc4\x66\xaa\x10\x5e\xd5\x88\x3b\xa9\xfa\x84\x34\xd8\x41\xe6\x16\x2a\x32\xa0\x54\xc0\x59\xac\xca\x9e\x94\xcd\xbd\x79\x77\x6a\xe7\x73\x0f\x82\x4d\xd4\xc7\x8c\x99\x76\x5c\x19\x07\xae\x77\x27\x96\xb3\xa3\x47\x96\xc9\x48\xb5\xdd\x9f\x00\x51\xd8\x56\xe5\x9c\x50\xe6\xeb\x63\xee\xd5\x4b\x06\x44\x9f\x2a\xa2\x2c\x31\x99\x96\x41\x68\x1c\xf7\x82\x84\x97\xa5\x42\x56\xcd\x05\x1a\x8a\x41\xb2\x1f\xed\x3e\x62\x99\x82\x64\xf4\x61\x2d\x5e\x34\x67\xf7\x19\x08\xac\x34\xad\x10\xb7\x63\x86\x77\x82\xa8\x27\x54\x05\x48\x32\xfb\xa3\x7d\xee\x01\xf3\x92\x19\x24\x9f\xdd\xdb\x02\xcb\xef\x5d\x7b\x77\xdd\x39\xc3\xbb\x73\x6a\x9a\x3b\xe7\xcc\xf9\xe5\x2e\xfd\xab\x2d\x72\x97\x76\xbd\x91\x3b\xf4\x46\xb6\x65\x32\x5f\xc3\x7d\x64\x21\xb4\xa2\xbe\x06\x86\xdf\x3e\xb7\x58\x75\x67\xad\xa7\x6e\xef\x45\x3a\x6a\x1f\x29\x06\xe0\x33\x97\xaa\xe9\x37\x82\x2f\x31\xf6\x8f\x8c\x39\x05\xbb\xb8\x0c\xb9\xbe\xa5\x1b\xa5\x9e\xfd\x17\xcc\x3d\x6e\x5c\x11\x0a\x48\xe2\x48\x97\x1a\x77\xee\x80\x8b\xe2\xa0\x1b\xfb\x04\xc0\xc7\x43\x60\xfa\x83\x14\xb0\x2d\xf8\x6d\xde\x3e\xce\xee\x93\x3e\xc6\xb7\x5a\xec\xf0\xb6\xba\x85\x51\x07\x70\x23\x02\x92\x97\x31\x49\x25\x3a\x13\x54\xa9\x7a\x21\xa6\x81\xa8\x1f\x28\x47\x28\xa8\xd9\x97\x33\x97\xe3\xe7\x2c\x76\xd5\x0e\x6b\x8d\x5e\xc5\x57\x58\x0a\x3a\x36\xab\x3a\x59\xb9\x55\xcf\x61\xaf\x42\x1c\x46\x9a\x68\x91\x63\xde\x0a\xbf\x28\x0d\xdb\x15\x05\xbb\x81\x09\xbb\x29\x46\x5b\x42\xa1\x9e\xde\x5e\x12\x1f\xb6\x27\x2b\x5b\x02\x4d\x4b\xa9\x6c\xc8\x03\xc6\xbe\x69\xd2\xad\x67\x34\x56\x90\x17\xa3\x33\x4b\x2d\x44\x71\x6a\xbf\x6f\xc4\xbd\xa6\xef\xaa\xc9\x6e\x25\x2e\x08\x35\x38\x08\xa2\x75\xa1\x77\x36\x9b\x7e\xdd\x89\x42\x43\xf6\x7e\xaf\xc4\xbe\x6d\xb1\x51\xf1\xac\xfd\x57\x43\x8f\x47\x37\xf5\x83\xaa\x1f\xa6\x49\x1a\x57\xe7\xc2\xf4\x54\xbc\x04\xc3\xeb\xbe\x8e\xc8\x4f\xe2\x54\x7a\x7e\x10\xd6\xab\x13\x47\x69\x54\x8f\x02\x3a\x01\xd5\xbd\x50\xda\x22\x6b\xdc\xf1\x1c\x80\x17\xf5\xeb\x5e\x00\xf1\x63\x40\x3b\x24\xcb\x20\x6f\xa0\x24\x94\x51\xae\xc9\x3c\x46\x87\x9f\x28\xbe\x02\x2f\x08\xf0\x75\xc4\x04\x05\x56\x05\x40\x95\x49\xaa\xec\x2e\x8b\x8d\xc9\xca\xd8\x5d\xb7\xb5\x8c\xb6\x60\xf8\xed\x1c\x58\x9e\x5e\x28\x3b\xa7\x67\x16\xc0\x58\xbc\x34\xbd\xbc\x70\x50\x9e\xf1\xa8\xf3\x32\xef\xbb\x02\x0a\xd1\xe0\x54\xb5\x1a\xea\xa9\x19\xcb\xd3\x0b\x86\x9e\xfd\x96\x07\xb1\xcb\xfb\x03\xeb\x71\xc7\x5f\x8c\x02\x7e\xcc\x07\x1f\x81\xfd\x0f\x97\xb8\xef\x2b\x69\x17\x0c\x00\x0a\x88\xa5\x47\x97\x80\xf2\x71\x49\x7f\x85\x9f\x56\x1d\x67\x0e\x53\xa6\x75\x22\x38\x51\xd6\x16\x99\xaa\x10\xd6\x36\x8d\x46\x4a\xfd\x31\x42\x3f\x53\x0f\x02\xd8\x8f\xd7\x00\x64\x1e\x93\xc3\x67\xcd\xf7\x1c\x8a\xd2\xa3\x3e\x57\x85\xeb\x8f\xd5\x7a\xd4\xa5\xda\xed\xd4\xe1\x44\x41\x12\x56\x1d\x47\x6b\x31\x82\xcc\xd2\x1c\xd2\x2a\x0b\x4c\xc2\xde\x1a\x97\x84\x1e\x3e\x65\x1b\x64\xd5\xdc\xb4\xf6\xc5\x98\x9c\x60\xcc\xf6\x0f\x8c\xed\x0a\xeb\xe1\x85\x75\x4b\x93\xd5\xbf\x7c\xbe\xa2\xfa\x61\x03\x44\x35\xfb\x86\xc5\xe4\x78\xd9\x7f\x6e\x0d\x30\xae\xf6\x2d\x96\x45\xde\x74\xef\xb1\x54\x22\xca\x80\x19\x2f\xf5\xa6\x73\x9a\xf4\x78\x12\xd7\x3e\x93\xf9\x74\xa2\x60\x4d\xc2\x04\x69\xc9\x83\x20\x29\x62\x9e\x76\xe3\x50\x39\x37\xaa\xec\xf9\x16\x1b\x23\x34\xea\xc4\x7e\x86\x7b\x83\x5a\x30\x18\x2e\x6c\xe6\x96\x67\x86\xa5\x24\xcb\x9e\xd1\xf0\x82\x87\x37\x49\x1b\xbd\x46\xdf\xdc\xd5\xf2\x76\xa6\xe5\x9d\xb5\xa2\xed\xf7\xfd\x13\xf6\xe3\xd5\x09\x0c\x3a\x7d\x60\x60\xb3\x26\xe9\x0a\xcf\x64\x7f\x7a\x99\x41\x9c\xb9\x35\xdc\xbe\x7d\xef\x65\xee\x7d\x7b\x0a\xf8\x14\xc0\xc3\x8e\x0e\x1e\x4f\xfc\x6a\x93\x8b\x2a\x09\xbd\x4e\xd2\x8a\x52\x65\x18\x72\x50\x65\x9a\x06\x99\x84\xc1\x70\x31\x4f\x3a\x51\x88\x5e\x6c\xc0\x0b\x23\xf2\x3f\x19\x8d\xd9\xe0\xfa\x15\x73\xb2\x66\xd0\xe4\x14\xb0\xa1\xc6\x94\xa2\x5e\x4e\xe1\xfa\x2c\xa8\xb2\x72\x0b\x67\x56\xf4\xa0\x27\xdd\xbd\x65\x8a\x1f\x71\xf2\xd2\x71\x19\xa1\xd1\x65\x6e\x28\x32\xcc\x7b\x7e\xa0\x13\x49\x13\xf4\x51\x26\x68\x01\x4b\x2d\x4d\x79\xbb\x83\x2c\x67\x5d\x95\x0c\x38\xe3\xa5\x1e\xee\xe4\xd5\x22\x8a\x04\x31\x1d\xcb\x4e\x2b\x5a\xe7\x6b\x3c\x2e\x43\xe0\x04\x27\x18\xc8\xf9\x28\xc5\x10\x93\xb2\x74\x6d\x0a\xe1\xde\x4d\xb8\xd8\xf9\x6a\x11\xf9\x32\x67\x3c\xde\x8e\xc2\x25\x8e\x9c\x89\x9a\x7d\x56\x83\xea\x43\x1a\x23\x6c\x21\x3c\x26\x2e\xd7\xbc\xfa\x6a\xd9\xd8\x7f\x28\x78\xb0\xea\xdc\x2c\xab\xe3\xa7\x32\x9c\x43\x02\xdf\xa7\x11\x21\xa9\x89\x52\xcc\x25\x5b\x6f\x79\x21\x81\x51\x34\xbb\x69\x17\xc6\x1d\x09\xc4\x71\xe1\xd5\x69\x46\x68\xfc\x9d\x0d\xde\xe1\x21\xb8\x12\x45\xd3\x92\xd4\xab\xf9\x81\x9f\xf6\x24\x0e\x60\x27\xf6\xdb\x5e\xec\x07\x3d\xa8\xbf\x1a\x78\xea\x02\xad\x7d\xd5\x4d\x6b\x2c\xa6\x2e\x35\x76\xe9\xff\xf3\x53\xc1\xef\x5d\x63\xaa\x75\xf6\x19\x99\x5a\x3b\x95\x2d\x4d\x83\x71\x2f\x56\x0c\x28\x4d\xcd\x1e\xaf\x43\x2a\xd6\x7a\x30\x2b\xcd\x6c\xd0\x5d\x19\xbe\xb3\x93\x7a\x8f\x8d\xc2\x8c\xba\x83\x1d\x1d\x6e\x42\x51\x8e\x7a\x75\xd1\x5b\x9f\x95\x7c\x40\xee\x95\x20\x1e\x64\xf2\x3e\x09\x41\xde\xb7\xb4\xf4\xa1\xac\xee\xea\x9d\x3b\x60\xfb\xfe\xe5\xed\x77\xda\xeb\xec\x6b\x87\x25\x1b\xc9\xc7\xc9\xbf\xe1\xb2\x22\x8e\x23\x52\x8e\x32\x51\x4c\x81\xac\xff\xf3\x52\xf7\x71\x7d\x57\x87\x40\x39\xd6\xde\x41\x41\x57\x40\x0e\xf0\xea\x4b\x59\x93\xa9\x5b\xf6\x93\x25\x12\xea\xac\xbc\xa4\xb2\x94\x15\x2a\xea\x42\xd4\xc8\xe2\xfb\xc8\xbd\x58\xbc\x7f\x98\x92\xe2\x3e\x8b\x5d\x86\x63\xaa\x94\x86\xd7\x59\xee\xcb\x2c\xf3\x5a\x59\x46\xa6\x10\x81\x9f\x29\xa4\x34\xf6\xed\xfc\x67\x25\x00\xc4\x0a\x0f\x91\xf2\x10\xea\x29\xcf\x9a\x62\x8a\x89\x0d\xff\x29\xb2\x5d\x15\x9a\x5e\x92\x84\xa0\x2c\x6f\x1c\xd4\x57\x2b\xe2\x39\x07\x01\x54\x6d\x1a\x12\x18\xbe\xa3\x90\xf1\xff\x93\x65\xde\x92\x5d\x85\x00\x00\x51\x53\x28\x12\x2d\x47\x3d\x93\x91\x02\xea\x03\x03\x7a\x43\x71\xf7\x39\xc0\x2a\xac\x1d\xe9\x01\x44\x5b\x95\xe7\x78\x6b\x91\xdf\xf0\x42\xc8\xc2\x15\x9b\xa8\x9f\xb4\x31\x3c\xd2\x4f\x9d\x90\x73\x00\x48\xa3\x81\xca\x12\xcd\x15\xab\x02\x5f\x17\x52\xb2\x7f\xae\x9a\x83\xf6\xdb\x16\x7b\x30\x4d\x2d\x45\xd7\xf0\x1a\xd5\x03\xbf\x6e\xe5\xee\x9d\xcf\x6c\xc9\x84\x85\x7e\x5f\x8e\xb8\x9c\x07\x50\x88\xfa\x6a\x51\x95\xff\xd2\x62\x36\xa2\x4b\xf3\xc6\x4d\x38\x19\xc4\x5c\xfb\xa4\x25\x77\xc0\x77\x5b\xfd\xb7\x65\xc5\xf5\x20\x8a\x95\xec\xae\x7c\x81\xba\xcf\x4f\xcc\x31\x9c\x4b\x11\x2f\x56\xa8\xab\x0d\xb5\x11\x69\x8f\xec\x4f\xb4\xd2\x64\x8c\xa2\x9f\x48\x19\x27\x34\x19\xd0\xfd\xc8\x3e\x91\x1a\xba\xa4\xd9\xbc\x17\x01\x51\x8d\xd7\xe8\xa9\xf1\x78\xba\x1c\x8e\xa6\x71\xfd\xbc\xc6\x82\x80\x73\xd7\xe0\x08\x0b\x81\x22\xd3\x9a\xc7\x56\xab\xce\xbb\x2d\xf6\xe0\xdc\x52\xb2\xff\x9d\x9a\x20\xcf\xb1\x72\xf7\x1e\xa0\x09\x62\xca\x94\x3e\x8c\x76\x3d\xa4\xeb\xef\x2c\x77\x7e\xd1\x94\xa5\xdb\x83\x95\xeb\xbe\xec\x3e\xc0\x72\xfd\x54\x7c\x23\xbb\x7e\xeb\x8d\x7e\x4b\xc1\x7f\x71\xa3\xb6\xde\xa4\xaf\x69\x92\xc4\x2f\xb3\xdc\x67\x59\xb9\x8b\x17\x5b\x14\x4f\x96\x73\xd2\xc3\xcc\x9f\x79\xe6\x28\xdb\x92\x8d\x05\xb8\x3c\x0e\x57\x45\xb9\xc4\xd6\x81\x5b\xe5\xe7\x47\xdc\x4d\x2b\x7f\x35\x57\x71\x39\x58\x8a\xa7\x40\x11\x79\x90\xe9\x1a\x52\xa2\xbd\x7a\x0b\x03\x7d\x4c\xd3\x0d\xb2\x7f\x10\xd3\x81\x4e\xe7\x51\xc6\xb0\x0a\x22\xfd\xaa\x50\x74\x2f\x6f\x54\x3a\x3c\xae\x24\x00\x61\x73\xb0\xba\x69\xed\xc5\x4f\x6d\x5a\xfb\xa8\x44\x63\x37\x7e\x71\x89\x3d\xdb\x62\xf2\x96\xdd\x63\x37\x0e\x47\x4e\x43\xdd\x81\x8d\x06\xd6\x04\x99\x32\x28\xeb\x5d\xc8\xc3\x88\x3d\x20\x77\x04\x9d\xfe\x82\xdd\x6d\x31\xaa\xaa\xdd\xdb\xfa\xe8\x33\xa0\x16\x73\x0a\x09\xc8\x3d\x22\x39\x41\xe4\x25\x83\x2e\x82\x6e\xd6\x7a\xd9\x01\x31\x21\x16\x0f\xf6\x1d\xab\x30\x9f\x70\x56\x68\x70\x04\xa6\xfe\x19\xcb\xd5\x7f\x6f\x9d\xc7\xe9\x85\x0e\x17\xcf\x99\xc9\x35\xcf\xb7\xd8\x71\x36\xae\x58\x7a\xed\xeb\xdc\xb2\xe2\xec\xcc\x27\x63\xc1\xeb\x42\x80\xc9\x79\x6d\x06\xcc\x3e\x96\x8d\xb6\xa2\x24\x05\x72\xf7\xa8\x21\x71\x5d\xc2\xe1\x0b\x78\xe5\x28\xbb\x62\x2b\x4c\x41\x03\x40\xfe\xbb\x23\xee\x09\xb8\xaa\x2b\x81\x0d\x3f\xe6\xf5\x34\xe8\x55\x14\xc3\x7b\x92\x46\x40\xd8\x43\x51\xd6\x0d\xee\x78\x4d\x18\xc5\x9e\x73\xe0\x18\x4f\x3d\xa7\xc9\x3d\x71\xde\x3e\x58\x84\x5c\xf5\xbc\x11\xf6\xcc\x92\x02\x33\xff\xa1\xe5\x7e\x6b\x00\x98\xf9\x5c\xaa\xac\x82\x7a\x56\x0e\x77\x24\x40\x90\xe7\xd4\x82\xa8\xbe\xea\x34\x38\xe0\xb3\x60\x32\x25\x38\x5e\x9a\xb9\x42\x33\x4c\x78\xda\x0b\x30\xe8\x1a\xb1\xfe\xc3\x15\x15\x04\x3e\x00\x3f\x7d\x59\x83\x38\x57\x80\xe9\x69\x04\xb0\x9d\x15\x9c\x5b\xf4\x61\xfc\xae\xdf\xd4\xd3\x0b\x8d\x21\x79\x96\x45\x60\x47\x77\xba\x6d\x51\x6c\xb3\x1b\x04\x98\xba\x27\x99\xcf\x31\x29\x4f\x4b\x32\xaa\x4a\xbf\x47\x8d\x4b\x0f\x93\x47\x83\x13\xc5\x3d\x27\x8a\x8d\xae\x70\x0e\x34\xfc\x64\xb5\x8c\xf9\xfc\xa8\x1c\x54\xab\x55\x53\x10\xde\x3b\x5e\x38\x2f\x0c\xe7\x1d\xc4\x44\xdd\x35\xee\x5e\xd9\x77\xd5\x0c\x8b\x32\x63\x27\x20\x7c\xa4\x38\x3c\xea\xcf\xf7\xfd\x73\x47\x2c\xde\x35\x4d\xec\xd0\x34\xf1\x21\x4b\x06\x14\xdd\x67\xb9\x1d\x15\x51\xb4\xd5\xe4\x91\x4c\xb9\x3b\x8d\xfe\x45\x12\x2f\x2d\xe8\x5e\x94\x96\xec\x80\x89\xa5\x70\x01\xec\x5a\x37\x76\x60\xdd\x78\xd2\xf6\xd6\x8d\x6b\xec\xab\x8a\xb0\x35\xfb\xc4\x4b\xde\xb4\xf1\x3a\x93\xbe\x79\x6b\x0a\x6b\x20\x51\xfd\xde\x3e\xf7\xbb\x96\x76\x21\x6f\xd5\x88\xbb\x01\x17\xdd\xde\xe9\xc8\x01\x13\xc2\x37\x41\x94\xef\x8c\xd0\x8b\x37\x54\x2e\x2a\x9a\x32\x03\x3c\x08\x78\xf5\x55\x1e\x2a\x40\xc9\x44\x74\x76\x3d\x6a\xa3\x23\x9b\x46\x05\xf3\xe5\xe2\x24\xcd\x50\x70\x08\x62\x05\x4a\x6c\x23\x47\x64\x2a\x36\xb4\x38\xea\x6a\x19\x37\xb2\xf0\x3c\xf3\x1b\x06\xe6\xa7\x75\xe0\xf3\xd4\x9a\x86\x64\x56\x86\x8c\xfd\x1f\x7b\xd8\x1b\xf7\x90\xd6\xb0\xb9\xc7\x7d\xd1\x9e\x9b\xa3\x8c\x31\x01\xbd\x0e\x77\x74\xbd\x00\x1b\xd8\x88\xda\x9e\x1f\x2a\xb4\x38\x4f\x66\xbc\x41\x3d\xcb\x8e\x27\x03\xb8\x60\xe3\x84\x88\xf1\xeb\x8e\x5c\xa3\xbc\x01\x42\xcd\x0b\x82\x68\x1d\x23\x8b\xd7\x7c\x3a\xcb\xa8\x19\xec\x8a\x52\x5c\xd8\x86\xa4\x46\x7f\x7a\x71\x4e\x2f\x95\x14\xe1\xc5\xe3\xd3\x47\x9d\x43\x55\x67\x6e\x01\xfb\x0e\xc8\xef\x24\x65\xe9\xb4\x4a\xd8\xf0\xc2\xbe\xb6\xc3\xa6\x88\xb0\xce\x9d\x0e\xe6\xa8\xa7\x2d\xce\xc6\x1d\x67\x6e\x41\x96\x0e\x31\x74\x32\xc3\xca\x03\x25\x55\xf2\x95\xb3\xc3\xb8\xb3\xdf\x7e\xf4\x76\xa7\xc1\x81\x22\x12\x93\xec\x44\x0d\x62\x48\xbe\x86\x31\x27\x70\x31\xa1\x44\xf4\xd7\x50\x7c\x6d\xda\xc8\x2a\xc1\x28\x8f\xa6\x56\x61\x88\xed\x6f\x8b\x13\x89\x2f\x1e\x3a\x7a\x64\x12\x26\x84\x58\x8e\x42\x52\x8b\x22\x8e\x5e\x75\xd5\x95\xea\x62\x52\x65\xc7\xc8\xab\x92\x70\x24\xe6\x05\x8f\x86\x6c\x13\x3a\x35\xb6\x9a\x7b\x18\x32\x92\x71\xde\x2a\x95\x47\x0b\xd0\xef\x9b\x45\xd2\x1b\xdc\xa2\xf9\xa2\xa9\x2f\x65\xfd\x0d\x9c\xb2\x18\x8f\x22\x03\x48\x54\x16\x56\x6a\x30\xb0\x16\xcf\x54\xda\x19\x1e\xcf\x46\x45\x4b\xed\x63\x5b\x33\xf5\x15\xad\xf4\x9b\x97\x97\x17\xf2\xe5\xb2\xef\xef\x33\xc2\x3c\xfb\xdc\xe9\xa0\xc9\x7c\x7e\x9f\xfb\x48\xf9\x03\xc5\x78\x3d\x0a\x02\x42\x7c\x15\x3b\x51\x14\xf0\xa4\x50\x6f\x79\xe3\x2e\x29\xc8\x4e\xf7\xfd\x5f\x91\xdb\xfe\x69\xf7\x5f\x17\xed\xfa\xa2\xaf\xf5\xdd\xb9\xca\xca\xec\x51\xc3\xc7\x47\xec\xee\xcc\xc3\xc7\xbb\x34\x35\x8d\xfb\xc9\xe7\xa7\x70\x0f\x8a\x76\x39\x6b\x05\xdb\x6b\x00\x73\xf6\x4d\x3b\x8c\x24\xd8\x32\xb4\xfb\x45\xcc\x20\x46\xdb\x22\xc2\xdc\xfe\xc6\xb8\xfb\x09\x6b\x66\x76\x61\x71\x76\x7a\x6a\x79\x76\xc6\xa9\x60\xac\x1e\x82\x9a\x6a\xf6\xa6\xec\x15\x31\x91\x1a\x62\x3a\x28\xcb\x9f\x28\x7b\x02\xcb\x3e\x3c\x91\x3d\x58\x85\xf4\x52\x52\x0e\xb8\x97\xc0\xb6\xc0\xd1\x24\xdf\x96\x23\x4b\xe6\x82\xaa\xfe\x01\x1e\x7a\x35\xa1\x83\x34\x78\x3d\xf0\x62\x04\xb7\xc5\x19\x82\x2f\x83\x69\x4b\x2c\x64\x32\x62\x2d\x71\x08\xb6\xd7\x24\xd2\x7b\x76\x71\xd6\x76\xc3\x99\x1f\x20\x89\x71\x9e\x41\x0a\xff\x77\x4e\x66\x68\xf1\x71\x1b\x94\x1d\xd1\x19\x90\x66\xb0\xc5\xba\x86\xf4\x88\x23\x4b\x79\x7e\x73\x3d\x45\xa2\xc6\x5b\xde\x9a\x1f\x29\xd4\x70\x6d\xe1\xb2\x54\xe5\x38\x3c\x8d\x5d\xb3\xe3\x6f\xa3\x1d\x74\xf2\xa4\x91\xda\xaa\xdc\x39\x89\x91\xe6\xa6\x7d\x75\xf8\x33\x52\x3e\xbf\xa5\x48\x00\x3a\x86\x9f\x98\xfd\xaf\xbd\xec\xdf\x14\x99\x35\xc3\xb5\x33\x5e\x4c\x36\xbe\x3f\xd9\xeb\x5e\xaf\x5f\xc8\x61\x41\xe2\x35\xc5\xe2\xa6\x4c\xd9\xa1\x83\x2f\x99\x22\xe8\xd7\xf7\x32\x9f\x3d\x18\xc9\x1f\x4e\x7a\x9d\x27\xf0\xde\x22\x6f\xda\x67\x86\x20\x34\x99\xd6\xde\x51\x64\xcb\x0f\xc7\xbf\x44\x45\x56\x79\x0f\x4f\x23\xea\xc1\x2a\xfb\xb1\xc5\xc6\xc0\x61\x29\x3e\xf2\xdd\x61\xf2\x52\x70\x0a\x1e\x17\xef\xa8\x8f\xbc\xc7\xca\xbe\x82\xee\xcf\x0c\x79\xe1\xa8\x34\x13\x6a\x7b\x1a\xd2\x3f\x19\x3f\x21\x74\x52\xbb\x16\x78\x35\x1e\x24\xda\x05\x58\xc1\x78\x14\x2a\x13\xb2\x31\xe1\xcc\xd0\xcf\xc4\xe0\x2f\xa0\x1b\x88\xb7\x82\xc0\x48\xea\x27\xa0\x34\x54\xd9\x9b\x4a\xec\x21\x52\x04\x1d\x97\x7d\xf0\xd2\xd2\x80\x89\x9b\xb7\x66\x98\xbd\xf0\xa7\x5a\x2f\x28\xd1\x96\x47\x25\x39\x8a\xc7\xaa\x0c\xab\x07\x4e\x47\x09\x05\x5b\x91\xc8\x3a\x80\x17\xab\xf5\x4e\xb7\x4c\x0f\x54\xdb\xbc\x1d\xc5\x3d\xf5\x93\x77\x5a\xbc\xcd\x63\x2f\xa8\x90\xe9\xb8\xac\x5e\xc7\xd7\xd4\x2f\x7c\xd1\xf8\x40\xff\xdb\x88\x25\x96\x25\xf1\x2b\xd3\x6e\x95\xad\xb1\x07\x21\xf9\x08\x4d\xc5\xe6\x10\x29\x57\x4b\xf2\x05\xd5\x39\x93\x05\xf3\x50\xb2\x2e\x2a\x1c\x93\xfd\x49\x16\x46\xcb\x3e\x66\x19\x79\xcb\x05\x67\x16\xa0\xcb\x17\xb2\xca\xfe\x0d\xcb\x9d\x30\x53\x94\x35\x3e\x0f\xfc\x56\x9e\x5a\xdf\x58\x74\xa7\xd9\x92\x16\x59\x71\x93\x74\x89\x1e\xee\x27\xed\x17\x07\x3f\x0f\x62\x6e\xe5\x82\x86\x92\xa5\x14\x36\xdd\x97\x2f\xdb\xb7\x8d\x5b\xec\x50\xbf\x5b\xec\x2f\xf7\xfe\x84\xbb\xc5\x34\x8a\xf9\x4d\xeb\xff\xa2\x52\x75\x16\x70\xd3\x4d\xb6\x87\x3d\xc1\x60\xa5\xbf\xc1\x9d\xdc\x29\x2b\xbd\xc1\x6f\x52\x62\x63\xd2\xe7\x64\xff\x4d\xe9\x02\xd0\xd1\xbf\xb1\x94\x68\x4c\xf4\x18\x83\x25\x3e\x55\xe1\x61\x3d\x6a\xa0\x89\xa9\xad\x3c\xc9\xb8\xe5\x66\x7b\x8d\x03\x82\x4a\xb9\xc1\x0a\x3d\x74\x88\xf4\x98\x64\x53\x5d\x1b\x5e\x98\x8b\x10\x85\x99\x31\xc5\x7a\x10\x7f\xeb\x35\xd0\xaf\xec\x05\x4e\xc7\x8b\xbd\x36\x4f\x91\x1d\x35\xeb\xa3\x44\xc7\x19\x06\xcd\x58\x91\x00\xab\x07\xea\x51\x07\xf0\x89\xa0\x0a\xdd\x10\xa0\x26\x9f\xd6\x25\xe3\x85\x36\x10\x12\xda\x4c\xf9\x83\x3d\x70\x87\x50\x39\x55\xf6\x49\x8b\x15\x8d\xb5\xfd\xce\xf3\x24\xa7\x0f\x0b\x0a\x55\xc1\x39\xf9\x69\x0e\x0b\x1b\x1f\xcc\xcd\x16\x22\x9c\xc6\x88\xdd\x80\xaf\x79\x40\x65\xd1\x48\xf2\x6c\xf6\xec\xf7\x4b\xec\x48\xb1\x2a\x72\x58\x9c\x80\xc5\xda\x3c\x0d\x2a\xa2\x11\xc5\x45\x7e\xf9\x67\x97\xdc\xd5\xed\x1e\x92\x98\x9d\x44\x64\x4b\xd8\x44\x5c\x1b\x43\x31\x5a\xdb\x95\xb2\xdc\xeb\xe4\x0c\x90\xcf\xb3\xd8\x73\x2c\x36\xae\x9c\x4f\xf6\x86\x94\x52\xf5\x05\x79\x2d\x27\x26\xa2\xb8\xe1\x8b\xe9\x63\x80\x4f\xe8\xce\xff\x0c\x9f\x52\x15\xab\x01\x67\x66\x0e\xb9\x49\x53\xac\x7d\x6f\x94\x5d\x3b\x58\x32\x2f\x76\xc3\xa9\x04\xc0\xae\x65\x83\x4e\x75\x30\x84\xe3\x77\x47\xdd\xb7\x59\x5b\xde\x36\x8e\x57\x32\x1c\x02\x9d\x8d\x80\x68\x15\xf6\x88\xcc\x57\xeb\xe3\x2c\x68\x4a\xbe\x00\x87\x42\x3a\x67\x1e\x85\x50\xe2\xad\x3f\x08\x67\x09\x74\x73\x40\x18\x0f\x51\x74\x84\x49\xca\xbd\x46\x75\xd3\x1a\x8d\xbb\x81\x29\xd1\xfe\x47\x89\xdd\x55\x62\x7b\x63\x88\x84\xb6\x7f\x64\xb9\xef\xb6\xf0\x6f\xd8\x42\x61\x8a\x12\xbc\x39\x5d\x8e\x9a\xce\x8a\x2f\x99\xfb\x28\xd6\x1a\x51\x5d\xe7\x9a\x4e\x2f\xea\x3a\xeb\x30\x0a\x81\xbf\x0a\x7e\x5a\x48\xe3\x05\xc0\xbb\x70\x25\x10\x82\xa4\x81\x26\x6d\xb1\x25\x07\xbd\xec\x06\x94\x9e\xd9\xb1\x21\x45\x0b\x19\x6b\x44\x57\xf1\xb0\x51\x75\x16\x89\xcc\x18\xa6\xdc\xc9\x6e\x92\x42\x3f\x18\x41\x2f\xd7\xb2\xab\xd9\x95\x3b\x31\x14\xce\xcd\x2c\x8a\x0f\xb3\x80\x41\xd7\xd8\x0d\xf7\x56\xf1\xaf\x26\x3b\x69\xd0\x44\x6b\x91\xd0\xda\xaf\xab\x50\x79\xe8\x1a\x88\xd3\xc9\x86\x84\x4e\xab\x46\xff\x24\x3c\x35\xac\x9a\x9f\x1c\x33\x10\x44\xfb\x0c\x57\xf6\x9b\xc6\xdc\x16\x66\xe5\x24\xc4\x2f\x0a\x5a\x44\xa3\xec\x04\xd1\x0a\x24\x0b\x82\x5a\x4f\x88\xc5\x98\x03\xb9\xd8\x0d\xe4\x67\xc9\x09\x9c\xd1\xae\x60\x00\x9f\x38\xf4\x81\xa5\x42\xcf\xbe\x30\xd7\xe5\xc7\x76\x8d\x98\xbb\x26\x83\x9f\x82\xa4\xba\x1e\xdb\x03\x1e\x3c\xbb\xe3\x56\x70\x61\x60\x96\x19\xf8\x23\x40\x67\xc9\x96\x8c\x8a\xac\x14\xab\x62\x78\xb4\x0a\x63\xd5\x66\xe5\x9d\xb5\x5a\xdb\x9f\xdf\x67\xed\xe9\x1d\x5a\x38\x0b\xad\x9b\x7f\x50\x62\x3b\x4d\x53\xb6\x5f\x52\xb2\x2f\xf5\xc3\xb4\x12\xc5\x15\x1c\x15\xf7\xfb\x96\x76\x1f\xe7\x2e\x46\xd9\x48\x51\x22\xba\x0e\x72\xa8\xc4\x06\x8d\x99\x83\xf8\x6a\xd5\x21\x4d\x2c\x41\x37\xdd\xe3\x97\x4e\xcd\x8b\xfb\x4f\x9a\x3a\x79\xc2\x69\x7b\x71\xd2\xf2\x24\xf3\x6b\xc3\xe9\x86\xda\x15\xd0\x11\x3b\x71\xd4\xe8\x02\xc2\x2b\x40\xb3\x25\xdd\x36\x97\xbc\x74\xa1\x98\xea\x42\x6b\x70\xd0\x12\x0b\x92\x36\x81\xfd\x25\x8d\x20\x3c\x14\x89\x93\x95\xb2\xef\xe1\xc7\xf1\xbc\xae\x6a\x8e\xc0\xa2\x24\x42\x21\xc1\x1a\x8e\x3e\x86\x30\xfe\xe0\xbe\x22\x13\xb1\x1e\x14\x09\x8e\xa1\x7f\xbb\xcf\x9d\xcc\x5d\x2b\xf2\x0f\x69\x8f\x6c\x11\xdf\xf2\xb7\x7b\x76\x45\xec\x0e\x45\xec\x71\xe9\x27\xba\x41\x5f\x9e\x93\xac\xca\xca\xdb\x99\xe5\xf4\x71\xdc\x15\xd5\xc3\x8b\xea\x39\x4d\x54\xdf\x70\x5e\xfe\xa0\x1d\x07\x7d\x18\x29\x2d\xb9\x25\xd7\x47\xe4\xfe\x60\x03\x38\xc2\xb0\xc5\x16\xe4\x8a\x7e\xfc\xc1\xee\x27\xf7\x0e\xe1\xe7\x29\x4a\x27\x1d\xe8\xef\x29\xc8\x66\xd8\x91\xdf\x67\x37\x7f\x75\x37\x7f\xf5\xa7\x25\x7f\x75\x37\xd1\xf0\x9f\x83\x80\xdf\xcd\x32\xde\xcd\x32\xbe\x18\x48\x11\xde\xf6\x9b\xfd\x8d\xf6\xf5\x95\xed\x5c\x95\x03\x52\x5a\xd9\x7b\xc7\x0d\x8d\x7d\x0b\xd4\x5d\xfb\x25\xe3\xee\xe3\x73\xd7\x74\x06\x2b\x04\x39\x6d\xe6\x38\x49\x75\xbf\xac\x9f\x14\x51\x3f\xed\x81\x5c\xb7\x4d\xeb\x41\x84\x69\x0f\x19\x98\x42\xd3\x6f\x7b\x2b\x7c\xd3\xda\x07\xff\xce\xcd\x18\x52\xf1\xee\x31\xf6\xd1\x12\x33\xde\xb0\xdf\x55\x92\x26\xcf\x57\x03\x00\x73\xe6\x95\x11\xc2\x30\x31\x1d\x6d\xd9\xd6\xaa\x90\xf4\xcb\x9a\x83\xcb\x08\xad\xcb\x0a\x6a\x70\xaf\xa1\x63\xec\x67\xb9\x75\x12\x81\x9d\x8a\x6c\x47\x6b\xc6\x06\x88\x8d\x07\xb4\xaa\xa0\xde\x0d\x32\x56\xa8\x5c\x89\x55\xe7\x18\x40\xc4\x46\x89\x41\x55\x20\x54\x10\x6d\xff\x5a\xf1\xe2\x9a\xb7\xc2\xb5\x93\x12\x61\x61\xa1\x3c\x86\x0d\x7f\x45\xec\x9f\x5e\xa7\xc3\x01\xe9\xff\x6a\xb1\x18\x6f\x9a\x36\x97\x62\xc0\xf6\xc0\xa2\xb5\xeb\x6c\x62\x67\x10\xcc\xdc\x9d\x9c\xe9\x03\xb5\xd5\x79\x85\xb4\x64\x25\x4a\x35\x64\x4b\xec\x12\xf5\xc4\xdc\x8c\x3d\xe3\x5e\x3b\xad\xbd\x30\x37\xa3\x82\x2c\x41\x89\x73\xf6\x23\x32\xf8\xd1\x89\x89\xeb\xd5\x6b\xb7\xf9\x8d\x1b\x4d\xa6\xae\x3b\x19\x4e\x13\xfb\x0e\xb7\x21\xc6\x1c\x7e\xe4\x46\xda\x4f\x24\x6f\xc3\x8e\x03\xdc\xb3\x21\x98\x40\x96\x0a\xfd\xdb\xd7\x31\x39\x35\xed\xaa\xfb\xc8\x39\xfc\xb3\xcf\xa3\xbb\x3f\xc1\x4a\x55\x4d\xe8\x80\xf1\xc0\x4b\x20\xa4\x81\xdb\xc1\xce\x7b\xff\xba\xc1\xbd\x8f\xd8\xc0\x1a\x9b\x8d\x36\x0c\x31\x71\x80\x3d\xcd\x7d\x6a\xc6\x01\x06\xf9\x3b\x33\xf3\x4b\xb7\x9d\x98\x3a\x36\x7b\x82\xc0\xdb\x0d\x90\x72\x80\x4e\xc3\x87\x29\x97\xb4\x1b\xfa\x77\x74\xd1\x37\x57\xb4\x05\xeb\xcd\x3d\xc3\x70\x8d\xdb\x27\xdd\xc7\x52\xf0\x48\x8e\xfd\xd3\x5c\x97\xe4\xe8\xc2\x8d\xde\x6b\x88\x0d\x41\xa8\x52\x51\x2d\xc7\x0e\xf6\xd7\x66\x84\xba\x81\x72\x67\x44\xa8\x83\xc1\xe1\x77\xc7\xdc\xfd\xda\xef\x22\x63\x83\x8c\x50\x2e\xb4\x33\xbc\x60\x37\xfa\x6b\xa7\x76\x86\x40\xda\x19\xea\xee\xc3\x0b\x71\x6d\x65\x87\x0f\xef\x73\xd8\x7a\x90\x77\x95\xd5\xe1\x95\xd5\x8f\xe8\xca\xea\x7d\xe7\x99\x10\xf6\x4f\x02\x9c\xb9\xb2\xbd\x5a\x34\x63\x1f\x93\x41\x5d\xda\xba\x1f\x18\xd5\xa5\xcd\x2e\xb2\x19\xb3\x0f\x97\x4c\x1e\x77\x32\x83\xed\x7a\x83\x87\xf3\x06\x7f\x61\x9c\x3d\xb2\x28\x15\xd6\x6f\xfb\x29\xb8\x0a\x85\x5c\xb0\xdf\x3a\xee\x2e\x99\x97\x94\x30\xf5\x9c\xb6\x1f\x4e\xb4\xbd\x0d\x04\x29\xc6\x08\x27\xca\x03\xee\xe9\x0b\xd7\x4b\x15\x6a\x67\x14\xc2\xb8\x9b\x9d\xf2\x89\x31\xf6\x3b\x16\xdb\x47\xf9\xa4\xf6\x5b\x2c\xf7\x56\x59\xf9\x22\x1a\x1b\xfa\x10\xb6\xab\xa6\x7d\x09\xac\x07\x7e\x33\xbb\x80\x0f\x0a\xb9\xd1\xf6\x53\xb1\xa2\xef\xb5\x1e\xcb\x76\x62\xe3\xeb\x0f\x7c\xd0\x2a\xce\xfe\xc4\x62\x97\x51\xa5\x17\x51\x92\xd8\x1f\xb3\xdc\x3b\x66\x8c\x4b\x52\xb0\x36\x06\xb5\x48\x72\x6c\x0f\xd1\x26\x8d\x8e\xfb\xe2\xb4\xea\x85\x16\x1b\x69\x7b\x1b\xf6\xdd\x96\x7b\xd5\x49\x35\xb8\xf5\x28\x4c\xd2\xd8\xf3\xc3\x34\xa3\xa9\x13\x23\xd9\x57\xd9\x0b\x5c\x9b\xaf\x94\xd8\xcf\xb6\xbd\x0d\x9c\x82\xd8\xf4\x45\xb1\x3f\xdb\x1f\x29\xb9\x7f\x6b\x9d\x2c\xb8\x23\x7a\x2b\x97\xaa\x83\x60\xb3\xaa\x9a\xba\xb2\x24\xbb\x53\xec\xcb\x38\x5d\xd0\xe0\x16\x73\xb4\x83\x29\xe6\x2c\x64\xaa\xc3\x47\x80\x53\x8e\x53\xdb\xd5\x70\x04\x42\x19\x02\x46\xbd\x28\x76\xf8\x1d\x5d\x2f\x90\xba\x00\x07\xe8\x5b\x38\x5b\xc0\x08\x3f\x26\xa7\x70\x10\x2e\x8a\xb7\xe1\xd4\xba\x71\x92\x66\x00\x32\x46\xbd\x2f\xc6\x38\xfb\x21\x8e\xb3\x1f\xfe\x13\x8f\xf3\x14\x71\x59\x5c\xe7\x96\x25\x97\x85\x29\x41\xa0\x26\xd8\xfd\x06\x3a\x66\xb6\x75\x7e\xb9\x54\x18\xf2\x8b\x69\xfd\x33\x90\x0a\x6e\xff\x4e\xc9\x7d\xfc\x9a\x76\xc1\xe4\x46\xa6\x1c\x48\x88\x19\x8b\xbd\x75\x33\x8b\x7c\x10\x49\x32\xc3\x67\xfa\x58\x92\x3f\x6e\xb1\x80\x69\x37\xed\x5f\x71\x6f\xc9\x7e\x49\xd1\x00\xc9\xee\x7e\x98\xf8\x8d\x02\xb6\x3f\x45\x64\xa9\xaa\x81\x01\x5f\x6d\x3c\x42\xe6\xfa\x60\x89\x0e\x11\x4f\x70\x6f\x0c\x15\x4b\x7d\x46\x24\x9c\x65\x36\x76\xc4\x4e\x9b\xa4\x3c\x4c\xb1\x7f\xa6\x03\xcf\x6f\x6b\x21\x9d\xb9\x20\x8e\xea\x56\xee\x60\x0d\x58\x95\xc2\x2c\x40\xa5\x7f\xc5\x98\x7b\x43\xf1\xad\x22\xed\xbe\xff\xc9\xe2\xc4\xb3\x8f\xee\xc6\x6c\xec\x54\xd1\xbf\x53\x2a\xfa\x77\xb8\xbf\x54\x90\x78\x56\xd0\xf3\xba\xc6\x7f\x3d\x3b\xca\x8e\x0c\x17\x17\xd0\x5f\xd2\xae\xda\xff\x13\x98\x94\x76\xe7\xf6\xda\xf9\xad\xf6\xe9\x1d\x84\x6c\x14\xaf\xf2\xc2\x20\x8e\xcd\x87\xb0\xc9\xa1\xda\x32\xb5\x30\x27\x43\xf5\xed\x6f\x3c\xd8\x7d\xbc\xf6\x5b\x6d\xed\x49\x4e\xa0\xa9\x19\x03\x84\x9c\x64\xc1\x40\xed\x2f\x8b\x2a\xcb\x24\xf6\x83\x12\x3f\x5c\xe9\x06\x5e\x8c\xf1\xd0\x2c\x7b\x66\xd3\x82\x49\xbb\x69\xed\x59\xe3\x71\xcd\x14\x40\x7f\x76\x19\x7b\x06\x63\x42\x37\x5f\x89\x62\x9f\x27\x76\xe4\x2e\x65\xbf\xcc\xa5\x05\xd1\xc4\xa2\x17\xb5\x2d\x3c\x91\x02\x88\xea\x5a\xe3\x41\x14\xae\x80\x28\x39\x80\x14\xd1\x5e\x10\xec\x3f\xa8\x2f\xc1\x4b\xd9\x25\xfa\x44\xf9\xb4\xc5\xf6\x40\xa9\xf6\xef\x59\xee\xbb\x2d\xf4\xe7\xca\x7d\x04\xc2\xe0\x62\xde\x20\x37\x2f\x55\x42\xed\xbb\x8e\xe4\xa5\x6c\xd3\xfe\x29\x6b\x98\xdb\x75\x30\x81\x5a\xe9\xd0\x49\x5a\x45\x1a\xd0\x2c\x08\x3f\x51\x60\xfc\x3d\xa9\x48\x65\xa4\xc2\x24\x00\xb5\xa0\x95\xa3\x0e\x84\xfc\xbb\xc6\x56\x75\x03\x6d\x55\x57\xbb\x07\x42\x2d\xa4\xbc\x13\x74\x63\x82\xe5\xee\x6b\x80\x19\x61\xc5\x92\x56\x14\x43\xc2\x48\x62\x3f\xd9\xbd\x31\xfb\x65\x8e\x43\xd2\x5d\x59\xe1\x89\xd0\xbd\xe0\x09\xe2\x0b\xe8\x2f\x7a\xcb\x2e\xff\xfc\x08\xb3\x29\xdd\x82\xb6\x99\x9b\xbd\xa4\x65\xbf\x77\xc4\xbd\x67\x64\xb9\xc5\x11\x82\xd0\x88\x75\x96\xa8\x40\xb4\x04\xca\xfa\x76\x94\x9b\x01\x68\x79\x17\x5b\x0c\x1e\x36\x01\xd6\x67\x3d\x16\x8a\x7d\x28\x77\x18\xb1\x74\xa1\x4c\x5e\x75\x30\xd0\x5a\xda\x06\x53\x49\x01\x9d\x38\x51\xc7\xbb\x03\xcf\x0e\xe4\x0c\xad\x3a\xa7\xc2\xa0\x87\x8a\xa8\x9f\xf6\xc4\x31\xb6\xe3\xc5\x7e\x22\x76\xbc\x50\x4b\x69\x42\xeb\xb4\xdf\xc8\x78\xeb\xbc\x90\x38\xe1\x09\xbc\x48\xed\x65\x94\x74\x1f\xc5\x18\x73\x09\xb6\xf4\x7c\x0a\x3e\x40\xf8\x48\xfe\x86\x4e\xd4\x21\x9b\x3a\x21\x0d\x89\x65\x8e\xce\x6f\x48\xa7\xf1\x25\xb0\x59\xbe\x77\xd5\xa7\x81\x70\xc8\x4f\x28\x47\xb4\x61\xd0\x7e\x83\x2a\x14\x73\xc0\x6c\xc0\xf0\x62\x2f\x00\x00\x28\x51\xae\x9f\x3a\x2b\xb1\xd7\xe8\x8a\xdd\xd9\x98\x38\x6f\xb7\x18\xae\x6c\xfb\xf5\x96\xfb\x6c\x0b\xfe\xcc\xcf\x18\x89\x8f\x24\x04\xa5\x83\x4f\x1c\x48\x0d\x66\xe5\x15\x9e\x96\xe1\x85\xb2\xb3\x8e\xf8\x15\xe8\xfc\x2f\xd3\x36\x52\x76\x3a\x78\x19\x7d\xee\xf2\xdf\x4c\xef\x41\x0d\xa1\x13\x47\x1b\xbd\x41\xeb\xfd\xf9\x25\xb6\x8f\x66\x8e\xfd\x7f\x2c\xf7\xef\x2c\x85\xc5\x97\x5f\xf3\x39\xb0\xb8\x81\xab\x3e\xf7\xec\x56\xeb\xfe\xbc\x97\xfd\xda\x21\xe7\x00\x30\x43\x4b\xf5\xd6\x93\xbb\x41\x7f\x15\xe2\xac\xce\xfb\x29\x50\xe5\xa0\x29\x31\x1a\xa4\x4e\xfc\xb2\x7b\x6a\x95\x94\x09\xf1\x2a\xfc\x2d\x8f\x4c\xaa\xfe\x24\x4f\x8f\x47\xd1\xfe\xbe\x07\xb5\xdd\x62\x7f\x33\x8a\xf6\x1b\x78\xa4\xcb\x4c\xdb\x0c\xec\xe3\xee\x91\xec\x97\x66\x99\xf1\x8d\x3d\xc7\xd8\x64\x20\xfa\x2e\x4a\x4d\x8b\xf8\xeb\x4a\xcc\xd8\x72\xec\x17\x97\xdc\x7f\xb4\xf4\x2b\x2a\x02\x80\xae\x15\x8b\x40\x33\x4a\x50\xc6\x3d\x40\xa4\x60\xd8\x08\x94\xf8\x04\x88\x37\x59\x10\x8a\x86\xa0\x87\x8b\x33\xff\x4d\x08\xd1\x01\x68\xcd\x3a\x9e\x3c\x63\x2e\x66\x3f\x00\x81\x91\x8b\x30\xcc\xa2\xd7\x85\x32\x09\xa5\xc3\xe9\x58\x7d\x02\xe6\x32\x7d\x3a\xce\x22\xe9\x95\x3a\x26\x16\x52\x3d\x0d\x9c\xe9\x13\x73\xa8\x29\x37\xbd\x9c\x3c\x7f\xdf\x5e\x76\x68\x28\xe5\x60\x4e\xa8\x45\x10\x22\x11\x27\xf6\x5d\x7b\xdd\x2b\xf5\x0b\x4e\x1a\x7b\xf5\x55\xb9\x34\x22\x44\xe8\x80\xf4\x2f\x7a\x06\x75\x98\x4d\x6b\x5f\x07\x39\xda\xcd\x34\xf2\x3d\x42\xd8\xcb\x5b\xf6\xc7\x46\xdc\xcd\x12\x71\xb9\x9b\x12\xc2\x37\x3e\x09\x06\x2e\x21\x91\xf9\x06\xaf\x77\x53\x40\x25\x89\xe2\x06\xf0\xde\x10\xc0\x88\x11\x09\xb3\xe6\x43\xbc\x12\x25\xf7\xe0\x19\x22\x49\x9d\x8e\xfc\x52\x56\x38\xb8\xc8\x50\xce\xa2\xbc\x08\x23\x08\x18\xa2\x95\xda\x0d\xa0\x3c\x48\x0e\xc2\x68\x52\xad\x5a\x49\x1a\x77\xeb\xa9\x3a\x2f\x26\x1c\x23\x6c\xfc\x40\x91\xe3\x67\x35\x12\xa7\x7e\xbf\xc1\x63\xdc\x4a\xb2\x62\x1a\xf0\x2c\xd5\x97\x58\x86\xd4\xfe\xa2\x4b\xad\x63\xec\x71\x5b\x03\x29\x0e\x37\x98\xc3\xa3\x6b\x0e\x85\xd8\x29\x56\x0f\x63\xff\xd5\x62\x7b\xb1\xa3\xec\x2f\x5b\xec\xba\x73\xa8\x21\x65\x37\xbf\xda\x9a\x6b\x9a\x5d\x9e\xa5\x70\x1c\x47\x1e\x76\xdc\x95\xca\x7a\xd7\xca\xce\x97\xa7\x6d\xd8\xe2\xa5\x76\x40\xc3\x10\xca\xb0\xac\xb2\xc3\xc3\xa4\x1b\xe3\x39\xc8\x4b\x1d\xa0\x35\x55\x4b\x1c\x90\x7d\x30\xa7\x9a\xcc\x01\x01\x47\xc7\xe1\xdf\xee\x33\x98\x86\xa4\xdd\xe3\x78\xc0\x37\x0c\x48\xc3\x4f\xed\x73\x5b\xd9\x45\x33\xd9\x19\xd0\x12\xfd\xba\xc4\xda\x33\x4d\x2f\x10\x2e\x15\x61\x4c\x02\x6f\x4c\x28\xf0\xc3\x6e\x82\x51\x76\x30\xef\xc9\x33\xdf\x09\xba\x2b\xbe\x58\x60\x7b\x1b\xb1\xbf\xc6\x63\xd3\xd0\xbb\x97\xfd\x49\x89\x8d\x63\xfe\xe8\x22\x6f\xda\x9f\x2c\x0d\x91\x1f\x0d\x30\x8c\x18\x80\xb3\x28\xf3\x3c\xdc\x17\x96\x4e\xd1\x8e\x7f\xd4\x59\x92\xe5\xe1\x72\x91\xc4\x30\xa4\x3d\x51\xb6\x2a\x8d\x88\xb6\xd5\x25\x1c\x28\x5a\xd7\x4c\xea\xa2\x34\x02\x2f\xa7\x22\x55\x87\xf6\x38\x49\x3d\xf6\x3b\x42\xa7\x5a\x96\xfb\x5f\x8d\x23\x66\x2b\x02\xb8\xe6\xbe\x22\x66\x88\x02\x3b\x94\x48\x42\x85\x15\x21\xf9\x8b\x66\xc3\x50\x3e\x54\x86\x85\x86\x7f\x63\x90\x01\x79\x5e\x8b\x6b\xc5\x4e\x31\xea\x6e\x7b\xd6\x3d\x32\x03\x7f\x15\xa5\x68\xe2\x33\xa2\x90\x6e\xc2\xb3\x6c\x00\x1c\x74\x43\x1a\x7f\xc2\x52\xb8\x94\x1f\xb0\xdc\xb7\x0f\xc0\xa5\x7c\xc0\x60\x26\xb5\xe2\x31\xb6\x0f\x36\x26\x6d\x42\x63\x6f\x18\xcd\x38\xc5\xf6\x51\xde\x99\x3d\xe3\xee\xcf\x66\xcc\xec\x46\x1a\x7b\xe0\xd8\x11\x8b\x50\xa6\xa6\x89\x3d\x3d\xec\x55\xef\xcd\xe9\x60\xba\x99\xf2\x59\x16\x1b\x8b\xb9\xd7\x10\xaa\xb5\xbd\xe6\xb6\xb2\x22\x67\x34\x2e\xb0\xa6\x17\x24\xdc\x39\x20\x1e\x9c\x10\xba\x3c\x3f\x58\x05\x84\x67\x50\xc8\xc1\x8e\x8c\xa1\x9f\x11\x2e\x31\x9e\xdd\x4c\x78\x9a\xe2\x1e\xe0\x60\xab\x4e\x8a\x5e\x4e\x4c\x5d\xe2\x55\x23\x85\x51\x41\xcb\xd3\x0b\x4b\x51\x7d\x95\xa7\x53\xa0\x60\xda\xdf\x2b\xb9\x37\xe4\xae\xe9\xe6\xce\xd0\xc1\x8c\xe1\x2c\xa4\x26\xea\x70\x58\x18\x9e\x93\xc0\x3b\x9b\x16\x30\xc6\x19\x4b\xf8\xdf\x95\xd8\x29\x82\x53\xbb\xc9\x3d\x9a\x35\x1f\x60\xd5\x60\xae\x81\xc7\x2c\x0c\x31\x22\xa6\x6c\x70\xa4\x91\x6d\xd1\x99\x33\xa9\xd2\x3e\x2d\xa9\xe9\x3e\x72\xde\xd4\x74\xcf\x98\xa7\x90\x20\x53\x7d\x52\x24\x79\x10\xac\x2b\xcf\x3f\x99\x21\xd7\xa1\xd7\xe4\xb9\x8a\xce\x34\x98\xaa\x77\x48\xbc\x79\xcd\xd5\x57\x5f\x79\x75\xd5\x99\x57\x46\x55\x31\xe5\x43\x67\x6e\x6a\x7e\xea\xb6\xa5\x33\xd3\xb7\xcd\x4f\x9d\x9c\xad\xb2\xe7\xee\x61\xff\xba\x68\x64\x3c\x3f\x4c\xed\xff\x3e\xea\xde\xbe\x4c\x08\xa6\xb8\xf0\xe0\x3a\x68\x16\x52\xa4\x82\x22\x87\x0b\xd7\x45\xda\x33\x17\xd4\xaf\xb0\x07\x1d\x07\xe2\x58\x31\xc1\xa5\x51\x80\xd8\xcf\xe2\x71\x28\xab\xba\x69\x8d\xac\xf2\xde\xa6\xb5\x17\x5f\x36\x86\xee\xbf\x8f\xb0\xff\x60\x31\xba\x63\xbf\xd2\x72\x9f\x6b\xc9\x44\x43\x5c\x69\xc4\xb3\x46\x7d\x96\x42\xe5\xa2\x10\xf3\x71\xe9\xcb\xfd\xdf\x85\xc7\xe0\x5c\xea\x37\xa8\x04\x94\x58\xf3\xd1\x92\x68\x52\x37\xe0\x65\x67\x01\xa4\x72\x76\x05\xf6\xbe\xf9\x68\x16\xf5\x25\x63\x32\xcc\x30\xd1\x02\xfb\x06\x77\xd2\xac\x1c\x56\x67\x95\x03\xa8\x5d\x4d\x52\x64\x41\x8f\x79\x08\x0a\xab\x97\xf2\x4e\x8b\x8d\xa7\x7e\x9b\x4f\x35\x1a\xbc\x61\xff\xfb\xf3\xa0\x86\x6f\x2c\xcb\x62\xf2\xfe\x9a\x7e\x82\x78\xac\x23\xf0\xc3\x8b\x17\x64\xac\x31\xe2\xf5\xd2\x99\x5e\x48\x5d\xd5\x72\x7c\x03\x04\xf8\x1e\x38\x3f\xd9\xc7\xdd\xeb\x8a\xda\x8d\x47\xf5\x0c\x00\x1f\x94\x84\x48\xfb\xe8\x2a\xef\x19\x1d\xf0\x83\x11\x03\x85\x41\xcd\xc4\xa8\x13\x05\xd1\x8a\xc2\x77\x58\xe6\x71\xdb\xfe\xf4\x88\xfb\xf2\xd2\x94\x93\xd2\xbd\x2c\x29\x3e\xe5\x71\xbb\x0f\x2e\x12\x75\xa0\xa8\x49\x19\xf4\x77\x74\x79\xec\xf3\xa4\xea\x4c\x39\x61\x37\x00\x6e\x47\xdc\x17\xb7\x28\x4e\x7a\x82\xc3\x28\x43\x37\x45\x46\x75\xe5\x0e\x95\xd6\x99\x36\xcc\xa3\xa9\xf9\x19\xea\x4a\x62\x82\x04\x13\x72\xb7\x26\x54\xb0\xa8\xe9\x34\xbb\x61\x1d\x85\x90\x9f\xf6\x84\xf6\x3a\x1f\x35\xb8\xde\xbc\xe1\xed\x1a\xa6\x25\xc3\x58\x3b\x6f\xb2\xd8\xeb\x2d\xf6\x73\x50\x79\x80\x21\x98\xdd\x10\xbd\x02\x71\xf6\xf6\x73\x2d\xf7\xca\xa9\xcc\xee\xd7\xd7\x6e\xa3\x69\xb5\x1e\x76\x9c\xa9\x3f\xcf\xb2\x69\x36\xb5\xad\x26\x94\x1f\x3d\xa8\xc9\x62\x56\x3a\x7b\xee\xa5\x85\xaa\xe0\x42\xce\xd9\x63\x7f\xed\x41\xee\x7d\x56\xfe\xaa\x73\x60\xe1\xcc\x41\x69\xa1\x47\x15\x55\xe9\x81\x9a\xfe\x07\x19\x21\xa1\xe3\x35\xda\x7e\xe8\x83\x72\x1e\xc5\x72\xa6\x7b\xa1\x17\x44\x2b\x11\x11\xf3\x13\x56\xf3\x0e\x43\xfb\xe8\xdb\x13\x99\x87\xaa\x82\x0a\x8a\x69\x8a\xfd\x7d\xb6\xeb\x5f\xf8\x17\x15\x03\xff\x82\x12\xc1\x63\xdd\x35\xcc\xa1\x21\x3f\xb9\x01\x20\xeb\xd3\x96\x41\x20\xae\xb0\x6d\x33\xc0\x2c\xdd\x31\xaa\x80\xc7\xd7\xc3\x4c\x87\xad\xa3\xbb\xa3\xea\x2c\x6c\xb7\x22\x2e\xd8\xb4\xbf\xbc\xff\x12\xfb\xb7\x25\x85\xd8\xf5\xbc\xd2\xd6\x9b\xdb\xd6\xdd\x81\xa7\xda\xcf\x5b\x83\x99\x8e\xb4\x83\xd1\x04\x19\x83\xa4\xa1\xad\xaf\x9f\xaa\xce\x42\xde\xda\x2b\x35\x7c\xa1\xde\x56\xc4\x2e\x78\x91\x7b\x65\xd7\x39\xbc\xc3\x14\x86\x27\x6e\xef\x0d\xbc\xda\xbe\xb2\x08\xa4\x3a\x3f\xa1\xf2\xe9\x8a\xdf\xb3\xd8\x81\x6d\xc3\xa5\x17\x31\xfa\xdb\xfe\xb8\xe5\x1e\x29\xbc\x83\xf2\x9c\x82\xc4\x75\xde\xad\x4c\x75\x37\x36\x85\xa7\xb3\x1e\x1b\xa7\xac\x81\xa9\xd4\x0e\xce\x5d\xed\x3b\xb4\xdc\xa7\xdd\x65\x31\x19\x42\xc3\x03\x93\xdd\x81\x98\x57\x0e\xd2\xf7\xd8\xdb\x2e\x63\xe5\x21\x96\x1e\x44\x5a\x00\xfa\xd5\xff\xbe\xd4\xbd\xab\x6f\x17\x56\xb7\x1d\x13\x18\x4b\x0c\xb8\x38\x09\x18\xf8\x58\x72\x9f\xc6\xd8\x10\x44\x23\x23\xd3\xb0\xe7\x2c\x65\x00\x76\xa4\x39\xc5\x15\x05\x34\x94\x95\x63\x74\xe0\x37\x1e\xc4\xee\xb6\x34\xa4\xa6\xf5\x0b\x00\xd4\x24\x74\x23\xa5\x2a\xf6\x9c\x68\x8d\xc7\x24\x32\x12\x3a\x2c\x82\xed\x11\x2a\x5a\x23\xa8\x0e\xf6\x26\x8b\x3d\x84\x5a\x37\x1d\x78\x49\x02\x36\xf3\x97\x5a\xee\x5d\xd6\xbc\x76\xae\x5b\xd2\x9e\x90\x6a\x96\x26\xaa\x3d\xbf\x7d\x21\x25\x4e\x5d\x7c\xa6\x72\x48\xdf\x57\xdf\x6b\x31\xb6\x46\x07\xf5\x06\xb7\xdf\x62\xb9\xaf\xb6\xb2\xdf\x4a\xe2\xac\x43\x10\x0f\xc5\x35\xd1\xb6\xe2\x6f\x59\xe3\x33\xd2\x97\xa8\x59\x5d\x24\x60\x36\x6f\xa0\x8b\x50\xe8\x14\xe4\x8c\x02\x17\x1c\xbc\x8a\x80\x7a\x99\xbe\x0b\x39\x97\x52\xdb\x35\x8e\x07\x4f\x93\xd5\x86\x7e\xfd\x65\xf7\xd4\x19\xf5\x4b\x1a\x8e\x6a\x79\x3e\x72\x29\xd3\xfa\xf4\xc6\x9a\x57\x5f\x45\xed\xca\x4f\xa8\x0d\xfa\xb7\x3e\x67\xb1\x4b\xf0\xe0\x2d\xfa\x24\xb1\x3f\x64\xb9\xaf\xb3\xa6\xb2\x0b\x26\x71\x8e\x84\x6e\xa3\xa3\x7a\x1b\x9e\x48\x33\x1a\x10\x12\xbd\x2d\x6f\xed\x42\xaa\x96\x97\xe3\xe7\x2a\xf0\x39\x31\xc4\x5b\x3a\xe4\xfe\x7a\x94\x31\xa1\x8f\x48\x0c\xc9\xd1\x01\xdc\x53\x4a\x6f\xef\x75\x78\xa3\xd0\x8c\xf9\x1b\xa3\x9a\x3f\x93\xa6\x03\x36\x97\xf6\x69\x4a\x81\x9e\x51\x5f\xcc\x1d\x61\xc0\x3f\x8a\x27\x62\x72\x91\x62\x42\xac\x4a\x98\x32\xcb\x91\x83\x0b\x47\xd2\xcc\x40\x87\x1e\x66\xf2\x30\x91\xb9\x32\x53\xf9\x63\x30\x3e\xd3\xd3\xf9\x02\xb5\x57\x21\xa9\x17\x2c\x5b\x04\xee\xe4\x39\x21\x5f\x97\x03\x07\xd9\xd8\xe2\x61\x69\x14\x8f\x39\xf8\xb4\x1b\x39\x9e\x17\x0a\x77\x03\x5c\x24\x48\x96\x2d\xaa\x90\xb2\x81\x0c\x53\x2b\x2a\x18\xbe\x4b\xba\xb8\x24\x43\x93\xae\x90\x26\x99\xf0\xb3\xba\x51\xcf\x20\xa6\x1b\xb2\x1a\x09\xc5\x3d\x3b\x20\x96\x9d\x75\xee\x74\x02\x0f\x4c\xc6\xb2\x1a\x60\xcc\xd5\x3e\x0e\x8b\x3e\x51\x9f\xc9\x63\xb0\xea\x4d\xca\x0e\xa2\x55\xf6\x5f\x2c\x36\xae\x76\x6c\xfb\x8b\xd6\x10\x0a\xaf\x0c\x90\xd1\x8e\x83\x89\xfb\x9b\xd6\xa2\x8a\x3c\xc9\x47\x9b\xfa\xa1\xdf\xee\xb6\x8d\xd0\x94\x8b\xbd\xc8\xd4\xb7\xd8\xbb\xc6\x0b\xcd\x13\x79\xd1\x02\xb1\x84\xcf\x1a\x77\xaf\x2b\xba\x61\xba\xe4\xfa\xa4\xd2\x00\xe2\x9d\x3f\xde\xc7\xde\xa3\x88\x58\xde\x66\xb9\x58\x5c\xd4\xec\x57\x6a\x77\x4e\xbd\x32\xe8\xf8\x9a\x09\x95\xab\xd9\x95\xec\xd0\x8e\xb5\xf6\xdd\x13\xef\xf0\x27\xde\x5d\x66\xa5\x7f\x61\x67\x99\x1d\xd2\x09\x0f\x38\xcb\x14\xc1\xaf\xfc\x06\x63\xdb\x00\xec\x2d\x44\x8d\x25\x5e\xef\xc6\x7e\xda\x43\x8c\x2c\xfb\xaf\xc6\xdd\x4f\x5a\x7d\x97\x9d\x15\xa1\x01\x93\xb6\x43\xa8\x14\xe0\x4f\xf3\x56\x79\x1e\xf6\x03\x0d\xf2\xa0\xe9\x52\x19\x90\x26\xce\x37\x52\x0d\xa7\x2f\x6f\x0c\xef\x44\xa4\x03\x64\xee\x8d\x3c\xae\x62\x7f\xa5\x06\xe3\x29\x1a\xd2\xf3\x3f\xec\xa6\x5b\xee\x22\xe7\x5d\x34\xb9\xfd\x25\x5d\x6e\x7f\xf2\xbc\x2d\x95\x77\x5b\x17\xc9\x54\x99\xf8\x2b\x15\x2f\xae\xb7\xfc\x94\xd7\x85\x3a\x38\xd0\x76\x19\x92\xe9\xb2\x39\xc0\xc8\x3f\x8c\x48\x01\x2b\xe6\x23\x13\xdd\x88\x89\xee\x4d\x58\xb7\x3c\x04\x8f\x72\xa3\x7a\xd6\x6a\x6e\x2f\x0c\xa7\xed\xa9\x41\xd8\x14\x59\x75\x32\x39\x99\xaf\x0e\x63\xaf\x34\x09\x64\x49\xf9\x51\x0d\x40\x79\x3a\x05\xde\x4d\x49\x53\x60\xff\xd7\x11\xf7\xe6\xa2\x1b\x2a\x00\xae\xdf\x28\x9b\x7f\x5c\x4e\xdc\xea\xa6\x35\x46\xbe\xd3\x78\xd3\xda\x8b\x2b\x65\xd3\x1a\x93\x10\xf3\x86\xdc\xfa\x76\x89\xbd\xca\x62\xea\x79\xfb\x05\x96\xfb\x8c\x29\xfa\x91\xcb\xb9\xd4\x7d\xc7\xa4\x12\xcb\xd8\x09\x21\x76\x4f\x9e\x5e\x5a\x96\x01\x77\x24\xcb\xb0\x3a\xea\xe8\xad\x0a\x89\x79\xda\x8d\xc9\x46\x7c\x13\x4f\x17\x20\x70\x43\x54\xed\x80\x49\x40\x79\x33\x53\x95\xb6\xaf\x77\x27\x34\x3f\x31\x9d\x87\x4c\xcd\xbc\xc6\x75\x9f\x71\x9e\x4f\x93\x3a\xc2\xde\x60\x8f\xdd\x72\xba\x6d\x3b\x54\x50\x84\x7b\x75\x3f\x35\x82\x56\x1b\xa8\x5d\x7f\x95\xaa\xec\x7f\xfd\x3c\x9b\xa2\x8f\x89\x59\x58\xf1\x56\x56\x62\xbe\x02\x86\x71\xb5\x5a\xbd\x8e\x1f\xf3\x15\x34\x98\xfb\x51\x48\x81\xff\x4b\x48\x07\x00\x33\xe5\xbe\x9f\x77\xdf\x68\x99\xd7\xb6\x26\x9f\x0d\xa2\x3a\xc6\x95\xe0\xde\x27\x73\x76\xc5\x15\x88\xd4\xf2\x08\x75\x9b\xe2\xa2\x61\xbd\x43\xa0\x8e\x3c\x05\x97\x9d\xb4\x15\x75\x57\x5a\x80\xbd\x08\x51\x8c\x14\xf4\xd6\xf0\x13\xf8\xb3\xce\xe3\x14\x27\x26\x6c\x6b\x6a\x8e\x56\x37\xad\x7d\xc4\x62\xb0\x69\xfd\x2c\xac\x9f\x85\xd8\x8f\xc4\x3a\x39\x89\xa7\xac\x4d\xeb\xc1\xb4\xd2\xe4\x0d\x63\x66\x7e\xf6\x67\xd9\x13\xb3\x30\xdf\x93\xee\xe3\xce\x98\x41\xbe\x62\x43\x36\xc2\xc7\x29\x86\xba\x15\x25\x62\x07\x80\x30\x5d\x85\x0f\xe9\xae\x1d\x72\xf5\xf9\xf0\xf5\x7d\x2c\xff\x71\xfb\x8b\xfb\x64\xda\xf1\x07\xf7\x9d\x31\xef\x49\xec\x2b\x95\x7c\xcc\x63\xca\x89\x83\x2f\xeb\x55\xc9\x52\xd6\xc4\x5e\x02\xed\xae\x3a\x2a\x20\x68\x05\x8e\xd8\x31\x86\x36\xdd\xc9\xe3\x08\xfd\xbc\x08\xbc\xd5\x73\x12\x71\x5c\xf6\x93\x2c\xfa\x24\x57\x8f\x32\x7e\x9b\x37\x9c\x96\xbf\xd2\xe2\xc8\x3c\x18\x44\xc0\xa8\x7f\xe0\xf0\xa4\x0c\xad\x3c\x34\x79\xb0\xea\x2c\xf9\x61\x5d\x1c\xf8\xf6\x27\x5a\x9d\x3c\xac\x11\x65\x80\x62\x7c\x07\xc1\x05\x27\x6d\x2f\x08\xca\x00\x5c\xe1\xd5\x82\x9e\x74\xfc\x1e\x9a\x04\xfa\x42\xa7\xee\x25\x50\x02\xe6\x70\xca\xd6\x76\xb0\x62\x3e\x46\x41\x67\x31\xd4\xb4\x87\xe7\x81\xd8\xeb\x51\xbb\xd3\xa5\x18\x09\x0c\x06\x55\x21\xd0\xd4\x53\x64\xd6\xc8\x95\xe3\x27\x8e\x0b\x4b\x26\xf0\x57\xb9\x9b\x99\x54\xa0\xbf\xbc\x5a\x04\x90\x36\xa1\xfe\x4c\xae\x84\x44\x72\xdf\x8b\x29\x2c\xfb\x30\xe0\x1b\x7e\x3d\x5a\x89\xbd\x4e\xcb\xaf\x7b\x41\xd0\xab\x3a\xee\x13\xfa\x4a\x48\x08\x88\x9a\xd6\x8b\xbb\xe6\x12\x2d\x23\x30\x38\x46\x14\xd4\x0b\xb8\xca\xd4\xa1\x07\x30\x71\xf5\x69\x51\x2c\xcb\x38\x48\xaf\xc8\x80\x7c\xe2\x00\xa4\xd6\xb9\x60\xbd\x72\x9d\x28\x76\x5c\x21\x77\x5c\xc2\x07\xc7\x58\x47\xa3\x50\x3f\xd4\x0a\x85\xb9\x93\x70\xc4\xdb\x41\xcb\x0c\x32\x4a\x0a\xb1\x3a\xe5\xdc\x88\x96\xce\x1b\xc9\x38\x76\x00\x93\x75\x6f\x9a\x42\x2d\x4b\xf6\x0f\x91\x34\x3b\x49\xb7\xd9\xf4\x37\x9c\xa4\x2b\x3a\x09\x81\xe9\x00\xeb\x55\xbc\x7b\xb0\x9c\xc5\x65\xd6\x54\xd2\x44\xb8\x62\x36\x92\xda\x68\xd4\xb1\xea\x4c\x85\x72\x15\xca\x3a\x4a\xe3\x84\xec\x5f\xb1\xcf\x4e\x96\x9d\xb5\xc3\x65\x67\xed\x90\xf8\x3f\x82\x2a\x8a\xbf\x26\xc5\x5f\x57\x96\x9d\xb5\x2b\x41\x1e\x8b\x4b\x87\xa1\x46\xf8\x1c\xfc\x79\xb8\xec\x34\xa3\xe8\x10\xfe\x37\x97\xce\xff\x29\x8b\x8d\xd5\xbd\x63\x5d\xb1\x29\xd9\x1f\xb0\xec\xd1\x5a\x2f\xe5\xee\x9b\xad\xe9\x29\xbc\x86\x5d\xb1\x30\x7b\xd2\x91\xfc\x08\xd3\x53\x4e\x0d\x6f\xe1\x7c\xc9\xcf\x60\x02\x25\x84\x38\x27\xb1\xec\x51\xe8\xec\x47\xe9\x23\xba\x44\x93\x87\x30\x9b\x0d\x8a\x44\x19\x09\x18\x0b\x71\x10\x47\x51\xaa\xc2\xae\xb2\x1c\x10\x31\x9a\x80\xa8\xae\xcb\xab\x69\x99\xe0\x74\xd4\xad\xdc\xa4\xa7\x37\x89\x3a\x60\xba\x12\xc6\x99\xe5\x05\xa1\x5e\xc8\x7d\x7b\x58\xa1\x20\xb6\x5f\xbd\x47\x4a\xbe\x67\xed\xb9\x29\xff\x40\xd8\x6d\x67\x79\x15\x24\x0e\xd3\x0c\x36\x53\xb3\x8a\x39\x5e\xea\x04\xdc\x13\x5b\xfe\xcd\x42\x3c\xc5\xd9\x0b\x6d\xee\x85\x49\xb6\x6f\xab\x0c\xad\x2c\x53\x23\xcb\xd1\x41\x67\x88\x58\x56\x5a\x01\x51\x28\x4e\x25\x19\x42\x15\xae\x0d\xb5\x44\xa5\x24\xc6\x82\xdb\xfe\x4a\x2b\x25\x95\xa9\x87\xc9\x2f\x2d\xac\x50\x61\xeb\x08\xb2\x1d\xa6\xbe\xaa\xe2\x7a\x2b\x0a\x64\x45\x57\x20\xe0\x54\x96\x21\xeb\xb4\x8d\xe8\xee\xfb\x54\xbb\xdb\xee\x97\xdf\xb4\xba\xb7\x16\xe3\xcb\x18\x24\x1b\x09\x75\xbd\xe0\x2b\x30\x77\xc4\x32\xa8\xf1\x14\x90\xe1\xf5\x8c\xa6\x66\x9f\xde\x26\x8f\x92\xce\x81\xb5\x43\xd5\x9a\xa7\x82\xf1\xd7\x0e\x55\x9b\x51\x74\xd0\xb9\x95\xef\x6f\xc0\x81\xb2\xdd\x06\x02\xdb\xa8\xcd\x53\x20\x94\x15\x22\xf1\xa8\xf3\x28\x3a\x05\x38\x07\xf8\x06\x40\x2b\x67\x0a\xf1\x41\x31\xfa\x87\x8e\x4c\x4e\x4e\x82\xac\x58\xf0\xbc\x25\x9e\x38\x07\x4e\x75\x78\xb8\xd4\xf2\x9b\x69\xd9\x99\xe1\x7e\x72\x90\xf0\x49\xe9\x03\xb8\xa6\xb2\xd8\xc2\xc3\x93\x93\x93\x89\xb1\x82\xff\xd0\x62\x3f\xe7\x87\x89\xd0\xb0\xf9\xd2\xaa\xdf\x59\x3e\xb1\x74\x46\x68\x19\x3d\xfb\x3d\x96\xfb\x26\x6b\xae\xe8\x96\xd4\x4d\x12\x67\xf9\xc4\xd2\x96\x0a\x0a\xba\x8c\x0a\x74\x22\x6d\x0d\x65\xba\x6b\x92\xc6\x51\xb8\x12\x40\xd9\xf5\xa8\x2b\xb4\xc4\x46\xd5\x71\x9e\x14\x75\xe5\x0a\xe8\x26\xb8\xaf\x65\xb2\x45\xd9\x09\xb4\x30\xd5\x1f\x94\x98\x54\x8b\xec\x6f\x95\xd8\x2d\x85\xaa\xe8\x4e\xb4\x43\x52\x03\x33\xef\xc9\xcb\x4b\x74\x89\xfc\xc4\xfd\xa1\xdf\x78\x57\x45\x3a\x67\x62\xac\xea\x38\x73\x94\xb5\xa1\xe3\xbb\x40\xb8\x63\x9c\x3a\x57\x5d\x75\xa5\xdc\x9f\xb5\x4f\x84\x7e\x50\xa6\x74\x0f\x5a\xe4\x1c\x8f\x01\xa2\x43\x65\x60\x84\x12\x53\x5a\xa6\x16\x9e\x15\x1a\xa0\xa3\x8a\x1d\xd1\xd4\xe3\x70\xe6\x8b\x3b\xb4\xd5\xfb\xed\x8e\xe8\x7e\x1e\x70\xe9\xde\x81\xc9\x2d\xd4\xdd\x80\xca\x8a\x9d\x7a\x0b\x80\x6b\x61\x4e\x35\xbb\x41\xd3\x0f\x02\xa1\x79\x7f\xed\xb2\xad\x78\x20\x0f\x57\x33\xfe\x44\xfb\xfd\x97\xb9\x7f\x36\x0c\x0f\x64\xf6\xca\x96\xb8\xc0\x13\xd9\x33\x3b\x83\x02\xd6\xca\x86\xcc\x07\x49\xea\xa0\x73\x4e\x67\x10\x7f\x9d\x08\x22\x30\x81\xea\x09\x97\x16\x85\x05\x88\x37\xc2\x1e\x31\xf7\x80\xc7\xc8\xe4\xfd\xb8\x84\x7d\xa6\xa4\xd9\x14\x3e\x54\x3a\x5f\x9b\xc2\x8f\x2d\x9a\x1a\xe0\xe7\x26\xa2\x2a\xad\x31\xa2\x72\x10\x03\x09\x6a\x42\x0f\x7e\x53\x18\xb4\x92\x02\xca\xc5\x45\xd1\xbe\x0b\x51\xe3\x40\x72\x30\x93\xc9\x5a\x71\x6d\x2f\xf4\x56\xc4\x96\xf0\x93\x60\xc9\x38\x6b\x91\x29\xe3\xfb\x83\x48\xe7\xb6\x98\x75\x60\xbe\x78\xbf\x19\x84\x55\x78\xe2\x4f\x07\xf0\x16\xea\xb3\xed\x22\xb7\x5a\xd4\xab\xe2\x85\x8d\x0a\xc6\x3e\xb1\xcf\x67\x51\x57\xbf\x3f\x88\x6f\x6e\xab\xe6\x63\xd0\xd5\xaf\x97\x24\x39\x18\x79\xe2\x86\xe1\x4d\xd4\x5b\x0d\x2b\x15\x9c\x8c\x94\x88\x12\x75\x41\xcb\x04\x65\xad\xd6\x83\xad\xcc\x59\xf7\xc3\x46\xb4\x2e\x41\x36\xcf\x39\x38\xeb\x62\x76\xe7\xae\x15\x79\xd7\x8a\x7c\x71\xac\xc8\xe7\x87\xc4\x9f\xad\xb5\x7e\x18\x8b\xc3\x8c\x7d\x67\x4c\xcf\x54\xdd\xde\x90\x86\x02\xe3\xbd\x63\xee\x74\xf1\xad\x8c\x82\x49\x2e\xf8\xa1\x0c\x9e\x0d\x63\x97\xfb\xf2\x3e\xf6\x1d\x8b\x5d\x82\xf7\x66\xe3\x38\x8a\xed\xaf\x0e\x92\xd0\xc5\xb5\x86\x17\xdd\x37\x58\xcb\x32\x27\x95\x8b\x0b\x70\x62\xec\x8a\x35\xc1\x1b\x4e\x03\x33\x14\xf1\x43\x32\x9b\x4b\x9c\x88\x29\x7b\x4a\x4f\xd0\x07\xf5\x0a\x42\x4d\x28\x01\x95\x44\x0f\x07\xf8\x27\xd0\xdf\x03\xae\x26\x6a\x41\x91\x55\x5e\xc5\x17\x36\x70\x41\x56\xa4\xf1\xb6\xca\xee\xcb\x4c\xb9\x0d\xfb\x4d\x96\xfb\x4a\x6b\xce\x30\xe1\x66\x51\x56\x06\x44\xbf\x32\x51\x3e\x40\xf5\x34\x34\xe2\x8f\x97\x98\xed\xa9\x31\x3d\x29\x35\x92\x77\x94\xdc\x97\x94\x4e\x77\x22\x9d\x4d\x80\xbe\x42\x09\xf7\x05\x80\x0a\x68\xa3\x09\x7b\x86\x1d\x54\xb7\x36\x17\x55\x55\xcb\x55\xae\xa9\x9c\x42\x3f\x84\x00\x96\x5a\x22\xa6\x58\x98\x3a\xb7\x7a\x7e\x7a\x3c\x8a\xa7\xe8\xdd\xd8\x81\x1c\x34\xd0\x4f\x93\x07\xaa\xdb\x06\xe5\xe0\x89\x79\xde\xe0\x0f\xd0\x3c\xc7\x0f\x5d\xd0\x79\x5e\x50\xe4\x80\x79\xfe\xb9\x31\x76\x85\xd6\x9e\x9a\x97\xd6\x5b\x19\xe8\x52\x1c\x85\x8f\x8f\x6a\x10\x26\xf3\x86\x31\xf7\xa0\xf6\xbb\x08\x67\xab\x1e\x47\xa1\xf3\xb4\xa8\xb6\x45\x58\xcc\xb3\x76\x1d\xbb\x3b\xdd\x92\x5b\x32\x8a\xe8\x36\xf7\x11\x7e\x11\x8e\x2e\x8d\x88\x99\xed\x73\x98\x4d\xb2\xea\x96\x53\xb6\x70\x88\x77\x37\xff\xe1\x5d\xc8\x1f\xd4\x5d\xc8\x3b\x22\x3a\x2d\x08\xfd\x09\x1f\x98\xd0\x9f\x0c\x3f\xf7\x29\xdb\x6b\x2e\x47\xec\x6b\x94\xe6\x02\xb3\x25\x43\xe3\xca\x04\x40\x21\x04\xd7\xc7\x4a\x85\xa0\xaf\x2a\xf8\x1e\xc0\xd2\xed\xcd\x92\xfb\xd0\x19\x8a\x3e\xd7\x83\xed\x1d\x42\xfe\x07\x70\x05\x53\x76\x7c\x0b\x12\xe4\xf0\x86\xfd\x2a\xcb\x7d\x3a\x22\x31\xd5\x7a\x2a\x80\xde\x27\xbc\x75\x31\x6d\x57\xc3\x68\x3d\xac\x3a\x00\xd1\xf2\x14\x57\xd4\x66\xa5\x1e\x8b\x6e\x6b\xf5\x3a\x3c\x16\x8d\x3f\xba\x76\xa8\x3a\x59\xbd\xd6\x2d\x3b\x2e\xe2\xcd\xb7\xba\x35\xf1\xc0\x4a\x14\xad\x04\xfc\x36\x0d\xff\xbd\xef\x95\xa7\x0e\x88\xde\x9d\x62\xe3\x89\x7f\x27\x3f\xd6\x4b\x79\x62\x5f\x25\x99\x34\xfe\x0d\xe2\xa2\xdc\xa9\x6c\x87\x54\xd1\xd0\xa9\xf5\x10\x3e\x48\x33\xd3\x7d\xb3\x64\x84\x2e\xa2\xef\x5d\x2d\xd7\x9b\xa3\x24\x5d\x88\x62\x84\xcb\xb5\x3f\x58\x72\x5f\x66\x19\x97\xb4\xe4\x23\xcc\x2e\x8e\x9a\x98\x17\x8f\x54\xeb\x46\x54\x8f\x0c\xe8\x05\x87\x0b\xf9\xf8\x21\x9a\x1f\x12\x72\x21\x89\x1f\xcd\x58\x2a\x70\x58\x51\xf7\x18\x84\xa2\x64\x72\xc0\x2f\x37\xaa\x9b\xd6\x48\xdb\x0f\xc5\x7f\xbd\x0d\x63\x0c\x5f\x64\xb1\x69\xc4\x7e\xbd\x5e\x1a\xc9\xf7\xb7\xbd\x0d\x29\xd2\x80\x4e\xa7\x99\x25\x46\x97\x31\x00\x3d\xf1\xd7\xb8\xd9\x43\xb3\x08\x2c\x7a\xa3\x2c\xe4\x60\xdb\x0f\x35\x25\x37\x4e\x87\x2b\xe6\xf3\xe3\xec\xaa\x9d\xc2\xc5\x21\x81\xdd\xb8\xfb\x16\x2b\x77\xd1\x0c\x16\xd5\x6e\x4a\x0e\x67\xe9\xf5\xe0\x1b\x9d\x88\xcc\x9b\x45\x00\x3c\x9a\xbf\x18\xd1\xf7\x55\x46\x05\x9a\xce\x00\x2f\x45\x3a\x89\xc4\x0f\xdf\x7c\xbf\x0f\x8f\xee\x41\xf0\x1e\x6d\xb0\x9b\xd6\xb8\xb9\xcd\xc8\xa1\xf9\xe6\x5e\x76\x8f\x11\x13\xfc\x5b\x96\x7b\x73\x56\x27\x23\x82\xbe\xb8\xda\x59\x5d\xd0\x20\xa5\x55\xe2\x42\x00\xb9\x68\x3d\xba\xab\x44\xec\x50\x89\xb8\x8d\x19\x93\xc0\x3e\xe5\x1e\xd3\x7f\xcb\xa5\xd3\x37\xc1\x94\x4d\x3b\x3f\xd1\x9b\x91\x49\xfc\xb8\xab\x3b\x0c\x6f\x38\xb8\x75\xfb\xed\xf7\x2a\xfb\x70\x51\x18\x69\x6e\x20\xf2\x11\xa4\xaf\xbe\x94\x3d\xbc\x08\xae\x3e\xb3\xc9\xff\xe8\x41\xee\x93\x1e\x18\x9b\xf8\x7b\x2f\xd9\x5d\xa4\xbb\xc6\xb7\x8b\xa5\x7f\xbf\x4f\x77\xb7\xdc\x7b\xde\xee\x96\xbf\xf9\xe9\x72\xb7\x0c\xf2\xae\x7c\x5d\x7a\x57\xbe\x6a\x0d\xe0\x1e\xea\x17\x1d\xe0\x58\xb9\xe7\x27\xc3\xb1\x32\x84\xe1\xff\xfe\xcc\x8f\xf2\xf6\xd2\x80\x3c\x98\x82\x86\xa2\x0b\xe5\x87\xd6\x4f\xa1\x0b\x65\xfb\x8e\x3b\x6b\x2d\x6f\xbf\x3b\x1d\xb2\x27\x76\x66\xd6\x66\xec\xb9\xe3\x06\xc0\xfb\x36\xdc\xb2\xa0\x63\xff\xe9\x98\x7b\xba\xf8\x96\xf4\xc5\x93\xcc\xd3\x00\xd7\x34\xd8\xf1\x7e\x46\x55\x09\x06\x53\x68\x99\xfa\x87\xbd\xec\x57\xa5\xa5\x25\x71\x0f\x14\x32\x16\x15\x30\xa0\x0e\x0f\x65\xbe\x4d\x93\x77\xa5\xff\xf0\xd2\xff\x0d\xba\xf5\xe5\x95\xe7\x69\x7d\x39\x73\x91\x04\xed\xae\xf6\xb3\xc3\xec\x2a\xbe\xbd\xe0\x39\x66\x3f\xae\x58\xf0\x14\xcb\x89\x42\xfb\xd4\x57\x8e\xb0\x5f\x18\x64\x9f\xb2\xef\x3f\xe2\x4e\x4d\x49\x30\x5a\x48\x7b\xaa\x2b\x26\x3d\x9d\x31\xa3\x17\x75\x9d\x75\x2f\x84\xa8\xe1\xb8\x1b\x66\xec\x1d\x9d\x48\xa1\xc0\x1b\x22\xe6\x3f\x5f\xcb\xde\x6a\xb1\xf1\xc0\x6f\xf2\x7a\xaf\x1e\x70\x7b\xd3\x62\x8f\xda\x1e\x9b\x52\x3e\xee\x06\x88\xb0\xa7\x45\xfe\xa1\x22\x01\xde\x3b\x0a\x86\xa4\xc9\x90\x7a\xab\x60\x5c\x22\xee\x6a\x09\x99\x47\xd5\x57\x35\xc0\xac\xe3\xa4\x68\x5d\xb3\x57\x5a\x84\x9e\xfe\x22\xcb\xfd\x35\x1d\x11\x21\x2b\x27\x3b\x2f\x88\xb3\xc1\x79\x90\x08\x3a\x07\xd4\xbb\x07\xb7\x23\x14\xfc\x8d\x3d\x6c\x0f\x58\xb2\xec\x17\xec\x71\x5f\x30\xa2\xf2\x6a\xd1\xb8\xa5\xac\x2b\x4a\xb6\x69\x39\x6a\xb3\xe2\x16\x6e\x13\x10\x82\x05\x21\xbc\xe2\x00\x93\x68\x7b\xad\xe3\x35\x90\x2f\xd1\x0b\x0c\xc7\x57\x46\xb7\x48\x44\x61\x12\x83\x10\x86\x44\x37\x61\x76\x81\x34\xba\xd6\xcd\xb1\x40\x6b\x85\x79\x01\x44\x5f\xca\xa0\xca\x7c\x95\x66\x4e\xcd\x2e\x39\xf3\xa7\x96\x9d\x4e\x0c\x03\x84\x03\x0e\xf7\xa1\x59\x35\x2e\xde\xc0\x86\x36\xaa\xce\x14\x40\xf7\xc5\x12\x48\x04\x48\x6c\x92\x14\x81\x16\x29\xa8\x51\x22\x5c\xba\x93\x55\xf8\x9f\x2b\x5a\x09\xc8\xc5\x2a\x64\x5c\xc3\x1e\x91\x29\x7f\xe0\x29\x44\xde\x73\xd9\x9b\xd4\xf6\xe2\x41\x1a\xd6\xfd\xd0\xb7\xe6\x16\xa2\x38\x3d\x6b\x3d\x86\x3d\xd4\x10\x00\xa2\x15\x95\xb6\xd7\xa9\xac\xf2\x5e\x62\x3f\xdc\x7e\x58\x25\xab\xa4\x78\x83\x55\x9c\x4e\x1c\xa5\x51\x3d\x0a\xd8\x59\xcb\x61\x3f\xdf\xff\x36\x10\xfe\xec\xb5\x47\xdb\x5e\x87\x9d\xb5\x26\xb7\xc1\xf4\x7d\x88\x7d\x99\xf9\x81\xe1\x01\x83\xd9\xeb\x4b\xec\x32\x45\x58\xb9\x10\x47\x35\x6e\xbf\xa4\xc4\x7e\x69\xfb\x04\x6c\xf1\xa8\xfb\xdf\xac\x05\x1e\xfb\x51\xc3\xaf\x23\xd7\x25\xb8\xd2\xb2\x75\x46\xf1\x81\xaa\x7c\x24\x63\x37\x47\x4b\x82\xe5\xc3\x50\xc9\x37\xe4\xc6\x9e\x48\x23\x21\x96\xde\xf4\xfc\xa0\x70\xd5\xef\x34\x15\x5d\xcc\x85\x20\xf2\x1a\xc9\x44\x27\xc2\xff\x54\x94\x70\xb9\x5c\x35\xa0\x02\x5f\x4d\xd8\xcb\x4a\xec\xc1\x09\xa5\x77\x51\x92\xa9\xfd\xf7\x16\x9b\xdc\xb6\x93\x96\xcc\x97\xdc\x4f\x5b\x2a\x59\x55\x22\xab\xa6\x04\xfc\x49\x02\x50\x0a\xe4\x1d\xb7\x08\x8d\xe0\x13\xb2\x9a\x62\xeb\x12\x9f\x9c\x18\xb2\x9c\xd4\x4b\x56\xa1\xb4\xa6\xbf\xd2\x8d\x79\x45\xf4\x88\xea\x87\xfe\x52\xd9\xd7\x46\xd9\xa8\x17\xaf\x24\xf6\x97\x47\xdd\x0f\x8c\x4e\xc5\x2b\xdd\xb6\x84\x5b\x27\xf7\x6e\xdc\x83\x11\x24\xa4\x5a\x70\x54\xa0\xf3\x60\x7f\xe2\x4c\x9f\x9c\x51\x86\x65\xbf\xa9\x88\x86\xc5\xa0\x12\x1e\x4f\xa3\xea\x9c\xf1\x62\x1f\x92\x8b\x54\xf0\x6a\xe2\x5c\x71\xe0\xcc\xd4\x22\x20\x8a\x62\x0c\x31\xdf\xe8\x78\x10\x40\x8c\x80\xcb\x69\x8e\x54\x96\x87\x6b\x7e\x1c\x85\x6d\x84\xa8\x10\x87\xe3\x35\x59\x68\x5d\xcd\x21\xb1\xab\x07\x6b\x92\x10\x2d\x8b\x94\xa5\x68\x64\x3f\xec\x74\xd3\xbe\x54\x96\x10\xf1\x28\x08\x89\x52\xaf\x56\xd2\x0b\x53\x6f\x43\xe6\xd3\xf0\xa4\xee\x75\x54\x4c\x82\xd3\x88\xba\xe2\xe3\x57\x5c\x51\x76\x7c\x7e\xd4\xb9\x42\x7b\xb1\xea\xcc\xd2\xb3\x5a\x7b\x11\x98\x83\xaf\x01\x60\xba\x6a\x6d\xd9\x89\xf9\x8a\x17\x37\x02\x82\x70\xd7\x59\x69\x55\x03\xf9\x86\x2f\xb4\x5f\x42\xdc\x3f\xf7\x35\x83\x33\xc3\x0f\x85\x2e\x50\x11\x1a\x62\x45\xd3\x2d\x70\x01\xf0\x0a\xe1\x05\x57\x3c\x9a\x08\xda\xdc\xb9\x9c\x0c\x6f\x15\x4f\x3d\xe5\x87\x15\xaf\x92\xb4\x78\x10\x0c\xf0\x47\x7d\xdb\x30\xea\x7f\xf5\x9c\x81\x3e\x5e\x6f\x4d\x53\xbe\x91\x0e\xf8\xa1\xa3\x0b\x19\x14\xdf\x17\x40\xb8\xc8\x55\x84\x3d\x84\xba\x4e\x85\x92\x9e\x2a\xaa\x49\x5a\x17\xb1\x3f\xb2\xd8\x9e\x24\x6d\xf8\xa1\xfd\x49\xcb\xbd\xdf\xba\x55\x8d\xa7\x5e\x35\x29\x22\xbc\x00\xf2\xf9\xc4\xde\x57\xeb\x36\x9b\x04\x0f\x05\xaf\xcb\x39\x9b\xbd\x13\x77\x43\x0d\x29\x26\x5b\x66\x00\x8c\x2f\xe4\x32\x9d\xa6\xb6\x78\x1d\xe6\x9f\x17\xac\x7b\xbd\x44\x41\xbc\x87\xce\xec\xa9\xe3\x19\x89\xa6\x38\x8f\x79\x41\x92\xa3\x39\xfe\x98\xc5\x18\xb1\x92\xce\xf8\xb1\x7d\x9f\xe5\xbe\xd1\xd2\xb9\xb3\xe9\x9e\xd3\xf0\x63\x80\xc2\xea\x41\x0d\x43\xa5\x5b\x28\x82\xc2\xbe\xa6\xec\x4f\x94\x56\xa0\xa7\xe5\xc8\xd4\x2e\xcc\xfa\xa8\xc1\x8b\x28\xcb\x1a\xfd\xcd\x42\x76\xeb\x6d\x14\xb6\x67\x95\xd8\xa5\x81\xbf\xc6\xb3\x8d\xf1\x7b\xd6\xd0\x1b\xe3\x27\x07\x6e\x8c\xb2\xd8\xe2\xfd\x90\x50\xd3\x7e\x22\xb6\xbe\x17\x97\x24\x5b\xf9\xdd\x25\xf7\x87\xd6\x8c\x26\xc7\x89\x46\xfb\x7c\xe9\xc9\xf5\x68\x21\x3f\xc9\xd8\x6a\x90\x52\x21\x5a\x97\x09\x37\x81\x38\x95\xd1\xa8\xea\x07\x88\x34\x52\xf3\x21\x8a\x21\x6b\x28\x16\x8a\x61\x6e\xb0\x85\xc2\xe8\xc8\xa6\xcb\x44\xce\x40\x1c\x43\x03\x7f\x95\x3b\x33\xbc\x13\x44\x3d\xdc\xc2\xc4\xb9\x52\x23\x91\x35\x29\x72\x9e\x5b\x62\x0f\x86\x02\x17\xba\x41\x40\x60\x16\x3f\xb0\xdc\x6f\x58\x10\x1e\xe0\x74\xba\x41\x40\xfe\xe8\xaa\x73\x2a\x84\x61\x9f\x82\xe5\x53\x76\xe6\x85\x18\x2f\x3b\x73\xcd\xf9\x28\x5d\xc0\xe3\x71\xd5\xc0\x46\xc7\x07\xc5\xb0\x1f\xa5\x23\x6f\xea\xad\x18\x80\xf9\x65\xd1\x44\xbd\x00\xcc\x80\x5a\xf7\x93\xc2\xd9\x7c\xde\x63\x73\x39\x94\x24\x84\x77\x3f\x95\xfc\x37\x47\xd8\xbf\xd6\xf8\xda\x4f\xf2\x24\x11\xdd\x82\x5d\xf2\xd9\x11\xf7\x43\x23\x32\xea\xd0\x69\x45\xeb\x30\x93\x75\x7a\xf7\x36\x3e\xaf\x53\xf4\x4a\x1b\x62\x15\xd0\xdd\x70\x41\xc8\x7c\x1a\x50\x3c\x24\xfe\x71\xff\x57\xbd\xb4\x05\xf4\x04\x54\x44\xfe\xbc\x87\xc6\x4e\xf9\xc9\x28\x24\x8a\x16\x0c\x29\x84\x01\x27\x94\xab\xaa\x73\xdc\x0b\x82\x9a\x57\x5f\x5d\x8e\x4e\x44\x2b\xc9\xa9\x10\xe2\xe1\xcc\xba\x40\x58\x5c\xbd\xd5\x0d\x57\x73\xab\x3a\x5a\x71\xa2\x6e\x2a\xd4\x05\x5a\xba\x45\x0d\x6e\xfa\x98\x71\x88\x50\xd0\x12\xfe\x2a\x2b\x85\x6f\xf8\x5a\x10\x23\x86\xdf\xa1\x96\xa1\x97\x4f\x84\x9f\x68\xc5\x3f\x3c\x79\xd5\x11\x8c\xc7\x10\xf3\xe3\xc8\xa4\x13\x08\x6d\x9b\x24\x22\x27\xc6\x03\xc8\xec\x45\xc4\x93\x6c\xca\x89\x8e\xde\x4e\x0e\xde\x65\xb1\x91\x34\xed\xd9\x77\xba\xc1\xd0\x1b\xd3\xf2\xf2\x93\x60\x57\xf2\xd3\x84\x07\xcd\xb2\xe3\x05\x49\x94\xc5\x62\xec\x87\xdd\x66\xbf\x74\x40\xc4\x5d\xbe\xdd\x76\xf2\xc2\x12\xbb\x54\x27\x27\x4d\xec\x1f\x5b\xee\x6d\xc6\x95\xbc\xd1\x53\x67\x28\x4d\xe8\x53\xa0\x70\x4a\x44\xc1\x6c\xcb\xdf\x12\x15\x30\x53\x4e\x0e\xb1\x09\x56\xd9\x56\xf6\xeb\x84\xaa\x67\xad\xca\x36\xc7\xb6\x4b\xed\x4b\x32\xc6\xd3\x9d\x9c\xd9\xbe\x3c\xc2\xf6\xf1\x70\xed\x78\x1c\xb5\xed\xff\x38\xe2\x3e\x4f\x19\x13\x14\x5e\x99\xb6\x14\x34\x1d\x58\x29\x87\x49\xdf\x96\x88\x33\x4c\x1c\x58\x65\x30\x4c\x66\x17\xd2\xb9\x81\x21\xea\x69\xfa\xb6\xb9\x99\xd9\xf9\xe5\xb9\xe3\x73\xb3\x8b\x55\x67\x2a\x08\x1c\x3f\x84\x94\x58\x2c\x60\x10\x52\x1c\xe6\xdb\xe5\x76\x63\x4a\xae\xf6\xc3\x15\x22\xfe\xf1\x00\xcd\x9e\x34\x58\x3f\x74\xda\xdd\x20\xf5\x31\x79\x58\x91\x6d\x49\x92\x36\x2f\x49\xa2\xba\x9f\x05\xfe\xaa\x15\x4a\xd5\x86\xda\x80\x5d\xa9\x13\xf3\x3a\x6f\x08\xc5\x9a\x80\x24\xb3\xb6\x22\x4c\xf1\x6c\xb8\xa6\x14\xf5\x2e\xea\xb8\xd0\x27\x5b\x94\x71\x21\x4c\x09\xb3\x38\x8c\x08\x25\xc1\xbe\x66\xb1\x11\x1e\xae\xd9\x5f\xb1\xdc\x39\x39\xa6\xc5\xe3\x97\x46\x10\x4d\xdb\x3f\x8c\x83\x2b\xf5\x68\x76\x90\xed\x1f\xa6\x52\x67\xbc\x78\x78\x2e\xa1\x1d\x4c\xdd\xaf\x8c\xb2\x71\x58\xfd\xa7\xc2\x3a\xb7\x3f\x3b\xea\x7e\x70\xf4\x56\xed\xf4\xd2\xa7\xed\x29\x2b\x71\x20\x43\x8f\x50\x53\x15\xc7\xaf\x90\x07\x8e\xd7\x4c\x91\xcc\xb2\x05\xe9\xea\x1c\xa9\x3a\x64\x64\x98\x34\x86\x42\xc8\x30\xcd\x2d\xd2\x74\x13\x90\x3b\x5a\x89\x49\x1a\x73\xaf\x9d\x63\xce\x13\x73\xb1\x1e\x47\x49\x92\x4d\x41\x0a\xd6\x4e\x08\xe2\x1e\xf4\x56\xd5\x22\x49\x80\x24\x8e\xc1\x71\x97\x97\xb3\xaf\x51\xb5\x0c\x73\x2c\xcc\xfa\x72\xb6\x19\x88\x26\x07\x50\x25\xcc\xe0\x27\x8f\x06\x45\x3c\xe3\xa0\x8b\xf2\xb4\x44\x7c\xac\x69\x42\x55\x0d\x11\x1c\xb4\x93\x92\x07\x2f\x2b\x90\x8a\x82\xbc\x55\xb0\xfe\x25\x65\x0d\xc2\x17\x3a\x5a\xd6\x14\xba\x1a\x71\xb2\x64\xe9\x74\x49\x2b\x4e\x5f\xbc\x4a\x63\xcd\x4e\x19\xcd\x00\x35\x17\x10\xe5\x65\xc3\x4a\xd7\x89\x23\xb1\xeb\xca\xe8\x8d\xbe\x33\x88\x76\xe4\x15\x6b\xcd\x5f\x83\x2c\xfb\xc2\x23\x87\xb1\x45\x7c\x72\x84\xfd\x7c\xb1\x66\x60\xdf\x3b\xe2\xbe\x66\x24\x23\x64\x01\x6d\xc1\xc0\x2f\x86\x3d\x19\x28\x26\xfb\x10\x8d\xf7\x27\x85\xbb\xb8\x94\x71\x92\xbb\x02\xd8\xe2\xba\x61\x2a\x93\x06\xf2\x65\x64\x14\x3d\x55\xe7\xa4\x2c\x23\x7b\xd7\x17\xda\x4d\x96\x08\x5d\x8b\x7d\xde\x74\x9a\xbe\xd0\x83\x51\x79\x29\x2b\x4c\x06\x2f\x14\x22\x8f\xc7\x88\xee\x42\xe0\x9c\x54\xad\xaa\x73\x2b\xd5\x2b\x8d\xbb\x61\x5d\x77\xc8\x02\x64\x8e\xdf\x34\xb1\x47\xae\x9a\xbc\xee\x1a\x0a\xe4\x44\x46\x8d\x28\xf5\x02\xd5\xc6\x80\x87\x2b\xa2\xa7\x70\x01\x00\xbf\x99\x52\x10\x55\x07\x68\x6a\xc8\xa1\xc3\xab\x35\x53\xbd\x98\x68\xf0\xb5\x09\xad\xfb\x2a\x41\xb4\xb2\x9d\xba\xf1\x7d\x8b\x3d\x68\x4d\x23\xf8\xb1\xff\xca\x72\x6f\x5e\x88\x1a\x3a\x30\x32\x74\xf5\xf6\x1d\x3d\x58\x16\x4e\xb2\x2a\x2b\x0f\xb9\xa5\x43\x55\xce\x5a\xe5\x6d\x04\xe2\x83\x6c\x06\x55\xdb\xe9\x86\xfe\xff\x8d\xb2\x7d\x64\x1c\xb1\xff\x6e\xd4\xfd\xd2\xe8\xac\xb2\x9f\x39\x50\x5b\x34\xbb\x13\x89\x9e\xbe\x35\xb7\x78\x10\x14\x9a\xd8\x66\xe7\x97\x17\x9f\xb4\x70\x6a\x6e\x7e\x79\xd7\xd2\xb6\x6b\x69\x1b\x68\x69\xfb\xfd\x31\x76\xb8\x60\xe6\xdf\x84\x7c\x0e\xcd\xa4\x8f\x21\x01\x21\xb4\x5e\x30\xe6\xbe\xd0\x5a\xd4\xa9\xf2\xd4\x1b\xb4\x40\x41\xc0\x0b\x5d\x4c\x6a\xe6\x4d\x0e\x5b\x0d\xb2\x49\x44\x8d\xaa\xf6\x86\x5c\xdd\x44\xa4\x24\x51\x83\xa3\x75\x21\x6d\x5a\x7e\x47\x3f\xf2\x47\xb1\xb3\x34\x7b\xc2\x0f\xbb\x1b\x4e\xcc\x01\x40\x5d\xa8\x8e\x9b\xd6\xb8\x72\x1b\x6c\x5a\xa3\x1d\x2f\x6d\x19\x6e\xcc\xbf\xd8\xcb\x3e\x60\xb1\xec\x19\xfb\xed\x96\xfb\x5a\x6b\x56\xfe\xd4\x01\xbe\x55\x5c\x01\xc1\xa9\x78\x29\xa4\x26\xf9\x41\xa2\xd5\x58\xb2\xd9\x14\x0e\x2f\x25\xf9\x27\xd2\xd5\x7c\xf3\xec\xd4\xcc\x04\x41\xe0\x24\x13\xd4\xd8\x89\x15\x59\xd8\xc4\xe2\xec\xd4\xcc\xc9\xd9\x6a\xbb\x71\x39\xe2\x2f\x57\xbc\x4a\x27\x6a\xe8\xa3\xf4\xc6\x12\xb3\xb9\x5e\x59\x08\x51\xb6\x5f\x54\x72\xff\xc1\x6c\x04\x5c\xd7\x91\xd6\xf0\x02\xb4\x42\x45\x43\x67\xcd\x90\x65\x6a\x9b\xb7\xb4\xc5\x64\xa1\x63\x8e\xfc\x42\xf6\x81\x3c\x7b\x19\xc4\x90\x65\x9f\xa3\x68\xb2\x5a\xd4\x0d\x1b\xce\xc2\x99\xe9\x07\xa8\x97\x5e\x61\x31\x18\x79\xfb\xf9\x96\xfb\xab\xb0\xd1\x53\x47\xe4\x67\x9a\x23\x9e\x7a\x80\x2a\xf5\x57\x3a\x35\xde\x9f\x58\xee\x27\xac\x81\x94\x77\x7d\x55\x45\xa5\x40\xea\x17\x20\xe0\x62\x19\x57\xe5\x74\xc4\xf6\x2a\x75\xd1\x3e\xaa\xbd\x8b\xda\x42\x9d\xc4\x77\x9f\x11\x27\x35\x98\xe1\x01\xe3\xdb\xbe\xb3\xd7\x3d\x35\xe0\xbe\x1c\x38\x49\xb8\xa2\xe7\x00\xf7\x33\xd1\x68\xd8\xfa\x72\xbd\xbf\x70\x2f\xfb\x52\x0e\x5f\xff\x0f\x2c\xf7\xcd\x5b\xe3\xeb\x7b\xf5\xb4\xeb\x05\x5b\xc2\xeb\x67\x58\xfe\x5c\x4c\x68\x71\xe2\xf8\x27\x81\xd9\x7f\x25\xc0\x59\x75\xbc\xba\x9f\xf6\xec\xe7\x59\xee\x75\x8b\x26\x00\x21\x35\x23\xcb\x6f\xa0\xf8\x87\x6e\xd8\xe0\x71\x00\x4e\x7b\xa2\xa5\xb9\xd7\x7a\x2c\xbb\x61\x07\x51\x48\x55\xc5\xb5\x7c\x4b\xd7\x83\x04\x4e\x3d\xf9\xf4\xd3\x25\xc6\xea\x51\x88\x41\x08\x89\xfd\xfe\x92\xfb\x72\x6b\x9a\x06\x6f\x5a\x5e\x2f\x84\x12\x97\xec\x0e\x00\x94\xa5\x2a\xd9\xff\x98\x9f\x50\x08\x41\xcc\x13\x08\xf3\x49\xa5\x31\x21\x2b\x3f\x47\xea\xbb\x7f\x11\x1e\x5d\xc2\x03\xca\x7e\x43\x01\x9c\x66\x53\x03\x50\x20\x07\x4e\x61\xf5\xbd\xa1\x0e\xc9\x69\xaf\xb3\xa3\x43\xf2\x22\xdb\xd3\x69\x79\x09\xb7\xe7\xdc\xeb\x17\xc4\x1f\x5b\x91\x10\xc1\x53\x45\x10\xef\xd3\x7d\x54\x13\xff\x65\x8c\x3d\xb4\xa8\x75\x51\x03\x82\x16\x3f\x3a\xe6\x3e\x94\xfe\xce\x81\xc7\x47\x8d\x2d\x22\x0f\x3f\xb8\x9b\x13\xbb\xd3\x48\xf9\xd7\x28\x68\xfd\x57\x58\xee\x53\xb2\x10\xa0\xc6\x85\xfe\xbc\x3e\xcd\x0f\xb0\x5f\x62\x57\x6c\x3f\xcd\xa3\xc6\x6e\x28\xe7\xbf\x18\x0c\xfd\xb3\xd6\xa9\xed\xa3\x16\xcb\xf6\xa3\x0a\x31\xe1\x51\x4c\xe4\x23\xa5\x7f\x34\xc6\x1e\xa5\xa3\x0b\x20\x9f\xa9\x50\xcc\xc1\x29\x8a\x08\x78\x40\x47\x04\x02\xe7\xd3\x63\xee\x35\x7d\x57\x8b\x32\xf3\x15\xf8\x1f\x70\x0c\xf1\x2d\x84\xd1\x8b\x77\x85\xd1\x4e\x85\x51\x2a\x65\xd1\xaa\x7b\x45\x61\x82\xbe\x31\x3c\x26\x49\xc7\x11\x76\xcd\x20\x64\x89\xad\xc7\x7e\x57\xc6\x0c\x2f\x63\x3e\xa0\xcb\x98\x77\x9c\xa7\x8c\x69\x17\xcb\x98\x8b\x96\xab\xdf\xda\x5e\xbe\xcc\xda\xd3\x4a\xbe\x68\x53\x06\x3f\x9d\x89\x9b\xbc\x90\xc8\x0b\x9e\xbf\x67\xec\x11\x05\x99\x31\x9a\x0b\xdf\xfe\x73\xe6\xfe\xfb\x92\x76\xc1\x64\xf8\x27\xba\x5c\xc8\x1d\x87\xc3\x15\xf0\xae\xa1\xe6\xe9\x37\x00\xa9\x04\x68\x7c\xe7\xd4\xdf\x32\x91\x0a\x7c\x47\x5e\x72\x94\x39\x15\x67\x1e\x23\x4c\x8f\x3a\x2a\x06\x3b\x49\xc1\x3c\x34\x33\xbf\x04\x4b\xbe\x15\x25\x29\x84\x4c\x88\xa7\x89\x9e\xed\xa8\x33\x25\xa6\x6b\x28\xc9\xa8\x40\x6f\x4b\xc4\xe1\x99\xe6\x23\x6f\x54\xd9\x32\xd0\xb9\x65\x95\x5f\xe9\x7a\xb1\x17\xa6\x3c\x4b\x80\xc4\x64\x46\x19\xdf\x4b\x75\xee\x19\xd1\x3b\x6d\xaf\x63\x9c\xd4\x25\x3f\x9e\x7c\xd8\x3c\x3b\x7d\x71\x57\x9c\xee\x66\x41\x5e\x34\xc1\xf6\x04\x4d\xae\x3d\xf6\x3c\x73\x20\x59\x4a\x79\x81\xc1\x80\x78\xdc\x02\x99\x00\x79\x81\x47\xfa\xd2\x02\x65\x06\x60\xb6\xee\x95\x68\xf0\x15\x32\x69\x5a\x65\xef\xb6\x54\x9e\xde\x9b\x2c\x76\x78\x47\x5f\xc6\x44\xbd\x70\x3b\x33\xc7\x82\xfe\x51\xed\xfd\x73\x4b\xd1\x3b\x6b\x9d\xde\x5e\x22\x1f\xb6\x27\x0d\xe2\x8b\x8c\xf3\xc2\xc8\x5a\xd1\x2a\xc3\xd8\x67\xf6\xb0\xca\x60\xae\x8e\x29\x44\x47\x07\xb0\x0f\x2f\x6d\xd9\xbf\xb9\xc7\xfd\x82\x95\xbb\x68\x0c\x02\xa0\x7e\x48\xd3\x80\xb2\x28\x9c\x03\x02\x88\x0e\x00\x02\xa1\x74\xe2\x4b\x9d\x98\x37\xfd\x8d\x1c\xf2\x47\x1f\x0f\x50\xbe\x7e\x3b\x60\x01\xba\x7f\x04\x84\xa7\xf8\xd8\x02\x7c\x0b\x85\x67\xf6\x5b\x21\x69\xeb\xd5\x91\xb9\x31\x7a\xe3\x21\xe4\x02\x98\xd5\xa1\x2d\x7d\xd4\x7e\xb7\x3f\xea\xf6\xaa\xb3\x1c\x7b\x3e\xc0\xec\x26\x81\x97\xb4\x68\x73\x4a\x63\xbf\xdd\x96\x8c\x98\x04\x57\x2e\x65\x8e\xfe\x59\xf2\x96\x20\xce\x8a\x97\xb6\xaa\x8c\xcd\x92\x21\xf0\xa8\x73\xfb\x44\x33\x8a\x6e\x77\xd6\x55\x74\xcf\x3a\x5d\x2a\xe3\xbf\x13\xb7\x83\xf0\xc5\xbf\x6b\x5e\x7c\xbb\xf9\x86\xa8\xa9\xf6\x56\xe3\x76\x27\x8a\x9d\xdb\x27\x78\x5a\x87\xa7\x74\x89\x70\xb7\x6e\x21\x5d\x77\x7d\xa8\xb6\xe1\x48\xa7\xbd\x0c\x02\x02\xb3\x1e\x4a\xb0\x77\xf4\x96\x51\x17\x83\x6d\xd4\x6f\x82\xdb\x52\xf6\x26\xf8\x13\x09\x7b\x1a\xbf\x65\x46\x19\xfd\xee\x3e\xf6\x6f\xb4\xa9\x1c\xd7\xbc\xba\x9a\xc4\x4b\x5d\x18\x5d\xfb\x65\xfb\xdc\x4f\x59\xf4\x23\x33\x1f\x16\x20\x2c\x93\x18\x8f\x20\xaf\x26\xd6\x05\x8a\xe7\xc4\x51\x90\xb1\x88\x22\x43\x15\xca\x67\x5c\xda\x75\x2f\x74\xb8\x0f\x8e\xa6\x56\x24\xba\x9e\xc2\x64\x61\xe2\xa9\xed\x81\xbe\x07\x31\x81\x1e\xed\x2f\x4d\x70\x42\x85\x15\x4a\x19\x55\x4e\x63\xa8\x82\x18\xab\x0c\x25\x5e\x1c\xa4\x60\xc3\x2a\x4a\xf9\xba\x77\x0f\xfb\xb8\xc5\xc6\xbc\x8e\x0f\xf3\xdc\xbe\xdf\x72\xdf\x6a\x4d\x2d\xcc\xe1\xac\x17\x95\xca\x03\xcf\x2b\x54\x15\xaa\x56\x43\x6c\x40\xb8\xd1\xeb\x46\x69\xd7\x85\x3a\x12\x72\xf4\x54\x1d\x50\xe5\xe4\xa3\x39\x03\xb6\x0b\x03\xe0\x75\xd3\x56\x14\xfb\x77\x22\x32\x32\x6e\x44\x58\xc8\x69\xd9\x28\xac\x95\x2a\x24\x67\x7a\xc7\x5d\xf9\x2b\x96\xfb\x59\x0b\x76\xe5\xa8\x29\xfb\x50\x1a\x13\x65\x95\x8b\xc2\x82\x14\x38\x36\x61\x8c\xc4\xdc\x71\xc5\x87\xdd\xb2\xe3\xc2\x77\x5d\xd4\x40\x5c\xb3\x49\xae\x22\xb1\x98\xa2\xfa\xeb\xd4\x9c\x9a\x86\x22\x1e\x11\x15\x94\xda\x4c\xee\x15\x99\x16\x02\xa1\x54\x59\x3c\xa0\xde\xc4\xeb\x28\xdf\xed\x90\x7b\xc5\x7c\x1f\xc8\x7b\x7f\x1b\xf5\x57\x3f\x6e\xb1\x71\xe5\xb2\xb1\xdf\x6b\xb9\xf7\x58\x99\x83\xa7\x7f\x44\x15\x6e\xfc\x9c\xf1\x89\x55\xd2\x75\xc4\xc4\x53\xa5\x65\x01\x0b\xd8\x5d\xc0\x6b\xa1\x77\x18\x74\x2c\xce\x5a\x72\x48\x63\x10\xcc\xce\x3b\xe0\x3d\x63\xec\x6a\x7d\xcb\xed\xa6\x51\x52\xf7\xe4\xf1\xf3\x66\x51\x90\x58\xa7\xc1\x42\xd4\x98\xa2\x7b\x3c\x06\x23\xc4\x8f\xf7\xb9\x8f\x92\xa7\xdd\x96\x7a\x0e\x69\xe2\xd4\x93\x83\xf3\xaf\x3f\xbd\x97\xd5\x34\x75\xe6\xcc\xf9\x9d\xd2\xfe\xd5\x16\x96\xa0\x5d\x6d\x7c\x87\xda\xf8\x73\x94\xa5\xf5\x57\x77\x32\xc4\xc3\xbb\x07\x86\x9b\x65\xbb\xa7\x82\x1d\xe0\x0b\x05\xdb\x2b\xa8\x73\xf6\x4d\x59\x22\x75\x36\x02\x4a\x33\x1d\xb0\xd8\xf3\x66\x83\xe7\x8c\x1b\xf6\x4a\x3a\x3c\xd3\x70\xd2\x61\x1e\xa3\xd9\x41\x54\x7c\x79\xcc\xbd\xba\xef\xaa\xe9\x2a\x31\x6e\x0f\x96\x1a\xaf\xdd\x3d\x5f\xef\x74\x45\xc7\x72\x41\xfb\xae\xab\x50\x2e\xb2\xce\x97\x3d\x53\xb0\x90\x07\x1b\x2b\x07\x0c\xfc\xee\xea\x1d\xfe\x4c\xff\x39\xdd\x58\xf9\x91\xf3\x34\x56\xfe\xda\x45\x70\x88\xec\x84\xcb\x61\xc7\xe6\x4b\x6d\x12\xe5\xcc\x97\x7d\x32\x23\x2f\x87\x7e\x60\xb1\xc9\xa1\x7a\x67\x4e\xf4\xa5\x17\x08\xad\xc8\xfe\x88\xe5\x3e\x41\xfb\x8d\x21\xa4\xf9\x9c\x7f\x2f\x74\x7c\xed\x19\x38\x61\xb6\x3c\xd4\xb5\x7a\x3c\x95\xe0\xcb\xbc\x18\xf5\xe1\x97\xd9\x93\x49\xb1\x5c\x74\x67\x75\xe0\x44\x0a\xe0\xc5\xf2\x30\xfc\xb7\x13\x85\x94\x6f\x1f\xc5\xd9\x37\x71\x3d\xa8\xd9\x6f\xe8\x6c\x5f\x1d\x65\x8f\xde\x9e\x16\x42\xb9\xd9\xed\xb7\x8f\xba\x27\x0a\xae\x3b\x0d\xc2\x62\xcd\x70\xe2\x29\xbc\x8c\xb0\xdf\xe0\x10\x09\x36\xd2\x3a\x8f\xc5\x59\xcd\xc1\x60\xa7\x4d\x6b\x54\x4c\xe4\x4d\x8b\xac\x38\x46\xd3\x3f\x32\xc2\x5e\x69\x31\x3b\xf0\x92\x74\x39\xf6\xc2\x04\x3e\xb5\xec\xb7\xb9\xfd\x6b\xec\xda\x73\x98\xd7\xe2\x55\x77\x46\x21\x6a\x43\x0c\x1c\x05\x50\x52\x33\x52\xf5\x19\x99\x09\x1f\x85\x0a\xf6\x3e\x8d\x24\x0d\x5c\x95\x3d\x89\xed\xa3\xf0\x5c\x7b\xde\x9d\x9a\x72\x5a\xdd\xb6\x17\xc2\x71\x16\x6c\xcd\x32\x74\x97\x38\x3b\x25\x4c\xb7\x1f\x24\x1a\x0e\x44\xf6\x31\x63\x48\x8e\xb3\xbd\x31\xf7\x92\x28\x94\x2c\x9b\xf8\x4b\xb1\xf7\xa8\xda\xee\x4f\xa8\x1d\xc5\xe5\x9c\x50\x96\xb1\x63\xee\xd5\x4b\x06\xce\x94\x2a\xa2\x0c\xed\x8b\x9a\xce\x32\x1c\xee\x8f\x63\x98\xf8\xe9\x10\xd1\x6f\xf5\xd2\xae\x64\x30\x50\xf6\xa3\xdd\x47\x2c\xf7\x3a\xf0\x8e\x3e\xb4\xaa\x44\xe3\xa5\x97\x8d\xb2\x03\xc5\xa9\x99\x62\x80\x79\xc3\x88\x63\xfc\x6f\x23\xee\x15\x46\x18\x63\x47\x3e\xa6\x98\x45\x89\x3c\x75\x5f\x11\xfe\xe8\x9b\x46\xd8\xfd\x25\x76\x09\x85\xc3\x9d\x8c\x1a\xdc\x7e\x4b\x49\xe2\xbb\xbe\xac\x24\x2e\x38\x35\x3f\x95\x46\x29\xc8\x00\x80\x28\xaa\x06\xc6\x2a\x8b\x43\x26\xbd\x5c\x55\x0c\x91\xf2\x3c\x5f\xe3\xe9\x3a\xe7\xa1\x83\x74\x5a\x93\xd7\x5e\x7b\x6d\xd5\x99\xa1\x94\x59\x9f\x27\x32\x10\x58\x59\x75\x00\xbe\x34\x92\xf4\xd8\xda\x09\x36\xe1\x29\xe6\xd7\x80\x81\x41\x25\xc9\xfa\x90\x8e\xd0\x0c\xfc\x3a\x51\x1b\x22\xa3\x5a\x06\x4e\x60\x52\x6d\x43\x9c\x7c\x3b\x6a\xf0\x32\xa6\x4d\x36\x93\x9b\x90\x48\x52\xa6\xb1\x51\x8e\x30\x85\xe4\x62\x61\x6d\xd5\x03\x09\x4f\x4d\x1c\x5b\x9f\xc9\x2e\xb5\x7f\xc5\x7d\xa8\xa2\x04\xa4\x00\x3d\x1c\x86\x3c\x5a\xd5\xd5\xec\xca\x01\xb8\x68\x66\xd8\xf6\x82\x2a\x82\x7d\x77\x94\x5d\x33\xd8\x4c\xb9\xd8\x0d\xa7\x12\x71\x56\x5d\xa2\x88\x1c\xcc\x18\x48\xec\xfb\x46\xdd\x7b\xac\xad\xee\x9a\xa0\x72\x74\xcf\x11\x53\x96\xf8\x1b\x33\xa8\x07\xc5\x7f\x09\xc3\x6f\xbc\xd0\x6f\x7f\xdc\xf2\x7b\x83\x0d\x91\x9b\xd6\x68\xdc\x0d\x4c\x49\xfe\xfd\x12\xbb\xab\xc4\xf6\x02\xa4\x70\x62\xff\xc8\x72\xdf\x6d\xe1\xdf\x68\x29\x04\xee\x38\xe4\xaf\xa4\xcb\x51\xd3\xe9\xfa\x0d\x1a\x7e\x32\x31\x03\x19\xa1\x38\xf8\x03\x7c\x10\x68\x94\x30\x05\xd2\x88\x22\x17\x55\xb6\x4d\xd7\xa7\xc0\xac\xa4\xdb\xe9\x04\x5a\x1a\x0e\xa2\x3a\xab\x24\x2d\x72\x43\x69\x68\xcc\x55\x67\x51\x26\xe6\x0b\xa1\x23\x16\x03\x74\x83\xa1\xcd\x5d\xcb\xae\x66\x57\xee\x84\x2a\x7a\x6e\x06\xe0\xa5\xd9\x2a\x83\xae\xb1\xeb\xee\x19\xf1\x6f\x06\xbb\x2c\xc7\x4c\x99\x97\x1b\x7e\x3d\x95\x23\x04\x5d\x03\xb2\x55\x8d\x88\xa4\x0a\xd4\xbb\x07\xa7\x76\x26\x81\x5e\x34\xca\x2e\x2f\x98\x96\xf3\x51\x83\x2f\xf1\x00\xd6\xef\x32\x8f\xdb\xf6\xd7\x47\xdc\x37\x5b\x53\x4e\xd8\x0d\x02\x27\x8a\xc9\x04\x02\xb9\x1a\x09\x3d\x06\xe9\x27\x68\xe6\x04\xeb\x91\x52\x71\x1d\x94\xd1\x19\xd4\x01\x49\xd9\x36\x0c\xeb\xd4\xfc\x8c\x8c\x99\x5f\xa6\x40\x65\xfd\xc3\x38\x43\x7d\xa1\x00\xb4\xa5\x1b\xb4\x5b\x23\x4f\xa8\x68\x77\xbe\xa6\xa6\x89\xfb\x9d\x25\xf6\x9b\x16\x7b\x08\xd4\x6a\x76\x43\xc8\x4e\xe8\x73\xfb\x2e\xcb\xbd\x66\x4a\xe9\xe4\x66\x3b\x8c\xaa\xd6\xb0\x95\xb0\x95\xd4\x78\x60\x0e\xf1\x60\x40\xba\xa2\xbe\xd4\x10\x1f\xd8\xcb\x2d\x76\x09\x54\xec\xb8\xcf\x83\xc6\x39\xd5\x09\x22\xa0\x2f\x64\x9d\xfe\x76\x84\x1d\xdd\xca\x78\x70\x18\xb5\x9e\xe9\x38\x4a\x12\x3a\xfd\xa1\x7b\x4b\xb1\xf9\xd9\xef\x1e\x71\x6b\x03\xee\x67\x76\x68\x1e\x02\x4d\xb3\xae\x0b\xa6\x91\x13\x70\x44\xfd\x42\x1b\x74\xb3\x97\xd9\xf5\x62\x48\x82\xa0\xa0\xce\x01\xf6\xe0\x77\x95\xd8\x35\xc6\x71\xf5\x80\xfb\x30\x9d\xef\xd8\xb4\x15\xa6\x39\x4b\x0c\x9e\xa1\x9e\xe1\x76\xa4\xfd\x55\x7f\xf6\x31\x17\xef\x7c\x62\x90\x3d\x07\xa4\xcd\x36\xdc\x5b\xe7\x0d\x18\xf0\x2d\xaa\x51\x1c\xc9\xdb\x4d\x78\x5c\x59\xe9\xfa\x0d\x3e\x41\xbd\xe9\xf3\x38\xb9\x3c\x43\xfd\xa7\xaf\xdd\xb3\xc7\xe0\x1a\x54\xf3\xe3\xf8\x92\xa1\x7b\x3c\x73\x8f\xfb\x4c\x23\x87\x22\x74\xe6\x8f\x2f\x0d\x9d\x3e\x21\x9e\xbd\x10\x89\x13\x7b\x91\x6d\xb1\x28\x6b\xe2\xbf\x8c\xb0\x67\xca\x98\xfa\x0d\x77\x15\x33\xed\x49\xf3\xe7\x1b\x94\xe0\x4b\x39\x66\xa2\x3a\x92\xb7\xf1\x1c\x03\xa3\x65\x34\x74\xd8\x4c\x72\x86\xea\xcc\x3f\x74\xbf\x25\xf6\xe3\x41\x11\xf4\xa2\x22\x58\xb9\x0b\x1e\x3b\xbf\xe3\x46\x68\xfe\xa5\x57\x58\x8c\x7a\xda\x7e\xae\xe5\xde\x89\x16\x00\xb9\x0f\xc9\xf0\x10\x80\x78\x58\x50\x38\x67\x52\x1c\x5f\xb4\xae\xfd\xfa\xff\xcf\xde\x9f\xc7\x57\x72\x95\x77\xc2\xf8\xa7\xae\xd4\x2d\xf5\xf1\x06\x65\x87\x24\xc0\x0c\x35\xc5\xd2\x92\x91\xae\x5a\xdd\xc6\x4b\x1b\x6c\xcb\x52\xb7\x5b\xb8\x17\x21\xa9\x6d\x96\x10\x28\xdd\x3a\x57\x2a\x77\xdd\x3a\xd7\x55\x75\xa5\x96\xc9\xe4\xe7\x80\xc9\x90\x10\x20\x40\x20\x20\xc2\x00\x21\x38\x2c\x21\x0c\xfb\x92\x10\x82\x33\xc0\x24\x3f\x08\xcb\x24\x21\x4c\x12\x26\x2f\x49\x86\x4c\xf6\x37\x81\x40\xcc\x24\xf3\x7e\xce\xf3\x3c\x67\xab\x7b\xaf\x96\x5e\x8c\x49\xf4\x87\xdd\xba\xb5\x9c\x3a\xeb\x73\x9e\xf3\x2c\xdf\xef\xbe\xad\x14\x23\xe7\x08\x3b\x9b\x2d\xcb\x7a\xcd\xcb\x9d\xf4\x1d\xfb\xc2\xaf\xda\x4c\x99\x93\xf5\x1b\xfa\xb2\x65\xf6\x2b\xa4\x9b\x3b\xd3\x9c\xa5\x27\x56\x27\x27\xfa\xbd\x47\x9a\x6c\xdf\x62\xd5\x86\x59\xe6\x51\xb3\x99\x34\x90\x9b\x28\xd6\x6e\x41\x3a\x07\xc1\x2d\xf5\x28\x80\x42\x20\x1e\xdf\xd4\xc9\x19\x50\xb4\xdc\x5d\xef\xa3\x43\xec\x8f\x06\xd8\xa0\xbc\xe1\xff\xce\x40\xf8\xa2\xae\xbc\x7b\xcc\x1f\xb5\x58\xff\x89\x26\x9f\x52\x0a\x08\xeb\xab\xa0\xfd\x87\xd4\x1c\xb4\xe4\x41\x93\xc8\xae\x45\x3e\x7f\xd8\xb2\xe4\x5e\xde\x10\xad\x25\xf0\x47\x75\x08\x05\x30\x15\xcb\x40\xf3\x7b\x6a\xde\x70\x25\xf5\xcb\xdf\x91\xf3\x09\x26\x79\xb6\x3c\x66\xbe\xa5\x1b\x1d\x01\x81\x3a\x56\x7f\x44\xf5\x08\xfa\xa8\xe4\x04\x51\x87\x08\x7c\x64\xb4\xc7\x47\x48\x76\x41\xef\x1a\x7f\x28\x71\x40\xcb\xd3\x4e\x52\xf2\x96\xfd\x65\xd0\xa8\xcc\xc0\x6c\x36\x22\x56\x31\x1c\xca\x51\xa9\x82\xa0\x04\xcb\xfe\x71\xf6\xe8\x29\xb6\x49\x34\xc9\x96\x33\x7b\x8e\xf3\x9c\xfd\xde\x80\x42\x69\xfc\xec\x40\xf8\x9d\x9a\x8b\xd2\x58\x1d\xde\x56\x14\x3b\x68\x83\x04\x5a\xb8\xe9\x10\x03\xc2\xa4\x69\x8a\x1a\x66\xc0\xd3\xe8\x3b\xca\xe7\x31\xb6\x58\xf3\x4d\x46\x56\x3e\x70\x2e\xe3\xca\xf5\xc0\xf2\xec\x02\x8c\x2e\x08\x6b\x1a\xdd\x0b\x3d\xb0\x22\x2f\xd9\xab\xf7\xb0\x9b\x37\x7f\x67\x41\x1e\x57\x60\x9f\x8c\x52\x38\x54\x15\xd5\x83\xe0\xe7\x07\xc3\x0f\x7a\x5b\x3e\xb6\xc5\x89\xf0\x9c\x4e\x83\x5b\x7f\x74\x07\xf1\x29\x2f\x19\x60\xaf\x30\xe7\xc1\xfb\x6a\xe1\xc7\xb7\x3e\x0f\x16\x56\x05\x50\xb8\x17\xe8\x07\xde\xf2\x38\xd8\xfd\xe6\xc3\xf2\x74\x58\xd2\xe9\x30\x0d\x9f\xb7\xcd\xd3\xe1\x9a\xbc\xd2\xa3\x5f\x4c\xbe\x35\xce\xe6\x0a\x08\xa4\x73\x4c\xfc\xc2\x20\x0b\xfa\xfa\x22\x66\xe7\x6e\x4d\x45\xe3\x8c\xff\xae\xc1\xf0\xbf\x7b\xf4\xc3\x32\x78\x46\x41\x3b\xca\xcb\xa4\xd1\x49\xa3\x3c\x98\x9e\x9d\x99\x0f\x46\x8e\x9c\xad\x07\xe1\xe4\x0d\x07\xeb\x93\xd7\x5e\x5f\x9f\xac\x4f\x4e\x1c\xbc\x26\x1c\xd5\xea\x9a\x1a\x55\x72\xf7\x80\x98\xc2\xb5\x48\x61\x54\xce\xaa\x59\x68\xf3\xc6\xfe\x42\x3e\xa5\x0e\x34\x78\x9a\x54\x9c\xef\x59\x99\xaf\x5b\xb5\x91\x15\xa0\x23\x31\x09\x48\x72\x4a\x00\x85\x51\x6c\x92\xd6\x8d\x2c\xdc\xf0\x06\x1b\x49\x9c\x3b\x73\xf3\x13\x35\xd6\x60\x70\xd9\x7f\x4e\x78\x12\x5a\x65\x7b\x5c\xba\x7c\x2d\xb3\x73\x01\xf6\xcb\x1d\x80\x3f\xa3\x92\x18\x31\x4e\xa3\xd2\x13\x76\xc7\x7f\xd9\x63\x7b\xb1\x25\xfe\x67\xbd\xf0\x3d\xde\x11\x6c\x15\x7e\x2b\x4d\x30\xfc\x61\xdb\x6d\x8a\xb2\x1d\x55\x24\xa0\xaf\x91\x1d\xc1\xe0\xe5\x90\xd9\xd1\x26\x23\x12\x9d\x12\x80\x6e\x21\xcb\x4d\x76\x07\xac\x93\x4d\xd2\x03\x3f\x7c\x89\x33\xa5\x54\x00\xe2\x4c\xc4\x5b\x22\xa3\xc0\x47\xff\x55\x97\x84\x87\x9c\x2b\x7a\xbe\x57\x69\x11\xa2\x20\x86\xe7\xc0\xc2\xb1\xe1\x0d\xab\xa3\xf3\x86\x37\x5c\xf2\x56\x3b\x8d\x4a\xf7\xa4\xf8\x11\xc6\x5e\x55\x63\x57\xb4\x92\x4c\x6a\xe8\xeb\x0b\xbc\x21\xb2\xb8\xf0\xff\xc5\x53\x26\xd1\x3f\x07\x6a\xc9\x56\x92\x25\xad\x4e\xcb\x22\x6c\x29\xf0\x49\x58\xdb\xb8\xd1\x46\x41\xc6\xd7\xd2\x75\x6d\x2e\xd5\x15\xb6\x01\x53\x97\x30\x98\x6b\x1d\x86\x02\xbd\x1e\xeb\xb2\xb8\xa4\xb4\x11\xaa\x1a\x79\x54\xac\xc0\x2e\x89\xa8\x54\x74\x2c\x80\x40\xef\x18\x48\x2d\xa3\xd5\x28\x49\xa5\xbe\xe6\x1e\x04\x0e\x04\x23\xf2\x63\x6a\x88\x7a\xbd\x10\x44\x45\x50\x08\x91\xc9\x7f\x13\xf2\x88\x44\xf1\xfa\xa8\x6b\xea\xfc\x84\xc7\xae\xca\x09\xe3\xfb\x58\x22\x75\xf2\xf5\xe3\x49\x2b\x29\xfd\xfb\x75\xcf\xfc\x34\xf4\x8c\xe9\x11\x91\xc6\xc1\x0a\x3e\x0a\x58\xdd\xbc\x24\x5a\x7b\x0c\x83\xcb\x05\x22\x95\xd9\xf8\x55\xe0\xdc\xe0\x39\x80\xe2\x25\x85\x5c\x25\x9d\xa4\x58\xd1\x66\x64\x7e\xb6\x9d\x26\x8d\xa4\x0c\xee\xe1\xb9\x00\xb9\xea\x20\x2e\xba\x4d\x9f\x3c\xe0\xb6\xe0\x93\x35\xa6\x47\xdf\xff\x40\x8d\xdd\x72\x2e\x1e\x3e\x79\xe6\x54\xf2\x24\xfc\x5b\x6f\x0a\xcd\x3f\xc1\xdd\x1d\x9e\xaf\x03\x78\x1f\x05\x70\x82\xe1\x39\x57\x48\xe1\xfa\x84\x69\xcd\x45\xb4\x95\x83\xfc\x92\x92\x56\xe4\x31\xb6\x1b\x47\x09\xe1\xfd\x62\x08\x9b\x34\x51\x94\x4a\xee\x05\x6a\xea\x1a\xfb\xd3\x4e\x4f\x55\xb2\xae\xab\x09\x5f\x9b\x20\x81\x3d\x2e\xe7\x9f\x8a\xbb\x9b\xc0\x42\x27\x1e\x0f\xff\x8e\xab\x5e\x2b\xd8\x7d\x03\x4c\x2f\x1b\xff\x5b\xb5\x6d\x40\x08\xcf\x89\x78\x91\x5e\x80\x90\xe5\x07\x6a\x53\xca\xc5\xaf\x80\x09\x6c\x0f\x18\x34\xce\x8e\x93\xa5\xc5\x83\xb2\xdb\xac\x20\xb8\x4d\xaa\x07\x3f\x1b\x35\x80\x1c\x24\x93\x5d\xd7\x5e\xd7\xe1\x05\xb2\x30\x01\xc0\x5d\x39\x19\x25\xc9\xe4\x49\x47\x2b\x40\xb8\xd3\x1d\xe9\x5a\xd6\x46\x44\x5e\x79\x37\x69\x06\x99\xa8\x3c\x65\x83\x1b\x8e\x9e\x07\x94\xa5\x05\xe8\x38\x41\xee\x21\xd9\xa3\xe6\xf2\xe3\xdb\x22\x1e\x57\x95\x65\xaf\xf6\xd8\xe5\xe8\x2c\x57\x6a\x94\x7f\xaf\xb7\x35\x07\x86\x11\xa2\xa7\x9d\x97\xc3\x99\xa9\x8c\x9c\xef\x96\xc2\x20\xc0\x51\x15\x35\x08\x20\x44\xee\x58\x8e\x04\xa3\x64\x93\x8c\xaf\x61\x06\x28\xfb\x4b\x66\x7b\x82\x0d\x88\x74\x23\x4a\xf9\x6c\x57\xaa\x3c\x59\x90\x3e\xc4\xc2\x99\x4d\x9f\x70\x73\x5d\xac\xa4\x6a\x7a\x8b\x0c\x48\x1b\xde\xd0\x72\x54\xf2\xb5\x68\x7d\xc3\xdb\x8b\x00\x3a\x1b\xde\xbe\x82\x37\x72\x5e\xce\xf3\xa6\x23\xe3\x1f\xd8\xc7\x9e\xc3\x2e\x21\xbb\xc2\x9c\x10\xa9\x7f\x3c\xbc\x19\xb2\x54\xa8\x48\xca\x6e\x09\xe4\xbd\x9e\x00\x6d\xed\x5c\x94\x94\xe2\x17\x8b\x56\x94\x64\x55\xc4\x41\x86\xb5\x3a\x19\xb5\xb8\x5f\x84\xcd\x45\x8b\xbc\x2f\x52\x0e\xa2\x28\x45\xc9\xaf\xf6\x07\xa5\x6f\x51\x25\x08\x16\x5f\x6b\x3f\x5d\xd5\x48\x0a\xd7\xc1\xe7\xd4\xe1\xcd\x1e\xdb\xdb\x2c\x16\xd7\xdb\xdc\x7f\x8d\x17\xfe\x27\xef\xa8\xc6\x15\x42\x55\x5e\xa1\x10\xd9\x3e\xbb\x66\xe5\x19\xc3\x87\x48\xe2\x0b\x22\x97\xe9\xc4\x9e\x2d\x6b\x92\x1c\x50\xdb\xf8\xd9\xf2\x9a\x70\x2c\x08\xcf\x36\x0b\xf9\x4f\x56\x36\x8b\xd0\x81\xbc\x82\x3b\x76\x15\x9b\xec\x11\xa6\x1f\x67\xa0\x1b\xfd\xf9\xf0\xc8\x62\x85\xe8\x50\xf5\xc7\x9c\xe9\x73\x7c\xd8\xf6\xec\x2a\xa8\x5c\x45\x0a\x6d\x7f\xe7\xac\x65\x7b\x4b\xc3\x1f\xee\xb2\x93\x05\x23\xf2\xf6\xc4\x5a\x9e\x94\x7c\x14\x29\x7f\xfa\x5a\xe6\xf4\x4d\x72\x48\xca\x41\xb3\x20\x96\x0a\x37\x20\xfb\xf9\x8c\x15\x45\x7a\x04\x43\xfd\xfd\xf9\x70\xe6\x68\x1a\x2d\x03\x59\x02\x5c\x9a\x88\x93\x02\x76\xe0\x85\x85\xe3\x01\xd9\x89\x49\x73\x81\x21\xbe\x0d\x27\xf4\x98\x06\x88\xed\x46\x0d\x9b\x61\x6a\xda\xfb\x37\x84\x63\x8b\x6a\x8c\x2a\xd6\x37\xd5\x85\x70\xb0\xc2\xc7\xeb\x95\xe0\x17\xb3\x54\xfc\x8f\x6f\x13\x1a\x1e\x1f\x47\x13\x7e\xf8\x12\x4f\x5f\xb1\x61\x89\x54\xca\x16\xdc\xc3\xd0\x69\xaa\x8b\x0e\xe9\x46\x2f\x6b\xc1\xc1\x17\xbf\xca\x6d\xe3\x7f\x17\xec\xb3\xc2\x7c\x1a\x0b\x8e\x8b\x65\x44\xb8\xcb\x23\x83\x9b\xd0\x8c\x92\xb4\xce\x5e\xe5\xe9\xc5\x0d\xee\xec\x17\x7a\x61\xc7\x30\xc8\xdb\x10\x48\x2a\x89\xac\x89\x21\xe8\xb4\x98\xb4\x62\xb6\xb8\x92\x34\xce\xcc\xc9\x4f\x52\xf8\x9a\xc8\xe5\xb5\xcc\xba\xe4\xcc\xf0\xea\x3d\xbb\x8b\x4f\x31\x92\x4a\xfe\x91\xf0\xfa\xea\x14\x57\xf5\x50\x4c\x18\x45\x05\xfd\x99\xfa\xcc\x8d\x11\xd8\xeb\xe4\xad\x38\x47\x2f\x22\xac\x5d\x5c\x9c\x23\x93\x22\xe4\xad\x7c\x75\x4f\xd8\xa9\x5c\x33\x52\x05\xcf\x63\x60\x5d\x5e\xe6\x3a\xaf\x42\xea\x67\x70\x74\x9d\xcd\x1a\xa2\x25\xe7\x7b\x27\x4f\x7b\x24\x2d\x80\xae\xd3\x14\xf9\x5a\x94\xc7\xe6\x84\xa6\xde\xde\xf0\x86\xe8\x4f\x47\x0c\xff\xf6\x20\xfb\x05\x8f\xa9\x5b\xfe\xeb\x3c\x76\x78\x7b\x51\x6e\x74\xf2\xc5\x66\xdc\x8a\xaf\x87\xcf\xa6\x3f\x1c\xf3\x85\x1d\xce\x5f\xa1\x66\x70\xf1\xf2\x94\x6d\x47\xa9\x1d\x76\x5b\xea\xec\x17\x06\xc8\x83\xf0\x86\x81\xf0\x65\x03\x0a\x96\x27\xca\x80\xd5\x1d\x50\xc5\xe6\x4e\x2d\xcc\x3e\x93\xfa\x2e\x72\x02\xf0\x67\x8f\x1c\x39\x12\x2c\x94\x71\x30\x79\xe0\xc0\xa1\xfa\xe4\x58\x30\x92\xd4\x29\xaa\xae\x29\xc8\xd8\x24\x8f\xa5\xcb\x39\x6f\x4f\x74\xb2\xe4\x2c\xe1\x82\x8d\xc1\x84\x87\x0e\xe6\x79\x4a\x17\x47\xf5\x81\x37\x5a\x8e\x92\xac\x28\xcd\x08\x60\xf0\x64\xa2\xc6\x89\x42\xec\xea\x01\x41\x98\xa4\xeb\x52\xb9\x6f\x44\x1a\xbf\x31\x68\xac\x44\x79\xd4\x28\x79\x5e\x48\x5d\x5b\x1d\xae\x6d\xfe\x16\x72\x4b\x45\x69\x10\xca\x4f\x84\x70\x60\xc7\x2d\xec\xf4\xfc\xf1\x4a\x3b\xe7\x8f\x4e\x07\x87\x6e\xb8\xfe\xda\x3a\xe0\x13\x16\x0a\x6e\x75\x39\xc9\xd4\x64\xda\x3f\xb1\x9f\x30\x52\x2a\x18\xe9\x6d\x4a\xa0\xd2\x62\x39\x0a\x1a\xa0\xee\x82\x71\x97\x63\x9a\x89\x1a\xa1\xca\xdc\xb2\x97\xc4\x1b\x86\x1d\xfe\x66\x27\xff\x65\x1a\xd1\x80\xe6\x45\x8a\x4c\xc2\x7f\x3b\x14\x4e\x54\xae\xf5\xca\xde\xb7\x1e\x29\x7a\x46\xc2\xbe\x77\xef\x6e\x94\xe5\xf6\xa3\x2c\x9b\x56\x90\xe5\xb3\xcf\x2f\xc6\xf2\x31\x9b\x90\x38\xee\x06\x27\xef\x30\x38\x39\x55\xc1\xc9\x8d\xf0\x71\x3d\x82\x93\xed\x55\xb0\xfd\x58\xa6\x7e\xeb\xef\x41\xaf\xd8\x3a\x3a\x75\xce\x3f\xa9\xa3\x53\xfb\xe6\x51\x19\x1e\x32\x77\x25\xf7\x24\x20\xfb\xd0\x3e\xf6\x43\xa6\x76\xc6\x94\x3a\x2e\xe7\x17\xba\x26\xf5\x6c\x73\x1e\x30\x6d\xe8\x14\xa5\x68\x29\x1a\x8e\x69\xa9\x2e\x64\x33\xba\xed\xfe\xef\x0e\x87\xb7\x6f\xfe\x88\x3e\x2c\x92\xa0\xe9\xb4\x50\x89\xc5\xcf\x07\x60\x28\x6b\xe7\x09\x08\x09\x15\xd4\xaa\x23\x3d\x87\x9f\xbe\x70\xea\xe4\x5c\xd5\xbf\xfd\xc7\x43\xec\x4e\x76\x09\x1e\xa2\xc1\x94\xee\x1f\x0b\x6f\xb4\x7e\xe2\x40\x56\xc2\x2c\xed\xfb\x6a\xba\x63\x75\x1c\x79\xfa\xc1\x1a\xdb\x8b\xba\x98\xff\xce\x5a\xf8\x73\x35\xfc\x9b\xb6\x3e\x4d\x74\x70\xaa\xcd\x33\xa9\x58\xc2\x91\xc1\x4c\x05\xe3\x38\xa2\x92\xe1\x04\xbf\x5f\x36\x69\x7f\x60\x95\x04\xd9\x83\xc6\xa8\x0b\xb4\x5d\xeb\x81\x09\x4e\x50\xfd\x24\xb7\x85\xa2\x00\x31\x9d\x91\xa4\x2b\x74\x44\x88\x14\xaa\xf4\x5c\xa2\x76\x7e\x92\xac\xc8\xf2\xb0\xc0\xb9\xbd\x78\x56\x3a\x4b\xf5\x86\x68\x4d\x9c\x9a\x9a\x9d\xa0\xfa\x8f\x2f\xd8\xa6\xc3\x89\xa5\x54\x2c\x4d\xb4\x22\x39\xab\x26\x68\x2e\x15\x13\x07\xeb\x07\xe4\x12\x02\x6c\x4b\x90\x70\xd0\xc8\x96\xc8\xdd\x03\xc7\xad\x14\xaa\x71\x38\x84\x7c\xb2\x9e\x43\x00\x37\xcc\x01\xa6\xab\xef\x5f\x5c\x63\xc3\x0a\x3a\xc6\xff\xb6\xb6\xb1\x7d\xcd\xd3\x78\x32\x38\x0c\x64\xdd\xa2\x8e\xa7\xbd\x25\xe7\x69\x84\xba\x74\x4b\x1e\xe0\xa2\x4c\xa5\xc3\xe9\xd1\x80\xe0\xe9\x28\xc7\x8e\x07\x0d\xbc\xa8\x07\xc7\xc5\x1a\xcf\xc9\x80\x57\x90\xe7\x56\xdb\x0b\x89\xc6\x42\x7d\xbe\x1e\xe0\xe4\x76\xc3\xc8\x44\x2b\x29\xe9\x28\xab\x80\x75\x31\x19\xaf\x68\xf0\x2c\xca\x13\x51\x58\xea\x35\xa2\x3e\x44\x5d\x25\x3b\x56\xbb\x5f\xf2\x28\x80\xf6\xad\x5e\xf8\x1a\x0f\xa3\xbe\xa0\xe1\xdb\x9e\x76\x0f\xe9\xd0\xcf\x33\xbd\x4c\xfd\xa3\xe1\x0d\xea\x6f\x52\x08\x20\x5e\x2d\x90\x17\x41\xe7\x19\x0b\x92\x3a\xaf\x93\x7a\x24\x25\xaa\x54\xf9\xa2\xae\x68\xe0\x07\x87\xd8\x93\xfa\xc5\x9a\x1b\xe2\x0f\xd0\x6a\x3e\x3f\x14\x8e\xb8\x97\x5c\x41\x6e\xf1\x84\xf4\x4e\xec\xf9\xe5\xbd\xac\xa5\xf6\x82\x38\xfc\x0f\x3d\xe9\x58\xed\x42\xec\xdd\xe0\x1a\x76\x70\x6b\x0c\x83\x6a\xb5\x77\xb5\xa7\xed\x6b\x4f\xbb\x89\x9a\x0f\x3b\xcd\xe9\x41\xef\xb9\x5b\xeb\x32\x87\xfd\xeb\x7b\xd3\xa7\xba\x4b\xb5\x5b\x6b\x39\xc8\xd8\xaf\xee\x75\x16\xbf\x06\x37\x4e\xca\x79\xde\x16\x8e\x29\xf5\x95\x7b\xc3\x6f\xd5\x9c\x4c\x00\x85\xbf\x4a\x26\x44\xcd\x50\x63\x0c\x99\x36\x2f\x4d\x14\x2c\x27\xb0\x7e\x44\x91\x20\xa5\xd5\x6d\xf4\x7b\x27\x41\x7a\x3d\xde\x52\x8f\xf7\x88\xdd\x63\xcc\xc4\x5f\x1d\x0e\xa8\x55\x6e\x4c\x55\x3d\x58\x14\x68\xf8\x81\x19\xe8\x32\x66\xc2\xc1\x52\x55\x7b\x8c\x02\x0f\xa3\x2c\x38\xd2\x6a\x97\xeb\x33\x49\x8e\x20\xeb\x51\x16\xcc\x66\x49\x39\xed\x12\xc9\x36\x52\x61\xec\x04\x6d\x41\x71\x2b\xcb\x49\x49\x41\x21\x2a\x8a\x91\x57\x4a\x2b\x91\x65\x7e\xbf\x4d\xbb\xb6\xe1\x31\xd3\x71\x8e\x44\xfd\x4e\x8d\xbd\xb4\xc6\xf6\x69\xa2\x30\xff\x9f\xbd\xf0\x6f\xbd\xc5\x28\x5f\xe6\xa5\xa1\x0f\x53\x64\x54\xf2\xd0\x2c\x7b\x58\x1d\xd2\x05\xb1\x2c\x60\x53\xf7\xd7\xeb\xfb\x31\x6c\x61\x7f\x7d\x3f\x38\x1f\x3a\xa8\x3e\x11\xa1\x08\x0e\xb7\x29\x54\x59\x33\xe4\xcd\xea\xd8\x06\xa7\x14\xf5\xd2\x58\x90\x34\xab\xb4\x65\x54\x14\xba\x59\xa8\x2e\xdd\xa5\x28\x93\x75\xd1\x59\xb2\x3f\x4a\x73\x8b\x50\x9d\x64\xc3\x6c\x29\x36\xca\xac\xae\xf2\x1f\x13\x5e\x3e\x6f\xca\x3b\x3d\x7f\xdc\x7e\xf4\x16\x36\xac\x7c\x8e\xfe\x35\xe1\xfe\x69\xd1\x6a\x21\x55\xc6\x8a\x56\x9d\x0c\x17\xae\x7a\xd2\xf9\xd8\x2b\x6b\x3d\x33\x69\x16\x30\xe0\x7b\xaa\x09\xf2\x73\x7d\x1a\xac\x6d\xfe\x9f\x7a\xe1\xb1\x9e\x77\xba\xf0\x4b\x6d\x86\x3c\x8c\x2f\xc1\xd7\x82\x88\xde\xab\x40\xf9\x7a\xec\x25\x1e\x1b\xc6\x1d\x66\x76\xce\xff\x11\x36\xb1\x35\x49\x2b\x3d\x8c\x35\x08\x67\xd5\xcb\x2e\xe6\x6f\x77\x4d\xf0\xbd\x60\x76\x2e\x58\x8a\x0a\xb0\x7b\x55\x6a\xc6\x7e\x81\x39\x7d\xd2\xe3\xa0\x63\xe4\x92\xff\xad\x7d\xe1\x7f\xb5\x63\x24\xfb\xc5\x47\x9a\x57\xba\x23\x22\xa5\xcc\x9b\x20\x89\x36\x61\x1e\x44\xd5\x8c\xf4\x55\x1e\x15\x90\xfa\x63\x29\x56\xae\x25\xd8\xfa\x00\x5a\xcf\xe5\x57\x1a\x69\x94\xa3\xa6\x8b\xfb\x32\xbe\x0c\xc8\x43\x72\x7f\x30\x19\x77\x85\x3b\x20\x9f\xd8\xcd\x5f\xde\xc5\x07\x7b\x88\xac\x5c\xe7\x87\x0f\x16\xfe\x60\xc5\xce\x65\xe9\x6a\x3f\x4a\xd0\x61\xab\x9b\x18\xce\x37\x5d\xdd\x06\x44\xcc\x89\x99\xb1\x81\xc4\x96\xf8\x4a\xb4\x9a\x88\x5c\x5d\xb7\x96\x2f\xbb\x47\x67\x4a\xb6\xd9\x53\xcf\xb1\x06\x08\x26\x76\xe0\x84\x28\x60\x69\xa0\xa5\x5a\x2c\x81\x45\x24\xb6\xd0\xc4\x2a\xdf\x7e\xd0\x7b\xde\xd6\x7a\xd7\x53\xfd\xc3\x5a\xef\x32\xb5\xe8\xa1\x7d\xf5\xb4\x17\x7d\x67\x1f\xdb\x49\x94\x26\xa2\xc2\xee\x0b\x7f\xfe\x9c\x22\xca\xd5\x51\x6d\xdb\xa1\xe4\xf2\x85\xba\x2a\x23\x20\xcc\x86\xf3\xc2\x74\xf8\xf9\xa1\xdd\x35\xfe\x6f\x14\x2f\x60\x77\x33\xdc\xe1\x66\xb8\xa6\x6c\x24\xd9\x4e\xc1\x3c\x9e\xc6\x6e\x64\x37\x9c\x73\x28\xf8\x83\x5e\x73\x6b\xb1\x37\xed\x4f\x6d\x26\xf6\xb6\x40\x74\x20\xe9\xf7\x6b\xc3\x3d\x15\xe7\x19\xb1\x96\xad\x45\x79\x2c\x27\x07\x1c\x11\x8e\x26\x29\xf7\x5f\x39\x1c\x3e\xb3\xe7\x1d\x5b\x71\xae\x24\xf5\x59\x71\xe3\x90\x96\x4d\x6a\xad\xf6\x2a\x8b\x18\x63\xf9\x7b\x25\x75\xbd\x65\x88\xdd\xef\xb1\x61\xb8\x3f\xcf\x9b\xfe\xeb\xbd\x4d\x00\x52\x54\xd5\x71\x4f\x85\xa4\x4a\x1d\xc1\x17\xa9\x90\xec\xc3\x01\x5e\x2b\x20\x0c\x86\xa7\x3a\xcd\xaf\x2d\xe2\xc3\x98\x05\x00\x62\x07\xf5\xec\x31\x8a\xba\x1b\x43\x33\x2e\x04\x22\x1a\xe6\x98\xdc\x8a\x9c\xa9\xb3\xb7\xd6\xd8\x60\x4b\xc4\xdc\xdf\xd0\x59\xf5\xf7\xd5\x0c\x99\x5b\xab\x47\x7e\x3d\x25\x32\xa4\x7c\xcc\x22\xad\xec\x9f\x50\xdf\x9b\x78\x5a\x1d\x06\x4d\x5e\xbf\xc3\x37\xfd\x30\xcb\xa4\xff\xaa\xca\xd1\xfb\x5d\x2f\xfc\x8c\x67\x46\x45\x19\x4f\x5d\xb3\x36\x38\x8c\xed\x00\x0a\x45\x80\x67\x07\x0c\xea\xb3\x34\x24\x32\x15\x22\xed\x94\x90\x9c\x66\x1f\x67\xe5\x81\x5a\x31\xe9\x50\x4f\x77\xca\xe6\xf8\xf5\x01\xcf\x1a\x22\x56\x61\x87\xc8\x66\x08\x49\x2f\x3a\xeb\xd2\xae\x49\x4b\x7d\xa9\x72\x54\xb7\x25\xc6\xdf\x78\xec\x11\x4a\x94\x1c\x55\xf3\xf6\x2b\x1e\xbb\x76\xdb\xac\xf0\xee\xcc\xfd\xcf\x9e\x99\xb0\x7a\xef\x35\x30\x15\x68\x96\xa0\x99\x6b\xa8\x54\xc0\x28\x5f\x10\x37\x22\xed\xa9\x23\x78\xb1\xde\x68\x77\xc6\xe8\x81\x7a\x8b\xb7\x44\xbe\x3e\xa6\x1f\x92\x37\x9d\xb7\xe8\x09\xe4\x56\x6b\xe8\x10\x03\x6b\xde\xff\xcc\x60\xcf\x0c\xd2\x4a\x3c\xa8\xff\xd7\x03\xe1\x33\x2a\xd7\x2a\x21\xa1\x00\x14\x1b\xd9\x31\xd3\x2b\xd1\x2a\x47\x64\x50\x8d\x44\x21\xb5\x88\x28\xe8\x19\xd1\xfd\xd2\x01\xf6\xeb\xf6\x66\xfd\x7e\xef\x7c\x55\xf2\x7c\x13\xd7\xf3\x45\x02\x24\x67\x9f\xf2\x48\xd9\xff\x55\x8f\x8d\x6c\x27\xea\x16\x74\xfb\x57\x78\x3b\x52\xee\x21\x29\xf7\xc2\x36\x40\xd6\x79\x3c\xca\xe2\x71\x54\xe5\xd9\x6f\x5e\xea\xa0\x9d\x1b\x83\x0c\x44\xe7\xcc\x89\xbc\xf4\xef\xbf\x34\x3c\x64\xfd\x36\x06\x0f\x7b\x07\x81\x28\x6a\x78\x06\x92\x3c\x72\x80\xc4\x91\xff\x3a\x63\xff\x07\x97\xb0\xaf\x0d\x32\x56\x82\xb5\x0d\x0a\xff\xef\x83\xdb\x1d\xfd\x4e\x99\xa4\xf5\x24\x2b\x8b\x32\xaf\xcf\x66\xe5\xa9\x7c\x01\x56\x72\xf8\xca\xc1\x93\x14\xe2\x9e\x3b\x32\x48\xa5\xeb\x52\xb2\xa4\x9d\x4c\x87\xdf\x37\x71\x94\x54\xf3\x7a\x40\x25\x29\x29\x4f\x52\x09\x53\x89\x26\x65\x61\xd7\x3e\xe5\x29\x87\x9e\x52\x0f\x20\xe3\x5b\xef\x05\x59\x30\x3b\x75\x72\xea\x79\x0b\x77\x4c\x03\x21\xa0\x13\x25\xa7\x94\xf5\xb1\x20\x31\x41\xd4\xa9\x10\x67\x78\x1c\x74\xda\x40\xc0\x09\xb5\x8e\x9d\x8c\x35\xac\x60\xd5\xaa\x89\xc9\x77\x5d\x41\x78\xd5\x8d\x06\x36\x26\xea\x84\xfd\xf2\x95\xfd\x26\x0b\x0f\x12\x89\x46\xa2\xcc\x80\xba\xb7\xa2\xf6\x68\xbd\x42\x9a\x9f\x2c\x67\x42\xe5\x45\x51\xdf\x28\x28\x7b\x74\xec\xcf\xce\x3d\xed\xa4\xc8\x48\xff\x33\x1e\x44\xe5\x6e\x84\xd7\xca\x80\xdf\xdd\x41\xe2\xfd\x6a\x4d\x76\x9e\x73\x4c\x95\x18\xb7\x4e\x60\x74\x6d\xe2\xf1\xca\xd5\x3a\x1e\x8d\xd3\x35\xf6\xe2\x1a\xb9\x7c\xff\x8f\x17\xfe\x8d\xe7\x86\xf7\x25\x38\x3f\x6d\xac\x1b\x3d\xfe\xb8\x07\xeb\x3d\x7e\xe6\xe4\xc2\xf3\x8e\x4f\xdd\x7a\xe4\x38\xb2\x52\x53\xd6\xa6\x22\xcb\xa4\x35\x01\x22\x12\xde\x01\x39\xd8\xc9\x92\xbb\x3b\xc4\x5c\xa7\x0a\x8c\xda\x5a\x8f\xde\x7f\x12\x1d\xee\xd8\xd5\x99\x26\xc2\x83\x95\xa5\xa1\x38\x94\x3e\x12\x24\x4d\xdc\x32\x44\xc6\x03\x7b\x0d\x26\x26\xd6\x4b\x68\x1c\x71\x6c\x84\xbd\xcb\xbd\x6f\x80\x0d\x67\x22\xc6\x75\xfc\xb6\x01\xa5\xf0\xbc\x62\x60\x51\x2d\x10\x91\x05\x3c\x6a\xac\x60\x1c\xbd\xc8\x74\x08\x9e\x29\x50\x65\xe6\x17\x0a\xfe\x59\x9e\xc0\x9e\x76\x92\x4a\x95\x63\x7d\x5c\x44\xf1\xad\x51\x1a\x65\x0d\x9e\xd7\x83\xd3\x45\x27\x4a\xa5\x7e\x56\x14\xc9\x72\x66\x2d\x32\x8a\x4e\x9e\x75\x8c\xdb\xd6\xaa\x50\x7c\xef\xb1\x89\x52\xa5\x0a\x34\x83\x4e\x06\x33\x57\xe4\x01\x4f\x0b\x52\x2a\x2c\x01\xaa\x9e\x34\x51\xa7\x76\x1c\xa8\x14\x02\x9d\x52\x8c\x5b\x84\xf2\xb8\xd8\x28\x1a\x17\x5f\x56\x70\x50\x88\x8f\x4e\x05\x6a\xb8\x6f\x91\x9d\x43\xfe\xfe\x66\xb3\x56\xf6\xe2\xb8\xec\x75\x14\x92\x96\xee\x75\x3b\x03\xc1\xe9\x4f\xab\xe1\xaa\xeb\xd1\x72\x21\xcb\x69\x50\x0c\x26\x93\x9a\x00\x56\x61\x77\xb1\xe1\x76\x2e\x4a\xd1\x10\xa9\xff\xc3\xe1\x33\x16\x31\xc7\x4d\x5d\x32\xde\x79\x10\xd9\x90\x17\x0a\x93\x3c\x5c\x9c\x9e\x0b\xc7\x82\xf0\xf4\xcc\x9c\x06\x24\x9e\x5e\x9c\x73\x23\xc8\x17\xa7\xe7\x9c\xd9\xf6\xf3\x7b\xd8\xed\x24\xbd\x65\xb7\x8c\x47\xcb\xcb\x39\x5f\x8e\x4a\xe1\x46\xf2\xe4\x7c\x39\x81\xb4\x86\x44\x64\x06\xd4\x7d\x6e\x96\xfa\xdc\x80\xb4\x7d\x69\x30\x3c\xd9\xe3\x7a\x5f\x90\xb6\x2c\x30\x4f\x23\x48\x9b\x95\xd1\x08\xab\x6c\x53\x98\xb6\x3f\x19\x60\xd7\x51\x70\xc3\x44\x18\x2e\x52\x68\x03\x88\x63\x3d\x35\x78\x1f\x84\xb0\x57\xf6\xc6\x77\x7b\xc1\xb9\xe3\xbb\xdd\x72\xfc\x7c\xb1\xdd\x9e\x69\xb0\xdd\x4e\x84\xb7\x1c\xeb\xb4\xa2\x6c\x7c\xfb\xc8\x6e\x9b\x41\xb2\xfd\xb0\x86\x76\x5b\x0c\x6f\x3b\x0d\x02\x0f\x10\xd8\xc6\xd7\x44\x1e\x8f\x19\xdb\xcf\xb9\x42\xbe\x3d\x5b\x1b\x32\xe7\xc2\x69\x97\xd7\xa0\xe8\x0d\x00\x07\x66\x28\x88\x11\xdf\x0a\x00\xee\xc3\x03\xec\x56\x5b\xe1\xe1\x79\x89\xfa\x18\xb7\x02\xcb\xcc\xc5\x85\x64\x59\xee\x2d\xf3\xa8\x67\x9b\xb9\xf9\x77\x35\x9a\x4b\x2e\x27\x6c\x8d\xfd\x08\xbb\x5c\x36\x0d\x33\x7a\x60\x12\xdc\x75\xee\x93\x60\x42\x8e\x7f\x51\x46\xad\xb6\xee\x43\xe8\x37\x4a\x0e\x02\x39\x09\xa1\x35\x54\x2d\xb6\x60\xc6\xfc\x58\x78\x63\x1f\x34\x3f\xd8\xc9\xbb\x71\xfc\xe8\x2c\x81\x0b\xca\x45\x04\x57\xc3\x3d\x11\x86\xc8\x25\x5e\x19\xd8\xbe\xaf\x3e\x9d\x16\xd4\xad\xe1\x53\xd4\x33\x51\xbb\x9d\x8b\x55\x62\x22\xe7\x63\xd6\x69\x65\x0a\xee\xa0\x98\x9f\xe1\x59\x52\x09\xd9\x7f\xe5\xde\x9e\x26\x10\x4d\x6f\xea\x38\xdf\xff\x74\xcf\xf7\x16\x9b\xf0\x07\x06\xbf\xa7\xd9\x84\x77\x79\x72\xbf\x3b\x3c\xb9\x5f\xbf\x8a\x3d\xb1\xcf\x79\xd3\x85\x09\xf0\x3f\x7e\x55\xf8\x0d\xaf\xfb\x3a\x91\x2f\xb4\x45\x3c\x9e\xca\x33\x63\x50\xd0\xfd\x20\x2a\xf1\x38\xc9\x0b\xc2\xec\x68\xb5\x44\x66\x1d\x46\x28\xe3\xaa\xa8\x07\x0b\xa2\xc5\x09\xe3\x0c\xec\x0f\x51\x5a\x08\x8d\xf7\x91\x58\xef\xd4\x8b\x0a\x76\x41\x10\x80\x15\x45\x65\xae\x8b\x66\xff\x67\x83\x32\x3a\xc3\x65\xa9\x0d\x1e\x03\x48\x19\x64\xf7\x36\x2b\xaf\x77\x37\xd0\x75\x34\x7f\xd8\x67\xff\x6d\x80\x0d\x91\x79\xcc\xff\x55\x54\x89\xaf\xbd\x26\xbc\x7f\x60\x0a\xd5\x52\x29\x98\x7a\x41\x4c\x44\xa5\xc5\xac\x01\x99\x10\xba\xaa\x00\xb1\x43\x32\x03\xfa\x42\xcd\x1f\x88\x4b\xc4\xec\x6a\x39\xc1\x6e\xef\x2c\xf1\x14\x49\x48\x90\x84\x1e\xae\x1a\x21\x02\x9b\x5a\x54\xba\xd3\x4f\xde\xd6\x3a\x74\x5b\xc4\x87\x19\x9b\x44\x33\x98\x58\x03\xeb\xec\x6d\xb3\x33\x4e\x60\xc9\xd1\x05\xc4\xea\x38\x88\x4f\x15\xbc\x5c\x4e\xe2\x60\x09\x53\xc9\xe5\xb1\x6c\x24\xe3\x6b\x84\x15\x5a\x49\x75\xb4\xa3\x4c\xec\x4f\x53\x91\xa3\xc1\x21\x2c\xd3\xcc\x7d\x34\x1f\xca\x41\x3f\x35\xbf\x5f\xad\x91\xb5\xf1\x7c\x6d\x7c\x7c\x7c\x9c\x31\xcc\x2e\xe1\x18\xc1\xa3\xdb\x8f\xdc\xf8\xa2\x0c\x5a\x22\x56\xf0\x71\xa6\x17\xe4\x64\xb3\x16\x17\x6a\x76\xeb\x8a\x63\xd8\x51\x6e\xdf\x5a\x63\x2c\xef\x64\x53\x34\x9a\x3f\x53\x53\xa3\xf9\x2f\x70\xe6\x93\x3d\x53\x8a\x20\xef\x64\x24\x37\xcb\x7c\x1d\x25\x67\xd5\x30\xa7\x40\x88\xe5\xe9\x85\x17\xf2\x0d\xd8\x0a\x54\x9e\x5f\x42\xcd\xa8\x07\x27\xa2\x75\x9c\xde\x44\x09\x9c\x64\x5d\x78\x1c\x10\x0f\x44\xf7\x00\x02\xaa\xba\xe2\x64\x03\xbb\xe7\xa9\x7d\x78\x37\x41\x34\xdd\xe5\xc3\x3a\x28\xec\x85\x80\x9b\xb0\x61\x63\xe7\xb9\xdb\x4b\x1f\x1b\x60\x97\x42\x2f\x9d\x14\xd9\xbc\x10\xa5\xff\x8e\x81\x70\x63\xc0\x64\xe0\x69\xaa\x20\xd3\x1d\x70\x9c\x95\xfd\x86\xf6\x09\x91\x8d\xe7\x42\x94\x90\x23\x88\xe6\x87\x5c\x71\x8b\x38\x63\x4a\xc4\x40\x38\x0f\x93\x96\xd4\x35\xa2\x52\xf7\x26\xe4\x59\x16\x9d\x5c\x05\xc0\x59\x04\x44\xf4\xa9\xd3\xb3\x33\xc1\x81\x60\x44\x7e\x6b\x14\xba\x49\x1e\xe5\xe4\x7b\x68\xc8\x75\xeb\x98\x34\x55\x11\x2a\x8b\x89\xc3\xe6\xdb\x44\xdd\x2f\x13\xc8\x18\xa2\xc8\x8a\x2c\x2e\xe7\x36\xcf\x9b\x22\x6f\x81\x51\xfa\xe1\x37\x9e\x6e\xca\xea\xaf\xd7\xd8\xbe\x5c\x21\x85\xfa\xef\xd3\x33\xfc\xe7\x6a\x72\x86\x9f\x3e\x87\x19\x6e\xef\x55\x90\xf4\xe9\xd4\x0e\x47\x4d\xd3\x39\x26\x4e\x7a\xd8\xc3\xb2\xbf\xb6\x9c\xff\x2f\x1e\x60\x97\x17\x1c\x34\x32\x85\xbc\xf4\xf7\xb5\x6d\x44\x7c\x91\x16\x47\xef\x84\xbf\x06\x3d\xae\x54\xbb\x86\xaa\x0d\x74\x85\x95\x35\xe1\xee\x0c\xbd\x13\xec\xcc\xa8\xa8\xb5\xa1\xe9\xa8\xc8\x3e\x91\x47\x59\x2c\x5a\x5d\x5f\x93\x4d\x05\x73\x8d\x69\x6a\xf0\xbd\x32\x26\xec\xeb\x1e\xf3\x8b\x2e\xe0\x29\xff\x0b\x5e\xf8\x2e\xcf\x00\xaa\x12\xe8\x51\x25\x0f\x05\x5d\x3e\x0a\x2a\x5e\xce\xf7\x24\xab\xf4\xc4\x18\xec\xc2\xb1\x3a\x25\x0b\xb7\xa7\xf7\x17\x3a\x97\xe5\xb6\xd9\x19\xec\x10\x67\x5c\x32\xa1\x3e\xad\xed\x51\x31\xe5\xce\xca\xed\xc7\x9e\x5b\xc6\x7b\xfc\x7d\xec\x4a\x5a\x90\xce\x8c\xfb\xa2\xc7\x86\x8a\xf5\xa2\x51\xa6\x85\xff\x29\x2f\xfc\x49\x6f\x01\x7f\x28\xfa\x2d\x0d\x1e\xab\x9c\x94\x71\x40\x8f\xa3\x81\x56\x1d\xab\x40\xa3\x98\xd3\xd0\x0e\x9d\xcc\x20\x00\xa8\xe7\x47\x48\x33\xe8\x9a\x52\xa3\xe4\x4b\x54\x22\x34\x8d\x3a\x59\x63\xc5\xa9\xfd\x93\xd9\x28\xdb\xbf\xf5\x32\x80\x2f\xb1\xb7\x0d\xb2\x9b\xb6\x75\x70\xc5\xd0\x82\x29\xcc\x78\xbf\x75\x1d\xe3\x1f\xa7\x67\x67\xe6\xfd\xaf\x0d\x84\x2f\xf3\xfa\xde\x0e\x56\x78\xda\x2e\xec\x70\x93\x52\xc8\x83\x8d\x54\x05\x32\xae\xcd\x7c\x3c\xd7\xd9\xf4\x6a\xe3\x5a\x57\x26\xe8\x8e\x14\xfc\x31\x6f\x53\x8a\x2a\x99\xfc\x1b\xe6\x13\xe6\x0d\x64\xc1\xdb\xf0\x98\xb9\xbb\xe1\x5d\x56\xd8\x95\x73\x14\xc7\xfb\x6b\xec\x5e\x8f\x59\x4f\xfb\x79\xc8\x17\x15\x88\x12\x0c\x0f\x9a\x4e\x55\x2a\x54\x23\xca\x0c\x48\x4c\x02\x18\x9c\xf2\x70\x00\x49\xe4\x81\x3a\x72\x6f\xa3\x41\x55\x14\x09\xb7\x8e\xfe\xcb\xbd\xf0\x5e\x6f\xca\x86\x17\x20\x4b\xa0\x5c\x10\x45\x27\x41\xce\x58\x4c\xa8\x57\xdd\x5a\x05\x5d\x89\x96\xc4\x2a\x36\xa4\x6e\x08\xe3\xc0\x00\xae\x40\x44\xc7\xf4\x5f\x87\xe5\xfc\x1b\x93\xad\x01\x5c\x51\xf8\xe9\x54\xf1\xeb\x83\xce\x89\x24\xea\x94\x2b\x3c\x2b\xc9\xe1\x25\xe7\x87\xdc\xc8\x66\xb3\xa6\xf0\x3f\x3e\x18\x3e\x5b\xfd\xb0\x38\xe0\xba\x89\x27\xe4\x55\xd8\xa9\x32\xce\x69\x49\x6a\xa4\x69\x7d\xb3\x0e\xc5\x40\x7c\x4a\x33\x52\x66\x70\x35\x7a\x5f\x1a\x60\xcf\x60\x7b\x71\x7d\xfb\xb7\x85\x4f\x56\x1e\x81\xc2\x92\x38\xd0\x73\xc8\xad\xa7\xc0\xd0\x02\xd1\xac\x6f\x02\x8d\xf5\xcb\x1e\x1b\xe8\x24\xb1\x7f\xbf\x17\xbe\xce\x9b\x52\x96\x7f\x14\x97\xa8\xe2\xa8\xac\x39\xbb\xf4\xa8\x91\x0b\x39\xd6\x49\x8b\x1b\x57\x8e\xfa\x6e\xcc\x81\x41\x83\xb0\xde\xd1\x4d\x0f\xf7\x94\x11\x5d\x1e\xf9\x75\x12\x5b\x1c\xd3\x8e\x42\xa1\xe5\xe0\x80\x88\x93\x26\x42\x10\x4b\xed\xc0\x65\xaf\xfb\x21\x36\x2c\x0b\x03\xcf\xc8\x5c\x38\xad\xfd\x22\x50\x59\xac\x7e\xba\xde\xa7\xd6\x2d\x91\x2d\xc3\xe6\x16\x35\x30\xc0\xb7\x90\xdb\x9b\x5d\x7a\xc6\xf6\xf0\xb3\x65\x1e\xf9\x3c\xbc\x61\x2a\x5b\xd7\xb2\x38\x4a\x9d\x31\x55\x98\x11\xaa\x49\xd6\x0c\x11\x79\xfd\x9d\xde\x63\xd9\xa3\xfb\xf7\xb9\x35\xaa\xec\xa7\x86\xd9\xd8\x76\xe3\x1a\x21\x1a\xf0\x0f\xce\x37\x1b\xeb\x03\x7b\x77\x23\xb3\x76\x18\x99\x55\xa8\xc8\xac\xbb\x76\x98\xbd\x76\x98\x5d\xbf\x49\x30\xc6\xa6\x83\xbd\x1b\x37\xf9\xb0\xca\x61\x7b\xd0\x6b\x6c\x1d\x24\x77\x8b\x7f\xd3\xf6\x62\x83\xfb\x46\xc8\xfd\xe9\xa5\xce\xc6\xd3\x1f\xa1\xc4\xff\xd8\xa5\xe1\xbd\x35\xfa\xd1\x0b\x64\x22\xef\xa4\x9a\x0b\x1d\x8c\x37\x49\xb6\x24\x3a\x88\x5b\x9b\x11\x85\x08\xe2\x71\x45\x04\x57\xa2\xcd\xb6\x36\x02\x87\x05\xd7\x32\x95\x05\xea\x7b\xb4\xb7\x5a\x80\x32\xa5\x80\xd4\x1c\xe3\x69\x97\xed\x97\x4b\x39\x5d\x1f\x87\x4f\xc0\x16\xde\xc9\xd3\x62\x2c\x48\x45\x14\x07\x4b\xe8\x6b\x55\x10\x1c\x63\x01\xea\x48\xf2\xe4\xb0\xb0\x70\x7c\x2c\x10\x72\x03\x40\xc9\x8e\x39\x27\xab\x49\x5e\x76\xa2\x14\x36\x71\x39\xdb\x79\xd9\xa8\x57\x11\xb8\x76\xd7\xcc\xb6\xd7\xcc\xbf\x82\xf0\xa5\xcf\xaa\xf0\xa5\xdf\xf0\xfa\x7b\xa7\x36\x59\x43\x10\xcd\xf4\x9f\x3c\x1b\xea\x53\x05\x31\x69\x7f\xac\xbc\x48\x8f\x5f\xec\x28\xa6\x2f\x19\xfa\xf4\xcf\x78\x9b\xc4\xf3\x6e\xd2\x20\x4c\x7c\xf8\x09\xaf\x3f\x8d\xfa\x43\xdd\xa8\x5d\x55\x63\x87\xa9\xbf\xdb\xdd\x66\xba\xf6\x8e\x60\x6b\xde\x3d\x1a\x73\xc6\x7e\xb7\xe6\xb0\x03\xf7\x52\x44\x7a\xa3\x3a\xfa\x6f\xa8\x39\x32\xf7\xa7\x6a\xec\x8d\x1e\xbb\x2c\x17\x69\x9a\x64\xcb\xf8\xac\xff\x52\x8f\xdd\xba\x13\xa5\x67\xde\x7e\x5b\x7f\x38\x3c\x42\xd7\x95\xa3\x18\x77\x1b\x79\xa6\x89\x5a\x45\x3d\x98\x23\xdf\x8c\x46\x53\x5f\x6f\xf3\xe0\x69\x41\xe8\x94\x16\xd6\xd9\x5d\xe4\xbd\x5d\x0a\x4f\xab\xe8\x18\x83\x98\x4a\x65\x6b\xcf\x7b\xe5\x6d\x20\x68\x3e\x95\xcd\xc0\x81\xc6\x8d\x1b\x51\x57\x9d\xd3\xc3\xbb\xf6\xb1\xc9\xed\xd1\x68\xda\x94\x11\xdf\x1c\x0e\x3f\xe0\xf5\x25\x6d\xe8\x03\x6e\xad\x68\x89\x14\x82\xd5\x05\xc5\xb3\xd6\xa8\xf4\x06\x25\xd6\x22\x82\x00\xa3\x76\x17\x11\xc4\x7b\x86\xd8\xef\x2b\x22\x88\xcf\xef\x12\x41\x3c\xec\x88\x20\x36\x27\x6b\xda\x64\xaa\x02\x07\xc4\x17\x35\x07\xc4\x67\x76\x39\x20\x1e\x36\x1c\x10\xe7\x3e\xa6\x22\x2f\xd9\x7b\x86\xd8\xa3\xbb\xa1\xb5\xea\x0b\x1d\x58\xd1\xfe\x4f\x0f\x85\x9f\xf6\xe8\x87\xd5\x52\x83\x7f\xa8\x84\x0c\x29\xcb\x82\xac\x3c\x14\x95\x8b\x80\x54\xb9\x48\x79\xb0\x94\xa0\x2d\xd3\xf8\x9e\xeb\x81\x31\xd2\xf1\x04\x2c\x44\x64\x56\xc6\x9c\x7f\x40\x15\xd5\x4a\x38\x7d\x6f\x2c\x40\x48\x4d\xd0\xe2\xe5\xf4\xc9\x44\xa6\xd0\xa5\x35\xb3\xbe\x86\x00\x45\x9f\x37\x86\xb0\x6e\xc2\xe2\xf5\xce\x3d\x40\xa4\x14\xb5\x13\xf4\xbf\x7e\xc8\x0b\xdf\xee\x4d\xcd\xcd\xa2\xff\xd9\x58\xf4\x64\x85\xb0\x48\x97\x24\x0b\xec\xde\x1d\x52\x46\x6c\xb7\x54\x18\x22\x34\x29\x1e\x88\xa6\x1a\x0d\x08\xd8\xa1\x47\x2b\x2e\xac\xb0\x2f\x1a\x19\x16\x72\x5a\x35\x0a\x6b\xa5\x0b\xa9\x04\x8a\xe0\xd9\xe7\xcb\x5e\xf8\x9b\x9e\x62\x15\xa3\x3e\x5c\xe2\x88\xdf\xa8\xaa\x5c\x0f\xee\xc0\x70\x03\xeb\xa8\x07\x73\xd5\x34\x13\x40\xfa\xe5\x87\xc3\xb1\x20\x84\xef\xea\x20\x4a\xa7\x49\x21\xad\x11\x1e\x4c\x51\xfd\x79\x6e\x39\x45\x8d\x16\x25\x1f\x91\x15\x54\x1a\x57\xe5\x15\x12\x1f\x39\xc4\x92\x02\x0e\x66\x9e\x8b\xbc\xee\xc6\x70\x61\x40\xf4\x64\xf8\x04\x9b\xae\xac\x5f\x1b\x2b\x64\x59\xfb\xb4\xa7\xc2\xff\xa0\x17\xfe\xa2\x77\x52\x67\x57\x75\x8f\xa8\xd2\x2e\x55\xd3\xe8\x13\x67\xe8\x44\x29\x27\x9e\x2e\x6d\x4c\xcf\x3d\xec\x2e\x50\x1a\xec\x0e\x43\x54\x65\x98\xb5\x14\xed\x8e\x42\x6a\xe7\x1d\xf0\x2a\x57\xbf\xe8\xa6\xcc\xb3\xce\x64\x79\xd2\xc0\x63\x80\xff\x87\xc3\xe1\xcb\xbd\xee\xeb\x2a\x6c\x92\xbb\xa7\x04\x1d\x7a\x1f\xc9\x13\x5c\x9e\xe8\xd4\x19\x14\xbe\x46\x35\x55\x9d\x32\x02\x0e\x3d\x8c\x00\x1a\x0b\x56\x92\xb2\x18\x6f\xf3\x7c\x1c\xb9\x0b\xa4\xec\x8f\x8c\xe1\x00\x5f\x19\xad\x6f\x78\x7b\x31\x3d\x60\xc3\x63\xf8\x95\x93\x00\x4b\x77\x29\xd5\x02\x66\xa7\xb3\x4e\x7f\x76\x88\x7d\xd8\x63\x97\x46\xab\x3c\x8f\x96\x39\xdc\xf7\xef\xdf\x49\x8a\x6c\x5d\x73\xfa\x3d\xa3\x13\x41\xda\x40\xb8\x6c\x97\x56\x3d\x2d\x39\x29\x08\xf4\xa0\xfa\x49\x1d\x43\x56\x70\xb9\x9d\xe4\x3c\xe5\xab\x51\x46\x20\xe6\x23\x10\x72\x70\x37\x7d\x67\x94\xbd\xc2\x63\x4e\xcb\xfc\xff\xdf\xf9\x55\xfc\x16\xbb\xb0\x4d\x2b\x4e\x35\xad\x54\xa8\xce\x8e\x33\xab\xdf\xfd\x9b\xc2\x49\xf3\x4b\x95\x67\xe7\xa1\x50\x31\x49\x16\x80\x21\xa3\x1a\xeb\xfa\x2d\x9b\x06\xe1\x2f\x2e\x04\x0d\xc2\xdb\x6a\x36\x1e\x3e\x06\xcd\xca\x4f\x8d\x53\x12\x1d\xa0\xfd\xe1\x2c\x2d\x94\xe5\xc1\x9a\x9a\xc8\xa0\xa0\x8b\x50\xbe\x48\x44\x8f\xa1\xc6\xdc\x09\x8c\x3b\x5c\xef\xae\xce\x0a\x81\x0e\x1f\x23\xee\x8a\x76\x54\x14\x3c\x86\x38\x92\xcc\xf6\x08\xc0\x51\x84\x13\xb7\x84\xe9\x26\xe5\xbb\x32\xa0\x23\x8a\x41\xc4\x3c\xd0\x10\x6d\xa0\x1e\x86\x4a\x50\x78\xd1\x5d\x1d\xc2\xde\xb5\xc6\xc2\x4e\xaf\x04\x23\x5b\x84\x59\x8f\x58\x4e\x9d\xdd\xeb\x31\x5a\x49\xfe\x2a\x3b\xd6\x1f\x28\xad\x87\xa4\xd8\x84\x3c\x33\xbc\x9a\x92\x77\x8c\x59\x04\xce\x20\x31\x84\xca\x38\xcb\xbf\xce\xbe\x76\x99\xe3\xc2\xd0\x29\x86\xb7\xce\xf4\x81\xe7\x7f\xef\x65\xe1\x4b\xdc\xb0\xd6\xf9\x28\x16\x05\x71\xc5\xcc\x70\x08\x7d\xdf\x6e\x7c\xeb\xfc\xad\x33\x5d\x98\x50\x3d\x43\x5a\xa5\x24\xee\x19\xd3\x3a\xdc\x12\x59\x22\x8f\xea\x1b\xde\x1e\x88\x1c\x71\xe4\xce\x7d\x97\xb2\x57\x7a\x6c\x50\xaa\x15\xfe\x4b\xbc\xf0\x05\x40\x30\x0b\xd5\x45\x6f\x1e\x40\x2c\x59\xe7\xc2\x28\x6e\x25\xd9\x79\x44\x4e\xe6\x4b\xb1\x15\x33\xb9\x22\xd6\xc6\x4b\x31\xde\x29\xf8\x78\xe2\x30\x88\xbe\xbf\xa6\xa1\xf8\xdf\x5e\x0b\x37\x6a\x55\x28\x7e\x5a\xb7\x36\x58\x17\xb0\x52\x45\xe8\x92\x26\x98\xfe\xc5\xa4\x7d\x38\x38\x62\xc5\x33\xa9\xbc\x57\xbb\xa8\xa4\xd8\x01\x68\x3f\xb6\xe6\x70\x3f\xe8\xfe\xd9\x16\x92\xad\xa4\x64\x43\x25\xd3\xb1\x3c\x79\xc3\x0b\xdd\xb1\x3a\xe7\xc7\xeb\x98\x2f\x39\xc1\xb4\xf7\x7a\x0c\x87\xd8\x5f\x0b\xef\x32\x23\x89\xf1\x42\x84\x96\x75\x91\x07\xee\xa3\x1e\x1b\x3a\xc3\xd7\xe5\xdf\xfe\xbb\xbd\xf0\x4d\xde\xed\xf8\x43\x2d\x35\x48\xfe\x2d\x45\x70\x86\xaf\x07\x70\x5d\x0a\x91\xf9\x5b\x67\x4e\x43\xd8\x9a\x35\xd1\x26\x78\xd9\x98\x68\xf0\xf6\xca\x04\x15\x77\xf1\xeb\xfe\x73\x1e\xd3\x8b\xc5\x7f\x85\x17\x16\x53\x55\x64\x6b\xde\x5e\x09\xd4\x13\x17\xab\x3e\x7d\x5d\xd9\xaf\xf0\xd8\x60\x5b\x88\xd4\xff\x71\x2f\x5c\x37\xa3\x2b\x2f\x75\xaf\xd3\x7c\xa9\xf7\xec\xba\xa0\x1d\xf6\x80\x1d\xbc\xfd\x41\x2f\xbc\x7f\xf3\xe0\xed\x2d\x89\x20\x2e\x68\x8c\xf6\xa6\x6d\xb0\xa2\xf7\x5e\x58\xb3\x89\x1c\xbe\x71\x2e\x44\x0e\x9f\xb0\x88\x1c\xa4\x0a\x6c\x69\x16\x6e\x6c\x85\x4d\xea\xa0\x27\xfd\x6c\xd3\xf8\xdb\xc5\x2a\xcf\xf3\x24\xe6\x45\xa0\x67\xbd\x35\xa8\x59\x92\x5e\x9c\x0e\x61\xef\x19\x64\xcf\xbc\x90\x40\xcf\x0b\x9d\x25\x6d\xff\xf5\xbf\x34\x10\x3e\xab\xff\xed\x0a\x77\x22\xa8\xee\x90\xb2\xda\x88\x80\x4a\xd0\x7a\x52\x76\x9b\x5b\x50\x05\xa3\xec\xcf\x6b\xec\x3d\x1e\xdb\x03\xaf\xfa\x6f\xf3\xd8\x5d\xfd\x86\xf2\x82\xb6\x10\xa8\x26\xc2\xeb\xe0\x9f\x20\xe6\x88\xc8\x06\xad\xa9\x36\xa1\x57\x0b\xd8\xfb\x8d\x63\xe4\xed\x1e\x3b\xf3\xd0\x54\x19\x5d\x29\x37\xd0\x51\xc9\xa9\x34\x5e\xda\xaa\xd6\xdf\xf4\x7a\xb2\xdd\xcf\x89\x58\x2e\x73\x39\xa0\xc5\x6d\x51\xc9\xfd\xcf\x79\xe1\xe1\xea\x45\x17\x8f\xcf\x31\xb8\x20\x68\x81\x4e\x96\xda\xf0\x2e\xd3\x7f\x2f\x56\x33\xb9\x0a\x76\x37\x73\x6f\xfb\xcf\x0f\x17\xa6\xed\x0b\x58\xb8\x22\x48\xd0\xf9\x79\x89\xb6\xd8\xed\xb7\x32\xb3\xd0\x24\x07\x71\x62\x86\xad\x63\xbd\xed\xda\xc0\xdf\x5e\xeb\xcb\xf2\x8f\xb0\x83\x8a\xe6\xbb\x16\x76\xaa\x17\x1d\x2c\x73\x83\x3f\x01\x79\xbd\x0e\x2a\x21\xa8\x1a\x9a\xa0\xab\xe8\x2c\xa1\x79\x6e\x84\x9f\x6d\xa4\x1d\xb0\x35\x29\x2f\xe1\xa8\x4e\x85\x86\x43\x7b\x92\xba\x0b\xe2\x05\x6c\x9d\xed\xc3\xa2\x4f\x44\x6d\x3f\xdd\x04\xf5\x4c\x83\x28\xaa\xa7\xab\xb5\x0f\xcd\x2d\x74\x3b\x57\x06\xee\x24\x12\xe9\xeb\x87\xd8\x9b\x2f\xed\x09\x67\x51\x65\xba\xff\xa7\x4b\xc2\xe7\x9e\x2b\xbb\x3d\xe8\x52\x60\x9b\xb3\xf2\x14\x34\xcd\x3d\xa9\xf0\x2e\xb4\xc5\x25\xec\x3e\x8f\x0c\x2d\x3f\x12\x8a\x5e\xbc\xf0\x17\x98\x18\x0e\x2c\x29\x13\xdd\x7c\xf1\x2f\x77\x6c\x36\xf7\x7a\x61\xd1\xcf\x64\x73\x51\x6a\x24\xbf\x53\x4c\xd8\x15\xfa\x5d\x8f\x5d\xa1\xd6\xbc\xf2\x68\x7e\xd2\x0b\xdf\xaf\x01\x31\x82\xca\x5d\x9b\x0f\x06\x1c\x99\x6a\xf8\x20\xa1\x3e\x46\x94\xd4\x28\xeb\x9d\xe0\x76\x1e\xae\x45\xd9\x4c\xb0\x06\x34\xd6\xc7\x89\xef\x0d\x9c\xb2\x00\xbd\x2e\x0f\x64\x8d\xf5\x0a\xb7\x18\xc4\x00\xde\x13\xb6\x4e\xcf\xce\x3c\x34\xa3\xdd\x49\xdc\x78\x84\xeb\x1c\x3f\xf1\x68\xf8\xd8\xa9\xb9\x59\x1b\xd9\xce\xa9\x91\xfd\xe2\xef\x0c\xb2\x7d\xb0\xfa\x01\x1f\xfd\xd3\x83\xe1\x47\x06\x67\x89\x2e\x0a\xf4\x67\x94\x99\x09\x6f\x70\xc7\x73\xac\x68\x80\xe9\xa2\xec\xbc\x5c\xd9\xf9\xc8\x67\x40\x51\x23\xc6\xb3\x0c\x10\x3f\x11\x66\x63\x00\xe2\xfa\xc4\x6d\x82\x1c\x03\xe4\xc4\x02\x17\xbb\x3c\x6e\x1a\xa3\x20\x85\x14\xc8\x8d\x84\xd7\x5b\x51\x96\x34\x79\x51\xd6\x4d\x74\xfd\x73\x0e\x3e\xb7\x1e\x1c\xb5\x4d\x68\x89\x63\x73\x74\x26\x8d\x12\xd3\x16\x56\xb1\x4a\xdb\xa2\x4a\x23\xef\x30\xe4\x99\x89\x4c\x5b\xcb\xd3\xe4\x0c\x3f\x1c\x84\x52\x18\x58\x9f\x7e\x81\x1c\x8b\xff\x18\x06\x23\x6b\xa0\x8d\x86\xf2\x67\x68\xed\x08\x55\x2b\x50\xc3\xc5\x3a\x2e\xf3\x64\x79\x19\x70\xfc\x21\xfe\x45\x4e\xc0\x51\x29\x69\x90\xd4\xd0\x3c\xac\x42\x3d\x4d\xf4\x7d\xb5\x22\xcf\x39\xf8\xdc\x30\x18\xa9\x60\x30\x27\x59\xcc\xcf\x06\x07\xb5\x3f\xa8\x2d\x62\x05\xf2\x81\xc4\x45\xe0\x1c\x5a\x11\x05\xcf\xd0\x9d\x52\x0a\x0c\x1e\x2d\x44\x8b\x07\x6b\x3c\x4d\xc7\x95\x75\x7b\x2d\x02\x02\x47\xd5\x95\x68\xc9\xd4\xc4\x43\x99\x23\x07\x69\x5a\xdd\xa7\xcc\xe9\x3f\x12\x0a\x65\x4c\xdf\x72\x55\x5c\xf8\x30\x9d\xbf\xaa\x6d\x15\x1f\xea\x52\x56\xf9\xbf\x52\x0b\x67\xdc\x4b\xb6\x07\x39\x4d\xad\x30\x2f\x0c\xa8\x46\x9b\x98\x02\x9f\x80\xc4\x35\x44\xbe\xb9\x84\xae\xa1\x65\x56\xfd\x9a\xab\xc2\xe1\xfc\x96\xc7\x66\x99\xfd\xac\x7f\x38\x54\xe4\x07\xbc\xdb\x92\xd8\xcd\x9e\xe5\x74\xfb\x7f\x64\xf6\x87\xfc\xec\x7c\x81\x75\x2a\x35\x41\xf3\x50\xdf\x9a\xb0\x57\xec\xdd\x0a\xc6\x98\xfa\x76\xf1\xf8\x82\xff\xb5\x3d\xe1\x09\xf3\xb3\x82\xe8\x00\xa8\x00\xf0\xb9\x34\x5a\x87\x4c\x53\x95\x92\x5a\xe1\x5c\x34\xd6\x71\x77\x1f\xbe\x6f\x0f\xdb\xa8\xb1\x3d\x2b\xa2\x28\x0b\xff\xa7\x6b\xe1\x3f\x78\xc7\xe4\x9f\x98\x9c\xaa\x23\x4f\xe1\xb6\xe1\x5e\x26\xbd\x4d\x56\xc7\x02\x05\x40\xa7\x3e\x25\x98\x3a\xee\xd5\x0a\x0d\xac\x1c\xa8\x09\x97\xa9\xbb\x4c\x0b\x3c\xbb\xb9\x87\x4f\x79\x6b\x2d\x49\xe3\x46\x94\xc7\x68\x0d\x52\x67\x56\x9d\xe3\x2f\xa2\x98\x82\xfc\x72\xc3\x3e\x9b\x07\xcd\x4e\xda\x4c\x30\xb0\x03\xea\x41\x8d\x07\xb1\x97\xf2\x66\xe9\xd8\x7f\x36\x39\xed\xff\x69\x8d\x31\x3c\x2d\xc2\xa4\xfb\xdd\x5a\xf8\x99\xda\x82\xfe\xdd\xcb\x88\x4d\x67\x4b\x65\x4a\x75\x02\x0e\x2d\xc7\x6c\x70\xcd\x35\x87\xea\x94\xd3\x2b\xfb\x49\xd6\x49\x13\xd3\x68\xa6\x61\xf9\x4e\x2e\x3a\xd0\x64\x0c\x50\x14\x59\xb0\x70\x72\x56\x27\x19\x04\x51\x0a\x78\x2b\xe4\x41\x52\xb7\x30\xcd\x36\x85\x5d\x18\x3b\x06\xf0\xf1\x0a\x03\x71\x1e\xca\x71\x0e\x83\x15\x1e\xc5\x3a\x39\xb8\x43\x18\x29\x66\xb2\xcc\x77\x52\xf2\xa1\x99\x92\xed\xcc\x1b\x6a\x1c\x24\x20\x28\x9f\x9b\xea\x08\xf9\x01\x55\xbe\xfd\x12\xb5\xc7\x59\x90\x0f\x0c\xba\x2e\x27\x9b\x71\x03\xf6\xb4\x66\x27\xed\x0e\x13\xfa\xa9\xc1\xf0\xf3\x5e\xdf\xdb\x15\xcf\x93\xcb\x27\x0f\x4d\x32\x6f\xda\x53\x07\xcc\x25\x9d\x02\xd4\x69\xca\x7f\x54\x18\xdd\x40\x6a\x4c\xcb\xa0\x80\x64\xa7\x5e\x76\xfa\x22\xc8\xb8\xdc\xa7\x23\x64\x8f\x56\x65\x40\xfa\x05\x06\x19\xa9\xd9\xab\x6a\x18\xeb\xda\xb9\xab\xf3\x5d\x35\xb6\x42\x81\x45\xcf\x0f\x17\x10\x67\xc5\x69\x94\x6d\x85\xed\xdb\x11\x8e\xf1\xc2\x09\x3d\x72\xc6\xe0\xd7\xba\x42\xac\x7e\xc9\x63\x47\xb7\xc7\x8a\xe2\x94\x6a\x55\x44\xf3\xf4\x2e\x39\x4f\xe8\xf9\x50\x0a\x8b\x3d\x94\xdb\x5d\x08\xf8\x49\x0a\x59\x66\xab\xe2\xe5\x73\x75\xf6\x7f\xaf\x60\x57\xf7\xab\xe0\xb4\x1e\xdf\x79\x05\xcb\xff\x85\x2b\xc2\x5f\xdf\xbb\x0d\x7c\xf8\xee\x57\xfb\xe2\xc4\x4f\x74\x3f\xbb\x33\xa8\xf8\x5e\xdf\x52\xf9\x3b\x48\x9a\xd4\x6a\x75\x30\x51\xa9\xc8\xa2\x76\xb1\x22\x30\xf8\x09\x62\x2e\x31\x0c\x76\x9a\xb2\xaa\xa4\x04\xcf\x79\xd1\x96\xca\xb8\x4a\x6c\x2a\x78\x9e\x44\x69\x72\x0f\xa8\x26\xb8\x67\x5b\x57\x8c\x3a\x58\x38\x19\x89\x94\x96\xa5\x63\x19\xe1\x6b\xf5\xe0\x94\xd4\x16\xa3\x5e\x55\x5e\x89\x8a\x60\x89\xcb\xfd\xbe\x03\x0a\x6b\xb3\x93\x1a\x32\xf9\x31\xc5\xe6\x58\x0d\x4f\x5e\xa4\xf8\x07\x8c\xb5\x34\x00\x55\x76\x5e\xb2\x54\xa4\xc0\x0f\xaa\x22\x9d\x21\xf2\xbc\x2c\x79\xab\x8d\x1e\x87\x4e\xa9\x92\xaa\x67\xa2\x32\x52\x18\x6a\xdd\x75\x84\x08\xeb\xb1\x60\x45\xac\x71\xc8\xff\x5a\xe2\x2a\xa1\xa8\x1e\x9c\x14\x25\x3a\x2a\xc6\x82\xb8\x03\x62\x20\x29\x61\xbe\xca\x91\x86\x08\xb5\xd2\x61\xf4\x06\x9f\x4f\x4f\x59\x82\xc3\x4c\x8b\x1e\x40\x28\x89\x39\x7e\xcc\x09\x00\x4f\x64\x77\xc9\xb1\x3b\xa6\xaa\x93\x68\x5e\x2a\x8a\xc2\x90\xb5\xd0\x88\xad\x95\x50\x55\x44\x48\x80\x3d\xb7\xd9\x29\x3b\xb9\x9e\x6a\x05\x46\x06\xa8\x3c\x3b\x3a\x62\xc8\x7e\xc7\xcc\x3f\x0c\x0d\x83\xf3\xc4\x52\x92\x02\x35\xd6\x2c\xba\x22\x21\xff\x33\x49\xd7\x91\xb4\x5f\x0d\x3c\x75\x81\xd5\xbe\xfa\x86\xa7\x79\x2e\x1c\xc9\xf5\x8a\x61\xb6\xce\x06\x21\xec\xfb\xee\xfe\xd6\x0e\x57\xbb\xa2\x74\xcc\xfa\x7c\xb4\x76\x44\xa9\x44\xe1\x21\x18\x47\xe5\x9d\xa5\xd9\xca\xbb\xfa\x40\xd3\xd1\xca\xa9\xb9\x1b\xa1\xbf\x7d\xd5\xff\x4b\x76\x84\xfe\xa7\xce\x3b\x42\xff\x45\xde\x45\x0a\xd1\xdf\x11\x28\xf8\x92\xc5\xbe\x72\x87\xc2\x01\x98\x32\x22\xd5\xd9\x43\xd5\x93\xce\x1c\x32\x43\x8e\x02\x5e\xce\x42\x37\x57\x7e\x37\xe6\x7c\x87\x31\xe7\xd1\xd6\x31\xe7\x37\xf9\x4f\xed\x4d\x37\xd5\x2d\xc0\x7b\x52\x4e\xfd\xe6\x30\xab\x6f\x9a\x51\xbb\x28\xce\xf0\x4c\x16\xc1\xd7\x28\x6c\xe9\xb5\xc3\xe1\x4c\xd7\x55\x8b\x8a\x51\xaa\x4d\x34\x31\x4a\xf9\x58\xd5\x95\xa4\xd8\x8a\x1d\xe9\xf7\xc9\x21\xf6\xaa\x3d\x6c\x5f\xd4\x89\x13\x20\x13\xf7\xef\xdb\x13\x7e\x7d\x70\x4a\xfd\xc4\xd3\x15\xfd\xb2\x08\x23\xb5\xa1\xa1\x57\xbe\x27\xed\x75\x18\x8b\xdc\x8e\x4a\xd8\xd4\x41\x9d\xd7\x5b\x92\xd5\x0e\x0c\x09\x93\xbf\x21\xa5\xca\x22\xa5\x4c\x50\x71\xb5\xaf\x64\xa4\x8c\x4a\xc5\xcb\xb8\x59\x2b\x25\x42\x02\x4b\x64\x9a\x40\x68\xd9\xf0\x8d\xfd\x85\xb9\x53\x0f\xa6\x94\xd8\xeb\x2e\x04\x36\x78\x68\x48\xc1\x29\xda\x02\x8c\x34\xa6\x5c\x3c\x89\xd0\x9c\xb7\x50\x52\x00\xa4\xd0\x6a\x79\x8f\xee\x03\x87\x2b\x2f\x3b\x79\x66\x0e\x96\xe8\x46\xe9\x2a\xbf\x02\xb0\x52\xad\x25\x45\xd6\x24\xa6\x59\x41\xb4\x16\xe5\x78\xce\x8a\x9c\x47\xf1\x83\x48\xa9\x0d\xf1\x76\x95\x2f\xd2\x07\xd1\xf6\xa5\xef\xe9\x71\xe5\xb0\x33\x85\x65\xde\xe1\xe1\x98\x35\xcb\x30\x96\x2f\x71\xd9\xb2\x75\x99\xd4\xb1\x56\x98\x8c\xec\x57\x72\x46\x6d\x72\x9a\x5d\x66\x97\x39\xdf\xf6\xef\x08\x8f\x4d\xb9\x95\xe9\xc6\xba\xc1\x0a\xad\x45\x45\xb7\x51\x21\x00\xd0\x40\x4c\x2a\x77\xbc\xb9\xc7\xd8\x1e\x88\x2b\xf4\x6f\x0e\x0f\x1e\x91\x7f\xf4\x2f\xb8\x21\x47\x3a\xdb\x0f\x1b\x61\x63\x85\x37\xce\xf0\xd8\xe5\x2b\xc0\xa8\x18\xc1\x0e\x6d\x16\x77\xd4\x27\x73\x3e\xbc\xfe\x34\xa5\x8b\xcb\x0f\xea\x14\xfa\x6a\x43\xc0\x68\xa3\x9c\xbf\xb8\x6a\xd8\x77\x06\x9c\xb8\x65\xe5\x36\x39\x16\x65\x71\xca\x73\xff\x0f\x07\xc2\x6b\xe9\x6f\x2d\xeb\x23\x13\x82\x15\xe1\x32\xc2\xa9\xae\x43\xd6\xcb\xe8\x0c\x77\xf5\xa4\xd7\x0c\x40\xe0\x0f\x3f\xcb\x1b\xfe\x4b\x3c\xf6\xe4\x2d\xfd\x42\x47\xce\xf2\xc6\x14\x14\x1e\x3e\xeb\x54\x86\xfa\xa0\xc6\xbd\x55\x98\xf2\xc0\xce\x6e\x59\x95\x97\x2c\x50\x92\x7a\x20\x8b\xb0\x7c\x60\x30\xb3\x1a\x1a\x0a\x24\x3a\xc3\xeb\xec\x0c\x1b\x92\xfb\xc0\x6d\xbc\xf4\x9f\xcf\xea\x5b\x56\xea\xd8\xe2\xe2\xdc\x6d\xbc\xa4\x7a\xa9\x9f\x95\x6f\xc8\x02\x35\xfc\xa1\x39\x17\xd7\x65\x07\xec\x2b\x1b\xed\x05\xd1\x38\xc3\x4b\xff\x45\xdb\x71\xfd\x2f\x4e\xcf\xe1\xe3\xf4\xc9\x53\xfa\x82\xed\xdc\xcb\x54\xbb\x92\x6c\x55\xa4\xab\x68\x90\x5d\x9c\x9e\x23\x08\x57\xf9\xd7\x8a\x10\x67\x30\x5a\x76\x9d\x97\x26\x02\x89\x7d\x69\x90\x5d\xb3\xb9\x89\x8e\x90\xbe\xd4\x11\x54\xe1\xe5\xbc\x7e\x30\x7c\x93\xd7\xfb\x5e\xc5\xc5\xae\xcc\x11\xf2\x8c\x0b\xa3\x48\x4f\xe9\x83\xb1\xa1\x99\x28\xac\x93\xbc\x3a\x76\x1e\x06\x75\xbc\xcf\x97\x40\x1b\x6d\x23\x75\x8e\x14\x0d\x18\xd1\x4d\xce\x88\x2e\x67\xfd\x77\x3c\xb6\x17\x90\xbb\x0b\xff\xef\xbc\xf0\x1d\x1e\xfe\x0d\x7b\x0d\x4c\x0e\xca\xf6\xa1\xcb\xa2\x19\x34\xe9\x98\x5c\x60\xec\x32\xc4\x7c\xc1\x44\x03\x46\x85\x52\x50\xb4\x49\x14\x14\x49\xb6\x2c\xcf\x9e\x85\x06\x87\x83\x53\x61\xbb\x9d\xae\x9b\xbb\x08\x1a\xae\x17\x22\x00\x37\x20\x8c\x95\xec\x16\xc8\x0a\x56\xb4\x0a\x70\x1e\x39\xd1\x29\xca\xf9\x4e\x36\xe5\x66\xc1\x5f\xc7\x9e\xb2\x89\x88\xe8\x65\x63\x9d\x99\x97\x1f\x66\x2b\x6c\x30\xef\xa4\x60\x61\x81\x1c\x8a\xa4\x97\xbd\x08\x4e\xa3\x71\xd2\x00\xdd\x70\x4d\x5e\x51\xe0\x71\x89\x6b\xc9\xec\x89\xa9\x47\xb2\xec\xbd\x5b\x4e\x2a\x0a\x1d\xac\x4e\xaa\x6f\x0f\x84\x6f\xf5\x7a\xdf\xdb\x62\x52\xc9\xad\xfe\x9c\x26\x56\x9f\xaf\x6d\x3e\xb1\x36\x3c\xe8\x4a\x67\x7e\xfd\x6a\x8d\x45\xd4\xc3\xcf\x0a\x8f\x6f\xb3\x87\xf5\xb4\x03\x53\x07\x52\x96\x38\x74\xcd\x48\xc3\x61\xba\xf6\xf7\xbc\x2e\xe4\xaa\xdf\xf0\x76\x8e\x5c\xf5\x0a\xcf\x2d\x44\xa1\x5a\xc7\x0a\x3b\x2c\x2a\x6e\x34\xd7\x9c\xc9\xb8\x4d\xff\x65\x19\x15\x67\xc0\x8b\x89\x39\xed\xe3\x6d\x01\x0e\x53\x74\x49\x4d\x28\xfb\xfd\x38\xc1\x58\x4d\xb0\x3f\xfc\x7e\xb6\xbf\xb7\x51\x6b\xd2\xb6\x8c\x02\x23\xc5\x7f\xf9\xfe\xf0\xfa\xa9\xa0\x72\x55\xf7\x76\x95\x4e\x21\xb2\x9f\x94\x07\x79\xc5\x41\xe1\x3a\x65\x9c\xc1\xfc\xed\x47\xb1\xbf\xf0\xd8\xe5\x1d\xd7\x0e\xfb\x65\x8f\xdd\xbc\x1d\x3b\xe1\x64\x7f\x5b\x6e\xf8\x6a\xaf\xb3\x99\xf5\xb6\xbf\x95\xd7\x05\xfa\x6e\xb5\x53\xb1\x8e\xc3\x45\x66\x17\x00\x85\x52\x8b\xd3\xb2\xd2\x80\x81\x31\x32\xa7\x3f\x72\x96\xcb\x37\x15\xa5\x47\x9d\xfd\xcb\x00\xbb\x0a\x03\xb7\xa6\xd3\x28\x69\xa9\x1b\x85\xff\x67\x03\xe1\x1b\x06\x7a\xdd\x71\x71\x52\x1a\xf2\x1e\xcd\x5c\x88\xd9\x47\xd0\x4f\x9d\x3d\xa9\xbd\x43\x68\xfe\xea\x63\x91\x06\xbd\xd6\xb5\xe4\xb5\xa2\x76\x5b\xee\x67\x94\x7d\x65\xa7\x43\xc9\x15\x8e\x9f\x05\x27\xc0\x5a\xb4\xae\x56\x4e\x62\x85\xfb\x68\x56\x03\x13\xe4\x7c\x64\x95\xe7\xeb\xf8\x6e\x0f\xff\x0d\x38\x3d\x9d\xa4\x31\x1d\x9d\x33\xb2\x84\x2c\xb0\xa3\x14\x09\x0c\x71\x84\xb2\x08\xf9\x94\x05\x43\x48\xbe\x1e\xd5\xbb\x70\x50\xe8\xfa\x58\x17\x40\x1a\xa0\x97\x1a\x5c\xcb\xa2\x5a\xce\x58\x65\xeb\x20\xda\xd6\xed\xe2\xa3\xe8\x90\xa9\x4a\x18\x39\x0c\x2b\xfb\xe8\x20\xbb\xb2\x2d\xe2\x13\x3a\xc2\x1b\x33\xdb\xfc\xb7\x0c\x86\xaf\x1e\xec\x71\x43\x0d\x5b\x11\xac\x88\x35\x33\xe4\x0a\x3d\x34\xee\x60\x14\xae\xac\x47\x94\x52\x64\x5a\xa7\x3d\x86\xb3\x31\xe7\xed\x34\x02\xbf\x31\xbc\x28\x32\x88\x49\x2a\x20\x23\x0d\x1e\xa0\xe0\xfa\x20\x16\x6b\x19\xce\x18\x85\xbb\x49\x22\x39\x29\x82\xe7\x9f\xca\x81\xf6\x7e\x9e\x47\xf1\xfa\xf3\xc7\xe8\xe4\xd1\x55\x93\x44\x6a\x45\xf2\x07\xa4\x3b\x0a\xf9\x4e\x30\x22\x85\xd1\x01\x4a\x2a\x94\x7f\x4f\x8e\x05\xbc\x6c\x8c\xea\xc3\x5e\xd5\x4b\xb2\x16\x25\x65\xd0\xc9\xca\x24\x45\x84\xb9\xb6\x88\x71\xb2\x46\xb1\x94\xd2\x4d\x81\x44\xfc\x65\x92\x75\x4c\x1e\x82\xdd\x88\x31\x93\xb2\x89\xf6\xea\x16\xa0\x5a\xd3\x08\x8b\x36\xd0\xeb\x72\xac\x1e\x36\x38\x4a\xc1\xba\x81\x14\x46\xa6\xd1\x73\x51\x1e\xa5\x29\x4f\x9f\x4f\x91\x30\x48\xff\x8b\x1b\x5d\x9b\x24\x40\x9b\x9e\x01\x43\xb1\xf6\x46\x6a\x30\x06\x18\x0b\x39\x95\x44\xa7\x84\x96\x41\x5e\x27\xea\xd7\x74\x57\x56\x99\x36\x2a\x30\x16\x53\x8e\x67\x0c\xd9\x94\x22\xab\x78\x99\x5f\x51\x63\xc3\x39\xf2\xb8\x16\xfe\x0b\x35\x87\xd6\x5f\x79\xea\x62\x15\x0f\x22\x23\x76\x96\x66\xa0\x9f\x20\x8d\x1e\xdd\xe7\x5a\x2e\xc9\x9e\x28\x38\x75\x99\x2a\x4b\x11\x74\x64\x05\xb7\xe0\xd1\x22\xd8\x94\x8a\x32\xca\xca\xc4\x50\xed\xea\xc5\xb2\xa8\x17\xd1\x52\xa7\x04\x99\xbb\x9a\xc4\x9d\x28\x35\xe5\x02\x5e\x22\x2e\xfe\x40\x47\xf6\x94\x5a\x7e\x74\xc3\x36\xc6\x96\x03\x77\xb2\xcb\x66\x76\x95\x12\xb8\xc7\x92\xa2\x14\xf9\xfa\xf1\xa4\x95\x94\x0a\x8f\xf6\xd0\xc1\xf0\x5f\xbc\x5e\x0f\xa8\x9e\x6a\x45\x67\x93\x56\xa7\xe5\xf4\x94\x32\xe8\x3b\x1b\x81\x12\x76\x96\x62\x66\x64\xeb\xfe\xc2\x88\xfd\x15\xfc\x0a\x4e\xae\xea\x55\xd5\xe0\xc2\x38\x1e\xd4\xd7\x30\xed\xd0\xb1\x11\x46\x16\x40\xbb\x02\x65\xac\x6e\xc6\x64\xb3\x72\x17\xaf\xce\xda\x9b\x3c\xe0\xf6\xd7\xfb\xec\x8c\xa7\xb7\x5d\x88\x8c\xa7\x3f\xf6\xec\x8c\xa7\x88\x52\x98\xee\xee\x48\xc9\x0f\x82\x16\x59\x7f\xac\x63\xab\x59\x29\x34\x25\x82\x06\xa6\x75\xcc\x36\xd1\xe2\xa1\x47\x1c\xb7\x34\x52\xd6\x4c\x36\xb6\x25\xf0\x2f\x68\x88\x17\x7e\x68\xe2\xf1\xf0\xef\xb8\x6a\x56\xc1\xbe\x53\x73\x03\x45\xfe\xb2\x16\xfe\x51\xcd\xba\xd0\xdb\x69\x8f\x81\x29\xd0\xf0\x65\xf9\xdd\x8c\x20\xdd\x6c\x1d\x89\xc2\x82\xe8\x59\xd8\x15\xf9\xd9\x04\xe2\x3e\x41\xd4\x55\xa6\x19\x0a\x8f\x1e\x9b\x37\x7c\xdd\xdd\xb8\xd7\x4d\x4d\x4a\x02\xb2\x5c\xe6\x65\x30\x73\x72\x61\x42\xb9\xfa\x69\x58\xf0\x70\xaf\xb2\x38\xa4\x30\x3c\x0c\xb2\x5a\xe9\x77\xe3\x28\x7d\xea\x56\x8b\xeb\x34\x40\xf5\x62\xb5\x51\x27\x5e\xa2\x7a\x2a\x1a\x51\x4a\xbb\x43\xd8\xa3\x80\x10\x35\x22\xb9\xbd\xe9\x84\x9c\xde\xfa\x89\x23\xf4\x7e\xa9\xc6\xb4\x22\xe9\xbf\xa9\xb6\x8d\xb3\x7c\x85\x43\x2d\xfc\x0b\x4f\xbd\xaf\x46\x8a\xbc\x30\x84\xdf\x6f\xc7\xbf\xc0\xf4\xb2\xd7\xbd\xde\xde\x9a\x52\xea\x75\x9a\xcd\xa4\x01\xa6\x48\x23\xce\x72\x0e\x50\x99\x0d\x70\xb8\x1c\x51\xbb\x16\x30\x47\xf0\x18\xe0\x26\x7b\x34\x16\x9d\x91\x18\x53\x82\xf3\xc2\x15\x9c\x24\x1f\x09\xd7\x50\x8f\xa9\x76\x0a\xe5\xbc\x28\x7b\xf8\xe9\xeb\xec\x2b\xb5\x9e\xa8\xf4\x36\x4f\x10\x19\xaa\xdf\x53\x0b\x9f\xda\x7d\xb9\xca\xef\x6e\x48\x3f\x22\x88\x8d\x19\x57\xc1\x31\xee\xa1\xff\x6b\x1e\xfb\x9f\x9e\x94\x33\x08\xf3\xf5\xdf\xbd\xf0\xa5\x9e\x03\xf3\x05\xaa\x98\x45\x6c\x49\x4f\x06\x56\x50\x97\x0a\xbf\x31\x9f\x08\x16\x29\xbc\x45\xca\xaf\x2c\xb6\xe0\x59\xd5\x9a\xb1\xec\x51\x04\x5b\x5a\xc2\x4e\xe6\x16\xef\x68\x6f\xd7\xb3\x6b\xb7\x41\x91\x69\xf7\x8c\x02\xa0\x79\xd9\x25\xec\xb1\xbd\x62\xc4\x75\xb0\xef\x5f\xb1\xf0\x84\x09\xf6\x25\x03\x20\x98\xf1\x1a\xa2\x8d\x4b\xf5\x24\x92\x53\x9d\x2e\x40\x54\xb4\x3a\x69\x99\xb4\x53\x6e\xe0\x68\xa1\xbb\x54\xdc\x8e\xdb\xc7\x1f\xdb\xe7\x50\xdf\x6d\x6d\x45\xd3\x55\x81\x65\xf0\x13\x1e\x31\x0a\x9a\xe3\x7d\x95\xf4\x4e\xbf\x70\xb1\xf1\x95\xbe\x68\x72\x23\x3e\xbd\x1d\xf3\x9c\x69\x09\x26\x38\xbc\xd2\xd3\x19\x0e\xf6\xea\xb5\x21\xa3\xd4\xa4\x7d\xc8\xda\xb4\xeb\xbf\xdb\x65\xd1\xdf\x45\xbd\xeb\xe3\x41\x7f\xd0\x7b\xc6\xd6\xde\xda\xba\x3f\xe6\x20\x84\x19\x70\xb0\x30\x34\x9c\xcd\x6a\x3d\x33\xf6\xce\x2b\xd8\x13\x2c\x61\x41\x59\xb4\x26\x4b\x6a\x61\x76\x26\x4f\x56\x79\xee\xff\xd8\x15\xe1\x47\x07\xf5\xcf\xa0\x11\xb5\xcb\x4e\xce\x8b\x1e\x78\xc7\x18\x7e\x84\xe6\x85\x05\x2c\x2f\x98\x55\xc0\xc6\xc1\xc8\xf4\xc2\xec\xa8\xa6\x13\xc6\xc2\x62\x4e\x16\x22\x0d\x79\x8d\xea\x50\x30\xbd\x30\x4b\xcf\x68\xf2\xa2\x8c\x77\x19\x4c\x4d\xad\x68\x1a\x23\x92\x4c\x2a\xcf\x41\x14\xea\x4f\xa0\xd9\xeb\x18\x43\x68\x3e\x31\x8e\xa5\x8f\x2b\x52\xb7\x3c\x28\x92\x98\x37\xa2\xdc\x86\xa8\x87\x13\xb2\xae\x23\x79\xd9\x4c\xd5\x82\xa4\x04\x82\x3e\xd9\x09\x8d\xc8\x44\x55\x15\xf8\x94\x5b\xb5\xae\xc5\x88\x65\xd4\x6d\xbf\x61\x54\x96\x52\x05\x8a\x79\xa9\x10\xe2\xe9\x7c\xdf\x29\x14\xa8\xb1\xd0\x01\x48\x06\x62\x7c\x6d\x85\x03\x42\x00\xbd\x9e\x18\x43\x69\x5d\xf3\x5c\x6c\xaf\x04\x30\x19\x58\xe3\x2a\xfb\xbc\xa0\x6c\x6d\x42\x44\x10\x99\xca\x24\xaf\x36\x11\xd5\x39\x07\x27\x05\x8c\xd0\x52\xd6\xbb\xe1\xe3\xfb\xd8\x4b\x06\xad\x45\xf9\x9d\x81\xf3\x5d\x94\x1f\x1d\xa8\xac\x4a\x6b\x4d\xea\xbf\xf0\xb8\xe1\x18\x32\xed\x53\x87\x35\xae\x74\x60\xb7\xc5\x23\xe5\x47\xdc\x28\xc7\xfc\xc4\xe9\x85\x45\xc5\x5a\x63\x80\xad\xb5\xb3\x9b\x34\x56\x59\xde\x6d\xbc\x9c\x4b\x3b\xcb\x49\x26\xbf\x3d\x32\x1a\xc8\x59\x62\x38\x06\xd4\x0c\x58\xd4\xb3\x01\x4b\x52\xd9\x6b\xd7\x1e\x0a\x1a\x2b\x51\x1e\x35\x20\x06\x53\xe4\x41\x0a\x41\xd3\x4b\x7c\x39\xc9\x32\x15\x35\x48\x98\xf1\x2a\xae\x3c\x4a\xdb\x2b\x51\xd6\x69\xf1\x3c\x69\x98\xb7\x83\x91\xe7\x44\xe3\xf7\x1c\x18\xbf\x61\x6a\xfc\xd9\xcf\x1d\x25\x22\xb5\xa8\x58\xe1\x45\x30\x32\x3e\x3a\x16\xc4\xa2\x2c\x82\x91\xfa\x28\xee\x6f\x76\x19\x85\xa2\x0a\xbf\x68\x90\x9e\x4b\xa4\x95\x3d\x7b\x13\xb3\x60\x5f\xe9\x04\xca\x59\xd0\x93\x9c\x58\xf6\x3f\x3e\x54\xdf\x55\x2f\x76\xd5\x8b\x8b\xa4\x5e\x3c\xe8\x2d\x6d\xbd\x37\xdf\xec\x3f\x4d\x47\x52\xa9\xa9\x5c\xc1\xe9\xd4\x33\xba\x27\x46\xf4\x3f\x0c\xb3\x7f\xd7\xed\xc5\xb1\xa0\xc3\xfd\x2f\x0e\x87\xb7\x98\x9f\x01\xcf\xa2\xa5\x14\xf2\xc8\x1b\x69\x94\xa3\x81\x96\xc2\xe6\x41\xfe\x80\x4d\x43\x4e\xb6\x79\x3c\x8a\x2f\xf0\xb2\x92\x8b\xf2\x8e\x21\x56\xd0\xca\x3c\xb3\x89\xeb\xae\xbb\x2a\xb0\x24\xaf\xdf\x11\x5f\xb8\x79\xb9\xce\x84\x3e\xdc\x70\x36\xb9\x93\xcf\xe2\xe1\xe6\xc0\x09\x51\xc0\xba\x43\xcb\x9f\x58\x82\x38\x9c\xb8\xc2\xbf\x69\x7f\x70\x57\x36\xec\xca\x86\x8b\x74\xf4\x68\x5a\x4a\xce\xb3\xcf\x57\xc7\xf9\xc1\xbe\x2a\xce\x83\xde\xe2\xd6\x32\x68\xd2\x9f\xe8\x1d\xcd\x69\xf1\x0f\x38\xa2\x87\xb1\x7f\x78\x84\x93\xab\xae\xd7\x9c\x8a\xb5\x27\x5b\xd8\x67\x1f\x11\xde\x54\xb9\x56\x35\x84\xf5\xb2\x2d\x18\x44\xde\xfa\x86\xf7\x28\x7a\x02\x89\xec\x17\x1a\x2b\x3c\xee\xa4\x3c\xde\xf0\x7c\x74\x2e\x9c\x48\x8a\xc2\x5c\x7c\x14\x09\x92\xae\xa7\x2f\xc1\xa7\xc1\xdb\xe6\x48\xb3\xb7\x5f\xc1\x52\xe6\x2b\x69\x70\x1b\xcf\x08\x24\xd6\x0a\x48\x96\x5a\x58\xcb\x08\x8f\x60\x59\x3f\x64\xa4\x08\xa9\x76\x16\x98\xb0\x63\x78\xb5\x9c\x05\x29\x7b\x14\xcd\xbc\x4a\x25\xfd\x79\xe5\x5c\x79\x1a\xc0\xee\x8a\x32\x4a\x2d\x0f\x0a\xf8\x18\x4d\x74\x69\xde\x41\x4d\x8f\xca\x52\x5f\x56\x74\x9a\xea\x6b\xdf\xf4\x18\xd3\x90\x0d\x85\xff\xbf\xbc\xf0\xf8\xbc\x3b\x02\x24\x53\xa2\xd5\x28\x49\x21\x8c\x03\xdb\x64\x9c\x50\x91\xc9\xa1\xd8\x5f\xb8\xf8\xe1\x3b\x88\xec\xe9\x9a\x23\x1a\x79\xe2\x41\x6f\x3f\x7b\xac\x33\x49\xdb\x51\xd9\x58\x19\x6f\xf1\x7c\x99\x8f\x9f\xe1\xeb\xfe\x90\xbf\x47\xae\x23\x26\x9f\x7c\x4c\x8f\x27\x55\x84\x8a\x3f\xec\xef\x85\xb7\x18\xfb\x86\xc7\xfa\xcc\x05\xff\x2b\x9e\xea\xe7\xdf\xf0\xb6\xe8\x68\x63\x07\x55\xdd\x6d\x0d\xb2\x3c\x12\x8d\x60\x96\x19\xb8\xf8\xe1\xb5\x86\xc8\xf1\xa0\xd9\xe7\x8d\xd1\x1d\x7b\x57\xd6\x44\x7e\x26\x15\x51\x5c\x4c\x58\x09\x1d\x13\x58\x62\xc1\xcb\x09\x67\xb8\x7f\xcb\x63\x57\x60\x4b\xa6\xd4\x78\xfa\x1f\xd2\xed\x7d\x33\xb4\xf7\xdc\x5a\x2a\xf7\x18\x30\x9f\x43\x00\x23\x25\x45\xa9\xdd\xdb\x3c\xa6\xde\x86\xd3\x82\x9e\x52\x23\xe8\x6a\x86\x1c\x63\x15\x9a\x00\x01\xc5\xad\x24\x83\x25\xb9\x00\xf8\x90\xc5\xa8\xd3\x98\x4f\x79\xec\x91\x58\xd9\xd3\x99\x2e\xcb\x7f\x8f\x6e\xce\xeb\x2f\x44\x73\x32\x2b\x20\xf3\x22\xb5\xe3\x4f\x3d\x76\x79\x43\xa4\x29\xb8\x24\xa7\xe5\x11\xd9\xff\xa2\x6e\xc4\xaf\x78\x70\x05\xd2\x77\xa3\x62\x25\xd0\x0f\x1a\xeb\xbd\x5e\x32\x78\x20\x34\x19\x4d\x3d\xed\x00\x04\x41\xa0\x48\x40\xd0\x51\x1a\xad\x8a\x24\x06\x8a\x8d\x16\x6f\xac\x44\x59\x52\xb4\x30\x54\x21\x29\xcd\x51\xde\xb2\x9f\xc0\x69\xd3\xf8\xc0\xd6\xa4\x84\xe8\x91\x34\xe7\x34\xf3\x4f\x3c\xd6\x47\x58\xfb\xff\x4d\x37\xf7\x7d\xfd\xc7\xcc\x96\x6a\xba\x77\x27\xab\x83\x26\x9f\x82\xf8\xcf\xc2\x44\x7b\xb9\x63\x77\x71\x57\xd8\x1f\x79\xac\xc7\xce\xe3\x7f\x5a\xb7\xf0\xbf\x6c\xaf\x85\x6e\x9d\xd1\x3d\x85\x56\x92\xf2\xbb\xda\xbe\xd7\x79\xcc\xde\x2b\xfd\x97\xe8\x86\x15\x0f\xa9\xf0\x80\x95\xe6\x4e\xb0\x0f\xee\x63\x37\x9c\x33\xd1\xbd\xff\xad\xe1\x70\xff\x8c\x05\x9f\x6f\xbd\x1e\x14\xf8\xa8\xd2\x14\x1d\x05\xe1\x53\x43\xec\xb5\xca\x3f\xf4\x32\x8f\xdd\xde\xdf\xab\xb2\xa3\xfa\xc0\x61\xe8\x26\xd9\xa5\x76\x45\x54\xdc\x75\x52\x16\x3c\x6d\xea\xd0\xd0\xde\xc4\x63\x75\xf6\x63\xc6\xe1\xb3\xc6\x4e\x5c\xa8\x9a\xe1\x79\xe9\x49\x33\x5c\x1e\x3b\xe3\x3e\xf4\x75\x2a\xa1\x66\xf7\x94\xb4\x7b\x4a\xba\x58\xa7\xa4\xdb\xad\x53\xd2\xcd\xe7\x79\x4a\x7a\xd0\x5b\xdb\xfa\x28\xb4\xe8\xcf\x6f\x46\xa6\xe2\xac\xa3\xaa\x99\xa6\xdf\x72\x62\xec\x7f\xd5\x9c\xd8\xe0\x2e\xe8\xb0\xdb\xf9\xba\x0a\xfc\xf1\x3f\x56\x0b\x1f\x87\x3f\xe4\x9c\x38\xc3\x29\x38\x21\x32\x40\x61\xf5\x0d\x6f\xe0\x0c\x77\x0f\x31\xf7\xd5\xd8\x93\x98\xbc\xea\x3f\x2e\xf4\xa5\x4c\x91\x2f\x96\x82\x30\x8f\xbb\xa0\x6c\x1e\x06\x70\x5e\x0b\x6c\x58\xb9\xe3\xfd\xdb\xc2\x1b\xd0\x28\xb4\xae\xdd\x0d\x60\xa6\xd5\xf8\x69\x22\x0f\x12\x79\xf6\x90\xad\x52\x26\x70\x42\xf3\x71\xd2\x99\xde\x32\xc0\x82\x5e\xb9\x38\xd9\xea\xd1\x5c\xb4\x08\x6a\xee\xff\xd4\xc2\xc3\xce\x95\xae\xd8\x0c\x0d\x35\x17\x29\x62\x15\x5d\x15\x97\x3d\xf1\xbd\x35\xd6\x60\x97\x6a\xc0\xb8\x79\xde\xf4\x17\x36\x39\x02\x75\x0d\xfc\x91\x6c\x95\xc0\xe2\x1e\xbb\xe8\x34\x58\x0f\x1d\x8c\x3e\xcb\xd8\xde\x76\xce\x9b\xc9\x59\x3f\x0e\xef\x9c\xca\x0c\x00\x89\x95\x54\x57\x8a\xa0\x9d\x63\xba\x78\x29\x30\xcc\x53\x76\x17\x45\xd5\x99\xd9\x03\x91\xf0\xc8\x85\x3a\xfd\xbc\xd9\x99\x23\x27\x17\x67\x8f\xce\x1e\x99\x77\xe6\xc8\xb3\x6d\x8c\xcf\x13\xdb\x86\xf8\x34\xcd\xf9\xc1\x45\x4c\xb1\xc8\x79\x59\x6d\xcb\xd7\x2f\x73\x40\x75\x34\x40\x34\x5a\x1b\x4b\xd0\x90\x95\x92\xe2\x7f\xec\xb2\xf0\x54\xcf\x3b\x5d\x66\x04\x1b\x0f\x10\x87\x2e\x37\xef\x75\x05\x41\xa9\x01\x7c\xf0\x12\xf6\x1d\xb5\xb7\xff\xbd\xb7\x0d\xb8\xbf\x9e\x95\x81\xad\xfc\xfd\xdd\x71\x20\x5d\xa1\xfc\x9b\x59\x3a\xfb\x54\xf7\x22\x47\x57\x7c\xae\xa6\x15\x88\x07\x6a\xec\xa9\xe7\xd8\x7e\x54\x18\x7e\xac\xe6\x66\xe5\xb6\xb6\x63\x6f\xed\xd7\x6c\x08\xe1\x03\xc2\x76\xca\x24\x91\x7a\x07\xb0\x35\x95\x1c\x59\x76\x00\x0f\x3d\x8b\xc5\x1a\x14\x05\xdc\xb3\x73\xa2\xdd\x49\x23\x0b\x99\x5a\x41\x51\x4b\x55\x76\x5c\x64\xe9\x05\xc7\xd6\xdb\x8d\x56\xd9\x55\x86\x1e\x22\x65\xe8\xb7\x6b\x96\x36\xf4\xc9\xda\xf9\x1a\x8d\xff\xaf\x47\x58\x54\xc7\x29\x10\x58\xca\xcc\xde\xb2\x56\x1e\x4b\x29\x84\x58\xc7\xaa\x3b\xb1\xc4\xb6\xc7\x3b\xc2\xd9\x3d\x27\xe2\x91\x62\xd4\x24\x11\xf7\x5e\xe7\x14\xb8\x2a\x07\xeb\xbb\x10\x3b\xf3\xdc\xad\x15\xc2\xc3\xfe\xf5\xe3\x3d\xa2\x65\x7a\xf6\x53\xd5\x48\xfe\x63\xdf\xcf\x8e\xd2\xa8\xc8\x8f\x8c\x47\xcb\xcb\x39\x5f\x06\x4e\x68\x1b\x88\x58\xc5\x99\x50\x4e\x34\x1e\xce\xa6\xe6\x66\x89\x58\x07\x32\xc6\x3e\xf4\xa8\xf0\xad\x9e\x7b\xcd\x80\xbe\xda\xe7\xb3\xa6\xc8\x83\x54\x34\x10\x88\x1f\x49\xa9\x14\x6c\x93\x89\x05\x50\x19\xe8\x01\x62\x8f\xcb\x2e\x75\x70\xfd\xe5\x30\x03\x8e\xec\xba\xe8\x60\x26\x14\x91\xb3\xc5\x49\x01\x7f\xda\x27\xd6\x55\x9e\xeb\x3d\xae\xbe\xe1\x0d\x51\x08\xe9\x86\x77\x15\x74\xdb\x5c\x9e\x88\x3c\x29\xd7\x4f\x24\x59\xd2\xea\xb4\x36\xbc\x2b\xa8\x8f\xd4\x0d\x37\x6f\xed\x2a\xf6\x4c\x36\x44\x4f\xf8\x27\xc2\x5b\x94\xe0\x4c\x0c\xef\x92\x82\x7c\xb2\x78\xe1\x11\xf8\xae\x1e\xb8\xc8\x99\xe1\xea\x64\xe8\x60\xc4\x0d\xb1\xea\xc7\xfd\x2f\x0c\x29\xeb\xc6\xc7\x86\xee\x70\xef\x99\x14\x21\x88\x6d\xce\x63\x0e\x22\x49\x49\x69\xbb\x2a\x49\x56\x24\x31\x68\x8c\x52\x76\x40\xbb\xeb\x81\x56\xb4\x96\xc1\xac\x06\x91\x1d\x59\x70\x0f\xcf\x05\x9a\xf1\x10\xbc\x47\xee\x64\x39\x42\x0b\x29\xdc\xb8\x4a\x3d\xc6\xf0\xdb\x3c\x0e\x56\x92\xe5\x15\x4a\xca\x4e\x05\x98\xe4\x46\x0e\x1e\x50\x41\xed\x93\x07\x46\xeb\xc1\x42\x02\x50\x0b\x72\xf9\x98\x3a\x45\x58\x23\xcc\xe1\x21\xfb\x0d\x71\xf6\x16\xad\x28\x4d\xc7\x82\x76\x2e\x96\xa2\xa5\x54\x6b\x8b\x93\x07\x0a\x10\x71\x8d\x08\xe3\x69\xf9\xdd\x1d\xb9\x73\x50\x6b\xdb\x58\xb1\x84\x17\x63\xf6\x46\xa6\x64\x76\x95\xa4\xa4\x21\x5a\xed\x0e\x99\x15\x31\x7f\x89\xaa\x16\xa9\x9e\x22\x41\x54\x29\x27\x29\x82\x10\xd6\x4d\x9a\x9c\xe1\x21\x60\x2d\x41\xd1\xd0\x5f\x48\xf0\x9f\x89\xcc\x7e\xa6\x52\x42\x31\x46\x49\x46\x72\x0a\xab\x3e\x4c\xf9\xd9\xa4\x21\x96\xf3\xa8\xbd\x82\x91\x59\xf5\x20\xbc\xbd\xab\x84\x82\x12\x9b\x69\xbd\x84\xab\x21\x65\x5b\xc9\xa2\x30\xb2\x5f\xe5\x92\x50\x87\x8e\x60\xda\xcb\x5d\x22\x57\x65\x8c\xd2\x2b\x4a\x59\x4f\xd7\x55\x36\xad\x6c\x5d\x08\xa1\x34\x48\x0f\x25\x97\x7c\xe8\x10\xe4\x3b\x85\x26\x99\x55\xa8\x9d\x53\x54\x20\x0b\x47\x33\xc9\x0b\x88\x86\xbf\x6d\x2a\xb8\x09\x10\xaa\x82\x9b\x30\x52\x47\x61\xb9\xde\x36\x85\xbb\xaa\xea\x1f\x68\x56\x26\x02\x08\xbc\x3f\xab\xc1\x69\xe1\x55\x91\xe3\xbb\xa3\x8a\xae\x0a\x71\x4e\x00\xd2\x03\x6a\xee\x34\x92\xda\xe8\xd4\x11\x90\x4c\x68\x15\xaa\x3a\xaa\x44\x4b\xd5\xbf\x52\x42\x1e\x18\x0b\x56\x0f\x8e\x05\xab\x93\xf2\x3f\x84\x86\x91\x7f\x1d\x90\x7f\x1d\x1a\x0b\x56\x0f\x81\x28\x94\x97\x0e\x42\x8d\xf0\x39\xf8\xf3\xe0\x58\xd0\x14\x62\x12\xff\x5f\x49\xc6\xf9\xb4\xc7\x86\x1b\xd1\xad\x9d\x2c\x4e\xb9\xff\x51\xcf\x1f\x5c\x5a\x2f\x79\xf8\x36\x6f\x7a\x0a\xaf\x61\x57\xcc\x1d\x39\x11\x28\xf6\xa0\xe9\xa9\x60\x09\x6f\x59\x49\x69\xd6\x0c\xd6\xf0\x26\x51\x66\x01\x78\xec\xa7\x14\x93\x6c\xd9\x45\xd7\xac\xe6\x59\x29\xf6\x94\x5c\x8a\x83\x5c\x88\x52\x27\xdd\x68\x60\x7a\x18\x4d\xf9\x35\xe7\x14\x36\xcd\xf6\xc0\x02\xf1\x0f\x87\xe3\x3a\x87\xbd\x74\xd8\xe7\xc0\x4c\xdf\x25\x08\x9d\x5c\xf6\x3d\xac\xa7\x20\xf6\x5f\xb7\x47\x49\xbe\x17\xee\xb9\xad\xfa\x40\xd6\x69\x69\x0a\x12\x25\x0e\x4b\x83\xba\x47\xca\xa7\x93\x6a\x5a\x0f\x8e\x49\xf1\x94\x9b\x17\x5a\x3c\xca\x2c\x18\x91\x65\xd5\x84\xb6\x46\x1c\x97\xf3\x8a\x40\xcf\x20\xa9\x49\x2e\x2b\xab\x00\x91\x49\xcd\x40\xc3\xbc\x05\xb8\x36\xf4\x12\x55\x92\x18\x0b\x6e\x25\xcb\x2b\x0a\x55\x62\x1d\xf0\x87\x51\x5e\xe6\x41\xcf\xd6\x11\xfe\x29\x4c\x7d\x5d\xc5\xb5\x15\x91\xaa\x8a\x2e\x73\xb0\xc0\xac\xb8\x8d\xda\x42\x74\x77\x7d\xaa\xd5\x69\x75\xcb\x6f\x5a\xdd\xfd\xc5\xf8\x22\xe2\x93\x0a\xa9\x11\xf5\xf8\x0a\x66\xdd\xb7\x57\xa2\x25\x0e\xe1\xa5\x6a\x71\x16\xe6\x94\x99\x75\x31\xe2\xd5\x83\x60\x64\x75\xb2\xbe\x14\xe5\xea\x53\xab\x93\xf5\xa6\x10\xa3\xc1\x9d\x7c\x7f\x0c\x07\x88\x56\x8b\x67\x31\x9c\xac\x4a\xc8\x17\x46\x9c\xe8\xab\x49\xd1\x02\x3c\x7d\xde\x2e\x2d\x32\xfb\x51\x39\xfa\x93\xd7\x1f\x38\x70\x00\x64\xc5\x5c\x14\x2d\xf0\x22\x18\x39\xd5\xe6\xd9\xc2\x4a\xd2\x2c\xc7\x82\x19\x9e\xc8\xa7\x20\x01\x92\x3e\xa0\x55\x46\xda\x6c\x0e\x1e\x38\x70\xa0\x70\x56\xf0\xe7\x3c\xf6\x7d\x49\x06\x39\xf6\x7c\xe1\x4c\xd2\x5e\x3c\xbe\x70\x87\xd4\x32\xd6\xfd\xf7\x7b\xe1\x2f\x78\xb3\xbd\x6e\x29\xdd\xa4\xa8\xc2\xdd\x3a\x0a\x0a\xfa\xbc\x7a\xe8\x44\xd6\x1a\xa2\xb3\x27\x42\x7e\x8b\x6c\x39\x85\xb2\x1b\xa2\x93\x47\xcb\x52\xf5\x0f\x9e\x25\x3a\x6a\x05\xa8\xd0\x61\x23\x5b\x34\x74\x87\x65\x96\xfa\x76\x8d\x29\xb5\xc8\xff\xab\x1a\xbb\xa3\xa7\xe2\xbe\x63\x15\x91\x74\x41\xc3\xab\xf2\xca\x1a\x5d\xea\xc1\x37\x60\x27\xf7\x68\xae\x55\x0b\x8c\x28\x08\x66\x29\x7f\xdc\xc6\xf9\x04\xb7\x4c\x5e\x06\xd7\x5c\x73\x48\x23\xd7\x9a\x4f\x64\x49\x3a\x46\x29\xeb\xb4\xd2\x79\xb0\x12\x65\x71\x6a\x03\xff\x6a\x59\xb5\x6a\x34\x39\x78\x48\x6e\x0a\x02\x63\xa3\x5d\x65\x0e\xa7\x3f\xc4\xc3\xe2\x7e\x9f\xb4\xda\x72\x0c\x78\x2a\x7b\x46\xb7\x26\x93\x3a\x6f\x4a\x65\xe5\x41\x63\x05\x10\x30\x61\x62\x51\x02\x18\x8f\xeb\xec\xad\xc3\xec\x31\x96\x19\x63\x29\x2a\x1b\x2b\xf2\x20\xf4\x74\xb1\x74\x3c\x29\x4a\xff\x45\xc3\x61\x40\x7f\x63\xaf\xb9\x14\x46\x77\x89\xa5\xa2\xbe\xe1\xed\x49\x4a\xde\x72\x4d\x7f\xdf\xdc\xbb\x7b\xd6\xdf\xe1\x59\xff\x39\x0c\xfb\xd1\x9f\x0f\x1f\x9d\x20\x7d\xb3\x22\x72\x43\xe5\xe0\xe9\xb2\xb7\xed\x88\x92\x51\xb6\x9f\x3d\xb1\xaf\x4d\xca\x1e\xcc\x5d\x43\xc2\xf6\x0d\x09\x1f\xb3\xd3\x5e\xde\xbd\x13\xd6\x4c\x2b\x5b\x39\x29\xd0\x8c\x90\xe9\x83\x3b\x42\x50\x5c\xf4\x43\xfb\xfc\xd6\x87\xf6\x09\x7f\x5c\x1f\xda\x61\x92\xe8\x73\x3b\x2d\xf5\xea\x49\xfd\xff\xf1\xd8\xe3\x7a\xd9\xe9\xa3\x36\x02\xae\x26\xbc\xf0\x3f\xee\x85\x4f\x9d\x8a\x29\x36\x16\x01\x10\x8a\x60\xee\xd4\xc2\xec\x33\x83\x86\xf5\x1c\xce\x0a\xe5\xc8\x36\xa4\x06\xae\xdd\xf9\x6e\x76\x3d\x1b\x8c\x73\xd1\xf6\x0f\x84\x57\xcd\x13\x9a\x82\x5d\xcc\x26\xe0\x70\x4f\x61\x03\x51\x1c\xfb\xf5\xd0\x9f\x8a\xe3\xed\xbf\xf6\xda\xc1\x9e\x4e\xa8\x39\x91\x97\x6b\x22\x3f\xeb\x70\x32\xfe\xc5\x40\x78\x63\xaf\x1b\xb6\xd5\x3d\x0a\xd4\x13\x2a\x73\x47\x33\x93\x6e\x78\xc3\x78\x69\x76\xc6\x69\xf5\xab\x07\xd8\x59\x8b\x02\x2d\x0d\x7f\xb8\x8b\xc1\x0c\x23\x6c\x26\xd6\xf2\xa4\xe4\xa3\xf5\xe0\xfc\x08\xd2\x9c\x4d\xf8\x36\xa6\x2b\xe5\xdf\x18\xd6\xef\xa0\xbf\x29\x17\x38\xb5\x90\x16\x7b\xb4\xcd\xee\xc8\xcf\x79\x9a\x6c\xf1\x01\x2f\xfc\x80\x77\x74\x81\xa8\x93\x1c\x87\x44\x95\x37\x51\xd1\x2c\x5a\xee\x97\xea\x23\xdb\xe7\x55\xac\xbb\x8c\x8a\x3b\x67\x52\xb4\xdb\xf3\x85\x7d\x5b\x91\x4a\x98\x48\x70\xd8\x33\xdf\xb4\x2f\xac\x5c\xea\xb5\x75\xda\xe1\xe3\x3d\x77\xd0\xbf\x1f\x62\x9f\xb7\x25\xd1\x03\xe7\x29\x89\x5e\xe8\x5d\x04\x51\xb4\x1d\x38\x5b\x4b\xcc\xee\xea\x04\x3b\xd4\x09\x1e\xf0\x94\x52\xf0\x11\x2f\x14\xc7\x49\x11\xb0\xe7\xce\x85\x09\x76\xb2\xcc\xcf\xe6\xf2\xf6\xc1\x87\x36\x5d\x14\xbb\xba\xc7\x0e\x72\x62\x1a\x5b\x6f\xdf\xb7\xf8\x37\xe9\xed\xdb\x74\x7c\xd5\xf6\x4e\xa2\xa7\x67\x52\xcc\x37\x86\xd9\xa1\xed\xf9\x43\xd6\x32\x9e\x1b\x6e\xb5\x5f\x1d\x0e\x3f\xe3\xb9\xd7\xb6\xcd\xad\x86\xbb\x07\x90\x72\x88\x35\xd8\xfc\xd5\x92\x9d\xaa\x5c\xd1\x21\x0c\x0a\x0a\x48\x25\x0a\x22\xbe\x41\xa4\xc0\x86\xda\xf2\xb0\x9c\x95\x00\x2b\xb5\x64\xd2\x53\x01\xf4\x20\x1e\x0b\x0a\x58\xdf\x39\xd1\xc8\x5b\x05\x20\x98\xfe\x86\x67\x09\xa2\x0d\x0f\x26\xe8\x86\x07\xa1\x1f\x1b\xde\x40\x27\x89\x1d\x61\xfc\xc0\x5e\x76\x07\x04\x8a\x2b\xcf\xfb\xb1\xf0\xb0\x3c\xf1\xe5\xc8\xcd\xef\xd0\x95\x11\xb6\x84\x62\xb9\x8e\xb2\x68\x59\xe9\x3a\x76\xbc\xbb\xda\x78\x1f\x26\xdc\x49\x29\x85\xbd\xc4\xe1\x9d\xdb\x0a\x7b\xe9\x2d\x66\x3a\x05\xcf\xc7\x97\x3b\x49\xcc\x27\x2c\x3c\xe8\xee\xf0\x96\x04\x39\xd4\x96\xc2\xd3\xdb\xe1\x50\xdb\xd1\xb7\x2e\x18\x57\xda\x6f\xd7\x98\xbf\x94\x8a\xc6\x19\x98\xf1\x33\x3c\xe5\x90\xf7\xf0\xe1\x5a\xf8\xf6\x9a\x1e\xfb\xa9\x93\x33\x9a\x82\x4c\x3e\x06\xa4\x11\xf2\x57\xd8\x14\x39\x97\xab\x34\x8b\xd5\xab\x61\xd0\x4c\x32\xc0\xfd\xcf\xc9\x2e\x6c\x5e\x6b\x68\xf1\x43\xfc\x0d\x46\x84\x9d\xe1\xeb\xe3\x28\x23\x8b\x52\xf6\x0b\x02\x95\x75\x73\xe4\x11\xea\x58\x4f\xde\xdb\x45\x01\xa1\x3a\x26\x00\x7a\x2c\x88\x88\x93\x1b\xa2\x9b\x43\xfc\x6a\x18\xb4\x79\xde\x4a\x0a\xbb\x6f\xa0\x7e\x63\x68\x5c\x5c\x4b\x0a\x1e\x5c\x73\xf0\x60\x30\x72\x3a\x6b\xe7\x02\xd8\x61\x96\x52\x1e\x1c\x41\xa6\x7c\x6d\x19\x56\x19\xbd\xee\x4c\xff\xd2\xb0\x93\x38\xdf\x10\x22\x8f\x89\x76\x07\x34\x15\x1e\x15\x1c\x34\xa8\x77\x0c\x87\x4f\xd4\xbf\x5c\x24\x42\xb8\xac\xd2\xa6\x7b\x2b\x4e\x3f\x3e\xb4\xab\x66\xec\x50\xcd\x48\x95\x96\xd1\x08\xc3\x59\x65\x7a\x30\x9d\xae\x7a\x86\x7a\xdd\xd6\x0b\x0e\xb2\x03\x9b\x42\xc2\xf4\x18\xe2\x5d\x7d\xe0\xdf\x8a\x2d\x62\x87\x09\xbe\xce\x6c\xa9\x84\x8f\x6a\x71\x50\xb5\x4d\xfc\xf3\x23\xfa\x01\xcb\x1e\xec\xca\xb7\xfb\xe2\xf7\x40\xbe\xdd\xbb\xaf\x60\x0f\xba\x39\x69\x7f\x79\x11\x73\xd2\x9e\xca\x0e\xb3\xeb\xb7\xc7\x8d\xf5\x10\x25\xa6\xfd\xdb\xc8\x92\x79\x68\x53\x2a\x77\x73\x72\xbe\x6b\x39\x39\xff\x5a\x72\xf4\x1e\xda\xac\xdc\x7f\x23\x19\x81\xbb\x49\xb8\xdf\xfb\x49\xb8\xf7\x5f\xc5\x4e\x98\x2d\xd3\xd8\x63\xc6\x75\xf4\x8a\xe3\xaa\xee\x61\x29\x7b\xfa\xc2\xa9\x93\x0b\xa0\x61\xcf\xe5\xa2\x5d\xf8\xbf\x73\x65\xf8\x9c\xca\x35\xd4\x8f\xe5\xc5\x71\xbc\x6a\x71\xa3\xb8\x78\x21\x33\x79\xd4\x2c\x83\x6b\x82\x11\x3a\x37\xdf\x55\x88\x6c\x1c\xf5\xf7\xba\xc8\x97\x27\x46\x2b\xac\x19\x3e\x7b\x0c\xbb\x04\x6d\xfc\xa0\xf8\xfb\x97\x3a\x47\xb6\xe7\xb2\x21\x8a\x54\xf2\xe7\xd9\x5c\x3f\x45\xe1\x5c\x5b\xcd\x02\xb6\xaf\x15\x9d\x3d\xce\xb3\xe5\x72\xc5\xbf\x92\x76\x3f\xa7\x7b\xff\x3d\x1b\x22\xb0\x64\xff\x4a\x7f\x6f\x2c\x3a\x4b\xc4\xcb\x80\x13\x04\xee\x53\xc4\x4e\xcf\xfb\x1d\xb6\x47\x64\xfc\x54\xd3\x4f\x6d\xb5\xe7\x79\xec\xb9\xec\x39\x17\xba\x35\xd6\x78\xc9\x7e\xa3\x08\xe0\x8b\xd2\x6f\x3f\xc2\x2e\xb1\x4a\xf4\x5b\xef\xbc\xe8\x2d\xb2\x66\x0d\x2b\xd8\xa5\xf2\x05\x79\x8e\x9d\x11\x8d\xc2\x6f\xb0\xe8\x42\x7e\xf9\x88\x29\xbb\xd3\x52\xe7\x6f\x76\x15\xdb\x53\x26\x65\xca\x7d\xc7\x6b\xd7\x61\x7b\xa2\x34\x7d\xc8\x87\x37\x60\x8f\xe0\x67\x1b\x69\xa7\x48\x56\xb9\x0a\x18\x73\x17\x4e\x4b\x9d\xa8\x63\xb6\x74\x11\x6b\x72\x2a\x9f\x92\x4d\x66\x4f\x60\x97\xb5\xa2\xb3\xf2\x12\xcf\xc1\x1d\xdb\x73\x31\xfd\x07\xc6\x14\xf4\xeb\xa9\x66\xef\xf5\xb2\xca\xae\x30\xc9\xb4\x28\x11\x2e\xf0\xf0\x76\xb5\xe0\x56\x21\x52\xf6\x38\x36\xdc\x8a\xce\xe2\x07\x7b\xd6\xfd\x05\xec\x2a\x53\x31\xab\xa1\x0f\x49\xed\xa4\x9c\x4a\xb2\xcd\xe4\x54\xcc\x06\x32\x51\xfa\x17\x79\xde\xfd\x00\x1b\xce\x3a\x29\xee\x98\xee\x7c\x7b\x12\x1b\x56\xd0\x85\xfe\xa3\x37\x71\x73\x5f\xc9\x06\x9f\x90\xf3\xa6\xbb\x8a\x7e\xd2\x63\x97\x2a\x7b\x7a\x43\x76\xea\x3d\xef\xf4\x52\x76\x17\x5b\xb9\xa8\x3d\x8b\xa4\xf3\x30\x7f\x6d\xe9\xf2\x68\x29\xdb\x8a\x46\x9e\x40\x5c\xb0\x5b\x51\x67\xdd\xd1\xb6\xe0\xf6\xc3\x0b\x18\x6b\x9b\xc9\xf1\x10\x0b\x46\xb9\x0a\x93\x6c\xab\x55\x78\x25\x51\x61\x3b\x2d\x93\xf3\x3f\xc9\x36\x99\xff\x8f\x62\x43\x84\x93\xee\xbe\xf8\x42\x8f\x3d\x92\x6e\xcc\x7d\xd7\x1a\xfe\x28\x36\xf4\x04\x54\x32\xba\xc5\x73\xb6\xfe\x90\x8b\xe7\x84\x0d\xf2\xac\xd3\xf2\x23\xfb\xab\x8b\xec\x62\xec\xc4\xdf\xc7\xf6\xa2\xbf\xcb\x6d\xf8\x23\x59\x2d\x89\xdd\x4b\x7f\x3e\xc0\x9e\xb6\x2d\x7b\x1d\x04\xc9\x92\xa9\xfa\xa8\xc8\x67\x92\xa2\x21\x56\x79\xbe\xee\xdf\x3f\x10\xae\xd9\x37\x8d\xef\x0d\x1c\x0e\x60\x45\x9b\x20\xe3\x18\xc6\xcb\x87\xfa\x17\xd9\x56\xc1\x34\xa4\xe3\xd0\x91\x25\x19\xe8\x82\xc0\xfa\xda\x41\x74\xd3\x33\x9c\xb7\x95\x67\x91\x08\x95\x37\xbc\x4b\x97\xad\x2f\x6f\x78\x2a\x09\xc5\xd1\x26\x5f\x5c\x63\x09\x73\x1e\xf4\x9f\x15\x1e\xb7\x7f\x57\xb8\xf4\x4c\xa4\x36\xd0\xee\xeb\x74\x11\x0c\x11\x11\x79\xab\xda\x2a\xbb\x43\x7f\xd6\x33\xa9\x30\x2f\xf5\xc2\x1f\x5d\xed\xf9\x89\x5e\x85\x8a\xa6\xe9\x19\x13\xce\x5a\x8a\xa0\x90\x67\x07\x63\x19\x26\x72\xfa\x1c\x76\x49\x30\x84\xb7\xd3\xa4\xd4\x16\x69\x7b\x2c\x1c\xcf\xd1\x77\x86\xd8\x75\xdb\x1a\x6a\xa4\xdd\x89\x8f\xca\x03\x68\x71\x24\x2b\xf3\x75\xff\x13\x43\x61\xd1\x7d\x19\x0f\x00\xf2\x94\xd5\x4c\xc5\xda\x78\x02\xfe\x1b\xb8\xaf\x98\xbb\x4d\x08\x79\x97\x6f\x4b\x9b\xcc\x29\x8c\x1b\xce\xbb\x85\x7c\x0f\xd8\x3d\xc0\xde\xed\x8c\xe3\xaf\xec\x65\x09\xdb\x8b\x8f\xf9\xcf\x63\x37\x9c\x83\xd1\x19\xeb\x1e\x86\xf8\xaf\x1b\x3c\x44\x49\xe3\x58\x7e\x9d\xdd\x29\x55\x7c\xd9\xe0\xdc\x3f\x1e\xde\x8c\x6d\x27\x7e\x57\x3b\x81\x9b\x9a\xa3\xfa\xc0\x38\x56\x11\x7a\x9f\x4a\xb3\x87\xe1\x7d\x1e\xdb\x47\xe1\x41\x22\xf3\x7f\xc1\x0b\x5f\xeb\x9d\x52\x3f\x55\x6c\x25\x44\x16\x89\x66\xa0\x9f\xa3\x1c\x87\x14\x20\x90\x05\x1a\x08\x7a\x8c\xc7\x12\x07\x9f\x2e\xd2\x34\xa0\x95\x01\xe8\x2b\x91\xed\x94\xa2\xe7\x75\x24\x31\x59\x18\x72\x1e\xec\x9f\x6a\xb7\xd3\xf5\xfd\x30\x64\xfb\x91\x02\x6c\xbf\x53\xe9\xfb\x3d\x36\x58\x26\x2d\xee\xbf\xd1\x63\xd7\x9d\x43\xc7\x2f\x26\x2d\x1e\x2e\xc9\xff\x43\x13\x93\x16\x07\x4e\x08\xd9\xc6\x35\x72\x39\xea\xde\x0a\xd6\x80\xcd\x95\x97\x20\x0a\xe8\x74\x1d\xa5\x6b\xd1\x7a\x41\x2c\x64\xe5\x7a\x90\x34\x03\xa7\xd7\xa8\x05\xec\xb5\xae\x8f\xed\x3f\xd5\xc2\x7f\xf2\x36\xf7\xb1\x59\xae\x35\x77\x4a\xea\x1e\xaa\x4c\x4a\xe8\x56\x14\xaf\x90\xee\x54\x91\x70\x77\x75\x8a\x92\xa8\x1a\xc1\x42\xd2\x1e\x4f\xf9\x2a\x4f\x03\xab\x16\x44\x9c\x8f\x82\x2e\xe3\xe0\xb0\xcc\x01\xfa\xa1\xcc\xa3\xc6\x99\x6a\xed\x22\xab\x1e\x4b\xbc\x11\x75\x0a\x4e\x34\xff\xe4\x0b\xaa\x80\x56\xa3\xdb\xaf\x12\x30\xf6\xd9\x41\x87\x0b\xa3\x3f\xb0\x9b\xff\xf3\x83\xe1\x6c\xf7\xe5\x0a\xbb\x00\xf2\x78\xbb\x36\xfd\x00\x69\x84\x79\x2e\xc5\x3f\x06\x1c\xd4\x37\x3c\x50\x2b\x36\x3c\x4a\x58\x77\x56\xf4\x47\x80\x9f\xd5\x4f\xa3\xa2\x5c\xcc\xa3\xac\x80\x0f\xc9\x49\xe2\xbf\xe0\xdc\x67\xd9\x2d\xc7\xa3\xa2\x84\x29\xa6\x30\x06\xa8\x01\xa5\xfe\x84\xf2\x63\x8b\x4c\x73\x7a\x94\x42\xa5\x71\xd5\xd9\xb3\xd8\x50\x4b\x0e\xc9\x32\xf7\x4f\x86\x53\x53\xc1\x4a\xa7\x15\x65\x60\x46\x05\x8b\x0c\xdd\x53\xd0\xd3\xc0\xb6\xc5\xcb\x28\x49\x0b\x0b\x68\xc7\x7c\xcc\x19\x85\xa3\x6c\x6f\xce\xa3\x42\x64\xfe\x53\xc3\x09\x24\x45\x92\xbf\xb4\x89\x4e\xd7\x76\x7f\x11\xa4\xd0\x8e\xde\xe5\x1c\xd7\x00\x00\xb7\x86\x4f\x59\x70\x72\xf3\x75\x11\x63\x8a\xb5\x76\x11\x62\x02\x8e\x46\x69\xc1\xc7\x82\xd3\x19\xd0\x0a\x3b\xa5\x4d\x92\xee\x37\x1a\x3e\x76\x91\x24\x8f\x63\x9c\x8c\xbb\x2b\xf0\xc6\x31\xf6\xef\x7b\x42\x4a\x98\xf4\xd7\x07\x9f\x1c\x1e\xb5\x53\x5f\xdd\x09\x14\x95\xe8\xb4\xd3\x76\x58\x74\xfc\x2b\xc4\x75\x91\x51\xc6\x6b\xa2\x78\xbf\xd4\xa4\x79\xeb\x93\xd9\x27\x07\xd8\xf7\xa9\xb3\x3e\xb1\xa2\x10\x73\xdc\x2f\x0e\x84\xaf\x1f\xe8\x79\x2b\x88\x79\x26\x80\x42\x90\x96\xbb\xca\x89\x40\x53\x27\xcc\x80\x5c\x74\x4a\x1e\xa8\xd7\x65\xdf\x03\xe1\x4a\x29\xc0\xdc\x37\x8e\xa4\x3e\x22\xd7\x41\x3d\x6b\x49\x6c\x7c\xb7\x45\x3d\x08\x8f\xcb\x27\xc2\x00\xbc\x62\xf9\xaa\x22\xe2\x20\x7f\x2e\x0a\x97\xd9\x39\x32\xf0\x89\x24\xc6\x6d\x47\x76\x70\xb0\x22\xda\x30\x09\x6c\xaa\x15\x78\xf0\xa4\x88\x39\xa4\x73\x60\xb4\x29\x56\xba\x40\x2f\x47\x9e\x14\x67\x8a\xa0\x2d\x4a\xb9\x1d\xc1\xda\x4f\x5a\xc4\x17\x13\xeb\xda\x17\x6d\x39\x73\x81\x21\x2e\x9c\xc6\x8a\x87\x81\x58\x2a\x1a\x80\xfa\xdf\xb7\x82\xad\x68\x3d\x40\x51\xe3\xd4\xd1\xac\x13\xe8\x13\xac\x87\x9d\x59\xb6\x2c\x44\x0c\x79\x61\x51\x9a\x22\x83\x8d\xa9\x80\x3d\x81\x1e\xac\xb1\x2b\x57\x78\x94\x96\x2b\xd3\x2b\xbc\x71\x46\x36\x73\x4e\xe4\xa5\xff\x35\x4d\x56\xf6\xd9\x5a\x8f\xfb\x55\xda\x63\x78\x02\x98\xad\xa1\x3e\xf0\x48\x85\x17\x07\x92\xfb\xc0\x19\x64\xd2\xfb\x8e\xf5\x28\x39\x29\x34\xc1\x91\x02\xa2\xa0\x29\x12\xb5\x93\x60\x29\x6a\x9c\xe1\x99\x45\x69\x1d\xa5\x90\xb2\xcd\x63\xfd\xe1\x7a\x70\x67\x92\xa6\x90\x5e\x04\x51\x40\xfa\x7b\xa6\x6a\x44\x46\xd6\x34\x75\x51\xdf\xc2\x41\xa0\xec\x6e\xde\x6c\x02\x96\x10\xec\x8d\xb0\x24\x21\xd1\x06\xf4\xe0\xae\x19\x72\xa4\xe7\x74\xb7\x5f\x68\x00\x7b\x8e\x75\x6c\x7b\x5b\x8d\x5d\x51\x70\x08\xa8\x99\x6a\x82\x90\x5d\xf7\x5f\x59\x0b\x5f\x54\x5b\xc0\x68\xe6\x42\x4e\x15\x59\x9f\xd9\x39\x52\xd9\x4f\x8a\x8c\x87\x40\xd5\x13\x23\xc3\x1f\x32\xc0\x05\x54\x4a\x10\x51\x31\xf5\xe0\x48\x86\xd9\xe6\x38\xa9\x66\xe7\x28\x03\xae\xfb\x41\x15\x53\xad\xbe\x24\x57\x96\xfc\x8c\x1b\x2a\x84\x57\x76\x68\xf8\x57\xcb\x64\x9c\x88\xc0\x92\x6c\x59\x5d\x9b\x78\xfc\x6a\x92\x97\x9d\x28\x1d\x4f\xda\x05\x82\x80\xe0\x8d\xf1\x76\x2e\xce\x26\x6e\x04\xca\x3f\xed\x25\xc9\xf8\x77\x7b\xc3\xaf\xed\x85\x15\xa8\x49\x16\x90\x84\xb2\x92\x5d\xc5\xcf\x82\xbb\xd1\x6d\x02\xad\xba\xd9\xb9\x7a\x70\x07\x28\x62\x8a\x33\x58\xaa\x5e\x6a\xf4\x4e\x46\x2d\x3e\x66\x1e\x1d\x0b\xd4\xbc\xc4\x70\x1c\x7b\xd4\xeb\x41\x68\xbf\x15\x06\xad\xa8\xad\x43\x7a\xcc\xc4\xe2\xd6\x33\x66\xed\xc3\x88\xd2\xd4\x05\xdf\x12\xc9\x32\x1d\x03\x24\xd7\x7f\x1c\x03\x61\x14\xe2\x12\x68\x12\x2a\x50\x6b\x85\x2d\xf0\x8e\xa8\x3f\x35\xf3\x17\x74\x8d\xb5\x80\x88\x0e\x4f\xe4\x28\x77\x51\x65\xaa\x2c\xc6\xa5\x75\xa9\x36\x77\x20\x25\x32\xc3\x03\x9f\x89\x6d\x32\x9f\x50\x51\x4e\xb3\x4d\x55\xe9\xd9\x39\x50\xc0\x60\x6e\x8e\x05\x99\x08\x68\x68\x03\xbc\x61\x56\xa8\x3a\x8a\x70\xa7\xbe\xed\xce\x52\x9a\x14\x2b\x9c\xbc\x6c\x74\x00\x30\xcf\xe4\x11\xa1\x5a\x45\xb0\x19\x95\x30\xaf\xe5\x28\x86\x6a\x6c\xc2\x60\xa9\x93\xa4\xc8\x26\xaa\xfb\x97\x38\x17\x4c\x17\x83\xf8\x16\x59\xc0\x81\x02\x56\xca\x02\x52\xe7\x61\xbf\xd1\x23\xd7\x30\xd3\x24\xb4\x87\xdb\xfe\x88\x16\x56\x80\x12\xa1\xd8\x49\x32\xb3\x67\x39\x9c\x61\xc1\x88\x94\x34\x3a\x41\x81\x0e\x9b\x2a\xee\xa2\x91\x8a\x4e\x3c\xba\x55\x55\x2e\xe4\xca\xa3\x0e\x4f\xb2\xe5\x71\xfd\x9c\x5a\x7d\x10\x6a\x64\xaf\xbd\x57\xef\x61\xfb\x74\x3d\xfc\x17\xef\x09\xbf\x35\xe8\x0c\xbb\xac\xa7\x35\x57\x2b\x5c\x83\x44\x0e\xd8\x29\x3a\xb0\x2f\x46\x45\x91\x2c\x67\x48\xb3\x1e\x8b\x56\xba\xae\x66\x68\x2b\x42\x82\x9a\x59\x98\x6c\xaa\x30\x29\x3c\xf5\x3a\xc2\xb9\x29\x0b\xc1\x32\xe5\xec\x4d\x32\x10\xf3\x4b\xeb\x18\x81\x58\x18\xa0\x83\x25\x7b\x67\x70\x73\x38\x6f\x34\xe1\x8a\x63\x38\x78\xd6\x81\x58\x55\x1c\xd3\x65\xa2\x24\x25\x13\x00\xaa\xfe\x8d\x28\x0b\x48\xd9\x6f\xac\x44\xd9\xb2\x2c\x7b\x25\x87\xd0\x66\xa2\x01\x50\xb2\x85\x0e\x79\x72\x7e\xab\x85\x81\x27\x26\xb2\xb5\x8c\x84\xe1\x28\x04\x27\x47\x74\x2a\x34\x7d\x58\xa7\x37\x34\xce\x84\xee\x02\x29\x08\x56\x78\x14\xa7\xb2\x73\xd4\xd0\xe1\xee\x24\xa5\xe6\x3a\x21\x3f\x20\x6d\xa7\xa2\xaa\x81\x9d\xcc\x9c\x9b\x40\x81\x29\xb6\x2b\xe1\x66\x97\x33\x91\x23\xd5\x60\x49\xfb\xdf\x11\x47\x9e\x7d\x97\x76\x84\xbf\xaf\xb1\x4b\xd4\x62\x9b\x9d\x2b\xfc\xaf\xd5\xc2\x4f\xd5\xac\x0b\x6e\x88\xa2\xe9\x5b\x3a\x77\xe3\x62\x43\xe7\x71\xe2\x70\x24\xe1\xc0\x03\x1f\x6c\xd4\x80\x8c\x6d\xa5\xc0\xe9\xf3\xba\xd6\x67\x08\x4d\x42\x7e\x4e\x05\xba\x58\x5c\x92\x86\x80\x08\x9f\x44\xc5\xba\x07\x53\x26\xcf\x0a\x64\x4c\xc6\x03\x2f\x7d\x2e\xca\xf3\x64\x15\xc8\x8b\x82\x88\x84\x95\xce\xb5\x96\x02\x21\x98\x82\x6c\x63\x61\xd0\x22\x60\xdf\xeb\x25\x7f\xac\x10\x0b\x59\xc7\x76\x94\x6b\x9e\x46\x8b\x25\x89\x32\xa4\x36\x71\x0f\xfc\x5c\xcd\xf8\xf6\x80\x75\xf4\xa5\xb5\xf0\x9f\x3d\xfb\x8a\x12\x08\xba\x1e\x56\x1e\xb5\xac\x82\x9c\x1a\x71\x06\xa4\x3b\x72\x7e\xae\x46\xa9\x94\x80\xd0\xe5\x18\x15\x8c\x5b\xc0\xf4\xc9\xa9\x13\x47\x20\x5e\x36\x8f\x7b\xf4\xfb\x49\x61\xa6\xbb\x5a\xec\x49\xb6\x2a\x52\x08\x70\x36\x39\x62\xb8\xb0\xe6\x8f\x4e\x8f\x4f\x4e\x1e\x3c\x14\x28\x8e\x51\x74\x7f\xcb\x99\x5a\x0a\x91\x16\xf5\x84\x97\x4d\x70\x7f\xaf\x94\xad\x74\x22\x6f\x36\xe4\xd3\xa3\x14\xb3\x03\xab\xa8\x40\xe5\x0f\x93\xc2\x9c\xf9\x6f\x77\xcf\x9f\xd4\xd8\xe5\xa9\x4d\xd1\x38\xe7\x7f\xa1\x16\x3e\x50\xab\x2e\x40\xa5\xa7\xc8\x32\x0f\xbb\x7a\xa4\xf3\x03\x9a\xb6\x2c\x8f\x7e\xa4\x0e\x6b\x9d\x77\x76\xce\x12\x0a\x8a\x58\x9c\xac\x19\x28\xad\x78\x54\x76\x72\x95\x07\x01\x5b\x96\x0d\x0e\xd9\xc9\x62\x9e\xa7\xd0\x7f\xb0\xfb\x8c\x13\x2d\x64\xae\x76\x29\x25\x77\xd7\x95\x35\xd3\x6d\x97\xe2\x95\x97\x57\x03\xbd\xcb\x19\xc5\xdd\x91\x99\x7a\x84\x2c\x51\x02\xeb\xcd\xf9\x70\x2c\x78\x61\x42\xc5\x72\xb2\x45\x62\x33\x9c\x5e\x7e\xf5\x00\xfb\x01\xbb\x36\x98\x5c\x39\x2f\x85\x71\xe1\xff\x63\x2d\xfc\x4a\x6d\xd6\x56\xeb\xe5\x28\x76\xe5\x06\xb6\xd3\xa8\x6c\x8a\xbc\x45\xd9\x19\x34\xff\xe4\x07\x1a\x66\x01\x2a\xc1\xde\xa3\xb2\xee\xee\x6e\xe2\xda\xb1\x04\x6b\xc3\xd1\xd5\xd0\x6a\x78\x71\xa1\xfb\x26\xdc\xa6\x08\x2e\xa3\xe2\x4c\x31\x21\x65\x5a\x51\x8c\xc3\x6c\xc4\xa0\x90\x71\x12\x7c\x13\x0a\x05\x92\x8f\xbb\x9f\x1f\x6f\x26\x39\x5f\x8b\xd2\x74\x62\x13\xd1\xf0\x9a\x01\xb6\x07\x26\x8e\xff\xd2\x81\xf0\x4d\x10\xa4\xa3\x84\x2f\xce\x27\x2d\x81\x48\x35\xc7\xa1\xb0\x57\xf5\x43\xba\x93\x98\x86\x1c\x60\x75\x36\xb6\x0d\x8c\x4e\x28\x40\x6e\x93\x0f\x7a\x07\xd9\xa3\x9d\x70\x55\xd9\xd2\xf1\x56\xd4\x1e\x3f\xc3\xd7\x0b\xff\x2a\xdf\x1f\x87\x46\xb3\x71\x29\xa6\x4a\xd1\x10\x29\x7b\xd0\x0b\xd8\xa3\xba\x5f\x82\x43\xcd\x5e\x7f\xb0\x15\xb5\xd9\xb6\x02\x66\xa1\xdc\x1d\x04\xcc\xbe\x6f\x80\xfd\x00\xa9\x7b\x27\x45\x09\x81\x4a\x53\x6a\x27\xf4\x5f\x33\x10\xfe\xf8\x40\xbf\xbb\x44\xd7\x4f\x87\x57\xcc\x67\xb1\x59\xde\x22\x20\x6e\x0e\x12\xb9\xf5\xe8\x40\x8c\x02\xd3\xb3\xa8\x4c\x82\x9a\xa8\x14\x0c\xae\x92\xce\x52\xc1\x2d\x8a\x5d\xeb\x00\x53\x14\xa2\x91\xb8\xe2\x6e\x41\x4d\x91\x9e\x7c\xe2\x2a\x89\xc5\x82\x96\x91\x3a\x21\xc0\x6f\xc9\xf2\x55\x82\xb3\x65\x49\x46\x7f\x0e\x1a\x55\x5c\xca\xf4\x63\x4a\xbb\x52\x42\x1a\x90\x61\x45\x3b\x02\xf4\x8c\x85\xf9\x3b\x68\x57\xc2\xaa\x27\x65\x81\x94\x4f\x8a\x51\x5f\x6e\xed\xc4\x02\x58\xae\xf0\x24\x0f\xd0\xe4\xa2\x0e\x71\xed\x4e\x2e\x27\x3f\xac\x0a\x2e\x17\xb6\xf2\xde\xb9\xa9\x30\xef\x1a\xb0\x18\xd1\xff\xf3\x40\x78\xef\xc0\x3c\x58\xc4\x34\x81\xb7\x31\x88\xb5\xd5\xd7\x89\xe4\x5c\xce\x40\x74\x97\xa1\xfe\x09\xc4\xe6\xba\xf5\xaa\x50\xc3\x6b\x2e\x77\x62\xd0\x09\x30\x80\x7c\xcc\xd1\x81\x13\x18\x8e\x4e\x0b\x05\x1a\x02\x16\x59\x67\x1c\xca\xf1\x31\xbe\x16\xd9\x1d\xfa\xd8\xa6\xf0\xc3\x2c\x0d\x03\xa4\x1d\x68\x49\x22\x4e\x9a\xeb\xdf\x43\xaa\xe9\x3b\x2b\xf2\xce\x76\x6f\x6f\x78\xec\xfb\x2a\x46\x1c\x04\x0c\xf6\xef\xf5\x36\xc9\x8a\x35\x92\xa5\xc7\xab\xe1\xd1\x9e\x25\xba\x3e\x5d\x07\xb6\x17\x97\x55\xd5\xb8\xc3\x5e\x77\x89\x63\x1f\xce\x97\xa2\x06\x80\x33\x60\x17\xcf\x8b\x94\xfb\xdf\x64\xe1\x4b\x3c\xeb\x02\xe5\xa3\x93\x3a\x0c\x4e\x93\xb1\x20\x15\xcb\x00\x96\x04\x4e\x16\xf2\x15\xa3\x85\x6b\xbe\x93\x2a\x79\x40\xe7\x15\xad\xf3\xd1\x81\xbe\x93\x25\x25\xc2\xbd\xc9\xe2\x6f\x4d\x90\x59\x51\xe4\x81\xf5\x51\xba\xea\x9a\x98\xff\x66\x98\xad\x58\x19\x2e\x3f\x74\xbe\xa8\x9d\x8f\xd9\x04\x27\x93\xbd\x80\xed\xc9\x65\x53\xfc\x3c\xbc\x06\xdb\xb4\x22\xe4\x69\x3f\x02\x32\x74\xee\xb4\x56\xab\xa4\x56\x0b\xec\x3d\x65\x82\x8d\xb3\x27\xf7\x1d\x79\x35\x08\xa6\x44\xf6\x8e\x1a\xbb\x42\xc1\x17\x25\x22\x93\xd7\xfc\xd7\x6c\xc6\x2b\xaf\xca\x98\x72\x5f\x0a\xff\xd8\xab\x5c\x21\x57\xa9\x06\xbd\x46\x01\x58\x61\x99\x07\x0b\x9a\x40\xfb\x06\xa6\x53\xf5\x6d\x26\x88\x8e\x1e\xdf\x28\x78\x69\xa5\x2d\xe2\xfb\x72\xbb\xef\x82\x2b\x45\x95\x0c\x19\x65\xe9\x10\x0d\x6b\x1f\x5f\x51\x0a\x51\x51\x0a\xa0\xaa\x57\x56\x59\x93\xbb\xb0\x9b\xbe\xb7\x8b\x12\x7c\xd1\x12\xec\xef\xda\x3a\x27\xed\x36\xff\x88\xce\x49\x83\x55\x18\x75\xca\x15\x91\x27\xf7\xf4\xcc\x4c\xb3\x56\x4e\x35\x37\xed\x55\xfb\xd8\x66\x5c\xac\x88\xb1\x32\x05\xdc\xc3\x52\xbf\x82\xdc\xd7\xaf\x0e\x87\x53\xbd\x6e\xf4\xc2\x10\xa9\x3e\xb7\x79\x5e\xec\xcf\xec\xe6\xc5\xee\x74\x61\xbd\x40\x45\xf1\xe6\xe1\x93\x66\x7b\x41\x72\x55\x47\xc0\x39\x77\x3c\x8d\xdd\xd8\x3f\x76\x66\xcb\xd9\xb0\xbb\xaa\xb7\x9f\x26\xfb\x51\x3b\x4d\xf6\x97\xce\x33\x4d\xb6\xd5\x3b\x4d\xf6\xa2\x65\xc9\xb6\xb6\x96\x48\x4f\xf7\x8f\x6d\x45\x83\xdb\x4b\x66\xf4\x04\xff\xf8\x89\x2b\xd8\x93\x7a\xe7\x78\x56\xb9\x68\xfd\xaf\x5e\x1e\x9e\x74\x2f\xa9\xf9\xbf\x23\xea\x06\x8b\x33\x76\xc3\x1b\x2e\x79\xab\x2d\x57\xbd\x23\x9b\xbe\x71\x19\x7b\x51\x8d\x5d\x51\xc9\xb4\xf1\xff\x56\x67\x05\x7d\xc5\xa3\x38\x7b\x2b\x33\x08\x9d\xe5\xb6\xb9\x37\x0a\x32\xbe\xa6\xd9\xe4\x63\x48\xf6\xb1\x92\x86\x20\xbf\x47\x1d\xe4\xa2\x6c\x5d\x21\x52\x6b\x18\xb2\xa0\x91\x47\xe0\x35\x19\xa3\xc3\x1f\x19\x04\x1b\x02\x20\x99\x65\xe3\x74\xbe\x90\xeb\x79\x3c\x10\x8c\xc8\x8f\x29\xe5\xa6\xd7\x0b\x52\x55\x2e\x84\x00\x03\x68\x52\xa2\x99\x38\x8a\xd7\xdd\x74\xa2\x37\x0f\xb0\xef\x6f\xe7\x62\x59\x1e\xa4\x67\xe4\x49\x35\xc9\xb8\xea\x8d\xfb\x06\x54\x6f\xfc\x4d\x0d\x12\x44\x31\x02\x1a\x23\x70\xc0\x43\x6c\xfa\x23\x22\xf6\x7d\xd8\x16\xc0\x8d\x7c\x46\x1e\x9e\xb1\x60\x85\x70\x8a\xb5\xb0\xea\x4a\xf8\x90\x51\x92\xaa\xa0\x36\xab\x14\x4b\xcf\x83\x66\xca\xdf\x49\xd6\x51\x07\x68\x38\x28\xe2\xab\xd6\x5b\x78\x54\x8d\xac\xe0\x20\xc2\x8c\x9e\xab\x34\xf2\xc8\xd9\x06\xe7\x31\x8f\x55\x9c\x8e\x56\x13\x3b\x79\x33\x6a\x18\x9f\x9a\x55\x21\x8c\xcb\xb1\x11\x70\x75\x03\xf5\x39\x74\x89\x07\xbc\x28\x93\x16\x66\x1b\x2a\x23\x3c\xc7\x3e\x73\x3a\x29\x29\x82\x76\xd4\xe9\x72\x29\x5f\x7b\xe0\x40\xe1\xba\xf4\x5f\xe5\xb1\x61\xc2\x4b\x2a\xfc\x17\xeb\x19\xda\x3e\xa9\x27\xa6\x5a\x08\xf2\xe8\x6e\xe2\x4b\x23\x0c\xd4\x42\x64\xdb\x38\x29\xa4\xc8\xee\x24\xc5\x8a\xe2\x89\x0f\xf8\x59\x44\x29\x03\x10\x74\xe8\x37\xc7\x7d\xeb\xd6\x6b\xd2\xad\xd4\x67\x3d\xcb\xa0\xf0\x09\x8f\xdd\x72\x2e\x12\x30\x5a\xe2\xa9\x62\x5a\x0a\x5f\x00\x3f\x8d\x63\x19\xac\x1b\xd0\xa0\x23\x67\xb1\xf2\x36\x0e\x55\xb0\xb6\x22\x0a\x8e\xc6\x0a\x48\xae\x86\xd7\x2c\x23\xa0\x1a\x4f\x80\x14\x91\x4a\x46\x04\x91\x17\xd6\x13\xb1\x45\x2d\x7d\x0b\xdb\x8b\x83\xe1\x5f\x1b\x8e\xcc\xba\x36\xa9\xca\x2c\x30\xe3\xe6\x58\x58\x1e\xf0\xd8\x55\x39\x65\x5d\x1e\x4b\xa4\xd0\x5c\x3f\x9e\xb4\x92\xd2\x7f\x87\x1e\xb1\x57\x57\x32\x0d\x45\xea\xb0\x7a\x43\x9c\x12\x2f\x09\x37\x35\x4a\x53\xb1\x16\xc8\xf9\xbf\x14\x35\xce\x5c\xac\x51\x3d\xe8\x8e\xea\x3b\x3c\xc6\xd4\x27\x17\x85\xbf\xe1\xb1\x6b\xb6\x93\xac\x3f\x59\x9f\xa7\x97\xc8\xd6\xb0\x34\x73\x64\x6e\xfe\xc8\xf4\xd4\xe2\x91\x19\x82\x8f\x45\x63\x43\xa5\xdf\x41\x26\x89\x14\x00\x6a\x97\x20\x3c\x52\x50\xa4\x0d\xe0\x2b\xf1\x08\xe4\x59\x53\x36\x56\xd5\x4a\xbe\x12\x8b\x8c\xd7\xd9\xaf\xc9\x19\xa8\xcc\x93\xef\xf5\xb6\x07\x2b\xe0\xf2\x90\xe3\xcb\xe1\xd1\xc5\xea\x3a\xc7\x1b\xca\xa2\x07\xe3\xd2\x4e\xa3\x06\x0f\xb8\x9a\x8a\xc6\x4a\x96\xf1\x35\x44\xc6\x7e\xd0\x1b\xdb\xdc\x86\x7a\x99\x7f\x09\x8e\xef\xed\x7c\xbd\x60\xec\x6e\xa6\xf7\x26\x9f\x6f\x83\xd4\x69\x4e\xc4\x8b\xf4\x3c\x30\x1c\x4d\xaa\x5f\x95\xf8\x3b\xa8\x1a\xcc\x5c\xbd\x3b\x90\x0f\x85\xbd\xee\x92\x5e\xec\xf4\x88\xb7\xb0\xd0\x88\x52\xee\xff\x23\x0b\x0f\xc2\x5f\x2e\xb6\x64\xd1\x88\x52\x8b\x90\x91\x44\xbe\x46\x98\x74\xf6\xd6\x3f\xdc\xb7\xab\xf7\xef\x1e\xa8\x2f\x96\xea\xfd\x45\x5b\xf5\xfe\xaf\xde\xf9\x1a\xf0\x2c\x94\xca\x0a\x59\xfb\x8d\x17\x1b\xa7\xd2\x18\x0a\x3f\xaf\x38\xcf\x3e\xed\xb1\x89\xed\xa1\xa3\xc0\x1a\x05\x31\xf0\x2a\xcf\x5e\x4e\x55\x5d\x58\x2e\xdc\xf3\x1b\x9a\xed\x34\xa5\x42\xbb\x55\x67\xbf\x6f\x88\x50\x3f\xe7\xb1\xc9\x9d\xb4\x09\xc9\xcb\x7e\xd6\xeb\x46\xc6\xf9\xee\xb5\xc7\x22\x2c\x3b\x3f\x0a\x7f\x68\x62\xf7\x31\xe9\x20\x63\xef\x1e\x74\x6c\x37\x51\xa7\x14\x24\x74\xeb\xab\x07\xb1\x7f\x4e\xf0\x32\x4f\x1a\xb3\x3a\x45\xc5\xff\xa7\x81\xf0\x68\xf5\xa2\x23\x5c\x21\x36\x41\xca\x38\x8b\xf4\xc4\x51\xb0\x22\x39\xdd\xf3\xa4\x41\x48\x84\x8e\x1c\x7f\xc3\x00\xbb\x81\x40\xfa\x26\xc3\x27\x64\x56\x2c\x86\xcd\x66\xb0\x9c\xac\xf2\x8c\x4a\xb1\xd7\xe9\x1f\xd5\x2c\x05\xf1\x0b\xb5\x0b\xa0\x20\xbe\xb4\xa6\xab\xae\x4e\x85\xf0\xa9\x71\xc5\x1b\xa2\x72\xad\x20\xa2\x0f\xd7\xb4\x19\x26\xf2\x66\x39\xad\xaf\xd6\x3f\xb8\x93\xfc\x93\x63\x74\x54\x69\x47\x45\x41\x3e\x87\xcc\x26\xfd\x6d\x47\x79\xd4\xe2\xa4\x84\x41\xb0\x19\xbc\xaf\x69\x3f\x9a\x0a\x0b\x42\x9d\x5b\xcd\x03\x0d\xd1\x86\x88\x6d\xf8\x54\x27\x83\x8f\x41\x62\x89\x29\x06\xc2\x5e\xaa\xa4\x27\xcb\x18\xb2\x48\xe5\xd4\xd9\x9b\x86\x7a\xf2\x36\x4e\xdd\xd3\xc9\xf9\x4c\x52\x9c\x71\x00\xa4\xff\x7e\x6f\xb8\xa8\xef\x38\x3b\x7b\x16\xc0\xf5\x60\x26\x2a\xa3\x00\xee\x22\x2c\x32\xd1\x5a\x00\xe4\xb1\x9c\x40\x4b\x72\x4f\xc2\x5b\xd4\xe4\xb6\x88\xe5\xf1\x3a\x4e\x8a\x33\x27\x01\xc4\x72\x48\xfe\x79\x7a\x7e\xd6\x99\x44\xdf\xde\xc3\xfe\x58\x01\x4e\x7e\xd9\x0b\x7f\xd3\x3b\x72\xb6\x8d\x6a\x38\xb9\x13\x17\x56\xa4\x96\x77\x38\x50\x89\xe2\xc1\x52\x2a\x96\xa4\x62\x7b\xa6\x08\xda\x3c\x57\xe6\x87\x20\x6a\x34\xe0\xeb\xc1\x0c\x47\xed\x3c\x3e\x1c\x14\x49\xb6\x6c\xbf\xd1\xfb\x05\xca\xa6\x3a\x1c\x44\xd0\x52\xe5\x33\x00\x1b\x0b\xbc\x35\x02\x99\x54\x49\x66\xdc\x09\x78\x84\x86\x54\x44\x39\x1d\x46\xeb\xca\x47\x8c\x59\x7b\x50\x65\x7b\xb2\x7f\xf7\x60\xb4\x6f\x67\x97\x34\x60\x01\x2d\x9f\x10\x31\xf7\x9f\x1a\x4e\x1c\x93\x43\x36\x8d\xd7\x82\x96\x88\xf9\x61\x88\xb4\x1e\x83\x82\xc1\x3f\x4a\x7f\xde\x29\x6b\x53\xc9\x61\xd1\xc3\xe9\x1f\x0e\xc7\xa5\x5a\x6c\x63\x73\x9a\x1e\xa3\xb3\x31\x74\x3c\xf5\xb7\x5d\xce\x14\x53\x73\xc1\xbf\x36\x1c\x95\xc5\x9c\x9e\x9f\xdd\x59\x11\xbf\x6e\x50\xbd\x3f\xe8\x85\xbf\xe8\x1d\xed\x83\xdf\x5d\xbf\x18\x00\xde\x63\x41\x98\x95\xe7\x0d\xe4\xfd\x86\x61\x36\xba\x39\x66\xf1\x6c\x06\xd6\x03\xb0\x7d\xfd\xf5\x50\x78\xa3\xf5\xbb\xa2\xd3\xd3\x1d\x0c\xb5\x2a\xc0\x22\x52\xac\xa0\x97\x0b\x8e\x24\xae\x06\xfe\x96\x21\xf6\xb1\x1a\x1b\xa2\xc4\x06\xff\x97\x6b\x9b\x30\xa9\xf6\xaf\xd6\xad\xf8\x7a\xf8\xb7\xde\x94\x0e\x91\x50\xb9\x12\x00\x72\x4f\x39\xaa\xe0\xd0\xb6\x0e\x07\x74\xf8\x88\x45\xb6\xbf\xc4\x68\x01\xb0\x7d\xe5\x1d\xb9\x71\x4f\x29\xa4\x1b\xca\x60\xda\x4f\x25\xee\x0f\x44\x1e\xec\x07\x77\xe9\x7e\x0d\xc8\x6b\x1d\x5a\x17\x9d\x50\x0b\xed\x7b\xd4\x07\x65\x15\x51\xa6\x43\xa8\x2c\xeb\x91\xc8\x55\xfd\x81\x45\x47\x2c\x63\xa0\x83\xe2\x26\x8a\x82\xe5\x54\x2c\x45\xa9\x7a\x08\xb4\x17\xf2\xdc\xfe\xb6\x17\xbe\xc8\x9b\xd2\xe6\x77\x98\x40\x70\xc7\xa2\x53\xa3\x18\x27\x7b\x9c\xba\x59\xa7\x20\x28\x02\x5e\xc5\x2e\xe1\xc5\x18\xfa\x81\x29\xf0\x02\xfc\x9d\x46\xb8\x56\xfa\xdb\x09\xa1\xbc\x91\xdd\xd0\x3f\x87\x6e\x93\xf1\x04\xb7\xf0\x8f\x0f\xb0\x81\x32\x2d\xfc\x7f\xa9\x85\x1f\xa8\x01\x35\x8f\xed\xf2\xaf\x07\xd3\xa8\x75\x11\x39\x9a\x9a\x76\x20\x20\x75\x20\x5f\xa4\x04\xaf\x7c\xbf\x0d\xb1\x14\xd7\x5c\x73\x08\xda\xac\xa5\x78\x8b\xb7\x96\xe4\xa9\x43\x9d\xe6\xa0\x07\x55\x8f\xc7\x49\x13\xf1\x6f\x91\x1f\x8b\x68\x2c\xd5\x8e\xa7\xca\x38\x6b\xd8\x95\x00\x92\x19\xe2\xd4\xa4\x54\xcf\x63\xca\x57\x50\x6b\x1a\xf4\x11\x13\x19\x67\x87\xd9\x2d\x9c\x9c\x85\x6a\xea\x6e\x19\x53\x11\x71\x09\xb5\xcd\x9a\x28\x44\x54\xa3\xce\x57\xea\x09\xdd\xf0\x85\x93\xb3\xf5\xf3\x02\x29\xa7\xfe\x5c\x3c\xbe\xc0\x5e\xed\xb1\xab\xb7\xa5\x04\xcd\xc9\xe9\xe2\xf3\xf0\x99\xf0\x07\x12\x76\x41\x18\x1d\xaa\x05\xc9\x2a\x47\x73\x67\x23\xe7\xa5\xa5\xf1\x29\x29\x59\x09\xc9\x9d\x9b\x5a\x9c\x3e\xa6\x8f\xf1\x4b\x02\xf0\xe3\x4c\xe4\xc9\x7b\x2e\xb5\x6b\xa5\x73\x49\xe7\xd1\x48\x83\xf9\xc3\xc6\x82\xe2\xdf\x7b\x69\x78\x1d\x48\x2b\x5c\x08\xb2\x1f\xfb\x5a\xe6\x95\xa1\x07\x0f\x8f\xae\xc0\xfa\xc8\x25\xec\xcf\xf6\x00\x22\xcb\x42\x27\x5f\xe6\xfe\xef\xef\xd9\xee\xb9\xae\x53\x26\x69\x3d\xc9\xca\xa2\xcc\xeb\xb3\x59\xa9\x50\x3e\xc2\xd7\xee\xb1\x2d\xd6\xc6\xe6\x66\x8c\x23\x2a\x14\x5e\x41\xa0\x11\x87\xa1\x5d\x7d\xf7\x35\x88\xc3\xef\x70\xf5\xa2\xd4\x08\x97\x0a\x91\x76\x4a\x6d\xd3\x1b\xe1\x67\x0f\x07\x4f\x19\xc5\x18\xfc\x36\xcf\x1b\x3c\x2b\xa5\x2a\x52\x31\xd1\xe2\x73\x93\x07\x9e\x38\x4a\x72\xcd\xca\x01\x38\x20\xa7\xe7\x89\xe8\xac\x85\xde\x27\x87\xfc\x40\x3d\x98\xaa\x7c\x0c\xde\x4b\x1b\x44\xb0\x0c\xc7\x79\xeb\x93\x4b\xeb\x01\x60\x41\x63\x8f\x57\x8c\x7e\x4f\x79\xa2\xdc\xf4\x20\xc4\xfb\xb0\xca\xd2\x26\x8a\x2d\x8c\xcd\x3b\x74\xe0\x89\x44\x4f\xc9\xd7\x2c\x13\xa5\xe9\xb3\x48\x76\x58\xa7\x1d\x24\xad\x16\x8f\x93\xa8\xe4\xe9\xba\x4e\xf7\xae\x8c\x34\x52\x37\x16\x63\x15\x6e\xb7\x2a\xc0\x9c\x48\x31\x8c\x43\x7e\x11\x3a\x29\x16\xd0\x27\x1c\xec\xf4\xc1\xe4\xa1\x03\x4f\xec\x36\x75\x9f\xca\x1a\x1c\xde\x84\x37\x20\x9c\x6c\x89\xf3\x2c\x38\x03\x74\x53\x63\x5b\x56\xbf\xd9\xc9\xa5\x56\x3d\x56\x0d\x98\xaf\xd4\x0d\x4a\xb7\x40\x3e\xe5\x76\x06\x06\x7d\xcb\xc0\x4f\x8d\x4d\x20\xbc\x1e\xa0\x34\x7b\x56\x99\x7d\x6e\x0f\xbb\xbc\xe5\x8c\xaf\xff\xb1\xf3\x9e\xed\xdf\x1e\xdc\xe6\x6c\xef\x58\xd3\xaa\xab\xf2\x17\x65\x82\x9f\xfb\xb4\x8d\xc5\x5a\xd6\x7f\x81\x80\xa0\xa0\xa5\x71\x8e\x93\xdb\xb5\xbf\x57\x66\x87\xfc\xba\x7c\xfa\xba\xee\x41\xdc\xc1\xac\xa7\x29\xaa\x27\x35\x32\xef\x45\xf1\xfa\xd8\x36\xbe\xae\x67\xa7\xcd\x70\xaa\x2c\xb1\x9d\x76\x8f\x05\xda\x35\x91\x7b\x2c\x34\xac\x87\x71\x12\x96\xa8\x87\x24\x2d\x5e\xf4\x9d\xcf\xa8\xb2\xf5\xe8\x8a\x3a\x7b\x60\xa0\x67\xba\xf8\x91\x55\x9e\x95\x0b\x3c\x4f\x78\xe1\xbf\x69\x20\xbc\xdb\xfa\xad\xdc\x9f\x0e\x75\x03\x20\xca\xc2\x5d\xd1\x04\xb6\x48\x29\x31\x92\x3a\xaf\x07\xe5\x8a\x6e\xce\x5a\x54\x4c\x00\x5f\x5d\xbb\xcd\x35\x9f\x53\x92\x75\x44\xa7\x48\x11\x48\x11\x68\xe8\x81\x7c\xde\xd9\x5f\xde\x58\x63\xcf\x67\x7b\xe0\x3c\xe8\xdf\xa9\xdc\x31\xb7\x1a\x07\x9a\x68\xa0\xb5\xa9\xa1\x92\x77\x30\x8a\x5c\x56\xa7\xd3\x36\x26\xe4\xa2\x0c\x56\x78\x94\x97\x4b\x3c\x42\x1c\x02\xc7\x79\x72\x96\x3d\x42\x3e\x72\x8a\xf0\x72\x01\xed\x20\xee\xcf\xe1\xbf\x19\x4c\x4b\xd2\xc8\x05\x40\x1e\x3c\x01\x80\x35\xe8\xfc\x05\x15\x30\x55\xd5\xc8\xbc\xec\x66\xb6\x07\x50\x1b\xe4\x69\x6b\x41\xc1\x37\xa8\x54\xf8\x84\x17\x87\x83\x53\xd9\xb2\xa0\x10\xc9\xa3\x49\x06\xa9\x91\xf6\x51\xe5\x2f\x98\x03\x21\xd1\x23\xa6\x93\xa2\x29\xfd\x5f\x67\xe1\x9b\xbc\xee\xeb\x26\x42\x13\x92\x6d\xcc\x7d\x4c\x23\x97\x6b\x57\x8f\x7a\x89\xec\x86\x0d\x40\x5e\x50\xb9\x3c\xce\x4b\xea\x70\x48\x7a\xb9\xa6\xd2\x40\x7b\x7d\x14\xc7\xe0\xfe\x73\xe6\xcf\x6a\x12\x05\x0b\x1d\xf4\x0e\x6c\x78\x43\xb9\x48\xf9\x3c\x6f\x3a\x93\xe0\x95\xc3\xbb\x7e\x89\x5d\xbf\xc4\xc5\xf2\x4b\x3c\x74\x61\xc5\x0f\x78\x4c\xcd\x6f\xff\x43\x1e\x1b\xd9\x32\xa2\x77\x1e\x1f\x0e\x7f\xc2\xa3\xbf\x60\xed\xc1\x99\x6e\x87\x0b\x50\x73\x83\x5b\x05\x51\xdf\xcb\xf1\x4e\x57\x91\xac\x9e\x07\x53\x14\xc1\xc8\x73\x3c\xcc\xab\x54\xbc\x2c\xe0\x79\x2e\xf2\x3a\xbb\xcf\x63\xc3\x05\xae\xd7\xc2\x3f\x1b\x3e\x8d\xd6\xae\x0a\x91\xb6\xc4\x09\x2d\x14\x0a\x35\x54\x5b\x2d\x77\xc1\xa4\xcc\x99\x6c\x8c\x5d\xbd\x8d\x2e\xa1\xcf\x3d\xe8\xdd\xbd\xb5\x31\xff\xa4\x7f\xfc\xdc\xc2\x33\x49\x36\x56\xa3\x34\x7f\xff\x52\xc7\x72\x5b\x8d\xcb\x9b\x5e\x98\x3d\x29\x62\x3e\x93\x27\xab\x3c\xf7\xdf\x75\x69\xf8\x5c\xe7\x0a\x75\x90\x2d\xfb\x0c\x36\x4d\x57\x98\x94\xc8\x78\x30\xbd\x30\x1b\xc4\xf8\x6e\x92\x15\x65\x24\x55\x63\x44\x61\xc9\x44\xcc\x35\x07\xd1\x5e\xf9\xab\xc2\x10\xf8\xee\x4b\xd8\x03\x7b\xd8\xa5\xa5\x68\x8b\x54\x2c\xaf\xdf\xce\xd7\x0b\xff\xbd\x7b\xc2\x9f\xd9\x63\x5f\xa9\xc6\x28\x42\xc2\x48\x97\xed\x0d\x6b\x40\x76\xef\x48\x57\x48\xb6\x24\x29\x13\x60\xa9\xa1\x5a\x51\x9e\x00\xd8\xe0\xe9\xa8\x6b\x25\xf1\xab\x2f\xe3\x67\x10\x77\xa0\xc4\xf4\x43\xb0\xfa\x4b\xe5\xb3\xbe\x5c\x0f\x42\x20\x61\xce\xd6\xeb\x0d\xd1\x9a\xb8\x07\xd3\xa5\x9d\x6b\x39\x5f\x4e\x44\x16\x8e\x6e\xa7\x4a\x08\x88\x62\xd7\x47\x5b\x25\xdc\xfa\x44\xa9\x50\x14\xc6\x4a\x4c\xcb\xc3\x77\xca\xc9\x19\x8f\xa9\x6a\x01\x82\x62\x55\x5e\x25\x17\x05\xa4\x56\x4a\x21\x27\x55\x40\xc8\xd2\x55\x9b\x0b\xd4\xd3\x3a\xcb\x43\x12\x9f\x2e\x24\x5a\x03\xe4\x03\x59\x41\x39\xd7\x20\xa8\x0c\xb1\xa4\x88\x16\x59\x59\x61\x4a\x61\xf0\x1c\x14\xfa\x18\x7e\x38\xd1\x80\x2f\x39\x2f\xf3\x84\xaf\x72\x23\x8e\xad\x9a\xc0\xee\xd4\x8e\x8a\x42\x05\x6d\x38\x03\x8c\xd8\x57\x6d\x51\x98\x74\x64\x63\xef\x21\x70\x6d\x8c\xab\x30\x97\x9d\x9e\xb0\x74\x7e\x1b\x14\x8c\x86\xa7\x3b\x73\x91\xde\xdd\x2c\xcd\xf8\x9d\x1e\x39\xb2\xde\xe2\x41\x14\x4e\x52\xf4\x72\x65\x59\x0b\xc5\x00\x85\xe9\x9d\xab\x09\x59\xcf\x82\x6a\x77\xe2\xf4\xc2\xa2\x0a\x2f\xd2\x84\x61\x9a\x87\x48\x4d\x7a\x59\xe2\x6d\xbc\x9c\x4b\x3b\xcb\x49\x76\x32\x6a\xf1\x91\x51\x64\x52\x46\xef\x53\x54\xaa\x5e\xb3\x2b\xfb\x91\x41\x46\x6b\xd1\x7f\xf7\x60\xf8\xa6\x41\xfc\x5b\x33\x89\xcb\x71\xd0\xa3\x42\xd5\xc5\x8d\x52\x34\x83\xd5\x84\xaf\x39\xc6\x52\x9e\x21\x0b\xb7\x35\x6d\xc0\x56\x63\x48\xa5\x61\xb2\x2a\xa7\x09\x9a\xc4\xb5\x05\x17\x3b\x7a\x25\xca\xed\x86\x8a\x16\xcf\x1a\x29\x66\x03\x37\x05\xa2\x05\x15\xf5\xe0\xa8\xc8\x55\xde\xf8\x98\xfd\x39\x54\x63\x9a\xe8\x2b\x8b\xc8\xdf\x06\xad\x88\x8a\x20\x94\x7f\x4c\x86\xa8\x25\xa2\x4b\xcf\xae\x88\xfb\xb2\x55\x05\xeb\xed\xa9\xb0\x7b\x65\x24\x45\xd1\x41\x0c\x14\xd1\x6a\x81\x35\x4c\xf4\x2a\x5d\x56\x08\x02\x58\x83\x48\x91\xa6\x42\x1d\xb5\xd7\x4e\xaf\x7b\x67\x15\x51\xc2\x8b\x70\x6b\x06\x95\x82\x59\xd0\x29\x94\x26\x34\x3b\x63\xce\x61\x95\x6f\x83\x38\x30\x62\x6b\x2c\x40\xa9\x85\x2d\x52\xbc\xe5\x80\x1c\x89\x5d\x54\x35\x81\x6b\x34\x06\x7b\xea\xbc\xfe\x52\xf6\xe4\x6d\x39\x91\x89\xa0\xe6\x7f\x5f\x12\xde\x64\x5f\xa8\x78\x1d\xe4\x81\x63\x5c\x1e\x57\x6d\x50\x38\xb2\xfd\xa2\x23\x52\xa1\xc0\xb9\xbc\xb2\x97\xb0\x6f\xd4\xd8\xb0\xca\xea\xf3\xbf\x5e\x63\x53\xfd\x23\x00\x7a\xd4\x51\x25\xdd\xd9\x55\x0b\xdf\x52\x73\x21\x00\x0a\x9a\x4f\xa8\xa2\x90\x03\xd7\xc6\xa1\xa9\xe6\x7d\x46\x99\x8d\xa0\x60\x40\x67\x4a\x74\x21\x14\x81\x55\x15\x43\xee\x6f\x6f\xb4\x0d\xd1\x02\x2e\x75\xb9\xfa\xe4\x56\x22\x32\x70\xa2\x2a\xcb\x90\xe8\x94\x45\x12\x43\x37\xa9\x5c\xb7\x91\xa6\x59\x15\x41\x0a\x78\xce\xf2\xf6\xdd\x1d\xde\x01\x25\x0b\xf2\xa2\x09\x77\x0e\x5c\x52\x98\x1d\x08\xfe\x82\x67\xcc\x2d\xe0\xa7\x1c\xbf\x46\xff\x8f\x8d\x82\x6a\x48\xa3\xe0\x7f\xd8\x63\x37\xef\xa8\xd3\xb5\xfa\x69\xba\xbc\xac\x0a\x3f\x1d\x2f\xa0\x26\x0a\x18\xc4\xd4\x94\x38\x53\xed\x5c\xa7\xf9\x63\xc1\x4a\x52\x16\xe3\x6d\x9e\x8f\x13\xea\x98\x00\x85\x50\xfb\x18\xe0\x95\xd1\x3a\x7b\x4d\x8d\x0d\xb6\x45\x5c\xf8\x3f\x55\xeb\xaf\x47\xf7\x6c\xc2\x9c\x88\x0b\xa7\x01\xbf\xe5\xa1\xe9\x6e\xd3\xfa\x73\x29\x00\xda\xa2\x0b\x45\x07\x4c\x31\x41\x19\xe5\xcb\xbc\xda\x12\xc0\xee\x8b\x20\x2f\xa6\x18\xa7\x58\x64\x1e\x5b\x6d\x1b\x25\x80\x0e\x72\x72\x6b\xfc\x98\x55\x9e\x83\x87\xb9\x14\xcb\x88\x9d\x40\x91\xd1\x04\xef\x29\xd5\x93\xdc\x24\xfb\xd3\xb7\xa1\x90\x3a\x7b\xfd\x00\x1b\x56\xa7\x2a\xff\xa7\x06\x76\xb8\xa6\xe6\xe9\x4d\xa7\x7f\x3e\x5d\xd3\xc7\x34\xbb\x8f\xf4\x45\xea\xac\x11\x30\xdd\x02\xd1\xa0\xd4\x5e\x1c\xa0\x08\x7d\x14\x93\x62\x36\x4d\xe4\xf1\x6c\x34\x00\x20\x42\x59\x96\xad\xad\xec\xb4\xc7\x41\x20\x4e\xcf\x9d\x06\x62\x0d\xde\x12\xf9\xfa\x68\x3d\x58\x90\x35\x51\xc1\x14\x72\x5f\x5a\xea\x24\x29\xa0\xf6\x38\x5f\x1b\x33\xd4\x1c\x50\xdb\x28\xd5\x86\x33\x05\xd1\x05\x7c\xa1\x6d\xdc\x56\x65\xab\x8c\x49\x0c\x50\x01\xf3\x56\x94\x06\x72\x40\x65\x3d\xd5\x07\x8d\x64\x0f\xe5\xc4\x0a\x09\x59\xaf\xce\xde\xec\x11\x9c\xd8\xcf\x7a\xe1\x4f\x78\x2a\x79\xb8\xb4\x00\x5f\xa9\x2b\xe9\x05\xb0\x80\xa8\x59\x41\xae\xd0\x10\x57\xa0\xd4\x53\xe7\xa0\x70\x91\x07\xa1\x1a\xb6\x70\x0c\x7b\x0d\xa8\x54\x8a\x36\xc4\xdd\xe3\x7c\x56\xe9\xd8\xb4\x33\x64\xd6\x69\xc9\xd9\x1b\xbe\x3c\xc8\x0e\x6c\xee\x9d\xda\x45\x0c\xdd\x45\x0c\x3d\x17\xc4\xd0\xb7\xed\x73\x66\x96\x49\x76\x97\xe3\x70\x12\x7f\x61\x66\xf2\x11\xed\x88\xf6\xff\x6e\x38\xfc\x82\xd7\xe7\xa6\x35\xbf\x22\xc0\x16\x4a\x1a\x9d\x34\xca\xf5\x11\x50\xc3\xa9\xe0\x66\x1f\x91\x75\x5c\xf6\xb7\x32\x70\xa3\x93\x3d\xc6\x24\x71\xe7\x33\x0b\x6d\xde\xd8\x2f\x0f\x28\xf1\x82\xc6\x2e\x58\x5c\x31\x10\x08\x60\xaf\xc0\xb0\x85\x25\x51\xae\x10\xd8\x08\x2a\x91\xa4\x84\xa9\xf5\x2d\x97\x0d\x61\x00\x27\x59\x30\x59\xbf\xde\x99\xd1\x2f\x1f\x62\xef\xd1\x18\x26\x6f\x1b\x08\xbf\x52\x53\x7c\xda\x31\x2f\x4a\xe2\x1d\xa4\xe2\xe5\x98\x8b\x4e\x89\x46\x5a\xaa\x49\x3d\x38\x22\x57\x7c\x22\xb5\x45\x65\x94\x4e\x29\x33\xb3\x21\x5a\x4b\x00\xc7\x87\x12\x29\xd2\xd9\xf4\xa7\xe6\xc9\x46\x63\xeb\x8a\x1a\x97\x01\xa8\x56\xe5\xc1\x10\x2d\x99\x56\x34\x02\x38\x01\xb0\x2e\x23\xaa\x27\x10\xf4\x4b\x23\xd0\x2c\xad\xc3\x03\xa3\x3d\x3e\x40\x56\x3d\xc4\xae\x53\x80\x02\x91\x1d\xea\x21\x5b\xa1\xb3\xb9\xd5\xb7\x49\xef\x52\xdf\xc3\x30\xac\xa6\x5a\x33\x38\x1a\xaa\x7a\x76\x61\x70\xee\x23\x49\x97\x62\xf4\xcb\x76\x29\x06\x37\x99\x9c\x73\x22\x2f\xd9\x57\x06\x58\xad\x14\xfe\x97\x06\xc2\x1f\x1f\xe8\x31\x5c\xbd\x47\x4a\xcf\x3a\x9d\x85\xa2\xf3\xdc\x31\xea\x85\x72\x39\xed\x41\xc4\x4c\xf6\xbe\xa3\x68\x00\xc2\xcf\x63\x3c\x9d\x8a\x6f\x32\xac\xd6\x73\xe7\x37\xba\xe7\x3b\xb0\x66\xae\xc3\x2e\x7c\x01\xc7\x96\xf3\x9c\x7d\x6e\x8f\x7b\x3a\xea\x9d\x16\x62\x36\xbf\x37\xee\x09\x6f\xef\x71\xbd\xff\xee\x67\xe5\x90\xec\x74\xfb\x7b\xef\xe0\xc3\x72\xfb\x5b\x65\x97\xcb\x2a\x61\xe0\x07\x79\xb4\xce\xb9\x3a\x10\x09\x98\x5a\x55\xc2\x64\x40\x95\xa7\x17\x15\xda\x80\xff\x6f\x6f\xdb\x3d\x48\xdb\xee\xd5\xe1\xbf\x53\xdb\xae\x9b\x0a\xd9\x63\xdf\xfd\xe6\x5e\xf6\x1f\x7a\xb8\x5e\x8f\x4e\x3b\xb1\xbf\x9f\xdf\x1b\xbe\xcb\x9b\xb7\x93\x79\x8e\x26\x4b\x39\x0f\xa6\x57\xa2\x2c\xe3\x29\x19\x3e\xea\x3d\xaf\x16\xc6\x53\xb0\xc4\x31\xe0\x12\xc3\xa1\x4d\x38\x6b\x20\xb2\x46\xdf\xb7\x95\x8d\x0e\x38\xbd\x8b\x95\xa4\x4d\x21\xb6\x2d\x25\x4e\x16\x8e\x1c\x4f\xb2\xce\xd9\x20\xe7\x60\x82\xec\xc2\x6b\x79\xd5\x1e\xf6\x42\xcf\x0a\xae\x5d\x0d\x57\x4e\x51\xec\xdf\xe1\x6e\xde\xf1\x8b\x17\x66\xbb\xc8\x18\x1e\x4b\xee\xbc\xf3\x64\xe1\x1f\x0d\xaf\x36\xb5\x38\x3a\xad\x4e\x2c\x6b\x22\x4f\x63\x40\x0e\x07\x87\x49\x30\x22\x1f\x1e\xdd\xc4\x2c\xf9\x41\x8f\xed\x59\x5b\x4b\xe2\xc2\x7f\x97\x17\xbe\xdc\x73\xca\x24\x7b\x14\x94\x19\x40\xa1\x16\xe9\x7c\x30\x02\xaf\x8d\x06\x47\x12\x38\x45\xc2\x2f\xc0\x2f\x87\x1d\xc5\x64\x49\xeb\x3a\xe3\xf1\xac\x93\x99\xd8\x4a\x5e\x1a\xdf\x2c\x28\x3a\x45\xd2\xea\xa4\x65\x94\x71\x70\xa7\x6f\x66\x4e\xfd\x57\x10\x9c\x7b\x98\x0d\xa4\x9d\xcc\x3f\xa4\x82\x01\xfe\x7d\xaf\x01\x95\xfd\x85\x81\x13\x8e\xa3\xff\x5d\x8c\x3d\x65\xf3\x93\x54\x3f\xa5\xf7\xff\xdd\x17\x7e\xa6\x66\x72\x23\x83\xc9\xfa\x0d\xc1\x38\xea\x94\x5d\x5c\x2a\xfd\x74\x63\xcc\xa0\xcc\x79\x43\xe1\x99\x5b\xe0\x52\xab\x93\x13\x7d\x5e\xab\xf7\x2d\xef\x5f\x85\xae\xfd\xba\x21\xf6\x01\xad\x6b\xbf\x73\x57\xd7\x7e\x88\x74\xed\x29\x76\xf3\x26\x26\xba\xad\x16\x06\x28\xdc\x5f\x45\x85\xfb\xcb\xbb\x0a\xf7\xc3\x51\xe1\x3e\xcf\x01\x96\x5a\xf7\x6b\x2b\xa0\x44\x18\x6f\x8b\x4a\x3a\xbe\x33\x97\x27\x22\x4f\xca\xf5\xe9\x34\x2a\x0a\x00\x25\xfa\xda\x70\x78\x6d\xd7\xd5\x5e\x88\x44\x6d\x7a\x28\x68\xc8\xa7\x78\x1f\x24\xa2\xb7\x0e\xb1\xdf\xb2\xd3\x46\x3f\x7e\x9e\x88\x2d\x3f\x7a\xe1\x11\x5b\x76\x92\x30\xba\x1b\xc6\xb4\xc3\x30\xa6\x75\x05\xab\xd4\x0e\x9f\x90\xf4\x82\x55\x72\xe6\x1a\xdf\x09\xa8\xd2\x16\xb3\x79\x37\x82\x6a\x07\x50\x69\x3b\x05\x26\x32\x7d\x5f\x89\xc1\xe9\x12\x1d\x3d\x81\x89\x5e\x5b\x63\x07\xb7\x97\x81\x91\x73\x7d\x00\x2b\xfc\xff\xe9\x85\xcf\x76\xae\x68\x95\x9a\xd2\x47\x20\xef\x01\xbc\x3a\x80\x92\xa8\xa8\xcc\x46\xb0\x6f\xc7\x82\x98\xa7\x5c\xfe\xcb\xcb\x46\x7d\x14\xe3\xa1\xf3\x3c\x41\x9d\xca\x3d\xfd\x74\xd8\x38\x1b\xe8\x24\xb1\xff\xa4\xf0\x07\x17\x1c\x76\x1c\x52\x50\x4f\xcf\xce\x38\x5a\xed\x0c\xbb\x42\xcd\x1a\x25\x1c\x26\xc3\x27\xf4\x7c\x75\xde\x7d\xce\x2e\xe5\x25\xc3\x6c\x8a\x3a\x46\x8e\xc6\xb8\x82\x91\x14\x2e\x45\x65\xce\x97\x13\xc0\xb6\x90\x7b\xe6\xea\x64\x7d\x6a\x6e\x96\x20\x6e\x41\x86\x3f\x30\x14\x4e\xb8\x97\x5c\x04\x7d\x73\x6f\x73\x18\xb9\x97\xed\xdd\x95\x77\x3b\x94\x77\x5c\xc9\xbb\x1f\xb2\x25\xd9\x29\x76\x82\xdd\xde\x53\x92\x9d\xdb\x28\xef\xca\xb6\xed\x47\x87\xce\x5a\xda\xc7\xd3\xce\x4b\xf9\xd8\x31\xa2\x64\x75\x0c\x2b\xb2\xd2\x5d\xa2\xd5\x58\xc5\xbf\xbe\x8a\xfd\x40\xbf\xe8\x7e\xff\x0b\x57\x85\xd7\xc1\x5f\x38\xec\x39\xb2\x99\xe1\xca\x82\x10\x7e\x08\xc7\x5f\x03\xeb\x8b\x4b\x89\x51\xdf\xf0\x74\x7f\x6c\x78\x97\x2b\xa6\x05\x74\x80\x3a\xab\xff\xe7\xae\x64\xaf\xf1\xd8\x65\x60\x17\x55\xdc\x92\xfe\x8b\xce\x83\xaa\xf2\xd8\xa2\x46\xe3\x2a\x29\xfa\x0d\x32\xef\x21\xb3\x93\x37\x00\xd5\xd2\x0a\xb1\x27\xe9\x81\xcd\x59\x03\xcb\x57\x43\xe4\x31\x8f\xeb\xec\xf5\x9e\xb6\x24\xbe\xdc\x0b\xef\xc5\xb0\x32\x83\xfe\x16\xc9\xbf\xf3\x72\x2c\xa0\x1a\x59\xc1\x3e\x60\xc3\xa4\x55\x02\x07\xeb\xe5\x44\x51\xca\x55\x8c\x91\xc6\xf6\x28\x65\x8d\x1d\x09\xbb\xbf\x08\x5c\x84\x0c\x67\x23\x38\xcd\x1e\x89\xc3\x91\x64\xcb\xb3\x99\xfc\x68\x83\xfb\xb7\x84\x87\x4c\x1c\x99\x95\xf6\x98\xd0\x03\x14\x83\xf4\xfc\x33\x18\xb1\x38\x7e\x76\xfd\x9e\xe6\xf3\x9d\x62\x5f\xe1\xb1\xbd\x14\x80\x70\x9f\xb7\x0d\x8c\x7b\xcc\xfa\x40\x07\xf6\x22\xe2\x40\x51\xd4\x4c\xa0\xab\x67\x75\x70\x3d\x58\xa8\x76\xdf\xe6\xbd\x57\x67\x11\xd9\x4d\x9f\x15\x1e\x57\x76\x53\x6b\xc0\x46\x4e\x82\x1f\x7f\x2c\xb8\x33\xca\xb3\x24\x5b\x1e\xc5\x94\x30\x04\x05\x6f\xe8\x4f\xc5\xb1\xc1\x7b\x6b\x76\xa4\xfa\x6d\x37\xfa\xe9\x2a\x73\x64\x4a\x19\x8b\xc6\x5c\x1c\x2f\xcc\x9d\xb1\x3e\xbb\x12\x15\x6a\x12\xc5\x2e\xc0\xd6\xcb\x65\x07\x62\x56\xcc\x8b\xb6\xdf\x81\xf0\x42\xb8\x00\x18\x0d\xc6\xbe\x8d\x4b\x8f\xd2\x54\xac\xaf\x5b\xf0\x0e\x22\x0f\xb2\x24\x95\x27\xc1\x44\x4e\x18\x15\xa9\x53\x8a\x0c\xdf\xae\xb3\xfb\x3d\x76\x79\x33\xc9\xed\xd5\xf5\xea\xf3\x58\x5d\xcf\xec\xbd\xba\xcc\xf2\x81\x6f\x99\x45\x14\x8c\xa8\x04\x17\x42\xce\x90\x4b\x30\x69\x97\x18\x85\x0b\x7c\x26\x52\xe8\xd5\x47\xd9\x5d\xac\x22\x26\xfc\x67\x6e\x03\x33\x0b\x1f\x9d\x57\xd1\xe4\xe1\x13\x16\xf5\x02\xb2\x62\x3c\xb9\x16\x62\xb2\x73\xeb\xbb\x1b\xdb\xf6\x37\xb6\xd3\xc6\x51\xf3\xf4\xf0\x69\xe4\xa8\x19\xd7\x8e\x1a\x8b\x59\x5f\x23\xf8\x58\xae\x12\x48\xe5\x57\x66\x97\x8a\x85\xd9\x6c\x98\xef\x3f\x6f\x94\xa7\x7c\x93\x7c\x8a\x8b\x84\xb3\xca\xda\xcc\xd7\x32\x6e\x5a\x89\x3d\xff\xd9\xe1\x09\x1b\x52\xc3\x92\xc2\x30\x1d\x79\x2b\x29\x81\xed\x45\x76\x0d\x2c\x51\x5b\x28\x1b\x9e\x01\x12\xd1\xae\x74\xbe\x83\xed\xc5\x98\x34\xff\x78\x78\xf3\x9d\xc0\x8e\xd2\xd0\xae\xb5\x32\x3a\xc3\xb3\x09\xc2\xcb\x94\x8a\x9e\x93\x45\x3f\xaf\x2f\xf4\x88\x1c\xda\x55\xbf\x77\xa6\x7e\x77\xd8\x3e\x90\x28\xe0\x2f\x5d\x39\xcf\x0c\x40\x14\x90\x26\x8f\xf5\x48\x45\x94\xaa\x24\xc0\x3a\xcb\xd9\x50\xce\x21\xad\xd6\x5f\x3e\x07\xd1\x78\x48\x79\x40\x08\xd7\x35\xca\xd7\x95\xfc\xd2\x70\x46\x72\xfb\x4e\xf9\x59\x9a\x57\x45\xfd\x41\xef\xc4\xd6\xca\xe8\xd5\xfe\x88\x56\x46\xc3\x50\x2b\x9e\xd0\x90\xaa\xbe\x79\x7f\x8d\x3d\xb6\x47\x5d\x8f\x89\xa2\x9c\x4a\x93\xa8\xf0\x5f\x5c\x0b\x85\xfe\x45\xb9\x30\xa0\xbf\x45\x6d\x20\x91\x50\x28\x98\x44\xd6\xa8\xd0\x21\x2a\x80\x88\x49\x76\x17\x9a\x8d\x11\xd9\x89\x23\xe5\x7d\xa6\x70\x8d\xf6\x17\x08\x4c\x01\x4e\x2b\xf7\x48\xfe\x62\x8f\x1d\x67\xfb\x74\xb1\xfe\xcd\xe1\xe3\x8f\xe9\x6f\x28\xad\x0d\x91\x04\x2c\xfa\xbd\x4d\x7c\x69\x4f\x61\xb5\xa4\xed\x4f\x84\x61\x37\xe3\x21\x78\xc4\x64\x15\xb0\x82\xae\xef\x77\x90\x3d\xbe\x47\x47\xa1\x07\x73\x2e\x17\x77\xa1\x8d\xd4\xff\xdc\x60\x78\xcc\xfc\xc4\x5e\x90\x4b\x64\x09\x52\x45\x54\x2f\x98\xac\x15\x24\x00\x36\xce\x39\x15\x16\xaf\x39\x1c\x35\x82\xf2\x00\x2b\xd9\x3e\x44\x0f\x39\x11\xb5\xfd\xe5\x4d\xa0\x42\x55\xed\xa6\xd5\xd3\xa6\x46\xe1\x44\xef\x4c\x26\x5d\x30\x42\x06\x21\xe4\x2f\x40\x54\xdc\xc3\x2e\x89\xc5\x5a\xb6\x16\xe5\xf1\xd4\xdc\xac\x7f\x66\x1b\x84\x28\x33\xe6\x79\xeb\xcb\x93\xbd\xbf\x6c\x15\xde\xf5\xed\x33\x52\x7b\x6b\xe4\xbc\xf4\xa3\x4d\x40\xed\x0c\x0f\x8b\x7c\xd4\xfa\xe2\x58\x9f\xac\x2d\x78\xae\xeb\x63\xaf\xf2\xd8\x95\x14\x0f\x3e\x85\x58\x56\x8b\xe2\x0c\xcf\xfc\x17\xb0\x9b\xb6\x4b\x2e\x65\xbf\x67\xd5\xe3\x86\x7e\xf5\xe8\x7a\xa9\xab\x52\x5f\x19\x70\xd0\xbc\xfb\x24\xaf\x01\xa2\xd1\x2f\x0f\x84\x3f\x64\xfd\xde\x59\xe2\x5a\x94\xa6\x56\x3e\x4e\xd1\x3b\x73\x6d\x88\xee\x3a\x13\xf3\xc3\x35\xf6\x81\x1a\x53\xb7\xfc\xb7\xd7\xc2\x9f\xf4\x74\x29\xb6\x01\xca\x49\x3f\x37\x5f\x9c\xa1\x67\x35\xd4\xab\xfe\x20\x72\x89\xa6\xa9\x55\x29\x63\x45\x8e\x72\x79\x46\xd1\xd5\x24\xe7\x0c\x26\x31\x35\x44\x8b\x12\x99\x76\x00\x1f\xb3\x69\x5e\xe0\xb6\x98\xbd\xa4\x50\xda\x09\xb3\xd7\x27\xbd\x9e\xf1\x24\x18\xfe\xa9\xf8\xb4\xfc\x37\x78\xe1\xb4\x7b\xc9\xf8\xa8\xba\x07\x57\x27\x07\xe0\x2b\x5a\xbd\xad\x6f\x78\x83\x73\x22\x77\x0f\xfb\x53\xec\x66\x06\x57\xfd\xeb\xd4\x51\x2b\x04\x4e\x5c\xeb\xac\xa5\x21\xfb\x74\x49\xce\x01\xeb\xeb\x35\xf6\xb8\xee\x7c\x4f\x0d\x52\x0c\x49\xb3\xbf\x51\x0b\x6f\xd6\x09\xac\xbd\xaa\x8e\xd8\xde\xc8\x1e\x46\x1a\x07\xa4\x9c\x62\x94\x7e\xa7\xe0\xf1\x86\x37\x1c\xb5\x93\xdb\xe4\xa6\xb6\xe1\xc1\x59\xa1\x17\x82\xe2\xff\xf0\xd8\x1c\xd3\x0f\xfa\x33\xe1\x75\x53\x73\xb3\xf0\xb7\x72\x40\xa0\xd7\x5f\xed\x1b\xfa\xf0\x80\x1f\x32\xac\x47\xb6\xe4\xbf\x95\xce\x26\x87\xc3\x71\x75\x32\xb1\xe3\xcc\xb7\x5b\x46\x46\x20\x6f\x27\x7b\xe0\x3a\x6e\xab\x8c\xff\xb6\xa7\x17\xae\xff\xc3\x21\x90\x6e\x37\x78\x6c\x1b\xc1\x63\xbb\xd1\x86\x26\xda\xf0\x4d\x7b\xd9\xa1\x4d\xd3\x67\x26\x7b\xa6\xa4\xf9\x5f\xdf\x13\x66\xbd\x6e\x38\xac\x86\x26\xbd\x05\xed\x06\x30\xc1\xdd\xac\xb5\xed\x67\xab\x6d\x78\xcc\x60\x84\x6e\x78\x97\x52\xd1\x80\xdb\xe3\x2c\x83\xcf\x0e\xb2\x98\x59\xcf\xfa\x77\x84\xb3\x16\xba\x68\x65\xc1\xeb\xb4\x28\x40\xb5\x03\x60\x58\x2b\x17\x2e\xd1\xf8\xa8\x9a\xd0\xd7\xcc\xa3\x5f\xf4\xd8\xe5\x78\x57\x85\xf8\xf8\x3f\x73\x21\xe8\x00\xe6\xdc\x42\x91\xf2\x1b\x03\xbc\x28\x10\x6e\xdd\xce\xd4\x84\x31\x26\x5b\x98\xec\xbf\x24\xd3\xb9\xa6\x94\xa9\xc8\xde\xee\xb1\x2b\xa9\xbf\xa6\x30\x0f\x0b\xba\xcd\xff\xe9\x9d\x44\x03\xd4\x35\xe6\xf9\x33\x3a\x51\x56\x26\xe5\x7a\xf8\x8c\x1e\x85\xaa\x0e\xee\x1a\x7a\xea\x48\x9d\x08\x26\x56\xb9\xe9\x6c\x0d\xaa\xf3\x72\x8f\x39\x43\xeb\xff\xe8\xf9\x55\xf1\x66\xbb\xb0\xbe\x75\x2b\x57\x4c\xc6\x17\xd0\xec\xdd\x4d\xef\x8f\xb2\x7b\x1f\xc9\xc6\xb6\x48\x1e\x72\xa9\x5c\x3e\xff\x88\x87\x8a\xca\xe5\xcf\xae\xd8\x65\xc8\x78\x08\x18\x32\xbe\x0b\x6c\x05\xbb\x0c\x3d\x72\x1e\xad\x69\x6a\x92\x56\xf8\xbc\x6d\x52\x93\xc0\x54\xb5\x39\x69\x74\x8e\xaa\x86\xe3\xe8\xc5\xb3\xe3\xc6\x3c\xff\xf5\x26\xd4\x40\x5f\xd4\xd4\x40\xbf\x32\xb0\x4b\x0d\x74\x11\xa9\x81\x16\x5d\xec\x3a\x34\x75\x9d\x35\x32\x1b\x06\x21\x18\x01\xa4\xb4\x83\x93\xd7\x5c\x77\xcd\xf5\x87\xae\xbd\xe6\xba\x51\x0c\x32\x84\xc9\xa8\x58\x73\x5b\x3c\xca\x00\x32\x21\x88\xa9\x9d\xa1\x2b\xb0\xde\x5a\xeb\xc3\x60\xf3\x93\x35\x35\xd8\xdf\x78\x78\x30\xd8\x5c\xf0\x4e\xc1\x4a\x43\x48\x68\x9a\x52\xab\x54\xa3\x2a\xbd\xf4\x1e\x97\x22\xe7\xcd\xde\xce\xb0\x95\xbf\x0b\x44\x39\xff\xd5\x26\xca\xf9\xb0\xb7\x89\xf5\x68\xf3\x6d\xfd\xbb\x4c\x97\xf3\x96\x31\x47\x49\xef\x51\xd7\x39\x11\x2f\xf0\x46\x27\x4f\xca\x75\x13\x7e\xee\xff\xef\x27\x87\x6b\x3d\xef\x38\x8e\x8b\x36\x5c\x0e\x78\x06\x19\x22\xb0\xb3\xab\x18\xfb\xc3\xd0\xaa\xde\x45\x20\x7e\x25\xbe\x3b\x35\x37\x1b\xd0\xe1\x1e\xd1\x3b\xea\x1b\xde\x50\xc1\x21\xc1\x65\xc3\xdb\x97\x77\xb2\xa9\xe2\x74\xc1\xf3\x0d\xcf\x2f\x3a\x6d\xc5\x71\x9e\xc2\x2b\xc5\x86\x37\xd4\x2c\xe0\x4f\x47\xb9\xf9\xa5\xab\xd9\xef\x79\xac\xc7\xf3\x52\xa3\x38\xb1\x93\x81\x5c\xe8\x2a\x42\x0d\x28\xda\xfd\x8b\x30\xeb\xfe\x8a\x45\xb4\x40\x43\xac\x37\xea\x38\x69\xc0\x79\x7d\x4d\x5e\xb1\xdf\x44\x9b\x06\xea\x1c\x1d\x6b\xc7\x51\xbd\x37\x2d\xb2\x92\x9f\x2d\xeb\xec\xcd\x35\xf6\x48\x4a\x27\x98\x5e\x98\x25\xb3\x9b\xff\x93\xb5\xf0\x63\xde\x54\xf5\x32\xca\x8d\xb5\x95\xa4\xe4\xc6\x7c\x27\x65\x98\x63\x24\x44\xeb\x36\x45\xe3\x29\x29\x82\x29\x3e\xb4\x9f\xf0\xd6\x12\x07\x6f\xbf\x3e\x23\x80\x42\xd0\xe6\x8d\x7a\x30\x95\x51\x9c\x37\xca\x11\x14\x0d\x99\x70\xbe\x00\xa0\x85\x9d\x4c\x7d\xbc\xbb\x14\xdb\xbe\x77\x0b\xbb\xa9\xbf\xf3\xa7\xd7\x18\x55\x9b\xcd\xfe\xff\x1e\x7b\x04\x75\xd1\x31\x51\x94\x73\x51\xb9\x52\xf8\x1f\xf2\xc2\x95\xea\x45\xab\x7f\xb4\x7d\x53\xa5\x6a\x80\x1b\xa1\x2d\x9f\xaa\x07\x47\x10\x4d\xc9\xd5\x22\xa4\xcc\x33\x0f\x29\xf7\x00\x51\x9c\x99\xe6\xdc\xcc\x36\x89\x5c\xda\xa4\x39\xaa\x92\xec\x55\x03\xec\x51\x24\x7f\xa7\xe2\x78\x3a\x6a\x23\xc5\x42\xc2\x0b\xff\x5b\xb5\xf0\x7f\xd4\x7a\xdf\x53\x73\x50\x41\xa2\x53\x62\x4a\xc3\x7e\xc4\xd1\x1f\x31\x9c\x83\xf6\x05\xa3\xc8\x75\xb2\x54\x21\xe8\xab\xd1\x32\x67\x91\x34\x5d\x0f\xe2\x5c\xb4\xe9\x64\xa4\xca\x5e\xaf\x07\xc1\xb3\x44\x07\xba\x44\xee\x41\x68\xe9\xb5\xee\x4b\x55\x00\x32\x57\xfa\xd4\x5d\x6e\x5e\x0a\xa9\x67\x26\x17\x6d\xfb\x66\x3d\x70\x1f\x85\x6a\x43\xb0\x94\x5c\x3a\x89\x49\x6e\xa2\x81\x1c\x23\x7c\x64\x1e\x2b\x75\x22\xc9\x1a\x69\xc7\x8a\x5d\x51\xab\xc9\x2e\xb6\x2b\xa4\xbf\xe2\x7f\xfa\x8c\xc7\x7e\xa0\x5f\x0d\xfd\x77\x7a\xe1\xcb\xbc\x7e\x77\x03\x05\x0b\xd5\x7f\x28\x64\x97\xb6\x95\xd1\xc7\x19\x0e\xc4\x47\x29\x38\x21\xe2\xe2\x17\x68\x91\xaa\xb7\x20\xfd\x41\x47\x39\x40\xff\x6c\xd6\x92\xf7\xd5\xd8\x95\x3d\x7a\xc0\xdf\xa8\x85\xff\xec\xf5\xea\x1a\xc7\x1b\xd0\xdd\x08\xcd\x3d\x0f\x41\x17\x58\xbb\x28\xee\x9e\x59\x95\x71\x54\x49\x27\x98\xcd\x41\x8b\x09\x07\x97\x34\x76\x39\xfd\x10\x43\x70\x7f\x21\x15\xa0\x46\xce\x31\xef\x04\xa6\x9a\x14\x5f\x9b\xcf\xb5\x5e\x6d\xd9\x74\xa2\x6d\xd2\x69\x6f\xf1\x98\xda\xa3\xfc\xd7\x78\xec\xd6\x1d\x6d\x29\x98\xbc\x59\xdd\x47\x4e\x51\x79\xdb\xd8\x3c\xf4\xa4\x85\xd3\x10\xa1\xd0\xd9\x3e\xca\x82\x97\x75\xf6\xb2\x01\xf6\x88\xa6\xc8\x97\x92\x38\xe6\xd9\xc2\x7a\xd1\x28\xd3\xc2\xff\x76\x2d\xfc\x83\x5a\xf5\xaa\x3b\xa4\xd6\x0e\xa0\x1f\x0c\x0a\x7c\x72\xcc\x61\x74\xc9\xa4\xa2\x84\x29\x60\xe4\x0b\x2e\x02\x8e\xa9\x95\x51\xd0\x4e\xa5\x42\x8b\xef\x91\xc5\x2c\x0f\x78\x06\xbe\xac\x20\xbc\x3a\x94\xff\xa0\x36\xd9\x88\x8a\x1e\x27\x19\x30\xa5\xb4\x73\xde\x4c\xce\xca\x5a\x75\x55\xa5\x1e\x2c\xa0\x8b\xe4\x6a\xda\x73\xa4\x3c\xa6\x7b\xb0\x3c\xf4\x1b\x75\xc6\x08\xd9\xba\x38\x4c\x78\x61\x4d\x21\x26\xae\x0e\xe9\x91\x02\x7f\x2f\x45\x79\x38\xa6\xfe\xbc\x27\xc4\x48\x73\xf3\x7c\xbd\xf2\x7c\xdd\x3c\x5f\x37\xcf\x6f\x32\x67\xde\xe1\x31\xa5\xac\xf8\x6f\xdc\xe1\x9c\x39\xba\x00\xef\x55\xe7\xcc\x9d\x54\xde\x76\x15\x8e\xa6\x4a\x98\x54\x66\xc1\x7e\x4a\xc6\xf3\x18\x6b\xe7\xc9\x6a\x92\xf2\x65\x1e\xfb\xcf\x08\xa7\xcd\x2f\x83\x82\x58\x04\x49\x93\x36\x71\x44\x25\x46\x76\x04\x94\x46\x72\xbb\x8f\x8a\xc0\xbc\xe7\x9e\x92\xff\xb1\xc6\x1e\xa5\xd2\x93\xe7\xc5\xff\xc7\xde\x9b\x80\x59\x92\x95\x65\xc2\x4f\xdc\xcc\xda\x4e\xd1\xdd\x10\x3a\xe3\xfc\x8e\x3a\x31\xd1\x30\x59\xd5\x7d\xf3\x66\x6d\xbd\x55\x37\x4d\x67\x67\x56\x75\x27\x5d\x4b\x76\x66\x56\xb7\xa0\x42\x45\xde\x38\x37\x6f\x98\x71\x23\x6e\xc7\x92\x59\x97\xe5\x1f\x74\xa0\x55\x40\x41\x16\x91\x62\x99\x56\x18\x45\x40\x1b\x04\x17\x14\x50\x51\x70\x1c\x19\xf1\x57\x18\x66\xd4\x51\x64\xc0\x7d\x1b\xf1\x99\x19\x9a\x91\xf9\x9f\xf3\x7d\xdf\xd9\xe2\xc6\xbd\x99\x59\xd5\x85\x3a\x26\x3c\x4f\x57\xde\x58\x4e\x9c\xfd\x9c\xef\x3b\xef\xf7\xbe\x69\xa1\x63\x61\xdd\xdf\x6e\xf8\x1f\x6f\xd4\xdf\x43\x40\x87\xb4\x5f\xb2\xd2\x0a\x4f\x56\x33\x0b\x1a\x54\xa5\x32\x54\x81\x8a\x0d\x79\x5b\xd3\x94\xa0\x01\x32\x4e\x56\x32\xb3\xea\x05\xcf\x5a\xdc\x0c\xe8\x98\x99\x62\x92\x22\x58\xab\x3e\x55\x48\x70\x71\x79\x51\x7a\x4c\x42\x9e\x0c\xe4\x0c\x06\x87\xa1\x54\x00\x0c\xbe\xb6\xbf\x0e\x38\x9c\xed\x64\x1d\xd1\x89\x52\xd0\x66\xb5\x2c\xf0\x97\x36\x9a\x71\x47\x8e\x3c\xaf\x46\xc5\xff\x94\xc3\xfe\x85\x5c\x75\xc5\x14\xb2\x28\x1b\xe8\x54\xde\x0e\x62\xf0\x2e\xba\xaf\x75\xfc\x97\x3a\x5b\x3c\x24\x9d\x09\x43\xbb\x0c\x30\x5c\xd0\x93\xc4\xe5\x54\x40\xbe\x05\xd1\x4b\xd6\xc4\xac\x00\xa8\x18\xd5\x35\x60\xee\x42\xf2\xce\x7e\x00\xbe\x55\x7a\xc1\xce\x79\xc8\xf6\x89\xed\xd6\xc2\xe2\x9c\xfb\x1c\xff\x01\xfa\xb3\xd2\x1b\x0d\x9b\x44\xc6\xf6\xa1\xf4\x8f\x98\x42\xee\xa7\x57\x34\x62\x45\x6e\x3e\x8d\xaf\xf4\xd9\x41\x91\x34\x05\xe4\xb9\x81\xbf\x6c\xfc\xdc\xe9\xd7\xe4\x6b\x63\xbf\x48\xe5\x5a\x5c\x98\x97\xe5\x5a\x5c\x98\xdf\xe9\x97\xc4\x2b\x63\xbf\xf2\x76\x87\xfd\xb3\x60\x54\x83\x7f\x87\xe3\x0f\x46\xdd\xdc\xce\x78\x47\x9f\x85\x6a\x50\x8f\xab\xb7\x87\x25\x7d\xcc\x05\x44\x0c\xe1\x8a\x1e\x70\x83\xb9\xb4\x50\x9f\x8e\xf9\x25\x04\xe6\xe4\xee\xbb\x1a\xfe\x6f\x39\xc3\xd7\x6b\xec\x1b\xb9\x7d\x17\x4f\x11\x9f\x42\xcb\xa3\x0d\xbc\xc4\xf5\x0e\xef\xe3\x8d\xa7\xad\x8d\xbc\x87\x4e\x13\x2d\x5c\x27\x56\x38\xf0\xf7\x46\x1b\x1c\x07\xa6\x52\x32\x28\x73\xd2\x74\x10\x3f\xcc\x04\x8d\xf8\x6f\x6a\x22\x9f\x6e\xf9\xb8\xdd\xb9\xba\xd8\xd1\xd9\x6a\xb5\xb0\x2f\x3a\xec\x9f\xd0\x17\x17\xb3\xb4\x0d\xcc\x0c\x2b\x83\x3e\x87\x28\xac\x8f\x48\x33\xd1\xbe\x35\xa6\x2a\xed\x07\x5b\x63\x2b\x13\xaa\x04\x8f\x20\xa0\x99\xad\x77\xed\xaa\x5d\xe9\x6a\x3e\x4e\xec\xcf\xf6\xc3\x1d\x4e\x64\xa9\x71\xb0\x26\xed\x50\xa0\x65\x1d\xbb\x9d\xfd\x8b\x09\xf6\xd5\x94\xf1\x0b\x49\x1e\x74\xb8\xdc\xf9\x7c\x6a\xc2\xff\xe9\x89\xba\x3b\x23\x77\x3f\xb2\xfc\x25\x3c\xfd\x77\xbf\x05\x92\xf9\x19\xb7\x01\xb2\xf3\x0a\xfb\x20\x7a\x4d\x53\x2a\x77\x11\x11\xaa\xdb\x5a\xbc\x58\x5f\x58\xb3\x3a\xc4\x38\xdf\x48\xa3\x90\x70\xa2\x62\x70\x8f\xdc\x58\xd1\x24\xb5\xdd\x7d\x95\xf1\xf8\x8e\xb7\x55\x8f\x39\x08\x2c\x5c\x04\x12\x83\xd7\x38\xfe\x69\xf5\xcb\x9c\xba\xb0\x9e\xd1\x5e\x4f\xb3\xc2\xcb\x82\x64\x8d\x5b\x15\x24\xfb\x18\x70\x4d\xdb\x7d\x6c\x7c\x34\x6b\xcd\x98\xbc\x9f\xb2\xb0\x24\xbe\xc2\x7e\xba\xc1\x18\xf8\xb1\x70\xf3\xf7\x23\x0d\x76\x6a\x47\xce\x4f\xf5\x6a\x75\xff\xf7\x7b\x8e\xbe\xb7\x63\xbb\xc1\x78\x95\xf8\x36\xab\x26\xc4\x70\x88\x7d\x8a\x40\xeb\xa6\x01\xf9\x34\x92\x11\xab\x42\x11\xac\x73\x38\x12\x42\xfa\x4d\x93\x7e\xd7\x1a\xeb\xc6\x6b\x72\xa0\xaf\x41\x1e\xad\x81\xce\xde\xeb\x30\xed\x02\x74\xdf\xe6\xb0\xf9\x1d\xd7\x9c\x78\xb3\x5a\x71\xdf\xa4\xd2\xbc\xb2\x6a\x83\x37\x47\xd4\x1a\xfb\x31\x87\xed\xa3\x09\xde\xfd\x41\xc7\x7f\x99\xb3\x31\xb4\x5a\x0d\x79\x9b\x08\x30\xda\x07\xca\xeb\x51\x1e\xa7\x24\xf5\x6a\x17\xa9\x15\xb9\x02\x8b\x81\x2c\x9f\x18\x90\x03\x46\x6c\x12\xa6\x6e\x9a\x1a\x37\x84\x7e\xec\x06\xf6\xa0\xae\x48\x5d\x8f\xd3\x41\x3f\xc2\x00\x13\x2b\xb6\xb1\xa6\xa2\x1f\xe6\xab\xdd\x34\x5d\x9f\x83\xc0\x0b\x74\xd2\xbb\xff\xf9\x7a\xff\x6d\x4e\xcd\x0d\x0d\x1e\x2b\xba\xdc\x06\x90\xd1\x29\x57\xe0\x91\xc4\x5e\x42\xf8\x5b\xd8\x0d\x8b\xa7\x37\x31\x39\xa0\x1f\x86\x69\x4c\x72\x5b\x63\x0f\x13\x13\x66\x08\x64\x13\x69\x52\x89\xc0\x1c\x99\x4f\x1b\xa8\xfc\xb6\xeb\xd8\xef\x37\x84\x6d\x0f\x98\x4e\xf7\x53\x0d\xf6\xcd\xa3\x3a\xdc\x95\xd4\x13\x01\x4c\x35\x7c\xfc\x6f\x9c\x8b\xf4\xad\x8b\x32\x1c\x50\x4a\x4b\x48\xf2\x6d\x8a\xf6\x55\x54\x1d\xaa\x0e\x88\xc5\x48\x27\x90\x66\xde\xc5\x32\x8b\x2f\xd6\x28\x41\x32\x46\x86\x0e\xbd\x0d\x47\x23\xc4\x89\x4c\xee\x58\x23\xd0\x90\x68\x50\x44\x17\x22\x1b\x46\xf4\x22\xf5\xa1\x16\x63\x80\x2f\x3c\x71\xe2\xb8\x2d\xb8\x8b\x36\x09\x86\xa7\x24\x4d\x44\x45\x6f\x46\x6a\x69\xd3\x3a\x16\x7f\xb3\x9f\x4d\x94\x59\xec\xfe\xd9\x7e\xff\x77\xf7\x63\x9e\x75\x30\x5f\x9c\xda\x28\x07\xca\x72\x13\x4e\x48\x65\x44\xca\x85\xa5\x33\xa8\x5c\x7c\xe8\x22\x44\x39\xf0\x93\x33\x33\x62\x76\x3f\x29\x66\xf7\x99\x7e\x50\x74\x2f\x1e\x06\x45\xab\xb6\x58\xbb\x08\x12\x86\x5f\x4a\xcd\x3a\xab\xab\xaa\x95\x2e\xf7\x2e\x8a\xc4\x2e\xca\xe2\x23\x17\x89\x62\x63\x97\x6d\x22\x6b\xd0\xae\xbd\x3b\x89\xf3\xdc\xa8\x31\x45\x33\x8b\x27\x1c\x70\x66\x05\x6b\x51\x2f\x5a\xeb\x5a\x42\x20\x20\xc9\xa3\x28\xbb\xe7\xcf\x2d\x43\xa9\xd3\x1e\xf7\x54\x27\x23\xad\x86\x26\x46\xb7\xe8\xce\x77\x51\xba\xfd\x28\x2d\x2f\x4a\xa6\x25\xa3\xb6\x48\x28\x90\x6e\x46\x1d\x2c\x18\x07\x03\x8e\xc1\x59\x51\x1a\x4b\x62\x15\x2a\xba\x98\x3c\x82\x38\x4f\x49\xd4\xcc\xc0\xe5\x33\xb6\x18\x73\xb1\x63\x49\xd4\xb9\x2d\x32\xc3\x5c\x14\x4d\x17\xe3\xeb\xa2\x96\x8f\x1e\xbb\xad\x75\xa4\x75\xa4\x75\xf4\x22\xee\x65\x28\x65\xd1\xf7\xa2\x7c\x7d\x20\x9d\xcb\xa2\x9f\xc1\xba\xb1\x96\x71\xf0\x20\x66\x5c\x1a\xdc\x66\x8f\x07\x48\x31\x39\xdd\xe5\x82\x0e\x6e\x86\x44\xd7\x8d\x3c\xa0\x84\x6a\x05\xa7\xaf\x9c\x54\x84\x41\x4f\xb8\x54\x73\x10\x01\x33\x32\xe1\x8f\x71\x3b\x10\x47\xeb\x1c\xb7\x3b\xab\x1c\x2c\x7d\xd1\xa3\xc4\xd4\x8f\xca\x5a\x4d\xd4\xd7\x0b\x72\x78\x04\xf4\x59\xe0\xec\x0a\x31\x13\x2a\x54\x17\x7b\x11\x76\x4d\xd5\xc9\x7c\x88\x9d\xf1\xef\x84\xce\x21\x7a\x30\xdd\x58\x8b\x68\x8e\xf3\x65\x70\x8d\xdf\x62\x6c\x16\x4e\x16\x4c\xe1\x56\xf4\x65\x47\x1d\x45\x75\x23\xfd\xa4\xc9\x40\x46\xd9\xf5\xc5\x86\x87\x44\x24\x20\x53\x17\x96\xce\xb4\x94\x37\x5e\x76\x4c\x48\xb8\x48\x51\x8e\x42\xd4\x5f\xb6\x1a\x15\x59\x90\xa9\x64\x68\xf2\x51\x43\xcf\xe2\xf1\x56\x62\x23\x06\xb9\x9a\xc8\x6f\x51\xf0\x5e\xbf\xa0\xd7\xc5\xa7\x02\x54\xdd\x4d\x33\x6f\x35\xc8\xa3\x36\xb8\x6f\x69\xe7\x27\x6e\x9c\x14\x9f\xdf\x4c\xb3\xf0\x1e\x5f\xb1\xcf\xcb\xcd\xea\xe9\x2c\x58\x43\xf8\xc1\x21\xff\xc6\x56\xab\xe5\x1f\x86\xb2\x3f\x52\xf2\x6c\xa0\xed\x31\x71\xf7\x59\x74\x37\xe3\x66\x0a\x4d\xda\x86\x5b\xa8\xbb\x8f\x3a\x6c\x7f\x3b\xb8\xb7\x4c\xc2\x98\xbb\x3f\xed\xb8\x93\xab\x83\x82\xfb\x6f\x77\x2e\xca\x8b\x34\x09\x2f\x9e\x3a\xeb\x49\x79\xf4\xb9\x59\x6f\x15\xee\x51\xd7\xaa\x2a\x8c\x6f\x04\x71\x14\xca\x6d\x02\xd5\xd7\x94\x92\x34\x6f\xf3\xac\x40\xd8\x16\x1f\x36\x85\xa5\xbb\x28\x03\xad\x9f\x34\x2d\x72\xa9\xdc\xaa\xfb\xb3\x3c\x0f\xb4\xca\xf1\x9b\x5f\xc3\xfc\x1a\x10\x31\x88\x98\x75\xca\x78\x99\x23\x9a\xec\xdd\x5f\xe3\xdf\x3e\xeb\x55\xae\x8e\x04\x94\x05\xe6\x93\xad\xcb\x8e\x82\x61\x19\x10\xb2\xcb\xce\x41\x9a\xd2\xce\x55\x51\xdb\x3f\xf7\x4f\xd9\xab\x1a\x06\xa0\xec\xdb\x15\xfc\xe1\xcf\x1c\x79\x51\x1f\x4a\x55\x95\x42\xd5\x13\x16\x58\x5d\x82\x9f\x5a\xd6\xa9\x87\x4c\x8b\x44\x6e\x79\x92\x73\x85\xeb\x19\xe0\x29\x10\x84\x66\x17\x11\x51\x4a\xc9\x10\x4a\xb1\x51\x90\x49\x22\x8b\x9f\xd8\x60\x6d\x44\x61\x09\xea\x08\x94\x2e\xcc\x79\xc0\x81\x1e\xa0\x31\x96\x17\x80\x25\x80\xae\x5e\x0c\xc6\x7b\x34\x2a\x68\xb6\x1f\x1d\x05\x0e\x79\x9d\xaa\x9d\x2f\x3b\x75\x0f\xc8\x9a\x1a\x16\xa7\x94\x4f\x57\xce\x8c\x7a\x41\x84\x3e\x44\xe5\x64\x30\x5a\x73\x2a\x57\xaf\x79\x5d\xfc\x0a\xae\x41\xd5\xab\xb2\xc0\xb9\x0c\xed\xd0\x5f\xc3\x85\x85\x26\x1e\x49\x5b\xd7\x56\xba\xc7\xa8\x2b\x15\x0e\xf5\x36\x8a\x53\x93\x58\x24\x74\x13\x6e\x48\x40\xe5\xd1\x23\x76\x7d\xbd\xa3\x61\xa0\xff\xde\xd4\x78\x12\xd0\x7f\xff\xc9\xc9\x0d\x2c\x6c\x80\xa7\x25\x34\x8d\xa4\x28\x02\x23\x91\x74\xb4\xd6\x23\xb1\x1e\x06\x16\x40\x97\xf0\xda\xc8\xca\xb8\x50\x98\xcc\x7b\xd2\xd5\x26\x87\xc6\x94\x14\x22\xaa\x0d\x96\xb4\xe3\x50\xc3\xb4\x9d\xcf\xb4\xd3\xa4\xcd\xfb\x45\x3e\x23\xb2\xb1\x11\xf1\xcd\x19\xe2\x23\x9c\x16\x4b\xc1\x34\xb1\xbb\xcc\x60\xa2\x33\x37\xc2\xbf\xd3\xb2\x30\x39\xfb\x52\x83\x99\x63\xd1\xfd\xd3\x86\xff\x5f\x1b\xc6\x85\x3a\xa9\x1e\xb9\x6f\x41\xf6\x04\xf1\xdd\x84\x62\xe0\xcd\xa1\x8f\x36\x9b\x7c\x16\x8a\x0c\x88\x14\x09\x3a\xab\x74\x2e\x5a\x94\x44\x17\xcb\xfb\xa2\xfb\x48\xfd\x22\xf8\xba\xf4\x80\xd2\xe8\xd1\x39\x29\x5a\xde\xa2\xa8\xfa\x35\x5e\x88\xdd\xc9\x4c\x25\xe6\x10\xc5\x3b\xe5\x62\x25\xb6\x43\x27\x45\x75\x4f\xcb\x69\x6b\x9a\xa8\x0c\x8c\x12\xb7\xa4\x12\x79\xbe\xd1\x6e\xc9\x75\x18\x76\x24\x1e\xb2\x69\xf8\x35\x09\xc0\xca\x83\xf4\xaa\xfa\x38\x44\x17\xce\x86\xf9\xe9\x19\xf8\xdd\x0d\x03\xd8\xf9\x6f\x1b\x57\x80\xec\xfc\x13\x47\xbe\x2f\x5b\xca\x0c\xb0\x1f\x42\x7b\xd6\x82\x3d\x61\xc3\x9d\xe4\x65\xa7\x13\xb5\x23\x22\x31\xa0\x49\x2c\xe3\xe0\xfd\x68\x43\x84\xfb\x29\xa9\x1c\x01\x54\x05\xc4\x43\x59\x53\x58\x3c\x4d\x41\x3e\x26\xec\x17\xf6\x74\x49\xb3\x62\x99\x44\x8f\x94\x5c\xb7\xa9\x3a\xa7\xce\x38\x5a\xb5\x95\x74\x5b\xec\xf3\x0e\xbb\x1e\xe3\x06\xa4\x25\xee\xfe\xc6\x38\x08\x58\xcd\x8a\x76\xc1\x7a\xdd\x7f\xad\x63\xa7\x57\x09\x1e\x18\xf9\xa2\x5d\x8f\xa2\x74\xe9\x00\x17\x72\x92\x6e\x85\x4e\x39\x3c\x85\xa2\x9f\x37\xd0\x33\x26\x74\x9b\x10\x36\xaa\x6a\x99\x62\x5f\x9e\x60\x5f\x8d\x06\xf8\x5c\x1c\x44\x3d\x79\x23\x77\x3f\x3f\xe1\xbf\x69\xa2\xee\x4e\xe5\x38\x5d\xdc\xcb\x65\x24\x55\x38\xe4\x9f\x52\xd6\x21\xce\xa7\xf5\x1d\xb5\x6e\x2c\xca\x40\xdf\xca\x78\x8c\x48\xd8\x0a\x3f\x0b\xfb\xc5\xcd\x60\x20\x5d\x1a\x91\x69\xa7\x1b\x03\x38\xc0\x93\xac\x53\x1b\x62\x12\x85\x77\x6d\xce\x48\x98\x32\xb0\xaf\x98\xac\x89\x4a\x73\xe3\xd0\xea\x00\xa6\xa5\xc3\xe4\xac\x00\x9f\xaf\x48\x42\x3c\xa5\xcf\xc2\x24\xc1\xa2\xda\x04\xcc\xd6\x7d\x4c\x18\x0e\xc0\xfd\xd8\xe6\x21\x92\xcf\xc0\xb6\x29\x19\x28\x4f\x48\x25\x9d\xa6\x76\x27\x28\x09\xb2\x1d\x04\x18\xaa\xf1\x2c\x16\x36\xd8\x1a\x3c\xa4\x9b\x95\x7d\x60\x92\x7d\x55\x3f\x0d\xcf\x2a\xbe\x66\x44\xbd\xb9\x3f\x30\xe9\xbf\x76\xb2\xe6\x86\x3e\x46\xeb\xa6\x86\xd8\xb1\x1c\xdf\x84\x77\x25\x65\x3d\x52\x7a\x29\xfb\x4d\xec\x8d\x88\x17\x54\x40\xc1\x14\x05\xc2\x72\x90\x41\xc2\x93\x52\x0a\x45\x91\x9a\xd0\x7a\x05\xa6\xc3\xa4\x28\xf7\x2e\x9e\xcf\xc0\xdb\x0c\x78\xf1\x8b\x4d\x9a\x2a\x87\x72\x02\xc2\xc3\xe2\x47\x8e\x82\xb8\x21\xcf\x00\xa9\x3d\x7d\x84\x9c\x05\xe2\xef\xa3\xe0\xad\xc5\x9d\x7a\x85\xa7\x01\x46\xdc\x66\x00\xa2\x83\x45\x14\x1b\x62\x36\x04\xdf\x96\xab\x0b\x81\x92\xc5\xdc\x8e\x02\x65\x66\x21\x9a\x1a\xfc\x8e\x7b\xc1\x5e\xba\xa1\x77\x3c\x69\xbf\x9f\xe6\x40\xae\x2d\xb2\x87\x05\x0e\x62\x30\xa5\xe1\xbc\xc6\x28\xf4\x62\x90\x05\x71\xcc\xe3\x8b\xe6\xae\x1e\xcb\x4a\x62\xd5\x09\x58\x19\xe2\x19\x34\x21\xe5\x9a\x2f\xf7\xae\xd8\x16\x12\x04\x2f\x4a\x06\x70\xf7\x00\x15\x9a\xf0\x2e\xe8\x51\xa3\x2f\x11\xd8\xeb\x88\xc2\x36\x04\x3a\x51\x60\x00\x37\xd7\x94\x9f\x9c\xb4\xa2\x45\x84\xb1\x24\xc6\x5c\x5b\x91\x88\x41\x6c\xf1\x12\x17\x7b\x05\xd8\xdf\xbf\x6c\xd2\x3f\x55\xb9\x86\xd3\x49\x0d\x7f\x48\x01\x71\xc9\x76\x9a\xf2\x08\xcf\x76\x81\x3d\x3e\xc1\xbe\xd0\x60\x07\x82\x32\x8c\x40\x4a\xd4\xfd\x7c\xc3\xff\xf7\x8d\x59\xf9\xd3\x9e\xb0\xf4\xd4\x80\x0c\xdb\x0a\x5f\xaf\x82\x21\xc9\x8e\xd1\x1b\x47\x35\xfa\x30\x4b\xea\xed\xdc\x0b\xf2\x96\x27\xbf\x33\x8d\xc2\x8c\x43\xd9\x4e\x33\xc2\x86\x6f\xf0\x2c\xea\x0c\x4c\xc1\x6e\xf1\xe4\x26\x18\x06\x05\x4f\x42\x19\x91\x65\xce\x40\x94\xe1\x40\x97\xc5\x98\x49\x60\x63\x9f\xa4\xc6\x5d\xa5\x0c\x19\x4a\x97\xb7\xbc\x27\x1b\x15\x07\x13\x19\xcb\xea\x26\x7d\xc6\x88\x43\xd3\x0e\xc2\x31\x6e\xd8\xdb\xd8\x1e\x28\x84\xdb\xf2\xff\x25\x86\x91\xcb\x8d\x41\x3f\x10\xeb\xed\x2a\x0f\x32\xf0\x40\xad\x73\x3b\x28\xf1\x13\x8c\x4d\xef\x88\x0d\xcd\x7d\x0b\xf3\xdf\xe6\xc8\x5f\xc6\x66\x43\x71\xb2\xe2\x86\x78\x90\x14\x5d\x5e\x44\x6d\xd5\x9a\xb9\x9e\xdb\x9b\x84\xa3\x13\x43\x33\x8e\xa4\x94\xd5\x46\x90\x45\x69\x99\x2b\xba\x1a\xa2\x28\xf4\x66\x0d\x75\xac\x60\x80\x8b\x03\x9c\x15\x52\xb3\xbc\x50\xd3\xce\x34\x3d\x99\xb1\x17\xdb\x1d\xf3\x8f\xf6\xb3\xd7\x4d\x0c\x53\x35\xbe\x64\xc2\xff\xeb\xc6\xb2\x41\x0b\x66\xf4\x28\xb9\xe9\xe5\xd9\x54\x6e\xf0\x9e\x68\xba\x70\x93\x6f\xc8\x52\xfc\x27\x74\x0c\x52\x09\xe5\x55\xf5\x4f\x9e\x28\x65\x5d\x28\x4a\xbb\x1b\x24\x6b\x62\xa7\x85\xa1\x62\xd2\xdf\x53\xd0\xe4\x29\xec\x5a\x6a\x43\x9d\xa4\x94\x03\x85\x43\xb7\x5e\x1a\xa2\x36\x98\xa9\x0d\x4a\x5d\xc6\x5b\x4c\xfb\x24\xfc\x4f\x7b\x36\x89\x5e\x11\x73\xf6\xb4\xa8\xc6\x27\x9b\xa0\x45\xd8\x26\x48\xe6\x36\x98\xa6\x49\x7c\x3a\x48\xc2\x69\x65\x0f\xb7\x07\x15\x15\xe7\x9c\xc7\x9d\x33\x51\xb2\xee\x7e\xb3\x7f\x5e\xfe\x8d\x53\xc5\x85\xa5\x33\x55\xd6\xa7\x48\xeb\x08\x6e\xa3\x6c\xe6\x97\x3e\x37\xc9\xf6\xcb\xb0\x15\xf7\xd3\x93\xfe\xaf\x4c\xaa\x20\x16\x7d\x04\x23\x11\x13\xe0\x7c\x12\xbf\x03\x94\x58\x93\xde\x15\x6d\x4c\x23\xad\xad\xd4\x1f\x25\x4b\x66\x38\x58\x88\xe6\xb0\x6e\x90\x23\x74\x05\x86\x88\x11\xc0\xa4\x34\xeb\xd0\x59\x07\x2d\x2d\x59\x75\x0c\x57\x11\xe8\x6b\xca\xb8\x5d\x13\x3f\x51\xd8\x0c\x56\x41\x81\x5f\x0c\x6d\xf9\x59\xa5\x2e\x8b\x86\xd5\x25\x05\xea\xd5\x91\x51\x6a\xbc\xcd\xa9\x55\xd4\xf6\x62\xe0\xfe\x8c\x70\xb9\xab\x5c\x0b\xce\x46\x1d\xb3\xa4\x18\x4f\x51\x12\x07\xab\x28\x37\xf5\x70\x4f\x72\xda\x00\x64\x27\xf0\x3a\x7c\xd3\xeb\x45\x49\x29\xaa\x0b\x46\x02\xf6\x68\xe9\x5d\xb0\x46\xaa\x3a\x06\x24\xb5\x57\x18\x46\x52\x1b\x0e\x4f\xbe\xb1\x25\xb1\x2a\x15\xeb\x4c\x88\x53\x7f\x2c\x6b\x8a\x6a\x9a\x88\xe7\x88\x19\x0d\xb6\xbb\xbc\x69\xba\x94\x21\x3f\xc0\x8c\xa6\xaa\x12\x17\x09\xb0\x57\xe4\x61\x84\x0c\x6c\xb7\xba\xd9\x0f\x5e\xcf\x0e\xd7\x6b\xde\x1c\xb3\xbc\x6c\x18\xd0\xfc\x37\xd7\xf9\xf7\x0c\x5d\x35\x09\xe5\xcc\xb8\x51\x23\x5e\xbf\xe2\x6f\x93\xc6\x9b\x4d\xd1\x7f\x1d\xfb\xb2\xc3\xae\x6f\xa7\x71\x0c\x76\xc7\x1c\x70\xea\xfd\xa9\x8a\xe7\xfb\x94\x63\xdf\x52\x61\xaa\xf0\x23\xed\x88\xc6\xeb\x7a\xea\x19\xcd\xb6\x53\xb1\xf8\x47\x1a\x13\x65\x2e\x79\xf2\xf4\x19\x9b\x4e\x0f\x21\x01\x41\x02\xaa\x87\xa2\x8f\x44\x39\xa1\xf4\x22\xf4\xbf\xa3\x7d\x81\x1b\x2b\xe5\x8e\xd0\xde\x81\x4d\x31\x02\xe6\xd4\xd7\x96\xc8\xba\xb2\xbd\x42\x6f\x77\xd8\x0d\x54\x7d\xf2\x01\xf7\xd5\x8e\xff\xed\x4e\xe5\x62\x53\xf4\x62\xf0\xce\xf7\xfa\xc5\xa0\x59\x31\x09\xad\x59\xdf\x2e\xae\x1c\xa0\x6b\x3c\xe1\x59\xd5\x08\xcc\xc5\x38\x15\x05\xfc\xa6\x23\x4d\xf5\x41\x6c\xa9\xc3\x56\xa7\xe9\x18\xde\xcf\xe7\xca\xf6\x39\x55\xf5\x7d\xea\xc9\x07\x3e\x22\xf7\xd7\x5b\xb9\x1e\x8c\xea\x78\xaf\x32\xa6\x55\x6d\xbc\xd5\xf1\x5f\xed\xd8\xd7\xae\x75\x65\xc8\x72\x4d\x13\x1f\x80\xac\x93\xa6\xbc\x71\xd8\xac\x9b\xc7\x1d\x76\x43\xe5\x41\xf7\x4d\xaa\x13\xbf\xcc\xa9\xdc\xbb\x9a\xca\xd2\xee\x08\xf3\xbe\x2c\xb0\xac\x06\x48\xc4\xae\x31\xbb\x96\xbf\xec\x30\x66\xf0\x57\xff\xa5\xe3\x9f\x5b\xb2\x47\x34\xd1\xa9\x99\xb3\xaf\x98\x3e\xb5\xd3\x39\xc0\xc1\xde\x29\xe3\x9c\x57\x99\x47\x6d\x93\xf3\x6e\x76\xd7\xd6\xde\x90\xa1\xe9\x47\x51\x82\x6c\x8b\xd7\xa6\x18\xf4\x77\xc4\x6b\xf3\x1e\x73\xd4\x51\x93\xbd\x59\x35\xd9\xa3\x4e\xe5\xde\x57\xa8\xc9\x2a\x43\xde\x6e\xb3\xdf\x71\x98\x2b\x99\xdd\xee\xc3\xee\x2b\x46\xc7\x47\x31\xd7\xb7\x9e\xf0\x1f\x77\x86\x6f\x2b\x57\xbb\xc1\x65\xbb\xa6\xef\xca\x17\xf4\x01\xbc\x35\x73\x2e\x14\x55\x71\xd1\x61\xdf\xbb\x4e\x4d\x06\x50\x46\x8a\x46\x43\xec\x49\x7a\x25\xf1\xfb\x51\x25\xcd\x2e\x2e\x10\xb9\x9f\x5d\xbc\x57\x3a\xec\x3a\xb0\x95\x55\x7b\xbc\x50\x36\x47\xc7\xba\x7e\x55\x6d\x01\xfb\x0f\xf2\xf4\x81\x53\xc0\x9b\x33\xa8\x50\x8c\xec\xfc\xd8\x53\xd8\xd7\x8e\x26\xd1\x72\x5f\xf5\x14\xff\x0f\x1d\xc9\x55\x0e\x3b\x41\x31\xf7\x87\x5e\xb0\x2a\x3a\x9b\xd2\xa2\xc8\xd3\x4e\xb1\x89\x91\xf6\xf8\xa8\xad\x19\xdc\x1b\xe4\x8f\xc4\x87\xe5\x16\x06\x7c\x0f\x1d\x0f\x9d\xba\x80\xe3\xb2\xa4\xa2\x8f\x1f\x3f\x72\xeb\x61\xbd\x6d\xeb\x67\xe9\xa5\x01\x6c\x79\x38\x28\xd7\x36\x95\x63\x42\x9d\x09\x90\xb3\xb5\x02\x13\xa3\xb8\xcb\x38\xf6\x82\x24\xdf\xd4\x7b\xb5\xdc\x83\x53\xd7\xa2\x9b\xa5\xe5\x5a\x57\x7f\xc3\xb6\x53\x7e\xe9\xc0\x2e\xf7\xe3\x0e\xb9\x1f\x77\xa9\x63\xb7\x4d\x1d\xfb\x7f\x01\xc7\xeb\xfb\x1c\x36\x99\xf7\x79\xdb\x7d\xe7\x76\xc8\x9c\x69\x0a\x81\x43\x93\x17\x0c\x45\x20\x9b\xd4\x27\x0a\x98\xd3\x7a\x32\xb2\x2b\x72\x08\x46\x2f\xfa\x32\xd8\x9f\x3b\x8a\x7d\xea\xb3\x0e\x6b\x6d\x3b\xdf\xa8\x19\xfe\xb8\x73\x56\xaf\x2f\xf1\x40\x2f\x2b\xb9\x45\x63\xa5\x0a\xf0\x95\xb7\xf9\x2b\xe5\x7d\xc2\x39\xbf\x35\x49\x69\xd3\xbd\xa9\x8e\xa4\x54\x4a\x1d\x54\x68\x4a\xff\xe7\x3e\x76\xd4\xa8\x28\x74\xc7\x9a\x71\xe8\xf3\x51\x9e\x95\xe0\xb6\xbc\xb7\x0c\xd7\x78\x01\x8a\x18\xbf\xb0\xcf\xbf\x67\xc4\xbd\x3a\x6d\xa3\x9a\x47\x47\x48\x64\xfc\xed\x9e\xdd\x79\x7a\x87\xf3\xf4\x05\x29\x91\x71\x66\xfb\x21\xce\x5b\x37\xf3\xee\xf4\xff\x77\x23\x89\xd1\xdd\x7a\x80\x9f\x72\xe7\xd4\x00\xc7\x86\xd4\x72\x41\xf5\x63\xb2\x56\x34\xe8\xe5\x93\xec\xa6\x5a\x92\x4e\xa2\xde\x9d\x2d\x8a\xa0\xdd\x55\x34\x58\xbf\x3d\xe1\xdf\x5f\x77\x63\x0c\x76\xa9\xfa\xb8\x3a\xdb\xb8\xec\xec\x0f\xe0\x2a\xcf\x2e\x3b\x24\xc3\x70\xd9\xd9\x9f\xa4\xe1\x30\x86\xe9\xbf\x35\xd8\x1b\x1c\xa6\x9e\x77\x5f\xee\xf8\x2f\x9e\xa5\x1f\x15\x03\xda\x84\x55\x10\x78\x1b\xd9\x0e\x70\x4b\x79\xf6\xc2\xf2\x8a\xd7\x0d\x00\x37\x56\xc8\x40\x17\x91\x1d\xc5\xc2\xa2\x12\x51\xfe\xb0\xd5\x81\x77\x1f\x2f\x16\x01\x02\x2e\xb2\x76\xc8\x76\x2f\xdc\xcf\x54\xa6\x25\x8d\xa2\xf8\xad\xb7\xbb\x94\x0d\x43\x4b\x03\xb3\x4e\x41\x80\x3a\xa5\x17\x2b\x39\x8a\x7c\x8c\xd5\x39\xae\x91\x50\x9b\xe2\x16\xfc\xb7\xea\xe9\x92\xe4\xc7\x06\xa6\xc6\xc8\x4c\x8b\xfd\xc4\x24\xfb\x96\xab\x83\x51\xcf\x95\x79\x91\xf6\xa4\x16\xd3\x72\xb9\x2a\x67\x01\x72\xc8\xfd\xe6\x84\xff\xd1\x89\x2d\x1e\x52\x93\x7b\x37\xdd\x14\x93\x2f\x7c\x99\x42\x01\xe0\x7e\xae\xdf\x00\xdb\xcf\x4e\x4f\xcc\x2c\xc4\x5a\x98\x57\x71\x51\x00\xfd\x6d\x61\x32\x17\xbd\x67\x2f\x9f\x3f\x47\x48\x4e\x88\xec\xc1\xfe\x6a\xa7\x26\x8f\x3a\x79\xd1\xf4\x6e\xa2\x10\x14\x31\x01\xce\x8c\xc8\x0b\x3a\x14\x45\x0a\x7a\x02\xbc\xc9\x5b\xbc\xb0\x62\x45\xac\x8a\xa7\xea\x52\xc0\x18\x8d\xa1\x04\x70\x14\x90\x13\x7c\x2d\x81\xc3\xd8\x2e\x86\xc9\x00\xdd\xe4\xa0\x80\xd3\x7b\x7e\xa9\xcd\xfb\x85\x55\x53\x45\x90\xbc\x20\xc0\x0c\xcc\x2c\x9e\x5f\x5e\x99\x59\x9c\x5d\x99\xbb\x7f\x28\x2f\xd5\x0f\x0e\x7f\x64\x28\x51\x63\x78\xb2\xd7\x30\x76\xef\xce\xa5\x97\x28\x48\x4e\xe9\xf5\xb8\xbf\x7a\xc0\xff\x26\x43\x45\x2b\x33\x35\x9e\xc9\xfd\x8d\xfc\x5b\x86\xac\x2b\x04\xaa\x3c\x24\xa1\x6c\x00\xaf\x52\x98\x5e\x89\x70\x83\x59\xd2\xb7\x4d\xc1\xff\xbe\x8f\xfd\xb0\xdc\xec\xbe\xd5\x61\x2b\x57\xab\x23\x55\x2d\x0c\x6c\x8a\x4f\xc3\xd4\x58\x4b\xc9\x2b\x0a\x82\x70\xfa\x64\x8d\x74\x31\x61\x15\xa2\x2b\x14\x65\x8c\xa5\x66\x6f\xd6\x1b\xdc\xef\x75\xd8\x43\x4f\x7a\x5e\x71\x23\x7c\x1b\x0d\x1b\x95\xdf\x90\x67\x11\x1e\xe2\x0f\xb1\x20\x27\xe0\x0a\xa1\xec\xed\xee\xd5\x76\x6d\xea\x6b\xb4\xa9\x7a\xc0\xd8\x54\x8d\x89\xbe\xdd\x96\x45\xfd\x84\xb3\xbe\xf5\xb6\xea\x7e\xf7\xf4\xce\x95\xc6\x6a\x77\x56\xbf\xb2\x8f\x4d\x6d\xc3\x55\x0c\x96\xd4\x5b\xf6\xf9\x47\x2a\xd7\xea\x2c\x28\xe3\x91\x11\x96\xd3\x17\x76\x2d\xa7\x9d\x8e\xc6\x07\xa4\xe5\x74\xaf\x69\x39\xdd\xc2\x8e\x8f\x51\x44\x18\xd5\x98\xbb\x43\xfb\xef\xc6\x5e\x7a\xde\xd6\x03\xfb\x4e\xf7\x8e\xe9\xea\x28\x3d\xc6\x3c\x3d\xd6\xfb\xb9\xf6\x92\xd8\x43\x91\xb1\x9f\xda\xcb\x9e\x6e\x39\x92\xd2\x2c\x24\xbd\x6b\xc8\x08\x0f\x72\xd4\x88\xf8\x9e\xbd\xfe\x21\xf5\x8b\x9a\x7e\xd8\x24\x82\x27\xec\xfd\xc8\xa7\xf6\xb0\x8c\x3d\x15\x82\xb7\x34\x83\x79\xee\x3e\x4f\x1e\x23\x2c\x54\x6f\x0d\x9f\x24\x14\xc6\x4d\xf8\x0c\x86\x82\x49\x16\xca\x6e\x1a\x87\x3c\xcb\xed\x93\x82\xc7\x1c\x76\x20\xe3\x09\xdf\x04\x76\xf2\xd7\x38\x57\x29\xee\xb3\xa4\xd2\xc2\xb2\x17\x86\xd6\x8f\x3e\x68\xc7\x9c\x98\x79\xec\x06\x44\x2f\x2f\xcf\x5e\x60\xda\x80\x5a\x62\xdf\xe5\xb0\x83\x41\x1b\x02\x94\x21\x93\x2f\xb8\xca\x3c\x9e\x34\x12\x1b\x97\x4b\xcc\xd9\x66\x90\x7b\xf4\x42\xd8\x62\x9c\x5d\x8f\x99\x5f\x20\xd0\xad\xbb\xec\x9f\xb6\xaf\x54\x82\x68\x2b\xe8\x7a\xb3\xe8\xd6\x87\x2c\x33\xf0\xdf\x3b\xec\xab\xe1\xea\x3c\x01\x3d\x24\x4d\xed\xe3\xea\x94\xef\x8d\x4e\xdd\x03\x04\x32\x94\xf0\x10\x89\x9b\x0a\x21\x0e\x4a\xb2\xd7\x52\x84\x20\x85\xe0\x01\xf2\xb3\x48\x89\xaa\x87\x8a\xea\x45\x86\x3d\xdc\xe3\x41\x5e\x66\xdc\x0b\xd6\x44\xb1\x88\x7e\x3e\xed\x60\x83\x29\x6f\xe9\x92\x6c\x79\xbb\x83\x7d\xc6\x61\xad\x9d\x91\x04\xba\x3f\xea\xf8\x4b\xd5\x8b\x15\x63\x00\xe9\x15\x0c\xc6\xc4\x79\xc3\xc2\x37\x58\x3d\x30\x54\x10\xa2\xb4\xea\xf4\x2c\xe6\x47\x09\x47\xe0\xb2\x0f\x54\x0f\xa6\x3b\x41\x33\x27\x9a\xad\xf5\xfb\x93\x96\xf3\xb4\x2e\xda\x5d\x51\xca\x6a\x0d\x89\x77\x4d\xfa\x67\x6a\xae\x8f\xd6\x90\x90\x31\x2f\x00\x9b\xda\xa1\x88\xc4\x87\x27\xd8\xeb\xeb\xf5\x11\xfe\xf5\x95\x0b\x12\xcc\x57\x05\x09\xae\x48\x23\xe1\x1f\x9d\xb8\xc5\x71\x12\xb7\xb8\xd9\xff\x86\x15\xa5\x71\xa2\x9b\xb6\x5e\xdd\xe2\x77\x1c\xcb\x4d\x57\xf1\xdc\xfe\x83\x1f\x42\x6f\xd8\x5f\x87\xea\x02\x72\xe1\x28\x59\xc3\x38\x11\x14\xdc\x59\xe6\x85\xfb\xc7\xfb\xfc\x7b\x61\x7d\x2d\x52\x79\x3c\x6e\x01\xc0\xcd\x93\xa7\x10\x65\x7a\x44\xcd\x4a\xc2\x61\x5c\x63\xec\xe5\xf7\xfb\xf6\xb1\xd7\xee\x63\xd7\xf7\x82\x4b\x17\x12\x05\x1b\x71\x5f\xb2\x6f\xbb\x26\x47\x59\x44\x71\x2b\x4a\x8a\xbc\xc8\x5a\x0b\x49\x71\x3e\x43\xd8\xab\xff\xe1\xbd\x2b\xb5\xb1\x82\xaa\x30\x46\x94\x9b\x04\xb8\xea\x0c\x98\xac\xda\x94\x6b\xc2\xb1\xd2\xb3\x81\x30\xc8\xf3\x34\x2e\x0b\xb5\x11\x38\xc4\x2f\x9d\xf4\x6e\x39\xec\xa1\xa3\x84\x67\x6d\xb1\x8b\x27\xfa\xa3\xb4\x08\xe2\xd1\x99\x08\x94\xeb\x28\x53\x08\x72\x0a\xbd\x81\x44\x8f\x1e\x79\xc6\xe1\x96\x37\x5b\xf9\x1e\x88\x42\xc5\x6d\x3a\x12\x43\xfe\x60\xfd\xd5\xd5\x81\x97\xa5\x65\x12\x62\xbd\xd3\x9a\xa2\x39\x30\x8f\x28\x8a\x79\x23\xf2\x10\xc8\x01\x7a\xfd\x98\x9f\x34\x64\x02\x35\x3b\xf6\xf1\x23\xcf\x68\x8a\xbc\x02\x2a\xe4\xf8\x91\x67\x68\x1c\xbd\x5d\x3a\x88\xb8\xa8\xfa\x3a\x25\x2f\x00\x74\x17\xec\x1a\xfd\x34\x24\x6a\x6d\x22\x3d\xa7\x6e\x84\x62\x0b\xcb\x28\xca\xcf\xc3\xc3\x50\xe7\x80\xbe\x28\xba\x3c\xa2\xf0\xc4\xbc\x20\x42\x50\x51\xdd\x89\xac\xae\x00\xb9\xf7\x31\x54\x56\x4c\x8e\x88\xe3\xa3\xbb\x50\xc1\xb9\xa8\x1a\x78\x1b\x1c\x40\xd5\xe2\xa4\x39\x1f\x6a\x1e\x44\x48\x24\xde\xaa\xe8\x13\xb9\x57\xf6\x21\xac\xbd\xf2\x14\xa2\xc1\x44\xf6\xe2\xa0\xcd\x5b\xde\x79\x20\xac\x40\x44\x9f\x11\xb8\x24\x7b\x58\x13\x14\x00\x20\x4a\x24\x4b\xdb\x80\x0a\x4c\x93\x22\x25\xd9\x3c\x3b\xed\xa6\x57\x74\xcb\xdc\xe3\x49\x5e\x6a\x48\xb7\x42\xf1\xdf\x86\x59\x4f\xb3\x68\x2d\x4a\xc6\x76\x33\xf3\xfb\x1e\xd1\x7c\xa1\xe4\xf0\x70\x77\x67\xef\x3b\x50\xab\xe1\x05\xa1\xb8\xc0\xe1\x03\xf6\xf3\x77\x1f\xf0\xa7\xed\x4b\x76\x30\x84\xbe\x87\xc0\xe2\x7a\xe3\xf9\x2f\xf6\xb1\x0f\x99\x67\xf8\xef\xd9\x89\x90\xca\xb0\x59\xe2\x3f\xa2\x4e\xf0\x11\xdc\x7b\x8d\x4e\xef\x0d\xfb\x6a\xd7\xf8\xdf\xa1\xf1\xff\xeb\x8e\xb4\xfe\x3f\xe6\xf8\xdf\xe1\x2c\x00\xea\x7c\x54\xd7\x51\x18\xee\x1d\x86\x11\x5b\x98\xed\x19\x0c\x69\x9d\x6e\xa7\xbd\x7e\x59\xf0\x69\x95\xad\x69\x15\x5f\x37\x63\x3a\x22\x66\xd8\x34\xbb\x79\x4b\x48\x83\xce\xe5\xae\x0b\x62\xdb\x2e\x88\x27\x9c\x87\xb6\xf6\x1b\x1c\x77\x8f\xd6\x01\x29\xec\xd9\xa6\x8a\xa7\xf8\xab\x03\x6c\xc1\xdc\xcf\x8c\xa5\x3e\x3a\x0b\x20\xc3\x64\x4d\x52\x20\x99\xbd\x05\x66\xb7\x1f\x3c\xe0\x3f\xb0\xd5\x43\x76\xa7\x1d\xf7\x74\xfd\xdc\xf7\xbe\x7d\xbb\x1d\x67\xfb\xbe\xab\xdd\x65\xe2\x1f\xd7\x32\xf1\x7a\xb5\x4c\xbc\xc2\xf1\x9f\x71\x66\x3b\xa3\xcc\x9c\xc3\x1f\x66\x17\xd8\xf2\x68\x67\xf2\x15\xcf\x0e\x4f\x38\xdf\xe1\x6c\x3d\x83\x85\xee\xaa\x3e\xd2\xa8\xfd\x56\xe5\x60\x63\xab\xb9\xa6\xf6\xb8\xe3\x77\xf7\x32\xaf\x5e\x22\x19\x17\x35\x90\x41\xfd\xc0\x5e\xff\x6e\xeb\x8a\x6d\x94\xca\x18\x78\xc0\x0f\x43\xcc\x3b\x99\xa9\x9a\x9b\xfe\xb2\x73\x5d\xdb\x4c\xc0\xd6\x27\xdd\xc3\x3e\xef\xb0\xfd\x92\x66\xd2\xfd\xcf\xca\x5d\xf6\x11\x47\x6b\xa7\x41\xea\x45\x4a\x87\xf9\x32\xf4\x4c\xbc\x84\x1c\xd0\x9a\x3f\x06\xfa\xb9\x3c\x4e\x0e\x90\x50\x08\x5f\xc7\xdd\x6d\xd3\x3b\xe2\xdd\xe5\x5d\xf2\xee\xf2\x6e\xbd\xe5\x96\xe3\xb7\xc2\xeb\x16\xbb\x70\x5e\x9f\x1a\xc6\x2c\x5b\x15\x21\xba\x71\x5e\x98\x54\xd9\x61\x0a\x41\x22\xe8\xa7\xeb\x46\x15\xc7\xed\xc7\x1c\x32\xbb\x3f\xe4\xf8\x8f\x3b\xe3\xb2\x9d\x78\x0b\xb3\xe7\x66\x9f\xbf\xfc\xd0\xdc\xf3\xcf\xcd\x9e\x3d\x05\x43\x8a\x78\x22\x0c\x7e\x39\xe4\x0d\x08\xda\x5d\xc2\x82\xeb\x26\x10\xf6\x91\xc1\x1b\x20\xdf\x85\xe0\x7c\x3c\x70\x97\xfe\x14\xac\x58\x4b\x6a\xa0\xc3\x33\xa9\x83\x30\x90\x10\xca\xdc\xf2\x6c\x3c\x87\xed\xef\x67\x69\x91\xb6\xd3\xd8\x3d\xeb\xdf\xb3\x48\x7f\x93\x18\x1c\x54\x0c\x95\xe4\xc2\xfc\x62\xd3\x5b\x99\x5b\x84\x28\xfa\xe5\xb9\x95\x45\x5b\x9f\xcc\x5f\x99\x5b\xf4\xad\xa4\xbf\xd3\x61\x76\x67\x71\x37\x65\x7f\x58\xdd\xaa\x3b\x20\x85\xa6\x41\xad\x86\xa6\xeb\x0e\x3a\x83\xd5\x5c\xb3\x6c\x2f\xf2\x62\xbb\xb7\xf9\x37\x3d\x0c\x38\x7e\xd1\xdc\x0b\x8b\x50\x35\x11\x81\xdf\x15\xbb\x1c\xe5\xc9\x2a\xcd\x4b\x99\xa5\x04\x2c\x07\xd8\xb9\x34\xe4\xb3\x1d\x98\x58\x06\xee\x67\x0e\xf8\x77\x8a\x0b\x5e\x40\x57\x70\x05\x47\x6a\x79\xb2\x89\xf5\xbd\x1c\x6d\x5b\x90\xc4\x2d\x63\xd9\x2e\x72\x30\xbd\xee\x00\xfb\xdd\x3d\x6c\xa6\x2f\x1b\x71\x1e\x8c\xb3\x65\xf5\xce\x02\x60\x44\xe8\xf2\xa9\x4b\xbc\x5d\x82\x5f\xf3\x9d\x7b\xfc\xdf\x9d\x94\x0c\x6b\xc2\x72\x26\x86\x81\xbe\x62\xe9\x93\x37\xc8\xf5\x91\x5a\x96\x7a\x50\x44\x79\x07\x81\x3a\x2a\x9f\xfc\x92\x98\x23\x30\x48\x4e\x75\x73\x25\xea\x07\xc1\x6f\x4d\x49\xb4\x2e\x16\x8b\x76\x37\x4d\x81\xe3\x4c\xa3\xb0\x90\x45\x8f\xe7\xe8\xa5\xa3\x48\x49\x72\x1c\x18\xc9\xa3\x9d\xae\x5f\x13\x2d\x0e\xc4\xb4\xaa\x27\xcb\xc0\x6f\x12\xcb\x81\x1f\x40\x8e\x27\x56\xaf\xbc\xec\x89\x44\x37\x79\xb4\xd6\x2d\x72\x64\xa5\x43\x82\x36\x18\x58\x2a\xd9\x1e\xe7\x05\xb2\x02\x4b\x70\xb1\xd1\x12\xc8\xc5\x4a\x0c\x6b\x6a\x63\x45\x9b\xa0\xa6\x16\xc5\xa8\x34\x47\x6d\x75\x21\x47\xef\xe1\xa6\x47\xd6\x86\x98\x51\xcb\x9e\xa8\xba\xa8\x80\xc0\x17\xd8\xc4\xe9\x98\x09\x1e\xd3\x87\x53\x8b\x5f\x16\x74\xe6\x42\x70\xe2\xf8\x58\x38\x5f\x61\x82\xca\x9e\x8c\x50\x85\xf2\xc1\xd4\x26\x75\x62\x55\xf8\x8d\x78\x13\xee\x9c\xd2\x79\xbb\x53\xbd\x74\x28\x3f\xac\x2b\xb3\x1b\xad\x75\x65\x5d\x4a\x41\x16\xbb\x0d\xac\xa5\xf5\x2e\x76\x92\xdd\xbe\x35\x25\x88\x7c\x57\xd7\xd7\x0a\xcf\x7a\xec\x3d\x13\xac\x35\xaa\x42\x47\xf4\xef\xbf\x6d\xb0\xe9\x2d\xbf\x07\x1a\xf1\x92\xe8\xea\x57\x1b\xc4\xf0\xa9\x5a\xc8\x6a\xe3\x11\x3d\x5a\xd1\xe6\xf5\xd0\xdf\x6f\x74\x91\x22\xea\x71\xc5\xb7\x61\x49\x0b\xc8\xa1\x15\xa2\x17\x47\x56\x70\xcb\xbb\xa2\x1c\xb4\xe1\xa0\x08\x1d\xc0\x32\x17\x69\x8f\xe3\x81\x83\x74\xd6\x88\x2c\x70\x59\x3b\xc8\x7f\xe9\x85\xa8\x5c\xa8\x1c\x62\x87\x9b\x06\x50\x1e\x86\x68\x9a\xa9\x58\xe7\x22\x03\xbe\x46\x2e\x36\x61\x25\x68\x3b\xf0\x8d\xa8\xad\x95\x65\xc0\x46\x10\x76\x00\x94\x84\x7d\x6e\x6f\xed\x34\xb8\x98\x86\xf3\xe7\x96\x89\xe0\xf6\xe7\xf7\xfa\xcf\x37\x2f\x58\x1b\xda\xf9\x73\xcb\x26\x4d\xa1\x64\xcd\x81\xc5\x2e\x94\xa7\x17\x29\xf9\xe0\x64\xa8\x25\x65\x63\xfe\xdc\x32\xb2\xc3\xd8\x53\xe5\xaf\xef\x61\xbf\xe4\xb0\x83\x40\x92\x85\x1b\x5f\xf7\xfd\x8e\xff\x06\x67\x56\x19\x64\xe2\xa3\xe0\x06\x27\x1c\x9b\x5e\x58\xb8\x5c\x5a\x94\xdc\x53\xbf\x8f\x24\x19\xd4\x80\xab\x70\x5a\xa7\x93\x1e\x9d\x27\x6f\xbe\x84\x73\x84\x82\x7c\xee\xf2\x05\x99\x32\x91\xb2\x8c\x63\xba\xf8\x89\x06\xdb\x87\x9c\x96\xb9\xfb\x23\x0d\xff\xb3\x95\x22\x10\x7f\x69\x46\xbc\x97\xd5\xac\x43\x7c\xa2\xc1\x23\x02\x59\xa7\x47\xb7\x97\x6d\x2e\xb6\xe8\x7c\x38\xcb\xde\x12\x07\xb7\x33\x58\x1a\x32\x41\x70\xaf\x46\x89\x47\xdc\xd1\xf8\x52\xba\xc1\xb3\x2c\x82\x99\x36\x95\xf4\x83\xa2\x4a\x03\x45\x5b\x04\xb9\x32\x5b\x52\xd7\xc6\x6d\xec\x16\x76\x7c\x3b\x84\x61\xaa\x6b\xe1\xb7\xd9\xaf\x81\x38\x6e\x90\x89\xb9\xcf\xfd\x05\xc7\x7f\x7b\xa5\xe2\xf0\x9e\x17\xa6\x3d\x38\x1a\x16\x6b\x82\xd8\x00\x4c\x43\x9f\x88\xd3\x74\x5d\x39\xc7\xc7\x76\x03\x4a\x06\x75\xcd\xb6\x55\xa1\xd6\x1b\x3b\xe8\x08\x9f\x3a\x60\x32\x97\x6c\x23\x54\xc0\x7d\xdb\x01\xbf\x5b\x73\x9d\xe8\x85\x25\x93\x47\x4a\x63\x11\xe7\xf5\xe0\x92\x17\xaa\xe7\xad\xad\x63\x3b\x90\xd1\xce\x55\x10\x94\xd8\x35\x58\xa3\xef\x17\xf7\xed\xda\xb3\xbb\x08\xc4\x7f\x08\x08\x44\xf6\xdd\x12\x72\xfc\x52\x87\x3d\xeb\x2a\xe2\x72\x00\x5d\x3c\xbb\xbc\x13\xe5\xf1\x9a\x54\x5a\xc2\x42\x92\x47\xdb\xff\x2f\x9b\xbd\x9a\x0c\x21\x84\xf8\x8e\x6d\x85\xd2\xd5\x65\xe5\x09\x27\xdc\xda\x93\x31\xeb\x3e\x6b\x07\x31\x2f\xb5\x6e\x8a\xd7\x1f\x60\xcf\x7d\x32\x43\x1c\xe6\x55\x8d\x81\xab\xf6\x27\xf7\xfb\x0f\x8c\x7b\xc0\x76\xd3\x8e\x7a\x52\x9d\x34\xd4\xba\x6a\x3f\xb9\x77\x77\xbe\xdb\xe1\x7c\xf7\x2e\xe5\xbf\xfb\x01\xc7\xbf\x89\x4e\x79\x34\xc3\xf0\xa8\x76\xc8\xcd\x05\xb2\xcb\x3a\x2c\x7c\x32\x25\x07\x46\x7d\x75\x77\x76\xfe\xbb\x01\x91\xbe\x70\xeb\x09\xe8\x1b\xdd\x87\x86\x40\xa4\x47\x4d\x10\xa9\xd9\xce\x15\xaf\xea\xb8\x69\x81\xb1\xff\xb5\xdf\x52\x83\x0e\xca\x22\x25\x7a\xc5\xd6\xc6\x31\x89\x22\xc3\x57\xcf\xf2\x22\x8b\xda\x18\xe1\xe5\xfe\xfc\x7e\xff\x3f\x4c\xd4\xdd\x31\xa2\xe2\x64\x1c\x15\x30\x1f\xa6\xc8\x95\x2a\x29\xdf\xe0\x0d\x0f\x50\x4a\xe2\x19\xcd\x8c\xd7\x04\x31\x7f\x65\x19\x46\x89\x6e\x7e\x31\xa8\x81\xb6\x0b\x24\x97\x00\xae\x06\xe1\x47\x8a\x38\xd2\x06\x52\xe2\x77\x8b\x20\x13\xbb\x41\x34\x10\xe7\x16\x2f\x80\x09\xc8\x7b\x69\x36\x38\x8c\xda\xa9\x52\xb5\x45\x6d\x80\x37\x78\x06\xdc\xbf\x45\xba\x86\x7a\x75\xc4\x43\xb9\xca\xc5\xd7\xda\x69\xaf\x1f\x64\x7a\x7f\x8c\xe9\xb7\x3c\xd4\x0d\xc0\x72\x21\xd8\x60\xb5\x8c\x62\xf0\x65\x56\xcb\x97\x84\xe8\xd3\x84\x52\x12\x89\x27\xf0\x58\x90\x3d\x01\x86\x60\x5f\x03\x32\x34\x6a\x01\x9c\x56\x59\x2f\x88\xbd\x3e\xcf\xa6\xc1\x43\x4a\x1f\x94\xac\x59\xc8\x69\x9c\xfb\x9e\x0c\x23\xf3\xce\x4b\x52\x3d\x1f\xb3\xea\x7b\xa2\x4f\x1b\xd8\x94\x1c\xc8\xa6\x86\x21\x56\xff\x75\xd2\xc4\x58\x25\x23\x18\xa4\x75\xec\x56\xe2\x41\x3b\x55\x21\x64\x7f\xe5\xb0\x7f\x86\x5f\x9e\xc5\x9a\xbd\x50\x44\x71\xf4\x02\x24\x62\xf9\x4d\xe5\x29\xff\x90\x33\xea\x21\xf9\x55\x6a\x49\xa5\x4e\x0f\x8e\x05\x7c\x7a\x28\x33\xd4\xbf\x82\x76\x96\xe6\x39\xf1\x96\xc7\x7c\x23\x48\x24\xa4\xc4\x0c\xd0\x43\x55\x2d\x1b\xb2\xd4\x35\x05\x6b\xad\x4f\x0e\x85\xdd\x89\x04\x6d\xaf\xeb\xdb\x1a\xcc\xb5\x4a\x03\xe0\x29\xf7\x95\x8d\x1d\xcc\x14\x2d\xf9\x9d\xd6\x83\x65\x00\x58\x5e\xff\xe3\xce\x70\xa2\xd7\xa4\x72\xa0\x42\xb2\x60\x93\x92\x3b\x44\x2a\x25\xb0\x56\x8f\xad\xab\xc3\x4d\x2f\x8f\x7a\x51\x1c\x64\x72\x78\x50\x6f\xa4\x4f\xca\x45\x62\xd0\xe7\x2d\xf6\x31\xc6\x9e\x51\x77\x72\xc3\xfb\xdd\xd3\xcb\x18\x60\x4a\x93\xcd\x9b\x99\xff\xdd\xce\x92\x79\x62\x23\x1e\xf2\x0c\x19\xd0\x1e\x90\x9b\x81\x21\x17\x07\xb9\xa4\x63\x8a\x3a\x5c\x82\x86\xd1\xd7\x22\x5e\xeb\xe4\x8a\x07\x98\x8e\x3a\xf2\xb2\x0f\x8e\xef\x74\x33\xe1\x59\xde\x8d\xfa\x44\xff\x0d\x51\xc3\x69\xe6\x91\x3e\xaf\xa8\xa5\x60\x95\xc3\xdc\x78\xd9\xd9\xdf\x4b\x93\x48\xac\x1d\xd6\x98\xf9\xeb\xfd\xec\x27\x1c\xa6\xee\xb9\xef\x70\xfc\x57\x38\x4b\xe4\xe9\x3b\xe9\x9d\xa5\xeb\x75\x41\x36\x50\x24\xf9\x62\xdd\x2a\x26\x1a\x29\xc8\xb9\x9c\xe0\x67\xee\x3f\x35\x3b\x3f\x43\x44\x37\xf9\x0c\x95\x69\xa6\x0d\x45\x9c\x59\x3a\x35\x3b\x7f\xf6\x94\x58\xc1\xba\xe9\xe6\x74\x91\x4e\x97\x39\x9f\x8e\x8a\x31\x96\x37\x67\x93\xc2\x5a\x77\xbf\xc5\x5f\x3c\x4f\xea\x22\x27\xbd\x0b\x39\x8e\x0f\xf4\x86\x96\x30\x5c\xb2\x34\x2d\x9a\x5e\x16\xc0\xdc\x08\xac\x7f\xe2\x6e\xa7\x8c\x63\x2c\x43\x91\x71\xae\x34\x10\x44\x49\x67\x2a\x88\xd2\xfd\x52\xcb\xd5\xfd\x84\xe3\xff\xbc\xa3\xbf\x66\x1e\xab\xa0\x16\xea\x21\xf1\xe8\xcc\x66\x16\x15\xfc\x30\x32\x5d\xc0\x74\x06\x8c\xc4\x86\xd2\x2b\xec\x43\xe4\x4d\x29\x39\x1a\x25\x14\x03\x0e\x6c\xd2\xf5\x1b\xbe\x27\xa7\x4e\x0d\xb9\xca\x8f\x3b\x8c\xe5\xbc\x9d\x71\x10\xa9\xc5\x53\x32\x5d\xc0\x65\x75\x47\x8e\x5b\xa9\xbb\xb2\xce\x07\x5e\x26\x85\x52\x2f\xe4\x3c\xb3\x6b\x90\x17\x6d\xc8\xc5\x4c\x99\xf3\xac\x85\x1f\xb8\x76\xe5\xd1\xad\xf5\x45\x87\x1d\xc0\xaf\x2d\xf1\x8e\xfb\xa7\x0e\xbb\x65\x6b\x48\x50\xda\x0e\x62\xb4\x3d\xb5\xaa\xd5\x7b\x87\x2a\x61\x89\x77\x30\x50\xba\xa2\x6e\x55\x21\x24\xa6\xa2\xd6\xd6\x0a\xf0\xd8\x5d\xb3\x66\x65\x3f\xe4\xb0\x49\x51\xdd\xee\x5b\x1c\xff\x55\x8e\x35\x26\x94\x48\x5c\x16\x84\x69\x8e\xb4\xa2\x62\x51\xb4\xb2\x17\x84\xbd\x28\xf9\x4a\x34\xd2\x5b\x27\x6b\xb1\x8a\xea\x9c\x17\xc2\x8a\xdc\xff\x35\xe1\xff\x3b\xc7\xbe\x06\x61\x21\x30\xa1\x4b\xd2\x4f\x85\xfb\x37\x54\xd9\xcf\x1b\xac\xbc\x62\x3b\xde\xe3\xbd\x55\xb9\x95\xb7\x74\xb2\x90\x2e\x59\xb1\x2a\xf7\x86\xce\xa1\x35\xdb\xb8\x78\x2a\xca\x3d\x3b\x3b\x0f\x23\x65\xb6\xed\xe3\xfe\x85\x06\xeb\xb0\x7d\x84\x9f\x75\xbf\x69\x1b\x3c\xec\x76\xa2\x4b\xf8\xa6\xff\x2f\xe7\x2d\xf8\x7e\xa0\x20\xb9\xaa\xa4\x2c\x65\x0c\x69\xbf\x84\x59\xe1\x06\x63\x04\x1e\xeb\x3f\xb5\xa2\x5e\xf6\x9f\x5e\xfd\x9a\x4e\xd8\xf8\x60\x87\xed\x23\x9a\xf0\x2b\x28\x18\xd5\xd6\x70\xc1\x28\x49\xe3\x3b\x3f\x75\xa0\x76\xa5\xa5\x28\xd2\xd9\x36\x50\x83\x4a\x40\xeb\xad\xc3\x97\x6d\xef\x81\x7d\x5f\xfa\x0c\x6a\x5d\x06\xbf\xbf\x8b\x6c\xfd\xc7\xe6\xf2\xf8\x45\xe5\xf2\xf8\x80\xe3\x6f\x9e\xa9\xed\x33\xdb\x86\xb2\x16\x41\xbe\xae\x71\xac\x5c\x58\x3c\x06\x5c\x55\x5f\x27\x84\xc7\x74\x80\xe9\x5b\x40\xd6\xe3\xec\x28\x9b\xd9\x2e\x37\x17\x65\x70\xd7\x15\xb2\x03\x30\xeb\x73\xb7\xf6\x5f\xdc\xe6\xde\x32\x86\x15\xcc\x98\x69\xaa\x80\xd6\x9f\x79\x0a\xbb\x65\x8b\x18\x37\x2b\x56\x87\xf7\xe3\x74\x20\xf6\xed\xee\x4b\x9e\xe2\xdf\xb6\xdd\x60\x9d\x71\x11\x3a\x3f\x7d\x90\xfd\xc1\x1e\xb6\xbf\x17\x5c\x5a\x2e\xb3\x35\xee\xfe\x97\x3d\x57\x1b\x9b\xf3\x86\x3d\xf5\xb1\x39\x43\x11\x39\xfa\x54\x3d\x58\x4d\x89\x8a\x66\x58\x28\x0d\xcc\xcf\xab\x09\xcf\x91\x49\xc2\xf7\x8d\x88\x1b\x19\x33\x23\x0f\xf9\x8f\x78\x51\xc7\x3b\x6b\x45\x2a\x89\x41\x71\xe4\x6a\x63\x73\xee\x1d\xc8\x6d\x41\x13\xf1\x4d\x68\xc1\x1e\x05\x4e\x54\xa0\x0e\xdf\x3a\x2e\x47\x46\x9a\x2c\xcd\xe9\xca\x0b\x44\xcd\x95\x7d\x2f\xea\xf5\x78\x18\x05\x05\x37\xb5\xd9\xed\x26\xa7\xd8\x98\xa6\x97\x97\x20\xea\xa1\x14\x24\xec\xd0\x9e\x94\x30\x29\x2a\xa6\x85\x0c\x48\x7e\xa9\xcd\x79\xe8\x1d\xa5\x30\x1a\xb3\x42\x29\x12\x46\xbc\x09\x6f\x80\xe3\x67\x95\xf3\xc4\x5b\x8f\xe2\x58\x6c\x8b\x46\x65\xbb\x53\x66\xc2\xc2\x6a\x56\x02\x5f\xaa\x79\x82\x54\xe5\x5e\x86\x02\x80\xc0\xe8\x1d\x0a\x6a\x81\x19\x8c\x02\x7e\x6a\xb3\xca\x3e\xbe\x67\x28\x14\xed\x03\x57\xdd\xdd\xff\xe7\xe4\x36\xbb\xfb\xb5\x0b\x40\x1b\xd5\xc3\xaf\xbc\xdf\x4a\xfd\x9c\xfa\x11\x02\x33\x05\x8d\x0d\xbb\x77\x77\xa2\x4b\xa6\x3f\x69\xc7\x7d\x5c\xf4\xa3\xa1\xce\x12\x92\x13\xf5\xb6\xe1\x36\xdd\x41\xe7\xa7\x9e\x6a\xc5\x6b\x01\x87\x70\x73\xcc\x57\x55\x27\x45\x75\x36\x84\xf2\x48\x7f\x66\xd9\x37\xc6\xe5\x50\x3f\xae\x19\x5f\xf8\xdd\x6d\xc6\x68\x51\x77\xb6\xa2\xc0\xec\xee\xfc\x6d\xd5\x6d\xaf\xc5\x9e\x80\xcb\x07\x50\x22\xb8\x9f\xde\xef\x7f\x03\xfc\xa5\xf6\x73\x32\x5c\x9d\x82\x69\xec\x35\xe1\x23\xfb\xd8\xdb\xcd\x6d\xed\x1b\xae\x9a\x74\xf5\xa1\x6b\x44\xac\xfa\x21\x79\xf0\xfb\x7e\x67\x74\xc0\xf5\x98\x9a\x81\x03\xdf\x41\xed\x81\x2f\x92\x49\x5c\x5b\xca\xd1\xdd\xdd\xf7\x2e\xc0\xe2\x9a\xed\x5b\xdb\x5b\xef\x5b\xef\x71\xef\x56\xfb\x56\x6b\x90\x54\xce\xd8\x60\x2c\xd4\x9e\xfb\xbf\x75\xd2\x3a\x5f\xab\x20\x1a\x96\xca\x64\x36\x07\x2a\x39\xa9\x46\x48\x98\x32\xf7\x0f\x26\xfc\x8b\x23\xef\x5a\xfd\x3e\x57\x3a\x86\x83\x3e\x8a\xcc\x88\x2d\x80\x3c\x4b\x92\x68\x26\x43\x70\x43\xbe\xd0\xba\xec\x4c\x66\x65\x6c\x1f\xfa\xfc\x45\x83\xfd\xad\xc3\xf6\x66\x40\xc0\xe7\xfe\xb5\xe3\x3f\xee\xe0\xdf\x0a\x14\x2b\x03\xf4\xe9\x72\xda\xf1\xd6\x22\xb9\x92\x1b\xf2\x36\xe0\x0d\x1a\xa4\x25\x89\x8b\xc7\xd1\x3a\x37\xe8\x3e\x64\x80\xc5\x5a\x44\xc1\xc5\x79\xd9\xef\xc7\x03\x7d\x03\x52\xaf\xe8\xf2\x61\x84\xb8\x28\x21\x4f\x00\x9a\x87\x6e\x75\x70\x0e\x9e\x2d\xf3\x02\xea\xab\xb5\x7d\xdb\xaf\xd2\x18\x0b\xf3\x18\xc8\x18\x33\xa8\x16\x37\xf4\x1f\x16\xff\x2a\x8a\xd1\x61\xbd\xc8\x30\x6a\x17\xb2\x56\xa1\x5a\x60\xd9\xd2\xcd\x26\x8f\x16\xcd\xba\xc9\x79\x61\x1d\x8f\x7d\x60\x92\xdd\x39\x3a\x4f\xcb\xa2\x5a\xe0\x20\x22\x88\x21\xc9\xbc\xda\x51\xbe\x38\xe1\x87\x5b\x3e\xb5\x45\x87\xd9\x4e\x67\xb1\x7a\xc9\x4b\x27\xd8\x2b\x1a\xaa\x97\xbc\xa4\xe1\x7f\x68\xeb\x5e\x92\x1b\x99\xc4\x31\x95\xb7\xbc\x6d\x75\x92\xe1\x37\xff\xde\xf5\x99\x82\xfa\x4c\xec\x3f\x7f\x9b\x7d\x66\x13\xc2\x0e\x86\xeb\x44\xee\x08\x95\xe2\x28\x6f\x97\x59\x54\x0c\xe6\xd2\xa4\xe0\x97\xec\xbe\xf3\xea\xbd\xec\xd8\xce\x15\x90\xdd\xff\xb2\xc7\xff\x55\x67\x96\x84\x8f\xb7\x10\x43\x0e\xa4\xa4\x54\xa6\x69\x4e\x49\xc9\x09\xfc\xb8\x1d\xc4\xd7\xc3\x07\x72\x5a\x05\x6d\xbc\x3d\x74\x89\xd9\x73\xf3\x62\x4a\x98\x4d\xd0\x69\x5f\xfd\xb6\x44\xef\x43\x68\x82\x56\x88\x4b\xca\x38\x1e\xf5\x68\x92\xaa\x27\xad\xae\xf9\xbf\x27\xd8\xaf\x38\xec\xa9\xd5\x5c\xb8\xef\x77\xfc\x87\x86\xb2\x66\xf9\x35\x2b\x1f\x32\xa1\xea\xb2\xcc\x06\x78\x5d\x97\xca\xec\x3c\xe7\xd9\x59\xf6\xc0\xd5\x4a\x54\x2f\xe9\xef\x88\x0d\xd0\x41\xa3\x86\xdd\xb7\x34\xfc\xff\xe3\x98\x55\x0e\x45\xe8\x05\x00\x17\x78\xe1\x3a\x1f\x34\x61\xce\x79\xb1\xd7\x0f\xa2\x0c\x2a\x91\x06\x87\x79\x8f\xba\x96\x99\x8c\x48\x21\xca\x3d\xf1\xe5\x8d\x20\x06\x4d\x0b\x00\xd2\x53\x64\x86\x6a\xe8\x53\x66\x90\xc7\x26\xc0\x13\xd6\xf9\x80\x80\xfb\x51\xee\xf9\xeb\x7c\xe0\x93\xad\xd2\xe7\x59\x40\x3d\xcb\x5f\x48\x7c\x2d\xb6\x41\xd3\x22\xd4\x99\xe6\xad\x02\xf5\x3f\x1f\xee\xf9\x63\x2b\xfc\x9d\x95\xa3\x4b\x8b\x12\x76\x9f\xc5\xe8\x52\xe3\x30\x5a\x16\xe6\x0b\xd1\x02\x7f\x6e\xaf\x7f\xcb\x18\x55\xae\x52\x8a\xf6\x00\x92\xc4\x20\xcc\x1d\x29\xce\xf5\xda\xbd\xec\xb9\x86\xe8\xd3\x39\x89\x6e\xb8\x23\x68\x17\xa5\xed\x4b\x90\x18\x45\x94\xa6\x6f\x73\xcd\xf8\x8f\xf6\x15\xed\x50\x6d\xf5\x78\xc7\x50\x43\x7f\xcc\xf1\xbf\xdd\xb9\x02\xf5\xf2\x5c\xca\x97\x57\xb6\x59\xf5\x2e\xd8\x32\xe7\xd9\xf4\x5a\x19\x85\x9c\x84\xc7\xab\xba\xe3\xe3\x5a\xe3\xa5\x93\xec\x7a\x44\x26\xa8\xc9\xe7\xbf\x4f\xf8\xff\x6d\xa2\x32\xd4\x30\xe6\x6e\xdb\xf9\x96\x04\x61\xc0\x53\x1b\x05\x80\x13\x11\xdb\x6c\xad\x60\xb5\x9a\x16\x5d\xd1\xa5\xa7\x57\x03\x38\xc0\x16\xd3\x92\x28\xac\x0c\x51\xda\x80\x75\x98\xee\xaa\x92\xe8\x94\xc3\x34\xc1\x48\x92\x8d\x34\x12\x2d\x54\x64\xa9\xb0\x4c\x10\x8d\x92\x18\x1b\x5c\x9a\x19\x68\x7b\xad\x04\xea\x12\xbd\x00\x21\x85\xad\x3c\x43\x87\x86\x9a\x86\x30\x10\x10\xd3\x0c\x2e\xa9\x18\x19\x42\x70\xc0\xa2\x0c\x43\x81\x60\x09\xb9\x51\x10\x95\xd5\x26\x16\xb1\x12\x2b\x35\xfc\xa0\x11\xd3\xd3\x97\xfa\x11\x5f\x19\x39\x7a\x73\x9d\xfa\x85\xa7\xb0\x5b\xb7\x00\x99\xdd\x9f\x66\xd1\x0b\xc4\x4c\x10\x2f\xa6\xe1\x2c\x3d\xc0\x33\xf7\xd1\xa7\xf8\xbf\xe6\x8c\xb8\xa9\x95\xed\x4c\x6d\x42\x24\x9b\xeb\xaa\x57\x00\xf8\x11\xa8\x97\xa4\xe0\x92\xb8\xd2\x0b\x40\x46\x30\x1e\x10\xe0\x23\x37\xbb\x9b\x16\xcc\x13\xfb\x69\x0d\x73\xea\xd1\x8a\x2d\x8d\xa7\xa1\xc9\xc1\xc3\x26\xa0\x80\x4e\x09\xd0\xd2\xc7\xa4\xd6\x84\xf1\x93\x07\x76\x6d\xb6\xed\xc3\x2e\x3f\x61\x7a\x5d\x3e\x72\xd5\x5e\x97\x97\x38\x4a\xde\x56\x6d\xd8\x2c\xed\x9b\x6b\xaf\x7c\xf3\x05\xe9\xa0\xf9\x13\x87\xdd\x3f\x3a\x54\x7f\xfb\x23\x06\x3c\x36\x6f\x71\xf2\x91\xe2\x08\x12\xb6\x46\x07\x20\xa5\x42\xea\xeb\x31\x72\x8d\xbd\x3a\x2d\xf6\x6a\x8d\xff\x7f\x99\xc3\x9e\xfd\xa4\x94\x9b\xc8\xc4\x73\xc5\xc1\x6f\xae\xe6\xc3\x54\xe2\x95\x12\xef\x7a\x9a\x76\xe6\x69\x7a\xc2\xe9\x6d\xed\x3e\x79\xb6\x7b\xbf\x66\x80\xd0\x4d\xa9\xdc\x26\x23\x9a\xd2\x72\xa4\x1c\x23\x47\xca\x1b\xf6\x8d\x8a\xbf\xd4\xdc\x96\x5f\xd8\xeb\xcf\x9b\x17\x4c\x4a\x79\xc4\x48\x68\xa9\x04\xec\x17\x9a\x38\x52\xb6\x61\x3f\x0d\xc7\x73\x5a\x7e\xcf\x5e\x96\xb0\xeb\xe2\x20\x2f\x16\xb3\x74\x15\xb9\x61\xbf\xe5\xca\xd9\x2c\xfd\x33\x8a\xc9\x72\x13\xc4\xe3\x56\xb9\x92\xca\x27\x42\x46\xf6\xbd\xf5\x1c\x9a\x2f\xbc\xf2\xaf\xde\x73\xe6\x6a\xf9\x33\xbf\x51\xf3\x67\x9e\xf5\xef\xb9\xbf\xec\x05\xc9\xf4\xf6\xd9\x33\xc7\xd1\x5e\x3e\x4f\xd1\x67\xae\xf8\xf7\x5d\x00\xd6\x07\x60\xb9\x9c\xde\x4c\xb3\xb0\xa9\xd7\x9c\x2b\xa5\xd5\xfc\x29\x3d\xf9\xbc\xdb\xf1\xdf\xea\x2c\x5b\x33\x46\x5e\xcf\xb3\x09\x2b\xa0\x58\xfe\x6a\x79\x36\x77\xba\xa3\x12\x1b\xa9\x38\x0d\xc2\x7c\x46\x6c\x7b\xc5\x7f\xa6\xe3\xa8\xc3\xdb\x83\x76\xcc\x6f\x24\x90\x43\x28\x43\x41\x74\xce\x5f\xeb\x10\x87\xe7\xcb\x1d\xff\xc5\x40\xe2\x29\xd1\xbf\x44\xe8\x59\xc9\xf2\x57\x26\x57\xdf\x73\x70\x04\xba\xa8\x9d\xf1\xc2\xc2\xf1\x7e\x8e\xf9\x7f\xee\xcc\x86\x41\x1f\x30\xbc\xf8\x80\x98\xdf\x52\x2f\x20\x4c\x6e\x8b\xb1\x15\x2c\x43\xa1\xf9\x00\xd4\xde\x18\xdf\x98\xca\xbd\x79\xb1\x64\xe3\xd6\x56\xee\xb9\x35\x9c\x1b\xd8\x43\x48\x72\x26\x10\xdb\xe3\x98\x9b\xf8\xf8\x75\x3e\x50\xe2\xb5\x46\x3a\xb4\x41\x17\x4f\x63\x10\x73\x4b\x66\x50\xa2\x85\xc7\xc2\x84\xc5\xac\x5c\x83\x13\xb6\x66\x8e\xcf\xef\x67\x0f\xb2\xfd\x29\x01\x09\xdd\x53\x08\x50\x88\x3a\x70\x32\x47\x68\x5a\x2e\xbf\x2a\xec\x66\x51\x54\xc8\xae\xa4\xff\xc0\x55\x28\xb4\x10\xa7\xaf\x55\x88\x53\x10\x02\x7a\xa9\xe3\x6f\x9e\x33\xf0\xf9\xb9\xac\x65\x89\x55\x9f\xca\xb1\x7c\xfd\x00\x41\x97\xe5\x88\xdd\xdb\xb8\x9e\x42\x4a\x40\x12\xab\x78\x23\x7e\xc4\xec\x14\xbf\xd1\x60\x07\xe9\xdc\xf3\x6c\x1a\x72\xf7\x23\x0d\x69\x0a\xbf\xbb\xa1\xa1\x94\xbd\x34\xe4\xde\x6a\x84\x88\xdf\x12\x59\x50\xa4\x26\x29\xb6\xdb\xaa\x3a\x3e\xd5\x84\x2c\x12\x24\x20\x19\xc6\x8f\x40\xed\x1f\xb9\xed\xb6\xdb\x6c\x66\x96\x23\xb7\x9e\x38\xd1\xf2\xe6\xa3\x0c\x2c\x12\x0c\xef\xd6\xc4\x33\x41\xd1\x55\x5c\x07\x41\xa7\xc3\xdb\x85\x41\x44\x40\x18\x62\xc9\xbe\x12\xad\x75\x0b\x32\xec\x84\xb1\x11\x47\xed\x02\xfd\x8c\xc8\x57\x29\xfd\xa7\x18\xf4\x0d\x69\xe9\xce\x24\xca\xd8\x44\xd7\x66\x07\xdd\xc2\xda\x11\x42\x5e\x34\x3a\x58\xc5\xc4\x74\x9d\xa0\xab\xd8\x94\xbd\x9e\x94\xd8\xaa\xcb\x93\xfe\xef\x4c\x2c\x74\xbc\x32\x31\x00\x96\x10\x08\xb3\xce\x07\xd3\x58\x3d\xfd\x20\xca\x6a\x3a\xba\x42\xec\x13\xf0\x36\x94\x3d\x4e\x8f\xa4\xf4\x5b\xb1\x36\x22\x49\xe6\xa0\x47\x53\x80\x85\x42\xcf\x8f\x19\x13\xb2\xce\x07\xa4\x27\x03\x43\x57\x5e\x86\xac\x0c\xf3\x1b\x71\x14\x61\x0d\xb1\x7b\x8f\xf9\xb2\x8e\x04\x82\x50\xf2\x26\xd1\x08\x0d\xbd\x2d\xd5\xeb\x71\x16\x80\x0f\x06\x90\x27\x13\x83\xaa\xb5\x76\xc5\xe3\xf4\xac\xe1\x68\xcd\x78\xd1\x34\xcb\x9b\xf3\xa2\xec\x63\xfa\xa8\x0c\x4f\x5a\xf2\x11\x32\xb4\x04\xd9\x3a\x97\xce\xf3\x20\x6e\x79\x8b\x10\xec\x2e\xc7\xaa\x98\x05\x8a\x68\x43\xeb\xfe\x8b\x6f\xd2\x86\x04\x3e\x32\xd5\x6a\x4d\x61\x37\x4c\x33\xf2\x53\x43\x9f\x12\xd7\x2d\xa7\x62\x8b\x35\xd9\x4d\x5b\x22\xd8\x1e\xe0\x83\x95\x54\x64\x81\xfd\xe1\x7e\xf6\xaf\xea\x65\xbb\x96\xf1\xcf\xb9\x38\xc8\x73\xc0\x7b\x7e\x70\xbf\x7f\xa2\x7a\xb1\x2e\x38\x81\xd2\xf0\xda\xe2\x21\x3e\x22\x40\xf4\x3b\x77\x03\xe2\x77\x7a\x5e\x9b\xca\x01\xdd\xf1\x6f\x54\x24\xa0\x72\x78\xa0\xf4\x8a\x6e\x1c\x6e\xc5\x85\x9e\x60\xc7\xd8\x91\xed\x68\xb5\x99\x49\xec\x3a\x1b\xb6\xef\x6c\xf8\x80\xe9\x6c\x78\xf7\x55\x22\x97\x7b\xf5\xc8\xe5\x6b\xe4\x56\xd8\x71\x54\xbb\xec\x2e\x95\x73\xed\xea\xd4\x50\x85\x67\x7e\x8e\xb1\xaf\xaf\x97\xa7\x21\x3f\xbb\xfb\x11\xe6\x1f\x83\xbf\x2a\x34\xf0\x04\x11\xa2\x66\x27\xa7\x9d\x72\xaf\x5b\xd3\xca\x3b\x76\x5d\x64\x3b\xe8\xb5\x3f\x67\xf6\xda\x1f\xbf\x6a\x17\xd9\x23\xcb\x23\x3c\x62\x77\x5e\xa3\xae\xdb\x62\x1f\x96\x2e\xb1\x9f\x70\xc6\x1c\xc4\x0e\xf7\x35\xf0\x7c\x7d\x9b\x33\x4a\x0b\x5a\xf9\x6a\xaf\xb9\x77\xeb\x97\xb5\x81\xf9\x41\x67\x7b\x6a\x4e\xd6\xb1\x94\xff\xa8\x33\x7c\x0a\xf5\x15\xcb\xbe\xa1\x27\xbd\xbb\x9c\xef\xd4\x29\xb6\xb2\xf5\xb4\x7b\xd4\x9d\x99\xae\x57\x7f\x12\xad\x5b\x0b\x22\xfa\x19\xc6\xee\xba\x1a\xaf\xa8\xfb\xc5\x03\xfe\x73\xc7\x3e\x51\x91\x7f\xa9\x3b\x04\x1d\x79\xa2\xd2\xba\xec\xdc\x40\x2f\x90\xb0\x4c\x7e\xd9\xb9\x81\xa0\x98\xfa\x0a\xab\x78\x0f\x54\x98\xf9\x7e\x76\xd9\x61\xd5\x14\xdc\x47\x55\x64\xf8\x23\x95\x5b\x00\xd3\xa5\x0c\xea\xf3\x54\x75\x48\x28\x71\xa4\x68\x9c\x6b\x93\xce\x3c\x02\x92\xb2\x4f\xb9\x30\x1f\x49\x9f\xd5\x28\x90\x6d\x74\x39\xac\x5a\x18\xf7\xd5\x2a\x73\x2f\xac\xdc\x92\xfb\xb7\x61\x9c\xfe\x15\x65\xd0\x80\x23\x6f\x91\xcd\xbf\x70\xd0\x29\x09\xbd\x08\xdc\x83\xbf\x33\x06\xf2\xb9\x95\x7f\xf0\x31\xc7\x4a\x4b\xed\x4a\x2d\xaf\xe1\xa8\x63\x39\x3a\xc0\x2e\x2c\x95\x30\x8c\x2c\x07\x64\xcb\x50\x49\xcc\x18\x8d\x6e\xba\xe9\xa5\x9d\x82\x90\xca\x15\x6c\xb0\x68\x79\xd0\x86\x0d\x5b\xec\x12\x73\xe5\x19\xfa\x7d\xc8\x48\x26\xa6\xa8\x55\x68\x98\x5b\x4f\xf8\x67\x87\x6f\xca\x52\xf4\x34\x59\x90\x24\x33\x43\xf2\x1b\x3a\x91\x1f\x6e\x10\xbb\xaa\xff\xb7\xc3\x8c\xce\xec\xfe\xb9\xe3\xbf\xd2\xd1\xbf\x95\x23\x11\x71\x33\xc6\x8d\xcc\x04\x1f\x55\xbe\xa0\x89\x32\xc0\x1b\x02\xfe\x2e\x12\xde\x55\x7c\x1a\xd2\x4b\x94\x66\x48\x60\x08\x36\xb8\x91\x7e\x90\xc1\x71\xa3\x65\x3b\x3e\xc8\xce\xb3\xb3\x4f\xc6\xf9\x8a\x72\xaa\xb3\x77\x3b\xec\x7a\x1a\x7f\x48\xfc\x91\xbb\x6f\x74\xfc\xb3\xf6\x25\xab\xc7\x64\x3c\x08\x75\x68\xa9\x79\x2a\xaa\xfb\x43\xb5\xbe\x75\x11\x9e\xc9\xee\x1c\x13\x8a\x59\x57\x04\xe2\x23\x41\x08\xf1\x07\xf7\x5a\x88\x90\xf1\x58\xe7\xab\x12\xd2\xdb\x55\x8c\xfb\x87\xac\x18\xb7\x2b\x83\x58\x2b\x83\xf8\x0a\x66\x29\x80\x11\x55\x3a\x8c\xb6\xa3\x2d\x22\x1c\x47\xfe\xc7\x45\xce\x33\xf7\x77\x0e\xf8\xd1\xd0\x55\x63\x77\x11\x78\x7d\x8e\xb3\x1d\x20\x44\x45\xad\x75\x3a\x51\x1b\xcc\x2d\x0a\x35\x97\xfa\x72\xed\xb4\xb7\x4a\x03\x15\x6a\x14\xdc\x97\xa4\xe3\x83\xe8\x52\x6b\x00\x7e\x76\x3f\x7b\x97\xc3\xf6\x45\xfd\x7b\xe3\xb4\xbd\xee\xfe\x5b\x87\xb5\x46\x4e\x1a\x76\x29\x16\x16\xe1\x15\xbf\x47\x7f\xa8\x7d\x2d\x82\x3d\x91\xba\xc8\xd0\xfe\xa6\xc7\x08\xb9\xa3\x10\x38\x32\x5c\x47\xd4\x77\xc2\x23\x9c\xaa\x71\x30\xa1\x67\x97\x0a\x80\xde\xde\x16\xfb\xad\x09\xf6\x34\xe5\x89\x57\xf8\xa8\x5f\x9a\x60\xf7\x5c\x2d\x80\xd0\xff\x3f\x0d\xfc\x33\x07\xa2\x74\xf8\x80\x3c\x02\x69\xc7\x65\x5e\xf0\x6c\x3a\x6f\xa7\x7d\x1e\x22\xe8\x51\x22\x9f\xb0\x1c\x18\xca\x93\x6b\x2c\x44\x05\xad\x95\xf3\x5e\x90\x14\x51\x3b\xbf\xd3\x8b\x3a\xca\x8b\xba\x5a\x16\x88\xed\x04\x69\xa7\x9c\x3e\x1f\xc4\xb1\x3e\x6d\xc8\x5b\x8c\x2d\x74\xbc\xc5\x34\x5c\x36\x41\xa7\x71\x9e\xa2\xce\x7d\x21\x7b\xea\x70\x07\x02\xcf\xf3\x66\x37\x8d\xb9\x4a\xba\x40\x46\xbf\x1c\x81\x62\xa2\x68\x56\xc2\x94\x92\x2e\x3e\xbe\x87\xcb\xcd\xb9\x6a\xb5\xb7\xbc\xf3\xa2\x89\x36\xa3\x9c\x57\xb3\xbf\xa8\xe5\xad\xb6\x9f\x1c\xfb\xe4\x04\x3b\xd8\xd7\xf9\x79\xb2\x9a\x55\x43\xdf\x2a\x8d\x82\x9e\x6d\x99\xef\x45\x88\x3c\xbc\x86\x6d\x8a\x01\x56\xa2\x35\x87\xca\xfe\xf7\xbd\x4d\xb7\xf5\x0d\x1c\xf9\x53\xb9\x97\x6e\x26\x3a\xe5\x16\xfb\xfe\xeb\x2d\x41\x5e\x29\x18\x68\x08\xf7\x92\xc5\xf5\x97\xd7\xf9\xf7\x0c\x5d\xf5\xc6\x60\x4d\x89\xa5\xc8\x78\x67\x34\xc8\xf4\x3a\xf6\x3b\x4e\xed\xee\xf7\xa3\x8e\xdc\xfe\x3e\xee\x5c\xf9\xfe\x57\x6d\x4f\xcd\xcc\x78\x0b\x85\x41\xac\xae\xec\x71\xe3\x91\xa9\xdc\x48\xad\xa9\xcf\x5a\xe4\xa2\x92\x26\x5e\xaf\x24\x2f\x00\x99\x00\xb3\x8b\x0b\xe4\x02\xb0\xd7\xc5\x8e\x81\xa1\x7d\xae\x5c\x83\x4f\x65\x15\x1b\x4b\xaf\xbd\xd0\x9e\xf2\xe0\x90\xd2\x36\x72\x26\x8d\x8b\xa1\x9d\xfc\x7b\x1d\x76\x3d\x66\x6f\x89\x6f\x44\xe8\xe3\x70\xfc\x57\x3b\xf6\xb5\xa6\x18\x13\x10\xe7\x4b\x63\x41\xed\xc8\x0d\xc7\x87\x9c\xea\xcd\xcf\xca\x78\x0a\xc9\x98\x6c\xcd\x25\x39\x7f\xa4\x04\xe2\x9b\x6f\x92\xe5\x9a\xa6\x9a\x92\xb6\x64\x53\xde\x38\x6c\x6e\xb9\xbe\x2c\xb6\xdf\x69\x1c\x43\xd6\xe6\xd2\x32\x29\xdc\x3f\x55\x9b\xad\x4f\x39\xf6\x2d\x0d\x91\x24\x2c\x63\x37\xc8\xbb\x9e\x7a\x46\x03\x62\xac\xa6\x5e\x19\x59\x7d\xa2\x48\xb9\x05\x3b\x95\x67\x45\x90\x1e\x02\x66\x83\x04\x48\xc6\x84\xa5\x16\xe5\x3d\xdc\x80\x44\xa8\x28\x92\x57\xc2\x4b\x12\x53\xc7\x23\xe1\x9b\x3c\x2f\x80\x14\x06\xbf\x26\x1b\xc0\x6e\xb4\x2f\xda\xe6\xd7\x9f\x38\xfe\xb9\x25\x7b\x5c\x91\x93\x48\x47\x92\x62\xd7\x0e\x8c\xcd\x59\x4e\xc5\xcb\xa1\xdf\x5a\x03\xd1\x32\x3e\xee\x60\xb7\x8d\xe1\x3c\xaa\x19\xff\xca\x4e\x7a\xc2\x99\x62\x5f\x67\x39\x83\xfa\x62\xc2\x99\x06\xb2\xf2\xe9\x75\x3e\x70\xf7\xb9\x7b\x8a\x41\x9f\x33\xf1\xe4\x3f\xaf\x79\x52\x46\x8f\xb8\xfb\xdd\xbd\xf0\x16\x63\xef\xa9\xf1\x94\xbc\x59\xb5\xbe\xf2\x1b\x56\xbd\x11\x57\x32\x52\xb4\x07\xdc\xbc\x2f\x7b\xbb\x1c\x03\x90\x88\xfa\x6a\x5d\x73\xbd\xdd\xcc\x32\x0d\xb2\x57\x3b\xfe\xb7\x3b\x95\x8b\xd7\x7a\x94\x1d\x69\x56\x2a\xe7\xb0\x65\xc9\xbc\xd2\x61\xd7\x41\xb8\xb3\xaa\xd7\x17\xca\x6a\xed\x58\xd7\xaf\xaa\x4e\xc1\xce\x21\x41\x9b\x25\x91\xaa\x37\x67\xe8\xee\x1a\xb5\xf6\xb8\xc3\x6e\xa8\x4c\x07\xee\x9b\x54\x43\xbf\xcc\xa9\xdc\xfb\x0a\x35\xb4\x3d\x2f\xda\x39\x7e\xe3\x5e\xf6\xff\xd4\x1c\x4b\x9f\x4a\x36\x1e\x0a\x32\xf7\x4b\x7b\xfc\x59\xfc\xd3\x3a\x08\x4a\x3c\x9e\x6c\x44\x59\x9a\x00\x88\x66\x23\xc8\x22\x18\xaf\xc6\xd1\x7c\xa0\x49\xa2\x6a\x59\x2a\x7f\x70\x0f\x3b\x47\x2c\x95\xa7\xfd\x3b\x4c\xe4\x4b\x5d\xca\x26\x88\x64\xee\xf9\x0b\xf3\xa7\xce\xad\x2c\x9c\x5e\x38\xb5\x64\x75\x85\x9f\x9d\x60\x7b\xc0\x69\xec\xbe\x77\xc2\x7f\xdb\xc4\x43\x32\x57\x0a\x32\x91\x7b\x4f\x3f\xf4\xd0\xec\x12\xe8\x1a\x1d\x06\x83\x84\x5f\xea\x07\xc0\x9a\xaf\x71\x46\xfd\x8c\x6f\x44\x69\x29\x63\xef\xc2\xda\xfc\xa8\x7e\xaa\x58\x6d\x54\x04\x27\x71\xda\xd4\xbf\x46\x00\x07\x55\x61\x5a\xda\x96\xa4\x12\x08\x65\xa1\xe9\xd5\xe8\x3b\x51\xd2\x2f\x8b\x6a\xbc\x42\x99\x48\xaf\x1a\x4c\xfd\x66\xe1\x30\x48\x41\x22\x54\x78\xde\x0e\xfa\x52\x69\x21\xf0\xc2\xb4\x14\x1f\x7f\xfa\xd3\x9b\x5e\xc4\x4f\x7a\x4f\x37\x5e\x6c\x79\xa7\xe8\x59\xa3\xd6\x10\xa9\xc1\x37\x80\x53\x55\xd5\x59\xd3\xcb\xf8\x5a\x90\x85\x00\xad\x48\x3b\x16\x18\x4a\x15\x90\x5f\x8a\xf2\x22\x27\xd7\x57\x45\x80\xc9\x56\x5f\xfa\x5e\x87\x1d\x80\xd6\x3b\x9d\xa5\x3d\xf7\xdf\x38\xdb\x90\x4d\xc1\x8e\x89\x20\x35\x7f\x69\xd9\xa6\xf7\xac\xab\xff\xa9\x5c\x02\x5b\x8c\x43\x3f\x08\xda\xeb\x68\x41\x61\x35\x97\xb5\xd8\xcf\x4d\x30\x7f\x24\x44\xee\x54\xb2\x41\xf8\xb8\xef\x9f\xf0\x3f\xe0\x54\x2e\xea\x6d\xb7\xc4\xe9\x14\xa9\x8a\xe5\x18\x99\x41\x84\x3a\x5d\x21\x9a\x4e\x0d\x50\x09\xec\x31\x00\x45\xb9\x58\xf1\xeb\xbb\xa4\x35\x2c\xff\xa3\xc3\x5e\x2a\xa5\xc2\x5e\xe4\xa7\xe7\x2c\xc6\x58\xe8\x10\xc3\x01\x48\x57\x17\x87\x02\x66\xe6\xcc\x8d\xf0\x8f\xd9\x1f\xe6\x0d\xc8\xdd\xed\xfe\x4d\x63\x20\x77\xe3\x50\x76\x2f\xb9\x71\x9b\xa1\x96\xf3\x3c\xe6\x05\x97\xd1\xb9\xbf\xe2\xfb\x27\xad\x2b\x32\x0c\xb8\x9f\xa5\x1b\x51\x08\x90\x24\x9e\x78\xa1\x78\x04\x08\x5c\x12\xd8\x13\xab\xd8\x2f\xa3\x46\xff\xf8\x69\xec\xb1\x06\xdb\x1b\x66\x83\xa5\x32\x71\x5f\xdf\xf0\xff\x97\xf3\x30\x0a\x28\x43\x5b\xd9\x0b\x26\xf0\xbc\x84\xca\x6b\xa9\x0e\xd8\x24\x4c\x4a\x4c\xee\x79\x41\x21\x99\x51\x82\xa2\x62\x00\x70\x32\x0e\xce\xf0\x53\x5e\x08\x00\xba\x68\x83\xcb\xde\x01\x98\x35\x31\x35\x27\x04\x8b\x42\xa3\x20\x47\xa8\x53\x92\x4a\x56\x10\xd4\x76\xce\x61\x46\xb4\x79\x62\x81\xcd\x25\x0a\x75\x20\x20\x3f\xe9\x4d\x7b\xb3\x71\x7c\x12\xac\xcb\x30\x1b\x78\x59\x99\x88\xed\xd8\x1a\xb7\xe0\x61\x22\x39\xd1\x32\x23\x59\x4c\x7f\xb7\xc1\xdc\xb5\x2c\x68\xf3\x45\x9e\x45\xc2\xae\x43\x77\xe4\x2f\x37\xa4\x61\xf4\xde\x86\x18\x12\xca\xf1\x18\x01\xc5\x24\x58\x34\x44\xf3\x0c\xfe\x1a\x3c\xeb\xd6\x1c\xc9\xd0\x40\xa2\xba\x90\x85\x46\xf6\x94\x24\x4d\xa6\x13\xbe\x86\x38\x2f\x5a\x08\x5b\x9a\x54\xda\x7b\x01\xcf\x52\xa3\x5d\x30\x15\x93\x93\x45\xfb\x90\xf4\xb4\x11\xc5\x36\x57\x22\x14\x47\x34\x59\x94\x86\x6a\x56\xd2\x98\x36\xc0\xfe\xaa\x99\x1c\x22\xef\xcd\xd9\x11\xb8\x70\x64\x81\xe8\x23\xb8\xcf\x32\x88\x1b\x21\x9f\x3d\x1e\x24\xb5\x79\xb4\x96\xf9\x5d\x28\xc6\xb6\xa1\x18\xbf\xd4\x60\x4f\x4d\xb3\x7e\x37\x48\xe6\x39\x88\xea\x24\x45\xee\x3e\xde\xf0\x1f\x6b\xcc\x8b\x42\xc3\xae\xea\xa4\xd7\x47\x1f\x6c\x99\x63\xd7\x5b\xcc\xd2\x7e\xb0\x06\x9d\x13\x7d\x25\x4d\xd3\xdc\x92\xed\x1c\xaa\x04\x44\x0f\x3e\xda\xba\xad\xe5\x2d\x63\x67\xc5\x9e\x43\x9f\x93\x21\xd2\x80\x2e\x85\x9c\x10\x31\x43\x91\x95\x7c\xa6\x83\x20\x76\xf1\x86\x8f\x77\x7d\xaf\x13\x25\x41\x1c\xbd\x40\xaa\xe7\x89\x8d\x52\x88\x6a\x40\x33\xa4\xde\xa3\x9b\x03\x13\x9f\xca\xf5\x4b\x39\xa0\x9b\x5a\xde\xa9\x88\xe6\x56\x95\xf1\x34\x1b\x2e\x99\x41\x89\x80\x3a\x7a\xd0\x66\x69\xd1\x6d\x59\x53\xef\x47\x1c\x76\x9d\x28\xad\x36\xf9\xde\xe3\x5c\x91\x33\x6d\xd1\x4c\xc4\x8f\xe5\x4e\xb0\x53\xc6\x1d\xe0\xe2\x92\x33\x40\x40\xf3\x31\x7a\x4c\xda\x41\x96\x89\x71\x96\x96\x05\x31\x9c\x16\x8a\x2f\xb5\xe9\x05\xde\x89\x23\x77\x88\x2d\x2a\x82\x82\xe9\xc0\x5c\x0b\x1e\x15\x65\x26\xea\x9c\x7d\x69\x82\x3d\xad\x5f\xad\x00\xf7\xf3\x13\xfe\xa7\x27\x1e\xa6\x95\x08\x78\xe1\xd3\x4d\x6f\x2d\xc8\x56\x01\x6b\xa9\x11\x98\x6a\x06\xe4\x59\x27\xcd\x7a\xc0\x17\x55\x57\xc5\xe7\x2b\xbd\x6d\x74\x0d\xc3\x24\x25\x67\x18\xf2\x73\x47\x62\xf4\xb7\x61\x55\x22\x83\x01\x76\x5d\xc0\x4a\xac\xba\x45\xae\xc1\xe4\x0a\xb2\x63\xb4\xbf\x81\x6c\x86\xb1\x3e\x2d\x4f\xcf\x2a\x1f\x6b\x79\xb3\x6d\xb1\xaa\xc3\xe6\xce\x5c\x06\xa6\xb0\x0c\x53\xde\x34\xf5\x58\xbb\x47\xe7\x77\x7a\x53\xf7\x06\xed\xf5\x35\xa0\xe2\x12\x4f\xd1\x39\x42\x97\x57\x2b\x2e\xcd\x50\xf6\x09\xe6\x33\x3b\x11\x2d\xc9\x25\x53\xba\xd3\x9b\x3a\x9d\x66\xdc\x48\xd6\x6b\x07\x79\x3b\x08\x51\x6b\x0e\xea\x07\x96\x55\x4c\x0f\xbd\xa0\xc3\x09\x76\x54\x1a\xd6\x9e\x74\x17\x47\xb3\x43\x1c\xcd\xf7\x3e\x75\x6b\x20\xcd\x9f\xdf\xe0\xfe\xc9\x0d\x75\xb4\x92\xd6\x86\xab\x02\x59\x1c\x56\x24\xae\x62\x1e\xc7\xbc\x8d\x70\x9c\x9d\x89\x1a\x6f\x23\xb9\x6d\x3e\x38\x5e\xee\xc3\xd2\x07\xb1\x9e\xdd\x7e\xee\xa6\xaf\xe8\xad\xb1\x55\x64\x02\x9c\xb6\xd7\x2e\xdb\x7c\xe3\x0a\x3f\x24\x5e\x3b\xb6\x9d\x3a\x37\xaa\xd0\x62\x24\xd7\xf5\x6d\xdc\x4e\x33\xd2\xaa\xd8\x41\x4d\xb1\xb1\xa1\x91\xe3\x5f\x1c\x0a\x8f\xf4\xb6\x9f\xd6\xd6\x65\x3f\x86\x95\x54\x9b\xa6\xca\xf4\x6a\x50\xb4\xbb\x3b\xce\x6e\xb5\x2b\x8f\x4b\x65\xc7\x9f\x3a\x16\xc4\xfd\xae\xd9\x29\xda\x3c\x2b\xd0\x06\xe2\x43\xb2\x38\xdb\xef\x5a\xe3\x88\xbf\xb6\xd5\xbe\x57\x98\x40\x25\x1b\x7a\xc8\x5f\xc1\xcb\xc6\x81\xf7\x95\x94\xe0\x8a\x5e\xaf\x66\x21\x0d\x87\xf0\xe5\x63\xde\x56\x6d\x39\xba\xf3\x6c\x9d\xe2\xce\xe7\x56\x92\x77\x1b\x31\x9b\x66\xab\x41\xbb\xb5\x83\x01\x3f\x7d\xa5\x2f\x8e\xab\x48\xad\xc8\x7b\x45\x6d\x79\x45\xaf\x57\xb3\x50\x1f\x2e\xb0\xbd\xef\xef\xf8\x5d\x42\xc1\xfe\xd8\x04\x3b\x54\xe3\x44\x9b\x7d\x41\x99\xf1\xd3\x51\xcc\xad\x50\xd3\x6f\x9b\xf0\x1f\x56\x77\x2a\x2e\x67\xb8\x0e\xea\x31\x92\x81\x9a\xf4\x63\x0c\x49\x7e\xd8\x09\x81\x40\x3a\x49\xcb\xa4\x32\x7e\xb2\x75\xd9\x31\xe2\x2d\x2f\x3b\x07\xf2\x6e\x90\xf1\x73\x55\xbf\xf4\x4b\x1a\xec\x92\xa1\x74\x12\xfb\xcf\xbb\xb6\xea\x26\x96\xc9\xf4\x3c\x2b\x24\x74\xd1\x9f\x2b\x0c\xd5\x26\x8a\x08\x45\xc8\x95\x84\x80\x61\x9d\x50\xbc\x87\x27\xb9\xfd\xc1\x6d\x27\x6a\xe2\x01\x3e\x30\xf7\xb3\x4f\x67\xba\xd4\xee\xd7\xf8\x6c\x59\xfc\xf0\x54\x1d\xd0\x53\xaf\x39\xcd\xbe\xb6\x3e\x64\x1f\xa0\x76\x5f\x38\xe5\xfb\xf4\x37\xa1\xc1\x00\x25\xd4\xd7\x30\x3b\xaa\x6d\xe5\x1b\xb7\x8f\xc1\xdf\x77\x8a\x7d\x71\x1f\xbb\x5e\xd8\x80\xea\x88\x20\x77\xff\x60\x9f\xff\xc9\xbd\x92\x76\x1e\xec\xc3\x40\x09\x49\xe9\x84\xbc\x55\x1e\xa7\xc9\x1a\xb8\x27\x74\xcb\x7a\x0b\x49\x54\x98\x4f\xa1\x6b\x9f\xb7\x4b\x32\xb4\xd3\x2c\x04\xb7\x56\x94\x2a\xcc\xaa\x4a\x4f\xa4\x05\x51\x7c\x64\x62\x07\xc9\x00\xbe\x6f\xb8\xf6\x3b\x41\x14\xe7\x5a\x41\x5b\x18\x97\x69\x92\x47\x21\x27\x3d\x31\x38\x18\x12\x0f\x11\x67\x51\x94\x7b\xdd\x20\x09\xe1\x67\xbb\x0d\x8b\x08\xe4\x17\xfd\x1d\xf0\x31\x29\xbd\xbb\x62\x1e\xa6\x06\x49\xf5\xcb\xe0\x37\x07\xe1\x30\x7d\x4d\x3a\xb1\x4a\x08\xb1\xf7\x82\x5e\x9a\xac\x81\x59\xa3\x8b\x35\x5c\x23\x32\x90\x11\xb2\x7a\x46\x46\x87\x7b\x01\xd8\xa9\x79\x13\xfa\xa9\xb0\x65\x72\xa4\x32\xc8\x9b\xe2\xd3\x67\xa2\x0d\x6e\x5c\x53\x0c\x72\x30\x54\x97\x4c\x92\x2f\xb4\x6a\x2a\x99\x07\x4e\xc1\x60\x1d\x44\x97\x8b\xd4\x23\x92\x7f\xc9\x08\x6c\x08\x94\xaf\x0e\x84\xa1\x1a\x4a\xa7\x93\x94\x74\x27\xd7\xd0\x0c\x68\xc7\x69\x5d\x7c\xed\x8e\x1a\xf4\xb9\x8a\xc9\x4d\x8c\x23\x9c\x5e\x70\x09\xa8\xba\x3a\x24\xe6\x8f\xb4\xcd\xe4\x80\x43\xcd\x7d\x18\x58\x95\x9a\xcd\x5b\xde\x19\x90\xa9\x43\xac\x5a\xbf\x1f\x47\xd8\xbe\x51\xa5\x32\xe1\x78\x4b\x0a\x66\x75\x82\xbc\x0b\x51\xfb\xd5\x2a\xa7\xb3\x1d\x3a\xbd\x8c\x07\xda\x29\x03\xae\x57\x12\xaa\xae\x71\x79\x5d\x5d\xf8\xbf\xc8\xac\x16\x5b\xc8\x67\x76\x1e\x91\xaa\x46\xe5\xb6\x8e\xc2\x45\xef\xdd\xc9\x51\xf8\xeb\xc0\xa3\x12\xa5\x40\x8e\x18\x07\x79\x0e\x93\xd1\x97\x1b\xfe\x5f\x35\xec\x68\x63\xfb\x20\x19\x23\xe0\xe5\x8b\x2d\xcf\x47\x05\xb1\x69\xb1\x99\x98\x6e\x67\x11\x30\x42\xf9\xd0\x1b\xe4\x2d\x09\x99\x33\xee\x8a\x1e\xb9\x99\x2a\x05\xbf\x75\x3e\xd8\x4c\xb3\x30\x97\xa0\x17\xfa\xa2\xd5\x0b\xe9\x93\x32\x0c\x5d\xba\x0b\x7a\x70\x18\x56\xed\xb2\x3a\x7f\xb3\xc9\x80\xe0\x83\x30\xbc\x2b\x67\x14\x70\xfa\x9e\x71\xa4\xd8\x08\xbc\x45\xb3\x3e\xa4\x87\x95\xbe\x16\x14\x90\x82\xf2\x61\x55\xe2\xb1\xc5\x84\x24\xbf\x6a\xb8\x19\x49\xae\x27\x23\x57\x36\x74\xf8\x8c\x8e\xb7\x54\x64\xbe\x39\xe9\x7f\xa1\xc1\xae\xcf\xe4\x24\x70\x9f\xa8\x76\xf7\x33\x0d\xff\x4d\x95\x36\x41\xd1\x39\x39\x55\xac\x21\xbc\x9d\x3e\xca\xc5\x38\x43\x0a\x00\xe4\x85\xd3\x4f\xb6\xbc\x59\x39\x73\xc2\x99\x3c\x9e\x9e\x88\xc4\xc4\x68\xab\x4c\xdc\xf8\xc4\xec\xb9\x79\x39\xa9\x49\x9c\xbc\xa5\x2e\x89\xce\x2a\x3b\x27\xa8\xce\x88\xae\x3c\xfe\x48\x19\xc4\x70\xcc\xb8\x92\x95\xdc\xdf\xc2\xfb\xc1\x93\x6e\x90\xb4\x71\x32\x9b\x59\xe7\xfd\x7c\x26\x8f\xd6\xa6\x69\xfb\x3c\x73\xe4\xc8\x91\xdb\x40\xc3\x04\xb2\xf6\x8c\x63\xf7\x3e\xe3\xd8\xbd\xad\x9e\x75\x9c\x71\x0b\x3b\x3e\x26\x62\xcc\x58\x42\x97\xcc\x3a\x66\xbf\x0f\xe8\x05\x63\x45\x70\x3f\xe1\xf8\xbf\xe0\x2c\xe1\x25\xe9\xc0\x82\xb5\xc1\x9a\xe0\x2d\x46\x04\xb1\x02\x9e\x47\xf9\xa6\xd9\x78\x33\x18\xe4\x4d\xef\x7c\x72\x3a\x88\xe2\x32\xe3\x4d\xef\x1c\xdf\xe0\x99\x3a\x5b\x10\x35\x82\x0f\x3d\xa9\x34\x23\x33\x37\x52\x29\xa6\x31\xcb\x66\xcf\xfa\xf8\x04\xfb\x27\xb0\xeb\x58\xc4\x73\x20\x05\xcb\x73\x7f\x7c\xc2\x7f\xdb\x04\xee\x41\x14\x19\x2c\x1d\x16\x19\x5c\x17\x12\x89\x0d\x24\xa3\x1d\xfb\xd4\x9d\xe6\x62\xa8\x82\x87\xab\x04\xfc\x56\x75\x91\x53\x9c\xd4\x38\x37\x22\xbe\x09\x73\x45\x1e\xad\x25\x41\xac\x8e\xa8\xe8\xd0\x02\x07\xae\xfd\x95\x42\x32\x03\xf6\xd3\x50\x33\x41\x74\xa2\x0c\x86\x3d\x66\x3a\x4a\x70\x89\xd2\x6b\xa0\x49\x72\x10\xe4\xe2\x6b\x3c\xf4\x16\x17\xe6\xbd\xa3\x2d\xef\xfe\x34\x2f\xc4\x9f\xc0\x41\x52\x57\x41\x0a\x1e\x90\x16\x5d\xc9\x41\xec\x0d\xc9\xee\xa9\x7d\xa9\x85\x1c\x8d\xc4\xde\xa6\x08\xa6\x63\xbe\xc1\x63\xe5\x1f\x14\x73\x43\x94\x8b\x5a\x08\xf5\x6c\x26\x36\x73\xb5\x9f\xef\xf0\xa0\x28\x33\x6e\xef\x51\xff\x47\x83\x1d\x08\x93\x9c\xba\xeb\x1f\x35\xfc\xdf\x6a\x2c\xf3\xc2\x9b\x3f\xb7\x6c\x76\x57\xd5\x31\xad\x13\xff\x39\x9c\x91\x4f\x8b\x4a\xf3\x87\x0f\x13\xbd\x29\xf3\x81\x87\xa3\xa2\x2b\xaa\xe8\x1c\x2f\xa6\x9a\xf6\x2d\xf1\x9b\x12\x9e\x12\x93\xdc\xd4\xb9\x34\xe1\x53\x2d\xcc\x44\x90\x05\x3d\x5e\x88\x56\x5b\x13\xfb\x17\xd1\x28\xf3\xe7\x96\xe7\x80\x6c\x50\x75\x04\x58\x8c\x8c\x3a\xa0\xac\x2b\x60\x2a\xdc\x98\x3f\xb7\xac\xf6\x69\xb4\xcb\x13\x5f\x90\xb4\x21\xa2\x8f\x05\x62\x3b\x8a\x4f\x77\x31\xaf\x62\x98\x34\x81\x1c\x19\x5e\x28\x68\xb5\xe9\x0c\xcc\x2a\xe2\x97\xfa\x71\xd4\x8e\xc4\xae\xa0\x48\x47\x17\xdb\x9a\xa1\x7f\xde\x61\x07\x8d\x6f\xb8\xef\x71\xfc\x1f\x70\xc4\x93\x86\x99\x6f\x88\x9f\x2a\x34\x28\x34\xc3\x05\x3a\xa6\x12\x09\x4c\xe5\xf2\x0d\x3d\xca\xf4\x81\x26\x96\x8e\xc6\x90\x5c\x63\xb2\x22\x37\xb8\x90\x25\x6a\x42\x2e\x6a\xc6\x89\xe4\x50\x9f\xb4\xfa\xce\xa3\x0e\xdb\x2f\x72\x00\xf0\x82\x17\xf8\x3d\x12\x28\xa0\x25\x5e\xde\x31\x74\xdf\x47\x2f\x7a\x53\xb9\x7e\x5e\x66\x8a\x54\x37\x02\x8f\x36\x00\x72\xb1\x45\xcc\x87\xa5\x8f\x38\xc1\x9e\x9a\x95\x49\x11\xf5\xb8\xde\x83\x7c\x6e\xc2\xff\x4f\x13\x4b\x95\xab\x08\x7b\xa0\x23\x59\xf3\xa6\x5c\xa6\x69\x6a\x30\x9c\x1a\x68\x31\x4b\x24\xad\x3e\x8c\x96\x80\xb7\xac\x4c\x8c\x96\xc1\x22\xda\x49\x6b\xc9\x57\x62\x4d\x96\x76\x60\x88\x4c\x1e\x7a\xe9\x37\xe7\x97\xac\x4c\xa0\x19\xcb\x24\x47\x22\x22\x42\xe4\xc1\x41\x61\xcc\xd7\x82\xf6\xc0\xb7\xbf\x63\xb6\xa6\x81\xfc\x15\x5b\xf9\x1e\x76\x50\xfc\x1e\x01\x87\x24\x0b\xb4\x5e\xe5\xb0\x53\x10\xb8\x54\xef\x3b\xa8\x6a\xc9\x0a\xda\x92\x97\x70\xc4\xea\x9b\x86\x7c\x86\x52\x9a\x86\x6c\xb4\x7a\xa1\x26\x91\x15\x0b\x42\xbf\x1b\xc8\x49\x4a\x4d\x71\x08\x89\x52\x07\x3b\x25\xcd\x60\xba\xed\x1f\x61\x07\x8b\x34\x26\xbc\x73\xee\xae\xfa\x4f\x1f\x66\xb9\xc1\x0e\x66\x3c\x66\x81\x4b\x67\xd8\x34\xbb\x79\xcb\xc5\x7e\x45\xbd\xcd\xde\xdd\x60\xfb\x88\x73\xc9\x7d\xac\xe1\x3f\xea\x48\x43\x57\x72\x54\x99\x7a\x3a\x52\xaf\x75\x75\xb0\xb5\xe1\x7b\x75\xfc\x4f\x66\x99\x6e\x66\x87\xd9\xd4\x96\x65\x42\xd7\xc5\x4e\xec\x82\x63\xe3\xed\x82\xaf\x72\x9f\x06\x6f\x35\x33\x2e\x4a\xfa\x00\x1f\xe4\x8c\xfd\xb6\xc3\x5c\x9e\x88\x55\x8a\xfc\x3c\x67\xa2\x64\x3d\x77\x7f\xc9\xf1\x7f\xc2\x39\x35\x74\xbd\x26\xd2\x72\x98\x36\x92\x50\x79\xb9\x31\x1c\xa3\xc4\x24\x2d\xc2\x16\xaf\x45\x48\x35\x75\xc8\x01\x6c\x02\x10\x5a\x97\x76\xbc\xf9\xb4\xbd\xce\x33\x2f\x16\xb9\xa8\x59\x98\xf1\xd0\x2e\x2b\x2b\x93\xe0\x12\xdb\xd7\xc5\x95\xdf\xbd\xcf\xbf\xa3\x32\x31\xf7\xa3\xd0\x9c\x94\xc7\x2c\xf6\x56\x9a\x1f\x73\x60\x51\xc6\x45\xce\xfd\xe9\xed\x80\xe7\x16\xd3\x50\x2d\x8b\xfe\xa3\x8e\x3d\x15\x57\x16\x52\xe5\xd5\xf1\x16\xf5\x45\xbd\x1d\xd7\x8e\x2f\xbd\xb2\x52\x2f\x95\xe0\xde\x10\x92\xb4\x19\x7f\x15\xdf\xae\x5e\x67\xd9\x27\x1a\x6c\xbf\x34\x67\x2c\xf2\xb1\x15\x80\x66\x92\x9d\x43\x20\xbe\x87\x82\x0c\x90\x9a\x24\x26\xdd\x4e\x7b\xfd\x34\x01\x7f\x04\xa2\x32\xd4\x66\x48\x54\x5a\x44\x3b\x36\x95\x08\xad\x32\x7a\xef\x28\xad\x30\x6f\x56\x1e\x10\x1a\x98\x76\x60\x59\x87\xbe\x17\x42\x54\x4d\x3f\xe3\x1b\xf2\x53\x19\x6d\x1b\xa5\x8f\x4f\x7f\x19\x5d\x26\xea\xc0\xd1\x44\xef\x4a\x2c\xa0\x05\xcb\x87\x64\x16\xab\xd6\x31\xa6\x02\x36\xa6\x84\x57\xc2\xa9\x6f\x61\x5f\x55\xc6\xa7\x2d\x6a\xee\xb0\xeb\xa4\x22\x5d\x06\xeb\xdc\xf7\x3a\xfe\xbf\x71\x6a\xe7\x3c\x6d\x40\x46\x39\x0c\x54\x12\x86\x52\x2d\xad\x12\x1a\x67\x8e\xd6\x27\x22\xd7\x06\x9d\x84\x39\x29\xff\xba\xc3\xdc\xdc\x92\x15\x84\xac\x7e\xc0\xf1\xdf\xe5\x2c\x0f\x5d\xaf\x13\xb4\xaf\xc8\x9b\x12\x31\xdd\xd0\x72\x7b\xad\x05\x2c\x75\x91\x3e\x3d\xc9\x9e\x1a\xf5\x82\x35\xbe\x58\xc6\x31\x42\x15\x73\xf7\x23\x93\xfe\xbf\x9b\x58\xa8\x5c\xa5\xf5\x4c\xc2\x1d\x15\x89\x94\x01\xc1\x15\xdb\x48\xf9\xb0\x61\x8b\x54\x19\x01\xd1\xf4\x2e\x51\x26\x0c\xf4\x64\xb0\x72\x20\x1f\x95\xb0\x6d\xf2\xe1\xd6\x90\xbc\xe5\x5c\x7d\x4c\x21\x58\x82\x3c\x97\xce\xb0\x30\xda\x88\x42\x61\x5d\x8b\x0f\x89\x91\x21\xa9\xb5\x09\xb3\x48\xfb\xff\x9e\x62\x29\x3c\x2d\xf6\x22\xa8\x93\xd6\x54\xc0\xe9\x20\x47\x8d\x37\x98\x43\x9b\x48\x9d\x8e\x13\x2a\x6d\xd5\x01\x20\x27\xf3\x21\xac\x83\x6e\x9a\xa4\xd9\x15\x38\xc8\x0c\x67\x18\xd6\xc3\x8d\xb4\x23\x8f\x92\xb5\x69\xb8\x22\x0a\x42\x5f\x9a\x4e\x93\xe9\x40\xb4\xf7\xf6\xa3\x49\xc6\x29\x68\x5f\x13\x17\xda\x6b\x1d\x76\xbd\x3d\x58\xdc\x97\x38\x7e\xae\xd1\x69\x95\xb1\x40\x5e\x7a\x71\x37\x82\xb9\x38\x88\xa3\x00\xdb\x69\x78\x6c\x89\x3d\xbc\x46\xb9\x5d\x80\xbe\x30\x3c\xfe\x92\xbc\xe0\x81\x0d\x96\xf9\xdf\x0e\xfb\x27\x01\x00\x4e\xe7\x79\x10\xc6\x51\xc2\x25\x8a\xf3\xb3\x2a\xbc\xed\xe3\x4a\x8f\xbb\x16\xca\x29\x67\x10\x32\x55\x31\x35\x79\xbc\x23\xf6\x83\x9a\x9d\xaf\x48\xbd\xe5\x22\xc8\x0a\x88\x9a\x36\x20\xa0\xb4\x16\x40\xbf\xc5\xf7\x85\x8d\x95\x81\x9d\xd5\x0b\xb2\x75\x31\x77\x1b\xae\xfa\x75\x78\x2e\xcf\x53\xaa\x19\xd3\x19\x6c\x63\x46\x41\x6d\x3b\xb2\x10\xa3\xd6\x3c\xfb\xc1\x06\x33\x4e\x3c\xdc\x1f\x6d\xf8\x6f\x52\xdb\xbc\x2d\xf7\x71\x73\x3b\x75\x1b\xaf\xc0\x9a\xab\xf2\x26\xf5\xf4\xd2\xc4\x0c\x49\x00\xdf\xc8\x62\x5a\xeb\x65\xfe\xfb\xe6\x16\xfe\x82\xc3\x6e\xc8\x6d\xcd\x1c\xf7\xf7\x1c\x76\x7c\x3b\xfb\x98\x8a\xd6\x8e\xff\xc3\x4e\xe5\x0a\x09\xa6\x83\xcb\x0a\xfc\x21\xf2\x4b\x5e\x50\x20\xd6\x89\xe7\xc4\x82\xd9\xeb\x99\x07\x4e\x72\x49\x1f\xb9\xbd\x23\x2d\x7b\x6f\x99\x13\x9b\xaf\x79\x18\x26\x06\x98\x5c\xf6\xc8\xcb\x91\x76\xd0\x43\x84\xbb\x03\xb6\xc6\xf6\x07\x1d\x28\xde\xc0\xfd\x26\x76\x78\xcb\xc2\xce\xd2\xc3\x7e\x6b\x94\xcd\x62\x1c\xab\xb4\xd3\x44\x54\x74\x94\x14\x39\xfb\xd9\x06\x3a\x0f\x66\xc5\xc8\xe7\xb9\xfb\x2e\xd1\x3d\xef\xd7\x17\x46\x2d\x41\xe2\x1d\xac\x9a\x85\xc5\x8a\x0b\xc0\xde\x3f\xdb\x66\x39\xd2\xf7\x7a\x51\xc7\xf4\x0d\x48\xd3\x0d\xa6\x7a\x84\xae\x77\xe0\x80\x2b\x99\x36\xfc\x1a\x18\xa3\xbc\xf3\xee\xa9\x0a\xf3\x84\xf3\x8c\x2d\xba\xe7\x1e\x77\x22\xea\xef\xa4\x73\xbe\xb9\xc1\x9e\x22\xa6\x1f\x15\x16\xfe\x8a\x86\xff\xe7\xce\x39\xe3\x8a\xd4\x35\xb1\xc2\xba\xe5\xf0\x14\x36\x80\xe9\x15\xc3\xfd\x68\x81\x04\x05\xe0\x38\xf0\x96\x6b\xde\x44\x25\x15\x7c\x02\xb8\xb1\x41\xf1\xa7\x92\x8e\xa5\x37\x2c\x0d\x72\x4c\x73\xe7\xcb\xa4\xde\x9c\xcf\xa0\xb3\x12\x36\x3e\x60\x88\x8f\x93\x8b\xf9\x8f\x93\xec\xeb\xa5\x50\x7e\x94\x26\xf7\x0d\xe3\xf8\xdf\x35\x29\x57\x80\xd7\x4f\x6e\x6b\x05\x50\x41\xa7\x4a\x80\x1f\xf1\xf4\x9d\x32\x8e\x07\x2d\xef\x2c\xf9\x32\xc5\x9a\x1d\x90\xea\x16\x21\x46\xcd\x50\x85\xbf\x53\xc8\xbf\xe5\x2a\x93\x0b\x26\x7c\xd1\x7a\x4c\x12\x4f\xd5\x54\x46\xd0\x29\xd4\xd6\x5e\xfa\xa7\xa5\x64\xb0\x76\xfe\xc3\xde\x08\xc2\x7e\x02\xcf\x68\x05\xe9\xda\x96\x9e\x6a\x9b\x54\x44\x27\x28\xde\xee\xa4\x59\x3b\x5a\x8d\x07\x5e\x37\x88\x0b\x1d\x27\x06\x8b\x23\x26\x23\x7a\x68\x61\x16\x5f\xac\x62\x18\x18\x99\x10\xe4\xb8\x8f\xb3\x41\x5b\x18\xa4\x65\x1f\xbf\x27\x3a\xeb\x20\x2d\x55\x48\x89\xed\x0f\x3e\x7e\x44\x16\xd5\x5e\x4a\x5f\xef\xb0\xaf\x03\x9d\x17\xb1\xdf\xb0\x77\x28\x2b\xe9\x3a\x4f\xdc\xd2\x5f\x9b\x1d\x73\xbf\xc6\x23\x10\xa8\xb8\xbc\x40\x19\x08\xe2\x49\xed\x0e\xa8\x08\xcb\xa0\x13\xc6\xb6\xb2\x3f\xe9\xb0\xfd\x62\x30\x80\x69\xf2\xcb\x8e\xff\x01\x98\x02\xa4\x41\x12\x28\x56\x4c\xe0\x84\xc2\x31\xa9\x2c\x0f\x2f\x45\xbe\x74\x85\xab\xc6\x31\xba\xd0\x21\x56\x62\xd1\x3f\x0d\x7f\x9d\xb2\x92\xbc\x5c\x6c\xaf\x07\xea\x42\x5e\x49\x51\x8d\xf7\xa6\xd8\xc6\x94\x3d\x25\xd4\x2b\xf6\x39\x04\x38\x40\x5f\xa2\x25\x8c\x66\x6e\xdc\xc8\x21\xb1\xb0\x38\x57\xe3\x90\x88\xfa\xed\x2b\x71\x48\xfc\x9a\xc3\x0e\xe4\xe5\x6a\x98\xf6\x82\x28\x71\x7f\xde\xf1\x7f\xbc\xc6\xe2\x84\xc1\xec\x3d\x52\x06\x31\x5a\x97\x8b\x69\x38\xec\xd4\xf5\xef\x92\x97\xee\x6e\xdd\xa5\x92\xbc\xbb\x75\x17\x4c\x13\x32\x67\x77\xb7\xf2\x8d\x76\xeb\x2e\x3a\xf2\xf5\xe8\x21\x7f\x4b\x33\x55\x61\x22\x02\x7a\x07\xbe\x8d\x0a\xc6\x56\x25\xfd\xe4\x7e\xf6\x35\xc6\xaa\x03\xc0\xb0\x0d\x90\xb1\xe7\xee\xe5\xfd\x7e\x57\xfc\x81\xbd\x40\xe5\x29\x6c\x7a\x71\xba\x26\x3a\x14\x7a\x84\x29\x9e\x0a\x5d\x1d\x4b\xd4\x96\xda\xef\x67\x30\x7b\x43\x74\x7e\x99\x44\x85\x30\xd6\x02\x4f\xa4\x7d\x2f\x02\x24\xec\xd8\xb2\x9f\xdd\xbb\x0b\x51\xdf\x55\xda\xbd\x56\x71\x50\x5d\x83\x91\xf6\x9b\xaf\x96\x90\xf6\x9f\x57\x08\x69\xa7\x72\x1d\x87\xc2\x0a\xb6\x27\x13\xe3\xc1\x5d\xf7\xa7\x71\x60\xe0\x86\x1d\x64\xc4\xe1\x24\x48\x0f\x19\x75\xae\x25\x46\xc5\xf6\xbd\xf2\x72\xc0\xea\xa4\x76\xac\x24\xbc\x35\x18\x54\x64\xa9\xca\xb5\xfc\x67\x07\xd9\xcd\xb5\x04\xdf\x48\x61\x87\x1e\xf5\xd9\xa2\x08\xda\x5d\x31\x35\xbb\x1f\x3c\xe8\xbf\xc1\xa9\x5e\xf5\xda\x41\xbf\x28\x33\x1a\xc8\x11\x52\xf5\x8b\xf5\x04\x9e\xf0\xc0\xce\x80\xbf\xec\x18\x43\xe2\xc3\x2f\xd2\x19\xd5\x07\xf5\x4d\x58\x80\x18\x1b\xfa\x94\x8c\x3d\x43\x91\x85\x64\x5a\xcf\x67\xad\xcb\x0e\x30\xfc\x5a\x73\xd0\x63\x07\x76\xe7\xa0\xdd\x39\xe8\x5a\xcd\x41\x1f\x36\x69\xb1\xdf\x7b\xd5\xb4\xd8\xfd\x51\xb4\xd8\xd7\x4c\x28\xee\x47\x24\x2b\xf6\x63\x63\x32\xbf\xe5\xac\x00\x1c\xd9\xcf\xaf\xd5\xf3\x97\x8c\xb5\x38\x15\xcc\xd0\x3c\x40\x23\x5f\x12\x69\xb7\xbc\x45\x29\x23\x29\x63\x04\x1f\x50\xf3\x1e\xf9\xcc\x5a\xec\x53\x9a\x00\xfb\x3f\x38\xec\x59\x57\x9e\x5b\x49\x87\xbd\x6c\xd1\x60\x0f\xcd\x34\xca\x54\x1b\xca\x9c\x62\xba\xec\xf5\x29\xc2\x5e\x5c\x1d\x9a\xed\x50\xaa\x16\x49\x68\x5a\xbc\x45\x86\x08\x8e\xf9\x69\x7c\x9a\x67\xad\x27\x9c\x68\xeb\x89\xfe\xb4\x3b\xbf\x15\xd4\xbd\x9a\xff\x5a\xb4\xfb\x8f\x4e\xb0\x73\xba\xaa\x74\xf0\xc7\xb4\xe8\x92\x48\x99\xa5\x3a\xa8\x1d\x10\xa6\x18\xc5\xd1\x50\x51\x2e\x64\xf7\xb7\x1a\xfe\x9d\xd5\x8b\x72\x81\x34\x98\x42\x8a\x54\x7a\x73\x5b\x78\xd8\x4f\xf9\xbf\xec\x1c\x50\x53\x78\x1d\x13\xcb\x97\x1c\x76\x0f\x31\x3e\xdc\xee\xdf\x7c\x51\xfc\x71\xb1\xee\x80\x85\x0c\x28\x2d\xc6\x6d\x8e\xd3\xf3\x4c\x7f\xc4\xbd\xd7\xbf\xe5\xa2\xfa\x65\xa5\x85\x67\x15\xdb\x49\xb0\xc3\x26\xfb\x41\xd1\x75\x9f\xe7\x3f\x78\x51\xfc\x71\xb1\xea\xa1\xba\xb0\x74\x06\x55\x58\xd0\x63\xa2\x31\x20\xc4\x3f\x03\xe2\x9f\xca\x1e\x23\x75\x20\xfc\xa0\xa5\x16\x71\xc0\xa2\xf8\xa8\xe8\x84\x9f\xda\x88\x00\x21\xed\xbe\xe6\x80\xff\x1b\x8e\xfc\xe5\x71\xf1\x47\x8e\x67\xa2\x38\xb5\x8a\xe9\x13\x1c\xd4\x79\x89\x13\x4b\x91\x2a\x42\x4c\x48\x33\x22\x0f\x63\x1e\x74\x38\x72\xb8\x4a\xdf\x9c\x25\x8c\x6b\xc8\x91\x22\x19\x50\xcb\xf3\x66\xcd\x82\xb4\x83\x32\x17\x5f\x69\x23\x1e\x43\xe6\x28\xb2\x48\x83\x16\xcf\x2f\xaf\x90\x8b\xb9\xd5\x6a\x21\x5e\x4f\xd9\x4b\x77\xcf\xc8\xb7\x2a\xdc\x1f\xbf\xb1\x97\x65\xec\xba\xd0\x22\xc2\x08\xae\x28\x62\xdb\x0a\x0a\xf1\xbf\x7e\x2c\x93\xc6\xee\x6a\xb8\xfd\xd5\xf0\x25\xe6\x6a\x58\x5c\xed\x62\x78\x5c\xff\x5d\xe1\x91\x07\xdf\x22\x38\x11\x64\x84\x04\x74\x19\x1e\xee\x4a\x0b\xec\x38\x24\xfa\x39\x5b\xaf\x3d\xb7\xba\x27\x64\xc4\x9b\x9c\x62\xb6\x13\xec\xc6\x3e\xd9\xa8\x8d\xac\x9a\x4f\x37\x93\xcd\x20\x0b\x67\x17\x17\x16\x51\x99\x4b\xb4\xd4\x0f\x37\xfc\x37\x3a\x06\xe1\x5e\x48\x4f\x01\x71\x8d\xa8\x03\x3c\x3b\xa6\x17\xc0\xc3\x88\x34\x24\x4a\xdc\x8b\xa4\xfe\xbc\x73\x29\x40\xe4\x83\x42\xa1\x6d\x91\x84\xba\x8d\x80\xeb\x40\x25\x2d\x52\x96\x92\x5c\x38\x4e\x37\xa3\xa2\x2b\x55\x5c\xa5\xd3\xb4\x27\xec\x10\x6b\x22\x7a\x31\x7b\xa1\xd4\x57\xca\xfc\xc3\x4a\x5f\x49\x4b\xfe\x1b\x25\xc4\x45\x19\x8e\x1b\x4c\x63\xf0\x24\xbb\x9d\xdd\xba\xe5\x99\xc1\x50\x3a\xa7\xa3\x98\xb3\x9f\xdd\x53\xcb\xfa\x74\x8a\xe6\x8a\xd9\x30\xcc\x78\x9e\xbb\xaf\xdb\xe3\xdf\x55\xb9\x46\xf4\xcd\x65\x3f\xe6\x92\x75\x40\x0e\x2b\x82\x37\x2f\x2c\x7a\x01\x3e\xdb\xba\xec\x34\xa2\xbe\x55\xee\x8f\x4c\xb2\x5b\x0d\x80\xe4\x4d\xfe\xd7\xaf\x00\x5d\xbf\x09\x8b\x04\x18\x0a\x7e\xd4\x9c\x19\x1e\x6b\xb0\x46\xd4\x77\xdf\xd8\xf0\x5f\x01\x50\x99\x85\xc5\xa1\xc7\xd1\x6b\x4e\xb3\x58\x9c\xa6\xfd\xd5\xa0\xbd\xee\x1d\x3a\x7a\xec\xb6\xd6\x11\xf1\xff\x99\xdb\x0f\x37\x01\xcb\x34\x1d\xa7\xa2\x29\x0f\x1d\xbd\xf5\x8e\xd6\xb1\x5b\x4e\xc0\xbd\xa3\xb7\x1e\x86\x90\x20\xe3\x7e\xaf\x8c\x45\x9b\xe7\x85\x77\xe8\xd0\xb1\x63\x27\x28\x91\x63\x27\x0e\xb7\xbc\x85\xc5\x8d\x5b\x15\x9f\x6c\x00\x84\x11\x62\x61\x22\x22\x0b\x74\xfb\x91\x2c\x23\x9e\x5a\x00\x37\x6d\x1c\x14\x9d\x34\xeb\xe5\x2d\x6f\x36\xce\xd3\xa6\x5a\x3f\xf5\xe0\x31\x20\x3e\x24\xcd\x27\xee\x4d\xf7\xb3\xf4\xd2\xa0\xa9\x54\x01\xe1\xeb\x00\xd5\xb7\x56\xfa\x4d\xc3\x79\xbb\xee\x3f\x4f\x7b\x32\xcf\x89\x75\x5b\xd4\xba\xc2\xee\xe8\x2a\x83\xa5\x99\x1c\x74\x12\xbf\x19\x72\x74\xb3\xeb\xe5\x23\xf7\xb0\x4a\xa0\xf7\x27\xaa\x3f\xd3\x87\x63\x76\x00\xa9\xbb\x96\x78\xc7\x7d\xfe\x18\xf1\x2f\xd9\xd3\x2a\x18\x02\xff\xe6\x25\x73\x93\x47\xcb\x1c\xae\x9f\x72\x39\x54\x39\x66\x6f\x9a\xb4\xb4\x9d\x54\xef\xbd\xc4\xdb\xb3\x38\x13\x7c\x71\xc2\x3f\xaa\x7f\x5a\x24\xdf\x7e\x56\x26\xa4\x96\x88\x07\xa0\x3e\x85\x88\xd9\x03\xf4\xa7\x26\xd8\xfb\x27\xd8\x3e\x31\x41\x06\x49\xe8\xbe\x63\xc2\x7f\xc5\xc4\x1c\xfe\xd0\xcc\xa5\xf8\x33\x8e\x50\x92\x9f\xc2\xf1\xbc\x08\x02\xe7\x6c\x14\x3f\xfa\x64\x25\x84\x39\x24\xe1\xc7\x81\xa1\x10\x8b\x69\x41\xfc\x48\x9a\x16\xde\xa1\xa9\x99\xa9\xc3\x43\x14\x7c\x53\x24\x1a\x8a\xd6\x8c\xb7\x62\xbc\x29\x36\x7f\xe8\x47\x17\xf9\x98\x42\x08\x17\x71\xbd\x61\x91\x21\x57\x81\x97\x77\x79\x1c\x37\xbd\x3c\xf5\x8a\x2c\xc0\xc0\x93\x20\xc6\xab\x70\x86\x93\x95\xb8\x73\xf2\x0e\x4d\xbd\x68\xaa\xe9\xf1\xa2\x7d\xd8\xdb\x4c\x93\xa9\x02\xb2\x0f\x38\x71\xb1\x3f\x53\x09\x0d\xd2\x52\x11\xe1\x1b\xa0\xef\x36\x04\x33\x94\xb4\x35\x0d\x0a\x7c\xbc\xe5\x9d\xba\x14\x99\xea\x2d\x47\xa0\x36\x69\x5f\x17\xe4\x5e\x1c\x6d\xf0\x99\x2e\x0f\xe2\xa2\x3b\x20\xd2\xae\x64\x1a\x4f\xae\x72\xaf\x4c\xe8\x4e\x6b\x0c\xcf\xd6\xcb\x27\x2d\x8d\x41\xd9\x3b\x96\x68\xe9\x7a\xb0\x4c\x8b\x80\xa8\x90\x7f\x6f\xc2\x3f\x5d\x73\xdd\x5a\xe2\x79\x02\xa1\xae\xa1\xd7\x45\x89\x34\x8c\x9e\x4b\x42\x4d\x4a\x5c\x56\x05\x17\xbe\x73\x82\x7d\xc6\x61\x93\xe2\x05\xf7\xd3\x8e\xff\x1d\xce\xfd\xe2\x55\x5b\x7c\xa3\x36\x59\x15\x00\x88\x40\x68\x25\x3a\xb6\xd3\x73\x4e\x5c\x3d\x67\x14\xd3\xcd\x23\xa2\x6c\xf9\xcc\x3b\x9d\x67\xb1\x67\xee\x40\x2c\xae\xa5\x32\xf0\x60\x19\x80\xb9\x6a\x1e\x89\xfe\xa0\xc3\x26\xc5\x7c\xe1\xbe\xd1\xf1\x9f\x7d\x01\x4e\x00\x6d\xee\x68\x55\x41\x45\x5a\x04\xb1\x57\x82\xee\xb2\x62\x5b\xa3\xe5\x52\x62\xcb\xd5\xf9\xcb\x93\x9b\xc9\xcf\x5c\xc7\xee\x34\x59\x71\x6b\x79\x51\xa4\x29\xb4\x54\xc6\xfc\xe1\xa8\xe8\x9e\xef\x2b\xe8\xf4\x63\xd7\xf9\xdf\xee\x0c\x5f\x37\x57\xc1\xb4\xe3\x19\x37\x44\xcf\x90\x5d\x2a\x07\x6a\x6a\xd8\x0d\x8a\x51\xca\x13\xa4\xab\xf2\x7a\xc1\xba\xb0\x6f\x32\x5a\x41\xa5\x0b\x18\x93\x03\xee\xc9\x5c\xa9\xa6\x00\x88\xc0\xee\x5e\xaf\x7c\x0a\x7b\xdb\x04\xdb\x03\x34\xf9\xee\x1b\xc5\xc4\x04\x7f\x2a\xbf\x27\xf5\x33\xb8\xa6\xf6\xa3\x65\xcc\x6b\xa2\x51\x64\xb8\x8a\xdf\xf4\x7c\x15\x14\x13\xfa\xb8\xb5\xf4\x6f\xf2\xf5\x03\xc4\xc1\x06\x19\x06\x74\x43\x85\xad\x5f\xed\x0c\xd1\x4c\xc5\x83\x7d\xe3\xd3\x3a\xe4\x46\xb3\x08\x62\x1e\xec\x84\x5a\x56\x46\x86\xbe\xaa\x3d\xb5\x5b\x7e\x51\x64\xdf\x78\x1d\xa3\x03\x71\x01\xa5\xca\xc9\xb8\x98\x32\xc8\x4e\xf4\x96\xb5\x61\x9a\xab\xd4\xac\x7a\xe4\x51\xe6\xf5\x83\x0c\xfd\x3a\x72\x68\xca\x43\xc2\x28\x17\x5f\xb4\x56\xc5\xf7\x3b\xec\x40\xd0\x8f\x40\x59\x37\x77\x7f\xc8\xf1\xbf\xcb\x99\x5d\x5c\xc0\x9f\x72\xb0\x88\xda\x58\xc3\x2b\xe6\xb8\x90\x28\x2a\xb0\xcc\xa6\x6e\x9a\xc2\xad\x06\x9d\xb2\x21\xc7\x2a\x5d\x55\x24\x8b\x60\x28\xf0\x64\xad\xe8\x2a\xef\x43\x0c\x04\x02\x04\x0f\x48\x13\xc3\x0f\x31\x6e\x02\xfd\xa0\xc3\x0e\x6a\xfb\x07\xa4\xc8\x5f\xe5\x68\x03\xc8\xca\xfa\x86\xbc\xb6\x9d\xcc\xcb\x87\xaf\x6d\xf6\x3f\xe9\x30\x96\xea\x11\xfc\x51\xc7\x7f\x87\x63\x8f\x5c\x91\xb8\x7e\x02\xfd\x6e\x0a\xbf\xdc\x4d\xd3\x75\xaf\x1d\x64\x5c\x0a\xc2\x4f\x7b\x73\x4b\xa7\x66\x57\x4e\x35\xbd\x0b\x8b\xf3\xf0\x6f\x9a\x79\x37\xa9\x88\x45\x9d\xd0\xb5\x2d\xd6\xf7\x4d\xb2\x03\xaa\x82\xdd\xef\x9c\xf4\xff\x74\x42\xcd\x33\xb6\xe9\xa0\x9b\x41\x8d\x06\x0a\xf5\x06\x43\x9f\x31\x03\xac\x7a\xd2\x9b\xea\xa7\x61\x3e\x45\x23\x05\x80\x49\x78\x69\x26\x4e\xd7\xa6\xd4\x00\x12\xdb\xe9\xb5\xaa\xef\x86\x9e\xbe\x49\x3e\x86\xa1\xb3\xf4\x71\xcd\xea\x66\xbc\xa5\x12\xb7\xde\x31\x1f\x30\xd3\x9d\x01\xc9\x25\xeb\x49\xd0\xa1\xaa\x24\x78\xd3\x4c\x7d\x0e\x24\x2e\x24\xca\xec\x37\x40\x1c\x62\x33\x8a\xc3\x36\x2d\xcb\x56\x63\xc1\x84\x8b\x56\x3b\xd4\x1c\x6a\x2c\x27\x30\x5d\xeb\xa4\xc3\x14\x8a\x96\x6e\xf0\x2c\x0e\xfa\x88\x26\x81\x95\x1b\xe2\x2a\x5b\x8c\x21\xd3\x1d\x9c\x87\x13\x7a\x24\x69\xc7\x29\x12\x8e\xc2\xe4\xd7\xb4\x8b\x8d\x42\xde\x32\x8c\x12\x45\x64\xb6\xd7\x31\xfe\x76\x3f\x3b\x79\x65\xc2\x59\xa0\xb3\xfc\xe1\xfd\xfe\x7d\xa3\xe4\xd2\xac\x6e\x35\x52\x65\x4f\xce\xe6\xf5\xd2\xcb\x7f\xb2\x77\xd7\xfd\xb5\x7d\xf7\x57\x66\x78\xbf\x3a\x57\xa7\xeb\x3b\xa5\x94\x7c\xe5\xce\xb3\x56\xe7\x77\xd7\xdf\xb5\xd3\xb3\xcd\xef\x77\xa4\xeb\xe6\x7b\x1c\xff\xb6\xa8\x4e\x1b\x7b\xeb\xb1\x62\x0e\xe8\xfb\xd9\x69\x36\xff\x64\x28\xe1\x3d\xe1\x3c\xb2\xb5\x2b\xee\x9c\x7b\x46\xba\xe2\xc6\xcc\x0b\xc3\xb4\x6b\x23\xa8\xdc\xd8\x5b\x26\x2c\x19\x2e\x43\x3a\xf6\x58\x6b\x9e\xf7\xe3\x74\x80\x07\x66\x04\x39\xfd\x8b\x86\x7f\xff\xf0\x65\xc3\x44\xef\xa6\x9b\x10\xd3\xc2\xfb\xb1\xd8\x2e\x2a\xa2\x4f\x90\x59\x84\x89\x36\xe1\x9b\x62\xdd\xac\xf8\xf6\x5f\xdf\x60\xef\x70\xd8\x75\x59\x0a\xa1\x21\x17\x60\x10\xbb\xdf\x37\xee\x48\xd2\xca\xea\x92\xf9\x9e\xce\xa0\x7f\x81\x6e\xd0\xb4\x40\x01\x5e\x18\x3a\x96\xb7\xbc\x45\xe2\x23\x87\xdd\x69\xd4\xf1\x86\x8b\xb6\x32\xe8\x73\xef\x99\x9e\x95\x7e\x8b\x75\xd9\xa4\x98\x02\xdc\x8b\xfe\x32\x3c\x90\x76\xbc\x50\xbd\x0a\xb3\x11\x20\xc3\x96\x38\x9e\x79\xf8\x62\xd3\xe1\x5b\x69\xf8\xd6\xde\xd3\x4e\xde\xec\xae\xbf\xb9\x87\x1d\x35\x0a\x5d\x73\x1c\xa7\xf3\xac\x24\x1f\xdc\xb7\xec\xf1\x1f\xa8\xb9\x5e\xf1\xa2\x1b\xf2\x40\x3a\xf7\x80\x2d\x33\x8e\x86\xa2\xa4\x68\x5d\x76\xa0\xb8\x97\x1d\x3a\x7d\xb5\x5a\xee\xbd\x93\xec\x7b\x1d\xe6\xc6\x41\x5e\x68\x1d\x3b\xd0\x9d\x7b\xe1\x95\xeb\x84\xde\x73\xc6\x52\x04\x55\x24\x1b\x86\x1a\x9e\x64\x0c\x4e\x13\xc5\xa9\x51\xa4\x5e\x90\xd0\x1a\xbe\xc1\xae\x17\x59\xc2\x2a\x85\xec\x84\x57\x9e\x9d\xc3\x2b\x15\x91\x52\xa4\x58\xa2\x3c\x6d\x06\x4a\x8c\xa8\xc5\x9e\xc3\xf6\xf5\x78\x2e\xac\x65\xf7\x9c\x3f\x3b\xeb\x75\xcb\x5e\x90\x80\xb7\x0f\xb8\x1d\xe8\x9e\x44\x80\x82\x3f\x89\x17\x41\x14\xcb\x0d\x2b\xd8\x92\xaa\x90\x56\x5f\x38\xcd\xf6\x66\x3c\xc8\xd3\xc4\xbd\xcb\x9f\x41\xaa\x23\xf1\xcb\x70\x43\x51\x8e\xa6\x48\x76\x6f\x44\x3a\x67\xd4\x29\xfa\xbd\xfe\x2d\xf6\x11\xb8\x4a\xa2\x09\xf5\x9a\x76\xbc\x95\x4c\x4c\xde\xa7\x91\xd2\xf9\x42\xb2\x9e\xa4\x9b\x76\x6a\xc7\x68\x2c\xdc\xe4\x7f\xfd\xf0\x58\xd0\x09\x5a\xef\x7c\x96\xb1\xe6\xf8\x5e\x4d\x02\x24\xcb\x1c\xa0\x05\xee\x7b\x99\x7f\xc2\xbe\xa4\xd6\xc5\x61\x15\x4d\xfd\xa0\x3d\xc7\xfc\xd9\x01\xf6\xda\x06\xdb\x5f\xf0\x5e\x5f\xac\x51\xee\xa3\x8d\x6d\xf8\x3a\x17\xd3\x70\x85\x5e\x00\x90\xc3\xff\xe7\xc8\x9f\xca\x18\xa1\x03\x55\xdb\x9f\x6e\x1d\x53\xc9\xc3\x5f\x79\x04\x1a\x75\xbc\x28\xc9\xcb\x4e\x27\x6a\x47\x68\x90\x92\xdc\x8a\xb0\x70\x43\x5e\xc0\x79\xc6\x55\x10\xa0\xe8\x30\xce\x7c\x86\xd2\x16\x05\xd4\x97\x6f\xec\xa7\xe1\xb4\xac\x08\xf6\x6f\x1a\xec\x86\x5e\x94\x80\x70\x8c\x44\xc4\xff\xa5\x12\x85\xf9\x2f\xce\xd9\x28\x89\x7a\x65\xcf\x50\x81\x91\x08\xf0\x8e\x8a\x08\x08\xc4\xc4\x1e\x0f\x54\x11\x45\xd9\x35\x78\x99\x58\x75\xe8\x74\x85\x02\xff\x2c\x6e\x1d\xaf\x9d\x05\x79\x37\x4a\xd6\x9a\x90\x28\x4a\x72\xae\x72\x93\xc9\x4c\xe9\x2e\xd9\x28\xed\x23\xde\x21\x33\xaa\xb3\xee\x05\x2f\xc8\xbd\x3c\x4d\x13\xf1\x6f\x54\x28\x9a\x9f\xc3\x16\xaa\xfb\x07\x1a\x86\x3a\xd8\xeb\x54\x68\xef\x97\x9d\xd1\x62\x38\x12\xdb\x22\x5f\x33\x8f\xca\x61\xea\x44\x49\xca\x10\x17\xc1\x32\xca\xbb\x8a\x2d\x46\x3a\x5b\x11\xd8\x2f\x36\x47\x65\x32\xcc\x53\x01\x05\x3c\x7a\x2d\x7b\xc2\xcc\x8d\x9b\xdd\xa0\x98\x8e\xf2\xe9\x60\xba\xf6\x01\xab\x8e\x7e\x64\x82\xed\x97\x41\x24\xee\x9b\x9f\x0c\xed\xc1\x4f\x37\xec\x10\x15\x14\x10\x7c\xa4\xe4\xd9\x00\x0c\x34\xdc\x39\x90\x0f\x1a\xba\x93\xf6\xee\x50\x7e\x51\x85\x8c\xe2\x1f\xb8\x0e\x72\x89\x72\x43\x65\x10\x48\xc8\xa1\x4e\x75\xf0\x37\x45\xac\xf4\xd5\x2e\x40\x8f\x5a\x1a\x1a\x2d\x0f\x72\xeb\xad\xf3\x01\x5a\xa4\xe4\x7e\x43\x25\x0c\x1d\x04\xa3\x38\xfc\x54\xa7\xc5\xda\xd3\xd1\xac\x32\xaf\xc0\x91\xf3\xa4\x0a\x94\x60\x29\x66\x6e\x84\x7f\xa7\x65\xe9\x73\xf6\xab\xfb\xcc\xad\xc3\x98\x06\x91\x6e\x2d\xb0\x28\x5f\xbf\xcf\x5f\x32\x2f\xd8\x66\xa4\xbc\xd3\xd4\x4a\xab\x68\x96\xe5\xd4\xcf\xdb\xd0\x66\xd2\xc1\x14\x14\xde\x0c\x7c\xea\xb2\xb3\x17\x9d\x5f\x36\xa0\x63\xcf\xae\xf9\xb2\x43\xf3\xa5\x64\x54\x91\xee\xba\xff\xf5\x6b\xca\x19\x39\xdc\x42\x96\x8d\xb2\x33\xa7\xfc\x70\xcf\xd8\x75\x02\x6c\xdb\x09\xf0\x84\xb3\xb2\xb5\x15\x77\xd4\x9d\x19\xc1\x04\x6c\xd0\xcd\x9b\xa3\x90\xb1\x77\x1f\xa8\x3d\x18\xc3\x58\xf4\xb3\x41\xdf\x40\x52\x7c\xdb\x01\xff\xf3\x8d\xd9\x30\xe8\x03\x04\x4c\x3d\x31\x12\x30\x31\x56\xcd\x49\xbd\x5e\x23\xe8\xb4\xaa\x14\xd5\x30\xc2\x6d\x38\x6d\xb1\xe0\xc2\x99\xa7\xc1\x7e\x09\x73\x29\x9d\x1c\x19\x29\x06\x38\xca\x21\x2e\x13\x0e\x0a\x9a\x5e\x99\x80\x76\x17\x40\xca\xc1\x50\xe7\x18\xc7\x0f\x6e\x3f\x05\xc9\x04\xab\x52\x85\x2d\xf5\x82\x7e\x3f\x4a\xd6\xa0\x18\xf0\xa5\x22\x05\x18\x5e\xbe\x0d\x5c\x08\x5a\x87\xbd\xa0\x7f\x45\xa8\x90\x97\xef\x65\xef\x9c\x94\xce\x85\xc7\x26\xfd\xcf\x4e\x20\xd7\x91\x8e\xec\x01\x1f\xa3\xad\x7b\x55\x53\x11\xb6\x9c\x55\x9b\x87\x46\x13\x1a\x92\x45\xd5\xe0\x56\x5d\xe1\x01\x56\xe2\x26\xe8\xf8\x27\x06\x1d\xc5\x3a\x1f\x50\x14\x31\x02\xf4\xe9\x32\xb1\x95\x0c\xc7\x3f\xc5\xa0\xe5\x84\xd5\x38\xe6\xcb\x1a\xb2\x0f\x15\xdd\xa4\xdd\xcc\xd0\xdb\x52\x24\x0a\xbb\x0c\x49\xcd\x89\x3c\x45\x26\x59\x8b\x62\x79\x02\x41\x14\x2d\xd8\x27\xbe\xa4\x2a\xa2\x69\x16\x39\xe7\x45\x49\x55\x83\xba\x51\xd4\x6f\x70\xd5\xef\x05\xd9\x3a\x0f\x15\x2e\xb3\xe5\x2d\x8a\x4c\x2a\x17\xbe\x0a\xd8\x97\x13\x3c\x04\xb7\xe3\xae\x14\x3e\x32\xd5\x6a\x4d\x21\x90\x33\xcd\x90\x88\x17\x7b\x9c\xb8\x7e\x05\x61\xc0\x0f\xf0\xc1\x4a\x2a\xb2\xf0\xf7\x45\xc7\x6c\xc5\xd0\x31\xbb\xdf\x3f\x59\xa7\x63\xa6\xfb\x1f\xec\xcc\xa7\x72\x6c\xd4\x71\xba\x66\xbf\x38\x69\x41\xbf\x80\x6a\x5f\x19\x77\xcf\x4e\x57\x4d\x9b\xca\xfd\xbe\x49\xff\xc1\xca\xb5\x8a\x25\x05\x9e\xd0\xc0\x7b\x76\xba\x2a\x17\x72\x08\x8a\x83\x70\x51\x69\x71\xc0\x82\x11\xa8\xad\x9b\x35\x36\xdf\x3f\xc1\xfe\xc8\xc4\x26\xfe\xf6\x55\x23\xf5\xdf\xe8\x8c\x0e\x18\x92\x2d\xf9\xad\xe9\x6a\x6e\x67\x0f\x26\x1e\xbd\xb9\xbc\x46\x98\xfe\x8f\x49\x4c\xff\x87\x9c\x31\x31\xfb\xb2\x4d\x44\x73\x80\x69\xfb\x2a\x67\x2c\x80\x5f\x62\xf5\x8d\xd2\x3d\xd9\x25\x10\x99\x9e\x0e\x92\x70\x1a\xfd\x13\xec\x33\x07\xd9\x3f\xad\xb7\xc9\xdd\x8f\x1e\xf4\x37\x17\x53\xda\x86\x18\x92\x46\x36\x9b\x85\x8a\x5f\xcc\xca\x04\xc3\xd9\xbb\x69\x2e\x61\x53\x1a\xc6\x60\x81\x93\xe5\x86\x16\xd0\xd0\x46\xe8\x7a\x91\x22\x75\x80\x3d\xeb\xff\xe5\x01\xf6\x51\x59\xdd\x1f\x74\xd8\xa1\x6d\xf1\x41\x5c\x41\x6d\x8f\x22\x07\x7a\x12\x6b\xfb\xd1\x86\x72\x0c\x7d\xc9\xd9\xc6\x54\x26\x4a\x82\x91\x14\x1f\x77\xce\x6a\xed\xef\x78\xa0\xc1\x23\xb9\xe5\x5d\x82\x32\x40\xd5\xc3\x28\xe9\x69\xb8\x5f\xd9\x07\xfb\x01\x06\xc5\x50\xb0\x85\x04\x4c\x2d\xf1\x20\x9c\x4e\x13\x88\xaf\xbf\xa6\x15\xb1\x6b\x94\xec\xc6\x8b\x5d\xa3\x23\xc2\x9f\x37\x57\xa1\xf7\x5d\xf5\x2a\x94\x8d\x89\x5a\xbd\x46\xab\xcb\x13\xce\x03\x5b\x1b\x38\x87\xdc\x7f\x55\xa7\xa0\xb5\x98\x86\xd5\xf0\xd3\xcf\x1c\xac\x05\x33\x2f\xa6\xe1\x6c\x52\x44\x92\x4f\xc6\xfd\xc0\x41\x7f\x41\x4c\xf7\x41\x52\x44\x9e\xa4\xa4\xc1\x5e\x06\x9f\x41\x55\x86\x02\xfd\x45\x95\xa7\x0c\xca\x19\x88\xe2\xb5\x27\xf0\xdf\x63\xec\x7f\xec\x61\x33\x7d\xd8\x76\x65\x3c\x9c\x07\xfa\xff\x65\xf5\xce\xc2\x1a\xb0\x7a\xe1\xe5\x53\x80\x12\x15\x93\xc2\x47\xf6\xf8\xff\x63\x72\xc5\x62\x42\x80\x1d\x28\xa6\x63\x51\x2c\xa0\x07\x2b\x05\xe0\xad\x74\x65\x05\x45\x94\x77\x70\x7a\x13\x99\x9d\x56\x99\xe5\x97\x44\xdf\xcf\x2b\x84\xe2\xd2\x8b\x04\x16\x02\x82\x33\xa2\x82\xe8\x44\xd3\x14\x00\x9d\x10\xdd\x83\x7a\x02\x51\x8a\xc4\x7d\xe0\xc2\xcf\xbc\x9e\xe8\x07\x52\xbc\x5a\x27\x4f\xe2\x0e\xea\x35\xb1\x57\x4e\x81\x2c\x9a\x6a\x42\x39\xb8\x13\xae\x89\x88\xd7\x60\xa1\xcc\x0b\x29\x54\xb0\xc9\xa3\xb5\x6e\x91\x53\x80\x9b\xc6\x40\xaa\x64\x7b\x1c\xf8\xd1\x34\x39\xb6\xd9\x1c\xa6\x46\xc3\x21\x8b\x09\x82\xe7\x45\x53\xde\x1f\x6a\x93\xd1\x75\x06\x90\xd7\xd6\xe1\x26\x20\xb1\xcb\x02\x90\xae\x65\x4f\xd4\x5f\x54\x00\xd4\x07\x26\x9f\x2c\x2d\xd7\xb0\x38\x64\x51\xe6\x6a\xde\x26\x63\x34\x09\xbd\x20\x04\x04\x88\x8f\x25\xf4\xe5\x54\x2c\x92\x8b\xa4\x40\x43\xc8\xbd\x6e\x90\xd3\xe9\x26\x32\xe3\x18\x8c\xb8\xed\x34\x43\x09\x5b\x52\xfb\x0b\x65\x77\x5e\xe1\x59\xef\x4e\x95\xc4\xa1\xfc\xb0\xae\x5f\xc9\xd4\x2f\x3e\x13\x10\x67\x98\xdd\x2c\x96\xd1\x71\x17\x3b\xc9\x6e\xdf\x72\xa5\x7e\x18\x8a\xc0\xc3\x45\x3b\x0b\xec\xbf\x4d\xb2\xd6\xa8\x3a\x1e\xd1\xef\xdf\x33\xe9\xff\xd9\x04\x79\x5a\xed\x56\xb0\x1a\x73\x44\xd7\x55\x18\xf8\x1e\x87\x93\x46\xa3\x2f\x14\x51\x8f\xd7\xf3\x06\x57\x36\x61\xb2\xda\x94\xc3\xf7\x0a\xb2\xd1\x06\x6d\x54\x74\xd6\xca\xac\xa4\xc0\x9d\x1e\x69\x05\x10\x91\x0f\x2e\x0b\xee\x1d\xe2\xad\xb5\x96\x17\x96\x9c\xd4\x6f\xd3\x90\x7c\xd5\xb8\x9c\x1c\x6e\x1a\x7b\x15\x18\x99\x62\xe4\xd1\x0e\x87\xf8\xdd\x80\x91\xb3\x04\xfe\x16\x88\x57\x52\xa5\xb5\x42\xf4\x14\x53\xbc\x84\x3c\x42\x20\x03\xa0\x4b\xa9\xb3\x6a\xeb\x1c\xfa\x2d\xce\x2b\x76\x67\x13\x5f\x13\xe3\xb0\xd2\xe9\x20\x3d\x98\x27\x73\x30\xe2\x69\xd8\x02\x88\x95\x67\x3d\x6d\xd3\xe1\x04\x15\x55\x7a\xdb\x09\x76\x6c\x7b\x47\x66\x56\x2f\x7b\xd5\x5e\xcb\x16\x34\x44\xbf\xa4\x41\xb8\x90\xac\x89\x01\xbc\x72\x66\xd9\xfd\xec\x1e\xff\xac\xfe\x59\x31\x03\xe1\x40\xb3\x9f\x66\x85\x17\x07\x03\x60\x3f\x93\x34\x69\x9a\x21\x4f\x52\x41\x53\x22\xf6\x64\xff\xd2\x3d\xec\x72\x83\xed\x81\x7d\xbc\xfb\xea\x86\xff\x05\xe0\x18\x23\x41\x95\x0a\xa9\x58\x94\xb4\xe3\x32\xd4\x6a\x0e\x22\x3b\x86\xf2\x9b\x41\xce\x44\xee\xac\x28\x27\x70\x8e\x3e\x17\x90\xe8\xe8\x99\x5c\xd2\x2c\x61\x39\xe2\x1c\xa9\x35\xed\x83\x1e\x88\x32\x90\xd0\x36\x50\x8b\x92\x8c\xad\xf2\x88\x37\x4e\x83\x70\x35\x88\x83\xa4\x4d\xfc\xff\x44\xd6\x4a\x5a\xb3\x2a\x40\x84\x0a\xdf\x14\x33\x55\xcc\x3b\x85\x75\xb8\x34\x06\x8e\xf6\xb9\x86\xa5\xf0\xf4\xa9\x86\xff\xcb\x8d\x65\xf5\xbb\x3e\xea\x16\x54\x9f\x64\xec\x89\xa6\xc3\x5a\x5e\x3e\x23\xda\xab\xd3\x89\xda\xc2\xf2\x3a\x71\xe2\x78\xcb\x3b\x2d\xa9\xff\x21\x4f\x2a\x54\x56\x9d\x25\x88\x77\xb2\xb4\x84\x22\x2b\xf6\xdd\xe5\x73\x0b\x9a\x75\x27\x88\x01\x73\x49\x23\x5f\xde\x42\xe7\x23\x38\x9c\x12\xac\x18\x90\xcd\x35\x14\x51\x7c\xd1\xce\xbe\xd7\xe5\x41\x28\xaa\x0b\xf2\x21\xd9\x46\x75\x67\x59\x2a\x63\x9a\x83\x74\xca\xd4\x72\xd0\x02\x06\x7b\x95\x3a\x0c\x92\x15\x01\x4c\xf7\x94\xbe\xf9\x12\x95\xc7\x3a\xff\xfe\xbe\x83\xcc\x1b\xe9\x1d\x99\xcb\xd2\xe4\xd9\xe9\xaa\xfb\xdf\x99\x7f\x92\xfe\x36\x85\xc6\xe8\x98\xde\xe0\x29\x86\x43\x6f\x8a\xdf\x6a\x67\x69\x02\x96\xb9\xd5\xed\x3f\x7e\xe0\xff\x82\x8d\x27\xfb\x13\x69\x67\xff\xbe\xc3\x8e\x6d\xe9\xd6\xb0\x2a\x13\x2c\xee\x77\x6e\xdf\xe2\x0e\x54\x45\x36\x69\x1e\x50\xec\xda\xb4\x18\x5d\x6b\x1b\xf4\xc3\x9a\xeb\xe0\x7d\x0e\x3b\xb1\xc3\xe2\xa2\x59\xfe\xc2\x39\x0a\xe6\xd0\x66\xb8\x2e\xd8\xae\x11\xbd\x6b\x44\xff\xc3\x34\xa2\x9f\x70\x1e\xde\xda\x02\x3d\xe1\x1e\x1b\x21\xf4\x4a\x63\xa4\x96\x1d\xe3\xfd\x7b\xd8\x89\xba\x1d\x8d\x78\x50\x2c\x2e\x05\x86\xe1\xce\xc5\x41\xd4\xb3\x74\x21\xbf\x34\xe9\xbf\xb5\xb1\xe5\x63\x16\x63\x76\x17\x22\x36\xb3\xa9\xdc\x5b\x7c\x68\xae\x9e\x35\x9b\xbc\x65\x1b\x32\x86\x58\x32\x50\xae\xa6\x65\x12\x7a\x8b\x0f\x61\xdf\x05\xa1\x46\x32\xfd\xe8\x49\x53\xe1\x66\xd6\xdb\x3a\x5f\x91\x30\x9c\x72\xe8\x58\x62\x7b\xda\xf4\x02\x6f\x33\x0b\xfa\x7d\x50\xc9\x83\x8f\x11\xb0\x0e\x49\x64\x95\x32\x84\xb2\x1c\xd3\x4d\x52\x0d\x13\xdb\x68\x61\x30\x72\x10\xa2\xd4\x5b\xe2\xc3\xad\xcb\xce\x81\xb6\xf8\xf0\x90\xa4\xe5\xcf\x35\xd8\xef\x3b\x4c\xdf\x74\x7f\xd3\xf1\x3f\xea\xcc\xc9\x9f\xd5\x5d\x47\x50\x5f\x9e\x11\xbc\xe3\x81\x86\x62\xc9\x23\x48\x55\xa3\x57\xac\x4f\xd1\x57\x19\x98\x26\xa9\x8a\x1b\xf5\x25\xbc\x02\xa5\xb1\x06\xf8\x73\x0c\xd9\xce\xb3\xfe\xb3\x1e\xde\xa1\x10\xa7\xc2\x8b\xd6\xb0\x19\xfe\xe1\x01\x76\x7c\x3c\x9e\xce\x60\x21\x46\x86\x31\x00\x7b\x3c\x7e\xc0\xff\x76\xa7\xf6\x96\x0d\x2a\x18\x7a\x44\x21\xa1\x2d\x32\xee\x32\xe7\xc3\x8f\x42\x6a\x30\xd3\x90\xb6\xd0\xec\xe2\x82\x07\x07\xdb\x8a\x74\xb4\x36\xf4\xe0\x87\xf6\xed\x4e\x89\xdb\xf7\x2b\xfe\xaa\xb9\xbd\xfb\xb0\x73\x75\xc1\x07\xff\x7a\xb9\x3e\xd8\xe0\x6a\x8a\x92\x47\x6b\xd3\x41\xd6\xee\x46\x05\x6f\x17\x65\xc6\xc7\xee\xf4\x76\xf7\x0e\x3b\xdb\x3b\x18\x74\x14\x7e\x34\x4c\x47\x21\x6b\xa6\x26\x7a\x61\x96\x3d\x6b\x0c\xc6\x7e\x3b\x13\xc9\x13\xce\xb7\x6e\xbd\x1a\xdf\xe7\x9e\x9a\xd6\x3e\xe0\xe1\x09\x62\x2c\x9d\x88\xa1\x50\xce\x7e\xe9\x29\x96\x2f\xa1\xca\xf4\x35\xb7\xbc\x30\x9f\x45\x1b\x3c\x83\x73\xe5\x37\x3c\xc5\x3f\x66\x5d\x19\x03\x1a\x56\xcf\xd9\x96\xd3\x27\x0f\xb2\xc7\xf7\xb0\xeb\x91\xab\x4b\x06\x74\xb9\x6f\xde\xe3\x7f\xf7\x1e\xfb\x9a\x25\x07\x1a\xe5\x22\x3d\xb9\x46\x86\x90\xae\x74\x4c\xa1\x34\x54\x61\xf3\x83\x79\x87\x56\x39\x32\x27\x45\x85\xd6\xab\xc0\xcc\x8a\x94\xb4\xce\xcb\x62\xb9\x1a\x47\x79\x17\x97\x86\x43\x87\xc5\xe0\xec\xa6\xe1\x61\xa9\xf8\x87\xb1\xb2\x26\x79\x1a\x7d\x8a\x18\xc9\x0c\x9f\x81\xec\xfb\x32\x82\x99\x1e\xa4\x4c\x43\x4f\xef\x88\x15\x14\xfd\x9a\xed\x2e\x6f\xaf\xe7\x06\xec\x22\xd0\x3c\x69\x64\x5e\x88\x1c\x6c\x06\x62\x82\x2c\x93\x22\x8a\x4d\x88\x46\x24\xf3\x01\x76\x16\x88\x21\x00\xe3\x32\x97\xce\x2a\xd8\xc4\x08\x33\x19\xbc\x2a\xa2\xc8\x43\x3c\x69\x5a\xef\x5e\x4a\x9d\x0e\xd7\x31\x20\x4f\x60\x1a\x1e\x9f\x55\xc5\x33\x3d\xd4\x10\x51\x2e\x59\xdd\xb4\x9b\x41\xf5\x8d\x25\x0c\x3c\x1f\x28\x51\xaf\x35\xc2\x81\x93\xf2\x8e\x22\xb3\x56\x14\xdc\xda\x01\x29\x79\x88\x9b\xf5\xdf\x55\xfc\x60\xeb\x51\x1f\x22\xa9\xcf\x8b\xed\xd6\x66\x44\x6c\xc7\x23\x9f\x17\xcd\x57\xe5\x81\xfe\xb7\x7b\xd9\xf5\xfd\x34\x5c\x48\x3a\xe9\xf9\x04\xb6\x0f\xee\x2b\xf7\xfa\x7f\xbb\x67\xa1\x23\x25\xe8\x0a\x40\xf5\xdb\xcf\xec\xa4\x07\x87\x8a\x7a\x02\x64\x53\x0d\x39\xab\x43\x40\x7b\xd2\x4f\x43\xb1\x75\x83\x4f\x5c\x58\x98\x27\xaf\xbc\x74\xac\x92\x2a\xba\x1d\x7b\x4b\x39\xa3\x3a\xaa\x26\x6b\x01\x88\x50\xeb\x25\x4d\x30\x21\x2b\x92\x46\x09\x4d\x62\x27\xa2\x8c\xeb\xe0\xfa\x4a\x91\x83\xdc\xeb\x07\x19\x4c\x92\xf4\xa8\x19\xc7\x23\x9a\x1f\x2a\x4a\x0c\xa7\x98\x13\x8e\x5f\x7c\x7e\x28\x7f\x41\x4e\xbb\x35\xa9\xe8\x20\x11\x4b\xcb\x0b\xc0\xdf\x52\x1d\xb6\xa2\xd9\xf2\xa1\x7c\x22\x28\xa1\x9f\x26\x79\xb4\x1a\x93\x58\x4e\x90\xe5\x78\xe2\x11\xaa\xe8\x56\xda\xe8\x98\xdf\xa7\x3a\x89\x86\x73\x82\x1f\xe9\xa4\x71\x9c\x6e\x8a\x37\xd5\x4d\x91\xcb\x8a\x7c\x4e\xd4\x19\xea\x13\xb9\xd9\x65\xc8\x1e\xc1\x5d\x01\xc4\xbc\xae\x65\xe9\x26\x9e\x47\xc1\x2e\x3b\xe3\x9d\xe8\x92\xc5\x2c\xdf\xf2\xfc\x76\xae\x27\x6a\x5a\xf5\x84\x61\x22\xf6\xe8\xfe\x49\xb0\x51\x60\x9b\x3f\xee\x39\xd8\xcb\x1b\x0f\xe3\xde\x7e\xd4\x1b\x65\x14\xfa\x27\x69\x97\x78\x48\x5c\xb8\xb0\x30\x7f\xd8\x1a\x21\x7f\xed\xb0\x95\xab\x63\x41\x7c\xf6\xf2\xf9\x73\xcb\xb0\xae\x2e\x66\x69\x3f\x3f\x9f\xcd\x8a\x05\xd5\x7d\xa3\xe3\x7f\x9f\x53\x7f\xcf\x74\xe2\x05\x34\x43\x28\x7c\x0a\x8f\xc0\xba\x02\x1d\x97\xca\xeb\x1e\x2a\xaf\xc3\x82\x2d\x3a\x6a\xe5\x76\xcb\x3b\x1b\x44\x4a\xde\x5f\x74\x99\x9c\x67\x86\x38\x7d\xbf\xcc\xfa\x69\xce\xf3\x16\xfb\xfe\xbd\x56\xac\x9f\x34\x6e\x4d\x99\x08\x43\x34\xdd\xfd\xe3\x3d\xfe\xe6\x2c\x91\x06\x4a\x48\xbd\x71\xb8\x52\x51\x94\xb0\x65\xff\x71\xef\xd3\x44\x7c\x1f\xae\x4d\xc0\x8d\x28\x46\xbc\x7c\x18\x90\x77\xdc\x46\x26\xd2\x9e\xe9\xb2\x33\xb1\xce\x07\x97\x9d\xfd\xf2\x0d\x6b\x4d\xfe\xf5\x49\xf6\x2c\x26\x1e\x70\x6f\xf7\x6f\x5e\x91\x38\x7e\x48\x43\x2d\x80\x2a\x5f\x46\xec\xbc\xb9\x63\xfa\x1e\x87\xa9\xc4\xdd\x6f\x73\xfc\x62\xc9\x6c\x9c\x75\x3e\x98\xca\x09\x1a\x98\x26\x79\x37\xea\x93\x6e\x27\xd2\xbf\xc8\x9d\x1d\x32\x72\xc8\x64\xf0\x14\x61\x21\x69\x7a\xe7\xd2\x42\xfc\x73\xea\x52\x94\x17\x79\xd3\x9b\x4f\x79\x7e\x2e\x2d\xe0\x67\xcb\xbb\xaf\xc0\xfa\x38\x63\xeb\x5b\x7f\xa9\xc1\xf6\x62\xba\xee\x5f\x35\xfc\xdf\x6c\xcc\x1a\x2d\x6e\xda\x3b\xb9\x5a\x95\x54\x6d\x82\xbf\x5f\xf4\x12\xfa\x6e\xa1\xcf\x25\x30\x09\x53\x63\x82\x04\x61\x6a\xd2\xc0\xec\x8a\x74\xcc\x0c\x8f\x49\x6e\x74\x52\xf7\x81\xbc\xe7\x99\x91\x2f\x13\xa3\x3d\xf9\xac\xe9\x58\xab\x59\x61\xca\x84\x1d\x48\x3f\xe3\xc4\x2d\x04\xfa\xfd\x4a\x16\x23\x92\xe9\x51\x68\x05\x90\x8a\xd0\xf2\x02\x06\x62\x50\xf0\xb5\xa8\x8d\x6a\x7f\x1e\x08\xa7\x8c\x3b\xf7\x78\xf5\x7e\xf6\x4c\x73\x68\xe8\x63\x1e\x3d\xe2\xe7\xf4\xc5\xe5\x68\x2d\x89\x92\xb5\x25\xb4\x03\x61\xaf\xf9\x6b\xfb\xfc\x0f\x3b\x18\xfd\x63\x4c\xcb\xe2\x67\xaf\x57\x16\x18\x84\xa4\xe4\x32\x24\x5f\xa6\x06\x9e\xb5\x3c\x30\xfe\xd1\x13\x80\x37\x45\x27\xb9\x90\x83\x2e\x1a\x9c\x57\x28\x9e\x2f\xe8\x85\x84\x7b\xc4\x50\x3d\x98\x3b\xe8\x21\x0c\x21\x13\xeb\x09\xf8\x63\xcc\x9d\x60\x12\x2a\xc5\x66\xee\xf5\xd2\x50\x9d\x8c\x82\x46\x60\xeb\xb2\xb3\x8f\x32\x66\x0d\xb7\xbf\xd9\xc3\x9e\xc9\xe4\x1d\xf7\x98\x3b\xb9\x3a\x28\xb8\xff\x2f\xee\x0d\x72\x7e\xeb\x89\x69\x9e\xb4\xd3\x90\x87\xde\xe2\x03\x73\xcb\x37\x1e\x3d\xe2\xcd\x2d\x2f\x01\xba\xcb\xac\xdd\x36\x9b\x28\xa3\xd0\xfd\x66\xff\xfc\x85\x85\xf9\x1a\xf1\x4b\xa3\x4a\x20\x56\x37\x17\x6d\xbc\xcc\xd1\x3f\xd6\x12\xcb\x91\xb1\x1d\xed\x10\xbd\x6e\x14\xdb\x2a\x11\x9f\x77\xd8\x5e\x60\x29\xca\xdd\xdf\x72\xfc\x0f\x39\x44\xc3\x40\x35\xa8\x77\x00\x6a\x14\x23\xa5\x51\x1b\x57\x49\x3d\x0d\xc9\xee\xa7\x04\x80\x20\x2b\xda\x76\x2b\xd2\x34\xce\x5b\x11\x2f\x3a\xad\x34\x5b\x9b\xe9\x16\xbd\x78\x26\xeb\xb4\x6f\x39\x76\xfb\x91\x1b\x73\x04\x21\x4e\x9f\x68\x1d\x6b\x1d\x6d\x1d\x67\x9e\xf8\xdf\xce\x5f\x3c\x7a\x6c\x4c\x57\x0d\xd9\x7e\x51\x2d\x80\x1c\xfe\x46\xff\x81\x85\x6b\x53\x9b\x8f\x3a\x6c\x0f\xbf\x54\x64\x81\xfb\x62\xff\xc1\x53\xe2\x8f\x27\xb3\xdd\xde\xe9\x7c\x1d\xfb\xda\xd1\x65\x34\x39\xa0\x36\x55\xc0\x4b\xcf\x7f\x50\xba\x8d\x9e\xc4\x22\x8f\xac\xe7\x7f\x7f\x1d\xfb\xba\x71\x01\x17\xee\x0f\x5f\xe7\xdf\xa6\x91\xd1\xc8\x77\x6c\x1f\xcc\x01\xca\x11\x36\x71\x84\x00\x6a\xa7\x49\x5e\xf6\x2a\x71\x03\xaf\x78\xca\xff\x0d\x87\x73\xbb\x2e\x9b\x1d\xf2\x50\x4c\x30\xb6\x1a\x25\x41\x36\x98\x17\x8d\xfe\x5d\x13\xfe\xe7\x1b\xf7\xaa\xdf\x7a\x27\x05\xee\x7e\xb8\xee\x61\xfb\x9d\xa2\x20\x12\x5c\x49\x21\xda\x15\xbd\x3c\x20\x37\x9d\x94\x3d\x9e\x45\x6d\xaf\xdd\x0d\xb2\xa0\x5d\xf0\x2c\x6f\x7a\x53\xd3\x53\x4d\x6f\xea\xf9\xa8\x44\xdf\x9a\x6a\x79\xe6\x77\x02\x45\xa6\xe8\x89\x79\xdd\xcb\xc5\x30\xa2\x03\x8a\xa0\x50\x78\x1d\x32\x67\x2e\xac\x9c\x9e\xbe\xdd\xcb\x82\x64\x8d\x8c\x2c\x08\x04\x10\x5b\x70\x34\x3e\x8c\x94\x21\x7b\x43\x34\x3b\x84\x27\xab\x09\x00\x6a\xaa\xa8\x1c\xc5\xae\x47\xeb\xb9\x41\xea\xa3\x64\x9a\x2e\xe4\xb6\x90\x2d\x4e\xdb\xb4\x3d\xf5\x8e\xb6\x8e\x1e\xb9\xd9\x53\x7b\x79\x54\x52\x44\x1b\xae\xf5\x4e\xe7\xab\xd8\xd3\x70\x11\x1b\x31\xe5\x7c\xa2\xc1\x26\x61\x24\x7e\xac\xe1\xbf\xa3\x31\xdc\x1c\xc3\x83\xfc\x49\x69\x95\x87\x70\x9b\x84\x24\x19\x69\x32\x8d\x75\x5d\x69\x14\x48\xbe\x24\xa7\x80\x51\xdb\x86\x9a\x6f\xa5\x49\xb6\x68\x0c\x33\x1a\xab\x9a\xde\x8e\x9a\x64\x9c\x00\xdb\xae\x23\x7f\xfb\x67\x9b\x0f\x6e\xed\x4d\x6d\xb9\xcd\xad\xc3\x07\xd5\xd2\xc4\xd8\x5b\xf7\xb3\xc3\xdb\x02\x60\x2d\x95\x31\x77\xff\x6a\x9f\xff\x67\x8e\x71\xa1\x0a\x3e\x01\x0c\xad\x8c\xb3\x43\xb3\x1f\x22\xaa\xca\x24\x44\x21\x33\xad\xbb\x9d\x4a\x72\x7b\x8a\xb3\x12\xbb\xcd\xa0\xbd\xce\x93\x50\x09\x9e\x8b\x4a\x6e\xa7\x3d\x89\x06\xe5\x12\x8d\xd5\x89\xb2\xbc\xf0\xb8\xe8\x1a\x18\x3e\x23\x6c\x39\x4c\x11\xa0\x55\x60\x5a\x24\x80\xae\xd1\x01\xdd\x32\xf1\x2a\x1c\x0c\x40\x94\x52\x23\xdd\x28\x1a\x0c\x39\x7b\x35\xfe\xeb\x3d\xec\x6d\x7b\xd8\xa4\xf8\x90\x7b\x79\x8f\xff\xca\x3d\xf7\x13\x0a\xa8\xa8\x11\x04\x43\x49\x2e\xe3\x64\x92\xaa\x16\xf2\xd9\x14\x56\x0b\xc5\x46\x89\x4d\xf6\xd2\xe9\x39\xef\xf8\x1d\xb7\xdf\xaa\x02\x11\x4d\xaf\x4c\xc8\x37\x22\x29\x4f\x2c\x7b\xae\xdf\x05\xcc\x92\x74\x50\xc1\xfc\xbb\xb4\x60\xa6\x4a\xe3\x76\xe9\xf4\xdc\x49\xef\x68\x0b\x24\x30\xe5\x84\xad\x58\xc8\xe6\x94\x50\xab\x8d\x73\x42\xf9\x41\x31\xff\x03\xfb\x8d\xb0\x93\x07\x54\x8f\xec\x80\xe7\x2d\x2c\xca\xd4\xc1\x71\x2e\x23\x38\x90\x40\x51\x62\xeb\xd8\x31\x9c\x72\x2e\x9e\xbc\xe8\x85\x1c\x78\x50\xd1\x8b\x05\xbc\xb5\x3c\x27\xc9\x3d\xe9\xdb\xee\xa7\x59\x31\x9c\x43\xf1\x35\x9d\x49\x3c\xac\xc5\x12\xeb\x0c\xa3\x21\xa5\xe8\x69\x4f\xde\x7e\x04\x3a\x84\x18\x86\x62\x72\x17\x49\x9c\x3c\x71\xe2\xb8\xba\x98\xb7\xd8\xbd\x29\x36\x7c\xce\x09\x27\x2d\x16\x2d\x59\xa6\x4e\x59\x94\x19\x1f\xd5\xf7\x7a\xa4\x0a\x1e\xac\x89\x39\x1f\x67\x0e\xe8\x79\x86\x8e\xef\x50\x2f\x92\x76\xb0\x42\x8d\x25\x95\x68\x4a\x59\x14\xe8\xb2\xa4\x1d\x45\xf8\x38\x85\x75\x2b\xac\x70\xca\xfa\x9e\x4a\x1b\x88\x67\xb3\x49\x51\x52\xf7\xde\xd1\x24\x0c\x75\x23\xfd\xfe\x95\x95\xc5\x6a\xba\xec\x0f\x26\xd8\x91\xd1\x22\x13\xcb\xa7\xce\x44\x49\x79\x49\x52\x22\x49\xe9\x85\xf7\x4e\xf8\xdf\x52\x7f\xcb\xda\xed\x49\xb9\x52\x44\x0e\xa0\x27\x68\x40\xd8\xbf\x5c\xe1\x06\xd1\x0c\xb6\x5e\x68\x5d\x76\x26\xc5\x5c\x63\x0d\xcf\x0f\x36\x58\xc0\xe0\xb2\xfb\x1c\xff\x0c\x70\xfc\x45\xd5\xef\x28\xc6\x95\x30\x6a\x17\x32\x55\xe8\x6d\x60\x86\x13\xeb\x03\x82\xd3\x51\xeb\x21\xe7\xb6\x33\xe6\x3f\x81\x80\x35\x14\x4d\x96\xf6\x17\x1d\x36\xb3\x25\xf2\x95\xaa\x43\x0a\x4b\xbc\xca\xb1\x13\x51\x78\x76\x29\xfb\x1e\xe4\x77\xea\x6b\xa2\xef\x9e\x2d\xf3\x62\xa9\x4c\x66\xf3\x27\x45\x07\x5e\xc2\x63\xa7\xc9\xc8\x9d\x61\x3f\x33\x61\x45\x5b\x48\xd1\xb1\xd9\xb5\xb5\x0c\xb4\x47\xd3\x04\x96\x80\xd7\x4e\xf8\x0f\x55\xae\x0d\x73\x7c\xc5\x69\x5b\x54\x2e\x71\xcc\x2e\xa5\x31\xca\xc0\x07\xf4\x1e\xd7\x01\xc2\xc6\x23\x56\x63\xbe\xbb\xc1\x7e\xa4\xc1\xbe\xba\xad\x6f\x4b\x3f\x24\x80\x73\x3f\xe8\xcc\xd5\xdc\x51\xca\x32\xea\x74\x53\xdd\xb1\xfd\x47\xb2\x6b\x75\xc4\x76\xc3\xca\x25\x38\x42\x74\x87\xc3\xa0\x10\x08\x47\xd6\x8a\xf4\x3a\x55\x73\xb9\xa9\x94\x66\x2a\xf7\xfa\x3c\x23\xf2\x51\x1d\x23\x0d\x72\xd8\xa6\x69\x39\xcf\xc6\x8c\xd2\xed\x52\xa5\xb0\x3f\xdc\xbf\xbd\xb3\x4f\x80\x76\xfc\xcc\x7e\xff\xb8\x75\xa5\x2e\x52\x52\x3d\x30\x9e\x05\xf2\x65\xfb\x76\xcd\xbb\x1d\x9a\x77\xb1\x3c\x91\x6f\xfb\xdf\x50\x4b\x32\xa8\xaa\xde\xec\x27\xb7\xb2\x13\x63\x90\xad\x23\x1b\x7c\x77\x7f\xbd\x7d\xa0\xcc\x07\x4c\x57\xcb\xbb\xaf\x12\x28\xd3\xab\x07\xca\x5c\xb3\xc8\xbb\xce\xd6\xb6\xc1\x9c\x3b\x2b\x91\x16\xd6\xf0\x1f\x8b\xb0\xa8\x08\x8a\xb1\x3f\xb8\x81\x4d\xef\x88\x20\xc6\x7d\xff\x0d\xfe\x73\xe4\x0f\xdb\x5a\x4e\x02\x19\xd7\xa3\x15\x35\x24\x97\x74\x53\x1d\x98\xeb\xa0\x33\xba\x87\xfb\x69\xc8\x5f\x8b\x54\xc1\x2e\x3b\xfb\xe5\x8b\xd6\xf4\xf4\xf9\xeb\xd8\x71\xa2\x52\xb8\xd9\xff\x86\x64\x44\xa0\xc2\x1a\xb1\xe2\xe8\xae\xf0\xcb\x0e\x7b\xaa\xfa\xae\x9c\xd9\x7e\xdc\x61\x0f\x5c\x41\x97\x80\x82\x53\x1a\xa7\xd3\x6c\x9e\x98\x90\x06\x7e\xbb\xfa\x05\xc5\xba\x41\x3f\x75\xc9\x29\xdc\x79\x76\x71\xc1\x43\xbf\x85\x3c\x11\xe9\x67\xe9\x6a\xb0\x1a\x0f\xf4\x56\x07\x9a\x4b\x26\xd1\x62\x7f\xb4\x87\x7d\x2d\xbe\x42\x42\x2f\xf7\x0e\xe6\x60\x24\xce\x2d\xcc\x2f\xe5\xee\xaf\xec\xf1\xff\x78\x32\x10\x26\x1b\x84\xc7\xe3\x18\x15\xb7\x20\x4c\x91\x5c\x24\xa4\x10\x23\x01\x9d\x60\x9f\x49\x17\x0b\xd6\x9d\x22\x37\x2b\x52\xaf\xcb\xe3\xbe\x8a\x94\xcf\x20\xd4\x28\xa7\x89\x82\xb6\xd8\x10\xb4\x46\x1b\xd0\x69\xae\xa8\xee\x36\x83\x81\xd7\x4f\x73\x38\xe0\x6e\x79\x73\x94\x82\x30\x43\xa4\x57\x23\xe8\xf7\xb3\xb4\x9f\x09\xf3\xad\x9a\xb9\x00\xd6\x5b\x5c\x85\x21\xfb\x74\xdc\x37\xc0\x45\x1a\x26\x94\x76\x90\x43\x9b\xab\xa8\x29\x8a\xc8\x6b\xaa\xec\xd2\x12\x23\xbf\x07\x4a\xe1\xd2\xac\x14\x45\x16\x49\xa3\x5d\x43\x9f\xcf\x78\x51\x66\x49\x8e\x86\x52\x01\xb4\x2a\x50\xb1\x4a\xc8\xba\xe8\x46\xc9\xba\xa6\xaa\x97\x55\x2c\x4a\x45\x19\xb3\x58\xbb\xd1\x1c\x05\x21\x68\x72\x5b\x89\xf4\xe5\x09\x17\xac\x66\x0b\x8b\x58\x42\xf1\xc9\xa6\x8c\x37\xa4\x64\xa1\xba\xe5\xee\x1a\x73\x58\x12\x46\xc0\x4c\x40\x4e\xdd\x5e\x9c\xa6\xeb\xb9\x17\x14\xde\x37\x4e\x9f\x4e\xb3\xcd\x20\x0b\x79\x28\xfe\x92\xd1\x2a\x69\xe6\x7d\xe3\xf4\x12\x0f\xe2\xe9\x85\xbe\x71\x4d\xaa\x1f\x2e\xf1\x5e\x5a\x70\xd1\xb1\xbc\x43\x11\x09\xf8\x03\xd9\xd9\x61\xd1\x11\xd6\xb8\x55\xe4\x85\x45\xcb\xa7\xbe\xc8\xce\xb1\x33\x57\x30\x9c\x96\x47\x75\x66\xf6\x16\x87\xa9\x59\xc0\x7d\xb5\xe3\x1f\x53\x24\xf6\x32\x5a\x52\x5d\xd0\xf3\x8d\x0c\xcf\x5a\x1b\x62\xc6\x3a\xcf\xce\x3e\xa9\xe3\x7d\x77\xa3\xb4\x1b\xf6\x70\xcd\x5c\x83\x8b\x5b\x2f\xff\xd3\xee\xcd\x75\x81\xf7\x8a\xc8\xad\x12\x7d\xff\xd6\x5a\xfa\xe7\xd6\x7c\xc0\x7b\x69\xb2\xcc\x89\x3e\x57\xd1\x3f\xff\x65\xc3\xff\xc6\x11\xf7\x54\xab\x95\x6d\x1d\x0d\x48\x68\x43\x8c\x75\x40\x06\x66\x65\xa6\xa3\x43\x4f\xa5\x66\x7b\xe1\x1e\x6d\xb0\xd7\x0c\xd1\x41\xbf\xc4\x19\xcd\xe0\xab\xb2\x6e\x33\x41\xcb\xd4\xfd\x53\x3b\x23\x82\x2e\x90\xf6\xb9\xca\xd9\xcc\x52\x22\xbb\x5d\xf3\x9f\xab\xc8\x6e\xe1\x1b\x70\xa8\x8c\x69\x1b\xfc\xcf\xd6\xdb\x40\x02\x7d\x3e\x41\xb1\xc9\xed\xf2\x3f\x7f\xe2\x20\x7b\xfa\x76\x82\xdb\xdc\x1f\x3a\xe8\x3f\xc7\xf8\x5d\x35\xd7\x91\xaf\xc7\x08\x67\x86\x85\x47\xac\x0c\xa8\x53\x06\xd8\x4d\x61\xe1\x46\xe4\x3b\x09\xda\x14\xa9\x9c\x95\x49\xeb\xb2\xb3\x5f\xc6\xbd\x5d\x76\x0e\x7e\xab\xa6\x6a\xb2\x1a\xed\x6d\x8c\x7d\xbc\xc1\x9e\xd6\x4e\x13\x14\x11\x6a\x13\xc0\xd7\xfd\xc9\x86\xff\x8e\xc6\xb2\x3a\x81\x27\xff\x01\xe8\x46\x79\xea\xe9\x42\x67\x8e\x22\xd5\x9e\x9d\xae\x0e\xab\xde\x9c\xf4\xa6\x3d\x7f\x36\x8e\xd3\x4d\xdf\x3b\x44\x64\x6c\x87\x4f\xa2\x7b\x27\x97\xb1\x3d\xb9\x74\xb0\xe8\xd4\xe3\xc1\x9d\xe2\xcd\xd3\x69\xb6\x0a\xe8\xb0\x0e\xfc\x91\x9b\xdf\xcf\x4a\xb1\x23\x05\x00\xa6\xe8\x29\x00\x90\x03\xf1\xad\x8e\xd8\xa4\x6d\x44\x69\x99\xc3\xef\x6e\x90\x27\x53\x85\x27\xba\x61\xde\xe5\xa1\x37\xe0\x05\xa4\xbd\x84\x38\x14\xff\xa4\x58\xf8\xdb\x3c\xce\x3d\xf5\x6d\xf1\x5e\x22\x12\x15\x8d\x20\xea\x9a\x30\x2b\x39\xd6\x77\x41\xfc\xb9\x5e\x9a\x98\x87\x52\xec\xa7\x1c\xf6\x4f\x3b\x41\x14\xf3\x50\x14\xea\xfe\x48\x6c\xfc\x06\x67\xa2\x5e\x54\xb8\x6f\x56\xfc\xbc\x8f\x3a\x2b\x16\x29\x2d\xbe\xa0\xb3\xf7\xad\xb2\x3e\xb8\xd8\x94\x5f\x15\x45\x2d\x08\x82\x8c\x22\xa9\xb5\x88\x62\xbf\xcb\x61\x66\x3f\x71\x5f\x30\x46\xed\x70\x2c\x39\x98\x7f\xcf\xb2\xa5\x8c\x24\x2a\xb0\x96\x53\x19\x7a\x2f\x75\x21\x00\x01\x51\x5f\x68\xb1\x6f\x61\xaa\xf7\xba\x0f\xfa\xf3\x26\x69\x87\xd8\x19\x88\xe7\x3c\x44\x14\x34\xbd\x9c\x73\x35\x83\xf3\xa4\xb5\x19\xad\x47\x7d\x1e\x46\x01\x40\x36\xc4\xaf\x19\xf1\x78\xd5\x8c\xf8\x1a\xe0\x85\x8b\x92\xb5\x79\x1e\x84\x71\x94\x70\xc9\xa2\xfc\x2e\x6c\xa5\x5b\x4f\xf8\xaf\x77\xa4\xa0\x9f\x17\xd2\x43\xe2\xe3\x26\x91\xb2\x4c\x44\x95\x33\xea\x00\xcb\x47\x94\xe7\x3c\x37\x58\x10\x80\x83\x1c\xa6\x4f\xd0\x10\x0e\xf2\x34\x69\x79\xde\xd9\x08\x20\x9c\xd0\xda\xc6\x48\xd2\xb4\xc8\x65\x42\x48\x2a\xea\x20\x44\xc2\x6f\x34\xda\xcf\x39\xec\x6b\xf3\xb2\xdd\xe6\x79\xde\x29\xe3\xa1\x2e\xf7\x98\xea\x72\x2f\xaf\x74\x39\xfd\xd2\x57\xba\xdb\x1d\xb7\x4b\xf0\x98\xc3\xf6\xe5\x65\xde\xe7\x49\xe8\xbe\xce\xf1\x5f\x86\x88\xac\x4e\x1c\xac\x79\x05\x8f\x63\x75\x7e\x2b\x31\xf0\xc2\xfe\xc1\xc7\xc5\xc2\x8f\xc7\xac\xe6\x44\x04\xd4\xc1\x61\xca\xf1\x44\x43\x9d\x91\x04\x31\x12\x5a\x43\x8b\x71\x83\x25\x22\x6f\x79\x56\xf6\x6a\x62\xb5\x3e\x76\x9d\x35\xa3\x4b\xd7\xf1\xc2\xf2\xdc\xf2\x82\x15\x52\xf8\x96\xeb\xfc\xd7\x98\x82\xa8\x41\xe2\xc1\x43\xa2\xd2\xd6\x5b\xf4\x37\x85\x9f\xe9\x73\x1c\x40\x76\xa9\xa6\x16\xd9\x9c\xd9\xcc\xa2\x82\x7b\x69\xd2\xe6\xd5\xb7\x68\x87\x0c\xd1\x7b\x19\xc0\x1c\x7b\x41\x12\xac\x21\xbe\x53\xd4\x3c\x39\xb4\xe1\xf4\x6e\x95\x83\x8a\xc5\x65\xe7\x29\x48\x0d\xba\x98\x66\x45\x10\x5f\x76\x26\xa2\x47\x92\xcb\xce\x44\x5c\x26\xd6\x6a\xf0\xbb\x07\xd9\xfb\x1c\xb6\xaf\x0f\x4f\xe5\xee\x0f\x3b\xfe\xcb\x9d\x08\xbe\xbe\x82\xcc\xa2\xf8\xbe\x77\x26\xca\x09\xa3\x8c\x8f\xc2\x71\x33\xa2\x61\x45\x89\x17\x81\x73\xb0\xff\x7c\x61\x02\x9e\x84\xcc\x46\x1d\x7d\x48\x24\xf6\x7d\x44\x53\x18\x24\x8a\x9b\xf3\x50\x31\xe8\x47\x6d\x58\xbd\x56\xe6\x16\xe9\xd8\xe9\xf6\x5b\x8f\x40\x91\x8e\x1f\xbb\xf5\xc8\xe1\x71\xc0\x9f\x75\x23\x4e\xef\xf9\xfe\x83\x2a\x30\x0f\xf0\xb5\x9b\x57\x18\xb5\x37\xaa\x37\xbc\xdd\x61\x56\x75\xba\xaf\x15\xbd\xb6\xa6\x9e\xb0\x8a\x16\xbf\xa2\x55\xa4\xeb\xe4\x21\xf6\xb4\x76\x37\xe8\xcf\x96\x45\x57\x99\x3a\xee\xac\x7f\x5c\xb2\x44\xca\x8e\x84\x19\x57\x8f\x78\x73\xf7\xcf\x2e\x7a\x41\x59\x74\x91\x67\x55\x0c\x11\xab\xf8\x27\x98\xe8\x37\xee\xb4\x9c\x58\xfe\x99\x55\xf2\x33\x65\x42\x93\x8c\x3d\xca\x3f\xe9\xb0\xeb\x60\x21\x09\x8a\x34\x83\x88\xd1\x8f\x38\xfe\xfb\x9d\xb9\x32\x2f\xd2\x1e\xe5\x61\x41\xde\x07\xf1\x3a\xf0\xee\x5b\xaf\x54\x48\x47\xc5\x12\x1c\xe5\xed\x3c\x5a\x50\x38\xb1\x3c\xea\x95\x71\x11\x24\x3c\x2d\x73\x61\x84\x8b\xf5\x19\xd3\xd6\x58\xb2\xbb\x88\x25\x17\xbb\xee\xdd\x27\xef\xa2\x80\x09\xd0\x31\x1f\x5a\xa2\x0c\xa1\x86\x84\xb7\x87\x54\x11\x8e\x30\x31\x94\xdc\xc3\xfe\xd7\x51\xf9\xf1\x6b\x0f\xaa\xe3\x66\x28\x89\xf9\x46\xc2\xae\xb7\x33\xed\x7e\xb3\x7f\x5e\x96\x5f\xe6\x11\x4a\x0b\x4b\x66\x99\x63\xf4\x11\x3e\xa1\xc8\x54\xec\x4e\x3a\x45\x5d\x64\xca\x3b\x54\xb4\xfb\x76\x37\xf8\xd7\xec\x00\xf2\x7d\x2c\xf1\x8e\x9b\xb1\x5b\xb6\x3c\x10\x3b\x93\xb6\x83\xb8\x2a\x17\x7b\x07\xf4\x0a\xa4\x15\x41\xb2\x7f\xcc\x0f\x16\x1a\xe4\x50\x55\xe3\xd9\x7d\x87\x2d\xb1\x1b\x64\x3f\x5c\x46\xc6\x27\xf7\x59\xfe\xd1\xfa\x5e\x48\x0f\x6c\xd9\x07\x7f\xa2\xc1\xf6\x76\x72\xb1\x9d\x77\xdf\xd9\xf0\xdf\xdc\x38\xad\x34\x5a\x55\xb0\xb3\x11\xc9\x04\x15\x39\x48\x4b\x6f\x33\x48\x0a\x15\xb9\xd4\xf2\x56\xa2\xfe\x49\xef\x54\xa2\x85\x21\x0b\x22\x33\x36\x93\x8a\x4c\xa7\x04\xb9\xfb\xe0\xbc\x98\x62\x61\x92\x35\x45\x76\x78\x0a\x9d\x45\xf9\x49\xcf\xe7\x97\x8a\x13\x7e\xd3\xf3\x2f\x75\x72\xf1\x4f\x52\x74\x72\xbf\xe5\x2d\xe8\xe3\x70\xb0\x6d\xe9\x58\x51\xd8\x1d\xf0\x82\x98\x04\x2c\x49\x81\x2b\x8c\x75\x96\x01\xce\xd0\xd1\xcc\xce\xf0\xb1\x46\x2d\x23\x35\xb6\x36\x30\xbd\xc8\x93\x2b\xf7\x4d\x0d\xff\x59\x35\xd7\xe9\x90\x0d\xfa\xa4\xf6\x91\xc0\xde\x95\x88\x90\xb5\xdf\xe3\xb2\x73\x00\xae\x2e\x06\x45\xd7\x8e\x1e\x77\x58\xd7\x72\xb9\x3c\xd7\x3f\xfb\x90\xf6\x21\x17\xb4\xdb\xeb\x05\xf0\xe7\x69\x99\x86\x68\x0b\xb1\x30\x16\x1c\x04\x85\x91\xfd\x28\xed\x34\xe5\x0c\x09\x63\xc1\xdf\x38\x6a\x8b\x42\x2e\x33\x9d\x0b\xf7\xb4\x7f\x07\xa4\x44\x5f\xc1\x4c\x83\x47\x55\x94\x4a\xc5\xa3\xab\x49\xc6\x90\x5c\xb4\x12\x7d\xd3\x24\x3b\x36\xfa\xf4\x1d\x8e\x83\x2f\xe4\x3c\xab\x9e\xbf\x7f\x6e\xc2\x7f\xfe\xa8\x9b\xd7\xf0\x04\xfe\xcf\x1b\xec\x6f\x1d\xb6\x17\x30\x80\xb9\xfb\xd7\x8e\xff\xb8\x83\x7f\x2b\x07\x1c\x01\x3b\x3c\xba\x9c\x76\xbc\x32\x0a\xed\x03\x77\x8c\x0c\x5a\xe8\xe0\x48\x02\x47\x16\x98\xa1\x45\x4a\x8b\xab\x0a\x0e\x28\xa3\x10\x8f\x5e\xc5\xc0\x89\x07\xfa\x06\xa4\xae\xe1\x3d\x10\xf6\x8f\xf4\xcc\xa2\x84\x3c\x31\x04\xf8\xec\xa3\x75\x6b\xed\x3f\xce\x8e\x8e\x39\xd7\xaf\x34\xc5\xc2\xfc\x92\xf8\x28\x5b\x27\x04\x42\xdb\x7f\xe8\x8a\x10\x08\xaa\xd5\x6c\x39\x89\x7a\x2c\xc2\x1b\xbe\x6a\xec\x59\xcc\xb0\x82\xae\xfb\x79\xd7\xff\xb4\x2b\x7f\xe1\x96\xbb\x13\x5d\xe2\xe1\x34\x3a\xbb\x6a\xbc\x8b\x72\x95\xf5\x16\xa4\x6e\x37\x10\x8a\x25\x1b\x3c\x01\xa7\x58\x2f\xc8\xf2\x2e\x28\x86\xcd\x94\x89\xfe\x21\xba\xf8\xb3\x97\xcf\x9f\x83\x1a\x7f\xce\xec\xd9\x33\x4d\x08\x40\x0b\xa5\x56\x53\xea\x2d\x63\x0c\xd6\x61\x78\x62\x41\x18\x42\xe2\x6f\x30\x16\xd2\x2c\x27\xe6\x79\x3b\x5e\x09\x2d\x31\x2f\xca\x4f\x32\x76\xd7\x23\x54\x8a\xbb\x3d\xfa\xdf\xc9\x93\xcf\xf4\xee\xca\xa3\xb5\x84\x87\xe7\x20\xcf\x77\xdf\x05\x3a\x3a\x97\xee\x66\x9e\x77\x48\x33\xbc\xcb\xab\xb2\x56\x49\x08\x44\x63\xab\x7c\x3c\x28\x88\x12\xef\xae\x90\xb7\xa3\x5e\x10\x2f\x2f\xdc\xdd\x3a\xcc\xee\x0a\xa3\xb5\xa8\x50\xdf\xa3\x4f\x1e\xf1\x5e\xe4\x1d\xf5\x5e\xe4\xb5\x5a\x2d\xef\x45\xde\x1d\x1e\x3e\x95\xdf\x6d\x3f\x25\xdf\x7d\x91\xfc\x4b\x3d\x76\x17\x56\x70\xed\xf3\xb9\x7e\x21\xbf\xbb\x55\x77\x4d\x7c\x58\x27\x25\x4a\x6f\xe6\x0f\x92\xf2\x6f\xf6\xbd\x17\x79\xfe\xb4\x5f\xa9\x1d\xf5\x29\x99\x81\x17\x51\x02\xea\x82\xaa\x29\x3b\x6b\x88\x39\x5e\x5e\xc0\x8c\x60\x0d\x9d\xba\x84\xe2\xf6\xe6\x35\xf1\x84\xf1\xb0\x91\xc4\x03\x91\xf7\x22\xef\xac\xf8\xcf\x7d\xe2\x3f\x2b\xe2\x3f\x8b\xe2\x3f\xa7\x22\xd1\x56\x0b\xe8\x8f\x26\x9b\x78\x19\x57\x49\x31\x57\x24\x51\x91\xdf\xa9\x63\x2e\x4e\xce\xcc\xf4\xbb\x83\x3c\x6a\xe7\xad\x44\x98\x0a\x6b\xe9\xc6\x4c\xbb\x2c\x67\x2e\x88\xe7\x66\xf0\xcb\xad\x6e\xd1\x8b\x45\xdb\xe9\x3c\xe9\x7c\xf4\x44\xc5\x88\xda\x59\x17\xf9\x11\xd9\x11\xb9\x11\x99\x11\x79\xb1\xbb\xcd\xd1\x23\xc7\x4e\x78\xcf\xf4\x8e\x3e\x10\x41\x4c\xe3\xd1\x23\x47\x8e\x88\x9f\xeb\x77\x7a\xc2\xec\x0a\x93\xa9\x42\x12\x6e\xc2\x3e\x2e\xe8\x47\x85\xea\xb9\x2d\x9d\x01\x5d\x51\xd0\x36\x7c\xa8\x55\x5e\xe4\xf9\xa7\xaa\x17\x19\x3b\x97\x7a\xbd\xa0\x80\x63\x21\x38\xf7\x93\x4a\x0c\xdd\x8c\x03\x73\x27\xa4\x09\x03\x24\x97\x14\x63\x4d\x2f\x49\x3d\x39\x4a\xc8\x9f\x2f\x49\xf3\xe5\xb0\x26\xce\x4e\xb2\x00\x8e\x3d\xef\xd6\xe3\xd3\x47\x45\xc7\xef\x05\x6b\x49\x54\x94\x21\x17\x89\x20\x59\x61\x44\xb1\x59\x3d\x84\xb9\x05\x89\x77\xdc\xa3\x32\x79\xe8\xb0\x6a\x79\x98\xdd\xdc\x8b\xc5\x7e\x2d\x53\x04\xa3\xfd\x8c\xb7\xa3\x9c\x1b\x81\xc9\xfd\x3e\x0f\x3d\x64\x40\x03\xf1\xec\xb2\xdf\xf2\x0e\x9d\x6a\xad\xb5\x4e\x7a\x47\x5a\x47\x7b\x74\xf6\xa5\x6e\x82\x17\xa9\xd7\x3a\x8c\x9e\x02\x39\x6e\x2f\x15\xa8\xbc\x6d\x01\xf7\xc4\xde\x66\x93\x2b\xb8\xb7\xce\x49\xde\x0b\xc0\xae\xa7\x1a\x89\x40\x30\x16\xe8\x14\x03\xcf\x9c\x11\xfb\x41\x96\x6b\xca\x78\x9c\x69\x9b\xca\xf7\x99\xf1\x1e\x87\x8a\x83\xda\xa7\x3d\x20\x0e\x13\xac\xa1\x10\x8f\x4f\xe0\x61\x79\x8c\x08\x0b\x10\xae\xb0\x6b\x41\x94\x28\x6f\x2a\x9e\xa5\xc2\x04\xc7\xc3\x16\x63\xf7\x22\x86\x50\x5e\x83\x0f\xab\xac\xa9\x78\xdc\x12\xf6\x0f\x7e\x3b\x48\xd2\x04\x04\x2a\x44\xab\xfb\xe4\x45\x31\x84\xb1\x65\x4f\x9b\xa1\xec\x69\x08\xd2\xb7\x96\x20\xbf\x50\x02\x69\x7f\x98\x6e\x26\xde\x21\x72\x34\xda\x4c\x91\x51\x22\x56\xfe\x1c\x98\x62\x43\x4e\x7f\x47\x89\x77\x56\x64\x29\xcf\x83\xc3\x5e\x5e\x02\x93\x61\x50\x9c\x64\x9e\x17\xb4\xbc\x73\x29\x35\x36\x9d\x66\xc7\x29\xc0\x0b\x56\xe1\x4e\x27\x0b\xda\xd2\xcf\x05\x33\x96\xca\x12\xef\x89\xdd\x56\xc8\x3c\xaf\x8d\xc6\xac\xea\xd1\x87\x44\xcb\x41\xfe\x0f\xc3\x72\x45\x7d\x0b\x8e\x7b\xe5\x51\x31\xae\x14\xd1\x9a\x8e\x7c\x4f\x31\x3d\x53\x25\x84\xfa\x7b\x94\x7b\x09\x40\xd7\x36\x78\x8b\x31\xb5\x93\x66\x9e\x77\xb4\x75\x8b\x8e\xb4\x57\xad\x22\x3e\xe4\x1f\xbd\xe5\xc8\x91\x9e\x8f\xcf\xdc\x17\x8d\x7e\xea\xf8\xad\x67\x23\x5f\x8c\xd5\xc2\xd8\xe8\x3f\x62\x35\xe0\xb9\x53\x0f\x9d\x5a\x52\x21\x8c\x09\xba\xd1\xb9\x96\x4a\x59\x15\xdb\x98\x4e\x9c\x06\x24\x8d\x29\x56\x65\xb9\x02\xaf\xd0\xf9\xbb\x48\x75\xb3\x9b\xc6\x92\x93\x54\x9e\x0d\xf2\x4b\xfc\xff\x67\xef\x4f\xc0\x2c\xc9\xca\x3a\x61\xfc\x89\x9b\xb5\x64\x9d\xea\x6e\x24\x5c\x60\xfe\x3a\x7a\x26\x7a\xb0\x2a\x9b\x9b\x37\xab\x7a\xa1\xbb\xab\x37\xb2\x6b\xe9\x4a\xa8\x25\xc9\xcc\xa2\x59\x06\xc8\xc8\x7b\xcf\xcd\x0c\x2a\x6e\xc4\xed\x88\xb8\x99\x75\x81\x1e\xa1\x1b\x1a\x94\x66\xdf\xec\x62\x67\x00\xb5\x05\x54\xe4\x8f\x6c\x32\x80\x08\x7e\xa0\x80\x38\x7e\x2a\xb2\xe9\xc0\x08\x33\xc8\xf8\x09\x8a\xb6\xe0\xf7\x3d\xe7\x7d\xdf\xb3\xc5\x8d\x7b\x33\xb3\x96\x96\xd1\xf4\x91\xae\xbc\xb1\x9c\x38\xeb\x7b\xde\xf3\x2e\xbf\x5f\x26\xd7\x59\x43\x56\x21\x99\x34\x13\x64\x55\xa5\x0f\xc4\x31\xcf\x0b\x4c\x54\xcf\x72\xe8\x44\xa0\xf3\x46\x20\xa4\x3e\x68\x69\x6b\x02\xad\x18\x1d\x41\x60\xc2\xaa\xb5\x99\x98\xa4\x61\xa2\x05\x17\x65\xdc\x9d\x83\x0d\xbe\x77\x3e\xe5\x61\xbc\x16\xf6\x41\x02\x95\x6e\xd7\x71\xb6\x49\x41\xd9\x8a\xda\xed\xc6\x84\xdc\xe2\xa3\xdc\xec\xea\xd0\x27\x0e\x97\x7e\x84\x8f\x46\xcd\x5e\x0c\x07\x2a\x5a\x50\xb9\x1a\xce\x5c\xf3\xaf\x48\x7d\x1d\xce\x48\x29\x70\xb3\x60\x90\x30\xe8\xd7\x61\xcc\x57\xc2\xa4\x05\x4a\x49\x33\x6d\xe9\x38\xdf\x95\xb4\x2b\xb4\x5f\x5e\x29\x65\x04\xb4\xa1\x50\x36\xd2\x0c\xe3\x16\xe3\x1c\xbf\x4d\xda\x12\xf5\xbb\x7e\x2c\x1c\x38\xaf\xff\xc9\x98\x83\xba\x34\x48\xf5\x7a\x65\xe3\x30\x81\x58\x1c\x17\x45\x16\x35\x11\x96\xcf\x7f\xe3\x58\x90\x54\xdd\x70\x00\x18\x84\x72\x1e\x18\x94\xc9\x90\x2f\xc7\xe9\x52\x18\xf3\x0e\xbc\x84\x26\xc9\x01\xe0\x53\x27\xe5\x53\x1f\x9e\x76\xe0\x3b\x67\xbd\x9d\x54\xac\xa3\xd3\xbf\xa8\xc6\x9e\xeb\x31\x75\xcb\xef\xb3\x9b\x37\x41\x68\x7b\x65\x03\x1b\x01\xa1\xc4\x84\x3c\x78\xad\xaa\xbc\x9b\x38\xe3\xb4\x48\x59\x43\x96\xa3\x55\x91\x50\x9b\xd8\xdd\x1e\xa3\xaa\xfa\xfd\x51\xe4\xaf\x43\x6b\x31\x03\x94\x3e\xed\x48\x64\xc1\x75\xd4\x4f\x91\xba\x44\x20\xb2\x68\x67\xa0\x9b\x4b\x7d\x8c\x12\x02\xb6\x07\x15\x69\xf9\x92\x71\x5b\xe7\xd6\x47\xdb\x23\xb1\x38\x53\xc6\x1e\x23\x63\xed\x97\x76\x06\x77\x7b\xc3\xef\xbb\xb9\xff\xcb\x22\x81\x74\x20\x83\x19\xa6\xac\x0b\x96\x4b\x1b\x57\x0b\x68\xe3\x78\x2a\x9e\xd2\x08\x2a\x3a\xda\x43\x9c\x11\x2a\x78\xbc\x1b\xf7\x96\xa3\x44\x8e\x74\x8b\xc2\x0a\xed\x33\xf2\x0e\x76\x92\xd1\x0d\xff\x70\x70\xdd\x21\x0d\x37\x51\x8e\x92\x22\x20\x0a\x5a\x86\x38\x44\x06\x2f\xcd\x9e\xfd\x1f\xf7\xb4\xd9\xe4\xfd\x5e\xf0\xab\x5e\xd9\x6c\x62\x4c\x23\xc7\x29\x5f\x3c\x1c\xb0\x87\x6c\xdc\x18\xd2\x18\x66\x06\x59\xb0\x38\x99\xac\xe2\x5b\xc0\xe0\x9e\xf3\x34\xe1\x72\x54\x1e\x4f\x4c\x41\xcd\x2c\xea\xba\xc7\xab\x93\x6c\x27\x9d\x84\xfd\x43\xc1\x1e\xe5\xa3\x39\xc0\x31\xe7\xb5\x99\x76\x3a\x72\x66\xa8\xc3\x72\x04\x31\xc2\x23\x73\x9d\xee\xf2\x2c\xfb\xf1\x6a\xb0\x62\x8a\x1c\x30\x05\xf3\xbd\xc6\x3e\x3f\xd1\xe0\xe7\x67\x69\x76\x6c\x5a\x9f\xa9\xd9\x96\xba\x8f\x6c\x84\xe8\x74\x5e\x3d\x4e\x56\xba\x17\xd6\x4c\xcd\xf5\x3d\x4c\xb7\xa7\x47\x34\x22\x3a\x5a\xf2\x28\x00\x83\x56\x3c\x0c\x9f\x00\xfa\xd9\x55\x17\xaa\x04\x08\xb9\x72\x1d\x9e\x82\x13\x97\x86\x46\x31\x68\xda\xa7\x36\xd9\xe9\x49\x5a\xfa\x8a\x6d\xbd\xb5\x98\x1f\x2b\x2a\x92\x5b\xca\x2c\x70\x05\xc3\x43\x75\xc8\xbf\xc0\xbf\xd1\x72\x41\x10\x28\xd5\xb5\x62\x3f\x60\xec\xdf\x57\x04\xce\xa3\x83\x1b\x62\xe6\xff\x9c\x05\x6f\xf6\xcc\x6f\x0a\x53\x77\x1a\xee\x32\xc4\x86\x0a\x10\x2f\x03\xd4\x61\xb9\x0d\x6b\x4f\x93\x4a\xc9\x1c\x4c\x75\x5e\x5b\x49\x75\xd0\xba\x05\x6e\xc1\x35\x11\xab\x81\x3e\xac\x78\xac\x71\xd6\xdb\xbe\x2a\xb2\x25\x37\x80\xf2\x4d\xbb\x90\x7c\x9b\x84\x0f\x00\xac\xf8\xaf\xf6\x82\x67\xcc\xd9\x57\x40\x35\x4b\x0c\x6a\xf3\xda\x4a\x54\x98\x78\x66\xf8\xac\x51\x88\xca\xdf\xe5\x7c\x3a\xa1\xe1\xcc\x41\xf8\x6a\x0d\x56\xac\x8a\xac\x5f\x40\xe0\x5d\x94\xeb\xa4\xa0\x11\xfe\x99\x7b\x3c\xb6\x4b\x87\x12\xf9\xfd\xe0\x29\xaa\x96\x25\xd4\x33\xfd\x0c\x05\x55\x0d\xd4\x48\xbd\x37\x0d\x2a\xbf\x91\xcf\xf0\x93\xde\x1d\x55\x91\xf7\x78\x0c\x3b\xd3\xbf\xdf\x0b\x5e\xe4\x3d\x5e\xfe\xe9\x56\x01\x2f\x61\x22\xad\xf2\x1d\x4e\x1f\x3b\x46\x0b\x1a\x3f\xf1\x58\x40\xf5\x94\x42\x66\xba\xc0\xd8\x20\x31\x27\xe4\x17\x9a\x28\x72\x54\x3a\x87\x89\x62\xcb\x00\x7e\x18\x0a\xaf\xa8\x3a\x84\x0d\x8d\xaa\xf6\x77\x3c\xb6\x2b\xec\x46\xb7\x61\x56\xfd\xd7\xbd\xe0\xf7\x3c\x15\x1e\x94\x57\x6d\x09\x3a\xac\xd7\x85\x78\xc1\xa4\x3e\xd5\x4d\x5c\xae\x41\x1d\x72\x39\x3d\x3b\xc3\x89\x9c\x52\x2e\x2d\x2b\x11\x4a\xea\x27\x78\x40\x50\x11\x56\x56\x9e\x15\x51\x4e\x63\x68\x56\xaf\x23\x77\x01\x20\xd7\xd5\xc3\x9b\xc0\xfb\xba\x74\x73\xda\x59\x7f\xd6\x7c\x68\x8c\x3d\x24\x49\x13\xd5\xeb\xa7\xe6\x8e\xe5\xfe\x2f\x8f\x05\x2f\x1c\x3b\xe1\x5e\x54\xb0\x36\x30\x7e\xdd\x30\x2b\xa4\x6e\xd9\xcb\x54\xc2\x50\x08\x90\x02\x0e\x09\x19\x9a\xb3\x70\x4a\x5d\x41\x50\xf2\x58\x1f\x5c\xd4\x98\x5e\x67\x12\x08\xeb\xbc\x1d\xc9\xf5\x93\x17\xa2\xab\xf4\x54\xe0\x97\x9b\x8f\xa4\x50\x4d\xd2\x64\x52\xab\x01\x50\x23\x95\x30\xa7\x57\xb6\x4a\xcc\x6d\x2b\x38\x75\x9d\xc1\x17\x35\x43\x05\x1c\xe5\x64\xbc\x58\x64\x82\x74\xe6\xb5\x6e\xdf\x1a\xc1\x49\xb0\xc1\xe7\x20\xb3\xd3\x82\x23\x32\x93\x76\x76\xc6\x1a\x87\xbd\x70\x22\x94\xc7\xa1\x6e\xda\xca\x31\xb0\x89\x44\x69\x30\x21\x7f\x95\xdb\x40\x19\xa2\xe6\xbd\xa9\xb0\x1b\x05\x13\x75\x0e\x1d\x04\xa1\x75\x69\x31\x12\xa0\xe5\x4f\x77\x3b\xce\x06\x93\x0a\xd1\xc0\x4d\x70\x5a\x43\xbc\xf9\xef\xdc\x1d\xbc\xc6\x2b\x5f\xe5\xcd\xb0\x5b\xf4\x32\x52\x01\x23\xe4\x3f\x94\x5a\x3f\xe1\xaa\x65\x0a\x20\xcf\x35\xd9\x2b\xa7\x4f\x3a\xa5\x2d\x87\xe6\x26\x90\x35\x30\x36\xf0\x29\xca\xa5\xa1\x71\x4b\x26\xcd\xb8\x35\xce\x7a\x80\x60\xee\x48\xdf\x57\xef\xda\x0a\x1a\xdd\x0a\x1a\xbd\x58\xf9\x2e\x1f\xb6\xf3\x5d\x7e\xe3\xbc\xa1\x45\xba\x25\x68\x91\x8b\x0f\x2c\xf2\x56\x85\xfa\xff\x5a\x6f\x04\xd3\xcd\x08\x81\x00\x51\x64\x4f\x1b\x09\xfd\x8f\x52\x60\x8a\x44\x00\x2d\x7a\xc5\x07\x50\xc1\x48\x67\x9d\xb0\xe9\x88\xc2\x3e\x67\xf0\xfa\x7f\xd7\x63\x07\xce\xa9\xa2\x78\x76\xbe\xc7\x9b\x77\x58\xf3\x06\xe4\x8b\x0a\xcc\x1f\xac\x97\x40\x23\x14\x01\x58\xaa\x79\x3f\x20\xe3\x34\xf2\x22\xd1\xbf\xc0\xab\x65\xb8\xcd\xc6\x03\x5e\x6b\xfd\x78\xe3\x69\xff\x96\x21\x50\x04\xa5\x9c\x22\x15\x89\x5c\x6e\x0d\x63\x9f\xdb\xcd\xea\xc3\xa6\x61\xd6\x4b\x8a\xa8\x23\x1a\x73\xe1\xda\x61\x85\xc1\xe7\xbf\x71\x77\xf0\x7e\x66\x5f\xd1\x7c\x1b\x40\xd1\x18\xb7\x2c\xc4\x58\xb9\xc1\xaa\xa6\xe9\xcc\x80\x06\x63\x0b\xca\xce\x14\xe5\x75\x34\x43\x69\x66\x63\xd0\xa2\x57\xc2\x9c\x3b\x9f\x08\x73\x20\xe8\x41\x37\x7e\xc2\xfb\x69\x2f\xd3\x05\xd7\x6d\xa9\x0c\x11\xd0\x28\x29\x4f\xd2\x59\x85\x1e\xd7\xc2\x14\x9f\x69\xf0\x27\xa6\x3d\x34\x3b\x25\x82\x72\x82\x01\x5f\x54\x64\xf8\xfc\x6a\x98\x41\xcc\x29\x9d\x45\x60\x81\x37\x18\x9b\x9a\xe2\x33\xaa\xa4\x6e\xd8\x3c\x1d\x2e\x8b\x03\x58\xaf\xe3\xfd\xe9\xd9\x19\xfa\x28\x45\x62\x3f\x93\xed\x52\x7d\x28\x8f\xea\x72\x0d\xf3\xc5\xa7\xe7\x69\x72\x20\xa8\x47\x49\x1c\x25\x22\x58\x64\xbb\x8e\xf7\x67\xf1\x1b\xea\x59\x2a\x84\x9e\xec\xd0\xed\x60\x91\xdd\x89\x5f\xc2\xdf\xd3\xd6\x57\xa6\xf1\xb4\xa8\x44\x30\xbd\x19\xe2\x55\xf9\x22\x54\x5c\x99\xbd\x2e\x5a\xc5\x9d\x31\xbb\xe0\xd5\x3f\x89\xda\xda\x5a\x94\x51\x4a\x1b\x78\x3f\x4d\x28\x75\x9e\x76\x04\x1e\x65\xd0\x9b\xbd\x12\xe5\x07\x64\xe9\x81\x9c\xfb\xc1\x81\xc0\x6a\x67\x50\x67\xbb\x02\xb3\xe7\x07\x07\x82\xd5\xfd\x70\x4d\xd7\x16\xde\xd4\xaf\x52\x95\xe5\x23\xbb\x74\xbd\x0e\x04\xed\x34\x95\x97\xee\xac\xcb\x1a\xce\xa7\x7c\x4d\x2a\xa9\x2b\x61\xb7\x2b\x92\xfc\x16\x7e\x48\x80\x31\x14\xb1\x34\x20\xfa\x47\xb6\x4b\x4a\x82\x7e\xd8\x01\xde\x1d\xed\xce\x55\xd9\x44\xca\xd8\x0d\x79\x8c\x90\xc1\xed\x4c\x75\x7b\xa8\xc8\x58\x0d\xe6\x54\x3a\x0f\x84\x6b\xd8\x25\x18\x88\x82\x20\x34\x75\xad\xe4\xf5\x12\x39\xec\x82\x70\x6a\x20\xbe\x1a\x95\x60\x02\xc7\xea\xf6\xf9\x5e\xb4\x6d\x75\x4f\x2f\x4f\xa1\x92\x22\x3b\x67\xc2\xa4\x92\x0f\xac\xa1\x05\x38\x6c\xc2\xe0\xab\x49\xb5\x27\x57\xa6\x16\x80\xc9\x44\x8a\x36\x53\x1a\x6f\xf7\x12\x3a\x5b\xc9\x53\x07\xe0\xe7\xda\xa9\xe3\x58\x4b\x33\xbc\x06\x4a\xc7\x9e\x5c\x75\x5e\xf4\x32\xb0\x72\x44\x85\xa9\x1e\xb8\x56\x9a\xda\x04\x21\x27\x1b\x8a\x02\x59\x88\x7e\x18\x1e\x55\x7d\xb8\x77\xe1\xe4\xa1\x93\x07\xa4\x6a\x80\x2e\xc5\x1c\x68\x8d\x29\x94\xc2\x58\x3b\x50\x9f\xeb\x25\xa7\x93\x74\x2d\x51\x05\xeb\x69\x7f\x8a\xae\xd3\xf3\xe5\xc0\x33\x55\x03\xd1\x6a\x4c\x9c\xf5\xc6\xe6\xc2\x35\x47\x03\x3d\xc9\x8e\x33\x79\xd1\x3f\x42\xe0\x7e\x57\xcd\x85\x6b\xea\x28\x08\xb0\x2e\x71\x1f\xed\x39\xb6\xa3\x5e\x29\x9e\xa4\x63\x3a\xe0\x56\xbb\x58\x63\x30\x37\x03\xcd\xb4\x06\xca\x7a\x4e\xa0\x69\x13\xf2\xd5\xbf\x3e\x1e\x9c\xaa\xbe\x85\xaa\x9d\xd6\xdb\x2c\xfb\x92\x39\x68\x0f\xbe\x39\x3a\xa3\xfd\x25\x5b\x19\xed\x9b\xd5\xb9\x9f\xa5\x32\xda\xf3\x60\xef\x4c\x65\x46\xfb\xc0\x18\xe4\x1b\x67\x2a\x5c\x67\x8a\x6c\x69\xfc\x1b\xd7\xf8\x7f\xd3\xd6\xf8\xdf\x7e\x9e\x19\xee\xcb\x0f\x12\xe5\xc3\x03\x9e\x58\x5f\xd9\xbc\xd5\x7f\xb4\x4e\x6e\x93\x13\xc6\xc6\xba\xaa\x10\x1c\x83\x29\xef\x57\x32\xf6\xbc\xed\x0e\x16\x56\x29\xc2\x6b\x1a\x0d\x37\x47\xd3\xbc\x80\x10\xbf\x3f\xd9\x16\xbc\xc4\x2b\x5d\x74\x44\x03\x38\x2c\xe8\xc0\xd0\x4c\x13\x8c\x7c\xca\xdd\x0c\x15\x05\x0e\x0f\x6e\x5f\xb2\xf9\xda\xa8\x90\x3d\x39\x35\x66\x0a\x03\xaf\xae\x2d\x42\x84\xa7\x8d\xbb\x29\x81\x3e\xb9\x89\x72\xef\x1d\x03\x41\x26\x9f\x9e\x85\x87\x51\x90\x99\xdf\x6a\x95\x3a\xe5\x29\x2b\xad\x5d\x7b\xc3\x5a\x08\x95\xd1\xa6\x68\x15\x54\xbb\x78\xc5\x62\x83\x2f\x64\x61\x04\x4e\xd6\x3c\x0e\xf3\x15\x15\xf3\x97\x45\x9d\x8e\xca\xc0\x29\x61\x94\xdb\x9f\xa5\xf0\x03\xf8\xa8\xbc\x6e\xfb\xe6\xf9\xe2\x54\x3b\x4d\x17\x29\x16\x10\xd9\x00\xf1\x52\x1d\xff\x9d\x5a\x04\x41\x88\x7f\x2f\x85\xd9\xa2\xfb\x86\x06\x94\xc2\xcb\xad\x45\xa9\xe4\x2c\x4e\x89\xa2\x09\x4f\xd9\xeb\xe3\x6e\xdb\x41\xb3\x16\x44\x50\x6d\x07\x17\x1f\x13\xe0\xa0\x34\xab\x87\x72\x93\x21\xae\x5a\x46\x5d\xac\xb2\x06\xc3\x38\xd6\xbd\x89\xa4\x4c\xb2\x7b\xd4\xb7\x5c\x0f\xcd\x7f\xbb\xc4\x0e\xfa\x1c\x95\x0a\x0d\x87\xc1\x43\x08\x58\xea\xbf\xfe\x92\xe0\x9b\x35\xe7\x92\x63\xb0\xb4\x81\xf9\x33\x79\xcc\x2b\x22\x65\x95\x3f\x3e\xfd\x44\x05\x1e\xac\x78\xd5\x31\x3d\xbc\x48\x55\xcc\x9f\xfd\xfa\xa0\xe7\x21\x54\xd8\xf4\x04\xfd\x38\x07\x99\x47\x56\xac\x2e\x57\xe7\x56\x14\xb1\x6a\x99\x80\x4a\x1a\x2a\xdb\x76\x6e\x45\x56\x14\x06\x00\x00\x66\x5f\x04\x94\xb3\x0a\xc8\x18\xdd\x25\x29\xd2\xc5\x6a\x36\x4d\x05\x7d\xa6\xc2\x72\x00\x7a\x40\x97\x4e\xca\x16\xee\xb8\x61\x9e\xeb\x88\x6d\xb0\x3b\xab\xa7\x4a\x41\x81\x51\x02\x93\x16\x42\x17\x10\xc4\xae\x72\xa9\xbd\x65\x17\xfb\xbe\x47\xbb\xd0\x77\xbc\xe0\xeb\x90\x03\x25\x7f\x59\x05\xd3\x91\x5d\x6f\x39\x55\x40\x74\x44\x41\x81\x9d\x35\x47\xe9\x5b\x27\x13\x8c\x6a\x30\xa4\x08\x50\xc9\x56\xd4\x96\xfb\x91\xde\x8a\x8c\xcd\x5c\x7f\x42\xee\x85\x0f\xd2\xce\xf2\x1a\x8f\x60\x36\x5e\xec\x05\xcf\xc6\x14\x30\x70\x9d\x9f\x6f\xf3\xf9\xde\x35\xc3\x78\x8b\xd3\x19\x63\x7c\xa1\x78\xe2\x1f\xc1\x9c\x5a\xe5\x3e\x6b\xb9\x89\x09\xaf\xa9\xb1\x87\x66\xa2\xc8\xfa\xd3\xed\x42\x64\x2a\xfb\xee\x39\x35\x95\x57\xf2\xbf\xbc\x99\x36\x2f\xe1\xb1\xc1\x91\xc1\x4a\xc1\xb3\xc0\xdd\x0c\xcd\x06\x4d\x25\x08\x8d\x29\x32\x70\x36\xce\xcb\x71\x12\x59\x96\x6a\x95\x01\xa3\x36\x6c\xf5\x00\xa6\x73\x01\x66\x85\x84\x87\x31\x46\x3a\x0a\xe5\xf9\x98\x24\xc7\x7a\x9a\xeb\x82\x2c\x7b\xbe\x53\xe6\x4a\xba\x86\xe1\x3b\x45\x0a\xdc\x2a\xba\x96\xe1\x69\x6d\xde\x29\x15\xef\xe6\xca\xbc\xcd\x43\xf0\xed\xd7\x7b\xc1\x4b\xbc\x53\x33\x87\xca\x63\xd4\x18\xda\xf9\x7a\x14\x87\x0d\x40\x79\xd2\x55\x27\x14\xf4\x72\x91\x4d\x2e\xf7\xa2\x96\x98\xd2\x81\x18\x59\x7e\x79\x2f\x72\xe7\xd6\x57\x3d\xb6\x03\x4f\x92\xfe\x1f\x7b\xc1\xdd\x30\xbb\x0e\xe2\xc9\x92\x80\xde\x91\x8e\x97\xdc\xb9\x04\xe0\x5c\x39\xc3\x9c\xa9\xd5\x0e\xa3\x18\xa0\xfe\x4e\xe0\x0e\xe1\xdc\xc5\x01\x54\xd2\x0f\xcb\x14\x2d\x3a\xd1\x3a\xee\x88\x5b\xd9\xa3\x87\x07\xc5\xac\x2b\xbd\xa1\x21\x6c\x89\x6d\x07\xe5\xc5\x7f\x62\x70\x6c\x41\x21\xd2\x5c\x00\xe1\xe1\x98\x7b\x77\xb3\x9f\x1e\x4d\xc9\xec\xbf\x76\x77\x70\x0b\x50\xe9\xaf\xcb\xa2\xbf\x31\x02\xfd\x4f\x33\xf6\xad\x73\x20\xd0\x7f\xdf\xf6\xe0\x5b\x17\x88\x40\x7f\x8b\x3b\x7f\x53\xdc\xf9\x5b\xb4\xf9\xe7\x49\x9b\xff\x67\x9b\xa7\xcd\x7f\xfb\xb6\xe0\x2f\x35\x6d\xfe\xbf\x3c\x63\xfe\x16\x59\xfe\x0f\x2b\x59\x7e\xd9\x74\xd6\x2b\x56\xd2\x4c\x65\x18\xac\xee\x6f\xe8\xa0\x15\xad\x50\xfb\x5f\x1f\x0f\x8a\xc1\xcb\x66\xc3\x84\x11\xb7\xcb\xb1\xb5\xf1\x70\x35\x8c\x62\x1d\x34\x50\x16\x23\xda\x36\x35\x4d\xef\x8b\xcc\x64\xbf\x3a\xbb\xc0\x57\x77\xb2\xef\xd6\xd8\x2e\xed\xeb\xf6\xff\x47\x2d\xf8\xd3\x9a\xe1\x6a\xb2\x02\x4b\xf0\x02\x49\x34\x52\x89\x96\x84\x85\xc2\x2b\xb5\x2c\x03\x09\x5c\x37\xba\x49\xa2\x10\x03\xd4\x4b\x88\x18\x90\xa4\x36\xe1\x6b\x02\xe7\x47\x73\x25\xe7\x41\xc0\xf7\x82\xae\x0f\xe1\xe5\x14\x2d\x48\x69\x61\x90\xa1\x3a\xdf\x83\x56\x4c\x43\x24\xc7\x9c\x58\x8d\xc4\x5a\xf9\x2d\x8c\x5d\x92\x6f\x10\x5c\xe9\x64\xde\x4c\xbb\x4e\x78\x8a\xf5\x02\xc6\x37\x05\x61\x1c\x07\xf0\x8e\xa9\xde\xc0\x5b\x14\x8f\x51\x51\x05\xb9\x28\xe6\x45\xdc\xae\xb8\x65\x6f\xf9\x4f\x90\xc7\x59\x2c\xcd\x3f\x16\xdc\xa2\x66\x02\xc6\x85\x58\x9b\x17\x42\x2d\x58\xe6\x30\xf0\x27\x71\x1e\x5c\x11\x50\x7d\xc3\x38\x76\x94\x89\xa7\xb2\xdd\x79\x6f\x49\x17\x7e\x32\xb8\x75\xde\xfc\xdc\x78\xf9\xaa\xf8\x24\x4d\xdc\x10\xd2\xbb\x3d\xb6\x6d\x55\x64\x4b\xfe\x33\x83\xe4\xf1\x22\x5b\x42\x4d\xc4\xe8\x90\xa6\x2c\x4a\x9d\x5c\xaa\x83\x63\xe5\x00\x5f\x16\x45\x1d\xd6\x74\x9d\xaf\x21\x3c\x2b\x9a\xba\xeb\x24\x60\xea\xbc\x05\x30\x3b\x75\xa9\xdc\x9d\xe9\x8f\x6c\xe5\x3c\xdb\x49\x66\x22\xff\x68\x70\x43\x09\xa5\x4f\x7e\xb8\x94\x4d\x3a\xa7\x35\xe7\x11\x85\x1e\x57\xba\xde\xa1\xe0\x5a\x62\x2d\x31\x05\xde\xa6\x74\xad\x0d\x17\x77\x97\x3a\x79\x3d\x23\xa8\xe4\x44\x76\xf4\xc6\xd2\x5a\x22\xa4\xa5\x60\x59\x14\x01\x3a\x81\x63\x61\x5d\x6e\x29\x3c\xa2\x81\xe9\x5b\xae\xc4\x2f\xee\x64\xd7\x8c\x12\x4d\x15\xf3\x94\x22\xde\xbf\xbc\x23\xf8\x77\x43\xef\x9e\xf5\x76\x52\xbc\x94\x23\x50\xee\xdf\xc1\x9a\x4c\xdd\xf1\x9f\x10\x3c\x86\xcc\x70\x18\x82\x8a\x9b\x6f\x83\x2f\x64\x3d\xa1\xf4\x0a\x12\x25\x6b\xea\xc4\xa6\xa3\xb0\x30\xd8\x36\x55\x84\x8a\xae\x21\xe6\xae\x1a\xdb\xd1\x12\x49\x24\x5a\xfe\xf7\xbc\xe0\x1b\xde\x21\xf8\x1b\x66\x37\x45\x3a\x8e\xfe\x0a\xbe\x5b\x37\xc5\x2b\x0e\xc2\x99\x36\x44\x35\xe9\x74\x58\xc5\x4e\x08\x12\xaa\xa5\xbf\x62\x48\x21\x13\x47\x52\x8b\x0c\x74\xa4\x24\xe5\x69\x37\x4a\x60\xfe\x41\x52\x11\x62\x39\xa4\xe6\x39\xab\x56\x0d\x4e\xb5\x57\x7b\xe9\x92\x00\x93\x96\xac\xbb\xd5\x7d\x40\xe5\xe7\x74\xc2\x97\x6b\xec\x21\x84\xb5\x1f\xa5\xc9\x61\x79\x26\xf5\x3f\x55\x0b\x3e\x54\x3b\xec\x5e\xa4\x18\x50\x3a\x9e\xea\xa0\xd6\x5c\x1f\x89\x79\xda\x84\x28\x7f\xcd\x14\x31\xb8\xf9\x00\x93\x28\xd8\x18\x81\x58\xa2\x88\x32\x11\x1b\x4c\x48\x85\x29\x18\x26\x54\xa0\xec\x2d\x39\x98\x74\xaf\x99\x26\x45\x94\xf4\xe0\xb4\x26\xb2\x4e\x94\x94\x8b\xcf\x55\x2e\x05\xcf\xbb\x11\x9e\xaa\xa2\x02\x01\x18\xc1\xdd\x97\x34\x45\x9d\xcf\xdd\x3a\x7d\x50\x9d\x68\x01\xbe\x19\xbc\x49\x59\xaa\x02\x71\x45\x02\xaa\x6e\x86\x70\xd1\x99\x50\x19\x35\x2a\xb3\x4e\xd6\x09\x68\xd1\xc1\x69\x0f\x07\xcd\x01\x26\x22\x67\xed\x3c\x85\xed\xc0\xe7\xfc\xf9\xe0\x08\x1d\x4d\x9d\x29\x06\xfd\xa1\xf3\x3f\xd6\x56\xfa\x60\x6f\x43\x26\xb0\xb5\x50\x07\xc6\xe2\x02\x4e\x22\x65\x9c\xa2\xe2\x7f\x87\xb1\xfd\xc3\xd2\x23\xf6\x37\x8e\xca\xde\x49\x93\x22\x8c\xa5\xb6\x41\xf7\x44\xe6\xbf\x88\x05\x93\x2e\x99\x09\x98\xf1\x56\xf4\xe3\x78\x0c\xd4\x2f\xb8\xe7\xbe\xaf\x8d\x6f\x79\x65\xfe\x0d\xc5\x61\x7d\x52\xc5\x61\x7d\xd8\x63\x07\x37\x96\x98\x33\x74\xe6\x41\x48\xd6\x1a\x05\x58\xf5\x00\x42\xca\x9a\x65\x17\xb8\x05\xb2\xd2\x93\x61\xd2\x9a\x44\xc9\xd0\x60\xcf\xd2\x91\x5a\x19\x3b\x7c\xbe\x2d\xc1\x98\xad\x09\x95\xda\x54\xcd\x4d\x66\x35\x6e\xcb\xef\xbc\x39\xbf\xf3\x03\xde\xca\xfa\x8e\xc1\xc3\xfe\x41\xe3\x18\x34\xe3\xa6\xfd\x83\x43\x06\xaf\x8c\x86\xf9\x2b\x2e\x0d\x46\x05\xeb\xeb\x21\xcd\x0e\xac\x31\x31\xbf\x5b\x0b\x8e\x0e\x5e\x1e\xa4\x4b\x20\xc4\x3f\xa3\x28\xa3\xf5\x03\xd8\x9e\x10\xf9\xaf\x64\x57\x7b\x6d\x8d\xbd\x6b\x00\x03\xf3\x75\xa3\x16\x5f\x45\x85\x5d\x38\x4c\x5d\xcd\xe0\xd4\xe6\xf0\x30\x07\x1b\xb8\x80\x08\x99\x2e\x72\x25\x5b\x21\x7c\xcc\xc5\x60\x5e\xe3\x63\x5a\x84\xca\x1a\x18\x53\xa0\xba\x8e\xa1\xe3\x25\x90\xcd\x8d\x01\x63\xfe\xb5\xcb\x69\x54\xd1\x74\x62\x39\x81\xe8\x92\xff\x3a\x1e\xec\xb1\x7e\x57\x71\x21\x28\x4e\x9b\xca\x78\x91\xd7\x6d\xc5\x8b\x9c\x07\x03\xc2\xbf\xaf\x8c\x17\x51\x1d\x6e\xdb\x4c\xae\x65\xd7\xb0\xab\x36\x33\xbf\xa9\x90\x2d\x4d\x64\xe3\x9a\xc8\xe7\x6c\x4d\xe4\x77\xce\x33\x3e\xe4\x6e\xef\x22\x71\x4d\x6e\x2e\x78\x64\x71\xfd\x3d\xe2\x26\xff\x06\xbd\x47\x98\x89\xa4\xb7\x08\x4b\x3a\x54\x51\x25\xb0\x3f\xdc\x56\x85\x94\x8c\xf1\x4a\x1a\x66\xf8\xa0\x8a\x00\xf1\xdf\xb2\x2d\x98\x19\xbc\x6c\xed\x0a\xca\x99\x43\x99\xdd\xfa\x59\x0e\x49\x46\x4d\x91\x41\xfe\x1f\xcc\xab\xc6\x59\x0f\xa4\xea\x59\x8f\xf4\x16\x47\x34\xbd\x6f\x8c\xed\x27\xa9\x3b\x11\xfc\x94\x92\xba\xa6\x3c\x1d\x95\xe2\x88\xcf\x97\x79\xcc\x8f\xc3\xbc\x58\xc8\x42\xc8\xd1\x4c\x93\x85\xa8\x23\xfc\x67\x0e\x47\x58\x1e\x31\x1b\xe4\xab\xc1\xa3\x8f\x85\x79\x81\x4e\x55\x34\xe2\xab\x36\x17\xfa\x13\x2a\xfb\x08\xd2\x30\xf1\x98\x26\x0f\xb2\x09\x1c\x9d\x1b\xec\x89\x6c\x67\x47\xe4\x79\xb8\x2c\xfc\x13\xc1\xf4\x34\x5f\xe9\x75\xc2\x04\xc2\x27\xe0\xf0\x47\xf7\xf4\xe1\x13\x58\xd3\xc8\x0b\xa8\x35\x2d\xf3\x31\xa7\xb9\x47\xf4\xf1\xeb\xc6\x60\x0a\x42\x46\xc9\x3b\x68\x10\xf9\xb0\xb6\x7b\x72\x1e\x43\x3b\xaa\xcb\x39\xa6\x55\xc7\x5b\x83\x6b\xdc\x30\x7d\x5d\x44\x5d\x99\xc5\x16\x20\x98\xe4\x08\x9e\xef\x29\x42\xd3\x29\xed\x17\x2e\x65\x8f\x5c\x47\xdf\x50\xc3\x08\x18\xcf\x5f\xb8\x24\xb8\xca\xb9\xa2\x91\xa7\xca\xc9\x0d\xa1\x05\x4b\xdd\x38\xeb\x8d\x17\x55\x78\xcd\x2f\xbc\x84\xbd\xbc\xc6\x1e\xd2\x89\x92\x39\x11\xb6\xfa\xca\x6b\xfe\xcf\x1a\xe6\xf5\x1b\xe0\x85\xed\x44\x49\xd4\xe9\x75\x6c\xb8\x57\x0b\xb4\x16\xdd\x37\x80\x5e\x1c\xf7\x75\xc0\xa9\x99\x7e\xf2\x04\x69\x3b\xd1\xc3\x56\x5f\xe3\x39\x10\xdd\x92\x94\x93\x9a\xb4\x8a\x37\xb3\x30\x5f\x01\x54\x14\x80\x06\x2c\xc8\xf1\x00\x94\x9a\x2d\x01\xd9\x1a\xca\x64\xed\x02\x17\xee\xe3\x7b\xb5\x1f\x64\xc8\x0b\x3c\xcc\x79\x9e\xaa\x68\x7e\xb4\x24\x85\xad\xfe\xc4\x00\x0c\xee\x8f\x65\x14\x47\xe6\x00\xe0\xbe\x5d\xf7\xcc\x4b\x4b\x00\xb8\x69\xdc\xe2\x2b\xf8\xa8\xc1\xbc\x45\x54\x89\x38\x5d\xe3\x52\x87\x5b\x0a\x9b\xa7\x2f\x1a\xf8\xf2\x3e\xb7\x05\x9f\xac\xb1\x71\x05\x66\xe0\x7f\xa0\x76\xfe\xdc\x53\xc1\xdf\x79\xd3\xe4\xc1\xb9\xa3\x27\xb2\x3e\xf0\x88\x92\x5f\x56\xd1\xc4\x22\x74\xac\xce\x45\xb1\x26\x20\x22\x00\x60\x0c\x4f\x94\x20\x79\x84\x19\x56\x8c\xdc\xc3\x2c\x6e\x8a\xc8\x31\x26\xfa\x22\x55\x7c\x6d\x69\xc2\x67\xd3\x16\x57\x33\x79\xd3\x78\x86\xb2\xc6\xab\x91\x58\x9b\x22\x46\xbc\x49\x39\x0b\x27\x29\x4a\x78\x0a\x3f\x32\x75\x39\xfc\x3b\xa9\xc9\xbf\xd8\x73\xc7\x98\x5e\x3c\xfe\xf7\x36\x92\x47\x3f\x9b\xb6\x1c\xfc\xea\x8f\xd5\xa6\x75\x5c\x76\x29\x03\x5c\x79\xb4\xaa\xf0\xac\xd1\xc3\x6c\xd6\x11\x22\x97\x20\x46\x9f\x38\x13\x36\x8b\xb8\x0f\x72\x06\xa2\xe6\x95\x7e\x29\x0b\x4b\x13\x4c\xa9\xb6\xdd\xc8\x96\x73\x55\x35\x66\x0f\xfa\xcf\x34\xe6\x05\x80\xf0\xb8\xef\x62\xde\xbd\xfb\x94\x9d\x77\x3f\x18\x01\xb2\xde\x18\xc8\xae\x8f\xd3\xb0\x95\x4f\x19\x0c\xe6\x7c\x4a\x9e\x8c\x48\x76\x99\xcb\x97\x77\xd3\xd6\xa4\xaa\xac\x5c\x92\xbe\xfa\x71\x9b\x48\x28\x3a\xc7\xff\x65\x0d\xaf\xfd\x72\xef\xd0\xe1\xd9\xb9\xc3\x07\xa7\x17\x0e\x1f\x6a\xf0\x69\xcd\x98\xab\xd6\xa8\xa3\xfa\x69\x8e\xd2\x26\x42\x71\x38\x39\x61\x66\x82\x0d\xa4\x57\x29\x38\x8a\x99\xc2\xa5\xe2\x8f\xfb\xb6\xb5\x53\xf1\xf2\xbb\x4b\xf2\x0d\x1e\xbb\xac\xe7\xb2\x29\xbc\x70\x93\x67\xb9\x21\xcc\x0b\xc1\xa1\xe9\x64\x80\x5d\xa1\xea\xc0\xe9\x08\x65\xeb\xe8\x29\x7f\x35\xd8\xdd\x2e\x0a\xe5\x06\xa9\x23\xfd\xdf\x1f\x0b\xfe\x4b\xad\xea\x8e\x9b\x09\x0f\x4c\x9d\x86\x53\x0f\x84\x1f\xb9\x5e\x89\xb4\x15\x98\x60\xc9\x95\x44\x3c\x39\x14\x54\x74\xe3\x4a\x9a\x17\x37\x4f\xdd\xd8\x0d\x8b\x95\x9b\x6f\xb9\x31\x17\x52\x2f\xec\x86\x59\x71\x33\x9f\xbc\x59\x73\xbe\x62\xd2\x04\xfe\x57\xde\xd4\x1b\x73\x2f\x8b\x2d\x7f\xaf\xfc\xa2\x62\x62\xad\xab\x53\x99\x0a\x74\x2a\x31\x07\xa2\xc4\x52\xd9\xe9\x16\x50\x41\xd8\x2e\x08\x1d\x0c\x94\x85\x3d\x53\x7b\xc8\x4c\xad\x23\xc8\x30\xe5\x66\xcf\x2d\x48\xef\x7c\xf9\x1e\x79\xac\x84\x24\x68\x37\x0d\xc1\x63\xf7\x7a\x0c\x6f\xf8\x77\x79\xc1\xd5\xd3\xa5\x43\x29\xe6\x4d\xd3\x22\xee\x3a\x5e\x59\xdd\x6d\xf6\xf9\xe9\x16\x76\xd3\x70\x7d\x7e\x9d\x31\x9d\x0d\x8b\x15\xf6\x91\x1a\x7b\xc4\x3a\x27\x2e\x04\xc1\xf4\x5f\x5d\x0b\x3a\xf4\xb7\xc1\x8c\x0c\xa5\xb6\x30\xd5\x09\xcf\xd0\xd9\xd6\x81\x02\x85\x43\xdf\x21\xc0\xc4\xee\x66\xa2\x29\x57\xd6\x01\xc8\xc2\x53\xc5\x80\x72\x48\x01\xd2\xc6\x4f\x26\x3b\x5f\x84\xad\xc6\x59\x6f\xac\x13\x25\xf2\xbf\xe1\x19\xa7\x17\xef\xf5\xd8\x41\x26\xaf\xfa\x37\x2a\x71\xb0\x47\x56\x81\x94\x23\x39\x39\x94\x8b\x4c\x7e\xa6\x8e\x9e\xf1\x3c\x5a\x15\xee\x12\x3d\xcc\xe4\x07\xfc\x9b\x55\x21\x13\x9d\x28\x31\xd8\x9e\x16\x0b\xef\xe8\x62\x9e\xb3\x8b\x1d\x58\x07\xaa\x68\x88\x3d\x0a\x4c\x15\x1f\x1b\x0f\x1e\x3b\xe2\x7e\x69\x59\x0d\x33\xd5\x8f\x4e\x7f\xf9\x9f\x3b\xb6\xcc\x19\x9b\xe5\xeb\xf7\x94\x3d\xe3\xc5\x5e\x70\x6d\x25\xa5\xe3\xfa\x83\x61\x2f\xd5\xa3\xec\x08\x3b\xb4\x29\x80\xab\x61\x56\xcc\x2d\xdb\xc7\x86\x6d\x1f\x99\x65\xfa\x68\x9f\x9f\xe5\x63\x8f\x66\x7b\x34\x22\xa2\x82\x0b\xb2\xf1\x80\x77\xc7\xfa\xc6\x89\x13\xfe\xb1\x73\x31\x60\x0f\x58\x2b\xae\xa4\x2c\x97\x7b\x76\x3b\xd0\x74\x4a\x37\x9d\xbe\x7d\xfe\xb0\xdc\xb1\xa2\xe6\xad\x71\xda\x3c\x3d\x5f\xa4\x99\x70\x60\xcc\x3e\xc3\x82\x37\xd7\x6c\xce\x09\x6e\xf0\xcc\xf8\xa1\x28\x3f\x6d\x66\x4c\x94\xf0\xe9\xdb\xe7\x1b\x8c\x4d\xc3\x1f\xfc\xf0\xad\xf3\xc0\x4c\x81\x51\x51\xa0\x74\xa8\x0d\x11\x92\x21\x68\xb7\x0f\xcd\x51\x8f\xc0\xbb\xf4\x3b\x90\x0a\xbd\xa4\xb1\xfb\x00\x50\x53\x96\xfc\x0c\xa9\xe7\x12\x80\x8a\xec\xc6\x58\x1e\x29\xca\x5f\xdd\x28\x01\x86\x7a\xe9\xfc\x28\x30\xc6\xf1\xf5\x99\x43\x8e\x58\x7d\xe9\x38\xfb\xb8\x01\x93\x7f\x7f\x2d\xf8\xd5\x2d\x30\xf9\x6a\x30\xf9\x70\x2d\x17\x38\x11\x97\xe4\x44\x84\xdc\xd4\x12\xc0\xc7\x2e\x00\xdf\x01\x35\xff\xac\x8e\xe3\x7f\x6e\x6d\x01\x59\xe8\xf1\x8e\x9a\x2a\xeb\x74\xe7\x4c\x5b\x81\x85\xd6\x55\x0e\x89\x72\x30\xa8\x87\x64\x07\x5a\xdc\x0d\x76\x97\x1d\x49\x33\x75\x4b\xca\x9b\xa9\xbc\x15\xee\xaf\xc3\x67\xb0\x3f\x88\xb3\x5e\xd7\x09\x60\x42\x83\x06\x9f\x8f\x3a\x51\x1c\x66\x14\xc0\xa6\x8a\x30\xcf\xb5\xd3\x4c\x17\x28\xab\x12\xec\x0b\xe0\x10\x26\x4b\x96\xb3\x39\x16\xe1\x2a\x2a\x93\x94\xca\xd3\xc7\xe3\x71\xc9\x5a\xf1\x35\x3b\x9d\xe9\x4f\xbc\xe0\xf7\xbc\x79\xaa\x56\x50\x64\x3d\x11\x58\x98\xea\x00\x71\x58\x50\xd4\x11\xc1\xc9\xe9\xb2\x4b\x78\x72\x00\x7f\x0f\x05\x8c\xec\xbf\x00\xc2\x57\x82\x8b\x34\x21\xac\x08\x95\xf7\x78\x4c\x2f\x3a\xff\x97\xbc\xe0\x3e\xef\x54\x12\xdd\xd1\x93\xca\xa3\x5a\x54\x16\x9c\x62\xab\x42\x54\xf1\xbd\xd3\x9d\xf0\x19\x69\x62\x2d\xff\xcd\x9f\x60\x37\x3b\x91\x3f\xe1\x9e\xaa\xb4\x20\x7e\x46\x2f\x13\x52\x36\x0c\x81\x93\x7c\xc9\xb6\xe0\x76\xfd\x8c\x83\xf0\x95\x70\xb8\xce\xe1\x86\xdc\x9d\xa3\x26\x09\x3c\x9e\x26\x46\x06\xc0\x71\x44\x6a\x02\x78\x4b\xa1\xda\xa5\x52\x8d\x66\x88\xd5\x74\x02\x28\x75\x77\xe5\x2b\x61\x06\x00\x6f\x8e\x28\x7b\xf1\x18\x3b\x63\xcd\xab\x38\x78\xea\x83\x88\x5e\xf8\x54\x66\x55\xd1\x9f\x0d\x0e\xda\xa1\x6e\x04\xf2\xe7\x82\x91\x61\x9f\xcc\x13\x2f\xee\x74\x13\xd8\xae\x90\xf9\x44\xf6\xc4\x63\x45\xdf\x1e\x94\x17\x7a\xec\x21\xe6\x03\x18\xae\x7a\x26\x38\x5d\x19\x9f\x7a\x8e\x9f\x73\x64\x8c\xda\xcc\x68\x0f\x9b\x4d\x5b\x76\x6d\xfe\x23\x33\x63\xe0\x3f\x2c\x60\xf3\xf2\x07\xd7\x23\x42\x4f\xfd\xd1\x65\xec\xa7\x2a\x26\xd2\x61\xd2\xbf\x72\xff\xdd\x97\x05\x3f\xa8\xe9\x9f\x55\x1e\x4e\xa1\x6f\x62\xce\x82\x42\xb6\x55\x01\x64\xbd\x30\x46\xda\xdf\xa6\x91\x7f\x07\x18\x87\xaa\x1c\xe0\x41\xa7\x9f\xaf\x36\x83\x3a\xe3\x7c\xbe\xb7\x94\x8b\x22\x3f\xc0\x9f\xcc\x38\xe7\xfc\x99\x0c\xc1\xd6\x89\xae\x55\xca\xcc\x27\x3f\x33\x88\xba\xc1\x01\x1e\xec\xdf\xd7\x90\xff\xdf\xd8\x1f\xdc\x59\xe7\xee\xc5\x2b\x1b\x57\x06\x77\x3e\xa5\x4e\x2f\xcf\xa6\x59\x81\x2f\xca\x21\x90\x4f\x85\x72\x7f\x92\xdb\x5b\x70\x80\x5f\xf7\xa8\x6b\xaf\x81\x02\xd4\xcd\x25\xeb\xe6\x55\xfb\xae\xbf\xf3\x29\x50\xcc\x9d\xf5\x0d\x56\xe8\xaa\xc6\x55\x1b\xfe\xf6\xf5\x57\x0d\xfd\xf2\xb5\x8f\xb2\x3e\xfc\x14\x67\x01\x7d\x96\x6d\xe9\xe5\x1b\xd7\xcb\x3f\x62\xfb\x24\x7f\xf3\xbc\xa3\xa3\xb2\x8b\xe4\x94\x1c\x15\x1f\xf5\xae\x6d\x6c\x67\x8e\x0b\xc3\x7f\xcb\xb6\xe0\x2b\x63\x48\x6d\x81\x69\xb9\x71\x6c\xad\x3e\x0d\xac\xa1\x0e\xcd\x71\xcc\xe9\xcd\x86\x99\xb3\x08\x4a\x1a\x87\x4d\xc0\x1e\x01\xa2\x3a\x78\x84\x87\xcd\x66\x9a\xa9\xbc\x05\x59\xd0\xcc\x2c\x41\x7b\x83\x18\x01\xeb\x27\x66\xf0\x29\xda\x6c\xb0\xf4\xe9\xc4\x08\xe0\xfa\xaa\x53\xba\x69\x5b\x39\x70\x32\xe5\x9c\x01\x2d\x61\xe0\x9e\x9c\x23\x7b\x97\x04\x42\x67\xc3\xc7\x9a\xf2\x19\x98\x6f\x98\xa4\x6a\xa1\x3d\x8b\x0c\x52\x73\x10\x47\x13\x84\x20\x85\xb6\x52\x7d\x30\x40\xb9\x15\xe5\xdd\x38\xec\x23\xb4\x8a\x29\x43\x35\x53\xb9\xe6\xcc\x1d\xa8\x38\x80\xcc\x9b\x86\xc5\x31\x0f\xbb\x5d\x11\x66\xb2\x10\x08\xb7\xb5\x3a\x30\x69\xf1\x13\x69\x01\xce\x2d\x73\xd5\x3e\x5d\xe0\xb7\xe4\x6a\x42\x73\x61\xe8\xbc\x8b\xa4\x68\x24\xf9\x3b\xdd\x2c\x82\x5c\x31\x25\x21\x37\xce\x22\x53\x96\xd5\x28\x3e\xb7\x2c\x30\x9b\x0d\x04\x7b\xdc\xfa\xe7\xe8\x86\x5f\xaf\xa2\x3f\xd6\xdb\x62\x39\xe2\xeb\xa5\x3b\x1c\xa0\xef\x0a\x73\x67\xc9\x40\xea\x7f\x79\x7b\xd0\x2b\x5d\x33\x89\x9a\xe0\xd7\x93\x57\x32\xb1\x2c\x34\xe0\x01\x59\x6a\xa5\x60\x6d\xa6\x1d\x08\xba\xca\xe2\x0a\x34\x01\x58\x68\x6d\xc5\xd0\xae\x06\x45\xbd\x7d\xd6\xdb\x49\x7f\x3a\xfb\xcc\x67\xb6\xb1\xb7\x7a\x4c\xdd\xf2\x7f\x71\x14\xf6\xdc\xf0\xf8\x99\x5b\xf1\xf5\xe0\x49\xf4\x87\x33\xfb\x2c\xf0\x50\x9a\xfc\xd6\xf6\x92\x92\x90\x20\xe7\x7b\xbb\x1d\x35\xb5\x1d\xdd\x6e\x4b\x83\xbd\x75\x8c\x6d\x93\xcd\xf4\x5f\x3b\x16\xbc\x68\x4c\x71\x70\x85\x89\xe1\xf8\x98\x3d\x39\x3f\xf3\x04\xea\xbb\x30\xd7\xa9\xfe\x4b\x7d\x3e\x73\xf8\xf0\x61\x3e\x5f\xb4\xf8\xfe\x7d\xfb\xae\x6a\xec\xaf\xf3\xbd\x51\x83\x36\xc7\x76\x8a\xd4\xbf\xb0\xeb\x2d\x67\xa2\x3b\xd5\x4b\xa2\x33\x3c\xef\x27\x45\x78\xa6\x8e\x19\x65\x78\x38\x88\xe9\xe2\x04\x39\xc4\x0c\xf0\xac\x1e\x01\x5c\x40\x91\x1a\x27\x8d\xb4\xa7\x93\x91\x78\x84\xbe\x1f\x05\xd0\xdc\x5c\x09\xb3\xb0\x59\xc8\x65\xd6\x8a\x72\x65\xee\xd6\xdb\xb0\x99\xd7\x61\xcc\x03\xf9\x89\x00\x4e\x80\xe8\xa3\x3f\x35\x77\xac\xd4\x4e\xe5\x99\x68\xf0\x59\xb0\xfc\x53\x86\xd9\x72\x94\xa8\xc9\xb4\x67\x6a\x0f\x1c\xc8\xac\xd3\x78\xdd\xd4\xdf\x26\x2f\x0b\x79\x13\xfd\x17\x00\x74\x4d\x99\x6e\x34\x42\xa5\xb9\x65\x6f\xc5\xef\xdf\xe6\x78\x00\x4a\x61\xb0\xf3\xcd\x30\x26\x90\x7f\x79\x48\x99\xb6\x7e\xdb\xc7\x94\xc2\x42\xfb\xcf\x75\x98\x44\xc8\xc1\x6c\xc5\xad\xa4\xa2\xc6\x59\x6f\x9c\xfc\x7f\xae\x89\xfa\xdd\x63\xec\x49\x4c\xdf\xf2\x4f\x28\x0b\xc0\xf5\xa4\xa8\x5a\xbe\xf7\x25\x00\xb2\x68\xe9\xf0\xfe\xdc\x64\xcb\x86\x90\x03\xa9\x00\xaa\xac\x53\xf3\x1f\xd9\x1e\xf2\x4f\xd4\x82\xf7\xd5\x46\x78\xb7\x49\x80\x1a\x10\x0a\x55\x2d\x64\xd5\x35\x5e\x7d\x5b\xcb\xc7\xf2\xb4\xe3\x74\xa9\x67\x18\xe1\x50\xff\x23\x4a\x0c\x39\x52\xab\x69\x04\x9b\x7c\x96\xca\x41\xc5\xdc\xb6\x3e\xa9\x6d\x94\x6b\x4c\x2f\xa9\xa5\x65\xef\x62\x54\x10\x7d\x17\x5a\x30\x09\x81\x9c\x34\xdf\x2d\xe9\x4c\x91\x32\x6e\xdd\xf2\x0d\xa6\xef\xa3\x8f\xbc\xec\x22\x77\x12\xba\xb6\xaf\xcb\x88\xa1\xd2\x9d\x1c\x46\x8c\x4f\x6f\x0b\xbe\x54\xab\xba\xb3\x3e\x25\x86\xd6\x94\x89\xcf\x81\xf0\xd1\x52\x0b\xa3\xb3\x0e\x61\x1f\x3a\xb9\x35\x4a\x8c\x06\x2c\xb7\xb6\x38\x92\x5a\x71\x5d\xf9\xe5\x65\x2f\xab\x6c\x50\xd5\xcd\x7a\x2a\xc3\xf4\x25\x02\x09\xcc\x71\x3d\x38\x7b\x0a\x92\x57\x45\x27\xcd\xfa\x13\x0d\x79\x38\x6a\xae\x50\x65\x50\x87\x5b\xea\x45\xa4\x02\x95\x2a\x95\x10\x80\xb4\x62\x30\xa1\xae\xd2\x64\x03\x80\x95\x4f\x79\x62\x90\xa7\xae\xc3\x58\x20\x17\x3e\x03\x52\x26\x91\x4d\xca\x8a\xaa\x0f\x22\x7c\x9e\xac\x33\x61\x33\xeb\x65\x06\xf9\x63\x43\xf8\x3f\x3e\xed\xfd\xb0\xf0\x7f\xdc\x4a\x79\x6e\x07\x82\xc9\x75\xf3\xdc\xa2\x84\xc3\x30\x96\x83\xb4\xbe\xf6\x70\xf6\x93\x15\xf4\xe2\x0d\x45\x95\xff\xf1\x87\x07\xd7\x9e\x1b\x4d\xfe\xd0\x50\xaa\xff\xe7\x61\xec\x73\x63\x6c\xb7\x02\x5e\x4d\x93\xdc\xff\xc8\x98\x12\x59\xf7\x8f\xb9\x14\xe6\x0a\x75\xb6\x8a\x3f\x3b\xee\x1b\x06\x6d\x12\x40\x58\x25\x2b\x86\xaa\x87\x9b\x81\x9c\x6b\x64\x4d\x91\xf3\x21\x8a\x6d\x54\x7d\x10\x0e\x58\x2a\x6e\x6a\x7d\x8c\xc4\x8a\x96\x93\x90\x68\xb0\xed\xdb\x31\xb8\xac\x68\x52\x12\x97\xbe\x14\x21\x71\x2c\xe2\x28\xef\x00\xb0\x2a\x60\x9d\x43\x39\x44\xea\x00\xc3\xe8\xd6\x62\xbf\x5d\x07\xbb\x80\x28\xc7\x75\x86\x7a\xcd\x7e\xf8\x4e\xa9\x12\xf8\xce\xf0\x4a\x52\x4f\x5c\xa0\xa0\x93\xa7\xa7\x4b\xf9\x64\xd6\x4b\x26\x8b\x74\xd2\x0c\xdb\x94\xb3\x49\xbc\x7f\x3b\xbb\xac\x13\x26\xbd\x50\xc7\x41\xf9\x6f\xdf\x1e\xbc\x66\xbb\x7b\x4d\xc5\x30\xe5\xa5\x60\x12\x9d\xf4\xae\x4e\x13\x86\x60\x26\x6f\xf0\x63\x60\xdd\x5d\x74\x8b\x5a\x94\xdb\xba\x28\x14\xa5\x55\x3f\xed\x81\x04\x51\xd1\xa0\x6b\xca\xbe\x2d\x2f\xb6\x52\xc0\x6c\x87\xf4\x77\x4a\x70\xcc\xf0\x75\x27\xb9\xbe\x1b\x35\x4f\xab\x6a\xf4\xd0\x62\x0a\x9b\x7f\x94\xc3\xb4\x82\xf1\xee\x22\x57\x0a\x4a\x19\x7a\xd6\x58\x0c\xad\x88\x18\x4a\xb6\x87\xb8\x46\x38\xc2\xe6\xc8\x22\x43\xc0\x50\x91\x4a\x23\x97\x1f\x05\x3d\x17\x3f\x68\xf5\x02\x99\xcc\x95\x90\x52\x1d\xd2\xe0\xfc\x08\x02\xb5\x00\x1c\x95\xac\x73\xe8\xbc\x8d\x78\x1d\xa1\xc2\xec\x85\xb2\x90\xd6\x5a\xf1\xcc\x4b\x45\x4f\x21\x7b\x2a\x1c\xce\xb8\xdf\xe0\xfc\x68\xba\x26\x56\x45\x56\x07\xb8\x5d\x59\x4c\x2e\x06\x3a\xfe\x26\xd9\xa6\x45\x29\x51\xb0\x38\x08\xc8\x12\x99\x41\xd0\xd4\x40\x13\x69\xdc\xe2\x8b\x46\x91\x9e\x22\x45\x7a\x91\x4f\xcf\xce\x5c\xdc\xa9\x79\xb9\xe9\xbb\xc9\x7e\xda\xcb\x26\xd3\xb5\x44\xca\x7e\xbd\x15\x3b\x36\xd4\xb7\x8f\xb1\xdd\xd6\x02\xf4\x5f\xad\xc5\xd1\xb3\x4b\xe2\xa8\x13\x9e\x81\xf8\xce\x41\xb1\x54\x25\x80\xa4\xf4\x21\x3c\x2d\x14\xdc\x80\x3f\x0a\x2a\xca\x80\x66\x06\xef\x67\xbd\x24\x21\x8b\x2f\xc4\x71\xf4\x29\xec\x59\x69\x32\x44\xde\x16\x12\xb9\x05\xbd\x0d\x98\x44\x7b\xf7\x36\x64\x9b\x1b\x96\x58\xe5\x93\xbc\x41\x79\x5c\x46\x68\x4e\xf0\x1b\x39\x3e\x69\xb5\x78\x82\xe0\x1a\x14\xba\x11\x97\x9d\xcd\x63\xd1\x06\x95\xab\x95\x82\x48\xd2\xdf\xee\x84\x67\x6c\x79\xf5\x20\x0a\x99\xd7\xdb\x9a\xe8\x4b\x2f\x44\xac\xe6\xa7\x47\xc7\x6a\x0e\x68\xb3\x72\x8d\x93\x22\x7b\x02\xb4\x0a\xe5\xb2\x22\x11\x02\xe6\x18\x0b\x0f\xa4\x8d\x4e\xaa\x07\x29\x02\xf3\xcf\x3d\x2b\x02\xf3\x33\xde\x39\x44\x60\xde\xe7\x1d\xda\x50\xc8\x25\x4e\x15\xda\xfb\x21\x4c\xf0\xa2\x6f\x37\xec\x3b\xdb\xd8\xc3\x8a\x22\xa6\xd8\x6b\x40\x2f\x3b\x42\xfb\xbf\xff\x27\xdb\xd4\x92\xfd\xe8\xb6\x21\xcf\x90\xf2\x4a\x61\x28\x6d\x01\xe1\xf7\xa0\x17\x3f\x26\x5d\xc2\x46\xae\x84\xb9\x51\x29\x6c\x84\x16\xa4\xf8\x38\x88\x95\x81\xdd\xe3\x08\xc0\x5f\x4d\x10\x4c\x8c\x4d\x30\x82\xbb\xca\x90\x3a\x98\x68\x38\xf9\x51\xfa\x56\x5e\xa7\x08\x6b\x11\x47\xcb\x2a\xb1\x7b\x09\x53\x21\x3b\x61\x11\x35\x01\xd9\x85\xb0\x08\x0c\x8a\x0b\x14\x11\x69\x13\x21\xde\xae\x43\x88\xb8\x6c\x5f\xb3\xdf\x8c\x05\x5f\xee\x85\x59\x98\x14\x42\xe4\xa4\x84\x03\xa1\x4a\xf4\x0c\x63\x77\x5c\x12\x7c\x25\x05\x20\x9e\x8a\xc6\x58\x9b\xa4\xfc\xda\x1a\xb0\x15\x0e\xaf\x5a\x55\x67\xc8\xc6\x3c\x43\x64\xa9\x29\x65\x49\x34\xd3\x8e\x18\x68\xae\x02\x5b\x00\x84\xcc\x28\x2c\x44\xdc\xa7\xfe\x8a\x0a\xdd\x55\x74\x80\xd4\x1f\x08\xe3\xee\x4a\x38\x19\x8b\x55\x11\x23\x1d\x3e\x31\xbc\x50\x93\xe4\xd9\x30\x27\xdb\x1e\x52\x28\x25\x78\x2a\x58\x11\x7c\x61\xe1\x98\x3b\x38\x6d\x11\x16\xbd\xac\x14\xa2\xf6\x19\x8f\xfd\x78\xd8\x94\x4a\xdc\x21\x11\xb6\xe2\x28\x11\x2a\xf8\xff\x3d\x3a\xa2\xf6\x0d\x5e\x49\x6b\x55\x39\xe2\x16\x64\x5e\x26\x62\x60\xd9\xd4\x20\x4f\x45\x98\x15\x0b\x51\xc7\x8a\x5a\x90\x5b\x07\xc1\x2d\xe2\x17\xed\x28\x49\x15\xce\x90\x11\x89\x15\x66\xf4\xcb\xdd\x21\x2a\x6e\xa0\x63\x82\x02\xd9\xd1\x6a\x27\x35\xc2\x69\x50\xc6\x2e\x59\x0a\x9b\xa7\xd3\x76\x1b\x23\xf5\x97\xd4\xca\x39\xee\x36\xc2\xec\x4d\x08\xe7\xa7\x51\xff\x3a\x61\x46\x80\x7a\xa4\x18\xb5\x61\x2d\xb8\x61\xf6\x8f\x72\xbe\xf9\xda\x1a\x0b\x2a\xa4\x8f\x76\x29\xd2\xd9\xf6\xbb\x5e\x70\x5b\xe9\x1a\xd2\x60\x56\x25\x0a\x57\xd9\x4c\xf4\xcb\x6e\x7a\xe8\xeb\x3c\x76\x9f\xc7\xb6\x77\x57\xc2\x5c\xf8\x2f\xf1\x82\xe7\x78\xb3\x2b\x40\xdd\xea\x9e\xb5\xcc\xaa\x81\x27\x95\x22\xad\xfd\x9c\x1b\x95\x6f\x45\x98\x9f\xce\xa7\xc2\x56\x47\x4e\xac\x42\x64\x93\x04\x83\x33\x65\x70\x76\xa6\xec\x43\xd8\xeb\x77\xb3\x87\x55\xf5\x4e\xda\x12\xfe\x73\x76\x07\xd1\x09\x88\x30\xcf\x79\x08\xfb\xb2\xc8\x28\xe4\x3c\xb1\x8e\xc8\x0d\x7e\x58\xc3\xa1\xc1\xaa\xc6\x23\x88\xd2\x0b\x0d\x9a\xa0\x3e\xa6\x87\xcd\x15\x01\xa6\xc1\x06\xf0\x3e\x14\x4d\x05\x13\xa9\x93\xa5\x76\x6d\x79\xe5\xfe\x4d\x79\xe5\xde\xa9\x50\x0b\xde\xea\xb1\x89\x75\x35\x07\x39\x29\x11\x9b\x80\x8c\x03\xc6\x08\xae\xd8\x60\x88\x2f\x1f\xa0\xc7\x2e\x3c\x38\x01\xfb\x2b\x43\x23\xf3\x45\x8f\x3d\x72\x63\x35\x46\x9b\xcb\x3b\xbc\xe3\x69\x0e\xee\x1d\xb4\x54\x6b\xbb\x68\xee\xe4\xa9\x61\xd5\x87\xe6\x36\xcc\x89\xb0\x35\x29\x77\x9b\x8b\x0c\xc3\xb0\xe5\xfe\xda\xac\xfb\xeb\xd8\xfa\xee\xaf\x09\x7f\xcf\x24\xb9\xbc\xe4\xc4\x28\x79\xbb\xb8\xe5\x19\x63\xbf\xb8\x6b\xe3\x58\x07\x73\x94\xbe\xe6\xff\xf7\xf1\xe0\x09\x76\x9e\xcd\xe0\x23\x48\x33\xa1\x58\xd6\xcc\x16\xa7\x10\x9b\x20\x31\x45\x3d\x1b\xda\xe0\x00\xda\x42\xc9\xd4\xfd\x85\xd4\x91\xdd\xdf\xdf\x0a\x5a\xdf\xe2\x49\xbb\x68\x7b\xdd\x51\x32\x3c\x3f\x3a\xb8\x6a\x8e\xe6\xea\x01\xe2\xa2\x35\xc9\x8b\xb2\x29\x27\x42\x75\xc4\xb2\x26\xaf\x5d\x52\xce\xac\x19\xec\x8b\xcd\xf9\x63\xd5\x3a\x3a\x08\x78\x1c\xc1\x9e\x85\x15\x8d\xcd\xa1\x26\xb0\xf9\xac\xc9\x2b\x65\x8b\xcc\xa7\xde\x9b\x96\xbd\x89\x10\xe2\xfe\x63\x82\x49\x30\xcc\x98\x4b\x74\x2c\xa1\x67\xd1\x4d\x68\x0a\x1c\xc1\x6b\xfc\x80\xb7\xbc\xbe\xfc\x39\xe4\xdf\xaa\xe4\xcf\xa0\x68\xa8\x4a\xab\xe7\x15\x19\xf9\xec\x2f\x77\x3a\xf6\x7b\xc5\xb5\x3b\x97\xc6\x02\x33\x64\x76\x06\xff\x41\xfd\xa8\x8a\x73\x03\xca\xcb\xca\xbc\x97\x37\x6c\x89\x90\xcd\x8a\x90\x27\xaa\xb4\x97\xd9\xe0\xe1\x1a\xc6\xc3\x24\x20\x41\x5f\xdb\xa1\x30\x13\x6c\x0f\x7b\xc4\xd0\x19\x6f\x8f\xe5\x96\x74\xda\xb8\x74\x6a\x5b\x8a\xf8\x93\xce\x2f\x6f\xe5\x27\x47\x68\xe1\x1b\x5f\xe4\xb4\x6c\x61\x3c\x5d\x20\xc8\x12\xdf\x9f\x5a\xa8\xe5\xc8\x9b\x57\x8c\xb9\x61\x06\x88\xa7\x51\x05\xb0\xf4\xcd\x8b\x05\xb0\xf4\xd2\x1a\xfb\x2f\x03\x00\x4b\x2f\x1b\xc5\x32\xa9\x6a\xf9\xaf\x16\x55\xe9\xc3\xbb\x1c\x9a\x5d\x07\xe5\x64\x0e\x83\x1e\xe6\x45\x01\x52\xf8\x15\xbb\x82\xd2\xa5\x4a\x59\xac\x9f\x18\x92\x8a\xf8\xad\x9d\xec\x43\x3a\xb5\xee\xdd\x5e\x90\x1e\x53\x92\xc5\x7a\xf3\x22\xe6\x99\x6f\x1c\xb1\x79\x48\x67\x6c\x89\xb1\x8d\x8b\xb1\xcf\xda\x06\x85\x8f\x9d\x27\xf4\xd0\x5d\x06\x7a\xc8\xcd\xb8\xbb\xd8\xb0\x43\x56\xe3\xb6\xd4\x89\xcd\x9e\x62\x9f\xb2\xfe\x06\x73\xc0\xbf\xae\x9a\xe6\xcb\x15\x37\x95\xf4\x5e\x1f\x1d\x67\xbc\xc2\x4c\x82\xea\xf4\xf1\xb0\x0b\xa2\xeb\x75\xe3\xc1\x41\xe7\xca\x06\x29\x06\xf1\x85\xd1\xa9\xd5\xdf\xd8\x52\x31\x37\xab\x62\xb6\x95\xf8\x7f\x4a\xc0\x87\x31\x0b\x62\xd7\xbb\x19\xd4\x0d\x56\x67\x57\xac\x6b\x21\xd3\x2f\x6f\x09\xea\x8d\x0b\xea\xb7\xd8\x82\xfa\x55\xe7\x29\xa8\x1f\x7f\x71\x6c\xbb\x0f\x78\xa7\xd6\x97\x25\x57\xfa\xfb\xaa\x02\xc2\x9d\xd5\x5f\x56\x4d\xbf\x55\xb3\x09\xa9\xab\x50\x33\xdc\xa8\x69\xff\x83\xb5\xe0\x90\x7b\xc9\xd2\x4e\xdd\xdc\x0f\x04\x5d\xc7\xc8\x09\x15\x4c\xad\x72\x0d\x1a\x67\xbd\xdd\x74\x0d\x73\xf3\xd4\xaf\xd9\x34\x73\xe3\xf5\x3e\xe5\xb1\x3b\x99\x7d\xd7\x4f\x36\x6a\x9c\xef\x15\x51\xdc\x90\x55\x29\xb2\xc6\x4c\x52\x9c\xcc\xe6\x61\xc4\x83\x49\xd7\x51\x86\x39\xd1\xed\x21\xf1\xdf\x0d\x36\xc3\xec\xaa\xfa\x07\xca\xef\xbb\x01\x7b\x03\xef\x3b\x41\xa3\x97\xb0\xcb\xd7\x39\x09\x80\x3d\xfc\xcf\x77\xbb\xe7\x00\xe5\x49\x2b\x14\xd5\xcb\x7a\x96\xef\x43\x25\x7b\x8d\xea\xcd\xbb\x76\xb3\x5f\xf0\xd8\x43\x75\x78\xe5\x9c\x0a\x3a\xee\x29\x2f\xe2\xe2\x42\x5a\x38\x91\x2d\x26\x14\x13\x0e\x19\x7b\x31\x75\x06\x06\xb7\xe0\xb1\x08\xa5\x3a\xe2\xc2\xaa\x4d\x50\xd8\xa8\xc5\xae\xe2\xd8\x8f\x2c\xc7\xe2\x97\x3d\x76\x99\xd4\xa2\x01\x80\xec\x60\xda\x4b\x0a\xff\xd3\x1a\x79\xec\xff\xef\x1d\xc4\x64\xcf\x36\x5f\x09\xf3\x15\xae\x1f\x34\x19\x33\x56\x3b\x11\x44\xca\x18\x8c\x8c\xde\xcb\x89\xb4\xd9\xf0\xcc\x28\xe5\x1d\xe9\x73\x21\x26\x39\x4c\x20\xb0\xb6\xb9\x12\x26\x51\xde\xc1\xf8\x88\xa8\x00\xba\x72\xa4\x6c\x46\x3c\x2a\x3d\xe0\xaa\x06\x89\x58\x93\xfb\x8d\xd9\xaf\xdd\x06\x7e\xcf\x63\xcc\x90\x65\xfa\xdf\xf0\x82\xe3\x73\x6e\xec\x38\x6d\x58\xa6\x9b\x71\x48\xc9\x86\x55\xb2\xbe\xed\xc9\x1d\xbf\xa9\x9b\x9a\x73\x1d\x7b\x14\xbb\x7a\xdd\x03\x9d\xe9\x22\x8d\xd5\xf8\x80\xb7\x87\xfd\x94\x23\x5e\xba\x61\xd1\x5c\x99\xec\x88\x6c\x59\x4c\x9e\x16\x7d\x7f\xa7\xbf\x5d\x8a\x4f\x26\x9f\xfc\xc9\x8a\x27\x15\x18\x93\x3f\xee\xef\x80\xb7\x18\x5b\x64\xbe\x9a\x9c\x16\x8c\xd5\x63\x94\xcf\xfd\x1a\xa0\x05\xb3\xa2\x08\xd5\x44\x56\x98\x6a\x55\x23\xe9\xf6\xed\x53\xd8\xa5\x30\x19\xf5\x24\x3e\xa6\x66\xce\xb5\xe5\x49\x8c\x93\x16\x03\x83\x36\x3a\x37\x91\x3c\x93\x8a\x5e\x53\x45\x2f\x95\x8b\x4e\xd2\x64\x52\x3b\xf3\x5b\xeb\x7e\x83\xef\x2d\x56\x44\x94\xa9\x40\x41\x63\x6c\x55\x61\x40\xa5\x9c\xf7\x8f\xd6\xd8\x8f\xf6\x92\xc1\x05\xfb\x2b\x1a\x28\xe0\x15\xb5\x72\x95\xac\xe7\xd7\x6f\xb3\x8e\xe8\x87\xb4\x96\x52\x49\x2e\xec\x1d\x32\x03\x68\xff\x86\x4e\x5b\x33\x8d\x53\xc1\xb3\xfb\xf7\xed\x7b\x84\x35\xa5\x9b\x61\x37\x6c\x46\x45\x1f\x16\x69\x1f\x34\x07\x8a\xc9\x59\x12\xa5\x6f\xa8\x18\x3a\x45\xa4\xde\x17\xce\xda\x70\xa2\xbb\x0a\xed\x29\x47\x3d\x42\x24\x1a\x52\xce\xe9\xc3\x7b\x3d\xf6\x10\x52\x31\x74\xff\xf5\x55\xf7\xb5\xce\x77\x40\x29\xf4\x88\x00\x0c\x54\x68\xa1\x8a\xe3\x82\x30\x50\xb7\x3a\xdf\x1e\x5b\x07\x35\x69\x7f\xe3\x60\x96\xe6\x39\x69\xd1\xe8\x56\x9e\x53\x3b\x8b\xff\x6b\x63\xc1\xd2\x88\xfb\x26\x0e\x9d\x98\x1d\x6c\xdf\x54\x91\xf2\x58\x60\x60\x2d\xc5\x14\xf4\xcd\xbe\x95\x59\x64\x3d\x8d\xb3\x1e\x28\x90\xe4\xaa\x72\x36\x91\x77\xd5\xd8\xa3\x1c\xb5\x7f\x6f\xf0\x93\xc4\x5a\x63\x93\xc7\xd0\x5e\x58\xd8\x1b\xe0\xf3\x14\xab\xe8\x9d\x41\x17\xb4\xd2\xd2\xb3\x37\x5c\x3c\x9d\x2f\x70\x11\x9b\xd1\x05\xd2\x0a\x6e\x3f\x31\xb8\x7d\x0f\x56\x63\x53\x7c\x8f\x10\x26\x62\x7f\xed\xc5\x97\xb0\xbd\x55\xc1\x7b\x25\x40\x84\x83\x71\x18\x75\xfc\xbf\xd8\x1d\x9c\xa8\xbc\x83\x1a\xbc\xfc\xe6\x1e\xad\x48\xe3\x3e\x9c\xb4\x78\x13\x9e\x40\x06\x32\x83\x0d\x81\xd0\x0d\x2e\xb5\x2b\xdb\x3a\xb4\x6d\xb9\x16\xb7\xc2\x68\x86\x86\xd1\xfc\x83\x0a\xa3\xf9\xdf\xa3\xf2\x4b\x47\xae\x61\x88\xab\xf9\x75\x6f\x20\xb0\x46\xed\x0d\x3a\x93\x32\xca\x8b\xa8\x49\x4a\x1e\x81\xe6\x18\x2e\x2b\xe2\x50\x6f\x11\xe9\xcf\x39\xe3\xb7\x18\x79\x30\xa9\xa0\x5c\xcc\x25\xbc\x02\xd2\x23\x67\xf7\xd4\x74\x44\xce\x3f\x79\xec\xc6\x73\x6c\x3c\x86\xe8\x7c\xc0\x1b\x9d\x2a\x69\xed\x4a\x53\x76\x08\xe0\x80\xf4\x42\xd1\xb6\x5e\xb4\xce\x05\xed\x88\x4d\x9b\xee\xac\xe3\x76\x65\x9f\x94\x8f\xdd\xdf\xb9\x94\xfd\xbb\x8a\xfe\x9c\x07\x00\x16\xff\x8f\x2f\x0d\xee\xf2\xf0\x6f\xbe\x92\xc6\xad\x5c\x21\xb3\x00\x04\x1b\xf4\x92\x4a\x93\x91\xcb\x10\x4f\x3e\xa8\xb9\x2d\xf5\x0b\x93\x13\x8a\x22\x52\x45\x0c\x1e\x92\x2f\x13\xed\x32\xc5\x99\x9a\x9c\x80\xe3\xe1\x19\xfc\xe0\x7c\xf4\x0c\x81\xa5\xb8\x07\xc7\xbf\xd9\xfd\xaf\x61\x6d\xff\x5a\x8d\x31\x94\x54\xb2\x37\xfc\x37\xd5\x82\xbb\x6a\xe6\xb7\xca\x06\xb3\x12\x77\xa4\x2e\xb8\x14\x25\x61\xd6\x77\xc6\x00\x12\x3c\x74\x66\xab\x22\xf8\x22\x68\x50\x3a\x5f\x02\x58\x10\x4c\x58\x4a\x8d\x8e\x04\x1e\x31\x8b\x95\xb4\xd5\xe0\xd3\x71\xcc\x4f\x8b\x3e\xa6\xf7\xd0\x48\x01\xb4\xb4\x3c\x3d\x11\x0c\x06\xc8\x0c\x33\x6c\x69\x82\x85\xd6\x21\xcd\x41\xfe\x09\x66\xdb\xa4\x6f\xfc\x80\x6a\x57\xc4\x0a\x25\x62\x55\xaa\xb4\xbd\xa2\xdb\x2b\xf0\x44\x2b\xcf\x41\x50\x6d\xb5\xbf\x4c\xcf\xce\x34\x46\x84\x42\xb0\xe3\xe4\x8f\x3b\x1c\x5c\x77\x8a\xa0\x62\xdb\x61\x33\x8a\x23\x48\x6c\xe9\x66\xe9\x72\x16\x76\x20\x92\x9c\xaf\x84\x49\x0b\x93\x3a\xdb\x76\x67\x39\x06\x90\x2d\xd5\x63\x73\xaa\xc7\x67\x6a\x6c\x1b\xac\xb7\xdf\xad\x05\x6f\xae\xc1\x24\x75\xd2\x4c\xed\x7e\xc6\x10\xe2\xd3\xf2\x7c\x25\xd7\x37\x80\xc2\xe7\x84\xc9\xd2\x5d\x09\x93\x5e\x47\x64\x51\xd3\x4a\xe3\xaf\xf3\x3d\x93\x7b\xea\x7c\xcf\xd3\x10\xb9\xb7\xb1\x87\xd2\xaf\x45\x16\x41\x8a\x01\x9c\xf0\x3a\x25\x74\x28\x05\x03\x19\xf2\xa5\x30\x17\x8f\xba\x9a\x8b\xa4\x99\xb6\xc0\x00\x95\x01\x94\xfd\x80\x22\x14\x66\x4b\x51\x91\xc9\x25\xb4\x97\x98\xef\xfa\xb0\xae\xf0\x85\x09\x2c\x11\x95\xa8\x15\x91\x01\xd2\x3d\xf1\xae\xcb\x75\xa6\x7a\xb6\x48\xd3\x38\x6f\x44\xa2\x68\x37\xd2\x6c\x79\x6a\xa5\xe8\xc4\x53\x59\xbb\x79\xf5\xa3\xae\xbe\xee\xf2\x1c\x9d\xb0\x93\x57\xdf\xef\xfd\x28\x7b\xa8\xbf\x4d\xca\xaf\x21\xf3\x79\x4b\x97\xdb\xa8\x2e\xf7\x80\x77\x62\xfd\x4d\xf0\x91\xfe\x44\xd5\x26\x88\x7b\x49\x79\xd7\x7b\x91\x7b\x0c\xb2\x9c\xcc\x15\x26\xd0\xaf\x5e\x2c\x13\xe8\xf3\x77\xff\xeb\xb7\x3a\x7e\xdf\xb5\x3a\xfe\xf5\xc5\xb4\x3a\xde\xc4\x6e\x60\xd7\x6f\x24\x92\x60\xcb\xf4\xb8\x65\x7a\xdc\x32\x3d\xfe\xcb\x9a\x1e\x7f\xa8\x9c\x3f\x6f\xaa\xb1\x75\x42\x84\x89\xc8\xf7\x48\x2c\xce\xe0\x69\xca\xff\x96\x17\xbc\xc8\x1b\xb8\xec\xc0\x86\x2a\x48\x38\x79\xdb\x46\xcb\x8d\x0c\xb3\x2c\x45\x06\xe7\x98\xf5\xe6\x22\xf4\x0f\x16\xbe\x1e\x56\xff\x8e\x56\x16\xad\x8a\xcc\xd9\x65\x0e\xb3\x83\x8c\xae\xfb\xd7\x07\x75\xfc\xab\x0a\xe2\xc3\xaa\x25\x3e\xe4\xe8\xcb\xf7\xb2\xf5\x68\x93\x4e\xa0\xcb\x76\x16\xaa\xe7\x7f\x71\x57\xf0\x0e\x8b\x1e\x84\xef\x6f\x5c\xcf\x27\x71\x99\xc1\x2e\x6d\xdb\x68\x9d\x37\x91\x2d\x5e\xf5\x84\x1c\x3a\xe3\x0b\x9e\x5a\xdd\x3f\xe5\x3c\xdc\x28\xbd\x6b\x3c\xc0\x00\xdb\x40\x6f\x6a\x04\x26\xab\xe3\xd1\x27\x4c\x50\x81\xb3\x69\xcb\x0d\x28\x79\xff\x4e\xf6\x79\xfb\x90\xf9\xbb\xe7\x7d\xc8\xfc\xa1\xe0\x6c\x63\xf7\x28\x93\xd2\x7f\x1e\xde\x9e\x75\xc7\x16\x8c\x4a\x37\xcd\x97\xe9\xaf\xec\x85\xaf\x13\xb7\x50\x3c\x46\xb9\x3b\x4e\x5b\x84\xac\x5b\x96\xdf\x8b\x77\x5a\x58\x5a\xff\xb4\x70\x8b\x7f\xd3\x28\x5e\x42\x67\xb2\x56\x32\x13\xfe\x85\xcb\x84\xda\x4c\x01\x1d\x54\xb1\xf2\xe3\xa2\x39\x26\xc2\x1c\x93\x27\x7e\x73\x3c\x78\x84\xfe\xe5\xc6\xf2\xc3\xe5\xd1\xd1\x6d\x2f\xdc\xb9\x35\xfc\x1b\x37\xfc\x7f\xc0\x96\xdb\xef\x3c\xcf\x28\xaa\xe4\x22\x44\xbb\x8e\xcc\x9c\xdd\x12\x8b\x9b\x12\x8b\x77\xa8\x28\xc6\x95\x20\xa8\x48\x94\x51\x3d\x53\xc1\x04\x33\x9a\xf4\x76\xf8\x7a\xde\x74\xb6\x86\x53\x54\x29\x4f\x43\xcb\x84\x4a\x19\xf3\x47\x97\x38\x32\x66\x38\x08\x1c\x00\xac\xbd\xed\x92\xe0\x59\xe6\xa7\x86\xde\xd3\x99\x1a\x08\xa3\xb7\x14\xe6\x02\xec\xb7\x5a\x39\x25\x08\xbf\xbd\x60\x1f\x5e\x94\x8b\x6a\x11\x81\x9e\x12\x41\x60\x4f\x1a\x33\x15\xad\x07\x06\x14\x2d\x47\xe6\xd4\x34\x69\x8a\x09\xc5\x97\xea\x48\xae\x97\xed\x66\xdf\xad\xb1\x71\x29\x61\xe5\xe4\xf1\xff\xaa\xc6\xa6\x37\x05\x72\x77\x98\xde\xa4\x86\xc1\x04\x08\xde\x5c\x53\x05\xa2\x9b\x9c\x80\x37\x97\xe3\x74\x29\x8c\x55\x7b\x94\xa2\x2d\x25\x92\x86\x8a\x25\x48\xa9\x30\xe9\x5b\x88\x07\x7a\x6d\xcc\x14\xca\xee\x6e\x55\xc5\xf4\x98\x1d\xbd\x40\x50\xa5\x20\x23\x9b\x69\xa7\x9b\x26\xa0\xf1\xab\x73\x5b\xda\x2b\xf2\xa8\x05\x9a\x35\x21\x36\xf0\xbd\x52\x13\x22\x92\x35\x1e\x8b\x64\x19\x81\x4f\xef\xe8\x89\x1e\x20\x30\x34\xe3\xb4\xd7\x22\xba\x55\x60\x11\xc1\xa0\xbd\xba\x3c\xed\x3d\x6e\x76\x1e\x3f\x15\xa7\x61\x6b\x29\x8c\xc3\xa4\x29\xb2\x11\x1f\x9b\x68\xb0\x8f\x79\x6a\x14\xfc\xdf\xf2\xd8\x2d\x9b\xea\x74\xad\xb5\x9a\x2e\x2f\xf4\xbe\x61\xfa\x9b\x3a\xda\x42\x70\xd4\x73\xea\x74\xb9\x73\x9d\xe6\xd7\xf9\x4a\x54\xe4\x93\x5d\x91\x4d\x22\xa6\x09\xcc\xc7\x44\xb1\x01\xd3\x2b\x13\x0d\xf6\xaa\x1a\xdb\x26\x4f\x7b\xfe\xbd\xb5\x11\xea\x6a\x55\x13\xa4\x42\xef\x34\xe0\x53\x1e\xe2\x62\x8d\xac\xff\xc6\x10\x28\x9d\x96\x00\x65\x6d\x08\x46\xdf\x7c\xb2\x9b\xa5\x4d\x91\xe7\xa2\x65\xb5\x6d\xa2\xc1\xc1\x32\x47\x8e\x15\x05\x94\x13\xae\x8a\x0c\x88\x3b\x8b\x74\x59\x90\x11\x00\x30\x51\x10\x83\x47\xce\xa9\x30\x33\x78\xc4\xf4\x6d\x04\xff\x63\xf7\x8d\xb1\x71\x25\x0e\xfd\x7b\xc7\x36\xb9\xa6\x4a\x90\x9f\xd8\x3f\x9f\xa8\x69\x3d\xc1\xee\xa3\x32\xd0\xe7\xde\xbc\xd7\x5c\x41\xd0\xd3\x34\x17\xeb\xe2\x7b\x4e\x54\x21\x83\x5e\x20\xcc\xcf\x1f\x4e\xc8\x4f\xf6\x06\x8f\xfc\x54\xaf\xf2\x82\xe7\x7b\x8a\x33\x08\xc6\x90\xb2\xc8\xa8\x2b\xe9\x05\x2e\xc5\x8e\x11\xa9\xc4\x62\x1c\xe0\x1a\x0c\xea\x3c\x98\x85\xe2\x21\xb9\x8c\x06\x23\xa8\x63\xbf\x75\xc2\x6e\x57\x13\x3c\x95\x84\x34\xf5\xa7\x46\xe1\xb5\x80\x3a\x77\xb0\xff\x58\xe1\xf1\x55\x85\x3f\xae\x97\x16\x21\x6c\x28\x1f\xdc\x11\xdc\x36\x70\xb5\x32\x8a\x60\x05\x15\x24\x04\xc5\x4a\xb9\x48\x90\x83\x44\x2e\x14\x78\xd1\x35\x7b\xff\xf7\xed\xec\x2b\x1e\xdb\x26\x5f\xf2\xff\x6f\x2f\xb8\xc7\x83\xd7\x15\x65\x07\x1e\xc8\xab\x4a\x86\x75\x07\xd8\x34\x61\xc7\x8e\x0f\xdb\xac\x13\x1e\xed\x27\x53\xea\xfd\xc9\x3b\x64\x15\xf3\xa9\xfb\x47\xf3\x38\x0e\x68\x8b\x0d\x5d\x81\xc7\xf5\xc2\xa4\x88\x8a\xbe\xed\xdd\xf9\x62\x8d\x5d\x9a\x37\xd3\xae\xd0\x20\x96\x9f\xaa\xb1\xc6\xba\x71\x0c\xf3\xf6\x2b\xc1\x6b\x6a\x4e\x11\x68\xbe\xc8\xd3\x81\x7c\xbf\x76\x14\x03\x18\x76\x1c\x9d\x16\x1c\x5e\x51\xf4\x95\x26\x8b\x1e\x7a\x4e\x31\xe2\x66\x61\xf3\xb4\x8a\xeb\x80\xe6\x83\xa5\x51\x9c\xe9\x02\x10\x7f\x8b\x66\xb7\x53\x99\x93\xc0\x6f\x95\x02\xec\x4f\x33\xed\x2c\x91\x46\x83\x1b\x2a\x79\xd3\x84\x56\xfd\x8e\x80\x75\xc5\x1c\x3d\x88\xd6\xb3\x8e\x6c\x01\x54\xc5\xe9\x13\x87\xb8\xdb\xc0\xbd\x51\xdb\x95\x29\xf2\xc7\x44\x5d\x87\x09\x10\x84\x78\x83\xbd\xd1\x63\x3b\xb0\x14\xff\x95\x5e\x70\xa6\xcc\xe0\xa9\x3a\x64\x73\x9d\x00\xa8\x63\x0e\xe1\x33\x22\x8d\x61\x0f\x29\x3e\xdf\x30\x8e\x2b\x15\x4a\xd7\x73\xcd\xde\x32\xce\xae\x5e\x1f\x75\xc0\xe4\xb3\x2a\x9a\x58\xff\x9b\x3b\x83\x5b\x61\xa5\x15\xa9\x32\xfa\x57\x9b\x56\xe4\x32\xd1\x74\xcf\x3c\x73\x92\x60\xdd\x15\xf7\xea\x9d\xec\x15\x3b\xd9\x65\x9d\xf0\xcc\x29\x63\x14\xf7\x9f\xbd\xf3\x7c\xd3\x17\x3e\xbc\x63\xc1\x82\xb2\x34\xb6\xda\x12\xe7\x2d\x92\x39\x60\xbe\xac\x6d\x95\xb7\xe8\x7b\xa9\xd6\x1c\x49\x6c\xe9\xd9\x30\xe1\xe1\x52\x9e\xc6\xbd\x42\x63\x88\xed\x15\x67\x0e\xf0\x6b\x26\x38\x4c\xaf\xae\xc8\x9a\xf2\x98\x83\x24\xa7\x65\xab\x7d\xa9\x12\x0a\x9e\xd7\xa6\x14\xa5\x84\x61\x28\x74\xff\xbe\x47\x4c\x34\xf8\x74\xe9\x7b\x51\xce\x9b\x61\xdc\x24\xd4\x1e\x34\xbf\x9a\xaf\x2e\xf5\x79\x96\xf6\x10\xe4\xbd\xd7\x25\x27\x42\x53\x9f\x82\xf7\x99\xfc\xdf\x55\x45\xce\xbb\xdf\x90\xfc\x28\x90\x4c\x42\x31\x47\x7c\xbb\xab\xf6\x3d\xa2\x2e\xeb\x0a\x8e\xc5\xab\xf6\x3d\x42\x13\x24\x0f\xd8\xe7\x5b\xc2\x85\x96\x5c\x32\x6e\x83\xc2\x30\x81\xcb\x3d\x0b\xb1\xb9\x08\xc0\x93\xa6\xd1\x09\x28\x69\x5e\xae\xa6\x5e\x2c\x5a\x13\xd0\xe7\xca\x7e\x1f\x91\x83\x21\x2f\xd2\x6e\x57\xd9\x4a\x35\xdd\xf1\x10\x20\x52\x4d\x86\x0c\x34\xc0\x4b\x7d\x7c\x1b\xd4\xc2\x72\x73\xe4\x26\x5b\x1e\x1e\x84\x26\x4e\xf8\x92\x9c\x13\x39\xef\x75\x21\x7f\xbc\xf4\x14\xee\x6a\xb2\x7a\x31\xa0\xa8\x9d\x4c\x88\xea\x4a\x31\x2a\x83\x22\xa0\x67\x18\xa0\x21\x42\xa9\xa0\x99\x89\x96\xdc\xeb\x8b\x94\x8e\x35\x6e\xd9\x72\xa9\xf7\x72\x2e\x92\x5c\xcd\xca\xb0\x30\xae\x85\x6b\xb1\xea\x69\x16\x2d\x47\xc9\xc8\x69\x66\x7f\x1f\xba\x2a\x8e\xa1\x93\xf2\x8a\xe9\xce\xde\xb9\xdb\xc9\xc2\x21\xa0\x06\x0a\xbc\x46\x5d\x7e\x2e\x8d\x85\xff\xbc\xdd\xc1\x0b\x3c\xeb\x02\x25\x7d\xd3\xd1\x02\x30\x0b\xeb\x3c\x4e\x97\xa3\x66\x18\xe3\xb9\x93\xa2\x5f\xd0\x82\x35\xd7\x8b\x85\xbb\x0c\xad\xec\x20\x70\x06\xcb\x83\x38\x4a\x42\x59\xfc\xad\x11\xce\xe9\x34\xe3\xd6\x47\xe9\xaa\x2b\x5a\xfe\x71\x7c\xcb\x36\xb5\x71\xdb\xd4\x8a\x65\x9a\xfa\x4f\xe7\xeb\x51\x18\x85\x29\xc1\x9e\xed\xb1\xed\x99\x1c\x76\x7f\x2d\xb8\x1a\xc7\x1f\x03\xf8\x60\x3e\x02\x1f\x9a\x99\x19\xda\x48\x6f\x8d\xf6\xc6\x53\xf4\x9d\x59\x6b\x8a\x65\xef\xaa\xb1\x87\x84\xcb\xcb\x99\x58\x06\x4d\x41\x5e\xf3\xcf\xd6\xd8\x35\x1b\x2b\x68\xda\x7d\x33\xf8\xaa\x57\xba\x42\x3c\x26\xa8\xc4\x87\x31\xe9\xbd\x25\xb2\x7f\xb2\x7d\xc8\xa3\x01\x42\x9f\x0f\x6f\x30\xec\xfe\x15\xdf\x50\xb0\xa5\x89\xf5\x3e\xe0\x83\x9b\xf8\x0a\x24\x2f\x6d\x81\x10\x6b\x45\x99\x9c\xc4\xcd\x95\x30\x59\x46\x7c\x4d\x7c\x45\x1d\xfc\xf2\x22\xed\x74\x8d\x87\xdf\x72\xeb\x6f\x19\xff\x36\x9b\xd6\x9e\xae\x6f\x89\x3b\xe6\x3f\x66\x13\xb8\x29\xd6\x74\xa8\xb4\xc8\xbd\xe2\xb2\xe1\x48\x1d\x56\x88\x90\x3c\x3d\x7d\xe3\xd2\xe0\x84\x7b\x49\x1f\x71\x36\xe4\x38\x1b\x8c\x1d\x3a\xeb\x69\xc8\xea\x61\x8c\x08\xdf\xb9\x84\xbd\x69\x8c\x3d\x0c\x82\x21\x45\x9e\x97\x71\x66\x9f\xab\xe1\xc8\xbf\x5d\xb3\x35\x37\x00\x30\xb6\x10\x66\xd1\x37\xea\x46\x34\x74\xc2\xd3\x14\x65\x89\x64\x62\x60\xac\x40\xb0\x61\x88\xef\x6b\x09\x43\x5f\xab\x60\x5c\x17\x86\x85\xb0\xe0\x6a\x90\xbf\xa3\x04\xb1\xf1\xc9\x74\x42\xaf\x5a\x6f\xa1\x6a\x00\xc1\x86\x18\xa7\xa3\x38\x79\x66\x4b\x8d\x3c\x7c\x46\xee\xf0\x70\x30\x0c\x73\x45\x22\x21\x17\x5c\x2f\x6b\x13\x9f\x5b\x39\x50\x83\x54\x22\x7e\x22\x2d\xc8\x33\xaf\x1b\x08\x6f\xd3\x8e\x21\xf2\x22\xea\x80\x02\x68\x6d\xe1\xd0\x67\x4e\x27\x45\x39\xef\x86\xca\x93\x6f\xe1\xd7\xee\xdb\x97\xbb\xd1\x06\x2f\xb7\x63\x6a\x9e\xa7\xc3\xbd\xba\x27\xb4\x52\xa1\x66\x83\x54\x29\x4c\x6c\x4a\xc8\x61\xaf\x93\x9b\x60\xca\x5b\x18\x67\xdb\x8b\xf2\x15\xbe\x24\x8a\x35\x01\x28\xda\x48\x28\x0c\x28\xc9\xd0\x6f\xce\x69\xc6\xad\xd7\x7e\xb7\x52\xbf\xe3\xb1\x1f\xcb\xc4\x2a\x44\x84\x1d\x8d\xf2\x22\xcd\xfa\x88\xea\x7b\xbf\xae\xe0\x2b\xbd\x05\x07\xcd\x37\x8d\x5b\x36\x60\x0c\xc2\x01\x61\x30\x78\x8a\x96\x54\x83\x95\x76\xb1\x1a\xb1\xcf\x6d\xc5\xdf\x7b\x16\xae\xfb\x37\xbd\x0b\x80\xeb\xfe\x56\xef\x98\xcb\x29\xd4\xa6\xf0\x1b\xa9\xc8\x53\xac\xb3\xdd\x09\x6b\xa0\xdd\x6a\x5d\x10\x5f\xb3\x42\x50\xd4\xb4\x04\xeb\x8c\x14\xe7\x61\xbb\xed\x3e\x61\x87\x25\xcd\x14\x65\x24\x3c\x9b\x1b\x62\x4f\x4e\x11\x54\x0d\xf6\x61\xd9\x70\x15\x7f\xf6\x1b\x1b\x80\x53\x1a\x10\x5a\xf4\x72\x70\x64\xa1\xbc\x48\x08\xfb\xa9\x48\x21\x2a\x65\x83\xa0\x4f\x0f\x78\xf5\xd1\x41\x72\x97\xfa\xbb\x71\xb6\x3c\x56\xf4\x73\xc6\xee\xb0\x00\xe7\xc5\x39\xe0\xcd\xef\x57\xbf\xac\xdd\x9f\xfa\x2b\xaf\x04\x9e\x6f\xb0\xbb\x6b\xec\x21\xa5\x98\x21\xff\x7f\xeb\xd9\xfe\x67\xde\xf1\x28\x29\x1d\x6c\x6d\x01\x49\x34\x8d\xb2\xc5\x71\x5f\xa3\xd9\x03\xe1\x88\x39\x90\x41\x90\x92\xec\x98\xb4\x87\xa7\xa6\xb4\x0d\xb0\xea\x9a\xb3\x91\x37\xb3\x30\x5f\x81\x70\x65\x59\x68\x54\x90\x08\xb5\x64\xaa\x3e\x4e\xb8\x53\x7f\x1f\xdf\x2b\x3f\xa6\x5b\x55\xf1\x02\x50\x30\xa5\xc8\x8e\x8d\xa2\x1a\x2a\x34\xe1\x2c\x99\x47\xb3\x1d\x28\xb6\xfc\x47\x05\x7b\x67\x2c\xe6\x27\x3a\x31\x57\x4a\x38\x87\xf5\xe2\x33\xdb\xd8\xb5\xae\xcd\xd9\xda\x61\x21\x99\x24\x6e\xcf\xf7\x60\x8b\x9a\x06\xf6\x88\x39\xb1\x1a\x09\x40\xfb\xf5\x5f\xbe\x2d\x78\xbb\x37\xe2\x01\x14\x19\x38\xa4\x5d\x7b\xc3\x0c\x91\xa2\x46\x93\xc5\xc9\x63\x75\x13\x82\x70\xd1\x82\xaa\x2c\x97\xd3\x76\x6d\xa6\x0b\xd4\x35\x34\x4f\x65\xb2\xde\x63\xca\xf2\x94\x0b\x17\x0c\xe2\x0b\x35\x76\xbf\xc7\x7e\x3c\xb1\x4a\xd0\x2f\xf9\x2f\x5d\xc7\xe3\xe2\x76\xcf\x89\xaa\x32\x82\xe3\x95\x97\xad\xc9\x6d\xbb\xa3\x70\xc3\x4e\xd2\x64\x52\x9f\xa8\xdc\xfe\x91\x95\xf5\xb3\xc1\x9a\xbe\x62\x54\x72\xd5\x40\x4d\x2b\xaa\x39\xbf\x5e\x07\x8e\xaa\xf0\xb0\xca\xfe\x4d\x8d\xfd\x87\x2a\x50\x19\x38\xdf\xcd\xcc\x22\x8e\x88\xff\xa9\x5a\xf0\x38\xf7\xd2\x40\x86\x17\x5c\x25\x08\x7d\x88\x25\xc6\xe7\xf9\xcc\x2c\xb9\xf5\x72\x91\x63\x08\x74\x1b\x7a\xa0\xef\x1e\x6e\xbf\xe1\xb1\xaf\x7b\xec\x32\xb9\xd5\xa7\xbd\x42\x89\x88\xcf\x6b\x11\xf1\x21\xcf\xbd\x65\x39\x5d\x29\x4f\x01\xae\xea\xef\xce\xcc\xa2\x13\x40\x7d\x35\x2f\xa2\xe6\xe9\xbe\x65\x43\x71\xc1\xf7\x6f\xde\xc7\x7f\xf6\x67\xf9\x8d\x37\x5d\xf7\xa8\xab\xf7\xed\x03\xb7\xd3\x7e\xde\x0a\xfb\x13\x3c\x6a\x2b\x12\xf2\x69\xaa\x37\xbf\xe9\x26\x1e\xa8\x8f\x04\x55\x76\xa7\x7d\xd7\x51\x19\x57\xf1\x95\xb4\x97\xe5\xa5\x08\xdb\xd7\x57\x77\x39\xa8\x00\x73\xf2\x28\x03\xab\xf5\x7b\x5e\x70\xc2\xbd\xa4\x4f\x25\x21\xef\x44\xc9\x54\x27\x3c\xc3\x7b\x79\xb8\x2c\xd0\x68\x0f\xe3\xac\x75\x77\x32\xc7\xc2\x56\x96\x26\xa0\x72\x37\xce\x7a\x3b\xd0\xbc\xef\x74\xfc\x4b\x3c\x76\xaf\xc7\xe8\x8e\xff\x1c\x2f\xb8\xe5\x18\xfa\x00\x4a\x18\x45\xa6\x2e\x33\x85\xe8\x28\xb3\xac\x89\xa3\x25\x4f\x44\xeb\x1c\x78\x63\xdd\xa2\xd9\x17\x3c\x27\xfc\x11\x7d\x08\x23\xa2\x43\xef\xf7\x82\x63\x17\x32\x38\xf4\xa2\xc6\x76\x7e\x90\x6d\x04\x80\x10\x66\xc0\x4b\x59\x70\xb5\x7b\x69\xe8\xb1\x26\xb4\x93\x02\xac\xc3\x8b\xd3\x82\x8f\xec\xda\xda\x86\x61\x01\xbe\xb9\x66\x1d\x0a\x5e\xa9\xe3\xda\xff\xd9\x53\xb1\xd1\x7a\x58\x07\x4e\x09\xea\xb5\xf3\x52\xb2\x2d\x6a\xd3\xf2\x39\xe1\x22\x02\x41\x4e\x5d\xbe\xb6\x12\x16\x93\x51\x3e\x19\x4e\x0e\x41\x8a\xb4\xfa\xe8\x07\x36\x6b\xd3\xdf\x5c\x08\xd6\xa6\x5f\xad\x39\xce\xb5\x4d\x31\x38\x51\x7d\x15\x8b\x13\x1e\x13\xca\x89\x94\x65\x0f\x54\x94\xf0\x34\x6b\xe1\xc0\x2c\x59\xe6\x1f\xa3\xfe\xab\x62\x81\x23\x7b\xa3\xfa\xff\x83\xc3\x0a\xf5\x8a\x9a\xa5\xa4\xdf\x53\x3b\x07\x2d\xfd\x0f\x3d\xad\xa6\xd3\x74\x56\xde\x38\xd7\x6e\x57\x8c\x62\x8c\x8a\xda\x3c\x4a\xf2\x5e\xbb\x1d\x35\x61\x37\xd7\xc4\xb0\xc0\xd0\x27\x0a\x38\x4e\x5d\xcc\x59\x7b\x79\x37\x6d\x4d\xaa\x8e\x60\xdf\xde\xcd\x7e\xaa\x72\x03\x21\x0e\x18\xff\x0f\x76\x07\xf7\xd7\xf4\x4f\x1b\xa5\xac\x49\xf0\xe0\x4a\xd7\x46\x43\x22\x1e\xbb\x88\x06\x0c\x67\x5d\x11\x9e\x16\x18\x63\x01\x9c\x7f\x42\x39\x07\x51\x78\x19\xba\x19\xb1\x8a\x76\xf3\x23\x94\x95\x32\x9b\xe6\xc5\x3c\xb8\xbc\xe4\x9c\x9c\xcd\xc4\x7c\x91\x76\xad\xe7\x21\x53\x16\x12\x30\xad\x4f\xd3\x9e\x61\xca\x5f\x8a\xd3\xe6\xe9\x9c\xf7\x92\x22\x8a\x49\xf9\x06\x21\x0f\xb6\x1f\x64\xb2\xaa\x2b\xfa\x44\xf7\x4d\xdb\xac\x93\xd7\x39\xd0\x29\x4a\x79\xdd\x0c\x91\xd1\x5e\x55\x00\x56\xdf\x52\x9a\x61\xd6\x8a\x1d\x41\xb6\x8b\x3d\x67\x8c\xed\xea\xaa\x76\xf8\xdf\xa9\xb1\xbd\xeb\x4e\xbb\xa3\x58\x6a\xf0\x89\x9a\xe9\x00\x74\xe5\xc5\x95\xb4\x50\xa1\x55\x65\xf9\x1c\x9d\x10\x91\x85\xca\x54\x92\x5a\xe1\x36\x51\xce\x63\x93\x28\x23\xbb\x39\x13\xe0\x04\x93\xbf\x9a\x4d\x08\xfe\x83\x18\x0d\xf4\x49\xa0\x03\x92\xf4\x07\x7e\x92\x02\xec\x36\xd1\xf7\x2b\x69\x7a\x5a\x77\xfb\xe6\x57\xbe\x2e\xd9\xfa\x73\x52\x4f\x88\x49\x59\x7a\x3e\x75\xb9\xb9\x05\x17\xd8\x2f\xec\x60\x3b\xbb\x38\x7b\xfc\x7f\xde\xbe\x89\x11\xf8\xc3\xed\x6a\xd2\x55\xf7\x3f\x19\x12\xc3\xa1\x1d\xda\x42\xfb\x60\x98\x40\xc2\x8b\x02\x9b\x49\x9d\x4e\x83\x59\xcf\x55\x68\x52\x1c\xad\x8a\x44\x4e\xba\x6e\x96\x92\x31\xb2\x97\x89\x3a\xef\x66\x42\x74\xe0\x0c\x59\x77\x51\x47\xd1\xce\x5c\xe7\xa2\x68\xa2\x1a\x6e\x4d\xca\x24\x2d\x74\xb5\xcb\x43\x03\x3a\x83\xc8\x39\xc4\x83\x45\x8a\x33\x9a\xcc\x8f\xe0\x62\xa0\x66\xd0\x5a\xe9\x86\x79\x6e\x42\xba\xe8\x23\xf8\xd2\x6c\xda\xda\x93\x3b\xcf\x2f\x67\x61\x13\x08\xd4\x23\x45\x14\xd8\x4a\xd7\x12\xa4\x25\xcf\x6d\x3a\x2f\xd5\xbf\x72\xa0\x04\xb8\xde\x90\x6f\x4e\xce\xdf\x39\xb1\x1c\x66\xad\xd8\xe2\x72\x4d\x7b\x45\x33\x35\x7a\x21\x55\xa2\x3c\xa7\x41\xe2\x42\xaf\xf6\x80\x96\xcd\x50\x84\xc9\x7d\x82\x0c\xa9\xa3\xeb\x7c\x01\xe6\x36\x72\xab\xaa\x7b\x43\x3b\x07\xf5\x29\x88\x0b\x79\x70\x16\xc3\x1f\x8f\xb3\x4a\xcc\xd3\x28\x69\x89\xac\x8c\xba\x81\xf1\x75\xfe\x9b\xc7\x83\xff\xe5\xcd\xd9\xea\x7f\x13\x1e\x37\x60\x2b\x86\x5f\xf9\x64\x57\x24\x79\x01\x56\xd3\x69\x7e\xd0\x79\x0c\x94\x01\x30\xbb\x69\x0e\x35\x39\x35\x74\x14\x98\xae\x2a\x9d\x27\xad\xb7\x20\x72\xa8\x44\x62\x9e\x89\xe5\x08\xf5\x52\x79\x49\xf6\x54\x2c\xb5\x0e\xe7\x9b\x39\xcf\x7b\x5d\x44\xa6\x5c\x93\x3d\xb5\x12\x75\xed\x41\x95\x02\x6f\xfe\xf0\xb1\x28\xe9\x9d\x01\x66\xba\x25\x01\xc1\x86\x67\xbd\x71\x7c\x7d\xe6\x90\x23\xcf\xef\xdb\xc1\x5e\x56\x63\x3b\xda\xf9\x42\xbf\x2b\x75\x88\xe0\x1f\xbc\x23\x51\x2c\x14\x27\x9d\x3c\x1d\x17\x29\x36\xaa\xc1\x8f\xd3\x41\x38\xe4\xed\xd2\x33\x54\x25\xe3\x47\x5b\x49\xa5\x54\x80\x18\x25\x88\x9e\x25\x62\x25\x8a\xb5\xc8\x0f\xf0\x40\x9c\x29\xae\x0e\xea\x3c\x38\xd3\xce\xe5\x3f\x49\xd1\xce\x83\x06\x9f\xe9\xa0\x22\x1c\x93\x7f\xd9\x38\x31\xf0\x05\xb9\xea\x1d\xd5\xb8\x62\x86\x65\x22\x16\x61\x2e\x72\xe5\xdc\x3a\x7a\x78\xfa\xd0\x14\x45\x88\xe6\x53\x9d\x7e\x7e\x47\x3c\x89\xa3\x3d\xd9\x6d\x4d\xcd\x1d\x9e\x3e\x74\xfc\x70\xa3\xd3\x2a\x63\x74\xcb\x43\xc1\xc9\x24\xee\xfb\x1f\xf3\x82\xdf\xf4\x4e\x92\x5f\xf3\x80\xa3\x8c\x23\xe7\x30\x24\x3f\x4e\x01\x02\xc7\x04\xc2\xd1\x9c\x04\xa6\x42\x91\x11\x67\x1b\xc6\xdf\x81\xbf\x52\xdd\xcc\x89\x2f\x3a\x4a\x38\x4e\xcc\xe3\xb2\x8f\xab\xf7\x8f\x73\x6e\x90\x65\x14\xbc\xcf\x63\xbb\x10\xa8\x61\x4e\xb4\xfd\x17\x6e\x84\x42\x74\x5e\x3d\x8e\xa1\x09\xc1\xed\xa6\x0f\x08\xc8\x15\xe6\x38\xc1\x3f\x90\xe2\x68\xc1\x46\x03\xe2\xbf\x80\xc0\xaf\x1e\x09\xda\x66\x9a\x24\xa0\x5e\xa6\xb0\xaa\xe6\x61\x55\xb1\x57\x7a\x4c\xcf\x4e\xff\xf9\x5e\xf0\x0c\x5a\x27\x51\x4b\xbf\xe8\x60\xd2\xa9\xdb\x89\x5a\xb4\x17\x67\x12\xbc\x6b\x57\x25\x8c\xb6\xa6\x22\x84\x54\xa2\x9f\xdf\x15\xfc\xac\x73\xc5\xcd\x78\xd0\xb7\x86\xe4\x12\xfd\xed\xce\x2d\x37\xf3\x26\x73\x4c\xfe\x9b\x66\x4a\xf8\x94\x17\xdc\xeb\x55\x82\x65\xeb\x6e\xd7\x36\x28\x12\xb3\xf2\x81\x0b\x7c\x3a\x73\xb8\x1f\x37\x0b\xcc\xad\x2b\xba\x15\xb6\xb3\xf1\xb0\x9d\xdf\xb6\x53\xca\x7e\xfd\x3c\x53\xca\xee\x78\x70\x52\xca\xac\xa6\x9c\x0f\x66\xb7\x23\x6a\x06\x30\xbb\x1f\xe6\x84\xaf\xd9\xf4\x88\x68\x90\x27\x04\x95\x8f\x3f\x2c\xb8\xbd\x7c\xb1\x74\xd8\x77\x11\x53\x88\xc2\x25\xcc\xf3\x68\x39\xc1\x4d\x5e\xbe\xdf\x98\xef\x8a\x26\x61\xcb\xa3\x5e\xe5\x1e\x16\xbf\xf8\x13\xec\x4d\xe3\x6c\xbb\xc8\xb2\x34\xf3\x5f\x3d\x1e\xbc\x60\xfc\xb0\xfc\xd3\x3e\x71\x27\x7d\x38\x16\xc4\x72\x0d\x4b\x71\x92\x34\xa3\x58\xcd\xed\x81\xd2\x95\x7c\x9a\x46\x0e\x5d\xac\x55\x83\x43\xa1\x38\xb9\xd3\x66\xb3\x97\xa1\xcd\x50\xa7\x84\x84\x45\x01\xe7\x0c\xd4\xc9\x9a\x2b\xa2\x79\x1a\x27\xfb\xd0\xf2\xe3\xb4\x19\xc6\x7c\x5a\xb5\x56\xd6\x2b\x6b\x8d\x28\x08\xac\x23\x61\x3f\x4e\xc3\xd6\x40\x6e\xd3\xc0\x47\xca\xe5\xc0\x5b\x69\x26\x17\x78\xd4\x52\x90\x2e\xfa\xdb\xd8\x46\x3a\x0b\x95\x1b\xca\xc3\x82\xb7\xa2\x36\x22\x93\xaa\x3d\x79\x6d\x25\x8a\x05\xcf\xfb\x49\x13\x13\x57\xa8\x8f\xc2\x2c\x8e\x44\xc6\x05\x16\x81\x29\x1c\xf2\x04\xa3\x3e\x6f\x9a\x03\x79\x20\xf0\xd8\x84\x09\xbb\xc8\x44\xde\xc3\x6c\x8e\xd0\x50\x17\x16\x29\x3f\x16\xe6\xc5\x63\x93\x74\x2d\xb9\x2d\x4d\x5b\xf6\x16\x91\xa7\xf1\xaa\xe0\x61\x33\x4b\xf3\x1c\xd2\x3f\x62\x51\x28\xbe\xe1\x06\x3f\x16\x16\xe5\xca\xc8\x8a\x50\x90\x23\x75\x05\xa6\x30\x99\x8a\xe9\xee\xa0\x7a\x6d\xa8\x4e\x20\xa0\x68\x53\x93\xdf\x6c\x86\xb9\x50\xac\xdc\xbd\x1c\x8f\x53\x3a\x5c\x1e\x7c\xe9\x58\x73\x10\x8b\x30\x5b\x97\xfa\xbc\x1d\x9d\x51\x93\xb2\xbc\x14\xa2\x64\x70\x88\x1b\xfc\x89\x69\x0f\x42\x3b\xdb\x52\x8c\x87\x2d\x8c\x94\x09\xe3\x01\x9f\x5b\x4b\x2c\xf5\x96\x21\xbf\x0c\xe8\xac\x01\x37\x80\x3e\x84\x1f\xc7\x04\x34\x7d\x4a\x50\x1d\x19\xa7\x6a\xde\xe3\x26\xb1\xd2\xeb\x84\xc9\xa4\x54\x43\x31\x92\x7b\xd0\x3f\x8b\xc5\x01\x48\xcf\x0d\x9c\xe4\x22\x04\x47\x63\x07\xf3\xb5\x15\x4c\x7b\x4a\x33\x18\x6f\x5d\xb6\x9c\xa9\xfd\x3a\xe4\x23\x90\xfe\x80\xd3\x01\x3c\xbb\x4a\x54\x2c\x45\x71\x54\xf4\xd5\xa7\xf0\xdd\x42\x9c\x29\xca\xe3\x4f\xd2\x2a\x77\xbc\x1d\x7f\xbf\x83\x5d\x1a\xdb\x43\xe6\x7f\x6d\x07\xdb\xbf\x21\xd2\x57\xbb\xd3\x83\x77\xed\x70\x06\x5e\x6e\x80\x69\xa6\x3c\x8f\x83\x93\x08\x8d\xf7\x9a\x56\xb9\x1d\xc6\x31\x57\x33\x48\xa1\x2d\x89\x04\x4e\xfa\x72\xeb\x0c\x13\xea\x42\x77\xf5\xf6\xf2\xca\x05\x8b\xc7\xbd\xd2\x45\x4d\x8f\x2e\x5f\x70\xeb\x4a\x0f\xac\xa9\xb0\x46\xa8\x57\x4b\xe0\x19\xdb\xf6\xfe\x97\x8b\x8c\x72\xe8\xff\x18\x09\x14\x9a\x69\x96\x81\xca\xa7\x1c\x0f\x94\xbf\x25\x4f\x53\x52\x18\xca\x13\xa2\x0a\x31\xde\xbf\x6f\xb2\x13\x25\xbd\x42\xf0\x3c\x0d\x4f\xab\xc3\x3b\x98\xc3\x64\xdb\x74\x55\x50\x18\xa2\x0c\x94\x23\x5c\x51\x03\xa3\x0b\xb4\x87\x55\x92\x44\x36\xb5\x42\x28\x7c\xe7\x28\xa7\x0f\xc3\x92\x1c\xda\x3f\x76\x48\x58\xd4\xae\x10\xdc\xa0\x02\x53\xc8\x7e\x12\xc5\x7c\xaf\x1c\x17\xac\x79\x8b\x8e\x6b\x13\xf5\x8a\x7e\x57\x19\x3c\xb6\x09\xcc\x2e\xa8\x2e\xeb\x14\xaa\x41\x76\x0a\xb4\x1a\x17\xc6\x6b\x61\x3f\x97\x32\xa1\xd7\x11\x2d\xbe\x0c\x35\x96\x22\xc0\x5a\x31\x10\xaf\x07\x4f\x50\x96\x9b\xe1\x3b\x97\x83\x8d\xc1\xc2\x2b\x69\x0b\x1d\x49\x38\xf0\x46\x80\x5b\x8b\xcc\x1a\xe7\x44\xe4\x79\x1d\xad\x05\x11\x6e\x0b\x18\xe6\x2a\x17\x31\xf6\xa5\x71\xb9\xcb\x29\x42\x42\xa4\xdd\x03\x32\x7c\xf6\xd1\x1a\xdb\x81\x74\xf4\xfe\x7b\x6b\xe7\xb2\xe2\x9e\x5d\xa3\x61\xdd\xf0\x52\x8b\x72\x22\xc0\x8f\xfb\x98\xd4\xd4\x50\x33\x83\x24\x3a\xe9\xac\x0a\x89\xc9\xce\x41\x2c\x81\x88\x0f\x6c\x91\xa9\xfb\x78\xd5\x02\xab\xf3\x96\xe8\x0a\x0a\xa6\x4f\xb4\xcc\xdb\xd0\x92\xa6\xed\x06\x4e\x12\x4a\x18\x34\xd8\x3f\x6e\x63\xe3\x6a\x2f\xf0\xbf\xb5\xed\x5c\x7a\xf1\xbd\xdb\x2c\x4d\x63\x33\x22\xab\xc8\x54\x10\x58\x83\xdf\x2e\x97\x6b\xb5\x4e\x66\xad\xd0\xba\x29\xc1\x14\x8f\x9f\xb3\xf4\x16\x4d\xd8\x87\x1a\x0d\xe8\x28\x30\xf1\xa3\xfc\x74\x9d\x87\x71\x2a\xc5\x03\x06\x7d\x92\x58\x88\x30\x4c\x09\xed\x19\x85\x48\x5a\x25\x41\x08\x5f\x34\x79\xac\x74\x64\x85\x57\x41\x93\x4a\xd3\x5c\x28\x07\xb0\xfc\xb4\xa9\x5c\x9d\x2c\xf8\xaa\x5f\xcc\x8b\x51\xa2\x47\xa8\x61\xc6\x0a\xb2\xe6\xb1\xb5\xfa\xcc\x47\xba\x2c\xba\x16\xd0\x53\x08\x25\xac\x84\x39\xe1\x73\xd9\x5d\x8d\x1e\xda\xd3\xd4\xa5\xf6\xa6\x1b\xe5\xc6\x95\x80\xa9\x2c\x59\x84\x21\xe5\xb0\xb8\xab\xe6\xcc\x80\xb6\x2a\xf7\x79\xa5\xe9\x90\x5b\x52\xa9\x3a\x03\x83\xae\x06\x40\x23\xc8\x83\xe2\xad\x1b\xcd\xbe\xbf\x9b\x3d\xbc\xca\xc7\x97\xa5\x4b\xc2\xff\xca\xee\xe0\xd9\x1e\xfc\x69\xab\xdb\x7c\x45\x84\x71\xb1\x42\x7b\x3e\x1a\xd6\xba\x22\x93\x4a\x89\xdc\x17\x96\xc3\x28\xc9\x0b\xc7\xfa\x2f\xbb\x43\xed\x43\x7a\xc1\x44\x14\x16\x21\xdb\x05\x11\x25\x61\xab\x8f\xca\x53\x53\xc8\x6b\x84\xef\xe4\x9e\x06\xfe\x80\xb1\x8f\x79\xec\x47\xf2\x1e\x04\x17\x2d\xac\x64\x22\x5f\x49\xe3\x96\xff\x4e\x1d\x5b\xf0\x1a\x1d\x5b\xd0\x4c\x93\x5c\x34\x7b\xd0\x71\xf4\x82\x30\x28\x8b\xe8\x48\x18\x88\x08\xa0\x07\xdb\xbd\x98\xc6\x7a\x25\x5c\x85\x0c\x5c\x0a\x7f\x2e\x7b\xd1\xc9\x9a\xb9\x1f\xca\x55\x5e\x8a\x06\x57\x75\xb0\x72\xc4\x1c\xaf\xf7\xcb\x3c\xb6\xab\x68\x76\xe7\xd3\xe6\x69\x51\xf8\x77\x6f\xc4\x92\xb6\x70\x70\x16\x1f\x9f\x06\x47\x5d\x70\x52\x5f\xb0\x42\x94\xc2\x44\xfb\xf1\x92\xd5\x34\x5e\x45\xf5\x77\xe1\xe0\x2c\xf2\x22\xc1\x5f\x60\xf0\xd6\x10\x74\xda\xea\xca\xfe\x72\x30\x2c\xea\xb3\xba\x5b\xdf\xef\x9d\x18\x08\xd5\xc0\x0e\x42\xe7\x9f\xd5\xa5\x90\x18\x95\xf6\x8a\x52\x67\xd1\x6b\x95\x7d\x73\xee\x7e\xdd\x6e\x8a\xff\x31\x16\x7e\xcb\xb4\x0f\x15\xca\xcb\x1d\xbf\x4d\x9c\x11\x4d\xff\x05\x1e\x7b\xe4\xba\x7d\x7e\xf8\x8c\x68\x52\x77\x3f\xf1\x64\x22\x08\x43\xc3\x04\x24\xc2\x4e\x98\xc6\x71\xba\x06\x06\x6a\x03\xa2\x61\x6c\xcb\xb2\x88\x52\x0c\x19\x8d\x90\x14\x62\xe1\x69\xd1\x60\xbf\xe4\xb1\x1f\x21\x8f\x96\x99\xd1\x2f\xd7\x5d\x7f\x67\xd5\x84\xa6\xe7\xd7\x9d\xcf\x14\x7b\xef\xcc\x65\x98\xe3\xa2\x55\x9e\xce\x57\xad\x3f\x6d\x4f\xb3\x9d\x72\x78\x6e\x13\x85\xbf\xb8\x81\xcc\xe7\xa3\x0b\x0b\xb3\xb7\xe9\x09\xab\x7e\x96\x7a\x43\x16\xa8\x7d\x80\x45\xaa\x44\x49\x43\xce\xc7\x1f\x85\xd2\xc3\xf8\x90\x88\x43\x1d\x47\xf4\x29\xdd\x33\xef\x19\x3a\x29\x5d\x9f\x94\x14\xd2\xca\x7d\x4b\x2e\x16\xd7\xa1\x88\x61\x06\xf8\xb1\xf3\x8b\x33\xd8\xec\x7c\xbc\x93\x5d\x8a\xca\xab\x6a\x5d\xac\x1a\x77\xfb\xd1\x74\x8d\xa7\xed\x42\x24\x7c\xaf\xc9\xe3\x98\xb0\xba\xc8\x8c\xbb\x09\x0e\x84\xf8\x79\xf5\xf0\xfa\x03\xfa\xd2\x1d\x6c\xcf\x08\xe0\x00\x22\x70\x87\x9c\x0d\xff\x6b\xdb\x83\xe9\xaa\x1b\x25\xab\x4f\x33\xed\x74\xe5\x89\xc0\xc2\x9e\x30\xcf\xba\xd2\xfc\xe5\xdb\xd9\x0f\x4c\x48\xe0\xdf\x7a\xc1\x5b\x3c\x8a\x09\x74\x8b\x54\x39\x2d\x61\x47\x61\xe7\x96\x3f\xa2\xe3\xeb\xce\xc5\x5d\x68\xe2\x49\xa7\xd0\x09\x36\x49\xc5\xeb\xc8\xdb\x7c\x52\x0f\xe2\x05\xc6\x14\x78\x09\xc0\x7e\xa0\x75\xd4\xbf\x6b\x2c\x78\x77\x6d\x4e\xd9\x4a\x4b\x7d\x40\x23\x39\xaa\x0f\x14\x80\x29\x1c\xa2\x74\x39\x51\xce\xd3\x4e\x54\x14\x1a\x20\x51\xb7\x05\x14\x90\x96\x25\x02\x54\x44\x66\x5b\x87\x2d\xaa\xa0\xb2\xb8\x6f\x67\xd0\x43\xb2\xed\x5a\x94\x2b\x37\xbe\x3e\x18\x42\x2f\x4e\xa2\xbb\x81\x0c\xfa\xff\xa7\x8d\xc8\xe7\xb7\x3b\x49\xfe\x0e\x8a\x43\x4b\xcd\x7f\x15\x61\x66\xad\x03\xff\xbe\xed\xc1\x4b\xbd\x69\x44\x3f\x68\x99\xa0\x6d\x9d\x64\x62\xad\x03\xb2\xca\xab\x3b\x98\xc5\xab\x90\xd7\xd1\x0d\x52\x97\x0f\xc8\xa2\x20\xe6\x13\x55\x58\x48\x8d\x24\xc8\x06\x78\x27\x13\x31\x05\xf6\x0b\xeb\x61\x2b\x56\xad\x71\xd6\xdb\x05\x37\x90\x07\x71\x5c\xbd\xee\x2c\xc3\xaf\x8e\x01\x24\xb0\xba\xe7\xaf\x05\x4f\x77\xbc\xda\x50\x00\xb0\x02\xc5\x18\x75\xbd\x12\x75\x95\xdb\x0e\x66\xa2\x72\xdc\x3c\x5e\x2a\xa2\xba\x8a\x28\x54\x67\x92\xba\x3c\x78\xcb\x7f\x20\xb7\x26\xaf\xf3\x43\xa9\xc8\x4f\xa4\x05\xfc\x74\xac\x38\xc7\x99\xa9\xac\xff\xe8\xe0\xaa\x85\x52\xc4\x2b\x36\x51\xdb\x31\x74\xff\x85\xdd\x6e\x8c\x5a\xb4\x53\xdc\x0b\x6a\x6c\x07\x56\xcd\xff\x81\x17\x7c\xd5\x9b\x4e\x38\xf8\x55\x60\xbb\xb0\x3c\x22\xb9\x36\x3a\xe8\xde\x8d\x72\x3e\x93\x48\xb5\x94\xaa\x5e\x18\xb4\x1f\x2c\x42\xc5\x73\x27\x69\x32\x09\xe6\xad\xca\x32\xb0\xc5\xb2\x1c\xbb\xcd\x23\x8a\xa3\xa2\xc0\xf4\x82\x77\x28\x7a\x10\xb2\xdd\x28\x55\x2d\x54\xf9\x3b\x51\x13\x09\x1d\x38\xa4\xe1\x8c\x42\xae\x78\x87\xc7\x9e\x64\x26\xb5\x01\xae\x98\x0c\xbb\x11\xc0\x53\x67\xc6\xbb\xe1\x3c\xa0\xc3\xa1\x1f\x33\x7f\xf2\xc4\x3c\xb8\xf8\x66\xb3\xb4\x9b\x2b\xbc\x88\x69\xf9\x39\xff\x44\x70\x6c\xd4\x7d\x37\x46\xba\xf4\x24\xe2\x3e\xd0\x78\x40\xed\x1b\xec\xaf\xc7\xd9\xfe\x75\x38\xcc\x06\x01\xad\xfc\xdf\x1a\x0f\x7e\xde\x1b\xbc\xae\x4e\x96\x65\xd8\x34\x00\x4c\xab\x02\xbc\xba\x30\x48\x57\x67\xbd\x1d\x88\x75\x74\xd6\x63\xf8\x15\xe2\x22\xc5\xab\x80\x8a\xe1\x2c\xc3\x7f\xd8\xc1\xde\xeb\xb1\x4b\x08\x45\x0a\xee\xfb\x6f\xdb\x8c\x63\x6a\x50\xae\x05\x6d\xbb\x34\x0d\x5a\x64\x01\x4f\xe9\xd4\x1b\x7c\x4e\xfd\xa4\x6e\x21\xd3\x6b\x08\x66\x95\x58\xac\x86\x09\x41\x22\xec\x05\xf3\xdf\x1d\xf4\x99\x09\x76\x8c\x59\x6d\xf4\x6f\x0e\xf6\x9b\x5f\x55\xa1\xeb\x54\x7c\x94\x70\xd8\xa3\xa2\x34\x71\x16\xee\x17\xed\x98\xe0\xcf\x5e\x88\x98\xe0\x5f\xa8\xe5\x56\x4c\x30\x1e\xe8\xe5\xa7\x26\x15\xbf\x84\xe2\xa2\x90\x33\x91\x5c\x79\xd6\x34\x88\x07\xd3\x05\x65\x19\x08\x97\x41\x8d\x81\xa3\x3e\x24\x96\x47\x85\x15\x19\x16\xe2\xa1\xcc\x98\xef\x75\x44\x83\xf2\x14\x29\xf8\x29\x5c\x87\x50\x78\x47\xee\x98\x2a\xf8\xde\x3c\xd0\x4c\x01\x03\x02\xbe\xd4\x4b\xe0\x5b\x4f\x97\x82\xc3\x94\x02\x1d\xae\x62\x6b\x55\xdc\xc3\x72\x88\x51\x5b\x58\x0c\xe0\x08\xd0\xd4\xf4\x57\xd9\xd1\x4d\xe0\x8c\x8d\x64\x0e\x0c\xae\xa0\x79\x15\x69\x20\x29\xe2\xd9\x18\x84\xe5\x63\xf7\x7a\xcc\x5e\x07\xfe\x9d\xe7\x37\xcd\x6f\xb6\xca\x1a\x35\xcb\x15\xe2\x99\x3b\x7b\x1b\xec\x97\xb7\xb9\xf2\xc6\xa6\x15\x98\x2f\xc2\x42\xb4\x7b\xf1\xbc\x28\x10\xd6\x47\x65\x55\xfa\x7f\x3b\x16\x7c\xd6\x1b\x7a\xdb\x12\x3b\x34\xdf\x28\xe5\x52\x6d\x5f\xd6\x9b\x03\x69\xd4\x94\x94\xa9\x14\x7d\x32\x46\x21\xf3\x4e\xd2\x8c\x7b\x2d\xf2\x7b\x56\xcd\xab\x9c\x27\xa2\x29\xf2\x3c\x44\xd3\x9e\x7d\x58\x20\x3c\x17\x35\x7f\x55\x0d\x5b\xba\x76\xa5\x40\xdd\x1a\xfb\xb0\xc7\x2e\xcd\x6c\x50\x23\xff\x1d\x1e\x3b\xb2\x31\x42\x06\x07\x0c\xc9\x6a\xad\x4e\x4b\x5d\x72\x9e\x40\x6f\x9a\x8a\xf1\x01\xcf\x78\x13\x68\x80\x4c\xc3\xc0\xa1\xb0\x40\xf8\x6b\xeb\x15\x2f\x9f\x6b\xb0\x13\x04\xdd\x76\x24\xb8\x1e\x5f\x74\x46\x45\xe1\xb7\x95\xc6\xc3\x1d\x49\x47\x36\xbd\x7e\x8c\x5d\xb1\x11\x9a\x11\x9a\x23\xdf\xae\xb9\x44\x23\x34\x09\x06\xd0\x2c\x36\x92\x7e\xeb\x8c\xcd\xab\x6a\xec\x97\x07\xc6\xe6\xd5\x23\x20\xcd\x47\x8c\x8d\xa9\x60\x70\x6a\xce\xc1\x9c\x32\x76\xdc\x2c\xec\xe4\x0d\x3e\x4b\xa6\x75\x30\x82\x44\x6d\x3e\xd8\x34\xe8\xe4\x9b\xdc\xc1\x69\xb0\x15\x1a\x85\xc5\x60\x7e\x81\xba\xdc\x4e\x89\x3e\x88\x08\x36\xc1\x9c\xc0\x30\x6d\xc2\xc6\xb3\xcb\xb0\x12\xe0\xca\x63\xef\x8c\xcf\x57\x76\x39\x9c\xe3\xe6\x44\xab\x63\xfe\x0f\xea\xb5\x06\xc1\x57\xef\xda\x15\x1c\x1e\x7a\x97\x40\x79\x1c\x20\x32\x2b\x7d\xc0\x5a\xb7\x43\x62\xb3\xbe\xb5\x15\x9b\xb5\x69\x56\x2a\x1d\x9b\xf5\x71\x2f\x78\xe6\x31\x8a\xc6\x1a\xd6\xeb\x17\x31\x25\xc4\xd6\xa7\x0f\xb0\xeb\xd8\xa3\xd6\x35\x78\x55\xce\xa3\xad\xa8\xac\x7f\x43\x51\x59\xe1\xfa\x51\x59\x37\xfb\x37\x56\x45\x65\x0d\x95\x41\xe5\x08\xad\xb7\xbb\x80\x35\x39\xe2\xbd\x81\x96\xb6\xbf\x31\x9b\x45\x69\x16\x15\xfd\x83\x71\x98\xe7\xfe\x3f\x5d\x1a\x3c\xd3\xb9\xa2\xa5\x8d\xc2\x19\x85\x89\x12\xf2\x2e\x3d\xc4\x9b\xf0\x14\xe8\xea\x24\x2c\xf4\x2d\xb2\x19\x2a\xab\x8e\xc9\x6d\xd6\xd0\x7e\x7d\x74\x45\xa9\x27\xa5\x44\x5c\x1d\x38\xe6\x3c\xfb\x92\x2d\x89\xb8\x49\x89\xf8\x42\x8f\xed\xb6\xc2\x71\xfc\x67\x05\xa9\x1d\x9d\x83\xa0\x59\x86\x08\x8f\xe4\x0a\x28\x9a\x3a\x3c\x09\xd9\x23\x73\x0e\x84\xd2\x31\xf4\x2f\x7a\xaf\x09\xae\xb0\x34\x03\x8c\x2f\x83\xb0\x21\x4c\x6d\xde\x3e\xc6\x2e\x45\x5c\x6e\xda\x90\xfd\x57\x8e\x05\xcf\x1b\x73\x2e\x59\x36\x7e\xe5\xef\x83\xaf\xb8\x93\xd1\x7c\xc4\x4e\xb1\x55\xc7\x07\x2c\x48\xd7\xab\xed\x50\x24\xb5\x52\xf0\x60\x01\xba\x21\x06\x00\xda\xd5\x6f\xf0\x93\xca\x4b\xe3\x7e\x91\xa6\x6a\x27\xcc\x4e\xe3\xa7\x16\x9d\x6a\x2f\x36\xf8\xd1\x74\x4d\xac\x82\x69\xb4\x8d\xc7\x30\x60\x30\x1d\x28\x49\xe4\xa8\xaa\x91\x8e\x86\x08\x86\xa5\xc2\x14\xb6\x3a\x46\x82\x14\x99\x9c\x51\x70\x14\xe8\x84\x71\x2c\xa7\x9b\x3e\x9b\x40\x9a\x13\x61\x9d\xab\x86\x97\x3f\xe7\x9c\xea\x86\x74\x92\x8b\xe1\xb1\xb5\xef\xfc\x5b\x62\x96\xfe\x65\x8f\xa1\xb4\xf5\xdf\xa0\x1d\x64\x2f\xf0\x8c\x94\xd6\xb1\x52\xa5\x95\x62\xb3\xa4\x85\xcd\xa2\x27\x8f\x92\xea\x11\xc4\xcf\x42\x90\x75\xf4\xca\xab\x90\xae\xbe\x21\x06\x33\x86\x9d\x28\x27\xe9\x61\x30\x3d\xd3\xd6\x20\x4f\xd8\x03\x5e\x6b\xfd\x5d\x72\xda\xbf\x45\xef\x92\xd6\x16\x57\x02\x77\x73\x16\x49\x79\xa3\x7c\xe9\x98\x83\x7f\x41\x44\xcd\x72\xa8\x30\x5b\x06\x62\x0c\xfd\xff\x59\x0b\x0e\x59\xbf\x79\x33\xec\x16\xe0\x59\xd5\xd1\x7a\x3a\x82\xcf\x36\xc1\x52\xfe\x08\xa5\x27\x29\x03\x96\x75\x3a\x7b\x97\xc7\x76\x52\xe4\xa5\xff\x16\x2f\x78\xa5\x87\x06\x51\xde\x12\x45\x68\xe2\x93\x87\x7e\x61\xba\x28\x00\xd8\x38\xe3\x87\x04\xfe\xa5\xbf\x84\x43\x46\xab\x58\x2e\xc0\x25\xc1\xe3\x74\x79\x59\xb4\xea\x3c\x4f\x79\xe4\x44\x59\x92\x5b\x81\xe7\x22\xc9\x23\x70\x1d\x5b\xf1\xa3\x8e\x5c\x5f\x62\xdb\x8a\xa8\x23\xfc\x27\xb1\x6b\xcf\x61\xf6\x2f\x44\x1d\x11\xfc\x8c\xfc\xaf\xd5\xae\xb5\x30\xb7\xdb\xd6\x60\x1f\xdd\xce\x9e\x76\x7e\x76\xe8\x83\xbd\xbc\x48\x3b\xca\x0f\x73\x48\x57\x53\x73\x3e\xfa\x5f\xda\x16\x3c\x71\xdd\xa7\x8c\xbb\x05\xc7\xc3\x38\xd2\x55\xec\x97\x01\xa7\xd3\x2b\x27\x6d\x29\x46\x8c\xb3\x1e\x51\x99\xbb\x28\xe8\x63\xec\x65\x1e\xf3\xe3\x30\x2f\x16\xb2\x10\xfa\x3b\x4d\x64\x97\xf8\xcf\x3c\xf7\x3e\x7d\xf4\xb1\x30\x2f\x10\x9a\x8e\xbc\xda\x54\xad\x42\x7f\x42\xc1\x18\xcb\x5d\x8a\x02\x95\xc0\x2f\x07\x6e\xba\x06\x7b\x82\x99\x88\xc7\x83\x47\x1f\x75\xc3\x7c\x4d\x70\xb0\x0e\xbf\x52\x3d\x82\xd1\x85\x31\x7c\x5e\x7f\xcb\x99\x32\x4f\x65\x3b\x30\x35\xd6\x5f\x08\x6e\x3b\x95\x44\x77\xc8\x2d\x2e\x4d\xc4\xe4\x1a\x04\xbb\x6b\x29\xee\x24\xd0\xda\x8d\x00\xb4\x83\xe1\xe5\x3f\x49\x33\xc6\xcf\x06\x07\x5d\x96\xd6\x81\xe4\x02\x2c\x50\xdb\x12\x16\x60\xbb\x3d\x12\xc6\xb9\xa8\xf3\x53\x09\x70\x16\x38\x65\x5f\x4b\x26\x89\xa9\x20\x58\xa8\x40\xf4\x77\x4b\xb5\x5f\xfc\x83\x71\x76\xd5\x48\x68\xac\x21\xb0\x58\xaf\x1a\x0f\xde\xe2\xfd\x1f\x06\x89\xf5\x17\x3b\xd8\x27\x3c\xb6\x5d\x9c\x29\xb2\xd0\xff\x90\x17\xbc\xc4\x3b\x2c\xff\xc4\xe0\xd1\xbc\x0b\x11\x17\xa4\x42\xf7\x72\x91\x35\x66\x92\x76\xda\xb8\x4d\x14\xf0\xd4\xde\x09\x15\x8f\xaa\xd5\x02\xd9\x59\x72\xf3\x6a\x86\x45\x9a\x35\x38\x9f\x8f\x10\xed\x19\x9d\xcd\x51\xd2\xed\x15\xaa\x3c\xd5\xaf\x18\x2a\x86\x9c\xb5\x21\xcf\x44\x5b\x99\x62\x80\xce\xf9\x7e\xef\xa7\xd8\xff\x6f\xb8\xe3\xcb\x76\xec\x9e\x60\x3b\x60\x3f\xc9\xfd\x43\xc1\x5e\x60\x59\xd4\x93\x09\xaf\xf3\x7e\xda\xdb\x23\x35\x3e\x81\x26\xb8\x76\x9a\x8d\xf2\xa9\x6d\x61\x85\x5d\x2c\xac\xb0\x9b\xd9\x58\x2f\x6a\xf9\xd7\x06\x57\x9c\x9a\x39\xe4\xbc\x67\x02\x9e\xe9\x59\x30\x55\xe6\x25\xec\xa3\x5f\xf5\xd8\x36\x79\x11\xf7\xdd\x53\xb9\xc1\x4f\x92\x57\xab\x86\x99\xcf\xb4\xe5\x65\x45\xce\xcf\x03\xf9\x52\xa0\xb9\x5a\x03\x9c\x2e\x01\x81\x06\x47\x88\xf9\x23\x37\xb5\x6e\x26\x28\x1a\x3e\xb8\x9d\x22\xcb\xe1\x7b\x6b\x22\x43\xf2\xd6\x90\x77\x84\xe6\x3b\x4d\xfa\x34\xd5\xec\xda\xde\xb5\xdd\x71\x3e\x8c\xb4\x25\x99\x5d\xee\xf7\xb7\x05\x4b\xa3\x1f\xa9\xc8\xc6\x12\xe8\xe2\xaa\xb6\xa5\x01\xb2\x39\x6f\x8a\x0c\xf4\x05\xd0\xde\x47\x6f\x77\xff\xd7\x18\x3b\xa6\x05\xf4\xad\xc1\x35\xf3\xd5\x22\xb9\xae\x64\xd5\xba\x22\xf9\x66\x12\xc9\x8f\x0a\x26\x94\x95\x78\x48\x55\xab\x25\xf3\xab\xaa\x37\xdf\x9f\x3b\xf7\xcd\xf7\xd0\x02\x18\x07\xce\x73\x03\x7e\xa2\xd9\x80\x4f\x04\xd3\xd3\x98\x69\xc3\x37\xbe\x05\xc3\xbe\x54\xbd\x43\x1e\xd1\x3b\xf0\x8d\xc1\x54\x19\xaa\x62\x13\x3b\xed\x57\xc7\x59\x63\x1d\x6a\x0b\x83\x10\x86\x23\xfe\xce\xf1\xe0\x96\xf2\xc5\x01\xb4\x3e\x8b\xd8\xbb\x97\x57\x21\x88\x29\xa0\x1f\x67\x66\x7d\x7e\x27\xbb\xbb\xe6\x90\x8c\x7f\xd7\x0b\x4e\x6c\x9e\x64\xdc\xc2\x5d\x1a\xc9\x32\x7e\x90\x4d\x8f\x90\xd8\x23\x3b\xe3\xe2\x72\x8d\xbf\xd0\x63\x3f\xd6\xee\xc5\x71\x1f\xdc\xd9\x16\xcb\x73\xae\x8e\x78\x4f\x75\xf1\x7b\x8d\x85\x04\xce\x67\x36\x19\xb7\x3a\x72\xd0\x35\x5a\xa6\x36\xf6\x94\xba\xa6\xc6\xa4\x4c\xfc\xfe\x73\x95\xcc\xe7\x91\x62\x3e\x5f\x38\x39\x70\x53\xed\xd7\xb4\xcd\x5a\xac\xe8\xe4\x90\xad\xe6\xda\x1f\xc6\x3c\xff\x84\x32\x31\xfa\x6d\xaa\x1b\xae\x74\xbb\x01\xa3\xc9\x35\x88\x94\xc6\x86\xb7\x81\xb8\x9c\x92\xff\xd4\xc6\x6f\xb6\xe9\xfa\xcb\x50\x6d\xe5\x1a\x63\x85\xed\x2f\x2b\xe0\xb6\x1f\x16\x84\xb5\xe7\x55\xb2\x72\x77\x55\x13\x9f\xec\xf6\x9c\x59\x4e\xba\xf7\x36\xc4\xcb\xbd\x7e\x17\xff\x33\x73\x3c\xa7\xc3\x88\x31\x88\x92\xc2\xff\x2c\x0b\xde\xe8\x0d\x5e\x37\x34\x17\x52\x1d\xb4\xee\xd7\xf5\x6e\xad\x8e\xbc\x51\x81\x4c\x5c\x4d\x10\xb6\xf4\x96\xfb\x92\x4a\xef\x20\xdb\x9b\x4e\xc3\xa7\x78\xbb\x56\x0b\xc0\x9f\x1d\x15\x64\x35\x0a\x39\x69\xf1\x8d\xb3\xde\xce\x2c\x95\x9d\xda\x76\xc4\xd7\x6b\xc7\x1f\x44\x56\x88\x4f\x7a\x4c\x55\xc2\xff\xa0\xc7\x26\x37\x46\xc5\x30\x87\x6f\x04\x3f\xef\xd1\x5f\xd0\x4b\xe0\xd6\xdd\x64\x57\xe9\xc0\x37\xab\x20\xb2\xe8\x51\x1e\x2c\xa5\x0c\x4d\x1b\x85\x1e\x8e\x1b\x99\x28\x7a\x99\x9d\x07\xf5\xf3\x1e\x1b\xcf\xb1\x67\x73\xff\xce\xe0\x26\xea\x65\xc5\x72\x61\x0d\x3c\x1d\x11\x0c\x36\xa8\xe0\xb2\x0b\xdc\x40\x40\x23\xde\xf7\xb3\xa9\x8d\xf6\x0b\x7d\x73\xcb\x45\xb1\xc5\x65\x7d\xd1\xb8\xac\x57\xd7\xb7\x7e\xce\xfb\x8f\x3b\x37\x8a\x0b\x92\x92\x95\x4c\x17\x7f\x3f\xee\xe0\xdd\x1a\x7b\xa8\x0a\x74\x82\xdf\x60\x4a\x85\xc8\x88\x4f\x8c\x07\x57\x97\x2f\x56\x05\x44\x50\x41\x68\xfb\x1d\x06\x52\xf3\xa2\xad\x40\x88\xcd\xae\xa9\x42\xc5\x41\x9c\x0e\x2e\xaf\x44\xa8\xb1\x07\x47\xbe\x6a\x24\xde\xf5\xec\xda\x11\xa4\x3c\xa3\x46\x7e\x6b\x25\x6f\xdc\x6b\xf4\x7e\xdb\x6b\xf4\x8e\xf3\x8c\x56\xe8\x54\x47\x2b\x5c\x24\x77\xd1\x03\x5e\xb4\xbe\x14\x3a\xe2\x1f\x32\x3e\x18\x9a\x33\x25\xd1\x53\x96\x0f\x95\x82\xe7\x05\x9e\x7d\xb8\x1c\xd1\x19\xc7\xa3\x66\x96\xc2\x99\xfd\xf1\xfe\x2e\x39\xae\x93\xf2\xd8\x1d\xdc\xac\xaf\xcb\xa9\x68\xe5\x70\xc3\x25\x70\xc0\x76\xe4\x13\x14\x8f\x0d\xdc\x69\xbc\x9b\x89\x26\x30\x9f\x38\xe7\xdc\x97\x5d\xe2\xc0\xdb\x38\xb0\xd8\x56\x00\xa0\xff\xcd\xdd\xc1\x9b\xc6\x0e\x1d\x9e\x9d\x3b\x7c\x70\x7a\xe1\xf0\x21\x3e\x89\x4e\x17\xe8\x0c\xbb\x06\x76\x10\x27\xf2\x7c\x64\x02\x43\x2a\x97\xfa\x52\x1d\xc9\xa7\x56\xf7\x4f\x59\x0f\xc9\x35\x20\xe8\x90\x05\xe0\x62\x52\x63\xa5\x34\xbe\x8e\x1a\x69\xe5\x9d\x71\x4a\x77\x71\xc6\x31\xf1\xc2\x04\x09\x82\x03\x1d\x20\x0a\x29\xd5\xb7\x00\x8c\x94\x19\xfd\x37\x01\xe9\x62\x62\x4e\x98\x1f\x60\x7c\x92\x9f\x10\x85\x3c\x75\x1c\xe0\xd3\x0a\xb8\x9c\x70\x20\x0e\x9d\x98\x47\x8a\xdd\x34\x2f\xa4\xa2\xd7\x90\x4f\xd3\x50\x1f\xe0\xd3\x72\x01\x27\x7d\xc2\x9c\x3b\x18\x87\x51\x27\xe7\xa1\x5e\xa1\xa2\xd5\x60\x0b\xa5\xf8\xd6\xe5\x5e\x98\x85\x49\x21\x14\x0c\x45\x48\xb1\xd3\x09\xd6\x40\xd5\xb9\x8f\x5e\x6e\xc2\x42\xe8\x84\x5d\x25\xa8\x01\xd9\x50\xed\x33\xea\x61\xd7\xe5\xf6\x85\x9d\xac\xcf\xb6\xe5\x5d\xd1\xf4\xef\x18\x21\xfb\x86\x8d\x38\x40\x19\x5f\x37\x94\x0e\xd7\x74\xaa\xee\xf7\x88\x22\x27\xe4\x41\x87\xbd\xc7\xd3\x96\xb0\x5f\xf1\x86\xdb\x9b\x86\x7f\x1e\xde\x0d\x12\xd7\xc9\x31\x68\x3e\x99\xb5\xbf\xec\xcc\x2b\x98\x9f\x20\x31\xc8\x25\x98\xf6\x90\x76\x57\x1e\xec\x97\xfa\x3c\x4f\x61\xad\x24\x2d\x48\x2b\x44\x82\x82\xad\x2d\x79\x4b\xcd\xbd\x58\x9b\xe3\x63\xad\xbd\xf1\x96\xf3\x3c\x01\x3f\xe0\x3d\x69\xfd\xdd\xea\x5a\xff\x9a\xc9\xf2\xe6\x73\x25\xe3\x6a\x03\x93\x2b\xcf\xda\xb6\xf4\xca\x61\xec\x63\x2e\xd8\x37\x2d\xd1\x86\xa1\xef\x7d\xf3\xee\xe0\x5a\xc3\x09\x3a\x8a\x90\x04\xcd\x8e\x86\xc2\xd7\x15\x51\x77\xb3\xad\x09\xf4\x6f\x2a\x26\xe7\x63\x1e\xed\x48\xef\xf7\x46\xa4\xcb\x0f\x4c\x38\xd8\x8b\xee\xf1\x16\x86\x72\x08\x82\xa4\xd7\x73\xec\x02\xd7\x5e\x56\x78\x32\x4c\x5a\x93\xb8\xeb\xb0\xd7\xd7\xf4\xd6\xf6\xf2\x51\xfc\x00\x83\xcd\xc0\x3d\xed\x4b\xd0\x90\xc1\xad\x6c\xa0\x19\xe7\xb2\x83\xf1\xd9\xb4\x4b\x4c\xce\x84\x1a\xac\x60\x82\xe7\x44\xd8\x9a\x4c\x93\xb8\x7f\xb1\xfb\x67\x6b\x0f\xdd\x24\xc5\xe7\xfc\xfa\xb2\x7c\x9f\xdf\x98\xac\x14\xdc\x7a\x72\x95\x83\xbd\x3e\xee\x39\xc1\x5e\x6e\x0a\x57\x33\x8c\x91\xec\xe8\x0d\x5e\x70\xbd\xfe\x55\x72\x90\x86\xc6\x69\x8d\x89\x80\x90\x25\x9a\xf7\x96\x54\x2b\x1c\x59\x7e\x8a\xcd\x5b\x1e\x03\xe3\x87\x50\x0b\xd6\x58\xd4\xa3\x24\x2f\x42\x30\x5b\x2a\xa7\x1c\x94\xac\xe4\x90\x6b\x24\xff\xad\x5a\x25\x20\xc3\xb1\xb4\x19\xc6\xa5\x84\x3b\xff\x85\xb5\x20\xaf\xba\x61\x62\x9b\x44\x92\xf6\x96\x57\x1c\xf3\x75\x91\xf2\x58\x14\xe0\xec\x8e\xd3\xa6\xc2\x8a\xb4\xb8\xa3\x69\x63\x89\x20\x20\xd7\x28\xdf\xc6\xde\xeb\x74\xc3\xf3\x3d\xf6\x5c\x8f\x6d\x93\x77\xfd\x67\x05\xe9\x09\x2b\xc9\x93\xca\xbc\x28\x50\xb9\x53\x97\xc3\x3f\xf6\x76\xf1\x1b\xbb\x37\x9e\xf8\x03\x73\xe1\xd9\xbb\x83\xc7\x0e\xbd\x3b\x82\x01\xa9\xda\x25\xed\x76\xcb\x5b\xd9\x16\x05\x12\xcc\xe7\x37\xd9\x14\x48\xaf\xd0\x14\x48\x3f\xf8\xd7\x4d\x81\xb4\x29\xff\xdc\xfb\xc6\xac\x6c\xe7\x5f\x1d\x0b\x5e\x34\x76\xee\xfc\x45\xba\x57\x89\xc0\x68\xa6\xcd\xed\xc2\x08\x88\x33\x22\x5b\x05\xf4\x86\x61\xaf\x20\xc7\x70\x57\xe7\xf8\xc1\xd5\x59\xcb\x41\x7c\xc1\x19\x91\x4a\x8b\x08\xa2\xee\xa1\x92\x6e\xed\x94\xcb\x3a\x29\xd5\xe6\xc1\x60\x48\xba\x7f\x44\x48\xd9\x6f\xdb\xe4\x49\xbf\x7e\x2e\xe4\x49\xff\xf4\x20\x92\x27\xc1\x32\x2a\xc2\xd3\x02\xc6\xb8\x29\x5a\xb0\x59\xc0\x94\x0a\xb9\xaa\xc6\x9c\x68\x3f\x78\x34\x4b\xbf\xb9\xad\x52\x66\x2f\xf4\xbb\xa2\x55\xb9\xe5\xdd\xb5\x2d\xf8\xcf\x43\xef\x9e\xc3\xbe\x27\x8f\x1e\xad\x4d\xed\x7e\x67\x3d\x38\xbf\x9d\xf5\x60\xcf\x73\x84\xfe\xd7\x6b\xec\x0b\x1e\x1b\x0f\xbb\x11\x84\x8b\xf9\x7f\xe0\x05\xff\xd5\x9b\x9e\x9d\x81\x5f\x4e\xa8\xa1\xd6\x04\xf4\x99\x6e\x49\x38\xbe\x6d\x84\xf0\xb1\xdf\x75\x08\x93\xeb\xf6\xde\x24\x5a\x1c\xce\x91\x2a\x86\x93\xfc\xb4\xb2\x33\x81\x5f\x07\xbe\x88\xf4\x51\xb0\x47\xa8\x6c\x9c\xac\x35\xd9\x0d\xb3\xa2\x0f\x9d\x90\xd7\x9d\xaf\x69\x24\x21\x7b\x87\xbd\x95\x8e\xae\x07\x82\x49\x75\x70\xb5\x23\x66\x87\xb6\xa5\x54\x06\xe8\x0a\x07\x82\xc9\x2a\x70\x88\x0d\x95\xf1\xde\xcb\xd8\x8d\xb6\xaa\xd7\xea\x44\xc0\xbd\x99\x89\xe5\x08\x62\x68\x30\x5c\x11\x75\xbf\xdb\xc5\xd2\x4a\x9a\x9e\x46\x1e\x4d\x62\x19\xfd\xbb\x4b\x83\xc7\x57\x5c\x37\xf3\x07\x93\xe3\x9d\xc9\x83\xd8\xab\x7c\xe1\xd8\xbc\x22\xa0\xd0\xbc\xe5\xf2\xe9\x35\x2c\xce\x99\x0f\x2f\xbe\x94\xfd\xae\xc7\xc6\x9b\xe1\xad\xbd\xa4\x15\x0b\xff\x7d\x9e\xbf\x6d\xa9\x5f\x88\xe0\xad\xde\xa2\xba\xb8\x88\x32\x7e\xf6\xf0\x71\xae\xa0\x28\x0e\x4e\xf3\x25\xb8\x47\x4a\x40\x19\xce\xc1\x01\xf9\xa6\xef\xee\xd1\xf0\x11\x4d\x91\x15\xa8\xb0\xa0\x67\xde\xda\x00\xeb\x8a\x80\xac\xc8\xc0\xff\x9e\xa6\x45\xae\xa4\xbc\x8e\xbf\x07\x99\x31\x90\xf3\xf5\xfb\x35\xb6\x33\x47\x7a\x52\xff\x23\x35\x76\xdb\xf0\x43\xe0\xc8\xc1\x20\x86\x53\x83\x19\xf1\x5d\x6f\x91\x8a\xa5\x8e\x30\xc1\x07\xca\xf2\x8b\xb7\x4d\x7c\x09\xb5\xb8\xc1\x0f\x23\xbc\xab\x29\x20\xcd\xf8\x62\x2f\x8b\x17\x4d\x34\xb3\xde\xfa\x19\xa3\x20\x05\x7a\x1b\xe6\x78\x2f\x01\x74\x5c\x8b\xfe\xa8\x89\x8e\x54\x0a\xf3\xec\x1b\xf4\xdd\x5e\x2e\xcc\x87\x1a\x8c\xcd\xa6\x59\xc1\xaf\xbe\xfa\x2a\x77\x70\xa4\x1c\x86\xad\x35\xed\x8a\xc4\x46\xc9\x22\xac\x4b\x1d\xe9\xf0\xdd\x71\x36\xd6\xcb\x62\xff\x5b\xe3\xc1\x97\xc7\xb1\xce\xcb\xd1\x2a\x89\x79\x10\x4f\x56\x8c\x14\x55\x19\x98\xd6\x34\x38\xc9\xa9\xb9\x63\x88\x59\xb2\x77\x11\x0e\x7f\xe2\xc0\xd4\xd4\x4a\x9a\x17\x07\xba\x69\x56\x4c\x75\xc3\x62\x65\x71\xa2\x51\x0e\x16\xc7\x2f\xa5\x76\x9f\x55\x75\x95\x3c\xae\x2f\xca\xc2\x16\x5d\xb8\xee\x36\x6e\xe8\xa1\x1e\x13\xd5\x83\x6e\xef\xdd\xa0\xd1\x6f\xcd\x67\x30\x13\x4e\x9e\x84\x44\xd8\x22\x42\xae\x14\xc2\x88\x96\x57\x9c\x50\x11\x08\xaf\x11\x67\xe8\xe0\x7a\xe8\xc4\x3c\xb4\x5a\x1e\xfc\xf5\x0c\x25\xb0\xf7\x3a\x5f\x94\x7b\x92\xc9\x1c\x59\x54\x91\x27\x0a\x7e\x3d\x4a\x26\xa9\x4a\xe8\xd0\x50\x9c\xe1\x4a\x7f\x96\xaa\x55\x5f\xa0\xdd\x2d\x4a\x11\xdb\x6a\xa2\xa1\x9a\x2e\x4f\xca\x8a\x5f\x29\x4c\xf8\xcc\x2c\x0f\x5b\xad\x4c\xe4\xb9\x1c\x7e\xe3\xba\x51\x69\x96\xb2\x94\x45\xc0\xb8\xc5\xd7\x65\x2f\xef\xbf\xf2\xda\xc6\xbe\xc6\xbe\xc6\xfe\x45\x84\xcb\xa6\x92\xe5\xdc\x8b\xf2\xd3\x7d\x45\xaf\x27\xe7\x19\x90\x01\x2e\xcb\xfd\x9c\x37\xe5\x0a\x2c\x52\xd9\xbb\xce\x8c\x07\x9c\xa1\x38\x86\x8e\xcb\x49\x36\xc8\x67\xc2\xc4\x5a\xbd\x78\x19\xbb\x35\x11\x28\x30\x40\x74\x35\xc3\x38\x36\xc0\xb9\x7a\x11\xcd\xf7\x40\x5d\xcb\x0b\xb8\x1d\x02\x32\xe2\x69\x11\xf7\x49\x73\x4b\xd2\x64\x52\xce\x28\xa9\xef\xd7\x79\xd4\x10\x8d\x3a\x4c\x06\x11\xe6\xf0\x08\x44\xf0\xc8\x2d\x23\xc1\xb3\x8a\x9a\x03\x34\x8b\x70\x6a\xea\x49\x16\x80\x32\x11\xdc\x00\x93\x43\xce\x60\xba\xb1\x1c\x91\x24\x0d\x94\xb6\x11\x34\x18\x9b\xe6\x72\x1a\xe3\x72\x2a\x00\xe3\x04\x4d\x18\x51\x5b\xab\xa8\x64\x27\x92\xdb\x1a\x19\x50\xbb\x22\x03\x01\x44\x50\xd5\xa1\xfc\x0c\xe2\x68\xcb\x67\xd5\xc4\x84\x82\x8b\x14\x30\x7a\xaa\x73\x67\x53\x77\xe9\xb9\x64\x10\xaa\x95\x06\x55\x57\x36\x78\x7a\x00\x01\x3a\xc4\x78\xf3\x34\xe3\x4b\x61\x1e\x35\x21\xa5\x81\x03\x51\x41\x20\x6f\x1c\x90\x9f\x5f\x4b\xb3\xd6\xa3\x03\xb5\xc3\x6b\x14\xc3\x23\x59\xb8\x8c\xe8\x8a\x7b\x83\xcb\x1b\x8d\x46\x30\x01\x6d\xc7\x53\x80\x85\x88\xb2\x37\xb8\x85\xee\xaa\x78\x73\x2c\xa1\x4e\xe8\xd7\x8e\x14\xff\x3d\x8f\xcd\x5f\x60\x14\xb0\x5b\xd3\x34\xf6\xef\x08\xd2\xca\x1b\xb6\xa9\xbc\x12\xf5\x8b\x32\x55\x55\x4a\xb9\x7d\x3e\x2b\xb2\x9e\x01\xaa\x51\xcf\x75\xb3\xb4\x2b\xb2\xa2\xdf\x60\x1f\x60\xae\x0e\x30\x80\x55\x74\x65\xe3\x68\x9a\x45\xcf\x90\x3b\x7a\x3c\x9b\xb6\xa6\xe9\x01\x91\x51\xf4\xf2\x3f\xee\x0a\x9e\x34\xf2\x89\x32\xac\x65\x45\x24\xf3\x8a\x7e\x1f\x74\xf3\x50\x97\xd0\x38\xeb\x3d\x84\x5e\x50\x27\xb2\xb3\xde\x43\xe8\x60\x6b\xae\x58\x01\xce\x8e\xe2\xf0\xa5\x71\xf6\x7d\xcf\x09\x7f\xfe\x6b\x2f\xb8\xd7\x33\xbf\xb5\x75\x42\x10\x12\xa4\xbe\xa1\x14\x37\xb3\x5f\x9a\x5a\x19\xe8\xb3\x48\xf6\x31\xe0\x23\xd1\x92\xd2\xa0\x38\x25\x0a\x87\x62\x25\xcd\x85\x5d\xbe\x9c\x66\x1d\xf0\x6b\x98\x60\x93\xc7\xb1\x93\xec\xf8\x26\x60\xa4\x86\x0e\x8d\x8e\xa5\x66\xef\xf0\xd8\x65\xd4\x81\x08\xe5\x96\xfb\xf7\x79\xc1\x71\xf7\x92\x0e\x87\x09\x21\x9a\x30\x6c\x99\x1c\x07\x1b\x57\x0b\xb6\x66\x75\xee\xb4\xc6\xc8\x6e\xc2\x4d\xec\x06\x76\xfd\xa6\x9a\x40\x08\x73\x68\x02\x3e\xeb\xb1\xf2\x78\xfb\xf7\x68\x5b\xcf\x1d\xa5\x5b\x16\xa9\x42\x45\xe0\xb0\xf6\x2f\x23\xf2\x65\x55\xd5\x01\xaf\x1f\x5a\x9d\x0b\x91\x28\xc3\xb7\xd3\x34\xcb\xbe\xf0\x56\x8f\x95\xa7\x9e\xff\x52\x5d\xb9\x67\x96\x6e\x59\xf0\x5d\x25\x3b\xe6\x39\x55\xb0\x19\xc6\x4d\xd7\x3e\x3f\xac\x9a\xdf\xf6\x90\xc2\x03\xcc\xb3\x10\x03\xf2\xc5\x11\x8e\xf4\xf5\x12\x37\xde\xe4\x39\x65\x39\x53\x45\xa7\x72\x0c\x99\x86\xca\x3e\x5b\x0c\x44\xd6\xd7\xad\xc9\x24\x4a\x2b\x8b\xce\xb8\x00\xe8\x84\xb0\xbd\x83\xef\xc3\xc8\x03\xbd\x42\xab\xc1\xce\x54\x46\xd3\x2f\xa9\x68\xfa\xe3\x83\x37\x2b\x62\xd0\x9d\x98\x7a\x15\x3e\x5f\x39\xd9\xed\xae\xae\x39\xc7\xee\x81\xc4\x68\xcc\x3d\x06\x54\x27\x44\x56\xfc\xed\x5a\xf0\x25\xaf\xfa\x9e\x1b\x97\x62\x93\xde\x1b\x43\x65\x08\xef\x00\x79\x29\x2a\x26\xb2\x8b\x92\xb8\xcf\x35\xb1\xe6\xe3\x89\x96\x52\x41\x89\xd0\x0b\xae\x36\x48\x57\x33\xd0\x84\x91\x80\x82\xaf\x09\x52\xd4\xe2\x74\x8d\x68\x38\x92\x38\x4a\x84\x26\xba\x84\x54\xa6\x56\xee\xea\xc2\x94\x92\x45\x5f\x1b\xf0\xd3\x9e\x64\xc7\xd9\x8f\x75\x4b\xa4\x9f\x80\x6c\x78\x4d\xb0\xd7\x36\x71\x9b\x67\x74\xcb\x53\xaa\xa6\xb3\xf1\x3e\x77\x97\xc3\x2e\x4a\x4c\xc1\x6a\x53\x9d\x05\xf4\xe7\x5e\x16\x15\xfd\x59\xb8\x03\xd1\x97\x9f\x1b\x0f\x6e\xaa\xbc\xe3\x92\x03\x0e\x3c\xa2\xa2\xa2\xab\xc3\x30\x5f\xb6\x73\xcb\x05\xbd\x71\x17\xf4\x07\x6c\x17\xf4\x3b\xcf\x33\xc0\x2f\x79\x70\xe0\x88\xb4\xf3\x79\xcb\x2f\xb9\xb9\xd8\x9e\x35\x15\x6e\x9b\x04\x41\xa4\xc2\x6d\xcd\x42\x53\x3d\x43\xab\x6b\xe3\xda\xc3\x7a\xab\xfd\x01\xaf\xbd\xbe\x43\xf4\xa0\x3f\xad\x1d\xa2\x58\xa0\xc1\xc0\xa8\x12\x12\x95\x71\x98\xf7\xee\x64\xd7\x0e\x53\x6b\xf6\xaf\xa3\x2f\x7f\x6e\x47\x30\xb9\x29\x1d\x78\x23\x2a\xb0\x23\x9a\xbe\xbd\x9d\x7d\xc5\x63\x3f\x43\x2f\x1d\x9c\x3d\x75\xaa\x88\x62\x8a\x78\x9f\x15\x99\xdc\xed\xc2\x65\xe1\x7f\x50\xab\x2e\x6f\xf3\x54\x85\x14\x7a\xed\xc1\xd9\x53\xbc\x67\xde\x22\xdb\x76\x1c\xd3\xe6\xad\x67\xb3\xe2\xaf\xea\xea\x62\x51\xc1\xa1\xf8\x45\x59\x4e\x1d\x0f\x6a\xd7\xee\xe3\x1d\x11\x2a\x3e\x7f\x79\x54\xa4\x4f\x75\x91\xf9\x09\x0f\xfe\x72\x43\xbb\x76\xdf\x23\x94\xff\xcd\x29\xc8\xdd\x7a\xdb\x83\x8a\xe2\xbc\x6a\xcf\xcd\xe7\xa5\x14\x0e\x7c\xa7\xac\xf3\x99\xef\x9c\x97\x6e\xe7\x7e\xe7\xcf\x06\xb4\xb6\x4f\x9e\x87\xd6\xf6\x42\xef\x3c\x15\xb4\x1b\x2e\xa4\x82\xf6\xd4\x4a\x05\xed\xa8\x52\xd0\xae\x3a\x5f\x35\xec\x8d\x63\xec\x67\x86\x90\x3b\x29\xa7\x9d\xff\x4f\xb5\xe0\x43\xde\x34\x92\x1f\x59\x48\xf2\x4e\x04\x5a\x2f\xb1\xac\x85\x8a\x61\x2a\x6d\xa3\xd5\x8f\xc2\x8a\x8d\x13\x11\x42\x58\xd1\xe7\x43\xc7\x47\x59\x78\x7e\x83\x42\x61\x00\xf7\x60\xe9\x0b\x27\xe7\x34\x04\xbb\x72\x8b\x39\x8b\x89\xfa\xdb\xad\x65\x21\xb2\x8e\xd4\x42\x1e\x9a\x58\x0d\x5a\x90\x17\x5d\xf6\x70\x8f\xbd\xda\x63\x83\x0f\xf9\xcf\xf6\x82\x1b\xe7\x34\xa3\xc1\xb4\x16\xc4\x55\x5f\x01\x8b\x22\xfc\x09\x27\xd4\x93\x73\x60\xbf\x36\x12\xfa\x1a\x76\xd5\x06\x69\xb5\xec\x3a\xb0\xbf\x76\x33\x66\x2a\x0c\x22\x3a\x1e\x05\x74\xb6\xdf\x1e\x0f\x26\x9d\x2b\x55\xe9\x32\x26\xe4\x69\x88\x8e\xf6\xf2\xad\x54\x99\xcd\xee\xdd\xcb\x6a\xef\x7e\x6a\xf0\x13\x66\xa6\xd8\x3d\xbd\xf1\xec\x98\x51\xa3\xbc\xa5\x3c\x6f\x5c\x79\xfe\xb4\xad\x3c\x7f\xf8\x3c\x95\xe7\x9f\xbb\x08\xca\x73\x1e\x2d\x4f\x02\x5b\x6a\x21\x9a\xf2\x30\x39\x3a\x5f\x66\x69\x7d\x25\xed\x16\xff\x26\xad\xa4\x99\x59\x34\x18\xbb\x36\x54\x41\x7b\xd3\x2e\x07\xda\x93\xb2\x23\x48\x3f\xa3\x6c\x0d\xd4\xf1\xfc\xbf\x1b\x0f\x66\x9c\x2b\x96\xbd\x72\x4d\x4a\x72\x95\x5a\x41\x3c\x6a\x48\xb6\x06\xb6\x61\x42\x5f\x21\xe9\x3f\x9b\xb6\x5c\xf1\xf3\x9e\x2d\xf1\xb3\x95\x16\x70\xd1\xa4\xc2\xe7\x6d\xa9\xf0\xbb\xe7\x1d\xd5\x7d\xb7\x77\x91\xc2\xba\x37\x23\x1c\xd8\x73\x54\x9c\x77\x9f\x5d\x37\x74\x5f\x19\xb1\x9a\x21\x14\xe8\xa6\xf9\x72\xac\x61\x51\x15\x00\xae\x0d\xfb\x4e\x09\x8d\x4d\x83\x2a\x5a\xd5\x29\xe5\xf4\x39\x05\x97\xe3\x6c\xbf\xbe\xd3\x41\x2b\x1a\x3c\xdc\x1e\x8a\xf2\xac\x07\x0e\xbb\x5b\x7b\xad\x65\x0c\x66\xf7\x7f\x6d\x67\x70\xeb\x90\x7b\x95\xd0\x67\x21\xaf\x78\xba\x44\x0c\xbf\x83\x7d\xb2\xc6\x2e\xe9\x44\xc9\xb4\x8a\x48\xf4\xdf\x5b\xdb\xe8\x7c\x92\xa7\xc4\x46\x94\x14\x79\x91\x35\x66\x92\x42\xd1\xd5\x04\xdf\xf5\xa6\x13\x2e\x56\xa3\xa6\xb2\xb7\x2a\x99\x19\xb5\x0d\xf8\x45\x60\x7f\x34\xc0\x83\x03\x2a\xa4\xa8\x0b\x07\x4a\x3b\x0d\x30\x3e\x20\x2f\x28\x4a\xc0\x8a\x9d\xd4\x34\x75\xea\x63\xe8\x5e\xe5\x62\x55\x24\xca\xa1\x1e\x2e\xe5\x18\xa2\xd5\x36\x4f\x62\x14\x68\x83\xf3\xf9\xd4\xf6\x4a\x82\x13\xb9\x09\x2e\x32\x59\x02\xf8\x01\xc1\x26\x99\x14\x61\xd6\xd7\x1f\xc9\x21\x8e\x1e\x41\xae\xa4\x18\x0a\xf6\xef\xdb\xf7\x88\xa0\xc1\x5e\xe7\x59\x31\x88\x2f\xf1\x2e\x00\xe3\xca\x63\x8f\x55\x86\x2d\xae\x81\x43\xc9\x54\x07\xfc\x49\xf6\x59\x53\xf0\x96\x1e\x76\xbe\x84\xe3\xce\xfe\xa6\xc6\x2e\xeb\x84\x67\x4e\x25\xba\x03\xfd\x2f\x9d\xf7\x50\xbf\xb6\x36\x72\xa8\xe1\x74\x17\xb8\x5f\x1d\x3d\xd6\x10\x39\x93\x6c\x62\x8c\x47\x8d\xef\x11\xdb\xe3\x2c\x4f\x72\x9b\x1f\xdc\x7d\x76\xe4\x6c\xa7\x57\x20\x12\xb4\x38\xd3\x8c\x7b\x39\x90\xa2\x8a\xa2\x50\x01\x30\xa5\x39\xdd\x60\xf7\xec\xda\x08\xcf\xc5\x1c\x51\xe6\xfb\x7f\x32\x1e\x3c\xc1\xa4\xcb\x36\xf8\xe0\x23\x90\xbe\x29\x06\x63\xab\xb4\xc7\xb2\x48\x0d\x03\x7f\x68\xd3\x43\x50\xac\xdd\x59\x8f\xa9\xfb\x0b\xa9\x23\x0a\xfe\x7e\x07\x5b\x64\x3e\xed\x6a\xd3\x72\x97\x43\x10\x28\xff\x31\xc1\xa4\x3c\x18\x86\xe6\x12\xc5\x35\xd0\xb3\x18\xce\x62\x3e\x35\x2a\xd6\x73\x4b\x27\xda\xd2\x89\x2e\x92\x4e\x74\x94\x82\x22\x1f\x1d\x5c\xa5\x0c\x1e\x07\x70\xe9\x5a\x31\xd5\xb2\x29\xca\xf7\xe4\x2c\x0f\xbb\xa4\x0e\xb3\xd6\x88\xff\x34\x76\xf5\xc6\xd9\x60\xe4\x3b\x18\x07\x19\xec\x59\xd0\x79\x8d\x26\x51\x4b\x7f\x50\xaf\xd2\xc6\xa6\xe9\x0e\xdc\x54\x9e\x01\x11\x51\x79\x26\xfa\xa3\x4b\xd8\xc4\x3a\xac\x54\xe4\x8b\x97\x8a\xc6\xdb\x2e\x09\x9e\x65\x7e\x5a\x30\xf4\x0e\xf5\xdb\x52\x98\x0b\xe4\x6d\x53\x89\xef\x8a\x19\x0a\xdc\x92\x8b\x72\x9c\x16\x89\xed\x57\x50\xc4\xac\xc6\x50\x23\x54\x77\x43\xf6\x2b\x0a\xb9\x5f\xa4\x49\x53\x4c\x28\xc0\x44\xd7\xe7\xb6\x9b\x7d\xb7\xc6\xc6\x95\x1f\xd3\xff\xab\x1a\x9b\xde\x14\xeb\xd6\x61\x7a\xd3\x66\xb5\x0b\xde\x5c\xd3\x8e\x51\xc3\x8a\x1e\x2a\x78\x26\x6a\x8f\x42\x56\x85\xc8\x20\xc3\xce\x8e\xcc\xeb\x49\xbf\x82\x9a\x8b\xcf\x50\x0c\x91\xb1\x5b\xca\x46\xeb\x1e\xb3\x45\x77\x33\xed\x68\x0e\x89\x66\xda\xe9\xa6\x09\x58\x0c\x55\x58\x60\xda\x2b\x20\x8a\x3a\x6d\xeb\x80\x29\x9b\x48\x8f\xc7\x22\x59\x2e\x56\xe4\xed\x3b\x7a\xa2\x07\xf1\x5a\xcd\x38\xed\xb5\x08\x10\x11\xa8\x8a\x31\x80\x10\x88\xf9\x1f\x37\x3b\x8f\x9f\x8a\xd3\xb0\xb5\x14\xc6\x61\xd2\x14\xd9\x88\x8f\x4d\x34\xd8\xc7\x3c\x35\x0a\xfe\x6f\xad\x83\xc9\xba\x01\x82\xc1\xa0\xd0\xa2\xc8\xf4\x77\x15\x81\x20\xcd\xa9\x0b\xc3\x23\xc8\x5e\x55\x63\xdb\xa4\xda\xe1\xdf\x3b\x42\xe5\xa9\x6c\x82\x3c\xda\x3b\x0d\xf8\x94\x47\x60\xee\xa3\xea\x2f\xc2\xe6\x0a\xba\x37\x12\x37\xf2\x09\x96\x0e\xd1\xaa\xb9\x2d\x01\x50\x49\xa4\xb5\xce\x27\xbb\x59\x0a\x5c\xeb\x2d\xab\x6d\x13\x0d\x6e\x08\x43\x0c\x97\x01\x39\x53\xe4\x3e\xbc\x8c\x71\x47\x44\xcf\x8c\xe1\xdf\x72\x4e\x85\x99\x49\x50\xb1\x29\xdd\x1a\xec\x3e\xa0\xce\xc5\x9d\xc2\xbf\x77\x6c\x93\x6b\x4a\xe1\xd6\x3a\xfd\xf3\x89\x9a\xc5\x5a\x6c\xfa\x48\x5f\x54\x52\x02\xf8\x1a\x20\x9e\x54\x6a\xb3\x26\x0e\x3f\x4a\xcc\xf6\x22\xa5\x07\x32\x1b\x4f\x70\x80\x3a\x95\x65\x59\xeb\x6d\xd3\x3d\x0e\xfe\xa8\x83\xb3\xa7\xc0\xa6\x2f\x3a\x69\xd6\x9f\xa0\xf8\x4d\x15\xe9\x24\x15\xd0\xa5\x5e\x14\x17\x50\x90\xfd\x35\xd4\x0a\x00\x12\x12\x6a\x1b\xc6\x5c\xad\x6c\x0c\xae\xc4\x40\xf0\xb4\x8b\xf2\x5e\xb6\xca\xe8\xb1\x45\xca\x13\xb9\xe6\x63\x2e\x07\x54\xd6\xd3\x84\x56\xa9\x7d\x3b\x90\x13\x2b\xe0\x44\xcc\xc7\xde\xe0\x11\x94\xeb\xab\xbc\xe0\xf9\x5e\x51\x81\xaf\x4d\x5d\x49\x2f\x00\x4e\x9f\x11\xa9\x14\xaf\x1c\xe0\x1a\x0c\xea\x3c\x98\x85\xe2\x81\x15\x8c\x06\x23\xa8\x63\xbf\x29\x26\x1b\x9c\xcd\xae\x90\xa6\xfe\xd4\x89\x96\x16\x89\xc9\x6e\x76\xe0\x1c\xe3\x07\xe5\x36\xf3\x57\x2c\x78\xda\x88\xfb\xa5\xd8\x41\x75\x86\x6f\xf7\x92\x26\x46\xb2\x46\x45\x5f\x69\xfd\x43\x8a\x69\x9c\xf5\x2e\x83\xbf\x16\x60\xf8\xe7\x44\xfb\xac\xb7\xbb\x13\x9e\xa9\x74\x9d\xfe\xe9\x2e\xf6\x2b\x1e\xb3\x6f\xfb\xf7\x69\x37\xe9\xdd\x9e\x75\x5d\x03\x21\x77\xbb\x22\xc3\xf9\xa9\xa3\x2c\x2b\xdc\x81\x45\x6a\xf1\xfb\x5b\xee\x34\x79\x18\xc1\xd9\xd9\xeb\x36\x08\x63\x91\x14\x29\x08\x69\xc6\x84\xb0\x28\x51\x9f\x75\x1d\x5f\xcf\xd9\xce\x76\xd2\x14\xf2\xff\x6e\x5b\x70\xff\x36\x35\x9f\x9c\x04\x0c\x27\xf5\xd2\xce\x8a\xa4\xe8\xda\x22\x35\xd1\x65\x4e\x37\x2b\x04\x4a\xc8\x81\xe3\x7b\x0b\x8b\x41\xdc\xbd\x65\xd1\x9b\xaa\x1a\xd8\xf1\xfc\x4a\x68\x55\x97\x1b\xe5\x76\x70\x5b\xa7\x17\x17\x51\x37\xee\xab\xf5\x00\xbe\x40\x9d\x97\x58\x16\x5e\xb0\x1a\xed\x95\x8e\x57\xe9\x00\x3c\xe8\x06\xc6\x08\x26\x7e\x38\x5b\x4e\xeb\x6e\x5c\x23\x28\x88\x2d\xa0\xcd\xcb\x85\xa2\x85\x91\x4b\x54\x57\x32\x4a\xf0\x66\x0b\x65\x80\xdc\x4e\x41\x41\x0b\x1b\x5c\x63\x11\x45\x49\x2b\x5a\x8d\x5a\x3d\xa3\x38\x28\x05\x5c\x2a\xac\x95\xe0\x44\x04\x4d\x2c\xd5\x2a\x58\x86\xa5\x75\x4d\x08\x8f\x00\x11\x0f\x79\x28\x90\xbf\x24\x88\xfb\x58\xf1\xd6\xd0\xc3\xaa\xd3\x89\x29\xe7\xba\x7d\x8f\x18\xe6\xd1\x77\xdc\x38\x37\xb0\xeb\x47\x21\xed\x0c\x0f\xda\xec\x8a\x26\x7b\x9d\x5c\x2f\x66\x82\xfa\xf7\xea\xf5\xb2\x66\x5d\xd6\x71\x83\xe9\xda\x85\x59\x2e\xad\x74\x2d\x81\x05\x63\xd3\xae\xef\x87\x23\xbf\xb3\x44\xee\xa9\xb1\xd2\xf2\xf7\xbf\xe3\x6d\x8a\xac\xf5\xca\x91\x64\xad\x6f\xf7\xdc\xd2\x31\xb3\x36\x2f\xed\xb4\xe6\x20\x46\x9a\x33\x85\x0b\x1b\xa2\x4e\x9a\x6e\xf6\xf2\xd4\x74\xb5\x16\xbb\x53\x8c\x06\x13\x88\x0b\x5d\x13\x71\xcc\xb1\xb3\x90\x6f\x26\xee\x93\xcf\x9d\x1c\xd8\xd6\x2a\x6b\xb0\x7f\xf2\xd8\x4f\x0f\x71\xd5\x4e\x63\x3e\x86\xff\xa7\x5e\x70\x9d\xf5\xdb\x48\x91\x32\xe2\xbc\xf2\x51\xef\xc9\x75\x2e\x87\x06\x38\xdf\x49\x57\x1c\xb9\xfa\x73\x6c\x82\xa9\x1b\xfe\x4f\x07\x0f\x5d\x50\x4e\x6e\xf5\xba\xbd\xa5\xcc\xd1\x96\xf7\x98\xe0\xa6\x13\xd6\x33\xb0\x32\x34\x06\xfa\x51\x42\xd4\xaa\x73\xa5\xd4\xcf\xcc\xca\x6d\x6d\x26\x51\xbf\x9c\x32\x3f\xe4\x52\xd8\x68\x32\xfa\xc3\xc7\xa2\xa4\x77\xe6\x24\x6e\xdd\xfe\xab\xc7\x82\x1b\xdd\x4b\xa0\x0a\x58\x39\xbd\x68\xf5\x40\x78\x54\x3d\x6e\x3a\x4d\xdc\x45\x75\xaf\xb1\xc7\xb1\xed\x80\xa1\xe6\x1f\x0d\x6e\x38\x06\x60\x6a\x51\xce\xe9\x03\x84\xae\x86\xf1\x04\x18\x14\xa3\x41\x57\xdd\x52\x9d\x86\xcc\xb2\x6d\x59\x1a\x0b\x59\x22\x82\xc9\xe6\x3c\xd4\x45\x02\x76\xeb\x39\x94\x08\xdd\x7d\x34\xb8\x41\xf1\x77\x98\x12\x41\x1a\x9d\x43\x89\xc0\x1a\x70\x34\xb8\x41\x71\x06\x98\x12\x21\x93\x63\xb3\x25\xbe\xe7\x91\x9b\x8a\xfb\x44\x58\x82\x47\x06\x57\x56\xde\x71\x4c\x4c\x58\x14\x17\x72\x86\x37\x45\xab\x71\xd6\xdb\x99\x0b\xa8\xe9\x59\x6f\x57\xd6\x4b\xa6\x73\xd9\x84\xb3\x9e\x9f\xf7\xba\xdd\x58\xc8\x53\x76\x18\x23\x8b\xc1\x59\x6f\x67\x3b\x87\x3f\x9d\x71\x7f\xc1\x15\xec\xf3\x1e\xab\x78\xde\xff\xa0\xc7\x66\x36\x1a\xdd\x36\x3f\xf0\xba\x22\x86\xa5\x99\x19\x24\x83\x5f\xb0\x38\xb9\x2d\x8e\x64\xd8\x15\x5a\x51\x13\x62\xfa\xc1\xa5\x69\xbf\xa9\x38\x3b\x54\xba\xa2\xda\x3c\x55\xbf\x1d\x4c\x93\x42\x9c\x29\x1a\xec\xdd\x35\xf6\xa3\x64\xd9\x3d\x18\x76\xc3\xa5\x28\x06\x18\x37\xff\x6c\x2d\xf8\x81\x57\x71\xc3\x8d\xfa\x6b\xda\x77\xa0\x5a\x14\x34\x6c\x62\xbc\xa4\x1c\x6b\x0d\x2e\xaa\x06\x77\x4b\xa5\x64\x2e\x54\x4c\x55\xe2\x52\xab\x25\x5a\x9c\xf8\xa0\x29\x7c\x6e\x25\xcd\xf6\xe4\xbc\x15\xe5\xcd\x4c\x20\x0a\x20\x64\x2f\xc9\xfd\x54\xee\xa1\x50\xb1\xd0\xd4\xab\x2f\x4b\x5e\x4a\xe5\x79\xbe\xa2\x2d\x52\x5a\x2b\x03\xeb\xa1\x2c\xed\xda\x37\x47\x71\x9b\x7c\x7b\x8c\xfd\x18\x95\x77\x2a\xc9\xc3\xb6\x98\xef\xe7\xcd\x22\xce\xfd\x3f\x1e\x0b\xde\x37\x56\x75\xc7\xed\x36\x05\xc4\x10\xf7\xb5\x55\xbd\x07\x4f\xf3\x1c\x1f\xaf\x3b\x1b\x60\x92\x26\xa2\xc1\x0f\x4b\x3d\x42\x24\x45\xd6\x07\xac\x02\x4c\xef\x0c\x79\x37\x06\xfe\x2a\x78\x8f\x12\x85\x33\x2e\x12\xc4\xc1\x0b\xae\x08\xe4\x3f\xb8\xf3\x34\x43\x9d\x6b\xe9\x12\x0a\x86\xbc\x9b\x89\x76\x74\x06\x6c\x67\x54\x1f\xaa\x48\x83\xcf\xe3\x69\xfd\x0a\x0a\xf4\x93\xda\xa0\x5b\x57\x98\x63\x3a\x33\x4b\x1e\xaa\x62\x51\xf0\x15\xbd\xdf\x17\x02\x07\x05\x90\x0b\xab\x1a\x6b\x77\x87\x9c\x2d\xab\x69\xd4\x22\xf3\xac\x1c\x60\xc6\x0e\xe3\x41\x3a\x3f\x40\xd9\x61\xed\x34\x9d\xba\x22\x50\x76\x18\xf8\xb9\x14\x66\xf2\x1c\x84\x7f\x3e\x43\x1e\x7e\x8a\x66\xc3\x3c\xde\x70\x1f\x6f\x98\xc7\x1b\xe6\xf1\x11\x03\xfe\xf2\x31\xf6\x13\x34\x22\xd3\x2d\x77\xa1\x7c\xaf\x16\x7c\xa1\x56\x7d\xcf\x24\x8b\x10\xeb\xa3\x18\xb2\x68\xf4\x81\x1f\x26\x7c\x79\xa9\xa8\x44\x48\xb5\x0a\x72\xcb\x74\xd7\x04\xfd\xa0\x05\x39\x63\xf0\x92\x9e\xf8\x0d\xae\xf3\xfa\x46\x2f\x8c\x21\x75\x1f\xb9\x36\xdc\xc5\x8b\xd5\x5e\x11\x72\x1e\x48\x35\xb8\x53\x9e\xdd\xa8\x17\x41\xc2\x25\x1d\x83\x88\xa6\x5d\x9f\x41\xab\x56\xa7\xac\xf2\xa8\x41\x79\x4f\x8d\x31\x90\xe5\x88\x27\xf0\xb6\x51\x76\xc3\x92\x1c\x9e\xd3\xaf\x95\xe5\xef\x57\x3c\x73\x6f\x03\x82\x57\xd7\x1d\x4c\x01\xd6\xab\x0e\xf4\x07\x8a\x33\x40\xf1\x9a\x69\xdb\x82\x2e\xca\x79\xda\x89\x8a\x42\x61\x16\x74\xd3\xd6\x9e\xdc\x2e\x46\x8a\x53\x48\x7e\x25\xfa\x58\xa4\x96\xd5\xef\xd3\x00\x61\x35\xad\xd7\xda\x22\x84\xfc\x8f\x65\xa8\x23\x68\x37\x22\x91\x55\x6c\x35\xd8\xeb\x6a\xec\xa1\xaa\xbb\xe7\x67\x0e\x65\x91\x3c\xee\xf8\xf7\xd4\x82\x0f\x78\xd3\xe5\xcb\x28\xb6\xcc\x22\x06\xbc\x26\x48\x20\x39\x38\x3f\xc3\x5b\xf4\x90\xc1\x37\x91\xdf\x31\x8b\x99\x0e\x2c\xf2\x62\x67\x49\xc0\x24\xa1\x6c\xf2\xd0\x50\x1f\xf2\xe9\x84\x30\x4d\xf0\x94\x87\x62\x26\x49\x9d\x2f\x00\x47\x41\x2f\x51\x1f\x1f\x2c\xc5\x9e\x26\x37\xb2\x03\x23\xe2\x0c\x4a\x33\xa1\xdc\x64\xd6\x62\x3b\x57\xd2\xbc\x98\x9d\x39\xe4\x3f\x31\x78\x2c\xfd\x09\x30\x21\x59\x07\xf4\x8b\xa8\x6d\xab\x18\x24\x55\x0a\x64\x4f\x52\x3a\xec\x2c\x10\x33\x39\x2b\xd6\x25\x1f\x7d\x9d\xc7\x76\x41\xd9\x69\x56\xe4\xfe\x8b\xbd\xe0\x88\xfe\x65\x7f\x0b\x05\x37\xe4\x82\x77\xd3\xac\xe0\x99\x3c\x07\x38\x12\x57\x75\xf0\x99\x6e\x9a\x97\xa2\x3a\x47\xc7\xf1\x95\xfa\xe1\x28\x7d\x7e\x4e\x7e\x41\x75\xc2\xcc\xec\x41\xd5\x09\x33\xb3\x07\x37\xdb\x09\xf2\x95\x91\x9d\xd0\x65\xbb\x65\xd1\x14\x50\xe1\x87\xc1\xbc\xf5\x73\xb3\x5f\x53\xaf\x8d\xfc\xe2\xd3\x18\xeb\x66\xd1\x6a\x14\x8b\x65\xd1\xf2\x1f\x17\x1c\x34\xbf\x4a\xdf\xc3\xb9\x85\xdc\x18\xa0\xca\x50\x47\x43\x4a\x39\xd0\x84\xd2\x7b\xee\x07\xde\xe9\x31\xa3\x5f\xfa\x6f\x1c\x11\x2a\x50\x29\x92\xe4\x5b\x65\x89\xf4\x64\x5d\xde\xb9\xc9\x23\x78\x73\x88\x38\x62\x6f\xf5\xd8\xc3\xe1\xf9\x59\xd5\xa0\xc3\xf2\x24\x8b\xb1\xdc\xcf\xf7\x82\xfe\xb0\x9b\x1b\xe9\x2e\x4c\x3b\xd3\x5d\xc5\x85\x7e\x7b\x10\x7b\xa3\x55\x4a\x6e\x76\xbb\xf5\x93\x1e\xfb\x11\x9a\xf0\x30\x51\xc3\x62\x25\xf7\xdf\xed\x05\x2b\xe5\x8b\x96\xc0\xd2\xda\x96\x5a\x29\xb8\x8c\xe4\x53\x0d\x7e\x18\x24\x8e\x49\xec\xc5\x43\x0b\xc1\x07\xe0\x43\xaa\x9f\x7a\xe5\x75\x35\xda\xb0\x52\x2d\x5f\x54\x05\xd9\x3f\x7a\xec\xc7\xa9\x42\xb3\x59\xda\x3c\x2e\x8f\xf1\xf2\x80\x96\xfb\x5f\xf1\x82\x8f\x29\x09\xec\xde\xaa\x90\xc2\xaa\x4d\xee\x83\xaa\x5d\x69\xc6\x93\x28\x2e\x37\x0f\x9c\x77\x72\x82\x50\x22\xb9\xf3\xae\xd3\x5a\xdc\x62\x9c\xcd\xc5\x7d\x58\xed\x2f\xed\x38\x5c\x2e\xed\x2f\x23\x36\xec\xdf\xf2\xd8\xcf\x28\x6d\x63\xd8\x9c\x7b\x85\x17\x3c\xd7\x5b\xe7\x21\x95\xab\x30\xa0\x5d\x29\xc2\x3a\x9d\xa7\x2d\x35\x5b\x70\xb7\xc0\xd4\x5c\x96\x9a\x32\x58\xea\xf4\x9c\xcc\x91\xc0\x3a\x2a\x72\xde\x0d\xc1\xac\x48\x2f\xb8\xf3\xef\xf5\x1e\x53\x07\x48\xff\x65\x1e\xbb\x79\xc3\xe7\x3d\x3c\x1e\x97\x97\xf4\x49\x2a\x6b\xd3\x0b\x5a\xd9\x2b\xca\xcb\xf8\x93\x1e\x7b\xf8\x30\x65\xcd\xbf\xdf\x0b\x5e\xe4\x0d\xbb\xab\x4d\x21\xc3\xb5\x52\xa9\x5d\x76\x85\x45\x53\x69\x1d\xe2\xf8\xc2\x8a\xc8\x51\xed\xb3\x23\x55\xac\xb7\xa4\xe6\x67\xcc\xdf\xa0\x2a\x8e\x9a\x23\xef\xf2\xd8\x4e\x4a\x4e\xf5\xdf\xe2\x05\xcf\xf3\x74\xa6\xea\xf0\x85\x4d\xc9\xa5\xdd\xb8\xb7\x1c\x25\xc3\x16\x77\x92\xea\xa4\x57\x77\xaa\xa7\x3a\x3d\x36\xd6\x4f\xf4\x2d\x44\x8c\x3d\x57\xec\x19\x55\xe1\x0f\xd7\x98\x4f\x15\x39\x12\x8b\x33\x94\xaa\xeb\xff\x52\x2d\xf8\x82\x37\x78\x7d\xc4\x52\x96\x4f\xd1\xf7\x1b\x7c\xe4\x42\x96\x35\xb5\x9e\x76\xdb\x83\x6b\x57\x63\x60\xc0\x59\xb1\xdd\x96\x67\xa9\x55\x81\x22\x40\x91\x54\xf3\x5e\x4e\xa9\x5d\xf2\x87\x5d\xa0\x1d\xed\x85\x8f\x06\x74\x2b\x40\xc5\xf3\xdc\xf3\xfb\xa6\xcb\x5d\xc2\x5e\x34\xc6\x7e\xa4\x9d\x66\x4b\x51\xab\x25\x12\x75\x90\xfe\x87\x5a\xf0\xe7\xb5\xf2\xd5\xa1\x87\x68\xfd\xe0\xbf\xfc\xf9\x79\xa0\x2a\x95\x27\x68\xfb\xe8\xac\xdf\x18\x7e\xd2\xc5\x47\x36\x7e\xd4\xb5\x9f\xdf\xf4\x59\xf7\x6d\x1e\x53\x16\x30\xff\xbe\x4d\xc8\xba\x23\xf3\x95\x07\xaa\xdb\xdb\x1b\x3e\x4c\x81\x15\xab\xad\x68\x24\xa2\x7c\xb4\xe5\xea\xef\x6b\xec\x27\x32\x11\xb6\x4e\x26\x71\x7f\x2e\x4d\x8b\x23\x51\x2c\x10\xc1\xcb\xff\xf3\x5a\xf0\xfb\xb5\xea\x7b\x38\xfb\xe9\x64\x02\x28\x2a\x50\x05\xb0\x13\x1a\xc1\x96\x2b\x84\x21\x0c\x05\x41\xf8\x0c\xa4\xff\x4a\xd3\x82\xb7\xa3\xd8\x20\x29\x2b\x82\x2f\x73\x5e\x77\xce\xe6\x56\x40\x95\x5d\x22\xb2\xd1\x0e\x2b\x15\xb7\xdc\xf9\x59\xe5\x25\x68\x89\xa4\xaf\xd4\x5a\xd0\x9d\xa8\x01\xed\x30\xce\x45\xe9\xeb\x10\xdc\xb6\x91\xaa\x13\x20\xd7\x5a\x94\xaf\x88\x1c\xe8\xe1\x22\x1a\x10\x12\xd6\x68\x3c\x45\xba\x30\x6b\x33\xfc\xe8\xc3\xd8\x93\x2e\x0e\x4b\x39\x58\x78\xff\xf2\x27\x82\xd9\x51\x0f\x58\xde\xe3\x15\x29\xb6\xd1\xf6\xbc\x16\x52\x36\x5e\x94\x39\x7e\x99\xb0\xdb\x15\x61\x76\xd6\xdb\x0e\x93\xea\xac\xb7\x1d\xb0\x0a\xcf\x7a\xdb\xf3\x66\x5a\x0a\x44\xfa\xe6\x8f\xb3\x5f\xa9\xb1\x4b\x2c\x48\xe3\xdc\xff\xc5\x1a\x6b\x0f\x5b\x00\xe7\xdf\xf2\x79\xeb\x53\xc1\x3b\x3d\xfb\x67\x99\x9e\xd6\xbe\x25\x35\x1c\xb7\x20\x7e\x52\x63\x40\x15\x86\x84\x6e\xe0\x25\xd8\xe2\xd0\xe3\x95\xcb\x9d\xaf\x3b\x89\xee\x0a\xb9\x47\x77\x45\xa6\x22\xd3\xdc\x17\x21\x06\x79\x20\x3c\xb6\xc1\xa6\x19\xf6\xa9\x7f\x5d\xf0\xc8\x0a\x0c\x47\x8a\xe8\xd4\x80\x85\x71\x9a\x2c\x4b\x99\x6a\x8b\x9a\x77\x20\x8c\x0f\x7d\xd6\x7f\xbd\xc7\x5a\x17\xaf\xb3\x0f\xea\x0f\x05\xd7\x2c\x9a\xaf\x2e\x6a\xc7\x81\xb9\xa6\x74\x49\x83\x49\x7d\x70\xee\x50\x83\xfd\xba\xc7\x70\xfa\xf8\x6f\xf7\x58\x74\xf1\x6a\x6a\xe6\xfb\x09\xf9\xb5\xe0\x7a\xf8\x47\x6b\x6a\x50\x05\xed\x62\x54\xf3\x04\x3b\xbc\x09\x05\xe9\x7e\x67\x19\xc3\x89\xee\x47\xc1\x7f\x9a\x97\x7f\x54\x80\x19\xb9\x23\x25\x0b\xa1\x70\x34\xa9\x7d\x28\x64\x4f\x0e\xc5\x48\xfd\x82\x4e\x0f\x10\x37\xa7\xee\x3a\x00\x94\xf7\xd7\x18\x23\x14\x46\x39\xaa\xaf\xad\x5d\xcc\x51\x7d\xbc\xfe\x50\xf0\x6e\xcf\xfc\x28\x2d\x1f\x53\x1d\xe2\x5c\xaf\x5a\x44\x79\xf5\x2a\xb2\xde\xa5\x78\xe5\x4d\x2d\x25\x0a\x4a\x1e\xb6\x8a\xfe\x87\xd4\x77\x69\xfe\x7f\xc1\x0b\x7e\xdf\x53\x11\xd3\x91\x13\x2c\x3d\x74\x39\xf1\x79\x83\x23\x83\xbc\x40\xed\x28\xcb\xa5\x28\x97\x02\x3e\xe1\x54\x9c\x36\x38\xb6\xe5\x01\x67\x35\x92\x5a\xb8\xd5\x5c\x29\xfc\x75\xfe\x06\xf9\x62\x55\x45\xd2\xcc\x14\x62\x11\xe1\x43\x10\x3b\xb1\x39\x1d\xe0\x04\xf9\x07\x40\x90\xea\xe9\x45\xc7\xd9\x77\xef\x38\x1b\x57\x1d\xe6\xff\xbf\x3b\x83\x67\xef\xd4\xa5\x96\x78\xdb\x40\x41\xea\x75\xbb\x69\x56\x48\xe5\x5e\x37\x20\x2d\x4d\x55\xd8\x08\x55\x2d\xb5\x3d\x55\x35\xaf\x5e\xb6\xb3\x52\x63\x1b\xdc\xcc\x92\x03\x7c\xda\x1a\x46\x6c\x9d\x02\xc1\x03\x60\xdb\xea\xb1\x4f\xd2\xb5\x06\xa1\xfd\x15\x69\x97\x5c\xbe\xd6\xdc\xd3\xdf\xb4\x3c\xca\xb2\x51\xa8\x69\xe7\xc2\x9a\x38\x27\xb3\x96\xc8\x0e\x60\xf0\x1f\xb5\x04\x74\xd0\x32\xaa\x69\x33\xed\x74\x7b\x74\x1c\x04\xec\x68\xcd\x2b\xaa\x27\x1a\x06\x8e\x47\x39\x0f\x00\xf8\x31\x8e\x4e\x8b\xa0\xae\xb7\xf4\x3c\xcd\x0a\x1e\x2e\xa5\xab\x80\x5a\x68\x3f\x53\x2a\x21\xaf\x2b\x74\xf5\x8c\x3e\x25\x5a\x3c\x16\x67\xa2\x66\xba\x9c\x85\xdd\x15\x54\x6b\x1a\x3c\x78\xec\x40\x09\x39\xcf\x8b\x30\x2b\x94\xe6\x11\xac\x2a\x46\x78\x54\x73\xe9\x44\xb1\xd4\x97\xea\x0f\x46\x87\x50\xf4\xd1\xd3\xd3\x4c\x95\x31\x41\xaf\xa8\xe1\x22\x93\x05\xb5\x2e\x08\xe3\xee\x4a\x88\x91\x6e\x52\x1a\x04\x48\x44\x8b\x4c\xe2\x6e\xa1\x51\x62\x15\xda\xb0\xce\xa9\x39\xce\x2b\x5c\x26\x4b\x7d\x7e\xdb\x34\xbf\x99\xcb\xc2\xf8\xcd\x1c\x8a\xe7\x7b\xd7\xc0\x97\x71\xdb\x34\x1e\x38\x54\xff\x40\xb3\x92\x94\x03\x94\xf4\x19\xae\xa2\x1c\xe1\x55\x90\x08\xdd\x95\x70\xa2\xae\x82\x97\x00\x78\x0c\x43\x34\x65\xcd\x9d\x46\x52\x1b\x9d\x3a\xa2\x21\x9c\x62\x7f\xa9\x8e\x6a\x45\xa8\xfe\x3d\xc0\x57\xf7\xef\xab\xf3\xd5\x2b\xeb\x7c\x75\xbf\xfc\x1f\xb2\xf8\xc8\xbf\xf6\xc9\xbf\xae\xaa\xf3\xd5\xab\x40\x4a\xca\x4b\x57\x42\x8d\xf0\x39\xf8\xf3\xca\x3a\x6f\xa7\xe9\x7e\xfc\xef\x3e\xe7\x0c\x90\xb2\x0e\x3b\xfd\x60\xec\x68\xb4\x5e\xd9\xf7\x6b\xec\xe1\x61\x0b\xf1\xec\xc2\x78\x36\x83\x34\x8d\x83\xf2\x44\x98\xe4\xfe\x57\x6a\xc1\x5f\x78\xd3\x43\xee\xa2\xf5\x5b\xdf\xe4\x4d\xba\x9c\xaf\xa4\x6b\x09\x9e\x83\xa2\x04\xa2\x8b\xe1\x44\x27\xce\x14\xca\xa3\x06\x5c\x6d\x0e\x8c\x62\xa8\x40\xc2\x27\xc3\x82\x0a\x6a\x54\xef\x02\xea\x2b\x9b\x91\xfd\x4d\xab\xc2\x15\xb2\xdf\xee\xff\x84\xc5\xec\xe9\x17\x53\xf7\x91\x35\x31\xa3\xc0\xbe\xfd\xd3\x6c\xdf\x66\x41\xa2\xfd\xf7\xff\xb4\x06\x86\xb6\xf6\xd7\x30\xe1\xfa\x75\x0d\xc6\xaa\x22\xf8\x2c\x35\x32\x69\xf1\xb4\x4b\x28\x20\x40\x89\x60\xd1\x11\xeb\x1c\xa6\x4b\x9a\x16\xe2\xb4\xa3\x9d\x7f\xe8\xdf\xb3\x2f\xed\x62\x0f\xd5\x2a\x87\xc6\x00\xf9\xe4\xae\x0b\x90\x8f\x77\xd7\xae\x13\xe5\x82\x79\x4b\x34\xa3\x96\xad\x27\x29\xd0\x59\xe1\x60\xce\xaa\x14\x25\x93\x04\x60\x14\x2b\x0b\x1a\x9d\xf6\xaf\xb0\x50\x8f\x43\x30\xae\x52\xef\xe9\x9b\x5a\xaa\x2b\xa0\xf5\x22\x17\x71\x1b\xc5\x90\xc5\xbe\x8d\x52\x93\x62\x79\xe5\x9e\x27\xb2\x76\x9a\x75\xf0\xeb\x14\xce\xab\xd3\x7c\xd1\x66\x38\x50\x72\xae\xc5\xa6\x52\xf7\x50\xc3\xd3\x43\x06\x7b\x47\x22\x56\xe5\x9d\xd3\x11\xf9\x97\x15\x32\x2e\x63\x4e\x06\xde\xb0\xae\xd1\x70\x6b\x94\xd9\x68\x7a\x63\x48\xd6\x45\x90\xf5\x12\x58\x4c\x01\x44\x38\xef\x43\x51\xbf\x3f\xb8\x81\x83\x4d\x0e\xb7\x32\x51\x38\x9d\xc6\x81\xc2\x1e\x9c\x42\x07\x78\x30\x30\x41\x82\x03\xfc\x99\x8c\xf3\x00\x3a\xec\xf0\x99\x6e\x26\x60\xaa\xe6\xc1\x01\xfe\x64\xc6\x39\x87\xbb\xf2\xff\x82\xd3\xa2\x1f\x1c\xb0\xaa\x50\x57\x37\x70\xde\x42\x51\xc1\x89\xb4\x98\x49\xcc\x2d\x74\xac\xe8\xb2\xe0\xda\x3e\x7d\x9b\xcb\xba\xd3\xdf\x4f\x81\x7f\xef\x64\xf2\xaf\x3b\x01\x71\x9b\x00\x9f\xb1\x65\x61\x02\x72\x0a\x4f\xea\x9b\xee\xcb\x72\x3f\x82\xcd\x4e\x24\xab\x51\x96\x26\x1d\x91\x14\xd8\x9d\xdd\x2c\x6d\x61\x8f\xe6\x05\x64\x90\x04\x37\x3c\x78\xdd\x6a\xd7\xa6\xb2\x67\xd7\xeb\x56\xa8\xbd\xd5\xb3\xaa\x0d\xd5\xfd\x3b\x2f\xc4\x85\x63\xbd\x30\x31\xbe\x34\xe5\x01\x41\x08\xe3\xdd\x34\xe6\x4f\x83\x31\x75\x36\xa2\x0d\x07\xfd\xda\x8e\xa4\x51\xda\x95\x5a\xfd\x72\x7d\xf5\x0b\xb9\x90\x1b\xec\xdb\xdb\xd8\xf6\xac\x17\x8b\xdc\xff\xda\xb6\xe0\xf9\xdb\xe6\xe4\x9f\x65\xdc\x0a\x4b\x84\x82\xa4\x09\x4d\x18\x6a\x3e\xe5\x9c\xdb\xed\x09\xd4\x0c\x33\x29\x82\x97\xd2\x5e\x81\x60\x40\x15\x37\x40\x92\x75\x35\x96\x26\xd8\x86\x54\x2d\x9f\x16\x26\xfd\xa7\x71\x59\xa1\x06\x3f\x9a\xae\xc9\x4a\xd7\x1d\x1a\x13\x95\x7a\xab\xb4\xe0\x64\x79\x5a\xed\x09\xb4\x63\xe0\x0e\x70\xbc\x57\x0c\xb9\x0b\xde\x85\x6e\xaf\xd0\xb9\x8e\x1a\x45\x1a\xf2\xd0\xc8\x40\x88\x76\x58\xc3\xa0\xdf\x94\xc3\xa7\x7c\x13\x8a\xeb\x47\x6a\x5d\xb1\x28\x44\xdc\xe7\xad\x28\x0f\x97\x62\x55\x24\x7a\x08\xea\xe7\x51\x4b\xc0\x91\x06\x99\x28\xd5\x60\xca\x92\xd3\xbb\x9f\xb6\xf5\xc9\xe9\x62\x3e\xa2\xc8\x14\x1c\x2a\x44\xfb\x3b\x95\x0f\x54\x41\xe9\x1d\x67\x8f\x1d\x11\x6c\x38\x7a\x17\x97\xa3\x77\x7b\x54\xac\x9c\xd4\x33\x88\x7d\x61\x8c\xed\xce\xa3\x96\x38\x0c\x0e\x82\xdc\xff\xd4\x58\xf0\xa1\xb1\x79\x73\x01\xbb\xbd\x64\x29\xa0\xa9\x73\x1a\x42\xbc\x20\xa9\x0c\xfd\x0b\x79\x83\x4f\x37\xe5\x9a\x02\x4f\x15\x39\x9c\xc3\x4c\x1c\xe0\xa7\x12\xc8\xf0\xa9\xf3\x13\x69\x22\xea\x7c\x3e\xed\x08\xfc\xfb\x64\x72\x28\xeb\xcf\xf5\x12\xae\xfb\x17\x84\x97\x5d\x28\x3f\x7e\x6a\x7e\x01\x42\x8a\x20\xb2\x11\x0c\x9a\x72\xed\x46\x71\x44\xe7\x32\xb0\x65\xd6\x79\x1e\x25\x4d\x01\xb7\xd1\xff\x4c\x4e\x11\x8c\x23\x53\xc7\x0e\x82\x45\xcd\x0b\xd1\xd5\x91\x47\x7a\xf4\x28\xca\x5a\xa9\x2e\x4e\x2d\x64\xf3\x31\xf7\x4a\xc1\xc6\xcb\xc3\x59\xd2\x02\xcf\xc2\x9c\x1a\x76\x2d\x7a\x5b\xd8\x2c\xcd\x99\x66\x22\xbc\x7a\x45\x3a\xa9\xeb\x84\x71\x0d\x7d\x4a\x61\x0d\xf5\xaa\xd4\xbd\xa0\xc6\xe1\xa6\x9b\x54\x27\x4a\xe9\x2d\x3b\xd0\xd5\x63\xe9\xa6\x73\xe0\x7e\x5d\x8d\x5d\x56\x44\x1d\x91\xf6\x0a\x45\xb0\xf5\xf3\x9a\x61\xea\x3b\xde\x82\x73\xcb\x4a\x05\x85\x00\x77\xbc\x59\x41\x2b\x31\xad\xb3\xf6\xd5\x33\x5d\xa0\x57\xaf\x97\xe4\x4d\x1c\xeb\x36\x47\xcb\x49\x2a\xd7\x28\x99\xd2\xa6\x67\x67\xac\xfb\xed\x30\x8a\x8d\xe6\x24\xef\xcb\x2b\x72\x90\xc8\xbd\x80\xd8\x65\xf4\x2d\x0a\x11\x22\x2b\x84\xca\x1f\xd9\x0f\x63\x76\xd5\x3e\x45\x11\xa6\xfb\x46\x76\x8d\x75\xd9\x49\x21\xf8\xf5\x6d\xec\x61\x7a\xec\xe7\x84\xdc\x02\x94\x41\xc2\x7f\xe5\xb6\xe0\x7b\x63\xd3\xd5\x37\x89\xaa\x42\x9f\x8c\xe9\x88\xd6\x85\x8c\x38\x79\x65\xb1\xf4\xe2\xa2\x39\x1e\xcb\xe6\x29\x05\x5a\x9c\xe9\xd2\xa2\x99\x9d\x51\xec\x24\xd0\x23\x45\xd6\x57\x39\x3c\x78\x46\x55\xc7\x09\x9a\xb0\xf0\x45\x94\x84\x51\xa1\x0c\x25\x39\x65\x91\x24\xda\x9f\x67\xce\xe4\x76\xfe\x1d\x0c\x26\x94\x60\x2c\x2c\x4b\x7d\xab\x0e\x75\xdb\xe6\x61\x46\x48\x4f\x04\x9d\x07\xdb\x46\x80\x48\x00\xf8\x6d\x99\x81\x77\x44\x98\x99\x54\xda\x55\xab\x6a\x25\x47\xac\x95\x0a\xd4\x02\x29\x1a\x10\x83\xdc\xd4\x13\x3a\x2b\x50\x4d\x9a\x79\xaa\xa0\xc5\xd5\x20\xac\x25\xa3\xaa\x2a\x4b\x5e\x02\x8b\x39\x32\x45\xa5\x95\xb3\xca\x9a\x21\x8b\x4f\xde\x43\x32\x72\xcf\x53\x16\x47\x79\xc6\xde\xe0\x31\xe7\x7c\xe2\xbf\xc8\x63\x8f\x39\x47\x69\x5c\x41\xb0\x13\xdc\xe2\xd0\xed\x28\xb3\x34\xa5\x66\x53\x32\x3d\x70\x33\x69\x39\x83\x6b\x52\x65\xc5\xb3\x77\x79\xec\x52\x6a\x28\xe1\x60\xbd\xce\x0b\x5e\xec\x1d\xb1\x2f\x39\xe5\x3a\xe8\x07\xc0\xbe\x62\xc1\x04\x18\xc9\xa8\x01\x03\xe4\xf6\xb7\x12\x26\x2d\xb9\xf3\x4d\x9a\x41\xd5\xb2\x9e\xcf\xc0\x5a\x97\x4b\x5d\x7e\xd4\x15\x52\x78\xcf\x91\x51\x7f\xa5\xc8\x11\xbf\xec\x05\x9f\x03\x22\xd4\xc4\xc2\x8f\x1e\x38\x56\x36\x30\xc5\xdf\xa4\xce\xb4\x7b\xf2\x48\x7d\x47\x2f\x8c\x29\x8c\x08\xa9\x4f\xa2\x4e\xb8\x2c\x68\xa4\x1d\xdd\xef\xff\x63\xef\xcf\xc3\xe4\xb8\xca\x7b\x71\xfc\xa9\x1e\x59\x1a\x1d\xc9\x36\x2e\x1c\xb2\x43\xfd\x8a\x10\x49\x30\xd3\x23\x79\x91\x6d\x19\xdb\x8c\x46\xdb\xd8\xd2\x68\x98\x19\xc9\x6c\xc6\xaa\xe9\x3a\x33\x5d\xa8\xba\xaa\x5d\x55\x3d\xa3\x86\x70\x03\xd8\x66\x87\x10\x4c\x58\x06\xc8\x25\x09\x3b\x66\xdf\xc2\x0d\x3b\x09\x24\x21\x09\x09\x97\xdc\x84\xb0\x24\x04\x12\x6e\xf2\x10\x02\x59\x89\x92\xdf\xcd\xf7\x39\xef\xfb\x9e\xad\xba\xba\x67\x46\x0b\x38\x61\xfe\x91\xa6\xab\x4e\x9d\xfd\xbc\xe7\x5d\x3f\xaf\xe0\xbe\x78\xc6\x3d\xdf\x28\xe1\x97\xb3\x2c\x15\x66\x6a\x0b\xb1\x9b\xac\x2a\xaa\x4a\xa7\xd9\x62\x90\xc8\x18\x2c\xb5\x1c\xd6\x48\x9f\x77\x59\x55\x02\x4e\x03\x2b\x04\x6c\x5f\x5f\xbf\xd4\x9f\xb2\x1f\xf5\xcd\xb4\x58\xf4\x4d\x7f\xcb\x0d\xec\x80\xfa\x8a\xa3\x90\x6b\x56\x1c\x95\x8d\xcd\x46\x96\xdd\xce\xee\x32\x12\xb5\xf1\x73\xc8\xd3\xb6\x47\xa5\x69\xeb\xc9\xc9\x96\x57\x26\x65\xab\x6f\x24\x80\x84\x5b\xe8\x31\x6c\x73\x3b\xe8\xe4\x3c\x74\xf7\xfa\x3b\x27\x6d\x37\x0f\x5c\x61\x85\x2b\x01\x5e\x1d\xe4\x8c\x66\x58\x63\x5f\x37\xc4\x7e\xb4\x9d\xa5\x10\x15\x7f\x80\x07\x61\x1c\x25\x5c\xce\xe7\x3d\x43\x72\x3e\xbf\x5d\x9b\x33\xe2\x3c\x01\x41\x36\x4a\xac\x19\x35\x41\x33\x54\x5a\x1c\x59\xb1\x0c\x3c\xef\xf1\x7e\xc0\xf9\x12\x34\x87\x53\xe2\x22\xa3\x16\x9d\xd7\x0e\x27\x4a\xfc\x8e\x92\x0e\x47\x81\x01\xfd\xb2\xf0\x53\xe3\x2b\xbc\x1a\x02\x9d\x55\x43\xaa\x93\xa7\x4b\x83\x3c\x78\xa6\xc1\x79\x08\x0a\x8b\x20\x97\x97\x15\x10\xfe\x6c\x21\x68\x68\xd7\x15\xa3\x43\x88\xcc\x5c\xf7\xa6\x54\x66\x22\x35\x40\xd3\xee\xcd\xf3\x22\x6a\xc1\x86\x0a\x3b\x99\x94\x1d\x60\xce\x82\xea\x05\xb1\xb6\xc6\xde\xdd\xbb\x4b\xac\xc6\x4b\x1d\x23\xcb\xe7\xbd\x6a\x8f\xb7\xa7\x7a\x92\x7a\x62\x24\xeb\x79\x24\xf4\xb4\xf2\xe0\x95\x53\x7a\x5a\x9d\xfa\x94\xc3\xae\xcc\xf8\x52\x24\xe8\xeb\x91\x28\x2f\xd2\xac\x7b\x34\x6a\x45\x85\xfb\x56\xd5\xc1\x97\x21\x45\x56\xbd\x4c\xe3\x50\xa6\xd0\x9c\xe5\xe4\xd1\xc0\xc5\x49\xd2\xce\x9e\x0a\xfc\xe4\x62\x0d\x62\xb7\x3d\x8a\x7f\x31\x91\xb9\xfe\xe6\x42\x20\x73\xbd\xde\x39\x6a\x89\xf5\x70\x38\x64\x8e\x04\xec\xbe\x35\x09\xa8\x8c\x01\x42\x07\xd6\x05\x03\xfc\x0a\x39\x67\xda\x96\x70\x4f\x88\x7b\x37\x00\x9e\xde\x28\x61\x80\xd5\x78\x93\x45\x19\xd4\xa6\x6d\xa4\xf4\xdc\x91\x93\x07\x60\x9d\x7d\x48\x0c\x9c\x5c\x69\xdc\xfb\x1d\x76\xf5\xea\x89\xc7\xf5\xbd\x42\xdf\xf9\x87\xe6\xca\xe7\x43\xfa\xe6\xa8\x18\x72\xb1\x6f\x83\x06\xf7\xb8\x1c\x3b\xe2\x94\x81\x29\x84\x2f\xc3\x88\xea\x67\x9d\x11\xf6\x93\x16\xd0\x4d\x5b\x74\x7f\x54\xf5\xef\x52\x77\x1b\x6e\x94\xdb\x78\x37\x67\xec\x13\xdb\xd9\xde\x73\x43\x17\x70\x9f\xbd\xdd\xff\x03\xa7\x1f\xee\x35\x5d\x95\x36\x0f\x8a\xb4\xad\x2f\x0e\xbb\xb2\x76\x75\x8a\xb4\x15\x14\xe4\xb4\x83\x98\x6b\x79\x6f\xc4\x2d\x82\x52\x75\x0d\x73\xb9\x94\x4c\x25\x9d\xe8\xc9\x8b\x6d\x4b\x37\x2a\xfc\x57\xed\x6f\xeb\x2e\xfe\xc0\xd6\x0d\x24\xad\x0d\x24\xad\x8b\x85\xa4\xf5\x39\x13\x5d\xf4\x93\xe7\x8d\x2e\xfa\x0c\x47\x56\xa6\x9d\xfb\x2c\xb4\xd1\x8b\x9f\xc5\xe3\x1f\x25\xb4\xe8\xdf\xae\x37\xfc\x7f\x00\x3e\x89\xff\x5a\x27\xef\xcb\x7a\xab\xa4\x6b\xc8\x73\x77\x14\xd3\x6d\xe0\xd8\x5f\xe0\xd1\x8a\x0e\x8c\x06\x49\x38\x4a\xfc\x0b\x7b\x89\x23\x96\x14\x12\x4f\xdc\x3b\x50\x04\x5d\x6f\xde\x37\xff\x3a\x4a\x5e\x11\xd9\x69\xdd\x7a\x91\x2d\x4a\x23\x3e\xeb\xb4\x56\xc7\x3a\xbb\xd5\x3d\xa2\xb1\xce\x74\xd7\x14\xe4\x59\x9f\xae\x59\xb8\x67\x38\x0a\xc6\xbe\x70\x25\x5b\x05\x95\xbc\x07\x42\xd6\x7d\xdd\x95\xfe\x53\x34\x0a\xa3\xb7\xa7\x7e\x83\x37\x8a\x7c\x0a\xba\xac\x49\x45\x4b\xba\xe0\xf5\x7c\x8c\x29\xc1\xa5\xc3\x8b\xb8\xbb\x35\x42\xec\xd8\xd2\x9e\xb1\x9e\x0f\xea\x2b\xce\xb6\x76\x1a\x4a\xbe\xc2\xa2\xf2\xaf\x78\x30\xfb\xc2\x26\xb6\x99\x03\xeb\xe9\xfe\xce\x26\xff\x1f\x86\x8e\x4a\xaf\x66\x64\x47\xc1\x0c\x50\x8d\x4b\xa0\x38\x0c\x64\x4a\x8e\x77\x8a\xc5\x14\xa8\x5a\x2f\x92\x35\xea\x17\x29\x2c\x33\x49\xad\x51\x45\x5c\x22\x75\x2a\xed\x78\x1a\x7a\x3b\xc1\x5d\x9f\x34\xef\x14\x6f\xa5\x13\xb5\x1a\x91\x57\xd4\xda\xae\x11\xef\xf8\x8c\x8c\xcf\x92\x3d\x90\x56\x03\xcb\xa3\xc8\x18\x98\x89\x2c\x43\x87\xc7\xc6\xea\xb6\x0d\x5d\xc6\x2c\x5a\x46\x53\xe9\x0b\x6b\xfb\xf9\xa0\xcd\xa5\x40\x1f\xf7\x32\x0e\x30\x41\x4e\x61\xcb\xe5\x89\x83\xb1\x83\x16\x4c\x08\x6e\x31\xa5\xf9\xe4\x49\xde\xc9\xb8\x96\xc8\x30\x0f\x46\x41\x73\x87\x4c\x5f\x94\xa7\x2a\x89\x1b\x39\x9e\xef\xb2\xe2\x34\x23\x74\x13\x21\x3f\x81\x28\xf1\xf6\xd4\xaf\x37\x15\x4d\x87\xd9\x41\x36\xb1\x1e\xc8\x7d\x6b\x54\x07\x61\x6a\x67\x3a\x31\x67\x1f\xd8\x24\x78\x63\xdc\x57\x6f\xdd\xe4\x7f\x5e\xed\x2b\x7a\xb8\x8e\x8d\x35\xd7\xbb\x9f\xc0\x63\x02\x90\xb8\xd6\xbd\xb1\x7a\x77\x89\xf6\x37\xd4\x91\xaf\x90\x21\x16\x30\x44\xd6\xbc\xaf\xcc\x81\xfd\x00\x37\x96\xd2\x65\x52\x30\x49\xd2\xbd\x58\xfb\xca\xdc\x37\x47\xd8\x21\x76\xe0\x9c\xf7\x0d\x61\xe9\xc1\xc6\xf9\xca\x10\x33\xc9\x95\xfb\xfb\x43\x17\x40\x96\x7a\xee\xd0\x2c\x8d\x46\x2b\x83\x34\x06\x50\xcf\x1c\x12\xd3\x40\x7e\x21\x04\x2f\x05\x23\xed\xdd\xc1\x25\xef\xba\xa4\xdb\x8b\x3d\xac\x97\xaf\xee\x1d\x43\x00\x2a\xae\x70\xff\xdb\x72\xab\x02\xf8\x10\x7c\xa5\xdd\xfe\x28\x50\x9f\x70\xa5\x26\x69\xc1\x1b\x41\x4e\xbe\x17\x76\x57\x00\xeb\x2f\x20\x8f\xb9\x46\xda\x9a\x8f\x04\x47\x8e\x1e\x4a\x4b\x3c\xee\x96\x29\xc1\xd4\xf1\x39\xe5\xde\x06\x4c\x34\x59\xd9\x35\xf7\x64\x1b\x96\xbd\x9c\xb7\x82\xa4\x88\x1a\xb9\x11\x2c\x5d\xb5\x77\x65\x2a\x27\xa5\xe8\xd7\x79\xf9\xd9\xeb\x37\x8b\xf5\x15\xd3\x8c\xd1\x86\x2f\xdb\xec\xff\xeb\x25\x92\x38\xc0\xd9\x41\x30\x2b\xb5\x1f\xed\xa5\xc9\x78\x8c\x8a\xa9\x94\xfc\x27\x15\x30\x9e\x18\xb4\x4f\x3b\xc9\x1f\xf1\xfc\x83\xf2\xaf\x34\x53\xcf\x47\xe8\x61\xc5\xa9\x2a\x25\xee\x97\xee\x8a\x32\xa8\xcf\x92\x9d\x40\x06\x95\x90\xd0\x0a\x08\x32\xf3\x0e\x1a\xab\x71\xa3\x5e\x59\xc4\x23\x41\x5d\x9f\x90\x7f\xa8\x58\x4e\xb9\x66\xc0\x8d\x2c\xcf\x3b\x2d\xda\x42\x20\x96\x53\x21\x14\x6e\x70\x3e\xa9\xb6\x9d\x3d\xb9\x5f\x79\xd7\xac\x5d\xf6\x87\xaa\xdf\xd5\xa7\x7e\x2a\x06\x33\x61\xfa\x7d\x2c\x67\x51\x01\x99\xb4\xf1\x9e\x1c\x05\x3f\x10\x5c\xb0\x11\x0c\x47\xeb\xe4\x85\x15\x5c\x8f\x48\xd6\x9e\xb1\xa8\xde\x13\xd5\xf4\x7b\x77\xd4\xbd\xa3\xd1\x69\x2e\xae\xed\x11\x41\x47\x2b\xda\x92\xf7\x3b\xa6\xa3\x34\xec\x7f\x18\x2d\x47\x17\xb6\x26\xff\x46\x3f\x64\xe3\x81\xd5\x3c\x8a\x5a\x08\xaa\x4a\x16\x1d\xd5\x9f\x9d\x68\x9f\x45\xa7\x49\xd9\xf2\xb2\x4a\x9f\xae\x2d\x40\x3d\xcb\x94\x84\x54\x4e\xf3\x21\xa1\x36\xde\x3c\x45\x74\xe7\x89\x7a\x07\x7a\x77\xac\xef\xe6\x2d\x99\x78\xbe\x3c\xbc\xe6\xdc\x9f\xc8\x7f\xbf\x6d\xd8\x9f\xa8\x7e\x65\xc8\x44\x2a\x1d\x5c\xb9\xa4\x14\x12\xeb\x2b\xce\xb0\xcc\xea\x69\x71\x8a\xbf\xb7\x85\xbd\xdb\x61\xea\x9d\xfb\x7a\xc7\xff\x25\xc7\xd4\x13\xcb\x54\x9e\xa2\xb5\xbc\xd3\x68\xf0\x3c\x47\xa3\x88\xce\x2a\x6a\xcc\x06\x2c\x1e\x6c\x2d\xc2\x93\xa3\xe0\x2a\x21\x6c\x14\x5d\xe9\x38\x21\xef\x6d\xac\x42\x3b\x85\x10\x3e\x3b\x1e\x45\xd4\x05\x8c\xca\xac\xa3\xb6\x52\xfa\x53\x35\xe6\x06\x6a\x94\xc7\xa4\xc8\x79\x7f\xcd\x7f\x71\xed\x44\x1b\x22\x4c\x64\x57\xa9\x95\xb2\xbb\x76\x3b\x6d\x13\x76\xa0\x42\xe3\xb5\x61\xd1\x8b\x4e\x96\x18\xb9\xcc\x4a\x5d\xb5\x31\x29\xc0\x44\x1d\x7a\x51\x52\xa4\x42\x3c\xcf\xc5\xa4\x27\x85\x77\x7b\x10\x15\x87\xd2\x6c\x9c\xbe\xcd\x3c\x08\x70\x46\xfb\xe2\xf7\x6b\xda\x06\x61\xaa\xff\xb5\xc3\xb6\x85\x5c\x14\x3c\x98\x65\x69\xe6\xfe\x1f\x87\x8d\xf5\xbd\xec\x7b\xb6\x2a\x7c\xe3\xff\x2a\xe8\x70\x21\x6f\x1c\xd8\xf7\x3c\x9e\x80\x22\x0b\xb4\xf7\xa4\xde\xc6\x36\xac\x0e\x83\x96\xeb\x3c\xe6\xa0\xa2\xca\xfe\x73\x00\x03\xc5\x5f\x17\x77\xa0\x15\x2b\x73\xbe\x03\x5d\xd7\x62\xb3\x95\x2b\xd9\x8e\xca\xa1\x50\xb8\x38\xfe\x9e\x88\x83\x3c\x77\xbf\xfd\x60\xff\xeb\x8e\xf9\xa4\x6c\x5b\xd3\x69\xee\x51\xc7\xd9\x80\x42\xe9\x82\x47\xd5\x1a\x86\xb2\xe9\x52\xb6\x5e\x95\x4a\x38\xec\x26\x41\x8b\x94\x9e\x10\x39\x81\xfa\xc4\x3a\x63\x66\xcb\x64\xdc\x4d\xd2\x64\x54\x87\xfc\xdc\xd8\x63\x06\x95\xed\x62\x47\x82\x46\x23\xcd\x42\xc2\x9e\xe5\x45\x23\x44\xb8\x4d\x4f\x2b\x90\xea\x53\x41\x8b\x83\x9c\xac\x5a\xb6\xe5\xe4\xbb\xaf\x60\xbf\xe8\x30\xa6\x47\xea\x3e\xcb\xf1\xf9\xb4\x1e\x78\x33\x8d\xc3\xca\xd9\x80\x47\xba\x56\x2b\xe5\x32\x5a\x0b\x55\xac\xb7\xd4\x99\x5a\xbd\x1f\x78\x2e\xbf\xe7\xb0\x2b\xf0\xeb\xfd\x51\x22\x46\x78\x2c\x0d\xb9\xfb\x97\x8e\xff\x05\xca\x02\x6d\x3c\x36\xe2\xad\x9a\xe9\x72\xcf\x42\x4c\xc4\x41\xd4\x32\xc1\x20\x8d\x45\x40\x4f\x86\xb4\x93\x84\x75\xcf\xbb\x5d\xc8\x1d\x9d\x04\x30\x42\xad\x46\x26\x5b\x2d\x1e\x46\x62\x40\x14\x30\x5b\xbe\xfe\x60\x2b\x37\x53\xf4\xc1\x99\xef\x92\x9f\x07\xdd\xf3\x88\xda\x00\xd3\x85\xb5\xce\x8a\x3b\xa3\x03\x1e\x73\x04\xf2\x60\x99\xb1\x9f\x3f\xa4\xc0\x83\xe6\xd2\x76\x1a\xa7\x8b\x11\xcf\xdd\x7f\xaa\xf9\x6f\xab\xcd\x70\x51\x86\xd8\x68\x80\x81\x2c\x54\x09\x32\xbb\x2f\xad\x6d\xf3\x61\xa8\xb6\x15\xd5\xaf\xd4\xde\x42\x7a\x4f\x97\x13\xc3\x7d\x85\x5a\xe9\x96\x10\x71\x0d\x5e\x99\x7a\xda\x35\x93\x17\xca\x44\x69\x98\xbc\x94\x67\xe4\x91\xac\x6b\xcb\x68\x38\x60\xd2\xbf\xe0\x33\xba\x56\x94\x1e\x69\x70\xaf\x1a\xc2\x86\xe6\x7b\xed\x9a\xef\x8f\x9b\x9a\xef\xf7\x9e\xb7\xe6\x3b\xbb\x48\x69\xb5\x06\xa9\xba\xa7\x98\x49\x27\xdd\x5b\xfc\xab\xa6\x0d\x02\x17\x59\x3c\xa1\x84\x1b\x2e\x91\x41\xeb\x28\xbf\xc2\x61\x97\x66\xbc\x21\x08\x10\x39\x0b\xdd\xeb\xf8\x67\x0e\x54\x9f\xc9\x8a\x1b\xa4\x92\x6e\xa2\x0c\x4c\xee\x18\xe4\xa6\x04\xf6\x28\xa3\x1d\xdb\xa2\x7b\x80\xc7\xbc\xb0\x89\x4c\x42\xe8\x8a\x74\xbd\x9f\x69\x07\xa0\xc5\x70\x4f\xfa\x47\xc6\x2b\x9e\x43\xe4\x4f\x6e\x45\x5d\x94\xfa\x04\x2a\x19\xa2\x27\x5c\x7c\x16\xda\xa0\x4d\x1b\x16\xb7\x75\x59\xdc\xbe\xe5\xb0\xed\x2d\xc1\x5b\x49\x84\xdd\x2f\x39\xfe\x47\x9d\x8b\xb0\x73\x78\xce\x3d\xb3\x21\xca\x3a\xfd\x44\x3f\x4b\xfd\x11\xcf\xcf\xd3\x85\xc2\xbf\x03\xdc\x39\xa4\xd7\x22\xf8\xa5\xb5\xa4\xa5\x56\x4c\xe5\xf4\x49\xb2\xc1\xe7\x51\xab\x1d\x77\xd1\x47\x30\xc2\xf4\xbf\xc0\x90\xc0\x97\x03\xdc\xfe\xce\x3a\x7c\x75\xd3\xc6\x7e\xf7\x31\xca\xb4\x21\xb9\xba\x52\xde\x38\x93\xa1\xaa\x4c\xe5\xf2\xca\x21\x76\xc3\x9a\xfd\x07\x67\x31\xf5\x87\x82\xac\x76\xff\xac\xe6\xdf\x58\x7e\x48\xfc\x51\x80\xe9\x1a\xe0\x49\x91\x7a\x54\xaa\x1e\xf3\xc5\xa0\xd1\xa5\x6e\xae\x38\x5b\x15\x6b\x47\xd1\x58\x16\x2b\xf6\xef\x0e\x7b\x0c\xf9\xea\x5d\xef\x3f\xea\x94\xf8\xe3\x54\x95\x2b\x1c\xa5\x24\xd1\x5e\x70\xe6\xc6\x39\xce\x74\x23\xee\x7e\xff\xda\x53\xea\x97\x55\x17\x46\xb5\xac\xa5\xc2\x05\xb6\xa9\x1d\x14\x4d\xf7\xc9\xfe\x63\x4f\x89\x3f\x4e\x49\xef\x5c\xa9\x5e\x3b\x31\x73\x14\xd0\xbc\x88\x0f\xd6\x50\xea\x60\xd4\x22\x53\xbe\x02\x2c\xc3\x5d\x49\x0d\x9a\xed\x7c\xf5\x47\x98\x5f\x05\x34\x6d\x63\x92\xb8\x1f\xfc\x11\xff\xcb\x4e\xe9\x21\xad\x41\x4e\x4f\x4b\xde\x09\x36\xfc\xa7\xa1\xd0\x34\x41\x96\x66\xd3\x16\x47\xee\x03\x4f\x09\x51\x1a\x85\xe0\x59\x6e\x51\x90\x09\x03\x23\x59\x22\xa6\x10\x13\x89\x68\xb8\xe0\xaa\x42\x78\xf3\xe4\xbf\x19\x25\x3d\x35\x15\xe8\x04\xc6\x1b\x3c\x14\xbb\xc7\xf6\x55\xf8\x9d\x07\xb3\x7f\xaa\xb1\xcb\x08\xcb\x4a\xd2\x82\xaf\xd5\x06\xc8\x6e\xd5\x08\xdd\xfe\xdb\xc1\x3b\x4d\x62\x49\x37\x64\xe3\x03\x51\xb9\x7b\x21\xe4\xac\xd7\x5e\xd6\x49\xc0\x65\x0b\x26\x57\xdc\x00\xe0\x39\x1b\x78\x59\x90\x84\x69\xab\xa7\x31\xa5\xc4\x35\xc1\xad\x8e\x05\x5d\x2f\x88\xf3\x54\x4a\x82\x51\x52\x3d\xaf\x04\xc8\xb2\xbe\xf5\x30\xe6\xde\xf6\xd1\xae\x5a\x84\xdc\x5c\x05\xf6\x06\xc7\xc2\x31\x7c\xb9\xe3\x3f\xc7\x99\xe9\x24\xc6\xe8\xa3\xc4\x80\x28\xf4\x5a\x69\xc8\xeb\x00\xe1\xc6\x41\x98\xb3\xdf\x1a\xa8\x37\x62\x5b\x88\x22\x49\x11\x61\xb0\xea\x5d\x9d\x68\x29\x88\xc9\x25\x10\x00\x64\x48\x17\xdb\x4c\xf3\xc2\xbe\xc8\x01\x8b\xc6\x56\x03\x3d\xbf\xc6\xb6\xb6\x25\x70\x9c\xfb\x1f\x8e\xff\x6d\x47\xfd\xf4\x42\x9e\xa4\x65\x7e\x45\xbc\x25\xf2\x2d\x5d\xe0\x49\x98\xd3\x9d\x94\x6e\x86\x0a\x85\xa2\x0c\x67\x47\x67\xbd\x93\xf3\xbc\xcf\x9e\x50\xe0\x50\x0b\x90\x2e\x3e\x08\x51\xdb\x0a\xa8\x7f\x78\xc7\xe6\xa7\x79\x28\xb1\x02\xcf\x0b\x0c\x4f\xd3\x90\xbb\xfa\xc2\x15\xdd\xee\x4f\xde\x6e\x46\xd8\xe8\x0e\x37\x83\x9c\x20\x7c\x46\x6d\x08\x1f\x09\x3e\x64\x80\x71\x54\xcc\xff\x47\x86\xd8\x76\x40\x8f\x9c\x4a\x13\xd1\xa6\x7b\xff\x90\xff\xda\xa1\x0a\x37\x53\x03\x3d\x08\x32\x53\x20\xc8\x25\xa1\x14\x89\x36\x3b\xb9\x84\x1c\xc8\x3a\x64\x04\x91\x48\xcf\x70\xc0\xe4\xf5\x8b\xe6\x91\x96\xb8\xd5\x83\x42\xcd\x77\xc9\xdc\x15\x15\xda\x5c\x46\x4d\x9d\x98\x3c\xe0\xed\xf6\x76\x8a\xb6\x76\xa1\x4d\x44\x5c\xd3\x45\x4a\x88\x02\x76\x1f\x31\x36\x4d\x54\x21\x89\x00\x2f\xbc\x34\xc3\x19\x18\xc1\x10\x7d\x21\x40\x96\x02\x19\x84\x74\x2d\x03\x65\xeb\x0f\xd4\xb3\x6d\xad\xdf\x1f\xd7\x06\xa0\x73\xfe\x7a\xcd\x7f\x4b\x6d\x75\x88\xc4\x0b\x00\x85\x88\x27\x40\x74\xca\x0b\xa3\x8c\x37\x8a\xb8\xab\xeb\x27\x1b\x6d\x92\xde\x99\xf0\xe5\x3b\x45\x6d\x39\x9e\x04\x33\x6d\x09\x11\x0d\xbd\x84\xaa\xea\xbe\x03\x10\xfc\x40\xd6\x51\xa8\x26\x0a\xb4\xce\xd8\x06\xf9\x3e\x6f\xcf\x2e\xb9\x83\xa6\x35\x41\xbb\x6a\x17\x1c\x9c\x89\xf1\xe9\x3b\x67\x1f\x3f\x7b\xe7\xf8\x81\x63\x93\x53\xd6\xbc\x7e\xda\x61\xdb\x4d\xbc\x43\xf7\xfd\x0e\x1b\x5d\xf5\xd2\x32\x61\x13\xfd\xbb\x41\xdd\x68\x83\x26\x02\xd2\xfd\x58\x98\xa5\x6d\xec\xae\x4c\xbe\x66\xd2\x2e\x93\x62\x16\xab\x60\x83\x2f\x66\x41\x52\x68\x1d\x77\x0f\x1d\xab\xb3\xfb\x6c\x08\xec\x7b\x30\xbe\x6b\xef\x35\xfe\xb7\xa1\x7b\x87\x27\x0f\x98\xa1\xd9\x00\x7e\x87\x52\x7b\x5a\xc6\x2c\x53\x0b\x72\x42\x90\xcd\x12\xa1\x14\x8b\x0c\xa7\xec\x81\x7d\x6c\x54\x68\x57\xcd\x04\xe1\xfd\x55\x35\x29\x2f\x04\x36\xe3\xc4\x39\x4c\x8a\xb9\x6a\x00\x37\x66\xf5\x0e\xe9\x9d\xf6\x85\xb3\xf8\x92\xff\x1a\x53\xf6\xe9\x61\xf6\xf0\x6a\x06\x37\xe3\xe2\x66\x25\x30\x7e\xf7\x97\x87\xfd\x17\xd5\xc6\xc3\xa0\x5d\x80\xa2\x09\x5e\xa3\x5d\x05\xe8\x0b\xc5\x35\xa2\xa8\x5d\x67\x8c\x32\x65\x16\xe0\xd7\x4f\xd3\x4b\xc9\x73\xb0\xea\x1d\xb9\x77\x40\xcc\x19\xea\xd6\x14\x99\x46\x06\x17\x07\xd2\x5b\x31\x44\xa6\x8b\x4b\xd0\xc8\xb0\x76\x9a\x77\x73\xe9\xf1\x6f\xd4\x48\x29\x9f\x00\xf5\x0e\x44\x0b\xd3\xf9\xbf\x20\x17\xf5\x28\x14\x0c\x4f\x23\x88\x91\xf3\xa6\x51\x51\x5b\xa4\x27\x93\x61\x24\xe6\x99\x05\xb6\xca\x62\x89\xff\xf3\x12\xf6\xfa\x4d\xec\x92\xa8\xe0\xad\xdc\x5d\xd9\xe4\x7f\x79\xa8\xcc\xa4\x02\x8f\x79\x9a\x77\x47\x71\xc9\xda\x41\x94\x55\x74\x9b\xa6\x4a\x89\x6d\x21\x4d\x97\x31\x43\x72\x4a\x60\xf2\x0d\x3b\x20\xdc\xdb\x30\x5e\x0d\x13\x20\x85\xab\xd3\xbc\x8b\x78\xac\xb8\x24\x0a\x63\x0a\x71\xe5\xc5\xfe\xb3\xb9\xe9\x18\x83\xfb\x60\x6e\x07\xb4\xac\xf7\x1d\x70\x4c\xa8\xa7\xe8\x24\x3d\x5f\x93\x1e\x90\x56\x97\x62\x08\x45\x9f\x22\x33\x4a\x91\x42\x1b\x91\x3d\x30\x44\x9d\x02\x41\x20\x33\x25\xb5\xd0\xfa\xf0\xa2\xd3\xc6\xfa\xd1\xee\x43\xd9\x12\x30\x54\xa5\x15\x64\x82\x93\xd3\xe0\x4f\x88\x12\x2d\x0d\x83\xe0\xd6\x10\x2d\x71\xa5\x59\x11\x6d\x4a\xa3\xbe\x68\x64\x47\xbd\xbe\x03\x05\xc8\x34\x33\xd1\x8d\xc4\x73\x4b\x67\x50\x67\x23\xec\x91\xab\x5e\x21\xb7\xf1\xee\x5c\x0a\x38\xd0\xf7\xc8\xc8\xb7\x9f\xf3\xd3\x29\x43\x7e\xa6\x25\x2f\x2a\x15\x39\xe7\x8e\x63\x00\x7b\x7f\xec\xe1\xf0\x9f\x2d\x91\x0f\xcb\xb9\x71\x27\xfc\x6b\x67\xc9\xae\x6f\xea\xd2\x68\xe7\x41\x7c\x54\x0e\xcb\x25\x67\x0f\x15\x63\xb6\x2e\xed\x1f\x86\x99\x67\x0d\x1c\x6c\x40\x52\x77\x51\x3f\xca\x83\x9c\xbb\xbf\x3f\xec\x3f\x14\xfe\x52\xba\xb5\xc0\x43\x00\x31\x1a\x8e\x7d\xaa\x3e\xb2\x65\x43\x45\xb7\xe1\x14\x7f\xb1\x4c\x03\xaf\x37\x4d\x03\xaf\x38\x6f\xd3\xc0\xc9\x8b\xa4\xfe\xff\x75\xe9\xe9\xfe\x4e\x87\x5d\x35\x80\xd0\x54\x9c\x37\xf0\x69\xef\xce\x56\x45\x90\xc2\xfb\x8b\xec\xaf\x7e\xd6\x79\xf2\xea\x0a\xd4\x1b\xdd\x1b\x94\x02\xd5\x1a\x44\x49\x8b\x0a\x1d\xb6\xd5\xa7\x8c\xbd\x6b\xbb\xa5\x9e\x2b\x9b\xd5\x27\x66\x27\xa7\xd2\x90\xbb\xcf\xdb\xee\xff\xc1\x26\xfa\x41\x6a\xb9\x5e\xc7\xf6\x20\x8e\xad\xd4\x23\x51\x92\x17\x1a\xea\x03\x0c\x9b\x75\xab\x40\x98\xc2\xad\x21\x71\x21\xc8\xba\x2c\x26\x57\x36\x45\x67\x48\xca\x4e\x75\x6f\x3c\xf7\xe2\x34\x59\x24\xee\xa4\xab\x30\x07\x45\xe5\xa3\x58\xef\xa8\xd4\xfa\x66\x00\x04\xd1\x08\x32\xcd\x97\xe2\xfd\x77\xda\x94\xbf\xed\xf0\x25\xe9\x3c\x53\xd5\x0b\x85\x68\xaa\x86\x00\xf9\x2c\xc4\xcd\x96\x2e\xa8\x4a\xc9\xea\x6a\xa9\x9e\x55\x4d\x4d\xe2\xaa\xc0\x57\x12\xf8\x0b\x52\x16\x84\xbc\x02\x66\x0a\xb4\xd8\xc9\x22\xf8\xf6\xa1\xbd\x95\xb0\xb7\x2d\x0f\x62\xd1\x1d\x99\x74\x46\x87\xd0\x92\xdc\x88\x0e\xc1\xd4\x71\xa9\x77\x58\xd2\x40\x99\x71\xba\xec\xf1\x24\xed\x2c\x36\x2d\x05\x43\xb2\xa3\xd0\xcb\x61\x60\x17\x98\xe3\x08\x12\xef\xf8\x72\xc2\x33\xad\x33\xc7\xb8\x50\x2b\xdf\x63\x23\xcd\x28\x59\xa7\xa0\x94\x89\x9e\xcd\xfa\x8a\x03\x87\xd2\xba\xae\x3e\xb6\x99\xfd\x9c\x41\x52\xda\xe7\x4b\x51\xc6\x94\x69\x11\xe6\x5a\xde\xbe\x72\x2e\x28\x61\x32\xf4\x0a\x10\xee\x58\x48\x94\xe2\x49\x03\x12\xdc\xf7\x39\x23\x40\x2a\x7e\xa6\x7f\xf4\x4b\xba\x20\x67\x6f\xe3\x4a\xde\xb8\x92\x2f\xd2\x95\x7c\xd6\x39\xb5\xfa\x85\x71\x93\x7b\xe3\x6a\x16\x37\xb9\x53\xab\x8c\x6d\xdf\xbc\x84\x5d\xbd\x4a\xa4\x54\x55\x0e\x74\xf7\x9d\x97\xf8\xbf\x3b\x54\xf5\xa6\xe4\xe8\x23\x53\xc2\xe2\xad\x51\x4e\x91\x5e\x91\xf1\x1c\x92\xbf\xae\x96\x2b\x7d\xe4\x02\xe5\x45\xbf\x60\xd9\xe6\xeb\xde\x03\x34\xc7\xba\xe7\x1d\x4f\xe2\x2e\x58\x79\x7d\xec\xaa\x8f\x56\x06\xed\x6a\x95\xf3\x42\x03\x4f\x6e\xc6\x42\x16\x21\xff\x94\xc3\xf6\x93\x94\xb6\xcf\x1f\x35\x05\xe9\xc4\x92\xd8\x64\x24\x4b\xe2\xc1\x82\x61\x22\x66\x7d\xf0\x9f\xce\xa8\x72\x37\x1f\x90\x27\xa3\x7f\x42\x66\xcc\x42\xec\xef\xa5\x15\x2d\x21\x35\x99\x79\xb3\xe5\xdd\xbe\x18\x2d\xf1\x84\xa6\x88\xbd\x9c\xad\x2b\x52\x6e\x9a\xf3\xcc\xfd\xcb\xad\xe7\x16\x29\x27\x3e\x5e\x57\xa4\x9c\xf8\xc0\x16\xf6\xbe\x39\xcc\xbe\x50\x8a\x45\xf9\xcd\x0b\x11\x8b\xf2\x9f\x35\x8d\x48\x50\x8a\xaf\x40\x8d\x83\x0c\xbc\x99\xd6\x18\x0c\xa8\x8c\x59\x73\x78\xc6\x8d\x08\xaf\x8d\x1a\x8b\xf9\x4e\x81\xee\x67\x23\x56\x54\x0f\x85\x68\xd4\x01\x00\xb2\x17\x73\x14\xbc\xed\xf3\x54\xd9\x66\x93\xde\x58\x0c\x98\xe3\x00\xd3\xc8\xa4\x31\x57\x55\x83\x61\x2a\x0d\x73\x8d\x0c\x3a\x6d\xc4\x88\x10\x8d\x50\x2d\xda\xa1\x32\x3d\x1d\xa9\x7b\xc7\x95\xb7\xbd\xd1\xfd\x35\xb5\x81\xce\xfd\x3b\xd0\x4f\x6f\x4a\x87\xa0\xbc\xcb\x61\x5b\xa2\xf6\xfe\x38\x6d\x9c\x76\x5f\x3f\x08\xb1\xa0\x62\x8b\x4e\x4e\xc3\x77\x7e\x8b\xfe\x50\xec\x85\x8c\x51\x04\x3d\x61\x90\x15\x51\xa3\x13\x07\x99\x47\xc5\x2a\x02\x4e\x08\xe6\x32\xf1\x12\x62\x43\x25\x86\x0f\xfc\x20\x2b\x3b\x3a\x28\xd6\xd9\x9f\x0d\x55\x21\xce\x5e\xa0\xfd\x28\x63\xa3\x8c\x35\x41\x6a\x46\xf1\x97\xa3\x04\xc8\x2a\x01\x5c\x2f\xe2\x96\x54\x63\xa4\x8d\x69\xad\xea\x03\x7b\x4b\x8a\xee\x4f\xab\xa0\xa7\x75\x54\xc7\x5e\x35\xcc\x7e\xaa\x42\x47\x77\x50\x30\x28\x47\xa3\xbc\x70\xbf\xb7\xc5\x7f\xa8\xfa\x55\x4a\x3e\xb4\x04\x8c\xd7\x8a\x83\xba\x5e\x8b\x82\xfd\xdd\xe6\x0d\xde\x78\x9d\xbc\xf1\xb4\xd4\x99\x1f\xf6\x2f\x3b\x6a\x4d\xb1\xa9\x63\x7d\x24\xdb\xc9\x7e\x76\x55\x1d\x2b\xac\xd8\x06\xb7\xbd\x76\x05\xd8\x47\x4c\x05\xd8\xbb\x1c\x76\xe3\xb9\xd0\xb6\x28\x47\x61\xf5\x2e\xe5\x19\x4b\x0e\xd6\x17\xc7\x2b\xd6\x18\xca\x59\xe7\xb1\xab\x4b\x0b\x75\x77\x44\x49\x0b\xbe\xaf\x24\x04\x75\xba\xcb\x1a\xa5\xdf\x1e\x62\x3b\x2b\xf6\x96\x64\xfc\x0f\x09\x2a\xac\xee\x83\x57\x0f\xf9\x4f\xa8\x7c\x63\xec\x1a\xd3\x7a\xab\x20\x7a\x77\x36\xda\x9d\x11\xc9\x95\x4b\xe0\xd1\x28\xf3\xd2\x4e\xd1\x46\xf4\xcd\x56\x50\xac\x38\xc3\xf2\x0b\x8b\xcc\xbc\xa1\xc6\xae\x65\xea\x95\xbb\xcb\xff\x29\xe9\x21\xb7\xcf\xca\x80\x84\x54\xd0\x5c\xf0\xc7\xb3\x4b\x55\x6f\x04\x5d\x74\x8f\xf8\x37\x4e\xa8\xee\x89\xbb\x60\x9f\xce\xe6\x27\x78\x4a\xf2\xdb\x1f\xd1\x7e\x75\xe0\x2e\x95\x2c\x79\x4b\x41\x66\xed\xa5\x97\x38\x6c\x4b\x18\x2d\x45\x79\x9a\xb9\xf7\xac\x67\x2b\xd5\x55\x56\x8f\xc7\x76\x02\x88\xb4\xf1\x0f\xce\x5a\x9c\xae\x35\x29\xf2\xd6\xa6\xbc\xb7\x7a\x4e\xed\xcc\x6f\xfe\x1e\x9f\xbd\xe5\x72\xf6\x28\x53\xf1\xa1\xdc\xf1\x15\x73\x31\x9d\x45\x29\x98\x4a\x21\xee\xe6\xdf\x2e\xf3\xbf\xe6\x18\xcc\x6f\x3f\xc6\xd7\xfa\xaa\x97\xe9\x35\xda\xa1\x3d\xbe\xb4\x67\xcc\xfa\xa6\x5e\xaa\x42\xde\x0a\xad\xa0\xdd\x86\x68\x01\x41\x4f\x02\xaf\x4d\x85\xc8\x4d\x16\x44\x0f\x22\xea\xea\x15\x99\x71\x75\x86\x68\x69\x12\xa6\x48\x0b\xca\x1e\x1d\x85\xb2\xa4\xb8\xb9\xa0\x84\xb5\xa5\x5e\xba\x7d\xe3\xe6\x5a\xe7\xcd\xf5\x02\x88\xd1\x13\x32\x39\x1c\x0d\xf7\xe7\xfc\xd4\xf8\x49\xee\xa8\x41\x36\x1f\x15\x59\x90\x75\xe5\xf5\x03\x3a\xc6\x4e\xde\xd1\xce\xd2\x21\xcf\xbd\xc5\x4e\x14\xf2\x18\xe6\x17\xb3\x08\x50\x18\x77\x69\x07\x68\x09\x96\xd0\x00\x75\x6f\xde\x38\xc4\x2e\xc5\x84\x15\xe4\xb1\xe0\xbe\x6c\xc8\xbf\x77\xc8\x7a\x64\x08\x90\x16\xae\xb3\xbd\x19\x75\x23\x76\xae\x43\xd3\xfe\xad\xfa\x25\x21\xd2\x70\x5c\xa4\x10\x07\x51\x1f\x02\xf3\xad\xee\xd7\xb5\x60\x6e\xb7\x48\x5b\x95\x2c\xb6\x41\xee\x9d\xb2\xba\x7d\xca\x44\x1e\x5f\x40\xdf\x25\x70\x58\xea\xa9\x89\xe7\x18\x29\xae\xf1\x98\xa3\xac\x5c\x19\xf1\xd1\x46\x1e\x40\x54\xaa\xe7\xad\x20\x8e\xc5\x76\xc3\xe3\x93\x2e\xa0\x2b\x19\x25\x01\x91\x03\x2f\x37\x67\x65\xeb\xe9\x33\x49\xb6\x67\xd7\x06\x7b\xb2\x66\xf6\xe4\xf3\x26\x7b\xf2\x5b\xe7\x6d\x9f\xbb\xdb\xb9\x48\xb1\x3b\x79\xb4\x38\x1a\x64\x8d\x66\x54\xf0\x46\xd1\xc9\xf8\x40\x6b\xde\x9b\x1d\x86\xf4\xd7\xfd\x65\x05\xb7\xf8\x5c\x47\xd3\x6d\x49\x4a\xcb\x67\x47\xea\x30\x20\xf4\xb4\x51\x74\x82\x58\x17\x21\xc3\x45\x08\xe1\x36\x3c\x5a\xe2\xca\x69\xae\x8b\x87\xd1\xd6\x5c\x41\xa2\x37\xb8\xba\x12\x3a\x23\x76\xce\x74\xba\x29\xce\x3a\xd1\xea\xec\xd5\x21\xf7\x80\x56\xc6\x96\x2f\x3e\xc5\x6d\x59\xc7\xa6\x52\x2b\xfb\x8a\x61\x76\x88\x16\x14\x12\x54\x05\x8b\x8b\x19\x5f\x0c\x84\xb8\x66\xe6\xbb\xa9\x8c\x88\x18\x9f\x9e\xa4\xc8\x06\x10\xde\x7e\x6f\x8b\x3f\x66\x3f\xb2\x25\x38\xfd\x4e\x21\xed\x57\x4a\x73\x2f\xdd\x90\xe6\xd6\x7b\x27\x3e\x45\x4a\x73\x81\x29\xbd\xcd\xb1\x19\x36\x5d\x79\x76\xcf\x63\xa9\x37\x08\xe9\xda\x09\xe9\xa4\x41\x47\x6f\x3a\x2f\x29\xef\xac\x93\xae\x4e\x13\x8e\xba\xb7\x6a\xb4\xb7\xd2\x42\x96\x08\x83\x7d\x4e\x2b\x29\xc3\x67\x18\xfb\x51\x83\x8b\x9f\x0f\x8a\x46\x53\x74\xe9\xd6\x74\xde\x7d\x1b\xf3\xf7\xdc\x9a\xce\x9b\xd2\x56\xd1\x83\x03\x0a\xf8\x1b\x39\xa6\x62\x7e\x4a\x3a\x6f\x2b\x9d\x5f\xb9\x75\x63\x23\xfd\x50\x05\xd3\xfe\xa6\xf4\xa6\xf9\x0d\x87\xed\xea\xab\x52\x32\x77\x19\x58\xc6\x5f\xe4\x54\x7a\xd1\x54\xe1\xb0\x07\xb0\xcb\x2e\xae\x67\x0d\x7b\x97\x06\x82\x7c\x83\xc3\x1e\xb5\xb6\x81\x20\xd2\xe3\xd2\x84\x34\x17\x1a\xf8\x34\xdf\x87\x2e\x6f\x5c\xa6\xeb\xba\x4c\xcf\x3a\x53\xab\x93\xda\x47\xb9\xbb\x46\x89\x94\xde\x9a\xce\x97\x74\x59\x9e\x24\xc2\xb0\x09\x18\x7b\xd1\x76\x4b\xb5\x45\xf0\xd0\x68\x70\x34\x31\xa2\x61\x57\xfd\xc5\x36\xff\x48\xf9\xa1\xe4\x3f\x5b\x69\x0e\xd3\xca\x93\x42\x08\x74\xf3\x00\x83\x10\x1a\xfb\xa9\xb0\x53\x11\x58\x14\xf7\x39\xdb\xd8\xdd\x26\x2c\xfa\xb2\xe4\x82\xe7\xe7\xd2\x22\x88\x0d\xd4\xf1\x24\x4d\x46\x0b\x9e\xb5\xa2\x44\x62\xfc\xe7\x64\xf5\xac\xc4\xd0\x86\xf4\x9f\x51\x46\x56\x13\x03\x48\x5b\x1a\x47\x76\xd9\x9e\xef\x9f\xa8\xb1\x07\x77\x12\x65\x6a\x9e\x91\x1d\x7a\x8b\xca\x95\x73\x5f\xad\xdc\x25\xa3\xfc\xaa\xfd\xb1\x79\xf6\xa2\x54\x93\x96\x9a\x21\x22\xb3\x10\x82\xa4\xa5\x7a\x2b\x6c\x84\xee\x22\x45\x56\x7e\xcf\xee\xdd\x8f\x30\xec\xe3\x8d\xa0\x1d\x34\x84\x90\xe9\xcd\x61\x3e\xa1\xae\x74\xb2\x9a\xe7\xa5\x36\x64\x50\xca\x7c\xa7\x00\x31\xbd\xcb\x0b\xd3\xe1\xca\x14\xe4\xb1\x3b\xd0\x1e\xde\x3a\x3c\x51\xf9\x1b\xac\x39\x7c\xa1\xc3\x2e\xa7\x0b\x49\xcd\x5f\x57\x4e\x5f\x78\xbe\x0b\x0a\x7d\x51\x02\x8c\xa4\xb5\x12\x13\xbd\x57\x62\x61\xcf\x77\xd8\x15\xbd\x0b\xda\x91\x1d\x3a\x55\xee\x50\x69\x31\x77\x62\xe2\x08\x00\xd5\x91\x48\x93\xa5\x4c\x15\xbb\x06\xae\xb8\xd5\x99\xaf\x3a\xec\xb2\x46\x1a\xc7\x10\x0e\x3f\x01\x81\x90\x9f\x55\x22\xdf\xfb\x9d\x09\x19\xab\xde\x0c\xf2\xa6\xa7\x0a\x6a\x14\x9b\x03\xd6\x4e\x32\x7f\x9b\xf9\x15\x28\xd8\x51\x19\x08\xc1\x18\xa7\x6a\xf3\x82\xa5\x34\x0a\x83\x04\x1c\x50\x1a\xcd\x20\x89\xf2\x16\x0a\x87\x11\x3a\x2e\xe6\x25\xcf\x45\x90\x12\x65\x0f\x12\xbe\x2c\xe8\xa3\x06\xbd\xb7\x07\xf8\x1f\x98\xc4\x1d\x93\x35\xe4\xee\xdf\x39\xfe\xb1\x19\x9b\x11\x23\x02\x6b\xec\x32\xa0\x15\x32\x8d\xdd\x82\x95\x56\x61\x47\xae\x1d\x59\x8a\xa0\xb0\xc1\x52\x6e\x62\x37\x0e\x72\xa1\xa8\x26\x65\x13\xb2\x73\x67\x9d\x1d\xec\xa7\x2a\x70\xea\x5b\x3c\x5b\xe4\xa3\xa7\x79\xd7\xdd\xe2\x5e\x22\x78\x1e\x26\x4a\x0e\x44\xb4\x1f\x76\x37\xc3\x57\x8c\x9d\x62\xae\x24\x7d\x87\x79\x42\x28\x50\xee\xad\x32\xe6\xe8\x5a\xb1\x66\x8b\xea\x85\x26\x93\x14\xd4\x55\x99\x2e\xc3\x9e\xe0\x3b\xd8\xa5\xb0\x23\xd5\x4e\x3e\x2a\xb7\xcf\x75\xe5\x9d\x8c\x3b\x77\x55\x92\x64\x55\x7f\xcf\x26\x4b\x3f\x1e\x74\x0a\x00\xcb\x57\x2e\xc4\x53\x69\x22\x8d\x1b\x33\x9d\x98\xbb\x5f\x18\xf2\x8f\x96\x9e\x55\x38\xd3\xa2\x26\x50\x27\x89\x45\x8c\x49\xb5\xa5\xd2\x64\x54\xde\x76\x2b\xce\x25\x4b\x3c\x9b\xb7\xa5\xee\xbf\xaf\xb1\xcf\x3a\xec\xf2\x44\xb7\x73\x62\xe6\x68\xee\x7e\xd0\xf1\x57\x9c\x29\xfb\x21\xb1\xe9\x04\xd9\x19\x64\x45\x14\xc4\x5e\x27\x8b\x25\xcd\xa3\x80\x2d\xe4\x06\x50\x29\x09\xd8\x73\xc0\x50\x7b\x8f\xa4\x7c\xc2\x12\xe2\x50\x90\x45\x08\xb5\x95\x91\x43\x9d\x38\x1e\xf1\x16\x22\xc1\x18\x98\x69\xe3\xda\x41\xd1\xac\x7b\x9e\xff\x48\x9f\x9c\x5a\x83\x38\x5e\x25\x77\x14\x0e\xd3\x7d\x99\xe3\x9f\x39\xc9\xb3\x79\x5b\x1d\x71\xda\xf4\xe4\xd4\x93\x03\x89\xaf\xe0\xbb\x11\x2f\x8e\x4e\xf3\x7d\xde\x22\x2f\x46\xbc\x76\x9a\x8b\x7f\x3b\xc5\x88\x17\x02\x7e\xca\x88\x07\x1b\x74\xc4\x6b\xf2\x20\x94\x76\x9a\x7c\x3d\x1d\xfc\xfa\xb6\x4a\x8b\x17\x26\xa3\x3a\x16\xb4\x09\xcc\x08\x8d\x4d\x1f\xd8\xe6\xff\x96\x0e\x03\x53\x65\x64\x24\xd8\x5a\xe2\xbf\xd4\x47\x6b\x0a\x01\x3b\xff\xc0\xaf\x11\x19\x18\x04\x11\xca\x05\x6f\xe5\x1e\xa7\x9c\x82\xbd\x70\x83\xd2\xe9\x55\xda\x62\xa0\xf3\xd0\x52\x91\xca\xb0\x70\x3d\x6a\x09\x6b\x45\x98\x54\x5e\xba\x9c\xf0\x2c\x6f\x46\x6d\xca\x23\x81\x89\x0b\x93\x50\x81\x0e\x64\x1c\xb8\x93\x28\x59\xb4\x99\xa2\x3f\x1f\x66\x9f\xaf\xb1\x6d\xa4\x3a\x06\x54\xb1\x4f\x2a\x36\xe4\xfe\x9a\x4c\x4c\xbd\x0f\x22\xcf\xbc\xf9\x48\x05\x24\x7a\xa9\xba\x99\x69\x82\x34\x62\x70\xdd\x3b\x46\x1e\xc3\x01\x49\xb1\x32\xf3\xca\x6e\xe8\xd4\xee\xeb\xae\xbb\xae\x94\xdc\x68\xef\x35\xd7\xd4\xbd\x03\xe0\xae\x9e\x66\x60\x28\x88\x8a\xa6\xb1\xf1\xc9\x69\xbb\xe8\xcd\x65\x92\x73\x48\xe0\x49\x4c\x4f\x2b\x5a\x6c\x42\xcb\x11\x04\x24\x2f\xc4\x51\x83\xe2\xa7\xd0\xdb\x46\x3a\xfe\xe1\x41\x45\x80\x54\xb5\x6a\x2d\x70\xfa\x16\x9b\xde\x5b\xc0\xf8\xd6\x11\x33\xad\x74\x27\x2e\xa4\xc9\x00\x2b\xd3\x73\x92\x97\xaf\xa8\xb7\xaa\x98\xbc\xd7\x6d\xf2\xff\xf2\x82\xc5\xe4\xe9\x1d\xf0\x43\x1e\x96\xa7\x26\x62\x23\x32\xef\x82\x45\xe6\xcd\x19\x91\x79\x47\xfc\x7d\x55\x91\x79\x7a\xff\x41\x70\xde\x8e\x1c\x17\x75\x50\x78\xde\x4b\x6a\xfd\xa8\x3c\x5a\xff\x85\x84\xc7\x6f\x0f\x22\x71\x88\xdd\xaf\x3b\xfe\xf5\x95\x6f\xf0\xea\x5a\xa6\x1f\x98\x9b\x17\xd8\x38\x0d\x9e\x62\xd1\xb5\x15\x87\x1d\x67\x5b\x5a\x3c\xcf\x83\x45\xee\x1e\xf0\xaf\x3b\x86\x7f\x7a\x19\x5f\x0c\x10\x23\x72\xb9\x59\x0e\x72\xa7\xad\x26\xe4\x13\x92\x59\x2c\x53\xe7\x61\xb6\x19\x13\x7f\xb9\x37\xf9\xbb\x77\xce\x67\x11\x5f\xd8\x25\x53\x81\xad\xab\xa2\xdf\xad\x95\x22\x16\x71\x4a\xb4\xc3\x58\x9b\x37\xdc\x37\xd4\xfc\xbd\xd6\x93\x12\x18\xa7\xca\xf4\x9a\xa3\x2b\xa2\x76\x7b\xb4\x26\xe2\xab\x0e\xfb\x92\xc3\x18\xb0\x13\xd1\x53\x79\x96\xbb\xbf\xe7\xf8\xef\x74\x0e\xa9\xdf\x0a\xbf\x28\xb8\xab\xc3\x15\x73\x40\x9e\xda\x16\xa6\x2d\xc1\xd1\xa7\x5e\x9b\x67\xad\x20\x41\x21\x3c\xe3\xad\x74\x49\x87\xfa\x64\x69\x4b\xf9\xc6\xaf\x71\xd7\x16\x41\x7e\x3a\x1f\x0b\xc2\x56\x94\x44\xe0\x84\x48\xce\x88\x63\xda\x45\x70\x6c\x00\x17\xf1\xb9\xad\xec\xa1\x83\xf3\x05\xba\xf7\x6f\xf5\x27\x8d\xdf\x16\x93\xa8\x84\x3a\xc1\x28\xc2\x85\x86\xae\xe7\xed\x88\x93\xa0\xd0\xce\x38\xed\x6b\x80\xe9\xb7\x66\xf7\x3f\xb6\xfc\x77\x50\x4d\x7e\xc9\x31\x92\x31\xfe\x81\x73\x0e\xd9\x18\x5f\xe5\x18\x93\xab\xd5\x69\x7d\x93\x31\x4a\x45\x34\xf0\x41\x5a\xb2\xae\x6f\xa8\xff\x7e\xe0\xea\xbf\x0d\xb3\xc4\x3a\xa2\x86\x66\x57\xd7\x94\xee\x76\xeb\x55\x7e\x80\xc6\x09\x2a\x7b\x02\x7e\x74\xb8\x12\xfa\xcd\xf8\x02\xcc\xcd\xaf\x18\xf6\x1f\x59\x7a\x66\x0b\x78\xc6\xcb\x3e\x96\xe6\xb3\x9b\xff\xab\xbb\x62\x6e\x9c\xee\x75\x9e\xee\x3b\xa4\x5c\x32\xe7\xff\x88\xf4\x7b\x36\x49\xb0\xe5\xfe\xbc\x9b\xd5\xd9\xc8\x7a\x2e\x83\x0d\xe2\xb1\x0e\xe2\x71\xfb\xea\xc4\xe3\x1a\xf7\xaa\x55\x88\x47\x95\x2b\xf1\x6b\xb7\x56\x66\x7e\xd6\xea\x54\xa0\x1f\xff\x3a\xec\x97\x1e\xe1\x52\x35\xd2\x38\xa6\x4c\x18\xe9\x82\x99\x78\xb4\x9a\x86\xfc\xf1\x96\x8d\x45\xff\xa1\xf1\x7c\xdf\x20\xb7\xeb\x24\xb7\x1f\x74\x24\xbd\x7d\xbb\xe3\xa7\x92\xe0\x9a\x87\x6a\xbd\xb2\xbd\x10\xe9\xe3\x34\x08\xf3\x31\xad\xbd\xcf\xc7\xc8\xaa\x29\x3a\xa3\x1f\x9b\xa4\x7c\x8c\x8d\x0e\xb0\xd6\xf7\x92\x88\xb3\xce\xe3\x56\x27\x4f\xd7\xba\x57\x1b\x0e\x37\xed\x5c\x11\x28\x9b\xae\x94\xe9\xd3\x37\x19\x3b\xa9\x1b\xd7\xb1\x77\xa3\x62\x9b\xc3\xfa\x5b\x0e\x59\x15\xc1\x79\x13\x9d\xbc\x48\x5b\x52\x27\x3f\x01\x9b\x04\x36\xe4\x0b\x99\x7f\xac\xdf\x4b\x43\xee\xa3\x78\x69\xb9\xbb\xc2\x68\x01\x35\x2d\xb2\x9f\x24\xfa\x4d\xcc\x40\x36\x7b\x32\xc1\x58\x64\xef\xd7\xb6\xb2\x17\x6f\x62\x3f\xd6\x50\xb5\xcf\xf0\xa5\x88\x2f\xd3\x41\xc8\xdd\xef\x0e\xf9\x5f\x18\x9a\xe8\xf3\x56\xca\xdc\x19\x3a\x39\x4b\x86\xad\x0d\x0a\x1f\xf1\xe4\x54\xf9\xcb\x53\xba\x67\x62\xd3\xdf\xce\xe7\x9b\x69\x7a\xda\xe3\x67\xda\xe0\x47\x08\x4a\x7b\x9c\x3a\x14\xb5\x8a\x4c\xa5\x54\x5e\x88\xb2\xdc\xc0\xae\x48\x94\x42\x4f\x2a\xd8\x0a\xa9\x46\x46\x70\xcb\x24\x4d\x94\x06\x4a\x35\x6a\x85\x89\xc3\x29\x86\x1a\x74\x4e\x84\xf9\xae\xd1\x87\x11\x4f\xcf\x0b\xf6\x07\xc0\x35\xd1\x16\x63\xc0\x62\x80\xde\xaf\x4d\x68\xdd\xa1\x1a\x95\xed\x46\xa5\x9d\xc7\x65\x52\x40\xd5\x2b\x71\xc8\x15\xae\xa7\x4e\xe8\xd4\xd5\x25\x54\xd8\xbb\x18\x8d\xe8\xe0\xac\xec\x60\x10\xc7\x8a\x86\x2c\x53\xc3\xaa\xab\x1a\xe6\xb4\x48\xbd\x53\x4f\xdc\x41\xfb\x6e\xc7\x1d\xa7\x06\x19\x34\x3e\x56\x33\x32\x64\xbf\xa7\xe6\xbf\xbe\x76\x4a\xfe\x3c\x55\x0a\xa2\x36\xe6\x47\x16\x21\x64\x4a\x45\x9f\xbc\x20\xe3\xfb\xbc\x51\xef\xd4\x54\x9a\xf0\x53\xfb\xbc\x39\xf5\x59\xc1\x33\xb4\x18\x35\x9a\x41\xb2\x88\xf6\x53\x4d\x94\x8d\xfc\x55\x90\x35\x2c\x85\x04\x58\x49\xd7\x8c\x37\x55\x6a\xd4\x99\xba\x68\x81\x26\xfe\xd4\x3e\x63\x8a\x28\x81\x7e\x10\x23\x46\x5d\xa2\x92\xcb\xa8\xd9\x2a\x52\x2f\x4c\x4b\xa3\xa9\x7b\xe3\x21\x9a\x3e\x83\xd8\xb2\xce\x45\x39\x98\x7d\x95\x8f\x81\xd8\x05\xed\x9e\xc0\xf5\xdf\xaf\xb1\x07\x53\xf5\x13\x70\x97\xa3\xc2\xd1\x7d\x7f\x8d\xdd\xd9\x8f\x78\x9d\x0b\xfd\xb8\xbd\xb7\x0d\xff\x8f\x9c\x53\x15\x4d\x2b\x98\xf0\x28\xc9\x8b\xac\xd3\x28\x94\xa9\x5c\xd2\x10\x98\x21\x63\x13\x45\x0b\x3a\xab\x79\x94\xeb\xc9\x2d\xe7\xf4\x08\xe2\x76\x53\x66\x09\x0b\x92\x75\xa5\xf9\xb0\x29\x9c\x1c\x8c\xde\x52\x32\xeb\x07\x7b\xee\xa5\x55\x9c\x20\x99\xab\x03\xde\x4a\x93\x59\x5e\xb8\x7f\xb9\xdd\x7f\xdf\x5a\xe2\x8f\xd4\x17\xbd\xb1\x47\xa2\xe6\xb1\xa5\x3d\x63\xaa\x88\xb8\xc9\x39\x69\xb1\x11\x68\x0d\xb1\x97\xc5\xcc\xb5\xe4\x8d\x47\x9b\xa3\x6e\xd4\xbc\xba\x47\x65\x08\x65\xc9\xe4\x62\x50\xe4\x4f\xb0\x0d\xee\x64\x43\xd5\xb3\x11\x13\xb2\x8e\x98\x90\x3f\x95\x3e\xa9\x9f\x1b\x04\x8e\x50\x4d\x35\x40\xef\xfb\x0a\x67\xae\x8f\x33\x2a\x3a\x80\xe8\xa3\x7a\xb1\xc7\x54\xd6\xfa\xbe\xb7\xa6\xfc\x54\xdf\x5c\x1b\x90\xee\xa8\xcf\xe0\xd0\x63\x15\x31\x8d\x1b\x3d\x6e\xab\x3d\x83\x9b\xc3\x07\x45\x00\xdb\x7d\x1e\x42\x47\x45\x41\x00\x28\x17\x84\x3c\x85\xbc\x00\x49\x98\x2e\xc3\xf7\x51\x8b\xd7\xbd\x69\xe5\x01\x40\x9e\x39\x12\x62\x7d\x46\xa2\xaf\x7f\xbf\x67\xed\xfc\x98\x7e\x35\x7b\xbd\xee\xf4\x57\x31\xf6\xad\x61\xcb\x0e\x08\xd0\x6d\xf2\x3a\x9e\x41\xf0\x67\x88\xd2\x01\xdd\xc4\xc7\x86\xfd\xab\xcb\x0f\x6d\xe5\xa6\xf9\x76\x70\x38\xcd\xf3\x37\xb0\x3c\xd7\x7b\x2f\xb4\xa5\xd0\xba\xe8\xfb\x93\xe0\xb8\x62\xcd\xbd\x9c\x19\x9a\x75\x93\x23\xde\xcb\xae\x19\x80\x15\xd9\x77\xd1\x37\x6e\xa2\xb5\xdf\x44\xff\xcb\xbc\x89\xde\x7e\x9e\x2a\xa4\xe4\xfb\xa3\x42\x92\xf5\x9e\x75\x16\x56\x27\x30\x13\xee\xb8\x22\x30\xb0\x63\x4a\xb1\x3b\x65\xc2\x50\x19\xbd\xf3\x27\x0e\xdb\x7f\x7e\x32\xc2\xad\xb3\xc7\xa7\xdc\x97\x38\xfe\x8b\x1c\xf1\x97\xc9\x98\xea\xd8\x76\x78\xa3\x43\xe0\x73\x99\xd3\x1a\x5c\xab\xa5\x6c\xbc\x0f\x12\x19\x8c\x78\xe0\x9e\x39\xe2\x2d\xc4\x69\x00\x7f\xe0\x7a\x8e\x78\x4f\xbc\x03\xc8\xc0\x42\xd0\xe0\x4f\x7b\xfa\x88\xd7\x0a\xda\x4f\xc4\x57\xe6\x73\x20\x0d\x49\x14\xd7\xd9\xaf\x6f\xb2\x12\x06\x4b\xd5\x0d\x78\x4b\x2c\x74\xe2\x59\x5e\x9c\x80\xdd\x39\x2b\x25\xd1\xe7\x6c\xf2\x3f\xe7\xf4\x7d\x5d\xca\xe3\xa6\x44\x17\x95\xa9\xc3\xf8\xd2\xf4\xff\x05\xf1\x10\x60\x44\x53\x99\xe4\x82\x8e\x45\x5e\xf7\x26\x95\x38\x8e\xb3\x15\x68\xa1\xd0\x48\x9b\x99\xf0\x06\xcf\xf3\x20\xeb\x9a\x75\x88\x26\xb1\x1e\xe5\xbb\x29\x7b\x18\x6a\x59\xd9\xa2\xf0\x6f\xac\xb1\x0f\x39\xec\x52\xd1\xb1\x28\x59\xc4\xe1\xb9\x6f\x72\xd8\xf8\xea\xfa\x2e\xf3\x13\x63\xa0\x72\x72\xfc\x79\xab\x84\x4c\x78\x89\xba\x23\x38\x02\x90\xe3\xc7\x18\x13\xf8\x38\x43\x92\x96\x28\xf7\x56\xab\x5e\x94\xab\xb3\x26\xdb\x24\x76\x8d\x7b\xca\x9f\xc5\x0f\xfb\x26\xd6\xeb\xbb\x88\x56\x5a\x16\xab\x55\x4b\xbc\x7e\xd5\x76\x56\x1f\x8c\x7a\xd5\x13\x8e\xf1\xd7\x17\x2b\x1c\xe3\x45\x1b\xe1\x18\x1b\xe1\x18\x1b\xe1\x18\xff\x0d\xc2\x31\x9e\x55\xb3\xc2\x31\xfe\xf1\x62\x86\x63\x4c\xb0\x71\x76\xcb\x7a\x60\xfc\xfa\x04\x65\xac\x2d\xd4\x62\xed\xe1\x1b\xff\xf5\x83\x32\x9e\x7b\xc9\xfa\x40\x3b\xd3\xac\x70\xbf\xb0\xe9\x1c\x41\x3b\xd3\xac\x42\x87\x38\x08\xb4\x33\xcd\x4a\xd7\xc7\x17\x87\xd8\xa7\x6b\x6c\x93\xe0\xb0\xdc\x8f\xd4\xd6\xaa\x8e\xe9\x14\x51\x5c\x8f\x92\x22\x2f\xb2\xfa\x64\x52\x1c\xcf\x66\xe1\x62\xf4\xff\xdd\xe9\xf5\x79\x46\xc7\x7a\xd4\x93\x23\xbc\x69\x3b\x4b\x8b\xb4\x91\xc6\x80\x66\x1b\x21\x7e\x8c\xa6\xb2\x81\x58\x00\x9e\x41\x56\x97\x14\x41\xad\x42\x55\x49\x00\xbe\x83\x5e\x2f\x38\x24\xfa\x36\x03\x1c\x0f\xb4\x1b\xd1\x8d\xc5\x25\x72\x67\x56\x60\x34\x01\x32\x80\xb0\xc4\x68\xa7\xa1\x13\x36\x82\x5a\xe3\x22\x0b\x16\x16\xa2\x86\xec\xb0\xe1\x89\x4d\x9d\xf6\xc6\xa7\x0e\x60\x75\xd2\x17\x0f\xdb\x09\xeb\xec\x45\x0e\x1b\x96\xc5\xdc\x67\x38\x7e\x7e\x5c\xb9\x48\x03\xc5\x51\x55\xec\x9c\x9b\x98\x1e\xf1\x4e\x1c\x98\x06\x68\xf4\xd9\x89\xb9\xe9\x5d\x64\x44\x92\xcd\x83\xaf\x28\x54\x4c\xb6\xa4\xc2\x9e\x56\x35\x74\x13\x33\x6b\x6e\x62\xda\x62\x53\x5e\x7b\xc9\xb9\x60\x72\x18\x18\x0d\xea\xa8\xbb\x9f\xdf\xe4\x4f\x55\x3c\x2f\xf9\xd2\x6a\x7f\xe2\xc4\x44\xe9\x80\x58\x1e\x03\xe2\x13\xa4\xc4\x15\x07\xb8\xb5\x15\x87\xd4\x4b\xd6\xae\xfc\xfa\x10\xfb\x45\x87\xb9\x71\x90\x17\x73\x59\x90\xe4\xd0\xd8\x5c\xd4\xe2\xee\xd3\xd8\x75\xe7\x20\xa7\x89\x4f\xfd\xc7\x1c\x15\x17\x10\xa6\xb5\x43\x95\x38\x0d\xa2\x50\x4d\x48\x8f\xca\x34\xe1\x92\xfd\x02\xa3\x0d\x98\x7c\xea\xec\x71\xda\x15\xfa\x98\xff\x98\x23\x9d\x56\x90\x8c\x0a\x1a\x01\xb4\x98\xde\x48\xb6\x53\xb0\x06\x21\x2f\x82\x28\xce\x29\x3f\x41\x0c\xcd\xab\xb6\xac\xa5\x7a\xb2\xf2\x89\x9e\xf3\x0f\x9f\x48\xa2\xbb\x3a\x5c\x6c\x48\x3e\xba\x9c\x66\xe1\x88\x96\x8d\xa5\x9f\xb4\x91\x5c\x11\x07\xb1\x23\x1f\x58\xff\x13\x94\x16\x6f\xda\x9f\xb0\xb9\x4f\x9b\xcd\x54\x15\x82\x98\x2e\xb6\xf7\x1c\x40\x2c\x1d\xc2\x0c\x7d\x27\x12\xb0\x04\x5a\x75\x5f\x47\x7c\xf7\x98\xef\x4b\x86\xbd\xcc\x70\xeb\x5a\xcd\x0f\xff\xf7\x26\xb6\xa7\xc2\x0f\xea\x64\xde\x6e\xf2\x8c\x9f\x8c\xb2\xa2\x13\xc4\x07\xa2\xfc\xb4\x15\xc1\xf4\xda\x4d\xfe\x23\x8c\x7b\x31\xf0\x96\x66\xdb\x46\x8e\x7a\xa5\xc7\xa8\xaf\x38\x0c\x1f\x4d\x07\x45\xd3\xda\x5e\x7f\x36\xc4\x26\x98\xf1\xd2\xbd\xd6\xdf\x29\xfe\xa7\x1c\x04\x90\x54\x0a\x4c\x8c\xa5\xaa\x97\x5a\xe1\xe9\x12\x9c\xc2\xe6\x85\x5c\x0c\xda\x7d\xbf\xe3\xbf\xc9\xd1\x99\x21\x71\xf4\x45\x8a\x29\x31\xcd\x40\x9e\x85\x52\x19\xcb\xf4\x5b\x50\x7e\x4e\x2f\x6d\xc3\x0d\x97\x2c\x2a\x65\xe6\xc1\x33\x75\xcf\xe7\x67\x8a\x6b\xfc\x11\xcf\x3f\xb3\x90\x8b\xff\x92\x62\x21\xf7\xeb\xde\x64\x4b\xdc\x64\x91\x10\x1e\x40\x2f\x43\x58\xdf\xf3\x9c\x3e\x28\xe7\x35\x33\x87\x70\x86\x5d\x4e\x7e\xe6\x78\x43\x4c\x1e\x70\xb9\xff\x38\xca\x78\xec\xe1\x33\x6f\x7f\x20\x84\xb5\x63\x3a\x24\x6a\xe7\xec\xf4\xfe\x63\xbb\x04\x41\x83\xc0\x98\xc9\x03\x5e\x90\xe7\x69\x23\xb2\x52\x40\xcb\xbc\xc9\x58\xc9\x54\xd0\xb2\x85\xa8\x93\xec\x8a\xbc\x5c\xc0\x1d\xf7\xaf\x59\x67\xdb\x49\xb9\xde\xb7\xd5\xd8\xf5\xd5\x8a\xe9\xd5\xe5\x54\xf7\xdb\x8e\x7f\x7a\xb5\x42\xab\x4a\xaf\x70\x3a\xd7\x24\xb3\x5a\xbb\x32\x67\x77\xb1\xad\x40\x26\x81\xe4\x86\x92\x2d\x39\x3e\x2d\x9f\x95\x44\x5a\xcc\xb5\x12\x0b\xfa\x4a\xb7\x47\x49\xcd\xa0\xa1\xe0\x54\xb5\x65\x89\xe3\x4f\xb7\xae\x82\xa6\xbf\xa7\x8c\xa6\x8f\x64\xe4\x75\x5b\xfd\xaf\xd4\xaa\xde\x94\xfa\x28\x59\x50\x05\x8e\xf5\x00\x84\xd4\x7f\x60\xe2\xe0\x2b\x80\xfb\x07\xd3\x58\xc6\x11\xe6\xff\x64\x0f\xf8\xe3\xcb\x36\xb3\x3f\xa9\xb1\x1f\xb7\x8b\x9d\x28\xa2\x98\x62\x81\xdd\x0f\x29\x11\xfc\xd7\x6a\x7d\x4b\x49\xba\xdd\xb3\x62\xe0\x16\x81\xc5\x7b\x90\xf3\x69\x09\x83\x46\x96\x62\xba\x7e\x30\x53\x2f\x05\x09\xe2\x99\x8d\x68\x75\x1f\x27\x59\xaa\xcd\xb3\x06\x4f\x0a\xab\x32\x58\x5a\xa9\x9a\xef\x69\x43\xde\x75\x80\xbe\xee\x79\x93\xc4\x79\x01\xbb\x36\x6f\xe4\xd4\x5e\xf0\x4e\xe1\x3a\x9b\x13\x75\xca\x5b\x0e\x72\x99\x9d\xb1\xe8\xc9\x08\x43\xfd\xb7\x52\xa5\xd8\x07\xe4\x1f\x6b\xac\x6a\x01\xdc\x2f\xd5\xce\x0f\x23\xf5\xd5\xb5\x8a\x5a\x2f\xce\x1a\x60\x2a\xe2\x60\x99\xaa\xdb\x19\x25\x79\xc1\x03\x88\x8b\x1c\xbc\x24\xbb\x46\xbc\x3c\x6a\x45\x82\x67\x23\x7b\x0b\x6d\x51\x39\x6d\x64\x30\x10\xa4\x4c\xad\x0b\xa5\x7d\x9d\xa7\x34\xe5\x18\x28\x06\xe1\x83\x8a\x19\x58\x75\x05\x2e\x48\xf6\x86\xbf\xd8\xc2\x6e\x32\xd9\x0b\x9e\x15\xd8\x02\x37\x1c\xe0\xf4\xc3\xd9\x68\x31\x89\x92\xc5\x19\x1c\x3a\x98\xcf\x7e\x79\x4b\xa5\x25\xec\x79\x1b\xc0\x72\xeb\xb5\x84\x05\xd2\x12\xf6\x38\x53\x0b\x71\x1b\x9b\x64\x87\xfb\xfb\xc5\xaf\x6b\xc1\x36\x4c\x5f\x3f\x18\x3c\xb9\xa7\xad\x6e\x88\x7a\x9c\x7b\x52\x67\x88\x33\x17\xb5\x9c\xf5\x67\xd0\x61\xac\xb4\x4e\x7d\x6b\x88\xfd\x6c\x85\x04\x71\x28\x4e\x1b\xa7\x79\x66\x89\x0d\x9f\x18\xf2\x3f\xe5\x58\x72\x03\x95\x92\xcc\x3d\x70\xea\x9a\x0d\x97\x6f\x83\x45\xd0\x18\x1e\x4f\x30\xa0\x39\x95\x10\xb8\xe8\x95\x10\xe4\xbc\x80\x50\x63\x70\xa1\xc4\xdf\x27\x4e\x4c\x1e\x28\x25\xab\x29\xb5\xa5\x52\xcf\x0d\xc4\x1d\x48\xb3\x55\x61\x07\xbe\xe5\xb0\xe7\x3a\x6c\x9b\xd1\x11\xb7\xeb\xc7\x66\xec\x33\xbd\x82\x60\x52\xbc\x82\x55\xb6\xe3\xd1\x9b\x89\x9e\x26\x56\x49\x71\xdd\xca\xee\xf6\xc3\x12\xd6\x0a\x27\x73\x5b\xdd\xa9\x7a\x22\xa6\x40\x48\x9a\x30\x15\x76\x4f\xb4\x1a\xbf\x03\x62\xae\x16\xb7\x08\x7c\x4d\xb6\x4d\xe5\xcd\x06\x9e\xb1\x8d\x1d\x34\x99\xd5\x10\x32\xd4\xa5\x49\x25\xd4\xe4\xb1\x4e\x01\x12\x94\x76\xeb\xd3\x1e\x70\xee\x07\x98\xff\x2c\x67\x50\x89\x92\x66\xa3\xd7\x7f\x2e\x09\x3d\xd5\xbe\x76\xe5\x04\xe3\x40\xa3\xc1\xdb\xb0\x7c\x44\x74\x25\x0d\x36\xdc\x4c\x89\xcc\x5b\x8b\xf9\xea\xe1\x0d\x1a\xb6\x76\x1a\xf6\x31\xd3\x7c\xff\x9e\xf3\x76\x24\xbb\xab\xe4\x47\xa6\x8e\xc9\x8d\x17\xc9\x84\x5f\x67\xff\xee\xb0\x61\xda\x38\xb9\x10\x3c\x27\x69\x1f\x96\xbc\x44\x64\x11\x05\xa1\xa1\xa0\x3b\x74\x3a\x02\xa0\x4c\x6d\x52\x8a\xdb\x9e\x24\xfb\xd9\x63\xd8\xcd\xfd\x0d\xb8\x03\x8f\x10\x75\x68\x4d\xea\x7b\x41\x4a\xd6\x83\xbe\xb4\xc1\x41\xad\x13\x4d\xf0\x6e\x67\xf5\x9b\xf6\x94\xfb\xe4\xd1\xde\x6b\x52\xe1\x08\x56\xaf\x76\xe9\x16\x1e\x44\x15\x19\xfb\x62\xa5\xd7\x04\xba\xfd\x19\xaa\x07\xad\x39\x7e\xf3\x26\xff\x58\xd5\x8b\xbe\xaa\x63\xfc\x73\xa1\x13\x8b\xcb\x08\x54\xc7\x82\x67\x08\xa2\x04\xf5\xc6\xf5\x81\x8a\xe3\xff\x35\xc4\x1e\xaf\x95\xb4\x53\xfe\xf8\xb8\xd7\xec\xb4\x82\xc4\x5b\xbb\x9a\x16\x74\x97\xd5\x5a\xd4\x43\x4a\x4b\xfb\x68\x7f\x6c\xae\x79\xce\xda\xd8\xa3\x4a\x1b\xbb\xdf\xbf\x76\xb6\x5a\xff\x3a\x22\xb9\x8c\x55\xf5\xaf\x57\x93\xfe\xf5\x51\xfe\x43\xe7\x48\xe7\x6a\x4e\x61\xb5\xee\xf5\x81\xa8\x5e\xff\x97\x6d\xec\x9a\x41\x78\x66\xb3\x1d\x58\xe5\x99\x4e\xcc\x73\x0c\xe7\x21\x65\xd4\x47\xb6\xf9\xdf\xac\xf5\x7b\x2b\xf1\x44\x72\x13\x7f\x08\x15\x51\xa2\xa8\xd7\x68\xf2\xc6\x69\xe2\x4a\xe0\x6f\x09\x4e\x14\x25\x8d\xb4\xd5\x8e\x39\x80\x31\xb4\x39\x8a\xab\xd2\x2e\x84\xa0\x65\xb2\x8b\x18\x5c\xc0\x65\xe8\x50\x94\x2b\x86\x41\xea\x43\x81\x5f\x48\xba\x88\xa7\x93\x43\xc0\x51\x16\x21\x18\x51\xd8\x81\xcb\x9d\x0b\x62\x42\x7e\xfc\xfb\x79\x23\xe8\xe4\xdc\xb3\xa6\x80\xfa\x0b\xa0\x67\xe0\x07\xb4\xc4\x21\xa1\x02\x21\xb4\x05\xed\x36\x0f\x20\xed\xb1\xbc\x3c\x00\x58\x26\x0f\x16\x40\xfb\x14\xe4\x79\x87\x96\x26\xc7\x99\xa2\x6c\xc0\x41\x01\x40\x24\x48\x18\x46\x20\x79\x93\xa8\x15\x5e\xc4\xe4\x2f\xaa\xa7\xa2\xbe\xe2\x5c\x9a\x19\x00\x72\xf9\x8a\xf3\xa0\xc4\xc6\x94\xcb\x57\x1c\xa6\x3f\xb0\x35\x55\xc3\xec\x85\x35\x76\xb9\x1e\xea\x41\x31\x1d\xee\xf7\x1c\xff\x6f\x9d\x83\xf6\x43\x58\x05\x1c\x13\x82\x50\xb5\xe6\x29\xb1\x34\x4e\x28\xb4\x44\x1e\x52\x52\xe1\x18\x24\x84\x57\x94\x36\x40\x83\xa2\xe6\x16\x26\x48\xb7\x3a\x82\xb9\x21\x30\x89\xb0\x5e\x43\x99\x04\x03\xf3\x0f\x4b\xde\xbc\xe7\x5b\xbc\x87\x83\xc2\xb3\x06\x2d\x1e\x8f\xa5\x99\x57\x02\xd8\xcb\xa5\x27\xb3\x31\x85\xe6\x39\xfc\x8a\xc3\x8c\xc9\x72\xff\xc0\xf1\x3f\xe6\x4c\xea\x8d\x17\xe5\x90\xe2\x42\xe5\x03\xa0\x3d\x90\xf1\xa2\x93\x25\x86\x35\x1a\xa2\x67\x82\xcc\x6a\x46\x31\xda\xe0\x5f\x24\x2e\x21\x10\x5e\x78\xd2\x00\x49\x07\xb6\xa6\xa8\xd6\x9a\x03\x6b\x6a\x54\xa8\x92\xf9\xbe\x6a\x7e\x72\x73\xf7\x5a\xb0\x45\x2f\xaf\xb1\x9e\xfd\xe1\x3e\xb3\xe6\xbf\xcf\xe9\x99\x28\xd2\xf1\x48\xbe\x27\x68\x14\x2a\x4e\x4f\xee\xd8\x48\x07\xaf\x19\xae\x6e\x69\x62\x21\xef\xe5\xe8\xdf\x81\xf5\x64\x21\xcf\x10\xf7\x08\xfa\x2c\xc4\x4a\x21\x61\x26\xc5\x08\xb2\xe4\x84\x4b\x15\x76\x30\xee\x53\x6a\x79\xdb\x69\x9e\x47\xf3\x71\xef\xca\xad\x19\xd1\x72\x15\x30\x46\xf6\xbc\x1a\xb3\x0f\x92\xfb\xaf\x8e\xff\x76\xe7\xc2\x4d\xc9\xf7\x79\x3a\xf6\xb1\xeb\xd9\xde\xb5\x4f\x87\x35\x17\xdf\xb8\xa4\x12\xc8\xe9\xc8\xdc\xdc\xf4\x61\x5e\x8c\xc3\xa8\xdd\x8f\x5d\xe2\xdf\x64\x3d\x31\xf1\x87\x12\x9a\x1b\x6f\x1e\xcc\x45\x69\xe2\x89\xa2\xde\x61\x88\x84\x42\xd9\x45\x30\x0e\x62\xc3\x5a\x04\xe9\x6f\x37\xb1\xa7\xb3\x4d\xcd\x34\x2f\xdc\x8e\xdf\x3c\x22\x0e\x8a\x4c\xd3\xd4\x48\x93\x04\x60\xed\x52\x3b\x33\x15\xa9\xa2\xbd\xc9\xe9\xba\xf7\xf8\xb4\xe3\xb5\xb3\x74\x3e\x10\x73\xb3\x1c\xa0\x5f\x99\xb8\x1b\x7c\x51\x95\x2f\x08\x97\xe0\x07\x8f\xf0\x20\x94\x19\xe9\x79\x10\x96\x2f\xe2\x6d\x46\x19\xf7\x99\x8e\x3f\x81\x71\x69\x80\x08\x09\x37\x4b\x6a\x2a\xb0\x69\x3c\x75\x1c\x61\x80\xe9\x24\x33\xde\x46\x40\x20\xfa\xa6\xbe\xf6\x98\x65\x73\xb6\xb1\x13\xec\x3a\xb6\xa9\x1d\x14\x4d\x77\xcc\xf7\xd1\x2c\x9a\x4a\xe4\x4d\xba\xfe\xa0\x69\x72\xff\x35\x07\xf3\x19\x87\x5c\x49\x3e\xba\x66\x81\xac\x9f\x2b\xc9\xd3\x51\x8b\x91\x19\xee\x38\xca\x9b\xa4\xa7\x3f\x1a\xbd\xcc\x9b\xc2\xe2\x12\x6c\x4b\x4e\x1a\x48\xde\x7b\xc4\x97\x7b\xaf\xbd\xf6\xea\x6b\xeb\x80\xf3\xa5\x4a\x05\x89\x37\x39\x3e\x35\x7e\xe7\xec\xc9\x89\x3b\xa7\xc6\x8f\x1d\xac\xb3\x19\xb6\x19\xc4\x03\x48\xb1\x36\x0b\x7f\xa9\x40\xe0\x34\x93\x9b\x03\x24\xf0\x54\x99\x6d\x6d\x30\x46\x31\x49\xb6\x3f\xc6\x10\xfb\x99\x8a\x89\x9f\xe5\x8d\x8c\x17\xb7\xf1\xae\x4a\x4b\xf7\x4f\x35\x7f\xa4\xe7\xa9\xce\x9b\x09\x10\x7f\xc0\xc1\x60\xa1\xfa\x8a\x33\x74\x9a\xdb\x71\xd5\xef\xae\xb1\x69\x03\x87\xee\x80\xbf\xb7\x0a\x87\x0e\xbf\x37\x41\xe8\x06\x62\xd0\x9d\x64\xa2\x1d\xf7\xb8\xbf\x7f\x8e\xc0\x0f\x69\x55\x72\xac\x47\xe5\xac\x03\x36\xaf\xee\xd9\xf8\x95\x51\x28\xcb\x9d\xe6\x5d\x6b\x62\x1e\x20\xc0\x7d\x6f\xb8\x94\xed\x58\xc5\x0b\x4e\xc5\x7a\xfe\xdb\x76\xff\x43\x17\x26\xd6\x13\x64\xa7\x1f\x64\xc0\xe7\xef\xb3\x0d\xbd\xd3\x0f\x79\x00\xe3\x57\x65\x00\xe3\x1f\x3b\x03\x78\x9a\x41\x07\xe2\x01\x1e\xc6\xf8\x21\x1d\xc6\xf8\x8e\x01\x86\xdb\xc1\x43\xfc\xe1\x0c\x66\xdc\xd0\xd4\xad\x57\x53\xf7\xe4\xd5\x15\x75\x37\xba\x37\x0c\x52\xd4\xe9\x6d\x58\x11\x15\xca\xfe\xe7\x66\xd3\xb0\xbd\xd6\xbc\xe5\x94\x63\xb6\xc5\x93\xc2\xfd\xca\x25\xfe\x99\xf1\x72\xea\xf1\x4c\x17\x90\xc8\xec\xf4\x06\xa4\x5d\xa5\x46\xc1\xa9\x1c\x41\x3e\x64\x84\x34\x1b\xa4\x7e\x96\x85\x01\x04\x98\xdb\x20\xc9\xb4\x04\xc8\xac\xac\x38\xc3\xf2\x0b\xeb\x32\xfa\xd4\x26\xb6\xe2\x20\x9b\xf1\x52\xc7\xbf\x8a\xc0\x8c\x71\xd1\x45\x6f\xc5\x03\x15\x52\xa5\x3a\x18\xb4\xdb\x31\x40\x82\xa4\x75\x6b\x25\x7e\x76\x15\xbd\xf5\x66\x77\xd3\x69\xde\x5d\x8f\xda\xfa\xc5\x0e\x53\x1d\x17\xbc\x7a\xa1\xc6\x6d\x06\xb6\x89\x6e\xee\xc8\x09\x0a\x39\x4d\xc0\xb2\x07\xf8\xea\xa4\x37\x92\xbb\xf1\x24\x70\x45\xb2\x0a\xd4\xed\x4c\x26\x23\xde\x54\x5a\x88\xff\x0e\x62\x32\x4c\x31\x79\x07\x52\x9e\x4f\xa5\x05\x3c\xb1\x78\xa7\x97\xd6\xd8\x66\xac\xce\x7d\x4e\xcd\xff\x5b\x87\x40\x4f\x64\xfa\xd2\x2c\xe8\xa2\x42\x50\x5f\xe4\x39\xe5\xd6\xe7\x7a\xcd\xa2\x5c\x5c\xa5\xa0\xbd\x80\x86\x0b\x09\x62\x9d\x53\x15\x92\x2b\x14\x72\x36\xe0\xd7\x56\xd6\x41\xfd\x4d\x33\xab\xbb\x03\xaa\xa3\xaa\x80\x52\xe2\x1b\xa4\x15\x71\x60\x28\xc6\x02\x19\xae\x16\x35\x3c\x58\x05\x44\xcc\x1f\x84\x20\xf3\xe2\x1a\x9b\x38\x07\xcf\x67\x72\x58\x9e\x91\x40\xe1\xee\xa7\x1d\xff\xc6\xf2\x43\x4a\x99\x10\x68\x3c\x71\xb1\xb4\x54\xaa\x1e\xf3\xc5\xa0\xd1\x25\x7a\x62\xed\xec\xa7\xb1\x6b\x88\xcb\x1d\xf1\x1f\x36\xd5\xc7\xa9\x25\xc7\x6a\xcc\xb1\x4c\xb0\xad\x0a\xc1\xd7\xdd\xeb\xef\x52\x00\xc5\xe6\xf7\xf8\xa0\x7f\x25\xaf\xdc\xc2\x1e\xde\x57\x6d\xdf\x08\x62\x4e\x9a\xd4\xef\x6c\xf6\xc7\x8d\xdf\x3d\x5c\x65\x45\xe6\x29\xf4\xb0\xcb\x3b\xf3\x86\xe3\xad\x0a\x47\xb3\x66\xe0\xbe\xcd\xec\x09\x46\xa4\xda\x94\x74\x4a\xbb\x81\xf2\x61\x6a\x49\x4f\x85\x75\x08\x89\x39\x48\x1a\x5c\xe9\xc7\xa1\xb5\x50\xdb\x4f\x0d\x4f\xad\xb7\x3b\x6c\x58\x52\x04\xf7\x75\x8e\xff\x2c\x07\x49\xc6\x5d\x1d\x9e\x75\x3d\x21\x12\x98\x21\x59\x78\xd7\xe8\xa8\x36\xd9\x2d\xaf\x41\x1e\xbb\xf6\x45\x51\x2d\x70\x74\x72\x9e\x8d\x42\xf2\xdf\x31\x0c\x93\x7b\x38\xfc\x37\x2a\xbb\x91\xbf\xb5\xb4\x33\x8d\xf9\x60\xf7\x6c\x62\x97\xa1\xc3\x9a\x12\xfc\xbe\x3b\xe4\x7f\x7d\xa8\x44\x96\xed\x14\xbd\xab\xf6\x5b\x2a\xfd\x04\xad\xc9\xa2\x00\xbc\xfb\x34\xd6\x93\x98\xc6\xf9\xb4\x68\x7a\xad\xa0\x3d\x8a\xba\x12\xb8\x35\xc5\x60\xf9\x19\xb1\xd6\x79\xb4\x04\xea\x6d\x7a\xab\x46\xa2\x6b\x0e\xd3\x04\x35\xca\x4b\x29\xa6\xa5\xce\x52\xc1\x32\x14\x06\x2c\x16\xb2\xf1\xa4\x79\x22\xda\x23\xc3\x25\xa8\x48\x4e\x91\x51\xad\xa0\x90\x29\x1f\x60\xa1\x46\xc1\x8d\xd6\xcb\xbb\x49\x11\x9c\x51\x54\x86\x1c\x38\xd1\xa7\x3c\x89\xbb\x0a\x6a\xcb\x18\x88\xea\xea\x08\x0e\xd1\x8c\xe2\x02\xce\xa0\x5c\x50\xbe\xcc\xb8\xce\x22\x71\x81\x45\x4d\xdc\x15\x63\xe5\x6d\x61\x1e\xcd\x7f\xab\xb1\x5b\xce\xd9\xeb\x89\x8e\xed\xfb\x6b\xe5\x40\xde\xbb\xd8\x36\xa3\x26\x77\xde\xdd\x34\xdf\x2d\xb8\x7f\x7c\x72\x41\x0a\x55\xe0\x18\x19\xb4\xdb\x59\xba\x24\x43\x75\xca\x61\xc9\x40\x87\x31\x74\x38\xcf\x3b\x3c\x34\xbd\x77\xbc\x26\xcf\x6c\x55\xf6\xbb\xec\x74\x42\xbf\xe2\xf8\x37\x2b\x6b\x5f\x4e\x57\x74\x28\x59\x38\xea\x84\xa1\x6e\x86\x9e\x60\xcc\x4f\xc8\x93\x28\xb0\x73\x9e\xf4\xcf\x41\xba\xfe\x49\x53\xbd\x62\xdf\xda\xc4\x7e\x6a\x50\x4a\x01\xf7\xb3\x9b\xfc\x91\x63\x41\xdb\x90\x85\x81\x01\x49\x21\xa0\xa5\x68\xca\xf4\x1a\x2a\x71\x8a\x64\x6e\x40\x7f\x66\xad\xc9\x33\x37\xb1\x1d\xc8\xd7\x78\xfe\x83\xa5\xfa\xa4\x48\x65\xfa\x07\x6b\x26\x7f\xad\xc6\x36\xb5\xd2\x90\xbb\x2b\xca\x71\xf7\x9e\x55\x72\x88\xd0\x66\x8f\xf9\x88\x56\x6a\x0d\x48\x1a\x52\x15\x53\xa4\xc2\x1c\x8c\x2c\x26\x56\x82\xec\x07\x58\x6e\x90\x77\x3a\xa4\xa6\x7c\xa3\xe3\xbf\xd2\x41\x73\x2c\xa5\x9e\xc0\xec\x12\x0b\xba\xd9\x22\x15\xe7\x5f\xb1\xa3\x45\x5a\xf7\x8e\x51\x6a\x0a\x54\xff\x05\xf3\x79\x1a\x77\x0a\x99\x1e\xe8\x58\x45\xde\x0a\xa8\x54\x66\x9e\x81\x64\x15\xaa\x98\x91\xc5\xa2\xd0\x14\x8f\x12\x5a\x58\x28\x96\x23\x83\x85\xcd\x99\x34\x8e\xe7\x83\x06\x59\xdd\xdd\x67\x3b\xfe\x36\xad\x64\xb2\xd5\x36\xa7\x59\x24\x2e\xd3\x25\x08\x4c\x75\xef\x90\x11\x92\x47\x70\x22\xf0\xb1\x18\x77\x46\x55\xc2\xa0\x27\x17\x64\xe6\xf4\xdd\x23\xe6\x1b\xe2\xb0\x21\x0e\x1d\x3f\xb5\xe7\xfa\xee\xad\xec\x91\x46\xcf\x65\x6a\x82\xa5\x3d\x75\x74\xb2\x1b\x2f\x8a\xa0\xd1\x14\x33\x03\x8e\xb3\x5f\x18\xf6\xc7\xab\x5e\x54\x21\xe3\x96\xcb\x0d\x46\xa1\xf9\x85\x2d\xec\x43\xa6\x06\xe6\xfe\xf3\x04\xee\x68\x55\x03\x77\x5c\xac\x14\x01\x1b\xb2\xf4\xfa\xfc\x86\x97\xa4\xdf\x70\xcb\xff\x59\x85\xa0\x63\x9a\xc4\xca\xbb\xc7\xc2\xdd\xbe\x9e\xed\x65\xd7\xf4\xbd\x34\x06\x6c\xe2\x0d\x85\xe8\x3a\xf0\xb7\x9b\xab\xab\x3b\x0e\xba\x13\xa3\xd5\xa9\x4d\xe5\x22\x94\x9c\x90\xaa\x88\x07\x63\x2f\xdf\xde\x4f\x8a\xb1\x70\x5b\xdc\x6f\x6f\xf3\xdf\x30\xb4\x06\xe5\xbc\x19\x2b\x35\x58\x3d\x6f\x94\x5c\x9f\x82\xde\x6c\xc2\xd2\x10\xc8\xb4\x77\x82\xb3\x87\x8b\x03\x3c\x6c\x73\x4c\x23\x05\x2e\xb1\x45\x04\xa2\xba\xfa\x1b\x18\x55\x99\x42\x25\xc8\xf7\x31\x6f\x54\x86\x83\xef\xf3\xc6\x65\x86\xec\xbc\x00\x37\xa7\x03\x53\xb3\x18\xae\x94\xe6\x05\x84\xc8\x89\xd2\x14\x5a\xb7\xcf\x1b\x17\xbb\x2f\xe9\xd2\x34\x4f\xc4\x41\xd4\xca\x05\x13\xa6\x42\x71\xea\x90\x00\xce\xec\xfc\x62\x27\xc8\x82\xa4\xe0\x5c\x65\xe7\xc3\x60\x6e\x8a\x36\x97\x7d\xee\x5a\x41\x20\x70\xe7\xa6\x9a\xdf\xa7\xd5\x56\x85\xed\x1b\xed\xcf\x36\x10\xc6\x36\x90\x27\x2f\x9a\xe1\xe6\x36\x83\x6b\xb8\xe5\x3c\xcd\x36\xac\x4b\xf6\x92\xbb\xd6\x06\x89\x68\x91\x27\x30\x95\x5c\x4f\xa9\xa8\xf4\x7e\x96\x66\x13\x7d\xf8\x15\x7d\x90\x58\xd1\x82\x05\x66\xef\xd3\x99\xc3\xdf\xe2\xf4\x77\xd7\xeb\xdf\x3c\x9a\x31\x12\x3b\x0a\xbc\x57\xb3\x33\x6d\xb6\x6c\xd1\xbf\x73\x31\x6c\x9c\x75\x9e\xb0\xfa\x35\x71\x9d\x7b\x6d\x35\x24\xa2\xd1\x7c\x65\x1c\xc8\x37\xed\x48\xf2\xde\x28\xd6\xab\xf4\xe2\xe9\x18\xd6\x77\x6f\xf2\x5f\xec\xf4\x3e\x5f\x3d\x82\x95\x62\xd6\x8c\xf0\xd3\xc0\x4c\x03\x4a\x67\x69\xa7\xb8\x11\xf8\x99\xa0\xd5\x16\x52\x59\x33\x2a\xf2\xd1\x36\xcf\x46\x73\x40\xbe\x01\x30\x8b\xc4\x9b\x4c\x16\x33\xae\x90\x17\x77\xd5\x57\x9c\xcd\x58\xf9\x8a\xb3\x85\x1a\x5e\x71\x2e\x97\x8e\x2e\x21\x76\xd6\x0e\x01\xa9\xb1\xbb\x1d\x46\x5f\xb9\xdd\xfe\x1b\xbb\x72\x56\x70\xdc\x93\x2a\x04\xc3\xbf\x9e\xc6\x66\x04\xc1\x1b\xfa\x17\x7a\x39\xdf\x45\xa5\xa5\x20\x82\x52\xa7\xc1\xee\x71\x98\xec\xb2\xdb\x1d\xe4\x72\xde\xb7\x1b\x10\x02\x49\xdb\xf3\x3a\x39\xed\x96\xf7\xa6\xbd\x16\xd2\xed\x16\x2f\x22\xec\x1b\xbb\x83\x95\xa7\xcb\xbd\x95\x1d\x59\x57\x6f\x26\xb2\x34\xcf\xe9\xca\xc1\x2a\x94\xf2\x97\x7d\xf3\x52\x0b\xfa\x4b\x6a\x0c\x26\x67\x27\x66\x27\xa7\x09\x81\x3d\x29\xac\xc8\xa3\xf7\x5d\xea\xbf\xc3\x19\x50\xc0\x86\xc4\xf3\xa0\xa4\x17\x46\xf9\xe9\x3a\xfd\x2d\x83\x86\x84\x60\x2c\xa3\x5e\x65\xb4\x12\x5c\xda\x41\x38\xb6\x9c\x45\x05\xf7\xd2\xa4\xc1\xcb\x5f\x9d\x4b\x6e\xd3\x15\x67\x3b\xae\xf8\x74\x9a\x15\x41\xbc\xe2\x0c\x45\x77\x25\x2b\xce\x50\xdc\x49\x6c\xf4\x98\x6d\x6c\x86\x5d\xde\x68\x06\xed\xf1\x4e\xd1\x9c\xe5\xe0\x43\xea\xde\xe2\xef\x91\x4e\x26\xb2\xf1\x08\xba\x44\x05\xbc\x89\x23\xe3\xd3\xe0\x53\x28\xf6\x18\x86\x7c\x5a\x7e\x26\x5f\x70\xd8\xa5\xb0\x58\x41\x91\x66\x10\xd5\xf4\x49\xc7\x7f\x9f\x43\x6e\x51\x58\xd7\xa4\x7c\x0f\x9e\x3c\x20\xd9\x5a\x9f\x94\x72\x60\x0a\x0e\x2b\xca\x1b\x79\x34\x29\xb1\x00\xbd\x3c\x6a\x75\xe2\x22\x48\x78\xda\xc9\xe3\xee\x88\x97\xf0\x65\xaa\x5b\xe1\x05\x7a\x8f\xa6\x8d\xdf\x86\x79\xb8\x79\xdf\xa3\x49\x45\x22\xb6\xff\xcd\xbd\xd9\xd8\xb4\x1f\x78\x82\x02\xae\x25\xfe\xef\x66\x62\x1a\xdd\x5d\xfe\x4f\xcd\x61\xad\xd8\xda\x63\x3b\x41\x8c\xbd\xec\xc1\x48\x48\xd8\x65\x76\xa7\xdd\x27\xf9\xc7\xe5\xf8\x65\x1f\x61\xb4\xc0\x93\x01\x78\x55\x90\x50\xbd\xe0\x77\x2d\x3a\x6e\xbb\x25\xed\x20\xf5\xce\x0e\x6f\x67\xd1\x68\xef\xb2\xda\xbb\x86\x89\x25\x76\x47\xa5\xd6\xe9\xc7\xb0\x26\xea\xee\xd1\x4e\x42\x3a\x7a\x5b\x39\x70\x92\x5d\x21\xb7\xc0\x81\x28\x6f\xa4\x4b\x3c\xeb\xba\xe3\xfe\xd5\xd5\x9b\x40\x15\x59\x75\x1b\xbc\xbf\xa6\xe0\x35\xde\x5a\xf3\x5f\x53\x2b\xc3\x6b\xc8\xe4\x0a\xb8\x24\x30\x03\xdd\xb4\xa3\xfc\xf0\x08\x7a\x63\x2e\x6a\xef\xf3\x0e\x26\x79\x27\xe3\xda\x72\x58\x46\xe1\x88\xf2\x75\x00\x71\x00\x45\xcf\xf7\x5d\x28\x38\x8e\xf5\x6a\x9c\x89\x89\x1e\xa3\x03\xfe\x70\xd8\x21\xe6\x2a\xbe\xd7\x61\x5b\x70\xc3\xe6\xee\x9b\x1c\xff\xf9\x8e\xb5\x8a\x78\xa4\x3d\x21\x51\xa1\x7e\x9e\x1e\x44\xb9\x04\x61\x12\x44\x68\x1a\x9c\xc2\xda\x77\x06\x61\x98\xed\xc3\xd5\x33\x1c\xf0\x04\xc3\x48\x4e\x64\x41\x22\xf5\x85\xde\xce\xa2\xdb\x8e\x1a\x41\x1c\x77\xbd\xb9\x89\x69\x0f\xf5\xf3\xd7\xef\x45\xbd\xe3\xd5\x57\xed\xdd\xbd\x6b\x90\xcd\xee\x34\x1b\x16\x94\xec\x78\x12\x77\xdd\x3b\xfd\xc7\xce\xd0\xdf\xa0\x67\xa6\x8c\x12\x69\x46\xea\x68\xf5\x92\xb2\x16\x0b\x3e\x05\x49\xea\x31\xb1\xe8\xb9\xbd\xe3\x17\x82\x38\xe7\xb6\x5b\xf2\x53\xd9\x56\xf4\x45\x9b\xe1\x0b\x6e\x6b\x0d\x99\x1a\x67\x65\x69\xbc\x07\xfc\x1b\x60\xf3\x92\xff\x9c\x38\xf7\x74\xe6\x70\x8e\x21\x0f\x81\x22\x50\xf6\x16\x67\xaf\x77\x98\x45\x5d\xdd\xfb\x1c\xff\xde\xaa\x35\xfa\x41\x2c\x8f\x5e\x8f\x17\xda\xe9\xf3\xb2\xf9\xa0\x41\x50\x9f\x7c\x7f\x04\xc1\x10\xa0\xea\xfb\xab\x2d\xfe\x58\xe9\x59\x65\xfe\x2b\x5d\x24\xaf\x54\xec\xdd\xbf\x99\x2d\x18\x1c\xfa\x13\xce\x4f\xad\xf7\x93\x03\xbc\xaa\x36\x84\xcc\x75\x0a\x99\x8b\x52\x09\xf7\x64\xff\x61\x15\x30\xd6\xe6\xd2\xae\x3d\xeb\x5d\xc5\x7e\xda\x90\x66\xd7\xa1\x75\x4b\x56\x17\xa7\x6e\x73\x27\x95\x38\x05\xd3\x6d\x7b\xe1\x97\xe1\xa0\xed\x43\x5c\x4e\x36\xf5\xd7\x5b\xd9\x40\x87\x7e\x0a\xbf\x1a\x07\xbf\x6c\x8c\xbf\x72\xdf\xb3\xd5\x9f\xae\x78\x8e\x61\x56\xb9\xf2\x44\x4e\x33\x4c\x49\x2f\xf8\x17\xf8\x85\x8a\x3a\xc1\xee\xca\x78\x06\xe5\xe0\x5f\x5f\x71\x40\xf2\x2e\x2b\x8e\x36\xb6\xce\x0f\x46\x11\x72\xaf\xf4\x1c\x7d\xfa\x20\x98\xe8\x35\x6c\x16\x43\x2b\x82\x0e\x36\x66\xd6\x23\x1d\x99\x29\x8d\xd7\xf3\xdc\x88\x99\xe3\x21\x7b\x93\xd6\x8a\xbc\xc6\x61\x13\xe7\xd7\x15\x14\x41\x4f\x68\x0d\xc9\x42\x14\xc7\x88\x43\x25\xbd\x32\x31\xd0\x0f\xef\x79\xa9\x2d\x30\x3d\xeb\x65\x3f\x8d\xf0\x1c\xdc\xe6\x1b\xb7\xcf\x7a\xdd\x29\x5b\xab\x53\xba\x5b\xdd\x23\x7d\xec\x0b\x03\x49\x5e\xc5\xda\x33\xf6\xfc\x07\x59\x46\x5a\x95\x68\xbf\xaf\x7c\xff\xc5\xcb\xfd\x19\x03\x58\x44\xea\xb8\x11\x4b\x30\x27\x69\x1b\x4d\x0a\x46\x48\x9d\x16\xd1\xbd\x30\x8b\xc4\x66\xda\xb9\x9f\x17\x81\xcc\x39\xb5\x6b\xc5\xd9\x8c\xcf\x57\x9c\xed\x58\xee\x48\x90\x84\xb1\x1d\x4f\xf9\xd5\xcb\xd8\x8b\x35\x06\xe1\xdd\x8e\xbf\xf4\x83\x81\x20\x34\xc9\xcb\x2f\x0d\xb1\x2b\x93\x34\xe4\xd3\x9d\xf9\x38\xca\x9b\x8a\x71\x76\xff\xa3\x76\x0e\x7c\xf6\x67\x6a\x53\x15\x75\x21\x6d\xb7\x1c\xf0\x8c\x30\x14\x22\xe1\xa4\x39\x82\x11\x70\x88\x40\x5e\xb2\x8c\x33\xe0\x7d\x11\xe4\xea\x18\x80\xda\x05\x97\x02\x91\xfd\x30\x04\x53\xbe\x32\xfa\x81\xcb\x0f\x07\x44\x3c\x3d\x91\xb4\xad\xe7\x90\x13\xaf\x9c\xa6\x4c\x86\xe2\xe8\x73\x25\xfd\x1f\x05\xeb\x9e\xa4\xb2\xf3\x51\xae\x70\xcb\x95\xf7\x53\xe5\xb8\x72\xb4\x36\x01\x8b\x0f\x01\xd5\x50\x68\x04\x00\xc0\xf0\x6f\xb4\x18\x89\x21\xf2\xb0\xce\x7e\x65\x88\xb9\x62\x5d\x66\x8b\x60\x91\xeb\x55\x79\xfe\xd0\x39\xac\xca\x1f\xc3\xaa\xd8\x35\xfd\xa0\xd6\x04\x7a\x51\x5a\x91\xaa\x67\x27\x92\xdc\x78\xfa\xc0\x5c\xa3\x33\x86\x0c\x1c\xfb\x4f\xd6\x2e\x3f\x73\xd2\x83\xd6\x9c\xa0\x09\xe5\xae\x65\xed\xcb\x19\x19\x20\xd8\x23\x03\x23\x22\x3b\xea\x0a\x77\xd9\x02\xf1\x09\xf6\xa0\x25\x69\x73\x05\x42\xcd\x73\x77\xdc\xff\x19\xfd\xab\xac\x6d\x49\x3d\xda\xf4\xf5\x41\x3e\x8e\xef\x71\x98\x45\xbd\xdc\x5f\x71\xfc\xfb\x9c\x93\xc6\x13\x69\x80\x20\x34\x20\x43\xbf\x56\x8a\x72\xe6\x26\xc9\x6c\xc7\x9d\xc5\x28\xf9\xcb\x67\xbc\x2a\xf7\x26\x40\xf9\x76\x52\x75\x0b\x76\xa0\xdc\x3f\x54\x5c\xb0\x10\x62\xca\x3b\xf3\xb9\x98\x9c\xa4\x90\xeb\x3f\x23\x97\xd1\xa4\x60\x6f\x1f\x62\x3f\xd1\x28\xcf\xad\x3e\x31\x2f\x3e\x97\x13\xf3\xc5\x5a\xcf\x6a\xfd\x40\x4f\x4e\x9f\xbd\x03\x1b\x5f\xbf\xfb\xaf\x41\xd9\x1e\xcf\xe8\xaa\x74\x8f\xfb\xfb\x0f\xe0\x98\x2b\x7c\xab\xf5\x6c\xc8\x28\x4e\xe0\xa5\xc8\x73\xaf\x7a\x2b\x7c\xd1\x61\x3f\x3d\x30\x56\xd6\xfd\xa0\xe3\xdf\xac\x7f\x9a\x31\xc9\x5e\xc3\x0c\xe3\x25\x15\x20\x00\xc7\x46\x14\x9e\xdc\xce\xd2\x79\x9e\x2b\xa0\xcf\x4b\x96\x7a\xa0\x3d\x9f\xc0\x1e\x49\x4e\xe3\xbe\xff\x23\x82\x08\x50\x65\x38\xf9\xe2\x85\xd9\xdb\x11\x86\x55\xb8\x0f\xf7\x1f\xd2\x53\x58\x57\x4e\xa5\xbf\xc7\xd8\x93\x2e\x64\xfa\xe0\x59\xed\x02\x0e\x2e\xe4\xee\x2b\x98\xff\xe4\xc1\x45\x14\xb7\x4b\x49\x40\xa1\x59\xed\xe7\x6d\x7a\x95\xc3\x82\xd9\xb5\xe5\xf5\x15\xe7\x41\x42\xf8\x90\x50\xfe\xd3\x41\xd1\x5c\x71\x5c\x94\x03\xcc\x87\xd6\x9c\x3e\x63\x2b\x7b\xd3\x10\xbb\x22\x36\x83\x63\xc0\xd9\xf3\x17\x87\xfc\xbb\x87\x8e\x96\x1f\x5b\x1c\x39\x24\x2a\x02\x47\xc0\x08\xf0\xd0\x28\xbf\xb1\xd5\x2d\x19\x2e\x23\x51\x2e\xe1\x48\xc2\x70\xeb\x28\x51\xd4\x65\xf5\x75\x0f\x94\x98\xaa\x52\xf4\x04\x91\xa2\x0e\x06\x44\x24\x29\x31\xf9\x80\xfb\x81\xa2\x84\xc9\xcc\xc1\xc7\xd0\xcf\x4e\x22\x16\xbb\x8e\xa3\xd7\x45\xc8\xdf\x0f\x9c\x34\xc0\x0c\x72\x64\x7a\x5c\x9e\xbf\x8c\x23\x76\x3e\xdd\x2d\x58\x83\x36\xa9\xd1\x40\x91\x68\x58\x63\x1c\x51\xa0\x3d\x9d\xbc\x1c\x47\x84\x75\xd1\x67\x63\xbd\x0b\x09\xba\xdc\x50\xe7\x05\x06\x11\x1a\xc8\x05\x6e\x4c\xeb\x00\x7e\xa9\xc6\x7a\x96\xd8\xfd\x74\xcd\xff\xf5\xda\x6c\xe9\xe9\x05\x5d\xa7\x36\x6f\xc8\x24\xde\xf9\xc5\x59\x25\xd1\xc2\x85\x59\x85\x7e\x53\x8c\xd7\xa7\x01\x8a\x92\x78\x87\x0f\xce\x59\xb3\xfb\xcf\x35\x56\x71\x5a\xdc\xaf\xd6\xfc\x3f\xac\xcd\xf6\x3c\xbf\x08\x27\xe1\xe2\xce\x31\x9d\x84\x0b\xb9\xd7\x29\xdc\x62\xdd\x9b\x7c\xb7\x35\xef\xaf\xac\x59\xf9\x84\xe5\xb5\x82\xfe\x6e\x3c\xc4\xdb\xd6\xfd\x07\xc7\xbf\xc6\x7e\x64\x5d\x2f\xc4\xdb\x04\x54\x02\xbd\xd2\x05\x87\xaf\x2e\x14\x16\xf2\xa5\xa8\xd1\x8b\x7f\xff\x2a\x87\x71\x66\xbc\x74\x6f\xf7\x6f\x3d\xa0\x7e\x95\x83\x7e\xb0\x1c\xf9\xbb\xc3\x3c\x1a\x9c\x95\x46\x88\x54\x58\xd7\xb6\xc9\x13\x6f\xaf\x9d\xfe\x4f\x9a\x81\xfd\xaa\xcf\x58\x8b\x85\xda\xbb\xd5\xca\x6f\xa9\xf8\x29\x94\xaa\x8f\xcf\x5a\xa2\xf7\x7b\xb7\xfa\x57\x59\x98\x9e\xaa\x98\x4a\x87\x9e\x14\x3d\x89\x01\xac\xb9\xf8\xce\xf0\x7f\x0f\x18\x7f\x4b\x70\x58\x85\xf3\xf7\xce\xcf\xb8\x66\x09\x0e\x9f\x73\x4c\x53\xda\x27\x9c\x01\x0e\x51\x72\x2d\x8f\xa6\x8d\x20\x2e\x39\x56\xf8\xcf\x71\x34\x3f\x6c\xe7\x78\xd7\xe0\x12\x92\x6f\x4b\xe7\x25\x2b\x5c\xe8\x34\x03\xc7\x67\x21\xeb\x7a\x23\xe3\xe0\xba\x12\xc4\x39\xe6\x89\x29\xc5\x39\xc8\x33\x49\xf1\x88\xd2\x84\x1f\x14\x85\xb8\x83\x04\x3b\xf9\x02\x47\xe6\x86\x00\xd7\x83\xa7\xfb\xed\x93\xea\x97\xe4\x2b\x9b\x76\xee\x0f\x93\xcd\xd4\xdd\x91\x9c\x25\xcd\x9e\xcc\x3f\x93\x51\x08\x13\x49\x3c\x2a\x84\x44\xc5\xf1\x59\x2b\xfb\x87\x43\xec\x72\xdd\x1b\x8c\x02\xfc\xf0\x90\xff\x8e\xa1\x93\xf6\xc3\xf2\xa4\x35\xd2\x1e\x0b\x39\xb5\xa4\x3a\x28\xe7\xc7\x88\x20\xb4\x9c\x26\x0a\x09\x3a\x35\x9d\x86\x3b\x72\xa3\x94\x1d\x14\x42\xe1\x9b\x08\x44\x23\x8a\x6b\xc8\x7c\x9c\x18\xd1\x17\x42\x4a\x99\xe7\x5e\x2b\x12\xb7\x11\xf9\x64\x98\xdd\x41\x96\x3c\x5a\x6c\x16\x82\x7f\x4f\x0a\xbe\x98\x49\x27\x5a\x5e\x78\xc6\x1a\x00\x66\x5c\x57\x01\xf5\xa4\x4b\x3c\xcb\xc4\x0d\x84\xc4\x0a\x97\x97\xc0\x07\x3a\x19\x7e\x5d\xa4\x9e\x4f\xaf\xe0\x1c\x75\xd3\x0e\x2c\x84\xd8\x1c\x08\xc0\xaf\x46\x97\x57\xcc\xd3\x94\x7e\x49\x18\x61\x94\x70\x88\x8f\xf2\x33\x51\x5e\xf4\x8e\xa5\xe4\x1a\x62\x2d\xe9\x9b\x87\xac\x9c\x0b\xf2\x58\xcc\xa5\xed\x34\x4e\x17\x15\xe0\x0b\x70\xa2\x66\xd4\xf6\x77\x6a\xfe\xff\x18\xf7\x0a\x2a\xb6\xe6\xc0\x6d\x99\x07\x09\xef\x39\x60\xd6\x8c\x30\xc1\x04\x13\xe8\x4b\xbd\x63\x19\xac\x96\x6e\xb8\x85\x0e\x24\xc2\x97\xe1\x4d\x14\x71\x6c\x11\xd2\xcf\x3b\xec\x16\x0c\x70\xba\xde\x7f\xd4\xdc\x39\x05\x6c\x83\x32\x93\x82\x99\xef\x76\xfc\xc5\xf1\xfe\x11\xcc\xc7\x13\xa9\x10\xd1\xa9\x92\x8c\x30\x71\xdc\x6a\xd8\x9c\xd8\xa3\x07\x83\x46\xd3\xe3\x49\x91\x75\x81\x9a\xa9\x18\xe9\xe3\x33\xb0\x36\x7d\x9d\x12\xbe\x34\xcc\x1e\xb1\x6a\x96\x6b\xb0\x83\xbf\x7b\xd8\x1f\xb5\x9e\x54\x59\xc1\x35\x3c\x44\x9f\xf0\x96\x17\x6e\xb8\x40\x9f\x3b\xb4\xbc\xff\x90\x71\x65\x94\x36\x67\xda\x5c\xdf\xab\xd9\x1e\x36\xb6\xce\x2c\xe6\x1b\xc6\xc5\xb5\x1b\x17\x3f\x6b\x06\x67\x7d\xf4\x3c\x83\xb3\x7e\xfe\x22\x64\x55\x5e\x0f\x2e\xce\x59\xe7\x49\xab\xdb\x9e\x6e\x70\xaf\x5b\x25\x8f\x7b\x35\x7c\xfd\x55\x8c\xfd\x51\xad\x12\xf7\x6e\x56\xdc\xdd\x2a\x26\xfc\xfe\x9a\x9f\x8c\xd3\x7d\x6e\x90\x7c\x8b\x45\x1f\x9f\x3a\xa0\x83\xff\x29\xc6\xd8\x4a\xbd\x22\xcd\x96\xa2\x96\x50\x21\x25\x56\x5e\x21\xb9\xcd\x1f\xbf\xdd\x61\x6f\x75\xd8\x83\x80\xc0\x1e\xa4\x08\xf1\x34\xc9\xdd\x5f\x72\xfc\xc7\x8c\x1b\xa9\xcc\x4b\xdd\xd3\xd5\x81\x47\xb8\xc9\x8d\x68\x60\x42\xf3\x60\x1e\x62\x07\xd8\xfe\xd5\xd5\xaa\x30\x00\xa5\x4e\xea\x85\x36\x61\x2f\xdd\xce\x1e\x3a\xd8\xcd\xc4\xfd\xfb\x6d\xfe\x07\x6b\xc6\x03\xad\x7a\x05\x3d\x6c\x1a\xf3\x11\xc8\xea\x1a\xa6\x3c\xb7\xa2\x40\xa3\x02\xf3\xcf\x34\x00\x50\x58\xaa\x6b\x03\x70\x9d\xb0\xe2\xda\x0d\x48\x86\x4c\x48\xc5\x71\x27\x2f\x78\x66\x16\x5b\x8c\xd3\xf9\x20\x36\x78\x3e\x51\x6f\x10\x86\xb9\xb7\xdc\x4c\x2d\xbd\xee\x52\x14\x48\x43\x25\x25\x2f\xd4\xdc\x9a\x51\x6c\xbe\x4b\x49\xa0\x8c\xd7\x85\xc7\x11\x91\x23\x4a\xea\x9e\xe5\xa7\x83\x28\xb1\x14\xc1\xa3\x3b\x0b\x22\x41\xb0\xc4\x3d\x8e\x61\xbb\xd0\xd9\xa0\x30\xba\xb9\xe2\x6c\x11\x13\x34\xc3\x17\xac\x5d\xf2\xce\xe1\x8d\x7b\x6b\x23\x74\xe7\x62\x5d\x2a\x4d\xe3\x4e\x79\xd2\xf9\x22\xae\x0d\x74\x0d\xfc\x0b\x87\xc9\xfd\xed\x7e\xc1\x61\x3b\xd7\xe4\xbe\x36\xc3\x17\xfc\x37\x39\xf4\xd7\x40\xe2\x20\xe3\x17\xce\x89\x3e\x20\xf5\x34\x9a\xa1\x95\x11\xbb\x21\x56\x18\x0e\xe3\x1a\xce\x18\x38\xe3\x92\x16\xb0\xce\xee\x71\xd8\x30\x81\xc7\xe6\xee\x19\xff\x26\x45\x5b\xd0\xed\xc6\xa0\x85\x74\x8c\x28\x1e\x1b\x69\x77\x8a\x48\xd3\x9a\x79\xd7\x14\x7c\x84\x3d\x72\x0d\x13\x46\xcd\x9d\x75\x9e\xb2\xfa\xd5\x7a\xd8\x3d\x78\x6e\x0e\x6c\x65\xe7\xb5\xef\x38\x95\x79\x62\xa6\xd2\x90\xe3\x2d\x7d\x90\x0e\x44\xee\xfe\x96\xe3\x1f\xaa\x78\x0e\x37\x5d\x4e\x4e\xb3\x69\x9b\x93\x59\x12\xd9\xcc\x5c\x25\x03\x27\x3c\x52\x51\x81\x7d\x8d\xa6\xac\xc5\x2e\x17\xa3\x8d\x79\x21\x2b\x75\x9f\x30\x80\x15\x95\x7d\xb4\xfb\xe1\xef\x90\x7f\x89\xa6\x90\xe0\xdf\x86\xb5\x0a\xea\x11\x83\xc6\x2b\x4a\x16\xeb\x03\x80\xfa\xf7\x3c\x40\x80\xfa\xff\xdb\xe0\xd6\xff\xd0\x65\x1c\x78\xcd\xb0\x15\x04\x65\x49\x4d\x56\xde\x4b\x8d\x97\xfa\x37\x5b\xfc\xfd\xe0\xdc\x87\xc8\xca\x45\x96\xc6\x56\xd4\xa3\x09\x16\xa9\x65\x37\x80\xa8\x10\x13\x86\xb7\x8f\x7d\xa4\x5e\xbe\x85\xdd\xb7\x85\x5d\xd6\x0a\xce\x9c\x48\x94\xf2\xd9\x7d\xc6\x96\xf3\x45\x1e\xfe\xe8\x66\x31\xd1\xad\xe0\x4c\xd4\xea\xb4\x0c\x50\x2a\x8d\xb5\xaa\xe1\x98\x08\xab\xa4\xa3\x3b\x20\x51\xcb\xc0\xa7\x01\x7b\x8d\xfa\x06\x59\xd6\x04\x1b\xa1\xca\x77\xf2\x33\xfb\xbc\x6b\x77\xe1\x65\x50\xca\xc6\x57\x4a\x49\x5e\xea\x84\xd4\xab\x00\xfe\x08\x2d\x28\xb6\x8a\x95\xee\xd9\xfd\x88\x5d\x75\x6f\xbc\xd4\x1e\x02\xc6\x37\x08\x68\x12\xb6\xb6\xd1\xea\x7c\xd7\xcb\xd2\x0e\x72\xc6\x9d\x76\x5d\xe5\xe8\xa6\xeb\x66\xb7\x72\x2c\x91\x46\x90\xdc\xdb\xa3\xc2\x62\xf6\x49\xa8\x7a\x54\x2f\x91\xf1\xf1\xea\xdd\x8f\x18\x11\x7d\x05\x24\xfa\xab\x77\x3f\x42\x76\xb5\x3c\xba\x24\x0d\xb9\x0d\x74\x25\xee\x37\xa2\xad\xb0\x5d\x70\x6b\xb4\xd3\xd0\xdb\x19\xd5\x79\x9d\x8e\x63\x9d\xb6\x11\x82\x3f\xcf\x36\x9a\x3c\xec\xc4\x3c\xdc\x05\x73\x0e\x0c\x6d\xd1\xe4\x11\xe1\x68\xe5\x45\xda\x6e\x53\xb4\x56\x90\xc8\xe9\x12\x04\x2c\xe9\x12\x4b\x8c\x58\x9c\x73\x7a\x32\x61\x82\x51\x94\x11\x5f\x43\xc8\x67\x79\x38\x69\xce\x7b\x96\x27\x21\x2d\xea\x7c\x06\x5c\x77\xa7\x0d\x51\x66\xa5\x52\x78\xe5\x8b\xee\xc5\x70\xd3\x1f\x4f\x48\x13\x2f\xca\x62\x3d\x99\x61\x5f\x19\x11\x8c\x3d\xd4\xda\xce\xd2\x06\xe7\x61\xee\xa5\x49\x91\x52\xc8\x87\x5d\xb7\xe0\x09\x3a\xb9\xc7\x93\x5c\xee\xca\x00\x68\x75\xcc\x05\xb1\xb8\x0e\xbb\x9e\x66\xd1\x22\x24\x92\xed\xbf\xcd\xcc\xf6\x61\xaa\xe2\x18\x26\x29\xaf\xd8\xee\xec\x0d\xcc\x32\xe1\xd8\xe1\x2f\xa8\xe9\x3c\xcd\x13\xf2\x11\xff\xde\x56\xff\x4d\x8e\xf1\x40\x6a\xe2\x91\xc4\xea\x4f\x05\x2b\x55\x88\x62\x68\xe7\xc2\xa4\xb1\x9d\x1c\x20\xbf\xd3\x82\xef\xf3\xcc\x3a\x14\x0f\x4b\xde\x28\x0d\xb4\x36\x91\x14\xac\xb2\x75\x41\x75\x46\x1b\x69\x46\x8e\x45\x92\x0b\x43\xf0\x40\xe5\x0e\x51\xe5\x7b\xfe\xb9\x2d\xec\x7f\x90\x0b\xf4\x12\xdb\x37\xd0\xef\xb8\xef\x24\x9c\xa7\xef\xf3\xeb\xb5\xef\xf3\xab\x1c\xf6\xe8\x73\xec\x03\x3a\x3d\x3f\xfe\x42\x38\x3d\x4b\x4a\x67\xac\x5e\xb8\x11\x76\xb3\x21\x20\xfe\x97\x08\x69\x38\xeb\x2c\xac\x2e\x99\x4c\xb8\xe3\xa3\xa6\x8b\xb9\x71\xac\x4a\x52\x89\x71\xc4\xca\x52\xc9\xbb\x37\xad\x92\x7b\xfb\xaa\xfa\x41\x72\x17\x27\x7c\x02\xb4\x7a\xff\xdb\x90\xff\x87\x4e\xd5\x1b\xe3\x58\x4a\x87\x2a\x70\x4c\x10\x54\x44\xc6\xee\x43\xa4\x4d\x29\x59\xbb\xb8\xf8\x6e\x1b\x88\x5f\xe0\xc5\x3c\x59\x44\x4c\xb5\xbb\x3a\x1c\x3d\x1f\x1a\x71\xda\x09\x89\xbb\x45\xb7\x44\x80\x1d\x1d\x11\x6c\xcc\x63\xa7\x67\x71\x33\xc5\x69\x10\xce\x07\x71\x90\x34\x78\xa6\xa5\xa4\x4e\x21\x5d\x46\x1a\x28\xfa\x5a\xc8\x07\x9b\x31\x3a\xd2\x22\xb3\xf7\x3e\x50\x60\x0e\x9e\xce\xa8\x7b\x6e\x3e\x38\xfd\x4b\x9f\x4e\x60\x84\xa7\xbf\x97\x9a\xb2\xad\xb6\xf4\x70\x00\xbc\xc1\xf3\xed\x8c\xa7\xf3\x80\x84\xab\xfc\xf1\xb2\x34\xb9\x35\x9d\x27\x78\x8b\x3f\xaf\xf9\x37\x58\x4f\x06\xa1\xb9\x92\x48\xd7\xc8\xd2\xc4\x7b\x4a\x3a\x6f\x73\xda\xbf\x54\x63\x4f\x65\x9b\x83\x46\x11\x2d\x71\xb7\xed\x8f\x6a\xbd\x2f\x10\x09\xca\x51\x42\xd5\xc5\x5d\xb5\xce\x4f\x49\xe7\x6d\x25\xef\x35\xec\xaa\x35\xf8\xce\x96\x31\x17\x5e\xee\xb0\x07\x09\xe1\x46\xf2\x75\x20\xf1\x3d\x73\x00\xf6\xc9\x6a\x22\xdf\xa1\x49\xe3\x7e\x05\x7e\x75\x39\x90\x20\xd3\xa6\x2c\xf8\x94\x74\x1e\xd3\x87\x77\x20\x42\x64\xa1\x13\xc7\x5d\xb8\x43\x80\xbb\xac\xb3\xe7\x5d\xc1\x46\xd7\x05\x1e\xef\xfe\xc9\x83\xfc\x9b\x4b\xcf\xd6\x82\xb1\x6b\xc0\xca\xaf\x38\x0f\xa1\x12\x25\x66\x77\xc5\x71\x91\x7f\x3b\x16\xe5\xb9\x7e\xf8\x90\x6a\xd6\x78\xc5\xd9\x86\xa5\x67\x78\x10\xda\xa9\x43\xde\x7b\x39\xfb\x2d\x87\x5d\x81\xaf\x4d\xd1\xea\x9d\x8e\xc4\x05\x78\x15\xc0\x2d\x9e\x1b\xdf\xae\x92\xe8\x27\x24\x6e\x96\xde\xcb\xcf\x00\x57\x5c\xf1\x9c\xe0\xbf\xd2\x45\x9e\x5d\xb2\xaf\xe0\x43\xd7\x8a\x12\x18\xc2\x2c\xc0\xaa\xe4\xbb\x2c\x64\x82\x98\xb9\x12\x4a\xf8\x30\x4f\x28\x3f\xa6\x7b\x52\x62\x25\x8e\x83\xa0\x97\x82\x96\x4c\x48\x3f\xde\xa2\x2a\xa4\x21\x88\x89\xf9\x31\x84\x52\xed\x1b\x5e\x2f\xb5\xf6\x10\xba\x04\x4b\x93\xed\xce\xc8\x89\xbb\x69\x6e\xb0\xd4\x23\x18\x6d\x39\x01\x54\x97\x31\x37\x56\x6b\xdf\x70\xd8\x65\x0d\x21\x1e\x8b\x1d\x37\x91\x76\x92\xc2\xfd\x23\xb5\x40\xbf\xe1\xc0\x13\x51\x7b\x33\xc8\x9b\x9e\x2a\x98\x2b\xb2\x62\x64\x1c\x99\x33\x7f\x9a\x28\xb0\x00\x28\x61\xe2\xe8\x4a\x93\x36\xa2\x4b\x02\x02\xb0\x20\xed\x5e\x8b\x37\x9a\x41\x12\xe5\x2d\x3c\x4e\x51\xe1\x25\x20\x98\x08\xb2\x00\x1e\x10\xda\x1b\x5b\xb6\x9f\xf0\x65\xc1\x7c\x69\x67\xf3\x99\x4a\xe4\xc9\xaf\x3b\xac\xcf\x86\x77\x7f\x5b\x0d\xf7\x3d\xfd\xf7\xa3\x39\xa3\x6a\xe7\xec\x29\x6f\x48\x51\x0a\x5c\xb8\x72\x74\xba\xca\x3a\x49\x69\x5f\xae\x1b\xa6\x61\x39\xcd\x4e\x8b\xdb\x2f\x1f\xd3\x13\x9a\x8f\x91\xc2\x90\x17\x63\xd6\x28\x5f\xe9\x30\xf3\x3c\xba\xcf\x55\x43\xcb\x2f\xc0\x49\x83\x83\x46\xe8\x74\x83\x0f\x1c\x9c\x32\x7b\x01\xbe\xe2\xb0\x0a\xc2\xe2\x7e\x5a\xf5\xf0\x5d\x6b\x9b\x7c\xbb\x55\xb4\xb0\x49\x17\x9c\x1f\xe4\xd4\x3f\xa3\x66\xc1\x16\x7f\xd7\xf1\x8f\xce\xd8\x14\x99\xc4\x04\x4d\x8c\x90\x36\x20\xb4\x3f\x12\x68\x75\x7a\x76\xe4\xf6\xb5\xba\x8e\x5c\xbc\x83\xae\x0f\xa5\x8d\x5d\x53\x2e\x5e\xc1\x25\xaf\x27\xa9\xc1\x3f\x39\xac\xcf\x35\xe1\x7e\x51\x2d\xf3\xa7\x9c\x55\x68\xd7\x1a\x34\x36\x49\x23\xee\x80\x5e\x09\x3f\x03\xcf\xe0\x86\xc9\x31\xd8\x5f\xec\xba\xb8\x2b\xff\xbb\x0e\xbb\x1c\x47\x32\xae\xee\xb8\x0f\xa8\xf1\xbe\xee\x42\xdc\x71\x6b\x3f\x79\xe7\x7b\xd5\xbd\x6e\x9c\xad\x57\xd2\x71\xbf\xf5\x18\x3f\xd6\x3f\x21\x58\x55\xe2\xdf\xe2\xf1\x8d\x63\xe5\x47\x6b\xa6\x9b\x06\xc3\x92\x18\xdf\x08\x99\x20\x70\x61\x39\x78\x01\x2a\x7b\x51\x27\x07\x09\x53\x94\xc5\x3b\xc0\x66\x2a\xff\xfe\x16\xf6\xda\x1a\xdb\x46\x02\x00\xb8\x5a\xbe\xa8\xe6\xff\x27\xce\xba\xe1\x4f\x49\x05\xa8\x25\x6d\x90\xf2\xe6\x79\x9c\x26\x8b\x28\x86\xaa\x9c\xf2\x44\x44\xc2\x28\x17\x12\x71\x27\xca\x9b\x46\xbf\x41\xd8\x51\x06\xfa\x1e\x63\xba\x17\x46\x0b\x98\x70\x4c\x36\xda\x13\xeb\x04\xc4\x0a\x00\x5e\xba\xe8\x0a\x9d\x01\x18\x76\x92\x2e\xe3\x22\x4a\x55\x91\x28\xbb\x98\x92\xd3\x63\xb4\x98\xc0\x2e\x06\x90\x16\xca\xe4\x47\xb7\x62\x9a\x49\x0d\xa3\x4c\xeb\x67\x8a\xb5\xdf\x71\xd8\x4f\x84\x3c\xe6\xe2\xe0\x1f\xce\x82\x06\x9f\xe6\x59\x94\x86\xb4\xfe\xf2\xba\xdf\x7b\x8d\xff\x1b\xce\x94\xda\xa7\x88\x2f\xa7\xc3\xce\x55\xa0\x13\x4d\x5b\x91\x7a\x8b\xa2\x2e\xe4\x66\x0b\x9e\xb5\xa2\x04\x80\xfb\xf8\x02\xf5\x52\xfa\x2e\x66\xbc\x95\x2e\x49\x05\x71\x61\xe4\x22\x92\xde\xc1\x78\xd9\xcb\x1e\x0a\xd6\x3a\x2f\x82\x56\x1b\x83\xde\xf3\x94\x32\x3d\x05\x5d\x85\x5a\x96\x37\xd3\xac\xe0\x09\x0f\xcd\x7c\x46\xd6\x36\x7e\xa9\xc3\x98\xe6\xc2\xdc\xbb\xd5\x10\x93\x71\x0f\x63\xf7\x1a\xea\x50\x5a\xba\x8f\x40\x8a\x52\x0d\x8b\x8b\x5b\xb0\xac\x0c\x48\x92\xd7\x92\x64\xc9\xea\xd4\xb3\x6a\x6c\x33\x22\xf9\xbb\xff\xea\xf8\x5f\x74\x8e\x05\x6d\xc3\x25\xf1\x34\xef\xe6\x46\x82\x1b\xdb\x30\x40\xfb\x31\xcd\x16\x83\x24\x7a\x2a\xee\x39\x21\xa1\x2f\x82\x8d\xd6\xdb\x89\x9e\x31\x5a\xc2\xdc\xa5\xe0\xaf\x61\xe2\xd0\xaf\x51\xfb\xf4\xa4\x0b\x32\x02\x01\x86\x67\x10\x39\xaa\x03\x44\xf0\x5e\xfd\xd4\x1a\xd3\x57\x0c\x0a\xe5\xfc\xe7\x1a\xf9\xf2\x7f\xab\xe6\x7f\xb5\x66\xa5\x4f\xec\xef\xc9\xec\x4d\xea\xa0\x3f\xdc\x2d\xb0\xf1\xd1\xe9\x86\x8e\xe5\x88\x17\xc4\x45\x33\xed\x2c\x36\x11\x39\xd2\xa0\x33\x41\x17\xb7\xb1\xe0\x3a\x51\x09\x05\x01\x9e\xa8\x65\x04\xd9\xd8\x5a\x6a\xcc\x18\x9c\xa5\xed\x2c\x12\x3b\x1a\x0f\x79\xa7\x48\x85\xa4\x07\xc0\x47\x94\xf6\x31\xca\xbd\x76\x16\xb5\x82\x2c\x02\x5f\xfb\x82\x27\x21\x1d\x14\xec\x5d\x9a\x78\x51\xc8\x5b\xed\xb4\x40\x1b\x7e\x12\x96\xf2\xe9\xe9\x1b\xbc\x52\x03\xb6\xde\xc9\x57\x5a\x88\x2c\xef\xcd\x4a\xf8\xbd\x21\x76\x39\x60\xf7\x29\x81\x38\x77\xbf\x31\xe4\x7f\xb8\x76\x94\x64\x70\x49\x6f\x31\x49\xb5\x91\x14\x58\xea\x45\x27\x17\xbc\xf1\xa3\x47\x55\x39\xd2\x6d\x83\x08\x0f\x97\xd4\x3c\x97\xa7\x18\x9d\x08\x34\xad\x90\x94\x60\x31\xc8\xe6\x83\x45\x2e\xbd\x59\x55\x00\xa7\x2e\x59\x02\x3a\x30\x76\xe6\x08\xda\x2a\x82\x44\xfb\xdf\xc2\x87\x31\xfa\x4d\x8b\x2b\x06\x35\x8d\x29\xa5\x32\x36\xbe\x54\x88\xfa\x86\x4c\x82\xb4\x98\x0c\x4b\x45\xd6\x41\x43\x4d\xc6\x0d\x13\x95\x1d\x3e\x0a\xfd\x12\x3b\xce\x92\xdb\x34\x57\x76\x90\x4d\xf4\xc7\x2e\x19\x74\x91\x5a\x8b\xb2\xa6\x64\x53\x9d\x28\x5c\x0f\x5f\xd6\x84\x84\x36\x0b\x47\xa3\xe4\xb4\xfb\x24\xff\xf8\x2c\xfd\x8d\x6a\xe0\x13\x33\x47\xcb\xda\x5f\x63\xcd\xd7\x44\xe2\x0c\xc8\xb8\x1a\x1b\xea\x44\xa1\xfb\xb6\x9a\xff\xda\xda\x89\xc9\x03\xa5\xa8\xec\x08\x4d\x62\x48\x63\xe0\xb6\x34\x55\x54\xe6\x56\x83\x9d\xa0\x81\xc6\xe8\x7c\x1a\xdd\xc0\xeb\x51\x48\xd2\x4a\xa9\xa2\x4f\x1d\xa6\x65\x97\xca\xeb\x20\x51\x77\xae\x91\xe2\x98\x1c\xd3\xd3\xc4\x9b\x3e\x31\x27\x23\x6c\x04\xd3\xcc\xd8\x39\x24\xcf\x5b\xd7\xd9\xec\x44\xb6\xda\xf9\xe3\x35\xb6\x0d\x36\x1d\xf6\xc0\x7d\x57\xcd\x7f\x69\x6d\x5c\x3f\x20\x07\xfb\x4e\x92\x17\x59\x07\xbc\x4d\x43\xf0\x87\x27\xc7\xf5\xa0\x0d\x60\x21\x4a\x0b\x6b\xaa\xed\xc1\x6f\xbf\x2b\xe3\x37\xe7\xbb\x1a\x38\xa4\x48\xd3\x18\x73\x02\x8b\x6f\x49\x6a\x2b\xb2\x88\x2f\x71\x2f\xc8\xe6\xa3\x22\x0b\xb2\xae\xe1\x2b\x3b\xd7\xe4\x5d\x25\x68\x41\x8a\x1d\x34\xe2\x89\xa5\x54\x7c\x2c\x6c\x23\x50\x77\x00\x91\x6e\xa5\x61\xb4\xd0\x05\x55\xad\xba\x8d\xd6\x39\x6f\xc6\xbc\x0c\xba\x55\xbe\x32\xc4\xae\x90\xcb\xaf\x18\x08\xf7\x33\x43\xe7\xae\xdc\x7b\xc1\xd0\x44\xb9\x3e\x3c\x30\x85\xfa\xd9\x63\x34\xa1\x5d\x09\x7b\x5c\xdb\xaf\x25\x11\x0c\x72\x15\xc6\x41\x1b\x5c\x4c\xa5\x02\x44\x0f\x55\xb4\x01\x70\x76\xcd\xa0\xdd\xe6\x49\x3e\x4a\xfc\x14\xa4\xdc\xf6\x82\x46\x96\xe6\xb9\x97\xf3\x76\x90\x01\xdf\xa7\xb7\xad\x37\x81\xc9\x92\x60\xbd\x25\x7f\x89\x91\xe9\x62\x9b\xc8\x26\x4d\x6f\xde\x28\xf1\x66\x0e\x4d\x5c\x7d\xf5\xd5\x37\x78\x84\x8e\x15\x62\x96\x7e\xef\xc4\xdc\xc4\x1a\xcf\xc1\x54\x07\x83\xbe\xd0\xb1\xe9\x42\xdb\x69\x54\xc2\x8b\x2f\xd4\x18\x5b\x88\x92\x20\x8e\x9e\xca\xb3\xdc\xfd\xad\x9a\xff\xff\x9c\x63\x66\xf6\x37\xc9\x77\x1a\x8c\x3d\x40\xf1\xc3\x6d\xa4\x59\x4f\x4a\xd5\xd6\xb5\x43\x39\x10\xed\x54\x9d\x50\xa5\x5b\xc2\x78\xd3\x3c\x12\x1b\xbd\x91\xb6\xda\x69\x02\xbc\x83\x38\x55\x14\x1a\x2b\x38\x5b\xb2\x74\x89\x9a\x54\x3b\x31\xc0\x62\x4e\x4a\xb6\xb1\xcc\xd9\x12\x3f\xa9\x3b\x9a\xa4\xc9\x68\x12\xc5\x23\x50\x4f\xc4\x73\xfb\x7a\x33\x11\x7b\x89\x9b\x1e\x10\x6d\xb2\x8e\x9b\xe1\x79\x9b\xd9\x76\x04\x98\xa4\x89\xfd\xde\x25\xec\x96\x73\x38\x31\x93\x46\x1d\xfe\xfb\x2e\x19\x4f\x3c\xa3\x56\x19\xc1\xa2\x93\x42\x81\x08\xc6\x13\x88\x15\xcc\x91\x5b\xa3\x20\xc8\x28\x59\x0a\xb2\x28\x48\xc0\xbb\x40\xc2\x39\x48\xb2\x2e\xdd\x29\x4c\x49\x4a\xe3\x07\x9a\xe3\xc0\x35\x22\xf5\x70\xe1\x75\x85\xa8\x25\xf8\x0d\x95\xe2\xc8\xe0\x69\x92\x08\x92\x45\xc1\x2e\xb2\xd9\x96\x66\x90\x23\x53\x23\x61\x2f\x80\xcd\x93\xad\x84\x75\xef\x78\xd1\xe4\xd9\x72\x94\x53\x6c\xaf\x5e\x4e\x48\xc2\x10\x72\x41\x93\x3b\x89\xf1\x89\x3c\x62\xcd\x28\x0c\x79\xe2\xed\x8c\x12\xe8\xfe\xd8\x32\xf0\xe7\xe2\xe5\x22\x27\x50\x91\x5d\xb8\x99\x28\x05\x9a\x1e\x50\xb2\xa3\xf0\xf8\x19\x15\xe2\x19\xe4\xa7\x49\x34\x40\x45\x73\xa9\x3d\x49\x77\x19\xbb\x9d\xb8\x27\xa3\x93\x48\x8c\x46\x8c\xa3\x2d\x19\x29\x3c\xf7\x16\x83\x25\x39\x28\xa9\x95\xe2\x3d\x93\x4e\x02\x5d\x3b\x8b\x96\xa2\x98\x0b\x16\x8e\x44\xf7\x00\xa5\x3c\x50\x60\x88\x0b\x41\xd7\x4b\x4e\x2a\x11\xf4\x87\x56\x20\x2a\x14\x09\x03\x1e\x2c\xc4\x28\xc2\x85\x4e\x06\x0e\x02\x80\x7f\xd5\x45\x97\x0d\xc6\xac\xec\x1c\xd6\x0e\x00\x5f\x13\x15\x95\xa6\xd2\xb7\x95\x85\xd2\x28\xf1\x96\xf6\xd4\xf7\x5c\x5b\x67\x9f\xde\xc4\x2e\x25\xde\xf3\x90\x28\x9e\xbb\xef\xdb\xe4\x7f\x69\xe8\x98\xf9\x48\x5c\xb6\x39\x60\x20\x2c\xc4\xe9\xf2\x68\x84\x75\xca\x54\x20\x0a\x70\x05\xa6\x66\x01\xbf\x50\x0a\x4c\x83\xaf\x45\x0a\x42\xb5\x68\xad\x43\x2b\xcd\xc5\x92\x02\x0c\xac\xf4\x25\x68\xa6\x9d\x9c\x9f\xe6\xbc\x1d\x25\x8b\xe8\x52\x80\x93\xaa\x79\x23\xbc\x7d\xc5\xb6\x48\xe8\x12\xa1\xc9\x86\xd0\xf4\xbc\x40\xe7\x21\x79\x66\xea\xde\xb8\x6a\x59\x4a\x97\xc0\xa1\xe5\x3c\xa3\xe0\xcc\x11\xeb\xb4\xaa\x87\x52\xdf\x4e\x3a\x15\x43\x50\x0e\xda\x6d\xb1\xee\x41\xd1\xc4\x8c\x5c\x7e\x23\x1a\x6d\x84\x3e\xa5\xed\xb3\x66\x03\x44\x7a\xc8\xe9\x41\xe2\x83\x9a\x3b\x19\xdb\xa7\x3a\x07\x32\x6f\x89\x8d\xd0\xa7\xac\xce\x58\x89\x10\xc0\x42\xa3\x5c\x0c\xa3\x42\x06\x0f\xf0\xf2\xe4\x62\x4b\x30\x80\x24\x2d\xa2\x86\xad\x53\x9d\x64\x87\xd9\xc1\x73\xa0\x7c\xd6\xf6\x38\x28\x2e\x01\xf6\x9a\x21\x33\xd5\xe6\x8b\x87\xfc\x67\x0c\xe9\xf0\x5a\xd3\x3d\x45\x46\xc1\x82\xb8\xcb\x03\x0a\xba\x28\x89\xc3\x75\x6f\x3c\xa1\x2b\xce\x8a\xaf\x15\xd2\xf0\x52\x10\xf3\x44\x81\x5f\xe8\xc8\x54\x55\x10\xd5\xe3\x46\xc8\x2a\xd9\x06\x83\x24\x4d\xc4\xf6\x29\x39\xc2\x80\x0f\x94\xa5\x7c\x03\xcd\xbb\x14\xbc\x89\x3f\x81\xd8\x19\x82\x09\x50\x3d\x1a\xc5\xd5\x94\xc9\x0d\x0c\x63\x0f\x5e\xa6\x69\xae\x3d\xc0\xe5\x19\xc4\xb4\xad\x8c\xe9\x70\xf8\x03\x53\xb3\x77\x1e\x1d\xdf\x7f\xf0\xe8\x05\x91\x87\x75\x2c\xae\xc9\x6d\xdf\xb7\x8d\x5d\xd1\x73\x23\xbb\xff\x7f\x76\xee\xac\xe2\x27\xd8\x81\x2a\xdd\xd5\xcc\xa1\x09\x0f\x98\x2b\x74\x0c\x14\xc7\x10\x84\x9f\x42\xe9\x20\x81\x1f\x33\x91\x1e\xe6\xb9\x64\x59\xca\xf7\x1c\xb1\xef\x06\x97\x09\x47\x23\x50\x4a\x38\xc5\x65\x48\x80\x24\x48\xc0\x23\xbf\x11\xb3\x32\x62\x4a\x42\x61\x44\x2a\xf3\x9c\x17\x98\xea\x07\xe5\x6d\xb8\x6e\xf0\xe4\xaa\xae\x89\xdd\x76\xa6\x0d\x02\x3b\xed\x01\xc9\x57\xed\x4c\x52\x2f\x4e\x93\x45\x9e\x79\x4b\x11\xf2\x49\x70\x6b\xa9\x4f\x81\x2b\xc4\x86\x45\xab\x99\xd8\xe5\xb2\x35\xb1\x3c\xbb\xbc\x60\xa1\x20\xb7\x2f\x98\x9d\x28\x31\xf6\xce\x08\x64\x22\xc0\xc8\x61\xc5\xfc\xe1\x85\x24\xef\x8b\xba\x37\x9e\x43\x17\x64\xf6\xcf\x72\x41\x05\x06\x05\xd1\x9d\x23\xd6\x34\xcd\xc7\x69\xe3\x34\x5c\xe4\xb2\x99\x4a\x25\x64\xce\x8b\x11\x83\x95\x36\xaf\xa7\x4e\x42\xc4\x96\x18\x77\x79\x4b\x45\x09\x1d\x4a\x8c\x78\x36\x74\x53\x91\x96\xc8\xa4\x16\xd3\xd3\xec\x26\xce\x1a\x15\x90\xb3\xdc\xce\xa2\x34\x53\x8a\x0d\xe4\x82\x0e\x99\x49\x41\x08\xf2\x16\x9d\xcd\xa4\x56\x0b\x5c\xe9\xdb\x69\x68\xf2\xc1\x51\xe2\x5d\xbd\x5b\xaa\x76\x71\x95\xa5\xdb\x3f\x31\xb4\x41\x03\xf6\x59\xce\xd1\x71\xd7\xd8\x5f\x52\xc5\x2b\xe6\x2e\x8f\x16\x51\x86\x54\x5a\x95\x40\x1c\x10\x45\xd5\xc1\xda\x36\x4e\x2b\x1b\x14\x46\xa3\x23\x2a\xb4\x5f\x35\x2a\xda\xf2\x02\xaf\x19\x64\x61\x55\x23\x3b\x67\x27\x0f\xdf\x36\x79\xf4\xe8\xae\x9e\xe6\x50\x57\x0e\xad\x34\x62\x1e\x24\x9d\xf6\x88\xc9\x92\x8b\xb1\x2b\x86\x7c\x7c\x7a\x12\x5c\xca\xe0\x05\x90\x3c\x4c\x74\x2c\xf3\x4e\xb5\x83\xac\xc0\x83\x6f\xf3\x80\xc0\xbc\x14\xa2\x9b\x18\xa1\x2f\xb7\x2b\x2d\x04\xec\x91\x11\xaf\x93\x14\x51\x0c\xec\x46\xd8\x8a\x12\x4c\x06\x9d\x02\x06\x31\xe9\x0d\x61\x15\xd3\x06\xcf\x31\xfd\x46\xc8\x71\xa0\xdc\x5e\x77\xb1\xef\x6d\x75\x7a\xa8\x73\x6c\x8a\x4d\xd8\x7b\xd8\x6d\x49\x42\x70\xac\xb8\x33\x79\x62\x66\xe1\xea\x27\xca\xad\x8d\x88\x0c\x52\x7c\x5c\x28\x01\xef\x0d\x5b\xd8\x76\xa9\xe5\x01\x23\xce\xcb\xb6\xf8\xcf\xde\x72\xd8\x78\x42\x62\x9a\x84\x89\x13\xab\xb8\x10\x9d\x19\x41\x3e\xc1\x22\x8d\x23\x60\x9c\xa0\x4f\xc5\xe1\x40\xed\x13\x5c\xae\xc7\xa7\x8e\x3e\xde\x9b\x3c\x84\xe1\x35\xe0\x47\x00\x14\xd6\x9a\xb8\x76\x96\x2e\x45\xa1\xa9\x9d\x54\x64\x58\x34\x36\xa2\xf9\x20\x05\x2d\x28\xb7\x26\x6a\x97\x15\x2d\x57\x86\x20\xd0\x22\xaa\xcf\x08\x71\x0e\x49\x3c\xd2\x14\x4a\x77\x96\x03\x79\x6d\xa4\xad\x79\x48\xcf\x46\x0a\x1d\x1a\x40\xde\x59\x58\x88\xce\xe0\xb1\x95\x7d\xa4\xcf\x9b\x44\xfd\xc0\x2a\xb5\x14\xc4\x51\x88\x67\x28\xeb\xc4\x3c\x97\xa4\x51\x8f\xd7\xc2\xd8\x2b\xb2\x4e\xd2\x30\xf7\x86\x76\xd2\x83\x2a\xa1\x55\x8b\x0b\x68\x05\xa7\xb9\x71\xdf\x53\xf7\x28\x68\x89\x9c\x9c\x19\xeb\x99\x3c\x0d\x09\x22\x53\xb5\x6a\xbd\x1e\xcc\x0b\x86\x99\x8e\x58\xb7\x9c\x98\x97\xa9\xe3\x73\x2a\x00\xcd\xbb\x66\xf7\x0d\xc0\xeb\xe7\x05\x0f\xc2\x11\x65\x68\xa2\xac\x06\x54\xec\xaa\xdd\x7b\x08\xd1\x11\xa8\xeb\xb5\xbb\x77\xe3\x5c\xce\x60\xdc\x0b\xfa\xad\x0a\x22\x2f\xd8\x41\x23\xa2\xc6\xde\x2c\x0d\xd0\x6b\x11\xa9\x5f\x48\x3b\xe0\xb1\xac\xef\xaa\x20\x8e\xd3\x02\x24\x28\x39\x1e\xe9\xe2\x8a\x0a\xb1\x8c\x17\x59\xd7\xdb\x29\x77\xac\x90\xd6\xca\x97\x1d\xfa\x59\xaa\x6a\x67\xc4\x17\xa3\x48\x38\x11\x75\x6f\x57\x9d\xb1\x71\xca\x79\x0c\x2a\x80\x68\x41\x19\x1f\x2c\x48\x9a\x0b\x7d\x32\xb5\xe5\xa2\x6b\x72\x4f\xcf\xb8\x84\x5d\x2e\xe9\x95\x74\xc1\xfe\xd6\x26\xff\xab\x9b\xc6\xc5\xd1\x0c\x00\x7b\x13\x01\x46\x05\xdd\x2f\xf9\xa4\x69\x0f\x69\x9d\x3c\xd1\xb2\x29\x96\x4d\x5e\xf3\x5d\x2d\x00\xa7\x06\xd5\x04\xb2\x25\xd9\x49\x10\xf3\x89\xdb\x47\x73\x97\xfc\x1c\x40\x7e\xda\x45\xd4\x8a\xf2\x22\x6a\x88\x8b\x03\xc5\xd7\x46\x77\x44\xea\x7f\x45\x9d\x0d\x0c\x5b\x92\x8b\x88\xc2\xb8\x52\xad\xa1\xdb\xab\xa2\xd1\x69\x26\x45\x1a\x1d\x80\xae\x75\x6f\x1d\x88\x9d\xe2\x28\xcb\xe4\x5c\xda\xf2\x82\x5c\x4e\x8e\x68\x04\x8f\xbf\xd7\x49\x94\x70\x6b\xa6\xcf\xa5\xf3\x83\x0a\xd7\x96\x61\xf5\x84\x63\x8d\xf6\x7c\xbc\xae\x1a\x9d\x38\xc8\x06\xf7\x6c\x6d\x4a\xbc\x93\x1a\x01\x05\xe8\x01\x9e\x1b\xdd\x69\x63\x19\x44\xff\x2f\xf4\x56\x33\xd6\x65\x94\x04\xcf\xd1\x20\x09\x47\x55\x2a\x4b\x7b\x0b\xbe\x72\xcb\x80\xf4\x9d\x8d\x20\xa6\xdc\x5f\xee\x77\x36\xfb\xe3\xc6\xef\xb5\x38\x48\xf6\x00\xb0\xd5\x57\x9c\x61\x99\x1a\xdf\x72\x3b\xb8\x6f\x33\x7b\x02\x53\xaf\xdc\x29\xe9\xee\x71\x43\xd0\x28\x3a\x96\x6b\x8b\xf2\x00\x14\x24\x2b\x80\x88\x58\x49\x59\x45\x6b\x52\x47\x63\x9b\x8a\xdf\xee\x80\xcd\x06\xa1\x1b\x5e\xe7\xf8\xcf\x72\x10\x90\x06\x14\xef\x00\x55\xb4\x9e\x64\xfe\xe7\x66\xc5\x2d\x67\x9b\x1f\xa4\x7f\xbf\x67\x13\xbb\x0c\xbd\x8e\x15\xe0\xc4\x77\x87\xfc\xaf\x0f\x95\x30\x1d\xc5\xe6\x5d\x47\xbf\x15\xba\x90\x38\x14\xa0\xd9\x81\x8d\x69\x50\x0f\xc8\xd0\xaf\x53\xf2\xc3\xad\x26\x06\xcb\x09\x62\x62\x09\xd8\xf2\x72\x66\x7f\x5d\x73\x98\x26\x08\x04\xb5\x94\x46\x62\x85\x8a\x2c\x15\x14\x15\x59\xa0\xc4\xa0\xe9\xc4\x2d\x93\xad\x5e\x5e\xf0\x26\x58\x03\xba\x02\xcb\xbb\x16\x16\x6a\xb4\x1d\x64\x41\xcb\xcb\xbb\x49\x11\x9c\x51\xea\x60\xf2\xce\xc6\xdc\x53\xe0\x02\x81\xa0\x6f\xb9\x31\x10\xd5\xd5\x11\x1c\xa2\xe9\x3c\x09\x37\x77\xb9\xa0\x7c\x99\x71\xa5\xbe\x5b\xbf\xc3\x9b\xd8\x57\x4b\x11\x5f\x06\xff\xa7\x28\x59\x1c\x15\x77\xe6\x28\xd1\x59\xda\x15\x63\xe5\x6d\x61\x1e\xcd\x3f\x1d\x62\x3f\xd3\x4f\x6e\xa6\x55\xab\x4f\x26\x0b\xa9\xfb\xce\x21\x7f\x4e\xfc\xa1\xc5\x33\x7a\x8d\x40\x71\x46\xe6\xdb\x66\xba\xec\x2d\xf3\x1d\x71\xac\x12\x72\x85\x82\xbf\x06\x34\x69\x02\xc7\x37\x8a\xaf\x38\x97\xb4\x82\xa7\xa4\x99\xf8\x3f\x4a\xc4\xff\x6c\x31\x2a\xe8\xa2\x5a\x71\xb6\x2e\x46\xc5\x44\xda\x6a\x45\xc5\x8a\xb3\x7d\x31\x2a\xe6\x32\x0e\xd4\x81\xaf\x38\x5b\xe7\x3b\x51\x1c\x1e\xc0\xbf\x17\x53\xf5\xc9\x70\x23\x6d\xb5\xa3\x98\x67\x2b\xce\x70\x3b\x0e\x0a\xd1\x96\x45\x09\xbe\xe1\xb0\x9f\x64\x56\x65\xae\x85\xfd\x74\x25\xc3\x2e\xd9\x4f\x7f\x94\xa9\xda\xec\x17\x3f\xc6\x74\x4f\x7a\xde\xa8\xee\xdb\x6f\x7e\x9c\x19\xa3\xec\xfd\x28\xad\x7c\x23\xfa\x25\xa6\xa8\xa7\x5f\x72\xc0\xf6\x8b\xcf\x38\x36\xd5\x35\x23\x13\x24\xdd\x6d\xf3\x86\xfb\x3f\x1d\x7f\x9f\xfa\x55\x0a\xfa\x0e\x2c\x18\xf0\x2a\x72\x6b\xcd\xec\x09\x36\x6b\x90\xd8\xc3\x92\xc4\x5e\x25\xdd\x70\x34\x8d\xd5\xa4\x55\x9a\x6e\x06\xd0\xd6\x4f\x6e\x2a\xa7\xa0\xe9\x89\xb1\x98\x4e\xc3\xdc\x8a\x95\x79\xf1\x26\xff\xaf\x9c\xf2\xd3\xb5\xc4\xc9\x18\xc9\x3d\x41\xc3\x07\x02\xb9\x8d\xe2\x80\x1f\x11\x55\xb0\xb3\x7d\x42\x18\x36\x66\xac\xc9\x47\x49\x80\xe4\xa1\x91\xff\x73\x57\x5d\x63\xba\x1b\x28\x84\x4b\x3c\x03\x5d\x73\x91\x2e\x62\x58\x1d\x59\xc7\x30\xe4\x4f\x2c\x70\x90\x69\xa9\xc5\x0c\x17\xd9\x08\xa0\x59\x5b\x00\xcd\xc7\x86\xd8\x8e\x5e\x58\x0a\x64\x42\xc6\x17\x17\x33\xbe\x08\x04\x69\xa6\x13\x73\xf7\xbe\x21\xff\x64\xe9\x99\x71\x30\x68\xeb\xc4\x29\x44\xa7\x1a\x18\x1e\x18\xba\x4a\xdf\x71\xad\x52\x32\x8a\xd8\xa9\xcf\x6a\xec\x2d\x35\x76\x65\x43\xbf\x96\x77\x71\xee\xbe\xa4\xe6\x7f\xd8\x99\xa8\x78\x43\x91\xa2\xda\x8c\xa6\x9d\xc4\x50\x4b\x69\x82\x34\x02\x0e\x68\x94\x84\x76\x2f\x41\xe7\xae\xbd\xf3\x41\xe4\x84\xcb\x2e\x48\xba\xbd\x70\x52\x70\xdb\x93\x33\x4f\x69\x34\x3b\x72\xaf\x2d\x18\x7c\x84\x86\xd2\xbb\x39\x0c\x79\x68\xea\xea\x0f\xb0\xfd\xec\x31\xe7\x02\x08\x66\x62\x72\xb3\x17\x6c\x63\x87\xcd\x9d\x12\x52\xc3\x64\x22\x96\xc1\xad\xb8\xa4\x27\x49\xa4\x4e\x16\x6f\xc7\xa8\xdf\x09\xd3\x91\xcb\xfd\x18\xf3\x9f\xe7\x0c\x2e\x53\x22\x85\xb6\x23\x18\x38\x9d\x85\x9e\xea\x83\x8e\x2d\x06\x35\x5e\x43\x5c\xcf\x68\xc8\x00\x39\x49\x94\x55\xae\x55\x68\xd2\x00\x71\x06\x2e\xcf\xc2\x26\xa2\xaf\xde\x80\x54\xda\x88\x98\xbd\x68\x11\xb3\x1f\x33\x71\xfa\xde\xe3\x9c\x2f\xa8\xd2\x5d\x25\x50\x25\xe5\x7f\x74\xe3\x45\xd2\x3b\xd6\xd9\xbf\x3b\x6c\x98\x4e\x5b\xee\x7e\xdb\xf1\x27\xe9\xf0\x96\xb2\x13\xca\x22\x4a\x4b\x10\x00\xb4\x99\xe5\xcf\x0e\xc7\x52\x7b\xe4\xac\x3d\x64\x63\x30\xed\xa1\x0e\xad\x29\x64\x43\xdc\x93\xeb\x70\x0d\x3c\xeb\xdc\xeb\xac\x1e\xa5\x3c\xef\x9e\x1a\xed\xcd\x96\xae\x73\x63\x55\xf6\xbe\x14\xbf\x3c\x98\x38\x32\xf6\x1c\x66\xa5\x09\xb5\x11\x34\x79\x3b\x4e\xbb\x80\x5d\xfb\x17\x5b\xfd\x8f\x39\x96\xd1\x1f\x24\x39\xcc\xf4\x67\xc8\x85\xfa\x13\x34\x7f\xb4\x33\xae\x54\x9c\xa2\xee\xb1\xa5\x3d\x63\xba\x8c\x38\x96\x52\x15\x1f\xf3\x20\x07\xaf\x11\x62\x26\x5b\x72\xdf\x29\x89\xc4\xa8\x9b\x27\xc1\xbc\xb8\x02\x43\xde\x88\x03\x31\x94\x25\x79\x1c\xf1\xe3\x69\x89\xde\x41\x00\xf5\xb3\xbc\x8c\x8b\xf8\xde\x0d\xa4\xd6\x0d\xf2\x7c\xd1\xc8\xb3\x9d\x0a\xf7\x3c\x89\xf3\x8f\xf7\x23\xce\x75\x76\x86\xa0\x4b\xda\xec\x9a\x35\x82\xe2\xaa\x33\xa4\x41\x4b\xa2\x05\x19\x8f\x50\x0a\xb7\x30\x41\x9d\x20\xe4\x54\x1f\x5c\x56\x28\xcc\x92\xa7\xb0\xbd\xeb\x6e\x1b\xc1\x4a\x76\x1f\xd3\xb1\xbb\x71\x57\x2b\xec\x72\x0b\xe0\xca\x68\xf5\xac\xf3\xf8\xd5\xa9\xe6\x5e\xf7\x9a\x51\x09\xe1\xaa\x3e\xad\xc2\x6f\xf5\x2c\xd8\x57\xf6\x37\x43\xec\xda\xfe\x82\xf6\x44\x96\xe6\x39\x91\x86\x52\x80\xbb\xfb\xce\x21\x7f\x7e\xc0\x7b\xad\x6b\xe1\x09\x9a\xa2\xed\xb4\x4f\x31\xc7\xc4\xe7\x24\x8b\x75\x89\x20\x52\x0a\x01\x43\x23\x0a\xa7\x8f\xb2\x43\x58\xc4\xec\x1d\x35\x48\xe4\x09\xc3\x7f\xba\xdf\x86\xa3\xa9\xd0\x5a\xd1\x12\x76\xa1\x2f\x72\x63\xe3\xfb\xe6\xce\x8f\x29\xca\x24\xf4\x6f\x37\x33\x46\xf4\xed\xc6\xf9\x05\x57\xec\xb5\x28\xf8\x4e\xff\x27\xc7\xa7\x27\x6d\x23\x87\x6e\xda\xfc\xee\xa3\x5b\x56\x51\x45\xec\xe9\x55\x45\x3c\x7f\xcb\x0f\x8f\x2a\x82\x61\xd7\xa7\x20\x0d\x89\x8b\x2f\xc7\xb1\xc6\x93\x3d\x49\xae\xbe\xbb\x89\xdd\xc6\x8c\x2f\xdc\x9b\xfc\xdd\xfa\x57\x55\x2a\x2f\xa9\x7c\x48\x3c\xa0\xdc\x51\x9a\x98\x8b\xf3\xe5\x9a\xa1\x83\xff\x5c\xed\xfc\x45\x4e\xff\xf9\x35\xa5\xae\x8d\x24\x0c\xa2\x68\x6a\x94\x27\x8d\x94\x62\x87\x5a\x0a\x14\x11\x69\xad\xde\x95\xe5\x04\x49\x55\x7a\x09\x0f\xdc\x3c\xc1\x57\x00\x9d\x2a\xc9\xd6\x14\x20\x44\x7f\x88\xd1\xbf\x41\xec\x81\x66\x9a\x17\x3a\xc5\x1d\x7e\x9f\x4b\xbb\xab\x62\x7d\x94\x97\x9f\x2a\x40\x69\x18\xa0\x25\xf0\x7f\x19\xf1\x9e\xd2\xa1\x40\x2a\x63\xbe\xcb\x8a\x83\xc5\x00\x96\x9f\xaa\xa9\xb3\x4f\x3a\xac\x62\x45\xdd\xb7\xad\x07\xec\xbb\xae\xa8\xd2\x63\x3b\x41\x52\x44\x45\xd7\x8f\x7b\xeb\x94\x93\x6d\x69\x75\x64\x0a\x19\x2c\x57\xda\x11\xe4\x67\x1f\x80\x4b\x4c\xcc\x97\x82\x84\x10\xcc\x76\x02\x74\xc1\x5d\xd4\xd8\x2e\xf6\xba\x4d\x16\xb0\xbf\xca\xf2\x2a\x9d\xc5\x35\x2e\xe6\xbf\x0c\xf9\x63\x93\x95\x78\x5c\x1a\x2a\x12\xb1\x53\xe4\xb7\x83\x91\x2f\xdf\x38\xc4\x1a\xec\x12\x00\x63\x75\x9f\xe0\x1f\xd3\x38\x9b\x98\xa5\x49\xec\x27\xb2\x15\xea\x0a\xcb\x5e\x43\x4d\x1e\xc4\x45\x13\xf3\x68\x1b\xdf\x59\x21\x3d\xb9\x46\xa5\x6c\xfa\x4f\x3c\x46\x20\x94\x55\xbd\x1f\xdc\x5a\x2f\x16\x99\xdd\xbe\xd5\xe8\x53\xd5\xad\xde\xf6\x1b\x7d\x70\x26\x7b\xdb\x03\x19\x43\x12\x20\xf1\xd6\x3f\x02\x0d\x74\xfd\x7d\x9e\x3f\x97\x75\xb8\x3f\xe2\xf9\x80\x47\xe9\x83\x3b\xab\x4f\xa0\x94\x76\xe2\xd9\x29\xc2\x13\x3d\xe4\xdf\x20\xf1\x44\xd7\xd6\xe6\x3e\xdd\x9e\xa5\x38\x1f\xaa\x04\x8d\x3d\x9a\x06\xe1\x7e\x42\x34\x9a\x4c\x16\x33\x9e\xe7\xee\x6b\x86\xfc\x97\x38\x15\x2f\xca\xa6\x4b\xd3\x64\x19\xa7\x41\x38\xaa\xa0\x91\x22\xfa\x00\x98\xd4\x7d\x82\x68\x2f\x2c\x00\x85\x33\x82\x13\xa5\x91\x39\x6a\x98\x79\x97\x72\xf2\x24\x0d\x12\xbb\x12\x5b\x5c\x39\xeb\xb0\xa7\xb1\xe1\x66\x9a\x17\x70\xbb\xa6\xfe\xfc\x11\xfa\x5b\x3a\x29\x42\x2c\x48\xff\x3e\x19\x0e\xd1\x07\xa6\x66\x3d\x34\x62\xed\xd4\xde\xcc\xe3\xb7\xcf\xda\x9f\xe7\xbb\xcc\xc9\x7c\x1a\xab\x45\x6d\xb7\xe3\x37\x27\xa7\xd7\xdf\xe0\xe4\x74\x6f\x7b\x87\x27\x0e\x8a\xad\x70\xbc\xcd\x93\xd9\x22\x68\x9c\x1e\xd4\xf8\xef\x3a\xec\xc7\xab\xc0\xe4\xbb\x79\xa3\x88\xdd\xfb\x1d\xff\x51\xf8\xa7\x12\xd9\x02\xef\xb4\xa0\xdd\x25\x6a\x8b\xae\x82\x83\xd2\x35\xce\xb3\x3a\xb1\x2f\x3f\xeb\xff\xf8\x94\x72\xb8\x6e\x67\x69\x9b\x67\x45\x97\x7c\xbc\xed\x04\x59\x94\xb2\x71\x87\xff\x13\x27\x25\x7d\x1b\xf8\xc5\xef\x0e\x57\x59\xd1\xeb\x5a\x50\x25\x2b\xfa\xaf\x0e\xfb\xb7\x94\x1f\xae\xc5\x94\xae\xbf\xe9\x6b\x43\xff\xcc\x16\xf6\x02\x87\x5d\x09\x2e\x6f\x70\x51\xf2\x50\x26\x72\x73\x73\x69\xed\x79\xb2\x0d\x9f\xa0\xad\xc7\xe0\xf6\x81\x36\x49\x54\x2a\x4b\x49\x8f\x9e\x11\xbd\x10\x5c\x4e\xc1\x5b\xed\x98\xc0\xa9\x4c\x3b\x33\x2f\x59\x86\x7e\xbe\x12\xe7\x27\x92\xb1\xe3\x73\xc7\x7b\x5e\x0a\xae\x2e\x56\xb0\xd6\xbd\x11\xe3\xad\x6a\xc9\xc2\x98\x1c\xab\x03\x8f\x63\x97\x02\x6a\xc3\x4c\xaf\xd1\xcb\x9e\x06\xc4\x76\x50\xf6\x72\x15\x40\x29\xf3\xca\xf5\x0c\xed\x4f\x1d\xc3\x94\xf6\x59\x85\x4e\xf1\x7e\x47\x36\x25\x2f\xc9\x72\x8f\xb1\xc3\x66\xcb\x32\xd5\xde\x05\xc1\xd4\x30\xc2\xd0\xf5\xe3\xb1\x87\x2f\x37\x83\x62\x34\xca\x47\x83\xd1\xca\x02\xd6\xd0\xee\x75\xd8\x15\x0a\xf6\x42\xcd\x5c\x5b\x0e\xf1\x89\xf6\xcc\x69\x80\x0c\x35\x7b\x55\x48\x19\x65\x90\x8c\x35\x4c\xf1\xf7\x1c\x0b\x01\xe6\x6f\x1c\x7f\x6a\xfd\x08\x30\x46\xed\x03\x31\x60\xae\x67\x7b\x57\x97\xb5\x8d\xd3\x7c\x71\x91\x5f\x3e\xb1\x6d\x0d\xf9\x8d\xc0\x3c\xfc\x8a\x6d\xfe\xd5\xd6\x13\xc5\x09\x97\x35\x00\x25\xb8\x32\xc5\x8a\xaf\x38\xc3\xf2\x3c\x5b\xd4\xe4\x23\x8c\xbd\xb4\xc6\x2e\x2f\x2d\x9c\xfb\xff\xd4\x5e\xff\xbf\x80\x09\xd2\x8a\x92\x12\x20\xb3\x44\xba\x10\x2b\x8c\x36\xaf\xc0\x4b\xf8\x72\xdc\x95\x11\x52\x36\x8c\xad\x09\xdb\x02\xfb\x46\x9a\x60\xc8\xdc\x15\x15\xb9\xe1\xa2\xdc\xc8\x82\xbc\x09\xb1\x3b\x10\xd6\x53\xd0\x05\x60\x04\x88\xa9\xdd\x60\x67\xda\xde\xed\xed\x14\x8d\xa9\x04\x60\x15\x1f\x08\xae\x3e\x4f\x05\x3f\x95\x13\xb7\x0f\x1d\xda\x65\x6f\xcb\x8f\x39\xec\xca\x8c\x30\xb1\x8e\x44\x79\x91\x66\xdd\xa3\x51\x2b\x2a\xdc\x37\xaa\x99\x79\x49\x09\xa3\x26\x8d\x43\xaf\x89\x45\x11\x29\x01\xe0\xd8\x05\x73\x00\x28\x0a\xe2\x0c\xce\x07\x8d\xd3\xa6\x83\x0e\x21\xf8\x95\x41\x53\xe6\x79\xb1\xcc\x79\xa2\x22\xd6\xbc\xa7\xf2\x2c\x55\xe1\x00\x86\xf3\xa2\x39\xf4\x3d\xbb\xed\x11\x7c\xc2\x14\xc4\xde\x77\x21\x04\xb1\xbf\x77\xc6\xbd\x01\x0e\x55\x3d\xe1\x5a\x26\x6e\x1b\xa5\x6f\x44\xaf\xa5\x28\xa1\xc8\x5c\xb5\xac\x48\xa1\x30\xc4\xb7\x94\x53\xcc\xbc\x8a\x76\x90\x38\xb7\x7e\x3a\x7a\x4e\x4e\x3a\xec\x9e\x21\xa6\x8e\x8d\xfb\xaf\xb5\x35\xc0\x27\x4e\xa7\xe1\x1c\x7d\x00\x3a\xba\x4f\xd6\xc6\x13\xcb\x51\xd3\x36\x68\xc2\xe0\x54\x64\xac\x91\xb2\xae\x04\x0b\x07\xaf\xc9\x5c\xcc\xcf\x04\x10\x83\x92\x26\x62\xea\xda\x5d\xa5\xce\x16\x95\x09\x51\x66\x49\x2c\x4e\x92\x86\xdc\x4e\x41\x07\xc2\x9c\x9e\x48\x28\xa0\xc4\xe2\x9d\x98\xa3\xd6\xf8\x16\xd3\x87\xdb\xa5\x4c\x77\xe4\x0b\x85\x0f\x55\x79\x55\x3d\xbc\x9d\x86\xa3\xb2\xb3\xec\x95\x0e\xbb\x0c\x15\xc2\xb3\x92\x8a\xde\x3b\xc0\x6a\xd6\x87\x92\x9e\xb0\x6a\xf0\x0f\x8c\x27\x1a\x60\x1c\x9f\xe1\xb1\x05\x20\x70\xf4\xaa\x16\xcc\x51\x09\x8d\x1b\x1c\xa2\x25\x36\x78\x9d\xbd\xd9\xa9\x14\x65\xa7\xd3\xf0\xc0\xd4\x2c\x5a\x6b\x8e\x83\x27\xb3\xfb\xf3\xfe\x0d\xbd\x4f\x15\xd3\x2b\xd8\x7a\xca\x25\x92\x91\xb7\x3e\xdd\x6d\xed\x34\xb4\xa5\x89\xbd\xec\xa1\xc4\xe7\x3e\xc4\xdf\x5a\x99\x38\xfd\x4a\xc9\xd7\x5a\xbe\x48\xbf\x64\x8b\x54\x39\xa6\x4b\xd4\xc6\x7a\xc8\xf1\x78\x10\x44\xe3\xbf\xad\xf9\x07\x8c\xdf\x5e\x23\x68\x17\x9d\x0c\x8c\x75\x24\xf1\xf2\x04\xbc\x0d\x81\xb4\x12\x0a\xb9\x4a\x8a\xab\xac\x79\x3d\x40\xa6\xef\x70\xb4\x5c\xfc\xab\x8e\xff\x32\x07\x51\xff\x29\x25\x83\x64\x45\xfb\xb6\x80\xf9\x78\x85\xe4\x71\x80\xe3\x5f\xaa\x25\x24\xaa\x64\xcc\x20\x17\xfd\x38\x5d\x5c\xe4\xe1\x88\x97\xa7\x82\xd0\xd3\x05\x64\xa6\x94\xaa\xcc\xe5\x6f\xcd\xe4\x3c\xdb\x54\x44\x2d\xee\x3e\xe1\xdc\xe3\xdc\x1e\x36\x27\x11\x4d\x71\x5c\xcb\x41\x6e\x8e\xad\xce\xde\x6d\xe7\x47\xb1\x3c\x73\x67\xe8\xd2\xc0\x3d\xe3\x3e\xdb\xf1\xb7\x69\x3b\x9e\x3d\xbd\xa7\x59\x24\x98\x55\xbc\xb2\xdc\x3b\x24\xfb\x7d\x04\x83\xd2\xf0\x31\x6c\x70\xaa\x12\x0c\x2e\x93\x0b\x12\xcc\x65\xf7\x88\xf9\x86\x18\x2f\x60\x6a\xab\x80\x21\xbf\xc4\xd8\xbe\x55\x54\xb0\x47\xd2\x2c\x7a\xaa\x98\xe8\x78\x3a\x0d\xc7\xa9\x00\xcf\x80\x9f\x79\x0d\xf3\xef\x1c\xf0\xbe\x44\x24\xa5\x45\x63\xa1\x93\x34\x50\x11\x17\x15\xca\x47\xa6\x4f\x35\xf5\x15\xe7\x32\xf8\x0b\x3d\x96\x66\xf8\xc2\x8a\xb3\xad\x15\x9c\x99\xa9\x12\xa9\x5e\xb4\x95\x3d\xbb\xc6\x4a\xe5\xdd\x7f\x74\xd8\x91\x75\xb8\x48\x0d\xb4\x32\xf8\x6f\x74\xec\xda\x95\x98\x6d\x69\x70\xb5\xa5\x8d\x54\xd1\x2a\xfa\x50\xea\x03\xe9\xd2\x30\xf9\x2e\xa5\x62\x54\x1c\x96\x42\x0a\x1a\x11\x4c\xce\x32\x8f\x63\x0f\xcd\x94\xe8\x66\x1d\xab\x04\xa3\x86\x58\x47\xde\xc3\xec\x2d\x0e\x33\xe7\xc9\x7d\x95\xe2\x77\xee\x76\x8c\xe7\x0a\xa3\xa6\xdd\xe6\x99\x17\x0b\xd6\x48\x83\x8b\xf6\x88\x3d\x90\x03\x5f\x41\xc8\x05\x6a\x95\x20\x6c\x01\xd5\xe7\x9d\x76\x9d\xb2\xbb\x91\x05\x30\xe6\x39\x31\x16\xc0\x9c\x92\xfc\x64\xed\xc2\x0f\x6c\x12\xe4\x04\x46\xef\xbe\x75\x93\xff\xe7\x43\x72\x2a\x94\xcd\xa6\x87\x47\x36\x27\x8e\x92\x1a\x17\xa9\x4e\xc8\x61\xed\x37\x6b\x66\xbc\x9d\x85\x91\x98\xc4\x7e\x65\x28\x3e\x65\x0f\x4c\x3d\xee\x2e\x48\xd3\xdb\xaf\x5e\x3b\x1f\x48\xab\x13\x17\x51\x3b\x56\x71\xdb\x40\xde\x14\x43\xd8\xa3\x8f\x55\x21\x34\x24\xf2\xe0\x53\xe2\xbe\x54\xc2\x2b\x4b\x0f\x50\xf7\xbc\x83\xd9\x62\x3a\xa2\xba\x0a\x5b\x0b\x98\xae\x90\x0b\x16\x23\xe7\xd2\x1d\x5b\x30\x14\xaa\x93\x51\x82\x2f\x29\x70\x67\x29\x6a\x70\x30\xdd\x05\x75\x4f\x39\x02\x44\x49\x18\x2d\x45\x61\x27\x90\x13\xe1\xc9\xfd\xdc\x6d\xf7\xf1\x0c\x20\xb5\x66\x33\x5d\x46\xfb\x4a\x41\xda\x43\xfa\x9e\xd2\x68\x41\x06\x7b\x4b\x94\xbb\x91\xdd\xd0\x9f\x26\x57\x1e\x4f\xb2\xfc\xb4\x79\x83\xbd\x46\x6c\x72\xbd\xab\xdc\x17\xaa\x4d\xbe\x6c\x3c\x96\x7b\x3c\x4e\x97\x2f\xcc\x1e\x0f\xd3\xe5\x04\x76\x79\x68\xf2\xed\x74\xc3\x1b\xfb\xfa\xb3\xdb\x2a\x33\xd4\x4f\xa5\x21\x9f\x85\x38\x14\xf0\x06\x7f\xc3\x36\x7f\xc2\x7e\x24\xbd\xfe\x11\x64\x22\xcc\xc7\x3a\x9d\x08\x71\x80\x31\x3e\x2b\xee\xda\x66\x4a\xc1\xdc\xd5\x57\x9c\xad\x74\x85\x4d\x1e\x58\x71\x18\x06\xba\x9c\x38\x21\x7e\x6c\x9e\x4f\xd3\x42\xfc\x71\x29\x6a\xe4\x94\x7b\xf7\x96\x34\x9f\x6c\x05\x8b\x7c\xc5\xf9\x51\x25\xb4\xcd\x74\x12\x71\x55\xaa\x32\x97\x51\xc2\x2d\xf5\xe0\x41\xe2\xc1\x74\x96\x9e\xe9\xaa\x47\x97\xab\x1c\xed\x38\x88\x15\x67\xbb\x99\x1e\xd4\x22\xd2\x1f\xd8\xca\x12\x26\x1b\x76\x1b\xfe\xc9\xe3\xb3\x1e\xfc\x2d\x56\xc0\xca\xfe\x0e\x3c\x2b\x38\x1f\x8c\xf1\xa2\x31\x96\xe6\xa3\xd2\x41\x65\x27\xaf\x2f\x0a\xa9\x69\x3e\x0a\x12\xef\xf0\xd4\x89\xb1\xa3\x51\xd2\x39\xe3\x5d\xe7\xed\x5c\x6e\x72\xfe\xd4\xee\xae\x5d\xd6\xed\xff\xd2\x1a\x33\xe6\xc3\xbd\xbb\xe6\xff\xb3\x33\xab\x7e\x57\xb6\x8b\xfa\x7b\x0a\x87\xa3\x79\x55\x7e\xba\x24\xa6\x1f\x93\xd3\x8d\x58\x78\x64\x2b\xee\x89\x5d\x97\x26\xa4\x22\xf5\x66\x78\xe8\x1d\x09\x0a\xc8\x6b\x9f\x2b\x5e\x3b\x00\x0c\xaf\x7a\xc6\xc3\x66\x50\xd4\x1b\x69\x4b\xf0\xdb\x9d\x96\xf4\x67\x19\xe3\xc9\xe8\x89\xd9\xb1\x19\x1e\xde\x79\x24\x28\xee\x9c\xed\xcc\x8b\x4b\x15\x58\xcb\x3b\x11\x80\x41\x14\x1d\xdb\x33\xd6\x2c\x5a\xf1\xd8\xcc\x91\xd9\x63\x63\x8b\x98\x74\x7e\x14\x07\x3d\x2a\xb6\x4f\x5d\xbc\x35\x27\xe5\x39\x0e\xeb\xb7\xe8\x6e\xec\xdf\x39\x51\x7a\xe5\x49\x8f\x9c\xca\x55\x2a\x9a\x19\x18\xd5\x33\x2a\x9c\xf1\x56\x5a\x40\xdc\x31\xad\x55\x98\x36\x4e\xf3\x6c\xdf\xd8\xd8\x9e\xfa\xb5\xf5\xdd\xf6\xf2\x1c\x61\x3d\x5b\xca\xbd\xc6\xdf\x71\x9b\x7c\x36\xb0\x69\xab\xa6\x84\xd9\x3b\xdc\xbd\xc3\x9f\xbe\x0d\x95\xd0\x03\xbb\x0f\x9b\x6c\x47\x07\x34\xf9\xa3\xd9\x0e\xea\xf3\xd5\xf5\x3d\x7b\xeb\xbb\x47\x77\xd7\xe7\xdb\x69\xfd\x9a\xd1\xa0\x15\xee\xbd\xc6\xee\xf9\x01\x56\x3a\x1d\xee\x55\xfe\x23\x64\x78\xf7\x9a\x7b\xfd\xe7\x0e\xd3\x47\xd7\xfd\x23\xc7\xff\x94\xa3\xb7\xd6\xb9\x6e\x4e\x15\xbf\x83\xc0\xaf\x76\x2c\xaa\xb1\x59\x8f\xf2\x20\x4b\x90\x9a\xc3\x2c\xb4\x82\x64\xe7\xb5\xbb\x64\xad\xa3\x51\xa8\x3c\x04\x5a\x41\x72\x5d\x3d\xcd\x16\xc7\x62\x71\xd8\xc4\xcf\xd1\x76\xb0\xc8\x73\xf1\xd7\xb5\x63\xfa\x83\xfa\xb5\x3d\x7b\x6d\x92\x95\x29\x84\xbb\xd7\xdf\x25\xee\xd2\xe3\xf2\xb1\x87\xcf\x2b\xc7\x6b\x56\xb5\x9f\x59\xa4\x45\x4c\xb8\xa8\x67\xdc\x78\xb6\x6a\x1d\xd7\x30\xa2\x88\xee\x23\xfd\x9f\xde\x9f\xa6\x85\xd7\x6f\xa2\x2d\xcf\xab\x61\x2b\x29\xae\x32\x80\xa0\x31\x09\xf2\x97\xdf\x3b\xec\x3f\xc2\xf8\x5d\xe1\x5e\x4e\xd0\xa2\x95\x79\xcb\xbf\xbb\x79\xc3\xbb\x6b\xed\xde\x5d\x1f\x31\x9d\x6f\xdf\x75\x9e\x49\xb2\xef\xba\x08\x49\xb2\x07\x0f\x65\xc3\xf1\x71\x9d\x8e\x8f\x73\x32\x45\xfd\x6d\xfe\x83\x8e\x96\xce\xd3\xda\x33\xa8\x96\x4e\xed\x59\x67\x76\x75\x5f\xb6\xdd\x6e\x5d\xe5\x29\xf2\x7d\xe5\xd4\x6b\x1c\xf4\x72\x52\xa2\x17\x0e\x5b\xfe\xbc\x32\x6d\xab\x11\xed\x01\xe4\xe2\xaf\xb6\xf8\x63\xa5\x67\x12\x2e\x0e\x04\x3f\x5a\x53\x33\xde\xa4\x92\x70\xdc\xbf\x41\x38\xce\xd9\x2d\xf4\xbc\xc8\xc6\xc0\x34\xc8\x1b\x07\x7c\x7d\x07\x7c\x51\x1e\xf0\x27\xfb\x0f\x9b\x14\x7f\xd8\x31\x08\xe6\x29\x30\xcf\xfb\x6e\x56\x67\x23\xab\x66\x4c\x36\xbe\x3e\xeb\x24\xab\x9f\xf9\xdb\xdc\xc9\x75\x64\x4d\x2e\x1d\xe2\x32\x39\xb8\xaf\xc6\x8e\x50\x9f\x30\x19\x22\x85\xb5\xa5\x99\xde\x5b\x41\x3b\xaa\x8c\x7f\x20\x2a\xa3\xfd\x5c\x3f\xed\xf8\x37\x96\x1f\x2a\x46\x43\xe7\xcc\x2e\x52\x49\xa0\xea\x31\x5f\x0c\x1a\x5d\xea\xb3\x45\x38\x9e\xc6\x26\x4c\xb4\xb6\xbd\xfe\xae\x29\x13\x65\x4d\x7a\x0c\x52\x96\xed\x05\xd3\x79\xc6\xe6\xa7\x50\x8f\x3d\xe2\x3f\xac\x9f\xb3\x61\xc5\x57\x6f\x1e\x62\xeb\x55\xf6\xbb\xff\x54\xf3\x1f\xd7\xe7\x9d\xa2\x77\x1d\xb1\x87\x49\xcd\x66\x66\xc9\x2d\x1b\x09\xd0\x9b\x49\x67\xf0\xb1\x66\xe6\x05\x35\xf6\x0a\x87\x5d\x9a\x99\x89\x78\xdd\x7b\x07\x26\x86\x5c\x3d\x81\xaf\x7f\x70\xc6\x4a\xc5\x4b\x71\x70\xe8\x20\x93\xd7\xbd\x69\x3c\xeb\x0a\xea\x04\x74\x28\x37\x79\xbe\x55\x9b\x5f\x67\x29\x39\x69\x2d\xfa\x4f\x90\x4e\x5a\x46\x66\x25\x99\x30\x77\x02\xa1\x44\x4a\x5f\x83\xeb\xd7\xf1\x04\x30\xdb\xb8\xaf\xd3\xd0\x46\xb9\x67\x15\xb4\x91\xad\xb7\xb2\x9f\xae\xf2\xe2\x8a\x5a\x51\x31\x13\x24\x8b\xdc\xfd\xc5\xad\xfe\x71\xfd\x53\xf4\xc3\x40\x77\xeb\x80\xd7\x1c\x28\x5e\x50\x79\x04\x1a\xa2\xd3\xe4\x20\xad\x01\xa0\x12\x2f\xf0\xd4\x06\xb4\xd7\xe3\xcb\x1b\x91\x22\x1b\x91\x22\x17\x8d\x25\xf8\xb8\x29\x4b\xbc\xf7\xbc\x03\xf9\xb2\x01\x6c\xc1\xc5\x82\x10\xfb\x0d\x87\xa2\x50\xde\xe3\xac\x21\x21\xbe\x3e\xaa\x60\xdd\xfe\x79\xb2\xd6\xe8\x13\x44\x87\x95\x60\x8a\x2f\x38\xbe\x92\xe8\x29\xa0\xdc\xa0\xd3\xdc\x59\x67\x66\xf5\x2b\x79\xcc\x1d\xad\x62\xc3\xf5\x50\xca\xd7\xee\xd7\xae\xb5\xa2\xd4\x95\x4d\x97\x92\xf1\x24\x05\x9a\x46\xc1\x92\xf5\xfe\x6b\xfd\xf1\xaa\x17\x03\x1c\x74\xda\xaa\x38\x19\x4c\x6d\x8a\xf5\xf5\x6b\xd8\x6b\x1c\xb6\x35\x78\x6a\x27\xe3\x07\xa2\xfc\xb4\xfb\x62\x67\x40\x8c\x8e\xec\xdc\xb8\x2c\x4e\x5d\x80\x63\xe8\xcf\xa9\xc7\xa6\xf3\x61\x90\x78\xf0\xdc\x3b\x10\x14\x81\x07\x6f\x5b\x98\xb0\x0e\x75\x3f\xcd\x34\xc7\x68\xe9\xf9\x08\x90\x61\x3a\x1a\x2d\xb5\x9d\x86\x75\xf6\x4d\x87\x6d\x6e\x44\x49\xc8\x33\xf7\xcb\x83\xcc\xf0\xca\xaf\x1b\xca\xf6\xcc\x12\x76\x71\xc5\xc1\xd7\x56\x07\x3d\xac\x5e\x1a\x94\x03\xb0\xfb\x2a\xa4\x9a\x4e\x42\xa0\xd4\xa4\x43\xcb\xb1\xc7\x52\xa1\x55\xb1\xe3\x48\xff\x9b\xcb\x6d\x77\xe4\xe0\xf8\x81\x31\x72\xb2\xce\xc7\x5a\xdd\xfc\xae\x78\x14\x9b\x1c\x6d\x87\x63\x33\x07\xc7\x0f\x1c\x3b\x58\x6f\x85\xec\x6b\x0e\x1b\xca\xe6\x43\xf7\x8b\xce\x80\xec\xd2\x72\x98\x33\xfb\x0f\xf4\x1d\xe3\xcc\xfe\x03\xf6\x00\x67\x82\x30\xcd\xbd\xfd\x71\xda\x38\xed\x1d\xe0\xe0\x55\xdc\xbb\x06\x84\xf7\x13\x80\xe5\x5d\xcc\xfd\x8e\xdc\x8b\xa3\x05\x8e\x60\x96\xeb\x1e\x27\xce\x66\x3e\x96\xcd\x9b\x63\xfc\xb0\xc3\xb6\xa1\x26\xf9\x58\x1a\xf2\xdc\xbd\xdf\xf1\x7f\xc1\x19\xd7\x0f\xb4\x31\x2d\x00\x38\x99\x2e\x5d\x95\xb8\x34\x84\x3b\x46\x8b\xb2\x6e\x97\x10\x72\x42\x18\xd3\x67\x62\x94\x7a\xf9\x70\xec\xd3\x68\x4b\xf4\xa1\x3f\x6c\x3b\x7b\xb9\xc3\x86\x1a\x79\x24\x4e\xc9\xea\x4b\x34\x31\x3b\xd9\x67\x89\xa6\x27\x66\x27\xcd\x15\xa2\x8e\x11\x56\x4e\xee\x35\x83\x24\x8c\x29\x12\x36\xd1\xf9\x20\xc4\x57\x61\x16\x2d\xf1\xcc\xdb\xb9\x9f\x17\x81\xb7\xc0\x83\xa2\x93\xf1\x5d\x75\xf6\x0b\x0e\xdb\x72\x57\x27\x9d\xef\x16\xdc\xbd\xdb\x19\xe0\x76\x28\x3b\xf7\x58\x2c\x6c\x75\xeb\x36\x7a\x68\x6f\x1e\xf9\x70\x7d\x3b\x86\xbd\xd1\x61\x5b\xc0\x10\x35\x79\xdc\x5d\x71\x06\x44\x56\x2b\x65\x07\x16\xee\x33\x65\x8f\xa3\xd7\x76\xdf\xe4\xc3\x1e\x2a\xd7\xf7\x14\x1b\xc9\x8f\x21\xcd\x1b\xd8\xa0\x91\xfe\x1d\x8a\x62\xee\xbe\xda\xe9\xef\xbb\x66\xd3\x3f\x51\xbc\x4f\x67\x6f\x57\x05\x2a\x29\x21\xbc\x20\xb9\x67\x7d\xc4\xf0\x3b\x0e\x1b\x6e\x04\xed\xa0\x11\x15\x5d\xf7\xeb\x8e\x7f\x9f\x33\x4e\xee\x0b\x6d\xd3\xa5\xb9\x67\x3a\x76\xe4\xa5\x18\x78\x59\xc9\x85\x3c\x43\xb2\xce\xb7\x3a\xb7\xb0\x9b\xce\x2b\x42\xc8\x84\x2d\x7b\xab\xc3\x6a\x0b\x0d\xf7\xd7\xd6\xc2\x30\x1c\x9a\xb0\x96\xa1\x7d\x68\xc2\xde\x2e\x87\xa2\xf9\x8c\x7b\x13\xcd\x20\x49\x78\x5c\xca\xc1\x22\xb8\x4e\xb9\x67\x00\x38\x9b\xe8\xfd\x8e\x12\xc1\x27\x23\x38\xf8\x4b\xa6\xb6\x9f\x44\x9d\x7d\xc0\x61\x6c\x21\xe6\x67\xb0\x1b\xee\x9b\x06\x28\x7c\x75\xa7\x63\x7e\xa6\xcf\x3e\x6a\x1e\x52\x75\xd9\x03\x01\x2f\xf6\xa8\x21\x37\x7b\xcf\x48\x00\x7a\x14\x85\x8b\x31\x35\xaa\x4e\x8e\x19\x08\x3d\x7e\x86\x37\x28\xcc\xa2\x1d\x77\x16\xa3\xa4\xce\xfe\xb9\x86\x21\x23\xd3\x41\xd1\x74\xff\x6f\x8d\x5d\xbb\x6a\xb7\x8f\x50\x69\xab\xc3\xef\xa8\xc9\xc7\x76\x7f\x11\xca\x3a\xcd\xba\xe6\x46\x17\xa2\xa4\xea\x26\x62\x5b\x03\x2b\x96\xb6\x39\xe0\xf2\x0a\xb1\x05\x51\x16\x55\xc6\xbf\x85\x0e\x66\x32\x11\x23\x89\xf9\x28\x98\xc5\xe8\x1b\x08\xf6\x87\xc5\xe1\xe8\x4a\x27\xe4\xd3\xff\x9f\x77\x3c\x19\x85\xe5\x93\x24\x56\x62\x72\x22\x9e\x1b\xc2\x7a\x06\x49\x57\x5c\x35\xf0\xf5\xed\x93\x47\x8f\x02\x98\xe9\xed\xc7\x67\x6e\x43\x61\x0f\xbc\x24\xb0\x2d\x32\x54\x9d\xf3\xa9\x91\x47\x45\x74\xa9\x1d\x14\x4d\xf6\x07\x0e\xbb\xb2\xdd\x4c\x8b\x34\xd1\x5b\x00\xf8\xb0\xf7\x3b\xfd\x33\x55\x69\x26\xb1\xe2\x4b\xfb\x04\x54\x95\xb0\x97\x06\x4b\xe8\xdc\xbc\x26\xf1\x08\x45\xe9\x75\xf1\x43\xec\x17\x6a\x6c\x2b\x8d\x36\xcd\xdd\x67\x0e\xf0\x04\xd6\x84\x1f\x8b\x1f\x9f\xed\x73\x0a\x3e\xec\xa8\x12\x25\xea\xaf\x1e\xd3\x39\xa8\x3a\xc8\x62\xb7\x0d\x38\xca\x72\x40\x0a\xba\xa9\x9d\x86\xe7\xce\xec\xa8\x91\x1b\x2c\xcf\xff\xa9\xb1\xe1\x46\x1c\x44\xad\x19\xbe\xe0\xfe\xce\x5a\xdc\x7a\xcb\xee\x5c\x2f\xab\x4d\xd0\xf7\x18\x2e\x9a\x15\xc8\xdb\xcf\x47\xa3\x78\xb0\x30\x5e\x54\xdc\x19\x62\xe3\x4b\xff\x9d\xf2\x74\xc2\x78\xcb\x0f\xa1\xe6\xba\x77\xd0\x06\x8f\xa7\x5c\x37\x08\xe2\x3a\x9f\x76\x92\xb0\xee\xc1\x18\xc8\x71\xd3\x54\xa0\x91\xce\xb1\x40\x68\x0d\xb8\xb8\x54\x0f\x4e\x62\x9b\x27\x27\x2e\xe4\x3d\x43\xe3\x64\xdf\x70\xd8\x76\x71\x2a\xc7\x17\x60\x36\xbb\xee\xff\x76\xd8\xd5\xab\x4e\x2e\x0d\xc0\xf8\xce\x7f\xb5\x63\xfe\x54\x12\x66\x23\x4d\xf2\x22\x0b\x74\x80\x1a\x3a\xe5\x2c\x8b\x3f\x65\x8a\xd8\x28\x2f\xf1\xa6\xc8\x48\x52\x3e\x23\xdb\xcb\x22\x59\x88\x21\xa9\x25\xc9\x6a\x98\x78\x17\x28\x95\x19\x33\x05\x4e\x62\xba\xde\x3a\xfb\xf0\x10\xfb\xe9\x76\x69\xd5\x66\x38\xac\xc6\x74\x1a\x47\x8d\xae\xbb\x32\xe4\xbf\x70\xe8\x76\x0c\xb8\x82\x8c\x54\x78\x81\xf5\x32\x45\xb0\x9c\xb4\x93\x09\x78\x1d\x42\x21\x70\x0f\x60\x9c\xa4\x74\x07\x0e\x32\xc0\x3a\x0e\xa2\xc4\xdb\x49\x1e\x44\xe8\x52\x15\x24\xe4\xd5\x47\x91\x17\xe5\x1d\x95\xef\x1a\xf1\x50\x71\x67\x7f\x18\x76\x93\xa0\x45\x21\x7d\xc6\xfd\x54\xf9\x3d\xe2\xb1\x34\xba\x8d\x18\x2a\x91\xd0\x30\xbb\xea\xea\xa9\x44\xc2\xd5\x84\x9c\x2c\xe2\x34\x54\xbc\xd8\x30\xc1\x8a\x74\x70\x8b\xf2\x9e\xc6\x2e\xe4\xbe\xcc\x70\x51\x24\xec\x2a\x89\x0c\x6f\x70\xd8\x65\xa2\x87\xcb\x69\x26\xd9\x82\x97\x3a\x6b\xb8\x5f\xa7\xad\x6f\x88\x14\x3e\xde\x7e\x6a\x93\x43\xd9\xca\x39\x09\xb2\xec\xef\x1c\xb6\x65\x01\x92\x2d\x64\xee\xd7\xd6\x22\x41\x1c\xc2\xc2\x56\xff\xde\xec\xd0\xd3\x12\xdf\x45\x0f\xcb\x1d\x5b\x8d\xcf\xea\x65\xb1\x28\x44\x27\x47\x6d\x2d\x9d\x2f\x4c\x87\x99\x4b\xde\x42\xb6\x26\xd5\xea\x32\x90\x16\xe1\x0c\x28\x13\x33\xfb\x63\x87\x5d\x12\xe5\x42\x98\xfb\xec\x20\x85\xb9\x1c\xed\xe4\x6c\x7f\x71\xee\xf9\x0e\xbc\x2d\xf1\xfa\xf8\x8c\x2e\xdc\x0b\xcd\x69\xf6\xb0\x4e\x94\xd7\xa0\xce\xbe\xed\xb0\xed\xb0\xd8\xe8\xf3\x9f\xbb\x5f\x71\xfc\x8f\x3b\xe3\xca\x42\x45\xf2\x06\xbe\x1c\xf1\xc0\x87\xe8\x89\x7e\x96\xfa\x23\x9e\x9f\xa7\x0b\x85\x7f\x07\xa6\x98\x21\x84\x7a\x1e\x7a\xa3\xf4\x0d\x66\x82\x88\x5a\xed\xb8\xeb\x2d\x04\x51\xec\x45\x0b\x10\x16\x02\xee\x9a\x50\xfc\x02\x9e\xa6\xb1\x87\x43\xa3\xa3\xd4\xd1\x01\x32\xf9\xfd\x0e\xbb\x74\x29\x6f\x37\x79\x46\xd2\xac\x10\x37\xfb\x66\x48\xd3\xf7\x00\x7d\x12\x65\x45\x27\x88\x7b\x38\xa7\xdb\x4f\x9a\x55\xda\xdb\x79\x69\x16\x5e\x9d\xdb\x39\x7b\x77\x8d\x5d\x19\x2c\xe7\x07\xe3\x20\x2f\xa2\x06\xe8\x64\x04\x1f\xc3\xdd\x57\xd6\xd6\xc0\xf1\x8d\xdf\x3e\xdb\xf3\xa5\xd5\xef\xcf\x3b\x55\x45\xca\x62\xe8\xed\xb3\x17\x6d\x63\x9e\x27\x67\x1c\x2c\xe7\x1c\x7b\x0f\x99\x5f\x20\xf3\x25\x7b\xb9\xc3\x36\x37\x78\xbb\xb9\x90\xbb\x2f\x58\x93\x0e\x90\xb7\x9b\x87\xfa\xb1\x93\xb7\xe2\x5b\x7b\x49\xc5\x33\xef\xd0\xec\x7a\x95\x1c\x9f\x70\xd8\x50\xb2\x90\xbb\x1f\x72\xd6\xc0\xd6\x4d\x1d\x9a\xb5\x3a\x72\x8f\x33\x55\xea\x46\xe2\x4d\x55\xf5\xa1\xff\x69\x3f\xdf\xd9\x4e\x16\x72\xf6\x91\x1a\xbb\x62\xb1\xc1\x4b\xf2\xc7\x9b\x6a\x6b\x50\xd9\x1c\x9e\x38\x38\x40\xf8\xf8\x86\xd3\xf3\xde\x9e\xf4\xc3\x13\x07\xbf\xef\xf4\xf1\x7c\x67\x6c\xb1\xc1\x35\xb1\x12\xf2\x11\xbb\xaf\xc6\xb6\x2e\xa2\x5c\xb8\x90\xbb\xf7\xae\x45\xe2\x39\x2c\x8b\xf7\xd9\xa2\x1f\x77\x54\x89\xd2\x8c\xa9\xc7\x03\x24\x9e\x40\xab\x91\xce\x77\x66\xd6\x26\xf5\xa8\xd1\x1b\x52\xcf\xcf\xb1\x4b\xe2\xb4\x11\xc4\x6e\xce\xae\x5a\xdd\xd0\x23\x4a\x5a\x33\x70\x13\x3c\x32\x07\x2f\xb3\x61\x8d\xaa\xa1\x4a\x91\x1e\x83\xe4\x84\x78\x1e\x10\x0b\xcf\xde\xec\xb0\x07\xd1\xeb\x89\x38\xc8\x73\xc0\x1a\xba\xcf\xf1\xef\x75\x24\x54\xc3\xac\xf1\xd6\x74\xa6\x8f\xf2\x0a\xbe\x79\x9e\xc7\x69\xb2\x98\xd7\xbd\x83\x90\xe4\x8d\x52\x4c\xf1\x20\xc9\x65\x52\x3c\x2d\x07\x84\x29\x97\x79\x6a\x20\xe7\x15\xe0\x75\x74\xad\xf6\x2c\xab\xf5\xd7\x1c\xc6\xf0\xd3\x63\x69\xc8\xdd\xcf\x3b\xfe\x6f\x3a\xfa\xb7\x12\x46\xa2\x05\x1d\xf2\x06\x17\x2e\xa1\x85\xa0\xbc\x86\x89\xf8\x30\x13\x0d\x06\x3b\x40\x4a\xd5\x28\xe6\x94\x44\x08\x93\x53\x65\xbc\x25\xf8\xf9\x28\xf1\xb2\x60\x19\x53\x6b\xc9\x44\xf9\x0a\x91\xe2\x90\xfe\x48\xb4\xd3\xc2\xbc\x26\x20\x39\x88\x51\x45\x49\x23\xee\x84\xa8\x37\xc9\xdb\xbc\x61\x06\x18\xcf\x1b\x3a\x69\x6b\x8c\x2f\xa8\x31\xaf\xbf\x7b\x1b\xa1\x58\xfc\xb5\xe3\xdf\x60\x3d\x59\x53\x36\x08\xf2\x1e\xb1\x8c\x5a\xaf\x71\xd8\xab\x1c\xb6\x3d\x36\x50\x5a\xdc\xe7\xae\x45\x36\x34\x71\x5d\x08\x78\xee\xb1\xe6\x33\x3b\xd4\xa7\xb7\x3f\x18\xbf\x61\x80\x93\x8c\x18\x3c\x12\x8d\xa5\xce\xee\xde\xc4\xae\x32\x1a\xe7\x67\x0a\x9e\x00\x9c\xb2\x72\xa7\x39\x32\x37\x37\x4d\xb8\x32\x33\x9d\x98\x50\x97\x7e\x6f\xc8\xff\xb5\x5a\xd5\x1b\xdb\x03\x49\x1c\x5d\x03\xcb\x19\x0c\xdc\x11\xee\xc3\xf9\xa0\x71\x9a\x43\x56\x31\xca\xb2\x45\x27\x59\x39\x4f\x3f\x5a\x10\x8e\x9b\xc7\x1e\xdd\x0e\x8a\xe6\xcd\xb7\x3c\x3a\xe7\x41\xd6\x68\xb6\x83\xac\xb8\xd9\x1b\xbd\x59\x7e\x2e\xf6\x42\xc6\xe9\x5f\xf1\x52\x0d\xbd\x93\xc5\x5e\x23\xcd\x28\x80\x06\x42\x09\x0e\x4d\x78\x57\xdf\x70\xfd\xde\x91\x3e\x99\xf4\xa4\x07\x0c\x06\x60\x07\x8b\x62\x6e\x0b\x8c\x0b\x2e\x00\x2c\x44\x67\xe3\x81\xf8\xc0\x1d\x63\x3b\x50\x3d\xae\x33\x09\x2f\x44\x99\x78\x71\xcb\x0e\xb1\xc7\x77\x3c\x7c\x47\x7d\xc5\xb9\x44\xf4\xdf\x76\x3e\xfc\x05\x87\xbd\xd0\x61\xf8\xc2\x7d\x96\xe3\x5f\x33\x5e\x72\x5f\x84\x37\x32\x84\xb9\x6d\x9a\xff\xf5\xb4\x99\x4c\xe8\x40\x15\xf7\x2a\x6b\x3a\x1d\x14\x4d\xf6\x77\x5b\xd8\x13\xf5\x17\xfa\x83\xd1\xa0\x1d\x51\x7e\x19\xd3\xed\xaa\xa2\xc6\x89\x4e\x5e\xa4\xad\x19\x9a\xd3\x03\xaa\x27\xe0\x9c\xe2\xbe\x68\x8b\xff\xb8\x81\x25\x0c\x3c\x3a\xe5\x42\x85\x20\x34\xd9\x12\xa9\x20\xfa\x7d\xbf\xe2\x6c\x6e\xc7\x9d\x2c\x88\x09\x68\xd0\x9a\xea\x97\x6d\x66\xcf\x70\xd8\x70\x1e\x25\x8b\x9d\x38\xc8\xdc\xc2\x5f\x9c\xa5\xbf\x95\x9d\x5a\xfe\x4e\x2c\xdc\x3f\xb2\x02\x78\x2a\x2e\x7f\x1e\x12\x38\x61\x48\x54\x23\xc8\xb9\x67\x61\x10\xa8\xc7\xa1\xf7\x68\xd1\x8b\x9b\x6d\x14\x22\x26\xc6\xb6\x98\x66\x11\xcf\xdd\x96\xff\xd8\x09\xf5\xcb\x3e\x2f\x60\xab\xb7\x30\x82\x1b\x30\x6a\xe3\x81\xa6\xe4\x18\x72\xb1\x23\x88\xe3\x1d\xbb\x06\x88\x24\x11\xf9\xb4\x04\xfe\x9c\xf4\x68\x21\xf7\x32\x99\xf4\xf7\xb4\x85\xbb\x68\x0e\x1c\x14\xd4\x59\x0b\xd4\x24\xca\xc3\x04\x71\xf5\x69\xd6\x2c\xd2\xda\x66\xc3\x62\x24\xa2\x19\x37\xf4\x6f\x3f\x4a\x7f\xaf\xd2\x24\x0c\xde\x80\x4b\x51\x1d\x30\xe7\x17\x27\x55\xd4\x68\xb5\xf8\x09\x87\xd1\xea\xbb\x1f\x70\xfc\x37\x3b\xd3\xf0\xb7\x6c\x10\xdf\x54\x2e\xac\xda\x5c\xc6\x0a\x6b\xe4\x05\xf3\x8b\x7e\xfb\x6e\xd4\x74\x3e\xf4\x8a\x34\xdd\x47\xed\xd5\x11\x5d\x18\xc2\x57\xfb\xec\x1d\x6b\x0c\x77\x31\x06\xa9\x1d\xf1\xa8\x34\xfc\xc3\xb3\xea\x17\x28\xbe\xe0\x25\x1d\x89\x85\x52\xea\xc7\x01\xfb\x73\x40\xc6\x6f\xf6\x2d\xc6\x1e\xb6\x4a\x72\x0e\xf7\xb7\x99\x7f\x15\xfc\x65\x73\x7d\x54\x4e\x25\x8e\x44\x9f\xc0\xea\x84\x1c\xf7\x6f\x65\xbf\xe3\x28\x68\xb6\x8f\x0e\xba\xf5\x2a\xf3\x83\xe0\xad\xf7\x6c\xa7\xfa\x72\x03\x83\xee\x45\x76\xb3\x31\xd3\x5e\x6d\xb8\xd3\x6d\xb8\xd3\x6d\xe0\xe2\xf7\xc3\xc5\xff\xb8\xf4\xa6\xfb\xa0\xc3\xf6\xac\xef\x98\xb7\x79\xc3\x7f\xa6\x63\x1e\x9f\x32\x82\xf3\xf7\xe5\xa8\x9f\x75\x4e\xae\xee\x52\x77\xb5\xbb\x47\xb9\xd4\x19\x83\xd1\x21\x2e\xa2\xa7\x65\xb7\xba\x4f\x5d\xc2\x6e\x39\x37\xcc\x08\x8d\x07\xfa\x9f\x9b\x7c\xbe\x5a\xa1\x12\x7a\x04\x48\x53\x28\x9a\xf4\xf9\xd2\x83\xa4\xbf\x0d\x9e\x81\x69\x05\xf1\x1b\x07\xa2\x88\xfe\xdb\x10\x7b\x9b\xc3\x5c\xc1\xff\xce\x65\x01\x60\x88\x60\xf2\x63\xf7\x65\xce\xb9\x03\x85\x3c\xbe\xb7\x3e\x15\x81\x2e\x38\xed\x42\xe2\x88\x68\x60\xcd\x42\x95\x96\xc6\x23\x21\xd9\xd0\x05\x01\x62\x6e\x5a\x34\x79\xc6\x16\x35\xec\xca\x93\xfc\xe3\xf4\x27\x92\xa1\x66\xa7\x15\x88\x5b\x3c\x08\x01\x1c\x8b\x9f\x69\xc7\x01\xa5\x12\x26\xd1\x4a\x03\xb4\xe4\x06\x82\xa9\x6e\xda\x3c\xc1\xd3\xec\xff\x63\xef\xda\x62\xe4\x38\xca\xf5\xe9\xf1\x7a\xd7\xa9\x78\xe3\xa4\x5f\x8e\x74\xa2\x73\x4e\xa9\x1c\x62\x6f\xb2\x3b\x6b\xc7\x17\x6c\xc7\x09\xd9\xdd\xb1\xe3\x89\x2f\x99\xec\x8e\x23\x22\x1e\x48\xcf\x74\xcd\x4e\x7b\x7b\xbb\x27\x5d\x3d\xbb\x1e\xc2\x43\x90\x89\x21\x88\x10\x10\x28\x42\x26\x40\x82\xc4\xcd\x40\x22\x20\x31\x22\x02\x25\x02\x82\x78\xc8\x45\x3c\x04\x01\x52\x40\x42\x11\x4f\x5c\xf2\x16\x21\x20\x42\xf5\xd7\x7d\x76\x76\xbc\x17\x3b\x8a\x94\xbc\xd8\x3b\x3d\xdd\x35\xd5\x55\x7f\x55\xfd\xd7\xef\x1b\xcc\x80\x2c\xd4\x3f\x4c\xf6\x8b\xbf\xd4\x3b\xc8\x4f\xea\xec\xd6\x2f\x01\x98\x4e\x40\x00\xa9\x1a\x74\xf4\x82\x19\x7d\x72\x96\xc9\x41\xf9\x66\x51\x37\xa0\xa7\x3b\x2a\xdb\xab\x19\xdf\xff\x01\xb3\x74\x14\x4b\xb8\x52\x07\x93\x72\xbf\x4c\x84\xdf\x49\xae\x83\x5c\xf9\x2e\x96\x19\x79\xd0\xea\x16\xed\x47\x1f\xdf\xe0\x28\x0d\xca\x4e\x3d\x24\x77\xda\x4a\x9a\xe5\xfe\xbf\x0a\x64\x8f\x7d\x41\x8c\x74\xde\x6e\xc5\xb4\x1b\x04\x2a\x90\x89\x13\x10\x2a\xe2\x52\xc7\xff\x77\x84\xed\xa9\x02\x7a\xc8\x93\x85\x12\x0f\x78\x84\x55\x1d\xcd\x0c\x60\x9f\xb2\x1c\x6f\x37\x56\x1e\xb3\x6a\x38\xf8\xaf\x17\xb9\x12\x35\x22\x01\xb8\xba\x09\xe3\xef\x54\xc4\xc0\xaa\x76\x80\x0b\x50\x4b\xf6\x59\x6c\x46\x2e\xb6\xd0\x2d\x08\xba\xe8\xef\x51\x88\x09\x82\x58\x17\x94\x33\x8d\x89\x60\x9f\x3d\x2e\xb4\x41\x0d\x6d\x6a\x65\x69\x9e\xd6\xd3\xd8\xbf\x9b\x94\xf9\xb3\xe5\x0a\x56\x97\x8c\x02\x0c\xc3\xa1\xbb\x7c\xb2\x54\x19\xc5\xd5\xa9\x0a\x00\xd0\xce\x4c\x55\x2b\x4e\xfd\x41\x75\xaa\xe2\x74\xf1\xa1\x81\x9e\xf9\xbb\xbd\xd2\x63\xfc\xd7\x36\x90\x85\x69\x5b\xb3\x03\x47\x1d\x37\x3d\xb9\xd1\xd9\x52\x69\x08\x02\x86\x09\x1f\xd1\x5f\x4a\x47\x1b\x0e\x53\x3b\x79\x05\xa7\x8b\x09\xcd\x58\x33\x6a\x49\x24\x34\x48\x81\xe1\x7d\x3e\x24\x90\x06\x32\x0a\x10\x63\x7c\xcf\xe3\x73\x1d\xe4\x4d\x67\xae\x5f\x29\xa0\x17\x3c\x04\xd7\xfd\x9f\x78\xe4\x49\x0f\xf2\x76\x14\xb0\x7f\xef\x8c\x1d\xc9\x8f\x08\xbd\x12\x8a\x45\x67\x3e\x8e\x92\x39\x43\xf2\xdb\x48\x01\x80\x4e\x58\x19\x89\x86\xf7\xc9\x28\x20\x5a\xe7\xcd\x4b\x96\x3b\x63\x4f\xc2\xc7\x3d\xb9\xc6\x3e\x4a\x52\x28\x36\xe1\x53\xab\x53\x91\x64\x0c\xc7\xb6\x6d\x08\xb9\x1c\xdd\xf8\xd2\x26\x34\x62\xc9\x82\x24\x2e\x17\x07\xaf\x38\x73\xa4\x07\x00\xb2\xb9\xff\x3a\x44\x6e\xb6\x3e\x77\xed\x0b\x0a\x57\x18\x1c\x2b\x0c\x68\x96\x59\x53\x58\xe8\x80\x16\xe6\xaa\xfd\x4f\x0c\xa1\xdf\x7a\x68\x23\x10\x7b\xf9\x2f\x7b\xe4\x8c\x15\xf1\x03\x21\x13\x2c\xd3\x56\xc5\x11\x30\xbb\x50\xfb\xa7\x60\x76\xdb\x89\xc6\x5c\x03\xf9\x4f\x52\x78\x54\xe1\xba\x8d\x82\xc1\xa3\x31\x8b\x99\xc6\x24\x16\x50\x36\x62\x95\x48\x87\xc9\x2a\x10\x54\x96\x1f\xa9\xe9\x76\x4c\xd1\xd9\x0d\x68\x43\x1e\x33\xff\xad\x02\x79\xba\x50\x3d\x36\xe3\x52\x73\x15\xf1\x94\xd8\x43\xe3\x8e\x33\x72\x2e\x71\xa7\xde\xfb\xf8\xf3\xfc\xd2\x28\xde\xbd\x7b\x17\xbc\xb3\x84\xc1\xa1\x78\x9e\xf2\x3d\x85\xe9\xcd\x0e\x46\x50\x8c\x47\xc7\x62\x0a\x07\x60\x0c\xe0\x47\xeb\x68\x4f\x96\x6a\xe3\xb4\x88\xfd\xe5\x8a\x72\x14\x16\x6a\x50\xaf\xa7\x59\x28\xbd\x70\x6a\x31\xc1\xb6\x6a\xf8\xb6\x15\x38\x05\xff\x7a\xe6\x44\x19\xba\xa9\x9d\x3e\xe0\x47\x14\x98\x37\xe2\xdd\x0c\x78\x1d\x6e\xb4\xe3\x46\x14\x6b\x3c\x33\x75\x87\x7e\xf1\x99\x13\x65\x67\x26\x0e\xa0\x7d\x7d\x52\xfc\x97\x9f\x89\xea\xb1\x19\xf4\x6c\x01\x0d\xc9\xd9\xf5\x9f\x2c\xf4\xc9\x81\x5e\xbe\x99\x49\xf1\x38\xe0\x3b\x76\x09\x0c\x64\xa5\x02\xe6\xaa\x2a\x9a\xb6\xac\x5e\xe9\x9c\x0b\xd3\x64\x9b\x72\x1b\x04\x49\x07\x84\xb3\x88\x27\x14\x26\x2c\x3f\x50\xd2\x06\xde\x26\x5b\x14\x4e\x41\x90\xfd\x6d\x26\x65\xc4\x40\x5a\xba\x20\x28\x9a\xb7\x5e\xc3\x68\x2a\x87\x6e\xcd\x76\x00\xcb\x71\x4f\x33\xd5\x7f\xde\xcb\x38\x9d\x15\xe8\x29\x4a\x5c\x02\x3c\x1b\xa7\xb5\x20\x56\x37\x15\xd1\x2f\x3c\x07\x68\xc7\x29\xc5\x33\xe4\x9c\x5f\xf1\xc8\xfe\x35\x93\x73\xbe\x1d\xdc\x9c\x7f\x1c\x42\xd7\x2e\x87\x17\xc4\x5f\xe0\xb9\x21\x72\xab\xfa\xb0\x7c\xff\x05\x88\xa7\x04\x7f\x64\x3a\x99\x68\x31\xca\x9b\xee\xce\xf6\xc6\x20\xba\x0b\x0d\xb5\xd2\x70\xaa\x5c\x9a\xe6\x8a\x5e\x45\xfc\xd9\x1d\x1d\x68\xa5\x21\x3f\xdc\x33\xa8\xec\x0b\x18\x8b\x66\x2d\xd2\xff\x25\x30\x19\x1f\xf3\x10\x92\xfc\xfc\x59\xb9\xe4\x33\xd2\x28\x97\xd4\xd1\x27\x42\x49\xaa\x05\x05\x6f\x15\xa7\xed\x50\x51\xfa\x67\x0a\xb8\x44\xc4\x5a\x0e\xe0\x83\x15\xf9\x05\xd7\x7e\x6e\x3d\x30\x3e\xae\x2f\x28\xd6\x1c\x3e\x22\xe5\x92\xe3\xa2\xac\xa3\xc1\x1c\xb2\xcb\xfc\x7b\x08\x60\xe3\x99\x8d\x57\x75\x63\x1b\xc3\xe2\x16\x67\x05\xdf\x80\xb6\xa3\xeb\x2f\x1a\xcc\xa8\xf2\x07\xd1\x2b\x1e\x1a\x6e\x27\x32\xd9\x8c\x2f\x2e\xff\xa7\xfc\xa8\x3f\x69\x5f\x52\x52\xad\x60\x3a\xd5\x37\x91\x82\xbe\xd3\x08\x94\x78\xb2\xa3\xe4\x79\x54\xcf\x9d\xd5\xd2\xaa\x0f\x77\xc8\xa3\x83\x7f\xc7\xb7\x8a\xcc\x32\x48\xb4\x1d\x83\x90\xa4\x76\xf5\x81\xfc\xd5\xd2\x34\xa6\x41\x82\x7e\xe3\xa1\xcd\x62\xff\x97\x5a\xd5\x0b\xfd\xac\x5f\x5b\x3c\xa7\xac\xa7\xc8\x23\xde\xd2\x21\x37\x7e\xca\x59\x2a\x72\xfc\xba\x48\x20\xc1\xea\x01\xb0\x54\x91\xcc\x26\x51\x74\x44\xc3\x2a\xf4\x85\x81\x0b\x54\xed\x36\x82\x7f\xcc\xc0\xfa\x2b\xe0\x1d\x85\x07\xa7\x77\x20\x74\xd6\x43\x48\xd5\x7a\x94\x4b\xfe\x69\x32\x57\xd2\x99\x6f\x22\x27\x87\x9f\xbd\x3a\xab\x44\xa4\xe3\xd0\xdc\x6a\xa2\x88\xa7\xe9\x7c\xba\x40\x15\xd3\x34\x04\x4f\x76\x16\x77\xee\x2a\x62\x46\xa9\x99\x91\x88\xb1\xb6\x09\xea\xee\xdd\xb9\x7f\xef\x5e\x5b\x30\xff\x76\x75\xcf\x42\x5a\x58\xd4\xc2\x3a\x7a\xf1\x6a\x72\x8b\xf9\x28\x02\x92\x3d\x79\x33\x7a\x84\xec\xcc\x5a\x54\x4b\xfc\xad\x2d\xe8\x97\x1e\xba\x92\x6f\xb9\xf5\x20\x07\x21\xbd\xe0\x91\xd9\x09\xf3\xb9\x7b\xb1\x1b\xdf\xbc\x6e\xd2\xc0\x02\x1b\xf0\x65\x48\x15\xd7\x79\x96\x2e\x82\xf1\x94\xaa\x80\xb8\xb4\xe5\x0a\x7f\xb2\x2b\x34\x5e\xf5\xc8\x83\x9e\xfa\xa1\xee\x77\xc8\xd3\x3c\x88\x7b\xbd\xc9\x3b\xbf\x26\xe3\xeb\x05\x07\x46\xfd\xd1\x02\x79\xc0\xd3\x1e\x11\x11\x5f\x49\x30\x6c\x56\x40\xcd\x21\x85\x40\x43\xeb\xab\x85\x25\xef\x5f\xd7\xa6\x61\x99\xcd\x66\x83\xbc\x09\xed\x40\xc5\x95\x6e\x09\x97\x11\x73\x3d\x47\x5b\x44\xc9\xbb\xb2\xcf\x99\x1f\xac\x20\xb3\x92\x77\xac\xe4\x3e\x47\x46\xf4\x9f\xa6\x90\x9e\xa9\x64\x46\xa5\x71\xf2\x07\x8b\xe8\x29\x0f\x6d\xe2\x83\x03\xb8\x7d\x5f\x5b\x49\xdd\x8c\x0b\xec\x47\xd2\x99\xd5\x81\xfa\xad\x67\xfe\xf8\x53\x28\x44\x9b\xa5\xc0\x96\x93\x93\x8c\xfa\x55\xb2\x4f\x81\xe7\x88\x6c\x0f\x58\xcd\xca\x0a\x8e\x12\xd8\x39\xb7\xcb\x54\xbb\x91\x2e\x2c\xac\x65\x23\x30\xcf\x16\xd0\x15\x41\x18\x72\x25\x94\x32\xff\xbb\x05\xf2\x45\x4f\xff\x8a\xba\xcc\xed\x54\xf9\x73\xb6\xea\x80\xef\x6a\xd3\x2c\x52\x6e\x2f\x57\x17\x00\xdd\xdc\x42\x88\x5f\xc7\x60\xe8\x6e\xac\x1c\x3a\xc4\x9e\xc2\x09\xf1\xf8\x6a\xb8\x45\x57\x2a\xf4\xe8\x73\x1e\x1a\xac\x2b\x5c\xe0\xd5\x9d\xb7\x32\x91\x62\x09\x47\x10\x3f\x32\x7b\x29\x6a\x78\x21\x0a\x84\x3d\x29\x0e\x59\x7d\x64\xd6\x9d\x63\xb6\x88\xee\x43\x83\xd1\x7c\x30\x4b\x99\x3f\x4b\xde\xa7\xa6\xd2\xe0\xfa\x8b\xef\xc4\xda\x88\x98\xc4\x57\x33\xe3\xba\x0b\xed\x5c\xc1\xd2\xd0\x08\x83\x80\xfe\x88\x5e\xf2\xd0\xc6\x56\x33\x60\xd4\xff\xb9\x47\x9e\x81\xba\x81\x0a\xff\x68\xfc\x8e\xdd\x3c\x22\x71\xd4\x90\x29\xeb\xf0\x9c\xad\x64\xae\x4b\x56\x44\x6b\xd5\x26\x35\xf6\x4b\x42\x05\x46\x7e\x4b\xc0\xbb\x8e\x4a\x10\xff\x45\x97\x5f\xd5\xd1\x83\xcf\x78\x68\x8b\x5c\x57\x13\x32\xaf\xca\x6f\x91\xa2\x1a\x4c\xb5\xe4\xcc\xd9\xda\x55\x59\xb3\x64\xcd\xad\x6c\x54\xd5\x6f\x09\xcf\x0c\x3a\x33\x80\x76\x58\x77\xb5\xa0\xac\x41\x1b\x8e\x87\x67\x6e\xcf\xd2\x76\x4b\x41\xa8\xa8\xbc\xe6\x97\x37\x90\x7b\x7a\x7f\xe5\x84\x05\x0d\xdc\x7a\xa7\x45\x25\xff\xaf\xb8\x4b\x3b\x43\x0c\x31\xba\xba\xd9\xd5\x4f\x5e\x2f\xa0\x37\x3d\x34\x08\xa6\x05\xf3\xff\xe2\x91\x6f\x7b\xe2\x6f\x18\x12\x30\x6c\xb8\xb5\x48\x43\x2c\x2f\xa7\x0d\xdc\x90\x8c\xb7\xac\x88\xb9\x6e\xdf\x49\xdb\x78\x11\x22\x8c\x71\x34\x07\x7b\x0b\x40\x16\x18\xaf\x84\xba\x5f\x64\x34\x72\xe3\x3d\xee\x98\x6f\x85\x55\x03\x09\x5e\xda\xb3\xc0\xf2\x20\x93\x59\x7e\x09\x68\x7e\x02\x9b\x1d\x94\x9e\xe3\x6d\x96\x4f\xb7\x93\x09\xb6\x8a\xb9\xe9\x1a\xf5\x72\x49\xc0\x15\x34\xd1\x00\xb7\x9f\xfd\x7b\xc9\x0c\x38\x82\xa2\xee\x61\xd5\x84\x02\x61\x54\x87\xe8\x07\x14\xc8\xc8\x99\xd1\x68\xd2\xd2\x60\x9a\xa1\xf5\x76\x16\xe5\x1d\xbe\xac\xe8\x69\x37\xb1\xe0\x07\x1b\x7b\x66\x89\x39\xc7\xb4\xff\xf0\x46\xb2\xcf\xb9\x62\x72\xb2\x8c\x4f\xde\x56\x46\x45\xb0\x5c\x82\xcf\xf6\x09\xb3\x3c\x3d\x80\x1e\xf0\xd0\x35\x71\xc0\xf2\x23\x34\xc8\xf2\x1a\x0d\x72\x88\xb2\xcc\xad\x3d\xc8\xb2\xe3\x98\x0e\xa5\x2c\x52\x3c\xcb\x35\x78\x4d\x03\x00\xb4\x8f\x82\x17\x50\x77\xbc\x88\x3e\xdd\x3b\xd2\xb3\xb0\xf6\x3e\xdc\x7c\xac\x7f\x38\xa7\x4f\x24\xa7\x88\x3e\x68\x42\x39\xc7\xc9\x6d\x47\xda\xf3\x41\x82\x75\xf4\x46\x47\x76\x44\x1e\xd1\xd2\xc8\x4d\xbf\x48\xcb\x1d\x3a\x76\x73\x1b\xd9\xb5\xbd\x96\x45\xb4\x31\xb2\xd6\xa8\xcd\x31\x1d\xb5\x99\x24\x7b\x96\xa1\xa2\x1b\x55\xae\xa1\x5e\xe1\x1a\xa7\xb5\x51\xe9\x4a\xbe\x8e\xfc\xb7\xc2\x2d\x72\x15\x56\xe7\xee\x97\x36\xa2\x1b\x2f\xce\x62\x6b\xe4\xf7\xcb\x1b\xc9\xd1\x1e\xd7\x97\x0f\x23\x86\x86\xca\x7a\xb5\x91\xc3\xef\x0f\xf0\x63\xbb\x97\x3c\xdd\xbf\x76\x79\xba\xed\x22\xf2\x74\xb1\xf0\x60\x11\x2d\xa0\xab\x78\x97\x04\x82\x13\x74\x27\x5c\x7b\x77\x00\x9f\xd5\x8e\x58\x46\xf6\x46\xb0\x18\x30\x9d\x63\x80\xee\x31\xc2\x7c\x82\x4c\x4c\x88\x60\xe4\x2a\xc4\xd9\x0d\x44\x3a\x52\x70\x58\x4b\xf3\x41\x32\x5e\x5d\x7b\xfc\xf1\xd2\x4a\xf2\x4d\x52\x92\x6f\x20\xff\xab\x11\xb8\x8c\x34\xf5\x96\xe7\xf3\xee\x26\x5c\xe3\xfa\x20\x1f\xec\x3b\xd2\x9a\x11\xe2\x07\x37\x12\xe7\x82\x25\xbd\x0e\x1d\x96\x90\xe0\x53\x69\xad\xbf\x9c\x5e\x18\x78\x57\x6e\x34\x1f\x90\xd3\xf3\x7e\x72\x83\x9a\x9e\x53\x69\xcd\x6e\x69\x2a\x9d\x6f\x41\x21\x65\x9a\xe1\xc3\x41\x14\x77\x29\x6f\x2d\x34\xcc\x7b\x5b\xc9\xd2\x9a\x58\x47\x1f\x5e\xfb\x3a\xba\x6e\xb9\x65\xcd\x97\x10\xb0\x7f\xf2\x25\xf4\x0e\x3b\x9e\x1e\xdd\x80\x76\xad\xa1\x2c\xde\xff\x43\x81\xec\x9b\x5e\x5a\x04\x8f\xfb\x54\xc1\xdb\xdc\xda\xad\xb0\x5c\x72\x04\xf8\x33\x05\xf4\xbc\x87\x06\x1b\x8c\xcf\xa3\xff\x8c\x47\xbe\xe9\x59\x69\xf4\xa0\x78\xe6\xa9\xa8\xeb\xb1\x23\xe3\x8d\xae\x7b\x96\xd4\xb2\x42\xe4\x4e\x63\x52\x63\x71\x6f\x11\x1f\x3a\x5d\xc4\x84\x9e\xce\x77\x93\x51\x4c\x4e\x37\x18\xff\x2f\xc9\x1b\x8c\x14\x71\x79\x5e\x90\x78\xc5\x32\x45\x2b\xd3\x25\x02\xe2\x01\x6e\xab\x5a\x21\xbe\xa2\x8b\x7f\x0d\x6f\xe6\x4f\x90\xdd\xe5\x92\xac\x2c\x51\x8c\xda\xec\xe2\x43\x64\x37\xf5\xda\xb0\x03\x2d\x6b\x81\x16\x39\xf3\x70\x61\x98\x7c\xd2\x9b\x5e\x11\x52\x91\x28\xc0\x0e\x98\xa2\xe9\x93\x15\x58\x86\xb5\x08\x4f\x4f\x96\xb4\xbd\xd2\x37\x42\xce\x55\xe6\x9e\x21\xf2\x4d\xf3\x69\x12\xe5\x69\x06\xf8\xb5\xdc\xdc\x73\x26\xf9\xa1\xcd\x5c\x41\x14\x5f\xf8\x8b\xe4\x14\x6c\xf3\xd0\x5d\xb8\x04\x69\x12\x97\x0a\x27\x69\x6b\x33\x5d\x1c\xcb\xd3\xb1\x36\xa3\x63\x91\xc3\x09\xfa\x63\x0f\x0d\xcd\xd1\x0e\xff\xdb\xff\x9e\x47\xbe\xea\x1d\x15\x1f\x74\xfe\x6d\x90\x03\xd7\xc8\x1c\xed\x60\xb8\xce\xf7\xb8\xe9\xc9\xd2\x49\x46\x33\x27\x8f\x01\xd8\x0a\xea\xb4\xd5\x1c\x97\xcd\x5d\xfe\xbe\x3f\xe6\x21\x3d\xc4\xfe\x23\x1e\x61\xdd\x49\xf8\x50\x85\xa7\xee\xb8\x5c\xfd\x59\xd6\x3f\xf4\x88\x87\x06\x5a\x69\x1a\xfb\x67\x3d\xd2\x31\xb3\xcb\x2f\xc9\xc9\xb5\x86\x2f\xab\xf5\xae\x75\xbc\xa4\x03\xf6\x33\x60\x04\x0d\xc2\x3b\x93\xb8\xc3\xb7\x95\x6f\x78\xd3\xf2\x13\x16\x35\x18\x22\xe1\x42\x24\x6d\x52\xac\xbf\x64\x82\x59\x81\x1b\x5d\x77\xcb\x52\xa2\x36\xa4\x70\xda\x0e\xf0\x06\x3f\x99\x2e\xd7\x3b\x58\xf1\x9a\x4f\x14\xd0\x15\x8c\xd6\x33\xc1\x73\xf4\x8f\x95\xd4\xbe\x43\xf1\x57\x37\x0a\xc6\x73\xde\x8c\x6a\x05\x9c\x1d\x56\xbe\x78\xd0\xe6\x56\x73\xae\x80\xef\xc4\xaf\xb9\x92\x5f\x6e\x28\x87\x5d\x08\x54\x82\x59\x14\x52\x86\xb5\xe8\x5b\x33\x9b\x44\xf1\xe5\x19\x15\xae\x8c\x0f\xb4\x19\x14\x23\x91\xfb\x8d\x80\x41\x76\xc7\x12\x01\x5b\x6f\x51\xde\x0a\x45\xec\x87\x05\x7d\x6e\x7d\xab\x40\xce\x15\xba\xcf\x2d\x39\xc2\x76\xb9\x21\xf8\x32\x02\x91\xf6\x21\xcf\xb4\x6a\xd4\x3a\x80\x0f\x25\x4c\x64\x94\x04\xb9\xac\xcc\x71\x9b\x8a\xd8\x2a\x4e\x38\xf1\x36\x07\x2e\xd5\x39\xb7\xde\x6c\x9f\xac\x16\xda\xa3\xf6\xe6\xa6\x9e\x11\x32\x21\xa0\x80\x9a\xfe\xea\x26\xf2\xff\xe6\xa3\x5b\x72\x22\xae\xf7\xa6\x57\xf8\xd5\xd0\x7b\x9c\x01\xef\xb2\x9c\xfd\xf3\x9e\xc2\x14\x7f\xdc\x23\x8d\x1e\xa0\xe2\x72\x3f\x93\xfc\xa1\xab\x96\x65\x27\x84\x3d\x2e\x1a\xb3\x8f\xc1\x1b\xd1\x08\xda\xb6\x02\x2e\x02\xfe\xdc\x7b\x05\x06\x2b\x2e\x30\x58\x0f\x5c\xac\xd9\x39\xba\xf3\xda\xff\x3c\xec\x98\x3c\x5d\x4e\xdb\x4a\x1a\x96\x22\x96\xb5\xc1\xc3\x3d\xd9\x0e\x67\x35\x47\xfc\x93\xc3\xe4\x53\xde\xb2\x5f\xdb\xb1\xe9\xde\x91\x7c\x3b\x82\xdf\xa3\x99\x22\x96\x0d\xf1\xb9\xcb\xb3\x20\x12\x68\xe6\x82\x02\xd0\x76\x06\xc8\x1d\xfe\x9c\xe7\x87\xba\x09\x36\x21\xdc\xe7\xe7\xbc\xab\xa4\xfb\xe0\x08\x0d\xe2\xbc\xd9\x39\xe7\x5d\x25\x93\x95\xf4\x85\xcd\x54\x22\x55\x55\xd2\xd0\xdd\x39\x5f\xbc\x12\x3d\x3c\x84\x86\x65\xb3\xe2\x06\xff\x9f\x83\xe4\xa9\xc1\x92\x7d\xc9\xf8\x8b\x97\xbe\xa8\xe0\x5c\x6d\xa6\x8c\x62\x6e\x7b\x68\xfb\xb7\x95\xa5\x12\xd5\x49\x1e\x5b\x13\x95\xb2\x28\x65\xcb\xcc\x8d\x56\x1a\x96\x04\xf0\xcc\x70\xad\x9d\xe3\x66\x20\xea\xc1\x3b\x94\x4b\x24\x4d\x4c\x68\x48\x36\xd6\x63\x38\xad\x3c\xb3\x22\x9e\xc0\x36\xcb\x74\x24\xc3\x59\xf3\x41\xcb\xac\x0c\xe1\x62\x6e\x4a\xd2\x3e\xab\x77\xa6\xe7\xb0\x80\x54\x5f\x55\x25\x99\x22\x84\x74\x1e\xe7\xbf\x06\x99\x9d\x34\xe1\x5d\xac\x94\x26\xed\xb4\xb7\x80\xe1\x66\xb0\x20\x70\xc6\x68\x82\xe7\x83\x6c\x4e\x06\x1d\x42\x1a\x53\x91\x12\x9f\x66\x32\xf7\x24\x80\xa6\xd3\x76\x3e\x22\x38\x86\xb9\x55\x22\x23\x01\xbc\xff\x3d\x20\xf8\xf9\x8f\x2b\x9e\xc1\x05\x55\xdd\xbc\x8e\x57\xd4\x29\xcb\xba\x77\x61\x14\x26\xdb\x72\x9c\xd6\xeb\xed\x0c\x7e\x2a\xd0\x6f\x9c\xf3\x31\xce\x41\xb5\x8e\x0c\x4b\x72\x06\x39\x35\xa1\x19\x6d\xd8\x97\x83\x76\x9e\x72\xe1\x11\x80\x56\x7c\x9c\xfa\x4e\xa3\x1c\x10\x96\xce\x8b\x57\x81\x7e\x59\x85\xce\xb3\x29\x37\x5b\xe7\xd3\x34\x6f\x9a\xf9\x35\x24\x9b\x14\x80\x07\x94\xbf\x6a\x3e\x15\x07\x83\x1a\x97\x22\x3e\x16\x64\xb3\x36\x4f\x20\xe5\xfb\x96\x88\x95\xab\xc1\x16\xbb\xaa\x28\xf9\xe5\x83\x56\x8b\xf9\x41\x03\x31\x25\xfe\xfe\x6a\x7c\x58\xf1\x7c\xff\x64\xdd\x8b\x78\x74\xec\x3c\x91\x7b\x51\x8f\x55\xee\xdf\xa1\x32\x11\xf7\x9c\xb0\xb9\x22\xb1\x75\xab\x09\x38\xd6\x75\x6a\xaf\x8c\xb1\xb9\xc9\x88\x1f\x42\xce\x86\xe0\x1f\x55\x6d\xef\x15\xe9\x35\x2e\x1b\xa5\xe0\x97\x54\x2b\x2f\x62\xd6\x4f\xe2\x1a\xcc\x98\xd3\xf8\xeb\x1e\xf2\xd5\x62\xbd\x9d\x26\x92\xfd\xd7\x7f\xc9\x53\x74\xb7\x3f\xf2\x8e\x43\x6e\x35\x04\x7d\x05\x28\xa7\xd4\x57\xd4\x12\x07\x81\x85\x43\xc8\x40\x90\x95\x26\xb1\xaa\x74\x74\x64\x46\x0d\x90\x08\x52\x72\x31\x54\xbb\xae\xd9\xa9\xb8\x98\x2e\x08\x9c\x36\x55\x42\xb1\xa4\x83\x98\xde\xd7\x0e\x62\x50\x7e\x2a\xa5\xc9\x6d\xfa\xa8\x35\xfd\x73\xc7\xf0\x10\xea\xda\x76\xfd\x5d\x6a\x14\xff\x6f\x29\xab\x67\x53\xdc\x03\xe3\xe9\x34\x73\x1c\x75\x6d\xd6\xfe\xcd\xaa\x99\xeb\x15\xa3\xff\xd2\xd4\xd3\x65\x9b\xfb\xbd\x67\x07\x56\xfa\x08\xdd\xe1\x88\xc6\x21\xf3\xcf\x7b\xe4\x31\x4f\xfc\x0d\xc8\x20\xd4\x62\xa7\x6c\x88\xcb\x80\xe6\xc9\xb5\x5f\x49\xc0\xc1\xad\x15\x08\xc7\x06\xb8\x9a\x45\xb4\x88\xab\xa9\x00\x8c\x63\x5c\x67\x06\x96\xd0\xdc\x60\x8f\x86\xa3\x6e\x12\xdd\x6c\x94\x37\xdb\x35\x60\x42\xb4\xce\x78\x16\xcd\x72\xeb\x41\x36\x1f\xca\x54\x8a\x30\x6a\x34\xec\x85\x71\x01\xf5\x4a\x05\x2e\x4a\x2e\xd0\x19\x9a\x43\x26\xed\x67\x11\xd9\xed\x5e\xea\x03\xf4\x6e\x6e\x2c\x9e\xf3\x34\x17\xbf\x73\x42\x3e\x7f\x05\xfa\x7c\xc1\xe2\x98\x3f\xbb\x16\x8e\xf9\x5f\x7b\xea\xa3\xea\xcc\xea\x09\xe7\xb9\xdc\x46\x09\x6b\x37\x1a\x51\x1d\xb4\x38\x4d\x6b\xca\x97\x7c\x48\x73\x58\xd0\x6f\x1f\xe5\xfb\x99\x02\xda\x02\x54\xac\x41\xd8\x99\xa1\xf5\x34\x09\x99\xff\x77\xcd\xd2\xfa\x3b\xef\xb8\x14\x5f\x23\xb6\x4c\xdc\x65\xf1\xfb\x06\x38\xa1\x8b\x16\x2c\x22\x7f\x77\xb3\x7f\x67\xbc\x69\xd8\x6c\xb9\x9e\x11\x24\x90\x18\x07\xd8\x8b\x3a\x5d\xa5\x9e\x05\x8c\x1f\x05\xa3\x12\xe3\x4e\xda\xb3\xf5\x34\x61\x51\x08\xc4\xe4\x56\x92\x91\xed\xc8\xd9\x81\xb7\xdb\x0a\x42\xaf\x07\xf8\xa9\xcd\x52\xae\xe7\x30\xde\x32\x18\x58\x41\xd8\x19\x71\x56\xdc\x13\x05\x2b\x5d\xfc\x0b\x05\xf5\xfa\x6f\x79\xdd\x14\xb5\x66\x18\xba\x48\x86\x99\x8d\x06\x03\xaa\x3a\x05\xdc\x99\x50\xb0\xdb\xb7\x23\xd6\xd4\xd8\xa0\xf4\xb4\xb0\xe0\xf1\x47\x68\x96\xc2\x96\xe7\xd8\xeb\xf6\x0b\xee\xbc\x9c\x92\x30\xbe\x75\xb1\x19\xe4\x63\x11\x1b\x0b\xc6\x7a\xde\xe0\x8c\xd1\xbf\x0b\x48\xaf\x2d\xff\x8d\x3e\x58\x4f\xfd\x6c\xf3\xa0\x46\xe3\x19\xd9\x08\xf9\x4e\x41\xfd\x29\x8d\x3e\xfe\x2d\xbe\xaf\x4d\xb3\x0e\x38\xaa\x2c\x68\x50\x29\x4e\x06\x33\xc1\x65\xd3\xc6\xd0\x30\xd7\xb1\x04\xc6\xb7\x30\x61\x25\xa6\x89\x01\x5b\x88\x12\x9c\x66\xa1\x98\x98\x1a\x35\x2a\x8a\x39\x15\x55\xb3\x8c\xeb\xf5\x4b\x91\x1a\x60\x55\xcb\xa5\x03\x01\xb3\x1a\x8d\x57\x6f\x95\xf2\x77\x5b\x88\xe8\xe2\xb8\xac\x13\x19\xe3\x8b\x63\x4c\xda\xb8\xe3\xa2\xd1\xf1\xad\xf0\xff\x98\x86\xb3\xa9\x5d\x83\xb6\xa0\x2b\x27\x69\x90\xd1\xac\x9a\xce\xd1\xc4\xff\xaf\x53\x77\xa2\xe3\xee\xa5\x5b\xfd\x83\x68\x30\x68\x45\x47\x69\xc7\x1f\x76\x18\xb1\xfe\x67\xb0\x49\x83\x90\x66\xe4\x5a\x71\x3f\x86\x07\xba\xdc\x87\xff\x09\x00\x00\xff\xff\x87\xab\xee\x5d\x2c\x61\x2c\x00") func openapiPbBytes() ([]byte, error) { return bindataRead( diff --git a/trash.lock b/trash.lock index e1ef09fcba4..8ea8702f595 100755 --- a/trash.lock +++ b/trash.lock @@ -1,47 +1,28 @@ package: package=github.com/rancher/k3s import: -- package: bitbucket.org/ww/goautoneg - version: a547fc61f48d567d5b4ec6f8aee5573d8efce11d - repo: https://github.com/rancher/goautoneg.git -- package: github.com/Azure/go-ansiterm - version: d6e3b3328b783f23731bc4d058875b0371ff8109 - package: github.com/BurntSushi/toml version: a368813c5e648fee92e5f6c30e3944ff9d5e8895 -- package: github.com/JeffAshton/win_pdh - version: 76bb4ee9f0ab50f77826f2a2ee7fb9d3880d6ec2 -- package: github.com/MakeNowJust/heredoc - version: bb23615498cded5e105af4ce27de75b089cbe851 - package: github.com/Microsoft/go-winio version: v0.4.11 - package: github.com/Microsoft/hcsshim version: v0.8.3 -- package: github.com/Nvveen/Gotty - version: cd527374f1e5bff4938207604a14f2e38a9cf512 - package: github.com/alexflint/go-filemutex version: 72bdc8eae2aef913234599b837f5dda445ca9bd9 -- package: github.com/armon/circbuf - version: bbbad097214e2918d8543d5201d12bfd7bca254d - package: github.com/beorn7/perks version: 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9 - package: github.com/blang/semver version: v3.1.0 -- package: github.com/chai2010/gettext-go - version: c6fed771bfd517099caf0f7a961671fa8ed08723 -- package: github.com/cloudflare/cfssl - version: 1.3.2-21-g56268a613adfed -- package: github.com/container-storage-interface/spec - version: v1.0.0 - package: github.com/containerd/cgroups - version: 5e610833b72089b37d0e615de9a92dfc043757c2 + version: 4994991857f9b0ae8dc439551e8bebdbb4bf66c1 - package: github.com/containerd/console version: c12b1e7919c14469339a5d38f2f8ed9b64a9de23 - package: github.com/containerd/containerd - version: v1.2.4-k3s1 + version: v1.2.6-k3s1 repo: https://github.com/ibuildthecloud/containerd - package: github.com/containerd/continuity version: bd77b46c8352f74eb12c85bdc01f4b90f69d66b4 - package: github.com/containerd/cri - version: c3cf754321fc38c6af5dfd2552fdde0ad192b31d + version: eb926cd79d3bac188dcc4ed7694fc9298f8831be - package: github.com/containerd/fifo version: 3d5202aec260678c48179c56f40e6f38a095738c - package: github.com/containerd/go-cni @@ -57,53 +38,25 @@ import: - package: github.com/containernetworking/plugins version: 9810b7d5137b171c4e07ce59bb18be9feccec557 repo: https://github.com/ibuildthecloud/plugins.git -- package: github.com/coreos/etcd - version: v3.3.10 - package: github.com/coreos/flannel version: 823afe66b2266bf71f5bec24e6e28b26d70cfc7c repo: https://github.com/ibuildthecloud/flannel.git - package: github.com/coreos/go-iptables version: 47f22b0dd3355c0ba570ba12b0b8a36bf214c04b -- package: github.com/coreos/go-semver - version: v0.2.0-9-ge214231b295a8e - package: github.com/coreos/go-systemd version: 48702e0da86bd25e76cfef347e2adeb434a0d0a6 -- package: github.com/coreos/pkg - version: v4 -- package: github.com/cyphar/filepath-securejoin - version: v0.2.1-1-gae69057f2299fb - package: github.com/davecgh/go-spew version: v1.1.0 -- package: github.com/daviddengcn/go-colortext - version: 511bcaf42ccd42c38aba7427b6673277bf19e2a1 - package: github.com/docker/distribution version: 0d3efadf0154c2b8a4e7b6621fff9809655cc580 -- package: github.com/docker/docker - version: docs-v1.12.0-rc4-2016-07-15-9510-ga9fbbdc8dd8794 -- package: github.com/docker/go-connections - version: v0.3.0 - package: github.com/docker/go-events version: 9461782956ad83b30282bf90e31fa6a70c255ba9 - package: github.com/docker/go-metrics version: 4ea375f7759c82740c893fc030bc37088d2ec098 -- package: github.com/docker/go-units - version: v0.3.1-11-g9e638d38cf6977 -- package: github.com/docker/libnetwork - version: v0.8.0-dev.2-1265-ga9cd636e378982 - package: github.com/docker/spdystream version: 449fdfce4d962303d702fec724ef0ad181c92528 - package: github.com/emicklei/go-restful version: v2.2.1 -- package: github.com/euank/go-kmsg-parser - version: v2.0.0 -- package: github.com/evanphx/json-patch - version: v4.1.0-19-g5858425f75500d -- package: github.com/exponent-io/jsonpath - version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5 -- package: github.com/fatih/camelcase - version: f6a740d52f961c60348ebb109adde9f4635d7540 -- package: github.com/fsnotify/fsnotify - version: v1.3.1-1-gf12c6236fe7b5c - package: github.com/ghodss/yaml version: v1.0.0 - package: github.com/godbus/dbus @@ -112,76 +65,35 @@ import: version: 08a7655d27152912db7aaf4f983275eaf8d128ef - package: github.com/gogo/protobuf version: v1.0.0 -- package: github.com/golang/groupcache - version: 02826c3e79038b59d737d3b1c0a1d937f71a4433 - package: github.com/golang/protobuf version: v1.1.0 -- package: github.com/google/btree - version: 7d79101e329e5a3adf994758c578dab82b90c017 -- package: github.com/google/cadvisor - version: 87e237ff35b9d752ba58860a06e0ebe57816cbb7 - repo: https://github.com/ibuildthecloud/cadvisor.git -- package: github.com/google/certificate-transparency-go - version: v1.0.21 - package: github.com/google/gofuzz version: 44d81051d367757e1c7c6a5a86423ece9afcf63c -- package: github.com/googleapis/gnostic - version: 0c5108395e2debce0d731cf0287ddf7242066aba - package: github.com/gorilla/mux version: v1.6.2 - package: github.com/gorilla/websocket version: v1.2.0 -- package: github.com/gregjones/httpcache - version: 787624de3eb7bd915c329cba748687a3b22666a6 - package: github.com/grpc-ecosystem/go-grpc-prometheus version: 6b7015e65d366bf3f19b2b2a000a831940f0f7e0 - package: github.com/hashicorp/errwrap version: 7554cd9344cec97297fa6649b055a8c98c2a1e55 - package: github.com/hashicorp/go-multierror version: ed905158d87462226a13fe39ddf685ea65f1c11f -- package: github.com/hashicorp/golang-lru - version: a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4 -- package: github.com/ibuildthecloud/kvsql - version: c649f12fe5250718e4e024b8b40e7de796ab095e -- package: github.com/imdario/mergo - version: v0.3.5 -- package: github.com/inconshreveable/mousetrap - version: v1.0 - package: github.com/j-keck/arping version: 2cf9dc699c5640a7e2c81403a44127bf28033600 -- package: github.com/jonboulle/clockwork - version: 72f9bd7c4e0c2a40055ab3d0f09654f730cce982 - package: github.com/json-iterator/go version: 1.1.5 -- package: github.com/jteeuwen/go-bindata - version: v3.0.7-72-ga0ff2567cfb709 -- package: github.com/karrick/godirwalk - version: v1.7.5 - package: github.com/kubernetes-sigs/cri-tools version: c465773e3ad8c941d1756c0a467d550b04a8f65b repo: https://github.com/ibuildthecloud/cri-tools.git -- package: github.com/mattn/go-shellwords - version: v1.0.3-20-gf8471b0a71ded0 - package: github.com/mattn/go-sqlite3 version: v1.9.0 - package: github.com/matttproud/golang_protobuf_extensions version: v1.0.0 -- package: github.com/miekg/dns - version: 5d001d020961ae1c184f9f8152fdc73810481677 -- package: github.com/mindprince/gonvml - version: fee913ce8fb235edf54739d259ca0ecc226c7b8a -- package: github.com/mistifyio/go-zfs - version: v2.1.1-5-g1b4ae6fb4e77b0 -- package: github.com/mitchellh/go-wordwrap - version: ad45545899c7b13c020ea92b2072220eefad42b8 - package: github.com/modern-go/concurrent version: 1.0.3 - package: github.com/modern-go/reflect2 version: 1.0.1 -- package: github.com/mrunalp/fileutils - version: 4ee1cc9a80582a0c75febdd5cfa779ee4361cbca -- package: github.com/mxk/go-flowrate - version: cca7078d478f8520f85629ad7c68962d31ed7682 - package: github.com/natefinch/lumberjack version: aee4629129445bbdfb69aa565537dcfa16544311 - package: github.com/opencontainers/go-digest @@ -189,60 +101,28 @@ import: - package: github.com/opencontainers/image-spec version: v1.0.1 - package: github.com/opencontainers/runc - version: 6635b4f0c6af3810594d2770f662f34ddc15b40d + version: 69ae5da6afdcaaf38285a10b36f362e41cb298d6 - package: github.com/opencontainers/runtime-spec version: 5684b8af48c1ac3b1451fa499724e30e3c20a294 - package: github.com/opencontainers/runtime-tools version: v0.6.0 - package: github.com/opencontainers/selinux - version: b6fa367ed7f534f9ba25391cc2d467085dbb445a -- package: github.com/pborman/uuid - version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 -- package: github.com/peterbourgon/diskv - version: v2.0.1 + version: v1.2.1 - package: github.com/pkg/errors version: v0.8.0 -- package: github.com/prometheus/client_golang - version: v0.8.0-83-ge7e903064f5e9e -- package: github.com/prometheus/client_model - version: model-0.0.2-12-gfa8ad6fec33561 -- package: github.com/prometheus/common - version: 13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207 -- package: github.com/prometheus/procfs - version: 65c1f6f8f0fc1e2185eb9863a3bc751496404259 - package: github.com/rancher/norman - version: f75e3607e96e1a5d3cbaf4ee7cea1459cc727f61 + version: 50017efee23caa79542ef685b65a7b783e0a73ca repo: https://github.com/ibuildthecloud/norman.git -- package: github.com/renstrom/dedent - version: v1.0.0-3-g020d11c3b9c0c7 -- package: github.com/robfig/cron - version: v1-53-gdf38d32658d878 -- package: github.com/russross/blackfriday - version: v1.4-2-g300106c228d52c - package: github.com/seccomp/libseccomp-golang version: 32f571b70023028bd57d9288c20efbcb237f3ce0 -- package: github.com/shurcooL/sanitized_anchor_name - version: 10ef21a441db47d8b13ebcc5fd2310f636973c77 -- package: github.com/sigma/go-inotify - version: c87b6cf5033d2c6486046f045eeebdc3d910fd38 - package: github.com/sirupsen/logrus version: v1.0.3 -- package: github.com/spf13/cobra - version: v0.0.1-34-gc439c4fa093711 -- package: github.com/spf13/pflag - version: v1.0.1 - package: github.com/syndtr/gocapability version: db04d3cc01c8b54962a58ec7e491717d06cfcc16 - package: github.com/tchap/go-patricia version: v2.2.6 -- package: github.com/ugorji/go - version: bdcc60b419d136a85cdf2e7cbcac34b3f1cd6e57 - package: github.com/urfave/cli version: 8e01ec4cd3e2d84ab2fe90d8210528ffbb06d8ff -- package: github.com/vishvananda/netlink - version: b2de5d10e38ecce8607e6b438b6d174f389a004e -- package: github.com/vishvananda/netns - version: be1fbeda19366dea804f00efff2dd73a1642fdcc - package: github.com/xeipuuv/gojsonpointer version: 4e3ac2762d5f479393488629ee9370b50873b3a6 - package: github.com/xeipuuv/gojsonreference @@ -266,34 +146,157 @@ import: version: 19e51611da83d6be54ddafce4a4af510cb3e9ea4 - package: golang.org/x/time version: f51c12702a4d776e4c1fa9b0fabab841babae631 -- package: golang.org/x/tools - version: 2382e3994d48b1d22acc2c86bcad0a2aff028e32 - package: google.golang.org/genproto version: d80a6e20e776b0b17a324d0ba1ab50a39c8e8944 - package: google.golang.org/grpc version: v1.12.0 - package: gopkg.in/inf.v0 version: 3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4 -- package: gopkg.in/natefinch/lumberjack.v2 - version: v1.0-16-g20b71e5b60d756 -- package: gopkg.in/square/go-jose.v2 - version: v2.1.6-4-g89060dee6a84df - package: gopkg.in/yaml.v2 version: v2.2.1 +- package: k8s.io/kubernetes + version: v1.14.1-k3s.1 + repo: https://github.com/rancher/k3s.git + transitive: true + staging: true +- package: vbom.ml/util + version: db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 +- package: github.com/mxk/go-flowrate + version: cca7078d478f8520f85629ad7c68962d31ed7682 +- package: github.com/ugorji/go + version: bdcc60b419d136a85cdf2e7cbcac34b3f1cd6e57 +- package: github.com/sigma/go-inotify + version: c87b6cf5033d2c6486046f045eeebdc3d910fd38 +- package: github.com/spf13/cobra + version: v0.0.1-34-gc439c4fa093711 +- package: github.com/liggitt/tabwriter + version: 89fcab3d43de07060e4fd4c1547430ed57e87f24 +- package: github.com/mindprince/gonvml + version: fee913ce8fb235edf54739d259ca0ecc226c7b8a +- package: github.com/mistifyio/go-zfs + version: v2.1.1-5-g1b4ae6fb4e77b0 +- package: github.com/peterbourgon/diskv + version: v2.0.1 +- package: github.com/russross/blackfriday + version: v1.4-2-g300106c228d52c +- package: github.com/inconshreveable/mousetrap + version: v1.0 +- package: github.com/imdario/mergo + version: v0.3.5 +- package: github.com/vishvananda/netns + version: be1fbeda19366dea804f00efff2dd73a1642fdcc +- package: github.com/prometheus/client_golang + version: v0.9.2 +- package: github.com/mattn/go-shellwords + version: v1.0.3-20-gf8471b0a71ded0 +- package: github.com/prometheus/procfs + version: 65c1f6f8f0fc1e2185eb9863a3bc751496404259 +- package: github.com/vishvananda/netlink + version: b2de5d10e38ecce8607e6b438b6d174f389a004e +- package: github.com/chai2010/gettext-go + version: c6fed771bfd517099caf0f7a961671fa8ed08723 +- package: github.com/container-storage-interface/spec + version: v1.1.0 +- package: github.com/hashicorp/golang-lru + version: v0.5.0 +- package: github.com/spf13/pflag + version: v1.0.1 +- package: github.com/shurcooL/sanitized_anchor_name + version: 10ef21a441db47d8b13ebcc5fd2310f636973c77 +- package: github.com/MakeNowJust/heredoc + version: bb23615498cded5e105af4ce27de75b089cbe851 +- package: github.com/prometheus/common + version: v0.2.0 +- package: github.com/coreos/go-semver + version: v0.2.0-9-ge214231b295a8e +- package: github.com/google/cadvisor + version: v0.33.1-k3s.1 + repo: https://github.com/ibuildthecloud/cadvisor.git +- package: github.com/cyphar/filepath-securejoin + version: v0.2.1-1-gae69057f2299fb +- package: github.com/ibuildthecloud/kvsql + version: 0e798b1475327aadf3b8da5d2d1f99bb93dfd667 +- package: github.com/JeffAshton/win_pdh + version: 76bb4ee9f0ab50f77826f2a2ee7fb9d3880d6ec2 +- package: github.com/prometheus/client_model + version: model-0.0.2-12-gfa8ad6fec33561 +- package: github.com/miekg/dns + version: 5d001d020961ae1c184f9f8152fdc73810481677 +- package: github.com/daviddengcn/go-colortext + version: 511bcaf42ccd42c38aba7427b6673277bf19e2a1 +- package: github.com/gregjones/httpcache + version: 787624de3eb7bd915c329cba748687a3b22666a6 +- package: github.com/karrick/godirwalk + version: v1.7.5 - package: k8s.io/gengo version: 51747d6e00da1fc578d5a333a93bb2abcbce7a95 - package: k8s.io/heapster version: v1.2.0-beta.1 +- package: github.com/checkpoint-restore/go-criu + version: v3.11 +- package: github.com/google/btree + version: 7d79101e329e5a3adf994758c578dab82b90c017 +- package: github.com/google/certificate-transparency-go + version: v1.0.21 +- package: github.com/robfig/cron + version: v1-53-gdf38d32658d878 +- package: github.com/mrunalp/fileutils + version: 4ee1cc9a80582a0c75febdd5cfa779ee4361cbca +- package: github.com/Nvveen/Gotty + version: cd527374f1e5bff4938207604a14f2e38a9cf512 +- package: github.com/exponent-io/jsonpath + version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5 +- package: github.com/fsnotify/fsnotify + version: v1.3.1-1-gf12c6236fe7b5c +- package: github.com/jteeuwen/go-bindata + version: v3.0.7-72-ga0ff2567cfb709 +- package: gopkg.in/square/go-jose.v2 + version: v2.1.6-4-g89060dee6a84df - package: k8s.io/klog - version: 8139d8cb77af419532b33dfa7dd09fbc5f1d344f -- package: k8s.io/kubernetes - version: v1.13.5-k3s.1 - repo: https://github.com/rancher/k3s.git - transitive: true - staging: true + version: v0.2.0-14-g8e90cee79f8237 +- package: github.com/munnerz/goautoneg + version: a547fc61f48d567d5b4ec6f8aee5573d8efce11d +- package: github.com/docker/go-units + version: v0.3.1-11-g9e638d38cf6977 +- package: github.com/fatih/camelcase + version: f6a740d52f961c60348ebb109adde9f4635d7540 - package: k8s.io/utils - version: 66066c83e385e385ccc3c964b44fd7dcd413d0ed + version: c2654d5206da6b7b6ace12841e8f359bb89b443c +- package: github.com/coreos/etcd + version: v3.3.10 +- package: github.com/docker/go-connections + version: v0.3.0 +- package: github.com/golang/groupcache + version: 02826c3e79038b59d737d3b1c0a1d937f71a4433 +- package: gopkg.in/natefinch/lumberjack.v2 + version: v1.0-16-g20b71e5b60d756 +- package: github.com/mitchellh/go-wordwrap + version: ad45545899c7b13c020ea92b2072220eefad42b8 +- package: github.com/docker/libnetwork + version: v0.8.0-dev.2-1265-ga9cd636e378982 - package: sigs.k8s.io/yaml version: v1.1.0 -- package: vbom.ml/util - version: db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 +- package: github.com/euank/go-kmsg-parser + version: v2.0.0 +- package: github.com/evanphx/json-patch + version: v4.1.0-19-g5858425f75500d +- package: github.com/lithammer/dedent + version: v1.1.0 +- package: github.com/jonboulle/clockwork + version: 72f9bd7c4e0c2a40055ab3d0f09654f730cce982 +- package: github.com/cloudflare/cfssl + version: 1.3.2-21-g56268a613adfed +- package: github.com/docker/docker + version: docs-v1.12.0-rc4-2016-07-15-9510-ga9fbbdc8dd8794 +- package: github.com/coreos/pkg + version: v4 +- package: github.com/Azure/go-ansiterm + version: d6e3b3328b783f23731bc4d058875b0371ff8109 +- package: github.com/armon/circbuf + version: bbbad097214e2918d8543d5201d12bfd7bca254d +- package: golang.org/x/tools + version: 7f7074d5bcfd282eb16bc382b0bb3da762461985 +- package: github.com/pborman/uuid + version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 +- package: github.com/googleapis/gnostic + version: 0c5108395e2debce0d731cf0287ddf7242066aba diff --git a/vendor.conf b/vendor.conf index 5c50d53b5fc..104d81463f6 100644 --- a/vendor.conf +++ b/vendor.conf @@ -9,9 +9,9 @@ package=github.com/opencontainers/runc/libcontainer/nsenter package=github.com/opencontainers/runc/libcontainer/specconv package=github.com/opencontainers/runc/contrib/cmd/recvtty -k8s.io/kubernetes v1.13.5-k3s.1 https://github.com/rancher/k3s.git transitive=true,staging=true +k8s.io/kubernetes v1.14.1-k3s.1 https://github.com/rancher/k3s.git transitive=true,staging=true -github.com/rancher/norman efb72b594a2a34f2573b9565c6cd9926a1f6ae08 https://github.com/ibuildthecloud/norman.git +github.com/rancher/norman 50017efee23caa79542ef685b65a7b783e0a73ca https://github.com/ibuildthecloud/norman.git github.com/coreos/flannel 823afe66b2266bf71f5bec24e6e28b26d70cfc7c https://github.com/ibuildthecloud/flannel.git github.com/natefinch/lumberjack aee4629129445bbdfb69aa565537dcfa16544311 github.com/gorilla/mux v1.6.2 @@ -36,10 +36,10 @@ github.com/alexflint/go-filemutex 72bdc8eae2aef913234599b837f5dda445ca9bd9 github.com/opencontainers/runtime-spec 5684b8af48c1ac3b1451fa499724e30e3c20a294 # containerd -github.com/containerd/containerd v1.2.4-k3s1 https://github.com/ibuildthecloud/containerd +github.com/containerd/containerd v1.2.6-k3s1 https://github.com/ibuildthecloud/containerd github.com/containerd/go-runc 5a6d9f37cfa36b15efba46dc7ea349fa9b7143c3 github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23 -github.com/containerd/cgroups 5e610833b72089b37d0e615de9a92dfc043757c2 +github.com/containerd/cgroups 4994991857f9b0ae8dc439551e8bebdbb4bf66c1 github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c github.com/containerd/btrfs 2e1aa0ddf94f91fa282b6ed87c23bf0d64911244 @@ -59,7 +59,7 @@ github.com/gogo/protobuf v1.0.0 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef github.com/golang/protobuf v1.1.0 #github.com/opencontainers/runtime-spec eba862dc2470385a233c7507392675cbeadf7353 # v1.0.1-45-geba862d -github.com/opencontainers/runc 6635b4f0c6af3810594d2770f662f34ddc15b40d +github.com/opencontainers/runc 69ae5da6afdcaaf38285a10b36f362e41cb298d6 github.com/sirupsen/logrus v1.0.3 github.com/urfave/cli 7bc6a0acffa589f415f88aca16cc1de5ffd66f9c golang.org/x/net b3756b4b77d7b13260a0a2ec658753cf48922eac @@ -85,11 +85,11 @@ go.etcd.io/bbolt v1.3.1-etcd.8 github.com/kubernetes-sigs/cri-tools c465773e3ad8c941d1756c0a467d550b04a8f65b https://github.com/ibuildthecloud/cri-tools.git # cri dependencies -github.com/containerd/cri c3cf754321fc38c6af5dfd2552fdde0ad192b31d # release/1.2 branch +github.com/containerd/cri eb926cd79d3bac188dcc4ed7694fc9298f8831be # release/1.2 branch github.com/containerd/go-cni 40bcf8ec8acd7372be1d77031d585d5d8e561c90 github.com/blang/semver v3.1.0 github.com/containernetworking/cni v0.6.0 -#github.com/containernetworking/plugins v0.7.0 +#github.com/containernetworking/plugins v0.7.5 github.com/davecgh/go-spew v1.1.0 github.com/docker/distribution 0d3efadf0154c2b8a4e7b6621fff9809655cc580 #github.com/docker/docker 86f080cff0914e9694068ed78d503701667c4c00 @@ -104,7 +104,7 @@ github.com/json-iterator/go 1.1.5 github.com/modern-go/reflect2 1.0.1 github.com/modern-go/concurrent 1.0.3 github.com/opencontainers/runtime-tools v0.6.0 -github.com/opencontainers/selinux b6fa367ed7f534f9ba25391cc2d467085dbb445a +github.com/opencontainers/selinux v1.2.1 github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0 github.com/tchap/go-patricia v2.2.6 github.com/xeipuuv/gojsonpointer 4e3ac2762d5f479393488629ee9370b50873b3a6 diff --git a/vendor/github.com/checkpoint-restore/go-criu/.gitignore b/vendor/github.com/checkpoint-restore/go-criu/.gitignore new file mode 100644 index 00000000000..f1c90e3d5ff --- /dev/null +++ b/vendor/github.com/checkpoint-restore/go-criu/.gitignore @@ -0,0 +1,5 @@ +test/test +test/piggie +test/phaul +image +rpc/rpc.proto diff --git a/vendor/github.com/checkpoint-restore/go-criu/.travis.yml b/vendor/github.com/checkpoint-restore/go-criu/.travis.yml new file mode 100644 index 00000000000..741dbf0a1df --- /dev/null +++ b/vendor/github.com/checkpoint-restore/go-criu/.travis.yml @@ -0,0 +1,25 @@ +language: go +sudo: required +os: + - linux +go: + - "1.8" + - "1.9" + - "1.10" +env: + # Run the tests with CRIU master and criu-dev + - CRIU_BRANCH="master" + - CRIU_BRANCH="criu-dev" +install: + - sudo apt-get update + - sudo apt-get install -y libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libnet-dev libcap-dev + - go get github.com/checkpoint-restore/go-criu + - git clone --single-branch -b ${CRIU_BRANCH} https://github.com/checkpoint-restore/criu.git + - cd criu; make + - sudo install -D -m 755 criu/criu /usr/sbin/ + - cd .. +script: + # This builds the code without running the tests. + - make build phaul test/test test/phaul test/piggie + # Run actual test as root as it uses CRIU. + - sudo make test phaul-test diff --git a/vendor/k8s.io/csi-api/LICENSE b/vendor/github.com/checkpoint-restore/go-criu/LICENSE similarity index 100% rename from vendor/k8s.io/csi-api/LICENSE rename to vendor/github.com/checkpoint-restore/go-criu/LICENSE diff --git a/vendor/github.com/checkpoint-restore/go-criu/Makefile b/vendor/github.com/checkpoint-restore/go-criu/Makefile new file mode 100644 index 00000000000..ee44ee44862 --- /dev/null +++ b/vendor/github.com/checkpoint-restore/go-criu/Makefile @@ -0,0 +1,60 @@ +GO ?= go +CC ?= gcc +ifeq ($(GOPATH),) +export GOPATH := $(shell $(GO) env GOPATH) +endif +FIRST_GOPATH := $(firstword $(subst :, ,$(GOPATH))) +GOBIN := $(shell $(GO) env GOBIN) +ifeq ($(GOBIN),) + GOBIN := $(FIRST_GOPATH)/bin +endif + +all: build test phaul phaul-test + +lint: + @golint . test phaul +build: + @$(GO) build -v + +test/piggie: test/piggie.c + @$(CC) $^ -o $@ + +test/test: test/main.go + @$(GO) build -v -o test/test test/main.go + +test: test/test test/piggie + mkdir -p image + test/piggie + test/test dump `pidof piggie` image + test/test restore image + pkill -9 piggie || : + +phaul: + @cd phaul; go build -v + +test/phaul: test/phaul-main.go + @$(GO) build -v -o test/phaul test/phaul-main.go + +phaul-test: test/phaul test/piggie + rm -rf image + test/piggie + test/phaul `pidof piggie` + pkill -9 piggie || : + +clean: + @rm -f test/test test/piggie test/phaul + @rm -rf image + @rm -f rpc/rpc.proto + +install.tools: + if [ ! -x "$(GOBIN)/golint" ]; then \ + $(GO) get -u golang.org/x/lint/golint; \ + fi + +rpc/rpc.proto: + curl -s https://raw.githubusercontent.com/checkpoint-restore/criu/master/images/rpc.proto -o $@ + +rpc/rpc.pb.go: rpc/rpc.proto + protoc --go_out=. $^ + +.PHONY: build test clean lint phaul diff --git a/vendor/github.com/checkpoint-restore/go-criu/README.md b/vendor/github.com/checkpoint-restore/go-criu/README.md new file mode 100644 index 00000000000..610756dbd57 --- /dev/null +++ b/vendor/github.com/checkpoint-restore/go-criu/README.md @@ -0,0 +1,58 @@ +[![master](https://travis-ci.org/checkpoint-restore/go-criu.svg?branch=master)](https://travis-ci.org/checkpoint-restore/go-criu) + +## go-criu -- Go bindings for [CRIU](https://criu.org/) + +This repository provides Go bindings for CRIU. The code is based on the Go based PHaul +implementation from the CRIU repository. For easier inclusion into other Go projects the +CRIU Go bindings have been moved to this repository. + +The Go bindings provide an easy way to use the CRIU RPC calls from Go without the need +to set up all the infrastructure to make the actual RPC connection to CRIU. + +The following example would print the version of CRIU: +``` + c := criu.MakeCriu() + version, err := c.GetCriuVersion() + fmt.Println(version) +``` +or to just check if at least a certain CRIU version is installed: +``` + c := criu.MakeCriu() + result, err := c.IsCriuAtLeast(31100) +``` + +## How to contribute + +While bug fixes can first be identified via an "issue", that is not required. +It's ok to just open up a PR with the fix, but make sure you include the same +information you would have included in an issue - like how to reproduce it. + +PRs for new features should include some background on what use cases the +new code is trying to address. When possible and when it makes sense, try to +break-up larger PRs into smaller ones - it's easier to review smaller +code changes. But only if those smaller ones make sense as stand-alone PRs. + +Regardless of the type of PR, all PRs should include: +* well documented code changes +* additional testcases. Ideally, they should fail w/o your code change applied +* documentation changes + +Squash your commits into logical pieces of work that might want to be reviewed +separate from the rest of the PRs. Ideally, each commit should implement a +single idea, and the PR branch should pass the tests at every commit. GitHub +makes it easy to review the cumulative effect of many commits; so, when in +doubt, use smaller commits. + +PRs that fix issues should include a reference like `Closes #XXXX` in the +commit message so that github will automatically close the referenced issue +when the PR is merged. + +Contributors must assert that they are in compliance with the [Developer +Certificate of Origin 1.1](http://developercertificate.org/). This is achieved +by adding a "Signed-off-by" line containing the contributor's name and e-mail +to every commit message. Your signature certifies that you wrote the patch or +otherwise have the right to pass it on as an open-source patch. + +### License + +The license of go-criu is the Apache 2.0 license. diff --git a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.pb.go b/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go similarity index 70% rename from vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.pb.go rename to vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go index 1332d3fe3fc..230faace556 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.pb.go +++ b/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: criurpc.proto +// source: rpc/rpc.proto /* -Package criurpc is a generated protocol buffer package. +Package rpc is a generated protocol buffer package. It is generated from these files: - criurpc.proto + rpc/rpc.proto It has these top-level messages: CriuPageServerInfo @@ -24,7 +24,7 @@ It has these top-level messages: CriuResp CriuVersion */ -package criurpc +package rpc import proto "github.com/golang/protobuf/proto" import fmt "fmt" @@ -93,17 +93,19 @@ func (CriuCgMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []i type CriuReqType int32 const ( - CriuReqType_EMPTY CriuReqType = 0 - CriuReqType_DUMP CriuReqType = 1 - CriuReqType_RESTORE CriuReqType = 2 - CriuReqType_CHECK CriuReqType = 3 - CriuReqType_PRE_DUMP CriuReqType = 4 - CriuReqType_PAGE_SERVER CriuReqType = 5 - CriuReqType_NOTIFY CriuReqType = 6 - CriuReqType_CPUINFO_DUMP CriuReqType = 7 - CriuReqType_CPUINFO_CHECK CriuReqType = 8 - CriuReqType_FEATURE_CHECK CriuReqType = 9 - CriuReqType_VERSION CriuReqType = 10 + CriuReqType_EMPTY CriuReqType = 0 + CriuReqType_DUMP CriuReqType = 1 + CriuReqType_RESTORE CriuReqType = 2 + CriuReqType_CHECK CriuReqType = 3 + CriuReqType_PRE_DUMP CriuReqType = 4 + CriuReqType_PAGE_SERVER CriuReqType = 5 + CriuReqType_NOTIFY CriuReqType = 6 + CriuReqType_CPUINFO_DUMP CriuReqType = 7 + CriuReqType_CPUINFO_CHECK CriuReqType = 8 + CriuReqType_FEATURE_CHECK CriuReqType = 9 + CriuReqType_VERSION CriuReqType = 10 + CriuReqType_WAIT_PID CriuReqType = 11 + CriuReqType_PAGE_SERVER_CHLD CriuReqType = 12 ) var CriuReqType_name = map[int32]string{ @@ -118,19 +120,23 @@ var CriuReqType_name = map[int32]string{ 8: "CPUINFO_CHECK", 9: "FEATURE_CHECK", 10: "VERSION", + 11: "WAIT_PID", + 12: "PAGE_SERVER_CHLD", } var CriuReqType_value = map[string]int32{ - "EMPTY": 0, - "DUMP": 1, - "RESTORE": 2, - "CHECK": 3, - "PRE_DUMP": 4, - "PAGE_SERVER": 5, - "NOTIFY": 6, - "CPUINFO_DUMP": 7, - "CPUINFO_CHECK": 8, - "FEATURE_CHECK": 9, - "VERSION": 10, + "EMPTY": 0, + "DUMP": 1, + "RESTORE": 2, + "CHECK": 3, + "PRE_DUMP": 4, + "PAGE_SERVER": 5, + "NOTIFY": 6, + "CPUINFO_DUMP": 7, + "CPUINFO_CHECK": 8, + "FEATURE_CHECK": 9, + "VERSION": 10, + "WAIT_PID": 11, + "PAGE_SERVER_CHLD": 12, } func (x CriuReqType) Enum() *CriuReqType { @@ -855,8 +861,10 @@ type CriuReq struct { // 'features' can be used to query which features // are supported by the installed criu/kernel // via RPC. - Features *CriuFeatures `protobuf:"bytes,5,opt,name=features" json:"features,omitempty"` - XXX_unrecognized []byte `json:"-"` + Features *CriuFeatures `protobuf:"bytes,5,opt,name=features" json:"features,omitempty"` + // 'pid' is used for WAIT_PID + Pid *uint32 `protobuf:"varint,6,opt,name=pid" json:"pid,omitempty"` + XXX_unrecognized []byte `json:"-"` } func (m *CriuReq) Reset() { *m = CriuReq{} } @@ -899,6 +907,13 @@ func (m *CriuReq) GetFeatures() *CriuFeatures { return nil } +func (m *CriuReq) GetPid() uint32 { + if m != nil && m.Pid != nil { + return *m.Pid + } + return 0 +} + type CriuResp struct { Type *CriuReqType `protobuf:"varint,1,req,name=type,enum=CriuReqType" json:"type,omitempty"` Success *bool `protobuf:"varint,2,req,name=success" json:"success,omitempty"` @@ -910,6 +925,7 @@ type CriuResp struct { Features *CriuFeatures `protobuf:"bytes,8,opt,name=features" json:"features,omitempty"` CrErrmsg *string `protobuf:"bytes,9,opt,name=cr_errmsg,json=crErrmsg" json:"cr_errmsg,omitempty"` Version *CriuVersion `protobuf:"bytes,10,opt,name=version" json:"version,omitempty"` + Status *int32 `protobuf:"varint,11,opt,name=status" json:"status,omitempty"` XXX_unrecognized []byte `json:"-"` } @@ -988,6 +1004,13 @@ func (m *CriuResp) GetVersion() *CriuVersion { return nil } +func (m *CriuResp) GetStatus() int32 { + if m != nil && m.Status != nil { + return *m.Status + } + return 0 +} + // Answer for criu_req_type.VERSION requests type CriuVersion struct { Major *int32 `protobuf:"varint,1,req,name=major" json:"major,omitempty"` @@ -1066,121 +1089,123 @@ func init() { proto.RegisterEnum("CriuReqType", CriuReqType_name, CriuReqType_value) } -func init() { proto.RegisterFile("criurpc.proto", fileDescriptor0) } +func init() { proto.RegisterFile("rpc/rpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1795 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xdd, 0x72, 0x5b, 0xb7, - 0x11, 0x0e, 0x29, 0xf1, 0x0f, 0xfc, 0x31, 0x0d, 0xff, 0x04, 0x4e, 0x6a, 0x9b, 0xa1, 0xe3, 0x44, - 0x55, 0x5c, 0x36, 0x61, 0xec, 0xb8, 0xce, 0xb4, 0x17, 0x1e, 0x89, 0x74, 0xd9, 0x48, 0x22, 0x07, - 0x94, 0x3c, 0x93, 0x2b, 0xcc, 0xd1, 0x39, 0x20, 0x05, 0xf3, 0x1c, 0x9c, 0x53, 0x00, 0x54, 0x24, - 0x3f, 0x48, 0x9f, 0xa2, 0xcf, 0xd0, 0x57, 0xea, 0x65, 0x6f, 0x3b, 0xbb, 0x00, 0x65, 0x29, 0xc9, - 0xb4, 0xb9, 0xc3, 0x7e, 0xbb, 0x00, 0xf6, 0x7f, 0x97, 0xb4, 0x63, 0xa3, 0xd6, 0xa6, 0x88, 0x07, - 0x85, 0xc9, 0x5d, 0xde, 0x5f, 0x92, 0x7b, 0x00, 0x88, 0x22, 0x5a, 0x4a, 0x61, 0xa5, 0x39, 0x97, - 0x46, 0x28, 0xbd, 0xc8, 0x29, 0x23, 0xb5, 0x28, 0x49, 0x8c, 0xb4, 0x96, 0x95, 0x7a, 0xa5, 0x9d, - 0x06, 0xdf, 0x90, 0x94, 0x92, 0xed, 0x22, 0x37, 0x8e, 0x95, 0x7b, 0xa5, 0x9d, 0x0a, 0xc7, 0x33, - 0xed, 0x92, 0xad, 0x42, 0x25, 0x6c, 0x0b, 0x21, 0x38, 0xd2, 0x0e, 0x29, 0x2f, 0x12, 0xb6, 0x8d, - 0x40, 0x79, 0x91, 0xf4, 0xff, 0x4c, 0x3a, 0xf8, 0xd1, 0xb9, 0x74, 0x67, 0xa2, 0x88, 0x94, 0xa1, - 0x77, 0x48, 0x45, 0x2d, 0x84, 0xd2, 0xac, 0xd4, 0x2b, 0xef, 0x34, 0xf8, 0xb6, 0x5a, 0x4c, 0x34, - 0xbd, 0x47, 0xaa, 0x6a, 0x21, 0xf2, 0x35, 0x3c, 0x0f, 0x68, 0x45, 0x2d, 0xa6, 0x6b, 0xd7, 0xff, - 0x96, 0xb4, 0xe5, 0x85, 0x13, 0x59, 0xbe, 0xd6, 0x4e, 0x64, 0x51, 0x01, 0x1f, 0xae, 0xe4, 0x65, - 0xb8, 0x0a, 0x47, 0x40, 0xce, 0xa3, 0x34, 0x5c, 0x83, 0x63, 0xff, 0x2d, 0xe9, 0xbc, 0xcb, 0x95, - 0x16, 0x3a, 0xca, 0xa4, 0x2d, 0xa2, 0x58, 0x82, 0x52, 0xda, 0x86, 0x4b, 0x65, 0x6d, 0xe9, 0xc7, - 0xa4, 0xa6, 0xad, 0x58, 0xa8, 0x54, 0x86, 0x7b, 0x55, 0x6d, 0xc7, 0x2a, 0x95, 0xf4, 0x53, 0xd2, - 0x90, 0x17, 0xce, 0x44, 0x22, 0x2f, 0x1c, 0x5a, 0xd5, 0xe0, 0x75, 0x04, 0xa6, 0x85, 0xeb, 0x0f, - 0x08, 0x51, 0xfa, 0x4c, 0x1a, 0xe5, 0xc4, 0x22, 0xf9, 0x15, 0x4d, 0xbc, 0xe9, 0xf0, 0xa0, 0x37, - 0xfd, 0x05, 0x69, 0xc6, 0x4b, 0x93, 0xaf, 0x0b, 0x61, 0xf2, 0xdc, 0x81, 0xff, 0x62, 0x67, 0xd2, - 0xe0, 0x56, 0x3c, 0xa3, 0x4f, 0x23, 0x77, 0x16, 0xb4, 0xc0, 0x73, 0xff, 0x31, 0xa9, 0xad, 0xb5, - 0xba, 0x10, 0x76, 0x45, 0xef, 0x92, 0x8a, 0xd2, 0x79, 0x22, 0xf1, 0x97, 0x36, 0xf7, 0x44, 0xff, - 0xdf, 0x6d, 0xd2, 0x40, 0x9f, 0xe6, 0x85, 0xb3, 0xb4, 0x4f, 0xda, 0x2a, 0x8b, 0x96, 0xd2, 0x8a, - 0x44, 0x19, 0xb1, 0x48, 0x50, 0xb6, 0xc2, 0x9b, 0x1e, 0xdc, 0x57, 0x66, 0x9c, 0x6c, 0xc2, 0x54, - 0xfe, 0x10, 0xa6, 0x27, 0xa4, 0x9d, 0xca, 0xe8, 0x5c, 0x0a, 0xb3, 0xd6, 0x5a, 0xe9, 0x25, 0x1a, - 0x5b, 0xe7, 0x2d, 0x04, 0xb9, 0xc7, 0xe8, 0x23, 0xd2, 0x04, 0xef, 0x07, 0x6d, 0x30, 0xa8, 0x75, - 0x0e, 0x0e, 0x3a, 0xd1, 0xea, 0x62, 0xbe, 0xa2, 0x5f, 0x92, 0x5b, 0x2e, 0x2e, 0x84, 0xb4, 0x2e, - 0x3a, 0x4d, 0x95, 0x3d, 0x93, 0x09, 0xab, 0xa0, 0x4c, 0xc7, 0xc5, 0xc5, 0xe8, 0x03, 0x0a, 0x82, - 0xf2, 0x3c, 0xb2, 0xea, 0x5c, 0x8a, 0x44, 0x9e, 0xab, 0x58, 0x5a, 0x56, 0xf5, 0x82, 0x01, 0xde, - 0xf7, 0x28, 0xf8, 0xdf, 0x9e, 0xc9, 0x34, 0x15, 0xef, 0xf2, 0x53, 0x56, 0x43, 0x91, 0x3a, 0x02, - 0x7f, 0xcb, 0x4f, 0xe9, 0x43, 0x42, 0x20, 0x64, 0x22, 0xcd, 0xe3, 0x95, 0x65, 0x75, 0xaf, 0x0d, - 0x20, 0x07, 0x00, 0xd0, 0x47, 0xa4, 0x91, 0xe6, 0x4b, 0x91, 0xca, 0x73, 0x99, 0xb2, 0x06, 0x98, - 0xfa, 0x7d, 0x69, 0xc8, 0xeb, 0x69, 0xbe, 0x3c, 0x00, 0x88, 0x3e, 0x20, 0x70, 0xf6, 0x51, 0x27, - 0x3e, 0xb5, 0xd3, 0x7c, 0x89, 0x61, 0xff, 0x82, 0x94, 0x0b, 0xcb, 0x9a, 0xbd, 0xd2, 0x4e, 0x73, - 0x78, 0x7f, 0xf0, 0xab, 0x85, 0xc1, 0xcb, 0x85, 0xa5, 0x4f, 0x49, 0x47, 0xe7, 0x4e, 0x2d, 0x2e, - 0x85, 0x8d, 0x8d, 0x2a, 0x9c, 0x65, 0x2d, 0xd4, 0xa2, 0xed, 0xd1, 0xb9, 0x07, 0x21, 0xaa, 0x10, - 0x71, 0xd6, 0xf6, 0x91, 0xc6, 0xe8, 0x3f, 0x24, 0xa4, 0x88, 0x8c, 0xd4, 0x4e, 0xa8, 0x6c, 0xc9, - 0x3a, 0xc8, 0x69, 0x78, 0x64, 0x92, 0x2d, 0xc1, 0x70, 0x67, 0xa2, 0x78, 0x25, 0x32, 0x99, 0xb1, - 0x5b, 0xde, 0x70, 0x04, 0x0e, 0x65, 0x06, 0x77, 0xa3, 0xb5, 0xcb, 0x45, 0x22, 0x93, 0x75, 0xc1, - 0xba, 0xde, 0x70, 0x40, 0xf6, 0x01, 0x80, 0x30, 0xfd, 0x94, 0x9b, 0xd5, 0x26, 0xfe, 0xb7, 0x31, - 0xca, 0x0d, 0x80, 0x7c, 0xf4, 0x1f, 0x12, 0x92, 0x2a, 0xbd, 0x12, 0x46, 0x66, 0x51, 0xc1, 0xa8, - 0xbf, 0x0e, 0x08, 0x07, 0x80, 0x3e, 0x25, 0x15, 0x28, 0x4e, 0xcb, 0xee, 0xf4, 0xb6, 0x76, 0x9a, - 0xc3, 0x5b, 0x83, 0x9b, 0xf5, 0xca, 0x3d, 0x97, 0x3e, 0x21, 0xb5, 0xb8, 0x58, 0x8b, 0x38, 0x2a, - 0xd8, 0xdd, 0x5e, 0x69, 0xa7, 0xfd, 0x3d, 0x79, 0x3e, 0x7c, 0xf5, 0xfc, 0xd5, 0x77, 0x2f, 0x87, - 0xaf, 0x5e, 0xf0, 0x6a, 0x5c, 0xac, 0xf7, 0xa2, 0x82, 0x3e, 0x26, 0xcd, 0x45, 0x6e, 0x62, 0x29, - 0x94, 0x81, 0xbf, 0xee, 0xe1, 0x5f, 0x04, 0xa1, 0x09, 0x20, 0x10, 0x04, 0x79, 0x21, 0x63, 0x11, - 0x67, 0x09, 0xbb, 0xdf, 0xdb, 0x82, 0x20, 0x00, 0xbd, 0x97, 0x41, 0x92, 0xd4, 0xb0, 0xd6, 0xb5, - 0x63, 0x1f, 0xa3, 0x26, 0x9d, 0xc1, 0x8d, 0xda, 0xe7, 0x55, 0x79, 0xe1, 0x0e, 0xb5, 0x83, 0x28, - 0x64, 0x91, 0x86, 0xf8, 0xf8, 0xf2, 0xb2, 0x8c, 0xf9, 0x28, 0x78, 0x74, 0xcf, 0x83, 0xf4, 0x29, - 0xa9, 0xc5, 0x4b, 0x2c, 0x3d, 0xf6, 0x00, 0xdf, 0x6b, 0x0d, 0xae, 0x95, 0x23, 0xaf, 0xc6, 0x4b, - 0x0e, 0x81, 0x79, 0x4c, 0x9a, 0xc6, 0x3a, 0x61, 0xd5, 0x69, 0x0a, 0x75, 0xf0, 0x89, 0x57, 0xd9, - 0x58, 0x37, 0xf7, 0x08, 0xdd, 0xbd, 0x5e, 0xf6, 0xec, 0x53, 0x7c, 0xaa, 0x39, 0xf8, 0x00, 0xf1, - 0x46, 0x38, 0x8f, 0x13, 0xda, 0x23, 0x2d, 0x8c, 0xd4, 0xc6, 0x90, 0xdf, 0xf9, 0xd7, 0x00, 0x1b, - 0x79, 0xe5, 0x1f, 0xfb, 0x9a, 0xb2, 0x67, 0x91, 0x81, 0xef, 0x1e, 0x7a, 0x01, 0x79, 0xe1, 0xe6, - 0x1e, 0xd9, 0x08, 0x64, 0x91, 0x75, 0xd2, 0x58, 0xf6, 0xe8, 0x4a, 0xe0, 0xd0, 0x23, 0xe0, 0x42, - 0xbb, 0x52, 0x05, 0xbe, 0xff, 0xd8, 0xbb, 0x10, 0x68, 0x78, 0x1c, 0xda, 0x97, 0x8e, 0x4e, 0x53, - 0x29, 0x16, 0x96, 0xf5, 0x90, 0x57, 0xf7, 0xc0, 0xd8, 0xd2, 0x1d, 0xd2, 0x0c, 0x95, 0x2c, 0x94, - 0xce, 0xd9, 0x67, 0x68, 0x48, 0x7d, 0x10, 0x30, 0xde, 0x58, 0x63, 0x51, 0x4f, 0x74, 0x4e, 0xff, - 0x42, 0xee, 0xdc, 0x74, 0xb0, 0xc8, 0xa0, 0x09, 0xf5, 0x7b, 0xa5, 0x9d, 0xce, 0xb0, 0xed, 0xf3, - 0x23, 0x5e, 0x22, 0xc8, 0x6f, 0xdf, 0x70, 0xfa, 0x61, 0x9e, 0x48, 0xf8, 0x68, 0x79, 0x96, 0x5b, - 0x27, 0x52, 0x95, 0x29, 0xc7, 0x9e, 0x60, 0xb6, 0xd4, 0xbe, 0xf9, 0xfa, 0xf9, 0x9f, 0x5e, 0xbc, - 0xfc, 0x8e, 0x13, 0xe4, 0x1d, 0x00, 0x8b, 0xee, 0x90, 0x2e, 0x26, 0x8a, 0xb0, 0x71, 0xa4, 0x05, - 0x74, 0x3f, 0xcb, 0x3e, 0x47, 0xb5, 0x3b, 0x88, 0xcf, 0xe3, 0x48, 0xcf, 0x00, 0xa5, 0x9f, 0x40, - 0xde, 0x38, 0x69, 0x74, 0x94, 0xb2, 0xa7, 0xc1, 0xb0, 0x40, 0x63, 0x4e, 0x65, 0x85, 0xbb, 0x14, - 0xda, 0xb2, 0x2f, 0xe0, 0x33, 0x5e, 0x43, 0xfa, 0x08, 0x6c, 0xae, 0xf9, 0x51, 0x60, 0xd9, 0x97, - 0x21, 0xbb, 0x6f, 0x8e, 0x06, 0x5e, 0x05, 0xfa, 0xc8, 0xd2, 0xcf, 0x48, 0x2b, 0x64, 0x47, 0x61, - 0xf2, 0xc2, 0xb2, 0xdf, 0x63, 0x85, 0x86, 0x06, 0x3e, 0x03, 0x88, 0xee, 0x92, 0xdb, 0xd7, 0x45, - 0x7c, 0x27, 0xd9, 0x45, 0xb9, 0x5b, 0xd7, 0xe4, 0xb0, 0xa3, 0x3c, 0x27, 0xf7, 0x83, 0x6c, 0xb2, - 0xce, 0x0a, 0x11, 0xe7, 0xda, 0x99, 0x3c, 0x4d, 0xa5, 0x61, 0x5f, 0xa1, 0xf6, 0x77, 0x3d, 0x77, - 0x7f, 0x9d, 0x15, 0x7b, 0x57, 0x3c, 0xe8, 0xca, 0x0b, 0x23, 0xe5, 0xfb, 0x8d, 0xe3, 0xd9, 0x33, - 0x7c, 0xbd, 0xe5, 0x41, 0xef, 0x63, 0x98, 0xd0, 0x4e, 0x65, 0x12, 0x66, 0xe5, 0x1f, 0xbc, 0xb5, - 0x81, 0xa4, 0x5f, 0x11, 0x0a, 0xfd, 0x18, 0xb3, 0x43, 0x69, 0xb1, 0x48, 0xd5, 0xf2, 0xcc, 0xb1, - 0x01, 0x66, 0x10, 0x74, 0xea, 0xf9, 0x4a, 0x15, 0x13, 0x3d, 0x46, 0x18, 0x0c, 0xfe, 0x49, 0x46, - 0x2b, 0x61, 0x2f, 0x6d, 0xec, 0x52, 0xcb, 0xfe, 0x88, 0x62, 0x4d, 0xc0, 0xe6, 0x1e, 0xc2, 0xc6, - 0x11, 0xbd, 0xbf, 0xc4, 0x5e, 0x68, 0xd9, 0xd7, 0xa1, 0x71, 0x44, 0xef, 0x2f, 0x67, 0x00, 0x60, - 0xb3, 0x76, 0x91, 0x5b, 0x5b, 0xa8, 0x8b, 0x6f, 0xb0, 0xeb, 0xd4, 0x3d, 0x30, 0x4e, 0xc0, 0x59, - 0xb9, 0x29, 0xce, 0x20, 0xac, 0xce, 0x86, 0x6c, 0x66, 0x43, 0xaf, 0x8a, 0x67, 0xcc, 0x9c, 0xf5, - 0x29, 0x0d, 0x29, 0x1f, 0xe7, 0x7a, 0xa1, 0x42, 0x73, 0xfe, 0x16, 0x8d, 0x26, 0x1e, 0x02, 0x6f, - 0xf6, 0x9f, 0x85, 0x25, 0x02, 0x7d, 0x69, 0xa4, 0x2d, 0x20, 0x1f, 0x8c, 0xb4, 0x2e, 0x37, 0x32, - 0xc1, 0x81, 0x5a, 0xe7, 0x57, 0x74, 0xff, 0x29, 0xb9, 0x8d, 0xd2, 0x01, 0xf0, 0x17, 0xc2, 0x08, - 0xf4, 0xc3, 0x11, 0x8e, 0xfd, 0x97, 0xa4, 0x89, 0x62, 0xbe, 0x77, 0xd3, 0xfb, 0xa4, 0xea, 0x9b, - 0x7a, 0x18, 0xd0, 0x81, 0xfa, 0xe5, 0xec, 0xec, 0xff, 0xe0, 0x97, 0x29, 0xb1, 0x90, 0x91, 0x5b, - 0x1b, 0xef, 0x88, 0x4c, 0x66, 0x02, 0xfb, 0xf5, 0x46, 0x9b, 0x4c, 0x66, 0xc7, 0x40, 0xff, 0xcc, - 0x89, 0xe5, 0x9f, 0x39, 0xb1, 0xff, 0xaf, 0x12, 0xa9, 0x07, 0x6d, 0xff, 0x4e, 0xfb, 0x64, 0xdb, - 0x5d, 0x16, 0x7e, 0xdc, 0x77, 0x86, 0x9d, 0xc1, 0x86, 0x21, 0x00, 0xe5, 0xc8, 0xa3, 0x8f, 0xc8, - 0x36, 0xcc, 0x7d, 0x7c, 0xa9, 0x39, 0x24, 0x83, 0xab, 0x4d, 0x80, 0x23, 0x7e, 0x7d, 0x46, 0xad, - 0xe3, 0x18, 0xf6, 0xb8, 0xad, 0x1b, 0x33, 0xca, 0x83, 0xa0, 0xf3, 0x4a, 0xca, 0x42, 0xe4, 0x85, - 0xd4, 0x61, 0xb2, 0xd7, 0x01, 0x98, 0x16, 0x52, 0xd3, 0x5d, 0x52, 0xdf, 0x18, 0x87, 0x13, 0xbd, - 0xb9, 0xd1, 0x65, 0x83, 0xf2, 0x2b, 0x7e, 0xff, 0x3f, 0xe5, 0xb0, 0x8d, 0xa0, 0x9b, 0x7f, 0x8b, - 0x05, 0x8c, 0xd4, 0x36, 0xaa, 0xc1, 0xde, 0x53, 0xe7, 0x1b, 0x92, 0x3e, 0x21, 0xdb, 0x10, 0x62, - 0xd4, 0xf8, 0x6a, 0x12, 0x5d, 0x05, 0x9d, 0x23, 0x93, 0x3e, 0x23, 0xb5, 0x10, 0x59, 0xd4, 0xbb, - 0x39, 0xa4, 0x83, 0x5f, 0x84, 0x9b, 0x6f, 0x44, 0xe8, 0xe7, 0xa4, 0xea, 0x0d, 0x0f, 0x86, 0xb4, - 0x06, 0xd7, 0x82, 0xce, 0x03, 0x2f, 0x2c, 0x00, 0xd5, 0xff, 0xbb, 0x00, 0x3c, 0x80, 0x60, 0x09, - 0x69, 0x8c, 0xce, 0x71, 0x3d, 0xa9, 0xf0, 0x5a, 0x6c, 0x46, 0x40, 0xde, 0xf0, 0x59, 0xfd, 0x7f, - 0xfb, 0x0c, 0x9c, 0xef, 0x9f, 0xc9, 0xec, 0x12, 0x57, 0x95, 0x06, 0xaf, 0xe3, 0x3b, 0x99, 0x5d, - 0xc2, 0x1c, 0x3c, 0x97, 0xc6, 0xaa, 0x5c, 0xe3, 0x9a, 0xd2, 0xdc, 0x74, 0xdc, 0x00, 0xf2, 0x0d, - 0xb7, 0xff, 0x8f, 0x12, 0x69, 0x5d, 0xe7, 0xc0, 0xba, 0x98, 0x45, 0xef, 0x72, 0x13, 0xb2, 0xdc, - 0x13, 0x88, 0x2a, 0x9d, 0x9b, 0xb0, 0x99, 0x7a, 0x02, 0xd0, 0xa5, 0x72, 0x61, 0x77, 0x6f, 0x70, - 0x4f, 0x40, 0x59, 0xd9, 0xf5, 0xa9, 0x5f, 0xa1, 0xb6, 0x43, 0x45, 0x07, 0x1a, 0x6e, 0xe0, 0x2a, - 0x8c, 0x8e, 0xac, 0x70, 0x4f, 0xc0, 0xae, 0x03, 0xcd, 0x14, 0x7d, 0xd7, 0xe0, 0x78, 0xde, 0x15, - 0x41, 0xaf, 0x30, 0x23, 0x28, 0x21, 0xd5, 0xc9, 0x9b, 0xa3, 0x29, 0x1f, 0x75, 0x3f, 0xa2, 0x4d, - 0x52, 0xdb, 0x7b, 0x23, 0x8e, 0xa6, 0x47, 0xa3, 0x6e, 0x89, 0x36, 0x48, 0x65, 0xc6, 0xa7, 0xb3, - 0x79, 0xb7, 0x4c, 0xeb, 0x64, 0x7b, 0x3e, 0x1d, 0x1f, 0x77, 0xb7, 0xe0, 0x34, 0x3e, 0x39, 0x38, - 0xe8, 0x6e, 0xc3, 0xbd, 0xf9, 0x31, 0x9f, 0xec, 0x1d, 0x77, 0x2b, 0x70, 0x6f, 0x7f, 0x34, 0x7e, - 0x7d, 0x72, 0x70, 0xdc, 0xad, 0xee, 0xfe, 0xb3, 0x14, 0x4a, 0x70, 0x93, 0x59, 0xf0, 0xd2, 0xe8, - 0x70, 0x76, 0xfc, 0x63, 0xf7, 0x23, 0xb8, 0xbf, 0x7f, 0x72, 0x38, 0xeb, 0x96, 0xe0, 0x0e, 0x1f, - 0xcd, 0x8f, 0xe1, 0xe3, 0x32, 0x48, 0xec, 0xfd, 0x75, 0xb4, 0xf7, 0x43, 0x77, 0x8b, 0xb6, 0x48, - 0x7d, 0xc6, 0x47, 0x02, 0xa5, 0xb6, 0xe9, 0x2d, 0xd2, 0x9c, 0xbd, 0x7e, 0x33, 0x12, 0xf3, 0x11, - 0x7f, 0x3b, 0xe2, 0xdd, 0x0a, 0x7c, 0x7b, 0x34, 0x3d, 0x9e, 0x8c, 0x7f, 0xec, 0x56, 0x69, 0x97, - 0xb4, 0xf6, 0x66, 0x27, 0x93, 0xa3, 0xf1, 0xd4, 0x8b, 0xd7, 0xe8, 0x6d, 0xd2, 0xde, 0x20, 0xfe, - 0xbd, 0x3a, 0x40, 0xe3, 0xd1, 0xeb, 0xe3, 0x13, 0x3e, 0x0a, 0x50, 0x03, 0xbe, 0x7e, 0x3b, 0xe2, - 0xf3, 0xc9, 0xf4, 0xa8, 0x4b, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x38, 0x55, 0x41, 0x7c, - 0x0d, 0x00, 0x00, + // 1835 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xeb, 0x72, 0x5b, 0xb7, + 0x11, 0x0e, 0x29, 0xf1, 0x06, 0x5e, 0x7c, 0x0c, 0x5f, 0x02, 0xc7, 0xb5, 0xad, 0xd0, 0x51, 0xa2, + 0x2a, 0x2e, 0x93, 0x30, 0x76, 0x5c, 0x67, 0xda, 0x1f, 0x1e, 0x8a, 0x74, 0xd8, 0x48, 0x22, 0x07, + 0xa4, 0xdc, 0xc9, 0x2f, 0xcc, 0xd1, 0x39, 0x20, 0x05, 0xf3, 0xdc, 0x0a, 0x80, 0x8a, 0xe4, 0x97, + 0xe8, 0xbf, 0x3e, 0x57, 0xde, 0xa4, 0xaf, 0xd0, 0xd9, 0x05, 0x28, 0x4b, 0x49, 0x66, 0xd2, 0x7f, + 0xd8, 0x0f, 0xbb, 0xc0, 0xde, 0x77, 0x49, 0x5b, 0x17, 0xd1, 0x57, 0xba, 0x88, 0x7a, 0x85, 0xce, + 0x6d, 0xde, 0x5d, 0x92, 0x7b, 0x91, 0x56, 0x6b, 0x51, 0x84, 0x4b, 0x29, 0x8c, 0xd4, 0xe7, 0x52, + 0x0b, 0x95, 0x2d, 0x72, 0xca, 0x48, 0x2d, 0x8c, 0x63, 0x2d, 0x8d, 0x61, 0xa5, 0x9d, 0xd2, 0x5e, + 0x83, 0x6f, 0x48, 0x4a, 0xc9, 0x76, 0x91, 0x6b, 0xcb, 0xca, 0x3b, 0xa5, 0xbd, 0x0a, 0xc7, 0x33, + 0x0d, 0xc8, 0x56, 0xa1, 0x62, 0xb6, 0x85, 0x10, 0x1c, 0x69, 0x87, 0x94, 0x17, 0x31, 0xdb, 0x46, + 0xa0, 0xbc, 0x88, 0xbb, 0x7f, 0x23, 0x1d, 0xfc, 0xe8, 0x5c, 0xda, 0x33, 0x51, 0x84, 0x4a, 0xd3, + 0x3b, 0xa4, 0xa2, 0x16, 0x42, 0x65, 0xac, 0xb4, 0x53, 0xde, 0x6b, 0xf0, 0x6d, 0xb5, 0x18, 0x67, + 0xf4, 0x1e, 0xa9, 0xaa, 0x85, 0xc8, 0xd7, 0xf0, 0x3c, 0xa0, 0x15, 0xb5, 0x98, 0xac, 0x6d, 0xf7, + 0x5b, 0xd2, 0x96, 0x17, 0x56, 0xa4, 0xf9, 0x3a, 0xb3, 0x22, 0x0d, 0x0b, 0xf8, 0x70, 0x25, 0x2f, + 0xbd, 0x28, 0x1c, 0x01, 0x39, 0x0f, 0x13, 0x2f, 0x06, 0xc7, 0xee, 0x5b, 0xd2, 0x79, 0x97, 0xab, + 0x4c, 0x64, 0x61, 0x2a, 0x4d, 0x11, 0x46, 0x12, 0x94, 0xca, 0x8c, 0x17, 0x2a, 0x67, 0x86, 0x7e, + 0x4c, 0x6a, 0x99, 0x11, 0x0b, 0x95, 0x48, 0x2f, 0x57, 0xcd, 0xcc, 0x48, 0x25, 0x92, 0x3e, 0x24, + 0x0d, 0x79, 0x61, 0x75, 0x28, 0xf2, 0xc2, 0xa2, 0x55, 0x0d, 0x5e, 0x47, 0x60, 0x52, 0xd8, 0x6e, + 0x8f, 0x10, 0x95, 0x9d, 0x49, 0xad, 0xac, 0x58, 0xc4, 0xbf, 0xa3, 0x89, 0x33, 0x1d, 0x1e, 0x74, + 0xa6, 0xbf, 0x20, 0xcd, 0x68, 0xa9, 0xf3, 0x75, 0x21, 0x74, 0x9e, 0x5b, 0xf0, 0x5f, 0x64, 0x75, + 0xe2, 0xdd, 0x8a, 0x67, 0xf4, 0x69, 0x68, 0xcf, 0xbc, 0x16, 0x78, 0xee, 0x3e, 0x21, 0xb5, 0x75, + 0xa6, 0x2e, 0x84, 0x59, 0xd1, 0xbb, 0xa4, 0xa2, 0xb2, 0x3c, 0x96, 0xf8, 0x4b, 0x9b, 0x3b, 0xa2, + 0xfb, 0xdf, 0x36, 0x69, 0xa0, 0x4f, 0xf3, 0xc2, 0x1a, 0xda, 0x25, 0x6d, 0x95, 0x86, 0x4b, 0x69, + 0x44, 0xac, 0xb4, 0x58, 0xc4, 0xc8, 0x5b, 0xe1, 0x4d, 0x07, 0x1e, 0x28, 0x3d, 0x8a, 0x37, 0x61, + 0x2a, 0x7f, 0x08, 0xd3, 0x53, 0xd2, 0x4e, 0x64, 0x78, 0x2e, 0x85, 0x5e, 0x67, 0x99, 0xca, 0x96, + 0x68, 0x6c, 0x9d, 0xb7, 0x10, 0xe4, 0x0e, 0xa3, 0x8f, 0x49, 0x13, 0xbc, 0xef, 0xb5, 0xc1, 0xa0, + 0xd6, 0x39, 0x38, 0xe8, 0x24, 0x53, 0x17, 0xb3, 0x15, 0xfd, 0x82, 0xdc, 0xb2, 0x51, 0x21, 0xa4, + 0xb1, 0xe1, 0x69, 0xa2, 0xcc, 0x99, 0x8c, 0x59, 0x05, 0x79, 0x3a, 0x36, 0x2a, 0x86, 0x1f, 0x50, + 0x60, 0x94, 0xe7, 0xa1, 0x51, 0xe7, 0x52, 0xc4, 0xf2, 0x5c, 0x45, 0xd2, 0xb0, 0xaa, 0x63, 0xf4, + 0xf0, 0x81, 0x43, 0xc1, 0xff, 0xe6, 0x4c, 0x26, 0x89, 0x78, 0x97, 0x9f, 0xb2, 0x1a, 0xb2, 0xd4, + 0x11, 0xf8, 0x47, 0x7e, 0x4a, 0x1f, 0x11, 0x02, 0x21, 0x13, 0x49, 0x1e, 0xad, 0x0c, 0xab, 0x3b, + 0x6d, 0x00, 0x39, 0x04, 0x80, 0x3e, 0x26, 0x8d, 0x24, 0x5f, 0x8a, 0x44, 0x9e, 0xcb, 0x84, 0x35, + 0xc0, 0xd4, 0xef, 0x4b, 0x7d, 0x5e, 0x4f, 0xf2, 0xe5, 0x21, 0x40, 0xf4, 0x01, 0x81, 0xb3, 0x8b, + 0x3a, 0x71, 0xa9, 0x9d, 0xe4, 0x4b, 0x0c, 0xfb, 0xe7, 0xa4, 0x5c, 0x18, 0xd6, 0xdc, 0x29, 0xed, + 0x35, 0xfb, 0xf7, 0x7b, 0xbf, 0x5b, 0x18, 0xbc, 0x5c, 0x18, 0xba, 0x4b, 0x3a, 0x59, 0x6e, 0xd5, + 0xe2, 0x52, 0x98, 0x48, 0xab, 0xc2, 0x1a, 0xd6, 0x42, 0x2d, 0xda, 0x0e, 0x9d, 0x39, 0x10, 0xa2, + 0x0a, 0x11, 0x67, 0x6d, 0x17, 0x69, 0x8c, 0xfe, 0x23, 0x42, 0x8a, 0x50, 0xcb, 0xcc, 0x0a, 0x95, + 0x2e, 0x59, 0x07, 0x6f, 0x1a, 0x0e, 0x19, 0xa7, 0x4b, 0x30, 0xdc, 0xea, 0x30, 0x5a, 0x89, 0x54, + 0xa6, 0xec, 0x96, 0x33, 0x1c, 0x81, 0x23, 0x99, 0x82, 0x6c, 0xb8, 0xb6, 0xb9, 0x88, 0x65, 0xbc, + 0x2e, 0x58, 0xe0, 0x0c, 0x07, 0xe4, 0x00, 0x00, 0x08, 0xd3, 0xcf, 0xb9, 0x5e, 0x6d, 0xe2, 0x7f, + 0x1b, 0xa3, 0xdc, 0x00, 0xc8, 0x45, 0xff, 0x11, 0x21, 0x89, 0xca, 0x56, 0x42, 0xcb, 0x34, 0x2c, + 0x18, 0x75, 0xe2, 0x80, 0x70, 0x00, 0xe8, 0x2e, 0xa9, 0x40, 0x71, 0x1a, 0x76, 0x67, 0x67, 0x6b, + 0xaf, 0xd9, 0xbf, 0xd5, 0xbb, 0x59, 0xaf, 0xdc, 0xdd, 0xd2, 0xa7, 0xa4, 0x16, 0x15, 0x6b, 0x11, + 0x85, 0x05, 0xbb, 0xbb, 0x53, 0xda, 0x6b, 0x7f, 0x4f, 0x9e, 0xf7, 0x5f, 0x3d, 0x7f, 0xf5, 0xdd, + 0xcb, 0xfe, 0xab, 0x17, 0xbc, 0x1a, 0x15, 0xeb, 0x41, 0x58, 0xd0, 0x27, 0xa4, 0xb9, 0xc8, 0x75, + 0x24, 0x85, 0xd2, 0xf0, 0xd7, 0x3d, 0xfc, 0x8b, 0x20, 0x34, 0x06, 0x04, 0x82, 0x20, 0x2f, 0x64, + 0x24, 0xa2, 0x34, 0x66, 0xf7, 0x77, 0xb6, 0x20, 0x08, 0x40, 0x0f, 0x52, 0x48, 0x92, 0x1a, 0xd6, + 0x7a, 0x66, 0xd9, 0xc7, 0xa8, 0x49, 0xa7, 0x77, 0xa3, 0xf6, 0x79, 0x55, 0x5e, 0xd8, 0xa3, 0xcc, + 0x42, 0x14, 0xd2, 0x30, 0x83, 0xf8, 0xb8, 0xf2, 0x32, 0x8c, 0xb9, 0x28, 0x38, 0x74, 0xe0, 0x40, + 0xba, 0x4b, 0x6a, 0xd1, 0x12, 0x4b, 0x8f, 0x3d, 0xc0, 0xf7, 0x5a, 0xbd, 0x6b, 0xe5, 0xc8, 0xab, + 0xd1, 0x92, 0x43, 0x60, 0x9e, 0x90, 0xa6, 0x36, 0x56, 0x18, 0x75, 0x9a, 0x40, 0x1d, 0x7c, 0xe2, + 0x54, 0xd6, 0xc6, 0xce, 0x1c, 0x42, 0xf7, 0xaf, 0x97, 0x3d, 0x7b, 0x88, 0x4f, 0x35, 0x7b, 0x1f, + 0x20, 0xde, 0xf0, 0xe7, 0x51, 0x4c, 0x77, 0x48, 0x0b, 0x23, 0xb5, 0x31, 0xe4, 0x4f, 0xee, 0x35, + 0xc0, 0x86, 0x4e, 0xf9, 0x27, 0xae, 0xa6, 0xcc, 0x59, 0xa8, 0xe1, 0xbb, 0x47, 0x8e, 0x41, 0x5e, + 0xd8, 0x99, 0x43, 0x36, 0x0c, 0x69, 0x68, 0xac, 0xd4, 0x86, 0x3d, 0xbe, 0x62, 0x38, 0x72, 0x08, + 0xb8, 0xd0, 0xac, 0x54, 0x81, 0xef, 0x3f, 0x71, 0x2e, 0x04, 0x1a, 0x1e, 0x87, 0xf6, 0x95, 0x85, + 0xa7, 0x89, 0x14, 0x0b, 0xc3, 0x76, 0xf0, 0xae, 0xee, 0x80, 0x91, 0xa1, 0x7b, 0xa4, 0xe9, 0x2b, + 0x59, 0xa8, 0x2c, 0x67, 0x9f, 0xa2, 0x21, 0xf5, 0x9e, 0xc7, 0x78, 0x63, 0x8d, 0x45, 0x3d, 0xce, + 0x72, 0xfa, 0x77, 0x72, 0xe7, 0xa6, 0x83, 0x45, 0x0a, 0x4d, 0xa8, 0xbb, 0x53, 0xda, 0xeb, 0xf4, + 0xdb, 0x2e, 0x3f, 0xa2, 0x25, 0x82, 0xfc, 0xf6, 0x0d, 0xa7, 0x1f, 0xe5, 0xb1, 0x84, 0x8f, 0x96, + 0x67, 0xb9, 0xb1, 0x22, 0x51, 0xa9, 0xb2, 0xec, 0x29, 0x66, 0x4b, 0xed, 0x9b, 0xaf, 0x9f, 0xff, + 0xf5, 0xc5, 0xcb, 0xef, 0x38, 0xc1, 0xbb, 0x43, 0xb8, 0xa2, 0x7b, 0x24, 0xc0, 0x44, 0x11, 0x26, + 0x0a, 0x33, 0x01, 0xdd, 0xcf, 0xb0, 0xcf, 0x50, 0xed, 0x0e, 0xe2, 0xb3, 0x28, 0xcc, 0xa6, 0x80, + 0xd2, 0x4f, 0x20, 0x6f, 0xac, 0xd4, 0x59, 0x98, 0xb0, 0x5d, 0x6f, 0x98, 0xa7, 0x31, 0xa7, 0xd2, + 0xc2, 0x5e, 0x8a, 0xcc, 0xb0, 0xcf, 0xe1, 0x33, 0x5e, 0x43, 0xfa, 0x18, 0x6c, 0xae, 0xb9, 0x51, + 0x60, 0xd8, 0x17, 0x3e, 0xbb, 0x6f, 0x8e, 0x06, 0x5e, 0x05, 0xfa, 0xd8, 0xd0, 0x4f, 0x49, 0xcb, + 0x67, 0x47, 0xa1, 0xf3, 0xc2, 0xb0, 0x3f, 0x63, 0x85, 0xfa, 0x06, 0x3e, 0x05, 0x88, 0xee, 0x93, + 0xdb, 0xd7, 0x59, 0x5c, 0x27, 0xd9, 0x47, 0xbe, 0x5b, 0xd7, 0xf8, 0xb0, 0xa3, 0x3c, 0x27, 0xf7, + 0x3d, 0x6f, 0xbc, 0x4e, 0x0b, 0x11, 0xe5, 0x99, 0xd5, 0x79, 0x92, 0x48, 0xcd, 0xbe, 0x44, 0xed, + 0xef, 0xba, 0xdb, 0x83, 0x75, 0x5a, 0x0c, 0xae, 0xee, 0xa0, 0x2b, 0x2f, 0xb4, 0x94, 0xef, 0x37, + 0x8e, 0x67, 0xcf, 0xf0, 0xf5, 0x96, 0x03, 0x9d, 0x8f, 0x61, 0x42, 0x5b, 0x95, 0x4a, 0x98, 0x95, + 0x7f, 0x71, 0xd6, 0x7a, 0x92, 0x7e, 0x49, 0x28, 0xf4, 0x63, 0xcc, 0x0e, 0x95, 0x89, 0x45, 0xa2, + 0x96, 0x67, 0x96, 0xf5, 0x30, 0x83, 0xa0, 0x53, 0xcf, 0x56, 0xaa, 0x18, 0x67, 0x23, 0x84, 0xc1, + 0xe0, 0x9f, 0x65, 0xb8, 0x12, 0xe6, 0xd2, 0x44, 0x36, 0x31, 0xec, 0x2b, 0x64, 0x6b, 0x02, 0x36, + 0x73, 0x10, 0x36, 0x8e, 0xf0, 0xfd, 0x25, 0xf6, 0x42, 0xc3, 0xbe, 0xf6, 0x8d, 0x23, 0x7c, 0x7f, + 0x39, 0x05, 0x00, 0x9b, 0xb5, 0x0d, 0xed, 0xda, 0x40, 0x5d, 0x7c, 0x83, 0x5d, 0xa7, 0xee, 0x80, + 0x51, 0x0c, 0xce, 0xca, 0x75, 0x71, 0x06, 0x61, 0xb5, 0xc6, 0x67, 0x33, 0xeb, 0x3b, 0x55, 0xdc, + 0xc5, 0xd4, 0x1a, 0x97, 0xd2, 0x90, 0xf2, 0x51, 0x9e, 0x2d, 0x94, 0x6f, 0xce, 0xdf, 0xa2, 0xd1, + 0xc4, 0x41, 0xe0, 0xcd, 0xee, 0x33, 0xbf, 0x44, 0xa0, 0x2f, 0xb5, 0x34, 0x05, 0xe4, 0x83, 0x96, + 0xc6, 0xe6, 0x5a, 0xc6, 0x38, 0x50, 0xeb, 0xfc, 0x8a, 0xee, 0xee, 0x92, 0xdb, 0xc8, 0xed, 0x01, + 0x27, 0xe0, 0x47, 0xa0, 0x1b, 0x8e, 0x70, 0xec, 0xbe, 0x24, 0x4d, 0x64, 0x73, 0xbd, 0x9b, 0xde, + 0x27, 0x55, 0xd7, 0xd4, 0xfd, 0x80, 0xf6, 0xd4, 0x6f, 0x67, 0x67, 0xf7, 0x47, 0xd2, 0x46, 0xc1, + 0x85, 0x0c, 0xed, 0x5a, 0x3b, 0x47, 0xa4, 0x32, 0x15, 0xd8, 0xaf, 0x37, 0xda, 0xa4, 0x32, 0x9d, + 0x03, 0xfd, 0x2b, 0x27, 0x96, 0x7f, 0xe5, 0xc4, 0xee, 0x2f, 0x25, 0x52, 0xf7, 0xda, 0xfe, 0x8b, + 0x76, 0xc9, 0xb6, 0xbd, 0x2c, 0xdc, 0xb8, 0xef, 0xf4, 0x3b, 0xbd, 0xcd, 0x85, 0x00, 0x94, 0xe3, + 0x1d, 0x7d, 0x4c, 0xb6, 0x61, 0xee, 0xe3, 0x4b, 0xcd, 0x3e, 0xe9, 0x5d, 0x6d, 0x02, 0x1c, 0xf1, + 0xeb, 0x33, 0x6a, 0x1d, 0x45, 0xb0, 0xc7, 0x6d, 0xdd, 0x98, 0x51, 0x0e, 0x04, 0x9d, 0x57, 0x52, + 0x16, 0x22, 0x2f, 0x64, 0xe6, 0x27, 0x7b, 0x1d, 0x80, 0x49, 0x21, 0x33, 0xba, 0x4f, 0xea, 0x1b, + 0xe3, 0x70, 0xa2, 0x37, 0x37, 0xba, 0x6c, 0x50, 0x7e, 0x75, 0xbf, 0xf1, 0x4f, 0x15, 0x53, 0x11, + 0xfd, 0xf3, 0xef, 0x2d, 0xbf, 0x9f, 0xa0, 0xe3, 0xff, 0x1f, 0x9b, 0x18, 0xa9, 0x6d, 0x94, 0x85, + 0x4d, 0xa8, 0xce, 0x37, 0x24, 0x7d, 0x4a, 0xb6, 0x21, 0xe8, 0x68, 0xc3, 0xd5, 0x6c, 0xba, 0x4a, + 0x03, 0x8e, 0x97, 0xf4, 0x19, 0xa9, 0xf9, 0x58, 0xa3, 0x25, 0xcd, 0x3e, 0xed, 0xfd, 0x26, 0x01, + 0xf8, 0x86, 0x85, 0x7e, 0x46, 0xaa, 0xce, 0x15, 0xde, 0xb4, 0x56, 0xef, 0x5a, 0x1a, 0x70, 0x7f, + 0xe7, 0x57, 0x82, 0xea, 0x1f, 0xae, 0x04, 0x0f, 0x20, 0x7c, 0x42, 0x6a, 0x9d, 0xe5, 0xb8, 0xb0, + 0x54, 0x78, 0x2d, 0xd2, 0x43, 0x20, 0x6f, 0x78, 0xb1, 0xfe, 0x07, 0x5e, 0x7c, 0x08, 0x2e, 0x83, + 0x67, 0x52, 0xb3, 0xc4, 0xe5, 0xa5, 0xc1, 0xeb, 0xf8, 0x4e, 0x6a, 0x96, 0x30, 0x19, 0xcf, 0xa5, + 0x36, 0x2a, 0xcf, 0x70, 0x71, 0x69, 0x6e, 0x7a, 0xb0, 0x07, 0xf9, 0xe6, 0x16, 0x73, 0x18, 0x0b, + 0x10, 0x77, 0x99, 0x0a, 0xf7, 0x54, 0xf7, 0x3f, 0x25, 0xd2, 0xba, 0x2e, 0x01, 0x8b, 0x65, 0x1a, + 0xbe, 0xcb, 0xb5, 0xaf, 0x07, 0x47, 0x20, 0xaa, 0xb2, 0x5c, 0xfb, 0x1d, 0xd6, 0x11, 0x80, 0x2e, + 0x95, 0xf5, 0x5b, 0x7e, 0x83, 0x3b, 0x02, 0x0a, 0xd0, 0xac, 0x4f, 0xdd, 0xb2, 0xb5, 0xed, 0x6b, + 0xdf, 0xd3, 0x20, 0x81, 0x4b, 0x33, 0x3a, 0xb8, 0xc2, 0x1d, 0x01, 0x5b, 0x11, 0xb4, 0x5d, 0xf4, + 0x69, 0x83, 0xe3, 0x79, 0x5f, 0x78, 0xbd, 0xfc, 0x34, 0xa1, 0x84, 0x54, 0xc7, 0x6f, 0x8e, 0x27, + 0x7c, 0x18, 0x7c, 0x44, 0x9b, 0xa4, 0x36, 0x78, 0x23, 0x8e, 0x27, 0xc7, 0xc3, 0xa0, 0x44, 0x1b, + 0xa4, 0x32, 0xe5, 0x93, 0xe9, 0x2c, 0x28, 0xd3, 0x3a, 0xd9, 0x9e, 0x4d, 0x46, 0xf3, 0x60, 0x0b, + 0x4e, 0xa3, 0x93, 0xc3, 0xc3, 0x60, 0x1b, 0xe4, 0x66, 0x73, 0x3e, 0x1e, 0xcc, 0x83, 0x0a, 0xc8, + 0x1d, 0x0c, 0x47, 0xaf, 0x4f, 0x0e, 0xe7, 0x41, 0x75, 0xff, 0x97, 0x92, 0x2f, 0xd6, 0x4d, 0xc6, + 0xc1, 0x4b, 0xc3, 0xa3, 0xe9, 0xfc, 0xa7, 0xe0, 0x23, 0x90, 0x3f, 0x38, 0x39, 0x9a, 0x06, 0x25, + 0x90, 0xe1, 0xc3, 0xd9, 0x1c, 0x3e, 0x2e, 0x03, 0xc7, 0xe0, 0x87, 0xe1, 0xe0, 0xc7, 0x60, 0x8b, + 0xb6, 0x48, 0x7d, 0xca, 0x87, 0x02, 0xb9, 0xb6, 0xe9, 0x2d, 0xd2, 0x9c, 0xbe, 0x7e, 0x33, 0x14, + 0xb3, 0x21, 0x7f, 0x3b, 0xe4, 0x41, 0x05, 0xbe, 0x3d, 0x9e, 0xcc, 0xc7, 0xa3, 0x9f, 0x82, 0x2a, + 0x0d, 0x48, 0x6b, 0x30, 0x3d, 0x19, 0x1f, 0x8f, 0x26, 0x8e, 0xbd, 0x46, 0x6f, 0x93, 0xf6, 0x06, + 0x71, 0xef, 0xd5, 0x01, 0x1a, 0x0d, 0x5f, 0xcf, 0x4f, 0xf8, 0xd0, 0x43, 0x0d, 0xf8, 0xfa, 0xed, + 0x90, 0xcf, 0xc6, 0x93, 0xe3, 0x80, 0xc0, 0x7f, 0xff, 0x7c, 0x3d, 0x9e, 0x8b, 0xe9, 0xf8, 0x20, + 0x68, 0xd2, 0xbb, 0x24, 0xb8, 0xf6, 0x9f, 0x18, 0xfc, 0x70, 0x78, 0x10, 0xb4, 0xfe, 0x17, 0x00, + 0x00, 0xff, 0xff, 0xf8, 0x9f, 0x0e, 0x7d, 0xca, 0x0d, 0x00, 0x00, } diff --git a/vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md b/vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md index e96ebc79218..fd1ac842e3c 100644 --- a/vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md +++ b/vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md @@ -1,10 +1,14 @@ # How to Contribute +This document outlines some of the requirements and conventions for contributing to the Container Storage Interface, including development workflow, commit message formatting, contact points, and other resources to make it easier to get your contribution accepted. + +## Licence and CLA + CSI is under [Apache 2.0](LICENSE) and accepts contributions via GitHub pull requests. -Contributions require signing an individual or Corporate CLA available [here](https://github.com/container-storage-interface/spec/blob/master/CCLA.pdf) which should be signed and mailed to the [mailing list]( https://groups.google.com/forum/#!topic/container-storage-interface-community/). - -This document outlines some of the conventions on development workflow, commit message formatting, contact points and other resources to make it easier to get your contribution accepted. +Before contributing to the Container Storage Interface, contributors MUST sign the CLA available [here](https://github.com/container-storage-interface/spec/blob/master/CCLA.pdf). +The CLA MAY be signed on behalf of a company, possibly covering multiple contributors, or as an individual (put "Individual" for "Corporation name"). +The completed CLA MUST be mailed to the CSI Approvers [mailing list](container-storage-interface-approvers@googlegroups.com). ## Markdown style diff --git a/vendor/github.com/container-storage-interface/spec/VERSION b/vendor/github.com/container-storage-interface/spec/VERSION index 3eefcb9dd5b..9084fa2f716 100644 --- a/vendor/github.com/container-storage-interface/spec/VERSION +++ b/vendor/github.com/container-storage-interface/spec/VERSION @@ -1 +1 @@ -1.0.0 +1.1.0 diff --git a/vendor/github.com/container-storage-interface/spec/csi.proto b/vendor/github.com/container-storage-interface/spec/csi.proto index ec5e379f3f8..4c4d225bf58 100644 --- a/vendor/github.com/container-storage-interface/spec/csi.proto +++ b/vendor/github.com/container-storage-interface/spec/csi.proto @@ -57,6 +57,9 @@ service Controller { rpc ListSnapshots (ListSnapshotsRequest) returns (ListSnapshotsResponse) {} + + rpc ControllerExpandVolume (ControllerExpandVolumeRequest) + returns (ControllerExpandVolumeResponse) {} } service Node { @@ -75,6 +78,11 @@ service Node { rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest) returns (NodeGetVolumeStatsResponse) {} + + rpc NodeExpandVolume(NodeExpandVolumeRequest) + returns (NodeExpandVolumeResponse) {} + + rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) returns (NodeGetCapabilitiesResponse) {} @@ -116,7 +124,6 @@ message PluginCapability { message Service { enum Type { UNKNOWN = 0; - // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for // the ControllerService. Plugins SHOULD provide this capability. // In rare cases certain plugins MAY wish to omit the @@ -138,9 +145,56 @@ message PluginCapability { Type type = 1; } + message VolumeExpansion { + enum Type { + UNKNOWN = 0; + + // ONLINE indicates that volumes may be expanded when published to + // a node. When a Plugin implements this capability it MUST + // implement either the EXPAND_VOLUME controller capability or the + // EXPAND_VOLUME node capability or both. When a plugin supports + // ONLINE volume expansion and also has the EXPAND_VOLUME + // controller capability then the plugin MUST support expansion of + // volumes currently published and available on a node. When a + // plugin supports ONLINE volume expansion and also has the + // EXPAND_VOLUME node capability then the plugin MAY support + // expansion of node-published volume via NodeExpandVolume. + // + // Example 1: Given a shared filesystem volume (e.g. GlusterFs), + // the Plugin may set the ONLINE volume expansion capability and + // implement ControllerExpandVolume but not NodeExpandVolume. + // + // Example 2: Given a block storage volume type (e.g. EBS), the + // Plugin may set the ONLINE volume expansion capability and + // implement both ControllerExpandVolume and NodeExpandVolume. + // + // Example 3: Given a Plugin that supports volume expansion only + // upon a node, the Plugin may set the ONLINE volume + // expansion capability and implement NodeExpandVolume but not + // ControllerExpandVolume. + ONLINE = 1; + + // OFFLINE indicates that volumes currently published and + // available on a node SHALL NOT be expanded via + // ControllerExpandVolume. When a plugin supports OFFLINE volume + // expansion it MUST implement either the EXPAND_VOLUME controller + // capability or both the EXPAND_VOLUME controller capability and + // the EXPAND_VOLUME node capability. + // + // Example 1: Given a block storage volume type (e.g. Azure Disk) + // that does not support expansion of "node-attached" (i.e. + // controller-published) volumes, the Plugin may indicate + // OFFLINE volume expansion support and implement both + // ControllerExpandVolume and NodeExpandVolume. + OFFLINE = 2; + } + Type type = 1; + } + oneof type { // Service that the plugin supports. Service service = 1; + VolumeExpansion volume_expansion = 2; } } message ProbeRequest { @@ -236,7 +290,7 @@ message CreateVolumeRequest { // If specified, the new volume will be pre-populated with data from // this source. This field is OPTIONAL. VolumeContentSource volume_content_source = 6; - + // Specifies where (regions, zones, racks, etc.) the provisioned // volume MUST be accessible from. // An SP SHALL advertise the requirements for topological @@ -420,7 +474,7 @@ message Volume { // Example 2: // accessible_topology = // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"} + // {"region": "R1", "zone": "Z3"} // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" // in the "region" "R1". repeated Topology accessible_topology = 5; @@ -431,15 +485,15 @@ message TopologyRequirement { // accessible from. // This field is OPTIONAL. If TopologyRequirement is specified either // requisite or preferred or both MUST be specified. - // + // // If requisite is specified, the provisioned volume MUST be // accessible from at least one of the requisite topologies. - // + // // Given // x = number of topologies provisioned volume is accessible from // n = number of requisite topologies // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 - // If x==n, than the SP MUST make the provisioned volume available to + // If x==n, then the SP MUST make the provisioned volume available to // all topologies from the list of requisite topologies. If it is // unable to do so, the SP MUST fail the CreateVolume call. // For example, if a volume should be accessible from a single zone, @@ -454,7 +508,7 @@ message TopologyRequirement { // then the provisioned volume MUST be accessible from the "region" // "R1" and both "zone" "Z2" and "zone" "Z3". // - // If xn, than the SP MUST make the provisioned volume available from + // If x>n, then the SP MUST make the provisioned volume available from // all topologies from the list of requisite topologies and MAY choose // the remaining x-n unique topologies from the list of all possible // topologies. If it is unable to do so, the SP MUST fail the @@ -490,7 +544,7 @@ message TopologyRequirement { // // This field is OPTIONAL. If TopologyRequirement is specified either // requisite or preferred or both MUST be specified. - // + // // An SP MUST attempt to make the provisioned volume available using // the preferred topologies in order from first to last. // @@ -505,7 +559,7 @@ message TopologyRequirement { // If the list of requisite topologies is specified and the SP is // unable to to make the provisioned volume available from any of the // requisite topologies it MUST fail the CreateVolume call. - // + // // Example 1: // Given a volume should be accessible from a single zone, and // requisite = @@ -817,14 +871,19 @@ message ControllerServiceCapability { // snapshot. CREATE_DELETE_SNAPSHOT = 5; LIST_SNAPSHOTS = 6; + // Plugins supporting volume cloning at the storage level MAY // report this capability. The source volume MUST be managed by // the same plugin. Not all volume sources and parameters // combinations MAY work. CLONE_VOLUME = 7; + // Indicates the SP supports ControllerPublishVolume.readonly // field. PUBLISH_READONLY = 8; + + // See VolumeExpansion for details. + EXPAND_VOLUME = 9; } Type type = 1; @@ -967,6 +1026,28 @@ message ListSnapshotsResponse { // An empty string is equal to an unspecified field value. string next_token = 2; } +message ControllerExpandVolumeRequest { + // The ID of the volume to expand. This field is REQUIRED. + string volume_id = 1; + + // This allows CO to specify the capacity requirements of the volume + // after expansion. This field is REQUIRED. + CapacityRange capacity_range = 2; + + // Secrets required by the plugin for expanding the volume. + // This field is OPTIONAL. + map secrets = 3 [(csi_secret) = true]; +} + +message ControllerExpandVolumeResponse { + // Capacity of volume after expansion. This field is REQUIRED. + int64 capacity_bytes = 1; + + // Whether node expansion is required for the volume. When true + // the CO MUST make NodeExpandVolume RPC call on the node. This field + // is REQUIRED. + bool node_expansion_required = 2; +} message NodeStageVolumeRequest { // The ID of the volume to publish. This field is REQUIRED. string volume_id = 1; @@ -1151,6 +1232,8 @@ message NodeServiceCapability { // then it MUST implement NodeGetVolumeStats RPC // call for fetching volume statistics. GET_VOLUME_STATS = 2; + // See VolumeExpansion for details. + EXPAND_VOLUME = 3; } Type type = 1; @@ -1196,8 +1279,28 @@ message NodeGetInfoResponse { // // Example 1: // accessible_topology = - // {"region": "R1", "zone": "R2"} + // {"region": "R1", "zone": "Z2"} // Indicates the node exists within the "region" "R1" and the "zone" // "Z2". Topology accessible_topology = 3; } +message NodeExpandVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path on which volume is available. This field is REQUIRED. + string volume_path = 2; + + // This allows CO to specify the capacity requirements of the volume + // after expansion. If capacity_range is omitted then a plugin MAY + // inspect the file system of the volume to determine the maximum + // capacity to which the volume can be expanded. In such cases a + // plugin MAY expand the volume to its maximum capacity. + // This field is OPTIONAL. + CapacityRange capacity_range = 3; +} + +message NodeExpandVolumeResponse { + // The capacity of the volume in bytes. This field is OPTIONAL. + int64 capacity_bytes = 1; +} diff --git a/vendor/github.com/container-storage-interface/spec/lib/go/csi/csi.pb.go b/vendor/github.com/container-storage-interface/spec/lib/go/csi/csi.pb.go index 0652b822f77..d84db2fca17 100644 --- a/vendor/github.com/container-storage-interface/spec/lib/go/csi/csi.pb.go +++ b/vendor/github.com/container-storage-interface/spec/lib/go/csi/csi.pb.go @@ -63,7 +63,68 @@ func (x PluginCapability_Service_Type) String() string { return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) } func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4, 0, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{4, 0, 0} +} + +type PluginCapability_VolumeExpansion_Type int32 + +const ( + PluginCapability_VolumeExpansion_UNKNOWN PluginCapability_VolumeExpansion_Type = 0 + // ONLINE indicates that volumes may be expanded when published to + // a node. When a Plugin implements this capability it MUST + // implement either the EXPAND_VOLUME controller capability or the + // EXPAND_VOLUME node capability or both. When a plugin supports + // ONLINE volume expansion and also has the EXPAND_VOLUME + // controller capability then the plugin MUST support expansion of + // volumes currently published and available on a node. When a + // plugin supports ONLINE volume expansion and also has the + // EXPAND_VOLUME node capability then the plugin MAY support + // expansion of node-published volume via NodeExpandVolume. + // + // Example 1: Given a shared filesystem volume (e.g. GlusterFs), + // the Plugin may set the ONLINE volume expansion capability and + // implement ControllerExpandVolume but not NodeExpandVolume. + // + // Example 2: Given a block storage volume type (e.g. EBS), the + // Plugin may set the ONLINE volume expansion capability and + // implement both ControllerExpandVolume and NodeExpandVolume. + // + // Example 3: Given a Plugin that supports volume expansion only + // upon a node, the Plugin may set the ONLINE volume + // expansion capability and implement NodeExpandVolume but not + // ControllerExpandVolume. + PluginCapability_VolumeExpansion_ONLINE PluginCapability_VolumeExpansion_Type = 1 + // OFFLINE indicates that volumes currently published and + // available on a node SHALL NOT be expanded via + // ControllerExpandVolume. When a plugin supports OFFLINE volume + // expansion it MUST implement either the EXPAND_VOLUME controller + // capability or both the EXPAND_VOLUME controller capability and + // the EXPAND_VOLUME node capability. + // + // Example 1: Given a block storage volume type (e.g. Azure Disk) + // that does not support expansion of "node-attached" (i.e. + // controller-published) volumes, the Plugin may indicate + // OFFLINE volume expansion support and implement both + // ControllerExpandVolume and NodeExpandVolume. + PluginCapability_VolumeExpansion_OFFLINE PluginCapability_VolumeExpansion_Type = 2 +) + +var PluginCapability_VolumeExpansion_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ONLINE", + 2: "OFFLINE", +} +var PluginCapability_VolumeExpansion_Type_value = map[string]int32{ + "UNKNOWN": 0, + "ONLINE": 1, + "OFFLINE": 2, +} + +func (x PluginCapability_VolumeExpansion_Type) String() string { + return proto.EnumName(PluginCapability_VolumeExpansion_Type_name, int32(x)) +} +func (PluginCapability_VolumeExpansion_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{4, 1, 0} } type VolumeCapability_AccessMode_Mode int32 @@ -107,7 +168,7 @@ func (x VolumeCapability_AccessMode_Mode) String() string { return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) } func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 2, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{10, 2, 0} } type ControllerServiceCapability_RPC_Type int32 @@ -132,6 +193,8 @@ const ( // Indicates the SP supports ControllerPublishVolume.readonly // field. ControllerServiceCapability_RPC_PUBLISH_READONLY ControllerServiceCapability_RPC_Type = 8 + // See VolumeExpansion for details. + ControllerServiceCapability_RPC_EXPAND_VOLUME ControllerServiceCapability_RPC_Type = 9 ) var ControllerServiceCapability_RPC_Type_name = map[int32]string{ @@ -144,6 +207,7 @@ var ControllerServiceCapability_RPC_Type_name = map[int32]string{ 6: "LIST_SNAPSHOTS", 7: "CLONE_VOLUME", 8: "PUBLISH_READONLY", + 9: "EXPAND_VOLUME", } var ControllerServiceCapability_RPC_Type_value = map[string]int32{ "UNKNOWN": 0, @@ -155,13 +219,14 @@ var ControllerServiceCapability_RPC_Type_value = map[string]int32{ "LIST_SNAPSHOTS": 6, "CLONE_VOLUME": 7, "PUBLISH_READONLY": 8, + "EXPAND_VOLUME": 9, } func (x ControllerServiceCapability_RPC_Type) String() string { return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) } func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29, 0, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{29, 0, 0} } type VolumeUsage_Unit int32 @@ -187,7 +252,7 @@ func (x VolumeUsage_Unit) String() string { return proto.EnumName(VolumeUsage_Unit_name, int32(x)) } func (VolumeUsage_Unit) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{47, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{49, 0} } type NodeServiceCapability_RPC_Type int32 @@ -199,24 +264,28 @@ const ( // then it MUST implement NodeGetVolumeStats RPC // call for fetching volume statistics. NodeServiceCapability_RPC_GET_VOLUME_STATS NodeServiceCapability_RPC_Type = 2 + // See VolumeExpansion for details. + NodeServiceCapability_RPC_EXPAND_VOLUME NodeServiceCapability_RPC_Type = 3 ) var NodeServiceCapability_RPC_Type_name = map[int32]string{ 0: "UNKNOWN", 1: "STAGE_UNSTAGE_VOLUME", 2: "GET_VOLUME_STATS", + 3: "EXPAND_VOLUME", } var NodeServiceCapability_RPC_Type_value = map[string]int32{ "UNKNOWN": 0, "STAGE_UNSTAGE_VOLUME": 1, "GET_VOLUME_STATS": 2, + "EXPAND_VOLUME": 3, } func (x NodeServiceCapability_RPC_Type) String() string { return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) } func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50, 0, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{52, 0, 0} } type GetPluginInfoRequest struct { @@ -229,7 +298,7 @@ func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoRequest) ProtoMessage() {} func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{0} + return fileDescriptor_csi_2c5455657a82ae49, []int{0} } func (m *GetPluginInfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginInfoRequest.Unmarshal(m, b) @@ -271,7 +340,7 @@ func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoResponse) ProtoMessage() {} func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{1} + return fileDescriptor_csi_2c5455657a82ae49, []int{1} } func (m *GetPluginInfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginInfoResponse.Unmarshal(m, b) @@ -322,7 +391,7 @@ func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilit func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesRequest) ProtoMessage() {} func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{2} + return fileDescriptor_csi_2c5455657a82ae49, []int{2} } func (m *GetPluginCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginCapabilitiesRequest.Unmarshal(m, b) @@ -355,7 +424,7 @@ func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabili func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesResponse) ProtoMessage() {} func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{3} + return fileDescriptor_csi_2c5455657a82ae49, []int{3} } func (m *GetPluginCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginCapabilitiesResponse.Unmarshal(m, b) @@ -386,6 +455,7 @@ func (m *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability { type PluginCapability struct { // Types that are valid to be assigned to Type: // *PluginCapability_Service_ + // *PluginCapability_VolumeExpansion_ Type isPluginCapability_Type `protobuf_oneof:"type"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -396,7 +466,7 @@ func (m *PluginCapability) Reset() { *m = PluginCapability{} } func (m *PluginCapability) String() string { return proto.CompactTextString(m) } func (*PluginCapability) ProtoMessage() {} func (*PluginCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4} + return fileDescriptor_csi_2c5455657a82ae49, []int{4} } func (m *PluginCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PluginCapability.Unmarshal(m, b) @@ -424,8 +494,14 @@ type PluginCapability_Service_ struct { Service *PluginCapability_Service `protobuf:"bytes,1,opt,name=service,proto3,oneof"` } +type PluginCapability_VolumeExpansion_ struct { + VolumeExpansion *PluginCapability_VolumeExpansion `protobuf:"bytes,2,opt,name=volume_expansion,json=volumeExpansion,proto3,oneof"` +} + func (*PluginCapability_Service_) isPluginCapability_Type() {} +func (*PluginCapability_VolumeExpansion_) isPluginCapability_Type() {} + func (m *PluginCapability) GetType() isPluginCapability_Type { if m != nil { return m.Type @@ -440,10 +516,18 @@ func (m *PluginCapability) GetService() *PluginCapability_Service { return nil } +func (m *PluginCapability) GetVolumeExpansion() *PluginCapability_VolumeExpansion { + if x, ok := m.GetType().(*PluginCapability_VolumeExpansion_); ok { + return x.VolumeExpansion + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*PluginCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _PluginCapability_OneofMarshaler, _PluginCapability_OneofUnmarshaler, _PluginCapability_OneofSizer, []interface{}{ (*PluginCapability_Service_)(nil), + (*PluginCapability_VolumeExpansion_)(nil), } } @@ -456,6 +540,11 @@ func _PluginCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error if err := b.EncodeMessage(x.Service); err != nil { return err } + case *PluginCapability_VolumeExpansion_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.VolumeExpansion); err != nil { + return err + } case nil: default: return fmt.Errorf("PluginCapability.Type has unexpected type %T", x) @@ -474,6 +563,14 @@ func _PluginCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *pro err := b.DecodeMessage(msg) m.Type = &PluginCapability_Service_{msg} return true, err + case 2: // type.volume_expansion + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PluginCapability_VolumeExpansion) + err := b.DecodeMessage(msg) + m.Type = &PluginCapability_VolumeExpansion_{msg} + return true, err default: return false, nil } @@ -488,6 +585,11 @@ func _PluginCapability_OneofSizer(msg proto.Message) (n int) { n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s + case *PluginCapability_VolumeExpansion_: + s := proto.Size(x.VolumeExpansion) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -506,7 +608,7 @@ func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Servi func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } func (*PluginCapability_Service) ProtoMessage() {} func (*PluginCapability_Service) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{4, 0} } func (m *PluginCapability_Service) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PluginCapability_Service.Unmarshal(m, b) @@ -533,6 +635,44 @@ func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { return PluginCapability_Service_UNKNOWN } +type PluginCapability_VolumeExpansion struct { + Type PluginCapability_VolumeExpansion_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_VolumeExpansion_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability_VolumeExpansion) Reset() { *m = PluginCapability_VolumeExpansion{} } +func (m *PluginCapability_VolumeExpansion) String() string { return proto.CompactTextString(m) } +func (*PluginCapability_VolumeExpansion) ProtoMessage() {} +func (*PluginCapability_VolumeExpansion) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{4, 1} +} +func (m *PluginCapability_VolumeExpansion) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability_VolumeExpansion.Unmarshal(m, b) +} +func (m *PluginCapability_VolumeExpansion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability_VolumeExpansion.Marshal(b, m, deterministic) +} +func (dst *PluginCapability_VolumeExpansion) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability_VolumeExpansion.Merge(dst, src) +} +func (m *PluginCapability_VolumeExpansion) XXX_Size() int { + return xxx_messageInfo_PluginCapability_VolumeExpansion.Size(m) +} +func (m *PluginCapability_VolumeExpansion) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability_VolumeExpansion.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability_VolumeExpansion proto.InternalMessageInfo + +func (m *PluginCapability_VolumeExpansion) GetType() PluginCapability_VolumeExpansion_Type { + if m != nil { + return m.Type + } + return PluginCapability_VolumeExpansion_UNKNOWN +} + type ProbeRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -543,7 +683,7 @@ func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } func (*ProbeRequest) ProtoMessage() {} func (*ProbeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{5} + return fileDescriptor_csi_2c5455657a82ae49, []int{5} } func (m *ProbeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProbeRequest.Unmarshal(m, b) @@ -594,7 +734,7 @@ func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } func (*ProbeResponse) ProtoMessage() {} func (*ProbeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{6} + return fileDescriptor_csi_2c5455657a82ae49, []int{6} } func (m *ProbeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProbeResponse.Unmarshal(m, b) @@ -703,7 +843,7 @@ func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } func (*CreateVolumeRequest) ProtoMessage() {} func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{7} + return fileDescriptor_csi_2c5455657a82ae49, []int{7} } func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateVolumeRequest.Unmarshal(m, b) @@ -788,7 +928,7 @@ func (m *VolumeContentSource) Reset() { *m = VolumeContentSource{} } func (m *VolumeContentSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource) ProtoMessage() {} func (*VolumeContentSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8} + return fileDescriptor_csi_2c5455657a82ae49, []int{8} } func (m *VolumeContentSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource.Unmarshal(m, b) @@ -934,7 +1074,7 @@ func (m *VolumeContentSource_SnapshotSource) Reset() { *m = VolumeConten func (m *VolumeContentSource_SnapshotSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource_SnapshotSource) ProtoMessage() {} func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{8, 0} } func (m *VolumeContentSource_SnapshotSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource_SnapshotSource.Unmarshal(m, b) @@ -975,7 +1115,7 @@ func (m *VolumeContentSource_VolumeSource) Reset() { *m = VolumeContentS func (m *VolumeContentSource_VolumeSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource_VolumeSource) ProtoMessage() {} func (*VolumeContentSource_VolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8, 1} + return fileDescriptor_csi_2c5455657a82ae49, []int{8, 1} } func (m *VolumeContentSource_VolumeSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource_VolumeSource.Unmarshal(m, b) @@ -1016,7 +1156,7 @@ func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } func (*CreateVolumeResponse) ProtoMessage() {} func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{9} + return fileDescriptor_csi_2c5455657a82ae49, []int{9} } func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateVolumeResponse.Unmarshal(m, b) @@ -1063,7 +1203,7 @@ func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } func (*VolumeCapability) ProtoMessage() {} func (*VolumeCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10} + return fileDescriptor_csi_2c5455657a82ae49, []int{10} } func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability.Unmarshal(m, b) @@ -1212,7 +1352,7 @@ func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_B func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_BlockVolume) ProtoMessage() {} func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{10, 0} } func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_BlockVolume.Unmarshal(m, b) @@ -1252,7 +1392,7 @@ func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_M func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_MountVolume) ProtoMessage() {} func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 1} + return fileDescriptor_csi_2c5455657a82ae49, []int{10, 1} } func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_MountVolume.Unmarshal(m, b) @@ -1299,7 +1439,7 @@ func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_Ac func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_AccessMode) ProtoMessage() {} func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 2} + return fileDescriptor_csi_2c5455657a82ae49, []int{10, 2} } func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_AccessMode.Unmarshal(m, b) @@ -1347,7 +1487,7 @@ func (m *CapacityRange) Reset() { *m = CapacityRange{} } func (m *CapacityRange) String() string { return proto.CompactTextString(m) } func (*CapacityRange) ProtoMessage() {} func (*CapacityRange) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{11} + return fileDescriptor_csi_2c5455657a82ae49, []int{11} } func (m *CapacityRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CapacityRange.Unmarshal(m, b) @@ -1452,7 +1592,7 @@ func (m *Volume) Reset() { *m = Volume{} } func (m *Volume) String() string { return proto.CompactTextString(m) } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{12} + return fileDescriptor_csi_2c5455657a82ae49, []int{12} } func (m *Volume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Volume.Unmarshal(m, b) @@ -1520,7 +1660,7 @@ type TopologyRequirement struct { // x = number of topologies provisioned volume is accessible from // n = number of requisite topologies // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 - // If x==n, than the SP MUST make the provisioned volume available to + // If x==n, then the SP MUST make the provisioned volume available to // all topologies from the list of requisite topologies. If it is // unable to do so, the SP MUST fail the CreateVolume call. // For example, if a volume should be accessible from a single zone, @@ -1535,7 +1675,7 @@ type TopologyRequirement struct { // then the provisioned volume MUST be accessible from the "region" // "R1" and both "zone" "Z2" and "zone" "Z3". // - // If xn, than the SP MUST make the provisioned volume available from + // If x>n, then the SP MUST make the provisioned volume available from // all topologies from the list of requisite topologies and MAY choose // the remaining x-n unique topologies from the list of all possible // topologies. If it is unable to do so, the SP MUST fail the @@ -1644,7 +1784,7 @@ func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } func (m *TopologyRequirement) String() string { return proto.CompactTextString(m) } func (*TopologyRequirement) ProtoMessage() {} func (*TopologyRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{13} + return fileDescriptor_csi_2c5455657a82ae49, []int{13} } func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TopologyRequirement.Unmarshal(m, b) @@ -1718,7 +1858,7 @@ func (m *Topology) Reset() { *m = Topology{} } func (m *Topology) String() string { return proto.CompactTextString(m) } func (*Topology) ProtoMessage() {} func (*Topology) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{14} + return fileDescriptor_csi_2c5455657a82ae49, []int{14} } func (m *Topology) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Topology.Unmarshal(m, b) @@ -1762,7 +1902,7 @@ func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeRequest) ProtoMessage() {} func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{15} + return fileDescriptor_csi_2c5455657a82ae49, []int{15} } func (m *DeleteVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteVolumeRequest.Unmarshal(m, b) @@ -1806,7 +1946,7 @@ func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeResponse) ProtoMessage() {} func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{16} + return fileDescriptor_csi_2c5455657a82ae49, []int{16} } func (m *DeleteVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteVolumeResponse.Unmarshal(m, b) @@ -1860,7 +2000,7 @@ func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublis func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeRequest) ProtoMessage() {} func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{17} + return fileDescriptor_csi_2c5455657a82ae49, []int{17} } func (m *ControllerPublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerPublishVolumeRequest.Unmarshal(m, b) @@ -1946,7 +2086,7 @@ func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPubli func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeResponse) ProtoMessage() {} func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{18} + return fileDescriptor_csi_2c5455657a82ae49, []int{18} } func (m *ControllerPublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerPublishVolumeResponse.Unmarshal(m, b) @@ -1997,7 +2137,7 @@ func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpu func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{19} + return fileDescriptor_csi_2c5455657a82ae49, []int{19} } func (m *ControllerUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerUnpublishVolumeRequest.Unmarshal(m, b) @@ -2048,7 +2188,7 @@ func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnp func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{20} + return fileDescriptor_csi_2c5455657a82ae49, []int{20} } func (m *ControllerUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerUnpublishVolumeResponse.Unmarshal(m, b) @@ -2095,7 +2235,7 @@ func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolum func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{21} + return fileDescriptor_csi_2c5455657a82ae49, []int{21} } func (m *ValidateVolumeCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Unmarshal(m, b) @@ -2173,7 +2313,7 @@ func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolu func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{22} + return fileDescriptor_csi_2c5455657a82ae49, []int{22} } func (m *ValidateVolumeCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Unmarshal(m, b) @@ -2230,7 +2370,7 @@ func (m *ValidateVolumeCapabilitiesResponse_Confirmed) String() string { } func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse_Confirmed) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{22, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{22, 0} } func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Unmarshal(m, b) @@ -2295,7 +2435,7 @@ func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } func (*ListVolumesRequest) ProtoMessage() {} func (*ListVolumesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{23} + return fileDescriptor_csi_2c5455657a82ae49, []int{23} } func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesRequest.Unmarshal(m, b) @@ -2347,7 +2487,7 @@ func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse) ProtoMessage() {} func (*ListVolumesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{24} + return fileDescriptor_csi_2c5455657a82ae49, []int{24} } func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesResponse.Unmarshal(m, b) @@ -2392,7 +2532,7 @@ func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_E func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse_Entry) ProtoMessage() {} func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{24, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{24, 0} } func (m *ListVolumesResponse_Entry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesResponse_Entry.Unmarshal(m, b) @@ -2447,7 +2587,7 @@ func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } func (*GetCapacityRequest) ProtoMessage() {} func (*GetCapacityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{25} + return fileDescriptor_csi_2c5455657a82ae49, []int{25} } func (m *GetCapacityRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCapacityRequest.Unmarshal(m, b) @@ -2505,7 +2645,7 @@ func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } func (*GetCapacityResponse) ProtoMessage() {} func (*GetCapacityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{26} + return fileDescriptor_csi_2c5455657a82ae49, []int{26} } func (m *GetCapacityResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCapacityResponse.Unmarshal(m, b) @@ -2542,7 +2682,7 @@ func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetC func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{27} + return fileDescriptor_csi_2c5455657a82ae49, []int{27} } func (m *ControllerGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerGetCapabilitiesRequest.Unmarshal(m, b) @@ -2575,7 +2715,7 @@ func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGet func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{28} + return fileDescriptor_csi_2c5455657a82ae49, []int{28} } func (m *ControllerGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerGetCapabilitiesResponse.Unmarshal(m, b) @@ -2616,7 +2756,7 @@ func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCa func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability) ProtoMessage() {} func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29} + return fileDescriptor_csi_2c5455657a82ae49, []int{29} } func (m *ControllerServiceCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerServiceCapability.Unmarshal(m, b) @@ -2726,7 +2866,7 @@ func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServi func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability_RPC) ProtoMessage() {} func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{29, 0} } func (m *ControllerServiceCapability_RPC) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerServiceCapability_RPC.Unmarshal(m, b) @@ -2788,7 +2928,7 @@ func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*CreateSnapshotRequest) ProtoMessage() {} func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{30} + return fileDescriptor_csi_2c5455657a82ae49, []int{30} } func (m *CreateSnapshotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateSnapshotRequest.Unmarshal(m, b) @@ -2850,7 +2990,7 @@ func (m *CreateSnapshotResponse) Reset() { *m = CreateSnapshotResponse{} func (m *CreateSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*CreateSnapshotResponse) ProtoMessage() {} func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{31} + return fileDescriptor_csi_2c5455657a82ae49, []int{31} } func (m *CreateSnapshotResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateSnapshotResponse.Unmarshal(m, b) @@ -2917,7 +3057,7 @@ func (m *Snapshot) Reset() { *m = Snapshot{} } func (m *Snapshot) String() string { return proto.CompactTextString(m) } func (*Snapshot) ProtoMessage() {} func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{32} + return fileDescriptor_csi_2c5455657a82ae49, []int{32} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Snapshot.Unmarshal(m, b) @@ -2989,7 +3129,7 @@ func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*DeleteSnapshotRequest) ProtoMessage() {} func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{33} + return fileDescriptor_csi_2c5455657a82ae49, []int{33} } func (m *DeleteSnapshotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteSnapshotRequest.Unmarshal(m, b) @@ -3033,7 +3173,7 @@ func (m *DeleteSnapshotResponse) Reset() { *m = DeleteSnapshotResponse{} func (m *DeleteSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*DeleteSnapshotResponse) ProtoMessage() {} func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{34} + return fileDescriptor_csi_2c5455657a82ae49, []int{34} } func (m *DeleteSnapshotResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteSnapshotResponse.Unmarshal(m, b) @@ -3088,7 +3228,7 @@ func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsRequest) ProtoMessage() {} func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{35} + return fileDescriptor_csi_2c5455657a82ae49, []int{35} } func (m *ListSnapshotsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsRequest.Unmarshal(m, b) @@ -3154,7 +3294,7 @@ func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsResponse) ProtoMessage() {} func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{36} + return fileDescriptor_csi_2c5455657a82ae49, []int{36} } func (m *ListSnapshotsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsResponse.Unmarshal(m, b) @@ -3199,7 +3339,7 @@ func (m *ListSnapshotsResponse_Entry) Reset() { *m = ListSnapshotsRespon func (m *ListSnapshotsResponse_Entry) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsResponse_Entry) ProtoMessage() {} func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{36, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{36, 0} } func (m *ListSnapshotsResponse_Entry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsResponse_Entry.Unmarshal(m, b) @@ -3226,6 +3366,115 @@ func (m *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot { return nil } +type ControllerExpandVolumeRequest struct { + // The ID of the volume to expand. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // This allows CO to specify the capacity requirements of the volume + // after expansion. This field is REQUIRED. + CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"` + // Secrets required by the plugin for expanding the volume. + // This field is OPTIONAL. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerExpandVolumeRequest) Reset() { *m = ControllerExpandVolumeRequest{} } +func (m *ControllerExpandVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerExpandVolumeRequest) ProtoMessage() {} +func (*ControllerExpandVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{37} +} +func (m *ControllerExpandVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerExpandVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerExpandVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerExpandVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerExpandVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerExpandVolumeRequest.Merge(dst, src) +} +func (m *ControllerExpandVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerExpandVolumeRequest.Size(m) +} +func (m *ControllerExpandVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerExpandVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerExpandVolumeRequest proto.InternalMessageInfo + +func (m *ControllerExpandVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerExpandVolumeRequest) GetCapacityRange() *CapacityRange { + if m != nil { + return m.CapacityRange + } + return nil +} + +func (m *ControllerExpandVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type ControllerExpandVolumeResponse struct { + // Capacity of volume after expansion. This field is REQUIRED. + CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"` + // Whether node expansion is required for the volume. When true + // the CO MUST make NodeExpandVolume RPC call on the node. This field + // is REQUIRED. + NodeExpansionRequired bool `protobuf:"varint,2,opt,name=node_expansion_required,json=nodeExpansionRequired,proto3" json:"node_expansion_required,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerExpandVolumeResponse) Reset() { *m = ControllerExpandVolumeResponse{} } +func (m *ControllerExpandVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerExpandVolumeResponse) ProtoMessage() {} +func (*ControllerExpandVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{38} +} +func (m *ControllerExpandVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerExpandVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerExpandVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerExpandVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerExpandVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerExpandVolumeResponse.Merge(dst, src) +} +func (m *ControllerExpandVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerExpandVolumeResponse.Size(m) +} +func (m *ControllerExpandVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerExpandVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerExpandVolumeResponse proto.InternalMessageInfo + +func (m *ControllerExpandVolumeResponse) GetCapacityBytes() int64 { + if m != nil { + return m.CapacityBytes + } + return 0 +} + +func (m *ControllerExpandVolumeResponse) GetNodeExpansionRequired() bool { + if m != nil { + return m.NodeExpansionRequired + } + return false +} + type NodeStageVolumeRequest struct { // The ID of the volume to publish. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` @@ -3267,7 +3516,7 @@ func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeRequest) ProtoMessage() {} func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{37} + return fileDescriptor_csi_2c5455657a82ae49, []int{39} } func (m *NodeStageVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeStageVolumeRequest.Unmarshal(m, b) @@ -3339,7 +3588,7 @@ func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeResponse) ProtoMessage() {} func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{38} + return fileDescriptor_csi_2c5455657a82ae49, []int{40} } func (m *NodeStageVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeStageVolumeResponse.Unmarshal(m, b) @@ -3375,7 +3624,7 @@ func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeReque func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeRequest) ProtoMessage() {} func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{39} + return fileDescriptor_csi_2c5455657a82ae49, []int{41} } func (m *NodeUnstageVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnstageVolumeRequest.Unmarshal(m, b) @@ -3419,7 +3668,7 @@ func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResp func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeResponse) ProtoMessage() {} func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{40} + return fileDescriptor_csi_2c5455657a82ae49, []int{42} } func (m *NodeUnstageVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnstageVolumeResponse.Unmarshal(m, b) @@ -3493,7 +3742,7 @@ func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeReque func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeRequest) ProtoMessage() {} func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{41} + return fileDescriptor_csi_2c5455657a82ae49, []int{43} } func (m *NodePublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodePublishVolumeRequest.Unmarshal(m, b) @@ -3579,7 +3828,7 @@ func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResp func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeResponse) ProtoMessage() {} func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{42} + return fileDescriptor_csi_2c5455657a82ae49, []int{44} } func (m *NodePublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodePublishVolumeResponse.Unmarshal(m, b) @@ -3616,7 +3865,7 @@ func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeR func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeRequest) ProtoMessage() {} func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{43} + return fileDescriptor_csi_2c5455657a82ae49, []int{45} } func (m *NodeUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnpublishVolumeRequest.Unmarshal(m, b) @@ -3660,7 +3909,7 @@ func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolume func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeResponse) ProtoMessage() {} func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{44} + return fileDescriptor_csi_2c5455657a82ae49, []int{46} } func (m *NodeUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnpublishVolumeResponse.Unmarshal(m, b) @@ -3698,7 +3947,7 @@ func (m *NodeGetVolumeStatsRequest) Reset() { *m = NodeGetVolumeStatsReq func (m *NodeGetVolumeStatsRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetVolumeStatsRequest) ProtoMessage() {} func (*NodeGetVolumeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{45} + return fileDescriptor_csi_2c5455657a82ae49, []int{47} } func (m *NodeGetVolumeStatsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetVolumeStatsRequest.Unmarshal(m, b) @@ -3744,7 +3993,7 @@ func (m *NodeGetVolumeStatsResponse) Reset() { *m = NodeGetVolumeStatsRe func (m *NodeGetVolumeStatsResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetVolumeStatsResponse) ProtoMessage() {} func (*NodeGetVolumeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{46} + return fileDescriptor_csi_2c5455657a82ae49, []int{48} } func (m *NodeGetVolumeStatsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetVolumeStatsResponse.Unmarshal(m, b) @@ -3792,7 +4041,7 @@ func (m *VolumeUsage) Reset() { *m = VolumeUsage{} } func (m *VolumeUsage) String() string { return proto.CompactTextString(m) } func (*VolumeUsage) ProtoMessage() {} func (*VolumeUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{47} + return fileDescriptor_csi_2c5455657a82ae49, []int{49} } func (m *VolumeUsage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeUsage.Unmarshal(m, b) @@ -3850,7 +4099,7 @@ func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesR func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesRequest) ProtoMessage() {} func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{48} + return fileDescriptor_csi_2c5455657a82ae49, []int{50} } func (m *NodeGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetCapabilitiesRequest.Unmarshal(m, b) @@ -3883,7 +4132,7 @@ func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilities func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesResponse) ProtoMessage() {} func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{49} + return fileDescriptor_csi_2c5455657a82ae49, []int{51} } func (m *NodeGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetCapabilitiesResponse.Unmarshal(m, b) @@ -3924,7 +4173,7 @@ func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability) ProtoMessage() {} func (*NodeServiceCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50} + return fileDescriptor_csi_2c5455657a82ae49, []int{52} } func (m *NodeServiceCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeServiceCapability.Unmarshal(m, b) @@ -4034,7 +4283,7 @@ func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability_RPC) ProtoMessage() {} func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50, 0} + return fileDescriptor_csi_2c5455657a82ae49, []int{52, 0} } func (m *NodeServiceCapability_RPC) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeServiceCapability_RPC.Unmarshal(m, b) @@ -4071,7 +4320,7 @@ func (m *NodeGetInfoRequest) Reset() { *m = NodeGetInfoRequest{} } func (m *NodeGetInfoRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetInfoRequest) ProtoMessage() {} func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{51} + return fileDescriptor_csi_2c5455657a82ae49, []int{53} } func (m *NodeGetInfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetInfoRequest.Unmarshal(m, b) @@ -4121,7 +4370,7 @@ type NodeGetInfoResponse struct { // // Example 1: // accessible_topology = - // {"region": "R1", "zone": "R2"} + // {"region": "R1", "zone": "Z2"} // Indicates the node exists within the "region" "R1" and the "zone" // "Z2". AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` @@ -4134,7 +4383,7 @@ func (m *NodeGetInfoResponse) Reset() { *m = NodeGetInfoResponse{} } func (m *NodeGetInfoResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetInfoResponse) ProtoMessage() {} func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_1092d4f3f3c8dc30, []int{52} + return fileDescriptor_csi_2c5455657a82ae49, []int{54} } func (m *NodeGetInfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetInfoResponse.Unmarshal(m, b) @@ -4175,6 +4424,107 @@ func (m *NodeGetInfoResponse) GetAccessibleTopology() *Topology { return nil } +type NodeExpandVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path on which volume is available. This field is REQUIRED. + VolumePath string `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"` + // This allows CO to specify the capacity requirements of the volume + // after expansion. If capacity_range is omitted then a plugin MAY + // inspect the file system of the volume to determine the maximum + // capacity to which the volume can be expanded. In such cases a + // plugin MAY expand the volume to its maximum capacity. + // This field is OPTIONAL. + CapacityRange *CapacityRange `protobuf:"bytes,3,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeExpandVolumeRequest) Reset() { *m = NodeExpandVolumeRequest{} } +func (m *NodeExpandVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeExpandVolumeRequest) ProtoMessage() {} +func (*NodeExpandVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{55} +} +func (m *NodeExpandVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeExpandVolumeRequest.Unmarshal(m, b) +} +func (m *NodeExpandVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeExpandVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeExpandVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeExpandVolumeRequest.Merge(dst, src) +} +func (m *NodeExpandVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeExpandVolumeRequest.Size(m) +} +func (m *NodeExpandVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeExpandVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeExpandVolumeRequest proto.InternalMessageInfo + +func (m *NodeExpandVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeExpandVolumeRequest) GetVolumePath() string { + if m != nil { + return m.VolumePath + } + return "" +} + +func (m *NodeExpandVolumeRequest) GetCapacityRange() *CapacityRange { + if m != nil { + return m.CapacityRange + } + return nil +} + +type NodeExpandVolumeResponse struct { + // The capacity of the volume in bytes. This field is OPTIONAL. + CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeExpandVolumeResponse) Reset() { *m = NodeExpandVolumeResponse{} } +func (m *NodeExpandVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeExpandVolumeResponse) ProtoMessage() {} +func (*NodeExpandVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_2c5455657a82ae49, []int{56} +} +func (m *NodeExpandVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeExpandVolumeResponse.Unmarshal(m, b) +} +func (m *NodeExpandVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeExpandVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeExpandVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeExpandVolumeResponse.Merge(dst, src) +} +func (m *NodeExpandVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeExpandVolumeResponse.Size(m) +} +func (m *NodeExpandVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeExpandVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeExpandVolumeResponse proto.InternalMessageInfo + +func (m *NodeExpandVolumeResponse) GetCapacityBytes() int64 { + if m != nil { + return m.CapacityBytes + } + return 0 +} + var E_CsiSecret = &proto.ExtensionDesc{ ExtendedType: (*descriptor.FieldOptions)(nil), ExtensionType: (*bool)(nil), @@ -4192,6 +4542,7 @@ func init() { proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csi.v1.GetPluginCapabilitiesResponse") proto.RegisterType((*PluginCapability)(nil), "csi.v1.PluginCapability") proto.RegisterType((*PluginCapability_Service)(nil), "csi.v1.PluginCapability.Service") + proto.RegisterType((*PluginCapability_VolumeExpansion)(nil), "csi.v1.PluginCapability.VolumeExpansion") proto.RegisterType((*ProbeRequest)(nil), "csi.v1.ProbeRequest") proto.RegisterType((*ProbeResponse)(nil), "csi.v1.ProbeResponse") proto.RegisterType((*CreateVolumeRequest)(nil), "csi.v1.CreateVolumeRequest") @@ -4251,6 +4602,9 @@ func init() { proto.RegisterType((*ListSnapshotsRequest)(nil), "csi.v1.ListSnapshotsRequest") proto.RegisterType((*ListSnapshotsResponse)(nil), "csi.v1.ListSnapshotsResponse") proto.RegisterType((*ListSnapshotsResponse_Entry)(nil), "csi.v1.ListSnapshotsResponse.Entry") + proto.RegisterType((*ControllerExpandVolumeRequest)(nil), "csi.v1.ControllerExpandVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ControllerExpandVolumeRequest.SecretsEntry") + proto.RegisterType((*ControllerExpandVolumeResponse)(nil), "csi.v1.ControllerExpandVolumeResponse") proto.RegisterType((*NodeStageVolumeRequest)(nil), "csi.v1.NodeStageVolumeRequest") proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodeStageVolumeRequest.PublishContextEntry") proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodeStageVolumeRequest.SecretsEntry") @@ -4274,7 +4628,10 @@ func init() { proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csi.v1.NodeServiceCapability.RPC") proto.RegisterType((*NodeGetInfoRequest)(nil), "csi.v1.NodeGetInfoRequest") proto.RegisterType((*NodeGetInfoResponse)(nil), "csi.v1.NodeGetInfoResponse") + proto.RegisterType((*NodeExpandVolumeRequest)(nil), "csi.v1.NodeExpandVolumeRequest") + proto.RegisterType((*NodeExpandVolumeResponse)(nil), "csi.v1.NodeExpandVolumeResponse") proto.RegisterEnum("csi.v1.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) + proto.RegisterEnum("csi.v1.PluginCapability_VolumeExpansion_Type", PluginCapability_VolumeExpansion_Type_name, PluginCapability_VolumeExpansion_Type_value) proto.RegisterEnum("csi.v1.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) proto.RegisterEnum("csi.v1.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) proto.RegisterEnum("csi.v1.VolumeUsage_Unit", VolumeUsage_Unit_name, VolumeUsage_Unit_value) @@ -4435,6 +4792,7 @@ type ControllerClient interface { CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) + ControllerExpandVolume(ctx context.Context, in *ControllerExpandVolumeRequest, opts ...grpc.CallOption) (*ControllerExpandVolumeResponse, error) } type controllerClient struct { @@ -4544,6 +4902,15 @@ func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsR return out, nil } +func (c *controllerClient) ControllerExpandVolume(ctx context.Context, in *ControllerExpandVolumeRequest, opts ...grpc.CallOption) (*ControllerExpandVolumeResponse, error) { + out := new(ControllerExpandVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ControllerExpandVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ControllerServer is the server API for Controller service. type ControllerServer interface { CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) @@ -4557,6 +4924,7 @@ type ControllerServer interface { CreateSnapshot(context.Context, *CreateSnapshotRequest) (*CreateSnapshotResponse, error) DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*DeleteSnapshotResponse, error) ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) + ControllerExpandVolume(context.Context, *ControllerExpandVolumeRequest) (*ControllerExpandVolumeResponse, error) } func RegisterControllerServer(s *grpc.Server, srv ControllerServer) { @@ -4761,6 +5129,24 @@ func _Controller_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Controller_ControllerExpandVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerExpandVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerExpandVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ControllerExpandVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerExpandVolume(ctx, req.(*ControllerExpandVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Controller_serviceDesc = grpc.ServiceDesc{ ServiceName: "csi.v1.Controller", HandlerType: (*ControllerServer)(nil), @@ -4809,6 +5195,10 @@ var _Controller_serviceDesc = grpc.ServiceDesc{ MethodName: "ListSnapshots", Handler: _Controller_ListSnapshots_Handler, }, + { + MethodName: "ControllerExpandVolume", + Handler: _Controller_ControllerExpandVolume_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "github.com/container-storage-interface/spec/csi.proto", @@ -4823,6 +5213,7 @@ type NodeClient interface { NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) + NodeExpandVolume(ctx context.Context, in *NodeExpandVolumeRequest, opts ...grpc.CallOption) (*NodeExpandVolumeResponse, error) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) } @@ -4880,6 +5271,15 @@ func (c *nodeClient) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeSt return out, nil } +func (c *nodeClient) NodeExpandVolume(ctx context.Context, in *NodeExpandVolumeRequest, opts ...grpc.CallOption) (*NodeExpandVolumeResponse, error) { + out := new(NodeExpandVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeExpandVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) { out := new(NodeGetCapabilitiesResponse) err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeGetCapabilities", in, out, opts...) @@ -4905,6 +5305,7 @@ type NodeServer interface { NodePublishVolume(context.Context, *NodePublishVolumeRequest) (*NodePublishVolumeResponse, error) NodeUnpublishVolume(context.Context, *NodeUnpublishVolumeRequest) (*NodeUnpublishVolumeResponse, error) NodeGetVolumeStats(context.Context, *NodeGetVolumeStatsRequest) (*NodeGetVolumeStatsResponse, error) + NodeExpandVolume(context.Context, *NodeExpandVolumeRequest) (*NodeExpandVolumeResponse, error) NodeGetCapabilities(context.Context, *NodeGetCapabilitiesRequest) (*NodeGetCapabilitiesResponse, error) NodeGetInfo(context.Context, *NodeGetInfoRequest) (*NodeGetInfoResponse, error) } @@ -5003,6 +5404,24 @@ func _Node_NodeGetVolumeStats_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Node_NodeExpandVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeExpandVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeExpandVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeExpandVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeExpandVolume(ctx, req.(*NodeExpandVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(NodeGetCapabilitiesRequest) if err := dec(in); err != nil { @@ -5063,6 +5482,10 @@ var _Node_serviceDesc = grpc.ServiceDesc{ MethodName: "NodeGetVolumeStats", Handler: _Node_NodeGetVolumeStats_Handler, }, + { + MethodName: "NodeExpandVolume", + Handler: _Node_NodeExpandVolume_Handler, + }, { MethodName: "NodeGetCapabilities", Handler: _Node_NodeGetCapabilities_Handler, @@ -5077,201 +5500,214 @@ var _Node_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("github.com/container-storage-interface/spec/csi.proto", fileDescriptor_csi_1092d4f3f3c8dc30) + proto.RegisterFile("github.com/container-storage-interface/spec/csi.proto", fileDescriptor_csi_2c5455657a82ae49) } -var fileDescriptor_csi_1092d4f3f3c8dc30 = []byte{ - // 3070 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x1a, 0x4d, 0x6f, 0xe3, 0xc6, - 0xd5, 0xd4, 0x87, 0x3f, 0x9e, 0x6d, 0x45, 0x3b, 0xfe, 0x58, 0x2d, 0x6d, 0xef, 0x7a, 0xb9, 0xd9, - 0xc4, 0xd9, 0x64, 0xe5, 0xc6, 0xc9, 0x06, 0xcd, 0xee, 0xa6, 0x8d, 0x24, 0x2b, 0xb6, 0xb2, 0x5a, - 0xd9, 0xa1, 0x64, 0xa7, 0xbb, 0x6d, 0xc0, 0xd0, 0xd2, 0x58, 0x4b, 0x44, 0x22, 0x15, 0x72, 0xe4, - 0xae, 0x7b, 0x2b, 0x0a, 0xf4, 0xd2, 0x53, 0x4f, 0xed, 0xad, 0x40, 0x7a, 0x6a, 0xd1, 0xa0, 0xa7, - 0xa2, 0xc7, 0x02, 0xbd, 0x14, 0xe8, 0x1f, 0x68, 0x6f, 0xb9, 0x07, 0x2d, 0x10, 0xf4, 0xd0, 0x43, - 0x81, 0x02, 0x05, 0x39, 0x43, 0x8a, 0x43, 0x91, 0x94, 0xb4, 0xde, 0x20, 0x87, 0x9e, 0x24, 0xbe, - 0x79, 0x5f, 0xf3, 0xe6, 0xbd, 0x37, 0xef, 0x3d, 0x12, 0xee, 0xb4, 0x35, 0xf2, 0xa4, 0x7f, 0x92, - 0x6f, 0x1a, 0xdd, 0xed, 0xa6, 0xa1, 0x13, 0x55, 0xd3, 0xb1, 0x79, 0xdb, 0x22, 0x86, 0xa9, 0xb6, - 0xf1, 0x6d, 0x4d, 0x27, 0xd8, 0x3c, 0x55, 0x9b, 0x78, 0xdb, 0xea, 0xe1, 0xe6, 0x76, 0xd3, 0xd2, - 0xf2, 0x3d, 0xd3, 0x20, 0x06, 0x9a, 0xb6, 0xff, 0x9e, 0xbd, 0x2e, 0x6e, 0xb6, 0x0d, 0xa3, 0xdd, - 0xc1, 0xdb, 0x0e, 0xf4, 0xa4, 0x7f, 0xba, 0xdd, 0xc2, 0x56, 0xd3, 0xd4, 0x7a, 0xc4, 0x30, 0x29, - 0xa6, 0x78, 0x2d, 0x88, 0x41, 0xb4, 0x2e, 0xb6, 0x88, 0xda, 0xed, 0x31, 0x84, 0xab, 0x41, 0x84, - 0x1f, 0x9a, 0x6a, 0xaf, 0x87, 0x4d, 0x8b, 0xae, 0x4b, 0xab, 0xb0, 0xbc, 0x87, 0xc9, 0x61, 0xa7, - 0xdf, 0xd6, 0xf4, 0x8a, 0x7e, 0x6a, 0xc8, 0xf8, 0xd3, 0x3e, 0xb6, 0x88, 0xf4, 0x77, 0x01, 0x56, - 0x02, 0x0b, 0x56, 0xcf, 0xd0, 0x2d, 0x8c, 0x10, 0xa4, 0x74, 0xb5, 0x8b, 0x73, 0xc2, 0xa6, 0xb0, - 0x35, 0x27, 0x3b, 0xff, 0xd1, 0x4d, 0xc8, 0x9c, 0x61, 0xbd, 0x65, 0x98, 0xca, 0x19, 0x36, 0x2d, - 0xcd, 0xd0, 0x73, 0x09, 0x67, 0x75, 0x91, 0x42, 0x8f, 0x29, 0x10, 0xed, 0xc1, 0x6c, 0x57, 0xd5, - 0xb5, 0x53, 0x6c, 0x91, 0x5c, 0x72, 0x33, 0xb9, 0x35, 0xbf, 0xf3, 0x6a, 0x9e, 0x6e, 0x35, 0x1f, - 0x2a, 0x2b, 0xff, 0x90, 0x61, 0x97, 0x75, 0x62, 0x9e, 0xcb, 0x1e, 0xb1, 0x78, 0x0f, 0x16, 0xb9, - 0x25, 0x94, 0x85, 0xe4, 0x27, 0xf8, 0x9c, 0xe9, 0x64, 0xff, 0x45, 0xcb, 0x90, 0x3e, 0x53, 0x3b, - 0x7d, 0xcc, 0x34, 0xa1, 0x0f, 0x77, 0x13, 0xdf, 0x16, 0xa4, 0xab, 0xb0, 0xee, 0x49, 0x2b, 0xa9, - 0x3d, 0xf5, 0x44, 0xeb, 0x68, 0x44, 0xc3, 0x96, 0xbb, 0xf5, 0x8f, 0x60, 0x23, 0x62, 0x9d, 0x59, - 0xe0, 0x3e, 0x2c, 0x34, 0x7d, 0xf0, 0x9c, 0xe0, 0x6c, 0x25, 0xe7, 0x6e, 0x25, 0x40, 0x79, 0x2e, - 0x73, 0xd8, 0xd2, 0xbf, 0x04, 0xc8, 0x06, 0x51, 0xd0, 0x7d, 0x98, 0xb1, 0xb0, 0x79, 0xa6, 0x35, - 0xa9, 0x5d, 0xe7, 0x77, 0x36, 0xa3, 0xb8, 0xe5, 0xeb, 0x14, 0x6f, 0x7f, 0x4a, 0x76, 0x49, 0xc4, - 0x5f, 0x08, 0x30, 0xc3, 0xc0, 0xe8, 0x6d, 0x48, 0x91, 0xf3, 0x1e, 0x65, 0x93, 0xd9, 0xb9, 0x39, - 0x8a, 0x4d, 0xbe, 0x71, 0xde, 0xc3, 0xb2, 0x43, 0x22, 0x7d, 0x00, 0x29, 0xfb, 0x09, 0xcd, 0xc3, - 0xcc, 0x51, 0xed, 0x41, 0xed, 0xe0, 0xc3, 0x5a, 0x76, 0x0a, 0xad, 0x02, 0x2a, 0x1d, 0xd4, 0x1a, - 0xf2, 0x41, 0xb5, 0x5a, 0x96, 0x95, 0x7a, 0x59, 0x3e, 0xae, 0x94, 0xca, 0x59, 0x01, 0xbd, 0x08, - 0x9b, 0xc7, 0x07, 0xd5, 0xa3, 0x87, 0x65, 0xa5, 0x50, 0x2a, 0x95, 0xeb, 0xf5, 0x4a, 0xb1, 0x52, - 0xad, 0x34, 0x1e, 0x29, 0xa5, 0x83, 0x5a, 0xbd, 0x21, 0x17, 0x2a, 0xb5, 0x46, 0x3d, 0x9b, 0x28, - 0x4e, 0x53, 0x6d, 0xa4, 0x0c, 0x2c, 0x1c, 0x9a, 0xc6, 0x09, 0x76, 0x6d, 0x5c, 0x80, 0x45, 0xf6, - 0xcc, 0x6c, 0xfa, 0x2d, 0x48, 0x9b, 0x58, 0x6d, 0x9d, 0xb3, 0xed, 0x8b, 0x79, 0xea, 0xb7, 0x79, - 0xd7, 0x6f, 0xf3, 0x45, 0xc3, 0xe8, 0x1c, 0xdb, 0x67, 0x28, 0x53, 0x44, 0xe9, 0xab, 0x14, 0x2c, - 0x95, 0x4c, 0xac, 0x12, 0x7c, 0x6c, 0x74, 0xfa, 0x5d, 0x97, 0x75, 0xa8, 0x7f, 0xde, 0x87, 0x8c, - 0x7d, 0x06, 0x4d, 0x8d, 0x9c, 0x2b, 0xa6, 0xaa, 0xb7, 0xa9, 0x57, 0xcc, 0xef, 0xac, 0xb8, 0xe6, - 0x29, 0xb1, 0x55, 0xd9, 0x5e, 0x94, 0x17, 0x9b, 0xfe, 0x47, 0x54, 0x81, 0xa5, 0x33, 0x47, 0x84, - 0xc2, 0x1d, 0x7b, 0x92, 0x3f, 0x76, 0xaa, 0x85, 0xef, 0xd8, 0xd1, 0x19, 0x0f, 0xd1, 0xb0, 0x85, - 0x1e, 0x00, 0xf4, 0x54, 0x53, 0xed, 0x62, 0x82, 0x4d, 0x2b, 0x97, 0xe2, 0x63, 0x20, 0x64, 0x37, - 0xf9, 0x43, 0x0f, 0x9b, 0xc6, 0x80, 0x8f, 0x1c, 0xed, 0xd9, 0x4e, 0xd3, 0x34, 0x31, 0xb1, 0x72, - 0x69, 0x87, 0xd3, 0x56, 0x1c, 0xa7, 0x3a, 0x45, 0x75, 0xd8, 0x14, 0x93, 0xbf, 0x2c, 0x0a, 0xb2, - 0x4b, 0x8d, 0x0e, 0x60, 0xc5, 0xdd, 0xa0, 0xa1, 0x13, 0xac, 0x13, 0xc5, 0x32, 0xfa, 0x66, 0x13, - 0xe7, 0xa6, 0x1d, 0x2b, 0xad, 0x05, 0xb6, 0x48, 0x71, 0xea, 0x0e, 0x8a, 0xcc, 0x4c, 0xc3, 0x01, - 0xd1, 0x63, 0x10, 0xd5, 0x66, 0x13, 0x5b, 0x96, 0x46, 0x6d, 0xa1, 0x98, 0xf8, 0xd3, 0xbe, 0x66, - 0xe2, 0x2e, 0xd6, 0x89, 0x95, 0x9b, 0xe1, 0xb9, 0x36, 0x8c, 0x9e, 0xd1, 0x31, 0xda, 0xe7, 0xf2, - 0x00, 0x47, 0xbe, 0xc2, 0x91, 0xfb, 0x56, 0x2c, 0xf1, 0x1d, 0x78, 0x21, 0x60, 0x94, 0x49, 0xa2, - 0x5f, 0xbc, 0x0b, 0x0b, 0x7e, 0x4b, 0x4c, 0x94, 0x39, 0x7e, 0x96, 0x80, 0xa5, 0x10, 0x1b, 0xa0, - 0x7d, 0x98, 0xb5, 0x74, 0xb5, 0x67, 0x3d, 0x31, 0x08, 0xf3, 0xdf, 0x5b, 0x31, 0x26, 0xcb, 0xd7, - 0x19, 0x2e, 0x7d, 0xdc, 0x9f, 0x92, 0x3d, 0x6a, 0x54, 0x84, 0x69, 0x6a, 0x4f, 0xe6, 0xa0, 0x5b, - 0x71, 0x7c, 0x28, 0xcc, 0xe3, 0xc2, 0x28, 0xc5, 0xd7, 0x21, 0xc3, 0x4b, 0x40, 0xd7, 0x60, 0xde, - 0x95, 0xa0, 0x68, 0x2d, 0xb6, 0x57, 0x70, 0x41, 0x95, 0x96, 0xf8, 0x2a, 0x2c, 0xf8, 0x99, 0xa1, - 0x35, 0x98, 0x63, 0x0e, 0xe1, 0xa1, 0xcf, 0x52, 0x40, 0xa5, 0xe5, 0xc5, 0xf4, 0x77, 0x60, 0x99, - 0xf7, 0x33, 0x16, 0xca, 0x2f, 0x79, 0x7b, 0xa0, 0xb6, 0xc8, 0xf0, 0x7b, 0x70, 0xf5, 0x94, 0x7e, - 0x9b, 0x82, 0x6c, 0x30, 0x68, 0xd0, 0x7d, 0x48, 0x9f, 0x74, 0x8c, 0xe6, 0x27, 0x8c, 0xf6, 0xc5, - 0xa8, 0xe8, 0xca, 0x17, 0x6d, 0x2c, 0x0a, 0xdd, 0x9f, 0x92, 0x29, 0x91, 0x4d, 0xdd, 0x35, 0xfa, - 0x3a, 0x61, 0xd6, 0x8b, 0xa6, 0x7e, 0x68, 0x63, 0x0d, 0xa8, 0x1d, 0x22, 0xb4, 0x0b, 0xf3, 0xd4, - 0xed, 0x94, 0xae, 0xd1, 0xc2, 0xb9, 0xa4, 0xc3, 0xe3, 0x46, 0x24, 0x8f, 0x82, 0x83, 0xfb, 0xd0, - 0x68, 0x61, 0x19, 0x54, 0xef, 0xbf, 0xb8, 0x08, 0xf3, 0x3e, 0xdd, 0xc4, 0x3d, 0x98, 0xf7, 0x09, - 0x43, 0x97, 0x61, 0xe6, 0xd4, 0x52, 0xbc, 0x0c, 0x3d, 0x27, 0x4f, 0x9f, 0x5a, 0x4e, 0xd2, 0xbd, - 0x06, 0xf3, 0x8e, 0x16, 0xca, 0x69, 0x47, 0x6d, 0x5b, 0xb9, 0xc4, 0x66, 0xd2, 0x3e, 0x23, 0x07, - 0xf4, 0x9e, 0x0d, 0x11, 0xff, 0x21, 0x00, 0x0c, 0x44, 0xa2, 0xfb, 0x90, 0x72, 0xb4, 0xa4, 0x79, - 0x7e, 0x6b, 0x0c, 0x2d, 0xf3, 0x8e, 0xaa, 0x0e, 0x95, 0xf4, 0x2b, 0x01, 0x52, 0x0e, 0x9b, 0x60, - 0xae, 0xaf, 0x57, 0x6a, 0x7b, 0xd5, 0xb2, 0x52, 0x3b, 0xd8, 0x2d, 0x2b, 0x1f, 0xca, 0x95, 0x46, - 0x59, 0xce, 0x0a, 0x68, 0x0d, 0x2e, 0xfb, 0xe1, 0x72, 0xb9, 0xb0, 0x5b, 0x96, 0x95, 0x83, 0x5a, - 0xf5, 0x51, 0x36, 0x81, 0x44, 0x58, 0x7d, 0x78, 0x54, 0x6d, 0x54, 0x86, 0xd7, 0x92, 0x68, 0x1d, - 0x72, 0xbe, 0x35, 0xc6, 0x83, 0xb1, 0x4d, 0xd9, 0x6c, 0x7d, 0xab, 0xf4, 0x2f, 0x5b, 0x4c, 0x17, - 0x17, 0xbd, 0xc3, 0x70, 0x9c, 0xed, 0x43, 0x58, 0xe4, 0x72, 0xb4, 0x5d, 0x72, 0xb0, 0xa4, 0xd2, - 0x52, 0x4e, 0xce, 0x89, 0x73, 0x0d, 0x0b, 0x5b, 0x49, 0x79, 0xd1, 0x85, 0x16, 0x6d, 0xa0, 0x6d, - 0xd6, 0x8e, 0xd6, 0xd5, 0x08, 0xc3, 0x49, 0x38, 0x38, 0xe0, 0x80, 0x1c, 0x04, 0xe9, 0x8b, 0x04, - 0x4c, 0xb3, 0xb3, 0xb9, 0xe9, 0xbb, 0x25, 0x38, 0x96, 0x2e, 0x94, 0xb2, 0xe4, 0x82, 0x23, 0xc1, - 0x07, 0x07, 0xda, 0x87, 0x8c, 0x3f, 0x95, 0x3e, 0x75, 0x0b, 0x9d, 0xeb, 0xfc, 0x01, 0xf9, 0xe3, - 0xf9, 0x29, 0x2b, 0x6f, 0x16, 0xcf, 0xfc, 0x30, 0x54, 0x84, 0x4c, 0x20, 0x1b, 0xa7, 0x46, 0x67, - 0xe3, 0xc5, 0x26, 0x97, 0x98, 0x0a, 0xb0, 0xe4, 0x26, 0xd2, 0x0e, 0x56, 0x08, 0x4b, 0xb4, 0xec, - 0xb6, 0xc8, 0x0e, 0x25, 0x60, 0x34, 0x40, 0x76, 0x61, 0xe2, 0xbb, 0x80, 0x86, 0x75, 0x9d, 0x28, - 0x6b, 0xf6, 0x61, 0x29, 0x24, 0xc5, 0xa3, 0x3c, 0xcc, 0x39, 0x47, 0x65, 0x69, 0x04, 0xb3, 0x12, - 0x6a, 0x58, 0xa3, 0x01, 0x8a, 0x8d, 0xdf, 0x33, 0xf1, 0x29, 0x36, 0x4d, 0xdc, 0x72, 0xc2, 0x23, - 0x14, 0xdf, 0x43, 0x91, 0x7e, 0x22, 0xc0, 0xac, 0x0b, 0x47, 0x77, 0x61, 0xd6, 0xc2, 0x6d, 0x7a, - 0xfd, 0x50, 0x59, 0x57, 0x83, 0xb4, 0xf9, 0x3a, 0x43, 0x60, 0xc5, 0xa6, 0x8b, 0x6f, 0x17, 0x9b, - 0xdc, 0xd2, 0x44, 0x9b, 0xff, 0xa3, 0x00, 0x4b, 0xbb, 0xb8, 0x83, 0x83, 0x55, 0x4a, 0x5c, 0x86, - 0xf5, 0x5f, 0xec, 0x09, 0xfe, 0x62, 0x0f, 0x61, 0x15, 0x73, 0xb1, 0x5f, 0xe8, 0xb2, 0x5b, 0x85, - 0x65, 0x5e, 0x1a, 0x4d, 0xef, 0xd2, 0x3f, 0x93, 0x70, 0xd5, 0xf6, 0x05, 0xd3, 0xe8, 0x74, 0xb0, - 0x79, 0xd8, 0x3f, 0xe9, 0x68, 0xd6, 0x93, 0x09, 0x36, 0x77, 0x19, 0x66, 0x74, 0xa3, 0xe5, 0x0b, - 0x9e, 0x69, 0xfb, 0xb1, 0xd2, 0x42, 0x65, 0xb8, 0x14, 0x2c, 0xb3, 0xce, 0x59, 0x12, 0x8e, 0x2e, - 0xb2, 0xb2, 0x67, 0xc1, 0x1b, 0x44, 0x84, 0x59, 0xbb, 0x40, 0x34, 0xf4, 0xce, 0xb9, 0x13, 0x31, - 0xb3, 0xb2, 0xf7, 0x8c, 0xe4, 0x60, 0xc5, 0xf4, 0x86, 0x57, 0x31, 0xc5, 0xee, 0x28, 0xae, 0x78, - 0xfa, 0x78, 0x28, 0xe2, 0xa7, 0x1d, 0xd6, 0x6f, 0x8f, 0xc9, 0x7a, 0x64, 0x26, 0xb8, 0xc8, 0x29, - 0x3e, 0x87, 0xf0, 0xfd, 0xab, 0x00, 0xd7, 0x22, 0xb7, 0xc0, 0xae, 0xfc, 0x16, 0xbc, 0xd0, 0xa3, - 0x0b, 0x9e, 0x11, 0x68, 0x94, 0xdd, 0x1b, 0x69, 0x04, 0xd6, 0xe9, 0x31, 0x28, 0x67, 0x86, 0x4c, - 0x8f, 0x03, 0x8a, 0x05, 0x58, 0x0a, 0x41, 0x9b, 0x68, 0x33, 0x5f, 0x0a, 0xb0, 0x39, 0x50, 0xe5, - 0x48, 0xef, 0x3d, 0x3f, 0xf7, 0x6d, 0x0c, 0x7c, 0x8b, 0xa6, 0xfc, 0x3b, 0xc3, 0x7b, 0x0f, 0x17, - 0xf8, 0x75, 0x45, 0xf0, 0x0d, 0xb8, 0x1e, 0x23, 0x9a, 0x85, 0xf3, 0x17, 0x29, 0xb8, 0x7e, 0xac, - 0x76, 0xb4, 0x96, 0x57, 0xc8, 0x85, 0xf4, 0xc4, 0xf1, 0x26, 0x69, 0x0e, 0x45, 0x00, 0xcd, 0x5a, - 0xf7, 0xbd, 0xa8, 0x1d, 0xc5, 0x7f, 0x8c, 0xeb, 0xf0, 0x39, 0x36, 0x61, 0x8f, 0x42, 0x9a, 0xb0, - 0xb7, 0xc7, 0xd7, 0x35, 0xae, 0x25, 0x3b, 0x0a, 0x26, 0x98, 0xb7, 0xc6, 0xe7, 0x1b, 0xe3, 0x05, - 0x17, 0x8e, 0xe2, 0x6f, 0xb2, 0x6b, 0xfa, 0x73, 0x0a, 0xa4, 0xb8, 0xdd, 0xb3, 0x1c, 0x22, 0xc3, - 0x5c, 0xd3, 0xd0, 0x4f, 0x35, 0xb3, 0x8b, 0x5b, 0xac, 0xfa, 0x7f, 0x73, 0x1c, 0xe3, 0xb1, 0x04, - 0x52, 0x72, 0x69, 0xe5, 0x01, 0x1b, 0x94, 0x83, 0x99, 0x2e, 0xb6, 0x2c, 0xb5, 0xed, 0xaa, 0xe5, - 0x3e, 0x8a, 0x9f, 0x27, 0x61, 0xce, 0x23, 0x41, 0xfa, 0x90, 0x07, 0xd3, 0xf4, 0xb5, 0xf7, 0x2c, - 0x0a, 0x3c, 0xbb, 0x33, 0x27, 0x9e, 0xc1, 0x99, 0x5b, 0x9c, 0x33, 0xd3, 0x70, 0xd8, 0x7d, 0x26, - 0xb5, 0x63, 0xfc, 0xfa, 0x1b, 0x77, 0x40, 0xe9, 0x07, 0x80, 0xaa, 0x9a, 0xc5, 0xba, 0x28, 0x2f, - 0x2d, 0xd9, 0x4d, 0x93, 0xfa, 0x54, 0xc1, 0x3a, 0x31, 0x35, 0x56, 0xae, 0xa7, 0x65, 0xe8, 0xaa, - 0x4f, 0xcb, 0x14, 0x62, 0x97, 0xf4, 0x16, 0x51, 0x4d, 0xa2, 0xe9, 0x6d, 0x85, 0x18, 0x9f, 0x60, - 0x6f, 0x30, 0xe9, 0x42, 0x1b, 0x36, 0x50, 0xfa, 0x4c, 0x80, 0x25, 0x8e, 0x3d, 0xf3, 0xc9, 0x7b, - 0x30, 0x33, 0xe0, 0xcd, 0x95, 0xf1, 0x21, 0xd8, 0x79, 0x6a, 0x36, 0x97, 0x02, 0x6d, 0x00, 0xe8, - 0xf8, 0x29, 0xe1, 0xe4, 0xce, 0xd9, 0x10, 0x47, 0xa6, 0xb8, 0x0d, 0x69, 0x6a, 0x86, 0x71, 0xfb, - 0xe5, 0xcf, 0x13, 0x80, 0xf6, 0x30, 0xf1, 0xda, 0x20, 0x66, 0x83, 0x08, 0x5f, 0x12, 0x9e, 0xc1, - 0x97, 0xde, 0xe7, 0x7c, 0x89, 0x7a, 0xe3, 0x2d, 0xdf, 0x84, 0x36, 0x20, 0x3a, 0x36, 0x13, 0x46, - 0xb4, 0x1e, 0xb4, 0x9e, 0x1b, 0xaf, 0xf5, 0xb8, 0xa0, 0xcb, 0xec, 0xc2, 0x12, 0xa7, 0x33, 0x3b, - 0xd3, 0xdb, 0x80, 0xd4, 0x33, 0x55, 0xeb, 0xa8, 0xb6, 0x5e, 0x6e, 0x67, 0xc7, 0x3a, 0xbd, 0x4b, - 0xde, 0x8a, 0x4b, 0x26, 0x49, 0xfe, 0x82, 0x81, 0xf1, 0x0b, 0x4e, 0x8c, 0x3b, 0xfe, 0x8b, 0x76, - 0x08, 0x87, 0xc9, 0xdd, 0x0b, 0x9d, 0x1a, 0xdf, 0x18, 0x2e, 0x12, 0xd8, 0x64, 0x36, 0x72, 0x80, - 0xfc, 0xef, 0x04, 0xac, 0xc5, 0x60, 0xa3, 0x7b, 0x90, 0x34, 0x7b, 0x4d, 0xe6, 0x4c, 0x2f, 0x8f, - 0xc1, 0x3f, 0x2f, 0x1f, 0x96, 0xf6, 0xa7, 0x64, 0x9b, 0x4a, 0xfc, 0x79, 0x02, 0x92, 0xf2, 0x61, - 0x09, 0xbd, 0xcb, 0x8d, 0x91, 0x5f, 0x1b, 0x93, 0x8b, 0x7f, 0x9a, 0xfc, 0x17, 0x21, 0x6c, 0x9c, - 0x9c, 0x83, 0xe5, 0x92, 0x5c, 0x2e, 0x34, 0xca, 0xca, 0x6e, 0xb9, 0x5a, 0x6e, 0x94, 0x15, 0x3a, - 0x44, 0xce, 0x0a, 0x68, 0x1d, 0x72, 0x87, 0x47, 0xc5, 0x6a, 0xa5, 0xbe, 0xaf, 0x1c, 0xd5, 0xdc, - 0x7f, 0x6c, 0x35, 0x81, 0xb2, 0xb0, 0x50, 0xad, 0xd4, 0x1b, 0x0c, 0x50, 0xcf, 0x26, 0x6d, 0xc8, - 0x5e, 0xb9, 0xa1, 0x94, 0x0a, 0x87, 0x85, 0x52, 0xa5, 0xf1, 0x28, 0x9b, 0x42, 0x22, 0xac, 0xf2, - 0xbc, 0xeb, 0xb5, 0xc2, 0x61, 0x7d, 0xff, 0xa0, 0x91, 0x4d, 0x23, 0x04, 0x19, 0x87, 0xde, 0x05, - 0xd5, 0xb3, 0xd3, 0x36, 0x87, 0x52, 0xf5, 0xa0, 0xe6, 0xe9, 0x30, 0x83, 0x96, 0x21, 0xeb, 0x4a, - 0x96, 0xcb, 0x85, 0x5d, 0x67, 0x8a, 0x31, 0xeb, 0x0d, 0xbc, 0xbe, 0x4c, 0xc0, 0x0a, 0x9d, 0x78, - 0xb9, 0xf3, 0x35, 0x37, 0x06, 0xb7, 0x20, 0x4b, 0x7b, 0x74, 0x25, 0x58, 0x25, 0x65, 0x28, 0xfc, - 0xd8, 0xad, 0x95, 0xdc, 0xe9, 0x74, 0xc2, 0x37, 0x9d, 0xae, 0x04, 0x2b, 0xc7, 0x5b, 0xfc, 0x1c, - 0x37, 0x20, 0x2d, 0xae, 0x19, 0x79, 0x18, 0x52, 0xda, 0xdc, 0x8e, 0xe7, 0x16, 0x97, 0xf6, 0x2f, - 0xd2, 0x79, 0x5c, 0x30, 0x7a, 0xdf, 0x83, 0xd5, 0xa0, 0xbe, 0x2c, 0x90, 0x5e, 0x1b, 0x9a, 0xb6, - 0x7a, 0xe9, 0xc4, 0xc3, 0xf5, 0x30, 0xa4, 0xbf, 0x09, 0x30, 0xeb, 0x82, 0xed, 0x94, 0x6c, 0x69, - 0x3f, 0xc2, 0xdc, 0x74, 0x67, 0xce, 0x86, 0x78, 0xc3, 0x22, 0xff, 0x9c, 0x34, 0x11, 0x9c, 0x93, - 0x86, 0x9e, 0x73, 0x32, 0xf4, 0x9c, 0xbf, 0x0b, 0x8b, 0x4d, 0x5b, 0x7d, 0xcd, 0xd0, 0x15, 0xa2, - 0x75, 0xdd, 0xe1, 0xcd, 0xf0, 0x7b, 0x8d, 0x86, 0xfb, 0xc2, 0x4e, 0x5e, 0x70, 0x09, 0x6c, 0x10, - 0xda, 0x84, 0x05, 0xe7, 0x3d, 0x87, 0x42, 0x0c, 0xa5, 0x6f, 0xe1, 0x5c, 0xda, 0x69, 0x65, 0xc1, - 0x81, 0x35, 0x8c, 0x23, 0x0b, 0x4b, 0x7f, 0x12, 0x60, 0x85, 0x76, 0xe8, 0x41, 0x77, 0x1c, 0x35, - 0xef, 0xf5, 0x7b, 0x5c, 0x20, 0xcb, 0x87, 0x32, 0xfc, 0xba, 0x1a, 0x94, 0x1c, 0xac, 0x06, 0xe5, - 0xb1, 0xae, 0xe4, 0x37, 0x02, 0x2c, 0xdb, 0x57, 0xac, 0xbb, 0xf0, 0xbc, 0x6f, 0xfc, 0x09, 0x4e, - 0x32, 0x60, 0xcc, 0x54, 0xd0, 0x98, 0xd2, 0xef, 0x04, 0x58, 0x09, 0xe8, 0xca, 0x3c, 0xf5, 0x9d, - 0x60, 0xf9, 0x70, 0xc3, 0x5f, 0x3e, 0x0c, 0xe1, 0x4f, 0x58, 0x40, 0xdc, 0x71, 0x0b, 0x88, 0xc9, - 0x02, 0xe2, 0xab, 0x14, 0xac, 0xd6, 0x8c, 0x16, 0xae, 0x13, 0xb5, 0x3d, 0xc9, 0x50, 0xea, 0xfb, - 0xc3, 0x3d, 0x3e, 0xf5, 0x9d, 0x1d, 0x57, 0x58, 0x38, 0xd7, 0x71, 0x5a, 0x7b, 0x94, 0x87, 0x25, - 0x8b, 0xa8, 0x6d, 0xe7, 0xd0, 0x54, 0xb3, 0x8d, 0x89, 0xd2, 0x53, 0xc9, 0x13, 0x76, 0x22, 0x97, - 0xd8, 0x52, 0xc3, 0x59, 0x39, 0x54, 0xc9, 0x93, 0xf0, 0x59, 0x51, 0x6a, 0xe2, 0x59, 0xd1, 0xfb, - 0xc1, 0x76, 0xed, 0xd5, 0x11, 0x7b, 0x89, 0x49, 0xbd, 0xdf, 0x8b, 0x98, 0x03, 0xbd, 0x3e, 0x82, - 0xe5, 0xe8, 0xf9, 0xcf, 0xc5, 0xe7, 0x1e, 0xdf, 0xf0, 0x08, 0xe9, 0x0a, 0x5c, 0x1e, 0xda, 0x3c, - 0x0b, 0xf4, 0x36, 0xe4, 0xec, 0xa5, 0x23, 0xdd, 0x9a, 0xd0, 0x1d, 0x23, 0x3c, 0x26, 0x11, 0xe1, - 0x31, 0xd2, 0x1a, 0x5c, 0x09, 0x11, 0xc4, 0xb4, 0xf8, 0x43, 0x9a, 0xaa, 0x31, 0xf9, 0x34, 0xf3, - 0xa3, 0xa8, 0xa8, 0x78, 0xd3, 0x7f, 0xec, 0xa1, 0x83, 0xbf, 0xaf, 0x23, 0x2e, 0xae, 0xc1, 0xbc, - 0x1f, 0x8f, 0x25, 0x2b, 0x32, 0x22, 0x70, 0xd2, 0x17, 0x1a, 0xb2, 0x4e, 0x07, 0x86, 0xac, 0xd5, - 0x41, 0x50, 0xcd, 0xf0, 0x05, 0x48, 0xa4, 0x29, 0x62, 0xc2, 0xea, 0xf1, 0x50, 0x58, 0xcd, 0xf2, - 0x93, 0xdb, 0x48, 0xa6, 0xff, 0x07, 0x81, 0xc5, 0x9c, 0x3a, 0x74, 0xa4, 0x2a, 0x3d, 0x06, 0x91, - 0x7a, 0xfc, 0xe4, 0x43, 0xce, 0x80, 0x1b, 0x25, 0x82, 0x6e, 0x24, 0x6d, 0xc0, 0x5a, 0x28, 0x6f, - 0x26, 0xfa, 0x11, 0xd5, 0x6b, 0x0f, 0xb3, 0x1e, 0xb9, 0x4e, 0x54, 0x62, 0x8d, 0x2b, 0x99, 0x2d, - 0xfa, 0x25, 0x53, 0x90, 0x23, 0x79, 0x8f, 0xee, 0x2a, 0xc8, 0x9a, 0xdd, 0xb8, 0xaf, 0x40, 0xba, - 0xef, 0x8c, 0x7b, 0xe8, 0x7d, 0xbb, 0xc4, 0xbb, 0xf4, 0x91, 0xbd, 0x24, 0x53, 0x0c, 0xe9, 0xf7, - 0x02, 0xcc, 0xfb, 0xc0, 0x68, 0x1d, 0xe6, 0xbc, 0xee, 0xcf, 0x2d, 0x0d, 0x3d, 0x80, 0x7d, 0x06, - 0xc4, 0x20, 0x6a, 0x87, 0xbd, 0x41, 0xa4, 0x0f, 0x76, 0x35, 0xdf, 0xb7, 0x30, 0xad, 0x1c, 0x92, - 0xb2, 0xf3, 0x1f, 0xbd, 0x06, 0xa9, 0xbe, 0xae, 0x11, 0x27, 0xf6, 0x32, 0xc1, 0xa0, 0x72, 0x44, - 0xe5, 0x8f, 0x74, 0x8d, 0xc8, 0x0e, 0x96, 0x74, 0x0b, 0x52, 0xf6, 0x13, 0xdf, 0x24, 0xcd, 0x41, - 0xba, 0xf8, 0xa8, 0x51, 0xae, 0x67, 0x05, 0x04, 0x30, 0x5d, 0xa9, 0x1d, 0xec, 0x96, 0xeb, 0xd9, - 0x84, 0xb4, 0xee, 0x6d, 0x3d, 0xac, 0x09, 0xfd, 0x98, 0x1e, 0x49, 0x54, 0xfb, 0x59, 0x08, 0x6d, - 0x3f, 0x37, 0xb8, 0xcb, 0x69, 0x44, 0xe3, 0xf9, 0x85, 0x00, 0x2b, 0xa1, 0x78, 0xe8, 0x8e, 0xbf, - 0xe5, 0xbc, 0x1e, 0xcb, 0xd3, 0xdf, 0x6c, 0xfe, 0x54, 0xa0, 0xcd, 0xe6, 0x5d, 0xae, 0xd9, 0x7c, - 0x69, 0x24, 0xbd, 0xbf, 0xcd, 0x2c, 0x45, 0x74, 0x99, 0xf5, 0x46, 0x61, 0xaf, 0xac, 0x1c, 0xd5, - 0xe8, 0xaf, 0xd7, 0x65, 0x2e, 0x43, 0xd6, 0xee, 0x1a, 0xd9, 0xa7, 0x4b, 0xf5, 0x46, 0x81, 0xfb, - 0x4c, 0x69, 0x19, 0x10, 0xb3, 0xa1, 0xff, 0x5b, 0xb8, 0xcf, 0x04, 0x58, 0xe2, 0xc0, 0xcc, 0xa4, - 0xbe, 0x57, 0x01, 0x02, 0xf7, 0x2a, 0x60, 0x1b, 0x96, 0xed, 0x22, 0x95, 0x7a, 0xad, 0xa5, 0xf4, - 0xb0, 0xa9, 0xd8, 0x2b, 0xcc, 0x77, 0x2e, 0x75, 0xd5, 0xa7, 0x6c, 0x74, 0x74, 0x88, 0x4d, 0x9b, - 0xf1, 0x73, 0x18, 0x96, 0xec, 0xfc, 0x47, 0x80, 0xd9, 0x4a, 0x0b, 0xeb, 0xc4, 0x3e, 0x8f, 0x1a, - 0x2c, 0x72, 0x1f, 0xd4, 0xa1, 0xf5, 0x88, 0xef, 0xec, 0x9c, 0x0d, 0x8a, 0x1b, 0xb1, 0x5f, 0xe1, - 0x49, 0x53, 0xe8, 0xd4, 0xf7, 0x31, 0x20, 0x37, 0x31, 0x7a, 0x71, 0x88, 0x32, 0xc4, 0x35, 0xc5, - 0x9b, 0x23, 0xb0, 0x3c, 0x39, 0x6f, 0x41, 0xda, 0xf9, 0x2c, 0x0c, 0x2d, 0x7b, 0xdf, 0xad, 0xf9, - 0xbe, 0x1a, 0x13, 0x57, 0x02, 0x50, 0x97, 0x6e, 0xe7, 0xbf, 0x33, 0x00, 0x83, 0xd1, 0x04, 0x7a, - 0x00, 0x0b, 0xfe, 0x2f, 0x53, 0xd0, 0x5a, 0xcc, 0x77, 0x51, 0xe2, 0x7a, 0xf8, 0xa2, 0xa7, 0xd3, - 0x03, 0x58, 0xf0, 0xbf, 0x07, 0x1d, 0x30, 0x0b, 0x79, 0x17, 0x3b, 0x60, 0x16, 0xfa, 0xea, 0x74, - 0x0a, 0x75, 0xe0, 0x72, 0xc4, 0x9b, 0x30, 0xf4, 0xd2, 0x78, 0xef, 0x0b, 0xc5, 0x97, 0xc7, 0x7c, - 0xa5, 0x26, 0x4d, 0x21, 0x13, 0xae, 0x44, 0xbe, 0x00, 0x42, 0x5b, 0xe3, 0xbe, 0x9e, 0x12, 0x5f, - 0x19, 0x03, 0xd3, 0x93, 0xd9, 0x07, 0x31, 0x7a, 0xea, 0x8c, 0x5e, 0x19, 0xfb, 0x75, 0x88, 0x78, - 0x6b, 0xfc, 0x21, 0xb6, 0x34, 0x85, 0xf6, 0x61, 0xde, 0x37, 0x92, 0x45, 0x62, 0xe8, 0x9c, 0x96, - 0x32, 0x5e, 0x8b, 0x99, 0xe1, 0x52, 0x4e, 0xbe, 0xb1, 0xe1, 0x80, 0xd3, 0xf0, 0xfc, 0x73, 0xc0, - 0x29, 0x64, 0xce, 0x18, 0x34, 0x7f, 0x20, 0x2f, 0x87, 0x99, 0x3f, 0x3c, 0xb1, 0x87, 0x99, 0x3f, - 0x22, 0xc9, 0x4b, 0x53, 0xe8, 0x03, 0xc8, 0xf0, 0x63, 0x13, 0xb4, 0x11, 0x3b, 0xfe, 0x11, 0xaf, - 0x46, 0x2d, 0xfb, 0x59, 0xf2, 0x5d, 0xfa, 0x80, 0x65, 0xe8, 0xb4, 0x60, 0xc0, 0x32, 0xa2, 0xb9, - 0x9f, 0xb2, 0xf3, 0x13, 0xd7, 0x01, 0x0f, 0xf2, 0x53, 0x58, 0xd3, 0x3f, 0xc8, 0x4f, 0xa1, 0x6d, - 0xb3, 0x34, 0xb5, 0xf3, 0xe3, 0x34, 0xa4, 0x9c, 0x44, 0xda, 0x80, 0x17, 0x02, 0x9d, 0x06, 0xba, - 0x1a, 0xdf, 0x7f, 0x89, 0xd7, 0x22, 0xd7, 0x3d, 0x75, 0x1f, 0xc3, 0xa5, 0xa1, 0xde, 0x01, 0x6d, - 0xfa, 0xe9, 0xc2, 0xfa, 0x17, 0xf1, 0x7a, 0x0c, 0x46, 0x90, 0x37, 0x9f, 0x0b, 0x36, 0x47, 0x15, - 0xb7, 0x3c, 0xef, 0xa8, 0xf8, 0xff, 0x98, 0xde, 0x5b, 0xc1, 0xc8, 0x97, 0x78, 0xbd, 0x42, 0x63, - 0xfe, 0x46, 0x2c, 0x8e, 0x27, 0xe1, 0x23, 0xef, 0xc2, 0xf4, 0x55, 0x63, 0x88, 0x53, 0x2e, 0xb4, - 0x08, 0x14, 0xa5, 0x38, 0x94, 0xe0, 0x06, 0x82, 0xb1, 0x13, 0x24, 0x0e, 0x8b, 0x9a, 0x1b, 0xb1, - 0x38, 0xfe, 0x68, 0xf7, 0x5d, 0xed, 0x83, 0x68, 0x1f, 0x2e, 0x03, 0x06, 0xd1, 0x1e, 0x52, 0x0b, - 0x48, 0x53, 0x77, 0xdf, 0x01, 0x68, 0x5a, 0x9a, 0x42, 0xfb, 0x16, 0xb4, 0x31, 0x34, 0xe8, 0x7b, - 0x4f, 0xc3, 0x9d, 0xd6, 0x41, 0x8f, 0x68, 0x86, 0x6e, 0xe5, 0x7e, 0x3d, 0xeb, 0x34, 0x4d, 0x73, - 0x4d, 0x4b, 0xa3, 0xed, 0x43, 0x31, 0xfd, 0x38, 0xd9, 0xb4, 0xb4, 0x93, 0x69, 0x07, 0xff, 0x8d, - 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x47, 0x5d, 0xbf, 0x76, 0x3a, 0x30, 0x00, 0x00, +var fileDescriptor_csi_2c5455657a82ae49 = []byte{ + // 3276 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4d, 0x70, 0xdb, 0xc6, + 0x15, 0x26, 0xf8, 0x23, 0x51, 0x4f, 0x3f, 0xa6, 0x57, 0x3f, 0xa6, 0x21, 0xc9, 0x96, 0xe1, 0xd8, + 0x51, 0x1c, 0x9b, 0x6a, 0x94, 0x38, 0xd3, 0xd8, 0x4e, 0x1b, 0x8a, 0xa2, 0x25, 0xc6, 0x34, 0xa9, + 0x80, 0x94, 0x1c, 0xbb, 0xcd, 0x20, 0x10, 0xb9, 0xa2, 0x31, 0x21, 0x01, 0x06, 0x00, 0x55, 0xa9, + 0x97, 0xce, 0xb4, 0xa7, 0x4c, 0xcf, 0x9d, 0xb6, 0xa7, 0xce, 0xa4, 0xbd, 0xb4, 0xd3, 0x4c, 0x4f, + 0x9d, 0x1e, 0x3b, 0xd3, 0x63, 0x0f, 0xbd, 0xb6, 0x93, 0x4b, 0xae, 0x9d, 0x4c, 0x3b, 0x93, 0xe9, + 0xb1, 0xa7, 0x0e, 0xb0, 0x0b, 0x10, 0x0b, 0x02, 0x20, 0x69, 0xd9, 0xe3, 0x43, 0x4f, 0x24, 0xde, + 0xbe, 0x7d, 0xfb, 0xf6, 0xe1, 0xbd, 0xb7, 0xef, 0x7d, 0x0b, 0xb8, 0xdd, 0x52, 0xcc, 0xa7, 0xbd, + 0xc3, 0x5c, 0x43, 0xeb, 0x6c, 0x34, 0x34, 0xd5, 0x94, 0x15, 0x15, 0xeb, 0xb7, 0x0c, 0x53, 0xd3, + 0xe5, 0x16, 0xbe, 0xa5, 0xa8, 0x26, 0xd6, 0x8f, 0xe4, 0x06, 0xde, 0x30, 0xba, 0xb8, 0xb1, 0xd1, + 0x30, 0x94, 0x5c, 0x57, 0xd7, 0x4c, 0x0d, 0x4d, 0x58, 0x7f, 0x8f, 0xdf, 0xe0, 0xd7, 0x5a, 0x9a, + 0xd6, 0x6a, 0xe3, 0x0d, 0x9b, 0x7a, 0xd8, 0x3b, 0xda, 0x68, 0x62, 0xa3, 0xa1, 0x2b, 0x5d, 0x53, + 0xd3, 0x09, 0x27, 0x7f, 0xd9, 0xcf, 0x61, 0x2a, 0x1d, 0x6c, 0x98, 0x72, 0xa7, 0x4b, 0x19, 0x2e, + 0xf9, 0x19, 0x7e, 0xa0, 0xcb, 0xdd, 0x2e, 0xd6, 0x0d, 0x32, 0x2e, 0x2c, 0xc1, 0xc2, 0x0e, 0x36, + 0xf7, 0xda, 0xbd, 0x96, 0xa2, 0x96, 0xd4, 0x23, 0x4d, 0xc4, 0x9f, 0xf6, 0xb0, 0x61, 0x0a, 0xff, + 0xe0, 0x60, 0xd1, 0x37, 0x60, 0x74, 0x35, 0xd5, 0xc0, 0x08, 0x41, 0x52, 0x95, 0x3b, 0x38, 0xcb, + 0xad, 0x71, 0xeb, 0x53, 0xa2, 0xfd, 0x1f, 0x5d, 0x83, 0xb9, 0x63, 0xac, 0x36, 0x35, 0x5d, 0x3a, + 0xc6, 0xba, 0xa1, 0x68, 0x6a, 0x36, 0x6e, 0x8f, 0xce, 0x12, 0xea, 0x01, 0x21, 0xa2, 0x1d, 0x48, + 0x77, 0x64, 0x55, 0x39, 0xc2, 0x86, 0x99, 0x4d, 0xac, 0x25, 0xd6, 0xa7, 0x37, 0x5f, 0xcf, 0x91, + 0xad, 0xe6, 0x02, 0xd7, 0xca, 0x3d, 0xa4, 0xdc, 0x45, 0xd5, 0xd4, 0x4f, 0x45, 0x77, 0x32, 0x7f, + 0x17, 0x66, 0x99, 0x21, 0x94, 0x81, 0xc4, 0x27, 0xf8, 0x94, 0xea, 0x64, 0xfd, 0x45, 0x0b, 0x90, + 0x3a, 0x96, 0xdb, 0x3d, 0x4c, 0x35, 0x21, 0x0f, 0x77, 0xe2, 0xdf, 0xe6, 0x84, 0x4b, 0xb0, 0xe2, + 0xae, 0x56, 0x90, 0xbb, 0xf2, 0xa1, 0xd2, 0x56, 0x4c, 0x05, 0x1b, 0xce, 0xd6, 0x3f, 0x82, 0xd5, + 0x90, 0x71, 0x6a, 0x81, 0x7b, 0x30, 0xd3, 0xf0, 0xd0, 0xb3, 0x9c, 0xbd, 0x95, 0xac, 0xb3, 0x15, + 0xdf, 0xcc, 0x53, 0x91, 0xe1, 0x16, 0xfe, 0x96, 0x80, 0x8c, 0x9f, 0x05, 0xdd, 0x83, 0x49, 0x03, + 0xeb, 0xc7, 0x4a, 0x83, 0xd8, 0x75, 0x7a, 0x73, 0x2d, 0x4c, 0x5a, 0xae, 0x46, 0xf8, 0x76, 0x63, + 0xa2, 0x33, 0x05, 0xed, 0x43, 0xe6, 0x58, 0x6b, 0xf7, 0x3a, 0x58, 0xc2, 0x27, 0x5d, 0x59, 0x75, + 0x5f, 0xc0, 0xf4, 0xe6, 0x7a, 0xa8, 0x98, 0x03, 0x7b, 0x42, 0xd1, 0xe1, 0xdf, 0x8d, 0x89, 0xe7, + 0x8e, 0x59, 0x12, 0xff, 0x73, 0x0e, 0x26, 0xe9, 0x6a, 0xe8, 0x1d, 0x48, 0x9a, 0xa7, 0x5d, 0xa2, + 0xdd, 0xdc, 0xe6, 0xb5, 0x61, 0xda, 0xe5, 0xea, 0xa7, 0x5d, 0x2c, 0xda, 0x53, 0x84, 0x0f, 0x20, + 0x69, 0x3d, 0xa1, 0x69, 0x98, 0xdc, 0xaf, 0x3c, 0xa8, 0x54, 0x1f, 0x55, 0x32, 0x31, 0xb4, 0x04, + 0xa8, 0x50, 0xad, 0xd4, 0xc5, 0x6a, 0xb9, 0x5c, 0x14, 0xa5, 0x5a, 0x51, 0x3c, 0x28, 0x15, 0x8a, + 0x19, 0x0e, 0xbd, 0x02, 0x6b, 0x07, 0xd5, 0xf2, 0xfe, 0xc3, 0xa2, 0x94, 0x2f, 0x14, 0x8a, 0xb5, + 0x5a, 0x69, 0xab, 0x54, 0x2e, 0xd5, 0x1f, 0x4b, 0x85, 0x6a, 0xa5, 0x56, 0x17, 0xf3, 0xa5, 0x4a, + 0xbd, 0x96, 0x89, 0xf3, 0x3f, 0xe6, 0xe0, 0x9c, 0x6f, 0x03, 0x28, 0xcf, 0x68, 0x78, 0x6b, 0xd4, + 0x8d, 0x7b, 0x35, 0xbd, 0x19, 0xa4, 0x29, 0xc0, 0x44, 0xb5, 0x52, 0x2e, 0x55, 0x2c, 0xed, 0xa6, + 0x61, 0xb2, 0x7a, 0xff, 0xbe, 0xfd, 0x10, 0xdf, 0x9a, 0x20, 0x0b, 0x0a, 0x73, 0x30, 0xb3, 0xa7, + 0x6b, 0x87, 0xd8, 0xf1, 0x9f, 0x3c, 0xcc, 0xd2, 0x67, 0xea, 0x2f, 0xdf, 0x82, 0x94, 0x8e, 0xe5, + 0xe6, 0x29, 0x7d, 0xb5, 0x7c, 0x8e, 0xc4, 0x64, 0xce, 0x89, 0xc9, 0xdc, 0x96, 0xa6, 0xb5, 0x0f, + 0x2c, 0xff, 0x14, 0x09, 0xa3, 0xf0, 0x4d, 0x12, 0xe6, 0x0b, 0x3a, 0x96, 0x4d, 0x4c, 0xb4, 0xa5, + 0xa2, 0x03, 0x63, 0xef, 0x1e, 0xcc, 0x59, 0xfe, 0xd5, 0x50, 0xcc, 0x53, 0x49, 0x97, 0xd5, 0x16, + 0xa6, 0xaf, 0x7e, 0xd1, 0xb1, 0x40, 0x81, 0x8e, 0x8a, 0xd6, 0xa0, 0x38, 0xdb, 0xf0, 0x3e, 0xa2, + 0x12, 0xcc, 0x53, 0xd7, 0x61, 0x5c, 0x3a, 0xc1, 0xba, 0x34, 0xd1, 0xc2, 0xe3, 0xd2, 0xe8, 0x98, + 0xa5, 0x28, 0xd8, 0x40, 0x0f, 0x00, 0xba, 0xb2, 0x2e, 0x77, 0xb0, 0x89, 0x75, 0x23, 0x9b, 0x64, + 0xe3, 0x3b, 0x60, 0x37, 0xb9, 0x3d, 0x97, 0x9b, 0xc4, 0xb7, 0x67, 0x3a, 0xda, 0xb1, 0x02, 0xa2, + 0xa1, 0x63, 0xd3, 0xc8, 0xa6, 0x6c, 0x49, 0xeb, 0x51, 0x92, 0x6a, 0x84, 0xd5, 0x16, 0xb3, 0x95, + 0xf8, 0xc5, 0x16, 0x27, 0x3a, 0xb3, 0x51, 0x15, 0x16, 0x9d, 0x0d, 0x6a, 0xaa, 0x89, 0x55, 0x53, + 0x32, 0xb4, 0x9e, 0xde, 0xc0, 0xd9, 0x09, 0xdb, 0x4a, 0xcb, 0xbe, 0x2d, 0x12, 0x9e, 0x9a, 0xcd, + 0x22, 0x52, 0xd3, 0x30, 0x44, 0xf4, 0x04, 0x78, 0xb9, 0xd1, 0xc0, 0x86, 0xa1, 0x10, 0x5b, 0x48, + 0x3a, 0xfe, 0xb4, 0xa7, 0xe8, 0xb8, 0x83, 0x55, 0xd3, 0xc8, 0x4e, 0xb2, 0x52, 0xeb, 0x5a, 0x57, + 0x6b, 0x6b, 0xad, 0x53, 0xb1, 0xcf, 0x23, 0x5e, 0x64, 0xa6, 0x7b, 0x46, 0x0c, 0xfe, 0x5d, 0x38, + 0xe7, 0x33, 0xca, 0x38, 0x99, 0x8d, 0xbf, 0x03, 0x33, 0x5e, 0x4b, 0x8c, 0x95, 0x15, 0x7f, 0x1a, + 0x87, 0xf9, 0x00, 0x1b, 0xa0, 0x5d, 0x48, 0x1b, 0xaa, 0xdc, 0x35, 0x9e, 0x6a, 0x26, 0xf5, 0xdf, + 0x1b, 0x11, 0x26, 0xcb, 0xd5, 0x28, 0x2f, 0x79, 0xdc, 0x8d, 0x89, 0xee, 0x6c, 0xb4, 0x05, 0x13, + 0xc4, 0x9e, 0xfe, 0xdc, 0x14, 0x24, 0x87, 0xd0, 0x5c, 0x29, 0x74, 0x26, 0xff, 0x06, 0xcc, 0xb1, + 0x2b, 0xa0, 0xcb, 0x30, 0xed, 0xac, 0x20, 0x29, 0x4d, 0xba, 0x57, 0x70, 0x48, 0xa5, 0x26, 0xff, + 0x3a, 0xcc, 0x78, 0x85, 0xa1, 0x65, 0x98, 0xa2, 0x0e, 0xe1, 0xb2, 0xa7, 0x09, 0xa1, 0xd4, 0x74, + 0x63, 0xfa, 0x3b, 0xb0, 0xc0, 0xfa, 0x19, 0x0d, 0xe5, 0xeb, 0xee, 0x1e, 0x88, 0x2d, 0xe6, 0xd8, + 0x3d, 0x38, 0x7a, 0x0a, 0xbf, 0x4b, 0x42, 0xc6, 0x1f, 0x34, 0xe8, 0x1e, 0xa4, 0x0e, 0xdb, 0x5a, + 0xe3, 0x13, 0x3a, 0xf7, 0x95, 0xb0, 0xe8, 0xca, 0x6d, 0x59, 0x5c, 0x84, 0xba, 0x1b, 0x13, 0xc9, + 0x24, 0x6b, 0x76, 0x47, 0xeb, 0xa9, 0x26, 0xb5, 0x5e, 0xf8, 0xec, 0x87, 0x16, 0x57, 0x7f, 0xb6, + 0x3d, 0x09, 0x6d, 0xc3, 0x34, 0x71, 0x3b, 0xa9, 0xa3, 0x35, 0x71, 0x36, 0x61, 0xcb, 0xb8, 0x1a, + 0x2a, 0x23, 0x6f, 0xf3, 0x3e, 0xd4, 0x9a, 0x58, 0x04, 0xd9, 0xfd, 0xcf, 0xcf, 0xc2, 0xb4, 0x47, + 0x37, 0x7e, 0x07, 0xa6, 0x3d, 0x8b, 0xa1, 0x0b, 0x30, 0x79, 0x64, 0x48, 0x6e, 0x12, 0x9e, 0x12, + 0x27, 0x8e, 0x0c, 0x3b, 0x9f, 0x5e, 0x86, 0x69, 0x5b, 0x0b, 0xe9, 0xa8, 0x2d, 0xb7, 0x8c, 0x6c, + 0x7c, 0x2d, 0x61, 0xbd, 0x23, 0x9b, 0x74, 0xdf, 0xa2, 0xf0, 0xff, 0xe2, 0x00, 0xfa, 0x4b, 0xa2, + 0x7b, 0x90, 0xb4, 0xb5, 0x24, 0xa9, 0x7c, 0x7d, 0x04, 0x2d, 0x73, 0xb6, 0xaa, 0xf6, 0x2c, 0xe1, + 0x57, 0x1c, 0x24, 0x6d, 0x31, 0xfe, 0x03, 0xa7, 0x56, 0xaa, 0xec, 0x94, 0x8b, 0x52, 0xa5, 0xba, + 0x5d, 0x94, 0x1e, 0x89, 0xa5, 0x7a, 0x51, 0xcc, 0x70, 0x68, 0x19, 0x2e, 0x78, 0xe9, 0x62, 0x31, + 0xbf, 0x5d, 0x14, 0xa5, 0x6a, 0xa5, 0xfc, 0x38, 0x13, 0x47, 0x3c, 0x2c, 0x3d, 0xdc, 0x2f, 0xd7, + 0x4b, 0x83, 0x63, 0x09, 0xb4, 0x02, 0x59, 0xcf, 0x18, 0x95, 0x41, 0xc5, 0x26, 0x2d, 0xb1, 0x9e, + 0x51, 0xf2, 0x97, 0x0e, 0xa6, 0xb6, 0x66, 0xdd, 0x97, 0x61, 0x3b, 0xdb, 0x23, 0x98, 0x65, 0x72, + 0xb4, 0x55, 0x4e, 0xd1, 0xa4, 0xd2, 0x94, 0x0e, 0x4f, 0x4d, 0xbb, 0xc4, 0xe0, 0xd6, 0x13, 0xe2, + 0xac, 0x43, 0xdd, 0xb2, 0x88, 0x96, 0x59, 0xdb, 0x4a, 0x47, 0x31, 0x29, 0x4f, 0xdc, 0xe6, 0x01, + 0x9b, 0x64, 0x33, 0x08, 0x5f, 0xc5, 0x61, 0x82, 0xbe, 0x9b, 0x6b, 0x9e, 0x53, 0x82, 0x11, 0xe9, + 0x50, 0x89, 0x48, 0x26, 0x38, 0xe2, 0x6c, 0x70, 0xa0, 0x5d, 0x98, 0xf3, 0xa6, 0xd2, 0x13, 0xa7, + 0x88, 0xbb, 0xc2, 0xbe, 0x20, 0x6f, 0x3c, 0x9f, 0xd0, 0xd2, 0x6d, 0xf6, 0xd8, 0x4b, 0x43, 0x5b, + 0x30, 0xe7, 0xcb, 0xc6, 0xc9, 0xe1, 0xd9, 0x78, 0xb6, 0xc1, 0x24, 0xa6, 0x3c, 0xcc, 0x3b, 0x89, + 0xb4, 0x8d, 0x25, 0x93, 0x26, 0x5a, 0x7a, 0x5a, 0x64, 0x06, 0x12, 0x30, 0xea, 0x33, 0x3b, 0x34, + 0xfe, 0x3d, 0x40, 0x83, 0xba, 0x8e, 0x95, 0x35, 0x7b, 0x30, 0x1f, 0x90, 0xe2, 0x51, 0x0e, 0xa6, + 0xec, 0x57, 0x65, 0x28, 0x26, 0xa6, 0xe5, 0xe1, 0xa0, 0x46, 0x7d, 0x16, 0x8b, 0xbf, 0xab, 0xe3, + 0x23, 0xac, 0xeb, 0xb8, 0x69, 0x87, 0x47, 0x20, 0xbf, 0xcb, 0x22, 0xfc, 0x84, 0x83, 0xb4, 0x43, + 0x47, 0x77, 0x20, 0x6d, 0xe0, 0x16, 0x39, 0x7e, 0xc8, 0x5a, 0x97, 0xfc, 0x73, 0x73, 0x35, 0xca, + 0x40, 0x0b, 0x69, 0x87, 0xdf, 0x2a, 0xa4, 0x99, 0xa1, 0xb1, 0x36, 0xff, 0x27, 0x0e, 0xe6, 0xb7, + 0x71, 0x1b, 0xfb, 0xab, 0x94, 0xa8, 0x0c, 0xeb, 0x3d, 0xd8, 0xe3, 0xec, 0xc1, 0x1e, 0x20, 0x2a, + 0xe2, 0x60, 0x3f, 0xd3, 0x61, 0xb7, 0x04, 0x0b, 0xec, 0x6a, 0x24, 0xbd, 0x0b, 0xff, 0x4e, 0xc0, + 0x25, 0xcb, 0x17, 0x74, 0xad, 0xdd, 0xc6, 0xfa, 0x5e, 0xef, 0xb0, 0xad, 0x18, 0x4f, 0xc7, 0xd8, + 0xdc, 0x05, 0x98, 0x54, 0xb5, 0xa6, 0x27, 0x78, 0x26, 0xac, 0xc7, 0x52, 0x13, 0x15, 0xe1, 0xbc, + 0xbf, 0xcc, 0x3a, 0xa5, 0x49, 0x38, 0xbc, 0xc8, 0xca, 0x1c, 0xfb, 0x4f, 0x10, 0x1e, 0xd2, 0x56, + 0x81, 0xa8, 0xa9, 0xed, 0x53, 0x3b, 0x62, 0xd2, 0xa2, 0xfb, 0x8c, 0x44, 0x7f, 0xc5, 0xf4, 0xa6, + 0x5b, 0x31, 0x45, 0xee, 0x28, 0xaa, 0x78, 0xfa, 0x78, 0x20, 0xe2, 0x27, 0x6c, 0xd1, 0xef, 0x8c, + 0x28, 0x7a, 0x68, 0x26, 0x38, 0xcb, 0x5b, 0x7c, 0x0e, 0xe1, 0xfb, 0x57, 0x0e, 0x2e, 0x87, 0x6e, + 0x81, 0x1e, 0xf9, 0x4d, 0x38, 0xd7, 0x25, 0x03, 0xae, 0x11, 0x48, 0x94, 0xdd, 0x1d, 0x6a, 0x04, + 0xda, 0xc5, 0x52, 0x2a, 0x63, 0x86, 0xb9, 0x2e, 0x43, 0xe4, 0xf3, 0x30, 0x1f, 0xc0, 0x36, 0xd6, + 0x66, 0xbe, 0xe6, 0x60, 0xad, 0xaf, 0xca, 0xbe, 0xda, 0x7d, 0x7e, 0xee, 0x5b, 0xef, 0xfb, 0x16, + 0x49, 0xf9, 0xb7, 0x07, 0xf7, 0x1e, 0xbc, 0xe0, 0x8b, 0x8a, 0xe0, 0xab, 0x70, 0x25, 0x62, 0x69, + 0x1a, 0xce, 0x5f, 0x25, 0xe1, 0xca, 0x81, 0xdc, 0x56, 0x9a, 0x6e, 0x21, 0x17, 0xd0, 0xef, 0x47, + 0x9b, 0xa4, 0x31, 0x10, 0x01, 0x24, 0x6b, 0xdd, 0x73, 0xa3, 0x76, 0x98, 0xfc, 0x11, 0x8e, 0xc3, + 0xe7, 0xd8, 0x84, 0x3d, 0x0e, 0x68, 0xc2, 0xde, 0x19, 0x5d, 0xd7, 0xa8, 0x96, 0x6c, 0xdf, 0x9f, + 0x60, 0xde, 0x1e, 0x5d, 0x6e, 0x84, 0x17, 0x9c, 0x39, 0x8a, 0x5f, 0x66, 0xd7, 0xf4, 0x97, 0x24, + 0x08, 0x51, 0xbb, 0xa7, 0x39, 0x44, 0x84, 0xa9, 0x86, 0xa6, 0x1e, 0x29, 0x7a, 0x07, 0x37, 0x69, + 0xf5, 0xff, 0xd6, 0x28, 0xc6, 0xa3, 0x09, 0xa4, 0xe0, 0xcc, 0x15, 0xfb, 0x62, 0x50, 0x16, 0x26, + 0x3b, 0xd8, 0x30, 0xe4, 0x96, 0xa3, 0x96, 0xf3, 0xc8, 0x7f, 0x91, 0x80, 0x29, 0x77, 0x0a, 0x52, + 0x07, 0x3c, 0x98, 0xa4, 0xaf, 0x9d, 0x67, 0x51, 0xe0, 0xd9, 0x9d, 0x39, 0xfe, 0x0c, 0xce, 0xdc, + 0x64, 0x9c, 0x99, 0x84, 0xc3, 0xf6, 0x33, 0xa9, 0x1d, 0xe1, 0xd7, 0x2f, 0xdd, 0x01, 0x85, 0xef, + 0x03, 0x2a, 0x2b, 0x06, 0xed, 0xa2, 0xdc, 0xb4, 0x64, 0x35, 0x4d, 0xf2, 0x89, 0x84, 0x55, 0x53, + 0x57, 0x68, 0xb9, 0x9e, 0x12, 0xa1, 0x23, 0x9f, 0x14, 0x09, 0xc5, 0x2a, 0xe9, 0x0d, 0x53, 0xd6, + 0x4d, 0x45, 0x6d, 0x49, 0xa6, 0xf6, 0x09, 0x76, 0x41, 0x57, 0x87, 0x5a, 0xb7, 0x88, 0xc2, 0xe7, + 0x1c, 0xcc, 0x33, 0xe2, 0xa9, 0x4f, 0xde, 0x85, 0xc9, 0xbe, 0x6c, 0xa6, 0x8c, 0x0f, 0xe0, 0xce, + 0x11, 0xb3, 0x39, 0x33, 0xd0, 0x2a, 0x80, 0x8a, 0x4f, 0x4c, 0x66, 0xdd, 0x29, 0x8b, 0x62, 0xaf, + 0xc9, 0x6f, 0x40, 0x8a, 0x98, 0x61, 0xd4, 0x7e, 0xf9, 0x8b, 0x38, 0xa0, 0x1d, 0x6c, 0xba, 0x6d, + 0x10, 0xb5, 0x41, 0x88, 0x2f, 0x71, 0xcf, 0xe0, 0x4b, 0xef, 0x33, 0xbe, 0x44, 0xbc, 0xf1, 0x86, + 0x07, 0x7d, 0xf6, 0x2d, 0x1d, 0x99, 0x09, 0x43, 0x5a, 0x0f, 0x52, 0xcf, 0x8d, 0xd6, 0x7a, 0x9c, + 0xd1, 0x65, 0xb6, 0x61, 0x9e, 0xd1, 0x99, 0xbe, 0xd3, 0x5b, 0x80, 0xe4, 0x63, 0x59, 0x69, 0xcb, + 0x96, 0x5e, 0x4e, 0x67, 0x47, 0x3b, 0xbd, 0xf3, 0xee, 0x88, 0x33, 0x4d, 0x10, 0xbc, 0x05, 0x03, + 0x95, 0xe7, 0x47, 0xc3, 0xdb, 0xde, 0x83, 0x76, 0x80, 0x87, 0xae, 0xbb, 0x13, 0x88, 0x88, 0x5f, + 0x1d, 0x2c, 0x12, 0x28, 0x3c, 0x1c, 0x0a, 0x8e, 0x7f, 0x96, 0x80, 0xe5, 0x08, 0x6e, 0x74, 0x17, + 0x12, 0x7a, 0xb7, 0x41, 0x9d, 0xe9, 0xd5, 0x11, 0xe4, 0xe7, 0xc4, 0xbd, 0xc2, 0x6e, 0x4c, 0xb4, + 0x66, 0xf1, 0xbf, 0x89, 0x43, 0x42, 0xdc, 0x2b, 0xa0, 0xf7, 0x18, 0xa4, 0xf8, 0xe6, 0x88, 0x52, + 0xbc, 0x40, 0xf1, 0x97, 0x5c, 0x10, 0x52, 0x9c, 0x85, 0x85, 0x82, 0x58, 0xcc, 0xd7, 0x8b, 0xd2, + 0x76, 0xb1, 0x5c, 0xac, 0x17, 0x25, 0x82, 0x64, 0x67, 0x38, 0xb4, 0x02, 0xd9, 0xbd, 0xfd, 0xad, + 0x72, 0xa9, 0xb6, 0x2b, 0xed, 0x57, 0x9c, 0x7f, 0x74, 0x34, 0x8e, 0x32, 0x30, 0x53, 0x2e, 0xd5, + 0xea, 0x94, 0x50, 0xcb, 0x24, 0x2c, 0xca, 0x4e, 0xb1, 0x2e, 0x15, 0xf2, 0x7b, 0xf9, 0x42, 0xa9, + 0xfe, 0x38, 0x93, 0x44, 0x3c, 0x2c, 0xb1, 0xb2, 0x6b, 0x95, 0xfc, 0x5e, 0x6d, 0xb7, 0x5a, 0xcf, + 0xa4, 0x10, 0x82, 0x39, 0x7b, 0xbe, 0x43, 0xaa, 0x65, 0x26, 0x2c, 0x09, 0x85, 0x72, 0xb5, 0xe2, + 0xea, 0x30, 0x89, 0x16, 0x20, 0xe3, 0xac, 0x2c, 0x16, 0xf3, 0xdb, 0x36, 0x8a, 0x91, 0x46, 0xe7, + 0x61, 0xb6, 0xf8, 0xe1, 0x5e, 0xbe, 0xb2, 0xed, 0x30, 0x4e, 0xb9, 0x18, 0xd8, 0xd7, 0x71, 0x58, + 0x24, 0x20, 0x98, 0x03, 0xb9, 0x39, 0x61, 0xb9, 0x0e, 0x19, 0xd2, 0xb6, 0x4b, 0xfe, 0xc2, 0x69, + 0x8e, 0xd0, 0x0f, 0x9c, 0xf2, 0xc9, 0x01, 0xac, 0xe3, 0x1e, 0xc0, 0xba, 0xe4, 0x2f, 0x26, 0x6f, + 0xb0, 0xd0, 0xae, 0x6f, 0xb5, 0xa8, 0xfe, 0xe4, 0x61, 0x40, 0xb5, 0x73, 0x2b, 0x5a, 0x5a, 0xd4, + 0x49, 0x70, 0x96, 0x66, 0xe4, 0x8c, 0x01, 0x7d, 0x1f, 0x96, 0xfc, 0xfa, 0xd2, 0xd8, 0xba, 0x39, + 0x00, 0xc0, 0xba, 0x19, 0xc6, 0xe5, 0x75, 0x39, 0x84, 0xbf, 0x73, 0x90, 0x76, 0xc8, 0x56, 0x96, + 0x36, 0x94, 0x1f, 0x62, 0x06, 0xf0, 0x99, 0xb2, 0x28, 0x2e, 0x7e, 0xe4, 0x85, 0x4e, 0xe3, 0x7e, + 0xe8, 0x34, 0xf0, 0x3d, 0x27, 0x02, 0xdf, 0xf3, 0x77, 0x61, 0xb6, 0x61, 0xa9, 0xaf, 0x68, 0xaa, + 0x64, 0x2a, 0x1d, 0x07, 0xcf, 0x19, 0xbc, 0xea, 0xa8, 0x3b, 0xf7, 0x93, 0xe2, 0x8c, 0x33, 0xc1, + 0x22, 0xa1, 0x35, 0x98, 0xb1, 0xaf, 0x3e, 0x24, 0x53, 0x93, 0x7a, 0x06, 0xce, 0xa6, 0xec, 0xee, + 0x16, 0x6c, 0x5a, 0x5d, 0xdb, 0x37, 0xb0, 0xf0, 0x67, 0x0e, 0x16, 0x49, 0xd3, 0xee, 0x77, 0xc7, + 0x61, 0x10, 0xb0, 0xd7, 0xe3, 0x7c, 0x89, 0x3f, 0x50, 0xe0, 0x8b, 0xea, 0x59, 0xb2, 0xb0, 0xe4, + 0x5f, 0x8f, 0x36, 0x2a, 0xbf, 0xe5, 0x60, 0xc1, 0x3a, 0x75, 0x9d, 0x81, 0xe7, 0x5d, 0x04, 0x8c, + 0xf1, 0x26, 0x7d, 0xc6, 0x4c, 0xfa, 0x8d, 0x29, 0xfc, 0x9e, 0x83, 0x45, 0x9f, 0xae, 0xd4, 0x53, + 0xdf, 0xf5, 0x57, 0x14, 0x57, 0xbd, 0x15, 0xc5, 0x00, 0xff, 0x98, 0x35, 0xc5, 0x6d, 0xa7, 0xa6, + 0x18, 0x2f, 0x20, 0x3e, 0x8b, 0xc3, 0x6a, 0x3f, 0xb3, 0xdb, 0xd7, 0x7e, 0xcd, 0x31, 0x5a, 0xe2, + 0xb3, 0xdd, 0xae, 0x7d, 0xe0, 0x4f, 0x75, 0x9b, 0x83, 0x87, 0x4d, 0x80, 0x4a, 0x2f, 0xca, 0x01, + 0x7f, 0xe4, 0x45, 0xb7, 0xd8, 0x75, 0xe9, 0x2b, 0x1c, 0x11, 0x26, 0x7e, 0x1b, 0x2e, 0xd8, 0x40, + 0x81, 0x7b, 0xdd, 0xec, 0x5c, 0x82, 0x91, 0x2c, 0x92, 0x16, 0x17, 0xad, 0x61, 0xf7, 0x8e, 0x95, + 0x42, 0xa3, 0x4d, 0xe1, 0x9b, 0x24, 0x2c, 0x55, 0xb4, 0x26, 0xae, 0x99, 0x72, 0x6b, 0x1c, 0xd0, + 0xf0, 0x7b, 0x83, 0x18, 0x4c, 0x9c, 0xb5, 0x67, 0xb0, 0xd4, 0x51, 0xa0, 0x17, 0x94, 0x83, 0x79, + 0xc3, 0x94, 0x5b, 0x76, 0x04, 0xc9, 0x7a, 0x0b, 0x9b, 0x52, 0x57, 0x36, 0x9f, 0xd2, 0xf0, 0x38, + 0x4f, 0x87, 0xea, 0xf6, 0xc8, 0x9e, 0x6c, 0x3e, 0x0d, 0xc6, 0xf2, 0x92, 0x63, 0x63, 0x79, 0xef, + 0xfb, 0xdb, 0xe9, 0xd7, 0x87, 0xec, 0x25, 0xe2, 0x1c, 0xfc, 0x30, 0x04, 0xa7, 0x7b, 0x63, 0x88, + 0xc8, 0xe1, 0xf8, 0xdc, 0xd9, 0x71, 0xa9, 0x97, 0x0c, 0xf1, 0x5d, 0x84, 0x0b, 0x03, 0x9b, 0xa7, + 0x59, 0xb7, 0x05, 0x59, 0x6b, 0x68, 0x5f, 0x35, 0xc6, 0x74, 0xc7, 0x10, 0x8f, 0x89, 0x87, 0x78, + 0x8c, 0xb0, 0x0c, 0x17, 0x03, 0x16, 0xa2, 0x5a, 0xfc, 0x31, 0x45, 0xd4, 0x18, 0x1f, 0x6d, 0xfe, + 0x28, 0x2c, 0x2a, 0xde, 0xf2, 0xbe, 0xf6, 0x40, 0x60, 0xf6, 0x45, 0xc4, 0xc5, 0x65, 0x98, 0xf6, + 0xf2, 0xd1, 0x93, 0xc3, 0x1c, 0x12, 0x38, 0xa9, 0x33, 0x81, 0xe0, 0x13, 0x3e, 0x10, 0xbc, 0xdc, + 0x0f, 0xaa, 0x49, 0xb6, 0x1a, 0x0c, 0x35, 0x45, 0x44, 0x58, 0x3d, 0x19, 0x08, 0xab, 0x34, 0x8b, + 0xac, 0x87, 0x0a, 0xfd, 0x3f, 0x08, 0x2c, 0xea, 0xd4, 0x81, 0x90, 0xb7, 0xf0, 0x04, 0x78, 0xe2, + 0xf1, 0xe3, 0x83, 0xd0, 0x3e, 0x37, 0x8a, 0xfb, 0xdd, 0x48, 0x58, 0x85, 0xe5, 0x40, 0xd9, 0x74, + 0xe9, 0xc7, 0x44, 0xaf, 0x1d, 0x4c, 0x31, 0x8c, 0x9a, 0x29, 0x9b, 0xc6, 0xa8, 0x2b, 0xd3, 0x41, + 0xef, 0xca, 0x84, 0x64, 0xaf, 0xbc, 0x43, 0x76, 0xe5, 0x17, 0x4d, 0xcf, 0xce, 0xd7, 0x20, 0xd5, + 0xb3, 0xe1, 0x38, 0x52, 0xfc, 0xcc, 0xb3, 0x2e, 0xbd, 0x6f, 0x0d, 0x89, 0x84, 0x43, 0xf8, 0x03, + 0x07, 0xd3, 0x1e, 0x32, 0x5a, 0x81, 0x29, 0xb7, 0x3b, 0x77, 0xea, 0x74, 0x97, 0x60, 0xbd, 0x03, + 0x53, 0x33, 0xe5, 0x36, 0xbd, 0xe1, 0x25, 0x0f, 0x56, 0x6b, 0xd5, 0x33, 0x30, 0x29, 0xe3, 0x12, + 0xa2, 0xfd, 0x1f, 0xdd, 0x84, 0x64, 0x4f, 0x55, 0x4c, 0x3b, 0xf6, 0xe6, 0xfc, 0x41, 0x65, 0x2f, + 0x95, 0xdb, 0x57, 0x15, 0x53, 0xb4, 0xb9, 0x84, 0x1b, 0x90, 0xb4, 0x9e, 0xd8, 0x26, 0x76, 0x0a, + 0x52, 0x5b, 0x8f, 0xeb, 0xc5, 0x5a, 0x86, 0x43, 0x00, 0x13, 0xa5, 0x4a, 0x75, 0xbb, 0x58, 0xcb, + 0xc4, 0x85, 0x15, 0x77, 0xeb, 0x41, 0x20, 0xc1, 0xc7, 0xe4, 0x95, 0x84, 0xc1, 0x03, 0xf9, 0x40, + 0x78, 0x60, 0x95, 0x39, 0x9c, 0x86, 0x00, 0x03, 0xff, 0xe1, 0x60, 0x31, 0x90, 0x0f, 0xdd, 0xf6, + 0x42, 0x02, 0x57, 0x22, 0x65, 0x7a, 0xc1, 0x80, 0x5f, 0x72, 0x04, 0x0c, 0xb8, 0xc3, 0x80, 0x01, + 0xd7, 0x87, 0xce, 0xf7, 0xc2, 0x00, 0x07, 0x21, 0x28, 0x40, 0xad, 0x9e, 0xdf, 0x29, 0x4a, 0xfb, + 0x15, 0xf2, 0xeb, 0xa2, 0x00, 0x0b, 0x90, 0xb1, 0xba, 0x7a, 0xfa, 0x7d, 0x5b, 0xad, 0x9e, 0xaf, + 0xd7, 0x32, 0xf1, 0xc1, 0x0e, 0x3c, 0xe1, 0x76, 0xe0, 0x0b, 0x80, 0xa8, 0x59, 0xbd, 0x9f, 0x66, + 0x7e, 0xce, 0xc1, 0x3c, 0x43, 0xa6, 0x56, 0xf6, 0xdc, 0xde, 0x70, 0xcc, 0xed, 0xcd, 0x06, 0x2c, + 0x58, 0x4d, 0x04, 0x71, 0x64, 0x43, 0xea, 0x62, 0x5d, 0xb2, 0x46, 0xa8, 0x3b, 0x9d, 0xef, 0xc8, + 0x27, 0x14, 0xed, 0xdb, 0xc3, 0xba, 0x25, 0xf8, 0x39, 0xe0, 0x5b, 0xc2, 0xcf, 0x38, 0x72, 0xee, + 0x8e, 0x5d, 0x70, 0x0f, 0x0b, 0xc2, 0x80, 0x8a, 0x3c, 0x31, 0x7a, 0x45, 0x2e, 0xe4, 0xc9, 0x61, + 0x7b, 0x86, 0xe2, 0x77, 0xf3, 0xbf, 0x1c, 0xa4, 0x4b, 0x4d, 0xac, 0x9a, 0x96, 0xf7, 0x55, 0x60, + 0x96, 0xf9, 0x74, 0x15, 0xad, 0x84, 0x7c, 0xd1, 0x6a, 0x6f, 0x9d, 0x5f, 0x8d, 0xfc, 0xde, 0x55, + 0x88, 0xa1, 0x23, 0xcf, 0x67, 0xb7, 0x0c, 0x7e, 0xf9, 0xca, 0xc0, 0xcc, 0x80, 0x40, 0xe4, 0xaf, + 0x0d, 0xe1, 0x72, 0xd7, 0x79, 0x1b, 0x52, 0xf6, 0x47, 0x8a, 0x68, 0xc1, 0xfd, 0x50, 0xd2, 0xf3, + 0x0d, 0x23, 0xbf, 0xe8, 0xa3, 0x3a, 0xf3, 0x36, 0xff, 0x99, 0x06, 0xe8, 0xf7, 0x10, 0xe8, 0x01, + 0xcc, 0x78, 0xbf, 0x93, 0x42, 0xcb, 0x11, 0x5f, 0xe9, 0xf1, 0x2b, 0xc1, 0x83, 0xae, 0x4e, 0x0f, + 0x60, 0xc6, 0x7b, 0x2b, 0xdf, 0x17, 0x16, 0xf0, 0x65, 0x40, 0x5f, 0x58, 0xe0, 0x45, 0x7e, 0x0c, + 0xb5, 0xe1, 0x42, 0xc8, 0xbd, 0x2c, 0xba, 0x3e, 0xda, 0xed, 0x35, 0xff, 0xea, 0x88, 0x17, 0xbc, + 0x42, 0x0c, 0xe9, 0x70, 0x31, 0xf4, 0x3a, 0x12, 0xad, 0x8f, 0x7a, 0x59, 0xca, 0xbf, 0x36, 0x02, + 0xa7, 0xbb, 0x66, 0x0f, 0xf8, 0xf0, 0x3b, 0x10, 0xf4, 0xda, 0xc8, 0x97, 0x73, 0xfc, 0x8d, 0xd1, + 0xaf, 0x54, 0x84, 0x18, 0xda, 0x85, 0x69, 0xcf, 0x05, 0x01, 0xe2, 0x03, 0x6f, 0x0d, 0x88, 0xe0, + 0xe5, 0x88, 0x1b, 0x05, 0x22, 0xc9, 0x03, 0x62, 0xf7, 0x25, 0x0d, 0xa2, 0xf1, 0x7d, 0x49, 0x01, + 0xa8, 0xb7, 0xdf, 0xfc, 0xbe, 0x53, 0x28, 0xc8, 0xfc, 0xc1, 0xc7, 0x58, 0x90, 0xf9, 0x43, 0x8e, + 0x34, 0x21, 0x86, 0x3e, 0x80, 0x39, 0x16, 0xb1, 0x43, 0xab, 0x91, 0xc8, 0x23, 0x7f, 0x29, 0x6c, + 0xd8, 0x2b, 0x92, 0x05, 0x88, 0xfa, 0x22, 0x03, 0x81, 0xaa, 0xbe, 0xc8, 0x10, 0x5c, 0x29, 0x66, + 0xe5, 0x27, 0x06, 0x7c, 0xe9, 0xe7, 0xa7, 0x20, 0xbc, 0xa9, 0x9f, 0x9f, 0x02, 0x11, 0x1b, 0x21, + 0x86, 0x14, 0x58, 0x0a, 0x86, 0x10, 0xd0, 0xb5, 0x91, 0xa0, 0x0d, 0xfe, 0xfa, 0x30, 0x36, 0x37, + 0xd5, 0x7c, 0x99, 0x82, 0xa4, 0x7d, 0x1c, 0xd5, 0xe1, 0x9c, 0xaf, 0x85, 0x43, 0x97, 0xa2, 0x1b, + 0x5b, 0xfe, 0x72, 0xe8, 0xb8, 0xbb, 0x93, 0x27, 0x70, 0x7e, 0xa0, 0x29, 0x43, 0x6b, 0xde, 0x79, + 0x41, 0x8d, 0x21, 0x7f, 0x25, 0x82, 0xc3, 0x2f, 0x9b, 0x4d, 0x3b, 0x6b, 0xc3, 0xba, 0x06, 0x56, + 0x76, 0x58, 0xaa, 0xf9, 0x98, 0x9c, 0xfe, 0xfe, 0x24, 0x23, 0xb0, 0x7a, 0x05, 0xa6, 0x97, 0xab, + 0x91, 0x3c, 0xee, 0x0a, 0x1f, 0xb9, 0x65, 0x87, 0xa7, 0xcc, 0x45, 0x8c, 0x72, 0x81, 0xd5, 0x35, + 0x2f, 0x44, 0xb1, 0xb8, 0xe2, 0x1f, 0x41, 0xc6, 0x7f, 0x04, 0x23, 0xe6, 0x7d, 0x05, 0xb9, 0xcd, + 0x5a, 0x38, 0x83, 0xdf, 0x32, 0xfe, 0xf8, 0xf7, 0x6b, 0x15, 0x14, 0xf9, 0x57, 0x23, 0x79, 0xbc, + 0x19, 0xcb, 0x53, 0x79, 0xf5, 0x33, 0xd6, 0x60, 0x95, 0xd6, 0xcf, 0x58, 0x01, 0xa5, 0x9a, 0x10, + 0xbb, 0xf3, 0x2e, 0x40, 0xc3, 0x50, 0x24, 0xd2, 0x69, 0xa2, 0xd5, 0x01, 0x9c, 0xfc, 0xbe, 0x82, + 0xdb, 0xcd, 0x6a, 0xd7, 0x54, 0x34, 0xd5, 0xc8, 0xfe, 0x3a, 0x6d, 0xb7, 0xb9, 0x53, 0x0d, 0x43, + 0x21, 0x0d, 0xdf, 0x56, 0xea, 0x49, 0xa2, 0x61, 0x28, 0x87, 0x13, 0x36, 0xff, 0x9b, 0xff, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0x95, 0x8e, 0xb8, 0x49, 0x68, 0x34, 0x00, 0x00, } diff --git a/vendor/github.com/container-storage-interface/spec/spec.md b/vendor/github.com/container-storage-interface/spec/spec.md index aa483610dc4..ccef4b624fa 100644 --- a/vendor/github.com/container-storage-interface/spec/spec.md +++ b/vendor/github.com/container-storage-interface/spec/spec.md @@ -338,6 +338,9 @@ service Controller { rpc ListSnapshots (ListSnapshotsRequest) returns (ListSnapshotsResponse) {} + + rpc ControllerExpandVolume (ControllerExpandVolumeRequest) + returns (ControllerExpandVolumeResponse) {} } service Node { @@ -356,6 +359,11 @@ service Node { rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest) returns (NodeGetVolumeStatsResponse) {} + + rpc NodeExpandVolume(NodeExpandVolumeRequest) + returns (NodeExpandVolumeResponse) {} + + rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) returns (NodeGetCapabilitiesResponse) {} @@ -417,7 +425,7 @@ The status `code` MUST contain a [canonical error code](https://github.com/grpc/ | Condition | gRPC Code | Description | Recovery Behavior | |-----------|-----------|-------------|-------------------| | Missing required field | 3 INVALID_ARGUMENT | Indicates that a required field is missing from the request. More human-readable information MAY be provided in the `status.message` field. | Caller MUST fix the request by adding the missing required field before retrying. | -| Invalid or unsupported field in the request | 3 INVALID_ARGUMENT | Indicates that the one ore more fields in this field is either not allowed by the Plugin or has an invalid value. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the field before retrying. | +| Invalid or unsupported field in the request | 3 INVALID_ARGUMENT | Indicates that the one or more fields in this field is either not allowed by the Plugin or has an invalid value. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the field before retrying. | | Permission denied | 7 PERMISSION_DENIED | The Plugin is able to derive or otherwise infer an identity from the secrets present within an RPC, but that identity does not have permission to invoke the RPC. | System administrator SHOULD ensure that requisite permissions are granted, after which point the caller MAY retry the attempted RPC. | | Operation pending for volume | 10 ABORTED | Indicates that there is already an operation pending for the specified volume. In general the Cluster Orchestrator (CO) is responsible for ensuring that there is no more than one call "in-flight" per volume at a given time. However, in some circumstances, the CO MAY lose state (for example when the CO crashes and restarts), and MAY issue multiple calls simultaneously for the same volume. The Plugin, SHOULD handle this as gracefully as possible, and MAY return this error code to reject secondary calls. | Caller SHOULD ensure that there are no other calls pending for the specified volume, and then retry with exponential back off. | | Call not implemented | 12 UNIMPLEMENTED | The invoked RPC is not implemented by the Plugin or disabled in the Plugin's current mode of operation. | Caller MUST NOT retry. Caller MAY call `GetPluginCapabilities`, `ControllerGetCapabilities`, or `NodeGetCapabilities` to discover Plugin capabilities. | @@ -526,7 +534,6 @@ message PluginCapability { message Service { enum Type { UNKNOWN = 0; - // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for // the ControllerService. Plugins SHOULD provide this capability. // In rare cases certain plugins MAY wish to omit the @@ -548,9 +555,56 @@ message PluginCapability { Type type = 1; } + message VolumeExpansion { + enum Type { + UNKNOWN = 0; + + // ONLINE indicates that volumes may be expanded when published to + // a node. When a Plugin implements this capability it MUST + // implement either the EXPAND_VOLUME controller capability or the + // EXPAND_VOLUME node capability or both. When a plugin supports + // ONLINE volume expansion and also has the EXPAND_VOLUME + // controller capability then the plugin MUST support expansion of + // volumes currently published and available on a node. When a + // plugin supports ONLINE volume expansion and also has the + // EXPAND_VOLUME node capability then the plugin MAY support + // expansion of node-published volume via NodeExpandVolume. + // + // Example 1: Given a shared filesystem volume (e.g. GlusterFs), + // the Plugin may set the ONLINE volume expansion capability and + // implement ControllerExpandVolume but not NodeExpandVolume. + // + // Example 2: Given a block storage volume type (e.g. EBS), the + // Plugin may set the ONLINE volume expansion capability and + // implement both ControllerExpandVolume and NodeExpandVolume. + // + // Example 3: Given a Plugin that supports volume expansion only + // upon a node, the Plugin may set the ONLINE volume + // expansion capability and implement NodeExpandVolume but not + // ControllerExpandVolume. + ONLINE = 1; + + // OFFLINE indicates that volumes currently published and + // available on a node SHALL NOT be expanded via + // ControllerExpandVolume. When a plugin supports OFFLINE volume + // expansion it MUST implement either the EXPAND_VOLUME controller + // capability or both the EXPAND_VOLUME controller capability and + // the EXPAND_VOLUME node capability. + // + // Example 1: Given a block storage volume type (e.g. Azure Disk) + // that does not support expansion of "node-attached" (i.e. + // controller-published) volumes, the Plugin may indicate + // OFFLINE volume expansion support and implement both + // ControllerExpandVolume and NodeExpandVolume. + OFFLINE = 2; + } + Type type = 1; + } + oneof type { // Service that the plugin supports. Service service = 1; + VolumeExpansion volume_expansion = 2; } } ``` @@ -700,7 +754,7 @@ message CreateVolumeRequest { // If specified, the new volume will be pre-populated with data from // this source. This field is OPTIONAL. VolumeContentSource volume_content_source = 6; - + // Specifies where (regions, zones, racks, etc.) the provisioned // volume MUST be accessible from. // An SP SHALL advertise the requirements for topological @@ -884,7 +938,7 @@ message Volume { // Example 2: // accessible_topology = // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"} + // {"region": "R1", "zone": "Z3"} // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" // in the "region" "R1". repeated Topology accessible_topology = 5; @@ -895,15 +949,15 @@ message TopologyRequirement { // accessible from. // This field is OPTIONAL. If TopologyRequirement is specified either // requisite or preferred or both MUST be specified. - // + // // If requisite is specified, the provisioned volume MUST be // accessible from at least one of the requisite topologies. - // + // // Given // x = number of topologies provisioned volume is accessible from // n = number of requisite topologies // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 - // If x==n, than the SP MUST make the provisioned volume available to + // If x==n, then the SP MUST make the provisioned volume available to // all topologies from the list of requisite topologies. If it is // unable to do so, the SP MUST fail the CreateVolume call. // For example, if a volume should be accessible from a single zone, @@ -918,7 +972,7 @@ message TopologyRequirement { // then the provisioned volume MUST be accessible from the "region" // "R1" and both "zone" "Z2" and "zone" "Z3". // - // If xn, than the SP MUST make the provisioned volume available from + // If x>n, then the SP MUST make the provisioned volume available from // all topologies from the list of requisite topologies and MAY choose // the remaining x-n unique topologies from the list of all possible // topologies. If it is unable to do so, the SP MUST fail the @@ -954,7 +1008,7 @@ message TopologyRequirement { // // This field is OPTIONAL. If TopologyRequirement is specified either // requisite or preferred or both MUST be specified. - // + // // An SP MUST attempt to make the provisioned volume available using // the preferred topologies in order from first to last. // @@ -969,7 +1023,7 @@ message TopologyRequirement { // If the list of requisite topologies is specified and the SP is // unable to to make the provisioned volume available from any of the // requisite topologies it MUST fail the CreateVolume call. - // + // // Example 1: // Given a volume should be accessible from a single zone, and // requisite = @@ -1181,7 +1235,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t |-----------|-----------|-------------|-------------------| | Volume does not exist | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | | Node does not exist | 5 NOT_FOUND | Indicates that a node corresponding to the specified `node_id` does not exist. | Caller MUST verify that the `node_id` is correct and that the node is available and has not been terminated or deleted before retrying with exponential backoff. | -| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the node corresponding to the specified `volume_id` but is incompatible with the specified `volume_capability` or `readonly` flag . | Caller MUST fix the arguments before retying. | +| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the node corresponding to the specified `node_id` but is incompatible with the specified `volume_capability` or `readonly` flag . | Caller MUST fix the arguments before retrying. | | Volume published to another node | 9 FAILED_PRECONDITION | Indicates that a volume corresponding to the specified `volume_id` has already been published at another node and does not have MULTI_NODE volume capability. If this error code is returned, the Plugin SHOULD specify the `node_id` of the node at which the volume is published as part of the gRPC `status.message`. | Caller SHOULD ensure the specified volume is not published at any other node before retrying with exponential back off. | | Max volumes attached | 8 RESOURCE_EXHAUSTED | Indicates that the maximum supported number of volumes that can be attached to the specified node are already attached. Therefore, this operation will fail until at least one of the existing attached volumes is detached from the node. | Caller MUST ensure that the number of volumes already attached to the node is less then the maximum supported number of volumes before retrying with exponential backoff. | @@ -1442,14 +1496,19 @@ message ControllerServiceCapability { // snapshot. CREATE_DELETE_SNAPSHOT = 5; LIST_SNAPSHOTS = 6; + // Plugins supporting volume cloning at the storage level MAY // report this capability. The source volume MUST be managed by // the same plugin. Not all volume sources and parameters // combinations MAY work. CLONE_VOLUME = 7; + // Indicates the SP supports ControllerPublishVolume.readonly // field. PUBLISH_READONLY = 8; + + // See VolumeExpansion for details. + EXPAND_VOLUME = 9; } Type type = 1; @@ -1702,6 +1761,75 @@ The CO MUST implement the specified error recovery behavior when it encounters t | Invalid `starting_token` | 10 ABORTED | Indicates that `starting_token` is not valid. | Caller SHOULD start the `ListSnapshots` operation again with an empty `starting_token`. | +#### `ControllerExpandVolume` + +A Controller plugin MUST implement this RPC call if plugin has `EXPAND_VOLUME` controller capability. +This RPC allows the CO to expand the size of a volume. + +This call MAY be made by the CO during any time in the lifecycle of the volume after creation if plugin has `VolumeExpansion.ONLINE` capability. +If plugin has `EXPAND_VOLUME` node capability, then `NodeExpandVolume` MUST be called after successful `ControllerExpandVolume` and `node_expansion_required` in `ControllerExpandVolumeResponse` is `true`. + +If the plugin has only `VolumeExpansion.OFFLINE` expansion capability and volume is currently published or available on a node then `ControllerExpandVolume` MUST be called ONLY after either: +- The plugin has controller `PUBLISH_UNPUBLISH_VOLUME` capability and `ControllerUnpublishVolume` has been invoked successfully. + +OR ELSE + +- The plugin does NOT have controller `PUBLISH_UNPUBLISH_VOLUME` capability, the plugin has node `STAGE_UNSTAGE_VOLUME` capability, and `NodeUnstageVolume` has been completed successfully. + +OR ELSE + +- The plugin does NOT have controller `PUBLISH_UNPUBLISH_VOLUME` capability, nor node `STAGE_UNSTAGE_VOLUME` capability, and `NodeUnpublishVolume` has completed successfully. + +Examples: +* Offline Volume Expansion: + Given an ElasticSearch process that runs on Azure Disk and needs more space. + - The administrator takes the Elasticsearch server offline by stopping the workload and CO calls `ControllerUnpublishVolume`. + - The administrator requests more space for the volume from CO. + - The CO in turn first makes `ControllerExpandVolume` RPC call which results in requesting more space from Azure cloud provider for volume ID that was being used by ElasticSearch. + - Once `ControllerExpandVolume` is completed and successful, the CO will inform administrator about it and administrator will resume the ElasticSearch workload. + - On the node where the ElasticSearch workload is scheduled, the CO calls `NodeExpandVolume` after calling `NodeStageVolume`. + - Calling `NodeExpandVolume` on volume results in expanding the underlying file system and added space becomes available to workload when it starts up. +* Online Volume Expansion: + Given a Mysql server running on Openstack Cinder and needs more space. + - The administrator requests more space for volume from the CO. + - The CO in turn first makes `ControllerExpandVolume` RPC call which results in requesting more space from Openstack Cinder for given volume. + - On the node where the mysql workload is running, the CO calls `NodeExpandVolume` while volume is in-use using the path where the volume is staged. + - Calling `NodeExpandVolume` on volume results in expanding the underlying file system and added space automatically becomes available to mysql workload without any downtime. + + +```protobuf +message ControllerExpandVolumeRequest { + // The ID of the volume to expand. This field is REQUIRED. + string volume_id = 1; + + // This allows CO to specify the capacity requirements of the volume + // after expansion. This field is REQUIRED. + CapacityRange capacity_range = 2; + + // Secrets required by the plugin for expanding the volume. + // This field is OPTIONAL. + map secrets = 3 [(csi_secret) = true]; +} + +message ControllerExpandVolumeResponse { + // Capacity of volume after expansion. This field is REQUIRED. + int64 capacity_bytes = 1; + + // Whether node expansion is required for the volume. When true + // the CO MUST make NodeExpandVolume RPC call on the node. This field + // is REQUIRED. + bool node_expansion_required = 2; +} +``` + +##### ControllerExpandVolume Errors + +| Condition | gRPC Code | Description | Recovery Behavior | +|-----------|-----------|-------------|-------------------| +| Volume does not exist | 5 NOT FOUND | Indicates that a volume corresponding to the specified volume_id does not exist. | Caller MUST verify that the volume_id is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | +| Volume in use | 9 FAILED_PRECONDITION | Indicates that the volume corresponding to the specified `volume_id` could not be expanded because it is currently published on a node but the plugin does not have ONLINE expansion capability. | Caller SHOULD ensure that volume is not published and retry with exponential back off. | +| Unsupported `capacity_range` | 11 OUT_OF_RANGE | Indicates that the capacity range is not allowed by the Plugin. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the capacity range before retrying. | + #### RPC Interactions ##### `CreateVolume`, `DeleteVolume`, `ListVolumes` @@ -1802,7 +1930,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t | Condition | gRPC Code | Description | Recovery Behavior | |-----------|-----------|-------------|-------------------| | Volume does not exist | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | -| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the specified `staging_target_path` but is incompatible with the specified `volume_capability` flag. | Caller MUST fix the arguments before retying. | +| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the specified `staging_target_path` but is incompatible with the specified `volume_capability` flag. | Caller MUST fix the arguments before retrying. | | Exceeds capabilities | 9 FAILED_PRECONDITION | Indicates that the CO has exceeded the volume's capabilities because the volume does not have MULTI_NODE capability. | Caller MAY choose to call `ValidateVolumeCapabilities` to validate the volume capabilities, or wait for the volume to be unpublished on the node. | #### `NodeUnstageVolume` @@ -1951,7 +2079,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t | Condition | gRPC Code | Description | Recovery Behavior | |-----------|-----------|-------------|-------------------| | Volume does not exist | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | -| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the specified `target_path` but is incompatible with the specified `volume_capability` or `readonly` flag. | Caller MUST fix the arguments before retying. | +| Volume published but is incompatible | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` has already been published at the specified `target_path` but is incompatible with the specified `volume_capability` or `readonly` flag. | Caller MUST fix the arguments before retrying. | | Exceeds capabilities | 9 FAILED_PRECONDITION | Indicates that the CO has exceeded the volume's capabilities because the volume does not have MULTI_NODE capability. | Caller MAY choose to call `ValidateVolumeCapabilities` to validate the volume capabilities, or wait for the volume to be unpublished on the node. | | Staging target path not set | 9 FAILED_PRECONDITION | Indicates that `STAGE_UNSTAGE_VOLUME` capability is set but no `staging_target_path` was set. | Caller MUST make sure call to `NodeStageVolume` is made and returns success before retrying with valid `staging_target_path`. | @@ -2085,6 +2213,8 @@ message NodeServiceCapability { // then it MUST implement NodeGetVolumeStats RPC // call for fetching volume statistics. GET_VOLUME_STATS = 2; + // See VolumeExpansion for details. + EXPAND_VOLUME = 3; } Type type = 1; @@ -2101,7 +2231,6 @@ message NodeServiceCapability { If the plugin is unable to complete the NodeGetCapabilities call successfully, it MUST return a non-ok gRPC code in the gRPC status. - #### `NodeGetInfo` A Node Plugin MUST implement this RPC call if the plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability. @@ -2147,7 +2276,7 @@ message NodeGetInfoResponse { // // Example 1: // accessible_topology = - // {"region": "R1", "zone": "R2"} + // {"region": "R1", "zone": "Z2"} // Indicates the node exists within the "region" "R1" and the "zone" // "Z2". Topology accessible_topology = 3; @@ -2159,6 +2288,52 @@ message NodeGetInfoResponse { If the plugin is unable to complete the NodeGetInfo call successfully, it MUST return a non-ok gRPC code in the gRPC status. The CO MUST implement the specified error recovery behavior when it encounters the gRPC error code. +#### `NodeExpandVolume` + +A Node Plugin MUST implement this RPC call if it has `EXPAND_VOLUME` node capability. +This RPC call allows CO to expand volume on a node. + +`NodeExpandVolume` ONLY supports expansion of already node-published or node-staged volumes on the given `volume_path`. + +If plugin has `STAGE_UNSTAGE_VOLUME` node capability then: +* `NodeExpandVolume` MUST be called after successful `NodeStageVolume`. +* `NodeExpandVolume` MAY be called before or after `NodePublishVolume`. + +Otherwise `NodeExpandVolume` MUST be called after successful `NodePublishVolume`. + +If a plugin only supports expansion via the `VolumeExpansion.OFFLINE` capability, then the volume MUST first be taken offline and expanded via `ControllerExpandVolume` (see `ControllerExpandVolume` for more details), and then node-staged or node-published before it can be expanded on the node via `NodeExpandVolume`. + +```protobuf +message NodeExpandVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path on which volume is available. This field is REQUIRED. + string volume_path = 2; + + // This allows CO to specify the capacity requirements of the volume + // after expansion. If capacity_range is omitted then a plugin MAY + // inspect the file system of the volume to determine the maximum + // capacity to which the volume can be expanded. In such cases a + // plugin MAY expand the volume to its maximum capacity. + // This field is OPTIONAL. + CapacityRange capacity_range = 3; +} + +message NodeExpandVolumeResponse { + // The capacity of the volume in bytes. This field is OPTIONAL. + int64 capacity_bytes = 1; +} +``` + +##### NodeExpandVolume Errors + +| Condition | gRPC code | Description | Recovery Behavior | +|-----------------------|-----------|-----------------------|-----------------------------------| +| Volume does not exist | 5 NOT FOUND | Indicates that a volume corresponding to the specified volume_id does not exist. | Caller MUST verify that the volume_id is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | +| Volume in use | 9 FAILED_PRECONDITION | Indicates that the volume corresponding to the specified `volume_id` could not be expanded because it is node-published or node-staged and the underlying filesystem does not support expansion of published or staged volumes. | Caller MUST NOT retry. | +| Unsupported capacity_range | 11 OUT_OF_RANGE | Indicates that the capacity range is not allowed by the Plugin. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the capacity range before retrying. | + ## Protocol ### Connectivity diff --git a/vendor/github.com/containerd/cgroups/.travis.yml b/vendor/github.com/containerd/cgroups/.travis.yml index 4a5cf740259..87da63f3a85 100644 --- a/vendor/github.com/containerd/cgroups/.travis.yml +++ b/vendor/github.com/containerd/cgroups/.travis.yml @@ -1,15 +1,24 @@ language: go go: - 1.10.x - - tip + - 1.11.x install: - - mkdir -p $GOPATH/src/github.com/prometheus $GOPATH/src/github.com/opencontainers + - mkdir -p $GOPATH/src/github.com/prometheus $GOPATH/src/github.com/opencontainers $GOPATH/src/github.com/coreos $GOPATH/src/github.com/godbus - cd $GOPATH/src/github.com/opencontainers && git clone https://github.com/opencontainers/runtime-spec && cd runtime-spec && git checkout fa4b36aa9c99e00c2ef7b5c0013c84100ede5f4e + - cd $GOPATH/src/github.com/coreos && git clone https://github.com/coreos/go-systemd && cd go-systemd && git checkout 48702e0da86bd25e76cfef347e2adeb434a0d0a6 + - cd $GOPATH/src/github.com/godbus && git clone https://github.com/godbus/dbus && cd dbus && git checkout c7fdd8b5cd55e87b4e1f4e372cdb1db61dd6c66f - cd $GOPATH/src/github.com/containerd/cgroups - - go get -t ./... + - go get -d -t ./... + - go get -u github.com/vbatts/git-validation + - go get -u github.com/kunalkushwaha/ltag + +before_script: + - pushd ..; git clone https://github.com/containerd/project; popd script: + - DCO_VERBOSITY=-q ../project/script/validate/dco + - ../project/script/validate/fileheader ../project/ - go test -race -coverprofile=coverage.txt -covermode=atomic after_success: diff --git a/vendor/github.com/containerd/cgroups/README.md b/vendor/github.com/containerd/cgroups/README.md index 69e932a9f75..81ad11cc7f4 100644 --- a/vendor/github.com/containerd/cgroups/README.md +++ b/vendor/github.com/containerd/cgroups/README.md @@ -1,8 +1,9 @@ # cgroups [![Build Status](https://travis-ci.org/containerd/cgroups.svg?branch=master)](https://travis-ci.org/containerd/cgroups) - [![codecov](https://codecov.io/gh/containerd/cgroups/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/cgroups) +[![GoDoc](https://godoc.org/github.com/containerd/cgroups?status.svg)](https://godoc.org/github.com/containerd/cgroups) +[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/cgroups)](https://goreportcard.com/report/github.com/containerd/cgroups) Go package for creating, managing, inspecting, and destroying cgroups. The resources format for settings on the cgroup uses the OCI runtime-spec found @@ -110,3 +111,14 @@ err := control.MoveTo(destination) ```go subCgroup, err := control.New("child", resources) ``` + +## Project details + +Cgroups is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). +As a containerd sub-project, you will find the: + + * [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md), + * [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS), + * and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md) + +information in our [`containerd/project`](https://github.com/containerd/project) repository. diff --git a/vendor/github.com/containerd/cgroups/blkio.go b/vendor/github.com/containerd/cgroups/blkio.go index fc1e689cbdc..875fb554659 100644 --- a/vendor/github.com/containerd/cgroups/blkio.go +++ b/vendor/github.com/containerd/cgroups/blkio.go @@ -191,31 +191,42 @@ func (b *blkioController) readEntry(devices map[deviceKey]string, path, name str } func createBlkioSettings(blkio *specs.LinuxBlockIO) []blkioSettings { - settings := []blkioSettings{ - { - name: "weight", - value: blkio.Weight, - format: uintf, - }, - { - name: "leaf_weight", - value: blkio.LeafWeight, - format: uintf, - }, - } - for _, wd := range blkio.WeightDevice { + settings := []blkioSettings{} + + if blkio.Weight != nil { settings = append(settings, blkioSettings{ - name: "weight_device", - value: wd, - format: weightdev, - }, - blkioSettings{ - name: "leaf_weight_device", - value: wd, - format: weightleafdev, + name: "weight", + value: blkio.Weight, + format: uintf, }) } + if blkio.LeafWeight != nil { + settings = append(settings, + blkioSettings{ + name: "leaf_weight", + value: blkio.LeafWeight, + format: uintf, + }) + } + for _, wd := range blkio.WeightDevice { + if wd.Weight != nil { + settings = append(settings, + blkioSettings{ + name: "weight_device", + value: wd, + format: weightdev, + }) + } + if wd.LeafWeight != nil { + settings = append(settings, + blkioSettings{ + name: "leaf_weight_device", + value: wd, + format: weightleafdev, + }) + } + } for _, t := range []struct { name string list []specs.LinuxThrottleDevice @@ -265,12 +276,12 @@ func uintf(v interface{}) []byte { func weightdev(v interface{}) []byte { wd := v.(specs.LinuxWeightDevice) - return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.Weight)) + return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.Weight)) } func weightleafdev(v interface{}) []byte { wd := v.(specs.LinuxWeightDevice) - return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.LeafWeight)) + return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.LeafWeight)) } func throttleddev(v interface{}) []byte { diff --git a/vendor/github.com/containerd/cgroups/cgroup.go b/vendor/github.com/containerd/cgroups/cgroup.go index 7959feb4903..e3ef076519d 100644 --- a/vendor/github.com/containerd/cgroups/cgroup.go +++ b/vendor/github.com/containerd/cgroups/cgroup.go @@ -30,47 +30,88 @@ import ( ) // New returns a new control via the cgroup cgroups interface -func New(hierarchy Hierarchy, path Path, resources *specs.LinuxResources) (Cgroup, error) { +func New(hierarchy Hierarchy, path Path, resources *specs.LinuxResources, opts ...InitOpts) (Cgroup, error) { + config := newInitConfig() + for _, o := range opts { + if err := o(config); err != nil { + return nil, err + } + } subsystems, err := hierarchy() if err != nil { return nil, err } + var active []Subsystem for _, s := range subsystems { + // check if subsystem exists if err := initializeSubsystem(s, path, resources); err != nil { + if err == ErrControllerNotActive { + if config.InitCheck != nil { + if skerr := config.InitCheck(s, path, err); skerr != nil { + if skerr != ErrIgnoreSubsystem { + return nil, skerr + } + } + } + continue + } return nil, err } + active = append(active, s) } return &cgroup{ path: path, - subsystems: subsystems, + subsystems: active, }, nil } // Load will load an existing cgroup and allow it to be controlled -func Load(hierarchy Hierarchy, path Path) (Cgroup, error) { +func Load(hierarchy Hierarchy, path Path, opts ...InitOpts) (Cgroup, error) { + config := newInitConfig() + for _, o := range opts { + if err := o(config); err != nil { + return nil, err + } + } + var activeSubsystems []Subsystem subsystems, err := hierarchy() if err != nil { return nil, err } - // check the the subsystems still exist + // check that the subsystems still exist, and keep only those that actually exist for _, s := range pathers(subsystems) { p, err := path(s.Name()) if err != nil { if os.IsNotExist(errors.Cause(err)) { return nil, ErrCgroupDeleted } + if err == ErrControllerNotActive { + if config.InitCheck != nil { + if skerr := config.InitCheck(s, path, err); skerr != nil { + if skerr != ErrIgnoreSubsystem { + return nil, skerr + } + } + } + continue + } return nil, err } if _, err := os.Lstat(s.Path(p)); err != nil { if os.IsNotExist(err) { - return nil, ErrCgroupDeleted + continue } return nil, err } + activeSubsystems = append(activeSubsystems, s) + } + // if we do not have any active systems then the cgroup is deleted + if len(activeSubsystems) == 0 { + return nil, ErrCgroupDeleted } return &cgroup{ path: path, - subsystems: subsystems, + subsystems: activeSubsystems, }, nil } @@ -319,6 +360,49 @@ func (c *cgroup) processes(subsystem Name, recursive bool) ([]Process, error) { return processes, err } +// Tasks returns the tasks running inside the cgroup along +// with the subsystem used, pid, and path +func (c *cgroup) Tasks(subsystem Name, recursive bool) ([]Task, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return nil, c.err + } + return c.tasks(subsystem, recursive) +} + +func (c *cgroup) tasks(subsystem Name, recursive bool) ([]Task, error) { + s := c.getSubsystem(subsystem) + sp, err := c.path(subsystem) + if err != nil { + return nil, err + } + path := s.(pather).Path(sp) + var tasks []Task + err = filepath.Walk(path, func(p string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !recursive && info.IsDir() { + if p == path { + return nil + } + return filepath.SkipDir + } + dir, name := filepath.Split(p) + if name != cgroupTasks { + return nil + } + procs, err := readTasksPids(dir, subsystem) + if err != nil { + return err + } + tasks = append(tasks, procs...) + return nil + }) + return tasks, err +} + // Freeze freezes the entire cgroup and all the processes inside it func (c *cgroup) Freeze() error { c.mu.Lock() diff --git a/vendor/github.com/containerd/cgroups/control.go b/vendor/github.com/containerd/cgroups/control.go index 63e2df93dd9..1f62c54f3bf 100644 --- a/vendor/github.com/containerd/cgroups/control.go +++ b/vendor/github.com/containerd/cgroups/control.go @@ -44,6 +44,15 @@ type Process struct { Path string } +type Task struct { + // Subsystem is the name of the subsystem that the task is in + Subsystem Name + // Pid is the process id of the task + Pid int + // Path is the full path of the subsystem and location that the task is in + Path string +} + // Cgroup handles interactions with the individual groups to perform // actions on them as them main interface to this cgroup package type Cgroup interface { @@ -64,6 +73,8 @@ type Cgroup interface { Update(resources *specs.LinuxResources) error // Processes returns all the processes in a select subsystem for the cgroup Processes(Name, bool) ([]Process, error) + // Tasks returns all the tasks in a select subsystem for the cgroup + Tasks(Name, bool) ([]Task, error) // Freeze freezes or pauses all processes inside the cgroup Freeze() error // Thaw thaw or resumes all processes inside the cgroup diff --git a/vendor/github.com/containerd/cgroups/cpuset.go b/vendor/github.com/containerd/cgroups/cpuset.go index f182aa68c10..30208515e6e 100644 --- a/vendor/github.com/containerd/cgroups/cpuset.go +++ b/vendor/github.com/containerd/cgroups/cpuset.go @@ -57,21 +57,21 @@ func (c *cpusetController) Create(path string, resources *specs.LinuxResources) if resources.CPU != nil { for _, t := range []struct { name string - value *string + value string }{ { name: "cpus", - value: &resources.CPU.Cpus, + value: resources.CPU.Cpus, }, { name: "mems", - value: &resources.CPU.Mems, + value: resources.CPU.Mems, }, } { - if t.value != nil { + if t.value != "" { if err := ioutil.WriteFile( filepath.Join(c.Path(path), fmt.Sprintf("cpuset.%s", t.name)), - []byte(*t.value), + []byte(t.value), defaultFilePerm, ); err != nil { return err diff --git a/vendor/github.com/containerd/cgroups/devices.go b/vendor/github.com/containerd/cgroups/devices.go index f9a118b2271..f6a3b1947da 100644 --- a/vendor/github.com/containerd/cgroups/devices.go +++ b/vendor/github.com/containerd/cgroups/devices.go @@ -58,6 +58,9 @@ func (d *devicesController) Create(path string, resources *specs.LinuxResources) if device.Allow { file = allowDeviceFile } + if device.Type == "" { + device.Type = "a" + } if err := ioutil.WriteFile( filepath.Join(d.Path(path), file), []byte(deviceString(device)), diff --git a/vendor/github.com/containerd/cgroups/net_prio.go b/vendor/github.com/containerd/cgroups/net_prio.go index c77169215c0..612e1bcd260 100644 --- a/vendor/github.com/containerd/cgroups/net_prio.go +++ b/vendor/github.com/containerd/cgroups/net_prio.go @@ -50,7 +50,7 @@ func (n *netprioController) Create(path string, resources *specs.LinuxResources) if resources.Network != nil { for _, prio := range resources.Network.Priorities { if err := ioutil.WriteFile( - filepath.Join(n.Path(path), "net_prio_ifpriomap"), + filepath.Join(n.Path(path), "net_prio.ifpriomap"), formatPrio(prio.Name, prio.Priority), defaultFilePerm, ); err != nil { diff --git a/vendor/github.com/containerd/cgroups/opts.go b/vendor/github.com/containerd/cgroups/opts.go new file mode 100644 index 00000000000..7c5d9fb9c27 --- /dev/null +++ b/vendor/github.com/containerd/cgroups/opts.go @@ -0,0 +1,61 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "github.com/pkg/errors" +) + +var ( + // ErrIgnoreSubsystem allows the specific subsystem to be skipped + ErrIgnoreSubsystem = errors.New("skip subsystem") + // ErrDevicesRequired is returned when the devices subsystem is required but + // does not exist or is not active + ErrDevicesRequired = errors.New("devices subsystem is required") +) + +// InitOpts allows configuration for the creation or loading of a cgroup +type InitOpts func(*InitConfig) error + +// InitConfig provides configuration options for the creation +// or loading of a cgroup and its subsystems +type InitConfig struct { + // InitCheck can be used to check initialization errors from the subsystem + InitCheck InitCheck +} + +func newInitConfig() *InitConfig { + return &InitConfig{ + InitCheck: RequireDevices, + } +} + +// InitCheck allows subsystems errors to be checked when initialized or loaded +type InitCheck func(Subsystem, Path, error) error + +// AllowAny allows any subsystem errors to be skipped +func AllowAny(s Subsystem, p Path, err error) error { + return ErrIgnoreSubsystem +} + +// RequireDevices requires the device subsystem but no others +func RequireDevices(s Subsystem, p Path, err error) error { + if s.Name() == Devices { + return ErrDevicesRequired + } + return ErrIgnoreSubsystem +} diff --git a/vendor/github.com/containerd/cgroups/paths.go b/vendor/github.com/containerd/cgroups/paths.go index 455ce857f98..f45fd425643 100644 --- a/vendor/github.com/containerd/cgroups/paths.go +++ b/vendor/github.com/containerd/cgroups/paths.go @@ -57,6 +57,9 @@ func PidPath(pid int) Path { return existingPath(paths, "") } +// ErrControllerNotActive is returned when a controller is not supported or enabled +var ErrControllerNotActive = errors.New("controller is not supported") + func existingPath(paths map[string]string, suffix string) Path { // localize the paths based on the root mount dest for nested cgroups for n, p := range paths { @@ -77,7 +80,7 @@ func existingPath(paths map[string]string, suffix string) Path { root, ok := paths[string(name)] if !ok { if root, ok = paths[fmt.Sprintf("name=%s", name)]; !ok { - return "", fmt.Errorf("unable to find %q in controller set", name) + return "", ErrControllerNotActive } } if suffix != "" { diff --git a/vendor/github.com/containerd/cgroups/subsystem.go b/vendor/github.com/containerd/cgroups/subsystem.go index 933a6c38d6b..23de04d494f 100644 --- a/vendor/github.com/containerd/cgroups/subsystem.go +++ b/vendor/github.com/containerd/cgroups/subsystem.go @@ -42,7 +42,7 @@ const ( ) // Subsystems returns a complete list of the default cgroups -// avaliable on most linux systems +// available on most linux systems func Subsystems() []Name { n := []Name{ Hugetlb, diff --git a/vendor/github.com/containerd/cgroups/systemd.go b/vendor/github.com/containerd/cgroups/systemd.go index 8153d744ce8..c5d4e30811e 100644 --- a/vendor/github.com/containerd/cgroups/systemd.go +++ b/vendor/github.com/containerd/cgroups/systemd.go @@ -32,6 +32,11 @@ const ( defaultSlice = "system.slice" ) +var ( + canDelegate bool + once sync.Once +) + func Systemd() ([]Subsystem, error) { root, err := v1MountPoint() if err != nil { @@ -54,7 +59,7 @@ func Slice(slice, name string) Path { slice = defaultSlice } return func(subsystem Name) (string, error) { - return filepath.Join(slice, unitName(name)), nil + return filepath.Join(slice, name), nil } } @@ -80,15 +85,39 @@ func (s *SystemdController) Create(path string, resources *specs.LinuxResources) } defer conn.Close() slice, name := splitName(path) + // We need to see if systemd can handle the delegate property + // Systemd will return an error if it cannot handle delegate regardless + // of its bool setting. + checkDelegate := func() { + canDelegate = true + dlSlice := newProperty("Delegate", true) + if _, err := conn.StartTransientUnit(slice, "testdelegate", []systemdDbus.Property{dlSlice}, nil); err != nil { + if dbusError, ok := err.(dbus.Error); ok { + // Starting with systemd v237, Delegate is not even a property of slices anymore, + // so the D-Bus call fails with "InvalidArgs" error. + if strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.PropertyReadOnly") || strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.InvalidArgs") { + canDelegate = false + } + } + } + + conn.StopUnit(slice, "testDelegate", nil) + } + once.Do(checkDelegate) properties := []systemdDbus.Property{ systemdDbus.PropDescription(fmt.Sprintf("cgroup %s", name)), systemdDbus.PropWants(slice), newProperty("DefaultDependencies", false), - newProperty("Delegate", true), newProperty("MemoryAccounting", true), newProperty("CPUAccounting", true), newProperty("BlockIOAccounting", true), } + + // If we can delegate, we add the property back in + if canDelegate { + properties = append(properties, newProperty("Delegate", true)) + } + ch := make(chan string) _, err = conn.StartTransientUnit(name, "replace", properties, ch) if err != nil { diff --git a/vendor/github.com/containerd/cgroups/utils.go b/vendor/github.com/containerd/cgroups/utils.go index 345be4e463c..f3129b1a3af 100644 --- a/vendor/github.com/containerd/cgroups/utils.go +++ b/vendor/github.com/containerd/cgroups/utils.go @@ -111,7 +111,7 @@ func remove(path string) error { return fmt.Errorf("cgroups: unable to remove path %q", path) } -// readPids will read all the pids in a cgroup by the provided path +// readPids will read all the pids of processes in a cgroup by the provided path func readPids(path string, subsystem Name) ([]Process, error) { f, err := os.Open(filepath.Join(path, cgroupProcs)) if err != nil { @@ -138,6 +138,33 @@ func readPids(path string, subsystem Name) ([]Process, error) { return out, nil } +// readTasksPids will read all the pids of tasks in a cgroup by the provided path +func readTasksPids(path string, subsystem Name) ([]Task, error) { + f, err := os.Open(filepath.Join(path, cgroupTasks)) + if err != nil { + return nil, err + } + defer f.Close() + var ( + out []Task + s = bufio.NewScanner(f) + ) + for s.Scan() { + if t := s.Text(); t != "" { + pid, err := strconv.Atoi(t) + if err != nil { + return nil, err + } + out = append(out, Task{ + Pid: pid, + Subsystem: subsystem, + Path: path, + }) + } + } + return out, nil +} + func hugePageSizes() ([]string, error) { var ( pageSizes []string diff --git a/vendor/github.com/containerd/containerd/.appveyor.yml b/vendor/github.com/containerd/containerd/.appveyor.yml index 02d0f517b69..739a8517ce1 100644 --- a/vendor/github.com/containerd/containerd/.appveyor.yml +++ b/vendor/github.com/containerd/containerd/.appveyor.yml @@ -13,7 +13,7 @@ environment: GOPATH: C:\gopath CGO_ENABLED: 1 matrix: - - GO_VERSION: 1.10 + - GO_VERSION: 1.11 before_build: - choco install -y mingw --version 5.3.0 diff --git a/vendor/github.com/containerd/containerd/.mailmap b/vendor/github.com/containerd/containerd/.mailmap index 024d81f8891..dfd5c7177d3 100644 --- a/vendor/github.com/containerd/containerd/.mailmap +++ b/vendor/github.com/containerd/containerd/.mailmap @@ -2,7 +2,9 @@ Abhinandan Prativadi Abhinandan Prativadi abhi Akihiro Suda Akihiro Suda Andrei Vagin Andrei Vagin +Brent Baude baude Frank Yang frank yang +Georgia Panoutsakopoulou gpanouts Jie Zhang kadisi John Howard John Howard Justin Terry Justin Terry (VM) diff --git a/vendor/github.com/containerd/containerd/.travis.yml b/vendor/github.com/containerd/containerd/.travis.yml index f8719e60513..9a230677a49 100644 --- a/vendor/github.com/containerd/containerd/.travis.yml +++ b/vendor/github.com/containerd/containerd/.travis.yml @@ -7,7 +7,7 @@ services: language: go go: - - "1.10.x" + - "1.11.x" go_import_path: github.com/containerd/containerd diff --git a/vendor/github.com/containerd/containerd/Makefile b/vendor/github.com/containerd/containerd/Makefile index 8557d2e1aac..84250e50698 100644 --- a/vendor/github.com/containerd/containerd/Makefile +++ b/vendor/github.com/containerd/containerd/Makefile @@ -22,6 +22,7 @@ DESTDIR=/usr/local # Used to populate variables in version package. VERSION=$(shell git describe --match 'v[0-9]*' --dirty='.m' --always) REVISION=$(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi) +PACKAGE=github.com/containerd/containerd ifneq "$(strip $(shell command -v go 2>/dev/null))" "" GOOS ?= $(shell go env GOOS) @@ -77,8 +78,8 @@ MANPAGES=ctr.1 containerd.1 containerd-config.1 containerd-config.toml.5 # Build tags seccomp and apparmor are needed by CRI plugin. BUILDTAGS ?= seccomp apparmor GO_TAGS=$(if $(BUILDTAGS),-tags "$(BUILDTAGS)",) -GO_LDFLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PKG) $(EXTRA_LDFLAGS)' -SHIM_GO_LDFLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PKG) -extldflags "-static"' +GO_LDFLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PACKAGE) $(EXTRA_LDFLAGS)' +SHIM_GO_LDFLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PACKAGE) -extldflags "-static"' #Replaces ":" (*nix), ";" (windows) with newline for easy parsing GOPATHS=$(shell echo ${GOPATH} | tr ":" "\n" | tr ";" "\n") diff --git a/vendor/github.com/containerd/containerd/archive/tar.go b/vendor/github.com/containerd/containerd/archive/tar.go index 0d9e0e75010..fae023c5577 100644 --- a/vendor/github.com/containerd/containerd/archive/tar.go +++ b/vendor/github.com/containerd/containerd/archive/tar.go @@ -194,7 +194,7 @@ func applyNaive(ctx context.Context, root string, tr *tar.Reader, options ApplyO parentPath = filepath.Dir(path) } if _, err := os.Lstat(parentPath); err != nil && os.IsNotExist(err) { - err = mkdirAll(parentPath, 0700) + err = mkdirAll(parentPath, 0755) if err != nil { return 0, err } diff --git a/vendor/github.com/containerd/containerd/contrib/Dockerfile.test b/vendor/github.com/containerd/containerd/contrib/Dockerfile.test index 47a622181e1..170c82df0cf 100644 --- a/vendor/github.com/containerd/containerd/contrib/Dockerfile.test +++ b/vendor/github.com/containerd/containerd/contrib/Dockerfile.test @@ -7,19 +7,19 @@ # # Install proto3 -FROM golang:1.10 AS proto3 +FROM golang:1.11 AS proto3 RUN apt-get update && apt-get install -y autoconf automake g++ libtool unzip COPY script/setup/install-protobuf install-protobuf RUN ./install-protobuf # Install runc -FROM golang:1.10 AS runc +FROM golang:1.11 AS runc RUN apt-get update && apt-get install -y curl libseccomp-dev COPY vendor.conf /go/src/github.com/containerd/containerd/vendor.conf COPY script/setup/install-runc install-runc RUN ./install-runc -FROM golang:1.10 +FROM golang:1.11 RUN apt-get update && apt-get install -y btrfs-tools gcc git libseccomp-dev make xfsprogs COPY --from=proto3 /usr/local/bin/protoc /usr/local/bin/protoc diff --git a/vendor/github.com/containerd/containerd/contrib/seccomp/seccomp_default.go b/vendor/github.com/containerd/containerd/contrib/seccomp/seccomp_default.go index 11b446a6ed1..011139d1699 100644 --- a/vendor/github.com/containerd/containerd/contrib/seccomp/seccomp_default.go +++ b/vendor/github.com/containerd/containerd/contrib/seccomp/seccomp_default.go @@ -161,6 +161,7 @@ func DefaultProfile(sp *specs.Spec) *specs.LinuxSeccomp { "ioctl", "io_destroy", "io_getevents", + "io_pgetevents", "ioprio_get", "ioprio_set", "io_setup", @@ -319,6 +320,7 @@ func DefaultProfile(sp *specs.Spec) *specs.LinuxSeccomp { "stat64", "statfs", "statfs64", + "statx", "symlink", "symlinkat", "sync", diff --git a/vendor/github.com/containerd/containerd/image.go b/vendor/github.com/containerd/containerd/image.go index 62fba9de754..14bfea91b9e 100644 --- a/vendor/github.com/containerd/containerd/image.go +++ b/vendor/github.com/containerd/containerd/image.go @@ -170,26 +170,22 @@ func (i *image) Unpack(ctx context.Context, snapshotterName string) error { chain = append(chain, layer.Diff.Digest) } - if unpacked { - desc, err := i.i.Config(ctx, cs, i.platform) - if err != nil { - return err - } - - rootfs := identity.ChainID(chain).String() - - cinfo := content.Info{ - Digest: desc.Digest, - Labels: map[string]string{ - fmt.Sprintf("containerd.io/gc.ref.snapshot.%s", snapshotterName): rootfs, - }, - } - if _, err := cs.Update(ctx, cinfo, fmt.Sprintf("labels.containerd.io/gc.ref.snapshot.%s", snapshotterName)); err != nil { - return err - } + desc, err := i.i.Config(ctx, cs, i.platform) + if err != nil { + return err } - return nil + rootfs := identity.ChainID(chain).String() + + cinfo := content.Info{ + Digest: desc.Digest, + Labels: map[string]string{ + fmt.Sprintf("containerd.io/gc.ref.snapshot.%s", snapshotterName): rootfs, + }, + } + + _, err = cs.Update(ctx, cinfo, fmt.Sprintf("labels.containerd.io/gc.ref.snapshot.%s", snapshotterName)) + return err } func (i *image) getLayers(ctx context.Context, platform platforms.MatchComparer) ([]rootfs.Layer, error) { diff --git a/vendor/github.com/containerd/containerd/metadata/gc.go b/vendor/github.com/containerd/containerd/metadata/gc.go index 99503fad7dc..6afaa177291 100644 --- a/vendor/github.com/containerd/containerd/metadata/gc.go +++ b/vendor/github.com/containerd/containerd/metadata/gc.go @@ -64,6 +64,18 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { // iterate through each namespace v1c := v1bkt.Cursor() + // cerr indicates the scan did not successfully send all + // the roots. The scan does not need to be cancelled but + // must return error at the end. + var cerr error + fn := func(n gc.Node) { + select { + case nc <- n: + case <-ctx.Done(): + cerr = ctx.Err() + } + } + for k, v := v1c.First(); k != nil; k, v = v1c.Next() { if v != nil { continue @@ -92,11 +104,7 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { } } - select { - case nc <- gcnode(ResourceLease, ns, string(k)): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceLease, ns, string(k))) // Emit content and snapshots as roots instead of implementing // in references. Since leases cannot be referenced there is @@ -106,11 +114,7 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { cbkt := libkt.Bucket(bucketKeyObjectContent) if cbkt != nil { if err := cbkt.ForEach(func(k, v []byte) error { - select { - case nc <- gcnode(ResourceContent, ns, string(k)): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceContent, ns, string(k))) return nil }); err != nil { return err @@ -126,11 +130,7 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { snbkt := sbkt.Bucket(sk) return snbkt.ForEach(func(k, v []byte) error { - select { - case nc <- gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", sk, k)): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", sk, k))) return nil }) }); err != nil { @@ -141,11 +141,7 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { ibkt := libkt.Bucket(bucketKeyObjectIngests) if ibkt != nil { if err := ibkt.ForEach(func(k, v []byte) error { - select { - case nc <- gcnode(ResourceIngest, ns, string(k)): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceIngest, ns, string(k))) return nil }); err != nil { return err @@ -168,18 +164,9 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { target := ibkt.Bucket(k).Bucket(bucketKeyTarget) if target != nil { contentKey := string(target.Get(bucketKeyDigest)) - select { - case nc <- gcnode(ResourceContent, ns, contentKey): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceContent, ns, contentKey)) } - return sendSnapshotRefs(ns, ibkt.Bucket(k), func(n gc.Node) { - select { - case nc <- n: - case <-ctx.Done(): - } - }) + return sendLabelRefs(ns, ibkt.Bucket(k), fn) }); err != nil { return err } @@ -200,11 +187,7 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { if ea == nil || expThreshold.After(*ea) { return nil } - select { - case nc <- gcnode(ResourceIngest, ns, string(k)): - case <-ctx.Done(): - return ctx.Err() - } + fn(gcnode(ResourceIngest, ns, string(k))) return nil }); err != nil { return err @@ -216,7 +199,12 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { if v != nil { return nil } - return sendRootRef(ctx, nc, gcnode(ResourceContent, ns, string(k)), cbkt.Bucket(k)) + + if isRootRef(cbkt.Bucket(k)) { + fn(gcnode(ResourceContent, ns, string(k))) + } + + return nil }); err != nil { return err } @@ -229,23 +217,15 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { if v != nil { return nil } - snapshotter := string(cbkt.Bucket(k).Get(bucketKeySnapshotter)) + + cibkt := cbkt.Bucket(k) + snapshotter := string(cibkt.Get(bucketKeySnapshotter)) if snapshotter != "" { - ss := string(cbkt.Bucket(k).Get(bucketKeySnapshotKey)) - select { - case nc <- gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", snapshotter, ss)): - case <-ctx.Done(): - return ctx.Err() - } + ss := string(cibkt.Get(bucketKeySnapshotKey)) + fn(gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", snapshotter, ss))) } - // TODO: Send additional snapshot refs through labels - return sendSnapshotRefs(ns, cbkt.Bucket(k), func(n gc.Node) { - select { - case nc <- n: - case <-ctx.Done(): - } - }) + return sendLabelRefs(ns, cibkt, fn) }); err != nil { return err } @@ -263,15 +243,17 @@ func scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Node) error { if v != nil { return nil } - - return sendRootRef(ctx, nc, gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", sk, k)), snbkt.Bucket(k)) + if isRootRef(snbkt.Bucket(k)) { + fn(gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", sk, k))) + } + return nil }) }); err != nil { return err } } } - return nil + return cerr } func references(ctx context.Context, tx *bolt.Tx, node gc.Node, fn func(gc.Node)) error { @@ -282,10 +264,7 @@ func references(ctx context.Context, tx *bolt.Tx, node gc.Node, fn func(gc.Node) return nil } - if err := sendSnapshotRefs(node.Namespace, bkt, fn); err != nil { - return err - } - return sendContentRefs(node.Namespace, bkt, fn) + return sendLabelRefs(node.Namespace, bkt, fn) } else if node.Type == ResourceSnapshot { parts := strings.SplitN(node.Key, "/", 2) if len(parts) != 2 { @@ -304,7 +283,7 @@ func references(ctx context.Context, tx *bolt.Tx, node gc.Node, fn func(gc.Node) fn(gcnode(ResourceSnapshot, node.Namespace, fmt.Sprintf("%s/%s", ss, pv))) } - return sendSnapshotRefs(node.Namespace, bkt, fn) + return sendLabelRefs(node.Namespace, bkt, fn) } else if node.Type == ResourceIngest { // Send expected value bkt := getBucket(tx, bucketKeyVersion, []byte(node.Namespace), bucketKeyObjectContent, bucketKeyObjectIngests, []byte(node.Key)) @@ -456,25 +435,8 @@ func remove(ctx context.Context, tx *bolt.Tx, node gc.Node) error { return nil } -// sendSnapshotRefs sends all snapshot references referred to by the labels in the bkt -func sendSnapshotRefs(ns string, bkt *bolt.Bucket, fn func(gc.Node)) error { - lbkt := bkt.Bucket(bucketKeyObjectLabels) - if lbkt != nil { - lc := lbkt.Cursor() - - for k, v := lc.Seek(labelGCSnapRef); k != nil && strings.HasPrefix(string(k), string(labelGCSnapRef)); k, v = lc.Next() { - snapshotter := k[len(labelGCSnapRef):] - if i := bytes.IndexByte(snapshotter, '/'); i >= 0 { - snapshotter = snapshotter[:i] - } - fn(gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", snapshotter, v))) - } - } - return nil -} - -// sendContentRefs sends all content references referred to by the labels in the bkt -func sendContentRefs(ns string, bkt *bolt.Bucket, fn func(gc.Node)) error { +// sendLabelRefs sends all snapshot and content references referred to by the labels in the bkt +func sendLabelRefs(ns string, bkt *bolt.Bucket, fn func(gc.Node)) error { lbkt := bkt.Bucket(bucketKeyObjectLabels) if lbkt != nil { lc := lbkt.Cursor() @@ -490,6 +452,15 @@ func sendContentRefs(ns string, bkt *bolt.Bucket, fn func(gc.Node)) error { fn(gcnode(ResourceContent, ns, string(v))) } + + for k, v := lc.Seek(labelGCSnapRef); k != nil && strings.HasPrefix(string(k), string(labelGCSnapRef)); k, v = lc.Next() { + snapshotter := k[len(labelGCSnapRef):] + if i := bytes.IndexByte(snapshotter, '/'); i >= 0 { + snapshotter = snapshotter[:i] + } + fn(gcnode(ResourceSnapshot, ns, fmt.Sprintf("%s/%s", snapshotter, v))) + } + } return nil } @@ -506,17 +477,6 @@ func isRootRef(bkt *bolt.Bucket) bool { return false } -func sendRootRef(ctx context.Context, nc chan<- gc.Node, n gc.Node, bkt *bolt.Bucket) error { - if isRootRef(bkt) { - select { - case nc <- n: - case <-ctx.Done(): - return ctx.Err() - } - } - return nil -} - func gcnode(t gc.ResourceType, ns, key string) gc.Node { return gc.Node{ Type: t, diff --git a/vendor/github.com/containerd/containerd/mount/mountinfo_linux.go b/vendor/github.com/containerd/containerd/mount/mountinfo_linux.go index 369d045d7df..a7407c50ed6 100644 --- a/vendor/github.com/containerd/containerd/mount/mountinfo_linux.go +++ b/vendor/github.com/containerd/containerd/mount/mountinfo_linux.go @@ -25,6 +25,8 @@ import ( "os" "strconv" "strings" + + "github.com/pkg/errors" ) // Self retrieves a list of mounts for the current running process. @@ -41,13 +43,15 @@ func Self() ([]Info, error) { func parseInfoFile(r io.Reader) ([]Info, error) { s := bufio.NewScanner(r) out := []Info{} - + var err error for s.Scan() { - if err := s.Err(); err != nil { + if err = s.Err(); err != nil { return nil, err } /* + See http://man7.org/linux/man-pages/man5/proc.5.html + 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11) (1) mount ID: unique identifier of the mount (may be reused after umount) @@ -68,7 +72,7 @@ func parseInfoFile(r io.Reader) ([]Info, error) { numFields := len(fields) if numFields < 10 { // should be at least 10 fields - return nil, fmt.Errorf("parsing '%s' failed: not enough fields (%d)", text, numFields) + return nil, errors.Errorf("parsing '%s' failed: not enough fields (%d)", text, numFields) } p := Info{} // ignore any numbers parsing errors, as there should not be any @@ -76,13 +80,19 @@ func parseInfoFile(r io.Reader) ([]Info, error) { p.Parent, _ = strconv.Atoi(fields[1]) mm := strings.Split(fields[2], ":") if len(mm) != 2 { - return nil, fmt.Errorf("parsing '%s' failed: unexpected minor:major pair %s", text, mm) + return nil, errors.Errorf("parsing '%s' failed: unexpected minor:major pair %s", text, mm) } p.Major, _ = strconv.Atoi(mm[0]) p.Minor, _ = strconv.Atoi(mm[1]) - p.Root = fields[3] - p.Mountpoint = fields[4] + p.Root, err = strconv.Unquote(`"` + fields[3] + `"`) + if err != nil { + return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote root field", fields[3]) + } + p.Mountpoint, err = strconv.Unquote(`"` + fields[4] + `"`) + if err != nil { + return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote mount point field", fields[4]) + } p.Options = fields[5] // one or more optional fields, when a separator (-) @@ -101,11 +111,11 @@ func parseInfoFile(r io.Reader) ([]Info, error) { } } if i == numFields { - return nil, fmt.Errorf("parsing '%s' failed: missing separator ('-')", text) + return nil, errors.Errorf("parsing '%s' failed: missing separator ('-')", text) } // There should be 3 fields after the separator... if i+4 > numFields { - return nil, fmt.Errorf("parsing '%s' failed: not enough fields after a separator", text) + return nil, errors.Errorf("parsing '%s' failed: not enough fields after a separator", text) } // ... but in Linux <= 3.9 mounting a cifs with spaces in a share name // (like "//serv/My Documents") _may_ end up having a space in the last field diff --git a/vendor/github.com/containerd/containerd/oci/spec_opts.go b/vendor/github.com/containerd/containerd/oci/spec_opts.go index 8b599f80586..3dbbf631a8c 100644 --- a/vendor/github.com/containerd/containerd/oci/spec_opts.go +++ b/vendor/github.com/containerd/containerd/oci/spec_opts.go @@ -733,7 +733,9 @@ func WithCapabilities(caps []string) SpecOpts { } // WithAllCapabilities sets all linux capabilities for the process -var WithAllCapabilities = WithCapabilities(getAllCapabilities()) +var WithAllCapabilities = func(ctx context.Context, client Client, c *containers.Container, s *Spec) error { + return WithCapabilities(getAllCapabilities())(ctx, client, c, s) +} func getAllCapabilities() []string { last := capability.CAP_LAST_CAP diff --git a/vendor/github.com/containerd/containerd/runtime/v1/linux/proc/io.go b/vendor/github.com/containerd/containerd/runtime/v1/linux/proc/io.go index aed349a8607..7091e869c9d 100644 --- a/vendor/github.com/containerd/containerd/runtime/v1/linux/proc/io.go +++ b/vendor/github.com/containerd/containerd/runtime/v1/linux/proc/io.go @@ -24,8 +24,10 @@ import ( "io" "os" "sync" + "sync/atomic" "syscall" + "github.com/containerd/containerd/log" "github.com/containerd/fifo" runc "github.com/containerd/go-runc" ) @@ -38,7 +40,7 @@ var bufPool = sync.Pool{ } func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, wg, cwg *sync.WaitGroup) error { - var sameFile io.WriteCloser + var sameFile *countingWriteCloser for _, i := range []struct { name string dest func(wc io.WriteCloser, rc io.Closer) @@ -52,7 +54,9 @@ func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, w cwg.Done() p := bufPool.Get().(*[]byte) defer bufPool.Put(p) - io.CopyBuffer(wc, rio.Stdout(), *p) + if _, err := io.CopyBuffer(wc, rio.Stdout(), *p); err != nil { + log.G(ctx).Warn("error copying stdout") + } wg.Done() wc.Close() if rc != nil { @@ -69,7 +73,9 @@ func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, w cwg.Done() p := bufPool.Get().(*[]byte) defer bufPool.Put(p) - io.CopyBuffer(wc, rio.Stderr(), *p) + if _, err := io.CopyBuffer(wc, rio.Stderr(), *p); err != nil { + log.G(ctx).Warn("error copying stderr") + } wg.Done() wc.Close() if rc != nil { @@ -96,6 +102,7 @@ func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, w } } else { if sameFile != nil { + sameFile.count++ i.dest(sameFile, nil) continue } @@ -103,7 +110,10 @@ func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, w return fmt.Errorf("containerd-shim: opening %s failed: %s", i.name, err) } if stdout == stderr { - sameFile = fw + sameFile = &countingWriteCloser{ + WriteCloser: fw, + count: 1, + } } } i.dest(fw, fr) @@ -128,6 +138,19 @@ func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, w return nil } +// countingWriteCloser masks io.Closer() until close has been invoked a certain number of times. +type countingWriteCloser struct { + io.WriteCloser + count int64 +} + +func (c *countingWriteCloser) Close() error { + if atomic.AddInt64(&c.count, -1) > 0 { + return nil + } + return c.WriteCloser.Close() +} + // isFifo checks if a file is a fifo // if the file does not exist then it returns false func isFifo(path string) (bool, error) { diff --git a/vendor/github.com/containerd/containerd/vendor.conf b/vendor/github.com/containerd/containerd/vendor.conf index 264e15b718b..22282eb69a1 100644 --- a/vendor/github.com/containerd/containerd/vendor.conf +++ b/vendor/github.com/containerd/containerd/vendor.conf @@ -1,6 +1,6 @@ github.com/containerd/go-runc 5a6d9f37cfa36b15efba46dc7ea349fa9b7143c3 github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23 -github.com/containerd/cgroups 5e610833b72089b37d0e615de9a92dfc043757c2 +github.com/containerd/cgroups 4994991857f9b0ae8dc439551e8bebdbb4bf66c1 github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c github.com/containerd/btrfs 2e1aa0ddf94f91fa282b6ed87c23bf0d64911244 @@ -20,7 +20,7 @@ github.com/gogo/protobuf v1.0.0 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef github.com/golang/protobuf v1.1.0 github.com/opencontainers/runtime-spec eba862dc2470385a233c7507392675cbeadf7353 # v1.0.1-45-geba862d -github.com/opencontainers/runc 6635b4f0c6af3810594d2770f662f34ddc15b40d +github.com/opencontainers/runc 029124da7af7360afa781a0234d1b083550f797c # v1.0.0-rc7-6-g029124da github.com/sirupsen/logrus v1.0.0 github.com/urfave/cli 7bc6a0acffa589f415f88aca16cc1de5ffd66f9c golang.org/x/net b3756b4b77d7b13260a0a2ec658753cf48922eac @@ -43,11 +43,11 @@ github.com/google/go-cmp v0.1.0 go.etcd.io/bbolt v1.3.1-etcd.8 # cri dependencies -github.com/containerd/cri da0c016c830b2ea97fd1d737c49a568a816bf964 # release/1.2 branch +github.com/containerd/cri eb926cd79d3bac188dcc4ed7694fc9298f8831be # release/1.2 branch github.com/containerd/go-cni 40bcf8ec8acd7372be1d77031d585d5d8e561c90 github.com/blang/semver v3.1.0 github.com/containernetworking/cni v0.6.0 -github.com/containernetworking/plugins v0.7.0 +github.com/containernetworking/plugins v0.7.5 github.com/davecgh/go-spew v1.1.0 github.com/docker/distribution 0d3efadf0154c2b8a4e7b6621fff9809655cc580 github.com/docker/docker 86f080cff0914e9694068ed78d503701667c4c00 @@ -62,7 +62,7 @@ github.com/json-iterator/go 1.1.5 github.com/modern-go/reflect2 1.0.1 github.com/modern-go/concurrent 1.0.3 github.com/opencontainers/runtime-tools v0.6.0 -github.com/opencontainers/selinux b6fa367ed7f534f9ba25391cc2d467085dbb445a +github.com/opencontainers/selinux v1.2.1 github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0 github.com/tchap/go-patricia v2.2.6 github.com/xeipuuv/gojsonpointer 4e3ac2762d5f479393488629ee9370b50873b3a6 diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go index 9531316ef8a..bee589fd268 100644 --- a/vendor/github.com/containerd/containerd/version/version.go +++ b/vendor/github.com/containerd/containerd/version/version.go @@ -21,7 +21,7 @@ var ( Package = "github.com/containerd/containerd" // Version holds the complete version number. Filled in at linking time. - Version = "1.2.4+unknown" + Version = "1.2.5+unknown" // Revision is filled with the VCS (e.g. git) revision being used to build // the program at linking time. diff --git a/vendor/github.com/containerd/cri/pkg/annotations/annotations.go b/vendor/github.com/containerd/cri/pkg/annotations/annotations.go index be63ba27a43..2178df138de 100644 --- a/vendor/github.com/containerd/cri/pkg/annotations/annotations.go +++ b/vendor/github.com/containerd/cri/pkg/annotations/annotations.go @@ -32,6 +32,15 @@ const ( // SandboxID is the sandbox ID annotation SandboxID = "io.kubernetes.cri.sandbox-id" + // SandboxLogDir is the pod log directory annotation. + // If the sandbox needs to generate any log, it will put it into this directory. + // Kubelet will be responsible for: + // 1) Monitoring the disk usage of the log, and including it as part of the pod + // ephemeral storage usage. + // 2) Cleaning up the logs when the pod is deleted. + // NOTE: Kubelet is not responsible for rotating the logs. + SandboxLogDir = "io.kubernetes.cri.sandbox-log-directory" + // UntrustedWorkload is the sandbox annotation for untrusted workload. Untrusted // workload can only run on dedicated runtime for untrusted workload. UntrustedWorkload = "io.kubernetes.cri.untrusted-workload" diff --git a/vendor/github.com/containerd/cri/pkg/server/container_create.go b/vendor/github.com/containerd/cri/pkg/server/container_create.go index 7826268788b..01144aaf7e0 100644 --- a/vendor/github.com/containerd/cri/pkg/server/container_create.go +++ b/vendor/github.com/containerd/cri/pkg/server/container_create.go @@ -35,7 +35,6 @@ import ( imagespec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/opencontainers/runc/libcontainer/devices" runtimespec "github.com/opencontainers/runtime-spec/specs-go" - "github.com/opencontainers/runtime-tools/generate" "github.com/opencontainers/runtime-tools/validate" "github.com/opencontainers/selinux/go-selinux/label" "github.com/pkg/errors" @@ -76,6 +75,7 @@ func init() { // CreateContainer creates a new container in the given PodSandbox. func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateContainerRequest) (_ *runtime.CreateContainerResponse, retErr error) { config := r.GetConfig() + logrus.Debugf("Container config %+v", config) sandboxConfig := r.GetSandboxConfig() sandbox, err := c.sandboxStore.Get(r.GetPodSandboxId()) if err != nil { @@ -182,7 +182,7 @@ func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateConta if len(volumeMounts) > 0 { mountMap := make(map[string]string) for _, v := range volumeMounts { - mountMap[v.HostPath] = v.ContainerPath + mountMap[filepath.Clean(v.HostPath)] = v.ContainerPath } opts = append(opts, customopts.WithVolumes(mountMap)) } @@ -191,7 +191,7 @@ func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateConta // Get container log path. if config.GetLogPath() != "" { - meta.LogPath = filepath.Join(sandbox.Config.GetLogDirectory(), config.GetLogPath()) + meta.LogPath = filepath.Join(sandboxConfig.GetLogDirectory(), config.GetLogPath()) } containerIO, err := cio.NewContainerIO(id, @@ -335,8 +335,7 @@ func (c *criService) generateContainerSpec(id string, sandboxID string, sandboxP // Add HOSTNAME env. hostname := sandboxConfig.GetHostname() - if sandboxConfig.GetLinux().GetSecurityContext().GetNamespaceOptions().GetNetwork() == runtime.NamespaceMode_NODE && - hostname == "" { + if sandboxConfig.GetHostname() == "" { hostname, err = c.os.Hostname() if err != nil { return nil, err @@ -473,6 +472,22 @@ func (c *criService) generateVolumeMounts(containerRootDir string, criMounts []* func (c *criService) generateContainerMounts(sandboxID string, config *runtime.ContainerConfig) []*runtime.Mount { var mounts []*runtime.Mount securityContext := config.GetLinux().GetSecurityContext() + if !isInCRIMounts(etcHostname, config.GetMounts()) { + // /etc/hostname is added since 1.1.6, 1.2.4 and 1.3. + // For in-place upgrade, the old sandbox doesn't have the hostname file, + // do not mount this in that case. + // TODO(random-liu): Remove the check and always mount this when + // containerd 1.1 and 1.2 are deprecated. + hostpath := c.getSandboxHostname(sandboxID) + if _, err := c.os.Stat(hostpath); err == nil { + mounts = append(mounts, &runtime.Mount{ + ContainerPath: etcHostname, + HostPath: hostpath, + Readonly: securityContext.GetReadonlyRootfs(), + }) + } + } + if !isInCRIMounts(etcHosts, config.GetMounts()) { mounts = append(mounts, &runtime.Mount{ ContainerPath: etcHosts, @@ -507,7 +522,7 @@ func (c *criService) generateContainerMounts(sandboxID string, config *runtime.C // setOCIProcessArgs sets process args. It returns error if the final arg list // is empty. -func setOCIProcessArgs(g *generate.Generator, config *runtime.ContainerConfig, imageConfig *imagespec.ImageConfig) error { +func setOCIProcessArgs(g *generator, config *runtime.ContainerConfig, imageConfig *imagespec.ImageConfig) error { command, args := config.GetCommand(), config.GetArgs() // The following logic is migrated from https://github.com/moby/moby/blob/master/daemon/commit.go // TODO(random-liu): Clearly define the commands overwrite behavior. @@ -529,7 +544,7 @@ func setOCIProcessArgs(g *generate.Generator, config *runtime.ContainerConfig, i // addImageEnvs adds environment variables from image config. It returns error if // an invalid environment variable is encountered. -func addImageEnvs(g *generate.Generator, imageEnvs []string) error { +func addImageEnvs(g *generator, imageEnvs []string) error { for _, e := range imageEnvs { kv := strings.SplitN(e, "=", 2) if len(kv) != 2 { @@ -540,7 +555,7 @@ func addImageEnvs(g *generate.Generator, imageEnvs []string) error { return nil } -func setOCIPrivileged(g *generate.Generator, config *runtime.ContainerConfig) error { +func setOCIPrivileged(g *generator, config *runtime.ContainerConfig) error { // Add all capabilities in privileged mode. g.SetupPrivileged(true) setOCIBindMountsPrivileged(g) @@ -561,7 +576,7 @@ func clearReadOnly(m *runtimespec.Mount) { } // addDevices set device mapping without privilege. -func (c *criService) addOCIDevices(g *generate.Generator, devs []*runtime.Device) error { +func (c *criService) addOCIDevices(g *generator, devs []*runtime.Device) error { spec := g.Config for _, device := range devs { path, err := c.os.ResolveSymbolicLink(device.HostPath) @@ -593,7 +608,7 @@ func (c *criService) addOCIDevices(g *generate.Generator, devs []*runtime.Device } // addDevices set device mapping with privilege. -func setOCIDevicesPrivileged(g *generate.Generator) error { +func setOCIDevicesPrivileged(g *generator) error { spec := g.Config hostDevices, err := devices.HostDevices() if err != nil { @@ -624,7 +639,7 @@ func setOCIDevicesPrivileged(g *generate.Generator) error { } // addOCIBindMounts adds bind mounts. -func (c *criService) addOCIBindMounts(g *generate.Generator, mounts []*runtime.Mount, mountLabel string) error { +func (c *criService) addOCIBindMounts(g *generator, mounts []*runtime.Mount, mountLabel string) error { // Sort mounts in number of parts. This ensures that high level mounts don't // shadow other mounts. sort.Sort(orderedMounts(mounts)) @@ -729,11 +744,11 @@ func (c *criService) addOCIBindMounts(g *generate.Generator, mounts []*runtime.M return nil } -func setOCIBindMountsPrivileged(g *generate.Generator) { +func setOCIBindMountsPrivileged(g *generator) { spec := g.Config // clear readonly for /sys and cgroup for i, m := range spec.Mounts { - if spec.Mounts[i].Destination == "/sys" { + if filepath.Clean(spec.Mounts[i].Destination) == "/sys" { clearReadOnly(&spec.Mounts[i]) } if m.Type == "cgroup" { @@ -745,7 +760,7 @@ func setOCIBindMountsPrivileged(g *generate.Generator) { } // setOCILinuxResource set container resource limit. -func setOCILinuxResource(g *generate.Generator, resources *runtime.LinuxContainerResources) { +func setOCILinuxResource(g *generator, resources *runtime.LinuxContainerResources) { if resources == nil { return } @@ -771,7 +786,7 @@ func getOCICapabilitiesList() []string { } // Adds capabilities to all sets relevant to root (bounding, permitted, effective, inheritable) -func addProcessRootCapability(g *generate.Generator, c string) error { +func addProcessRootCapability(g *generator, c string) error { if err := g.AddProcessCapabilityBounding(c); err != nil { return err } @@ -788,7 +803,7 @@ func addProcessRootCapability(g *generate.Generator, c string) error { } // Drops capabilities to all sets relevant to root (bounding, permitted, effective, inheritable) -func dropProcessRootCapability(g *generate.Generator, c string) error { +func dropProcessRootCapability(g *generator, c string) error { if err := g.DropProcessCapabilityBounding(c); err != nil { return err } @@ -805,7 +820,7 @@ func dropProcessRootCapability(g *generate.Generator, c string) error { } // setOCICapabilities adds/drops process capabilities. -func setOCICapabilities(g *generate.Generator, capabilities *runtime.Capability) error { +func setOCICapabilities(g *generator, capabilities *runtime.Capability) error { if capabilities == nil { return nil } @@ -851,7 +866,7 @@ func setOCICapabilities(g *generate.Generator, capabilities *runtime.Capability) } // setOCINamespaces sets namespaces. -func setOCINamespaces(g *generate.Generator, namespaces *runtime.NamespaceOption, sandboxPid uint32) { +func setOCINamespaces(g *generator, namespaces *runtime.NamespaceOption, sandboxPid uint32) { g.AddOrReplaceLinuxNamespace(string(runtimespec.NetworkNamespace), getNetworkNamespace(sandboxPid)) // nolint: errcheck g.AddOrReplaceLinuxNamespace(string(runtimespec.IPCNamespace), getIPCNamespace(sandboxPid)) // nolint: errcheck g.AddOrReplaceLinuxNamespace(string(runtimespec.UTSNamespace), getUTSNamespace(sandboxPid)) // nolint: errcheck @@ -874,7 +889,7 @@ func defaultRuntimeSpec(id string) (*runtimespec.Spec, error) { // TODO(random-liu): Mount tmpfs for /run and handle copy-up. var mounts []runtimespec.Mount for _, mount := range spec.Mounts { - if mount.Destination == "/run" { + if filepath.Clean(mount.Destination) == "/run" { continue } mounts = append(mounts, mount) diff --git a/vendor/github.com/containerd/cri/pkg/server/container_stop.go b/vendor/github.com/containerd/cri/pkg/server/container_stop.go index f6d380d6597..7b8f16e6c5a 100644 --- a/vendor/github.com/containerd/cri/pkg/server/container_stop.go +++ b/vendor/github.com/containerd/cri/pkg/server/container_stop.go @@ -143,8 +143,9 @@ func (c *criService) stopContainer(ctx context.Context, container containerstore return errors.Wrapf(err, "failed to stop container %q", id) } - if err = c.waitContainerStop(ctx, container, timeout); err == nil { - return nil + if err = c.waitContainerStop(ctx, container, timeout); err == nil || errors.Cause(err) == ctx.Err() { + // Do not SIGKILL container if the context is cancelled. + return err } logrus.WithError(err).Errorf("An error occurs during waiting for container %q to be stopped", id) } @@ -167,7 +168,7 @@ func (c *criService) waitContainerStop(ctx context.Context, container containers defer timeoutTimer.Stop() select { case <-ctx.Done(): - return errors.Errorf("wait container %q is cancelled", container.ID) + return errors.Wrapf(ctx.Err(), "wait container %q is cancelled", container.ID) case <-timeoutTimer.C: return errors.Errorf("wait container %q stop timeout", container.ID) case <-container.Stopped(): diff --git a/vendor/github.com/containerd/cri/pkg/server/helpers.go b/vendor/github.com/containerd/cri/pkg/server/helpers.go index 8d83987414d..da46b6705b5 100644 --- a/vendor/github.com/containerd/cri/pkg/server/helpers.go +++ b/vendor/github.com/containerd/cri/pkg/server/helpers.go @@ -37,7 +37,6 @@ import ( imagedigest "github.com/opencontainers/go-digest" runtimespec "github.com/opencontainers/runtime-spec/specs-go" "github.com/opencontainers/runtime-tools/generate" - "github.com/opencontainers/selinux/go-selinux" "github.com/opencontainers/selinux/go-selinux/label" "github.com/pkg/errors" "golang.org/x/net/context" @@ -97,6 +96,8 @@ const ( devShm = "/dev/shm" // etcHosts is the default path of /etc/hosts file. etcHosts = "/etc/hosts" + // etcHostname is the default path of /etc/hostname file. + etcHostname = "/etc/hostname" // resolvConfPath is the abs path of resolv.conf on host or container. resolvConfPath = "/etc/resolv.conf" // hostnameEnv is the key for HOSTNAME env. @@ -197,6 +198,11 @@ func (c *criService) getVolatileContainerRootDir(id string) string { return filepath.Join(c.config.StateDir, containersDir, id) } +// getSandboxHostname returns the hostname file path inside the sandbox root directory. +func (c *criService) getSandboxHostname(id string) string { + return filepath.Join(c.getSandboxRootDir(id), "hostname") +} + // getSandboxHosts returns the hosts file path inside the sandbox root directory. func (c *criService) getSandboxHosts(id string) string { return filepath.Join(c.getSandboxRootDir(id), "hosts") @@ -348,7 +354,12 @@ func initSelinuxOpts(selinuxOpt *runtime.SELinuxOption) (string, string, error) selinuxOpt.GetRole(), selinuxOpt.GetType(), selinuxOpt.GetLevel()) - return label.InitLabels(selinux.DupSecOpt(labelOpts)) + + options, err := label.DupSecOpt(labelOpts) + if err != nil { + return "", "", err + } + return label.InitLabels(options) } func checkSelinuxLevel(level string) (bool, error) { @@ -366,7 +377,7 @@ func checkSelinuxLevel(level string) (bool, error) { // isInCRIMounts checks whether a destination is in CRI mount list. func isInCRIMounts(dst string, mounts []*runtime.Mount) bool { for _, m := range mounts { - if m.ContainerPath == dst { + if filepath.Clean(m.ContainerPath) == filepath.Clean(dst) { return true } } @@ -390,10 +401,51 @@ func buildLabels(configLabels map[string]string, containerType string) map[strin } // newSpecGenerator creates a new spec generator for the runtime spec. -func newSpecGenerator(spec *runtimespec.Spec) generate.Generator { +func newSpecGenerator(spec *runtimespec.Spec) generator { g := generate.NewFromSpec(spec) g.HostSpecific = true - return g + return newCustomGenerator(g) +} + +// generator is a custom generator with some functions overridden +// used by the cri plugin. +// TODO(random-liu): Upstream this fix. +type generator struct { + generate.Generator + envCache map[string]int +} + +func newCustomGenerator(g generate.Generator) generator { + cg := generator{ + Generator: g, + envCache: make(map[string]int), + } + if g.Config != nil && g.Config.Process != nil { + for i, env := range g.Config.Process.Env { + kv := strings.SplitN(env, "=", 2) + cg.envCache[kv[0]] = i + } + } + return cg +} + +// AddProcessEnv overrides the original AddProcessEnv. It uses +// a map to cache and override envs. +func (g *generator) AddProcessEnv(key, value string) { + if len(g.envCache) == 0 { + // Call AddProccessEnv once to initialize the spec. + g.Generator.AddProcessEnv(key, value) + g.envCache[key] = 0 + return + } + spec := g.Config + env := fmt.Sprintf("%s=%s", key, value) + if idx, ok := g.envCache[key]; !ok { + spec.Process.Env = append(spec.Process.Env, env) + g.envCache[key] = len(spec.Process.Env) - 1 + } else { + spec.Process.Env[idx] = env + } } func getPodCNILabels(id string, config *runtime.PodSandboxConfig) map[string]string { diff --git a/vendor/github.com/containerd/cri/pkg/server/instrumented_service.go b/vendor/github.com/containerd/cri/pkg/server/instrumented_service.go index e7c4a97a683..88e05f266fa 100644 --- a/vendor/github.com/containerd/cri/pkg/server/instrumented_service.go +++ b/vendor/github.com/containerd/cri/pkg/server/instrumented_service.go @@ -52,7 +52,7 @@ func (in *instrumentedService) RunPodSandbox(ctx context.Context, r *runtime.Run if err := in.checkInitialized(); err != nil { return nil, err } - logrus.Infof("RunPodSandbox with config %+v", r.GetConfig()) + logrus.Infof("RunPodsandbox for %+v", r.GetConfig().GetMetadata()) defer func() { if err != nil { logrus.WithError(err).Errorf("RunPodSandbox for %+v failed, error", r.GetConfig().GetMetadata()) @@ -142,8 +142,8 @@ func (in *instrumentedService) CreateContainer(ctx context.Context, r *runtime.C if err := in.checkInitialized(); err != nil { return nil, err } - logrus.Infof("CreateContainer within sandbox %q with container config %+v and sandbox config %+v", - r.GetPodSandboxId(), r.GetConfig(), r.GetSandboxConfig()) + logrus.Infof("CreateContainer within sandbox %q for container %+v", + r.GetPodSandboxId(), r.GetConfig().GetMetadata()) defer func() { if err != nil { logrus.WithError(err).Errorf("CreateContainer within sandbox %q for %+v failed", diff --git a/vendor/github.com/containerd/cri/pkg/server/sandbox_run.go b/vendor/github.com/containerd/cri/pkg/server/sandbox_run.go index 0f8b053e93a..7cbd8f192e5 100644 --- a/vendor/github.com/containerd/cri/pkg/server/sandbox_run.go +++ b/vendor/github.com/containerd/cri/pkg/server/sandbox_run.go @@ -27,6 +27,7 @@ import ( "github.com/containerd/containerd/oci" cni "github.com/containerd/go-cni" "github.com/containerd/typeurl" + "github.com/davecgh/go-spew/spew" imagespec "github.com/opencontainers/image-spec/specs-go/v1" runtimespec "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" @@ -54,6 +55,7 @@ func init() { // the sandbox is in ready state. func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandboxRequest) (_ *runtime.RunPodSandboxResponse, retErr error) { config := r.GetConfig() + logrus.Debugf("Sandbox config %+v", config) // Generate unique id and name for the sandbox and reserve the name. id := util.GenerateID() @@ -143,7 +145,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox if err != nil { return nil, errors.Wrap(err, "failed to generate sandbox container spec") } - logrus.Debugf("Sandbox container spec: %+v", spec) + logrus.Debugf("Sandbox container %q spec: %#+v", id, spew.NewFormatter(spec)) var specOpts []oci.SpecOpts userstr, err := generateUserString( @@ -227,7 +229,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox } }() - // Setup sandbox /dev/shm, /etc/hosts and /etc/resolv.conf. + // Setup sandbox /dev/shm, /etc/hosts, /etc/resolv.conf and /etc/hostname. if err = c.setupSandboxFiles(id, config); err != nil { return nil, errors.Wrapf(err, "failed to setup sandbox files") } @@ -383,6 +385,7 @@ func (c *criService) generateSandboxContainerSpec(id string, config *runtime.Pod nsOptions := securityContext.GetNamespaceOptions() if nsOptions.GetNetwork() == runtime.NamespaceMode_NODE { g.RemoveLinuxNamespace(string(runtimespec.NetworkNamespace)) // nolint: errcheck + g.RemoveLinuxNamespace(string(runtimespec.UTSNamespace)) // nolint: errcheck } else { //TODO(Abhi): May be move this to containerd spec opts (WithLinuxSpaceOption) g.AddOrReplaceLinuxNamespace(string(runtimespec.NetworkNamespace), nsPath) // nolint: errcheck @@ -433,13 +436,27 @@ func (c *criService) generateSandboxContainerSpec(id string, config *runtime.Pod g.AddAnnotation(annotations.ContainerType, annotations.ContainerTypeSandbox) g.AddAnnotation(annotations.SandboxID, id) + g.AddAnnotation(annotations.SandboxLogDir, config.GetLogDirectory()) return g.Config, nil } -// setupSandboxFiles sets up necessary sandbox files including /dev/shm, /etc/hosts -// and /etc/resolv.conf. +// setupSandboxFiles sets up necessary sandbox files including /dev/shm, /etc/hosts, +// /etc/resolv.conf and /etc/hostname. func (c *criService) setupSandboxFiles(id string, config *runtime.PodSandboxConfig) error { + sandboxEtcHostname := c.getSandboxHostname(id) + hostname := config.GetHostname() + if hostname == "" { + var err error + hostname, err = c.os.Hostname() + if err != nil { + return errors.Wrap(err, "failed to get hostname") + } + } + if err := c.os.WriteFile(sandboxEtcHostname, []byte(hostname+"\n"), 0644); err != nil { + return errors.Wrapf(err, "failed to write hostname to %q", sandboxEtcHostname) + } + // TODO(random-liu): Consider whether we should maintain /etc/hosts and /etc/resolv.conf in kubelet. sandboxEtcHosts := c.getSandboxHosts(id) if err := c.os.CopyFile(etcHosts, sandboxEtcHosts, 0644); err != nil { diff --git a/vendor/github.com/containerd/cri/pkg/server/sandbox_stop.go b/vendor/github.com/containerd/cri/pkg/server/sandbox_stop.go index cd774bebc65..7c522e309c7 100644 --- a/vendor/github.com/containerd/cri/pkg/server/sandbox_stop.go +++ b/vendor/github.com/containerd/cri/pkg/server/sandbox_stop.go @@ -144,7 +144,7 @@ func (c *criService) waitSandboxStop(ctx context.Context, sandbox sandboxstore.S defer timeoutTimer.Stop() select { case <-ctx.Done(): - return errors.Errorf("wait sandbox container %q is cancelled", sandbox.ID) + return errors.Wrapf(ctx.Err(), "wait sandbox container %q is cancelled", sandbox.ID) case <-timeoutTimer.C: return errors.Errorf("wait sandbox container %q stop timeout", sandbox.ID) case <-sandbox.Stopped(): diff --git a/vendor/github.com/containerd/cri/vendor.conf b/vendor/github.com/containerd/cri/vendor.conf index 26c3d894185..ba4ab0f2fe9 100644 --- a/vendor/github.com/containerd/cri/vendor.conf +++ b/vendor/github.com/containerd/cri/vendor.conf @@ -1,9 +1,9 @@ github.com/beorn7/perks 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9 github.com/blang/semver v3.1.0 github.com/BurntSushi/toml a368813c5e648fee92e5f6c30e3944ff9d5e8895 -github.com/containerd/cgroups 5e610833b72089b37d0e615de9a92dfc043757c2 +github.com/containerd/cgroups dbea6f2bd41658b84b00417ceefa416b979cbf10 github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23 -github.com/containerd/containerd 0137339c8c1d55de5545ffdd723199dfba27cb24 +github.com/containerd/containerd v1.2.5 github.com/containerd/continuity bd77b46c8352f74eb12c85bdc01f4b90f69d66b4 github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c github.com/containerd/go-cni 40bcf8ec8acd7372be1d77031d585d5d8e561c90 @@ -11,10 +11,10 @@ github.com/containerd/go-runc 5a6d9f37cfa36b15efba46dc7ea349fa9b7143c3 github.com/containerd/ttrpc 2a805f71863501300ae1976d29f0454ae003e85a github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 github.com/containernetworking/cni v0.6.0 -github.com/containernetworking/plugins v0.7.0 +github.com/containernetworking/plugins v0.7.5 github.com/coreos/go-systemd v14 github.com/davecgh/go-spew v1.1.0 -github.com/docker/distribution b38e5838b7b2f2ad48e06ec4b500011976080621 +github.com/docker/distribution 0d3efadf0154c2b8a4e7b6621fff9809655cc580 github.com/docker/docker 86f080cff0914e9694068ed78d503701667c4c00 github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9 github.com/docker/go-metrics 4ea375f7759c82740c893fc030bc37088d2ec098 @@ -39,10 +39,10 @@ github.com/modern-go/concurrent 1.0.3 github.com/modern-go/reflect2 1.0.1 github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7 github.com/opencontainers/image-spec v1.0.1 -github.com/opencontainers/runc 12f6a991201fdb8f82579582d5e00e28fba06d0a +github.com/opencontainers/runc 2b18fe1d885ee5083ef9f0838fee39b62d653e30 github.com/opencontainers/runtime-spec eba862dc2470385a233c7507392675cbeadf7353 github.com/opencontainers/runtime-tools v0.6.0 -github.com/opencontainers/selinux b6fa367ed7f534f9ba25391cc2d467085dbb445a +github.com/opencontainers/selinux v1.2.1 github.com/pkg/errors v0.8.0 github.com/pmezard/go-difflib v1.0.0 github.com/prometheus/client_golang f4fb1b73fb099f396a7f0036bf86aa8def4ed823 @@ -63,7 +63,7 @@ golang.org/x/crypto 49796115aa4b964c318aad4f3084fdb41e9aa067 golang.org/x/net b3756b4b77d7b13260a0a2ec658753cf48922eac golang.org/x/oauth2 a6bd8cefa1811bd24b86f8902872e4e8225f74c4 golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c -golang.org/x/sys 1b2967e3c290b7c545b3db0deeda16e9be4f98a2 https://github.com/golang/sys +golang.org/x/sys 41f3e6584952bb034a481797859f6ab34b6803bd https://github.com/golang/sys golang.org/x/text 19e51611da83d6be54ddafce4a4af510cb3e9ea4 golang.org/x/time f51c12702a4d776e4c1fa9b0fabab841babae631 google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944 diff --git a/vendor/github.com/google/cadvisor/CHANGELOG.md b/vendor/github.com/google/cadvisor/CHANGELOG.md index 604da5e45bc..35fb701e6fe 100644 --- a/vendor/github.com/google/cadvisor/CHANGELOG.md +++ b/vendor/github.com/google/cadvisor/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +### 0.33.0 (2019-02-26) +- Add --raw_cgroup_prefix_whitelist flag to allow configuring which raw cgroup trees cAdvisor monitors +- Replace `du` and `find` with a golang implementation +- Periodically update MachineInfo to support hot-add/remove +- Add explicit timestamps to prometheus metrics to fix rate calculations +- Add --url_base_prefix flag to provide better support for reverse proxies +- Add --white_listed_container_labels flag to allow specifying the container labels added as prometheus labels + ### 0.32.0 (2018-11-12) - Add container process and file descriptor metrics (disabled by default) - Rename `type` label to `failure_type` for prometheus `memory_failures_total` metric diff --git a/vendor/github.com/google/cadvisor/container/common/fsHandler.go b/vendor/github.com/google/cadvisor/container/common/fsHandler.go index 2a14358eb55..9de6a0f07fb 100644 --- a/vendor/github.com/google/cadvisor/container/common/fsHandler.go +++ b/vendor/github.com/google/cadvisor/container/common/fsHandler.go @@ -51,7 +51,6 @@ type realFsHandler struct { } const ( - timeout = 2 * time.Minute maxBackoffFactor = 20 ) @@ -74,17 +73,16 @@ func NewFsHandler(period time.Duration, rootfs, extraDir string, fsInfo fs.FsInf func (fh *realFsHandler) update() error { var ( - baseUsage, extraDirUsage, inodeUsage uint64 - rootDiskErr, rootInodeErr, extraDiskErr error + rootUsage, extraUsage fs.UsageInfo + rootErr, extraErr error ) // TODO(vishh): Add support for external mounts. if fh.rootfs != "" { - baseUsage, rootDiskErr = fh.fsInfo.GetDirDiskUsage(fh.rootfs, timeout) - inodeUsage, rootInodeErr = fh.fsInfo.GetDirInodeUsage(fh.rootfs, timeout) + rootUsage, rootErr = fh.fsInfo.GetDirUsage(fh.rootfs) } if fh.extraDir != "" { - extraDirUsage, extraDiskErr = fh.fsInfo.GetDirDiskUsage(fh.extraDir, timeout) + extraUsage, extraErr = fh.fsInfo.GetDirUsage(fh.extraDir) } // Wait to handle errors until after all operartions are run. @@ -92,18 +90,17 @@ func (fh *realFsHandler) update() error { fh.Lock() defer fh.Unlock() fh.lastUpdate = time.Now() - if rootInodeErr == nil && fh.rootfs != "" { - fh.usage.InodeUsage = inodeUsage + if fh.rootfs != "" && rootErr == nil { + fh.usage.InodeUsage = rootUsage.Inodes + fh.usage.TotalUsageBytes = rootUsage.Bytes + extraUsage.Bytes } - if rootDiskErr == nil && fh.rootfs != "" { - fh.usage.TotalUsageBytes = baseUsage + extraDirUsage - } - if extraDiskErr == nil && fh.extraDir != "" { - fh.usage.BaseUsageBytes = baseUsage + if fh.extraDir != "" && extraErr == nil { + fh.usage.BaseUsageBytes = rootUsage.Bytes } + // Combine errors into a single error to return - if rootDiskErr != nil || rootInodeErr != nil || extraDiskErr != nil { - return fmt.Errorf("rootDiskErr: %v, rootInodeErr: %v, extraDiskErr: %v", rootDiskErr, rootInodeErr, extraDiskErr) + if rootErr != nil || extraErr != nil { + return fmt.Errorf("rootDiskErr: %v, extraDiskErr: %v", rootErr, extraErr) } return nil } @@ -132,7 +129,7 @@ func (fh *realFsHandler) trackUsage() { // if the long duration is persistent either because of slow // disk or lots of containers. longOp = longOp + time.Second - klog.V(2).Infof("du and find on following dirs took %v: %v; will not log again for this container unless duration exceeds %v", duration, []string{fh.rootfs, fh.extraDir}, longOp) + klog.V(2).Infof("fs: disk usage and inodes count on following dirs took %v: %v; will not log again for this container unless duration exceeds %v", duration, []string{fh.rootfs, fh.extraDir}, longOp) } } } diff --git a/vendor/github.com/google/cadvisor/container/common/helpers.go b/vendor/github.com/google/cadvisor/container/common/helpers.go index d38777f93bf..3a84c2550f5 100644 --- a/vendor/github.com/google/cadvisor/container/common/helpers.go +++ b/vendor/github.com/google/cadvisor/container/common/helpers.go @@ -134,7 +134,7 @@ func readString(dirpath string, file string) string { if err != nil { // Ignore non-existent files if !os.IsNotExist(err) { - klog.Errorf("readString: Failed to read %q: %s", cgroupFile, err) + klog.Warningf("readString: Failed to read %q: %s", cgroupFile, err) } return "" } diff --git a/vendor/github.com/google/cadvisor/container/containerd/factory.go b/vendor/github.com/google/cadvisor/container/containerd/factory.go index 2e2bb33346a..2a7f9dd5129 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/factory.go +++ b/vendor/github.com/google/cadvisor/container/containerd/factory.go @@ -128,7 +128,7 @@ func Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics return fmt.Errorf("failed to fetch containerd client version: %v", err) } - cgroupSubsystems, err := libcontainer.GetCgroupSubsystems() + cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics) if err != nil { return fmt.Errorf("failed to get cgroup subsystems: %v", err) } diff --git a/vendor/github.com/google/cadvisor/container/containerd/handler.go b/vendor/github.com/google/cadvisor/container/containerd/handler.go index 82aa8082c44..9e090d7feee 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/handler.go +++ b/vendor/github.com/google/cadvisor/container/containerd/handler.go @@ -18,7 +18,6 @@ package containerd import ( "encoding/json" "fmt" - "path" "strings" "time" @@ -67,10 +66,7 @@ func newContainerdContainerHandler( includedMetrics container.MetricSet, ) (container.ContainerHandler, error) { // Create the cgroup paths. - cgroupPaths := make(map[string]string, len(cgroupSubsystems.MountPoints)) - for key, val := range cgroupSubsystems.MountPoints { - cgroupPaths[key] = path.Join(val, name) - } + cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name) // Generate the equivalent cgroup manager for this container. cgroupManager := &cgroupfs.Manager{ diff --git a/vendor/github.com/google/cadvisor/container/crio/client.go b/vendor/github.com/google/cadvisor/container/crio/client.go new file mode 100644 index 00000000000..a47a3e7725a --- /dev/null +++ b/vendor/github.com/google/cadvisor/container/crio/client.go @@ -0,0 +1,130 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package crio + +import ( + "encoding/json" + "fmt" + "net" + "net/http" + "syscall" + "time" +) + +const ( + CrioSocket = "/var/run/crio/crio.sock" + maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path) +) + +// Info represents CRI-O information as sent by the CRI-O server +type Info struct { + StorageDriver string `json:"storage_driver"` + StorageRoot string `json:"storage_root"` +} + +// ContainerInfo represents a given container information +type ContainerInfo struct { + Name string `json:"name"` + Pid int `json:"pid"` + Image string `json:"image"` + CreatedTime int64 `json:"created_time"` + Labels map[string]string `json:"labels"` + Annotations map[string]string `json:"annotations"` + LogPath string `json:"log_path"` + Root string `json:"root"` + IP string `json:"ip_address"` +} + +type crioClient interface { + Info() (Info, error) + ContainerInfo(string) (*ContainerInfo, error) +} + +type crioClientImpl struct { + client *http.Client +} + +func configureUnixTransport(tr *http.Transport, proto, addr string) error { + if len(addr) > maxUnixSocketPathSize { + return fmt.Errorf("Unix socket path %q is too long", addr) + } + // No need for compression in local communications. + tr.DisableCompression = true + tr.Dial = func(_, _ string) (net.Conn, error) { + return net.DialTimeout(proto, addr, 32*time.Second) + } + return nil +} + +// Client returns a new configured CRI-O client +func Client() (crioClient, error) { + tr := new(http.Transport) + configureUnixTransport(tr, "unix", CrioSocket) + c := &http.Client{ + Transport: tr, + } + return &crioClientImpl{ + client: c, + }, nil +} + +func getRequest(path string) (*http.Request, error) { + req, err := http.NewRequest("GET", path, nil) + if err != nil { + return nil, err + } + // For local communications over a unix socket, it doesn't matter what + // the host is. We just need a valid and meaningful host name. + req.Host = "crio" + req.URL.Host = CrioSocket + req.URL.Scheme = "http" + return req, nil +} + +// Info returns generic info from the CRI-O server +func (c *crioClientImpl) Info() (Info, error) { + info := Info{} + req, err := getRequest("/info") + if err != nil { + return info, err + } + resp, err := c.client.Do(req) + if err != nil { + return info, err + } + defer resp.Body.Close() + if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { + return info, err + } + return info, nil +} + +// ContainerInfo returns information about a given container +func (c *crioClientImpl) ContainerInfo(id string) (*ContainerInfo, error) { + req, err := getRequest("/containers/" + id) + if err != nil { + return nil, err + } + resp, err := c.client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + cInfo := ContainerInfo{} + if err := json.NewDecoder(resp.Body).Decode(&cInfo); err != nil { + return nil, err + } + return &cInfo, nil +} diff --git a/vendor/github.com/google/cadvisor/container/crio/factory.go b/vendor/github.com/google/cadvisor/container/crio/factory.go new file mode 100644 index 00000000000..b3380b02b5c --- /dev/null +++ b/vendor/github.com/google/cadvisor/container/crio/factory.go @@ -0,0 +1,170 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package crio + +import ( + "fmt" + "path" + "regexp" + "strings" + + "github.com/google/cadvisor/container" + "github.com/google/cadvisor/container/libcontainer" + "github.com/google/cadvisor/fs" + info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/manager/watcher" + + "k8s.io/klog" +) + +// The namespace under which crio aliases are unique. +const CrioNamespace = "crio" + +// Regexp that identifies CRI-O cgroups +var crioCgroupRegexp = regexp.MustCompile(`([a-z0-9]{64})`) + +type storageDriver string + +const ( + // TODO add full set of supported drivers in future.. + overlayStorageDriver storageDriver = "overlay" + overlay2StorageDriver storageDriver = "overlay2" +) + +type crioFactory struct { + machineInfoFactory info.MachineInfoFactory + + storageDriver storageDriver + storageDir string + + // Information about the mounted cgroup subsystems. + cgroupSubsystems libcontainer.CgroupSubsystems + + // Information about mounted filesystems. + fsInfo fs.FsInfo + + includedMetrics container.MetricSet + + client crioClient +} + +func (self *crioFactory) String() string { + return CrioNamespace +} + +func (self *crioFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) { + client, err := Client() + if err != nil { + return + } + // TODO are there any env vars we need to white list, if so, do it here... + metadataEnvs := []string{} + handler, err = newCrioContainerHandler( + client, + name, + self.machineInfoFactory, + self.fsInfo, + self.storageDriver, + self.storageDir, + &self.cgroupSubsystems, + inHostNamespace, + metadataEnvs, + self.includedMetrics, + ) + return +} + +// Returns the CRIO ID from the full container name. +func ContainerNameToCrioId(name string) string { + id := path.Base(name) + + if matches := crioCgroupRegexp.FindStringSubmatch(id); matches != nil { + return matches[1] + } + + return id +} + +// isContainerName returns true if the cgroup with associated name +// corresponds to a crio container. +func isContainerName(name string) bool { + // always ignore .mount cgroup even if associated with crio and delegate to systemd + if strings.HasSuffix(name, ".mount") { + return false + } + return crioCgroupRegexp.MatchString(path.Base(name)) +} + +// crio handles all containers under /crio +func (self *crioFactory) CanHandleAndAccept(name string) (bool, bool, error) { + if strings.HasPrefix(path.Base(name), "crio-conmon") { + // TODO(runcom): should we include crio-conmon cgroups? + return false, false, nil + } + if !strings.HasPrefix(path.Base(name), CrioNamespace) { + return false, false, nil + } + // if the container is not associated with CRI-O, we can't handle it or accept it. + if !isContainerName(name) { + return false, false, nil + } + return true, true, nil +} + +func (self *crioFactory) DebugInfo() map[string][]string { + return map[string][]string{} +} + +var ( + // TODO(runcom): handle versioning in CRI-O + version_regexp_string = `(\d+)\.(\d+)\.(\d+)` + version_re = regexp.MustCompile(version_regexp_string) + apiversion_regexp_string = `(\d+)\.(\d+)` + apiversion_re = regexp.MustCompile(apiversion_regexp_string) +) + +// Register root container before running this function! +func Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) error { + client, err := Client() + if err != nil { + return err + } + + info, err := client.Info() + if err != nil { + return err + } + + // TODO determine crio version so we can work differently w/ future versions if needed + + cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics) + if err != nil { + return fmt.Errorf("failed to get cgroup subsystems: %v", err) + } + + klog.V(1).Infof("Registering CRI-O factory") + f := &crioFactory{ + client: client, + cgroupSubsystems: cgroupSubsystems, + fsInfo: fsInfo, + machineInfoFactory: factory, + storageDriver: storageDriver(info.StorageDriver), + storageDir: info.StorageRoot, + includedMetrics: includedMetrics, + } + + container.RegisterContainerHandlerFactory(f, []watcher.ContainerWatchSource{watcher.Raw}) + return nil +} diff --git a/vendor/github.com/google/cadvisor/container/crio/handler.go b/vendor/github.com/google/cadvisor/container/crio/handler.go new file mode 100644 index 00000000000..4078474fef1 --- /dev/null +++ b/vendor/github.com/google/cadvisor/container/crio/handler.go @@ -0,0 +1,319 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Handler for CRI-O containers. +package crio + +import ( + "fmt" + "path" + "path/filepath" + "strconv" + "strings" + + "github.com/google/cadvisor/container" + "github.com/google/cadvisor/container/common" + containerlibcontainer "github.com/google/cadvisor/container/libcontainer" + "github.com/google/cadvisor/fs" + info "github.com/google/cadvisor/info/v1" + + cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs" + libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs" +) + +type crioContainerHandler struct { + machineInfoFactory info.MachineInfoFactory + + // Absolute path to the cgroup hierarchies of this container. + // (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test") + cgroupPaths map[string]string + + // the CRI-O storage driver + storageDriver storageDriver + fsInfo fs.FsInfo + rootfsStorageDir string + + // Metadata associated with the container. + envs map[string]string + labels map[string]string + + // TODO + // crio version handling... + + // Image name used for this container. + image string + + // The network mode of the container + // TODO + + // Filesystem handler. + fsHandler common.FsHandler + + // The IP address of the container + ipAddress string + + includedMetrics container.MetricSet + + reference info.ContainerReference + + libcontainerHandler *containerlibcontainer.Handler +} + +var _ container.ContainerHandler = &crioContainerHandler{} + +// newCrioContainerHandler returns a new container.ContainerHandler +func newCrioContainerHandler( + client crioClient, + name string, + machineInfoFactory info.MachineInfoFactory, + fsInfo fs.FsInfo, + storageDriver storageDriver, + storageDir string, + cgroupSubsystems *containerlibcontainer.CgroupSubsystems, + inHostNamespace bool, + metadataEnvs []string, + includedMetrics container.MetricSet, +) (container.ContainerHandler, error) { + // Create the cgroup paths. + cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name) + + // Generate the equivalent cgroup manager for this container. + cgroupManager := &cgroupfs.Manager{ + Cgroups: &libcontainerconfigs.Cgroup{ + Name: name, + }, + Paths: cgroupPaths, + } + + rootFs := "/" + if !inHostNamespace { + rootFs = "/rootfs" + storageDir = path.Join(rootFs, storageDir) + } + + id := ContainerNameToCrioId(name) + + cInfo, err := client.ContainerInfo(id) + if err != nil { + return nil, err + } + + // passed to fs handler below ... + // XXX: this is using the full container logpath, as constructed by the CRI + // /var/log/pods//container_instance.log + // It's not actually a log dir, as the CRI doesn't have per-container dirs + // under /var/log/pods// + // We can't use /var/log/pods// to count per-container log usage. + // We use the container log file directly. + storageLogDir := cInfo.LogPath + + // Determine the rootfs storage dir + rootfsStorageDir := cInfo.Root + // TODO(runcom): CRI-O doesn't strip /merged but we need to in order to + // get device ID from root, otherwise, it's going to error out as overlay + // mounts doesn't have fixed dev ids. + rootfsStorageDir = strings.TrimSuffix(rootfsStorageDir, "/merged") + switch storageDriver { + case overlayStorageDriver, overlay2StorageDriver: + // overlay and overlay2 driver are the same "overlay2" driver so treat + // them the same. + rootfsStorageDir = filepath.Join(rootfsStorageDir, "diff") + } + + containerReference := info.ContainerReference{ + Id: id, + Name: name, + Aliases: []string{cInfo.Name, id}, + Namespace: CrioNamespace, + } + + libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootFs, cInfo.Pid, includedMetrics) + + // TODO: extract object mother method + handler := &crioContainerHandler{ + machineInfoFactory: machineInfoFactory, + cgroupPaths: cgroupPaths, + storageDriver: storageDriver, + fsInfo: fsInfo, + rootfsStorageDir: rootfsStorageDir, + envs: make(map[string]string), + labels: cInfo.Labels, + includedMetrics: includedMetrics, + reference: containerReference, + libcontainerHandler: libcontainerHandler, + } + + handler.image = cInfo.Image + // TODO: we wantd to know graph driver DeviceId (dont think this is needed now) + + // ignore err and get zero as default, this happens with sandboxes, not sure why... + // kube isn't sending restart count in labels for sandboxes. + restartCount, _ := strconv.Atoi(cInfo.Annotations["io.kubernetes.container.restartCount"]) + // Only adds restartcount label if it's greater than 0 + if restartCount > 0 { + handler.labels["restartcount"] = strconv.Itoa(restartCount) + } + + handler.ipAddress = cInfo.IP + + // we optionally collect disk usage metrics + if includedMetrics.Has(container.DiskUsageMetrics) { + handler.fsHandler = common.NewFsHandler(common.DefaultPeriod, rootfsStorageDir, storageLogDir, fsInfo) + } + // TODO for env vars we wanted to show from container.Config.Env from whitelist + //for _, exposedEnv := range metadataEnvs { + //klog.V(4).Infof("TODO env whitelist: %v", exposedEnv) + //} + + return handler, nil +} + +func (self *crioContainerHandler) Start() { + if self.fsHandler != nil { + self.fsHandler.Start() + } +} + +func (self *crioContainerHandler) Cleanup() { + if self.fsHandler != nil { + self.fsHandler.Stop() + } +} + +func (self *crioContainerHandler) ContainerReference() (info.ContainerReference, error) { + return self.reference, nil +} + +func (self *crioContainerHandler) needNet() bool { + if self.includedMetrics.Has(container.NetworkUsageMetrics) { + return self.labels["io.kubernetes.container.name"] == "POD" + } + return false +} + +func (self *crioContainerHandler) GetSpec() (info.ContainerSpec, error) { + hasFilesystem := self.includedMetrics.Has(container.DiskUsageMetrics) + spec, err := common.GetSpec(self.cgroupPaths, self.machineInfoFactory, self.needNet(), hasFilesystem) + + spec.Labels = self.labels + spec.Envs = self.envs + spec.Image = self.image + + return spec, err +} + +func (self *crioContainerHandler) getFsStats(stats *info.ContainerStats) error { + mi, err := self.machineInfoFactory.GetMachineInfo() + if err != nil { + return err + } + + if self.includedMetrics.Has(container.DiskIOMetrics) { + common.AssignDeviceNamesToDiskStats((*common.MachineInfoNamer)(mi), &stats.DiskIo) + } + + if !self.includedMetrics.Has(container.DiskUsageMetrics) { + return nil + } + var device string + switch self.storageDriver { + case overlay2StorageDriver, overlayStorageDriver: + deviceInfo, err := self.fsInfo.GetDirFsDevice(self.rootfsStorageDir) + if err != nil { + return fmt.Errorf("unable to determine device info for dir: %v: %v", self.rootfsStorageDir, err) + } + device = deviceInfo.Device + default: + return nil + } + + var ( + limit uint64 + fsType string + ) + + // crio does not impose any filesystem limits for containers. So use capacity as limit. + for _, fs := range mi.Filesystems { + if fs.Device == device { + limit = fs.Capacity + fsType = fs.Type + break + } + } + + fsStat := info.FsStats{Device: device, Type: fsType, Limit: limit} + usage := self.fsHandler.Usage() + fsStat.BaseUsage = usage.BaseUsageBytes + fsStat.Usage = usage.TotalUsageBytes + fsStat.Inodes = usage.InodeUsage + + stats.Filesystem = append(stats.Filesystem, fsStat) + + return nil +} + +func (self *crioContainerHandler) GetStats() (*info.ContainerStats, error) { + stats, err := self.libcontainerHandler.GetStats() + if err != nil { + return stats, err + } + // Clean up stats for containers that don't have their own network - this + // includes containers running in Kubernetes pods that use the network of the + // infrastructure container. This stops metrics being reported multiple times + // for each container in a pod. + if !self.needNet() { + stats.Network = info.NetworkStats{} + } + + // Get filesystem stats. + err = self.getFsStats(stats) + if err != nil { + return stats, err + } + + return stats, nil +} + +func (self *crioContainerHandler) ListContainers(listType container.ListType) ([]info.ContainerReference, error) { + // No-op for Docker driver. + return []info.ContainerReference{}, nil +} + +func (self *crioContainerHandler) GetCgroupPath(resource string) (string, error) { + path, ok := self.cgroupPaths[resource] + if !ok { + return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.reference.Name) + } + return path, nil +} + +func (self *crioContainerHandler) GetContainerLabels() map[string]string { + return self.labels +} + +func (self *crioContainerHandler) GetContainerIPAddress() string { + return self.ipAddress +} + +func (self *crioContainerHandler) ListProcesses(listType container.ListType) ([]int, error) { + return self.libcontainerHandler.GetProcesses() +} + +func (self *crioContainerHandler) Exists() bool { + return common.CgroupExists(self.cgroupPaths) +} + +func (self *crioContainerHandler) Type() container.ContainerType { + return container.ContainerTypeCrio +} diff --git a/vendor/github.com/google/cadvisor/container/docker/factory.go b/vendor/github.com/google/cadvisor/container/docker/factory.go index 7502781c43c..5802be033e4 100644 --- a/vendor/github.com/google/cadvisor/container/docker/factory.go +++ b/vendor/github.com/google/cadvisor/container/docker/factory.go @@ -325,7 +325,7 @@ func Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics dockerAPIVersion, _ := APIVersion() - cgroupSubsystems, err := libcontainer.GetCgroupSubsystems() + cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics) if err != nil { return fmt.Errorf("failed to get cgroup subsystems: %v", err) } diff --git a/vendor/github.com/google/cadvisor/container/docker/handler.go b/vendor/github.com/google/cadvisor/container/docker/handler.go index 638350c0929..ae8f48efa7c 100644 --- a/vendor/github.com/google/cadvisor/container/docker/handler.go +++ b/vendor/github.com/google/cadvisor/container/docker/handler.go @@ -134,10 +134,7 @@ func newDockerContainerHandler( zfsWatcher *zfs.ZfsWatcher, ) (container.ContainerHandler, error) { // Create the cgroup paths. - cgroupPaths := make(map[string]string, len(cgroupSubsystems.MountPoints)) - for key, val := range cgroupSubsystems.MountPoints { - cgroupPaths[key] = path.Join(val, name) - } + cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name) // Generate the equivalent cgroup manager for this container. cgroupManager := &cgroupfs.Manager{ diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/handler.go b/vendor/github.com/google/cadvisor/container/libcontainer/handler.go index 5b44fb7437b..1951a1d6700 100644 --- a/vendor/github.com/google/cadvisor/container/libcontainer/handler.go +++ b/vendor/github.com/google/cadvisor/container/libcontainer/handler.go @@ -66,8 +66,7 @@ func (h *Handler) GetStats() (*info.ContainerStats, error) { libcontainerStats := &libcontainer.Stats{ CgroupStats: cgroupStats, } - withPerCPU := h.includedMetrics.Has(container.PerCpuUsageMetrics) - stats := newContainerStats(libcontainerStats, withPerCPU) + stats := newContainerStats(libcontainerStats, h.includedMetrics) if h.includedMetrics.Has(container.ProcessSchedulerMetrics) { pids, err := h.cgroupManager.GetAllPids() @@ -599,14 +598,16 @@ func setNetworkStats(libcontainerStats *libcontainer.Stats, ret *info.ContainerS } } -func newContainerStats(libcontainerStats *libcontainer.Stats, withPerCPU bool) *info.ContainerStats { +func newContainerStats(libcontainerStats *libcontainer.Stats, includedMetrics container.MetricSet) *info.ContainerStats { ret := &info.ContainerStats{ Timestamp: time.Now(), } if s := libcontainerStats.CgroupStats; s != nil { - setCpuStats(s, ret, withPerCPU) - setDiskIoStats(s, ret) + setCpuStats(s, ret, includedMetrics.Has(container.PerCpuUsageMetrics)) + if includedMetrics.Has(container.DiskIOMetrics) { + setDiskIoStats(s, ret) + } setMemoryStats(s, ret) } if len(libcontainerStats.Interfaces) > 0 { diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go b/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go index 05554465caa..9877d75a6dc 100644 --- a/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go +++ b/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go @@ -19,6 +19,7 @@ import ( info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/container" "github.com/opencontainers/runc/libcontainer/cgroups" "k8s.io/klog" ) @@ -33,18 +34,36 @@ type CgroupSubsystems struct { MountPoints map[string]string } -// Get information about the cgroup subsystems. -func GetCgroupSubsystems() (CgroupSubsystems, error) { +// Get information about the cgroup subsystems those we want +func GetCgroupSubsystems(includedMetrics container.MetricSet) (CgroupSubsystems, error) { // Get all cgroup mounts. allCgroups, err := cgroups.GetCgroupMounts(true) if err != nil { return CgroupSubsystems{}, err } - return getCgroupSubsystemsHelper(allCgroups) + disableCgroups := map[string]struct{}{} + + //currently we only support disable blkio subsystem + if !includedMetrics.Has(container.DiskIOMetrics) { + disableCgroups["blkio"] = struct{}{} + } + return getCgroupSubsystemsHelper(allCgroups, disableCgroups) } -func getCgroupSubsystemsHelper(allCgroups []cgroups.Mount) (CgroupSubsystems, error) { +// Get information about all the cgroup subsystems. +func GetAllCgroupSubsystems() (CgroupSubsystems, error) { + // Get all cgroup mounts. + allCgroups, err := cgroups.GetCgroupMounts(true) + if err != nil { + return CgroupSubsystems{}, err + } + + emptyDisableCgroups := map[string]struct{}{} + return getCgroupSubsystemsHelper(allCgroups, emptyDisableCgroups) +} + +func getCgroupSubsystemsHelper(allCgroups []cgroups.Mount, disableCgroups map[string]struct{}) (CgroupSubsystems, error) { if len(allCgroups) == 0 { return CgroupSubsystems{}, fmt.Errorf("failed to find cgroup mounts") } @@ -55,6 +74,9 @@ func getCgroupSubsystemsHelper(allCgroups []cgroups.Mount) (CgroupSubsystems, er mountPoints := make(map[string]string, len(allCgroups)) for _, mount := range allCgroups { for _, subsystem := range mount.Subsystems { + if _, exists := disableCgroups[subsystem]; exists { + continue + } if _, ok := supportedSubsystems[subsystem]; !ok { // Unsupported subsystem continue diff --git a/vendor/github.com/google/cadvisor/container/raw/factory.go b/vendor/github.com/google/cadvisor/container/raw/factory.go index afc852e345b..c42e473ffab 100644 --- a/vendor/github.com/google/cadvisor/container/raw/factory.go +++ b/vendor/github.com/google/cadvisor/container/raw/factory.go @@ -63,17 +63,20 @@ func (self *rawFactory) NewContainerHandler(name string, inHostNamespace bool) ( return newRawContainerHandler(name, self.cgroupSubsystems, self.machineInfoFactory, self.fsInfo, self.watcher, rootFs, self.includedMetrics) } -// The raw factory can handle any container. If --docker_only is set to false, non-docker containers are ignored. +// The raw factory can handle any container. If --docker_only is set to true, non-docker containers are ignored except for "/" and those whitelisted by raw_cgroup_prefix_whitelist flag. func (self *rawFactory) CanHandleAndAccept(name string) (bool, bool, error) { - accept := name == "/" || !*dockerOnly - + if name == "/" { + return true, true, nil + } + if *dockerOnly && self.rawPrefixWhiteList[0] == "" { + return true, false, nil + } for _, prefix := range self.rawPrefixWhiteList { if strings.HasPrefix(name, prefix) { - accept = true - break + return true, true, nil } } - return true, accept, nil + return true, false, nil } func (self *rawFactory) DebugInfo() map[string][]string { @@ -81,7 +84,7 @@ func (self *rawFactory) DebugInfo() map[string][]string { } func Register(machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics map[container.MetricKind]struct{}, rawPrefixWhiteList []string) error { - cgroupSubsystems, err := libcontainer.GetCgroupSubsystems() + cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics) if err != nil { return fmt.Errorf("failed to get cgroup subsystems: %v", err) } diff --git a/vendor/github.com/google/cadvisor/container/raw/handler.go b/vendor/github.com/google/cadvisor/container/raw/handler.go index 7e7504d933b..2912e8948aa 100644 --- a/vendor/github.com/google/cadvisor/container/raw/handler.go +++ b/vendor/github.com/google/cadvisor/container/raw/handler.go @@ -39,8 +39,9 @@ type rawContainerHandler struct { // (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test") cgroupPaths map[string]string - fsInfo fs.FsInfo - externalMounts []common.Mount + fsInfo fs.FsInfo + externalMounts []common.Mount + includedMetrics container.MetricSet libcontainerHandler *libcontainer.Handler } @@ -86,6 +87,7 @@ func newRawContainerHandler(name string, cgroupSubsystems *libcontainer.CgroupSu cgroupPaths: cgroupPaths, fsInfo: fsInfo, externalMounts: externalMounts, + includedMetrics: includedMetrics, libcontainerHandler: handler, }, nil } @@ -185,36 +187,39 @@ func fsToFsStats(fs *fs.Fs) info.FsStats { } func (self *rawContainerHandler) getFsStats(stats *info.ContainerStats) error { - var allFs []fs.Fs + var filesystems []fs.Fs + var err error // Get Filesystem information only for the root cgroup. if isRootCgroup(self.name) { - filesystems, err := self.fsInfo.GetGlobalFsInfo() + filesystems, err = self.fsInfo.GetGlobalFsInfo() if err != nil { return err } - for i := range filesystems { - fs := filesystems[i] - stats.Filesystem = append(stats.Filesystem, fsToFsStats(&fs)) + } else if self.includedMetrics.Has(container.DiskUsageMetrics) || self.includedMetrics.Has(container.DiskIOMetrics) { + if len(self.externalMounts) > 0 { + var mountSet map[string]struct{} + mountSet = make(map[string]struct{}) + for _, mount := range self.externalMounts { + mountSet[mount.HostDir] = struct{}{} + } + filesystems, err = self.fsInfo.GetFsInfoForPath(mountSet) + if err != nil { + return err + } } - allFs = filesystems - } else if len(self.externalMounts) > 0 { - var mountSet map[string]struct{} - mountSet = make(map[string]struct{}) - for _, mount := range self.externalMounts { - mountSet[mount.HostDir] = struct{}{} - } - filesystems, err := self.fsInfo.GetFsInfoForPath(mountSet) - if err != nil { - return err - } - for i := range filesystems { - fs := filesystems[i] - stats.Filesystem = append(stats.Filesystem, fsToFsStats(&fs)) - } - allFs = filesystems } - common.AssignDeviceNamesToDiskStats(&fsNamer{fs: allFs, factory: self.machineInfoFactory}, &stats.DiskIo) + if isRootCgroup(self.name) || self.includedMetrics.Has(container.DiskUsageMetrics) { + for i := range filesystems { + fs := filesystems[i] + stats.Filesystem = append(stats.Filesystem, fsToFsStats(&fs)) + } + } + + if isRootCgroup(self.name) || self.includedMetrics.Has(container.DiskIOMetrics) { + common.AssignDeviceNamesToDiskStats(&fsNamer{fs: filesystems, factory: self.machineInfoFactory}, &stats.DiskIo) + + } return nil } diff --git a/vendor/github.com/google/cadvisor/container/systemd/factory.go b/vendor/github.com/google/cadvisor/container/systemd/factory.go new file mode 100644 index 00000000000..100c79e1390 --- /dev/null +++ b/vendor/github.com/google/cadvisor/container/systemd/factory.go @@ -0,0 +1,58 @@ +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package systemd + +import ( + "fmt" + "strings" + + "github.com/google/cadvisor/container" + "github.com/google/cadvisor/fs" + info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/manager/watcher" + + "k8s.io/klog" +) + +type systemdFactory struct{} + +func (f *systemdFactory) String() string { + return "systemd" +} + +func (f *systemdFactory) NewContainerHandler(name string, inHostNamespace bool) (container.ContainerHandler, error) { + return nil, fmt.Errorf("Not yet supported") +} + +func (f *systemdFactory) CanHandleAndAccept(name string) (bool, bool, error) { + // on systemd using devicemapper each mount into the container has an associated cgroup that we ignore. + // for details on .mount units: http://man7.org/linux/man-pages/man5/systemd.mount.5.html + if strings.HasSuffix(name, ".mount") { + return true, false, nil + } + return false, false, fmt.Errorf("%s not handled by systemd handler", name) +} + +func (f *systemdFactory) DebugInfo() map[string][]string { + return map[string][]string{} +} + +// Register registers the systemd container factory. +func Register(machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) error { + klog.V(1).Infof("Registering systemd factory") + factory := &systemdFactory{} + container.RegisterContainerHandlerFactory(factory, []watcher.ContainerWatchSource{watcher.Raw}) + return nil +} diff --git a/vendor/github.com/google/cadvisor/fs/fs.go b/vendor/github.com/google/cadvisor/fs/fs.go index e628b29ffd3..fd1bae3df8c 100644 --- a/vendor/github.com/google/cadvisor/fs/fs.go +++ b/vendor/github.com/google/cadvisor/fs/fs.go @@ -19,7 +19,6 @@ package fs import ( "bufio" - "bytes" "fmt" "io/ioutil" "os" @@ -30,7 +29,6 @@ import ( "strconv" "strings" "syscall" - "time" "github.com/docker/docker/pkg/mount" "github.com/google/cadvisor/devicemapper" @@ -47,8 +45,12 @@ const ( LabelCrioImages = "crio-images" ) -// The maximum number of `du` and `find` tasks that can be running at once. -const maxConcurrentOps = 20 +const ( + // The block size in bytes. + statBlockSize uint64 = 512 + // The maximum number of `disk usage` tasks that can be running at once. + maxConcurrentOps = 20 +) // A pool for restricting the number of consecutive `du` and `find` tasks running. var pool = make(chan struct{}, maxConcurrentOps) @@ -559,78 +561,73 @@ func (self *RealFsInfo) GetDirFsDevice(dir string) (*DeviceInfo, error) { return nil, fmt.Errorf("could not find device with major: %d, minor: %d in cached partitions map", major, minor) } -func (self *RealFsInfo) GetDirDiskUsage(dir string, timeout time.Duration) (uint64, error) { +func GetDirUsage(dir string) (UsageInfo, error) { + var usage UsageInfo + + if dir == "" { + return usage, fmt.Errorf("invalid directory") + } + + rootInfo, err := os.Stat(dir) + if err != nil { + return usage, fmt.Errorf("could not stat %q to get inode usage: %v", dir, err) + } + + rootStat, ok := rootInfo.Sys().(*syscall.Stat_t) + if !ok { + return usage, fmt.Errorf("unsuported fileinfo for getting inode usage of %q", dir) + } + + rootDevId := rootStat.Dev + + // dedupedInode stores inodes that could be duplicates (nlink > 1) + dedupedInodes := make(map[uint64]struct{}) + + err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if os.IsNotExist(err) { + // expected if files appear/vanish + return nil + } + if err != nil { + return fmt.Errorf("unable to count inodes for part of dir %s: %s", dir, err) + } + + // according to the docs, Sys can be nil + if info.Sys() == nil { + return fmt.Errorf("fileinfo Sys is nil") + } + + s, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return fmt.Errorf("unsupported fileinfo; could not convert to stat_t") + } + + if s.Dev != rootDevId { + // don't descend into directories on other devices + return filepath.SkipDir + } + if s.Nlink > 1 { + if _, ok := dedupedInodes[s.Ino]; !ok { + // Dedupe things that could be hardlinks + dedupedInodes[s.Ino] = struct{}{} + + usage.Bytes += uint64(s.Blocks) * statBlockSize + usage.Inodes++ + } + } else { + usage.Bytes += uint64(s.Blocks) * statBlockSize + usage.Inodes++ + } + return nil + }) + + return usage, nil +} + +func (self *RealFsInfo) GetDirUsage(dir string) (UsageInfo, error) { claimToken() defer releaseToken() - return GetDirDiskUsage(dir, timeout) -} - -func GetDirDiskUsage(dir string, timeout time.Duration) (uint64, error) { - if dir == "" { - return 0, fmt.Errorf("invalid directory") - } - cmd := exec.Command("ionice", "-c3", "nice", "-n", "19", "du", "-s", dir) - stdoutp, err := cmd.StdoutPipe() - if err != nil { - return 0, fmt.Errorf("failed to setup stdout for cmd %v - %v", cmd.Args, err) - } - stderrp, err := cmd.StderrPipe() - if err != nil { - return 0, fmt.Errorf("failed to setup stderr for cmd %v - %v", cmd.Args, err) - } - - if err := cmd.Start(); err != nil { - return 0, fmt.Errorf("failed to exec du - %v", err) - } - timer := time.AfterFunc(timeout, func() { - klog.Warningf("Killing cmd %v due to timeout(%s)", cmd.Args, timeout.String()) - cmd.Process.Kill() - }) - stdoutb, souterr := ioutil.ReadAll(stdoutp) - if souterr != nil { - klog.Errorf("Failed to read from stdout for cmd %v - %v", cmd.Args, souterr) - } - stderrb, _ := ioutil.ReadAll(stderrp) - err = cmd.Wait() - timer.Stop() - if err != nil { - return 0, fmt.Errorf("du command failed on %s with output stdout: %s, stderr: %s - %v", dir, string(stdoutb), string(stderrb), err) - } - stdout := string(stdoutb) - usageInKb, err := strconv.ParseUint(strings.Fields(stdout)[0], 10, 64) - if err != nil { - return 0, fmt.Errorf("cannot parse 'du' output %s - %s", stdout, err) - } - return usageInKb * 1024, nil -} - -func (self *RealFsInfo) GetDirInodeUsage(dir string, timeout time.Duration) (uint64, error) { - claimToken() - defer releaseToken() - return GetDirInodeUsage(dir, timeout) -} - -func GetDirInodeUsage(dir string, timeout time.Duration) (uint64, error) { - if dir == "" { - return 0, fmt.Errorf("invalid directory") - } - var counter byteCounter - var stderr bytes.Buffer - findCmd := exec.Command("ionice", "-c3", "nice", "-n", "19", "find", dir, "-xdev", "-printf", ".") - findCmd.Stdout, findCmd.Stderr = &counter, &stderr - if err := findCmd.Start(); err != nil { - return 0, fmt.Errorf("failed to exec cmd %v - %v; stderr: %v", findCmd.Args, err, stderr.String()) - } - timer := time.AfterFunc(timeout, func() { - klog.Warningf("Killing cmd %v due to timeout(%s)", findCmd.Args, timeout.String()) - findCmd.Process.Kill() - }) - err := findCmd.Wait() - timer.Stop() - if err != nil { - return 0, fmt.Errorf("cmd %v failed. stderr: %s; err: %v", findCmd.Args, stderr.String(), err) - } - return counter.bytesWritten, nil + return GetDirUsage(dir) } func getVfsStats(path string) (total uint64, free uint64, avail uint64, inodes uint64, inodesFree uint64, err error) { diff --git a/vendor/github.com/google/cadvisor/fs/types.go b/vendor/github.com/google/cadvisor/fs/types.go index 59305819a5a..5074f7132e1 100644 --- a/vendor/github.com/google/cadvisor/fs/types.go +++ b/vendor/github.com/google/cadvisor/fs/types.go @@ -16,7 +16,6 @@ package fs import ( "errors" - "time" ) type DeviceInfo struct { @@ -62,6 +61,11 @@ type DiskStats struct { WeightedIoTime uint64 } +type UsageInfo struct { + Bytes uint64 + Inodes uint64 +} + // ErrNoSuchDevice is the error indicating the requested device does not exist. var ErrNoSuchDevice = errors.New("cadvisor: no such device") @@ -72,11 +76,8 @@ type FsInfo interface { // Returns capacity and free space, in bytes, of the set of mounts passed. GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error) - // Returns number of bytes occupied by 'dir'. - GetDirDiskUsage(dir string, timeout time.Duration) (uint64, error) - - // Returns number of inodes used by 'dir'. - GetDirInodeUsage(dir string, timeout time.Duration) (uint64, error) + // GetDirUsage returns a usage information for 'dir'. + GetDirUsage(dir string) (UsageInfo, error) // GetDeviceInfoByFsUUID returns the information of the device with the // specified filesystem uuid. If no such device exists, this function will diff --git a/vendor/github.com/google/cadvisor/machine/machine.go b/vendor/github.com/google/cadvisor/machine/machine.go index 3a60e2e5c52..d85e38f1939 100644 --- a/vendor/github.com/google/cadvisor/machine/machine.go +++ b/vendor/github.com/google/cadvisor/machine/machine.go @@ -16,12 +16,13 @@ package machine import ( + "bytes" "fmt" "io/ioutil" + "path/filepath" "regexp" "strconv" "strings" - // s390/s390x changes "runtime" @@ -36,9 +37,10 @@ import ( ) var ( - cpuRegExp = regexp.MustCompile(`^processor\s*:\s*([0-9]+)$`) - coreRegExp = regexp.MustCompile(`^core id\s*:\s*([0-9]+)$`) - nodeRegExp = regexp.MustCompile(`^physical id\s*:\s*([0-9]+)$`) + cpuRegExp = regexp.MustCompile(`^processor\s*:\s*([0-9]+)$`) + coreRegExp = regexp.MustCompile(`^core id\s*:\s*([0-9]+)$`) + nodeRegExp = regexp.MustCompile(`^physical id\s*:\s*([0-9]+)$`) + nodeBusRegExp = regexp.MustCompile(`^node([0-9]+)$`) // Power systems have a different format so cater for both cpuClockSpeedMHz = regexp.MustCompile(`(?:cpu MHz|clock)\s*:\s*([0-9]+\.[0-9]+)(?:MHz)?`) memoryCapacityRegexp = regexp.MustCompile(`MemTotal:\s*([0-9]+) kB`) @@ -46,6 +48,7 @@ var ( ) const maxFreqFile = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" +const cpuBusPath = "/sys/bus/cpu/devices/" // GetClockSpeed returns the CPU clock speed, given a []byte formatted as the /proc/cpuinfo file. func GetClockSpeed(procInfo []byte) (uint64, error) { @@ -127,6 +130,67 @@ func parseCapacity(b []byte, r *regexp.Regexp) (uint64, error) { return m * 1024, err } +/* Look for sysfs cpu path containing core_id */ +/* Such as: sys/bus/cpu/devices/cpu0/topology/core_id */ +func getCoreIdFromCpuBus(cpuBusPath string, threadId int) (int, error) { + path := filepath.Join(cpuBusPath, fmt.Sprintf("cpu%d/topology", threadId)) + file := filepath.Join(path, "core_id") + + num, err := ioutil.ReadFile(file) + if err != nil { + return threadId, err + } + + coreId, err := strconv.ParseInt(string(bytes.TrimSpace(num)), 10, 32) + if err != nil { + return threadId, err + } + + if coreId < 0 { + // report threadId if found coreId < 0 + coreId = int64(threadId) + } + + return int(coreId), nil +} + +/* Look for sysfs cpu path containing node id */ +/* Such as: /sys/bus/cpu/devices/cpu0/node%d */ +func getNodeIdFromCpuBus(cpuBusPath string, threadId int) (int, error) { + path := filepath.Join(cpuBusPath, fmt.Sprintf("cpu%d", threadId)) + + files, err := ioutil.ReadDir(path) + if err != nil { + return 0, err + } + + nodeId := 0 + for _, file := range files { + filename := file.Name() + + isNode, error := regexp.MatchString("^node([0-9]+)$", filename) + if error != nil { + continue + } + if !isNode { + continue + } + + ok, val, _ := extractValue(filename, nodeBusRegExp) + if err != nil { + continue + } + if ok { + if val < 0 { + continue + } + nodeId = val + } + } + + return nodeId, nil +} + func GetTopology(sysFs sysfs.SysFs, cpuinfo string) ([]info.Node, int, error) { nodes := []info.Node{} @@ -161,8 +225,36 @@ func GetTopology(sysFs sysfs.SysFs, cpuinfo string) ([]info.Node, int, error) { lastNode = -1 } lastThread = thread + + /* On Arm platform, no 'core id' and 'physical id' in '/proc/cpuinfo'. */ + /* So we search sysfs cpu path directly. */ + /* This method can also be used on other platforms, such as x86, ppc64le... */ + /* /sys/bus/cpu/devices/cpu%d contains the information of 'core_id' & 'node_id'. */ + /* Such as: /sys/bus/cpu/devices/cpu0/topology/core_id */ + /* Such as: /sys/bus/cpu/devices/cpu0/node0 */ + if isAArch64() { + val, err = getCoreIdFromCpuBus(cpuBusPath, lastThread) + if err != nil { + // Report thread id if no NUMA + val = lastThread + } + lastCore = val + + val, err = getNodeIdFromCpuBus(cpuBusPath, lastThread) + if err != nil { + // Report node 0 if no NUMA + val = 0 + } + lastNode = val + } continue } + + if isAArch64() { + /* On Arm platform, no 'core id' and 'physical id' in '/proc/cpuinfo'. */ + continue + } + ok, val, err = extractValue(line, coreRegExp) if err != nil { return nil, -1, fmt.Errorf("could not parse core info from %q: %v", line, err) @@ -171,6 +263,7 @@ func GetTopology(sysFs sysfs.SysFs, cpuinfo string) ([]info.Node, int, error) { lastCore = val continue } + ok, val, err = extractValue(line, nodeRegExp) if err != nil { return nil, -1, fmt.Errorf("could not parse node info from %q: %v", line, err) @@ -180,6 +273,7 @@ func GetTopology(sysFs sysfs.SysFs, cpuinfo string) ([]info.Node, int, error) { continue } } + nodeIdx, err := addNode(&nodes, lastNode) if err != nil { return nil, -1, fmt.Errorf("failed to add node %d: %v", lastNode, err) diff --git a/vendor/github.com/google/cadvisor/manager/manager.go b/vendor/github.com/google/cadvisor/manager/manager.go index 0e73704fe45..1e5931824a2 100644 --- a/vendor/github.com/google/cadvisor/manager/manager.go +++ b/vendor/github.com/google/cadvisor/manager/manager.go @@ -31,8 +31,10 @@ import ( "github.com/google/cadvisor/collector" "github.com/google/cadvisor/container" "github.com/google/cadvisor/container/containerd" + "github.com/google/cadvisor/container/crio" "github.com/google/cadvisor/container/docker" "github.com/google/cadvisor/container/raw" + "github.com/google/cadvisor/container/systemd" "github.com/google/cadvisor/events" "github.com/google/cadvisor/fs" info "github.com/google/cadvisor/info/v1" @@ -51,6 +53,7 @@ import ( ) var globalHousekeepingInterval = flag.Duration("global_housekeeping_interval", 1*time.Minute, "Interval between global housekeepings") +var updateMachineInfoInterval = flag.Duration("update_machine_info_interval", 5*time.Minute, "Interval between machine info updates.") var logCadvisorUsage = flag.Bool("log_cadvisor_usage", false, "Whether to log the usage of the cAdvisor container") var eventStorageAgeLimit = flag.String("event_storage_age_limit", "default=24h", "Max length of time for which to store events (per type). Value is a comma separated list of key values, where the keys are event types (e.g.: creation, oom) or \"default\" and the value is a duration. Default is applied to all non-specified event types") var eventStorageEventLimit = flag.String("event_storage_event_limit", "default=100000", "Max number of events to store (per type). Value is a comma separated list of key values, where the keys are event types (e.g.: creation, oom) or \"default\" and the value is an integer. Default is applied to all non-specified event types") @@ -156,12 +159,24 @@ func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, maxHousekeepingIn // Try to connect to docker indefinitely on startup. dockerStatus = retryDockerStatus() + crioClient, err := crio.Client() + if err != nil { + return nil, err + } + crioInfo, err := crioClient.Info() + if err != nil { + klog.V(5).Infof("CRI-O not connected: %v", err) + } + context := fs.Context{ Docker: fs.DockerContext{ Root: docker.RootDir(), Driver: dockerStatus.Driver, DriverStatus: dockerStatus.DriverStatus, }, + Crio: fs.CrioContext{ + Root: crioInfo.StorageRoot, + }, } fsInfo, err := fs.NewFsInfo(context) if err != nil { @@ -183,6 +198,7 @@ func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, maxHousekeepingIn quitChannels: make([]chan error, 0, 2), memoryCache: memoryCache, fsInfo: fsInfo, + sysFs: sysfs, cadvisorContainer: selfContainer, inHostNamespace: inHostNamespace, startupTime: time.Now(), @@ -252,6 +268,8 @@ type manager struct { containersLock sync.RWMutex memoryCache *memory.InMemoryCache fsInfo fs.FsInfo + sysFs sysfs.SysFs + machineMu sync.RWMutex // protects machineInfo machineInfo info.MachineInfo quitChannels []chan error cadvisorContainer string @@ -281,6 +299,16 @@ func (self *manager) Start() error { klog.V(5).Infof("Registration of the containerd container factory failed: %v", err) } + err = crio.Register(self, self.fsInfo, self.includedMetrics) + if err != nil { + klog.V(5).Infof("Registration of the crio container factory failed: %v", err) + } + + err = systemd.Register(self, self.fsInfo, self.includedMetrics) + if err != nil { + klog.V(5).Infof("Registration of the systemd container factory failed: %v", err) + } + err = raw.Register(self, self.fsInfo, self.includedMetrics, self.rawContainerCgroupPathPrefixWhiteList) if err != nil { klog.Errorf("Registration of the raw container factory failed: %v", err) @@ -331,6 +359,10 @@ func (self *manager) Start() error { self.quitChannels = append(self.quitChannels, quitGlobalHousekeeping) go self.globalHousekeeping(quitGlobalHousekeeping) + quitUpdateMachineInfo := make(chan error) + self.quitChannels = append(self.quitChannels, quitUpdateMachineInfo) + go self.updateMachineInfo(quitUpdateMachineInfo) + return nil } @@ -351,6 +383,28 @@ func (self *manager) Stop() error { return nil } +func (self *manager) updateMachineInfo(quit chan error) { + ticker := time.NewTicker(*updateMachineInfoInterval) + for { + select { + case <-ticker.C: + info, err := machine.Info(self.sysFs, self.fsInfo, self.inHostNamespace) + if err != nil { + klog.Errorf("Could not get machine info: %v", err) + break + } + self.machineMu.Lock() + self.machineInfo = *info + self.machineMu.Unlock() + klog.V(5).Infof("Update machine info: %+v", *info) + case <-quit: + ticker.Stop() + quit <- nil + return + } + } +} + func (self *manager) globalHousekeeping(quit chan error) { // Long housekeeping is either 100ms or half of the housekeeping interval. longHousekeeping := 100 * time.Millisecond @@ -450,7 +504,9 @@ func (self *manager) getAdjustedSpec(cinfo *containerInfo) info.ContainerSpec { if spec.HasMemory { // Memory.Limit is 0 means there's no limit if spec.Memory.Limit == 0 { + self.machineMu.RLock() spec.Memory.Limit = uint64(self.machineInfo.MemoryCapacity) + self.machineMu.RUnlock() } } return spec @@ -783,6 +839,8 @@ func (self *manager) GetFsInfo(label string) ([]v2.FsInfo, error) { } func (m *manager) GetMachineInfo() (*info.MachineInfo, error) { + m.machineMu.RLock() + defer m.machineMu.RUnlock() // Copy and return the MachineInfo. return &m.machineInfo, nil } diff --git a/vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go b/vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go index 76983cbe00f..9dee46b6584 100644 --- a/vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go +++ b/vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go @@ -45,7 +45,7 @@ type rawContainerWatcher struct { } func NewRawContainerWatcher() (watcher.ContainerWatcher, error) { - cgroupSubsystems, err := libcontainer.GetCgroupSubsystems() + cgroupSubsystems, err := libcontainer.GetAllCgroupSubsystems() if err != nil { return nil, fmt.Errorf("failed to get cgroup subsystems: %v", err) } diff --git a/vendor/github.com/google/cadvisor/metrics/prometheus.go b/vendor/github.com/google/cadvisor/metrics/prometheus.go index 38502743edc..a74039fdb6a 100644 --- a/vendor/github.com/google/cadvisor/metrics/prometheus.go +++ b/vendor/github.com/google/cadvisor/metrics/prometheus.go @@ -21,7 +21,6 @@ import ( "github.com/google/cadvisor/container" info "github.com/google/cadvisor/info/v1" - "github.com/prometheus/client_golang/prometheus" "k8s.io/klog" ) @@ -40,8 +39,9 @@ type infoProvider interface { // metricValue describes a single metric value for a given set of label values // within a parent containerMetric. type metricValue struct { - value float64 - labels []string + value float64 + labels []string + timestamp time.Time } type metricValues []metricValue @@ -55,30 +55,35 @@ func asNanosecondsToSeconds(v uint64) float64 { } // fsValues is a helper method for assembling per-filesystem stats. -func fsValues(fsStats []info.FsStats, valueFn func(*info.FsStats) float64) metricValues { +func fsValues(fsStats []info.FsStats, valueFn func(*info.FsStats) float64, timestamp time.Time) metricValues { values := make(metricValues, 0, len(fsStats)) for _, stat := range fsStats { values = append(values, metricValue{ - value: valueFn(&stat), - labels: []string{stat.Device}, + value: valueFn(&stat), + labels: []string{stat.Device}, + timestamp: timestamp, }) } return values } // ioValues is a helper method for assembling per-disk and per-filesystem stats. -func ioValues(ioStats []info.PerDiskStats, ioType string, ioValueFn func(uint64) float64, fsStats []info.FsStats, valueFn func(*info.FsStats) float64) metricValues { +func ioValues(ioStats []info.PerDiskStats, ioType string, ioValueFn func(uint64) float64, + fsStats []info.FsStats, valueFn func(*info.FsStats) float64, timestamp time.Time) metricValues { + values := make(metricValues, 0, len(ioStats)+len(fsStats)) for _, stat := range ioStats { values = append(values, metricValue{ - value: ioValueFn(stat.Stats[ioType]), - labels: []string{stat.Device}, + value: ioValueFn(stat.Stats[ioType]), + labels: []string{stat.Device}, + timestamp: timestamp, }) } for _, stat := range fsStats { values = append(values, metricValue{ - value: valueFn(&stat), - labels: []string{stat.Device}, + value: valueFn(&stat), + labels: []string{stat.Device}, + timestamp: timestamp, }) } return values @@ -134,7 +139,10 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Last time a container was seen by the exporter", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(time.Now().Unix())}} + return metricValues{{ + value: float64(time.Now().Unix()), + timestamp: time.Now(), + }} }, }, }, @@ -147,14 +155,24 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Cumulative user cpu time consumed in seconds.", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.Usage.User) / float64(time.Second)}} + return metricValues{ + { + value: float64(s.Cpu.Usage.User) / float64(time.Second), + timestamp: s.Timestamp, + }, + } }, }, { name: "container_cpu_system_seconds_total", help: "Cumulative system cpu time consumed in seconds.", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.Usage.System) / float64(time.Second)}} + return metricValues{ + { + value: float64(s.Cpu.Usage.System) / float64(time.Second), + timestamp: s.Timestamp, + }, + } }, }, { name: "container_cpu_usage_seconds_total", @@ -165,8 +183,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri if len(s.Cpu.Usage.PerCpu) == 0 { if s.Cpu.Usage.Total > 0 { return metricValues{{ - value: float64(s.Cpu.Usage.Total) / float64(time.Second), - labels: []string{"total"}, + value: float64(s.Cpu.Usage.Total) / float64(time.Second), + labels: []string{"total"}, + timestamp: s.Timestamp, }} } } @@ -174,8 +193,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri for i, value := range s.Cpu.Usage.PerCpu { if value > 0 { values = append(values, metricValue{ - value: float64(value) / float64(time.Second), - labels: []string{fmt.Sprintf("cpu%02d", i)}, + value: float64(value) / float64(time.Second), + labels: []string{fmt.Sprintf("cpu%02d", i)}, + timestamp: s.Timestamp, }) } } @@ -187,7 +207,11 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri valueType: prometheus.CounterValue, condition: func(s info.ContainerSpec) bool { return s.Cpu.Quota != 0 }, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.CFS.Periods)}} + return metricValues{ + { + value: float64(s.Cpu.CFS.Periods), + timestamp: s.Timestamp, + }} }, }, { name: "container_cpu_cfs_throttled_periods_total", @@ -195,7 +219,11 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri valueType: prometheus.CounterValue, condition: func(s info.ContainerSpec) bool { return s.Cpu.Quota != 0 }, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.CFS.ThrottledPeriods)}} + return metricValues{ + { + value: float64(s.Cpu.CFS.ThrottledPeriods), + timestamp: s.Timestamp, + }} }, }, { name: "container_cpu_cfs_throttled_seconds_total", @@ -203,7 +231,11 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri valueType: prometheus.CounterValue, condition: func(s info.ContainerSpec) bool { return s.Cpu.Quota != 0 }, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.CFS.ThrottledTime) / float64(time.Second)}} + return metricValues{ + { + value: float64(s.Cpu.CFS.ThrottledTime) / float64(time.Second), + timestamp: s.Timestamp, + }} }, }, }...) @@ -215,21 +247,30 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Time duration the processes of the container have run on the CPU.", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.Schedstat.RunTime) / float64(time.Second)}} + return metricValues{{ + value: float64(s.Cpu.Schedstat.RunTime) / float64(time.Second), + timestamp: s.Timestamp, + }} }, }, { name: "container_cpu_schedstat_runqueue_seconds_total", help: "Time duration processes of the container have been waiting on a runqueue.", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.Schedstat.RunqueueTime) / float64(time.Second)}} + return metricValues{{ + value: float64(s.Cpu.Schedstat.RunqueueTime) / float64(time.Second), + timestamp: s.Timestamp, + }} }, }, { name: "container_cpu_schedstat_run_periods_total", help: "Number of times processes of the cgroup have run on the cpu", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.Schedstat.RunPeriods)}} + return metricValues{{ + value: float64(s.Cpu.Schedstat.RunPeriods), + timestamp: s.Timestamp, + }} }, }, }...) @@ -241,7 +282,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Value of container cpu load average over the last 10 seconds.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Cpu.LoadAverage)}} + return metricValues{{value: float64(s.Cpu.LoadAverage), timestamp: s.Timestamp}} }, }, { name: "container_tasks_state", @@ -251,24 +292,29 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return metricValues{ { - value: float64(s.TaskStats.NrSleeping), - labels: []string{"sleeping"}, + value: float64(s.TaskStats.NrSleeping), + labels: []string{"sleeping"}, + timestamp: s.Timestamp, }, { - value: float64(s.TaskStats.NrRunning), - labels: []string{"running"}, + value: float64(s.TaskStats.NrRunning), + labels: []string{"running"}, + timestamp: s.Timestamp, }, { - value: float64(s.TaskStats.NrStopped), - labels: []string{"stopped"}, + value: float64(s.TaskStats.NrStopped), + labels: []string{"stopped"}, + timestamp: s.Timestamp, }, { - value: float64(s.TaskStats.NrUninterruptible), - labels: []string{"uninterruptible"}, + value: float64(s.TaskStats.NrUninterruptible), + labels: []string{"uninterruptible"}, + timestamp: s.Timestamp, }, { - value: float64(s.TaskStats.NrIoWait), - labels: []string{"iowaiting"}, + value: float64(s.TaskStats.NrIoWait), + labels: []string{"iowaiting"}, + timestamp: s.Timestamp, }, } }, @@ -282,42 +328,45 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Number of bytes of page cache memory.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.Cache)}} + return metricValues{{value: float64(s.Memory.Cache), timestamp: s.Timestamp}} }, }, { name: "container_memory_rss", help: "Size of RSS in bytes.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.RSS)}} + return metricValues{{value: float64(s.Memory.RSS), timestamp: s.Timestamp}} }, }, { name: "container_memory_mapped_file", help: "Size of memory mapped files in bytes.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.MappedFile)}} + return metricValues{{value: float64(s.Memory.MappedFile), timestamp: s.Timestamp}} }, }, { name: "container_memory_swap", help: "Container swap usage in bytes.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.Swap)}} + return metricValues{{value: float64(s.Memory.Swap), timestamp: s.Timestamp}} }, }, { name: "container_memory_failcnt", help: "Number of memory usage hits limits", valueType: prometheus.CounterValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.Failcnt)}} + return metricValues{{ + value: float64(s.Memory.Failcnt), + timestamp: s.Timestamp, + }} }, }, { name: "container_memory_usage_bytes", help: "Current memory usage in bytes, including all memory regardless of when it was accessed", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.Usage)}} + return metricValues{{value: float64(s.Memory.Usage), timestamp: s.Timestamp}} }, }, { @@ -325,14 +374,14 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Maximum memory usage recorded in bytes", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.MaxUsage)}} + return metricValues{{value: float64(s.Memory.MaxUsage), timestamp: s.Timestamp}} }, }, { name: "container_memory_working_set_bytes", help: "Current working set in bytes.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Memory.WorkingSet)}} + return metricValues{{value: float64(s.Memory.WorkingSet), timestamp: s.Timestamp}} }, }, { name: "container_memory_failures_total", @@ -342,20 +391,24 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return metricValues{ { - value: float64(s.Memory.ContainerData.Pgfault), - labels: []string{"pgfault", "container"}, + value: float64(s.Memory.ContainerData.Pgfault), + labels: []string{"pgfault", "container"}, + timestamp: s.Timestamp, }, { - value: float64(s.Memory.ContainerData.Pgmajfault), - labels: []string{"pgmajfault", "container"}, + value: float64(s.Memory.ContainerData.Pgmajfault), + labels: []string{"pgmajfault", "container"}, + timestamp: s.Timestamp, }, { - value: float64(s.Memory.HierarchicalData.Pgfault), - labels: []string{"pgfault", "hierarchy"}, + value: float64(s.Memory.HierarchicalData.Pgfault), + labels: []string{"pgfault", "hierarchy"}, + timestamp: s.Timestamp, }, { - value: float64(s.Memory.HierarchicalData.Pgmajfault), - labels: []string{"pgmajfault", "hierarchy"}, + value: float64(s.Memory.HierarchicalData.Pgmajfault), + labels: []string{"pgmajfault", "hierarchy"}, + timestamp: s.Timestamp, }, } }, @@ -373,8 +426,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Accelerators)) for _, value := range s.Accelerators { values = append(values, metricValue{ - value: float64(value.MemoryTotal), - labels: []string{value.Make, value.Model, value.ID}, + value: float64(value.MemoryTotal), + labels: []string{value.Make, value.Model, value.ID}, + timestamp: s.Timestamp, }) } return values @@ -388,8 +442,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Accelerators)) for _, value := range s.Accelerators { values = append(values, metricValue{ - value: float64(value.MemoryUsed), - labels: []string{value.Make, value.Model, value.ID}, + value: float64(value.MemoryUsed), + labels: []string{value.Make, value.Model, value.ID}, + timestamp: s.Timestamp, }) } return values @@ -403,8 +458,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Accelerators)) for _, value := range s.Accelerators { values = append(values, metricValue{ - value: float64(value.DutyCycle), - labels: []string{value.Make, value.Model, value.ID}, + value: float64(value.DutyCycle), + labels: []string{value.Make, value.Model, value.ID}, + timestamp: s.Timestamp, }) } return values @@ -422,7 +478,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return fsValues(s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.InodesFree) - }) + }, s.Timestamp) }, }, { name: "container_fs_inodes_total", @@ -432,7 +488,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return fsValues(s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.Inodes) - }) + }, s.Timestamp) }, }, { name: "container_fs_limit_bytes", @@ -442,7 +498,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return fsValues(s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.Limit) - }) + }, s.Timestamp) }, }, { name: "container_fs_usage_bytes", @@ -452,7 +508,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return fsValues(s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.Usage) - }) + }, s.Timestamp) }, }, }...) @@ -468,6 +524,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri return ioValues( s.DiskIo.IoServiceBytes, "Read", asFloat64, nil, nil, + s.Timestamp, ) }, }, { @@ -481,6 +538,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.ReadsCompleted) }, + s.Timestamp, ) }, }, { @@ -494,6 +552,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.SectorsRead) }, + s.Timestamp, ) }, }, { @@ -507,6 +566,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.ReadsMerged) }, + s.Timestamp, ) }, }, { @@ -520,6 +580,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.ReadTime) / float64(time.Second) }, + s.Timestamp, ) }, }, { @@ -531,6 +592,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri return ioValues( s.DiskIo.IoServiceBytes, "Write", asFloat64, nil, nil, + s.Timestamp, ) }, }, { @@ -544,6 +606,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.WritesCompleted) }, + s.Timestamp, ) }, }, { @@ -557,6 +620,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.SectorsWritten) }, + s.Timestamp, ) }, }, { @@ -570,6 +634,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.WritesMerged) }, + s.Timestamp, ) }, }, { @@ -583,6 +648,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.WriteTime) / float64(time.Second) }, + s.Timestamp, ) }, }, { @@ -596,6 +662,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.IoInProgress) }, + s.Timestamp, ) }, }, { @@ -609,6 +676,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri s.Filesystem, func(fs *info.FsStats) float64 { return float64(float64(fs.IoTime) / float64(time.Second)) }, + s.Timestamp, ) }, }, { @@ -619,7 +687,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return fsValues(s.Filesystem, func(fs *info.FsStats) float64 { return float64(fs.WeightedIoTime) / float64(time.Second) - }) + }, s.Timestamp) }, }, }...) @@ -635,8 +703,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.RxBytes), - labels: []string{value.Name}, + value: float64(value.RxBytes), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -650,8 +719,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.RxPackets), - labels: []string{value.Name}, + value: float64(value.RxPackets), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -665,8 +735,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.RxDropped), - labels: []string{value.Name}, + value: float64(value.RxDropped), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -680,8 +751,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.RxErrors), - labels: []string{value.Name}, + value: float64(value.RxErrors), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -695,8 +767,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.TxBytes), - labels: []string{value.Name}, + value: float64(value.TxBytes), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -710,8 +783,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.TxPackets), - labels: []string{value.Name}, + value: float64(value.TxPackets), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -725,8 +799,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.TxDropped), - labels: []string{value.Name}, + value: float64(value.TxDropped), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -740,8 +815,9 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri values := make(metricValues, 0, len(s.Network.Interfaces)) for _, value := range s.Network.Interfaces { values = append(values, metricValue{ - value: float64(value.TxErrors), - labels: []string{value.Name}, + value: float64(value.TxErrors), + labels: []string{value.Name}, + timestamp: s.Timestamp, }) } return values @@ -759,48 +835,126 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return metricValues{ { - value: float64(s.Network.Tcp.Established), - labels: []string{"established"}, + value: float64(s.Network.Tcp.Established), + labels: []string{"established"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.SynSent), - labels: []string{"synsent"}, + value: float64(s.Network.Tcp.SynSent), + labels: []string{"synsent"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.SynRecv), - labels: []string{"synrecv"}, + value: float64(s.Network.Tcp.SynRecv), + labels: []string{"synrecv"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.FinWait1), - labels: []string{"finwait1"}, + value: float64(s.Network.Tcp.FinWait1), + labels: []string{"finwait1"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.FinWait2), - labels: []string{"finwait2"}, + value: float64(s.Network.Tcp.FinWait2), + labels: []string{"finwait2"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.TimeWait), - labels: []string{"timewait"}, + value: float64(s.Network.Tcp.TimeWait), + labels: []string{"timewait"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.Close), - labels: []string{"close"}, + value: float64(s.Network.Tcp.Close), + labels: []string{"close"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.CloseWait), - labels: []string{"closewait"}, + value: float64(s.Network.Tcp.CloseWait), + labels: []string{"closewait"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.LastAck), - labels: []string{"lastack"}, + value: float64(s.Network.Tcp.LastAck), + labels: []string{"lastack"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.Listen), - labels: []string{"listen"}, + value: float64(s.Network.Tcp.Listen), + labels: []string{"listen"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Tcp.Closing), - labels: []string{"closing"}, + value: float64(s.Network.Tcp.Closing), + labels: []string{"closing"}, + timestamp: s.Timestamp, + }, + } + }, + }, + }...) + c.containerMetrics = append(c.containerMetrics, []containerMetric{ + { + name: "container_network_tcp6_usage_total", + help: "tcp6 connection usage statistic for container", + valueType: prometheus.GaugeValue, + extraLabels: []string{"tcp_state"}, + getValues: func(s *info.ContainerStats) metricValues { + return metricValues{ + { + value: float64(s.Network.Tcp6.Established), + labels: []string{"established"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.SynSent), + labels: []string{"synsent"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.SynRecv), + labels: []string{"synrecv"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.FinWait1), + labels: []string{"finwait1"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.FinWait2), + labels: []string{"finwait2"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.TimeWait), + labels: []string{"timewait"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.Close), + labels: []string{"close"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.CloseWait), + labels: []string{"closewait"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.LastAck), + labels: []string{"lastack"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.Listen), + labels: []string{"listen"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Tcp6.Closing), + labels: []string{"closing"}, + timestamp: s.Timestamp, }, } }, @@ -808,6 +962,38 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri }...) } if includedMetrics.Has(container.NetworkUdpUsageMetrics) { + c.containerMetrics = append(c.containerMetrics, []containerMetric{ + { + name: "container_network_udp6_usage_total", + help: "udp6 connection usage statistic for container", + valueType: prometheus.GaugeValue, + extraLabels: []string{"udp_state"}, + getValues: func(s *info.ContainerStats) metricValues { + return metricValues{ + { + value: float64(s.Network.Udp6.Listen), + labels: []string{"listen"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Udp6.Dropped), + labels: []string{"dropped"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Udp6.RxQueued), + labels: []string{"rxqueued"}, + timestamp: s.Timestamp, + }, + { + value: float64(s.Network.Udp6.TxQueued), + labels: []string{"txqueued"}, + timestamp: s.Timestamp, + }, + } + }, + }, + }...) c.containerMetrics = append(c.containerMetrics, []containerMetric{ { name: "container_network_udp_usage_total", @@ -817,20 +1003,24 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return metricValues{ { - value: float64(s.Network.Udp.Listen), - labels: []string{"listen"}, + value: float64(s.Network.Udp.Listen), + labels: []string{"listen"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Udp.Dropped), - labels: []string{"dropped"}, + value: float64(s.Network.Udp.Dropped), + labels: []string{"dropped"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Udp.RxQueued), - labels: []string{"rxqueued"}, + value: float64(s.Network.Udp.RxQueued), + labels: []string{"rxqueued"}, + timestamp: s.Timestamp, }, { - value: float64(s.Network.Udp.TxQueued), - labels: []string{"txqueued"}, + value: float64(s.Network.Udp.TxQueued), + labels: []string{"txqueued"}, + timestamp: s.Timestamp, }, } }, @@ -844,7 +1034,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Number of processes running inside the container.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Processes.ProcessCount)}} + return metricValues{{value: float64(s.Processes.ProcessCount), timestamp: s.Timestamp}} }, }, { @@ -852,7 +1042,7 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri help: "Number of open file descriptors for the container.", valueType: prometheus.GaugeValue, getValues: func(s *info.ContainerStats) metricValues { - return metricValues{{value: float64(s.Processes.FdCount)}} + return metricValues{{value: float64(s.Processes.FdCount), timestamp: s.Timestamp}} }, }, }...) @@ -922,17 +1112,29 @@ func DefaultContainerLabels(container *info.ContainerInfo) map[string]string { return set } -// BaseContainerLabels implements ContainerLabelsFunc. It only exports the -// container name, first alias, and image name. -func BaseContainerLabels(container *info.ContainerInfo) map[string]string { - set := map[string]string{LabelID: container.Name} - if len(container.Aliases) > 0 { - set[LabelName] = container.Aliases[0] +// BaseContainerLabels returns a ContainerLabelsFunc that exports the container +// name, first alias, image name as well as white listed label values. +func BaseContainerLabels(whiteList []string) func(container *info.ContainerInfo) map[string]string { + whiteListMap := make(map[string]struct{}, len(whiteList)) + for _, k := range whiteList { + whiteListMap[k] = struct{}{} } - if image := container.Spec.Image; len(image) > 0 { - set[LabelImage] = image + + return func(container *info.ContainerInfo) map[string]string { + set := map[string]string{LabelID: container.Name} + if len(container.Aliases) > 0 { + set[LabelName] = container.Aliases[0] + } + if image := container.Spec.Image; len(image) > 0 { + set[LabelImage] = image + } + for k, v := range container.Spec.Labels { + if _, ok := whiteListMap[k]; ok { + set[ContainerLabelPrefix+k] = v + } + } + return set } - return set } func (c *PrometheusCollector) collectContainersInfo(ch chan<- prometheus.Metric) { @@ -993,7 +1195,10 @@ func (c *PrometheusCollector) collectContainersInfo(ch chan<- prometheus.Metric) } desc := cm.desc(labels) for _, metricValue := range cm.getValues(stats) { - ch <- prometheus.MustNewConstMetric(desc, cm.valueType, float64(metricValue.value), append(values, metricValue.labels...)...) + ch <- prometheus.NewMetricWithTimestamp( + metricValue.timestamp, + prometheus.MustNewConstMetric(desc, cm.valueType, float64(metricValue.value), append(values, metricValue.labels...)...), + ) } } } diff --git a/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go b/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go index 039baa30bee..ea50c46308a 100644 --- a/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go +++ b/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go @@ -101,8 +101,9 @@ func (self *OomParser) StreamOoms(outStream chan<- *OomInstance) { in_oom_kernel_log := checkIfStartOfOomMessages(msg.Message) if in_oom_kernel_log { oomCurrentInstance := &OomInstance{ - ContainerName: "/", - TimeOfDeath: msg.Timestamp, + ContainerName: "/", + VictimContainerName: "/", + TimeOfDeath: msg.Timestamp, } for msg := range kmsgEntries { err := getContainerName(msg.Message, oomCurrentInstance) diff --git a/vendor/github.com/hashicorp/golang-lru/2q.go b/vendor/github.com/hashicorp/golang-lru/2q.go index 337d963296c..e474cd07581 100644 --- a/vendor/github.com/hashicorp/golang-lru/2q.go +++ b/vendor/github.com/hashicorp/golang-lru/2q.go @@ -30,9 +30,9 @@ type TwoQueueCache struct { size int recentSize int - recent *simplelru.LRU - frequent *simplelru.LRU - recentEvict *simplelru.LRU + recent simplelru.LRUCache + frequent simplelru.LRUCache + recentEvict simplelru.LRUCache lock sync.RWMutex } @@ -84,7 +84,8 @@ func New2QParams(size int, recentRatio float64, ghostRatio float64) (*TwoQueueCa return c, nil } -func (c *TwoQueueCache) Get(key interface{}) (interface{}, bool) { +// Get looks up a key's value from the cache. +func (c *TwoQueueCache) Get(key interface{}) (value interface{}, ok bool) { c.lock.Lock() defer c.lock.Unlock() @@ -105,6 +106,7 @@ func (c *TwoQueueCache) Get(key interface{}) (interface{}, bool) { return nil, false } +// Add adds a value to the cache. func (c *TwoQueueCache) Add(key, value interface{}) { c.lock.Lock() defer c.lock.Unlock() @@ -160,12 +162,15 @@ func (c *TwoQueueCache) ensureSpace(recentEvict bool) { c.frequent.RemoveOldest() } +// Len returns the number of items in the cache. func (c *TwoQueueCache) Len() int { c.lock.RLock() defer c.lock.RUnlock() return c.recent.Len() + c.frequent.Len() } +// Keys returns a slice of the keys in the cache. +// The frequently used keys are first in the returned slice. func (c *TwoQueueCache) Keys() []interface{} { c.lock.RLock() defer c.lock.RUnlock() @@ -174,6 +179,7 @@ func (c *TwoQueueCache) Keys() []interface{} { return append(k1, k2...) } +// Remove removes the provided key from the cache. func (c *TwoQueueCache) Remove(key interface{}) { c.lock.Lock() defer c.lock.Unlock() @@ -188,6 +194,7 @@ func (c *TwoQueueCache) Remove(key interface{}) { } } +// Purge is used to completely clear the cache. func (c *TwoQueueCache) Purge() { c.lock.Lock() defer c.lock.Unlock() @@ -196,13 +203,17 @@ func (c *TwoQueueCache) Purge() { c.recentEvict.Purge() } +// Contains is used to check if the cache contains a key +// without updating recency or frequency. func (c *TwoQueueCache) Contains(key interface{}) bool { c.lock.RLock() defer c.lock.RUnlock() return c.frequent.Contains(key) || c.recent.Contains(key) } -func (c *TwoQueueCache) Peek(key interface{}) (interface{}, bool) { +// Peek is used to inspect the cache value of a key +// without updating recency or frequency. +func (c *TwoQueueCache) Peek(key interface{}) (value interface{}, ok bool) { c.lock.RLock() defer c.lock.RUnlock() if val, ok := c.frequent.Peek(key); ok { diff --git a/vendor/github.com/hashicorp/golang-lru/arc.go b/vendor/github.com/hashicorp/golang-lru/arc.go index a2a25281733..555225a218c 100644 --- a/vendor/github.com/hashicorp/golang-lru/arc.go +++ b/vendor/github.com/hashicorp/golang-lru/arc.go @@ -18,11 +18,11 @@ type ARCCache struct { size int // Size is the total capacity of the cache p int // P is the dynamic preference towards T1 or T2 - t1 *simplelru.LRU // T1 is the LRU for recently accessed items - b1 *simplelru.LRU // B1 is the LRU for evictions from t1 + t1 simplelru.LRUCache // T1 is the LRU for recently accessed items + b1 simplelru.LRUCache // B1 is the LRU for evictions from t1 - t2 *simplelru.LRU // T2 is the LRU for frequently accessed items - b2 *simplelru.LRU // B2 is the LRU for evictions from t2 + t2 simplelru.LRUCache // T2 is the LRU for frequently accessed items + b2 simplelru.LRUCache // B2 is the LRU for evictions from t2 lock sync.RWMutex } @@ -60,11 +60,11 @@ func NewARC(size int) (*ARCCache, error) { } // Get looks up a key's value from the cache. -func (c *ARCCache) Get(key interface{}) (interface{}, bool) { +func (c *ARCCache) Get(key interface{}) (value interface{}, ok bool) { c.lock.Lock() defer c.lock.Unlock() - // Ff the value is contained in T1 (recent), then + // If the value is contained in T1 (recent), then // promote it to T2 (frequent) if val, ok := c.t1.Peek(key); ok { c.t1.Remove(key) @@ -153,7 +153,7 @@ func (c *ARCCache) Add(key, value interface{}) { // Remove from B2 c.b2.Remove(key) - // Add the key to the frequntly used list + // Add the key to the frequently used list c.t2.Add(key, value) return } @@ -247,7 +247,7 @@ func (c *ARCCache) Contains(key interface{}) bool { // Peek is used to inspect the cache value of a key // without updating recency or frequency. -func (c *ARCCache) Peek(key interface{}) (interface{}, bool) { +func (c *ARCCache) Peek(key interface{}) (value interface{}, ok bool) { c.lock.RLock() defer c.lock.RUnlock() if val, ok := c.t1.Peek(key); ok { diff --git a/vendor/github.com/hashicorp/golang-lru/doc.go b/vendor/github.com/hashicorp/golang-lru/doc.go new file mode 100644 index 00000000000..2547df979d0 --- /dev/null +++ b/vendor/github.com/hashicorp/golang-lru/doc.go @@ -0,0 +1,21 @@ +// Package lru provides three different LRU caches of varying sophistication. +// +// Cache is a simple LRU cache. It is based on the +// LRU implementation in groupcache: +// https://github.com/golang/groupcache/tree/master/lru +// +// TwoQueueCache tracks frequently used and recently used entries separately. +// This avoids a burst of accesses from taking out frequently used entries, +// at the cost of about 2x computational overhead and some extra bookkeeping. +// +// ARCCache is an adaptive replacement cache. It tracks recent evictions as +// well as recent usage in both the frequent and recent caches. Its +// computational overhead is comparable to TwoQueueCache, but the memory +// overhead is linear with the size of the cache. +// +// ARC has been patented by IBM, so do not use it if that is problematic for +// your program. +// +// All caches in this package take locks while operating, and are therefore +// thread-safe for consumers. +package lru diff --git a/vendor/github.com/hashicorp/golang-lru/go.mod b/vendor/github.com/hashicorp/golang-lru/go.mod new file mode 100644 index 00000000000..824cb97e834 --- /dev/null +++ b/vendor/github.com/hashicorp/golang-lru/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/golang-lru diff --git a/vendor/github.com/hashicorp/golang-lru/lru.go b/vendor/github.com/hashicorp/golang-lru/lru.go index a6285f989e0..c8d9b0a230f 100644 --- a/vendor/github.com/hashicorp/golang-lru/lru.go +++ b/vendor/github.com/hashicorp/golang-lru/lru.go @@ -1,6 +1,3 @@ -// This package provides a simple LRU cache. It is based on the -// LRU implementation in groupcache: -// https://github.com/golang/groupcache/tree/master/lru package lru import ( @@ -11,11 +8,11 @@ import ( // Cache is a thread-safe fixed size LRU cache. type Cache struct { - lru *simplelru.LRU + lru simplelru.LRUCache lock sync.RWMutex } -// New creates an LRU of the given size +// New creates an LRU of the given size. func New(size int) (*Cache, error) { return NewWithEvict(size, nil) } @@ -33,7 +30,7 @@ func NewWithEvict(size int, onEvicted func(key interface{}, value interface{})) return c, nil } -// Purge is used to completely clear the cache +// Purge is used to completely clear the cache. func (c *Cache) Purge() { c.lock.Lock() c.lru.Purge() @@ -41,30 +38,30 @@ func (c *Cache) Purge() { } // Add adds a value to the cache. Returns true if an eviction occurred. -func (c *Cache) Add(key, value interface{}) bool { +func (c *Cache) Add(key, value interface{}) (evicted bool) { c.lock.Lock() defer c.lock.Unlock() return c.lru.Add(key, value) } // Get looks up a key's value from the cache. -func (c *Cache) Get(key interface{}) (interface{}, bool) { +func (c *Cache) Get(key interface{}) (value interface{}, ok bool) { c.lock.Lock() defer c.lock.Unlock() return c.lru.Get(key) } -// Check if a key is in the cache, without updating the recent-ness -// or deleting it for being stale. +// Contains checks if a key is in the cache, without updating the +// recent-ness or deleting it for being stale. func (c *Cache) Contains(key interface{}) bool { c.lock.RLock() defer c.lock.RUnlock() return c.lru.Contains(key) } -// Returns the key value (or undefined if not found) without updating +// Peek returns the key value (or undefined if not found) without updating // the "recently used"-ness of the key. -func (c *Cache) Peek(key interface{}) (interface{}, bool) { +func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) { c.lock.RLock() defer c.lock.RUnlock() return c.lru.Peek(key) @@ -73,16 +70,15 @@ func (c *Cache) Peek(key interface{}) (interface{}, bool) { // ContainsOrAdd checks if a key is in the cache without updating the // recent-ness or deleting it for being stale, and if not, adds the value. // Returns whether found and whether an eviction occurred. -func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evict bool) { +func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) { c.lock.Lock() defer c.lock.Unlock() if c.lru.Contains(key) { return true, false - } else { - evict := c.lru.Add(key, value) - return false, evict } + evicted = c.lru.Add(key, value) + return false, evicted } // Remove removes the provided key from the cache. diff --git a/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go b/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go index 68d097a1c06..5673773b22b 100644 --- a/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go +++ b/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go @@ -36,7 +36,7 @@ func NewLRU(size int, onEvict EvictCallback) (*LRU, error) { return c, nil } -// Purge is used to completely clear the cache +// Purge is used to completely clear the cache. func (c *LRU) Purge() { for k, v := range c.items { if c.onEvict != nil { @@ -47,8 +47,8 @@ func (c *LRU) Purge() { c.evictList.Init() } -// Add adds a value to the cache. Returns true if an eviction occured. -func (c *LRU) Add(key, value interface{}) bool { +// Add adds a value to the cache. Returns true if an eviction occurred. +func (c *LRU) Add(key, value interface{}) (evicted bool) { // Check for existing item if ent, ok := c.items[key]; ok { c.evictList.MoveToFront(ent) @@ -78,17 +78,18 @@ func (c *LRU) Get(key interface{}) (value interface{}, ok bool) { return } -// Check if a key is in the cache, without updating the recent-ness +// Contains checks if a key is in the cache, without updating the recent-ness // or deleting it for being stale. func (c *LRU) Contains(key interface{}) (ok bool) { _, ok = c.items[key] return ok } -// Returns the key value (or undefined if not found) without updating +// Peek returns the key value (or undefined if not found) without updating // the "recently used"-ness of the key. func (c *LRU) Peek(key interface{}) (value interface{}, ok bool) { - if ent, ok := c.items[key]; ok { + var ent *list.Element + if ent, ok = c.items[key]; ok { return ent.Value.(*entry).value, true } return nil, ok @@ -96,7 +97,7 @@ func (c *LRU) Peek(key interface{}) (value interface{}, ok bool) { // Remove removes the provided key from the cache, returning if the // key was contained. -func (c *LRU) Remove(key interface{}) bool { +func (c *LRU) Remove(key interface{}) (present bool) { if ent, ok := c.items[key]; ok { c.removeElement(ent) return true @@ -105,7 +106,7 @@ func (c *LRU) Remove(key interface{}) bool { } // RemoveOldest removes the oldest item from the cache. -func (c *LRU) RemoveOldest() (interface{}, interface{}, bool) { +func (c *LRU) RemoveOldest() (key interface{}, value interface{}, ok bool) { ent := c.evictList.Back() if ent != nil { c.removeElement(ent) @@ -116,7 +117,7 @@ func (c *LRU) RemoveOldest() (interface{}, interface{}, bool) { } // GetOldest returns the oldest entry -func (c *LRU) GetOldest() (interface{}, interface{}, bool) { +func (c *LRU) GetOldest() (key interface{}, value interface{}, ok bool) { ent := c.evictList.Back() if ent != nil { kv := ent.Value.(*entry) diff --git a/vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go b/vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go new file mode 100644 index 00000000000..74c7077440c --- /dev/null +++ b/vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go @@ -0,0 +1,36 @@ +package simplelru + +// LRUCache is the interface for simple LRU cache. +type LRUCache interface { + // Adds a value to the cache, returns true if an eviction occurred and + // updates the "recently used"-ness of the key. + Add(key, value interface{}) bool + + // Returns key's value from the cache and + // updates the "recently used"-ness of the key. #value, isFound + Get(key interface{}) (value interface{}, ok bool) + + // Check if a key exsists in cache without updating the recent-ness. + Contains(key interface{}) (ok bool) + + // Returns key's value without updating the "recently used"-ness of the key. + Peek(key interface{}) (value interface{}, ok bool) + + // Removes a key from the cache. + Remove(key interface{}) bool + + // Removes the oldest entry from cache. + RemoveOldest() (interface{}, interface{}, bool) + + // Returns the oldest entry from the cache. #key, value, isFound + GetOldest() (interface{}, interface{}, bool) + + // Returns a slice of the keys in the cache, from oldest to newest. + Keys() []interface{} + + // Returns the number of items in the cache. + Len() int + + // Clear all cache entries + Purge() +} diff --git a/vendor/github.com/ibuildthecloud/kvsql/clientv3/driver/generic.go b/vendor/github.com/ibuildthecloud/kvsql/clientv3/driver/generic.go index f215ef4d48f..7cead0ad7d1 100644 --- a/vendor/github.com/ibuildthecloud/kvsql/clientv3/driver/generic.go +++ b/vendor/github.com/ibuildthecloud/kvsql/clientv3/driver/generic.go @@ -11,7 +11,7 @@ import ( "github.com/ibuildthecloud/kvsql/pkg/broadcast" "github.com/pkg/errors" "github.com/sirupsen/logrus" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) type Generic struct { diff --git a/vendor/github.com/ibuildthecloud/kvsql/clientv3/txn.go b/vendor/github.com/ibuildthecloud/kvsql/clientv3/txn.go index 63972d91114..23c060fd702 100644 --- a/vendor/github.com/ibuildthecloud/kvsql/clientv3/txn.go +++ b/vendor/github.com/ibuildthecloud/kvsql/clientv3/txn.go @@ -21,7 +21,7 @@ import ( pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "golang.org/x/net/context" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) type Txn interface { diff --git a/vendor/github.com/ibuildthecloud/kvsql/factory.go b/vendor/github.com/ibuildthecloud/kvsql/factory.go index 2f132783b1b..9421feae0d0 100644 --- a/vendor/github.com/ibuildthecloud/kvsql/factory.go +++ b/vendor/github.com/ibuildthecloud/kvsql/factory.go @@ -66,7 +66,7 @@ func NewKVSQLHealthCheck(c storagebackend.Config) (func() error, error) { func newETCD3Client(c storagebackend.Config) (*clientv3.Client, error) { cfg := clientv3.Config{ - Endpoints: c.ServerList, + Endpoints: c.Transport.ServerList, } if len(cfg.Endpoints) == 0 { diff --git a/vendor/github.com/ibuildthecloud/kvsql/storage/store.go b/vendor/github.com/ibuildthecloud/kvsql/storage/store.go index cb8aff47f88..d48559c89fb 100644 --- a/vendor/github.com/ibuildthecloud/kvsql/storage/store.go +++ b/vendor/github.com/ibuildthecloud/kvsql/storage/store.go @@ -39,7 +39,7 @@ import ( "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd" "k8s.io/apiserver/pkg/storage/value" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) // authenticatedDataString satisfies the value.Context interface. It uses the key to diff --git a/vendor/github.com/liggitt/tabwriter/.travis.yml b/vendor/github.com/liggitt/tabwriter/.travis.yml new file mode 100644 index 00000000000..2768dc0727e --- /dev/null +++ b/vendor/github.com/liggitt/tabwriter/.travis.yml @@ -0,0 +1,11 @@ +language: go + +go: + - "1.8" + - "1.9" + - "1.10" + - "1.11" + - "1.12" + - master + +script: go test -v ./... diff --git a/vendor/github.com/liggitt/tabwriter/LICENSE b/vendor/github.com/liggitt/tabwriter/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/liggitt/tabwriter/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/liggitt/tabwriter/README.md b/vendor/github.com/liggitt/tabwriter/README.md new file mode 100644 index 00000000000..e75d35672e9 --- /dev/null +++ b/vendor/github.com/liggitt/tabwriter/README.md @@ -0,0 +1,7 @@ +This repo is a drop-in replacement for the golang [text/tabwriter](https://golang.org/pkg/text/tabwriter/) package. + +It is based on that package at [cf2c2ea8](https://github.com/golang/go/tree/cf2c2ea89d09d486bb018b1817c5874388038c3a/src/text/tabwriter) and inherits its license. + +The following additional features are supported: +* `RememberWidths` flag allows remembering maximum widths seen per column even after Flush() is called. +* `RememberedWidths() []int` and `SetRememberedWidths([]int) *Writer` allows obtaining and transferring remembered column width between writers. diff --git a/vendor/github.com/liggitt/tabwriter/tabwriter.go b/vendor/github.com/liggitt/tabwriter/tabwriter.go new file mode 100644 index 00000000000..fd3431fb03d --- /dev/null +++ b/vendor/github.com/liggitt/tabwriter/tabwriter.go @@ -0,0 +1,637 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tabwriter implements a write filter (tabwriter.Writer) that +// translates tabbed columns in input into properly aligned text. +// +// It is a drop-in replacement for the golang text/tabwriter package (https://golang.org/pkg/text/tabwriter), +// based on that package at https://github.com/golang/go/tree/cf2c2ea89d09d486bb018b1817c5874388038c3a +// with support for additional features. +// +// The package is using the Elastic Tabstops algorithm described at +// http://nickgravgaard.com/elastictabstops/index.html. +package tabwriter + +import ( + "io" + "unicode/utf8" +) + +// ---------------------------------------------------------------------------- +// Filter implementation + +// A cell represents a segment of text terminated by tabs or line breaks. +// The text itself is stored in a separate buffer; cell only describes the +// segment's size in bytes, its width in runes, and whether it's an htab +// ('\t') terminated cell. +// +type cell struct { + size int // cell size in bytes + width int // cell width in runes + htab bool // true if the cell is terminated by an htab ('\t') +} + +// A Writer is a filter that inserts padding around tab-delimited +// columns in its input to align them in the output. +// +// The Writer treats incoming bytes as UTF-8-encoded text consisting +// of cells terminated by horizontal ('\t') or vertical ('\v') tabs, +// and newline ('\n') or formfeed ('\f') characters; both newline and +// formfeed act as line breaks. +// +// Tab-terminated cells in contiguous lines constitute a column. The +// Writer inserts padding as needed to make all cells in a column have +// the same width, effectively aligning the columns. It assumes that +// all characters have the same width, except for tabs for which a +// tabwidth must be specified. Column cells must be tab-terminated, not +// tab-separated: non-tab terminated trailing text at the end of a line +// forms a cell but that cell is not part of an aligned column. +// For instance, in this example (where | stands for a horizontal tab): +// +// aaaa|bbb|d +// aa |b |dd +// a | +// aa |cccc|eee +// +// the b and c are in distinct columns (the b column is not contiguous +// all the way). The d and e are not in a column at all (there's no +// terminating tab, nor would the column be contiguous). +// +// The Writer assumes that all Unicode code points have the same width; +// this may not be true in some fonts or if the string contains combining +// characters. +// +// If DiscardEmptyColumns is set, empty columns that are terminated +// entirely by vertical (or "soft") tabs are discarded. Columns +// terminated by horizontal (or "hard") tabs are not affected by +// this flag. +// +// If a Writer is configured to filter HTML, HTML tags and entities +// are passed through. The widths of tags and entities are +// assumed to be zero (tags) and one (entities) for formatting purposes. +// +// A segment of text may be escaped by bracketing it with Escape +// characters. The tabwriter passes escaped text segments through +// unchanged. In particular, it does not interpret any tabs or line +// breaks within the segment. If the StripEscape flag is set, the +// Escape characters are stripped from the output; otherwise they +// are passed through as well. For the purpose of formatting, the +// width of the escaped text is always computed excluding the Escape +// characters. +// +// The formfeed character acts like a newline but it also terminates +// all columns in the current line (effectively calling Flush). Tab- +// terminated cells in the next line start new columns. Unless found +// inside an HTML tag or inside an escaped text segment, formfeed +// characters appear as newlines in the output. +// +// The Writer must buffer input internally, because proper spacing +// of one line may depend on the cells in future lines. Clients must +// call Flush when done calling Write. +// +type Writer struct { + // configuration + output io.Writer + minwidth int + tabwidth int + padding int + padbytes [8]byte + flags uint + + // current state + buf []byte // collected text excluding tabs or line breaks + pos int // buffer position up to which cell.width of incomplete cell has been computed + cell cell // current incomplete cell; cell.width is up to buf[pos] excluding ignored sections + endChar byte // terminating char of escaped sequence (Escape for escapes, '>', ';' for HTML tags/entities, or 0) + lines [][]cell // list of lines; each line is a list of cells + widths []int // list of column widths in runes - re-used during formatting + + maxwidths []int // list of max column widths in runes +} + +// addLine adds a new line. +// flushed is a hint indicating whether the underlying writer was just flushed. +// If so, the previous line is not likely to be a good indicator of the new line's cells. +func (b *Writer) addLine(flushed bool) { + // Grow slice instead of appending, + // as that gives us an opportunity + // to re-use an existing []cell. + if n := len(b.lines) + 1; n <= cap(b.lines) { + b.lines = b.lines[:n] + b.lines[n-1] = b.lines[n-1][:0] + } else { + b.lines = append(b.lines, nil) + } + + if !flushed { + // The previous line is probably a good indicator + // of how many cells the current line will have. + // If the current line's capacity is smaller than that, + // abandon it and make a new one. + if n := len(b.lines); n >= 2 { + if prev := len(b.lines[n-2]); prev > cap(b.lines[n-1]) { + b.lines[n-1] = make([]cell, 0, prev) + } + } + } +} + +// Reset the current state. +func (b *Writer) reset() { + b.buf = b.buf[:0] + b.pos = 0 + b.cell = cell{} + b.endChar = 0 + b.lines = b.lines[0:0] + b.widths = b.widths[0:0] + b.addLine(true) +} + +// Internal representation (current state): +// +// - all text written is appended to buf; tabs and line breaks are stripped away +// - at any given time there is a (possibly empty) incomplete cell at the end +// (the cell starts after a tab or line break) +// - cell.size is the number of bytes belonging to the cell so far +// - cell.width is text width in runes of that cell from the start of the cell to +// position pos; html tags and entities are excluded from this width if html +// filtering is enabled +// - the sizes and widths of processed text are kept in the lines list +// which contains a list of cells for each line +// - the widths list is a temporary list with current widths used during +// formatting; it is kept in Writer because it's re-used +// +// |<---------- size ---------->| +// | | +// |<- width ->|<- ignored ->| | +// | | | | +// [---processed---tab------------......] +// ^ ^ ^ +// | | | +// buf start of incomplete cell pos + +// Formatting can be controlled with these flags. +const ( + // Ignore html tags and treat entities (starting with '&' + // and ending in ';') as single characters (width = 1). + FilterHTML uint = 1 << iota + + // Strip Escape characters bracketing escaped text segments + // instead of passing them through unchanged with the text. + StripEscape + + // Force right-alignment of cell content. + // Default is left-alignment. + AlignRight + + // Handle empty columns as if they were not present in + // the input in the first place. + DiscardEmptyColumns + + // Always use tabs for indentation columns (i.e., padding of + // leading empty cells on the left) independent of padchar. + TabIndent + + // Print a vertical bar ('|') between columns (after formatting). + // Discarded columns appear as zero-width columns ("||"). + Debug + + // Remember maximum widths seen per column even after Flush() is called. + RememberWidths +) + +// A Writer must be initialized with a call to Init. The first parameter (output) +// specifies the filter output. The remaining parameters control the formatting: +// +// minwidth minimal cell width including any padding +// tabwidth width of tab characters (equivalent number of spaces) +// padding padding added to a cell before computing its width +// padchar ASCII char used for padding +// if padchar == '\t', the Writer will assume that the +// width of a '\t' in the formatted output is tabwidth, +// and cells are left-aligned independent of align_left +// (for correct-looking results, tabwidth must correspond +// to the tab width in the viewer displaying the result) +// flags formatting control +// +func (b *Writer) Init(output io.Writer, minwidth, tabwidth, padding int, padchar byte, flags uint) *Writer { + if minwidth < 0 || tabwidth < 0 || padding < 0 { + panic("negative minwidth, tabwidth, or padding") + } + b.output = output + b.minwidth = minwidth + b.tabwidth = tabwidth + b.padding = padding + for i := range b.padbytes { + b.padbytes[i] = padchar + } + if padchar == '\t' { + // tab padding enforces left-alignment + flags &^= AlignRight + } + b.flags = flags + + b.reset() + + return b +} + +// debugging support (keep code around) +func (b *Writer) dump() { + pos := 0 + for i, line := range b.lines { + print("(", i, ") ") + for _, c := range line { + print("[", string(b.buf[pos:pos+c.size]), "]") + pos += c.size + } + print("\n") + } + print("\n") +} + +// local error wrapper so we can distinguish errors we want to return +// as errors from genuine panics (which we don't want to return as errors) +type osError struct { + err error +} + +func (b *Writer) write0(buf []byte) { + n, err := b.output.Write(buf) + if n != len(buf) && err == nil { + err = io.ErrShortWrite + } + if err != nil { + panic(osError{err}) + } +} + +func (b *Writer) writeN(src []byte, n int) { + for n > len(src) { + b.write0(src) + n -= len(src) + } + b.write0(src[0:n]) +} + +var ( + newline = []byte{'\n'} + tabs = []byte("\t\t\t\t\t\t\t\t") +) + +func (b *Writer) writePadding(textw, cellw int, useTabs bool) { + if b.padbytes[0] == '\t' || useTabs { + // padding is done with tabs + if b.tabwidth == 0 { + return // tabs have no width - can't do any padding + } + // make cellw the smallest multiple of b.tabwidth + cellw = (cellw + b.tabwidth - 1) / b.tabwidth * b.tabwidth + n := cellw - textw // amount of padding + if n < 0 { + panic("internal error") + } + b.writeN(tabs, (n+b.tabwidth-1)/b.tabwidth) + return + } + + // padding is done with non-tab characters + b.writeN(b.padbytes[0:], cellw-textw) +} + +var vbar = []byte{'|'} + +func (b *Writer) writeLines(pos0 int, line0, line1 int) (pos int) { + pos = pos0 + for i := line0; i < line1; i++ { + line := b.lines[i] + + // if TabIndent is set, use tabs to pad leading empty cells + useTabs := b.flags&TabIndent != 0 + + for j, c := range line { + if j > 0 && b.flags&Debug != 0 { + // indicate column break + b.write0(vbar) + } + + if c.size == 0 { + // empty cell + if j < len(b.widths) { + b.writePadding(c.width, b.widths[j], useTabs) + } + } else { + // non-empty cell + useTabs = false + if b.flags&AlignRight == 0 { // align left + b.write0(b.buf[pos : pos+c.size]) + pos += c.size + if j < len(b.widths) { + b.writePadding(c.width, b.widths[j], false) + } + } else { // align right + if j < len(b.widths) { + b.writePadding(c.width, b.widths[j], false) + } + b.write0(b.buf[pos : pos+c.size]) + pos += c.size + } + } + } + + if i+1 == len(b.lines) { + // last buffered line - we don't have a newline, so just write + // any outstanding buffered data + b.write0(b.buf[pos : pos+b.cell.size]) + pos += b.cell.size + } else { + // not the last line - write newline + b.write0(newline) + } + } + return +} + +// Format the text between line0 and line1 (excluding line1); pos +// is the buffer position corresponding to the beginning of line0. +// Returns the buffer position corresponding to the beginning of +// line1 and an error, if any. +// +func (b *Writer) format(pos0 int, line0, line1 int) (pos int) { + pos = pos0 + column := len(b.widths) + for this := line0; this < line1; this++ { + line := b.lines[this] + + if column >= len(line)-1 { + continue + } + // cell exists in this column => this line + // has more cells than the previous line + // (the last cell per line is ignored because cells are + // tab-terminated; the last cell per line describes the + // text before the newline/formfeed and does not belong + // to a column) + + // print unprinted lines until beginning of block + pos = b.writeLines(pos, line0, this) + line0 = this + + // column block begin + width := b.minwidth // minimal column width + discardable := true // true if all cells in this column are empty and "soft" + for ; this < line1; this++ { + line = b.lines[this] + if column >= len(line)-1 { + break + } + // cell exists in this column + c := line[column] + // update width + if w := c.width + b.padding; w > width { + width = w + } + // update discardable + if c.width > 0 || c.htab { + discardable = false + } + } + // column block end + + // discard empty columns if necessary + if discardable && b.flags&DiscardEmptyColumns != 0 { + width = 0 + } + + if b.flags&RememberWidths != 0 { + if len(b.maxwidths) < len(b.widths) { + b.maxwidths = append(b.maxwidths, b.widths[len(b.maxwidths):]...) + } + + switch { + case len(b.maxwidths) == len(b.widths): + b.maxwidths = append(b.maxwidths, width) + case b.maxwidths[len(b.widths)] > width: + width = b.maxwidths[len(b.widths)] + case b.maxwidths[len(b.widths)] < width: + b.maxwidths[len(b.widths)] = width + } + } + + // format and print all columns to the right of this column + // (we know the widths of this column and all columns to the left) + b.widths = append(b.widths, width) // push width + pos = b.format(pos, line0, this) + b.widths = b.widths[0 : len(b.widths)-1] // pop width + line0 = this + } + + // print unprinted lines until end + return b.writeLines(pos, line0, line1) +} + +// Append text to current cell. +func (b *Writer) append(text []byte) { + b.buf = append(b.buf, text...) + b.cell.size += len(text) +} + +// Update the cell width. +func (b *Writer) updateWidth() { + b.cell.width += utf8.RuneCount(b.buf[b.pos:]) + b.pos = len(b.buf) +} + +// To escape a text segment, bracket it with Escape characters. +// For instance, the tab in this string "Ignore this tab: \xff\t\xff" +// does not terminate a cell and constitutes a single character of +// width one for formatting purposes. +// +// The value 0xff was chosen because it cannot appear in a valid UTF-8 sequence. +// +const Escape = '\xff' + +// Start escaped mode. +func (b *Writer) startEscape(ch byte) { + switch ch { + case Escape: + b.endChar = Escape + case '<': + b.endChar = '>' + case '&': + b.endChar = ';' + } +} + +// Terminate escaped mode. If the escaped text was an HTML tag, its width +// is assumed to be zero for formatting purposes; if it was an HTML entity, +// its width is assumed to be one. In all other cases, the width is the +// unicode width of the text. +// +func (b *Writer) endEscape() { + switch b.endChar { + case Escape: + b.updateWidth() + if b.flags&StripEscape == 0 { + b.cell.width -= 2 // don't count the Escape chars + } + case '>': // tag of zero width + case ';': + b.cell.width++ // entity, count as one rune + } + b.pos = len(b.buf) + b.endChar = 0 +} + +// Terminate the current cell by adding it to the list of cells of the +// current line. Returns the number of cells in that line. +// +func (b *Writer) terminateCell(htab bool) int { + b.cell.htab = htab + line := &b.lines[len(b.lines)-1] + *line = append(*line, b.cell) + b.cell = cell{} + return len(*line) +} + +func handlePanic(err *error, op string) { + if e := recover(); e != nil { + if nerr, ok := e.(osError); ok { + *err = nerr.err + return + } + panic("tabwriter: panic during " + op) + } +} + +// RememberedWidths returns a copy of the remembered per-column maximum widths. +// Requires use of the RememberWidths flag, and is not threadsafe. +func (b *Writer) RememberedWidths() []int { + retval := make([]int, len(b.maxwidths)) + copy(retval, b.maxwidths) + return retval +} + +// SetRememberedWidths sets the remembered per-column maximum widths. +// Requires use of the RememberWidths flag, and is not threadsafe. +func (b *Writer) SetRememberedWidths(widths []int) *Writer { + b.maxwidths = make([]int, len(widths)) + copy(b.maxwidths, widths) + return b +} + +// Flush should be called after the last call to Write to ensure +// that any data buffered in the Writer is written to output. Any +// incomplete escape sequence at the end is considered +// complete for formatting purposes. +func (b *Writer) Flush() error { + return b.flush() +} + +func (b *Writer) flush() (err error) { + defer b.reset() // even in the presence of errors + defer handlePanic(&err, "Flush") + + // add current cell if not empty + if b.cell.size > 0 { + if b.endChar != 0 { + // inside escape - terminate it even if incomplete + b.endEscape() + } + b.terminateCell(false) + } + + // format contents of buffer + b.format(0, 0, len(b.lines)) + return nil +} + +var hbar = []byte("---\n") + +// Write writes buf to the writer b. +// The only errors returned are ones encountered +// while writing to the underlying output stream. +// +func (b *Writer) Write(buf []byte) (n int, err error) { + defer handlePanic(&err, "Write") + + // split text into cells + n = 0 + for i, ch := range buf { + if b.endChar == 0 { + // outside escape + switch ch { + case '\t', '\v', '\n', '\f': + // end of cell + b.append(buf[n:i]) + b.updateWidth() + n = i + 1 // ch consumed + ncells := b.terminateCell(ch == '\t') + if ch == '\n' || ch == '\f' { + // terminate line + b.addLine(ch == '\f') + if ch == '\f' || ncells == 1 { + // A '\f' always forces a flush. Otherwise, if the previous + // line has only one cell which does not have an impact on + // the formatting of the following lines (the last cell per + // line is ignored by format()), thus we can flush the + // Writer contents. + if err = b.Flush(); err != nil { + return + } + if ch == '\f' && b.flags&Debug != 0 { + // indicate section break + b.write0(hbar) + } + } + } + + case Escape: + // start of escaped sequence + b.append(buf[n:i]) + b.updateWidth() + n = i + if b.flags&StripEscape != 0 { + n++ // strip Escape + } + b.startEscape(Escape) + + case '<', '&': + // possibly an html tag/entity + if b.flags&FilterHTML != 0 { + // begin of tag/entity + b.append(buf[n:i]) + b.updateWidth() + n = i + b.startEscape(ch) + } + } + + } else { + // inside escape + if ch == b.endChar { + // end of tag/entity + j := i + 1 + if ch == Escape && b.flags&StripEscape != 0 { + j = i // strip Escape + } + b.append(buf[n:j]) + n = i + 1 // ch consumed + b.endEscape() + } + } + } + + // append leftover text + b.append(buf[n:]) + n = len(buf) + return +} + +// NewWriter allocates and initializes a new tabwriter.Writer. +// The parameters are the same as for the Init function. +// +func NewWriter(output io.Writer, minwidth, tabwidth, padding int, padchar byte, flags uint) *Writer { + return new(Writer).Init(output, minwidth, tabwidth, padding, padchar, flags) +} diff --git a/vendor/github.com/lithammer/dedent/.travis.yml b/vendor/github.com/lithammer/dedent/.travis.yml new file mode 100644 index 00000000000..bc035e5e202 --- /dev/null +++ b/vendor/github.com/lithammer/dedent/.travis.yml @@ -0,0 +1,11 @@ +language: go + +go: + - "1.6" + - "1.7" + - "1.8" + - "1.9" + - "1.10" + - "1.11" + +sudo: false diff --git a/vendor/github.com/renstrom/dedent/LICENSE b/vendor/github.com/lithammer/dedent/LICENSE similarity index 96% rename from vendor/github.com/renstrom/dedent/LICENSE rename to vendor/github.com/lithammer/dedent/LICENSE index 66a9870fcf7..5da0fc612a3 100644 --- a/vendor/github.com/renstrom/dedent/LICENSE +++ b/vendor/github.com/lithammer/dedent/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Peter Renström +Copyright (c) 2018 Peter Lithammer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/renstrom/dedent/README.md b/vendor/github.com/lithammer/dedent/README.md similarity index 51% rename from vendor/github.com/renstrom/dedent/README.md rename to vendor/github.com/lithammer/dedent/README.md index 35b5aa1341d..34926a1ccdb 100644 --- a/vendor/github.com/renstrom/dedent/README.md +++ b/vendor/github.com/lithammer/dedent/README.md @@ -1,7 +1,7 @@ # Dedent -[![Build Status](https://travis-ci.org/renstrom/dedent.svg?branch=master)](https://travis-ci.org/renstrom/dedent) -[![Godoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/renstrom/dedent) +[![Build Status](https://travis-ci.org/lithammer/dedent.svg?branch=master)](https://travis-ci.org/lithammer/dedent) +[![Godoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/lithammer/dedent) Removes common leading whitespace from multiline strings. Inspired by [`textwrap.dedent`](https://docs.python.org/3/library/textwrap.html#textwrap.dedent) in Python. @@ -13,19 +13,20 @@ Imagine the following snippet that prints a multiline string. You want the inden package main import ( - "fmt" + "fmt" - "github.com/renstrom/dedent" + "github.com/lithammer/dedent" ) func main() { - s := `Lorem ipsum dolor sit amet, - consectetur adipiscing elit. - Curabitur justo tellus, facilisis nec efficitur dictum, - fermentum vitae ligula. Sed eu convallis sapien.` - fmt.Println(dedent.Dedent(s)) - fmt.Println("-------------") - fmt.Println(s) + s := ` + Lorem ipsum dolor sit amet, + consectetur adipiscing elit. + Curabitur justo tellus, facilisis nec efficitur dictum, + fermentum vitae ligula. Sed eu convallis sapien.` + fmt.Println(Dedent(s)) + fmt.Println("-------------") + fmt.Println(s) } ``` @@ -39,10 +40,11 @@ consectetur adipiscing elit. Curabitur justo tellus, facilisis nec efficitur dictum, fermentum vitae ligula. Sed eu convallis sapien. ------------- -Lorem ipsum dolor sit amet, - consectetur adipiscing elit. - Curabitur justo tellus, facilisis nec efficitur dictum, - fermentum vitae ligula. Sed eu convallis sapien. + + Lorem ipsum dolor sit amet, + consectetur adipiscing elit. + Curabitur justo tellus, facilisis nec efficitur dictum, + fermentum vitae ligula. Sed eu convallis sapien. ``` ## License diff --git a/vendor/github.com/renstrom/dedent/dedent.go b/vendor/github.com/lithammer/dedent/dedent.go similarity index 100% rename from vendor/github.com/renstrom/dedent/dedent.go rename to vendor/github.com/lithammer/dedent/dedent.go diff --git a/vendor/github.com/lithammer/dedent/go.mod b/vendor/github.com/lithammer/dedent/go.mod new file mode 100644 index 00000000000..9468fd10591 --- /dev/null +++ b/vendor/github.com/lithammer/dedent/go.mod @@ -0,0 +1 @@ +module github.com/lithammer/dedent diff --git a/vendor/bitbucket.org/ww/goautoneg/Makefile b/vendor/github.com/munnerz/goautoneg/Makefile similarity index 100% rename from vendor/bitbucket.org/ww/goautoneg/Makefile rename to vendor/github.com/munnerz/goautoneg/Makefile diff --git a/vendor/bitbucket.org/ww/goautoneg/README.txt b/vendor/github.com/munnerz/goautoneg/README.txt similarity index 100% rename from vendor/bitbucket.org/ww/goautoneg/README.txt rename to vendor/github.com/munnerz/goautoneg/README.txt diff --git a/vendor/bitbucket.org/ww/goautoneg/autoneg.go b/vendor/github.com/munnerz/goautoneg/autoneg.go similarity index 100% rename from vendor/bitbucket.org/ww/goautoneg/autoneg.go rename to vendor/github.com/munnerz/goautoneg/autoneg.go diff --git a/vendor/github.com/opencontainers/runc/.travis.yml b/vendor/github.com/opencontainers/runc/.travis.yml index 04b45e92733..bf5298909eb 100644 --- a/vendor/github.com/opencontainers/runc/.travis.yml +++ b/vendor/github.com/opencontainers/runc/.travis.yml @@ -1,3 +1,4 @@ +dist: xenial language: go go: - 1.9.x @@ -6,6 +7,13 @@ go: - tip matrix: + include: + - go: 1.11.x + env: + - RUNC_USE_SYSTEMD=1 + script: + - make BUILDTAGS="${BUILDTAGS}" all + - sudo PATH="$PATH" make localintegration RUNC_USE_SYSTEMD=1 allow_failures: - go: tip @@ -21,9 +29,8 @@ env: - BUILDTAGS="seccomp apparmor selinux ambient" before_install: - - echo "deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list - sudo apt-get -qq update - - sudo apt-get install -y libseccomp-dev/trusty-backports + - sudo apt-get install -y libseccomp-dev - go get -u golang.org/x/lint/golint - go get -u github.com/vbatts/git-validation - env | grep TRAVIS_ diff --git a/vendor/github.com/opencontainers/runc/README.md b/vendor/github.com/opencontainers/runc/README.md index e755fb7bcdd..11fa4138b41 100644 --- a/vendor/github.com/opencontainers/runc/README.md +++ b/vendor/github.com/opencontainers/runc/README.md @@ -16,10 +16,9 @@ This means that `runc` 1.0.0 should implement the 1.0 version of the specificati You can find official releases of `runc` on the [release](https://github.com/opencontainers/runc/releases) page. -### Security +## Security -If you wish to report a security issue, please disclose the issue responsibly -to security@opencontainers.org. +Reporting process and disclosure communications are outlined in [/org/security](https://github.com/opencontainers/org/blob/master/security/) ## Building diff --git a/vendor/github.com/opencontainers/runc/VERSION b/vendor/github.com/opencontainers/runc/VERSION index cea68368b99..7bbe6b6494f 100644 --- a/vendor/github.com/opencontainers/runc/VERSION +++ b/vendor/github.com/opencontainers/runc/VERSION @@ -1 +1 @@ -1.0.0-rc6+dev +1.0.0-rc7 diff --git a/vendor/github.com/opencontainers/runc/exec.go b/vendor/github.com/opencontainers/runc/exec.go index ae8e60e4263..62ab4662548 100644 --- a/vendor/github.com/opencontainers/runc/exec.go +++ b/vendor/github.com/opencontainers/runc/exec.go @@ -89,6 +89,10 @@ following will output a list of processes running in the container: Usage: "disable the use of the subreaper used to reap reparented processes", Hidden: true, }, + cli.IntFlag{ + Name: "preserve-fds", + Usage: "Pass N additional file descriptors to the container (stdio + $LISTEN_FDS + N in total)", + }, }, Action: func(context *cli.Context) error { if err := checkArgs(context, 1, minArgs); err != nil { @@ -141,6 +145,7 @@ func execProcess(context *cli.Context) (int, error) { pidFile: context.String("pid-file"), action: CT_ACT_RUN, init: false, + preserveFDs: context.Int("preserve-fds"), } return r.run(p) } diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/apply_systemd.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/apply_systemd.go index e8defe3a1ee..a10e3f6a892 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/apply_systemd.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/apply_systemd.go @@ -72,13 +72,11 @@ const ( ) var ( - connLock sync.Mutex - theConn *systemdDbus.Conn - hasStartTransientUnit bool - hasStartTransientSliceUnit bool - hasTransientDefaultDependencies bool - hasDelegateScope bool - hasDelegateSlice bool + connLock sync.Mutex + theConn *systemdDbus.Conn + hasStartTransientUnit bool + hasStartTransientSliceUnit bool + hasDelegateSlice bool ) func newProp(name string, units interface{}) systemdDbus.Property { @@ -116,53 +114,6 @@ func UseSystemd() bool { } } - // Ensure the scope name we use doesn't exist. Use the Pid to - // avoid collisions between multiple libcontainer users on a - // single host. - scope := fmt.Sprintf("libcontainer-%d-systemd-test-default-dependencies.scope", os.Getpid()) - testScopeExists := true - for i := 0; i <= testScopeWait; i++ { - if _, err := theConn.StopUnit(scope, "replace", nil); err != nil { - if dbusError, ok := err.(dbus.Error); ok { - if strings.Contains(dbusError.Name, "org.freedesktop.systemd1.NoSuchUnit") { - testScopeExists = false - break - } - } - } - time.Sleep(time.Millisecond) - } - - // Bail out if we can't kill this scope without testing for DefaultDependencies - if testScopeExists { - return hasStartTransientUnit - } - - // Assume StartTransientUnit on a scope allows DefaultDependencies - hasTransientDefaultDependencies = true - ddf := newProp("DefaultDependencies", false) - if _, err := theConn.StartTransientUnit(scope, "replace", []systemdDbus.Property{ddf}, nil); err != nil { - if dbusError, ok := err.(dbus.Error); ok { - if strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.PropertyReadOnly") { - hasTransientDefaultDependencies = false - } - } - } - - // Not critical because of the stop unit logic above. - theConn.StopUnit(scope, "replace", nil) - - // Assume StartTransientUnit on a scope allows Delegate - hasDelegateScope = true - dlScope := newProp("Delegate", true) - if _, err := theConn.StartTransientUnit(scope, "replace", []systemdDbus.Property{dlScope}, nil); err != nil { - if dbusError, ok := err.(dbus.Error); ok { - if strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.PropertyReadOnly") { - hasDelegateScope = false - } - } - } - // Assume we have the ability to start a transient unit as a slice // This was broken until systemd v229, but has been back-ported on RHEL environments >= 219 // For details, see: https://bugzilla.redhat.com/show_bug.cgi?id=1370299 @@ -207,7 +158,6 @@ func UseSystemd() bool { } // Not critical because of the stop unit logic above. - theConn.StopUnit(scope, "replace", nil) theConn.StopUnit(slice, "replace", nil) } return hasStartTransientUnit @@ -268,9 +218,8 @@ func (m *Manager) Apply(pid int) error { properties = append(properties, newProp("Delegate", true)) } } else { - if hasDelegateScope { - properties = append(properties, newProp("Delegate", true)) - } + // Assume scopes always support delegation. + properties = append(properties, newProp("Delegate", true)) } // Always enable accounting, this gets us the same behaviour as the fs implementation, @@ -280,10 +229,9 @@ func (m *Manager) Apply(pid int) error { newProp("CPUAccounting", true), newProp("BlockIOAccounting", true)) - if hasTransientDefaultDependencies { - properties = append(properties, - newProp("DefaultDependencies", false)) - } + // Assume DefaultDependencies= will always work (the check for it was previously broken.) + properties = append(properties, + newProp("DefaultDependencies", false)) if c.Resources.Memory != 0 { properties = append(properties, diff --git a/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go index ef443f6fc16..7e58e5e0082 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go @@ -19,14 +19,15 @@ import ( "syscall" // only for SysProcAttr and Signal "time" + "github.com/cyphar/filepath-securejoin" "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/configs" - "github.com/opencontainers/runc/libcontainer/criurpc" "github.com/opencontainers/runc/libcontainer/intelrdt" "github.com/opencontainers/runc/libcontainer/system" "github.com/opencontainers/runc/libcontainer/utils" "github.com/opencontainers/runtime-spec/specs-go" + criurpc "github.com/checkpoint-restore/go-criu/rpc" "github.com/golang/protobuf/proto" "github.com/sirupsen/logrus" "github.com/vishvananda/netlink/nl" @@ -481,6 +482,7 @@ func (c *linuxContainer) commandTemplate(p *Process, childPipe *os.File) (*exec. cmd.ExtraFiles = append(cmd.ExtraFiles, childPipe) cmd.Env = append(cmd.Env, fmt.Sprintf("_LIBCONTAINER_INITPIPE=%d", stdioFdCount+len(cmd.ExtraFiles)-1), + fmt.Sprintf("_LIBCONTAINER_STATEDIR=%s", c.root), ) // NOTE: when running a container with no PID namespace and the parent process spawning the container is // PID1 the pdeathsig is being delivered to the container's init process by the kernel for some reason @@ -1139,6 +1141,75 @@ func (c *linuxContainer) restoreNetwork(req *criurpc.CriuReq, criuOpts *CriuOpts } } +// makeCriuRestoreMountpoints makes the actual mountpoints for the +// restore using CRIU. This function is inspired from the code in +// rootfs_linux.go +func (c *linuxContainer) makeCriuRestoreMountpoints(m *configs.Mount) error { + switch m.Device { + case "cgroup": + // Do nothing for cgroup, CRIU should handle it + case "bind": + // The prepareBindMount() function checks if source + // exists. So it cannot be used for other filesystem types. + if err := prepareBindMount(m, c.config.Rootfs); err != nil { + return err + } + default: + // for all other file-systems just create the mountpoints + dest, err := securejoin.SecureJoin(c.config.Rootfs, m.Destination) + if err != nil { + return err + } + if err := checkMountDestination(c.config.Rootfs, dest); err != nil { + return err + } + m.Destination = dest + if err := os.MkdirAll(dest, 0755); err != nil { + return err + } + } + return nil +} + +// isPathInPrefixList is a small function for CRIU restore to make sure +// mountpoints, which are on a tmpfs, are not created in the roofs +func isPathInPrefixList(path string, prefix []string) bool { + for _, p := range prefix { + if strings.HasPrefix(path, p+"/") { + return false + } + } + return true +} + +// prepareCriuRestoreMounts tries to set up the rootfs of the +// container to be restored in the same way runc does it for +// initial container creation. Even for a read-only rootfs container +// runc modifies the rootfs to add mountpoints which do not exist. +// This function also creates missing mountpoints as long as they +// are not on top of a tmpfs, as CRIU will restore tmpfs content anyway. +func (c *linuxContainer) prepareCriuRestoreMounts(mounts []*configs.Mount) error { + // First get a list of a all tmpfs mounts + tmpfs := []string{} + for _, m := range mounts { + switch m.Device { + case "tmpfs": + tmpfs = append(tmpfs, m.Destination) + } + } + // Now go through all mounts and create the mountpoints + // if the mountpoints are not on a tmpfs, as CRIU will + // restore the complete tmpfs content from its checkpoint. + for _, m := range mounts { + if isPathInPrefixList(m.Destination, tmpfs) { + if err := c.makeCriuRestoreMountpoints(m); err != nil { + return err + } + } + } + return nil +} + func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { c.m.Lock() defer c.m.Unlock() @@ -1252,6 +1323,12 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { } } + // This will modify the rootfs of the container in the same way runc + // modifies the container during initial creation. + if err := c.prepareCriuRestoreMounts(c.config.Mounts); err != nil { + return err + } + for _, m := range c.config.Mounts { switch m.Device { case "bind": diff --git a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/Makefile b/vendor/github.com/opencontainers/runc/libcontainer/criurpc/Makefile deleted file mode 100644 index 3e5346a3f17..00000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -gen: criurpc.proto - protoc --go_out=. criurpc.proto diff --git a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.proto b/vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.proto deleted file mode 100644 index 0493ec715e0..00000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.proto +++ /dev/null @@ -1,210 +0,0 @@ -syntax = "proto2"; - -message criu_page_server_info { - optional string address = 1; - optional int32 port = 2; - optional int32 pid = 3; - optional int32 fd = 4; -} - -message criu_veth_pair { - required string if_in = 1; - required string if_out = 2; -}; - -message ext_mount_map { - required string key = 1; - required string val = 2; -}; - -message join_namespace { - required string ns = 1; - required string ns_file = 2; - optional string extra_opt = 3; -} - -message inherit_fd { - required string key = 1; - required int32 fd = 2; -}; - -message cgroup_root { - optional string ctrl = 1; - required string path = 2; -}; - -message unix_sk { - required uint32 inode = 1; -}; - -enum criu_cg_mode { - IGNORE = 0; - CG_NONE = 1; - PROPS = 2; - SOFT = 3; - FULL = 4; - STRICT = 5; - DEFAULT = 6; -}; - -message criu_opts { - required int32 images_dir_fd = 1; - optional int32 pid = 2; /* if not set on dump, will dump requesting process */ - - optional bool leave_running = 3; - optional bool ext_unix_sk = 4; - optional bool tcp_established = 5; - optional bool evasive_devices = 6; - optional bool shell_job = 7; - optional bool file_locks = 8; - optional int32 log_level = 9 [default = 2]; - optional string log_file = 10; /* No subdirs are allowed. Consider using work-dir */ - - optional criu_page_server_info ps = 11; - - optional bool notify_scripts = 12; - - optional string root = 13; - optional string parent_img = 14; - optional bool track_mem = 15; - optional bool auto_dedup = 16; - - optional int32 work_dir_fd = 17; - optional bool link_remap = 18; - repeated criu_veth_pair veths = 19; /* DEPRECATED, use external instead */ - - optional uint32 cpu_cap = 20 [default = 0xffffffff]; - optional bool force_irmap = 21; - repeated string exec_cmd = 22; - - repeated ext_mount_map ext_mnt = 23; /* DEPRECATED, use external instead */ - optional bool manage_cgroups = 24; /* backward compatibility */ - repeated cgroup_root cg_root = 25; - - optional bool rst_sibling = 26; /* swrk only */ - repeated inherit_fd inherit_fd = 27; /* swrk only */ - - optional bool auto_ext_mnt = 28; - optional bool ext_sharing = 29; - optional bool ext_masters = 30; - - repeated string skip_mnt = 31; - repeated string enable_fs = 32; - - repeated unix_sk unix_sk_ino = 33; /* DEPRECATED, use external instead */ - - optional criu_cg_mode manage_cgroups_mode = 34; - optional uint32 ghost_limit = 35 [default = 0x100000]; - repeated string irmap_scan_paths = 36; - repeated string external = 37; - optional uint32 empty_ns = 38; - repeated join_namespace join_ns = 39; - - optional string cgroup_props = 41; - optional string cgroup_props_file = 42; - repeated string cgroup_dump_controller = 43; - - optional string freeze_cgroup = 44; - optional uint32 timeout = 45; - optional bool tcp_skip_in_flight = 46; - optional bool weak_sysctls = 47; - optional bool lazy_pages = 48; - optional int32 status_fd = 49; - optional bool orphan_pts_master = 50; - optional string config_file = 51; -} - -message criu_dump_resp { - optional bool restored = 1; -} - -message criu_restore_resp { - required int32 pid = 1; -} - -message criu_notify { - optional string script = 1; - optional int32 pid = 2; -} - -enum criu_req_type { - EMPTY = 0; - DUMP = 1; - RESTORE = 2; - CHECK = 3; - PRE_DUMP = 4; - PAGE_SERVER = 5; - - NOTIFY = 6; - - CPUINFO_DUMP = 7; - CPUINFO_CHECK = 8; - - FEATURE_CHECK = 9; - - VERSION = 10; -} - -/* - * List of features which can queried via - * CRIU_REQ_TYPE__FEATURE_CHECK - */ -message criu_features { - optional bool mem_track = 1; - optional bool lazy_pages = 2; -} - -/* - * Request -- each type corresponds to must-be-there - * request arguments of respective type - */ - -message criu_req { - required criu_req_type type = 1; - - optional criu_opts opts = 2; - optional bool notify_success = 3; - - /* - * When set service won't close the connection but - * will wait for more req-s to appear. Works not - * for all request types. - */ - optional bool keep_open = 4; - /* - * 'features' can be used to query which features - * are supported by the installed criu/kernel - * via RPC. - */ - optional criu_features features = 5; -} - -/* - * Response -- it states whether the request was served - * and additional request-specific information - */ - -message criu_resp { - required criu_req_type type = 1; - required bool success = 2; - - optional criu_dump_resp dump = 3; - optional criu_restore_resp restore = 4; - optional criu_notify notify = 5; - optional criu_page_server_info ps = 6; - - optional int32 cr_errno = 7; - optional criu_features features = 8; - optional string cr_errmsg = 9; - optional criu_version version = 10; -} - -/* Answer for criu_req_type.VERSION requests */ -message criu_version { - required int32 major = 1; - required int32 minor = 2; - optional string gitid = 3; - optional int32 sublevel = 4; - optional int32 extra = 5; - optional string name = 6; -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/cloned_binary.c b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/cloned_binary.c index c8a42c23f73..ad10f14067b 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/cloned_binary.c +++ b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/cloned_binary.c @@ -27,8 +27,10 @@ #include #include +#include #include #include +#include #include #include @@ -36,18 +38,21 @@ #if !defined(SYS_memfd_create) && defined(__NR_memfd_create) # define SYS_memfd_create __NR_memfd_create #endif -#ifdef SYS_memfd_create -# define HAVE_MEMFD_CREATE /* memfd_create(2) flags -- copied from . */ -# ifndef MFD_CLOEXEC -# define MFD_CLOEXEC 0x0001U -# define MFD_ALLOW_SEALING 0x0002U -# endif +#ifndef MFD_CLOEXEC +# define MFD_CLOEXEC 0x0001U +# define MFD_ALLOW_SEALING 0x0002U +#endif int memfd_create(const char *name, unsigned int flags) { +#ifdef SYS_memfd_create return syscall(SYS_memfd_create, name, flags); -} +#else + errno = ENOSYS; + return -1; #endif +} + /* This comes directly from . */ #ifndef F_LINUX_SPECIFIC_BASE @@ -64,12 +69,10 @@ int memfd_create(const char *name, unsigned int flags) # define F_SEAL_WRITE 0x0008 /* prevent writes */ #endif -#define RUNC_SENDFILE_MAX 0x7FFFF000 /* sendfile(2) is limited to 2GB. */ -#ifdef HAVE_MEMFD_CREATE -# define RUNC_MEMFD_COMMENT "runc_cloned:/proc/self/exe" -# define RUNC_MEMFD_SEALS \ +#define CLONED_BINARY_ENV "_LIBCONTAINER_CLONED_BINARY" +#define RUNC_MEMFD_COMMENT "runc_cloned:/proc/self/exe" +#define RUNC_MEMFD_SEALS \ (F_SEAL_SEAL | F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE) -#endif static void *must_realloc(void *ptr, size_t size) { @@ -88,28 +91,61 @@ static void *must_realloc(void *ptr, size_t size) static int is_self_cloned(void) { int fd, ret, is_cloned = 0; + struct stat statbuf = {}; + struct statfs fsbuf = {}; fd = open("/proc/self/exe", O_RDONLY|O_CLOEXEC); if (fd < 0) return -ENOTRECOVERABLE; -#ifdef HAVE_MEMFD_CREATE + /* + * Is the binary a fully-sealed memfd? We don't need CLONED_BINARY_ENV for + * this, because you cannot write to a sealed memfd no matter what (so + * sharing it isn't a bad thing -- and an admin could bind-mount a sealed + * memfd to /usr/bin/runc to allow re-use). + */ ret = fcntl(fd, F_GET_SEALS); - is_cloned = (ret == RUNC_MEMFD_SEALS); -#else - struct stat statbuf = {0}; - ret = fstat(fd, &statbuf); - if (ret >= 0) - is_cloned = (statbuf.st_nlink == 0); -#endif + if (ret >= 0) { + is_cloned = (ret == RUNC_MEMFD_SEALS); + goto out; + } + + /* + * All other forms require CLONED_BINARY_ENV, since they are potentially + * writeable (or we can't tell if they're fully safe) and thus we must + * check the environment as an extra layer of defence. + */ + if (!getenv(CLONED_BINARY_ENV)) { + is_cloned = false; + goto out; + } + + /* + * Is the binary on a read-only filesystem? We can't detect bind-mounts in + * particular (in-kernel they are identical to regular mounts) but we can + * at least be sure that it's read-only. In addition, to make sure that + * it's *our* bind-mount we check CLONED_BINARY_ENV. + */ + if (fstatfs(fd, &fsbuf) >= 0) + is_cloned |= (fsbuf.f_flags & MS_RDONLY); + + /* + * Okay, we're a tmpfile -- or we're currently running on RHEL <=7.6 + * which appears to have a borked backport of F_GET_SEALS. Either way, + * having a file which has no hardlinks indicates that we aren't using + * a host-side "runc" binary and this is something that a container + * cannot fake (because unlinking requires being able to resolve the + * path that you want to unlink). + */ + if (fstat(fd, &statbuf) >= 0) + is_cloned |= (statbuf.st_nlink == 0); + +out: close(fd); return is_cloned; } -/* - * Basic wrapper around mmap(2) that gives you the file length so you can - * safely treat it as an ordinary buffer. Only gives you read access. - */ +/* Read a given file into a new buffer, and providing the length. */ static char *read_file(char *path, size_t *length) { int fd; @@ -124,7 +160,7 @@ static char *read_file(char *path, size_t *length) *length = 0; for (;;) { - int n; + ssize_t n; n = read(fd, buf, sizeof(buf)); if (n < 0) @@ -169,100 +205,312 @@ static int parse_xargs(char *data, int data_length, char ***output) } /* - * "Parse" out argv and envp from /proc/self/cmdline and /proc/self/environ. + * "Parse" out argv from /proc/self/cmdline. * This is necessary because we are running in a context where we don't have a * main() that we can just get the arguments from. */ -static int fetchve(char ***argv, char ***envp) +static int fetchve(char ***argv) { - char *cmdline = NULL, *environ = NULL; - size_t cmdline_size, environ_size; + char *cmdline = NULL; + size_t cmdline_size; cmdline = read_file("/proc/self/cmdline", &cmdline_size); if (!cmdline) goto error; - environ = read_file("/proc/self/environ", &environ_size); - if (!environ) - goto error; if (parse_xargs(cmdline, cmdline_size, argv) <= 0) goto error; - if (parse_xargs(environ, environ_size, envp) <= 0) - goto error; return 0; error: - free(environ); free(cmdline); return -EINVAL; } +enum { + EFD_NONE = 0, + EFD_MEMFD, + EFD_FILE, +}; + +/* + * This comes from . We can't hard-code __O_TMPFILE because it + * changes depending on the architecture. If we don't have O_TMPFILE we always + * have the mkostemp(3) fallback. + */ +#ifndef O_TMPFILE +# if defined(__O_TMPFILE) && defined(O_DIRECTORY) +# define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) +# endif +#endif + +static int make_execfd(int *fdtype) +{ + int fd = -1; + char template[PATH_MAX] = {0}; + char *prefix = getenv("_LIBCONTAINER_STATEDIR"); + + if (!prefix || *prefix != '/') + prefix = "/tmp"; + if (snprintf(template, sizeof(template), "%s/runc.XXXXXX", prefix) < 0) + return -1; + + /* + * Now try memfd, it's much nicer than actually creating a file in STATEDIR + * since it's easily detected thanks to sealing and also doesn't require + * assumptions about STATEDIR. + */ + *fdtype = EFD_MEMFD; + fd = memfd_create(RUNC_MEMFD_COMMENT, MFD_CLOEXEC | MFD_ALLOW_SEALING); + if (fd >= 0) + return fd; + if (errno != ENOSYS && errno != EINVAL) + goto error; + +#ifdef O_TMPFILE + /* + * Try O_TMPFILE to avoid races where someone might snatch our file. Note + * that O_EXCL isn't actually a security measure here (since you can just + * fd re-open it and clear O_EXCL). + */ + *fdtype = EFD_FILE; + fd = open(prefix, O_TMPFILE | O_EXCL | O_RDWR | O_CLOEXEC, 0700); + if (fd >= 0) { + struct stat statbuf = {}; + bool working_otmpfile = false; + + /* + * open(2) ignores unknown O_* flags -- yeah, I was surprised when I + * found this out too. As a result we can't check for EINVAL. However, + * if we get nlink != 0 (or EISDIR) then we know that this kernel + * doesn't support O_TMPFILE. + */ + if (fstat(fd, &statbuf) >= 0) + working_otmpfile = (statbuf.st_nlink == 0); + + if (working_otmpfile) + return fd; + + /* Pretend that we got EISDIR since O_TMPFILE failed. */ + close(fd); + errno = EISDIR; + } + if (errno != EISDIR) + goto error; +#endif /* defined(O_TMPFILE) */ + + /* + * Our final option is to create a temporary file the old-school way, and + * then unlink it so that nothing else sees it by accident. + */ + *fdtype = EFD_FILE; + fd = mkostemp(template, O_CLOEXEC); + if (fd >= 0) { + if (unlink(template) >= 0) + return fd; + close(fd); + } + +error: + *fdtype = EFD_NONE; + return -1; +} + +static int seal_execfd(int *fd, int fdtype) +{ + switch (fdtype) { + case EFD_MEMFD: + return fcntl(*fd, F_ADD_SEALS, RUNC_MEMFD_SEALS); + case EFD_FILE: { + /* Need to re-open our pseudo-memfd as an O_PATH to avoid execve(2) giving -ETXTBSY. */ + int newfd; + char fdpath[PATH_MAX] = {0}; + + if (fchmod(*fd, 0100) < 0) + return -1; + + if (snprintf(fdpath, sizeof(fdpath), "/proc/self/fd/%d", *fd) < 0) + return -1; + + newfd = open(fdpath, O_PATH | O_CLOEXEC); + if (newfd < 0) + return -1; + + close(*fd); + *fd = newfd; + return 0; + } + default: + break; + } + return -1; +} + +static int try_bindfd(void) +{ + int fd, ret = -1; + char template[PATH_MAX] = {0}; + char *prefix = getenv("_LIBCONTAINER_STATEDIR"); + + if (!prefix || *prefix != '/') + prefix = "/tmp"; + if (snprintf(template, sizeof(template), "%s/runc.XXXXXX", prefix) < 0) + return ret; + + /* + * We need somewhere to mount it, mounting anything over /proc/self is a + * BAD idea on the host -- even if we do it temporarily. + */ + fd = mkstemp(template); + if (fd < 0) + return ret; + close(fd); + + /* + * For obvious reasons this won't work in rootless mode because we haven't + * created a userns+mntns -- but getting that to work will be a bit + * complicated and it's only worth doing if someone actually needs it. + */ + ret = -EPERM; + if (mount("/proc/self/exe", template, "", MS_BIND, "") < 0) + goto out; + if (mount("", template, "", MS_REMOUNT | MS_BIND | MS_RDONLY, "") < 0) + goto out_umount; + + + /* Get read-only handle that we're sure can't be made read-write. */ + ret = open(template, O_PATH | O_CLOEXEC); + +out_umount: + /* + * Make sure the MNT_DETACH works, otherwise we could get remounted + * read-write and that would be quite bad (the fd would be made read-write + * too, invalidating the protection). + */ + if (umount2(template, MNT_DETACH) < 0) { + if (ret >= 0) + close(ret); + ret = -ENOTRECOVERABLE; + } + +out: + /* + * We don't care about unlink errors, the worst that happens is that + * there's an empty file left around in STATEDIR. + */ + unlink(template); + return ret; +} + +static ssize_t fd_to_fd(int outfd, int infd) +{ + ssize_t total = 0; + char buffer[4096]; + + for (;;) { + ssize_t nread, nwritten = 0; + + nread = read(infd, buffer, sizeof(buffer)); + if (nread < 0) + return -1; + if (!nread) + break; + + do { + ssize_t n = write(outfd, buffer + nwritten, nread - nwritten); + if (n < 0) + return -1; + nwritten += n; + } while(nwritten < nread); + + total += nwritten; + } + + return total; +} + static int clone_binary(void) { - int binfd, memfd; - ssize_t sent = 0; + int binfd, execfd; + struct stat statbuf = {}; + size_t sent = 0; + int fdtype = EFD_NONE; -#ifdef HAVE_MEMFD_CREATE - memfd = memfd_create(RUNC_MEMFD_COMMENT, MFD_CLOEXEC | MFD_ALLOW_SEALING); -#else - memfd = open("/tmp", O_TMPFILE | O_EXCL | O_RDWR | O_CLOEXEC, 0711); -#endif - if (memfd < 0) + /* + * Before we resort to copying, let's try creating an ro-binfd in one shot + * by getting a handle for a read-only bind-mount of the execfd. + */ + execfd = try_bindfd(); + if (execfd >= 0) + return execfd; + + /* + * Dammit, that didn't work -- time to copy the binary to a safe place we + * can seal the contents. + */ + execfd = make_execfd(&fdtype); + if (execfd < 0 || fdtype == EFD_NONE) return -ENOTRECOVERABLE; binfd = open("/proc/self/exe", O_RDONLY | O_CLOEXEC); if (binfd < 0) goto error; - sent = sendfile(memfd, binfd, NULL, RUNC_SENDFILE_MAX); + if (fstat(binfd, &statbuf) < 0) + goto error_binfd; + + while (sent < statbuf.st_size) { + int n = sendfile(execfd, binfd, NULL, statbuf.st_size - sent); + if (n < 0) { + /* sendfile can fail so we fallback to a dumb user-space copy. */ + n = fd_to_fd(execfd, binfd); + if (n < 0) + goto error_binfd; + } + sent += n; + } close(binfd); - if (sent < 0) + if (sent != statbuf.st_size) goto error; -#ifdef HAVE_MEMFD_CREATE - int err = fcntl(memfd, F_ADD_SEALS, RUNC_MEMFD_SEALS); - if (err < 0) - goto error; -#else - /* Need to re-open "memfd" as read-only to avoid execve(2) giving -EXTBUSY. */ - int newfd; - char *fdpath = NULL; - - if (asprintf(&fdpath, "/proc/self/fd/%d", memfd) < 0) - goto error; - newfd = open(fdpath, O_RDONLY | O_CLOEXEC); - free(fdpath); - if (newfd < 0) + if (seal_execfd(&execfd, fdtype) < 0) goto error; - close(memfd); - memfd = newfd; -#endif - return memfd; + return execfd; +error_binfd: + close(binfd); error: - close(memfd); + close(execfd); return -EIO; } +/* Get cheap access to the environment. */ +extern char **environ; + int ensure_cloned_binary(void) { int execfd; - char **argv = NULL, **envp = NULL; + char **argv = NULL; /* Check that we're not self-cloned, and if we are then bail. */ int cloned = is_self_cloned(); if (cloned > 0 || cloned == -ENOTRECOVERABLE) return cloned; - if (fetchve(&argv, &envp) < 0) + if (fetchve(&argv) < 0) return -EINVAL; execfd = clone_binary(); if (execfd < 0) return -EIO; - fexecve(execfd, argv, envp); + if (putenv(CLONED_BINARY_ENV "=1")) + goto error; + + fexecve(execfd, argv, environ); +error: + close(execfd); return -ENOEXEC; } diff --git a/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go index e8ffac9fa58..6507f0e6968 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go @@ -158,10 +158,8 @@ func (p *setnsProcess) execSetns() error { } // Clean up the zombie parent process - firstChildProcess, err := os.FindProcess(pid.PidFirstChild) - if err != nil { - return err - } + // On Unix systems FindProcess always succeeds. + firstChildProcess, _ := os.FindProcess(pid.PidFirstChild) // Ignore the error in case the child has already been reaped for any reason _, _ = firstChildProcess.Wait() @@ -236,6 +234,14 @@ func (p *initProcess) getChildPid() (int, error) { p.cmd.Wait() return -1, err } + + // Clean up the zombie parent process + // On Unix systems FindProcess always succeeds. + firstChildProcess, _ := os.FindProcess(pid.PidFirstChild) + + // Ignore the error in case the child has already been reaped for any reason + _, _ = firstChildProcess.Wait() + return pid.Pid, nil } diff --git a/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go index 6bd6da74ace..f13b226e444 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go @@ -182,6 +182,33 @@ func mountCmd(cmd configs.Command) error { return nil } +func prepareBindMount(m *configs.Mount, rootfs string) error { + stat, err := os.Stat(m.Source) + if err != nil { + // error out if the source of a bind mount does not exist as we will be + // unable to bind anything to it. + return err + } + // ensure that the destination of the bind mount is resolved of symlinks at mount time because + // any previous mounts can invalidate the next mount's destination. + // this can happen when a user specifies mounts within other mounts to cause breakouts or other + // evil stuff to try to escape the container's rootfs. + var dest string + if dest, err = securejoin.SecureJoin(rootfs, m.Destination); err != nil { + return err + } + if err := checkMountDestination(rootfs, dest); err != nil { + return err + } + // update the mount with the correct dest after symlinks are resolved. + m.Destination = dest + if err := createIfNotExists(dest, stat.IsDir()); err != nil { + return err + } + + return nil +} + func mountToRootfs(m *configs.Mount, rootfs, mountLabel string, enableCgroupns bool) error { var ( dest = m.Destination @@ -257,25 +284,7 @@ func mountToRootfs(m *configs.Mount, rootfs, mountLabel string, enableCgroupns b } return nil case "bind": - stat, err := os.Stat(m.Source) - if err != nil { - // error out if the source of a bind mount does not exist as we will be - // unable to bind anything to it. - return err - } - // ensure that the destination of the bind mount is resolved of symlinks at mount time because - // any previous mounts can invalidate the next mount's destination. - // this can happen when a user specifies mounts within other mounts to cause breakouts or other - // evil stuff to try to escape the container's rootfs. - if dest, err = securejoin.SecureJoin(rootfs, m.Destination); err != nil { - return err - } - if err := checkMountDestination(rootfs, dest); err != nil { - return err - } - // update the mount with the correct dest after symlinks are resolved. - m.Destination = dest - if err := createIfNotExists(dest, stat.IsDir()); err != nil { + if err := prepareBindMount(m, rootfs); err != nil { return err } if err := mountPropagate(m, rootfs, mountLabel); err != nil { diff --git a/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go index 6613bb65cb5..888981f5291 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go @@ -34,6 +34,10 @@ func (l *linuxSetnsInit) Init() error { defer runtime.UnlockOSThread() if !l.config.Config.NoNewKeyring { + if err := label.SetKeyLabel(l.config.ProcessLabel); err != nil { + return err + } + defer label.SetKeyLabel("") // Do not inherit the parent's session keyring. if _, err := keys.JoinSessionKeyring(l.getSessionRingName()); err != nil { // Same justification as in standart_init_linux.go as to why we diff --git a/vendor/github.com/opencontainers/runc/libcontainer/specconv/spec_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/specconv/spec_linux.go index a1579892363..f68cac011a6 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/specconv/spec_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/specconv/spec_linux.go @@ -325,7 +325,7 @@ func createCgroupConfig(opts *CreateOpts) (*configs.Cgroup, error) { // for e.g. "system.slice:docker:1234" parts := strings.Split(myCgroupPath, ":") if len(parts) != 3 { - return nil, fmt.Errorf("expected cgroupsPath to be of format \"slice:prefix:name\" for systemd cgroups") + return nil, fmt.Errorf("expected cgroupsPath to be of format \"slice:prefix:name\" for systemd cgroups, got %q instead", myCgroupPath) } c.Parent = parts[0] c.ScopePrefix = parts[1] diff --git a/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go index ad7ee8d8c8a..4e03b8bc058 100644 --- a/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go +++ b/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go @@ -48,6 +48,10 @@ func (l *linuxStandardInit) Init() error { runtime.LockOSThread() defer runtime.UnlockOSThread() if !l.config.Config.NoNewKeyring { + if err := label.SetKeyLabel(l.config.ProcessLabel); err != nil { + return err + } + defer label.SetKeyLabel("") ringname, keepperms, newperms := l.getSessionRingParams() // Do not inherit the parent's session keyring. diff --git a/vendor/github.com/opencontainers/runc/utils_linux.go b/vendor/github.com/opencontainers/runc/utils_linux.go index a37b1c3dfa4..ce50db14537 100644 --- a/vendor/github.com/opencontainers/runc/utils_linux.go +++ b/vendor/github.com/opencontainers/runc/utils_linux.go @@ -3,7 +3,6 @@ package main import ( - "errors" "fmt" "net" "os" @@ -20,6 +19,7 @@ import ( "github.com/opencontainers/runtime-spec/specs-go" "github.com/coreos/go-systemd/activation" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/urfave/cli" "golang.org/x/sys/unix" @@ -281,6 +281,11 @@ func (r *runner) run(config *specs.Process) (int, error) { } baseFd := 3 + len(process.ExtraFiles) for i := baseFd; i < baseFd+r.preserveFDs; i++ { + _, err := os.Stat(fmt.Sprintf("/proc/self/fd/%d", i)) + if err != nil { + r.destroy() + return -1, errors.Wrapf(err, "please check that preserved-fd %d (of %d) is present", i-baseFd, r.preserveFDs) + } process.ExtraFiles = append(process.ExtraFiles, os.NewFile(uintptr(i), "PreserveFD:"+strconv.Itoa(i))) } rootuid, err := r.container.Config().HostRootUID() diff --git a/vendor/github.com/opencontainers/runc/vendor.conf b/vendor/github.com/opencontainers/runc/vendor.conf index 3ffe719fce5..48dfc952d20 100644 --- a/vendor/github.com/opencontainers/runc/vendor.conf +++ b/vendor/github.com/opencontainers/runc/vendor.conf @@ -1,10 +1,11 @@ # OCI runtime-spec. When updating this, make sure you use a version tag rather # than a commit ID so it's much more obvious what version of the spec we are # using. -github.com/opencontainers/runtime-spec 5684b8af48c1ac3b1451fa499724e30e3c20a294 +github.com/opencontainers/runtime-spec 29686dbc5559d93fb1ef402eeda3e35c38d75af4 # Core libcontainer functionality. +github.com/checkpoint-restore/go-criu v3.11 github.com/mrunalp/fileutils ed869b029674c0e9ce4c0dfa781405c2d9946d08 -github.com/opencontainers/selinux v1.0.0-rc1 +github.com/opencontainers/selinux v1.2 github.com/seccomp/libseccomp-golang 84e90a91acea0f4e51e62bc1a75de18b1fc0790f github.com/sirupsen/logrus a3f95b5c423586578a4e099b11a46c2479628cac github.com/syndtr/gocapability db04d3cc01c8b54962a58ec7e491717d06cfcc16 diff --git a/vendor/github.com/opencontainers/selinux/.travis.yml b/vendor/github.com/opencontainers/selinux/.travis.yml index 159575f2f38..8bc494531ef 100644 --- a/vendor/github.com/opencontainers/selinux/.travis.yml +++ b/vendor/github.com/opencontainers/selinux/.travis.yml @@ -1,7 +1,7 @@ language: go go: - - 1.8.x - - 1.9.x + - 1.10.x + - 1.11.x - tip - master @@ -10,7 +10,7 @@ env: - BUILDTAGS="selinux" before_install: - - go get -u github.com/golang/lint/golint + - go get -u golang.org/x/lint/golint - go get -u github.com/vbatts/git-validation script: diff --git a/vendor/github.com/opencontainers/selinux/Makefile b/vendor/github.com/opencontainers/selinux/Makefile index 86672b61045..e7861439aa9 100644 --- a/vendor/github.com/opencontainers/selinux/Makefile +++ b/vendor/github.com/opencontainers/selinux/Makefile @@ -8,6 +8,7 @@ endif .PHONY: test test: check-gopath go test -timeout 3m -tags "${BUILDTAGS}" ${TESTFLAGS} -v ./... + go test -timeout 3m ${TESTFLAGS} -v ./... .PHONY: lint: diff --git a/vendor/github.com/opencontainers/selinux/README.md b/vendor/github.com/opencontainers/selinux/README.md index 043a9293718..04594bd4e68 100644 --- a/vendor/github.com/opencontainers/selinux/README.md +++ b/vendor/github.com/opencontainers/selinux/README.md @@ -5,3 +5,14 @@ Common SELinux package used across the container ecosystem. Please see the [godoc](https://godoc.org/github.com/opencontainers/selinux) for more information. + +## Code of Conduct + +Participation in the OpenContainers community is governed by [OpenContainer's Code of Conduct][code-of-conduct]. + +## Security + +If you find an issue, please follow the [security][security] protocol to report it. + +[security]: https://github.com/opencontainers/org/blob/master/security +[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md diff --git a/vendor/github.com/opencontainers/selinux/VERSION b/vendor/github.com/opencontainers/selinux/VERSION new file mode 100644 index 00000000000..b6bb93f7c78 --- /dev/null +++ b/vendor/github.com/opencontainers/selinux/VERSION @@ -0,0 +1 @@ +1.3.0-dev diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go index 6cfc5fded85..e178568fd34 100644 --- a/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go +++ b/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go @@ -9,7 +9,7 @@ func InitLabels(options []string) (string, string, error) { return "", "", nil } -func GetROMountLabel() string { +func ROMountLabel() string { return "" } @@ -25,7 +25,27 @@ func SetProcessLabel(processLabel string) error { return nil } -func GetFileLabel(path string) (string, error) { +func ProcessLabel() (string, error) { + return "", nil +} + +func SetSocketLabel(processLabel string) error { + return nil +} + +func SocketLabel() (string, error) { + return "", nil +} + +func SetKeyLabel(processLabel string) error { + return nil +} + +func KeyLabel() (string, error) { + return "", nil +} + +func FileLabel(path string) (string, error) { return "", nil } @@ -41,13 +61,18 @@ func Relabel(path string, fileLabel string, shared bool) error { return nil } -func GetPidLabel(pid int) (string, error) { +func PidLabel(pid int) (string, error) { return "", nil } func Init() { } +// ClearLabels clears all reserved labels +func ClearLabels() { + return +} + func ReserveLabel(label string) error { return nil } @@ -58,8 +83,8 @@ func ReleaseLabel(label string) error { // DupSecOpt takes a process label and returns security options that // can be used to set duplicate labels on future container processes -func DupSecOpt(src string) []string { - return nil +func DupSecOpt(src string) ([]string, error) { + return nil, nil } // DisableSecOpt returns a security opt that can disable labeling diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go index f0a055b87e7..1eb9a6bf252 100644 --- a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go +++ b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go @@ -4,6 +4,8 @@ package label import ( "fmt" + "os" + "os/user" "strings" "github.com/opencontainers/selinux/go-selinux" @@ -24,17 +26,29 @@ var ErrIncompatibleLabel = fmt.Errorf("Bad SELinux option z and Z can not be use // the container. A list of options can be passed into this function to alter // the labels. The labels returned will include a random MCS String, that is // guaranteed to be unique. -func InitLabels(options []string) (string, string, error) { +func InitLabels(options []string) (plabel string, mlabel string, Err error) { if !selinux.GetEnabled() { return "", "", nil } processLabel, mountLabel := selinux.ContainerLabels() if processLabel != "" { - pcon := selinux.NewContext(processLabel) - mcon := selinux.NewContext(mountLabel) + defer func() { + if Err != nil { + ReleaseLabel(mountLabel) + } + }() + pcon, err := selinux.NewContext(processLabel) + if err != nil { + return "", "", err + } + + mcon, err := selinux.NewContext(mountLabel) + if err != nil { + return "", "", err + } for _, opt := range options { if opt == "disable" { - return "", "", nil + return "", mountLabel, nil } if i := strings.Index(opt, ":"); i == -1 { return "", "", fmt.Errorf("Bad label option %q, valid options 'disable' or \n'user, role, level, type' followed by ':' and a value", opt) @@ -90,6 +104,28 @@ func SetProcessLabel(processLabel string) error { return selinux.SetExecLabel(processLabel) } +// SetSocketLabel takes a process label and tells the kernel to assign the +// label to the next socket that gets created +func SetSocketLabel(processLabel string) error { + return selinux.SetSocketLabel(processLabel) +} + +// SocketLabel retrieves the current default socket label setting +func SocketLabel() (string, error) { + return selinux.SocketLabel() +} + +// SetKeyLabel takes a process label and tells the kernel to assign the +// label to the next kernel keyring that gets created +func SetKeyLabel(processLabel string) error { + return selinux.SetKeyLabel(processLabel) +} + +// KeyLabel retrieves the current default kernel keyring label setting +func KeyLabel() (string, error) { + return selinux.KeyLabel() +} + // ProcessLabel returns the process label that the kernel will assign // to the next program executed by the current process. If "" is returned // this indicates that the default labeling will happen for the process. @@ -97,7 +133,7 @@ func ProcessLabel() (string, error) { return selinux.ExecLabel() } -// GetFileLabel returns the label for specified path +// FileLabel returns the label for specified path func FileLabel(path string) (string, error) { return selinux.FileLabel(path) } @@ -130,13 +166,56 @@ func Relabel(path string, fileLabel string, shared bool) error { return nil } - exclude_paths := map[string]bool{"/": true, "/usr": true, "/etc": true, "/tmp": true, "/home": true, "/run": true, "/var": true, "/root": true} + exclude_paths := map[string]bool{ + "/": true, + "/bin": true, + "/boot": true, + "/dev": true, + "/etc": true, + "/etc/passwd": true, + "/etc/pki": true, + "/etc/shadow": true, + "/home": true, + "/lib": true, + "/lib64": true, + "/media": true, + "/opt": true, + "/proc": true, + "/root": true, + "/run": true, + "/sbin": true, + "/srv": true, + "/sys": true, + "/tmp": true, + "/usr": true, + "/var": true, + "/var/lib": true, + "/var/log": true, + } + + if home := os.Getenv("HOME"); home != "" { + exclude_paths[home] = true + } + + if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" { + if usr, err := user.Lookup(sudoUser); err == nil { + exclude_paths[usr.HomeDir] = true + } + } + + if path != "/" { + path = strings.TrimSuffix(path, "/") + } if exclude_paths[path] { return fmt.Errorf("SELinux relabeling of %s is not allowed", path) } if shared { - c := selinux.NewContext(fileLabel) + c, err := selinux.NewContext(fileLabel) + if err != nil { + return err + } + c["level"] = "s0" fileLabel = c.Get() } @@ -156,6 +235,11 @@ func Init() { selinux.GetEnabled() } +// ClearLabels will clear all reserved labels +func ClearLabels() { + selinux.ClearLabels() +} + // ReserveLabel will record the fact that the MCS label has already been used. // This will prevent InitLabels from using the MCS label in a newly created // container @@ -174,7 +258,7 @@ func ReleaseLabel(label string) error { // DupSecOpt takes a process label and returns security options that // can be used to set duplicate labels on future container processes -func DupSecOpt(src string) []string { +func DupSecOpt(src string) ([]string, error) { return selinux.DupSecOpt(src) } diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go index 5dc09a51eb2..51fa8de68a3 100644 --- a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go +++ b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go @@ -52,6 +52,8 @@ var ( ErrMCSAlreadyExists = errors.New("MCS label already exists") // ErrEmptyPath is returned when an empty path has been specified. ErrEmptyPath = errors.New("empty path") + // InvalidLabel is returned when an invalid label is specified. + InvalidLabel = errors.New("Invalid Label") assignRegex = regexp.MustCompile(`^([^=]+)=(.*)$`) roFileLabel string @@ -331,6 +333,11 @@ func writeCon(fpath string, val string) error { if fpath == "" { return ErrEmptyPath } + if val == "" { + if !GetEnabled() { + return nil + } + } out, err := os.OpenFile(fpath, os.O_WRONLY, 0) if err != nil { @@ -385,6 +392,28 @@ func SetExecLabel(label string) error { return writeCon(fmt.Sprintf("/proc/self/task/%d/attr/exec", syscall.Gettid()), label) } +// SetSocketLabel takes a process label and tells the kernel to assign the +// label to the next socket that gets created +func SetSocketLabel(label string) error { + return writeCon(fmt.Sprintf("/proc/self/task/%d/attr/sockcreate", syscall.Gettid()), label) +} + +// SocketLabel retrieves the current socket label setting +func SocketLabel() (string, error) { + return readCon(fmt.Sprintf("/proc/self/task/%d/attr/sockcreate", syscall.Gettid())) +} + +// SetKeyLabel takes a process label and tells the kernel to assign the +// label to the next kernel keyring that gets created +func SetKeyLabel(label string) error { + return writeCon("/proc/self/attr/keycreate", label) +} + +// KeyLabel retrieves the current kernel keyring label setting +func KeyLabel() (string, error) { + return readCon("/proc/self/attr/keycreate") +} + // Get returns the Context as a string func (c Context) Get() string { if c["level"] != "" { @@ -394,11 +423,14 @@ func (c Context) Get() string { } // NewContext creates a new Context struct from the specified label -func NewContext(label string) Context { +func NewContext(label string) (Context, error) { c := make(Context) if len(label) != 0 { con := strings.SplitN(label, ":", 4) + if len(con) < 3 { + return c, InvalidLabel + } c["user"] = con[0] c["role"] = con[1] c["type"] = con[2] @@ -406,7 +438,14 @@ func NewContext(label string) Context { c["level"] = con[3] } } - return c + return c, nil +} + +// ClearLabels clears all reserved labels +func ClearLabels() { + state.Lock() + state.mcsList = make(map[string]bool) + state.Unlock() } // ReserveLabel reserves the MLS/MCS level component of the specified label @@ -612,12 +651,12 @@ func ContainerLabels() (processLabel string, fileLabel string) { roFileLabel = fileLabel } exit: - scon := NewContext(processLabel) + scon, _ := NewContext(processLabel) if scon["level"] != "" { mcs := uniqMcs(1024) scon["level"] = mcs processLabel = scon.Get() - scon = NewContext(fileLabel) + scon, _ = NewContext(fileLabel) scon["level"] = mcs fileLabel = scon.Get() } @@ -643,8 +682,14 @@ func CopyLevel(src, dest string) (string, error) { if err := SecurityCheckContext(dest); err != nil { return "", err } - scon := NewContext(src) - tcon := NewContext(dest) + scon, err := NewContext(src) + if err != nil { + return "", err + } + tcon, err := NewContext(dest) + if err != nil { + return "", err + } mcsDelete(tcon["level"]) mcsAdd(scon["level"]) tcon["level"] = scon["level"] @@ -680,7 +725,11 @@ func Chcon(fpath string, label string, recurse bool) error { return err } callback := func(p string, info os.FileInfo, err error) error { - return SetFileLabel(p, label) + e := SetFileLabel(p, label) + if os.IsNotExist(e) { + return nil + } + return e } if recurse { @@ -692,15 +741,18 @@ func Chcon(fpath string, label string, recurse bool) error { // DupSecOpt takes an SELinux process label and returns security options that // can be used to set the SELinux Type and Level for future container processes. -func DupSecOpt(src string) []string { +func DupSecOpt(src string) ([]string, error) { if src == "" { - return nil + return nil, nil + } + con, err := NewContext(src) + if err != nil { + return nil, err } - con := NewContext(src) if con["user"] == "" || con["role"] == "" || con["type"] == "" { - return nil + return nil, nil } dup := []string{"user:" + con["user"], "role:" + con["role"], @@ -711,7 +763,7 @@ func DupSecOpt(src string) []string { dup = append(dup, "level:"+con["level"]) } - return dup + return dup, nil } // DisableSecOpt returns a security opt that can be used to disable SELinux diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go index 4dbfd83edaa..79b005d194c 100644 --- a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go +++ b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go @@ -96,15 +96,44 @@ func SetExecLabel(label string) error { return nil } +/* +SetSocketLabel sets the SELinux label that the kernel will use for any programs +that are executed by the current process thread, or an error. +*/ +func SetSocketLabel(label string) error { + return nil +} + +// SocketLabel retrieves the current socket label setting +func SocketLabel() (string, error) { + return "", nil +} + +// SetKeyLabel takes a process label and tells the kernel to assign the +// label to the next kernel keyring that gets created +func SetKeyLabel(label string) error { + return nil +} + +// KeyLabel retrieves the current kernel keyring label setting +func KeyLabel() (string, error) { + return "", nil +} + // Get returns the Context as a string func (c Context) Get() string { return "" } // NewContext creates a new Context struct from the specified label -func NewContext(label string) Context { +func NewContext(label string) (Context, error) { c := make(Context) - return c + return c, nil +} + +// ClearLabels clears all reserved MLS/MCS levels +func ClearLabels() { + return } // ReserveLabel reserves the MLS/MCS level component of the specified label @@ -177,8 +206,8 @@ func Chcon(fpath string, label string, recurse bool) error { // DupSecOpt takes an SELinux process label and returns security options that // can be used to set the SELinux Type and Level for future container processes. -func DupSecOpt(src string) []string { - return nil +func DupSecOpt(src string) ([]string, error) { + return nil, nil } // DisableSecOpt returns a security opt that can be used to disable SELinux diff --git a/vendor/github.com/prometheus/client_golang/.gitignore b/vendor/github.com/prometheus/client_golang/.gitignore index f6fc2e8eb2e..5725b80fd90 100644 --- a/vendor/github.com/prometheus/client_golang/.gitignore +++ b/vendor/github.com/prometheus/client_golang/.gitignore @@ -7,6 +7,10 @@ _obj _test +# Examples +/examples/simple/simple +/examples/random/random + # Architecture specific extensions/prefixes *.[568vq] [568vq].out diff --git a/vendor/github.com/prometheus/client_golang/.travis.yml b/vendor/github.com/prometheus/client_golang/.travis.yml index 85b51152ec0..a5cbf7585f8 100644 --- a/vendor/github.com/prometheus/client_golang/.travis.yml +++ b/vendor/github.com/prometheus/client_golang/.travis.yml @@ -2,9 +2,12 @@ sudo: false language: go go: - - 1.6.3 - - 1.7 - - 1.8.1 + - 1.7.x # See README.md for current minimum version. + - 1.8.x + - 1.9.x + - 1.10.x + - 1.11.x script: - - go test -short ./... + - make check_license style unused test-short + - if [[ ! $TRAVIS_GO_VERSION =~ ^1\.(7|8|9)\.[x0-9]+$ ]]; then make staticcheck; fi diff --git a/vendor/github.com/prometheus/client_golang/CHANGELOG.md b/vendor/github.com/prometheus/client_golang/CHANGELOG.md index 330788a4ee4..fcfa112d6ad 100644 --- a/vendor/github.com/prometheus/client_golang/CHANGELOG.md +++ b/vendor/github.com/prometheus/client_golang/CHANGELOG.md @@ -1,3 +1,75 @@ +## 0.9.2 / 2018-12-06 +* [FEATURE] Support for Go modules. #501 +* [FEATURE] `Timer.ObserveDuration` returns observed duration. #509 +* [ENHANCEMENT] Improved doc comments and error messages. #504 +* [BUGFIX] Fix race condition during metrics gathering. #512 +* [BUGFIX] Fix testutil metric comparison for Histograms and empty labels. #494 + #498 + +## 0.9.1 / 2018-11-03 +* [FEATURE] Add `WriteToTextfile` function to facilitate the creation of + *.prom files for the textfile collector of the node exporter. #489 +* [ENHANCEMENT] More descriptive error messages for inconsistent label + cardinality. #487 +* [ENHANCEMENT] Exposition: Use a GZIP encoder pool to avoid allocations in + high-frequency scrape scenarios. #366 +* [ENHANCEMENT] Exposition: Streaming serving of metrics data while encoding. + #482 +* [ENHANCEMENT] API client: Add a way to return the body of a 5xx response. + #479 + +## 0.9.0 / 2018-10-15 +* [CHANGE] Go1.6 is no longer supported. +* [CHANGE] More refinements of the `Registry` consistency checks: Duplicated + labels are now detected, but inconsistent label dimensions are now allowed. + Collisions with the “magic†metric and label names in Summaries and + Histograms are detected now. #108 #417 #471 +* [CHANGE] Changed `ProcessCollector` constructor. #219 +* [CHANGE] Changed Go counter `go_memstats_heap_released_bytes_total` to gauge + `go_memstats_heap_released_bytes`. #229 +* [CHANGE] Unexported `LabelPairSorter`. #453 +* [CHANGE] Removed the `Untyped` metric from direct instrumentation. #340 +* [CHANGE] Unexported `MetricVec`. #319 +* [CHANGE] Removed deprecated `Set` method from `Counter` #247 +* [CHANGE] Removed deprecated `RegisterOrGet` and `MustRegisterOrGet`. #247 +* [CHANGE] API client: Introduced versioned packages. +* [FEATURE] A `Registerer` can be wrapped with prefixes and labels. #357 +* [FEATURE] “Describe by collect†helper function. #239 +* [FEATURE] Added package `testutil`. #58 +* [FEATURE] Timestamp can be explicitly set for const metrics. #187 +* [FEATURE] “Unchecked†collectors are possible now without cheating. #47 +* [FEATURE] Pushing to the Pushgateway reworked in package `push` to support + many new features. (The old functions are still usable but deprecated.) #372 + #341 +* [FEATURE] Configurable connection limit for scrapes. #179 +* [FEATURE] New HTTP middlewares to instrument `http.Handler` and + `http.RoundTripper`. The old middlewares and the pre-instrumented `/metrics` + handler are (strongly) deprecated. #316 #57 #101 #224 +* [FEATURE] “Currying†for metric vectors. #320 +* [FEATURE] A `Summary` can be created without quantiles. #118 +* [FEATURE] Added a `Timer` helper type. #231 +* [FEATURE] Added a Graphite bridge. #197 +* [FEATURE] Help strings are now optional. #460 +* [FEATURE] Added `process_virtual_memory_max_bytes` metric. #438 #440 +* [FEATURE] Added `go_gc_cpu_fraction` and `go_threads` metrics. #281 #277 +* [FEATURE] Added `promauto` package with auto-registering metrics. #385 #393 +* [FEATURE] Add `SetToCurrentTime` method to `Gauge`. #259 +* [FEATURE] API client: Add AlertManager, Status, and Target methods. #402 +* [FEATURE] API client: Add admin methods. #398 +* [FEATURE] API client: Support series API. #361 +* [FEATURE] API client: Support querying label values. +* [ENHANCEMENT] Smarter creation of goroutines during scraping. Solves memory + usage spikes in certain situations. #369 +* [ENHANCEMENT] Counters are now faster if dealing with integers only. #367 +* [ENHANCEMENT] Improved label validation. #274 #335 +* [BUGFIX] Creating a const metric with an invalid `Desc` returns an error. #460 +* [BUGFIX] Histogram observations don't race any longer with exposition. #275 +* [BUGFIX] Fixed goroutine leaks. #236 #472 +* [BUGFIX] Fixed an error message for exponential histogram buckets. #467 +* [BUGFIX] Fixed data race writing to the metric map. #401 +* [BUGFIX] API client: Decode JSON on a 4xx respons but do not on 204 + responses. #476 #414 + ## 0.8.0 / 2016-08-17 * [CHANGE] Registry is doing more consistency checks. This might break existing setups that used to export inconsistent metrics. diff --git a/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md b/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md index 40503edbf18..e015a85cbbe 100644 --- a/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md +++ b/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md @@ -16,3 +16,5 @@ Prometheus uses GitHub to manage reviews of pull requests. and the _Formatting and style_ section of Peter Bourgon's [Go: Best Practices for Production Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style). + +* Be sure to sign off on the [DCO](https://github.com/probot/dco#how-it-works) diff --git a/vendor/github.com/prometheus/client_golang/Dockerfile b/vendor/github.com/prometheus/client_golang/Dockerfile new file mode 100644 index 00000000000..211f22b9dba --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/Dockerfile @@ -0,0 +1,23 @@ +# This Dockerfile builds an image for a client_golang example. +# +# Use as (from the root for the client_golang repository): +# docker build -f examples/$name/Dockerfile -t prometheus/golang-example-$name . + +# Builder image, where we build the example. +FROM golang:1 AS builder +WORKDIR /go/src/github.com/prometheus/client_golang +COPY . . +WORKDIR /go/src/github.com/prometheus/client_golang/prometheus +RUN go get -d +WORKDIR /go/src/github.com/prometheus/client_golang/examples/random +RUN CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -ldflags '-w' +WORKDIR /go/src/github.com/prometheus/client_golang/examples/simple +RUN CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -ldflags '-w' + +# Final image. +FROM prom/busybox +LABEL maintainer="The Prometheus Authors " +COPY --from=builder /go/src/github.com/prometheus/client_golang/examples/random \ + /go/src/github.com/prometheus/client_golang/examples/simple ./ +EXPOSE 8080 +CMD echo Please run an example. Either /random or /simple diff --git a/vendor/github.com/prometheus/client_golang/MAINTAINERS.md b/vendor/github.com/prometheus/client_golang/MAINTAINERS.md index 3ede55fe186..66668ad0124 100644 --- a/vendor/github.com/prometheus/client_golang/MAINTAINERS.md +++ b/vendor/github.com/prometheus/client_golang/MAINTAINERS.md @@ -1 +1,2 @@ -* Björn Rabenstein +* Krasi Georgiev for `api/...` +* Björn Rabenstein for everything else diff --git a/vendor/github.com/prometheus/client_golang/Makefile b/vendor/github.com/prometheus/client_golang/Makefile new file mode 100644 index 00000000000..443c360b929 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/Makefile @@ -0,0 +1,32 @@ +# Copyright 2018 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include Makefile.common + +# http.CloseNotifier is deprecated but we don't want to remove support +# from client_golang to not break anybody still using it. +STATICCHECK_IGNORE = \ + github.com/prometheus/client_golang/prometheus/promhttp/delegator*.go:SA1019 \ + github.com/prometheus/client_golang/prometheus/promhttp/instrument_server_test.go:SA1019 \ + github.com/prometheus/client_golang/prometheus/http.go:SA1019 + +.PHONY: get_dep +get_dep: + @echo ">> getting dependencies" + $(GO) get -t ./... + +.PHONY: test +test: get_dep common-test + +.PHONY: test-short +test-short: get_dep common-test-short diff --git a/vendor/github.com/prometheus/client_golang/Makefile.common b/vendor/github.com/prometheus/client_golang/Makefile.common new file mode 100644 index 00000000000..741579e60f2 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/Makefile.common @@ -0,0 +1,223 @@ +# Copyright 2018 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# A common Makefile that includes rules to be reused in different prometheus projects. +# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! + +# Example usage : +# Create the main Makefile in the root project directory. +# include Makefile.common +# customTarget: +# @echo ">> Running customTarget" +# + +# Ensure GOBIN is not set during build so that promu is installed to the correct path +unexport GOBIN + +GO ?= go +GOFMT ?= $(GO)fmt +FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) +GOOPTS ?= + +GO_VERSION ?= $(shell $(GO) version) +GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) +PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') + +unexport GOVENDOR +ifeq (, $(PRE_GO_111)) + ifneq (,$(wildcard go.mod)) + # Enforce Go modules support just in case the directory is inside GOPATH (and for Travis CI). + GO111MODULE := on + + ifneq (,$(wildcard vendor)) + # Always use the local vendor/ directory to satisfy the dependencies. + GOOPTS := $(GOOPTS) -mod=vendor + endif + endif +else + ifneq (,$(wildcard go.mod)) + ifneq (,$(wildcard vendor)) +$(warning This repository requires Go >= 1.11 because of Go modules) +$(warning Some recipes may not work as expected as the current Go runtime is '$(GO_VERSION_NUMBER)') + endif + else + # This repository isn't using Go modules (yet). + GOVENDOR := $(FIRST_GOPATH)/bin/govendor + endif + + unexport GO111MODULE +endif +PROMU := $(FIRST_GOPATH)/bin/promu +STATICCHECK := $(FIRST_GOPATH)/bin/staticcheck +pkgs = ./... + +GO_VERSION ?= $(shell $(GO) version) +GO_BUILD_PLATFORM ?= $(subst /,-,$(lastword $(GO_VERSION))) + +PROMU_VERSION ?= 0.2.0 +PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz + +PREFIX ?= $(shell pwd) +BIN_DIR ?= $(shell pwd) +DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) +DOCKER_REPO ?= prom + +.PHONY: all +all: precheck style staticcheck unused build test + +# This rule is used to forward a target like "build" to "common-build". This +# allows a new "build" target to be defined in a Makefile which includes this +# one and override "common-build" without override warnings. +%: common-% ; + +.PHONY: common-style +common-style: + @echo ">> checking code style" + @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ + if [ -n "$${fmtRes}" ]; then \ + echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ + echo "Please ensure you are using $$($(GO) version) for formatting code."; \ + exit 1; \ + fi + +.PHONY: common-check_license +common-check_license: + @echo ">> checking license header" + @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ + awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ + done); \ + if [ -n "$${licRes}" ]; then \ + echo "license header checking failed:"; echo "$${licRes}"; \ + exit 1; \ + fi + +.PHONY: common-test-short +common-test-short: + @echo ">> running short tests" + GO111MODULE=$(GO111MODULE) $(GO) test -short $(GOOPTS) $(pkgs) + +.PHONY: common-test +common-test: + @echo ">> running all tests" + GO111MODULE=$(GO111MODULE) $(GO) test -race $(GOOPTS) $(pkgs) + +.PHONY: common-format +common-format: + @echo ">> formatting code" + GO111MODULE=$(GO111MODULE) $(GO) fmt $(GOOPTS) $(pkgs) + +.PHONY: common-vet +common-vet: + @echo ">> vetting code" + GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs) + +.PHONY: common-staticcheck +common-staticcheck: $(STATICCHECK) + @echo ">> running staticcheck" +ifdef GO111MODULE + GO111MODULE=$(GO111MODULE) $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" -checks "SA*" $(pkgs) +else + $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) +endif + +.PHONY: common-unused +common-unused: $(GOVENDOR) +ifdef GOVENDOR + @echo ">> running check for unused packages" + @$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages' +else +ifdef GO111MODULE + @echo ">> running check for unused/missing packages in go.mod" + GO111MODULE=$(GO111MODULE) $(GO) mod tidy + @git diff --exit-code -- go.sum go.mod +ifneq (,$(wildcard vendor)) + @echo ">> running check for unused packages in vendor/" + GO111MODULE=$(GO111MODULE) $(GO) mod vendor + @git diff --exit-code -- go.sum go.mod vendor/ +endif +endif +endif + +.PHONY: common-build +common-build: promu + @echo ">> building binaries" + GO111MODULE=$(GO111MODULE) $(PROMU) build --prefix $(PREFIX) + +.PHONY: common-tarball +common-tarball: promu + @echo ">> building release tarball" + $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) + +.PHONY: common-docker +common-docker: + docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . + +.PHONY: common-docker-publish +common-docker-publish: + docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" + +.PHONY: common-docker-tag-latest +common-docker-tag-latest: + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):latest" + +.PHONY: promu +promu: $(PROMU) + +$(PROMU): + curl -s -L $(PROMU_URL) | tar -xvz -C /tmp + mkdir -v -p $(FIRST_GOPATH)/bin + cp -v /tmp/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(PROMU) + +.PHONY: proto +proto: + @echo ">> generating code from proto files" + @./scripts/genproto.sh + +.PHONY: $(STATICCHECK) +$(STATICCHECK): +ifdef GO111MODULE +# Get staticcheck from a temporary directory to avoid modifying the local go.{mod,sum}. +# See https://github.com/golang/go/issues/27643. +# For now, we are using the next branch of staticcheck because master isn't compatible yet with Go modules. + tmpModule=$$(mktemp -d 2>&1) && \ + mkdir -p $${tmpModule}/staticcheck && \ + cd "$${tmpModule}"/staticcheck && \ + GO111MODULE=on $(GO) mod init example.com/staticcheck && \ + GO111MODULE=on GOOS= GOARCH= $(GO) get -u honnef.co/go/tools/cmd/staticcheck@next && \ + rm -rf $${tmpModule}; +else + GOOS= GOARCH= GO111MODULE=off $(GO) get -u honnef.co/go/tools/cmd/staticcheck +endif + +ifdef GOVENDOR +.PHONY: $(GOVENDOR) +$(GOVENDOR): + GOOS= GOARCH= $(GO) get -u github.com/kardianos/govendor +endif + +.PHONY: precheck +precheck:: + +define PRECHECK_COMMAND_template = +precheck:: $(1)_precheck + + +PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) +.PHONY: $(1)_precheck +$(1)_precheck: + @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ + echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ + exit 1; \ + fi +endef diff --git a/vendor/github.com/prometheus/client_golang/README.md b/vendor/github.com/prometheus/client_golang/README.md index 479290d27b3..894a6a3e242 100644 --- a/vendor/github.com/prometheus/client_golang/README.md +++ b/vendor/github.com/prometheus/client_golang/README.md @@ -2,12 +2,63 @@ [![Build Status](https://travis-ci.org/prometheus/client_golang.svg?branch=master)](https://travis-ci.org/prometheus/client_golang) [![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/client_golang)](https://goreportcard.com/report/github.com/prometheus/client_golang) +[![go-doc](https://godoc.org/github.com/prometheus/client_golang?status.svg)](https://godoc.org/github.com/prometheus/client_golang) This is the [Go](http://golang.org) client library for [Prometheus](http://prometheus.io). It has two separate parts, one for instrumenting application code, and one for creating clients that talk to the Prometheus HTTP API. +__This library requires Go1.7 or later.__ + +## Important note about releases, versioning, tagging, and stability + +While our goal is to follow [Semantic Versioning](https://semver.org/), this +repository is still pre-1.0.0. To quote the +[Semantic Versioning spec](https://semver.org/#spec-item-4): “Anything may +change at any time. The public API should not be considered stable.†We know +that this is at odds with the widespread use of this library. However, just +declaring something 1.0.0 doesn't make it 1.0.0. Instead, we are working +towards a 1.0.0 release that actually deserves its major version number. + +Having said that, we aim for always keeping the tip of master in a workable +state. We occasionally tag versions and track their changes in CHANGELOG.md, +but this happens mostly to keep dependency management tools happy and to give +people a handle they can talk about easily. In particular, all commits in the +master branch have passed the same testing and reviewing. There is no QA +process in place that would render tagged commits more stable or better tested +than others. + +There is a plan behind the current (pre-1.0.0) versioning, though: + +- v0.9 is the “production releaseâ€, currently tracked in the master + branch. “Patch†releases will usually be just bug fixes, indeed, but + important new features that do not require invasive code changes might also + be included in those. We do not plan any breaking changes from one v0.9.x + release to any later v0.9.y release, but nothing is guaranteed. Since the + master branch will eventually be switched over to track the upcoming v0.10 + (see below), we recommend to tell your dependency management tool of choice + to use the latest v0.9.x release, at least for your production software. In + that way, you should get bug fixes and non-invasive, low-risk new features + without the need to change anything on your part. +- v0.10 is a planned release that will have a _lot_ of breaking changes + (despite being only a “minor†release in the Semantic Versioning terminology, + but as said, pre-1.0.0 means nothing is guaranteed). Essentially, we have + been piling up feature requests that require breaking changes for a while, + and they are all collected in the + [v0.10 milestone](https://github.com/prometheus/client_golang/milestone/2). + Since there will be so many breaking changes, the development for v0.10 is + currently not happening in the master branch, but in the + [dev-0.10 branch](https://github.com/prometheus/client_golang/tree/dev-0.10). + It will violently change for a while, and it will definitely be in a + non-working state now and then. It should only be used for sneak-peaks and + discussions of the new features and designs. +- Once v0.10 is ready for real-life use, it will be merged into the master + branch (which is the reason why you should lock your dependency management + tool to v0.9.x and only migrate to v0.10 when both you and v0.10 are ready + for it). In the ideal case, v0.10 will be the basis for the future v1.0 + release, but we cannot provide an ETA at this time. + ## Instrumenting applications [![code-coverage](http://gocover.io/_badge/github.com/prometheus/client_golang/prometheus)](http://gocover.io/github.com/prometheus/client_golang/prometheus) [![go-doc](https://godoc.org/github.com/prometheus/client_golang/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/prometheus) @@ -15,8 +66,8 @@ Prometheus HTTP API. The [`prometheus` directory](https://github.com/prometheus/client_golang/tree/master/prometheus) contains the instrumentation library. See the -[best practices section](http://prometheus.io/docs/practices/naming/) of the -Prometheus documentation to learn more about instrumenting applications. +[guide](https://prometheus.io/docs/guides/go-application/) on the Prometheus +website to learn more about instrumenting applications. The [`examples` directory](https://github.com/prometheus/client_golang/tree/master/examples) @@ -24,7 +75,7 @@ contains simple examples of instrumented code. ## Client for the Prometheus HTTP API -[![code-coverage](http://gocover.io/_badge/github.com/prometheus/client_golang/api/prometheus)](http://gocover.io/github.com/prometheus/client_golang/api/prometheus) [![go-doc](https://godoc.org/github.com/prometheus/client_golang/api/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/api/prometheus) +[![code-coverage](http://gocover.io/_badge/github.com/prometheus/client_golang/api/prometheus/v1)](http://gocover.io/github.com/prometheus/client_golang/api/prometheus/v1) [![go-doc](https://godoc.org/github.com/prometheus/client_golang/api/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/api) The [`api/prometheus` directory](https://github.com/prometheus/client_golang/tree/master/api/prometheus) diff --git a/vendor/github.com/prometheus/client_golang/VERSION b/vendor/github.com/prometheus/client_golang/VERSION index a3df0a6959e..2003b639c40 100644 --- a/vendor/github.com/prometheus/client_golang/VERSION +++ b/vendor/github.com/prometheus/client_golang/VERSION @@ -1 +1 @@ -0.8.0 +0.9.2 diff --git a/vendor/github.com/prometheus/client_golang/go.mod b/vendor/github.com/prometheus/client_golang/go.mod new file mode 100644 index 00000000000..6ec1588cb5f --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/go.mod @@ -0,0 +1,12 @@ +module github.com/prometheus/client_golang + +require ( + github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 + github.com/golang/protobuf v1.2.0 + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 + github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 + github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a + golang.org/x/net v0.0.0-20181201002055-351d144fa1fc + golang.org/x/sync v0.0.0-20181108010431-42b317875d0f // indirect +) diff --git a/vendor/github.com/prometheus/client_golang/go.sum b/vendor/github.com/prometheus/client_golang/go.sum new file mode 100644 index 00000000000..181c46d3382 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/go.sum @@ -0,0 +1,16 @@ +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collector.go index 623d3d83fef..c0d70b2faf1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/collector.go @@ -29,27 +29,72 @@ type Collector interface { // collected by this Collector to the provided channel and returns once // the last descriptor has been sent. The sent descriptors fulfill the // consistency and uniqueness requirements described in the Desc - // documentation. (It is valid if one and the same Collector sends - // duplicate descriptors. Those duplicates are simply ignored. However, - // two different Collectors must not send duplicate descriptors.) This - // method idempotently sends the same descriptors throughout the - // lifetime of the Collector. If a Collector encounters an error while - // executing this method, it must send an invalid descriptor (created - // with NewInvalidDesc) to signal the error to the registry. + // documentation. + // + // It is valid if one and the same Collector sends duplicate + // descriptors. Those duplicates are simply ignored. However, two + // different Collectors must not send duplicate descriptors. + // + // Sending no descriptor at all marks the Collector as “uncheckedâ€, + // i.e. no checks will be performed at registration time, and the + // Collector may yield any Metric it sees fit in its Collect method. + // + // This method idempotently sends the same descriptors throughout the + // lifetime of the Collector. It may be called concurrently and + // therefore must be implemented in a concurrency safe way. + // + // If a Collector encounters an error while executing this method, it + // must send an invalid descriptor (created with NewInvalidDesc) to + // signal the error to the registry. Describe(chan<- *Desc) // Collect is called by the Prometheus registry when collecting // metrics. The implementation sends each collected metric via the // provided channel and returns once the last metric has been sent. The - // descriptor of each sent metric is one of those returned by - // Describe. Returned metrics that share the same descriptor must differ - // in their variable label values. This method may be called - // concurrently and must therefore be implemented in a concurrency safe - // way. Blocking occurs at the expense of total performance of rendering - // all registered metrics. Ideally, Collector implementations support - // concurrent readers. + // descriptor of each sent metric is one of those returned by Describe + // (unless the Collector is unchecked, see above). Returned metrics that + // share the same descriptor must differ in their variable label + // values. + // + // This method may be called concurrently and must therefore be + // implemented in a concurrency safe way. Blocking occurs at the expense + // of total performance of rendering all registered metrics. Ideally, + // Collector implementations support concurrent readers. Collect(chan<- Metric) } +// DescribeByCollect is a helper to implement the Describe method of a custom +// Collector. It collects the metrics from the provided Collector and sends +// their descriptors to the provided channel. +// +// If a Collector collects the same metrics throughout its lifetime, its +// Describe method can simply be implemented as: +// +// func (c customCollector) Describe(ch chan<- *Desc) { +// DescribeByCollect(c, ch) +// } +// +// However, this will not work if the metrics collected change dynamically over +// the lifetime of the Collector in a way that their combined set of descriptors +// changes as well. The shortcut implementation will then violate the contract +// of the Describe method. If a Collector sometimes collects no metrics at all +// (for example vectors like CounterVec, GaugeVec, etc., which only collect +// metrics after a metric with a fully specified label set has been accessed), +// it might even get registered as an unchecked Collecter (cf. the Register +// method of the Registerer interface). Hence, only use this shortcut +// implementation of Describe if you are certain to fulfill the contract. +// +// The Collector example demonstrates a use of DescribeByCollect. +func DescribeByCollect(c Collector, descs chan<- *Desc) { + metrics := make(chan Metric) + go func() { + c.Collect(metrics) + close(metrics) + }() + for m := range metrics { + descs <- m.Desc() + } +} + // selfCollector implements Collector for a single Metric so that the Metric // collects itself. Add it as an anonymous field to a struct that implements // Metric, and call init with the Metric itself as an argument. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index 72d5256a508..d463e36d3e9 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -15,6 +15,10 @@ package prometheus import ( "errors" + "math" + "sync/atomic" + + dto "github.com/prometheus/client_model/go" ) // Counter is a Metric that represents a single numerical value that only ever @@ -42,6 +46,14 @@ type Counter interface { type CounterOpts Opts // NewCounter creates a new Counter based on the provided CounterOpts. +// +// The returned implementation tracks the counter value in two separate +// variables, a float64 and a uint64. The latter is used to track calls of the +// Inc method and calls of the Add method with a value that can be represented +// as a uint64. This allows atomic increments of the counter with optimal +// performance. (It is common to have an Inc call in very hot execution paths.) +// Both internal tracking values are added up in the Write method. This has to +// be taken into account when it comes to precision and overflow behavior. func NewCounter(opts CounterOpts) Counter { desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), @@ -49,20 +61,58 @@ func NewCounter(opts CounterOpts) Counter { nil, opts.ConstLabels, ) - result := &counter{value: value{desc: desc, valType: CounterValue, labelPairs: desc.constLabelPairs}} + result := &counter{desc: desc, labelPairs: desc.constLabelPairs} result.init(result) // Init self-collection. return result } type counter struct { - value + // valBits contains the bits of the represented float64 value, while + // valInt stores values that are exact integers. Both have to go first + // in the struct to guarantee alignment for atomic operations. + // http://golang.org/pkg/sync/atomic/#pkg-note-BUG + valBits uint64 + valInt uint64 + + selfCollector + desc *Desc + + labelPairs []*dto.LabelPair +} + +func (c *counter) Desc() *Desc { + return c.desc } func (c *counter) Add(v float64) { if v < 0 { panic(errors.New("counter cannot decrease in value")) } - c.value.Add(v) + ival := uint64(v) + if float64(ival) == v { + atomic.AddUint64(&c.valInt, ival) + return + } + + for { + oldBits := atomic.LoadUint64(&c.valBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + v) + if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits) { + return + } + } +} + +func (c *counter) Inc() { + atomic.AddUint64(&c.valInt, 1) +} + +func (c *counter) Write(out *dto.Metric) error { + fval := math.Float64frombits(atomic.LoadUint64(&c.valBits)) + ival := atomic.LoadUint64(&c.valInt) + val := fval + float64(ival) + + return populateMetric(CounterValue, val, c.labelPairs, out) } // CounterVec is a Collector that bundles a set of Counters that all share the @@ -70,16 +120,12 @@ func (c *counter) Add(v float64) { // if you want to count the same thing partitioned by various dimensions // (e.g. number of HTTP requests, partitioned by response code and // method). Create instances with NewCounterVec. -// -// CounterVec embeds MetricVec. See there for a full list of methods with -// detailed documentation. type CounterVec struct { - *MetricVec + *metricVec } // NewCounterVec creates a new CounterVec based on the provided CounterOpts and -// partitioned by the given label names. At least one label name must be -// provided. +// partitioned by the given label names. func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), @@ -88,34 +134,62 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { opts.ConstLabels, ) return &CounterVec{ - MetricVec: newMetricVec(desc, func(lvs ...string) Metric { - result := &counter{value: value{ - desc: desc, - valType: CounterValue, - labelPairs: makeLabelPairs(desc, lvs), - }} + metricVec: newMetricVec(desc, func(lvs ...string) Metric { + if len(lvs) != len(desc.variableLabels) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) + } + result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} result.init(result) // Init self-collection. return result }), } } -// GetMetricWithLabelValues replaces the method of the same name in -// MetricVec. The difference is that this method returns a Counter and not a -// Metric so that no type conversion is required. -func (m *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) { - metric, err := m.MetricVec.GetMetricWithLabelValues(lvs...) +// GetMetricWithLabelValues returns the Counter for the given slice of label +// values (same order as the VariableLabels in Desc). If that combination of +// label values is accessed for the first time, a new Counter is created. +// +// It is possible to call this method without using the returned Counter to only +// create the new Counter but leave it at its starting value 0. See also the +// SummaryVec example. +// +// Keeping the Counter for later use is possible (and should be considered if +// performance is critical), but keep in mind that Reset, DeleteLabelValues and +// Delete can be used to delete the Counter from the CounterVec. In that case, +// the Counter will still exist, but it will not be exported anymore, even if a +// Counter with the same label values is created later. +// +// An error is returned if the number of label values is not the same as the +// number of VariableLabels in Desc (minus any curried labels). +// +// Note that for more than one label value, this method is prone to mistakes +// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as +// an alternative to avoid that type of mistake. For higher label numbers, the +// latter has a much more readable (albeit more verbose) syntax, but it comes +// with a performance overhead (for creating and processing the Labels map). +// See also the GaugeVec example. +func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) { + metric, err := v.metricVec.getMetricWithLabelValues(lvs...) if metric != nil { return metric.(Counter), err } return nil, err } -// GetMetricWith replaces the method of the same name in MetricVec. The -// difference is that this method returns a Counter and not a Metric so that no -// type conversion is required. -func (m *CounterVec) GetMetricWith(labels Labels) (Counter, error) { - metric, err := m.MetricVec.GetMetricWith(labels) +// GetMetricWith returns the Counter for the given Labels map (the label names +// must match those of the VariableLabels in Desc). If that label map is +// accessed for the first time, a new Counter is created. Implications of +// creating a Counter without using it and keeping the Counter for later use are +// the same as for GetMetricWithLabelValues. +// +// An error is returned if the number and names of the Labels are inconsistent +// with those of the VariableLabels in Desc (minus any curried labels). +// +// This method is used for the same purpose as +// GetMetricWithLabelValues(...string). See there for pros and cons of the two +// methods. +func (v *CounterVec) GetMetricWith(labels Labels) (Counter, error) { + metric, err := v.metricVec.getMetricWith(labels) if metric != nil { return metric.(Counter), err } @@ -123,18 +197,57 @@ func (m *CounterVec) GetMetricWith(labels Labels) (Counter, error) { } // WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. By not returning an -// error, WithLabelValues allows shortcuts like +// GetMetricWithLabelValues would have returned an error. Not returning an +// error allows shortcuts like // myVec.WithLabelValues("404", "GET").Add(42) -func (m *CounterVec) WithLabelValues(lvs ...string) Counter { - return m.MetricVec.WithLabelValues(lvs...).(Counter) +func (v *CounterVec) WithLabelValues(lvs ...string) Counter { + c, err := v.GetMetricWithLabelValues(lvs...) + if err != nil { + panic(err) + } + return c } // With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. By not returning an error, With allows shortcuts like -// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -func (m *CounterVec) With(labels Labels) Counter { - return m.MetricVec.With(labels).(Counter) +// returned an error. Not returning an error allows shortcuts like +// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) +func (v *CounterVec) With(labels Labels) Counter { + c, err := v.GetMetricWith(labels) + if err != nil { + panic(err) + } + return c +} + +// CurryWith returns a vector curried with the provided labels, i.e. the +// returned vector has those labels pre-set for all labeled operations performed +// on it. The cardinality of the curried vector is reduced accordingly. The +// order of the remaining labels stays the same (just with the curried labels +// taken out of the sequence – which is relevant for the +// (GetMetric)WithLabelValues methods). It is possible to curry a curried +// vector, but only with labels not yet used for currying before. +// +// The metrics contained in the CounterVec are shared between the curried and +// uncurried vectors. They are just accessed differently. Curried and uncurried +// vectors behave identically in terms of collection. Only one must be +// registered with a given registry (usually the uncurried version). The Reset +// method deletes all metrics, even if called on a curried vector. +func (v *CounterVec) CurryWith(labels Labels) (*CounterVec, error) { + vec, err := v.curryWith(labels) + if vec != nil { + return &CounterVec{vec}, err + } + return nil, err +} + +// MustCurryWith works as CurryWith but panics where CurryWith would have +// returned an error. +func (v *CounterVec) MustCurryWith(labels Labels) *CounterVec { + vec, err := v.CurryWith(labels) + if err != nil { + panic(err) + } + return vec } // CounterFunc is a Counter whose value is determined at collect time by calling a diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go index 1835b16f65c..1d034f871cb 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go @@ -25,19 +25,6 @@ import ( dto "github.com/prometheus/client_model/go" ) -// reservedLabelPrefix is a prefix which is not legal in user-supplied -// label names. -const reservedLabelPrefix = "__" - -// Labels represents a collection of label name -> value mappings. This type is -// commonly used with the With(Labels) and GetMetricWith(Labels) methods of -// metric vector Collectors, e.g.: -// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -// -// The other use-case is the specification of constant label pairs in Opts or to -// create a Desc. -type Labels map[string]string - // Desc is the descriptor used by every Prometheus Metric. It is essentially // the immutable meta-data of a Metric. The normal Metric implementations // included in this package manage their Desc under the hood. Users only have to @@ -80,24 +67,19 @@ type Desc struct { // NewDesc allocates and initializes a new Desc. Errors are recorded in the Desc // and will be reported on registration time. variableLabels and constLabels can -// be nil if no such labels should be set. fqName and help must not be empty. +// be nil if no such labels should be set. fqName must not be empty. // // variableLabels only contain the label names. Their label values are variable // and therefore not part of the Desc. (They are managed within the Metric.) // // For constLabels, the label values are constant. Therefore, they are fully -// specified in the Desc. See the Opts documentation for the implications of -// constant labels. +// specified in the Desc. See the Collector example for a usage pattern. func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) *Desc { d := &Desc{ fqName: fqName, help: help, variableLabels: variableLabels, } - if help == "" { - d.err = errors.New("empty help string") - return d - } if !model.IsValidMetricName(model.LabelValue(fqName)) { d.err = fmt.Errorf("%q is not a valid metric name", fqName) return d @@ -111,7 +93,7 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * // First add only the const label names and sort them... for labelName := range constLabels { if !checkLabelName(labelName) { - d.err = fmt.Errorf("%q is not a valid label name", labelName) + d.err = fmt.Errorf("%q is not a valid label name for metric %q", labelName, fqName) return d } labelNames = append(labelNames, labelName) @@ -122,12 +104,18 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * for _, labelName := range labelNames { labelValues = append(labelValues, constLabels[labelName]) } + // Validate the const label values. They can't have a wrong cardinality, so + // use in len(labelValues) as expectedNumberOfValues. + if err := validateLabelValues(labelValues, len(labelValues)); err != nil { + d.err = err + return d + } // Now add the variable label names, but prefix them with something that // cannot be in a regular label name. That prevents matching the label // dimension with a different mix between preset and variable labels. for _, labelName := range variableLabels { if !checkLabelName(labelName) { - d.err = fmt.Errorf("%q is not a valid label name", labelName) + d.err = fmt.Errorf("%q is not a valid label name for metric %q", labelName, fqName) return d } labelNames = append(labelNames, "$"+labelName) @@ -137,6 +125,7 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * d.err = errors.New("duplicate label names") return d } + vh := hashNew() for _, val := range labelValues { vh = hashAdd(vh, val) @@ -163,7 +152,7 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * Value: proto.String(v), }) } - sort.Sort(LabelPairSorter(d.constLabelPairs)) + sort.Sort(labelPairSorter(d.constLabelPairs)) return d } @@ -193,8 +182,3 @@ func (d *Desc) String() string { d.variableLabels, ) } - -func checkLabelName(l string) bool { - return model.LabelName(l).IsValid() && - !strings.HasPrefix(l, reservedLabelPrefix) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go index 278969dc7cd..5d9525defc8 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go @@ -11,10 +11,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package prometheus provides metrics primitives to instrument code for -// monitoring. It also offers a registry for metrics. Sub-packages allow to -// expose the registered metrics via HTTP (package promhttp) or push them to a -// Pushgateway (package push). +// Package prometheus is the core instrumentation package. It provides metrics +// primitives to instrument code for monitoring. It also offers a registry for +// metrics. Sub-packages allow to expose the registered metrics via HTTP +// (package promhttp) or push them to a Pushgateway (package push). There is +// also a sub-package promauto, which provides metrics constructors with +// automatic registration. // // All exported functions and methods are safe to be used concurrently unless // specified otherwise. @@ -60,7 +62,7 @@ // // The Handler function provides a default handler to expose metrics // // via an HTTP server. "/metrics" is the usual endpoint for that. // http.Handle("/metrics", promhttp.Handler()) -// log.Fatal(http.ListenAndServe(":8080", nil)) +// log.Fatal(http.ListenAndServe(":8080", nil)) // } // // @@ -72,7 +74,10 @@ // The number of exported identifiers in this package might appear a bit // overwhelming. However, in addition to the basic plumbing shown in the example // above, you only need to understand the different metric types and their -// vector versions for basic usage. +// vector versions for basic usage. Furthermore, if you are not concerned with +// fine-grained control of when and how to register metrics with the registry, +// have a look at the promauto package, which will effectively allow you to +// ignore registration altogether in simple cases. // // Above, you have already touched the Counter and the Gauge. There are two more // advanced metric types: the Summary and Histogram. A more thorough description @@ -116,7 +121,17 @@ // NewConstSummary (and their respective Must… versions). That will happen in // the Collect method. The Describe method has to return separate Desc // instances, representative of the “throw-away†metrics to be created later. -// NewDesc comes in handy to create those Desc instances. +// NewDesc comes in handy to create those Desc instances. Alternatively, you +// could return no Desc at all, which will marke the Collector “uncheckedâ€. No +// checks are porformed at registration time, but metric consistency will still +// be ensured at scrape time, i.e. any inconsistencies will lead to scrape +// errors. Thus, with unchecked Collectors, the responsibility to not collect +// metrics that lead to inconsistencies in the total scrape result lies with the +// implementer of the Collector. While this is not a desirable state, it is +// sometimes necessary. The typical use case is a situatios where the exact +// metrics to be returned by a Collector cannot be predicted at registration +// time, but the implementer has sufficient knowledge of the whole system to +// guarantee metric consistency. // // The Collector example illustrates the use case. You can also look at the // source code of the processCollector (mirroring process metrics), the @@ -145,7 +160,7 @@ // registry. // // So far, everything we did operated on the so-called default registry, as it -// can be found in the global DefaultRegistry variable. With NewRegistry, you +// can be found in the global DefaultRegisterer variable. With NewRegistry, you // can create a custom registry, or you can even implement the Registerer or // Gatherer interfaces yourself. The methods Register and Unregister work in the // same way on a custom registry as the global functions Register and Unregister @@ -153,11 +168,11 @@ // // There are a number of uses for custom registries: You can use registries with // special properties, see NewPedanticRegistry. You can avoid global state, as -// it is imposed by the DefaultRegistry. You can use multiple registries at the -// same time to expose different metrics in different ways. You can use separate -// registries for testing purposes. +// it is imposed by the DefaultRegisterer. You can use multiple registries at +// the same time to expose different metrics in different ways. You can use +// separate registries for testing purposes. // -// Also note that the DefaultRegistry comes registered with a Collector for Go +// Also note that the DefaultRegisterer comes registered with a Collector for Go // runtime metrics (via NewGoCollector) and a Collector for process metrics (via // NewProcessCollector). With a custom registry, you are in control and decide // yourself about the Collectors to register. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go index e3b67df8ac0..3d383a735c3 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go @@ -1,3 +1,16 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package prometheus // Inline and byte-free variant of hash/fnv's fnv64a. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index 9ab5a3d6218..71d406bd92a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -13,6 +13,14 @@ package prometheus +import ( + "math" + "sync/atomic" + "time" + + dto "github.com/prometheus/client_model/go" +) + // Gauge is a Metric that represents a single numerical value that can // arbitrarily go up and down. // @@ -48,13 +56,74 @@ type Gauge interface { type GaugeOpts Opts // NewGauge creates a new Gauge based on the provided GaugeOpts. +// +// The returned implementation is optimized for a fast Set method. If you have a +// choice for managing the value of a Gauge via Set vs. Inc/Dec/Add/Sub, pick +// the former. For example, the Inc method of the returned Gauge is slower than +// the Inc method of a Counter returned by NewCounter. This matches the typical +// scenarios for Gauges and Counters, where the former tends to be Set-heavy and +// the latter Inc-heavy. func NewGauge(opts GaugeOpts) Gauge { - return newValue(NewDesc( + desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), opts.Help, nil, opts.ConstLabels, - ), GaugeValue, 0) + ) + result := &gauge{desc: desc, labelPairs: desc.constLabelPairs} + result.init(result) // Init self-collection. + return result +} + +type gauge struct { + // valBits contains the bits of the represented float64 value. It has + // to go first in the struct to guarantee alignment for atomic + // operations. http://golang.org/pkg/sync/atomic/#pkg-note-BUG + valBits uint64 + + selfCollector + + desc *Desc + labelPairs []*dto.LabelPair +} + +func (g *gauge) Desc() *Desc { + return g.desc +} + +func (g *gauge) Set(val float64) { + atomic.StoreUint64(&g.valBits, math.Float64bits(val)) +} + +func (g *gauge) SetToCurrentTime() { + g.Set(float64(time.Now().UnixNano()) / 1e9) +} + +func (g *gauge) Inc() { + g.Add(1) +} + +func (g *gauge) Dec() { + g.Add(-1) +} + +func (g *gauge) Add(val float64) { + for { + oldBits := atomic.LoadUint64(&g.valBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + val) + if atomic.CompareAndSwapUint64(&g.valBits, oldBits, newBits) { + return + } + } +} + +func (g *gauge) Sub(val float64) { + g.Add(val * -1) +} + +func (g *gauge) Write(out *dto.Metric) error { + val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) + return populateMetric(GaugeValue, val, g.labelPairs, out) } // GaugeVec is a Collector that bundles a set of Gauges that all share the same @@ -63,12 +132,11 @@ func NewGauge(opts GaugeOpts) Gauge { // (e.g. number of operations queued, partitioned by user and operation // type). Create instances with NewGaugeVec. type GaugeVec struct { - *MetricVec + *metricVec } // NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and -// partitioned by the given label names. At least one label name must be -// provided. +// partitioned by the given label names. func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), @@ -77,28 +145,62 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { opts.ConstLabels, ) return &GaugeVec{ - MetricVec: newMetricVec(desc, func(lvs ...string) Metric { - return newValue(desc, GaugeValue, 0, lvs...) + metricVec: newMetricVec(desc, func(lvs ...string) Metric { + if len(lvs) != len(desc.variableLabels) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) + } + result := &gauge{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} + result.init(result) // Init self-collection. + return result }), } } -// GetMetricWithLabelValues replaces the method of the same name in -// MetricVec. The difference is that this method returns a Gauge and not a -// Metric so that no type conversion is required. -func (m *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) { - metric, err := m.MetricVec.GetMetricWithLabelValues(lvs...) +// GetMetricWithLabelValues returns the Gauge for the given slice of label +// values (same order as the VariableLabels in Desc). If that combination of +// label values is accessed for the first time, a new Gauge is created. +// +// It is possible to call this method without using the returned Gauge to only +// create the new Gauge but leave it at its starting value 0. See also the +// SummaryVec example. +// +// Keeping the Gauge for later use is possible (and should be considered if +// performance is critical), but keep in mind that Reset, DeleteLabelValues and +// Delete can be used to delete the Gauge from the GaugeVec. In that case, the +// Gauge will still exist, but it will not be exported anymore, even if a +// Gauge with the same label values is created later. See also the CounterVec +// example. +// +// An error is returned if the number of label values is not the same as the +// number of VariableLabels in Desc (minus any curried labels). +// +// Note that for more than one label value, this method is prone to mistakes +// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as +// an alternative to avoid that type of mistake. For higher label numbers, the +// latter has a much more readable (albeit more verbose) syntax, but it comes +// with a performance overhead (for creating and processing the Labels map). +func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) { + metric, err := v.metricVec.getMetricWithLabelValues(lvs...) if metric != nil { return metric.(Gauge), err } return nil, err } -// GetMetricWith replaces the method of the same name in MetricVec. The -// difference is that this method returns a Gauge and not a Metric so that no -// type conversion is required. -func (m *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) { - metric, err := m.MetricVec.GetMetricWith(labels) +// GetMetricWith returns the Gauge for the given Labels map (the label names +// must match those of the VariableLabels in Desc). If that label map is +// accessed for the first time, a new Gauge is created. Implications of +// creating a Gauge without using it and keeping the Gauge for later use are +// the same as for GetMetricWithLabelValues. +// +// An error is returned if the number and names of the Labels are inconsistent +// with those of the VariableLabels in Desc (minus any curried labels). +// +// This method is used for the same purpose as +// GetMetricWithLabelValues(...string). See there for pros and cons of the two +// methods. +func (v *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) { + metric, err := v.metricVec.getMetricWith(labels) if metric != nil { return metric.(Gauge), err } @@ -106,18 +208,57 @@ func (m *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) { } // WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. By not returning an -// error, WithLabelValues allows shortcuts like +// GetMetricWithLabelValues would have returned an error. Not returning an +// error allows shortcuts like // myVec.WithLabelValues("404", "GET").Add(42) -func (m *GaugeVec) WithLabelValues(lvs ...string) Gauge { - return m.MetricVec.WithLabelValues(lvs...).(Gauge) +func (v *GaugeVec) WithLabelValues(lvs ...string) Gauge { + g, err := v.GetMetricWithLabelValues(lvs...) + if err != nil { + panic(err) + } + return g } // With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. By not returning an error, With allows shortcuts like -// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -func (m *GaugeVec) With(labels Labels) Gauge { - return m.MetricVec.With(labels).(Gauge) +// returned an error. Not returning an error allows shortcuts like +// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) +func (v *GaugeVec) With(labels Labels) Gauge { + g, err := v.GetMetricWith(labels) + if err != nil { + panic(err) + } + return g +} + +// CurryWith returns a vector curried with the provided labels, i.e. the +// returned vector has those labels pre-set for all labeled operations performed +// on it. The cardinality of the curried vector is reduced accordingly. The +// order of the remaining labels stays the same (just with the curried labels +// taken out of the sequence – which is relevant for the +// (GetMetric)WithLabelValues methods). It is possible to curry a curried +// vector, but only with labels not yet used for currying before. +// +// The metrics contained in the GaugeVec are shared between the curried and +// uncurried vectors. They are just accessed differently. Curried and uncurried +// vectors behave identically in terms of collection. Only one must be +// registered with a given registry (usually the uncurried version). The Reset +// method deletes all metrics, even if called on a curried vector. +func (v *GaugeVec) CurryWith(labels Labels) (*GaugeVec, error) { + vec, err := v.curryWith(labels) + if vec != nil { + return &GaugeVec{vec}, err + } + return nil, err +} + +// MustCurryWith works as CurryWith but panics where CurryWith would have +// returned an error. +func (v *GaugeVec) MustCurryWith(labels Labels) *GaugeVec { + vec, err := v.CurryWith(labels) + if err != nil { + panic(err) + } + return vec } // GaugeFunc is a Gauge whose value is determined at collect time by calling a diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index f96764559b5..ba3b9333edd 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -1,3 +1,16 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package prometheus import ( @@ -11,13 +24,18 @@ type goCollector struct { goroutinesDesc *Desc threadsDesc *Desc gcDesc *Desc + goInfoDesc *Desc // metrics to describe and collect metrics memStatsMetrics } -// NewGoCollector returns a collector which exports metrics about the current -// go process. +// NewGoCollector returns a collector which exports metrics about the current Go +// process. This includes memory stats. To collect those, runtime.ReadMemStats +// is called. This causes a stop-the-world, which is very short with Go1.9+ +// (~25µs). However, with older Go versions, the stop-the-world duration depends +// on the heap size and can be quite significant (~1.7 ms/GiB as per +// https://go-review.googlesource.com/c/go/+/34937). func NewGoCollector() Collector { return &goCollector{ goroutinesDesc: NewDesc( @@ -26,12 +44,16 @@ func NewGoCollector() Collector { nil, nil), threadsDesc: NewDesc( "go_threads", - "Number of OS threads created", + "Number of OS threads created.", nil, nil), gcDesc: NewDesc( "go_gc_duration_seconds", "A summary of the GC invocation durations.", nil, nil), + goInfoDesc: NewDesc( + "go_info", + "Information about the Go environment.", + nil, Labels{"version": runtime.Version()}), metrics: memStatsMetrics{ { desc: NewDesc( @@ -239,6 +261,7 @@ func (c *goCollector) Describe(ch chan<- *Desc) { ch <- c.goroutinesDesc ch <- c.threadsDesc ch <- c.gcDesc + ch <- c.goInfoDesc for _, i := range c.metrics { ch <- i.desc } @@ -259,7 +282,9 @@ func (c *goCollector) Collect(ch chan<- Metric) { quantiles[float64(idx+1)/float64(len(stats.PauseQuantiles)-1)] = pq.Seconds() } quantiles[0.0] = stats.PauseQuantiles[0].Seconds() - ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), float64(stats.PauseTotal.Seconds()), quantiles) + ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles) + + ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1) ms := &runtime.MemStats{} runtime.ReadMemStats(ms) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index f46eff6acfc..f88da707bc8 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -16,7 +16,9 @@ package prometheus import ( "fmt" "math" + "runtime" "sort" + "sync" "sync/atomic" "github.com/golang/protobuf/proto" @@ -108,8 +110,9 @@ func ExponentialBuckets(start, factor float64, count int) []float64 { } // HistogramOpts bundles the options for creating a Histogram metric. It is -// mandatory to set Name and Help to a non-empty string. All other fields are -// optional and can safely be left at their zero value. +// mandatory to set Name to a non-empty string. All other fields are optional +// and can safely be left at their zero value, although it is strongly +// encouraged to set a Help string. type HistogramOpts struct { // Namespace, Subsystem, and Name are components of the fully-qualified // name of the Histogram (created by joining these components with @@ -120,29 +123,22 @@ type HistogramOpts struct { Subsystem string Name string - // Help provides information about this Histogram. Mandatory! + // Help provides information about this Histogram. // // Metrics with the same fully-qualified name must have the same Help // string. Help string - // ConstLabels are used to attach fixed labels to this - // Histogram. Histograms with the same fully-qualified name must have the - // same label names in their ConstLabels. + // ConstLabels are used to attach fixed labels to this metric. Metrics + // with the same fully-qualified name must have the same label names in + // their ConstLabels. // - // Note that in most cases, labels have a value that varies during the - // lifetime of a process. Those labels are usually managed with a - // HistogramVec. ConstLabels serve only special purposes. One is for the - // special case where the value of a label does not change during the - // lifetime of a process, e.g. if the revision of the running binary is - // put into a label. Another, more advanced purpose is if more than one - // Collector needs to collect Histograms with the same fully-qualified - // name. In that case, those Summaries must differ in the values of - // their ConstLabels. See the Collector examples. - // - // If the value of a label never changes (not even between binaries), - // that label most likely should not be a label at all (but part of the - // metric name). + // ConstLabels are only used rarely. In particular, do not use them to + // attach the same labels to all your metrics. Those use cases are + // better covered by target labels set by the scraping Prometheus + // server, or by one specific metric (e.g. a build_info or a + // machine_role metric). See also + // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels ConstLabels Labels // Buckets defines the buckets into which observations are counted. Each @@ -169,7 +165,7 @@ func NewHistogram(opts HistogramOpts) Histogram { func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogram { if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, labelValues)) } for _, n := range desc.variableLabels { @@ -191,6 +187,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr desc: desc, upperBounds: opts.Buckets, labelPairs: makeLabelPairs(desc, labelValues), + counts: [2]*histogramCounts{&histogramCounts{}, &histogramCounts{}}, } for i, upperBound := range h.upperBounds { if i < len(h.upperBounds)-1 { @@ -207,28 +204,53 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr } } } - // Finally we know the final length of h.upperBounds and can make counts. - h.counts = make([]uint64, len(h.upperBounds)) + // Finally we know the final length of h.upperBounds and can make counts + // for both states: + h.counts[0].buckets = make([]uint64, len(h.upperBounds)) + h.counts[1].buckets = make([]uint64, len(h.upperBounds)) h.init(h) // Init self-collection. return h } -type histogram struct { +type histogramCounts struct { // sumBits contains the bits of the float64 representing the sum of all // observations. sumBits and count have to go first in the struct to // guarantee alignment for atomic operations. // http://golang.org/pkg/sync/atomic/#pkg-note-BUG sumBits uint64 count uint64 + buckets []uint64 +} + +type histogram struct { + // countAndHotIdx is a complicated one. For lock-free yet atomic + // observations, we need to save the total count of observations again, + // combined with the index of the currently-hot counts struct, so that + // we can perform the operation on both values atomically. The least + // significant bit defines the hot counts struct. The remaining 63 bits + // represent the total count of observations. This happens under the + // assumption that the 63bit count will never overflow. Rationale: An + // observations takes about 30ns. Let's assume it could happen in + // 10ns. Overflowing the counter will then take at least (2^63)*10ns, + // which is about 3000 years. + // + // This has to be first in the struct for 64bit alignment. See + // http://golang.org/pkg/sync/atomic/#pkg-note-BUG + countAndHotIdx uint64 selfCollector - // Note that there is no mutex required. - - desc *Desc + desc *Desc + writeMtx sync.Mutex // Only used in the Write method. upperBounds []float64 - counts []uint64 + + // Two counts, one is "hot" for lock-free observations, the other is + // "cold" for writing out a dto.Metric. It has to be an array of + // pointers to guarantee 64bit alignment of the histogramCounts, see + // http://golang.org/pkg/sync/atomic/#pkg-note-BUG. + counts [2]*histogramCounts + hotIdx int // Index of currently-hot counts. Only used within Write. labelPairs []*dto.LabelPair } @@ -248,36 +270,113 @@ func (h *histogram) Observe(v float64) { // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op // 300 buckets: 154 ns/op linear - binary 61.6 ns/op i := sort.SearchFloat64s(h.upperBounds, v) - if i < len(h.counts) { - atomic.AddUint64(&h.counts[i], 1) + + // We increment h.countAndHotIdx by 2 so that the counter in the upper + // 63 bits gets incremented by 1. At the same time, we get the new value + // back, which we can use to find the currently-hot counts. + n := atomic.AddUint64(&h.countAndHotIdx, 2) + hotCounts := h.counts[n%2] + + if i < len(h.upperBounds) { + atomic.AddUint64(&hotCounts.buckets[i], 1) } - atomic.AddUint64(&h.count, 1) for { - oldBits := atomic.LoadUint64(&h.sumBits) + oldBits := atomic.LoadUint64(&hotCounts.sumBits) newBits := math.Float64bits(math.Float64frombits(oldBits) + v) - if atomic.CompareAndSwapUint64(&h.sumBits, oldBits, newBits) { + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { break } } + // Increment count last as we take it as a signal that the observation + // is complete. + atomic.AddUint64(&hotCounts.count, 1) } func (h *histogram) Write(out *dto.Metric) error { - his := &dto.Histogram{} - buckets := make([]*dto.Bucket, len(h.upperBounds)) + var ( + his = &dto.Histogram{} + buckets = make([]*dto.Bucket, len(h.upperBounds)) + hotCounts, coldCounts *histogramCounts + count uint64 + ) - his.SampleSum = proto.Float64(math.Float64frombits(atomic.LoadUint64(&h.sumBits))) - his.SampleCount = proto.Uint64(atomic.LoadUint64(&h.count)) - var count uint64 + // For simplicity, we mutex the rest of this method. It is not in the + // hot path, i.e. Observe is called much more often than Write. The + // complication of making Write lock-free isn't worth it. + h.writeMtx.Lock() + defer h.writeMtx.Unlock() + + // This is a bit arcane, which is why the following spells out this if + // clause in English: + // + // If the currently-hot counts struct is #0, we atomically increment + // h.countAndHotIdx by 1 so that from now on Observe will use the counts + // struct #1. Furthermore, the atomic increment gives us the new value, + // which, in its most significant 63 bits, tells us the count of + // observations done so far up to and including currently ongoing + // observations still using the counts struct just changed from hot to + // cold. To have a normal uint64 for the count, we bitshift by 1 and + // save the result in count. We also set h.hotIdx to 1 for the next + // Write call, and we will refer to counts #1 as hotCounts and to counts + // #0 as coldCounts. + // + // If the currently-hot counts struct is #1, we do the corresponding + // things the other way round. We have to _decrement_ h.countAndHotIdx + // (which is a bit arcane in itself, as we have to express -1 with an + // unsigned int...). + if h.hotIdx == 0 { + count = atomic.AddUint64(&h.countAndHotIdx, 1) >> 1 + h.hotIdx = 1 + hotCounts = h.counts[1] + coldCounts = h.counts[0] + } else { + count = atomic.AddUint64(&h.countAndHotIdx, ^uint64(0)) >> 1 // Decrement. + h.hotIdx = 0 + hotCounts = h.counts[0] + coldCounts = h.counts[1] + } + + // Now we have to wait for the now-declared-cold counts to actually cool + // down, i.e. wait for all observations still using it to finish. That's + // the case once the count in the cold counts struct is the same as the + // one atomically retrieved from the upper 63bits of h.countAndHotIdx. + for { + if count == atomic.LoadUint64(&coldCounts.count) { + break + } + runtime.Gosched() // Let observations get work done. + } + + his.SampleCount = proto.Uint64(count) + his.SampleSum = proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))) + var cumCount uint64 for i, upperBound := range h.upperBounds { - count += atomic.LoadUint64(&h.counts[i]) + cumCount += atomic.LoadUint64(&coldCounts.buckets[i]) buckets[i] = &dto.Bucket{ - CumulativeCount: proto.Uint64(count), + CumulativeCount: proto.Uint64(cumCount), UpperBound: proto.Float64(upperBound), } } + his.Bucket = buckets out.Histogram = his out.Label = h.labelPairs + + // Finally add all the cold counts to the new hot counts and reset the cold counts. + atomic.AddUint64(&hotCounts.count, count) + atomic.StoreUint64(&coldCounts.count, 0) + for { + oldBits := atomic.LoadUint64(&hotCounts.sumBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + his.GetSampleSum()) + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { + atomic.StoreUint64(&coldCounts.sumBits, 0) + break + } + } + for i := range h.upperBounds { + atomic.AddUint64(&hotCounts.buckets[i], atomic.LoadUint64(&coldCounts.buckets[i])) + atomic.StoreUint64(&coldCounts.buckets[i], 0) + } return nil } @@ -287,12 +386,11 @@ func (h *histogram) Write(out *dto.Metric) error { // (e.g. HTTP request latencies, partitioned by status code and method). Create // instances with NewHistogramVec. type HistogramVec struct { - *MetricVec + *metricVec } // NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and -// partitioned by the given label names. At least one label name must be -// provided. +// partitioned by the given label names. func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec { desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), @@ -301,28 +399,58 @@ func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec { opts.ConstLabels, ) return &HistogramVec{ - MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + metricVec: newMetricVec(desc, func(lvs ...string) Metric { return newHistogram(desc, opts, lvs...) }), } } -// GetMetricWithLabelValues replaces the method of the same name in -// MetricVec. The difference is that this method returns an Observer and not a -// Metric so that no type conversion to an Observer is required. -func (m *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { - metric, err := m.MetricVec.GetMetricWithLabelValues(lvs...) +// GetMetricWithLabelValues returns the Histogram for the given slice of label +// values (same order as the VariableLabels in Desc). If that combination of +// label values is accessed for the first time, a new Histogram is created. +// +// It is possible to call this method without using the returned Histogram to only +// create the new Histogram but leave it at its starting value, a Histogram without +// any observations. +// +// Keeping the Histogram for later use is possible (and should be considered if +// performance is critical), but keep in mind that Reset, DeleteLabelValues and +// Delete can be used to delete the Histogram from the HistogramVec. In that case, the +// Histogram will still exist, but it will not be exported anymore, even if a +// Histogram with the same label values is created later. See also the CounterVec +// example. +// +// An error is returned if the number of label values is not the same as the +// number of VariableLabels in Desc (minus any curried labels). +// +// Note that for more than one label value, this method is prone to mistakes +// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as +// an alternative to avoid that type of mistake. For higher label numbers, the +// latter has a much more readable (albeit more verbose) syntax, but it comes +// with a performance overhead (for creating and processing the Labels map). +// See also the GaugeVec example. +func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { + metric, err := v.metricVec.getMetricWithLabelValues(lvs...) if metric != nil { return metric.(Observer), err } return nil, err } -// GetMetricWith replaces the method of the same name in MetricVec. The -// difference is that this method returns an Observer and not a Metric so that no -// type conversion to an Observer is required. -func (m *HistogramVec) GetMetricWith(labels Labels) (Observer, error) { - metric, err := m.MetricVec.GetMetricWith(labels) +// GetMetricWith returns the Histogram for the given Labels map (the label names +// must match those of the VariableLabels in Desc). If that label map is +// accessed for the first time, a new Histogram is created. Implications of +// creating a Histogram without using it and keeping the Histogram for later use +// are the same as for GetMetricWithLabelValues. +// +// An error is returned if the number and names of the Labels are inconsistent +// with those of the VariableLabels in Desc (minus any curried labels). +// +// This method is used for the same purpose as +// GetMetricWithLabelValues(...string). See there for pros and cons of the two +// methods. +func (v *HistogramVec) GetMetricWith(labels Labels) (Observer, error) { + metric, err := v.metricVec.getMetricWith(labels) if metric != nil { return metric.(Observer), err } @@ -330,18 +458,57 @@ func (m *HistogramVec) GetMetricWith(labels Labels) (Observer, error) { } // WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. By not returning an -// error, WithLabelValues allows shortcuts like +// GetMetricWithLabelValues would have returned an error. Not returning an +// error allows shortcuts like // myVec.WithLabelValues("404", "GET").Observe(42.21) -func (m *HistogramVec) WithLabelValues(lvs ...string) Observer { - return m.MetricVec.WithLabelValues(lvs...).(Observer) +func (v *HistogramVec) WithLabelValues(lvs ...string) Observer { + h, err := v.GetMetricWithLabelValues(lvs...) + if err != nil { + panic(err) + } + return h } -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. By not returning an error, With allows shortcuts like -// myVec.With(Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (m *HistogramVec) With(labels Labels) Observer { - return m.MetricVec.With(labels).(Observer) +// With works as GetMetricWith but panics where GetMetricWithLabels would have +// returned an error. Not returning an error allows shortcuts like +// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) +func (v *HistogramVec) With(labels Labels) Observer { + h, err := v.GetMetricWith(labels) + if err != nil { + panic(err) + } + return h +} + +// CurryWith returns a vector curried with the provided labels, i.e. the +// returned vector has those labels pre-set for all labeled operations performed +// on it. The cardinality of the curried vector is reduced accordingly. The +// order of the remaining labels stays the same (just with the curried labels +// taken out of the sequence – which is relevant for the +// (GetMetric)WithLabelValues methods). It is possible to curry a curried +// vector, but only with labels not yet used for currying before. +// +// The metrics contained in the HistogramVec are shared between the curried and +// uncurried vectors. They are just accessed differently. Curried and uncurried +// vectors behave identically in terms of collection. Only one must be +// registered with a given registry (usually the uncurried version). The Reset +// method deletes all metrics, even if called on a curried vector. +func (v *HistogramVec) CurryWith(labels Labels) (ObserverVec, error) { + vec, err := v.curryWith(labels) + if vec != nil { + return &HistogramVec{vec}, err + } + return nil, err +} + +// MustCurryWith works as CurryWith but panics where CurryWith would have +// returned an error. +func (v *HistogramVec) MustCurryWith(labels Labels) ObserverVec { + vec, err := v.CurryWith(labels) + if err != nil { + panic(err) + } + return vec } type constHistogram struct { @@ -393,7 +560,7 @@ func (h *constHistogram) Write(out *dto.Metric) error { // bucket. // // NewConstHistogram returns an error if the length of labelValues is not -// consistent with the variable labels in Desc. +// consistent with the variable labels in Desc or if Desc is invalid. func NewConstHistogram( desc *Desc, count uint64, @@ -401,8 +568,11 @@ func NewConstHistogram( buckets map[float64]uint64, labelValues ...string, ) (Metric, error) { - if len(desc.variableLabels) != len(labelValues) { - return nil, errInconsistentCardinality + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + return nil, err } return &constHistogram{ desc: desc, diff --git a/vendor/github.com/prometheus/client_golang/prometheus/http.go b/vendor/github.com/prometheus/client_golang/prometheus/http.go index d485ce0b8e4..9f0875bfc81 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/http.go @@ -15,9 +15,7 @@ package prometheus import ( "bufio" - "bytes" "compress/gzip" - "fmt" "io" "net" "net/http" @@ -41,19 +39,10 @@ const ( acceptEncodingHeader = "Accept-Encoding" ) -var bufPool sync.Pool - -func getBuf() *bytes.Buffer { - buf := bufPool.Get() - if buf == nil { - return &bytes.Buffer{} - } - return buf.(*bytes.Buffer) -} - -func giveBuf(buf *bytes.Buffer) { - buf.Reset() - bufPool.Put(buf) +var gzipPool = sync.Pool{ + New: func() interface{} { + return gzip.NewWriter(nil) + }, } // Handler returns an HTTP handler for the DefaultGatherer. It is @@ -61,69 +50,50 @@ func giveBuf(buf *bytes.Buffer) { // name). // // Deprecated: Please note the issues described in the doc comment of -// InstrumentHandler. You might want to consider using promhttp.Handler instead -// (which is not instrumented, but can be instrumented with the tooling provided -// in package promhttp). +// InstrumentHandler. You might want to consider using promhttp.Handler instead. func Handler() http.Handler { return InstrumentHandler("prometheus", UninstrumentedHandler()) } // UninstrumentedHandler returns an HTTP handler for the DefaultGatherer. // -// Deprecated: Use promhttp.Handler instead. See there for further documentation. +// Deprecated: Use promhttp.HandlerFor(DefaultGatherer, promhttp.HandlerOpts{}) +// instead. See there for further documentation. func UninstrumentedHandler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + return http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { mfs, err := DefaultGatherer.Gather() if err != nil { - http.Error(w, "An error has occurred during metrics collection:\n\n"+err.Error(), http.StatusInternalServerError) + httpError(rsp, err) return } contentType := expfmt.Negotiate(req.Header) - buf := getBuf() - defer giveBuf(buf) - writer, encoding := decorateWriter(req, buf) - enc := expfmt.NewEncoder(writer, contentType) - var lastErr error + header := rsp.Header() + header.Set(contentTypeHeader, string(contentType)) + + w := io.Writer(rsp) + if gzipAccepted(req.Header) { + header.Set(contentEncodingHeader, "gzip") + gz := gzipPool.Get().(*gzip.Writer) + defer gzipPool.Put(gz) + + gz.Reset(w) + defer gz.Close() + + w = gz + } + + enc := expfmt.NewEncoder(w, contentType) + for _, mf := range mfs { if err := enc.Encode(mf); err != nil { - lastErr = err - http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) + httpError(rsp, err) return } } - if closer, ok := writer.(io.Closer); ok { - closer.Close() - } - if lastErr != nil && buf.Len() == 0 { - http.Error(w, "No metrics encoded, last error:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - header := w.Header() - header.Set(contentTypeHeader, string(contentType)) - header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) - if encoding != "" { - header.Set(contentEncodingHeader, encoding) - } - w.Write(buf.Bytes()) }) } -// decorateWriter wraps a writer to handle gzip compression if requested. It -// returns the decorated writer and the appropriate "Content-Encoding" header -// (which is empty if no compression is enabled). -func decorateWriter(request *http.Request, writer io.Writer) (io.Writer, string) { - header := request.Header.Get(acceptEncodingHeader) - parts := strings.Split(header, ",") - for _, part := range parts { - part := strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return gzip.NewWriter(writer), "gzip" - } - } - return writer, "" -} - var instLabels = []string{"method", "code"} type nower interface { @@ -140,16 +110,6 @@ var now nower = nowFunc(func() time.Time { return time.Now() }) -func nowSeries(t ...time.Time) nower { - return nowFunc(func() time.Time { - defer func() { - t = t[1:] - }() - - return t[0] - }) -} - // InstrumentHandler wraps the given HTTP handler for instrumentation. It // registers four metric collectors (if not already done) and reports HTTP // metrics to the (newly or already) registered collectors: http_requests_total @@ -160,21 +120,14 @@ func nowSeries(t ...time.Time) nower { // (label name "method") and HTTP status code (label name "code"). // // Deprecated: InstrumentHandler has several issues. Use the tooling provided in -// package promhttp instead. The issues are the following: -// -// - It uses Summaries rather than Histograms. Summaries are not useful if -// aggregation across multiple instances is required. -// -// - It uses microseconds as unit, which is deprecated and should be replaced by -// seconds. -// -// - The size of the request is calculated in a separate goroutine. Since this -// calculator requires access to the request header, it creates a race with -// any writes to the header performed during request handling. -// httputil.ReverseProxy is a prominent example for a handler -// performing such writes. -// -// - It has additional issues with HTTP/2, cf. +// package promhttp instead. The issues are the following: (1) It uses Summaries +// rather than Histograms. Summaries are not useful if aggregation across +// multiple instances is required. (2) It uses microseconds as unit, which is +// deprecated and should be replaced by seconds. (3) The size of the request is +// calculated in a separate goroutine. Since this calculator requires access to +// the request header, it creates a race with any writes to the header performed +// during request handling. httputil.ReverseProxy is a prominent example for a +// handler performing such writes. (4) It has additional issues with HTTP/2, cf. // https://github.com/prometheus/client_golang/issues/272. func InstrumentHandler(handlerName string, handler http.Handler) http.HandlerFunc { return InstrumentHandlerFunc(handlerName, handler.ServeHTTP) @@ -318,7 +271,7 @@ func InstrumentHandlerFuncWithOpts(opts SummaryOpts, handlerFunc func(http.Respo } func computeApproximateRequestSize(r *http.Request) <-chan int { - // Get URL length in current go routine for avoiding a race condition. + // Get URL length in current goroutine for avoiding a race condition. // HandlerFunc that runs in parallel may modify the URL. s := 0 if r.URL != nil { @@ -353,10 +306,9 @@ func computeApproximateRequestSize(r *http.Request) <-chan int { type responseWriterDelegator struct { http.ResponseWriter - handler, method string - status int - written int64 - wroteHeader bool + status int + written int64 + wroteHeader bool } func (r *responseWriterDelegator) WriteHeader(code int) { @@ -522,3 +474,31 @@ func sanitizeCode(s int) string { return strconv.Itoa(s) } } + +// gzipAccepted returns whether the client will accept gzip-encoded content. +func gzipAccepted(header http.Header) bool { + a := header.Get(acceptEncodingHeader) + parts := strings.Split(a, ",") + for _, part := range parts { + part = strings.TrimSpace(part) + if part == "gzip" || strings.HasPrefix(part, "gzip;") { + return true + } + } + return false +} + +// httpError removes any content-encoding header and then calls http.Error with +// the provided error and http.StatusInternalServerErrer. Error contents is +// supposed to be uncompressed plain text. However, same as with a plain +// http.Error, any header settings will be void if the header has already been +// sent. The error message will still be written to the writer, but it will +// probably be of limited use. +func httpError(rsp http.ResponseWriter, err error) { + rsp.Header().Del(contentEncodingHeader) + http.Error( + rsp, + "An error has occurred while serving metrics:\n\n"+err.Error(), + http.StatusInternalServerError, + ) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go new file mode 100644 index 00000000000..351c26e1aed --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go @@ -0,0 +1,85 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + "sort" + + dto "github.com/prometheus/client_model/go" +) + +// metricSorter is a sortable slice of *dto.Metric. +type metricSorter []*dto.Metric + +func (s metricSorter) Len() int { + return len(s) +} + +func (s metricSorter) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s metricSorter) Less(i, j int) bool { + if len(s[i].Label) != len(s[j].Label) { + // This should not happen. The metrics are + // inconsistent. However, we have to deal with the fact, as + // people might use custom collectors or metric family injection + // to create inconsistent metrics. So let's simply compare the + // number of labels in this case. That will still yield + // reproducible sorting. + return len(s[i].Label) < len(s[j].Label) + } + for n, lp := range s[i].Label { + vi := lp.GetValue() + vj := s[j].Label[n].GetValue() + if vi != vj { + return vi < vj + } + } + + // We should never arrive here. Multiple metrics with the same + // label set in the same scrape will lead to undefined ingestion + // behavior. However, as above, we have to provide stable sorting + // here, even for inconsistent metrics. So sort equal metrics + // by their timestamp, with missing timestamps (implying "now") + // coming last. + if s[i].TimestampMs == nil { + return false + } + if s[j].TimestampMs == nil { + return true + } + return s[i].GetTimestampMs() < s[j].GetTimestampMs() +} + +// NormalizeMetricFamilies returns a MetricFamily slice with empty +// MetricFamilies pruned and the remaining MetricFamilies sorted by name within +// the slice, with the contained Metrics sorted within each MetricFamily. +func NormalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily) []*dto.MetricFamily { + for _, mf := range metricFamiliesByName { + sort.Sort(metricSorter(mf.Metric)) + } + names := make([]string, 0, len(metricFamiliesByName)) + for name, mf := range metricFamiliesByName { + if len(mf.Metric) > 0 { + names = append(names, name) + } + } + sort.Strings(names) + result := make([]*dto.MetricFamily, 0, len(names)) + for _, name := range names { + result = append(result, metricFamiliesByName[name]) + } + return result +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go new file mode 100644 index 00000000000..2744443ac22 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/labels.go @@ -0,0 +1,87 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prometheus + +import ( + "errors" + "fmt" + "strings" + "unicode/utf8" + + "github.com/prometheus/common/model" +) + +// Labels represents a collection of label name -> value mappings. This type is +// commonly used with the With(Labels) and GetMetricWith(Labels) methods of +// metric vector Collectors, e.g.: +// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) +// +// The other use-case is the specification of constant label pairs in Opts or to +// create a Desc. +type Labels map[string]string + +// reservedLabelPrefix is a prefix which is not legal in user-supplied +// label names. +const reservedLabelPrefix = "__" + +var errInconsistentCardinality = errors.New("inconsistent label cardinality") + +func makeInconsistentCardinalityError(fqName string, labels, labelValues []string) error { + return fmt.Errorf( + "%s: %q has %d variable labels named %q but %d values %q were provided", + errInconsistentCardinality, fqName, + len(labels), labels, + len(labelValues), labelValues, + ) +} + +func validateValuesInLabels(labels Labels, expectedNumberOfValues int) error { + if len(labels) != expectedNumberOfValues { + return fmt.Errorf( + "%s: expected %d label values but got %d in %#v", + errInconsistentCardinality, expectedNumberOfValues, + len(labels), labels, + ) + } + + for name, val := range labels { + if !utf8.ValidString(val) { + return fmt.Errorf("label %s: value %q is not valid UTF-8", name, val) + } + } + + return nil +} + +func validateLabelValues(vals []string, expectedNumberOfValues int) error { + if len(vals) != expectedNumberOfValues { + return fmt.Errorf( + "%s: expected %d label values but got %d in %#v", + errInconsistentCardinality, expectedNumberOfValues, + len(vals), vals, + ) + } + + for _, val := range vals { + if !utf8.ValidString(val) { + return fmt.Errorf("label value %q is not valid UTF-8", val) + } + } + + return nil +} + +func checkLabelName(l string) bool { + return model.LabelName(l).IsValid() && !strings.HasPrefix(l, reservedLabelPrefix) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go index d4063d98f41..55e6d86d596 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -15,6 +15,9 @@ package prometheus import ( "strings" + "time" + + "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" ) @@ -43,9 +46,8 @@ type Metric interface { // While populating dto.Metric, it is the responsibility of the // implementation to ensure validity of the Metric protobuf (like valid // UTF-8 strings or syntactically valid metric and label names). It is - // recommended to sort labels lexicographically. (Implementers may find - // LabelPairSorter useful for that.) Callers of Write should still make - // sure of sorting if they depend on it. + // recommended to sort labels lexicographically. Callers of Write should + // still make sure of sorting if they depend on it. Write(*dto.Metric) error // TODO(beorn7): The original rationale of passing in a pre-allocated // dto.Metric protobuf to save allocations has disappeared. The @@ -57,8 +59,9 @@ type Metric interface { // implementation XXX has its own XXXOpts type, but in most cases, it is just be // an alias of this type (which might change when the requirement arises.) // -// It is mandatory to set Name and Help to a non-empty string. All other fields -// are optional and can safely be left at their zero value. +// It is mandatory to set Name to a non-empty string. All other fields are +// optional and can safely be left at their zero value, although it is strongly +// encouraged to set a Help string. type Opts struct { // Namespace, Subsystem, and Name are components of the fully-qualified // name of the Metric (created by joining these components with @@ -69,7 +72,7 @@ type Opts struct { Subsystem string Name string - // Help provides information about this metric. Mandatory! + // Help provides information about this metric. // // Metrics with the same fully-qualified name must have the same Help // string. @@ -79,20 +82,12 @@ type Opts struct { // with the same fully-qualified name must have the same label names in // their ConstLabels. // - // Note that in most cases, labels have a value that varies during the - // lifetime of a process. Those labels are usually managed with a metric - // vector collector (like CounterVec, GaugeVec, UntypedVec). ConstLabels - // serve only special purposes. One is for the special case where the - // value of a label does not change during the lifetime of a process, - // e.g. if the revision of the running binary is put into a - // label. Another, more advanced purpose is if more than one Collector - // needs to collect Metrics with the same fully-qualified name. In that - // case, those Metrics must differ in the values of their - // ConstLabels. See the Collector examples. - // - // If the value of a label never changes (not even between binaries), - // that label most likely should not be a label at all (but part of the - // metric name). + // ConstLabels are only used rarely. In particular, do not use them to + // attach the same labels to all your metrics. Those use cases are + // better covered by target labels set by the scraping Prometheus + // server, or by one specific metric (e.g. a build_info or a + // machine_role metric). See also + // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels ConstLabels Labels } @@ -118,37 +113,22 @@ func BuildFQName(namespace, subsystem, name string) string { return name } -// LabelPairSorter implements sort.Interface. It is used to sort a slice of -// dto.LabelPair pointers. This is useful for implementing the Write method of -// custom metrics. -type LabelPairSorter []*dto.LabelPair +// labelPairSorter implements sort.Interface. It is used to sort a slice of +// dto.LabelPair pointers. +type labelPairSorter []*dto.LabelPair -func (s LabelPairSorter) Len() int { +func (s labelPairSorter) Len() int { return len(s) } -func (s LabelPairSorter) Swap(i, j int) { +func (s labelPairSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s LabelPairSorter) Less(i, j int) bool { +func (s labelPairSorter) Less(i, j int) bool { return s[i].GetName() < s[j].GetName() } -type hashSorter []uint64 - -func (s hashSorter) Len() int { - return len(s) -} - -func (s hashSorter) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s hashSorter) Less(i, j int) bool { - return s[i] < s[j] -} - type invalidMetric struct { desc *Desc err error @@ -164,3 +144,31 @@ func NewInvalidMetric(desc *Desc, err error) Metric { func (m *invalidMetric) Desc() *Desc { return m.desc } func (m *invalidMetric) Write(*dto.Metric) error { return m.err } + +type timestampedMetric struct { + Metric + t time.Time +} + +func (m timestampedMetric) Write(pb *dto.Metric) error { + e := m.Metric.Write(pb) + pb.TimestampMs = proto.Int64(m.t.Unix()*1000 + int64(m.t.Nanosecond()/1000000)) + return e +} + +// NewMetricWithTimestamp returns a new Metric wrapping the provided Metric in a +// way that it has an explicit timestamp set to the provided Time. This is only +// useful in rare cases as the timestamp of a Prometheus metric should usually +// be set by the Prometheus server during scraping. Exceptions include mirroring +// metrics with given timestamps from other metric +// sources. +// +// NewMetricWithTimestamp works best with MustNewConstMetric, +// MustNewConstHistogram, and MustNewConstSummary, see example. +// +// Currently, the exposition formats used by Prometheus are limited to +// millisecond resolution. Thus, the provided time will be rounded down to the +// next full millisecond value. +func NewMetricWithTimestamp(t time.Time, m Metric) Metric { + return timestampedMetric{Metric: m, t: t} +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/observer.go b/vendor/github.com/prometheus/client_golang/prometheus/observer.go index b0520e85e8b..5806cd09e30 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/observer.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/observer.go @@ -45,6 +45,8 @@ type ObserverVec interface { GetMetricWithLabelValues(lvs ...string) (Observer, error) With(Labels) Observer WithLabelValues(...string) Observer + CurryWith(Labels) (ObserverVec, error) + MustCurryWith(Labels) ObserverVec Collector } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go index 94b2553e14a..55176d58ce6 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go @@ -13,46 +13,74 @@ package prometheus -import "github.com/prometheus/procfs" +import ( + "errors" + "os" + + "github.com/prometheus/procfs" +) type processCollector struct { - pid int collectFn func(chan<- Metric) pidFn func() (int, error) + reportErrors bool cpuTotal *Desc openFDs, maxFDs *Desc - vsize, rss *Desc + vsize, maxVsize *Desc + rss *Desc startTime *Desc } -// NewProcessCollector returns a collector which exports the current state of -// process metrics including cpu, memory and file descriptor usage as well as -// the process start time for the given process id under the given namespace. -func NewProcessCollector(pid int, namespace string) Collector { - return NewProcessCollectorPIDFn( - func() (int, error) { return pid, nil }, - namespace, - ) +// ProcessCollectorOpts defines the behavior of a process metrics collector +// created with NewProcessCollector. +type ProcessCollectorOpts struct { + // PidFn returns the PID of the process the collector collects metrics + // for. It is called upon each collection. By default, the PID of the + // current process is used, as determined on construction time by + // calling os.Getpid(). + PidFn func() (int, error) + // If non-empty, each of the collected metrics is prefixed by the + // provided string and an underscore ("_"). + Namespace string + // If true, any error encountered during collection is reported as an + // invalid metric (see NewInvalidMetric). Otherwise, errors are ignored + // and the collected metrics will be incomplete. (Possibly, no metrics + // will be collected at all.) While that's usually not desired, it is + // appropriate for the common "mix-in" of process metrics, where process + // metrics are nice to have, but failing to collect them should not + // disrupt the collection of the remaining metrics. + ReportErrors bool } -// NewProcessCollectorPIDFn returns a collector which exports the current state -// of process metrics including cpu, memory and file descriptor usage as well -// as the process start time under the given namespace. The given pidFn is -// called on each collect and is used to determine the process to export -// metrics for. -func NewProcessCollectorPIDFn( - pidFn func() (int, error), - namespace string, -) Collector { +// NewProcessCollector returns a collector which exports the current state of +// process metrics including CPU, memory and file descriptor usage as well as +// the process start time. The detailed behavior is defined by the provided +// ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a +// collector for the current process with an empty namespace string and no error +// reporting. +// +// Currently, the collector depends on a Linux-style proc filesystem and +// therefore only exports metrics for Linux. +// +// Note: An older version of this function had the following signature: +// +// NewProcessCollector(pid int, namespace string) Collector +// +// Most commonly, it was called as +// +// NewProcessCollector(os.Getpid(), "") +// +// The following call of the current version is equivalent to the above: +// +// NewProcessCollector(ProcessCollectorOpts{}) +func NewProcessCollector(opts ProcessCollectorOpts) Collector { ns := "" - if len(namespace) > 0 { - ns = namespace + "_" + if len(opts.Namespace) > 0 { + ns = opts.Namespace + "_" } - c := processCollector{ - pidFn: pidFn, - collectFn: func(chan<- Metric) {}, - + c := &processCollector{ + reportErrors: opts.ReportErrors, cpuTotal: NewDesc( ns+"process_cpu_seconds_total", "Total user and system CPU time spent in seconds.", @@ -73,6 +101,11 @@ func NewProcessCollectorPIDFn( "Virtual memory size in bytes.", nil, nil, ), + maxVsize: NewDesc( + ns+"process_virtual_memory_max_bytes", + "Maximum amount of virtual memory available in bytes.", + nil, nil, + ), rss: NewDesc( ns+"process_resident_memory_bytes", "Resident memory size in bytes.", @@ -85,12 +118,23 @@ func NewProcessCollectorPIDFn( ), } + if opts.PidFn == nil { + pid := os.Getpid() + c.pidFn = func() (int, error) { return pid, nil } + } else { + c.pidFn = opts.PidFn + } + // Set up process metric collection if supported by the runtime. if _, err := procfs.NewStat(); err == nil { c.collectFn = c.processCollect + } else { + c.collectFn = func(ch chan<- Metric) { + c.reportError(ch, nil, errors.New("process metrics not supported on this platform")) + } } - return &c + return c } // Describe returns all descriptions of the collector. @@ -99,6 +143,7 @@ func (c *processCollector) Describe(ch chan<- *Desc) { ch <- c.openFDs ch <- c.maxFDs ch <- c.vsize + ch <- c.maxVsize ch <- c.rss ch <- c.startTime } @@ -108,16 +153,16 @@ func (c *processCollector) Collect(ch chan<- Metric) { c.collectFn(ch) } -// TODO(ts): Bring back error reporting by reverting 7faf9e7 as soon as the -// client allows users to configure the error behavior. func (c *processCollector) processCollect(ch chan<- Metric) { pid, err := c.pidFn() if err != nil { + c.reportError(ch, nil, err) return } p, err := procfs.NewProc(pid) if err != nil { + c.reportError(ch, nil, err) return } @@ -127,14 +172,33 @@ func (c *processCollector) processCollect(ch chan<- Metric) { ch <- MustNewConstMetric(c.rss, GaugeValue, float64(stat.ResidentMemory())) if startTime, err := stat.StartTime(); err == nil { ch <- MustNewConstMetric(c.startTime, GaugeValue, startTime) + } else { + c.reportError(ch, c.startTime, err) } + } else { + c.reportError(ch, nil, err) } if fds, err := p.FileDescriptorsLen(); err == nil { ch <- MustNewConstMetric(c.openFDs, GaugeValue, float64(fds)) + } else { + c.reportError(ch, c.openFDs, err) } if limits, err := p.NewLimits(); err == nil { ch <- MustNewConstMetric(c.maxFDs, GaugeValue, float64(limits.OpenFiles)) + ch <- MustNewConstMetric(c.maxVsize, GaugeValue, float64(limits.AddressSpace)) + } else { + c.reportError(ch, nil, err) } } + +func (c *processCollector) reportError(ch chan<- Metric, desc *Desc, err error) { + if !c.reportErrors { + return + } + if desc == nil { + desc = NewInvalidDesc(err) + } + ch <- NewInvalidMetric(desc, err) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go new file mode 100644 index 00000000000..67b56d37cfd --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go @@ -0,0 +1,199 @@ +// Copyright 2017 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package promhttp + +import ( + "bufio" + "io" + "net" + "net/http" +) + +const ( + closeNotifier = 1 << iota + flusher + hijacker + readerFrom + pusher +) + +type delegator interface { + http.ResponseWriter + + Status() int + Written() int64 +} + +type responseWriterDelegator struct { + http.ResponseWriter + + handler, method string + status int + written int64 + wroteHeader bool + observeWriteHeader func(int) +} + +func (r *responseWriterDelegator) Status() int { + return r.status +} + +func (r *responseWriterDelegator) Written() int64 { + return r.written +} + +func (r *responseWriterDelegator) WriteHeader(code int) { + r.status = code + r.wroteHeader = true + r.ResponseWriter.WriteHeader(code) + if r.observeWriteHeader != nil { + r.observeWriteHeader(code) + } +} + +func (r *responseWriterDelegator) Write(b []byte) (int, error) { + if !r.wroteHeader { + r.WriteHeader(http.StatusOK) + } + n, err := r.ResponseWriter.Write(b) + r.written += int64(n) + return n, err +} + +type closeNotifierDelegator struct{ *responseWriterDelegator } +type flusherDelegator struct{ *responseWriterDelegator } +type hijackerDelegator struct{ *responseWriterDelegator } +type readerFromDelegator struct{ *responseWriterDelegator } + +func (d closeNotifierDelegator) CloseNotify() <-chan bool { + return d.ResponseWriter.(http.CloseNotifier).CloseNotify() +} +func (d flusherDelegator) Flush() { + d.ResponseWriter.(http.Flusher).Flush() +} +func (d hijackerDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) { + return d.ResponseWriter.(http.Hijacker).Hijack() +} +func (d readerFromDelegator) ReadFrom(re io.Reader) (int64, error) { + if !d.wroteHeader { + d.WriteHeader(http.StatusOK) + } + n, err := d.ResponseWriter.(io.ReaderFrom).ReadFrom(re) + d.written += n + return n, err +} + +var pickDelegator = make([]func(*responseWriterDelegator) delegator, 32) + +func init() { + // TODO(beorn7): Code generation would help here. + pickDelegator[0] = func(d *responseWriterDelegator) delegator { // 0 + return d + } + pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1 + return closeNotifierDelegator{d} + } + pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2 + return flusherDelegator{d} + } + pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3 + return struct { + *responseWriterDelegator + http.Flusher + http.CloseNotifier + }{d, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[hijacker] = func(d *responseWriterDelegator) delegator { // 4 + return hijackerDelegator{d} + } + pickDelegator[hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 5 + return struct { + *responseWriterDelegator + http.Hijacker + http.CloseNotifier + }{d, hijackerDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 6 + return struct { + *responseWriterDelegator + http.Hijacker + http.Flusher + }{d, hijackerDelegator{d}, flusherDelegator{d}} + } + pickDelegator[hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 7 + return struct { + *responseWriterDelegator + http.Hijacker + http.Flusher + http.CloseNotifier + }{d, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[readerFrom] = func(d *responseWriterDelegator) delegator { // 8 + return readerFromDelegator{d} + } + pickDelegator[readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 9 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.CloseNotifier + }{d, readerFromDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 10 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Flusher + }{d, readerFromDelegator{d}, flusherDelegator{d}} + } + pickDelegator[readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 11 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Flusher + http.CloseNotifier + }{d, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 12 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Hijacker + }{d, readerFromDelegator{d}, hijackerDelegator{d}} + } + pickDelegator[readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 13 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Hijacker + http.CloseNotifier + }{d, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 14 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Hijacker + http.Flusher + }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} + } + pickDelegator[readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 15 + return struct { + *responseWriterDelegator + io.ReaderFrom + http.Hijacker + http.Flusher + http.CloseNotifier + }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go index b7743fb8713..31a70695695 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go @@ -20,54 +20,162 @@ import ( "net/http" ) -// newDelegator handles the four different methods of upgrading a -// http.ResponseWriter to delegator. +type pusherDelegator struct{ *responseWriterDelegator } + +func (d pusherDelegator) Push(target string, opts *http.PushOptions) error { + return d.ResponseWriter.(http.Pusher).Push(target, opts) +} + +func init() { + pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16 + return pusherDelegator{d} + } + pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17 + return struct { + *responseWriterDelegator + http.Pusher + http.CloseNotifier + }{d, pusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18 + return struct { + *responseWriterDelegator + http.Pusher + http.Flusher + }{d, pusherDelegator{d}, flusherDelegator{d}} + } + pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19 + return struct { + *responseWriterDelegator + http.Pusher + http.Flusher + http.CloseNotifier + }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20 + return struct { + *responseWriterDelegator + http.Pusher + http.Hijacker + }{d, pusherDelegator{d}, hijackerDelegator{d}} + } + pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21 + return struct { + *responseWriterDelegator + http.Pusher + http.Hijacker + http.CloseNotifier + }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22 + return struct { + *responseWriterDelegator + http.Pusher + http.Hijacker + http.Flusher + }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} + } + pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { //23 + return struct { + *responseWriterDelegator + http.Pusher + http.Hijacker + http.Flusher + http.CloseNotifier + }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + }{d, pusherDelegator{d}, readerFromDelegator{d}} + } + pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.CloseNotifier + }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Flusher + }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}} + } + pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Flusher + http.CloseNotifier + }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Hijacker + }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}} + } + pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Hijacker + http.CloseNotifier + }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} + } + pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Hijacker + http.Flusher + }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} + } + pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31 + return struct { + *responseWriterDelegator + http.Pusher + io.ReaderFrom + http.Hijacker + http.Flusher + http.CloseNotifier + }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} + } +} + func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator { d := &responseWriterDelegator{ ResponseWriter: w, observeWriteHeader: observeWriteHeaderFunc, } - _, cn := w.(http.CloseNotifier) - _, fl := w.(http.Flusher) - _, hj := w.(http.Hijacker) - _, ps := w.(http.Pusher) - _, rf := w.(io.ReaderFrom) - - // Check for the four most common combination of interfaces a - // http.ResponseWriter might implement. - switch { - case cn && fl && hj && rf && ps: - // All interfaces. - return &fancyPushDelegator{ - fancyDelegator: &fancyDelegator{d}, - p: &pushDelegator{d}, - } - case cn && fl && hj && rf: - // All interfaces, except http.Pusher. - return &fancyDelegator{d} - case ps: - // Just http.Pusher. - return &pushDelegator{d} + id := 0 + if _, ok := w.(http.CloseNotifier); ok { + id += closeNotifier + } + if _, ok := w.(http.Flusher); ok { + id += flusher + } + if _, ok := w.(http.Hijacker); ok { + id += hijacker + } + if _, ok := w.(io.ReaderFrom); ok { + id += readerFrom + } + if _, ok := w.(http.Pusher); ok { + id += pusher } - return d -} - -type fancyPushDelegator struct { - p *pushDelegator - - *fancyDelegator -} - -func (f *fancyPushDelegator) Push(target string, opts *http.PushOptions) error { - return f.p.Push(target, opts) -} - -type pushDelegator struct { - *responseWriterDelegator -} - -func (f *pushDelegator) Push(target string, opts *http.PushOptions) error { - return f.ResponseWriter.(http.Pusher).Push(target, opts) + return pickDelegator[id](d) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_7.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go similarity index 75% rename from vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_7.go rename to vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go index 24b31503e9c..8bb9b8b68f8 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_7.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go @@ -26,13 +26,19 @@ func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) deleg observeWriteHeader: observeWriteHeaderFunc, } - _, cn := w.(http.CloseNotifier) - _, fl := w.(http.Flusher) - _, hj := w.(http.Hijacker) - _, rf := w.(io.ReaderFrom) - if cn && fl && hj && rf { - return &fancyDelegator{d} + id := 0 + if _, ok := w.(http.CloseNotifier); ok { + id += closeNotifier + } + if _, ok := w.(http.Flusher); ok { + id += flusher + } + if _, ok := w.(http.Hijacker); ok { + id += hijacker + } + if _, ok := w.(io.ReaderFrom); ok { + id += readerFrom } - return d + return pickDelegator[id](d) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go index 4c70a7af63f..668eb6b3c93 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -32,13 +32,13 @@ package promhttp import ( - "bytes" "compress/gzip" "fmt" "io" "net/http" "strings" "sync" + "time" "github.com/prometheus/common/expfmt" @@ -52,36 +52,56 @@ const ( acceptEncodingHeader = "Accept-Encoding" ) -var bufPool sync.Pool - -func getBuf() *bytes.Buffer { - buf := bufPool.Get() - if buf == nil { - return &bytes.Buffer{} - } - return buf.(*bytes.Buffer) +var gzipPool = sync.Pool{ + New: func() interface{} { + return gzip.NewWriter(nil) + }, } -func giveBuf(buf *bytes.Buffer) { - buf.Reset() - bufPool.Put(buf) -} - -// Handler returns an HTTP handler for the prometheus.DefaultGatherer. The -// Handler uses the default HandlerOpts, i.e. report the first error as an HTTP -// error, no error logging, and compression if requested by the client. +// Handler returns an http.Handler for the prometheus.DefaultGatherer, using +// default HandlerOpts, i.e. it reports the first error as an HTTP error, it has +// no error logging, and it applies compression if requested by the client. // -// If you want to create a Handler for the DefaultGatherer with different -// HandlerOpts, create it with HandlerFor with prometheus.DefaultGatherer and -// your desired HandlerOpts. +// The returned http.Handler is already instrumented using the +// InstrumentMetricHandler function and the prometheus.DefaultRegisterer. If you +// create multiple http.Handlers by separate calls of the Handler function, the +// metrics used for instrumentation will be shared between them, providing +// global scrape counts. +// +// This function is meant to cover the bulk of basic use cases. If you are doing +// anything that requires more customization (including using a non-default +// Gatherer, different instrumentation, and non-default HandlerOpts), use the +// HandlerFor function. See there for details. func Handler() http.Handler { - return HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}) + return InstrumentMetricHandler( + prometheus.DefaultRegisterer, HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}), + ) } -// HandlerFor returns an http.Handler for the provided Gatherer. The behavior -// of the Handler is defined by the provided HandlerOpts. +// HandlerFor returns an uninstrumented http.Handler for the provided +// Gatherer. The behavior of the Handler is defined by the provided +// HandlerOpts. Thus, HandlerFor is useful to create http.Handlers for custom +// Gatherers, with non-default HandlerOpts, and/or with custom (or no) +// instrumentation. Use the InstrumentMetricHandler function to apply the same +// kind of instrumentation as it is used by the Handler function. func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + var inFlightSem chan struct{} + if opts.MaxRequestsInFlight > 0 { + inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight) + } + + h := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { + if inFlightSem != nil { + select { + case inFlightSem <- struct{}{}: // All good, carry on. + defer func() { <-inFlightSem }() + default: + http.Error(rsp, fmt.Sprintf( + "Limit of concurrent requests reached (%d), try again later.", opts.MaxRequestsInFlight, + ), http.StatusServiceUnavailable) + return + } + } mfs, err := reg.Gather() if err != nil { if opts.ErrorLog != nil { @@ -92,26 +112,40 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { panic(err) case ContinueOnError: if len(mfs) == 0 { - http.Error(w, "No metrics gathered, last error:\n\n"+err.Error(), http.StatusInternalServerError) + // Still report the error if no metrics have been gathered. + httpError(rsp, err) return } case HTTPErrorOnError: - http.Error(w, "An error has occurred during metrics gathering:\n\n"+err.Error(), http.StatusInternalServerError) + httpError(rsp, err) return } } contentType := expfmt.Negotiate(req.Header) - buf := getBuf() - defer giveBuf(buf) - writer, encoding := decorateWriter(req, buf, opts.DisableCompression) - enc := expfmt.NewEncoder(writer, contentType) + header := rsp.Header() + header.Set(contentTypeHeader, string(contentType)) + + w := io.Writer(rsp) + if !opts.DisableCompression && gzipAccepted(req.Header) { + header.Set(contentEncodingHeader, "gzip") + gz := gzipPool.Get().(*gzip.Writer) + defer gzipPool.Put(gz) + + gz.Reset(w) + defer gz.Close() + + w = gz + } + + enc := expfmt.NewEncoder(w, contentType) + var lastErr error for _, mf := range mfs { if err := enc.Encode(mf); err != nil { lastErr = err if opts.ErrorLog != nil { - opts.ErrorLog.Println("error encoding metric family:", err) + opts.ErrorLog.Println("error encoding and sending metric family:", err) } switch opts.ErrorHandling { case PanicOnError: @@ -119,27 +153,75 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { case ContinueOnError: // Handled later. case HTTPErrorOnError: - http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) + httpError(rsp, err) return } } } - if closer, ok := writer.(io.Closer); ok { - closer.Close() + + if lastErr != nil { + httpError(rsp, lastErr) } - if lastErr != nil && buf.Len() == 0 { - http.Error(w, "No metrics encoded, last error:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - header := w.Header() - header.Set(contentTypeHeader, string(contentType)) - header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) - if encoding != "" { - header.Set(contentEncodingHeader, encoding) - } - w.Write(buf.Bytes()) - // TODO(beorn7): Consider streaming serving of metrics. }) + + if opts.Timeout <= 0 { + return h + } + return http.TimeoutHandler(h, opts.Timeout, fmt.Sprintf( + "Exceeded configured timeout of %v.\n", + opts.Timeout, + )) +} + +// InstrumentMetricHandler is usually used with an http.Handler returned by the +// HandlerFor function. It instruments the provided http.Handler with two +// metrics: A counter vector "promhttp_metric_handler_requests_total" to count +// scrapes partitioned by HTTP status code, and a gauge +// "promhttp_metric_handler_requests_in_flight" to track the number of +// simultaneous scrapes. This function idempotently registers collectors for +// both metrics with the provided Registerer. It panics if the registration +// fails. The provided metrics are useful to see how many scrapes hit the +// monitored target (which could be from different Prometheus servers or other +// scrapers), and how often they overlap (which would result in more than one +// scrape in flight at the same time). Note that the scrapes-in-flight gauge +// will contain the scrape by which it is exposed, while the scrape counter will +// only get incremented after the scrape is complete (as only then the status +// code is known). For tracking scrape durations, use the +// "scrape_duration_seconds" gauge created by the Prometheus server upon each +// scrape. +func InstrumentMetricHandler(reg prometheus.Registerer, handler http.Handler) http.Handler { + cnt := prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "promhttp_metric_handler_requests_total", + Help: "Total number of scrapes by HTTP status code.", + }, + []string{"code"}, + ) + // Initialize the most likely HTTP status codes. + cnt.WithLabelValues("200") + cnt.WithLabelValues("500") + cnt.WithLabelValues("503") + if err := reg.Register(cnt); err != nil { + if are, ok := err.(prometheus.AlreadyRegisteredError); ok { + cnt = are.ExistingCollector.(*prometheus.CounterVec) + } else { + panic(err) + } + } + + gge := prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "promhttp_metric_handler_requests_in_flight", + Help: "Current number of scrapes being served.", + }) + if err := reg.Register(gge); err != nil { + if are, ok := err.(prometheus.AlreadyRegisteredError); ok { + gge = are.ExistingCollector.(prometheus.Gauge) + } else { + panic(err) + } + } + + return InstrumentHandlerCounter(cnt, InstrumentHandlerInFlight(gge, handler)) } // HandlerErrorHandling defines how a Handler serving metrics will handle @@ -183,22 +265,47 @@ type HandlerOpts struct { // If DisableCompression is true, the handler will never compress the // response, even if requested by the client. DisableCompression bool + // The number of concurrent HTTP requests is limited to + // MaxRequestsInFlight. Additional requests are responded to with 503 + // Service Unavailable and a suitable message in the body. If + // MaxRequestsInFlight is 0 or negative, no limit is applied. + MaxRequestsInFlight int + // If handling a request takes longer than Timeout, it is responded to + // with 503 ServiceUnavailable and a suitable Message. No timeout is + // applied if Timeout is 0 or negative. Note that with the current + // implementation, reaching the timeout simply ends the HTTP requests as + // described above (and even that only if sending of the body hasn't + // started yet), while the bulk work of gathering all the metrics keeps + // running in the background (with the eventual result to be thrown + // away). Until the implementation is improved, it is recommended to + // implement a separate timeout in potentially slow Collectors. + Timeout time.Duration } -// decorateWriter wraps a writer to handle gzip compression if requested. It -// returns the decorated writer and the appropriate "Content-Encoding" header -// (which is empty if no compression is enabled). -func decorateWriter(request *http.Request, writer io.Writer, compressionDisabled bool) (io.Writer, string) { - if compressionDisabled { - return writer, "" - } - header := request.Header.Get(acceptEncodingHeader) - parts := strings.Split(header, ",") +// gzipAccepted returns whether the client will accept gzip-encoded content. +func gzipAccepted(header http.Header) bool { + a := header.Get(acceptEncodingHeader) + parts := strings.Split(a, ",") for _, part := range parts { - part := strings.TrimSpace(part) + part = strings.TrimSpace(part) if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return gzip.NewWriter(writer), "gzip" + return true } } - return writer, "" + return false +} + +// httpError removes any content-encoding header and then calls http.Error with +// the provided error and http.StatusInternalServerErrer. Error contents is +// supposed to be uncompressed plain text. However, same as with a plain +// http.Error, any header settings will be void if the header has already been +// sent. The error message will still be written to the writer, but it will +// probably be of limited use. +func httpError(rsp http.ResponseWriter, err error) { + rsp.Header().Del(contentEncodingHeader) + http.Error( + rsp, + "An error has occurred while serving metrics:\n\n"+err.Error(), + http.StatusInternalServerError, + ) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go index 1cf21f2174b..86fd564470f 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go @@ -45,12 +45,11 @@ func InstrumentRoundTripperInFlight(gauge prometheus.Gauge, next http.RoundTripp // InstrumentRoundTripperCounter is a middleware that wraps the provided // http.RoundTripper to observe the request result with the provided CounterVec. -// The CounterVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. Partitioning of the CounterVec happens by HTTP status -// code and/or HTTP method if the respective instance label names are present -// in the CounterVec. For unpartitioned counting, use a CounterVec with -// zero labels. +// The CounterVec must have zero, one, or two non-const non-curried labels. For +// those, the only allowed label names are "code" and "method". The function +// panics otherwise. Partitioning of the CounterVec happens by HTTP status code +// and/or HTTP method if the respective instance label names are present in the +// CounterVec. For unpartitioned counting, use a CounterVec with zero labels. // // If the wrapped RoundTripper panics or returns a non-nil error, the Counter // is not incremented. @@ -69,18 +68,21 @@ func InstrumentRoundTripperCounter(counter *prometheus.CounterVec, next http.Rou } // InstrumentRoundTripperDuration is a middleware that wraps the provided -// http.RoundTripper to observe the request duration with the provided ObserverVec. -// The ObserverVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. The Observe method of the Observer in the ObserverVec -// is called with the request duration in seconds. Partitioning happens by HTTP -// status code and/or HTTP method if the respective instance label names are -// present in the ObserverVec. For unpartitioned observations, use an -// ObserverVec with zero labels. Note that partitioning of Histograms is -// expensive and should be used judiciously. +// http.RoundTripper to observe the request duration with the provided +// ObserverVec. The ObserverVec must have zero, one, or two non-const +// non-curried labels. For those, the only allowed label names are "code" and +// "method". The function panics otherwise. The Observe method of the Observer +// in the ObserverVec is called with the request duration in +// seconds. Partitioning happens by HTTP status code and/or HTTP method if the +// respective instance label names are present in the ObserverVec. For +// unpartitioned observations, use an ObserverVec with zero labels. Note that +// partitioning of Histograms is expensive and should be used judiciously. // // If the wrapped RoundTripper panics or returns a non-nil error, no values are // reported. +// +// Note that this method is only guaranteed to never observe negative durations +// if used with Go1.9+. func InstrumentRoundTripperDuration(obs prometheus.ObserverVec, next http.RoundTripper) RoundTripperFunc { code, method := checkLabels(obs) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go index b51d9105200..a034d1ec0f1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go @@ -48,8 +48,10 @@ type InstrumentTrace struct { // RoundTripper and reports times to hook functions provided in the // InstrumentTrace struct. Hook functions that are not present in the provided // InstrumentTrace struct are ignored. Times reported to the hook functions are -// time since the start of the request. Note that partitioning of Histograms -// is expensive and should be used judiciously. +// time since the start of the request. Only with Go1.9+, those times are +// guaranteed to never be negative. (Earlier Go versions are not using a +// monotonic clock.) Note that partitioning of Histograms is expensive and +// should be used judiciously. // // For hook functions that receive an error as an argument, no observations are // made in the event of a non-nil error value. @@ -79,8 +81,8 @@ func InstrumentRoundTripperTrace(it *InstrumentTrace, next http.RoundTripper) Ro } }, DNSDone: func(_ httptrace.DNSDoneInfo) { - if it.DNSStart != nil { - it.DNSStart(time.Since(start).Seconds()) + if it.DNSDone != nil { + it.DNSDone(time.Since(start).Seconds()) } }, ConnectStart: func(_, _ string) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go index ac419e555fe..9db24380533 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go @@ -14,9 +14,7 @@ package promhttp import ( - "bufio" - "io" - "net" + "errors" "net/http" "strconv" "strings" @@ -45,10 +43,10 @@ func InstrumentHandlerInFlight(g prometheus.Gauge, next http.Handler) http.Handl // InstrumentHandlerDuration is a middleware that wraps the provided // http.Handler to observe the request duration with the provided ObserverVec. -// The ObserverVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. The Observe method of the Observer in the ObserverVec -// is called with the request duration in seconds. Partitioning happens by HTTP +// The ObserverVec must have zero, one, or two non-const non-curried labels. For +// those, the only allowed label names are "code" and "method". The function +// panics otherwise. The Observe method of the Observer in the ObserverVec is +// called with the request duration in seconds. Partitioning happens by HTTP // status code and/or HTTP method if the respective instance label names are // present in the ObserverVec. For unpartitioned observations, use an // ObserverVec with zero labels. Note that partitioning of Histograms is @@ -57,6 +55,9 @@ func InstrumentHandlerInFlight(g prometheus.Gauge, next http.Handler) http.Handl // If the wrapped Handler does not set a status code, a status code of 200 is assumed. // // If the wrapped Handler panics, no values are reported. +// +// Note that this method is only guaranteed to never observe negative durations +// if used with Go1.9+. func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler) http.HandlerFunc { code, method := checkLabels(obs) @@ -77,14 +78,13 @@ func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler) ht }) } -// InstrumentHandlerCounter is a middleware that wraps the provided -// http.Handler to observe the request result with the provided CounterVec. -// The CounterVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. Partitioning of the CounterVec happens by HTTP status -// code and/or HTTP method if the respective instance label names are present -// in the CounterVec. For unpartitioned counting, use a CounterVec with -// zero labels. +// InstrumentHandlerCounter is a middleware that wraps the provided http.Handler +// to observe the request result with the provided CounterVec. The CounterVec +// must have zero, one, or two non-const non-curried labels. For those, the only +// allowed label names are "code" and "method". The function panics +// otherwise. Partitioning of the CounterVec happens by HTTP status code and/or +// HTTP method if the respective instance label names are present in the +// CounterVec. For unpartitioned counting, use a CounterVec with zero labels. // // If the wrapped Handler does not set a status code, a status code of 200 is assumed. // @@ -111,18 +111,20 @@ func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler) // InstrumentHandlerTimeToWriteHeader is a middleware that wraps the provided // http.Handler to observe with the provided ObserverVec the request duration // until the response headers are written. The ObserverVec must have zero, one, -// or two labels. The only allowed label names are "code" and "method". The -// function panics if any other instance labels are provided. The Observe -// method of the Observer in the ObserverVec is called with the request -// duration in seconds. Partitioning happens by HTTP status code and/or HTTP -// method if the respective instance label names are present in the -// ObserverVec. For unpartitioned observations, use an ObserverVec with zero -// labels. Note that partitioning of Histograms is expensive and should be used -// judiciously. +// or two non-const non-curried labels. For those, the only allowed label names +// are "code" and "method". The function panics otherwise. The Observe method of +// the Observer in the ObserverVec is called with the request duration in +// seconds. Partitioning happens by HTTP status code and/or HTTP method if the +// respective instance label names are present in the ObserverVec. For +// unpartitioned observations, use an ObserverVec with zero labels. Note that +// partitioning of Histograms is expensive and should be used judiciously. // // If the wrapped Handler panics before calling WriteHeader, no value is // reported. // +// Note that this method is only guaranteed to never observe negative durations +// if used with Go1.9+. +// // See the example for InstrumentHandlerDuration for example usage. func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Handler) http.HandlerFunc { code, method := checkLabels(obs) @@ -137,15 +139,15 @@ func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Ha } // InstrumentHandlerRequestSize is a middleware that wraps the provided -// http.Handler to observe the request size with the provided ObserverVec. -// The ObserverVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. The Observe method of the Observer in the ObserverVec -// is called with the request size in bytes. Partitioning happens by HTTP -// status code and/or HTTP method if the respective instance label names are -// present in the ObserverVec. For unpartitioned observations, use an -// ObserverVec with zero labels. Note that partitioning of Histograms is -// expensive and should be used judiciously. +// http.Handler to observe the request size with the provided ObserverVec. The +// ObserverVec must have zero, one, or two non-const non-curried labels. For +// those, the only allowed label names are "code" and "method". The function +// panics otherwise. The Observe method of the Observer in the ObserverVec is +// called with the request size in bytes. Partitioning happens by HTTP status +// code and/or HTTP method if the respective instance label names are present in +// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero +// labels. Note that partitioning of Histograms is expensive and should be used +// judiciously. // // If the wrapped Handler does not set a status code, a status code of 200 is assumed. // @@ -172,15 +174,15 @@ func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler) } // InstrumentHandlerResponseSize is a middleware that wraps the provided -// http.Handler to observe the response size with the provided ObserverVec. -// The ObserverVec must have zero, one, or two labels. The only allowed label -// names are "code" and "method". The function panics if any other instance -// labels are provided. The Observe method of the Observer in the ObserverVec -// is called with the response size in bytes. Partitioning happens by HTTP -// status code and/or HTTP method if the respective instance label names are -// present in the ObserverVec. For unpartitioned observations, use an -// ObserverVec with zero labels. Note that partitioning of Histograms is -// expensive and should be used judiciously. +// http.Handler to observe the response size with the provided ObserverVec. The +// ObserverVec must have zero, one, or two non-const non-curried labels. For +// those, the only allowed label names are "code" and "method". The function +// panics otherwise. The Observe method of the Observer in the ObserverVec is +// called with the response size in bytes. Partitioning happens by HTTP status +// code and/or HTTP method if the respective instance label names are present in +// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero +// labels. Note that partitioning of Histograms is expensive and should be used +// judiciously. // // If the wrapped Handler does not set a status code, a status code of 200 is assumed. // @@ -201,9 +203,12 @@ func checkLabels(c prometheus.Collector) (code bool, method bool) { // once Descriptors can have their dimensionality queried. var ( desc *prometheus.Desc + m prometheus.Metric pm dto.Metric + lvs []string ) + // Get the Desc from the Collector. descc := make(chan *prometheus.Desc, 1) c.Describe(descc) @@ -220,49 +225,54 @@ func checkLabels(c prometheus.Collector) (code bool, method bool) { close(descc) - if _, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0); err == nil { - return + // Create a ConstMetric with the Desc. Since we don't know how many + // variable labels there are, try for as long as it needs. + for err := errors.New("dummy"); err != nil; lvs = append(lvs, magicString) { + m, err = prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, lvs...) } - if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, magicString); err == nil { - if err := m.Write(&pm); err != nil { - panic("error checking metric for labels") - } - for _, label := range pm.Label { - name, value := label.GetName(), label.GetValue() - if value != magicString { - continue - } - switch name { - case "code": - code = true - case "method": - method = true - default: - panic("metric partitioned with non-supported labels") - } - return - } - panic("previously set label not found – this must never happen") + + // Write out the metric into a proto message and look at the labels. + // If the value is not the magicString, it is a constLabel, which doesn't interest us. + // If the label is curried, it doesn't interest us. + // In all other cases, only "code" or "method" is allowed. + if err := m.Write(&pm); err != nil { + panic("error checking metric for labels") } - if m, err := prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, magicString, magicString); err == nil { - if err := m.Write(&pm); err != nil { - panic("error checking metric for labels") + for _, label := range pm.Label { + name, value := label.GetName(), label.GetValue() + if value != magicString || isLabelCurried(c, name) { + continue } - for _, label := range pm.Label { - name, value := label.GetName(), label.GetValue() - if value != magicString { - continue - } - if name == "code" || name == "method" { - continue - } + switch name { + case "code": + code = true + case "method": + method = true + default: panic("metric partitioned with non-supported labels") } - code = true - method = true - return } - panic("metric partitioned with non-supported labels") + return +} + +func isLabelCurried(c prometheus.Collector, label string) bool { + // This is even hackier than the label test above. + // We essentially try to curry again and see if it works. + // But for that, we need to type-convert to the two + // types we use here, ObserverVec or *CounterVec. + switch v := c.(type) { + case *prometheus.CounterVec: + if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { + return false + } + case prometheus.ObserverVec: + if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { + return false + } + default: + panic("unsupported metric vec type") + } + return true } // emptyLabels is a one-time allocation for non-partitioned metrics to avoid @@ -435,71 +445,3 @@ func sanitizeCode(s int) string { return strconv.Itoa(s) } } - -type delegator interface { - Status() int - Written() int64 - - http.ResponseWriter -} - -type responseWriterDelegator struct { - http.ResponseWriter - - handler, method string - status int - written int64 - wroteHeader bool - observeWriteHeader func(int) -} - -func (r *responseWriterDelegator) Status() int { - return r.status -} - -func (r *responseWriterDelegator) Written() int64 { - return r.written -} - -func (r *responseWriterDelegator) WriteHeader(code int) { - r.status = code - r.wroteHeader = true - r.ResponseWriter.WriteHeader(code) - if r.observeWriteHeader != nil { - r.observeWriteHeader(code) - } -} - -func (r *responseWriterDelegator) Write(b []byte) (int, error) { - if !r.wroteHeader { - r.WriteHeader(http.StatusOK) - } - n, err := r.ResponseWriter.Write(b) - r.written += int64(n) - return n, err -} - -type fancyDelegator struct { - *responseWriterDelegator -} - -func (r *fancyDelegator) CloseNotify() <-chan bool { - return r.ResponseWriter.(http.CloseNotifier).CloseNotify() -} - -func (r *fancyDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) { - return r.ResponseWriter.(http.Hijacker).Hijack() -} - -func (r *fancyDelegator) Flush() { - r.ResponseWriter.(http.Flusher).Flush() -} - -func (r *fancyDelegator) ReadFrom(re io.Reader) (int64, error) { - if !r.wroteHeader { - r.WriteHeader(http.StatusOK) - } - n, err := r.ResponseWriter.(io.ReaderFrom).ReadFrom(re) - r.written += n - return n, err -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go index 8c6b5bd8ee1..b5e70b93fa1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -15,15 +15,22 @@ package prometheus import ( "bytes" - "errors" "fmt" + "io/ioutil" "os" + "path/filepath" + "runtime" "sort" + "strings" "sync" + "unicode/utf8" "github.com/golang/protobuf/proto" + "github.com/prometheus/common/expfmt" dto "github.com/prometheus/client_model/go" + + "github.com/prometheus/client_golang/prometheus/internal" ) const ( @@ -35,13 +42,14 @@ const ( // DefaultRegisterer and DefaultGatherer are the implementations of the // Registerer and Gatherer interface a number of convenience functions in this // package act on. Initially, both variables point to the same Registry, which -// has a process collector (see NewProcessCollector) and a Go collector (see -// NewGoCollector) already registered. This approach to keep default instances -// as global state mirrors the approach of other packages in the Go standard -// library. Note that there are caveats. Change the variables with caution and -// only if you understand the consequences. Users who want to avoid global state -// altogether should not use the convenience function and act on custom -// instances instead. +// has a process collector (currently on Linux only, see NewProcessCollector) +// and a Go collector (see NewGoCollector, in particular the note about +// stop-the-world implication with Go versions older than 1.9) already +// registered. This approach to keep default instances as global state mirrors +// the approach of other packages in the Go standard library. Note that there +// are caveats. Change the variables with caution and only if you understand the +// consequences. Users who want to avoid global state altogether should not use +// the convenience functions and act on custom instances instead. var ( defaultRegistry = NewRegistry() DefaultRegisterer Registerer = defaultRegistry @@ -49,7 +57,7 @@ var ( ) func init() { - MustRegister(NewProcessCollector(os.Getpid(), "")) + MustRegister(NewProcessCollector(ProcessCollectorOpts{})) MustRegister(NewGoCollector()) } @@ -65,7 +73,8 @@ func NewRegistry() *Registry { // NewPedanticRegistry returns a registry that checks during collection if each // collected Metric is consistent with its reported Desc, and if the Desc has -// actually been registered with the registry. +// actually been registered with the registry. Unchecked Collectors (those whose +// Describe methed does not yield any descriptors) are excluded from the check. // // Usually, a Registry will be happy as long as the union of all collected // Metrics is consistent and valid even if some metrics are not consistent with @@ -80,7 +89,7 @@ func NewPedanticRegistry() *Registry { // Registerer is the interface for the part of a registry in charge of // registering and unregistering. Users of custom registries should use -// Registerer as type for registration purposes (rather then the Registry type +// Registerer as type for registration purposes (rather than the Registry type // directly). In that way, they are free to use custom Registerer implementation // (e.g. for testing purposes). type Registerer interface { @@ -95,8 +104,13 @@ type Registerer interface { // returned error is an instance of AlreadyRegisteredError, which // contains the previously registered Collector. // - // It is in general not safe to register the same Collector multiple - // times concurrently. + // A Collector whose Describe method does not yield any Desc is treated + // as unchecked. Registration will always succeed. No check for + // re-registering (see previous paragraph) is performed. Thus, the + // caller is responsible for not double-registering the same unchecked + // Collector, and for providing a Collector that will not cause + // inconsistent metrics on collection. (This would lead to scrape + // errors.) Register(Collector) error // MustRegister works like Register but registers any number of // Collectors and panics upon the first registration that causes an @@ -105,7 +119,9 @@ type Registerer interface { // Unregister unregisters the Collector that equals the Collector passed // in as an argument. (Two Collectors are considered equal if their // Describe method yields the same set of descriptors.) The function - // returns whether a Collector was unregistered. + // returns whether a Collector was unregistered. Note that an unchecked + // Collector cannot be unregistered (as its Describe method does not + // yield any descriptor). // // Note that even after unregistering, it will not be possible to // register a new Collector that is inconsistent with the unregistered @@ -123,15 +139,23 @@ type Registerer interface { type Gatherer interface { // Gather calls the Collect method of the registered Collectors and then // gathers the collected metrics into a lexicographically sorted slice - // of MetricFamily protobufs. Even if an error occurs, Gather attempts - // to gather as many metrics as possible. Hence, if a non-nil error is - // returned, the returned MetricFamily slice could be nil (in case of a - // fatal error that prevented any meaningful metric collection) or - // contain a number of MetricFamily protobufs, some of which might be - // incomplete, and some might be missing altogether. The returned error - // (which might be a MultiError) explains the details. In scenarios - // where complete collection is critical, the returned MetricFamily - // protobufs should be disregarded if the returned error is non-nil. + // of uniquely named MetricFamily protobufs. Gather ensures that the + // returned slice is valid and self-consistent so that it can be used + // for valid exposition. As an exception to the strict consistency + // requirements described for metric.Desc, Gather will tolerate + // different sets of label names for metrics of the same metric family. + // + // Even if an error occurs, Gather attempts to gather as many metrics as + // possible. Hence, if a non-nil error is returned, the returned + // MetricFamily slice could be nil (in case of a fatal error that + // prevented any meaningful metric collection) or contain a number of + // MetricFamily protobufs, some of which might be incomplete, and some + // might be missing altogether. The returned error (which might be a + // MultiError) explains the details. Note that this is mostly useful for + // debugging purposes. If the gathered protobufs are to be used for + // exposition in actual monitoring, it is almost always better to not + // expose an incomplete result and instead disregard the returned + // MetricFamily protobufs in case the returned error is non-nil. Gather() ([]*dto.MetricFamily, error) } @@ -201,6 +225,13 @@ func (errs MultiError) Error() string { return buf.String() } +// Append appends the provided error if it is not nil. +func (errs *MultiError) Append(err error) { + if err != nil { + *errs = append(*errs, err) + } +} + // MaybeUnwrap returns nil if len(errs) is 0. It returns the first and only // contained error as error if len(errs is 1). In all other cases, it returns // the MultiError directly. This is helpful for returning a MultiError in a way @@ -225,6 +256,7 @@ type Registry struct { collectorsByID map[uint64]Collector // ID is a hash of the descIDs. descIDs map[uint64]struct{} dimHashesByName map[string]uint64 + uncheckedCollectors []Collector pedanticChecksEnabled bool } @@ -242,7 +274,12 @@ func (r *Registry) Register(c Collector) error { close(descChan) }() r.mtx.Lock() - defer r.mtx.Unlock() + defer func() { + // Drain channel in case of premature return to not leak a goroutine. + for range descChan { + } + r.mtx.Unlock() + }() // Conduct various tests... for desc := range descChan { @@ -282,9 +319,10 @@ func (r *Registry) Register(c Collector) error { } } } - // Did anything happen at all? + // A Collector yielding no Desc at all is considered unchecked. if len(newDescIDs) == 0 { - return errors.New("collector has no descriptors") + r.uncheckedCollectors = append(r.uncheckedCollectors, c) + return nil } if existing, exists := r.collectorsByID[collectorID]; exists { return AlreadyRegisteredError{ @@ -358,31 +396,25 @@ func (r *Registry) MustRegister(cs ...Collector) { // Gather implements Gatherer. func (r *Registry) Gather() ([]*dto.MetricFamily, error) { var ( - metricChan = make(chan Metric, capMetricChan) - metricHashes = map[uint64]struct{}{} - dimHashes = map[string]uint64{} - wg sync.WaitGroup - errs MultiError // The collected errors to return in the end. - registeredDescIDs map[uint64]struct{} // Only used for pedantic checks + checkedMetricChan = make(chan Metric, capMetricChan) + uncheckedMetricChan = make(chan Metric, capMetricChan) + metricHashes = map[uint64]struct{}{} + wg sync.WaitGroup + errs MultiError // The collected errors to return in the end. + registeredDescIDs map[uint64]struct{} // Only used for pedantic checks ) r.mtx.RLock() + goroutineBudget := len(r.collectorsByID) + len(r.uncheckedCollectors) metricFamiliesByName := make(map[string]*dto.MetricFamily, len(r.dimHashesByName)) - - // Scatter. - // (Collectors could be complex and slow, so we call them all at once.) - wg.Add(len(r.collectorsByID)) - go func() { - wg.Wait() - close(metricChan) - }() + checkedCollectors := make(chan Collector, len(r.collectorsByID)) + uncheckedCollectors := make(chan Collector, len(r.uncheckedCollectors)) for _, collector := range r.collectorsByID { - go func(collector Collector) { - defer wg.Done() - collector.Collect(metricChan) - }(collector) + checkedCollectors <- collector + } + for _, collector := range r.uncheckedCollectors { + uncheckedCollectors <- collector } - // In case pedantic checks are enabled, we have to copy the map before // giving up the RLock. if r.pedanticChecksEnabled { @@ -391,127 +423,258 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) { registeredDescIDs[id] = struct{}{} } } - r.mtx.RUnlock() - // Drain metricChan in case of premature return. + wg.Add(goroutineBudget) + + collectWorker := func() { + for { + select { + case collector := <-checkedCollectors: + collector.Collect(checkedMetricChan) + case collector := <-uncheckedCollectors: + collector.Collect(uncheckedMetricChan) + default: + return + } + wg.Done() + } + } + + // Start the first worker now to make sure at least one is running. + go collectWorker() + goroutineBudget-- + + // Close checkedMetricChan and uncheckedMetricChan once all collectors + // are collected. + go func() { + wg.Wait() + close(checkedMetricChan) + close(uncheckedMetricChan) + }() + + // Drain checkedMetricChan and uncheckedMetricChan in case of premature return. defer func() { - for range metricChan { + if checkedMetricChan != nil { + for range checkedMetricChan { + } + } + if uncheckedMetricChan != nil { + for range uncheckedMetricChan { + } } }() - // Gather. - for metric := range metricChan { - // This could be done concurrently, too, but it required locking - // of metricFamiliesByName (and of metricHashes if checks are - // enabled). Most likely not worth it. - desc := metric.Desc() - dtoMetric := &dto.Metric{} - if err := metric.Write(dtoMetric); err != nil { - errs = append(errs, fmt.Errorf( - "error collecting metric %v: %s", desc, err, + // Copy the channel references so we can nil them out later to remove + // them from the select statements below. + cmc := checkedMetricChan + umc := uncheckedMetricChan + + for { + select { + case metric, ok := <-cmc: + if !ok { + cmc = nil + break + } + errs.Append(processMetric( + metric, metricFamiliesByName, + metricHashes, + registeredDescIDs, )) - continue + case metric, ok := <-umc: + if !ok { + umc = nil + break + } + errs.Append(processMetric( + metric, metricFamiliesByName, + metricHashes, + nil, + )) + default: + if goroutineBudget <= 0 || len(checkedCollectors)+len(uncheckedCollectors) == 0 { + // All collectors are already being worked on or + // we have already as many goroutines started as + // there are collectors. Do the same as above, + // just without the default. + select { + case metric, ok := <-cmc: + if !ok { + cmc = nil + break + } + errs.Append(processMetric( + metric, metricFamiliesByName, + metricHashes, + registeredDescIDs, + )) + case metric, ok := <-umc: + if !ok { + umc = nil + break + } + errs.Append(processMetric( + metric, metricFamiliesByName, + metricHashes, + nil, + )) + } + break + } + // Start more workers. + go collectWorker() + goroutineBudget-- + runtime.Gosched() } - metricFamily, ok := metricFamiliesByName[desc.fqName] - if ok { - if metricFamily.GetHelp() != desc.help { - errs = append(errs, fmt.Errorf( - "collected metric %s %s has help %q but should have %q", - desc.fqName, dtoMetric, desc.help, metricFamily.GetHelp(), - )) - continue - } - // TODO(beorn7): Simplify switch once Desc has type. - switch metricFamily.GetType() { - case dto.MetricType_COUNTER: - if dtoMetric.Counter == nil { - errs = append(errs, fmt.Errorf( - "collected metric %s %s should be a Counter", - desc.fqName, dtoMetric, - )) - continue - } - case dto.MetricType_GAUGE: - if dtoMetric.Gauge == nil { - errs = append(errs, fmt.Errorf( - "collected metric %s %s should be a Gauge", - desc.fqName, dtoMetric, - )) - continue - } - case dto.MetricType_SUMMARY: - if dtoMetric.Summary == nil { - errs = append(errs, fmt.Errorf( - "collected metric %s %s should be a Summary", - desc.fqName, dtoMetric, - )) - continue - } - case dto.MetricType_UNTYPED: - if dtoMetric.Untyped == nil { - errs = append(errs, fmt.Errorf( - "collected metric %s %s should be Untyped", - desc.fqName, dtoMetric, - )) - continue - } - case dto.MetricType_HISTOGRAM: - if dtoMetric.Histogram == nil { - errs = append(errs, fmt.Errorf( - "collected metric %s %s should be a Histogram", - desc.fqName, dtoMetric, - )) - continue - } - default: - panic("encountered MetricFamily with invalid type") - } - } else { - metricFamily = &dto.MetricFamily{} - metricFamily.Name = proto.String(desc.fqName) - metricFamily.Help = proto.String(desc.help) - // TODO(beorn7): Simplify switch once Desc has type. - switch { - case dtoMetric.Gauge != nil: - metricFamily.Type = dto.MetricType_GAUGE.Enum() - case dtoMetric.Counter != nil: - metricFamily.Type = dto.MetricType_COUNTER.Enum() - case dtoMetric.Summary != nil: - metricFamily.Type = dto.MetricType_SUMMARY.Enum() - case dtoMetric.Untyped != nil: - metricFamily.Type = dto.MetricType_UNTYPED.Enum() - case dtoMetric.Histogram != nil: - metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() - default: - errs = append(errs, fmt.Errorf( - "empty metric collected: %s", dtoMetric, - )) - continue - } - metricFamiliesByName[desc.fqName] = metricFamily + // Once both checkedMetricChan and uncheckdMetricChan are closed + // and drained, the contraption above will nil out cmc and umc, + // and then we can leave the collect loop here. + if cmc == nil && umc == nil { + break } - if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes, dimHashes); err != nil { - errs = append(errs, err) - continue - } - if r.pedanticChecksEnabled { - // Is the desc registered at all? - if _, exist := registeredDescIDs[desc.id]; !exist { - errs = append(errs, fmt.Errorf( - "collected metric %s %s with unregistered descriptor %s", - metricFamily.GetName(), dtoMetric, desc, - )) - continue - } - if err := checkDescConsistency(metricFamily, dtoMetric, desc); err != nil { - errs = append(errs, err) - continue - } - } - metricFamily.Metric = append(metricFamily.Metric, dtoMetric) } - return normalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() + return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() +} + +// WriteToTextfile calls Gather on the provided Gatherer, encodes the result in the +// Prometheus text format, and writes it to a temporary file. Upon success, the +// temporary file is renamed to the provided filename. +// +// This is intended for use with the textfile collector of the node exporter. +// Note that the node exporter expects the filename to be suffixed with ".prom". +func WriteToTextfile(filename string, g Gatherer) error { + tmp, err := ioutil.TempFile(filepath.Dir(filename), filepath.Base(filename)) + if err != nil { + return err + } + defer os.Remove(tmp.Name()) + + mfs, err := g.Gather() + if err != nil { + return err + } + for _, mf := range mfs { + if _, err := expfmt.MetricFamilyToText(tmp, mf); err != nil { + return err + } + } + if err := tmp.Close(); err != nil { + return err + } + + if err := os.Chmod(tmp.Name(), 0644); err != nil { + return err + } + return os.Rename(tmp.Name(), filename) +} + +// processMetric is an internal helper method only used by the Gather method. +func processMetric( + metric Metric, + metricFamiliesByName map[string]*dto.MetricFamily, + metricHashes map[uint64]struct{}, + registeredDescIDs map[uint64]struct{}, +) error { + desc := metric.Desc() + // Wrapped metrics collected by an unchecked Collector can have an + // invalid Desc. + if desc.err != nil { + return desc.err + } + dtoMetric := &dto.Metric{} + if err := metric.Write(dtoMetric); err != nil { + return fmt.Errorf("error collecting metric %v: %s", desc, err) + } + metricFamily, ok := metricFamiliesByName[desc.fqName] + if ok { // Existing name. + if metricFamily.GetHelp() != desc.help { + return fmt.Errorf( + "collected metric %s %s has help %q but should have %q", + desc.fqName, dtoMetric, desc.help, metricFamily.GetHelp(), + ) + } + // TODO(beorn7): Simplify switch once Desc has type. + switch metricFamily.GetType() { + case dto.MetricType_COUNTER: + if dtoMetric.Counter == nil { + return fmt.Errorf( + "collected metric %s %s should be a Counter", + desc.fqName, dtoMetric, + ) + } + case dto.MetricType_GAUGE: + if dtoMetric.Gauge == nil { + return fmt.Errorf( + "collected metric %s %s should be a Gauge", + desc.fqName, dtoMetric, + ) + } + case dto.MetricType_SUMMARY: + if dtoMetric.Summary == nil { + return fmt.Errorf( + "collected metric %s %s should be a Summary", + desc.fqName, dtoMetric, + ) + } + case dto.MetricType_UNTYPED: + if dtoMetric.Untyped == nil { + return fmt.Errorf( + "collected metric %s %s should be Untyped", + desc.fqName, dtoMetric, + ) + } + case dto.MetricType_HISTOGRAM: + if dtoMetric.Histogram == nil { + return fmt.Errorf( + "collected metric %s %s should be a Histogram", + desc.fqName, dtoMetric, + ) + } + default: + panic("encountered MetricFamily with invalid type") + } + } else { // New name. + metricFamily = &dto.MetricFamily{} + metricFamily.Name = proto.String(desc.fqName) + metricFamily.Help = proto.String(desc.help) + // TODO(beorn7): Simplify switch once Desc has type. + switch { + case dtoMetric.Gauge != nil: + metricFamily.Type = dto.MetricType_GAUGE.Enum() + case dtoMetric.Counter != nil: + metricFamily.Type = dto.MetricType_COUNTER.Enum() + case dtoMetric.Summary != nil: + metricFamily.Type = dto.MetricType_SUMMARY.Enum() + case dtoMetric.Untyped != nil: + metricFamily.Type = dto.MetricType_UNTYPED.Enum() + case dtoMetric.Histogram != nil: + metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() + default: + return fmt.Errorf("empty metric collected: %s", dtoMetric) + } + if err := checkSuffixCollisions(metricFamily, metricFamiliesByName); err != nil { + return err + } + metricFamiliesByName[desc.fqName] = metricFamily + } + if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes); err != nil { + return err + } + if registeredDescIDs != nil { + // Is the desc registered at all? + if _, exist := registeredDescIDs[desc.id]; !exist { + return fmt.Errorf( + "collected metric %s %s with unregistered descriptor %s", + metricFamily.GetName(), dtoMetric, desc, + ) + } + if err := checkDescConsistency(metricFamily, dtoMetric, desc); err != nil { + return err + } + } + metricFamily.Metric = append(metricFamily.Metric, dtoMetric) + return nil } // Gatherers is a slice of Gatherer instances that implements the Gatherer @@ -537,7 +700,6 @@ func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { var ( metricFamiliesByName = map[string]*dto.MetricFamily{} metricHashes = map[uint64]struct{}{} - dimHashes = map[string]uint64{} errs MultiError // The collected errors to return in the end. ) @@ -574,10 +736,14 @@ func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { existingMF.Name = mf.Name existingMF.Help = mf.Help existingMF.Type = mf.Type + if err := checkSuffixCollisions(existingMF, metricFamiliesByName); err != nil { + errs = append(errs, err) + continue + } metricFamiliesByName[mf.GetName()] = existingMF } for _, m := range mf.Metric { - if err := checkMetricConsistency(existingMF, m, metricHashes, dimHashes); err != nil { + if err := checkMetricConsistency(existingMF, m, metricHashes); err != nil { errs = append(errs, err) continue } @@ -585,88 +751,80 @@ func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { } } } - return normalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() + return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() } -// metricSorter is a sortable slice of *dto.Metric. -type metricSorter []*dto.Metric - -func (s metricSorter) Len() int { - return len(s) -} - -func (s metricSorter) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s metricSorter) Less(i, j int) bool { - if len(s[i].Label) != len(s[j].Label) { - // This should not happen. The metrics are - // inconsistent. However, we have to deal with the fact, as - // people might use custom collectors or metric family injection - // to create inconsistent metrics. So let's simply compare the - // number of labels in this case. That will still yield - // reproducible sorting. - return len(s[i].Label) < len(s[j].Label) +// checkSuffixCollisions checks for collisions with the “magic†suffixes the +// Prometheus text format and the internal metric representation of the +// Prometheus server add while flattening Summaries and Histograms. +func checkSuffixCollisions(mf *dto.MetricFamily, mfs map[string]*dto.MetricFamily) error { + var ( + newName = mf.GetName() + newType = mf.GetType() + newNameWithoutSuffix = "" + ) + switch { + case strings.HasSuffix(newName, "_count"): + newNameWithoutSuffix = newName[:len(newName)-6] + case strings.HasSuffix(newName, "_sum"): + newNameWithoutSuffix = newName[:len(newName)-4] + case strings.HasSuffix(newName, "_bucket"): + newNameWithoutSuffix = newName[:len(newName)-7] } - for n, lp := range s[i].Label { - vi := lp.GetValue() - vj := s[j].Label[n].GetValue() - if vi != vj { - return vi < vj + if newNameWithoutSuffix != "" { + if existingMF, ok := mfs[newNameWithoutSuffix]; ok { + switch existingMF.GetType() { + case dto.MetricType_SUMMARY: + if !strings.HasSuffix(newName, "_bucket") { + return fmt.Errorf( + "collected metric named %q collides with previously collected summary named %q", + newName, newNameWithoutSuffix, + ) + } + case dto.MetricType_HISTOGRAM: + return fmt.Errorf( + "collected metric named %q collides with previously collected histogram named %q", + newName, newNameWithoutSuffix, + ) + } } } - - // We should never arrive here. Multiple metrics with the same - // label set in the same scrape will lead to undefined ingestion - // behavior. However, as above, we have to provide stable sorting - // here, even for inconsistent metrics. So sort equal metrics - // by their timestamp, with missing timestamps (implying "now") - // coming last. - if s[i].TimestampMs == nil { - return false - } - if s[j].TimestampMs == nil { - return true - } - return s[i].GetTimestampMs() < s[j].GetTimestampMs() -} - -// normalizeMetricFamilies returns a MetricFamily slice with empty -// MetricFamilies pruned and the remaining MetricFamilies sorted by name within -// the slice, with the contained Metrics sorted within each MetricFamily. -func normalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily) []*dto.MetricFamily { - for _, mf := range metricFamiliesByName { - sort.Sort(metricSorter(mf.Metric)) - } - names := make([]string, 0, len(metricFamiliesByName)) - for name, mf := range metricFamiliesByName { - if len(mf.Metric) > 0 { - names = append(names, name) + if newType == dto.MetricType_SUMMARY || newType == dto.MetricType_HISTOGRAM { + if _, ok := mfs[newName+"_count"]; ok { + return fmt.Errorf( + "collected histogram or summary named %q collides with previously collected metric named %q", + newName, newName+"_count", + ) + } + if _, ok := mfs[newName+"_sum"]; ok { + return fmt.Errorf( + "collected histogram or summary named %q collides with previously collected metric named %q", + newName, newName+"_sum", + ) } } - sort.Strings(names) - result := make([]*dto.MetricFamily, 0, len(names)) - for _, name := range names { - result = append(result, metricFamiliesByName[name]) + if newType == dto.MetricType_HISTOGRAM { + if _, ok := mfs[newName+"_bucket"]; ok { + return fmt.Errorf( + "collected histogram named %q collides with previously collected metric named %q", + newName, newName+"_bucket", + ) + } } - return result + return nil } // checkMetricConsistency checks if the provided Metric is consistent with the -// provided MetricFamily. It also hashed the Metric labels and the MetricFamily -// name. If the resulting hash is alread in the provided metricHashes, an error -// is returned. If not, it is added to metricHashes. The provided dimHashes maps -// MetricFamily names to their dimHash (hashed sorted label names). If dimHashes -// doesn't yet contain a hash for the provided MetricFamily, it is -// added. Otherwise, an error is returned if the existing dimHashes in not equal -// the calculated dimHash. +// provided MetricFamily. It also hashes the Metric labels and the MetricFamily +// name. If the resulting hash is already in the provided metricHashes, an error +// is returned. If not, it is added to metricHashes. func checkMetricConsistency( metricFamily *dto.MetricFamily, dtoMetric *dto.Metric, metricHashes map[uint64]struct{}, - dimHashes map[string]uint64, ) error { + name := metricFamily.GetName() + // Type consistency with metric family. if metricFamily.GetType() == dto.MetricType_GAUGE && dtoMetric.Gauge == nil || metricFamily.GetType() == dto.MetricType_COUNTER && dtoMetric.Counter == nil || @@ -674,41 +832,65 @@ func checkMetricConsistency( metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil || metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil { return fmt.Errorf( - "collected metric %s %s is not a %s", - metricFamily.GetName(), dtoMetric, metricFamily.GetType(), + "collected metric %q { %s} is not a %s", + name, dtoMetric, metricFamily.GetType(), ) } - // Is the metric unique (i.e. no other metric with the same name and the same label values)? + previousLabelName := "" + for _, labelPair := range dtoMetric.GetLabel() { + labelName := labelPair.GetName() + if labelName == previousLabelName { + return fmt.Errorf( + "collected metric %q { %s} has two or more labels with the same name: %s", + name, dtoMetric, labelName, + ) + } + if !checkLabelName(labelName) { + return fmt.Errorf( + "collected metric %q { %s} has a label with an invalid name: %s", + name, dtoMetric, labelName, + ) + } + if dtoMetric.Summary != nil && labelName == quantileLabel { + return fmt.Errorf( + "collected metric %q { %s} must not have an explicit %q label", + name, dtoMetric, quantileLabel, + ) + } + if !utf8.ValidString(labelPair.GetValue()) { + return fmt.Errorf( + "collected metric %q { %s} has a label named %q whose value is not utf8: %#v", + name, dtoMetric, labelName, labelPair.GetValue()) + } + previousLabelName = labelName + } + + // Is the metric unique (i.e. no other metric with the same name and the same labels)? h := hashNew() - h = hashAdd(h, metricFamily.GetName()) + h = hashAdd(h, name) h = hashAddByte(h, separatorByte) - dh := hashNew() // Make sure label pairs are sorted. We depend on it for the consistency // check. - sort.Sort(LabelPairSorter(dtoMetric.Label)) + if !sort.IsSorted(labelPairSorter(dtoMetric.Label)) { + // We cannot sort dtoMetric.Label in place as it is immutable by contract. + copiedLabels := make([]*dto.LabelPair, len(dtoMetric.Label)) + copy(copiedLabels, dtoMetric.Label) + sort.Sort(labelPairSorter(copiedLabels)) + dtoMetric.Label = copiedLabels + } for _, lp := range dtoMetric.Label { + h = hashAdd(h, lp.GetName()) + h = hashAddByte(h, separatorByte) h = hashAdd(h, lp.GetValue()) h = hashAddByte(h, separatorByte) - dh = hashAdd(dh, lp.GetName()) - dh = hashAddByte(dh, separatorByte) } if _, exists := metricHashes[h]; exists { return fmt.Errorf( - "collected metric %s %s was collected before with the same name and label values", - metricFamily.GetName(), dtoMetric, + "collected metric %q { %s} was collected before with the same name and label values", + name, dtoMetric, ) } - if dimHash, ok := dimHashes[metricFamily.GetName()]; ok { - if dimHash != dh { - return fmt.Errorf( - "collected metric %s %s has label dimensions inconsistent with previously collected metrics in the same metric family", - metricFamily.GetName(), dtoMetric, - ) - } - } else { - dimHashes[metricFamily.GetName()] = dh - } metricHashes[h] = struct{}{} return nil } @@ -727,8 +909,8 @@ func checkDescConsistency( } // Is the desc consistent with the content of the metric? - lpsFromDesc := make([]*dto.LabelPair, 0, len(dtoMetric.Label)) - lpsFromDesc = append(lpsFromDesc, desc.constLabelPairs...) + lpsFromDesc := make([]*dto.LabelPair, len(desc.constLabelPairs), len(dtoMetric.Label)) + copy(lpsFromDesc, desc.constLabelPairs) for _, l := range desc.variableLabels { lpsFromDesc = append(lpsFromDesc, &dto.LabelPair{ Name: proto.String(l), @@ -740,7 +922,7 @@ func checkDescConsistency( metricFamily.GetName(), dtoMetric, desc, ) } - sort.Sort(LabelPairSorter(lpsFromDesc)) + sort.Sort(labelPairSorter(lpsFromDesc)) for i, lpFromDesc := range lpsFromDesc { lpFromMetric := dtoMetric.Label[i] if lpFromDesc.GetName() != lpFromMetric.GetName() || diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index 1c65e25ece6..2980614dff4 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -36,7 +36,10 @@ const quantileLabel = "quantile" // // A typical use-case is the observation of request latencies. By default, a // Summary provides the median, the 90th and the 99th percentile of the latency -// as rank estimations. +// as rank estimations. However, the default behavior will change in the +// upcoming v0.10 of the library. There will be no rank estimations at all by +// default. For a sane transition, it is recommended to set the desired rank +// estimations explicitly. // // Note that the rank estimations cannot be aggregated in a meaningful way with // the Prometheus query language (i.e. you cannot average or add them). If you @@ -78,8 +81,10 @@ const ( ) // SummaryOpts bundles the options for creating a Summary metric. It is -// mandatory to set Name and Help to a non-empty string. All other fields are -// optional and can safely be left at their zero value. +// mandatory to set Name to a non-empty string. While all other fields are +// optional and can safely be left at their zero value, it is recommended to set +// a help string and to explicitly set the Objectives field to the desired value +// as the default value will change in the upcoming v0.10 of the library. type SummaryOpts struct { // Namespace, Subsystem, and Name are components of the fully-qualified // name of the Summary (created by joining these components with @@ -90,29 +95,27 @@ type SummaryOpts struct { Subsystem string Name string - // Help provides information about this Summary. Mandatory! + // Help provides information about this Summary. // // Metrics with the same fully-qualified name must have the same Help // string. Help string - // ConstLabels are used to attach fixed labels to this - // Summary. Summaries with the same fully-qualified name must have the - // same label names in their ConstLabels. + // ConstLabels are used to attach fixed labels to this metric. Metrics + // with the same fully-qualified name must have the same label names in + // their ConstLabels. // - // Note that in most cases, labels have a value that varies during the - // lifetime of a process. Those labels are usually managed with a - // SummaryVec. ConstLabels serve only special purposes. One is for the - // special case where the value of a label does not change during the - // lifetime of a process, e.g. if the revision of the running binary is - // put into a label. Another, more advanced purpose is if more than one - // Collector needs to collect Summaries with the same fully-qualified - // name. In that case, those Summaries must differ in the values of - // their ConstLabels. See the Collector examples. + // Due to the way a Summary is represented in the Prometheus text format + // and how it is handled by the Prometheus server internally, “quantile†+ // is an illegal label name. Construction of a Summary or SummaryVec + // will panic if this label name is used in ConstLabels. // - // If the value of a label never changes (not even between binaries), - // that label most likely should not be a label at all (but part of the - // metric name). + // ConstLabels are only used rarely. In particular, do not use them to + // attach the same labels to all your metrics. Those use cases are + // better covered by target labels set by the scraping Prometheus + // server, or by one specific metric (e.g. a build_info or a + // machine_role metric). See also + // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels ConstLabels Labels // Objectives defines the quantile rank estimates with their respective @@ -178,7 +181,7 @@ func NewSummary(opts SummaryOpts) Summary { func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, labelValues)) } for _, n := range desc.variableLabels { @@ -399,13 +402,21 @@ func (s quantSort) Less(i, j int) bool { // (e.g. HTTP request latencies, partitioned by status code and method). Create // instances with NewSummaryVec. type SummaryVec struct { - *MetricVec + *metricVec } // NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and -// partitioned by the given label names. At least one label name must be -// provided. +// partitioned by the given label names. +// +// Due to the way a Summary is represented in the Prometheus text format and how +// it is handled by the Prometheus server internally, “quantile†is an illegal +// label name. NewSummaryVec will panic if this label name is used. func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec { + for _, ln := range labelNames { + if ln == quantileLabel { + panic(errQuantileLabelNotAllowed) + } + } desc := NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), opts.Help, @@ -413,28 +424,58 @@ func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec { opts.ConstLabels, ) return &SummaryVec{ - MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + metricVec: newMetricVec(desc, func(lvs ...string) Metric { return newSummary(desc, opts, lvs...) }), } } -// GetMetricWithLabelValues replaces the method of the same name in MetricVec. -// The difference is that this method returns an Observer and not a Metric so -// that no type conversion to an Observer is required. -func (m *SummaryVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { - metric, err := m.MetricVec.GetMetricWithLabelValues(lvs...) +// GetMetricWithLabelValues returns the Summary for the given slice of label +// values (same order as the VariableLabels in Desc). If that combination of +// label values is accessed for the first time, a new Summary is created. +// +// It is possible to call this method without using the returned Summary to only +// create the new Summary but leave it at its starting value, a Summary without +// any observations. +// +// Keeping the Summary for later use is possible (and should be considered if +// performance is critical), but keep in mind that Reset, DeleteLabelValues and +// Delete can be used to delete the Summary from the SummaryVec. In that case, +// the Summary will still exist, but it will not be exported anymore, even if a +// Summary with the same label values is created later. See also the CounterVec +// example. +// +// An error is returned if the number of label values is not the same as the +// number of VariableLabels in Desc (minus any curried labels). +// +// Note that for more than one label value, this method is prone to mistakes +// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as +// an alternative to avoid that type of mistake. For higher label numbers, the +// latter has a much more readable (albeit more verbose) syntax, but it comes +// with a performance overhead (for creating and processing the Labels map). +// See also the GaugeVec example. +func (v *SummaryVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { + metric, err := v.metricVec.getMetricWithLabelValues(lvs...) if metric != nil { return metric.(Observer), err } return nil, err } -// GetMetricWith replaces the method of the same name in MetricVec. The -// difference is that this method returns an Observer and not a Metric so that -// no type conversion to an Observer is required. -func (m *SummaryVec) GetMetricWith(labels Labels) (Observer, error) { - metric, err := m.MetricVec.GetMetricWith(labels) +// GetMetricWith returns the Summary for the given Labels map (the label names +// must match those of the VariableLabels in Desc). If that label map is +// accessed for the first time, a new Summary is created. Implications of +// creating a Summary without using it and keeping the Summary for later use are +// the same as for GetMetricWithLabelValues. +// +// An error is returned if the number and names of the Labels are inconsistent +// with those of the VariableLabels in Desc (minus any curried labels). +// +// This method is used for the same purpose as +// GetMetricWithLabelValues(...string). See there for pros and cons of the two +// methods. +func (v *SummaryVec) GetMetricWith(labels Labels) (Observer, error) { + metric, err := v.metricVec.getMetricWith(labels) if metric != nil { return metric.(Observer), err } @@ -442,18 +483,57 @@ func (m *SummaryVec) GetMetricWith(labels Labels) (Observer, error) { } // WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. By not returning an -// error, WithLabelValues allows shortcuts like +// GetMetricWithLabelValues would have returned an error. Not returning an +// error allows shortcuts like // myVec.WithLabelValues("404", "GET").Observe(42.21) -func (m *SummaryVec) WithLabelValues(lvs ...string) Observer { - return m.MetricVec.WithLabelValues(lvs...).(Observer) +func (v *SummaryVec) WithLabelValues(lvs ...string) Observer { + s, err := v.GetMetricWithLabelValues(lvs...) + if err != nil { + panic(err) + } + return s } // With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. By not returning an error, With allows shortcuts like -// myVec.With(Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (m *SummaryVec) With(labels Labels) Observer { - return m.MetricVec.With(labels).(Observer) +// returned an error. Not returning an error allows shortcuts like +// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) +func (v *SummaryVec) With(labels Labels) Observer { + s, err := v.GetMetricWith(labels) + if err != nil { + panic(err) + } + return s +} + +// CurryWith returns a vector curried with the provided labels, i.e. the +// returned vector has those labels pre-set for all labeled operations performed +// on it. The cardinality of the curried vector is reduced accordingly. The +// order of the remaining labels stays the same (just with the curried labels +// taken out of the sequence – which is relevant for the +// (GetMetric)WithLabelValues methods). It is possible to curry a curried +// vector, but only with labels not yet used for currying before. +// +// The metrics contained in the SummaryVec are shared between the curried and +// uncurried vectors. They are just accessed differently. Curried and uncurried +// vectors behave identically in terms of collection. Only one must be +// registered with a given registry (usually the uncurried version). The Reset +// method deletes all metrics, even if called on a curried vector. +func (v *SummaryVec) CurryWith(labels Labels) (ObserverVec, error) { + vec, err := v.curryWith(labels) + if vec != nil { + return &SummaryVec{vec}, err + } + return nil, err +} + +// MustCurryWith works as CurryWith but panics where CurryWith would have +// returned an error. +func (v *SummaryVec) MustCurryWith(labels Labels) ObserverVec { + vec, err := v.CurryWith(labels) + if err != nil { + panic(err) + } + return vec } type constSummary struct { @@ -506,7 +586,7 @@ func (s *constSummary) Write(out *dto.Metric) error { // map[float64]float64{0.5: 0.23, 0.99: 0.56} // // NewConstSummary returns an error if the length of labelValues is not -// consistent with the variable labels in Desc. +// consistent with the variable labels in Desc or if Desc is invalid. func NewConstSummary( desc *Desc, count uint64, @@ -514,8 +594,11 @@ func NewConstSummary( quantiles map[float64]float64, labelValues ...string, ) (Metric, error) { - if len(desc.variableLabels) != len(labelValues) { - return nil, errInconsistentCardinality + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + return nil, err } return &constSummary{ desc: desc, diff --git a/vendor/github.com/prometheus/client_golang/prometheus/timer.go b/vendor/github.com/prometheus/client_golang/prometheus/timer.go index 12b65699b99..8d5f1052337 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/timer.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/timer.go @@ -39,10 +39,16 @@ func NewTimer(o Observer) *Timer { // ObserveDuration records the duration passed since the Timer was created with // NewTimer. It calls the Observe method of the Observer provided during -// construction with the duration in seconds as an argument. ObserveDuration is -// usually called with a defer statement. -func (t *Timer) ObserveDuration() { +// construction with the duration in seconds as an argument. The observed +// duration is also returned. ObserveDuration is usually called with a defer +// statement. +// +// Note that this method is only guaranteed to never observe negative durations +// if used with Go1.9+. +func (t *Timer) ObserveDuration() time.Duration { + d := time.Since(t.begin) if t.observer != nil { - t.observer.Observe(time.Since(t.begin).Seconds()) + t.observer.Observe(d.Seconds()) } + return d } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go index 065501d38fb..0f9ce63f409 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go @@ -13,113 +13,12 @@ package prometheus -// Untyped is a Metric that represents a single numerical value that can -// arbitrarily go up and down. -// -// An Untyped metric works the same as a Gauge. The only difference is that to -// no type information is implied. -// -// To create Untyped instances, use NewUntyped. -// -// Deprecated: The Untyped type is deprecated because it doesn't make sense in -// direct instrumentation. If you need to mirror an external metric of unknown -// type (usually while writing exporters), Use MustNewConstMetric to create an -// untyped metric instance on the fly. -type Untyped interface { - Metric - Collector - - // Set sets the Untyped metric to an arbitrary value. - Set(float64) - // Inc increments the Untyped metric by 1. - Inc() - // Dec decrements the Untyped metric by 1. - Dec() - // Add adds the given value to the Untyped metric. (The value can be - // negative, resulting in a decrease.) - Add(float64) - // Sub subtracts the given value from the Untyped metric. (The value can - // be negative, resulting in an increase.) - Sub(float64) -} - // UntypedOpts is an alias for Opts. See there for doc comments. type UntypedOpts Opts -// NewUntyped creates a new Untyped metric from the provided UntypedOpts. -func NewUntyped(opts UntypedOpts) Untyped { - return newValue(NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), UntypedValue, 0) -} - -// UntypedVec is a Collector that bundles a set of Untyped metrics that all -// share the same Desc, but have different values for their variable -// labels. This is used if you want to count the same thing partitioned by -// various dimensions. Create instances with NewUntypedVec. -type UntypedVec struct { - *MetricVec -} - -// NewUntypedVec creates a new UntypedVec based on the provided UntypedOpts and -// partitioned by the given label names. At least one label name must be -// provided. -func NewUntypedVec(opts UntypedOpts, labelNames []string) *UntypedVec { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - labelNames, - opts.ConstLabels, - ) - return &UntypedVec{ - MetricVec: newMetricVec(desc, func(lvs ...string) Metric { - return newValue(desc, UntypedValue, 0, lvs...) - }), - } -} - -// GetMetricWithLabelValues replaces the method of the same name in -// MetricVec. The difference is that this method returns an Untyped and not a -// Metric so that no type conversion is required. -func (m *UntypedVec) GetMetricWithLabelValues(lvs ...string) (Untyped, error) { - metric, err := m.MetricVec.GetMetricWithLabelValues(lvs...) - if metric != nil { - return metric.(Untyped), err - } - return nil, err -} - -// GetMetricWith replaces the method of the same name in MetricVec. The -// difference is that this method returns an Untyped and not a Metric so that no -// type conversion is required. -func (m *UntypedVec) GetMetricWith(labels Labels) (Untyped, error) { - metric, err := m.MetricVec.GetMetricWith(labels) - if metric != nil { - return metric.(Untyped), err - } - return nil, err -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. By not returning an -// error, WithLabelValues allows shortcuts like -// myVec.WithLabelValues("404", "GET").Add(42) -func (m *UntypedVec) WithLabelValues(lvs ...string) Untyped { - return m.MetricVec.WithLabelValues(lvs...).(Untyped) -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. By not returning an error, With allows shortcuts like -// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -func (m *UntypedVec) With(labels Labels) Untyped { - return m.MetricVec.With(labels).(Untyped) -} - -// UntypedFunc is an Untyped whose value is determined at collect time by -// calling a provided function. +// UntypedFunc works like GaugeFunc but the collected metric is of type +// "Untyped". UntypedFunc is useful to mirror an external metric of unknown +// type. // // To create UntypedFunc instances, use NewUntypedFunc. type UntypedFunc interface { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go index ff75ce58514..eb248f10874 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go @@ -14,16 +14,12 @@ package prometheus import ( - "errors" "fmt" - "math" "sort" - "sync/atomic" - "time" - - dto "github.com/prometheus/client_model/go" "github.com/golang/protobuf/proto" + + dto "github.com/prometheus/client_model/go" ) // ValueType is an enumeration of metric types that represent a simple value. @@ -37,81 +33,6 @@ const ( UntypedValue ) -var errInconsistentCardinality = errors.New("inconsistent label cardinality") - -// value is a generic metric for simple values. It implements Metric, Collector, -// Counter, Gauge, and Untyped. Its effective type is determined by -// ValueType. This is a low-level building block used by the library to back the -// implementations of Counter, Gauge, and Untyped. -type value struct { - // valBits contains the bits of the represented float64 value. It has - // to go first in the struct to guarantee alignment for atomic - // operations. http://golang.org/pkg/sync/atomic/#pkg-note-BUG - valBits uint64 - - selfCollector - - desc *Desc - valType ValueType - labelPairs []*dto.LabelPair -} - -// newValue returns a newly allocated value with the given Desc, ValueType, -// sample value and label values. It panics if the number of label -// values is different from the number of variable labels in Desc. -func newValue(desc *Desc, valueType ValueType, val float64, labelValues ...string) *value { - if len(labelValues) != len(desc.variableLabels) { - panic(errInconsistentCardinality) - } - result := &value{ - desc: desc, - valType: valueType, - valBits: math.Float64bits(val), - labelPairs: makeLabelPairs(desc, labelValues), - } - result.init(result) - return result -} - -func (v *value) Desc() *Desc { - return v.desc -} - -func (v *value) Set(val float64) { - atomic.StoreUint64(&v.valBits, math.Float64bits(val)) -} - -func (v *value) SetToCurrentTime() { - v.Set(float64(time.Now().UnixNano()) / 1e9) -} - -func (v *value) Inc() { - v.Add(1) -} - -func (v *value) Dec() { - v.Add(-1) -} - -func (v *value) Add(val float64) { - for { - oldBits := atomic.LoadUint64(&v.valBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + val) - if atomic.CompareAndSwapUint64(&v.valBits, oldBits, newBits) { - return - } - } -} - -func (v *value) Sub(val float64) { - v.Add(val * -1) -} - -func (v *value) Write(out *dto.Metric) error { - val := math.Float64frombits(atomic.LoadUint64(&v.valBits)) - return populateMetric(v.valType, val, v.labelPairs, out) -} - // valueFunc is a generic metric for simple values retrieved on collect time // from a function. It implements Metric and Collector. Its effective type is // determined by ValueType. This is a low-level building block used by the @@ -156,10 +77,14 @@ func (v *valueFunc) Write(out *dto.Metric) error { // operations. However, when implementing custom Collectors, it is useful as a // throw-away metric that is generated on the fly to send it to Prometheus in // the Collect method. NewConstMetric returns an error if the length of -// labelValues is not consistent with the variable labels in Desc. +// labelValues is not consistent with the variable labels in Desc or if Desc is +// invalid. func NewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues ...string) (Metric, error) { - if len(desc.variableLabels) != len(labelValues) { - return nil, errInconsistentCardinality + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + return nil, err } return &constMetric{ desc: desc, @@ -231,9 +156,7 @@ func makeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { Value: proto.String(labelValues[i]), }) } - for _, lp := range desc.constLabelPairs { - labelPairs = append(labelPairs, lp) - } - sort.Sort(LabelPairSorter(labelPairs)) + labelPairs = append(labelPairs, desc.constLabelPairs...) + sort.Sort(labelPairSorter(labelPairs)) return labelPairs } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 7f3eef9a467..14ed9e856d1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -20,33 +20,180 @@ import ( "github.com/prometheus/common/model" ) -// MetricVec is a Collector to bundle metrics of the same name that -// differ in their label values. MetricVec is usually not used directly but as a -// building block for implementations of vectors of a given metric -// type. GaugeVec, CounterVec, SummaryVec, and UntypedVec are examples already -// provided in this package. -type MetricVec struct { - mtx sync.RWMutex // Protects the children. - children map[uint64][]metricWithLabelValues - desc *Desc +// metricVec is a Collector to bundle metrics of the same name that differ in +// their label values. metricVec is not used directly (and therefore +// unexported). It is used as a building block for implementations of vectors of +// a given metric type, like GaugeVec, CounterVec, SummaryVec, and HistogramVec. +// It also handles label currying. It uses basicMetricVec internally. +type metricVec struct { + *metricMap - newMetric func(labelValues ...string) Metric - hashAdd func(h uint64, s string) uint64 // replace hash function for testing collision handling + curry []curriedLabelValue + + // hashAdd and hashAddByte can be replaced for testing collision handling. + hashAdd func(h uint64, s string) uint64 hashAddByte func(h uint64, b byte) uint64 } -// newMetricVec returns an initialized MetricVec. The concrete value is -// returned for embedding into another struct. -func newMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *MetricVec { - return &MetricVec{ - children: map[uint64][]metricWithLabelValues{}, - desc: desc, - newMetric: newMetric, +// newMetricVec returns an initialized metricVec. +func newMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *metricVec { + return &metricVec{ + metricMap: &metricMap{ + metrics: map[uint64][]metricWithLabelValues{}, + desc: desc, + newMetric: newMetric, + }, hashAdd: hashAdd, hashAddByte: hashAddByte, } } +// DeleteLabelValues removes the metric where the variable labels are the same +// as those passed in as labels (same order as the VariableLabels in Desc). It +// returns true if a metric was deleted. +// +// It is not an error if the number of label values is not the same as the +// number of VariableLabels in Desc. However, such inconsistent label count can +// never match an actual metric, so the method will always return false in that +// case. +// +// Note that for more than one label value, this method is prone to mistakes +// caused by an incorrect order of arguments. Consider Delete(Labels) as an +// alternative to avoid that type of mistake. For higher label numbers, the +// latter has a much more readable (albeit more verbose) syntax, but it comes +// with a performance overhead (for creating and processing the Labels map). +// See also the CounterVec example. +func (m *metricVec) DeleteLabelValues(lvs ...string) bool { + h, err := m.hashLabelValues(lvs) + if err != nil { + return false + } + + return m.metricMap.deleteByHashWithLabelValues(h, lvs, m.curry) +} + +// Delete deletes the metric where the variable labels are the same as those +// passed in as labels. It returns true if a metric was deleted. +// +// It is not an error if the number and names of the Labels are inconsistent +// with those of the VariableLabels in Desc. However, such inconsistent Labels +// can never match an actual metric, so the method will always return false in +// that case. +// +// This method is used for the same purpose as DeleteLabelValues(...string). See +// there for pros and cons of the two methods. +func (m *metricVec) Delete(labels Labels) bool { + h, err := m.hashLabels(labels) + if err != nil { + return false + } + + return m.metricMap.deleteByHashWithLabels(h, labels, m.curry) +} + +func (m *metricVec) curryWith(labels Labels) (*metricVec, error) { + var ( + newCurry []curriedLabelValue + oldCurry = m.curry + iCurry int + ) + for i, label := range m.desc.variableLabels { + val, ok := labels[label] + if iCurry < len(oldCurry) && oldCurry[iCurry].index == i { + if ok { + return nil, fmt.Errorf("label name %q is already curried", label) + } + newCurry = append(newCurry, oldCurry[iCurry]) + iCurry++ + } else { + if !ok { + continue // Label stays uncurried. + } + newCurry = append(newCurry, curriedLabelValue{i, val}) + } + } + if l := len(oldCurry) + len(labels) - len(newCurry); l > 0 { + return nil, fmt.Errorf("%d unknown label(s) found during currying", l) + } + + return &metricVec{ + metricMap: m.metricMap, + curry: newCurry, + hashAdd: m.hashAdd, + hashAddByte: m.hashAddByte, + }, nil +} + +func (m *metricVec) getMetricWithLabelValues(lvs ...string) (Metric, error) { + h, err := m.hashLabelValues(lvs) + if err != nil { + return nil, err + } + + return m.metricMap.getOrCreateMetricWithLabelValues(h, lvs, m.curry), nil +} + +func (m *metricVec) getMetricWith(labels Labels) (Metric, error) { + h, err := m.hashLabels(labels) + if err != nil { + return nil, err + } + + return m.metricMap.getOrCreateMetricWithLabels(h, labels, m.curry), nil +} + +func (m *metricVec) hashLabelValues(vals []string) (uint64, error) { + if err := validateLabelValues(vals, len(m.desc.variableLabels)-len(m.curry)); err != nil { + return 0, err + } + + var ( + h = hashNew() + curry = m.curry + iVals, iCurry int + ) + for i := 0; i < len(m.desc.variableLabels); i++ { + if iCurry < len(curry) && curry[iCurry].index == i { + h = m.hashAdd(h, curry[iCurry].value) + iCurry++ + } else { + h = m.hashAdd(h, vals[iVals]) + iVals++ + } + h = m.hashAddByte(h, model.SeparatorByte) + } + return h, nil +} + +func (m *metricVec) hashLabels(labels Labels) (uint64, error) { + if err := validateValuesInLabels(labels, len(m.desc.variableLabels)-len(m.curry)); err != nil { + return 0, err + } + + var ( + h = hashNew() + curry = m.curry + iCurry int + ) + for i, label := range m.desc.variableLabels { + val, ok := labels[label] + if iCurry < len(curry) && curry[iCurry].index == i { + if ok { + return 0, fmt.Errorf("label name %q is already curried", label) + } + h = m.hashAdd(h, curry[iCurry].value) + iCurry++ + } else { + if !ok { + return 0, fmt.Errorf("label name %q missing in label map", label) + } + h = m.hashAdd(h, val) + } + h = m.hashAddByte(h, model.SeparatorByte) + } + return h, nil +} + // metricWithLabelValues provides the metric and its label values for // disambiguation on hash collision. type metricWithLabelValues struct { @@ -54,166 +201,72 @@ type metricWithLabelValues struct { metric Metric } -// Describe implements Collector. The length of the returned slice -// is always one. -func (m *MetricVec) Describe(ch chan<- *Desc) { +// curriedLabelValue sets the curried value for a label at the given index. +type curriedLabelValue struct { + index int + value string +} + +// metricMap is a helper for metricVec and shared between differently curried +// metricVecs. +type metricMap struct { + mtx sync.RWMutex // Protects metrics. + metrics map[uint64][]metricWithLabelValues + desc *Desc + newMetric func(labelValues ...string) Metric +} + +// Describe implements Collector. It will send exactly one Desc to the provided +// channel. +func (m *metricMap) Describe(ch chan<- *Desc) { ch <- m.desc } // Collect implements Collector. -func (m *MetricVec) Collect(ch chan<- Metric) { +func (m *metricMap) Collect(ch chan<- Metric) { m.mtx.RLock() defer m.mtx.RUnlock() - for _, metrics := range m.children { + for _, metrics := range m.metrics { for _, metric := range metrics { ch <- metric.metric } } } -// GetMetricWithLabelValues returns the Metric for the given slice of label -// values (same order as the VariableLabels in Desc). If that combination of -// label values is accessed for the first time, a new Metric is created. -// -// It is possible to call this method without using the returned Metric to only -// create the new Metric but leave it at its start value (e.g. a Summary or -// Histogram without any observations). See also the SummaryVec example. -// -// Keeping the Metric for later use is possible (and should be considered if -// performance is critical), but keep in mind that Reset, DeleteLabelValues and -// Delete can be used to delete the Metric from the MetricVec. In that case, the -// Metric will still exist, but it will not be exported anymore, even if a -// Metric with the same label values is created later. See also the CounterVec -// example. -// -// An error is returned if the number of label values is not the same as the -// number of VariableLabels in Desc. -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -// an alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the GaugeVec example. -func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) { - h, err := m.hashLabelValues(lvs) - if err != nil { - return nil, err - } - - return m.getOrCreateMetricWithLabelValues(h, lvs), nil -} - -// GetMetricWith returns the Metric for the given Labels map (the label names -// must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Metric is created. Implications of -// creating a Metric without using it and keeping the Metric for later use are -// the same as for GetMetricWithLabelValues. -// -// An error is returned if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc. -// -// This method is used for the same purpose as -// GetMetricWithLabelValues(...string). See there for pros and cons of the two -// methods. -func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) { - h, err := m.hashLabels(labels) - if err != nil { - return nil, err - } - - return m.getOrCreateMetricWithLabels(h, labels), nil -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics if an error -// occurs. The method allows neat syntax like: -// httpReqs.WithLabelValues("404", "POST").Inc() -func (m *MetricVec) WithLabelValues(lvs ...string) Metric { - metric, err := m.GetMetricWithLabelValues(lvs...) - if err != nil { - panic(err) - } - return metric -} - -// With works as GetMetricWith, but panics if an error occurs. The method allows -// neat syntax like: -// httpReqs.With(Labels{"status":"404", "method":"POST"}).Inc() -func (m *MetricVec) With(labels Labels) Metric { - metric, err := m.GetMetricWith(labels) - if err != nil { - panic(err) - } - return metric -} - -// DeleteLabelValues removes the metric where the variable labels are the same -// as those passed in as labels (same order as the VariableLabels in Desc). It -// returns true if a metric was deleted. -// -// It is not an error if the number of label values is not the same as the -// number of VariableLabels in Desc. However, such inconsistent label count can -// never match an actual Metric, so the method will always return false in that -// case. -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider Delete(Labels) as an -// alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the CounterVec example. -func (m *MetricVec) DeleteLabelValues(lvs ...string) bool { +// Reset deletes all metrics in this vector. +func (m *metricMap) Reset() { m.mtx.Lock() defer m.mtx.Unlock() - h, err := m.hashLabelValues(lvs) - if err != nil { - return false + for h := range m.metrics { + delete(m.metrics, h) } - return m.deleteByHashWithLabelValues(h, lvs) -} - -// Delete deletes the metric where the variable labels are the same as those -// passed in as labels. It returns true if a metric was deleted. -// -// It is not an error if the number and names of the Labels are inconsistent -// with those of the VariableLabels in the Desc of the MetricVec. However, such -// inconsistent Labels can never match an actual Metric, so the method will -// always return false in that case. -// -// This method is used for the same purpose as DeleteLabelValues(...string). See -// there for pros and cons of the two methods. -func (m *MetricVec) Delete(labels Labels) bool { - m.mtx.Lock() - defer m.mtx.Unlock() - - h, err := m.hashLabels(labels) - if err != nil { - return false - } - - return m.deleteByHashWithLabels(h, labels) } // deleteByHashWithLabelValues removes the metric from the hash bucket h. If // there are multiple matches in the bucket, use lvs to select a metric and // remove only that metric. -func (m *MetricVec) deleteByHashWithLabelValues(h uint64, lvs []string) bool { - metrics, ok := m.children[h] +func (m *metricMap) deleteByHashWithLabelValues( + h uint64, lvs []string, curry []curriedLabelValue, +) bool { + m.mtx.Lock() + defer m.mtx.Unlock() + + metrics, ok := m.metrics[h] if !ok { return false } - i := m.findMetricWithLabelValues(metrics, lvs) + i := findMetricWithLabelValues(metrics, lvs, curry) if i >= len(metrics) { return false } if len(metrics) > 1 { - m.children[h] = append(metrics[:i], metrics[i+1:]...) + m.metrics[h] = append(metrics[:i], metrics[i+1:]...) } else { - delete(m.children, h) + delete(m.metrics, h) } return true } @@ -221,69 +274,38 @@ func (m *MetricVec) deleteByHashWithLabelValues(h uint64, lvs []string) bool { // deleteByHashWithLabels removes the metric from the hash bucket h. If there // are multiple matches in the bucket, use lvs to select a metric and remove // only that metric. -func (m *MetricVec) deleteByHashWithLabels(h uint64, labels Labels) bool { - metrics, ok := m.children[h] +func (m *metricMap) deleteByHashWithLabels( + h uint64, labels Labels, curry []curriedLabelValue, +) bool { + m.mtx.Lock() + defer m.mtx.Unlock() + + metrics, ok := m.metrics[h] if !ok { return false } - i := m.findMetricWithLabels(metrics, labels) + i := findMetricWithLabels(m.desc, metrics, labels, curry) if i >= len(metrics) { return false } if len(metrics) > 1 { - m.children[h] = append(metrics[:i], metrics[i+1:]...) + m.metrics[h] = append(metrics[:i], metrics[i+1:]...) } else { - delete(m.children, h) + delete(m.metrics, h) } return true } -// Reset deletes all metrics in this vector. -func (m *MetricVec) Reset() { - m.mtx.Lock() - defer m.mtx.Unlock() - - for h := range m.children { - delete(m.children, h) - } -} - -func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { - if len(vals) != len(m.desc.variableLabels) { - return 0, errInconsistentCardinality - } - h := hashNew() - for _, val := range vals { - h = m.hashAdd(h, val) - h = m.hashAddByte(h, model.SeparatorByte) - } - return h, nil -} - -func (m *MetricVec) hashLabels(labels Labels) (uint64, error) { - if len(labels) != len(m.desc.variableLabels) { - return 0, errInconsistentCardinality - } - h := hashNew() - for _, label := range m.desc.variableLabels { - val, ok := labels[label] - if !ok { - return 0, fmt.Errorf("label name %q missing in label map", label) - } - h = m.hashAdd(h, val) - h = m.hashAddByte(h, model.SeparatorByte) - } - return h, nil -} - // getOrCreateMetricWithLabelValues retrieves the metric by hash and label value // or creates it and returns the new one. // // This function holds the mutex. -func (m *MetricVec) getOrCreateMetricWithLabelValues(hash uint64, lvs []string) Metric { +func (m *metricMap) getOrCreateMetricWithLabelValues( + hash uint64, lvs []string, curry []curriedLabelValue, +) Metric { m.mtx.RLock() - metric, ok := m.getMetricWithLabelValues(hash, lvs) + metric, ok := m.getMetricWithHashAndLabelValues(hash, lvs, curry) m.mtx.RUnlock() if ok { return metric @@ -291,13 +313,11 @@ func (m *MetricVec) getOrCreateMetricWithLabelValues(hash uint64, lvs []string) m.mtx.Lock() defer m.mtx.Unlock() - metric, ok = m.getMetricWithLabelValues(hash, lvs) + metric, ok = m.getMetricWithHashAndLabelValues(hash, lvs, curry) if !ok { - // Copy to avoid allocation in case wo don't go down this code path. - copiedLVs := make([]string, len(lvs)) - copy(copiedLVs, lvs) - metric = m.newMetric(copiedLVs...) - m.children[hash] = append(m.children[hash], metricWithLabelValues{values: copiedLVs, metric: metric}) + inlinedLVs := inlineLabelValues(lvs, curry) + metric = m.newMetric(inlinedLVs...) + m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: inlinedLVs, metric: metric}) } return metric } @@ -306,9 +326,11 @@ func (m *MetricVec) getOrCreateMetricWithLabelValues(hash uint64, lvs []string) // or creates it and returns the new one. // // This function holds the mutex. -func (m *MetricVec) getOrCreateMetricWithLabels(hash uint64, labels Labels) Metric { +func (m *metricMap) getOrCreateMetricWithLabels( + hash uint64, labels Labels, curry []curriedLabelValue, +) Metric { m.mtx.RLock() - metric, ok := m.getMetricWithLabels(hash, labels) + metric, ok := m.getMetricWithHashAndLabels(hash, labels, curry) m.mtx.RUnlock() if ok { return metric @@ -316,33 +338,37 @@ func (m *MetricVec) getOrCreateMetricWithLabels(hash uint64, labels Labels) Metr m.mtx.Lock() defer m.mtx.Unlock() - metric, ok = m.getMetricWithLabels(hash, labels) + metric, ok = m.getMetricWithHashAndLabels(hash, labels, curry) if !ok { - lvs := m.extractLabelValues(labels) + lvs := extractLabelValues(m.desc, labels, curry) metric = m.newMetric(lvs...) - m.children[hash] = append(m.children[hash], metricWithLabelValues{values: lvs, metric: metric}) + m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: lvs, metric: metric}) } return metric } -// getMetricWithLabelValues gets a metric while handling possible collisions in -// the hash space. Must be called while holding read mutex. -func (m *MetricVec) getMetricWithLabelValues(h uint64, lvs []string) (Metric, bool) { - metrics, ok := m.children[h] +// getMetricWithHashAndLabelValues gets a metric while handling possible +// collisions in the hash space. Must be called while holding the read mutex. +func (m *metricMap) getMetricWithHashAndLabelValues( + h uint64, lvs []string, curry []curriedLabelValue, +) (Metric, bool) { + metrics, ok := m.metrics[h] if ok { - if i := m.findMetricWithLabelValues(metrics, lvs); i < len(metrics) { + if i := findMetricWithLabelValues(metrics, lvs, curry); i < len(metrics) { return metrics[i].metric, true } } return nil, false } -// getMetricWithLabels gets a metric while handling possible collisions in +// getMetricWithHashAndLabels gets a metric while handling possible collisions in // the hash space. Must be called while holding read mutex. -func (m *MetricVec) getMetricWithLabels(h uint64, labels Labels) (Metric, bool) { - metrics, ok := m.children[h] +func (m *metricMap) getMetricWithHashAndLabels( + h uint64, labels Labels, curry []curriedLabelValue, +) (Metric, bool) { + metrics, ok := m.metrics[h] if ok { - if i := m.findMetricWithLabels(metrics, labels); i < len(metrics) { + if i := findMetricWithLabels(m.desc, metrics, labels, curry); i < len(metrics) { return metrics[i].metric, true } } @@ -351,9 +377,11 @@ func (m *MetricVec) getMetricWithLabels(h uint64, labels Labels) (Metric, bool) // findMetricWithLabelValues returns the index of the matching metric or // len(metrics) if not found. -func (m *MetricVec) findMetricWithLabelValues(metrics []metricWithLabelValues, lvs []string) int { +func findMetricWithLabelValues( + metrics []metricWithLabelValues, lvs []string, curry []curriedLabelValue, +) int { for i, metric := range metrics { - if m.matchLabelValues(metric.values, lvs) { + if matchLabelValues(metric.values, lvs, curry) { return i } } @@ -362,32 +390,51 @@ func (m *MetricVec) findMetricWithLabelValues(metrics []metricWithLabelValues, l // findMetricWithLabels returns the index of the matching metric or len(metrics) // if not found. -func (m *MetricVec) findMetricWithLabels(metrics []metricWithLabelValues, labels Labels) int { +func findMetricWithLabels( + desc *Desc, metrics []metricWithLabelValues, labels Labels, curry []curriedLabelValue, +) int { for i, metric := range metrics { - if m.matchLabels(metric.values, labels) { + if matchLabels(desc, metric.values, labels, curry) { return i } } return len(metrics) } -func (m *MetricVec) matchLabelValues(values []string, lvs []string) bool { - if len(values) != len(lvs) { +func matchLabelValues(values []string, lvs []string, curry []curriedLabelValue) bool { + if len(values) != len(lvs)+len(curry) { return false } + var iLVs, iCurry int for i, v := range values { - if v != lvs[i] { + if iCurry < len(curry) && curry[iCurry].index == i { + if v != curry[iCurry].value { + return false + } + iCurry++ + continue + } + if v != lvs[iLVs] { return false } + iLVs++ } return true } -func (m *MetricVec) matchLabels(values []string, labels Labels) bool { - if len(labels) != len(values) { +func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabelValue) bool { + if len(values) != len(labels)+len(curry) { return false } - for i, k := range m.desc.variableLabels { + iCurry := 0 + for i, k := range desc.variableLabels { + if iCurry < len(curry) && curry[iCurry].index == i { + if values[i] != curry[iCurry].value { + return false + } + iCurry++ + continue + } if values[i] != labels[k] { return false } @@ -395,10 +442,31 @@ func (m *MetricVec) matchLabels(values []string, labels Labels) bool { return true } -func (m *MetricVec) extractLabelValues(labels Labels) []string { - labelValues := make([]string, len(labels)) - for i, k := range m.desc.variableLabels { +func extractLabelValues(desc *Desc, labels Labels, curry []curriedLabelValue) []string { + labelValues := make([]string, len(labels)+len(curry)) + iCurry := 0 + for i, k := range desc.variableLabels { + if iCurry < len(curry) && curry[iCurry].index == i { + labelValues[i] = curry[iCurry].value + iCurry++ + continue + } labelValues[i] = labels[k] } return labelValues } + +func inlineLabelValues(lvs []string, curry []curriedLabelValue) []string { + labelValues := make([]string, len(lvs)+len(curry)) + var iCurry, iLVs int + for i := range labelValues { + if iCurry < len(curry) && curry[iCurry].index == i { + labelValues[i] = curry[iCurry].value + iCurry++ + continue + } + labelValues[i] = lvs[iLVs] + iLVs++ + } + return labelValues +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go new file mode 100644 index 00000000000..49159bf3eb0 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go @@ -0,0 +1,179 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prometheus + +import ( + "fmt" + "sort" + + "github.com/golang/protobuf/proto" + + dto "github.com/prometheus/client_model/go" +) + +// WrapRegistererWith returns a Registerer wrapping the provided +// Registerer. Collectors registered with the returned Registerer will be +// registered with the wrapped Registerer in a modified way. The modified +// Collector adds the provided Labels to all Metrics it collects (as +// ConstLabels). The Metrics collected by the unmodified Collector must not +// duplicate any of those labels. +// +// WrapRegistererWith provides a way to add fixed labels to a subset of +// Collectors. It should not be used to add fixed labels to all metrics exposed. +// +// The Collector example demonstrates a use of WrapRegistererWith. +func WrapRegistererWith(labels Labels, reg Registerer) Registerer { + return &wrappingRegisterer{ + wrappedRegisterer: reg, + labels: labels, + } +} + +// WrapRegistererWithPrefix returns a Registerer wrapping the provided +// Registerer. Collectors registered with the returned Registerer will be +// registered with the wrapped Registerer in a modified way. The modified +// Collector adds the provided prefix to the name of all Metrics it collects. +// +// WrapRegistererWithPrefix is useful to have one place to prefix all metrics of +// a sub-system. To make this work, register metrics of the sub-system with the +// wrapping Registerer returned by WrapRegistererWithPrefix. It is rarely useful +// to use the same prefix for all metrics exposed. In particular, do not prefix +// metric names that are standardized across applications, as that would break +// horizontal monitoring, for example the metrics provided by the Go collector +// (see NewGoCollector) and the process collector (see NewProcessCollector). (In +// fact, those metrics are already prefixed with “go_†or “process_â€, +// respectively.) +func WrapRegistererWithPrefix(prefix string, reg Registerer) Registerer { + return &wrappingRegisterer{ + wrappedRegisterer: reg, + prefix: prefix, + } +} + +type wrappingRegisterer struct { + wrappedRegisterer Registerer + prefix string + labels Labels +} + +func (r *wrappingRegisterer) Register(c Collector) error { + return r.wrappedRegisterer.Register(&wrappingCollector{ + wrappedCollector: c, + prefix: r.prefix, + labels: r.labels, + }) +} + +func (r *wrappingRegisterer) MustRegister(cs ...Collector) { + for _, c := range cs { + if err := r.Register(c); err != nil { + panic(err) + } + } +} + +func (r *wrappingRegisterer) Unregister(c Collector) bool { + return r.wrappedRegisterer.Unregister(&wrappingCollector{ + wrappedCollector: c, + prefix: r.prefix, + labels: r.labels, + }) +} + +type wrappingCollector struct { + wrappedCollector Collector + prefix string + labels Labels +} + +func (c *wrappingCollector) Collect(ch chan<- Metric) { + wrappedCh := make(chan Metric) + go func() { + c.wrappedCollector.Collect(wrappedCh) + close(wrappedCh) + }() + for m := range wrappedCh { + ch <- &wrappingMetric{ + wrappedMetric: m, + prefix: c.prefix, + labels: c.labels, + } + } +} + +func (c *wrappingCollector) Describe(ch chan<- *Desc) { + wrappedCh := make(chan *Desc) + go func() { + c.wrappedCollector.Describe(wrappedCh) + close(wrappedCh) + }() + for desc := range wrappedCh { + ch <- wrapDesc(desc, c.prefix, c.labels) + } +} + +type wrappingMetric struct { + wrappedMetric Metric + prefix string + labels Labels +} + +func (m *wrappingMetric) Desc() *Desc { + return wrapDesc(m.wrappedMetric.Desc(), m.prefix, m.labels) +} + +func (m *wrappingMetric) Write(out *dto.Metric) error { + if err := m.wrappedMetric.Write(out); err != nil { + return err + } + if len(m.labels) == 0 { + // No wrapping labels. + return nil + } + for ln, lv := range m.labels { + out.Label = append(out.Label, &dto.LabelPair{ + Name: proto.String(ln), + Value: proto.String(lv), + }) + } + sort.Sort(labelPairSorter(out.Label)) + return nil +} + +func wrapDesc(desc *Desc, prefix string, labels Labels) *Desc { + constLabels := Labels{} + for _, lp := range desc.constLabelPairs { + constLabels[*lp.Name] = *lp.Value + } + for ln, lv := range labels { + if _, alreadyUsed := constLabels[ln]; alreadyUsed { + return &Desc{ + fqName: desc.fqName, + help: desc.help, + variableLabels: desc.variableLabels, + constLabelPairs: desc.constLabelPairs, + err: fmt.Errorf("attempted wrapping with already existing label name %q", ln), + } + } + constLabels[ln] = lv + } + // NewDesc will do remaining validations. + newDesc := NewDesc(prefix+desc.fqName, desc.help, desc.variableLabels, constLabels) + // Propagate errors if there was any. This will override any errer + // created by NewDesc above, i.e. earlier errors get precedence. + if desc.err != nil { + newDesc.err = desc.err + } + return newDesc +} diff --git a/vendor/github.com/prometheus/common/.travis.yml b/vendor/github.com/prometheus/common/.travis.yml index 2fe8e9ad7a3..c295cb0fe82 100644 --- a/vendor/github.com/prometheus/common/.travis.yml +++ b/vendor/github.com/prometheus/common/.travis.yml @@ -2,5 +2,12 @@ sudo: false language: go go: - - 1.7.5 - - tip + - 1.7.x + - 1.8.x + - 1.9.x + - 1.10.x + - 1.11.x + +script: + - make test + - if [[ $TRAVIS_GO_VERSION =~ ^1\.(11)\. ]]; then make style; fi diff --git a/vendor/github.com/prometheus/common/MAINTAINERS.md b/vendor/github.com/prometheus/common/MAINTAINERS.md index 1b315216165..d1cb20b89f7 100644 --- a/vendor/github.com/prometheus/common/MAINTAINERS.md +++ b/vendor/github.com/prometheus/common/MAINTAINERS.md @@ -1 +1 @@ -* Fabian Reinartz +* Brian Brazil diff --git a/vendor/github.com/prometheus/common/Makefile b/vendor/github.com/prometheus/common/Makefile new file mode 100644 index 00000000000..583ef3119b2 --- /dev/null +++ b/vendor/github.com/prometheus/common/Makefile @@ -0,0 +1,26 @@ +# Copyright 2018 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include Makefile.common + +.PHONY: deps +deps: + @echo ">> getting dependencies" + GO111MODULE=$(GO111MODULE) $(GO) get $(GOOPTS) -t ./... + +.PHONY: test +test:: deps check_license unused common-test + +ifeq (,$(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(7|8|9)\.')) +test:: staticcheck +endif diff --git a/vendor/github.com/prometheus/common/Makefile.common b/vendor/github.com/prometheus/common/Makefile.common new file mode 100644 index 00000000000..fff85f92260 --- /dev/null +++ b/vendor/github.com/prometheus/common/Makefile.common @@ -0,0 +1,233 @@ +# Copyright 2018 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# A common Makefile that includes rules to be reused in different prometheus projects. +# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! + +# Example usage : +# Create the main Makefile in the root project directory. +# include Makefile.common +# customTarget: +# @echo ">> Running customTarget" +# + +# Ensure GOBIN is not set during build so that promu is installed to the correct path +unexport GOBIN + +GO ?= go +GOFMT ?= $(GO)fmt +FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) +GOOPTS ?= +GOHOSTOS ?= $(shell $(GO) env GOHOSTOS) +GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH) + +GO_VERSION ?= $(shell $(GO) version) +GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) +PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') + +unexport GOVENDOR +ifeq (, $(PRE_GO_111)) + ifneq (,$(wildcard go.mod)) + # Enforce Go modules support just in case the directory is inside GOPATH (and for Travis CI). + GO111MODULE := on + + ifneq (,$(wildcard vendor)) + # Always use the local vendor/ directory to satisfy the dependencies. + GOOPTS := $(GOOPTS) -mod=vendor + endif + endif +else + ifneq (,$(wildcard go.mod)) + ifneq (,$(wildcard vendor)) +$(warning This repository requires Go >= 1.11 because of Go modules) +$(warning Some recipes may not work as expected as the current Go runtime is '$(GO_VERSION_NUMBER)') + endif + else + # This repository isn't using Go modules (yet). + GOVENDOR := $(FIRST_GOPATH)/bin/govendor + endif + + unexport GO111MODULE +endif +PROMU := $(FIRST_GOPATH)/bin/promu +STATICCHECK := $(FIRST_GOPATH)/bin/staticcheck +pkgs = ./... + +ifeq (arm, $(GOHOSTARCH)) + GOHOSTARM ?= $(shell GOARM= $(GO) env GOARM) + GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)v$(GOHOSTARM) +else + GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH) +endif + +PROMU_VERSION ?= 0.2.0 +PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz +STATICCHECK_VERSION ?= 2019.1 +STATICCHECK_URL := https://github.com/dominikh/go-tools/releases/download/$(STATICCHECK_VERSION)/staticcheck_$(GOHOSTOS)_$(GOHOSTARCH) + +PREFIX ?= $(shell pwd) +BIN_DIR ?= $(shell pwd) +DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) +DOCKER_REPO ?= prom + +ifeq ($(GOHOSTARCH),amd64) + ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) + # Only supported on amd64 + test-flags := -race + endif +endif + +.PHONY: all +all: precheck style staticcheck unused build test + +# This rule is used to forward a target like "build" to "common-build". This +# allows a new "build" target to be defined in a Makefile which includes this +# one and override "common-build" without override warnings. +%: common-% ; + +.PHONY: common-style +common-style: + @echo ">> checking code style" + @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ + if [ -n "$${fmtRes}" ]; then \ + echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ + echo "Please ensure you are using $$($(GO) version) for formatting code."; \ + exit 1; \ + fi + +.PHONY: common-check_license +common-check_license: + @echo ">> checking license header" + @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ + awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ + done); \ + if [ -n "$${licRes}" ]; then \ + echo "license header checking failed:"; echo "$${licRes}"; \ + exit 1; \ + fi + +.PHONY: common-test-short +common-test-short: + @echo ">> running short tests" + GO111MODULE=$(GO111MODULE) $(GO) test -short $(GOOPTS) $(pkgs) + +.PHONY: common-test +common-test: + @echo ">> running all tests" + GO111MODULE=$(GO111MODULE) $(GO) test $(test-flags) $(GOOPTS) $(pkgs) + +.PHONY: common-format +common-format: + @echo ">> formatting code" + GO111MODULE=$(GO111MODULE) $(GO) fmt $(pkgs) + +.PHONY: common-vet +common-vet: + @echo ">> vetting code" + GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs) + +.PHONY: common-staticcheck +common-staticcheck: $(STATICCHECK) + @echo ">> running staticcheck" + chmod +x $(STATICCHECK) +ifdef GO111MODULE +# 'go list' needs to be executed before staticcheck to prepopulate the modules cache. +# Otherwise staticcheck might fail randomly for some reason not yet explained. + GO111MODULE=$(GO111MODULE) $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null + GO111MODULE=$(GO111MODULE) $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) +else + $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) +endif + +.PHONY: common-unused +common-unused: $(GOVENDOR) +ifdef GOVENDOR + @echo ">> running check for unused packages" + @$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages' +else +ifdef GO111MODULE + @echo ">> running check for unused/missing packages in go.mod" + GO111MODULE=$(GO111MODULE) $(GO) mod tidy +ifeq (,$(wildcard vendor)) + @git diff --exit-code -- go.sum go.mod +else + @echo ">> running check for unused packages in vendor/" + GO111MODULE=$(GO111MODULE) $(GO) mod vendor + @git diff --exit-code -- go.sum go.mod vendor/ +endif +endif +endif + +.PHONY: common-build +common-build: promu + @echo ">> building binaries" + GO111MODULE=$(GO111MODULE) $(PROMU) build --prefix $(PREFIX) + +.PHONY: common-tarball +common-tarball: promu + @echo ">> building release tarball" + $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) + +.PHONY: common-docker +common-docker: + docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . + +.PHONY: common-docker-publish +common-docker-publish: + docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" + +.PHONY: common-docker-tag-latest +common-docker-tag-latest: + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):latest" + +.PHONY: promu +promu: $(PROMU) + +$(PROMU): + $(eval PROMU_TMP := $(shell mktemp -d)) + curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP) + mkdir -p $(FIRST_GOPATH)/bin + cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu + rm -r $(PROMU_TMP) + +.PHONY: proto +proto: + @echo ">> generating code from proto files" + @./scripts/genproto.sh + +$(STATICCHECK): + mkdir -p $(FIRST_GOPATH)/bin + curl -s -L $(STATICCHECK_URL) > $(STATICCHECK) + +ifdef GOVENDOR +.PHONY: $(GOVENDOR) +$(GOVENDOR): + GOOS= GOARCH= $(GO) get -u github.com/kardianos/govendor +endif + +.PHONY: precheck +precheck:: + +define PRECHECK_COMMAND_template = +precheck:: $(1)_precheck + + +PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) +.PHONY: $(1)_precheck +$(1)_precheck: + @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ + echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ + exit 1; \ + fi +endef diff --git a/vendor/github.com/prometheus/common/README.md b/vendor/github.com/prometheus/common/README.md index 98f6ce24b99..47985e4ad2a 100644 --- a/vendor/github.com/prometheus/common/README.md +++ b/vendor/github.com/prometheus/common/README.md @@ -6,7 +6,7 @@ components and libraries. * **config**: Common configuration structures * **expfmt**: Decoding and encoding for the exposition format -* **log**: A logging wrapper around [logrus](https://github.com/Sirupsen/logrus) +* **log**: A logging wrapper around [logrus](https://github.com/sirupsen/logrus) * **model**: Shared data structures * **route**: A routing wrapper around [httprouter](https://github.com/julienschmidt/httprouter) using `context.Context` -* **version**: Version informations and metric +* **version**: Version information and metrics diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go index a7a42d5ef41..c092723e84a 100644 --- a/vendor/github.com/prometheus/common/expfmt/decode.go +++ b/vendor/github.com/prometheus/common/expfmt/decode.go @@ -164,9 +164,9 @@ func (sd *SampleDecoder) Decode(s *model.Vector) error { } // ExtractSamples builds a slice of samples from the provided metric -// families. If an error occurs during sample extraction, it continues to +// families. If an error occurrs during sample extraction, it continues to // extract from the remaining metric families. The returned error is the last -// error that has occured. +// error that has occurred. func ExtractSamples(o *DecodeOptions, fams ...*dto.MetricFamily) (model.Vector, error) { var ( all model.Vector diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go index 371ac75037b..c71bcb98167 100644 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -26,7 +26,7 @@ const ( // The Content-Type values for the different wire protocols. FmtUnknown Format = `` - FmtText Format = `text/plain; version=` + TextVersion + FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` FmtProtoText Format = ProtoFmt + ` encoding=text` FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go index f11321cd0c7..8e473d0fe92 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_create.go +++ b/vendor/github.com/prometheus/common/expfmt/text_create.go @@ -14,13 +14,45 @@ package expfmt import ( + "bytes" "fmt" "io" "math" + "strconv" "strings" + "sync" + + "github.com/prometheus/common/model" dto "github.com/prometheus/client_model/go" - "github.com/prometheus/common/model" +) + +// enhancedWriter has all the enhanced write functions needed here. bytes.Buffer +// implements it. +type enhancedWriter interface { + io.Writer + WriteRune(r rune) (n int, err error) + WriteString(s string) (n int, err error) + WriteByte(c byte) error +} + +const ( + initialBufSize = 512 + initialNumBufSize = 24 +) + +var ( + bufPool = sync.Pool{ + New: func() interface{} { + return bytes.NewBuffer(make([]byte, 0, initialBufSize)) + }, + } + numBufPool = sync.Pool{ + New: func() interface{} { + b := make([]byte, 0, initialNumBufSize) + return &b + }, + } ) // MetricFamilyToText converts a MetricFamily proto message into text format and @@ -32,37 +64,92 @@ import ( // will result in invalid text format output. // // This method fulfills the type 'prometheus.encoder'. -func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { - var written int - +func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err error) { // Fail-fast checks. if len(in.Metric) == 0 { - return written, fmt.Errorf("MetricFamily has no metrics: %s", in) + return 0, fmt.Errorf("MetricFamily has no metrics: %s", in) } name := in.GetName() if name == "" { - return written, fmt.Errorf("MetricFamily has no name: %s", in) + return 0, fmt.Errorf("MetricFamily has no name: %s", in) } + // Try the interface upgrade. If it doesn't work, we'll use a + // bytes.Buffer from the sync.Pool and write out its content to out in a + // single go in the end. + w, ok := out.(enhancedWriter) + if !ok { + b := bufPool.Get().(*bytes.Buffer) + b.Reset() + w = b + defer func() { + bWritten, bErr := out.Write(b.Bytes()) + written = bWritten + if err == nil { + err = bErr + } + bufPool.Put(b) + }() + } + + var n int + // Comments, first HELP, then TYPE. if in.Help != nil { - n, err := fmt.Fprintf( - out, "# HELP %s %s\n", - name, escapeString(*in.Help, false), - ) + n, err = w.WriteString("# HELP ") written += n if err != nil { - return written, err + return + } + n, err = w.WriteString(name) + written += n + if err != nil { + return + } + err = w.WriteByte(' ') + written++ + if err != nil { + return + } + n, err = writeEscapedString(w, *in.Help, false) + written += n + if err != nil { + return + } + err = w.WriteByte('\n') + written++ + if err != nil { + return } } - metricType := in.GetType() - n, err := fmt.Fprintf( - out, "# TYPE %s %s\n", - name, strings.ToLower(metricType.String()), - ) + n, err = w.WriteString("# TYPE ") written += n if err != nil { - return written, err + return + } + n, err = w.WriteString(name) + written += n + if err != nil { + return + } + metricType := in.GetType() + switch metricType { + case dto.MetricType_COUNTER: + n, err = w.WriteString(" counter\n") + case dto.MetricType_GAUGE: + n, err = w.WriteString(" gauge\n") + case dto.MetricType_SUMMARY: + n, err = w.WriteString(" summary\n") + case dto.MetricType_UNTYPED: + n, err = w.WriteString(" untyped\n") + case dto.MetricType_HISTOGRAM: + n, err = w.WriteString(" histogram\n") + default: + return written, fmt.Errorf("unknown metric type %s", metricType.String()) + } + written += n + if err != nil { + return } // Finally the samples, one line for each. @@ -75,9 +162,8 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { ) } n, err = writeSample( - name, metric, "", "", + w, name, "", metric, "", 0, metric.Counter.GetValue(), - out, ) case dto.MetricType_GAUGE: if metric.Gauge == nil { @@ -86,9 +172,8 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { ) } n, err = writeSample( - name, metric, "", "", + w, name, "", metric, "", 0, metric.Gauge.GetValue(), - out, ) case dto.MetricType_UNTYPED: if metric.Untyped == nil { @@ -97,9 +182,8 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { ) } n, err = writeSample( - name, metric, "", "", + w, name, "", metric, "", 0, metric.Untyped.GetValue(), - out, ) case dto.MetricType_SUMMARY: if metric.Summary == nil { @@ -109,29 +193,26 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { } for _, q := range metric.Summary.Quantile { n, err = writeSample( - name, metric, - model.QuantileLabel, fmt.Sprint(q.GetQuantile()), + w, name, "", metric, + model.QuantileLabel, q.GetQuantile(), q.GetValue(), - out, ) written += n if err != nil { - return written, err + return } } n, err = writeSample( - name+"_sum", metric, "", "", + w, name, "_sum", metric, "", 0, metric.Summary.GetSampleSum(), - out, ) - if err != nil { - return written, err - } written += n + if err != nil { + return + } n, err = writeSample( - name+"_count", metric, "", "", + w, name, "_count", metric, "", 0, float64(metric.Summary.GetSampleCount()), - out, ) case dto.MetricType_HISTOGRAM: if metric.Histogram == nil { @@ -140,46 +221,42 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { ) } infSeen := false - for _, q := range metric.Histogram.Bucket { + for _, b := range metric.Histogram.Bucket { n, err = writeSample( - name+"_bucket", metric, - model.BucketLabel, fmt.Sprint(q.GetUpperBound()), - float64(q.GetCumulativeCount()), - out, + w, name, "_bucket", metric, + model.BucketLabel, b.GetUpperBound(), + float64(b.GetCumulativeCount()), ) written += n if err != nil { - return written, err + return } - if math.IsInf(q.GetUpperBound(), +1) { + if math.IsInf(b.GetUpperBound(), +1) { infSeen = true } } if !infSeen { n, err = writeSample( - name+"_bucket", metric, - model.BucketLabel, "+Inf", + w, name, "_bucket", metric, + model.BucketLabel, math.Inf(+1), float64(metric.Histogram.GetSampleCount()), - out, ) - if err != nil { - return written, err - } written += n + if err != nil { + return + } } n, err = writeSample( - name+"_sum", metric, "", "", + w, name, "_sum", metric, "", 0, metric.Histogram.GetSampleSum(), - out, ) - if err != nil { - return written, err - } written += n + if err != nil { + return + } n, err = writeSample( - name+"_count", metric, "", "", + w, name, "_count", metric, "", 0, float64(metric.Histogram.GetSampleCount()), - out, ) default: return written, fmt.Errorf( @@ -188,116 +265,204 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { } written += n if err != nil { - return written, err + return } } - return written, nil + return } -// writeSample writes a single sample in text format to out, given the metric +// writeSample writes a single sample in text format to w, given the metric // name, the metric proto message itself, optionally an additional label name -// and value (use empty strings if not required), and the value. The function -// returns the number of bytes written and any error encountered. +// with a float64 value (use empty string as label name if not required), and +// the value. The function returns the number of bytes written and any error +// encountered. func writeSample( - name string, + w enhancedWriter, + name, suffix string, metric *dto.Metric, - additionalLabelName, additionalLabelValue string, + additionalLabelName string, additionalLabelValue float64, value float64, - out io.Writer, ) (int, error) { var written int - n, err := fmt.Fprint(out, name) + n, err := w.WriteString(name) written += n if err != nil { return written, err } - n, err = labelPairsToText( - metric.Label, - additionalLabelName, additionalLabelValue, - out, - ) - written += n - if err != nil { - return written, err - } - n, err = fmt.Fprintf(out, " %v", value) - written += n - if err != nil { - return written, err - } - if metric.TimestampMs != nil { - n, err = fmt.Fprintf(out, " %v", *metric.TimestampMs) + if suffix != "" { + n, err = w.WriteString(suffix) written += n if err != nil { return written, err } } - n, err = out.Write([]byte{'\n'}) + n, err = writeLabelPairs( + w, metric.Label, additionalLabelName, additionalLabelValue, + ) written += n if err != nil { return written, err } + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + n, err = writeFloat(w, value) + written += n + if err != nil { + return written, err + } + if metric.TimestampMs != nil { + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + n, err = writeInt(w, *metric.TimestampMs) + written += n + if err != nil { + return written, err + } + } + err = w.WriteByte('\n') + written++ + if err != nil { + return written, err + } return written, nil } -// labelPairsToText converts a slice of LabelPair proto messages plus the +// writeLabelPairs converts a slice of LabelPair proto messages plus the // explicitly given additional label pair into text formatted as required by the -// text format and writes it to 'out'. An empty slice in combination with an -// empty string 'additionalLabelName' results in nothing being -// written. Otherwise, the label pairs are written, escaped as required by the -// text format, and enclosed in '{...}'. The function returns the number of -// bytes written and any error encountered. -func labelPairsToText( +// text format and writes it to 'w'. An empty slice in combination with an empty +// string 'additionalLabelName' results in nothing being written. Otherwise, the +// label pairs are written, escaped as required by the text format, and enclosed +// in '{...}'. The function returns the number of bytes written and any error +// encountered. +func writeLabelPairs( + w enhancedWriter, in []*dto.LabelPair, - additionalLabelName, additionalLabelValue string, - out io.Writer, + additionalLabelName string, additionalLabelValue float64, ) (int, error) { if len(in) == 0 && additionalLabelName == "" { return 0, nil } - var written int - separator := '{' + var ( + written int + separator byte = '{' + ) for _, lp := range in { - n, err := fmt.Fprintf( - out, `%c%s="%s"`, - separator, lp.GetName(), escapeString(lp.GetValue(), true), - ) + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(lp.GetName()) written += n if err != nil { return written, err } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeEscapedString(w, lp.GetValue(), true) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } separator = ',' } if additionalLabelName != "" { - n, err := fmt.Fprintf( - out, `%c%s="%s"`, - separator, additionalLabelName, - escapeString(additionalLabelValue, true), - ) + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(additionalLabelName) written += n if err != nil { return written, err } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeFloat(w, additionalLabelValue) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } } - n, err := out.Write([]byte{'}'}) - written += n + err := w.WriteByte('}') + written++ if err != nil { return written, err } return written, nil } +// writeEscapedString replaces '\' by '\\', new line character by '\n', and - if +// includeDoubleQuote is true - '"' by '\"'. var ( - escape = strings.NewReplacer("\\", `\\`, "\n", `\n`) - escapeWithDoubleQuote = strings.NewReplacer("\\", `\\`, "\n", `\n`, "\"", `\"`) + escaper = strings.NewReplacer("\\", `\\`, "\n", `\n`) + quotedEscaper = strings.NewReplacer("\\", `\\`, "\n", `\n`, "\"", `\"`) ) -// escapeString replaces '\' by '\\', new line character by '\n', and - if -// includeDoubleQuote is true - '"' by '\"'. -func escapeString(v string, includeDoubleQuote bool) string { +func writeEscapedString(w enhancedWriter, v string, includeDoubleQuote bool) (int, error) { if includeDoubleQuote { - return escapeWithDoubleQuote.Replace(v) + return quotedEscaper.WriteString(w, v) + } else { + return escaper.WriteString(w, v) } - - return escape.Replace(v) +} + +// writeFloat is equivalent to fmt.Fprint with a float64 argument but hardcodes +// a few common cases for increased efficiency. For non-hardcoded cases, it uses +// strconv.AppendFloat to avoid allocations, similar to writeInt. +func writeFloat(w enhancedWriter, f float64) (int, error) { + switch { + case f == 1: + return 1, w.WriteByte('1') + case f == 0: + return 1, w.WriteByte('0') + case f == -1: + return w.WriteString("-1") + case math.IsNaN(f): + return w.WriteString("NaN") + case math.IsInf(f, +1): + return w.WriteString("+Inf") + case math.IsInf(f, -1): + return w.WriteString("-Inf") + default: + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendFloat((*bp)[:0], f, 'g', -1, 64) + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err + } +} + +// writeInt is equivalent to fmt.Fprint with an int64 argument but uses +// strconv.AppendInt with a byte slice taken from a sync.Pool to avoid +// allocations. +func writeInt(w enhancedWriter, i int64) (int, error) { + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendInt((*bp)[:0], i, 10) + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err } diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go index ef9a1507710..ec3d86ba7ce 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_parse.go +++ b/vendor/github.com/prometheus/common/expfmt/text_parse.go @@ -315,6 +315,10 @@ func (p *TextParser) startLabelValue() stateFn { if p.readTokenAsLabelValue(); p.err != nil { return nil } + if !model.LabelValue(p.currentToken.String()).IsValid() { + p.parseError(fmt.Sprintf("invalid label value %q", p.currentToken.String())) + return nil + } p.currentLabelPair.Value = proto.String(p.currentToken.String()) // Special treatment of summaries: // - Quantile labels are special, will result in dto.Quantile later. @@ -355,7 +359,7 @@ func (p *TextParser) startLabelValue() stateFn { } return p.readingValue default: - p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.Value)) + p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.GetValue())) return nil } } @@ -552,8 +556,8 @@ func (p *TextParser) readTokenUntilWhitespace() { // byte considered is the byte already read (now in p.currentByte). The first // newline byte encountered is still copied into p.currentByte, but not into // p.currentToken. If recognizeEscapeSequence is true, two escape sequences are -// recognized: '\\' tranlates into '\', and '\n' into a line-feed character. All -// other escape sequences are invalid and cause an error. +// recognized: '\\' translates into '\', and '\n' into a line-feed character. +// All other escape sequences are invalid and cause an error. func (p *TextParser) readTokenUntilNewline(recognizeEscapeSequence bool) { p.currentToken.Reset() escaped := false diff --git a/vendor/github.com/prometheus/common/go.mod b/vendor/github.com/prometheus/common/go.mod new file mode 100644 index 00000000000..53aa3444aed --- /dev/null +++ b/vendor/github.com/prometheus/common/go.mod @@ -0,0 +1,26 @@ +module github.com/prometheus/common + +require ( + github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect + github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect + github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 // indirect + github.com/go-kit/kit v0.8.0 + github.com/go-logfmt/logfmt v0.3.0 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/gogo/protobuf v1.1.1 // indirect + github.com/golang/protobuf v1.2.0 + github.com/julienschmidt/httprouter v1.2.0 + github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 + github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 + github.com/pkg/errors v0.8.0 + github.com/prometheus/client_golang v0.9.1 + github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 + github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d // indirect + github.com/sirupsen/logrus v1.2.0 + golang.org/x/net v0.0.0-20181114220301-adae6a3d119a // indirect + golang.org/x/sync v0.0.0-20181108010431-42b317875d0f // indirect + golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5 + gopkg.in/alecthomas/kingpin.v2 v2.2.6 + gopkg.in/yaml.v2 v2.2.1 +) diff --git a/vendor/github.com/prometheus/common/go.sum b/vendor/github.com/prometheus/common/go.sum new file mode 100644 index 00000000000..3e2d1327963 --- /dev/null +++ b/vendor/github.com/prometheus/common/go.sum @@ -0,0 +1,58 @@ +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1 h1:K47Rk0v/fkEfwfQet2KWhscE0cJzjgCCDBG2KHZoVno= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5 h1:mzjBh+S5frKOsOBobWIMAbXavqjmgO17k/2puhcFR94= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go index 648b38cb654..26e92288c7c 100644 --- a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go +++ b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go @@ -1,12 +1,12 @@ /* +Copyright (c) 2011, Open Knowledge Foundation Ltd. +All rights reserved. + HTTP Content-Type Autonegotiation. The functions in this package implement the behaviour specified in http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html -Copyright (c) 2011, Open Knowledge Foundation Ltd. -All rights reserved. - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/vendor/github.com/prometheus/common/model/metric.go b/vendor/github.com/prometheus/common/model/metric.go index f7250909b9f..00804b7fedb 100644 --- a/vendor/github.com/prometheus/common/model/metric.go +++ b/vendor/github.com/prometheus/common/model/metric.go @@ -21,7 +21,6 @@ import ( ) var ( - separator = []byte{0} // MetricNameRE is a regular expression matching valid metric // names. Note that the IsValidMetricName function performs the same // check but faster than a match with this regular expression. diff --git a/vendor/github.com/prometheus/common/model/silence.go b/vendor/github.com/prometheus/common/model/silence.go index 7538e299774..bb99889d2cc 100644 --- a/vendor/github.com/prometheus/common/model/silence.go +++ b/vendor/github.com/prometheus/common/model/silence.go @@ -59,8 +59,8 @@ func (m *Matcher) Validate() error { return nil } -// Silence defines the representation of a silence definiton -// in the Prometheus eco-system. +// Silence defines the representation of a silence definition in the Prometheus +// eco-system. type Silence struct { ID uint64 `json:"id,omitempty"` diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go index 548968aebe6..46259b1f109 100644 --- a/vendor/github.com/prometheus/common/model/time.go +++ b/vendor/github.com/prometheus/common/model/time.go @@ -43,7 +43,7 @@ const ( // (1970-01-01 00:00 UTC) excluding leap seconds. type Time int64 -// Interval describes and interval between two timestamps. +// Interval describes an interval between two timestamps. type Interval struct { Start, End Time } @@ -163,9 +163,21 @@ func (t *Time) UnmarshalJSON(b []byte) error { // This type should not propagate beyond the scope of input/output processing. type Duration time.Duration +// Set implements pflag/flag.Value +func (d *Duration) Set(s string) error { + var err error + *d, err = ParseDuration(s) + return err +} + +// Type implements pflag.Value +func (d *Duration) Type() string { + return "duration" +} + var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$") -// StringToDuration parses a string into a time.Duration, assuming that a year +// ParseDuration parses a string into a time.Duration, assuming that a year // always has 365d, a week always has 7d, and a day always has 24h. func ParseDuration(durationStr string) (Duration, error) { matches := durationRE.FindStringSubmatch(durationStr) @@ -202,6 +214,9 @@ func (d Duration) String() string { ms = int64(time.Duration(d) / time.Millisecond) unit = "ms" ) + if ms == 0 { + return "0s" + } factors := map[string]int64{ "y": 1000 * 60 * 60 * 24 * 365, "w": 1000 * 60 * 60 * 24 * 7, diff --git a/vendor/github.com/prometheus/common/model/value.go b/vendor/github.com/prometheus/common/model/value.go index c9ed3ffd82a..c9d8fb1a283 100644 --- a/vendor/github.com/prometheus/common/model/value.go +++ b/vendor/github.com/prometheus/common/model/value.go @@ -100,7 +100,7 @@ func (s *SamplePair) UnmarshalJSON(b []byte) error { } // Equal returns true if this SamplePair and o have equal Values and equal -// Timestamps. The sematics of Value equality is defined by SampleValue.Equal. +// Timestamps. The semantics of Value equality is defined by SampleValue.Equal. func (s *SamplePair) Equal(o *SamplePair) bool { return s == o || (s.Value.Equal(o.Value) && s.Timestamp.Equal(o.Timestamp)) } @@ -117,7 +117,7 @@ type Sample struct { } // Equal compares first the metrics, then the timestamp, then the value. The -// sematics of value equality is defined by SampleValue.Equal. +// semantics of value equality is defined by SampleValue.Equal. func (s *Sample) Equal(o *Sample) bool { if s == o { return true diff --git a/vendor/github.com/rancher/norman/controller/generic_controller.go b/vendor/github.com/rancher/norman/controller/generic_controller.go index 02fed9c927b..919ce0de7ab 100644 --- a/vendor/github.com/rancher/norman/controller/generic_controller.go +++ b/vendor/github.com/rancher/norman/controller/generic_controller.go @@ -3,7 +3,6 @@ package controller import ( "context" "fmt" - "os" "reflect" "strings" "sync" @@ -25,23 +24,10 @@ import ( "k8s.io/client-go/util/workqueue" ) -const MetricsQueueEnv = "NORMAN_QUEUE_METRICS" -const MetricsReflectorEnv = "NORMAN_REFLECTOR_METRICS" - var ( resyncPeriod = 2 * time.Hour ) -// Override the metrics providers -func init() { - if os.Getenv(MetricsQueueEnv) != "true" { - DisableControllerWorkqueuMetrics() - } - if os.Getenv(MetricsReflectorEnv) != "true" { - DisableControllerReflectorMetrics() - } -} - type HandlerFunc func(key string, obj interface{}) (interface{}, error) type GenericController interface { diff --git a/vendor/github.com/rancher/norman/controller/noop_metrics.go b/vendor/github.com/rancher/norman/controller/noop_metrics.go deleted file mode 100644 index 9f14f1b9ef7..00000000000 --- a/vendor/github.com/rancher/norman/controller/noop_metrics.go +++ /dev/null @@ -1,79 +0,0 @@ -package controller - -import ( - "k8s.io/client-go/tools/cache" - "k8s.io/client-go/util/workqueue" -) - -type noopMetric struct{} - -func (noopMetric) Inc() {} -func (noopMetric) Dec() {} -func (noopMetric) Observe(float64) {} -func (noopMetric) Set(float64) {} - -type noopWorkqueueMetricsProvider struct{} - -func (noopWorkqueueMetricsProvider) NewDepthMetric(name string) workqueue.GaugeMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewAddsMetric(name string) workqueue.CounterMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewLatencyMetric(name string) workqueue.SummaryMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewWorkDurationMetric(name string) workqueue.SummaryMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewRetriesMetric(name string) workqueue.CounterMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewLongestRunningProcessorMicrosecondsMetric(name string) workqueue.SettableGaugeMetric { - return noopMetric{} -} - -func (noopWorkqueueMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric { - return noopMetric{} -} - -type noopCacheMetricsProvider struct{} - -func (noopCacheMetricsProvider) NewListsMetric(name string) cache.CounterMetric { return noopMetric{} } -func (noopCacheMetricsProvider) NewListDurationMetric(name string) cache.SummaryMetric { - return noopMetric{} -} -func (noopCacheMetricsProvider) NewItemsInListMetric(name string) cache.SummaryMetric { - return noopMetric{} -} -func (noopCacheMetricsProvider) NewWatchesMetric(name string) cache.CounterMetric { return noopMetric{} } -func (noopCacheMetricsProvider) NewShortWatchesMetric(name string) cache.CounterMetric { - return noopMetric{} -} -func (noopCacheMetricsProvider) NewWatchDurationMetric(name string) cache.SummaryMetric { - return noopMetric{} -} -func (noopCacheMetricsProvider) NewItemsInWatchMetric(name string) cache.SummaryMetric { - return noopMetric{} -} -func (noopCacheMetricsProvider) NewLastResourceVersionMetric(name string) cache.GaugeMetric { - return noopMetric{} -} - -func DisableAllControllerMetrics() { - DisableControllerReflectorMetrics() - DisableControllerWorkqueuMetrics() -} - -func DisableControllerWorkqueuMetrics() { - workqueue.SetProvider(noopWorkqueueMetricsProvider{}) -} - -func DisableControllerReflectorMetrics() { - cache.SetReflectorMetricsProvider(noopCacheMetricsProvider{}) -} diff --git a/vendor/github.com/rancher/norman/leader/leader.go b/vendor/github.com/rancher/norman/leader/leader.go index 2a0a40f2f04..74e3f7be10c 100644 --- a/vendor/github.com/rancher/norman/leader/leader.go +++ b/vendor/github.com/rancher/norman/leader/leader.go @@ -44,6 +44,7 @@ func run(ctx context.Context, namespace, name string, client kubernetes.Interfac namespace, name, client.CoreV1(), + nil, resourcelock.ResourceLockConfig{ Identity: id, EventRecorder: recorder, diff --git a/vendor/github.com/rancher/norman/pkg/cert/cert.go b/vendor/github.com/rancher/norman/pkg/cert/cert.go new file mode 100644 index 00000000000..3429c82cdff --- /dev/null +++ b/vendor/github.com/rancher/norman/pkg/cert/cert.go @@ -0,0 +1,269 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cert + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "io/ioutil" + "math" + "math/big" + "net" + "path" + "strings" + "time" +) + +const ( + rsaKeySize = 2048 + duration365d = time.Hour * 24 * 365 +) + +// Config contains the basic fields required for creating a certificate +type Config struct { + CommonName string + Organization []string + AltNames AltNames + Usages []x509.ExtKeyUsage +} + +// AltNames contains the domain names and IP addresses that will be added +// to the API Server's x509 certificate SubAltNames field. The values will +// be passed directly to the x509.Certificate object. +type AltNames struct { + DNSNames []string + IPs []net.IP +} + +// NewPrivateKey creates an RSA private key +func NewPrivateKey() (*rsa.PrivateKey, error) { + return rsa.GenerateKey(cryptorand.Reader, rsaKeySize) +} + +// NewSelfSignedCACert creates a CA certificate +func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, error) { + now := time.Now() + tmpl := x509.Certificate{ + SerialNumber: new(big.Int).SetInt64(0), + Subject: pkix.Name{ + CommonName: cfg.CommonName, + Organization: cfg.Organization, + }, + NotBefore: now.UTC(), + NotAfter: now.Add(duration365d * 10).UTC(), + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + BasicConstraintsValid: true, + IsCA: true, + } + + certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &tmpl, &tmpl, key.Public(), key) + if err != nil { + return nil, err + } + return x509.ParseCertificate(certDERBytes) +} + +// NewSignedCert creates a signed certificate using the given CA certificate and key +func NewSignedCert(cfg Config, key crypto.Signer, caCert *x509.Certificate, caKey crypto.Signer) (*x509.Certificate, error) { + serial, err := rand.Int(rand.Reader, new(big.Int).SetInt64(math.MaxInt64)) + if err != nil { + return nil, err + } + if len(cfg.CommonName) == 0 { + return nil, errors.New("must specify a CommonName") + } + if len(cfg.Usages) == 0 { + return nil, errors.New("must specify at least one ExtKeyUsage") + } + + certTmpl := x509.Certificate{ + Subject: pkix.Name{ + CommonName: cfg.CommonName, + Organization: cfg.Organization, + }, + DNSNames: cfg.AltNames.DNSNames, + IPAddresses: cfg.AltNames.IPs, + SerialNumber: serial, + NotBefore: caCert.NotBefore, + NotAfter: time.Now().Add(duration365d).UTC(), + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: cfg.Usages, + } + certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &certTmpl, caCert, key.Public(), caKey) + if err != nil { + return nil, err + } + return x509.ParseCertificate(certDERBytes) +} + +// MakeEllipticPrivateKeyPEM creates an ECDSA private key +func MakeEllipticPrivateKeyPEM() ([]byte, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) + if err != nil { + return nil, err + } + + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return nil, err + } + + privateKeyPemBlock := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil +} + +// GenerateSelfSignedCertKey creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name +// You may also specify additional subject alt names (either ip or dns names) for the certificate. +func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { + return GenerateSelfSignedCertKeyWithFixtures(host, alternateIPs, alternateDNS, "") +} + +// GenerateSelfSignedCertKeyWithFixtures creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name. You may also specify additional subject alt names (either ip or dns names) +// for the certificate. +// +// If fixtureDirectory is non-empty, it is a directory path which can contain pre-generated certs. The format is: +// _-_-.crt +// _-_-.key +// Certs/keys not existing in that directory are created. +func GenerateSelfSignedCertKeyWithFixtures(host string, alternateIPs []net.IP, alternateDNS []string, fixtureDirectory string) ([]byte, []byte, error) { + validFrom := time.Now().Add(-time.Hour) // valid an hour earlier to avoid flakes due to clock skew + maxAge := time.Hour * 24 * 365 // one year self-signed certs + + baseName := fmt.Sprintf("%s_%s_%s", host, strings.Join(ipsToStrings(alternateIPs), "-"), strings.Join(alternateDNS, "-")) + certFixturePath := path.Join(fixtureDirectory, baseName+".crt") + keyFixturePath := path.Join(fixtureDirectory, baseName+".key") + if len(fixtureDirectory) > 0 { + cert, err := ioutil.ReadFile(certFixturePath) + if err == nil { + key, err := ioutil.ReadFile(keyFixturePath) + if err == nil { + return cert, key, nil + } + return nil, nil, fmt.Errorf("cert %s can be read, but key %s cannot: %v", certFixturePath, keyFixturePath, err) + } + maxAge = 100 * time.Hour * 24 * 365 // 100 years fixtures + } + + caKey, err := rsa.GenerateKey(cryptorand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + caTemplate := x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s-ca@%d", host, time.Now().Unix()), + }, + NotBefore: validFrom, + NotAfter: validFrom.Add(maxAge), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + BasicConstraintsValid: true, + IsCA: true, + } + + caDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey) + if err != nil { + return nil, nil, err + } + + caCertificate, err := x509.ParseCertificate(caDERBytes) + if err != nil { + return nil, nil, err + } + + priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + template := x509.Certificate{ + SerialNumber: big.NewInt(2), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), + }, + NotBefore: validFrom, + NotAfter: validFrom.Add(maxAge), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + } + + if ip := net.ParseIP(host); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, host) + } + + template.IPAddresses = append(template.IPAddresses, alternateIPs...) + template.DNSNames = append(template.DNSNames, alternateDNS...) + + derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, caCertificate, &priv.PublicKey, caKey) + if err != nil { + return nil, nil, err + } + + // Generate cert, followed by ca + certBuffer := bytes.Buffer{} + if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: derBytes}); err != nil { + return nil, nil, err + } + if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: caDERBytes}); err != nil { + return nil, nil, err + } + + // Generate key + keyBuffer := bytes.Buffer{} + if err := pem.Encode(&keyBuffer, &pem.Block{Type: RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + return nil, nil, err + } + + if len(fixtureDirectory) > 0 { + if err := ioutil.WriteFile(certFixturePath, certBuffer.Bytes(), 0644); err != nil { + return nil, nil, fmt.Errorf("failed to write cert fixture to %s: %v", certFixturePath, err) + } + if err := ioutil.WriteFile(keyFixturePath, keyBuffer.Bytes(), 0644); err != nil { + return nil, nil, fmt.Errorf("failed to write key fixture to %s: %v", certFixturePath, err) + } + } + + return certBuffer.Bytes(), keyBuffer.Bytes(), nil +} + +func ipsToStrings(ips []net.IP) []string { + ss := make([]string, 0, len(ips)) + for _, ip := range ips { + ss = append(ss, ip.String()) + } + return ss +} diff --git a/vendor/github.com/rancher/norman/pkg/cert/csr.go b/vendor/github.com/rancher/norman/pkg/cert/csr.go new file mode 100644 index 00000000000..39a6751f70a --- /dev/null +++ b/vendor/github.com/rancher/norman/pkg/cert/csr.go @@ -0,0 +1,75 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cert + +import ( + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "net" +) + +// MakeCSR generates a PEM-encoded CSR using the supplied private key, subject, and SANs. +// All key types that are implemented via crypto.Signer are supported (This includes *rsa.PrivateKey and *ecdsa.PrivateKey.) +func MakeCSR(privateKey interface{}, subject *pkix.Name, dnsSANs []string, ipSANs []net.IP) (csr []byte, err error) { + template := &x509.CertificateRequest{ + Subject: *subject, + DNSNames: dnsSANs, + IPAddresses: ipSANs, + } + + return MakeCSRFromTemplate(privateKey, template) +} + +// MakeCSRFromTemplate generates a PEM-encoded CSR using the supplied private +// key and certificate request as a template. All key types that are +// implemented via crypto.Signer are supported (This includes *rsa.PrivateKey +// and *ecdsa.PrivateKey.) +func MakeCSRFromTemplate(privateKey interface{}, template *x509.CertificateRequest) ([]byte, error) { + t := *template + t.SignatureAlgorithm = sigType(privateKey) + + csrDER, err := x509.CreateCertificateRequest(cryptorand.Reader, &t, privateKey) + if err != nil { + return nil, err + } + + csrPemBlock := &pem.Block{ + Type: CertificateRequestBlockType, + Bytes: csrDER, + } + + return pem.EncodeToMemory(csrPemBlock), nil +} + +func sigType(privateKey interface{}) x509.SignatureAlgorithm { + // Customize the signature for RSA keys, depending on the key size + if privateKey, ok := privateKey.(*rsa.PrivateKey); ok { + keySize := privateKey.N.BitLen() + switch { + case keySize >= 4096: + return x509.SHA512WithRSA + case keySize >= 3072: + return x509.SHA384WithRSA + default: + return x509.SHA256WithRSA + } + } + return x509.UnknownSignatureAlgorithm +} diff --git a/vendor/github.com/rancher/norman/pkg/cert/io.go b/vendor/github.com/rancher/norman/pkg/cert/io.go new file mode 100644 index 00000000000..a57bf09d5eb --- /dev/null +++ b/vendor/github.com/rancher/norman/pkg/cert/io.go @@ -0,0 +1,193 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cert + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "fmt" + "io/ioutil" + "os" + "path/filepath" +) + +// CanReadCertAndKey returns true if the certificate and key files already exists, +// otherwise returns false. If lost one of cert and key, returns error. +func CanReadCertAndKey(certPath, keyPath string) (bool, error) { + certReadable := canReadFile(certPath) + keyReadable := canReadFile(keyPath) + + if certReadable == false && keyReadable == false { + return false, nil + } + + if certReadable == false { + return false, fmt.Errorf("error reading %s, certificate and key must be supplied as a pair", certPath) + } + + if keyReadable == false { + return false, fmt.Errorf("error reading %s, certificate and key must be supplied as a pair", keyPath) + } + + return true, nil +} + +// If the file represented by path exists and +// readable, returns true otherwise returns false. +func canReadFile(path string) bool { + f, err := os.Open(path) + if err != nil { + return false + } + + defer f.Close() + + return true +} + +// WriteCert writes the pem-encoded certificate data to certPath. +// The certificate file will be created with file mode 0644. +// If the certificate file already exists, it will be overwritten. +// The parent directory of the certPath will be created as needed with file mode 0755. +func WriteCert(certPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { + return err + } + return ioutil.WriteFile(certPath, data, os.FileMode(0644)) +} + +// WriteKey writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKey(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) +} + +// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it +// can't find one, it will generate a new key and store it there. +func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { + loadedData, err := ioutil.ReadFile(keyPath) + // Call verifyKeyData to ensure the file wasn't empty/corrupt. + if err == nil && verifyKeyData(loadedData) { + return loadedData, false, err + } + if !os.IsNotExist(err) { + return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) + } + + generatedData, err := MakeEllipticPrivateKeyPEM() + if err != nil { + return nil, false, fmt.Errorf("error generating key: %v", err) + } + if err := WriteKey(keyPath, generatedData); err != nil { + return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) + } + return generatedData, true, nil +} + +// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to +// a PEM encoded block or returns an error. +func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { + switch t := privateKey.(type) { + case *ecdsa.PrivateKey: + derBytes, err := x509.MarshalECPrivateKey(t) + if err != nil { + return nil, err + } + privateKeyPemBlock := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil + case *rsa.PrivateKey: + return EncodePrivateKeyPEM(t), nil + default: + return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) + } +} + +// NewPool returns an x509.CertPool containing the certificates in the given PEM-encoded file. +// Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates +func NewPool(filename string) (*x509.CertPool, error) { + certs, err := CertsFromFile(filename) + if err != nil { + return nil, err + } + pool := x509.NewCertPool() + for _, cert := range certs { + pool.AddCert(cert) + } + return pool, nil +} + +// CertsFromFile returns the x509.Certificates contained in the given PEM-encoded file. +// Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates +func CertsFromFile(file string) ([]*x509.Certificate, error) { + pemBlock, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + certs, err := ParseCertsPEM(pemBlock) + if err != nil { + return nil, fmt.Errorf("error reading %s: %s", file, err) + } + return certs, nil +} + +// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. +// Returns an error if the file could not be read or if the private key could not be parsed. +func PrivateKeyFromFile(file string) (interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + key, err := ParsePrivateKeyPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading private key file %s: %v", file, err) + } + return key, nil +} + +// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. +// Reads public keys from both public and private key files. +func PublicKeysFromFile(file string) ([]interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + keys, err := ParsePublicKeysPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading public key file %s: %v", file, err) + } + return keys, nil +} + +// verifyKeyData returns true if the provided data appears to be a valid private key. +func verifyKeyData(data []byte) bool { + if len(data) == 0 { + return false + } + _, err := ParsePrivateKeyPEM(data) + return err == nil +} diff --git a/vendor/github.com/rancher/norman/pkg/cert/pem.go b/vendor/github.com/rancher/norman/pkg/cert/pem.go new file mode 100644 index 00000000000..b99e366519c --- /dev/null +++ b/vendor/github.com/rancher/norman/pkg/cert/pem.go @@ -0,0 +1,269 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cert + +import ( + "crypto/ecdsa" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "errors" + "fmt" +) + +const ( + // ECPrivateKeyBlockType is a possible value for pem.Block.Type. + ECPrivateKeyBlockType = "EC PRIVATE KEY" + // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. + RSAPrivateKeyBlockType = "RSA PRIVATE KEY" + // PrivateKeyBlockType is a possible value for pem.Block.Type. + PrivateKeyBlockType = "PRIVATE KEY" + // PublicKeyBlockType is a possible value for pem.Block.Type. + PublicKeyBlockType = "PUBLIC KEY" + // CertificateBlockType is a possible value for pem.Block.Type. + CertificateBlockType = "CERTIFICATE" + // CertificateRequestBlockType is a possible value for pem.Block.Type. + CertificateRequestBlockType = "CERTIFICATE REQUEST" +) + +// EncodePublicKeyPEM returns PEM-encoded public data +func EncodePublicKeyPEM(key *rsa.PublicKey) ([]byte, error) { + der, err := x509.MarshalPKIXPublicKey(key) + if err != nil { + return []byte{}, err + } + block := pem.Block{ + Type: PublicKeyBlockType, + Bytes: der, + } + return pem.EncodeToMemory(&block), nil +} + +// EncodePrivateKeyPEM returns PEM-encoded private key data +func EncodePrivateKeyPEM(key *rsa.PrivateKey) []byte { + block := pem.Block{ + Type: RSAPrivateKeyBlockType, + Bytes: x509.MarshalPKCS1PrivateKey(key), + } + return pem.EncodeToMemory(&block) +} + +// EncodeCertPEM returns PEM-endcoded certificate data +func EncodeCertPEM(cert *x509.Certificate) []byte { + block := pem.Block{ + Type: CertificateBlockType, + Bytes: cert.Raw, + } + return pem.EncodeToMemory(&block) +} + +// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. +// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" +func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { + var privateKeyPemBlock *pem.Block + for { + privateKeyPemBlock, keyData = pem.Decode(keyData) + if privateKeyPemBlock == nil { + break + } + + switch privateKeyPemBlock.Type { + case ECPrivateKeyBlockType: + // ECDSA Private Key in ASN.1 format + if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case RSAPrivateKeyBlockType: + // RSA Private Key in PKCS#1 format + if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case PrivateKeyBlockType: + // RSA or ECDSA Private Key in unencrypted PKCS#8 format + if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + } + + // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks + // originally, only the first PEM block was parsed and expected to be a key block + } + + // we read all the PEM blocks and didn't recognize one + return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") +} + +// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. +// Reads public keys from both public and private key files. +func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { + var block *pem.Block + keys := []interface{}{} + for { + // read the next block + block, keyData = pem.Decode(keyData) + if block == nil { + break + } + + // test block against parsing functions + if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseECPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + + // tolerate non-key PEM blocks for backwards compatibility + // originally, only the first PEM block was parsed and expected to be a key block + } + + if len(keys) == 0 { + return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") + } + return keys, nil +} + +// ParseCertsPEM returns the x509.Certificates contained in the given PEM-encoded byte array +// Returns an error if a certificate could not be parsed, or if the data does not contain any certificates +func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { + ok := false + certs := []*x509.Certificate{} + for len(pemCerts) > 0 { + var block *pem.Block + block, pemCerts = pem.Decode(pemCerts) + if block == nil { + break + } + // Only use PEM "CERTIFICATE" blocks without extra headers + if block.Type != CertificateBlockType || len(block.Headers) != 0 { + continue + } + + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return certs, err + } + + certs = append(certs, cert) + ok = true + } + + if !ok { + return certs, errors.New("data does not contain any valid RSA or ECDSA certificates") + } + return certs, nil +} + +// parseRSAPublicKey parses a single RSA public key from the provided data +func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an RSA Public Key + var pubKey *rsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") + } + + return pubKey, nil +} + +// parseRSAPrivateKey parses a single RSA private key from the provided data +func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { + return nil, err + } + } + + // Test if parsed key is an RSA Private Key + var privKey *rsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") + } + + return privKey, nil +} + +// parseECPublicKey parses a single ECDSA public key from the provided data +func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an ECDSA Public Key + var pubKey *ecdsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") + } + + return pubKey, nil +} + +// parseECPrivateKey parses a single ECDSA private key from the provided data +func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { + return nil, err + } + + // Test if parsed key is an ECDSA Private Key + var privKey *ecdsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") + } + + return privKey, nil +} diff --git a/vendor/github.com/rancher/norman/pkg/dynamiclistener/server.go b/vendor/github.com/rancher/norman/pkg/dynamiclistener/server.go index 915e75da46e..a7b1d64ecb2 100644 --- a/vendor/github.com/rancher/norman/pkg/dynamiclistener/server.go +++ b/vendor/github.com/rancher/norman/pkg/dynamiclistener/server.go @@ -22,10 +22,10 @@ import ( "time" lru "github.com/hashicorp/golang-lru" + cert "github.com/rancher/norman/pkg/cert" "github.com/sirupsen/logrus" "golang.org/x/crypto/acme/autocert" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/client-go/util/cert" ) const ( diff --git a/vendor/github.com/renstrom/dedent/.travis.yml b/vendor/github.com/renstrom/dedent/.travis.yml deleted file mode 100644 index e61f42b8724..00000000000 --- a/vendor/github.com/renstrom/dedent/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: go - -go: - - 1.0 - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - 1.5 - -sudo: false diff --git a/vendor/golang.org/x/tools/CONTRIBUTING.md b/vendor/golang.org/x/tools/CONTRIBUTING.md index 88dff59bc7d..d0485e887a2 100644 --- a/vendor/golang.org/x/tools/CONTRIBUTING.md +++ b/vendor/golang.org/x/tools/CONTRIBUTING.md @@ -4,16 +4,15 @@ Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! - ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. @@ -23,9 +22,5 @@ The gophers there will answer or ask you to file an issue if you've tripped over Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/tools/README b/vendor/golang.org/x/tools/README deleted file mode 100644 index d5944c6db04..00000000000 --- a/vendor/golang.org/x/tools/README +++ /dev/null @@ -1,10 +0,0 @@ -This subrepository holds the source for various packages and tools that support -the Go programming language. - -Some of the tools, godoc and vet for example, are included in binary Go distributions. -Others, including the Go guru and the test coverage tool, can be fetched with "go get". - -Packages include a type-checker for Go and an implementation of the -Static Single Assignment form (SSA) representation for Go programs. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/tools/README.md b/vendor/golang.org/x/tools/README.md new file mode 100644 index 00000000000..20be9e1abd6 --- /dev/null +++ b/vendor/golang.org/x/tools/README.md @@ -0,0 +1,27 @@ +# Go Tools + +This subrepository holds the source for various packages and tools that support +the Go programming language. + +Some of the tools, `godoc` and `vet` for example, are included in binary Go +distributions. + +Others, including the Go `guru` and the test coverage tool, can be fetched with +`go get`. + +Packages include a type-checker for Go and an implementation of the +Static Single Assignment form (SSA) representation for Go programs. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/tools/...`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/tools`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the tools repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/tools/(your +subdir):" in the subject line, so it is easy to find. diff --git a/vendor/golang.org/x/tools/container/intsets/sparse.go b/vendor/golang.org/x/tools/container/intsets/sparse.go index 8847febf1da..5db01c1a448 100644 --- a/vendor/golang.org/x/tools/container/intsets/sparse.go +++ b/vendor/golang.org/x/tools/container/intsets/sparse.go @@ -21,10 +21,6 @@ package intsets // import "golang.org/x/tools/container/intsets" // The space usage would be proportional to Max(), not Len(), and the // implementation would be based upon big.Int. // -// TODO(adonovan): experiment with making the root block indirect (nil -// iff IsEmpty). This would reduce the memory usage when empty and -// might simplify the aliasing invariants. -// // TODO(adonovan): opt: make UnionWith and Difference faster. // These are the hot-spots for go/pointer. @@ -45,9 +41,10 @@ type Sparse struct { // An uninitialized Sparse represents an empty set. // An empty set may also be represented by // root.next == root.prev == &root. - // In a non-empty set, root.next points to the first block and - // root.prev to the last. - // root.offset and root.bits are unused. + // + // The root is always the block with the smallest offset. + // It can be empty, but only if it is the only block; in that case, offset is + // MaxInt (which is not a valid offset). root block } @@ -144,7 +141,6 @@ func (b *block) len() int { // max returns the maximum element of the block. // The block must not be empty. -// func (b *block) max() int { bi := b.offset + bitsPerBlock // Decrement bi by number of high zeros in last.bits. @@ -161,7 +157,6 @@ func (b *block) max() int { // and also removes it if take is set. // The block must not be initially empty. // NB: may leave the block empty. -// func (b *block) min(take bool) int { for i, w := range b.bits { if w != 0 { @@ -175,6 +170,26 @@ func (b *block) min(take bool) int { panic("BUG: empty block") } +// lowerBound returns the smallest element of the block that is greater than or +// equal to the element corresponding to the ith bit. If there is no such +// element, the second return value is false. +func (b *block) lowerBound(i uint) (int, bool) { + w := i / bitsPerWord + bit := i % bitsPerWord + + if val := b.bits[w] >> bit; val != 0 { + return b.offset + int(i) + ntz(val), true + } + + for w++; w < wordsPerBlock; w++ { + if val := b.bits[w]; val != 0 { + return b.offset + int(w*bitsPerWord) + ntz(val), true + } + } + + return 0, false +} + // forEach calls f for each element of block b. // f must not mutate b's enclosing Sparse. func (b *block) forEach(f func(int)) { @@ -204,14 +219,20 @@ func offsetAndBitIndex(x int) (int, uint) { // -- Sparse -------------------------------------------------------------- -// start returns the root's next block, which is the root block -// (if s.IsEmpty()) or the first true block otherwise. -// start has the side effect of ensuring that s is properly -// initialized. -// -func (s *Sparse) start() *block { +// none is a shared, empty, sentinel block that indicates the end of a block +// list. +var none block + +// Dummy type used to generate an implicit panic. This must be defined at the +// package level; if it is defined inside a function, it prevents the inlining +// of that function. +type to_copy_a_sparse_you_must_call_its_Copy_method struct{} + +// init ensures s is properly initialized. +func (s *Sparse) init() { root := &s.root if root.next == nil { + root.offset = MaxInt root.next = root root.prev = root } else if root.next.prev != root { @@ -219,21 +240,45 @@ func (s *Sparse) start() *block { // new Sparse y shares the old linked list, but iteration // on y will never encounter &y.root so it goes into a // loop. Fail fast before this occurs. - panic("A Sparse has been copied without (*Sparse).Copy()") + // We don't want to call panic here because it prevents the + // inlining of this function. + _ = (interface{}(nil)).(to_copy_a_sparse_you_must_call_its_Copy_method) } +} - return root.next +func (s *Sparse) first() *block { + s.init() + if s.root.offset == MaxInt { + return &none + } + return &s.root +} + +// next returns the next block in the list, or end if b is the last block. +func (s *Sparse) next(b *block) *block { + if b.next == &s.root { + return &none + } + return b.next +} + +// prev returns the previous block in the list, or end if b is the first block. +func (s *Sparse) prev(b *block) *block { + if b.prev == &s.root { + return &none + } + return b.prev } // IsEmpty reports whether the set s is empty. func (s *Sparse) IsEmpty() bool { - return s.start() == &s.root + return s.root.next == nil || s.root.offset == MaxInt } // Len returns the number of elements in the set s. func (s *Sparse) Len() int { var l int - for b := s.start(); b != &s.root; b = b.next { + for b := s.first(); b != &none; b = s.next(b) { l += b.len() } return l @@ -252,19 +297,34 @@ func (s *Sparse) Min() int { if s.IsEmpty() { return MaxInt } - return s.root.next.min(false) + return s.root.min(false) +} + +// LowerBound returns the smallest element >= x, or MaxInt if there is no such +// element. +func (s *Sparse) LowerBound(x int) int { + offset, i := offsetAndBitIndex(x) + for b := s.first(); b != &none; b = s.next(b) { + if b.offset > offset { + return b.min(false) + } + if b.offset == offset { + if y, ok := b.lowerBound(i); ok { + return y + } + } + } + return MaxInt } // block returns the block that would contain offset, // or nil if s contains no such block. -// +// Precondition: offset is a multiple of bitsPerBlock. func (s *Sparse) block(offset int) *block { - b := s.start() - for b != &s.root && b.offset <= offset { + for b := s.first(); b != &none && b.offset <= offset; b = s.next(b) { if b.offset == offset { return b } - b = b.next } return nil } @@ -272,26 +332,49 @@ func (s *Sparse) block(offset int) *block { // Insert adds x to the set s, and reports whether the set grew. func (s *Sparse) Insert(x int) bool { offset, i := offsetAndBitIndex(x) - b := s.start() - for b != &s.root && b.offset <= offset { + + b := s.first() + for ; b != &none && b.offset <= offset; b = s.next(b) { if b.offset == offset { return b.insert(i) } - b = b.next } // Insert new block before b. - new := &block{offset: offset} - new.next = b - new.prev = b.prev - new.prev.next = new - new.next.prev = new + new := s.insertBlockBefore(b) + new.offset = offset return new.insert(i) } -func (s *Sparse) removeBlock(b *block) { - b.prev.next = b.next - b.next.prev = b.prev +// removeBlock removes a block and returns the block that followed it (or end if +// it was the last block). +func (s *Sparse) removeBlock(b *block) *block { + if b != &s.root { + b.prev.next = b.next + b.next.prev = b.prev + if b.next == &s.root { + return &none + } + return b.next + } + + first := s.root.next + if first == &s.root { + // This was the only block. + s.Clear() + return &none + } + s.root.offset = first.offset + s.root.bits = first.bits + if first.next == &s.root { + // Single block remaining. + s.root.next = &s.root + s.root.prev = &s.root + } else { + s.root.next = first.next + first.next.prev = &s.root + } + return &s.root } // Remove removes x from the set s, and reports whether the set shrank. @@ -311,8 +394,11 @@ func (s *Sparse) Remove(x int) bool { // Clear removes all elements from the set s. func (s *Sparse) Clear() { - s.root.next = &s.root - s.root.prev = &s.root + s.root = block{ + offset: MaxInt, + next: &s.root, + prev: &s.root, + } } // If set s is non-empty, TakeMin sets *p to the minimum element of @@ -325,13 +411,12 @@ func (s *Sparse) Clear() { // for worklist.TakeMin(&x) { use(x) } // func (s *Sparse) TakeMin(p *int) bool { - head := s.start() - if head == &s.root { + if s.IsEmpty() { return false } - *p = head.min(true) - if head.empty() { - s.removeBlock(head) + *p = s.root.min(true) + if s.root.empty() { + s.removeBlock(&s.root) } return true } @@ -352,7 +437,7 @@ func (s *Sparse) Has(x int) bool { // natural control flow with continue/break/return. // func (s *Sparse) forEach(f func(int)) { - for b := s.start(); b != &s.root; b = b.next { + for b := s.first(); b != &none; b = s.next(b) { b.forEach(f) } } @@ -363,22 +448,51 @@ func (s *Sparse) Copy(x *Sparse) { return } - xb := x.start() - sb := s.start() - for xb != &x.root { - if sb == &s.root { + xb := x.first() + sb := s.first() + for xb != &none { + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = xb.offset sb.bits = xb.bits - xb = xb.next - sb = sb.next + xb = x.next(xb) + sb = s.next(sb) } s.discardTail(sb) } // insertBlockBefore returns a new block, inserting it before next. +// If next is the root, the root is replaced. If next is end, the block is +// inserted at the end. func (s *Sparse) insertBlockBefore(next *block) *block { + if s.IsEmpty() { + if next != &none { + panic("BUG: passed block with empty set") + } + return &s.root + } + + if next == &s.root { + // Special case: we need to create a new block that will become the root + // block.The old root block becomes the second block. + second := s.root + s.root = block{ + next: &second, + } + if second.next == &s.root { + s.root.prev = &second + } else { + s.root.prev = second.prev + second.next.prev = &second + second.prev = &s.root + } + return &s.root + } + if next == &none { + // Insert before root. + next = &s.root + } b := new(block) b.next = next b.prev = next.prev @@ -389,9 +503,13 @@ func (s *Sparse) insertBlockBefore(next *block) *block { // discardTail removes block b and all its successors from s. func (s *Sparse) discardTail(b *block) { - if b != &s.root { - b.prev.next = &s.root - s.root.prev = b.prev + if b != &none { + if b == &s.root { + s.Clear() + } else { + b.prev.next = &s.root + s.root.prev = b.prev + } } } @@ -401,16 +519,15 @@ func (s *Sparse) IntersectionWith(x *Sparse) { return } - xb := x.start() - sb := s.start() - for xb != &x.root && sb != &s.root { + xb := x.first() + sb := s.first() + for xb != &none && sb != &none { switch { case xb.offset < sb.offset: - xb = xb.next + xb = x.next(xb) case xb.offset > sb.offset: - sb = sb.next - s.removeBlock(sb.prev) + sb = s.removeBlock(sb) default: var sum word @@ -420,12 +537,12 @@ func (s *Sparse) IntersectionWith(x *Sparse) { sum |= r } if sum != 0 { - sb = sb.next + sb = s.next(sb) } else { // sb will be overwritten or removed } - xb = xb.next + xb = x.next(xb) } } @@ -446,20 +563,20 @@ func (s *Sparse) Intersection(x, y *Sparse) { return } - xb := x.start() - yb := y.start() - sb := s.start() - for xb != &x.root && yb != &y.root { + xb := x.first() + yb := y.first() + sb := s.first() + for xb != &none && yb != &none { switch { case xb.offset < yb.offset: - xb = xb.next + xb = x.next(xb) continue case xb.offset > yb.offset: - yb = yb.next + yb = y.next(yb) continue } - if sb == &s.root { + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = xb.offset @@ -471,13 +588,13 @@ func (s *Sparse) Intersection(x, y *Sparse) { sum |= r } if sum != 0 { - sb = sb.next + sb = s.next(sb) } else { // sb will be overwritten or removed } - xb = xb.next - yb = yb.next + xb = x.next(xb) + yb = y.next(yb) } s.discardTail(sb) @@ -485,22 +602,22 @@ func (s *Sparse) Intersection(x, y *Sparse) { // Intersects reports whether s ∩ x ≠ ∅. func (s *Sparse) Intersects(x *Sparse) bool { - sb := s.start() - xb := x.start() - for sb != &s.root && xb != &x.root { + sb := s.first() + xb := x.first() + for sb != &none && xb != &none { switch { case xb.offset < sb.offset: - xb = xb.next + xb = x.next(xb) case xb.offset > sb.offset: - sb = sb.next + sb = s.next(sb) default: for i := range sb.bits { if sb.bits[i]&xb.bits[i] != 0 { return true } } - sb = sb.next - xb = xb.next + sb = s.next(sb) + xb = x.next(xb) } } return false @@ -513,26 +630,26 @@ func (s *Sparse) UnionWith(x *Sparse) bool { } var changed bool - xb := x.start() - sb := s.start() - for xb != &x.root { - if sb != &s.root && sb.offset == xb.offset { + xb := x.first() + sb := s.first() + for xb != &none { + if sb != &none && sb.offset == xb.offset { for i := range xb.bits { if sb.bits[i] != xb.bits[i] { sb.bits[i] |= xb.bits[i] changed = true } } - xb = xb.next - } else if sb == &s.root || sb.offset > xb.offset { + xb = x.next(xb) + } else if sb == &none || sb.offset > xb.offset { sb = s.insertBlockBefore(sb) sb.offset = xb.offset sb.bits = xb.bits changed = true - xb = xb.next + xb = x.next(xb) } - sb = sb.next + sb = s.next(sb) } return changed } @@ -551,33 +668,33 @@ func (s *Sparse) Union(x, y *Sparse) { return } - xb := x.start() - yb := y.start() - sb := s.start() - for xb != &x.root || yb != &y.root { - if sb == &s.root { + xb := x.first() + yb := y.first() + sb := s.first() + for xb != &none || yb != &none { + if sb == &none { sb = s.insertBlockBefore(sb) } switch { - case yb == &y.root || (xb != &x.root && xb.offset < yb.offset): + case yb == &none || (xb != &none && xb.offset < yb.offset): sb.offset = xb.offset sb.bits = xb.bits - xb = xb.next + xb = x.next(xb) - case xb == &x.root || (yb != &y.root && yb.offset < xb.offset): + case xb == &none || (yb != &none && yb.offset < xb.offset): sb.offset = yb.offset sb.bits = yb.bits - yb = yb.next + yb = y.next(yb) default: sb.offset = xb.offset for i := range xb.bits { sb.bits[i] = xb.bits[i] | yb.bits[i] } - xb = xb.next - yb = yb.next + xb = x.next(xb) + yb = y.next(yb) } - sb = sb.next + sb = s.next(sb) } s.discardTail(sb) @@ -590,15 +707,15 @@ func (s *Sparse) DifferenceWith(x *Sparse) { return } - xb := x.start() - sb := s.start() - for xb != &x.root && sb != &s.root { + xb := x.first() + sb := s.first() + for xb != &none && sb != &none { switch { case xb.offset > sb.offset: - sb = sb.next + sb = s.next(sb) case xb.offset < sb.offset: - xb = xb.next + xb = x.next(xb) default: var sum word @@ -607,12 +724,12 @@ func (s *Sparse) DifferenceWith(x *Sparse) { sb.bits[i] = r sum |= r } - sb = sb.next - xb = xb.next - if sum == 0 { - s.removeBlock(sb.prev) + sb = s.removeBlock(sb) + } else { + sb = s.next(sb) } + xb = x.next(xb) } } } @@ -633,27 +750,27 @@ func (s *Sparse) Difference(x, y *Sparse) { return } - xb := x.start() - yb := y.start() - sb := s.start() - for xb != &x.root && yb != &y.root { + xb := x.first() + yb := y.first() + sb := s.first() + for xb != &none && yb != &none { if xb.offset > yb.offset { - // y has block, x has none - yb = yb.next + // y has block, x has &none + yb = y.next(yb) continue } - if sb == &s.root { + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = xb.offset switch { case xb.offset < yb.offset: - // x has block, y has none + // x has block, y has &none sb.bits = xb.bits - sb = sb.next + sb = s.next(sb) default: // x and y have corresponding blocks @@ -664,25 +781,25 @@ func (s *Sparse) Difference(x, y *Sparse) { sum |= r } if sum != 0 { - sb = sb.next + sb = s.next(sb) } else { // sb will be overwritten or removed } - yb = yb.next + yb = y.next(yb) } - xb = xb.next + xb = x.next(xb) } - for xb != &x.root { - if sb == &s.root { + for xb != &none { + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = xb.offset sb.bits = xb.bits - sb = sb.next + sb = s.next(sb) - xb = xb.next + xb = x.next(xb) } s.discardTail(sb) @@ -695,17 +812,17 @@ func (s *Sparse) SymmetricDifferenceWith(x *Sparse) { return } - sb := s.start() - xb := x.start() - for xb != &x.root && sb != &s.root { + sb := s.first() + xb := x.first() + for xb != &none && sb != &none { switch { case sb.offset < xb.offset: - sb = sb.next + sb = s.next(sb) case xb.offset < sb.offset: nb := s.insertBlockBefore(sb) nb.offset = xb.offset nb.bits = xb.bits - xb = xb.next + xb = x.next(xb) default: var sum word for i := range sb.bits { @@ -713,20 +830,21 @@ func (s *Sparse) SymmetricDifferenceWith(x *Sparse) { sb.bits[i] = r sum |= r } - sb = sb.next - xb = xb.next if sum == 0 { - s.removeBlock(sb.prev) + sb = s.removeBlock(sb) + } else { + sb = s.next(sb) } + xb = x.next(xb) } } - for xb != &x.root { // append the tail of x to s + for xb != &none { // append the tail of x to s sb = s.insertBlockBefore(sb) sb.offset = xb.offset sb.bits = xb.bits - sb = sb.next - xb = xb.next + sb = s.next(sb) + xb = x.next(xb) } } @@ -744,24 +862,24 @@ func (s *Sparse) SymmetricDifference(x, y *Sparse) { return } - sb := s.start() - xb := x.start() - yb := y.start() - for xb != &x.root && yb != &y.root { - if sb == &s.root { + sb := s.first() + xb := x.first() + yb := y.first() + for xb != &none && yb != &none { + if sb == &none { sb = s.insertBlockBefore(sb) } switch { case yb.offset < xb.offset: sb.offset = yb.offset sb.bits = yb.bits - sb = sb.next - yb = yb.next + sb = s.next(sb) + yb = y.next(yb) case xb.offset < yb.offset: sb.offset = xb.offset sb.bits = xb.bits - sb = sb.next - xb = xb.next + sb = s.next(sb) + xb = x.next(xb) default: var sum word for i := range sb.bits { @@ -771,31 +889,31 @@ func (s *Sparse) SymmetricDifference(x, y *Sparse) { } if sum != 0 { sb.offset = xb.offset - sb = sb.next + sb = s.next(sb) } - xb = xb.next - yb = yb.next + xb = x.next(xb) + yb = y.next(yb) } } - for xb != &x.root { // append the tail of x to s - if sb == &s.root { + for xb != &none { // append the tail of x to s + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = xb.offset sb.bits = xb.bits - sb = sb.next - xb = xb.next + sb = s.next(sb) + xb = x.next(xb) } - for yb != &y.root { // append the tail of y to s - if sb == &s.root { + for yb != &none { // append the tail of y to s + if sb == &none { sb = s.insertBlockBefore(sb) } sb.offset = yb.offset sb.bits = yb.bits - sb = sb.next - yb = yb.next + sb = s.next(sb) + yb = y.next(yb) } s.discardTail(sb) @@ -807,22 +925,22 @@ func (s *Sparse) SubsetOf(x *Sparse) bool { return true } - sb := s.start() - xb := x.start() - for sb != &s.root { + sb := s.first() + xb := x.first() + for sb != &none { switch { - case xb == &x.root || xb.offset > sb.offset: + case xb == &none || xb.offset > sb.offset: return false case xb.offset < sb.offset: - xb = xb.next + xb = x.next(xb) default: for i := range sb.bits { if sb.bits[i]&^xb.bits[i] != 0 { return false } } - sb = sb.next - xb = xb.next + sb = s.next(sb) + xb = x.next(xb) } } return true @@ -833,13 +951,13 @@ func (s *Sparse) Equals(t *Sparse) bool { if s == t { return true } - sb := s.start() - tb := t.start() + sb := s.first() + tb := t.first() for { switch { - case sb == &s.root && tb == &t.root: + case sb == &none && tb == &none: return true - case sb == &s.root || tb == &t.root: + case sb == &none || tb == &none: return false case sb.offset != tb.offset: return false @@ -847,8 +965,8 @@ func (s *Sparse) Equals(t *Sparse) bool { return false } - sb = sb.next - tb = tb.next + sb = s.next(sb) + tb = t.next(tb) } } @@ -913,7 +1031,7 @@ func (s *Sparse) BitString() string { // func (s *Sparse) GoString() string { var buf bytes.Buffer - for b := s.start(); b != &s.root; b = b.next { + for b := s.first(); b != &none; b = s.next(b) { fmt.Fprintf(&buf, "block %p {offset=%d next=%p prev=%p", b, b.offset, b.next, b.prev) for _, w := range b.bits { @@ -937,13 +1055,18 @@ func (s *Sparse) AppendTo(slice []int) []int { // check returns an error if the representation invariants of s are violated. func (s *Sparse) check() error { - if !s.root.empty() { - return fmt.Errorf("non-empty root block") + s.init() + if s.root.empty() { + // An empty set must have only the root block with offset MaxInt. + if s.root.next != &s.root { + return fmt.Errorf("multiple blocks with empty root block") + } + if s.root.offset != MaxInt { + return fmt.Errorf("empty set has offset %d, should be MaxInt", s.root.offset) + } + return nil } - if s.root.offset != 0 { - return fmt.Errorf("root block has non-zero offset %d", s.root.offset) - } - for b := s.start(); b != &s.root; b = b.next { + for b := s.first(); ; b = s.next(b) { if b.offset%bitsPerBlock != 0 { return fmt.Errorf("bad offset modulo: %d", b.offset) } @@ -956,11 +1079,12 @@ func (s *Sparse) check() error { if b.next.prev != b { return fmt.Errorf("bad next.prev link") } - if b.prev != &s.root { - if b.offset <= b.prev.offset { - return fmt.Errorf("bad offset order: b.offset=%d, prev.offset=%d", - b.offset, b.prev.offset) - } + if b.next == &s.root { + break + } + if b.offset >= b.next.offset { + return fmt.Errorf("bad offset order: b.offset=%d, b.next.offset=%d", + b.offset, b.next.offset) } } return nil diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go index 36c536b5eab..3e4b195368b 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/imports.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -14,26 +14,26 @@ import ( ) // AddImport adds the import path to the file f, if absent. -func AddImport(fset *token.FileSet, f *ast.File, ipath string) (added bool) { - return AddNamedImport(fset, f, "", ipath) +func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) { + return AddNamedImport(fset, f, "", path) } -// AddNamedImport adds the import path to the file f, if absent. +// AddNamedImport adds the import with the given name and path to the file f, if absent. // If name is not empty, it is used to rename the import. // // For example, calling // AddNamedImport(fset, f, "pathpkg", "path") // adds // import pathpkg "path" -func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added bool) { - if imports(f, ipath) { +func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) { + if imports(f, name, path) { return false } newImport := &ast.ImportSpec{ Path: &ast.BasicLit{ Kind: token.STRING, - Value: strconv.Quote(ipath), + Value: strconv.Quote(path), }, } if name != "" { @@ -43,12 +43,14 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added // Find an import decl to add to. // The goal is to find an existing import // whose import path has the longest shared - // prefix with ipath. + // prefix with path. var ( bestMatch = -1 // length of longest shared prefix lastImport = -1 // index in f.Decls of the file's final import decl impDecl *ast.GenDecl // import decl containing the best match impIndex = -1 // spec index in impDecl containing the best match + + isThirdPartyPath = isThirdParty(path) ) for i, decl := range f.Decls { gen, ok := decl.(*ast.GenDecl) @@ -65,15 +67,27 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added impDecl = gen } - // Compute longest shared prefix with imports in this group. + // Compute longest shared prefix with imports in this group and find best + // matched import spec. + // 1. Always prefer import spec with longest shared prefix. + // 2. While match length is 0, + // - for stdlib package: prefer first import spec. + // - for third party package: prefer first third party import spec. + // We cannot use last import spec as best match for third party package + // because grouped imports are usually placed last by goimports -local + // flag. + // See issue #19190. + seenAnyThirdParty := false for j, spec := range gen.Specs { impspec := spec.(*ast.ImportSpec) - n := matchLen(importPath(impspec), ipath) - if n > bestMatch { + p := importPath(impspec) + n := matchLen(p, path) + if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) { bestMatch = n impDecl = gen impIndex = j } + seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p) } } } @@ -87,8 +101,8 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added impDecl.TokPos = f.Decls[lastImport].End() } else { // There are no existing imports. - // Our new import goes after the package declaration and after - // the comment, if any, that starts on the same line as the + // Our new import, preceded by a blank line, goes after the package declaration + // and after the comment, if any, that starts on the same line as the // package declaration. impDecl.TokPos = f.Package @@ -98,7 +112,8 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added if file.Line(c.Pos()) > pkgLine { break } - impDecl.TokPos = c.End() + // +2 for a blank line + impDecl.TokPos = c.End() + 2 } } f.Decls = append(f.Decls, nil) @@ -175,12 +190,20 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added return true } +func isThirdParty(importPath string) bool { + // Third party package import path usually contains "." (".com", ".org", ...) + // This logic is taken from golang.org/x/tools/imports package. + return strings.Contains(importPath, ".") +} + // DeleteImport deletes the import path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) { return DeleteNamedImport(fset, f, "", path) } // DeleteNamedImport deletes the import with the given name and path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) { var delspecs []*ast.ImportSpec var delcomments []*ast.CommentGroup @@ -195,13 +218,7 @@ func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (del for j := 0; j < len(gen.Specs); j++ { spec := gen.Specs[j] impspec := spec.(*ast.ImportSpec) - if impspec.Name == nil && name != "" { - continue - } - if impspec.Name != nil && impspec.Name.Name != name { - continue - } - if importPath(impspec) != path { + if importName(impspec) != name || importPath(impspec) != path { continue } @@ -262,7 +279,7 @@ func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (del // There was a blank line immediately preceding the deleted import, // so there's no need to close the hole. // Do nothing. - } else { + } else if line != fset.File(gen.Rparen).LineCount() { // There was no blank line. Close the hole. fset.File(gen.Rparen).MergeLine(line) } @@ -362,9 +379,14 @@ func (fn visitFn) Visit(node ast.Node) ast.Visitor { return fn } -// imports returns true if f imports path. -func imports(f *ast.File, path string) bool { - return importSpec(f, path) != nil +// imports reports whether f has an import with the specified name and path. +func imports(f *ast.File, name, path string) bool { + for _, s := range f.Imports { + if importName(s) == name && importPath(s) == path { + return true + } + } + return false } // importSpec returns the import spec if f imports path, @@ -378,14 +400,23 @@ func importSpec(f *ast.File, path string) *ast.ImportSpec { return nil } +// importName returns the name of s, +// or "" if the import is not named. +func importName(s *ast.ImportSpec) string { + if s.Name == nil { + return "" + } + return s.Name.Name +} + // importPath returns the unquoted import path of s, // or "" if the path is not properly quoted. func importPath(s *ast.ImportSpec) string { t, err := strconv.Unquote(s.Path.Value) - if err == nil { - return t + if err != nil { + return "" } - return "" + return t } // declImports reports whether gen contains an import of path. diff --git a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go new file mode 100644 index 00000000000..cf72ea990bd --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -0,0 +1,477 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import ( + "fmt" + "go/ast" + "reflect" + "sort" +) + +// An ApplyFunc is invoked by Apply for each node n, even if n is nil, +// before and/or after the node's children, using a Cursor describing +// the current node and providing operations on it. +// +// The return value of ApplyFunc controls the syntax tree traversal. +// See Apply for details. +type ApplyFunc func(*Cursor) bool + +// Apply traverses a syntax tree recursively, starting with root, +// and calling pre and post for each node as described below. +// Apply returns the syntax tree, possibly modified. +// +// If pre is not nil, it is called for each node before the node's +// children are traversed (pre-order). If pre returns false, no +// children are traversed, and post is not called for that node. +// +// If post is not nil, and a prior call of pre didn't return false, +// post is called for each node after its children are traversed +// (post-order). If post returns false, traversal is terminated and +// Apply returns immediately. +// +// Only fields that refer to AST nodes are considered children; +// i.e., token.Pos, Scopes, Objects, and fields of basic types +// (strings, etc.) are ignored. +// +// Children are traversed in the order in which they appear in the +// respective node's struct definition. A package's files are +// traversed in the filenames' alphabetical order. +// +func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) { + parent := &struct{ ast.Node }{root} + defer func() { + if r := recover(); r != nil && r != abort { + panic(r) + } + result = parent.Node + }() + a := &application{pre: pre, post: post} + a.apply(parent, "Node", nil, root) + return +} + +var abort = new(int) // singleton, to signal termination of Apply + +// A Cursor describes a node encountered during Apply. +// Information about the node and its parent is available +// from the Node, Parent, Name, and Index methods. +// +// If p is a variable of type and value of the current parent node +// c.Parent(), and f is the field identifier with name c.Name(), +// the following invariants hold: +// +// p.f == c.Node() if c.Index() < 0 +// p.f[c.Index()] == c.Node() if c.Index() >= 0 +// +// The methods Replace, Delete, InsertBefore, and InsertAfter +// can be used to change the AST without disrupting Apply. +type Cursor struct { + parent ast.Node + name string + iter *iterator // valid if non-nil + node ast.Node +} + +// Node returns the current Node. +func (c *Cursor) Node() ast.Node { return c.node } + +// Parent returns the parent of the current Node. +func (c *Cursor) Parent() ast.Node { return c.parent } + +// Name returns the name of the parent Node field that contains the current Node. +// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns +// the filename for the current Node. +func (c *Cursor) Name() string { return c.name } + +// Index reports the index >= 0 of the current Node in the slice of Nodes that +// contains it, or a value < 0 if the current Node is not part of a slice. +// The index of the current node changes if InsertBefore is called while +// processing the current node. +func (c *Cursor) Index() int { + if c.iter != nil { + return c.iter.index + } + return -1 +} + +// field returns the current node's parent field value. +func (c *Cursor) field() reflect.Value { + return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name) +} + +// Replace replaces the current Node with n. +// The replacement node is not walked by Apply. +func (c *Cursor) Replace(n ast.Node) { + if _, ok := c.node.(*ast.File); ok { + file, ok := n.(*ast.File) + if !ok { + panic("attempt to replace *ast.File with non-*ast.File") + } + c.parent.(*ast.Package).Files[c.name] = file + return + } + + v := c.field() + if i := c.Index(); i >= 0 { + v = v.Index(i) + } + v.Set(reflect.ValueOf(n)) +} + +// Delete deletes the current Node from its containing slice. +// If the current Node is not part of a slice, Delete panics. +// As a special case, if the current node is a package file, +// Delete removes it from the package's Files map. +func (c *Cursor) Delete() { + if _, ok := c.node.(*ast.File); ok { + delete(c.parent.(*ast.Package).Files, c.name) + return + } + + i := c.Index() + if i < 0 { + panic("Delete node not contained in slice") + } + v := c.field() + l := v.Len() + reflect.Copy(v.Slice(i, l), v.Slice(i+1, l)) + v.Index(l - 1).Set(reflect.Zero(v.Type().Elem())) + v.SetLen(l - 1) + c.iter.step-- +} + +// InsertAfter inserts n after the current Node in its containing slice. +// If the current Node is not part of a slice, InsertAfter panics. +// Apply does not walk n. +func (c *Cursor) InsertAfter(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertAfter node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l)) + v.Index(i + 1).Set(reflect.ValueOf(n)) + c.iter.step++ +} + +// InsertBefore inserts n before the current Node in its containing slice. +// If the current Node is not part of a slice, InsertBefore panics. +// Apply will not walk n. +func (c *Cursor) InsertBefore(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertBefore node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+1, l), v.Slice(i, l)) + v.Index(i).Set(reflect.ValueOf(n)) + c.iter.index++ +} + +// application carries all the shared data so we can pass it around cheaply. +type application struct { + pre, post ApplyFunc + cursor Cursor + iter iterator +} + +func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) { + // convert typed nil into untyped nil + if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() { + n = nil + } + + // avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead + saved := a.cursor + a.cursor.parent = parent + a.cursor.name = name + a.cursor.iter = iter + a.cursor.node = n + + if a.pre != nil && !a.pre(&a.cursor) { + a.cursor = saved + return + } + + // walk children + // (the order of the cases matches the order of the corresponding node types in go/ast) + switch n := n.(type) { + case nil: + // nothing to do + + // Comments and fields + case *ast.Comment: + // nothing to do + + case *ast.CommentGroup: + if n != nil { + a.applyList(n, "List") + } + + case *ast.Field: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.FieldList: + a.applyList(n, "List") + + // Expressions + case *ast.BadExpr, *ast.Ident, *ast.BasicLit: + // nothing to do + + case *ast.Ellipsis: + a.apply(n, "Elt", nil, n.Elt) + + case *ast.FuncLit: + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + case *ast.CompositeLit: + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Elts") + + case *ast.ParenExpr: + a.apply(n, "X", nil, n.X) + + case *ast.SelectorExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Sel", nil, n.Sel) + + case *ast.IndexExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Index", nil, n.Index) + + case *ast.SliceExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Low", nil, n.Low) + a.apply(n, "High", nil, n.High) + a.apply(n, "Max", nil, n.Max) + + case *ast.TypeAssertExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Type", nil, n.Type) + + case *ast.CallExpr: + a.apply(n, "Fun", nil, n.Fun) + a.applyList(n, "Args") + + case *ast.StarExpr: + a.apply(n, "X", nil, n.X) + + case *ast.UnaryExpr: + a.apply(n, "X", nil, n.X) + + case *ast.BinaryExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Y", nil, n.Y) + + case *ast.KeyValueExpr: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + // Types + case *ast.ArrayType: + a.apply(n, "Len", nil, n.Len) + a.apply(n, "Elt", nil, n.Elt) + + case *ast.StructType: + a.apply(n, "Fields", nil, n.Fields) + + case *ast.FuncType: + a.apply(n, "Params", nil, n.Params) + a.apply(n, "Results", nil, n.Results) + + case *ast.InterfaceType: + a.apply(n, "Methods", nil, n.Methods) + + case *ast.MapType: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + case *ast.ChanType: + a.apply(n, "Value", nil, n.Value) + + // Statements + case *ast.BadStmt: + // nothing to do + + case *ast.DeclStmt: + a.apply(n, "Decl", nil, n.Decl) + + case *ast.EmptyStmt: + // nothing to do + + case *ast.LabeledStmt: + a.apply(n, "Label", nil, n.Label) + a.apply(n, "Stmt", nil, n.Stmt) + + case *ast.ExprStmt: + a.apply(n, "X", nil, n.X) + + case *ast.SendStmt: + a.apply(n, "Chan", nil, n.Chan) + a.apply(n, "Value", nil, n.Value) + + case *ast.IncDecStmt: + a.apply(n, "X", nil, n.X) + + case *ast.AssignStmt: + a.applyList(n, "Lhs") + a.applyList(n, "Rhs") + + case *ast.GoStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.DeferStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.ReturnStmt: + a.applyList(n, "Results") + + case *ast.BranchStmt: + a.apply(n, "Label", nil, n.Label) + + case *ast.BlockStmt: + a.applyList(n, "List") + + case *ast.IfStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Body", nil, n.Body) + a.apply(n, "Else", nil, n.Else) + + case *ast.CaseClause: + a.applyList(n, "List") + a.applyList(n, "Body") + + case *ast.SwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Body", nil, n.Body) + + case *ast.TypeSwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Assign", nil, n.Assign) + a.apply(n, "Body", nil, n.Body) + + case *ast.CommClause: + a.apply(n, "Comm", nil, n.Comm) + a.applyList(n, "Body") + + case *ast.SelectStmt: + a.apply(n, "Body", nil, n.Body) + + case *ast.ForStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Post", nil, n.Post) + a.apply(n, "Body", nil, n.Body) + + case *ast.RangeStmt: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + a.apply(n, "X", nil, n.X) + a.apply(n, "Body", nil, n.Body) + + // Declarations + case *ast.ImportSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Path", nil, n.Path) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.ValueSpec: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Values") + a.apply(n, "Comment", nil, n.Comment) + + case *ast.TypeSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.BadDecl: + // nothing to do + + case *ast.GenDecl: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Specs") + + case *ast.FuncDecl: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Recv", nil, n.Recv) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + // Files and packages + case *ast.File: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.applyList(n, "Decls") + // Don't walk n.Comments; they have either been walked already if + // they are Doc comments, or they can be easily walked explicitly. + + case *ast.Package: + // collect and sort names for reproducible behavior + var names []string + for name := range n.Files { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + a.apply(n, name, nil, n.Files[name]) + } + + default: + panic(fmt.Sprintf("Apply: unexpected node type %T", n)) + } + + if a.post != nil && !a.post(&a.cursor) { + panic(abort) + } + + a.cursor = saved +} + +// An iterator controls iteration over a slice of nodes. +type iterator struct { + index, step int +} + +func (a *application) applyList(parent ast.Node, name string) { + // avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead + saved := a.iter + a.iter.index = 0 + for { + // must reload parent.name each time, since cursor modifications might change it + v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name) + if a.iter.index >= v.Len() { + break + } + + // element x may be nil in a bad AST - be cautious + var x ast.Node + if e := v.Index(a.iter.index); e.IsValid() { + x = e.Interface().(ast.Node) + } + + a.iter.step = 1 + a.apply(parent, name, &a.iter, x) + a.iter.index += a.iter.step + } + a.iter = saved +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go new file mode 100644 index 00000000000..98b3987b974 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -0,0 +1,109 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gcexportdata provides functions for locating, reading, and +// writing export data files containing type information produced by the +// gc compiler. This package supports go1.7 export data format and all +// later versions. +// +// Although it might seem convenient for this package to live alongside +// go/types in the standard library, this would cause version skew +// problems for developer tools that use it, since they must be able to +// consume the outputs of the gc compiler both before and after a Go +// update such as from Go 1.7 to Go 1.8. Because this package lives in +// golang.org/x/tools, sites can update their version of this repo some +// time before the Go 1.8 release and rebuild and redeploy their +// developer tools, which will then be able to consume both Go 1.7 and +// Go 1.8 export data files, so they will work before and after the +// Go update. (See discussion at https://golang.org/issue/15651.) +// +package gcexportdata // import "golang.org/x/tools/go/gcexportdata" + +import ( + "bufio" + "bytes" + "fmt" + "go/token" + "go/types" + "io" + "io/ioutil" + + "golang.org/x/tools/go/internal/gcimporter" +) + +// Find returns the name of an object (.o) or archive (.a) file +// containing type information for the specified import path, +// using the workspace layout conventions of go/build. +// If no file was found, an empty filename is returned. +// +// A relative srcDir is interpreted relative to the current working directory. +// +// Find also returns the package's resolved (canonical) import path, +// reflecting the effects of srcDir and vendoring on importPath. +func Find(importPath, srcDir string) (filename, path string) { + return gcimporter.FindPkg(importPath, srcDir) +} + +// NewReader returns a reader for the export data section of an object +// (.o) or archive (.a) file read from r. The new reader may provide +// additional trailing data beyond the end of the export data. +func NewReader(r io.Reader) (io.Reader, error) { + buf := bufio.NewReader(r) + _, err := gcimporter.FindExportData(buf) + // If we ever switch to a zip-like archive format with the ToC + // at the end, we can return the correct portion of export data, + // but for now we must return the entire rest of the file. + return buf, err +} + +// Read reads export data from in, decodes it, and returns type +// information for the package. +// The package name is specified by path. +// File position information is added to fset. +// +// Read may inspect and add to the imports map to ensure that references +// within the export data to other packages are consistent. The caller +// must ensure that imports[path] does not exist, or exists but is +// incomplete (see types.Package.Complete), and Read inserts the +// resulting package into this map entry. +// +// On return, the state of the reader is undefined. +func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) { + data, err := ioutil.ReadAll(in) + if err != nil { + return nil, fmt.Errorf("reading export data for %q: %v", path, err) + } + + if bytes.HasPrefix(data, []byte("!")) { + return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path) + } + + // The App Engine Go runtime v1.6 uses the old export data format. + // TODO(adonovan): delete once v1.7 has been around for a while. + if bytes.HasPrefix(data, []byte("package ")) { + return gcimporter.ImportData(imports, path, path, bytes.NewReader(data)) + } + + // The indexed export format starts with an 'i'; the older + // binary export format starts with a 'c', 'd', or 'v' + // (from "version"). Select appropriate importer. + if len(data) > 0 && data[0] == 'i' { + _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) + return pkg, err + } + + _, pkg, err := gcimporter.BImportData(fset, imports, data, path) + return pkg, err +} + +// Write writes encoded type information for the specified package to out. +// The FileSet provides file position information for named objects. +func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error { + b, err := gcimporter.BExportData(fset, pkg) + if err != nil { + return err + } + _, err = out.Write(b) + return err +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/vendor/golang.org/x/tools/go/gcexportdata/importer.go new file mode 100644 index 00000000000..efe221e7e14 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/importer.go @@ -0,0 +1,73 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gcexportdata + +import ( + "fmt" + "go/token" + "go/types" + "os" +) + +// NewImporter returns a new instance of the types.Importer interface +// that reads type information from export data files written by gc. +// The Importer also satisfies types.ImporterFrom. +// +// Export data files are located using "go build" workspace conventions +// and the build.Default context. +// +// Use this importer instead of go/importer.For("gc", ...) to avoid the +// version-skew problems described in the documentation of this package, +// or to control the FileSet or access the imports map populated during +// package loading. +// +func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom { + return importer{fset, imports} +} + +type importer struct { + fset *token.FileSet + imports map[string]*types.Package +} + +func (imp importer) Import(importPath string) (*types.Package, error) { + return imp.ImportFrom(importPath, "", 0) +} + +func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) { + filename, path := Find(importPath, srcDir) + if filename == "" { + if importPath == "unsafe" { + // Even for unsafe, call Find first in case + // the package was vendored. + return types.Unsafe, nil + } + return nil, fmt.Errorf("can't find import: %s", importPath) + } + + if pkg, ok := imp.imports[path]; ok && pkg.Complete() { + return pkg, nil // cache hit + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + f.Close() + if err != nil { + // add file name to error + err = fmt.Errorf("reading export data: %s: %v", filename, err) + } + }() + + r, err := NewReader(f) + if err != nil { + return nil, err + } + + return Read(r, imp.fset, imp.imports, path) +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/main.go b/vendor/golang.org/x/tools/go/gcexportdata/main.go new file mode 100644 index 00000000000..2713dce64a9 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/main.go @@ -0,0 +1,99 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// The gcexportdata command is a diagnostic tool that displays the +// contents of gc export data files. +package main + +import ( + "flag" + "fmt" + "go/token" + "go/types" + "log" + "os" + + "golang.org/x/tools/go/gcexportdata" + "golang.org/x/tools/go/types/typeutil" +) + +var packageFlag = flag.String("package", "", "alternative package to print") + +func main() { + log.SetPrefix("gcexportdata: ") + log.SetFlags(0) + flag.Usage = func() { + fmt.Fprintln(os.Stderr, "usage: gcexportdata [-package path] file.a") + } + flag.Parse() + if flag.NArg() != 1 { + flag.Usage() + os.Exit(2) + } + filename := flag.Args()[0] + + f, err := os.Open(filename) + if err != nil { + log.Fatal(err) + } + + r, err := gcexportdata.NewReader(f) + if err != nil { + log.Fatalf("%s: %s", filename, err) + } + + // Decode the package. + const primary = "" + imports := make(map[string]*types.Package) + fset := token.NewFileSet() + pkg, err := gcexportdata.Read(r, fset, imports, primary) + if err != nil { + log.Fatalf("%s: %s", filename, err) + } + + // Optionally select an indirectly mentioned package. + if *packageFlag != "" { + pkg = imports[*packageFlag] + if pkg == nil { + fmt.Fprintf(os.Stderr, "export data file %s does not mention %s; has:\n", + filename, *packageFlag) + for p := range imports { + if p != primary { + fmt.Fprintf(os.Stderr, "\t%s\n", p) + } + } + os.Exit(1) + } + } + + // Print all package-level declarations, including non-exported ones. + fmt.Printf("package %s\n", pkg.Name()) + for _, imp := range pkg.Imports() { + fmt.Printf("import %q\n", imp.Path()) + } + qual := func(p *types.Package) string { + if pkg == p { + return "" + } + return p.Name() + } + scope := pkg.Scope() + for _, name := range scope.Names() { + obj := scope.Lookup(name) + fmt.Printf("%s: %s\n", + fset.Position(obj.Pos()), + types.ObjectString(obj, qual)) + + // For types, print each method. + if _, ok := obj.(*types.TypeName); ok { + for _, method := range typeutil.IntuitiveMethodSet(obj.Type(), nil) { + fmt.Printf("%s: %s\n", + fset.Position(method.Obj().Pos()), + types.SelectionString(method, qual)) + } + } + } +} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go new file mode 100644 index 00000000000..0f652ea6fb5 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go @@ -0,0 +1,220 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cgo + +// This file handles cgo preprocessing of files containing `import "C"`. +// +// DESIGN +// +// The approach taken is to run the cgo processor on the package's +// CgoFiles and parse the output, faking the filenames of the +// resulting ASTs so that the synthetic file containing the C types is +// called "C" (e.g. "~/go/src/net/C") and the preprocessed files +// have their original names (e.g. "~/go/src/net/cgo_unix.go"), +// not the names of the actual temporary files. +// +// The advantage of this approach is its fidelity to 'go build'. The +// downside is that the token.Position.Offset for each AST node is +// incorrect, being an offset within the temporary file. Line numbers +// should still be correct because of the //line comments. +// +// The logic of this file is mostly plundered from the 'go build' +// tool, which also invokes the cgo preprocessor. +// +// +// REJECTED ALTERNATIVE +// +// An alternative approach that we explored is to extend go/types' +// Importer mechanism to provide the identity of the importing package +// so that each time `import "C"` appears it resolves to a different +// synthetic package containing just the objects needed in that case. +// The loader would invoke cgo but parse only the cgo_types.go file +// defining the package-level objects, discarding the other files +// resulting from preprocessing. +// +// The benefit of this approach would have been that source-level +// syntax information would correspond exactly to the original cgo +// file, with no preprocessing involved, making source tools like +// godoc, guru, and eg happy. However, the approach was rejected +// due to the additional complexity it would impose on go/types. (It +// made for a beautiful demo, though.) +// +// cgo files, despite their *.go extension, are not legal Go source +// files per the specification since they may refer to unexported +// members of package "C" such as C.int. Also, a function such as +// C.getpwent has in effect two types, one matching its C type and one +// which additionally returns (errno C.int). The cgo preprocessor +// uses name mangling to distinguish these two functions in the +// processed code, but go/types would need to duplicate this logic in +// its handling of function calls, analogous to the treatment of map +// lookups in which y=m[k] and y,ok=m[k] are both legal. + +import ( + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "regexp" + "strings" +) + +// ProcessFiles invokes the cgo preprocessor on bp.CgoFiles, parses +// the output and returns the resulting ASTs. +// +func ProcessFiles(bp *build.Package, fset *token.FileSet, DisplayPath func(path string) string, mode parser.Mode) ([]*ast.File, error) { + tmpdir, err := ioutil.TempDir("", strings.Replace(bp.ImportPath, "/", "_", -1)+"_C") + if err != nil { + return nil, err + } + defer os.RemoveAll(tmpdir) + + pkgdir := bp.Dir + if DisplayPath != nil { + pkgdir = DisplayPath(pkgdir) + } + + cgoFiles, cgoDisplayFiles, err := Run(bp, pkgdir, tmpdir, false) + if err != nil { + return nil, err + } + var files []*ast.File + for i := range cgoFiles { + rd, err := os.Open(cgoFiles[i]) + if err != nil { + return nil, err + } + display := filepath.Join(bp.Dir, cgoDisplayFiles[i]) + f, err := parser.ParseFile(fset, display, rd, mode) + rd.Close() + if err != nil { + return nil, err + } + files = append(files, f) + } + return files, nil +} + +var cgoRe = regexp.MustCompile(`[/\\:]`) + +// Run invokes the cgo preprocessor on bp.CgoFiles and returns two +// lists of files: the resulting processed files (in temporary +// directory tmpdir) and the corresponding names of the unprocessed files. +// +// Run is adapted from (*builder).cgo in +// $GOROOT/src/cmd/go/build.go, but these features are unsupported: +// Objective C, CGOPKGPATH, CGO_FLAGS. +// +// If useabs is set to true, absolute paths of the bp.CgoFiles will be passed in +// to the cgo preprocessor. This in turn will set the // line comments +// referring to those files to use absolute paths. This is needed for +// go/packages using the legacy go list support so it is able to find +// the original files. +func Run(bp *build.Package, pkgdir, tmpdir string, useabs bool) (files, displayFiles []string, err error) { + cgoCPPFLAGS, _, _, _ := cflags(bp, true) + _, cgoexeCFLAGS, _, _ := cflags(bp, false) + + if len(bp.CgoPkgConfig) > 0 { + pcCFLAGS, err := pkgConfigFlags(bp) + if err != nil { + return nil, nil, err + } + cgoCPPFLAGS = append(cgoCPPFLAGS, pcCFLAGS...) + } + + // Allows including _cgo_export.h from .[ch] files in the package. + cgoCPPFLAGS = append(cgoCPPFLAGS, "-I", tmpdir) + + // _cgo_gotypes.go (displayed "C") contains the type definitions. + files = append(files, filepath.Join(tmpdir, "_cgo_gotypes.go")) + displayFiles = append(displayFiles, "C") + for _, fn := range bp.CgoFiles { + // "foo.cgo1.go" (displayed "foo.go") is the processed Go source. + f := cgoRe.ReplaceAllString(fn[:len(fn)-len("go")], "_") + files = append(files, filepath.Join(tmpdir, f+"cgo1.go")) + displayFiles = append(displayFiles, fn) + } + + var cgoflags []string + if bp.Goroot && bp.ImportPath == "runtime/cgo" { + cgoflags = append(cgoflags, "-import_runtime_cgo=false") + } + if bp.Goroot && bp.ImportPath == "runtime/race" || bp.ImportPath == "runtime/cgo" { + cgoflags = append(cgoflags, "-import_syscall=false") + } + + var cgoFiles []string = bp.CgoFiles + if useabs { + cgoFiles = make([]string, len(bp.CgoFiles)) + for i := range cgoFiles { + cgoFiles[i] = filepath.Join(pkgdir, bp.CgoFiles[i]) + } + } + + args := stringList( + "go", "tool", "cgo", "-objdir", tmpdir, cgoflags, "--", + cgoCPPFLAGS, cgoexeCFLAGS, cgoFiles, + ) + if false { + log.Printf("Running cgo for package %q: %s (dir=%s)", bp.ImportPath, args, pkgdir) + } + cmd := exec.Command(args[0], args[1:]...) + cmd.Dir = pkgdir + cmd.Stdout = os.Stderr + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return nil, nil, fmt.Errorf("cgo failed: %s: %s", args, err) + } + + return files, displayFiles, nil +} + +// -- unmodified from 'go build' --------------------------------------- + +// Return the flags to use when invoking the C or C++ compilers, or cgo. +func cflags(p *build.Package, def bool) (cppflags, cflags, cxxflags, ldflags []string) { + var defaults string + if def { + defaults = "-g -O2" + } + + cppflags = stringList(envList("CGO_CPPFLAGS", ""), p.CgoCPPFLAGS) + cflags = stringList(envList("CGO_CFLAGS", defaults), p.CgoCFLAGS) + cxxflags = stringList(envList("CGO_CXXFLAGS", defaults), p.CgoCXXFLAGS) + ldflags = stringList(envList("CGO_LDFLAGS", defaults), p.CgoLDFLAGS) + return +} + +// envList returns the value of the given environment variable broken +// into fields, using the default value when the variable is empty. +func envList(key, def string) []string { + v := os.Getenv(key) + if v == "" { + v = def + } + return strings.Fields(v) +} + +// stringList's arguments should be a sequence of string or []string values. +// stringList flattens them into a single []string. +func stringList(args ...interface{}) []string { + var x []string + for _, arg := range args { + switch arg := arg.(type) { + case []string: + x = append(x, arg...) + case string: + x = append(x, arg) + default: + panic("stringList: invalid argument") + } + } + return x +} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go new file mode 100644 index 00000000000..b5bb95a63e5 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go @@ -0,0 +1,39 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cgo + +import ( + "errors" + "fmt" + "go/build" + "os/exec" + "strings" +) + +// pkgConfig runs pkg-config with the specified arguments and returns the flags it prints. +func pkgConfig(mode string, pkgs []string) (flags []string, err error) { + cmd := exec.Command("pkg-config", append([]string{mode}, pkgs...)...) + out, err := cmd.CombinedOutput() + if err != nil { + s := fmt.Sprintf("%s failed: %v", strings.Join(cmd.Args, " "), err) + if len(out) > 0 { + s = fmt.Sprintf("%s: %s", s, out) + } + return nil, errors.New(s) + } + if len(out) > 0 { + flags = strings.Fields(string(out)) + } + return +} + +// pkgConfigFlags calls pkg-config if needed and returns the cflags +// needed to build the package. +func pkgConfigFlags(p *build.Package) (cflags []string, err error) { + if len(p.CgoPkgConfig) == 0 { + return nil, nil + } + return pkgConfig("--cflags", p.CgoPkgConfig) +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go new file mode 100644 index 00000000000..a807d0aaa28 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go @@ -0,0 +1,852 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Binary package export. +// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go; +// see that file for specification of the format. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/ast" + "go/constant" + "go/token" + "go/types" + "math" + "math/big" + "sort" + "strings" +) + +// If debugFormat is set, each integer and string value is preceded by a marker +// and position information in the encoding. This mechanism permits an importer +// to recognize immediately when it is out of sync. The importer recognizes this +// mode automatically (i.e., it can import export data produced with debugging +// support even if debugFormat is not set at the time of import). This mode will +// lead to massively larger export data (by a factor of 2 to 3) and should only +// be enabled during development and debugging. +// +// NOTE: This flag is the first flag to enable if importing dies because of +// (suspected) format errors, and whenever a change is made to the format. +const debugFormat = false // default: false + +// If trace is set, debugging output is printed to std out. +const trace = false // default: false + +// Current export format version. Increase with each format change. +// Note: The latest binary (non-indexed) export format is at version 6. +// This exporter is still at level 4, but it doesn't matter since +// the binary importer can handle older versions just fine. +// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE +// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMEMTED HERE +// 4: type name objects support type aliases, uses aliasTag +// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used) +// 2: removed unused bool in ODCL export (compiler only) +// 1: header format change (more regular), export package for _ struct fields +// 0: Go1.7 encoding +const exportVersion = 4 + +// trackAllTypes enables cycle tracking for all types, not just named +// types. The existing compiler invariants assume that unnamed types +// that are not completely set up are not used, or else there are spurious +// errors. +// If disabled, only named types are tracked, possibly leading to slightly +// less efficient encoding in rare cases. It also prevents the export of +// some corner-case type declarations (but those are not handled correctly +// with with the textual export format either). +// TODO(gri) enable and remove once issues caused by it are fixed +const trackAllTypes = false + +type exporter struct { + fset *token.FileSet + out bytes.Buffer + + // object -> index maps, indexed in order of serialization + strIndex map[string]int + pkgIndex map[*types.Package]int + typIndex map[types.Type]int + + // position encoding + posInfoFormat bool + prevFile string + prevLine int + + // debugging support + written int // bytes written + indent int // for trace +} + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +func internalErrorf(format string, args ...interface{}) error { + return internalError(fmt.Sprintf(format, args...)) +} + +// BExportData returns binary export data for pkg. +// If no file set is provided, position info will be missing. +func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { + defer func() { + if e := recover(); e != nil { + if ierr, ok := e.(internalError); ok { + err = ierr + return + } + // Not an internal error; panic again. + panic(e) + } + }() + + p := exporter{ + fset: fset, + strIndex: map[string]int{"": 0}, // empty string is mapped to 0 + pkgIndex: make(map[*types.Package]int), + typIndex: make(map[types.Type]int), + posInfoFormat: true, // TODO(gri) might become a flag, eventually + } + + // write version info + // The version string must start with "version %d" where %d is the version + // number. Additional debugging information may follow after a blank; that + // text is ignored by the importer. + p.rawStringln(fmt.Sprintf("version %d", exportVersion)) + var debug string + if debugFormat { + debug = "debug" + } + p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly + p.bool(trackAllTypes) + p.bool(p.posInfoFormat) + + // --- generic export data --- + + // populate type map with predeclared "known" types + for index, typ := range predeclared() { + p.typIndex[typ] = index + } + if len(p.typIndex) != len(predeclared()) { + return nil, internalError("duplicate entries in type map?") + } + + // write package data + p.pkg(pkg, true) + if trace { + p.tracef("\n") + } + + // write objects + objcount := 0 + scope := pkg.Scope() + for _, name := range scope.Names() { + if !ast.IsExported(name) { + continue + } + if trace { + p.tracef("\n") + } + p.obj(scope.Lookup(name)) + objcount++ + } + + // indicate end of list + if trace { + p.tracef("\n") + } + p.tag(endTag) + + // for self-verification only (redundant) + p.int(objcount) + + if trace { + p.tracef("\n") + } + + // --- end of export data --- + + return p.out.Bytes(), nil +} + +func (p *exporter) pkg(pkg *types.Package, emptypath bool) { + if pkg == nil { + panic(internalError("unexpected nil pkg")) + } + + // if we saw the package before, write its index (>= 0) + if i, ok := p.pkgIndex[pkg]; ok { + p.index('P', i) + return + } + + // otherwise, remember the package, write the package tag (< 0) and package data + if trace { + p.tracef("P%d = { ", len(p.pkgIndex)) + defer p.tracef("} ") + } + p.pkgIndex[pkg] = len(p.pkgIndex) + + p.tag(packageTag) + p.string(pkg.Name()) + if emptypath { + p.string("") + } else { + p.string(pkg.Path()) + } +} + +func (p *exporter) obj(obj types.Object) { + switch obj := obj.(type) { + case *types.Const: + p.tag(constTag) + p.pos(obj) + p.qualifiedName(obj) + p.typ(obj.Type()) + p.value(obj.Val()) + + case *types.TypeName: + if obj.IsAlias() { + p.tag(aliasTag) + p.pos(obj) + p.qualifiedName(obj) + } else { + p.tag(typeTag) + } + p.typ(obj.Type()) + + case *types.Var: + p.tag(varTag) + p.pos(obj) + p.qualifiedName(obj) + p.typ(obj.Type()) + + case *types.Func: + p.tag(funcTag) + p.pos(obj) + p.qualifiedName(obj) + sig := obj.Type().(*types.Signature) + p.paramList(sig.Params(), sig.Variadic()) + p.paramList(sig.Results(), false) + + default: + panic(internalErrorf("unexpected object %v (%T)", obj, obj)) + } +} + +func (p *exporter) pos(obj types.Object) { + if !p.posInfoFormat { + return + } + + file, line := p.fileLine(obj) + if file == p.prevFile { + // common case: write line delta + // delta == 0 means different file or no line change + delta := line - p.prevLine + p.int(delta) + if delta == 0 { + p.int(-1) // -1 means no file change + } + } else { + // different file + p.int(0) + // Encode filename as length of common prefix with previous + // filename, followed by (possibly empty) suffix. Filenames + // frequently share path prefixes, so this can save a lot + // of space and make export data size less dependent on file + // path length. The suffix is unlikely to be empty because + // file names tend to end in ".go". + n := commonPrefixLen(p.prevFile, file) + p.int(n) // n >= 0 + p.string(file[n:]) // write suffix only + p.prevFile = file + p.int(line) + } + p.prevLine = line +} + +func (p *exporter) fileLine(obj types.Object) (file string, line int) { + if p.fset != nil { + pos := p.fset.Position(obj.Pos()) + file = pos.Filename + line = pos.Line + } + return +} + +func commonPrefixLen(a, b string) int { + if len(a) > len(b) { + a, b = b, a + } + // len(a) <= len(b) + i := 0 + for i < len(a) && a[i] == b[i] { + i++ + } + return i +} + +func (p *exporter) qualifiedName(obj types.Object) { + p.string(obj.Name()) + p.pkg(obj.Pkg(), false) +} + +func (p *exporter) typ(t types.Type) { + if t == nil { + panic(internalError("nil type")) + } + + // Possible optimization: Anonymous pointer types *T where + // T is a named type are common. We could canonicalize all + // such types *T to a single type PT = *T. This would lead + // to at most one *T entry in typIndex, and all future *T's + // would be encoded as the respective index directly. Would + // save 1 byte (pointerTag) per *T and reduce the typIndex + // size (at the cost of a canonicalization map). We can do + // this later, without encoding format change. + + // if we saw the type before, write its index (>= 0) + if i, ok := p.typIndex[t]; ok { + p.index('T', i) + return + } + + // otherwise, remember the type, write the type tag (< 0) and type data + if trackAllTypes { + if trace { + p.tracef("T%d = {>\n", len(p.typIndex)) + defer p.tracef("<\n} ") + } + p.typIndex[t] = len(p.typIndex) + } + + switch t := t.(type) { + case *types.Named: + if !trackAllTypes { + // if we don't track all types, track named types now + p.typIndex[t] = len(p.typIndex) + } + + p.tag(namedTag) + p.pos(t.Obj()) + p.qualifiedName(t.Obj()) + p.typ(t.Underlying()) + if !types.IsInterface(t) { + p.assocMethods(t) + } + + case *types.Array: + p.tag(arrayTag) + p.int64(t.Len()) + p.typ(t.Elem()) + + case *types.Slice: + p.tag(sliceTag) + p.typ(t.Elem()) + + case *dddSlice: + p.tag(dddTag) + p.typ(t.elem) + + case *types.Struct: + p.tag(structTag) + p.fieldList(t) + + case *types.Pointer: + p.tag(pointerTag) + p.typ(t.Elem()) + + case *types.Signature: + p.tag(signatureTag) + p.paramList(t.Params(), t.Variadic()) + p.paramList(t.Results(), false) + + case *types.Interface: + p.tag(interfaceTag) + p.iface(t) + + case *types.Map: + p.tag(mapTag) + p.typ(t.Key()) + p.typ(t.Elem()) + + case *types.Chan: + p.tag(chanTag) + p.int(int(3 - t.Dir())) // hack + p.typ(t.Elem()) + + default: + panic(internalErrorf("unexpected type %T: %s", t, t)) + } +} + +func (p *exporter) assocMethods(named *types.Named) { + // Sort methods (for determinism). + var methods []*types.Func + for i := 0; i < named.NumMethods(); i++ { + methods = append(methods, named.Method(i)) + } + sort.Sort(methodsByName(methods)) + + p.int(len(methods)) + + if trace && methods != nil { + p.tracef("associated methods {>\n") + } + + for i, m := range methods { + if trace && i > 0 { + p.tracef("\n") + } + + p.pos(m) + name := m.Name() + p.string(name) + if !exported(name) { + p.pkg(m.Pkg(), false) + } + + sig := m.Type().(*types.Signature) + p.paramList(types.NewTuple(sig.Recv()), false) + p.paramList(sig.Params(), sig.Variadic()) + p.paramList(sig.Results(), false) + p.int(0) // dummy value for go:nointerface pragma - ignored by importer + } + + if trace && methods != nil { + p.tracef("<\n} ") + } +} + +type methodsByName []*types.Func + +func (x methodsByName) Len() int { return len(x) } +func (x methodsByName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() } + +func (p *exporter) fieldList(t *types.Struct) { + if trace && t.NumFields() > 0 { + p.tracef("fields {>\n") + defer p.tracef("<\n} ") + } + + p.int(t.NumFields()) + for i := 0; i < t.NumFields(); i++ { + if trace && i > 0 { + p.tracef("\n") + } + p.field(t.Field(i)) + p.string(t.Tag(i)) + } +} + +func (p *exporter) field(f *types.Var) { + if !f.IsField() { + panic(internalError("field expected")) + } + + p.pos(f) + p.fieldName(f) + p.typ(f.Type()) +} + +func (p *exporter) iface(t *types.Interface) { + // TODO(gri): enable importer to load embedded interfaces, + // then emit Embeddeds and ExplicitMethods separately here. + p.int(0) + + n := t.NumMethods() + if trace && n > 0 { + p.tracef("methods {>\n") + defer p.tracef("<\n} ") + } + p.int(n) + for i := 0; i < n; i++ { + if trace && i > 0 { + p.tracef("\n") + } + p.method(t.Method(i)) + } +} + +func (p *exporter) method(m *types.Func) { + sig := m.Type().(*types.Signature) + if sig.Recv() == nil { + panic(internalError("method expected")) + } + + p.pos(m) + p.string(m.Name()) + if m.Name() != "_" && !ast.IsExported(m.Name()) { + p.pkg(m.Pkg(), false) + } + + // interface method; no need to encode receiver. + p.paramList(sig.Params(), sig.Variadic()) + p.paramList(sig.Results(), false) +} + +func (p *exporter) fieldName(f *types.Var) { + name := f.Name() + + if f.Anonymous() { + // anonymous field - we distinguish between 3 cases: + // 1) field name matches base type name and is exported + // 2) field name matches base type name and is not exported + // 3) field name doesn't match base type name (alias name) + bname := basetypeName(f.Type()) + if name == bname { + if ast.IsExported(name) { + name = "" // 1) we don't need to know the field name or package + } else { + name = "?" // 2) use unexported name "?" to force package export + } + } else { + // 3) indicate alias and export name as is + // (this requires an extra "@" but this is a rare case) + p.string("@") + } + } + + p.string(name) + if name != "" && !ast.IsExported(name) { + p.pkg(f.Pkg(), false) + } +} + +func basetypeName(typ types.Type) string { + switch typ := deref(typ).(type) { + case *types.Basic: + return typ.Name() + case *types.Named: + return typ.Obj().Name() + default: + return "" // unnamed type + } +} + +func (p *exporter) paramList(params *types.Tuple, variadic bool) { + // use negative length to indicate unnamed parameters + // (look at the first parameter only since either all + // names are present or all are absent) + n := params.Len() + if n > 0 && params.At(0).Name() == "" { + n = -n + } + p.int(n) + for i := 0; i < params.Len(); i++ { + q := params.At(i) + t := q.Type() + if variadic && i == params.Len()-1 { + t = &dddSlice{t.(*types.Slice).Elem()} + } + p.typ(t) + if n > 0 { + name := q.Name() + p.string(name) + if name != "_" { + p.pkg(q.Pkg(), false) + } + } + p.string("") // no compiler-specific info + } +} + +func (p *exporter) value(x constant.Value) { + if trace { + p.tracef("= ") + } + + switch x.Kind() { + case constant.Bool: + tag := falseTag + if constant.BoolVal(x) { + tag = trueTag + } + p.tag(tag) + + case constant.Int: + if v, exact := constant.Int64Val(x); exact { + // common case: x fits into an int64 - use compact encoding + p.tag(int64Tag) + p.int64(v) + return + } + // uncommon case: large x - use float encoding + // (powers of 2 will be encoded efficiently with exponent) + p.tag(floatTag) + p.float(constant.ToFloat(x)) + + case constant.Float: + p.tag(floatTag) + p.float(x) + + case constant.Complex: + p.tag(complexTag) + p.float(constant.Real(x)) + p.float(constant.Imag(x)) + + case constant.String: + p.tag(stringTag) + p.string(constant.StringVal(x)) + + case constant.Unknown: + // package contains type errors + p.tag(unknownTag) + + default: + panic(internalErrorf("unexpected value %v (%T)", x, x)) + } +} + +func (p *exporter) float(x constant.Value) { + if x.Kind() != constant.Float { + panic(internalErrorf("unexpected constant %v, want float", x)) + } + // extract sign (there is no -0) + sign := constant.Sign(x) + if sign == 0 { + // x == 0 + p.int(0) + return + } + // x != 0 + + var f big.Float + if v, exact := constant.Float64Val(x); exact { + // float64 + f.SetFloat64(v) + } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { + // TODO(gri): add big.Rat accessor to constant.Value. + r := valueToRat(num) + f.SetRat(r.Quo(r, valueToRat(denom))) + } else { + // Value too large to represent as a fraction => inaccessible. + // TODO(gri): add big.Float accessor to constant.Value. + f.SetFloat64(math.MaxFloat64) // FIXME + } + + // extract exponent such that 0.5 <= m < 1.0 + var m big.Float + exp := f.MantExp(&m) + + // extract mantissa as *big.Int + // - set exponent large enough so mant satisfies mant.IsInt() + // - get *big.Int from mant + m.SetMantExp(&m, int(m.MinPrec())) + mant, acc := m.Int(nil) + if acc != big.Exact { + panic(internalError("internal error")) + } + + p.int(sign) + p.int(exp) + p.string(string(mant.Bytes())) +} + +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + +func (p *exporter) bool(b bool) bool { + if trace { + p.tracef("[") + defer p.tracef("= %v] ", b) + } + + x := 0 + if b { + x = 1 + } + p.int(x) + return b +} + +// ---------------------------------------------------------------------------- +// Low-level encoders + +func (p *exporter) index(marker byte, index int) { + if index < 0 { + panic(internalError("invalid index < 0")) + } + if debugFormat { + p.marker('t') + } + if trace { + p.tracef("%c%d ", marker, index) + } + p.rawInt64(int64(index)) +} + +func (p *exporter) tag(tag int) { + if tag >= 0 { + panic(internalError("invalid tag >= 0")) + } + if debugFormat { + p.marker('t') + } + if trace { + p.tracef("%s ", tagString[-tag]) + } + p.rawInt64(int64(tag)) +} + +func (p *exporter) int(x int) { + p.int64(int64(x)) +} + +func (p *exporter) int64(x int64) { + if debugFormat { + p.marker('i') + } + if trace { + p.tracef("%d ", x) + } + p.rawInt64(x) +} + +func (p *exporter) string(s string) { + if debugFormat { + p.marker('s') + } + if trace { + p.tracef("%q ", s) + } + // if we saw the string before, write its index (>= 0) + // (the empty string is mapped to 0) + if i, ok := p.strIndex[s]; ok { + p.rawInt64(int64(i)) + return + } + // otherwise, remember string and write its negative length and bytes + p.strIndex[s] = len(p.strIndex) + p.rawInt64(-int64(len(s))) + for i := 0; i < len(s); i++ { + p.rawByte(s[i]) + } +} + +// marker emits a marker byte and position information which makes +// it easy for a reader to detect if it is "out of sync". Used for +// debugFormat format only. +func (p *exporter) marker(m byte) { + p.rawByte(m) + // Enable this for help tracking down the location + // of an incorrect marker when running in debugFormat. + if false && trace { + p.tracef("#%d ", p.written) + } + p.rawInt64(int64(p.written)) +} + +// rawInt64 should only be used by low-level encoders. +func (p *exporter) rawInt64(x int64) { + var tmp [binary.MaxVarintLen64]byte + n := binary.PutVarint(tmp[:], x) + for i := 0; i < n; i++ { + p.rawByte(tmp[i]) + } +} + +// rawStringln should only be used to emit the initial version string. +func (p *exporter) rawStringln(s string) { + for i := 0; i < len(s); i++ { + p.rawByte(s[i]) + } + p.rawByte('\n') +} + +// rawByte is the bottleneck interface to write to p.out. +// rawByte escapes b as follows (any encoding does that +// hides '$'): +// +// '$' => '|' 'S' +// '|' => '|' '|' +// +// Necessary so other tools can find the end of the +// export data by searching for "$$". +// rawByte should only be used by low-level encoders. +func (p *exporter) rawByte(b byte) { + switch b { + case '$': + // write '$' as '|' 'S' + b = 'S' + fallthrough + case '|': + // write '|' as '|' '|' + p.out.WriteByte('|') + p.written++ + } + p.out.WriteByte(b) + p.written++ +} + +// tracef is like fmt.Printf but it rewrites the format string +// to take care of indentation. +func (p *exporter) tracef(format string, args ...interface{}) { + if strings.ContainsAny(format, "<>\n") { + var buf bytes.Buffer + for i := 0; i < len(format); i++ { + // no need to deal with runes + ch := format[i] + switch ch { + case '>': + p.indent++ + continue + case '<': + p.indent-- + continue + } + buf.WriteByte(ch) + if ch == '\n' { + for j := p.indent; j > 0; j-- { + buf.WriteString(". ") + } + } + } + format = buf.String() + } + fmt.Printf(format, args...) +} + +// Debugging support. +// (tagString is only used when tracing is enabled) +var tagString = [...]string{ + // Packages + -packageTag: "package", + + // Types + -namedTag: "named type", + -arrayTag: "array", + -sliceTag: "slice", + -dddTag: "ddd", + -structTag: "struct", + -pointerTag: "pointer", + -signatureTag: "signature", + -interfaceTag: "interface", + -mapTag: "map", + -chanTag: "chan", + + // Values + -falseTag: "false", + -trueTag: "true", + -int64Tag: "int64", + -floatTag: "float", + -fractionTag: "fraction", + -complexTag: "complex", + -stringTag: "string", + -unknownTag: "unknown", + + // Type aliases + -aliasTag: "alias", +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go new file mode 100644 index 00000000000..e3c31078251 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go @@ -0,0 +1,1036 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go. + +package gcimporter + +import ( + "encoding/binary" + "fmt" + "go/constant" + "go/token" + "go/types" + "sort" + "strconv" + "strings" + "sync" + "unicode" + "unicode/utf8" +) + +type importer struct { + imports map[string]*types.Package + data []byte + importpath string + buf []byte // for reading strings + version int // export format version + + // object lists + strList []string // in order of appearance + pathList []string // in order of appearance + pkgList []*types.Package // in order of appearance + typList []types.Type // in order of appearance + interfaceList []*types.Interface // for delayed completion only + trackAllTypes bool + + // position encoding + posInfoFormat bool + prevFile string + prevLine int + fake fakeFileSet + + // debugging support + debugFormat bool + read int // bytes read +} + +// BImportData imports a package from the serialized package data +// and returns the number of bytes consumed and a reference to the package. +// If the export data version is not recognized or the format is otherwise +// compromised, an error is returned. +func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + // catch panics and return them as errors + const currentVersion = 6 + version := -1 // unknown version + defer func() { + if e := recover(); e != nil { + // Return a (possibly nil or incomplete) package unchanged (see #16088). + if version > currentVersion { + err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) + } else { + err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + } + } + }() + + p := importer{ + imports: imports, + data: data, + importpath: path, + version: version, + strList: []string{""}, // empty string is mapped to 0 + pathList: []string{""}, // empty string is mapped to 0 + fake: fakeFileSet{ + fset: fset, + files: make(map[string]*token.File), + }, + } + + // read version info + var versionstr string + if b := p.rawByte(); b == 'c' || b == 'd' { + // Go1.7 encoding; first byte encodes low-level + // encoding format (compact vs debug). + // For backward-compatibility only (avoid problems with + // old installed packages). Newly compiled packages use + // the extensible format string. + // TODO(gri) Remove this support eventually; after Go1.8. + if b == 'd' { + p.debugFormat = true + } + p.trackAllTypes = p.rawByte() == 'a' + p.posInfoFormat = p.int() != 0 + versionstr = p.string() + if versionstr == "v1" { + version = 0 + } + } else { + // Go1.8 extensible encoding + // read version string and extract version number (ignore anything after the version number) + versionstr = p.rawStringln(b) + if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" { + if v, err := strconv.Atoi(s[1]); err == nil && v > 0 { + version = v + } + } + } + p.version = version + + // read version specific flags - extend as necessary + switch p.version { + // case currentVersion: + // ... + // fallthrough + case currentVersion, 5, 4, 3, 2, 1: + p.debugFormat = p.rawStringln(p.rawByte()) == "debug" + p.trackAllTypes = p.int() != 0 + p.posInfoFormat = p.int() != 0 + case 0: + // Go1.7 encoding format - nothing to do here + default: + errorf("unknown bexport format version %d (%q)", p.version, versionstr) + } + + // --- generic export data --- + + // populate typList with predeclared "known" types + p.typList = append(p.typList, predeclared()...) + + // read package data + pkg = p.pkg() + + // read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go) + objcount := 0 + for { + tag := p.tagOrIndex() + if tag == endTag { + break + } + p.obj(tag) + objcount++ + } + + // self-verification + if count := p.int(); count != objcount { + errorf("got %d objects; want %d", objcount, count) + } + + // ignore compiler-specific import data + + // complete interfaces + // TODO(gri) re-investigate if we still need to do this in a delayed fashion + for _, typ := range p.interfaceList { + typ.Complete() + } + + // record all referenced packages as imports + list := append(([]*types.Package)(nil), p.pkgList[1:]...) + sort.Sort(byPath(list)) + pkg.SetImports(list) + + // package was imported completely and without errors + pkg.MarkComplete() + + return p.read, pkg, nil +} + +func errorf(format string, args ...interface{}) { + panic(fmt.Sprintf(format, args...)) +} + +func (p *importer) pkg() *types.Package { + // if the package was seen before, i is its index (>= 0) + i := p.tagOrIndex() + if i >= 0 { + return p.pkgList[i] + } + + // otherwise, i is the package tag (< 0) + if i != packageTag { + errorf("unexpected package tag %d version %d", i, p.version) + } + + // read package data + name := p.string() + var path string + if p.version >= 5 { + path = p.path() + } else { + path = p.string() + } + if p.version >= 6 { + p.int() // package height; unused by go/types + } + + // we should never see an empty package name + if name == "" { + errorf("empty package name in import") + } + + // an empty path denotes the package we are currently importing; + // it must be the first package we see + if (path == "") != (len(p.pkgList) == 0) { + errorf("package path %q for pkg index %d", path, len(p.pkgList)) + } + + // if the package was imported before, use that one; otherwise create a new one + if path == "" { + path = p.importpath + } + pkg := p.imports[path] + if pkg == nil { + pkg = types.NewPackage(path, name) + p.imports[path] = pkg + } else if pkg.Name() != name { + errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path) + } + p.pkgList = append(p.pkgList, pkg) + + return pkg +} + +// objTag returns the tag value for each object kind. +func objTag(obj types.Object) int { + switch obj.(type) { + case *types.Const: + return constTag + case *types.TypeName: + return typeTag + case *types.Var: + return varTag + case *types.Func: + return funcTag + default: + errorf("unexpected object: %v (%T)", obj, obj) // panics + panic("unreachable") + } +} + +func sameObj(a, b types.Object) bool { + // Because unnamed types are not canonicalized, we cannot simply compare types for + // (pointer) identity. + // Ideally we'd check equality of constant values as well, but this is good enough. + return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type()) +} + +func (p *importer) declare(obj types.Object) { + pkg := obj.Pkg() + if alt := pkg.Scope().Insert(obj); alt != nil { + // This can only trigger if we import a (non-type) object a second time. + // Excluding type aliases, this cannot happen because 1) we only import a package + // once; and b) we ignore compiler-specific export data which may contain + // functions whose inlined function bodies refer to other functions that + // were already imported. + // However, type aliases require reexporting the original type, so we need + // to allow it (see also the comment in cmd/compile/internal/gc/bimport.go, + // method importer.obj, switch case importing functions). + // TODO(gri) review/update this comment once the gc compiler handles type aliases. + if !sameObj(obj, alt) { + errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt) + } + } +} + +func (p *importer) obj(tag int) { + switch tag { + case constTag: + pos := p.pos() + pkg, name := p.qualifiedName() + typ := p.typ(nil, nil) + val := p.value() + p.declare(types.NewConst(pos, pkg, name, typ, val)) + + case aliasTag: + // TODO(gri) verify type alias hookup is correct + pos := p.pos() + pkg, name := p.qualifiedName() + typ := p.typ(nil, nil) + p.declare(types.NewTypeName(pos, pkg, name, typ)) + + case typeTag: + p.typ(nil, nil) + + case varTag: + pos := p.pos() + pkg, name := p.qualifiedName() + typ := p.typ(nil, nil) + p.declare(types.NewVar(pos, pkg, name, typ)) + + case funcTag: + pos := p.pos() + pkg, name := p.qualifiedName() + params, isddd := p.paramList() + result, _ := p.paramList() + sig := types.NewSignature(nil, params, result, isddd) + p.declare(types.NewFunc(pos, pkg, name, sig)) + + default: + errorf("unexpected object tag %d", tag) + } +} + +const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go + +func (p *importer) pos() token.Pos { + if !p.posInfoFormat { + return token.NoPos + } + + file := p.prevFile + line := p.prevLine + delta := p.int() + line += delta + if p.version >= 5 { + if delta == deltaNewFile { + if n := p.int(); n >= 0 { + // file changed + file = p.path() + line = n + } + } + } else { + if delta == 0 { + if n := p.int(); n >= 0 { + // file changed + file = p.prevFile[:n] + p.string() + line = p.int() + } + } + } + p.prevFile = file + p.prevLine = line + + return p.fake.pos(file, line) +} + +// Synthesize a token.Pos +type fakeFileSet struct { + fset *token.FileSet + files map[string]*token.File +} + +func (s *fakeFileSet) pos(file string, line int) token.Pos { + // Since we don't know the set of needed file positions, we + // reserve maxlines positions per file. + const maxlines = 64 * 1024 + f := s.files[file] + if f == nil { + f = s.fset.AddFile(file, -1, maxlines) + s.files[file] = f + // Allocate the fake linebreak indices on first use. + // TODO(adonovan): opt: save ~512KB using a more complex scheme? + fakeLinesOnce.Do(func() { + fakeLines = make([]int, maxlines) + for i := range fakeLines { + fakeLines[i] = i + } + }) + f.SetLines(fakeLines) + } + + if line > maxlines { + line = 1 + } + + // Treat the file as if it contained only newlines + // and column=1: use the line number as the offset. + return f.Pos(line - 1) +} + +var ( + fakeLines []int + fakeLinesOnce sync.Once +) + +func (p *importer) qualifiedName() (pkg *types.Package, name string) { + name = p.string() + pkg = p.pkg() + return +} + +func (p *importer) record(t types.Type) { + p.typList = append(p.typList, t) +} + +// A dddSlice is a types.Type representing ...T parameters. +// It only appears for parameter types and does not escape +// the importer. +type dddSlice struct { + elem types.Type +} + +func (t *dddSlice) Underlying() types.Type { return t } +func (t *dddSlice) String() string { return "..." + t.elem.String() } + +// parent is the package which declared the type; parent == nil means +// the package currently imported. The parent package is needed for +// exported struct fields and interface methods which don't contain +// explicit package information in the export data. +// +// A non-nil tname is used as the "owner" of the result type; i.e., +// the result type is the underlying type of tname. tname is used +// to give interface methods a named receiver type where possible. +func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { + // if the type was seen before, i is its index (>= 0) + i := p.tagOrIndex() + if i >= 0 { + return p.typList[i] + } + + // otherwise, i is the type tag (< 0) + switch i { + case namedTag: + // read type object + pos := p.pos() + parent, name := p.qualifiedName() + scope := parent.Scope() + obj := scope.Lookup(name) + + // if the object doesn't exist yet, create and insert it + if obj == nil { + obj = types.NewTypeName(pos, parent, name, nil) + scope.Insert(obj) + } + + if _, ok := obj.(*types.TypeName); !ok { + errorf("pkg = %s, name = %s => %s", parent, name, obj) + } + + // associate new named type with obj if it doesn't exist yet + t0 := types.NewNamed(obj.(*types.TypeName), nil, nil) + + // but record the existing type, if any + tname := obj.Type().(*types.Named) // tname is either t0 or the existing type + p.record(tname) + + // read underlying type + t0.SetUnderlying(p.typ(parent, t0)) + + // interfaces don't have associated methods + if types.IsInterface(t0) { + return tname + } + + // read associated methods + for i := p.int(); i > 0; i-- { + // TODO(gri) replace this with something closer to fieldName + pos := p.pos() + name := p.string() + if !exported(name) { + p.pkg() + } + + recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver? + params, isddd := p.paramList() + result, _ := p.paramList() + p.int() // go:nointerface pragma - discarded + + sig := types.NewSignature(recv.At(0), params, result, isddd) + t0.AddMethod(types.NewFunc(pos, parent, name, sig)) + } + + return tname + + case arrayTag: + t := new(types.Array) + if p.trackAllTypes { + p.record(t) + } + + n := p.int64() + *t = *types.NewArray(p.typ(parent, nil), n) + return t + + case sliceTag: + t := new(types.Slice) + if p.trackAllTypes { + p.record(t) + } + + *t = *types.NewSlice(p.typ(parent, nil)) + return t + + case dddTag: + t := new(dddSlice) + if p.trackAllTypes { + p.record(t) + } + + t.elem = p.typ(parent, nil) + return t + + case structTag: + t := new(types.Struct) + if p.trackAllTypes { + p.record(t) + } + + *t = *types.NewStruct(p.fieldList(parent)) + return t + + case pointerTag: + t := new(types.Pointer) + if p.trackAllTypes { + p.record(t) + } + + *t = *types.NewPointer(p.typ(parent, nil)) + return t + + case signatureTag: + t := new(types.Signature) + if p.trackAllTypes { + p.record(t) + } + + params, isddd := p.paramList() + result, _ := p.paramList() + *t = *types.NewSignature(nil, params, result, isddd) + return t + + case interfaceTag: + // Create a dummy entry in the type list. This is safe because we + // cannot expect the interface type to appear in a cycle, as any + // such cycle must contain a named type which would have been + // first defined earlier. + // TODO(gri) Is this still true now that we have type aliases? + // See issue #23225. + n := len(p.typList) + if p.trackAllTypes { + p.record(nil) + } + + var embeddeds []types.Type + for n := p.int(); n > 0; n-- { + p.pos() + embeddeds = append(embeddeds, p.typ(parent, nil)) + } + + t := newInterface(p.methodList(parent, tname), embeddeds) + p.interfaceList = append(p.interfaceList, t) + if p.trackAllTypes { + p.typList[n] = t + } + return t + + case mapTag: + t := new(types.Map) + if p.trackAllTypes { + p.record(t) + } + + key := p.typ(parent, nil) + val := p.typ(parent, nil) + *t = *types.NewMap(key, val) + return t + + case chanTag: + t := new(types.Chan) + if p.trackAllTypes { + p.record(t) + } + + dir := chanDir(p.int()) + val := p.typ(parent, nil) + *t = *types.NewChan(dir, val) + return t + + default: + errorf("unexpected type tag %d", i) // panics + panic("unreachable") + } +} + +func chanDir(d int) types.ChanDir { + // tag values must match the constants in cmd/compile/internal/gc/go.go + switch d { + case 1 /* Crecv */ : + return types.RecvOnly + case 2 /* Csend */ : + return types.SendOnly + case 3 /* Cboth */ : + return types.SendRecv + default: + errorf("unexpected channel dir %d", d) + return 0 + } +} + +func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) { + if n := p.int(); n > 0 { + fields = make([]*types.Var, n) + tags = make([]string, n) + for i := range fields { + fields[i], tags[i] = p.field(parent) + } + } + return +} + +func (p *importer) field(parent *types.Package) (*types.Var, string) { + pos := p.pos() + pkg, name, alias := p.fieldName(parent) + typ := p.typ(parent, nil) + tag := p.string() + + anonymous := false + if name == "" { + // anonymous field - typ must be T or *T and T must be a type name + switch typ := deref(typ).(type) { + case *types.Basic: // basic types are named types + pkg = nil // // objects defined in Universe scope have no package + name = typ.Name() + case *types.Named: + name = typ.Obj().Name() + default: + errorf("named base type expected") + } + anonymous = true + } else if alias { + // anonymous field: we have an explicit name because it's an alias + anonymous = true + } + + return types.NewField(pos, pkg, name, typ, anonymous), tag +} + +func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) { + if n := p.int(); n > 0 { + methods = make([]*types.Func, n) + for i := range methods { + methods[i] = p.method(parent, baseType) + } + } + return +} + +func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func { + pos := p.pos() + pkg, name, _ := p.fieldName(parent) + // If we don't have a baseType, use a nil receiver. + // A receiver using the actual interface type (which + // we don't know yet) will be filled in when we call + // types.Interface.Complete. + var recv *types.Var + if baseType != nil { + recv = types.NewVar(token.NoPos, parent, "", baseType) + } + params, isddd := p.paramList() + result, _ := p.paramList() + sig := types.NewSignature(recv, params, result, isddd) + return types.NewFunc(pos, pkg, name, sig) +} + +func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) { + name = p.string() + pkg = parent + if pkg == nil { + // use the imported package instead + pkg = p.pkgList[0] + } + if p.version == 0 && name == "_" { + // version 0 didn't export a package for _ fields + return + } + switch name { + case "": + // 1) field name matches base type name and is exported: nothing to do + case "?": + // 2) field name matches base type name and is not exported: need package + name = "" + pkg = p.pkg() + case "@": + // 3) field name doesn't match type name (alias) + name = p.string() + alias = true + fallthrough + default: + if !exported(name) { + pkg = p.pkg() + } + } + return +} + +func (p *importer) paramList() (*types.Tuple, bool) { + n := p.int() + if n == 0 { + return nil, false + } + // negative length indicates unnamed parameters + named := true + if n < 0 { + n = -n + named = false + } + // n > 0 + params := make([]*types.Var, n) + isddd := false + for i := range params { + params[i], isddd = p.param(named) + } + return types.NewTuple(params...), isddd +} + +func (p *importer) param(named bool) (*types.Var, bool) { + t := p.typ(nil, nil) + td, isddd := t.(*dddSlice) + if isddd { + t = types.NewSlice(td.elem) + } + + var pkg *types.Package + var name string + if named { + name = p.string() + if name == "" { + errorf("expected named parameter") + } + if name != "_" { + pkg = p.pkg() + } + if i := strings.Index(name, "·"); i > 0 { + name = name[:i] // cut off gc-specific parameter numbering + } + } + + // read and discard compiler-specific info + p.string() + + return types.NewVar(token.NoPos, pkg, name, t), isddd +} + +func exported(name string) bool { + ch, _ := utf8.DecodeRuneInString(name) + return unicode.IsUpper(ch) +} + +func (p *importer) value() constant.Value { + switch tag := p.tagOrIndex(); tag { + case falseTag: + return constant.MakeBool(false) + case trueTag: + return constant.MakeBool(true) + case int64Tag: + return constant.MakeInt64(p.int64()) + case floatTag: + return p.float() + case complexTag: + re := p.float() + im := p.float() + return constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + case stringTag: + return constant.MakeString(p.string()) + case unknownTag: + return constant.MakeUnknown() + default: + errorf("unexpected value tag %d", tag) // panics + panic("unreachable") + } +} + +func (p *importer) float() constant.Value { + sign := p.int() + if sign == 0 { + return constant.MakeInt64(0) + } + + exp := p.int() + mant := []byte(p.string()) // big endian + + // remove leading 0's if any + for len(mant) > 0 && mant[0] == 0 { + mant = mant[1:] + } + + // convert to little endian + // TODO(gri) go/constant should have a more direct conversion function + // (e.g., once it supports a big.Float based implementation) + for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 { + mant[i], mant[j] = mant[j], mant[i] + } + + // adjust exponent (constant.MakeFromBytes creates an integer value, + // but mant represents the mantissa bits such that 0.5 <= mant < 1.0) + exp -= len(mant) << 3 + if len(mant) > 0 { + for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 { + exp++ + } + } + + x := constant.MakeFromBytes(mant) + switch { + case exp < 0: + d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) + x = constant.BinaryOp(x, token.QUO, d) + case exp > 0: + x = constant.Shift(x, token.SHL, uint(exp)) + } + + if sign < 0 { + x = constant.UnaryOp(token.SUB, x, 0) + } + return x +} + +// ---------------------------------------------------------------------------- +// Low-level decoders + +func (p *importer) tagOrIndex() int { + if p.debugFormat { + p.marker('t') + } + + return int(p.rawInt64()) +} + +func (p *importer) int() int { + x := p.int64() + if int64(int(x)) != x { + errorf("exported integer too large") + } + return int(x) +} + +func (p *importer) int64() int64 { + if p.debugFormat { + p.marker('i') + } + + return p.rawInt64() +} + +func (p *importer) path() string { + if p.debugFormat { + p.marker('p') + } + // if the path was seen before, i is its index (>= 0) + // (the empty string is at index 0) + i := p.rawInt64() + if i >= 0 { + return p.pathList[i] + } + // otherwise, i is the negative path length (< 0) + a := make([]string, -i) + for n := range a { + a[n] = p.string() + } + s := strings.Join(a, "/") + p.pathList = append(p.pathList, s) + return s +} + +func (p *importer) string() string { + if p.debugFormat { + p.marker('s') + } + // if the string was seen before, i is its index (>= 0) + // (the empty string is at index 0) + i := p.rawInt64() + if i >= 0 { + return p.strList[i] + } + // otherwise, i is the negative string length (< 0) + if n := int(-i); n <= cap(p.buf) { + p.buf = p.buf[:n] + } else { + p.buf = make([]byte, n) + } + for i := range p.buf { + p.buf[i] = p.rawByte() + } + s := string(p.buf) + p.strList = append(p.strList, s) + return s +} + +func (p *importer) marker(want byte) { + if got := p.rawByte(); got != want { + errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read) + } + + pos := p.read + if n := int(p.rawInt64()); n != pos { + errorf("incorrect position: got %d; want %d", n, pos) + } +} + +// rawInt64 should only be used by low-level decoders. +func (p *importer) rawInt64() int64 { + i, err := binary.ReadVarint(p) + if err != nil { + errorf("read error: %v", err) + } + return i +} + +// rawStringln should only be used to read the initial version string. +func (p *importer) rawStringln(b byte) string { + p.buf = p.buf[:0] + for b != '\n' { + p.buf = append(p.buf, b) + b = p.rawByte() + } + return string(p.buf) +} + +// needed for binary.ReadVarint in rawInt64 +func (p *importer) ReadByte() (byte, error) { + return p.rawByte(), nil +} + +// byte is the bottleneck interface for reading p.data. +// It unescapes '|' 'S' to '$' and '|' '|' to '|'. +// rawByte should only be used by low-level decoders. +func (p *importer) rawByte() byte { + b := p.data[0] + r := 1 + if b == '|' { + b = p.data[1] + r = 2 + switch b { + case 'S': + b = '$' + case '|': + // nothing to do + default: + errorf("unexpected escape sequence in export data") + } + } + p.data = p.data[r:] + p.read += r + return b + +} + +// ---------------------------------------------------------------------------- +// Export format + +// Tags. Must be < 0. +const ( + // Objects + packageTag = -(iota + 1) + constTag + typeTag + varTag + funcTag + endTag + + // Types + namedTag + arrayTag + sliceTag + dddTag + structTag + pointerTag + signatureTag + interfaceTag + mapTag + chanTag + + // Values + falseTag + trueTag + int64Tag + floatTag + fractionTag // not used by gc + complexTag + stringTag + nilTag // only used by gc (appears in exported inlined function bodies) + unknownTag // not used by gc (only appears in packages with errors) + + // Type aliases + aliasTag +) + +var predecl []types.Type // initialized lazily + +func predeclared() []types.Type { + if predecl == nil { + // initialize lazily to be sure that all + // elements have been initialized before + predecl = []types.Type{ // basic types + types.Typ[types.Bool], + types.Typ[types.Int], + types.Typ[types.Int8], + types.Typ[types.Int16], + types.Typ[types.Int32], + types.Typ[types.Int64], + types.Typ[types.Uint], + types.Typ[types.Uint8], + types.Typ[types.Uint16], + types.Typ[types.Uint32], + types.Typ[types.Uint64], + types.Typ[types.Uintptr], + types.Typ[types.Float32], + types.Typ[types.Float64], + types.Typ[types.Complex64], + types.Typ[types.Complex128], + types.Typ[types.String], + + // basic type aliases + types.Universe.Lookup("byte").Type(), + types.Universe.Lookup("rune").Type(), + + // error + types.Universe.Lookup("error").Type(), + + // untyped types + types.Typ[types.UntypedBool], + types.Typ[types.UntypedInt], + types.Typ[types.UntypedRune], + types.Typ[types.UntypedFloat], + types.Typ[types.UntypedComplex], + types.Typ[types.UntypedString], + types.Typ[types.UntypedNil], + + // package unsafe + types.Typ[types.UnsafePointer], + + // invalid type + types.Typ[types.Invalid], // only appears in packages with errors + + // used internally by gc; never used by this package or in .a files + anyType{}, + } + } + return predecl +} + +type anyType struct{} + +func (t anyType) Underlying() types.Type { return t } +func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go new file mode 100644 index 00000000000..f33dc5613e7 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go @@ -0,0 +1,93 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go. + +// This file implements FindExportData. + +package gcimporter + +import ( + "bufio" + "fmt" + "io" + "strconv" + "strings" +) + +func readGopackHeader(r *bufio.Reader) (name string, size int, err error) { + // See $GOROOT/include/ar.h. + hdr := make([]byte, 16+12+6+6+8+10+2) + _, err = io.ReadFull(r, hdr) + if err != nil { + return + } + // leave for debugging + if false { + fmt.Printf("header: %s", hdr) + } + s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10])) + size, err = strconv.Atoi(s) + if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' { + err = fmt.Errorf("invalid archive header") + return + } + name = strings.TrimSpace(string(hdr[:16])) + return +} + +// FindExportData positions the reader r at the beginning of the +// export data section of an underlying GC-created object/archive +// file by reading from it. The reader must be positioned at the +// start of the file before calling this function. The hdr result +// is the string before the export data, either "$$" or "$$B". +// +func FindExportData(r *bufio.Reader) (hdr string, err error) { + // Read first line to make sure this is an object file. + line, err := r.ReadSlice('\n') + if err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + + if string(line) == "!\n" { + // Archive file. Scan to __.PKGDEF. + var name string + if name, _, err = readGopackHeader(r); err != nil { + return + } + + // First entry should be __.PKGDEF. + if name != "__.PKGDEF" { + err = fmt.Errorf("go archive is missing __.PKGDEF") + return + } + + // Read first line of __.PKGDEF data, so that line + // is once again the first line of the input. + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + } + + // Now at __.PKGDEF in archive or still at beginning of file. + // Either way, line should begin with "go object ". + if !strings.HasPrefix(string(line), "go object ") { + err = fmt.Errorf("not a Go object file") + return + } + + // Skip over object header to export data. + // Begins after first line starting with $$. + for line[0] != '$' { + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + } + hdr = string(line) + + return +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go new file mode 100644 index 00000000000..9cf186605f6 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go @@ -0,0 +1,1078 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a modified copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go, +// but it also contains the original source-based importer code for Go1.6. +// Once we stop supporting 1.6, we can remove that code. + +// Package gcimporter provides various functions for reading +// gc-generated object files that can be used to implement the +// Importer interface defined by the Go 1.5 standard library package. +package gcimporter // import "golang.org/x/tools/go/internal/gcimporter" + +import ( + "bufio" + "errors" + "fmt" + "go/build" + "go/constant" + "go/token" + "go/types" + "io" + "io/ioutil" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "text/scanner" +) + +// debugging/development support +const debug = false + +var pkgExts = [...]string{".a", ".o"} + +// FindPkg returns the filename and unique package id for an import +// path based on package information provided by build.Import (using +// the build.Default build.Context). A relative srcDir is interpreted +// relative to the current working directory. +// If no file was found, an empty filename is returned. +// +func FindPkg(path, srcDir string) (filename, id string) { + if path == "" { + return + } + + var noext string + switch { + default: + // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" + // Don't require the source files to be present. + if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 + srcDir = abs + } + bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary) + if bp.PkgObj == "" { + id = path // make sure we have an id to print in error message + return + } + noext = strings.TrimSuffix(bp.PkgObj, ".a") + id = bp.ImportPath + + case build.IsLocalImport(path): + // "./x" -> "/this/directory/x.ext", "/this/directory/x" + noext = filepath.Join(srcDir, path) + id = noext + + case filepath.IsAbs(path): + // for completeness only - go/build.Import + // does not support absolute imports + // "/x" -> "/x.ext", "/x" + noext = path + id = path + } + + if false { // for debugging + if path != id { + fmt.Printf("%s -> %s\n", path, id) + } + } + + // try extensions + for _, ext := range pkgExts { + filename = noext + ext + if f, err := os.Stat(filename); err == nil && !f.IsDir() { + return + } + } + + filename = "" // not found + return +} + +// ImportData imports a package by reading the gc-generated export data, +// adds the corresponding package object to the packages map indexed by id, +// and returns the object. +// +// The packages map must contains all packages already imported. The data +// reader position must be the beginning of the export data section. The +// filename is only used in error messages. +// +// If packages[id] contains the completely imported package, that package +// can be used directly, and there is no need to call this function (but +// there is also no harm but for extra time used). +// +func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) { + // support for parser error handling + defer func() { + switch r := recover().(type) { + case nil: + // nothing to do + case importError: + err = r + default: + panic(r) // internal error + } + }() + + var p parser + p.init(filename, id, data, packages) + pkg = p.parseExport() + + return +} + +// Import imports a gc-generated package given its import path and srcDir, adds +// the corresponding package object to the packages map, and returns the object. +// The packages map must contain all packages already imported. +// +func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { + var rc io.ReadCloser + var filename, id string + if lookup != nil { + // With custom lookup specified, assume that caller has + // converted path to a canonical import path for use in the map. + if path == "unsafe" { + return types.Unsafe, nil + } + id = path + + // No need to re-import if the package was imported completely before. + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + f, err := lookup(path) + if err != nil { + return nil, err + } + rc = f + } else { + filename, id = FindPkg(path, srcDir) + if filename == "" { + if path == "unsafe" { + return types.Unsafe, nil + } + return nil, fmt.Errorf("can't find import: %q", id) + } + + // no need to re-import if the package was imported completely before + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + // add file name to error + err = fmt.Errorf("%s: %v", filename, err) + } + }() + rc = f + } + defer rc.Close() + + var hdr string + buf := bufio.NewReader(rc) + if hdr, err = FindExportData(buf); err != nil { + return + } + + switch hdr { + case "$$\n": + // Work-around if we don't have a filename; happens only if lookup != nil. + // Either way, the filename is only needed for importer error messages, so + // this is fine. + if filename == "" { + filename = path + } + return ImportData(packages, filename, id, buf) + + case "$$B\n": + var data []byte + data, err = ioutil.ReadAll(buf) + if err != nil { + break + } + + // TODO(gri): allow clients of go/importer to provide a FileSet. + // Or, define a new standard go/types/gcexportdata package. + fset := token.NewFileSet() + + // The indexed export format starts with an 'i'; the older + // binary export format starts with a 'c', 'd', or 'v' + // (from "version"). Select appropriate importer. + if len(data) > 0 && data[0] == 'i' { + _, pkg, err = IImportData(fset, packages, data[1:], id) + } else { + _, pkg, err = BImportData(fset, packages, data, id) + } + + default: + err = fmt.Errorf("unknown export data header: %q", hdr) + } + + return +} + +// ---------------------------------------------------------------------------- +// Parser + +// TODO(gri) Imported objects don't have position information. +// Ideally use the debug table line info; alternatively +// create some fake position (or the position of the +// import). That way error messages referring to imported +// objects can print meaningful information. + +// parser parses the exports inside a gc compiler-produced +// object/archive file and populates its scope with the results. +type parser struct { + scanner scanner.Scanner + tok rune // current token + lit string // literal string; only valid for Ident, Int, String tokens + id string // package id of imported package + sharedPkgs map[string]*types.Package // package id -> package object (across importer) + localPkgs map[string]*types.Package // package id -> package object (just this package) +} + +func (p *parser) init(filename, id string, src io.Reader, packages map[string]*types.Package) { + p.scanner.Init(src) + p.scanner.Error = func(_ *scanner.Scanner, msg string) { p.error(msg) } + p.scanner.Mode = scanner.ScanIdents | scanner.ScanInts | scanner.ScanChars | scanner.ScanStrings | scanner.ScanComments | scanner.SkipComments + p.scanner.Whitespace = 1<<'\t' | 1<<' ' + p.scanner.Filename = filename // for good error messages + p.next() + p.id = id + p.sharedPkgs = packages + if debug { + // check consistency of packages map + for _, pkg := range packages { + if pkg.Name() == "" { + fmt.Printf("no package name for %s\n", pkg.Path()) + } + } + } +} + +func (p *parser) next() { + p.tok = p.scanner.Scan() + switch p.tok { + case scanner.Ident, scanner.Int, scanner.Char, scanner.String, '·': + p.lit = p.scanner.TokenText() + default: + p.lit = "" + } + if debug { + fmt.Printf("%s: %q -> %q\n", scanner.TokenString(p.tok), p.scanner.TokenText(), p.lit) + } +} + +func declTypeName(pkg *types.Package, name string) *types.TypeName { + scope := pkg.Scope() + if obj := scope.Lookup(name); obj != nil { + return obj.(*types.TypeName) + } + obj := types.NewTypeName(token.NoPos, pkg, name, nil) + // a named type may be referred to before the underlying type + // is known - set it up + types.NewNamed(obj, nil, nil) + scope.Insert(obj) + return obj +} + +// ---------------------------------------------------------------------------- +// Error handling + +// Internal errors are boxed as importErrors. +type importError struct { + pos scanner.Position + err error +} + +func (e importError) Error() string { + return fmt.Sprintf("import error %s (byte offset = %d): %s", e.pos, e.pos.Offset, e.err) +} + +func (p *parser) error(err interface{}) { + if s, ok := err.(string); ok { + err = errors.New(s) + } + // panic with a runtime.Error if err is not an error + panic(importError{p.scanner.Pos(), err.(error)}) +} + +func (p *parser) errorf(format string, args ...interface{}) { + p.error(fmt.Sprintf(format, args...)) +} + +func (p *parser) expect(tok rune) string { + lit := p.lit + if p.tok != tok { + p.errorf("expected %s, got %s (%s)", scanner.TokenString(tok), scanner.TokenString(p.tok), lit) + } + p.next() + return lit +} + +func (p *parser) expectSpecial(tok string) { + sep := 'x' // not white space + i := 0 + for i < len(tok) && p.tok == rune(tok[i]) && sep > ' ' { + sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token + p.next() + i++ + } + if i < len(tok) { + p.errorf("expected %q, got %q", tok, tok[0:i]) + } +} + +func (p *parser) expectKeyword(keyword string) { + lit := p.expect(scanner.Ident) + if lit != keyword { + p.errorf("expected keyword %s, got %q", keyword, lit) + } +} + +// ---------------------------------------------------------------------------- +// Qualified and unqualified names + +// PackageId = string_lit . +// +func (p *parser) parsePackageId() string { + id, err := strconv.Unquote(p.expect(scanner.String)) + if err != nil { + p.error(err) + } + // id == "" stands for the imported package id + // (only known at time of package installation) + if id == "" { + id = p.id + } + return id +} + +// PackageName = ident . +// +func (p *parser) parsePackageName() string { + return p.expect(scanner.Ident) +} + +// dotIdentifier = ( ident | '·' ) { ident | int | '·' } . +func (p *parser) parseDotIdent() string { + ident := "" + if p.tok != scanner.Int { + sep := 'x' // not white space + for (p.tok == scanner.Ident || p.tok == scanner.Int || p.tok == '·') && sep > ' ' { + ident += p.lit + sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token + p.next() + } + } + if ident == "" { + p.expect(scanner.Ident) // use expect() for error handling + } + return ident +} + +// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) . +// +func (p *parser) parseQualifiedName() (id, name string) { + p.expect('@') + id = p.parsePackageId() + p.expect('.') + // Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields. + if p.tok == '?' { + p.next() + } else { + name = p.parseDotIdent() + } + return +} + +// getPkg returns the package for a given id. If the package is +// not found, create the package and add it to the p.localPkgs +// and p.sharedPkgs maps. name is the (expected) name of the +// package. If name == "", the package name is expected to be +// set later via an import clause in the export data. +// +// id identifies a package, usually by a canonical package path like +// "encoding/json" but possibly by a non-canonical import path like +// "./json". +// +func (p *parser) getPkg(id, name string) *types.Package { + // package unsafe is not in the packages maps - handle explicitly + if id == "unsafe" { + return types.Unsafe + } + + pkg := p.localPkgs[id] + if pkg == nil { + // first import of id from this package + pkg = p.sharedPkgs[id] + if pkg == nil { + // first import of id by this importer; + // add (possibly unnamed) pkg to shared packages + pkg = types.NewPackage(id, name) + p.sharedPkgs[id] = pkg + } + // add (possibly unnamed) pkg to local packages + if p.localPkgs == nil { + p.localPkgs = make(map[string]*types.Package) + } + p.localPkgs[id] = pkg + } else if name != "" { + // package exists already and we have an expected package name; + // make sure names match or set package name if necessary + if pname := pkg.Name(); pname == "" { + pkg.SetName(name) + } else if pname != name { + p.errorf("%s package name mismatch: %s (given) vs %s (expected)", id, pname, name) + } + } + return pkg +} + +// parseExportedName is like parseQualifiedName, but +// the package id is resolved to an imported *types.Package. +// +func (p *parser) parseExportedName() (pkg *types.Package, name string) { + id, name := p.parseQualifiedName() + pkg = p.getPkg(id, "") + return +} + +// ---------------------------------------------------------------------------- +// Types + +// BasicType = identifier . +// +func (p *parser) parseBasicType() types.Type { + id := p.expect(scanner.Ident) + obj := types.Universe.Lookup(id) + if obj, ok := obj.(*types.TypeName); ok { + return obj.Type() + } + p.errorf("not a basic type: %s", id) + return nil +} + +// ArrayType = "[" int_lit "]" Type . +// +func (p *parser) parseArrayType(parent *types.Package) types.Type { + // "[" already consumed and lookahead known not to be "]" + lit := p.expect(scanner.Int) + p.expect(']') + elem := p.parseType(parent) + n, err := strconv.ParseInt(lit, 10, 64) + if err != nil { + p.error(err) + } + return types.NewArray(elem, n) +} + +// MapType = "map" "[" Type "]" Type . +// +func (p *parser) parseMapType(parent *types.Package) types.Type { + p.expectKeyword("map") + p.expect('[') + key := p.parseType(parent) + p.expect(']') + elem := p.parseType(parent) + return types.NewMap(key, elem) +} + +// Name = identifier | "?" | QualifiedName . +// +// For unqualified and anonymous names, the returned package is the parent +// package unless parent == nil, in which case the returned package is the +// package being imported. (The parent package is not nil if the the name +// is an unqualified struct field or interface method name belonging to a +// type declared in another package.) +// +// For qualified names, the returned package is nil (and not created if +// it doesn't exist yet) unless materializePkg is set (which creates an +// unnamed package with valid package path). In the latter case, a +// subsequent import clause is expected to provide a name for the package. +// +func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) { + pkg = parent + if pkg == nil { + pkg = p.sharedPkgs[p.id] + } + switch p.tok { + case scanner.Ident: + name = p.lit + p.next() + case '?': + // anonymous + p.next() + case '@': + // exported name prefixed with package path + pkg = nil + var id string + id, name = p.parseQualifiedName() + if materializePkg { + pkg = p.getPkg(id, "") + } + default: + p.error("name expected") + } + return +} + +func deref(typ types.Type) types.Type { + if p, _ := typ.(*types.Pointer); p != nil { + return p.Elem() + } + return typ +} + +// Field = Name Type [ string_lit ] . +// +func (p *parser) parseField(parent *types.Package) (*types.Var, string) { + pkg, name := p.parseName(parent, true) + + if name == "_" { + // Blank fields should be package-qualified because they + // are unexported identifiers, but gc does not qualify them. + // Assuming that the ident belongs to the current package + // causes types to change during re-exporting, leading + // to spurious "can't assign A to B" errors from go/types. + // As a workaround, pretend all blank fields belong + // to the same unique dummy package. + const blankpkg = "<_>" + pkg = p.getPkg(blankpkg, blankpkg) + } + + typ := p.parseType(parent) + anonymous := false + if name == "" { + // anonymous field - typ must be T or *T and T must be a type name + switch typ := deref(typ).(type) { + case *types.Basic: // basic types are named types + pkg = nil // objects defined in Universe scope have no package + name = typ.Name() + case *types.Named: + name = typ.Obj().Name() + default: + p.errorf("anonymous field expected") + } + anonymous = true + } + tag := "" + if p.tok == scanner.String { + s := p.expect(scanner.String) + var err error + tag, err = strconv.Unquote(s) + if err != nil { + p.errorf("invalid struct tag %s: %s", s, err) + } + } + return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag +} + +// StructType = "struct" "{" [ FieldList ] "}" . +// FieldList = Field { ";" Field } . +// +func (p *parser) parseStructType(parent *types.Package) types.Type { + var fields []*types.Var + var tags []string + + p.expectKeyword("struct") + p.expect('{') + for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { + if i > 0 { + p.expect(';') + } + fld, tag := p.parseField(parent) + if tag != "" && tags == nil { + tags = make([]string, i) + } + if tags != nil { + tags = append(tags, tag) + } + fields = append(fields, fld) + } + p.expect('}') + + return types.NewStruct(fields, tags) +} + +// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] . +// +func (p *parser) parseParameter() (par *types.Var, isVariadic bool) { + _, name := p.parseName(nil, false) + // remove gc-specific parameter numbering + if i := strings.Index(name, "·"); i >= 0 { + name = name[:i] + } + if p.tok == '.' { + p.expectSpecial("...") + isVariadic = true + } + typ := p.parseType(nil) + if isVariadic { + typ = types.NewSlice(typ) + } + // ignore argument tag (e.g. "noescape") + if p.tok == scanner.String { + p.next() + } + // TODO(gri) should we provide a package? + par = types.NewVar(token.NoPos, nil, name, typ) + return +} + +// Parameters = "(" [ ParameterList ] ")" . +// ParameterList = { Parameter "," } Parameter . +// +func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) { + p.expect('(') + for p.tok != ')' && p.tok != scanner.EOF { + if len(list) > 0 { + p.expect(',') + } + par, variadic := p.parseParameter() + list = append(list, par) + if variadic { + if isVariadic { + p.error("... not on final argument") + } + isVariadic = true + } + } + p.expect(')') + + return +} + +// Signature = Parameters [ Result ] . +// Result = Type | Parameters . +// +func (p *parser) parseSignature(recv *types.Var) *types.Signature { + params, isVariadic := p.parseParameters() + + // optional result type + var results []*types.Var + if p.tok == '(' { + var variadic bool + results, variadic = p.parseParameters() + if variadic { + p.error("... not permitted on result type") + } + } + + return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic) +} + +// InterfaceType = "interface" "{" [ MethodList ] "}" . +// MethodList = Method { ";" Method } . +// Method = Name Signature . +// +// The methods of embedded interfaces are always "inlined" +// by the compiler and thus embedded interfaces are never +// visible in the export data. +// +func (p *parser) parseInterfaceType(parent *types.Package) types.Type { + var methods []*types.Func + + p.expectKeyword("interface") + p.expect('{') + for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { + if i > 0 { + p.expect(';') + } + pkg, name := p.parseName(parent, true) + sig := p.parseSignature(nil) + methods = append(methods, types.NewFunc(token.NoPos, pkg, name, sig)) + } + p.expect('}') + + // Complete requires the type's embedded interfaces to be fully defined, + // but we do not define any + return types.NewInterface(methods, nil).Complete() +} + +// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type . +// +func (p *parser) parseChanType(parent *types.Package) types.Type { + dir := types.SendRecv + if p.tok == scanner.Ident { + p.expectKeyword("chan") + if p.tok == '<' { + p.expectSpecial("<-") + dir = types.SendOnly + } + } else { + p.expectSpecial("<-") + p.expectKeyword("chan") + dir = types.RecvOnly + } + elem := p.parseType(parent) + return types.NewChan(dir, elem) +} + +// Type = +// BasicType | TypeName | ArrayType | SliceType | StructType | +// PointerType | FuncType | InterfaceType | MapType | ChanType | +// "(" Type ")" . +// +// BasicType = ident . +// TypeName = ExportedName . +// SliceType = "[" "]" Type . +// PointerType = "*" Type . +// FuncType = "func" Signature . +// +func (p *parser) parseType(parent *types.Package) types.Type { + switch p.tok { + case scanner.Ident: + switch p.lit { + default: + return p.parseBasicType() + case "struct": + return p.parseStructType(parent) + case "func": + // FuncType + p.next() + return p.parseSignature(nil) + case "interface": + return p.parseInterfaceType(parent) + case "map": + return p.parseMapType(parent) + case "chan": + return p.parseChanType(parent) + } + case '@': + // TypeName + pkg, name := p.parseExportedName() + return declTypeName(pkg, name).Type() + case '[': + p.next() // look ahead + if p.tok == ']' { + // SliceType + p.next() + return types.NewSlice(p.parseType(parent)) + } + return p.parseArrayType(parent) + case '*': + // PointerType + p.next() + return types.NewPointer(p.parseType(parent)) + case '<': + return p.parseChanType(parent) + case '(': + // "(" Type ")" + p.next() + typ := p.parseType(parent) + p.expect(')') + return typ + } + p.errorf("expected type, got %s (%q)", scanner.TokenString(p.tok), p.lit) + return nil +} + +// ---------------------------------------------------------------------------- +// Declarations + +// ImportDecl = "import" PackageName PackageId . +// +func (p *parser) parseImportDecl() { + p.expectKeyword("import") + name := p.parsePackageName() + p.getPkg(p.parsePackageId(), name) +} + +// int_lit = [ "+" | "-" ] { "0" ... "9" } . +// +func (p *parser) parseInt() string { + s := "" + switch p.tok { + case '-': + s = "-" + p.next() + case '+': + p.next() + } + return s + p.expect(scanner.Int) +} + +// number = int_lit [ "p" int_lit ] . +// +func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) { + // mantissa + mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0) + if mant == nil { + panic("invalid mantissa") + } + + if p.lit == "p" { + // exponent (base 2) + p.next() + exp, err := strconv.ParseInt(p.parseInt(), 10, 0) + if err != nil { + p.error(err) + } + if exp < 0 { + denom := constant.MakeInt64(1) + denom = constant.Shift(denom, token.SHL, uint(-exp)) + typ = types.Typ[types.UntypedFloat] + val = constant.BinaryOp(mant, token.QUO, denom) + return + } + if exp > 0 { + mant = constant.Shift(mant, token.SHL, uint(exp)) + } + typ = types.Typ[types.UntypedFloat] + val = mant + return + } + + typ = types.Typ[types.UntypedInt] + val = mant + return +} + +// ConstDecl = "const" ExportedName [ Type ] "=" Literal . +// Literal = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit . +// bool_lit = "true" | "false" . +// complex_lit = "(" float_lit "+" float_lit "i" ")" . +// rune_lit = "(" int_lit "+" int_lit ")" . +// string_lit = `"` { unicode_char } `"` . +// +func (p *parser) parseConstDecl() { + p.expectKeyword("const") + pkg, name := p.parseExportedName() + + var typ0 types.Type + if p.tok != '=' { + // constant types are never structured - no need for parent type + typ0 = p.parseType(nil) + } + + p.expect('=') + var typ types.Type + var val constant.Value + switch p.tok { + case scanner.Ident: + // bool_lit + if p.lit != "true" && p.lit != "false" { + p.error("expected true or false") + } + typ = types.Typ[types.UntypedBool] + val = constant.MakeBool(p.lit == "true") + p.next() + + case '-', scanner.Int: + // int_lit + typ, val = p.parseNumber() + + case '(': + // complex_lit or rune_lit + p.next() + if p.tok == scanner.Char { + p.next() + p.expect('+') + typ = types.Typ[types.UntypedRune] + _, val = p.parseNumber() + p.expect(')') + break + } + _, re := p.parseNumber() + p.expect('+') + _, im := p.parseNumber() + p.expectKeyword("i") + p.expect(')') + typ = types.Typ[types.UntypedComplex] + val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + + case scanner.Char: + // rune_lit + typ = types.Typ[types.UntypedRune] + val = constant.MakeFromLiteral(p.lit, token.CHAR, 0) + p.next() + + case scanner.String: + // string_lit + typ = types.Typ[types.UntypedString] + val = constant.MakeFromLiteral(p.lit, token.STRING, 0) + p.next() + + default: + p.errorf("expected literal got %s", scanner.TokenString(p.tok)) + } + + if typ0 == nil { + typ0 = typ + } + + pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val)) +} + +// TypeDecl = "type" ExportedName Type . +// +func (p *parser) parseTypeDecl() { + p.expectKeyword("type") + pkg, name := p.parseExportedName() + obj := declTypeName(pkg, name) + + // The type object may have been imported before and thus already + // have a type associated with it. We still need to parse the type + // structure, but throw it away if the object already has a type. + // This ensures that all imports refer to the same type object for + // a given type declaration. + typ := p.parseType(pkg) + + if name := obj.Type().(*types.Named); name.Underlying() == nil { + name.SetUnderlying(typ) + } +} + +// VarDecl = "var" ExportedName Type . +// +func (p *parser) parseVarDecl() { + p.expectKeyword("var") + pkg, name := p.parseExportedName() + typ := p.parseType(pkg) + pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ)) +} + +// Func = Signature [ Body ] . +// Body = "{" ... "}" . +// +func (p *parser) parseFunc(recv *types.Var) *types.Signature { + sig := p.parseSignature(recv) + if p.tok == '{' { + p.next() + for i := 1; i > 0; p.next() { + switch p.tok { + case '{': + i++ + case '}': + i-- + } + } + } + return sig +} + +// MethodDecl = "func" Receiver Name Func . +// Receiver = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" . +// +func (p *parser) parseMethodDecl() { + // "func" already consumed + p.expect('(') + recv, _ := p.parseParameter() // receiver + p.expect(')') + + // determine receiver base type object + base := deref(recv.Type()).(*types.Named) + + // parse method name, signature, and possibly inlined body + _, name := p.parseName(nil, false) + sig := p.parseFunc(recv) + + // methods always belong to the same package as the base type object + pkg := base.Obj().Pkg() + + // add method to type unless type was imported before + // and method exists already + // TODO(gri) This leads to a quadratic algorithm - ok for now because method counts are small. + base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig)) +} + +// FuncDecl = "func" ExportedName Func . +// +func (p *parser) parseFuncDecl() { + // "func" already consumed + pkg, name := p.parseExportedName() + typ := p.parseFunc(nil) + pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ)) +} + +// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" . +// +func (p *parser) parseDecl() { + if p.tok == scanner.Ident { + switch p.lit { + case "import": + p.parseImportDecl() + case "const": + p.parseConstDecl() + case "type": + p.parseTypeDecl() + case "var": + p.parseVarDecl() + case "func": + p.next() // look ahead + if p.tok == '(' { + p.parseMethodDecl() + } else { + p.parseFuncDecl() + } + } + } + p.expect('\n') +} + +// ---------------------------------------------------------------------------- +// Export + +// Export = "PackageClause { Decl } "$$" . +// PackageClause = "package" PackageName [ "safe" ] "\n" . +// +func (p *parser) parseExport() *types.Package { + p.expectKeyword("package") + name := p.parsePackageName() + if p.tok == scanner.Ident && p.lit == "safe" { + // package was compiled with -u option - ignore + p.next() + } + p.expect('\n') + + pkg := p.getPkg(p.id, name) + + for p.tok != '$' && p.tok != scanner.EOF { + p.parseDecl() + } + + if ch := p.scanner.Peek(); p.tok != '$' || ch != '$' { + // don't call next()/expect() since reading past the + // export data may cause scanner errors (e.g. NUL chars) + p.errorf("expected '$$', got %s %c", scanner.TokenString(p.tok), ch) + } + + if n := p.scanner.ErrorCount; n != 0 { + p.errorf("expected no scanner errors, got %d", n) + } + + // Record all locally referenced packages as imports. + var imports []*types.Package + for id, pkg2 := range p.localPkgs { + if pkg2.Name() == "" { + p.errorf("%s package has no name", id) + } + if id == p.id { + continue // avoid self-edge + } + imports = append(imports, pkg2) + } + sort.Sort(byPath(imports)) + pkg.SetImports(imports) + + // package was imported completely and without errors + pkg.MarkComplete() + + return pkg +} + +type byPath []*types.Package + +func (a byPath) Len() int { return len(a) } +func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go new file mode 100644 index 00000000000..be671c79b70 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go @@ -0,0 +1,723 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Indexed binary package export. +// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go; +// see that file for specification of the format. + +// +build go1.11 + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "go/ast" + "go/constant" + "go/token" + "go/types" + "io" + "math/big" + "reflect" + "sort" +) + +// Current indexed export format version. Increase with each format change. +// 0: Go1.11 encoding +const iexportVersion = 0 + +// IExportData returns the binary export data for pkg. +// If no file set is provided, position info will be missing. +func IExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { + defer func() { + if e := recover(); e != nil { + if ierr, ok := e.(internalError); ok { + err = ierr + return + } + // Not an internal error; panic again. + panic(e) + } + }() + + p := iexporter{ + out: bytes.NewBuffer(nil), + fset: fset, + allPkgs: map[*types.Package]bool{}, + stringIndex: map[string]uint64{}, + declIndex: map[types.Object]uint64{}, + typIndex: map[types.Type]uint64{}, + } + + for i, pt := range predeclared() { + p.typIndex[pt] = uint64(i) + } + if len(p.typIndex) > predeclReserved { + panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved)) + } + + // Initialize work queue with exported declarations. + scope := pkg.Scope() + for _, name := range scope.Names() { + if ast.IsExported(name) { + p.pushDecl(scope.Lookup(name)) + } + } + + // Loop until no more work. + for !p.declTodo.empty() { + p.doDecl(p.declTodo.popHead()) + } + + // Append indices to data0 section. + dataLen := uint64(p.data0.Len()) + w := p.newWriter() + w.writeIndex(p.declIndex, pkg) + w.flush() + + // Assemble header. + var hdr intWriter + hdr.WriteByte('i') + hdr.uint64(iexportVersion) + hdr.uint64(uint64(p.strings.Len())) + hdr.uint64(dataLen) + + // Flush output. + io.Copy(p.out, &hdr) + io.Copy(p.out, &p.strings) + io.Copy(p.out, &p.data0) + + return p.out.Bytes(), nil +} + +// writeIndex writes out an object index. mainIndex indicates whether +// we're writing out the main index, which is also read by +// non-compiler tools and includes a complete package description +// (i.e., name and height). +func (w *exportWriter) writeIndex(index map[types.Object]uint64, localpkg *types.Package) { + // Build a map from packages to objects from that package. + pkgObjs := map[*types.Package][]types.Object{} + + // For the main index, make sure to include every package that + // we reference, even if we're not exporting (or reexporting) + // any symbols from it. + pkgObjs[localpkg] = nil + for pkg := range w.p.allPkgs { + pkgObjs[pkg] = nil + } + + for obj := range index { + pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], obj) + } + + var pkgs []*types.Package + for pkg, objs := range pkgObjs { + pkgs = append(pkgs, pkg) + + sort.Slice(objs, func(i, j int) bool { + return objs[i].Name() < objs[j].Name() + }) + } + + sort.Slice(pkgs, func(i, j int) bool { + return pkgs[i].Path() < pkgs[j].Path() + }) + + w.uint64(uint64(len(pkgs))) + for _, pkg := range pkgs { + w.string(pkg.Path()) + w.string(pkg.Name()) + w.uint64(uint64(0)) // package height is not needed for go/types + + objs := pkgObjs[pkg] + w.uint64(uint64(len(objs))) + for _, obj := range objs { + w.string(obj.Name()) + w.uint64(index[obj]) + } + } +} + +type iexporter struct { + fset *token.FileSet + out *bytes.Buffer + + // allPkgs tracks all packages that have been referenced by + // the export data, so we can ensure to include them in the + // main index. + allPkgs map[*types.Package]bool + + declTodo objQueue + + strings intWriter + stringIndex map[string]uint64 + + data0 intWriter + declIndex map[types.Object]uint64 + typIndex map[types.Type]uint64 +} + +// stringOff returns the offset of s within the string section. +// If not already present, it's added to the end. +func (p *iexporter) stringOff(s string) uint64 { + off, ok := p.stringIndex[s] + if !ok { + off = uint64(p.strings.Len()) + p.stringIndex[s] = off + + p.strings.uint64(uint64(len(s))) + p.strings.WriteString(s) + } + return off +} + +// pushDecl adds n to the declaration work queue, if not already present. +func (p *iexporter) pushDecl(obj types.Object) { + // Package unsafe is known to the compiler and predeclared. + assert(obj.Pkg() != types.Unsafe) + + if _, ok := p.declIndex[obj]; ok { + return + } + + p.declIndex[obj] = ^uint64(0) // mark n present in work queue + p.declTodo.pushTail(obj) +} + +// exportWriter handles writing out individual data section chunks. +type exportWriter struct { + p *iexporter + + data intWriter + currPkg *types.Package + prevFile string + prevLine int64 +} + +func (p *iexporter) doDecl(obj types.Object) { + w := p.newWriter() + w.setPkg(obj.Pkg(), false) + + switch obj := obj.(type) { + case *types.Var: + w.tag('V') + w.pos(obj.Pos()) + w.typ(obj.Type(), obj.Pkg()) + + case *types.Func: + sig, _ := obj.Type().(*types.Signature) + if sig.Recv() != nil { + panic(internalErrorf("unexpected method: %v", sig)) + } + w.tag('F') + w.pos(obj.Pos()) + w.signature(sig) + + case *types.Const: + w.tag('C') + w.pos(obj.Pos()) + w.value(obj.Type(), obj.Val()) + + case *types.TypeName: + if obj.IsAlias() { + w.tag('A') + w.pos(obj.Pos()) + w.typ(obj.Type(), obj.Pkg()) + break + } + + // Defined type. + w.tag('T') + w.pos(obj.Pos()) + + underlying := obj.Type().Underlying() + w.typ(underlying, obj.Pkg()) + + t := obj.Type() + if types.IsInterface(t) { + break + } + + named, ok := t.(*types.Named) + if !ok { + panic(internalErrorf("%s is not a defined type", t)) + } + + n := named.NumMethods() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + m := named.Method(i) + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + w.param(sig.Recv()) + w.signature(sig) + } + + default: + panic(internalErrorf("unexpected object: %v", obj)) + } + + p.declIndex[obj] = w.flush() +} + +func (w *exportWriter) tag(tag byte) { + w.data.WriteByte(tag) +} + +func (w *exportWriter) pos(pos token.Pos) { + p := w.p.fset.Position(pos) + file := p.Filename + line := int64(p.Line) + + // When file is the same as the last position (common case), + // we can save a few bytes by delta encoding just the line + // number. + // + // Note: Because data objects may be read out of order (or not + // at all), we can only apply delta encoding within a single + // object. This is handled implicitly by tracking prevFile and + // prevLine as fields of exportWriter. + + if file == w.prevFile { + delta := line - w.prevLine + w.int64(delta) + if delta == deltaNewFile { + w.int64(-1) + } + } else { + w.int64(deltaNewFile) + w.int64(line) // line >= 0 + w.string(file) + w.prevFile = file + } + w.prevLine = line +} + +func (w *exportWriter) pkg(pkg *types.Package) { + // Ensure any referenced packages are declared in the main index. + w.p.allPkgs[pkg] = true + + w.string(pkg.Path()) +} + +func (w *exportWriter) qualifiedIdent(obj types.Object) { + // Ensure any referenced declarations are written out too. + w.p.pushDecl(obj) + + w.string(obj.Name()) + w.pkg(obj.Pkg()) +} + +func (w *exportWriter) typ(t types.Type, pkg *types.Package) { + w.data.uint64(w.p.typOff(t, pkg)) +} + +func (p *iexporter) newWriter() *exportWriter { + return &exportWriter{p: p} +} + +func (w *exportWriter) flush() uint64 { + off := uint64(w.p.data0.Len()) + io.Copy(&w.p.data0, &w.data) + return off +} + +func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 { + off, ok := p.typIndex[t] + if !ok { + w := p.newWriter() + w.doTyp(t, pkg) + off = predeclReserved + w.flush() + p.typIndex[t] = off + } + return off +} + +func (w *exportWriter) startType(k itag) { + w.data.uint64(uint64(k)) +} + +func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { + switch t := t.(type) { + case *types.Named: + w.startType(definedType) + w.qualifiedIdent(t.Obj()) + + case *types.Pointer: + w.startType(pointerType) + w.typ(t.Elem(), pkg) + + case *types.Slice: + w.startType(sliceType) + w.typ(t.Elem(), pkg) + + case *types.Array: + w.startType(arrayType) + w.uint64(uint64(t.Len())) + w.typ(t.Elem(), pkg) + + case *types.Chan: + w.startType(chanType) + // 1 RecvOnly; 2 SendOnly; 3 SendRecv + var dir uint64 + switch t.Dir() { + case types.RecvOnly: + dir = 1 + case types.SendOnly: + dir = 2 + case types.SendRecv: + dir = 3 + } + w.uint64(dir) + w.typ(t.Elem(), pkg) + + case *types.Map: + w.startType(mapType) + w.typ(t.Key(), pkg) + w.typ(t.Elem(), pkg) + + case *types.Signature: + w.startType(signatureType) + w.setPkg(pkg, true) + w.signature(t) + + case *types.Struct: + w.startType(structType) + w.setPkg(pkg, true) + + n := t.NumFields() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + f := t.Field(i) + w.pos(f.Pos()) + w.string(f.Name()) + w.typ(f.Type(), pkg) + w.bool(f.Embedded()) + w.string(t.Tag(i)) // note (or tag) + } + + case *types.Interface: + w.startType(interfaceType) + w.setPkg(pkg, true) + + n := t.NumEmbeddeds() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + f := t.Embedded(i) + w.pos(f.Obj().Pos()) + w.typ(f.Obj().Type(), f.Obj().Pkg()) + } + + n = t.NumExplicitMethods() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + m := t.ExplicitMethod(i) + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + w.signature(sig) + } + + default: + panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t))) + } +} + +func (w *exportWriter) setPkg(pkg *types.Package, write bool) { + if write { + w.pkg(pkg) + } + + w.currPkg = pkg +} + +func (w *exportWriter) signature(sig *types.Signature) { + w.paramList(sig.Params()) + w.paramList(sig.Results()) + if sig.Params().Len() > 0 { + w.bool(sig.Variadic()) + } +} + +func (w *exportWriter) paramList(tup *types.Tuple) { + n := tup.Len() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + w.param(tup.At(i)) + } +} + +func (w *exportWriter) param(obj types.Object) { + w.pos(obj.Pos()) + w.localIdent(obj) + w.typ(obj.Type(), obj.Pkg()) +} + +func (w *exportWriter) value(typ types.Type, v constant.Value) { + w.typ(typ, nil) + + switch v.Kind() { + case constant.Bool: + w.bool(constant.BoolVal(v)) + case constant.Int: + var i big.Int + if i64, exact := constant.Int64Val(v); exact { + i.SetInt64(i64) + } else if ui64, exact := constant.Uint64Val(v); exact { + i.SetUint64(ui64) + } else { + i.SetString(v.ExactString(), 10) + } + w.mpint(&i, typ) + case constant.Float: + f := constantToFloat(v) + w.mpfloat(f, typ) + case constant.Complex: + w.mpfloat(constantToFloat(constant.Real(v)), typ) + w.mpfloat(constantToFloat(constant.Imag(v)), typ) + case constant.String: + w.string(constant.StringVal(v)) + case constant.Unknown: + // package contains type errors + default: + panic(internalErrorf("unexpected value %v (%T)", v, v)) + } +} + +// constantToFloat converts a constant.Value with kind constant.Float to a +// big.Float. +func constantToFloat(x constant.Value) *big.Float { + assert(x.Kind() == constant.Float) + // Use the same floating-point precision (512) as cmd/compile + // (see Mpprec in cmd/compile/internal/gc/mpfloat.go). + const mpprec = 512 + var f big.Float + f.SetPrec(mpprec) + if v, exact := constant.Float64Val(x); exact { + // float64 + f.SetFloat64(v) + } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { + // TODO(gri): add big.Rat accessor to constant.Value. + n := valueToRat(num) + d := valueToRat(denom) + f.SetRat(n.Quo(n, d)) + } else { + // Value too large to represent as a fraction => inaccessible. + // TODO(gri): add big.Float accessor to constant.Value. + _, ok := f.SetString(x.ExactString()) + assert(ok) + } + return &f +} + +// mpint exports a multi-precision integer. +// +// For unsigned types, small values are written out as a single +// byte. Larger values are written out as a length-prefixed big-endian +// byte string, where the length prefix is encoded as its complement. +// For example, bytes 0, 1, and 2 directly represent the integer +// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-, +// 2-, and 3-byte big-endian string follow. +// +// Encoding for signed types use the same general approach as for +// unsigned types, except small values use zig-zag encoding and the +// bottom bit of length prefix byte for large values is reserved as a +// sign bit. +// +// The exact boundary between small and large encodings varies +// according to the maximum number of bytes needed to encode a value +// of type typ. As a special case, 8-bit types are always encoded as a +// single byte. +// +// TODO(mdempsky): Is this level of complexity really worthwhile? +func (w *exportWriter) mpint(x *big.Int, typ types.Type) { + basic, ok := typ.Underlying().(*types.Basic) + if !ok { + panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying())) + } + + signed, maxBytes := intSize(basic) + + negative := x.Sign() < 0 + if !signed && negative { + panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x)) + } + + b := x.Bytes() + if len(b) > 0 && b[0] == 0 { + panic(internalErrorf("leading zeros")) + } + if uint(len(b)) > maxBytes { + panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x)) + } + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + // Check if x can use small value encoding. + if len(b) <= 1 { + var ux uint + if len(b) == 1 { + ux = uint(b[0]) + } + if signed { + ux <<= 1 + if negative { + ux-- + } + } + if ux < maxSmall { + w.data.WriteByte(byte(ux)) + return + } + } + + n := 256 - uint(len(b)) + if signed { + n = 256 - 2*uint(len(b)) + if negative { + n |= 1 + } + } + if n < maxSmall || n >= 256 { + panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n)) + } + + w.data.WriteByte(byte(n)) + w.data.Write(b) +} + +// mpfloat exports a multi-precision floating point number. +// +// The number's value is decomposed into mantissa × 2**exponent, where +// mantissa is an integer. The value is written out as mantissa (as a +// multi-precision integer) and then the exponent, except exponent is +// omitted if mantissa is zero. +func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) { + if f.IsInf() { + panic("infinite constant") + } + + // Break into f = mant × 2**exp, with 0.5 <= mant < 1. + var mant big.Float + exp := int64(f.MantExp(&mant)) + + // Scale so that mant is an integer. + prec := mant.MinPrec() + mant.SetMantExp(&mant, int(prec)) + exp -= int64(prec) + + manti, acc := mant.Int(nil) + if acc != big.Exact { + panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc)) + } + w.mpint(manti, typ) + if manti.Sign() != 0 { + w.int64(exp) + } +} + +func (w *exportWriter) bool(b bool) bool { + var x uint64 + if b { + x = 1 + } + w.uint64(x) + return b +} + +func (w *exportWriter) int64(x int64) { w.data.int64(x) } +func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) } +func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) } + +func (w *exportWriter) localIdent(obj types.Object) { + // Anonymous parameters. + if obj == nil { + w.string("") + return + } + + name := obj.Name() + if name == "_" { + w.string("_") + return + } + + w.string(name) +} + +type intWriter struct { + bytes.Buffer +} + +func (w *intWriter) int64(x int64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutVarint(buf[:], x) + w.Write(buf[:n]) +} + +func (w *intWriter) uint64(x uint64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutUvarint(buf[:], x) + w.Write(buf[:n]) +} + +func assert(cond bool) { + if !cond { + panic("internal error: assertion failed") + } +} + +// The below is copied from go/src/cmd/compile/internal/gc/syntax.go. + +// objQueue is a FIFO queue of types.Object. The zero value of objQueue is +// a ready-to-use empty queue. +type objQueue struct { + ring []types.Object + head, tail int +} + +// empty returns true if q contains no Nodes. +func (q *objQueue) empty() bool { + return q.head == q.tail +} + +// pushTail appends n to the tail of the queue. +func (q *objQueue) pushTail(obj types.Object) { + if len(q.ring) == 0 { + q.ring = make([]types.Object, 16) + } else if q.head+len(q.ring) == q.tail { + // Grow the ring. + nring := make([]types.Object, len(q.ring)*2) + // Copy the old elements. + part := q.ring[q.head%len(q.ring):] + if q.tail-q.head <= len(part) { + part = part[:q.tail-q.head] + copy(nring, part) + } else { + pos := copy(nring, part) + copy(nring[pos:], q.ring[:q.tail%len(q.ring)]) + } + q.ring, q.head, q.tail = nring, 0, q.tail-q.head + } + + q.ring[q.tail%len(q.ring)] = obj + q.tail++ +} + +// popHead pops a node from the head of the queue. It panics if q is empty. +func (q *objQueue) popHead() types.Object { + if q.empty() { + panic("dequeue empty") + } + obj := q.ring[q.head%len(q.ring)] + q.head++ + return obj +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go new file mode 100644 index 00000000000..3cb7ae5b9ea --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go @@ -0,0 +1,606 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Indexed package import. +// See cmd/compile/internal/gc/iexport.go for the export data format. + +// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/constant" + "go/token" + "go/types" + "io" + "sort" +) + +type intReader struct { + *bytes.Reader + path string +} + +func (r *intReader) int64() int64 { + i, err := binary.ReadVarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +func (r *intReader) uint64() uint64 { + i, err := binary.ReadUvarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +const predeclReserved = 32 + +type itag uint64 + +const ( + // Types + definedType itag = iota + pointerType + sliceType + arrayType + chanType + mapType + signatureType + structType + interfaceType +) + +// IImportData imports a package from the serialized package data +// and returns the number of bytes consumed and a reference to the package. +// If the export data version is not recognized or the format is otherwise +// compromised, an error is returned. +func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + const currentVersion = 0 + version := -1 + defer func() { + if e := recover(); e != nil { + if version > currentVersion { + err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) + } else { + err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + } + } + }() + + r := &intReader{bytes.NewReader(data), path} + + version = int(r.uint64()) + switch version { + case currentVersion: + default: + errorf("unknown iexport format version %d", version) + } + + sLen := int64(r.uint64()) + dLen := int64(r.uint64()) + + whence, _ := r.Seek(0, io.SeekCurrent) + stringData := data[whence : whence+sLen] + declData := data[whence+sLen : whence+sLen+dLen] + r.Seek(sLen+dLen, io.SeekCurrent) + + p := iimporter{ + ipath: path, + + stringData: stringData, + stringCache: make(map[uint64]string), + pkgCache: make(map[uint64]*types.Package), + + declData: declData, + pkgIndex: make(map[*types.Package]map[string]uint64), + typCache: make(map[uint64]types.Type), + + fake: fakeFileSet{ + fset: fset, + files: make(map[string]*token.File), + }, + } + + for i, pt := range predeclared() { + p.typCache[uint64(i)] = pt + } + + pkgList := make([]*types.Package, r.uint64()) + for i := range pkgList { + pkgPathOff := r.uint64() + pkgPath := p.stringAt(pkgPathOff) + pkgName := p.stringAt(r.uint64()) + _ = r.uint64() // package height; unused by go/types + + if pkgPath == "" { + pkgPath = path + } + pkg := imports[pkgPath] + if pkg == nil { + pkg = types.NewPackage(pkgPath, pkgName) + imports[pkgPath] = pkg + } else if pkg.Name() != pkgName { + errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) + } + + p.pkgCache[pkgPathOff] = pkg + + nameIndex := make(map[string]uint64) + for nSyms := r.uint64(); nSyms > 0; nSyms-- { + name := p.stringAt(r.uint64()) + nameIndex[name] = r.uint64() + } + + p.pkgIndex[pkg] = nameIndex + pkgList[i] = pkg + } + var localpkg *types.Package + for _, pkg := range pkgList { + if pkg.Path() == path { + localpkg = pkg + } + } + + names := make([]string, 0, len(p.pkgIndex[localpkg])) + for name := range p.pkgIndex[localpkg] { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + p.doDecl(localpkg, name) + } + + for _, typ := range p.interfaceList { + typ.Complete() + } + + // record all referenced packages as imports + list := append(([]*types.Package)(nil), pkgList[1:]...) + sort.Sort(byPath(list)) + localpkg.SetImports(list) + + // package was imported completely and without errors + localpkg.MarkComplete() + + consumed, _ := r.Seek(0, io.SeekCurrent) + return int(consumed), localpkg, nil +} + +type iimporter struct { + ipath string + + stringData []byte + stringCache map[uint64]string + pkgCache map[uint64]*types.Package + + declData []byte + pkgIndex map[*types.Package]map[string]uint64 + typCache map[uint64]types.Type + + fake fakeFileSet + interfaceList []*types.Interface +} + +func (p *iimporter) doDecl(pkg *types.Package, name string) { + // See if we've already imported this declaration. + if obj := pkg.Scope().Lookup(name); obj != nil { + return + } + + off, ok := p.pkgIndex[pkg][name] + if !ok { + errorf("%v.%v not in index", pkg, name) + } + + r := &importReader{p: p, currPkg: pkg} + r.declReader.Reset(p.declData[off:]) + + r.obj(name) +} + +func (p *iimporter) stringAt(off uint64) string { + if s, ok := p.stringCache[off]; ok { + return s + } + + slen, n := binary.Uvarint(p.stringData[off:]) + if n <= 0 { + errorf("varint failed") + } + spos := off + uint64(n) + s := string(p.stringData[spos : spos+slen]) + p.stringCache[off] = s + return s +} + +func (p *iimporter) pkgAt(off uint64) *types.Package { + if pkg, ok := p.pkgCache[off]; ok { + return pkg + } + path := p.stringAt(off) + errorf("missing package %q in %q", path, p.ipath) + return nil +} + +func (p *iimporter) typAt(off uint64, base *types.Named) types.Type { + if t, ok := p.typCache[off]; ok && (base == nil || !isInterface(t)) { + return t + } + + if off < predeclReserved { + errorf("predeclared type missing from cache: %v", off) + } + + r := &importReader{p: p} + r.declReader.Reset(p.declData[off-predeclReserved:]) + t := r.doType(base) + + if base == nil || !isInterface(t) { + p.typCache[off] = t + } + return t +} + +type importReader struct { + p *iimporter + declReader bytes.Reader + currPkg *types.Package + prevFile string + prevLine int64 +} + +func (r *importReader) obj(name string) { + tag := r.byte() + pos := r.pos() + + switch tag { + case 'A': + typ := r.typ() + + r.declare(types.NewTypeName(pos, r.currPkg, name, typ)) + + case 'C': + typ, val := r.value() + + r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) + + case 'F': + sig := r.signature(nil) + + r.declare(types.NewFunc(pos, r.currPkg, name, sig)) + + case 'T': + // Types can be recursive. We need to setup a stub + // declaration before recursing. + obj := types.NewTypeName(pos, r.currPkg, name, nil) + named := types.NewNamed(obj, nil, nil) + r.declare(obj) + + underlying := r.p.typAt(r.uint64(), named).Underlying() + named.SetUnderlying(underlying) + + if !isInterface(underlying) { + for n := r.uint64(); n > 0; n-- { + mpos := r.pos() + mname := r.ident() + recv := r.param() + msig := r.signature(recv) + + named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) + } + } + + case 'V': + typ := r.typ() + + r.declare(types.NewVar(pos, r.currPkg, name, typ)) + + default: + errorf("unexpected tag: %v", tag) + } +} + +func (r *importReader) declare(obj types.Object) { + obj.Pkg().Scope().Insert(obj) +} + +func (r *importReader) value() (typ types.Type, val constant.Value) { + typ = r.typ() + + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { + case types.IsBoolean: + val = constant.MakeBool(r.bool()) + + case types.IsString: + val = constant.MakeString(r.string()) + + case types.IsInteger: + val = r.mpint(b) + + case types.IsFloat: + val = r.mpfloat(b) + + case types.IsComplex: + re := r.mpfloat(b) + im := r.mpfloat(b) + val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + + default: + if b.Kind() == types.Invalid { + val = constant.MakeUnknown() + return + } + errorf("unexpected type %v", typ) // panics + panic("unreachable") + } + + return +} + +func intSize(b *types.Basic) (signed bool, maxBytes uint) { + if (b.Info() & types.IsUntyped) != 0 { + return true, 64 + } + + switch b.Kind() { + case types.Float32, types.Complex64: + return true, 3 + case types.Float64, types.Complex128: + return true, 7 + } + + signed = (b.Info() & types.IsUnsigned) == 0 + switch b.Kind() { + case types.Int8, types.Uint8: + maxBytes = 1 + case types.Int16, types.Uint16: + maxBytes = 2 + case types.Int32, types.Uint32: + maxBytes = 4 + default: + maxBytes = 8 + } + + return +} + +func (r *importReader) mpint(b *types.Basic) constant.Value { + signed, maxBytes := intSize(b) + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + n, _ := r.declReader.ReadByte() + if uint(n) < maxSmall { + v := int64(n) + if signed { + v >>= 1 + if n&1 != 0 { + v = ^v + } + } + return constant.MakeInt64(v) + } + + v := -n + if signed { + v = -(n &^ 1) >> 1 + } + if v < 1 || uint(v) > maxBytes { + errorf("weird decoding: %v, %v => %v", n, signed, v) + } + + buf := make([]byte, v) + io.ReadFull(&r.declReader, buf) + + // convert to little endian + // TODO(gri) go/constant should have a more direct conversion function + // (e.g., once it supports a big.Float based implementation) + for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 { + buf[i], buf[j] = buf[j], buf[i] + } + + x := constant.MakeFromBytes(buf) + if signed && n&1 != 0 { + x = constant.UnaryOp(token.SUB, x, 0) + } + return x +} + +func (r *importReader) mpfloat(b *types.Basic) constant.Value { + x := r.mpint(b) + if constant.Sign(x) == 0 { + return x + } + + exp := r.int64() + switch { + case exp > 0: + x = constant.Shift(x, token.SHL, uint(exp)) + case exp < 0: + d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) + x = constant.BinaryOp(x, token.QUO, d) + } + return x +} + +func (r *importReader) ident() string { + return r.string() +} + +func (r *importReader) qualifiedIdent() (*types.Package, string) { + name := r.string() + pkg := r.pkg() + return pkg, name +} + +func (r *importReader) pos() token.Pos { + delta := r.int64() + if delta != deltaNewFile { + r.prevLine += delta + } else if l := r.int64(); l == -1 { + r.prevLine += deltaNewFile + } else { + r.prevFile = r.string() + r.prevLine = l + } + + if r.prevFile == "" && r.prevLine == 0 { + return token.NoPos + } + + return r.p.fake.pos(r.prevFile, int(r.prevLine)) +} + +func (r *importReader) typ() types.Type { + return r.p.typAt(r.uint64(), nil) +} + +func isInterface(t types.Type) bool { + _, ok := t.(*types.Interface) + return ok +} + +func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) } +func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } + +func (r *importReader) doType(base *types.Named) types.Type { + switch k := r.kind(); k { + default: + errorf("unexpected kind tag in %q: %v", r.p.ipath, k) + return nil + + case definedType: + pkg, name := r.qualifiedIdent() + r.p.doDecl(pkg, name) + return pkg.Scope().Lookup(name).(*types.TypeName).Type() + case pointerType: + return types.NewPointer(r.typ()) + case sliceType: + return types.NewSlice(r.typ()) + case arrayType: + n := r.uint64() + return types.NewArray(r.typ(), int64(n)) + case chanType: + dir := chanDir(int(r.uint64())) + return types.NewChan(dir, r.typ()) + case mapType: + return types.NewMap(r.typ(), r.typ()) + case signatureType: + r.currPkg = r.pkg() + return r.signature(nil) + + case structType: + r.currPkg = r.pkg() + + fields := make([]*types.Var, r.uint64()) + tags := make([]string, len(fields)) + for i := range fields { + fpos := r.pos() + fname := r.ident() + ftyp := r.typ() + emb := r.bool() + tag := r.string() + + fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + tags[i] = tag + } + return types.NewStruct(fields, tags) + + case interfaceType: + r.currPkg = r.pkg() + + embeddeds := make([]types.Type, r.uint64()) + for i := range embeddeds { + _ = r.pos() + embeddeds[i] = r.typ() + } + + methods := make([]*types.Func, r.uint64()) + for i := range methods { + mpos := r.pos() + mname := r.ident() + + // TODO(mdempsky): Matches bimport.go, but I + // don't agree with this. + var recv *types.Var + if base != nil { + recv = types.NewVar(token.NoPos, r.currPkg, "", base) + } + + msig := r.signature(recv) + methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) + } + + typ := newInterface(methods, embeddeds) + r.p.interfaceList = append(r.p.interfaceList, typ) + return typ + } +} + +func (r *importReader) kind() itag { + return itag(r.uint64()) +} + +func (r *importReader) signature(recv *types.Var) *types.Signature { + params := r.paramList() + results := r.paramList() + variadic := params.Len() > 0 && r.bool() + return types.NewSignature(recv, params, results, variadic) +} + +func (r *importReader) paramList() *types.Tuple { + xs := make([]*types.Var, r.uint64()) + for i := range xs { + xs[i] = r.param() + } + return types.NewTuple(xs...) +} + +func (r *importReader) param() *types.Var { + pos := r.pos() + name := r.ident() + typ := r.typ() + return types.NewParam(pos, r.currPkg, name, typ) +} + +func (r *importReader) bool() bool { + return r.uint64() != 0 +} + +func (r *importReader) int64() int64 { + n, err := binary.ReadVarint(&r.declReader) + if err != nil { + errorf("readVarint: %v", err) + } + return n +} + +func (r *importReader) uint64() uint64 { + n, err := binary.ReadUvarint(&r.declReader) + if err != nil { + errorf("readUvarint: %v", err) + } + return n +} + +func (r *importReader) byte() byte { + x, err := r.declReader.ReadByte() + if err != nil { + errorf("declReader.ReadByte: %v", err) + } + return x +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go new file mode 100644 index 00000000000..463f2522714 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go @@ -0,0 +1,21 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + named := make([]*types.Named, len(embeddeds)) + for i, e := range embeddeds { + var ok bool + named[i], ok = e.(*types.Named) + if !ok { + panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") + } + } + return types.NewInterface(methods, named) +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go new file mode 100644 index 00000000000..ab28b95cbb8 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + return types.NewInterfaceType(methods, embeddeds) +} diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go new file mode 100644 index 00000000000..fdc7da05689 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go @@ -0,0 +1,160 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package packagesdriver fetches type sizes for go/packages and go/analysis. +package packagesdriver + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "go/types" + "log" + "os" + "os/exec" + "strings" + "time" +) + +var debug = false + +// GetSizes returns the sizes used by the underlying driver with the given parameters. +func GetSizes(ctx context.Context, buildFlags, env []string, dir string, usesExportData bool) (types.Sizes, error) { + // TODO(matloob): Clean this up. This code is mostly a copy of packages.findExternalDriver. + const toolPrefix = "GOPACKAGESDRIVER=" + tool := "" + for _, env := range env { + if val := strings.TrimPrefix(env, toolPrefix); val != env { + tool = val + } + } + + if tool == "" { + var err error + tool, err = exec.LookPath("gopackagesdriver") + if err != nil { + // We did not find the driver, so use "go list". + tool = "off" + } + } + + if tool == "off" { + return GetSizesGolist(ctx, buildFlags, env, dir, usesExportData) + } + + req, err := json.Marshal(struct { + Command string `json:"command"` + Env []string `json:"env"` + BuildFlags []string `json:"build_flags"` + }{ + Command: "sizes", + Env: env, + BuildFlags: buildFlags, + }) + if err != nil { + return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) + } + + buf := new(bytes.Buffer) + cmd := exec.CommandContext(ctx, tool) + cmd.Dir = dir + cmd.Env = env + cmd.Stdin = bytes.NewReader(req) + cmd.Stdout = buf + cmd.Stderr = new(bytes.Buffer) + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) + } + var response struct { + // Sizes, if not nil, is the types.Sizes to use when type checking. + Sizes *types.StdSizes + } + if err := json.Unmarshal(buf.Bytes(), &response); err != nil { + return nil, err + } + return response.Sizes, nil +} + +func GetSizesGolist(ctx context.Context, buildFlags, env []string, dir string, usesExportData bool) (types.Sizes, error) { + args := []string{"list", "-f", "{{context.GOARCH}} {{context.Compiler}}"} + args = append(args, buildFlags...) + args = append(args, "--", "unsafe") + stdout, err := InvokeGo(ctx, env, dir, usesExportData, args...) + if err != nil { + return nil, err + } + fields := strings.Fields(stdout.String()) + if len(fields) < 2 { + return nil, fmt.Errorf("could not determine GOARCH and Go compiler") + } + goarch := fields[0] + compiler := fields[1] + return types.SizesFor(compiler, goarch), nil +} + +// InvokeGo returns the stdout of a go command invocation. +func InvokeGo(ctx context.Context, env []string, dir string, usesExportData bool, args ...string) (*bytes.Buffer, error) { + if debug { + defer func(start time.Time) { log.Printf("%s for %v", time.Since(start), cmdDebugStr(env, args...)) }(time.Now()) + } + stdout := new(bytes.Buffer) + stderr := new(bytes.Buffer) + cmd := exec.CommandContext(ctx, "go", args...) + // On darwin the cwd gets resolved to the real path, which breaks anything that + // expects the working directory to keep the original path, including the + // go command when dealing with modules. + // The Go stdlib has a special feature where if the cwd and the PWD are the + // same node then it trusts the PWD, so by setting it in the env for the child + // process we fix up all the paths returned by the go command. + cmd.Env = append(append([]string{}, env...), "PWD="+dir) + cmd.Dir = dir + cmd.Stdout = stdout + cmd.Stderr = stderr + if err := cmd.Run(); err != nil { + exitErr, ok := err.(*exec.ExitError) + if !ok { + // Catastrophic error: + // - executable not found + // - context cancellation + return nil, fmt.Errorf("couldn't exec 'go %v': %s %T", args, err, err) + } + + // Export mode entails a build. + // If that build fails, errors appear on stderr + // (despite the -e flag) and the Export field is blank. + // Do not fail in that case. + if !usesExportData { + return nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr) + } + } + + // As of writing, go list -export prints some non-fatal compilation + // errors to stderr, even with -e set. We would prefer that it put + // them in the Package.Error JSON (see https://golang.org/issue/26319). + // In the meantime, there's nowhere good to put them, but they can + // be useful for debugging. Print them if $GOPACKAGESPRINTGOLISTERRORS + // is set. + if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTGOLISTERRORS") != "" { + fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(env, args...), stderr) + } + + // debugging + if false { + fmt.Fprintf(os.Stderr, "%s stdout: <<%s>>\n", cmdDebugStr(env, args...), stdout) + } + + return stdout, nil +} + +func cmdDebugStr(envlist []string, args ...string) string { + env := make(map[string]string) + for _, kv := range envlist { + split := strings.Split(kv, "=") + k, v := split[0], split[1] + env[k] = v + } + + return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v PWD=%v go %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["PWD"], args) +} diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go new file mode 100644 index 00000000000..3799f8ed8be --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/doc.go @@ -0,0 +1,222 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package packages loads Go packages for inspection and analysis. + +The Load function takes as input a list of patterns and return a list of Package +structs describing individual packages matched by those patterns. +The LoadMode controls the amount of detail in the loaded packages. + +Load passes most patterns directly to the underlying build tool, +but all patterns with the prefix "query=", where query is a +non-empty string of letters from [a-z], are reserved and may be +interpreted as query operators. + +Two query operators are currently supported: "file" and "pattern". + +The query "file=path/to/file.go" matches the package or packages enclosing +the Go source file path/to/file.go. For example "file=~/go/src/fmt/print.go" +might return the packages "fmt" and "fmt [fmt.test]". + +The query "pattern=string" causes "string" to be passed directly to +the underlying build tool. In most cases this is unnecessary, +but an application can use Load("pattern=" + x) as an escaping mechanism +to ensure that x is not interpreted as a query operator if it contains '='. + +All other query operators are reserved for future use and currently +cause Load to report an error. + +The Package struct provides basic information about the package, including + + - ID, a unique identifier for the package in the returned set; + - GoFiles, the names of the package's Go source files; + - Imports, a map from source import strings to the Packages they name; + - Types, the type information for the package's exported symbols; + - Syntax, the parsed syntax trees for the package's source code; and + - TypeInfo, the result of a complete type-check of the package syntax trees. + +(See the documentation for type Package for the complete list of fields +and more detailed descriptions.) + +For example, + + Load(nil, "bytes", "unicode...") + +returns four Package structs describing the standard library packages +bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern +can match multiple packages and that a package might be matched by +multiple patterns: in general it is not possible to determine which +packages correspond to which patterns. + +Note that the list returned by Load contains only the packages matched +by the patterns. Their dependencies can be found by walking the import +graph using the Imports fields. + +The Load function can be configured by passing a pointer to a Config as +the first argument. A nil Config is equivalent to the zero Config, which +causes Load to run in LoadFiles mode, collecting minimal information. +See the documentation for type Config for details. + +As noted earlier, the Config.Mode controls the amount of detail +reported about the loaded packages, with each mode returning all the data of the +previous mode with some extra added. See the documentation for type LoadMode +for details. + +Most tools should pass their command-line arguments (after any flags) +uninterpreted to the loader, so that the loader can interpret them +according to the conventions of the underlying build system. +See the Example function for typical usage. + +*/ +package packages // import "golang.org/x/tools/go/packages" + +/* + +Motivation and design considerations + +The new package's design solves problems addressed by two existing +packages: go/build, which locates and describes packages, and +golang.org/x/tools/go/loader, which loads, parses and type-checks them. +The go/build.Package structure encodes too much of the 'go build' way +of organizing projects, leaving us in need of a data type that describes a +package of Go source code independent of the underlying build system. +We wanted something that works equally well with go build and vgo, and +also other build systems such as Bazel and Blaze, making it possible to +construct analysis tools that work in all these environments. +Tools such as errcheck and staticcheck were essentially unavailable to +the Go community at Google, and some of Google's internal tools for Go +are unavailable externally. +This new package provides a uniform way to obtain package metadata by +querying each of these build systems, optionally supporting their +preferred command-line notations for packages, so that tools integrate +neatly with users' build environments. The Metadata query function +executes an external query tool appropriate to the current workspace. + +Loading packages always returns the complete import graph "all the way down", +even if all you want is information about a single package, because the query +mechanisms of all the build systems we currently support ({go,vgo} list, and +blaze/bazel aspect-based query) cannot provide detailed information +about one package without visiting all its dependencies too, so there is +no additional asymptotic cost to providing transitive information. +(This property might not be true of a hypothetical 5th build system.) + +In calls to TypeCheck, all initial packages, and any package that +transitively depends on one of them, must be loaded from source. +Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from +source; D may be loaded from export data, and E may not be loaded at all +(though it's possible that D's export data mentions it, so a +types.Package may be created for it and exposed.) + +The old loader had a feature to suppress type-checking of function +bodies on a per-package basis, primarily intended to reduce the work of +obtaining type information for imported packages. Now that imports are +satisfied by export data, the optimization no longer seems necessary. + +Despite some early attempts, the old loader did not exploit export data, +instead always using the equivalent of WholeProgram mode. This was due +to the complexity of mixing source and export data packages (now +resolved by the upward traversal mentioned above), and because export data +files were nearly always missing or stale. Now that 'go build' supports +caching, all the underlying build systems can guarantee to produce +export data in a reasonable (amortized) time. + +Test "main" packages synthesized by the build system are now reported as +first-class packages, avoiding the need for clients (such as go/ssa) to +reinvent this generation logic. + +One way in which go/packages is simpler than the old loader is in its +treatment of in-package tests. In-package tests are packages that +consist of all the files of the library under test, plus the test files. +The old loader constructed in-package tests by a two-phase process of +mutation called "augmentation": first it would construct and type check +all the ordinary library packages and type-check the packages that +depend on them; then it would add more (test) files to the package and +type-check again. This two-phase approach had four major problems: +1) in processing the tests, the loader modified the library package, + leaving no way for a client application to see both the test + package and the library package; one would mutate into the other. +2) because test files can declare additional methods on types defined in + the library portion of the package, the dispatch of method calls in + the library portion was affected by the presence of the test files. + This should have been a clue that the packages were logically + different. +3) this model of "augmentation" assumed at most one in-package test + per library package, which is true of projects using 'go build', + but not other build systems. +4) because of the two-phase nature of test processing, all packages that + import the library package had to be processed before augmentation, + forcing a "one-shot" API and preventing the client from calling Load + in several times in sequence as is now possible in WholeProgram mode. + (TypeCheck mode has a similar one-shot restriction for a different reason.) + +Early drafts of this package supported "multi-shot" operation. +Although it allowed clients to make a sequence of calls (or concurrent +calls) to Load, building up the graph of Packages incrementally, +it was of marginal value: it complicated the API +(since it allowed some options to vary across calls but not others), +it complicated the implementation, +it cannot be made to work in Types mode, as explained above, +and it was less efficient than making one combined call (when this is possible). +Among the clients we have inspected, none made multiple calls to load +but could not be easily and satisfactorily modified to make only a single call. +However, applications changes may be required. +For example, the ssadump command loads the user-specified packages +and in addition the runtime package. It is tempting to simply append +"runtime" to the user-provided list, but that does not work if the user +specified an ad-hoc package such as [a.go b.go]. +Instead, ssadump no longer requests the runtime package, +but seeks it among the dependencies of the user-specified packages, +and emits an error if it is not found. + +Overlays: The Overlay field in the Config allows providing alternate contents +for Go source files, by providing a mapping from file path to contents. +go/packages will pull in new imports added in overlay files when go/packages +is run in LoadImports mode or greater. +Overlay support for the go list driver isn't complete yet: if the file doesn't +exist on disk, it will only be recognized in an overlay if it is a non-test file +and the package would be reported even without the overlay. + +Questions & Tasks + +- Add GOARCH/GOOS? + They are not portable concepts, but could be made portable. + Our goal has been to allow users to express themselves using the conventions + of the underlying build system: if the build system honors GOARCH + during a build and during a metadata query, then so should + applications built atop that query mechanism. + Conversely, if the target architecture of the build is determined by + command-line flags, the application can pass the relevant + flags through to the build system using a command such as: + myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin" + However, this approach is low-level, unwieldy, and non-portable. + GOOS and GOARCH seem important enough to warrant a dedicated option. + +- How should we handle partial failures such as a mixture of good and + malformed patterns, existing and non-existent packages, successful and + failed builds, import failures, import cycles, and so on, in a call to + Load? + +- Support bazel, blaze, and go1.10 list, not just go1.11 list. + +- Handle (and test) various partial success cases, e.g. + a mixture of good packages and: + invalid patterns + nonexistent packages + empty packages + packages with malformed package or import declarations + unreadable files + import cycles + other parse errors + type errors + Make sure we record errors at the correct place in the graph. + +- Missing packages among initial arguments are not reported. + Return bogus packages for them, like golist does. + +- "undeclared name" errors (for example) are reported out of source file + order. I suspect this is due to the breadth-first resolution now used + by go/types. Is that a bug? Discuss with gri. + +*/ diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go new file mode 100644 index 00000000000..860c3ec156d --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -0,0 +1,79 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file enables an external tool to intercept package requests. +// If the tool is present then its results are used in preference to +// the go list command. + +package packages + +import ( + "bytes" + "encoding/json" + "fmt" + "os/exec" + "strings" +) + +// Driver +type driverRequest struct { + Command string `json "command"` + Mode LoadMode `json:"mode"` + Env []string `json:"env"` + BuildFlags []string `json:"build_flags"` + Tests bool `json:"tests"` + Overlay map[string][]byte `json:"overlay"` +} + +// findExternalDriver returns the file path of a tool that supplies +// the build system package structure, or "" if not found." +// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its +// value, otherwise it searches for a binary named gopackagesdriver on the PATH. +func findExternalDriver(cfg *Config) driver { + const toolPrefix = "GOPACKAGESDRIVER=" + tool := "" + for _, env := range cfg.Env { + if val := strings.TrimPrefix(env, toolPrefix); val != env { + tool = val + } + } + if tool != "" && tool == "off" { + return nil + } + if tool == "" { + var err error + tool, err = exec.LookPath("gopackagesdriver") + if err != nil { + return nil + } + } + return func(cfg *Config, words ...string) (*driverResponse, error) { + req, err := json.Marshal(driverRequest{ + Mode: cfg.Mode, + Env: cfg.Env, + BuildFlags: cfg.BuildFlags, + Tests: cfg.Tests, + Overlay: cfg.Overlay, + }) + if err != nil { + return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) + } + + buf := new(bytes.Buffer) + cmd := exec.CommandContext(cfg.Context, tool, words...) + cmd.Dir = cfg.Dir + cmd.Env = cfg.Env + cmd.Stdin = bytes.NewReader(req) + cmd.Stdout = buf + cmd.Stderr = new(bytes.Buffer) + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) + } + var response driverResponse + if err := json.Unmarshal(buf.Bytes(), &response); err != nil { + return nil, err + } + return &response, nil + } +} diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go new file mode 100644 index 00000000000..2fee7fb1f07 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -0,0 +1,809 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "bytes" + "encoding/json" + "fmt" + "go/types" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/tools/go/internal/packagesdriver" + "golang.org/x/tools/internal/gopathwalk" + "golang.org/x/tools/internal/semver" +) + +// debug controls verbose logging. +var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG")) + +// A goTooOldError reports that the go command +// found by exec.LookPath is too old to use the new go list behavior. +type goTooOldError struct { + error +} + +// responseDeduper wraps a driverResponse, deduplicating its contents. +type responseDeduper struct { + seenRoots map[string]bool + seenPackages map[string]*Package + dr *driverResponse +} + +// init fills in r with a driverResponse. +func (r *responseDeduper) init(dr *driverResponse) { + r.dr = dr + r.seenRoots = map[string]bool{} + r.seenPackages = map[string]*Package{} + for _, pkg := range dr.Packages { + r.seenPackages[pkg.ID] = pkg + } + for _, root := range dr.Roots { + r.seenRoots[root] = true + } +} + +func (r *responseDeduper) addPackage(p *Package) { + if r.seenPackages[p.ID] != nil { + return + } + r.seenPackages[p.ID] = p + r.dr.Packages = append(r.dr.Packages, p) +} + +func (r *responseDeduper) addRoot(id string) { + if r.seenRoots[id] { + return + } + r.seenRoots[id] = true + r.dr.Roots = append(r.dr.Roots, id) +} + +// goListDriver uses the go list command to interpret the patterns and produce +// the build system package structure. +// See driver for more details. +func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { + var sizes types.Sizes + var sizeserr error + var sizeswg sync.WaitGroup + if cfg.Mode >= LoadTypes { + sizeswg.Add(1) + go func() { + sizes, sizeserr = getSizes(cfg) + sizeswg.Done() + }() + } + + // Determine files requested in contains patterns + var containFiles []string + var packagesNamed []string + restPatterns := make([]string, 0, len(patterns)) + // Extract file= and other [querytype]= patterns. Report an error if querytype + // doesn't exist. +extractQueries: + for _, pattern := range patterns { + eqidx := strings.Index(pattern, "=") + if eqidx < 0 { + restPatterns = append(restPatterns, pattern) + } else { + query, value := pattern[:eqidx], pattern[eqidx+len("="):] + switch query { + case "file": + containFiles = append(containFiles, value) + case "pattern": + restPatterns = append(restPatterns, value) + case "iamashamedtousethedisabledqueryname": + packagesNamed = append(packagesNamed, value) + case "": // not a reserved query + restPatterns = append(restPatterns, pattern) + default: + for _, rune := range query { + if rune < 'a' || rune > 'z' { // not a reserved query + restPatterns = append(restPatterns, pattern) + continue extractQueries + } + } + // Reject all other patterns containing "=" + return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern) + } + } + } + + // TODO(matloob): Remove the definition of listfunc and just use golistPackages once go1.12 is released. + var listfunc driver + var isFallback bool + listfunc = func(cfg *Config, words ...string) (*driverResponse, error) { + response, err := golistDriverCurrent(cfg, words...) + if _, ok := err.(goTooOldError); ok { + isFallback = true + listfunc = golistDriverFallback + return listfunc(cfg, words...) + } + listfunc = golistDriverCurrent + return response, err + } + + response := &responseDeduper{} + var err error + + // See if we have any patterns to pass through to go list. Zero initial + // patterns also requires a go list call, since it's the equivalent of + // ".". + if len(restPatterns) > 0 || len(patterns) == 0 { + dr, err := listfunc(cfg, restPatterns...) + if err != nil { + return nil, err + } + response.init(dr) + } else { + response.init(&driverResponse{}) + } + + sizeswg.Wait() + if sizeserr != nil { + return nil, sizeserr + } + // types.SizesFor always returns nil or a *types.StdSizes + response.dr.Sizes, _ = sizes.(*types.StdSizes) + + var containsCandidates []string + + if len(containFiles) != 0 { + if err := runContainsQueries(cfg, listfunc, isFallback, response, containFiles); err != nil { + return nil, err + } + } + + if len(packagesNamed) != 0 { + if err := runNamedQueries(cfg, listfunc, response, packagesNamed); err != nil { + return nil, err + } + } + + modifiedPkgs, needPkgs, err := processGolistOverlay(cfg, response.dr) + if err != nil { + return nil, err + } + if len(containFiles) > 0 { + containsCandidates = append(containsCandidates, modifiedPkgs...) + containsCandidates = append(containsCandidates, needPkgs...) + } + + if len(needPkgs) > 0 { + addNeededOverlayPackages(cfg, listfunc, response, needPkgs) + if err != nil { + return nil, err + } + } + // Check candidate packages for containFiles. + if len(containFiles) > 0 { + for _, id := range containsCandidates { + pkg := response.seenPackages[id] + for _, f := range containFiles { + for _, g := range pkg.GoFiles { + if sameFile(f, g) { + response.addRoot(id) + } + } + } + } + } + + return response.dr, nil +} + +func addNeededOverlayPackages(cfg *Config, driver driver, response *responseDeduper, pkgs []string) error { + dr, err := driver(cfg, pkgs...) + if err != nil { + return err + } + for _, pkg := range dr.Packages { + response.addPackage(pkg) + } + return nil +} + +func runContainsQueries(cfg *Config, driver driver, isFallback bool, response *responseDeduper, queries []string) error { + for _, query := range queries { + // TODO(matloob): Do only one query per directory. + fdir := filepath.Dir(query) + // Pass absolute path of directory to go list so that it knows to treat it as a directory, + // not a package path. + pattern, err := filepath.Abs(fdir) + if err != nil { + return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err) + } + if isFallback { + pattern = "." + cfg.Dir = fdir + } + + dirResponse, err := driver(cfg, pattern) + if err != nil { + return err + } + isRoot := make(map[string]bool, len(dirResponse.Roots)) + for _, root := range dirResponse.Roots { + isRoot[root] = true + } + for _, pkg := range dirResponse.Packages { + // Add any new packages to the main set + // We don't bother to filter packages that will be dropped by the changes of roots, + // that will happen anyway during graph construction outside this function. + // Over-reporting packages is not a problem. + response.addPackage(pkg) + // if the package was not a root one, it cannot have the file + if !isRoot[pkg.ID] { + continue + } + for _, pkgFile := range pkg.GoFiles { + if filepath.Base(query) == filepath.Base(pkgFile) { + response.addRoot(pkg.ID) + break + } + } + } + } + return nil +} + +// modCacheRegexp splits a path in a module cache into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +func runNamedQueries(cfg *Config, driver driver, response *responseDeduper, queries []string) error { + // calling `go env` isn't free; bail out if there's nothing to do. + if len(queries) == 0 { + return nil + } + // Determine which directories are relevant to scan. + roots, modRoot, err := roots(cfg) + if err != nil { + return err + } + + // Scan the selected directories. Simple matches, from GOPATH/GOROOT + // or the local module, can simply be "go list"ed. Matches from the + // module cache need special treatment. + var matchesMu sync.Mutex + var simpleMatches, modCacheMatches []string + add := func(root gopathwalk.Root, dir string) { + // Walk calls this concurrently; protect the result slices. + matchesMu.Lock() + defer matchesMu.Unlock() + + path := dir + if dir != root.Path { + path = dir[len(root.Path)+1:] + } + if pathMatchesQueries(path, queries) { + switch root.Type { + case gopathwalk.RootModuleCache: + modCacheMatches = append(modCacheMatches, path) + case gopathwalk.RootCurrentModule: + // We'd need to read go.mod to find the full + // import path. Relative's easier. + rel, err := filepath.Rel(cfg.Dir, dir) + if err != nil { + // This ought to be impossible, since + // we found dir in the current module. + panic(err) + } + simpleMatches = append(simpleMatches, "./"+rel) + case gopathwalk.RootGOPATH, gopathwalk.RootGOROOT: + simpleMatches = append(simpleMatches, path) + } + } + } + + startWalk := time.Now() + gopathwalk.Walk(roots, add, gopathwalk.Options{ModulesEnabled: modRoot != "", Debug: debug}) + if debug { + log.Printf("%v for walk", time.Since(startWalk)) + } + + // Weird special case: the top-level package in a module will be in + // whatever directory the user checked the repository out into. It's + // more reasonable for that to not match the package name. So, if there + // are any Go files in the mod root, query it just to be safe. + if modRoot != "" { + rel, err := filepath.Rel(cfg.Dir, modRoot) + if err != nil { + panic(err) // See above. + } + + files, err := ioutil.ReadDir(modRoot) + for _, f := range files { + if strings.HasSuffix(f.Name(), ".go") { + simpleMatches = append(simpleMatches, rel) + break + } + } + } + + addResponse := func(r *driverResponse) { + for _, pkg := range r.Packages { + response.addPackage(pkg) + for _, name := range queries { + if pkg.Name == name { + response.addRoot(pkg.ID) + break + } + } + } + } + + if len(simpleMatches) != 0 { + resp, err := driver(cfg, simpleMatches...) + if err != nil { + return err + } + addResponse(resp) + } + + // Module cache matches are tricky. We want to avoid downloading new + // versions of things, so we need to use the ones present in the cache. + // go list doesn't accept version specifiers, so we have to write out a + // temporary module, and do the list in that module. + if len(modCacheMatches) != 0 { + // Collect all the matches, deduplicating by major version + // and preferring the newest. + type modInfo struct { + mod string + major string + } + mods := make(map[modInfo]string) + var imports []string + for _, modPath := range modCacheMatches { + matches := modCacheRegexp.FindStringSubmatch(modPath) + mod, ver := filepath.ToSlash(matches[1]), matches[2] + importPath := filepath.ToSlash(filepath.Join(matches[1], matches[3])) + + major := semver.Major(ver) + if prevVer, ok := mods[modInfo{mod, major}]; !ok || semver.Compare(ver, prevVer) > 0 { + mods[modInfo{mod, major}] = ver + } + + imports = append(imports, importPath) + } + + // Build the temporary module. + var gomod bytes.Buffer + gomod.WriteString("module modquery\nrequire (\n") + for mod, version := range mods { + gomod.WriteString("\t" + mod.mod + " " + version + "\n") + } + gomod.WriteString(")\n") + + tmpCfg := *cfg + + // We're only trying to look at stuff in the module cache, so + // disable the network. This should speed things up, and has + // prevented errors in at least one case, #28518. + tmpCfg.Env = append(append([]string{"GOPROXY=off"}, cfg.Env...)) + + var err error + tmpCfg.Dir, err = ioutil.TempDir("", "gopackages-modquery") + if err != nil { + return err + } + defer os.RemoveAll(tmpCfg.Dir) + + if err := ioutil.WriteFile(filepath.Join(tmpCfg.Dir, "go.mod"), gomod.Bytes(), 0777); err != nil { + return fmt.Errorf("writing go.mod for module cache query: %v", err) + } + + // Run the query, using the import paths calculated from the matches above. + resp, err := driver(&tmpCfg, imports...) + if err != nil { + return fmt.Errorf("querying module cache matches: %v", err) + } + addResponse(resp) + } + + return nil +} + +func getSizes(cfg *Config) (types.Sizes, error) { + return packagesdriver.GetSizesGolist(cfg.Context, cfg.BuildFlags, cfg.Env, cfg.Dir, usesExportData(cfg)) +} + +// roots selects the appropriate paths to walk based on the passed-in configuration, +// particularly the environment and the presence of a go.mod in cfg.Dir's parents. +func roots(cfg *Config) ([]gopathwalk.Root, string, error) { + stdout, err := invokeGo(cfg, "env", "GOROOT", "GOPATH", "GOMOD") + if err != nil { + return nil, "", err + } + + fields := strings.Split(stdout.String(), "\n") + if len(fields) != 4 || len(fields[3]) != 0 { + return nil, "", fmt.Errorf("go env returned unexpected output: %q", stdout.String()) + } + goroot, gopath, gomod := fields[0], filepath.SplitList(fields[1]), fields[2] + var modDir string + if gomod != "" { + modDir = filepath.Dir(gomod) + } + + var roots []gopathwalk.Root + // Always add GOROOT. + roots = append(roots, gopathwalk.Root{filepath.Join(goroot, "/src"), gopathwalk.RootGOROOT}) + // If modules are enabled, scan the module dir. + if modDir != "" { + roots = append(roots, gopathwalk.Root{modDir, gopathwalk.RootCurrentModule}) + } + // Add either GOPATH/src or GOPATH/pkg/mod, depending on module mode. + for _, p := range gopath { + if modDir != "" { + roots = append(roots, gopathwalk.Root{filepath.Join(p, "/pkg/mod"), gopathwalk.RootModuleCache}) + } else { + roots = append(roots, gopathwalk.Root{filepath.Join(p, "/src"), gopathwalk.RootGOPATH}) + } + } + + return roots, modDir, nil +} + +// These functions were copied from goimports. See further documentation there. + +// pathMatchesQueries is adapted from pkgIsCandidate. +// TODO: is it reasonable to do Contains here, rather than an exact match on a path component? +func pathMatchesQueries(path string, queries []string) bool { + lastTwo := lastTwoComponents(path) + for _, query := range queries { + if strings.Contains(lastTwo, query) { + return true + } + if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(query) { + lastTwo = lowerASCIIAndRemoveHyphen(lastTwo) + if strings.Contains(lastTwo, query) { + return true + } + } + } + return false +} + +// lastTwoComponents returns at most the last two path components +// of v, using either / or \ as the path separator. +func lastTwoComponents(v string) string { + nslash := 0 + for i := len(v) - 1; i >= 0; i-- { + if v[i] == '/' || v[i] == '\\' { + nslash++ + if nslash == 2 { + return v[i:] + } + } + } + return v +} + +func hasHyphenOrUpperASCII(s string) bool { + for i := 0; i < len(s); i++ { + b := s[i] + if b == '-' || ('A' <= b && b <= 'Z') { + return true + } + } + return false +} + +func lowerASCIIAndRemoveHyphen(s string) (ret string) { + buf := make([]byte, 0, len(s)) + for i := 0; i < len(s); i++ { + b := s[i] + switch { + case b == '-': + continue + case 'A' <= b && b <= 'Z': + buf = append(buf, b+('a'-'A')) + default: + buf = append(buf, b) + } + } + return string(buf) +} + +// Fields must match go list; +// see $GOROOT/src/cmd/go/internal/load/pkg.go. +type jsonPackage struct { + ImportPath string + Dir string + Name string + Export string + GoFiles []string + CompiledGoFiles []string + CFiles []string + CgoFiles []string + CXXFiles []string + MFiles []string + HFiles []string + FFiles []string + SFiles []string + SwigFiles []string + SwigCXXFiles []string + SysoFiles []string + Imports []string + ImportMap map[string]string + Deps []string + TestGoFiles []string + TestImports []string + XTestGoFiles []string + XTestImports []string + ForTest string // q in a "p [q.test]" package, else "" + DepOnly bool + + Error *jsonPackageError +} + +type jsonPackageError struct { + ImportStack []string + Pos string + Err string +} + +func otherFiles(p *jsonPackage) [][]string { + return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles} +} + +// golistDriverCurrent uses the "go list" command to expand the +// pattern words and return metadata for the specified packages. +// dir may be "" and env may be nil, as per os/exec.Command. +func golistDriverCurrent(cfg *Config, words ...string) (*driverResponse, error) { + // go list uses the following identifiers in ImportPath and Imports: + // + // "p" -- importable package or main (command) + // "q.test" -- q's test executable + // "p [q.test]" -- variant of p as built for q's test executable + // "q_test [q.test]" -- q's external test package + // + // The packages p that are built differently for a test q.test + // are q itself, plus any helpers used by the external test q_test, + // typically including "testing" and all its dependencies. + + // Run "go list" for complete + // information on the specified packages. + buf, err := invokeGo(cfg, golistargs(cfg, words)...) + if err != nil { + return nil, err + } + seen := make(map[string]*jsonPackage) + // Decode the JSON and convert it to Package form. + var response driverResponse + for dec := json.NewDecoder(buf); dec.More(); { + p := new(jsonPackage) + if err := dec.Decode(p); err != nil { + return nil, fmt.Errorf("JSON decoding failed: %v", err) + } + + if p.ImportPath == "" { + // The documentation for go list says that “[e]rroneous packages will have + // a non-empty ImportPathâ€. If for some reason it comes back empty, we + // prefer to error out rather than silently discarding data or handing + // back a package without any way to refer to it. + if p.Error != nil { + return nil, Error{ + Pos: p.Error.Pos, + Msg: p.Error.Err, + } + } + return nil, fmt.Errorf("package missing import path: %+v", p) + } + + if old, found := seen[p.ImportPath]; found { + if !reflect.DeepEqual(p, old) { + return nil, fmt.Errorf("go list repeated package %v with different values", p.ImportPath) + } + // skip the duplicate + continue + } + seen[p.ImportPath] = p + + pkg := &Package{ + Name: p.Name, + ID: p.ImportPath, + GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), + CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles), + OtherFiles: absJoin(p.Dir, otherFiles(p)...), + } + + // Workaround for https://golang.org/issue/28749. + // TODO(adonovan): delete before go1.12 release. + out := pkg.CompiledGoFiles[:0] + for _, f := range pkg.CompiledGoFiles { + if strings.HasSuffix(f, ".s") { + continue + } + out = append(out, f) + } + pkg.CompiledGoFiles = out + + // Extract the PkgPath from the package's ID. + if i := strings.IndexByte(pkg.ID, ' '); i >= 0 { + pkg.PkgPath = pkg.ID[:i] + } else { + pkg.PkgPath = pkg.ID + } + + if pkg.PkgPath == "unsafe" { + pkg.GoFiles = nil // ignore fake unsafe.go file + } + + // Assume go list emits only absolute paths for Dir. + if p.Dir != "" && !filepath.IsAbs(p.Dir) { + log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir) + } + + if p.Export != "" && !filepath.IsAbs(p.Export) { + pkg.ExportFile = filepath.Join(p.Dir, p.Export) + } else { + pkg.ExportFile = p.Export + } + + // imports + // + // Imports contains the IDs of all imported packages. + // ImportsMap records (path, ID) only where they differ. + ids := make(map[string]bool) + for _, id := range p.Imports { + ids[id] = true + } + pkg.Imports = make(map[string]*Package) + for path, id := range p.ImportMap { + pkg.Imports[path] = &Package{ID: id} // non-identity import + delete(ids, id) + } + for id := range ids { + if id == "C" { + continue + } + + pkg.Imports[id] = &Package{ID: id} // identity import + } + if !p.DepOnly { + response.Roots = append(response.Roots, pkg.ID) + } + + // Work around for pre-go.1.11 versions of go list. + // TODO(matloob): they should be handled by the fallback. + // Can we delete this? + if len(pkg.CompiledGoFiles) == 0 { + pkg.CompiledGoFiles = pkg.GoFiles + } + + if p.Error != nil { + pkg.Errors = append(pkg.Errors, Error{ + Pos: p.Error.Pos, + Msg: p.Error.Err, + }) + } + + response.Packages = append(response.Packages, pkg) + } + + return &response, nil +} + +// absJoin absolutizes and flattens the lists of files. +func absJoin(dir string, fileses ...[]string) (res []string) { + for _, files := range fileses { + for _, file := range files { + if !filepath.IsAbs(file) { + file = filepath.Join(dir, file) + } + res = append(res, file) + } + } + return res +} + +func golistargs(cfg *Config, words []string) []string { + fullargs := []string{ + "list", "-e", "-json", "-compiled", + fmt.Sprintf("-test=%t", cfg.Tests), + fmt.Sprintf("-export=%t", usesExportData(cfg)), + fmt.Sprintf("-deps=%t", cfg.Mode >= LoadImports), + // go list doesn't let you pass -test and -find together, + // probably because you'd just get the TestMain. + fmt.Sprintf("-find=%t", cfg.Mode < LoadImports && !cfg.Tests), + } + fullargs = append(fullargs, cfg.BuildFlags...) + fullargs = append(fullargs, "--") + fullargs = append(fullargs, words...) + return fullargs +} + +// invokeGo returns the stdout of a go command invocation. +func invokeGo(cfg *Config, args ...string) (*bytes.Buffer, error) { + if debug { + defer func(start time.Time) { log.Printf("%s for %v", time.Since(start), cmdDebugStr(cfg, args...)) }(time.Now()) + } + stdout := new(bytes.Buffer) + stderr := new(bytes.Buffer) + cmd := exec.CommandContext(cfg.Context, "go", args...) + // On darwin the cwd gets resolved to the real path, which breaks anything that + // expects the working directory to keep the original path, including the + // go command when dealing with modules. + // The Go stdlib has a special feature where if the cwd and the PWD are the + // same node then it trusts the PWD, so by setting it in the env for the child + // process we fix up all the paths returned by the go command. + cmd.Env = append(append([]string{}, cfg.Env...), "PWD="+cfg.Dir) + cmd.Dir = cfg.Dir + cmd.Stdout = stdout + cmd.Stderr = stderr + if err := cmd.Run(); err != nil { + exitErr, ok := err.(*exec.ExitError) + if !ok { + // Catastrophic error: + // - executable not found + // - context cancellation + return nil, fmt.Errorf("couldn't exec 'go %v': %s %T", args, err, err) + } + + // Old go version? + if strings.Contains(stderr.String(), "flag provided but not defined") { + return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)} + } + + // Export mode entails a build. + // If that build fails, errors appear on stderr + // (despite the -e flag) and the Export field is blank. + // Do not fail in that case. + // The same is true if an ad-hoc package given to go list doesn't exist. + // TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when + // packages don't exist or a build fails. + if !usesExportData(cfg) && !containsGoFile(args) { + return nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr) + } + } + + // As of writing, go list -export prints some non-fatal compilation + // errors to stderr, even with -e set. We would prefer that it put + // them in the Package.Error JSON (see https://golang.org/issue/26319). + // In the meantime, there's nowhere good to put them, but they can + // be useful for debugging. Print them if $GOPACKAGESPRINTGOLISTERRORS + // is set. + if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTGOLISTERRORS") != "" { + fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cfg, args...), stderr) + } + + // debugging + if false { + fmt.Fprintf(os.Stderr, "%s stdout: <<%s>>\n", cmdDebugStr(cfg, args...), stdout) + } + + return stdout, nil +} + +func containsGoFile(s []string) bool { + for _, f := range s { + if strings.HasSuffix(f, ".go") { + return true + } + } + return false +} + +func cmdDebugStr(cfg *Config, args ...string) string { + env := make(map[string]string) + for _, kv := range cfg.Env { + split := strings.Split(kv, "=") + k, v := split[0], split[1] + env[k] = v + } + + return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v PWD=%v go %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["PWD"], args) +} diff --git a/vendor/golang.org/x/tools/go/packages/golist_fallback.go b/vendor/golang.org/x/tools/go/packages/golist_fallback.go new file mode 100644 index 00000000000..141fa19ac19 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist_fallback.go @@ -0,0 +1,450 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "encoding/json" + "fmt" + "go/build" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" + + "golang.org/x/tools/go/internal/cgo" +) + +// TODO(matloob): Delete this file once Go 1.12 is released. + +// This file provides backwards compatibility support for +// loading for versions of Go earlier than 1.11. This support is meant to +// assist with migration to the Package API until there's +// widespread adoption of these newer Go versions. +// This support will be removed once Go 1.12 is released +// in Q1 2019. + +func golistDriverFallback(cfg *Config, words ...string) (*driverResponse, error) { + // Turn absolute paths into GOROOT and GOPATH-relative paths to provide to go list. + // This will have surprising behavior if GOROOT or GOPATH contain multiple packages with the same + // path and a user provides an absolute path to a directory that's shadowed by an earlier + // directory in GOROOT or GOPATH with the same package path. + words = cleanAbsPaths(cfg, words) + + original, deps, err := getDeps(cfg, words...) + if err != nil { + return nil, err + } + + var tmpdir string // used for generated cgo files + var needsTestVariant []struct { + pkg, xtestPkg *Package + } + + var response driverResponse + allPkgs := make(map[string]bool) + addPackage := func(p *jsonPackage, isRoot bool) { + id := p.ImportPath + + if allPkgs[id] { + return + } + allPkgs[id] = true + + pkgpath := id + + if pkgpath == "unsafe" { + p.GoFiles = nil // ignore fake unsafe.go file + } + + importMap := func(importlist []string) map[string]*Package { + importMap := make(map[string]*Package) + for _, id := range importlist { + + if id == "C" { + for _, path := range []string{"unsafe", "syscall", "runtime/cgo"} { + if pkgpath != path && importMap[path] == nil { + importMap[path] = &Package{ID: path} + } + } + continue + } + importMap[vendorlessPath(id)] = &Package{ID: id} + } + return importMap + } + compiledGoFiles := absJoin(p.Dir, p.GoFiles) + // Use a function to simplify control flow. It's just a bunch of gotos. + var cgoErrors []error + var outdir string + getOutdir := func() (string, error) { + if outdir != "" { + return outdir, nil + } + if tmpdir == "" { + if tmpdir, err = ioutil.TempDir("", "gopackages"); err != nil { + return "", err + } + } + outdir = filepath.Join(tmpdir, strings.Replace(p.ImportPath, "/", "_", -1)) + if err := os.MkdirAll(outdir, 0755); err != nil { + outdir = "" + return "", err + } + return outdir, nil + } + processCgo := func() bool { + // Suppress any cgo errors. Any relevant errors will show up in typechecking. + // TODO(matloob): Skip running cgo if Mode < LoadTypes. + outdir, err := getOutdir() + if err != nil { + cgoErrors = append(cgoErrors, err) + return false + } + files, _, err := runCgo(p.Dir, outdir, cfg.Env) + if err != nil { + cgoErrors = append(cgoErrors, err) + return false + } + compiledGoFiles = append(compiledGoFiles, files...) + return true + } + if len(p.CgoFiles) == 0 || !processCgo() { + compiledGoFiles = append(compiledGoFiles, absJoin(p.Dir, p.CgoFiles)...) // Punt to typechecker. + } + if isRoot { + response.Roots = append(response.Roots, id) + } + pkg := &Package{ + ID: id, + Name: p.Name, + GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), + CompiledGoFiles: compiledGoFiles, + OtherFiles: absJoin(p.Dir, otherFiles(p)...), + PkgPath: pkgpath, + Imports: importMap(p.Imports), + // TODO(matloob): set errors on the Package to cgoErrors + } + if p.Error != nil { + pkg.Errors = append(pkg.Errors, Error{ + Pos: p.Error.Pos, + Msg: p.Error.Err, + }) + } + response.Packages = append(response.Packages, pkg) + if cfg.Tests && isRoot { + testID := fmt.Sprintf("%s [%s.test]", id, id) + if len(p.TestGoFiles) > 0 || len(p.XTestGoFiles) > 0 { + response.Roots = append(response.Roots, testID) + testPkg := &Package{ + ID: testID, + Name: p.Name, + GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles, p.TestGoFiles), + CompiledGoFiles: append(compiledGoFiles, absJoin(p.Dir, p.TestGoFiles)...), + OtherFiles: absJoin(p.Dir, otherFiles(p)...), + PkgPath: pkgpath, + Imports: importMap(append(p.Imports, p.TestImports...)), + // TODO(matloob): set errors on the Package to cgoErrors + } + response.Packages = append(response.Packages, testPkg) + var xtestPkg *Package + if len(p.XTestGoFiles) > 0 { + xtestID := fmt.Sprintf("%s_test [%s.test]", id, id) + response.Roots = append(response.Roots, xtestID) + // Generate test variants for all packages q where a path exists + // such that xtestPkg -> ... -> q -> ... -> p (where p is the package under test) + // and rewrite all import map entries of p to point to testPkg (the test variant of + // p), and of each q to point to the test variant of that q. + xtestPkg = &Package{ + ID: xtestID, + Name: p.Name + "_test", + GoFiles: absJoin(p.Dir, p.XTestGoFiles), + CompiledGoFiles: absJoin(p.Dir, p.XTestGoFiles), + PkgPath: pkgpath + "_test", + Imports: importMap(p.XTestImports), + } + // Add to list of packages we need to rewrite imports for to refer to test variants. + // We may need to create a test variant of a package that hasn't been loaded yet, so + // the test variants need to be created later. + needsTestVariant = append(needsTestVariant, struct{ pkg, xtestPkg *Package }{pkg, xtestPkg}) + response.Packages = append(response.Packages, xtestPkg) + } + // testmain package + testmainID := id + ".test" + response.Roots = append(response.Roots, testmainID) + imports := map[string]*Package{} + imports[testPkg.PkgPath] = &Package{ID: testPkg.ID} + if xtestPkg != nil { + imports[xtestPkg.PkgPath] = &Package{ID: xtestPkg.ID} + } + testmainPkg := &Package{ + ID: testmainID, + Name: "main", + PkgPath: testmainID, + Imports: imports, + } + response.Packages = append(response.Packages, testmainPkg) + outdir, err := getOutdir() + if err != nil { + testmainPkg.Errors = append(testmainPkg.Errors, Error{ + Pos: "-", + Msg: fmt.Sprintf("failed to generate testmain: %v", err), + Kind: ListError, + }) + return + } + // Don't use a .go extension on the file, so that the tests think the file is inside GOCACHE. + // This allows the same test to test the pre- and post-Go 1.11 go list logic because the Go 1.11 + // go list generates test mains in the cache, and the test code knows not to rely on paths in the + // cache to stay stable. + testmain := filepath.Join(outdir, "testmain-go") + extraimports, extradeps, err := generateTestmain(testmain, testPkg, xtestPkg) + if err != nil { + testmainPkg.Errors = append(testmainPkg.Errors, Error{ + Pos: "-", + Msg: fmt.Sprintf("failed to generate testmain: %v", err), + Kind: ListError, + }) + } + deps = append(deps, extradeps...) + for _, imp := range extraimports { // testing, testing/internal/testdeps, and maybe os + imports[imp] = &Package{ID: imp} + } + testmainPkg.GoFiles = []string{testmain} + testmainPkg.CompiledGoFiles = []string{testmain} + } + } + } + + for _, pkg := range original { + addPackage(pkg, true) + } + if cfg.Mode < LoadImports || len(deps) == 0 { + return &response, nil + } + + buf, err := invokeGo(cfg, golistArgsFallback(cfg, deps)...) + if err != nil { + return nil, err + } + + // Decode the JSON and convert it to Package form. + for dec := json.NewDecoder(buf); dec.More(); { + p := new(jsonPackage) + if err := dec.Decode(p); err != nil { + return nil, fmt.Errorf("JSON decoding failed: %v", err) + } + + addPackage(p, false) + } + + for _, v := range needsTestVariant { + createTestVariants(&response, v.pkg, v.xtestPkg) + } + + return &response, nil +} + +func createTestVariants(response *driverResponse, pkgUnderTest, xtestPkg *Package) { + allPkgs := make(map[string]*Package) + for _, pkg := range response.Packages { + allPkgs[pkg.ID] = pkg + } + needsTestVariant := make(map[string]bool) + needsTestVariant[pkgUnderTest.ID] = true + var needsVariantRec func(p *Package) bool + needsVariantRec = func(p *Package) bool { + if needsTestVariant[p.ID] { + return true + } + for _, imp := range p.Imports { + if needsVariantRec(allPkgs[imp.ID]) { + // Don't break because we want to make sure all dependencies + // have been processed, and all required test variants of our dependencies + // exist. + needsTestVariant[p.ID] = true + } + } + if !needsTestVariant[p.ID] { + return false + } + // Create a clone of the package. It will share the same strings and lists of source files, + // but that's okay. It's only necessary for the Imports map to have a separate identity. + testVariant := *p + testVariant.ID = fmt.Sprintf("%s [%s.test]", p.ID, pkgUnderTest.ID) + testVariant.Imports = make(map[string]*Package) + for imp, pkg := range p.Imports { + testVariant.Imports[imp] = pkg + if needsTestVariant[pkg.ID] { + testVariant.Imports[imp] = &Package{ID: fmt.Sprintf("%s [%s.test]", pkg.ID, pkgUnderTest.ID)} + } + } + response.Packages = append(response.Packages, &testVariant) + return needsTestVariant[p.ID] + } + // finally, update the xtest package's imports + for imp, pkg := range xtestPkg.Imports { + if allPkgs[pkg.ID] == nil { + fmt.Printf("for %s: package %s doesn't exist\n", xtestPkg.ID, pkg.ID) + } + if needsVariantRec(allPkgs[pkg.ID]) { + xtestPkg.Imports[imp] = &Package{ID: fmt.Sprintf("%s [%s.test]", pkg.ID, pkgUnderTest.ID)} + } + } +} + +// cleanAbsPaths replaces all absolute paths with GOPATH- and GOROOT-relative +// paths. If an absolute path is not GOPATH- or GOROOT- relative, it is left as an +// absolute path so an error can be returned later. +func cleanAbsPaths(cfg *Config, words []string) []string { + var searchpaths []string + var cleaned = make([]string, len(words)) + for i := range cleaned { + cleaned[i] = words[i] + // Ignore relative directory paths (they must already be goroot-relative) and Go source files + // (absolute source files are already allowed for ad-hoc packages). + // TODO(matloob): Can there be non-.go files in ad-hoc packages. + if !filepath.IsAbs(cleaned[i]) || strings.HasSuffix(cleaned[i], ".go") { + continue + } + // otherwise, it's an absolute path. Search GOPATH and GOROOT to find it. + if searchpaths == nil { + cmd := exec.Command("go", "env", "GOPATH", "GOROOT") + cmd.Env = cfg.Env + out, err := cmd.Output() + if err != nil { + searchpaths = []string{} + continue // suppress the error, it will show up again when running go list + } + lines := strings.Split(string(out), "\n") + if len(lines) != 3 || lines[0] == "" || lines[1] == "" || lines[2] != "" { + continue // suppress error + } + // first line is GOPATH + for _, path := range filepath.SplitList(lines[0]) { + searchpaths = append(searchpaths, filepath.Join(path, "src")) + } + // second line is GOROOT + searchpaths = append(searchpaths, filepath.Join(lines[1], "src")) + } + for _, sp := range searchpaths { + if strings.HasPrefix(cleaned[i], sp) { + cleaned[i] = strings.TrimPrefix(cleaned[i], sp) + cleaned[i] = strings.TrimLeft(cleaned[i], string(filepath.Separator)) + } + } + } + return cleaned +} + +// vendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +// Copied from golang.org/x/tools/imports/fix.go. +func vendorlessPath(ipath string) string { + // Devendorize for use in import statement. + if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { + return ipath[i+len("/vendor/"):] + } + if strings.HasPrefix(ipath, "vendor/") { + return ipath[len("vendor/"):] + } + return ipath +} + +// getDeps runs an initial go list to determine all the dependency packages. +func getDeps(cfg *Config, words ...string) (initial []*jsonPackage, deps []string, err error) { + buf, err := invokeGo(cfg, golistArgsFallback(cfg, words)...) + if err != nil { + return nil, nil, err + } + + depsSet := make(map[string]bool) + var testImports []string + + // Extract deps from the JSON. + for dec := json.NewDecoder(buf); dec.More(); { + p := new(jsonPackage) + if err := dec.Decode(p); err != nil { + return nil, nil, fmt.Errorf("JSON decoding failed: %v", err) + } + + initial = append(initial, p) + for _, dep := range p.Deps { + depsSet[dep] = true + } + if cfg.Tests { + // collect the additional imports of the test packages. + pkgTestImports := append(p.TestImports, p.XTestImports...) + for _, imp := range pkgTestImports { + if depsSet[imp] { + continue + } + depsSet[imp] = true + testImports = append(testImports, imp) + } + } + } + // Get the deps of the packages imported by tests. + if len(testImports) > 0 { + buf, err = invokeGo(cfg, golistArgsFallback(cfg, testImports)...) + if err != nil { + return nil, nil, err + } + // Extract deps from the JSON. + for dec := json.NewDecoder(buf); dec.More(); { + p := new(jsonPackage) + if err := dec.Decode(p); err != nil { + return nil, nil, fmt.Errorf("JSON decoding failed: %v", err) + } + for _, dep := range p.Deps { + depsSet[dep] = true + } + } + } + + for _, orig := range initial { + delete(depsSet, orig.ImportPath) + } + + deps = make([]string, 0, len(depsSet)) + for dep := range depsSet { + deps = append(deps, dep) + } + sort.Strings(deps) // ensure output is deterministic + return initial, deps, nil +} + +func golistArgsFallback(cfg *Config, words []string) []string { + fullargs := []string{"list", "-e", "-json"} + fullargs = append(fullargs, cfg.BuildFlags...) + fullargs = append(fullargs, "--") + fullargs = append(fullargs, words...) + return fullargs +} + +func runCgo(pkgdir, tmpdir string, env []string) (files, displayfiles []string, err error) { + // Use go/build to open cgo files and determine the cgo flags, etc, from them. + // This is tricky so it's best to avoid reimplementing as much as we can, and + // we plan to delete this support once Go 1.12 is released anyways. + // TODO(matloob): This isn't completely correct because we're using the Default + // context. Perhaps we should more accurately fill in the context. + bp, err := build.ImportDir(pkgdir, build.ImportMode(0)) + if err != nil { + return nil, nil, err + } + for _, ev := range env { + if v := strings.TrimPrefix(ev, "CGO_CPPFLAGS"); v != ev { + bp.CgoCPPFLAGS = append(bp.CgoCPPFLAGS, strings.Fields(v)...) + } else if v := strings.TrimPrefix(ev, "CGO_CFLAGS"); v != ev { + bp.CgoCFLAGS = append(bp.CgoCFLAGS, strings.Fields(v)...) + } else if v := strings.TrimPrefix(ev, "CGO_CXXFLAGS"); v != ev { + bp.CgoCXXFLAGS = append(bp.CgoCXXFLAGS, strings.Fields(v)...) + } else if v := strings.TrimPrefix(ev, "CGO_LDFLAGS"); v != ev { + bp.CgoLDFLAGS = append(bp.CgoLDFLAGS, strings.Fields(v)...) + } + } + return cgo.Run(bp, pkgdir, tmpdir, true) +} diff --git a/vendor/golang.org/x/tools/go/packages/golist_fallback_testmain.go b/vendor/golang.org/x/tools/go/packages/golist_fallback_testmain.go new file mode 100644 index 00000000000..128e00e25aa --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist_fallback_testmain.go @@ -0,0 +1,318 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is largely based on the Go 1.10-era cmd/go/internal/test/test.go +// testmain generation code. + +package packages + +import ( + "errors" + "fmt" + "go/ast" + "go/doc" + "go/parser" + "go/token" + "os" + "sort" + "strings" + "text/template" + "unicode" + "unicode/utf8" +) + +// TODO(matloob): Delete this file once Go 1.12 is released. + +// This file complements golist_fallback.go by providing +// support for generating testmains. + +func generateTestmain(out string, testPkg, xtestPkg *Package) (extraimports, extradeps []string, err error) { + testFuncs, err := loadTestFuncs(testPkg, xtestPkg) + if err != nil { + return nil, nil, err + } + extraimports = []string{"testing", "testing/internal/testdeps"} + if testFuncs.TestMain == nil { + extraimports = append(extraimports, "os") + } + // Transitive dependencies of ("testing", "testing/internal/testdeps"). + // os is part of the transitive closure so it and its transitive dependencies are + // included regardless of whether it's imported in the template below. + extradeps = []string{ + "errors", + "internal/cpu", + "unsafe", + "internal/bytealg", + "internal/race", + "runtime/internal/atomic", + "runtime/internal/sys", + "runtime", + "sync/atomic", + "sync", + "io", + "unicode", + "unicode/utf8", + "bytes", + "math", + "syscall", + "time", + "internal/poll", + "internal/syscall/unix", + "internal/testlog", + "os", + "math/bits", + "strconv", + "reflect", + "fmt", + "sort", + "strings", + "flag", + "runtime/debug", + "context", + "runtime/trace", + "testing", + "bufio", + "regexp/syntax", + "regexp", + "compress/flate", + "encoding/binary", + "hash", + "hash/crc32", + "compress/gzip", + "path/filepath", + "io/ioutil", + "text/tabwriter", + "runtime/pprof", + "testing/internal/testdeps", + } + return extraimports, extradeps, writeTestmain(out, testFuncs) +} + +// The following is adapted from the cmd/go testmain generation code. + +// isTestFunc tells whether fn has the type of a testing function. arg +// specifies the parameter type we look for: B, M or T. +func isTestFunc(fn *ast.FuncDecl, arg string) bool { + if fn.Type.Results != nil && len(fn.Type.Results.List) > 0 || + fn.Type.Params.List == nil || + len(fn.Type.Params.List) != 1 || + len(fn.Type.Params.List[0].Names) > 1 { + return false + } + ptr, ok := fn.Type.Params.List[0].Type.(*ast.StarExpr) + if !ok { + return false + } + // We can't easily check that the type is *testing.M + // because we don't know how testing has been imported, + // but at least check that it's *M or *something.M. + // Same applies for B and T. + if name, ok := ptr.X.(*ast.Ident); ok && name.Name == arg { + return true + } + if sel, ok := ptr.X.(*ast.SelectorExpr); ok && sel.Sel.Name == arg { + return true + } + return false +} + +// isTest tells whether name looks like a test (or benchmark, according to prefix). +// It is a Test (say) if there is a character after Test that is not a lower-case letter. +// We don't want TesticularCancer. +func isTest(name, prefix string) bool { + if !strings.HasPrefix(name, prefix) { + return false + } + if len(name) == len(prefix) { // "Test" is ok + return true + } + rune, _ := utf8.DecodeRuneInString(name[len(prefix):]) + return !unicode.IsLower(rune) +} + +// loadTestFuncs returns the testFuncs describing the tests that will be run. +func loadTestFuncs(ptest, pxtest *Package) (*testFuncs, error) { + t := &testFuncs{ + TestPackage: ptest, + XTestPackage: pxtest, + } + for _, file := range ptest.GoFiles { + if !strings.HasSuffix(file, "_test.go") { + continue + } + if err := t.load(file, "_test", &t.ImportTest, &t.NeedTest); err != nil { + return nil, err + } + } + if pxtest != nil { + for _, file := range pxtest.GoFiles { + if err := t.load(file, "_xtest", &t.ImportXtest, &t.NeedXtest); err != nil { + return nil, err + } + } + } + return t, nil +} + +// writeTestmain writes the _testmain.go file for t to the file named out. +func writeTestmain(out string, t *testFuncs) error { + f, err := os.Create(out) + if err != nil { + return err + } + defer f.Close() + + if err := testmainTmpl.Execute(f, t); err != nil { + return err + } + + return nil +} + +type testFuncs struct { + Tests []testFunc + Benchmarks []testFunc + Examples []testFunc + TestMain *testFunc + TestPackage *Package + XTestPackage *Package + ImportTest bool + NeedTest bool + ImportXtest bool + NeedXtest bool +} + +// Tested returns the name of the package being tested. +func (t *testFuncs) Tested() string { + return t.TestPackage.Name +} + +type testFunc struct { + Package string // imported package name (_test or _xtest) + Name string // function name + Output string // output, for examples + Unordered bool // output is allowed to be unordered. +} + +func (t *testFuncs) load(filename, pkg string, doImport, seen *bool) error { + var fset = token.NewFileSet() + + f, err := parser.ParseFile(fset, filename, nil, parser.ParseComments) + if err != nil { + return errors.New("failed to parse test file " + filename) + } + for _, d := range f.Decls { + n, ok := d.(*ast.FuncDecl) + if !ok { + continue + } + if n.Recv != nil { + continue + } + name := n.Name.String() + switch { + case name == "TestMain": + if isTestFunc(n, "T") { + t.Tests = append(t.Tests, testFunc{pkg, name, "", false}) + *doImport, *seen = true, true + continue + } + err := checkTestFunc(fset, n, "M") + if err != nil { + return err + } + if t.TestMain != nil { + return errors.New("multiple definitions of TestMain") + } + t.TestMain = &testFunc{pkg, name, "", false} + *doImport, *seen = true, true + case isTest(name, "Test"): + err := checkTestFunc(fset, n, "T") + if err != nil { + return err + } + t.Tests = append(t.Tests, testFunc{pkg, name, "", false}) + *doImport, *seen = true, true + case isTest(name, "Benchmark"): + err := checkTestFunc(fset, n, "B") + if err != nil { + return err + } + t.Benchmarks = append(t.Benchmarks, testFunc{pkg, name, "", false}) + *doImport, *seen = true, true + } + } + ex := doc.Examples(f) + sort.Slice(ex, func(i, j int) bool { return ex[i].Order < ex[j].Order }) + for _, e := range ex { + *doImport = true // import test file whether executed or not + if e.Output == "" && !e.EmptyOutput { + // Don't run examples with no output. + continue + } + t.Examples = append(t.Examples, testFunc{pkg, "Example" + e.Name, e.Output, e.Unordered}) + *seen = true + } + return nil +} + +func checkTestFunc(fset *token.FileSet, fn *ast.FuncDecl, arg string) error { + if !isTestFunc(fn, arg) { + name := fn.Name.String() + pos := fset.Position(fn.Pos()) + return fmt.Errorf("%s: wrong signature for %s, must be: func %s(%s *testing.%s)", pos, name, name, strings.ToLower(arg), arg) + } + return nil +} + +var testmainTmpl = template.Must(template.New("main").Parse(` +package main + +import ( +{{if not .TestMain}} + "os" +{{end}} + "testing" + "testing/internal/testdeps" + +{{if .ImportTest}} + {{if .NeedTest}}_test{{else}}_{{end}} {{.TestPackage.PkgPath | printf "%q"}} +{{end}} +{{if .ImportXtest}} + {{if .NeedXtest}}_xtest{{else}}_{{end}} {{.XTestPackage.PkgPath | printf "%q"}} +{{end}} +) + +var tests = []testing.InternalTest{ +{{range .Tests}} + {"{{.Name}}", {{.Package}}.{{.Name}}}, +{{end}} +} + +var benchmarks = []testing.InternalBenchmark{ +{{range .Benchmarks}} + {"{{.Name}}", {{.Package}}.{{.Name}}}, +{{end}} +} + +var examples = []testing.InternalExample{ +{{range .Examples}} + {"{{.Name}}", {{.Package}}.{{.Name}}, {{.Output | printf "%q"}}, {{.Unordered}}}, +{{end}} +} + +func init() { + testdeps.ImportPath = {{.TestPackage.PkgPath | printf "%q"}} +} + +func main() { + m := testing.MainStart(testdeps.TestDeps{}, tests, benchmarks, examples) +{{with .TestMain}} + {{.Package}}.{{.Name}}(m) +{{else}} + os.Exit(m.Run()) +{{end}} +} + +`)) diff --git a/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/vendor/golang.org/x/tools/go/packages/golist_overlay.go new file mode 100644 index 00000000000..71ffcd9d55b --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist_overlay.go @@ -0,0 +1,104 @@ +package packages + +import ( + "go/parser" + "go/token" + "path/filepath" + "strconv" + "strings" +) + +// processGolistOverlay provides rudimentary support for adding +// files that don't exist on disk to an overlay. The results can be +// sometimes incorrect. +// TODO(matloob): Handle unsupported cases, including the following: +// - test files +// - adding test and non-test files to test variants of packages +// - determining the correct package to add given a new import path +// - creating packages that don't exist +func processGolistOverlay(cfg *Config, response *driverResponse) (modifiedPkgs, needPkgs []string, err error) { + havePkgs := make(map[string]string) // importPath -> non-test package ID + needPkgsSet := make(map[string]bool) + modifiedPkgsSet := make(map[string]bool) + + for _, pkg := range response.Packages { + // This is an approximation of import path to id. This can be + // wrong for tests, vendored packages, and a number of other cases. + havePkgs[pkg.PkgPath] = pkg.ID + } + +outer: + for path, contents := range cfg.Overlay { + base := filepath.Base(path) + if strings.HasSuffix(path, "_test.go") { + // Overlays don't support adding new test files yet. + // TODO(matloob): support adding new test files. + continue + } + dir := filepath.Dir(path) + for _, pkg := range response.Packages { + var dirContains, fileExists bool + for _, f := range pkg.GoFiles { + if sameFile(filepath.Dir(f), dir) { + dirContains = true + } + if filepath.Base(f) == base { + fileExists = true + } + } + if dirContains { + if !fileExists { + pkg.GoFiles = append(pkg.GoFiles, path) // TODO(matloob): should the file just be added to GoFiles? + pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, path) + modifiedPkgsSet[pkg.ID] = true + } + imports, err := extractImports(path, contents) + if err != nil { + // Let the parser or type checker report errors later. + continue outer + } + for _, imp := range imports { + _, found := pkg.Imports[imp] + if !found { + needPkgsSet[imp] = true + // TODO(matloob): Handle cases when the following block isn't correct. + // These include imports of test variants, imports of vendored packages, etc. + id, ok := havePkgs[imp] + if !ok { + id = imp + } + pkg.Imports[imp] = &Package{ID: id} + } + } + continue outer + } + } + } + + needPkgs = make([]string, 0, len(needPkgsSet)) + for pkg := range needPkgsSet { + needPkgs = append(needPkgs, pkg) + } + modifiedPkgs = make([]string, 0, len(modifiedPkgsSet)) + for pkg := range modifiedPkgsSet { + modifiedPkgs = append(modifiedPkgs, pkg) + } + return modifiedPkgs, needPkgs, err +} + +func extractImports(filename string, contents []byte) ([]string, error) { + f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.ImportsOnly) // TODO(matloob): reuse fileset? + if err != nil { + return nil, err + } + var res []string + for _, imp := range f.Imports { + quotedPath := imp.Path.Value + path, err := strconv.Unquote(quotedPath) + if err != nil { + return nil, err + } + res = append(res, path) + } + return res, nil +} diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go new file mode 100644 index 00000000000..f4aac56e97b --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -0,0 +1,955 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +// See doc.go for package documentation and implementation notes. + +import ( + "context" + "encoding/json" + "fmt" + "go/ast" + "go/parser" + "go/scanner" + "go/token" + "go/types" + "io/ioutil" + "log" + "os" + "path/filepath" + "sync" + + "golang.org/x/tools/go/gcexportdata" +) + +// A LoadMode specifies the amount of detail to return when loading. +// Higher-numbered modes cause Load to return more information, +// but may be slower. Load may return more information than requested. +type LoadMode int + +const ( + // LoadFiles finds the packages and computes their source file lists. + // Package fields: ID, Name, Errors, GoFiles, and OtherFiles. + LoadFiles LoadMode = iota + + // LoadImports adds import information for each package + // and its dependencies. + // Package fields added: Imports. + LoadImports + + // LoadTypes adds type information for package-level + // declarations in the packages matching the patterns. + // Package fields added: Types, Fset, and IllTyped. + // This mode uses type information provided by the build system when + // possible, and may fill in the ExportFile field. + LoadTypes + + // LoadSyntax adds typed syntax trees for the packages matching the patterns. + // Package fields added: Syntax, and TypesInfo, for direct pattern matches only. + LoadSyntax + + // LoadAllSyntax adds typed syntax trees for the packages matching the patterns + // and all dependencies. + // Package fields added: Types, Fset, IllTyped, Syntax, and TypesInfo, + // for all packages in the import graph. + LoadAllSyntax +) + +// A Config specifies details about how packages should be loaded. +// The zero value is a valid configuration. +// Calls to Load do not modify this struct. +type Config struct { + // Mode controls the level of information returned for each package. + Mode LoadMode + + // Context specifies the context for the load operation. + // If the context is cancelled, the loader may stop early + // and return an ErrCancelled error. + // If Context is nil, the load cannot be cancelled. + Context context.Context + + // Dir is the directory in which to run the build system's query tool + // that provides information about the packages. + // If Dir is empty, the tool is run in the current directory. + Dir string + + // Env is the environment to use when invoking the build system's query tool. + // If Env is nil, the current environment is used. + // As in os/exec's Cmd, only the last value in the slice for + // each environment key is used. To specify the setting of only + // a few variables, append to the current environment, as in: + // + // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386") + // + Env []string + + // BuildFlags is a list of command-line flags to be passed through to + // the build system's query tool. + BuildFlags []string + + // Fset provides source position information for syntax trees and types. + // If Fset is nil, the loader will create a new FileSet. + Fset *token.FileSet + + // ParseFile is called to read and parse each file + // when preparing a package's type-checked syntax tree. + // It must be safe to call ParseFile simultaneously from multiple goroutines. + // If ParseFile is nil, the loader will uses parser.ParseFile. + // + // ParseFile should parse the source from src and use filename only for + // recording position information. + // + // An application may supply a custom implementation of ParseFile + // to change the effective file contents or the behavior of the parser, + // or to modify the syntax tree. For example, selectively eliminating + // unwanted function bodies can significantly accelerate type checking. + ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) + + // If Tests is set, the loader includes not just the packages + // matching a particular pattern but also any related test packages, + // including test-only variants of the package and the test executable. + // + // For example, when using the go command, loading "fmt" with Tests=true + // returns four packages, with IDs "fmt" (the standard package), + // "fmt [fmt.test]" (the package as compiled for the test), + // "fmt_test" (the test functions from source files in package fmt_test), + // and "fmt.test" (the test binary). + // + // In build systems with explicit names for tests, + // setting Tests may have no effect. + Tests bool + + // Overlay provides a mapping of absolute file paths to file contents. + // If the file with the given path already exists, the parser will use the + // alternative file contents provided by the map. + // + // Overlays provide incomplete support for when a given file doesn't + // already exist on disk. See the package doc above for more details. + Overlay map[string][]byte +} + +// driver is the type for functions that query the build system for the +// packages named by the patterns. +type driver func(cfg *Config, patterns ...string) (*driverResponse, error) + +// driverResponse contains the results for a driver query. +type driverResponse struct { + // Sizes, if not nil, is the types.Sizes to use when type checking. + Sizes *types.StdSizes + + // Roots is the set of package IDs that make up the root packages. + // We have to encode this separately because when we encode a single package + // we cannot know if it is one of the roots as that requires knowledge of the + // graph it is part of. + Roots []string `json:",omitempty"` + + // Packages is the full set of packages in the graph. + // The packages are not connected into a graph. + // The Imports if populated will be stubs that only have their ID set. + // Imports will be connected and then type and syntax information added in a + // later pass (see refine). + Packages []*Package +} + +// Load loads and returns the Go packages named by the given patterns. +// +// Config specifies loading options; +// nil behaves the same as an empty Config. +// +// Load returns an error if any of the patterns was invalid +// as defined by the underlying build system. +// It may return an empty list of packages without an error, +// for instance for an empty expansion of a valid wildcard. +// Errors associated with a particular package are recorded in the +// corresponding Package's Errors list, and do not cause Load to +// return an error. Clients may need to handle such errors before +// proceeding with further analysis. The PrintErrors function is +// provided for convenient display of all errors. +func Load(cfg *Config, patterns ...string) ([]*Package, error) { + l := newLoader(cfg) + response, err := defaultDriver(&l.Config, patterns...) + if err != nil { + return nil, err + } + l.sizes = response.Sizes + return l.refine(response.Roots, response.Packages...) +} + +// defaultDriver is a driver that looks for an external driver binary, and if +// it does not find it falls back to the built in go list driver. +func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, error) { + driver := findExternalDriver(cfg) + if driver == nil { + driver = goListDriver + } + return driver(cfg, patterns...) +} + +// A Package describes a loaded Go package. +type Package struct { + // ID is a unique identifier for a package, + // in a syntax provided by the underlying build system. + // + // Because the syntax varies based on the build system, + // clients should treat IDs as opaque and not attempt to + // interpret them. + ID string + + // Name is the package name as it appears in the package source code. + Name string + + // PkgPath is the package path as used by the go/types package. + PkgPath string + + // Errors contains any errors encountered querying the metadata + // of the package, or while parsing or type-checking its files. + Errors []Error + + // GoFiles lists the absolute file paths of the package's Go source files. + GoFiles []string + + // CompiledGoFiles lists the absolute file paths of the package's source + // files that were presented to the compiler. + // This may differ from GoFiles if files are processed before compilation. + CompiledGoFiles []string + + // OtherFiles lists the absolute file paths of the package's non-Go source files, + // including assembly, C, C++, Fortran, Objective-C, SWIG, and so on. + OtherFiles []string + + // ExportFile is the absolute path to a file containing type + // information for the package as provided by the build system. + ExportFile string + + // Imports maps import paths appearing in the package's Go source files + // to corresponding loaded Packages. + Imports map[string]*Package + + // Types provides type information for the package. + // Modes LoadTypes and above set this field for packages matching the + // patterns; type information for dependencies may be missing or incomplete. + // Mode LoadAllSyntax sets this field for all packages, including dependencies. + Types *types.Package + + // Fset provides position information for Types, TypesInfo, and Syntax. + // It is set only when Types is set. + Fset *token.FileSet + + // IllTyped indicates whether the package or any dependency contains errors. + // It is set only when Types is set. + IllTyped bool + + // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. + // + // Mode LoadSyntax sets this field for packages matching the patterns. + // Mode LoadAllSyntax sets this field for all packages, including dependencies. + Syntax []*ast.File + + // TypesInfo provides type information about the package's syntax trees. + // It is set only when Syntax is set. + TypesInfo *types.Info + + // TypesSizes provides the effective size function for types in TypesInfo. + TypesSizes types.Sizes +} + +// An Error describes a problem with a package's metadata, syntax, or types. +type Error struct { + Pos string // "file:line:col" or "file:line" or "" or "-" + Msg string + Kind ErrorKind +} + +// ErrorKind describes the source of the error, allowing the user to +// differentiate between errors generated by the driver, the parser, or the +// type-checker. +type ErrorKind int + +const ( + UnknownError ErrorKind = iota + ListError + ParseError + TypeError +) + +func (err Error) Error() string { + pos := err.Pos + if pos == "" { + pos = "-" // like token.Position{}.String() + } + return pos + ": " + err.Msg +} + +// flatPackage is the JSON form of Package +// It drops all the type and syntax fields, and transforms the Imports +// +// TODO(adonovan): identify this struct with Package, effectively +// publishing the JSON protocol. +type flatPackage struct { + ID string + Name string `json:",omitempty"` + PkgPath string `json:",omitempty"` + Errors []Error `json:",omitempty"` + GoFiles []string `json:",omitempty"` + CompiledGoFiles []string `json:",omitempty"` + OtherFiles []string `json:",omitempty"` + ExportFile string `json:",omitempty"` + Imports map[string]string `json:",omitempty"` +} + +// MarshalJSON returns the Package in its JSON form. +// For the most part, the structure fields are written out unmodified, and +// the type and syntax fields are skipped. +// The imports are written out as just a map of path to package id. +// The errors are written using a custom type that tries to preserve the +// structure of error types we know about. +// +// This method exists to enable support for additional build systems. It is +// not intended for use by clients of the API and we may change the format. +func (p *Package) MarshalJSON() ([]byte, error) { + flat := &flatPackage{ + ID: p.ID, + Name: p.Name, + PkgPath: p.PkgPath, + Errors: p.Errors, + GoFiles: p.GoFiles, + CompiledGoFiles: p.CompiledGoFiles, + OtherFiles: p.OtherFiles, + ExportFile: p.ExportFile, + } + if len(p.Imports) > 0 { + flat.Imports = make(map[string]string, len(p.Imports)) + for path, ipkg := range p.Imports { + flat.Imports[path] = ipkg.ID + } + } + return json.Marshal(flat) +} + +// UnmarshalJSON reads in a Package from its JSON format. +// See MarshalJSON for details about the format accepted. +func (p *Package) UnmarshalJSON(b []byte) error { + flat := &flatPackage{} + if err := json.Unmarshal(b, &flat); err != nil { + return err + } + *p = Package{ + ID: flat.ID, + Name: flat.Name, + PkgPath: flat.PkgPath, + Errors: flat.Errors, + GoFiles: flat.GoFiles, + CompiledGoFiles: flat.CompiledGoFiles, + OtherFiles: flat.OtherFiles, + ExportFile: flat.ExportFile, + } + if len(flat.Imports) > 0 { + p.Imports = make(map[string]*Package, len(flat.Imports)) + for path, id := range flat.Imports { + p.Imports[path] = &Package{ID: id} + } + } + return nil +} + +func (p *Package) String() string { return p.ID } + +// loaderPackage augments Package with state used during the loading phase +type loaderPackage struct { + *Package + importErrors map[string]error // maps each bad import to its error + loadOnce sync.Once + color uint8 // for cycle detection + needsrc bool // load from source (Mode >= LoadTypes) + needtypes bool // type information is either requested or depended on + initial bool // package was matched by a pattern +} + +// loader holds the working state of a single call to load. +type loader struct { + pkgs map[string]*loaderPackage + Config + sizes types.Sizes + exportMu sync.Mutex // enforces mutual exclusion of exportdata operations +} + +func newLoader(cfg *Config) *loader { + ld := &loader{} + if cfg != nil { + ld.Config = *cfg + } + if ld.Config.Env == nil { + ld.Config.Env = os.Environ() + } + if ld.Context == nil { + ld.Context = context.Background() + } + if ld.Dir == "" { + if dir, err := os.Getwd(); err == nil { + ld.Dir = dir + } + } + + if ld.Mode >= LoadTypes { + if ld.Fset == nil { + ld.Fset = token.NewFileSet() + } + + // ParseFile is required even in LoadTypes mode + // because we load source if export data is missing. + if ld.ParseFile == nil { + ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { + var isrc interface{} + if src != nil { + isrc = src + } + const mode = parser.AllErrors | parser.ParseComments + return parser.ParseFile(fset, filename, isrc, mode) + } + } + } + return ld +} + +// refine connects the supplied packages into a graph and then adds type and +// and syntax information as requested by the LoadMode. +func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) { + rootMap := make(map[string]int, len(roots)) + for i, root := range roots { + rootMap[root] = i + } + ld.pkgs = make(map[string]*loaderPackage) + // first pass, fixup and build the map and roots + var initial = make([]*loaderPackage, len(roots)) + for _, pkg := range list { + rootIndex := -1 + if i, found := rootMap[pkg.ID]; found { + rootIndex = i + } + lpkg := &loaderPackage{ + Package: pkg, + needtypes: ld.Mode >= LoadAllSyntax || + ld.Mode >= LoadTypes && rootIndex >= 0, + needsrc: ld.Mode >= LoadAllSyntax || + ld.Mode >= LoadSyntax && rootIndex >= 0 || + len(ld.Overlay) > 0 || // Overlays can invalidate export data. TODO(matloob): make this check fine-grained based on dependencies on overlaid files + pkg.ExportFile == "" && pkg.PkgPath != "unsafe", + } + ld.pkgs[lpkg.ID] = lpkg + if rootIndex >= 0 { + initial[rootIndex] = lpkg + lpkg.initial = true + } + } + for i, root := range roots { + if initial[i] == nil { + return nil, fmt.Errorf("root package %v is missing", root) + } + } + + // Materialize the import graph. + + const ( + white = 0 // new + grey = 1 // in progress + black = 2 // complete + ) + + // visit traverses the import graph, depth-first, + // and materializes the graph as Packages.Imports. + // + // Valid imports are saved in the Packages.Import map. + // Invalid imports (cycles and missing nodes) are saved in the importErrors map. + // Thus, even in the presence of both kinds of errors, the Import graph remains a DAG. + // + // visit returns whether the package needs src or has a transitive + // dependency on a package that does. These are the only packages + // for which we load source code. + var stack []*loaderPackage + var visit func(lpkg *loaderPackage) bool + var srcPkgs []*loaderPackage + visit = func(lpkg *loaderPackage) bool { + switch lpkg.color { + case black: + return lpkg.needsrc + case grey: + panic("internal error: grey node") + } + lpkg.color = grey + stack = append(stack, lpkg) // push + stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports + lpkg.Imports = make(map[string]*Package, len(stubs)) + for importPath, ipkg := range stubs { + var importErr error + imp := ld.pkgs[ipkg.ID] + if imp == nil { + // (includes package "C" when DisableCgo) + importErr = fmt.Errorf("missing package: %q", ipkg.ID) + } else if imp.color == grey { + importErr = fmt.Errorf("import cycle: %s", stack) + } + if importErr != nil { + if lpkg.importErrors == nil { + lpkg.importErrors = make(map[string]error) + } + lpkg.importErrors[importPath] = importErr + continue + } + + if visit(imp) { + lpkg.needsrc = true + } + lpkg.Imports[importPath] = imp.Package + } + if lpkg.needsrc { + srcPkgs = append(srcPkgs, lpkg) + } + stack = stack[:len(stack)-1] // pop + lpkg.color = black + + return lpkg.needsrc + } + + if ld.Mode < LoadImports { + //we do this to drop the stub import packages that we are not even going to try to resolve + for _, lpkg := range initial { + lpkg.Imports = nil + } + } else { + // For each initial package, create its import DAG. + for _, lpkg := range initial { + visit(lpkg) + } + } + for _, lpkg := range srcPkgs { + // Complete type information is required for the + // immediate dependencies of each source package. + for _, ipkg := range lpkg.Imports { + imp := ld.pkgs[ipkg.ID] + imp.needtypes = true + } + } + // Load type data if needed, starting at + // the initial packages (roots of the import DAG). + if ld.Mode >= LoadTypes { + var wg sync.WaitGroup + for _, lpkg := range initial { + wg.Add(1) + go func(lpkg *loaderPackage) { + ld.loadRecursive(lpkg) + wg.Done() + }(lpkg) + } + wg.Wait() + } + + result := make([]*Package, len(initial)) + for i, lpkg := range initial { + result[i] = lpkg.Package + } + return result, nil +} + +// loadRecursive loads the specified package and its dependencies, +// recursively, in parallel, in topological order. +// It is atomic and idempotent. +// Precondition: ld.Mode >= LoadTypes. +func (ld *loader) loadRecursive(lpkg *loaderPackage) { + lpkg.loadOnce.Do(func() { + // Load the direct dependencies, in parallel. + var wg sync.WaitGroup + for _, ipkg := range lpkg.Imports { + imp := ld.pkgs[ipkg.ID] + wg.Add(1) + go func(imp *loaderPackage) { + ld.loadRecursive(imp) + wg.Done() + }(imp) + } + wg.Wait() + + ld.loadPackage(lpkg) + }) +} + +// loadPackage loads the specified package. +// It must be called only once per Package, +// after immediate dependencies are loaded. +// Precondition: ld.Mode >= LoadTypes. +func (ld *loader) loadPackage(lpkg *loaderPackage) { + if lpkg.PkgPath == "unsafe" { + // Fill in the blanks to avoid surprises. + lpkg.Types = types.Unsafe + lpkg.Fset = ld.Fset + lpkg.Syntax = []*ast.File{} + lpkg.TypesInfo = new(types.Info) + lpkg.TypesSizes = ld.sizes + return + } + + // Call NewPackage directly with explicit name. + // This avoids skew between golist and go/types when the files' + // package declarations are inconsistent. + lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name) + lpkg.Fset = ld.Fset + + // Subtle: we populate all Types fields with an empty Package + // before loading export data so that export data processing + // never has to create a types.Package for an indirect dependency, + // which would then require that such created packages be explicitly + // inserted back into the Import graph as a final step after export data loading. + // The Diamond test exercises this case. + if !lpkg.needtypes { + return + } + if !lpkg.needsrc { + ld.loadFromExportData(lpkg) + return // not a source package, don't get syntax trees + } + + appendError := func(err error) { + // Convert various error types into the one true Error. + var errs []Error + switch err := err.(type) { + case Error: + // from driver + errs = append(errs, err) + + case *os.PathError: + // from parser + errs = append(errs, Error{ + Pos: err.Path + ":1", + Msg: err.Err.Error(), + Kind: ParseError, + }) + + case scanner.ErrorList: + // from parser + for _, err := range err { + errs = append(errs, Error{ + Pos: err.Pos.String(), + Msg: err.Msg, + Kind: ParseError, + }) + } + + case types.Error: + // from type checker + errs = append(errs, Error{ + Pos: err.Fset.Position(err.Pos).String(), + Msg: err.Msg, + Kind: TypeError, + }) + + default: + // unexpected impoverished error from parser? + errs = append(errs, Error{ + Pos: "-", + Msg: err.Error(), + Kind: UnknownError, + }) + + // If you see this error message, please file a bug. + log.Printf("internal error: error %q (%T) without position", err, err) + } + + lpkg.Errors = append(lpkg.Errors, errs...) + } + + files, errs := ld.parseFiles(lpkg.CompiledGoFiles) + for _, err := range errs { + appendError(err) + } + + lpkg.Syntax = files + + lpkg.TypesInfo = &types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), + Uses: make(map[*ast.Ident]types.Object), + Implicits: make(map[ast.Node]types.Object), + Scopes: make(map[ast.Node]*types.Scope), + Selections: make(map[*ast.SelectorExpr]*types.Selection), + } + lpkg.TypesSizes = ld.sizes + + importer := importerFunc(func(path string) (*types.Package, error) { + if path == "unsafe" { + return types.Unsafe, nil + } + + // The imports map is keyed by import path. + ipkg := lpkg.Imports[path] + if ipkg == nil { + if err := lpkg.importErrors[path]; err != nil { + return nil, err + } + // There was skew between the metadata and the + // import declarations, likely due to an edit + // race, or because the ParseFile feature was + // used to supply alternative file contents. + return nil, fmt.Errorf("no metadata for %s", path) + } + + if ipkg.Types != nil && ipkg.Types.Complete() { + return ipkg.Types, nil + } + log.Fatalf("internal error: nil Pkg importing %q from %q", path, lpkg) + panic("unreachable") + }) + + // type-check + tc := &types.Config{ + Importer: importer, + + // Type-check bodies of functions only in non-initial packages. + // Example: for import graph A->B->C and initial packages {A,C}, + // we can ignore function bodies in B. + IgnoreFuncBodies: ld.Mode < LoadAllSyntax && !lpkg.initial, + + Error: appendError, + Sizes: ld.sizes, + } + types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax) + + lpkg.importErrors = nil // no longer needed + + // If !Cgo, the type-checker uses FakeImportC mode, so + // it doesn't invoke the importer for import "C", + // nor report an error for the import, + // or for any undefined C.f reference. + // We must detect this explicitly and correctly + // mark the package as IllTyped (by reporting an error). + // TODO(adonovan): if these errors are annoying, + // we could just set IllTyped quietly. + if tc.FakeImportC { + outer: + for _, f := range lpkg.Syntax { + for _, imp := range f.Imports { + if imp.Path.Value == `"C"` { + err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`} + appendError(err) + break outer + } + } + } + } + + // Record accumulated errors. + illTyped := len(lpkg.Errors) > 0 + if !illTyped { + for _, imp := range lpkg.Imports { + if imp.IllTyped { + illTyped = true + break + } + } + } + lpkg.IllTyped = illTyped +} + +// An importFunc is an implementation of the single-method +// types.Importer interface based on a function value. +type importerFunc func(path string) (*types.Package, error) + +func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } + +// We use a counting semaphore to limit +// the number of parallel I/O calls per process. +var ioLimit = make(chan bool, 20) + +// parseFiles reads and parses the Go source files and returns the ASTs +// of the ones that could be at least partially parsed, along with a +// list of I/O and parse errors encountered. +// +// Because files are scanned in parallel, the token.Pos +// positions of the resulting ast.Files are not ordered. +// +func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { + var wg sync.WaitGroup + n := len(filenames) + parsed := make([]*ast.File, n) + errors := make([]error, n) + for i, file := range filenames { + if ld.Config.Context.Err() != nil { + parsed[i] = nil + errors[i] = ld.Config.Context.Err() + continue + } + wg.Add(1) + go func(i int, filename string) { + ioLimit <- true // wait + // ParseFile may return both an AST and an error. + var src []byte + for f, contents := range ld.Config.Overlay { + if sameFile(f, filename) { + src = contents + } + } + var err error + if src == nil { + src, err = ioutil.ReadFile(filename) + } + if err != nil { + parsed[i], errors[i] = nil, err + } else { + parsed[i], errors[i] = ld.ParseFile(ld.Fset, filename, src) + } + <-ioLimit // signal + wg.Done() + }(i, file) + } + wg.Wait() + + // Eliminate nils, preserving order. + var o int + for _, f := range parsed { + if f != nil { + parsed[o] = f + o++ + } + } + parsed = parsed[:o] + + o = 0 + for _, err := range errors { + if err != nil { + errors[o] = err + o++ + } + } + errors = errors[:o] + + return parsed, errors +} + +// sameFile returns true if x and y have the same basename and denote +// the same file. +// +func sameFile(x, y string) bool { + if x == y { + // It could be the case that y doesn't exist. + // For instance, it may be an overlay file that + // hasn't been written to disk. To handle that case + // let x == y through. (We added the exact absolute path + // string to the CompiledGoFiles list, so the unwritten + // overlay case implies x==y.) + return true + } + if filepath.Base(x) == filepath.Base(y) { // (optimisation) + if xi, err := os.Stat(x); err == nil { + if yi, err := os.Stat(y); err == nil { + return os.SameFile(xi, yi) + } + } + } + return false +} + +// loadFromExportData returns type information for the specified +// package, loading it from an export data file on the first request. +func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error) { + if lpkg.PkgPath == "" { + log.Fatalf("internal error: Package %s has no PkgPath", lpkg) + } + + // Because gcexportdata.Read has the potential to create or + // modify the types.Package for each node in the transitive + // closure of dependencies of lpkg, all exportdata operations + // must be sequential. (Finer-grained locking would require + // changes to the gcexportdata API.) + // + // The exportMu lock guards the Package.Pkg field and the + // types.Package it points to, for each Package in the graph. + // + // Not all accesses to Package.Pkg need to be protected by exportMu: + // graph ordering ensures that direct dependencies of source + // packages are fully loaded before the importer reads their Pkg field. + ld.exportMu.Lock() + defer ld.exportMu.Unlock() + + if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() { + return tpkg, nil // cache hit + } + + lpkg.IllTyped = true // fail safe + + if lpkg.ExportFile == "" { + // Errors while building export data will have been printed to stderr. + return nil, fmt.Errorf("no export data file") + } + f, err := os.Open(lpkg.ExportFile) + if err != nil { + return nil, err + } + defer f.Close() + + // Read gc export data. + // + // We don't currently support gccgo export data because all + // underlying workspaces use the gc toolchain. (Even build + // systems that support gccgo don't use it for workspace + // queries.) + r, err := gcexportdata.NewReader(f) + if err != nil { + return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) + } + + // Build the view. + // + // The gcexportdata machinery has no concept of package ID. + // It identifies packages by their PkgPath, which although not + // globally unique is unique within the scope of one invocation + // of the linker, type-checker, or gcexportdata. + // + // So, we must build a PkgPath-keyed view of the global + // (conceptually ID-keyed) cache of packages and pass it to + // gcexportdata. The view must contain every existing + // package that might possibly be mentioned by the + // current package---its transitive closure. + // + // In loadPackage, we unconditionally create a types.Package for + // each dependency so that export data loading does not + // create new ones. + // + // TODO(adonovan): it would be simpler and more efficient + // if the export data machinery invoked a callback to + // get-or-create a package instead of a map. + // + view := make(map[string]*types.Package) // view seen by gcexportdata + seen := make(map[*loaderPackage]bool) // all visited packages + var visit func(pkgs map[string]*Package) + visit = func(pkgs map[string]*Package) { + for _, p := range pkgs { + lpkg := ld.pkgs[p.ID] + if !seen[lpkg] { + seen[lpkg] = true + view[lpkg.PkgPath] = lpkg.Types + visit(lpkg.Imports) + } + } + } + visit(lpkg.Imports) + + viewLen := len(view) + 1 // adding the self package + // Parse the export data. + // (May modify incomplete packages in view but not create new ones.) + tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath) + if err != nil { + return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) + } + if viewLen != len(view) { + log.Fatalf("Unexpected package creation during export data loading") + } + + lpkg.Types = tpkg + lpkg.IllTyped = false + + return tpkg, nil +} + +func usesExportData(cfg *Config) bool { + return LoadTypes <= cfg.Mode && cfg.Mode < LoadAllSyntax +} diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go new file mode 100644 index 00000000000..b13cb081fcb --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/visit.go @@ -0,0 +1,55 @@ +package packages + +import ( + "fmt" + "os" + "sort" +) + +// Visit visits all the packages in the import graph whose roots are +// pkgs, calling the optional pre function the first time each package +// is encountered (preorder), and the optional post function after a +// package's dependencies have been visited (postorder). +// The boolean result of pre(pkg) determines whether +// the imports of package pkg are visited. +func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) { + seen := make(map[*Package]bool) + var visit func(*Package) + visit = func(pkg *Package) { + if !seen[pkg] { + seen[pkg] = true + + if pre == nil || pre(pkg) { + paths := make([]string, 0, len(pkg.Imports)) + for path := range pkg.Imports { + paths = append(paths, path) + } + sort.Strings(paths) // Imports is a map, this makes visit stable + for _, path := range paths { + visit(pkg.Imports[path]) + } + } + + if post != nil { + post(pkg) + } + } + } + for _, pkg := range pkgs { + visit(pkg) + } +} + +// PrintErrors prints to os.Stderr the accumulated errors of all +// packages in the import graph rooted at pkgs, dependencies first. +// PrintErrors returns the number of errors printed. +func PrintErrors(pkgs []*Package) int { + var n int + Visit(pkgs, nil, func(pkg *Package) { + for _, err := range pkg.Errors { + fmt.Fprintln(os.Stderr, err) + n++ + } + }) + return n +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/vendor/golang.org/x/tools/go/types/typeutil/callee.go new file mode 100644 index 00000000000..38f596daf9e --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/callee.go @@ -0,0 +1,46 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typeutil + +import ( + "go/ast" + "go/types" + + "golang.org/x/tools/go/ast/astutil" +) + +// Callee returns the named target of a function call, if any: +// a function, method, builtin, or variable. +func Callee(info *types.Info, call *ast.CallExpr) types.Object { + var obj types.Object + switch fun := astutil.Unparen(call.Fun).(type) { + case *ast.Ident: + obj = info.Uses[fun] // type, var, builtin, or declared func + case *ast.SelectorExpr: + if sel, ok := info.Selections[fun]; ok { + obj = sel.Obj() // method or field + } else { + obj = info.Uses[fun.Sel] // qualified identifier? + } + } + if _, ok := obj.(*types.TypeName); ok { + return nil // T(x) is a conversion, not a call + } + return obj +} + +// StaticCallee returns the target (function or method) of a static +// function call, if any. It returns nil for calls to builtins. +func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { + if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) { + return f + } + return nil +} + +func interfaceMethod(f *types.Func) bool { + recv := f.Type().(*types.Signature).Recv() + return recv != nil && types.IsInterface(recv.Type()) +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/imports.go b/vendor/golang.org/x/tools/go/types/typeutil/imports.go new file mode 100644 index 00000000000..9c441dba9c0 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/imports.go @@ -0,0 +1,31 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typeutil + +import "go/types" + +// Dependencies returns all dependencies of the specified packages. +// +// Dependent packages appear in topological order: if package P imports +// package Q, Q appears earlier than P in the result. +// The algorithm follows import statements in the order they +// appear in the source code, so the result is a total order. +// +func Dependencies(pkgs ...*types.Package) []*types.Package { + var result []*types.Package + seen := make(map[*types.Package]bool) + var visit func(pkgs []*types.Package) + visit = func(pkgs []*types.Package) { + for _, p := range pkgs { + if !seen[p] { + seen[p] = true + visit(p.Imports()) + result = append(result, p) + } + } + } + visit(pkgs) + return result +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go new file mode 100644 index 00000000000..c7f75450064 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/map.go @@ -0,0 +1,313 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package typeutil defines various utilities for types, such as Map, +// a mapping from types.Type to interface{} values. +package typeutil // import "golang.org/x/tools/go/types/typeutil" + +import ( + "bytes" + "fmt" + "go/types" + "reflect" +) + +// Map is a hash-table-based mapping from types (types.Type) to +// arbitrary interface{} values. The concrete types that implement +// the Type interface are pointers. Since they are not canonicalized, +// == cannot be used to check for equivalence, and thus we cannot +// simply use a Go map. +// +// Just as with map[K]V, a nil *Map is a valid empty map. +// +// Not thread-safe. +// +type Map struct { + hasher Hasher // shared by many Maps + table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused + length int // number of map entries +} + +// entry is an entry (key/value association) in a hash bucket. +type entry struct { + key types.Type + value interface{} +} + +// SetHasher sets the hasher used by Map. +// +// All Hashers are functionally equivalent but contain internal state +// used to cache the results of hashing previously seen types. +// +// A single Hasher created by MakeHasher() may be shared among many +// Maps. This is recommended if the instances have many keys in +// common, as it will amortize the cost of hash computation. +// +// A Hasher may grow without bound as new types are seen. Even when a +// type is deleted from the map, the Hasher never shrinks, since other +// types in the map may reference the deleted type indirectly. +// +// Hashers are not thread-safe, and read-only operations such as +// Map.Lookup require updates to the hasher, so a full Mutex lock (not a +// read-lock) is require around all Map operations if a shared +// hasher is accessed from multiple threads. +// +// If SetHasher is not called, the Map will create a private hasher at +// the first call to Insert. +// +func (m *Map) SetHasher(hasher Hasher) { + m.hasher = hasher +} + +// Delete removes the entry with the given key, if any. +// It returns true if the entry was found. +// +func (m *Map) Delete(key types.Type) bool { + if m != nil && m.table != nil { + hash := m.hasher.Hash(key) + bucket := m.table[hash] + for i, e := range bucket { + if e.key != nil && types.Identical(key, e.key) { + // We can't compact the bucket as it + // would disturb iterators. + bucket[i] = entry{} + m.length-- + return true + } + } + } + return false +} + +// At returns the map entry for the given key. +// The result is nil if the entry is not present. +// +func (m *Map) At(key types.Type) interface{} { + if m != nil && m.table != nil { + for _, e := range m.table[m.hasher.Hash(key)] { + if e.key != nil && types.Identical(key, e.key) { + return e.value + } + } + } + return nil +} + +// Set sets the map entry for key to val, +// and returns the previous entry, if any. +func (m *Map) Set(key types.Type, value interface{}) (prev interface{}) { + if m.table != nil { + hash := m.hasher.Hash(key) + bucket := m.table[hash] + var hole *entry + for i, e := range bucket { + if e.key == nil { + hole = &bucket[i] + } else if types.Identical(key, e.key) { + prev = e.value + bucket[i].value = value + return + } + } + + if hole != nil { + *hole = entry{key, value} // overwrite deleted entry + } else { + m.table[hash] = append(bucket, entry{key, value}) + } + } else { + if m.hasher.memo == nil { + m.hasher = MakeHasher() + } + hash := m.hasher.Hash(key) + m.table = map[uint32][]entry{hash: {entry{key, value}}} + } + + m.length++ + return +} + +// Len returns the number of map entries. +func (m *Map) Len() int { + if m != nil { + return m.length + } + return 0 +} + +// Iterate calls function f on each entry in the map in unspecified order. +// +// If f should mutate the map, Iterate provides the same guarantees as +// Go maps: if f deletes a map entry that Iterate has not yet reached, +// f will not be invoked for it, but if f inserts a map entry that +// Iterate has not yet reached, whether or not f will be invoked for +// it is unspecified. +// +func (m *Map) Iterate(f func(key types.Type, value interface{})) { + if m != nil { + for _, bucket := range m.table { + for _, e := range bucket { + if e.key != nil { + f(e.key, e.value) + } + } + } + } +} + +// Keys returns a new slice containing the set of map keys. +// The order is unspecified. +func (m *Map) Keys() []types.Type { + keys := make([]types.Type, 0, m.Len()) + m.Iterate(func(key types.Type, _ interface{}) { + keys = append(keys, key) + }) + return keys +} + +func (m *Map) toString(values bool) string { + if m == nil { + return "{}" + } + var buf bytes.Buffer + fmt.Fprint(&buf, "{") + sep := "" + m.Iterate(func(key types.Type, value interface{}) { + fmt.Fprint(&buf, sep) + sep = ", " + fmt.Fprint(&buf, key) + if values { + fmt.Fprintf(&buf, ": %q", value) + } + }) + fmt.Fprint(&buf, "}") + return buf.String() +} + +// String returns a string representation of the map's entries. +// Values are printed using fmt.Sprintf("%v", v). +// Order is unspecified. +// +func (m *Map) String() string { + return m.toString(true) +} + +// KeysString returns a string representation of the map's key set. +// Order is unspecified. +// +func (m *Map) KeysString() string { + return m.toString(false) +} + +//////////////////////////////////////////////////////////////////////// +// Hasher + +// A Hasher maps each type to its hash value. +// For efficiency, a hasher uses memoization; thus its memory +// footprint grows monotonically over time. +// Hashers are not thread-safe. +// Hashers have reference semantics. +// Call MakeHasher to create a Hasher. +type Hasher struct { + memo map[types.Type]uint32 +} + +// MakeHasher returns a new Hasher instance. +func MakeHasher() Hasher { + return Hasher{make(map[types.Type]uint32)} +} + +// Hash computes a hash value for the given type t such that +// Identical(t, t') => Hash(t) == Hash(t'). +func (h Hasher) Hash(t types.Type) uint32 { + hash, ok := h.memo[t] + if !ok { + hash = h.hashFor(t) + h.memo[t] = hash + } + return hash +} + +// hashString computes the Fowler–Noll–Vo hash of s. +func hashString(s string) uint32 { + var h uint32 + for i := 0; i < len(s); i++ { + h ^= uint32(s[i]) + h *= 16777619 + } + return h +} + +// hashFor computes the hash of t. +func (h Hasher) hashFor(t types.Type) uint32 { + // See Identical for rationale. + switch t := t.(type) { + case *types.Basic: + return uint32(t.Kind()) + + case *types.Array: + return 9043 + 2*uint32(t.Len()) + 3*h.Hash(t.Elem()) + + case *types.Slice: + return 9049 + 2*h.Hash(t.Elem()) + + case *types.Struct: + var hash uint32 = 9059 + for i, n := 0, t.NumFields(); i < n; i++ { + f := t.Field(i) + if f.Anonymous() { + hash += 8861 + } + hash += hashString(t.Tag(i)) + hash += hashString(f.Name()) // (ignore f.Pkg) + hash += h.Hash(f.Type()) + } + return hash + + case *types.Pointer: + return 9067 + 2*h.Hash(t.Elem()) + + case *types.Signature: + var hash uint32 = 9091 + if t.Variadic() { + hash *= 8863 + } + return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) + + case *types.Interface: + var hash uint32 = 9103 + for i, n := 0, t.NumMethods(); i < n; i++ { + // See go/types.identicalMethods for rationale. + // Method order is not significant. + // Ignore m.Pkg(). + m := t.Method(i) + hash += 3*hashString(m.Name()) + 5*h.Hash(m.Type()) + } + return hash + + case *types.Map: + return 9109 + 2*h.Hash(t.Key()) + 3*h.Hash(t.Elem()) + + case *types.Chan: + return 9127 + 2*uint32(t.Dir()) + 3*h.Hash(t.Elem()) + + case *types.Named: + // Not safe with a copying GC; objects may move. + return uint32(reflect.ValueOf(t.Obj()).Pointer()) + + case *types.Tuple: + return h.hashTuple(t) + } + panic(t) +} + +func (h Hasher) hashTuple(tuple *types.Tuple) uint32 { + // See go/types.identicalTypes for rationale. + n := tuple.Len() + var hash uint32 = 9137 + 2*uint32(n) + for i := 0; i < n; i++ { + hash += 3 * h.Hash(tuple.At(i).Type()) + } + return hash +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go new file mode 100644 index 00000000000..32084610f49 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go @@ -0,0 +1,72 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file implements a cache of method sets. + +package typeutil + +import ( + "go/types" + "sync" +) + +// A MethodSetCache records the method set of each type T for which +// MethodSet(T) is called so that repeat queries are fast. +// The zero value is a ready-to-use cache instance. +type MethodSetCache struct { + mu sync.Mutex + named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N + others map[types.Type]*types.MethodSet // all other types +} + +// MethodSet returns the method set of type T. It is thread-safe. +// +// If cache is nil, this function is equivalent to types.NewMethodSet(T). +// Utility functions can thus expose an optional *MethodSetCache +// parameter to clients that care about performance. +// +func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet { + if cache == nil { + return types.NewMethodSet(T) + } + cache.mu.Lock() + defer cache.mu.Unlock() + + switch T := T.(type) { + case *types.Named: + return cache.lookupNamed(T).value + + case *types.Pointer: + if N, ok := T.Elem().(*types.Named); ok { + return cache.lookupNamed(N).pointer + } + } + + // all other types + // (The map uses pointer equivalence, not type identity.) + mset := cache.others[T] + if mset == nil { + mset = types.NewMethodSet(T) + if cache.others == nil { + cache.others = make(map[types.Type]*types.MethodSet) + } + cache.others[T] = mset + } + return mset +} + +func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } { + if cache.named == nil { + cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet }) + } + // Avoid recomputing mset(*T) for each distinct Pointer + // instance whose underlying type is a named type. + msets, ok := cache.named[named] + if !ok { + msets.value = types.NewMethodSet(named) + msets.pointer = types.NewMethodSet(types.NewPointer(named)) + cache.named[named] = msets + } + return msets +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/ui.go b/vendor/golang.org/x/tools/go/types/typeutil/ui.go new file mode 100644 index 00000000000..9849c24cef3 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/ui.go @@ -0,0 +1,52 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typeutil + +// This file defines utilities for user interfaces that display types. + +import "go/types" + +// IntuitiveMethodSet returns the intuitive method set of a type T, +// which is the set of methods you can call on an addressable value of +// that type. +// +// The result always contains MethodSet(T), and is exactly MethodSet(T) +// for interface types and for pointer-to-concrete types. +// For all other concrete types T, the result additionally +// contains each method belonging to *T if there is no identically +// named method on T itself. +// +// This corresponds to user intuition about method sets; +// this function is intended only for user interfaces. +// +// The order of the result is as for types.MethodSet(T). +// +func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection { + isPointerToConcrete := func(T types.Type) bool { + ptr, ok := T.(*types.Pointer) + return ok && !types.IsInterface(ptr.Elem()) + } + + var result []*types.Selection + mset := msets.MethodSet(T) + if types.IsInterface(T) || isPointerToConcrete(T) { + for i, n := 0, mset.Len(); i < n; i++ { + result = append(result, mset.At(i)) + } + } else { + // T is some other concrete type. + // Report methods of T and *T, preferring those of T. + pmset := msets.MethodSet(types.NewPointer(T)) + for i, n := 0, pmset.Len(); i < n; i++ { + meth := pmset.At(i) + if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil { + meth = m + } + result = append(result, meth) + } + + } + return result +} diff --git a/vendor/golang.org/x/tools/imports/fix.go b/vendor/golang.org/x/tools/imports/fix.go index 61a5f062a62..4c0339305db 100644 --- a/vendor/golang.org/x/tools/imports/fix.go +++ b/vendor/golang.org/x/tools/imports/fix.go @@ -5,8 +5,8 @@ package imports import ( - "bufio" "bytes" + "context" "fmt" "go/ast" "go/build" @@ -15,33 +15,45 @@ import ( "io/ioutil" "log" "os" + "os/exec" "path" "path/filepath" "sort" + "strconv" "strings" "sync" + "time" + "unicode" + "unicode/utf8" "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/go/packages" + "golang.org/x/tools/internal/gopathwalk" ) // Debug controls verbose logging. var Debug = false -var ( - inTests = false // set true by fix_test.go; if false, no need to use testMu - testMu sync.RWMutex // guards globals reset by tests; used only if inTests -) - -// If set, LocalPrefix instructs Process to sort import paths with the given -// prefix into another group after 3rd-party packages. +// LocalPrefix is a comma-separated string of import path prefixes, which, if +// set, instructs Process to sort the import paths with the given prefixes +// into another group after 3rd-party packages. var LocalPrefix string +func localPrefixes() []string { + if LocalPrefix != "" { + return strings.Split(LocalPrefix, ",") + } + return nil +} + // importToGroup is a list of functions which map from an import path to // a group number. var importToGroup = []func(importPath string) (num int, ok bool){ func(importPath string) (num int, ok bool) { - if LocalPrefix != "" && strings.HasPrefix(importPath, LocalPrefix) { - return 3, true + for _, p := range localPrefixes() { + if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath { + return 3, true + } } return }, @@ -68,33 +80,32 @@ func importGroup(importPath string) int { return 0 } -// packageInfo is a summary of features found in a package. -type packageInfo struct { - Globals map[string]bool // symbol => true +// An importInfo represents a single import statement. +type importInfo struct { + importPath string // import path, e.g. "crypto/rand". + name string // import name, e.g. "crand", or "" if none. } -// dirPackageInfo exposes the dirPackageInfoFile function so that it can be overridden. -var dirPackageInfo = dirPackageInfoFile +// A packageInfo represents what's known about a package. +type packageInfo struct { + name string // real package name, if known. + exports map[string]bool // known exports. +} -// dirPackageInfoFile gets information from other files in the package. -func dirPackageInfoFile(pkgName, srcDir, filename string) (*packageInfo, error) { +// parseOtherFiles parses all the Go files in srcDir except filename, including +// test files if filename looks like a test. +func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { + // This could use go/packages but it doesn't buy much, and it fails + // with https://golang.org/issue/26296 in LoadFiles mode in some cases. considerTests := strings.HasSuffix(filename, "_test.go") - // Handle file from stdin - if _, err := os.Stat(filename); err != nil { - if os.IsNotExist(err) { - return &packageInfo{}, nil - } - return nil, err - } - fileBase := filepath.Base(filename) packageFileInfos, err := ioutil.ReadDir(srcDir) if err != nil { - return nil, err + return nil } - info := &packageInfo{Globals: make(map[string]bool)} + var files []*ast.File for _, fi := range packageFileInfos { if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") { continue @@ -103,193 +114,706 @@ func dirPackageInfoFile(pkgName, srcDir, filename string) (*packageInfo, error) continue } - fileSet := token.NewFileSet() - root, err := parser.ParseFile(fileSet, filepath.Join(srcDir, fi.Name()), nil, 0) + f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, 0) if err != nil { continue } - for _, decl := range root.Decls { - genDecl, ok := decl.(*ast.GenDecl) + files = append(files, f) + } + + return files +} + +// addGlobals puts the names of package vars into the provided map. +func addGlobals(f *ast.File, globals map[string]bool) { + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + + for _, spec := range genDecl.Specs { + valueSpec, ok := spec.(*ast.ValueSpec) if !ok { continue } - - for _, spec := range genDecl.Specs { - valueSpec, ok := spec.(*ast.ValueSpec) - if !ok { - continue - } - info.Globals[valueSpec.Names[0].Name] = true - } + globals[valueSpec.Names[0].Name] = true } } - return info, nil } -func fixImports(fset *token.FileSet, f *ast.File, filename string) (added []string, err error) { - // refs are a set of possible package references currently unsatisfied by imports. - // first key: either base package (e.g. "fmt") or renamed package - // second key: referenced package symbol (e.g. "Println") - refs := make(map[string]map[string]bool) +// collectReferences builds a map of selector expressions, from +// left hand side (X) to a set of right hand sides (Sel). +func collectReferences(f *ast.File) references { + refs := references{} - // decls are the current package imports. key is base package or renamed package. - decls := make(map[string]*ast.ImportSpec) - - abs, err := filepath.Abs(filename) - if err != nil { - return nil, err - } - srcDir := filepath.Dir(abs) - if Debug { - log.Printf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) - } - - var packageInfo *packageInfo - var loadedPackageInfo bool - - // collect potential uses of packages. var visitor visitFn - visitor = visitFn(func(node ast.Node) ast.Visitor { + visitor = func(node ast.Node) ast.Visitor { if node == nil { return visitor } switch v := node.(type) { - case *ast.ImportSpec: - if v.Name != nil { - decls[v.Name.Name] = v - break - } - ipath := strings.Trim(v.Path.Value, `"`) - if ipath == "C" { - break - } - local := importPathToName(ipath, srcDir) - decls[local] = v case *ast.SelectorExpr: xident, ok := v.X.(*ast.Ident) if !ok { break } if xident.Obj != nil { - // if the parser can resolve it, it's not a package ref + // If the parser can resolve it, it's not a package ref. + break + } + if !ast.IsExported(v.Sel.Name) { + // Whatever this is, it's not exported from a package. break } pkgName := xident.Name - if refs[pkgName] == nil { - refs[pkgName] = make(map[string]bool) - } - if !loadedPackageInfo { - loadedPackageInfo = true - packageInfo, _ = dirPackageInfo(f.Name.Name, srcDir, filename) - } - if decls[pkgName] == nil && (packageInfo == nil || !packageInfo.Globals[pkgName]) { - refs[pkgName][v.Sel.Name] = true + r := refs[pkgName] + if r == nil { + r = make(map[string]bool) + refs[pkgName] = r } + r[v.Sel.Name] = true } return visitor - }) - ast.Walk(visitor, f) - - // Nil out any unused ImportSpecs, to be removed in following passes - unusedImport := map[string]string{} - for pkg, is := range decls { - if refs[pkg] == nil && pkg != "_" && pkg != "." { - name := "" - if is.Name != nil { - name = is.Name.Name - } - unusedImport[strings.Trim(is.Path.Value, `"`)] = name - } } - for ipath, name := range unusedImport { - if ipath == "C" { - // Don't remove cgo stuff. + ast.Walk(visitor, f) + return refs +} + +// collectImports returns all the imports in f, keyed by their package name as +// determined by pathToName. Unnamed imports (., _) and "C" are ignored. +func collectImports(f *ast.File) []*importInfo { + var imports []*importInfo + for _, imp := range f.Imports { + var name string + if imp.Name != nil { + name = imp.Name.Name + } + if imp.Path.Value == `"C"` || name == "_" || name == "." { continue } - astutil.DeleteNamedImport(fset, f, name, ipath) + path := strings.Trim(imp.Path.Value, `"`) + imports = append(imports, &importInfo{ + name: name, + importPath: path, + }) + } + return imports +} + +// findMissingImport searches pass's candidates for an import that provides +// pkg, containing all of syms. +func (p *pass) findMissingImport(pkg string, syms map[string]bool) *importInfo { + for _, candidate := range p.candidates { + pkgInfo, ok := p.knownPackages[candidate.importPath] + if !ok { + continue + } + if p.importIdentifier(candidate) != pkg { + continue + } + + allFound := true + for right := range syms { + if !pkgInfo.exports[right] { + allFound = false + break + } + } + + if allFound { + return candidate + } + } + return nil +} + +// references is set of references found in a Go file. The first map key is the +// left hand side of a selector expression, the second key is the right hand +// side, and the value should always be true. +type references map[string]map[string]bool + +// A pass contains all the inputs and state necessary to fix a file's imports. +// It can be modified in some ways during use; see comments below. +type pass struct { + // Inputs. These must be set before a call to load, and not modified after. + fset *token.FileSet // fset used to parse f and its siblings. + f *ast.File // the file being fixed. + srcDir string // the directory containing f. + fixEnv *fixEnv // the environment to use for go commands, etc. + loadRealPackageNames bool // if true, load package names from disk rather than guessing them. + otherFiles []*ast.File // sibling files. + + // Intermediate state, generated by load. + existingImports map[string]*importInfo + allRefs references + missingRefs references + + // Inputs to fix. These can be augmented between successive fix calls. + lastTry bool // indicates that this is the last call and fix should clean up as best it can. + candidates []*importInfo // candidate imports in priority order. + knownPackages map[string]*packageInfo // information about all known packages. +} + +// loadPackageNames saves the package names for everything referenced by imports. +func (p *pass) loadPackageNames(imports []*importInfo) error { + var unknown []string + for _, imp := range imports { + if _, ok := p.knownPackages[imp.importPath]; ok { + continue + } + unknown = append(unknown, imp.importPath) } - for pkgName, symbols := range refs { - if len(symbols) == 0 { - // skip over packages already imported - delete(refs, pkgName) + names, err := p.fixEnv.getResolver().loadPackageNames(unknown, p.srcDir) + if err != nil { + return err + } + + for path, name := range names { + p.knownPackages[path] = &packageInfo{ + name: name, + exports: map[string]bool{}, } } + return nil +} + +// importIdentifier returns the identifier that imp will introduce. It will +// guess if the package name has not been loaded, e.g. because the source +// is not available. +func (p *pass) importIdentifier(imp *importInfo) string { + if imp.name != "" { + return imp.name + } + known := p.knownPackages[imp.importPath] + if known != nil && known.name != "" { + return known.name + } + return importPathToAssumedName(imp.importPath) +} + +// load reads in everything necessary to run a pass, and reports whether the +// file already has all the imports it needs. It fills in p.missingRefs with the +// file's missing symbols, if any, or removes unused imports if not. +func (p *pass) load() bool { + p.knownPackages = map[string]*packageInfo{} + p.missingRefs = references{} + p.existingImports = map[string]*importInfo{} + + // Load basic information about the file in question. + p.allRefs = collectReferences(p.f) + + // Load stuff from other files in the same package: + // global variables so we know they don't need resolving, and imports + // that we might want to mimic. + globals := map[string]bool{} + for _, otherFile := range p.otherFiles { + // Don't load globals from files that are in the same directory + // but a different package. Using them to suggest imports is OK. + if p.f.Name.Name == otherFile.Name.Name { + addGlobals(otherFile, globals) + } + p.candidates = append(p.candidates, collectImports(otherFile)...) + } + + // Resolve all the import paths we've seen to package names, and store + // f's imports by the identifier they introduce. + imports := collectImports(p.f) + if p.loadRealPackageNames { + err := p.loadPackageNames(append(imports, p.candidates...)) + if err != nil { + if Debug { + log.Printf("loading package names: %v", err) + } + return false + } + } + for _, imp := range imports { + p.existingImports[p.importIdentifier(imp)] = imp + } + + // Find missing references. + for left, rights := range p.allRefs { + if globals[left] { + continue + } + _, ok := p.existingImports[left] + if !ok { + p.missingRefs[left] = rights + continue + } + } + if len(p.missingRefs) != 0 { + return false + } + + return p.fix() +} + +// fix attempts to satisfy missing imports using p.candidates. If it finds +// everything, or if p.lastTry is true, it adds the imports it found, +// removes anything unused, and returns true. +func (p *pass) fix() bool { + // Find missing imports. + var selected []*importInfo + for left, rights := range p.missingRefs { + if imp := p.findMissingImport(left, rights); imp != nil { + selected = append(selected, imp) + } + } + + if !p.lastTry && len(selected) != len(p.missingRefs) { + return false + } + + // Found everything, or giving up. Add the new imports and remove any unused. + for _, imp := range p.existingImports { + // We deliberately ignore globals here, because we can't be sure + // they're in the same package. People do things like put multiple + // main packages in the same directory, and we don't want to + // remove imports if they happen to have the same name as a var in + // a different package. + if _, ok := p.allRefs[p.importIdentifier(imp)]; !ok { + astutil.DeleteNamedImport(p.fset, p.f, imp.name, imp.importPath) + } + } + + for _, imp := range selected { + astutil.AddNamedImport(p.fset, p.f, imp.name, imp.importPath) + } + + if p.loadRealPackageNames { + for _, imp := range p.f.Imports { + if imp.Name != nil { + continue + } + path := strings.Trim(imp.Path.Value, `""`) + ident := p.importIdentifier(&importInfo{importPath: path}) + if ident != importPathToAssumedName(path) { + imp.Name = &ast.Ident{Name: ident, NamePos: imp.Pos()} + } + } + } + + return true +} + +// assumeSiblingImportsValid assumes that siblings' use of packages is valid, +// adding the exports they use. +func (p *pass) assumeSiblingImportsValid() { + for _, f := range p.otherFiles { + refs := collectReferences(f) + imports := collectImports(f) + importsByName := map[string]*importInfo{} + for _, imp := range imports { + importsByName[p.importIdentifier(imp)] = imp + } + for left, rights := range refs { + if imp, ok := importsByName[left]; ok { + if _, ok := stdlib[imp.importPath]; ok { + // We have the stdlib in memory; no need to guess. + rights = stdlib[imp.importPath] + } + p.addCandidate(imp, &packageInfo{ + // no name; we already know it. + exports: rights, + }) + } + } + } +} + +// addCandidate adds a candidate import to p, and merges in the information +// in pkg. +func (p *pass) addCandidate(imp *importInfo, pkg *packageInfo) { + p.candidates = append(p.candidates, imp) + if existing, ok := p.knownPackages[imp.importPath]; ok { + if existing.name == "" { + existing.name = pkg.name + } + for export := range pkg.exports { + existing.exports[export] = true + } + } else { + p.knownPackages[imp.importPath] = pkg + } +} + +// fixImports adds and removes imports from f so that all its references are +// satisfied and there are no unused imports. +// +// This is declared as a variable rather than a function so goimports can +// easily be extended by adding a file with an init function. +var fixImports = fixImportsDefault + +func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *fixEnv) error { + abs, err := filepath.Abs(filename) + if err != nil { + return err + } + srcDir := filepath.Dir(abs) + if Debug { + log.Printf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) + } + + // First pass: looking only at f, and using the naive algorithm to + // derive package names from import paths, see if the file is already + // complete. We can't add any imports yet, because we don't know + // if missing references are actually package vars. + p := &pass{fset: fset, f: f, srcDir: srcDir} + if p.load() { + return nil + } + + otherFiles := parseOtherFiles(fset, srcDir, filename) + + // Second pass: add information from other files in the same package, + // like their package vars and imports. + p.otherFiles = otherFiles + if p.load() { + return nil + } + + // Now we can try adding imports from the stdlib. + p.assumeSiblingImportsValid() + addStdlibCandidates(p, p.missingRefs) + if p.fix() { + return nil + } + + // Third pass: get real package names where we had previously used + // the naive algorithm. This is the first step that will use the + // environment, so we provide it here for the first time. + p = &pass{fset: fset, f: f, srcDir: srcDir, fixEnv: env} + p.loadRealPackageNames = true + p.otherFiles = otherFiles + if p.load() { + return nil + } + + addStdlibCandidates(p, p.missingRefs) + p.assumeSiblingImportsValid() + if p.fix() { + return nil + } + + // Go look for candidates in $GOPATH, etc. We don't necessarily load + // the real exports of sibling imports, so keep assuming their contents. + if err := addExternalCandidates(p, p.missingRefs, filename); err != nil { + return err + } + + p.lastTry = true + p.fix() + return nil +} + +// fixEnv contains environment variables and settings that affect the use of +// the go command, the go/build package, etc. +type fixEnv struct { + // If non-empty, these will be used instead of the + // process-wide values. + GOPATH, GOROOT, GO111MODULE, GOPROXY, GOFLAGS string + WorkingDir string + + // If true, use go/packages regardless of the environment. + ForceGoPackages bool + + resolver resolver +} + +func (e *fixEnv) env() []string { + env := os.Environ() + add := func(k, v string) { + if v != "" { + env = append(env, k+"="+v) + } + } + add("GOPATH", e.GOPATH) + add("GOROOT", e.GOROOT) + add("GO111MODULE", e.GO111MODULE) + add("GOPROXY", e.GOPROXY) + add("GOFLAGS", e.GOFLAGS) + if e.WorkingDir != "" { + add("PWD", e.WorkingDir) + } + return env +} + +func (e *fixEnv) getResolver() resolver { + if e.resolver != nil { + return e.resolver + } + if e.ForceGoPackages { + return &goPackagesResolver{env: e} + } + + out, err := e.invokeGo("env", "GOMOD") + if err != nil || len(bytes.TrimSpace(out.Bytes())) == 0 { + return &gopathResolver{env: e} + } + return &moduleResolver{env: e} +} + +func (e *fixEnv) newPackagesConfig(mode packages.LoadMode) *packages.Config { + return &packages.Config{ + Mode: mode, + Dir: e.WorkingDir, + Env: e.env(), + } +} + +func (e *fixEnv) buildContext() *build.Context { + ctx := build.Default + ctx.GOROOT = e.GOROOT + ctx.GOPATH = e.GOPATH + return &ctx +} + +func (e *fixEnv) invokeGo(args ...string) (*bytes.Buffer, error) { + cmd := exec.Command("go", args...) + stdout := &bytes.Buffer{} + stderr := &bytes.Buffer{} + cmd.Stdout = stdout + cmd.Stderr = stderr + cmd.Env = e.env() + cmd.Dir = e.WorkingDir + + if Debug { + defer func(start time.Time) { log.Printf("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) + } + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("running go: %v (stderr:\n%s)", err, stderr) + } + return stdout, nil +} + +func cmdDebugStr(cmd *exec.Cmd) string { + env := make(map[string]string) + for _, kv := range cmd.Env { + split := strings.Split(kv, "=") + k, v := split[0], split[1] + env[k] = v + } + + return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v go %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], cmd.Args) +} + +func addStdlibCandidates(pass *pass, refs references) { + add := func(pkg string) { + pass.addCandidate( + &importInfo{importPath: pkg}, + &packageInfo{name: path.Base(pkg), exports: stdlib[pkg]}) + } + for left := range refs { + if left == "rand" { + // Make sure we try crypto/rand before math/rand. + add("crypto/rand") + add("math/rand") + continue + } + for importPath := range stdlib { + if path.Base(importPath) == left { + add(importPath) + } + } + } +} + +// A resolver does the build-system-specific parts of goimports. +type resolver interface { + // loadPackageNames loads the package names in importPaths. + loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) + // scan finds (at least) the packages satisfying refs. The returned slice is unordered. + scan(refs references) ([]*pkg, error) +} + +// gopathResolver implements resolver for GOPATH and module workspaces using go/packages. +type goPackagesResolver struct { + env *fixEnv +} + +func (r *goPackagesResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + cfg := r.env.newPackagesConfig(packages.LoadFiles) + pkgs, err := packages.Load(cfg, importPaths...) + if err != nil { + return nil, err + } + names := map[string]string{} + for _, pkg := range pkgs { + names[VendorlessPath(pkg.PkgPath)] = pkg.Name + } + // We may not have found all the packages. Guess the rest. + for _, path := range importPaths { + if _, ok := names[path]; ok { + continue + } + names[path] = importPathToAssumedName(path) + } + return names, nil + +} + +func (r *goPackagesResolver) scan(refs references) ([]*pkg, error) { + var loadQueries []string + for pkgName := range refs { + loadQueries = append(loadQueries, "iamashamedtousethedisabledqueryname="+pkgName) + } + sort.Strings(loadQueries) + cfg := r.env.newPackagesConfig(packages.LoadFiles) + goPackages, err := packages.Load(cfg, loadQueries...) + if err != nil { + return nil, err + } + + var scan []*pkg + for _, goPackage := range goPackages { + scan = append(scan, &pkg{ + dir: filepath.Dir(goPackage.CompiledGoFiles[0]), + importPathShort: VendorlessPath(goPackage.PkgPath), + goPackage: goPackage, + }) + } + return scan, nil +} + +func addExternalCandidates(pass *pass, refs references, filename string) error { + dirScan, err := pass.fixEnv.getResolver().scan(refs) + if err != nil { + return err + } // Search for imports matching potential package references. - searches := 0 type result struct { - ipath string // import path (if err == nil) - name string // optional name to rename import as - err error - } - results := make(chan result) - for pkgName, symbols := range refs { - go func(pkgName string, symbols map[string]bool) { - ipath, rename, err := findImport(pkgName, symbols, filename) - r := result{ipath: ipath, err: err} - if rename { - r.name = pkgName - } - results <- r - }(pkgName, symbols) - searches++ - } - for i := 0; i < searches; i++ { - result := <-results - if result.err != nil { - return nil, result.err - } - if result.ipath != "" { - if result.name != "" { - astutil.AddNamedImport(fset, f, result.name, result.ipath) - } else { - astutil.AddImport(fset, f, result.ipath) - } - added = append(added, result.ipath) - } + imp *importInfo + pkg *packageInfo } + results := make(chan result, len(refs)) - return added, nil + ctx, cancel := context.WithCancel(context.TODO()) + var wg sync.WaitGroup + defer func() { + cancel() + wg.Wait() + }() + var ( + firstErr error + firstErrOnce sync.Once + ) + for pkgName, symbols := range refs { + wg.Add(1) + go func(pkgName string, symbols map[string]bool) { + defer wg.Done() + + found, err := findImport(ctx, pass.fixEnv, dirScan, pkgName, symbols, filename) + + if err != nil { + firstErrOnce.Do(func() { + firstErr = err + cancel() + }) + return + } + + if found == nil { + return // No matching package. + } + + imp := &importInfo{ + importPath: found.importPathShort, + } + + pkg := &packageInfo{ + name: pkgName, + exports: symbols, + } + results <- result{imp, pkg} + }(pkgName, symbols) + } + go func() { + wg.Wait() + close(results) + }() + + for result := range results { + pass.addCandidate(result.imp, result.pkg) + } + return firstErr } -// importPathToName returns the package name for the given import path. -var importPathToName func(importPath, srcDir string) (packageName string) = importPathToNameGoPath +// notIdentifier reports whether ch is an invalid identifier character. +func notIdentifier(ch rune) bool { + return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || + '0' <= ch && ch <= '9' || + ch == '_' || + ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch))) +} -// importPathToNameBasic assumes the package name is the base of import path. -func importPathToNameBasic(importPath, srcDir string) (packageName string) { - return path.Base(importPath) +// importPathToAssumedName returns the assumed package name of an import path. +// It does this using only string parsing of the import path. +// It picks the last element of the path that does not look like a major +// version, and then picks the valid identifier off the start of that element. +// It is used to determine if a local rename should be added to an import for +// clarity. +// This function could be moved to a standard package and exported if we want +// for use in other tools. +func importPathToAssumedName(importPath string) string { + base := path.Base(importPath) + if strings.HasPrefix(base, "v") { + if _, err := strconv.Atoi(base[1:]); err == nil { + dir := path.Dir(importPath) + if dir != "." { + base = path.Base(dir) + } + } + } + base = strings.TrimPrefix(base, "go-") + if i := strings.IndexFunc(base, notIdentifier); i >= 0 { + base = base[:i] + } + return base +} + +// gopathResolver implements resolver for GOPATH workspaces. +type gopathResolver struct { + env *fixEnv +} + +func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + names := map[string]string{} + for _, path := range importPaths { + names[path] = importPathToName(r.env, path, srcDir) + } + return names, nil } // importPathToNameGoPath finds out the actual package name, as declared in its .go files. -// If there's a problem, it falls back to using importPathToNameBasic. -func importPathToNameGoPath(importPath, srcDir string) (packageName string) { +// If there's a problem, it returns "". +func importPathToName(env *fixEnv, importPath, srcDir string) (packageName string) { // Fast path for standard library without going to disk. - if pkg, ok := stdImportPackage[importPath]; ok { - return pkg + if _, ok := stdlib[importPath]; ok { + return path.Base(importPath) // stdlib packages always match their paths. } - pkgName, err := importPathToNameGoPathParse(importPath, srcDir) - if Debug { - log.Printf("importPathToNameGoPathParse(%q, srcDir=%q) = %q, %v", importPath, srcDir, pkgName, err) + buildPkg, err := env.buildContext().Import(importPath, srcDir, build.FindOnly) + if err != nil { + return "" } - if err == nil { - return pkgName + pkgName, err := packageDirToName(buildPkg.Dir) + if err != nil { + return "" } - return importPathToNameBasic(importPath, srcDir) + return pkgName } -// importPathToNameGoPathParse is a faster version of build.Import if +// packageDirToName is a faster version of build.Import if // the only thing desired is the package name. It uses build.FindOnly // to find the directory and then only parses one file in the package, // trusting that the files in the directory are consistent. -func importPathToNameGoPathParse(importPath, srcDir string) (packageName string, err error) { - buildPkg, err := build.Import(importPath, srcDir, build.FindOnly) - if err != nil { - return "", err - } - d, err := os.Open(buildPkg.Dir) +func packageDirToName(dir string) (packageName string, err error) { + d, err := os.Open(dir) if err != nil { return "", err } @@ -309,7 +833,7 @@ func importPathToNameGoPathParse(importPath, srcDir string) (packageName string, continue } nfile++ - fullFile := filepath.Join(buildPkg.Dir, name) + fullFile := filepath.Join(dir, name) fset := token.NewFileSet() f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly) @@ -336,247 +860,80 @@ func importPathToNameGoPathParse(importPath, srcDir string) (packageName string, return "", fmt.Errorf("no importable package found in %d Go files", nfile) } -var stdImportPackage = map[string]string{} // "net/http" => "http" - -func init() { - // Nothing in the standard library has a package name not - // matching its import base name. - for _, pkg := range stdlib { - if _, ok := stdImportPackage[pkg]; !ok { - stdImportPackage[pkg] = path.Base(pkg) - } - } -} - -// Directory-scanning state. -var ( - // scanGoRootOnce guards calling scanGoRoot (for $GOROOT) - scanGoRootOnce sync.Once - // scanGoPathOnce guards calling scanGoPath (for $GOPATH) - scanGoPathOnce sync.Once - - // populateIgnoreOnce guards calling populateIgnore - populateIgnoreOnce sync.Once - ignoredDirs []os.FileInfo - - dirScanMu sync.RWMutex - dirScan map[string]*pkg // abs dir path => *pkg -) - type pkg struct { + goPackage *packages.Package dir string // absolute file path to pkg directory ("/usr/lib/go/src/net/http") - importPath string // full pkg import path ("net/http", "foo/bar/vendor/a/b") importPathShort string // vendorless import path ("net/http", "a/b") } -// byImportPathShortLength sorts by the short import path length, breaking ties on the -// import string itself. -type byImportPathShortLength []*pkg - -func (s byImportPathShortLength) Len() int { return len(s) } -func (s byImportPathShortLength) Less(i, j int) bool { - vi, vj := s[i].importPathShort, s[j].importPathShort - return len(vi) < len(vj) || (len(vi) == len(vj) && vi < vj) - -} -func (s byImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// guarded by populateIgnoreOnce; populates ignoredDirs. -func populateIgnore() { - for _, srcDir := range build.Default.SrcDirs() { - if srcDir == filepath.Join(build.Default.GOROOT, "src") { - continue - } - populateIgnoredDirs(srcDir) - } +type pkgDistance struct { + pkg *pkg + distance int // relative distance to target } -// populateIgnoredDirs reads an optional config file at /.goimportsignore -// of relative directories to ignore when scanning for go files. -// The provided path is one of the $GOPATH entries with "src" appended. -func populateIgnoredDirs(path string) { - file := filepath.Join(path, ".goimportsignore") - slurp, err := ioutil.ReadFile(file) - if Debug { - if err != nil { - log.Print(err) - } else { - log.Printf("Read %s", file) - } +// byDistanceOrImportPathShortLength sorts by relative distance breaking ties +// on the short import path length and then the import string itself. +type byDistanceOrImportPathShortLength []pkgDistance + +func (s byDistanceOrImportPathShortLength) Len() int { return len(s) } +func (s byDistanceOrImportPathShortLength) Less(i, j int) bool { + di, dj := s[i].distance, s[j].distance + if di == -1 { + return false } + if dj == -1 { + return true + } + if di != dj { + return di < dj + } + + vi, vj := s[i].pkg.importPathShort, s[j].pkg.importPathShort + if len(vi) != len(vj) { + return len(vi) < len(vj) + } + return vi < vj +} +func (s byDistanceOrImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func distance(basepath, targetpath string) int { + p, err := filepath.Rel(basepath, targetpath) if err != nil { - return + return -1 } - bs := bufio.NewScanner(bytes.NewReader(slurp)) - for bs.Scan() { - line := strings.TrimSpace(bs.Text()) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - full := filepath.Join(path, line) - if fi, err := os.Stat(full); err == nil { - ignoredDirs = append(ignoredDirs, fi) - if Debug { - log.Printf("Directory added to ignore list: %s", full) - } - } else if Debug { - log.Printf("Error statting entry in .goimportsignore: %v", err) - } + if p == "." { + return 0 } + return strings.Count(p, string(filepath.Separator)) + 1 } -func skipDir(fi os.FileInfo) bool { - for _, ignoredDir := range ignoredDirs { - if os.SameFile(fi, ignoredDir) { - return true +func (r *gopathResolver) scan(_ references) ([]*pkg, error) { + dupCheck := make(map[string]bool) + var result []*pkg + + var mu sync.Mutex + + add := func(root gopathwalk.Root, dir string) { + mu.Lock() + defer mu.Unlock() + + if _, dup := dupCheck[dir]; dup { + return } + dupCheck[dir] = true + importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):]) + result = append(result, &pkg{ + importPathShort: VendorlessPath(importpath), + dir: dir, + }) } - return false + gopathwalk.Walk(gopathwalk.SrcDirsRoots(r.env.buildContext()), add, gopathwalk.Options{Debug: Debug, ModulesEnabled: false}) + return result, nil } -// shouldTraverse reports whether the symlink fi should, found in dir, -// should be followed. It makes sure symlinks were never visited -// before to avoid symlink loops. -func shouldTraverse(dir string, fi os.FileInfo) bool { - path := filepath.Join(dir, fi.Name()) - target, err := filepath.EvalSymlinks(path) - if err != nil { - if !os.IsNotExist(err) { - fmt.Fprintln(os.Stderr, err) - } - return false - } - ts, err := os.Stat(target) - if err != nil { - fmt.Fprintln(os.Stderr, err) - return false - } - if !ts.IsDir() { - return false - } - if skipDir(ts) { - return false - } - // Check for symlink loops by statting each directory component - // and seeing if any are the same file as ts. - for { - parent := filepath.Dir(path) - if parent == path { - // Made it to the root without seeing a cycle. - // Use this symlink. - return true - } - parentInfo, err := os.Stat(parent) - if err != nil { - return false - } - if os.SameFile(ts, parentInfo) { - // Cycle. Don't traverse. - return false - } - path = parent - } - -} - -var testHookScanDir = func(dir string) {} - -var scanGoRootDone = make(chan struct{}) // closed when scanGoRoot is done - -func scanGoRoot() { - go func() { - scanGoDirs(true) - close(scanGoRootDone) - }() -} - -func scanGoPath() { scanGoDirs(false) } - -func scanGoDirs(goRoot bool) { - if Debug { - which := "$GOROOT" - if !goRoot { - which = "$GOPATH" - } - log.Printf("scanning " + which) - defer log.Printf("scanned " + which) - } - dirScanMu.Lock() - if dirScan == nil { - dirScan = make(map[string]*pkg) - } - dirScanMu.Unlock() - - for _, srcDir := range build.Default.SrcDirs() { - isGoroot := srcDir == filepath.Join(build.Default.GOROOT, "src") - if isGoroot != goRoot { - continue - } - testHookScanDir(srcDir) - walkFn := func(path string, typ os.FileMode) error { - dir := filepath.Dir(path) - if typ.IsRegular() { - if dir == srcDir { - // Doesn't make sense to have regular files - // directly in your $GOPATH/src or $GOROOT/src. - return nil - } - if !strings.HasSuffix(path, ".go") { - return nil - } - dirScanMu.Lock() - if _, dup := dirScan[dir]; !dup { - importpath := filepath.ToSlash(dir[len(srcDir)+len("/"):]) - dirScan[dir] = &pkg{ - importPath: importpath, - importPathShort: vendorlessImportPath(importpath), - dir: dir, - } - } - dirScanMu.Unlock() - return nil - } - if typ == os.ModeDir { - base := filepath.Base(path) - if base == "" || base[0] == '.' || base[0] == '_' || - base == "testdata" || base == "node_modules" { - return filepath.SkipDir - } - fi, err := os.Lstat(path) - if err == nil && skipDir(fi) { - if Debug { - log.Printf("skipping directory %q under %s", fi.Name(), dir) - } - return filepath.SkipDir - } - return nil - } - if typ == os.ModeSymlink { - base := filepath.Base(path) - if strings.HasPrefix(base, ".#") { - // Emacs noise. - return nil - } - fi, err := os.Lstat(path) - if err != nil { - // Just ignore it. - return nil - } - if shouldTraverse(dir, fi) { - return traverseLink - } - } - return nil - } - if err := fastWalk(srcDir, walkFn); err != nil { - log.Printf("goimports: scanning directory %v: %v", srcDir, err) - } - } -} - -// vendorlessImportPath returns the devendorized version of the provided import path. -// e.g. "foo/bar/vendor/a/b" => "a/b" -func vendorlessImportPath(ipath string) string { +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +func VendorlessPath(ipath string) string { // Devendorize for use in import statement. if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { return ipath[i+len("/vendor/"):] @@ -589,66 +946,72 @@ func vendorlessImportPath(ipath string) string { // loadExports returns the set of exported symbols in the package at dir. // It returns nil on error or if the package name in dir does not match expectPackage. -var loadExports func(expectPackage, dir string) map[string]bool = loadExportsGoPath - -func loadExportsGoPath(expectPackage, dir string) map[string]bool { +func loadExports(ctx context.Context, env *fixEnv, expectPackage string, pkg *pkg) (map[string]bool, error) { if Debug { - log.Printf("loading exports in dir %s (seeking package %s)", dir, expectPackage) + log.Printf("loading exports in dir %s (seeking package %s)", pkg.dir, expectPackage) } - exports := make(map[string]bool) - - ctx := build.Default - - // ReadDir is like ioutil.ReadDir, but only returns *.go files - // and filters out _test.go files since they're not relevant - // and only slow things down. - ctx.ReadDir = func(dir string) (notTests []os.FileInfo, err error) { - all, err := ioutil.ReadDir(dir) - if err != nil { - return nil, err - } - notTests = all[:0] - for _, fi := range all { - name := fi.Name() - if strings.HasSuffix(name, ".go") && !strings.HasSuffix(name, "_test.go") { - notTests = append(notTests, fi) + if pkg.goPackage != nil { + exports := map[string]bool{} + fset := token.NewFileSet() + for _, fname := range pkg.goPackage.CompiledGoFiles { + f, err := parser.ParseFile(fset, fname, nil, 0) + if err != nil { + return nil, fmt.Errorf("parsing %s: %v", fname, err) + } + for name := range f.Scope.Objects { + if ast.IsExported(name) { + exports[name] = true + } } } - return notTests, nil + return exports, nil } - files, err := ctx.ReadDir(dir) + exports := make(map[string]bool) + + // Look for non-test, buildable .go files which could provide exports. + all, err := ioutil.ReadDir(pkg.dir) if err != nil { - log.Print(err) - return nil + return nil, err } - - fset := token.NewFileSet() - - for _, fi := range files { - match, err := ctx.MatchFile(dir, fi.Name()) + var files []os.FileInfo + for _, fi := range all { + name := fi.Name() + if !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") { + continue + } + match, err := env.buildContext().MatchFile(pkg.dir, fi.Name()) if err != nil || !match { continue } - fullFile := filepath.Join(dir, fi.Name()) + files = append(files, fi) + } + + if len(files) == 0 { + return nil, fmt.Errorf("dir %v contains no buildable, non-test .go files", pkg.dir) + } + + fset := token.NewFileSet() + for _, fi := range files { + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + } + + fullFile := filepath.Join(pkg.dir, fi.Name()) f, err := parser.ParseFile(fset, fullFile, nil, 0) if err != nil { - if Debug { - log.Printf("Parsing %s: %v", fullFile, err) - } - return nil + return nil, fmt.Errorf("parsing %s: %v", fullFile, err) } pkgName := f.Name.Name if pkgName == "documentation" { // Special case from go/build.ImportDir, not - // handled by ctx.MatchFile. + // handled by MatchFile above. continue } if pkgName != expectPackage { - if Debug { - log.Printf("scan of dir %v is not expected package %v (actually %v)", dir, expectPackage, pkgName) - } - return nil + return nil, fmt.Errorf("scan of dir %v is not expected package %v (actually %v)", pkg.dir, expectPackage, pkgName) } for name := range f.Scope.Objects { if ast.IsExported(name) { @@ -663,75 +1026,28 @@ func loadExportsGoPath(expectPackage, dir string) map[string]bool { exportList = append(exportList, k) } sort.Strings(exportList) - log.Printf("loaded exports in dir %v (package %v): %v", dir, expectPackage, strings.Join(exportList, ", ")) + log.Printf("loaded exports in dir %v (package %v): %v", pkg.dir, expectPackage, strings.Join(exportList, ", ")) } - return exports + return exports, nil } // findImport searches for a package with the given symbols. // If no package is found, findImport returns ("", false, nil) -// -// This is declared as a variable rather than a function so goimports -// can be easily extended by adding a file with an init function. -// -// The rename value tells goimports whether to use the package name as -// a local qualifier in an import. For example, if findImports("pkg", -// "X") returns ("foo/bar", rename=true), then goimports adds the -// import line: -// import pkg "foo/bar" -// to satisfy uses of pkg.X in the file. -var findImport func(pkgName string, symbols map[string]bool, filename string) (foundPkg string, rename bool, err error) = findImportGoPath - -// findImportGoPath is the normal implementation of findImport. -// (Some companies have their own internally.) -func findImportGoPath(pkgName string, symbols map[string]bool, filename string) (foundPkg string, rename bool, err error) { - if inTests { - testMu.RLock() - defer testMu.RUnlock() +func findImport(ctx context.Context, env *fixEnv, dirScan []*pkg, pkgName string, symbols map[string]bool, filename string) (*pkg, error) { + pkgDir, err := filepath.Abs(filename) + if err != nil { + return nil, err } - - // Fast path for the standard library. - // In the common case we hopefully never have to scan the GOPATH, which can - // be slow with moving disks. - if pkg, rename, ok := findImportStdlib(pkgName, symbols); ok { - return pkg, rename, nil - } - if pkgName == "rand" && symbols["Read"] { - // Special-case rand.Read. - // - // If findImportStdlib didn't find it above, don't go - // searching for it, lest it find and pick math/rand - // in GOROOT (new as of Go 1.6) - // - // crypto/rand is the safer choice. - return "", false, nil - } - - // TODO(sameer): look at the import lines for other Go files in the - // local directory, since the user is likely to import the same packages - // in the current Go file. Return rename=true when the other Go files - // use a renamed package that's also used in the current file. - - // Read all the $GOPATH/src/.goimportsignore files before scanning directories. - populateIgnoreOnce.Do(populateIgnore) - - // Start scanning the $GOROOT asynchronously, then run the - // GOPATH scan synchronously if needed, and then wait for the - // $GOROOT to finish. - // - // TODO(bradfitz): run each $GOPATH entry async. But nobody - // really has more than one anyway, so low priority. - scanGoRootOnce.Do(scanGoRoot) // async - if !fileInDir(filename, build.Default.GOROOT) { - scanGoPathOnce.Do(scanGoPath) // blocking - } - <-scanGoRootDone + pkgDir = filepath.Dir(pkgDir) // Find candidate packages, looking only at their directory names first. - var candidates []*pkg + var candidates []pkgDistance for _, pkg := range dirScan { if pkgIsCandidate(filename, pkgName, pkg) { - candidates = append(candidates, pkg) + candidates = append(candidates, pkgDistance{ + pkg: pkg, + distance: distance(pkgDir, pkg.dir), + }) } } @@ -739,73 +1055,76 @@ func findImportGoPath(pkgName string, symbols map[string]bool, filename string) // assuming that shorter package names are better than long // ones. Note that this sorts by the de-vendored name, so // there's no "penalty" for vendoring. - sort.Sort(byImportPathShortLength(candidates)) + sort.Sort(byDistanceOrImportPathShortLength(candidates)) if Debug { - for i, pkg := range candidates { - log.Printf("%s candidate %d/%d: %v", pkgName, i+1, len(candidates), pkg.importPathShort) + for i, c := range candidates { + log.Printf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) } } // Collect exports for packages with matching names. - done := make(chan struct{}) // closed when we find the answer - defer close(done) - rescv := make([]chan *pkg, len(candidates)) for i := range candidates { - rescv[i] = make(chan *pkg) + rescv[i] = make(chan *pkg, 1) } const maxConcurrentPackageImport = 4 loadExportsSem := make(chan struct{}, maxConcurrentPackageImport) + ctx, cancel := context.WithCancel(ctx) + var wg sync.WaitGroup + defer func() { + cancel() + wg.Wait() + }() + + wg.Add(1) go func() { - for i, pkg := range candidates { + defer wg.Done() + for i, c := range candidates { select { case loadExportsSem <- struct{}{}: - select { - case <-done: - return - default: - } - case <-done: + case <-ctx.Done(): return } - pkg := pkg - resc := rescv[i] - go func() { - if inTests { - testMu.RLock() - defer testMu.RUnlock() + + wg.Add(1) + go func(c pkgDistance, resc chan<- *pkg) { + defer func() { + <-loadExportsSem + wg.Done() + }() + + exports, err := loadExports(ctx, env, pkgName, c.pkg) + if err != nil { + if Debug { + log.Printf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) + } + resc <- nil + return } - defer func() { <-loadExportsSem }() - exports := loadExports(pkgName, pkg.dir) // If it doesn't have the right // symbols, send nil to mean no match. for symbol := range symbols { if !exports[symbol] { - pkg = nil - break + resc <- nil + return } } - select { - case resc <- pkg: - case <-done: - } - }() + resc <- c.pkg + }(c, rescv[i]) } }() + for _, resc := range rescv { pkg := <-resc if pkg == nil { continue } - // If the package name in the source doesn't match the import path's base, - // return true so the rewriter adds a name (import foo "github.com/bar/go-foo") - needsRename := path.Base(pkg.importPath) != pkgName - return pkg.importPathShort, needsRename, nil + return pkg, nil } - return "", false, nil + return nil, nil } // pkgIsCandidate reports whether pkg is a candidate for satisfying the @@ -837,7 +1156,7 @@ func pkgIsCandidate(filename, pkgIdent string, pkg *pkg) bool { // permit a directory "foo" to be package // "bar", which is strongly discouraged // anyway. There's no reason goimports needs - // to be slow just to accomodate that. + // to be slow just to accommodate that. lastTwo := lastTwoComponents(pkg.importPathShort) if strings.Contains(lastTwo, pkgIdent) { return true @@ -938,37 +1257,3 @@ type visitFn func(node ast.Node) ast.Visitor func (fn visitFn) Visit(node ast.Node) ast.Visitor { return fn(node) } - -func findImportStdlib(shortPkg string, symbols map[string]bool) (importPath string, rename, ok bool) { - for symbol := range symbols { - key := shortPkg + "." + symbol - path := stdlib[key] - if path == "" { - if key == "rand.Read" { - continue - } - return "", false, false - } - if importPath != "" && importPath != path { - // Ambiguous. Symbols pointed to different things. - return "", false, false - } - importPath = path - } - if importPath == "" && shortPkg == "rand" && symbols["Read"] { - return "crypto/rand", false, true - } - return importPath, false, importPath != "" -} - -// fileInDir reports whether the provided file path looks like -// it's in dir. (without hitting the filesystem) -func fileInDir(file, dir string) bool { - rest := strings.TrimPrefix(file, dir) - if len(rest) == len(file) { - // dir is not a prefix of file. - return false - } - // Check for boundary: either nothing (file == dir), or a slash. - return len(rest) == 0 || rest[0] == '/' || rest[0] == '\\' -} diff --git a/vendor/golang.org/x/tools/imports/imports.go b/vendor/golang.org/x/tools/imports/imports.go index 67573f497e4..07101cb8048 100644 --- a/vendor/golang.org/x/tools/imports/imports.go +++ b/vendor/golang.org/x/tools/imports/imports.go @@ -13,11 +13,13 @@ import ( "bytes" "fmt" "go/ast" + "go/build" "go/format" "go/parser" "go/printer" "go/token" "io" + "io/ioutil" "regexp" "strconv" "strings" @@ -44,9 +46,21 @@ type Options struct { // so it is important that filename be accurate. // To process data ``as if'' it were in filename, pass the data as a non-nil src. func Process(filename string, src []byte, opt *Options) ([]byte, error) { + env := &fixEnv{GOPATH: build.Default.GOPATH, GOROOT: build.Default.GOROOT} + return process(filename, src, opt, env) +} + +func process(filename string, src []byte, opt *Options, env *fixEnv) ([]byte, error) { if opt == nil { opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} } + if src == nil { + b, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + src = b + } fileSet := token.NewFileSet() file, adjust, err := parse(fileSet, filename, src, opt) @@ -55,15 +69,13 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) { } if !opt.FormatOnly { - _, err = fixImports(fileSet, file, filename) - if err != nil { + if err := fixImports(fileSet, file, filename, env); err != nil { return nil, err } } sortImports(fileSet, file) imps := astutil.Imports(fileSet, file) - var spacesBefore []string // import paths we need spaces before for _, impSection := range imps { // Within each block of contiguous imports, see if any @@ -98,7 +110,10 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) { out = adjust(src, out) } if len(spacesBefore) > 0 { - out = addImportSpaces(bytes.NewReader(out), spacesBefore) + out, err = addImportSpaces(bytes.NewReader(out), spacesBefore) + if err != nil { + return nil, err + } } out, err = format.Source(out) @@ -133,11 +148,18 @@ func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast // If this is a declaration list, make it a source file // by inserting a package clause. - // Insert using a ;, not a newline, so that the line numbers - // in psrc match the ones in src. - psrc := append([]byte("package main;"), src...) + // Insert using a ;, not a newline, so that parse errors are on + // the correct line. + const prefix = "package main;" + psrc := append([]byte(prefix), src...) file, err = parser.ParseFile(fset, filename, psrc, parserMode) if err == nil { + // Gofmt will turn the ; into a \n. + // Do that ourselves now and update the file contents, + // so that positions and line numbers are correct going forward. + psrc[len(prefix)-1] = '\n' + fset.File(file.Package).SetLinesForContent(psrc) + // If a main function exists, we will assume this is a main // package and leave the file. if containsMainFunc(file) { @@ -146,8 +168,7 @@ func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast adjust := func(orig, src []byte) []byte { // Remove the package clause. - // Gofmt has turned the ; into a \n. - src = src[len("package main\n"):] + src = src[len(prefix):] return matchSpace(orig, src) } return file, adjust, nil @@ -256,13 +277,18 @@ func matchSpace(orig []byte, src []byte) []byte { var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`) -func addImportSpaces(r io.Reader, breaks []string) []byte { +func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { var out bytes.Buffer - sc := bufio.NewScanner(r) + in := bufio.NewReader(r) inImports := false done := false - for sc.Scan() { - s := sc.Text() + for { + s, err := in.ReadString('\n') + if err == io.EOF { + break + } else if err != nil { + return nil, err + } if !inImports && !done && strings.HasPrefix(s, "import") { inImports = true @@ -283,7 +309,7 @@ func addImportSpaces(r io.Reader, breaks []string) []byte { } } - fmt.Fprintln(&out, s) + fmt.Fprint(&out, s) } - return out.Bytes() + return out.Bytes(), nil } diff --git a/vendor/golang.org/x/tools/imports/mkstdlib.go b/vendor/golang.org/x/tools/imports/mkstdlib.go index 5602244a7e8..5059ad4d7d3 100644 --- a/vendor/golang.org/x/tools/imports/mkstdlib.go +++ b/vendor/golang.org/x/tools/imports/mkstdlib.go @@ -14,9 +14,9 @@ import ( "io/ioutil" "log" "os" - "path" "path/filepath" "regexp" + "runtime" "sort" "strings" ) @@ -30,11 +30,13 @@ func mustOpen(name string) io.Reader { } func api(base string) string { - return filepath.Join(os.Getenv("GOROOT"), "api", base) + return filepath.Join(runtime.GOROOT(), "api", base) } var sym = regexp.MustCompile(`^pkg (\S+).*?, (?:var|func|type|const) ([A-Z]\w*)`) +var unsafeSyms = map[string]bool{"Alignof": true, "ArbitraryType": true, "Offsetof": true, "Pointer": true, "Sizeof": true} + func main() { var buf bytes.Buffer outf := func(format string, args ...interface{}) { @@ -42,7 +44,7 @@ func main() { } outf("// Code generated by mkstdlib.go. DO NOT EDIT.\n\n") outf("package imports\n") - outf("var stdlib = map[string]string{\n") + outf("var stdlib = map[string]map[string]bool{\n") f := io.MultiReader( mustOpen(api("go1.txt")), mustOpen(api("go1.1.txt")), @@ -53,11 +55,18 @@ func main() { mustOpen(api("go1.6.txt")), mustOpen(api("go1.7.txt")), mustOpen(api("go1.8.txt")), + mustOpen(api("go1.9.txt")), + mustOpen(api("go1.10.txt")), + mustOpen(api("go1.11.txt")), + mustOpen(api("go1.12.txt")), ) sc := bufio.NewScanner(f) - fullImport := map[string]string{} // "zip.NewReader" => "archive/zip" - ambiguous := map[string]bool{} - var keys []string + + pkgs := map[string]map[string]bool{ + "unsafe": unsafeSyms, + } + paths := []string{"unsafe"} + for sc.Scan() { l := sc.Text() has := func(v string) bool { return strings.Contains(l, v) } @@ -65,32 +74,31 @@ func main() { continue } if m := sym.FindStringSubmatch(l); m != nil { - full := m[1] - key := path.Base(full) + "." + m[2] - if exist, ok := fullImport[key]; ok { - if exist != full { - ambiguous[key] = true - } - } else { - fullImport[key] = full - keys = append(keys, key) + path, sym := m[1], m[2] + + if _, ok := pkgs[path]; !ok { + pkgs[path] = map[string]bool{} + paths = append(paths, path) } + pkgs[path][sym] = true } } if err := sc.Err(); err != nil { log.Fatal(err) } - sort.Strings(keys) - for _, key := range keys { - if ambiguous[key] { - outf("\t// %q is ambiguous\n", key) - } else { - outf("\t%q: %q,\n", key, fullImport[key]) + sort.Strings(paths) + for _, path := range paths { + outf("\t%q: map[string]bool{\n", path) + pkg := pkgs[path] + var syms []string + for sym := range pkg { + syms = append(syms, sym) } - } - outf("\n") - for _, sym := range [...]string{"Alignof", "ArbitraryType", "Offsetof", "Pointer", "Sizeof"} { - outf("\t%q: %q,\n", "unsafe."+sym, "unsafe") + sort.Strings(syms) + for _, sym := range syms { + outf("\t\t%q: true,\n", sym) + } + outf("},\n") } outf("}\n") fmtbuf, err := format.Source(buf.Bytes()) diff --git a/vendor/golang.org/x/tools/imports/mod.go b/vendor/golang.org/x/tools/imports/mod.go new file mode 100644 index 00000000000..ec769145cce --- /dev/null +++ b/vendor/golang.org/x/tools/imports/mod.go @@ -0,0 +1,351 @@ +package imports + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "log" + "os" + "path" + "path/filepath" + "regexp" + "sort" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/tools/internal/gopathwalk" + "golang.org/x/tools/internal/module" +) + +// moduleResolver implements resolver for modules using the go command as little +// as feasible. +type moduleResolver struct { + env *fixEnv + + main *moduleJSON + modsByModPath []*moduleJSON // All modules, ordered by # of path components in module Path... + modsByDir []*moduleJSON // ...or Dir. +} + +type moduleJSON struct { + Path string // module path + Version string // module version + Versions []string // available module versions (with -versions) + Replace *moduleJSON // replaced by this module + Time *time.Time // time version was created + Update *moduleJSON // available update, if any (with -u) + Main bool // is this the main module? + Indirect bool // is this module only an indirect dependency of main module? + Dir string // directory holding files for this module, if any + GoMod string // path to go.mod file for this module, if any + Error *moduleErrorJSON // error loading module +} + +type moduleErrorJSON struct { + Err string // the error itself +} + +func (r *moduleResolver) init() error { + if r.main != nil { + return nil + } + stdout, err := r.env.invokeGo("list", "-m", "-json", "...") + if err != nil { + return err + } + for dec := json.NewDecoder(stdout); dec.More(); { + mod := &moduleJSON{} + if err := dec.Decode(mod); err != nil { + return err + } + if mod.Dir == "" { + if Debug { + log.Printf("module %v has not been downloaded and will be ignored", mod.Path) + } + // Can't do anything with a module that's not downloaded. + continue + } + r.modsByModPath = append(r.modsByModPath, mod) + r.modsByDir = append(r.modsByDir, mod) + if mod.Main { + r.main = mod + } + } + + sort.Slice(r.modsByModPath, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByModPath[x].Path, "/") + } + return count(j) < count(i) // descending order + }) + sort.Slice(r.modsByDir, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByDir[x].Dir, "/") + } + return count(j) < count(i) // descending order + }) + + return nil +} + +// findPackage returns the module and directory that contains the package at +// the given import path, or returns nil, "" if no module is in scope. +func (r *moduleResolver) findPackage(importPath string) (*moduleJSON, string) { + for _, m := range r.modsByModPath { + if !strings.HasPrefix(importPath, m.Path) { + continue + } + pathInModule := importPath[len(m.Path):] + pkgDir := filepath.Join(m.Dir, pathInModule) + if dirIsNestedModule(pkgDir, m) { + continue + } + + pkgFiles, err := ioutil.ReadDir(pkgDir) + if err != nil { + continue + } + + // A module only contains a package if it has buildable go + // files in that directory. If not, it could be provided by an + // outer module. See #29736. + for _, fi := range pkgFiles { + if ok, _ := r.env.buildContext().MatchFile(pkgDir, fi.Name()); ok { + return m, pkgDir + } + } + } + return nil, "" +} + +// findModuleByDir returns the module that contains dir, or nil if no such +// module is in scope. +func (r *moduleResolver) findModuleByDir(dir string) *moduleJSON { + // This is quite tricky and may not be correct. dir could be: + // - a package in the main module. + // - a replace target underneath the main module's directory. + // - a nested module in the above. + // - a replace target somewhere totally random. + // - a nested module in the above. + // - in the mod cache. + // - in /vendor/ in -mod=vendor mode. + // - nested module? Dunno. + // Rumor has it that replace targets cannot contain other replace targets. + for _, m := range r.modsByDir { + if !strings.HasPrefix(dir, m.Dir) { + continue + } + + if dirIsNestedModule(dir, m) { + continue + } + + return m + } + return nil +} + +// dirIsNestedModule reports if dir is contained in a nested module underneath +// mod, not actually in mod. +func dirIsNestedModule(dir string, mod *moduleJSON) bool { + if !strings.HasPrefix(dir, mod.Dir) { + return false + } + mf := findModFile(dir) + if mf == "" { + return false + } + return filepath.Dir(mf) != mod.Dir +} + +func findModFile(dir string) string { + for { + f := filepath.Join(dir, "go.mod") + info, err := os.Stat(f) + if err == nil && !info.IsDir() { + return f + } + d := filepath.Dir(dir) + if len(d) >= len(dir) { + return "" // reached top of file system, no go.mod + } + dir = d + } +} + +func (r *moduleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + if err := r.init(); err != nil { + return nil, err + } + names := map[string]string{} + for _, path := range importPaths { + _, packageDir := r.findPackage(path) + if packageDir == "" { + continue + } + name, err := packageDirToName(packageDir) + if err != nil { + continue + } + names[path] = name + } + return names, nil +} + +func (r *moduleResolver) scan(_ references) ([]*pkg, error) { + if err := r.init(); err != nil { + return nil, err + } + + // Walk GOROOT, GOPATH/pkg/mod, and the main module. + roots := []gopathwalk.Root{ + {filepath.Join(r.env.GOROOT, "/src"), gopathwalk.RootGOROOT}, + {r.main.Dir, gopathwalk.RootCurrentModule}, + } + for _, p := range filepath.SplitList(r.env.GOPATH) { + roots = append(roots, gopathwalk.Root{filepath.Join(p, "/pkg/mod"), gopathwalk.RootModuleCache}) + } + + // Walk replace targets, just in case they're not in any of the above. + for _, mod := range r.modsByModPath { + if mod.Replace != nil { + roots = append(roots, gopathwalk.Root{mod.Dir, gopathwalk.RootOther}) + } + } + + var result []*pkg + dupCheck := make(map[string]bool) + var mu sync.Mutex + + gopathwalk.Walk(roots, func(root gopathwalk.Root, dir string) { + mu.Lock() + defer mu.Unlock() + + if _, dup := dupCheck[dir]; dup { + return + } + + dupCheck[dir] = true + + subdir := "" + if dir != root.Path { + subdir = dir[len(root.Path)+len("/"):] + } + importPath := filepath.ToSlash(subdir) + if strings.HasPrefix(importPath, "vendor/") { + // Ignore vendor dirs. If -mod=vendor is on, then things + // should mostly just work, but when it's not vendor/ + // is a mess. There's no easy way to tell if it's on. + // We can still find things in the mod cache and + // map them into /vendor when -mod=vendor is on. + return + } + switch root.Type { + case gopathwalk.RootCurrentModule: + importPath = path.Join(r.main.Path, filepath.ToSlash(subdir)) + case gopathwalk.RootModuleCache: + matches := modCacheRegexp.FindStringSubmatch(subdir) + modPath, err := module.DecodePath(filepath.ToSlash(matches[1])) + if err != nil { + if Debug { + log.Printf("decoding module cache path %q: %v", subdir, err) + } + return + } + importPath = path.Join(modPath, filepath.ToSlash(matches[3])) + case gopathwalk.RootGOROOT: + importPath = subdir + } + + // Check if the directory is underneath a module that's in scope. + if mod := r.findModuleByDir(dir); mod != nil { + // It is. If dir is the target of a replace directive, + // our guessed import path is wrong. Use the real one. + if mod.Dir == dir { + importPath = mod.Path + } else { + dirInMod := dir[len(mod.Dir)+len("/"):] + importPath = path.Join(mod.Path, filepath.ToSlash(dirInMod)) + } + } else { + // The package is in an unknown module. Check that it's + // not obviously impossible to import. + var modFile string + switch root.Type { + case gopathwalk.RootModuleCache: + matches := modCacheRegexp.FindStringSubmatch(subdir) + modFile = filepath.Join(matches[1], "@", matches[2], "go.mod") + default: + modFile = findModFile(dir) + } + + modBytes, err := ioutil.ReadFile(modFile) + if err == nil && !strings.HasPrefix(importPath, modulePath(modBytes)) { + // The module's declared path does not match + // its expected path. It probably needs a + // replace directive we don't have. + return + } + } + // We may have discovered a package that has a different version + // in scope already. Canonicalize to that one if possible. + if _, canonicalDir := r.findPackage(importPath); canonicalDir != "" { + dir = canonicalDir + } + + result = append(result, &pkg{ + importPathShort: VendorlessPath(importPath), + dir: dir, + }) + }, gopathwalk.Options{Debug: Debug, ModulesEnabled: true}) + return result, nil +} + +// modCacheRegexp splits a path in a module cache into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +var ( + slashSlash = []byte("//") + moduleStr = []byte("module") +) + +// modulePath returns the module path from the gomod file text. +// If it cannot find a module path, it returns an empty string. +// It is tolerant of unrelated problems in the go.mod file. +// +// Copied from cmd/go/internal/modfile. +func modulePath(mod []byte) string { + for len(mod) > 0 { + line := mod + mod = nil + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, mod = line[:i], line[i+1:] + } + if i := bytes.Index(line, slashSlash); i >= 0 { + line = line[:i] + } + line = bytes.TrimSpace(line) + if !bytes.HasPrefix(line, moduleStr) { + continue + } + line = line[len(moduleStr):] + n := len(line) + line = bytes.TrimSpace(line) + if len(line) == n || len(line) == 0 { + continue + } + + if line[0] == '"' || line[0] == '`' { + p, err := strconv.Unquote(string(line)) + if err != nil { + return "" // malformed quoted string or multiline module path + } + return p + } + + return string(line) + } + return "" // missing module path +} diff --git a/vendor/golang.org/x/tools/imports/sortimports.go b/vendor/golang.org/x/tools/imports/sortimports.go index 653afc51776..f3dd56c7a6f 100644 --- a/vendor/golang.org/x/tools/imports/sortimports.go +++ b/vendor/golang.org/x/tools/imports/sortimports.go @@ -167,15 +167,33 @@ func sortSpecs(fset *token.FileSet, f *ast.File, specs []ast.Spec) []ast.Spec { } s.Path.ValuePos = pos[i].Start s.EndPos = pos[i].End + nextSpecPos := pos[i].End + for _, g := range importComment[s] { for _, c := range g.List { c.Slash = pos[i].End + nextSpecPos = c.End() } } + if i < len(specs)-1 { + pos[i+1].Start = nextSpecPos + pos[i+1].End = nextSpecPos + } } sort.Sort(byCommentPos(comments)) + // Fixup comments can insert blank lines, because import specs are on different lines. + // We remove those blank lines here by merging import spec to the first import spec line. + firstSpecLine := fset.Position(specs[0].Pos()).Line + for _, s := range specs[1:] { + p := s.Pos() + line := fset.File(p).Line(p) + for previousLine := line - 1; previousLine >= firstSpecLine; { + fset.File(p).MergeLine(previousLine) + previousLine-- + } + } return specs } diff --git a/vendor/golang.org/x/tools/imports/zstdlib.go b/vendor/golang.org/x/tools/imports/zstdlib.go index 5b66a6cd42a..c18a0095b20 100644 --- a/vendor/golang.org/x/tools/imports/zstdlib.go +++ b/vendor/golang.org/x/tools/imports/zstdlib.go @@ -2,9375 +2,10301 @@ package imports -var stdlib = map[string]string{ - "adler32.Checksum": "hash/adler32", - "adler32.New": "hash/adler32", - "adler32.Size": "hash/adler32", - "aes.BlockSize": "crypto/aes", - "aes.KeySizeError": "crypto/aes", - "aes.NewCipher": "crypto/aes", - "ascii85.CorruptInputError": "encoding/ascii85", - "ascii85.Decode": "encoding/ascii85", - "ascii85.Encode": "encoding/ascii85", - "ascii85.MaxEncodedLen": "encoding/ascii85", - "ascii85.NewDecoder": "encoding/ascii85", - "ascii85.NewEncoder": "encoding/ascii85", - "asn1.BitString": "encoding/asn1", - "asn1.ClassApplication": "encoding/asn1", - "asn1.ClassContextSpecific": "encoding/asn1", - "asn1.ClassPrivate": "encoding/asn1", - "asn1.ClassUniversal": "encoding/asn1", - "asn1.Enumerated": "encoding/asn1", - "asn1.Flag": "encoding/asn1", - "asn1.Marshal": "encoding/asn1", - "asn1.ObjectIdentifier": "encoding/asn1", - "asn1.RawContent": "encoding/asn1", - "asn1.RawValue": "encoding/asn1", - "asn1.StructuralError": "encoding/asn1", - "asn1.SyntaxError": "encoding/asn1", - "asn1.TagBitString": "encoding/asn1", - "asn1.TagBoolean": "encoding/asn1", - "asn1.TagEnum": "encoding/asn1", - "asn1.TagGeneralString": "encoding/asn1", - "asn1.TagGeneralizedTime": "encoding/asn1", - "asn1.TagIA5String": "encoding/asn1", - "asn1.TagInteger": "encoding/asn1", - "asn1.TagOID": "encoding/asn1", - "asn1.TagOctetString": "encoding/asn1", - "asn1.TagPrintableString": "encoding/asn1", - "asn1.TagSequence": "encoding/asn1", - "asn1.TagSet": "encoding/asn1", - "asn1.TagT61String": "encoding/asn1", - "asn1.TagUTCTime": "encoding/asn1", - "asn1.TagUTF8String": "encoding/asn1", - "asn1.Unmarshal": "encoding/asn1", - "asn1.UnmarshalWithParams": "encoding/asn1", - "ast.ArrayType": "go/ast", - "ast.AssignStmt": "go/ast", - "ast.Bad": "go/ast", - "ast.BadDecl": "go/ast", - "ast.BadExpr": "go/ast", - "ast.BadStmt": "go/ast", - "ast.BasicLit": "go/ast", - "ast.BinaryExpr": "go/ast", - "ast.BlockStmt": "go/ast", - "ast.BranchStmt": "go/ast", - "ast.CallExpr": "go/ast", - "ast.CaseClause": "go/ast", - "ast.ChanDir": "go/ast", - "ast.ChanType": "go/ast", - "ast.CommClause": "go/ast", - "ast.Comment": "go/ast", - "ast.CommentGroup": "go/ast", - "ast.CommentMap": "go/ast", - "ast.CompositeLit": "go/ast", - "ast.Con": "go/ast", - "ast.DeclStmt": "go/ast", - "ast.DeferStmt": "go/ast", - "ast.Ellipsis": "go/ast", - "ast.EmptyStmt": "go/ast", - "ast.ExprStmt": "go/ast", - "ast.Field": "go/ast", - "ast.FieldFilter": "go/ast", - "ast.FieldList": "go/ast", - "ast.File": "go/ast", - "ast.FileExports": "go/ast", - "ast.Filter": "go/ast", - "ast.FilterDecl": "go/ast", - "ast.FilterFile": "go/ast", - "ast.FilterFuncDuplicates": "go/ast", - "ast.FilterImportDuplicates": "go/ast", - "ast.FilterPackage": "go/ast", - "ast.FilterUnassociatedComments": "go/ast", - "ast.ForStmt": "go/ast", - "ast.Fprint": "go/ast", - "ast.Fun": "go/ast", - "ast.FuncDecl": "go/ast", - "ast.FuncLit": "go/ast", - "ast.FuncType": "go/ast", - "ast.GenDecl": "go/ast", - "ast.GoStmt": "go/ast", - "ast.Ident": "go/ast", - "ast.IfStmt": "go/ast", - "ast.ImportSpec": "go/ast", - "ast.Importer": "go/ast", - "ast.IncDecStmt": "go/ast", - "ast.IndexExpr": "go/ast", - "ast.Inspect": "go/ast", - "ast.InterfaceType": "go/ast", - "ast.IsExported": "go/ast", - "ast.KeyValueExpr": "go/ast", - "ast.LabeledStmt": "go/ast", - "ast.Lbl": "go/ast", - "ast.MapType": "go/ast", - "ast.MergeMode": "go/ast", - "ast.MergePackageFiles": "go/ast", - "ast.NewCommentMap": "go/ast", - "ast.NewIdent": "go/ast", - "ast.NewObj": "go/ast", - "ast.NewPackage": "go/ast", - "ast.NewScope": "go/ast", - "ast.Node": "go/ast", - "ast.NotNilFilter": "go/ast", - "ast.ObjKind": "go/ast", - "ast.Object": "go/ast", - "ast.Package": "go/ast", - "ast.PackageExports": "go/ast", - "ast.ParenExpr": "go/ast", - "ast.Pkg": "go/ast", - "ast.Print": "go/ast", - "ast.RECV": "go/ast", - "ast.RangeStmt": "go/ast", - "ast.ReturnStmt": "go/ast", - "ast.SEND": "go/ast", - "ast.Scope": "go/ast", - "ast.SelectStmt": "go/ast", - "ast.SelectorExpr": "go/ast", - "ast.SendStmt": "go/ast", - "ast.SliceExpr": "go/ast", - "ast.SortImports": "go/ast", - "ast.StarExpr": "go/ast", - "ast.StructType": "go/ast", - "ast.SwitchStmt": "go/ast", - "ast.Typ": "go/ast", - "ast.TypeAssertExpr": "go/ast", - "ast.TypeSpec": "go/ast", - "ast.TypeSwitchStmt": "go/ast", - "ast.UnaryExpr": "go/ast", - "ast.ValueSpec": "go/ast", - "ast.Var": "go/ast", - "ast.Visitor": "go/ast", - "ast.Walk": "go/ast", - "atomic.AddInt32": "sync/atomic", - "atomic.AddInt64": "sync/atomic", - "atomic.AddUint32": "sync/atomic", - "atomic.AddUint64": "sync/atomic", - "atomic.AddUintptr": "sync/atomic", - "atomic.CompareAndSwapInt32": "sync/atomic", - "atomic.CompareAndSwapInt64": "sync/atomic", - "atomic.CompareAndSwapPointer": "sync/atomic", - "atomic.CompareAndSwapUint32": "sync/atomic", - "atomic.CompareAndSwapUint64": "sync/atomic", - "atomic.CompareAndSwapUintptr": "sync/atomic", - "atomic.LoadInt32": "sync/atomic", - "atomic.LoadInt64": "sync/atomic", - "atomic.LoadPointer": "sync/atomic", - "atomic.LoadUint32": "sync/atomic", - "atomic.LoadUint64": "sync/atomic", - "atomic.LoadUintptr": "sync/atomic", - "atomic.StoreInt32": "sync/atomic", - "atomic.StoreInt64": "sync/atomic", - "atomic.StorePointer": "sync/atomic", - "atomic.StoreUint32": "sync/atomic", - "atomic.StoreUint64": "sync/atomic", - "atomic.StoreUintptr": "sync/atomic", - "atomic.SwapInt32": "sync/atomic", - "atomic.SwapInt64": "sync/atomic", - "atomic.SwapPointer": "sync/atomic", - "atomic.SwapUint32": "sync/atomic", - "atomic.SwapUint64": "sync/atomic", - "atomic.SwapUintptr": "sync/atomic", - "atomic.Value": "sync/atomic", - "base32.CorruptInputError": "encoding/base32", - "base32.Encoding": "encoding/base32", - "base32.HexEncoding": "encoding/base32", - "base32.NewDecoder": "encoding/base32", - "base32.NewEncoder": "encoding/base32", - "base32.NewEncoding": "encoding/base32", - "base32.StdEncoding": "encoding/base32", - "base64.CorruptInputError": "encoding/base64", - "base64.Encoding": "encoding/base64", - "base64.NewDecoder": "encoding/base64", - "base64.NewEncoder": "encoding/base64", - "base64.NewEncoding": "encoding/base64", - "base64.NoPadding": "encoding/base64", - "base64.RawStdEncoding": "encoding/base64", - "base64.RawURLEncoding": "encoding/base64", - "base64.StdEncoding": "encoding/base64", - "base64.StdPadding": "encoding/base64", - "base64.URLEncoding": "encoding/base64", - "big.Above": "math/big", - "big.Accuracy": "math/big", - "big.AwayFromZero": "math/big", - "big.Below": "math/big", - "big.ErrNaN": "math/big", - "big.Exact": "math/big", - "big.Float": "math/big", - "big.Int": "math/big", - "big.Jacobi": "math/big", - "big.MaxBase": "math/big", - "big.MaxExp": "math/big", - "big.MaxPrec": "math/big", - "big.MinExp": "math/big", - "big.NewFloat": "math/big", - "big.NewInt": "math/big", - "big.NewRat": "math/big", - "big.ParseFloat": "math/big", - "big.Rat": "math/big", - "big.RoundingMode": "math/big", - "big.ToNearestAway": "math/big", - "big.ToNearestEven": "math/big", - "big.ToNegativeInf": "math/big", - "big.ToPositiveInf": "math/big", - "big.ToZero": "math/big", - "big.Word": "math/big", - "binary.BigEndian": "encoding/binary", - "binary.ByteOrder": "encoding/binary", - "binary.LittleEndian": "encoding/binary", - "binary.MaxVarintLen16": "encoding/binary", - "binary.MaxVarintLen32": "encoding/binary", - "binary.MaxVarintLen64": "encoding/binary", - "binary.PutUvarint": "encoding/binary", - "binary.PutVarint": "encoding/binary", - "binary.Read": "encoding/binary", - "binary.ReadUvarint": "encoding/binary", - "binary.ReadVarint": "encoding/binary", - "binary.Size": "encoding/binary", - "binary.Uvarint": "encoding/binary", - "binary.Varint": "encoding/binary", - "binary.Write": "encoding/binary", - "bufio.ErrAdvanceTooFar": "bufio", - "bufio.ErrBufferFull": "bufio", - "bufio.ErrFinalToken": "bufio", - "bufio.ErrInvalidUnreadByte": "bufio", - "bufio.ErrInvalidUnreadRune": "bufio", - "bufio.ErrNegativeAdvance": "bufio", - "bufio.ErrNegativeCount": "bufio", - "bufio.ErrTooLong": "bufio", - "bufio.MaxScanTokenSize": "bufio", - "bufio.NewReadWriter": "bufio", - "bufio.NewReader": "bufio", - "bufio.NewReaderSize": "bufio", - "bufio.NewScanner": "bufio", - "bufio.NewWriter": "bufio", - "bufio.NewWriterSize": "bufio", - "bufio.ReadWriter": "bufio", - "bufio.Reader": "bufio", - "bufio.ScanBytes": "bufio", - "bufio.ScanLines": "bufio", - "bufio.ScanRunes": "bufio", - "bufio.ScanWords": "bufio", - "bufio.Scanner": "bufio", - "bufio.SplitFunc": "bufio", - "bufio.Writer": "bufio", - "build.AllowBinary": "go/build", - "build.ArchChar": "go/build", - "build.Context": "go/build", - "build.Default": "go/build", - "build.FindOnly": "go/build", - "build.IgnoreVendor": "go/build", - "build.Import": "go/build", - "build.ImportComment": "go/build", - "build.ImportDir": "go/build", - "build.ImportMode": "go/build", - "build.IsLocalImport": "go/build", - "build.MultiplePackageError": "go/build", - "build.NoGoError": "go/build", - "build.Package": "go/build", - "build.ToolDir": "go/build", - "bytes.Buffer": "bytes", - "bytes.Compare": "bytes", - "bytes.Contains": "bytes", - "bytes.ContainsAny": "bytes", - "bytes.ContainsRune": "bytes", - "bytes.Count": "bytes", - "bytes.Equal": "bytes", - "bytes.EqualFold": "bytes", - "bytes.ErrTooLarge": "bytes", - "bytes.Fields": "bytes", - "bytes.FieldsFunc": "bytes", - "bytes.HasPrefix": "bytes", - "bytes.HasSuffix": "bytes", - "bytes.Index": "bytes", - "bytes.IndexAny": "bytes", - "bytes.IndexByte": "bytes", - "bytes.IndexFunc": "bytes", - "bytes.IndexRune": "bytes", - "bytes.Join": "bytes", - "bytes.LastIndex": "bytes", - "bytes.LastIndexAny": "bytes", - "bytes.LastIndexByte": "bytes", - "bytes.LastIndexFunc": "bytes", - "bytes.Map": "bytes", - "bytes.MinRead": "bytes", - "bytes.NewBuffer": "bytes", - "bytes.NewBufferString": "bytes", - "bytes.NewReader": "bytes", - "bytes.Reader": "bytes", - "bytes.Repeat": "bytes", - "bytes.Replace": "bytes", - "bytes.Runes": "bytes", - "bytes.Split": "bytes", - "bytes.SplitAfter": "bytes", - "bytes.SplitAfterN": "bytes", - "bytes.SplitN": "bytes", - "bytes.Title": "bytes", - "bytes.ToLower": "bytes", - "bytes.ToLowerSpecial": "bytes", - "bytes.ToTitle": "bytes", - "bytes.ToTitleSpecial": "bytes", - "bytes.ToUpper": "bytes", - "bytes.ToUpperSpecial": "bytes", - "bytes.Trim": "bytes", - "bytes.TrimFunc": "bytes", - "bytes.TrimLeft": "bytes", - "bytes.TrimLeftFunc": "bytes", - "bytes.TrimPrefix": "bytes", - "bytes.TrimRight": "bytes", - "bytes.TrimRightFunc": "bytes", - "bytes.TrimSpace": "bytes", - "bytes.TrimSuffix": "bytes", - "bzip2.NewReader": "compress/bzip2", - "bzip2.StructuralError": "compress/bzip2", - "cgi.Handler": "net/http/cgi", - "cgi.Request": "net/http/cgi", - "cgi.RequestFromMap": "net/http/cgi", - "cgi.Serve": "net/http/cgi", - "cipher.AEAD": "crypto/cipher", - "cipher.Block": "crypto/cipher", - "cipher.BlockMode": "crypto/cipher", - "cipher.NewCBCDecrypter": "crypto/cipher", - "cipher.NewCBCEncrypter": "crypto/cipher", - "cipher.NewCFBDecrypter": "crypto/cipher", - "cipher.NewCFBEncrypter": "crypto/cipher", - "cipher.NewCTR": "crypto/cipher", - "cipher.NewGCM": "crypto/cipher", - "cipher.NewGCMWithNonceSize": "crypto/cipher", - "cipher.NewOFB": "crypto/cipher", - "cipher.Stream": "crypto/cipher", - "cipher.StreamReader": "crypto/cipher", - "cipher.StreamWriter": "crypto/cipher", - "cmplx.Abs": "math/cmplx", - "cmplx.Acos": "math/cmplx", - "cmplx.Acosh": "math/cmplx", - "cmplx.Asin": "math/cmplx", - "cmplx.Asinh": "math/cmplx", - "cmplx.Atan": "math/cmplx", - "cmplx.Atanh": "math/cmplx", - "cmplx.Conj": "math/cmplx", - "cmplx.Cos": "math/cmplx", - "cmplx.Cosh": "math/cmplx", - "cmplx.Cot": "math/cmplx", - "cmplx.Exp": "math/cmplx", - "cmplx.Inf": "math/cmplx", - "cmplx.IsInf": "math/cmplx", - "cmplx.IsNaN": "math/cmplx", - "cmplx.Log": "math/cmplx", - "cmplx.Log10": "math/cmplx", - "cmplx.NaN": "math/cmplx", - "cmplx.Phase": "math/cmplx", - "cmplx.Polar": "math/cmplx", - "cmplx.Pow": "math/cmplx", - "cmplx.Rect": "math/cmplx", - "cmplx.Sin": "math/cmplx", - "cmplx.Sinh": "math/cmplx", - "cmplx.Sqrt": "math/cmplx", - "cmplx.Tan": "math/cmplx", - "cmplx.Tanh": "math/cmplx", - "color.Alpha": "image/color", - "color.Alpha16": "image/color", - "color.Alpha16Model": "image/color", - "color.AlphaModel": "image/color", - "color.Black": "image/color", - "color.CMYK": "image/color", - "color.CMYKModel": "image/color", - "color.CMYKToRGB": "image/color", - "color.Color": "image/color", - "color.Gray": "image/color", - "color.Gray16": "image/color", - "color.Gray16Model": "image/color", - "color.GrayModel": "image/color", - "color.Model": "image/color", - "color.ModelFunc": "image/color", - "color.NRGBA": "image/color", - "color.NRGBA64": "image/color", - "color.NRGBA64Model": "image/color", - "color.NRGBAModel": "image/color", - "color.NYCbCrA": "image/color", - "color.NYCbCrAModel": "image/color", - "color.Opaque": "image/color", - "color.Palette": "image/color", - "color.RGBA": "image/color", - "color.RGBA64": "image/color", - "color.RGBA64Model": "image/color", - "color.RGBAModel": "image/color", - "color.RGBToCMYK": "image/color", - "color.RGBToYCbCr": "image/color", - "color.Transparent": "image/color", - "color.White": "image/color", - "color.YCbCr": "image/color", - "color.YCbCrModel": "image/color", - "color.YCbCrToRGB": "image/color", - "constant.BinaryOp": "go/constant", - "constant.BitLen": "go/constant", - "constant.Bool": "go/constant", - "constant.BoolVal": "go/constant", - "constant.Bytes": "go/constant", - "constant.Compare": "go/constant", - "constant.Complex": "go/constant", - "constant.Denom": "go/constant", - "constant.Float": "go/constant", - "constant.Float32Val": "go/constant", - "constant.Float64Val": "go/constant", - "constant.Imag": "go/constant", - "constant.Int": "go/constant", - "constant.Int64Val": "go/constant", - "constant.Kind": "go/constant", - "constant.MakeBool": "go/constant", - "constant.MakeFloat64": "go/constant", - "constant.MakeFromBytes": "go/constant", - "constant.MakeFromLiteral": "go/constant", - "constant.MakeImag": "go/constant", - "constant.MakeInt64": "go/constant", - "constant.MakeString": "go/constant", - "constant.MakeUint64": "go/constant", - "constant.MakeUnknown": "go/constant", - "constant.Num": "go/constant", - "constant.Real": "go/constant", - "constant.Shift": "go/constant", - "constant.Sign": "go/constant", - "constant.String": "go/constant", - "constant.StringVal": "go/constant", - "constant.ToComplex": "go/constant", - "constant.ToFloat": "go/constant", - "constant.ToInt": "go/constant", - "constant.Uint64Val": "go/constant", - "constant.UnaryOp": "go/constant", - "constant.Unknown": "go/constant", - "context.Background": "context", - "context.CancelFunc": "context", - "context.Canceled": "context", - "context.Context": "context", - "context.DeadlineExceeded": "context", - "context.TODO": "context", - "context.WithCancel": "context", - "context.WithDeadline": "context", - "context.WithTimeout": "context", - "context.WithValue": "context", - "cookiejar.Jar": "net/http/cookiejar", - "cookiejar.New": "net/http/cookiejar", - "cookiejar.Options": "net/http/cookiejar", - "cookiejar.PublicSuffixList": "net/http/cookiejar", - "crc32.Castagnoli": "hash/crc32", - "crc32.Checksum": "hash/crc32", - "crc32.ChecksumIEEE": "hash/crc32", - "crc32.IEEE": "hash/crc32", - "crc32.IEEETable": "hash/crc32", - "crc32.Koopman": "hash/crc32", - "crc32.MakeTable": "hash/crc32", - "crc32.New": "hash/crc32", - "crc32.NewIEEE": "hash/crc32", - "crc32.Size": "hash/crc32", - "crc32.Table": "hash/crc32", - "crc32.Update": "hash/crc32", - "crc64.Checksum": "hash/crc64", - "crc64.ECMA": "hash/crc64", - "crc64.ISO": "hash/crc64", - "crc64.MakeTable": "hash/crc64", - "crc64.New": "hash/crc64", - "crc64.Size": "hash/crc64", - "crc64.Table": "hash/crc64", - "crc64.Update": "hash/crc64", - "crypto.Decrypter": "crypto", - "crypto.DecrypterOpts": "crypto", - "crypto.Hash": "crypto", - "crypto.MD4": "crypto", - "crypto.MD5": "crypto", - "crypto.MD5SHA1": "crypto", - "crypto.PrivateKey": "crypto", - "crypto.PublicKey": "crypto", - "crypto.RIPEMD160": "crypto", - "crypto.RegisterHash": "crypto", - "crypto.SHA1": "crypto", - "crypto.SHA224": "crypto", - "crypto.SHA256": "crypto", - "crypto.SHA384": "crypto", - "crypto.SHA3_224": "crypto", - "crypto.SHA3_256": "crypto", - "crypto.SHA3_384": "crypto", - "crypto.SHA3_512": "crypto", - "crypto.SHA512": "crypto", - "crypto.SHA512_224": "crypto", - "crypto.SHA512_256": "crypto", - "crypto.Signer": "crypto", - "crypto.SignerOpts": "crypto", - "csv.ErrBareQuote": "encoding/csv", - "csv.ErrFieldCount": "encoding/csv", - "csv.ErrQuote": "encoding/csv", - "csv.ErrTrailingComma": "encoding/csv", - "csv.NewReader": "encoding/csv", - "csv.NewWriter": "encoding/csv", - "csv.ParseError": "encoding/csv", - "csv.Reader": "encoding/csv", - "csv.Writer": "encoding/csv", - "debug.FreeOSMemory": "runtime/debug", - "debug.GCStats": "runtime/debug", - "debug.PrintStack": "runtime/debug", - "debug.ReadGCStats": "runtime/debug", - "debug.SetGCPercent": "runtime/debug", - "debug.SetMaxStack": "runtime/debug", - "debug.SetMaxThreads": "runtime/debug", - "debug.SetPanicOnFault": "runtime/debug", - "debug.SetTraceback": "runtime/debug", - "debug.Stack": "runtime/debug", - "debug.WriteHeapDump": "runtime/debug", - "des.BlockSize": "crypto/des", - "des.KeySizeError": "crypto/des", - "des.NewCipher": "crypto/des", - "des.NewTripleDESCipher": "crypto/des", - "doc.AllDecls": "go/doc", - "doc.AllMethods": "go/doc", - "doc.Example": "go/doc", - "doc.Examples": "go/doc", - "doc.Filter": "go/doc", - "doc.Func": "go/doc", - "doc.IllegalPrefixes": "go/doc", - "doc.IsPredeclared": "go/doc", - "doc.Mode": "go/doc", - "doc.New": "go/doc", - "doc.Note": "go/doc", - "doc.Package": "go/doc", - "doc.Synopsis": "go/doc", - "doc.ToHTML": "go/doc", - "doc.ToText": "go/doc", - "doc.Type": "go/doc", - "doc.Value": "go/doc", - "draw.Draw": "image/draw", - "draw.DrawMask": "image/draw", - "draw.Drawer": "image/draw", - "draw.FloydSteinberg": "image/draw", - "draw.Image": "image/draw", - "draw.Op": "image/draw", - "draw.Over": "image/draw", - "draw.Quantizer": "image/draw", - "draw.Src": "image/draw", - "driver.Bool": "database/sql/driver", - "driver.ColumnConverter": "database/sql/driver", - "driver.Conn": "database/sql/driver", - "driver.ConnBeginTx": "database/sql/driver", - "driver.ConnPrepareContext": "database/sql/driver", - "driver.DefaultParameterConverter": "database/sql/driver", - "driver.Driver": "database/sql/driver", - "driver.ErrBadConn": "database/sql/driver", - "driver.ErrSkip": "database/sql/driver", - "driver.Execer": "database/sql/driver", - "driver.ExecerContext": "database/sql/driver", - "driver.Int32": "database/sql/driver", - "driver.IsScanValue": "database/sql/driver", - "driver.IsValue": "database/sql/driver", - "driver.IsolationLevel": "database/sql/driver", - "driver.NamedValue": "database/sql/driver", - "driver.NotNull": "database/sql/driver", - "driver.Null": "database/sql/driver", - "driver.Pinger": "database/sql/driver", - "driver.Queryer": "database/sql/driver", - "driver.QueryerContext": "database/sql/driver", - "driver.Result": "database/sql/driver", - "driver.ResultNoRows": "database/sql/driver", - "driver.Rows": "database/sql/driver", - "driver.RowsAffected": "database/sql/driver", - "driver.RowsColumnTypeDatabaseTypeName": "database/sql/driver", - "driver.RowsColumnTypeLength": "database/sql/driver", - "driver.RowsColumnTypeNullable": "database/sql/driver", - "driver.RowsColumnTypePrecisionScale": "database/sql/driver", - "driver.RowsColumnTypeScanType": "database/sql/driver", - "driver.RowsNextResultSet": "database/sql/driver", - "driver.Stmt": "database/sql/driver", - "driver.StmtExecContext": "database/sql/driver", - "driver.StmtQueryContext": "database/sql/driver", - "driver.String": "database/sql/driver", - "driver.Tx": "database/sql/driver", - "driver.TxOptions": "database/sql/driver", - "driver.Value": "database/sql/driver", - "driver.ValueConverter": "database/sql/driver", - "driver.Valuer": "database/sql/driver", - "dsa.ErrInvalidPublicKey": "crypto/dsa", - "dsa.GenerateKey": "crypto/dsa", - "dsa.GenerateParameters": "crypto/dsa", - "dsa.L1024N160": "crypto/dsa", - "dsa.L2048N224": "crypto/dsa", - "dsa.L2048N256": "crypto/dsa", - "dsa.L3072N256": "crypto/dsa", - "dsa.ParameterSizes": "crypto/dsa", - "dsa.Parameters": "crypto/dsa", - "dsa.PrivateKey": "crypto/dsa", - "dsa.PublicKey": "crypto/dsa", - "dsa.Sign": "crypto/dsa", - "dsa.Verify": "crypto/dsa", - "dwarf.AddrType": "debug/dwarf", - "dwarf.ArrayType": "debug/dwarf", - "dwarf.Attr": "debug/dwarf", - "dwarf.AttrAbstractOrigin": "debug/dwarf", - "dwarf.AttrAccessibility": "debug/dwarf", - "dwarf.AttrAddrClass": "debug/dwarf", - "dwarf.AttrAllocated": "debug/dwarf", - "dwarf.AttrArtificial": "debug/dwarf", - "dwarf.AttrAssociated": "debug/dwarf", - "dwarf.AttrBaseTypes": "debug/dwarf", - "dwarf.AttrBitOffset": "debug/dwarf", - "dwarf.AttrBitSize": "debug/dwarf", - "dwarf.AttrByteSize": "debug/dwarf", - "dwarf.AttrCallColumn": "debug/dwarf", - "dwarf.AttrCallFile": "debug/dwarf", - "dwarf.AttrCallLine": "debug/dwarf", - "dwarf.AttrCalling": "debug/dwarf", - "dwarf.AttrCommonRef": "debug/dwarf", - "dwarf.AttrCompDir": "debug/dwarf", - "dwarf.AttrConstValue": "debug/dwarf", - "dwarf.AttrContainingType": "debug/dwarf", - "dwarf.AttrCount": "debug/dwarf", - "dwarf.AttrDataLocation": "debug/dwarf", - "dwarf.AttrDataMemberLoc": "debug/dwarf", - "dwarf.AttrDeclColumn": "debug/dwarf", - "dwarf.AttrDeclFile": "debug/dwarf", - "dwarf.AttrDeclLine": "debug/dwarf", - "dwarf.AttrDeclaration": "debug/dwarf", - "dwarf.AttrDefaultValue": "debug/dwarf", - "dwarf.AttrDescription": "debug/dwarf", - "dwarf.AttrDiscr": "debug/dwarf", - "dwarf.AttrDiscrList": "debug/dwarf", - "dwarf.AttrDiscrValue": "debug/dwarf", - "dwarf.AttrEncoding": "debug/dwarf", - "dwarf.AttrEntrypc": "debug/dwarf", - "dwarf.AttrExtension": "debug/dwarf", - "dwarf.AttrExternal": "debug/dwarf", - "dwarf.AttrFrameBase": "debug/dwarf", - "dwarf.AttrFriend": "debug/dwarf", - "dwarf.AttrHighpc": "debug/dwarf", - "dwarf.AttrIdentifierCase": "debug/dwarf", - "dwarf.AttrImport": "debug/dwarf", - "dwarf.AttrInline": "debug/dwarf", - "dwarf.AttrIsOptional": "debug/dwarf", - "dwarf.AttrLanguage": "debug/dwarf", - "dwarf.AttrLocation": "debug/dwarf", - "dwarf.AttrLowerBound": "debug/dwarf", - "dwarf.AttrLowpc": "debug/dwarf", - "dwarf.AttrMacroInfo": "debug/dwarf", - "dwarf.AttrName": "debug/dwarf", - "dwarf.AttrNamelistItem": "debug/dwarf", - "dwarf.AttrOrdering": "debug/dwarf", - "dwarf.AttrPriority": "debug/dwarf", - "dwarf.AttrProducer": "debug/dwarf", - "dwarf.AttrPrototyped": "debug/dwarf", - "dwarf.AttrRanges": "debug/dwarf", - "dwarf.AttrReturnAddr": "debug/dwarf", - "dwarf.AttrSegment": "debug/dwarf", - "dwarf.AttrSibling": "debug/dwarf", - "dwarf.AttrSpecification": "debug/dwarf", - "dwarf.AttrStartScope": "debug/dwarf", - "dwarf.AttrStaticLink": "debug/dwarf", - "dwarf.AttrStmtList": "debug/dwarf", - "dwarf.AttrStride": "debug/dwarf", - "dwarf.AttrStrideSize": "debug/dwarf", - "dwarf.AttrStringLength": "debug/dwarf", - "dwarf.AttrTrampoline": "debug/dwarf", - "dwarf.AttrType": "debug/dwarf", - "dwarf.AttrUpperBound": "debug/dwarf", - "dwarf.AttrUseLocation": "debug/dwarf", - "dwarf.AttrUseUTF8": "debug/dwarf", - "dwarf.AttrVarParam": "debug/dwarf", - "dwarf.AttrVirtuality": "debug/dwarf", - "dwarf.AttrVisibility": "debug/dwarf", - "dwarf.AttrVtableElemLoc": "debug/dwarf", - "dwarf.BasicType": "debug/dwarf", - "dwarf.BoolType": "debug/dwarf", - "dwarf.CharType": "debug/dwarf", - "dwarf.Class": "debug/dwarf", - "dwarf.ClassAddress": "debug/dwarf", - "dwarf.ClassBlock": "debug/dwarf", - "dwarf.ClassConstant": "debug/dwarf", - "dwarf.ClassExprLoc": "debug/dwarf", - "dwarf.ClassFlag": "debug/dwarf", - "dwarf.ClassLinePtr": "debug/dwarf", - "dwarf.ClassLocListPtr": "debug/dwarf", - "dwarf.ClassMacPtr": "debug/dwarf", - "dwarf.ClassRangeListPtr": "debug/dwarf", - "dwarf.ClassReference": "debug/dwarf", - "dwarf.ClassReferenceAlt": "debug/dwarf", - "dwarf.ClassReferenceSig": "debug/dwarf", - "dwarf.ClassString": "debug/dwarf", - "dwarf.ClassStringAlt": "debug/dwarf", - "dwarf.ClassUnknown": "debug/dwarf", - "dwarf.CommonType": "debug/dwarf", - "dwarf.ComplexType": "debug/dwarf", - "dwarf.Data": "debug/dwarf", - "dwarf.DecodeError": "debug/dwarf", - "dwarf.DotDotDotType": "debug/dwarf", - "dwarf.Entry": "debug/dwarf", - "dwarf.EnumType": "debug/dwarf", - "dwarf.EnumValue": "debug/dwarf", - "dwarf.ErrUnknownPC": "debug/dwarf", - "dwarf.Field": "debug/dwarf", - "dwarf.FloatType": "debug/dwarf", - "dwarf.FuncType": "debug/dwarf", - "dwarf.IntType": "debug/dwarf", - "dwarf.LineEntry": "debug/dwarf", - "dwarf.LineFile": "debug/dwarf", - "dwarf.LineReader": "debug/dwarf", - "dwarf.LineReaderPos": "debug/dwarf", - "dwarf.New": "debug/dwarf", - "dwarf.Offset": "debug/dwarf", - "dwarf.PtrType": "debug/dwarf", - "dwarf.QualType": "debug/dwarf", - "dwarf.Reader": "debug/dwarf", - "dwarf.StructField": "debug/dwarf", - "dwarf.StructType": "debug/dwarf", - "dwarf.Tag": "debug/dwarf", - "dwarf.TagAccessDeclaration": "debug/dwarf", - "dwarf.TagArrayType": "debug/dwarf", - "dwarf.TagBaseType": "debug/dwarf", - "dwarf.TagCatchDwarfBlock": "debug/dwarf", - "dwarf.TagClassType": "debug/dwarf", - "dwarf.TagCommonDwarfBlock": "debug/dwarf", - "dwarf.TagCommonInclusion": "debug/dwarf", - "dwarf.TagCompileUnit": "debug/dwarf", - "dwarf.TagCondition": "debug/dwarf", - "dwarf.TagConstType": "debug/dwarf", - "dwarf.TagConstant": "debug/dwarf", - "dwarf.TagDwarfProcedure": "debug/dwarf", - "dwarf.TagEntryPoint": "debug/dwarf", - "dwarf.TagEnumerationType": "debug/dwarf", - "dwarf.TagEnumerator": "debug/dwarf", - "dwarf.TagFileType": "debug/dwarf", - "dwarf.TagFormalParameter": "debug/dwarf", - "dwarf.TagFriend": "debug/dwarf", - "dwarf.TagImportedDeclaration": "debug/dwarf", - "dwarf.TagImportedModule": "debug/dwarf", - "dwarf.TagImportedUnit": "debug/dwarf", - "dwarf.TagInheritance": "debug/dwarf", - "dwarf.TagInlinedSubroutine": "debug/dwarf", - "dwarf.TagInterfaceType": "debug/dwarf", - "dwarf.TagLabel": "debug/dwarf", - "dwarf.TagLexDwarfBlock": "debug/dwarf", - "dwarf.TagMember": "debug/dwarf", - "dwarf.TagModule": "debug/dwarf", - "dwarf.TagMutableType": "debug/dwarf", - "dwarf.TagNamelist": "debug/dwarf", - "dwarf.TagNamelistItem": "debug/dwarf", - "dwarf.TagNamespace": "debug/dwarf", - "dwarf.TagPackedType": "debug/dwarf", - "dwarf.TagPartialUnit": "debug/dwarf", - "dwarf.TagPointerType": "debug/dwarf", - "dwarf.TagPtrToMemberType": "debug/dwarf", - "dwarf.TagReferenceType": "debug/dwarf", - "dwarf.TagRestrictType": "debug/dwarf", - "dwarf.TagRvalueReferenceType": "debug/dwarf", - "dwarf.TagSetType": "debug/dwarf", - "dwarf.TagSharedType": "debug/dwarf", - "dwarf.TagStringType": "debug/dwarf", - "dwarf.TagStructType": "debug/dwarf", - "dwarf.TagSubprogram": "debug/dwarf", - "dwarf.TagSubrangeType": "debug/dwarf", - "dwarf.TagSubroutineType": "debug/dwarf", - "dwarf.TagTemplateAlias": "debug/dwarf", - "dwarf.TagTemplateTypeParameter": "debug/dwarf", - "dwarf.TagTemplateValueParameter": "debug/dwarf", - "dwarf.TagThrownType": "debug/dwarf", - "dwarf.TagTryDwarfBlock": "debug/dwarf", - "dwarf.TagTypeUnit": "debug/dwarf", - "dwarf.TagTypedef": "debug/dwarf", - "dwarf.TagUnionType": "debug/dwarf", - "dwarf.TagUnspecifiedParameters": "debug/dwarf", - "dwarf.TagUnspecifiedType": "debug/dwarf", - "dwarf.TagVariable": "debug/dwarf", - "dwarf.TagVariant": "debug/dwarf", - "dwarf.TagVariantPart": "debug/dwarf", - "dwarf.TagVolatileType": "debug/dwarf", - "dwarf.TagWithStmt": "debug/dwarf", - "dwarf.Type": "debug/dwarf", - "dwarf.TypedefType": "debug/dwarf", - "dwarf.UcharType": "debug/dwarf", - "dwarf.UintType": "debug/dwarf", - "dwarf.UnspecifiedType": "debug/dwarf", - "dwarf.VoidType": "debug/dwarf", - "ecdsa.GenerateKey": "crypto/ecdsa", - "ecdsa.PrivateKey": "crypto/ecdsa", - "ecdsa.PublicKey": "crypto/ecdsa", - "ecdsa.Sign": "crypto/ecdsa", - "ecdsa.Verify": "crypto/ecdsa", - "elf.ARM_MAGIC_TRAMP_NUMBER": "debug/elf", - "elf.COMPRESS_HIOS": "debug/elf", - "elf.COMPRESS_HIPROC": "debug/elf", - "elf.COMPRESS_LOOS": "debug/elf", - "elf.COMPRESS_LOPROC": "debug/elf", - "elf.COMPRESS_ZLIB": "debug/elf", - "elf.Chdr32": "debug/elf", - "elf.Chdr64": "debug/elf", - "elf.Class": "debug/elf", - "elf.CompressionType": "debug/elf", - "elf.DF_BIND_NOW": "debug/elf", - "elf.DF_ORIGIN": "debug/elf", - "elf.DF_STATIC_TLS": "debug/elf", - "elf.DF_SYMBOLIC": "debug/elf", - "elf.DF_TEXTREL": "debug/elf", - "elf.DT_BIND_NOW": "debug/elf", - "elf.DT_DEBUG": "debug/elf", - "elf.DT_ENCODING": "debug/elf", - "elf.DT_FINI": "debug/elf", - "elf.DT_FINI_ARRAY": "debug/elf", - "elf.DT_FINI_ARRAYSZ": "debug/elf", - "elf.DT_FLAGS": "debug/elf", - "elf.DT_HASH": "debug/elf", - "elf.DT_HIOS": "debug/elf", - "elf.DT_HIPROC": "debug/elf", - "elf.DT_INIT": "debug/elf", - "elf.DT_INIT_ARRAY": "debug/elf", - "elf.DT_INIT_ARRAYSZ": "debug/elf", - "elf.DT_JMPREL": "debug/elf", - "elf.DT_LOOS": "debug/elf", - "elf.DT_LOPROC": "debug/elf", - "elf.DT_NEEDED": "debug/elf", - "elf.DT_NULL": "debug/elf", - "elf.DT_PLTGOT": "debug/elf", - "elf.DT_PLTREL": "debug/elf", - "elf.DT_PLTRELSZ": "debug/elf", - "elf.DT_PREINIT_ARRAY": "debug/elf", - "elf.DT_PREINIT_ARRAYSZ": "debug/elf", - "elf.DT_REL": "debug/elf", - "elf.DT_RELA": "debug/elf", - "elf.DT_RELAENT": "debug/elf", - "elf.DT_RELASZ": "debug/elf", - "elf.DT_RELENT": "debug/elf", - "elf.DT_RELSZ": "debug/elf", - "elf.DT_RPATH": "debug/elf", - "elf.DT_RUNPATH": "debug/elf", - "elf.DT_SONAME": "debug/elf", - "elf.DT_STRSZ": "debug/elf", - "elf.DT_STRTAB": "debug/elf", - "elf.DT_SYMBOLIC": "debug/elf", - "elf.DT_SYMENT": "debug/elf", - "elf.DT_SYMTAB": "debug/elf", - "elf.DT_TEXTREL": "debug/elf", - "elf.DT_VERNEED": "debug/elf", - "elf.DT_VERNEEDNUM": "debug/elf", - "elf.DT_VERSYM": "debug/elf", - "elf.Data": "debug/elf", - "elf.Dyn32": "debug/elf", - "elf.Dyn64": "debug/elf", - "elf.DynFlag": "debug/elf", - "elf.DynTag": "debug/elf", - "elf.EI_ABIVERSION": "debug/elf", - "elf.EI_CLASS": "debug/elf", - "elf.EI_DATA": "debug/elf", - "elf.EI_NIDENT": "debug/elf", - "elf.EI_OSABI": "debug/elf", - "elf.EI_PAD": "debug/elf", - "elf.EI_VERSION": "debug/elf", - "elf.ELFCLASS32": "debug/elf", - "elf.ELFCLASS64": "debug/elf", - "elf.ELFCLASSNONE": "debug/elf", - "elf.ELFDATA2LSB": "debug/elf", - "elf.ELFDATA2MSB": "debug/elf", - "elf.ELFDATANONE": "debug/elf", - "elf.ELFMAG": "debug/elf", - "elf.ELFOSABI_86OPEN": "debug/elf", - "elf.ELFOSABI_AIX": "debug/elf", - "elf.ELFOSABI_ARM": "debug/elf", - "elf.ELFOSABI_FREEBSD": "debug/elf", - "elf.ELFOSABI_HPUX": "debug/elf", - "elf.ELFOSABI_HURD": "debug/elf", - "elf.ELFOSABI_IRIX": "debug/elf", - "elf.ELFOSABI_LINUX": "debug/elf", - "elf.ELFOSABI_MODESTO": "debug/elf", - "elf.ELFOSABI_NETBSD": "debug/elf", - "elf.ELFOSABI_NONE": "debug/elf", - "elf.ELFOSABI_NSK": "debug/elf", - "elf.ELFOSABI_OPENBSD": "debug/elf", - "elf.ELFOSABI_OPENVMS": "debug/elf", - "elf.ELFOSABI_SOLARIS": "debug/elf", - "elf.ELFOSABI_STANDALONE": "debug/elf", - "elf.ELFOSABI_TRU64": "debug/elf", - "elf.EM_386": "debug/elf", - "elf.EM_486": "debug/elf", - "elf.EM_68HC12": "debug/elf", - "elf.EM_68K": "debug/elf", - "elf.EM_860": "debug/elf", - "elf.EM_88K": "debug/elf", - "elf.EM_960": "debug/elf", - "elf.EM_AARCH64": "debug/elf", - "elf.EM_ALPHA": "debug/elf", - "elf.EM_ALPHA_STD": "debug/elf", - "elf.EM_ARC": "debug/elf", - "elf.EM_ARM": "debug/elf", - "elf.EM_COLDFIRE": "debug/elf", - "elf.EM_FR20": "debug/elf", - "elf.EM_H8S": "debug/elf", - "elf.EM_H8_300": "debug/elf", - "elf.EM_H8_300H": "debug/elf", - "elf.EM_H8_500": "debug/elf", - "elf.EM_IA_64": "debug/elf", - "elf.EM_M32": "debug/elf", - "elf.EM_ME16": "debug/elf", - "elf.EM_MIPS": "debug/elf", - "elf.EM_MIPS_RS3_LE": "debug/elf", - "elf.EM_MIPS_RS4_BE": "debug/elf", - "elf.EM_MIPS_X": "debug/elf", - "elf.EM_MMA": "debug/elf", - "elf.EM_NCPU": "debug/elf", - "elf.EM_NDR1": "debug/elf", - "elf.EM_NONE": "debug/elf", - "elf.EM_PARISC": "debug/elf", - "elf.EM_PCP": "debug/elf", - "elf.EM_PPC": "debug/elf", - "elf.EM_PPC64": "debug/elf", - "elf.EM_RCE": "debug/elf", - "elf.EM_RH32": "debug/elf", - "elf.EM_S370": "debug/elf", - "elf.EM_S390": "debug/elf", - "elf.EM_SH": "debug/elf", - "elf.EM_SPARC": "debug/elf", - "elf.EM_SPARC32PLUS": "debug/elf", - "elf.EM_SPARCV9": "debug/elf", - "elf.EM_ST100": "debug/elf", - "elf.EM_STARCORE": "debug/elf", - "elf.EM_TINYJ": "debug/elf", - "elf.EM_TRICORE": "debug/elf", - "elf.EM_V800": "debug/elf", - "elf.EM_VPP500": "debug/elf", - "elf.EM_X86_64": "debug/elf", - "elf.ET_CORE": "debug/elf", - "elf.ET_DYN": "debug/elf", - "elf.ET_EXEC": "debug/elf", - "elf.ET_HIOS": "debug/elf", - "elf.ET_HIPROC": "debug/elf", - "elf.ET_LOOS": "debug/elf", - "elf.ET_LOPROC": "debug/elf", - "elf.ET_NONE": "debug/elf", - "elf.ET_REL": "debug/elf", - "elf.EV_CURRENT": "debug/elf", - "elf.EV_NONE": "debug/elf", - "elf.ErrNoSymbols": "debug/elf", - "elf.File": "debug/elf", - "elf.FileHeader": "debug/elf", - "elf.FormatError": "debug/elf", - "elf.Header32": "debug/elf", - "elf.Header64": "debug/elf", - "elf.ImportedSymbol": "debug/elf", - "elf.Machine": "debug/elf", - "elf.NT_FPREGSET": "debug/elf", - "elf.NT_PRPSINFO": "debug/elf", - "elf.NT_PRSTATUS": "debug/elf", - "elf.NType": "debug/elf", - "elf.NewFile": "debug/elf", - "elf.OSABI": "debug/elf", - "elf.Open": "debug/elf", - "elf.PF_MASKOS": "debug/elf", - "elf.PF_MASKPROC": "debug/elf", - "elf.PF_R": "debug/elf", - "elf.PF_W": "debug/elf", - "elf.PF_X": "debug/elf", - "elf.PT_DYNAMIC": "debug/elf", - "elf.PT_HIOS": "debug/elf", - "elf.PT_HIPROC": "debug/elf", - "elf.PT_INTERP": "debug/elf", - "elf.PT_LOAD": "debug/elf", - "elf.PT_LOOS": "debug/elf", - "elf.PT_LOPROC": "debug/elf", - "elf.PT_NOTE": "debug/elf", - "elf.PT_NULL": "debug/elf", - "elf.PT_PHDR": "debug/elf", - "elf.PT_SHLIB": "debug/elf", - "elf.PT_TLS": "debug/elf", - "elf.Prog": "debug/elf", - "elf.Prog32": "debug/elf", - "elf.Prog64": "debug/elf", - "elf.ProgFlag": "debug/elf", - "elf.ProgHeader": "debug/elf", - "elf.ProgType": "debug/elf", - "elf.R_386": "debug/elf", - "elf.R_386_32": "debug/elf", - "elf.R_386_COPY": "debug/elf", - "elf.R_386_GLOB_DAT": "debug/elf", - "elf.R_386_GOT32": "debug/elf", - "elf.R_386_GOTOFF": "debug/elf", - "elf.R_386_GOTPC": "debug/elf", - "elf.R_386_JMP_SLOT": "debug/elf", - "elf.R_386_NONE": "debug/elf", - "elf.R_386_PC32": "debug/elf", - "elf.R_386_PLT32": "debug/elf", - "elf.R_386_RELATIVE": "debug/elf", - "elf.R_386_TLS_DTPMOD32": "debug/elf", - "elf.R_386_TLS_DTPOFF32": "debug/elf", - "elf.R_386_TLS_GD": "debug/elf", - "elf.R_386_TLS_GD_32": "debug/elf", - "elf.R_386_TLS_GD_CALL": "debug/elf", - "elf.R_386_TLS_GD_POP": "debug/elf", - "elf.R_386_TLS_GD_PUSH": "debug/elf", - "elf.R_386_TLS_GOTIE": "debug/elf", - "elf.R_386_TLS_IE": "debug/elf", - "elf.R_386_TLS_IE_32": "debug/elf", - "elf.R_386_TLS_LDM": "debug/elf", - "elf.R_386_TLS_LDM_32": "debug/elf", - "elf.R_386_TLS_LDM_CALL": "debug/elf", - "elf.R_386_TLS_LDM_POP": "debug/elf", - "elf.R_386_TLS_LDM_PUSH": "debug/elf", - "elf.R_386_TLS_LDO_32": "debug/elf", - "elf.R_386_TLS_LE": "debug/elf", - "elf.R_386_TLS_LE_32": "debug/elf", - "elf.R_386_TLS_TPOFF": "debug/elf", - "elf.R_386_TLS_TPOFF32": "debug/elf", - "elf.R_390": "debug/elf", - "elf.R_390_12": "debug/elf", - "elf.R_390_16": "debug/elf", - "elf.R_390_20": "debug/elf", - "elf.R_390_32": "debug/elf", - "elf.R_390_64": "debug/elf", - "elf.R_390_8": "debug/elf", - "elf.R_390_COPY": "debug/elf", - "elf.R_390_GLOB_DAT": "debug/elf", - "elf.R_390_GOT12": "debug/elf", - "elf.R_390_GOT16": "debug/elf", - "elf.R_390_GOT20": "debug/elf", - "elf.R_390_GOT32": "debug/elf", - "elf.R_390_GOT64": "debug/elf", - "elf.R_390_GOTENT": "debug/elf", - "elf.R_390_GOTOFF": "debug/elf", - "elf.R_390_GOTOFF16": "debug/elf", - "elf.R_390_GOTOFF64": "debug/elf", - "elf.R_390_GOTPC": "debug/elf", - "elf.R_390_GOTPCDBL": "debug/elf", - "elf.R_390_GOTPLT12": "debug/elf", - "elf.R_390_GOTPLT16": "debug/elf", - "elf.R_390_GOTPLT20": "debug/elf", - "elf.R_390_GOTPLT32": "debug/elf", - "elf.R_390_GOTPLT64": "debug/elf", - "elf.R_390_GOTPLTENT": "debug/elf", - "elf.R_390_GOTPLTOFF16": "debug/elf", - "elf.R_390_GOTPLTOFF32": "debug/elf", - "elf.R_390_GOTPLTOFF64": "debug/elf", - "elf.R_390_JMP_SLOT": "debug/elf", - "elf.R_390_NONE": "debug/elf", - "elf.R_390_PC16": "debug/elf", - "elf.R_390_PC16DBL": "debug/elf", - "elf.R_390_PC32": "debug/elf", - "elf.R_390_PC32DBL": "debug/elf", - "elf.R_390_PC64": "debug/elf", - "elf.R_390_PLT16DBL": "debug/elf", - "elf.R_390_PLT32": "debug/elf", - "elf.R_390_PLT32DBL": "debug/elf", - "elf.R_390_PLT64": "debug/elf", - "elf.R_390_RELATIVE": "debug/elf", - "elf.R_390_TLS_DTPMOD": "debug/elf", - "elf.R_390_TLS_DTPOFF": "debug/elf", - "elf.R_390_TLS_GD32": "debug/elf", - "elf.R_390_TLS_GD64": "debug/elf", - "elf.R_390_TLS_GDCALL": "debug/elf", - "elf.R_390_TLS_GOTIE12": "debug/elf", - "elf.R_390_TLS_GOTIE20": "debug/elf", - "elf.R_390_TLS_GOTIE32": "debug/elf", - "elf.R_390_TLS_GOTIE64": "debug/elf", - "elf.R_390_TLS_IE32": "debug/elf", - "elf.R_390_TLS_IE64": "debug/elf", - "elf.R_390_TLS_IEENT": "debug/elf", - "elf.R_390_TLS_LDCALL": "debug/elf", - "elf.R_390_TLS_LDM32": "debug/elf", - "elf.R_390_TLS_LDM64": "debug/elf", - "elf.R_390_TLS_LDO32": "debug/elf", - "elf.R_390_TLS_LDO64": "debug/elf", - "elf.R_390_TLS_LE32": "debug/elf", - "elf.R_390_TLS_LE64": "debug/elf", - "elf.R_390_TLS_LOAD": "debug/elf", - "elf.R_390_TLS_TPOFF": "debug/elf", - "elf.R_AARCH64": "debug/elf", - "elf.R_AARCH64_ABS16": "debug/elf", - "elf.R_AARCH64_ABS32": "debug/elf", - "elf.R_AARCH64_ABS64": "debug/elf", - "elf.R_AARCH64_ADD_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_ADR_GOT_PAGE": "debug/elf", - "elf.R_AARCH64_ADR_PREL_LO21": "debug/elf", - "elf.R_AARCH64_ADR_PREL_PG_HI21": "debug/elf", - "elf.R_AARCH64_ADR_PREL_PG_HI21_NC": "debug/elf", - "elf.R_AARCH64_CALL26": "debug/elf", - "elf.R_AARCH64_CONDBR19": "debug/elf", - "elf.R_AARCH64_COPY": "debug/elf", - "elf.R_AARCH64_GLOB_DAT": "debug/elf", - "elf.R_AARCH64_GOT_LD_PREL19": "debug/elf", - "elf.R_AARCH64_IRELATIVE": "debug/elf", - "elf.R_AARCH64_JUMP26": "debug/elf", - "elf.R_AARCH64_JUMP_SLOT": "debug/elf", - "elf.R_AARCH64_LD64_GOT_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST128_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST16_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST32_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST64_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST8_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LD_PREL_LO19": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G0": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G1": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G2": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G0": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G0_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G1": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G1_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G2": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G2_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G3": "debug/elf", - "elf.R_AARCH64_NONE": "debug/elf", - "elf.R_AARCH64_NULL": "debug/elf", - "elf.R_AARCH64_P32_ABS16": "debug/elf", - "elf.R_AARCH64_P32_ABS32": "debug/elf", - "elf.R_AARCH64_P32_ADD_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_ADR_GOT_PAGE": "debug/elf", - "elf.R_AARCH64_P32_ADR_PREL_LO21": "debug/elf", - "elf.R_AARCH64_P32_ADR_PREL_PG_HI21": "debug/elf", - "elf.R_AARCH64_P32_CALL26": "debug/elf", - "elf.R_AARCH64_P32_CONDBR19": "debug/elf", - "elf.R_AARCH64_P32_COPY": "debug/elf", - "elf.R_AARCH64_P32_GLOB_DAT": "debug/elf", - "elf.R_AARCH64_P32_GOT_LD_PREL19": "debug/elf", - "elf.R_AARCH64_P32_IRELATIVE": "debug/elf", - "elf.R_AARCH64_P32_JUMP26": "debug/elf", - "elf.R_AARCH64_P32_JUMP_SLOT": "debug/elf", - "elf.R_AARCH64_P32_LD32_GOT_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST128_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST16_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST32_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST64_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST8_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LD_PREL_LO19": "debug/elf", - "elf.R_AARCH64_P32_MOVW_SABS_G0": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G0": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G0_NC": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G1": "debug/elf", - "elf.R_AARCH64_P32_PREL16": "debug/elf", - "elf.R_AARCH64_P32_PREL32": "debug/elf", - "elf.R_AARCH64_P32_RELATIVE": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADR_PREL21": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_CALL": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_LD32_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_LD_PREL19": "debug/elf", - "elf.R_AARCH64_P32_TLSGD_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSGD_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_HI12": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G1": "debug/elf", - "elf.R_AARCH64_P32_TLS_DTPMOD": "debug/elf", - "elf.R_AARCH64_P32_TLS_DTPREL": "debug/elf", - "elf.R_AARCH64_P32_TLS_TPREL": "debug/elf", - "elf.R_AARCH64_P32_TSTBR14": "debug/elf", - "elf.R_AARCH64_PREL16": "debug/elf", - "elf.R_AARCH64_PREL32": "debug/elf", - "elf.R_AARCH64_PREL64": "debug/elf", - "elf.R_AARCH64_RELATIVE": "debug/elf", - "elf.R_AARCH64_TLSDESC": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADD": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADR_PREL21": "debug/elf", - "elf.R_AARCH64_TLSDESC_CALL": "debug/elf", - "elf.R_AARCH64_TLSDESC_LD64_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_LDR": "debug/elf", - "elf.R_AARCH64_TLSDESC_LD_PREL19": "debug/elf", - "elf.R_AARCH64_TLSDESC_OFF_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_OFF_G1": "debug/elf", - "elf.R_AARCH64_TLSGD_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSGD_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSIE_LD_GOTTPREL_PREL19": "debug/elf", - "elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G1": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_HI12": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_LO12": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G0": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G1": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G1_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G2": "debug/elf", - "elf.R_AARCH64_TLS_DTPMOD64": "debug/elf", - "elf.R_AARCH64_TLS_DTPREL64": "debug/elf", - "elf.R_AARCH64_TLS_TPREL64": "debug/elf", - "elf.R_AARCH64_TSTBR14": "debug/elf", - "elf.R_ALPHA": "debug/elf", - "elf.R_ALPHA_BRADDR": "debug/elf", - "elf.R_ALPHA_COPY": "debug/elf", - "elf.R_ALPHA_GLOB_DAT": "debug/elf", - "elf.R_ALPHA_GPDISP": "debug/elf", - "elf.R_ALPHA_GPREL32": "debug/elf", - "elf.R_ALPHA_GPRELHIGH": "debug/elf", - "elf.R_ALPHA_GPRELLOW": "debug/elf", - "elf.R_ALPHA_GPVALUE": "debug/elf", - "elf.R_ALPHA_HINT": "debug/elf", - "elf.R_ALPHA_IMMED_BR_HI32": "debug/elf", - "elf.R_ALPHA_IMMED_GP_16": "debug/elf", - "elf.R_ALPHA_IMMED_GP_HI32": "debug/elf", - "elf.R_ALPHA_IMMED_LO32": "debug/elf", - "elf.R_ALPHA_IMMED_SCN_HI32": "debug/elf", - "elf.R_ALPHA_JMP_SLOT": "debug/elf", - "elf.R_ALPHA_LITERAL": "debug/elf", - "elf.R_ALPHA_LITUSE": "debug/elf", - "elf.R_ALPHA_NONE": "debug/elf", - "elf.R_ALPHA_OP_PRSHIFT": "debug/elf", - "elf.R_ALPHA_OP_PSUB": "debug/elf", - "elf.R_ALPHA_OP_PUSH": "debug/elf", - "elf.R_ALPHA_OP_STORE": "debug/elf", - "elf.R_ALPHA_REFLONG": "debug/elf", - "elf.R_ALPHA_REFQUAD": "debug/elf", - "elf.R_ALPHA_RELATIVE": "debug/elf", - "elf.R_ALPHA_SREL16": "debug/elf", - "elf.R_ALPHA_SREL32": "debug/elf", - "elf.R_ALPHA_SREL64": "debug/elf", - "elf.R_ARM": "debug/elf", - "elf.R_ARM_ABS12": "debug/elf", - "elf.R_ARM_ABS16": "debug/elf", - "elf.R_ARM_ABS32": "debug/elf", - "elf.R_ARM_ABS8": "debug/elf", - "elf.R_ARM_AMP_VCALL9": "debug/elf", - "elf.R_ARM_COPY": "debug/elf", - "elf.R_ARM_GLOB_DAT": "debug/elf", - "elf.R_ARM_GNU_VTENTRY": "debug/elf", - "elf.R_ARM_GNU_VTINHERIT": "debug/elf", - "elf.R_ARM_GOT32": "debug/elf", - "elf.R_ARM_GOTOFF": "debug/elf", - "elf.R_ARM_GOTPC": "debug/elf", - "elf.R_ARM_JUMP_SLOT": "debug/elf", - "elf.R_ARM_NONE": "debug/elf", - "elf.R_ARM_PC13": "debug/elf", - "elf.R_ARM_PC24": "debug/elf", - "elf.R_ARM_PLT32": "debug/elf", - "elf.R_ARM_RABS32": "debug/elf", - "elf.R_ARM_RBASE": "debug/elf", - "elf.R_ARM_REL32": "debug/elf", - "elf.R_ARM_RELATIVE": "debug/elf", - "elf.R_ARM_RPC24": "debug/elf", - "elf.R_ARM_RREL32": "debug/elf", - "elf.R_ARM_RSBREL32": "debug/elf", - "elf.R_ARM_SBREL32": "debug/elf", - "elf.R_ARM_SWI24": "debug/elf", - "elf.R_ARM_THM_ABS5": "debug/elf", - "elf.R_ARM_THM_PC22": "debug/elf", - "elf.R_ARM_THM_PC8": "debug/elf", - "elf.R_ARM_THM_RPC22": "debug/elf", - "elf.R_ARM_THM_SWI8": "debug/elf", - "elf.R_ARM_THM_XPC22": "debug/elf", - "elf.R_ARM_XPC25": "debug/elf", - "elf.R_INFO": "debug/elf", - "elf.R_INFO32": "debug/elf", - "elf.R_MIPS": "debug/elf", - "elf.R_MIPS_16": "debug/elf", - "elf.R_MIPS_26": "debug/elf", - "elf.R_MIPS_32": "debug/elf", - "elf.R_MIPS_64": "debug/elf", - "elf.R_MIPS_ADD_IMMEDIATE": "debug/elf", - "elf.R_MIPS_CALL16": "debug/elf", - "elf.R_MIPS_CALL_HI16": "debug/elf", - "elf.R_MIPS_CALL_LO16": "debug/elf", - "elf.R_MIPS_DELETE": "debug/elf", - "elf.R_MIPS_GOT16": "debug/elf", - "elf.R_MIPS_GOT_DISP": "debug/elf", - "elf.R_MIPS_GOT_HI16": "debug/elf", - "elf.R_MIPS_GOT_LO16": "debug/elf", - "elf.R_MIPS_GOT_OFST": "debug/elf", - "elf.R_MIPS_GOT_PAGE": "debug/elf", - "elf.R_MIPS_GPREL16": "debug/elf", - "elf.R_MIPS_GPREL32": "debug/elf", - "elf.R_MIPS_HI16": "debug/elf", - "elf.R_MIPS_HIGHER": "debug/elf", - "elf.R_MIPS_HIGHEST": "debug/elf", - "elf.R_MIPS_INSERT_A": "debug/elf", - "elf.R_MIPS_INSERT_B": "debug/elf", - "elf.R_MIPS_JALR": "debug/elf", - "elf.R_MIPS_LITERAL": "debug/elf", - "elf.R_MIPS_LO16": "debug/elf", - "elf.R_MIPS_NONE": "debug/elf", - "elf.R_MIPS_PC16": "debug/elf", - "elf.R_MIPS_PJUMP": "debug/elf", - "elf.R_MIPS_REL16": "debug/elf", - "elf.R_MIPS_REL32": "debug/elf", - "elf.R_MIPS_RELGOT": "debug/elf", - "elf.R_MIPS_SCN_DISP": "debug/elf", - "elf.R_MIPS_SHIFT5": "debug/elf", - "elf.R_MIPS_SHIFT6": "debug/elf", - "elf.R_MIPS_SUB": "debug/elf", - "elf.R_MIPS_TLS_DTPMOD32": "debug/elf", - "elf.R_MIPS_TLS_DTPMOD64": "debug/elf", - "elf.R_MIPS_TLS_DTPREL32": "debug/elf", - "elf.R_MIPS_TLS_DTPREL64": "debug/elf", - "elf.R_MIPS_TLS_DTPREL_HI16": "debug/elf", - "elf.R_MIPS_TLS_DTPREL_LO16": "debug/elf", - "elf.R_MIPS_TLS_GD": "debug/elf", - "elf.R_MIPS_TLS_GOTTPREL": "debug/elf", - "elf.R_MIPS_TLS_LDM": "debug/elf", - "elf.R_MIPS_TLS_TPREL32": "debug/elf", - "elf.R_MIPS_TLS_TPREL64": "debug/elf", - "elf.R_MIPS_TLS_TPREL_HI16": "debug/elf", - "elf.R_MIPS_TLS_TPREL_LO16": "debug/elf", - "elf.R_PPC": "debug/elf", - "elf.R_PPC64": "debug/elf", - "elf.R_PPC64_ADDR14": "debug/elf", - "elf.R_PPC64_ADDR14_BRNTAKEN": "debug/elf", - "elf.R_PPC64_ADDR14_BRTAKEN": "debug/elf", - "elf.R_PPC64_ADDR16": "debug/elf", - "elf.R_PPC64_ADDR16_DS": "debug/elf", - "elf.R_PPC64_ADDR16_HA": "debug/elf", - "elf.R_PPC64_ADDR16_HI": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHER": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHERA": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHEST": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHESTA": "debug/elf", - "elf.R_PPC64_ADDR16_LO": "debug/elf", - "elf.R_PPC64_ADDR16_LO_DS": "debug/elf", - "elf.R_PPC64_ADDR24": "debug/elf", - "elf.R_PPC64_ADDR32": "debug/elf", - "elf.R_PPC64_ADDR64": "debug/elf", - "elf.R_PPC64_DTPMOD64": "debug/elf", - "elf.R_PPC64_DTPREL16": "debug/elf", - "elf.R_PPC64_DTPREL16_DS": "debug/elf", - "elf.R_PPC64_DTPREL16_HA": "debug/elf", - "elf.R_PPC64_DTPREL16_HI": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHER": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHERA": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHEST": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHESTA": "debug/elf", - "elf.R_PPC64_DTPREL16_LO": "debug/elf", - "elf.R_PPC64_DTPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_DTPREL64": "debug/elf", - "elf.R_PPC64_GOT16": "debug/elf", - "elf.R_PPC64_GOT16_DS": "debug/elf", - "elf.R_PPC64_GOT16_HA": "debug/elf", - "elf.R_PPC64_GOT16_HI": "debug/elf", - "elf.R_PPC64_GOT16_LO": "debug/elf", - "elf.R_PPC64_GOT16_LO_DS": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_DS": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_HA": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_HI": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_HA": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_HI": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_LO": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_HA": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_HI": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_LO": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_DS": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_HA": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_HI": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_JMP_SLOT": "debug/elf", - "elf.R_PPC64_NONE": "debug/elf", - "elf.R_PPC64_REL14": "debug/elf", - "elf.R_PPC64_REL14_BRNTAKEN": "debug/elf", - "elf.R_PPC64_REL14_BRTAKEN": "debug/elf", - "elf.R_PPC64_REL16": "debug/elf", - "elf.R_PPC64_REL16_HA": "debug/elf", - "elf.R_PPC64_REL16_HI": "debug/elf", - "elf.R_PPC64_REL16_LO": "debug/elf", - "elf.R_PPC64_REL24": "debug/elf", - "elf.R_PPC64_REL32": "debug/elf", - "elf.R_PPC64_REL64": "debug/elf", - "elf.R_PPC64_TLS": "debug/elf", - "elf.R_PPC64_TLSGD": "debug/elf", - "elf.R_PPC64_TLSLD": "debug/elf", - "elf.R_PPC64_TOC": "debug/elf", - "elf.R_PPC64_TOC16": "debug/elf", - "elf.R_PPC64_TOC16_DS": "debug/elf", - "elf.R_PPC64_TOC16_HA": "debug/elf", - "elf.R_PPC64_TOC16_HI": "debug/elf", - "elf.R_PPC64_TOC16_LO": "debug/elf", - "elf.R_PPC64_TOC16_LO_DS": "debug/elf", - "elf.R_PPC64_TPREL16": "debug/elf", - "elf.R_PPC64_TPREL16_DS": "debug/elf", - "elf.R_PPC64_TPREL16_HA": "debug/elf", - "elf.R_PPC64_TPREL16_HI": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHER": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHERA": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHEST": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHESTA": "debug/elf", - "elf.R_PPC64_TPREL16_LO": "debug/elf", - "elf.R_PPC64_TPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_TPREL64": "debug/elf", - "elf.R_PPC_ADDR14": "debug/elf", - "elf.R_PPC_ADDR14_BRNTAKEN": "debug/elf", - "elf.R_PPC_ADDR14_BRTAKEN": "debug/elf", - "elf.R_PPC_ADDR16": "debug/elf", - "elf.R_PPC_ADDR16_HA": "debug/elf", - "elf.R_PPC_ADDR16_HI": "debug/elf", - "elf.R_PPC_ADDR16_LO": "debug/elf", - "elf.R_PPC_ADDR24": "debug/elf", - "elf.R_PPC_ADDR32": "debug/elf", - "elf.R_PPC_COPY": "debug/elf", - "elf.R_PPC_DTPMOD32": "debug/elf", - "elf.R_PPC_DTPREL16": "debug/elf", - "elf.R_PPC_DTPREL16_HA": "debug/elf", - "elf.R_PPC_DTPREL16_HI": "debug/elf", - "elf.R_PPC_DTPREL16_LO": "debug/elf", - "elf.R_PPC_DTPREL32": "debug/elf", - "elf.R_PPC_EMB_BIT_FLD": "debug/elf", - "elf.R_PPC_EMB_MRKREF": "debug/elf", - "elf.R_PPC_EMB_NADDR16": "debug/elf", - "elf.R_PPC_EMB_NADDR16_HA": "debug/elf", - "elf.R_PPC_EMB_NADDR16_HI": "debug/elf", - "elf.R_PPC_EMB_NADDR16_LO": "debug/elf", - "elf.R_PPC_EMB_NADDR32": "debug/elf", - "elf.R_PPC_EMB_RELSDA": "debug/elf", - "elf.R_PPC_EMB_RELSEC16": "debug/elf", - "elf.R_PPC_EMB_RELST_HA": "debug/elf", - "elf.R_PPC_EMB_RELST_HI": "debug/elf", - "elf.R_PPC_EMB_RELST_LO": "debug/elf", - "elf.R_PPC_EMB_SDA21": "debug/elf", - "elf.R_PPC_EMB_SDA2I16": "debug/elf", - "elf.R_PPC_EMB_SDA2REL": "debug/elf", - "elf.R_PPC_EMB_SDAI16": "debug/elf", - "elf.R_PPC_GLOB_DAT": "debug/elf", - "elf.R_PPC_GOT16": "debug/elf", - "elf.R_PPC_GOT16_HA": "debug/elf", - "elf.R_PPC_GOT16_HI": "debug/elf", - "elf.R_PPC_GOT16_LO": "debug/elf", - "elf.R_PPC_GOT_TLSGD16": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_HA": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_HI": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_LO": "debug/elf", - "elf.R_PPC_GOT_TLSLD16": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_HA": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_HI": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_LO": "debug/elf", - "elf.R_PPC_GOT_TPREL16": "debug/elf", - "elf.R_PPC_GOT_TPREL16_HA": "debug/elf", - "elf.R_PPC_GOT_TPREL16_HI": "debug/elf", - "elf.R_PPC_GOT_TPREL16_LO": "debug/elf", - "elf.R_PPC_JMP_SLOT": "debug/elf", - "elf.R_PPC_LOCAL24PC": "debug/elf", - "elf.R_PPC_NONE": "debug/elf", - "elf.R_PPC_PLT16_HA": "debug/elf", - "elf.R_PPC_PLT16_HI": "debug/elf", - "elf.R_PPC_PLT16_LO": "debug/elf", - "elf.R_PPC_PLT32": "debug/elf", - "elf.R_PPC_PLTREL24": "debug/elf", - "elf.R_PPC_PLTREL32": "debug/elf", - "elf.R_PPC_REL14": "debug/elf", - "elf.R_PPC_REL14_BRNTAKEN": "debug/elf", - "elf.R_PPC_REL14_BRTAKEN": "debug/elf", - "elf.R_PPC_REL24": "debug/elf", - "elf.R_PPC_REL32": "debug/elf", - "elf.R_PPC_RELATIVE": "debug/elf", - "elf.R_PPC_SDAREL16": "debug/elf", - "elf.R_PPC_SECTOFF": "debug/elf", - "elf.R_PPC_SECTOFF_HA": "debug/elf", - "elf.R_PPC_SECTOFF_HI": "debug/elf", - "elf.R_PPC_SECTOFF_LO": "debug/elf", - "elf.R_PPC_TLS": "debug/elf", - "elf.R_PPC_TPREL16": "debug/elf", - "elf.R_PPC_TPREL16_HA": "debug/elf", - "elf.R_PPC_TPREL16_HI": "debug/elf", - "elf.R_PPC_TPREL16_LO": "debug/elf", - "elf.R_PPC_TPREL32": "debug/elf", - "elf.R_PPC_UADDR16": "debug/elf", - "elf.R_PPC_UADDR32": "debug/elf", - "elf.R_SPARC": "debug/elf", - "elf.R_SPARC_10": "debug/elf", - "elf.R_SPARC_11": "debug/elf", - "elf.R_SPARC_13": "debug/elf", - "elf.R_SPARC_16": "debug/elf", - "elf.R_SPARC_22": "debug/elf", - "elf.R_SPARC_32": "debug/elf", - "elf.R_SPARC_5": "debug/elf", - "elf.R_SPARC_6": "debug/elf", - "elf.R_SPARC_64": "debug/elf", - "elf.R_SPARC_7": "debug/elf", - "elf.R_SPARC_8": "debug/elf", - "elf.R_SPARC_COPY": "debug/elf", - "elf.R_SPARC_DISP16": "debug/elf", - "elf.R_SPARC_DISP32": "debug/elf", - "elf.R_SPARC_DISP64": "debug/elf", - "elf.R_SPARC_DISP8": "debug/elf", - "elf.R_SPARC_GLOB_DAT": "debug/elf", - "elf.R_SPARC_GLOB_JMP": "debug/elf", - "elf.R_SPARC_GOT10": "debug/elf", - "elf.R_SPARC_GOT13": "debug/elf", - "elf.R_SPARC_GOT22": "debug/elf", - "elf.R_SPARC_H44": "debug/elf", - "elf.R_SPARC_HH22": "debug/elf", - "elf.R_SPARC_HI22": "debug/elf", - "elf.R_SPARC_HIPLT22": "debug/elf", - "elf.R_SPARC_HIX22": "debug/elf", - "elf.R_SPARC_HM10": "debug/elf", - "elf.R_SPARC_JMP_SLOT": "debug/elf", - "elf.R_SPARC_L44": "debug/elf", - "elf.R_SPARC_LM22": "debug/elf", - "elf.R_SPARC_LO10": "debug/elf", - "elf.R_SPARC_LOPLT10": "debug/elf", - "elf.R_SPARC_LOX10": "debug/elf", - "elf.R_SPARC_M44": "debug/elf", - "elf.R_SPARC_NONE": "debug/elf", - "elf.R_SPARC_OLO10": "debug/elf", - "elf.R_SPARC_PC10": "debug/elf", - "elf.R_SPARC_PC22": "debug/elf", - "elf.R_SPARC_PCPLT10": "debug/elf", - "elf.R_SPARC_PCPLT22": "debug/elf", - "elf.R_SPARC_PCPLT32": "debug/elf", - "elf.R_SPARC_PC_HH22": "debug/elf", - "elf.R_SPARC_PC_HM10": "debug/elf", - "elf.R_SPARC_PC_LM22": "debug/elf", - "elf.R_SPARC_PLT32": "debug/elf", - "elf.R_SPARC_PLT64": "debug/elf", - "elf.R_SPARC_REGISTER": "debug/elf", - "elf.R_SPARC_RELATIVE": "debug/elf", - "elf.R_SPARC_UA16": "debug/elf", - "elf.R_SPARC_UA32": "debug/elf", - "elf.R_SPARC_UA64": "debug/elf", - "elf.R_SPARC_WDISP16": "debug/elf", - "elf.R_SPARC_WDISP19": "debug/elf", - "elf.R_SPARC_WDISP22": "debug/elf", - "elf.R_SPARC_WDISP30": "debug/elf", - "elf.R_SPARC_WPLT30": "debug/elf", - "elf.R_SYM32": "debug/elf", - "elf.R_SYM64": "debug/elf", - "elf.R_TYPE32": "debug/elf", - "elf.R_TYPE64": "debug/elf", - "elf.R_X86_64": "debug/elf", - "elf.R_X86_64_16": "debug/elf", - "elf.R_X86_64_32": "debug/elf", - "elf.R_X86_64_32S": "debug/elf", - "elf.R_X86_64_64": "debug/elf", - "elf.R_X86_64_8": "debug/elf", - "elf.R_X86_64_COPY": "debug/elf", - "elf.R_X86_64_DTPMOD64": "debug/elf", - "elf.R_X86_64_DTPOFF32": "debug/elf", - "elf.R_X86_64_DTPOFF64": "debug/elf", - "elf.R_X86_64_GLOB_DAT": "debug/elf", - "elf.R_X86_64_GOT32": "debug/elf", - "elf.R_X86_64_GOTPCREL": "debug/elf", - "elf.R_X86_64_GOTTPOFF": "debug/elf", - "elf.R_X86_64_JMP_SLOT": "debug/elf", - "elf.R_X86_64_NONE": "debug/elf", - "elf.R_X86_64_PC16": "debug/elf", - "elf.R_X86_64_PC32": "debug/elf", - "elf.R_X86_64_PC8": "debug/elf", - "elf.R_X86_64_PLT32": "debug/elf", - "elf.R_X86_64_RELATIVE": "debug/elf", - "elf.R_X86_64_TLSGD": "debug/elf", - "elf.R_X86_64_TLSLD": "debug/elf", - "elf.R_X86_64_TPOFF32": "debug/elf", - "elf.R_X86_64_TPOFF64": "debug/elf", - "elf.Rel32": "debug/elf", - "elf.Rel64": "debug/elf", - "elf.Rela32": "debug/elf", - "elf.Rela64": "debug/elf", - "elf.SHF_ALLOC": "debug/elf", - "elf.SHF_COMPRESSED": "debug/elf", - "elf.SHF_EXECINSTR": "debug/elf", - "elf.SHF_GROUP": "debug/elf", - "elf.SHF_INFO_LINK": "debug/elf", - "elf.SHF_LINK_ORDER": "debug/elf", - "elf.SHF_MASKOS": "debug/elf", - "elf.SHF_MASKPROC": "debug/elf", - "elf.SHF_MERGE": "debug/elf", - "elf.SHF_OS_NONCONFORMING": "debug/elf", - "elf.SHF_STRINGS": "debug/elf", - "elf.SHF_TLS": "debug/elf", - "elf.SHF_WRITE": "debug/elf", - "elf.SHN_ABS": "debug/elf", - "elf.SHN_COMMON": "debug/elf", - "elf.SHN_HIOS": "debug/elf", - "elf.SHN_HIPROC": "debug/elf", - "elf.SHN_HIRESERVE": "debug/elf", - "elf.SHN_LOOS": "debug/elf", - "elf.SHN_LOPROC": "debug/elf", - "elf.SHN_LORESERVE": "debug/elf", - "elf.SHN_UNDEF": "debug/elf", - "elf.SHN_XINDEX": "debug/elf", - "elf.SHT_DYNAMIC": "debug/elf", - "elf.SHT_DYNSYM": "debug/elf", - "elf.SHT_FINI_ARRAY": "debug/elf", - "elf.SHT_GNU_ATTRIBUTES": "debug/elf", - "elf.SHT_GNU_HASH": "debug/elf", - "elf.SHT_GNU_LIBLIST": "debug/elf", - "elf.SHT_GNU_VERDEF": "debug/elf", - "elf.SHT_GNU_VERNEED": "debug/elf", - "elf.SHT_GNU_VERSYM": "debug/elf", - "elf.SHT_GROUP": "debug/elf", - "elf.SHT_HASH": "debug/elf", - "elf.SHT_HIOS": "debug/elf", - "elf.SHT_HIPROC": "debug/elf", - "elf.SHT_HIUSER": "debug/elf", - "elf.SHT_INIT_ARRAY": "debug/elf", - "elf.SHT_LOOS": "debug/elf", - "elf.SHT_LOPROC": "debug/elf", - "elf.SHT_LOUSER": "debug/elf", - "elf.SHT_NOBITS": "debug/elf", - "elf.SHT_NOTE": "debug/elf", - "elf.SHT_NULL": "debug/elf", - "elf.SHT_PREINIT_ARRAY": "debug/elf", - "elf.SHT_PROGBITS": "debug/elf", - "elf.SHT_REL": "debug/elf", - "elf.SHT_RELA": "debug/elf", - "elf.SHT_SHLIB": "debug/elf", - "elf.SHT_STRTAB": "debug/elf", - "elf.SHT_SYMTAB": "debug/elf", - "elf.SHT_SYMTAB_SHNDX": "debug/elf", - "elf.STB_GLOBAL": "debug/elf", - "elf.STB_HIOS": "debug/elf", - "elf.STB_HIPROC": "debug/elf", - "elf.STB_LOCAL": "debug/elf", - "elf.STB_LOOS": "debug/elf", - "elf.STB_LOPROC": "debug/elf", - "elf.STB_WEAK": "debug/elf", - "elf.STT_COMMON": "debug/elf", - "elf.STT_FILE": "debug/elf", - "elf.STT_FUNC": "debug/elf", - "elf.STT_HIOS": "debug/elf", - "elf.STT_HIPROC": "debug/elf", - "elf.STT_LOOS": "debug/elf", - "elf.STT_LOPROC": "debug/elf", - "elf.STT_NOTYPE": "debug/elf", - "elf.STT_OBJECT": "debug/elf", - "elf.STT_SECTION": "debug/elf", - "elf.STT_TLS": "debug/elf", - "elf.STV_DEFAULT": "debug/elf", - "elf.STV_HIDDEN": "debug/elf", - "elf.STV_INTERNAL": "debug/elf", - "elf.STV_PROTECTED": "debug/elf", - "elf.ST_BIND": "debug/elf", - "elf.ST_INFO": "debug/elf", - "elf.ST_TYPE": "debug/elf", - "elf.ST_VISIBILITY": "debug/elf", - "elf.Section": "debug/elf", - "elf.Section32": "debug/elf", - "elf.Section64": "debug/elf", - "elf.SectionFlag": "debug/elf", - "elf.SectionHeader": "debug/elf", - "elf.SectionIndex": "debug/elf", - "elf.SectionType": "debug/elf", - "elf.Sym32": "debug/elf", - "elf.Sym32Size": "debug/elf", - "elf.Sym64": "debug/elf", - "elf.Sym64Size": "debug/elf", - "elf.SymBind": "debug/elf", - "elf.SymType": "debug/elf", - "elf.SymVis": "debug/elf", - "elf.Symbol": "debug/elf", - "elf.Type": "debug/elf", - "elf.Version": "debug/elf", - "elliptic.Curve": "crypto/elliptic", - "elliptic.CurveParams": "crypto/elliptic", - "elliptic.GenerateKey": "crypto/elliptic", - "elliptic.Marshal": "crypto/elliptic", - "elliptic.P224": "crypto/elliptic", - "elliptic.P256": "crypto/elliptic", - "elliptic.P384": "crypto/elliptic", - "elliptic.P521": "crypto/elliptic", - "elliptic.Unmarshal": "crypto/elliptic", - "encoding.BinaryMarshaler": "encoding", - "encoding.BinaryUnmarshaler": "encoding", - "encoding.TextMarshaler": "encoding", - "encoding.TextUnmarshaler": "encoding", - "errors.New": "errors", - "exec.Cmd": "os/exec", - "exec.Command": "os/exec", - "exec.CommandContext": "os/exec", - "exec.ErrNotFound": "os/exec", - "exec.Error": "os/exec", - "exec.ExitError": "os/exec", - "exec.LookPath": "os/exec", - "expvar.Do": "expvar", - "expvar.Float": "expvar", - "expvar.Func": "expvar", - "expvar.Get": "expvar", - "expvar.Handler": "expvar", - "expvar.Int": "expvar", - "expvar.KeyValue": "expvar", - "expvar.Map": "expvar", - "expvar.NewFloat": "expvar", - "expvar.NewInt": "expvar", - "expvar.NewMap": "expvar", - "expvar.NewString": "expvar", - "expvar.Publish": "expvar", - "expvar.String": "expvar", - "expvar.Var": "expvar", - "fcgi.ErrConnClosed": "net/http/fcgi", - "fcgi.ErrRequestAborted": "net/http/fcgi", - "fcgi.Serve": "net/http/fcgi", - "filepath.Abs": "path/filepath", - "filepath.Base": "path/filepath", - "filepath.Clean": "path/filepath", - "filepath.Dir": "path/filepath", - "filepath.ErrBadPattern": "path/filepath", - "filepath.EvalSymlinks": "path/filepath", - "filepath.Ext": "path/filepath", - "filepath.FromSlash": "path/filepath", - "filepath.Glob": "path/filepath", - "filepath.HasPrefix": "path/filepath", - "filepath.IsAbs": "path/filepath", - "filepath.Join": "path/filepath", - "filepath.ListSeparator": "path/filepath", - "filepath.Match": "path/filepath", - "filepath.Rel": "path/filepath", - "filepath.Separator": "path/filepath", - "filepath.SkipDir": "path/filepath", - "filepath.Split": "path/filepath", - "filepath.SplitList": "path/filepath", - "filepath.ToSlash": "path/filepath", - "filepath.VolumeName": "path/filepath", - "filepath.Walk": "path/filepath", - "filepath.WalkFunc": "path/filepath", - "flag.Arg": "flag", - "flag.Args": "flag", - "flag.Bool": "flag", - "flag.BoolVar": "flag", - "flag.CommandLine": "flag", - "flag.ContinueOnError": "flag", - "flag.Duration": "flag", - "flag.DurationVar": "flag", - "flag.ErrHelp": "flag", - "flag.ErrorHandling": "flag", - "flag.ExitOnError": "flag", - "flag.Flag": "flag", - "flag.FlagSet": "flag", - "flag.Float64": "flag", - "flag.Float64Var": "flag", - "flag.Getter": "flag", - "flag.Int": "flag", - "flag.Int64": "flag", - "flag.Int64Var": "flag", - "flag.IntVar": "flag", - "flag.Lookup": "flag", - "flag.NArg": "flag", - "flag.NFlag": "flag", - "flag.NewFlagSet": "flag", - "flag.PanicOnError": "flag", - "flag.Parse": "flag", - "flag.Parsed": "flag", - "flag.PrintDefaults": "flag", - "flag.Set": "flag", - "flag.String": "flag", - "flag.StringVar": "flag", - "flag.Uint": "flag", - "flag.Uint64": "flag", - "flag.Uint64Var": "flag", - "flag.UintVar": "flag", - "flag.UnquoteUsage": "flag", - "flag.Usage": "flag", - "flag.Value": "flag", - "flag.Var": "flag", - "flag.Visit": "flag", - "flag.VisitAll": "flag", - "flate.BestCompression": "compress/flate", - "flate.BestSpeed": "compress/flate", - "flate.CorruptInputError": "compress/flate", - "flate.DefaultCompression": "compress/flate", - "flate.HuffmanOnly": "compress/flate", - "flate.InternalError": "compress/flate", - "flate.NewReader": "compress/flate", - "flate.NewReaderDict": "compress/flate", - "flate.NewWriter": "compress/flate", - "flate.NewWriterDict": "compress/flate", - "flate.NoCompression": "compress/flate", - "flate.ReadError": "compress/flate", - "flate.Reader": "compress/flate", - "flate.Resetter": "compress/flate", - "flate.WriteError": "compress/flate", - "flate.Writer": "compress/flate", - "fmt.Errorf": "fmt", - "fmt.Formatter": "fmt", - "fmt.Fprint": "fmt", - "fmt.Fprintf": "fmt", - "fmt.Fprintln": "fmt", - "fmt.Fscan": "fmt", - "fmt.Fscanf": "fmt", - "fmt.Fscanln": "fmt", - "fmt.GoStringer": "fmt", - "fmt.Print": "fmt", - "fmt.Printf": "fmt", - "fmt.Println": "fmt", - "fmt.Scan": "fmt", - "fmt.ScanState": "fmt", - "fmt.Scanf": "fmt", - "fmt.Scanln": "fmt", - "fmt.Scanner": "fmt", - "fmt.Sprint": "fmt", - "fmt.Sprintf": "fmt", - "fmt.Sprintln": "fmt", - "fmt.Sscan": "fmt", - "fmt.Sscanf": "fmt", - "fmt.Sscanln": "fmt", - "fmt.State": "fmt", - "fmt.Stringer": "fmt", - "fnv.New32": "hash/fnv", - "fnv.New32a": "hash/fnv", - "fnv.New64": "hash/fnv", - "fnv.New64a": "hash/fnv", - "format.Node": "go/format", - "format.Source": "go/format", - "gif.Decode": "image/gif", - "gif.DecodeAll": "image/gif", - "gif.DecodeConfig": "image/gif", - "gif.DisposalBackground": "image/gif", - "gif.DisposalNone": "image/gif", - "gif.DisposalPrevious": "image/gif", - "gif.Encode": "image/gif", - "gif.EncodeAll": "image/gif", - "gif.GIF": "image/gif", - "gif.Options": "image/gif", - "gob.CommonType": "encoding/gob", - "gob.Decoder": "encoding/gob", - "gob.Encoder": "encoding/gob", - "gob.GobDecoder": "encoding/gob", - "gob.GobEncoder": "encoding/gob", - "gob.NewDecoder": "encoding/gob", - "gob.NewEncoder": "encoding/gob", - "gob.Register": "encoding/gob", - "gob.RegisterName": "encoding/gob", - "gosym.DecodingError": "debug/gosym", - "gosym.Func": "debug/gosym", - "gosym.LineTable": "debug/gosym", - "gosym.NewLineTable": "debug/gosym", - "gosym.NewTable": "debug/gosym", - "gosym.Obj": "debug/gosym", - "gosym.Sym": "debug/gosym", - "gosym.Table": "debug/gosym", - "gosym.UnknownFileError": "debug/gosym", - "gosym.UnknownLineError": "debug/gosym", - "gzip.BestCompression": "compress/gzip", - "gzip.BestSpeed": "compress/gzip", - "gzip.DefaultCompression": "compress/gzip", - "gzip.ErrChecksum": "compress/gzip", - "gzip.ErrHeader": "compress/gzip", - "gzip.Header": "compress/gzip", - "gzip.HuffmanOnly": "compress/gzip", - "gzip.NewReader": "compress/gzip", - "gzip.NewWriter": "compress/gzip", - "gzip.NewWriterLevel": "compress/gzip", - "gzip.NoCompression": "compress/gzip", - "gzip.Reader": "compress/gzip", - "gzip.Writer": "compress/gzip", - "hash.Hash": "hash", - "hash.Hash32": "hash", - "hash.Hash64": "hash", - "heap.Fix": "container/heap", - "heap.Init": "container/heap", - "heap.Interface": "container/heap", - "heap.Pop": "container/heap", - "heap.Push": "container/heap", - "heap.Remove": "container/heap", - "hex.Decode": "encoding/hex", - "hex.DecodeString": "encoding/hex", - "hex.DecodedLen": "encoding/hex", - "hex.Dump": "encoding/hex", - "hex.Dumper": "encoding/hex", - "hex.Encode": "encoding/hex", - "hex.EncodeToString": "encoding/hex", - "hex.EncodedLen": "encoding/hex", - "hex.ErrLength": "encoding/hex", - "hex.InvalidByteError": "encoding/hex", - "hmac.Equal": "crypto/hmac", - "hmac.New": "crypto/hmac", - "html.EscapeString": "html", - "html.UnescapeString": "html", - "http.CanonicalHeaderKey": "net/http", - "http.Client": "net/http", - "http.CloseNotifier": "net/http", - "http.ConnState": "net/http", - "http.Cookie": "net/http", - "http.CookieJar": "net/http", - "http.DefaultClient": "net/http", - "http.DefaultMaxHeaderBytes": "net/http", - "http.DefaultMaxIdleConnsPerHost": "net/http", - "http.DefaultServeMux": "net/http", - "http.DefaultTransport": "net/http", - "http.DetectContentType": "net/http", - "http.Dir": "net/http", - "http.ErrAbortHandler": "net/http", - "http.ErrBodyNotAllowed": "net/http", - "http.ErrBodyReadAfterClose": "net/http", - "http.ErrContentLength": "net/http", - "http.ErrHandlerTimeout": "net/http", - "http.ErrHeaderTooLong": "net/http", - "http.ErrHijacked": "net/http", - "http.ErrLineTooLong": "net/http", - "http.ErrMissingBoundary": "net/http", - "http.ErrMissingContentLength": "net/http", - "http.ErrMissingFile": "net/http", - "http.ErrNoCookie": "net/http", - "http.ErrNoLocation": "net/http", - "http.ErrNotMultipart": "net/http", - "http.ErrNotSupported": "net/http", - "http.ErrServerClosed": "net/http", - "http.ErrShortBody": "net/http", - "http.ErrSkipAltProtocol": "net/http", - "http.ErrUnexpectedTrailer": "net/http", - "http.ErrUseLastResponse": "net/http", - "http.ErrWriteAfterFlush": "net/http", - "http.Error": "net/http", - "http.File": "net/http", - "http.FileServer": "net/http", - "http.FileSystem": "net/http", - "http.Flusher": "net/http", - "http.Get": "net/http", - "http.Handle": "net/http", - "http.HandleFunc": "net/http", - "http.Handler": "net/http", - "http.HandlerFunc": "net/http", - "http.Head": "net/http", - "http.Header": "net/http", - "http.Hijacker": "net/http", - "http.ListenAndServe": "net/http", - "http.ListenAndServeTLS": "net/http", - "http.LocalAddrContextKey": "net/http", - "http.MaxBytesReader": "net/http", - "http.MethodConnect": "net/http", - "http.MethodDelete": "net/http", - "http.MethodGet": "net/http", - "http.MethodHead": "net/http", - "http.MethodOptions": "net/http", - "http.MethodPatch": "net/http", - "http.MethodPost": "net/http", - "http.MethodPut": "net/http", - "http.MethodTrace": "net/http", - "http.NewFileTransport": "net/http", - "http.NewRequest": "net/http", - "http.NewServeMux": "net/http", - "http.NoBody": "net/http", - "http.NotFound": "net/http", - "http.NotFoundHandler": "net/http", - "http.ParseHTTPVersion": "net/http", - "http.ParseTime": "net/http", - "http.Post": "net/http", - "http.PostForm": "net/http", - "http.ProtocolError": "net/http", - "http.ProxyFromEnvironment": "net/http", - "http.ProxyURL": "net/http", - "http.PushOptions": "net/http", - "http.Pusher": "net/http", - "http.ReadRequest": "net/http", - "http.ReadResponse": "net/http", - "http.Redirect": "net/http", - "http.RedirectHandler": "net/http", - "http.Request": "net/http", - "http.Response": "net/http", - "http.ResponseWriter": "net/http", - "http.RoundTripper": "net/http", - "http.Serve": "net/http", - "http.ServeContent": "net/http", - "http.ServeFile": "net/http", - "http.ServeMux": "net/http", - "http.Server": "net/http", - "http.ServerContextKey": "net/http", - "http.SetCookie": "net/http", - "http.StateActive": "net/http", - "http.StateClosed": "net/http", - "http.StateHijacked": "net/http", - "http.StateIdle": "net/http", - "http.StateNew": "net/http", - "http.StatusAccepted": "net/http", - "http.StatusAlreadyReported": "net/http", - "http.StatusBadGateway": "net/http", - "http.StatusBadRequest": "net/http", - "http.StatusConflict": "net/http", - "http.StatusContinue": "net/http", - "http.StatusCreated": "net/http", - "http.StatusExpectationFailed": "net/http", - "http.StatusFailedDependency": "net/http", - "http.StatusForbidden": "net/http", - "http.StatusFound": "net/http", - "http.StatusGatewayTimeout": "net/http", - "http.StatusGone": "net/http", - "http.StatusHTTPVersionNotSupported": "net/http", - "http.StatusIMUsed": "net/http", - "http.StatusInsufficientStorage": "net/http", - "http.StatusInternalServerError": "net/http", - "http.StatusLengthRequired": "net/http", - "http.StatusLocked": "net/http", - "http.StatusLoopDetected": "net/http", - "http.StatusMethodNotAllowed": "net/http", - "http.StatusMovedPermanently": "net/http", - "http.StatusMultiStatus": "net/http", - "http.StatusMultipleChoices": "net/http", - "http.StatusNetworkAuthenticationRequired": "net/http", - "http.StatusNoContent": "net/http", - "http.StatusNonAuthoritativeInfo": "net/http", - "http.StatusNotAcceptable": "net/http", - "http.StatusNotExtended": "net/http", - "http.StatusNotFound": "net/http", - "http.StatusNotImplemented": "net/http", - "http.StatusNotModified": "net/http", - "http.StatusOK": "net/http", - "http.StatusPartialContent": "net/http", - "http.StatusPaymentRequired": "net/http", - "http.StatusPermanentRedirect": "net/http", - "http.StatusPreconditionFailed": "net/http", - "http.StatusPreconditionRequired": "net/http", - "http.StatusProcessing": "net/http", - "http.StatusProxyAuthRequired": "net/http", - "http.StatusRequestEntityTooLarge": "net/http", - "http.StatusRequestHeaderFieldsTooLarge": "net/http", - "http.StatusRequestTimeout": "net/http", - "http.StatusRequestURITooLong": "net/http", - "http.StatusRequestedRangeNotSatisfiable": "net/http", - "http.StatusResetContent": "net/http", - "http.StatusSeeOther": "net/http", - "http.StatusServiceUnavailable": "net/http", - "http.StatusSwitchingProtocols": "net/http", - "http.StatusTeapot": "net/http", - "http.StatusTemporaryRedirect": "net/http", - "http.StatusText": "net/http", - "http.StatusTooManyRequests": "net/http", - "http.StatusUnauthorized": "net/http", - "http.StatusUnavailableForLegalReasons": "net/http", - "http.StatusUnprocessableEntity": "net/http", - "http.StatusUnsupportedMediaType": "net/http", - "http.StatusUpgradeRequired": "net/http", - "http.StatusUseProxy": "net/http", - "http.StatusVariantAlsoNegotiates": "net/http", - "http.StripPrefix": "net/http", - "http.TimeFormat": "net/http", - "http.TimeoutHandler": "net/http", - "http.TrailerPrefix": "net/http", - "http.Transport": "net/http", - "httptest.DefaultRemoteAddr": "net/http/httptest", - "httptest.NewRecorder": "net/http/httptest", - "httptest.NewRequest": "net/http/httptest", - "httptest.NewServer": "net/http/httptest", - "httptest.NewTLSServer": "net/http/httptest", - "httptest.NewUnstartedServer": "net/http/httptest", - "httptest.ResponseRecorder": "net/http/httptest", - "httptest.Server": "net/http/httptest", - "httptrace.ClientTrace": "net/http/httptrace", - "httptrace.ContextClientTrace": "net/http/httptrace", - "httptrace.DNSDoneInfo": "net/http/httptrace", - "httptrace.DNSStartInfo": "net/http/httptrace", - "httptrace.GotConnInfo": "net/http/httptrace", - "httptrace.WithClientTrace": "net/http/httptrace", - "httptrace.WroteRequestInfo": "net/http/httptrace", - "httputil.BufferPool": "net/http/httputil", - "httputil.ClientConn": "net/http/httputil", - "httputil.DumpRequest": "net/http/httputil", - "httputil.DumpRequestOut": "net/http/httputil", - "httputil.DumpResponse": "net/http/httputil", - "httputil.ErrClosed": "net/http/httputil", - "httputil.ErrLineTooLong": "net/http/httputil", - "httputil.ErrPersistEOF": "net/http/httputil", - "httputil.ErrPipeline": "net/http/httputil", - "httputil.NewChunkedReader": "net/http/httputil", - "httputil.NewChunkedWriter": "net/http/httputil", - "httputil.NewClientConn": "net/http/httputil", - "httputil.NewProxyClientConn": "net/http/httputil", - "httputil.NewServerConn": "net/http/httputil", - "httputil.NewSingleHostReverseProxy": "net/http/httputil", - "httputil.ReverseProxy": "net/http/httputil", - "httputil.ServerConn": "net/http/httputil", - "image.Alpha": "image", - "image.Alpha16": "image", - "image.Black": "image", - "image.CMYK": "image", - "image.Config": "image", - "image.Decode": "image", - "image.DecodeConfig": "image", - "image.ErrFormat": "image", - "image.Gray": "image", - "image.Gray16": "image", - "image.Image": "image", - "image.NRGBA": "image", - "image.NRGBA64": "image", - "image.NYCbCrA": "image", - "image.NewAlpha": "image", - "image.NewAlpha16": "image", - "image.NewCMYK": "image", - "image.NewGray": "image", - "image.NewGray16": "image", - "image.NewNRGBA": "image", - "image.NewNRGBA64": "image", - "image.NewNYCbCrA": "image", - "image.NewPaletted": "image", - "image.NewRGBA": "image", - "image.NewRGBA64": "image", - "image.NewUniform": "image", - "image.NewYCbCr": "image", - "image.Opaque": "image", - "image.Paletted": "image", - "image.PalettedImage": "image", - "image.Point": "image", - "image.Pt": "image", - "image.RGBA": "image", - "image.RGBA64": "image", - "image.Rect": "image", - "image.Rectangle": "image", - "image.RegisterFormat": "image", - "image.Transparent": "image", - "image.Uniform": "image", - "image.White": "image", - "image.YCbCr": "image", - "image.YCbCrSubsampleRatio": "image", - "image.YCbCrSubsampleRatio410": "image", - "image.YCbCrSubsampleRatio411": "image", - "image.YCbCrSubsampleRatio420": "image", - "image.YCbCrSubsampleRatio422": "image", - "image.YCbCrSubsampleRatio440": "image", - "image.YCbCrSubsampleRatio444": "image", - "image.ZP": "image", - "image.ZR": "image", - "importer.Default": "go/importer", - "importer.For": "go/importer", - "importer.Lookup": "go/importer", - "io.ByteReader": "io", - "io.ByteScanner": "io", - "io.ByteWriter": "io", - "io.Closer": "io", - "io.Copy": "io", - "io.CopyBuffer": "io", - "io.CopyN": "io", - "io.EOF": "io", - "io.ErrClosedPipe": "io", - "io.ErrNoProgress": "io", - "io.ErrShortBuffer": "io", - "io.ErrShortWrite": "io", - "io.ErrUnexpectedEOF": "io", - "io.LimitReader": "io", - "io.LimitedReader": "io", - "io.MultiReader": "io", - "io.MultiWriter": "io", - "io.NewSectionReader": "io", - "io.Pipe": "io", - "io.PipeReader": "io", - "io.PipeWriter": "io", - "io.ReadAtLeast": "io", - "io.ReadCloser": "io", - "io.ReadFull": "io", - "io.ReadSeeker": "io", - "io.ReadWriteCloser": "io", - "io.ReadWriteSeeker": "io", - "io.ReadWriter": "io", - "io.Reader": "io", - "io.ReaderAt": "io", - "io.ReaderFrom": "io", - "io.RuneReader": "io", - "io.RuneScanner": "io", - "io.SectionReader": "io", - "io.SeekCurrent": "io", - "io.SeekEnd": "io", - "io.SeekStart": "io", - "io.Seeker": "io", - "io.TeeReader": "io", - "io.WriteCloser": "io", - "io.WriteSeeker": "io", - "io.WriteString": "io", - "io.Writer": "io", - "io.WriterAt": "io", - "io.WriterTo": "io", - "iotest.DataErrReader": "testing/iotest", - "iotest.ErrTimeout": "testing/iotest", - "iotest.HalfReader": "testing/iotest", - "iotest.NewReadLogger": "testing/iotest", - "iotest.NewWriteLogger": "testing/iotest", - "iotest.OneByteReader": "testing/iotest", - "iotest.TimeoutReader": "testing/iotest", - "iotest.TruncateWriter": "testing/iotest", - "ioutil.Discard": "io/ioutil", - "ioutil.NopCloser": "io/ioutil", - "ioutil.ReadAll": "io/ioutil", - "ioutil.ReadDir": "io/ioutil", - "ioutil.ReadFile": "io/ioutil", - "ioutil.TempDir": "io/ioutil", - "ioutil.TempFile": "io/ioutil", - "ioutil.WriteFile": "io/ioutil", - "jpeg.Decode": "image/jpeg", - "jpeg.DecodeConfig": "image/jpeg", - "jpeg.DefaultQuality": "image/jpeg", - "jpeg.Encode": "image/jpeg", - "jpeg.FormatError": "image/jpeg", - "jpeg.Options": "image/jpeg", - "jpeg.Reader": "image/jpeg", - "jpeg.UnsupportedError": "image/jpeg", - "json.Compact": "encoding/json", - "json.Decoder": "encoding/json", - "json.Delim": "encoding/json", - "json.Encoder": "encoding/json", - "json.HTMLEscape": "encoding/json", - "json.Indent": "encoding/json", - "json.InvalidUTF8Error": "encoding/json", - "json.InvalidUnmarshalError": "encoding/json", - "json.Marshal": "encoding/json", - "json.MarshalIndent": "encoding/json", - "json.Marshaler": "encoding/json", - "json.MarshalerError": "encoding/json", - "json.NewDecoder": "encoding/json", - "json.NewEncoder": "encoding/json", - "json.Number": "encoding/json", - "json.RawMessage": "encoding/json", - "json.SyntaxError": "encoding/json", - "json.Token": "encoding/json", - "json.Unmarshal": "encoding/json", - "json.UnmarshalFieldError": "encoding/json", - "json.UnmarshalTypeError": "encoding/json", - "json.Unmarshaler": "encoding/json", - "json.UnsupportedTypeError": "encoding/json", - "json.UnsupportedValueError": "encoding/json", - "jsonrpc.Dial": "net/rpc/jsonrpc", - "jsonrpc.NewClient": "net/rpc/jsonrpc", - "jsonrpc.NewClientCodec": "net/rpc/jsonrpc", - "jsonrpc.NewServerCodec": "net/rpc/jsonrpc", - "jsonrpc.ServeConn": "net/rpc/jsonrpc", - "list.Element": "container/list", - "list.List": "container/list", - "list.New": "container/list", - "log.Fatal": "log", - "log.Fatalf": "log", - "log.Fatalln": "log", - "log.Flags": "log", - "log.LUTC": "log", - "log.Ldate": "log", - "log.Llongfile": "log", - "log.Lmicroseconds": "log", - "log.Logger": "log", - "log.Lshortfile": "log", - "log.LstdFlags": "log", - "log.Ltime": "log", - "log.New": "log", - "log.Output": "log", - "log.Panic": "log", - "log.Panicf": "log", - "log.Panicln": "log", - "log.Prefix": "log", - "log.Print": "log", - "log.Printf": "log", - "log.Println": "log", - "log.SetFlags": "log", - "log.SetOutput": "log", - "log.SetPrefix": "log", - "lzw.LSB": "compress/lzw", - "lzw.MSB": "compress/lzw", - "lzw.NewReader": "compress/lzw", - "lzw.NewWriter": "compress/lzw", - "lzw.Order": "compress/lzw", - "macho.Cpu": "debug/macho", - "macho.Cpu386": "debug/macho", - "macho.CpuAmd64": "debug/macho", - "macho.CpuArm": "debug/macho", - "macho.CpuPpc": "debug/macho", - "macho.CpuPpc64": "debug/macho", - "macho.Dylib": "debug/macho", - "macho.DylibCmd": "debug/macho", - "macho.Dysymtab": "debug/macho", - "macho.DysymtabCmd": "debug/macho", - "macho.ErrNotFat": "debug/macho", - "macho.FatArch": "debug/macho", - "macho.FatArchHeader": "debug/macho", - "macho.FatFile": "debug/macho", - "macho.File": "debug/macho", - "macho.FileHeader": "debug/macho", - "macho.FormatError": "debug/macho", - "macho.Load": "debug/macho", - "macho.LoadBytes": "debug/macho", - "macho.LoadCmd": "debug/macho", - "macho.LoadCmdDylib": "debug/macho", - "macho.LoadCmdDylinker": "debug/macho", - "macho.LoadCmdDysymtab": "debug/macho", - "macho.LoadCmdSegment": "debug/macho", - "macho.LoadCmdSegment64": "debug/macho", - "macho.LoadCmdSymtab": "debug/macho", - "macho.LoadCmdThread": "debug/macho", - "macho.LoadCmdUnixThread": "debug/macho", - "macho.Magic32": "debug/macho", - "macho.Magic64": "debug/macho", - "macho.MagicFat": "debug/macho", - "macho.NewFatFile": "debug/macho", - "macho.NewFile": "debug/macho", - "macho.Nlist32": "debug/macho", - "macho.Nlist64": "debug/macho", - "macho.Open": "debug/macho", - "macho.OpenFat": "debug/macho", - "macho.Regs386": "debug/macho", - "macho.RegsAMD64": "debug/macho", - "macho.Section": "debug/macho", - "macho.Section32": "debug/macho", - "macho.Section64": "debug/macho", - "macho.SectionHeader": "debug/macho", - "macho.Segment": "debug/macho", - "macho.Segment32": "debug/macho", - "macho.Segment64": "debug/macho", - "macho.SegmentHeader": "debug/macho", - "macho.Symbol": "debug/macho", - "macho.Symtab": "debug/macho", - "macho.SymtabCmd": "debug/macho", - "macho.Thread": "debug/macho", - "macho.Type": "debug/macho", - "macho.TypeBundle": "debug/macho", - "macho.TypeDylib": "debug/macho", - "macho.TypeExec": "debug/macho", - "macho.TypeObj": "debug/macho", - "mail.Address": "net/mail", - "mail.AddressParser": "net/mail", - "mail.ErrHeaderNotPresent": "net/mail", - "mail.Header": "net/mail", - "mail.Message": "net/mail", - "mail.ParseAddress": "net/mail", - "mail.ParseAddressList": "net/mail", - "mail.ParseDate": "net/mail", - "mail.ReadMessage": "net/mail", - "math.Abs": "math", - "math.Acos": "math", - "math.Acosh": "math", - "math.Asin": "math", - "math.Asinh": "math", - "math.Atan": "math", - "math.Atan2": "math", - "math.Atanh": "math", - "math.Cbrt": "math", - "math.Ceil": "math", - "math.Copysign": "math", - "math.Cos": "math", - "math.Cosh": "math", - "math.Dim": "math", - "math.E": "math", - "math.Erf": "math", - "math.Erfc": "math", - "math.Exp": "math", - "math.Exp2": "math", - "math.Expm1": "math", - "math.Float32bits": "math", - "math.Float32frombits": "math", - "math.Float64bits": "math", - "math.Float64frombits": "math", - "math.Floor": "math", - "math.Frexp": "math", - "math.Gamma": "math", - "math.Hypot": "math", - "math.Ilogb": "math", - "math.Inf": "math", - "math.IsInf": "math", - "math.IsNaN": "math", - "math.J0": "math", - "math.J1": "math", - "math.Jn": "math", - "math.Ldexp": "math", - "math.Lgamma": "math", - "math.Ln10": "math", - "math.Ln2": "math", - "math.Log": "math", - "math.Log10": "math", - "math.Log10E": "math", - "math.Log1p": "math", - "math.Log2": "math", - "math.Log2E": "math", - "math.Logb": "math", - "math.Max": "math", - "math.MaxFloat32": "math", - "math.MaxFloat64": "math", - "math.MaxInt16": "math", - "math.MaxInt32": "math", - "math.MaxInt64": "math", - "math.MaxInt8": "math", - "math.MaxUint16": "math", - "math.MaxUint32": "math", - "math.MaxUint64": "math", - "math.MaxUint8": "math", - "math.Min": "math", - "math.MinInt16": "math", - "math.MinInt32": "math", - "math.MinInt64": "math", - "math.MinInt8": "math", - "math.Mod": "math", - "math.Modf": "math", - "math.NaN": "math", - "math.Nextafter": "math", - "math.Nextafter32": "math", - "math.Phi": "math", - "math.Pi": "math", - "math.Pow": "math", - "math.Pow10": "math", - "math.Remainder": "math", - "math.Signbit": "math", - "math.Sin": "math", - "math.Sincos": "math", - "math.Sinh": "math", - "math.SmallestNonzeroFloat32": "math", - "math.SmallestNonzeroFloat64": "math", - "math.Sqrt": "math", - "math.Sqrt2": "math", - "math.SqrtE": "math", - "math.SqrtPhi": "math", - "math.SqrtPi": "math", - "math.Tan": "math", - "math.Tanh": "math", - "math.Trunc": "math", - "math.Y0": "math", - "math.Y1": "math", - "math.Yn": "math", - "md5.BlockSize": "crypto/md5", - "md5.New": "crypto/md5", - "md5.Size": "crypto/md5", - "md5.Sum": "crypto/md5", - "mime.AddExtensionType": "mime", - "mime.BEncoding": "mime", - "mime.ExtensionsByType": "mime", - "mime.FormatMediaType": "mime", - "mime.ParseMediaType": "mime", - "mime.QEncoding": "mime", - "mime.TypeByExtension": "mime", - "mime.WordDecoder": "mime", - "mime.WordEncoder": "mime", - "multipart.File": "mime/multipart", - "multipart.FileHeader": "mime/multipart", - "multipart.Form": "mime/multipart", - "multipart.NewReader": "mime/multipart", - "multipart.NewWriter": "mime/multipart", - "multipart.Part": "mime/multipart", - "multipart.Reader": "mime/multipart", - "multipart.Writer": "mime/multipart", - "net.Addr": "net", - "net.AddrError": "net", - "net.Buffers": "net", - "net.CIDRMask": "net", - "net.Conn": "net", - "net.DNSConfigError": "net", - "net.DNSError": "net", - "net.DefaultResolver": "net", - "net.Dial": "net", - "net.DialIP": "net", - "net.DialTCP": "net", - "net.DialTimeout": "net", - "net.DialUDP": "net", - "net.DialUnix": "net", - "net.Dialer": "net", - "net.ErrWriteToConnected": "net", - "net.Error": "net", - "net.FileConn": "net", - "net.FileListener": "net", - "net.FilePacketConn": "net", - "net.FlagBroadcast": "net", - "net.FlagLoopback": "net", - "net.FlagMulticast": "net", - "net.FlagPointToPoint": "net", - "net.FlagUp": "net", - "net.Flags": "net", - "net.HardwareAddr": "net", - "net.IP": "net", - "net.IPAddr": "net", - "net.IPConn": "net", - "net.IPMask": "net", - "net.IPNet": "net", - "net.IPv4": "net", - "net.IPv4Mask": "net", - "net.IPv4allrouter": "net", - "net.IPv4allsys": "net", - "net.IPv4bcast": "net", - "net.IPv4len": "net", - "net.IPv4zero": "net", - "net.IPv6interfacelocalallnodes": "net", - "net.IPv6len": "net", - "net.IPv6linklocalallnodes": "net", - "net.IPv6linklocalallrouters": "net", - "net.IPv6loopback": "net", - "net.IPv6unspecified": "net", - "net.IPv6zero": "net", - "net.Interface": "net", - "net.InterfaceAddrs": "net", - "net.InterfaceByIndex": "net", - "net.InterfaceByName": "net", - "net.Interfaces": "net", - "net.InvalidAddrError": "net", - "net.JoinHostPort": "net", - "net.Listen": "net", - "net.ListenIP": "net", - "net.ListenMulticastUDP": "net", - "net.ListenPacket": "net", - "net.ListenTCP": "net", - "net.ListenUDP": "net", - "net.ListenUnix": "net", - "net.ListenUnixgram": "net", - "net.Listener": "net", - "net.LookupAddr": "net", - "net.LookupCNAME": "net", - "net.LookupHost": "net", - "net.LookupIP": "net", - "net.LookupMX": "net", - "net.LookupNS": "net", - "net.LookupPort": "net", - "net.LookupSRV": "net", - "net.LookupTXT": "net", - "net.MX": "net", - "net.NS": "net", - "net.OpError": "net", - "net.PacketConn": "net", - "net.ParseCIDR": "net", - "net.ParseError": "net", - "net.ParseIP": "net", - "net.ParseMAC": "net", - "net.Pipe": "net", - "net.ResolveIPAddr": "net", - "net.ResolveTCPAddr": "net", - "net.ResolveUDPAddr": "net", - "net.ResolveUnixAddr": "net", - "net.Resolver": "net", - "net.SRV": "net", - "net.SplitHostPort": "net", - "net.TCPAddr": "net", - "net.TCPConn": "net", - "net.TCPListener": "net", - "net.UDPAddr": "net", - "net.UDPConn": "net", - "net.UnixAddr": "net", - "net.UnixConn": "net", - "net.UnixListener": "net", - "net.UnknownNetworkError": "net", - "os.Args": "os", - "os.Chdir": "os", - "os.Chmod": "os", - "os.Chown": "os", - "os.Chtimes": "os", - "os.Clearenv": "os", - "os.Create": "os", - "os.DevNull": "os", - "os.Environ": "os", - "os.ErrClosed": "os", - "os.ErrExist": "os", - "os.ErrInvalid": "os", - "os.ErrNotExist": "os", - "os.ErrPermission": "os", - "os.Executable": "os", - "os.Exit": "os", - "os.Expand": "os", - "os.ExpandEnv": "os", - "os.File": "os", - "os.FileInfo": "os", - "os.FileMode": "os", - "os.FindProcess": "os", - "os.Getegid": "os", - "os.Getenv": "os", - "os.Geteuid": "os", - "os.Getgid": "os", - "os.Getgroups": "os", - "os.Getpagesize": "os", - "os.Getpid": "os", - "os.Getppid": "os", - "os.Getuid": "os", - "os.Getwd": "os", - "os.Hostname": "os", - "os.Interrupt": "os", - "os.IsExist": "os", - "os.IsNotExist": "os", - "os.IsPathSeparator": "os", - "os.IsPermission": "os", - "os.Kill": "os", - "os.Lchown": "os", - "os.Link": "os", - "os.LinkError": "os", - "os.LookupEnv": "os", - "os.Lstat": "os", - "os.Mkdir": "os", - "os.MkdirAll": "os", - "os.ModeAppend": "os", - "os.ModeCharDevice": "os", - "os.ModeDevice": "os", - "os.ModeDir": "os", - "os.ModeExclusive": "os", - "os.ModeNamedPipe": "os", - "os.ModePerm": "os", - "os.ModeSetgid": "os", - "os.ModeSetuid": "os", - "os.ModeSocket": "os", - "os.ModeSticky": "os", - "os.ModeSymlink": "os", - "os.ModeTemporary": "os", - "os.ModeType": "os", - "os.NewFile": "os", - "os.NewSyscallError": "os", - "os.O_APPEND": "os", - "os.O_CREATE": "os", - "os.O_EXCL": "os", - "os.O_RDONLY": "os", - "os.O_RDWR": "os", - "os.O_SYNC": "os", - "os.O_TRUNC": "os", - "os.O_WRONLY": "os", - "os.Open": "os", - "os.OpenFile": "os", - "os.PathError": "os", - "os.PathListSeparator": "os", - "os.PathSeparator": "os", - "os.Pipe": "os", - "os.ProcAttr": "os", - "os.Process": "os", - "os.ProcessState": "os", - "os.Readlink": "os", - "os.Remove": "os", - "os.RemoveAll": "os", - "os.Rename": "os", - "os.SEEK_CUR": "os", - "os.SEEK_END": "os", - "os.SEEK_SET": "os", - "os.SameFile": "os", - "os.Setenv": "os", - "os.Signal": "os", - "os.StartProcess": "os", - "os.Stat": "os", - "os.Stderr": "os", - "os.Stdin": "os", - "os.Stdout": "os", - "os.Symlink": "os", - "os.SyscallError": "os", - "os.TempDir": "os", - "os.Truncate": "os", - "os.Unsetenv": "os", - "palette.Plan9": "image/color/palette", - "palette.WebSafe": "image/color/palette", - "parse.ActionNode": "text/template/parse", - "parse.BoolNode": "text/template/parse", - "parse.BranchNode": "text/template/parse", - "parse.ChainNode": "text/template/parse", - "parse.CommandNode": "text/template/parse", - "parse.DotNode": "text/template/parse", - "parse.FieldNode": "text/template/parse", - "parse.IdentifierNode": "text/template/parse", - "parse.IfNode": "text/template/parse", - "parse.IsEmptyTree": "text/template/parse", - "parse.ListNode": "text/template/parse", - "parse.New": "text/template/parse", - "parse.NewIdentifier": "text/template/parse", - "parse.NilNode": "text/template/parse", - "parse.Node": "text/template/parse", - "parse.NodeAction": "text/template/parse", - "parse.NodeBool": "text/template/parse", - "parse.NodeChain": "text/template/parse", - "parse.NodeCommand": "text/template/parse", - "parse.NodeDot": "text/template/parse", - "parse.NodeField": "text/template/parse", - "parse.NodeIdentifier": "text/template/parse", - "parse.NodeIf": "text/template/parse", - "parse.NodeList": "text/template/parse", - "parse.NodeNil": "text/template/parse", - "parse.NodeNumber": "text/template/parse", - "parse.NodePipe": "text/template/parse", - "parse.NodeRange": "text/template/parse", - "parse.NodeString": "text/template/parse", - "parse.NodeTemplate": "text/template/parse", - "parse.NodeText": "text/template/parse", - "parse.NodeType": "text/template/parse", - "parse.NodeVariable": "text/template/parse", - "parse.NodeWith": "text/template/parse", - "parse.NumberNode": "text/template/parse", - "parse.Parse": "text/template/parse", - "parse.PipeNode": "text/template/parse", - "parse.Pos": "text/template/parse", - "parse.RangeNode": "text/template/parse", - "parse.StringNode": "text/template/parse", - "parse.TemplateNode": "text/template/parse", - "parse.TextNode": "text/template/parse", - "parse.Tree": "text/template/parse", - "parse.VariableNode": "text/template/parse", - "parse.WithNode": "text/template/parse", - "parser.AllErrors": "go/parser", - "parser.DeclarationErrors": "go/parser", - "parser.ImportsOnly": "go/parser", - "parser.Mode": "go/parser", - "parser.PackageClauseOnly": "go/parser", - "parser.ParseComments": "go/parser", - "parser.ParseDir": "go/parser", - "parser.ParseExpr": "go/parser", - "parser.ParseExprFrom": "go/parser", - "parser.ParseFile": "go/parser", - "parser.SpuriousErrors": "go/parser", - "parser.Trace": "go/parser", - "path.Base": "path", - "path.Clean": "path", - "path.Dir": "path", - "path.ErrBadPattern": "path", - "path.Ext": "path", - "path.IsAbs": "path", - "path.Join": "path", - "path.Match": "path", - "path.Split": "path", - "pe.COFFSymbol": "debug/pe", - "pe.COFFSymbolSize": "debug/pe", - "pe.DataDirectory": "debug/pe", - "pe.File": "debug/pe", - "pe.FileHeader": "debug/pe", - "pe.FormatError": "debug/pe", - "pe.IMAGE_FILE_MACHINE_AM33": "debug/pe", - "pe.IMAGE_FILE_MACHINE_AMD64": "debug/pe", - "pe.IMAGE_FILE_MACHINE_ARM": "debug/pe", - "pe.IMAGE_FILE_MACHINE_EBC": "debug/pe", - "pe.IMAGE_FILE_MACHINE_I386": "debug/pe", - "pe.IMAGE_FILE_MACHINE_IA64": "debug/pe", - "pe.IMAGE_FILE_MACHINE_M32R": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPS16": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPSFPU": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPSFPU16": "debug/pe", - "pe.IMAGE_FILE_MACHINE_POWERPC": "debug/pe", - "pe.IMAGE_FILE_MACHINE_POWERPCFP": "debug/pe", - "pe.IMAGE_FILE_MACHINE_R4000": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH3": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH3DSP": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH4": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH5": "debug/pe", - "pe.IMAGE_FILE_MACHINE_THUMB": "debug/pe", - "pe.IMAGE_FILE_MACHINE_UNKNOWN": "debug/pe", - "pe.IMAGE_FILE_MACHINE_WCEMIPSV2": "debug/pe", - "pe.ImportDirectory": "debug/pe", - "pe.NewFile": "debug/pe", - "pe.Open": "debug/pe", - "pe.OptionalHeader32": "debug/pe", - "pe.OptionalHeader64": "debug/pe", - "pe.Reloc": "debug/pe", - "pe.Section": "debug/pe", - "pe.SectionHeader": "debug/pe", - "pe.SectionHeader32": "debug/pe", - "pe.StringTable": "debug/pe", - "pe.Symbol": "debug/pe", - "pem.Block": "encoding/pem", - "pem.Decode": "encoding/pem", - "pem.Encode": "encoding/pem", - "pem.EncodeToMemory": "encoding/pem", - "pkix.AlgorithmIdentifier": "crypto/x509/pkix", - "pkix.AttributeTypeAndValue": "crypto/x509/pkix", - "pkix.AttributeTypeAndValueSET": "crypto/x509/pkix", - "pkix.CertificateList": "crypto/x509/pkix", - "pkix.Extension": "crypto/x509/pkix", - "pkix.Name": "crypto/x509/pkix", - "pkix.RDNSequence": "crypto/x509/pkix", - "pkix.RelativeDistinguishedNameSET": "crypto/x509/pkix", - "pkix.RevokedCertificate": "crypto/x509/pkix", - "pkix.TBSCertificateList": "crypto/x509/pkix", - "plan9obj.File": "debug/plan9obj", - "plan9obj.FileHeader": "debug/plan9obj", - "plan9obj.Magic386": "debug/plan9obj", - "plan9obj.Magic64": "debug/plan9obj", - "plan9obj.MagicAMD64": "debug/plan9obj", - "plan9obj.MagicARM": "debug/plan9obj", - "plan9obj.NewFile": "debug/plan9obj", - "plan9obj.Open": "debug/plan9obj", - "plan9obj.Section": "debug/plan9obj", - "plan9obj.SectionHeader": "debug/plan9obj", - "plan9obj.Sym": "debug/plan9obj", - "plugin.Open": "plugin", - "plugin.Plugin": "plugin", - "plugin.Symbol": "plugin", - "png.BestCompression": "image/png", - "png.BestSpeed": "image/png", - "png.CompressionLevel": "image/png", - "png.Decode": "image/png", - "png.DecodeConfig": "image/png", - "png.DefaultCompression": "image/png", - "png.Encode": "image/png", - "png.Encoder": "image/png", - "png.FormatError": "image/png", - "png.NoCompression": "image/png", - "png.UnsupportedError": "image/png", - "pprof.Cmdline": "net/http/pprof", - "pprof.Handler": "net/http/pprof", - "pprof.Index": "net/http/pprof", - "pprof.Lookup": "runtime/pprof", - "pprof.NewProfile": "runtime/pprof", - // "pprof.Profile" is ambiguous - "pprof.Profiles": "runtime/pprof", - "pprof.StartCPUProfile": "runtime/pprof", - "pprof.StopCPUProfile": "runtime/pprof", - "pprof.Symbol": "net/http/pprof", - "pprof.Trace": "net/http/pprof", - "pprof.WriteHeapProfile": "runtime/pprof", - "printer.CommentedNode": "go/printer", - "printer.Config": "go/printer", - "printer.Fprint": "go/printer", - "printer.Mode": "go/printer", - "printer.RawFormat": "go/printer", - "printer.SourcePos": "go/printer", - "printer.TabIndent": "go/printer", - "printer.UseSpaces": "go/printer", - "quick.Check": "testing/quick", - "quick.CheckEqual": "testing/quick", - "quick.CheckEqualError": "testing/quick", - "quick.CheckError": "testing/quick", - "quick.Config": "testing/quick", - "quick.Generator": "testing/quick", - "quick.SetupError": "testing/quick", - "quick.Value": "testing/quick", - "quotedprintable.NewReader": "mime/quotedprintable", - "quotedprintable.NewWriter": "mime/quotedprintable", - "quotedprintable.Reader": "mime/quotedprintable", - "quotedprintable.Writer": "mime/quotedprintable", - "rand.ExpFloat64": "math/rand", - "rand.Float32": "math/rand", - "rand.Float64": "math/rand", - // "rand.Int" is ambiguous - "rand.Int31": "math/rand", - "rand.Int31n": "math/rand", - "rand.Int63": "math/rand", - "rand.Int63n": "math/rand", - "rand.Intn": "math/rand", - "rand.New": "math/rand", - "rand.NewSource": "math/rand", - "rand.NewZipf": "math/rand", - "rand.NormFloat64": "math/rand", - "rand.Perm": "math/rand", - "rand.Prime": "crypto/rand", - "rand.Rand": "math/rand", - // "rand.Read" is ambiguous - "rand.Reader": "crypto/rand", - "rand.Seed": "math/rand", - "rand.Source": "math/rand", - "rand.Source64": "math/rand", - "rand.Uint32": "math/rand", - "rand.Uint64": "math/rand", - "rand.Zipf": "math/rand", - "rc4.Cipher": "crypto/rc4", - "rc4.KeySizeError": "crypto/rc4", - "rc4.NewCipher": "crypto/rc4", - "reflect.Append": "reflect", - "reflect.AppendSlice": "reflect", - "reflect.Array": "reflect", - "reflect.ArrayOf": "reflect", - "reflect.Bool": "reflect", - "reflect.BothDir": "reflect", - "reflect.Chan": "reflect", - "reflect.ChanDir": "reflect", - "reflect.ChanOf": "reflect", - "reflect.Complex128": "reflect", - "reflect.Complex64": "reflect", - "reflect.Copy": "reflect", - "reflect.DeepEqual": "reflect", - "reflect.Float32": "reflect", - "reflect.Float64": "reflect", - "reflect.Func": "reflect", - "reflect.FuncOf": "reflect", - "reflect.Indirect": "reflect", - "reflect.Int": "reflect", - "reflect.Int16": "reflect", - "reflect.Int32": "reflect", - "reflect.Int64": "reflect", - "reflect.Int8": "reflect", - "reflect.Interface": "reflect", - "reflect.Invalid": "reflect", - "reflect.Kind": "reflect", - "reflect.MakeChan": "reflect", - "reflect.MakeFunc": "reflect", - "reflect.MakeMap": "reflect", - "reflect.MakeSlice": "reflect", - "reflect.Map": "reflect", - "reflect.MapOf": "reflect", - "reflect.Method": "reflect", - "reflect.New": "reflect", - "reflect.NewAt": "reflect", - "reflect.Ptr": "reflect", - "reflect.PtrTo": "reflect", - "reflect.RecvDir": "reflect", - "reflect.Select": "reflect", - "reflect.SelectCase": "reflect", - "reflect.SelectDefault": "reflect", - "reflect.SelectDir": "reflect", - "reflect.SelectRecv": "reflect", - "reflect.SelectSend": "reflect", - "reflect.SendDir": "reflect", - "reflect.Slice": "reflect", - "reflect.SliceHeader": "reflect", - "reflect.SliceOf": "reflect", - "reflect.String": "reflect", - "reflect.StringHeader": "reflect", - "reflect.Struct": "reflect", - "reflect.StructField": "reflect", - "reflect.StructOf": "reflect", - "reflect.StructTag": "reflect", - "reflect.Swapper": "reflect", - "reflect.TypeOf": "reflect", - "reflect.Uint": "reflect", - "reflect.Uint16": "reflect", - "reflect.Uint32": "reflect", - "reflect.Uint64": "reflect", - "reflect.Uint8": "reflect", - "reflect.Uintptr": "reflect", - "reflect.UnsafePointer": "reflect", - "reflect.Value": "reflect", - "reflect.ValueError": "reflect", - "reflect.ValueOf": "reflect", - "reflect.Zero": "reflect", - "regexp.Compile": "regexp", - "regexp.CompilePOSIX": "regexp", - "regexp.Match": "regexp", - "regexp.MatchReader": "regexp", - "regexp.MatchString": "regexp", - "regexp.MustCompile": "regexp", - "regexp.MustCompilePOSIX": "regexp", - "regexp.QuoteMeta": "regexp", - "regexp.Regexp": "regexp", - "ring.New": "container/ring", - "ring.Ring": "container/ring", - "rpc.Accept": "net/rpc", - "rpc.Call": "net/rpc", - "rpc.Client": "net/rpc", - "rpc.ClientCodec": "net/rpc", - "rpc.DefaultDebugPath": "net/rpc", - "rpc.DefaultRPCPath": "net/rpc", - "rpc.DefaultServer": "net/rpc", - "rpc.Dial": "net/rpc", - "rpc.DialHTTP": "net/rpc", - "rpc.DialHTTPPath": "net/rpc", - "rpc.ErrShutdown": "net/rpc", - "rpc.HandleHTTP": "net/rpc", - "rpc.NewClient": "net/rpc", - "rpc.NewClientWithCodec": "net/rpc", - "rpc.NewServer": "net/rpc", - "rpc.Register": "net/rpc", - "rpc.RegisterName": "net/rpc", - "rpc.Request": "net/rpc", - "rpc.Response": "net/rpc", - "rpc.ServeCodec": "net/rpc", - "rpc.ServeConn": "net/rpc", - "rpc.ServeRequest": "net/rpc", - "rpc.Server": "net/rpc", - "rpc.ServerCodec": "net/rpc", - "rpc.ServerError": "net/rpc", - "rsa.CRTValue": "crypto/rsa", - "rsa.DecryptOAEP": "crypto/rsa", - "rsa.DecryptPKCS1v15": "crypto/rsa", - "rsa.DecryptPKCS1v15SessionKey": "crypto/rsa", - "rsa.EncryptOAEP": "crypto/rsa", - "rsa.EncryptPKCS1v15": "crypto/rsa", - "rsa.ErrDecryption": "crypto/rsa", - "rsa.ErrMessageTooLong": "crypto/rsa", - "rsa.ErrVerification": "crypto/rsa", - "rsa.GenerateKey": "crypto/rsa", - "rsa.GenerateMultiPrimeKey": "crypto/rsa", - "rsa.OAEPOptions": "crypto/rsa", - "rsa.PKCS1v15DecryptOptions": "crypto/rsa", - "rsa.PSSOptions": "crypto/rsa", - "rsa.PSSSaltLengthAuto": "crypto/rsa", - "rsa.PSSSaltLengthEqualsHash": "crypto/rsa", - "rsa.PrecomputedValues": "crypto/rsa", - "rsa.PrivateKey": "crypto/rsa", - "rsa.PublicKey": "crypto/rsa", - "rsa.SignPKCS1v15": "crypto/rsa", - "rsa.SignPSS": "crypto/rsa", - "rsa.VerifyPKCS1v15": "crypto/rsa", - "rsa.VerifyPSS": "crypto/rsa", - "runtime.BlockProfile": "runtime", - "runtime.BlockProfileRecord": "runtime", - "runtime.Breakpoint": "runtime", - "runtime.CPUProfile": "runtime", - "runtime.Caller": "runtime", - "runtime.Callers": "runtime", - "runtime.CallersFrames": "runtime", - "runtime.Compiler": "runtime", - "runtime.Error": "runtime", - "runtime.Frame": "runtime", - "runtime.Frames": "runtime", - "runtime.Func": "runtime", - "runtime.FuncForPC": "runtime", - "runtime.GC": "runtime", - "runtime.GOARCH": "runtime", - "runtime.GOMAXPROCS": "runtime", - "runtime.GOOS": "runtime", - "runtime.GOROOT": "runtime", - "runtime.Goexit": "runtime", - "runtime.GoroutineProfile": "runtime", - "runtime.Gosched": "runtime", - "runtime.KeepAlive": "runtime", - "runtime.LockOSThread": "runtime", - "runtime.MemProfile": "runtime", - "runtime.MemProfileRate": "runtime", - "runtime.MemProfileRecord": "runtime", - "runtime.MemStats": "runtime", - "runtime.MutexProfile": "runtime", - "runtime.NumCPU": "runtime", - "runtime.NumCgoCall": "runtime", - "runtime.NumGoroutine": "runtime", - "runtime.ReadMemStats": "runtime", - "runtime.ReadTrace": "runtime", - "runtime.SetBlockProfileRate": "runtime", - "runtime.SetCPUProfileRate": "runtime", - "runtime.SetCgoTraceback": "runtime", - "runtime.SetFinalizer": "runtime", - "runtime.SetMutexProfileFraction": "runtime", - "runtime.Stack": "runtime", - "runtime.StackRecord": "runtime", - "runtime.StartTrace": "runtime", - "runtime.StopTrace": "runtime", - "runtime.ThreadCreateProfile": "runtime", - "runtime.TypeAssertionError": "runtime", - "runtime.UnlockOSThread": "runtime", - "runtime.Version": "runtime", - "scanner.Char": "text/scanner", - "scanner.Comment": "text/scanner", - "scanner.EOF": "text/scanner", - "scanner.Error": "go/scanner", - "scanner.ErrorHandler": "go/scanner", - "scanner.ErrorList": "go/scanner", - "scanner.Float": "text/scanner", - "scanner.GoTokens": "text/scanner", - "scanner.GoWhitespace": "text/scanner", - "scanner.Ident": "text/scanner", - "scanner.Int": "text/scanner", - "scanner.Mode": "go/scanner", - "scanner.Position": "text/scanner", - "scanner.PrintError": "go/scanner", - "scanner.RawString": "text/scanner", - "scanner.ScanChars": "text/scanner", - // "scanner.ScanComments" is ambiguous - "scanner.ScanFloats": "text/scanner", - "scanner.ScanIdents": "text/scanner", - "scanner.ScanInts": "text/scanner", - "scanner.ScanRawStrings": "text/scanner", - "scanner.ScanStrings": "text/scanner", - // "scanner.Scanner" is ambiguous - "scanner.SkipComments": "text/scanner", - "scanner.String": "text/scanner", - "scanner.TokenString": "text/scanner", - "sha1.BlockSize": "crypto/sha1", - "sha1.New": "crypto/sha1", - "sha1.Size": "crypto/sha1", - "sha1.Sum": "crypto/sha1", - "sha256.BlockSize": "crypto/sha256", - "sha256.New": "crypto/sha256", - "sha256.New224": "crypto/sha256", - "sha256.Size": "crypto/sha256", - "sha256.Size224": "crypto/sha256", - "sha256.Sum224": "crypto/sha256", - "sha256.Sum256": "crypto/sha256", - "sha512.BlockSize": "crypto/sha512", - "sha512.New": "crypto/sha512", - "sha512.New384": "crypto/sha512", - "sha512.New512_224": "crypto/sha512", - "sha512.New512_256": "crypto/sha512", - "sha512.Size": "crypto/sha512", - "sha512.Size224": "crypto/sha512", - "sha512.Size256": "crypto/sha512", - "sha512.Size384": "crypto/sha512", - "sha512.Sum384": "crypto/sha512", - "sha512.Sum512": "crypto/sha512", - "sha512.Sum512_224": "crypto/sha512", - "sha512.Sum512_256": "crypto/sha512", - "signal.Ignore": "os/signal", - "signal.Notify": "os/signal", - "signal.Reset": "os/signal", - "signal.Stop": "os/signal", - "smtp.Auth": "net/smtp", - "smtp.CRAMMD5Auth": "net/smtp", - "smtp.Client": "net/smtp", - "smtp.Dial": "net/smtp", - "smtp.NewClient": "net/smtp", - "smtp.PlainAuth": "net/smtp", - "smtp.SendMail": "net/smtp", - "smtp.ServerInfo": "net/smtp", - "sort.Float64Slice": "sort", - "sort.Float64s": "sort", - "sort.Float64sAreSorted": "sort", - "sort.IntSlice": "sort", - "sort.Interface": "sort", - "sort.Ints": "sort", - "sort.IntsAreSorted": "sort", - "sort.IsSorted": "sort", - "sort.Reverse": "sort", - "sort.Search": "sort", - "sort.SearchFloat64s": "sort", - "sort.SearchInts": "sort", - "sort.SearchStrings": "sort", - "sort.Slice": "sort", - "sort.SliceIsSorted": "sort", - "sort.SliceStable": "sort", - "sort.Sort": "sort", - "sort.Stable": "sort", - "sort.StringSlice": "sort", - "sort.Strings": "sort", - "sort.StringsAreSorted": "sort", - "sql.ColumnType": "database/sql", - "sql.DB": "database/sql", - "sql.DBStats": "database/sql", - "sql.Drivers": "database/sql", - "sql.ErrNoRows": "database/sql", - "sql.ErrTxDone": "database/sql", - "sql.IsolationLevel": "database/sql", - "sql.LevelDefault": "database/sql", - "sql.LevelLinearizable": "database/sql", - "sql.LevelReadCommitted": "database/sql", - "sql.LevelReadUncommitted": "database/sql", - "sql.LevelRepeatableRead": "database/sql", - "sql.LevelSerializable": "database/sql", - "sql.LevelSnapshot": "database/sql", - "sql.LevelWriteCommitted": "database/sql", - "sql.Named": "database/sql", - "sql.NamedArg": "database/sql", - "sql.NullBool": "database/sql", - "sql.NullFloat64": "database/sql", - "sql.NullInt64": "database/sql", - "sql.NullString": "database/sql", - "sql.Open": "database/sql", - "sql.RawBytes": "database/sql", - "sql.Register": "database/sql", - "sql.Result": "database/sql", - "sql.Row": "database/sql", - "sql.Rows": "database/sql", - "sql.Scanner": "database/sql", - "sql.Stmt": "database/sql", - "sql.Tx": "database/sql", - "sql.TxOptions": "database/sql", - "strconv.AppendBool": "strconv", - "strconv.AppendFloat": "strconv", - "strconv.AppendInt": "strconv", - "strconv.AppendQuote": "strconv", - "strconv.AppendQuoteRune": "strconv", - "strconv.AppendQuoteRuneToASCII": "strconv", - "strconv.AppendQuoteRuneToGraphic": "strconv", - "strconv.AppendQuoteToASCII": "strconv", - "strconv.AppendQuoteToGraphic": "strconv", - "strconv.AppendUint": "strconv", - "strconv.Atoi": "strconv", - "strconv.CanBackquote": "strconv", - "strconv.ErrRange": "strconv", - "strconv.ErrSyntax": "strconv", - "strconv.FormatBool": "strconv", - "strconv.FormatFloat": "strconv", - "strconv.FormatInt": "strconv", - "strconv.FormatUint": "strconv", - "strconv.IntSize": "strconv", - "strconv.IsGraphic": "strconv", - "strconv.IsPrint": "strconv", - "strconv.Itoa": "strconv", - "strconv.NumError": "strconv", - "strconv.ParseBool": "strconv", - "strconv.ParseFloat": "strconv", - "strconv.ParseInt": "strconv", - "strconv.ParseUint": "strconv", - "strconv.Quote": "strconv", - "strconv.QuoteRune": "strconv", - "strconv.QuoteRuneToASCII": "strconv", - "strconv.QuoteRuneToGraphic": "strconv", - "strconv.QuoteToASCII": "strconv", - "strconv.QuoteToGraphic": "strconv", - "strconv.Unquote": "strconv", - "strconv.UnquoteChar": "strconv", - "strings.Compare": "strings", - "strings.Contains": "strings", - "strings.ContainsAny": "strings", - "strings.ContainsRune": "strings", - "strings.Count": "strings", - "strings.EqualFold": "strings", - "strings.Fields": "strings", - "strings.FieldsFunc": "strings", - "strings.HasPrefix": "strings", - "strings.HasSuffix": "strings", - "strings.Index": "strings", - "strings.IndexAny": "strings", - "strings.IndexByte": "strings", - "strings.IndexFunc": "strings", - "strings.IndexRune": "strings", - "strings.Join": "strings", - "strings.LastIndex": "strings", - "strings.LastIndexAny": "strings", - "strings.LastIndexByte": "strings", - "strings.LastIndexFunc": "strings", - "strings.Map": "strings", - "strings.NewReader": "strings", - "strings.NewReplacer": "strings", - "strings.Reader": "strings", - "strings.Repeat": "strings", - "strings.Replace": "strings", - "strings.Replacer": "strings", - "strings.Split": "strings", - "strings.SplitAfter": "strings", - "strings.SplitAfterN": "strings", - "strings.SplitN": "strings", - "strings.Title": "strings", - "strings.ToLower": "strings", - "strings.ToLowerSpecial": "strings", - "strings.ToTitle": "strings", - "strings.ToTitleSpecial": "strings", - "strings.ToUpper": "strings", - "strings.ToUpperSpecial": "strings", - "strings.Trim": "strings", - "strings.TrimFunc": "strings", - "strings.TrimLeft": "strings", - "strings.TrimLeftFunc": "strings", - "strings.TrimPrefix": "strings", - "strings.TrimRight": "strings", - "strings.TrimRightFunc": "strings", - "strings.TrimSpace": "strings", - "strings.TrimSuffix": "strings", - "subtle.ConstantTimeByteEq": "crypto/subtle", - "subtle.ConstantTimeCompare": "crypto/subtle", - "subtle.ConstantTimeCopy": "crypto/subtle", - "subtle.ConstantTimeEq": "crypto/subtle", - "subtle.ConstantTimeLessOrEq": "crypto/subtle", - "subtle.ConstantTimeSelect": "crypto/subtle", - "suffixarray.Index": "index/suffixarray", - "suffixarray.New": "index/suffixarray", - "sync.Cond": "sync", - "sync.Locker": "sync", - "sync.Mutex": "sync", - "sync.NewCond": "sync", - "sync.Once": "sync", - "sync.Pool": "sync", - "sync.RWMutex": "sync", - "sync.WaitGroup": "sync", - "syntax.ClassNL": "regexp/syntax", - "syntax.Compile": "regexp/syntax", - "syntax.DotNL": "regexp/syntax", - "syntax.EmptyBeginLine": "regexp/syntax", - "syntax.EmptyBeginText": "regexp/syntax", - "syntax.EmptyEndLine": "regexp/syntax", - "syntax.EmptyEndText": "regexp/syntax", - "syntax.EmptyNoWordBoundary": "regexp/syntax", - "syntax.EmptyOp": "regexp/syntax", - "syntax.EmptyOpContext": "regexp/syntax", - "syntax.EmptyWordBoundary": "regexp/syntax", - "syntax.ErrInternalError": "regexp/syntax", - "syntax.ErrInvalidCharClass": "regexp/syntax", - "syntax.ErrInvalidCharRange": "regexp/syntax", - "syntax.ErrInvalidEscape": "regexp/syntax", - "syntax.ErrInvalidNamedCapture": "regexp/syntax", - "syntax.ErrInvalidPerlOp": "regexp/syntax", - "syntax.ErrInvalidRepeatOp": "regexp/syntax", - "syntax.ErrInvalidRepeatSize": "regexp/syntax", - "syntax.ErrInvalidUTF8": "regexp/syntax", - "syntax.ErrMissingBracket": "regexp/syntax", - "syntax.ErrMissingParen": "regexp/syntax", - "syntax.ErrMissingRepeatArgument": "regexp/syntax", - "syntax.ErrTrailingBackslash": "regexp/syntax", - "syntax.ErrUnexpectedParen": "regexp/syntax", - "syntax.Error": "regexp/syntax", - "syntax.ErrorCode": "regexp/syntax", - "syntax.Flags": "regexp/syntax", - "syntax.FoldCase": "regexp/syntax", - "syntax.Inst": "regexp/syntax", - "syntax.InstAlt": "regexp/syntax", - "syntax.InstAltMatch": "regexp/syntax", - "syntax.InstCapture": "regexp/syntax", - "syntax.InstEmptyWidth": "regexp/syntax", - "syntax.InstFail": "regexp/syntax", - "syntax.InstMatch": "regexp/syntax", - "syntax.InstNop": "regexp/syntax", - "syntax.InstOp": "regexp/syntax", - "syntax.InstRune": "regexp/syntax", - "syntax.InstRune1": "regexp/syntax", - "syntax.InstRuneAny": "regexp/syntax", - "syntax.InstRuneAnyNotNL": "regexp/syntax", - "syntax.IsWordChar": "regexp/syntax", - "syntax.Literal": "regexp/syntax", - "syntax.MatchNL": "regexp/syntax", - "syntax.NonGreedy": "regexp/syntax", - "syntax.OneLine": "regexp/syntax", - "syntax.Op": "regexp/syntax", - "syntax.OpAlternate": "regexp/syntax", - "syntax.OpAnyChar": "regexp/syntax", - "syntax.OpAnyCharNotNL": "regexp/syntax", - "syntax.OpBeginLine": "regexp/syntax", - "syntax.OpBeginText": "regexp/syntax", - "syntax.OpCapture": "regexp/syntax", - "syntax.OpCharClass": "regexp/syntax", - "syntax.OpConcat": "regexp/syntax", - "syntax.OpEmptyMatch": "regexp/syntax", - "syntax.OpEndLine": "regexp/syntax", - "syntax.OpEndText": "regexp/syntax", - "syntax.OpLiteral": "regexp/syntax", - "syntax.OpNoMatch": "regexp/syntax", - "syntax.OpNoWordBoundary": "regexp/syntax", - "syntax.OpPlus": "regexp/syntax", - "syntax.OpQuest": "regexp/syntax", - "syntax.OpRepeat": "regexp/syntax", - "syntax.OpStar": "regexp/syntax", - "syntax.OpWordBoundary": "regexp/syntax", - "syntax.POSIX": "regexp/syntax", - "syntax.Parse": "regexp/syntax", - "syntax.Perl": "regexp/syntax", - "syntax.PerlX": "regexp/syntax", - "syntax.Prog": "regexp/syntax", - "syntax.Regexp": "regexp/syntax", - "syntax.Simple": "regexp/syntax", - "syntax.UnicodeGroups": "regexp/syntax", - "syntax.WasDollar": "regexp/syntax", - "syscall.AF_ALG": "syscall", - "syscall.AF_APPLETALK": "syscall", - "syscall.AF_ARP": "syscall", - "syscall.AF_ASH": "syscall", - "syscall.AF_ATM": "syscall", - "syscall.AF_ATMPVC": "syscall", - "syscall.AF_ATMSVC": "syscall", - "syscall.AF_AX25": "syscall", - "syscall.AF_BLUETOOTH": "syscall", - "syscall.AF_BRIDGE": "syscall", - "syscall.AF_CAIF": "syscall", - "syscall.AF_CAN": "syscall", - "syscall.AF_CCITT": "syscall", - "syscall.AF_CHAOS": "syscall", - "syscall.AF_CNT": "syscall", - "syscall.AF_COIP": "syscall", - "syscall.AF_DATAKIT": "syscall", - "syscall.AF_DECnet": "syscall", - "syscall.AF_DLI": "syscall", - "syscall.AF_E164": "syscall", - "syscall.AF_ECMA": "syscall", - "syscall.AF_ECONET": "syscall", - "syscall.AF_ENCAP": "syscall", - "syscall.AF_FILE": "syscall", - "syscall.AF_HYLINK": "syscall", - "syscall.AF_IEEE80211": "syscall", - "syscall.AF_IEEE802154": "syscall", - "syscall.AF_IMPLINK": "syscall", - "syscall.AF_INET": "syscall", - "syscall.AF_INET6": "syscall", - "syscall.AF_INET6_SDP": "syscall", - "syscall.AF_INET_SDP": "syscall", - "syscall.AF_IPX": "syscall", - "syscall.AF_IRDA": "syscall", - "syscall.AF_ISDN": "syscall", - "syscall.AF_ISO": "syscall", - "syscall.AF_IUCV": "syscall", - "syscall.AF_KEY": "syscall", - "syscall.AF_LAT": "syscall", - "syscall.AF_LINK": "syscall", - "syscall.AF_LLC": "syscall", - "syscall.AF_LOCAL": "syscall", - "syscall.AF_MAX": "syscall", - "syscall.AF_MPLS": "syscall", - "syscall.AF_NATM": "syscall", - "syscall.AF_NDRV": "syscall", - "syscall.AF_NETBEUI": "syscall", - "syscall.AF_NETBIOS": "syscall", - "syscall.AF_NETGRAPH": "syscall", - "syscall.AF_NETLINK": "syscall", - "syscall.AF_NETROM": "syscall", - "syscall.AF_NS": "syscall", - "syscall.AF_OROUTE": "syscall", - "syscall.AF_OSI": "syscall", - "syscall.AF_PACKET": "syscall", - "syscall.AF_PHONET": "syscall", - "syscall.AF_PPP": "syscall", - "syscall.AF_PPPOX": "syscall", - "syscall.AF_PUP": "syscall", - "syscall.AF_RDS": "syscall", - "syscall.AF_RESERVED_36": "syscall", - "syscall.AF_ROSE": "syscall", - "syscall.AF_ROUTE": "syscall", - "syscall.AF_RXRPC": "syscall", - "syscall.AF_SCLUSTER": "syscall", - "syscall.AF_SECURITY": "syscall", - "syscall.AF_SIP": "syscall", - "syscall.AF_SLOW": "syscall", - "syscall.AF_SNA": "syscall", - "syscall.AF_SYSTEM": "syscall", - "syscall.AF_TIPC": "syscall", - "syscall.AF_UNIX": "syscall", - "syscall.AF_UNSPEC": "syscall", - "syscall.AF_VENDOR00": "syscall", - "syscall.AF_VENDOR01": "syscall", - "syscall.AF_VENDOR02": "syscall", - "syscall.AF_VENDOR03": "syscall", - "syscall.AF_VENDOR04": "syscall", - "syscall.AF_VENDOR05": "syscall", - "syscall.AF_VENDOR06": "syscall", - "syscall.AF_VENDOR07": "syscall", - "syscall.AF_VENDOR08": "syscall", - "syscall.AF_VENDOR09": "syscall", - "syscall.AF_VENDOR10": "syscall", - "syscall.AF_VENDOR11": "syscall", - "syscall.AF_VENDOR12": "syscall", - "syscall.AF_VENDOR13": "syscall", - "syscall.AF_VENDOR14": "syscall", - "syscall.AF_VENDOR15": "syscall", - "syscall.AF_VENDOR16": "syscall", - "syscall.AF_VENDOR17": "syscall", - "syscall.AF_VENDOR18": "syscall", - "syscall.AF_VENDOR19": "syscall", - "syscall.AF_VENDOR20": "syscall", - "syscall.AF_VENDOR21": "syscall", - "syscall.AF_VENDOR22": "syscall", - "syscall.AF_VENDOR23": "syscall", - "syscall.AF_VENDOR24": "syscall", - "syscall.AF_VENDOR25": "syscall", - "syscall.AF_VENDOR26": "syscall", - "syscall.AF_VENDOR27": "syscall", - "syscall.AF_VENDOR28": "syscall", - "syscall.AF_VENDOR29": "syscall", - "syscall.AF_VENDOR30": "syscall", - "syscall.AF_VENDOR31": "syscall", - "syscall.AF_VENDOR32": "syscall", - "syscall.AF_VENDOR33": "syscall", - "syscall.AF_VENDOR34": "syscall", - "syscall.AF_VENDOR35": "syscall", - "syscall.AF_VENDOR36": "syscall", - "syscall.AF_VENDOR37": "syscall", - "syscall.AF_VENDOR38": "syscall", - "syscall.AF_VENDOR39": "syscall", - "syscall.AF_VENDOR40": "syscall", - "syscall.AF_VENDOR41": "syscall", - "syscall.AF_VENDOR42": "syscall", - "syscall.AF_VENDOR43": "syscall", - "syscall.AF_VENDOR44": "syscall", - "syscall.AF_VENDOR45": "syscall", - "syscall.AF_VENDOR46": "syscall", - "syscall.AF_VENDOR47": "syscall", - "syscall.AF_WANPIPE": "syscall", - "syscall.AF_X25": "syscall", - "syscall.AI_CANONNAME": "syscall", - "syscall.AI_NUMERICHOST": "syscall", - "syscall.AI_PASSIVE": "syscall", - "syscall.APPLICATION_ERROR": "syscall", - "syscall.ARPHRD_ADAPT": "syscall", - "syscall.ARPHRD_APPLETLK": "syscall", - "syscall.ARPHRD_ARCNET": "syscall", - "syscall.ARPHRD_ASH": "syscall", - "syscall.ARPHRD_ATM": "syscall", - "syscall.ARPHRD_AX25": "syscall", - "syscall.ARPHRD_BIF": "syscall", - "syscall.ARPHRD_CHAOS": "syscall", - "syscall.ARPHRD_CISCO": "syscall", - "syscall.ARPHRD_CSLIP": "syscall", - "syscall.ARPHRD_CSLIP6": "syscall", - "syscall.ARPHRD_DDCMP": "syscall", - "syscall.ARPHRD_DLCI": "syscall", - "syscall.ARPHRD_ECONET": "syscall", - "syscall.ARPHRD_EETHER": "syscall", - "syscall.ARPHRD_ETHER": "syscall", - "syscall.ARPHRD_EUI64": "syscall", - "syscall.ARPHRD_FCAL": "syscall", - "syscall.ARPHRD_FCFABRIC": "syscall", - "syscall.ARPHRD_FCPL": "syscall", - "syscall.ARPHRD_FCPP": "syscall", - "syscall.ARPHRD_FDDI": "syscall", - "syscall.ARPHRD_FRAD": "syscall", - "syscall.ARPHRD_FRELAY": "syscall", - "syscall.ARPHRD_HDLC": "syscall", - "syscall.ARPHRD_HIPPI": "syscall", - "syscall.ARPHRD_HWX25": "syscall", - "syscall.ARPHRD_IEEE1394": "syscall", - "syscall.ARPHRD_IEEE802": "syscall", - "syscall.ARPHRD_IEEE80211": "syscall", - "syscall.ARPHRD_IEEE80211_PRISM": "syscall", - "syscall.ARPHRD_IEEE80211_RADIOTAP": "syscall", - "syscall.ARPHRD_IEEE802154": "syscall", - "syscall.ARPHRD_IEEE802154_PHY": "syscall", - "syscall.ARPHRD_IEEE802_TR": "syscall", - "syscall.ARPHRD_INFINIBAND": "syscall", - "syscall.ARPHRD_IPDDP": "syscall", - "syscall.ARPHRD_IPGRE": "syscall", - "syscall.ARPHRD_IRDA": "syscall", - "syscall.ARPHRD_LAPB": "syscall", - "syscall.ARPHRD_LOCALTLK": "syscall", - "syscall.ARPHRD_LOOPBACK": "syscall", - "syscall.ARPHRD_METRICOM": "syscall", - "syscall.ARPHRD_NETROM": "syscall", - "syscall.ARPHRD_NONE": "syscall", - "syscall.ARPHRD_PIMREG": "syscall", - "syscall.ARPHRD_PPP": "syscall", - "syscall.ARPHRD_PRONET": "syscall", - "syscall.ARPHRD_RAWHDLC": "syscall", - "syscall.ARPHRD_ROSE": "syscall", - "syscall.ARPHRD_RSRVD": "syscall", - "syscall.ARPHRD_SIT": "syscall", - "syscall.ARPHRD_SKIP": "syscall", - "syscall.ARPHRD_SLIP": "syscall", - "syscall.ARPHRD_SLIP6": "syscall", - "syscall.ARPHRD_STRIP": "syscall", - "syscall.ARPHRD_TUNNEL": "syscall", - "syscall.ARPHRD_TUNNEL6": "syscall", - "syscall.ARPHRD_VOID": "syscall", - "syscall.ARPHRD_X25": "syscall", - "syscall.AUTHTYPE_CLIENT": "syscall", - "syscall.AUTHTYPE_SERVER": "syscall", - "syscall.Accept": "syscall", - "syscall.Accept4": "syscall", - "syscall.AcceptEx": "syscall", - "syscall.Access": "syscall", - "syscall.Acct": "syscall", - "syscall.AddrinfoW": "syscall", - "syscall.Adjtime": "syscall", - "syscall.Adjtimex": "syscall", - "syscall.AttachLsf": "syscall", - "syscall.B0": "syscall", - "syscall.B1000000": "syscall", - "syscall.B110": "syscall", - "syscall.B115200": "syscall", - "syscall.B1152000": "syscall", - "syscall.B1200": "syscall", - "syscall.B134": "syscall", - "syscall.B14400": "syscall", - "syscall.B150": "syscall", - "syscall.B1500000": "syscall", - "syscall.B1800": "syscall", - "syscall.B19200": "syscall", - "syscall.B200": "syscall", - "syscall.B2000000": "syscall", - "syscall.B230400": "syscall", - "syscall.B2400": "syscall", - "syscall.B2500000": "syscall", - "syscall.B28800": "syscall", - "syscall.B300": "syscall", - "syscall.B3000000": "syscall", - "syscall.B3500000": "syscall", - "syscall.B38400": "syscall", - "syscall.B4000000": "syscall", - "syscall.B460800": "syscall", - "syscall.B4800": "syscall", - "syscall.B50": "syscall", - "syscall.B500000": "syscall", - "syscall.B57600": "syscall", - "syscall.B576000": "syscall", - "syscall.B600": "syscall", - "syscall.B7200": "syscall", - "syscall.B75": "syscall", - "syscall.B76800": "syscall", - "syscall.B921600": "syscall", - "syscall.B9600": "syscall", - "syscall.BASE_PROTOCOL": "syscall", - "syscall.BIOCFEEDBACK": "syscall", - "syscall.BIOCFLUSH": "syscall", - "syscall.BIOCGBLEN": "syscall", - "syscall.BIOCGDIRECTION": "syscall", - "syscall.BIOCGDIRFILT": "syscall", - "syscall.BIOCGDLT": "syscall", - "syscall.BIOCGDLTLIST": "syscall", - "syscall.BIOCGETBUFMODE": "syscall", - "syscall.BIOCGETIF": "syscall", - "syscall.BIOCGETZMAX": "syscall", - "syscall.BIOCGFEEDBACK": "syscall", - "syscall.BIOCGFILDROP": "syscall", - "syscall.BIOCGHDRCMPLT": "syscall", - "syscall.BIOCGRSIG": "syscall", - "syscall.BIOCGRTIMEOUT": "syscall", - "syscall.BIOCGSEESENT": "syscall", - "syscall.BIOCGSTATS": "syscall", - "syscall.BIOCGSTATSOLD": "syscall", - "syscall.BIOCGTSTAMP": "syscall", - "syscall.BIOCIMMEDIATE": "syscall", - "syscall.BIOCLOCK": "syscall", - "syscall.BIOCPROMISC": "syscall", - "syscall.BIOCROTZBUF": "syscall", - "syscall.BIOCSBLEN": "syscall", - "syscall.BIOCSDIRECTION": "syscall", - "syscall.BIOCSDIRFILT": "syscall", - "syscall.BIOCSDLT": "syscall", - "syscall.BIOCSETBUFMODE": "syscall", - "syscall.BIOCSETF": "syscall", - "syscall.BIOCSETFNR": "syscall", - "syscall.BIOCSETIF": "syscall", - "syscall.BIOCSETWF": "syscall", - "syscall.BIOCSETZBUF": "syscall", - "syscall.BIOCSFEEDBACK": "syscall", - "syscall.BIOCSFILDROP": "syscall", - "syscall.BIOCSHDRCMPLT": "syscall", - "syscall.BIOCSRSIG": "syscall", - "syscall.BIOCSRTIMEOUT": "syscall", - "syscall.BIOCSSEESENT": "syscall", - "syscall.BIOCSTCPF": "syscall", - "syscall.BIOCSTSTAMP": "syscall", - "syscall.BIOCSUDPF": "syscall", - "syscall.BIOCVERSION": "syscall", - "syscall.BPF_A": "syscall", - "syscall.BPF_ABS": "syscall", - "syscall.BPF_ADD": "syscall", - "syscall.BPF_ALIGNMENT": "syscall", - "syscall.BPF_ALIGNMENT32": "syscall", - "syscall.BPF_ALU": "syscall", - "syscall.BPF_AND": "syscall", - "syscall.BPF_B": "syscall", - "syscall.BPF_BUFMODE_BUFFER": "syscall", - "syscall.BPF_BUFMODE_ZBUF": "syscall", - "syscall.BPF_DFLTBUFSIZE": "syscall", - "syscall.BPF_DIRECTION_IN": "syscall", - "syscall.BPF_DIRECTION_OUT": "syscall", - "syscall.BPF_DIV": "syscall", - "syscall.BPF_H": "syscall", - "syscall.BPF_IMM": "syscall", - "syscall.BPF_IND": "syscall", - "syscall.BPF_JA": "syscall", - "syscall.BPF_JEQ": "syscall", - "syscall.BPF_JGE": "syscall", - "syscall.BPF_JGT": "syscall", - "syscall.BPF_JMP": "syscall", - "syscall.BPF_JSET": "syscall", - "syscall.BPF_K": "syscall", - "syscall.BPF_LD": "syscall", - "syscall.BPF_LDX": "syscall", - "syscall.BPF_LEN": "syscall", - "syscall.BPF_LSH": "syscall", - "syscall.BPF_MAJOR_VERSION": "syscall", - "syscall.BPF_MAXBUFSIZE": "syscall", - "syscall.BPF_MAXINSNS": "syscall", - "syscall.BPF_MEM": "syscall", - "syscall.BPF_MEMWORDS": "syscall", - "syscall.BPF_MINBUFSIZE": "syscall", - "syscall.BPF_MINOR_VERSION": "syscall", - "syscall.BPF_MISC": "syscall", - "syscall.BPF_MSH": "syscall", - "syscall.BPF_MUL": "syscall", - "syscall.BPF_NEG": "syscall", - "syscall.BPF_OR": "syscall", - "syscall.BPF_RELEASE": "syscall", - "syscall.BPF_RET": "syscall", - "syscall.BPF_RSH": "syscall", - "syscall.BPF_ST": "syscall", - "syscall.BPF_STX": "syscall", - "syscall.BPF_SUB": "syscall", - "syscall.BPF_TAX": "syscall", - "syscall.BPF_TXA": "syscall", - "syscall.BPF_T_BINTIME": "syscall", - "syscall.BPF_T_BINTIME_FAST": "syscall", - "syscall.BPF_T_BINTIME_MONOTONIC": "syscall", - "syscall.BPF_T_BINTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_FAST": "syscall", - "syscall.BPF_T_FLAG_MASK": "syscall", - "syscall.BPF_T_FORMAT_MASK": "syscall", - "syscall.BPF_T_MICROTIME": "syscall", - "syscall.BPF_T_MICROTIME_FAST": "syscall", - "syscall.BPF_T_MICROTIME_MONOTONIC": "syscall", - "syscall.BPF_T_MICROTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_MONOTONIC": "syscall", - "syscall.BPF_T_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_NANOTIME": "syscall", - "syscall.BPF_T_NANOTIME_FAST": "syscall", - "syscall.BPF_T_NANOTIME_MONOTONIC": "syscall", - "syscall.BPF_T_NANOTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_NONE": "syscall", - "syscall.BPF_T_NORMAL": "syscall", - "syscall.BPF_W": "syscall", - "syscall.BPF_X": "syscall", - "syscall.BRKINT": "syscall", - "syscall.Bind": "syscall", - "syscall.BindToDevice": "syscall", - "syscall.BpfBuflen": "syscall", - "syscall.BpfDatalink": "syscall", - "syscall.BpfHdr": "syscall", - "syscall.BpfHeadercmpl": "syscall", - "syscall.BpfInsn": "syscall", - "syscall.BpfInterface": "syscall", - "syscall.BpfJump": "syscall", - "syscall.BpfProgram": "syscall", - "syscall.BpfStat": "syscall", - "syscall.BpfStats": "syscall", - "syscall.BpfStmt": "syscall", - "syscall.BpfTimeout": "syscall", - "syscall.BpfTimeval": "syscall", - "syscall.BpfVersion": "syscall", - "syscall.BpfZbuf": "syscall", - "syscall.BpfZbufHeader": "syscall", - "syscall.ByHandleFileInformation": "syscall", - "syscall.BytePtrFromString": "syscall", - "syscall.ByteSliceFromString": "syscall", - "syscall.CCR0_FLUSH": "syscall", - "syscall.CERT_CHAIN_POLICY_AUTHENTICODE": "syscall", - "syscall.CERT_CHAIN_POLICY_AUTHENTICODE_TS": "syscall", - "syscall.CERT_CHAIN_POLICY_BASE": "syscall", - "syscall.CERT_CHAIN_POLICY_BASIC_CONSTRAINTS": "syscall", - "syscall.CERT_CHAIN_POLICY_EV": "syscall", - "syscall.CERT_CHAIN_POLICY_MICROSOFT_ROOT": "syscall", - "syscall.CERT_CHAIN_POLICY_NT_AUTH": "syscall", - "syscall.CERT_CHAIN_POLICY_SSL": "syscall", - "syscall.CERT_E_CN_NO_MATCH": "syscall", - "syscall.CERT_E_EXPIRED": "syscall", - "syscall.CERT_E_PURPOSE": "syscall", - "syscall.CERT_E_ROLE": "syscall", - "syscall.CERT_E_UNTRUSTEDROOT": "syscall", - "syscall.CERT_STORE_ADD_ALWAYS": "syscall", - "syscall.CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG": "syscall", - "syscall.CERT_STORE_PROV_MEMORY": "syscall", - "syscall.CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_INVALID_BASIC_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_INVALID_EXTENSION": "syscall", - "syscall.CERT_TRUST_INVALID_NAME_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_INVALID_POLICY_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_IS_CYCLIC": "syscall", - "syscall.CERT_TRUST_IS_EXPLICIT_DISTRUST": "syscall", - "syscall.CERT_TRUST_IS_NOT_SIGNATURE_VALID": "syscall", - "syscall.CERT_TRUST_IS_NOT_TIME_VALID": "syscall", - "syscall.CERT_TRUST_IS_NOT_VALID_FOR_USAGE": "syscall", - "syscall.CERT_TRUST_IS_OFFLINE_REVOCATION": "syscall", - "syscall.CERT_TRUST_IS_REVOKED": "syscall", - "syscall.CERT_TRUST_IS_UNTRUSTED_ROOT": "syscall", - "syscall.CERT_TRUST_NO_ERROR": "syscall", - "syscall.CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY": "syscall", - "syscall.CERT_TRUST_REVOCATION_STATUS_UNKNOWN": "syscall", - "syscall.CFLUSH": "syscall", - "syscall.CLOCAL": "syscall", - "syscall.CLONE_CHILD_CLEARTID": "syscall", - "syscall.CLONE_CHILD_SETTID": "syscall", - "syscall.CLONE_CSIGNAL": "syscall", - "syscall.CLONE_DETACHED": "syscall", - "syscall.CLONE_FILES": "syscall", - "syscall.CLONE_FS": "syscall", - "syscall.CLONE_IO": "syscall", - "syscall.CLONE_NEWIPC": "syscall", - "syscall.CLONE_NEWNET": "syscall", - "syscall.CLONE_NEWNS": "syscall", - "syscall.CLONE_NEWPID": "syscall", - "syscall.CLONE_NEWUSER": "syscall", - "syscall.CLONE_NEWUTS": "syscall", - "syscall.CLONE_PARENT": "syscall", - "syscall.CLONE_PARENT_SETTID": "syscall", - "syscall.CLONE_PID": "syscall", - "syscall.CLONE_PTRACE": "syscall", - "syscall.CLONE_SETTLS": "syscall", - "syscall.CLONE_SIGHAND": "syscall", - "syscall.CLONE_SYSVSEM": "syscall", - "syscall.CLONE_THREAD": "syscall", - "syscall.CLONE_UNTRACED": "syscall", - "syscall.CLONE_VFORK": "syscall", - "syscall.CLONE_VM": "syscall", - "syscall.CPUID_CFLUSH": "syscall", - "syscall.CREAD": "syscall", - "syscall.CREATE_ALWAYS": "syscall", - "syscall.CREATE_NEW": "syscall", - "syscall.CREATE_NEW_PROCESS_GROUP": "syscall", - "syscall.CREATE_UNICODE_ENVIRONMENT": "syscall", - "syscall.CRYPT_DEFAULT_CONTAINER_OPTIONAL": "syscall", - "syscall.CRYPT_DELETEKEYSET": "syscall", - "syscall.CRYPT_MACHINE_KEYSET": "syscall", - "syscall.CRYPT_NEWKEYSET": "syscall", - "syscall.CRYPT_SILENT": "syscall", - "syscall.CRYPT_VERIFYCONTEXT": "syscall", - "syscall.CS5": "syscall", - "syscall.CS6": "syscall", - "syscall.CS7": "syscall", - "syscall.CS8": "syscall", - "syscall.CSIZE": "syscall", - "syscall.CSTART": "syscall", - "syscall.CSTATUS": "syscall", - "syscall.CSTOP": "syscall", - "syscall.CSTOPB": "syscall", - "syscall.CSUSP": "syscall", - "syscall.CTL_MAXNAME": "syscall", - "syscall.CTL_NET": "syscall", - "syscall.CTL_QUERY": "syscall", - "syscall.CTRL_BREAK_EVENT": "syscall", - "syscall.CTRL_C_EVENT": "syscall", - "syscall.CancelIo": "syscall", - "syscall.CancelIoEx": "syscall", - "syscall.CertAddCertificateContextToStore": "syscall", - "syscall.CertChainContext": "syscall", - "syscall.CertChainElement": "syscall", - "syscall.CertChainPara": "syscall", - "syscall.CertChainPolicyPara": "syscall", - "syscall.CertChainPolicyStatus": "syscall", - "syscall.CertCloseStore": "syscall", - "syscall.CertContext": "syscall", - "syscall.CertCreateCertificateContext": "syscall", - "syscall.CertEnhKeyUsage": "syscall", - "syscall.CertEnumCertificatesInStore": "syscall", - "syscall.CertFreeCertificateChain": "syscall", - "syscall.CertFreeCertificateContext": "syscall", - "syscall.CertGetCertificateChain": "syscall", - "syscall.CertOpenStore": "syscall", - "syscall.CertOpenSystemStore": "syscall", - "syscall.CertRevocationInfo": "syscall", - "syscall.CertSimpleChain": "syscall", - "syscall.CertTrustStatus": "syscall", - "syscall.CertUsageMatch": "syscall", - "syscall.CertVerifyCertificateChainPolicy": "syscall", - "syscall.Chdir": "syscall", - "syscall.CheckBpfVersion": "syscall", - "syscall.Chflags": "syscall", - "syscall.Chmod": "syscall", - "syscall.Chown": "syscall", - "syscall.Chroot": "syscall", - "syscall.Clearenv": "syscall", - "syscall.Close": "syscall", - "syscall.CloseHandle": "syscall", - "syscall.CloseOnExec": "syscall", - "syscall.Closesocket": "syscall", - "syscall.CmsgLen": "syscall", - "syscall.CmsgSpace": "syscall", - "syscall.Cmsghdr": "syscall", - "syscall.CommandLineToArgv": "syscall", - "syscall.ComputerName": "syscall", - "syscall.Connect": "syscall", - "syscall.ConnectEx": "syscall", - "syscall.ConvertSidToStringSid": "syscall", - "syscall.ConvertStringSidToSid": "syscall", - "syscall.CopySid": "syscall", - "syscall.Creat": "syscall", - "syscall.CreateDirectory": "syscall", - "syscall.CreateFile": "syscall", - "syscall.CreateFileMapping": "syscall", - "syscall.CreateHardLink": "syscall", - "syscall.CreateIoCompletionPort": "syscall", - "syscall.CreatePipe": "syscall", - "syscall.CreateProcess": "syscall", - "syscall.CreateSymbolicLink": "syscall", - "syscall.CreateToolhelp32Snapshot": "syscall", - "syscall.Credential": "syscall", - "syscall.CryptAcquireContext": "syscall", - "syscall.CryptGenRandom": "syscall", - "syscall.CryptReleaseContext": "syscall", - "syscall.DIOCBSFLUSH": "syscall", - "syscall.DIOCOSFPFLUSH": "syscall", - "syscall.DLL": "syscall", - "syscall.DLLError": "syscall", - "syscall.DLT_A429": "syscall", - "syscall.DLT_A653_ICM": "syscall", - "syscall.DLT_AIRONET_HEADER": "syscall", - "syscall.DLT_AOS": "syscall", - "syscall.DLT_APPLE_IP_OVER_IEEE1394": "syscall", - "syscall.DLT_ARCNET": "syscall", - "syscall.DLT_ARCNET_LINUX": "syscall", - "syscall.DLT_ATM_CLIP": "syscall", - "syscall.DLT_ATM_RFC1483": "syscall", - "syscall.DLT_AURORA": "syscall", - "syscall.DLT_AX25": "syscall", - "syscall.DLT_AX25_KISS": "syscall", - "syscall.DLT_BACNET_MS_TP": "syscall", - "syscall.DLT_BLUETOOTH_HCI_H4": "syscall", - "syscall.DLT_BLUETOOTH_HCI_H4_WITH_PHDR": "syscall", - "syscall.DLT_CAN20B": "syscall", - "syscall.DLT_CAN_SOCKETCAN": "syscall", - "syscall.DLT_CHAOS": "syscall", - "syscall.DLT_CHDLC": "syscall", - "syscall.DLT_CISCO_IOS": "syscall", - "syscall.DLT_C_HDLC": "syscall", - "syscall.DLT_C_HDLC_WITH_DIR": "syscall", - "syscall.DLT_DBUS": "syscall", - "syscall.DLT_DECT": "syscall", - "syscall.DLT_DOCSIS": "syscall", - "syscall.DLT_DVB_CI": "syscall", - "syscall.DLT_ECONET": "syscall", - "syscall.DLT_EN10MB": "syscall", - "syscall.DLT_EN3MB": "syscall", - "syscall.DLT_ENC": "syscall", - "syscall.DLT_ERF": "syscall", - "syscall.DLT_ERF_ETH": "syscall", - "syscall.DLT_ERF_POS": "syscall", - "syscall.DLT_FC_2": "syscall", - "syscall.DLT_FC_2_WITH_FRAME_DELIMS": "syscall", - "syscall.DLT_FDDI": "syscall", - "syscall.DLT_FLEXRAY": "syscall", - "syscall.DLT_FRELAY": "syscall", - "syscall.DLT_FRELAY_WITH_DIR": "syscall", - "syscall.DLT_GCOM_SERIAL": "syscall", - "syscall.DLT_GCOM_T1E1": "syscall", - "syscall.DLT_GPF_F": "syscall", - "syscall.DLT_GPF_T": "syscall", - "syscall.DLT_GPRS_LLC": "syscall", - "syscall.DLT_GSMTAP_ABIS": "syscall", - "syscall.DLT_GSMTAP_UM": "syscall", - "syscall.DLT_HDLC": "syscall", - "syscall.DLT_HHDLC": "syscall", - "syscall.DLT_HIPPI": "syscall", - "syscall.DLT_IBM_SN": "syscall", - "syscall.DLT_IBM_SP": "syscall", - "syscall.DLT_IEEE802": "syscall", - "syscall.DLT_IEEE802_11": "syscall", - "syscall.DLT_IEEE802_11_RADIO": "syscall", - "syscall.DLT_IEEE802_11_RADIO_AVS": "syscall", - "syscall.DLT_IEEE802_15_4": "syscall", - "syscall.DLT_IEEE802_15_4_LINUX": "syscall", - "syscall.DLT_IEEE802_15_4_NOFCS": "syscall", - "syscall.DLT_IEEE802_15_4_NONASK_PHY": "syscall", - "syscall.DLT_IEEE802_16_MAC_CPS": "syscall", - "syscall.DLT_IEEE802_16_MAC_CPS_RADIO": "syscall", - "syscall.DLT_IPFILTER": "syscall", - "syscall.DLT_IPMB": "syscall", - "syscall.DLT_IPMB_LINUX": "syscall", - "syscall.DLT_IPNET": "syscall", - "syscall.DLT_IPOIB": "syscall", - "syscall.DLT_IPV4": "syscall", - "syscall.DLT_IPV6": "syscall", - "syscall.DLT_IP_OVER_FC": "syscall", - "syscall.DLT_JUNIPER_ATM1": "syscall", - "syscall.DLT_JUNIPER_ATM2": "syscall", - "syscall.DLT_JUNIPER_ATM_CEMIC": "syscall", - "syscall.DLT_JUNIPER_CHDLC": "syscall", - "syscall.DLT_JUNIPER_ES": "syscall", - "syscall.DLT_JUNIPER_ETHER": "syscall", - "syscall.DLT_JUNIPER_FIBRECHANNEL": "syscall", - "syscall.DLT_JUNIPER_FRELAY": "syscall", - "syscall.DLT_JUNIPER_GGSN": "syscall", - "syscall.DLT_JUNIPER_ISM": "syscall", - "syscall.DLT_JUNIPER_MFR": "syscall", - "syscall.DLT_JUNIPER_MLFR": "syscall", - "syscall.DLT_JUNIPER_MLPPP": "syscall", - "syscall.DLT_JUNIPER_MONITOR": "syscall", - "syscall.DLT_JUNIPER_PIC_PEER": "syscall", - "syscall.DLT_JUNIPER_PPP": "syscall", - "syscall.DLT_JUNIPER_PPPOE": "syscall", - "syscall.DLT_JUNIPER_PPPOE_ATM": "syscall", - "syscall.DLT_JUNIPER_SERVICES": "syscall", - "syscall.DLT_JUNIPER_SRX_E2E": "syscall", - "syscall.DLT_JUNIPER_ST": "syscall", - "syscall.DLT_JUNIPER_VP": "syscall", - "syscall.DLT_JUNIPER_VS": "syscall", - "syscall.DLT_LAPB_WITH_DIR": "syscall", - "syscall.DLT_LAPD": "syscall", - "syscall.DLT_LIN": "syscall", - "syscall.DLT_LINUX_EVDEV": "syscall", - "syscall.DLT_LINUX_IRDA": "syscall", - "syscall.DLT_LINUX_LAPD": "syscall", - "syscall.DLT_LINUX_PPP_WITHDIRECTION": "syscall", - "syscall.DLT_LINUX_SLL": "syscall", - "syscall.DLT_LOOP": "syscall", - "syscall.DLT_LTALK": "syscall", - "syscall.DLT_MATCHING_MAX": "syscall", - "syscall.DLT_MATCHING_MIN": "syscall", - "syscall.DLT_MFR": "syscall", - "syscall.DLT_MOST": "syscall", - "syscall.DLT_MPEG_2_TS": "syscall", - "syscall.DLT_MPLS": "syscall", - "syscall.DLT_MTP2": "syscall", - "syscall.DLT_MTP2_WITH_PHDR": "syscall", - "syscall.DLT_MTP3": "syscall", - "syscall.DLT_MUX27010": "syscall", - "syscall.DLT_NETANALYZER": "syscall", - "syscall.DLT_NETANALYZER_TRANSPARENT": "syscall", - "syscall.DLT_NFC_LLCP": "syscall", - "syscall.DLT_NFLOG": "syscall", - "syscall.DLT_NG40": "syscall", - "syscall.DLT_NULL": "syscall", - "syscall.DLT_PCI_EXP": "syscall", - "syscall.DLT_PFLOG": "syscall", - "syscall.DLT_PFSYNC": "syscall", - "syscall.DLT_PPI": "syscall", - "syscall.DLT_PPP": "syscall", - "syscall.DLT_PPP_BSDOS": "syscall", - "syscall.DLT_PPP_ETHER": "syscall", - "syscall.DLT_PPP_PPPD": "syscall", - "syscall.DLT_PPP_SERIAL": "syscall", - "syscall.DLT_PPP_WITH_DIR": "syscall", - "syscall.DLT_PPP_WITH_DIRECTION": "syscall", - "syscall.DLT_PRISM_HEADER": "syscall", - "syscall.DLT_PRONET": "syscall", - "syscall.DLT_RAIF1": "syscall", - "syscall.DLT_RAW": "syscall", - "syscall.DLT_RAWAF_MASK": "syscall", - "syscall.DLT_RIO": "syscall", - "syscall.DLT_SCCP": "syscall", - "syscall.DLT_SITA": "syscall", - "syscall.DLT_SLIP": "syscall", - "syscall.DLT_SLIP_BSDOS": "syscall", - "syscall.DLT_STANAG_5066_D_PDU": "syscall", - "syscall.DLT_SUNATM": "syscall", - "syscall.DLT_SYMANTEC_FIREWALL": "syscall", - "syscall.DLT_TZSP": "syscall", - "syscall.DLT_USB": "syscall", - "syscall.DLT_USB_LINUX": "syscall", - "syscall.DLT_USB_LINUX_MMAPPED": "syscall", - "syscall.DLT_USER0": "syscall", - "syscall.DLT_USER1": "syscall", - "syscall.DLT_USER10": "syscall", - "syscall.DLT_USER11": "syscall", - "syscall.DLT_USER12": "syscall", - "syscall.DLT_USER13": "syscall", - "syscall.DLT_USER14": "syscall", - "syscall.DLT_USER15": "syscall", - "syscall.DLT_USER2": "syscall", - "syscall.DLT_USER3": "syscall", - "syscall.DLT_USER4": "syscall", - "syscall.DLT_USER5": "syscall", - "syscall.DLT_USER6": "syscall", - "syscall.DLT_USER7": "syscall", - "syscall.DLT_USER8": "syscall", - "syscall.DLT_USER9": "syscall", - "syscall.DLT_WIHART": "syscall", - "syscall.DLT_X2E_SERIAL": "syscall", - "syscall.DLT_X2E_XORAYA": "syscall", - "syscall.DNSMXData": "syscall", - "syscall.DNSPTRData": "syscall", - "syscall.DNSRecord": "syscall", - "syscall.DNSSRVData": "syscall", - "syscall.DNSTXTData": "syscall", - "syscall.DNS_INFO_NO_RECORDS": "syscall", - "syscall.DNS_TYPE_A": "syscall", - "syscall.DNS_TYPE_A6": "syscall", - "syscall.DNS_TYPE_AAAA": "syscall", - "syscall.DNS_TYPE_ADDRS": "syscall", - "syscall.DNS_TYPE_AFSDB": "syscall", - "syscall.DNS_TYPE_ALL": "syscall", - "syscall.DNS_TYPE_ANY": "syscall", - "syscall.DNS_TYPE_ATMA": "syscall", - "syscall.DNS_TYPE_AXFR": "syscall", - "syscall.DNS_TYPE_CERT": "syscall", - "syscall.DNS_TYPE_CNAME": "syscall", - "syscall.DNS_TYPE_DHCID": "syscall", - "syscall.DNS_TYPE_DNAME": "syscall", - "syscall.DNS_TYPE_DNSKEY": "syscall", - "syscall.DNS_TYPE_DS": "syscall", - "syscall.DNS_TYPE_EID": "syscall", - "syscall.DNS_TYPE_GID": "syscall", - "syscall.DNS_TYPE_GPOS": "syscall", - "syscall.DNS_TYPE_HINFO": "syscall", - "syscall.DNS_TYPE_ISDN": "syscall", - "syscall.DNS_TYPE_IXFR": "syscall", - "syscall.DNS_TYPE_KEY": "syscall", - "syscall.DNS_TYPE_KX": "syscall", - "syscall.DNS_TYPE_LOC": "syscall", - "syscall.DNS_TYPE_MAILA": "syscall", - "syscall.DNS_TYPE_MAILB": "syscall", - "syscall.DNS_TYPE_MB": "syscall", - "syscall.DNS_TYPE_MD": "syscall", - "syscall.DNS_TYPE_MF": "syscall", - "syscall.DNS_TYPE_MG": "syscall", - "syscall.DNS_TYPE_MINFO": "syscall", - "syscall.DNS_TYPE_MR": "syscall", - "syscall.DNS_TYPE_MX": "syscall", - "syscall.DNS_TYPE_NAPTR": "syscall", - "syscall.DNS_TYPE_NBSTAT": "syscall", - "syscall.DNS_TYPE_NIMLOC": "syscall", - "syscall.DNS_TYPE_NS": "syscall", - "syscall.DNS_TYPE_NSAP": "syscall", - "syscall.DNS_TYPE_NSAPPTR": "syscall", - "syscall.DNS_TYPE_NSEC": "syscall", - "syscall.DNS_TYPE_NULL": "syscall", - "syscall.DNS_TYPE_NXT": "syscall", - "syscall.DNS_TYPE_OPT": "syscall", - "syscall.DNS_TYPE_PTR": "syscall", - "syscall.DNS_TYPE_PX": "syscall", - "syscall.DNS_TYPE_RP": "syscall", - "syscall.DNS_TYPE_RRSIG": "syscall", - "syscall.DNS_TYPE_RT": "syscall", - "syscall.DNS_TYPE_SIG": "syscall", - "syscall.DNS_TYPE_SINK": "syscall", - "syscall.DNS_TYPE_SOA": "syscall", - "syscall.DNS_TYPE_SRV": "syscall", - "syscall.DNS_TYPE_TEXT": "syscall", - "syscall.DNS_TYPE_TKEY": "syscall", - "syscall.DNS_TYPE_TSIG": "syscall", - "syscall.DNS_TYPE_UID": "syscall", - "syscall.DNS_TYPE_UINFO": "syscall", - "syscall.DNS_TYPE_UNSPEC": "syscall", - "syscall.DNS_TYPE_WINS": "syscall", - "syscall.DNS_TYPE_WINSR": "syscall", - "syscall.DNS_TYPE_WKS": "syscall", - "syscall.DNS_TYPE_X25": "syscall", - "syscall.DT_BLK": "syscall", - "syscall.DT_CHR": "syscall", - "syscall.DT_DIR": "syscall", - "syscall.DT_FIFO": "syscall", - "syscall.DT_LNK": "syscall", - "syscall.DT_REG": "syscall", - "syscall.DT_SOCK": "syscall", - "syscall.DT_UNKNOWN": "syscall", - "syscall.DT_WHT": "syscall", - "syscall.DUPLICATE_CLOSE_SOURCE": "syscall", - "syscall.DUPLICATE_SAME_ACCESS": "syscall", - "syscall.DeleteFile": "syscall", - "syscall.DetachLsf": "syscall", - "syscall.DeviceIoControl": "syscall", - "syscall.Dirent": "syscall", - "syscall.DnsNameCompare": "syscall", - "syscall.DnsQuery": "syscall", - "syscall.DnsRecordListFree": "syscall", - "syscall.DnsSectionAdditional": "syscall", - "syscall.DnsSectionAnswer": "syscall", - "syscall.DnsSectionAuthority": "syscall", - "syscall.DnsSectionQuestion": "syscall", - "syscall.Dup": "syscall", - "syscall.Dup2": "syscall", - "syscall.Dup3": "syscall", - "syscall.DuplicateHandle": "syscall", - "syscall.E2BIG": "syscall", - "syscall.EACCES": "syscall", - "syscall.EADDRINUSE": "syscall", - "syscall.EADDRNOTAVAIL": "syscall", - "syscall.EADV": "syscall", - "syscall.EAFNOSUPPORT": "syscall", - "syscall.EAGAIN": "syscall", - "syscall.EALREADY": "syscall", - "syscall.EAUTH": "syscall", - "syscall.EBADARCH": "syscall", - "syscall.EBADE": "syscall", - "syscall.EBADEXEC": "syscall", - "syscall.EBADF": "syscall", - "syscall.EBADFD": "syscall", - "syscall.EBADMACHO": "syscall", - "syscall.EBADMSG": "syscall", - "syscall.EBADR": "syscall", - "syscall.EBADRPC": "syscall", - "syscall.EBADRQC": "syscall", - "syscall.EBADSLT": "syscall", - "syscall.EBFONT": "syscall", - "syscall.EBUSY": "syscall", - "syscall.ECANCELED": "syscall", - "syscall.ECAPMODE": "syscall", - "syscall.ECHILD": "syscall", - "syscall.ECHO": "syscall", - "syscall.ECHOCTL": "syscall", - "syscall.ECHOE": "syscall", - "syscall.ECHOK": "syscall", - "syscall.ECHOKE": "syscall", - "syscall.ECHONL": "syscall", - "syscall.ECHOPRT": "syscall", - "syscall.ECHRNG": "syscall", - "syscall.ECOMM": "syscall", - "syscall.ECONNABORTED": "syscall", - "syscall.ECONNREFUSED": "syscall", - "syscall.ECONNRESET": "syscall", - "syscall.EDEADLK": "syscall", - "syscall.EDEADLOCK": "syscall", - "syscall.EDESTADDRREQ": "syscall", - "syscall.EDEVERR": "syscall", - "syscall.EDOM": "syscall", - "syscall.EDOOFUS": "syscall", - "syscall.EDOTDOT": "syscall", - "syscall.EDQUOT": "syscall", - "syscall.EEXIST": "syscall", - "syscall.EFAULT": "syscall", - "syscall.EFBIG": "syscall", - "syscall.EFER_LMA": "syscall", - "syscall.EFER_LME": "syscall", - "syscall.EFER_NXE": "syscall", - "syscall.EFER_SCE": "syscall", - "syscall.EFTYPE": "syscall", - "syscall.EHOSTDOWN": "syscall", - "syscall.EHOSTUNREACH": "syscall", - "syscall.EHWPOISON": "syscall", - "syscall.EIDRM": "syscall", - "syscall.EILSEQ": "syscall", - "syscall.EINPROGRESS": "syscall", - "syscall.EINTR": "syscall", - "syscall.EINVAL": "syscall", - "syscall.EIO": "syscall", - "syscall.EIPSEC": "syscall", - "syscall.EISCONN": "syscall", - "syscall.EISDIR": "syscall", - "syscall.EISNAM": "syscall", - "syscall.EKEYEXPIRED": "syscall", - "syscall.EKEYREJECTED": "syscall", - "syscall.EKEYREVOKED": "syscall", - "syscall.EL2HLT": "syscall", - "syscall.EL2NSYNC": "syscall", - "syscall.EL3HLT": "syscall", - "syscall.EL3RST": "syscall", - "syscall.ELAST": "syscall", - "syscall.ELF_NGREG": "syscall", - "syscall.ELF_PRARGSZ": "syscall", - "syscall.ELIBACC": "syscall", - "syscall.ELIBBAD": "syscall", - "syscall.ELIBEXEC": "syscall", - "syscall.ELIBMAX": "syscall", - "syscall.ELIBSCN": "syscall", - "syscall.ELNRNG": "syscall", - "syscall.ELOOP": "syscall", - "syscall.EMEDIUMTYPE": "syscall", - "syscall.EMFILE": "syscall", - "syscall.EMLINK": "syscall", - "syscall.EMSGSIZE": "syscall", - "syscall.EMT_TAGOVF": "syscall", - "syscall.EMULTIHOP": "syscall", - "syscall.EMUL_ENABLED": "syscall", - "syscall.EMUL_LINUX": "syscall", - "syscall.EMUL_LINUX32": "syscall", - "syscall.EMUL_MAXID": "syscall", - "syscall.EMUL_NATIVE": "syscall", - "syscall.ENAMETOOLONG": "syscall", - "syscall.ENAVAIL": "syscall", - "syscall.ENDRUNDISC": "syscall", - "syscall.ENEEDAUTH": "syscall", - "syscall.ENETDOWN": "syscall", - "syscall.ENETRESET": "syscall", - "syscall.ENETUNREACH": "syscall", - "syscall.ENFILE": "syscall", - "syscall.ENOANO": "syscall", - "syscall.ENOATTR": "syscall", - "syscall.ENOBUFS": "syscall", - "syscall.ENOCSI": "syscall", - "syscall.ENODATA": "syscall", - "syscall.ENODEV": "syscall", - "syscall.ENOENT": "syscall", - "syscall.ENOEXEC": "syscall", - "syscall.ENOKEY": "syscall", - "syscall.ENOLCK": "syscall", - "syscall.ENOLINK": "syscall", - "syscall.ENOMEDIUM": "syscall", - "syscall.ENOMEM": "syscall", - "syscall.ENOMSG": "syscall", - "syscall.ENONET": "syscall", - "syscall.ENOPKG": "syscall", - "syscall.ENOPOLICY": "syscall", - "syscall.ENOPROTOOPT": "syscall", - "syscall.ENOSPC": "syscall", - "syscall.ENOSR": "syscall", - "syscall.ENOSTR": "syscall", - "syscall.ENOSYS": "syscall", - "syscall.ENOTBLK": "syscall", - "syscall.ENOTCAPABLE": "syscall", - "syscall.ENOTCONN": "syscall", - "syscall.ENOTDIR": "syscall", - "syscall.ENOTEMPTY": "syscall", - "syscall.ENOTNAM": "syscall", - "syscall.ENOTRECOVERABLE": "syscall", - "syscall.ENOTSOCK": "syscall", - "syscall.ENOTSUP": "syscall", - "syscall.ENOTTY": "syscall", - "syscall.ENOTUNIQ": "syscall", - "syscall.ENXIO": "syscall", - "syscall.EN_SW_CTL_INF": "syscall", - "syscall.EN_SW_CTL_PREC": "syscall", - "syscall.EN_SW_CTL_ROUND": "syscall", - "syscall.EN_SW_DATACHAIN": "syscall", - "syscall.EN_SW_DENORM": "syscall", - "syscall.EN_SW_INVOP": "syscall", - "syscall.EN_SW_OVERFLOW": "syscall", - "syscall.EN_SW_PRECLOSS": "syscall", - "syscall.EN_SW_UNDERFLOW": "syscall", - "syscall.EN_SW_ZERODIV": "syscall", - "syscall.EOPNOTSUPP": "syscall", - "syscall.EOVERFLOW": "syscall", - "syscall.EOWNERDEAD": "syscall", - "syscall.EPERM": "syscall", - "syscall.EPFNOSUPPORT": "syscall", - "syscall.EPIPE": "syscall", - "syscall.EPOLLERR": "syscall", - "syscall.EPOLLET": "syscall", - "syscall.EPOLLHUP": "syscall", - "syscall.EPOLLIN": "syscall", - "syscall.EPOLLMSG": "syscall", - "syscall.EPOLLONESHOT": "syscall", - "syscall.EPOLLOUT": "syscall", - "syscall.EPOLLPRI": "syscall", - "syscall.EPOLLRDBAND": "syscall", - "syscall.EPOLLRDHUP": "syscall", - "syscall.EPOLLRDNORM": "syscall", - "syscall.EPOLLWRBAND": "syscall", - "syscall.EPOLLWRNORM": "syscall", - "syscall.EPOLL_CLOEXEC": "syscall", - "syscall.EPOLL_CTL_ADD": "syscall", - "syscall.EPOLL_CTL_DEL": "syscall", - "syscall.EPOLL_CTL_MOD": "syscall", - "syscall.EPOLL_NONBLOCK": "syscall", - "syscall.EPROCLIM": "syscall", - "syscall.EPROCUNAVAIL": "syscall", - "syscall.EPROGMISMATCH": "syscall", - "syscall.EPROGUNAVAIL": "syscall", - "syscall.EPROTO": "syscall", - "syscall.EPROTONOSUPPORT": "syscall", - "syscall.EPROTOTYPE": "syscall", - "syscall.EPWROFF": "syscall", - "syscall.ERANGE": "syscall", - "syscall.EREMCHG": "syscall", - "syscall.EREMOTE": "syscall", - "syscall.EREMOTEIO": "syscall", - "syscall.ERESTART": "syscall", - "syscall.ERFKILL": "syscall", - "syscall.EROFS": "syscall", - "syscall.ERPCMISMATCH": "syscall", - "syscall.ERROR_ACCESS_DENIED": "syscall", - "syscall.ERROR_ALREADY_EXISTS": "syscall", - "syscall.ERROR_BROKEN_PIPE": "syscall", - "syscall.ERROR_BUFFER_OVERFLOW": "syscall", - "syscall.ERROR_DIR_NOT_EMPTY": "syscall", - "syscall.ERROR_ENVVAR_NOT_FOUND": "syscall", - "syscall.ERROR_FILE_EXISTS": "syscall", - "syscall.ERROR_FILE_NOT_FOUND": "syscall", - "syscall.ERROR_HANDLE_EOF": "syscall", - "syscall.ERROR_INSUFFICIENT_BUFFER": "syscall", - "syscall.ERROR_IO_PENDING": "syscall", - "syscall.ERROR_MOD_NOT_FOUND": "syscall", - "syscall.ERROR_MORE_DATA": "syscall", - "syscall.ERROR_NETNAME_DELETED": "syscall", - "syscall.ERROR_NOT_FOUND": "syscall", - "syscall.ERROR_NO_MORE_FILES": "syscall", - "syscall.ERROR_OPERATION_ABORTED": "syscall", - "syscall.ERROR_PATH_NOT_FOUND": "syscall", - "syscall.ERROR_PRIVILEGE_NOT_HELD": "syscall", - "syscall.ERROR_PROC_NOT_FOUND": "syscall", - "syscall.ESHLIBVERS": "syscall", - "syscall.ESHUTDOWN": "syscall", - "syscall.ESOCKTNOSUPPORT": "syscall", - "syscall.ESPIPE": "syscall", - "syscall.ESRCH": "syscall", - "syscall.ESRMNT": "syscall", - "syscall.ESTALE": "syscall", - "syscall.ESTRPIPE": "syscall", - "syscall.ETHERCAP_JUMBO_MTU": "syscall", - "syscall.ETHERCAP_VLAN_HWTAGGING": "syscall", - "syscall.ETHERCAP_VLAN_MTU": "syscall", - "syscall.ETHERMIN": "syscall", - "syscall.ETHERMTU": "syscall", - "syscall.ETHERMTU_JUMBO": "syscall", - "syscall.ETHERTYPE_8023": "syscall", - "syscall.ETHERTYPE_AARP": "syscall", - "syscall.ETHERTYPE_ACCTON": "syscall", - "syscall.ETHERTYPE_AEONIC": "syscall", - "syscall.ETHERTYPE_ALPHA": "syscall", - "syscall.ETHERTYPE_AMBER": "syscall", - "syscall.ETHERTYPE_AMOEBA": "syscall", - "syscall.ETHERTYPE_AOE": "syscall", - "syscall.ETHERTYPE_APOLLO": "syscall", - "syscall.ETHERTYPE_APOLLODOMAIN": "syscall", - "syscall.ETHERTYPE_APPLETALK": "syscall", - "syscall.ETHERTYPE_APPLITEK": "syscall", - "syscall.ETHERTYPE_ARGONAUT": "syscall", - "syscall.ETHERTYPE_ARP": "syscall", - "syscall.ETHERTYPE_AT": "syscall", - "syscall.ETHERTYPE_ATALK": "syscall", - "syscall.ETHERTYPE_ATOMIC": "syscall", - "syscall.ETHERTYPE_ATT": "syscall", - "syscall.ETHERTYPE_ATTSTANFORD": "syscall", - "syscall.ETHERTYPE_AUTOPHON": "syscall", - "syscall.ETHERTYPE_AXIS": "syscall", - "syscall.ETHERTYPE_BCLOOP": "syscall", - "syscall.ETHERTYPE_BOFL": "syscall", - "syscall.ETHERTYPE_CABLETRON": "syscall", - "syscall.ETHERTYPE_CHAOS": "syscall", - "syscall.ETHERTYPE_COMDESIGN": "syscall", - "syscall.ETHERTYPE_COMPUGRAPHIC": "syscall", - "syscall.ETHERTYPE_COUNTERPOINT": "syscall", - "syscall.ETHERTYPE_CRONUS": "syscall", - "syscall.ETHERTYPE_CRONUSVLN": "syscall", - "syscall.ETHERTYPE_DCA": "syscall", - "syscall.ETHERTYPE_DDE": "syscall", - "syscall.ETHERTYPE_DEBNI": "syscall", - "syscall.ETHERTYPE_DECAM": "syscall", - "syscall.ETHERTYPE_DECCUST": "syscall", - "syscall.ETHERTYPE_DECDIAG": "syscall", - "syscall.ETHERTYPE_DECDNS": "syscall", - "syscall.ETHERTYPE_DECDTS": "syscall", - "syscall.ETHERTYPE_DECEXPER": "syscall", - "syscall.ETHERTYPE_DECLAST": "syscall", - "syscall.ETHERTYPE_DECLTM": "syscall", - "syscall.ETHERTYPE_DECMUMPS": "syscall", - "syscall.ETHERTYPE_DECNETBIOS": "syscall", - "syscall.ETHERTYPE_DELTACON": "syscall", - "syscall.ETHERTYPE_DIDDLE": "syscall", - "syscall.ETHERTYPE_DLOG1": "syscall", - "syscall.ETHERTYPE_DLOG2": "syscall", - "syscall.ETHERTYPE_DN": "syscall", - "syscall.ETHERTYPE_DOGFIGHT": "syscall", - "syscall.ETHERTYPE_DSMD": "syscall", - "syscall.ETHERTYPE_ECMA": "syscall", - "syscall.ETHERTYPE_ENCRYPT": "syscall", - "syscall.ETHERTYPE_ES": "syscall", - "syscall.ETHERTYPE_EXCELAN": "syscall", - "syscall.ETHERTYPE_EXPERDATA": "syscall", - "syscall.ETHERTYPE_FLIP": "syscall", - "syscall.ETHERTYPE_FLOWCONTROL": "syscall", - "syscall.ETHERTYPE_FRARP": "syscall", - "syscall.ETHERTYPE_GENDYN": "syscall", - "syscall.ETHERTYPE_HAYES": "syscall", - "syscall.ETHERTYPE_HIPPI_FP": "syscall", - "syscall.ETHERTYPE_HITACHI": "syscall", - "syscall.ETHERTYPE_HP": "syscall", - "syscall.ETHERTYPE_IEEEPUP": "syscall", - "syscall.ETHERTYPE_IEEEPUPAT": "syscall", - "syscall.ETHERTYPE_IMLBL": "syscall", - "syscall.ETHERTYPE_IMLBLDIAG": "syscall", - "syscall.ETHERTYPE_IP": "syscall", - "syscall.ETHERTYPE_IPAS": "syscall", - "syscall.ETHERTYPE_IPV6": "syscall", - "syscall.ETHERTYPE_IPX": "syscall", - "syscall.ETHERTYPE_IPXNEW": "syscall", - "syscall.ETHERTYPE_KALPANA": "syscall", - "syscall.ETHERTYPE_LANBRIDGE": "syscall", - "syscall.ETHERTYPE_LANPROBE": "syscall", - "syscall.ETHERTYPE_LAT": "syscall", - "syscall.ETHERTYPE_LBACK": "syscall", - "syscall.ETHERTYPE_LITTLE": "syscall", - "syscall.ETHERTYPE_LLDP": "syscall", - "syscall.ETHERTYPE_LOGICRAFT": "syscall", - "syscall.ETHERTYPE_LOOPBACK": "syscall", - "syscall.ETHERTYPE_MATRA": "syscall", - "syscall.ETHERTYPE_MAX": "syscall", - "syscall.ETHERTYPE_MERIT": "syscall", - "syscall.ETHERTYPE_MICP": "syscall", - "syscall.ETHERTYPE_MOPDL": "syscall", - "syscall.ETHERTYPE_MOPRC": "syscall", - "syscall.ETHERTYPE_MOTOROLA": "syscall", - "syscall.ETHERTYPE_MPLS": "syscall", - "syscall.ETHERTYPE_MPLS_MCAST": "syscall", - "syscall.ETHERTYPE_MUMPS": "syscall", - "syscall.ETHERTYPE_NBPCC": "syscall", - "syscall.ETHERTYPE_NBPCLAIM": "syscall", - "syscall.ETHERTYPE_NBPCLREQ": "syscall", - "syscall.ETHERTYPE_NBPCLRSP": "syscall", - "syscall.ETHERTYPE_NBPCREQ": "syscall", - "syscall.ETHERTYPE_NBPCRSP": "syscall", - "syscall.ETHERTYPE_NBPDG": "syscall", - "syscall.ETHERTYPE_NBPDGB": "syscall", - "syscall.ETHERTYPE_NBPDLTE": "syscall", - "syscall.ETHERTYPE_NBPRAR": "syscall", - "syscall.ETHERTYPE_NBPRAS": "syscall", - "syscall.ETHERTYPE_NBPRST": "syscall", - "syscall.ETHERTYPE_NBPSCD": "syscall", - "syscall.ETHERTYPE_NBPVCD": "syscall", - "syscall.ETHERTYPE_NBS": "syscall", - "syscall.ETHERTYPE_NCD": "syscall", - "syscall.ETHERTYPE_NESTAR": "syscall", - "syscall.ETHERTYPE_NETBEUI": "syscall", - "syscall.ETHERTYPE_NOVELL": "syscall", - "syscall.ETHERTYPE_NS": "syscall", - "syscall.ETHERTYPE_NSAT": "syscall", - "syscall.ETHERTYPE_NSCOMPAT": "syscall", - "syscall.ETHERTYPE_NTRAILER": "syscall", - "syscall.ETHERTYPE_OS9": "syscall", - "syscall.ETHERTYPE_OS9NET": "syscall", - "syscall.ETHERTYPE_PACER": "syscall", - "syscall.ETHERTYPE_PAE": "syscall", - "syscall.ETHERTYPE_PCS": "syscall", - "syscall.ETHERTYPE_PLANNING": "syscall", - "syscall.ETHERTYPE_PPP": "syscall", - "syscall.ETHERTYPE_PPPOE": "syscall", - "syscall.ETHERTYPE_PPPOEDISC": "syscall", - "syscall.ETHERTYPE_PRIMENTS": "syscall", - "syscall.ETHERTYPE_PUP": "syscall", - "syscall.ETHERTYPE_PUPAT": "syscall", - "syscall.ETHERTYPE_QINQ": "syscall", - "syscall.ETHERTYPE_RACAL": "syscall", - "syscall.ETHERTYPE_RATIONAL": "syscall", - "syscall.ETHERTYPE_RAWFR": "syscall", - "syscall.ETHERTYPE_RCL": "syscall", - "syscall.ETHERTYPE_RDP": "syscall", - "syscall.ETHERTYPE_RETIX": "syscall", - "syscall.ETHERTYPE_REVARP": "syscall", - "syscall.ETHERTYPE_SCA": "syscall", - "syscall.ETHERTYPE_SECTRA": "syscall", - "syscall.ETHERTYPE_SECUREDATA": "syscall", - "syscall.ETHERTYPE_SGITW": "syscall", - "syscall.ETHERTYPE_SG_BOUNCE": "syscall", - "syscall.ETHERTYPE_SG_DIAG": "syscall", - "syscall.ETHERTYPE_SG_NETGAMES": "syscall", - "syscall.ETHERTYPE_SG_RESV": "syscall", - "syscall.ETHERTYPE_SIMNET": "syscall", - "syscall.ETHERTYPE_SLOW": "syscall", - "syscall.ETHERTYPE_SLOWPROTOCOLS": "syscall", - "syscall.ETHERTYPE_SNA": "syscall", - "syscall.ETHERTYPE_SNMP": "syscall", - "syscall.ETHERTYPE_SONIX": "syscall", - "syscall.ETHERTYPE_SPIDER": "syscall", - "syscall.ETHERTYPE_SPRITE": "syscall", - "syscall.ETHERTYPE_STP": "syscall", - "syscall.ETHERTYPE_TALARIS": "syscall", - "syscall.ETHERTYPE_TALARISMC": "syscall", - "syscall.ETHERTYPE_TCPCOMP": "syscall", - "syscall.ETHERTYPE_TCPSM": "syscall", - "syscall.ETHERTYPE_TEC": "syscall", - "syscall.ETHERTYPE_TIGAN": "syscall", - "syscall.ETHERTYPE_TRAIL": "syscall", - "syscall.ETHERTYPE_TRANSETHER": "syscall", - "syscall.ETHERTYPE_TYMSHARE": "syscall", - "syscall.ETHERTYPE_UBBST": "syscall", - "syscall.ETHERTYPE_UBDEBUG": "syscall", - "syscall.ETHERTYPE_UBDIAGLOOP": "syscall", - "syscall.ETHERTYPE_UBDL": "syscall", - "syscall.ETHERTYPE_UBNIU": "syscall", - "syscall.ETHERTYPE_UBNMC": "syscall", - "syscall.ETHERTYPE_VALID": "syscall", - "syscall.ETHERTYPE_VARIAN": "syscall", - "syscall.ETHERTYPE_VAXELN": "syscall", - "syscall.ETHERTYPE_VEECO": "syscall", - "syscall.ETHERTYPE_VEXP": "syscall", - "syscall.ETHERTYPE_VGLAB": "syscall", - "syscall.ETHERTYPE_VINES": "syscall", - "syscall.ETHERTYPE_VINESECHO": "syscall", - "syscall.ETHERTYPE_VINESLOOP": "syscall", - "syscall.ETHERTYPE_VITAL": "syscall", - "syscall.ETHERTYPE_VLAN": "syscall", - "syscall.ETHERTYPE_VLTLMAN": "syscall", - "syscall.ETHERTYPE_VPROD": "syscall", - "syscall.ETHERTYPE_VURESERVED": "syscall", - "syscall.ETHERTYPE_WATERLOO": "syscall", - "syscall.ETHERTYPE_WELLFLEET": "syscall", - "syscall.ETHERTYPE_X25": "syscall", - "syscall.ETHERTYPE_X75": "syscall", - "syscall.ETHERTYPE_XNSSM": "syscall", - "syscall.ETHERTYPE_XTP": "syscall", - "syscall.ETHER_ADDR_LEN": "syscall", - "syscall.ETHER_ALIGN": "syscall", - "syscall.ETHER_CRC_LEN": "syscall", - "syscall.ETHER_CRC_POLY_BE": "syscall", - "syscall.ETHER_CRC_POLY_LE": "syscall", - "syscall.ETHER_HDR_LEN": "syscall", - "syscall.ETHER_MAX_DIX_LEN": "syscall", - "syscall.ETHER_MAX_LEN": "syscall", - "syscall.ETHER_MAX_LEN_JUMBO": "syscall", - "syscall.ETHER_MIN_LEN": "syscall", - "syscall.ETHER_PPPOE_ENCAP_LEN": "syscall", - "syscall.ETHER_TYPE_LEN": "syscall", - "syscall.ETHER_VLAN_ENCAP_LEN": "syscall", - "syscall.ETH_P_1588": "syscall", - "syscall.ETH_P_8021Q": "syscall", - "syscall.ETH_P_802_2": "syscall", - "syscall.ETH_P_802_3": "syscall", - "syscall.ETH_P_AARP": "syscall", - "syscall.ETH_P_ALL": "syscall", - "syscall.ETH_P_AOE": "syscall", - "syscall.ETH_P_ARCNET": "syscall", - "syscall.ETH_P_ARP": "syscall", - "syscall.ETH_P_ATALK": "syscall", - "syscall.ETH_P_ATMFATE": "syscall", - "syscall.ETH_P_ATMMPOA": "syscall", - "syscall.ETH_P_AX25": "syscall", - "syscall.ETH_P_BPQ": "syscall", - "syscall.ETH_P_CAIF": "syscall", - "syscall.ETH_P_CAN": "syscall", - "syscall.ETH_P_CONTROL": "syscall", - "syscall.ETH_P_CUST": "syscall", - "syscall.ETH_P_DDCMP": "syscall", - "syscall.ETH_P_DEC": "syscall", - "syscall.ETH_P_DIAG": "syscall", - "syscall.ETH_P_DNA_DL": "syscall", - "syscall.ETH_P_DNA_RC": "syscall", - "syscall.ETH_P_DNA_RT": "syscall", - "syscall.ETH_P_DSA": "syscall", - "syscall.ETH_P_ECONET": "syscall", - "syscall.ETH_P_EDSA": "syscall", - "syscall.ETH_P_FCOE": "syscall", - "syscall.ETH_P_FIP": "syscall", - "syscall.ETH_P_HDLC": "syscall", - "syscall.ETH_P_IEEE802154": "syscall", - "syscall.ETH_P_IEEEPUP": "syscall", - "syscall.ETH_P_IEEEPUPAT": "syscall", - "syscall.ETH_P_IP": "syscall", - "syscall.ETH_P_IPV6": "syscall", - "syscall.ETH_P_IPX": "syscall", - "syscall.ETH_P_IRDA": "syscall", - "syscall.ETH_P_LAT": "syscall", - "syscall.ETH_P_LINK_CTL": "syscall", - "syscall.ETH_P_LOCALTALK": "syscall", - "syscall.ETH_P_LOOP": "syscall", - "syscall.ETH_P_MOBITEX": "syscall", - "syscall.ETH_P_MPLS_MC": "syscall", - "syscall.ETH_P_MPLS_UC": "syscall", - "syscall.ETH_P_PAE": "syscall", - "syscall.ETH_P_PAUSE": "syscall", - "syscall.ETH_P_PHONET": "syscall", - "syscall.ETH_P_PPPTALK": "syscall", - "syscall.ETH_P_PPP_DISC": "syscall", - "syscall.ETH_P_PPP_MP": "syscall", - "syscall.ETH_P_PPP_SES": "syscall", - "syscall.ETH_P_PUP": "syscall", - "syscall.ETH_P_PUPAT": "syscall", - "syscall.ETH_P_RARP": "syscall", - "syscall.ETH_P_SCA": "syscall", - "syscall.ETH_P_SLOW": "syscall", - "syscall.ETH_P_SNAP": "syscall", - "syscall.ETH_P_TEB": "syscall", - "syscall.ETH_P_TIPC": "syscall", - "syscall.ETH_P_TRAILER": "syscall", - "syscall.ETH_P_TR_802_2": "syscall", - "syscall.ETH_P_WAN_PPP": "syscall", - "syscall.ETH_P_WCCP": "syscall", - "syscall.ETH_P_X25": "syscall", - "syscall.ETIME": "syscall", - "syscall.ETIMEDOUT": "syscall", - "syscall.ETOOMANYREFS": "syscall", - "syscall.ETXTBSY": "syscall", - "syscall.EUCLEAN": "syscall", - "syscall.EUNATCH": "syscall", - "syscall.EUSERS": "syscall", - "syscall.EVFILT_AIO": "syscall", - "syscall.EVFILT_FS": "syscall", - "syscall.EVFILT_LIO": "syscall", - "syscall.EVFILT_MACHPORT": "syscall", - "syscall.EVFILT_PROC": "syscall", - "syscall.EVFILT_READ": "syscall", - "syscall.EVFILT_SIGNAL": "syscall", - "syscall.EVFILT_SYSCOUNT": "syscall", - "syscall.EVFILT_THREADMARKER": "syscall", - "syscall.EVFILT_TIMER": "syscall", - "syscall.EVFILT_USER": "syscall", - "syscall.EVFILT_VM": "syscall", - "syscall.EVFILT_VNODE": "syscall", - "syscall.EVFILT_WRITE": "syscall", - "syscall.EV_ADD": "syscall", - "syscall.EV_CLEAR": "syscall", - "syscall.EV_DELETE": "syscall", - "syscall.EV_DISABLE": "syscall", - "syscall.EV_DISPATCH": "syscall", - "syscall.EV_DROP": "syscall", - "syscall.EV_ENABLE": "syscall", - "syscall.EV_EOF": "syscall", - "syscall.EV_ERROR": "syscall", - "syscall.EV_FLAG0": "syscall", - "syscall.EV_FLAG1": "syscall", - "syscall.EV_ONESHOT": "syscall", - "syscall.EV_OOBAND": "syscall", - "syscall.EV_POLL": "syscall", - "syscall.EV_RECEIPT": "syscall", - "syscall.EV_SYSFLAGS": "syscall", - "syscall.EWINDOWS": "syscall", - "syscall.EWOULDBLOCK": "syscall", - "syscall.EXDEV": "syscall", - "syscall.EXFULL": "syscall", - "syscall.EXTA": "syscall", - "syscall.EXTB": "syscall", - "syscall.EXTPROC": "syscall", - "syscall.Environ": "syscall", - "syscall.EpollCreate": "syscall", - "syscall.EpollCreate1": "syscall", - "syscall.EpollCtl": "syscall", - "syscall.EpollEvent": "syscall", - "syscall.EpollWait": "syscall", - "syscall.Errno": "syscall", - "syscall.EscapeArg": "syscall", - "syscall.Exchangedata": "syscall", - "syscall.Exec": "syscall", - "syscall.Exit": "syscall", - "syscall.ExitProcess": "syscall", - "syscall.FD_CLOEXEC": "syscall", - "syscall.FD_SETSIZE": "syscall", - "syscall.FILE_ACTION_ADDED": "syscall", - "syscall.FILE_ACTION_MODIFIED": "syscall", - "syscall.FILE_ACTION_REMOVED": "syscall", - "syscall.FILE_ACTION_RENAMED_NEW_NAME": "syscall", - "syscall.FILE_ACTION_RENAMED_OLD_NAME": "syscall", - "syscall.FILE_APPEND_DATA": "syscall", - "syscall.FILE_ATTRIBUTE_ARCHIVE": "syscall", - "syscall.FILE_ATTRIBUTE_DIRECTORY": "syscall", - "syscall.FILE_ATTRIBUTE_HIDDEN": "syscall", - "syscall.FILE_ATTRIBUTE_NORMAL": "syscall", - "syscall.FILE_ATTRIBUTE_READONLY": "syscall", - "syscall.FILE_ATTRIBUTE_REPARSE_POINT": "syscall", - "syscall.FILE_ATTRIBUTE_SYSTEM": "syscall", - "syscall.FILE_BEGIN": "syscall", - "syscall.FILE_CURRENT": "syscall", - "syscall.FILE_END": "syscall", - "syscall.FILE_FLAG_BACKUP_SEMANTICS": "syscall", - "syscall.FILE_FLAG_OPEN_REPARSE_POINT": "syscall", - "syscall.FILE_FLAG_OVERLAPPED": "syscall", - "syscall.FILE_LIST_DIRECTORY": "syscall", - "syscall.FILE_MAP_COPY": "syscall", - "syscall.FILE_MAP_EXECUTE": "syscall", - "syscall.FILE_MAP_READ": "syscall", - "syscall.FILE_MAP_WRITE": "syscall", - "syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES": "syscall", - "syscall.FILE_NOTIFY_CHANGE_CREATION": "syscall", - "syscall.FILE_NOTIFY_CHANGE_DIR_NAME": "syscall", - "syscall.FILE_NOTIFY_CHANGE_FILE_NAME": "syscall", - "syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS": "syscall", - "syscall.FILE_NOTIFY_CHANGE_LAST_WRITE": "syscall", - "syscall.FILE_NOTIFY_CHANGE_SIZE": "syscall", - "syscall.FILE_SHARE_DELETE": "syscall", - "syscall.FILE_SHARE_READ": "syscall", - "syscall.FILE_SHARE_WRITE": "syscall", - "syscall.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS": "syscall", - "syscall.FILE_SKIP_SET_EVENT_ON_HANDLE": "syscall", - "syscall.FILE_TYPE_CHAR": "syscall", - "syscall.FILE_TYPE_DISK": "syscall", - "syscall.FILE_TYPE_PIPE": "syscall", - "syscall.FILE_TYPE_REMOTE": "syscall", - "syscall.FILE_TYPE_UNKNOWN": "syscall", - "syscall.FILE_WRITE_ATTRIBUTES": "syscall", - "syscall.FLUSHO": "syscall", - "syscall.FORMAT_MESSAGE_ALLOCATE_BUFFER": "syscall", - "syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY": "syscall", - "syscall.FORMAT_MESSAGE_FROM_HMODULE": "syscall", - "syscall.FORMAT_MESSAGE_FROM_STRING": "syscall", - "syscall.FORMAT_MESSAGE_FROM_SYSTEM": "syscall", - "syscall.FORMAT_MESSAGE_IGNORE_INSERTS": "syscall", - "syscall.FORMAT_MESSAGE_MAX_WIDTH_MASK": "syscall", - "syscall.FSCTL_GET_REPARSE_POINT": "syscall", - "syscall.F_ADDFILESIGS": "syscall", - "syscall.F_ADDSIGS": "syscall", - "syscall.F_ALLOCATEALL": "syscall", - "syscall.F_ALLOCATECONTIG": "syscall", - "syscall.F_CANCEL": "syscall", - "syscall.F_CHKCLEAN": "syscall", - "syscall.F_CLOSEM": "syscall", - "syscall.F_DUP2FD": "syscall", - "syscall.F_DUP2FD_CLOEXEC": "syscall", - "syscall.F_DUPFD": "syscall", - "syscall.F_DUPFD_CLOEXEC": "syscall", - "syscall.F_EXLCK": "syscall", - "syscall.F_FLUSH_DATA": "syscall", - "syscall.F_FREEZE_FS": "syscall", - "syscall.F_FSCTL": "syscall", - "syscall.F_FSDIRMASK": "syscall", - "syscall.F_FSIN": "syscall", - "syscall.F_FSINOUT": "syscall", - "syscall.F_FSOUT": "syscall", - "syscall.F_FSPRIV": "syscall", - "syscall.F_FSVOID": "syscall", - "syscall.F_FULLFSYNC": "syscall", - "syscall.F_GETFD": "syscall", - "syscall.F_GETFL": "syscall", - "syscall.F_GETLEASE": "syscall", - "syscall.F_GETLK": "syscall", - "syscall.F_GETLK64": "syscall", - "syscall.F_GETLKPID": "syscall", - "syscall.F_GETNOSIGPIPE": "syscall", - "syscall.F_GETOWN": "syscall", - "syscall.F_GETOWN_EX": "syscall", - "syscall.F_GETPATH": "syscall", - "syscall.F_GETPATH_MTMINFO": "syscall", - "syscall.F_GETPIPE_SZ": "syscall", - "syscall.F_GETPROTECTIONCLASS": "syscall", - "syscall.F_GETSIG": "syscall", - "syscall.F_GLOBAL_NOCACHE": "syscall", - "syscall.F_LOCK": "syscall", - "syscall.F_LOG2PHYS": "syscall", - "syscall.F_LOG2PHYS_EXT": "syscall", - "syscall.F_MARKDEPENDENCY": "syscall", - "syscall.F_MAXFD": "syscall", - "syscall.F_NOCACHE": "syscall", - "syscall.F_NODIRECT": "syscall", - "syscall.F_NOTIFY": "syscall", - "syscall.F_OGETLK": "syscall", - "syscall.F_OK": "syscall", - "syscall.F_OSETLK": "syscall", - "syscall.F_OSETLKW": "syscall", - "syscall.F_PARAM_MASK": "syscall", - "syscall.F_PARAM_MAX": "syscall", - "syscall.F_PATHPKG_CHECK": "syscall", - "syscall.F_PEOFPOSMODE": "syscall", - "syscall.F_PREALLOCATE": "syscall", - "syscall.F_RDADVISE": "syscall", - "syscall.F_RDAHEAD": "syscall", - "syscall.F_RDLCK": "syscall", - "syscall.F_READAHEAD": "syscall", - "syscall.F_READBOOTSTRAP": "syscall", - "syscall.F_SETBACKINGSTORE": "syscall", - "syscall.F_SETFD": "syscall", - "syscall.F_SETFL": "syscall", - "syscall.F_SETLEASE": "syscall", - "syscall.F_SETLK": "syscall", - "syscall.F_SETLK64": "syscall", - "syscall.F_SETLKW": "syscall", - "syscall.F_SETLKW64": "syscall", - "syscall.F_SETLK_REMOTE": "syscall", - "syscall.F_SETNOSIGPIPE": "syscall", - "syscall.F_SETOWN": "syscall", - "syscall.F_SETOWN_EX": "syscall", - "syscall.F_SETPIPE_SZ": "syscall", - "syscall.F_SETPROTECTIONCLASS": "syscall", - "syscall.F_SETSIG": "syscall", - "syscall.F_SETSIZE": "syscall", - "syscall.F_SHLCK": "syscall", - "syscall.F_TEST": "syscall", - "syscall.F_THAW_FS": "syscall", - "syscall.F_TLOCK": "syscall", - "syscall.F_ULOCK": "syscall", - "syscall.F_UNLCK": "syscall", - "syscall.F_UNLCKSYS": "syscall", - "syscall.F_VOLPOSMODE": "syscall", - "syscall.F_WRITEBOOTSTRAP": "syscall", - "syscall.F_WRLCK": "syscall", - "syscall.Faccessat": "syscall", - "syscall.Fallocate": "syscall", - "syscall.Fbootstraptransfer_t": "syscall", - "syscall.Fchdir": "syscall", - "syscall.Fchflags": "syscall", - "syscall.Fchmod": "syscall", - "syscall.Fchmodat": "syscall", - "syscall.Fchown": "syscall", - "syscall.Fchownat": "syscall", - "syscall.FcntlFlock": "syscall", - "syscall.FdSet": "syscall", - "syscall.Fdatasync": "syscall", - "syscall.FileNotifyInformation": "syscall", - "syscall.Filetime": "syscall", - "syscall.FindClose": "syscall", - "syscall.FindFirstFile": "syscall", - "syscall.FindNextFile": "syscall", - "syscall.Flock": "syscall", - "syscall.Flock_t": "syscall", - "syscall.FlushBpf": "syscall", - "syscall.FlushFileBuffers": "syscall", - "syscall.FlushViewOfFile": "syscall", - "syscall.ForkExec": "syscall", - "syscall.ForkLock": "syscall", - "syscall.FormatMessage": "syscall", - "syscall.Fpathconf": "syscall", - "syscall.FreeAddrInfoW": "syscall", - "syscall.FreeEnvironmentStrings": "syscall", - "syscall.FreeLibrary": "syscall", - "syscall.Fsid": "syscall", - "syscall.Fstat": "syscall", - "syscall.Fstatfs": "syscall", - "syscall.Fstore_t": "syscall", - "syscall.Fsync": "syscall", - "syscall.Ftruncate": "syscall", - "syscall.FullPath": "syscall", - "syscall.Futimes": "syscall", - "syscall.Futimesat": "syscall", - "syscall.GENERIC_ALL": "syscall", - "syscall.GENERIC_EXECUTE": "syscall", - "syscall.GENERIC_READ": "syscall", - "syscall.GENERIC_WRITE": "syscall", - "syscall.GUID": "syscall", - "syscall.GetAcceptExSockaddrs": "syscall", - "syscall.GetAdaptersInfo": "syscall", - "syscall.GetAddrInfoW": "syscall", - "syscall.GetCommandLine": "syscall", - "syscall.GetComputerName": "syscall", - "syscall.GetConsoleMode": "syscall", - "syscall.GetCurrentDirectory": "syscall", - "syscall.GetCurrentProcess": "syscall", - "syscall.GetEnvironmentStrings": "syscall", - "syscall.GetEnvironmentVariable": "syscall", - "syscall.GetExitCodeProcess": "syscall", - "syscall.GetFileAttributes": "syscall", - "syscall.GetFileAttributesEx": "syscall", - "syscall.GetFileExInfoStandard": "syscall", - "syscall.GetFileExMaxInfoLevel": "syscall", - "syscall.GetFileInformationByHandle": "syscall", - "syscall.GetFileType": "syscall", - "syscall.GetFullPathName": "syscall", - "syscall.GetHostByName": "syscall", - "syscall.GetIfEntry": "syscall", - "syscall.GetLastError": "syscall", - "syscall.GetLengthSid": "syscall", - "syscall.GetLongPathName": "syscall", - "syscall.GetProcAddress": "syscall", - "syscall.GetProcessTimes": "syscall", - "syscall.GetProtoByName": "syscall", - "syscall.GetQueuedCompletionStatus": "syscall", - "syscall.GetServByName": "syscall", - "syscall.GetShortPathName": "syscall", - "syscall.GetStartupInfo": "syscall", - "syscall.GetStdHandle": "syscall", - "syscall.GetSystemTimeAsFileTime": "syscall", - "syscall.GetTempPath": "syscall", - "syscall.GetTimeZoneInformation": "syscall", - "syscall.GetTokenInformation": "syscall", - "syscall.GetUserNameEx": "syscall", - "syscall.GetUserProfileDirectory": "syscall", - "syscall.GetVersion": "syscall", - "syscall.Getcwd": "syscall", - "syscall.Getdents": "syscall", - "syscall.Getdirentries": "syscall", - "syscall.Getdtablesize": "syscall", - "syscall.Getegid": "syscall", - "syscall.Getenv": "syscall", - "syscall.Geteuid": "syscall", - "syscall.Getfsstat": "syscall", - "syscall.Getgid": "syscall", - "syscall.Getgroups": "syscall", - "syscall.Getpagesize": "syscall", - "syscall.Getpeername": "syscall", - "syscall.Getpgid": "syscall", - "syscall.Getpgrp": "syscall", - "syscall.Getpid": "syscall", - "syscall.Getppid": "syscall", - "syscall.Getpriority": "syscall", - "syscall.Getrlimit": "syscall", - "syscall.Getrusage": "syscall", - "syscall.Getsid": "syscall", - "syscall.Getsockname": "syscall", - "syscall.Getsockopt": "syscall", - "syscall.GetsockoptByte": "syscall", - "syscall.GetsockoptICMPv6Filter": "syscall", - "syscall.GetsockoptIPMreq": "syscall", - "syscall.GetsockoptIPMreqn": "syscall", - "syscall.GetsockoptIPv6MTUInfo": "syscall", - "syscall.GetsockoptIPv6Mreq": "syscall", - "syscall.GetsockoptInet4Addr": "syscall", - "syscall.GetsockoptInt": "syscall", - "syscall.GetsockoptUcred": "syscall", - "syscall.Gettid": "syscall", - "syscall.Gettimeofday": "syscall", - "syscall.Getuid": "syscall", - "syscall.Getwd": "syscall", - "syscall.Getxattr": "syscall", - "syscall.HANDLE_FLAG_INHERIT": "syscall", - "syscall.HKEY_CLASSES_ROOT": "syscall", - "syscall.HKEY_CURRENT_CONFIG": "syscall", - "syscall.HKEY_CURRENT_USER": "syscall", - "syscall.HKEY_DYN_DATA": "syscall", - "syscall.HKEY_LOCAL_MACHINE": "syscall", - "syscall.HKEY_PERFORMANCE_DATA": "syscall", - "syscall.HKEY_USERS": "syscall", - "syscall.HUPCL": "syscall", - "syscall.Handle": "syscall", - "syscall.Hostent": "syscall", - "syscall.ICANON": "syscall", - "syscall.ICMP6_FILTER": "syscall", - "syscall.ICMPV6_FILTER": "syscall", - "syscall.ICMPv6Filter": "syscall", - "syscall.ICRNL": "syscall", - "syscall.IEXTEN": "syscall", - "syscall.IFAN_ARRIVAL": "syscall", - "syscall.IFAN_DEPARTURE": "syscall", - "syscall.IFA_ADDRESS": "syscall", - "syscall.IFA_ANYCAST": "syscall", - "syscall.IFA_BROADCAST": "syscall", - "syscall.IFA_CACHEINFO": "syscall", - "syscall.IFA_F_DADFAILED": "syscall", - "syscall.IFA_F_DEPRECATED": "syscall", - "syscall.IFA_F_HOMEADDRESS": "syscall", - "syscall.IFA_F_NODAD": "syscall", - "syscall.IFA_F_OPTIMISTIC": "syscall", - "syscall.IFA_F_PERMANENT": "syscall", - "syscall.IFA_F_SECONDARY": "syscall", - "syscall.IFA_F_TEMPORARY": "syscall", - "syscall.IFA_F_TENTATIVE": "syscall", - "syscall.IFA_LABEL": "syscall", - "syscall.IFA_LOCAL": "syscall", - "syscall.IFA_MAX": "syscall", - "syscall.IFA_MULTICAST": "syscall", - "syscall.IFA_ROUTE": "syscall", - "syscall.IFA_UNSPEC": "syscall", - "syscall.IFF_ALLMULTI": "syscall", - "syscall.IFF_ALTPHYS": "syscall", - "syscall.IFF_AUTOMEDIA": "syscall", - "syscall.IFF_BROADCAST": "syscall", - "syscall.IFF_CANTCHANGE": "syscall", - "syscall.IFF_CANTCONFIG": "syscall", - "syscall.IFF_DEBUG": "syscall", - "syscall.IFF_DRV_OACTIVE": "syscall", - "syscall.IFF_DRV_RUNNING": "syscall", - "syscall.IFF_DYING": "syscall", - "syscall.IFF_DYNAMIC": "syscall", - "syscall.IFF_LINK0": "syscall", - "syscall.IFF_LINK1": "syscall", - "syscall.IFF_LINK2": "syscall", - "syscall.IFF_LOOPBACK": "syscall", - "syscall.IFF_MASTER": "syscall", - "syscall.IFF_MONITOR": "syscall", - "syscall.IFF_MULTICAST": "syscall", - "syscall.IFF_NOARP": "syscall", - "syscall.IFF_NOTRAILERS": "syscall", - "syscall.IFF_NO_PI": "syscall", - "syscall.IFF_OACTIVE": "syscall", - "syscall.IFF_ONE_QUEUE": "syscall", - "syscall.IFF_POINTOPOINT": "syscall", - "syscall.IFF_POINTTOPOINT": "syscall", - "syscall.IFF_PORTSEL": "syscall", - "syscall.IFF_PPROMISC": "syscall", - "syscall.IFF_PROMISC": "syscall", - "syscall.IFF_RENAMING": "syscall", - "syscall.IFF_RUNNING": "syscall", - "syscall.IFF_SIMPLEX": "syscall", - "syscall.IFF_SLAVE": "syscall", - "syscall.IFF_SMART": "syscall", - "syscall.IFF_STATICARP": "syscall", - "syscall.IFF_TAP": "syscall", - "syscall.IFF_TUN": "syscall", - "syscall.IFF_TUN_EXCL": "syscall", - "syscall.IFF_UP": "syscall", - "syscall.IFF_VNET_HDR": "syscall", - "syscall.IFLA_ADDRESS": "syscall", - "syscall.IFLA_BROADCAST": "syscall", - "syscall.IFLA_COST": "syscall", - "syscall.IFLA_IFALIAS": "syscall", - "syscall.IFLA_IFNAME": "syscall", - "syscall.IFLA_LINK": "syscall", - "syscall.IFLA_LINKINFO": "syscall", - "syscall.IFLA_LINKMODE": "syscall", - "syscall.IFLA_MAP": "syscall", - "syscall.IFLA_MASTER": "syscall", - "syscall.IFLA_MAX": "syscall", - "syscall.IFLA_MTU": "syscall", - "syscall.IFLA_NET_NS_PID": "syscall", - "syscall.IFLA_OPERSTATE": "syscall", - "syscall.IFLA_PRIORITY": "syscall", - "syscall.IFLA_PROTINFO": "syscall", - "syscall.IFLA_QDISC": "syscall", - "syscall.IFLA_STATS": "syscall", - "syscall.IFLA_TXQLEN": "syscall", - "syscall.IFLA_UNSPEC": "syscall", - "syscall.IFLA_WEIGHT": "syscall", - "syscall.IFLA_WIRELESS": "syscall", - "syscall.IFNAMSIZ": "syscall", - "syscall.IFT_1822": "syscall", - "syscall.IFT_A12MPPSWITCH": "syscall", - "syscall.IFT_AAL2": "syscall", - "syscall.IFT_AAL5": "syscall", - "syscall.IFT_ADSL": "syscall", - "syscall.IFT_AFLANE8023": "syscall", - "syscall.IFT_AFLANE8025": "syscall", - "syscall.IFT_ARAP": "syscall", - "syscall.IFT_ARCNET": "syscall", - "syscall.IFT_ARCNETPLUS": "syscall", - "syscall.IFT_ASYNC": "syscall", - "syscall.IFT_ATM": "syscall", - "syscall.IFT_ATMDXI": "syscall", - "syscall.IFT_ATMFUNI": "syscall", - "syscall.IFT_ATMIMA": "syscall", - "syscall.IFT_ATMLOGICAL": "syscall", - "syscall.IFT_ATMRADIO": "syscall", - "syscall.IFT_ATMSUBINTERFACE": "syscall", - "syscall.IFT_ATMVCIENDPT": "syscall", - "syscall.IFT_ATMVIRTUAL": "syscall", - "syscall.IFT_BGPPOLICYACCOUNTING": "syscall", - "syscall.IFT_BLUETOOTH": "syscall", - "syscall.IFT_BRIDGE": "syscall", - "syscall.IFT_BSC": "syscall", - "syscall.IFT_CARP": "syscall", - "syscall.IFT_CCTEMUL": "syscall", - "syscall.IFT_CELLULAR": "syscall", - "syscall.IFT_CEPT": "syscall", - "syscall.IFT_CES": "syscall", - "syscall.IFT_CHANNEL": "syscall", - "syscall.IFT_CNR": "syscall", - "syscall.IFT_COFFEE": "syscall", - "syscall.IFT_COMPOSITELINK": "syscall", - "syscall.IFT_DCN": "syscall", - "syscall.IFT_DIGITALPOWERLINE": "syscall", - "syscall.IFT_DIGITALWRAPPEROVERHEADCHANNEL": "syscall", - "syscall.IFT_DLSW": "syscall", - "syscall.IFT_DOCSCABLEDOWNSTREAM": "syscall", - "syscall.IFT_DOCSCABLEMACLAYER": "syscall", - "syscall.IFT_DOCSCABLEUPSTREAM": "syscall", - "syscall.IFT_DOCSCABLEUPSTREAMCHANNEL": "syscall", - "syscall.IFT_DS0": "syscall", - "syscall.IFT_DS0BUNDLE": "syscall", - "syscall.IFT_DS1FDL": "syscall", - "syscall.IFT_DS3": "syscall", - "syscall.IFT_DTM": "syscall", - "syscall.IFT_DUMMY": "syscall", - "syscall.IFT_DVBASILN": "syscall", - "syscall.IFT_DVBASIOUT": "syscall", - "syscall.IFT_DVBRCCDOWNSTREAM": "syscall", - "syscall.IFT_DVBRCCMACLAYER": "syscall", - "syscall.IFT_DVBRCCUPSTREAM": "syscall", - "syscall.IFT_ECONET": "syscall", - "syscall.IFT_ENC": "syscall", - "syscall.IFT_EON": "syscall", - "syscall.IFT_EPLRS": "syscall", - "syscall.IFT_ESCON": "syscall", - "syscall.IFT_ETHER": "syscall", - "syscall.IFT_FAITH": "syscall", - "syscall.IFT_FAST": "syscall", - "syscall.IFT_FASTETHER": "syscall", - "syscall.IFT_FASTETHERFX": "syscall", - "syscall.IFT_FDDI": "syscall", - "syscall.IFT_FIBRECHANNEL": "syscall", - "syscall.IFT_FRAMERELAYINTERCONNECT": "syscall", - "syscall.IFT_FRAMERELAYMPI": "syscall", - "syscall.IFT_FRDLCIENDPT": "syscall", - "syscall.IFT_FRELAY": "syscall", - "syscall.IFT_FRELAYDCE": "syscall", - "syscall.IFT_FRF16MFRBUNDLE": "syscall", - "syscall.IFT_FRFORWARD": "syscall", - "syscall.IFT_G703AT2MB": "syscall", - "syscall.IFT_G703AT64K": "syscall", - "syscall.IFT_GIF": "syscall", - "syscall.IFT_GIGABITETHERNET": "syscall", - "syscall.IFT_GR303IDT": "syscall", - "syscall.IFT_GR303RDT": "syscall", - "syscall.IFT_H323GATEKEEPER": "syscall", - "syscall.IFT_H323PROXY": "syscall", - "syscall.IFT_HDH1822": "syscall", - "syscall.IFT_HDLC": "syscall", - "syscall.IFT_HDSL2": "syscall", - "syscall.IFT_HIPERLAN2": "syscall", - "syscall.IFT_HIPPI": "syscall", - "syscall.IFT_HIPPIINTERFACE": "syscall", - "syscall.IFT_HOSTPAD": "syscall", - "syscall.IFT_HSSI": "syscall", - "syscall.IFT_HY": "syscall", - "syscall.IFT_IBM370PARCHAN": "syscall", - "syscall.IFT_IDSL": "syscall", - "syscall.IFT_IEEE1394": "syscall", - "syscall.IFT_IEEE80211": "syscall", - "syscall.IFT_IEEE80212": "syscall", - "syscall.IFT_IEEE8023ADLAG": "syscall", - "syscall.IFT_IFGSN": "syscall", - "syscall.IFT_IMT": "syscall", - "syscall.IFT_INFINIBAND": "syscall", - "syscall.IFT_INTERLEAVE": "syscall", - "syscall.IFT_IP": "syscall", - "syscall.IFT_IPFORWARD": "syscall", - "syscall.IFT_IPOVERATM": "syscall", - "syscall.IFT_IPOVERCDLC": "syscall", - "syscall.IFT_IPOVERCLAW": "syscall", - "syscall.IFT_IPSWITCH": "syscall", - "syscall.IFT_IPXIP": "syscall", - "syscall.IFT_ISDN": "syscall", - "syscall.IFT_ISDNBASIC": "syscall", - "syscall.IFT_ISDNPRIMARY": "syscall", - "syscall.IFT_ISDNS": "syscall", - "syscall.IFT_ISDNU": "syscall", - "syscall.IFT_ISO88022LLC": "syscall", - "syscall.IFT_ISO88023": "syscall", - "syscall.IFT_ISO88024": "syscall", - "syscall.IFT_ISO88025": "syscall", - "syscall.IFT_ISO88025CRFPINT": "syscall", - "syscall.IFT_ISO88025DTR": "syscall", - "syscall.IFT_ISO88025FIBER": "syscall", - "syscall.IFT_ISO88026": "syscall", - "syscall.IFT_ISUP": "syscall", - "syscall.IFT_L2VLAN": "syscall", - "syscall.IFT_L3IPVLAN": "syscall", - "syscall.IFT_L3IPXVLAN": "syscall", - "syscall.IFT_LAPB": "syscall", - "syscall.IFT_LAPD": "syscall", - "syscall.IFT_LAPF": "syscall", - "syscall.IFT_LINEGROUP": "syscall", - "syscall.IFT_LOCALTALK": "syscall", - "syscall.IFT_LOOP": "syscall", - "syscall.IFT_MEDIAMAILOVERIP": "syscall", - "syscall.IFT_MFSIGLINK": "syscall", - "syscall.IFT_MIOX25": "syscall", - "syscall.IFT_MODEM": "syscall", - "syscall.IFT_MPC": "syscall", - "syscall.IFT_MPLS": "syscall", - "syscall.IFT_MPLSTUNNEL": "syscall", - "syscall.IFT_MSDSL": "syscall", - "syscall.IFT_MVL": "syscall", - "syscall.IFT_MYRINET": "syscall", - "syscall.IFT_NFAS": "syscall", - "syscall.IFT_NSIP": "syscall", - "syscall.IFT_OPTICALCHANNEL": "syscall", - "syscall.IFT_OPTICALTRANSPORT": "syscall", - "syscall.IFT_OTHER": "syscall", - "syscall.IFT_P10": "syscall", - "syscall.IFT_P80": "syscall", - "syscall.IFT_PARA": "syscall", - "syscall.IFT_PDP": "syscall", - "syscall.IFT_PFLOG": "syscall", - "syscall.IFT_PFLOW": "syscall", - "syscall.IFT_PFSYNC": "syscall", - "syscall.IFT_PLC": "syscall", - "syscall.IFT_PON155": "syscall", - "syscall.IFT_PON622": "syscall", - "syscall.IFT_POS": "syscall", - "syscall.IFT_PPP": "syscall", - "syscall.IFT_PPPMULTILINKBUNDLE": "syscall", - "syscall.IFT_PROPATM": "syscall", - "syscall.IFT_PROPBWAP2MP": "syscall", - "syscall.IFT_PROPCNLS": "syscall", - "syscall.IFT_PROPDOCSWIRELESSDOWNSTREAM": "syscall", - "syscall.IFT_PROPDOCSWIRELESSMACLAYER": "syscall", - "syscall.IFT_PROPDOCSWIRELESSUPSTREAM": "syscall", - "syscall.IFT_PROPMUX": "syscall", - "syscall.IFT_PROPVIRTUAL": "syscall", - "syscall.IFT_PROPWIRELESSP2P": "syscall", - "syscall.IFT_PTPSERIAL": "syscall", - "syscall.IFT_PVC": "syscall", - "syscall.IFT_Q2931": "syscall", - "syscall.IFT_QLLC": "syscall", - "syscall.IFT_RADIOMAC": "syscall", - "syscall.IFT_RADSL": "syscall", - "syscall.IFT_REACHDSL": "syscall", - "syscall.IFT_RFC1483": "syscall", - "syscall.IFT_RS232": "syscall", - "syscall.IFT_RSRB": "syscall", - "syscall.IFT_SDLC": "syscall", - "syscall.IFT_SDSL": "syscall", - "syscall.IFT_SHDSL": "syscall", - "syscall.IFT_SIP": "syscall", - "syscall.IFT_SIPSIG": "syscall", - "syscall.IFT_SIPTG": "syscall", - "syscall.IFT_SLIP": "syscall", - "syscall.IFT_SMDSDXI": "syscall", - "syscall.IFT_SMDSICIP": "syscall", - "syscall.IFT_SONET": "syscall", - "syscall.IFT_SONETOVERHEADCHANNEL": "syscall", - "syscall.IFT_SONETPATH": "syscall", - "syscall.IFT_SONETVT": "syscall", - "syscall.IFT_SRP": "syscall", - "syscall.IFT_SS7SIGLINK": "syscall", - "syscall.IFT_STACKTOSTACK": "syscall", - "syscall.IFT_STARLAN": "syscall", - "syscall.IFT_STF": "syscall", - "syscall.IFT_T1": "syscall", - "syscall.IFT_TDLC": "syscall", - "syscall.IFT_TELINK": "syscall", - "syscall.IFT_TERMPAD": "syscall", - "syscall.IFT_TR008": "syscall", - "syscall.IFT_TRANSPHDLC": "syscall", - "syscall.IFT_TUNNEL": "syscall", - "syscall.IFT_ULTRA": "syscall", - "syscall.IFT_USB": "syscall", - "syscall.IFT_V11": "syscall", - "syscall.IFT_V35": "syscall", - "syscall.IFT_V36": "syscall", - "syscall.IFT_V37": "syscall", - "syscall.IFT_VDSL": "syscall", - "syscall.IFT_VIRTUALIPADDRESS": "syscall", - "syscall.IFT_VIRTUALTG": "syscall", - "syscall.IFT_VOICEDID": "syscall", - "syscall.IFT_VOICEEM": "syscall", - "syscall.IFT_VOICEEMFGD": "syscall", - "syscall.IFT_VOICEENCAP": "syscall", - "syscall.IFT_VOICEFGDEANA": "syscall", - "syscall.IFT_VOICEFXO": "syscall", - "syscall.IFT_VOICEFXS": "syscall", - "syscall.IFT_VOICEOVERATM": "syscall", - "syscall.IFT_VOICEOVERCABLE": "syscall", - "syscall.IFT_VOICEOVERFRAMERELAY": "syscall", - "syscall.IFT_VOICEOVERIP": "syscall", - "syscall.IFT_X213": "syscall", - "syscall.IFT_X25": "syscall", - "syscall.IFT_X25DDN": "syscall", - "syscall.IFT_X25HUNTGROUP": "syscall", - "syscall.IFT_X25MLP": "syscall", - "syscall.IFT_X25PLE": "syscall", - "syscall.IFT_XETHER": "syscall", - "syscall.IGNBRK": "syscall", - "syscall.IGNCR": "syscall", - "syscall.IGNORE": "syscall", - "syscall.IGNPAR": "syscall", - "syscall.IMAXBEL": "syscall", - "syscall.INFINITE": "syscall", - "syscall.INLCR": "syscall", - "syscall.INPCK": "syscall", - "syscall.INVALID_FILE_ATTRIBUTES": "syscall", - "syscall.IN_ACCESS": "syscall", - "syscall.IN_ALL_EVENTS": "syscall", - "syscall.IN_ATTRIB": "syscall", - "syscall.IN_CLASSA_HOST": "syscall", - "syscall.IN_CLASSA_MAX": "syscall", - "syscall.IN_CLASSA_NET": "syscall", - "syscall.IN_CLASSA_NSHIFT": "syscall", - "syscall.IN_CLASSB_HOST": "syscall", - "syscall.IN_CLASSB_MAX": "syscall", - "syscall.IN_CLASSB_NET": "syscall", - "syscall.IN_CLASSB_NSHIFT": "syscall", - "syscall.IN_CLASSC_HOST": "syscall", - "syscall.IN_CLASSC_NET": "syscall", - "syscall.IN_CLASSC_NSHIFT": "syscall", - "syscall.IN_CLASSD_HOST": "syscall", - "syscall.IN_CLASSD_NET": "syscall", - "syscall.IN_CLASSD_NSHIFT": "syscall", - "syscall.IN_CLOEXEC": "syscall", - "syscall.IN_CLOSE": "syscall", - "syscall.IN_CLOSE_NOWRITE": "syscall", - "syscall.IN_CLOSE_WRITE": "syscall", - "syscall.IN_CREATE": "syscall", - "syscall.IN_DELETE": "syscall", - "syscall.IN_DELETE_SELF": "syscall", - "syscall.IN_DONT_FOLLOW": "syscall", - "syscall.IN_EXCL_UNLINK": "syscall", - "syscall.IN_IGNORED": "syscall", - "syscall.IN_ISDIR": "syscall", - "syscall.IN_LINKLOCALNETNUM": "syscall", - "syscall.IN_LOOPBACKNET": "syscall", - "syscall.IN_MASK_ADD": "syscall", - "syscall.IN_MODIFY": "syscall", - "syscall.IN_MOVE": "syscall", - "syscall.IN_MOVED_FROM": "syscall", - "syscall.IN_MOVED_TO": "syscall", - "syscall.IN_MOVE_SELF": "syscall", - "syscall.IN_NONBLOCK": "syscall", - "syscall.IN_ONESHOT": "syscall", - "syscall.IN_ONLYDIR": "syscall", - "syscall.IN_OPEN": "syscall", - "syscall.IN_Q_OVERFLOW": "syscall", - "syscall.IN_RFC3021_HOST": "syscall", - "syscall.IN_RFC3021_MASK": "syscall", - "syscall.IN_RFC3021_NET": "syscall", - "syscall.IN_RFC3021_NSHIFT": "syscall", - "syscall.IN_UNMOUNT": "syscall", - "syscall.IOC_IN": "syscall", - "syscall.IOC_INOUT": "syscall", - "syscall.IOC_OUT": "syscall", - "syscall.IOC_VENDOR": "syscall", - "syscall.IOC_WS2": "syscall", - "syscall.IO_REPARSE_TAG_SYMLINK": "syscall", - "syscall.IPMreq": "syscall", - "syscall.IPMreqn": "syscall", - "syscall.IPPROTO_3PC": "syscall", - "syscall.IPPROTO_ADFS": "syscall", - "syscall.IPPROTO_AH": "syscall", - "syscall.IPPROTO_AHIP": "syscall", - "syscall.IPPROTO_APES": "syscall", - "syscall.IPPROTO_ARGUS": "syscall", - "syscall.IPPROTO_AX25": "syscall", - "syscall.IPPROTO_BHA": "syscall", - "syscall.IPPROTO_BLT": "syscall", - "syscall.IPPROTO_BRSATMON": "syscall", - "syscall.IPPROTO_CARP": "syscall", - "syscall.IPPROTO_CFTP": "syscall", - "syscall.IPPROTO_CHAOS": "syscall", - "syscall.IPPROTO_CMTP": "syscall", - "syscall.IPPROTO_COMP": "syscall", - "syscall.IPPROTO_CPHB": "syscall", - "syscall.IPPROTO_CPNX": "syscall", - "syscall.IPPROTO_DCCP": "syscall", - "syscall.IPPROTO_DDP": "syscall", - "syscall.IPPROTO_DGP": "syscall", - "syscall.IPPROTO_DIVERT": "syscall", - "syscall.IPPROTO_DIVERT_INIT": "syscall", - "syscall.IPPROTO_DIVERT_RESP": "syscall", - "syscall.IPPROTO_DONE": "syscall", - "syscall.IPPROTO_DSTOPTS": "syscall", - "syscall.IPPROTO_EGP": "syscall", - "syscall.IPPROTO_EMCON": "syscall", - "syscall.IPPROTO_ENCAP": "syscall", - "syscall.IPPROTO_EON": "syscall", - "syscall.IPPROTO_ESP": "syscall", - "syscall.IPPROTO_ETHERIP": "syscall", - "syscall.IPPROTO_FRAGMENT": "syscall", - "syscall.IPPROTO_GGP": "syscall", - "syscall.IPPROTO_GMTP": "syscall", - "syscall.IPPROTO_GRE": "syscall", - "syscall.IPPROTO_HELLO": "syscall", - "syscall.IPPROTO_HMP": "syscall", - "syscall.IPPROTO_HOPOPTS": "syscall", - "syscall.IPPROTO_ICMP": "syscall", - "syscall.IPPROTO_ICMPV6": "syscall", - "syscall.IPPROTO_IDP": "syscall", - "syscall.IPPROTO_IDPR": "syscall", - "syscall.IPPROTO_IDRP": "syscall", - "syscall.IPPROTO_IGMP": "syscall", - "syscall.IPPROTO_IGP": "syscall", - "syscall.IPPROTO_IGRP": "syscall", - "syscall.IPPROTO_IL": "syscall", - "syscall.IPPROTO_INLSP": "syscall", - "syscall.IPPROTO_INP": "syscall", - "syscall.IPPROTO_IP": "syscall", - "syscall.IPPROTO_IPCOMP": "syscall", - "syscall.IPPROTO_IPCV": "syscall", - "syscall.IPPROTO_IPEIP": "syscall", - "syscall.IPPROTO_IPIP": "syscall", - "syscall.IPPROTO_IPPC": "syscall", - "syscall.IPPROTO_IPV4": "syscall", - "syscall.IPPROTO_IPV6": "syscall", - "syscall.IPPROTO_IPV6_ICMP": "syscall", - "syscall.IPPROTO_IRTP": "syscall", - "syscall.IPPROTO_KRYPTOLAN": "syscall", - "syscall.IPPROTO_LARP": "syscall", - "syscall.IPPROTO_LEAF1": "syscall", - "syscall.IPPROTO_LEAF2": "syscall", - "syscall.IPPROTO_MAX": "syscall", - "syscall.IPPROTO_MAXID": "syscall", - "syscall.IPPROTO_MEAS": "syscall", - "syscall.IPPROTO_MH": "syscall", - "syscall.IPPROTO_MHRP": "syscall", - "syscall.IPPROTO_MICP": "syscall", - "syscall.IPPROTO_MOBILE": "syscall", - "syscall.IPPROTO_MPLS": "syscall", - "syscall.IPPROTO_MTP": "syscall", - "syscall.IPPROTO_MUX": "syscall", - "syscall.IPPROTO_ND": "syscall", - "syscall.IPPROTO_NHRP": "syscall", - "syscall.IPPROTO_NONE": "syscall", - "syscall.IPPROTO_NSP": "syscall", - "syscall.IPPROTO_NVPII": "syscall", - "syscall.IPPROTO_OLD_DIVERT": "syscall", - "syscall.IPPROTO_OSPFIGP": "syscall", - "syscall.IPPROTO_PFSYNC": "syscall", - "syscall.IPPROTO_PGM": "syscall", - "syscall.IPPROTO_PIGP": "syscall", - "syscall.IPPROTO_PIM": "syscall", - "syscall.IPPROTO_PRM": "syscall", - "syscall.IPPROTO_PUP": "syscall", - "syscall.IPPROTO_PVP": "syscall", - "syscall.IPPROTO_RAW": "syscall", - "syscall.IPPROTO_RCCMON": "syscall", - "syscall.IPPROTO_RDP": "syscall", - "syscall.IPPROTO_ROUTING": "syscall", - "syscall.IPPROTO_RSVP": "syscall", - "syscall.IPPROTO_RVD": "syscall", - "syscall.IPPROTO_SATEXPAK": "syscall", - "syscall.IPPROTO_SATMON": "syscall", - "syscall.IPPROTO_SCCSP": "syscall", - "syscall.IPPROTO_SCTP": "syscall", - "syscall.IPPROTO_SDRP": "syscall", - "syscall.IPPROTO_SEND": "syscall", - "syscall.IPPROTO_SEP": "syscall", - "syscall.IPPROTO_SKIP": "syscall", - "syscall.IPPROTO_SPACER": "syscall", - "syscall.IPPROTO_SRPC": "syscall", - "syscall.IPPROTO_ST": "syscall", - "syscall.IPPROTO_SVMTP": "syscall", - "syscall.IPPROTO_SWIPE": "syscall", - "syscall.IPPROTO_TCF": "syscall", - "syscall.IPPROTO_TCP": "syscall", - "syscall.IPPROTO_TLSP": "syscall", - "syscall.IPPROTO_TP": "syscall", - "syscall.IPPROTO_TPXX": "syscall", - "syscall.IPPROTO_TRUNK1": "syscall", - "syscall.IPPROTO_TRUNK2": "syscall", - "syscall.IPPROTO_TTP": "syscall", - "syscall.IPPROTO_UDP": "syscall", - "syscall.IPPROTO_UDPLITE": "syscall", - "syscall.IPPROTO_VINES": "syscall", - "syscall.IPPROTO_VISA": "syscall", - "syscall.IPPROTO_VMTP": "syscall", - "syscall.IPPROTO_VRRP": "syscall", - "syscall.IPPROTO_WBEXPAK": "syscall", - "syscall.IPPROTO_WBMON": "syscall", - "syscall.IPPROTO_WSN": "syscall", - "syscall.IPPROTO_XNET": "syscall", - "syscall.IPPROTO_XTP": "syscall", - "syscall.IPV6_2292DSTOPTS": "syscall", - "syscall.IPV6_2292HOPLIMIT": "syscall", - "syscall.IPV6_2292HOPOPTS": "syscall", - "syscall.IPV6_2292NEXTHOP": "syscall", - "syscall.IPV6_2292PKTINFO": "syscall", - "syscall.IPV6_2292PKTOPTIONS": "syscall", - "syscall.IPV6_2292RTHDR": "syscall", - "syscall.IPV6_ADDRFORM": "syscall", - "syscall.IPV6_ADD_MEMBERSHIP": "syscall", - "syscall.IPV6_AUTHHDR": "syscall", - "syscall.IPV6_AUTH_LEVEL": "syscall", - "syscall.IPV6_AUTOFLOWLABEL": "syscall", - "syscall.IPV6_BINDANY": "syscall", - "syscall.IPV6_BINDV6ONLY": "syscall", - "syscall.IPV6_BOUND_IF": "syscall", - "syscall.IPV6_CHECKSUM": "syscall", - "syscall.IPV6_DEFAULT_MULTICAST_HOPS": "syscall", - "syscall.IPV6_DEFAULT_MULTICAST_LOOP": "syscall", - "syscall.IPV6_DEFHLIM": "syscall", - "syscall.IPV6_DONTFRAG": "syscall", - "syscall.IPV6_DROP_MEMBERSHIP": "syscall", - "syscall.IPV6_DSTOPTS": "syscall", - "syscall.IPV6_ESP_NETWORK_LEVEL": "syscall", - "syscall.IPV6_ESP_TRANS_LEVEL": "syscall", - "syscall.IPV6_FAITH": "syscall", - "syscall.IPV6_FLOWINFO_MASK": "syscall", - "syscall.IPV6_FLOWLABEL_MASK": "syscall", - "syscall.IPV6_FRAGTTL": "syscall", - "syscall.IPV6_FW_ADD": "syscall", - "syscall.IPV6_FW_DEL": "syscall", - "syscall.IPV6_FW_FLUSH": "syscall", - "syscall.IPV6_FW_GET": "syscall", - "syscall.IPV6_FW_ZERO": "syscall", - "syscall.IPV6_HLIMDEC": "syscall", - "syscall.IPV6_HOPLIMIT": "syscall", - "syscall.IPV6_HOPOPTS": "syscall", - "syscall.IPV6_IPCOMP_LEVEL": "syscall", - "syscall.IPV6_IPSEC_POLICY": "syscall", - "syscall.IPV6_JOIN_ANYCAST": "syscall", - "syscall.IPV6_JOIN_GROUP": "syscall", - "syscall.IPV6_LEAVE_ANYCAST": "syscall", - "syscall.IPV6_LEAVE_GROUP": "syscall", - "syscall.IPV6_MAXHLIM": "syscall", - "syscall.IPV6_MAXOPTHDR": "syscall", - "syscall.IPV6_MAXPACKET": "syscall", - "syscall.IPV6_MAX_GROUP_SRC_FILTER": "syscall", - "syscall.IPV6_MAX_MEMBERSHIPS": "syscall", - "syscall.IPV6_MAX_SOCK_SRC_FILTER": "syscall", - "syscall.IPV6_MIN_MEMBERSHIPS": "syscall", - "syscall.IPV6_MMTU": "syscall", - "syscall.IPV6_MSFILTER": "syscall", - "syscall.IPV6_MTU": "syscall", - "syscall.IPV6_MTU_DISCOVER": "syscall", - "syscall.IPV6_MULTICAST_HOPS": "syscall", - "syscall.IPV6_MULTICAST_IF": "syscall", - "syscall.IPV6_MULTICAST_LOOP": "syscall", - "syscall.IPV6_NEXTHOP": "syscall", - "syscall.IPV6_OPTIONS": "syscall", - "syscall.IPV6_PATHMTU": "syscall", - "syscall.IPV6_PIPEX": "syscall", - "syscall.IPV6_PKTINFO": "syscall", - "syscall.IPV6_PMTUDISC_DO": "syscall", - "syscall.IPV6_PMTUDISC_DONT": "syscall", - "syscall.IPV6_PMTUDISC_PROBE": "syscall", - "syscall.IPV6_PMTUDISC_WANT": "syscall", - "syscall.IPV6_PORTRANGE": "syscall", - "syscall.IPV6_PORTRANGE_DEFAULT": "syscall", - "syscall.IPV6_PORTRANGE_HIGH": "syscall", - "syscall.IPV6_PORTRANGE_LOW": "syscall", - "syscall.IPV6_PREFER_TEMPADDR": "syscall", - "syscall.IPV6_RECVDSTOPTS": "syscall", - "syscall.IPV6_RECVDSTPORT": "syscall", - "syscall.IPV6_RECVERR": "syscall", - "syscall.IPV6_RECVHOPLIMIT": "syscall", - "syscall.IPV6_RECVHOPOPTS": "syscall", - "syscall.IPV6_RECVPATHMTU": "syscall", - "syscall.IPV6_RECVPKTINFO": "syscall", - "syscall.IPV6_RECVRTHDR": "syscall", - "syscall.IPV6_RECVTCLASS": "syscall", - "syscall.IPV6_ROUTER_ALERT": "syscall", - "syscall.IPV6_RTABLE": "syscall", - "syscall.IPV6_RTHDR": "syscall", - "syscall.IPV6_RTHDRDSTOPTS": "syscall", - "syscall.IPV6_RTHDR_LOOSE": "syscall", - "syscall.IPV6_RTHDR_STRICT": "syscall", - "syscall.IPV6_RTHDR_TYPE_0": "syscall", - "syscall.IPV6_RXDSTOPTS": "syscall", - "syscall.IPV6_RXHOPOPTS": "syscall", - "syscall.IPV6_SOCKOPT_RESERVED1": "syscall", - "syscall.IPV6_TCLASS": "syscall", - "syscall.IPV6_UNICAST_HOPS": "syscall", - "syscall.IPV6_USE_MIN_MTU": "syscall", - "syscall.IPV6_V6ONLY": "syscall", - "syscall.IPV6_VERSION": "syscall", - "syscall.IPV6_VERSION_MASK": "syscall", - "syscall.IPV6_XFRM_POLICY": "syscall", - "syscall.IP_ADD_MEMBERSHIP": "syscall", - "syscall.IP_ADD_SOURCE_MEMBERSHIP": "syscall", - "syscall.IP_AUTH_LEVEL": "syscall", - "syscall.IP_BINDANY": "syscall", - "syscall.IP_BLOCK_SOURCE": "syscall", - "syscall.IP_BOUND_IF": "syscall", - "syscall.IP_DEFAULT_MULTICAST_LOOP": "syscall", - "syscall.IP_DEFAULT_MULTICAST_TTL": "syscall", - "syscall.IP_DF": "syscall", - "syscall.IP_DIVERTFL": "syscall", - "syscall.IP_DONTFRAG": "syscall", - "syscall.IP_DROP_MEMBERSHIP": "syscall", - "syscall.IP_DROP_SOURCE_MEMBERSHIP": "syscall", - "syscall.IP_DUMMYNET3": "syscall", - "syscall.IP_DUMMYNET_CONFIGURE": "syscall", - "syscall.IP_DUMMYNET_DEL": "syscall", - "syscall.IP_DUMMYNET_FLUSH": "syscall", - "syscall.IP_DUMMYNET_GET": "syscall", - "syscall.IP_EF": "syscall", - "syscall.IP_ERRORMTU": "syscall", - "syscall.IP_ESP_NETWORK_LEVEL": "syscall", - "syscall.IP_ESP_TRANS_LEVEL": "syscall", - "syscall.IP_FAITH": "syscall", - "syscall.IP_FREEBIND": "syscall", - "syscall.IP_FW3": "syscall", - "syscall.IP_FW_ADD": "syscall", - "syscall.IP_FW_DEL": "syscall", - "syscall.IP_FW_FLUSH": "syscall", - "syscall.IP_FW_GET": "syscall", - "syscall.IP_FW_NAT_CFG": "syscall", - "syscall.IP_FW_NAT_DEL": "syscall", - "syscall.IP_FW_NAT_GET_CONFIG": "syscall", - "syscall.IP_FW_NAT_GET_LOG": "syscall", - "syscall.IP_FW_RESETLOG": "syscall", - "syscall.IP_FW_TABLE_ADD": "syscall", - "syscall.IP_FW_TABLE_DEL": "syscall", - "syscall.IP_FW_TABLE_FLUSH": "syscall", - "syscall.IP_FW_TABLE_GETSIZE": "syscall", - "syscall.IP_FW_TABLE_LIST": "syscall", - "syscall.IP_FW_ZERO": "syscall", - "syscall.IP_HDRINCL": "syscall", - "syscall.IP_IPCOMP_LEVEL": "syscall", - "syscall.IP_IPSECFLOWINFO": "syscall", - "syscall.IP_IPSEC_LOCAL_AUTH": "syscall", - "syscall.IP_IPSEC_LOCAL_CRED": "syscall", - "syscall.IP_IPSEC_LOCAL_ID": "syscall", - "syscall.IP_IPSEC_POLICY": "syscall", - "syscall.IP_IPSEC_REMOTE_AUTH": "syscall", - "syscall.IP_IPSEC_REMOTE_CRED": "syscall", - "syscall.IP_IPSEC_REMOTE_ID": "syscall", - "syscall.IP_MAXPACKET": "syscall", - "syscall.IP_MAX_GROUP_SRC_FILTER": "syscall", - "syscall.IP_MAX_MEMBERSHIPS": "syscall", - "syscall.IP_MAX_SOCK_MUTE_FILTER": "syscall", - "syscall.IP_MAX_SOCK_SRC_FILTER": "syscall", - "syscall.IP_MAX_SOURCE_FILTER": "syscall", - "syscall.IP_MF": "syscall", - "syscall.IP_MINFRAGSIZE": "syscall", - "syscall.IP_MINTTL": "syscall", - "syscall.IP_MIN_MEMBERSHIPS": "syscall", - "syscall.IP_MSFILTER": "syscall", - "syscall.IP_MSS": "syscall", - "syscall.IP_MTU": "syscall", - "syscall.IP_MTU_DISCOVER": "syscall", - "syscall.IP_MULTICAST_IF": "syscall", - "syscall.IP_MULTICAST_IFINDEX": "syscall", - "syscall.IP_MULTICAST_LOOP": "syscall", - "syscall.IP_MULTICAST_TTL": "syscall", - "syscall.IP_MULTICAST_VIF": "syscall", - "syscall.IP_NAT__XXX": "syscall", - "syscall.IP_OFFMASK": "syscall", - "syscall.IP_OLD_FW_ADD": "syscall", - "syscall.IP_OLD_FW_DEL": "syscall", - "syscall.IP_OLD_FW_FLUSH": "syscall", - "syscall.IP_OLD_FW_GET": "syscall", - "syscall.IP_OLD_FW_RESETLOG": "syscall", - "syscall.IP_OLD_FW_ZERO": "syscall", - "syscall.IP_ONESBCAST": "syscall", - "syscall.IP_OPTIONS": "syscall", - "syscall.IP_ORIGDSTADDR": "syscall", - "syscall.IP_PASSSEC": "syscall", - "syscall.IP_PIPEX": "syscall", - "syscall.IP_PKTINFO": "syscall", - "syscall.IP_PKTOPTIONS": "syscall", - "syscall.IP_PMTUDISC": "syscall", - "syscall.IP_PMTUDISC_DO": "syscall", - "syscall.IP_PMTUDISC_DONT": "syscall", - "syscall.IP_PMTUDISC_PROBE": "syscall", - "syscall.IP_PMTUDISC_WANT": "syscall", - "syscall.IP_PORTRANGE": "syscall", - "syscall.IP_PORTRANGE_DEFAULT": "syscall", - "syscall.IP_PORTRANGE_HIGH": "syscall", - "syscall.IP_PORTRANGE_LOW": "syscall", - "syscall.IP_RECVDSTADDR": "syscall", - "syscall.IP_RECVDSTPORT": "syscall", - "syscall.IP_RECVERR": "syscall", - "syscall.IP_RECVIF": "syscall", - "syscall.IP_RECVOPTS": "syscall", - "syscall.IP_RECVORIGDSTADDR": "syscall", - "syscall.IP_RECVPKTINFO": "syscall", - "syscall.IP_RECVRETOPTS": "syscall", - "syscall.IP_RECVRTABLE": "syscall", - "syscall.IP_RECVTOS": "syscall", - "syscall.IP_RECVTTL": "syscall", - "syscall.IP_RETOPTS": "syscall", - "syscall.IP_RF": "syscall", - "syscall.IP_ROUTER_ALERT": "syscall", - "syscall.IP_RSVP_OFF": "syscall", - "syscall.IP_RSVP_ON": "syscall", - "syscall.IP_RSVP_VIF_OFF": "syscall", - "syscall.IP_RSVP_VIF_ON": "syscall", - "syscall.IP_RTABLE": "syscall", - "syscall.IP_SENDSRCADDR": "syscall", - "syscall.IP_STRIPHDR": "syscall", - "syscall.IP_TOS": "syscall", - "syscall.IP_TRAFFIC_MGT_BACKGROUND": "syscall", - "syscall.IP_TRANSPARENT": "syscall", - "syscall.IP_TTL": "syscall", - "syscall.IP_UNBLOCK_SOURCE": "syscall", - "syscall.IP_XFRM_POLICY": "syscall", - "syscall.IPv6MTUInfo": "syscall", - "syscall.IPv6Mreq": "syscall", - "syscall.ISIG": "syscall", - "syscall.ISTRIP": "syscall", - "syscall.IUCLC": "syscall", - "syscall.IUTF8": "syscall", - "syscall.IXANY": "syscall", - "syscall.IXOFF": "syscall", - "syscall.IXON": "syscall", - "syscall.IfAddrmsg": "syscall", - "syscall.IfAnnounceMsghdr": "syscall", - "syscall.IfData": "syscall", - "syscall.IfInfomsg": "syscall", - "syscall.IfMsghdr": "syscall", - "syscall.IfaMsghdr": "syscall", - "syscall.IfmaMsghdr": "syscall", - "syscall.IfmaMsghdr2": "syscall", - "syscall.ImplementsGetwd": "syscall", - "syscall.Inet4Pktinfo": "syscall", - "syscall.Inet6Pktinfo": "syscall", - "syscall.InotifyAddWatch": "syscall", - "syscall.InotifyEvent": "syscall", - "syscall.InotifyInit": "syscall", - "syscall.InotifyInit1": "syscall", - "syscall.InotifyRmWatch": "syscall", - "syscall.InterfaceAddrMessage": "syscall", - "syscall.InterfaceAnnounceMessage": "syscall", - "syscall.InterfaceInfo": "syscall", - "syscall.InterfaceMessage": "syscall", - "syscall.InterfaceMulticastAddrMessage": "syscall", - "syscall.InvalidHandle": "syscall", - "syscall.Ioperm": "syscall", - "syscall.Iopl": "syscall", - "syscall.Iovec": "syscall", - "syscall.IpAdapterInfo": "syscall", - "syscall.IpAddrString": "syscall", - "syscall.IpAddressString": "syscall", - "syscall.IpMaskString": "syscall", - "syscall.Issetugid": "syscall", - "syscall.KEY_ALL_ACCESS": "syscall", - "syscall.KEY_CREATE_LINK": "syscall", - "syscall.KEY_CREATE_SUB_KEY": "syscall", - "syscall.KEY_ENUMERATE_SUB_KEYS": "syscall", - "syscall.KEY_EXECUTE": "syscall", - "syscall.KEY_NOTIFY": "syscall", - "syscall.KEY_QUERY_VALUE": "syscall", - "syscall.KEY_READ": "syscall", - "syscall.KEY_SET_VALUE": "syscall", - "syscall.KEY_WOW64_32KEY": "syscall", - "syscall.KEY_WOW64_64KEY": "syscall", - "syscall.KEY_WRITE": "syscall", - "syscall.Kevent": "syscall", - "syscall.Kevent_t": "syscall", - "syscall.Kill": "syscall", - "syscall.Klogctl": "syscall", - "syscall.Kqueue": "syscall", - "syscall.LANG_ENGLISH": "syscall", - "syscall.LAYERED_PROTOCOL": "syscall", - "syscall.LCNT_OVERLOAD_FLUSH": "syscall", - "syscall.LINUX_REBOOT_CMD_CAD_OFF": "syscall", - "syscall.LINUX_REBOOT_CMD_CAD_ON": "syscall", - "syscall.LINUX_REBOOT_CMD_HALT": "syscall", - "syscall.LINUX_REBOOT_CMD_KEXEC": "syscall", - "syscall.LINUX_REBOOT_CMD_POWER_OFF": "syscall", - "syscall.LINUX_REBOOT_CMD_RESTART": "syscall", - "syscall.LINUX_REBOOT_CMD_RESTART2": "syscall", - "syscall.LINUX_REBOOT_CMD_SW_SUSPEND": "syscall", - "syscall.LINUX_REBOOT_MAGIC1": "syscall", - "syscall.LINUX_REBOOT_MAGIC2": "syscall", - "syscall.LOCK_EX": "syscall", - "syscall.LOCK_NB": "syscall", - "syscall.LOCK_SH": "syscall", - "syscall.LOCK_UN": "syscall", - "syscall.LazyDLL": "syscall", - "syscall.LazyProc": "syscall", - "syscall.Lchown": "syscall", - "syscall.Linger": "syscall", - "syscall.Link": "syscall", - "syscall.Listen": "syscall", - "syscall.Listxattr": "syscall", - "syscall.LoadCancelIoEx": "syscall", - "syscall.LoadConnectEx": "syscall", - "syscall.LoadCreateSymbolicLink": "syscall", - "syscall.LoadDLL": "syscall", - "syscall.LoadGetAddrInfo": "syscall", - "syscall.LoadLibrary": "syscall", - "syscall.LoadSetFileCompletionNotificationModes": "syscall", - "syscall.LocalFree": "syscall", - "syscall.Log2phys_t": "syscall", - "syscall.LookupAccountName": "syscall", - "syscall.LookupAccountSid": "syscall", - "syscall.LookupSID": "syscall", - "syscall.LsfJump": "syscall", - "syscall.LsfSocket": "syscall", - "syscall.LsfStmt": "syscall", - "syscall.Lstat": "syscall", - "syscall.MADV_AUTOSYNC": "syscall", - "syscall.MADV_CAN_REUSE": "syscall", - "syscall.MADV_CORE": "syscall", - "syscall.MADV_DOFORK": "syscall", - "syscall.MADV_DONTFORK": "syscall", - "syscall.MADV_DONTNEED": "syscall", - "syscall.MADV_FREE": "syscall", - "syscall.MADV_FREE_REUSABLE": "syscall", - "syscall.MADV_FREE_REUSE": "syscall", - "syscall.MADV_HUGEPAGE": "syscall", - "syscall.MADV_HWPOISON": "syscall", - "syscall.MADV_MERGEABLE": "syscall", - "syscall.MADV_NOCORE": "syscall", - "syscall.MADV_NOHUGEPAGE": "syscall", - "syscall.MADV_NORMAL": "syscall", - "syscall.MADV_NOSYNC": "syscall", - "syscall.MADV_PROTECT": "syscall", - "syscall.MADV_RANDOM": "syscall", - "syscall.MADV_REMOVE": "syscall", - "syscall.MADV_SEQUENTIAL": "syscall", - "syscall.MADV_SPACEAVAIL": "syscall", - "syscall.MADV_UNMERGEABLE": "syscall", - "syscall.MADV_WILLNEED": "syscall", - "syscall.MADV_ZERO_WIRED_PAGES": "syscall", - "syscall.MAP_32BIT": "syscall", - "syscall.MAP_ALIGNED_SUPER": "syscall", - "syscall.MAP_ALIGNMENT_16MB": "syscall", - "syscall.MAP_ALIGNMENT_1TB": "syscall", - "syscall.MAP_ALIGNMENT_256TB": "syscall", - "syscall.MAP_ALIGNMENT_4GB": "syscall", - "syscall.MAP_ALIGNMENT_64KB": "syscall", - "syscall.MAP_ALIGNMENT_64PB": "syscall", - "syscall.MAP_ALIGNMENT_MASK": "syscall", - "syscall.MAP_ALIGNMENT_SHIFT": "syscall", - "syscall.MAP_ANON": "syscall", - "syscall.MAP_ANONYMOUS": "syscall", - "syscall.MAP_COPY": "syscall", - "syscall.MAP_DENYWRITE": "syscall", - "syscall.MAP_EXECUTABLE": "syscall", - "syscall.MAP_FILE": "syscall", - "syscall.MAP_FIXED": "syscall", - "syscall.MAP_FLAGMASK": "syscall", - "syscall.MAP_GROWSDOWN": "syscall", - "syscall.MAP_HASSEMAPHORE": "syscall", - "syscall.MAP_HUGETLB": "syscall", - "syscall.MAP_INHERIT": "syscall", - "syscall.MAP_INHERIT_COPY": "syscall", - "syscall.MAP_INHERIT_DEFAULT": "syscall", - "syscall.MAP_INHERIT_DONATE_COPY": "syscall", - "syscall.MAP_INHERIT_NONE": "syscall", - "syscall.MAP_INHERIT_SHARE": "syscall", - "syscall.MAP_JIT": "syscall", - "syscall.MAP_LOCKED": "syscall", - "syscall.MAP_NOCACHE": "syscall", - "syscall.MAP_NOCORE": "syscall", - "syscall.MAP_NOEXTEND": "syscall", - "syscall.MAP_NONBLOCK": "syscall", - "syscall.MAP_NORESERVE": "syscall", - "syscall.MAP_NOSYNC": "syscall", - "syscall.MAP_POPULATE": "syscall", - "syscall.MAP_PREFAULT_READ": "syscall", - "syscall.MAP_PRIVATE": "syscall", - "syscall.MAP_RENAME": "syscall", - "syscall.MAP_RESERVED0080": "syscall", - "syscall.MAP_RESERVED0100": "syscall", - "syscall.MAP_SHARED": "syscall", - "syscall.MAP_STACK": "syscall", - "syscall.MAP_TRYFIXED": "syscall", - "syscall.MAP_TYPE": "syscall", - "syscall.MAP_WIRED": "syscall", - "syscall.MAXIMUM_REPARSE_DATA_BUFFER_SIZE": "syscall", - "syscall.MAXLEN_IFDESCR": "syscall", - "syscall.MAXLEN_PHYSADDR": "syscall", - "syscall.MAX_ADAPTER_ADDRESS_LENGTH": "syscall", - "syscall.MAX_ADAPTER_DESCRIPTION_LENGTH": "syscall", - "syscall.MAX_ADAPTER_NAME_LENGTH": "syscall", - "syscall.MAX_COMPUTERNAME_LENGTH": "syscall", - "syscall.MAX_INTERFACE_NAME_LEN": "syscall", - "syscall.MAX_LONG_PATH": "syscall", - "syscall.MAX_PATH": "syscall", - "syscall.MAX_PROTOCOL_CHAIN": "syscall", - "syscall.MCL_CURRENT": "syscall", - "syscall.MCL_FUTURE": "syscall", - "syscall.MNT_DETACH": "syscall", - "syscall.MNT_EXPIRE": "syscall", - "syscall.MNT_FORCE": "syscall", - "syscall.MSG_BCAST": "syscall", - "syscall.MSG_CMSG_CLOEXEC": "syscall", - "syscall.MSG_COMPAT": "syscall", - "syscall.MSG_CONFIRM": "syscall", - "syscall.MSG_CONTROLMBUF": "syscall", - "syscall.MSG_CTRUNC": "syscall", - "syscall.MSG_DONTROUTE": "syscall", - "syscall.MSG_DONTWAIT": "syscall", - "syscall.MSG_EOF": "syscall", - "syscall.MSG_EOR": "syscall", - "syscall.MSG_ERRQUEUE": "syscall", - "syscall.MSG_FASTOPEN": "syscall", - "syscall.MSG_FIN": "syscall", - "syscall.MSG_FLUSH": "syscall", - "syscall.MSG_HAVEMORE": "syscall", - "syscall.MSG_HOLD": "syscall", - "syscall.MSG_IOVUSRSPACE": "syscall", - "syscall.MSG_LENUSRSPACE": "syscall", - "syscall.MSG_MCAST": "syscall", - "syscall.MSG_MORE": "syscall", - "syscall.MSG_NAMEMBUF": "syscall", - "syscall.MSG_NBIO": "syscall", - "syscall.MSG_NEEDSA": "syscall", - "syscall.MSG_NOSIGNAL": "syscall", - "syscall.MSG_NOTIFICATION": "syscall", - "syscall.MSG_OOB": "syscall", - "syscall.MSG_PEEK": "syscall", - "syscall.MSG_PROXY": "syscall", - "syscall.MSG_RCVMORE": "syscall", - "syscall.MSG_RST": "syscall", - "syscall.MSG_SEND": "syscall", - "syscall.MSG_SYN": "syscall", - "syscall.MSG_TRUNC": "syscall", - "syscall.MSG_TRYHARD": "syscall", - "syscall.MSG_USERFLAGS": "syscall", - "syscall.MSG_WAITALL": "syscall", - "syscall.MSG_WAITFORONE": "syscall", - "syscall.MSG_WAITSTREAM": "syscall", - "syscall.MS_ACTIVE": "syscall", - "syscall.MS_ASYNC": "syscall", - "syscall.MS_BIND": "syscall", - "syscall.MS_DEACTIVATE": "syscall", - "syscall.MS_DIRSYNC": "syscall", - "syscall.MS_INVALIDATE": "syscall", - "syscall.MS_I_VERSION": "syscall", - "syscall.MS_KERNMOUNT": "syscall", - "syscall.MS_KILLPAGES": "syscall", - "syscall.MS_MANDLOCK": "syscall", - "syscall.MS_MGC_MSK": "syscall", - "syscall.MS_MGC_VAL": "syscall", - "syscall.MS_MOVE": "syscall", - "syscall.MS_NOATIME": "syscall", - "syscall.MS_NODEV": "syscall", - "syscall.MS_NODIRATIME": "syscall", - "syscall.MS_NOEXEC": "syscall", - "syscall.MS_NOSUID": "syscall", - "syscall.MS_NOUSER": "syscall", - "syscall.MS_POSIXACL": "syscall", - "syscall.MS_PRIVATE": "syscall", - "syscall.MS_RDONLY": "syscall", - "syscall.MS_REC": "syscall", - "syscall.MS_RELATIME": "syscall", - "syscall.MS_REMOUNT": "syscall", - "syscall.MS_RMT_MASK": "syscall", - "syscall.MS_SHARED": "syscall", - "syscall.MS_SILENT": "syscall", - "syscall.MS_SLAVE": "syscall", - "syscall.MS_STRICTATIME": "syscall", - "syscall.MS_SYNC": "syscall", - "syscall.MS_SYNCHRONOUS": "syscall", - "syscall.MS_UNBINDABLE": "syscall", - "syscall.Madvise": "syscall", - "syscall.MapViewOfFile": "syscall", - "syscall.MaxTokenInfoClass": "syscall", - "syscall.Mclpool": "syscall", - "syscall.MibIfRow": "syscall", - "syscall.Mkdir": "syscall", - "syscall.Mkdirat": "syscall", - "syscall.Mkfifo": "syscall", - "syscall.Mknod": "syscall", - "syscall.Mknodat": "syscall", - "syscall.Mlock": "syscall", - "syscall.Mlockall": "syscall", - "syscall.Mmap": "syscall", - "syscall.Mount": "syscall", - "syscall.MoveFile": "syscall", - "syscall.Mprotect": "syscall", - "syscall.Msghdr": "syscall", - "syscall.Munlock": "syscall", - "syscall.Munlockall": "syscall", - "syscall.Munmap": "syscall", - "syscall.MustLoadDLL": "syscall", - "syscall.NAME_MAX": "syscall", - "syscall.NETLINK_ADD_MEMBERSHIP": "syscall", - "syscall.NETLINK_AUDIT": "syscall", - "syscall.NETLINK_BROADCAST_ERROR": "syscall", - "syscall.NETLINK_CONNECTOR": "syscall", - "syscall.NETLINK_DNRTMSG": "syscall", - "syscall.NETLINK_DROP_MEMBERSHIP": "syscall", - "syscall.NETLINK_ECRYPTFS": "syscall", - "syscall.NETLINK_FIB_LOOKUP": "syscall", - "syscall.NETLINK_FIREWALL": "syscall", - "syscall.NETLINK_GENERIC": "syscall", - "syscall.NETLINK_INET_DIAG": "syscall", - "syscall.NETLINK_IP6_FW": "syscall", - "syscall.NETLINK_ISCSI": "syscall", - "syscall.NETLINK_KOBJECT_UEVENT": "syscall", - "syscall.NETLINK_NETFILTER": "syscall", - "syscall.NETLINK_NFLOG": "syscall", - "syscall.NETLINK_NO_ENOBUFS": "syscall", - "syscall.NETLINK_PKTINFO": "syscall", - "syscall.NETLINK_RDMA": "syscall", - "syscall.NETLINK_ROUTE": "syscall", - "syscall.NETLINK_SCSITRANSPORT": "syscall", - "syscall.NETLINK_SELINUX": "syscall", - "syscall.NETLINK_UNUSED": "syscall", - "syscall.NETLINK_USERSOCK": "syscall", - "syscall.NETLINK_XFRM": "syscall", - "syscall.NET_RT_DUMP": "syscall", - "syscall.NET_RT_DUMP2": "syscall", - "syscall.NET_RT_FLAGS": "syscall", - "syscall.NET_RT_IFLIST": "syscall", - "syscall.NET_RT_IFLIST2": "syscall", - "syscall.NET_RT_IFLISTL": "syscall", - "syscall.NET_RT_IFMALIST": "syscall", - "syscall.NET_RT_MAXID": "syscall", - "syscall.NET_RT_OIFLIST": "syscall", - "syscall.NET_RT_OOIFLIST": "syscall", - "syscall.NET_RT_STAT": "syscall", - "syscall.NET_RT_STATS": "syscall", - "syscall.NET_RT_TABLE": "syscall", - "syscall.NET_RT_TRASH": "syscall", - "syscall.NLA_ALIGNTO": "syscall", - "syscall.NLA_F_NESTED": "syscall", - "syscall.NLA_F_NET_BYTEORDER": "syscall", - "syscall.NLA_HDRLEN": "syscall", - "syscall.NLMSG_ALIGNTO": "syscall", - "syscall.NLMSG_DONE": "syscall", - "syscall.NLMSG_ERROR": "syscall", - "syscall.NLMSG_HDRLEN": "syscall", - "syscall.NLMSG_MIN_TYPE": "syscall", - "syscall.NLMSG_NOOP": "syscall", - "syscall.NLMSG_OVERRUN": "syscall", - "syscall.NLM_F_ACK": "syscall", - "syscall.NLM_F_APPEND": "syscall", - "syscall.NLM_F_ATOMIC": "syscall", - "syscall.NLM_F_CREATE": "syscall", - "syscall.NLM_F_DUMP": "syscall", - "syscall.NLM_F_ECHO": "syscall", - "syscall.NLM_F_EXCL": "syscall", - "syscall.NLM_F_MATCH": "syscall", - "syscall.NLM_F_MULTI": "syscall", - "syscall.NLM_F_REPLACE": "syscall", - "syscall.NLM_F_REQUEST": "syscall", - "syscall.NLM_F_ROOT": "syscall", - "syscall.NOFLSH": "syscall", - "syscall.NOTE_ABSOLUTE": "syscall", - "syscall.NOTE_ATTRIB": "syscall", - "syscall.NOTE_CHILD": "syscall", - "syscall.NOTE_DELETE": "syscall", - "syscall.NOTE_EOF": "syscall", - "syscall.NOTE_EXEC": "syscall", - "syscall.NOTE_EXIT": "syscall", - "syscall.NOTE_EXITSTATUS": "syscall", - "syscall.NOTE_EXTEND": "syscall", - "syscall.NOTE_FFAND": "syscall", - "syscall.NOTE_FFCOPY": "syscall", - "syscall.NOTE_FFCTRLMASK": "syscall", - "syscall.NOTE_FFLAGSMASK": "syscall", - "syscall.NOTE_FFNOP": "syscall", - "syscall.NOTE_FFOR": "syscall", - "syscall.NOTE_FORK": "syscall", - "syscall.NOTE_LINK": "syscall", - "syscall.NOTE_LOWAT": "syscall", - "syscall.NOTE_NONE": "syscall", - "syscall.NOTE_NSECONDS": "syscall", - "syscall.NOTE_PCTRLMASK": "syscall", - "syscall.NOTE_PDATAMASK": "syscall", - "syscall.NOTE_REAP": "syscall", - "syscall.NOTE_RENAME": "syscall", - "syscall.NOTE_RESOURCEEND": "syscall", - "syscall.NOTE_REVOKE": "syscall", - "syscall.NOTE_SECONDS": "syscall", - "syscall.NOTE_SIGNAL": "syscall", - "syscall.NOTE_TRACK": "syscall", - "syscall.NOTE_TRACKERR": "syscall", - "syscall.NOTE_TRIGGER": "syscall", - "syscall.NOTE_TRUNCATE": "syscall", - "syscall.NOTE_USECONDS": "syscall", - "syscall.NOTE_VM_ERROR": "syscall", - "syscall.NOTE_VM_PRESSURE": "syscall", - "syscall.NOTE_VM_PRESSURE_SUDDEN_TERMINATE": "syscall", - "syscall.NOTE_VM_PRESSURE_TERMINATE": "syscall", - "syscall.NOTE_WRITE": "syscall", - "syscall.NameCanonical": "syscall", - "syscall.NameCanonicalEx": "syscall", - "syscall.NameDisplay": "syscall", - "syscall.NameDnsDomain": "syscall", - "syscall.NameFullyQualifiedDN": "syscall", - "syscall.NameSamCompatible": "syscall", - "syscall.NameServicePrincipal": "syscall", - "syscall.NameUniqueId": "syscall", - "syscall.NameUnknown": "syscall", - "syscall.NameUserPrincipal": "syscall", - "syscall.Nanosleep": "syscall", - "syscall.NetApiBufferFree": "syscall", - "syscall.NetGetJoinInformation": "syscall", - "syscall.NetSetupDomainName": "syscall", - "syscall.NetSetupUnjoined": "syscall", - "syscall.NetSetupUnknownStatus": "syscall", - "syscall.NetSetupWorkgroupName": "syscall", - "syscall.NetUserGetInfo": "syscall", - "syscall.NetlinkMessage": "syscall", - "syscall.NetlinkRIB": "syscall", - "syscall.NetlinkRouteAttr": "syscall", - "syscall.NetlinkRouteRequest": "syscall", - "syscall.NewCallback": "syscall", - "syscall.NewCallbackCDecl": "syscall", - "syscall.NewLazyDLL": "syscall", - "syscall.NlAttr": "syscall", - "syscall.NlMsgerr": "syscall", - "syscall.NlMsghdr": "syscall", - "syscall.NsecToFiletime": "syscall", - "syscall.NsecToTimespec": "syscall", - "syscall.NsecToTimeval": "syscall", - "syscall.Ntohs": "syscall", - "syscall.OCRNL": "syscall", - "syscall.OFDEL": "syscall", - "syscall.OFILL": "syscall", - "syscall.OFIOGETBMAP": "syscall", - "syscall.OID_PKIX_KP_SERVER_AUTH": "syscall", - "syscall.OID_SERVER_GATED_CRYPTO": "syscall", - "syscall.OID_SGC_NETSCAPE": "syscall", - "syscall.OLCUC": "syscall", - "syscall.ONLCR": "syscall", - "syscall.ONLRET": "syscall", - "syscall.ONOCR": "syscall", - "syscall.ONOEOT": "syscall", - "syscall.OPEN_ALWAYS": "syscall", - "syscall.OPEN_EXISTING": "syscall", - "syscall.OPOST": "syscall", - "syscall.O_ACCMODE": "syscall", - "syscall.O_ALERT": "syscall", - "syscall.O_ALT_IO": "syscall", - "syscall.O_APPEND": "syscall", - "syscall.O_ASYNC": "syscall", - "syscall.O_CLOEXEC": "syscall", - "syscall.O_CREAT": "syscall", - "syscall.O_DIRECT": "syscall", - "syscall.O_DIRECTORY": "syscall", - "syscall.O_DSYNC": "syscall", - "syscall.O_EVTONLY": "syscall", - "syscall.O_EXCL": "syscall", - "syscall.O_EXEC": "syscall", - "syscall.O_EXLOCK": "syscall", - "syscall.O_FSYNC": "syscall", - "syscall.O_LARGEFILE": "syscall", - "syscall.O_NDELAY": "syscall", - "syscall.O_NOATIME": "syscall", - "syscall.O_NOCTTY": "syscall", - "syscall.O_NOFOLLOW": "syscall", - "syscall.O_NONBLOCK": "syscall", - "syscall.O_NOSIGPIPE": "syscall", - "syscall.O_POPUP": "syscall", - "syscall.O_RDONLY": "syscall", - "syscall.O_RDWR": "syscall", - "syscall.O_RSYNC": "syscall", - "syscall.O_SHLOCK": "syscall", - "syscall.O_SYMLINK": "syscall", - "syscall.O_SYNC": "syscall", - "syscall.O_TRUNC": "syscall", - "syscall.O_TTY_INIT": "syscall", - "syscall.O_WRONLY": "syscall", - "syscall.Open": "syscall", - "syscall.OpenCurrentProcessToken": "syscall", - "syscall.OpenProcess": "syscall", - "syscall.OpenProcessToken": "syscall", - "syscall.Openat": "syscall", - "syscall.Overlapped": "syscall", - "syscall.PACKET_ADD_MEMBERSHIP": "syscall", - "syscall.PACKET_BROADCAST": "syscall", - "syscall.PACKET_DROP_MEMBERSHIP": "syscall", - "syscall.PACKET_FASTROUTE": "syscall", - "syscall.PACKET_HOST": "syscall", - "syscall.PACKET_LOOPBACK": "syscall", - "syscall.PACKET_MR_ALLMULTI": "syscall", - "syscall.PACKET_MR_MULTICAST": "syscall", - "syscall.PACKET_MR_PROMISC": "syscall", - "syscall.PACKET_MULTICAST": "syscall", - "syscall.PACKET_OTHERHOST": "syscall", - "syscall.PACKET_OUTGOING": "syscall", - "syscall.PACKET_RECV_OUTPUT": "syscall", - "syscall.PACKET_RX_RING": "syscall", - "syscall.PACKET_STATISTICS": "syscall", - "syscall.PAGE_EXECUTE_READ": "syscall", - "syscall.PAGE_EXECUTE_READWRITE": "syscall", - "syscall.PAGE_EXECUTE_WRITECOPY": "syscall", - "syscall.PAGE_READONLY": "syscall", - "syscall.PAGE_READWRITE": "syscall", - "syscall.PAGE_WRITECOPY": "syscall", - "syscall.PARENB": "syscall", - "syscall.PARMRK": "syscall", - "syscall.PARODD": "syscall", - "syscall.PENDIN": "syscall", - "syscall.PFL_HIDDEN": "syscall", - "syscall.PFL_MATCHES_PROTOCOL_ZERO": "syscall", - "syscall.PFL_MULTIPLE_PROTO_ENTRIES": "syscall", - "syscall.PFL_NETWORKDIRECT_PROVIDER": "syscall", - "syscall.PFL_RECOMMENDED_PROTO_ENTRY": "syscall", - "syscall.PF_FLUSH": "syscall", - "syscall.PKCS_7_ASN_ENCODING": "syscall", - "syscall.PMC5_PIPELINE_FLUSH": "syscall", - "syscall.PRIO_PGRP": "syscall", - "syscall.PRIO_PROCESS": "syscall", - "syscall.PRIO_USER": "syscall", - "syscall.PRI_IOFLUSH": "syscall", - "syscall.PROCESS_QUERY_INFORMATION": "syscall", - "syscall.PROCESS_TERMINATE": "syscall", - "syscall.PROT_EXEC": "syscall", - "syscall.PROT_GROWSDOWN": "syscall", - "syscall.PROT_GROWSUP": "syscall", - "syscall.PROT_NONE": "syscall", - "syscall.PROT_READ": "syscall", - "syscall.PROT_WRITE": "syscall", - "syscall.PROV_DH_SCHANNEL": "syscall", - "syscall.PROV_DSS": "syscall", - "syscall.PROV_DSS_DH": "syscall", - "syscall.PROV_EC_ECDSA_FULL": "syscall", - "syscall.PROV_EC_ECDSA_SIG": "syscall", - "syscall.PROV_EC_ECNRA_FULL": "syscall", - "syscall.PROV_EC_ECNRA_SIG": "syscall", - "syscall.PROV_FORTEZZA": "syscall", - "syscall.PROV_INTEL_SEC": "syscall", - "syscall.PROV_MS_EXCHANGE": "syscall", - "syscall.PROV_REPLACE_OWF": "syscall", - "syscall.PROV_RNG": "syscall", - "syscall.PROV_RSA_AES": "syscall", - "syscall.PROV_RSA_FULL": "syscall", - "syscall.PROV_RSA_SCHANNEL": "syscall", - "syscall.PROV_RSA_SIG": "syscall", - "syscall.PROV_SPYRUS_LYNKS": "syscall", - "syscall.PROV_SSL": "syscall", - "syscall.PR_CAPBSET_DROP": "syscall", - "syscall.PR_CAPBSET_READ": "syscall", - "syscall.PR_CLEAR_SECCOMP_FILTER": "syscall", - "syscall.PR_ENDIAN_BIG": "syscall", - "syscall.PR_ENDIAN_LITTLE": "syscall", - "syscall.PR_ENDIAN_PPC_LITTLE": "syscall", - "syscall.PR_FPEMU_NOPRINT": "syscall", - "syscall.PR_FPEMU_SIGFPE": "syscall", - "syscall.PR_FP_EXC_ASYNC": "syscall", - "syscall.PR_FP_EXC_DISABLED": "syscall", - "syscall.PR_FP_EXC_DIV": "syscall", - "syscall.PR_FP_EXC_INV": "syscall", - "syscall.PR_FP_EXC_NONRECOV": "syscall", - "syscall.PR_FP_EXC_OVF": "syscall", - "syscall.PR_FP_EXC_PRECISE": "syscall", - "syscall.PR_FP_EXC_RES": "syscall", - "syscall.PR_FP_EXC_SW_ENABLE": "syscall", - "syscall.PR_FP_EXC_UND": "syscall", - "syscall.PR_GET_DUMPABLE": "syscall", - "syscall.PR_GET_ENDIAN": "syscall", - "syscall.PR_GET_FPEMU": "syscall", - "syscall.PR_GET_FPEXC": "syscall", - "syscall.PR_GET_KEEPCAPS": "syscall", - "syscall.PR_GET_NAME": "syscall", - "syscall.PR_GET_PDEATHSIG": "syscall", - "syscall.PR_GET_SECCOMP": "syscall", - "syscall.PR_GET_SECCOMP_FILTER": "syscall", - "syscall.PR_GET_SECUREBITS": "syscall", - "syscall.PR_GET_TIMERSLACK": "syscall", - "syscall.PR_GET_TIMING": "syscall", - "syscall.PR_GET_TSC": "syscall", - "syscall.PR_GET_UNALIGN": "syscall", - "syscall.PR_MCE_KILL": "syscall", - "syscall.PR_MCE_KILL_CLEAR": "syscall", - "syscall.PR_MCE_KILL_DEFAULT": "syscall", - "syscall.PR_MCE_KILL_EARLY": "syscall", - "syscall.PR_MCE_KILL_GET": "syscall", - "syscall.PR_MCE_KILL_LATE": "syscall", - "syscall.PR_MCE_KILL_SET": "syscall", - "syscall.PR_SECCOMP_FILTER_EVENT": "syscall", - "syscall.PR_SECCOMP_FILTER_SYSCALL": "syscall", - "syscall.PR_SET_DUMPABLE": "syscall", - "syscall.PR_SET_ENDIAN": "syscall", - "syscall.PR_SET_FPEMU": "syscall", - "syscall.PR_SET_FPEXC": "syscall", - "syscall.PR_SET_KEEPCAPS": "syscall", - "syscall.PR_SET_NAME": "syscall", - "syscall.PR_SET_PDEATHSIG": "syscall", - "syscall.PR_SET_PTRACER": "syscall", - "syscall.PR_SET_SECCOMP": "syscall", - "syscall.PR_SET_SECCOMP_FILTER": "syscall", - "syscall.PR_SET_SECUREBITS": "syscall", - "syscall.PR_SET_TIMERSLACK": "syscall", - "syscall.PR_SET_TIMING": "syscall", - "syscall.PR_SET_TSC": "syscall", - "syscall.PR_SET_UNALIGN": "syscall", - "syscall.PR_TASK_PERF_EVENTS_DISABLE": "syscall", - "syscall.PR_TASK_PERF_EVENTS_ENABLE": "syscall", - "syscall.PR_TIMING_STATISTICAL": "syscall", - "syscall.PR_TIMING_TIMESTAMP": "syscall", - "syscall.PR_TSC_ENABLE": "syscall", - "syscall.PR_TSC_SIGSEGV": "syscall", - "syscall.PR_UNALIGN_NOPRINT": "syscall", - "syscall.PR_UNALIGN_SIGBUS": "syscall", - "syscall.PTRACE_ARCH_PRCTL": "syscall", - "syscall.PTRACE_ATTACH": "syscall", - "syscall.PTRACE_CONT": "syscall", - "syscall.PTRACE_DETACH": "syscall", - "syscall.PTRACE_EVENT_CLONE": "syscall", - "syscall.PTRACE_EVENT_EXEC": "syscall", - "syscall.PTRACE_EVENT_EXIT": "syscall", - "syscall.PTRACE_EVENT_FORK": "syscall", - "syscall.PTRACE_EVENT_VFORK": "syscall", - "syscall.PTRACE_EVENT_VFORK_DONE": "syscall", - "syscall.PTRACE_GETCRUNCHREGS": "syscall", - "syscall.PTRACE_GETEVENTMSG": "syscall", - "syscall.PTRACE_GETFPREGS": "syscall", - "syscall.PTRACE_GETFPXREGS": "syscall", - "syscall.PTRACE_GETHBPREGS": "syscall", - "syscall.PTRACE_GETREGS": "syscall", - "syscall.PTRACE_GETREGSET": "syscall", - "syscall.PTRACE_GETSIGINFO": "syscall", - "syscall.PTRACE_GETVFPREGS": "syscall", - "syscall.PTRACE_GETWMMXREGS": "syscall", - "syscall.PTRACE_GET_THREAD_AREA": "syscall", - "syscall.PTRACE_KILL": "syscall", - "syscall.PTRACE_OLDSETOPTIONS": "syscall", - "syscall.PTRACE_O_MASK": "syscall", - "syscall.PTRACE_O_TRACECLONE": "syscall", - "syscall.PTRACE_O_TRACEEXEC": "syscall", - "syscall.PTRACE_O_TRACEEXIT": "syscall", - "syscall.PTRACE_O_TRACEFORK": "syscall", - "syscall.PTRACE_O_TRACESYSGOOD": "syscall", - "syscall.PTRACE_O_TRACEVFORK": "syscall", - "syscall.PTRACE_O_TRACEVFORKDONE": "syscall", - "syscall.PTRACE_PEEKDATA": "syscall", - "syscall.PTRACE_PEEKTEXT": "syscall", - "syscall.PTRACE_PEEKUSR": "syscall", - "syscall.PTRACE_POKEDATA": "syscall", - "syscall.PTRACE_POKETEXT": "syscall", - "syscall.PTRACE_POKEUSR": "syscall", - "syscall.PTRACE_SETCRUNCHREGS": "syscall", - "syscall.PTRACE_SETFPREGS": "syscall", - "syscall.PTRACE_SETFPXREGS": "syscall", - "syscall.PTRACE_SETHBPREGS": "syscall", - "syscall.PTRACE_SETOPTIONS": "syscall", - "syscall.PTRACE_SETREGS": "syscall", - "syscall.PTRACE_SETREGSET": "syscall", - "syscall.PTRACE_SETSIGINFO": "syscall", - "syscall.PTRACE_SETVFPREGS": "syscall", - "syscall.PTRACE_SETWMMXREGS": "syscall", - "syscall.PTRACE_SET_SYSCALL": "syscall", - "syscall.PTRACE_SET_THREAD_AREA": "syscall", - "syscall.PTRACE_SINGLEBLOCK": "syscall", - "syscall.PTRACE_SINGLESTEP": "syscall", - "syscall.PTRACE_SYSCALL": "syscall", - "syscall.PTRACE_SYSEMU": "syscall", - "syscall.PTRACE_SYSEMU_SINGLESTEP": "syscall", - "syscall.PTRACE_TRACEME": "syscall", - "syscall.PT_ATTACH": "syscall", - "syscall.PT_ATTACHEXC": "syscall", - "syscall.PT_CONTINUE": "syscall", - "syscall.PT_DATA_ADDR": "syscall", - "syscall.PT_DENY_ATTACH": "syscall", - "syscall.PT_DETACH": "syscall", - "syscall.PT_FIRSTMACH": "syscall", - "syscall.PT_FORCEQUOTA": "syscall", - "syscall.PT_KILL": "syscall", - "syscall.PT_MASK": "syscall", - "syscall.PT_READ_D": "syscall", - "syscall.PT_READ_I": "syscall", - "syscall.PT_READ_U": "syscall", - "syscall.PT_SIGEXC": "syscall", - "syscall.PT_STEP": "syscall", - "syscall.PT_TEXT_ADDR": "syscall", - "syscall.PT_TEXT_END_ADDR": "syscall", - "syscall.PT_THUPDATE": "syscall", - "syscall.PT_TRACE_ME": "syscall", - "syscall.PT_WRITE_D": "syscall", - "syscall.PT_WRITE_I": "syscall", - "syscall.PT_WRITE_U": "syscall", - "syscall.ParseDirent": "syscall", - "syscall.ParseNetlinkMessage": "syscall", - "syscall.ParseNetlinkRouteAttr": "syscall", - "syscall.ParseRoutingMessage": "syscall", - "syscall.ParseRoutingSockaddr": "syscall", - "syscall.ParseSocketControlMessage": "syscall", - "syscall.ParseUnixCredentials": "syscall", - "syscall.ParseUnixRights": "syscall", - "syscall.PathMax": "syscall", - "syscall.Pathconf": "syscall", - "syscall.Pause": "syscall", - "syscall.Pipe": "syscall", - "syscall.Pipe2": "syscall", - "syscall.PivotRoot": "syscall", - "syscall.PostQueuedCompletionStatus": "syscall", - "syscall.Pread": "syscall", - "syscall.Proc": "syscall", - "syscall.ProcAttr": "syscall", - "syscall.Process32First": "syscall", - "syscall.Process32Next": "syscall", - "syscall.ProcessEntry32": "syscall", - "syscall.ProcessInformation": "syscall", - "syscall.Protoent": "syscall", - "syscall.PtraceAttach": "syscall", - "syscall.PtraceCont": "syscall", - "syscall.PtraceDetach": "syscall", - "syscall.PtraceGetEventMsg": "syscall", - "syscall.PtraceGetRegs": "syscall", - "syscall.PtracePeekData": "syscall", - "syscall.PtracePeekText": "syscall", - "syscall.PtracePokeData": "syscall", - "syscall.PtracePokeText": "syscall", - "syscall.PtraceRegs": "syscall", - "syscall.PtraceSetOptions": "syscall", - "syscall.PtraceSetRegs": "syscall", - "syscall.PtraceSingleStep": "syscall", - "syscall.PtraceSyscall": "syscall", - "syscall.Pwrite": "syscall", - "syscall.REG_BINARY": "syscall", - "syscall.REG_DWORD": "syscall", - "syscall.REG_DWORD_BIG_ENDIAN": "syscall", - "syscall.REG_DWORD_LITTLE_ENDIAN": "syscall", - "syscall.REG_EXPAND_SZ": "syscall", - "syscall.REG_FULL_RESOURCE_DESCRIPTOR": "syscall", - "syscall.REG_LINK": "syscall", - "syscall.REG_MULTI_SZ": "syscall", - "syscall.REG_NONE": "syscall", - "syscall.REG_QWORD": "syscall", - "syscall.REG_QWORD_LITTLE_ENDIAN": "syscall", - "syscall.REG_RESOURCE_LIST": "syscall", - "syscall.REG_RESOURCE_REQUIREMENTS_LIST": "syscall", - "syscall.REG_SZ": "syscall", - "syscall.RLIMIT_AS": "syscall", - "syscall.RLIMIT_CORE": "syscall", - "syscall.RLIMIT_CPU": "syscall", - "syscall.RLIMIT_DATA": "syscall", - "syscall.RLIMIT_FSIZE": "syscall", - "syscall.RLIMIT_NOFILE": "syscall", - "syscall.RLIMIT_STACK": "syscall", - "syscall.RLIM_INFINITY": "syscall", - "syscall.RTAX_ADVMSS": "syscall", - "syscall.RTAX_AUTHOR": "syscall", - "syscall.RTAX_BRD": "syscall", - "syscall.RTAX_CWND": "syscall", - "syscall.RTAX_DST": "syscall", - "syscall.RTAX_FEATURES": "syscall", - "syscall.RTAX_FEATURE_ALLFRAG": "syscall", - "syscall.RTAX_FEATURE_ECN": "syscall", - "syscall.RTAX_FEATURE_SACK": "syscall", - "syscall.RTAX_FEATURE_TIMESTAMP": "syscall", - "syscall.RTAX_GATEWAY": "syscall", - "syscall.RTAX_GENMASK": "syscall", - "syscall.RTAX_HOPLIMIT": "syscall", - "syscall.RTAX_IFA": "syscall", - "syscall.RTAX_IFP": "syscall", - "syscall.RTAX_INITCWND": "syscall", - "syscall.RTAX_INITRWND": "syscall", - "syscall.RTAX_LABEL": "syscall", - "syscall.RTAX_LOCK": "syscall", - "syscall.RTAX_MAX": "syscall", - "syscall.RTAX_MTU": "syscall", - "syscall.RTAX_NETMASK": "syscall", - "syscall.RTAX_REORDERING": "syscall", - "syscall.RTAX_RTO_MIN": "syscall", - "syscall.RTAX_RTT": "syscall", - "syscall.RTAX_RTTVAR": "syscall", - "syscall.RTAX_SRC": "syscall", - "syscall.RTAX_SRCMASK": "syscall", - "syscall.RTAX_SSTHRESH": "syscall", - "syscall.RTAX_TAG": "syscall", - "syscall.RTAX_UNSPEC": "syscall", - "syscall.RTAX_WINDOW": "syscall", - "syscall.RTA_ALIGNTO": "syscall", - "syscall.RTA_AUTHOR": "syscall", - "syscall.RTA_BRD": "syscall", - "syscall.RTA_CACHEINFO": "syscall", - "syscall.RTA_DST": "syscall", - "syscall.RTA_FLOW": "syscall", - "syscall.RTA_GATEWAY": "syscall", - "syscall.RTA_GENMASK": "syscall", - "syscall.RTA_IFA": "syscall", - "syscall.RTA_IFP": "syscall", - "syscall.RTA_IIF": "syscall", - "syscall.RTA_LABEL": "syscall", - "syscall.RTA_MAX": "syscall", - "syscall.RTA_METRICS": "syscall", - "syscall.RTA_MULTIPATH": "syscall", - "syscall.RTA_NETMASK": "syscall", - "syscall.RTA_OIF": "syscall", - "syscall.RTA_PREFSRC": "syscall", - "syscall.RTA_PRIORITY": "syscall", - "syscall.RTA_SRC": "syscall", - "syscall.RTA_SRCMASK": "syscall", - "syscall.RTA_TABLE": "syscall", - "syscall.RTA_TAG": "syscall", - "syscall.RTA_UNSPEC": "syscall", - "syscall.RTCF_DIRECTSRC": "syscall", - "syscall.RTCF_DOREDIRECT": "syscall", - "syscall.RTCF_LOG": "syscall", - "syscall.RTCF_MASQ": "syscall", - "syscall.RTCF_NAT": "syscall", - "syscall.RTCF_VALVE": "syscall", - "syscall.RTF_ADDRCLASSMASK": "syscall", - "syscall.RTF_ADDRCONF": "syscall", - "syscall.RTF_ALLONLINK": "syscall", - "syscall.RTF_ANNOUNCE": "syscall", - "syscall.RTF_BLACKHOLE": "syscall", - "syscall.RTF_BROADCAST": "syscall", - "syscall.RTF_CACHE": "syscall", - "syscall.RTF_CLONED": "syscall", - "syscall.RTF_CLONING": "syscall", - "syscall.RTF_CONDEMNED": "syscall", - "syscall.RTF_DEFAULT": "syscall", - "syscall.RTF_DELCLONE": "syscall", - "syscall.RTF_DONE": "syscall", - "syscall.RTF_DYNAMIC": "syscall", - "syscall.RTF_FLOW": "syscall", - "syscall.RTF_FMASK": "syscall", - "syscall.RTF_GATEWAY": "syscall", - "syscall.RTF_GWFLAG_COMPAT": "syscall", - "syscall.RTF_HOST": "syscall", - "syscall.RTF_IFREF": "syscall", - "syscall.RTF_IFSCOPE": "syscall", - "syscall.RTF_INTERFACE": "syscall", - "syscall.RTF_IRTT": "syscall", - "syscall.RTF_LINKRT": "syscall", - "syscall.RTF_LLDATA": "syscall", - "syscall.RTF_LLINFO": "syscall", - "syscall.RTF_LOCAL": "syscall", - "syscall.RTF_MASK": "syscall", - "syscall.RTF_MODIFIED": "syscall", - "syscall.RTF_MPATH": "syscall", - "syscall.RTF_MPLS": "syscall", - "syscall.RTF_MSS": "syscall", - "syscall.RTF_MTU": "syscall", - "syscall.RTF_MULTICAST": "syscall", - "syscall.RTF_NAT": "syscall", - "syscall.RTF_NOFORWARD": "syscall", - "syscall.RTF_NONEXTHOP": "syscall", - "syscall.RTF_NOPMTUDISC": "syscall", - "syscall.RTF_PERMANENT_ARP": "syscall", - "syscall.RTF_PINNED": "syscall", - "syscall.RTF_POLICY": "syscall", - "syscall.RTF_PRCLONING": "syscall", - "syscall.RTF_PROTO1": "syscall", - "syscall.RTF_PROTO2": "syscall", - "syscall.RTF_PROTO3": "syscall", - "syscall.RTF_REINSTATE": "syscall", - "syscall.RTF_REJECT": "syscall", - "syscall.RTF_RNH_LOCKED": "syscall", - "syscall.RTF_SOURCE": "syscall", - "syscall.RTF_SRC": "syscall", - "syscall.RTF_STATIC": "syscall", - "syscall.RTF_STICKY": "syscall", - "syscall.RTF_THROW": "syscall", - "syscall.RTF_TUNNEL": "syscall", - "syscall.RTF_UP": "syscall", - "syscall.RTF_USETRAILERS": "syscall", - "syscall.RTF_WASCLONED": "syscall", - "syscall.RTF_WINDOW": "syscall", - "syscall.RTF_XRESOLVE": "syscall", - "syscall.RTM_ADD": "syscall", - "syscall.RTM_BASE": "syscall", - "syscall.RTM_CHANGE": "syscall", - "syscall.RTM_CHGADDR": "syscall", - "syscall.RTM_DELACTION": "syscall", - "syscall.RTM_DELADDR": "syscall", - "syscall.RTM_DELADDRLABEL": "syscall", - "syscall.RTM_DELETE": "syscall", - "syscall.RTM_DELLINK": "syscall", - "syscall.RTM_DELMADDR": "syscall", - "syscall.RTM_DELNEIGH": "syscall", - "syscall.RTM_DELQDISC": "syscall", - "syscall.RTM_DELROUTE": "syscall", - "syscall.RTM_DELRULE": "syscall", - "syscall.RTM_DELTCLASS": "syscall", - "syscall.RTM_DELTFILTER": "syscall", - "syscall.RTM_DESYNC": "syscall", - "syscall.RTM_F_CLONED": "syscall", - "syscall.RTM_F_EQUALIZE": "syscall", - "syscall.RTM_F_NOTIFY": "syscall", - "syscall.RTM_F_PREFIX": "syscall", - "syscall.RTM_GET": "syscall", - "syscall.RTM_GET2": "syscall", - "syscall.RTM_GETACTION": "syscall", - "syscall.RTM_GETADDR": "syscall", - "syscall.RTM_GETADDRLABEL": "syscall", - "syscall.RTM_GETANYCAST": "syscall", - "syscall.RTM_GETDCB": "syscall", - "syscall.RTM_GETLINK": "syscall", - "syscall.RTM_GETMULTICAST": "syscall", - "syscall.RTM_GETNEIGH": "syscall", - "syscall.RTM_GETNEIGHTBL": "syscall", - "syscall.RTM_GETQDISC": "syscall", - "syscall.RTM_GETROUTE": "syscall", - "syscall.RTM_GETRULE": "syscall", - "syscall.RTM_GETTCLASS": "syscall", - "syscall.RTM_GETTFILTER": "syscall", - "syscall.RTM_IEEE80211": "syscall", - "syscall.RTM_IFANNOUNCE": "syscall", - "syscall.RTM_IFINFO": "syscall", - "syscall.RTM_IFINFO2": "syscall", - "syscall.RTM_LLINFO_UPD": "syscall", - "syscall.RTM_LOCK": "syscall", - "syscall.RTM_LOSING": "syscall", - "syscall.RTM_MAX": "syscall", - "syscall.RTM_MAXSIZE": "syscall", - "syscall.RTM_MISS": "syscall", - "syscall.RTM_NEWACTION": "syscall", - "syscall.RTM_NEWADDR": "syscall", - "syscall.RTM_NEWADDRLABEL": "syscall", - "syscall.RTM_NEWLINK": "syscall", - "syscall.RTM_NEWMADDR": "syscall", - "syscall.RTM_NEWMADDR2": "syscall", - "syscall.RTM_NEWNDUSEROPT": "syscall", - "syscall.RTM_NEWNEIGH": "syscall", - "syscall.RTM_NEWNEIGHTBL": "syscall", - "syscall.RTM_NEWPREFIX": "syscall", - "syscall.RTM_NEWQDISC": "syscall", - "syscall.RTM_NEWROUTE": "syscall", - "syscall.RTM_NEWRULE": "syscall", - "syscall.RTM_NEWTCLASS": "syscall", - "syscall.RTM_NEWTFILTER": "syscall", - "syscall.RTM_NR_FAMILIES": "syscall", - "syscall.RTM_NR_MSGTYPES": "syscall", - "syscall.RTM_OIFINFO": "syscall", - "syscall.RTM_OLDADD": "syscall", - "syscall.RTM_OLDDEL": "syscall", - "syscall.RTM_OOIFINFO": "syscall", - "syscall.RTM_REDIRECT": "syscall", - "syscall.RTM_RESOLVE": "syscall", - "syscall.RTM_RTTUNIT": "syscall", - "syscall.RTM_SETDCB": "syscall", - "syscall.RTM_SETGATE": "syscall", - "syscall.RTM_SETLINK": "syscall", - "syscall.RTM_SETNEIGHTBL": "syscall", - "syscall.RTM_VERSION": "syscall", - "syscall.RTNH_ALIGNTO": "syscall", - "syscall.RTNH_F_DEAD": "syscall", - "syscall.RTNH_F_ONLINK": "syscall", - "syscall.RTNH_F_PERVASIVE": "syscall", - "syscall.RTNLGRP_IPV4_IFADDR": "syscall", - "syscall.RTNLGRP_IPV4_MROUTE": "syscall", - "syscall.RTNLGRP_IPV4_ROUTE": "syscall", - "syscall.RTNLGRP_IPV4_RULE": "syscall", - "syscall.RTNLGRP_IPV6_IFADDR": "syscall", - "syscall.RTNLGRP_IPV6_IFINFO": "syscall", - "syscall.RTNLGRP_IPV6_MROUTE": "syscall", - "syscall.RTNLGRP_IPV6_PREFIX": "syscall", - "syscall.RTNLGRP_IPV6_ROUTE": "syscall", - "syscall.RTNLGRP_IPV6_RULE": "syscall", - "syscall.RTNLGRP_LINK": "syscall", - "syscall.RTNLGRP_ND_USEROPT": "syscall", - "syscall.RTNLGRP_NEIGH": "syscall", - "syscall.RTNLGRP_NONE": "syscall", - "syscall.RTNLGRP_NOTIFY": "syscall", - "syscall.RTNLGRP_TC": "syscall", - "syscall.RTN_ANYCAST": "syscall", - "syscall.RTN_BLACKHOLE": "syscall", - "syscall.RTN_BROADCAST": "syscall", - "syscall.RTN_LOCAL": "syscall", - "syscall.RTN_MAX": "syscall", - "syscall.RTN_MULTICAST": "syscall", - "syscall.RTN_NAT": "syscall", - "syscall.RTN_PROHIBIT": "syscall", - "syscall.RTN_THROW": "syscall", - "syscall.RTN_UNICAST": "syscall", - "syscall.RTN_UNREACHABLE": "syscall", - "syscall.RTN_UNSPEC": "syscall", - "syscall.RTN_XRESOLVE": "syscall", - "syscall.RTPROT_BIRD": "syscall", - "syscall.RTPROT_BOOT": "syscall", - "syscall.RTPROT_DHCP": "syscall", - "syscall.RTPROT_DNROUTED": "syscall", - "syscall.RTPROT_GATED": "syscall", - "syscall.RTPROT_KERNEL": "syscall", - "syscall.RTPROT_MRT": "syscall", - "syscall.RTPROT_NTK": "syscall", - "syscall.RTPROT_RA": "syscall", - "syscall.RTPROT_REDIRECT": "syscall", - "syscall.RTPROT_STATIC": "syscall", - "syscall.RTPROT_UNSPEC": "syscall", - "syscall.RTPROT_XORP": "syscall", - "syscall.RTPROT_ZEBRA": "syscall", - "syscall.RTV_EXPIRE": "syscall", - "syscall.RTV_HOPCOUNT": "syscall", - "syscall.RTV_MTU": "syscall", - "syscall.RTV_RPIPE": "syscall", - "syscall.RTV_RTT": "syscall", - "syscall.RTV_RTTVAR": "syscall", - "syscall.RTV_SPIPE": "syscall", - "syscall.RTV_SSTHRESH": "syscall", - "syscall.RTV_WEIGHT": "syscall", - "syscall.RT_CACHING_CONTEXT": "syscall", - "syscall.RT_CLASS_DEFAULT": "syscall", - "syscall.RT_CLASS_LOCAL": "syscall", - "syscall.RT_CLASS_MAIN": "syscall", - "syscall.RT_CLASS_MAX": "syscall", - "syscall.RT_CLASS_UNSPEC": "syscall", - "syscall.RT_DEFAULT_FIB": "syscall", - "syscall.RT_NORTREF": "syscall", - "syscall.RT_SCOPE_HOST": "syscall", - "syscall.RT_SCOPE_LINK": "syscall", - "syscall.RT_SCOPE_NOWHERE": "syscall", - "syscall.RT_SCOPE_SITE": "syscall", - "syscall.RT_SCOPE_UNIVERSE": "syscall", - "syscall.RT_TABLEID_MAX": "syscall", - "syscall.RT_TABLE_COMPAT": "syscall", - "syscall.RT_TABLE_DEFAULT": "syscall", - "syscall.RT_TABLE_LOCAL": "syscall", - "syscall.RT_TABLE_MAIN": "syscall", - "syscall.RT_TABLE_MAX": "syscall", - "syscall.RT_TABLE_UNSPEC": "syscall", - "syscall.RUSAGE_CHILDREN": "syscall", - "syscall.RUSAGE_SELF": "syscall", - "syscall.RUSAGE_THREAD": "syscall", - "syscall.Radvisory_t": "syscall", - "syscall.RawSockaddr": "syscall", - "syscall.RawSockaddrAny": "syscall", - "syscall.RawSockaddrDatalink": "syscall", - "syscall.RawSockaddrInet4": "syscall", - "syscall.RawSockaddrInet6": "syscall", - "syscall.RawSockaddrLinklayer": "syscall", - "syscall.RawSockaddrNetlink": "syscall", - "syscall.RawSockaddrUnix": "syscall", - "syscall.RawSyscall": "syscall", - "syscall.RawSyscall6": "syscall", - "syscall.Read": "syscall", - "syscall.ReadConsole": "syscall", - "syscall.ReadDirectoryChanges": "syscall", - "syscall.ReadDirent": "syscall", - "syscall.ReadFile": "syscall", - "syscall.Readlink": "syscall", - "syscall.Reboot": "syscall", - "syscall.Recvfrom": "syscall", - "syscall.Recvmsg": "syscall", - "syscall.RegCloseKey": "syscall", - "syscall.RegEnumKeyEx": "syscall", - "syscall.RegOpenKeyEx": "syscall", - "syscall.RegQueryInfoKey": "syscall", - "syscall.RegQueryValueEx": "syscall", - "syscall.RemoveDirectory": "syscall", - "syscall.Removexattr": "syscall", - "syscall.Rename": "syscall", - "syscall.Renameat": "syscall", - "syscall.Revoke": "syscall", - "syscall.Rlimit": "syscall", - "syscall.Rmdir": "syscall", - "syscall.RouteMessage": "syscall", - "syscall.RouteRIB": "syscall", - "syscall.RtAttr": "syscall", - "syscall.RtGenmsg": "syscall", - "syscall.RtMetrics": "syscall", - "syscall.RtMsg": "syscall", - "syscall.RtMsghdr": "syscall", - "syscall.RtNexthop": "syscall", - "syscall.Rusage": "syscall", - "syscall.SCM_BINTIME": "syscall", - "syscall.SCM_CREDENTIALS": "syscall", - "syscall.SCM_CREDS": "syscall", - "syscall.SCM_RIGHTS": "syscall", - "syscall.SCM_TIMESTAMP": "syscall", - "syscall.SCM_TIMESTAMPING": "syscall", - "syscall.SCM_TIMESTAMPNS": "syscall", - "syscall.SCM_TIMESTAMP_MONOTONIC": "syscall", - "syscall.SHUT_RD": "syscall", - "syscall.SHUT_RDWR": "syscall", - "syscall.SHUT_WR": "syscall", - "syscall.SID": "syscall", - "syscall.SIDAndAttributes": "syscall", - "syscall.SIGABRT": "syscall", - "syscall.SIGALRM": "syscall", - "syscall.SIGBUS": "syscall", - "syscall.SIGCHLD": "syscall", - "syscall.SIGCLD": "syscall", - "syscall.SIGCONT": "syscall", - "syscall.SIGEMT": "syscall", - "syscall.SIGFPE": "syscall", - "syscall.SIGHUP": "syscall", - "syscall.SIGILL": "syscall", - "syscall.SIGINFO": "syscall", - "syscall.SIGINT": "syscall", - "syscall.SIGIO": "syscall", - "syscall.SIGIOT": "syscall", - "syscall.SIGKILL": "syscall", - "syscall.SIGLIBRT": "syscall", - "syscall.SIGLWP": "syscall", - "syscall.SIGPIPE": "syscall", - "syscall.SIGPOLL": "syscall", - "syscall.SIGPROF": "syscall", - "syscall.SIGPWR": "syscall", - "syscall.SIGQUIT": "syscall", - "syscall.SIGSEGV": "syscall", - "syscall.SIGSTKFLT": "syscall", - "syscall.SIGSTOP": "syscall", - "syscall.SIGSYS": "syscall", - "syscall.SIGTERM": "syscall", - "syscall.SIGTHR": "syscall", - "syscall.SIGTRAP": "syscall", - "syscall.SIGTSTP": "syscall", - "syscall.SIGTTIN": "syscall", - "syscall.SIGTTOU": "syscall", - "syscall.SIGUNUSED": "syscall", - "syscall.SIGURG": "syscall", - "syscall.SIGUSR1": "syscall", - "syscall.SIGUSR2": "syscall", - "syscall.SIGVTALRM": "syscall", - "syscall.SIGWINCH": "syscall", - "syscall.SIGXCPU": "syscall", - "syscall.SIGXFSZ": "syscall", - "syscall.SIOCADDDLCI": "syscall", - "syscall.SIOCADDMULTI": "syscall", - "syscall.SIOCADDRT": "syscall", - "syscall.SIOCAIFADDR": "syscall", - "syscall.SIOCAIFGROUP": "syscall", - "syscall.SIOCALIFADDR": "syscall", - "syscall.SIOCARPIPLL": "syscall", - "syscall.SIOCATMARK": "syscall", - "syscall.SIOCAUTOADDR": "syscall", - "syscall.SIOCAUTONETMASK": "syscall", - "syscall.SIOCBRDGADD": "syscall", - "syscall.SIOCBRDGADDS": "syscall", - "syscall.SIOCBRDGARL": "syscall", - "syscall.SIOCBRDGDADDR": "syscall", - "syscall.SIOCBRDGDEL": "syscall", - "syscall.SIOCBRDGDELS": "syscall", - "syscall.SIOCBRDGFLUSH": "syscall", - "syscall.SIOCBRDGFRL": "syscall", - "syscall.SIOCBRDGGCACHE": "syscall", - "syscall.SIOCBRDGGFD": "syscall", - "syscall.SIOCBRDGGHT": "syscall", - "syscall.SIOCBRDGGIFFLGS": "syscall", - "syscall.SIOCBRDGGMA": "syscall", - "syscall.SIOCBRDGGPARAM": "syscall", - "syscall.SIOCBRDGGPRI": "syscall", - "syscall.SIOCBRDGGRL": "syscall", - "syscall.SIOCBRDGGSIFS": "syscall", - "syscall.SIOCBRDGGTO": "syscall", - "syscall.SIOCBRDGIFS": "syscall", - "syscall.SIOCBRDGRTS": "syscall", - "syscall.SIOCBRDGSADDR": "syscall", - "syscall.SIOCBRDGSCACHE": "syscall", - "syscall.SIOCBRDGSFD": "syscall", - "syscall.SIOCBRDGSHT": "syscall", - "syscall.SIOCBRDGSIFCOST": "syscall", - "syscall.SIOCBRDGSIFFLGS": "syscall", - "syscall.SIOCBRDGSIFPRIO": "syscall", - "syscall.SIOCBRDGSMA": "syscall", - "syscall.SIOCBRDGSPRI": "syscall", - "syscall.SIOCBRDGSPROTO": "syscall", - "syscall.SIOCBRDGSTO": "syscall", - "syscall.SIOCBRDGSTXHC": "syscall", - "syscall.SIOCDARP": "syscall", - "syscall.SIOCDELDLCI": "syscall", - "syscall.SIOCDELMULTI": "syscall", - "syscall.SIOCDELRT": "syscall", - "syscall.SIOCDEVPRIVATE": "syscall", - "syscall.SIOCDIFADDR": "syscall", - "syscall.SIOCDIFGROUP": "syscall", - "syscall.SIOCDIFPHYADDR": "syscall", - "syscall.SIOCDLIFADDR": "syscall", - "syscall.SIOCDRARP": "syscall", - "syscall.SIOCGARP": "syscall", - "syscall.SIOCGDRVSPEC": "syscall", - "syscall.SIOCGETKALIVE": "syscall", - "syscall.SIOCGETLABEL": "syscall", - "syscall.SIOCGETPFLOW": "syscall", - "syscall.SIOCGETPFSYNC": "syscall", - "syscall.SIOCGETSGCNT": "syscall", - "syscall.SIOCGETVIFCNT": "syscall", - "syscall.SIOCGETVLAN": "syscall", - "syscall.SIOCGHIWAT": "syscall", - "syscall.SIOCGIFADDR": "syscall", - "syscall.SIOCGIFADDRPREF": "syscall", - "syscall.SIOCGIFALIAS": "syscall", - "syscall.SIOCGIFALTMTU": "syscall", - "syscall.SIOCGIFASYNCMAP": "syscall", - "syscall.SIOCGIFBOND": "syscall", - "syscall.SIOCGIFBR": "syscall", - "syscall.SIOCGIFBRDADDR": "syscall", - "syscall.SIOCGIFCAP": "syscall", - "syscall.SIOCGIFCONF": "syscall", - "syscall.SIOCGIFCOUNT": "syscall", - "syscall.SIOCGIFDATA": "syscall", - "syscall.SIOCGIFDESCR": "syscall", - "syscall.SIOCGIFDEVMTU": "syscall", - "syscall.SIOCGIFDLT": "syscall", - "syscall.SIOCGIFDSTADDR": "syscall", - "syscall.SIOCGIFENCAP": "syscall", - "syscall.SIOCGIFFIB": "syscall", - "syscall.SIOCGIFFLAGS": "syscall", - "syscall.SIOCGIFGATTR": "syscall", - "syscall.SIOCGIFGENERIC": "syscall", - "syscall.SIOCGIFGMEMB": "syscall", - "syscall.SIOCGIFGROUP": "syscall", - "syscall.SIOCGIFHARDMTU": "syscall", - "syscall.SIOCGIFHWADDR": "syscall", - "syscall.SIOCGIFINDEX": "syscall", - "syscall.SIOCGIFKPI": "syscall", - "syscall.SIOCGIFMAC": "syscall", - "syscall.SIOCGIFMAP": "syscall", - "syscall.SIOCGIFMEDIA": "syscall", - "syscall.SIOCGIFMEM": "syscall", - "syscall.SIOCGIFMETRIC": "syscall", - "syscall.SIOCGIFMTU": "syscall", - "syscall.SIOCGIFNAME": "syscall", - "syscall.SIOCGIFNETMASK": "syscall", - "syscall.SIOCGIFPDSTADDR": "syscall", - "syscall.SIOCGIFPFLAGS": "syscall", - "syscall.SIOCGIFPHYS": "syscall", - "syscall.SIOCGIFPRIORITY": "syscall", - "syscall.SIOCGIFPSRCADDR": "syscall", - "syscall.SIOCGIFRDOMAIN": "syscall", - "syscall.SIOCGIFRTLABEL": "syscall", - "syscall.SIOCGIFSLAVE": "syscall", - "syscall.SIOCGIFSTATUS": "syscall", - "syscall.SIOCGIFTIMESLOT": "syscall", - "syscall.SIOCGIFTXQLEN": "syscall", - "syscall.SIOCGIFVLAN": "syscall", - "syscall.SIOCGIFWAKEFLAGS": "syscall", - "syscall.SIOCGIFXFLAGS": "syscall", - "syscall.SIOCGLIFADDR": "syscall", - "syscall.SIOCGLIFPHYADDR": "syscall", - "syscall.SIOCGLIFPHYRTABLE": "syscall", - "syscall.SIOCGLIFPHYTTL": "syscall", - "syscall.SIOCGLINKSTR": "syscall", - "syscall.SIOCGLOWAT": "syscall", - "syscall.SIOCGPGRP": "syscall", - "syscall.SIOCGPRIVATE_0": "syscall", - "syscall.SIOCGPRIVATE_1": "syscall", - "syscall.SIOCGRARP": "syscall", - "syscall.SIOCGSPPPPARAMS": "syscall", - "syscall.SIOCGSTAMP": "syscall", - "syscall.SIOCGSTAMPNS": "syscall", - "syscall.SIOCGVH": "syscall", - "syscall.SIOCGVNETID": "syscall", - "syscall.SIOCIFCREATE": "syscall", - "syscall.SIOCIFCREATE2": "syscall", - "syscall.SIOCIFDESTROY": "syscall", - "syscall.SIOCIFGCLONERS": "syscall", - "syscall.SIOCINITIFADDR": "syscall", - "syscall.SIOCPROTOPRIVATE": "syscall", - "syscall.SIOCRSLVMULTI": "syscall", - "syscall.SIOCRTMSG": "syscall", - "syscall.SIOCSARP": "syscall", - "syscall.SIOCSDRVSPEC": "syscall", - "syscall.SIOCSETKALIVE": "syscall", - "syscall.SIOCSETLABEL": "syscall", - "syscall.SIOCSETPFLOW": "syscall", - "syscall.SIOCSETPFSYNC": "syscall", - "syscall.SIOCSETVLAN": "syscall", - "syscall.SIOCSHIWAT": "syscall", - "syscall.SIOCSIFADDR": "syscall", - "syscall.SIOCSIFADDRPREF": "syscall", - "syscall.SIOCSIFALTMTU": "syscall", - "syscall.SIOCSIFASYNCMAP": "syscall", - "syscall.SIOCSIFBOND": "syscall", - "syscall.SIOCSIFBR": "syscall", - "syscall.SIOCSIFBRDADDR": "syscall", - "syscall.SIOCSIFCAP": "syscall", - "syscall.SIOCSIFDESCR": "syscall", - "syscall.SIOCSIFDSTADDR": "syscall", - "syscall.SIOCSIFENCAP": "syscall", - "syscall.SIOCSIFFIB": "syscall", - "syscall.SIOCSIFFLAGS": "syscall", - "syscall.SIOCSIFGATTR": "syscall", - "syscall.SIOCSIFGENERIC": "syscall", - "syscall.SIOCSIFHWADDR": "syscall", - "syscall.SIOCSIFHWBROADCAST": "syscall", - "syscall.SIOCSIFKPI": "syscall", - "syscall.SIOCSIFLINK": "syscall", - "syscall.SIOCSIFLLADDR": "syscall", - "syscall.SIOCSIFMAC": "syscall", - "syscall.SIOCSIFMAP": "syscall", - "syscall.SIOCSIFMEDIA": "syscall", - "syscall.SIOCSIFMEM": "syscall", - "syscall.SIOCSIFMETRIC": "syscall", - "syscall.SIOCSIFMTU": "syscall", - "syscall.SIOCSIFNAME": "syscall", - "syscall.SIOCSIFNETMASK": "syscall", - "syscall.SIOCSIFPFLAGS": "syscall", - "syscall.SIOCSIFPHYADDR": "syscall", - "syscall.SIOCSIFPHYS": "syscall", - "syscall.SIOCSIFPRIORITY": "syscall", - "syscall.SIOCSIFRDOMAIN": "syscall", - "syscall.SIOCSIFRTLABEL": "syscall", - "syscall.SIOCSIFRVNET": "syscall", - "syscall.SIOCSIFSLAVE": "syscall", - "syscall.SIOCSIFTIMESLOT": "syscall", - "syscall.SIOCSIFTXQLEN": "syscall", - "syscall.SIOCSIFVLAN": "syscall", - "syscall.SIOCSIFVNET": "syscall", - "syscall.SIOCSIFXFLAGS": "syscall", - "syscall.SIOCSLIFPHYADDR": "syscall", - "syscall.SIOCSLIFPHYRTABLE": "syscall", - "syscall.SIOCSLIFPHYTTL": "syscall", - "syscall.SIOCSLINKSTR": "syscall", - "syscall.SIOCSLOWAT": "syscall", - "syscall.SIOCSPGRP": "syscall", - "syscall.SIOCSRARP": "syscall", - "syscall.SIOCSSPPPPARAMS": "syscall", - "syscall.SIOCSVH": "syscall", - "syscall.SIOCSVNETID": "syscall", - "syscall.SIOCZIFDATA": "syscall", - "syscall.SIO_GET_EXTENSION_FUNCTION_POINTER": "syscall", - "syscall.SIO_GET_INTERFACE_LIST": "syscall", - "syscall.SIO_KEEPALIVE_VALS": "syscall", - "syscall.SIO_UDP_CONNRESET": "syscall", - "syscall.SOCK_CLOEXEC": "syscall", - "syscall.SOCK_DCCP": "syscall", - "syscall.SOCK_DGRAM": "syscall", - "syscall.SOCK_FLAGS_MASK": "syscall", - "syscall.SOCK_MAXADDRLEN": "syscall", - "syscall.SOCK_NONBLOCK": "syscall", - "syscall.SOCK_NOSIGPIPE": "syscall", - "syscall.SOCK_PACKET": "syscall", - "syscall.SOCK_RAW": "syscall", - "syscall.SOCK_RDM": "syscall", - "syscall.SOCK_SEQPACKET": "syscall", - "syscall.SOCK_STREAM": "syscall", - "syscall.SOL_AAL": "syscall", - "syscall.SOL_ATM": "syscall", - "syscall.SOL_DECNET": "syscall", - "syscall.SOL_ICMPV6": "syscall", - "syscall.SOL_IP": "syscall", - "syscall.SOL_IPV6": "syscall", - "syscall.SOL_IRDA": "syscall", - "syscall.SOL_PACKET": "syscall", - "syscall.SOL_RAW": "syscall", - "syscall.SOL_SOCKET": "syscall", - "syscall.SOL_TCP": "syscall", - "syscall.SOL_X25": "syscall", - "syscall.SOMAXCONN": "syscall", - "syscall.SO_ACCEPTCONN": "syscall", - "syscall.SO_ACCEPTFILTER": "syscall", - "syscall.SO_ATTACH_FILTER": "syscall", - "syscall.SO_BINDANY": "syscall", - "syscall.SO_BINDTODEVICE": "syscall", - "syscall.SO_BINTIME": "syscall", - "syscall.SO_BROADCAST": "syscall", - "syscall.SO_BSDCOMPAT": "syscall", - "syscall.SO_DEBUG": "syscall", - "syscall.SO_DETACH_FILTER": "syscall", - "syscall.SO_DOMAIN": "syscall", - "syscall.SO_DONTROUTE": "syscall", - "syscall.SO_DONTTRUNC": "syscall", - "syscall.SO_ERROR": "syscall", - "syscall.SO_KEEPALIVE": "syscall", - "syscall.SO_LABEL": "syscall", - "syscall.SO_LINGER": "syscall", - "syscall.SO_LINGER_SEC": "syscall", - "syscall.SO_LISTENINCQLEN": "syscall", - "syscall.SO_LISTENQLEN": "syscall", - "syscall.SO_LISTENQLIMIT": "syscall", - "syscall.SO_MARK": "syscall", - "syscall.SO_NETPROC": "syscall", - "syscall.SO_NKE": "syscall", - "syscall.SO_NOADDRERR": "syscall", - "syscall.SO_NOHEADER": "syscall", - "syscall.SO_NOSIGPIPE": "syscall", - "syscall.SO_NOTIFYCONFLICT": "syscall", - "syscall.SO_NO_CHECK": "syscall", - "syscall.SO_NO_DDP": "syscall", - "syscall.SO_NO_OFFLOAD": "syscall", - "syscall.SO_NP_EXTENSIONS": "syscall", - "syscall.SO_NREAD": "syscall", - "syscall.SO_NWRITE": "syscall", - "syscall.SO_OOBINLINE": "syscall", - "syscall.SO_OVERFLOWED": "syscall", - "syscall.SO_PASSCRED": "syscall", - "syscall.SO_PASSSEC": "syscall", - "syscall.SO_PEERCRED": "syscall", - "syscall.SO_PEERLABEL": "syscall", - "syscall.SO_PEERNAME": "syscall", - "syscall.SO_PEERSEC": "syscall", - "syscall.SO_PRIORITY": "syscall", - "syscall.SO_PROTOCOL": "syscall", - "syscall.SO_PROTOTYPE": "syscall", - "syscall.SO_RANDOMPORT": "syscall", - "syscall.SO_RCVBUF": "syscall", - "syscall.SO_RCVBUFFORCE": "syscall", - "syscall.SO_RCVLOWAT": "syscall", - "syscall.SO_RCVTIMEO": "syscall", - "syscall.SO_RESTRICTIONS": "syscall", - "syscall.SO_RESTRICT_DENYIN": "syscall", - "syscall.SO_RESTRICT_DENYOUT": "syscall", - "syscall.SO_RESTRICT_DENYSET": "syscall", - "syscall.SO_REUSEADDR": "syscall", - "syscall.SO_REUSEPORT": "syscall", - "syscall.SO_REUSESHAREUID": "syscall", - "syscall.SO_RTABLE": "syscall", - "syscall.SO_RXQ_OVFL": "syscall", - "syscall.SO_SECURITY_AUTHENTICATION": "syscall", - "syscall.SO_SECURITY_ENCRYPTION_NETWORK": "syscall", - "syscall.SO_SECURITY_ENCRYPTION_TRANSPORT": "syscall", - "syscall.SO_SETFIB": "syscall", - "syscall.SO_SNDBUF": "syscall", - "syscall.SO_SNDBUFFORCE": "syscall", - "syscall.SO_SNDLOWAT": "syscall", - "syscall.SO_SNDTIMEO": "syscall", - "syscall.SO_SPLICE": "syscall", - "syscall.SO_TIMESTAMP": "syscall", - "syscall.SO_TIMESTAMPING": "syscall", - "syscall.SO_TIMESTAMPNS": "syscall", - "syscall.SO_TIMESTAMP_MONOTONIC": "syscall", - "syscall.SO_TYPE": "syscall", - "syscall.SO_UPCALLCLOSEWAIT": "syscall", - "syscall.SO_UPDATE_ACCEPT_CONTEXT": "syscall", - "syscall.SO_UPDATE_CONNECT_CONTEXT": "syscall", - "syscall.SO_USELOOPBACK": "syscall", - "syscall.SO_USER_COOKIE": "syscall", - "syscall.SO_VENDOR": "syscall", - "syscall.SO_WANTMORE": "syscall", - "syscall.SO_WANTOOBFLAG": "syscall", - "syscall.SSLExtraCertChainPolicyPara": "syscall", - "syscall.STANDARD_RIGHTS_ALL": "syscall", - "syscall.STANDARD_RIGHTS_EXECUTE": "syscall", - "syscall.STANDARD_RIGHTS_READ": "syscall", - "syscall.STANDARD_RIGHTS_REQUIRED": "syscall", - "syscall.STANDARD_RIGHTS_WRITE": "syscall", - "syscall.STARTF_USESHOWWINDOW": "syscall", - "syscall.STARTF_USESTDHANDLES": "syscall", - "syscall.STD_ERROR_HANDLE": "syscall", - "syscall.STD_INPUT_HANDLE": "syscall", - "syscall.STD_OUTPUT_HANDLE": "syscall", - "syscall.SUBLANG_ENGLISH_US": "syscall", - "syscall.SW_FORCEMINIMIZE": "syscall", - "syscall.SW_HIDE": "syscall", - "syscall.SW_MAXIMIZE": "syscall", - "syscall.SW_MINIMIZE": "syscall", - "syscall.SW_NORMAL": "syscall", - "syscall.SW_RESTORE": "syscall", - "syscall.SW_SHOW": "syscall", - "syscall.SW_SHOWDEFAULT": "syscall", - "syscall.SW_SHOWMAXIMIZED": "syscall", - "syscall.SW_SHOWMINIMIZED": "syscall", - "syscall.SW_SHOWMINNOACTIVE": "syscall", - "syscall.SW_SHOWNA": "syscall", - "syscall.SW_SHOWNOACTIVATE": "syscall", - "syscall.SW_SHOWNORMAL": "syscall", - "syscall.SYMBOLIC_LINK_FLAG_DIRECTORY": "syscall", - "syscall.SYNCHRONIZE": "syscall", - "syscall.SYSCTL_VERSION": "syscall", - "syscall.SYSCTL_VERS_0": "syscall", - "syscall.SYSCTL_VERS_1": "syscall", - "syscall.SYSCTL_VERS_MASK": "syscall", - "syscall.SYS_ABORT2": "syscall", - "syscall.SYS_ACCEPT": "syscall", - "syscall.SYS_ACCEPT4": "syscall", - "syscall.SYS_ACCEPT_NOCANCEL": "syscall", - "syscall.SYS_ACCESS": "syscall", - "syscall.SYS_ACCESS_EXTENDED": "syscall", - "syscall.SYS_ACCT": "syscall", - "syscall.SYS_ADD_KEY": "syscall", - "syscall.SYS_ADD_PROFIL": "syscall", - "syscall.SYS_ADJFREQ": "syscall", - "syscall.SYS_ADJTIME": "syscall", - "syscall.SYS_ADJTIMEX": "syscall", - "syscall.SYS_AFS_SYSCALL": "syscall", - "syscall.SYS_AIO_CANCEL": "syscall", - "syscall.SYS_AIO_ERROR": "syscall", - "syscall.SYS_AIO_FSYNC": "syscall", - "syscall.SYS_AIO_READ": "syscall", - "syscall.SYS_AIO_RETURN": "syscall", - "syscall.SYS_AIO_SUSPEND": "syscall", - "syscall.SYS_AIO_SUSPEND_NOCANCEL": "syscall", - "syscall.SYS_AIO_WRITE": "syscall", - "syscall.SYS_ALARM": "syscall", - "syscall.SYS_ARCH_PRCTL": "syscall", - "syscall.SYS_ARM_FADVISE64_64": "syscall", - "syscall.SYS_ARM_SYNC_FILE_RANGE": "syscall", - "syscall.SYS_ATGETMSG": "syscall", - "syscall.SYS_ATPGETREQ": "syscall", - "syscall.SYS_ATPGETRSP": "syscall", - "syscall.SYS_ATPSNDREQ": "syscall", - "syscall.SYS_ATPSNDRSP": "syscall", - "syscall.SYS_ATPUTMSG": "syscall", - "syscall.SYS_ATSOCKET": "syscall", - "syscall.SYS_AUDIT": "syscall", - "syscall.SYS_AUDITCTL": "syscall", - "syscall.SYS_AUDITON": "syscall", - "syscall.SYS_AUDIT_SESSION_JOIN": "syscall", - "syscall.SYS_AUDIT_SESSION_PORT": "syscall", - "syscall.SYS_AUDIT_SESSION_SELF": "syscall", - "syscall.SYS_BDFLUSH": "syscall", - "syscall.SYS_BIND": "syscall", - "syscall.SYS_BINDAT": "syscall", - "syscall.SYS_BREAK": "syscall", - "syscall.SYS_BRK": "syscall", - "syscall.SYS_BSDTHREAD_CREATE": "syscall", - "syscall.SYS_BSDTHREAD_REGISTER": "syscall", - "syscall.SYS_BSDTHREAD_TERMINATE": "syscall", - "syscall.SYS_CAPGET": "syscall", - "syscall.SYS_CAPSET": "syscall", - "syscall.SYS_CAP_ENTER": "syscall", - "syscall.SYS_CAP_FCNTLS_GET": "syscall", - "syscall.SYS_CAP_FCNTLS_LIMIT": "syscall", - "syscall.SYS_CAP_GETMODE": "syscall", - "syscall.SYS_CAP_GETRIGHTS": "syscall", - "syscall.SYS_CAP_IOCTLS_GET": "syscall", - "syscall.SYS_CAP_IOCTLS_LIMIT": "syscall", - "syscall.SYS_CAP_NEW": "syscall", - "syscall.SYS_CAP_RIGHTS_GET": "syscall", - "syscall.SYS_CAP_RIGHTS_LIMIT": "syscall", - "syscall.SYS_CHDIR": "syscall", - "syscall.SYS_CHFLAGS": "syscall", - "syscall.SYS_CHFLAGSAT": "syscall", - "syscall.SYS_CHMOD": "syscall", - "syscall.SYS_CHMOD_EXTENDED": "syscall", - "syscall.SYS_CHOWN": "syscall", - "syscall.SYS_CHOWN32": "syscall", - "syscall.SYS_CHROOT": "syscall", - "syscall.SYS_CHUD": "syscall", - "syscall.SYS_CLOCK_ADJTIME": "syscall", - "syscall.SYS_CLOCK_GETCPUCLOCKID2": "syscall", - "syscall.SYS_CLOCK_GETRES": "syscall", - "syscall.SYS_CLOCK_GETTIME": "syscall", - "syscall.SYS_CLOCK_NANOSLEEP": "syscall", - "syscall.SYS_CLOCK_SETTIME": "syscall", - "syscall.SYS_CLONE": "syscall", - "syscall.SYS_CLOSE": "syscall", - "syscall.SYS_CLOSEFROM": "syscall", - "syscall.SYS_CLOSE_NOCANCEL": "syscall", - "syscall.SYS_CONNECT": "syscall", - "syscall.SYS_CONNECTAT": "syscall", - "syscall.SYS_CONNECT_NOCANCEL": "syscall", - "syscall.SYS_COPYFILE": "syscall", - "syscall.SYS_CPUSET": "syscall", - "syscall.SYS_CPUSET_GETAFFINITY": "syscall", - "syscall.SYS_CPUSET_GETID": "syscall", - "syscall.SYS_CPUSET_SETAFFINITY": "syscall", - "syscall.SYS_CPUSET_SETID": "syscall", - "syscall.SYS_CREAT": "syscall", - "syscall.SYS_CREATE_MODULE": "syscall", - "syscall.SYS_CSOPS": "syscall", - "syscall.SYS_DELETE": "syscall", - "syscall.SYS_DELETE_MODULE": "syscall", - "syscall.SYS_DUP": "syscall", - "syscall.SYS_DUP2": "syscall", - "syscall.SYS_DUP3": "syscall", - "syscall.SYS_EACCESS": "syscall", - "syscall.SYS_EPOLL_CREATE": "syscall", - "syscall.SYS_EPOLL_CREATE1": "syscall", - "syscall.SYS_EPOLL_CTL": "syscall", - "syscall.SYS_EPOLL_CTL_OLD": "syscall", - "syscall.SYS_EPOLL_PWAIT": "syscall", - "syscall.SYS_EPOLL_WAIT": "syscall", - "syscall.SYS_EPOLL_WAIT_OLD": "syscall", - "syscall.SYS_EVENTFD": "syscall", - "syscall.SYS_EVENTFD2": "syscall", - "syscall.SYS_EXCHANGEDATA": "syscall", - "syscall.SYS_EXECVE": "syscall", - "syscall.SYS_EXIT": "syscall", - "syscall.SYS_EXIT_GROUP": "syscall", - "syscall.SYS_EXTATTRCTL": "syscall", - "syscall.SYS_EXTATTR_DELETE_FD": "syscall", - "syscall.SYS_EXTATTR_DELETE_FILE": "syscall", - "syscall.SYS_EXTATTR_DELETE_LINK": "syscall", - "syscall.SYS_EXTATTR_GET_FD": "syscall", - "syscall.SYS_EXTATTR_GET_FILE": "syscall", - "syscall.SYS_EXTATTR_GET_LINK": "syscall", - "syscall.SYS_EXTATTR_LIST_FD": "syscall", - "syscall.SYS_EXTATTR_LIST_FILE": "syscall", - "syscall.SYS_EXTATTR_LIST_LINK": "syscall", - "syscall.SYS_EXTATTR_SET_FD": "syscall", - "syscall.SYS_EXTATTR_SET_FILE": "syscall", - "syscall.SYS_EXTATTR_SET_LINK": "syscall", - "syscall.SYS_FACCESSAT": "syscall", - "syscall.SYS_FADVISE64": "syscall", - "syscall.SYS_FADVISE64_64": "syscall", - "syscall.SYS_FALLOCATE": "syscall", - "syscall.SYS_FANOTIFY_INIT": "syscall", - "syscall.SYS_FANOTIFY_MARK": "syscall", - "syscall.SYS_FCHDIR": "syscall", - "syscall.SYS_FCHFLAGS": "syscall", - "syscall.SYS_FCHMOD": "syscall", - "syscall.SYS_FCHMODAT": "syscall", - "syscall.SYS_FCHMOD_EXTENDED": "syscall", - "syscall.SYS_FCHOWN": "syscall", - "syscall.SYS_FCHOWN32": "syscall", - "syscall.SYS_FCHOWNAT": "syscall", - "syscall.SYS_FCHROOT": "syscall", - "syscall.SYS_FCNTL": "syscall", - "syscall.SYS_FCNTL64": "syscall", - "syscall.SYS_FCNTL_NOCANCEL": "syscall", - "syscall.SYS_FDATASYNC": "syscall", - "syscall.SYS_FEXECVE": "syscall", - "syscall.SYS_FFCLOCK_GETCOUNTER": "syscall", - "syscall.SYS_FFCLOCK_GETESTIMATE": "syscall", - "syscall.SYS_FFCLOCK_SETESTIMATE": "syscall", - "syscall.SYS_FFSCTL": "syscall", - "syscall.SYS_FGETATTRLIST": "syscall", - "syscall.SYS_FGETXATTR": "syscall", - "syscall.SYS_FHOPEN": "syscall", - "syscall.SYS_FHSTAT": "syscall", - "syscall.SYS_FHSTATFS": "syscall", - "syscall.SYS_FILEPORT_MAKEFD": "syscall", - "syscall.SYS_FILEPORT_MAKEPORT": "syscall", - "syscall.SYS_FKTRACE": "syscall", - "syscall.SYS_FLISTXATTR": "syscall", - "syscall.SYS_FLOCK": "syscall", - "syscall.SYS_FORK": "syscall", - "syscall.SYS_FPATHCONF": "syscall", - "syscall.SYS_FREEBSD6_FTRUNCATE": "syscall", - "syscall.SYS_FREEBSD6_LSEEK": "syscall", - "syscall.SYS_FREEBSD6_MMAP": "syscall", - "syscall.SYS_FREEBSD6_PREAD": "syscall", - "syscall.SYS_FREEBSD6_PWRITE": "syscall", - "syscall.SYS_FREEBSD6_TRUNCATE": "syscall", - "syscall.SYS_FREMOVEXATTR": "syscall", - "syscall.SYS_FSCTL": "syscall", - "syscall.SYS_FSETATTRLIST": "syscall", - "syscall.SYS_FSETXATTR": "syscall", - "syscall.SYS_FSGETPATH": "syscall", - "syscall.SYS_FSTAT": "syscall", - "syscall.SYS_FSTAT64": "syscall", - "syscall.SYS_FSTAT64_EXTENDED": "syscall", - "syscall.SYS_FSTATAT": "syscall", - "syscall.SYS_FSTATAT64": "syscall", - "syscall.SYS_FSTATFS": "syscall", - "syscall.SYS_FSTATFS64": "syscall", - "syscall.SYS_FSTATV": "syscall", - "syscall.SYS_FSTATVFS1": "syscall", - "syscall.SYS_FSTAT_EXTENDED": "syscall", - "syscall.SYS_FSYNC": "syscall", - "syscall.SYS_FSYNC_NOCANCEL": "syscall", - "syscall.SYS_FSYNC_RANGE": "syscall", - "syscall.SYS_FTIME": "syscall", - "syscall.SYS_FTRUNCATE": "syscall", - "syscall.SYS_FTRUNCATE64": "syscall", - "syscall.SYS_FUTEX": "syscall", - "syscall.SYS_FUTIMENS": "syscall", - "syscall.SYS_FUTIMES": "syscall", - "syscall.SYS_FUTIMESAT": "syscall", - "syscall.SYS_GETATTRLIST": "syscall", - "syscall.SYS_GETAUDIT": "syscall", - "syscall.SYS_GETAUDIT_ADDR": "syscall", - "syscall.SYS_GETAUID": "syscall", - "syscall.SYS_GETCONTEXT": "syscall", - "syscall.SYS_GETCPU": "syscall", - "syscall.SYS_GETCWD": "syscall", - "syscall.SYS_GETDENTS": "syscall", - "syscall.SYS_GETDENTS64": "syscall", - "syscall.SYS_GETDIRENTRIES": "syscall", - "syscall.SYS_GETDIRENTRIES64": "syscall", - "syscall.SYS_GETDIRENTRIESATTR": "syscall", - "syscall.SYS_GETDTABLECOUNT": "syscall", - "syscall.SYS_GETDTABLESIZE": "syscall", - "syscall.SYS_GETEGID": "syscall", - "syscall.SYS_GETEGID32": "syscall", - "syscall.SYS_GETEUID": "syscall", - "syscall.SYS_GETEUID32": "syscall", - "syscall.SYS_GETFH": "syscall", - "syscall.SYS_GETFSSTAT": "syscall", - "syscall.SYS_GETFSSTAT64": "syscall", - "syscall.SYS_GETGID": "syscall", - "syscall.SYS_GETGID32": "syscall", - "syscall.SYS_GETGROUPS": "syscall", - "syscall.SYS_GETGROUPS32": "syscall", - "syscall.SYS_GETHOSTUUID": "syscall", - "syscall.SYS_GETITIMER": "syscall", - "syscall.SYS_GETLCID": "syscall", - "syscall.SYS_GETLOGIN": "syscall", - "syscall.SYS_GETLOGINCLASS": "syscall", - "syscall.SYS_GETPEERNAME": "syscall", - "syscall.SYS_GETPGID": "syscall", - "syscall.SYS_GETPGRP": "syscall", - "syscall.SYS_GETPID": "syscall", - "syscall.SYS_GETPMSG": "syscall", - "syscall.SYS_GETPPID": "syscall", - "syscall.SYS_GETPRIORITY": "syscall", - "syscall.SYS_GETRESGID": "syscall", - "syscall.SYS_GETRESGID32": "syscall", - "syscall.SYS_GETRESUID": "syscall", - "syscall.SYS_GETRESUID32": "syscall", - "syscall.SYS_GETRLIMIT": "syscall", - "syscall.SYS_GETRTABLE": "syscall", - "syscall.SYS_GETRUSAGE": "syscall", - "syscall.SYS_GETSGROUPS": "syscall", - "syscall.SYS_GETSID": "syscall", - "syscall.SYS_GETSOCKNAME": "syscall", - "syscall.SYS_GETSOCKOPT": "syscall", - "syscall.SYS_GETTHRID": "syscall", - "syscall.SYS_GETTID": "syscall", - "syscall.SYS_GETTIMEOFDAY": "syscall", - "syscall.SYS_GETUID": "syscall", - "syscall.SYS_GETUID32": "syscall", - "syscall.SYS_GETVFSSTAT": "syscall", - "syscall.SYS_GETWGROUPS": "syscall", - "syscall.SYS_GETXATTR": "syscall", - "syscall.SYS_GET_KERNEL_SYMS": "syscall", - "syscall.SYS_GET_MEMPOLICY": "syscall", - "syscall.SYS_GET_ROBUST_LIST": "syscall", - "syscall.SYS_GET_THREAD_AREA": "syscall", - "syscall.SYS_GTTY": "syscall", - "syscall.SYS_IDENTITYSVC": "syscall", - "syscall.SYS_IDLE": "syscall", - "syscall.SYS_INITGROUPS": "syscall", - "syscall.SYS_INIT_MODULE": "syscall", - "syscall.SYS_INOTIFY_ADD_WATCH": "syscall", - "syscall.SYS_INOTIFY_INIT": "syscall", - "syscall.SYS_INOTIFY_INIT1": "syscall", - "syscall.SYS_INOTIFY_RM_WATCH": "syscall", - "syscall.SYS_IOCTL": "syscall", - "syscall.SYS_IOPERM": "syscall", - "syscall.SYS_IOPL": "syscall", - "syscall.SYS_IOPOLICYSYS": "syscall", - "syscall.SYS_IOPRIO_GET": "syscall", - "syscall.SYS_IOPRIO_SET": "syscall", - "syscall.SYS_IO_CANCEL": "syscall", - "syscall.SYS_IO_DESTROY": "syscall", - "syscall.SYS_IO_GETEVENTS": "syscall", - "syscall.SYS_IO_SETUP": "syscall", - "syscall.SYS_IO_SUBMIT": "syscall", - "syscall.SYS_IPC": "syscall", - "syscall.SYS_ISSETUGID": "syscall", - "syscall.SYS_JAIL": "syscall", - "syscall.SYS_JAIL_ATTACH": "syscall", - "syscall.SYS_JAIL_GET": "syscall", - "syscall.SYS_JAIL_REMOVE": "syscall", - "syscall.SYS_JAIL_SET": "syscall", - "syscall.SYS_KDEBUG_TRACE": "syscall", - "syscall.SYS_KENV": "syscall", - "syscall.SYS_KEVENT": "syscall", - "syscall.SYS_KEVENT64": "syscall", - "syscall.SYS_KEXEC_LOAD": "syscall", - "syscall.SYS_KEYCTL": "syscall", - "syscall.SYS_KILL": "syscall", - "syscall.SYS_KLDFIND": "syscall", - "syscall.SYS_KLDFIRSTMOD": "syscall", - "syscall.SYS_KLDLOAD": "syscall", - "syscall.SYS_KLDNEXT": "syscall", - "syscall.SYS_KLDSTAT": "syscall", - "syscall.SYS_KLDSYM": "syscall", - "syscall.SYS_KLDUNLOAD": "syscall", - "syscall.SYS_KLDUNLOADF": "syscall", - "syscall.SYS_KQUEUE": "syscall", - "syscall.SYS_KQUEUE1": "syscall", - "syscall.SYS_KTIMER_CREATE": "syscall", - "syscall.SYS_KTIMER_DELETE": "syscall", - "syscall.SYS_KTIMER_GETOVERRUN": "syscall", - "syscall.SYS_KTIMER_GETTIME": "syscall", - "syscall.SYS_KTIMER_SETTIME": "syscall", - "syscall.SYS_KTRACE": "syscall", - "syscall.SYS_LCHFLAGS": "syscall", - "syscall.SYS_LCHMOD": "syscall", - "syscall.SYS_LCHOWN": "syscall", - "syscall.SYS_LCHOWN32": "syscall", - "syscall.SYS_LGETFH": "syscall", - "syscall.SYS_LGETXATTR": "syscall", - "syscall.SYS_LINK": "syscall", - "syscall.SYS_LINKAT": "syscall", - "syscall.SYS_LIO_LISTIO": "syscall", - "syscall.SYS_LISTEN": "syscall", - "syscall.SYS_LISTXATTR": "syscall", - "syscall.SYS_LLISTXATTR": "syscall", - "syscall.SYS_LOCK": "syscall", - "syscall.SYS_LOOKUP_DCOOKIE": "syscall", - "syscall.SYS_LPATHCONF": "syscall", - "syscall.SYS_LREMOVEXATTR": "syscall", - "syscall.SYS_LSEEK": "syscall", - "syscall.SYS_LSETXATTR": "syscall", - "syscall.SYS_LSTAT": "syscall", - "syscall.SYS_LSTAT64": "syscall", - "syscall.SYS_LSTAT64_EXTENDED": "syscall", - "syscall.SYS_LSTATV": "syscall", - "syscall.SYS_LSTAT_EXTENDED": "syscall", - "syscall.SYS_LUTIMES": "syscall", - "syscall.SYS_MAC_SYSCALL": "syscall", - "syscall.SYS_MADVISE": "syscall", - "syscall.SYS_MADVISE1": "syscall", - "syscall.SYS_MAXSYSCALL": "syscall", - "syscall.SYS_MBIND": "syscall", - "syscall.SYS_MIGRATE_PAGES": "syscall", - "syscall.SYS_MINCORE": "syscall", - "syscall.SYS_MINHERIT": "syscall", - "syscall.SYS_MKCOMPLEX": "syscall", - "syscall.SYS_MKDIR": "syscall", - "syscall.SYS_MKDIRAT": "syscall", - "syscall.SYS_MKDIR_EXTENDED": "syscall", - "syscall.SYS_MKFIFO": "syscall", - "syscall.SYS_MKFIFOAT": "syscall", - "syscall.SYS_MKFIFO_EXTENDED": "syscall", - "syscall.SYS_MKNOD": "syscall", - "syscall.SYS_MKNODAT": "syscall", - "syscall.SYS_MLOCK": "syscall", - "syscall.SYS_MLOCKALL": "syscall", - "syscall.SYS_MMAP": "syscall", - "syscall.SYS_MMAP2": "syscall", - "syscall.SYS_MODCTL": "syscall", - "syscall.SYS_MODFIND": "syscall", - "syscall.SYS_MODFNEXT": "syscall", - "syscall.SYS_MODIFY_LDT": "syscall", - "syscall.SYS_MODNEXT": "syscall", - "syscall.SYS_MODSTAT": "syscall", - "syscall.SYS_MODWATCH": "syscall", - "syscall.SYS_MOUNT": "syscall", - "syscall.SYS_MOVE_PAGES": "syscall", - "syscall.SYS_MPROTECT": "syscall", - "syscall.SYS_MPX": "syscall", - "syscall.SYS_MQUERY": "syscall", - "syscall.SYS_MQ_GETSETATTR": "syscall", - "syscall.SYS_MQ_NOTIFY": "syscall", - "syscall.SYS_MQ_OPEN": "syscall", - "syscall.SYS_MQ_TIMEDRECEIVE": "syscall", - "syscall.SYS_MQ_TIMEDSEND": "syscall", - "syscall.SYS_MQ_UNLINK": "syscall", - "syscall.SYS_MREMAP": "syscall", - "syscall.SYS_MSGCTL": "syscall", - "syscall.SYS_MSGGET": "syscall", - "syscall.SYS_MSGRCV": "syscall", - "syscall.SYS_MSGRCV_NOCANCEL": "syscall", - "syscall.SYS_MSGSND": "syscall", - "syscall.SYS_MSGSND_NOCANCEL": "syscall", - "syscall.SYS_MSGSYS": "syscall", - "syscall.SYS_MSYNC": "syscall", - "syscall.SYS_MSYNC_NOCANCEL": "syscall", - "syscall.SYS_MUNLOCK": "syscall", - "syscall.SYS_MUNLOCKALL": "syscall", - "syscall.SYS_MUNMAP": "syscall", - "syscall.SYS_NAME_TO_HANDLE_AT": "syscall", - "syscall.SYS_NANOSLEEP": "syscall", - "syscall.SYS_NEWFSTATAT": "syscall", - "syscall.SYS_NFSCLNT": "syscall", - "syscall.SYS_NFSSERVCTL": "syscall", - "syscall.SYS_NFSSVC": "syscall", - "syscall.SYS_NFSTAT": "syscall", - "syscall.SYS_NICE": "syscall", - "syscall.SYS_NLSTAT": "syscall", - "syscall.SYS_NMOUNT": "syscall", - "syscall.SYS_NSTAT": "syscall", - "syscall.SYS_NTP_ADJTIME": "syscall", - "syscall.SYS_NTP_GETTIME": "syscall", - "syscall.SYS_OABI_SYSCALL_BASE": "syscall", - "syscall.SYS_OBREAK": "syscall", - "syscall.SYS_OLDFSTAT": "syscall", - "syscall.SYS_OLDLSTAT": "syscall", - "syscall.SYS_OLDOLDUNAME": "syscall", - "syscall.SYS_OLDSTAT": "syscall", - "syscall.SYS_OLDUNAME": "syscall", - "syscall.SYS_OPEN": "syscall", - "syscall.SYS_OPENAT": "syscall", - "syscall.SYS_OPENBSD_POLL": "syscall", - "syscall.SYS_OPEN_BY_HANDLE_AT": "syscall", - "syscall.SYS_OPEN_EXTENDED": "syscall", - "syscall.SYS_OPEN_NOCANCEL": "syscall", - "syscall.SYS_OVADVISE": "syscall", - "syscall.SYS_PACCEPT": "syscall", - "syscall.SYS_PATHCONF": "syscall", - "syscall.SYS_PAUSE": "syscall", - "syscall.SYS_PCICONFIG_IOBASE": "syscall", - "syscall.SYS_PCICONFIG_READ": "syscall", - "syscall.SYS_PCICONFIG_WRITE": "syscall", - "syscall.SYS_PDFORK": "syscall", - "syscall.SYS_PDGETPID": "syscall", - "syscall.SYS_PDKILL": "syscall", - "syscall.SYS_PERF_EVENT_OPEN": "syscall", - "syscall.SYS_PERSONALITY": "syscall", - "syscall.SYS_PID_HIBERNATE": "syscall", - "syscall.SYS_PID_RESUME": "syscall", - "syscall.SYS_PID_SHUTDOWN_SOCKETS": "syscall", - "syscall.SYS_PID_SUSPEND": "syscall", - "syscall.SYS_PIPE": "syscall", - "syscall.SYS_PIPE2": "syscall", - "syscall.SYS_PIVOT_ROOT": "syscall", - "syscall.SYS_PMC_CONTROL": "syscall", - "syscall.SYS_PMC_GET_INFO": "syscall", - "syscall.SYS_POLL": "syscall", - "syscall.SYS_POLLTS": "syscall", - "syscall.SYS_POLL_NOCANCEL": "syscall", - "syscall.SYS_POSIX_FADVISE": "syscall", - "syscall.SYS_POSIX_FALLOCATE": "syscall", - "syscall.SYS_POSIX_OPENPT": "syscall", - "syscall.SYS_POSIX_SPAWN": "syscall", - "syscall.SYS_PPOLL": "syscall", - "syscall.SYS_PRCTL": "syscall", - "syscall.SYS_PREAD": "syscall", - "syscall.SYS_PREAD64": "syscall", - "syscall.SYS_PREADV": "syscall", - "syscall.SYS_PREAD_NOCANCEL": "syscall", - "syscall.SYS_PRLIMIT64": "syscall", - "syscall.SYS_PROCCTL": "syscall", - "syscall.SYS_PROCESS_POLICY": "syscall", - "syscall.SYS_PROCESS_VM_READV": "syscall", - "syscall.SYS_PROCESS_VM_WRITEV": "syscall", - "syscall.SYS_PROC_INFO": "syscall", - "syscall.SYS_PROF": "syscall", - "syscall.SYS_PROFIL": "syscall", - "syscall.SYS_PSELECT": "syscall", - "syscall.SYS_PSELECT6": "syscall", - "syscall.SYS_PSET_ASSIGN": "syscall", - "syscall.SYS_PSET_CREATE": "syscall", - "syscall.SYS_PSET_DESTROY": "syscall", - "syscall.SYS_PSYNCH_CVBROAD": "syscall", - "syscall.SYS_PSYNCH_CVCLRPREPOST": "syscall", - "syscall.SYS_PSYNCH_CVSIGNAL": "syscall", - "syscall.SYS_PSYNCH_CVWAIT": "syscall", - "syscall.SYS_PSYNCH_MUTEXDROP": "syscall", - "syscall.SYS_PSYNCH_MUTEXWAIT": "syscall", - "syscall.SYS_PSYNCH_RW_DOWNGRADE": "syscall", - "syscall.SYS_PSYNCH_RW_LONGRDLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_RDLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_UNLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_UNLOCK2": "syscall", - "syscall.SYS_PSYNCH_RW_UPGRADE": "syscall", - "syscall.SYS_PSYNCH_RW_WRLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_YIELDWRLOCK": "syscall", - "syscall.SYS_PTRACE": "syscall", - "syscall.SYS_PUTPMSG": "syscall", - "syscall.SYS_PWRITE": "syscall", - "syscall.SYS_PWRITE64": "syscall", - "syscall.SYS_PWRITEV": "syscall", - "syscall.SYS_PWRITE_NOCANCEL": "syscall", - "syscall.SYS_QUERY_MODULE": "syscall", - "syscall.SYS_QUOTACTL": "syscall", - "syscall.SYS_RASCTL": "syscall", - "syscall.SYS_RCTL_ADD_RULE": "syscall", - "syscall.SYS_RCTL_GET_LIMITS": "syscall", - "syscall.SYS_RCTL_GET_RACCT": "syscall", - "syscall.SYS_RCTL_GET_RULES": "syscall", - "syscall.SYS_RCTL_REMOVE_RULE": "syscall", - "syscall.SYS_READ": "syscall", - "syscall.SYS_READAHEAD": "syscall", - "syscall.SYS_READDIR": "syscall", - "syscall.SYS_READLINK": "syscall", - "syscall.SYS_READLINKAT": "syscall", - "syscall.SYS_READV": "syscall", - "syscall.SYS_READV_NOCANCEL": "syscall", - "syscall.SYS_READ_NOCANCEL": "syscall", - "syscall.SYS_REBOOT": "syscall", - "syscall.SYS_RECV": "syscall", - "syscall.SYS_RECVFROM": "syscall", - "syscall.SYS_RECVFROM_NOCANCEL": "syscall", - "syscall.SYS_RECVMMSG": "syscall", - "syscall.SYS_RECVMSG": "syscall", - "syscall.SYS_RECVMSG_NOCANCEL": "syscall", - "syscall.SYS_REMAP_FILE_PAGES": "syscall", - "syscall.SYS_REMOVEXATTR": "syscall", - "syscall.SYS_RENAME": "syscall", - "syscall.SYS_RENAMEAT": "syscall", - "syscall.SYS_REQUEST_KEY": "syscall", - "syscall.SYS_RESTART_SYSCALL": "syscall", - "syscall.SYS_REVOKE": "syscall", - "syscall.SYS_RFORK": "syscall", - "syscall.SYS_RMDIR": "syscall", - "syscall.SYS_RTPRIO": "syscall", - "syscall.SYS_RTPRIO_THREAD": "syscall", - "syscall.SYS_RT_SIGACTION": "syscall", - "syscall.SYS_RT_SIGPENDING": "syscall", - "syscall.SYS_RT_SIGPROCMASK": "syscall", - "syscall.SYS_RT_SIGQUEUEINFO": "syscall", - "syscall.SYS_RT_SIGRETURN": "syscall", - "syscall.SYS_RT_SIGSUSPEND": "syscall", - "syscall.SYS_RT_SIGTIMEDWAIT": "syscall", - "syscall.SYS_RT_TGSIGQUEUEINFO": "syscall", - "syscall.SYS_SBRK": "syscall", - "syscall.SYS_SCHED_GETAFFINITY": "syscall", - "syscall.SYS_SCHED_GETPARAM": "syscall", - "syscall.SYS_SCHED_GETSCHEDULER": "syscall", - "syscall.SYS_SCHED_GET_PRIORITY_MAX": "syscall", - "syscall.SYS_SCHED_GET_PRIORITY_MIN": "syscall", - "syscall.SYS_SCHED_RR_GET_INTERVAL": "syscall", - "syscall.SYS_SCHED_SETAFFINITY": "syscall", - "syscall.SYS_SCHED_SETPARAM": "syscall", - "syscall.SYS_SCHED_SETSCHEDULER": "syscall", - "syscall.SYS_SCHED_YIELD": "syscall", - "syscall.SYS_SCTP_GENERIC_RECVMSG": "syscall", - "syscall.SYS_SCTP_GENERIC_SENDMSG": "syscall", - "syscall.SYS_SCTP_GENERIC_SENDMSG_IOV": "syscall", - "syscall.SYS_SCTP_PEELOFF": "syscall", - "syscall.SYS_SEARCHFS": "syscall", - "syscall.SYS_SECURITY": "syscall", - "syscall.SYS_SELECT": "syscall", - "syscall.SYS_SELECT_NOCANCEL": "syscall", - "syscall.SYS_SEMCONFIG": "syscall", - "syscall.SYS_SEMCTL": "syscall", - "syscall.SYS_SEMGET": "syscall", - "syscall.SYS_SEMOP": "syscall", - "syscall.SYS_SEMSYS": "syscall", - "syscall.SYS_SEMTIMEDOP": "syscall", - "syscall.SYS_SEM_CLOSE": "syscall", - "syscall.SYS_SEM_DESTROY": "syscall", - "syscall.SYS_SEM_GETVALUE": "syscall", - "syscall.SYS_SEM_INIT": "syscall", - "syscall.SYS_SEM_OPEN": "syscall", - "syscall.SYS_SEM_POST": "syscall", - "syscall.SYS_SEM_TRYWAIT": "syscall", - "syscall.SYS_SEM_UNLINK": "syscall", - "syscall.SYS_SEM_WAIT": "syscall", - "syscall.SYS_SEM_WAIT_NOCANCEL": "syscall", - "syscall.SYS_SEND": "syscall", - "syscall.SYS_SENDFILE": "syscall", - "syscall.SYS_SENDFILE64": "syscall", - "syscall.SYS_SENDMMSG": "syscall", - "syscall.SYS_SENDMSG": "syscall", - "syscall.SYS_SENDMSG_NOCANCEL": "syscall", - "syscall.SYS_SENDTO": "syscall", - "syscall.SYS_SENDTO_NOCANCEL": "syscall", - "syscall.SYS_SETATTRLIST": "syscall", - "syscall.SYS_SETAUDIT": "syscall", - "syscall.SYS_SETAUDIT_ADDR": "syscall", - "syscall.SYS_SETAUID": "syscall", - "syscall.SYS_SETCONTEXT": "syscall", - "syscall.SYS_SETDOMAINNAME": "syscall", - "syscall.SYS_SETEGID": "syscall", - "syscall.SYS_SETEUID": "syscall", - "syscall.SYS_SETFIB": "syscall", - "syscall.SYS_SETFSGID": "syscall", - "syscall.SYS_SETFSGID32": "syscall", - "syscall.SYS_SETFSUID": "syscall", - "syscall.SYS_SETFSUID32": "syscall", - "syscall.SYS_SETGID": "syscall", - "syscall.SYS_SETGID32": "syscall", - "syscall.SYS_SETGROUPS": "syscall", - "syscall.SYS_SETGROUPS32": "syscall", - "syscall.SYS_SETHOSTNAME": "syscall", - "syscall.SYS_SETITIMER": "syscall", - "syscall.SYS_SETLCID": "syscall", - "syscall.SYS_SETLOGIN": "syscall", - "syscall.SYS_SETLOGINCLASS": "syscall", - "syscall.SYS_SETNS": "syscall", - "syscall.SYS_SETPGID": "syscall", - "syscall.SYS_SETPRIORITY": "syscall", - "syscall.SYS_SETPRIVEXEC": "syscall", - "syscall.SYS_SETREGID": "syscall", - "syscall.SYS_SETREGID32": "syscall", - "syscall.SYS_SETRESGID": "syscall", - "syscall.SYS_SETRESGID32": "syscall", - "syscall.SYS_SETRESUID": "syscall", - "syscall.SYS_SETRESUID32": "syscall", - "syscall.SYS_SETREUID": "syscall", - "syscall.SYS_SETREUID32": "syscall", - "syscall.SYS_SETRLIMIT": "syscall", - "syscall.SYS_SETRTABLE": "syscall", - "syscall.SYS_SETSGROUPS": "syscall", - "syscall.SYS_SETSID": "syscall", - "syscall.SYS_SETSOCKOPT": "syscall", - "syscall.SYS_SETTID": "syscall", - "syscall.SYS_SETTID_WITH_PID": "syscall", - "syscall.SYS_SETTIMEOFDAY": "syscall", - "syscall.SYS_SETUID": "syscall", - "syscall.SYS_SETUID32": "syscall", - "syscall.SYS_SETWGROUPS": "syscall", - "syscall.SYS_SETXATTR": "syscall", - "syscall.SYS_SET_MEMPOLICY": "syscall", - "syscall.SYS_SET_ROBUST_LIST": "syscall", - "syscall.SYS_SET_THREAD_AREA": "syscall", - "syscall.SYS_SET_TID_ADDRESS": "syscall", - "syscall.SYS_SGETMASK": "syscall", - "syscall.SYS_SHARED_REGION_CHECK_NP": "syscall", - "syscall.SYS_SHARED_REGION_MAP_AND_SLIDE_NP": "syscall", - "syscall.SYS_SHMAT": "syscall", - "syscall.SYS_SHMCTL": "syscall", - "syscall.SYS_SHMDT": "syscall", - "syscall.SYS_SHMGET": "syscall", - "syscall.SYS_SHMSYS": "syscall", - "syscall.SYS_SHM_OPEN": "syscall", - "syscall.SYS_SHM_UNLINK": "syscall", - "syscall.SYS_SHUTDOWN": "syscall", - "syscall.SYS_SIGACTION": "syscall", - "syscall.SYS_SIGALTSTACK": "syscall", - "syscall.SYS_SIGNAL": "syscall", - "syscall.SYS_SIGNALFD": "syscall", - "syscall.SYS_SIGNALFD4": "syscall", - "syscall.SYS_SIGPENDING": "syscall", - "syscall.SYS_SIGPROCMASK": "syscall", - "syscall.SYS_SIGQUEUE": "syscall", - "syscall.SYS_SIGQUEUEINFO": "syscall", - "syscall.SYS_SIGRETURN": "syscall", - "syscall.SYS_SIGSUSPEND": "syscall", - "syscall.SYS_SIGSUSPEND_NOCANCEL": "syscall", - "syscall.SYS_SIGTIMEDWAIT": "syscall", - "syscall.SYS_SIGWAIT": "syscall", - "syscall.SYS_SIGWAITINFO": "syscall", - "syscall.SYS_SOCKET": "syscall", - "syscall.SYS_SOCKETCALL": "syscall", - "syscall.SYS_SOCKETPAIR": "syscall", - "syscall.SYS_SPLICE": "syscall", - "syscall.SYS_SSETMASK": "syscall", - "syscall.SYS_SSTK": "syscall", - "syscall.SYS_STACK_SNAPSHOT": "syscall", - "syscall.SYS_STAT": "syscall", - "syscall.SYS_STAT64": "syscall", - "syscall.SYS_STAT64_EXTENDED": "syscall", - "syscall.SYS_STATFS": "syscall", - "syscall.SYS_STATFS64": "syscall", - "syscall.SYS_STATV": "syscall", - "syscall.SYS_STATVFS1": "syscall", - "syscall.SYS_STAT_EXTENDED": "syscall", - "syscall.SYS_STIME": "syscall", - "syscall.SYS_STTY": "syscall", - "syscall.SYS_SWAPCONTEXT": "syscall", - "syscall.SYS_SWAPCTL": "syscall", - "syscall.SYS_SWAPOFF": "syscall", - "syscall.SYS_SWAPON": "syscall", - "syscall.SYS_SYMLINK": "syscall", - "syscall.SYS_SYMLINKAT": "syscall", - "syscall.SYS_SYNC": "syscall", - "syscall.SYS_SYNCFS": "syscall", - "syscall.SYS_SYNC_FILE_RANGE": "syscall", - "syscall.SYS_SYSARCH": "syscall", - "syscall.SYS_SYSCALL": "syscall", - "syscall.SYS_SYSCALL_BASE": "syscall", - "syscall.SYS_SYSFS": "syscall", - "syscall.SYS_SYSINFO": "syscall", - "syscall.SYS_SYSLOG": "syscall", - "syscall.SYS_TEE": "syscall", - "syscall.SYS_TGKILL": "syscall", - "syscall.SYS_THREAD_SELFID": "syscall", - "syscall.SYS_THR_CREATE": "syscall", - "syscall.SYS_THR_EXIT": "syscall", - "syscall.SYS_THR_KILL": "syscall", - "syscall.SYS_THR_KILL2": "syscall", - "syscall.SYS_THR_NEW": "syscall", - "syscall.SYS_THR_SELF": "syscall", - "syscall.SYS_THR_SET_NAME": "syscall", - "syscall.SYS_THR_SUSPEND": "syscall", - "syscall.SYS_THR_WAKE": "syscall", - "syscall.SYS_TIME": "syscall", - "syscall.SYS_TIMERFD_CREATE": "syscall", - "syscall.SYS_TIMERFD_GETTIME": "syscall", - "syscall.SYS_TIMERFD_SETTIME": "syscall", - "syscall.SYS_TIMER_CREATE": "syscall", - "syscall.SYS_TIMER_DELETE": "syscall", - "syscall.SYS_TIMER_GETOVERRUN": "syscall", - "syscall.SYS_TIMER_GETTIME": "syscall", - "syscall.SYS_TIMER_SETTIME": "syscall", - "syscall.SYS_TIMES": "syscall", - "syscall.SYS_TKILL": "syscall", - "syscall.SYS_TRUNCATE": "syscall", - "syscall.SYS_TRUNCATE64": "syscall", - "syscall.SYS_TUXCALL": "syscall", - "syscall.SYS_UGETRLIMIT": "syscall", - "syscall.SYS_ULIMIT": "syscall", - "syscall.SYS_UMASK": "syscall", - "syscall.SYS_UMASK_EXTENDED": "syscall", - "syscall.SYS_UMOUNT": "syscall", - "syscall.SYS_UMOUNT2": "syscall", - "syscall.SYS_UNAME": "syscall", - "syscall.SYS_UNDELETE": "syscall", - "syscall.SYS_UNLINK": "syscall", - "syscall.SYS_UNLINKAT": "syscall", - "syscall.SYS_UNMOUNT": "syscall", - "syscall.SYS_UNSHARE": "syscall", - "syscall.SYS_USELIB": "syscall", - "syscall.SYS_USTAT": "syscall", - "syscall.SYS_UTIME": "syscall", - "syscall.SYS_UTIMENSAT": "syscall", - "syscall.SYS_UTIMES": "syscall", - "syscall.SYS_UTRACE": "syscall", - "syscall.SYS_UUIDGEN": "syscall", - "syscall.SYS_VADVISE": "syscall", - "syscall.SYS_VFORK": "syscall", - "syscall.SYS_VHANGUP": "syscall", - "syscall.SYS_VM86": "syscall", - "syscall.SYS_VM86OLD": "syscall", - "syscall.SYS_VMSPLICE": "syscall", - "syscall.SYS_VM_PRESSURE_MONITOR": "syscall", - "syscall.SYS_VSERVER": "syscall", - "syscall.SYS_WAIT4": "syscall", - "syscall.SYS_WAIT4_NOCANCEL": "syscall", - "syscall.SYS_WAIT6": "syscall", - "syscall.SYS_WAITEVENT": "syscall", - "syscall.SYS_WAITID": "syscall", - "syscall.SYS_WAITID_NOCANCEL": "syscall", - "syscall.SYS_WAITPID": "syscall", - "syscall.SYS_WATCHEVENT": "syscall", - "syscall.SYS_WORKQ_KERNRETURN": "syscall", - "syscall.SYS_WORKQ_OPEN": "syscall", - "syscall.SYS_WRITE": "syscall", - "syscall.SYS_WRITEV": "syscall", - "syscall.SYS_WRITEV_NOCANCEL": "syscall", - "syscall.SYS_WRITE_NOCANCEL": "syscall", - "syscall.SYS_YIELD": "syscall", - "syscall.SYS__LLSEEK": "syscall", - "syscall.SYS__LWP_CONTINUE": "syscall", - "syscall.SYS__LWP_CREATE": "syscall", - "syscall.SYS__LWP_CTL": "syscall", - "syscall.SYS__LWP_DETACH": "syscall", - "syscall.SYS__LWP_EXIT": "syscall", - "syscall.SYS__LWP_GETNAME": "syscall", - "syscall.SYS__LWP_GETPRIVATE": "syscall", - "syscall.SYS__LWP_KILL": "syscall", - "syscall.SYS__LWP_PARK": "syscall", - "syscall.SYS__LWP_SELF": "syscall", - "syscall.SYS__LWP_SETNAME": "syscall", - "syscall.SYS__LWP_SETPRIVATE": "syscall", - "syscall.SYS__LWP_SUSPEND": "syscall", - "syscall.SYS__LWP_UNPARK": "syscall", - "syscall.SYS__LWP_UNPARK_ALL": "syscall", - "syscall.SYS__LWP_WAIT": "syscall", - "syscall.SYS__LWP_WAKEUP": "syscall", - "syscall.SYS__NEWSELECT": "syscall", - "syscall.SYS__PSET_BIND": "syscall", - "syscall.SYS__SCHED_GETAFFINITY": "syscall", - "syscall.SYS__SCHED_GETPARAM": "syscall", - "syscall.SYS__SCHED_SETAFFINITY": "syscall", - "syscall.SYS__SCHED_SETPARAM": "syscall", - "syscall.SYS__SYSCTL": "syscall", - "syscall.SYS__UMTX_LOCK": "syscall", - "syscall.SYS__UMTX_OP": "syscall", - "syscall.SYS__UMTX_UNLOCK": "syscall", - "syscall.SYS___ACL_ACLCHECK_FD": "syscall", - "syscall.SYS___ACL_ACLCHECK_FILE": "syscall", - "syscall.SYS___ACL_ACLCHECK_LINK": "syscall", - "syscall.SYS___ACL_DELETE_FD": "syscall", - "syscall.SYS___ACL_DELETE_FILE": "syscall", - "syscall.SYS___ACL_DELETE_LINK": "syscall", - "syscall.SYS___ACL_GET_FD": "syscall", - "syscall.SYS___ACL_GET_FILE": "syscall", - "syscall.SYS___ACL_GET_LINK": "syscall", - "syscall.SYS___ACL_SET_FD": "syscall", - "syscall.SYS___ACL_SET_FILE": "syscall", - "syscall.SYS___ACL_SET_LINK": "syscall", - "syscall.SYS___CLONE": "syscall", - "syscall.SYS___DISABLE_THREADSIGNAL": "syscall", - "syscall.SYS___GETCWD": "syscall", - "syscall.SYS___GETLOGIN": "syscall", - "syscall.SYS___GET_TCB": "syscall", - "syscall.SYS___MAC_EXECVE": "syscall", - "syscall.SYS___MAC_GETFSSTAT": "syscall", - "syscall.SYS___MAC_GET_FD": "syscall", - "syscall.SYS___MAC_GET_FILE": "syscall", - "syscall.SYS___MAC_GET_LCID": "syscall", - "syscall.SYS___MAC_GET_LCTX": "syscall", - "syscall.SYS___MAC_GET_LINK": "syscall", - "syscall.SYS___MAC_GET_MOUNT": "syscall", - "syscall.SYS___MAC_GET_PID": "syscall", - "syscall.SYS___MAC_GET_PROC": "syscall", - "syscall.SYS___MAC_MOUNT": "syscall", - "syscall.SYS___MAC_SET_FD": "syscall", - "syscall.SYS___MAC_SET_FILE": "syscall", - "syscall.SYS___MAC_SET_LCTX": "syscall", - "syscall.SYS___MAC_SET_LINK": "syscall", - "syscall.SYS___MAC_SET_PROC": "syscall", - "syscall.SYS___MAC_SYSCALL": "syscall", - "syscall.SYS___OLD_SEMWAIT_SIGNAL": "syscall", - "syscall.SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL": "syscall", - "syscall.SYS___POSIX_CHOWN": "syscall", - "syscall.SYS___POSIX_FCHOWN": "syscall", - "syscall.SYS___POSIX_LCHOWN": "syscall", - "syscall.SYS___POSIX_RENAME": "syscall", - "syscall.SYS___PTHREAD_CANCELED": "syscall", - "syscall.SYS___PTHREAD_CHDIR": "syscall", - "syscall.SYS___PTHREAD_FCHDIR": "syscall", - "syscall.SYS___PTHREAD_KILL": "syscall", - "syscall.SYS___PTHREAD_MARKCANCEL": "syscall", - "syscall.SYS___PTHREAD_SIGMASK": "syscall", - "syscall.SYS___QUOTACTL": "syscall", - "syscall.SYS___SEMCTL": "syscall", - "syscall.SYS___SEMWAIT_SIGNAL": "syscall", - "syscall.SYS___SEMWAIT_SIGNAL_NOCANCEL": "syscall", - "syscall.SYS___SETLOGIN": "syscall", - "syscall.SYS___SETUGID": "syscall", - "syscall.SYS___SET_TCB": "syscall", - "syscall.SYS___SIGACTION_SIGTRAMP": "syscall", - "syscall.SYS___SIGTIMEDWAIT": "syscall", - "syscall.SYS___SIGWAIT": "syscall", - "syscall.SYS___SIGWAIT_NOCANCEL": "syscall", - "syscall.SYS___SYSCTL": "syscall", - "syscall.SYS___TFORK": "syscall", - "syscall.SYS___THREXIT": "syscall", - "syscall.SYS___THRSIGDIVERT": "syscall", - "syscall.SYS___THRSLEEP": "syscall", - "syscall.SYS___THRWAKEUP": "syscall", - "syscall.S_ARCH1": "syscall", - "syscall.S_ARCH2": "syscall", - "syscall.S_BLKSIZE": "syscall", - "syscall.S_IEXEC": "syscall", - "syscall.S_IFBLK": "syscall", - "syscall.S_IFCHR": "syscall", - "syscall.S_IFDIR": "syscall", - "syscall.S_IFIFO": "syscall", - "syscall.S_IFLNK": "syscall", - "syscall.S_IFMT": "syscall", - "syscall.S_IFREG": "syscall", - "syscall.S_IFSOCK": "syscall", - "syscall.S_IFWHT": "syscall", - "syscall.S_IREAD": "syscall", - "syscall.S_IRGRP": "syscall", - "syscall.S_IROTH": "syscall", - "syscall.S_IRUSR": "syscall", - "syscall.S_IRWXG": "syscall", - "syscall.S_IRWXO": "syscall", - "syscall.S_IRWXU": "syscall", - "syscall.S_ISGID": "syscall", - "syscall.S_ISTXT": "syscall", - "syscall.S_ISUID": "syscall", - "syscall.S_ISVTX": "syscall", - "syscall.S_IWGRP": "syscall", - "syscall.S_IWOTH": "syscall", - "syscall.S_IWRITE": "syscall", - "syscall.S_IWUSR": "syscall", - "syscall.S_IXGRP": "syscall", - "syscall.S_IXOTH": "syscall", - "syscall.S_IXUSR": "syscall", - "syscall.S_LOGIN_SET": "syscall", - "syscall.SecurityAttributes": "syscall", - "syscall.Seek": "syscall", - "syscall.Select": "syscall", - "syscall.Sendfile": "syscall", - "syscall.Sendmsg": "syscall", - "syscall.SendmsgN": "syscall", - "syscall.Sendto": "syscall", - "syscall.Servent": "syscall", - "syscall.SetBpf": "syscall", - "syscall.SetBpfBuflen": "syscall", - "syscall.SetBpfDatalink": "syscall", - "syscall.SetBpfHeadercmpl": "syscall", - "syscall.SetBpfImmediate": "syscall", - "syscall.SetBpfInterface": "syscall", - "syscall.SetBpfPromisc": "syscall", - "syscall.SetBpfTimeout": "syscall", - "syscall.SetCurrentDirectory": "syscall", - "syscall.SetEndOfFile": "syscall", - "syscall.SetEnvironmentVariable": "syscall", - "syscall.SetFileAttributes": "syscall", - "syscall.SetFileCompletionNotificationModes": "syscall", - "syscall.SetFilePointer": "syscall", - "syscall.SetFileTime": "syscall", - "syscall.SetHandleInformation": "syscall", - "syscall.SetKevent": "syscall", - "syscall.SetLsfPromisc": "syscall", - "syscall.SetNonblock": "syscall", - "syscall.Setdomainname": "syscall", - "syscall.Setegid": "syscall", - "syscall.Setenv": "syscall", - "syscall.Seteuid": "syscall", - "syscall.Setfsgid": "syscall", - "syscall.Setfsuid": "syscall", - "syscall.Setgid": "syscall", - "syscall.Setgroups": "syscall", - "syscall.Sethostname": "syscall", - "syscall.Setlogin": "syscall", - "syscall.Setpgid": "syscall", - "syscall.Setpriority": "syscall", - "syscall.Setprivexec": "syscall", - "syscall.Setregid": "syscall", - "syscall.Setresgid": "syscall", - "syscall.Setresuid": "syscall", - "syscall.Setreuid": "syscall", - "syscall.Setrlimit": "syscall", - "syscall.Setsid": "syscall", - "syscall.Setsockopt": "syscall", - "syscall.SetsockoptByte": "syscall", - "syscall.SetsockoptICMPv6Filter": "syscall", - "syscall.SetsockoptIPMreq": "syscall", - "syscall.SetsockoptIPMreqn": "syscall", - "syscall.SetsockoptIPv6Mreq": "syscall", - "syscall.SetsockoptInet4Addr": "syscall", - "syscall.SetsockoptInt": "syscall", - "syscall.SetsockoptLinger": "syscall", - "syscall.SetsockoptString": "syscall", - "syscall.SetsockoptTimeval": "syscall", - "syscall.Settimeofday": "syscall", - "syscall.Setuid": "syscall", - "syscall.Setxattr": "syscall", - "syscall.Shutdown": "syscall", - "syscall.SidTypeAlias": "syscall", - "syscall.SidTypeComputer": "syscall", - "syscall.SidTypeDeletedAccount": "syscall", - "syscall.SidTypeDomain": "syscall", - "syscall.SidTypeGroup": "syscall", - "syscall.SidTypeInvalid": "syscall", - "syscall.SidTypeLabel": "syscall", - "syscall.SidTypeUnknown": "syscall", - "syscall.SidTypeUser": "syscall", - "syscall.SidTypeWellKnownGroup": "syscall", - "syscall.Signal": "syscall", - "syscall.SizeofBpfHdr": "syscall", - "syscall.SizeofBpfInsn": "syscall", - "syscall.SizeofBpfProgram": "syscall", - "syscall.SizeofBpfStat": "syscall", - "syscall.SizeofBpfVersion": "syscall", - "syscall.SizeofBpfZbuf": "syscall", - "syscall.SizeofBpfZbufHeader": "syscall", - "syscall.SizeofCmsghdr": "syscall", - "syscall.SizeofICMPv6Filter": "syscall", - "syscall.SizeofIPMreq": "syscall", - "syscall.SizeofIPMreqn": "syscall", - "syscall.SizeofIPv6MTUInfo": "syscall", - "syscall.SizeofIPv6Mreq": "syscall", - "syscall.SizeofIfAddrmsg": "syscall", - "syscall.SizeofIfAnnounceMsghdr": "syscall", - "syscall.SizeofIfData": "syscall", - "syscall.SizeofIfInfomsg": "syscall", - "syscall.SizeofIfMsghdr": "syscall", - "syscall.SizeofIfaMsghdr": "syscall", - "syscall.SizeofIfmaMsghdr": "syscall", - "syscall.SizeofIfmaMsghdr2": "syscall", - "syscall.SizeofInet4Pktinfo": "syscall", - "syscall.SizeofInet6Pktinfo": "syscall", - "syscall.SizeofInotifyEvent": "syscall", - "syscall.SizeofLinger": "syscall", - "syscall.SizeofMsghdr": "syscall", - "syscall.SizeofNlAttr": "syscall", - "syscall.SizeofNlMsgerr": "syscall", - "syscall.SizeofNlMsghdr": "syscall", - "syscall.SizeofRtAttr": "syscall", - "syscall.SizeofRtGenmsg": "syscall", - "syscall.SizeofRtMetrics": "syscall", - "syscall.SizeofRtMsg": "syscall", - "syscall.SizeofRtMsghdr": "syscall", - "syscall.SizeofRtNexthop": "syscall", - "syscall.SizeofSockFilter": "syscall", - "syscall.SizeofSockFprog": "syscall", - "syscall.SizeofSockaddrAny": "syscall", - "syscall.SizeofSockaddrDatalink": "syscall", - "syscall.SizeofSockaddrInet4": "syscall", - "syscall.SizeofSockaddrInet6": "syscall", - "syscall.SizeofSockaddrLinklayer": "syscall", - "syscall.SizeofSockaddrNetlink": "syscall", - "syscall.SizeofSockaddrUnix": "syscall", - "syscall.SizeofTCPInfo": "syscall", - "syscall.SizeofUcred": "syscall", - "syscall.SlicePtrFromStrings": "syscall", - "syscall.SockFilter": "syscall", - "syscall.SockFprog": "syscall", - "syscall.SockaddrDatalink": "syscall", - "syscall.SockaddrGen": "syscall", - "syscall.SockaddrInet4": "syscall", - "syscall.SockaddrInet6": "syscall", - "syscall.SockaddrLinklayer": "syscall", - "syscall.SockaddrNetlink": "syscall", - "syscall.SockaddrUnix": "syscall", - "syscall.Socket": "syscall", - "syscall.SocketControlMessage": "syscall", - "syscall.SocketDisableIPv6": "syscall", - "syscall.Socketpair": "syscall", - "syscall.Splice": "syscall", - "syscall.StartProcess": "syscall", - "syscall.StartupInfo": "syscall", - "syscall.Stat": "syscall", - "syscall.Stat_t": "syscall", - "syscall.Statfs": "syscall", - "syscall.Statfs_t": "syscall", - "syscall.Stderr": "syscall", - "syscall.Stdin": "syscall", - "syscall.Stdout": "syscall", - "syscall.StringBytePtr": "syscall", - "syscall.StringByteSlice": "syscall", - "syscall.StringSlicePtr": "syscall", - "syscall.StringToSid": "syscall", - "syscall.StringToUTF16": "syscall", - "syscall.StringToUTF16Ptr": "syscall", - "syscall.Symlink": "syscall", - "syscall.Sync": "syscall", - "syscall.SyncFileRange": "syscall", - "syscall.SysProcAttr": "syscall", - "syscall.SysProcIDMap": "syscall", - "syscall.Syscall": "syscall", - "syscall.Syscall12": "syscall", - "syscall.Syscall15": "syscall", - "syscall.Syscall6": "syscall", - "syscall.Syscall9": "syscall", - "syscall.Sysctl": "syscall", - "syscall.SysctlUint32": "syscall", - "syscall.Sysctlnode": "syscall", - "syscall.Sysinfo": "syscall", - "syscall.Sysinfo_t": "syscall", - "syscall.Systemtime": "syscall", - "syscall.TCGETS": "syscall", - "syscall.TCIFLUSH": "syscall", - "syscall.TCIOFLUSH": "syscall", - "syscall.TCOFLUSH": "syscall", - "syscall.TCPInfo": "syscall", - "syscall.TCPKeepalive": "syscall", - "syscall.TCP_CA_NAME_MAX": "syscall", - "syscall.TCP_CONGCTL": "syscall", - "syscall.TCP_CONGESTION": "syscall", - "syscall.TCP_CONNECTIONTIMEOUT": "syscall", - "syscall.TCP_CORK": "syscall", - "syscall.TCP_DEFER_ACCEPT": "syscall", - "syscall.TCP_INFO": "syscall", - "syscall.TCP_KEEPALIVE": "syscall", - "syscall.TCP_KEEPCNT": "syscall", - "syscall.TCP_KEEPIDLE": "syscall", - "syscall.TCP_KEEPINIT": "syscall", - "syscall.TCP_KEEPINTVL": "syscall", - "syscall.TCP_LINGER2": "syscall", - "syscall.TCP_MAXBURST": "syscall", - "syscall.TCP_MAXHLEN": "syscall", - "syscall.TCP_MAXOLEN": "syscall", - "syscall.TCP_MAXSEG": "syscall", - "syscall.TCP_MAXWIN": "syscall", - "syscall.TCP_MAX_SACK": "syscall", - "syscall.TCP_MAX_WINSHIFT": "syscall", - "syscall.TCP_MD5SIG": "syscall", - "syscall.TCP_MD5SIG_MAXKEYLEN": "syscall", - "syscall.TCP_MINMSS": "syscall", - "syscall.TCP_MINMSSOVERLOAD": "syscall", - "syscall.TCP_MSS": "syscall", - "syscall.TCP_NODELAY": "syscall", - "syscall.TCP_NOOPT": "syscall", - "syscall.TCP_NOPUSH": "syscall", - "syscall.TCP_NSTATES": "syscall", - "syscall.TCP_QUICKACK": "syscall", - "syscall.TCP_RXT_CONNDROPTIME": "syscall", - "syscall.TCP_RXT_FINDROP": "syscall", - "syscall.TCP_SACK_ENABLE": "syscall", - "syscall.TCP_SYNCNT": "syscall", - "syscall.TCP_VENDOR": "syscall", - "syscall.TCP_WINDOW_CLAMP": "syscall", - "syscall.TCSAFLUSH": "syscall", - "syscall.TCSETS": "syscall", - "syscall.TF_DISCONNECT": "syscall", - "syscall.TF_REUSE_SOCKET": "syscall", - "syscall.TF_USE_DEFAULT_WORKER": "syscall", - "syscall.TF_USE_KERNEL_APC": "syscall", - "syscall.TF_USE_SYSTEM_THREAD": "syscall", - "syscall.TF_WRITE_BEHIND": "syscall", - "syscall.TH32CS_INHERIT": "syscall", - "syscall.TH32CS_SNAPALL": "syscall", - "syscall.TH32CS_SNAPHEAPLIST": "syscall", - "syscall.TH32CS_SNAPMODULE": "syscall", - "syscall.TH32CS_SNAPMODULE32": "syscall", - "syscall.TH32CS_SNAPPROCESS": "syscall", - "syscall.TH32CS_SNAPTHREAD": "syscall", - "syscall.TIME_ZONE_ID_DAYLIGHT": "syscall", - "syscall.TIME_ZONE_ID_STANDARD": "syscall", - "syscall.TIME_ZONE_ID_UNKNOWN": "syscall", - "syscall.TIOCCBRK": "syscall", - "syscall.TIOCCDTR": "syscall", - "syscall.TIOCCONS": "syscall", - "syscall.TIOCDCDTIMESTAMP": "syscall", - "syscall.TIOCDRAIN": "syscall", - "syscall.TIOCDSIMICROCODE": "syscall", - "syscall.TIOCEXCL": "syscall", - "syscall.TIOCEXT": "syscall", - "syscall.TIOCFLAG_CDTRCTS": "syscall", - "syscall.TIOCFLAG_CLOCAL": "syscall", - "syscall.TIOCFLAG_CRTSCTS": "syscall", - "syscall.TIOCFLAG_MDMBUF": "syscall", - "syscall.TIOCFLAG_PPS": "syscall", - "syscall.TIOCFLAG_SOFTCAR": "syscall", - "syscall.TIOCFLUSH": "syscall", - "syscall.TIOCGDEV": "syscall", - "syscall.TIOCGDRAINWAIT": "syscall", - "syscall.TIOCGETA": "syscall", - "syscall.TIOCGETD": "syscall", - "syscall.TIOCGFLAGS": "syscall", - "syscall.TIOCGICOUNT": "syscall", - "syscall.TIOCGLCKTRMIOS": "syscall", - "syscall.TIOCGLINED": "syscall", - "syscall.TIOCGPGRP": "syscall", - "syscall.TIOCGPTN": "syscall", - "syscall.TIOCGQSIZE": "syscall", - "syscall.TIOCGRANTPT": "syscall", - "syscall.TIOCGRS485": "syscall", - "syscall.TIOCGSERIAL": "syscall", - "syscall.TIOCGSID": "syscall", - "syscall.TIOCGSIZE": "syscall", - "syscall.TIOCGSOFTCAR": "syscall", - "syscall.TIOCGTSTAMP": "syscall", - "syscall.TIOCGWINSZ": "syscall", - "syscall.TIOCINQ": "syscall", - "syscall.TIOCIXOFF": "syscall", - "syscall.TIOCIXON": "syscall", - "syscall.TIOCLINUX": "syscall", - "syscall.TIOCMBIC": "syscall", - "syscall.TIOCMBIS": "syscall", - "syscall.TIOCMGDTRWAIT": "syscall", - "syscall.TIOCMGET": "syscall", - "syscall.TIOCMIWAIT": "syscall", - "syscall.TIOCMODG": "syscall", - "syscall.TIOCMODS": "syscall", - "syscall.TIOCMSDTRWAIT": "syscall", - "syscall.TIOCMSET": "syscall", - "syscall.TIOCM_CAR": "syscall", - "syscall.TIOCM_CD": "syscall", - "syscall.TIOCM_CTS": "syscall", - "syscall.TIOCM_DCD": "syscall", - "syscall.TIOCM_DSR": "syscall", - "syscall.TIOCM_DTR": "syscall", - "syscall.TIOCM_LE": "syscall", - "syscall.TIOCM_RI": "syscall", - "syscall.TIOCM_RNG": "syscall", - "syscall.TIOCM_RTS": "syscall", - "syscall.TIOCM_SR": "syscall", - "syscall.TIOCM_ST": "syscall", - "syscall.TIOCNOTTY": "syscall", - "syscall.TIOCNXCL": "syscall", - "syscall.TIOCOUTQ": "syscall", - "syscall.TIOCPKT": "syscall", - "syscall.TIOCPKT_DATA": "syscall", - "syscall.TIOCPKT_DOSTOP": "syscall", - "syscall.TIOCPKT_FLUSHREAD": "syscall", - "syscall.TIOCPKT_FLUSHWRITE": "syscall", - "syscall.TIOCPKT_IOCTL": "syscall", - "syscall.TIOCPKT_NOSTOP": "syscall", - "syscall.TIOCPKT_START": "syscall", - "syscall.TIOCPKT_STOP": "syscall", - "syscall.TIOCPTMASTER": "syscall", - "syscall.TIOCPTMGET": "syscall", - "syscall.TIOCPTSNAME": "syscall", - "syscall.TIOCPTYGNAME": "syscall", - "syscall.TIOCPTYGRANT": "syscall", - "syscall.TIOCPTYUNLK": "syscall", - "syscall.TIOCRCVFRAME": "syscall", - "syscall.TIOCREMOTE": "syscall", - "syscall.TIOCSBRK": "syscall", - "syscall.TIOCSCONS": "syscall", - "syscall.TIOCSCTTY": "syscall", - "syscall.TIOCSDRAINWAIT": "syscall", - "syscall.TIOCSDTR": "syscall", - "syscall.TIOCSERCONFIG": "syscall", - "syscall.TIOCSERGETLSR": "syscall", - "syscall.TIOCSERGETMULTI": "syscall", - "syscall.TIOCSERGSTRUCT": "syscall", - "syscall.TIOCSERGWILD": "syscall", - "syscall.TIOCSERSETMULTI": "syscall", - "syscall.TIOCSERSWILD": "syscall", - "syscall.TIOCSER_TEMT": "syscall", - "syscall.TIOCSETA": "syscall", - "syscall.TIOCSETAF": "syscall", - "syscall.TIOCSETAW": "syscall", - "syscall.TIOCSETD": "syscall", - "syscall.TIOCSFLAGS": "syscall", - "syscall.TIOCSIG": "syscall", - "syscall.TIOCSLCKTRMIOS": "syscall", - "syscall.TIOCSLINED": "syscall", - "syscall.TIOCSPGRP": "syscall", - "syscall.TIOCSPTLCK": "syscall", - "syscall.TIOCSQSIZE": "syscall", - "syscall.TIOCSRS485": "syscall", - "syscall.TIOCSSERIAL": "syscall", - "syscall.TIOCSSIZE": "syscall", - "syscall.TIOCSSOFTCAR": "syscall", - "syscall.TIOCSTART": "syscall", - "syscall.TIOCSTAT": "syscall", - "syscall.TIOCSTI": "syscall", - "syscall.TIOCSTOP": "syscall", - "syscall.TIOCSTSTAMP": "syscall", - "syscall.TIOCSWINSZ": "syscall", - "syscall.TIOCTIMESTAMP": "syscall", - "syscall.TIOCUCNTL": "syscall", - "syscall.TIOCVHANGUP": "syscall", - "syscall.TIOCXMTFRAME": "syscall", - "syscall.TOKEN_ADJUST_DEFAULT": "syscall", - "syscall.TOKEN_ADJUST_GROUPS": "syscall", - "syscall.TOKEN_ADJUST_PRIVILEGES": "syscall", - "syscall.TOKEN_ALL_ACCESS": "syscall", - "syscall.TOKEN_ASSIGN_PRIMARY": "syscall", - "syscall.TOKEN_DUPLICATE": "syscall", - "syscall.TOKEN_EXECUTE": "syscall", - "syscall.TOKEN_IMPERSONATE": "syscall", - "syscall.TOKEN_QUERY": "syscall", - "syscall.TOKEN_QUERY_SOURCE": "syscall", - "syscall.TOKEN_READ": "syscall", - "syscall.TOKEN_WRITE": "syscall", - "syscall.TOSTOP": "syscall", - "syscall.TRUNCATE_EXISTING": "syscall", - "syscall.TUNATTACHFILTER": "syscall", - "syscall.TUNDETACHFILTER": "syscall", - "syscall.TUNGETFEATURES": "syscall", - "syscall.TUNGETIFF": "syscall", - "syscall.TUNGETSNDBUF": "syscall", - "syscall.TUNGETVNETHDRSZ": "syscall", - "syscall.TUNSETDEBUG": "syscall", - "syscall.TUNSETGROUP": "syscall", - "syscall.TUNSETIFF": "syscall", - "syscall.TUNSETLINK": "syscall", - "syscall.TUNSETNOCSUM": "syscall", - "syscall.TUNSETOFFLOAD": "syscall", - "syscall.TUNSETOWNER": "syscall", - "syscall.TUNSETPERSIST": "syscall", - "syscall.TUNSETSNDBUF": "syscall", - "syscall.TUNSETTXFILTER": "syscall", - "syscall.TUNSETVNETHDRSZ": "syscall", - "syscall.Tee": "syscall", - "syscall.TerminateProcess": "syscall", - "syscall.Termios": "syscall", - "syscall.Tgkill": "syscall", - "syscall.Time": "syscall", - "syscall.Time_t": "syscall", - "syscall.Times": "syscall", - "syscall.Timespec": "syscall", - "syscall.TimespecToNsec": "syscall", - "syscall.Timeval": "syscall", - "syscall.Timeval32": "syscall", - "syscall.TimevalToNsec": "syscall", - "syscall.Timex": "syscall", - "syscall.Timezoneinformation": "syscall", - "syscall.Tms": "syscall", - "syscall.Token": "syscall", - "syscall.TokenAccessInformation": "syscall", - "syscall.TokenAuditPolicy": "syscall", - "syscall.TokenDefaultDacl": "syscall", - "syscall.TokenElevation": "syscall", - "syscall.TokenElevationType": "syscall", - "syscall.TokenGroups": "syscall", - "syscall.TokenGroupsAndPrivileges": "syscall", - "syscall.TokenHasRestrictions": "syscall", - "syscall.TokenImpersonationLevel": "syscall", - "syscall.TokenIntegrityLevel": "syscall", - "syscall.TokenLinkedToken": "syscall", - "syscall.TokenLogonSid": "syscall", - "syscall.TokenMandatoryPolicy": "syscall", - "syscall.TokenOrigin": "syscall", - "syscall.TokenOwner": "syscall", - "syscall.TokenPrimaryGroup": "syscall", - "syscall.TokenPrivileges": "syscall", - "syscall.TokenRestrictedSids": "syscall", - "syscall.TokenSandBoxInert": "syscall", - "syscall.TokenSessionId": "syscall", - "syscall.TokenSessionReference": "syscall", - "syscall.TokenSource": "syscall", - "syscall.TokenStatistics": "syscall", - "syscall.TokenType": "syscall", - "syscall.TokenUIAccess": "syscall", - "syscall.TokenUser": "syscall", - "syscall.TokenVirtualizationAllowed": "syscall", - "syscall.TokenVirtualizationEnabled": "syscall", - "syscall.Tokenprimarygroup": "syscall", - "syscall.Tokenuser": "syscall", - "syscall.TranslateAccountName": "syscall", - "syscall.TranslateName": "syscall", - "syscall.TransmitFile": "syscall", - "syscall.TransmitFileBuffers": "syscall", - "syscall.Truncate": "syscall", - "syscall.USAGE_MATCH_TYPE_AND": "syscall", - "syscall.USAGE_MATCH_TYPE_OR": "syscall", - "syscall.UTF16FromString": "syscall", - "syscall.UTF16PtrFromString": "syscall", - "syscall.UTF16ToString": "syscall", - "syscall.Ucred": "syscall", - "syscall.Umask": "syscall", - "syscall.Uname": "syscall", - "syscall.Undelete": "syscall", - "syscall.UnixCredentials": "syscall", - "syscall.UnixRights": "syscall", - "syscall.Unlink": "syscall", - "syscall.Unlinkat": "syscall", - "syscall.UnmapViewOfFile": "syscall", - "syscall.Unmount": "syscall", - "syscall.Unsetenv": "syscall", - "syscall.Unshare": "syscall", - "syscall.UserInfo10": "syscall", - "syscall.Ustat": "syscall", - "syscall.Ustat_t": "syscall", - "syscall.Utimbuf": "syscall", - "syscall.Utime": "syscall", - "syscall.Utimes": "syscall", - "syscall.UtimesNano": "syscall", - "syscall.Utsname": "syscall", - "syscall.VDISCARD": "syscall", - "syscall.VDSUSP": "syscall", - "syscall.VEOF": "syscall", - "syscall.VEOL": "syscall", - "syscall.VEOL2": "syscall", - "syscall.VERASE": "syscall", - "syscall.VERASE2": "syscall", - "syscall.VINTR": "syscall", - "syscall.VKILL": "syscall", - "syscall.VLNEXT": "syscall", - "syscall.VMIN": "syscall", - "syscall.VQUIT": "syscall", - "syscall.VREPRINT": "syscall", - "syscall.VSTART": "syscall", - "syscall.VSTATUS": "syscall", - "syscall.VSTOP": "syscall", - "syscall.VSUSP": "syscall", - "syscall.VSWTC": "syscall", - "syscall.VT0": "syscall", - "syscall.VT1": "syscall", - "syscall.VTDLY": "syscall", - "syscall.VTIME": "syscall", - "syscall.VWERASE": "syscall", - "syscall.VirtualLock": "syscall", - "syscall.VirtualUnlock": "syscall", - "syscall.WAIT_ABANDONED": "syscall", - "syscall.WAIT_FAILED": "syscall", - "syscall.WAIT_OBJECT_0": "syscall", - "syscall.WAIT_TIMEOUT": "syscall", - "syscall.WALL": "syscall", - "syscall.WALLSIG": "syscall", - "syscall.WALTSIG": "syscall", - "syscall.WCLONE": "syscall", - "syscall.WCONTINUED": "syscall", - "syscall.WCOREFLAG": "syscall", - "syscall.WEXITED": "syscall", - "syscall.WLINUXCLONE": "syscall", - "syscall.WNOHANG": "syscall", - "syscall.WNOTHREAD": "syscall", - "syscall.WNOWAIT": "syscall", - "syscall.WNOZOMBIE": "syscall", - "syscall.WOPTSCHECKED": "syscall", - "syscall.WORDSIZE": "syscall", - "syscall.WSABuf": "syscall", - "syscall.WSACleanup": "syscall", - "syscall.WSADESCRIPTION_LEN": "syscall", - "syscall.WSAData": "syscall", - "syscall.WSAEACCES": "syscall", - "syscall.WSAECONNRESET": "syscall", - "syscall.WSAEnumProtocols": "syscall", - "syscall.WSAID_CONNECTEX": "syscall", - "syscall.WSAIoctl": "syscall", - "syscall.WSAPROTOCOL_LEN": "syscall", - "syscall.WSAProtocolChain": "syscall", - "syscall.WSAProtocolInfo": "syscall", - "syscall.WSARecv": "syscall", - "syscall.WSARecvFrom": "syscall", - "syscall.WSASYS_STATUS_LEN": "syscall", - "syscall.WSASend": "syscall", - "syscall.WSASendTo": "syscall", - "syscall.WSASendto": "syscall", - "syscall.WSAStartup": "syscall", - "syscall.WSTOPPED": "syscall", - "syscall.WTRAPPED": "syscall", - "syscall.WUNTRACED": "syscall", - "syscall.Wait4": "syscall", - "syscall.WaitForSingleObject": "syscall", - "syscall.WaitStatus": "syscall", - "syscall.Win32FileAttributeData": "syscall", - "syscall.Win32finddata": "syscall", - "syscall.Write": "syscall", - "syscall.WriteConsole": "syscall", - "syscall.WriteFile": "syscall", - "syscall.X509_ASN_ENCODING": "syscall", - "syscall.XCASE": "syscall", - "syscall.XP1_CONNECTIONLESS": "syscall", - "syscall.XP1_CONNECT_DATA": "syscall", - "syscall.XP1_DISCONNECT_DATA": "syscall", - "syscall.XP1_EXPEDITED_DATA": "syscall", - "syscall.XP1_GRACEFUL_CLOSE": "syscall", - "syscall.XP1_GUARANTEED_DELIVERY": "syscall", - "syscall.XP1_GUARANTEED_ORDER": "syscall", - "syscall.XP1_IFS_HANDLES": "syscall", - "syscall.XP1_MESSAGE_ORIENTED": "syscall", - "syscall.XP1_MULTIPOINT_CONTROL_PLANE": "syscall", - "syscall.XP1_MULTIPOINT_DATA_PLANE": "syscall", - "syscall.XP1_PARTIAL_MESSAGE": "syscall", - "syscall.XP1_PSEUDO_STREAM": "syscall", - "syscall.XP1_QOS_SUPPORTED": "syscall", - "syscall.XP1_SAN_SUPPORT_SDP": "syscall", - "syscall.XP1_SUPPORT_BROADCAST": "syscall", - "syscall.XP1_SUPPORT_MULTIPOINT": "syscall", - "syscall.XP1_UNI_RECV": "syscall", - "syscall.XP1_UNI_SEND": "syscall", - "syslog.Dial": "log/syslog", - "syslog.LOG_ALERT": "log/syslog", - "syslog.LOG_AUTH": "log/syslog", - "syslog.LOG_AUTHPRIV": "log/syslog", - "syslog.LOG_CRIT": "log/syslog", - "syslog.LOG_CRON": "log/syslog", - "syslog.LOG_DAEMON": "log/syslog", - "syslog.LOG_DEBUG": "log/syslog", - "syslog.LOG_EMERG": "log/syslog", - "syslog.LOG_ERR": "log/syslog", - "syslog.LOG_FTP": "log/syslog", - "syslog.LOG_INFO": "log/syslog", - "syslog.LOG_KERN": "log/syslog", - "syslog.LOG_LOCAL0": "log/syslog", - "syslog.LOG_LOCAL1": "log/syslog", - "syslog.LOG_LOCAL2": "log/syslog", - "syslog.LOG_LOCAL3": "log/syslog", - "syslog.LOG_LOCAL4": "log/syslog", - "syslog.LOG_LOCAL5": "log/syslog", - "syslog.LOG_LOCAL6": "log/syslog", - "syslog.LOG_LOCAL7": "log/syslog", - "syslog.LOG_LPR": "log/syslog", - "syslog.LOG_MAIL": "log/syslog", - "syslog.LOG_NEWS": "log/syslog", - "syslog.LOG_NOTICE": "log/syslog", - "syslog.LOG_SYSLOG": "log/syslog", - "syslog.LOG_USER": "log/syslog", - "syslog.LOG_UUCP": "log/syslog", - "syslog.LOG_WARNING": "log/syslog", - "syslog.New": "log/syslog", - "syslog.NewLogger": "log/syslog", - "syslog.Priority": "log/syslog", - "syslog.Writer": "log/syslog", - "tabwriter.AlignRight": "text/tabwriter", - "tabwriter.Debug": "text/tabwriter", - "tabwriter.DiscardEmptyColumns": "text/tabwriter", - "tabwriter.Escape": "text/tabwriter", - "tabwriter.FilterHTML": "text/tabwriter", - "tabwriter.NewWriter": "text/tabwriter", - "tabwriter.StripEscape": "text/tabwriter", - "tabwriter.TabIndent": "text/tabwriter", - "tabwriter.Writer": "text/tabwriter", - "tar.ErrFieldTooLong": "archive/tar", - "tar.ErrHeader": "archive/tar", - "tar.ErrWriteAfterClose": "archive/tar", - "tar.ErrWriteTooLong": "archive/tar", - "tar.FileInfoHeader": "archive/tar", - "tar.Header": "archive/tar", - "tar.NewReader": "archive/tar", - "tar.NewWriter": "archive/tar", - "tar.Reader": "archive/tar", - "tar.TypeBlock": "archive/tar", - "tar.TypeChar": "archive/tar", - "tar.TypeCont": "archive/tar", - "tar.TypeDir": "archive/tar", - "tar.TypeFifo": "archive/tar", - "tar.TypeGNULongLink": "archive/tar", - "tar.TypeGNULongName": "archive/tar", - "tar.TypeGNUSparse": "archive/tar", - "tar.TypeLink": "archive/tar", - "tar.TypeReg": "archive/tar", - "tar.TypeRegA": "archive/tar", - "tar.TypeSymlink": "archive/tar", - "tar.TypeXGlobalHeader": "archive/tar", - "tar.TypeXHeader": "archive/tar", - "tar.Writer": "archive/tar", - "template.CSS": "html/template", - "template.ErrAmbigContext": "html/template", - "template.ErrBadHTML": "html/template", - "template.ErrBranchEnd": "html/template", - "template.ErrEndContext": "html/template", - "template.ErrNoSuchTemplate": "html/template", - "template.ErrOutputContext": "html/template", - "template.ErrPartialCharset": "html/template", - "template.ErrPartialEscape": "html/template", - "template.ErrRangeLoopReentry": "html/template", - "template.ErrSlashAmbig": "html/template", - "template.Error": "html/template", - "template.ErrorCode": "html/template", - "template.ExecError": "text/template", - // "template.FuncMap" is ambiguous - "template.HTML": "html/template", - "template.HTMLAttr": "html/template", - // "template.HTMLEscape" is ambiguous - // "template.HTMLEscapeString" is ambiguous - // "template.HTMLEscaper" is ambiguous - // "template.IsTrue" is ambiguous - "template.JS": "html/template", - // "template.JSEscape" is ambiguous - // "template.JSEscapeString" is ambiguous - // "template.JSEscaper" is ambiguous - "template.JSStr": "html/template", - // "template.Must" is ambiguous - // "template.New" is ambiguous - "template.OK": "html/template", - // "template.ParseFiles" is ambiguous - // "template.ParseGlob" is ambiguous - // "template.Template" is ambiguous - "template.URL": "html/template", - // "template.URLQueryEscaper" is ambiguous - "testing.AllocsPerRun": "testing", - "testing.B": "testing", - "testing.Benchmark": "testing", - "testing.BenchmarkResult": "testing", - "testing.Cover": "testing", - "testing.CoverBlock": "testing", - "testing.CoverMode": "testing", - "testing.Coverage": "testing", - "testing.InternalBenchmark": "testing", - "testing.InternalExample": "testing", - "testing.InternalTest": "testing", - "testing.M": "testing", - "testing.Main": "testing", - "testing.MainStart": "testing", - "testing.PB": "testing", - "testing.RegisterCover": "testing", - "testing.RunBenchmarks": "testing", - "testing.RunExamples": "testing", - "testing.RunTests": "testing", - "testing.Short": "testing", - "testing.T": "testing", - "testing.Verbose": "testing", - "textproto.CanonicalMIMEHeaderKey": "net/textproto", - "textproto.Conn": "net/textproto", - "textproto.Dial": "net/textproto", - "textproto.Error": "net/textproto", - "textproto.MIMEHeader": "net/textproto", - "textproto.NewConn": "net/textproto", - "textproto.NewReader": "net/textproto", - "textproto.NewWriter": "net/textproto", - "textproto.Pipeline": "net/textproto", - "textproto.ProtocolError": "net/textproto", - "textproto.Reader": "net/textproto", - "textproto.TrimBytes": "net/textproto", - "textproto.TrimString": "net/textproto", - "textproto.Writer": "net/textproto", - "time.ANSIC": "time", - "time.After": "time", - "time.AfterFunc": "time", - "time.April": "time", - "time.August": "time", - "time.Date": "time", - "time.December": "time", - "time.Duration": "time", - "time.February": "time", - "time.FixedZone": "time", - "time.Friday": "time", - "time.Hour": "time", - "time.January": "time", - "time.July": "time", - "time.June": "time", - "time.Kitchen": "time", - "time.LoadLocation": "time", - "time.Local": "time", - "time.Location": "time", - "time.March": "time", - "time.May": "time", - "time.Microsecond": "time", - "time.Millisecond": "time", - "time.Minute": "time", - "time.Monday": "time", - "time.Month": "time", - "time.Nanosecond": "time", - "time.NewTicker": "time", - "time.NewTimer": "time", - "time.November": "time", - "time.Now": "time", - "time.October": "time", - "time.Parse": "time", - "time.ParseDuration": "time", - "time.ParseError": "time", - "time.ParseInLocation": "time", - "time.RFC1123": "time", - "time.RFC1123Z": "time", - "time.RFC3339": "time", - "time.RFC3339Nano": "time", - "time.RFC822": "time", - "time.RFC822Z": "time", - "time.RFC850": "time", - "time.RubyDate": "time", - "time.Saturday": "time", - "time.Second": "time", - "time.September": "time", - "time.Since": "time", - "time.Sleep": "time", - "time.Stamp": "time", - "time.StampMicro": "time", - "time.StampMilli": "time", - "time.StampNano": "time", - "time.Sunday": "time", - "time.Thursday": "time", - "time.Tick": "time", - "time.Ticker": "time", - "time.Time": "time", - "time.Timer": "time", - "time.Tuesday": "time", - "time.UTC": "time", - "time.Unix": "time", - "time.UnixDate": "time", - "time.Until": "time", - "time.Wednesday": "time", - "time.Weekday": "time", - "tls.Certificate": "crypto/tls", - "tls.CertificateRequestInfo": "crypto/tls", - "tls.Client": "crypto/tls", - "tls.ClientAuthType": "crypto/tls", - "tls.ClientHelloInfo": "crypto/tls", - "tls.ClientSessionCache": "crypto/tls", - "tls.ClientSessionState": "crypto/tls", - "tls.Config": "crypto/tls", - "tls.Conn": "crypto/tls", - "tls.ConnectionState": "crypto/tls", - "tls.CurveID": "crypto/tls", - "tls.CurveP256": "crypto/tls", - "tls.CurveP384": "crypto/tls", - "tls.CurveP521": "crypto/tls", - "tls.Dial": "crypto/tls", - "tls.DialWithDialer": "crypto/tls", - "tls.ECDSAWithP256AndSHA256": "crypto/tls", - "tls.ECDSAWithP384AndSHA384": "crypto/tls", - "tls.ECDSAWithP521AndSHA512": "crypto/tls", - "tls.Listen": "crypto/tls", - "tls.LoadX509KeyPair": "crypto/tls", - "tls.NewLRUClientSessionCache": "crypto/tls", - "tls.NewListener": "crypto/tls", - "tls.NoClientCert": "crypto/tls", - "tls.PKCS1WithSHA1": "crypto/tls", - "tls.PKCS1WithSHA256": "crypto/tls", - "tls.PKCS1WithSHA384": "crypto/tls", - "tls.PKCS1WithSHA512": "crypto/tls", - "tls.PSSWithSHA256": "crypto/tls", - "tls.PSSWithSHA384": "crypto/tls", - "tls.PSSWithSHA512": "crypto/tls", - "tls.RecordHeaderError": "crypto/tls", - "tls.RenegotiateFreelyAsClient": "crypto/tls", - "tls.RenegotiateNever": "crypto/tls", - "tls.RenegotiateOnceAsClient": "crypto/tls", - "tls.RenegotiationSupport": "crypto/tls", - "tls.RequestClientCert": "crypto/tls", - "tls.RequireAndVerifyClientCert": "crypto/tls", - "tls.RequireAnyClientCert": "crypto/tls", - "tls.Server": "crypto/tls", - "tls.SignatureScheme": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.TLS_FALLBACK_SCSV": "crypto/tls", - "tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_128_CBC_SHA256": "crypto/tls", - "tls.TLS_RSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_RSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_RSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.VerifyClientCertIfGiven": "crypto/tls", - "tls.VersionSSL30": "crypto/tls", - "tls.VersionTLS10": "crypto/tls", - "tls.VersionTLS11": "crypto/tls", - "tls.VersionTLS12": "crypto/tls", - "tls.X25519": "crypto/tls", - "tls.X509KeyPair": "crypto/tls", - "token.ADD": "go/token", - "token.ADD_ASSIGN": "go/token", - "token.AND": "go/token", - "token.AND_ASSIGN": "go/token", - "token.AND_NOT": "go/token", - "token.AND_NOT_ASSIGN": "go/token", - "token.ARROW": "go/token", - "token.ASSIGN": "go/token", - "token.BREAK": "go/token", - "token.CASE": "go/token", - "token.CHAN": "go/token", - "token.CHAR": "go/token", - "token.COLON": "go/token", - "token.COMMA": "go/token", - "token.COMMENT": "go/token", - "token.CONST": "go/token", - "token.CONTINUE": "go/token", - "token.DEC": "go/token", - "token.DEFAULT": "go/token", - "token.DEFER": "go/token", - "token.DEFINE": "go/token", - "token.ELLIPSIS": "go/token", - "token.ELSE": "go/token", - "token.EOF": "go/token", - "token.EQL": "go/token", - "token.FALLTHROUGH": "go/token", - "token.FLOAT": "go/token", - "token.FOR": "go/token", - "token.FUNC": "go/token", - "token.File": "go/token", - "token.FileSet": "go/token", - "token.GEQ": "go/token", - "token.GO": "go/token", - "token.GOTO": "go/token", - "token.GTR": "go/token", - "token.HighestPrec": "go/token", - "token.IDENT": "go/token", - "token.IF": "go/token", - "token.ILLEGAL": "go/token", - "token.IMAG": "go/token", - "token.IMPORT": "go/token", - "token.INC": "go/token", - "token.INT": "go/token", - "token.INTERFACE": "go/token", - "token.LAND": "go/token", - "token.LBRACE": "go/token", - "token.LBRACK": "go/token", - "token.LEQ": "go/token", - "token.LOR": "go/token", - "token.LPAREN": "go/token", - "token.LSS": "go/token", - "token.Lookup": "go/token", - "token.LowestPrec": "go/token", - "token.MAP": "go/token", - "token.MUL": "go/token", - "token.MUL_ASSIGN": "go/token", - "token.NEQ": "go/token", - "token.NOT": "go/token", - "token.NewFileSet": "go/token", - "token.NoPos": "go/token", - "token.OR": "go/token", - "token.OR_ASSIGN": "go/token", - "token.PACKAGE": "go/token", - "token.PERIOD": "go/token", - "token.Pos": "go/token", - "token.Position": "go/token", - "token.QUO": "go/token", - "token.QUO_ASSIGN": "go/token", - "token.RANGE": "go/token", - "token.RBRACE": "go/token", - "token.RBRACK": "go/token", - "token.REM": "go/token", - "token.REM_ASSIGN": "go/token", - "token.RETURN": "go/token", - "token.RPAREN": "go/token", - "token.SELECT": "go/token", - "token.SEMICOLON": "go/token", - "token.SHL": "go/token", - "token.SHL_ASSIGN": "go/token", - "token.SHR": "go/token", - "token.SHR_ASSIGN": "go/token", - "token.STRING": "go/token", - "token.STRUCT": "go/token", - "token.SUB": "go/token", - "token.SUB_ASSIGN": "go/token", - "token.SWITCH": "go/token", - "token.TYPE": "go/token", - "token.Token": "go/token", - "token.UnaryPrec": "go/token", - "token.VAR": "go/token", - "token.XOR": "go/token", - "token.XOR_ASSIGN": "go/token", - "trace.Start": "runtime/trace", - "trace.Stop": "runtime/trace", - "types.Array": "go/types", - "types.AssertableTo": "go/types", - "types.AssignableTo": "go/types", - "types.Basic": "go/types", - "types.BasicInfo": "go/types", - "types.BasicKind": "go/types", - "types.Bool": "go/types", - "types.Builtin": "go/types", - "types.Byte": "go/types", - "types.Chan": "go/types", - "types.ChanDir": "go/types", - "types.Checker": "go/types", - "types.Comparable": "go/types", - "types.Complex128": "go/types", - "types.Complex64": "go/types", - "types.Config": "go/types", - "types.Const": "go/types", - "types.ConvertibleTo": "go/types", - "types.DefPredeclaredTestFuncs": "go/types", - "types.Default": "go/types", - "types.Error": "go/types", - "types.Eval": "go/types", - "types.ExprString": "go/types", - "types.FieldVal": "go/types", - "types.Float32": "go/types", - "types.Float64": "go/types", - "types.Func": "go/types", - "types.Id": "go/types", - "types.Identical": "go/types", - "types.IdenticalIgnoreTags": "go/types", - "types.Implements": "go/types", - "types.ImportMode": "go/types", - "types.Importer": "go/types", - "types.ImporterFrom": "go/types", - "types.Info": "go/types", - "types.Initializer": "go/types", - "types.Int": "go/types", - "types.Int16": "go/types", - "types.Int32": "go/types", - "types.Int64": "go/types", - "types.Int8": "go/types", - "types.Interface": "go/types", - "types.Invalid": "go/types", - "types.IsBoolean": "go/types", - "types.IsComplex": "go/types", - "types.IsConstType": "go/types", - "types.IsFloat": "go/types", - "types.IsInteger": "go/types", - "types.IsInterface": "go/types", - "types.IsNumeric": "go/types", - "types.IsOrdered": "go/types", - "types.IsString": "go/types", - "types.IsUnsigned": "go/types", - "types.IsUntyped": "go/types", - "types.Label": "go/types", - "types.LookupFieldOrMethod": "go/types", - "types.Map": "go/types", - "types.MethodExpr": "go/types", - "types.MethodSet": "go/types", - "types.MethodVal": "go/types", - "types.MissingMethod": "go/types", - "types.Named": "go/types", - "types.NewArray": "go/types", - "types.NewChan": "go/types", - "types.NewChecker": "go/types", - "types.NewConst": "go/types", - "types.NewField": "go/types", - "types.NewFunc": "go/types", - "types.NewInterface": "go/types", - "types.NewLabel": "go/types", - "types.NewMap": "go/types", - "types.NewMethodSet": "go/types", - "types.NewNamed": "go/types", - "types.NewPackage": "go/types", - "types.NewParam": "go/types", - "types.NewPkgName": "go/types", - "types.NewPointer": "go/types", - "types.NewScope": "go/types", - "types.NewSignature": "go/types", - "types.NewSlice": "go/types", - "types.NewStruct": "go/types", - "types.NewTuple": "go/types", - "types.NewTypeName": "go/types", - "types.NewVar": "go/types", - "types.Nil": "go/types", - "types.ObjectString": "go/types", - "types.Package": "go/types", - "types.PkgName": "go/types", - "types.Pointer": "go/types", - "types.Qualifier": "go/types", - "types.RecvOnly": "go/types", - "types.RelativeTo": "go/types", - "types.Rune": "go/types", - "types.Scope": "go/types", - "types.Selection": "go/types", - "types.SelectionKind": "go/types", - "types.SelectionString": "go/types", - "types.SendOnly": "go/types", - "types.SendRecv": "go/types", - "types.Signature": "go/types", - "types.Sizes": "go/types", - "types.Slice": "go/types", - "types.StdSizes": "go/types", - "types.String": "go/types", - "types.Struct": "go/types", - "types.Tuple": "go/types", - "types.Typ": "go/types", - "types.Type": "go/types", - "types.TypeAndValue": "go/types", - "types.TypeName": "go/types", - "types.TypeString": "go/types", - "types.Uint": "go/types", - "types.Uint16": "go/types", - "types.Uint32": "go/types", - "types.Uint64": "go/types", - "types.Uint8": "go/types", - "types.Uintptr": "go/types", - "types.Universe": "go/types", - "types.Unsafe": "go/types", - "types.UnsafePointer": "go/types", - "types.UntypedBool": "go/types", - "types.UntypedComplex": "go/types", - "types.UntypedFloat": "go/types", - "types.UntypedInt": "go/types", - "types.UntypedNil": "go/types", - "types.UntypedRune": "go/types", - "types.UntypedString": "go/types", - "types.Var": "go/types", - "types.WriteExpr": "go/types", - "types.WriteSignature": "go/types", - "types.WriteType": "go/types", - "unicode.ASCII_Hex_Digit": "unicode", - "unicode.Adlam": "unicode", - "unicode.Ahom": "unicode", - "unicode.Anatolian_Hieroglyphs": "unicode", - "unicode.Arabic": "unicode", - "unicode.Armenian": "unicode", - "unicode.Avestan": "unicode", - "unicode.AzeriCase": "unicode", - "unicode.Balinese": "unicode", - "unicode.Bamum": "unicode", - "unicode.Bassa_Vah": "unicode", - "unicode.Batak": "unicode", - "unicode.Bengali": "unicode", - "unicode.Bhaiksuki": "unicode", - "unicode.Bidi_Control": "unicode", - "unicode.Bopomofo": "unicode", - "unicode.Brahmi": "unicode", - "unicode.Braille": "unicode", - "unicode.Buginese": "unicode", - "unicode.Buhid": "unicode", - "unicode.C": "unicode", - "unicode.Canadian_Aboriginal": "unicode", - "unicode.Carian": "unicode", - "unicode.CaseRange": "unicode", - "unicode.CaseRanges": "unicode", - "unicode.Categories": "unicode", - "unicode.Caucasian_Albanian": "unicode", - "unicode.Cc": "unicode", - "unicode.Cf": "unicode", - "unicode.Chakma": "unicode", - "unicode.Cham": "unicode", - "unicode.Cherokee": "unicode", - "unicode.Co": "unicode", - "unicode.Common": "unicode", - "unicode.Coptic": "unicode", - "unicode.Cs": "unicode", - "unicode.Cuneiform": "unicode", - "unicode.Cypriot": "unicode", - "unicode.Cyrillic": "unicode", - "unicode.Dash": "unicode", - "unicode.Deprecated": "unicode", - "unicode.Deseret": "unicode", - "unicode.Devanagari": "unicode", - "unicode.Diacritic": "unicode", - "unicode.Digit": "unicode", - "unicode.Duployan": "unicode", - "unicode.Egyptian_Hieroglyphs": "unicode", - "unicode.Elbasan": "unicode", - "unicode.Ethiopic": "unicode", - "unicode.Extender": "unicode", - "unicode.FoldCategory": "unicode", - "unicode.FoldScript": "unicode", - "unicode.Georgian": "unicode", - "unicode.Glagolitic": "unicode", - "unicode.Gothic": "unicode", - "unicode.Grantha": "unicode", - "unicode.GraphicRanges": "unicode", - "unicode.Greek": "unicode", - "unicode.Gujarati": "unicode", - "unicode.Gurmukhi": "unicode", - "unicode.Han": "unicode", - "unicode.Hangul": "unicode", - "unicode.Hanunoo": "unicode", - "unicode.Hatran": "unicode", - "unicode.Hebrew": "unicode", - "unicode.Hex_Digit": "unicode", - "unicode.Hiragana": "unicode", - "unicode.Hyphen": "unicode", - "unicode.IDS_Binary_Operator": "unicode", - "unicode.IDS_Trinary_Operator": "unicode", - "unicode.Ideographic": "unicode", - "unicode.Imperial_Aramaic": "unicode", - "unicode.In": "unicode", - "unicode.Inherited": "unicode", - "unicode.Inscriptional_Pahlavi": "unicode", - "unicode.Inscriptional_Parthian": "unicode", - "unicode.Is": "unicode", - "unicode.IsControl": "unicode", - "unicode.IsDigit": "unicode", - "unicode.IsGraphic": "unicode", - "unicode.IsLetter": "unicode", - "unicode.IsLower": "unicode", - "unicode.IsMark": "unicode", - "unicode.IsNumber": "unicode", - "unicode.IsOneOf": "unicode", - "unicode.IsPrint": "unicode", - "unicode.IsPunct": "unicode", - "unicode.IsSpace": "unicode", - "unicode.IsSymbol": "unicode", - "unicode.IsTitle": "unicode", - "unicode.IsUpper": "unicode", - "unicode.Javanese": "unicode", - "unicode.Join_Control": "unicode", - "unicode.Kaithi": "unicode", - "unicode.Kannada": "unicode", - "unicode.Katakana": "unicode", - "unicode.Kayah_Li": "unicode", - "unicode.Kharoshthi": "unicode", - "unicode.Khmer": "unicode", - "unicode.Khojki": "unicode", - "unicode.Khudawadi": "unicode", - "unicode.L": "unicode", - "unicode.Lao": "unicode", - "unicode.Latin": "unicode", - "unicode.Lepcha": "unicode", - "unicode.Letter": "unicode", - "unicode.Limbu": "unicode", - "unicode.Linear_A": "unicode", - "unicode.Linear_B": "unicode", - "unicode.Lisu": "unicode", - "unicode.Ll": "unicode", - "unicode.Lm": "unicode", - "unicode.Lo": "unicode", - "unicode.Logical_Order_Exception": "unicode", - "unicode.Lower": "unicode", - "unicode.LowerCase": "unicode", - "unicode.Lt": "unicode", - "unicode.Lu": "unicode", - "unicode.Lycian": "unicode", - "unicode.Lydian": "unicode", - "unicode.M": "unicode", - "unicode.Mahajani": "unicode", - "unicode.Malayalam": "unicode", - "unicode.Mandaic": "unicode", - "unicode.Manichaean": "unicode", - "unicode.Marchen": "unicode", - "unicode.Mark": "unicode", - "unicode.MaxASCII": "unicode", - "unicode.MaxCase": "unicode", - "unicode.MaxLatin1": "unicode", - "unicode.MaxRune": "unicode", - "unicode.Mc": "unicode", - "unicode.Me": "unicode", - "unicode.Meetei_Mayek": "unicode", - "unicode.Mende_Kikakui": "unicode", - "unicode.Meroitic_Cursive": "unicode", - "unicode.Meroitic_Hieroglyphs": "unicode", - "unicode.Miao": "unicode", - "unicode.Mn": "unicode", - "unicode.Modi": "unicode", - "unicode.Mongolian": "unicode", - "unicode.Mro": "unicode", - "unicode.Multani": "unicode", - "unicode.Myanmar": "unicode", - "unicode.N": "unicode", - "unicode.Nabataean": "unicode", - "unicode.Nd": "unicode", - "unicode.New_Tai_Lue": "unicode", - "unicode.Newa": "unicode", - "unicode.Nko": "unicode", - "unicode.Nl": "unicode", - "unicode.No": "unicode", - "unicode.Noncharacter_Code_Point": "unicode", - "unicode.Number": "unicode", - "unicode.Ogham": "unicode", - "unicode.Ol_Chiki": "unicode", - "unicode.Old_Hungarian": "unicode", - "unicode.Old_Italic": "unicode", - "unicode.Old_North_Arabian": "unicode", - "unicode.Old_Permic": "unicode", - "unicode.Old_Persian": "unicode", - "unicode.Old_South_Arabian": "unicode", - "unicode.Old_Turkic": "unicode", - "unicode.Oriya": "unicode", - "unicode.Osage": "unicode", - "unicode.Osmanya": "unicode", - "unicode.Other": "unicode", - "unicode.Other_Alphabetic": "unicode", - "unicode.Other_Default_Ignorable_Code_Point": "unicode", - "unicode.Other_Grapheme_Extend": "unicode", - "unicode.Other_ID_Continue": "unicode", - "unicode.Other_ID_Start": "unicode", - "unicode.Other_Lowercase": "unicode", - "unicode.Other_Math": "unicode", - "unicode.Other_Uppercase": "unicode", - "unicode.P": "unicode", - "unicode.Pahawh_Hmong": "unicode", - "unicode.Palmyrene": "unicode", - "unicode.Pattern_Syntax": "unicode", - "unicode.Pattern_White_Space": "unicode", - "unicode.Pau_Cin_Hau": "unicode", - "unicode.Pc": "unicode", - "unicode.Pd": "unicode", - "unicode.Pe": "unicode", - "unicode.Pf": "unicode", - "unicode.Phags_Pa": "unicode", - "unicode.Phoenician": "unicode", - "unicode.Pi": "unicode", - "unicode.Po": "unicode", - "unicode.Prepended_Concatenation_Mark": "unicode", - "unicode.PrintRanges": "unicode", - "unicode.Properties": "unicode", - "unicode.Ps": "unicode", - "unicode.Psalter_Pahlavi": "unicode", - "unicode.Punct": "unicode", - "unicode.Quotation_Mark": "unicode", - "unicode.Radical": "unicode", - "unicode.Range16": "unicode", - "unicode.Range32": "unicode", - "unicode.RangeTable": "unicode", - "unicode.Rejang": "unicode", - "unicode.ReplacementChar": "unicode", - "unicode.Runic": "unicode", - "unicode.S": "unicode", - "unicode.STerm": "unicode", - "unicode.Samaritan": "unicode", - "unicode.Saurashtra": "unicode", - "unicode.Sc": "unicode", - "unicode.Scripts": "unicode", - "unicode.Sentence_Terminal": "unicode", - "unicode.Sharada": "unicode", - "unicode.Shavian": "unicode", - "unicode.Siddham": "unicode", - "unicode.SignWriting": "unicode", - "unicode.SimpleFold": "unicode", - "unicode.Sinhala": "unicode", - "unicode.Sk": "unicode", - "unicode.Sm": "unicode", - "unicode.So": "unicode", - "unicode.Soft_Dotted": "unicode", - "unicode.Sora_Sompeng": "unicode", - "unicode.Space": "unicode", - "unicode.SpecialCase": "unicode", - "unicode.Sundanese": "unicode", - "unicode.Syloti_Nagri": "unicode", - "unicode.Symbol": "unicode", - "unicode.Syriac": "unicode", - "unicode.Tagalog": "unicode", - "unicode.Tagbanwa": "unicode", - "unicode.Tai_Le": "unicode", - "unicode.Tai_Tham": "unicode", - "unicode.Tai_Viet": "unicode", - "unicode.Takri": "unicode", - "unicode.Tamil": "unicode", - "unicode.Tangut": "unicode", - "unicode.Telugu": "unicode", - "unicode.Terminal_Punctuation": "unicode", - "unicode.Thaana": "unicode", - "unicode.Thai": "unicode", - "unicode.Tibetan": "unicode", - "unicode.Tifinagh": "unicode", - "unicode.Tirhuta": "unicode", - "unicode.Title": "unicode", - "unicode.TitleCase": "unicode", - "unicode.To": "unicode", - "unicode.ToLower": "unicode", - "unicode.ToTitle": "unicode", - "unicode.ToUpper": "unicode", - "unicode.TurkishCase": "unicode", - "unicode.Ugaritic": "unicode", - "unicode.Unified_Ideograph": "unicode", - "unicode.Upper": "unicode", - "unicode.UpperCase": "unicode", - "unicode.UpperLower": "unicode", - "unicode.Vai": "unicode", - "unicode.Variation_Selector": "unicode", - "unicode.Version": "unicode", - "unicode.Warang_Citi": "unicode", - "unicode.White_Space": "unicode", - "unicode.Yi": "unicode", - "unicode.Z": "unicode", - "unicode.Zl": "unicode", - "unicode.Zp": "unicode", - "unicode.Zs": "unicode", - "url.Error": "net/url", - "url.EscapeError": "net/url", - "url.InvalidHostError": "net/url", - "url.Parse": "net/url", - "url.ParseQuery": "net/url", - "url.ParseRequestURI": "net/url", - "url.PathEscape": "net/url", - "url.PathUnescape": "net/url", - "url.QueryEscape": "net/url", - "url.QueryUnescape": "net/url", - "url.URL": "net/url", - "url.User": "net/url", - "url.UserPassword": "net/url", - "url.Userinfo": "net/url", - "url.Values": "net/url", - "user.Current": "os/user", - "user.Group": "os/user", - "user.Lookup": "os/user", - "user.LookupGroup": "os/user", - "user.LookupGroupId": "os/user", - "user.LookupId": "os/user", - "user.UnknownGroupError": "os/user", - "user.UnknownGroupIdError": "os/user", - "user.UnknownUserError": "os/user", - "user.UnknownUserIdError": "os/user", - "user.User": "os/user", - "utf16.Decode": "unicode/utf16", - "utf16.DecodeRune": "unicode/utf16", - "utf16.Encode": "unicode/utf16", - "utf16.EncodeRune": "unicode/utf16", - "utf16.IsSurrogate": "unicode/utf16", - "utf8.DecodeLastRune": "unicode/utf8", - "utf8.DecodeLastRuneInString": "unicode/utf8", - "utf8.DecodeRune": "unicode/utf8", - "utf8.DecodeRuneInString": "unicode/utf8", - "utf8.EncodeRune": "unicode/utf8", - "utf8.FullRune": "unicode/utf8", - "utf8.FullRuneInString": "unicode/utf8", - "utf8.MaxRune": "unicode/utf8", - "utf8.RuneCount": "unicode/utf8", - "utf8.RuneCountInString": "unicode/utf8", - "utf8.RuneError": "unicode/utf8", - "utf8.RuneLen": "unicode/utf8", - "utf8.RuneSelf": "unicode/utf8", - "utf8.RuneStart": "unicode/utf8", - "utf8.UTFMax": "unicode/utf8", - "utf8.Valid": "unicode/utf8", - "utf8.ValidRune": "unicode/utf8", - "utf8.ValidString": "unicode/utf8", - "x509.CANotAuthorizedForThisName": "crypto/x509", - "x509.CertPool": "crypto/x509", - "x509.Certificate": "crypto/x509", - "x509.CertificateInvalidError": "crypto/x509", - "x509.CertificateRequest": "crypto/x509", - "x509.ConstraintViolationError": "crypto/x509", - "x509.CreateCertificate": "crypto/x509", - "x509.CreateCertificateRequest": "crypto/x509", - "x509.DSA": "crypto/x509", - "x509.DSAWithSHA1": "crypto/x509", - "x509.DSAWithSHA256": "crypto/x509", - "x509.DecryptPEMBlock": "crypto/x509", - "x509.ECDSA": "crypto/x509", - "x509.ECDSAWithSHA1": "crypto/x509", - "x509.ECDSAWithSHA256": "crypto/x509", - "x509.ECDSAWithSHA384": "crypto/x509", - "x509.ECDSAWithSHA512": "crypto/x509", - "x509.EncryptPEMBlock": "crypto/x509", - "x509.ErrUnsupportedAlgorithm": "crypto/x509", - "x509.Expired": "crypto/x509", - "x509.ExtKeyUsage": "crypto/x509", - "x509.ExtKeyUsageAny": "crypto/x509", - "x509.ExtKeyUsageClientAuth": "crypto/x509", - "x509.ExtKeyUsageCodeSigning": "crypto/x509", - "x509.ExtKeyUsageEmailProtection": "crypto/x509", - "x509.ExtKeyUsageIPSECEndSystem": "crypto/x509", - "x509.ExtKeyUsageIPSECTunnel": "crypto/x509", - "x509.ExtKeyUsageIPSECUser": "crypto/x509", - "x509.ExtKeyUsageMicrosoftServerGatedCrypto": "crypto/x509", - "x509.ExtKeyUsageNetscapeServerGatedCrypto": "crypto/x509", - "x509.ExtKeyUsageOCSPSigning": "crypto/x509", - "x509.ExtKeyUsageServerAuth": "crypto/x509", - "x509.ExtKeyUsageTimeStamping": "crypto/x509", - "x509.HostnameError": "crypto/x509", - "x509.IncompatibleUsage": "crypto/x509", - "x509.IncorrectPasswordError": "crypto/x509", - "x509.InsecureAlgorithmError": "crypto/x509", - "x509.InvalidReason": "crypto/x509", - "x509.IsEncryptedPEMBlock": "crypto/x509", - "x509.KeyUsage": "crypto/x509", - "x509.KeyUsageCRLSign": "crypto/x509", - "x509.KeyUsageCertSign": "crypto/x509", - "x509.KeyUsageContentCommitment": "crypto/x509", - "x509.KeyUsageDataEncipherment": "crypto/x509", - "x509.KeyUsageDecipherOnly": "crypto/x509", - "x509.KeyUsageDigitalSignature": "crypto/x509", - "x509.KeyUsageEncipherOnly": "crypto/x509", - "x509.KeyUsageKeyAgreement": "crypto/x509", - "x509.KeyUsageKeyEncipherment": "crypto/x509", - "x509.MD2WithRSA": "crypto/x509", - "x509.MD5WithRSA": "crypto/x509", - "x509.MarshalECPrivateKey": "crypto/x509", - "x509.MarshalPKCS1PrivateKey": "crypto/x509", - "x509.MarshalPKIXPublicKey": "crypto/x509", - "x509.NameMismatch": "crypto/x509", - "x509.NewCertPool": "crypto/x509", - "x509.NotAuthorizedToSign": "crypto/x509", - "x509.PEMCipher": "crypto/x509", - "x509.PEMCipher3DES": "crypto/x509", - "x509.PEMCipherAES128": "crypto/x509", - "x509.PEMCipherAES192": "crypto/x509", - "x509.PEMCipherAES256": "crypto/x509", - "x509.PEMCipherDES": "crypto/x509", - "x509.ParseCRL": "crypto/x509", - "x509.ParseCertificate": "crypto/x509", - "x509.ParseCertificateRequest": "crypto/x509", - "x509.ParseCertificates": "crypto/x509", - "x509.ParseDERCRL": "crypto/x509", - "x509.ParseECPrivateKey": "crypto/x509", - "x509.ParsePKCS1PrivateKey": "crypto/x509", - "x509.ParsePKCS8PrivateKey": "crypto/x509", - "x509.ParsePKIXPublicKey": "crypto/x509", - "x509.PublicKeyAlgorithm": "crypto/x509", - "x509.RSA": "crypto/x509", - "x509.SHA1WithRSA": "crypto/x509", - "x509.SHA256WithRSA": "crypto/x509", - "x509.SHA256WithRSAPSS": "crypto/x509", - "x509.SHA384WithRSA": "crypto/x509", - "x509.SHA384WithRSAPSS": "crypto/x509", - "x509.SHA512WithRSA": "crypto/x509", - "x509.SHA512WithRSAPSS": "crypto/x509", - "x509.SignatureAlgorithm": "crypto/x509", - "x509.SystemCertPool": "crypto/x509", - "x509.SystemRootsError": "crypto/x509", - "x509.TooManyIntermediates": "crypto/x509", - "x509.UnhandledCriticalExtension": "crypto/x509", - "x509.UnknownAuthorityError": "crypto/x509", - "x509.UnknownPublicKeyAlgorithm": "crypto/x509", - "x509.UnknownSignatureAlgorithm": "crypto/x509", - "x509.VerifyOptions": "crypto/x509", - "xml.Attr": "encoding/xml", - "xml.CharData": "encoding/xml", - "xml.Comment": "encoding/xml", - "xml.CopyToken": "encoding/xml", - "xml.Decoder": "encoding/xml", - "xml.Directive": "encoding/xml", - "xml.Encoder": "encoding/xml", - "xml.EndElement": "encoding/xml", - "xml.Escape": "encoding/xml", - "xml.EscapeText": "encoding/xml", - "xml.HTMLAutoClose": "encoding/xml", - "xml.HTMLEntity": "encoding/xml", - "xml.Header": "encoding/xml", - "xml.Marshal": "encoding/xml", - "xml.MarshalIndent": "encoding/xml", - "xml.Marshaler": "encoding/xml", - "xml.MarshalerAttr": "encoding/xml", - "xml.Name": "encoding/xml", - "xml.NewDecoder": "encoding/xml", - "xml.NewEncoder": "encoding/xml", - "xml.ProcInst": "encoding/xml", - "xml.StartElement": "encoding/xml", - "xml.SyntaxError": "encoding/xml", - "xml.TagPathError": "encoding/xml", - "xml.Token": "encoding/xml", - "xml.Unmarshal": "encoding/xml", - "xml.UnmarshalError": "encoding/xml", - "xml.Unmarshaler": "encoding/xml", - "xml.UnmarshalerAttr": "encoding/xml", - "xml.UnsupportedTypeError": "encoding/xml", - "zip.Compressor": "archive/zip", - "zip.Decompressor": "archive/zip", - "zip.Deflate": "archive/zip", - "zip.ErrAlgorithm": "archive/zip", - "zip.ErrChecksum": "archive/zip", - "zip.ErrFormat": "archive/zip", - "zip.File": "archive/zip", - "zip.FileHeader": "archive/zip", - "zip.FileInfoHeader": "archive/zip", - "zip.NewReader": "archive/zip", - "zip.NewWriter": "archive/zip", - "zip.OpenReader": "archive/zip", - "zip.ReadCloser": "archive/zip", - "zip.Reader": "archive/zip", - "zip.RegisterCompressor": "archive/zip", - "zip.RegisterDecompressor": "archive/zip", - "zip.Store": "archive/zip", - "zip.Writer": "archive/zip", - "zlib.BestCompression": "compress/zlib", - "zlib.BestSpeed": "compress/zlib", - "zlib.DefaultCompression": "compress/zlib", - "zlib.ErrChecksum": "compress/zlib", - "zlib.ErrDictionary": "compress/zlib", - "zlib.ErrHeader": "compress/zlib", - "zlib.HuffmanOnly": "compress/zlib", - "zlib.NewReader": "compress/zlib", - "zlib.NewReaderDict": "compress/zlib", - "zlib.NewWriter": "compress/zlib", - "zlib.NewWriterLevel": "compress/zlib", - "zlib.NewWriterLevelDict": "compress/zlib", - "zlib.NoCompression": "compress/zlib", - "zlib.Resetter": "compress/zlib", - "zlib.Writer": "compress/zlib", - - "unsafe.Alignof": "unsafe", - "unsafe.ArbitraryType": "unsafe", - "unsafe.Offsetof": "unsafe", - "unsafe.Pointer": "unsafe", - "unsafe.Sizeof": "unsafe", +var stdlib = map[string]map[string]bool{ + "archive/tar": map[string]bool{ + "ErrFieldTooLong": true, + "ErrHeader": true, + "ErrWriteAfterClose": true, + "ErrWriteTooLong": true, + "FileInfoHeader": true, + "Format": true, + "FormatGNU": true, + "FormatPAX": true, + "FormatUSTAR": true, + "FormatUnknown": true, + "Header": true, + "NewReader": true, + "NewWriter": true, + "Reader": true, + "TypeBlock": true, + "TypeChar": true, + "TypeCont": true, + "TypeDir": true, + "TypeFifo": true, + "TypeGNULongLink": true, + "TypeGNULongName": true, + "TypeGNUSparse": true, + "TypeLink": true, + "TypeReg": true, + "TypeRegA": true, + "TypeSymlink": true, + "TypeXGlobalHeader": true, + "TypeXHeader": true, + "Writer": true, + }, + "archive/zip": map[string]bool{ + "Compressor": true, + "Decompressor": true, + "Deflate": true, + "ErrAlgorithm": true, + "ErrChecksum": true, + "ErrFormat": true, + "File": true, + "FileHeader": true, + "FileInfoHeader": true, + "NewReader": true, + "NewWriter": true, + "OpenReader": true, + "ReadCloser": true, + "Reader": true, + "RegisterCompressor": true, + "RegisterDecompressor": true, + "Store": true, + "Writer": true, + }, + "bufio": map[string]bool{ + "ErrAdvanceTooFar": true, + "ErrBufferFull": true, + "ErrFinalToken": true, + "ErrInvalidUnreadByte": true, + "ErrInvalidUnreadRune": true, + "ErrNegativeAdvance": true, + "ErrNegativeCount": true, + "ErrTooLong": true, + "MaxScanTokenSize": true, + "NewReadWriter": true, + "NewReader": true, + "NewReaderSize": true, + "NewScanner": true, + "NewWriter": true, + "NewWriterSize": true, + "ReadWriter": true, + "Reader": true, + "ScanBytes": true, + "ScanLines": true, + "ScanRunes": true, + "ScanWords": true, + "Scanner": true, + "SplitFunc": true, + "Writer": true, + }, + "bytes": map[string]bool{ + "Buffer": true, + "Compare": true, + "Contains": true, + "ContainsAny": true, + "ContainsRune": true, + "Count": true, + "Equal": true, + "EqualFold": true, + "ErrTooLarge": true, + "Fields": true, + "FieldsFunc": true, + "HasPrefix": true, + "HasSuffix": true, + "Index": true, + "IndexAny": true, + "IndexByte": true, + "IndexFunc": true, + "IndexRune": true, + "Join": true, + "LastIndex": true, + "LastIndexAny": true, + "LastIndexByte": true, + "LastIndexFunc": true, + "Map": true, + "MinRead": true, + "NewBuffer": true, + "NewBufferString": true, + "NewReader": true, + "Reader": true, + "Repeat": true, + "Replace": true, + "ReplaceAll": true, + "Runes": true, + "Split": true, + "SplitAfter": true, + "SplitAfterN": true, + "SplitN": true, + "Title": true, + "ToLower": true, + "ToLowerSpecial": true, + "ToTitle": true, + "ToTitleSpecial": true, + "ToUpper": true, + "ToUpperSpecial": true, + "Trim": true, + "TrimFunc": true, + "TrimLeft": true, + "TrimLeftFunc": true, + "TrimPrefix": true, + "TrimRight": true, + "TrimRightFunc": true, + "TrimSpace": true, + "TrimSuffix": true, + }, + "compress/bzip2": map[string]bool{ + "NewReader": true, + "StructuralError": true, + }, + "compress/flate": map[string]bool{ + "BestCompression": true, + "BestSpeed": true, + "CorruptInputError": true, + "DefaultCompression": true, + "HuffmanOnly": true, + "InternalError": true, + "NewReader": true, + "NewReaderDict": true, + "NewWriter": true, + "NewWriterDict": true, + "NoCompression": true, + "ReadError": true, + "Reader": true, + "Resetter": true, + "WriteError": true, + "Writer": true, + }, + "compress/gzip": map[string]bool{ + "BestCompression": true, + "BestSpeed": true, + "DefaultCompression": true, + "ErrChecksum": true, + "ErrHeader": true, + "Header": true, + "HuffmanOnly": true, + "NewReader": true, + "NewWriter": true, + "NewWriterLevel": true, + "NoCompression": true, + "Reader": true, + "Writer": true, + }, + "compress/lzw": map[string]bool{ + "LSB": true, + "MSB": true, + "NewReader": true, + "NewWriter": true, + "Order": true, + }, + "compress/zlib": map[string]bool{ + "BestCompression": true, + "BestSpeed": true, + "DefaultCompression": true, + "ErrChecksum": true, + "ErrDictionary": true, + "ErrHeader": true, + "HuffmanOnly": true, + "NewReader": true, + "NewReaderDict": true, + "NewWriter": true, + "NewWriterLevel": true, + "NewWriterLevelDict": true, + "NoCompression": true, + "Resetter": true, + "Writer": true, + }, + "container/heap": map[string]bool{ + "Fix": true, + "Init": true, + "Interface": true, + "Pop": true, + "Push": true, + "Remove": true, + }, + "container/list": map[string]bool{ + "Element": true, + "List": true, + "New": true, + }, + "container/ring": map[string]bool{ + "New": true, + "Ring": true, + }, + "context": map[string]bool{ + "Background": true, + "CancelFunc": true, + "Canceled": true, + "Context": true, + "DeadlineExceeded": true, + "TODO": true, + "WithCancel": true, + "WithDeadline": true, + "WithTimeout": true, + "WithValue": true, + }, + "crypto": map[string]bool{ + "BLAKE2b_256": true, + "BLAKE2b_384": true, + "BLAKE2b_512": true, + "BLAKE2s_256": true, + "Decrypter": true, + "DecrypterOpts": true, + "Hash": true, + "MD4": true, + "MD5": true, + "MD5SHA1": true, + "PrivateKey": true, + "PublicKey": true, + "RIPEMD160": true, + "RegisterHash": true, + "SHA1": true, + "SHA224": true, + "SHA256": true, + "SHA384": true, + "SHA3_224": true, + "SHA3_256": true, + "SHA3_384": true, + "SHA3_512": true, + "SHA512": true, + "SHA512_224": true, + "SHA512_256": true, + "Signer": true, + "SignerOpts": true, + }, + "crypto/aes": map[string]bool{ + "BlockSize": true, + "KeySizeError": true, + "NewCipher": true, + }, + "crypto/cipher": map[string]bool{ + "AEAD": true, + "Block": true, + "BlockMode": true, + "NewCBCDecrypter": true, + "NewCBCEncrypter": true, + "NewCFBDecrypter": true, + "NewCFBEncrypter": true, + "NewCTR": true, + "NewGCM": true, + "NewGCMWithNonceSize": true, + "NewGCMWithTagSize": true, + "NewOFB": true, + "Stream": true, + "StreamReader": true, + "StreamWriter": true, + }, + "crypto/des": map[string]bool{ + "BlockSize": true, + "KeySizeError": true, + "NewCipher": true, + "NewTripleDESCipher": true, + }, + "crypto/dsa": map[string]bool{ + "ErrInvalidPublicKey": true, + "GenerateKey": true, + "GenerateParameters": true, + "L1024N160": true, + "L2048N224": true, + "L2048N256": true, + "L3072N256": true, + "ParameterSizes": true, + "Parameters": true, + "PrivateKey": true, + "PublicKey": true, + "Sign": true, + "Verify": true, + }, + "crypto/ecdsa": map[string]bool{ + "GenerateKey": true, + "PrivateKey": true, + "PublicKey": true, + "Sign": true, + "Verify": true, + }, + "crypto/elliptic": map[string]bool{ + "Curve": true, + "CurveParams": true, + "GenerateKey": true, + "Marshal": true, + "P224": true, + "P256": true, + "P384": true, + "P521": true, + "Unmarshal": true, + }, + "crypto/hmac": map[string]bool{ + "Equal": true, + "New": true, + }, + "crypto/md5": map[string]bool{ + "BlockSize": true, + "New": true, + "Size": true, + "Sum": true, + }, + "crypto/rand": map[string]bool{ + "Int": true, + "Prime": true, + "Read": true, + "Reader": true, + }, + "crypto/rc4": map[string]bool{ + "Cipher": true, + "KeySizeError": true, + "NewCipher": true, + }, + "crypto/rsa": map[string]bool{ + "CRTValue": true, + "DecryptOAEP": true, + "DecryptPKCS1v15": true, + "DecryptPKCS1v15SessionKey": true, + "EncryptOAEP": true, + "EncryptPKCS1v15": true, + "ErrDecryption": true, + "ErrMessageTooLong": true, + "ErrVerification": true, + "GenerateKey": true, + "GenerateMultiPrimeKey": true, + "OAEPOptions": true, + "PKCS1v15DecryptOptions": true, + "PSSOptions": true, + "PSSSaltLengthAuto": true, + "PSSSaltLengthEqualsHash": true, + "PrecomputedValues": true, + "PrivateKey": true, + "PublicKey": true, + "SignPKCS1v15": true, + "SignPSS": true, + "VerifyPKCS1v15": true, + "VerifyPSS": true, + }, + "crypto/sha1": map[string]bool{ + "BlockSize": true, + "New": true, + "Size": true, + "Sum": true, + }, + "crypto/sha256": map[string]bool{ + "BlockSize": true, + "New": true, + "New224": true, + "Size": true, + "Size224": true, + "Sum224": true, + "Sum256": true, + }, + "crypto/sha512": map[string]bool{ + "BlockSize": true, + "New": true, + "New384": true, + "New512_224": true, + "New512_256": true, + "Size": true, + "Size224": true, + "Size256": true, + "Size384": true, + "Sum384": true, + "Sum512": true, + "Sum512_224": true, + "Sum512_256": true, + }, + "crypto/subtle": map[string]bool{ + "ConstantTimeByteEq": true, + "ConstantTimeCompare": true, + "ConstantTimeCopy": true, + "ConstantTimeEq": true, + "ConstantTimeLessOrEq": true, + "ConstantTimeSelect": true, + }, + "crypto/tls": map[string]bool{ + "Certificate": true, + "CertificateRequestInfo": true, + "Client": true, + "ClientAuthType": true, + "ClientHelloInfo": true, + "ClientSessionCache": true, + "ClientSessionState": true, + "Config": true, + "Conn": true, + "ConnectionState": true, + "CurveID": true, + "CurveP256": true, + "CurveP384": true, + "CurveP521": true, + "Dial": true, + "DialWithDialer": true, + "ECDSAWithP256AndSHA256": true, + "ECDSAWithP384AndSHA384": true, + "ECDSAWithP521AndSHA512": true, + "ECDSAWithSHA1": true, + "Listen": true, + "LoadX509KeyPair": true, + "NewLRUClientSessionCache": true, + "NewListener": true, + "NoClientCert": true, + "PKCS1WithSHA1": true, + "PKCS1WithSHA256": true, + "PKCS1WithSHA384": true, + "PKCS1WithSHA512": true, + "PSSWithSHA256": true, + "PSSWithSHA384": true, + "PSSWithSHA512": true, + "RecordHeaderError": true, + "RenegotiateFreelyAsClient": true, + "RenegotiateNever": true, + "RenegotiateOnceAsClient": true, + "RenegotiationSupport": true, + "RequestClientCert": true, + "RequireAndVerifyClientCert": true, + "RequireAnyClientCert": true, + "Server": true, + "SignatureScheme": true, + "TLS_AES_128_GCM_SHA256": true, + "TLS_AES_256_GCM_SHA384": true, + "TLS_CHACHA20_POLY1305_SHA256": true, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": true, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": true, + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": true, + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": true, + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": true, + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": true, + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": true, + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": true, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": true, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": true, + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": true, + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": true, + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": true, + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": true, + "TLS_ECDHE_RSA_WITH_RC4_128_SHA": true, + "TLS_FALLBACK_SCSV": true, + "TLS_RSA_WITH_3DES_EDE_CBC_SHA": true, + "TLS_RSA_WITH_AES_128_CBC_SHA": true, + "TLS_RSA_WITH_AES_128_CBC_SHA256": true, + "TLS_RSA_WITH_AES_128_GCM_SHA256": true, + "TLS_RSA_WITH_AES_256_CBC_SHA": true, + "TLS_RSA_WITH_AES_256_GCM_SHA384": true, + "TLS_RSA_WITH_RC4_128_SHA": true, + "VerifyClientCertIfGiven": true, + "VersionSSL30": true, + "VersionTLS10": true, + "VersionTLS11": true, + "VersionTLS12": true, + "VersionTLS13": true, + "X25519": true, + "X509KeyPair": true, + }, + "crypto/x509": map[string]bool{ + "CANotAuthorizedForExtKeyUsage": true, + "CANotAuthorizedForThisName": true, + "CertPool": true, + "Certificate": true, + "CertificateInvalidError": true, + "CertificateRequest": true, + "ConstraintViolationError": true, + "CreateCertificate": true, + "CreateCertificateRequest": true, + "DSA": true, + "DSAWithSHA1": true, + "DSAWithSHA256": true, + "DecryptPEMBlock": true, + "ECDSA": true, + "ECDSAWithSHA1": true, + "ECDSAWithSHA256": true, + "ECDSAWithSHA384": true, + "ECDSAWithSHA512": true, + "EncryptPEMBlock": true, + "ErrUnsupportedAlgorithm": true, + "Expired": true, + "ExtKeyUsage": true, + "ExtKeyUsageAny": true, + "ExtKeyUsageClientAuth": true, + "ExtKeyUsageCodeSigning": true, + "ExtKeyUsageEmailProtection": true, + "ExtKeyUsageIPSECEndSystem": true, + "ExtKeyUsageIPSECTunnel": true, + "ExtKeyUsageIPSECUser": true, + "ExtKeyUsageMicrosoftCommercialCodeSigning": true, + "ExtKeyUsageMicrosoftKernelCodeSigning": true, + "ExtKeyUsageMicrosoftServerGatedCrypto": true, + "ExtKeyUsageNetscapeServerGatedCrypto": true, + "ExtKeyUsageOCSPSigning": true, + "ExtKeyUsageServerAuth": true, + "ExtKeyUsageTimeStamping": true, + "HostnameError": true, + "IncompatibleUsage": true, + "IncorrectPasswordError": true, + "InsecureAlgorithmError": true, + "InvalidReason": true, + "IsEncryptedPEMBlock": true, + "KeyUsage": true, + "KeyUsageCRLSign": true, + "KeyUsageCertSign": true, + "KeyUsageContentCommitment": true, + "KeyUsageDataEncipherment": true, + "KeyUsageDecipherOnly": true, + "KeyUsageDigitalSignature": true, + "KeyUsageEncipherOnly": true, + "KeyUsageKeyAgreement": true, + "KeyUsageKeyEncipherment": true, + "MD2WithRSA": true, + "MD5WithRSA": true, + "MarshalECPrivateKey": true, + "MarshalPKCS1PrivateKey": true, + "MarshalPKCS1PublicKey": true, + "MarshalPKCS8PrivateKey": true, + "MarshalPKIXPublicKey": true, + "NameConstraintsWithoutSANs": true, + "NameMismatch": true, + "NewCertPool": true, + "NotAuthorizedToSign": true, + "PEMCipher": true, + "PEMCipher3DES": true, + "PEMCipherAES128": true, + "PEMCipherAES192": true, + "PEMCipherAES256": true, + "PEMCipherDES": true, + "ParseCRL": true, + "ParseCertificate": true, + "ParseCertificateRequest": true, + "ParseCertificates": true, + "ParseDERCRL": true, + "ParseECPrivateKey": true, + "ParsePKCS1PrivateKey": true, + "ParsePKCS1PublicKey": true, + "ParsePKCS8PrivateKey": true, + "ParsePKIXPublicKey": true, + "PublicKeyAlgorithm": true, + "RSA": true, + "SHA1WithRSA": true, + "SHA256WithRSA": true, + "SHA256WithRSAPSS": true, + "SHA384WithRSA": true, + "SHA384WithRSAPSS": true, + "SHA512WithRSA": true, + "SHA512WithRSAPSS": true, + "SignatureAlgorithm": true, + "SystemCertPool": true, + "SystemRootsError": true, + "TooManyConstraints": true, + "TooManyIntermediates": true, + "UnconstrainedName": true, + "UnhandledCriticalExtension": true, + "UnknownAuthorityError": true, + "UnknownPublicKeyAlgorithm": true, + "UnknownSignatureAlgorithm": true, + "VerifyOptions": true, + }, + "crypto/x509/pkix": map[string]bool{ + "AlgorithmIdentifier": true, + "AttributeTypeAndValue": true, + "AttributeTypeAndValueSET": true, + "CertificateList": true, + "Extension": true, + "Name": true, + "RDNSequence": true, + "RelativeDistinguishedNameSET": true, + "RevokedCertificate": true, + "TBSCertificateList": true, + }, + "database/sql": map[string]bool{ + "ColumnType": true, + "Conn": true, + "DB": true, + "DBStats": true, + "Drivers": true, + "ErrConnDone": true, + "ErrNoRows": true, + "ErrTxDone": true, + "IsolationLevel": true, + "LevelDefault": true, + "LevelLinearizable": true, + "LevelReadCommitted": true, + "LevelReadUncommitted": true, + "LevelRepeatableRead": true, + "LevelSerializable": true, + "LevelSnapshot": true, + "LevelWriteCommitted": true, + "Named": true, + "NamedArg": true, + "NullBool": true, + "NullFloat64": true, + "NullInt64": true, + "NullString": true, + "Open": true, + "OpenDB": true, + "Out": true, + "RawBytes": true, + "Register": true, + "Result": true, + "Row": true, + "Rows": true, + "Scanner": true, + "Stmt": true, + "Tx": true, + "TxOptions": true, + }, + "database/sql/driver": map[string]bool{ + "Bool": true, + "ColumnConverter": true, + "Conn": true, + "ConnBeginTx": true, + "ConnPrepareContext": true, + "Connector": true, + "DefaultParameterConverter": true, + "Driver": true, + "DriverContext": true, + "ErrBadConn": true, + "ErrRemoveArgument": true, + "ErrSkip": true, + "Execer": true, + "ExecerContext": true, + "Int32": true, + "IsScanValue": true, + "IsValue": true, + "IsolationLevel": true, + "NamedValue": true, + "NamedValueChecker": true, + "NotNull": true, + "Null": true, + "Pinger": true, + "Queryer": true, + "QueryerContext": true, + "Result": true, + "ResultNoRows": true, + "Rows": true, + "RowsAffected": true, + "RowsColumnTypeDatabaseTypeName": true, + "RowsColumnTypeLength": true, + "RowsColumnTypeNullable": true, + "RowsColumnTypePrecisionScale": true, + "RowsColumnTypeScanType": true, + "RowsNextResultSet": true, + "SessionResetter": true, + "Stmt": true, + "StmtExecContext": true, + "StmtQueryContext": true, + "String": true, + "Tx": true, + "TxOptions": true, + "Value": true, + "ValueConverter": true, + "Valuer": true, + }, + "debug/dwarf": map[string]bool{ + "AddrType": true, + "ArrayType": true, + "Attr": true, + "AttrAbstractOrigin": true, + "AttrAccessibility": true, + "AttrAddrClass": true, + "AttrAllocated": true, + "AttrArtificial": true, + "AttrAssociated": true, + "AttrBaseTypes": true, + "AttrBitOffset": true, + "AttrBitSize": true, + "AttrByteSize": true, + "AttrCallColumn": true, + "AttrCallFile": true, + "AttrCallLine": true, + "AttrCalling": true, + "AttrCommonRef": true, + "AttrCompDir": true, + "AttrConstValue": true, + "AttrContainingType": true, + "AttrCount": true, + "AttrDataLocation": true, + "AttrDataMemberLoc": true, + "AttrDeclColumn": true, + "AttrDeclFile": true, + "AttrDeclLine": true, + "AttrDeclaration": true, + "AttrDefaultValue": true, + "AttrDescription": true, + "AttrDiscr": true, + "AttrDiscrList": true, + "AttrDiscrValue": true, + "AttrEncoding": true, + "AttrEntrypc": true, + "AttrExtension": true, + "AttrExternal": true, + "AttrFrameBase": true, + "AttrFriend": true, + "AttrHighpc": true, + "AttrIdentifierCase": true, + "AttrImport": true, + "AttrInline": true, + "AttrIsOptional": true, + "AttrLanguage": true, + "AttrLocation": true, + "AttrLowerBound": true, + "AttrLowpc": true, + "AttrMacroInfo": true, + "AttrName": true, + "AttrNamelistItem": true, + "AttrOrdering": true, + "AttrPriority": true, + "AttrProducer": true, + "AttrPrototyped": true, + "AttrRanges": true, + "AttrReturnAddr": true, + "AttrSegment": true, + "AttrSibling": true, + "AttrSpecification": true, + "AttrStartScope": true, + "AttrStaticLink": true, + "AttrStmtList": true, + "AttrStride": true, + "AttrStrideSize": true, + "AttrStringLength": true, + "AttrTrampoline": true, + "AttrType": true, + "AttrUpperBound": true, + "AttrUseLocation": true, + "AttrUseUTF8": true, + "AttrVarParam": true, + "AttrVirtuality": true, + "AttrVisibility": true, + "AttrVtableElemLoc": true, + "BasicType": true, + "BoolType": true, + "CharType": true, + "Class": true, + "ClassAddress": true, + "ClassBlock": true, + "ClassConstant": true, + "ClassExprLoc": true, + "ClassFlag": true, + "ClassLinePtr": true, + "ClassLocListPtr": true, + "ClassMacPtr": true, + "ClassRangeListPtr": true, + "ClassReference": true, + "ClassReferenceAlt": true, + "ClassReferenceSig": true, + "ClassString": true, + "ClassStringAlt": true, + "ClassUnknown": true, + "CommonType": true, + "ComplexType": true, + "Data": true, + "DecodeError": true, + "DotDotDotType": true, + "Entry": true, + "EnumType": true, + "EnumValue": true, + "ErrUnknownPC": true, + "Field": true, + "FloatType": true, + "FuncType": true, + "IntType": true, + "LineEntry": true, + "LineFile": true, + "LineReader": true, + "LineReaderPos": true, + "New": true, + "Offset": true, + "PtrType": true, + "QualType": true, + "Reader": true, + "StructField": true, + "StructType": true, + "Tag": true, + "TagAccessDeclaration": true, + "TagArrayType": true, + "TagBaseType": true, + "TagCatchDwarfBlock": true, + "TagClassType": true, + "TagCommonDwarfBlock": true, + "TagCommonInclusion": true, + "TagCompileUnit": true, + "TagCondition": true, + "TagConstType": true, + "TagConstant": true, + "TagDwarfProcedure": true, + "TagEntryPoint": true, + "TagEnumerationType": true, + "TagEnumerator": true, + "TagFileType": true, + "TagFormalParameter": true, + "TagFriend": true, + "TagImportedDeclaration": true, + "TagImportedModule": true, + "TagImportedUnit": true, + "TagInheritance": true, + "TagInlinedSubroutine": true, + "TagInterfaceType": true, + "TagLabel": true, + "TagLexDwarfBlock": true, + "TagMember": true, + "TagModule": true, + "TagMutableType": true, + "TagNamelist": true, + "TagNamelistItem": true, + "TagNamespace": true, + "TagPackedType": true, + "TagPartialUnit": true, + "TagPointerType": true, + "TagPtrToMemberType": true, + "TagReferenceType": true, + "TagRestrictType": true, + "TagRvalueReferenceType": true, + "TagSetType": true, + "TagSharedType": true, + "TagStringType": true, + "TagStructType": true, + "TagSubprogram": true, + "TagSubrangeType": true, + "TagSubroutineType": true, + "TagTemplateAlias": true, + "TagTemplateTypeParameter": true, + "TagTemplateValueParameter": true, + "TagThrownType": true, + "TagTryDwarfBlock": true, + "TagTypeUnit": true, + "TagTypedef": true, + "TagUnionType": true, + "TagUnspecifiedParameters": true, + "TagUnspecifiedType": true, + "TagVariable": true, + "TagVariant": true, + "TagVariantPart": true, + "TagVolatileType": true, + "TagWithStmt": true, + "Type": true, + "TypedefType": true, + "UcharType": true, + "UintType": true, + "UnspecifiedType": true, + "VoidType": true, + }, + "debug/elf": map[string]bool{ + "ARM_MAGIC_TRAMP_NUMBER": true, + "COMPRESS_HIOS": true, + "COMPRESS_HIPROC": true, + "COMPRESS_LOOS": true, + "COMPRESS_LOPROC": true, + "COMPRESS_ZLIB": true, + "Chdr32": true, + "Chdr64": true, + "Class": true, + "CompressionType": true, + "DF_BIND_NOW": true, + "DF_ORIGIN": true, + "DF_STATIC_TLS": true, + "DF_SYMBOLIC": true, + "DF_TEXTREL": true, + "DT_BIND_NOW": true, + "DT_DEBUG": true, + "DT_ENCODING": true, + "DT_FINI": true, + "DT_FINI_ARRAY": true, + "DT_FINI_ARRAYSZ": true, + "DT_FLAGS": true, + "DT_HASH": true, + "DT_HIOS": true, + "DT_HIPROC": true, + "DT_INIT": true, + "DT_INIT_ARRAY": true, + "DT_INIT_ARRAYSZ": true, + "DT_JMPREL": true, + "DT_LOOS": true, + "DT_LOPROC": true, + "DT_NEEDED": true, + "DT_NULL": true, + "DT_PLTGOT": true, + "DT_PLTREL": true, + "DT_PLTRELSZ": true, + "DT_PREINIT_ARRAY": true, + "DT_PREINIT_ARRAYSZ": true, + "DT_REL": true, + "DT_RELA": true, + "DT_RELAENT": true, + "DT_RELASZ": true, + "DT_RELENT": true, + "DT_RELSZ": true, + "DT_RPATH": true, + "DT_RUNPATH": true, + "DT_SONAME": true, + "DT_STRSZ": true, + "DT_STRTAB": true, + "DT_SYMBOLIC": true, + "DT_SYMENT": true, + "DT_SYMTAB": true, + "DT_TEXTREL": true, + "DT_VERNEED": true, + "DT_VERNEEDNUM": true, + "DT_VERSYM": true, + "Data": true, + "Dyn32": true, + "Dyn64": true, + "DynFlag": true, + "DynTag": true, + "EI_ABIVERSION": true, + "EI_CLASS": true, + "EI_DATA": true, + "EI_NIDENT": true, + "EI_OSABI": true, + "EI_PAD": true, + "EI_VERSION": true, + "ELFCLASS32": true, + "ELFCLASS64": true, + "ELFCLASSNONE": true, + "ELFDATA2LSB": true, + "ELFDATA2MSB": true, + "ELFDATANONE": true, + "ELFMAG": true, + "ELFOSABI_86OPEN": true, + "ELFOSABI_AIX": true, + "ELFOSABI_ARM": true, + "ELFOSABI_AROS": true, + "ELFOSABI_CLOUDABI": true, + "ELFOSABI_FENIXOS": true, + "ELFOSABI_FREEBSD": true, + "ELFOSABI_HPUX": true, + "ELFOSABI_HURD": true, + "ELFOSABI_IRIX": true, + "ELFOSABI_LINUX": true, + "ELFOSABI_MODESTO": true, + "ELFOSABI_NETBSD": true, + "ELFOSABI_NONE": true, + "ELFOSABI_NSK": true, + "ELFOSABI_OPENBSD": true, + "ELFOSABI_OPENVMS": true, + "ELFOSABI_SOLARIS": true, + "ELFOSABI_STANDALONE": true, + "ELFOSABI_TRU64": true, + "EM_386": true, + "EM_486": true, + "EM_56800EX": true, + "EM_68HC05": true, + "EM_68HC08": true, + "EM_68HC11": true, + "EM_68HC12": true, + "EM_68HC16": true, + "EM_68K": true, + "EM_78KOR": true, + "EM_8051": true, + "EM_860": true, + "EM_88K": true, + "EM_960": true, + "EM_AARCH64": true, + "EM_ALPHA": true, + "EM_ALPHA_STD": true, + "EM_ALTERA_NIOS2": true, + "EM_AMDGPU": true, + "EM_ARC": true, + "EM_ARCA": true, + "EM_ARC_COMPACT": true, + "EM_ARC_COMPACT2": true, + "EM_ARM": true, + "EM_AVR": true, + "EM_AVR32": true, + "EM_BA1": true, + "EM_BA2": true, + "EM_BLACKFIN": true, + "EM_BPF": true, + "EM_C166": true, + "EM_CDP": true, + "EM_CE": true, + "EM_CLOUDSHIELD": true, + "EM_COGE": true, + "EM_COLDFIRE": true, + "EM_COOL": true, + "EM_COREA_1ST": true, + "EM_COREA_2ND": true, + "EM_CR": true, + "EM_CR16": true, + "EM_CRAYNV2": true, + "EM_CRIS": true, + "EM_CRX": true, + "EM_CSR_KALIMBA": true, + "EM_CUDA": true, + "EM_CYPRESS_M8C": true, + "EM_D10V": true, + "EM_D30V": true, + "EM_DSP24": true, + "EM_DSPIC30F": true, + "EM_DXP": true, + "EM_ECOG1": true, + "EM_ECOG16": true, + "EM_ECOG1X": true, + "EM_ECOG2": true, + "EM_ETPU": true, + "EM_EXCESS": true, + "EM_F2MC16": true, + "EM_FIREPATH": true, + "EM_FR20": true, + "EM_FR30": true, + "EM_FT32": true, + "EM_FX66": true, + "EM_H8S": true, + "EM_H8_300": true, + "EM_H8_300H": true, + "EM_H8_500": true, + "EM_HUANY": true, + "EM_IA_64": true, + "EM_INTEL205": true, + "EM_INTEL206": true, + "EM_INTEL207": true, + "EM_INTEL208": true, + "EM_INTEL209": true, + "EM_IP2K": true, + "EM_JAVELIN": true, + "EM_K10M": true, + "EM_KM32": true, + "EM_KMX16": true, + "EM_KMX32": true, + "EM_KMX8": true, + "EM_KVARC": true, + "EM_L10M": true, + "EM_LANAI": true, + "EM_LATTICEMICO32": true, + "EM_M16C": true, + "EM_M32": true, + "EM_M32C": true, + "EM_M32R": true, + "EM_MANIK": true, + "EM_MAX": true, + "EM_MAXQ30": true, + "EM_MCHP_PIC": true, + "EM_MCST_ELBRUS": true, + "EM_ME16": true, + "EM_METAG": true, + "EM_MICROBLAZE": true, + "EM_MIPS": true, + "EM_MIPS_RS3_LE": true, + "EM_MIPS_RS4_BE": true, + "EM_MIPS_X": true, + "EM_MMA": true, + "EM_MMDSP_PLUS": true, + "EM_MMIX": true, + "EM_MN10200": true, + "EM_MN10300": true, + "EM_MOXIE": true, + "EM_MSP430": true, + "EM_NCPU": true, + "EM_NDR1": true, + "EM_NDS32": true, + "EM_NONE": true, + "EM_NORC": true, + "EM_NS32K": true, + "EM_OPEN8": true, + "EM_OPENRISC": true, + "EM_PARISC": true, + "EM_PCP": true, + "EM_PDP10": true, + "EM_PDP11": true, + "EM_PDSP": true, + "EM_PJ": true, + "EM_PPC": true, + "EM_PPC64": true, + "EM_PRISM": true, + "EM_QDSP6": true, + "EM_R32C": true, + "EM_RCE": true, + "EM_RH32": true, + "EM_RISCV": true, + "EM_RL78": true, + "EM_RS08": true, + "EM_RX": true, + "EM_S370": true, + "EM_S390": true, + "EM_SCORE7": true, + "EM_SEP": true, + "EM_SE_C17": true, + "EM_SE_C33": true, + "EM_SH": true, + "EM_SHARC": true, + "EM_SLE9X": true, + "EM_SNP1K": true, + "EM_SPARC": true, + "EM_SPARC32PLUS": true, + "EM_SPARCV9": true, + "EM_ST100": true, + "EM_ST19": true, + "EM_ST200": true, + "EM_ST7": true, + "EM_ST9PLUS": true, + "EM_STARCORE": true, + "EM_STM8": true, + "EM_STXP7X": true, + "EM_SVX": true, + "EM_TILE64": true, + "EM_TILEGX": true, + "EM_TILEPRO": true, + "EM_TINYJ": true, + "EM_TI_ARP32": true, + "EM_TI_C2000": true, + "EM_TI_C5500": true, + "EM_TI_C6000": true, + "EM_TI_PRU": true, + "EM_TMM_GPP": true, + "EM_TPC": true, + "EM_TRICORE": true, + "EM_TRIMEDIA": true, + "EM_TSK3000": true, + "EM_UNICORE": true, + "EM_V800": true, + "EM_V850": true, + "EM_VAX": true, + "EM_VIDEOCORE": true, + "EM_VIDEOCORE3": true, + "EM_VIDEOCORE5": true, + "EM_VISIUM": true, + "EM_VPP500": true, + "EM_X86_64": true, + "EM_XCORE": true, + "EM_XGATE": true, + "EM_XIMO16": true, + "EM_XTENSA": true, + "EM_Z80": true, + "EM_ZSP": true, + "ET_CORE": true, + "ET_DYN": true, + "ET_EXEC": true, + "ET_HIOS": true, + "ET_HIPROC": true, + "ET_LOOS": true, + "ET_LOPROC": true, + "ET_NONE": true, + "ET_REL": true, + "EV_CURRENT": true, + "EV_NONE": true, + "ErrNoSymbols": true, + "File": true, + "FileHeader": true, + "FormatError": true, + "Header32": true, + "Header64": true, + "ImportedSymbol": true, + "Machine": true, + "NT_FPREGSET": true, + "NT_PRPSINFO": true, + "NT_PRSTATUS": true, + "NType": true, + "NewFile": true, + "OSABI": true, + "Open": true, + "PF_MASKOS": true, + "PF_MASKPROC": true, + "PF_R": true, + "PF_W": true, + "PF_X": true, + "PT_DYNAMIC": true, + "PT_HIOS": true, + "PT_HIPROC": true, + "PT_INTERP": true, + "PT_LOAD": true, + "PT_LOOS": true, + "PT_LOPROC": true, + "PT_NOTE": true, + "PT_NULL": true, + "PT_PHDR": true, + "PT_SHLIB": true, + "PT_TLS": true, + "Prog": true, + "Prog32": true, + "Prog64": true, + "ProgFlag": true, + "ProgHeader": true, + "ProgType": true, + "R_386": true, + "R_386_16": true, + "R_386_32": true, + "R_386_32PLT": true, + "R_386_8": true, + "R_386_COPY": true, + "R_386_GLOB_DAT": true, + "R_386_GOT32": true, + "R_386_GOT32X": true, + "R_386_GOTOFF": true, + "R_386_GOTPC": true, + "R_386_IRELATIVE": true, + "R_386_JMP_SLOT": true, + "R_386_NONE": true, + "R_386_PC16": true, + "R_386_PC32": true, + "R_386_PC8": true, + "R_386_PLT32": true, + "R_386_RELATIVE": true, + "R_386_SIZE32": true, + "R_386_TLS_DESC": true, + "R_386_TLS_DESC_CALL": true, + "R_386_TLS_DTPMOD32": true, + "R_386_TLS_DTPOFF32": true, + "R_386_TLS_GD": true, + "R_386_TLS_GD_32": true, + "R_386_TLS_GD_CALL": true, + "R_386_TLS_GD_POP": true, + "R_386_TLS_GD_PUSH": true, + "R_386_TLS_GOTDESC": true, + "R_386_TLS_GOTIE": true, + "R_386_TLS_IE": true, + "R_386_TLS_IE_32": true, + "R_386_TLS_LDM": true, + "R_386_TLS_LDM_32": true, + "R_386_TLS_LDM_CALL": true, + "R_386_TLS_LDM_POP": true, + "R_386_TLS_LDM_PUSH": true, + "R_386_TLS_LDO_32": true, + "R_386_TLS_LE": true, + "R_386_TLS_LE_32": true, + "R_386_TLS_TPOFF": true, + "R_386_TLS_TPOFF32": true, + "R_390": true, + "R_390_12": true, + "R_390_16": true, + "R_390_20": true, + "R_390_32": true, + "R_390_64": true, + "R_390_8": true, + "R_390_COPY": true, + "R_390_GLOB_DAT": true, + "R_390_GOT12": true, + "R_390_GOT16": true, + "R_390_GOT20": true, + "R_390_GOT32": true, + "R_390_GOT64": true, + "R_390_GOTENT": true, + "R_390_GOTOFF": true, + "R_390_GOTOFF16": true, + "R_390_GOTOFF64": true, + "R_390_GOTPC": true, + "R_390_GOTPCDBL": true, + "R_390_GOTPLT12": true, + "R_390_GOTPLT16": true, + "R_390_GOTPLT20": true, + "R_390_GOTPLT32": true, + "R_390_GOTPLT64": true, + "R_390_GOTPLTENT": true, + "R_390_GOTPLTOFF16": true, + "R_390_GOTPLTOFF32": true, + "R_390_GOTPLTOFF64": true, + "R_390_JMP_SLOT": true, + "R_390_NONE": true, + "R_390_PC16": true, + "R_390_PC16DBL": true, + "R_390_PC32": true, + "R_390_PC32DBL": true, + "R_390_PC64": true, + "R_390_PLT16DBL": true, + "R_390_PLT32": true, + "R_390_PLT32DBL": true, + "R_390_PLT64": true, + "R_390_RELATIVE": true, + "R_390_TLS_DTPMOD": true, + "R_390_TLS_DTPOFF": true, + "R_390_TLS_GD32": true, + "R_390_TLS_GD64": true, + "R_390_TLS_GDCALL": true, + "R_390_TLS_GOTIE12": true, + "R_390_TLS_GOTIE20": true, + "R_390_TLS_GOTIE32": true, + "R_390_TLS_GOTIE64": true, + "R_390_TLS_IE32": true, + "R_390_TLS_IE64": true, + "R_390_TLS_IEENT": true, + "R_390_TLS_LDCALL": true, + "R_390_TLS_LDM32": true, + "R_390_TLS_LDM64": true, + "R_390_TLS_LDO32": true, + "R_390_TLS_LDO64": true, + "R_390_TLS_LE32": true, + "R_390_TLS_LE64": true, + "R_390_TLS_LOAD": true, + "R_390_TLS_TPOFF": true, + "R_AARCH64": true, + "R_AARCH64_ABS16": true, + "R_AARCH64_ABS32": true, + "R_AARCH64_ABS64": true, + "R_AARCH64_ADD_ABS_LO12_NC": true, + "R_AARCH64_ADR_GOT_PAGE": true, + "R_AARCH64_ADR_PREL_LO21": true, + "R_AARCH64_ADR_PREL_PG_HI21": true, + "R_AARCH64_ADR_PREL_PG_HI21_NC": true, + "R_AARCH64_CALL26": true, + "R_AARCH64_CONDBR19": true, + "R_AARCH64_COPY": true, + "R_AARCH64_GLOB_DAT": true, + "R_AARCH64_GOT_LD_PREL19": true, + "R_AARCH64_IRELATIVE": true, + "R_AARCH64_JUMP26": true, + "R_AARCH64_JUMP_SLOT": true, + "R_AARCH64_LD64_GOTOFF_LO15": true, + "R_AARCH64_LD64_GOTPAGE_LO15": true, + "R_AARCH64_LD64_GOT_LO12_NC": true, + "R_AARCH64_LDST128_ABS_LO12_NC": true, + "R_AARCH64_LDST16_ABS_LO12_NC": true, + "R_AARCH64_LDST32_ABS_LO12_NC": true, + "R_AARCH64_LDST64_ABS_LO12_NC": true, + "R_AARCH64_LDST8_ABS_LO12_NC": true, + "R_AARCH64_LD_PREL_LO19": true, + "R_AARCH64_MOVW_SABS_G0": true, + "R_AARCH64_MOVW_SABS_G1": true, + "R_AARCH64_MOVW_SABS_G2": true, + "R_AARCH64_MOVW_UABS_G0": true, + "R_AARCH64_MOVW_UABS_G0_NC": true, + "R_AARCH64_MOVW_UABS_G1": true, + "R_AARCH64_MOVW_UABS_G1_NC": true, + "R_AARCH64_MOVW_UABS_G2": true, + "R_AARCH64_MOVW_UABS_G2_NC": true, + "R_AARCH64_MOVW_UABS_G3": true, + "R_AARCH64_NONE": true, + "R_AARCH64_NULL": true, + "R_AARCH64_P32_ABS16": true, + "R_AARCH64_P32_ABS32": true, + "R_AARCH64_P32_ADD_ABS_LO12_NC": true, + "R_AARCH64_P32_ADR_GOT_PAGE": true, + "R_AARCH64_P32_ADR_PREL_LO21": true, + "R_AARCH64_P32_ADR_PREL_PG_HI21": true, + "R_AARCH64_P32_CALL26": true, + "R_AARCH64_P32_CONDBR19": true, + "R_AARCH64_P32_COPY": true, + "R_AARCH64_P32_GLOB_DAT": true, + "R_AARCH64_P32_GOT_LD_PREL19": true, + "R_AARCH64_P32_IRELATIVE": true, + "R_AARCH64_P32_JUMP26": true, + "R_AARCH64_P32_JUMP_SLOT": true, + "R_AARCH64_P32_LD32_GOT_LO12_NC": true, + "R_AARCH64_P32_LDST128_ABS_LO12_NC": true, + "R_AARCH64_P32_LDST16_ABS_LO12_NC": true, + "R_AARCH64_P32_LDST32_ABS_LO12_NC": true, + "R_AARCH64_P32_LDST64_ABS_LO12_NC": true, + "R_AARCH64_P32_LDST8_ABS_LO12_NC": true, + "R_AARCH64_P32_LD_PREL_LO19": true, + "R_AARCH64_P32_MOVW_SABS_G0": true, + "R_AARCH64_P32_MOVW_UABS_G0": true, + "R_AARCH64_P32_MOVW_UABS_G0_NC": true, + "R_AARCH64_P32_MOVW_UABS_G1": true, + "R_AARCH64_P32_PREL16": true, + "R_AARCH64_P32_PREL32": true, + "R_AARCH64_P32_RELATIVE": true, + "R_AARCH64_P32_TLSDESC": true, + "R_AARCH64_P32_TLSDESC_ADD_LO12_NC": true, + "R_AARCH64_P32_TLSDESC_ADR_PAGE21": true, + "R_AARCH64_P32_TLSDESC_ADR_PREL21": true, + "R_AARCH64_P32_TLSDESC_CALL": true, + "R_AARCH64_P32_TLSDESC_LD32_LO12_NC": true, + "R_AARCH64_P32_TLSDESC_LD_PREL19": true, + "R_AARCH64_P32_TLSGD_ADD_LO12_NC": true, + "R_AARCH64_P32_TLSGD_ADR_PAGE21": true, + "R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21": true, + "R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC": true, + "R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19": true, + "R_AARCH64_P32_TLSLE_ADD_TPREL_HI12": true, + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12": true, + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC": true, + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0": true, + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC": true, + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G1": true, + "R_AARCH64_P32_TLS_DTPMOD": true, + "R_AARCH64_P32_TLS_DTPREL": true, + "R_AARCH64_P32_TLS_TPREL": true, + "R_AARCH64_P32_TSTBR14": true, + "R_AARCH64_PREL16": true, + "R_AARCH64_PREL32": true, + "R_AARCH64_PREL64": true, + "R_AARCH64_RELATIVE": true, + "R_AARCH64_TLSDESC": true, + "R_AARCH64_TLSDESC_ADD": true, + "R_AARCH64_TLSDESC_ADD_LO12_NC": true, + "R_AARCH64_TLSDESC_ADR_PAGE21": true, + "R_AARCH64_TLSDESC_ADR_PREL21": true, + "R_AARCH64_TLSDESC_CALL": true, + "R_AARCH64_TLSDESC_LD64_LO12_NC": true, + "R_AARCH64_TLSDESC_LDR": true, + "R_AARCH64_TLSDESC_LD_PREL19": true, + "R_AARCH64_TLSDESC_OFF_G0_NC": true, + "R_AARCH64_TLSDESC_OFF_G1": true, + "R_AARCH64_TLSGD_ADD_LO12_NC": true, + "R_AARCH64_TLSGD_ADR_PAGE21": true, + "R_AARCH64_TLSGD_ADR_PREL21": true, + "R_AARCH64_TLSGD_MOVW_G0_NC": true, + "R_AARCH64_TLSGD_MOVW_G1": true, + "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21": true, + "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC": true, + "R_AARCH64_TLSIE_LD_GOTTPREL_PREL19": true, + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC": true, + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G1": true, + "R_AARCH64_TLSLD_ADR_PAGE21": true, + "R_AARCH64_TLSLD_ADR_PREL21": true, + "R_AARCH64_TLSLD_LDST128_DTPREL_LO12": true, + "R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC": true, + "R_AARCH64_TLSLE_ADD_TPREL_HI12": true, + "R_AARCH64_TLSLE_ADD_TPREL_LO12": true, + "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC": true, + "R_AARCH64_TLSLE_LDST128_TPREL_LO12": true, + "R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC": true, + "R_AARCH64_TLSLE_MOVW_TPREL_G0": true, + "R_AARCH64_TLSLE_MOVW_TPREL_G0_NC": true, + "R_AARCH64_TLSLE_MOVW_TPREL_G1": true, + "R_AARCH64_TLSLE_MOVW_TPREL_G1_NC": true, + "R_AARCH64_TLSLE_MOVW_TPREL_G2": true, + "R_AARCH64_TLS_DTPMOD64": true, + "R_AARCH64_TLS_DTPREL64": true, + "R_AARCH64_TLS_TPREL64": true, + "R_AARCH64_TSTBR14": true, + "R_ALPHA": true, + "R_ALPHA_BRADDR": true, + "R_ALPHA_COPY": true, + "R_ALPHA_GLOB_DAT": true, + "R_ALPHA_GPDISP": true, + "R_ALPHA_GPREL32": true, + "R_ALPHA_GPRELHIGH": true, + "R_ALPHA_GPRELLOW": true, + "R_ALPHA_GPVALUE": true, + "R_ALPHA_HINT": true, + "R_ALPHA_IMMED_BR_HI32": true, + "R_ALPHA_IMMED_GP_16": true, + "R_ALPHA_IMMED_GP_HI32": true, + "R_ALPHA_IMMED_LO32": true, + "R_ALPHA_IMMED_SCN_HI32": true, + "R_ALPHA_JMP_SLOT": true, + "R_ALPHA_LITERAL": true, + "R_ALPHA_LITUSE": true, + "R_ALPHA_NONE": true, + "R_ALPHA_OP_PRSHIFT": true, + "R_ALPHA_OP_PSUB": true, + "R_ALPHA_OP_PUSH": true, + "R_ALPHA_OP_STORE": true, + "R_ALPHA_REFLONG": true, + "R_ALPHA_REFQUAD": true, + "R_ALPHA_RELATIVE": true, + "R_ALPHA_SREL16": true, + "R_ALPHA_SREL32": true, + "R_ALPHA_SREL64": true, + "R_ARM": true, + "R_ARM_ABS12": true, + "R_ARM_ABS16": true, + "R_ARM_ABS32": true, + "R_ARM_ABS32_NOI": true, + "R_ARM_ABS8": true, + "R_ARM_ALU_PCREL_15_8": true, + "R_ARM_ALU_PCREL_23_15": true, + "R_ARM_ALU_PCREL_7_0": true, + "R_ARM_ALU_PC_G0": true, + "R_ARM_ALU_PC_G0_NC": true, + "R_ARM_ALU_PC_G1": true, + "R_ARM_ALU_PC_G1_NC": true, + "R_ARM_ALU_PC_G2": true, + "R_ARM_ALU_SBREL_19_12_NC": true, + "R_ARM_ALU_SBREL_27_20_CK": true, + "R_ARM_ALU_SB_G0": true, + "R_ARM_ALU_SB_G0_NC": true, + "R_ARM_ALU_SB_G1": true, + "R_ARM_ALU_SB_G1_NC": true, + "R_ARM_ALU_SB_G2": true, + "R_ARM_AMP_VCALL9": true, + "R_ARM_BASE_ABS": true, + "R_ARM_CALL": true, + "R_ARM_COPY": true, + "R_ARM_GLOB_DAT": true, + "R_ARM_GNU_VTENTRY": true, + "R_ARM_GNU_VTINHERIT": true, + "R_ARM_GOT32": true, + "R_ARM_GOTOFF": true, + "R_ARM_GOTOFF12": true, + "R_ARM_GOTPC": true, + "R_ARM_GOTRELAX": true, + "R_ARM_GOT_ABS": true, + "R_ARM_GOT_BREL12": true, + "R_ARM_GOT_PREL": true, + "R_ARM_IRELATIVE": true, + "R_ARM_JUMP24": true, + "R_ARM_JUMP_SLOT": true, + "R_ARM_LDC_PC_G0": true, + "R_ARM_LDC_PC_G1": true, + "R_ARM_LDC_PC_G2": true, + "R_ARM_LDC_SB_G0": true, + "R_ARM_LDC_SB_G1": true, + "R_ARM_LDC_SB_G2": true, + "R_ARM_LDRS_PC_G0": true, + "R_ARM_LDRS_PC_G1": true, + "R_ARM_LDRS_PC_G2": true, + "R_ARM_LDRS_SB_G0": true, + "R_ARM_LDRS_SB_G1": true, + "R_ARM_LDRS_SB_G2": true, + "R_ARM_LDR_PC_G1": true, + "R_ARM_LDR_PC_G2": true, + "R_ARM_LDR_SBREL_11_10_NC": true, + "R_ARM_LDR_SB_G0": true, + "R_ARM_LDR_SB_G1": true, + "R_ARM_LDR_SB_G2": true, + "R_ARM_ME_TOO": true, + "R_ARM_MOVT_ABS": true, + "R_ARM_MOVT_BREL": true, + "R_ARM_MOVT_PREL": true, + "R_ARM_MOVW_ABS_NC": true, + "R_ARM_MOVW_BREL": true, + "R_ARM_MOVW_BREL_NC": true, + "R_ARM_MOVW_PREL_NC": true, + "R_ARM_NONE": true, + "R_ARM_PC13": true, + "R_ARM_PC24": true, + "R_ARM_PLT32": true, + "R_ARM_PLT32_ABS": true, + "R_ARM_PREL31": true, + "R_ARM_PRIVATE_0": true, + "R_ARM_PRIVATE_1": true, + "R_ARM_PRIVATE_10": true, + "R_ARM_PRIVATE_11": true, + "R_ARM_PRIVATE_12": true, + "R_ARM_PRIVATE_13": true, + "R_ARM_PRIVATE_14": true, + "R_ARM_PRIVATE_15": true, + "R_ARM_PRIVATE_2": true, + "R_ARM_PRIVATE_3": true, + "R_ARM_PRIVATE_4": true, + "R_ARM_PRIVATE_5": true, + "R_ARM_PRIVATE_6": true, + "R_ARM_PRIVATE_7": true, + "R_ARM_PRIVATE_8": true, + "R_ARM_PRIVATE_9": true, + "R_ARM_RABS32": true, + "R_ARM_RBASE": true, + "R_ARM_REL32": true, + "R_ARM_REL32_NOI": true, + "R_ARM_RELATIVE": true, + "R_ARM_RPC24": true, + "R_ARM_RREL32": true, + "R_ARM_RSBREL32": true, + "R_ARM_RXPC25": true, + "R_ARM_SBREL31": true, + "R_ARM_SBREL32": true, + "R_ARM_SWI24": true, + "R_ARM_TARGET1": true, + "R_ARM_TARGET2": true, + "R_ARM_THM_ABS5": true, + "R_ARM_THM_ALU_ABS_G0_NC": true, + "R_ARM_THM_ALU_ABS_G1_NC": true, + "R_ARM_THM_ALU_ABS_G2_NC": true, + "R_ARM_THM_ALU_ABS_G3": true, + "R_ARM_THM_ALU_PREL_11_0": true, + "R_ARM_THM_GOT_BREL12": true, + "R_ARM_THM_JUMP11": true, + "R_ARM_THM_JUMP19": true, + "R_ARM_THM_JUMP24": true, + "R_ARM_THM_JUMP6": true, + "R_ARM_THM_JUMP8": true, + "R_ARM_THM_MOVT_ABS": true, + "R_ARM_THM_MOVT_BREL": true, + "R_ARM_THM_MOVT_PREL": true, + "R_ARM_THM_MOVW_ABS_NC": true, + "R_ARM_THM_MOVW_BREL": true, + "R_ARM_THM_MOVW_BREL_NC": true, + "R_ARM_THM_MOVW_PREL_NC": true, + "R_ARM_THM_PC12": true, + "R_ARM_THM_PC22": true, + "R_ARM_THM_PC8": true, + "R_ARM_THM_RPC22": true, + "R_ARM_THM_SWI8": true, + "R_ARM_THM_TLS_CALL": true, + "R_ARM_THM_TLS_DESCSEQ16": true, + "R_ARM_THM_TLS_DESCSEQ32": true, + "R_ARM_THM_XPC22": true, + "R_ARM_TLS_CALL": true, + "R_ARM_TLS_DESCSEQ": true, + "R_ARM_TLS_DTPMOD32": true, + "R_ARM_TLS_DTPOFF32": true, + "R_ARM_TLS_GD32": true, + "R_ARM_TLS_GOTDESC": true, + "R_ARM_TLS_IE12GP": true, + "R_ARM_TLS_IE32": true, + "R_ARM_TLS_LDM32": true, + "R_ARM_TLS_LDO12": true, + "R_ARM_TLS_LDO32": true, + "R_ARM_TLS_LE12": true, + "R_ARM_TLS_LE32": true, + "R_ARM_TLS_TPOFF32": true, + "R_ARM_V4BX": true, + "R_ARM_XPC25": true, + "R_INFO": true, + "R_INFO32": true, + "R_MIPS": true, + "R_MIPS_16": true, + "R_MIPS_26": true, + "R_MIPS_32": true, + "R_MIPS_64": true, + "R_MIPS_ADD_IMMEDIATE": true, + "R_MIPS_CALL16": true, + "R_MIPS_CALL_HI16": true, + "R_MIPS_CALL_LO16": true, + "R_MIPS_DELETE": true, + "R_MIPS_GOT16": true, + "R_MIPS_GOT_DISP": true, + "R_MIPS_GOT_HI16": true, + "R_MIPS_GOT_LO16": true, + "R_MIPS_GOT_OFST": true, + "R_MIPS_GOT_PAGE": true, + "R_MIPS_GPREL16": true, + "R_MIPS_GPREL32": true, + "R_MIPS_HI16": true, + "R_MIPS_HIGHER": true, + "R_MIPS_HIGHEST": true, + "R_MIPS_INSERT_A": true, + "R_MIPS_INSERT_B": true, + "R_MIPS_JALR": true, + "R_MIPS_LITERAL": true, + "R_MIPS_LO16": true, + "R_MIPS_NONE": true, + "R_MIPS_PC16": true, + "R_MIPS_PJUMP": true, + "R_MIPS_REL16": true, + "R_MIPS_REL32": true, + "R_MIPS_RELGOT": true, + "R_MIPS_SCN_DISP": true, + "R_MIPS_SHIFT5": true, + "R_MIPS_SHIFT6": true, + "R_MIPS_SUB": true, + "R_MIPS_TLS_DTPMOD32": true, + "R_MIPS_TLS_DTPMOD64": true, + "R_MIPS_TLS_DTPREL32": true, + "R_MIPS_TLS_DTPREL64": true, + "R_MIPS_TLS_DTPREL_HI16": true, + "R_MIPS_TLS_DTPREL_LO16": true, + "R_MIPS_TLS_GD": true, + "R_MIPS_TLS_GOTTPREL": true, + "R_MIPS_TLS_LDM": true, + "R_MIPS_TLS_TPREL32": true, + "R_MIPS_TLS_TPREL64": true, + "R_MIPS_TLS_TPREL_HI16": true, + "R_MIPS_TLS_TPREL_LO16": true, + "R_PPC": true, + "R_PPC64": true, + "R_PPC64_ADDR14": true, + "R_PPC64_ADDR14_BRNTAKEN": true, + "R_PPC64_ADDR14_BRTAKEN": true, + "R_PPC64_ADDR16": true, + "R_PPC64_ADDR16_DS": true, + "R_PPC64_ADDR16_HA": true, + "R_PPC64_ADDR16_HI": true, + "R_PPC64_ADDR16_HIGH": true, + "R_PPC64_ADDR16_HIGHA": true, + "R_PPC64_ADDR16_HIGHER": true, + "R_PPC64_ADDR16_HIGHERA": true, + "R_PPC64_ADDR16_HIGHEST": true, + "R_PPC64_ADDR16_HIGHESTA": true, + "R_PPC64_ADDR16_LO": true, + "R_PPC64_ADDR16_LO_DS": true, + "R_PPC64_ADDR24": true, + "R_PPC64_ADDR32": true, + "R_PPC64_ADDR64": true, + "R_PPC64_ADDR64_LOCAL": true, + "R_PPC64_DTPMOD64": true, + "R_PPC64_DTPREL16": true, + "R_PPC64_DTPREL16_DS": true, + "R_PPC64_DTPREL16_HA": true, + "R_PPC64_DTPREL16_HI": true, + "R_PPC64_DTPREL16_HIGH": true, + "R_PPC64_DTPREL16_HIGHA": true, + "R_PPC64_DTPREL16_HIGHER": true, + "R_PPC64_DTPREL16_HIGHERA": true, + "R_PPC64_DTPREL16_HIGHEST": true, + "R_PPC64_DTPREL16_HIGHESTA": true, + "R_PPC64_DTPREL16_LO": true, + "R_PPC64_DTPREL16_LO_DS": true, + "R_PPC64_DTPREL64": true, + "R_PPC64_ENTRY": true, + "R_PPC64_GOT16": true, + "R_PPC64_GOT16_DS": true, + "R_PPC64_GOT16_HA": true, + "R_PPC64_GOT16_HI": true, + "R_PPC64_GOT16_LO": true, + "R_PPC64_GOT16_LO_DS": true, + "R_PPC64_GOT_DTPREL16_DS": true, + "R_PPC64_GOT_DTPREL16_HA": true, + "R_PPC64_GOT_DTPREL16_HI": true, + "R_PPC64_GOT_DTPREL16_LO_DS": true, + "R_PPC64_GOT_TLSGD16": true, + "R_PPC64_GOT_TLSGD16_HA": true, + "R_PPC64_GOT_TLSGD16_HI": true, + "R_PPC64_GOT_TLSGD16_LO": true, + "R_PPC64_GOT_TLSLD16": true, + "R_PPC64_GOT_TLSLD16_HA": true, + "R_PPC64_GOT_TLSLD16_HI": true, + "R_PPC64_GOT_TLSLD16_LO": true, + "R_PPC64_GOT_TPREL16_DS": true, + "R_PPC64_GOT_TPREL16_HA": true, + "R_PPC64_GOT_TPREL16_HI": true, + "R_PPC64_GOT_TPREL16_LO_DS": true, + "R_PPC64_IRELATIVE": true, + "R_PPC64_JMP_IREL": true, + "R_PPC64_JMP_SLOT": true, + "R_PPC64_NONE": true, + "R_PPC64_PLT16_LO_DS": true, + "R_PPC64_PLTGOT16": true, + "R_PPC64_PLTGOT16_DS": true, + "R_PPC64_PLTGOT16_HA": true, + "R_PPC64_PLTGOT16_HI": true, + "R_PPC64_PLTGOT16_LO": true, + "R_PPC64_PLTGOT_LO_DS": true, + "R_PPC64_REL14": true, + "R_PPC64_REL14_BRNTAKEN": true, + "R_PPC64_REL14_BRTAKEN": true, + "R_PPC64_REL16": true, + "R_PPC64_REL16DX_HA": true, + "R_PPC64_REL16_HA": true, + "R_PPC64_REL16_HI": true, + "R_PPC64_REL16_LO": true, + "R_PPC64_REL24": true, + "R_PPC64_REL24_NOTOC": true, + "R_PPC64_REL32": true, + "R_PPC64_REL64": true, + "R_PPC64_SECTOFF_DS": true, + "R_PPC64_SECTOFF_LO_DS": true, + "R_PPC64_TLS": true, + "R_PPC64_TLSGD": true, + "R_PPC64_TLSLD": true, + "R_PPC64_TOC": true, + "R_PPC64_TOC16": true, + "R_PPC64_TOC16_DS": true, + "R_PPC64_TOC16_HA": true, + "R_PPC64_TOC16_HI": true, + "R_PPC64_TOC16_LO": true, + "R_PPC64_TOC16_LO_DS": true, + "R_PPC64_TOCSAVE": true, + "R_PPC64_TPREL16": true, + "R_PPC64_TPREL16_DS": true, + "R_PPC64_TPREL16_HA": true, + "R_PPC64_TPREL16_HI": true, + "R_PPC64_TPREL16_HIGH": true, + "R_PPC64_TPREL16_HIGHA": true, + "R_PPC64_TPREL16_HIGHER": true, + "R_PPC64_TPREL16_HIGHERA": true, + "R_PPC64_TPREL16_HIGHEST": true, + "R_PPC64_TPREL16_HIGHESTA": true, + "R_PPC64_TPREL16_LO": true, + "R_PPC64_TPREL16_LO_DS": true, + "R_PPC64_TPREL64": true, + "R_PPC_ADDR14": true, + "R_PPC_ADDR14_BRNTAKEN": true, + "R_PPC_ADDR14_BRTAKEN": true, + "R_PPC_ADDR16": true, + "R_PPC_ADDR16_HA": true, + "R_PPC_ADDR16_HI": true, + "R_PPC_ADDR16_LO": true, + "R_PPC_ADDR24": true, + "R_PPC_ADDR32": true, + "R_PPC_COPY": true, + "R_PPC_DTPMOD32": true, + "R_PPC_DTPREL16": true, + "R_PPC_DTPREL16_HA": true, + "R_PPC_DTPREL16_HI": true, + "R_PPC_DTPREL16_LO": true, + "R_PPC_DTPREL32": true, + "R_PPC_EMB_BIT_FLD": true, + "R_PPC_EMB_MRKREF": true, + "R_PPC_EMB_NADDR16": true, + "R_PPC_EMB_NADDR16_HA": true, + "R_PPC_EMB_NADDR16_HI": true, + "R_PPC_EMB_NADDR16_LO": true, + "R_PPC_EMB_NADDR32": true, + "R_PPC_EMB_RELSDA": true, + "R_PPC_EMB_RELSEC16": true, + "R_PPC_EMB_RELST_HA": true, + "R_PPC_EMB_RELST_HI": true, + "R_PPC_EMB_RELST_LO": true, + "R_PPC_EMB_SDA21": true, + "R_PPC_EMB_SDA2I16": true, + "R_PPC_EMB_SDA2REL": true, + "R_PPC_EMB_SDAI16": true, + "R_PPC_GLOB_DAT": true, + "R_PPC_GOT16": true, + "R_PPC_GOT16_HA": true, + "R_PPC_GOT16_HI": true, + "R_PPC_GOT16_LO": true, + "R_PPC_GOT_TLSGD16": true, + "R_PPC_GOT_TLSGD16_HA": true, + "R_PPC_GOT_TLSGD16_HI": true, + "R_PPC_GOT_TLSGD16_LO": true, + "R_PPC_GOT_TLSLD16": true, + "R_PPC_GOT_TLSLD16_HA": true, + "R_PPC_GOT_TLSLD16_HI": true, + "R_PPC_GOT_TLSLD16_LO": true, + "R_PPC_GOT_TPREL16": true, + "R_PPC_GOT_TPREL16_HA": true, + "R_PPC_GOT_TPREL16_HI": true, + "R_PPC_GOT_TPREL16_LO": true, + "R_PPC_JMP_SLOT": true, + "R_PPC_LOCAL24PC": true, + "R_PPC_NONE": true, + "R_PPC_PLT16_HA": true, + "R_PPC_PLT16_HI": true, + "R_PPC_PLT16_LO": true, + "R_PPC_PLT32": true, + "R_PPC_PLTREL24": true, + "R_PPC_PLTREL32": true, + "R_PPC_REL14": true, + "R_PPC_REL14_BRNTAKEN": true, + "R_PPC_REL14_BRTAKEN": true, + "R_PPC_REL24": true, + "R_PPC_REL32": true, + "R_PPC_RELATIVE": true, + "R_PPC_SDAREL16": true, + "R_PPC_SECTOFF": true, + "R_PPC_SECTOFF_HA": true, + "R_PPC_SECTOFF_HI": true, + "R_PPC_SECTOFF_LO": true, + "R_PPC_TLS": true, + "R_PPC_TPREL16": true, + "R_PPC_TPREL16_HA": true, + "R_PPC_TPREL16_HI": true, + "R_PPC_TPREL16_LO": true, + "R_PPC_TPREL32": true, + "R_PPC_UADDR16": true, + "R_PPC_UADDR32": true, + "R_RISCV": true, + "R_RISCV_32": true, + "R_RISCV_32_PCREL": true, + "R_RISCV_64": true, + "R_RISCV_ADD16": true, + "R_RISCV_ADD32": true, + "R_RISCV_ADD64": true, + "R_RISCV_ADD8": true, + "R_RISCV_ALIGN": true, + "R_RISCV_BRANCH": true, + "R_RISCV_CALL": true, + "R_RISCV_CALL_PLT": true, + "R_RISCV_COPY": true, + "R_RISCV_GNU_VTENTRY": true, + "R_RISCV_GNU_VTINHERIT": true, + "R_RISCV_GOT_HI20": true, + "R_RISCV_GPREL_I": true, + "R_RISCV_GPREL_S": true, + "R_RISCV_HI20": true, + "R_RISCV_JAL": true, + "R_RISCV_JUMP_SLOT": true, + "R_RISCV_LO12_I": true, + "R_RISCV_LO12_S": true, + "R_RISCV_NONE": true, + "R_RISCV_PCREL_HI20": true, + "R_RISCV_PCREL_LO12_I": true, + "R_RISCV_PCREL_LO12_S": true, + "R_RISCV_RELATIVE": true, + "R_RISCV_RELAX": true, + "R_RISCV_RVC_BRANCH": true, + "R_RISCV_RVC_JUMP": true, + "R_RISCV_RVC_LUI": true, + "R_RISCV_SET16": true, + "R_RISCV_SET32": true, + "R_RISCV_SET6": true, + "R_RISCV_SET8": true, + "R_RISCV_SUB16": true, + "R_RISCV_SUB32": true, + "R_RISCV_SUB6": true, + "R_RISCV_SUB64": true, + "R_RISCV_SUB8": true, + "R_RISCV_TLS_DTPMOD32": true, + "R_RISCV_TLS_DTPMOD64": true, + "R_RISCV_TLS_DTPREL32": true, + "R_RISCV_TLS_DTPREL64": true, + "R_RISCV_TLS_GD_HI20": true, + "R_RISCV_TLS_GOT_HI20": true, + "R_RISCV_TLS_TPREL32": true, + "R_RISCV_TLS_TPREL64": true, + "R_RISCV_TPREL_ADD": true, + "R_RISCV_TPREL_HI20": true, + "R_RISCV_TPREL_I": true, + "R_RISCV_TPREL_LO12_I": true, + "R_RISCV_TPREL_LO12_S": true, + "R_RISCV_TPREL_S": true, + "R_SPARC": true, + "R_SPARC_10": true, + "R_SPARC_11": true, + "R_SPARC_13": true, + "R_SPARC_16": true, + "R_SPARC_22": true, + "R_SPARC_32": true, + "R_SPARC_5": true, + "R_SPARC_6": true, + "R_SPARC_64": true, + "R_SPARC_7": true, + "R_SPARC_8": true, + "R_SPARC_COPY": true, + "R_SPARC_DISP16": true, + "R_SPARC_DISP32": true, + "R_SPARC_DISP64": true, + "R_SPARC_DISP8": true, + "R_SPARC_GLOB_DAT": true, + "R_SPARC_GLOB_JMP": true, + "R_SPARC_GOT10": true, + "R_SPARC_GOT13": true, + "R_SPARC_GOT22": true, + "R_SPARC_H44": true, + "R_SPARC_HH22": true, + "R_SPARC_HI22": true, + "R_SPARC_HIPLT22": true, + "R_SPARC_HIX22": true, + "R_SPARC_HM10": true, + "R_SPARC_JMP_SLOT": true, + "R_SPARC_L44": true, + "R_SPARC_LM22": true, + "R_SPARC_LO10": true, + "R_SPARC_LOPLT10": true, + "R_SPARC_LOX10": true, + "R_SPARC_M44": true, + "R_SPARC_NONE": true, + "R_SPARC_OLO10": true, + "R_SPARC_PC10": true, + "R_SPARC_PC22": true, + "R_SPARC_PCPLT10": true, + "R_SPARC_PCPLT22": true, + "R_SPARC_PCPLT32": true, + "R_SPARC_PC_HH22": true, + "R_SPARC_PC_HM10": true, + "R_SPARC_PC_LM22": true, + "R_SPARC_PLT32": true, + "R_SPARC_PLT64": true, + "R_SPARC_REGISTER": true, + "R_SPARC_RELATIVE": true, + "R_SPARC_UA16": true, + "R_SPARC_UA32": true, + "R_SPARC_UA64": true, + "R_SPARC_WDISP16": true, + "R_SPARC_WDISP19": true, + "R_SPARC_WDISP22": true, + "R_SPARC_WDISP30": true, + "R_SPARC_WPLT30": true, + "R_SYM32": true, + "R_SYM64": true, + "R_TYPE32": true, + "R_TYPE64": true, + "R_X86_64": true, + "R_X86_64_16": true, + "R_X86_64_32": true, + "R_X86_64_32S": true, + "R_X86_64_64": true, + "R_X86_64_8": true, + "R_X86_64_COPY": true, + "R_X86_64_DTPMOD64": true, + "R_X86_64_DTPOFF32": true, + "R_X86_64_DTPOFF64": true, + "R_X86_64_GLOB_DAT": true, + "R_X86_64_GOT32": true, + "R_X86_64_GOT64": true, + "R_X86_64_GOTOFF64": true, + "R_X86_64_GOTPC32": true, + "R_X86_64_GOTPC32_TLSDESC": true, + "R_X86_64_GOTPC64": true, + "R_X86_64_GOTPCREL": true, + "R_X86_64_GOTPCREL64": true, + "R_X86_64_GOTPCRELX": true, + "R_X86_64_GOTPLT64": true, + "R_X86_64_GOTTPOFF": true, + "R_X86_64_IRELATIVE": true, + "R_X86_64_JMP_SLOT": true, + "R_X86_64_NONE": true, + "R_X86_64_PC16": true, + "R_X86_64_PC32": true, + "R_X86_64_PC32_BND": true, + "R_X86_64_PC64": true, + "R_X86_64_PC8": true, + "R_X86_64_PLT32": true, + "R_X86_64_PLT32_BND": true, + "R_X86_64_PLTOFF64": true, + "R_X86_64_RELATIVE": true, + "R_X86_64_RELATIVE64": true, + "R_X86_64_REX_GOTPCRELX": true, + "R_X86_64_SIZE32": true, + "R_X86_64_SIZE64": true, + "R_X86_64_TLSDESC": true, + "R_X86_64_TLSDESC_CALL": true, + "R_X86_64_TLSGD": true, + "R_X86_64_TLSLD": true, + "R_X86_64_TPOFF32": true, + "R_X86_64_TPOFF64": true, + "Rel32": true, + "Rel64": true, + "Rela32": true, + "Rela64": true, + "SHF_ALLOC": true, + "SHF_COMPRESSED": true, + "SHF_EXECINSTR": true, + "SHF_GROUP": true, + "SHF_INFO_LINK": true, + "SHF_LINK_ORDER": true, + "SHF_MASKOS": true, + "SHF_MASKPROC": true, + "SHF_MERGE": true, + "SHF_OS_NONCONFORMING": true, + "SHF_STRINGS": true, + "SHF_TLS": true, + "SHF_WRITE": true, + "SHN_ABS": true, + "SHN_COMMON": true, + "SHN_HIOS": true, + "SHN_HIPROC": true, + "SHN_HIRESERVE": true, + "SHN_LOOS": true, + "SHN_LOPROC": true, + "SHN_LORESERVE": true, + "SHN_UNDEF": true, + "SHN_XINDEX": true, + "SHT_DYNAMIC": true, + "SHT_DYNSYM": true, + "SHT_FINI_ARRAY": true, + "SHT_GNU_ATTRIBUTES": true, + "SHT_GNU_HASH": true, + "SHT_GNU_LIBLIST": true, + "SHT_GNU_VERDEF": true, + "SHT_GNU_VERNEED": true, + "SHT_GNU_VERSYM": true, + "SHT_GROUP": true, + "SHT_HASH": true, + "SHT_HIOS": true, + "SHT_HIPROC": true, + "SHT_HIUSER": true, + "SHT_INIT_ARRAY": true, + "SHT_LOOS": true, + "SHT_LOPROC": true, + "SHT_LOUSER": true, + "SHT_NOBITS": true, + "SHT_NOTE": true, + "SHT_NULL": true, + "SHT_PREINIT_ARRAY": true, + "SHT_PROGBITS": true, + "SHT_REL": true, + "SHT_RELA": true, + "SHT_SHLIB": true, + "SHT_STRTAB": true, + "SHT_SYMTAB": true, + "SHT_SYMTAB_SHNDX": true, + "STB_GLOBAL": true, + "STB_HIOS": true, + "STB_HIPROC": true, + "STB_LOCAL": true, + "STB_LOOS": true, + "STB_LOPROC": true, + "STB_WEAK": true, + "STT_COMMON": true, + "STT_FILE": true, + "STT_FUNC": true, + "STT_HIOS": true, + "STT_HIPROC": true, + "STT_LOOS": true, + "STT_LOPROC": true, + "STT_NOTYPE": true, + "STT_OBJECT": true, + "STT_SECTION": true, + "STT_TLS": true, + "STV_DEFAULT": true, + "STV_HIDDEN": true, + "STV_INTERNAL": true, + "STV_PROTECTED": true, + "ST_BIND": true, + "ST_INFO": true, + "ST_TYPE": true, + "ST_VISIBILITY": true, + "Section": true, + "Section32": true, + "Section64": true, + "SectionFlag": true, + "SectionHeader": true, + "SectionIndex": true, + "SectionType": true, + "Sym32": true, + "Sym32Size": true, + "Sym64": true, + "Sym64Size": true, + "SymBind": true, + "SymType": true, + "SymVis": true, + "Symbol": true, + "Type": true, + "Version": true, + }, + "debug/gosym": map[string]bool{ + "DecodingError": true, + "Func": true, + "LineTable": true, + "NewLineTable": true, + "NewTable": true, + "Obj": true, + "Sym": true, + "Table": true, + "UnknownFileError": true, + "UnknownLineError": true, + }, + "debug/macho": map[string]bool{ + "ARM64_RELOC_ADDEND": true, + "ARM64_RELOC_BRANCH26": true, + "ARM64_RELOC_GOT_LOAD_PAGE21": true, + "ARM64_RELOC_GOT_LOAD_PAGEOFF12": true, + "ARM64_RELOC_PAGE21": true, + "ARM64_RELOC_PAGEOFF12": true, + "ARM64_RELOC_POINTER_TO_GOT": true, + "ARM64_RELOC_SUBTRACTOR": true, + "ARM64_RELOC_TLVP_LOAD_PAGE21": true, + "ARM64_RELOC_TLVP_LOAD_PAGEOFF12": true, + "ARM64_RELOC_UNSIGNED": true, + "ARM_RELOC_BR24": true, + "ARM_RELOC_HALF": true, + "ARM_RELOC_HALF_SECTDIFF": true, + "ARM_RELOC_LOCAL_SECTDIFF": true, + "ARM_RELOC_PAIR": true, + "ARM_RELOC_PB_LA_PTR": true, + "ARM_RELOC_SECTDIFF": true, + "ARM_RELOC_VANILLA": true, + "ARM_THUMB_32BIT_BRANCH": true, + "ARM_THUMB_RELOC_BR22": true, + "Cpu": true, + "Cpu386": true, + "CpuAmd64": true, + "CpuArm": true, + "CpuArm64": true, + "CpuPpc": true, + "CpuPpc64": true, + "Dylib": true, + "DylibCmd": true, + "Dysymtab": true, + "DysymtabCmd": true, + "ErrNotFat": true, + "FatArch": true, + "FatArchHeader": true, + "FatFile": true, + "File": true, + "FileHeader": true, + "FlagAllModsBound": true, + "FlagAllowStackExecution": true, + "FlagAppExtensionSafe": true, + "FlagBindAtLoad": true, + "FlagBindsToWeak": true, + "FlagCanonical": true, + "FlagDeadStrippableDylib": true, + "FlagDyldLink": true, + "FlagForceFlat": true, + "FlagHasTLVDescriptors": true, + "FlagIncrLink": true, + "FlagLazyInit": true, + "FlagNoFixPrebinding": true, + "FlagNoHeapExecution": true, + "FlagNoMultiDefs": true, + "FlagNoReexportedDylibs": true, + "FlagNoUndefs": true, + "FlagPIE": true, + "FlagPrebindable": true, + "FlagPrebound": true, + "FlagRootSafe": true, + "FlagSetuidSafe": true, + "FlagSplitSegs": true, + "FlagSubsectionsViaSymbols": true, + "FlagTwoLevel": true, + "FlagWeakDefines": true, + "FormatError": true, + "GENERIC_RELOC_LOCAL_SECTDIFF": true, + "GENERIC_RELOC_PAIR": true, + "GENERIC_RELOC_PB_LA_PTR": true, + "GENERIC_RELOC_SECTDIFF": true, + "GENERIC_RELOC_TLV": true, + "GENERIC_RELOC_VANILLA": true, + "Load": true, + "LoadBytes": true, + "LoadCmd": true, + "LoadCmdDylib": true, + "LoadCmdDylinker": true, + "LoadCmdDysymtab": true, + "LoadCmdRpath": true, + "LoadCmdSegment": true, + "LoadCmdSegment64": true, + "LoadCmdSymtab": true, + "LoadCmdThread": true, + "LoadCmdUnixThread": true, + "Magic32": true, + "Magic64": true, + "MagicFat": true, + "NewFatFile": true, + "NewFile": true, + "Nlist32": true, + "Nlist64": true, + "Open": true, + "OpenFat": true, + "Regs386": true, + "RegsAMD64": true, + "Reloc": true, + "RelocTypeARM": true, + "RelocTypeARM64": true, + "RelocTypeGeneric": true, + "RelocTypeX86_64": true, + "Rpath": true, + "RpathCmd": true, + "Section": true, + "Section32": true, + "Section64": true, + "SectionHeader": true, + "Segment": true, + "Segment32": true, + "Segment64": true, + "SegmentHeader": true, + "Symbol": true, + "Symtab": true, + "SymtabCmd": true, + "Thread": true, + "Type": true, + "TypeBundle": true, + "TypeDylib": true, + "TypeExec": true, + "TypeObj": true, + "X86_64_RELOC_BRANCH": true, + "X86_64_RELOC_GOT": true, + "X86_64_RELOC_GOT_LOAD": true, + "X86_64_RELOC_SIGNED": true, + "X86_64_RELOC_SIGNED_1": true, + "X86_64_RELOC_SIGNED_2": true, + "X86_64_RELOC_SIGNED_4": true, + "X86_64_RELOC_SUBTRACTOR": true, + "X86_64_RELOC_TLV": true, + "X86_64_RELOC_UNSIGNED": true, + }, + "debug/pe": map[string]bool{ + "COFFSymbol": true, + "COFFSymbolSize": true, + "DataDirectory": true, + "File": true, + "FileHeader": true, + "FormatError": true, + "IMAGE_DIRECTORY_ENTRY_ARCHITECTURE": true, + "IMAGE_DIRECTORY_ENTRY_BASERELOC": true, + "IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT": true, + "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR": true, + "IMAGE_DIRECTORY_ENTRY_DEBUG": true, + "IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT": true, + "IMAGE_DIRECTORY_ENTRY_EXCEPTION": true, + "IMAGE_DIRECTORY_ENTRY_EXPORT": true, + "IMAGE_DIRECTORY_ENTRY_GLOBALPTR": true, + "IMAGE_DIRECTORY_ENTRY_IAT": true, + "IMAGE_DIRECTORY_ENTRY_IMPORT": true, + "IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG": true, + "IMAGE_DIRECTORY_ENTRY_RESOURCE": true, + "IMAGE_DIRECTORY_ENTRY_SECURITY": true, + "IMAGE_DIRECTORY_ENTRY_TLS": true, + "IMAGE_FILE_MACHINE_AM33": true, + "IMAGE_FILE_MACHINE_AMD64": true, + "IMAGE_FILE_MACHINE_ARM": true, + "IMAGE_FILE_MACHINE_ARM64": true, + "IMAGE_FILE_MACHINE_ARMNT": true, + "IMAGE_FILE_MACHINE_EBC": true, + "IMAGE_FILE_MACHINE_I386": true, + "IMAGE_FILE_MACHINE_IA64": true, + "IMAGE_FILE_MACHINE_M32R": true, + "IMAGE_FILE_MACHINE_MIPS16": true, + "IMAGE_FILE_MACHINE_MIPSFPU": true, + "IMAGE_FILE_MACHINE_MIPSFPU16": true, + "IMAGE_FILE_MACHINE_POWERPC": true, + "IMAGE_FILE_MACHINE_POWERPCFP": true, + "IMAGE_FILE_MACHINE_R4000": true, + "IMAGE_FILE_MACHINE_SH3": true, + "IMAGE_FILE_MACHINE_SH3DSP": true, + "IMAGE_FILE_MACHINE_SH4": true, + "IMAGE_FILE_MACHINE_SH5": true, + "IMAGE_FILE_MACHINE_THUMB": true, + "IMAGE_FILE_MACHINE_UNKNOWN": true, + "IMAGE_FILE_MACHINE_WCEMIPSV2": true, + "ImportDirectory": true, + "NewFile": true, + "Open": true, + "OptionalHeader32": true, + "OptionalHeader64": true, + "Reloc": true, + "Section": true, + "SectionHeader": true, + "SectionHeader32": true, + "StringTable": true, + "Symbol": true, + }, + "debug/plan9obj": map[string]bool{ + "File": true, + "FileHeader": true, + "Magic386": true, + "Magic64": true, + "MagicAMD64": true, + "MagicARM": true, + "NewFile": true, + "Open": true, + "Section": true, + "SectionHeader": true, + "Sym": true, + }, + "encoding": map[string]bool{ + "BinaryMarshaler": true, + "BinaryUnmarshaler": true, + "TextMarshaler": true, + "TextUnmarshaler": true, + }, + "encoding/ascii85": map[string]bool{ + "CorruptInputError": true, + "Decode": true, + "Encode": true, + "MaxEncodedLen": true, + "NewDecoder": true, + "NewEncoder": true, + }, + "encoding/asn1": map[string]bool{ + "BitString": true, + "ClassApplication": true, + "ClassContextSpecific": true, + "ClassPrivate": true, + "ClassUniversal": true, + "Enumerated": true, + "Flag": true, + "Marshal": true, + "MarshalWithParams": true, + "NullBytes": true, + "NullRawValue": true, + "ObjectIdentifier": true, + "RawContent": true, + "RawValue": true, + "StructuralError": true, + "SyntaxError": true, + "TagBitString": true, + "TagBoolean": true, + "TagEnum": true, + "TagGeneralString": true, + "TagGeneralizedTime": true, + "TagIA5String": true, + "TagInteger": true, + "TagNull": true, + "TagNumericString": true, + "TagOID": true, + "TagOctetString": true, + "TagPrintableString": true, + "TagSequence": true, + "TagSet": true, + "TagT61String": true, + "TagUTCTime": true, + "TagUTF8String": true, + "Unmarshal": true, + "UnmarshalWithParams": true, + }, + "encoding/base32": map[string]bool{ + "CorruptInputError": true, + "Encoding": true, + "HexEncoding": true, + "NewDecoder": true, + "NewEncoder": true, + "NewEncoding": true, + "NoPadding": true, + "StdEncoding": true, + "StdPadding": true, + }, + "encoding/base64": map[string]bool{ + "CorruptInputError": true, + "Encoding": true, + "NewDecoder": true, + "NewEncoder": true, + "NewEncoding": true, + "NoPadding": true, + "RawStdEncoding": true, + "RawURLEncoding": true, + "StdEncoding": true, + "StdPadding": true, + "URLEncoding": true, + }, + "encoding/binary": map[string]bool{ + "BigEndian": true, + "ByteOrder": true, + "LittleEndian": true, + "MaxVarintLen16": true, + "MaxVarintLen32": true, + "MaxVarintLen64": true, + "PutUvarint": true, + "PutVarint": true, + "Read": true, + "ReadUvarint": true, + "ReadVarint": true, + "Size": true, + "Uvarint": true, + "Varint": true, + "Write": true, + }, + "encoding/csv": map[string]bool{ + "ErrBareQuote": true, + "ErrFieldCount": true, + "ErrQuote": true, + "ErrTrailingComma": true, + "NewReader": true, + "NewWriter": true, + "ParseError": true, + "Reader": true, + "Writer": true, + }, + "encoding/gob": map[string]bool{ + "CommonType": true, + "Decoder": true, + "Encoder": true, + "GobDecoder": true, + "GobEncoder": true, + "NewDecoder": true, + "NewEncoder": true, + "Register": true, + "RegisterName": true, + }, + "encoding/hex": map[string]bool{ + "Decode": true, + "DecodeString": true, + "DecodedLen": true, + "Dump": true, + "Dumper": true, + "Encode": true, + "EncodeToString": true, + "EncodedLen": true, + "ErrLength": true, + "InvalidByteError": true, + "NewDecoder": true, + "NewEncoder": true, + }, + "encoding/json": map[string]bool{ + "Compact": true, + "Decoder": true, + "Delim": true, + "Encoder": true, + "HTMLEscape": true, + "Indent": true, + "InvalidUTF8Error": true, + "InvalidUnmarshalError": true, + "Marshal": true, + "MarshalIndent": true, + "Marshaler": true, + "MarshalerError": true, + "NewDecoder": true, + "NewEncoder": true, + "Number": true, + "RawMessage": true, + "SyntaxError": true, + "Token": true, + "Unmarshal": true, + "UnmarshalFieldError": true, + "UnmarshalTypeError": true, + "Unmarshaler": true, + "UnsupportedTypeError": true, + "UnsupportedValueError": true, + "Valid": true, + }, + "encoding/pem": map[string]bool{ + "Block": true, + "Decode": true, + "Encode": true, + "EncodeToMemory": true, + }, + "encoding/xml": map[string]bool{ + "Attr": true, + "CharData": true, + "Comment": true, + "CopyToken": true, + "Decoder": true, + "Directive": true, + "Encoder": true, + "EndElement": true, + "Escape": true, + "EscapeText": true, + "HTMLAutoClose": true, + "HTMLEntity": true, + "Header": true, + "Marshal": true, + "MarshalIndent": true, + "Marshaler": true, + "MarshalerAttr": true, + "Name": true, + "NewDecoder": true, + "NewEncoder": true, + "NewTokenDecoder": true, + "ProcInst": true, + "StartElement": true, + "SyntaxError": true, + "TagPathError": true, + "Token": true, + "TokenReader": true, + "Unmarshal": true, + "UnmarshalError": true, + "Unmarshaler": true, + "UnmarshalerAttr": true, + "UnsupportedTypeError": true, + }, + "errors": map[string]bool{ + "New": true, + }, + "expvar": map[string]bool{ + "Do": true, + "Float": true, + "Func": true, + "Get": true, + "Handler": true, + "Int": true, + "KeyValue": true, + "Map": true, + "NewFloat": true, + "NewInt": true, + "NewMap": true, + "NewString": true, + "Publish": true, + "String": true, + "Var": true, + }, + "flag": map[string]bool{ + "Arg": true, + "Args": true, + "Bool": true, + "BoolVar": true, + "CommandLine": true, + "ContinueOnError": true, + "Duration": true, + "DurationVar": true, + "ErrHelp": true, + "ErrorHandling": true, + "ExitOnError": true, + "Flag": true, + "FlagSet": true, + "Float64": true, + "Float64Var": true, + "Getter": true, + "Int": true, + "Int64": true, + "Int64Var": true, + "IntVar": true, + "Lookup": true, + "NArg": true, + "NFlag": true, + "NewFlagSet": true, + "PanicOnError": true, + "Parse": true, + "Parsed": true, + "PrintDefaults": true, + "Set": true, + "String": true, + "StringVar": true, + "Uint": true, + "Uint64": true, + "Uint64Var": true, + "UintVar": true, + "UnquoteUsage": true, + "Usage": true, + "Value": true, + "Var": true, + "Visit": true, + "VisitAll": true, + }, + "fmt": map[string]bool{ + "Errorf": true, + "Formatter": true, + "Fprint": true, + "Fprintf": true, + "Fprintln": true, + "Fscan": true, + "Fscanf": true, + "Fscanln": true, + "GoStringer": true, + "Print": true, + "Printf": true, + "Println": true, + "Scan": true, + "ScanState": true, + "Scanf": true, + "Scanln": true, + "Scanner": true, + "Sprint": true, + "Sprintf": true, + "Sprintln": true, + "Sscan": true, + "Sscanf": true, + "Sscanln": true, + "State": true, + "Stringer": true, + }, + "go/ast": map[string]bool{ + "ArrayType": true, + "AssignStmt": true, + "Bad": true, + "BadDecl": true, + "BadExpr": true, + "BadStmt": true, + "BasicLit": true, + "BinaryExpr": true, + "BlockStmt": true, + "BranchStmt": true, + "CallExpr": true, + "CaseClause": true, + "ChanDir": true, + "ChanType": true, + "CommClause": true, + "Comment": true, + "CommentGroup": true, + "CommentMap": true, + "CompositeLit": true, + "Con": true, + "DeclStmt": true, + "DeferStmt": true, + "Ellipsis": true, + "EmptyStmt": true, + "ExprStmt": true, + "Field": true, + "FieldFilter": true, + "FieldList": true, + "File": true, + "FileExports": true, + "Filter": true, + "FilterDecl": true, + "FilterFile": true, + "FilterFuncDuplicates": true, + "FilterImportDuplicates": true, + "FilterPackage": true, + "FilterUnassociatedComments": true, + "ForStmt": true, + "Fprint": true, + "Fun": true, + "FuncDecl": true, + "FuncLit": true, + "FuncType": true, + "GenDecl": true, + "GoStmt": true, + "Ident": true, + "IfStmt": true, + "ImportSpec": true, + "Importer": true, + "IncDecStmt": true, + "IndexExpr": true, + "Inspect": true, + "InterfaceType": true, + "IsExported": true, + "KeyValueExpr": true, + "LabeledStmt": true, + "Lbl": true, + "MapType": true, + "MergeMode": true, + "MergePackageFiles": true, + "NewCommentMap": true, + "NewIdent": true, + "NewObj": true, + "NewPackage": true, + "NewScope": true, + "Node": true, + "NotNilFilter": true, + "ObjKind": true, + "Object": true, + "Package": true, + "PackageExports": true, + "ParenExpr": true, + "Pkg": true, + "Print": true, + "RECV": true, + "RangeStmt": true, + "ReturnStmt": true, + "SEND": true, + "Scope": true, + "SelectStmt": true, + "SelectorExpr": true, + "SendStmt": true, + "SliceExpr": true, + "SortImports": true, + "StarExpr": true, + "StructType": true, + "SwitchStmt": true, + "Typ": true, + "TypeAssertExpr": true, + "TypeSpec": true, + "TypeSwitchStmt": true, + "UnaryExpr": true, + "ValueSpec": true, + "Var": true, + "Visitor": true, + "Walk": true, + }, + "go/build": map[string]bool{ + "AllowBinary": true, + "ArchChar": true, + "Context": true, + "Default": true, + "FindOnly": true, + "IgnoreVendor": true, + "Import": true, + "ImportComment": true, + "ImportDir": true, + "ImportMode": true, + "IsLocalImport": true, + "MultiplePackageError": true, + "NoGoError": true, + "Package": true, + "ToolDir": true, + }, + "go/constant": map[string]bool{ + "BinaryOp": true, + "BitLen": true, + "Bool": true, + "BoolVal": true, + "Bytes": true, + "Compare": true, + "Complex": true, + "Denom": true, + "Float": true, + "Float32Val": true, + "Float64Val": true, + "Imag": true, + "Int": true, + "Int64Val": true, + "Kind": true, + "MakeBool": true, + "MakeFloat64": true, + "MakeFromBytes": true, + "MakeFromLiteral": true, + "MakeImag": true, + "MakeInt64": true, + "MakeString": true, + "MakeUint64": true, + "MakeUnknown": true, + "Num": true, + "Real": true, + "Shift": true, + "Sign": true, + "String": true, + "StringVal": true, + "ToComplex": true, + "ToFloat": true, + "ToInt": true, + "Uint64Val": true, + "UnaryOp": true, + "Unknown": true, + }, + "go/doc": map[string]bool{ + "AllDecls": true, + "AllMethods": true, + "Example": true, + "Examples": true, + "Filter": true, + "Func": true, + "IllegalPrefixes": true, + "IsPredeclared": true, + "Mode": true, + "New": true, + "Note": true, + "Package": true, + "PreserveAST": true, + "Synopsis": true, + "ToHTML": true, + "ToText": true, + "Type": true, + "Value": true, + }, + "go/format": map[string]bool{ + "Node": true, + "Source": true, + }, + "go/importer": map[string]bool{ + "Default": true, + "For": true, + "ForCompiler": true, + "Lookup": true, + }, + "go/parser": map[string]bool{ + "AllErrors": true, + "DeclarationErrors": true, + "ImportsOnly": true, + "Mode": true, + "PackageClauseOnly": true, + "ParseComments": true, + "ParseDir": true, + "ParseExpr": true, + "ParseExprFrom": true, + "ParseFile": true, + "SpuriousErrors": true, + "Trace": true, + }, + "go/printer": map[string]bool{ + "CommentedNode": true, + "Config": true, + "Fprint": true, + "Mode": true, + "RawFormat": true, + "SourcePos": true, + "TabIndent": true, + "UseSpaces": true, + }, + "go/scanner": map[string]bool{ + "Error": true, + "ErrorHandler": true, + "ErrorList": true, + "Mode": true, + "PrintError": true, + "ScanComments": true, + "Scanner": true, + }, + "go/token": map[string]bool{ + "ADD": true, + "ADD_ASSIGN": true, + "AND": true, + "AND_ASSIGN": true, + "AND_NOT": true, + "AND_NOT_ASSIGN": true, + "ARROW": true, + "ASSIGN": true, + "BREAK": true, + "CASE": true, + "CHAN": true, + "CHAR": true, + "COLON": true, + "COMMA": true, + "COMMENT": true, + "CONST": true, + "CONTINUE": true, + "DEC": true, + "DEFAULT": true, + "DEFER": true, + "DEFINE": true, + "ELLIPSIS": true, + "ELSE": true, + "EOF": true, + "EQL": true, + "FALLTHROUGH": true, + "FLOAT": true, + "FOR": true, + "FUNC": true, + "File": true, + "FileSet": true, + "GEQ": true, + "GO": true, + "GOTO": true, + "GTR": true, + "HighestPrec": true, + "IDENT": true, + "IF": true, + "ILLEGAL": true, + "IMAG": true, + "IMPORT": true, + "INC": true, + "INT": true, + "INTERFACE": true, + "LAND": true, + "LBRACE": true, + "LBRACK": true, + "LEQ": true, + "LOR": true, + "LPAREN": true, + "LSS": true, + "Lookup": true, + "LowestPrec": true, + "MAP": true, + "MUL": true, + "MUL_ASSIGN": true, + "NEQ": true, + "NOT": true, + "NewFileSet": true, + "NoPos": true, + "OR": true, + "OR_ASSIGN": true, + "PACKAGE": true, + "PERIOD": true, + "Pos": true, + "Position": true, + "QUO": true, + "QUO_ASSIGN": true, + "RANGE": true, + "RBRACE": true, + "RBRACK": true, + "REM": true, + "REM_ASSIGN": true, + "RETURN": true, + "RPAREN": true, + "SELECT": true, + "SEMICOLON": true, + "SHL": true, + "SHL_ASSIGN": true, + "SHR": true, + "SHR_ASSIGN": true, + "STRING": true, + "STRUCT": true, + "SUB": true, + "SUB_ASSIGN": true, + "SWITCH": true, + "TYPE": true, + "Token": true, + "UnaryPrec": true, + "VAR": true, + "XOR": true, + "XOR_ASSIGN": true, + }, + "go/types": map[string]bool{ + "Array": true, + "AssertableTo": true, + "AssignableTo": true, + "Basic": true, + "BasicInfo": true, + "BasicKind": true, + "Bool": true, + "Builtin": true, + "Byte": true, + "Chan": true, + "ChanDir": true, + "Checker": true, + "Comparable": true, + "Complex128": true, + "Complex64": true, + "Config": true, + "Const": true, + "ConvertibleTo": true, + "DefPredeclaredTestFuncs": true, + "Default": true, + "Error": true, + "Eval": true, + "ExprString": true, + "FieldVal": true, + "Float32": true, + "Float64": true, + "Func": true, + "Id": true, + "Identical": true, + "IdenticalIgnoreTags": true, + "Implements": true, + "ImportMode": true, + "Importer": true, + "ImporterFrom": true, + "Info": true, + "Initializer": true, + "Int": true, + "Int16": true, + "Int32": true, + "Int64": true, + "Int8": true, + "Interface": true, + "Invalid": true, + "IsBoolean": true, + "IsComplex": true, + "IsConstType": true, + "IsFloat": true, + "IsInteger": true, + "IsInterface": true, + "IsNumeric": true, + "IsOrdered": true, + "IsString": true, + "IsUnsigned": true, + "IsUntyped": true, + "Label": true, + "LookupFieldOrMethod": true, + "Map": true, + "MethodExpr": true, + "MethodSet": true, + "MethodVal": true, + "MissingMethod": true, + "Named": true, + "NewArray": true, + "NewChan": true, + "NewChecker": true, + "NewConst": true, + "NewField": true, + "NewFunc": true, + "NewInterface": true, + "NewInterfaceType": true, + "NewLabel": true, + "NewMap": true, + "NewMethodSet": true, + "NewNamed": true, + "NewPackage": true, + "NewParam": true, + "NewPkgName": true, + "NewPointer": true, + "NewScope": true, + "NewSignature": true, + "NewSlice": true, + "NewStruct": true, + "NewTuple": true, + "NewTypeName": true, + "NewVar": true, + "Nil": true, + "ObjectString": true, + "Package": true, + "PkgName": true, + "Pointer": true, + "Qualifier": true, + "RecvOnly": true, + "RelativeTo": true, + "Rune": true, + "Scope": true, + "Selection": true, + "SelectionKind": true, + "SelectionString": true, + "SendOnly": true, + "SendRecv": true, + "Signature": true, + "Sizes": true, + "SizesFor": true, + "Slice": true, + "StdSizes": true, + "String": true, + "Struct": true, + "Tuple": true, + "Typ": true, + "Type": true, + "TypeAndValue": true, + "TypeName": true, + "TypeString": true, + "Uint": true, + "Uint16": true, + "Uint32": true, + "Uint64": true, + "Uint8": true, + "Uintptr": true, + "Universe": true, + "Unsafe": true, + "UnsafePointer": true, + "UntypedBool": true, + "UntypedComplex": true, + "UntypedFloat": true, + "UntypedInt": true, + "UntypedNil": true, + "UntypedRune": true, + "UntypedString": true, + "Var": true, + "WriteExpr": true, + "WriteSignature": true, + "WriteType": true, + }, + "hash": map[string]bool{ + "Hash": true, + "Hash32": true, + "Hash64": true, + }, + "hash/adler32": map[string]bool{ + "Checksum": true, + "New": true, + "Size": true, + }, + "hash/crc32": map[string]bool{ + "Castagnoli": true, + "Checksum": true, + "ChecksumIEEE": true, + "IEEE": true, + "IEEETable": true, + "Koopman": true, + "MakeTable": true, + "New": true, + "NewIEEE": true, + "Size": true, + "Table": true, + "Update": true, + }, + "hash/crc64": map[string]bool{ + "Checksum": true, + "ECMA": true, + "ISO": true, + "MakeTable": true, + "New": true, + "Size": true, + "Table": true, + "Update": true, + }, + "hash/fnv": map[string]bool{ + "New128": true, + "New128a": true, + "New32": true, + "New32a": true, + "New64": true, + "New64a": true, + }, + "html": map[string]bool{ + "EscapeString": true, + "UnescapeString": true, + }, + "html/template": map[string]bool{ + "CSS": true, + "ErrAmbigContext": true, + "ErrBadHTML": true, + "ErrBranchEnd": true, + "ErrEndContext": true, + "ErrNoSuchTemplate": true, + "ErrOutputContext": true, + "ErrPartialCharset": true, + "ErrPartialEscape": true, + "ErrPredefinedEscaper": true, + "ErrRangeLoopReentry": true, + "ErrSlashAmbig": true, + "Error": true, + "ErrorCode": true, + "FuncMap": true, + "HTML": true, + "HTMLAttr": true, + "HTMLEscape": true, + "HTMLEscapeString": true, + "HTMLEscaper": true, + "IsTrue": true, + "JS": true, + "JSEscape": true, + "JSEscapeString": true, + "JSEscaper": true, + "JSStr": true, + "Must": true, + "New": true, + "OK": true, + "ParseFiles": true, + "ParseGlob": true, + "Srcset": true, + "Template": true, + "URL": true, + "URLQueryEscaper": true, + }, + "image": map[string]bool{ + "Alpha": true, + "Alpha16": true, + "Black": true, + "CMYK": true, + "Config": true, + "Decode": true, + "DecodeConfig": true, + "ErrFormat": true, + "Gray": true, + "Gray16": true, + "Image": true, + "NRGBA": true, + "NRGBA64": true, + "NYCbCrA": true, + "NewAlpha": true, + "NewAlpha16": true, + "NewCMYK": true, + "NewGray": true, + "NewGray16": true, + "NewNRGBA": true, + "NewNRGBA64": true, + "NewNYCbCrA": true, + "NewPaletted": true, + "NewRGBA": true, + "NewRGBA64": true, + "NewUniform": true, + "NewYCbCr": true, + "Opaque": true, + "Paletted": true, + "PalettedImage": true, + "Point": true, + "Pt": true, + "RGBA": true, + "RGBA64": true, + "Rect": true, + "Rectangle": true, + "RegisterFormat": true, + "Transparent": true, + "Uniform": true, + "White": true, + "YCbCr": true, + "YCbCrSubsampleRatio": true, + "YCbCrSubsampleRatio410": true, + "YCbCrSubsampleRatio411": true, + "YCbCrSubsampleRatio420": true, + "YCbCrSubsampleRatio422": true, + "YCbCrSubsampleRatio440": true, + "YCbCrSubsampleRatio444": true, + "ZP": true, + "ZR": true, + }, + "image/color": map[string]bool{ + "Alpha": true, + "Alpha16": true, + "Alpha16Model": true, + "AlphaModel": true, + "Black": true, + "CMYK": true, + "CMYKModel": true, + "CMYKToRGB": true, + "Color": true, + "Gray": true, + "Gray16": true, + "Gray16Model": true, + "GrayModel": true, + "Model": true, + "ModelFunc": true, + "NRGBA": true, + "NRGBA64": true, + "NRGBA64Model": true, + "NRGBAModel": true, + "NYCbCrA": true, + "NYCbCrAModel": true, + "Opaque": true, + "Palette": true, + "RGBA": true, + "RGBA64": true, + "RGBA64Model": true, + "RGBAModel": true, + "RGBToCMYK": true, + "RGBToYCbCr": true, + "Transparent": true, + "White": true, + "YCbCr": true, + "YCbCrModel": true, + "YCbCrToRGB": true, + }, + "image/color/palette": map[string]bool{ + "Plan9": true, + "WebSafe": true, + }, + "image/draw": map[string]bool{ + "Draw": true, + "DrawMask": true, + "Drawer": true, + "FloydSteinberg": true, + "Image": true, + "Op": true, + "Over": true, + "Quantizer": true, + "Src": true, + }, + "image/gif": map[string]bool{ + "Decode": true, + "DecodeAll": true, + "DecodeConfig": true, + "DisposalBackground": true, + "DisposalNone": true, + "DisposalPrevious": true, + "Encode": true, + "EncodeAll": true, + "GIF": true, + "Options": true, + }, + "image/jpeg": map[string]bool{ + "Decode": true, + "DecodeConfig": true, + "DefaultQuality": true, + "Encode": true, + "FormatError": true, + "Options": true, + "Reader": true, + "UnsupportedError": true, + }, + "image/png": map[string]bool{ + "BestCompression": true, + "BestSpeed": true, + "CompressionLevel": true, + "Decode": true, + "DecodeConfig": true, + "DefaultCompression": true, + "Encode": true, + "Encoder": true, + "EncoderBuffer": true, + "EncoderBufferPool": true, + "FormatError": true, + "NoCompression": true, + "UnsupportedError": true, + }, + "index/suffixarray": map[string]bool{ + "Index": true, + "New": true, + }, + "io": map[string]bool{ + "ByteReader": true, + "ByteScanner": true, + "ByteWriter": true, + "Closer": true, + "Copy": true, + "CopyBuffer": true, + "CopyN": true, + "EOF": true, + "ErrClosedPipe": true, + "ErrNoProgress": true, + "ErrShortBuffer": true, + "ErrShortWrite": true, + "ErrUnexpectedEOF": true, + "LimitReader": true, + "LimitedReader": true, + "MultiReader": true, + "MultiWriter": true, + "NewSectionReader": true, + "Pipe": true, + "PipeReader": true, + "PipeWriter": true, + "ReadAtLeast": true, + "ReadCloser": true, + "ReadFull": true, + "ReadSeeker": true, + "ReadWriteCloser": true, + "ReadWriteSeeker": true, + "ReadWriter": true, + "Reader": true, + "ReaderAt": true, + "ReaderFrom": true, + "RuneReader": true, + "RuneScanner": true, + "SectionReader": true, + "SeekCurrent": true, + "SeekEnd": true, + "SeekStart": true, + "Seeker": true, + "StringWriter": true, + "TeeReader": true, + "WriteCloser": true, + "WriteSeeker": true, + "WriteString": true, + "Writer": true, + "WriterAt": true, + "WriterTo": true, + }, + "io/ioutil": map[string]bool{ + "Discard": true, + "NopCloser": true, + "ReadAll": true, + "ReadDir": true, + "ReadFile": true, + "TempDir": true, + "TempFile": true, + "WriteFile": true, + }, + "log": map[string]bool{ + "Fatal": true, + "Fatalf": true, + "Fatalln": true, + "Flags": true, + "LUTC": true, + "Ldate": true, + "Llongfile": true, + "Lmicroseconds": true, + "Logger": true, + "Lshortfile": true, + "LstdFlags": true, + "Ltime": true, + "New": true, + "Output": true, + "Panic": true, + "Panicf": true, + "Panicln": true, + "Prefix": true, + "Print": true, + "Printf": true, + "Println": true, + "SetFlags": true, + "SetOutput": true, + "SetPrefix": true, + }, + "log/syslog": map[string]bool{ + "Dial": true, + "LOG_ALERT": true, + "LOG_AUTH": true, + "LOG_AUTHPRIV": true, + "LOG_CRIT": true, + "LOG_CRON": true, + "LOG_DAEMON": true, + "LOG_DEBUG": true, + "LOG_EMERG": true, + "LOG_ERR": true, + "LOG_FTP": true, + "LOG_INFO": true, + "LOG_KERN": true, + "LOG_LOCAL0": true, + "LOG_LOCAL1": true, + "LOG_LOCAL2": true, + "LOG_LOCAL3": true, + "LOG_LOCAL4": true, + "LOG_LOCAL5": true, + "LOG_LOCAL6": true, + "LOG_LOCAL7": true, + "LOG_LPR": true, + "LOG_MAIL": true, + "LOG_NEWS": true, + "LOG_NOTICE": true, + "LOG_SYSLOG": true, + "LOG_USER": true, + "LOG_UUCP": true, + "LOG_WARNING": true, + "New": true, + "NewLogger": true, + "Priority": true, + "Writer": true, + }, + "math": map[string]bool{ + "Abs": true, + "Acos": true, + "Acosh": true, + "Asin": true, + "Asinh": true, + "Atan": true, + "Atan2": true, + "Atanh": true, + "Cbrt": true, + "Ceil": true, + "Copysign": true, + "Cos": true, + "Cosh": true, + "Dim": true, + "E": true, + "Erf": true, + "Erfc": true, + "Erfcinv": true, + "Erfinv": true, + "Exp": true, + "Exp2": true, + "Expm1": true, + "Float32bits": true, + "Float32frombits": true, + "Float64bits": true, + "Float64frombits": true, + "Floor": true, + "Frexp": true, + "Gamma": true, + "Hypot": true, + "Ilogb": true, + "Inf": true, + "IsInf": true, + "IsNaN": true, + "J0": true, + "J1": true, + "Jn": true, + "Ldexp": true, + "Lgamma": true, + "Ln10": true, + "Ln2": true, + "Log": true, + "Log10": true, + "Log10E": true, + "Log1p": true, + "Log2": true, + "Log2E": true, + "Logb": true, + "Max": true, + "MaxFloat32": true, + "MaxFloat64": true, + "MaxInt16": true, + "MaxInt32": true, + "MaxInt64": true, + "MaxInt8": true, + "MaxUint16": true, + "MaxUint32": true, + "MaxUint64": true, + "MaxUint8": true, + "Min": true, + "MinInt16": true, + "MinInt32": true, + "MinInt64": true, + "MinInt8": true, + "Mod": true, + "Modf": true, + "NaN": true, + "Nextafter": true, + "Nextafter32": true, + "Phi": true, + "Pi": true, + "Pow": true, + "Pow10": true, + "Remainder": true, + "Round": true, + "RoundToEven": true, + "Signbit": true, + "Sin": true, + "Sincos": true, + "Sinh": true, + "SmallestNonzeroFloat32": true, + "SmallestNonzeroFloat64": true, + "Sqrt": true, + "Sqrt2": true, + "SqrtE": true, + "SqrtPhi": true, + "SqrtPi": true, + "Tan": true, + "Tanh": true, + "Trunc": true, + "Y0": true, + "Y1": true, + "Yn": true, + }, + "math/big": map[string]bool{ + "Above": true, + "Accuracy": true, + "AwayFromZero": true, + "Below": true, + "ErrNaN": true, + "Exact": true, + "Float": true, + "Int": true, + "Jacobi": true, + "MaxBase": true, + "MaxExp": true, + "MaxPrec": true, + "MinExp": true, + "NewFloat": true, + "NewInt": true, + "NewRat": true, + "ParseFloat": true, + "Rat": true, + "RoundingMode": true, + "ToNearestAway": true, + "ToNearestEven": true, + "ToNegativeInf": true, + "ToPositiveInf": true, + "ToZero": true, + "Word": true, + }, + "math/bits": map[string]bool{ + "Add": true, + "Add32": true, + "Add64": true, + "Div": true, + "Div32": true, + "Div64": true, + "LeadingZeros": true, + "LeadingZeros16": true, + "LeadingZeros32": true, + "LeadingZeros64": true, + "LeadingZeros8": true, + "Len": true, + "Len16": true, + "Len32": true, + "Len64": true, + "Len8": true, + "Mul": true, + "Mul32": true, + "Mul64": true, + "OnesCount": true, + "OnesCount16": true, + "OnesCount32": true, + "OnesCount64": true, + "OnesCount8": true, + "Reverse": true, + "Reverse16": true, + "Reverse32": true, + "Reverse64": true, + "Reverse8": true, + "ReverseBytes": true, + "ReverseBytes16": true, + "ReverseBytes32": true, + "ReverseBytes64": true, + "RotateLeft": true, + "RotateLeft16": true, + "RotateLeft32": true, + "RotateLeft64": true, + "RotateLeft8": true, + "Sub": true, + "Sub32": true, + "Sub64": true, + "TrailingZeros": true, + "TrailingZeros16": true, + "TrailingZeros32": true, + "TrailingZeros64": true, + "TrailingZeros8": true, + "UintSize": true, + }, + "math/cmplx": map[string]bool{ + "Abs": true, + "Acos": true, + "Acosh": true, + "Asin": true, + "Asinh": true, + "Atan": true, + "Atanh": true, + "Conj": true, + "Cos": true, + "Cosh": true, + "Cot": true, + "Exp": true, + "Inf": true, + "IsInf": true, + "IsNaN": true, + "Log": true, + "Log10": true, + "NaN": true, + "Phase": true, + "Polar": true, + "Pow": true, + "Rect": true, + "Sin": true, + "Sinh": true, + "Sqrt": true, + "Tan": true, + "Tanh": true, + }, + "math/rand": map[string]bool{ + "ExpFloat64": true, + "Float32": true, + "Float64": true, + "Int": true, + "Int31": true, + "Int31n": true, + "Int63": true, + "Int63n": true, + "Intn": true, + "New": true, + "NewSource": true, + "NewZipf": true, + "NormFloat64": true, + "Perm": true, + "Rand": true, + "Read": true, + "Seed": true, + "Shuffle": true, + "Source": true, + "Source64": true, + "Uint32": true, + "Uint64": true, + "Zipf": true, + }, + "mime": map[string]bool{ + "AddExtensionType": true, + "BEncoding": true, + "ErrInvalidMediaParameter": true, + "ExtensionsByType": true, + "FormatMediaType": true, + "ParseMediaType": true, + "QEncoding": true, + "TypeByExtension": true, + "WordDecoder": true, + "WordEncoder": true, + }, + "mime/multipart": map[string]bool{ + "ErrMessageTooLarge": true, + "File": true, + "FileHeader": true, + "Form": true, + "NewReader": true, + "NewWriter": true, + "Part": true, + "Reader": true, + "Writer": true, + }, + "mime/quotedprintable": map[string]bool{ + "NewReader": true, + "NewWriter": true, + "Reader": true, + "Writer": true, + }, + "net": map[string]bool{ + "Addr": true, + "AddrError": true, + "Buffers": true, + "CIDRMask": true, + "Conn": true, + "DNSConfigError": true, + "DNSError": true, + "DefaultResolver": true, + "Dial": true, + "DialIP": true, + "DialTCP": true, + "DialTimeout": true, + "DialUDP": true, + "DialUnix": true, + "Dialer": true, + "ErrWriteToConnected": true, + "Error": true, + "FileConn": true, + "FileListener": true, + "FilePacketConn": true, + "FlagBroadcast": true, + "FlagLoopback": true, + "FlagMulticast": true, + "FlagPointToPoint": true, + "FlagUp": true, + "Flags": true, + "HardwareAddr": true, + "IP": true, + "IPAddr": true, + "IPConn": true, + "IPMask": true, + "IPNet": true, + "IPv4": true, + "IPv4Mask": true, + "IPv4allrouter": true, + "IPv4allsys": true, + "IPv4bcast": true, + "IPv4len": true, + "IPv4zero": true, + "IPv6interfacelocalallnodes": true, + "IPv6len": true, + "IPv6linklocalallnodes": true, + "IPv6linklocalallrouters": true, + "IPv6loopback": true, + "IPv6unspecified": true, + "IPv6zero": true, + "Interface": true, + "InterfaceAddrs": true, + "InterfaceByIndex": true, + "InterfaceByName": true, + "Interfaces": true, + "InvalidAddrError": true, + "JoinHostPort": true, + "Listen": true, + "ListenConfig": true, + "ListenIP": true, + "ListenMulticastUDP": true, + "ListenPacket": true, + "ListenTCP": true, + "ListenUDP": true, + "ListenUnix": true, + "ListenUnixgram": true, + "Listener": true, + "LookupAddr": true, + "LookupCNAME": true, + "LookupHost": true, + "LookupIP": true, + "LookupMX": true, + "LookupNS": true, + "LookupPort": true, + "LookupSRV": true, + "LookupTXT": true, + "MX": true, + "NS": true, + "OpError": true, + "PacketConn": true, + "ParseCIDR": true, + "ParseError": true, + "ParseIP": true, + "ParseMAC": true, + "Pipe": true, + "ResolveIPAddr": true, + "ResolveTCPAddr": true, + "ResolveUDPAddr": true, + "ResolveUnixAddr": true, + "Resolver": true, + "SRV": true, + "SplitHostPort": true, + "TCPAddr": true, + "TCPConn": true, + "TCPListener": true, + "UDPAddr": true, + "UDPConn": true, + "UnixAddr": true, + "UnixConn": true, + "UnixListener": true, + "UnknownNetworkError": true, + }, + "net/http": map[string]bool{ + "CanonicalHeaderKey": true, + "Client": true, + "CloseNotifier": true, + "ConnState": true, + "Cookie": true, + "CookieJar": true, + "DefaultClient": true, + "DefaultMaxHeaderBytes": true, + "DefaultMaxIdleConnsPerHost": true, + "DefaultServeMux": true, + "DefaultTransport": true, + "DetectContentType": true, + "Dir": true, + "ErrAbortHandler": true, + "ErrBodyNotAllowed": true, + "ErrBodyReadAfterClose": true, + "ErrContentLength": true, + "ErrHandlerTimeout": true, + "ErrHeaderTooLong": true, + "ErrHijacked": true, + "ErrLineTooLong": true, + "ErrMissingBoundary": true, + "ErrMissingContentLength": true, + "ErrMissingFile": true, + "ErrNoCookie": true, + "ErrNoLocation": true, + "ErrNotMultipart": true, + "ErrNotSupported": true, + "ErrServerClosed": true, + "ErrShortBody": true, + "ErrSkipAltProtocol": true, + "ErrUnexpectedTrailer": true, + "ErrUseLastResponse": true, + "ErrWriteAfterFlush": true, + "Error": true, + "File": true, + "FileServer": true, + "FileSystem": true, + "Flusher": true, + "Get": true, + "Handle": true, + "HandleFunc": true, + "Handler": true, + "HandlerFunc": true, + "Head": true, + "Header": true, + "Hijacker": true, + "ListenAndServe": true, + "ListenAndServeTLS": true, + "LocalAddrContextKey": true, + "MaxBytesReader": true, + "MethodConnect": true, + "MethodDelete": true, + "MethodGet": true, + "MethodHead": true, + "MethodOptions": true, + "MethodPatch": true, + "MethodPost": true, + "MethodPut": true, + "MethodTrace": true, + "NewFileTransport": true, + "NewRequest": true, + "NewServeMux": true, + "NoBody": true, + "NotFound": true, + "NotFoundHandler": true, + "ParseHTTPVersion": true, + "ParseTime": true, + "Post": true, + "PostForm": true, + "ProtocolError": true, + "ProxyFromEnvironment": true, + "ProxyURL": true, + "PushOptions": true, + "Pusher": true, + "ReadRequest": true, + "ReadResponse": true, + "Redirect": true, + "RedirectHandler": true, + "Request": true, + "Response": true, + "ResponseWriter": true, + "RoundTripper": true, + "SameSite": true, + "SameSiteDefaultMode": true, + "SameSiteLaxMode": true, + "SameSiteStrictMode": true, + "Serve": true, + "ServeContent": true, + "ServeFile": true, + "ServeMux": true, + "ServeTLS": true, + "Server": true, + "ServerContextKey": true, + "SetCookie": true, + "StateActive": true, + "StateClosed": true, + "StateHijacked": true, + "StateIdle": true, + "StateNew": true, + "StatusAccepted": true, + "StatusAlreadyReported": true, + "StatusBadGateway": true, + "StatusBadRequest": true, + "StatusConflict": true, + "StatusContinue": true, + "StatusCreated": true, + "StatusExpectationFailed": true, + "StatusFailedDependency": true, + "StatusForbidden": true, + "StatusFound": true, + "StatusGatewayTimeout": true, + "StatusGone": true, + "StatusHTTPVersionNotSupported": true, + "StatusIMUsed": true, + "StatusInsufficientStorage": true, + "StatusInternalServerError": true, + "StatusLengthRequired": true, + "StatusLocked": true, + "StatusLoopDetected": true, + "StatusMethodNotAllowed": true, + "StatusMisdirectedRequest": true, + "StatusMovedPermanently": true, + "StatusMultiStatus": true, + "StatusMultipleChoices": true, + "StatusNetworkAuthenticationRequired": true, + "StatusNoContent": true, + "StatusNonAuthoritativeInfo": true, + "StatusNotAcceptable": true, + "StatusNotExtended": true, + "StatusNotFound": true, + "StatusNotImplemented": true, + "StatusNotModified": true, + "StatusOK": true, + "StatusPartialContent": true, + "StatusPaymentRequired": true, + "StatusPermanentRedirect": true, + "StatusPreconditionFailed": true, + "StatusPreconditionRequired": true, + "StatusProcessing": true, + "StatusProxyAuthRequired": true, + "StatusRequestEntityTooLarge": true, + "StatusRequestHeaderFieldsTooLarge": true, + "StatusRequestTimeout": true, + "StatusRequestURITooLong": true, + "StatusRequestedRangeNotSatisfiable": true, + "StatusResetContent": true, + "StatusSeeOther": true, + "StatusServiceUnavailable": true, + "StatusSwitchingProtocols": true, + "StatusTeapot": true, + "StatusTemporaryRedirect": true, + "StatusText": true, + "StatusTooEarly": true, + "StatusTooManyRequests": true, + "StatusUnauthorized": true, + "StatusUnavailableForLegalReasons": true, + "StatusUnprocessableEntity": true, + "StatusUnsupportedMediaType": true, + "StatusUpgradeRequired": true, + "StatusUseProxy": true, + "StatusVariantAlsoNegotiates": true, + "StripPrefix": true, + "TimeFormat": true, + "TimeoutHandler": true, + "TrailerPrefix": true, + "Transport": true, + }, + "net/http/cgi": map[string]bool{ + "Handler": true, + "Request": true, + "RequestFromMap": true, + "Serve": true, + }, + "net/http/cookiejar": map[string]bool{ + "Jar": true, + "New": true, + "Options": true, + "PublicSuffixList": true, + }, + "net/http/fcgi": map[string]bool{ + "ErrConnClosed": true, + "ErrRequestAborted": true, + "ProcessEnv": true, + "Serve": true, + }, + "net/http/httptest": map[string]bool{ + "DefaultRemoteAddr": true, + "NewRecorder": true, + "NewRequest": true, + "NewServer": true, + "NewTLSServer": true, + "NewUnstartedServer": true, + "ResponseRecorder": true, + "Server": true, + }, + "net/http/httptrace": map[string]bool{ + "ClientTrace": true, + "ContextClientTrace": true, + "DNSDoneInfo": true, + "DNSStartInfo": true, + "GotConnInfo": true, + "WithClientTrace": true, + "WroteRequestInfo": true, + }, + "net/http/httputil": map[string]bool{ + "BufferPool": true, + "ClientConn": true, + "DumpRequest": true, + "DumpRequestOut": true, + "DumpResponse": true, + "ErrClosed": true, + "ErrLineTooLong": true, + "ErrPersistEOF": true, + "ErrPipeline": true, + "NewChunkedReader": true, + "NewChunkedWriter": true, + "NewClientConn": true, + "NewProxyClientConn": true, + "NewServerConn": true, + "NewSingleHostReverseProxy": true, + "ReverseProxy": true, + "ServerConn": true, + }, + "net/http/pprof": map[string]bool{ + "Cmdline": true, + "Handler": true, + "Index": true, + "Profile": true, + "Symbol": true, + "Trace": true, + }, + "net/mail": map[string]bool{ + "Address": true, + "AddressParser": true, + "ErrHeaderNotPresent": true, + "Header": true, + "Message": true, + "ParseAddress": true, + "ParseAddressList": true, + "ParseDate": true, + "ReadMessage": true, + }, + "net/rpc": map[string]bool{ + "Accept": true, + "Call": true, + "Client": true, + "ClientCodec": true, + "DefaultDebugPath": true, + "DefaultRPCPath": true, + "DefaultServer": true, + "Dial": true, + "DialHTTP": true, + "DialHTTPPath": true, + "ErrShutdown": true, + "HandleHTTP": true, + "NewClient": true, + "NewClientWithCodec": true, + "NewServer": true, + "Register": true, + "RegisterName": true, + "Request": true, + "Response": true, + "ServeCodec": true, + "ServeConn": true, + "ServeRequest": true, + "Server": true, + "ServerCodec": true, + "ServerError": true, + }, + "net/rpc/jsonrpc": map[string]bool{ + "Dial": true, + "NewClient": true, + "NewClientCodec": true, + "NewServerCodec": true, + "ServeConn": true, + }, + "net/smtp": map[string]bool{ + "Auth": true, + "CRAMMD5Auth": true, + "Client": true, + "Dial": true, + "NewClient": true, + "PlainAuth": true, + "SendMail": true, + "ServerInfo": true, + }, + "net/textproto": map[string]bool{ + "CanonicalMIMEHeaderKey": true, + "Conn": true, + "Dial": true, + "Error": true, + "MIMEHeader": true, + "NewConn": true, + "NewReader": true, + "NewWriter": true, + "Pipeline": true, + "ProtocolError": true, + "Reader": true, + "TrimBytes": true, + "TrimString": true, + "Writer": true, + }, + "net/url": map[string]bool{ + "Error": true, + "EscapeError": true, + "InvalidHostError": true, + "Parse": true, + "ParseQuery": true, + "ParseRequestURI": true, + "PathEscape": true, + "PathUnescape": true, + "QueryEscape": true, + "QueryUnescape": true, + "URL": true, + "User": true, + "UserPassword": true, + "Userinfo": true, + "Values": true, + }, + "os": map[string]bool{ + "Args": true, + "Chdir": true, + "Chmod": true, + "Chown": true, + "Chtimes": true, + "Clearenv": true, + "Create": true, + "DevNull": true, + "Environ": true, + "ErrClosed": true, + "ErrExist": true, + "ErrInvalid": true, + "ErrNoDeadline": true, + "ErrNotExist": true, + "ErrPermission": true, + "Executable": true, + "Exit": true, + "Expand": true, + "ExpandEnv": true, + "File": true, + "FileInfo": true, + "FileMode": true, + "FindProcess": true, + "Getegid": true, + "Getenv": true, + "Geteuid": true, + "Getgid": true, + "Getgroups": true, + "Getpagesize": true, + "Getpid": true, + "Getppid": true, + "Getuid": true, + "Getwd": true, + "Hostname": true, + "Interrupt": true, + "IsExist": true, + "IsNotExist": true, + "IsPathSeparator": true, + "IsPermission": true, + "IsTimeout": true, + "Kill": true, + "Lchown": true, + "Link": true, + "LinkError": true, + "LookupEnv": true, + "Lstat": true, + "Mkdir": true, + "MkdirAll": true, + "ModeAppend": true, + "ModeCharDevice": true, + "ModeDevice": true, + "ModeDir": true, + "ModeExclusive": true, + "ModeIrregular": true, + "ModeNamedPipe": true, + "ModePerm": true, + "ModeSetgid": true, + "ModeSetuid": true, + "ModeSocket": true, + "ModeSticky": true, + "ModeSymlink": true, + "ModeTemporary": true, + "ModeType": true, + "NewFile": true, + "NewSyscallError": true, + "O_APPEND": true, + "O_CREATE": true, + "O_EXCL": true, + "O_RDONLY": true, + "O_RDWR": true, + "O_SYNC": true, + "O_TRUNC": true, + "O_WRONLY": true, + "Open": true, + "OpenFile": true, + "PathError": true, + "PathListSeparator": true, + "PathSeparator": true, + "Pipe": true, + "ProcAttr": true, + "Process": true, + "ProcessState": true, + "Readlink": true, + "Remove": true, + "RemoveAll": true, + "Rename": true, + "SEEK_CUR": true, + "SEEK_END": true, + "SEEK_SET": true, + "SameFile": true, + "Setenv": true, + "Signal": true, + "StartProcess": true, + "Stat": true, + "Stderr": true, + "Stdin": true, + "Stdout": true, + "Symlink": true, + "SyscallError": true, + "TempDir": true, + "Truncate": true, + "Unsetenv": true, + "UserCacheDir": true, + "UserHomeDir": true, + }, + "os/exec": map[string]bool{ + "Cmd": true, + "Command": true, + "CommandContext": true, + "ErrNotFound": true, + "Error": true, + "ExitError": true, + "LookPath": true, + }, + "os/signal": map[string]bool{ + "Ignore": true, + "Ignored": true, + "Notify": true, + "Reset": true, + "Stop": true, + }, + "os/user": map[string]bool{ + "Current": true, + "Group": true, + "Lookup": true, + "LookupGroup": true, + "LookupGroupId": true, + "LookupId": true, + "UnknownGroupError": true, + "UnknownGroupIdError": true, + "UnknownUserError": true, + "UnknownUserIdError": true, + "User": true, + }, + "path": map[string]bool{ + "Base": true, + "Clean": true, + "Dir": true, + "ErrBadPattern": true, + "Ext": true, + "IsAbs": true, + "Join": true, + "Match": true, + "Split": true, + }, + "path/filepath": map[string]bool{ + "Abs": true, + "Base": true, + "Clean": true, + "Dir": true, + "ErrBadPattern": true, + "EvalSymlinks": true, + "Ext": true, + "FromSlash": true, + "Glob": true, + "HasPrefix": true, + "IsAbs": true, + "Join": true, + "ListSeparator": true, + "Match": true, + "Rel": true, + "Separator": true, + "SkipDir": true, + "Split": true, + "SplitList": true, + "ToSlash": true, + "VolumeName": true, + "Walk": true, + "WalkFunc": true, + }, + "plugin": map[string]bool{ + "Open": true, + "Plugin": true, + "Symbol": true, + }, + "reflect": map[string]bool{ + "Append": true, + "AppendSlice": true, + "Array": true, + "ArrayOf": true, + "Bool": true, + "BothDir": true, + "Chan": true, + "ChanDir": true, + "ChanOf": true, + "Complex128": true, + "Complex64": true, + "Copy": true, + "DeepEqual": true, + "Float32": true, + "Float64": true, + "Func": true, + "FuncOf": true, + "Indirect": true, + "Int": true, + "Int16": true, + "Int32": true, + "Int64": true, + "Int8": true, + "Interface": true, + "Invalid": true, + "Kind": true, + "MakeChan": true, + "MakeFunc": true, + "MakeMap": true, + "MakeMapWithSize": true, + "MakeSlice": true, + "Map": true, + "MapIter": true, + "MapOf": true, + "Method": true, + "New": true, + "NewAt": true, + "Ptr": true, + "PtrTo": true, + "RecvDir": true, + "Select": true, + "SelectCase": true, + "SelectDefault": true, + "SelectDir": true, + "SelectRecv": true, + "SelectSend": true, + "SendDir": true, + "Slice": true, + "SliceHeader": true, + "SliceOf": true, + "String": true, + "StringHeader": true, + "Struct": true, + "StructField": true, + "StructOf": true, + "StructTag": true, + "Swapper": true, + "TypeOf": true, + "Uint": true, + "Uint16": true, + "Uint32": true, + "Uint64": true, + "Uint8": true, + "Uintptr": true, + "UnsafePointer": true, + "Value": true, + "ValueError": true, + "ValueOf": true, + "Zero": true, + }, + "regexp": map[string]bool{ + "Compile": true, + "CompilePOSIX": true, + "Match": true, + "MatchReader": true, + "MatchString": true, + "MustCompile": true, + "MustCompilePOSIX": true, + "QuoteMeta": true, + "Regexp": true, + }, + "regexp/syntax": map[string]bool{ + "ClassNL": true, + "Compile": true, + "DotNL": true, + "EmptyBeginLine": true, + "EmptyBeginText": true, + "EmptyEndLine": true, + "EmptyEndText": true, + "EmptyNoWordBoundary": true, + "EmptyOp": true, + "EmptyOpContext": true, + "EmptyWordBoundary": true, + "ErrInternalError": true, + "ErrInvalidCharClass": true, + "ErrInvalidCharRange": true, + "ErrInvalidEscape": true, + "ErrInvalidNamedCapture": true, + "ErrInvalidPerlOp": true, + "ErrInvalidRepeatOp": true, + "ErrInvalidRepeatSize": true, + "ErrInvalidUTF8": true, + "ErrMissingBracket": true, + "ErrMissingParen": true, + "ErrMissingRepeatArgument": true, + "ErrTrailingBackslash": true, + "ErrUnexpectedParen": true, + "Error": true, + "ErrorCode": true, + "Flags": true, + "FoldCase": true, + "Inst": true, + "InstAlt": true, + "InstAltMatch": true, + "InstCapture": true, + "InstEmptyWidth": true, + "InstFail": true, + "InstMatch": true, + "InstNop": true, + "InstOp": true, + "InstRune": true, + "InstRune1": true, + "InstRuneAny": true, + "InstRuneAnyNotNL": true, + "IsWordChar": true, + "Literal": true, + "MatchNL": true, + "NonGreedy": true, + "OneLine": true, + "Op": true, + "OpAlternate": true, + "OpAnyChar": true, + "OpAnyCharNotNL": true, + "OpBeginLine": true, + "OpBeginText": true, + "OpCapture": true, + "OpCharClass": true, + "OpConcat": true, + "OpEmptyMatch": true, + "OpEndLine": true, + "OpEndText": true, + "OpLiteral": true, + "OpNoMatch": true, + "OpNoWordBoundary": true, + "OpPlus": true, + "OpQuest": true, + "OpRepeat": true, + "OpStar": true, + "OpWordBoundary": true, + "POSIX": true, + "Parse": true, + "Perl": true, + "PerlX": true, + "Prog": true, + "Regexp": true, + "Simple": true, + "UnicodeGroups": true, + "WasDollar": true, + }, + "runtime": map[string]bool{ + "BlockProfile": true, + "BlockProfileRecord": true, + "Breakpoint": true, + "CPUProfile": true, + "Caller": true, + "Callers": true, + "CallersFrames": true, + "Compiler": true, + "Error": true, + "Frame": true, + "Frames": true, + "Func": true, + "FuncForPC": true, + "GC": true, + "GOARCH": true, + "GOMAXPROCS": true, + "GOOS": true, + "GOROOT": true, + "Goexit": true, + "GoroutineProfile": true, + "Gosched": true, + "KeepAlive": true, + "LockOSThread": true, + "MemProfile": true, + "MemProfileRate": true, + "MemProfileRecord": true, + "MemStats": true, + "MutexProfile": true, + "NumCPU": true, + "NumCgoCall": true, + "NumGoroutine": true, + "ReadMemStats": true, + "ReadTrace": true, + "SetBlockProfileRate": true, + "SetCPUProfileRate": true, + "SetCgoTraceback": true, + "SetFinalizer": true, + "SetMutexProfileFraction": true, + "Stack": true, + "StackRecord": true, + "StartTrace": true, + "StopTrace": true, + "ThreadCreateProfile": true, + "TypeAssertionError": true, + "UnlockOSThread": true, + "Version": true, + }, + "runtime/debug": map[string]bool{ + "BuildInfo": true, + "FreeOSMemory": true, + "GCStats": true, + "Module": true, + "PrintStack": true, + "ReadBuildInfo": true, + "ReadGCStats": true, + "SetGCPercent": true, + "SetMaxStack": true, + "SetMaxThreads": true, + "SetPanicOnFault": true, + "SetTraceback": true, + "Stack": true, + "WriteHeapDump": true, + }, + "runtime/pprof": map[string]bool{ + "Do": true, + "ForLabels": true, + "Label": true, + "LabelSet": true, + "Labels": true, + "Lookup": true, + "NewProfile": true, + "Profile": true, + "Profiles": true, + "SetGoroutineLabels": true, + "StartCPUProfile": true, + "StopCPUProfile": true, + "WithLabels": true, + "WriteHeapProfile": true, + }, + "runtime/trace": map[string]bool{ + "IsEnabled": true, + "Log": true, + "Logf": true, + "NewTask": true, + "Region": true, + "Start": true, + "StartRegion": true, + "Stop": true, + "Task": true, + "WithRegion": true, + }, + "sort": map[string]bool{ + "Float64Slice": true, + "Float64s": true, + "Float64sAreSorted": true, + "IntSlice": true, + "Interface": true, + "Ints": true, + "IntsAreSorted": true, + "IsSorted": true, + "Reverse": true, + "Search": true, + "SearchFloat64s": true, + "SearchInts": true, + "SearchStrings": true, + "Slice": true, + "SliceIsSorted": true, + "SliceStable": true, + "Sort": true, + "Stable": true, + "StringSlice": true, + "Strings": true, + "StringsAreSorted": true, + }, + "strconv": map[string]bool{ + "AppendBool": true, + "AppendFloat": true, + "AppendInt": true, + "AppendQuote": true, + "AppendQuoteRune": true, + "AppendQuoteRuneToASCII": true, + "AppendQuoteRuneToGraphic": true, + "AppendQuoteToASCII": true, + "AppendQuoteToGraphic": true, + "AppendUint": true, + "Atoi": true, + "CanBackquote": true, + "ErrRange": true, + "ErrSyntax": true, + "FormatBool": true, + "FormatFloat": true, + "FormatInt": true, + "FormatUint": true, + "IntSize": true, + "IsGraphic": true, + "IsPrint": true, + "Itoa": true, + "NumError": true, + "ParseBool": true, + "ParseFloat": true, + "ParseInt": true, + "ParseUint": true, + "Quote": true, + "QuoteRune": true, + "QuoteRuneToASCII": true, + "QuoteRuneToGraphic": true, + "QuoteToASCII": true, + "QuoteToGraphic": true, + "Unquote": true, + "UnquoteChar": true, + }, + "strings": map[string]bool{ + "Builder": true, + "Compare": true, + "Contains": true, + "ContainsAny": true, + "ContainsRune": true, + "Count": true, + "EqualFold": true, + "Fields": true, + "FieldsFunc": true, + "HasPrefix": true, + "HasSuffix": true, + "Index": true, + "IndexAny": true, + "IndexByte": true, + "IndexFunc": true, + "IndexRune": true, + "Join": true, + "LastIndex": true, + "LastIndexAny": true, + "LastIndexByte": true, + "LastIndexFunc": true, + "Map": true, + "NewReader": true, + "NewReplacer": true, + "Reader": true, + "Repeat": true, + "Replace": true, + "ReplaceAll": true, + "Replacer": true, + "Split": true, + "SplitAfter": true, + "SplitAfterN": true, + "SplitN": true, + "Title": true, + "ToLower": true, + "ToLowerSpecial": true, + "ToTitle": true, + "ToTitleSpecial": true, + "ToUpper": true, + "ToUpperSpecial": true, + "Trim": true, + "TrimFunc": true, + "TrimLeft": true, + "TrimLeftFunc": true, + "TrimPrefix": true, + "TrimRight": true, + "TrimRightFunc": true, + "TrimSpace": true, + "TrimSuffix": true, + }, + "sync": map[string]bool{ + "Cond": true, + "Locker": true, + "Map": true, + "Mutex": true, + "NewCond": true, + "Once": true, + "Pool": true, + "RWMutex": true, + "WaitGroup": true, + }, + "sync/atomic": map[string]bool{ + "AddInt32": true, + "AddInt64": true, + "AddUint32": true, + "AddUint64": true, + "AddUintptr": true, + "CompareAndSwapInt32": true, + "CompareAndSwapInt64": true, + "CompareAndSwapPointer": true, + "CompareAndSwapUint32": true, + "CompareAndSwapUint64": true, + "CompareAndSwapUintptr": true, + "LoadInt32": true, + "LoadInt64": true, + "LoadPointer": true, + "LoadUint32": true, + "LoadUint64": true, + "LoadUintptr": true, + "StoreInt32": true, + "StoreInt64": true, + "StorePointer": true, + "StoreUint32": true, + "StoreUint64": true, + "StoreUintptr": true, + "SwapInt32": true, + "SwapInt64": true, + "SwapPointer": true, + "SwapUint32": true, + "SwapUint64": true, + "SwapUintptr": true, + "Value": true, + }, + "syscall": map[string]bool{ + "AF_ALG": true, + "AF_APPLETALK": true, + "AF_ARP": true, + "AF_ASH": true, + "AF_ATM": true, + "AF_ATMPVC": true, + "AF_ATMSVC": true, + "AF_AX25": true, + "AF_BLUETOOTH": true, + "AF_BRIDGE": true, + "AF_CAIF": true, + "AF_CAN": true, + "AF_CCITT": true, + "AF_CHAOS": true, + "AF_CNT": true, + "AF_COIP": true, + "AF_DATAKIT": true, + "AF_DECnet": true, + "AF_DLI": true, + "AF_E164": true, + "AF_ECMA": true, + "AF_ECONET": true, + "AF_ENCAP": true, + "AF_FILE": true, + "AF_HYLINK": true, + "AF_IEEE80211": true, + "AF_IEEE802154": true, + "AF_IMPLINK": true, + "AF_INET": true, + "AF_INET6": true, + "AF_INET6_SDP": true, + "AF_INET_SDP": true, + "AF_IPX": true, + "AF_IRDA": true, + "AF_ISDN": true, + "AF_ISO": true, + "AF_IUCV": true, + "AF_KEY": true, + "AF_LAT": true, + "AF_LINK": true, + "AF_LLC": true, + "AF_LOCAL": true, + "AF_MAX": true, + "AF_MPLS": true, + "AF_NATM": true, + "AF_NDRV": true, + "AF_NETBEUI": true, + "AF_NETBIOS": true, + "AF_NETGRAPH": true, + "AF_NETLINK": true, + "AF_NETROM": true, + "AF_NS": true, + "AF_OROUTE": true, + "AF_OSI": true, + "AF_PACKET": true, + "AF_PHONET": true, + "AF_PPP": true, + "AF_PPPOX": true, + "AF_PUP": true, + "AF_RDS": true, + "AF_RESERVED_36": true, + "AF_ROSE": true, + "AF_ROUTE": true, + "AF_RXRPC": true, + "AF_SCLUSTER": true, + "AF_SECURITY": true, + "AF_SIP": true, + "AF_SLOW": true, + "AF_SNA": true, + "AF_SYSTEM": true, + "AF_TIPC": true, + "AF_UNIX": true, + "AF_UNSPEC": true, + "AF_VENDOR00": true, + "AF_VENDOR01": true, + "AF_VENDOR02": true, + "AF_VENDOR03": true, + "AF_VENDOR04": true, + "AF_VENDOR05": true, + "AF_VENDOR06": true, + "AF_VENDOR07": true, + "AF_VENDOR08": true, + "AF_VENDOR09": true, + "AF_VENDOR10": true, + "AF_VENDOR11": true, + "AF_VENDOR12": true, + "AF_VENDOR13": true, + "AF_VENDOR14": true, + "AF_VENDOR15": true, + "AF_VENDOR16": true, + "AF_VENDOR17": true, + "AF_VENDOR18": true, + "AF_VENDOR19": true, + "AF_VENDOR20": true, + "AF_VENDOR21": true, + "AF_VENDOR22": true, + "AF_VENDOR23": true, + "AF_VENDOR24": true, + "AF_VENDOR25": true, + "AF_VENDOR26": true, + "AF_VENDOR27": true, + "AF_VENDOR28": true, + "AF_VENDOR29": true, + "AF_VENDOR30": true, + "AF_VENDOR31": true, + "AF_VENDOR32": true, + "AF_VENDOR33": true, + "AF_VENDOR34": true, + "AF_VENDOR35": true, + "AF_VENDOR36": true, + "AF_VENDOR37": true, + "AF_VENDOR38": true, + "AF_VENDOR39": true, + "AF_VENDOR40": true, + "AF_VENDOR41": true, + "AF_VENDOR42": true, + "AF_VENDOR43": true, + "AF_VENDOR44": true, + "AF_VENDOR45": true, + "AF_VENDOR46": true, + "AF_VENDOR47": true, + "AF_WANPIPE": true, + "AF_X25": true, + "AI_CANONNAME": true, + "AI_NUMERICHOST": true, + "AI_PASSIVE": true, + "APPLICATION_ERROR": true, + "ARPHRD_ADAPT": true, + "ARPHRD_APPLETLK": true, + "ARPHRD_ARCNET": true, + "ARPHRD_ASH": true, + "ARPHRD_ATM": true, + "ARPHRD_AX25": true, + "ARPHRD_BIF": true, + "ARPHRD_CHAOS": true, + "ARPHRD_CISCO": true, + "ARPHRD_CSLIP": true, + "ARPHRD_CSLIP6": true, + "ARPHRD_DDCMP": true, + "ARPHRD_DLCI": true, + "ARPHRD_ECONET": true, + "ARPHRD_EETHER": true, + "ARPHRD_ETHER": true, + "ARPHRD_EUI64": true, + "ARPHRD_FCAL": true, + "ARPHRD_FCFABRIC": true, + "ARPHRD_FCPL": true, + "ARPHRD_FCPP": true, + "ARPHRD_FDDI": true, + "ARPHRD_FRAD": true, + "ARPHRD_FRELAY": true, + "ARPHRD_HDLC": true, + "ARPHRD_HIPPI": true, + "ARPHRD_HWX25": true, + "ARPHRD_IEEE1394": true, + "ARPHRD_IEEE802": true, + "ARPHRD_IEEE80211": true, + "ARPHRD_IEEE80211_PRISM": true, + "ARPHRD_IEEE80211_RADIOTAP": true, + "ARPHRD_IEEE802154": true, + "ARPHRD_IEEE802154_PHY": true, + "ARPHRD_IEEE802_TR": true, + "ARPHRD_INFINIBAND": true, + "ARPHRD_IPDDP": true, + "ARPHRD_IPGRE": true, + "ARPHRD_IRDA": true, + "ARPHRD_LAPB": true, + "ARPHRD_LOCALTLK": true, + "ARPHRD_LOOPBACK": true, + "ARPHRD_METRICOM": true, + "ARPHRD_NETROM": true, + "ARPHRD_NONE": true, + "ARPHRD_PIMREG": true, + "ARPHRD_PPP": true, + "ARPHRD_PRONET": true, + "ARPHRD_RAWHDLC": true, + "ARPHRD_ROSE": true, + "ARPHRD_RSRVD": true, + "ARPHRD_SIT": true, + "ARPHRD_SKIP": true, + "ARPHRD_SLIP": true, + "ARPHRD_SLIP6": true, + "ARPHRD_STRIP": true, + "ARPHRD_TUNNEL": true, + "ARPHRD_TUNNEL6": true, + "ARPHRD_VOID": true, + "ARPHRD_X25": true, + "AUTHTYPE_CLIENT": true, + "AUTHTYPE_SERVER": true, + "Accept": true, + "Accept4": true, + "AcceptEx": true, + "Access": true, + "Acct": true, + "AddrinfoW": true, + "Adjtime": true, + "Adjtimex": true, + "AttachLsf": true, + "B0": true, + "B1000000": true, + "B110": true, + "B115200": true, + "B1152000": true, + "B1200": true, + "B134": true, + "B14400": true, + "B150": true, + "B1500000": true, + "B1800": true, + "B19200": true, + "B200": true, + "B2000000": true, + "B230400": true, + "B2400": true, + "B2500000": true, + "B28800": true, + "B300": true, + "B3000000": true, + "B3500000": true, + "B38400": true, + "B4000000": true, + "B460800": true, + "B4800": true, + "B50": true, + "B500000": true, + "B57600": true, + "B576000": true, + "B600": true, + "B7200": true, + "B75": true, + "B76800": true, + "B921600": true, + "B9600": true, + "BASE_PROTOCOL": true, + "BIOCFEEDBACK": true, + "BIOCFLUSH": true, + "BIOCGBLEN": true, + "BIOCGDIRECTION": true, + "BIOCGDIRFILT": true, + "BIOCGDLT": true, + "BIOCGDLTLIST": true, + "BIOCGETBUFMODE": true, + "BIOCGETIF": true, + "BIOCGETZMAX": true, + "BIOCGFEEDBACK": true, + "BIOCGFILDROP": true, + "BIOCGHDRCMPLT": true, + "BIOCGRSIG": true, + "BIOCGRTIMEOUT": true, + "BIOCGSEESENT": true, + "BIOCGSTATS": true, + "BIOCGSTATSOLD": true, + "BIOCGTSTAMP": true, + "BIOCIMMEDIATE": true, + "BIOCLOCK": true, + "BIOCPROMISC": true, + "BIOCROTZBUF": true, + "BIOCSBLEN": true, + "BIOCSDIRECTION": true, + "BIOCSDIRFILT": true, + "BIOCSDLT": true, + "BIOCSETBUFMODE": true, + "BIOCSETF": true, + "BIOCSETFNR": true, + "BIOCSETIF": true, + "BIOCSETWF": true, + "BIOCSETZBUF": true, + "BIOCSFEEDBACK": true, + "BIOCSFILDROP": true, + "BIOCSHDRCMPLT": true, + "BIOCSRSIG": true, + "BIOCSRTIMEOUT": true, + "BIOCSSEESENT": true, + "BIOCSTCPF": true, + "BIOCSTSTAMP": true, + "BIOCSUDPF": true, + "BIOCVERSION": true, + "BPF_A": true, + "BPF_ABS": true, + "BPF_ADD": true, + "BPF_ALIGNMENT": true, + "BPF_ALIGNMENT32": true, + "BPF_ALU": true, + "BPF_AND": true, + "BPF_B": true, + "BPF_BUFMODE_BUFFER": true, + "BPF_BUFMODE_ZBUF": true, + "BPF_DFLTBUFSIZE": true, + "BPF_DIRECTION_IN": true, + "BPF_DIRECTION_OUT": true, + "BPF_DIV": true, + "BPF_H": true, + "BPF_IMM": true, + "BPF_IND": true, + "BPF_JA": true, + "BPF_JEQ": true, + "BPF_JGE": true, + "BPF_JGT": true, + "BPF_JMP": true, + "BPF_JSET": true, + "BPF_K": true, + "BPF_LD": true, + "BPF_LDX": true, + "BPF_LEN": true, + "BPF_LSH": true, + "BPF_MAJOR_VERSION": true, + "BPF_MAXBUFSIZE": true, + "BPF_MAXINSNS": true, + "BPF_MEM": true, + "BPF_MEMWORDS": true, + "BPF_MINBUFSIZE": true, + "BPF_MINOR_VERSION": true, + "BPF_MISC": true, + "BPF_MSH": true, + "BPF_MUL": true, + "BPF_NEG": true, + "BPF_OR": true, + "BPF_RELEASE": true, + "BPF_RET": true, + "BPF_RSH": true, + "BPF_ST": true, + "BPF_STX": true, + "BPF_SUB": true, + "BPF_TAX": true, + "BPF_TXA": true, + "BPF_T_BINTIME": true, + "BPF_T_BINTIME_FAST": true, + "BPF_T_BINTIME_MONOTONIC": true, + "BPF_T_BINTIME_MONOTONIC_FAST": true, + "BPF_T_FAST": true, + "BPF_T_FLAG_MASK": true, + "BPF_T_FORMAT_MASK": true, + "BPF_T_MICROTIME": true, + "BPF_T_MICROTIME_FAST": true, + "BPF_T_MICROTIME_MONOTONIC": true, + "BPF_T_MICROTIME_MONOTONIC_FAST": true, + "BPF_T_MONOTONIC": true, + "BPF_T_MONOTONIC_FAST": true, + "BPF_T_NANOTIME": true, + "BPF_T_NANOTIME_FAST": true, + "BPF_T_NANOTIME_MONOTONIC": true, + "BPF_T_NANOTIME_MONOTONIC_FAST": true, + "BPF_T_NONE": true, + "BPF_T_NORMAL": true, + "BPF_W": true, + "BPF_X": true, + "BRKINT": true, + "Bind": true, + "BindToDevice": true, + "BpfBuflen": true, + "BpfDatalink": true, + "BpfHdr": true, + "BpfHeadercmpl": true, + "BpfInsn": true, + "BpfInterface": true, + "BpfJump": true, + "BpfProgram": true, + "BpfStat": true, + "BpfStats": true, + "BpfStmt": true, + "BpfTimeout": true, + "BpfTimeval": true, + "BpfVersion": true, + "BpfZbuf": true, + "BpfZbufHeader": true, + "ByHandleFileInformation": true, + "BytePtrFromString": true, + "ByteSliceFromString": true, + "CCR0_FLUSH": true, + "CERT_CHAIN_POLICY_AUTHENTICODE": true, + "CERT_CHAIN_POLICY_AUTHENTICODE_TS": true, + "CERT_CHAIN_POLICY_BASE": true, + "CERT_CHAIN_POLICY_BASIC_CONSTRAINTS": true, + "CERT_CHAIN_POLICY_EV": true, + "CERT_CHAIN_POLICY_MICROSOFT_ROOT": true, + "CERT_CHAIN_POLICY_NT_AUTH": true, + "CERT_CHAIN_POLICY_SSL": true, + "CERT_E_CN_NO_MATCH": true, + "CERT_E_EXPIRED": true, + "CERT_E_PURPOSE": true, + "CERT_E_ROLE": true, + "CERT_E_UNTRUSTEDROOT": true, + "CERT_STORE_ADD_ALWAYS": true, + "CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG": true, + "CERT_STORE_PROV_MEMORY": true, + "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT": true, + "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT": true, + "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT": true, + "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT": true, + "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT": true, + "CERT_TRUST_INVALID_BASIC_CONSTRAINTS": true, + "CERT_TRUST_INVALID_EXTENSION": true, + "CERT_TRUST_INVALID_NAME_CONSTRAINTS": true, + "CERT_TRUST_INVALID_POLICY_CONSTRAINTS": true, + "CERT_TRUST_IS_CYCLIC": true, + "CERT_TRUST_IS_EXPLICIT_DISTRUST": true, + "CERT_TRUST_IS_NOT_SIGNATURE_VALID": true, + "CERT_TRUST_IS_NOT_TIME_VALID": true, + "CERT_TRUST_IS_NOT_VALID_FOR_USAGE": true, + "CERT_TRUST_IS_OFFLINE_REVOCATION": true, + "CERT_TRUST_IS_REVOKED": true, + "CERT_TRUST_IS_UNTRUSTED_ROOT": true, + "CERT_TRUST_NO_ERROR": true, + "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY": true, + "CERT_TRUST_REVOCATION_STATUS_UNKNOWN": true, + "CFLUSH": true, + "CLOCAL": true, + "CLONE_CHILD_CLEARTID": true, + "CLONE_CHILD_SETTID": true, + "CLONE_CSIGNAL": true, + "CLONE_DETACHED": true, + "CLONE_FILES": true, + "CLONE_FS": true, + "CLONE_IO": true, + "CLONE_NEWIPC": true, + "CLONE_NEWNET": true, + "CLONE_NEWNS": true, + "CLONE_NEWPID": true, + "CLONE_NEWUSER": true, + "CLONE_NEWUTS": true, + "CLONE_PARENT": true, + "CLONE_PARENT_SETTID": true, + "CLONE_PID": true, + "CLONE_PTRACE": true, + "CLONE_SETTLS": true, + "CLONE_SIGHAND": true, + "CLONE_SYSVSEM": true, + "CLONE_THREAD": true, + "CLONE_UNTRACED": true, + "CLONE_VFORK": true, + "CLONE_VM": true, + "CPUID_CFLUSH": true, + "CREAD": true, + "CREATE_ALWAYS": true, + "CREATE_NEW": true, + "CREATE_NEW_PROCESS_GROUP": true, + "CREATE_UNICODE_ENVIRONMENT": true, + "CRYPT_DEFAULT_CONTAINER_OPTIONAL": true, + "CRYPT_DELETEKEYSET": true, + "CRYPT_MACHINE_KEYSET": true, + "CRYPT_NEWKEYSET": true, + "CRYPT_SILENT": true, + "CRYPT_VERIFYCONTEXT": true, + "CS5": true, + "CS6": true, + "CS7": true, + "CS8": true, + "CSIZE": true, + "CSTART": true, + "CSTATUS": true, + "CSTOP": true, + "CSTOPB": true, + "CSUSP": true, + "CTL_MAXNAME": true, + "CTL_NET": true, + "CTL_QUERY": true, + "CTRL_BREAK_EVENT": true, + "CTRL_C_EVENT": true, + "CancelIo": true, + "CancelIoEx": true, + "CertAddCertificateContextToStore": true, + "CertChainContext": true, + "CertChainElement": true, + "CertChainPara": true, + "CertChainPolicyPara": true, + "CertChainPolicyStatus": true, + "CertCloseStore": true, + "CertContext": true, + "CertCreateCertificateContext": true, + "CertEnhKeyUsage": true, + "CertEnumCertificatesInStore": true, + "CertFreeCertificateChain": true, + "CertFreeCertificateContext": true, + "CertGetCertificateChain": true, + "CertInfo": true, + "CertOpenStore": true, + "CertOpenSystemStore": true, + "CertRevocationCrlInfo": true, + "CertRevocationInfo": true, + "CertSimpleChain": true, + "CertTrustListInfo": true, + "CertTrustStatus": true, + "CertUsageMatch": true, + "CertVerifyCertificateChainPolicy": true, + "Chdir": true, + "CheckBpfVersion": true, + "Chflags": true, + "Chmod": true, + "Chown": true, + "Chroot": true, + "Clearenv": true, + "Close": true, + "CloseHandle": true, + "CloseOnExec": true, + "Closesocket": true, + "CmsgLen": true, + "CmsgSpace": true, + "Cmsghdr": true, + "CommandLineToArgv": true, + "ComputerName": true, + "Conn": true, + "Connect": true, + "ConnectEx": true, + "ConvertSidToStringSid": true, + "ConvertStringSidToSid": true, + "CopySid": true, + "Creat": true, + "CreateDirectory": true, + "CreateFile": true, + "CreateFileMapping": true, + "CreateHardLink": true, + "CreateIoCompletionPort": true, + "CreatePipe": true, + "CreateProcess": true, + "CreateProcessAsUser": true, + "CreateSymbolicLink": true, + "CreateToolhelp32Snapshot": true, + "Credential": true, + "CryptAcquireContext": true, + "CryptGenRandom": true, + "CryptReleaseContext": true, + "DIOCBSFLUSH": true, + "DIOCOSFPFLUSH": true, + "DLL": true, + "DLLError": true, + "DLT_A429": true, + "DLT_A653_ICM": true, + "DLT_AIRONET_HEADER": true, + "DLT_AOS": true, + "DLT_APPLE_IP_OVER_IEEE1394": true, + "DLT_ARCNET": true, + "DLT_ARCNET_LINUX": true, + "DLT_ATM_CLIP": true, + "DLT_ATM_RFC1483": true, + "DLT_AURORA": true, + "DLT_AX25": true, + "DLT_AX25_KISS": true, + "DLT_BACNET_MS_TP": true, + "DLT_BLUETOOTH_HCI_H4": true, + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR": true, + "DLT_CAN20B": true, + "DLT_CAN_SOCKETCAN": true, + "DLT_CHAOS": true, + "DLT_CHDLC": true, + "DLT_CISCO_IOS": true, + "DLT_C_HDLC": true, + "DLT_C_HDLC_WITH_DIR": true, + "DLT_DBUS": true, + "DLT_DECT": true, + "DLT_DOCSIS": true, + "DLT_DVB_CI": true, + "DLT_ECONET": true, + "DLT_EN10MB": true, + "DLT_EN3MB": true, + "DLT_ENC": true, + "DLT_ERF": true, + "DLT_ERF_ETH": true, + "DLT_ERF_POS": true, + "DLT_FC_2": true, + "DLT_FC_2_WITH_FRAME_DELIMS": true, + "DLT_FDDI": true, + "DLT_FLEXRAY": true, + "DLT_FRELAY": true, + "DLT_FRELAY_WITH_DIR": true, + "DLT_GCOM_SERIAL": true, + "DLT_GCOM_T1E1": true, + "DLT_GPF_F": true, + "DLT_GPF_T": true, + "DLT_GPRS_LLC": true, + "DLT_GSMTAP_ABIS": true, + "DLT_GSMTAP_UM": true, + "DLT_HDLC": true, + "DLT_HHDLC": true, + "DLT_HIPPI": true, + "DLT_IBM_SN": true, + "DLT_IBM_SP": true, + "DLT_IEEE802": true, + "DLT_IEEE802_11": true, + "DLT_IEEE802_11_RADIO": true, + "DLT_IEEE802_11_RADIO_AVS": true, + "DLT_IEEE802_15_4": true, + "DLT_IEEE802_15_4_LINUX": true, + "DLT_IEEE802_15_4_NOFCS": true, + "DLT_IEEE802_15_4_NONASK_PHY": true, + "DLT_IEEE802_16_MAC_CPS": true, + "DLT_IEEE802_16_MAC_CPS_RADIO": true, + "DLT_IPFILTER": true, + "DLT_IPMB": true, + "DLT_IPMB_LINUX": true, + "DLT_IPNET": true, + "DLT_IPOIB": true, + "DLT_IPV4": true, + "DLT_IPV6": true, + "DLT_IP_OVER_FC": true, + "DLT_JUNIPER_ATM1": true, + "DLT_JUNIPER_ATM2": true, + "DLT_JUNIPER_ATM_CEMIC": true, + "DLT_JUNIPER_CHDLC": true, + "DLT_JUNIPER_ES": true, + "DLT_JUNIPER_ETHER": true, + "DLT_JUNIPER_FIBRECHANNEL": true, + "DLT_JUNIPER_FRELAY": true, + "DLT_JUNIPER_GGSN": true, + "DLT_JUNIPER_ISM": true, + "DLT_JUNIPER_MFR": true, + "DLT_JUNIPER_MLFR": true, + "DLT_JUNIPER_MLPPP": true, + "DLT_JUNIPER_MONITOR": true, + "DLT_JUNIPER_PIC_PEER": true, + "DLT_JUNIPER_PPP": true, + "DLT_JUNIPER_PPPOE": true, + "DLT_JUNIPER_PPPOE_ATM": true, + "DLT_JUNIPER_SERVICES": true, + "DLT_JUNIPER_SRX_E2E": true, + "DLT_JUNIPER_ST": true, + "DLT_JUNIPER_VP": true, + "DLT_JUNIPER_VS": true, + "DLT_LAPB_WITH_DIR": true, + "DLT_LAPD": true, + "DLT_LIN": true, + "DLT_LINUX_EVDEV": true, + "DLT_LINUX_IRDA": true, + "DLT_LINUX_LAPD": true, + "DLT_LINUX_PPP_WITHDIRECTION": true, + "DLT_LINUX_SLL": true, + "DLT_LOOP": true, + "DLT_LTALK": true, + "DLT_MATCHING_MAX": true, + "DLT_MATCHING_MIN": true, + "DLT_MFR": true, + "DLT_MOST": true, + "DLT_MPEG_2_TS": true, + "DLT_MPLS": true, + "DLT_MTP2": true, + "DLT_MTP2_WITH_PHDR": true, + "DLT_MTP3": true, + "DLT_MUX27010": true, + "DLT_NETANALYZER": true, + "DLT_NETANALYZER_TRANSPARENT": true, + "DLT_NFC_LLCP": true, + "DLT_NFLOG": true, + "DLT_NG40": true, + "DLT_NULL": true, + "DLT_PCI_EXP": true, + "DLT_PFLOG": true, + "DLT_PFSYNC": true, + "DLT_PPI": true, + "DLT_PPP": true, + "DLT_PPP_BSDOS": true, + "DLT_PPP_ETHER": true, + "DLT_PPP_PPPD": true, + "DLT_PPP_SERIAL": true, + "DLT_PPP_WITH_DIR": true, + "DLT_PPP_WITH_DIRECTION": true, + "DLT_PRISM_HEADER": true, + "DLT_PRONET": true, + "DLT_RAIF1": true, + "DLT_RAW": true, + "DLT_RAWAF_MASK": true, + "DLT_RIO": true, + "DLT_SCCP": true, + "DLT_SITA": true, + "DLT_SLIP": true, + "DLT_SLIP_BSDOS": true, + "DLT_STANAG_5066_D_PDU": true, + "DLT_SUNATM": true, + "DLT_SYMANTEC_FIREWALL": true, + "DLT_TZSP": true, + "DLT_USB": true, + "DLT_USB_LINUX": true, + "DLT_USB_LINUX_MMAPPED": true, + "DLT_USER0": true, + "DLT_USER1": true, + "DLT_USER10": true, + "DLT_USER11": true, + "DLT_USER12": true, + "DLT_USER13": true, + "DLT_USER14": true, + "DLT_USER15": true, + "DLT_USER2": true, + "DLT_USER3": true, + "DLT_USER4": true, + "DLT_USER5": true, + "DLT_USER6": true, + "DLT_USER7": true, + "DLT_USER8": true, + "DLT_USER9": true, + "DLT_WIHART": true, + "DLT_X2E_SERIAL": true, + "DLT_X2E_XORAYA": true, + "DNSMXData": true, + "DNSPTRData": true, + "DNSRecord": true, + "DNSSRVData": true, + "DNSTXTData": true, + "DNS_INFO_NO_RECORDS": true, + "DNS_TYPE_A": true, + "DNS_TYPE_A6": true, + "DNS_TYPE_AAAA": true, + "DNS_TYPE_ADDRS": true, + "DNS_TYPE_AFSDB": true, + "DNS_TYPE_ALL": true, + "DNS_TYPE_ANY": true, + "DNS_TYPE_ATMA": true, + "DNS_TYPE_AXFR": true, + "DNS_TYPE_CERT": true, + "DNS_TYPE_CNAME": true, + "DNS_TYPE_DHCID": true, + "DNS_TYPE_DNAME": true, + "DNS_TYPE_DNSKEY": true, + "DNS_TYPE_DS": true, + "DNS_TYPE_EID": true, + "DNS_TYPE_GID": true, + "DNS_TYPE_GPOS": true, + "DNS_TYPE_HINFO": true, + "DNS_TYPE_ISDN": true, + "DNS_TYPE_IXFR": true, + "DNS_TYPE_KEY": true, + "DNS_TYPE_KX": true, + "DNS_TYPE_LOC": true, + "DNS_TYPE_MAILA": true, + "DNS_TYPE_MAILB": true, + "DNS_TYPE_MB": true, + "DNS_TYPE_MD": true, + "DNS_TYPE_MF": true, + "DNS_TYPE_MG": true, + "DNS_TYPE_MINFO": true, + "DNS_TYPE_MR": true, + "DNS_TYPE_MX": true, + "DNS_TYPE_NAPTR": true, + "DNS_TYPE_NBSTAT": true, + "DNS_TYPE_NIMLOC": true, + "DNS_TYPE_NS": true, + "DNS_TYPE_NSAP": true, + "DNS_TYPE_NSAPPTR": true, + "DNS_TYPE_NSEC": true, + "DNS_TYPE_NULL": true, + "DNS_TYPE_NXT": true, + "DNS_TYPE_OPT": true, + "DNS_TYPE_PTR": true, + "DNS_TYPE_PX": true, + "DNS_TYPE_RP": true, + "DNS_TYPE_RRSIG": true, + "DNS_TYPE_RT": true, + "DNS_TYPE_SIG": true, + "DNS_TYPE_SINK": true, + "DNS_TYPE_SOA": true, + "DNS_TYPE_SRV": true, + "DNS_TYPE_TEXT": true, + "DNS_TYPE_TKEY": true, + "DNS_TYPE_TSIG": true, + "DNS_TYPE_UID": true, + "DNS_TYPE_UINFO": true, + "DNS_TYPE_UNSPEC": true, + "DNS_TYPE_WINS": true, + "DNS_TYPE_WINSR": true, + "DNS_TYPE_WKS": true, + "DNS_TYPE_X25": true, + "DT_BLK": true, + "DT_CHR": true, + "DT_DIR": true, + "DT_FIFO": true, + "DT_LNK": true, + "DT_REG": true, + "DT_SOCK": true, + "DT_UNKNOWN": true, + "DT_WHT": true, + "DUPLICATE_CLOSE_SOURCE": true, + "DUPLICATE_SAME_ACCESS": true, + "DeleteFile": true, + "DetachLsf": true, + "DeviceIoControl": true, + "Dirent": true, + "DnsNameCompare": true, + "DnsQuery": true, + "DnsRecordListFree": true, + "DnsSectionAdditional": true, + "DnsSectionAnswer": true, + "DnsSectionAuthority": true, + "DnsSectionQuestion": true, + "Dup": true, + "Dup2": true, + "Dup3": true, + "DuplicateHandle": true, + "E2BIG": true, + "EACCES": true, + "EADDRINUSE": true, + "EADDRNOTAVAIL": true, + "EADV": true, + "EAFNOSUPPORT": true, + "EAGAIN": true, + "EALREADY": true, + "EAUTH": true, + "EBADARCH": true, + "EBADE": true, + "EBADEXEC": true, + "EBADF": true, + "EBADFD": true, + "EBADMACHO": true, + "EBADMSG": true, + "EBADR": true, + "EBADRPC": true, + "EBADRQC": true, + "EBADSLT": true, + "EBFONT": true, + "EBUSY": true, + "ECANCELED": true, + "ECAPMODE": true, + "ECHILD": true, + "ECHO": true, + "ECHOCTL": true, + "ECHOE": true, + "ECHOK": true, + "ECHOKE": true, + "ECHONL": true, + "ECHOPRT": true, + "ECHRNG": true, + "ECOMM": true, + "ECONNABORTED": true, + "ECONNREFUSED": true, + "ECONNRESET": true, + "EDEADLK": true, + "EDEADLOCK": true, + "EDESTADDRREQ": true, + "EDEVERR": true, + "EDOM": true, + "EDOOFUS": true, + "EDOTDOT": true, + "EDQUOT": true, + "EEXIST": true, + "EFAULT": true, + "EFBIG": true, + "EFER_LMA": true, + "EFER_LME": true, + "EFER_NXE": true, + "EFER_SCE": true, + "EFTYPE": true, + "EHOSTDOWN": true, + "EHOSTUNREACH": true, + "EHWPOISON": true, + "EIDRM": true, + "EILSEQ": true, + "EINPROGRESS": true, + "EINTR": true, + "EINVAL": true, + "EIO": true, + "EIPSEC": true, + "EISCONN": true, + "EISDIR": true, + "EISNAM": true, + "EKEYEXPIRED": true, + "EKEYREJECTED": true, + "EKEYREVOKED": true, + "EL2HLT": true, + "EL2NSYNC": true, + "EL3HLT": true, + "EL3RST": true, + "ELAST": true, + "ELF_NGREG": true, + "ELF_PRARGSZ": true, + "ELIBACC": true, + "ELIBBAD": true, + "ELIBEXEC": true, + "ELIBMAX": true, + "ELIBSCN": true, + "ELNRNG": true, + "ELOOP": true, + "EMEDIUMTYPE": true, + "EMFILE": true, + "EMLINK": true, + "EMSGSIZE": true, + "EMT_TAGOVF": true, + "EMULTIHOP": true, + "EMUL_ENABLED": true, + "EMUL_LINUX": true, + "EMUL_LINUX32": true, + "EMUL_MAXID": true, + "EMUL_NATIVE": true, + "ENAMETOOLONG": true, + "ENAVAIL": true, + "ENDRUNDISC": true, + "ENEEDAUTH": true, + "ENETDOWN": true, + "ENETRESET": true, + "ENETUNREACH": true, + "ENFILE": true, + "ENOANO": true, + "ENOATTR": true, + "ENOBUFS": true, + "ENOCSI": true, + "ENODATA": true, + "ENODEV": true, + "ENOENT": true, + "ENOEXEC": true, + "ENOKEY": true, + "ENOLCK": true, + "ENOLINK": true, + "ENOMEDIUM": true, + "ENOMEM": true, + "ENOMSG": true, + "ENONET": true, + "ENOPKG": true, + "ENOPOLICY": true, + "ENOPROTOOPT": true, + "ENOSPC": true, + "ENOSR": true, + "ENOSTR": true, + "ENOSYS": true, + "ENOTBLK": true, + "ENOTCAPABLE": true, + "ENOTCONN": true, + "ENOTDIR": true, + "ENOTEMPTY": true, + "ENOTNAM": true, + "ENOTRECOVERABLE": true, + "ENOTSOCK": true, + "ENOTSUP": true, + "ENOTTY": true, + "ENOTUNIQ": true, + "ENXIO": true, + "EN_SW_CTL_INF": true, + "EN_SW_CTL_PREC": true, + "EN_SW_CTL_ROUND": true, + "EN_SW_DATACHAIN": true, + "EN_SW_DENORM": true, + "EN_SW_INVOP": true, + "EN_SW_OVERFLOW": true, + "EN_SW_PRECLOSS": true, + "EN_SW_UNDERFLOW": true, + "EN_SW_ZERODIV": true, + "EOPNOTSUPP": true, + "EOVERFLOW": true, + "EOWNERDEAD": true, + "EPERM": true, + "EPFNOSUPPORT": true, + "EPIPE": true, + "EPOLLERR": true, + "EPOLLET": true, + "EPOLLHUP": true, + "EPOLLIN": true, + "EPOLLMSG": true, + "EPOLLONESHOT": true, + "EPOLLOUT": true, + "EPOLLPRI": true, + "EPOLLRDBAND": true, + "EPOLLRDHUP": true, + "EPOLLRDNORM": true, + "EPOLLWRBAND": true, + "EPOLLWRNORM": true, + "EPOLL_CLOEXEC": true, + "EPOLL_CTL_ADD": true, + "EPOLL_CTL_DEL": true, + "EPOLL_CTL_MOD": true, + "EPOLL_NONBLOCK": true, + "EPROCLIM": true, + "EPROCUNAVAIL": true, + "EPROGMISMATCH": true, + "EPROGUNAVAIL": true, + "EPROTO": true, + "EPROTONOSUPPORT": true, + "EPROTOTYPE": true, + "EPWROFF": true, + "ERANGE": true, + "EREMCHG": true, + "EREMOTE": true, + "EREMOTEIO": true, + "ERESTART": true, + "ERFKILL": true, + "EROFS": true, + "ERPCMISMATCH": true, + "ERROR_ACCESS_DENIED": true, + "ERROR_ALREADY_EXISTS": true, + "ERROR_BROKEN_PIPE": true, + "ERROR_BUFFER_OVERFLOW": true, + "ERROR_DIR_NOT_EMPTY": true, + "ERROR_ENVVAR_NOT_FOUND": true, + "ERROR_FILE_EXISTS": true, + "ERROR_FILE_NOT_FOUND": true, + "ERROR_HANDLE_EOF": true, + "ERROR_INSUFFICIENT_BUFFER": true, + "ERROR_IO_PENDING": true, + "ERROR_MOD_NOT_FOUND": true, + "ERROR_MORE_DATA": true, + "ERROR_NETNAME_DELETED": true, + "ERROR_NOT_FOUND": true, + "ERROR_NO_MORE_FILES": true, + "ERROR_OPERATION_ABORTED": true, + "ERROR_PATH_NOT_FOUND": true, + "ERROR_PRIVILEGE_NOT_HELD": true, + "ERROR_PROC_NOT_FOUND": true, + "ESHLIBVERS": true, + "ESHUTDOWN": true, + "ESOCKTNOSUPPORT": true, + "ESPIPE": true, + "ESRCH": true, + "ESRMNT": true, + "ESTALE": true, + "ESTRPIPE": true, + "ETHERCAP_JUMBO_MTU": true, + "ETHERCAP_VLAN_HWTAGGING": true, + "ETHERCAP_VLAN_MTU": true, + "ETHERMIN": true, + "ETHERMTU": true, + "ETHERMTU_JUMBO": true, + "ETHERTYPE_8023": true, + "ETHERTYPE_AARP": true, + "ETHERTYPE_ACCTON": true, + "ETHERTYPE_AEONIC": true, + "ETHERTYPE_ALPHA": true, + "ETHERTYPE_AMBER": true, + "ETHERTYPE_AMOEBA": true, + "ETHERTYPE_AOE": true, + "ETHERTYPE_APOLLO": true, + "ETHERTYPE_APOLLODOMAIN": true, + "ETHERTYPE_APPLETALK": true, + "ETHERTYPE_APPLITEK": true, + "ETHERTYPE_ARGONAUT": true, + "ETHERTYPE_ARP": true, + "ETHERTYPE_AT": true, + "ETHERTYPE_ATALK": true, + "ETHERTYPE_ATOMIC": true, + "ETHERTYPE_ATT": true, + "ETHERTYPE_ATTSTANFORD": true, + "ETHERTYPE_AUTOPHON": true, + "ETHERTYPE_AXIS": true, + "ETHERTYPE_BCLOOP": true, + "ETHERTYPE_BOFL": true, + "ETHERTYPE_CABLETRON": true, + "ETHERTYPE_CHAOS": true, + "ETHERTYPE_COMDESIGN": true, + "ETHERTYPE_COMPUGRAPHIC": true, + "ETHERTYPE_COUNTERPOINT": true, + "ETHERTYPE_CRONUS": true, + "ETHERTYPE_CRONUSVLN": true, + "ETHERTYPE_DCA": true, + "ETHERTYPE_DDE": true, + "ETHERTYPE_DEBNI": true, + "ETHERTYPE_DECAM": true, + "ETHERTYPE_DECCUST": true, + "ETHERTYPE_DECDIAG": true, + "ETHERTYPE_DECDNS": true, + "ETHERTYPE_DECDTS": true, + "ETHERTYPE_DECEXPER": true, + "ETHERTYPE_DECLAST": true, + "ETHERTYPE_DECLTM": true, + "ETHERTYPE_DECMUMPS": true, + "ETHERTYPE_DECNETBIOS": true, + "ETHERTYPE_DELTACON": true, + "ETHERTYPE_DIDDLE": true, + "ETHERTYPE_DLOG1": true, + "ETHERTYPE_DLOG2": true, + "ETHERTYPE_DN": true, + "ETHERTYPE_DOGFIGHT": true, + "ETHERTYPE_DSMD": true, + "ETHERTYPE_ECMA": true, + "ETHERTYPE_ENCRYPT": true, + "ETHERTYPE_ES": true, + "ETHERTYPE_EXCELAN": true, + "ETHERTYPE_EXPERDATA": true, + "ETHERTYPE_FLIP": true, + "ETHERTYPE_FLOWCONTROL": true, + "ETHERTYPE_FRARP": true, + "ETHERTYPE_GENDYN": true, + "ETHERTYPE_HAYES": true, + "ETHERTYPE_HIPPI_FP": true, + "ETHERTYPE_HITACHI": true, + "ETHERTYPE_HP": true, + "ETHERTYPE_IEEEPUP": true, + "ETHERTYPE_IEEEPUPAT": true, + "ETHERTYPE_IMLBL": true, + "ETHERTYPE_IMLBLDIAG": true, + "ETHERTYPE_IP": true, + "ETHERTYPE_IPAS": true, + "ETHERTYPE_IPV6": true, + "ETHERTYPE_IPX": true, + "ETHERTYPE_IPXNEW": true, + "ETHERTYPE_KALPANA": true, + "ETHERTYPE_LANBRIDGE": true, + "ETHERTYPE_LANPROBE": true, + "ETHERTYPE_LAT": true, + "ETHERTYPE_LBACK": true, + "ETHERTYPE_LITTLE": true, + "ETHERTYPE_LLDP": true, + "ETHERTYPE_LOGICRAFT": true, + "ETHERTYPE_LOOPBACK": true, + "ETHERTYPE_MATRA": true, + "ETHERTYPE_MAX": true, + "ETHERTYPE_MERIT": true, + "ETHERTYPE_MICP": true, + "ETHERTYPE_MOPDL": true, + "ETHERTYPE_MOPRC": true, + "ETHERTYPE_MOTOROLA": true, + "ETHERTYPE_MPLS": true, + "ETHERTYPE_MPLS_MCAST": true, + "ETHERTYPE_MUMPS": true, + "ETHERTYPE_NBPCC": true, + "ETHERTYPE_NBPCLAIM": true, + "ETHERTYPE_NBPCLREQ": true, + "ETHERTYPE_NBPCLRSP": true, + "ETHERTYPE_NBPCREQ": true, + "ETHERTYPE_NBPCRSP": true, + "ETHERTYPE_NBPDG": true, + "ETHERTYPE_NBPDGB": true, + "ETHERTYPE_NBPDLTE": true, + "ETHERTYPE_NBPRAR": true, + "ETHERTYPE_NBPRAS": true, + "ETHERTYPE_NBPRST": true, + "ETHERTYPE_NBPSCD": true, + "ETHERTYPE_NBPVCD": true, + "ETHERTYPE_NBS": true, + "ETHERTYPE_NCD": true, + "ETHERTYPE_NESTAR": true, + "ETHERTYPE_NETBEUI": true, + "ETHERTYPE_NOVELL": true, + "ETHERTYPE_NS": true, + "ETHERTYPE_NSAT": true, + "ETHERTYPE_NSCOMPAT": true, + "ETHERTYPE_NTRAILER": true, + "ETHERTYPE_OS9": true, + "ETHERTYPE_OS9NET": true, + "ETHERTYPE_PACER": true, + "ETHERTYPE_PAE": true, + "ETHERTYPE_PCS": true, + "ETHERTYPE_PLANNING": true, + "ETHERTYPE_PPP": true, + "ETHERTYPE_PPPOE": true, + "ETHERTYPE_PPPOEDISC": true, + "ETHERTYPE_PRIMENTS": true, + "ETHERTYPE_PUP": true, + "ETHERTYPE_PUPAT": true, + "ETHERTYPE_QINQ": true, + "ETHERTYPE_RACAL": true, + "ETHERTYPE_RATIONAL": true, + "ETHERTYPE_RAWFR": true, + "ETHERTYPE_RCL": true, + "ETHERTYPE_RDP": true, + "ETHERTYPE_RETIX": true, + "ETHERTYPE_REVARP": true, + "ETHERTYPE_SCA": true, + "ETHERTYPE_SECTRA": true, + "ETHERTYPE_SECUREDATA": true, + "ETHERTYPE_SGITW": true, + "ETHERTYPE_SG_BOUNCE": true, + "ETHERTYPE_SG_DIAG": true, + "ETHERTYPE_SG_NETGAMES": true, + "ETHERTYPE_SG_RESV": true, + "ETHERTYPE_SIMNET": true, + "ETHERTYPE_SLOW": true, + "ETHERTYPE_SLOWPROTOCOLS": true, + "ETHERTYPE_SNA": true, + "ETHERTYPE_SNMP": true, + "ETHERTYPE_SONIX": true, + "ETHERTYPE_SPIDER": true, + "ETHERTYPE_SPRITE": true, + "ETHERTYPE_STP": true, + "ETHERTYPE_TALARIS": true, + "ETHERTYPE_TALARISMC": true, + "ETHERTYPE_TCPCOMP": true, + "ETHERTYPE_TCPSM": true, + "ETHERTYPE_TEC": true, + "ETHERTYPE_TIGAN": true, + "ETHERTYPE_TRAIL": true, + "ETHERTYPE_TRANSETHER": true, + "ETHERTYPE_TYMSHARE": true, + "ETHERTYPE_UBBST": true, + "ETHERTYPE_UBDEBUG": true, + "ETHERTYPE_UBDIAGLOOP": true, + "ETHERTYPE_UBDL": true, + "ETHERTYPE_UBNIU": true, + "ETHERTYPE_UBNMC": true, + "ETHERTYPE_VALID": true, + "ETHERTYPE_VARIAN": true, + "ETHERTYPE_VAXELN": true, + "ETHERTYPE_VEECO": true, + "ETHERTYPE_VEXP": true, + "ETHERTYPE_VGLAB": true, + "ETHERTYPE_VINES": true, + "ETHERTYPE_VINESECHO": true, + "ETHERTYPE_VINESLOOP": true, + "ETHERTYPE_VITAL": true, + "ETHERTYPE_VLAN": true, + "ETHERTYPE_VLTLMAN": true, + "ETHERTYPE_VPROD": true, + "ETHERTYPE_VURESERVED": true, + "ETHERTYPE_WATERLOO": true, + "ETHERTYPE_WELLFLEET": true, + "ETHERTYPE_X25": true, + "ETHERTYPE_X75": true, + "ETHERTYPE_XNSSM": true, + "ETHERTYPE_XTP": true, + "ETHER_ADDR_LEN": true, + "ETHER_ALIGN": true, + "ETHER_CRC_LEN": true, + "ETHER_CRC_POLY_BE": true, + "ETHER_CRC_POLY_LE": true, + "ETHER_HDR_LEN": true, + "ETHER_MAX_DIX_LEN": true, + "ETHER_MAX_LEN": true, + "ETHER_MAX_LEN_JUMBO": true, + "ETHER_MIN_LEN": true, + "ETHER_PPPOE_ENCAP_LEN": true, + "ETHER_TYPE_LEN": true, + "ETHER_VLAN_ENCAP_LEN": true, + "ETH_P_1588": true, + "ETH_P_8021Q": true, + "ETH_P_802_2": true, + "ETH_P_802_3": true, + "ETH_P_AARP": true, + "ETH_P_ALL": true, + "ETH_P_AOE": true, + "ETH_P_ARCNET": true, + "ETH_P_ARP": true, + "ETH_P_ATALK": true, + "ETH_P_ATMFATE": true, + "ETH_P_ATMMPOA": true, + "ETH_P_AX25": true, + "ETH_P_BPQ": true, + "ETH_P_CAIF": true, + "ETH_P_CAN": true, + "ETH_P_CONTROL": true, + "ETH_P_CUST": true, + "ETH_P_DDCMP": true, + "ETH_P_DEC": true, + "ETH_P_DIAG": true, + "ETH_P_DNA_DL": true, + "ETH_P_DNA_RC": true, + "ETH_P_DNA_RT": true, + "ETH_P_DSA": true, + "ETH_P_ECONET": true, + "ETH_P_EDSA": true, + "ETH_P_FCOE": true, + "ETH_P_FIP": true, + "ETH_P_HDLC": true, + "ETH_P_IEEE802154": true, + "ETH_P_IEEEPUP": true, + "ETH_P_IEEEPUPAT": true, + "ETH_P_IP": true, + "ETH_P_IPV6": true, + "ETH_P_IPX": true, + "ETH_P_IRDA": true, + "ETH_P_LAT": true, + "ETH_P_LINK_CTL": true, + "ETH_P_LOCALTALK": true, + "ETH_P_LOOP": true, + "ETH_P_MOBITEX": true, + "ETH_P_MPLS_MC": true, + "ETH_P_MPLS_UC": true, + "ETH_P_PAE": true, + "ETH_P_PAUSE": true, + "ETH_P_PHONET": true, + "ETH_P_PPPTALK": true, + "ETH_P_PPP_DISC": true, + "ETH_P_PPP_MP": true, + "ETH_P_PPP_SES": true, + "ETH_P_PUP": true, + "ETH_P_PUPAT": true, + "ETH_P_RARP": true, + "ETH_P_SCA": true, + "ETH_P_SLOW": true, + "ETH_P_SNAP": true, + "ETH_P_TEB": true, + "ETH_P_TIPC": true, + "ETH_P_TRAILER": true, + "ETH_P_TR_802_2": true, + "ETH_P_WAN_PPP": true, + "ETH_P_WCCP": true, + "ETH_P_X25": true, + "ETIME": true, + "ETIMEDOUT": true, + "ETOOMANYREFS": true, + "ETXTBSY": true, + "EUCLEAN": true, + "EUNATCH": true, + "EUSERS": true, + "EVFILT_AIO": true, + "EVFILT_FS": true, + "EVFILT_LIO": true, + "EVFILT_MACHPORT": true, + "EVFILT_PROC": true, + "EVFILT_READ": true, + "EVFILT_SIGNAL": true, + "EVFILT_SYSCOUNT": true, + "EVFILT_THREADMARKER": true, + "EVFILT_TIMER": true, + "EVFILT_USER": true, + "EVFILT_VM": true, + "EVFILT_VNODE": true, + "EVFILT_WRITE": true, + "EV_ADD": true, + "EV_CLEAR": true, + "EV_DELETE": true, + "EV_DISABLE": true, + "EV_DISPATCH": true, + "EV_DROP": true, + "EV_ENABLE": true, + "EV_EOF": true, + "EV_ERROR": true, + "EV_FLAG0": true, + "EV_FLAG1": true, + "EV_ONESHOT": true, + "EV_OOBAND": true, + "EV_POLL": true, + "EV_RECEIPT": true, + "EV_SYSFLAGS": true, + "EWINDOWS": true, + "EWOULDBLOCK": true, + "EXDEV": true, + "EXFULL": true, + "EXTA": true, + "EXTB": true, + "EXTPROC": true, + "Environ": true, + "EpollCreate": true, + "EpollCreate1": true, + "EpollCtl": true, + "EpollEvent": true, + "EpollWait": true, + "Errno": true, + "EscapeArg": true, + "Exchangedata": true, + "Exec": true, + "Exit": true, + "ExitProcess": true, + "FD_CLOEXEC": true, + "FD_SETSIZE": true, + "FILE_ACTION_ADDED": true, + "FILE_ACTION_MODIFIED": true, + "FILE_ACTION_REMOVED": true, + "FILE_ACTION_RENAMED_NEW_NAME": true, + "FILE_ACTION_RENAMED_OLD_NAME": true, + "FILE_APPEND_DATA": true, + "FILE_ATTRIBUTE_ARCHIVE": true, + "FILE_ATTRIBUTE_DIRECTORY": true, + "FILE_ATTRIBUTE_HIDDEN": true, + "FILE_ATTRIBUTE_NORMAL": true, + "FILE_ATTRIBUTE_READONLY": true, + "FILE_ATTRIBUTE_REPARSE_POINT": true, + "FILE_ATTRIBUTE_SYSTEM": true, + "FILE_BEGIN": true, + "FILE_CURRENT": true, + "FILE_END": true, + "FILE_FLAG_BACKUP_SEMANTICS": true, + "FILE_FLAG_OPEN_REPARSE_POINT": true, + "FILE_FLAG_OVERLAPPED": true, + "FILE_LIST_DIRECTORY": true, + "FILE_MAP_COPY": true, + "FILE_MAP_EXECUTE": true, + "FILE_MAP_READ": true, + "FILE_MAP_WRITE": true, + "FILE_NOTIFY_CHANGE_ATTRIBUTES": true, + "FILE_NOTIFY_CHANGE_CREATION": true, + "FILE_NOTIFY_CHANGE_DIR_NAME": true, + "FILE_NOTIFY_CHANGE_FILE_NAME": true, + "FILE_NOTIFY_CHANGE_LAST_ACCESS": true, + "FILE_NOTIFY_CHANGE_LAST_WRITE": true, + "FILE_NOTIFY_CHANGE_SIZE": true, + "FILE_SHARE_DELETE": true, + "FILE_SHARE_READ": true, + "FILE_SHARE_WRITE": true, + "FILE_SKIP_COMPLETION_PORT_ON_SUCCESS": true, + "FILE_SKIP_SET_EVENT_ON_HANDLE": true, + "FILE_TYPE_CHAR": true, + "FILE_TYPE_DISK": true, + "FILE_TYPE_PIPE": true, + "FILE_TYPE_REMOTE": true, + "FILE_TYPE_UNKNOWN": true, + "FILE_WRITE_ATTRIBUTES": true, + "FLUSHO": true, + "FORMAT_MESSAGE_ALLOCATE_BUFFER": true, + "FORMAT_MESSAGE_ARGUMENT_ARRAY": true, + "FORMAT_MESSAGE_FROM_HMODULE": true, + "FORMAT_MESSAGE_FROM_STRING": true, + "FORMAT_MESSAGE_FROM_SYSTEM": true, + "FORMAT_MESSAGE_IGNORE_INSERTS": true, + "FORMAT_MESSAGE_MAX_WIDTH_MASK": true, + "FSCTL_GET_REPARSE_POINT": true, + "F_ADDFILESIGS": true, + "F_ADDSIGS": true, + "F_ALLOCATEALL": true, + "F_ALLOCATECONTIG": true, + "F_CANCEL": true, + "F_CHKCLEAN": true, + "F_CLOSEM": true, + "F_DUP2FD": true, + "F_DUP2FD_CLOEXEC": true, + "F_DUPFD": true, + "F_DUPFD_CLOEXEC": true, + "F_EXLCK": true, + "F_FLUSH_DATA": true, + "F_FREEZE_FS": true, + "F_FSCTL": true, + "F_FSDIRMASK": true, + "F_FSIN": true, + "F_FSINOUT": true, + "F_FSOUT": true, + "F_FSPRIV": true, + "F_FSVOID": true, + "F_FULLFSYNC": true, + "F_GETFD": true, + "F_GETFL": true, + "F_GETLEASE": true, + "F_GETLK": true, + "F_GETLK64": true, + "F_GETLKPID": true, + "F_GETNOSIGPIPE": true, + "F_GETOWN": true, + "F_GETOWN_EX": true, + "F_GETPATH": true, + "F_GETPATH_MTMINFO": true, + "F_GETPIPE_SZ": true, + "F_GETPROTECTIONCLASS": true, + "F_GETSIG": true, + "F_GLOBAL_NOCACHE": true, + "F_LOCK": true, + "F_LOG2PHYS": true, + "F_LOG2PHYS_EXT": true, + "F_MARKDEPENDENCY": true, + "F_MAXFD": true, + "F_NOCACHE": true, + "F_NODIRECT": true, + "F_NOTIFY": true, + "F_OGETLK": true, + "F_OK": true, + "F_OSETLK": true, + "F_OSETLKW": true, + "F_PARAM_MASK": true, + "F_PARAM_MAX": true, + "F_PATHPKG_CHECK": true, + "F_PEOFPOSMODE": true, + "F_PREALLOCATE": true, + "F_RDADVISE": true, + "F_RDAHEAD": true, + "F_RDLCK": true, + "F_READAHEAD": true, + "F_READBOOTSTRAP": true, + "F_SETBACKINGSTORE": true, + "F_SETFD": true, + "F_SETFL": true, + "F_SETLEASE": true, + "F_SETLK": true, + "F_SETLK64": true, + "F_SETLKW": true, + "F_SETLKW64": true, + "F_SETLK_REMOTE": true, + "F_SETNOSIGPIPE": true, + "F_SETOWN": true, + "F_SETOWN_EX": true, + "F_SETPIPE_SZ": true, + "F_SETPROTECTIONCLASS": true, + "F_SETSIG": true, + "F_SETSIZE": true, + "F_SHLCK": true, + "F_TEST": true, + "F_THAW_FS": true, + "F_TLOCK": true, + "F_ULOCK": true, + "F_UNLCK": true, + "F_UNLCKSYS": true, + "F_VOLPOSMODE": true, + "F_WRITEBOOTSTRAP": true, + "F_WRLCK": true, + "Faccessat": true, + "Fallocate": true, + "Fbootstraptransfer_t": true, + "Fchdir": true, + "Fchflags": true, + "Fchmod": true, + "Fchmodat": true, + "Fchown": true, + "Fchownat": true, + "FcntlFlock": true, + "FdSet": true, + "Fdatasync": true, + "FileNotifyInformation": true, + "Filetime": true, + "FindClose": true, + "FindFirstFile": true, + "FindNextFile": true, + "Flock": true, + "Flock_t": true, + "FlushBpf": true, + "FlushFileBuffers": true, + "FlushViewOfFile": true, + "ForkExec": true, + "ForkLock": true, + "FormatMessage": true, + "Fpathconf": true, + "FreeAddrInfoW": true, + "FreeEnvironmentStrings": true, + "FreeLibrary": true, + "Fsid": true, + "Fstat": true, + "Fstatat": true, + "Fstatfs": true, + "Fstore_t": true, + "Fsync": true, + "Ftruncate": true, + "FullPath": true, + "Futimes": true, + "Futimesat": true, + "GENERIC_ALL": true, + "GENERIC_EXECUTE": true, + "GENERIC_READ": true, + "GENERIC_WRITE": true, + "GUID": true, + "GetAcceptExSockaddrs": true, + "GetAdaptersInfo": true, + "GetAddrInfoW": true, + "GetCommandLine": true, + "GetComputerName": true, + "GetConsoleMode": true, + "GetCurrentDirectory": true, + "GetCurrentProcess": true, + "GetEnvironmentStrings": true, + "GetEnvironmentVariable": true, + "GetExitCodeProcess": true, + "GetFileAttributes": true, + "GetFileAttributesEx": true, + "GetFileExInfoStandard": true, + "GetFileExMaxInfoLevel": true, + "GetFileInformationByHandle": true, + "GetFileType": true, + "GetFullPathName": true, + "GetHostByName": true, + "GetIfEntry": true, + "GetLastError": true, + "GetLengthSid": true, + "GetLongPathName": true, + "GetProcAddress": true, + "GetProcessTimes": true, + "GetProtoByName": true, + "GetQueuedCompletionStatus": true, + "GetServByName": true, + "GetShortPathName": true, + "GetStartupInfo": true, + "GetStdHandle": true, + "GetSystemTimeAsFileTime": true, + "GetTempPath": true, + "GetTimeZoneInformation": true, + "GetTokenInformation": true, + "GetUserNameEx": true, + "GetUserProfileDirectory": true, + "GetVersion": true, + "Getcwd": true, + "Getdents": true, + "Getdirentries": true, + "Getdtablesize": true, + "Getegid": true, + "Getenv": true, + "Geteuid": true, + "Getfsstat": true, + "Getgid": true, + "Getgroups": true, + "Getpagesize": true, + "Getpeername": true, + "Getpgid": true, + "Getpgrp": true, + "Getpid": true, + "Getppid": true, + "Getpriority": true, + "Getrlimit": true, + "Getrusage": true, + "Getsid": true, + "Getsockname": true, + "Getsockopt": true, + "GetsockoptByte": true, + "GetsockoptICMPv6Filter": true, + "GetsockoptIPMreq": true, + "GetsockoptIPMreqn": true, + "GetsockoptIPv6MTUInfo": true, + "GetsockoptIPv6Mreq": true, + "GetsockoptInet4Addr": true, + "GetsockoptInt": true, + "GetsockoptUcred": true, + "Gettid": true, + "Gettimeofday": true, + "Getuid": true, + "Getwd": true, + "Getxattr": true, + "HANDLE_FLAG_INHERIT": true, + "HKEY_CLASSES_ROOT": true, + "HKEY_CURRENT_CONFIG": true, + "HKEY_CURRENT_USER": true, + "HKEY_DYN_DATA": true, + "HKEY_LOCAL_MACHINE": true, + "HKEY_PERFORMANCE_DATA": true, + "HKEY_USERS": true, + "HUPCL": true, + "Handle": true, + "Hostent": true, + "ICANON": true, + "ICMP6_FILTER": true, + "ICMPV6_FILTER": true, + "ICMPv6Filter": true, + "ICRNL": true, + "IEXTEN": true, + "IFAN_ARRIVAL": true, + "IFAN_DEPARTURE": true, + "IFA_ADDRESS": true, + "IFA_ANYCAST": true, + "IFA_BROADCAST": true, + "IFA_CACHEINFO": true, + "IFA_F_DADFAILED": true, + "IFA_F_DEPRECATED": true, + "IFA_F_HOMEADDRESS": true, + "IFA_F_NODAD": true, + "IFA_F_OPTIMISTIC": true, + "IFA_F_PERMANENT": true, + "IFA_F_SECONDARY": true, + "IFA_F_TEMPORARY": true, + "IFA_F_TENTATIVE": true, + "IFA_LABEL": true, + "IFA_LOCAL": true, + "IFA_MAX": true, + "IFA_MULTICAST": true, + "IFA_ROUTE": true, + "IFA_UNSPEC": true, + "IFF_ALLMULTI": true, + "IFF_ALTPHYS": true, + "IFF_AUTOMEDIA": true, + "IFF_BROADCAST": true, + "IFF_CANTCHANGE": true, + "IFF_CANTCONFIG": true, + "IFF_DEBUG": true, + "IFF_DRV_OACTIVE": true, + "IFF_DRV_RUNNING": true, + "IFF_DYING": true, + "IFF_DYNAMIC": true, + "IFF_LINK0": true, + "IFF_LINK1": true, + "IFF_LINK2": true, + "IFF_LOOPBACK": true, + "IFF_MASTER": true, + "IFF_MONITOR": true, + "IFF_MULTICAST": true, + "IFF_NOARP": true, + "IFF_NOTRAILERS": true, + "IFF_NO_PI": true, + "IFF_OACTIVE": true, + "IFF_ONE_QUEUE": true, + "IFF_POINTOPOINT": true, + "IFF_POINTTOPOINT": true, + "IFF_PORTSEL": true, + "IFF_PPROMISC": true, + "IFF_PROMISC": true, + "IFF_RENAMING": true, + "IFF_RUNNING": true, + "IFF_SIMPLEX": true, + "IFF_SLAVE": true, + "IFF_SMART": true, + "IFF_STATICARP": true, + "IFF_TAP": true, + "IFF_TUN": true, + "IFF_TUN_EXCL": true, + "IFF_UP": true, + "IFF_VNET_HDR": true, + "IFLA_ADDRESS": true, + "IFLA_BROADCAST": true, + "IFLA_COST": true, + "IFLA_IFALIAS": true, + "IFLA_IFNAME": true, + "IFLA_LINK": true, + "IFLA_LINKINFO": true, + "IFLA_LINKMODE": true, + "IFLA_MAP": true, + "IFLA_MASTER": true, + "IFLA_MAX": true, + "IFLA_MTU": true, + "IFLA_NET_NS_PID": true, + "IFLA_OPERSTATE": true, + "IFLA_PRIORITY": true, + "IFLA_PROTINFO": true, + "IFLA_QDISC": true, + "IFLA_STATS": true, + "IFLA_TXQLEN": true, + "IFLA_UNSPEC": true, + "IFLA_WEIGHT": true, + "IFLA_WIRELESS": true, + "IFNAMSIZ": true, + "IFT_1822": true, + "IFT_A12MPPSWITCH": true, + "IFT_AAL2": true, + "IFT_AAL5": true, + "IFT_ADSL": true, + "IFT_AFLANE8023": true, + "IFT_AFLANE8025": true, + "IFT_ARAP": true, + "IFT_ARCNET": true, + "IFT_ARCNETPLUS": true, + "IFT_ASYNC": true, + "IFT_ATM": true, + "IFT_ATMDXI": true, + "IFT_ATMFUNI": true, + "IFT_ATMIMA": true, + "IFT_ATMLOGICAL": true, + "IFT_ATMRADIO": true, + "IFT_ATMSUBINTERFACE": true, + "IFT_ATMVCIENDPT": true, + "IFT_ATMVIRTUAL": true, + "IFT_BGPPOLICYACCOUNTING": true, + "IFT_BLUETOOTH": true, + "IFT_BRIDGE": true, + "IFT_BSC": true, + "IFT_CARP": true, + "IFT_CCTEMUL": true, + "IFT_CELLULAR": true, + "IFT_CEPT": true, + "IFT_CES": true, + "IFT_CHANNEL": true, + "IFT_CNR": true, + "IFT_COFFEE": true, + "IFT_COMPOSITELINK": true, + "IFT_DCN": true, + "IFT_DIGITALPOWERLINE": true, + "IFT_DIGITALWRAPPEROVERHEADCHANNEL": true, + "IFT_DLSW": true, + "IFT_DOCSCABLEDOWNSTREAM": true, + "IFT_DOCSCABLEMACLAYER": true, + "IFT_DOCSCABLEUPSTREAM": true, + "IFT_DOCSCABLEUPSTREAMCHANNEL": true, + "IFT_DS0": true, + "IFT_DS0BUNDLE": true, + "IFT_DS1FDL": true, + "IFT_DS3": true, + "IFT_DTM": true, + "IFT_DUMMY": true, + "IFT_DVBASILN": true, + "IFT_DVBASIOUT": true, + "IFT_DVBRCCDOWNSTREAM": true, + "IFT_DVBRCCMACLAYER": true, + "IFT_DVBRCCUPSTREAM": true, + "IFT_ECONET": true, + "IFT_ENC": true, + "IFT_EON": true, + "IFT_EPLRS": true, + "IFT_ESCON": true, + "IFT_ETHER": true, + "IFT_FAITH": true, + "IFT_FAST": true, + "IFT_FASTETHER": true, + "IFT_FASTETHERFX": true, + "IFT_FDDI": true, + "IFT_FIBRECHANNEL": true, + "IFT_FRAMERELAYINTERCONNECT": true, + "IFT_FRAMERELAYMPI": true, + "IFT_FRDLCIENDPT": true, + "IFT_FRELAY": true, + "IFT_FRELAYDCE": true, + "IFT_FRF16MFRBUNDLE": true, + "IFT_FRFORWARD": true, + "IFT_G703AT2MB": true, + "IFT_G703AT64K": true, + "IFT_GIF": true, + "IFT_GIGABITETHERNET": true, + "IFT_GR303IDT": true, + "IFT_GR303RDT": true, + "IFT_H323GATEKEEPER": true, + "IFT_H323PROXY": true, + "IFT_HDH1822": true, + "IFT_HDLC": true, + "IFT_HDSL2": true, + "IFT_HIPERLAN2": true, + "IFT_HIPPI": true, + "IFT_HIPPIINTERFACE": true, + "IFT_HOSTPAD": true, + "IFT_HSSI": true, + "IFT_HY": true, + "IFT_IBM370PARCHAN": true, + "IFT_IDSL": true, + "IFT_IEEE1394": true, + "IFT_IEEE80211": true, + "IFT_IEEE80212": true, + "IFT_IEEE8023ADLAG": true, + "IFT_IFGSN": true, + "IFT_IMT": true, + "IFT_INFINIBAND": true, + "IFT_INTERLEAVE": true, + "IFT_IP": true, + "IFT_IPFORWARD": true, + "IFT_IPOVERATM": true, + "IFT_IPOVERCDLC": true, + "IFT_IPOVERCLAW": true, + "IFT_IPSWITCH": true, + "IFT_IPXIP": true, + "IFT_ISDN": true, + "IFT_ISDNBASIC": true, + "IFT_ISDNPRIMARY": true, + "IFT_ISDNS": true, + "IFT_ISDNU": true, + "IFT_ISO88022LLC": true, + "IFT_ISO88023": true, + "IFT_ISO88024": true, + "IFT_ISO88025": true, + "IFT_ISO88025CRFPINT": true, + "IFT_ISO88025DTR": true, + "IFT_ISO88025FIBER": true, + "IFT_ISO88026": true, + "IFT_ISUP": true, + "IFT_L2VLAN": true, + "IFT_L3IPVLAN": true, + "IFT_L3IPXVLAN": true, + "IFT_LAPB": true, + "IFT_LAPD": true, + "IFT_LAPF": true, + "IFT_LINEGROUP": true, + "IFT_LOCALTALK": true, + "IFT_LOOP": true, + "IFT_MEDIAMAILOVERIP": true, + "IFT_MFSIGLINK": true, + "IFT_MIOX25": true, + "IFT_MODEM": true, + "IFT_MPC": true, + "IFT_MPLS": true, + "IFT_MPLSTUNNEL": true, + "IFT_MSDSL": true, + "IFT_MVL": true, + "IFT_MYRINET": true, + "IFT_NFAS": true, + "IFT_NSIP": true, + "IFT_OPTICALCHANNEL": true, + "IFT_OPTICALTRANSPORT": true, + "IFT_OTHER": true, + "IFT_P10": true, + "IFT_P80": true, + "IFT_PARA": true, + "IFT_PDP": true, + "IFT_PFLOG": true, + "IFT_PFLOW": true, + "IFT_PFSYNC": true, + "IFT_PLC": true, + "IFT_PON155": true, + "IFT_PON622": true, + "IFT_POS": true, + "IFT_PPP": true, + "IFT_PPPMULTILINKBUNDLE": true, + "IFT_PROPATM": true, + "IFT_PROPBWAP2MP": true, + "IFT_PROPCNLS": true, + "IFT_PROPDOCSWIRELESSDOWNSTREAM": true, + "IFT_PROPDOCSWIRELESSMACLAYER": true, + "IFT_PROPDOCSWIRELESSUPSTREAM": true, + "IFT_PROPMUX": true, + "IFT_PROPVIRTUAL": true, + "IFT_PROPWIRELESSP2P": true, + "IFT_PTPSERIAL": true, + "IFT_PVC": true, + "IFT_Q2931": true, + "IFT_QLLC": true, + "IFT_RADIOMAC": true, + "IFT_RADSL": true, + "IFT_REACHDSL": true, + "IFT_RFC1483": true, + "IFT_RS232": true, + "IFT_RSRB": true, + "IFT_SDLC": true, + "IFT_SDSL": true, + "IFT_SHDSL": true, + "IFT_SIP": true, + "IFT_SIPSIG": true, + "IFT_SIPTG": true, + "IFT_SLIP": true, + "IFT_SMDSDXI": true, + "IFT_SMDSICIP": true, + "IFT_SONET": true, + "IFT_SONETOVERHEADCHANNEL": true, + "IFT_SONETPATH": true, + "IFT_SONETVT": true, + "IFT_SRP": true, + "IFT_SS7SIGLINK": true, + "IFT_STACKTOSTACK": true, + "IFT_STARLAN": true, + "IFT_STF": true, + "IFT_T1": true, + "IFT_TDLC": true, + "IFT_TELINK": true, + "IFT_TERMPAD": true, + "IFT_TR008": true, + "IFT_TRANSPHDLC": true, + "IFT_TUNNEL": true, + "IFT_ULTRA": true, + "IFT_USB": true, + "IFT_V11": true, + "IFT_V35": true, + "IFT_V36": true, + "IFT_V37": true, + "IFT_VDSL": true, + "IFT_VIRTUALIPADDRESS": true, + "IFT_VIRTUALTG": true, + "IFT_VOICEDID": true, + "IFT_VOICEEM": true, + "IFT_VOICEEMFGD": true, + "IFT_VOICEENCAP": true, + "IFT_VOICEFGDEANA": true, + "IFT_VOICEFXO": true, + "IFT_VOICEFXS": true, + "IFT_VOICEOVERATM": true, + "IFT_VOICEOVERCABLE": true, + "IFT_VOICEOVERFRAMERELAY": true, + "IFT_VOICEOVERIP": true, + "IFT_X213": true, + "IFT_X25": true, + "IFT_X25DDN": true, + "IFT_X25HUNTGROUP": true, + "IFT_X25MLP": true, + "IFT_X25PLE": true, + "IFT_XETHER": true, + "IGNBRK": true, + "IGNCR": true, + "IGNORE": true, + "IGNPAR": true, + "IMAXBEL": true, + "INFINITE": true, + "INLCR": true, + "INPCK": true, + "INVALID_FILE_ATTRIBUTES": true, + "IN_ACCESS": true, + "IN_ALL_EVENTS": true, + "IN_ATTRIB": true, + "IN_CLASSA_HOST": true, + "IN_CLASSA_MAX": true, + "IN_CLASSA_NET": true, + "IN_CLASSA_NSHIFT": true, + "IN_CLASSB_HOST": true, + "IN_CLASSB_MAX": true, + "IN_CLASSB_NET": true, + "IN_CLASSB_NSHIFT": true, + "IN_CLASSC_HOST": true, + "IN_CLASSC_NET": true, + "IN_CLASSC_NSHIFT": true, + "IN_CLASSD_HOST": true, + "IN_CLASSD_NET": true, + "IN_CLASSD_NSHIFT": true, + "IN_CLOEXEC": true, + "IN_CLOSE": true, + "IN_CLOSE_NOWRITE": true, + "IN_CLOSE_WRITE": true, + "IN_CREATE": true, + "IN_DELETE": true, + "IN_DELETE_SELF": true, + "IN_DONT_FOLLOW": true, + "IN_EXCL_UNLINK": true, + "IN_IGNORED": true, + "IN_ISDIR": true, + "IN_LINKLOCALNETNUM": true, + "IN_LOOPBACKNET": true, + "IN_MASK_ADD": true, + "IN_MODIFY": true, + "IN_MOVE": true, + "IN_MOVED_FROM": true, + "IN_MOVED_TO": true, + "IN_MOVE_SELF": true, + "IN_NONBLOCK": true, + "IN_ONESHOT": true, + "IN_ONLYDIR": true, + "IN_OPEN": true, + "IN_Q_OVERFLOW": true, + "IN_RFC3021_HOST": true, + "IN_RFC3021_MASK": true, + "IN_RFC3021_NET": true, + "IN_RFC3021_NSHIFT": true, + "IN_UNMOUNT": true, + "IOC_IN": true, + "IOC_INOUT": true, + "IOC_OUT": true, + "IOC_VENDOR": true, + "IOC_WS2": true, + "IO_REPARSE_TAG_SYMLINK": true, + "IPMreq": true, + "IPMreqn": true, + "IPPROTO_3PC": true, + "IPPROTO_ADFS": true, + "IPPROTO_AH": true, + "IPPROTO_AHIP": true, + "IPPROTO_APES": true, + "IPPROTO_ARGUS": true, + "IPPROTO_AX25": true, + "IPPROTO_BHA": true, + "IPPROTO_BLT": true, + "IPPROTO_BRSATMON": true, + "IPPROTO_CARP": true, + "IPPROTO_CFTP": true, + "IPPROTO_CHAOS": true, + "IPPROTO_CMTP": true, + "IPPROTO_COMP": true, + "IPPROTO_CPHB": true, + "IPPROTO_CPNX": true, + "IPPROTO_DCCP": true, + "IPPROTO_DDP": true, + "IPPROTO_DGP": true, + "IPPROTO_DIVERT": true, + "IPPROTO_DIVERT_INIT": true, + "IPPROTO_DIVERT_RESP": true, + "IPPROTO_DONE": true, + "IPPROTO_DSTOPTS": true, + "IPPROTO_EGP": true, + "IPPROTO_EMCON": true, + "IPPROTO_ENCAP": true, + "IPPROTO_EON": true, + "IPPROTO_ESP": true, + "IPPROTO_ETHERIP": true, + "IPPROTO_FRAGMENT": true, + "IPPROTO_GGP": true, + "IPPROTO_GMTP": true, + "IPPROTO_GRE": true, + "IPPROTO_HELLO": true, + "IPPROTO_HMP": true, + "IPPROTO_HOPOPTS": true, + "IPPROTO_ICMP": true, + "IPPROTO_ICMPV6": true, + "IPPROTO_IDP": true, + "IPPROTO_IDPR": true, + "IPPROTO_IDRP": true, + "IPPROTO_IGMP": true, + "IPPROTO_IGP": true, + "IPPROTO_IGRP": true, + "IPPROTO_IL": true, + "IPPROTO_INLSP": true, + "IPPROTO_INP": true, + "IPPROTO_IP": true, + "IPPROTO_IPCOMP": true, + "IPPROTO_IPCV": true, + "IPPROTO_IPEIP": true, + "IPPROTO_IPIP": true, + "IPPROTO_IPPC": true, + "IPPROTO_IPV4": true, + "IPPROTO_IPV6": true, + "IPPROTO_IPV6_ICMP": true, + "IPPROTO_IRTP": true, + "IPPROTO_KRYPTOLAN": true, + "IPPROTO_LARP": true, + "IPPROTO_LEAF1": true, + "IPPROTO_LEAF2": true, + "IPPROTO_MAX": true, + "IPPROTO_MAXID": true, + "IPPROTO_MEAS": true, + "IPPROTO_MH": true, + "IPPROTO_MHRP": true, + "IPPROTO_MICP": true, + "IPPROTO_MOBILE": true, + "IPPROTO_MPLS": true, + "IPPROTO_MTP": true, + "IPPROTO_MUX": true, + "IPPROTO_ND": true, + "IPPROTO_NHRP": true, + "IPPROTO_NONE": true, + "IPPROTO_NSP": true, + "IPPROTO_NVPII": true, + "IPPROTO_OLD_DIVERT": true, + "IPPROTO_OSPFIGP": true, + "IPPROTO_PFSYNC": true, + "IPPROTO_PGM": true, + "IPPROTO_PIGP": true, + "IPPROTO_PIM": true, + "IPPROTO_PRM": true, + "IPPROTO_PUP": true, + "IPPROTO_PVP": true, + "IPPROTO_RAW": true, + "IPPROTO_RCCMON": true, + "IPPROTO_RDP": true, + "IPPROTO_ROUTING": true, + "IPPROTO_RSVP": true, + "IPPROTO_RVD": true, + "IPPROTO_SATEXPAK": true, + "IPPROTO_SATMON": true, + "IPPROTO_SCCSP": true, + "IPPROTO_SCTP": true, + "IPPROTO_SDRP": true, + "IPPROTO_SEND": true, + "IPPROTO_SEP": true, + "IPPROTO_SKIP": true, + "IPPROTO_SPACER": true, + "IPPROTO_SRPC": true, + "IPPROTO_ST": true, + "IPPROTO_SVMTP": true, + "IPPROTO_SWIPE": true, + "IPPROTO_TCF": true, + "IPPROTO_TCP": true, + "IPPROTO_TLSP": true, + "IPPROTO_TP": true, + "IPPROTO_TPXX": true, + "IPPROTO_TRUNK1": true, + "IPPROTO_TRUNK2": true, + "IPPROTO_TTP": true, + "IPPROTO_UDP": true, + "IPPROTO_UDPLITE": true, + "IPPROTO_VINES": true, + "IPPROTO_VISA": true, + "IPPROTO_VMTP": true, + "IPPROTO_VRRP": true, + "IPPROTO_WBEXPAK": true, + "IPPROTO_WBMON": true, + "IPPROTO_WSN": true, + "IPPROTO_XNET": true, + "IPPROTO_XTP": true, + "IPV6_2292DSTOPTS": true, + "IPV6_2292HOPLIMIT": true, + "IPV6_2292HOPOPTS": true, + "IPV6_2292NEXTHOP": true, + "IPV6_2292PKTINFO": true, + "IPV6_2292PKTOPTIONS": true, + "IPV6_2292RTHDR": true, + "IPV6_ADDRFORM": true, + "IPV6_ADD_MEMBERSHIP": true, + "IPV6_AUTHHDR": true, + "IPV6_AUTH_LEVEL": true, + "IPV6_AUTOFLOWLABEL": true, + "IPV6_BINDANY": true, + "IPV6_BINDV6ONLY": true, + "IPV6_BOUND_IF": true, + "IPV6_CHECKSUM": true, + "IPV6_DEFAULT_MULTICAST_HOPS": true, + "IPV6_DEFAULT_MULTICAST_LOOP": true, + "IPV6_DEFHLIM": true, + "IPV6_DONTFRAG": true, + "IPV6_DROP_MEMBERSHIP": true, + "IPV6_DSTOPTS": true, + "IPV6_ESP_NETWORK_LEVEL": true, + "IPV6_ESP_TRANS_LEVEL": true, + "IPV6_FAITH": true, + "IPV6_FLOWINFO_MASK": true, + "IPV6_FLOWLABEL_MASK": true, + "IPV6_FRAGTTL": true, + "IPV6_FW_ADD": true, + "IPV6_FW_DEL": true, + "IPV6_FW_FLUSH": true, + "IPV6_FW_GET": true, + "IPV6_FW_ZERO": true, + "IPV6_HLIMDEC": true, + "IPV6_HOPLIMIT": true, + "IPV6_HOPOPTS": true, + "IPV6_IPCOMP_LEVEL": true, + "IPV6_IPSEC_POLICY": true, + "IPV6_JOIN_ANYCAST": true, + "IPV6_JOIN_GROUP": true, + "IPV6_LEAVE_ANYCAST": true, + "IPV6_LEAVE_GROUP": true, + "IPV6_MAXHLIM": true, + "IPV6_MAXOPTHDR": true, + "IPV6_MAXPACKET": true, + "IPV6_MAX_GROUP_SRC_FILTER": true, + "IPV6_MAX_MEMBERSHIPS": true, + "IPV6_MAX_SOCK_SRC_FILTER": true, + "IPV6_MIN_MEMBERSHIPS": true, + "IPV6_MMTU": true, + "IPV6_MSFILTER": true, + "IPV6_MTU": true, + "IPV6_MTU_DISCOVER": true, + "IPV6_MULTICAST_HOPS": true, + "IPV6_MULTICAST_IF": true, + "IPV6_MULTICAST_LOOP": true, + "IPV6_NEXTHOP": true, + "IPV6_OPTIONS": true, + "IPV6_PATHMTU": true, + "IPV6_PIPEX": true, + "IPV6_PKTINFO": true, + "IPV6_PMTUDISC_DO": true, + "IPV6_PMTUDISC_DONT": true, + "IPV6_PMTUDISC_PROBE": true, + "IPV6_PMTUDISC_WANT": true, + "IPV6_PORTRANGE": true, + "IPV6_PORTRANGE_DEFAULT": true, + "IPV6_PORTRANGE_HIGH": true, + "IPV6_PORTRANGE_LOW": true, + "IPV6_PREFER_TEMPADDR": true, + "IPV6_RECVDSTOPTS": true, + "IPV6_RECVDSTPORT": true, + "IPV6_RECVERR": true, + "IPV6_RECVHOPLIMIT": true, + "IPV6_RECVHOPOPTS": true, + "IPV6_RECVPATHMTU": true, + "IPV6_RECVPKTINFO": true, + "IPV6_RECVRTHDR": true, + "IPV6_RECVTCLASS": true, + "IPV6_ROUTER_ALERT": true, + "IPV6_RTABLE": true, + "IPV6_RTHDR": true, + "IPV6_RTHDRDSTOPTS": true, + "IPV6_RTHDR_LOOSE": true, + "IPV6_RTHDR_STRICT": true, + "IPV6_RTHDR_TYPE_0": true, + "IPV6_RXDSTOPTS": true, + "IPV6_RXHOPOPTS": true, + "IPV6_SOCKOPT_RESERVED1": true, + "IPV6_TCLASS": true, + "IPV6_UNICAST_HOPS": true, + "IPV6_USE_MIN_MTU": true, + "IPV6_V6ONLY": true, + "IPV6_VERSION": true, + "IPV6_VERSION_MASK": true, + "IPV6_XFRM_POLICY": true, + "IP_ADD_MEMBERSHIP": true, + "IP_ADD_SOURCE_MEMBERSHIP": true, + "IP_AUTH_LEVEL": true, + "IP_BINDANY": true, + "IP_BLOCK_SOURCE": true, + "IP_BOUND_IF": true, + "IP_DEFAULT_MULTICAST_LOOP": true, + "IP_DEFAULT_MULTICAST_TTL": true, + "IP_DF": true, + "IP_DIVERTFL": true, + "IP_DONTFRAG": true, + "IP_DROP_MEMBERSHIP": true, + "IP_DROP_SOURCE_MEMBERSHIP": true, + "IP_DUMMYNET3": true, + "IP_DUMMYNET_CONFIGURE": true, + "IP_DUMMYNET_DEL": true, + "IP_DUMMYNET_FLUSH": true, + "IP_DUMMYNET_GET": true, + "IP_EF": true, + "IP_ERRORMTU": true, + "IP_ESP_NETWORK_LEVEL": true, + "IP_ESP_TRANS_LEVEL": true, + "IP_FAITH": true, + "IP_FREEBIND": true, + "IP_FW3": true, + "IP_FW_ADD": true, + "IP_FW_DEL": true, + "IP_FW_FLUSH": true, + "IP_FW_GET": true, + "IP_FW_NAT_CFG": true, + "IP_FW_NAT_DEL": true, + "IP_FW_NAT_GET_CONFIG": true, + "IP_FW_NAT_GET_LOG": true, + "IP_FW_RESETLOG": true, + "IP_FW_TABLE_ADD": true, + "IP_FW_TABLE_DEL": true, + "IP_FW_TABLE_FLUSH": true, + "IP_FW_TABLE_GETSIZE": true, + "IP_FW_TABLE_LIST": true, + "IP_FW_ZERO": true, + "IP_HDRINCL": true, + "IP_IPCOMP_LEVEL": true, + "IP_IPSECFLOWINFO": true, + "IP_IPSEC_LOCAL_AUTH": true, + "IP_IPSEC_LOCAL_CRED": true, + "IP_IPSEC_LOCAL_ID": true, + "IP_IPSEC_POLICY": true, + "IP_IPSEC_REMOTE_AUTH": true, + "IP_IPSEC_REMOTE_CRED": true, + "IP_IPSEC_REMOTE_ID": true, + "IP_MAXPACKET": true, + "IP_MAX_GROUP_SRC_FILTER": true, + "IP_MAX_MEMBERSHIPS": true, + "IP_MAX_SOCK_MUTE_FILTER": true, + "IP_MAX_SOCK_SRC_FILTER": true, + "IP_MAX_SOURCE_FILTER": true, + "IP_MF": true, + "IP_MINFRAGSIZE": true, + "IP_MINTTL": true, + "IP_MIN_MEMBERSHIPS": true, + "IP_MSFILTER": true, + "IP_MSS": true, + "IP_MTU": true, + "IP_MTU_DISCOVER": true, + "IP_MULTICAST_IF": true, + "IP_MULTICAST_IFINDEX": true, + "IP_MULTICAST_LOOP": true, + "IP_MULTICAST_TTL": true, + "IP_MULTICAST_VIF": true, + "IP_NAT__XXX": true, + "IP_OFFMASK": true, + "IP_OLD_FW_ADD": true, + "IP_OLD_FW_DEL": true, + "IP_OLD_FW_FLUSH": true, + "IP_OLD_FW_GET": true, + "IP_OLD_FW_RESETLOG": true, + "IP_OLD_FW_ZERO": true, + "IP_ONESBCAST": true, + "IP_OPTIONS": true, + "IP_ORIGDSTADDR": true, + "IP_PASSSEC": true, + "IP_PIPEX": true, + "IP_PKTINFO": true, + "IP_PKTOPTIONS": true, + "IP_PMTUDISC": true, + "IP_PMTUDISC_DO": true, + "IP_PMTUDISC_DONT": true, + "IP_PMTUDISC_PROBE": true, + "IP_PMTUDISC_WANT": true, + "IP_PORTRANGE": true, + "IP_PORTRANGE_DEFAULT": true, + "IP_PORTRANGE_HIGH": true, + "IP_PORTRANGE_LOW": true, + "IP_RECVDSTADDR": true, + "IP_RECVDSTPORT": true, + "IP_RECVERR": true, + "IP_RECVIF": true, + "IP_RECVOPTS": true, + "IP_RECVORIGDSTADDR": true, + "IP_RECVPKTINFO": true, + "IP_RECVRETOPTS": true, + "IP_RECVRTABLE": true, + "IP_RECVTOS": true, + "IP_RECVTTL": true, + "IP_RETOPTS": true, + "IP_RF": true, + "IP_ROUTER_ALERT": true, + "IP_RSVP_OFF": true, + "IP_RSVP_ON": true, + "IP_RSVP_VIF_OFF": true, + "IP_RSVP_VIF_ON": true, + "IP_RTABLE": true, + "IP_SENDSRCADDR": true, + "IP_STRIPHDR": true, + "IP_TOS": true, + "IP_TRAFFIC_MGT_BACKGROUND": true, + "IP_TRANSPARENT": true, + "IP_TTL": true, + "IP_UNBLOCK_SOURCE": true, + "IP_XFRM_POLICY": true, + "IPv6MTUInfo": true, + "IPv6Mreq": true, + "ISIG": true, + "ISTRIP": true, + "IUCLC": true, + "IUTF8": true, + "IXANY": true, + "IXOFF": true, + "IXON": true, + "IfAddrmsg": true, + "IfAnnounceMsghdr": true, + "IfData": true, + "IfInfomsg": true, + "IfMsghdr": true, + "IfaMsghdr": true, + "IfmaMsghdr": true, + "IfmaMsghdr2": true, + "ImplementsGetwd": true, + "Inet4Pktinfo": true, + "Inet6Pktinfo": true, + "InotifyAddWatch": true, + "InotifyEvent": true, + "InotifyInit": true, + "InotifyInit1": true, + "InotifyRmWatch": true, + "InterfaceAddrMessage": true, + "InterfaceAnnounceMessage": true, + "InterfaceInfo": true, + "InterfaceMessage": true, + "InterfaceMulticastAddrMessage": true, + "InvalidHandle": true, + "Ioperm": true, + "Iopl": true, + "Iovec": true, + "IpAdapterInfo": true, + "IpAddrString": true, + "IpAddressString": true, + "IpMaskString": true, + "Issetugid": true, + "KEY_ALL_ACCESS": true, + "KEY_CREATE_LINK": true, + "KEY_CREATE_SUB_KEY": true, + "KEY_ENUMERATE_SUB_KEYS": true, + "KEY_EXECUTE": true, + "KEY_NOTIFY": true, + "KEY_QUERY_VALUE": true, + "KEY_READ": true, + "KEY_SET_VALUE": true, + "KEY_WOW64_32KEY": true, + "KEY_WOW64_64KEY": true, + "KEY_WRITE": true, + "Kevent": true, + "Kevent_t": true, + "Kill": true, + "Klogctl": true, + "Kqueue": true, + "LANG_ENGLISH": true, + "LAYERED_PROTOCOL": true, + "LCNT_OVERLOAD_FLUSH": true, + "LINUX_REBOOT_CMD_CAD_OFF": true, + "LINUX_REBOOT_CMD_CAD_ON": true, + "LINUX_REBOOT_CMD_HALT": true, + "LINUX_REBOOT_CMD_KEXEC": true, + "LINUX_REBOOT_CMD_POWER_OFF": true, + "LINUX_REBOOT_CMD_RESTART": true, + "LINUX_REBOOT_CMD_RESTART2": true, + "LINUX_REBOOT_CMD_SW_SUSPEND": true, + "LINUX_REBOOT_MAGIC1": true, + "LINUX_REBOOT_MAGIC2": true, + "LOCK_EX": true, + "LOCK_NB": true, + "LOCK_SH": true, + "LOCK_UN": true, + "LazyDLL": true, + "LazyProc": true, + "Lchown": true, + "Linger": true, + "Link": true, + "Listen": true, + "Listxattr": true, + "LoadCancelIoEx": true, + "LoadConnectEx": true, + "LoadCreateSymbolicLink": true, + "LoadDLL": true, + "LoadGetAddrInfo": true, + "LoadLibrary": true, + "LoadSetFileCompletionNotificationModes": true, + "LocalFree": true, + "Log2phys_t": true, + "LookupAccountName": true, + "LookupAccountSid": true, + "LookupSID": true, + "LsfJump": true, + "LsfSocket": true, + "LsfStmt": true, + "Lstat": true, + "MADV_AUTOSYNC": true, + "MADV_CAN_REUSE": true, + "MADV_CORE": true, + "MADV_DOFORK": true, + "MADV_DONTFORK": true, + "MADV_DONTNEED": true, + "MADV_FREE": true, + "MADV_FREE_REUSABLE": true, + "MADV_FREE_REUSE": true, + "MADV_HUGEPAGE": true, + "MADV_HWPOISON": true, + "MADV_MERGEABLE": true, + "MADV_NOCORE": true, + "MADV_NOHUGEPAGE": true, + "MADV_NORMAL": true, + "MADV_NOSYNC": true, + "MADV_PROTECT": true, + "MADV_RANDOM": true, + "MADV_REMOVE": true, + "MADV_SEQUENTIAL": true, + "MADV_SPACEAVAIL": true, + "MADV_UNMERGEABLE": true, + "MADV_WILLNEED": true, + "MADV_ZERO_WIRED_PAGES": true, + "MAP_32BIT": true, + "MAP_ALIGNED_SUPER": true, + "MAP_ALIGNMENT_16MB": true, + "MAP_ALIGNMENT_1TB": true, + "MAP_ALIGNMENT_256TB": true, + "MAP_ALIGNMENT_4GB": true, + "MAP_ALIGNMENT_64KB": true, + "MAP_ALIGNMENT_64PB": true, + "MAP_ALIGNMENT_MASK": true, + "MAP_ALIGNMENT_SHIFT": true, + "MAP_ANON": true, + "MAP_ANONYMOUS": true, + "MAP_COPY": true, + "MAP_DENYWRITE": true, + "MAP_EXECUTABLE": true, + "MAP_FILE": true, + "MAP_FIXED": true, + "MAP_FLAGMASK": true, + "MAP_GROWSDOWN": true, + "MAP_HASSEMAPHORE": true, + "MAP_HUGETLB": true, + "MAP_INHERIT": true, + "MAP_INHERIT_COPY": true, + "MAP_INHERIT_DEFAULT": true, + "MAP_INHERIT_DONATE_COPY": true, + "MAP_INHERIT_NONE": true, + "MAP_INHERIT_SHARE": true, + "MAP_JIT": true, + "MAP_LOCKED": true, + "MAP_NOCACHE": true, + "MAP_NOCORE": true, + "MAP_NOEXTEND": true, + "MAP_NONBLOCK": true, + "MAP_NORESERVE": true, + "MAP_NOSYNC": true, + "MAP_POPULATE": true, + "MAP_PREFAULT_READ": true, + "MAP_PRIVATE": true, + "MAP_RENAME": true, + "MAP_RESERVED0080": true, + "MAP_RESERVED0100": true, + "MAP_SHARED": true, + "MAP_STACK": true, + "MAP_TRYFIXED": true, + "MAP_TYPE": true, + "MAP_WIRED": true, + "MAXIMUM_REPARSE_DATA_BUFFER_SIZE": true, + "MAXLEN_IFDESCR": true, + "MAXLEN_PHYSADDR": true, + "MAX_ADAPTER_ADDRESS_LENGTH": true, + "MAX_ADAPTER_DESCRIPTION_LENGTH": true, + "MAX_ADAPTER_NAME_LENGTH": true, + "MAX_COMPUTERNAME_LENGTH": true, + "MAX_INTERFACE_NAME_LEN": true, + "MAX_LONG_PATH": true, + "MAX_PATH": true, + "MAX_PROTOCOL_CHAIN": true, + "MCL_CURRENT": true, + "MCL_FUTURE": true, + "MNT_DETACH": true, + "MNT_EXPIRE": true, + "MNT_FORCE": true, + "MSG_BCAST": true, + "MSG_CMSG_CLOEXEC": true, + "MSG_COMPAT": true, + "MSG_CONFIRM": true, + "MSG_CONTROLMBUF": true, + "MSG_CTRUNC": true, + "MSG_DONTROUTE": true, + "MSG_DONTWAIT": true, + "MSG_EOF": true, + "MSG_EOR": true, + "MSG_ERRQUEUE": true, + "MSG_FASTOPEN": true, + "MSG_FIN": true, + "MSG_FLUSH": true, + "MSG_HAVEMORE": true, + "MSG_HOLD": true, + "MSG_IOVUSRSPACE": true, + "MSG_LENUSRSPACE": true, + "MSG_MCAST": true, + "MSG_MORE": true, + "MSG_NAMEMBUF": true, + "MSG_NBIO": true, + "MSG_NEEDSA": true, + "MSG_NOSIGNAL": true, + "MSG_NOTIFICATION": true, + "MSG_OOB": true, + "MSG_PEEK": true, + "MSG_PROXY": true, + "MSG_RCVMORE": true, + "MSG_RST": true, + "MSG_SEND": true, + "MSG_SYN": true, + "MSG_TRUNC": true, + "MSG_TRYHARD": true, + "MSG_USERFLAGS": true, + "MSG_WAITALL": true, + "MSG_WAITFORONE": true, + "MSG_WAITSTREAM": true, + "MS_ACTIVE": true, + "MS_ASYNC": true, + "MS_BIND": true, + "MS_DEACTIVATE": true, + "MS_DIRSYNC": true, + "MS_INVALIDATE": true, + "MS_I_VERSION": true, + "MS_KERNMOUNT": true, + "MS_KILLPAGES": true, + "MS_MANDLOCK": true, + "MS_MGC_MSK": true, + "MS_MGC_VAL": true, + "MS_MOVE": true, + "MS_NOATIME": true, + "MS_NODEV": true, + "MS_NODIRATIME": true, + "MS_NOEXEC": true, + "MS_NOSUID": true, + "MS_NOUSER": true, + "MS_POSIXACL": true, + "MS_PRIVATE": true, + "MS_RDONLY": true, + "MS_REC": true, + "MS_RELATIME": true, + "MS_REMOUNT": true, + "MS_RMT_MASK": true, + "MS_SHARED": true, + "MS_SILENT": true, + "MS_SLAVE": true, + "MS_STRICTATIME": true, + "MS_SYNC": true, + "MS_SYNCHRONOUS": true, + "MS_UNBINDABLE": true, + "Madvise": true, + "MapViewOfFile": true, + "MaxTokenInfoClass": true, + "Mclpool": true, + "MibIfRow": true, + "Mkdir": true, + "Mkdirat": true, + "Mkfifo": true, + "Mknod": true, + "Mknodat": true, + "Mlock": true, + "Mlockall": true, + "Mmap": true, + "Mount": true, + "MoveFile": true, + "Mprotect": true, + "Msghdr": true, + "Munlock": true, + "Munlockall": true, + "Munmap": true, + "MustLoadDLL": true, + "NAME_MAX": true, + "NETLINK_ADD_MEMBERSHIP": true, + "NETLINK_AUDIT": true, + "NETLINK_BROADCAST_ERROR": true, + "NETLINK_CONNECTOR": true, + "NETLINK_DNRTMSG": true, + "NETLINK_DROP_MEMBERSHIP": true, + "NETLINK_ECRYPTFS": true, + "NETLINK_FIB_LOOKUP": true, + "NETLINK_FIREWALL": true, + "NETLINK_GENERIC": true, + "NETLINK_INET_DIAG": true, + "NETLINK_IP6_FW": true, + "NETLINK_ISCSI": true, + "NETLINK_KOBJECT_UEVENT": true, + "NETLINK_NETFILTER": true, + "NETLINK_NFLOG": true, + "NETLINK_NO_ENOBUFS": true, + "NETLINK_PKTINFO": true, + "NETLINK_RDMA": true, + "NETLINK_ROUTE": true, + "NETLINK_SCSITRANSPORT": true, + "NETLINK_SELINUX": true, + "NETLINK_UNUSED": true, + "NETLINK_USERSOCK": true, + "NETLINK_XFRM": true, + "NET_RT_DUMP": true, + "NET_RT_DUMP2": true, + "NET_RT_FLAGS": true, + "NET_RT_IFLIST": true, + "NET_RT_IFLIST2": true, + "NET_RT_IFLISTL": true, + "NET_RT_IFMALIST": true, + "NET_RT_MAXID": true, + "NET_RT_OIFLIST": true, + "NET_RT_OOIFLIST": true, + "NET_RT_STAT": true, + "NET_RT_STATS": true, + "NET_RT_TABLE": true, + "NET_RT_TRASH": true, + "NLA_ALIGNTO": true, + "NLA_F_NESTED": true, + "NLA_F_NET_BYTEORDER": true, + "NLA_HDRLEN": true, + "NLMSG_ALIGNTO": true, + "NLMSG_DONE": true, + "NLMSG_ERROR": true, + "NLMSG_HDRLEN": true, + "NLMSG_MIN_TYPE": true, + "NLMSG_NOOP": true, + "NLMSG_OVERRUN": true, + "NLM_F_ACK": true, + "NLM_F_APPEND": true, + "NLM_F_ATOMIC": true, + "NLM_F_CREATE": true, + "NLM_F_DUMP": true, + "NLM_F_ECHO": true, + "NLM_F_EXCL": true, + "NLM_F_MATCH": true, + "NLM_F_MULTI": true, + "NLM_F_REPLACE": true, + "NLM_F_REQUEST": true, + "NLM_F_ROOT": true, + "NOFLSH": true, + "NOTE_ABSOLUTE": true, + "NOTE_ATTRIB": true, + "NOTE_CHILD": true, + "NOTE_DELETE": true, + "NOTE_EOF": true, + "NOTE_EXEC": true, + "NOTE_EXIT": true, + "NOTE_EXITSTATUS": true, + "NOTE_EXTEND": true, + "NOTE_FFAND": true, + "NOTE_FFCOPY": true, + "NOTE_FFCTRLMASK": true, + "NOTE_FFLAGSMASK": true, + "NOTE_FFNOP": true, + "NOTE_FFOR": true, + "NOTE_FORK": true, + "NOTE_LINK": true, + "NOTE_LOWAT": true, + "NOTE_NONE": true, + "NOTE_NSECONDS": true, + "NOTE_PCTRLMASK": true, + "NOTE_PDATAMASK": true, + "NOTE_REAP": true, + "NOTE_RENAME": true, + "NOTE_RESOURCEEND": true, + "NOTE_REVOKE": true, + "NOTE_SECONDS": true, + "NOTE_SIGNAL": true, + "NOTE_TRACK": true, + "NOTE_TRACKERR": true, + "NOTE_TRIGGER": true, + "NOTE_TRUNCATE": true, + "NOTE_USECONDS": true, + "NOTE_VM_ERROR": true, + "NOTE_VM_PRESSURE": true, + "NOTE_VM_PRESSURE_SUDDEN_TERMINATE": true, + "NOTE_VM_PRESSURE_TERMINATE": true, + "NOTE_WRITE": true, + "NameCanonical": true, + "NameCanonicalEx": true, + "NameDisplay": true, + "NameDnsDomain": true, + "NameFullyQualifiedDN": true, + "NameSamCompatible": true, + "NameServicePrincipal": true, + "NameUniqueId": true, + "NameUnknown": true, + "NameUserPrincipal": true, + "Nanosleep": true, + "NetApiBufferFree": true, + "NetGetJoinInformation": true, + "NetSetupDomainName": true, + "NetSetupUnjoined": true, + "NetSetupUnknownStatus": true, + "NetSetupWorkgroupName": true, + "NetUserGetInfo": true, + "NetlinkMessage": true, + "NetlinkRIB": true, + "NetlinkRouteAttr": true, + "NetlinkRouteRequest": true, + "NewCallback": true, + "NewCallbackCDecl": true, + "NewLazyDLL": true, + "NlAttr": true, + "NlMsgerr": true, + "NlMsghdr": true, + "NsecToFiletime": true, + "NsecToTimespec": true, + "NsecToTimeval": true, + "Ntohs": true, + "OCRNL": true, + "OFDEL": true, + "OFILL": true, + "OFIOGETBMAP": true, + "OID_PKIX_KP_SERVER_AUTH": true, + "OID_SERVER_GATED_CRYPTO": true, + "OID_SGC_NETSCAPE": true, + "OLCUC": true, + "ONLCR": true, + "ONLRET": true, + "ONOCR": true, + "ONOEOT": true, + "OPEN_ALWAYS": true, + "OPEN_EXISTING": true, + "OPOST": true, + "O_ACCMODE": true, + "O_ALERT": true, + "O_ALT_IO": true, + "O_APPEND": true, + "O_ASYNC": true, + "O_CLOEXEC": true, + "O_CREAT": true, + "O_DIRECT": true, + "O_DIRECTORY": true, + "O_DSYNC": true, + "O_EVTONLY": true, + "O_EXCL": true, + "O_EXEC": true, + "O_EXLOCK": true, + "O_FSYNC": true, + "O_LARGEFILE": true, + "O_NDELAY": true, + "O_NOATIME": true, + "O_NOCTTY": true, + "O_NOFOLLOW": true, + "O_NONBLOCK": true, + "O_NOSIGPIPE": true, + "O_POPUP": true, + "O_RDONLY": true, + "O_RDWR": true, + "O_RSYNC": true, + "O_SHLOCK": true, + "O_SYMLINK": true, + "O_SYNC": true, + "O_TRUNC": true, + "O_TTY_INIT": true, + "O_WRONLY": true, + "Open": true, + "OpenCurrentProcessToken": true, + "OpenProcess": true, + "OpenProcessToken": true, + "Openat": true, + "Overlapped": true, + "PACKET_ADD_MEMBERSHIP": true, + "PACKET_BROADCAST": true, + "PACKET_DROP_MEMBERSHIP": true, + "PACKET_FASTROUTE": true, + "PACKET_HOST": true, + "PACKET_LOOPBACK": true, + "PACKET_MR_ALLMULTI": true, + "PACKET_MR_MULTICAST": true, + "PACKET_MR_PROMISC": true, + "PACKET_MULTICAST": true, + "PACKET_OTHERHOST": true, + "PACKET_OUTGOING": true, + "PACKET_RECV_OUTPUT": true, + "PACKET_RX_RING": true, + "PACKET_STATISTICS": true, + "PAGE_EXECUTE_READ": true, + "PAGE_EXECUTE_READWRITE": true, + "PAGE_EXECUTE_WRITECOPY": true, + "PAGE_READONLY": true, + "PAGE_READWRITE": true, + "PAGE_WRITECOPY": true, + "PARENB": true, + "PARMRK": true, + "PARODD": true, + "PENDIN": true, + "PFL_HIDDEN": true, + "PFL_MATCHES_PROTOCOL_ZERO": true, + "PFL_MULTIPLE_PROTO_ENTRIES": true, + "PFL_NETWORKDIRECT_PROVIDER": true, + "PFL_RECOMMENDED_PROTO_ENTRY": true, + "PF_FLUSH": true, + "PKCS_7_ASN_ENCODING": true, + "PMC5_PIPELINE_FLUSH": true, + "PRIO_PGRP": true, + "PRIO_PROCESS": true, + "PRIO_USER": true, + "PRI_IOFLUSH": true, + "PROCESS_QUERY_INFORMATION": true, + "PROCESS_TERMINATE": true, + "PROT_EXEC": true, + "PROT_GROWSDOWN": true, + "PROT_GROWSUP": true, + "PROT_NONE": true, + "PROT_READ": true, + "PROT_WRITE": true, + "PROV_DH_SCHANNEL": true, + "PROV_DSS": true, + "PROV_DSS_DH": true, + "PROV_EC_ECDSA_FULL": true, + "PROV_EC_ECDSA_SIG": true, + "PROV_EC_ECNRA_FULL": true, + "PROV_EC_ECNRA_SIG": true, + "PROV_FORTEZZA": true, + "PROV_INTEL_SEC": true, + "PROV_MS_EXCHANGE": true, + "PROV_REPLACE_OWF": true, + "PROV_RNG": true, + "PROV_RSA_AES": true, + "PROV_RSA_FULL": true, + "PROV_RSA_SCHANNEL": true, + "PROV_RSA_SIG": true, + "PROV_SPYRUS_LYNKS": true, + "PROV_SSL": true, + "PR_CAPBSET_DROP": true, + "PR_CAPBSET_READ": true, + "PR_CLEAR_SECCOMP_FILTER": true, + "PR_ENDIAN_BIG": true, + "PR_ENDIAN_LITTLE": true, + "PR_ENDIAN_PPC_LITTLE": true, + "PR_FPEMU_NOPRINT": true, + "PR_FPEMU_SIGFPE": true, + "PR_FP_EXC_ASYNC": true, + "PR_FP_EXC_DISABLED": true, + "PR_FP_EXC_DIV": true, + "PR_FP_EXC_INV": true, + "PR_FP_EXC_NONRECOV": true, + "PR_FP_EXC_OVF": true, + "PR_FP_EXC_PRECISE": true, + "PR_FP_EXC_RES": true, + "PR_FP_EXC_SW_ENABLE": true, + "PR_FP_EXC_UND": true, + "PR_GET_DUMPABLE": true, + "PR_GET_ENDIAN": true, + "PR_GET_FPEMU": true, + "PR_GET_FPEXC": true, + "PR_GET_KEEPCAPS": true, + "PR_GET_NAME": true, + "PR_GET_PDEATHSIG": true, + "PR_GET_SECCOMP": true, + "PR_GET_SECCOMP_FILTER": true, + "PR_GET_SECUREBITS": true, + "PR_GET_TIMERSLACK": true, + "PR_GET_TIMING": true, + "PR_GET_TSC": true, + "PR_GET_UNALIGN": true, + "PR_MCE_KILL": true, + "PR_MCE_KILL_CLEAR": true, + "PR_MCE_KILL_DEFAULT": true, + "PR_MCE_KILL_EARLY": true, + "PR_MCE_KILL_GET": true, + "PR_MCE_KILL_LATE": true, + "PR_MCE_KILL_SET": true, + "PR_SECCOMP_FILTER_EVENT": true, + "PR_SECCOMP_FILTER_SYSCALL": true, + "PR_SET_DUMPABLE": true, + "PR_SET_ENDIAN": true, + "PR_SET_FPEMU": true, + "PR_SET_FPEXC": true, + "PR_SET_KEEPCAPS": true, + "PR_SET_NAME": true, + "PR_SET_PDEATHSIG": true, + "PR_SET_PTRACER": true, + "PR_SET_SECCOMP": true, + "PR_SET_SECCOMP_FILTER": true, + "PR_SET_SECUREBITS": true, + "PR_SET_TIMERSLACK": true, + "PR_SET_TIMING": true, + "PR_SET_TSC": true, + "PR_SET_UNALIGN": true, + "PR_TASK_PERF_EVENTS_DISABLE": true, + "PR_TASK_PERF_EVENTS_ENABLE": true, + "PR_TIMING_STATISTICAL": true, + "PR_TIMING_TIMESTAMP": true, + "PR_TSC_ENABLE": true, + "PR_TSC_SIGSEGV": true, + "PR_UNALIGN_NOPRINT": true, + "PR_UNALIGN_SIGBUS": true, + "PTRACE_ARCH_PRCTL": true, + "PTRACE_ATTACH": true, + "PTRACE_CONT": true, + "PTRACE_DETACH": true, + "PTRACE_EVENT_CLONE": true, + "PTRACE_EVENT_EXEC": true, + "PTRACE_EVENT_EXIT": true, + "PTRACE_EVENT_FORK": true, + "PTRACE_EVENT_VFORK": true, + "PTRACE_EVENT_VFORK_DONE": true, + "PTRACE_GETCRUNCHREGS": true, + "PTRACE_GETEVENTMSG": true, + "PTRACE_GETFPREGS": true, + "PTRACE_GETFPXREGS": true, + "PTRACE_GETHBPREGS": true, + "PTRACE_GETREGS": true, + "PTRACE_GETREGSET": true, + "PTRACE_GETSIGINFO": true, + "PTRACE_GETVFPREGS": true, + "PTRACE_GETWMMXREGS": true, + "PTRACE_GET_THREAD_AREA": true, + "PTRACE_KILL": true, + "PTRACE_OLDSETOPTIONS": true, + "PTRACE_O_MASK": true, + "PTRACE_O_TRACECLONE": true, + "PTRACE_O_TRACEEXEC": true, + "PTRACE_O_TRACEEXIT": true, + "PTRACE_O_TRACEFORK": true, + "PTRACE_O_TRACESYSGOOD": true, + "PTRACE_O_TRACEVFORK": true, + "PTRACE_O_TRACEVFORKDONE": true, + "PTRACE_PEEKDATA": true, + "PTRACE_PEEKTEXT": true, + "PTRACE_PEEKUSR": true, + "PTRACE_POKEDATA": true, + "PTRACE_POKETEXT": true, + "PTRACE_POKEUSR": true, + "PTRACE_SETCRUNCHREGS": true, + "PTRACE_SETFPREGS": true, + "PTRACE_SETFPXREGS": true, + "PTRACE_SETHBPREGS": true, + "PTRACE_SETOPTIONS": true, + "PTRACE_SETREGS": true, + "PTRACE_SETREGSET": true, + "PTRACE_SETSIGINFO": true, + "PTRACE_SETVFPREGS": true, + "PTRACE_SETWMMXREGS": true, + "PTRACE_SET_SYSCALL": true, + "PTRACE_SET_THREAD_AREA": true, + "PTRACE_SINGLEBLOCK": true, + "PTRACE_SINGLESTEP": true, + "PTRACE_SYSCALL": true, + "PTRACE_SYSEMU": true, + "PTRACE_SYSEMU_SINGLESTEP": true, + "PTRACE_TRACEME": true, + "PT_ATTACH": true, + "PT_ATTACHEXC": true, + "PT_CONTINUE": true, + "PT_DATA_ADDR": true, + "PT_DENY_ATTACH": true, + "PT_DETACH": true, + "PT_FIRSTMACH": true, + "PT_FORCEQUOTA": true, + "PT_KILL": true, + "PT_MASK": true, + "PT_READ_D": true, + "PT_READ_I": true, + "PT_READ_U": true, + "PT_SIGEXC": true, + "PT_STEP": true, + "PT_TEXT_ADDR": true, + "PT_TEXT_END_ADDR": true, + "PT_THUPDATE": true, + "PT_TRACE_ME": true, + "PT_WRITE_D": true, + "PT_WRITE_I": true, + "PT_WRITE_U": true, + "ParseDirent": true, + "ParseNetlinkMessage": true, + "ParseNetlinkRouteAttr": true, + "ParseRoutingMessage": true, + "ParseRoutingSockaddr": true, + "ParseSocketControlMessage": true, + "ParseUnixCredentials": true, + "ParseUnixRights": true, + "PathMax": true, + "Pathconf": true, + "Pause": true, + "Pipe": true, + "Pipe2": true, + "PivotRoot": true, + "Pointer": true, + "PostQueuedCompletionStatus": true, + "Pread": true, + "Proc": true, + "ProcAttr": true, + "Process32First": true, + "Process32Next": true, + "ProcessEntry32": true, + "ProcessInformation": true, + "Protoent": true, + "PtraceAttach": true, + "PtraceCont": true, + "PtraceDetach": true, + "PtraceGetEventMsg": true, + "PtraceGetRegs": true, + "PtracePeekData": true, + "PtracePeekText": true, + "PtracePokeData": true, + "PtracePokeText": true, + "PtraceRegs": true, + "PtraceSetOptions": true, + "PtraceSetRegs": true, + "PtraceSingleStep": true, + "PtraceSyscall": true, + "Pwrite": true, + "REG_BINARY": true, + "REG_DWORD": true, + "REG_DWORD_BIG_ENDIAN": true, + "REG_DWORD_LITTLE_ENDIAN": true, + "REG_EXPAND_SZ": true, + "REG_FULL_RESOURCE_DESCRIPTOR": true, + "REG_LINK": true, + "REG_MULTI_SZ": true, + "REG_NONE": true, + "REG_QWORD": true, + "REG_QWORD_LITTLE_ENDIAN": true, + "REG_RESOURCE_LIST": true, + "REG_RESOURCE_REQUIREMENTS_LIST": true, + "REG_SZ": true, + "RLIMIT_AS": true, + "RLIMIT_CORE": true, + "RLIMIT_CPU": true, + "RLIMIT_DATA": true, + "RLIMIT_FSIZE": true, + "RLIMIT_NOFILE": true, + "RLIMIT_STACK": true, + "RLIM_INFINITY": true, + "RTAX_ADVMSS": true, + "RTAX_AUTHOR": true, + "RTAX_BRD": true, + "RTAX_CWND": true, + "RTAX_DST": true, + "RTAX_FEATURES": true, + "RTAX_FEATURE_ALLFRAG": true, + "RTAX_FEATURE_ECN": true, + "RTAX_FEATURE_SACK": true, + "RTAX_FEATURE_TIMESTAMP": true, + "RTAX_GATEWAY": true, + "RTAX_GENMASK": true, + "RTAX_HOPLIMIT": true, + "RTAX_IFA": true, + "RTAX_IFP": true, + "RTAX_INITCWND": true, + "RTAX_INITRWND": true, + "RTAX_LABEL": true, + "RTAX_LOCK": true, + "RTAX_MAX": true, + "RTAX_MTU": true, + "RTAX_NETMASK": true, + "RTAX_REORDERING": true, + "RTAX_RTO_MIN": true, + "RTAX_RTT": true, + "RTAX_RTTVAR": true, + "RTAX_SRC": true, + "RTAX_SRCMASK": true, + "RTAX_SSTHRESH": true, + "RTAX_TAG": true, + "RTAX_UNSPEC": true, + "RTAX_WINDOW": true, + "RTA_ALIGNTO": true, + "RTA_AUTHOR": true, + "RTA_BRD": true, + "RTA_CACHEINFO": true, + "RTA_DST": true, + "RTA_FLOW": true, + "RTA_GATEWAY": true, + "RTA_GENMASK": true, + "RTA_IFA": true, + "RTA_IFP": true, + "RTA_IIF": true, + "RTA_LABEL": true, + "RTA_MAX": true, + "RTA_METRICS": true, + "RTA_MULTIPATH": true, + "RTA_NETMASK": true, + "RTA_OIF": true, + "RTA_PREFSRC": true, + "RTA_PRIORITY": true, + "RTA_SRC": true, + "RTA_SRCMASK": true, + "RTA_TABLE": true, + "RTA_TAG": true, + "RTA_UNSPEC": true, + "RTCF_DIRECTSRC": true, + "RTCF_DOREDIRECT": true, + "RTCF_LOG": true, + "RTCF_MASQ": true, + "RTCF_NAT": true, + "RTCF_VALVE": true, + "RTF_ADDRCLASSMASK": true, + "RTF_ADDRCONF": true, + "RTF_ALLONLINK": true, + "RTF_ANNOUNCE": true, + "RTF_BLACKHOLE": true, + "RTF_BROADCAST": true, + "RTF_CACHE": true, + "RTF_CLONED": true, + "RTF_CLONING": true, + "RTF_CONDEMNED": true, + "RTF_DEFAULT": true, + "RTF_DELCLONE": true, + "RTF_DONE": true, + "RTF_DYNAMIC": true, + "RTF_FLOW": true, + "RTF_FMASK": true, + "RTF_GATEWAY": true, + "RTF_GWFLAG_COMPAT": true, + "RTF_HOST": true, + "RTF_IFREF": true, + "RTF_IFSCOPE": true, + "RTF_INTERFACE": true, + "RTF_IRTT": true, + "RTF_LINKRT": true, + "RTF_LLDATA": true, + "RTF_LLINFO": true, + "RTF_LOCAL": true, + "RTF_MASK": true, + "RTF_MODIFIED": true, + "RTF_MPATH": true, + "RTF_MPLS": true, + "RTF_MSS": true, + "RTF_MTU": true, + "RTF_MULTICAST": true, + "RTF_NAT": true, + "RTF_NOFORWARD": true, + "RTF_NONEXTHOP": true, + "RTF_NOPMTUDISC": true, + "RTF_PERMANENT_ARP": true, + "RTF_PINNED": true, + "RTF_POLICY": true, + "RTF_PRCLONING": true, + "RTF_PROTO1": true, + "RTF_PROTO2": true, + "RTF_PROTO3": true, + "RTF_REINSTATE": true, + "RTF_REJECT": true, + "RTF_RNH_LOCKED": true, + "RTF_SOURCE": true, + "RTF_SRC": true, + "RTF_STATIC": true, + "RTF_STICKY": true, + "RTF_THROW": true, + "RTF_TUNNEL": true, + "RTF_UP": true, + "RTF_USETRAILERS": true, + "RTF_WASCLONED": true, + "RTF_WINDOW": true, + "RTF_XRESOLVE": true, + "RTM_ADD": true, + "RTM_BASE": true, + "RTM_CHANGE": true, + "RTM_CHGADDR": true, + "RTM_DELACTION": true, + "RTM_DELADDR": true, + "RTM_DELADDRLABEL": true, + "RTM_DELETE": true, + "RTM_DELLINK": true, + "RTM_DELMADDR": true, + "RTM_DELNEIGH": true, + "RTM_DELQDISC": true, + "RTM_DELROUTE": true, + "RTM_DELRULE": true, + "RTM_DELTCLASS": true, + "RTM_DELTFILTER": true, + "RTM_DESYNC": true, + "RTM_F_CLONED": true, + "RTM_F_EQUALIZE": true, + "RTM_F_NOTIFY": true, + "RTM_F_PREFIX": true, + "RTM_GET": true, + "RTM_GET2": true, + "RTM_GETACTION": true, + "RTM_GETADDR": true, + "RTM_GETADDRLABEL": true, + "RTM_GETANYCAST": true, + "RTM_GETDCB": true, + "RTM_GETLINK": true, + "RTM_GETMULTICAST": true, + "RTM_GETNEIGH": true, + "RTM_GETNEIGHTBL": true, + "RTM_GETQDISC": true, + "RTM_GETROUTE": true, + "RTM_GETRULE": true, + "RTM_GETTCLASS": true, + "RTM_GETTFILTER": true, + "RTM_IEEE80211": true, + "RTM_IFANNOUNCE": true, + "RTM_IFINFO": true, + "RTM_IFINFO2": true, + "RTM_LLINFO_UPD": true, + "RTM_LOCK": true, + "RTM_LOSING": true, + "RTM_MAX": true, + "RTM_MAXSIZE": true, + "RTM_MISS": true, + "RTM_NEWACTION": true, + "RTM_NEWADDR": true, + "RTM_NEWADDRLABEL": true, + "RTM_NEWLINK": true, + "RTM_NEWMADDR": true, + "RTM_NEWMADDR2": true, + "RTM_NEWNDUSEROPT": true, + "RTM_NEWNEIGH": true, + "RTM_NEWNEIGHTBL": true, + "RTM_NEWPREFIX": true, + "RTM_NEWQDISC": true, + "RTM_NEWROUTE": true, + "RTM_NEWRULE": true, + "RTM_NEWTCLASS": true, + "RTM_NEWTFILTER": true, + "RTM_NR_FAMILIES": true, + "RTM_NR_MSGTYPES": true, + "RTM_OIFINFO": true, + "RTM_OLDADD": true, + "RTM_OLDDEL": true, + "RTM_OOIFINFO": true, + "RTM_REDIRECT": true, + "RTM_RESOLVE": true, + "RTM_RTTUNIT": true, + "RTM_SETDCB": true, + "RTM_SETGATE": true, + "RTM_SETLINK": true, + "RTM_SETNEIGHTBL": true, + "RTM_VERSION": true, + "RTNH_ALIGNTO": true, + "RTNH_F_DEAD": true, + "RTNH_F_ONLINK": true, + "RTNH_F_PERVASIVE": true, + "RTNLGRP_IPV4_IFADDR": true, + "RTNLGRP_IPV4_MROUTE": true, + "RTNLGRP_IPV4_ROUTE": true, + "RTNLGRP_IPV4_RULE": true, + "RTNLGRP_IPV6_IFADDR": true, + "RTNLGRP_IPV6_IFINFO": true, + "RTNLGRP_IPV6_MROUTE": true, + "RTNLGRP_IPV6_PREFIX": true, + "RTNLGRP_IPV6_ROUTE": true, + "RTNLGRP_IPV6_RULE": true, + "RTNLGRP_LINK": true, + "RTNLGRP_ND_USEROPT": true, + "RTNLGRP_NEIGH": true, + "RTNLGRP_NONE": true, + "RTNLGRP_NOTIFY": true, + "RTNLGRP_TC": true, + "RTN_ANYCAST": true, + "RTN_BLACKHOLE": true, + "RTN_BROADCAST": true, + "RTN_LOCAL": true, + "RTN_MAX": true, + "RTN_MULTICAST": true, + "RTN_NAT": true, + "RTN_PROHIBIT": true, + "RTN_THROW": true, + "RTN_UNICAST": true, + "RTN_UNREACHABLE": true, + "RTN_UNSPEC": true, + "RTN_XRESOLVE": true, + "RTPROT_BIRD": true, + "RTPROT_BOOT": true, + "RTPROT_DHCP": true, + "RTPROT_DNROUTED": true, + "RTPROT_GATED": true, + "RTPROT_KERNEL": true, + "RTPROT_MRT": true, + "RTPROT_NTK": true, + "RTPROT_RA": true, + "RTPROT_REDIRECT": true, + "RTPROT_STATIC": true, + "RTPROT_UNSPEC": true, + "RTPROT_XORP": true, + "RTPROT_ZEBRA": true, + "RTV_EXPIRE": true, + "RTV_HOPCOUNT": true, + "RTV_MTU": true, + "RTV_RPIPE": true, + "RTV_RTT": true, + "RTV_RTTVAR": true, + "RTV_SPIPE": true, + "RTV_SSTHRESH": true, + "RTV_WEIGHT": true, + "RT_CACHING_CONTEXT": true, + "RT_CLASS_DEFAULT": true, + "RT_CLASS_LOCAL": true, + "RT_CLASS_MAIN": true, + "RT_CLASS_MAX": true, + "RT_CLASS_UNSPEC": true, + "RT_DEFAULT_FIB": true, + "RT_NORTREF": true, + "RT_SCOPE_HOST": true, + "RT_SCOPE_LINK": true, + "RT_SCOPE_NOWHERE": true, + "RT_SCOPE_SITE": true, + "RT_SCOPE_UNIVERSE": true, + "RT_TABLEID_MAX": true, + "RT_TABLE_COMPAT": true, + "RT_TABLE_DEFAULT": true, + "RT_TABLE_LOCAL": true, + "RT_TABLE_MAIN": true, + "RT_TABLE_MAX": true, + "RT_TABLE_UNSPEC": true, + "RUSAGE_CHILDREN": true, + "RUSAGE_SELF": true, + "RUSAGE_THREAD": true, + "Radvisory_t": true, + "RawConn": true, + "RawSockaddr": true, + "RawSockaddrAny": true, + "RawSockaddrDatalink": true, + "RawSockaddrInet4": true, + "RawSockaddrInet6": true, + "RawSockaddrLinklayer": true, + "RawSockaddrNetlink": true, + "RawSockaddrUnix": true, + "RawSyscall": true, + "RawSyscall6": true, + "Read": true, + "ReadConsole": true, + "ReadDirectoryChanges": true, + "ReadDirent": true, + "ReadFile": true, + "Readlink": true, + "Reboot": true, + "Recvfrom": true, + "Recvmsg": true, + "RegCloseKey": true, + "RegEnumKeyEx": true, + "RegOpenKeyEx": true, + "RegQueryInfoKey": true, + "RegQueryValueEx": true, + "RemoveDirectory": true, + "Removexattr": true, + "Rename": true, + "Renameat": true, + "Revoke": true, + "Rlimit": true, + "Rmdir": true, + "RouteMessage": true, + "RouteRIB": true, + "RtAttr": true, + "RtGenmsg": true, + "RtMetrics": true, + "RtMsg": true, + "RtMsghdr": true, + "RtNexthop": true, + "Rusage": true, + "SCM_BINTIME": true, + "SCM_CREDENTIALS": true, + "SCM_CREDS": true, + "SCM_RIGHTS": true, + "SCM_TIMESTAMP": true, + "SCM_TIMESTAMPING": true, + "SCM_TIMESTAMPNS": true, + "SCM_TIMESTAMP_MONOTONIC": true, + "SHUT_RD": true, + "SHUT_RDWR": true, + "SHUT_WR": true, + "SID": true, + "SIDAndAttributes": true, + "SIGABRT": true, + "SIGALRM": true, + "SIGBUS": true, + "SIGCHLD": true, + "SIGCLD": true, + "SIGCONT": true, + "SIGEMT": true, + "SIGFPE": true, + "SIGHUP": true, + "SIGILL": true, + "SIGINFO": true, + "SIGINT": true, + "SIGIO": true, + "SIGIOT": true, + "SIGKILL": true, + "SIGLIBRT": true, + "SIGLWP": true, + "SIGPIPE": true, + "SIGPOLL": true, + "SIGPROF": true, + "SIGPWR": true, + "SIGQUIT": true, + "SIGSEGV": true, + "SIGSTKFLT": true, + "SIGSTOP": true, + "SIGSYS": true, + "SIGTERM": true, + "SIGTHR": true, + "SIGTRAP": true, + "SIGTSTP": true, + "SIGTTIN": true, + "SIGTTOU": true, + "SIGUNUSED": true, + "SIGURG": true, + "SIGUSR1": true, + "SIGUSR2": true, + "SIGVTALRM": true, + "SIGWINCH": true, + "SIGXCPU": true, + "SIGXFSZ": true, + "SIOCADDDLCI": true, + "SIOCADDMULTI": true, + "SIOCADDRT": true, + "SIOCAIFADDR": true, + "SIOCAIFGROUP": true, + "SIOCALIFADDR": true, + "SIOCARPIPLL": true, + "SIOCATMARK": true, + "SIOCAUTOADDR": true, + "SIOCAUTONETMASK": true, + "SIOCBRDGADD": true, + "SIOCBRDGADDS": true, + "SIOCBRDGARL": true, + "SIOCBRDGDADDR": true, + "SIOCBRDGDEL": true, + "SIOCBRDGDELS": true, + "SIOCBRDGFLUSH": true, + "SIOCBRDGFRL": true, + "SIOCBRDGGCACHE": true, + "SIOCBRDGGFD": true, + "SIOCBRDGGHT": true, + "SIOCBRDGGIFFLGS": true, + "SIOCBRDGGMA": true, + "SIOCBRDGGPARAM": true, + "SIOCBRDGGPRI": true, + "SIOCBRDGGRL": true, + "SIOCBRDGGSIFS": true, + "SIOCBRDGGTO": true, + "SIOCBRDGIFS": true, + "SIOCBRDGRTS": true, + "SIOCBRDGSADDR": true, + "SIOCBRDGSCACHE": true, + "SIOCBRDGSFD": true, + "SIOCBRDGSHT": true, + "SIOCBRDGSIFCOST": true, + "SIOCBRDGSIFFLGS": true, + "SIOCBRDGSIFPRIO": true, + "SIOCBRDGSMA": true, + "SIOCBRDGSPRI": true, + "SIOCBRDGSPROTO": true, + "SIOCBRDGSTO": true, + "SIOCBRDGSTXHC": true, + "SIOCDARP": true, + "SIOCDELDLCI": true, + "SIOCDELMULTI": true, + "SIOCDELRT": true, + "SIOCDEVPRIVATE": true, + "SIOCDIFADDR": true, + "SIOCDIFGROUP": true, + "SIOCDIFPHYADDR": true, + "SIOCDLIFADDR": true, + "SIOCDRARP": true, + "SIOCGARP": true, + "SIOCGDRVSPEC": true, + "SIOCGETKALIVE": true, + "SIOCGETLABEL": true, + "SIOCGETPFLOW": true, + "SIOCGETPFSYNC": true, + "SIOCGETSGCNT": true, + "SIOCGETVIFCNT": true, + "SIOCGETVLAN": true, + "SIOCGHIWAT": true, + "SIOCGIFADDR": true, + "SIOCGIFADDRPREF": true, + "SIOCGIFALIAS": true, + "SIOCGIFALTMTU": true, + "SIOCGIFASYNCMAP": true, + "SIOCGIFBOND": true, + "SIOCGIFBR": true, + "SIOCGIFBRDADDR": true, + "SIOCGIFCAP": true, + "SIOCGIFCONF": true, + "SIOCGIFCOUNT": true, + "SIOCGIFDATA": true, + "SIOCGIFDESCR": true, + "SIOCGIFDEVMTU": true, + "SIOCGIFDLT": true, + "SIOCGIFDSTADDR": true, + "SIOCGIFENCAP": true, + "SIOCGIFFIB": true, + "SIOCGIFFLAGS": true, + "SIOCGIFGATTR": true, + "SIOCGIFGENERIC": true, + "SIOCGIFGMEMB": true, + "SIOCGIFGROUP": true, + "SIOCGIFHARDMTU": true, + "SIOCGIFHWADDR": true, + "SIOCGIFINDEX": true, + "SIOCGIFKPI": true, + "SIOCGIFMAC": true, + "SIOCGIFMAP": true, + "SIOCGIFMEDIA": true, + "SIOCGIFMEM": true, + "SIOCGIFMETRIC": true, + "SIOCGIFMTU": true, + "SIOCGIFNAME": true, + "SIOCGIFNETMASK": true, + "SIOCGIFPDSTADDR": true, + "SIOCGIFPFLAGS": true, + "SIOCGIFPHYS": true, + "SIOCGIFPRIORITY": true, + "SIOCGIFPSRCADDR": true, + "SIOCGIFRDOMAIN": true, + "SIOCGIFRTLABEL": true, + "SIOCGIFSLAVE": true, + "SIOCGIFSTATUS": true, + "SIOCGIFTIMESLOT": true, + "SIOCGIFTXQLEN": true, + "SIOCGIFVLAN": true, + "SIOCGIFWAKEFLAGS": true, + "SIOCGIFXFLAGS": true, + "SIOCGLIFADDR": true, + "SIOCGLIFPHYADDR": true, + "SIOCGLIFPHYRTABLE": true, + "SIOCGLIFPHYTTL": true, + "SIOCGLINKSTR": true, + "SIOCGLOWAT": true, + "SIOCGPGRP": true, + "SIOCGPRIVATE_0": true, + "SIOCGPRIVATE_1": true, + "SIOCGRARP": true, + "SIOCGSPPPPARAMS": true, + "SIOCGSTAMP": true, + "SIOCGSTAMPNS": true, + "SIOCGVH": true, + "SIOCGVNETID": true, + "SIOCIFCREATE": true, + "SIOCIFCREATE2": true, + "SIOCIFDESTROY": true, + "SIOCIFGCLONERS": true, + "SIOCINITIFADDR": true, + "SIOCPROTOPRIVATE": true, + "SIOCRSLVMULTI": true, + "SIOCRTMSG": true, + "SIOCSARP": true, + "SIOCSDRVSPEC": true, + "SIOCSETKALIVE": true, + "SIOCSETLABEL": true, + "SIOCSETPFLOW": true, + "SIOCSETPFSYNC": true, + "SIOCSETVLAN": true, + "SIOCSHIWAT": true, + "SIOCSIFADDR": true, + "SIOCSIFADDRPREF": true, + "SIOCSIFALTMTU": true, + "SIOCSIFASYNCMAP": true, + "SIOCSIFBOND": true, + "SIOCSIFBR": true, + "SIOCSIFBRDADDR": true, + "SIOCSIFCAP": true, + "SIOCSIFDESCR": true, + "SIOCSIFDSTADDR": true, + "SIOCSIFENCAP": true, + "SIOCSIFFIB": true, + "SIOCSIFFLAGS": true, + "SIOCSIFGATTR": true, + "SIOCSIFGENERIC": true, + "SIOCSIFHWADDR": true, + "SIOCSIFHWBROADCAST": true, + "SIOCSIFKPI": true, + "SIOCSIFLINK": true, + "SIOCSIFLLADDR": true, + "SIOCSIFMAC": true, + "SIOCSIFMAP": true, + "SIOCSIFMEDIA": true, + "SIOCSIFMEM": true, + "SIOCSIFMETRIC": true, + "SIOCSIFMTU": true, + "SIOCSIFNAME": true, + "SIOCSIFNETMASK": true, + "SIOCSIFPFLAGS": true, + "SIOCSIFPHYADDR": true, + "SIOCSIFPHYS": true, + "SIOCSIFPRIORITY": true, + "SIOCSIFRDOMAIN": true, + "SIOCSIFRTLABEL": true, + "SIOCSIFRVNET": true, + "SIOCSIFSLAVE": true, + "SIOCSIFTIMESLOT": true, + "SIOCSIFTXQLEN": true, + "SIOCSIFVLAN": true, + "SIOCSIFVNET": true, + "SIOCSIFXFLAGS": true, + "SIOCSLIFPHYADDR": true, + "SIOCSLIFPHYRTABLE": true, + "SIOCSLIFPHYTTL": true, + "SIOCSLINKSTR": true, + "SIOCSLOWAT": true, + "SIOCSPGRP": true, + "SIOCSRARP": true, + "SIOCSSPPPPARAMS": true, + "SIOCSVH": true, + "SIOCSVNETID": true, + "SIOCZIFDATA": true, + "SIO_GET_EXTENSION_FUNCTION_POINTER": true, + "SIO_GET_INTERFACE_LIST": true, + "SIO_KEEPALIVE_VALS": true, + "SIO_UDP_CONNRESET": true, + "SOCK_CLOEXEC": true, + "SOCK_DCCP": true, + "SOCK_DGRAM": true, + "SOCK_FLAGS_MASK": true, + "SOCK_MAXADDRLEN": true, + "SOCK_NONBLOCK": true, + "SOCK_NOSIGPIPE": true, + "SOCK_PACKET": true, + "SOCK_RAW": true, + "SOCK_RDM": true, + "SOCK_SEQPACKET": true, + "SOCK_STREAM": true, + "SOL_AAL": true, + "SOL_ATM": true, + "SOL_DECNET": true, + "SOL_ICMPV6": true, + "SOL_IP": true, + "SOL_IPV6": true, + "SOL_IRDA": true, + "SOL_PACKET": true, + "SOL_RAW": true, + "SOL_SOCKET": true, + "SOL_TCP": true, + "SOL_X25": true, + "SOMAXCONN": true, + "SO_ACCEPTCONN": true, + "SO_ACCEPTFILTER": true, + "SO_ATTACH_FILTER": true, + "SO_BINDANY": true, + "SO_BINDTODEVICE": true, + "SO_BINTIME": true, + "SO_BROADCAST": true, + "SO_BSDCOMPAT": true, + "SO_DEBUG": true, + "SO_DETACH_FILTER": true, + "SO_DOMAIN": true, + "SO_DONTROUTE": true, + "SO_DONTTRUNC": true, + "SO_ERROR": true, + "SO_KEEPALIVE": true, + "SO_LABEL": true, + "SO_LINGER": true, + "SO_LINGER_SEC": true, + "SO_LISTENINCQLEN": true, + "SO_LISTENQLEN": true, + "SO_LISTENQLIMIT": true, + "SO_MARK": true, + "SO_NETPROC": true, + "SO_NKE": true, + "SO_NOADDRERR": true, + "SO_NOHEADER": true, + "SO_NOSIGPIPE": true, + "SO_NOTIFYCONFLICT": true, + "SO_NO_CHECK": true, + "SO_NO_DDP": true, + "SO_NO_OFFLOAD": true, + "SO_NP_EXTENSIONS": true, + "SO_NREAD": true, + "SO_NWRITE": true, + "SO_OOBINLINE": true, + "SO_OVERFLOWED": true, + "SO_PASSCRED": true, + "SO_PASSSEC": true, + "SO_PEERCRED": true, + "SO_PEERLABEL": true, + "SO_PEERNAME": true, + "SO_PEERSEC": true, + "SO_PRIORITY": true, + "SO_PROTOCOL": true, + "SO_PROTOTYPE": true, + "SO_RANDOMPORT": true, + "SO_RCVBUF": true, + "SO_RCVBUFFORCE": true, + "SO_RCVLOWAT": true, + "SO_RCVTIMEO": true, + "SO_RESTRICTIONS": true, + "SO_RESTRICT_DENYIN": true, + "SO_RESTRICT_DENYOUT": true, + "SO_RESTRICT_DENYSET": true, + "SO_REUSEADDR": true, + "SO_REUSEPORT": true, + "SO_REUSESHAREUID": true, + "SO_RTABLE": true, + "SO_RXQ_OVFL": true, + "SO_SECURITY_AUTHENTICATION": true, + "SO_SECURITY_ENCRYPTION_NETWORK": true, + "SO_SECURITY_ENCRYPTION_TRANSPORT": true, + "SO_SETFIB": true, + "SO_SNDBUF": true, + "SO_SNDBUFFORCE": true, + "SO_SNDLOWAT": true, + "SO_SNDTIMEO": true, + "SO_SPLICE": true, + "SO_TIMESTAMP": true, + "SO_TIMESTAMPING": true, + "SO_TIMESTAMPNS": true, + "SO_TIMESTAMP_MONOTONIC": true, + "SO_TYPE": true, + "SO_UPCALLCLOSEWAIT": true, + "SO_UPDATE_ACCEPT_CONTEXT": true, + "SO_UPDATE_CONNECT_CONTEXT": true, + "SO_USELOOPBACK": true, + "SO_USER_COOKIE": true, + "SO_VENDOR": true, + "SO_WANTMORE": true, + "SO_WANTOOBFLAG": true, + "SSLExtraCertChainPolicyPara": true, + "STANDARD_RIGHTS_ALL": true, + "STANDARD_RIGHTS_EXECUTE": true, + "STANDARD_RIGHTS_READ": true, + "STANDARD_RIGHTS_REQUIRED": true, + "STANDARD_RIGHTS_WRITE": true, + "STARTF_USESHOWWINDOW": true, + "STARTF_USESTDHANDLES": true, + "STD_ERROR_HANDLE": true, + "STD_INPUT_HANDLE": true, + "STD_OUTPUT_HANDLE": true, + "SUBLANG_ENGLISH_US": true, + "SW_FORCEMINIMIZE": true, + "SW_HIDE": true, + "SW_MAXIMIZE": true, + "SW_MINIMIZE": true, + "SW_NORMAL": true, + "SW_RESTORE": true, + "SW_SHOW": true, + "SW_SHOWDEFAULT": true, + "SW_SHOWMAXIMIZED": true, + "SW_SHOWMINIMIZED": true, + "SW_SHOWMINNOACTIVE": true, + "SW_SHOWNA": true, + "SW_SHOWNOACTIVATE": true, + "SW_SHOWNORMAL": true, + "SYMBOLIC_LINK_FLAG_DIRECTORY": true, + "SYNCHRONIZE": true, + "SYSCTL_VERSION": true, + "SYSCTL_VERS_0": true, + "SYSCTL_VERS_1": true, + "SYSCTL_VERS_MASK": true, + "SYS_ABORT2": true, + "SYS_ACCEPT": true, + "SYS_ACCEPT4": true, + "SYS_ACCEPT_NOCANCEL": true, + "SYS_ACCESS": true, + "SYS_ACCESS_EXTENDED": true, + "SYS_ACCT": true, + "SYS_ADD_KEY": true, + "SYS_ADD_PROFIL": true, + "SYS_ADJFREQ": true, + "SYS_ADJTIME": true, + "SYS_ADJTIMEX": true, + "SYS_AFS_SYSCALL": true, + "SYS_AIO_CANCEL": true, + "SYS_AIO_ERROR": true, + "SYS_AIO_FSYNC": true, + "SYS_AIO_READ": true, + "SYS_AIO_RETURN": true, + "SYS_AIO_SUSPEND": true, + "SYS_AIO_SUSPEND_NOCANCEL": true, + "SYS_AIO_WRITE": true, + "SYS_ALARM": true, + "SYS_ARCH_PRCTL": true, + "SYS_ARM_FADVISE64_64": true, + "SYS_ARM_SYNC_FILE_RANGE": true, + "SYS_ATGETMSG": true, + "SYS_ATPGETREQ": true, + "SYS_ATPGETRSP": true, + "SYS_ATPSNDREQ": true, + "SYS_ATPSNDRSP": true, + "SYS_ATPUTMSG": true, + "SYS_ATSOCKET": true, + "SYS_AUDIT": true, + "SYS_AUDITCTL": true, + "SYS_AUDITON": true, + "SYS_AUDIT_SESSION_JOIN": true, + "SYS_AUDIT_SESSION_PORT": true, + "SYS_AUDIT_SESSION_SELF": true, + "SYS_BDFLUSH": true, + "SYS_BIND": true, + "SYS_BINDAT": true, + "SYS_BREAK": true, + "SYS_BRK": true, + "SYS_BSDTHREAD_CREATE": true, + "SYS_BSDTHREAD_REGISTER": true, + "SYS_BSDTHREAD_TERMINATE": true, + "SYS_CAPGET": true, + "SYS_CAPSET": true, + "SYS_CAP_ENTER": true, + "SYS_CAP_FCNTLS_GET": true, + "SYS_CAP_FCNTLS_LIMIT": true, + "SYS_CAP_GETMODE": true, + "SYS_CAP_GETRIGHTS": true, + "SYS_CAP_IOCTLS_GET": true, + "SYS_CAP_IOCTLS_LIMIT": true, + "SYS_CAP_NEW": true, + "SYS_CAP_RIGHTS_GET": true, + "SYS_CAP_RIGHTS_LIMIT": true, + "SYS_CHDIR": true, + "SYS_CHFLAGS": true, + "SYS_CHFLAGSAT": true, + "SYS_CHMOD": true, + "SYS_CHMOD_EXTENDED": true, + "SYS_CHOWN": true, + "SYS_CHOWN32": true, + "SYS_CHROOT": true, + "SYS_CHUD": true, + "SYS_CLOCK_ADJTIME": true, + "SYS_CLOCK_GETCPUCLOCKID2": true, + "SYS_CLOCK_GETRES": true, + "SYS_CLOCK_GETTIME": true, + "SYS_CLOCK_NANOSLEEP": true, + "SYS_CLOCK_SETTIME": true, + "SYS_CLONE": true, + "SYS_CLOSE": true, + "SYS_CLOSEFROM": true, + "SYS_CLOSE_NOCANCEL": true, + "SYS_CONNECT": true, + "SYS_CONNECTAT": true, + "SYS_CONNECT_NOCANCEL": true, + "SYS_COPYFILE": true, + "SYS_CPUSET": true, + "SYS_CPUSET_GETAFFINITY": true, + "SYS_CPUSET_GETID": true, + "SYS_CPUSET_SETAFFINITY": true, + "SYS_CPUSET_SETID": true, + "SYS_CREAT": true, + "SYS_CREATE_MODULE": true, + "SYS_CSOPS": true, + "SYS_DELETE": true, + "SYS_DELETE_MODULE": true, + "SYS_DUP": true, + "SYS_DUP2": true, + "SYS_DUP3": true, + "SYS_EACCESS": true, + "SYS_EPOLL_CREATE": true, + "SYS_EPOLL_CREATE1": true, + "SYS_EPOLL_CTL": true, + "SYS_EPOLL_CTL_OLD": true, + "SYS_EPOLL_PWAIT": true, + "SYS_EPOLL_WAIT": true, + "SYS_EPOLL_WAIT_OLD": true, + "SYS_EVENTFD": true, + "SYS_EVENTFD2": true, + "SYS_EXCHANGEDATA": true, + "SYS_EXECVE": true, + "SYS_EXIT": true, + "SYS_EXIT_GROUP": true, + "SYS_EXTATTRCTL": true, + "SYS_EXTATTR_DELETE_FD": true, + "SYS_EXTATTR_DELETE_FILE": true, + "SYS_EXTATTR_DELETE_LINK": true, + "SYS_EXTATTR_GET_FD": true, + "SYS_EXTATTR_GET_FILE": true, + "SYS_EXTATTR_GET_LINK": true, + "SYS_EXTATTR_LIST_FD": true, + "SYS_EXTATTR_LIST_FILE": true, + "SYS_EXTATTR_LIST_LINK": true, + "SYS_EXTATTR_SET_FD": true, + "SYS_EXTATTR_SET_FILE": true, + "SYS_EXTATTR_SET_LINK": true, + "SYS_FACCESSAT": true, + "SYS_FADVISE64": true, + "SYS_FADVISE64_64": true, + "SYS_FALLOCATE": true, + "SYS_FANOTIFY_INIT": true, + "SYS_FANOTIFY_MARK": true, + "SYS_FCHDIR": true, + "SYS_FCHFLAGS": true, + "SYS_FCHMOD": true, + "SYS_FCHMODAT": true, + "SYS_FCHMOD_EXTENDED": true, + "SYS_FCHOWN": true, + "SYS_FCHOWN32": true, + "SYS_FCHOWNAT": true, + "SYS_FCHROOT": true, + "SYS_FCNTL": true, + "SYS_FCNTL64": true, + "SYS_FCNTL_NOCANCEL": true, + "SYS_FDATASYNC": true, + "SYS_FEXECVE": true, + "SYS_FFCLOCK_GETCOUNTER": true, + "SYS_FFCLOCK_GETESTIMATE": true, + "SYS_FFCLOCK_SETESTIMATE": true, + "SYS_FFSCTL": true, + "SYS_FGETATTRLIST": true, + "SYS_FGETXATTR": true, + "SYS_FHOPEN": true, + "SYS_FHSTAT": true, + "SYS_FHSTATFS": true, + "SYS_FILEPORT_MAKEFD": true, + "SYS_FILEPORT_MAKEPORT": true, + "SYS_FKTRACE": true, + "SYS_FLISTXATTR": true, + "SYS_FLOCK": true, + "SYS_FORK": true, + "SYS_FPATHCONF": true, + "SYS_FREEBSD6_FTRUNCATE": true, + "SYS_FREEBSD6_LSEEK": true, + "SYS_FREEBSD6_MMAP": true, + "SYS_FREEBSD6_PREAD": true, + "SYS_FREEBSD6_PWRITE": true, + "SYS_FREEBSD6_TRUNCATE": true, + "SYS_FREMOVEXATTR": true, + "SYS_FSCTL": true, + "SYS_FSETATTRLIST": true, + "SYS_FSETXATTR": true, + "SYS_FSGETPATH": true, + "SYS_FSTAT": true, + "SYS_FSTAT64": true, + "SYS_FSTAT64_EXTENDED": true, + "SYS_FSTATAT": true, + "SYS_FSTATAT64": true, + "SYS_FSTATFS": true, + "SYS_FSTATFS64": true, + "SYS_FSTATV": true, + "SYS_FSTATVFS1": true, + "SYS_FSTAT_EXTENDED": true, + "SYS_FSYNC": true, + "SYS_FSYNC_NOCANCEL": true, + "SYS_FSYNC_RANGE": true, + "SYS_FTIME": true, + "SYS_FTRUNCATE": true, + "SYS_FTRUNCATE64": true, + "SYS_FUTEX": true, + "SYS_FUTIMENS": true, + "SYS_FUTIMES": true, + "SYS_FUTIMESAT": true, + "SYS_GETATTRLIST": true, + "SYS_GETAUDIT": true, + "SYS_GETAUDIT_ADDR": true, + "SYS_GETAUID": true, + "SYS_GETCONTEXT": true, + "SYS_GETCPU": true, + "SYS_GETCWD": true, + "SYS_GETDENTS": true, + "SYS_GETDENTS64": true, + "SYS_GETDIRENTRIES": true, + "SYS_GETDIRENTRIES64": true, + "SYS_GETDIRENTRIESATTR": true, + "SYS_GETDTABLECOUNT": true, + "SYS_GETDTABLESIZE": true, + "SYS_GETEGID": true, + "SYS_GETEGID32": true, + "SYS_GETEUID": true, + "SYS_GETEUID32": true, + "SYS_GETFH": true, + "SYS_GETFSSTAT": true, + "SYS_GETFSSTAT64": true, + "SYS_GETGID": true, + "SYS_GETGID32": true, + "SYS_GETGROUPS": true, + "SYS_GETGROUPS32": true, + "SYS_GETHOSTUUID": true, + "SYS_GETITIMER": true, + "SYS_GETLCID": true, + "SYS_GETLOGIN": true, + "SYS_GETLOGINCLASS": true, + "SYS_GETPEERNAME": true, + "SYS_GETPGID": true, + "SYS_GETPGRP": true, + "SYS_GETPID": true, + "SYS_GETPMSG": true, + "SYS_GETPPID": true, + "SYS_GETPRIORITY": true, + "SYS_GETRESGID": true, + "SYS_GETRESGID32": true, + "SYS_GETRESUID": true, + "SYS_GETRESUID32": true, + "SYS_GETRLIMIT": true, + "SYS_GETRTABLE": true, + "SYS_GETRUSAGE": true, + "SYS_GETSGROUPS": true, + "SYS_GETSID": true, + "SYS_GETSOCKNAME": true, + "SYS_GETSOCKOPT": true, + "SYS_GETTHRID": true, + "SYS_GETTID": true, + "SYS_GETTIMEOFDAY": true, + "SYS_GETUID": true, + "SYS_GETUID32": true, + "SYS_GETVFSSTAT": true, + "SYS_GETWGROUPS": true, + "SYS_GETXATTR": true, + "SYS_GET_KERNEL_SYMS": true, + "SYS_GET_MEMPOLICY": true, + "SYS_GET_ROBUST_LIST": true, + "SYS_GET_THREAD_AREA": true, + "SYS_GTTY": true, + "SYS_IDENTITYSVC": true, + "SYS_IDLE": true, + "SYS_INITGROUPS": true, + "SYS_INIT_MODULE": true, + "SYS_INOTIFY_ADD_WATCH": true, + "SYS_INOTIFY_INIT": true, + "SYS_INOTIFY_INIT1": true, + "SYS_INOTIFY_RM_WATCH": true, + "SYS_IOCTL": true, + "SYS_IOPERM": true, + "SYS_IOPL": true, + "SYS_IOPOLICYSYS": true, + "SYS_IOPRIO_GET": true, + "SYS_IOPRIO_SET": true, + "SYS_IO_CANCEL": true, + "SYS_IO_DESTROY": true, + "SYS_IO_GETEVENTS": true, + "SYS_IO_SETUP": true, + "SYS_IO_SUBMIT": true, + "SYS_IPC": true, + "SYS_ISSETUGID": true, + "SYS_JAIL": true, + "SYS_JAIL_ATTACH": true, + "SYS_JAIL_GET": true, + "SYS_JAIL_REMOVE": true, + "SYS_JAIL_SET": true, + "SYS_KDEBUG_TRACE": true, + "SYS_KENV": true, + "SYS_KEVENT": true, + "SYS_KEVENT64": true, + "SYS_KEXEC_LOAD": true, + "SYS_KEYCTL": true, + "SYS_KILL": true, + "SYS_KLDFIND": true, + "SYS_KLDFIRSTMOD": true, + "SYS_KLDLOAD": true, + "SYS_KLDNEXT": true, + "SYS_KLDSTAT": true, + "SYS_KLDSYM": true, + "SYS_KLDUNLOAD": true, + "SYS_KLDUNLOADF": true, + "SYS_KQUEUE": true, + "SYS_KQUEUE1": true, + "SYS_KTIMER_CREATE": true, + "SYS_KTIMER_DELETE": true, + "SYS_KTIMER_GETOVERRUN": true, + "SYS_KTIMER_GETTIME": true, + "SYS_KTIMER_SETTIME": true, + "SYS_KTRACE": true, + "SYS_LCHFLAGS": true, + "SYS_LCHMOD": true, + "SYS_LCHOWN": true, + "SYS_LCHOWN32": true, + "SYS_LGETFH": true, + "SYS_LGETXATTR": true, + "SYS_LINK": true, + "SYS_LINKAT": true, + "SYS_LIO_LISTIO": true, + "SYS_LISTEN": true, + "SYS_LISTXATTR": true, + "SYS_LLISTXATTR": true, + "SYS_LOCK": true, + "SYS_LOOKUP_DCOOKIE": true, + "SYS_LPATHCONF": true, + "SYS_LREMOVEXATTR": true, + "SYS_LSEEK": true, + "SYS_LSETXATTR": true, + "SYS_LSTAT": true, + "SYS_LSTAT64": true, + "SYS_LSTAT64_EXTENDED": true, + "SYS_LSTATV": true, + "SYS_LSTAT_EXTENDED": true, + "SYS_LUTIMES": true, + "SYS_MAC_SYSCALL": true, + "SYS_MADVISE": true, + "SYS_MADVISE1": true, + "SYS_MAXSYSCALL": true, + "SYS_MBIND": true, + "SYS_MIGRATE_PAGES": true, + "SYS_MINCORE": true, + "SYS_MINHERIT": true, + "SYS_MKCOMPLEX": true, + "SYS_MKDIR": true, + "SYS_MKDIRAT": true, + "SYS_MKDIR_EXTENDED": true, + "SYS_MKFIFO": true, + "SYS_MKFIFOAT": true, + "SYS_MKFIFO_EXTENDED": true, + "SYS_MKNOD": true, + "SYS_MKNODAT": true, + "SYS_MLOCK": true, + "SYS_MLOCKALL": true, + "SYS_MMAP": true, + "SYS_MMAP2": true, + "SYS_MODCTL": true, + "SYS_MODFIND": true, + "SYS_MODFNEXT": true, + "SYS_MODIFY_LDT": true, + "SYS_MODNEXT": true, + "SYS_MODSTAT": true, + "SYS_MODWATCH": true, + "SYS_MOUNT": true, + "SYS_MOVE_PAGES": true, + "SYS_MPROTECT": true, + "SYS_MPX": true, + "SYS_MQUERY": true, + "SYS_MQ_GETSETATTR": true, + "SYS_MQ_NOTIFY": true, + "SYS_MQ_OPEN": true, + "SYS_MQ_TIMEDRECEIVE": true, + "SYS_MQ_TIMEDSEND": true, + "SYS_MQ_UNLINK": true, + "SYS_MREMAP": true, + "SYS_MSGCTL": true, + "SYS_MSGGET": true, + "SYS_MSGRCV": true, + "SYS_MSGRCV_NOCANCEL": true, + "SYS_MSGSND": true, + "SYS_MSGSND_NOCANCEL": true, + "SYS_MSGSYS": true, + "SYS_MSYNC": true, + "SYS_MSYNC_NOCANCEL": true, + "SYS_MUNLOCK": true, + "SYS_MUNLOCKALL": true, + "SYS_MUNMAP": true, + "SYS_NAME_TO_HANDLE_AT": true, + "SYS_NANOSLEEP": true, + "SYS_NEWFSTATAT": true, + "SYS_NFSCLNT": true, + "SYS_NFSSERVCTL": true, + "SYS_NFSSVC": true, + "SYS_NFSTAT": true, + "SYS_NICE": true, + "SYS_NLSTAT": true, + "SYS_NMOUNT": true, + "SYS_NSTAT": true, + "SYS_NTP_ADJTIME": true, + "SYS_NTP_GETTIME": true, + "SYS_OABI_SYSCALL_BASE": true, + "SYS_OBREAK": true, + "SYS_OLDFSTAT": true, + "SYS_OLDLSTAT": true, + "SYS_OLDOLDUNAME": true, + "SYS_OLDSTAT": true, + "SYS_OLDUNAME": true, + "SYS_OPEN": true, + "SYS_OPENAT": true, + "SYS_OPENBSD_POLL": true, + "SYS_OPEN_BY_HANDLE_AT": true, + "SYS_OPEN_EXTENDED": true, + "SYS_OPEN_NOCANCEL": true, + "SYS_OVADVISE": true, + "SYS_PACCEPT": true, + "SYS_PATHCONF": true, + "SYS_PAUSE": true, + "SYS_PCICONFIG_IOBASE": true, + "SYS_PCICONFIG_READ": true, + "SYS_PCICONFIG_WRITE": true, + "SYS_PDFORK": true, + "SYS_PDGETPID": true, + "SYS_PDKILL": true, + "SYS_PERF_EVENT_OPEN": true, + "SYS_PERSONALITY": true, + "SYS_PID_HIBERNATE": true, + "SYS_PID_RESUME": true, + "SYS_PID_SHUTDOWN_SOCKETS": true, + "SYS_PID_SUSPEND": true, + "SYS_PIPE": true, + "SYS_PIPE2": true, + "SYS_PIVOT_ROOT": true, + "SYS_PMC_CONTROL": true, + "SYS_PMC_GET_INFO": true, + "SYS_POLL": true, + "SYS_POLLTS": true, + "SYS_POLL_NOCANCEL": true, + "SYS_POSIX_FADVISE": true, + "SYS_POSIX_FALLOCATE": true, + "SYS_POSIX_OPENPT": true, + "SYS_POSIX_SPAWN": true, + "SYS_PPOLL": true, + "SYS_PRCTL": true, + "SYS_PREAD": true, + "SYS_PREAD64": true, + "SYS_PREADV": true, + "SYS_PREAD_NOCANCEL": true, + "SYS_PRLIMIT64": true, + "SYS_PROCCTL": true, + "SYS_PROCESS_POLICY": true, + "SYS_PROCESS_VM_READV": true, + "SYS_PROCESS_VM_WRITEV": true, + "SYS_PROC_INFO": true, + "SYS_PROF": true, + "SYS_PROFIL": true, + "SYS_PSELECT": true, + "SYS_PSELECT6": true, + "SYS_PSET_ASSIGN": true, + "SYS_PSET_CREATE": true, + "SYS_PSET_DESTROY": true, + "SYS_PSYNCH_CVBROAD": true, + "SYS_PSYNCH_CVCLRPREPOST": true, + "SYS_PSYNCH_CVSIGNAL": true, + "SYS_PSYNCH_CVWAIT": true, + "SYS_PSYNCH_MUTEXDROP": true, + "SYS_PSYNCH_MUTEXWAIT": true, + "SYS_PSYNCH_RW_DOWNGRADE": true, + "SYS_PSYNCH_RW_LONGRDLOCK": true, + "SYS_PSYNCH_RW_RDLOCK": true, + "SYS_PSYNCH_RW_UNLOCK": true, + "SYS_PSYNCH_RW_UNLOCK2": true, + "SYS_PSYNCH_RW_UPGRADE": true, + "SYS_PSYNCH_RW_WRLOCK": true, + "SYS_PSYNCH_RW_YIELDWRLOCK": true, + "SYS_PTRACE": true, + "SYS_PUTPMSG": true, + "SYS_PWRITE": true, + "SYS_PWRITE64": true, + "SYS_PWRITEV": true, + "SYS_PWRITE_NOCANCEL": true, + "SYS_QUERY_MODULE": true, + "SYS_QUOTACTL": true, + "SYS_RASCTL": true, + "SYS_RCTL_ADD_RULE": true, + "SYS_RCTL_GET_LIMITS": true, + "SYS_RCTL_GET_RACCT": true, + "SYS_RCTL_GET_RULES": true, + "SYS_RCTL_REMOVE_RULE": true, + "SYS_READ": true, + "SYS_READAHEAD": true, + "SYS_READDIR": true, + "SYS_READLINK": true, + "SYS_READLINKAT": true, + "SYS_READV": true, + "SYS_READV_NOCANCEL": true, + "SYS_READ_NOCANCEL": true, + "SYS_REBOOT": true, + "SYS_RECV": true, + "SYS_RECVFROM": true, + "SYS_RECVFROM_NOCANCEL": true, + "SYS_RECVMMSG": true, + "SYS_RECVMSG": true, + "SYS_RECVMSG_NOCANCEL": true, + "SYS_REMAP_FILE_PAGES": true, + "SYS_REMOVEXATTR": true, + "SYS_RENAME": true, + "SYS_RENAMEAT": true, + "SYS_REQUEST_KEY": true, + "SYS_RESTART_SYSCALL": true, + "SYS_REVOKE": true, + "SYS_RFORK": true, + "SYS_RMDIR": true, + "SYS_RTPRIO": true, + "SYS_RTPRIO_THREAD": true, + "SYS_RT_SIGACTION": true, + "SYS_RT_SIGPENDING": true, + "SYS_RT_SIGPROCMASK": true, + "SYS_RT_SIGQUEUEINFO": true, + "SYS_RT_SIGRETURN": true, + "SYS_RT_SIGSUSPEND": true, + "SYS_RT_SIGTIMEDWAIT": true, + "SYS_RT_TGSIGQUEUEINFO": true, + "SYS_SBRK": true, + "SYS_SCHED_GETAFFINITY": true, + "SYS_SCHED_GETPARAM": true, + "SYS_SCHED_GETSCHEDULER": true, + "SYS_SCHED_GET_PRIORITY_MAX": true, + "SYS_SCHED_GET_PRIORITY_MIN": true, + "SYS_SCHED_RR_GET_INTERVAL": true, + "SYS_SCHED_SETAFFINITY": true, + "SYS_SCHED_SETPARAM": true, + "SYS_SCHED_SETSCHEDULER": true, + "SYS_SCHED_YIELD": true, + "SYS_SCTP_GENERIC_RECVMSG": true, + "SYS_SCTP_GENERIC_SENDMSG": true, + "SYS_SCTP_GENERIC_SENDMSG_IOV": true, + "SYS_SCTP_PEELOFF": true, + "SYS_SEARCHFS": true, + "SYS_SECURITY": true, + "SYS_SELECT": true, + "SYS_SELECT_NOCANCEL": true, + "SYS_SEMCONFIG": true, + "SYS_SEMCTL": true, + "SYS_SEMGET": true, + "SYS_SEMOP": true, + "SYS_SEMSYS": true, + "SYS_SEMTIMEDOP": true, + "SYS_SEM_CLOSE": true, + "SYS_SEM_DESTROY": true, + "SYS_SEM_GETVALUE": true, + "SYS_SEM_INIT": true, + "SYS_SEM_OPEN": true, + "SYS_SEM_POST": true, + "SYS_SEM_TRYWAIT": true, + "SYS_SEM_UNLINK": true, + "SYS_SEM_WAIT": true, + "SYS_SEM_WAIT_NOCANCEL": true, + "SYS_SEND": true, + "SYS_SENDFILE": true, + "SYS_SENDFILE64": true, + "SYS_SENDMMSG": true, + "SYS_SENDMSG": true, + "SYS_SENDMSG_NOCANCEL": true, + "SYS_SENDTO": true, + "SYS_SENDTO_NOCANCEL": true, + "SYS_SETATTRLIST": true, + "SYS_SETAUDIT": true, + "SYS_SETAUDIT_ADDR": true, + "SYS_SETAUID": true, + "SYS_SETCONTEXT": true, + "SYS_SETDOMAINNAME": true, + "SYS_SETEGID": true, + "SYS_SETEUID": true, + "SYS_SETFIB": true, + "SYS_SETFSGID": true, + "SYS_SETFSGID32": true, + "SYS_SETFSUID": true, + "SYS_SETFSUID32": true, + "SYS_SETGID": true, + "SYS_SETGID32": true, + "SYS_SETGROUPS": true, + "SYS_SETGROUPS32": true, + "SYS_SETHOSTNAME": true, + "SYS_SETITIMER": true, + "SYS_SETLCID": true, + "SYS_SETLOGIN": true, + "SYS_SETLOGINCLASS": true, + "SYS_SETNS": true, + "SYS_SETPGID": true, + "SYS_SETPRIORITY": true, + "SYS_SETPRIVEXEC": true, + "SYS_SETREGID": true, + "SYS_SETREGID32": true, + "SYS_SETRESGID": true, + "SYS_SETRESGID32": true, + "SYS_SETRESUID": true, + "SYS_SETRESUID32": true, + "SYS_SETREUID": true, + "SYS_SETREUID32": true, + "SYS_SETRLIMIT": true, + "SYS_SETRTABLE": true, + "SYS_SETSGROUPS": true, + "SYS_SETSID": true, + "SYS_SETSOCKOPT": true, + "SYS_SETTID": true, + "SYS_SETTID_WITH_PID": true, + "SYS_SETTIMEOFDAY": true, + "SYS_SETUID": true, + "SYS_SETUID32": true, + "SYS_SETWGROUPS": true, + "SYS_SETXATTR": true, + "SYS_SET_MEMPOLICY": true, + "SYS_SET_ROBUST_LIST": true, + "SYS_SET_THREAD_AREA": true, + "SYS_SET_TID_ADDRESS": true, + "SYS_SGETMASK": true, + "SYS_SHARED_REGION_CHECK_NP": true, + "SYS_SHARED_REGION_MAP_AND_SLIDE_NP": true, + "SYS_SHMAT": true, + "SYS_SHMCTL": true, + "SYS_SHMDT": true, + "SYS_SHMGET": true, + "SYS_SHMSYS": true, + "SYS_SHM_OPEN": true, + "SYS_SHM_UNLINK": true, + "SYS_SHUTDOWN": true, + "SYS_SIGACTION": true, + "SYS_SIGALTSTACK": true, + "SYS_SIGNAL": true, + "SYS_SIGNALFD": true, + "SYS_SIGNALFD4": true, + "SYS_SIGPENDING": true, + "SYS_SIGPROCMASK": true, + "SYS_SIGQUEUE": true, + "SYS_SIGQUEUEINFO": true, + "SYS_SIGRETURN": true, + "SYS_SIGSUSPEND": true, + "SYS_SIGSUSPEND_NOCANCEL": true, + "SYS_SIGTIMEDWAIT": true, + "SYS_SIGWAIT": true, + "SYS_SIGWAITINFO": true, + "SYS_SOCKET": true, + "SYS_SOCKETCALL": true, + "SYS_SOCKETPAIR": true, + "SYS_SPLICE": true, + "SYS_SSETMASK": true, + "SYS_SSTK": true, + "SYS_STACK_SNAPSHOT": true, + "SYS_STAT": true, + "SYS_STAT64": true, + "SYS_STAT64_EXTENDED": true, + "SYS_STATFS": true, + "SYS_STATFS64": true, + "SYS_STATV": true, + "SYS_STATVFS1": true, + "SYS_STAT_EXTENDED": true, + "SYS_STIME": true, + "SYS_STTY": true, + "SYS_SWAPCONTEXT": true, + "SYS_SWAPCTL": true, + "SYS_SWAPOFF": true, + "SYS_SWAPON": true, + "SYS_SYMLINK": true, + "SYS_SYMLINKAT": true, + "SYS_SYNC": true, + "SYS_SYNCFS": true, + "SYS_SYNC_FILE_RANGE": true, + "SYS_SYSARCH": true, + "SYS_SYSCALL": true, + "SYS_SYSCALL_BASE": true, + "SYS_SYSFS": true, + "SYS_SYSINFO": true, + "SYS_SYSLOG": true, + "SYS_TEE": true, + "SYS_TGKILL": true, + "SYS_THREAD_SELFID": true, + "SYS_THR_CREATE": true, + "SYS_THR_EXIT": true, + "SYS_THR_KILL": true, + "SYS_THR_KILL2": true, + "SYS_THR_NEW": true, + "SYS_THR_SELF": true, + "SYS_THR_SET_NAME": true, + "SYS_THR_SUSPEND": true, + "SYS_THR_WAKE": true, + "SYS_TIME": true, + "SYS_TIMERFD_CREATE": true, + "SYS_TIMERFD_GETTIME": true, + "SYS_TIMERFD_SETTIME": true, + "SYS_TIMER_CREATE": true, + "SYS_TIMER_DELETE": true, + "SYS_TIMER_GETOVERRUN": true, + "SYS_TIMER_GETTIME": true, + "SYS_TIMER_SETTIME": true, + "SYS_TIMES": true, + "SYS_TKILL": true, + "SYS_TRUNCATE": true, + "SYS_TRUNCATE64": true, + "SYS_TUXCALL": true, + "SYS_UGETRLIMIT": true, + "SYS_ULIMIT": true, + "SYS_UMASK": true, + "SYS_UMASK_EXTENDED": true, + "SYS_UMOUNT": true, + "SYS_UMOUNT2": true, + "SYS_UNAME": true, + "SYS_UNDELETE": true, + "SYS_UNLINK": true, + "SYS_UNLINKAT": true, + "SYS_UNMOUNT": true, + "SYS_UNSHARE": true, + "SYS_USELIB": true, + "SYS_USTAT": true, + "SYS_UTIME": true, + "SYS_UTIMENSAT": true, + "SYS_UTIMES": true, + "SYS_UTRACE": true, + "SYS_UUIDGEN": true, + "SYS_VADVISE": true, + "SYS_VFORK": true, + "SYS_VHANGUP": true, + "SYS_VM86": true, + "SYS_VM86OLD": true, + "SYS_VMSPLICE": true, + "SYS_VM_PRESSURE_MONITOR": true, + "SYS_VSERVER": true, + "SYS_WAIT4": true, + "SYS_WAIT4_NOCANCEL": true, + "SYS_WAIT6": true, + "SYS_WAITEVENT": true, + "SYS_WAITID": true, + "SYS_WAITID_NOCANCEL": true, + "SYS_WAITPID": true, + "SYS_WATCHEVENT": true, + "SYS_WORKQ_KERNRETURN": true, + "SYS_WORKQ_OPEN": true, + "SYS_WRITE": true, + "SYS_WRITEV": true, + "SYS_WRITEV_NOCANCEL": true, + "SYS_WRITE_NOCANCEL": true, + "SYS_YIELD": true, + "SYS__LLSEEK": true, + "SYS__LWP_CONTINUE": true, + "SYS__LWP_CREATE": true, + "SYS__LWP_CTL": true, + "SYS__LWP_DETACH": true, + "SYS__LWP_EXIT": true, + "SYS__LWP_GETNAME": true, + "SYS__LWP_GETPRIVATE": true, + "SYS__LWP_KILL": true, + "SYS__LWP_PARK": true, + "SYS__LWP_SELF": true, + "SYS__LWP_SETNAME": true, + "SYS__LWP_SETPRIVATE": true, + "SYS__LWP_SUSPEND": true, + "SYS__LWP_UNPARK": true, + "SYS__LWP_UNPARK_ALL": true, + "SYS__LWP_WAIT": true, + "SYS__LWP_WAKEUP": true, + "SYS__NEWSELECT": true, + "SYS__PSET_BIND": true, + "SYS__SCHED_GETAFFINITY": true, + "SYS__SCHED_GETPARAM": true, + "SYS__SCHED_SETAFFINITY": true, + "SYS__SCHED_SETPARAM": true, + "SYS__SYSCTL": true, + "SYS__UMTX_LOCK": true, + "SYS__UMTX_OP": true, + "SYS__UMTX_UNLOCK": true, + "SYS___ACL_ACLCHECK_FD": true, + "SYS___ACL_ACLCHECK_FILE": true, + "SYS___ACL_ACLCHECK_LINK": true, + "SYS___ACL_DELETE_FD": true, + "SYS___ACL_DELETE_FILE": true, + "SYS___ACL_DELETE_LINK": true, + "SYS___ACL_GET_FD": true, + "SYS___ACL_GET_FILE": true, + "SYS___ACL_GET_LINK": true, + "SYS___ACL_SET_FD": true, + "SYS___ACL_SET_FILE": true, + "SYS___ACL_SET_LINK": true, + "SYS___CLONE": true, + "SYS___DISABLE_THREADSIGNAL": true, + "SYS___GETCWD": true, + "SYS___GETLOGIN": true, + "SYS___GET_TCB": true, + "SYS___MAC_EXECVE": true, + "SYS___MAC_GETFSSTAT": true, + "SYS___MAC_GET_FD": true, + "SYS___MAC_GET_FILE": true, + "SYS___MAC_GET_LCID": true, + "SYS___MAC_GET_LCTX": true, + "SYS___MAC_GET_LINK": true, + "SYS___MAC_GET_MOUNT": true, + "SYS___MAC_GET_PID": true, + "SYS___MAC_GET_PROC": true, + "SYS___MAC_MOUNT": true, + "SYS___MAC_SET_FD": true, + "SYS___MAC_SET_FILE": true, + "SYS___MAC_SET_LCTX": true, + "SYS___MAC_SET_LINK": true, + "SYS___MAC_SET_PROC": true, + "SYS___MAC_SYSCALL": true, + "SYS___OLD_SEMWAIT_SIGNAL": true, + "SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL": true, + "SYS___POSIX_CHOWN": true, + "SYS___POSIX_FCHOWN": true, + "SYS___POSIX_LCHOWN": true, + "SYS___POSIX_RENAME": true, + "SYS___PTHREAD_CANCELED": true, + "SYS___PTHREAD_CHDIR": true, + "SYS___PTHREAD_FCHDIR": true, + "SYS___PTHREAD_KILL": true, + "SYS___PTHREAD_MARKCANCEL": true, + "SYS___PTHREAD_SIGMASK": true, + "SYS___QUOTACTL": true, + "SYS___SEMCTL": true, + "SYS___SEMWAIT_SIGNAL": true, + "SYS___SEMWAIT_SIGNAL_NOCANCEL": true, + "SYS___SETLOGIN": true, + "SYS___SETUGID": true, + "SYS___SET_TCB": true, + "SYS___SIGACTION_SIGTRAMP": true, + "SYS___SIGTIMEDWAIT": true, + "SYS___SIGWAIT": true, + "SYS___SIGWAIT_NOCANCEL": true, + "SYS___SYSCTL": true, + "SYS___TFORK": true, + "SYS___THREXIT": true, + "SYS___THRSIGDIVERT": true, + "SYS___THRSLEEP": true, + "SYS___THRWAKEUP": true, + "S_ARCH1": true, + "S_ARCH2": true, + "S_BLKSIZE": true, + "S_IEXEC": true, + "S_IFBLK": true, + "S_IFCHR": true, + "S_IFDIR": true, + "S_IFIFO": true, + "S_IFLNK": true, + "S_IFMT": true, + "S_IFREG": true, + "S_IFSOCK": true, + "S_IFWHT": true, + "S_IREAD": true, + "S_IRGRP": true, + "S_IROTH": true, + "S_IRUSR": true, + "S_IRWXG": true, + "S_IRWXO": true, + "S_IRWXU": true, + "S_ISGID": true, + "S_ISTXT": true, + "S_ISUID": true, + "S_ISVTX": true, + "S_IWGRP": true, + "S_IWOTH": true, + "S_IWRITE": true, + "S_IWUSR": true, + "S_IXGRP": true, + "S_IXOTH": true, + "S_IXUSR": true, + "S_LOGIN_SET": true, + "SecurityAttributes": true, + "Seek": true, + "Select": true, + "Sendfile": true, + "Sendmsg": true, + "SendmsgN": true, + "Sendto": true, + "Servent": true, + "SetBpf": true, + "SetBpfBuflen": true, + "SetBpfDatalink": true, + "SetBpfHeadercmpl": true, + "SetBpfImmediate": true, + "SetBpfInterface": true, + "SetBpfPromisc": true, + "SetBpfTimeout": true, + "SetCurrentDirectory": true, + "SetEndOfFile": true, + "SetEnvironmentVariable": true, + "SetFileAttributes": true, + "SetFileCompletionNotificationModes": true, + "SetFilePointer": true, + "SetFileTime": true, + "SetHandleInformation": true, + "SetKevent": true, + "SetLsfPromisc": true, + "SetNonblock": true, + "Setdomainname": true, + "Setegid": true, + "Setenv": true, + "Seteuid": true, + "Setfsgid": true, + "Setfsuid": true, + "Setgid": true, + "Setgroups": true, + "Sethostname": true, + "Setlogin": true, + "Setpgid": true, + "Setpriority": true, + "Setprivexec": true, + "Setregid": true, + "Setresgid": true, + "Setresuid": true, + "Setreuid": true, + "Setrlimit": true, + "Setsid": true, + "Setsockopt": true, + "SetsockoptByte": true, + "SetsockoptICMPv6Filter": true, + "SetsockoptIPMreq": true, + "SetsockoptIPMreqn": true, + "SetsockoptIPv6Mreq": true, + "SetsockoptInet4Addr": true, + "SetsockoptInt": true, + "SetsockoptLinger": true, + "SetsockoptString": true, + "SetsockoptTimeval": true, + "Settimeofday": true, + "Setuid": true, + "Setxattr": true, + "Shutdown": true, + "SidTypeAlias": true, + "SidTypeComputer": true, + "SidTypeDeletedAccount": true, + "SidTypeDomain": true, + "SidTypeGroup": true, + "SidTypeInvalid": true, + "SidTypeLabel": true, + "SidTypeUnknown": true, + "SidTypeUser": true, + "SidTypeWellKnownGroup": true, + "Signal": true, + "SizeofBpfHdr": true, + "SizeofBpfInsn": true, + "SizeofBpfProgram": true, + "SizeofBpfStat": true, + "SizeofBpfVersion": true, + "SizeofBpfZbuf": true, + "SizeofBpfZbufHeader": true, + "SizeofCmsghdr": true, + "SizeofICMPv6Filter": true, + "SizeofIPMreq": true, + "SizeofIPMreqn": true, + "SizeofIPv6MTUInfo": true, + "SizeofIPv6Mreq": true, + "SizeofIfAddrmsg": true, + "SizeofIfAnnounceMsghdr": true, + "SizeofIfData": true, + "SizeofIfInfomsg": true, + "SizeofIfMsghdr": true, + "SizeofIfaMsghdr": true, + "SizeofIfmaMsghdr": true, + "SizeofIfmaMsghdr2": true, + "SizeofInet4Pktinfo": true, + "SizeofInet6Pktinfo": true, + "SizeofInotifyEvent": true, + "SizeofLinger": true, + "SizeofMsghdr": true, + "SizeofNlAttr": true, + "SizeofNlMsgerr": true, + "SizeofNlMsghdr": true, + "SizeofRtAttr": true, + "SizeofRtGenmsg": true, + "SizeofRtMetrics": true, + "SizeofRtMsg": true, + "SizeofRtMsghdr": true, + "SizeofRtNexthop": true, + "SizeofSockFilter": true, + "SizeofSockFprog": true, + "SizeofSockaddrAny": true, + "SizeofSockaddrDatalink": true, + "SizeofSockaddrInet4": true, + "SizeofSockaddrInet6": true, + "SizeofSockaddrLinklayer": true, + "SizeofSockaddrNetlink": true, + "SizeofSockaddrUnix": true, + "SizeofTCPInfo": true, + "SizeofUcred": true, + "SlicePtrFromStrings": true, + "SockFilter": true, + "SockFprog": true, + "SockaddrDatalink": true, + "SockaddrGen": true, + "SockaddrInet4": true, + "SockaddrInet6": true, + "SockaddrLinklayer": true, + "SockaddrNetlink": true, + "SockaddrUnix": true, + "Socket": true, + "SocketControlMessage": true, + "SocketDisableIPv6": true, + "Socketpair": true, + "Splice": true, + "StartProcess": true, + "StartupInfo": true, + "Stat": true, + "Stat_t": true, + "Statfs": true, + "Statfs_t": true, + "Stderr": true, + "Stdin": true, + "Stdout": true, + "StringBytePtr": true, + "StringByteSlice": true, + "StringSlicePtr": true, + "StringToSid": true, + "StringToUTF16": true, + "StringToUTF16Ptr": true, + "Symlink": true, + "Sync": true, + "SyncFileRange": true, + "SysProcAttr": true, + "SysProcIDMap": true, + "Syscall": true, + "Syscall12": true, + "Syscall15": true, + "Syscall18": true, + "Syscall6": true, + "Syscall9": true, + "Sysctl": true, + "SysctlUint32": true, + "Sysctlnode": true, + "Sysinfo": true, + "Sysinfo_t": true, + "Systemtime": true, + "TCGETS": true, + "TCIFLUSH": true, + "TCIOFLUSH": true, + "TCOFLUSH": true, + "TCPInfo": true, + "TCPKeepalive": true, + "TCP_CA_NAME_MAX": true, + "TCP_CONGCTL": true, + "TCP_CONGESTION": true, + "TCP_CONNECTIONTIMEOUT": true, + "TCP_CORK": true, + "TCP_DEFER_ACCEPT": true, + "TCP_INFO": true, + "TCP_KEEPALIVE": true, + "TCP_KEEPCNT": true, + "TCP_KEEPIDLE": true, + "TCP_KEEPINIT": true, + "TCP_KEEPINTVL": true, + "TCP_LINGER2": true, + "TCP_MAXBURST": true, + "TCP_MAXHLEN": true, + "TCP_MAXOLEN": true, + "TCP_MAXSEG": true, + "TCP_MAXWIN": true, + "TCP_MAX_SACK": true, + "TCP_MAX_WINSHIFT": true, + "TCP_MD5SIG": true, + "TCP_MD5SIG_MAXKEYLEN": true, + "TCP_MINMSS": true, + "TCP_MINMSSOVERLOAD": true, + "TCP_MSS": true, + "TCP_NODELAY": true, + "TCP_NOOPT": true, + "TCP_NOPUSH": true, + "TCP_NSTATES": true, + "TCP_QUICKACK": true, + "TCP_RXT_CONNDROPTIME": true, + "TCP_RXT_FINDROP": true, + "TCP_SACK_ENABLE": true, + "TCP_SYNCNT": true, + "TCP_VENDOR": true, + "TCP_WINDOW_CLAMP": true, + "TCSAFLUSH": true, + "TCSETS": true, + "TF_DISCONNECT": true, + "TF_REUSE_SOCKET": true, + "TF_USE_DEFAULT_WORKER": true, + "TF_USE_KERNEL_APC": true, + "TF_USE_SYSTEM_THREAD": true, + "TF_WRITE_BEHIND": true, + "TH32CS_INHERIT": true, + "TH32CS_SNAPALL": true, + "TH32CS_SNAPHEAPLIST": true, + "TH32CS_SNAPMODULE": true, + "TH32CS_SNAPMODULE32": true, + "TH32CS_SNAPPROCESS": true, + "TH32CS_SNAPTHREAD": true, + "TIME_ZONE_ID_DAYLIGHT": true, + "TIME_ZONE_ID_STANDARD": true, + "TIME_ZONE_ID_UNKNOWN": true, + "TIOCCBRK": true, + "TIOCCDTR": true, + "TIOCCONS": true, + "TIOCDCDTIMESTAMP": true, + "TIOCDRAIN": true, + "TIOCDSIMICROCODE": true, + "TIOCEXCL": true, + "TIOCEXT": true, + "TIOCFLAG_CDTRCTS": true, + "TIOCFLAG_CLOCAL": true, + "TIOCFLAG_CRTSCTS": true, + "TIOCFLAG_MDMBUF": true, + "TIOCFLAG_PPS": true, + "TIOCFLAG_SOFTCAR": true, + "TIOCFLUSH": true, + "TIOCGDEV": true, + "TIOCGDRAINWAIT": true, + "TIOCGETA": true, + "TIOCGETD": true, + "TIOCGFLAGS": true, + "TIOCGICOUNT": true, + "TIOCGLCKTRMIOS": true, + "TIOCGLINED": true, + "TIOCGPGRP": true, + "TIOCGPTN": true, + "TIOCGQSIZE": true, + "TIOCGRANTPT": true, + "TIOCGRS485": true, + "TIOCGSERIAL": true, + "TIOCGSID": true, + "TIOCGSIZE": true, + "TIOCGSOFTCAR": true, + "TIOCGTSTAMP": true, + "TIOCGWINSZ": true, + "TIOCINQ": true, + "TIOCIXOFF": true, + "TIOCIXON": true, + "TIOCLINUX": true, + "TIOCMBIC": true, + "TIOCMBIS": true, + "TIOCMGDTRWAIT": true, + "TIOCMGET": true, + "TIOCMIWAIT": true, + "TIOCMODG": true, + "TIOCMODS": true, + "TIOCMSDTRWAIT": true, + "TIOCMSET": true, + "TIOCM_CAR": true, + "TIOCM_CD": true, + "TIOCM_CTS": true, + "TIOCM_DCD": true, + "TIOCM_DSR": true, + "TIOCM_DTR": true, + "TIOCM_LE": true, + "TIOCM_RI": true, + "TIOCM_RNG": true, + "TIOCM_RTS": true, + "TIOCM_SR": true, + "TIOCM_ST": true, + "TIOCNOTTY": true, + "TIOCNXCL": true, + "TIOCOUTQ": true, + "TIOCPKT": true, + "TIOCPKT_DATA": true, + "TIOCPKT_DOSTOP": true, + "TIOCPKT_FLUSHREAD": true, + "TIOCPKT_FLUSHWRITE": true, + "TIOCPKT_IOCTL": true, + "TIOCPKT_NOSTOP": true, + "TIOCPKT_START": true, + "TIOCPKT_STOP": true, + "TIOCPTMASTER": true, + "TIOCPTMGET": true, + "TIOCPTSNAME": true, + "TIOCPTYGNAME": true, + "TIOCPTYGRANT": true, + "TIOCPTYUNLK": true, + "TIOCRCVFRAME": true, + "TIOCREMOTE": true, + "TIOCSBRK": true, + "TIOCSCONS": true, + "TIOCSCTTY": true, + "TIOCSDRAINWAIT": true, + "TIOCSDTR": true, + "TIOCSERCONFIG": true, + "TIOCSERGETLSR": true, + "TIOCSERGETMULTI": true, + "TIOCSERGSTRUCT": true, + "TIOCSERGWILD": true, + "TIOCSERSETMULTI": true, + "TIOCSERSWILD": true, + "TIOCSER_TEMT": true, + "TIOCSETA": true, + "TIOCSETAF": true, + "TIOCSETAW": true, + "TIOCSETD": true, + "TIOCSFLAGS": true, + "TIOCSIG": true, + "TIOCSLCKTRMIOS": true, + "TIOCSLINED": true, + "TIOCSPGRP": true, + "TIOCSPTLCK": true, + "TIOCSQSIZE": true, + "TIOCSRS485": true, + "TIOCSSERIAL": true, + "TIOCSSIZE": true, + "TIOCSSOFTCAR": true, + "TIOCSTART": true, + "TIOCSTAT": true, + "TIOCSTI": true, + "TIOCSTOP": true, + "TIOCSTSTAMP": true, + "TIOCSWINSZ": true, + "TIOCTIMESTAMP": true, + "TIOCUCNTL": true, + "TIOCVHANGUP": true, + "TIOCXMTFRAME": true, + "TOKEN_ADJUST_DEFAULT": true, + "TOKEN_ADJUST_GROUPS": true, + "TOKEN_ADJUST_PRIVILEGES": true, + "TOKEN_ADJUST_SESSIONID": true, + "TOKEN_ALL_ACCESS": true, + "TOKEN_ASSIGN_PRIMARY": true, + "TOKEN_DUPLICATE": true, + "TOKEN_EXECUTE": true, + "TOKEN_IMPERSONATE": true, + "TOKEN_QUERY": true, + "TOKEN_QUERY_SOURCE": true, + "TOKEN_READ": true, + "TOKEN_WRITE": true, + "TOSTOP": true, + "TRUNCATE_EXISTING": true, + "TUNATTACHFILTER": true, + "TUNDETACHFILTER": true, + "TUNGETFEATURES": true, + "TUNGETIFF": true, + "TUNGETSNDBUF": true, + "TUNGETVNETHDRSZ": true, + "TUNSETDEBUG": true, + "TUNSETGROUP": true, + "TUNSETIFF": true, + "TUNSETLINK": true, + "TUNSETNOCSUM": true, + "TUNSETOFFLOAD": true, + "TUNSETOWNER": true, + "TUNSETPERSIST": true, + "TUNSETSNDBUF": true, + "TUNSETTXFILTER": true, + "TUNSETVNETHDRSZ": true, + "Tee": true, + "TerminateProcess": true, + "Termios": true, + "Tgkill": true, + "Time": true, + "Time_t": true, + "Times": true, + "Timespec": true, + "TimespecToNsec": true, + "Timeval": true, + "Timeval32": true, + "TimevalToNsec": true, + "Timex": true, + "Timezoneinformation": true, + "Tms": true, + "Token": true, + "TokenAccessInformation": true, + "TokenAuditPolicy": true, + "TokenDefaultDacl": true, + "TokenElevation": true, + "TokenElevationType": true, + "TokenGroups": true, + "TokenGroupsAndPrivileges": true, + "TokenHasRestrictions": true, + "TokenImpersonationLevel": true, + "TokenIntegrityLevel": true, + "TokenLinkedToken": true, + "TokenLogonSid": true, + "TokenMandatoryPolicy": true, + "TokenOrigin": true, + "TokenOwner": true, + "TokenPrimaryGroup": true, + "TokenPrivileges": true, + "TokenRestrictedSids": true, + "TokenSandBoxInert": true, + "TokenSessionId": true, + "TokenSessionReference": true, + "TokenSource": true, + "TokenStatistics": true, + "TokenType": true, + "TokenUIAccess": true, + "TokenUser": true, + "TokenVirtualizationAllowed": true, + "TokenVirtualizationEnabled": true, + "Tokenprimarygroup": true, + "Tokenuser": true, + "TranslateAccountName": true, + "TranslateName": true, + "TransmitFile": true, + "TransmitFileBuffers": true, + "Truncate": true, + "UNIX_PATH_MAX": true, + "USAGE_MATCH_TYPE_AND": true, + "USAGE_MATCH_TYPE_OR": true, + "UTF16FromString": true, + "UTF16PtrFromString": true, + "UTF16ToString": true, + "Ucred": true, + "Umask": true, + "Uname": true, + "Undelete": true, + "UnixCredentials": true, + "UnixRights": true, + "Unlink": true, + "Unlinkat": true, + "UnmapViewOfFile": true, + "Unmount": true, + "Unsetenv": true, + "Unshare": true, + "UserInfo10": true, + "Ustat": true, + "Ustat_t": true, + "Utimbuf": true, + "Utime": true, + "Utimes": true, + "UtimesNano": true, + "Utsname": true, + "VDISCARD": true, + "VDSUSP": true, + "VEOF": true, + "VEOL": true, + "VEOL2": true, + "VERASE": true, + "VERASE2": true, + "VINTR": true, + "VKILL": true, + "VLNEXT": true, + "VMIN": true, + "VQUIT": true, + "VREPRINT": true, + "VSTART": true, + "VSTATUS": true, + "VSTOP": true, + "VSUSP": true, + "VSWTC": true, + "VT0": true, + "VT1": true, + "VTDLY": true, + "VTIME": true, + "VWERASE": true, + "VirtualLock": true, + "VirtualUnlock": true, + "WAIT_ABANDONED": true, + "WAIT_FAILED": true, + "WAIT_OBJECT_0": true, + "WAIT_TIMEOUT": true, + "WALL": true, + "WALLSIG": true, + "WALTSIG": true, + "WCLONE": true, + "WCONTINUED": true, + "WCOREFLAG": true, + "WEXITED": true, + "WLINUXCLONE": true, + "WNOHANG": true, + "WNOTHREAD": true, + "WNOWAIT": true, + "WNOZOMBIE": true, + "WOPTSCHECKED": true, + "WORDSIZE": true, + "WSABuf": true, + "WSACleanup": true, + "WSADESCRIPTION_LEN": true, + "WSAData": true, + "WSAEACCES": true, + "WSAECONNABORTED": true, + "WSAECONNRESET": true, + "WSAEnumProtocols": true, + "WSAID_CONNECTEX": true, + "WSAIoctl": true, + "WSAPROTOCOL_LEN": true, + "WSAProtocolChain": true, + "WSAProtocolInfo": true, + "WSARecv": true, + "WSARecvFrom": true, + "WSASYS_STATUS_LEN": true, + "WSASend": true, + "WSASendTo": true, + "WSASendto": true, + "WSAStartup": true, + "WSTOPPED": true, + "WTRAPPED": true, + "WUNTRACED": true, + "Wait4": true, + "WaitForSingleObject": true, + "WaitStatus": true, + "Win32FileAttributeData": true, + "Win32finddata": true, + "Write": true, + "WriteConsole": true, + "WriteFile": true, + "X509_ASN_ENCODING": true, + "XCASE": true, + "XP1_CONNECTIONLESS": true, + "XP1_CONNECT_DATA": true, + "XP1_DISCONNECT_DATA": true, + "XP1_EXPEDITED_DATA": true, + "XP1_GRACEFUL_CLOSE": true, + "XP1_GUARANTEED_DELIVERY": true, + "XP1_GUARANTEED_ORDER": true, + "XP1_IFS_HANDLES": true, + "XP1_MESSAGE_ORIENTED": true, + "XP1_MULTIPOINT_CONTROL_PLANE": true, + "XP1_MULTIPOINT_DATA_PLANE": true, + "XP1_PARTIAL_MESSAGE": true, + "XP1_PSEUDO_STREAM": true, + "XP1_QOS_SUPPORTED": true, + "XP1_SAN_SUPPORT_SDP": true, + "XP1_SUPPORT_BROADCAST": true, + "XP1_SUPPORT_MULTIPOINT": true, + "XP1_UNI_RECV": true, + "XP1_UNI_SEND": true, + }, + "testing": map[string]bool{ + "AllocsPerRun": true, + "B": true, + "Benchmark": true, + "BenchmarkResult": true, + "Cover": true, + "CoverBlock": true, + "CoverMode": true, + "Coverage": true, + "InternalBenchmark": true, + "InternalExample": true, + "InternalTest": true, + "M": true, + "Main": true, + "MainStart": true, + "PB": true, + "RegisterCover": true, + "RunBenchmarks": true, + "RunExamples": true, + "RunTests": true, + "Short": true, + "T": true, + "Verbose": true, + }, + "testing/iotest": map[string]bool{ + "DataErrReader": true, + "ErrTimeout": true, + "HalfReader": true, + "NewReadLogger": true, + "NewWriteLogger": true, + "OneByteReader": true, + "TimeoutReader": true, + "TruncateWriter": true, + }, + "testing/quick": map[string]bool{ + "Check": true, + "CheckEqual": true, + "CheckEqualError": true, + "CheckError": true, + "Config": true, + "Generator": true, + "SetupError": true, + "Value": true, + }, + "text/scanner": map[string]bool{ + "Char": true, + "Comment": true, + "EOF": true, + "Float": true, + "GoTokens": true, + "GoWhitespace": true, + "Ident": true, + "Int": true, + "Position": true, + "RawString": true, + "ScanChars": true, + "ScanComments": true, + "ScanFloats": true, + "ScanIdents": true, + "ScanInts": true, + "ScanRawStrings": true, + "ScanStrings": true, + "Scanner": true, + "SkipComments": true, + "String": true, + "TokenString": true, + }, + "text/tabwriter": map[string]bool{ + "AlignRight": true, + "Debug": true, + "DiscardEmptyColumns": true, + "Escape": true, + "FilterHTML": true, + "NewWriter": true, + "StripEscape": true, + "TabIndent": true, + "Writer": true, + }, + "text/template": map[string]bool{ + "ExecError": true, + "FuncMap": true, + "HTMLEscape": true, + "HTMLEscapeString": true, + "HTMLEscaper": true, + "IsTrue": true, + "JSEscape": true, + "JSEscapeString": true, + "JSEscaper": true, + "Must": true, + "New": true, + "ParseFiles": true, + "ParseGlob": true, + "Template": true, + "URLQueryEscaper": true, + }, + "text/template/parse": map[string]bool{ + "ActionNode": true, + "BoolNode": true, + "BranchNode": true, + "ChainNode": true, + "CommandNode": true, + "DotNode": true, + "FieldNode": true, + "IdentifierNode": true, + "IfNode": true, + "IsEmptyTree": true, + "ListNode": true, + "New": true, + "NewIdentifier": true, + "NilNode": true, + "Node": true, + "NodeAction": true, + "NodeBool": true, + "NodeChain": true, + "NodeCommand": true, + "NodeDot": true, + "NodeField": true, + "NodeIdentifier": true, + "NodeIf": true, + "NodeList": true, + "NodeNil": true, + "NodeNumber": true, + "NodePipe": true, + "NodeRange": true, + "NodeString": true, + "NodeTemplate": true, + "NodeText": true, + "NodeType": true, + "NodeVariable": true, + "NodeWith": true, + "NumberNode": true, + "Parse": true, + "PipeNode": true, + "Pos": true, + "RangeNode": true, + "StringNode": true, + "TemplateNode": true, + "TextNode": true, + "Tree": true, + "VariableNode": true, + "WithNode": true, + }, + "time": map[string]bool{ + "ANSIC": true, + "After": true, + "AfterFunc": true, + "April": true, + "August": true, + "Date": true, + "December": true, + "Duration": true, + "February": true, + "FixedZone": true, + "Friday": true, + "Hour": true, + "January": true, + "July": true, + "June": true, + "Kitchen": true, + "LoadLocation": true, + "LoadLocationFromTZData": true, + "Local": true, + "Location": true, + "March": true, + "May": true, + "Microsecond": true, + "Millisecond": true, + "Minute": true, + "Monday": true, + "Month": true, + "Nanosecond": true, + "NewTicker": true, + "NewTimer": true, + "November": true, + "Now": true, + "October": true, + "Parse": true, + "ParseDuration": true, + "ParseError": true, + "ParseInLocation": true, + "RFC1123": true, + "RFC1123Z": true, + "RFC3339": true, + "RFC3339Nano": true, + "RFC822": true, + "RFC822Z": true, + "RFC850": true, + "RubyDate": true, + "Saturday": true, + "Second": true, + "September": true, + "Since": true, + "Sleep": true, + "Stamp": true, + "StampMicro": true, + "StampMilli": true, + "StampNano": true, + "Sunday": true, + "Thursday": true, + "Tick": true, + "Ticker": true, + "Time": true, + "Timer": true, + "Tuesday": true, + "UTC": true, + "Unix": true, + "UnixDate": true, + "Until": true, + "Wednesday": true, + "Weekday": true, + }, + "unicode": map[string]bool{ + "ASCII_Hex_Digit": true, + "Adlam": true, + "Ahom": true, + "Anatolian_Hieroglyphs": true, + "Arabic": true, + "Armenian": true, + "Avestan": true, + "AzeriCase": true, + "Balinese": true, + "Bamum": true, + "Bassa_Vah": true, + "Batak": true, + "Bengali": true, + "Bhaiksuki": true, + "Bidi_Control": true, + "Bopomofo": true, + "Brahmi": true, + "Braille": true, + "Buginese": true, + "Buhid": true, + "C": true, + "Canadian_Aboriginal": true, + "Carian": true, + "CaseRange": true, + "CaseRanges": true, + "Categories": true, + "Caucasian_Albanian": true, + "Cc": true, + "Cf": true, + "Chakma": true, + "Cham": true, + "Cherokee": true, + "Co": true, + "Common": true, + "Coptic": true, + "Cs": true, + "Cuneiform": true, + "Cypriot": true, + "Cyrillic": true, + "Dash": true, + "Deprecated": true, + "Deseret": true, + "Devanagari": true, + "Diacritic": true, + "Digit": true, + "Duployan": true, + "Egyptian_Hieroglyphs": true, + "Elbasan": true, + "Ethiopic": true, + "Extender": true, + "FoldCategory": true, + "FoldScript": true, + "Georgian": true, + "Glagolitic": true, + "Gothic": true, + "Grantha": true, + "GraphicRanges": true, + "Greek": true, + "Gujarati": true, + "Gurmukhi": true, + "Han": true, + "Hangul": true, + "Hanunoo": true, + "Hatran": true, + "Hebrew": true, + "Hex_Digit": true, + "Hiragana": true, + "Hyphen": true, + "IDS_Binary_Operator": true, + "IDS_Trinary_Operator": true, + "Ideographic": true, + "Imperial_Aramaic": true, + "In": true, + "Inherited": true, + "Inscriptional_Pahlavi": true, + "Inscriptional_Parthian": true, + "Is": true, + "IsControl": true, + "IsDigit": true, + "IsGraphic": true, + "IsLetter": true, + "IsLower": true, + "IsMark": true, + "IsNumber": true, + "IsOneOf": true, + "IsPrint": true, + "IsPunct": true, + "IsSpace": true, + "IsSymbol": true, + "IsTitle": true, + "IsUpper": true, + "Javanese": true, + "Join_Control": true, + "Kaithi": true, + "Kannada": true, + "Katakana": true, + "Kayah_Li": true, + "Kharoshthi": true, + "Khmer": true, + "Khojki": true, + "Khudawadi": true, + "L": true, + "Lao": true, + "Latin": true, + "Lepcha": true, + "Letter": true, + "Limbu": true, + "Linear_A": true, + "Linear_B": true, + "Lisu": true, + "Ll": true, + "Lm": true, + "Lo": true, + "Logical_Order_Exception": true, + "Lower": true, + "LowerCase": true, + "Lt": true, + "Lu": true, + "Lycian": true, + "Lydian": true, + "M": true, + "Mahajani": true, + "Malayalam": true, + "Mandaic": true, + "Manichaean": true, + "Marchen": true, + "Mark": true, + "Masaram_Gondi": true, + "MaxASCII": true, + "MaxCase": true, + "MaxLatin1": true, + "MaxRune": true, + "Mc": true, + "Me": true, + "Meetei_Mayek": true, + "Mende_Kikakui": true, + "Meroitic_Cursive": true, + "Meroitic_Hieroglyphs": true, + "Miao": true, + "Mn": true, + "Modi": true, + "Mongolian": true, + "Mro": true, + "Multani": true, + "Myanmar": true, + "N": true, + "Nabataean": true, + "Nd": true, + "New_Tai_Lue": true, + "Newa": true, + "Nko": true, + "Nl": true, + "No": true, + "Noncharacter_Code_Point": true, + "Number": true, + "Nushu": true, + "Ogham": true, + "Ol_Chiki": true, + "Old_Hungarian": true, + "Old_Italic": true, + "Old_North_Arabian": true, + "Old_Permic": true, + "Old_Persian": true, + "Old_South_Arabian": true, + "Old_Turkic": true, + "Oriya": true, + "Osage": true, + "Osmanya": true, + "Other": true, + "Other_Alphabetic": true, + "Other_Default_Ignorable_Code_Point": true, + "Other_Grapheme_Extend": true, + "Other_ID_Continue": true, + "Other_ID_Start": true, + "Other_Lowercase": true, + "Other_Math": true, + "Other_Uppercase": true, + "P": true, + "Pahawh_Hmong": true, + "Palmyrene": true, + "Pattern_Syntax": true, + "Pattern_White_Space": true, + "Pau_Cin_Hau": true, + "Pc": true, + "Pd": true, + "Pe": true, + "Pf": true, + "Phags_Pa": true, + "Phoenician": true, + "Pi": true, + "Po": true, + "Prepended_Concatenation_Mark": true, + "PrintRanges": true, + "Properties": true, + "Ps": true, + "Psalter_Pahlavi": true, + "Punct": true, + "Quotation_Mark": true, + "Radical": true, + "Range16": true, + "Range32": true, + "RangeTable": true, + "Regional_Indicator": true, + "Rejang": true, + "ReplacementChar": true, + "Runic": true, + "S": true, + "STerm": true, + "Samaritan": true, + "Saurashtra": true, + "Sc": true, + "Scripts": true, + "Sentence_Terminal": true, + "Sharada": true, + "Shavian": true, + "Siddham": true, + "SignWriting": true, + "SimpleFold": true, + "Sinhala": true, + "Sk": true, + "Sm": true, + "So": true, + "Soft_Dotted": true, + "Sora_Sompeng": true, + "Soyombo": true, + "Space": true, + "SpecialCase": true, + "Sundanese": true, + "Syloti_Nagri": true, + "Symbol": true, + "Syriac": true, + "Tagalog": true, + "Tagbanwa": true, + "Tai_Le": true, + "Tai_Tham": true, + "Tai_Viet": true, + "Takri": true, + "Tamil": true, + "Tangut": true, + "Telugu": true, + "Terminal_Punctuation": true, + "Thaana": true, + "Thai": true, + "Tibetan": true, + "Tifinagh": true, + "Tirhuta": true, + "Title": true, + "TitleCase": true, + "To": true, + "ToLower": true, + "ToTitle": true, + "ToUpper": true, + "TurkishCase": true, + "Ugaritic": true, + "Unified_Ideograph": true, + "Upper": true, + "UpperCase": true, + "UpperLower": true, + "Vai": true, + "Variation_Selector": true, + "Version": true, + "Warang_Citi": true, + "White_Space": true, + "Yi": true, + "Z": true, + "Zanabazar_Square": true, + "Zl": true, + "Zp": true, + "Zs": true, + }, + "unicode/utf16": map[string]bool{ + "Decode": true, + "DecodeRune": true, + "Encode": true, + "EncodeRune": true, + "IsSurrogate": true, + }, + "unicode/utf8": map[string]bool{ + "DecodeLastRune": true, + "DecodeLastRuneInString": true, + "DecodeRune": true, + "DecodeRuneInString": true, + "EncodeRune": true, + "FullRune": true, + "FullRuneInString": true, + "MaxRune": true, + "RuneCount": true, + "RuneCountInString": true, + "RuneError": true, + "RuneLen": true, + "RuneSelf": true, + "RuneStart": true, + "UTFMax": true, + "Valid": true, + "ValidRune": true, + "ValidString": true, + }, + "unsafe": map[string]bool{ + "Alignof": true, + "ArbitraryType": true, + "Offsetof": true, + "Pointer": true, + "Sizeof": true, + }, } diff --git a/vendor/golang.org/x/tools/imports/fastwalk.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go similarity index 79% rename from vendor/golang.org/x/tools/imports/fastwalk.go rename to vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go index 31e6e27b0d5..7219c8e9ff1 100644 --- a/vendor/golang.org/x/tools/imports/fastwalk.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go @@ -2,17 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// A faster implementation of filepath.Walk. -// -// filepath.Walk's design necessarily calls os.Lstat on each file, -// even if the caller needs less info. And goimports only need to know -// the type of each file. The kernel interface provides the type in -// the Readdir call but the standard library ignored it. -// fastwalk_unix.go contains a fork of the syscall routines. -// -// See golang.org/issue/16399 - -package imports +// Package fastwalk provides a faster version of filepath.Walk for file system +// scanning tools. +package fastwalk import ( "errors" @@ -22,10 +14,27 @@ import ( "sync" ) -// traverseLink is a sentinel error for fastWalk, similar to filepath.SkipDir. -var traverseLink = errors.New("traverse symlink, assuming target is a directory") +// TraverseLink is used as a return value from WalkFuncs to indicate that the +// symlink named in the call may be traversed. +var TraverseLink = errors.New("fastwalk: traverse symlink, assuming target is a directory") -// fastWalk walks the file tree rooted at root, calling walkFn for +// SkipFiles is a used as a return value from WalkFuncs to indicate that the +// callback should not be called for any other files in the current directory. +// Child directories will still be traversed. +var SkipFiles = errors.New("fastwalk: skip remaining files in directory") + +// Walk is a faster implementation of filepath.Walk. +// +// filepath.Walk's design necessarily calls os.Lstat on each file, +// even if the caller needs less info. +// Many tools need only the type of each file. +// On some platforms, this information is provided directly by the readdir +// system call, avoiding the need to stat each file individually. +// fastwalk_unix.go contains a fork of the syscall routines. +// +// See golang.org/issue/16399 +// +// Walk walks the file tree rooted at root, calling walkFn for // each file or directory in the tree, including root. // // If fastWalk returns filepath.SkipDir, the directory is skipped. @@ -36,10 +45,10 @@ var traverseLink = errors.New("traverse symlink, assuming target is a directory" // any permission bits. // * multiple goroutines stat the filesystem concurrently. The provided // walkFn must be safe for concurrent use. -// * fastWalk can follow symlinks if walkFn returns the traverseLink +// * fastWalk can follow symlinks if walkFn returns the TraverseLink // sentinel error. It is the walkFn's responsibility to prevent // fastWalk from going into symlink cycles. -func fastWalk(root string, walkFn func(path string, typ os.FileMode) error) error { +func Walk(root string, walkFn func(path string, typ os.FileMode) error) error { // TODO(bradfitz): make numWorkers configurable? We used a // minimum of 4 to give the kernel more info about multiple // things we want, in hopes its I/O scheduling can take @@ -158,7 +167,7 @@ func (w *walker) onDirEnt(dirName, baseName string, typ os.FileMode) error { err := w.fn(joined, typ) if typ == os.ModeSymlink { - if err == traverseLink { + if err == TraverseLink { // Set callbackDone so we don't call it twice for both the // symlink-as-symlink and the symlink-as-directory later: w.enqueue(walkItem{dir: joined, callbackDone: true}) diff --git a/vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go similarity index 94% rename from vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go rename to vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go index f1fd64949db..ccffec5adc1 100644 --- a/vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go @@ -4,7 +4,7 @@ // +build freebsd openbsd netbsd -package imports +package fastwalk import "syscall" diff --git a/vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go similarity index 80% rename from vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go rename to vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go index ee85bc4dd4d..ab7fbc0a9a3 100644 --- a/vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux,!appengine darwin +// +build linux darwin +// +build !appengine -package imports +package fastwalk import "syscall" diff --git a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go new file mode 100644 index 00000000000..a3b26a7bae0 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd openbsd netbsd + +package fastwalk + +import "syscall" + +func direntNamlen(dirent *syscall.Dirent) uint64 { + return uint64(dirent.Namlen) +} diff --git a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go new file mode 100644 index 00000000000..e880d358b13 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build !appengine + +package fastwalk + +import ( + "bytes" + "syscall" + "unsafe" +) + +func direntNamlen(dirent *syscall.Dirent) uint64 { + const fixedHdr = uint16(unsafe.Offsetof(syscall.Dirent{}.Name)) + nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0])) + const nameBufLen = uint16(len(nameBuf)) + limit := dirent.Reclen - fixedHdr + if limit > nameBufLen { + limit = nameBufLen + } + nameLen := bytes.IndexByte(nameBuf[:limit], 0) + if nameLen < 0 { + panic("failed to find terminating 0 byte in dirent") + } + return uint64(nameLen) +} diff --git a/vendor/golang.org/x/tools/imports/fastwalk_portable.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go similarity index 82% rename from vendor/golang.org/x/tools/imports/fastwalk_portable.go rename to vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go index 6c2658347d1..a906b87595b 100644 --- a/vendor/golang.org/x/tools/imports/fastwalk_portable.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go @@ -4,7 +4,7 @@ // +build appengine !linux,!darwin,!freebsd,!openbsd,!netbsd -package imports +package fastwalk import ( "io/ioutil" @@ -20,8 +20,16 @@ func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) e if err != nil { return err } + skipFiles := false for _, fi := range fis { + if fi.Mode().IsRegular() && skipFiles { + continue + } if err := fn(dirName, fi.Name(), fi.Mode()&os.ModeType); err != nil { + if err == SkipFiles { + skipFiles = true + continue + } return err } } diff --git a/vendor/golang.org/x/tools/imports/fastwalk_unix.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go similarity index 90% rename from vendor/golang.org/x/tools/imports/fastwalk_unix.go rename to vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go index 5854233db92..3369b1a0b2d 100644 --- a/vendor/golang.org/x/tools/imports/fastwalk_unix.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux,!appengine darwin freebsd openbsd netbsd +// +build linux darwin freebsd openbsd netbsd +// +build !appengine -package imports +package fastwalk import ( - "bytes" "fmt" "os" "syscall" @@ -23,7 +23,7 @@ const unknownFileMode os.FileMode = os.ModeNamedPipe | os.ModeSocket | os.ModeDe func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { fd, err := syscall.Open(dirName, 0, 0) if err != nil { - return err + return &os.PathError{Op: "open", Path: dirName, Err: err} } defer syscall.Close(fd) @@ -31,6 +31,7 @@ func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) e buf := make([]byte, blockSize) // stack-allocated; doesn't escape bufp := 0 // starting read position in buf nbuf := 0 // end valid data in buf + skipFiles := false for { if bufp >= nbuf { bufp = 0 @@ -61,7 +62,14 @@ func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) e } typ = fi.Mode() & os.ModeType } + if skipFiles && typ.IsRegular() { + continue + } if err := fn(dirName, name, typ); err != nil { + if err == SkipFiles { + skipFiles = true + continue + } return err } } @@ -105,10 +113,7 @@ func parseDirEnt(buf []byte) (consumed int, name string, typ os.FileMode) { } nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0])) - nameLen := bytes.IndexByte(nameBuf[:], 0) - if nameLen < 0 { - panic("failed to find terminating 0 byte in dirent") - } + nameLen := direntNamlen(dirent) // Special cases for common things: if nameLen == 1 && nameBuf[0] == '.' { diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go new file mode 100644 index 00000000000..04bb96a3627 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -0,0 +1,250 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gopathwalk is like filepath.Walk but specialized for finding Go +// packages, particularly in $GOPATH and $GOROOT. +package gopathwalk + +import ( + "bufio" + "bytes" + "fmt" + "go/build" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + + "golang.org/x/tools/internal/fastwalk" +) + +// Options controls the behavior of a Walk call. +type Options struct { + Debug bool // Enable debug logging + ModulesEnabled bool // Search module caches. Also disables legacy goimports ignore rules. +} + +// RootType indicates the type of a Root. +type RootType int + +const ( + RootUnknown RootType = iota + RootGOROOT + RootGOPATH + RootCurrentModule + RootModuleCache + RootOther +) + +// A Root is a starting point for a Walk. +type Root struct { + Path string + Type RootType +} + +// SrcDirsRoots returns the roots from build.Default.SrcDirs(). Not modules-compatible. +func SrcDirsRoots(ctx *build.Context) []Root { + var roots []Root + roots = append(roots, Root{filepath.Join(ctx.GOROOT, "src"), RootGOROOT}) + for _, p := range filepath.SplitList(ctx.GOPATH) { + roots = append(roots, Root{filepath.Join(p, "src"), RootGOPATH}) + } + return roots +} + +// Walk walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// For each package found, add will be called (concurrently) with the absolute +// paths of the containing source directory and the package directory. +// add will be called concurrently. +func Walk(roots []Root, add func(root Root, dir string), opts Options) { + for _, root := range roots { + walkDir(root, add, opts) + } +} + +func walkDir(root Root, add func(Root, string), opts Options) { + if _, err := os.Stat(root.Path); os.IsNotExist(err) { + if opts.Debug { + log.Printf("skipping nonexistant directory: %v", root.Path) + } + return + } + if opts.Debug { + log.Printf("scanning %s", root.Path) + } + w := &walker{ + root: root, + add: add, + opts: opts, + } + w.init() + if err := fastwalk.Walk(root.Path, w.walk); err != nil { + log.Printf("gopathwalk: scanning directory %v: %v", root.Path, err) + } + + if opts.Debug { + log.Printf("scanned %s", root.Path) + } +} + +// walker is the callback for fastwalk.Walk. +type walker struct { + root Root // The source directory to scan. + add func(Root, string) // The callback that will be invoked for every possible Go package dir. + opts Options // Options passed to Walk by the user. + + ignoredDirs []os.FileInfo // The ignored directories, loaded from .goimportsignore files. +} + +// init initializes the walker based on its Options. +func (w *walker) init() { + var ignoredPaths []string + if w.root.Type == RootModuleCache { + ignoredPaths = []string{"cache"} + } + if !w.opts.ModulesEnabled && w.root.Type == RootGOPATH { + ignoredPaths = w.getIgnoredDirs(w.root.Path) + ignoredPaths = append(ignoredPaths, "v", "mod") + } + + for _, p := range ignoredPaths { + full := filepath.Join(w.root.Path, p) + if fi, err := os.Stat(full); err == nil { + w.ignoredDirs = append(w.ignoredDirs, fi) + if w.opts.Debug { + log.Printf("Directory added to ignore list: %s", full) + } + } else if w.opts.Debug { + log.Printf("Error statting ignored directory: %v", err) + } + } +} + +// getIgnoredDirs reads an optional config file at /.goimportsignore +// of relative directories to ignore when scanning for go files. +// The provided path is one of the $GOPATH entries with "src" appended. +func (w *walker) getIgnoredDirs(path string) []string { + file := filepath.Join(path, ".goimportsignore") + slurp, err := ioutil.ReadFile(file) + if w.opts.Debug { + if err != nil { + log.Print(err) + } else { + log.Printf("Read %s", file) + } + } + if err != nil { + return nil + } + + var ignoredDirs []string + bs := bufio.NewScanner(bytes.NewReader(slurp)) + for bs.Scan() { + line := strings.TrimSpace(bs.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + ignoredDirs = append(ignoredDirs, line) + } + return ignoredDirs +} + +func (w *walker) shouldSkipDir(fi os.FileInfo) bool { + for _, ignoredDir := range w.ignoredDirs { + if os.SameFile(fi, ignoredDir) { + return true + } + } + return false +} + +func (w *walker) walk(path string, typ os.FileMode) error { + dir := filepath.Dir(path) + if typ.IsRegular() { + if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) { + // Doesn't make sense to have regular files + // directly in your $GOPATH/src or $GOROOT/src. + return fastwalk.SkipFiles + } + if !strings.HasSuffix(path, ".go") { + return nil + } + + w.add(w.root, dir) + return fastwalk.SkipFiles + } + if typ == os.ModeDir { + base := filepath.Base(path) + if base == "" || base[0] == '.' || base[0] == '_' || + base == "testdata" || + (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") || + (!w.opts.ModulesEnabled && base == "node_modules") { + return filepath.SkipDir + } + fi, err := os.Lstat(path) + if err == nil && w.shouldSkipDir(fi) { + return filepath.SkipDir + } + return nil + } + if typ == os.ModeSymlink { + base := filepath.Base(path) + if strings.HasPrefix(base, ".#") { + // Emacs noise. + return nil + } + fi, err := os.Lstat(path) + if err != nil { + // Just ignore it. + return nil + } + if w.shouldTraverse(dir, fi) { + return fastwalk.TraverseLink + } + } + return nil +} + +// shouldTraverse reports whether the symlink fi, found in dir, +// should be followed. It makes sure symlinks were never visited +// before to avoid symlink loops. +func (w *walker) shouldTraverse(dir string, fi os.FileInfo) bool { + path := filepath.Join(dir, fi.Name()) + target, err := filepath.EvalSymlinks(path) + if err != nil { + return false + } + ts, err := os.Stat(target) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return false + } + if !ts.IsDir() { + return false + } + if w.shouldSkipDir(ts) { + return false + } + // Check for symlink loops by statting each directory component + // and seeing if any are the same file as ts. + for { + parent := filepath.Dir(path) + if parent == path { + // Made it to the root without seeing a cycle. + // Use this symlink. + return true + } + parentInfo, err := os.Stat(parent) + if err != nil { + return false + } + if os.SameFile(ts, parentInfo) { + // Cycle. Don't traverse. + return false + } + path = parent + } + +} diff --git a/vendor/golang.org/x/tools/internal/module/module.go b/vendor/golang.org/x/tools/internal/module/module.go new file mode 100644 index 00000000000..9a4edb9dec1 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/module/module.go @@ -0,0 +1,540 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package module defines the module.Version type +// along with support code. +package module + +// IMPORTANT NOTE +// +// This file essentially defines the set of valid import paths for the go command. +// There are many subtle considerations, including Unicode ambiguity, +// security, network, and file system representations. +// +// This file also defines the set of valid module path and version combinations, +// another topic with many subtle considerations. +// +// Changes to the semantics in this file require approval from rsc. + +import ( + "fmt" + "sort" + "strings" + "unicode" + "unicode/utf8" + + "golang.org/x/tools/internal/semver" +) + +// A Version is defined by a module path and version pair. +type Version struct { + Path string + + // Version is usually a semantic version in canonical form. + // There are two exceptions to this general rule. + // First, the top-level target of a build has no specific version + // and uses Version = "". + // Second, during MVS calculations the version "none" is used + // to represent the decision to take no version of a given module. + Version string `json:",omitempty"` +} + +// Check checks that a given module path, version pair is valid. +// In addition to the path being a valid module path +// and the version being a valid semantic version, +// the two must correspond. +// For example, the path "yaml/v2" only corresponds to +// semantic versions beginning with "v2.". +func Check(path, version string) error { + if err := CheckPath(path); err != nil { + return err + } + if !semver.IsValid(version) { + return fmt.Errorf("malformed semantic version %v", version) + } + _, pathMajor, _ := SplitPathVersion(path) + if !MatchPathMajor(version, pathMajor) { + if pathMajor == "" { + pathMajor = "v0 or v1" + } + if pathMajor[0] == '.' { // .v1 + pathMajor = pathMajor[1:] + } + return fmt.Errorf("mismatched module path %v and version %v (want %v)", path, version, pathMajor) + } + return nil +} + +// firstPathOK reports whether r can appear in the first element of a module path. +// The first element of the path must be an LDH domain name, at least for now. +// To avoid case ambiguity, the domain name must be entirely lower case. +func firstPathOK(r rune) bool { + return r == '-' || r == '.' || + '0' <= r && r <= '9' || + 'a' <= r && r <= 'z' +} + +// pathOK reports whether r can appear in an import path element. +// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~. +// This matches what "go get" has historically recognized in import paths. +// TODO(rsc): We would like to allow Unicode letters, but that requires additional +// care in the safe encoding (see note below). +func pathOK(r rune) bool { + if r < utf8.RuneSelf { + return r == '+' || r == '-' || r == '.' || r == '_' || r == '~' || + '0' <= r && r <= '9' || + 'A' <= r && r <= 'Z' || + 'a' <= r && r <= 'z' + } + return false +} + +// fileNameOK reports whether r can appear in a file name. +// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters. +// If we expand the set of allowed characters here, we have to +// work harder at detecting potential case-folding and normalization collisions. +// See note about "safe encoding" below. +func fileNameOK(r rune) bool { + if r < utf8.RuneSelf { + // Entire set of ASCII punctuation, from which we remove characters: + // ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ + // We disallow some shell special characters: " ' * < > ? ` | + // (Note that some of those are disallowed by the Windows file system as well.) + // We also disallow path separators / : and \ (fileNameOK is only called on path element characters). + // We allow spaces (U+0020) in file names. + const allowed = "!#$%&()+,-.=@[]^_{}~ " + if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { + return true + } + for i := 0; i < len(allowed); i++ { + if rune(allowed[i]) == r { + return true + } + } + return false + } + // It may be OK to add more ASCII punctuation here, but only carefully. + // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. + return unicode.IsLetter(r) +} + +// CheckPath checks that a module path is valid. +func CheckPath(path string) error { + if err := checkPath(path, false); err != nil { + return fmt.Errorf("malformed module path %q: %v", path, err) + } + i := strings.Index(path, "/") + if i < 0 { + i = len(path) + } + if i == 0 { + return fmt.Errorf("malformed module path %q: leading slash", path) + } + if !strings.Contains(path[:i], ".") { + return fmt.Errorf("malformed module path %q: missing dot in first path element", path) + } + if path[0] == '-' { + return fmt.Errorf("malformed module path %q: leading dash in first path element", path) + } + for _, r := range path[:i] { + if !firstPathOK(r) { + return fmt.Errorf("malformed module path %q: invalid char %q in first path element", path, r) + } + } + if _, _, ok := SplitPathVersion(path); !ok { + return fmt.Errorf("malformed module path %q: invalid version", path) + } + return nil +} + +// CheckImportPath checks that an import path is valid. +func CheckImportPath(path string) error { + if err := checkPath(path, false); err != nil { + return fmt.Errorf("malformed import path %q: %v", path, err) + } + return nil +} + +// checkPath checks that a general path is valid. +// It returns an error describing why but not mentioning path. +// Because these checks apply to both module paths and import paths, +// the caller is expected to add the "malformed ___ path %q: " prefix. +// fileName indicates whether the final element of the path is a file name +// (as opposed to a directory name). +func checkPath(path string, fileName bool) error { + if !utf8.ValidString(path) { + return fmt.Errorf("invalid UTF-8") + } + if path == "" { + return fmt.Errorf("empty string") + } + if strings.Contains(path, "..") { + return fmt.Errorf("double dot") + } + if strings.Contains(path, "//") { + return fmt.Errorf("double slash") + } + if path[len(path)-1] == '/' { + return fmt.Errorf("trailing slash") + } + elemStart := 0 + for i, r := range path { + if r == '/' { + if err := checkElem(path[elemStart:i], fileName); err != nil { + return err + } + elemStart = i + 1 + } + } + if err := checkElem(path[elemStart:], fileName); err != nil { + return err + } + return nil +} + +// checkElem checks whether an individual path element is valid. +// fileName indicates whether the element is a file name (not a directory name). +func checkElem(elem string, fileName bool) error { + if elem == "" { + return fmt.Errorf("empty path element") + } + if strings.Count(elem, ".") == len(elem) { + return fmt.Errorf("invalid path element %q", elem) + } + if elem[0] == '.' && !fileName { + return fmt.Errorf("leading dot in path element") + } + if elem[len(elem)-1] == '.' { + return fmt.Errorf("trailing dot in path element") + } + charOK := pathOK + if fileName { + charOK = fileNameOK + } + for _, r := range elem { + if !charOK(r) { + return fmt.Errorf("invalid char %q", r) + } + } + + // Windows disallows a bunch of path elements, sadly. + // See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file + short := elem + if i := strings.Index(short, "."); i >= 0 { + short = short[:i] + } + for _, bad := range badWindowsNames { + if strings.EqualFold(bad, short) { + return fmt.Errorf("disallowed path element %q", elem) + } + } + return nil +} + +// CheckFilePath checks whether a slash-separated file path is valid. +func CheckFilePath(path string) error { + if err := checkPath(path, true); err != nil { + return fmt.Errorf("malformed file path %q: %v", path, err) + } + return nil +} + +// badWindowsNames are the reserved file path elements on Windows. +// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file +var badWindowsNames = []string{ + "CON", + "PRN", + "AUX", + "NUL", + "COM1", + "COM2", + "COM3", + "COM4", + "COM5", + "COM6", + "COM7", + "COM8", + "COM9", + "LPT1", + "LPT2", + "LPT3", + "LPT4", + "LPT5", + "LPT6", + "LPT7", + "LPT8", + "LPT9", +} + +// SplitPathVersion returns prefix and major version such that prefix+pathMajor == path +// and version is either empty or "/vN" for N >= 2. +// As a special case, gopkg.in paths are recognized directly; +// they require ".vN" instead of "/vN", and for all N, not just N >= 2. +func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { + if strings.HasPrefix(path, "gopkg.in/") { + return splitGopkgIn(path) + } + + i := len(path) + dot := false + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9' || path[i-1] == '.') { + if path[i-1] == '.' { + dot = true + } + i-- + } + if i <= 1 || i == len(path) || path[i-1] != 'v' || path[i-2] != '/' { + return path, "", true + } + prefix, pathMajor = path[:i-2], path[i-2:] + if dot || len(pathMajor) <= 2 || pathMajor[2] == '0' || pathMajor == "/v1" { + return path, "", false + } + return prefix, pathMajor, true +} + +// splitGopkgIn is like SplitPathVersion but only for gopkg.in paths. +func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { + if !strings.HasPrefix(path, "gopkg.in/") { + return path, "", false + } + i := len(path) + if strings.HasSuffix(path, "-unstable") { + i -= len("-unstable") + } + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9') { + i-- + } + if i <= 1 || path[i-1] != 'v' || path[i-2] != '.' { + // All gopkg.in paths must end in vN for some N. + return path, "", false + } + prefix, pathMajor = path[:i-2], path[i-2:] + if len(pathMajor) <= 2 || pathMajor[2] == '0' && pathMajor != ".v0" { + return path, "", false + } + return prefix, pathMajor, true +} + +// MatchPathMajor reports whether the semantic version v +// matches the path major version pathMajor. +func MatchPathMajor(v, pathMajor string) bool { + if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { + pathMajor = strings.TrimSuffix(pathMajor, "-unstable") + } + if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" { + // Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1. + // For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405. + return true + } + m := semver.Major(v) + if pathMajor == "" { + return m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" + } + return (pathMajor[0] == '/' || pathMajor[0] == '.') && m == pathMajor[1:] +} + +// CanonicalVersion returns the canonical form of the version string v. +// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible". +func CanonicalVersion(v string) string { + cv := semver.Canonical(v) + if semver.Build(v) == "+incompatible" { + cv += "+incompatible" + } + return cv +} + +// Sort sorts the list by Path, breaking ties by comparing Versions. +func Sort(list []Version) { + sort.Slice(list, func(i, j int) bool { + mi := list[i] + mj := list[j] + if mi.Path != mj.Path { + return mi.Path < mj.Path + } + // To help go.sum formatting, allow version/file. + // Compare semver prefix by semver rules, + // file by string order. + vi := mi.Version + vj := mj.Version + var fi, fj string + if k := strings.Index(vi, "/"); k >= 0 { + vi, fi = vi[:k], vi[k:] + } + if k := strings.Index(vj, "/"); k >= 0 { + vj, fj = vj[:k], vj[k:] + } + if vi != vj { + return semver.Compare(vi, vj) < 0 + } + return fi < fj + }) +} + +// Safe encodings +// +// Module paths appear as substrings of file system paths +// (in the download cache) and of web server URLs in the proxy protocol. +// In general we cannot rely on file systems to be case-sensitive, +// nor can we rely on web servers, since they read from file systems. +// That is, we cannot rely on the file system to keep rsc.io/QUOTE +// and rsc.io/quote separate. Windows and macOS don't. +// Instead, we must never require two different casings of a file path. +// Because we want the download cache to match the proxy protocol, +// and because we want the proxy protocol to be possible to serve +// from a tree of static files (which might be stored on a case-insensitive +// file system), the proxy protocol must never require two different casings +// of a URL path either. +// +// One possibility would be to make the safe encoding be the lowercase +// hexadecimal encoding of the actual path bytes. This would avoid ever +// needing different casings of a file path, but it would be fairly illegible +// to most programmers when those paths appeared in the file system +// (including in file paths in compiler errors and stack traces) +// in web server logs, and so on. Instead, we want a safe encoding that +// leaves most paths unaltered. +// +// The safe encoding is this: +// replace every uppercase letter with an exclamation mark +// followed by the letter's lowercase equivalent. +// +// For example, +// github.com/Azure/azure-sdk-for-go -> github.com/!azure/azure-sdk-for-go. +// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy +// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus. +// +// Import paths that avoid upper-case letters are left unchanged. +// Note that because import paths are ASCII-only and avoid various +// problematic punctuation (like : < and >), the safe encoding is also ASCII-only +// and avoids the same problematic punctuation. +// +// Import paths have never allowed exclamation marks, so there is no +// need to define how to encode a literal !. +// +// Although paths are disallowed from using Unicode (see pathOK above), +// the eventual plan is to allow Unicode letters as well, to assume that +// file systems and URLs are Unicode-safe (storing UTF-8), and apply +// the !-for-uppercase convention. Note however that not all runes that +// are different but case-fold equivalent are an upper/lower pair. +// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin) +// are considered to case-fold to each other. When we do add Unicode +// letters, we must not assume that upper/lower are the only case-equivalent pairs. +// Perhaps the Kelvin symbol would be disallowed entirely, for example. +// Or perhaps it would encode as "!!k", or perhaps as "(212A)". +// +// Also, it would be nice to allow Unicode marks as well as letters, +// but marks include combining marks, and then we must deal not +// only with case folding but also normalization: both U+00E9 ('é') +// and U+0065 U+0301 ('e' followed by combining acute accent) +// look the same on the page and are treated by some file systems +// as the same path. If we do allow Unicode marks in paths, there +// must be some kind of normalization to allow only one canonical +// encoding of any character used in an import path. + +// EncodePath returns the safe encoding of the given module path. +// It fails if the module path is invalid. +func EncodePath(path string) (encoding string, err error) { + if err := CheckPath(path); err != nil { + return "", err + } + + return encodeString(path) +} + +// EncodeVersion returns the safe encoding of the given module version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func EncodeVersion(v string) (encoding string, err error) { + if err := checkElem(v, true); err != nil || strings.Contains(v, "!") { + return "", fmt.Errorf("disallowed version string %q", v) + } + return encodeString(v) +} + +func encodeString(s string) (encoding string, err error) { + haveUpper := false + for _, r := range s { + if r == '!' || r >= utf8.RuneSelf { + // This should be disallowed by CheckPath, but diagnose anyway. + // The correctness of the encoding loop below depends on it. + return "", fmt.Errorf("internal error: inconsistency in EncodePath") + } + if 'A' <= r && r <= 'Z' { + haveUpper = true + } + } + + if !haveUpper { + return s, nil + } + + var buf []byte + for _, r := range s { + if 'A' <= r && r <= 'Z' { + buf = append(buf, '!', byte(r+'a'-'A')) + } else { + buf = append(buf, byte(r)) + } + } + return string(buf), nil +} + +// DecodePath returns the module path of the given safe encoding. +// It fails if the encoding is invalid or encodes an invalid path. +func DecodePath(encoding string) (path string, err error) { + path, ok := decodeString(encoding) + if !ok { + return "", fmt.Errorf("invalid module path encoding %q", encoding) + } + if err := CheckPath(path); err != nil { + return "", fmt.Errorf("invalid module path encoding %q: %v", encoding, err) + } + return path, nil +} + +// DecodeVersion returns the version string for the given safe encoding. +// It fails if the encoding is invalid or encodes an invalid version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func DecodeVersion(encoding string) (v string, err error) { + v, ok := decodeString(encoding) + if !ok { + return "", fmt.Errorf("invalid version encoding %q", encoding) + } + if err := checkElem(v, true); err != nil { + return "", fmt.Errorf("disallowed version string %q", v) + } + return v, nil +} + +func decodeString(encoding string) (string, bool) { + var buf []byte + + bang := false + for _, r := range encoding { + if r >= utf8.RuneSelf { + return "", false + } + if bang { + bang = false + if r < 'a' || 'z' < r { + return "", false + } + buf = append(buf, byte(r+'A'-'a')) + continue + } + if r == '!' { + bang = true + continue + } + if 'A' <= r && r <= 'Z' { + return "", false + } + buf = append(buf, byte(r)) + } + if bang { + return "", false + } + return string(buf), true +} diff --git a/vendor/golang.org/x/tools/internal/semver/semver.go b/vendor/golang.org/x/tools/internal/semver/semver.go new file mode 100644 index 00000000000..4af7118e55d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/semver/semver.go @@ -0,0 +1,388 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package semver implements comparison of semantic version strings. +// In this package, semantic version strings must begin with a leading "v", +// as in "v1.0.0". +// +// The general form of a semantic version string accepted by this package is +// +// vMAJOR[.MINOR[.PATCH[-PRERELEASE][+BUILD]]] +// +// where square brackets indicate optional parts of the syntax; +// MAJOR, MINOR, and PATCH are decimal integers without extra leading zeros; +// PRERELEASE and BUILD are each a series of non-empty dot-separated identifiers +// using only alphanumeric characters and hyphens; and +// all-numeric PRERELEASE identifiers must not have leading zeros. +// +// This package follows Semantic Versioning 2.0.0 (see semver.org) +// with two exceptions. First, it requires the "v" prefix. Second, it recognizes +// vMAJOR and vMAJOR.MINOR (with no prerelease or build suffixes) +// as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0. +package semver + +// parsed returns the parsed form of a semantic version string. +type parsed struct { + major string + minor string + patch string + short string + prerelease string + build string + err string +} + +// IsValid reports whether v is a valid semantic version string. +func IsValid(v string) bool { + _, ok := parse(v) + return ok +} + +// Canonical returns the canonical formatting of the semantic version v. +// It fills in any missing .MINOR or .PATCH and discards build metadata. +// Two semantic versions compare equal only if their canonical formattings +// are identical strings. +// The canonical invalid semantic version is the empty string. +func Canonical(v string) string { + p, ok := parse(v) + if !ok { + return "" + } + if p.build != "" { + return v[:len(v)-len(p.build)] + } + if p.short != "" { + return v + p.short + } + return v +} + +// Major returns the major version prefix of the semantic version v. +// For example, Major("v2.1.0") == "v2". +// If v is an invalid semantic version string, Major returns the empty string. +func Major(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return v[:1+len(pv.major)] +} + +// MajorMinor returns the major.minor version prefix of the semantic version v. +// For example, MajorMinor("v2.1.0") == "v2.1". +// If v is an invalid semantic version string, MajorMinor returns the empty string. +func MajorMinor(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + i := 1 + len(pv.major) + if j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor { + return v[:j] + } + return v[:i] + "." + pv.minor +} + +// Prerelease returns the prerelease suffix of the semantic version v. +// For example, Prerelease("v2.1.0-pre+meta") == "-pre". +// If v is an invalid semantic version string, Prerelease returns the empty string. +func Prerelease(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return pv.prerelease +} + +// Build returns the build suffix of the semantic version v. +// For example, Build("v2.1.0+meta") == "+meta". +// If v is an invalid semantic version string, Build returns the empty string. +func Build(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return pv.build +} + +// Compare returns an integer comparing two versions according to +// according to semantic version precedence. +// The result will be 0 if v == w, -1 if v < w, or +1 if v > w. +// +// An invalid semantic version string is considered less than a valid one. +// All invalid semantic version strings compare equal to each other. +func Compare(v, w string) int { + pv, ok1 := parse(v) + pw, ok2 := parse(w) + if !ok1 && !ok2 { + return 0 + } + if !ok1 { + return -1 + } + if !ok2 { + return +1 + } + if c := compareInt(pv.major, pw.major); c != 0 { + return c + } + if c := compareInt(pv.minor, pw.minor); c != 0 { + return c + } + if c := compareInt(pv.patch, pw.patch); c != 0 { + return c + } + return comparePrerelease(pv.prerelease, pw.prerelease) +} + +// Max canonicalizes its arguments and then returns the version string +// that compares greater. +func Max(v, w string) string { + v = Canonical(v) + w = Canonical(w) + if Compare(v, w) > 0 { + return v + } + return w +} + +func parse(v string) (p parsed, ok bool) { + if v == "" || v[0] != 'v' { + p.err = "missing v prefix" + return + } + p.major, v, ok = parseInt(v[1:]) + if !ok { + p.err = "bad major version" + return + } + if v == "" { + p.minor = "0" + p.patch = "0" + p.short = ".0.0" + return + } + if v[0] != '.' { + p.err = "bad minor prefix" + ok = false + return + } + p.minor, v, ok = parseInt(v[1:]) + if !ok { + p.err = "bad minor version" + return + } + if v == "" { + p.patch = "0" + p.short = ".0" + return + } + if v[0] != '.' { + p.err = "bad patch prefix" + ok = false + return + } + p.patch, v, ok = parseInt(v[1:]) + if !ok { + p.err = "bad patch version" + return + } + if len(v) > 0 && v[0] == '-' { + p.prerelease, v, ok = parsePrerelease(v) + if !ok { + p.err = "bad prerelease" + return + } + } + if len(v) > 0 && v[0] == '+' { + p.build, v, ok = parseBuild(v) + if !ok { + p.err = "bad build" + return + } + } + if v != "" { + p.err = "junk on end" + ok = false + return + } + ok = true + return +} + +func parseInt(v string) (t, rest string, ok bool) { + if v == "" { + return + } + if v[0] < '0' || '9' < v[0] { + return + } + i := 1 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + if v[0] == '0' && i != 1 { + return + } + return v[:i], v[i:], true +} + +func parsePrerelease(v string) (t, rest string, ok bool) { + // "A pre-release version MAY be denoted by appending a hyphen and + // a series of dot separated identifiers immediately following the patch version. + // Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. + // Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes." + if v == "" || v[0] != '-' { + return + } + i := 1 + start := 1 + for i < len(v) && v[i] != '+' { + if !isIdentChar(v[i]) && v[i] != '.' { + return + } + if v[i] == '.' { + if start == i || isBadNum(v[start:i]) { + return + } + start = i + 1 + } + i++ + } + if start == i || isBadNum(v[start:i]) { + return + } + return v[:i], v[i:], true +} + +func parseBuild(v string) (t, rest string, ok bool) { + if v == "" || v[0] != '+' { + return + } + i := 1 + start := 1 + for i < len(v) { + if !isIdentChar(v[i]) { + return + } + if v[i] == '.' { + if start == i { + return + } + start = i + 1 + } + i++ + } + if start == i { + return + } + return v[:i], v[i:], true +} + +func isIdentChar(c byte) bool { + return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-' +} + +func isBadNum(v string) bool { + i := 0 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + return i == len(v) && i > 1 && v[0] == '0' +} + +func isNum(v string) bool { + i := 0 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + return i == len(v) +} + +func compareInt(x, y string) int { + if x == y { + return 0 + } + if len(x) < len(y) { + return -1 + } + if len(x) > len(y) { + return +1 + } + if x < y { + return -1 + } else { + return +1 + } +} + +func comparePrerelease(x, y string) int { + // "When major, minor, and patch are equal, a pre-release version has + // lower precedence than a normal version. + // Example: 1.0.0-alpha < 1.0.0. + // Precedence for two pre-release versions with the same major, minor, + // and patch version MUST be determined by comparing each dot separated + // identifier from left to right until a difference is found as follows: + // identifiers consisting of only digits are compared numerically and + // identifiers with letters or hyphens are compared lexically in ASCII + // sort order. Numeric identifiers always have lower precedence than + // non-numeric identifiers. A larger set of pre-release fields has a + // higher precedence than a smaller set, if all of the preceding + // identifiers are equal. + // Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < + // 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0." + if x == y { + return 0 + } + if x == "" { + return +1 + } + if y == "" { + return -1 + } + for x != "" && y != "" { + x = x[1:] // skip - or . + y = y[1:] // skip - or . + var dx, dy string + dx, x = nextIdent(x) + dy, y = nextIdent(y) + if dx != dy { + ix := isNum(dx) + iy := isNum(dy) + if ix != iy { + if ix { + return -1 + } else { + return +1 + } + } + if ix { + if len(dx) < len(dy) { + return -1 + } + if len(dx) > len(dy) { + return +1 + } + } + if dx < dy { + return -1 + } else { + return +1 + } + } + } + if x == "" { + return -1 + } else { + return +1 + } +} + +func nextIdent(x string) (dx, rest string) { + i := 0 + for i < len(x) && x[i] != '.' { + i++ + } + return x[:i], x[i:] +} diff --git a/vendor/k8s.io/api/BUILD b/vendor/k8s.io/api/BUILD index fe6ca1e4e1b..364f85d0a51 100644 --- a/vendor/k8s.io/api/BUILD +++ b/vendor/k8s.io/api/BUILD @@ -5,7 +5,6 @@ go_test( srcs = ["roundtrip_test.go"], deps = [ "//staging/src/k8s.io/api/admission/v1beta1:go_default_library", - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", @@ -29,6 +28,7 @@ go_test( "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/api/settings/v1alpha1:go_default_library", @@ -58,7 +58,6 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/api/admission/v1beta1:all-srcs", - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:all-srcs", "//staging/src/k8s.io/api/admissionregistration/v1beta1:all-srcs", "//staging/src/k8s.io/api/apps/v1:all-srcs", "//staging/src/k8s.io/api/apps/v1beta1:all-srcs", @@ -75,16 +74,21 @@ filegroup( "//staging/src/k8s.io/api/batch/v1beta1:all-srcs", "//staging/src/k8s.io/api/batch/v2alpha1:all-srcs", "//staging/src/k8s.io/api/certificates/v1beta1:all-srcs", + "//staging/src/k8s.io/api/coordination/v1:all-srcs", "//staging/src/k8s.io/api/coordination/v1beta1:all-srcs", "//staging/src/k8s.io/api/core/v1:all-srcs", "//staging/src/k8s.io/api/events/v1beta1:all-srcs", "//staging/src/k8s.io/api/extensions/v1beta1:all-srcs", "//staging/src/k8s.io/api/imagepolicy/v1alpha1:all-srcs", "//staging/src/k8s.io/api/networking/v1:all-srcs", + "//staging/src/k8s.io/api/networking/v1beta1:all-srcs", + "//staging/src/k8s.io/api/node/v1alpha1:all-srcs", + "//staging/src/k8s.io/api/node/v1beta1:all-srcs", "//staging/src/k8s.io/api/policy/v1beta1:all-srcs", "//staging/src/k8s.io/api/rbac/v1:all-srcs", "//staging/src/k8s.io/api/rbac/v1alpha1:all-srcs", "//staging/src/k8s.io/api/rbac/v1beta1:all-srcs", + "//staging/src/k8s.io/api/scheduling/v1:all-srcs", "//staging/src/k8s.io/api/scheduling/v1alpha1:all-srcs", "//staging/src/k8s.io/api/scheduling/v1beta1:all-srcs", "//staging/src/k8s.io/api/settings/v1alpha1:all-srcs", diff --git a/vendor/k8s.io/api/CONTRIBUTING.md b/vendor/k8s.io/api/CONTRIBUTING.md index 094efca3d9f..012bf76a319 100644 --- a/vendor/k8s.io/api/CONTRIBUTING.md +++ b/vendor/k8s.io/api/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/api](https://git.k8s.io/kubernetes/staging/src/k8s.io/api) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/api](https://git.k8s.io/kubernetes/staging/src/k8s.io/api) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/api/OWNERS b/vendor/k8s.io/api/OWNERS index 67952cace29..92c1f5627ab 100644 --- a/vendor/k8s.io/api/OWNERS +++ b/vendor/k8s.io/api/OWNERS @@ -1,10 +1,15 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true -approvers: -- api-approvers -reviewers: -- api-reviewers -labels: -- sig/architecture -- kind/api-change +filters: + ".*": + approvers: + - api-approvers + reviewers: + - api-reviewers + # only auto-label go file changes as kind/api-change + "\\.go$": + labels: + - kind/api-change diff --git a/vendor/k8s.io/api/README.md b/vendor/k8s.io/api/README.md index 967543a4545..7d8bb93f629 100644 --- a/vendor/k8s.io/api/README.md +++ b/vendor/k8s.io/api/README.md @@ -1 +1,19 @@ -This repo is still in the experimental stage. Shortly it will contain the schema of the API that are served by the Kubernetes apiserver. +# api + +Schema of the external API types that are served by the Kubernetes API server. + +## Purpose + +This library is the canonical location of the Kubernetes API definition. Most likely interaction with this repository is as a dependency of client-go. + +## Compatibility + +Branches track Kubernetes branches and are compatible with that repo. + +## Where does it come from? + +`api` is synced from https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/api. Code changes are made in that location, merged into `k8s.io/kubernetes` and later synced here. + +## Things you should *NOT* do + +1. https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/api is synced to k8s.io/api. All changes must be made in the former. The latter is read-only. diff --git a/vendor/k8s.io/api/SECURITY_CONTACTS b/vendor/k8s.io/api/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/api/SECURITY_CONTACTS +++ b/vendor/k8s.io/api/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/api/admission/v1beta1/doc.go b/vendor/k8s.io/api/admission/v1beta1/doc.go index f5135f0f308..92f7c19d26d 100644 --- a/vendor/k8s.io/api/admission/v1beta1/doc.go +++ b/vendor/k8s.io/api/admission/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=false // +groupName=admission.k8s.io diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go b/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go index 2b29efaca4a..0a40726faee 100644 --- a/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go +++ b/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go @@ -15,11 +15,12 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=admissionregistration.k8s.io // Package v1beta1 is the v1beta1 version of the API. // AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration -// InitializerConfiguration and validatingWebhookConfiguration is for the +// MutatingWebhookConfiguration and ValidatingWebhookConfiguration are for the // new dynamic admission controller configuration. package v1beta1 // import "k8s.io/api/admissionregistration/v1beta1" diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go index 2ca3fa6524f..1114e29a161 100644 --- a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go @@ -249,6 +249,12 @@ func (m *Rule) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } + if m.Scope != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Scope))) + i += copy(dAtA[i:], *m.Scope) + } return i, nil } @@ -462,6 +468,26 @@ func (m *Webhook) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) i += copy(dAtA[i:], *m.SideEffects) } + if m.TimeoutSeconds != nil { + dAtA[i] = 0x38 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + dAtA[i] = 0x42 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } return i, nil } @@ -563,6 +589,10 @@ func (m *Rule) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.Scope != nil { + l = len(*m.Scope) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -647,6 +677,15 @@ func (m *Webhook) Size() (n int) { l = len(*m.SideEffects) n += 1 + l + sovGenerated(uint64(l)) } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -711,6 +750,7 @@ func (this *Rule) String() string { `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, `APIVersions:` + fmt.Sprintf("%v", this.APIVersions) + `,`, `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, + `Scope:` + valueToStringGenerated(this.Scope) + `,`, `}`, }, "") return s @@ -771,6 +811,8 @@ func (this *Webhook) String() string { `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, `}`, }, "") return s @@ -1133,6 +1175,36 @@ func (m *Rule) Unmarshal(dAtA []byte) error { } m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ScopeType(dAtA[iNdEx:postIndex]) + m.Scope = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1835,6 +1907,55 @@ func (m *Webhook) Unmarshal(dAtA []byte) error { s := SideEffectClass(dAtA[iNdEx:postIndex]) m.SideEffects = &s iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2110,62 +2231,67 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 906 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x8e, 0x37, 0x29, 0x49, 0x26, 0x89, 0x76, 0x3b, 0x80, 0x14, 0xaa, 0x95, 0x1d, 0xe5, 0x80, - 0x22, 0xa1, 0xb5, 0x49, 0x41, 0x08, 0x21, 0x10, 0xaa, 0x0b, 0x0b, 0x95, 0xba, 0xbb, 0x61, 0x0a, - 0xbb, 0x12, 0xe2, 0xc0, 0xc4, 0x79, 0x49, 0x86, 0xf8, 0x97, 0x66, 0xc6, 0x59, 0x7a, 0x43, 0xe2, - 0x1f, 0x40, 0x42, 0xfc, 0x0d, 0xfc, 0x15, 0xdc, 0x7b, 0xdc, 0x0b, 0x62, 0x4f, 0x16, 0x35, 0x67, - 0x0e, 0x5c, 0x7b, 0x42, 0x63, 0x3b, 0x71, 0xd2, 0x6c, 0xbb, 0xe9, 0x85, 0x03, 0x37, 0xcf, 0xf7, - 0xe6, 0xfb, 0xde, 0xfb, 0x9e, 0xdf, 0x1b, 0xf4, 0xc5, 0xec, 0x7d, 0x61, 0xb2, 0xc0, 0x9a, 0x45, - 0x43, 0xe0, 0x3e, 0x48, 0x10, 0xd6, 0x1c, 0xfc, 0x51, 0xc0, 0xad, 0x3c, 0x40, 0x43, 0x66, 0xd1, - 0x91, 0xc7, 0x84, 0x60, 0x81, 0xcf, 0x61, 0xc2, 0x84, 0xe4, 0x54, 0xb2, 0xc0, 0xb7, 0xe6, 0xfd, - 0x21, 0x48, 0xda, 0xb7, 0x26, 0xe0, 0x03, 0xa7, 0x12, 0x46, 0x66, 0xc8, 0x03, 0x19, 0xe0, 0x5e, - 0xc6, 0x34, 0x69, 0xc8, 0xcc, 0x17, 0x32, 0xcd, 0x9c, 0xb9, 0x77, 0x6f, 0xc2, 0xe4, 0x34, 0x1a, - 0x9a, 0x4e, 0xe0, 0x59, 0x93, 0x60, 0x12, 0x58, 0xa9, 0xc0, 0x30, 0x1a, 0xa7, 0xa7, 0xf4, 0x90, - 0x7e, 0x65, 0xc2, 0x7b, 0xef, 0x16, 0x25, 0x79, 0xd4, 0x99, 0x32, 0x1f, 0xf8, 0xa9, 0x15, 0xce, - 0x26, 0x0a, 0x10, 0x96, 0x07, 0x92, 0x5a, 0xf3, 0x8d, 0x72, 0xf6, 0xac, 0xab, 0x58, 0x3c, 0xf2, - 0x25, 0xf3, 0x60, 0x83, 0xf0, 0xde, 0xcb, 0x08, 0xc2, 0x99, 0x82, 0x47, 0x2f, 0xf3, 0xba, 0xbf, - 0x6b, 0xe8, 0xee, 0x83, 0x48, 0x52, 0xc9, 0xfc, 0xc9, 0x13, 0x18, 0x4e, 0x83, 0x60, 0x76, 0x18, - 0xf8, 0x63, 0x36, 0x89, 0x32, 0xdb, 0xf8, 0x5b, 0x54, 0x53, 0x45, 0x8e, 0xa8, 0xa4, 0x6d, 0xad, - 0xa3, 0xf5, 0x1a, 0xfb, 0x6f, 0x9b, 0x45, 0xaf, 0x96, 0xb9, 0xcc, 0x70, 0x36, 0x51, 0x80, 0x30, - 0xd5, 0x6d, 0x73, 0xde, 0x37, 0x1f, 0x0d, 0xbf, 0x03, 0x47, 0x3e, 0x00, 0x49, 0x6d, 0x7c, 0x16, - 0x1b, 0xa5, 0x24, 0x36, 0x50, 0x81, 0x91, 0xa5, 0x2a, 0x3e, 0x41, 0xb5, 0x3c, 0xb3, 0x68, 0xdf, - 0xea, 0x94, 0x7b, 0x8d, 0xfd, 0xbe, 0xb9, 0xed, 0xdf, 0x30, 0x73, 0xa6, 0x5d, 0x51, 0x29, 0x48, - 0xed, 0x69, 0x2e, 0xd4, 0xfd, 0x5b, 0x43, 0x9d, 0xeb, 0x7c, 0x1d, 0x33, 0x21, 0xf1, 0x37, 0x1b, - 0xde, 0xcc, 0xed, 0xbc, 0x29, 0x76, 0xea, 0xec, 0x4e, 0xee, 0xac, 0xb6, 0x40, 0x56, 0x7c, 0xcd, - 0xd0, 0x0e, 0x93, 0xe0, 0x2d, 0x4c, 0xdd, 0xdf, 0xde, 0xd4, 0x75, 0x85, 0xdb, 0xad, 0x3c, 0xe5, - 0xce, 0x91, 0x12, 0x27, 0x59, 0x8e, 0xee, 0xcf, 0x1a, 0xaa, 0x90, 0xc8, 0x05, 0xfc, 0x16, 0xaa, - 0xd3, 0x90, 0x7d, 0xc6, 0x83, 0x28, 0x14, 0x6d, 0xad, 0x53, 0xee, 0xd5, 0xed, 0x56, 0x12, 0x1b, - 0xf5, 0x83, 0xc1, 0x51, 0x06, 0x92, 0x22, 0x8e, 0xfb, 0xa8, 0x41, 0x43, 0xf6, 0x18, 0xb8, 0x2a, - 0x25, 0x2b, 0xb4, 0x6e, 0xdf, 0x4e, 0x62, 0xa3, 0x71, 0x30, 0x38, 0x5a, 0xc0, 0x64, 0xf5, 0x8e, - 0xd2, 0xe7, 0x20, 0x82, 0x88, 0x3b, 0x20, 0xda, 0xe5, 0x42, 0x9f, 0x2c, 0x40, 0x52, 0xc4, 0xbb, - 0xbf, 0x6a, 0x08, 0xab, 0xaa, 0x9e, 0x30, 0x39, 0x7d, 0x14, 0x42, 0xe6, 0x40, 0xe0, 0x8f, 0x11, - 0x0a, 0x96, 0xa7, 0xbc, 0x48, 0x23, 0x9d, 0x8f, 0x25, 0x7a, 0x11, 0x1b, 0xad, 0xe5, 0xe9, 0xcb, - 0xd3, 0x10, 0xc8, 0x0a, 0x05, 0x0f, 0x50, 0x85, 0x47, 0x2e, 0xb4, 0x6f, 0x6d, 0xfc, 0xb4, 0x97, - 0x74, 0x56, 0x15, 0x63, 0x37, 0xf3, 0x0e, 0xa6, 0x0d, 0x23, 0xa9, 0x52, 0xf7, 0x47, 0x0d, 0xdd, - 0x39, 0x01, 0x3e, 0x67, 0x0e, 0x10, 0x18, 0x03, 0x07, 0xdf, 0x01, 0x6c, 0xa1, 0xba, 0x4f, 0x3d, - 0x10, 0x21, 0x75, 0x20, 0x1d, 0x90, 0xba, 0xbd, 0x9b, 0x73, 0xeb, 0x0f, 0x17, 0x01, 0x52, 0xdc, - 0xc1, 0x1d, 0x54, 0x51, 0x87, 0xb4, 0xae, 0x7a, 0x91, 0x47, 0xdd, 0x25, 0x69, 0x04, 0xdf, 0x45, - 0x95, 0x90, 0xca, 0x69, 0xbb, 0x9c, 0xde, 0xa8, 0xa9, 0xe8, 0x80, 0xca, 0x29, 0x49, 0xd1, 0xee, - 0x1f, 0x1a, 0xd2, 0x1f, 0x53, 0x97, 0x8d, 0xfe, 0x77, 0xfb, 0xf8, 0x8f, 0x86, 0xba, 0xd7, 0x3b, - 0xfb, 0x0f, 0x36, 0xd2, 0x5b, 0xdf, 0xc8, 0xcf, 0xb7, 0xb7, 0x75, 0x7d, 0xe9, 0x57, 0xec, 0xe4, - 0x2f, 0x15, 0x54, 0xcd, 0xaf, 0x2f, 0x27, 0x43, 0xbb, 0x72, 0x32, 0x9e, 0xa2, 0xa6, 0xe3, 0x32, - 0xf0, 0x65, 0x26, 0x9d, 0xcf, 0xf6, 0x47, 0x37, 0x6e, 0xfd, 0xe1, 0x8a, 0x88, 0xfd, 0x5a, 0x9e, - 0xa8, 0xb9, 0x8a, 0x92, 0xb5, 0x44, 0x98, 0xa2, 0x1d, 0xb5, 0x02, 0xd9, 0x36, 0x37, 0xf6, 0x3f, - 0xbc, 0xd9, 0x36, 0xad, 0xaf, 0x76, 0xd1, 0x09, 0x15, 0x13, 0x24, 0x53, 0xc6, 0xc7, 0xa8, 0x35, - 0xa6, 0xcc, 0x8d, 0x38, 0x0c, 0x02, 0x97, 0x39, 0xa7, 0xed, 0x4a, 0xda, 0x86, 0x37, 0x93, 0xd8, - 0x68, 0xdd, 0x5f, 0x0d, 0x5c, 0xc4, 0xc6, 0xee, 0x1a, 0x90, 0xae, 0xfe, 0x3a, 0x19, 0x7f, 0x8f, - 0x76, 0x97, 0x2b, 0x77, 0x02, 0x2e, 0x38, 0x32, 0xe0, 0xed, 0x9d, 0xb4, 0x5d, 0xef, 0x6c, 0x39, - 0x2d, 0x74, 0x08, 0xee, 0x82, 0x6a, 0xbf, 0x9e, 0xc4, 0xc6, 0xee, 0xc3, 0xcb, 0x8a, 0x64, 0x33, - 0x09, 0xfe, 0x04, 0x35, 0x04, 0x1b, 0xc1, 0xa7, 0xe3, 0x31, 0x38, 0x52, 0xb4, 0x5f, 0x49, 0x5d, - 0x74, 0xd5, 0x7b, 0x79, 0x52, 0xc0, 0x17, 0xb1, 0x71, 0xbb, 0x38, 0x1e, 0xba, 0x54, 0x08, 0xb2, - 0x4a, 0xeb, 0xfe, 0xa6, 0xa1, 0x57, 0x5f, 0xf0, 0xb3, 0x30, 0x45, 0x55, 0x91, 0x3d, 0x41, 0xf9, - 0xec, 0x7f, 0xb0, 0xfd, 0xaf, 0xb8, 0xfc, 0x76, 0xd9, 0x8d, 0x24, 0x36, 0xaa, 0x0b, 0x74, 0xa1, - 0x8b, 0x7b, 0xa8, 0xe6, 0x50, 0x3b, 0xf2, 0x47, 0xf9, 0xe3, 0xd9, 0xb4, 0x9b, 0x6a, 0x57, 0x0e, - 0x0f, 0x32, 0x8c, 0x2c, 0xa3, 0xf8, 0x0d, 0x54, 0x8e, 0xb8, 0x9b, 0xbf, 0x53, 0xd5, 0x24, 0x36, - 0xca, 0x5f, 0x91, 0x63, 0xa2, 0x30, 0xfb, 0xde, 0xd9, 0xb9, 0x5e, 0x7a, 0x76, 0xae, 0x97, 0x9e, - 0x9f, 0xeb, 0xa5, 0x1f, 0x12, 0x5d, 0x3b, 0x4b, 0x74, 0xed, 0x59, 0xa2, 0x6b, 0xcf, 0x13, 0x5d, - 0xfb, 0x33, 0xd1, 0xb5, 0x9f, 0xfe, 0xd2, 0x4b, 0x5f, 0x57, 0xf3, 0xd2, 0xfe, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x85, 0x06, 0x8c, 0x7f, 0xae, 0x09, 0x00, 0x00, + // 989 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x55, 0x4f, 0x6f, 0xe3, 0x44, + 0x14, 0xaf, 0x37, 0x09, 0x49, 0x26, 0xed, 0xee, 0x76, 0xf8, 0xb3, 0xa1, 0xac, 0xec, 0x28, 0x07, + 0x14, 0x09, 0xd6, 0xa6, 0x05, 0x21, 0xb4, 0x02, 0xa1, 0xba, 0xb0, 0x50, 0xa9, 0xbb, 0x5b, 0x26, + 0xfb, 0x47, 0x42, 0x1c, 0x98, 0x38, 0x2f, 0xc9, 0x10, 0xc7, 0x63, 0x79, 0xc6, 0x29, 0xbd, 0x21, + 0xf1, 0x05, 0xf8, 0x16, 0xf0, 0x25, 0x38, 0x70, 0xeb, 0x71, 0x2f, 0x88, 0x3d, 0x59, 0xd4, 0x9c, + 0x39, 0x70, 0xed, 0x09, 0x8d, 0xed, 0xd8, 0x49, 0xd3, 0x76, 0xb3, 0x17, 0x0e, 0xdc, 0x3c, 0xbf, + 0xf7, 0x7e, 0xef, 0xbd, 0xdf, 0xcc, 0x7b, 0xcf, 0xe8, 0xab, 0xf1, 0x47, 0xc2, 0x64, 0xdc, 0x1a, + 0x87, 0x3d, 0x08, 0x3c, 0x90, 0x20, 0xac, 0x29, 0x78, 0x7d, 0x1e, 0x58, 0x99, 0x81, 0xfa, 0xcc, + 0xa2, 0xfd, 0x09, 0x13, 0x82, 0x71, 0x2f, 0x80, 0x21, 0x13, 0x32, 0xa0, 0x92, 0x71, 0xcf, 0x9a, + 0x6e, 0xf7, 0x40, 0xd2, 0x6d, 0x6b, 0x08, 0x1e, 0x04, 0x54, 0x42, 0xdf, 0xf4, 0x03, 0x2e, 0x39, + 0xee, 0xa4, 0x4c, 0x93, 0xfa, 0xcc, 0xbc, 0x90, 0x69, 0x66, 0xcc, 0xad, 0x3b, 0x43, 0x26, 0x47, + 0x61, 0xcf, 0x74, 0xf8, 0xc4, 0x1a, 0xf2, 0x21, 0xb7, 0x92, 0x00, 0xbd, 0x70, 0x90, 0x9c, 0x92, + 0x43, 0xf2, 0x95, 0x06, 0xde, 0xfa, 0xa0, 0x28, 0x69, 0x42, 0x9d, 0x11, 0xf3, 0x20, 0x38, 0xb6, + 0xfc, 0xf1, 0x50, 0x01, 0xc2, 0x9a, 0x80, 0xa4, 0xd6, 0x74, 0xa9, 0x9c, 0x2d, 0xeb, 0x32, 0x56, + 0x10, 0x7a, 0x92, 0x4d, 0x60, 0x89, 0xf0, 0xe1, 0x8b, 0x08, 0xc2, 0x19, 0xc1, 0x84, 0x9e, 0xe7, + 0xb5, 0x7f, 0xd7, 0xd0, 0xed, 0xfb, 0xa1, 0xa4, 0x92, 0x79, 0xc3, 0xa7, 0xd0, 0x1b, 0x71, 0x3e, + 0xde, 0xe3, 0xde, 0x80, 0x0d, 0xc3, 0x54, 0x36, 0xfe, 0x16, 0xd5, 0x54, 0x91, 0x7d, 0x2a, 0x69, + 0x53, 0x6b, 0x69, 0x9d, 0xc6, 0xce, 0x7b, 0x66, 0x71, 0x57, 0x79, 0x2e, 0xd3, 0x1f, 0x0f, 0x15, + 0x20, 0x4c, 0xe5, 0x6d, 0x4e, 0xb7, 0xcd, 0x87, 0xbd, 0xef, 0xc0, 0x91, 0xf7, 0x41, 0x52, 0x1b, + 0x9f, 0x44, 0xc6, 0x5a, 0x1c, 0x19, 0xa8, 0xc0, 0x48, 0x1e, 0x15, 0x77, 0x51, 0x2d, 0xcb, 0x2c, + 0x9a, 0xd7, 0x5a, 0xa5, 0x4e, 0x63, 0x67, 0xdb, 0x5c, 0xf5, 0x35, 0xcc, 0x8c, 0x69, 0x97, 0x55, + 0x0a, 0x52, 0x3b, 0xca, 0x02, 0xb5, 0xff, 0xd6, 0x50, 0xeb, 0x2a, 0x5d, 0x07, 0x4c, 0x48, 0xfc, + 0xcd, 0x92, 0x36, 0x73, 0x35, 0x6d, 0x8a, 0x9d, 0x28, 0xbb, 0x99, 0x29, 0xab, 0xcd, 0x90, 0x39, + 0x5d, 0x63, 0x54, 0x61, 0x12, 0x26, 0x33, 0x51, 0xf7, 0x56, 0x17, 0x75, 0x55, 0xe1, 0xf6, 0x46, + 0x96, 0xb2, 0xb2, 0xaf, 0x82, 0x93, 0x34, 0x47, 0xfb, 0x37, 0x0d, 0x95, 0x49, 0xe8, 0x02, 0x7e, + 0x07, 0xd5, 0xa9, 0xcf, 0xbe, 0x08, 0x78, 0xe8, 0x8b, 0xa6, 0xd6, 0x2a, 0x75, 0xea, 0xf6, 0x46, + 0x1c, 0x19, 0xf5, 0xdd, 0xc3, 0xfd, 0x14, 0x24, 0x85, 0x1d, 0x6f, 0xa3, 0x06, 0xf5, 0xd9, 0x13, + 0x08, 0x54, 0x29, 0x69, 0xa1, 0x75, 0xfb, 0x46, 0x1c, 0x19, 0x8d, 0xdd, 0xc3, 0xfd, 0x19, 0x4c, + 0xe6, 0x7d, 0x54, 0xfc, 0x00, 0x04, 0x0f, 0x03, 0x07, 0x44, 0xb3, 0x54, 0xc4, 0x27, 0x33, 0x90, + 0x14, 0x76, 0xfc, 0x2e, 0xaa, 0x08, 0x87, 0xfb, 0xd0, 0x2c, 0xb7, 0xb4, 0x4e, 0xdd, 0x7e, 0x43, + 0x95, 0xdd, 0x55, 0xc0, 0x59, 0x64, 0xd4, 0x93, 0x8f, 0x47, 0xc7, 0x3e, 0x90, 0xd4, 0xa9, 0xfd, + 0xb3, 0x86, 0xb0, 0xd2, 0xf0, 0x94, 0xc9, 0xd1, 0x43, 0x1f, 0x52, 0xbd, 0x02, 0x7f, 0x8a, 0x10, + 0xcf, 0x4f, 0x99, 0x24, 0x23, 0xe9, 0xa6, 0x1c, 0x3d, 0x8b, 0x8c, 0x8d, 0xfc, 0x94, 0x84, 0x9c, + 0xa3, 0xe0, 0x43, 0x54, 0x0e, 0x42, 0x17, 0x9a, 0xd7, 0x96, 0x9e, 0xf8, 0x05, 0xef, 0xa0, 0x8a, + 0xb1, 0xd7, 0xb3, 0xfb, 0x4e, 0xae, 0x97, 0x24, 0x91, 0xda, 0x3f, 0x6a, 0xe8, 0x66, 0x17, 0x82, + 0x29, 0x73, 0x80, 0xc0, 0x00, 0x02, 0xf0, 0x1c, 0xc0, 0x16, 0xaa, 0x7b, 0x74, 0x02, 0xc2, 0xa7, + 0x0e, 0x24, 0xed, 0x54, 0xb7, 0x37, 0x33, 0x6e, 0xfd, 0xc1, 0xcc, 0x40, 0x0a, 0x1f, 0xdc, 0x42, + 0x65, 0x75, 0x48, 0xea, 0xaa, 0x17, 0x79, 0x94, 0x2f, 0x49, 0x2c, 0xf8, 0x36, 0x2a, 0xfb, 0x54, + 0x8e, 0x9a, 0xa5, 0xc4, 0xa3, 0xa6, 0xac, 0x87, 0x54, 0x8e, 0x48, 0x82, 0xb6, 0xff, 0xd0, 0x90, + 0xfe, 0x84, 0xba, 0xac, 0xff, 0xbf, 0x9b, 0xde, 0x7f, 0x34, 0xd4, 0xbe, 0x5a, 0xd9, 0x7f, 0x30, + 0xbf, 0x93, 0xc5, 0xf9, 0xfd, 0x72, 0x75, 0x59, 0x57, 0x97, 0x7e, 0xc9, 0x04, 0xff, 0x52, 0x41, + 0xd5, 0xcc, 0x3d, 0xef, 0x0c, 0xed, 0xd2, 0xce, 0x38, 0x42, 0xeb, 0x8e, 0xcb, 0xc0, 0x93, 0x69, + 0xe8, 0xac, 0xb7, 0x3f, 0x79, 0xe9, 0xab, 0xdf, 0x9b, 0x0b, 0x62, 0xbf, 0x96, 0x25, 0x5a, 0x9f, + 0x47, 0xc9, 0x42, 0x22, 0x4c, 0x51, 0x45, 0x8d, 0x40, 0x3a, 0xfb, 0x8d, 0x9d, 0x8f, 0x5f, 0x6e, + 0x9a, 0x16, 0x47, 0xbb, 0xb8, 0x09, 0x65, 0x13, 0x24, 0x8d, 0x8c, 0x0f, 0xd0, 0xc6, 0x80, 0x32, + 0x37, 0x0c, 0xe0, 0x90, 0xbb, 0xcc, 0x39, 0xce, 0xb6, 0xc7, 0xdb, 0x71, 0x64, 0x6c, 0xdc, 0x9b, + 0x37, 0x9c, 0x45, 0xc6, 0xe6, 0x02, 0x90, 0x8c, 0xfe, 0x22, 0x19, 0x7f, 0x8f, 0x36, 0xf3, 0x91, + 0xeb, 0x82, 0x0b, 0x8e, 0xe4, 0x41, 0xb3, 0x92, 0x5c, 0xd7, 0xfb, 0x2b, 0x76, 0x0b, 0xed, 0x81, + 0x3b, 0xa3, 0xda, 0xaf, 0xc7, 0x91, 0xb1, 0xf9, 0xe0, 0x7c, 0x44, 0xb2, 0x9c, 0x04, 0x7f, 0x86, + 0x1a, 0x82, 0xf5, 0xe1, 0xf3, 0xc1, 0x00, 0x1c, 0x29, 0x9a, 0xaf, 0x24, 0x2a, 0xda, 0x6a, 0xbb, + 0x76, 0x0b, 0xf8, 0x2c, 0x32, 0x6e, 0x14, 0xc7, 0x3d, 0x97, 0x0a, 0x41, 0xe6, 0x69, 0xf8, 0x2e, + 0xba, 0xae, 0x7e, 0xe0, 0x3c, 0x94, 0x5d, 0x70, 0xb8, 0xd7, 0x17, 0xcd, 0x6a, 0x4b, 0xeb, 0x54, + 0x6c, 0x1c, 0x47, 0xc6, 0xf5, 0x47, 0x0b, 0x16, 0x72, 0xce, 0x13, 0x3f, 0x46, 0xb7, 0xf2, 0x37, + 0x21, 0x30, 0x65, 0x70, 0x94, 0xef, 0xfa, 0x5a, 0xb2, 0x47, 0xdf, 0x8a, 0x23, 0xe3, 0xd6, 0xee, + 0xc5, 0x2e, 0xe4, 0x32, 0x6e, 0xfb, 0x57, 0x0d, 0xbd, 0x7a, 0x41, 0xff, 0x60, 0x8a, 0xaa, 0x22, + 0xdd, 0x8a, 0xd9, 0x38, 0xde, 0x5d, 0xbd, 0x3b, 0xce, 0xaf, 0x53, 0xbb, 0x11, 0x47, 0x46, 0x75, + 0x86, 0xce, 0xe2, 0xe2, 0x0e, 0xaa, 0x39, 0xd4, 0x0e, 0xbd, 0x7e, 0xb6, 0xcf, 0xd7, 0xed, 0x75, + 0x35, 0xbe, 0x7b, 0xbb, 0x29, 0x46, 0x72, 0x2b, 0x7e, 0x13, 0x95, 0xc2, 0xc0, 0xcd, 0x56, 0x67, + 0x35, 0x8e, 0x8c, 0xd2, 0x63, 0x72, 0x40, 0x14, 0x66, 0xdf, 0x39, 0x39, 0xd5, 0xd7, 0x9e, 0x9d, + 0xea, 0x6b, 0xcf, 0x4f, 0xf5, 0xb5, 0x1f, 0x62, 0x5d, 0x3b, 0x89, 0x75, 0xed, 0x59, 0xac, 0x6b, + 0xcf, 0x63, 0x5d, 0xfb, 0x33, 0xd6, 0xb5, 0x9f, 0xfe, 0xd2, 0xd7, 0xbe, 0xae, 0x66, 0xa5, 0xfd, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xc0, 0x7c, 0xc4, 0x6f, 0x0a, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto index 1c40ae530de..a5fa0f30d67 100644 --- a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto +++ b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto @@ -81,6 +81,18 @@ message Rule { // Depending on the enclosing object, subresources might not be allowed. // Required. repeated string resources = 3; + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + optional string scope = 4; } // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make @@ -217,6 +229,25 @@ message Webhook { // sideEffects == Unknown or Some. Defaults to Unknown. // +optional optional string sideEffects = 6; + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + optional int32 timeoutSeconds = 7; + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + repeated string admissionReviewVersions = 8; } // WebhookClientConfig contains the information to make a TLS diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/types.go b/vendor/k8s.io/api/admissionregistration/v1beta1/types.go index 49d94ec0eb7..f7025f6080c 100644 --- a/vendor/k8s.io/api/admissionregistration/v1beta1/types.go +++ b/vendor/k8s.io/api/admissionregistration/v1beta1/types.go @@ -49,8 +49,32 @@ type Rule struct { // Depending on the enclosing object, subresources might not be allowed. // Required. Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + Scope *ScopeType `json:"scope,omitempty" protobuf:"bytes,4,rep,name=scope"` } +type ScopeType string + +const ( + // ClusterScope means that scope is limited to cluster-scoped objects. + // Namespace objects are cluster-scoped. + ClusterScope ScopeType = "Cluster" + // NamespacedScope means that scope is limited to namespaced objects. + NamespacedScope ScopeType = "Namespaced" + // AllScopes means that all scopes are included. + AllScopes ScopeType = "*" +) + type FailurePolicyType string const ( @@ -216,6 +240,25 @@ type Webhook struct { // sideEffects == Unknown or Some. Defaults to Unknown. // +optional SideEffects *SideEffectClass `json:"sideEffects,omitempty" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,7,opt,name=timeoutSeconds"` + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + AdmissionReviewVersions []string `json:"admissionReviewVersions,omitempty" protobuf:"bytes,8,rep,name=admissionReviewVersions"` } // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go index c6867be1221..ab79ee6aa6e 100644 --- a/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go @@ -109,6 +109,11 @@ func (in *Rule) DeepCopyInto(out *Rule) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(ScopeType) + **out = **in + } return } @@ -257,6 +262,16 @@ func (in *Webhook) DeepCopyInto(out *Webhook) { *out = new(SideEffectClass) **out = **in } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/vendor/k8s.io/api/apps/OWNERS b/vendor/k8s.io/api/apps/OWNERS old mode 100755 new mode 100644 index 2f260571a70..5bc3cdabf72 --- a/vendor/k8s.io/api/apps/OWNERS +++ b/vendor/k8s.io/api/apps/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/api/apps/v1/doc.go b/vendor/k8s.io/api/apps/v1/doc.go index 1d66c22232b..61dc97bde52 100644 --- a/vendor/k8s.io/api/apps/v1/doc.go +++ b/vendor/k8s.io/api/apps/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/apps/v1" diff --git a/vendor/k8s.io/api/apps/v1/types.go b/vendor/k8s.io/api/apps/v1/types.go index 68ac55bf17a..2fe85745812 100644 --- a/vendor/k8s.io/api/apps/v1/types.go +++ b/vendor/k8s.io/api/apps/v1/types.go @@ -69,7 +69,7 @@ const ( // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet diff --git a/vendor/k8s.io/api/apps/v1beta1/doc.go b/vendor/k8s.io/api/apps/v1beta1/doc.go index 6047ed501d6..9072bab692f 100644 --- a/vendor/k8s.io/api/apps/v1beta1/doc.go +++ b/vendor/k8s.io/api/apps/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/apps/v1beta1" diff --git a/vendor/k8s.io/api/apps/v1beta1/generated.proto b/vendor/k8s.io/api/apps/v1beta1/generated.proto index f87f39fe94e..7942b997b60 100644 --- a/vendor/k8s.io/api/apps/v1beta1/generated.proto +++ b/vendor/k8s.io/api/apps/v1beta1/generated.proto @@ -263,7 +263,7 @@ message RollingUpdateDeployment { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } diff --git a/vendor/k8s.io/api/apps/v1beta1/types.go b/vendor/k8s.io/api/apps/v1beta1/types.go index 326902fd0f8..cf6039df693 100644 --- a/vendor/k8s.io/api/apps/v1beta1/types.go +++ b/vendor/k8s.io/api/apps/v1beta1/types.go @@ -17,7 +17,7 @@ limitations under the License. package v1beta1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" @@ -111,7 +111,7 @@ const ( // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -433,7 +433,7 @@ type RollingUpdateDeployment struct { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } diff --git a/vendor/k8s.io/api/apps/v1beta2/doc.go b/vendor/k8s.io/api/apps/v1beta2/doc.go index e93e164e10f..9f499869fdf 100644 --- a/vendor/k8s.io/api/apps/v1beta2/doc.go +++ b/vendor/k8s.io/api/apps/v1beta2/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta2 // import "k8s.io/api/apps/v1beta2" diff --git a/vendor/k8s.io/api/apps/v1beta2/generated.proto b/vendor/k8s.io/api/apps/v1beta2/generated.proto index 5d11cbe8d81..17e43970fa8 100644 --- a/vendor/k8s.io/api/apps/v1beta2/generated.proto +++ b/vendor/k8s.io/api/apps/v1beta2/generated.proto @@ -43,7 +43,7 @@ option go_package = "v1beta2"; // depend on its stability. It is primarily for internal use by controllers. message ControllerRevision { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -56,7 +56,7 @@ message ControllerRevision { // ControllerRevisionList is a resource containing a list of ControllerRevision objects. message ControllerRevisionList { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -69,12 +69,12 @@ message ControllerRevisionList { // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetSpec spec = 2; @@ -82,7 +82,7 @@ message DaemonSet { // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetStatus status = 3; } @@ -111,7 +111,7 @@ message DaemonSetCondition { // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -374,12 +374,12 @@ message DeploymentStrategy { message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetSpec spec = 2; @@ -387,7 +387,7 @@ message ReplicaSet { // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetStatus status = 3; } @@ -416,7 +416,7 @@ message ReplicaSetCondition { // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -527,7 +527,7 @@ message RollingUpdateDeployment { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } @@ -543,15 +543,15 @@ message RollingUpdateStatefulSetStrategy { // Scale represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff --git a/vendor/k8s.io/api/apps/v1beta2/types.go b/vendor/k8s.io/api/apps/v1beta2/types.go index e75589adc54..39e07e278ae 100644 --- a/vendor/k8s.io/api/apps/v1beta2/types.go +++ b/vendor/k8s.io/api/apps/v1beta2/types.go @@ -17,7 +17,7 @@ limitations under the License. package v1beta2 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" @@ -62,15 +62,15 @@ type ScaleStatus struct { // Scale represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -115,7 +115,7 @@ const ( // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -413,7 +413,7 @@ type RollingUpdateDeployment struct { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } @@ -666,12 +666,12 @@ type DaemonSetCondition struct { type DaemonSet struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -679,7 +679,7 @@ type DaemonSet struct { // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -697,7 +697,7 @@ const ( type DaemonSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -716,12 +716,12 @@ type ReplicaSet struct { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -729,7 +729,7 @@ type ReplicaSet struct { // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -740,7 +740,7 @@ type ReplicaSet struct { type ReplicaSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -850,7 +850,7 @@ type ReplicaSetCondition struct { type ControllerRevision struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -867,7 +867,7 @@ type ControllerRevision struct { type ControllerRevisionList struct { metav1.TypeMeta `json:",inline"` - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff --git a/vendor/k8s.io/api/authentication/OWNERS b/vendor/k8s.io/api/authentication/OWNERS old mode 100755 new mode 100644 index 1b888f0b803..7926aa4d912 --- a/vendor/k8s.io/api/authentication/OWNERS +++ b/vendor/k8s.io/api/authentication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sig-auth-authenticators-approvers - sig-auth-authenticators-reviewers diff --git a/vendor/k8s.io/api/authentication/v1/doc.go b/vendor/k8s.io/api/authentication/v1/doc.go index 193f154abe9..1614265bdfa 100644 --- a/vendor/k8s.io/api/authentication/v1/doc.go +++ b/vendor/k8s.io/api/authentication/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=authentication.k8s.io // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/api/authentication/v1/generated.proto b/vendor/k8s.io/api/authentication/v1/generated.proto index b69636a814d..db7be173ddf 100644 --- a/vendor/k8s.io/api/authentication/v1/generated.proto +++ b/vendor/k8s.io/api/authentication/v1/generated.proto @@ -84,7 +84,10 @@ message TokenRequestSpec { optional int64 expirationSeconds = 4; // BoundObjectRef is a reference to an object that the token will be bound to. - // The token will only be valid for as long as the bound objet exists. + // The token will only be valid for as long as the bound object exists. + // NOTE: The API server's TokenReview endpoint will validate the + // BoundObjectRef, but other audiences may not. Keep ExpirationSeconds + // small if you want prompt revocation. // +optional optional BoundObjectReference boundObjectRef = 3; } diff --git a/vendor/k8s.io/api/authentication/v1/types.go b/vendor/k8s.io/api/authentication/v1/types.go index d348c6fd405..c48b03691e4 100644 --- a/vendor/k8s.io/api/authentication/v1/types.go +++ b/vendor/k8s.io/api/authentication/v1/types.go @@ -155,7 +155,10 @@ type TokenRequestSpec struct { ExpirationSeconds *int64 `json:"expirationSeconds" protobuf:"varint,4,opt,name=expirationSeconds"` // BoundObjectRef is a reference to an object that the token will be bound to. - // The token will only be valid for as long as the bound objet exists. + // The token will only be valid for as long as the bound object exists. + // NOTE: The API server's TokenReview endpoint will validate the + // BoundObjectRef, but other audiences may not. Keep ExpirationSeconds + // small if you want prompt revocation. // +optional BoundObjectRef *BoundObjectReference `json:"boundObjectRef" protobuf:"bytes,3,opt,name=boundObjectRef"` } diff --git a/vendor/k8s.io/api/authorization/OWNERS b/vendor/k8s.io/api/authorization/OWNERS old mode 100755 new mode 100644 index ff4a7f4bf9a..dbc9a28c6f2 --- a/vendor/k8s.io/api/authorization/OWNERS +++ b/vendor/k8s.io/api/authorization/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-authorizers-approvers diff --git a/vendor/k8s.io/api/authorization/v1/doc.go b/vendor/k8s.io/api/authorization/v1/doc.go index c63ac28cfa7..cf100e6b754 100644 --- a/vendor/k8s.io/api/authorization/v1/doc.go +++ b/vendor/k8s.io/api/authorization/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=authorization.k8s.io diff --git a/vendor/k8s.io/api/autoscaling/OWNERS b/vendor/k8s.io/api/autoscaling/OWNERS old mode 100755 new mode 100644 index 4a495ec2532..dbc1e02356f --- a/vendor/k8s.io/api/autoscaling/OWNERS +++ b/vendor/k8s.io/api/autoscaling/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/api/autoscaling/v1/doc.go b/vendor/k8s.io/api/autoscaling/v1/doc.go index 9c3be845f00..8c9c09b5cb4 100644 --- a/vendor/k8s.io/api/autoscaling/v1/doc.go +++ b/vendor/k8s.io/api/autoscaling/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/autoscaling/v1" diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/BUILD b/vendor/k8s.io/api/autoscaling/v2beta1/BUILD new file mode 100644 index 00000000000..25fa9703358 --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/BUILD @@ -0,0 +1,41 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated.pb.go", + "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1", + importpath = "k8s.io/api/autoscaling/v2beta1", + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/doc.go b/vendor/k8s.io/api/autoscaling/v2beta1/doc.go new file mode 100644 index 00000000000..2cc9f11eaf6 --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +package v2beta1 // import "k8s.io/api/autoscaling/v2beta1" diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go b/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go new file mode 100644 index 00000000000..b6a5f35629b --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go @@ -0,0 +1,4307 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto + +/* + Package v2beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto + + It has these top-level messages: + CrossVersionObjectReference + ExternalMetricSource + ExternalMetricStatus + HorizontalPodAutoscaler + HorizontalPodAutoscalerCondition + HorizontalPodAutoscalerList + HorizontalPodAutoscalerSpec + HorizontalPodAutoscalerStatus + MetricSpec + MetricStatus + ObjectMetricSource + ObjectMetricStatus + PodsMetricSource + PodsMetricStatus + ResourceMetricSource + ResourceMetricStatus +*/ +package v2beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" +import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +import k8s_io_api_core_v1 "k8s.io/api/core/v1" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } +func (*CrossVersionObjectReference) ProtoMessage() {} +func (*CrossVersionObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} + +func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } +func (*ExternalMetricSource) ProtoMessage() {} +func (*ExternalMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } +func (*ExternalMetricStatus) ProtoMessage() {} +func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *HorizontalPodAutoscalerCondition) Reset() { *m = HorizontalPodAutoscalerCondition{} } +func (*HorizontalPodAutoscalerCondition) ProtoMessage() {} +func (*HorizontalPodAutoscalerCondition) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{4} +} + +func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } +func (*HorizontalPodAutoscalerList) ProtoMessage() {} +func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{5} +} + +func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } +func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} +func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{6} +} + +func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } +func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} +func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{7} +} + +func (m *MetricSpec) Reset() { *m = MetricSpec{} } +func (*MetricSpec) ProtoMessage() {} +func (*MetricSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *MetricStatus) Reset() { *m = MetricStatus{} } +func (*MetricStatus) ProtoMessage() {} +func (*MetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } +func (*ObjectMetricSource) ProtoMessage() {} +func (*ObjectMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } + +func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } +func (*ObjectMetricStatus) ProtoMessage() {} +func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } +func (*PodsMetricSource) ProtoMessage() {} +func (*PodsMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } + +func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } +func (*PodsMetricStatus) ProtoMessage() {} +func (*PodsMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } + +func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } +func (*ResourceMetricSource) ProtoMessage() {} +func (*ResourceMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } + +func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } +func (*ResourceMetricStatus) ProtoMessage() {} +func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } + +func init() { + proto.RegisterType((*CrossVersionObjectReference)(nil), "k8s.io.api.autoscaling.v2beta1.CrossVersionObjectReference") + proto.RegisterType((*ExternalMetricSource)(nil), "k8s.io.api.autoscaling.v2beta1.ExternalMetricSource") + proto.RegisterType((*ExternalMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.ExternalMetricStatus") + proto.RegisterType((*HorizontalPodAutoscaler)(nil), "k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscaler") + proto.RegisterType((*HorizontalPodAutoscalerCondition)(nil), "k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscalerCondition") + proto.RegisterType((*HorizontalPodAutoscalerList)(nil), "k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscalerList") + proto.RegisterType((*HorizontalPodAutoscalerSpec)(nil), "k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec") + proto.RegisterType((*HorizontalPodAutoscalerStatus)(nil), "k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus") + proto.RegisterType((*MetricSpec)(nil), "k8s.io.api.autoscaling.v2beta1.MetricSpec") + proto.RegisterType((*MetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.MetricStatus") + proto.RegisterType((*ObjectMetricSource)(nil), "k8s.io.api.autoscaling.v2beta1.ObjectMetricSource") + proto.RegisterType((*ObjectMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.ObjectMetricStatus") + proto.RegisterType((*PodsMetricSource)(nil), "k8s.io.api.autoscaling.v2beta1.PodsMetricSource") + proto.RegisterType((*PodsMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.PodsMetricStatus") + proto.RegisterType((*ResourceMetricSource)(nil), "k8s.io.api.autoscaling.v2beta1.ResourceMetricSource") + proto.RegisterType((*ResourceMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.ResourceMetricStatus") +} +func (m *CrossVersionObjectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CrossVersionObjectReference) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i += copy(dAtA[i:], m.Kind) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i += copy(dAtA[i:], m.APIVersion) + return i, nil +} + +func (m *ExternalMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + if m.MetricSelector != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) + n1, err := m.MetricSelector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.TargetValue != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) + n2, err := m.TargetValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.TargetAverageValue != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) + n3, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + } + return i, nil +} + +func (m *ExternalMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + if m.MetricSelector != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) + n4, err := m.MetricSelector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) + n5, err := m.CurrentValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + if m.CurrentAverageValue != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) + n6, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + return i, nil +} + +func (m *HorizontalPodAutoscaler) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscaler) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n8, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n9, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + return i, nil +} + +func (m *HorizontalPodAutoscalerCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerCondition) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i += copy(dAtA[i:], m.Status) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) + n10, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i += copy(dAtA[i:], m.Reason) + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i += copy(dAtA[i:], m.Message) + return i, nil +} + +func (m *HorizontalPodAutoscalerList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n11, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n11 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *HorizontalPodAutoscalerSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleTargetRef.Size())) + n12, err := m.ScaleTargetRef.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n12 + if m.MinReplicas != nil { + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.MinReplicas)) + } + dAtA[i] = 0x18 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) + if len(m.Metrics) > 0 { + for _, msg := range m.Metrics { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *HorizontalPodAutoscalerStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ObservedGeneration != nil { + dAtA[i] = 0x8 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + } + if m.LastScaleTime != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastScaleTime.Size())) + n13, err := m.LastScaleTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n13 + } + dAtA[i] = 0x18 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + dAtA[i] = 0x20 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) + if len(m.CurrentMetrics) > 0 { + for _, msg := range m.CurrentMetrics { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Conditions) > 0 { + for _, msg := range m.Conditions { + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *MetricSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + if m.Object != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) + n14, err := m.Object.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.Pods != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) + n15, err := m.Pods.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.Resource != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) + n16, err := m.Resource.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.External != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) + n17, err := m.External.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n17 + } + return i, nil +} + +func (m *MetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + if m.Object != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) + n18, err := m.Object.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n18 + } + if m.Pods != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) + n19, err := m.Pods.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n19 + } + if m.Resource != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) + n20, err := m.Resource.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if m.External != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) + n21, err := m.External.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n21 + } + return i, nil +} + +func (m *ObjectMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ObjectMetricSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) + n22, err := m.Target.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n22 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) + n23, err := m.TargetValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n23 + if m.Selector != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) + n24, err := m.Selector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n24 + } + if m.AverageValue != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.AverageValue.Size())) + n25, err := m.AverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n25 + } + return i, nil +} + +func (m *ObjectMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ObjectMetricStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) + n26, err := m.Target.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n26 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) + n27, err := m.CurrentValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n27 + if m.Selector != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) + n28, err := m.Selector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n28 + } + if m.AverageValue != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.AverageValue.Size())) + n29, err := m.AverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n29 + } + return i, nil +} + +func (m *PodsMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodsMetricSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) + n30, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n30 + if m.Selector != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) + n31, err := m.Selector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n31 + } + return i, nil +} + +func (m *PodsMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodsMetricStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i += copy(dAtA[i:], m.MetricName) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) + n32, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n32 + if m.Selector != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) + n33, err := m.Selector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n33 + } + return i, nil +} + +func (m *ResourceMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceMetricSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + if m.TargetAverageUtilization != nil { + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetAverageUtilization)) + } + if m.TargetAverageValue != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) + n34, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + } + return i, nil +} + +func (m *ResourceMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceMetricStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + if m.CurrentAverageUtilization != nil { + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentAverageUtilization)) + } + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) + n35, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *CrossVersionObjectReference) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExternalMetricSource) Size() (n int) { + var l int + _ = l + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + if m.MetricSelector != nil { + l = m.MetricSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TargetValue != nil { + l = m.TargetValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TargetAverageValue != nil { + l = m.TargetAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ExternalMetricStatus) Size() (n int) { + var l int + _ = l + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + if m.MetricSelector != nil { + l = m.MetricSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.CurrentValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.CurrentAverageValue != nil { + l = m.CurrentAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *HorizontalPodAutoscaler) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HorizontalPodAutoscalerCondition) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HorizontalPodAutoscalerList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HorizontalPodAutoscalerSpec) Size() (n int) { + var l int + _ = l + l = m.ScaleTargetRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.MinReplicas != nil { + n += 1 + sovGenerated(uint64(*m.MinReplicas)) + } + n += 1 + sovGenerated(uint64(m.MaxReplicas)) + if len(m.Metrics) > 0 { + for _, e := range m.Metrics { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HorizontalPodAutoscalerStatus) Size() (n int) { + var l int + _ = l + if m.ObservedGeneration != nil { + n += 1 + sovGenerated(uint64(*m.ObservedGeneration)) + } + if m.LastScaleTime != nil { + l = m.LastScaleTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.CurrentReplicas)) + n += 1 + sovGenerated(uint64(m.DesiredReplicas)) + if len(m.CurrentMetrics) > 0 { + for _, e := range m.CurrentMetrics { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *MetricSpec) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Object != nil { + l = m.Object.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Pods != nil { + l = m.Pods.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.External != nil { + l = m.External.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MetricStatus) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Object != nil { + l = m.Object.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Pods != nil { + l = m.Pods.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.External != nil { + l = m.External.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ObjectMetricSource) Size() (n int) { + var l int + _ = l + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.TargetValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ObjectMetricStatus) Size() (n int) { + var l int + _ = l + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.CurrentValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PodsMetricSource) Size() (n int) { + var l int + _ = l + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.TargetAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PodsMetricStatus) Size() (n int) { + var l int + _ = l + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.CurrentAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ResourceMetricSource) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.TargetAverageUtilization != nil { + n += 1 + sovGenerated(uint64(*m.TargetAverageUtilization)) + } + if m.TargetAverageValue != nil { + l = m.TargetAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ResourceMetricStatus) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.CurrentAverageUtilization != nil { + n += 1 + sovGenerated(uint64(*m.CurrentAverageUtilization)) + } + l = m.CurrentAverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CrossVersionObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CrossVersionObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `}`, + }, "") + return s +} +func (this *ExternalMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExternalMetricSource{`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `TargetValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExternalMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExternalMetricStatus{`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscaler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscaler{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerSpec{`, + `ScaleTargetRef:` + strings.Replace(strings.Replace(this.ScaleTargetRef.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `MinReplicas:` + valueToStringGenerated(this.MinReplicas) + `,`, + `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, + `Metrics:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Metrics), "MetricSpec", "MetricSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, + `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, + `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, + `CurrentMetrics:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentMetrics), "MetricStatus", "MetricStatus", 1), `&`, ``, 1) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "HorizontalPodAutoscalerCondition", "HorizontalPodAutoscalerCondition", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *MetricSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricSpec{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, + `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricSource", "PodsMetricSource", 1) + `,`, + `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, + `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricStatus{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, + `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, + `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, + `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectMetricSource{`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `TargetValue:` + strings.Replace(strings.Replace(this.TargetValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectMetricStatus{`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodsMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodsMetricSource{`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `TargetAverageValue:` + strings.Replace(strings.Replace(this.TargetAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodsMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodsMetricStatus{`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceMetricSource{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `TargetAverageUtilization:` + valueToStringGenerated(this.TargetAverageUtilization) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceMetricStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `CurrentAverageUtilization:` + valueToStringGenerated(this.CurrentAverageUtilization) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CrossVersionObjectReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CrossVersionObjectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CrossVersionObjectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExternalMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MetricSelector == nil { + m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TargetValue == nil { + m.TargetValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TargetAverageValue == nil { + m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExternalMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MetricSelector == nil { + m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CurrentValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CurrentAverageValue == nil { + m.CurrentAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.CurrentAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscaler) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscaler: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscaler: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = HorizontalPodAutoscalerConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, HorizontalPodAutoscaler{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ScaleTargetRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ScaleTargetRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinReplicas", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.MinReplicas = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxReplicas", wireType) + } + m.MaxReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metrics = append(m.Metrics, MetricSpec{}) + if err := m.Metrics[len(m.Metrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ObservedGeneration = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastScaleTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastScaleTime == nil { + m.LastScaleTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + } + if err := m.LastScaleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentReplicas", wireType) + } + m.CurrentReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredReplicas", wireType) + } + m.DesiredReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DesiredReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentMetrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CurrentMetrics = append(m.CurrentMetrics, MetricStatus{}) + if err := m.CurrentMetrics[len(m.CurrentMetrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, HorizontalPodAutoscalerCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = MetricSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Object == nil { + m.Object = &ObjectMetricSource{} + } + if err := m.Object.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pods == nil { + m.Pods = &PodsMetricSource{} + } + if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &ResourceMetricSource{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.External == nil { + m.External = &ExternalMetricSource{} + } + if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = MetricSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Object == nil { + m.Object = &ObjectMetricStatus{} + } + if err := m.Object.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pods == nil { + m.Pods = &PodsMetricStatus{} + } + if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &ResourceMetricStatus{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.External == nil { + m.External = &ExternalMetricStatus{} + } + if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CurrentValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodsMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodsMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodsMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodsMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodsMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodsMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CurrentAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetAverageUtilization", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TargetAverageUtilization = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TargetAverageValue == nil { + m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } + if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentAverageUtilization", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.CurrentAverageUtilization = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentAverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CurrentAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 1475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcb, 0x8f, 0x1b, 0x45, + 0x13, 0x5f, 0x3f, 0x76, 0xb3, 0x69, 0x6f, 0x76, 0xf7, 0xeb, 0x44, 0x89, 0xb3, 0xf9, 0x62, 0xaf, + 0x2c, 0x84, 0x42, 0x44, 0x66, 0x12, 0xb3, 0x3c, 0x24, 0x84, 0xc4, 0xda, 0x40, 0x12, 0xb1, 0x4e, + 0x42, 0xef, 0x26, 0x42, 0x90, 0x20, 0xda, 0x33, 0x1d, 0x6f, 0xb3, 0x9e, 0x19, 0x6b, 0xba, 0x6d, + 0x65, 0x83, 0x90, 0xb8, 0x70, 0xe7, 0x02, 0x67, 0x90, 0x38, 0x21, 0xb8, 0xc2, 0x99, 0x5b, 0x8e, + 0x39, 0x26, 0x02, 0x59, 0x64, 0xf8, 0x2f, 0x72, 0x42, 0xfd, 0x98, 0xf1, 0x8c, 0x1f, 0x6b, 0xc7, + 0x38, 0xe1, 0x71, 0x9b, 0xee, 0xaa, 0xfa, 0x55, 0x4f, 0xfd, 0xaa, 0xab, 0xbb, 0x1a, 0x5c, 0xdc, + 0x7b, 0x8d, 0x19, 0xd4, 0x33, 0xf7, 0xda, 0x75, 0xe2, 0xbb, 0x84, 0x13, 0x66, 0x76, 0x88, 0x6b, + 0x7b, 0xbe, 0xa9, 0x05, 0xb8, 0x45, 0x4d, 0xdc, 0xe6, 0x1e, 0xb3, 0x70, 0x93, 0xba, 0x0d, 0xb3, + 0x53, 0xae, 0x13, 0x8e, 0x2f, 0x98, 0x0d, 0xe2, 0x12, 0x1f, 0x73, 0x62, 0x1b, 0x2d, 0xdf, 0xe3, + 0x1e, 0x2c, 0x28, 0x7d, 0x03, 0xb7, 0xa8, 0x11, 0xd3, 0x37, 0xb4, 0xfe, 0xda, 0xb9, 0x06, 0xe5, + 0xbb, 0xed, 0xba, 0x61, 0x79, 0x8e, 0xd9, 0xf0, 0x1a, 0x9e, 0x29, 0xcd, 0xea, 0xed, 0xdb, 0x72, + 0x24, 0x07, 0xf2, 0x4b, 0xc1, 0xad, 0x95, 0x62, 0xee, 0x2d, 0xcf, 0x27, 0x66, 0x67, 0xc0, 0xe5, + 0xda, 0x46, 0x4f, 0xc7, 0xc1, 0xd6, 0x2e, 0x75, 0x89, 0xbf, 0x6f, 0xb6, 0xf6, 0x1a, 0xd2, 0xc8, + 0x27, 0xcc, 0x6b, 0xfb, 0x16, 0x79, 0x22, 0x2b, 0x66, 0x3a, 0x84, 0xe3, 0x61, 0xbe, 0xcc, 0x51, + 0x56, 0x7e, 0xdb, 0xe5, 0xd4, 0x19, 0x74, 0xf3, 0xca, 0x38, 0x03, 0x66, 0xed, 0x12, 0x07, 0xf7, + 0xdb, 0x95, 0xbe, 0x4a, 0x81, 0x53, 0x55, 0xdf, 0x63, 0xec, 0x06, 0xf1, 0x19, 0xf5, 0xdc, 0xab, + 0xf5, 0x4f, 0x88, 0xc5, 0x11, 0xb9, 0x4d, 0x7c, 0xe2, 0x5a, 0x04, 0xae, 0x83, 0xec, 0x1e, 0x75, + 0xed, 0x7c, 0x6a, 0x3d, 0x75, 0xe6, 0x70, 0x65, 0xe9, 0x5e, 0xb7, 0x38, 0x17, 0x74, 0x8b, 0xd9, + 0x77, 0xa9, 0x6b, 0x23, 0x29, 0x11, 0x1a, 0x2e, 0x76, 0x48, 0x3e, 0x9d, 0xd4, 0xb8, 0x82, 0x1d, + 0x82, 0xa4, 0x04, 0x96, 0x01, 0xc0, 0x2d, 0xaa, 0x1d, 0xe4, 0x33, 0x52, 0x0f, 0x6a, 0x3d, 0xb0, + 0x79, 0xed, 0xb2, 0x96, 0xa0, 0x98, 0x56, 0xe9, 0xeb, 0x0c, 0x38, 0xf6, 0xf6, 0x1d, 0x4e, 0x7c, + 0x17, 0x37, 0x6b, 0x84, 0xfb, 0xd4, 0xda, 0x96, 0xf1, 0x15, 0x60, 0x8e, 0x1c, 0x0b, 0x07, 0x7a, + 0x59, 0x11, 0x58, 0x2d, 0x92, 0xa0, 0x98, 0x16, 0xf4, 0xc0, 0xb2, 0x1a, 0x6d, 0x93, 0x26, 0xb1, + 0xb8, 0xe7, 0xcb, 0xc5, 0xe6, 0xca, 0x2f, 0x19, 0xbd, 0x2c, 0x8a, 0xa2, 0x66, 0xb4, 0xf6, 0x1a, + 0x62, 0x82, 0x19, 0x82, 0x1c, 0xa3, 0x73, 0xc1, 0xd8, 0xc2, 0x75, 0xd2, 0x0c, 0x4d, 0x2b, 0x30, + 0xe8, 0x16, 0x97, 0x6b, 0x09, 0x38, 0xd4, 0x07, 0x0f, 0x31, 0xc8, 0x71, 0xec, 0x37, 0x08, 0xbf, + 0x81, 0x9b, 0x6d, 0x22, 0x7f, 0x39, 0x57, 0x36, 0x0e, 0xf2, 0x66, 0x84, 0x09, 0x64, 0xbc, 0xd7, + 0xc6, 0x2e, 0xa7, 0x7c, 0xbf, 0xb2, 0x12, 0x74, 0x8b, 0xb9, 0x9d, 0x1e, 0x0c, 0x8a, 0x63, 0xc2, + 0x0e, 0x80, 0x6a, 0xb8, 0xd9, 0x21, 0x3e, 0x6e, 0x10, 0xe5, 0x29, 0x3b, 0x95, 0xa7, 0xe3, 0x41, + 0xb7, 0x08, 0x77, 0x06, 0xd0, 0xd0, 0x10, 0x0f, 0xa5, 0x6f, 0x06, 0x89, 0xe1, 0x98, 0xb7, 0xd9, + 0xbf, 0x83, 0x98, 0x5d, 0xb0, 0x64, 0xb5, 0x7d, 0x9f, 0xb8, 0x7f, 0x89, 0x99, 0x63, 0xfa, 0xb7, + 0x96, 0xaa, 0x31, 0x2c, 0x94, 0x40, 0x86, 0xfb, 0xe0, 0xa8, 0x1e, 0xcf, 0x80, 0xa0, 0x13, 0x41, + 0xb7, 0x78, 0xb4, 0x3a, 0x08, 0x87, 0x86, 0xf9, 0x28, 0xfd, 0x92, 0x06, 0x27, 0x2e, 0x79, 0x3e, + 0xbd, 0xeb, 0xb9, 0x1c, 0x37, 0xaf, 0x79, 0xf6, 0xa6, 0x2e, 0x90, 0xc4, 0x87, 0x1f, 0x83, 0x45, + 0x11, 0x3d, 0x1b, 0x73, 0x2c, 0x39, 0xca, 0x95, 0xcf, 0x4f, 0x16, 0x6b, 0x55, 0x18, 0x6a, 0x84, + 0xe3, 0x1e, 0xab, 0xbd, 0x39, 0x14, 0xa1, 0xc2, 0x5b, 0x20, 0xcb, 0x5a, 0xc4, 0xd2, 0x4c, 0xbe, + 0x6e, 0x1c, 0x5c, 0xa8, 0x8d, 0x11, 0x0b, 0xdd, 0x6e, 0x11, 0xab, 0x57, 0x4c, 0xc4, 0x08, 0x49, + 0x58, 0x48, 0xc0, 0x02, 0x93, 0x09, 0xa7, 0xb9, 0x7b, 0x63, 0x5a, 0x07, 0x12, 0xa4, 0xb2, 0xac, + 0x5d, 0x2c, 0xa8, 0x31, 0xd2, 0xe0, 0xa5, 0x2f, 0x32, 0x60, 0x7d, 0x84, 0x65, 0xd5, 0x73, 0x6d, + 0xca, 0xa9, 0xe7, 0xc2, 0x4b, 0x20, 0xcb, 0xf7, 0x5b, 0x61, 0xb2, 0x6f, 0x84, 0xab, 0xdd, 0xd9, + 0x6f, 0x91, 0xc7, 0xdd, 0xe2, 0x73, 0xe3, 0xec, 0x85, 0x1e, 0x92, 0x08, 0x70, 0x2b, 0xfa, 0xab, + 0x74, 0x02, 0x4b, 0x2f, 0xeb, 0x71, 0xb7, 0x38, 0xe4, 0x84, 0x32, 0x22, 0xa4, 0xe4, 0xe2, 0x45, + 0x6d, 0x68, 0x62, 0xc6, 0x77, 0x7c, 0xec, 0x32, 0xe5, 0x89, 0x3a, 0x61, 0xae, 0x9f, 0x9d, 0x8c, + 0x6e, 0x61, 0x51, 0x59, 0xd3, 0xab, 0x80, 0x5b, 0x03, 0x68, 0x68, 0x88, 0x07, 0xf8, 0x3c, 0x58, + 0xf0, 0x09, 0x66, 0x9e, 0x2b, 0xd3, 0xfc, 0x70, 0x2f, 0xb8, 0x48, 0xce, 0x22, 0x2d, 0x85, 0x2f, + 0x80, 0x43, 0x0e, 0x61, 0x0c, 0x37, 0x48, 0x7e, 0x5e, 0x2a, 0xae, 0x68, 0xc5, 0x43, 0x35, 0x35, + 0x8d, 0x42, 0x79, 0xe9, 0x61, 0x0a, 0x9c, 0x1a, 0x11, 0xc7, 0x2d, 0xca, 0x38, 0xbc, 0x39, 0x90, + 0xcf, 0xc6, 0x84, 0xb5, 0x83, 0x32, 0x95, 0xcd, 0xab, 0xda, 0xf7, 0x62, 0x38, 0x13, 0xcb, 0xe5, + 0x9b, 0x60, 0x9e, 0x72, 0xe2, 0x08, 0x56, 0x32, 0x67, 0x72, 0xe5, 0x57, 0xa7, 0xcc, 0xb5, 0xca, + 0x11, 0xed, 0x63, 0xfe, 0xb2, 0x40, 0x43, 0x0a, 0xb4, 0xf4, 0x6b, 0x7a, 0xe4, 0xbf, 0x89, 0x84, + 0x87, 0x9f, 0x82, 0x65, 0x39, 0x52, 0x95, 0x19, 0x91, 0xdb, 0xfa, 0x0f, 0xc7, 0xee, 0xa9, 0x03, + 0x0e, 0xf4, 0xca, 0x71, 0xbd, 0x94, 0xe5, 0xed, 0x04, 0x34, 0xea, 0x73, 0x05, 0x2f, 0x80, 0x9c, + 0x43, 0x5d, 0x44, 0x5a, 0x4d, 0x6a, 0x61, 0x95, 0x96, 0xf3, 0xea, 0x48, 0xaa, 0xf5, 0xa6, 0x51, + 0x5c, 0x07, 0xbe, 0x0c, 0x72, 0x0e, 0xbe, 0x13, 0x99, 0x64, 0xa4, 0xc9, 0x51, 0xed, 0x2f, 0x57, + 0xeb, 0x89, 0x50, 0x5c, 0x0f, 0x5e, 0x17, 0xd9, 0x20, 0xaa, 0x34, 0xcb, 0x67, 0x65, 0x98, 0xcf, + 0x8e, 0xfb, 0x3f, 0x5d, 0xe4, 0x45, 0x89, 0x88, 0x65, 0x8e, 0x84, 0x40, 0x21, 0x56, 0xe9, 0xa7, + 0x2c, 0x38, 0x7d, 0xe0, 0xde, 0x87, 0xef, 0x00, 0xe8, 0xd5, 0x19, 0xf1, 0x3b, 0xc4, 0xbe, 0xa8, + 0xae, 0x45, 0xe2, 0x7e, 0x22, 0x62, 0x9c, 0x51, 0x47, 0xe2, 0xd5, 0x01, 0x29, 0x1a, 0x62, 0x01, + 0x2d, 0x70, 0x44, 0x6c, 0x06, 0x15, 0x50, 0xaa, 0xaf, 0x42, 0x4f, 0xb6, 0xd3, 0xfe, 0x17, 0x74, + 0x8b, 0x47, 0xb6, 0xe2, 0x20, 0x28, 0x89, 0x09, 0x37, 0xc1, 0x8a, 0xae, 0xf5, 0x7d, 0x01, 0x3e, + 0xa1, 0x23, 0xb0, 0x52, 0x4d, 0x8a, 0x51, 0xbf, 0xbe, 0x80, 0xb0, 0x09, 0xa3, 0x3e, 0xb1, 0x23, + 0x88, 0x6c, 0x12, 0xe2, 0xad, 0xa4, 0x18, 0xf5, 0xeb, 0xc3, 0x26, 0x58, 0xd6, 0xa8, 0x3a, 0xde, + 0xf9, 0x79, 0x49, 0xd9, 0x8b, 0x13, 0x52, 0xa6, 0x8a, 0x6e, 0x94, 0x83, 0xd5, 0x04, 0x16, 0xea, + 0xc3, 0x86, 0x1c, 0x00, 0x2b, 0x2c, 0x71, 0x2c, 0xbf, 0x20, 0x3d, 0xbd, 0x39, 0xe5, 0x1e, 0x8c, + 0x6a, 0x65, 0xef, 0xf8, 0x8a, 0xa6, 0x18, 0x8a, 0xf9, 0x29, 0x7d, 0x9f, 0x01, 0xa0, 0x97, 0x61, + 0x70, 0x23, 0x51, 0xe4, 0xd7, 0xfb, 0x8a, 0xfc, 0x6a, 0xfc, 0x72, 0x1a, 0x2b, 0xe8, 0x37, 0xc0, + 0x82, 0x27, 0x77, 0x9e, 0x4e, 0x86, 0xf2, 0xb8, 0x65, 0x47, 0x67, 0x69, 0x84, 0x56, 0x01, 0xa2, + 0x74, 0xea, 0xfd, 0xab, 0xd1, 0xe0, 0x15, 0x90, 0x6d, 0x79, 0x76, 0x78, 0xf8, 0x9d, 0x1f, 0x87, + 0x7a, 0xcd, 0xb3, 0x59, 0x02, 0x73, 0x51, 0xac, 0x5d, 0xcc, 0x22, 0x89, 0x03, 0x3f, 0x02, 0x8b, + 0xe1, 0x75, 0x43, 0xdf, 0x4d, 0x36, 0xc6, 0x61, 0x22, 0xad, 0x9f, 0xc0, 0x5d, 0x12, 0x15, 0x34, + 0x94, 0xa0, 0x08, 0x53, 0xe0, 0x13, 0x7d, 0x5b, 0x94, 0xb5, 0x7e, 0x02, 0xfc, 0x61, 0xd7, 0x7e, + 0x85, 0x1f, 0x4a, 0x50, 0x84, 0x59, 0xfa, 0x21, 0x03, 0x96, 0x12, 0xd7, 0xd0, 0xbf, 0x83, 0x2e, + 0x95, 0xd5, 0xb3, 0xa5, 0x4b, 0x61, 0xce, 0x9e, 0x2e, 0x85, 0xfb, 0xf4, 0xe8, 0x8a, 0xe1, 0x0f, + 0xa1, 0xeb, 0x61, 0x06, 0xc0, 0xc1, 0x4c, 0x87, 0x16, 0x58, 0x50, 0xad, 0xc6, 0x2c, 0x4e, 0xb8, + 0xe8, 0xd6, 0xa1, 0x0f, 0x33, 0x0d, 0xdd, 0xd7, 0xa0, 0xa4, 0x27, 0x6a, 0x50, 0xc8, 0x2c, 0x1a, + 0xb9, 0xe8, 0x08, 0x1c, 0xd9, 0xcc, 0xdd, 0x02, 0x8b, 0x2c, 0xec, 0x80, 0xb2, 0xd3, 0x77, 0x40, + 0x32, 0xea, 0x51, 0xef, 0x13, 0x41, 0x42, 0x1b, 0x2c, 0xe1, 0x78, 0x13, 0x32, 0x3f, 0xd5, 0x6f, + 0xac, 0x8a, 0x8e, 0x27, 0xd1, 0x7d, 0x24, 0x50, 0x4b, 0xbf, 0xf5, 0x73, 0xab, 0x36, 0xe4, 0x3f, + 0x96, 0xdb, 0x67, 0xd7, 0x0b, 0xfe, 0x27, 0xe8, 0xfd, 0x36, 0x0d, 0x56, 0xfb, 0x8f, 0x93, 0xa9, + 0x9a, 0xfe, 0xbb, 0x43, 0x5f, 0x2e, 0xd2, 0x53, 0x2d, 0x3a, 0xea, 0x50, 0x26, 0x7b, 0xbd, 0x48, + 0x30, 0x91, 0x99, 0x39, 0x13, 0xa5, 0xef, 0x92, 0x31, 0x9a, 0xfe, 0x61, 0xe4, 0xb3, 0xe1, 0xaf, + 0x07, 0xd3, 0x05, 0xe9, 0x94, 0x76, 0x36, 0xf1, 0x0b, 0xc2, 0xd3, 0x0e, 0xd3, 0x8f, 0x69, 0x70, + 0x6c, 0xd8, 0x2d, 0x02, 0x56, 0xf5, 0x5b, 0xa2, 0x0a, 0x92, 0x19, 0x7f, 0x4b, 0x7c, 0xdc, 0x2d, + 0x16, 0x87, 0xb4, 0xc0, 0x21, 0x4c, 0xec, 0xb9, 0xf1, 0x7d, 0x90, 0x4f, 0x30, 0x7f, 0x9d, 0xd3, + 0x26, 0xbd, 0xab, 0x2e, 0xf7, 0xaa, 0x8d, 0xf9, 0x7f, 0xd0, 0x2d, 0xe6, 0x77, 0x46, 0xe8, 0xa0, + 0x91, 0xd6, 0x23, 0xde, 0xdc, 0x32, 0x4f, 0xfd, 0xcd, 0xed, 0xe7, 0xc1, 0x78, 0xa9, 0xd4, 0x9a, + 0x49, 0xbc, 0x3e, 0x04, 0x27, 0x93, 0x39, 0x30, 0x18, 0xb0, 0xd3, 0x41, 0xb7, 0x78, 0xb2, 0x3a, + 0x4a, 0x09, 0x8d, 0xb6, 0x1f, 0x95, 0xc8, 0x99, 0x67, 0x93, 0xc8, 0x95, 0x73, 0xf7, 0x1e, 0x15, + 0xe6, 0xee, 0x3f, 0x2a, 0xcc, 0x3d, 0x78, 0x54, 0x98, 0xfb, 0x3c, 0x28, 0xa4, 0xee, 0x05, 0x85, + 0xd4, 0xfd, 0xa0, 0x90, 0x7a, 0x10, 0x14, 0x52, 0xbf, 0x07, 0x85, 0xd4, 0x97, 0x7f, 0x14, 0xe6, + 0x3e, 0x38, 0xa4, 0x8f, 0x9e, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x05, 0x26, 0x31, 0x5d, 0x9f, + 0x18, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto b/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto new file mode 100644 index 00000000000..04bc0ed6014 --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto @@ -0,0 +1,397 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.autoscaling.v2beta1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v2beta1"; + +// CrossVersionObjectReference contains enough information to let you identify the referred resource. +message CrossVersionObjectReference { + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + optional string kind = 1; + + // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names + optional string name = 2; + + // API version of the referent + // +optional + optional string apiVersion = 3; +} + +// ExternalMetricSource indicates how to scale on a metric not associated with +// any Kubernetes object (for example length of queue in cloud +// messaging service, or QPS from loadbalancer running outside of cluster). +// Exactly one "target" type should be set. +message ExternalMetricSource { + // metricName is the name of the metric in question. + optional string metricName = 1; + + // metricSelector is used to identify a specific time series + // within a given metric. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2; + + // targetValue is the target value of the metric (as a quantity). + // Mutually exclusive with TargetAverageValue. + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3; + + // targetAverageValue is the target per-pod value of global metric (as a quantity). + // Mutually exclusive with TargetValue. + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 4; +} + +// ExternalMetricStatus indicates the current value of a global metric +// not associated with any Kubernetes object. +message ExternalMetricStatus { + // metricName is the name of a metric used for autoscaling in + // metric system. + optional string metricName = 1; + + // metricSelector is used to identify a specific time series + // within a given metric. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2; + + // currentValue is the current value of the metric (as a quantity) + optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3; + + // currentAverageValue is the current value of metric averaged over autoscaled pods. + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 4; +} + +// HorizontalPodAutoscaler is the configuration for a horizontal pod +// autoscaler, which automatically manages the replica count of any resource +// implementing the scale subresource based on the metrics specified. +message HorizontalPodAutoscaler { + // metadata is the standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the specification for the behaviour of the autoscaler. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // +optional + optional HorizontalPodAutoscalerSpec spec = 2; + + // status is the current information about the autoscaler. + // +optional + optional HorizontalPodAutoscalerStatus status = 3; +} + +// HorizontalPodAutoscalerCondition describes the state of +// a HorizontalPodAutoscaler at a certain point. +message HorizontalPodAutoscalerCondition { + // type describes the current condition + optional string type = 1; + + // status is the status of the condition (True, False, Unknown) + optional string status = 2; + + // lastTransitionTime is the last time the condition transitioned from + // one status to another + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // reason is the reason for the condition's last transition. + // +optional + optional string reason = 4; + + // message is a human-readable explanation containing details about + // the transition + // +optional + optional string message = 5; +} + +// HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects. +message HorizontalPodAutoscalerList { + // metadata is the standard list metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of horizontal pod autoscaler objects. + repeated HorizontalPodAutoscaler items = 2; +} + +// HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler. +message HorizontalPodAutoscalerSpec { + // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics + // should be collected, as well as to actually change the replica count. + optional CrossVersionObjectReference scaleTargetRef = 1; + + // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. + // It defaults to 1 pod. + // +optional + optional int32 minReplicas = 2; + + // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. + // It cannot be less that minReplicas. + optional int32 maxReplicas = 3; + + // metrics contains the specifications for which to use to calculate the + // desired replica count (the maximum replica count across all metrics will + // be used). The desired replica count is calculated multiplying the + // ratio between the target value and the current value by the current + // number of pods. Ergo, metrics used must decrease as the pod count is + // increased, and vice-versa. See the individual metric source types for + // more information about how each type of metric must respond. + // +optional + repeated MetricSpec metrics = 4; +} + +// HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler. +message HorizontalPodAutoscalerStatus { + // observedGeneration is the most recent generation observed by this autoscaler. + // +optional + optional int64 observedGeneration = 1; + + // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, + // used by the autoscaler to control how often the number of pods is changed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScaleTime = 2; + + // currentReplicas is current number of replicas of pods managed by this autoscaler, + // as last seen by the autoscaler. + optional int32 currentReplicas = 3; + + // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, + // as last calculated by the autoscaler. + optional int32 desiredReplicas = 4; + + // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional + repeated MetricStatus currentMetrics = 5; + + // conditions is the set of conditions required for this autoscaler to scale its target, + // and indicates whether or not those conditions are met. + repeated HorizontalPodAutoscalerCondition conditions = 6; +} + +// MetricSpec specifies how to scale based on a single metric +// (only `type` and one other matching field should be set at once). +message MetricSpec { + // type is the type of metric source. It should be one of "Object", + // "Pods" or "Resource", each mapping to a matching field in the object. + optional string type = 1; + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + optional ObjectMetricSource object = 2; + + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + optional PodsMetricSource pods = 3; + + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + optional ResourceMetricSource resource = 4; + + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + optional ExternalMetricSource external = 5; +} + +// MetricStatus describes the last-read state of a single metric. +message MetricStatus { + // type is the type of metric source. It will be one of "Object", + // "Pods" or "Resource", each corresponds to a matching field in the object. + optional string type = 1; + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + optional ObjectMetricStatus object = 2; + + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + optional PodsMetricStatus pods = 3; + + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + optional ResourceMetricStatus resource = 4; + + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + optional ExternalMetricStatus external = 5; +} + +// ObjectMetricSource indicates how to scale on a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +message ObjectMetricSource { + // target is the described Kubernetes object. + optional CrossVersionObjectReference target = 1; + + // metricName is the name of the metric in question. + optional string metricName = 2; + + // targetValue is the target value of the metric (as a quantity). + optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; +} + +// ObjectMetricStatus indicates the current value of a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +message ObjectMetricStatus { + // target is the described Kubernetes object. + optional CrossVersionObjectReference target = 1; + + // metricName is the name of the metric in question. + optional string metricName = 2; + + // currentValue is the current value of the metric (as a quantity). + optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; +} + +// PodsMetricSource indicates how to scale on a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +// The values will be averaged together before being compared to the target +// value. +message PodsMetricSource { + // metricName is the name of the metric in question + optional string metricName = 1; + + // targetAverageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; +} + +// PodsMetricStatus indicates the current value of a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +message PodsMetricStatus { + // metricName is the name of the metric in question + optional string metricName = 1; + + // currentAverageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; +} + +// ResourceMetricSource indicates how to scale on a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). The values will be averaged +// together before being compared to the target. Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. Only one "target" type +// should be set. +message ResourceMetricSource { + // name is the name of the resource in question. + optional string name = 1; + + // targetAverageUtilization is the target value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // +optional + optional int32 targetAverageUtilization = 2; + + // targetAverageValue is the target value of the average of the + // resource metric across all relevant pods, as a raw value (instead of as + // a percentage of the request), similar to the "pods" metric source type. + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 3; +} + +// ResourceMetricStatus indicates the current value of a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. +message ResourceMetricStatus { + // name is the name of the resource in question. + optional string name = 1; + + // currentAverageUtilization is the current value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. It will only be + // present if `targetAverageValue` was set in the corresponding metric + // specification. + // +optional + optional int32 currentAverageUtilization = 2; + + // currentAverageValue is the current value of the average of the + // resource metric across all relevant pods, as a raw value (instead of as + // a percentage of the request), similar to the "pods" metric source type. + // It will always be set, regardless of the corresponding metric specification. + optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 3; +} + diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/register.go b/vendor/k8s.io/api/autoscaling/v2beta1/register.go new file mode 100644 index 00000000000..12d697f0130 --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/register.go @@ -0,0 +1,52 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "autoscaling" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v2beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &HorizontalPodAutoscaler{}, + &HorizontalPodAutoscalerList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/types.go b/vendor/k8s.io/api/autoscaling/v2beta1/types.go new file mode 100644 index 00000000000..6a30e6774db --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/types.go @@ -0,0 +1,405 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +import ( + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CrossVersionObjectReference contains enough information to let you identify the referred resource. +type CrossVersionObjectReference struct { + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + // API version of the referent + // +optional + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` +} + +// HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler. +type HorizontalPodAutoscalerSpec struct { + // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics + // should be collected, as well as to actually change the replica count. + ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef" protobuf:"bytes,1,opt,name=scaleTargetRef"` + // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. + // It defaults to 1 pod. + // +optional + MinReplicas *int32 `json:"minReplicas,omitempty" protobuf:"varint,2,opt,name=minReplicas"` + // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. + // It cannot be less that minReplicas. + MaxReplicas int32 `json:"maxReplicas" protobuf:"varint,3,opt,name=maxReplicas"` + // metrics contains the specifications for which to use to calculate the + // desired replica count (the maximum replica count across all metrics will + // be used). The desired replica count is calculated multiplying the + // ratio between the target value and the current value by the current + // number of pods. Ergo, metrics used must decrease as the pod count is + // increased, and vice-versa. See the individual metric source types for + // more information about how each type of metric must respond. + // +optional + Metrics []MetricSpec `json:"metrics,omitempty" protobuf:"bytes,4,rep,name=metrics"` +} + +// MetricSourceType indicates the type of metric. +type MetricSourceType string + +var ( + // ObjectMetricSourceType is a metric describing a kubernetes object + // (for example, hits-per-second on an Ingress object). + ObjectMetricSourceType MetricSourceType = "Object" + // PodsMetricSourceType is a metric describing each pod in the current scale + // target (for example, transactions-processed-per-second). The values + // will be averaged together before being compared to the target value. + PodsMetricSourceType MetricSourceType = "Pods" + // ResourceMetricSourceType is a resource metric known to Kubernetes, as + // specified in requests and limits, describing each pod in the current + // scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics (the "pods" source). + ResourceMetricSourceType MetricSourceType = "Resource" + // ExternalMetricSourceType is a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + ExternalMetricSourceType MetricSourceType = "External" +) + +// MetricSpec specifies how to scale based on a single metric +// (only `type` and one other matching field should be set at once). +type MetricSpec struct { + // type is the type of metric source. It should be one of "Object", + // "Pods" or "Resource", each mapping to a matching field in the object. + Type MetricSourceType `json:"type" protobuf:"bytes,1,name=type"` + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + Object *ObjectMetricSource `json:"object,omitempty" protobuf:"bytes,2,opt,name=object"` + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + Pods *PodsMetricSource `json:"pods,omitempty" protobuf:"bytes,3,opt,name=pods"` + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + Resource *ResourceMetricSource `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"` + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + External *ExternalMetricSource `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"` +} + +// ObjectMetricSource indicates how to scale on a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +type ObjectMetricSource struct { + // target is the described Kubernetes object. + Target CrossVersionObjectReference `json:"target" protobuf:"bytes,1,name=target"` + + // metricName is the name of the metric in question. + MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` + // targetValue is the target value of the metric (as a quantity). + TargetValue resource.Quantity `json:"targetValue" protobuf:"bytes,3,name=targetValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` +} + +// PodsMetricSource indicates how to scale on a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +// The values will be averaged together before being compared to the target +// value. +type PodsMetricSource struct { + // metricName is the name of the metric in question + MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"` + // targetAverageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + TargetAverageValue resource.Quantity `json:"targetAverageValue" protobuf:"bytes,2,name=targetAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` +} + +// ResourceMetricSource indicates how to scale on a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). The values will be averaged +// together before being compared to the target. Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. Only one "target" type +// should be set. +type ResourceMetricSource struct { + // name is the name of the resource in question. + Name v1.ResourceName `json:"name" protobuf:"bytes,1,name=name"` + // targetAverageUtilization is the target value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // +optional + TargetAverageUtilization *int32 `json:"targetAverageUtilization,omitempty" protobuf:"varint,2,opt,name=targetAverageUtilization"` + // targetAverageValue is the target value of the average of the + // resource metric across all relevant pods, as a raw value (instead of as + // a percentage of the request), similar to the "pods" metric source type. + // +optional + TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,3,opt,name=targetAverageValue"` +} + +// ExternalMetricSource indicates how to scale on a metric not associated with +// any Kubernetes object (for example length of queue in cloud +// messaging service, or QPS from loadbalancer running outside of cluster). +// Exactly one "target" type should be set. +type ExternalMetricSource struct { + // metricName is the name of the metric in question. + MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"` + // metricSelector is used to identify a specific time series + // within a given metric. + // +optional + MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"` + // targetValue is the target value of the metric (as a quantity). + // Mutually exclusive with TargetAverageValue. + // +optional + TargetValue *resource.Quantity `json:"targetValue,omitempty" protobuf:"bytes,3,opt,name=targetValue"` + // targetAverageValue is the target per-pod value of global metric (as a quantity). + // Mutually exclusive with TargetValue. + // +optional + TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,4,opt,name=targetAverageValue"` +} + +// HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler. +type HorizontalPodAutoscalerStatus struct { + // observedGeneration is the most recent generation observed by this autoscaler. + // +optional + ObservedGeneration *int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` + + // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, + // used by the autoscaler to control how often the number of pods is changed. + // +optional + LastScaleTime *metav1.Time `json:"lastScaleTime,omitempty" protobuf:"bytes,2,opt,name=lastScaleTime"` + + // currentReplicas is current number of replicas of pods managed by this autoscaler, + // as last seen by the autoscaler. + CurrentReplicas int32 `json:"currentReplicas" protobuf:"varint,3,opt,name=currentReplicas"` + + // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, + // as last calculated by the autoscaler. + DesiredReplicas int32 `json:"desiredReplicas" protobuf:"varint,4,opt,name=desiredReplicas"` + + // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional + CurrentMetrics []MetricStatus `json:"currentMetrics" protobuf:"bytes,5,rep,name=currentMetrics"` + + // conditions is the set of conditions required for this autoscaler to scale its target, + // and indicates whether or not those conditions are met. + Conditions []HorizontalPodAutoscalerCondition `json:"conditions" protobuf:"bytes,6,rep,name=conditions"` +} + +// HorizontalPodAutoscalerConditionType are the valid conditions of +// a HorizontalPodAutoscaler. +type HorizontalPodAutoscalerConditionType string + +var ( + // ScalingActive indicates that the HPA controller is able to scale if necessary: + // it's correctly configured, can fetch the desired metrics, and isn't disabled. + ScalingActive HorizontalPodAutoscalerConditionType = "ScalingActive" + // AbleToScale indicates a lack of transient issues which prevent scaling from occurring, + // such as being in a backoff window, or being unable to access/update the target scale. + AbleToScale HorizontalPodAutoscalerConditionType = "AbleToScale" + // ScalingLimited indicates that the calculated scale based on metrics would be above or + // below the range for the HPA, and has thus been capped. + ScalingLimited HorizontalPodAutoscalerConditionType = "ScalingLimited" +) + +// HorizontalPodAutoscalerCondition describes the state of +// a HorizontalPodAutoscaler at a certain point. +type HorizontalPodAutoscalerCondition struct { + // type describes the current condition + Type HorizontalPodAutoscalerConditionType `json:"type" protobuf:"bytes,1,name=type"` + // status is the status of the condition (True, False, Unknown) + Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,name=status"` + // lastTransitionTime is the last time the condition transitioned from + // one status to another + // +optional + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // reason is the reason for the condition's last transition. + // +optional + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + // message is a human-readable explanation containing details about + // the transition + // +optional + Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` +} + +// MetricStatus describes the last-read state of a single metric. +type MetricStatus struct { + // type is the type of metric source. It will be one of "Object", + // "Pods" or "Resource", each corresponds to a matching field in the object. + Type MetricSourceType `json:"type" protobuf:"bytes,1,name=type"` + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + Object *ObjectMetricStatus `json:"object,omitempty" protobuf:"bytes,2,opt,name=object"` + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + Pods *PodsMetricStatus `json:"pods,omitempty" protobuf:"bytes,3,opt,name=pods"` + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + Resource *ResourceMetricStatus `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"` + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + External *ExternalMetricStatus `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"` +} + +// ObjectMetricStatus indicates the current value of a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +type ObjectMetricStatus struct { + // target is the described Kubernetes object. + Target CrossVersionObjectReference `json:"target" protobuf:"bytes,1,name=target"` + + // metricName is the name of the metric in question. + MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` + // currentValue is the current value of the metric (as a quantity). + CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` +} + +// PodsMetricStatus indicates the current value of a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +type PodsMetricStatus struct { + // metricName is the name of the metric in question + MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"` + // currentAverageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,2,name=currentAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` +} + +// ResourceMetricStatus indicates the current value of a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. +type ResourceMetricStatus struct { + // name is the name of the resource in question. + Name v1.ResourceName `json:"name" protobuf:"bytes,1,name=name"` + // currentAverageUtilization is the current value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. It will only be + // present if `targetAverageValue` was set in the corresponding metric + // specification. + // +optional + CurrentAverageUtilization *int32 `json:"currentAverageUtilization,omitempty" protobuf:"bytes,2,opt,name=currentAverageUtilization"` + // currentAverageValue is the current value of the average of the + // resource metric across all relevant pods, as a raw value (instead of as + // a percentage of the request), similar to the "pods" metric source type. + // It will always be set, regardless of the corresponding metric specification. + CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,3,name=currentAverageValue"` +} + +// ExternalMetricStatus indicates the current value of a global metric +// not associated with any Kubernetes object. +type ExternalMetricStatus struct { + // metricName is the name of a metric used for autoscaling in + // metric system. + MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"` + // metricSelector is used to identify a specific time series + // within a given metric. + // +optional + MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"` + // currentValue is the current value of the metric (as a quantity) + CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"` + // currentAverageValue is the current value of metric averaged over autoscaled pods. + // +optional + CurrentAverageValue *resource.Quantity `json:"currentAverageValue,omitempty" protobuf:"bytes,4,opt,name=currentAverageValue"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HorizontalPodAutoscaler is the configuration for a horizontal pod +// autoscaler, which automatically manages the replica count of any resource +// implementing the scale subresource based on the metrics specified. +type HorizontalPodAutoscaler struct { + metav1.TypeMeta `json:",inline"` + // metadata is the standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the specification for the behaviour of the autoscaler. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // +optional + Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // status is the current information about the autoscaler. + // +optional + Status HorizontalPodAutoscalerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects. +type HorizontalPodAutoscalerList struct { + metav1.TypeMeta `json:",inline"` + // metadata is the standard list metadata. + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of horizontal pod autoscaler objects. + Items []HorizontalPodAutoscaler `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go new file mode 100644 index 00000000000..589408ace0c --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go @@ -0,0 +1,221 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_CrossVersionObjectReference = map[string]string{ + "": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", + "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", + "name": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "apiVersion": "API version of the referent", +} + +func (CrossVersionObjectReference) SwaggerDoc() map[string]string { + return map_CrossVersionObjectReference +} + +var map_ExternalMetricSource = map[string]string{ + "": "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.", + "metricName": "metricName is the name of the metric in question.", + "metricSelector": "metricSelector is used to identify a specific time series within a given metric.", + "targetValue": "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.", + "targetAverageValue": "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.", +} + +func (ExternalMetricSource) SwaggerDoc() map[string]string { + return map_ExternalMetricSource +} + +var map_ExternalMetricStatus = map[string]string{ + "": "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", + "metricName": "metricName is the name of a metric used for autoscaling in metric system.", + "metricSelector": "metricSelector is used to identify a specific time series within a given metric.", + "currentValue": "currentValue is the current value of the metric (as a quantity)", + "currentAverageValue": "currentAverageValue is the current value of metric averaged over autoscaled pods.", +} + +func (ExternalMetricStatus) SwaggerDoc() map[string]string { + return map_ExternalMetricStatus +} + +var map_HorizontalPodAutoscaler = map[string]string{ + "": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", + "metadata": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "spec": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", + "status": "status is the current information about the autoscaler.", +} + +func (HorizontalPodAutoscaler) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscaler +} + +var map_HorizontalPodAutoscalerCondition = map[string]string{ + "": "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", + "type": "type describes the current condition", + "status": "status is the status of the condition (True, False, Unknown)", + "lastTransitionTime": "lastTransitionTime is the last time the condition transitioned from one status to another", + "reason": "reason is the reason for the condition's last transition.", + "message": "message is a human-readable explanation containing details about the transition", +} + +func (HorizontalPodAutoscalerCondition) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerCondition +} + +var map_HorizontalPodAutoscalerList = map[string]string{ + "": "HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.", + "metadata": "metadata is the standard list metadata.", + "items": "items is the list of horizontal pod autoscaler objects.", +} + +func (HorizontalPodAutoscalerList) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerList +} + +var map_HorizontalPodAutoscalerSpec = map[string]string{ + "": "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", + "scaleTargetRef": "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", + "minReplicas": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", + "maxReplicas": "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", + "metrics": "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.", +} + +func (HorizontalPodAutoscalerSpec) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerSpec +} + +var map_HorizontalPodAutoscalerStatus = map[string]string{ + "": "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", + "observedGeneration": "observedGeneration is the most recent generation observed by this autoscaler.", + "lastScaleTime": "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", + "currentReplicas": "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", + "desiredReplicas": "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", + "currentMetrics": "currentMetrics is the last read state of the metrics used by this autoscaler.", + "conditions": "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", +} + +func (HorizontalPodAutoscalerStatus) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerStatus +} + +var map_MetricSpec = map[string]string{ + "": "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", + "type": "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", + "object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + "pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", +} + +func (MetricSpec) SwaggerDoc() map[string]string { + return map_MetricSpec +} + +var map_MetricStatus = map[string]string{ + "": "MetricStatus describes the last-read state of a single metric.", + "type": "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", + "object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + "pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", +} + +func (MetricStatus) SwaggerDoc() map[string]string { + return map_MetricStatus +} + +var map_ObjectMetricSource = map[string]string{ + "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "target": "target is the described Kubernetes object.", + "metricName": "metricName is the name of the metric in question.", + "targetValue": "targetValue is the target value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", +} + +func (ObjectMetricSource) SwaggerDoc() map[string]string { + return map_ObjectMetricSource +} + +var map_ObjectMetricStatus = map[string]string{ + "": "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "target": "target is the described Kubernetes object.", + "metricName": "metricName is the name of the metric in question.", + "currentValue": "currentValue is the current value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", +} + +func (ObjectMetricStatus) SwaggerDoc() map[string]string { + return map_ObjectMetricStatus +} + +var map_PodsMetricSource = map[string]string{ + "": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "metricName": "metricName is the name of the metric in question", + "targetAverageValue": "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", +} + +func (PodsMetricSource) SwaggerDoc() map[string]string { + return map_PodsMetricSource +} + +var map_PodsMetricStatus = map[string]string{ + "": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", + "metricName": "metricName is the name of the metric in question", + "currentAverageValue": "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", +} + +func (PodsMetricStatus) SwaggerDoc() map[string]string { + return map_PodsMetricStatus +} + +var map_ResourceMetricSource = map[string]string{ + "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + "name": "name is the name of the resource in question.", + "targetAverageUtilization": "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", + "targetAverageValue": "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", +} + +func (ResourceMetricSource) SwaggerDoc() map[string]string { + return map_ResourceMetricSource +} + +var map_ResourceMetricStatus = map[string]string{ + "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "name": "name is the name of the resource in question.", + "currentAverageUtilization": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", + "currentAverageValue": "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", +} + +func (ResourceMetricStatus) SwaggerDoc() map[string]string { + return map_ResourceMetricStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..2ec7e615613 --- /dev/null +++ b/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go @@ -0,0 +1,466 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v2beta1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CrossVersionObjectReference) DeepCopyInto(out *CrossVersionObjectReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CrossVersionObjectReference. +func (in *CrossVersionObjectReference) DeepCopy() *CrossVersionObjectReference { + if in == nil { + return nil + } + out := new(CrossVersionObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricSource) DeepCopyInto(out *ExternalMetricSource) { + *out = *in + if in.MetricSelector != nil { + in, out := &in.MetricSelector, &out.MetricSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.TargetValue != nil { + in, out := &in.TargetValue, &out.TargetValue + x := (*in).DeepCopy() + *out = &x + } + if in.TargetAverageValue != nil { + in, out := &in.TargetAverageValue, &out.TargetAverageValue + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricSource. +func (in *ExternalMetricSource) DeepCopy() *ExternalMetricSource { + if in == nil { + return nil + } + out := new(ExternalMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricStatus) DeepCopyInto(out *ExternalMetricStatus) { + *out = *in + if in.MetricSelector != nil { + in, out := &in.MetricSelector, &out.MetricSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + out.CurrentValue = in.CurrentValue.DeepCopy() + if in.CurrentAverageValue != nil { + in, out := &in.CurrentAverageValue, &out.CurrentAverageValue + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricStatus. +func (in *ExternalMetricStatus) DeepCopy() *ExternalMetricStatus { + if in == nil { + return nil + } + out := new(ExternalMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscaler) DeepCopyInto(out *HorizontalPodAutoscaler) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscaler. +func (in *HorizontalPodAutoscaler) DeepCopy() *HorizontalPodAutoscaler { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscaler) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HorizontalPodAutoscaler) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerCondition) DeepCopyInto(out *HorizontalPodAutoscalerCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerCondition. +func (in *HorizontalPodAutoscalerCondition) DeepCopy() *HorizontalPodAutoscalerCondition { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerList) DeepCopyInto(out *HorizontalPodAutoscalerList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerList. +func (in *HorizontalPodAutoscalerList) DeepCopy() *HorizontalPodAutoscalerList { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HorizontalPodAutoscalerList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerSpec) DeepCopyInto(out *HorizontalPodAutoscalerSpec) { + *out = *in + out.ScaleTargetRef = in.ScaleTargetRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } + if in.Metrics != nil { + in, out := &in.Metrics, &out.Metrics + *out = make([]MetricSpec, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerSpec. +func (in *HorizontalPodAutoscalerSpec) DeepCopy() *HorizontalPodAutoscalerSpec { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerStatus) DeepCopyInto(out *HorizontalPodAutoscalerStatus) { + *out = *in + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = (*in).DeepCopy() + } + if in.CurrentMetrics != nil { + in, out := &in.CurrentMetrics, &out.CurrentMetrics + *out = make([]MetricStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]HorizontalPodAutoscalerCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerStatus. +func (in *HorizontalPodAutoscalerStatus) DeepCopy() *HorizontalPodAutoscalerStatus { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricSpec) DeepCopyInto(out *MetricSpec) { + *out = *in + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(ObjectMetricSource) + (*in).DeepCopyInto(*out) + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(PodsMetricSource) + (*in).DeepCopyInto(*out) + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(ResourceMetricSource) + (*in).DeepCopyInto(*out) + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalMetricSource) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricSpec. +func (in *MetricSpec) DeepCopy() *MetricSpec { + if in == nil { + return nil + } + out := new(MetricSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricStatus) DeepCopyInto(out *MetricStatus) { + *out = *in + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(ObjectMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(PodsMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(ResourceMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalMetricStatus) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricStatus. +func (in *MetricStatus) DeepCopy() *MetricStatus { + if in == nil { + return nil + } + out := new(MetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectMetricSource) DeepCopyInto(out *ObjectMetricSource) { + *out = *in + out.Target = in.Target + out.TargetValue = in.TargetValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMetricSource. +func (in *ObjectMetricSource) DeepCopy() *ObjectMetricSource { + if in == nil { + return nil + } + out := new(ObjectMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectMetricStatus) DeepCopyInto(out *ObjectMetricStatus) { + *out = *in + out.Target = in.Target + out.CurrentValue = in.CurrentValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMetricStatus. +func (in *ObjectMetricStatus) DeepCopy() *ObjectMetricStatus { + if in == nil { + return nil + } + out := new(ObjectMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodsMetricSource) DeepCopyInto(out *PodsMetricSource) { + *out = *in + out.TargetAverageValue = in.TargetAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodsMetricSource. +func (in *PodsMetricSource) DeepCopy() *PodsMetricSource { + if in == nil { + return nil + } + out := new(PodsMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodsMetricStatus) DeepCopyInto(out *PodsMetricStatus) { + *out = *in + out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodsMetricStatus. +func (in *PodsMetricStatus) DeepCopy() *PodsMetricStatus { + if in == nil { + return nil + } + out := new(PodsMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceMetricSource) DeepCopyInto(out *ResourceMetricSource) { + *out = *in + if in.TargetAverageUtilization != nil { + in, out := &in.TargetAverageUtilization, &out.TargetAverageUtilization + *out = new(int32) + **out = **in + } + if in.TargetAverageValue != nil { + in, out := &in.TargetAverageValue, &out.TargetAverageValue + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceMetricSource. +func (in *ResourceMetricSource) DeepCopy() *ResourceMetricSource { + if in == nil { + return nil + } + out := new(ResourceMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceMetricStatus) DeepCopyInto(out *ResourceMetricStatus) { + *out = *in + if in.CurrentAverageUtilization != nil { + in, out := &in.CurrentAverageUtilization, &out.CurrentAverageUtilization + *out = new(int32) + **out = **in + } + out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceMetricStatus. +func (in *ResourceMetricStatus) DeepCopy() *ResourceMetricStatus { + if in == nil { + return nil + } + out := new(ResourceMetricStatus) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/doc.go b/vendor/k8s.io/api/autoscaling/v2beta2/doc.go index 7c7d2b6f1e7..6d275f6d959 100644 --- a/vendor/k8s.io/api/autoscaling/v2beta2/doc.go +++ b/vendor/k8s.io/api/autoscaling/v2beta2/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v2beta2 // import "k8s.io/api/autoscaling/v2beta2" diff --git a/vendor/k8s.io/api/batch/OWNERS b/vendor/k8s.io/api/batch/OWNERS old mode 100755 new mode 100644 index 38935ff169a..521cd97a2cd --- a/vendor/k8s.io/api/batch/OWNERS +++ b/vendor/k8s.io/api/batch/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/api/batch/v1/doc.go b/vendor/k8s.io/api/batch/v1/doc.go index 04491807f2b..c4a8db6e78e 100644 --- a/vendor/k8s.io/api/batch/v1/doc.go +++ b/vendor/k8s.io/api/batch/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/batch/v1" diff --git a/vendor/k8s.io/api/batch/v1beta1/doc.go b/vendor/k8s.io/api/batch/v1beta1/doc.go index 43020ed05cb..258ff028c12 100644 --- a/vendor/k8s.io/api/batch/v1beta1/doc.go +++ b/vendor/k8s.io/api/batch/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/batch/v1beta1" diff --git a/vendor/k8s.io/api/batch/v2alpha1/doc.go b/vendor/k8s.io/api/batch/v2alpha1/doc.go index f4ed01ad84b..3044b0c6296 100644 --- a/vendor/k8s.io/api/batch/v2alpha1/doc.go +++ b/vendor/k8s.io/api/batch/v2alpha1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v2alpha1 // import "k8s.io/api/batch/v2alpha1" diff --git a/vendor/k8s.io/api/certificates/OWNERS b/vendor/k8s.io/api/certificates/OWNERS old mode 100755 new mode 100644 index 1d1ab36e756..d5e6cd985df --- a/vendor/k8s.io/api/certificates/OWNERS +++ b/vendor/k8s.io/api/certificates/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/api/certificates/v1beta1/doc.go b/vendor/k8s.io/api/certificates/v1beta1/doc.go index 8473b640fa5..9055248b9dc 100644 --- a/vendor/k8s.io/api/certificates/v1beta1/doc.go +++ b/vendor/k8s.io/api/certificates/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=certificates.k8s.io diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/BUILD b/vendor/k8s.io/api/coordination/v1/BUILD similarity index 63% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/BUILD rename to vendor/k8s.io/api/coordination/v1/BUILD index 1cdd3540e27..4dd8cf4be13 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/BUILD +++ b/vendor/k8s.io/api/coordination/v1/BUILD @@ -4,18 +4,20 @@ go_library( name = "go_default_library", srcs = [ "doc.go", + "generated.pb.go", "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme", - importpath = "k8s.io/csi-api/pkg/client/clientset/versioned/scheme", + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1", + importpath = "k8s.io/api/coordination/v1", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", ], ) diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/doc.go b/vendor/k8s.io/api/coordination/v1/doc.go similarity index 75% rename from vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/doc.go rename to vendor/k8s.io/api/coordination/v1/doc.go index 67f44299aa5..fc2f4f2c6e1 100644 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/doc.go +++ b/vendor/k8s.io/api/coordination/v1/doc.go @@ -14,9 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +k8s:deepcopy-gen=package,register -// +groupName=csi.storage.k8s.io +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true -// Package v1alpha1 provides alpha API for CSI API objects. -package v1alpha1 // import "k8s.io/csi-api/pkg/apis/csi/v1alpha1" +// +groupName=coordination.k8s.io + +package v1 // import "k8s.io/api/coordination/v1" diff --git a/vendor/k8s.io/api/coordination/v1/generated.pb.go b/vendor/k8s.io/api/coordination/v1/generated.pb.go new file mode 100644 index 00000000000..349c68574af --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1/generated.pb.go @@ -0,0 +1,864 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1/generated.proto + +/* + Package v1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1/generated.proto + + It has these top-level messages: + Lease + LeaseList + LeaseSpec +*/ +package v1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Lease) Reset() { *m = Lease{} } +func (*Lease) ProtoMessage() {} +func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *LeaseList) Reset() { *m = LeaseList{} } +func (*LeaseList) ProtoMessage() {} +func (*LeaseList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *LeaseSpec) Reset() { *m = LeaseSpec{} } +func (*LeaseSpec) ProtoMessage() {} +func (*LeaseSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func init() { + proto.RegisterType((*Lease)(nil), "k8s.io.api.coordination.v1.Lease") + proto.RegisterType((*LeaseList)(nil), "k8s.io.api.coordination.v1.LeaseList") + proto.RegisterType((*LeaseSpec)(nil), "k8s.io.api.coordination.v1.LeaseSpec") +} +func (m *Lease) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Lease) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + return i, nil +} + +func (m *LeaseList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n3, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LeaseSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.HolderIdentity != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HolderIdentity))) + i += copy(dAtA[i:], *m.HolderIdentity) + } + if m.LeaseDurationSeconds != nil { + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.AcquireTime.Size())) + n4, err := m.AcquireTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.RenewTime != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.RenewTime.Size())) + n5, err := m.RenewTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.LeaseTransitions != nil { + dAtA[i] = 0x28 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseTransitions)) + } + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *Lease) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LeaseList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LeaseSpec) Size() (n int) { + var l int + _ = l + if m.HolderIdentity != nil { + l = len(*m.HolderIdentity) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseDurationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + l = m.AcquireTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RenewTime != nil { + l = m.RenewTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseTransitions != nil { + n += 1 + sovGenerated(uint64(*m.LeaseTransitions)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Lease) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lease{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LeaseSpec", "LeaseSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Lease", "Lease", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseSpec{`, + `HolderIdentity:` + valueToStringGenerated(this.HolderIdentity) + `,`, + `LeaseDurationSeconds:` + valueToStringGenerated(this.LeaseDurationSeconds) + `,`, + `AcquireTime:` + strings.Replace(fmt.Sprintf("%v", this.AcquireTime), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1) + `,`, + `RenewTime:` + strings.Replace(fmt.Sprintf("%v", this.RenewTime), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1) + `,`, + `LeaseTransitions:` + valueToStringGenerated(this.LeaseTransitions) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Lease) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Lease: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Lease: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Lease{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HolderIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HolderIdentity = &s + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseDurationSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseDurationSeconds = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AcquireTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AcquireTime == nil { + m.AcquireTime = &k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime{} + } + if err := m.AcquireTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RenewTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RenewTime == nil { + m.RenewTime = &k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime{} + } + if err := m.RenewTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseTransitions", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseTransitions = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 535 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x90, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xe3, 0x36, 0x91, 0x9a, 0x0d, 0x2d, 0x91, 0x95, 0x83, 0x95, 0x83, 0x5d, 0x22, 0x21, + 0xe5, 0xc2, 0x2e, 0xa9, 0x10, 0x42, 0x9c, 0xc0, 0x20, 0xa0, 0x52, 0x2a, 0x24, 0xb7, 0x27, 0xd4, + 0x03, 0x1b, 0x7b, 0x70, 0x96, 0xd4, 0x5e, 0xb3, 0xbb, 0x0e, 0xea, 0x8d, 0x47, 0xe0, 0xca, 0x63, + 0xc0, 0x53, 0xe4, 0xd8, 0x63, 0x4f, 0x16, 0x31, 0x2f, 0x82, 0x76, 0x93, 0x36, 0x21, 0x49, 0xd5, + 0x8a, 0xdb, 0xee, 0xcc, 0xfc, 0xdf, 0xfc, 0xf3, 0xa3, 0x57, 0xa3, 0x67, 0x12, 0x33, 0x4e, 0x46, + 0xf9, 0x00, 0x44, 0x0a, 0x0a, 0x24, 0x19, 0x43, 0x1a, 0x71, 0x41, 0xe6, 0x0d, 0x9a, 0x31, 0x12, + 0x72, 0x2e, 0x22, 0x96, 0x52, 0xc5, 0x78, 0x4a, 0xc6, 0x3d, 0x12, 0x43, 0x0a, 0x82, 0x2a, 0x88, + 0x70, 0x26, 0xb8, 0xe2, 0x76, 0x7b, 0x36, 0x8b, 0x69, 0xc6, 0xf0, 0xf2, 0x2c, 0x1e, 0xf7, 0xda, + 0x8f, 0x62, 0xa6, 0x86, 0xf9, 0x00, 0x87, 0x3c, 0x21, 0x31, 0x8f, 0x39, 0x31, 0x92, 0x41, 0xfe, + 0xc9, 0xfc, 0xcc, 0xc7, 0xbc, 0x66, 0xa8, 0xf6, 0x93, 0xc5, 0xda, 0x84, 0x86, 0x43, 0x96, 0x82, + 0x38, 0x27, 0xd9, 0x28, 0xd6, 0x05, 0x49, 0x12, 0x50, 0x74, 0x83, 0x81, 0x36, 0xb9, 0x49, 0x25, + 0xf2, 0x54, 0xb1, 0x04, 0xd6, 0x04, 0x4f, 0x6f, 0x13, 0xc8, 0x70, 0x08, 0x09, 0x5d, 0xd5, 0x75, + 0x7e, 0x59, 0xa8, 0xd6, 0x07, 0x2a, 0xc1, 0xfe, 0x88, 0x76, 0xb4, 0x9b, 0x88, 0x2a, 0xea, 0x58, + 0xfb, 0x56, 0xb7, 0x71, 0xf0, 0x18, 0x2f, 0x62, 0xb8, 0x86, 0xe2, 0x6c, 0x14, 0xeb, 0x82, 0xc4, + 0x7a, 0x1a, 0x8f, 0x7b, 0xf8, 0xfd, 0xe0, 0x33, 0x84, 0xea, 0x08, 0x14, 0xf5, 0xed, 0x49, 0xe1, + 0x55, 0xca, 0xc2, 0x43, 0x8b, 0x5a, 0x70, 0x4d, 0xb5, 0xdf, 0xa2, 0xaa, 0xcc, 0x20, 0x74, 0xb6, + 0x0c, 0xfd, 0x21, 0xbe, 0x39, 0x64, 0x6c, 0x2c, 0x1d, 0x67, 0x10, 0xfa, 0xf7, 0xe6, 0xc8, 0xaa, + 0xfe, 0x05, 0x06, 0xd0, 0xf9, 0x69, 0xa1, 0xba, 0x99, 0xe8, 0x33, 0xa9, 0xec, 0xd3, 0x35, 0xe3, + 0xf8, 0x6e, 0xc6, 0xb5, 0xda, 0xd8, 0x6e, 0xce, 0x77, 0xec, 0x5c, 0x55, 0x96, 0x4c, 0xbf, 0x41, + 0x35, 0xa6, 0x20, 0x91, 0xce, 0xd6, 0xfe, 0x76, 0xb7, 0x71, 0xf0, 0xe0, 0x56, 0xd7, 0xfe, 0xee, + 0x9c, 0x56, 0x3b, 0xd4, 0xba, 0x60, 0x26, 0xef, 0xfc, 0xd8, 0x9e, 0x7b, 0xd6, 0x77, 0xd8, 0xcf, + 0xd1, 0xde, 0x90, 0x9f, 0x45, 0x20, 0x0e, 0x23, 0x48, 0x15, 0x53, 0xe7, 0xc6, 0x79, 0xdd, 0xb7, + 0xcb, 0xc2, 0xdb, 0x7b, 0xf7, 0x4f, 0x27, 0x58, 0x99, 0xb4, 0xfb, 0xa8, 0x75, 0xa6, 0x41, 0xaf, + 0x73, 0x61, 0x36, 0x1f, 0x43, 0xc8, 0xd3, 0x48, 0x9a, 0x58, 0x6b, 0xbe, 0x53, 0x16, 0x5e, 0xab, + 0xbf, 0xa1, 0x1f, 0x6c, 0x54, 0xd9, 0x03, 0xd4, 0xa0, 0xe1, 0x97, 0x9c, 0x09, 0x38, 0x61, 0x09, + 0x38, 0xdb, 0x26, 0x40, 0x72, 0xb7, 0x00, 0x8f, 0x58, 0x28, 0xb8, 0x96, 0xf9, 0xf7, 0xcb, 0xc2, + 0x6b, 0xbc, 0x5c, 0x70, 0x82, 0x65, 0xa8, 0x7d, 0x8a, 0xea, 0x02, 0x52, 0xf8, 0x6a, 0x36, 0x54, + 0xff, 0x6f, 0xc3, 0x6e, 0x59, 0x78, 0xf5, 0xe0, 0x8a, 0x12, 0x2c, 0x80, 0xf6, 0x0b, 0xd4, 0x34, + 0x97, 0x9d, 0x08, 0x9a, 0x4a, 0xa6, 0x6f, 0x93, 0x4e, 0xcd, 0x64, 0xd1, 0x2a, 0x0b, 0xaf, 0xd9, + 0x5f, 0xe9, 0x05, 0x6b, 0xd3, 0x7e, 0x77, 0x32, 0x75, 0x2b, 0x17, 0x53, 0xb7, 0x72, 0x39, 0x75, + 0x2b, 0xdf, 0x4a, 0xd7, 0x9a, 0x94, 0xae, 0x75, 0x51, 0xba, 0xd6, 0x65, 0xe9, 0x5a, 0xbf, 0x4b, + 0xd7, 0xfa, 0xfe, 0xc7, 0xad, 0x7c, 0xd8, 0x1a, 0xf7, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x41, + 0x5e, 0x94, 0x96, 0x5e, 0x04, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/coordination/v1/generated.proto b/vendor/k8s.io/api/coordination/v1/generated.proto new file mode 100644 index 00000000000..99692e958d6 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1/generated.proto @@ -0,0 +1,80 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.coordination.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Lease defines a lease concept. +message Lease { + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional LeaseSpec spec = 2; +} + +// LeaseList is a list of Lease objects. +message LeaseList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated Lease items = 2; +} + +// LeaseSpec is a specification of a Lease. +message LeaseSpec { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + optional string holderIdentity = 1; + + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + optional int32 leaseDurationSeconds = 2; + + // acquireTime is a time when the current lease was acquired. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime acquireTime = 3; + + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime renewTime = 4; + + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + optional int32 leaseTransitions = 5; +} + diff --git a/vendor/k8s.io/api/coordination/v1/register.go b/vendor/k8s.io/api/coordination/v1/register.go new file mode 100644 index 00000000000..95b987b98b6 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1/register.go @@ -0,0 +1,53 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Lease{}, + &LeaseList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/coordination/v1/types.go b/vendor/k8s.io/api/coordination/v1/types.go new file mode 100644 index 00000000000..8f9f24d04eb --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1/types.go @@ -0,0 +1,74 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Lease defines a lease concept. +type Lease struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Spec LeaseSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// LeaseSpec is a specification of a Lease. +type LeaseSpec struct { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + HolderIdentity *string `json:"holderIdentity,omitempty" protobuf:"bytes,1,opt,name=holderIdentity"` + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + LeaseDurationSeconds *int32 `json:"leaseDurationSeconds,omitempty" protobuf:"varint,2,opt,name=leaseDurationSeconds"` + // acquireTime is a time when the current lease was acquired. + // +optional + AcquireTime *metav1.MicroTime `json:"acquireTime,omitempty" protobuf:"bytes,3,opt,name=acquireTime"` + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + RenewTime *metav1.MicroTime `json:"renewTime,omitempty" protobuf:"bytes,4,opt,name=renewTime"` + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + LeaseTransitions *int32 `json:"leaseTransitions,omitempty" protobuf:"varint,5,opt,name=leaseTransitions"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LeaseList is a list of Lease objects. +type LeaseList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []Lease `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..0f534055f65 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go @@ -0,0 +1,124 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Lease) DeepCopyInto(out *Lease) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lease. +func (in *Lease) DeepCopy() *Lease { + if in == nil { + return nil + } + out := new(Lease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Lease) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseList) DeepCopyInto(out *LeaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Lease, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseList. +func (in *LeaseList) DeepCopy() *LeaseList { + if in == nil { + return nil + } + out := new(LeaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LeaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseSpec) DeepCopyInto(out *LeaseSpec) { + *out = *in + if in.HolderIdentity != nil { + in, out := &in.HolderIdentity, &out.HolderIdentity + *out = new(string) + **out = **in + } + if in.LeaseDurationSeconds != nil { + in, out := &in.LeaseDurationSeconds, &out.LeaseDurationSeconds + *out = new(int32) + **out = **in + } + if in.AcquireTime != nil { + in, out := &in.AcquireTime, &out.AcquireTime + *out = (*in).DeepCopy() + } + if in.RenewTime != nil { + in, out := &in.RenewTime, &out.RenewTime + *out = (*in).DeepCopy() + } + if in.LeaseTransitions != nil { + in, out := &in.LeaseTransitions, &out.LeaseTransitions + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseSpec. +func (in *LeaseSpec) DeepCopy() *LeaseSpec { + if in == nil { + return nil + } + out := new(LeaseSpec) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/api/coordination/v1beta1/BUILD b/vendor/k8s.io/api/coordination/v1beta1/BUILD new file mode 100644 index 00000000000..94ea9ca42ec --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/BUILD @@ -0,0 +1,42 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +filegroup( + name = "go_default_library_protos", + srcs = ["generated.proto"], + visibility = ["//visibility:public"], +) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated.pb.go", + "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1", + importpath = "k8s.io/api/coordination/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/api/coordination/v1beta1/doc.go b/vendor/k8s.io/api/coordination/v1beta1/doc.go new file mode 100644 index 00000000000..304732d59b9 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=coordination.k8s.io + +package v1beta1 // import "k8s.io/api/coordination/v1beta1" diff --git a/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go b/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go new file mode 100644 index 00000000000..aa57e9dd644 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go @@ -0,0 +1,864 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1/generated.proto + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1/generated.proto + + It has these top-level messages: + Lease + LeaseList + LeaseSpec +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Lease) Reset() { *m = Lease{} } +func (*Lease) ProtoMessage() {} +func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *LeaseList) Reset() { *m = LeaseList{} } +func (*LeaseList) ProtoMessage() {} +func (*LeaseList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *LeaseSpec) Reset() { *m = LeaseSpec{} } +func (*LeaseSpec) ProtoMessage() {} +func (*LeaseSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func init() { + proto.RegisterType((*Lease)(nil), "k8s.io.api.coordination.v1beta1.Lease") + proto.RegisterType((*LeaseList)(nil), "k8s.io.api.coordination.v1beta1.LeaseList") + proto.RegisterType((*LeaseSpec)(nil), "k8s.io.api.coordination.v1beta1.LeaseSpec") +} +func (m *Lease) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Lease) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + return i, nil +} + +func (m *LeaseList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n3, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LeaseSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.HolderIdentity != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HolderIdentity))) + i += copy(dAtA[i:], *m.HolderIdentity) + } + if m.LeaseDurationSeconds != nil { + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.AcquireTime.Size())) + n4, err := m.AcquireTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.RenewTime != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.RenewTime.Size())) + n5, err := m.RenewTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.LeaseTransitions != nil { + dAtA[i] = 0x28 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseTransitions)) + } + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *Lease) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LeaseList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LeaseSpec) Size() (n int) { + var l int + _ = l + if m.HolderIdentity != nil { + l = len(*m.HolderIdentity) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseDurationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + l = m.AcquireTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RenewTime != nil { + l = m.RenewTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseTransitions != nil { + n += 1 + sovGenerated(uint64(*m.LeaseTransitions)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Lease) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lease{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LeaseSpec", "LeaseSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Lease", "Lease", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseSpec{`, + `HolderIdentity:` + valueToStringGenerated(this.HolderIdentity) + `,`, + `LeaseDurationSeconds:` + valueToStringGenerated(this.LeaseDurationSeconds) + `,`, + `AcquireTime:` + strings.Replace(fmt.Sprintf("%v", this.AcquireTime), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1) + `,`, + `RenewTime:` + strings.Replace(fmt.Sprintf("%v", this.RenewTime), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1) + `,`, + `LeaseTransitions:` + valueToStringGenerated(this.LeaseTransitions) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Lease) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Lease: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Lease: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Lease{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HolderIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HolderIdentity = &s + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseDurationSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseDurationSeconds = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AcquireTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AcquireTime == nil { + m.AcquireTime = &k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime{} + } + if err := m.AcquireTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RenewTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RenewTime == nil { + m.RenewTime = &k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime{} + } + if err := m.RenewTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseTransitions", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseTransitions = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 540 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xe3, 0xb6, 0x11, 0xcd, 0x86, 0x96, 0xc8, 0xca, 0xc1, 0xca, 0xc1, 0xae, 0x72, 0x40, + 0x15, 0x52, 0x77, 0x49, 0x85, 0x10, 0xe2, 0x04, 0x16, 0x87, 0x56, 0xb8, 0x42, 0x72, 0x7b, 0x42, + 0x3d, 0xb0, 0xb6, 0x07, 0x67, 0x49, 0xed, 0x35, 0xbb, 0xeb, 0xa0, 0xde, 0x78, 0x04, 0xae, 0xbc, + 0x08, 0xbc, 0x42, 0x8e, 0x3d, 0xf6, 0x64, 0x11, 0xf3, 0x22, 0xc8, 0x1b, 0xb7, 0x09, 0x49, 0x51, + 0x23, 0x6e, 0xde, 0x99, 0xf9, 0xbf, 0xf9, 0xe7, 0x37, 0x3a, 0x1a, 0xbd, 0x90, 0x98, 0x71, 0x32, + 0xca, 0x03, 0x10, 0x29, 0x28, 0x90, 0x64, 0x0c, 0x69, 0xc4, 0x05, 0xa9, 0x1b, 0x34, 0x63, 0x24, + 0xe4, 0x5c, 0x44, 0x2c, 0xa5, 0x8a, 0xf1, 0x94, 0x8c, 0x07, 0x01, 0x28, 0x3a, 0x20, 0x31, 0xa4, + 0x20, 0xa8, 0x82, 0x08, 0x67, 0x82, 0x2b, 0x6e, 0x3a, 0x33, 0x01, 0xa6, 0x19, 0xc3, 0x8b, 0x02, + 0x5c, 0x0b, 0x7a, 0x07, 0x31, 0x53, 0xc3, 0x3c, 0xc0, 0x21, 0x4f, 0x48, 0xcc, 0x63, 0x4e, 0xb4, + 0x2e, 0xc8, 0x3f, 0xea, 0x97, 0x7e, 0xe8, 0xaf, 0x19, 0xaf, 0xf7, 0x6c, 0x6e, 0x20, 0xa1, 0xe1, + 0x90, 0xa5, 0x20, 0x2e, 0x49, 0x36, 0x8a, 0xab, 0x82, 0x24, 0x09, 0x28, 0x4a, 0xc6, 0x2b, 0x2e, + 0x7a, 0xe4, 0x5f, 0x2a, 0x91, 0xa7, 0x8a, 0x25, 0xb0, 0x22, 0x78, 0x7e, 0x9f, 0x40, 0x86, 0x43, + 0x48, 0xe8, 0xb2, 0xae, 0xff, 0xd3, 0x40, 0x4d, 0x0f, 0xa8, 0x04, 0xf3, 0x03, 0xda, 0xae, 0xdc, + 0x44, 0x54, 0x51, 0xcb, 0xd8, 0x33, 0xf6, 0xdb, 0x87, 0x4f, 0xf1, 0x3c, 0x8b, 0x5b, 0x28, 0xce, + 0x46, 0x71, 0x55, 0x90, 0xb8, 0x9a, 0xc6, 0xe3, 0x01, 0x7e, 0x17, 0x7c, 0x82, 0x50, 0x9d, 0x80, + 0xa2, 0xae, 0x39, 0x29, 0x9c, 0x46, 0x59, 0x38, 0x68, 0x5e, 0xf3, 0x6f, 0xa9, 0xa6, 0x87, 0xb6, + 0x64, 0x06, 0xa1, 0xb5, 0xa1, 0xe9, 0x4f, 0xf0, 0x3d, 0x49, 0x63, 0xed, 0xeb, 0x34, 0x83, 0xd0, + 0x7d, 0x58, 0x73, 0xb7, 0xaa, 0x97, 0xaf, 0x29, 0xfd, 0x1f, 0x06, 0x6a, 0xe9, 0x09, 0x8f, 0x49, + 0x65, 0x9e, 0xaf, 0xb8, 0xc7, 0xeb, 0xb9, 0xaf, 0xd4, 0xda, 0x7b, 0xa7, 0xde, 0xb1, 0x7d, 0x53, + 0x59, 0x70, 0xfe, 0x16, 0x35, 0x99, 0x82, 0x44, 0x5a, 0x1b, 0x7b, 0x9b, 0xfb, 0xed, 0xc3, 0xc7, + 0xeb, 0x59, 0x77, 0x77, 0x6a, 0x64, 0xf3, 0xb8, 0x12, 0xfb, 0x33, 0x46, 0xff, 0xfb, 0x66, 0x6d, + 0xbc, 0x3a, 0xc6, 0x7c, 0x89, 0x76, 0x87, 0xfc, 0x22, 0x02, 0x71, 0x1c, 0x41, 0xaa, 0x98, 0xba, + 0xd4, 0xf6, 0x5b, 0xae, 0x59, 0x16, 0xce, 0xee, 0xd1, 0x5f, 0x1d, 0x7f, 0x69, 0xd2, 0xf4, 0x50, + 0xf7, 0xa2, 0x02, 0xbd, 0xc9, 0x85, 0x5e, 0x7f, 0x0a, 0x21, 0x4f, 0x23, 0xa9, 0x03, 0x6e, 0xba, + 0x56, 0x59, 0x38, 0x5d, 0xef, 0x8e, 0xbe, 0x7f, 0xa7, 0xca, 0x0c, 0x50, 0x9b, 0x86, 0x9f, 0x73, + 0x26, 0xe0, 0x8c, 0x25, 0x60, 0x6d, 0xea, 0x14, 0xc9, 0x7a, 0x29, 0x9e, 0xb0, 0x50, 0xf0, 0x4a, + 0xe6, 0x3e, 0x2a, 0x0b, 0xa7, 0xfd, 0x7a, 0xce, 0xf1, 0x17, 0xa1, 0xe6, 0x39, 0x6a, 0x09, 0x48, + 0xe1, 0x8b, 0xde, 0xb0, 0xf5, 0x7f, 0x1b, 0x76, 0xca, 0xc2, 0x69, 0xf9, 0x37, 0x14, 0x7f, 0x0e, + 0x34, 0x5f, 0xa1, 0x8e, 0xbe, 0xec, 0x4c, 0xd0, 0x54, 0xb2, 0xea, 0x36, 0x69, 0x35, 0x75, 0x16, + 0xdd, 0xb2, 0x70, 0x3a, 0xde, 0x52, 0xcf, 0x5f, 0x99, 0x76, 0x0f, 0x26, 0x53, 0xbb, 0x71, 0x35, + 0xb5, 0x1b, 0xd7, 0x53, 0xbb, 0xf1, 0xb5, 0xb4, 0x8d, 0x49, 0x69, 0x1b, 0x57, 0xa5, 0x6d, 0x5c, + 0x97, 0xb6, 0xf1, 0xab, 0xb4, 0x8d, 0x6f, 0xbf, 0xed, 0xc6, 0xfb, 0x07, 0xf5, 0x6f, 0xfe, 0x13, + 0x00, 0x00, 0xff, 0xff, 0x51, 0x34, 0x6a, 0x0f, 0x77, 0x04, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/coordination/v1beta1/generated.proto b/vendor/k8s.io/api/coordination/v1beta1/generated.proto new file mode 100644 index 00000000000..918e0de1c74 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/generated.proto @@ -0,0 +1,80 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.coordination.v1beta1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// Lease defines a lease concept. +message Lease { + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional LeaseSpec spec = 2; +} + +// LeaseList is a list of Lease objects. +message LeaseList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated Lease items = 2; +} + +// LeaseSpec is a specification of a Lease. +message LeaseSpec { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + optional string holderIdentity = 1; + + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + optional int32 leaseDurationSeconds = 2; + + // acquireTime is a time when the current lease was acquired. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime acquireTime = 3; + + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime renewTime = 4; + + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + optional int32 leaseTransitions = 5; +} + diff --git a/vendor/k8s.io/api/coordination/v1beta1/register.go b/vendor/k8s.io/api/coordination/v1beta1/register.go new file mode 100644 index 00000000000..85efaa64e75 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/register.go @@ -0,0 +1,53 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Lease{}, + &LeaseList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/coordination/v1beta1/types.go b/vendor/k8s.io/api/coordination/v1beta1/types.go new file mode 100644 index 00000000000..846f7280280 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/types.go @@ -0,0 +1,74 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Lease defines a lease concept. +type Lease struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Spec LeaseSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// LeaseSpec is a specification of a Lease. +type LeaseSpec struct { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + HolderIdentity *string `json:"holderIdentity,omitempty" protobuf:"bytes,1,opt,name=holderIdentity"` + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + LeaseDurationSeconds *int32 `json:"leaseDurationSeconds,omitempty" protobuf:"varint,2,opt,name=leaseDurationSeconds"` + // acquireTime is a time when the current lease was acquired. + // +optional + AcquireTime *metav1.MicroTime `json:"acquireTime,omitempty" protobuf:"bytes,3,opt,name=acquireTime"` + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + RenewTime *metav1.MicroTime `json:"renewTime,omitempty" protobuf:"bytes,4,opt,name=renewTime"` + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + LeaseTransitions *int32 `json:"leaseTransitions,omitempty" protobuf:"varint,5,opt,name=leaseTransitions"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LeaseList is a list of Lease objects. +type LeaseList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []Lease `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..a628ac19b53 --- /dev/null +++ b/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,124 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Lease) DeepCopyInto(out *Lease) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lease. +func (in *Lease) DeepCopy() *Lease { + if in == nil { + return nil + } + out := new(Lease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Lease) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseList) DeepCopyInto(out *LeaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Lease, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseList. +func (in *LeaseList) DeepCopy() *LeaseList { + if in == nil { + return nil + } + out := new(LeaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LeaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseSpec) DeepCopyInto(out *LeaseSpec) { + *out = *in + if in.HolderIdentity != nil { + in, out := &in.HolderIdentity, &out.HolderIdentity + *out = new(string) + **out = **in + } + if in.LeaseDurationSeconds != nil { + in, out := &in.LeaseDurationSeconds, &out.LeaseDurationSeconds + *out = new(int32) + **out = **in + } + if in.AcquireTime != nil { + in, out := &in.AcquireTime, &out.AcquireTime + *out = (*in).DeepCopy() + } + if in.RenewTime != nil { + in, out := &in.RenewTime, &out.RenewTime + *out = (*in).DeepCopy() + } + if in.LeaseTransitions != nil { + in, out := &in.LeaseTransitions, &out.LeaseTransitions + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseSpec. +func (in *LeaseSpec) DeepCopy() *LeaseSpec { + if in == nil { + return nil + } + out := new(LeaseSpec) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/api/core/v1/BUILD b/vendor/k8s.io/api/core/v1/BUILD index b4b965ad5f2..ee4450562a0 100644 --- a/vendor/k8s.io/api/core/v1/BUILD +++ b/vendor/k8s.io/api/core/v1/BUILD @@ -28,6 +28,7 @@ go_library( "toleration.go", "types.go", "types_swagger_doc_generated.go", + "well_known_labels.go", "zz_generated.deepcopy.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/api/core/v1", diff --git a/vendor/k8s.io/api/core/v1/annotation_key_constants.go b/vendor/k8s.io/api/core/v1/annotation_key_constants.go index 2c72ec2df2d..edc9b4d6008 100644 --- a/vendor/k8s.io/api/core/v1/annotation_key_constants.go +++ b/vendor/k8s.io/api/core/v1/annotation_key_constants.go @@ -97,4 +97,10 @@ const ( // This annotation will be used to compute the in-cluster network programming latency SLI, see // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md EndpointsLastChangeTriggerTime = "endpoints.kubernetes.io/last-change-trigger-time" + + // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated + // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode. + // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or + // CSI Backend for a volume plugin on a specific node. + MigratedPluginsAnnotationKey = "storage.alpha.kubernetes.io/migrated-plugins" ) diff --git a/vendor/k8s.io/api/core/v1/doc.go b/vendor/k8s.io/api/core/v1/doc.go index 96994c62452..1bdf0b25b1b 100644 --- a/vendor/k8s.io/api/core/v1/doc.go +++ b/vendor/k8s.io/api/core/v1/doc.go @@ -16,6 +16,7 @@ limitations under the License. // +k8s:openapi-gen=true // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // Package v1 is the v1 version of the core API. package v1 // import "k8s.io/api/core/v1" diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go index 05cc6d62844..058e03eb94d 100644 --- a/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/vendor/k8s.io/api/core/v1/generated.pb.go @@ -33,6 +33,7 @@ limitations under the License. AzureFileVolumeSource Binding CSIPersistentVolumeSource + CSIVolumeSource Capabilities CephFSPersistentVolumeSource CephFSVolumeSource @@ -293,816 +294,820 @@ func (*CSIPersistentVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (m *CSIVolumeSource) Reset() { *m = CSIVolumeSource{} } +func (*CSIVolumeSource) ProtoMessage() {} +func (*CSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + func (m *Capabilities) Reset() { *m = Capabilities{} } func (*Capabilities) ProtoMessage() {} -func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } func (m *CephFSPersistentVolumeSource) Reset() { *m = CephFSPersistentVolumeSource{} } func (*CephFSPersistentVolumeSource) ProtoMessage() {} func (*CephFSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{10} + return fileDescriptorGenerated, []int{11} } func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } func (*CephFSVolumeSource) ProtoMessage() {} -func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func (m *CinderPersistentVolumeSource) Reset() { *m = CinderPersistentVolumeSource{} } func (*CinderPersistentVolumeSource) ProtoMessage() {} func (*CinderPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{12} + return fileDescriptorGenerated, []int{13} } func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } func (*CinderVolumeSource) ProtoMessage() {} -func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } func (m *ClientIPConfig) Reset() { *m = ClientIPConfig{} } func (*ClientIPConfig) ProtoMessage() {} -func (*ClientIPConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (*ClientIPConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } func (*ComponentCondition) ProtoMessage() {} -func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } func (*ComponentStatus) ProtoMessage() {} -func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } func (*ComponentStatusList) ProtoMessage() {} -func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } func (m *ConfigMap) Reset() { *m = ConfigMap{} } func (*ConfigMap) ProtoMessage() {} -func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } func (m *ConfigMapEnvSource) Reset() { *m = ConfigMapEnvSource{} } func (*ConfigMapEnvSource) ProtoMessage() {} -func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } func (*ConfigMapKeySelector) ProtoMessage() {} -func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } func (*ConfigMapList) ProtoMessage() {} -func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } func (m *ConfigMapNodeConfigSource) Reset() { *m = ConfigMapNodeConfigSource{} } func (*ConfigMapNodeConfigSource) ProtoMessage() {} func (*ConfigMapNodeConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{22} + return fileDescriptorGenerated, []int{23} } func (m *ConfigMapProjection) Reset() { *m = ConfigMapProjection{} } func (*ConfigMapProjection) ProtoMessage() {} -func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } func (*ConfigMapVolumeSource) ProtoMessage() {} -func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } func (m *Container) Reset() { *m = Container{} } func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } func (m *ContainerImage) Reset() { *m = ContainerImage{} } func (*ContainerImage) ProtoMessage() {} -func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } func (m *ContainerPort) Reset() { *m = ContainerPort{} } func (*ContainerPort) ProtoMessage() {} -func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } func (m *ContainerState) Reset() { *m = ContainerState{} } func (*ContainerState) ProtoMessage() {} -func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } func (*ContainerStateRunning) ProtoMessage() {} -func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } func (*ContainerStateTerminated) ProtoMessage() {} func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{30} + return fileDescriptorGenerated, []int{31} } func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } func (*ContainerStateWaiting) ProtoMessage() {} -func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } func (*DaemonEndpoint) ProtoMessage() {} -func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } func (m *DownwardAPIProjection) Reset() { *m = DownwardAPIProjection{} } func (*DownwardAPIProjection) ProtoMessage() {} -func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } func (*DownwardAPIVolumeFile) ProtoMessage() {} -func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } func (*DownwardAPIVolumeSource) ProtoMessage() {} func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{36} + return fileDescriptorGenerated, []int{37} } func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } func (*EmptyDirVolumeSource) ProtoMessage() {} -func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } func (*EndpointAddress) ProtoMessage() {} -func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } func (m *EndpointPort) Reset() { *m = EndpointPort{} } func (*EndpointPort) ProtoMessage() {} -func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } func (*EndpointSubset) ProtoMessage() {} -func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } func (m *Endpoints) Reset() { *m = Endpoints{} } func (*Endpoints) ProtoMessage() {} -func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } func (m *EndpointsList) Reset() { *m = EndpointsList{} } func (*EndpointsList) ProtoMessage() {} -func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } func (m *EnvFromSource) Reset() { *m = EnvFromSource{} } func (*EnvFromSource) ProtoMessage() {} -func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } func (m *EnvVar) Reset() { *m = EnvVar{} } func (*EnvVar) ProtoMessage() {} -func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } +func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } func (*EnvVarSource) ProtoMessage() {} -func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } func (m *Event) Reset() { *m = Event{} } func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } func (m *EventList) Reset() { *m = EventList{} } func (*EventList) ProtoMessage() {} -func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } +func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } func (m *EventSeries) Reset() { *m = EventSeries{} } func (*EventSeries) ProtoMessage() {} -func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } +func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } func (m *EventSource) Reset() { *m = EventSource{} } func (*EventSource) ProtoMessage() {} -func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } +func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } func (m *ExecAction) Reset() { *m = ExecAction{} } func (*ExecAction) ProtoMessage() {} -func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } func (*FCVolumeSource) ProtoMessage() {} -func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } func (m *FlexPersistentVolumeSource) Reset() { *m = FlexPersistentVolumeSource{} } func (*FlexPersistentVolumeSource) ProtoMessage() {} func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{52} + return fileDescriptorGenerated, []int{53} } func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } func (*FlexVolumeSource) ProtoMessage() {} -func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } func (*FlockerVolumeSource) ProtoMessage() {} -func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{55} + return fileDescriptorGenerated, []int{56} } func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } func (*GitRepoVolumeSource) ProtoMessage() {} -func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } func (m *GlusterfsPersistentVolumeSource) Reset() { *m = GlusterfsPersistentVolumeSource{} } func (*GlusterfsPersistentVolumeSource) ProtoMessage() {} func (*GlusterfsPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{57} + return fileDescriptorGenerated, []int{58} } func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } func (*GlusterfsVolumeSource) ProtoMessage() {} -func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } func (*HTTPGetAction) ProtoMessage() {} -func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } +func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } func (*HTTPHeader) ProtoMessage() {} -func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } +func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } func (m *Handler) Reset() { *m = Handler{} } func (*Handler) ProtoMessage() {} -func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } +func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } func (m *HostAlias) Reset() { *m = HostAlias{} } func (*HostAlias) ProtoMessage() {} -func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } +func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } func (*HostPathVolumeSource) ProtoMessage() {} -func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } func (m *ISCSIPersistentVolumeSource) Reset() { *m = ISCSIPersistentVolumeSource{} } func (*ISCSIPersistentVolumeSource) ProtoMessage() {} func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{64} + return fileDescriptorGenerated, []int{65} } func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } func (*ISCSIVolumeSource) ProtoMessage() {} -func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } func (m *KeyToPath) Reset() { *m = KeyToPath{} } func (*KeyToPath) ProtoMessage() {} -func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } +func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } func (m *Lifecycle) Reset() { *m = Lifecycle{} } func (*Lifecycle) ProtoMessage() {} -func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } +func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } func (m *LimitRange) Reset() { *m = LimitRange{} } func (*LimitRange) ProtoMessage() {} -func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } +func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } func (*LimitRangeItem) ProtoMessage() {} -func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } +func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } func (*LimitRangeList) ProtoMessage() {} -func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } +func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } func (*LimitRangeSpec) ProtoMessage() {} -func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } func (*LoadBalancerIngress) ProtoMessage() {} -func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } func (*LoadBalancerStatus) ProtoMessage() {} -func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } func (*LocalObjectReference) ProtoMessage() {} -func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } +func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } func (m *LocalVolumeSource) Reset() { *m = LocalVolumeSource{} } func (*LocalVolumeSource) ProtoMessage() {} -func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } +func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } func (*NFSVolumeSource) ProtoMessage() {} -func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } func (m *Namespace) Reset() { *m = Namespace{} } func (*Namespace) ProtoMessage() {} -func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } +func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } func (m *NamespaceList) Reset() { *m = NamespaceList{} } func (*NamespaceList) ProtoMessage() {} -func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } +func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } func (*NamespaceSpec) ProtoMessage() {} -func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } +func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } func (*NamespaceStatus) ProtoMessage() {} -func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } +func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } func (m *Node) Reset() { *m = Node{} } func (*Node) ProtoMessage() {} -func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } +func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } func (m *NodeAddress) Reset() { *m = NodeAddress{} } func (*NodeAddress) ProtoMessage() {} -func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } func (*NodeAffinity) ProtoMessage() {} -func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } +func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } func (m *NodeCondition) Reset() { *m = NodeCondition{} } func (*NodeCondition) ProtoMessage() {} -func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } +func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } func (m *NodeConfigSource) Reset() { *m = NodeConfigSource{} } func (*NodeConfigSource) ProtoMessage() {} -func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } +func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } func (m *NodeConfigStatus) Reset() { *m = NodeConfigStatus{} } func (*NodeConfigStatus) ProtoMessage() {} -func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } +func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } func (*NodeDaemonEndpoints) ProtoMessage() {} -func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } func (m *NodeList) Reset() { *m = NodeList{} } func (*NodeList) ProtoMessage() {} -func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } +func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } func (*NodeProxyOptions) ProtoMessage() {} -func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } func (m *NodeResources) Reset() { *m = NodeResources{} } func (*NodeResources) ProtoMessage() {} -func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } +func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } func (m *NodeSelector) Reset() { *m = NodeSelector{} } func (*NodeSelector) ProtoMessage() {} -func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } +func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } func (*NodeSelectorRequirement) ProtoMessage() {} func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{93} + return fileDescriptorGenerated, []int{94} } func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } func (*NodeSelectorTerm) ProtoMessage() {} -func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } func (m *NodeSpec) Reset() { *m = NodeSpec{} } func (*NodeSpec) ProtoMessage() {} -func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } +func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } func (*NodeSystemInfo) ProtoMessage() {} -func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } func (*ObjectFieldSelector) ProtoMessage() {} -func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } func (m *ObjectReference) Reset() { *m = ObjectReference{} } func (*ObjectReference) ProtoMessage() {} -func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } +func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } func (*PersistentVolume) ProtoMessage() {} -func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } +func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } func (*PersistentVolumeClaim) ProtoMessage() {} -func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} } func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} } func (*PersistentVolumeClaimCondition) ProtoMessage() {} func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{102} + return fileDescriptorGenerated, []int{103} } func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } func (*PersistentVolumeClaimList) ProtoMessage() {} func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{103} + return fileDescriptorGenerated, []int{104} } func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } func (*PersistentVolumeClaimSpec) ProtoMessage() {} func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{104} + return fileDescriptorGenerated, []int{105} } func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } func (*PersistentVolumeClaimStatus) ProtoMessage() {} func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{105} + return fileDescriptorGenerated, []int{106} } func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{106} + return fileDescriptorGenerated, []int{107} } func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } func (*PersistentVolumeList) ProtoMessage() {} -func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } func (*PersistentVolumeSource) ProtoMessage() {} func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{108} + return fileDescriptorGenerated, []int{109} } func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } func (*PersistentVolumeSpec) ProtoMessage() {} -func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } func (*PersistentVolumeStatus) ProtoMessage() {} func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{110} + return fileDescriptorGenerated, []int{111} } func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} } func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {} func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{111} + return fileDescriptorGenerated, []int{112} } func (m *Pod) Reset() { *m = Pod{} } func (*Pod) ProtoMessage() {} -func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } +func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } func (m *PodAffinity) Reset() { *m = PodAffinity{} } func (*PodAffinity) ProtoMessage() {} -func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } +func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } func (*PodAffinityTerm) ProtoMessage() {} -func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } func (*PodAntiAffinity) ProtoMessage() {} -func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } func (*PodAttachOptions) ProtoMessage() {} -func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } +func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } func (m *PodCondition) Reset() { *m = PodCondition{} } func (*PodCondition) ProtoMessage() {} -func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } +func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } func (m *PodDNSConfig) Reset() { *m = PodDNSConfig{} } func (*PodDNSConfig) ProtoMessage() {} -func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } func (m *PodDNSConfigOption) Reset() { *m = PodDNSConfigOption{} } func (*PodDNSConfigOption) ProtoMessage() {} -func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } func (*PodExecOptions) ProtoMessage() {} -func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } func (m *PodList) Reset() { *m = PodList{} } func (*PodList) ProtoMessage() {} -func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } func (*PodLogOptions) ProtoMessage() {} -func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } func (*PodPortForwardOptions) ProtoMessage() {} -func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *PodReadinessGate) Reset() { *m = PodReadinessGate{} } func (*PodReadinessGate) ProtoMessage() {} -func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *PodSignature) Reset() { *m = PodSignature{} } func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *PodSpec) Reset() { *m = PodSpec{} } func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } func (m *PodStatus) Reset() { *m = PodStatus{} } func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } func (m *PodTemplate) Reset() { *m = PodTemplate{} } func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } func (*PortworxVolumeSource) ProtoMessage() {} -func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{137} + return fileDescriptorGenerated, []int{138} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } func (*RBDPersistentVolumeSource) ProtoMessage() {} func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{141} + return fileDescriptorGenerated, []int{142} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{145} + return fileDescriptorGenerated, []int{146} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{146} + return fileDescriptorGenerated, []int{147} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{147} + return fileDescriptorGenerated, []int{148} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{148} + return fileDescriptorGenerated, []int{149} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{156} + return fileDescriptorGenerated, []int{157} } func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } func (*ScopeSelector) ProtoMessage() {} -func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } func (*ScopedResourceSelectorRequirement) ProtoMessage() {} func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{159} + return fileDescriptorGenerated, []int{160} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } func (*ServiceAccountTokenProjection) ProtoMessage() {} func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{172} + return fileDescriptorGenerated, []int{173} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{179} + return fileDescriptorGenerated, []int{180} } func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } func (*TopologySelectorLabelRequirement) ProtoMessage() {} func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{185} + return fileDescriptorGenerated, []int{186} } func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } func (*TopologySelectorTerm) ProtoMessage() {} -func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} } +func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} } func (m *TypedLocalObjectReference) Reset() { *m = TypedLocalObjectReference{} } func (*TypedLocalObjectReference) ProtoMessage() {} func (*TypedLocalObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{187} + return fileDescriptorGenerated, []int{188} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} } func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } func (*VolumeDevice) ProtoMessage() {} -func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} } +func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } func (*VolumeNodeAffinity) ProtoMessage() {} -func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{194} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{194} + return fileDescriptorGenerated, []int{195} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{195} + return fileDescriptorGenerated, []int{196} } func init() { @@ -1115,6 +1120,7 @@ func init() { proto.RegisterType((*AzureFileVolumeSource)(nil), "k8s.io.api.core.v1.AzureFileVolumeSource") proto.RegisterType((*Binding)(nil), "k8s.io.api.core.v1.Binding") proto.RegisterType((*CSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource") + proto.RegisterType((*CSIVolumeSource)(nil), "k8s.io.api.core.v1.CSIVolumeSource") proto.RegisterType((*Capabilities)(nil), "k8s.io.api.core.v1.Capabilities") proto.RegisterType((*CephFSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CephFSPersistentVolumeSource") proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.api.core.v1.CephFSVolumeSource") @@ -1696,6 +1702,76 @@ func (m *CSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *CSIVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i += copy(dAtA[i:], m.Driver) + if m.ReadOnly != nil { + dAtA[i] = 0x10 + i++ + if *m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.FSType != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSType))) + i += copy(dAtA[i:], *m.FSType) + } + if len(m.VolumeAttributes) > 0 { + keysForVolumeAttributes := make([]string, 0, len(m.VolumeAttributes)) + for k := range m.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + for _, k := range keysForVolumeAttributes { + dAtA[i] = 0x22 + i++ + v := m.VolumeAttributes[string(k)] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + if m.NodePublishSecretRef != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NodePublishSecretRef.Size())) + n9, err := m.NodePublishSecretRef.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + return i, nil +} + func (m *Capabilities) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1790,11 +1866,11 @@ func (m *CephFSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n9, err := m.SecretRef.MarshalTo(dAtA[i:]) + n10, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n10 } dAtA[i] = 0x30 i++ @@ -1853,11 +1929,11 @@ func (m *CephFSVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n10, err := m.SecretRef.MarshalTo(dAtA[i:]) + n11, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n11 } dAtA[i] = 0x30 i++ @@ -1905,11 +1981,11 @@ func (m *CinderPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n11, err := m.SecretRef.MarshalTo(dAtA[i:]) + n12, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } return i, nil } @@ -1949,11 +2025,11 @@ func (m *CinderVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n12, err := m.SecretRef.MarshalTo(dAtA[i:]) + n13, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n13 } return i, nil } @@ -2033,11 +2109,11 @@ func (m *ComponentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n13, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n14, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n14 if len(m.Conditions) > 0 { for _, msg := range m.Conditions { dAtA[i] = 0x12 @@ -2071,11 +2147,11 @@ func (m *ComponentStatusList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n14, err := m.ListMeta.MarshalTo(dAtA[i:]) + n15, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n15 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2109,11 +2185,11 @@ func (m *ConfigMap) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n15, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n16, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n16 if len(m.Data) > 0 { keysForData := make([]string, 0, len(m.Data)) for k := range m.Data { @@ -2185,11 +2261,11 @@ func (m *ConfigMapEnvSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n16, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n17, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n17 if m.Optional != nil { dAtA[i] = 0x10 i++ @@ -2221,11 +2297,11 @@ func (m *ConfigMapKeySelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n17, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n18, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n17 + i += n18 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) @@ -2261,11 +2337,11 @@ func (m *ConfigMapList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n18, err := m.ListMeta.MarshalTo(dAtA[i:]) + n19, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n18 + i += n19 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2337,11 +2413,11 @@ func (m *ConfigMapProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n19, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n20, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n19 + i += n20 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2385,11 +2461,11 @@ func (m *ConfigMapVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n20, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n21, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n20 + i += n21 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2504,11 +2580,11 @@ func (m *Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n21, err := m.Resources.MarshalTo(dAtA[i:]) + n22, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n22 if len(m.VolumeMounts) > 0 { for _, msg := range m.VolumeMounts { dAtA[i] = 0x4a @@ -2525,32 +2601,32 @@ func (m *Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LivenessProbe.Size())) - n22, err := m.LivenessProbe.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.ReadinessProbe != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadinessProbe.Size())) - n23, err := m.ReadinessProbe.MarshalTo(dAtA[i:]) + n23, err := m.LivenessProbe.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n23 } - if m.Lifecycle != nil { - dAtA[i] = 0x62 + if m.ReadinessProbe != nil { + dAtA[i] = 0x5a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Lifecycle.Size())) - n24, err := m.Lifecycle.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadinessProbe.Size())) + n24, err := m.ReadinessProbe.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n24 } + if m.Lifecycle != nil { + dAtA[i] = 0x62 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Lifecycle.Size())) + n25, err := m.Lifecycle.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n25 + } dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePath))) @@ -2563,11 +2639,11 @@ func (m *Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x7a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size())) - n25, err := m.SecurityContext.MarshalTo(dAtA[i:]) + n26, err := m.SecurityContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } dAtA[i] = 0x80 i++ @@ -2727,32 +2803,32 @@ func (m *ContainerState) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Waiting.Size())) - n26, err := m.Waiting.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - if m.Running != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Running.Size())) - n27, err := m.Running.MarshalTo(dAtA[i:]) + n27, err := m.Waiting.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n27 } - if m.Terminated != nil { - dAtA[i] = 0x1a + if m.Running != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Terminated.Size())) - n28, err := m.Terminated.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Running.Size())) + n28, err := m.Running.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n28 } + if m.Terminated != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Terminated.Size())) + n29, err := m.Terminated.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n29 + } return i, nil } @@ -2774,11 +2850,11 @@ func (m *ContainerStateRunning) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StartedAt.Size())) - n29, err := m.StartedAt.MarshalTo(dAtA[i:]) + n30, err := m.StartedAt.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n30 return i, nil } @@ -2814,19 +2890,19 @@ func (m *ContainerStateTerminated) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StartedAt.Size())) - n30, err := m.StartedAt.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FinishedAt.Size())) - n31, err := m.FinishedAt.MarshalTo(dAtA[i:]) + n31, err := m.StartedAt.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n31 + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.FinishedAt.Size())) + n32, err := m.FinishedAt.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n32 dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerID))) @@ -2882,19 +2958,19 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.State.Size())) - n32, err := m.State.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTerminationState.Size())) - n33, err := m.LastTerminationState.MarshalTo(dAtA[i:]) + n33, err := m.State.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n33 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTerminationState.Size())) + n34, err := m.LastTerminationState.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 dAtA[i] = 0x20 i++ if m.Ready { @@ -2995,21 +3071,21 @@ func (m *DownwardAPIVolumeFile) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n34, err := m.FieldRef.MarshalTo(dAtA[i:]) + n35, err := m.FieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n35 } if m.ResourceFieldRef != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n35, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) + n36, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n36 } if m.Mode != nil { dAtA[i] = 0x20 @@ -3077,11 +3153,11 @@ func (m *EmptyDirVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SizeLimit.Size())) - n36, err := m.SizeLimit.MarshalTo(dAtA[i:]) + n37, err := m.SizeLimit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n37 } return i, nil } @@ -3109,11 +3185,11 @@ func (m *EndpointAddress) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetRef.Size())) - n37, err := m.TargetRef.MarshalTo(dAtA[i:]) + n38, err := m.TargetRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n38 } dAtA[i] = 0x1a i++ @@ -3229,11 +3305,11 @@ func (m *Endpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n38, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n39, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n39 if len(m.Subsets) > 0 { for _, msg := range m.Subsets { dAtA[i] = 0x12 @@ -3267,11 +3343,11 @@ func (m *EndpointsList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n39, err := m.ListMeta.MarshalTo(dAtA[i:]) + n40, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n40 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -3310,21 +3386,21 @@ func (m *EnvFromSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapRef.Size())) - n40, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) + n41, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n41 } if m.SecretRef != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n41, err := m.SecretRef.MarshalTo(dAtA[i:]) + n42, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n42 } return i, nil } @@ -3356,11 +3432,11 @@ func (m *EnvVar) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ValueFrom.Size())) - n42, err := m.ValueFrom.MarshalTo(dAtA[i:]) + n43, err := m.ValueFrom.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n43 } return i, nil } @@ -3384,42 +3460,42 @@ func (m *EnvVarSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n43, err := m.FieldRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - if m.ResourceFieldRef != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n44, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) + n44, err := m.FieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n44 } - if m.ConfigMapKeyRef != nil { - dAtA[i] = 0x1a + if m.ResourceFieldRef != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapKeyRef.Size())) - n45, err := m.ConfigMapKeyRef.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) + n45, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n45 } - if m.SecretKeyRef != nil { - dAtA[i] = 0x22 + if m.ConfigMapKeyRef != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretKeyRef.Size())) - n46, err := m.SecretKeyRef.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapKeyRef.Size())) + n46, err := m.ConfigMapKeyRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n46 } + if m.SecretKeyRef != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.SecretKeyRef.Size())) + n47, err := m.SecretKeyRef.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n47 + } return i, nil } @@ -3441,19 +3517,19 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n47, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.InvolvedObject.Size())) - n48, err := m.InvolvedObject.MarshalTo(dAtA[i:]) + n48, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n48 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.InvolvedObject.Size())) + n49, err := m.InvolvedObject.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n49 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -3465,27 +3541,27 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n49, err := m.Source.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FirstTimestamp.Size())) - n50, err := m.FirstTimestamp.MarshalTo(dAtA[i:]) + n50, err := m.Source.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n50 - dAtA[i] = 0x3a + dAtA[i] = 0x32 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTimestamp.Size())) - n51, err := m.LastTimestamp.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.FirstTimestamp.Size())) + n51, err := m.FirstTimestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n51 + dAtA[i] = 0x3a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTimestamp.Size())) + n52, err := m.LastTimestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n52 dAtA[i] = 0x40 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) @@ -3496,20 +3572,20 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EventTime.Size())) - n52, err := m.EventTime.MarshalTo(dAtA[i:]) + n53, err := m.EventTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n53 if m.Series != nil { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Series.Size())) - n53, err := m.Series.MarshalTo(dAtA[i:]) + n54, err := m.Series.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n54 } dAtA[i] = 0x62 i++ @@ -3519,11 +3595,11 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Related.Size())) - n54, err := m.Related.MarshalTo(dAtA[i:]) + n55, err := m.Related.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n55 } dAtA[i] = 0x72 i++ @@ -3554,11 +3630,11 @@ func (m *EventList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n55, err := m.ListMeta.MarshalTo(dAtA[i:]) + n56, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n56 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -3595,11 +3671,11 @@ func (m *EventSeries) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastObservedTime.Size())) - n56, err := m.LastObservedTime.MarshalTo(dAtA[i:]) + n57, err := m.LastObservedTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n57 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) @@ -3758,11 +3834,11 @@ func (m *FlexPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n57, err := m.SecretRef.MarshalTo(dAtA[i:]) + n58, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n58 } dAtA[i] = 0x20 i++ @@ -3824,11 +3900,11 @@ func (m *FlexVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n58, err := m.SecretRef.MarshalTo(dAtA[i:]) + n59, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n59 } dAtA[i] = 0x20 i++ @@ -4052,11 +4128,11 @@ func (m *HTTPGetAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n59, err := m.Port.MarshalTo(dAtA[i:]) + n60, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n60 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -4125,32 +4201,32 @@ func (m *Handler) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Exec.Size())) - n60, err := m.Exec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - } - if m.HTTPGet != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HTTPGet.Size())) - n61, err := m.HTTPGet.MarshalTo(dAtA[i:]) + n61, err := m.Exec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n61 } - if m.TCPSocket != nil { - dAtA[i] = 0x1a + if m.HTTPGet != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TCPSocket.Size())) - n62, err := m.TCPSocket.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.HTTPGet.Size())) + n62, err := m.HTTPGet.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n62 } + if m.TCPSocket != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TCPSocket.Size())) + n63, err := m.TCPSocket.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n63 + } return i, nil } @@ -4288,11 +4364,11 @@ func (m *ISCSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n63, err := m.SecretRef.MarshalTo(dAtA[i:]) + n64, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n64 } dAtA[i] = 0x58 i++ @@ -4380,11 +4456,11 @@ func (m *ISCSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n64, err := m.SecretRef.MarshalTo(dAtA[i:]) + n65, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n65 } dAtA[i] = 0x58 i++ @@ -4453,21 +4529,21 @@ func (m *Lifecycle) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PostStart.Size())) - n65, err := m.PostStart.MarshalTo(dAtA[i:]) + n66, err := m.PostStart.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n66 } if m.PreStop != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PreStop.Size())) - n66, err := m.PreStop.MarshalTo(dAtA[i:]) + n67, err := m.PreStop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n67 } return i, nil } @@ -4490,19 +4566,19 @@ func (m *LimitRange) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n67, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n67 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n68, err := m.Spec.MarshalTo(dAtA[i:]) + n68, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n68 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n69, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n69 return i, nil } @@ -4549,11 +4625,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n69, err := (&v).MarshalTo(dAtA[i:]) + n70, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n69 + i += n70 } } if len(m.Min) > 0 { @@ -4580,11 +4656,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n70, err := (&v).MarshalTo(dAtA[i:]) + n71, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n70 + i += n71 } } if len(m.Default) > 0 { @@ -4611,11 +4687,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n71, err := (&v).MarshalTo(dAtA[i:]) + n72, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n71 + i += n72 } } if len(m.DefaultRequest) > 0 { @@ -4642,11 +4718,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n72, err := (&v).MarshalTo(dAtA[i:]) + n73, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n72 + i += n73 } } if len(m.MaxLimitRequestRatio) > 0 { @@ -4673,11 +4749,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n73, err := (&v).MarshalTo(dAtA[i:]) + n74, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n73 + i += n74 } } return i, nil @@ -4701,11 +4777,11 @@ func (m *LimitRangeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n74, err := m.ListMeta.MarshalTo(dAtA[i:]) + n75, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n74 + i += n75 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -4769,11 +4845,11 @@ func (m *List) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n75, err := m.ListMeta.MarshalTo(dAtA[i:]) + n76, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n75 + i += n76 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -4947,27 +5023,27 @@ func (m *Namespace) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n76, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n76 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n77, err := m.Spec.MarshalTo(dAtA[i:]) + n77, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n77 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n78, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n78, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n78 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n79, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n79 return i, nil } @@ -4989,11 +5065,11 @@ func (m *NamespaceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n79, err := m.ListMeta.MarshalTo(dAtA[i:]) + n80, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n79 + i += n80 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -5082,27 +5158,27 @@ func (m *Node) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n80, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n80 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n81, err := m.Spec.MarshalTo(dAtA[i:]) + n81, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n81 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n82, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n82, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n82 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n83, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n83 return i, nil } @@ -5151,11 +5227,11 @@ func (m *NodeAffinity) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.RequiredDuringSchedulingIgnoredDuringExecution.Size())) - n83, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(dAtA[i:]) + n84, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n83 + i += n84 } if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { @@ -5198,19 +5274,19 @@ func (m *NodeCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastHeartbeatTime.Size())) - n84, err := m.LastHeartbeatTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n84 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n85, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n85, err := m.LastHeartbeatTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n85 + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) + n86, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n86 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -5241,11 +5317,11 @@ func (m *NodeConfigSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n86, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n87, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n86 + i += n87 } return i, nil } @@ -5269,32 +5345,32 @@ func (m *NodeConfigStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Assigned.Size())) - n87, err := m.Assigned.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n87 - } - if m.Active != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Active.Size())) - n88, err := m.Active.MarshalTo(dAtA[i:]) + n88, err := m.Assigned.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n88 } - if m.LastKnownGood != nil { - dAtA[i] = 0x1a + if m.Active != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastKnownGood.Size())) - n89, err := m.LastKnownGood.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Active.Size())) + n89, err := m.Active.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n89 } + if m.LastKnownGood != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastKnownGood.Size())) + n90, err := m.LastKnownGood.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n90 + } dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) @@ -5320,11 +5396,11 @@ func (m *NodeDaemonEndpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.KubeletEndpoint.Size())) - n90, err := m.KubeletEndpoint.MarshalTo(dAtA[i:]) + n91, err := m.KubeletEndpoint.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n90 + i += n91 return i, nil } @@ -5346,11 +5422,11 @@ func (m *NodeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n91, err := m.ListMeta.MarshalTo(dAtA[i:]) + n92, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n91 + i += n92 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -5427,11 +5503,11 @@ func (m *NodeResources) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n92, err := (&v).MarshalTo(dAtA[i:]) + n93, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n92 + i += n93 } } return i, nil @@ -5601,11 +5677,11 @@ func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigSource.Size())) - n93, err := m.ConfigSource.MarshalTo(dAtA[i:]) + n94, err := m.ConfigSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n93 + i += n94 } return i, nil } @@ -5649,11 +5725,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n94, err := (&v).MarshalTo(dAtA[i:]) + n95, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n94 + i += n95 } } if len(m.Allocatable) > 0 { @@ -5680,11 +5756,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n95, err := (&v).MarshalTo(dAtA[i:]) + n96, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n95 + i += n96 } } dAtA[i] = 0x1a @@ -5718,19 +5794,19 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DaemonEndpoints.Size())) - n96, err := m.DaemonEndpoints.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n96 - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodeInfo.Size())) - n97, err := m.NodeInfo.MarshalTo(dAtA[i:]) + n97, err := m.DaemonEndpoints.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n97 + dAtA[i] = 0x3a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NodeInfo.Size())) + n98, err := m.NodeInfo.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n98 if len(m.Images) > 0 { for _, msg := range m.Images { dAtA[i] = 0x42 @@ -5774,11 +5850,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Config.Size())) - n98, err := m.Config.MarshalTo(dAtA[i:]) + n99, err := m.Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n98 + i += n99 } return i, nil } @@ -5931,27 +6007,27 @@ func (m *PersistentVolume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n99, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n99 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n100, err := m.Spec.MarshalTo(dAtA[i:]) + n100, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n100 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n101, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n101, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n101 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n102, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n102 return i, nil } @@ -5973,27 +6049,27 @@ func (m *PersistentVolumeClaim) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n102, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n102 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n103, err := m.Spec.MarshalTo(dAtA[i:]) + n103, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n103 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n104, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n104, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n104 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n105, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n105 return i, nil } @@ -6023,19 +6099,19 @@ func (m *PersistentVolumeClaimCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n105, err := m.LastProbeTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n105 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n106, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n106, err := m.LastProbeTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n106 + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) + n107, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n107 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -6065,11 +6141,11 @@ func (m *PersistentVolumeClaimList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n107, err := m.ListMeta.MarshalTo(dAtA[i:]) + n108, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n107 + i += n108 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -6118,11 +6194,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n108, err := m.Resources.MarshalTo(dAtA[i:]) + n109, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n108 + i += n109 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) @@ -6131,11 +6207,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n109, err := m.Selector.MarshalTo(dAtA[i:]) + n110, err := m.Selector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n109 + i += n110 } if m.StorageClassName != nil { dAtA[i] = 0x2a @@ -6153,11 +6229,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DataSource.Size())) - n110, err := m.DataSource.MarshalTo(dAtA[i:]) + n111, err := m.DataSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n110 + i += n111 } return i, nil } @@ -6220,11 +6296,11 @@ func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n111, err := (&v).MarshalTo(dAtA[i:]) + n112, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n111 + i += n112 } } if len(m.Conditions) > 0 { @@ -6290,11 +6366,11 @@ func (m *PersistentVolumeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n112, err := m.ListMeta.MarshalTo(dAtA[i:]) + n113, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n112 + i += n113 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -6329,163 +6405,163 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n113, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n113 - } - if m.AWSElasticBlockStore != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n114, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + n114, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n114 } - if m.HostPath != nil { - dAtA[i] = 0x1a + if m.AWSElasticBlockStore != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n115, err := m.HostPath.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) + n115, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n115 } - if m.Glusterfs != nil { - dAtA[i] = 0x22 + if m.HostPath != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n116, err := m.Glusterfs.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) + n116, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n116 } - if m.NFS != nil { - dAtA[i] = 0x2a + if m.Glusterfs != nil { + dAtA[i] = 0x22 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n117, err := m.NFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) + n117, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n117 } - if m.RBD != nil { - dAtA[i] = 0x32 + if m.NFS != nil { + dAtA[i] = 0x2a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n118, err := m.RBD.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) + n118, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n118 } - if m.ISCSI != nil { - dAtA[i] = 0x3a + if m.RBD != nil { + dAtA[i] = 0x32 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n119, err := m.ISCSI.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) + n119, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n119 } - if m.Cinder != nil { - dAtA[i] = 0x42 + if m.ISCSI != nil { + dAtA[i] = 0x3a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n120, err := m.Cinder.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) + n120, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n120 } - if m.CephFS != nil { - dAtA[i] = 0x4a + if m.Cinder != nil { + dAtA[i] = 0x42 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n121, err := m.CephFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) + n121, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n121 } - if m.FC != nil { - dAtA[i] = 0x52 + if m.CephFS != nil { + dAtA[i] = 0x4a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n122, err := m.FC.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) + n122, err := m.CephFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n122 } - if m.Flocker != nil { - dAtA[i] = 0x5a + if m.FC != nil { + dAtA[i] = 0x52 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n123, err := m.Flocker.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) + n123, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n123 } - if m.FlexVolume != nil { - dAtA[i] = 0x62 + if m.Flocker != nil { + dAtA[i] = 0x5a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n124, err := m.FlexVolume.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) + n124, err := m.Flocker.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n124 } - if m.AzureFile != nil { - dAtA[i] = 0x6a + if m.FlexVolume != nil { + dAtA[i] = 0x62 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n125, err := m.AzureFile.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) + n125, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n125 } - if m.VsphereVolume != nil { - dAtA[i] = 0x72 + if m.AzureFile != nil { + dAtA[i] = 0x6a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n126, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) + n126, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n126 } - if m.Quobyte != nil { - dAtA[i] = 0x7a + if m.VsphereVolume != nil { + dAtA[i] = 0x72 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n127, err := m.Quobyte.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) + n127, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n127 } + if m.Quobyte != nil { + dAtA[i] = 0x7a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) + n128, err := m.Quobyte.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n128 + } if m.AzureDisk != nil { dAtA[i] = 0x82 i++ dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n128, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n129, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n128 + i += n129 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0x8a @@ -6493,11 +6569,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n129, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n130, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n129 + i += n130 } if m.PortworxVolume != nil { dAtA[i] = 0x92 @@ -6505,11 +6581,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n130, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n131, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n130 + i += n131 } if m.ScaleIO != nil { dAtA[i] = 0x9a @@ -6517,11 +6593,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n131, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n132, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n131 + i += n132 } if m.Local != nil { dAtA[i] = 0xa2 @@ -6529,11 +6605,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Local.Size())) - n132, err := m.Local.MarshalTo(dAtA[i:]) + n133, err := m.Local.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n132 + i += n133 } if m.StorageOS != nil { dAtA[i] = 0xaa @@ -6541,11 +6617,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n133, err := m.StorageOS.MarshalTo(dAtA[i:]) + n134, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n133 + i += n134 } if m.CSI != nil { dAtA[i] = 0xb2 @@ -6553,11 +6629,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) - n134, err := m.CSI.MarshalTo(dAtA[i:]) + n135, err := m.CSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n134 + i += n135 } return i, nil } @@ -6601,21 +6677,21 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n135, err := (&v).MarshalTo(dAtA[i:]) + n136, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n135 + i += n136 } } dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeSource.Size())) - n136, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:]) + n137, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n136 + i += n137 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { dAtA[i] = 0x1a @@ -6635,11 +6711,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClaimRef.Size())) - n137, err := m.ClaimRef.MarshalTo(dAtA[i:]) + n138, err := m.ClaimRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n137 + i += n138 } dAtA[i] = 0x2a i++ @@ -6674,11 +6750,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodeAffinity.Size())) - n138, err := m.NodeAffinity.MarshalTo(dAtA[i:]) + n139, err := m.NodeAffinity.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n138 + i += n139 } return i, nil } @@ -6757,27 +6833,27 @@ func (m *Pod) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n139, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n139 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n140, err := m.Spec.MarshalTo(dAtA[i:]) + n140, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n140 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n141, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n141, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n141 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n142, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n142 return i, nil } @@ -6842,11 +6918,11 @@ func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LabelSelector.Size())) - n142, err := m.LabelSelector.MarshalTo(dAtA[i:]) + n143, err := m.LabelSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n142 + i += n143 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -6992,19 +7068,19 @@ func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n143, err := m.LastProbeTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n143 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n144, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n144, err := m.LastProbeTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n144 + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) + n145, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n145 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -7191,11 +7267,11 @@ func (m *PodList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n145, err := m.ListMeta.MarshalTo(dAtA[i:]) + n146, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n145 + i += n146 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -7255,11 +7331,11 @@ func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SinceTime.Size())) - n146, err := m.SinceTime.MarshalTo(dAtA[i:]) + n147, err := m.SinceTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n146 + i += n147 } dAtA[i] = 0x30 i++ @@ -7370,11 +7446,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n147, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n148, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n147 + i += n148 } if m.RunAsUser != nil { dAtA[i] = 0x10 @@ -7442,11 +7518,11 @@ func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodController.Size())) - n148, err := m.PodController.MarshalTo(dAtA[i:]) + n149, err := m.PodController.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n148 + i += n149 } return i, nil } @@ -7570,11 +7646,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size())) - n149, err := m.SecurityContext.MarshalTo(dAtA[i:]) + n150, err := m.SecurityContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n149 + i += n150 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -7606,11 +7682,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Affinity.Size())) - n150, err := m.Affinity.MarshalTo(dAtA[i:]) + n151, err := m.Affinity.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n150 + i += n151 } dAtA[i] = 0x9a i++ @@ -7691,11 +7767,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DNSConfig.Size())) - n151, err := m.DNSConfig.MarshalTo(dAtA[i:]) + n152, err := m.DNSConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n151 + i += n152 } if m.ShareProcessNamespace != nil { dAtA[i] = 0xd8 @@ -7797,11 +7873,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size())) - n152, err := m.StartTime.MarshalTo(dAtA[i:]) + n153, err := m.StartTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n152 + i += n153 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -7856,19 +7932,19 @@ func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n153, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n153 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n154, err := m.Status.MarshalTo(dAtA[i:]) + n154, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n154 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n155, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n155 return i, nil } @@ -7890,19 +7966,19 @@ func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n155, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n155 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n156, err := m.Template.MarshalTo(dAtA[i:]) + n156, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n156 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) + n157, err := m.Template.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n157 return i, nil } @@ -7924,11 +8000,11 @@ func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n157, err := m.ListMeta.MarshalTo(dAtA[i:]) + n158, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n158 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -7962,19 +8038,19 @@ func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n158, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n158 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n159, err := m.Spec.MarshalTo(dAtA[i:]) + n159, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n159 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n160, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n160 return i, nil } @@ -8054,19 +8130,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size())) - n160, err := m.PodSignature.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n160 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size())) - n161, err := m.EvictionTime.MarshalTo(dAtA[i:]) + n161, err := m.PodSignature.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n161 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size())) + n162, err := m.EvictionTime.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n162 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -8099,11 +8175,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size())) - n162, err := m.Preference.MarshalTo(dAtA[i:]) + n163, err := m.Preference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n163 return i, nil } @@ -8125,11 +8201,11 @@ func (m *Probe) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size())) - n163, err := m.Handler.MarshalTo(dAtA[i:]) + n164, err := m.Handler.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n164 dAtA[i] = 0x10 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds)) @@ -8222,6 +8298,10 @@ func (m *QuobyteVolumeSource) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) i += copy(dAtA[i:], m.Group) + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tenant))) + i += copy(dAtA[i:], m.Tenant) return i, nil } @@ -8279,11 +8359,11 @@ func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n164, err := m.SecretRef.MarshalTo(dAtA[i:]) + n165, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n165 } dAtA[i] = 0x40 i++ @@ -8350,11 +8430,11 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n165, err := m.SecretRef.MarshalTo(dAtA[i:]) + n166, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n166 } dAtA[i] = 0x40 i++ @@ -8385,11 +8465,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n166, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n167, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n167 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) @@ -8421,27 +8501,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n167, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n167 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n168, err := m.Spec.MarshalTo(dAtA[i:]) + n168, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n168 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n169, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n169, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n169 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n170, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n170 return i, nil } @@ -8471,11 +8551,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n170, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n171, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n171 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -8505,11 +8585,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n171, err := m.ListMeta.MarshalTo(dAtA[i:]) + n172, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n172 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8571,11 +8651,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n172, err := m.Template.MarshalTo(dAtA[i:]) + n173, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n173 } dAtA[i] = 0x20 i++ @@ -8654,11 +8734,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size())) - n173, err := m.Divisor.MarshalTo(dAtA[i:]) + n174, err := m.Divisor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n174 return i, nil } @@ -8680,27 +8760,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n174, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n174 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n175, err := m.Spec.MarshalTo(dAtA[i:]) + n175, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n175 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n176, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n176, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n176 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n177, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n177 return i, nil } @@ -8722,11 +8802,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n177, err := m.ListMeta.MarshalTo(dAtA[i:]) + n178, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n177 + i += n178 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8781,11 +8861,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n178, err := (&v).MarshalTo(dAtA[i:]) + n179, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n178 + i += n179 } } if len(m.Scopes) > 0 { @@ -8807,11 +8887,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScopeSelector.Size())) - n179, err := m.ScopeSelector.MarshalTo(dAtA[i:]) + n180, err := m.ScopeSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n180 } return i, nil } @@ -8855,11 +8935,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n180, err := (&v).MarshalTo(dAtA[i:]) + n181, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n181 } } if len(m.Used) > 0 { @@ -8886,11 +8966,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n181, err := (&v).MarshalTo(dAtA[i:]) + n182, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n182 } } return i, nil @@ -8935,11 +9015,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n182, err := (&v).MarshalTo(dAtA[i:]) + n183, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n183 } } if len(m.Requests) > 0 { @@ -8966,11 +9046,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n183, err := (&v).MarshalTo(dAtA[i:]) + n184, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n184 } } return i, nil @@ -9037,11 +9117,11 @@ func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n184, err := m.SecretRef.MarshalTo(dAtA[i:]) + n185, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n185 } dAtA[i] = 0x20 i++ @@ -9109,11 +9189,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n185, err := m.SecretRef.MarshalTo(dAtA[i:]) + n186, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n186 } dAtA[i] = 0x20 i++ @@ -9243,11 +9323,11 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n186, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n187, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n187 if len(m.Data) > 0 { keysForData := make([]string, 0, len(m.Data)) for k := range m.Data { @@ -9323,11 +9403,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n187, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n188, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n188 if m.Optional != nil { dAtA[i] = 0x10 i++ @@ -9359,11 +9439,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n188, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n189, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n189 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) @@ -9399,11 +9479,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n189, err := m.ListMeta.MarshalTo(dAtA[i:]) + n190, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n189 + i += n190 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9437,11 +9517,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n190, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n191, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n191 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9561,11 +9641,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size())) - n191, err := m.Capabilities.MarshalTo(dAtA[i:]) + n192, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n192 } if m.Privileged != nil { dAtA[i] = 0x10 @@ -9581,11 +9661,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n192, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n193, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n193 } if m.RunAsUser != nil { dAtA[i] = 0x20 @@ -9654,11 +9734,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size())) - n193, err := m.Reference.MarshalTo(dAtA[i:]) + n194, err := m.Reference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n194 return i, nil } @@ -9680,27 +9760,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n194, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n194 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n195, err := m.Spec.MarshalTo(dAtA[i:]) + n195, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n195 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n196, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n196, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n196 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n197, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n197 return i, nil } @@ -9722,11 +9802,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n197, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n198, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n197 + i += n198 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { dAtA[i] = 0x12 @@ -9782,11 +9862,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n198, err := m.ListMeta.MarshalTo(dAtA[i:]) + n199, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n198 + i += n199 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9851,11 +9931,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n199, err := m.ListMeta.MarshalTo(dAtA[i:]) + n200, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n199 + i += n200 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9900,11 +9980,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size())) - n200, err := m.TargetPort.MarshalTo(dAtA[i:]) + n201, err := m.TargetPort.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n200 + i += n201 dAtA[i] = 0x28 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) @@ -10051,11 +10131,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size())) - n201, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) + n202, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n201 + i += n202 } return i, nil } @@ -10078,11 +10158,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n202, err := m.LoadBalancer.MarshalTo(dAtA[i:]) + n203, err := m.LoadBalancer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n202 + i += n203 return i, nil } @@ -10105,11 +10185,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size())) - n203, err := m.ClientIP.MarshalTo(dAtA[i:]) + n204, err := m.ClientIP.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n203 + i += n204 } return i, nil } @@ -10153,11 +10233,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n204, err := m.SecretRef.MarshalTo(dAtA[i:]) + n205, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n204 + i += n205 } return i, nil } @@ -10201,11 +10281,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n205, err := m.SecretRef.MarshalTo(dAtA[i:]) + n206, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n205 + i += n206 } return i, nil } @@ -10254,11 +10334,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n206, err := m.Port.MarshalTo(dAtA[i:]) + n207, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n206 + i += n207 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -10297,11 +10377,11 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) - n207, err := m.TimeAdded.MarshalTo(dAtA[i:]) + n208, err := m.TimeAdded.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n207 + i += n208 } return i, nil } @@ -10466,11 +10546,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size())) - n208, err := m.VolumeSource.MarshalTo(dAtA[i:]) + n209, err := m.VolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n208 + i += n209 return i, nil } @@ -10541,6 +10621,10 @@ func (m *VolumeMount) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MountPropagation))) i += copy(dAtA[i:], *m.MountPropagation) } + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SubPathExpr))) + i += copy(dAtA[i:], m.SubPathExpr) return i, nil } @@ -10563,11 +10647,11 @@ func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Required.Size())) - n209, err := m.Required.MarshalTo(dAtA[i:]) + n210, err := m.Required.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n209 + i += n210 } return i, nil } @@ -10591,42 +10675,42 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n210, err := m.Secret.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n210 - } - if m.DownwardAPI != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n211, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n211, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n211 } - if m.ConfigMap != nil { - dAtA[i] = 0x1a + if m.DownwardAPI != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n212, err := m.ConfigMap.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) + n212, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n212 } - if m.ServiceAccountToken != nil { - dAtA[i] = 0x22 + if m.ConfigMap != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size())) - n213, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) + n213, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n213 } + if m.ServiceAccountToken != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size())) + n214, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n214 + } return i, nil } @@ -10649,163 +10733,163 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n214, err := m.HostPath.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n214 - } - if m.EmptyDir != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) - n215, err := m.EmptyDir.MarshalTo(dAtA[i:]) + n215, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n215 } - if m.GCEPersistentDisk != nil { - dAtA[i] = 0x1a + if m.EmptyDir != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n216, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) + n216, err := m.EmptyDir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n216 } - if m.AWSElasticBlockStore != nil { - dAtA[i] = 0x22 + if m.GCEPersistentDisk != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n217, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) + n217, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n217 } - if m.GitRepo != nil { - dAtA[i] = 0x2a + if m.AWSElasticBlockStore != nil { + dAtA[i] = 0x22 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) - n218, err := m.GitRepo.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) + n218, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n218 } - if m.Secret != nil { - dAtA[i] = 0x32 + if m.GitRepo != nil { + dAtA[i] = 0x2a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n219, err := m.Secret.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) + n219, err := m.GitRepo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n219 } - if m.NFS != nil { - dAtA[i] = 0x3a + if m.Secret != nil { + dAtA[i] = 0x32 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n220, err := m.NFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) + n220, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n220 } - if m.ISCSI != nil { - dAtA[i] = 0x42 + if m.NFS != nil { + dAtA[i] = 0x3a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n221, err := m.ISCSI.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) + n221, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n221 } - if m.Glusterfs != nil { - dAtA[i] = 0x4a + if m.ISCSI != nil { + dAtA[i] = 0x42 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n222, err := m.Glusterfs.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) + n222, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n222 } - if m.PersistentVolumeClaim != nil { - dAtA[i] = 0x52 + if m.Glusterfs != nil { + dAtA[i] = 0x4a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) - n223, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) + n223, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n223 } - if m.RBD != nil { - dAtA[i] = 0x5a + if m.PersistentVolumeClaim != nil { + dAtA[i] = 0x52 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n224, err := m.RBD.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) + n224, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n224 } - if m.FlexVolume != nil { - dAtA[i] = 0x62 + if m.RBD != nil { + dAtA[i] = 0x5a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n225, err := m.FlexVolume.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) + n225, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n225 } - if m.Cinder != nil { - dAtA[i] = 0x6a + if m.FlexVolume != nil { + dAtA[i] = 0x62 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n226, err := m.Cinder.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) + n226, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n226 } - if m.CephFS != nil { - dAtA[i] = 0x72 + if m.Cinder != nil { + dAtA[i] = 0x6a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n227, err := m.CephFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) + n227, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n227 } - if m.Flocker != nil { - dAtA[i] = 0x7a + if m.CephFS != nil { + dAtA[i] = 0x72 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n228, err := m.Flocker.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) + n228, err := m.CephFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n228 } + if m.Flocker != nil { + dAtA[i] = 0x7a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) + n229, err := m.Flocker.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n229 + } if m.DownwardAPI != nil { dAtA[i] = 0x82 i++ dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n229, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n230, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n229 + i += n230 } if m.FC != nil { dAtA[i] = 0x8a @@ -10813,11 +10897,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n230, err := m.FC.MarshalTo(dAtA[i:]) + n231, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n230 + i += n231 } if m.AzureFile != nil { dAtA[i] = 0x92 @@ -10825,11 +10909,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n231, err := m.AzureFile.MarshalTo(dAtA[i:]) + n232, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n231 + i += n232 } if m.ConfigMap != nil { dAtA[i] = 0x9a @@ -10837,11 +10921,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n232, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n233, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n232 + i += n233 } if m.VsphereVolume != nil { dAtA[i] = 0xa2 @@ -10849,11 +10933,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n233, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + n234, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n233 + i += n234 } if m.Quobyte != nil { dAtA[i] = 0xaa @@ -10861,11 +10945,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n234, err := m.Quobyte.MarshalTo(dAtA[i:]) + n235, err := m.Quobyte.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n234 + i += n235 } if m.AzureDisk != nil { dAtA[i] = 0xb2 @@ -10873,11 +10957,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n235, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n236, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n235 + i += n236 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0xba @@ -10885,11 +10969,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n236, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n237, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n236 + i += n237 } if m.PortworxVolume != nil { dAtA[i] = 0xc2 @@ -10897,11 +10981,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n237, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n238, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n237 + i += n238 } if m.ScaleIO != nil { dAtA[i] = 0xca @@ -10909,11 +10993,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n238, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n239, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n238 + i += n239 } if m.Projected != nil { dAtA[i] = 0xd2 @@ -10921,11 +11005,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size())) - n239, err := m.Projected.MarshalTo(dAtA[i:]) + n240, err := m.Projected.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n239 + i += n240 } if m.StorageOS != nil { dAtA[i] = 0xda @@ -10933,11 +11017,23 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n240, err := m.StorageOS.MarshalTo(dAtA[i:]) + n241, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n240 + i += n241 + } + if m.CSI != nil { + dAtA[i] = 0xe2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) + n242, err := m.CSI.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n242 } return i, nil } @@ -10997,11 +11093,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size())) - n241, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) + n243, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n241 + i += n243 return i, nil } @@ -11160,6 +11256,33 @@ func (m *CSIPersistentVolumeSource) Size() (n int) { return n } +func (m *CSIVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + if m.ReadOnly != nil { + n += 2 + } + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.VolumeAttributes) > 0 { + for k, v := range m.VolumeAttributes { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.NodePublishSecretRef != nil { + l = m.NodePublishSecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *Capabilities) Size() (n int) { var l int _ = l @@ -13547,6 +13670,8 @@ func (m *QuobyteVolumeSource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Group) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Tenant) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -14390,6 +14515,8 @@ func (m *VolumeMount) Size() (n int) { l = len(*m.MountPropagation) n += 1 + l + sovGenerated(uint64(l)) } + l = len(m.SubPathExpr) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -14536,6 +14663,10 @@ func (m *VolumeSource) Size() (n int) { l = m.StorageOS.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.CSI != nil { + l = m.CSI.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -14699,6 +14830,30 @@ func (this *CSIPersistentVolumeSource) String() string { }, "") return s } +func (this *CSIVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForVolumeAttributes := make([]string, 0, len(this.VolumeAttributes)) + for k := range this.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + mapStringForVolumeAttributes := "map[string]string{" + for _, k := range keysForVolumeAttributes { + mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) + } + mapStringForVolumeAttributes += "}" + s := strings.Join([]string{`&CSIVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `VolumeAttributes:` + mapStringForVolumeAttributes + `,`, + `NodePublishSecretRef:` + strings.Replace(fmt.Sprintf("%v", this.NodePublishSecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} func (this *Capabilities) String() string { if this == nil { return "nil" @@ -16548,6 +16703,7 @@ func (this *QuobyteVolumeSource) String() string { `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, `User:` + fmt.Sprintf("%v", this.User) + `,`, `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Tenant:` + fmt.Sprintf("%v", this.Tenant) + `,`, `}`, }, "") return s @@ -17273,6 +17429,7 @@ func (this *VolumeMount) String() string { `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, `MountPropagation:` + valueToStringGenerated(this.MountPropagation) + `,`, + `SubPathExpr:` + fmt.Sprintf("%v", this.SubPathExpr) + `,`, `}`, }, "") return s @@ -17332,6 +17489,7 @@ func (this *VolumeSource) String() string { `ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOVolumeSource", "ScaleIOVolumeSource", 1) + `,`, `Projected:` + strings.Replace(fmt.Sprintf("%v", this.Projected), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`, `StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSVolumeSource", "StorageOSVolumeSource", 1) + `,`, + `CSI:` + strings.Replace(fmt.Sprintf("%v", this.CSI), "CSIVolumeSource", "CSIVolumeSource", 1) + `,`, `}`, }, "") return s @@ -18842,6 +19000,287 @@ func (m *CSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { } return nil } +func (m *CSIVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnly = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.VolumeAttributes == nil { + m.VolumeAttributes = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.VolumeAttributes[mapkey] = mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodePublishSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodePublishSecretRef == nil { + m.NodePublishSecretRef = &LocalObjectReference{} + } + if err := m.NodePublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Capabilities) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -41550,6 +41989,35 @@ func (m *QuobyteVolumeSource) Unmarshal(dAtA []byte) error { } m.Group = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tenant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tenant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -50046,6 +50514,35 @@ func (m *VolumeMount) Unmarshal(dAtA []byte) error { s := MountPropagationMode(dAtA[iNdEx:postIndex]) m.MountPropagation = &s iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubPathExpr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubPathExpr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -51252,6 +51749,39 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 28: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CSI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CSI == nil { + m.CSI = &CSIVolumeSource{} + } + if err := m.CSI.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -51648,808 +52178,814 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 12835 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x64, 0x57, - 0x56, 0xd8, 0xbe, 0xee, 0xd6, 0x47, 0x1f, 0x7d, 0xdf, 0x99, 0xb1, 0x35, 0xb2, 0x67, 0x7a, 0xfc, - 0xbc, 0x3b, 0x1e, 0xaf, 0x6d, 0xcd, 0x7a, 0x6c, 0xaf, 0xcd, 0xda, 0x6b, 0x90, 0xd4, 0xd2, 0x4c, - 0x7b, 0x46, 0x9a, 0xf6, 0x6d, 0xcd, 0x78, 0xd7, 0x78, 0x97, 0x7d, 0xea, 0xbe, 0x92, 0x9e, 0xf5, - 0xf4, 0x5e, 0xfb, 0xbd, 0xd7, 0x9a, 0x91, 0x03, 0x55, 0xc9, 0x12, 0x48, 0x36, 0x50, 0xa9, 0xad, - 0xb0, 0x95, 0x0f, 0xa0, 0x48, 0x15, 0x21, 0x05, 0x84, 0x24, 0x15, 0x02, 0x01, 0xc2, 0x42, 0x42, - 0x20, 0x3f, 0xc8, 0x9f, 0x0d, 0x49, 0x55, 0x6a, 0xa9, 0xa2, 0xa2, 0x80, 0x48, 0x25, 0xc5, 0x8f, - 0x40, 0x2a, 0xe4, 0x47, 0x50, 0xa8, 0x90, 0xba, 0x9f, 0xef, 0xde, 0xd7, 0xef, 0x75, 0xb7, 0xc6, - 0x1a, 0xd9, 0x50, 0xfb, 0xaf, 0xfb, 0x9e, 0x73, 0xcf, 0xbd, 0xef, 0x7e, 0x9e, 0x73, 0xee, 0xf9, - 0x80, 0x57, 0x77, 0x5e, 0x89, 0xe6, 0xdd, 0xe0, 0xea, 0x4e, 0x67, 0x83, 0x84, 0x3e, 0x89, 0x49, - 0x74, 0x75, 0x8f, 0xf8, 0xad, 0x20, 0xbc, 0x2a, 0x00, 0x4e, 0xdb, 0xbd, 0xda, 0x0c, 0x42, 0x72, - 0x75, 0xef, 0xf9, 0xab, 0x5b, 0xc4, 0x27, 0xa1, 0x13, 0x93, 0xd6, 0x7c, 0x3b, 0x0c, 0xe2, 0x00, - 0x21, 0x8e, 0x33, 0xef, 0xb4, 0xdd, 0x79, 0x8a, 0x33, 0xbf, 0xf7, 0xfc, 0xdc, 0x73, 0x5b, 0x6e, - 0xbc, 0xdd, 0xd9, 0x98, 0x6f, 0x06, 0xbb, 0x57, 0xb7, 0x82, 0xad, 0xe0, 0x2a, 0x43, 0xdd, 0xe8, - 0x6c, 0xb2, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xbd, 0x98, 0x34, 0xb3, 0xeb, 0x34, 0xb7, - 0x5d, 0x9f, 0x84, 0xfb, 0x57, 0xdb, 0x3b, 0x5b, 0xac, 0xdd, 0x90, 0x44, 0x41, 0x27, 0x6c, 0x92, - 0x74, 0xc3, 0x3d, 0x6b, 0x45, 0x57, 0x77, 0x49, 0xec, 0x64, 0x74, 0x77, 0xee, 0x6a, 0x5e, 0xad, - 0xb0, 0xe3, 0xc7, 0xee, 0x6e, 0x77, 0x33, 0x9f, 0xee, 0x57, 0x21, 0x6a, 0x6e, 0x93, 0x5d, 0xa7, - 0xab, 0xde, 0x0b, 0x79, 0xf5, 0x3a, 0xb1, 0xeb, 0x5d, 0x75, 0xfd, 0x38, 0x8a, 0xc3, 0x74, 0x25, - 0xfb, 0x9b, 0x16, 0x5c, 0x5a, 0x78, 0xab, 0xb1, 0xec, 0x39, 0x51, 0xec, 0x36, 0x17, 0xbd, 0xa0, - 0xb9, 0xd3, 0x88, 0x83, 0x90, 0xdc, 0x0d, 0xbc, 0xce, 0x2e, 0x69, 0xb0, 0x81, 0x40, 0xcf, 0xc2, - 0xe8, 0x1e, 0xfb, 0x5f, 0xab, 0xce, 0x5a, 0x97, 0xac, 0x2b, 0xe5, 0xc5, 0xe9, 0xdf, 0x3c, 0xa8, - 0x7c, 0xec, 0xf0, 0xa0, 0x32, 0x7a, 0x57, 0x94, 0x63, 0x85, 0x81, 0x2e, 0xc3, 0xf0, 0x66, 0xb4, - 0xbe, 0xdf, 0x26, 0xb3, 0x05, 0x86, 0x3b, 0x29, 0x70, 0x87, 0x57, 0x1a, 0xb4, 0x14, 0x0b, 0x28, - 0xba, 0x0a, 0xe5, 0xb6, 0x13, 0xc6, 0x6e, 0xec, 0x06, 0xfe, 0x6c, 0xf1, 0x92, 0x75, 0x65, 0x68, - 0x71, 0x46, 0xa0, 0x96, 0xeb, 0x12, 0x80, 0x13, 0x1c, 0xda, 0x8d, 0x90, 0x38, 0xad, 0xdb, 0xbe, - 0xb7, 0x3f, 0x5b, 0xba, 0x64, 0x5d, 0x19, 0x4d, 0xba, 0x81, 0x45, 0x39, 0x56, 0x18, 0xf6, 0x0f, - 0x17, 0x60, 0x74, 0x61, 0x73, 0xd3, 0xf5, 0xdd, 0x78, 0x1f, 0xdd, 0x85, 0x71, 0x3f, 0x68, 0x11, - 0xf9, 0x9f, 0x7d, 0xc5, 0xd8, 0xb5, 0x4b, 0xf3, 0xdd, 0x4b, 0x69, 0x7e, 0x4d, 0xc3, 0x5b, 0x9c, - 0x3e, 0x3c, 0xa8, 0x8c, 0xeb, 0x25, 0xd8, 0xa0, 0x83, 0x30, 0x8c, 0xb5, 0x83, 0x96, 0x22, 0x5b, - 0x60, 0x64, 0x2b, 0x59, 0x64, 0xeb, 0x09, 0xda, 0xe2, 0xd4, 0xe1, 0x41, 0x65, 0x4c, 0x2b, 0xc0, - 0x3a, 0x11, 0xb4, 0x01, 0x53, 0xf4, 0xaf, 0x1f, 0xbb, 0x8a, 0x6e, 0x91, 0xd1, 0x7d, 0x32, 0x8f, - 0xae, 0x86, 0xba, 0x78, 0xe6, 0xf0, 0xa0, 0x32, 0x95, 0x2a, 0xc4, 0x69, 0x82, 0xf6, 0xfb, 0x30, - 0xb9, 0x10, 0xc7, 0x4e, 0x73, 0x9b, 0xb4, 0xf8, 0x0c, 0xa2, 0x17, 0xa1, 0xe4, 0x3b, 0xbb, 0x44, - 0xcc, 0xef, 0x25, 0x31, 0xb0, 0xa5, 0x35, 0x67, 0x97, 0x1c, 0x1d, 0x54, 0xa6, 0xef, 0xf8, 0xee, - 0x7b, 0x1d, 0xb1, 0x2a, 0x68, 0x19, 0x66, 0xd8, 0xe8, 0x1a, 0x40, 0x8b, 0xec, 0xb9, 0x4d, 0x52, - 0x77, 0xe2, 0x6d, 0x31, 0xdf, 0x48, 0xd4, 0x85, 0xaa, 0x82, 0x60, 0x0d, 0xcb, 0xbe, 0x0f, 0xe5, - 0x85, 0xbd, 0xc0, 0x6d, 0xd5, 0x83, 0x56, 0x84, 0x76, 0x60, 0xaa, 0x1d, 0x92, 0x4d, 0x12, 0xaa, - 0xa2, 0x59, 0xeb, 0x52, 0xf1, 0xca, 0xd8, 0xb5, 0x2b, 0x99, 0x1f, 0x6b, 0xa2, 0x2e, 0xfb, 0x71, - 0xb8, 0xbf, 0xf8, 0xa8, 0x68, 0x6f, 0x2a, 0x05, 0xc5, 0x69, 0xca, 0xf6, 0xbf, 0x2d, 0xc0, 0xb9, - 0x85, 0xf7, 0x3b, 0x21, 0xa9, 0xba, 0xd1, 0x4e, 0x7a, 0x85, 0xb7, 0xdc, 0x68, 0x67, 0x2d, 0x19, - 0x01, 0xb5, 0xb4, 0xaa, 0xa2, 0x1c, 0x2b, 0x0c, 0xf4, 0x1c, 0x8c, 0xd0, 0xdf, 0x77, 0x70, 0x4d, - 0x7c, 0xf2, 0x19, 0x81, 0x3c, 0x56, 0x75, 0x62, 0xa7, 0xca, 0x41, 0x58, 0xe2, 0xa0, 0x55, 0x18, - 0x6b, 0xb2, 0x0d, 0xb9, 0xb5, 0x1a, 0xb4, 0x08, 0x9b, 0xcc, 0xf2, 0xe2, 0x33, 0x14, 0x7d, 0x29, - 0x29, 0x3e, 0x3a, 0xa8, 0xcc, 0xf2, 0xbe, 0x09, 0x12, 0x1a, 0x0c, 0xeb, 0xf5, 0x91, 0xad, 0xf6, - 0x57, 0x89, 0x51, 0x82, 0x8c, 0xbd, 0x75, 0x45, 0xdb, 0x2a, 0x43, 0x6c, 0xab, 0x8c, 0x67, 0x6f, - 0x13, 0xf4, 0x3c, 0x94, 0x76, 0x5c, 0xbf, 0x35, 0x3b, 0xcc, 0x68, 0x5d, 0xa0, 0x73, 0x7e, 0xd3, - 0xf5, 0x5b, 0x47, 0x07, 0x95, 0x19, 0xa3, 0x3b, 0xb4, 0x10, 0x33, 0x54, 0xfb, 0x8f, 0x2d, 0xa8, - 0x30, 0xd8, 0x8a, 0xeb, 0x91, 0x3a, 0x09, 0x23, 0x37, 0x8a, 0x89, 0x1f, 0x1b, 0x03, 0x7a, 0x0d, - 0x20, 0x22, 0xcd, 0x90, 0xc4, 0xda, 0x90, 0xaa, 0x85, 0xd1, 0x50, 0x10, 0xac, 0x61, 0xd1, 0x03, - 0x21, 0xda, 0x76, 0x42, 0xb6, 0xbe, 0xc4, 0xc0, 0xaa, 0x03, 0xa1, 0x21, 0x01, 0x38, 0xc1, 0x31, - 0x0e, 0x84, 0x62, 0xbf, 0x03, 0x01, 0x7d, 0x16, 0xa6, 0x92, 0xc6, 0xa2, 0xb6, 0xd3, 0x94, 0x03, - 0xc8, 0xb6, 0x4c, 0xc3, 0x04, 0xe1, 0x34, 0xae, 0xfd, 0x8f, 0x2c, 0xb1, 0x78, 0xe8, 0x57, 0x7f, - 0xc4, 0xbf, 0xd5, 0xfe, 0x25, 0x0b, 0x46, 0x16, 0x5d, 0xbf, 0xe5, 0xfa, 0x5b, 0xe8, 0x4b, 0x30, - 0x4a, 0xef, 0xa6, 0x96, 0x13, 0x3b, 0xe2, 0xdc, 0xfb, 0x94, 0xb6, 0xb7, 0xd4, 0x55, 0x31, 0xdf, - 0xde, 0xd9, 0xa2, 0x05, 0xd1, 0x3c, 0xc5, 0xa6, 0xbb, 0xed, 0xf6, 0xc6, 0xbb, 0xa4, 0x19, 0xaf, - 0x92, 0xd8, 0x49, 0x3e, 0x27, 0x29, 0xc3, 0x8a, 0x2a, 0xba, 0x09, 0xc3, 0xb1, 0x13, 0x6e, 0x91, - 0x58, 0x1c, 0x80, 0x99, 0x07, 0x15, 0xaf, 0x89, 0xe9, 0x8e, 0x24, 0x7e, 0x93, 0x24, 0xd7, 0xc2, - 0x3a, 0xab, 0x8a, 0x05, 0x09, 0xfb, 0x6f, 0x0c, 0xc3, 0xf9, 0xa5, 0x46, 0x2d, 0x67, 0x5d, 0x5d, - 0x86, 0xe1, 0x56, 0xe8, 0xee, 0x91, 0x50, 0x8c, 0xb3, 0xa2, 0x52, 0x65, 0xa5, 0x58, 0x40, 0xd1, - 0x2b, 0x30, 0xce, 0x2f, 0xa4, 0x1b, 0x8e, 0xdf, 0xf2, 0xe4, 0x10, 0x9f, 0x15, 0xd8, 0xe3, 0x77, - 0x35, 0x18, 0x36, 0x30, 0x8f, 0xb9, 0xa8, 0x2e, 0xa7, 0x36, 0x63, 0xde, 0x65, 0xf7, 0x15, 0x0b, - 0xa6, 0x79, 0x33, 0x0b, 0x71, 0x1c, 0xba, 0x1b, 0x9d, 0x98, 0x44, 0xb3, 0x43, 0xec, 0xa4, 0x5b, - 0xca, 0x1a, 0xad, 0xdc, 0x11, 0x98, 0xbf, 0x9b, 0xa2, 0xc2, 0x0f, 0xc1, 0x59, 0xd1, 0xee, 0x74, - 0x1a, 0x8c, 0xbb, 0x9a, 0x45, 0xdf, 0x6b, 0xc1, 0x5c, 0x33, 0xf0, 0xe3, 0x30, 0xf0, 0x3c, 0x12, - 0xd6, 0x3b, 0x1b, 0x9e, 0x1b, 0x6d, 0xf3, 0x75, 0x8a, 0xc9, 0x26, 0x3b, 0x09, 0x72, 0xe6, 0x50, - 0x21, 0x89, 0x39, 0xbc, 0x78, 0x78, 0x50, 0x99, 0x5b, 0xca, 0x25, 0x85, 0x7b, 0x34, 0x83, 0x76, - 0x00, 0xd1, 0xab, 0xb4, 0x11, 0x3b, 0x5b, 0x24, 0x69, 0x7c, 0x64, 0xf0, 0xc6, 0x1f, 0x39, 0x3c, - 0xa8, 0xa0, 0xb5, 0x2e, 0x12, 0x38, 0x83, 0x2c, 0x7a, 0x0f, 0xce, 0xd2, 0xd2, 0xae, 0x6f, 0x1d, - 0x1d, 0xbc, 0xb9, 0xd9, 0xc3, 0x83, 0xca, 0xd9, 0xb5, 0x0c, 0x22, 0x38, 0x93, 0xf4, 0xdc, 0x12, - 0x9c, 0xcb, 0x9c, 0x2a, 0x34, 0x0d, 0xc5, 0x1d, 0xc2, 0x59, 0x90, 0x32, 0xa6, 0x3f, 0xd1, 0x59, - 0x18, 0xda, 0x73, 0xbc, 0x8e, 0x58, 0xa5, 0x98, 0xff, 0xf9, 0x4c, 0xe1, 0x15, 0xcb, 0x6e, 0xc2, - 0xf8, 0x92, 0xd3, 0x76, 0x36, 0x5c, 0xcf, 0x8d, 0x5d, 0x12, 0xa1, 0xa7, 0xa0, 0xe8, 0xb4, 0x5a, - 0xec, 0x8a, 0x2c, 0x2f, 0x9e, 0x3b, 0x3c, 0xa8, 0x14, 0x17, 0x5a, 0xf4, 0xac, 0x06, 0x85, 0xb5, - 0x8f, 0x29, 0x06, 0xfa, 0x24, 0x94, 0x5a, 0x61, 0xd0, 0x9e, 0x2d, 0x30, 0x4c, 0x3a, 0x54, 0xa5, - 0x6a, 0x18, 0xb4, 0x53, 0xa8, 0x0c, 0xc7, 0xfe, 0xb5, 0x02, 0x3c, 0xbe, 0x44, 0xda, 0xdb, 0x2b, - 0x8d, 0x9c, 0x4d, 0x77, 0x05, 0x46, 0x77, 0x03, 0xdf, 0x8d, 0x83, 0x30, 0x12, 0x4d, 0xb3, 0xdb, - 0x64, 0x55, 0x94, 0x61, 0x05, 0x45, 0x97, 0xa0, 0xd4, 0x4e, 0x38, 0x81, 0x71, 0xc9, 0x45, 0x30, - 0x1e, 0x80, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0xb8, 0x05, 0x15, 0xc6, 0x9d, 0x88, 0x84, 0x98, - 0x41, 0x92, 0xe3, 0x94, 0x1e, 0xb4, 0x62, 0x5b, 0xa5, 0x8e, 0x53, 0x0a, 0xc1, 0x1a, 0x16, 0xaa, - 0x43, 0x39, 0x52, 0x93, 0x3a, 0x34, 0xf8, 0xa4, 0x4e, 0xb0, 0xf3, 0x56, 0xcd, 0x64, 0x42, 0xc4, - 0x38, 0x06, 0x86, 0xfb, 0x9e, 0xb7, 0x5f, 0x2f, 0x00, 0xe2, 0x43, 0xf8, 0xe7, 0x6c, 0xe0, 0xee, - 0x74, 0x0f, 0x5c, 0x26, 0xe7, 0x75, 0x2b, 0x68, 0x3a, 0x5e, 0xfa, 0x08, 0x3f, 0xa9, 0xd1, 0xfb, - 0xdf, 0x16, 0x3c, 0xbe, 0xe4, 0xfa, 0x2d, 0x12, 0xe6, 0x2c, 0xc0, 0x87, 0x23, 0x80, 0x1c, 0xef, - 0xa4, 0x37, 0x96, 0x58, 0xe9, 0x04, 0x96, 0x98, 0xfd, 0x47, 0x16, 0x20, 0xfe, 0xd9, 0x1f, 0xb9, - 0x8f, 0xbd, 0xd3, 0xfd, 0xb1, 0x27, 0xb0, 0x2c, 0xec, 0x5b, 0x30, 0xb9, 0xe4, 0xb9, 0xc4, 0x8f, - 0x6b, 0xf5, 0xa5, 0xc0, 0xdf, 0x74, 0xb7, 0xd0, 0x67, 0x60, 0x92, 0xca, 0xb4, 0x41, 0x27, 0x6e, - 0x90, 0x66, 0xe0, 0x33, 0xf6, 0x9f, 0x4a, 0x82, 0xe8, 0xf0, 0xa0, 0x32, 0xb9, 0x6e, 0x40, 0x70, - 0x0a, 0xd3, 0xfe, 0x1d, 0x3a, 0x7e, 0xc1, 0x6e, 0x3b, 0xf0, 0x89, 0x1f, 0x2f, 0x05, 0x7e, 0x8b, - 0x8b, 0x89, 0x9f, 0x81, 0x52, 0x4c, 0xc7, 0x83, 0x8f, 0xdd, 0x65, 0xb9, 0x51, 0xe8, 0x28, 0x1c, - 0x1d, 0x54, 0x1e, 0xe9, 0xae, 0xc1, 0xc6, 0x89, 0xd5, 0x41, 0xdf, 0x06, 0xc3, 0x51, 0xec, 0xc4, - 0x9d, 0x48, 0x8c, 0xe6, 0x13, 0x72, 0x34, 0x1b, 0xac, 0xf4, 0xe8, 0xa0, 0x32, 0xa5, 0xaa, 0xf1, - 0x22, 0x2c, 0x2a, 0xa0, 0xa7, 0x61, 0x64, 0x97, 0x44, 0x91, 0xb3, 0x25, 0x39, 0xfc, 0x29, 0x51, - 0x77, 0x64, 0x95, 0x17, 0x63, 0x09, 0x47, 0x4f, 0xc2, 0x10, 0x09, 0xc3, 0x20, 0x14, 0x7b, 0x74, - 0x42, 0x20, 0x0e, 0x2d, 0xd3, 0x42, 0xcc, 0x61, 0xf6, 0xbf, 0xb7, 0x60, 0x4a, 0xf5, 0x95, 0xb7, - 0x75, 0x0a, 0xac, 0xdc, 0xdb, 0x00, 0x4d, 0xf9, 0x81, 0x11, 0xbb, 0x3d, 0xc6, 0xae, 0x5d, 0xce, - 0x64, 0x50, 0xba, 0x86, 0x31, 0xa1, 0xac, 0x8a, 0x22, 0xac, 0x51, 0xb3, 0x7f, 0xd5, 0x82, 0x33, - 0xa9, 0x2f, 0xba, 0xe5, 0x46, 0x31, 0x7a, 0xa7, 0xeb, 0xab, 0xe6, 0x07, 0xfb, 0x2a, 0x5a, 0x9b, - 0x7d, 0x93, 0x5a, 0xca, 0xb2, 0x44, 0xfb, 0xa2, 0x1b, 0x30, 0xe4, 0xc6, 0x64, 0x57, 0x7e, 0xcc, - 0x93, 0x3d, 0x3f, 0x86, 0xf7, 0x2a, 0x99, 0x91, 0x1a, 0xad, 0x89, 0x39, 0x01, 0xfb, 0x87, 0x8a, - 0x50, 0xe6, 0xcb, 0x76, 0xd5, 0x69, 0x9f, 0xc2, 0x5c, 0xd4, 0xa0, 0xc4, 0xa8, 0xf3, 0x8e, 0x3f, - 0x95, 0xdd, 0x71, 0xd1, 0x9d, 0x79, 0x2a, 0xa7, 0x71, 0x56, 0x50, 0x5d, 0x0d, 0xb4, 0x08, 0x33, - 0x12, 0xc8, 0x01, 0xd8, 0x70, 0x7d, 0x27, 0xdc, 0xa7, 0x65, 0xb3, 0x45, 0x46, 0xf0, 0xb9, 0xde, - 0x04, 0x17, 0x15, 0x3e, 0x27, 0xab, 0xfa, 0x9a, 0x00, 0xb0, 0x46, 0x74, 0xee, 0x65, 0x28, 0x2b, - 0xe4, 0xe3, 0xf0, 0x38, 0x73, 0x9f, 0x85, 0xa9, 0x54, 0x5b, 0xfd, 0xaa, 0x8f, 0xeb, 0x2c, 0xd2, - 0x2f, 0xb3, 0x53, 0x40, 0xf4, 0x7a, 0xd9, 0xdf, 0x13, 0xa7, 0xe8, 0xfb, 0x70, 0xd6, 0xcb, 0x38, - 0x9c, 0xc4, 0x54, 0x0d, 0x7e, 0x98, 0x3d, 0x2e, 0x3e, 0xfb, 0x6c, 0x16, 0x14, 0x67, 0xb6, 0x41, - 0xaf, 0xfd, 0xa0, 0x4d, 0xd7, 0xbc, 0xe3, 0xb1, 0xfe, 0x0a, 0xe9, 0xfb, 0xb6, 0x28, 0xc3, 0x0a, - 0x4a, 0x8f, 0xb0, 0xb3, 0xaa, 0xf3, 0x37, 0xc9, 0x7e, 0x83, 0x78, 0xa4, 0x19, 0x07, 0xe1, 0x87, - 0xda, 0xfd, 0x0b, 0x7c, 0xf4, 0xf9, 0x09, 0x38, 0x26, 0x08, 0x14, 0x6f, 0x92, 0x7d, 0x3e, 0x15, - 0xfa, 0xd7, 0x15, 0x7b, 0x7e, 0xdd, 0xcf, 0x5a, 0x30, 0xa1, 0xbe, 0xee, 0x14, 0xb6, 0xfa, 0xa2, - 0xb9, 0xd5, 0x2f, 0xf4, 0x5c, 0xe0, 0x39, 0x9b, 0xfc, 0xeb, 0x05, 0x38, 0xaf, 0x70, 0x28, 0xbb, - 0xcf, 0xff, 0x88, 0x55, 0x75, 0x15, 0xca, 0xbe, 0xd2, 0x1e, 0x58, 0xa6, 0xd8, 0x9e, 0xe8, 0x0e, - 0x12, 0x1c, 0xca, 0xb5, 0xf9, 0x89, 0x88, 0x3f, 0xae, 0xab, 0xd5, 0x84, 0x0a, 0x6d, 0x11, 0x8a, - 0x1d, 0xb7, 0x25, 0xee, 0x8c, 0x4f, 0xc9, 0xd1, 0xbe, 0x53, 0xab, 0x1e, 0x1d, 0x54, 0x9e, 0xc8, - 0x53, 0xe9, 0xd2, 0xcb, 0x2a, 0x9a, 0xbf, 0x53, 0xab, 0x62, 0x5a, 0x19, 0x2d, 0xc0, 0x94, 0xd4, - 0x5a, 0xdf, 0xa5, 0x1c, 0x54, 0xe0, 0x8b, 0xab, 0x45, 0xe9, 0xc6, 0xb0, 0x09, 0xc6, 0x69, 0x7c, - 0x54, 0x85, 0xe9, 0x9d, 0xce, 0x06, 0xf1, 0x48, 0xcc, 0x3f, 0xf8, 0x26, 0xe1, 0x9a, 0xa3, 0x72, - 0x22, 0x5a, 0xde, 0x4c, 0xc1, 0x71, 0x57, 0x0d, 0xfb, 0xcf, 0xd8, 0x11, 0x2f, 0x46, 0xaf, 0x1e, - 0x06, 0x74, 0x61, 0x51, 0xea, 0x1f, 0xe6, 0x72, 0x1e, 0x64, 0x55, 0xdc, 0x24, 0xfb, 0xeb, 0x01, - 0x65, 0xb6, 0xb3, 0x57, 0x85, 0xb1, 0xe6, 0x4b, 0x3d, 0xd7, 0xfc, 0xcf, 0x17, 0xe0, 0x9c, 0x1a, - 0x01, 0x83, 0xaf, 0xfb, 0xf3, 0x3e, 0x06, 0xcf, 0xc3, 0x58, 0x8b, 0x6c, 0x3a, 0x1d, 0x2f, 0x56, - 0x6a, 0xcc, 0x21, 0xae, 0xca, 0xae, 0x26, 0xc5, 0x58, 0xc7, 0x39, 0xc6, 0xb0, 0xfd, 0xc4, 0x18, - 0xbb, 0x5b, 0x63, 0x87, 0xae, 0x71, 0xb5, 0x6b, 0xac, 0xdc, 0x5d, 0xf3, 0x24, 0x0c, 0xb9, 0xbb, - 0x94, 0xd7, 0x2a, 0x98, 0x2c, 0x54, 0x8d, 0x16, 0x62, 0x0e, 0x43, 0x9f, 0x80, 0x91, 0x66, 0xb0, - 0xbb, 0xeb, 0xf8, 0x2d, 0x76, 0xe5, 0x95, 0x17, 0xc7, 0x28, 0x3b, 0xb6, 0xc4, 0x8b, 0xb0, 0x84, - 0xa1, 0xc7, 0xa1, 0xe4, 0x84, 0x5b, 0xd1, 0x6c, 0x89, 0xe1, 0x8c, 0xd2, 0x96, 0x16, 0xc2, 0xad, - 0x08, 0xb3, 0x52, 0x2a, 0x55, 0xdd, 0x0b, 0xc2, 0x1d, 0xd7, 0xdf, 0xaa, 0xba, 0xa1, 0xd8, 0x12, - 0xea, 0x2e, 0x7c, 0x4b, 0x41, 0xb0, 0x86, 0x85, 0x56, 0x60, 0xa8, 0x1d, 0x84, 0x71, 0x34, 0x3b, - 0xcc, 0x86, 0xfb, 0x89, 0x9c, 0x83, 0x88, 0x7f, 0x6d, 0x3d, 0x08, 0xe3, 0xe4, 0x03, 0xe8, 0xbf, - 0x08, 0xf3, 0xea, 0xe8, 0xdb, 0xa0, 0x48, 0xfc, 0xbd, 0xd9, 0x11, 0x46, 0x65, 0x2e, 0x8b, 0xca, - 0xb2, 0xbf, 0x77, 0xd7, 0x09, 0x93, 0x53, 0x7a, 0xd9, 0xdf, 0xc3, 0xb4, 0x0e, 0xfa, 0x3c, 0x94, - 0xe5, 0x16, 0x8f, 0x84, 0x9a, 0x23, 0x73, 0x89, 0xc9, 0x83, 0x01, 0x93, 0xf7, 0x3a, 0x6e, 0x48, - 0x76, 0x89, 0x1f, 0x47, 0xc9, 0x99, 0x26, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0xcf, 0x4b, 0xdd, 0xda, - 0x6a, 0xd0, 0xf1, 0xe3, 0x68, 0xb6, 0xcc, 0xba, 0x97, 0xf9, 0xea, 0x71, 0x37, 0xc1, 0x4b, 0x2b, - 0xdf, 0x78, 0x65, 0x6c, 0x90, 0x42, 0x18, 0x26, 0x3c, 0x77, 0x8f, 0xf8, 0x24, 0x8a, 0xea, 0x61, - 0xb0, 0x41, 0x66, 0x81, 0xf5, 0xfc, 0x7c, 0xf6, 0x63, 0x40, 0xb0, 0x41, 0x16, 0x67, 0x0e, 0x0f, - 0x2a, 0x13, 0xb7, 0xf4, 0x3a, 0xd8, 0x24, 0x81, 0xee, 0xc0, 0x24, 0x95, 0x6b, 0xdc, 0x84, 0xe8, - 0x58, 0x3f, 0xa2, 0x4c, 0xfa, 0xc0, 0x46, 0x25, 0x9c, 0x22, 0x82, 0xde, 0x80, 0xb2, 0xe7, 0x6e, - 0x92, 0xe6, 0x7e, 0xd3, 0x23, 0xb3, 0xe3, 0x8c, 0x62, 0xe6, 0xb6, 0xba, 0x25, 0x91, 0xb8, 0x5c, - 0xa4, 0xfe, 0xe2, 0xa4, 0x3a, 0xba, 0x0b, 0x8f, 0xc4, 0x24, 0xdc, 0x75, 0x7d, 0x87, 0x6e, 0x07, - 0x21, 0x2f, 0xb0, 0x27, 0x95, 0x09, 0xb6, 0xde, 0x2e, 0x8a, 0xa1, 0x7b, 0x64, 0x3d, 0x13, 0x0b, - 0xe7, 0xd4, 0x46, 0xb7, 0x61, 0x8a, 0xed, 0x84, 0x7a, 0xc7, 0xf3, 0xea, 0x81, 0xe7, 0x36, 0xf7, - 0x67, 0x27, 0x19, 0xc1, 0x4f, 0xc8, 0x7b, 0xa1, 0x66, 0x82, 0x8f, 0x0e, 0x2a, 0x90, 0xfc, 0xc3, - 0xe9, 0xda, 0x68, 0x83, 0xe9, 0xd0, 0x3b, 0xa1, 0x1b, 0xef, 0xd3, 0xf5, 0x4b, 0xee, 0xc7, 0xb3, - 0x53, 0x3d, 0x45, 0x61, 0x1d, 0x55, 0x29, 0xda, 0xf5, 0x42, 0x9c, 0x26, 0x48, 0xb7, 0x76, 0x14, - 0xb7, 0x5c, 0x7f, 0x76, 0x9a, 0x9d, 0x18, 0x6a, 0x67, 0x34, 0x68, 0x21, 0xe6, 0x30, 0xa6, 0x3f, - 0xa7, 0x3f, 0x6e, 0xd3, 0x13, 0x74, 0x86, 0x21, 0x26, 0xfa, 0x73, 0x09, 0xc0, 0x09, 0x0e, 0x65, - 0x6a, 0xe2, 0x78, 0x7f, 0x16, 0x31, 0x54, 0xb5, 0x5d, 0xd6, 0xd7, 0x3f, 0x8f, 0x69, 0x39, 0xba, - 0x05, 0x23, 0xc4, 0xdf, 0x5b, 0x09, 0x83, 0xdd, 0xd9, 0x33, 0xf9, 0x7b, 0x76, 0x99, 0xa3, 0xf0, - 0x03, 0x3d, 0x11, 0xf0, 0x44, 0x31, 0x96, 0x24, 0xd0, 0x7d, 0x98, 0xcd, 0x98, 0x11, 0x3e, 0x01, - 0x67, 0xd9, 0x04, 0xbc, 0x26, 0xea, 0xce, 0xae, 0xe7, 0xe0, 0x1d, 0xf5, 0x80, 0xe1, 0x5c, 0xea, - 0xe8, 0x0b, 0x30, 0xc1, 0x37, 0x14, 0x7f, 0x7c, 0x8b, 0x66, 0xcf, 0xb1, 0xaf, 0xb9, 0x94, 0xbf, - 0x39, 0x39, 0xe2, 0xe2, 0x39, 0xd1, 0xa1, 0x09, 0xbd, 0x34, 0xc2, 0x26, 0x35, 0x7b, 0x03, 0x26, - 0xd5, 0xb9, 0xc5, 0x96, 0x0e, 0xaa, 0xc0, 0x10, 0xe3, 0x76, 0x84, 0x7e, 0xab, 0x4c, 0x67, 0x8a, - 0x71, 0x42, 0x98, 0x97, 0xb3, 0x99, 0x72, 0xdf, 0x27, 0x8b, 0xfb, 0x31, 0xe1, 0x52, 0x75, 0x51, - 0x9b, 0x29, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0xff, 0x38, 0xd7, 0x98, 0x1c, 0x8e, 0x03, 0x5c, 0x07, - 0xcf, 0xc2, 0xe8, 0x76, 0x10, 0xc5, 0x14, 0x9b, 0xb5, 0x31, 0x94, 0xf0, 0x89, 0x37, 0x44, 0x39, - 0x56, 0x18, 0xe8, 0x55, 0x98, 0x68, 0xea, 0x0d, 0x88, 0xbb, 0x4c, 0x0d, 0x81, 0xd1, 0x3a, 0x36, - 0x71, 0xd1, 0x2b, 0x30, 0xca, 0x9e, 0xce, 0x9b, 0x81, 0x27, 0x98, 0x2c, 0x79, 0x21, 0x8f, 0xd6, - 0x45, 0xf9, 0x91, 0xf6, 0x1b, 0x2b, 0x6c, 0x74, 0x19, 0x86, 0x69, 0x17, 0x6a, 0x75, 0x71, 0x8b, - 0x28, 0x55, 0xcd, 0x0d, 0x56, 0x8a, 0x05, 0xd4, 0xfe, 0x5b, 0x05, 0x6d, 0x94, 0xa9, 0x44, 0x4a, - 0x50, 0x1d, 0x46, 0xee, 0x39, 0x6e, 0xec, 0xfa, 0x5b, 0x82, 0x5d, 0x78, 0xba, 0xe7, 0x95, 0xc2, - 0x2a, 0xbd, 0xc5, 0x2b, 0xf0, 0x4b, 0x4f, 0xfc, 0xc1, 0x92, 0x0c, 0xa5, 0x18, 0x76, 0x7c, 0x9f, - 0x52, 0x2c, 0x0c, 0x4a, 0x11, 0xf3, 0x0a, 0x9c, 0xa2, 0xf8, 0x83, 0x25, 0x19, 0xf4, 0x0e, 0x80, - 0x5c, 0x96, 0xa4, 0x25, 0x9e, 0xac, 0x9f, 0xed, 0x4f, 0x74, 0x5d, 0xd5, 0x59, 0x9c, 0xa4, 0x57, - 0x6a, 0xf2, 0x1f, 0x6b, 0xf4, 0xec, 0x98, 0xb1, 0x55, 0xdd, 0x9d, 0x41, 0xdf, 0x49, 0x4f, 0x02, - 0x27, 0x8c, 0x49, 0x6b, 0x21, 0x16, 0x83, 0xf3, 0xc9, 0xc1, 0x64, 0x8a, 0x75, 0x77, 0x97, 0xe8, - 0xa7, 0x86, 0x20, 0x82, 0x13, 0x7a, 0xf6, 0x2f, 0x16, 0x61, 0x36, 0xaf, 0xbb, 0x74, 0xd1, 0x91, - 0xfb, 0x6e, 0xbc, 0x44, 0xb9, 0x21, 0xcb, 0x5c, 0x74, 0xcb, 0xa2, 0x1c, 0x2b, 0x0c, 0x3a, 0xfb, - 0x91, 0xbb, 0x25, 0x45, 0xc2, 0xa1, 0x64, 0xf6, 0x1b, 0xac, 0x14, 0x0b, 0x28, 0xc5, 0x0b, 0x89, - 0x13, 0x09, 0x9b, 0x08, 0x6d, 0x95, 0x60, 0x56, 0x8a, 0x05, 0x54, 0xd7, 0x37, 0x95, 0xfa, 0xe8, - 0x9b, 0x8c, 0x21, 0x1a, 0x3a, 0xd9, 0x21, 0x42, 0x5f, 0x04, 0xd8, 0x74, 0x7d, 0x37, 0xda, 0x66, - 0xd4, 0x87, 0x8f, 0x4d, 0x5d, 0xf1, 0x52, 0x2b, 0x8a, 0x0a, 0xd6, 0x28, 0xa2, 0x97, 0x60, 0x4c, - 0x6d, 0xc0, 0x5a, 0x95, 0x3d, 0x10, 0x69, 0x0f, 0xee, 0xc9, 0x69, 0x54, 0xc5, 0x3a, 0x9e, 0xfd, - 0x6e, 0x7a, 0xbd, 0x88, 0x1d, 0xa0, 0x8d, 0xaf, 0x35, 0xe8, 0xf8, 0x16, 0x7a, 0x8f, 0xaf, 0xfd, - 0xeb, 0x45, 0x98, 0x32, 0x1a, 0xeb, 0x44, 0x03, 0x9c, 0x59, 0xd7, 0xe9, 0x3d, 0xe7, 0xc4, 0x44, - 0xec, 0x3f, 0xbb, 0xff, 0x56, 0xd1, 0xef, 0x42, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x45, 0x28, 0x7b, - 0x4e, 0xc4, 0x74, 0x57, 0x44, 0xec, 0xbb, 0x41, 0x88, 0x25, 0x72, 0x84, 0x13, 0xc5, 0xda, 0x55, - 0xc3, 0x69, 0x27, 0x24, 0xe9, 0x85, 0x4c, 0x79, 0x1f, 0x69, 0x74, 0xa3, 0x3a, 0x41, 0x19, 0xa4, - 0x7d, 0xcc, 0x61, 0xe8, 0x15, 0x18, 0x0f, 0x09, 0x5b, 0x15, 0x4b, 0x94, 0x95, 0x63, 0xcb, 0x6c, - 0x28, 0xe1, 0xf9, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0xc2, 0xca, 0x0f, 0xf7, 0x60, 0xe5, 0x9f, 0x86, - 0x11, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0x35, 0x5e, 0x8c, 0x25, 0x3c, 0xbd, 0x60, 0x46, 0x07, - 0x5c, 0x30, 0x9f, 0x84, 0xc9, 0xaa, 0x43, 0x76, 0x03, 0x7f, 0xd9, 0x6f, 0xb5, 0x03, 0xd7, 0x8f, - 0xd1, 0x2c, 0x94, 0xd8, 0xed, 0xc0, 0xf7, 0x76, 0x89, 0x52, 0xc0, 0x25, 0xca, 0x98, 0xdb, 0x5b, - 0x70, 0xae, 0x1a, 0xdc, 0xf3, 0xef, 0x39, 0x61, 0x6b, 0xa1, 0x5e, 0xd3, 0xe4, 0xdc, 0x35, 0x29, - 0x67, 0x71, 0x23, 0x96, 0xcc, 0x33, 0x55, 0xab, 0xc9, 0xef, 0xda, 0x15, 0xd7, 0x23, 0x39, 0xda, - 0x88, 0xbf, 0x53, 0x30, 0x5a, 0x4a, 0xf0, 0xd5, 0x83, 0x91, 0x95, 0xfb, 0x60, 0xf4, 0x26, 0x8c, - 0x6e, 0xba, 0xc4, 0x6b, 0x61, 0xb2, 0x29, 0x96, 0xd8, 0x53, 0xf9, 0xef, 0xf2, 0x2b, 0x14, 0x53, - 0x6a, 0x9f, 0xb8, 0x94, 0xb6, 0x22, 0x2a, 0x63, 0x45, 0x06, 0xed, 0xc0, 0xb4, 0x14, 0x03, 0x24, - 0x54, 0x2c, 0xb8, 0xa7, 0x7b, 0xc9, 0x16, 0x26, 0xf1, 0xb3, 0x87, 0x07, 0x95, 0x69, 0x9c, 0x22, - 0x83, 0xbb, 0x08, 0x53, 0xb1, 0x6c, 0x97, 0x1e, 0xad, 0x25, 0x36, 0xfc, 0x4c, 0x2c, 0x63, 0x12, - 0x26, 0x2b, 0xb5, 0x7f, 0xd4, 0x82, 0x47, 0xbb, 0x46, 0x46, 0x48, 0xda, 0x27, 0x3c, 0x0b, 0x69, - 0xc9, 0xb7, 0xd0, 0x5f, 0xf2, 0xb5, 0xff, 0xb1, 0x05, 0x67, 0x97, 0x77, 0xdb, 0xf1, 0x7e, 0xd5, - 0x35, 0x5f, 0x77, 0x5e, 0x86, 0xe1, 0x5d, 0xd2, 0x72, 0x3b, 0xbb, 0x62, 0xe6, 0x2a, 0xf2, 0xf8, - 0x59, 0x65, 0xa5, 0x47, 0x07, 0x95, 0x89, 0x46, 0x1c, 0x84, 0xce, 0x16, 0xe1, 0x05, 0x58, 0xa0, - 0xb3, 0x43, 0xdc, 0x7d, 0x9f, 0xdc, 0x72, 0x77, 0x5d, 0x69, 0x67, 0xd1, 0x53, 0x77, 0x36, 0x2f, - 0x07, 0x74, 0xfe, 0xcd, 0x8e, 0xe3, 0xc7, 0x6e, 0xbc, 0x2f, 0x1e, 0x66, 0x24, 0x11, 0x9c, 0xd0, - 0xb3, 0xbf, 0x69, 0xc1, 0x94, 0x5c, 0xf7, 0x0b, 0xad, 0x56, 0x48, 0xa2, 0x08, 0xcd, 0x41, 0xc1, - 0x6d, 0x8b, 0x5e, 0x82, 0xe8, 0x65, 0xa1, 0x56, 0xc7, 0x05, 0xb7, 0x8d, 0xea, 0x50, 0xe6, 0xe6, - 0x1a, 0xc9, 0xe2, 0x1a, 0xc8, 0xe8, 0x83, 0xf5, 0x60, 0x5d, 0xd6, 0xc4, 0x09, 0x11, 0xc9, 0xc1, - 0xb1, 0x33, 0xb3, 0x68, 0xbe, 0x7a, 0xdd, 0x10, 0xe5, 0x58, 0x61, 0xa0, 0x2b, 0x30, 0xea, 0x07, - 0x2d, 0x6e, 0x3d, 0xc3, 0x6f, 0x3f, 0xb6, 0x64, 0xd7, 0x44, 0x19, 0x56, 0x50, 0xfb, 0x07, 0x2d, - 0x18, 0x97, 0x5f, 0x36, 0x20, 0x33, 0x49, 0xb7, 0x56, 0xc2, 0x48, 0x26, 0x5b, 0x8b, 0x32, 0x83, - 0x0c, 0x62, 0xf0, 0x80, 0xc5, 0xe3, 0xf0, 0x80, 0xf6, 0x8f, 0x14, 0x60, 0x52, 0x76, 0xa7, 0xd1, - 0xd9, 0x88, 0x48, 0x8c, 0xd6, 0xa1, 0xec, 0xf0, 0x21, 0x27, 0x72, 0xc5, 0x3e, 0x99, 0x2d, 0x7c, - 0x18, 0xf3, 0x93, 0x5c, 0xcb, 0x0b, 0xb2, 0x36, 0x4e, 0x08, 0x21, 0x0f, 0x66, 0xfc, 0x20, 0x66, - 0x47, 0xb4, 0x82, 0xf7, 0x7a, 0x02, 0x49, 0x53, 0x3f, 0x2f, 0xa8, 0xcf, 0xac, 0xa5, 0xa9, 0xe0, - 0x6e, 0xc2, 0x68, 0x59, 0x2a, 0x3c, 0x8a, 0xf9, 0xe2, 0x86, 0x3e, 0x0b, 0xd9, 0xfa, 0x0e, 0xfb, - 0x57, 0x2c, 0x28, 0x4b, 0xb4, 0xd3, 0x78, 0xed, 0x5a, 0x85, 0x91, 0x88, 0x4d, 0x82, 0x1c, 0x1a, - 0xbb, 0x57, 0xc7, 0xf9, 0x7c, 0x25, 0x37, 0x0f, 0xff, 0x1f, 0x61, 0x49, 0x83, 0xe9, 0xbb, 0x55, - 0xf7, 0x3f, 0x22, 0xfa, 0x6e, 0xd5, 0x9f, 0x9c, 0x1b, 0xe6, 0xbf, 0xb3, 0x3e, 0x6b, 0x62, 0x2d, - 0x65, 0x90, 0xda, 0x21, 0xd9, 0x74, 0xef, 0xa7, 0x19, 0xa4, 0x3a, 0x2b, 0xc5, 0x02, 0x8a, 0xde, - 0x81, 0xf1, 0xa6, 0x54, 0x74, 0x26, 0xc7, 0xc0, 0xe5, 0x9e, 0x4a, 0x77, 0xf5, 0x3e, 0xc3, 0x2d, - 0x6b, 0x97, 0xb4, 0xfa, 0xd8, 0xa0, 0x66, 0x3e, 0xb7, 0x17, 0xfb, 0x3d, 0xb7, 0x27, 0x74, 0xf3, - 0x1f, 0x9f, 0x7f, 0xcc, 0x82, 0x61, 0xae, 0x2e, 0x1b, 0x4c, 0xbf, 0xa8, 0x3d, 0x57, 0x25, 0x63, - 0x77, 0x97, 0x16, 0x8a, 0xe7, 0x27, 0xb4, 0x0a, 0x65, 0xf6, 0x83, 0xa9, 0x0d, 0x8a, 0xf9, 0x26, - 0xc5, 0xbc, 0x55, 0xbd, 0x83, 0x77, 0x65, 0x35, 0x9c, 0x50, 0xb0, 0xbf, 0x56, 0xa4, 0x47, 0x55, - 0x82, 0x6a, 0xdc, 0xe0, 0xd6, 0xc3, 0xbb, 0xc1, 0x0b, 0x0f, 0xeb, 0x06, 0xdf, 0x82, 0xa9, 0xa6, - 0xf6, 0xb8, 0x95, 0xcc, 0xe4, 0x95, 0x9e, 0x8b, 0x44, 0x7b, 0x07, 0xe3, 0x2a, 0xa3, 0x25, 0x93, - 0x08, 0x4e, 0x53, 0x45, 0xdf, 0x09, 0xe3, 0x7c, 0x9e, 0x45, 0x2b, 0xdc, 0x62, 0xe1, 0x13, 0xf9, - 0xeb, 0x45, 0x6f, 0x82, 0xad, 0xc4, 0x86, 0x56, 0x1d, 0x1b, 0xc4, 0xec, 0x5f, 0x1c, 0x85, 0xa1, - 0xe5, 0x3d, 0xe2, 0xc7, 0xa7, 0x70, 0x20, 0x35, 0x61, 0xd2, 0xf5, 0xf7, 0x02, 0x6f, 0x8f, 0xb4, - 0x38, 0xfc, 0x38, 0x97, 0xeb, 0x23, 0x82, 0xf4, 0x64, 0xcd, 0x20, 0x81, 0x53, 0x24, 0x1f, 0x86, - 0x84, 0x79, 0x1d, 0x86, 0xf9, 0xdc, 0x0b, 0xf1, 0x32, 0x53, 0x19, 0xcc, 0x06, 0x51, 0xec, 0x82, - 0x44, 0xfa, 0xe5, 0xda, 0x67, 0x51, 0x1d, 0xbd, 0x0b, 0x93, 0x9b, 0x6e, 0x18, 0xc5, 0x54, 0x34, - 0x8c, 0x62, 0x67, 0xb7, 0xfd, 0x00, 0x12, 0xa5, 0x1a, 0x87, 0x15, 0x83, 0x12, 0x4e, 0x51, 0x46, - 0x5b, 0x30, 0x41, 0x85, 0x9c, 0xa4, 0xa9, 0x91, 0x63, 0x37, 0xa5, 0x54, 0x46, 0xb7, 0x74, 0x42, - 0xd8, 0xa4, 0x4b, 0x0f, 0x93, 0x26, 0x13, 0x8a, 0x46, 0x19, 0x47, 0xa1, 0x0e, 0x13, 0x2e, 0x0d, - 0x71, 0x18, 0x3d, 0x93, 0x98, 0xd9, 0x4a, 0xd9, 0x3c, 0x93, 0x34, 0xe3, 0x94, 0x2f, 0x41, 0x99, - 0xd0, 0x21, 0xa4, 0x84, 0x85, 0x62, 0xfc, 0xea, 0x60, 0x7d, 0x5d, 0x75, 0x9b, 0x61, 0x60, 0xca, - 0xf2, 0xcb, 0x92, 0x12, 0x4e, 0x88, 0xa2, 0x25, 0x18, 0x8e, 0x48, 0xe8, 0x92, 0x48, 0xa8, 0xc8, - 0x7b, 0x4c, 0x23, 0x43, 0xe3, 0xb6, 0xe7, 0xfc, 0x37, 0x16, 0x55, 0xe9, 0xf2, 0x72, 0x98, 0x34, - 0xc4, 0xb4, 0xe2, 0xda, 0xf2, 0x5a, 0x60, 0xa5, 0x58, 0x40, 0xd1, 0x1b, 0x30, 0x12, 0x12, 0x8f, - 0x29, 0x8b, 0x26, 0x06, 0x5f, 0xe4, 0x5c, 0xf7, 0xc4, 0xeb, 0x61, 0x49, 0x00, 0xdd, 0x04, 0x14, - 0x12, 0xca, 0x43, 0xb8, 0xfe, 0x96, 0x32, 0xe6, 0x10, 0xba, 0xee, 0xc7, 0x44, 0xfb, 0x67, 0x70, - 0x82, 0x21, 0xad, 0x52, 0x71, 0x46, 0x35, 0x74, 0x1d, 0x66, 0x54, 0x69, 0xcd, 0x8f, 0x62, 0xc7, - 0x6f, 0x12, 0xa6, 0xe6, 0x2e, 0x27, 0x5c, 0x11, 0x4e, 0x23, 0xe0, 0xee, 0x3a, 0xf6, 0x4f, 0x53, - 0x76, 0x86, 0x8e, 0xd6, 0x29, 0xf0, 0x02, 0xaf, 0x9b, 0xbc, 0xc0, 0xf9, 0xdc, 0x99, 0xcb, 0xe1, - 0x03, 0x0e, 0x2d, 0x18, 0xd3, 0x66, 0x36, 0x59, 0xb3, 0x56, 0x8f, 0x35, 0xdb, 0x81, 0x69, 0xba, - 0xd2, 0x6f, 0x6f, 0x44, 0x24, 0xdc, 0x23, 0x2d, 0xb6, 0x30, 0x0b, 0x0f, 0xb6, 0x30, 0xd5, 0x2b, - 0xf3, 0xad, 0x14, 0x41, 0xdc, 0xd5, 0x04, 0x7a, 0x59, 0x6a, 0x4e, 0x8a, 0x86, 0x91, 0x16, 0xd7, - 0x8a, 0x1c, 0x1d, 0x54, 0xa6, 0xb5, 0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x97, 0xe4, 0x37, 0xaa, 0xd7, - 0xfc, 0xa6, 0x5a, 0x2c, 0xa9, 0xd7, 0x7c, 0xb5, 0x1c, 0x70, 0x82, 0x43, 0xf7, 0x28, 0x15, 0x41, - 0xd2, 0xaf, 0xf9, 0x54, 0x40, 0xc1, 0x0c, 0x62, 0xbf, 0x00, 0xb0, 0x7c, 0x9f, 0x34, 0xf9, 0x52, - 0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07, 0x48, 0xfb, 0x3f, 0x5a, 0x30, 0xb9, 0xb2, 0x64, 0x88, 0x89, - 0xf3, 0x00, 0x5c, 0x36, 0x7a, 0xeb, 0xad, 0x35, 0xa9, 0x5b, 0xe7, 0xea, 0x51, 0x55, 0x8a, 0x35, - 0x0c, 0x74, 0x1e, 0x8a, 0x5e, 0xc7, 0x17, 0x22, 0xcb, 0xc8, 0xe1, 0x41, 0xa5, 0x78, 0xab, 0xe3, - 0x63, 0x5a, 0xa6, 0x59, 0x08, 0x16, 0x07, 0xb6, 0x10, 0xec, 0xeb, 0x5e, 0x85, 0x2a, 0x30, 0x74, - 0xef, 0x9e, 0xdb, 0xe2, 0x46, 0xec, 0x42, 0xef, 0xff, 0xd6, 0x5b, 0xb5, 0x6a, 0x84, 0x79, 0xb9, - 0xfd, 0xd5, 0x22, 0xcc, 0xad, 0x78, 0xe4, 0xfe, 0x07, 0x34, 0xe4, 0x1f, 0xd4, 0xbe, 0xf1, 0x78, - 0xfc, 0xe2, 0x71, 0x6d, 0x58, 0xfb, 0x8f, 0xc7, 0x26, 0x8c, 0xf0, 0xc7, 0x6c, 0x69, 0xd6, 0xff, - 0x6a, 0x56, 0xeb, 0xf9, 0x03, 0x32, 0xcf, 0x1f, 0xc5, 0x85, 0x39, 0xbf, 0xba, 0x69, 0x45, 0x29, - 0x96, 0xc4, 0xe7, 0x3e, 0x03, 0xe3, 0x3a, 0xe6, 0xb1, 0xac, 0xc9, 0xff, 0x4a, 0x11, 0xa6, 0x69, - 0x0f, 0x1e, 0xea, 0x44, 0xdc, 0xe9, 0x9e, 0x88, 0x93, 0xb6, 0x28, 0xee, 0x3f, 0x1b, 0xef, 0xa4, - 0x67, 0xe3, 0xf9, 0xbc, 0xd9, 0x38, 0xed, 0x39, 0xf8, 0x5e, 0x0b, 0xce, 0xac, 0x78, 0x41, 0x73, - 0x27, 0x65, 0xf5, 0xfb, 0x12, 0x8c, 0xd1, 0x73, 0x3c, 0x32, 0xbc, 0x88, 0x0c, 0xbf, 0x32, 0x01, - 0xc2, 0x3a, 0x9e, 0x56, 0xed, 0xce, 0x9d, 0x5a, 0x35, 0xcb, 0x1d, 0x4d, 0x80, 0xb0, 0x8e, 0x67, - 0x7f, 0xc3, 0x82, 0x0b, 0xd7, 0x97, 0x96, 0x93, 0xa5, 0xd8, 0xe5, 0x11, 0x47, 0xa5, 0xc0, 0x96, - 0xd6, 0x95, 0x44, 0x0a, 0xac, 0xb2, 0x5e, 0x08, 0xe8, 0x47, 0xc5, 0xdb, 0xf3, 0xa7, 0x2c, 0x38, - 0x73, 0xdd, 0x8d, 0xe9, 0xb5, 0x9c, 0xf6, 0xcd, 0xa2, 0xf7, 0x72, 0xe4, 0xc6, 0x41, 0xb8, 0x9f, - 0xf6, 0xcd, 0xc2, 0x0a, 0x82, 0x35, 0x2c, 0xde, 0xf2, 0x9e, 0xcb, 0xcc, 0xa8, 0x0a, 0xa6, 0x2a, - 0x0a, 0x8b, 0x72, 0xac, 0x30, 0xe8, 0x87, 0xb5, 0xdc, 0x90, 0x89, 0x12, 0xfb, 0xe2, 0x84, 0x55, - 0x1f, 0x56, 0x95, 0x00, 0x9c, 0xe0, 0xd8, 0x7f, 0x68, 0x41, 0xe5, 0xba, 0xd7, 0x89, 0x62, 0x12, - 0x6e, 0x46, 0x39, 0xa7, 0xe3, 0x0b, 0x50, 0x26, 0x52, 0x70, 0x17, 0xbd, 0x56, 0xac, 0xa6, 0x92, - 0xe8, 0xb9, 0x8b, 0x98, 0xc2, 0x1b, 0xc0, 0x87, 0xe0, 0x78, 0x46, 0xe0, 0x2b, 0x80, 0x88, 0xde, - 0x96, 0xee, 0x33, 0xc7, 0x9c, 0x6f, 0x96, 0xbb, 0xa0, 0x38, 0xa3, 0x86, 0xfd, 0xa3, 0x16, 0x9c, - 0x53, 0x1f, 0xfc, 0x91, 0xfb, 0x4c, 0xfb, 0xe7, 0x0a, 0x30, 0x71, 0x63, 0x7d, 0xbd, 0x7e, 0x9d, - 0xc4, 0xe2, 0xda, 0xee, 0xaf, 0x5b, 0xc7, 0x9a, 0x8a, 0xb0, 0x97, 0x14, 0xd8, 0x89, 0x5d, 0x6f, - 0x9e, 0xbb, 0x5e, 0xcf, 0xd7, 0xfc, 0xf8, 0x76, 0xd8, 0x88, 0x43, 0xd7, 0xdf, 0xca, 0x54, 0x2a, - 0x4a, 0xe6, 0xa2, 0x98, 0xc7, 0x5c, 0xa0, 0x17, 0x60, 0x98, 0xf9, 0x7e, 0xcb, 0x49, 0x78, 0x4c, - 0x09, 0x51, 0xac, 0xf4, 0xe8, 0xa0, 0x52, 0xbe, 0x83, 0x6b, 0xfc, 0x0f, 0x16, 0xa8, 0xe8, 0x0e, - 0x8c, 0x6d, 0xc7, 0x71, 0xfb, 0x06, 0x71, 0x5a, 0x24, 0x94, 0xc7, 0xe1, 0xc5, 0xac, 0xe3, 0x90, - 0x0e, 0x02, 0x47, 0x4b, 0x4e, 0x90, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d, 0xbb, 0x01, 0x90, 0xc0, 0x4e, - 0x48, 0xa1, 0x62, 0xff, 0xbe, 0x05, 0x23, 0xdc, 0x0d, 0x2f, 0x44, 0xaf, 0x41, 0x89, 0xdc, 0x27, - 0x4d, 0xc1, 0x2a, 0x67, 0x76, 0x38, 0xe1, 0xb4, 0xf8, 0xf3, 0x00, 0xfd, 0x8f, 0x59, 0x2d, 0x74, - 0x03, 0x46, 0x68, 0x6f, 0xaf, 0x2b, 0x9f, 0xc4, 0x27, 0xf2, 0xbe, 0x58, 0x4d, 0x3b, 0x67, 0xce, - 0x44, 0x11, 0x96, 0xd5, 0x99, 0xaa, 0xbb, 0xd9, 0x6e, 0xd0, 0x13, 0x3b, 0xee, 0xc5, 0x58, 0xac, - 0x2f, 0xd5, 0x39, 0x92, 0xa0, 0xc6, 0x55, 0xdd, 0xb2, 0x10, 0x27, 0x44, 0xec, 0x75, 0x28, 0xd3, - 0x49, 0x5d, 0xf0, 0x5c, 0xa7, 0xb7, 0x96, 0xfd, 0x19, 0x28, 0x4b, 0x8d, 0x77, 0x24, 0x3c, 0xb9, - 0x18, 0x55, 0xa9, 0x10, 0x8f, 0x70, 0x02, 0xb7, 0x37, 0xe1, 0x2c, 0x33, 0x75, 0x70, 0xe2, 0x6d, - 0x63, 0x8f, 0xf5, 0x5f, 0xcc, 0xcf, 0x0a, 0xc9, 0x93, 0xcf, 0xcc, 0xac, 0xe6, 0x2c, 0x31, 0x2e, - 0x29, 0x26, 0x52, 0xa8, 0xfd, 0x07, 0x25, 0x78, 0xac, 0xd6, 0xc8, 0xf7, 0xd0, 0x7c, 0x05, 0xc6, - 0x39, 0x5f, 0x4a, 0x97, 0xb6, 0xe3, 0x89, 0x76, 0xd5, 0x43, 0xe0, 0xba, 0x06, 0xc3, 0x06, 0x26, - 0xba, 0x00, 0x45, 0xf7, 0x3d, 0x3f, 0x6d, 0x77, 0x5c, 0x7b, 0x73, 0x0d, 0xd3, 0x72, 0x0a, 0xa6, - 0x2c, 0x2e, 0xbf, 0x3b, 0x14, 0x58, 0xb1, 0xb9, 0xaf, 0xc3, 0xa4, 0x1b, 0x35, 0x23, 0xb7, 0xe6, - 0xd3, 0x73, 0x46, 0x3b, 0xa9, 0x94, 0x56, 0x84, 0x76, 0x5a, 0x41, 0x71, 0x0a, 0x5b, 0xbb, 0xc8, - 0x86, 0x06, 0x66, 0x93, 0xfb, 0xba, 0x36, 0x51, 0x09, 0xa0, 0xcd, 0xbe, 0x2e, 0x62, 0x56, 0x7c, - 0x42, 0x02, 0xe0, 0x1f, 0x1c, 0x61, 0x09, 0xa3, 0x22, 0x67, 0x73, 0xdb, 0x69, 0x2f, 0x74, 0xe2, - 0xed, 0xaa, 0x1b, 0x35, 0x83, 0x3d, 0x12, 0xee, 0x33, 0x6d, 0xc1, 0x68, 0x22, 0x72, 0x2a, 0xc0, - 0xd2, 0x8d, 0x85, 0x3a, 0xc5, 0xc4, 0xdd, 0x75, 0x4c, 0x36, 0x18, 0x4e, 0x82, 0x0d, 0x5e, 0x80, - 0x29, 0xd9, 0x4c, 0x83, 0x44, 0xec, 0x52, 0x1c, 0x63, 0x1d, 0x53, 0xb6, 0xc5, 0xa2, 0x58, 0x75, - 0x2b, 0x8d, 0x8f, 0x5e, 0x86, 0x09, 0xd7, 0x77, 0x63, 0xd7, 0x89, 0x83, 0x90, 0xb1, 0x14, 0x5c, - 0x31, 0xc0, 0x4c, 0xf7, 0x6a, 0x3a, 0x00, 0x9b, 0x78, 0xf6, 0x7f, 0x2d, 0xc1, 0x0c, 0x9b, 0xb6, - 0x6f, 0xad, 0xb0, 0x8f, 0xcc, 0x0a, 0xbb, 0xd3, 0xbd, 0xc2, 0x4e, 0x82, 0xbf, 0xff, 0x30, 0x97, - 0xd9, 0xbb, 0x50, 0x56, 0xc6, 0xcf, 0xd2, 0xfb, 0xc1, 0xca, 0xf1, 0x7e, 0xe8, 0xcf, 0x7d, 0xc8, - 0x77, 0xeb, 0x62, 0xe6, 0xbb, 0xf5, 0xdf, 0xb3, 0x20, 0xb1, 0x01, 0x45, 0x37, 0xa0, 0xdc, 0x0e, - 0x98, 0x9d, 0x45, 0x28, 0x8d, 0x97, 0x1e, 0xcb, 0xbc, 0xa8, 0xf8, 0xa5, 0xc8, 0xc7, 0xaf, 0x2e, - 0x6b, 0xe0, 0xa4, 0x32, 0x5a, 0x84, 0x91, 0x76, 0x48, 0x1a, 0x31, 0xf3, 0xf9, 0xed, 0x4b, 0x87, - 0xaf, 0x11, 0x8e, 0x8f, 0x65, 0x45, 0xfb, 0xe7, 0x2d, 0x00, 0xfe, 0x34, 0xec, 0xf8, 0x5b, 0xe4, - 0x14, 0xd4, 0xdd, 0x55, 0x28, 0x45, 0x6d, 0xd2, 0xec, 0x65, 0x01, 0x93, 0xf4, 0xa7, 0xd1, 0x26, - 0xcd, 0x64, 0xc0, 0xe9, 0x3f, 0xcc, 0x6a, 0xdb, 0xdf, 0x07, 0x30, 0x99, 0xa0, 0xd5, 0x62, 0xb2, - 0x8b, 0x9e, 0x33, 0x7c, 0x00, 0xcf, 0xa7, 0x7c, 0x00, 0xcb, 0x0c, 0x5b, 0xd3, 0xac, 0xbe, 0x0b, - 0xc5, 0x5d, 0xe7, 0xbe, 0x50, 0x9d, 0x3d, 0xd3, 0xbb, 0x1b, 0x94, 0xfe, 0xfc, 0xaa, 0x73, 0x9f, - 0x0b, 0x89, 0xcf, 0xc8, 0x05, 0xb2, 0xea, 0xdc, 0x3f, 0xe2, 0x76, 0x2e, 0xec, 0x90, 0xba, 0xe5, - 0x46, 0xf1, 0x97, 0xff, 0x4b, 0xf2, 0x9f, 0x2d, 0x3b, 0xda, 0x08, 0x6b, 0xcb, 0xf5, 0xc5, 0x43, - 0xe9, 0x40, 0x6d, 0xb9, 0x7e, 0xba, 0x2d, 0xd7, 0x1f, 0xa0, 0x2d, 0xd7, 0x47, 0xef, 0xc3, 0x88, - 0x30, 0x4a, 0x60, 0xc6, 0xed, 0xa6, 0x5a, 0x2e, 0xaf, 0x3d, 0x61, 0xd3, 0xc0, 0xdb, 0xbc, 0x2a, - 0x85, 0x60, 0x51, 0xda, 0xb7, 0x5d, 0xd9, 0x20, 0xfa, 0xdb, 0x16, 0x4c, 0x8a, 0xdf, 0x98, 0xbc, - 0xd7, 0x21, 0x51, 0x2c, 0x78, 0xcf, 0x4f, 0x0f, 0xde, 0x07, 0x51, 0x91, 0x77, 0xe5, 0xd3, 0xf2, - 0x98, 0x35, 0x81, 0x7d, 0x7b, 0x94, 0xea, 0x05, 0xfa, 0xa7, 0x16, 0x9c, 0xdd, 0x75, 0xee, 0xf3, - 0x16, 0x79, 0x19, 0x76, 0x62, 0x37, 0x10, 0xc6, 0xfa, 0xaf, 0x0d, 0x36, 0xfd, 0x5d, 0xd5, 0x79, - 0x27, 0xa5, 0x5d, 0xef, 0xd9, 0x2c, 0x94, 0xbe, 0x5d, 0xcd, 0xec, 0xd7, 0xdc, 0x26, 0x8c, 0xca, - 0xf5, 0x96, 0xa1, 0x6a, 0xa8, 0xea, 0x8c, 0xf5, 0xb1, 0x6d, 0x42, 0x74, 0x47, 0x3c, 0xda, 0x8e, - 0x58, 0x6b, 0x0f, 0xb5, 0x9d, 0x77, 0x61, 0x5c, 0x5f, 0x63, 0x0f, 0xb5, 0xad, 0xf7, 0xe0, 0x4c, - 0xc6, 0x5a, 0x7a, 0xa8, 0x4d, 0xde, 0x83, 0xf3, 0xb9, 0xeb, 0xe3, 0x61, 0x36, 0x6c, 0xff, 0x9c, - 0xa5, 0x9f, 0x83, 0xa7, 0xf0, 0xe6, 0xb0, 0x64, 0xbe, 0x39, 0x5c, 0xec, 0xbd, 0x73, 0x72, 0x1e, - 0x1e, 0xde, 0xd1, 0x3b, 0x4d, 0x4f, 0x75, 0xf4, 0x06, 0x0c, 0x7b, 0xb4, 0x44, 0x5a, 0xc3, 0xd8, - 0xfd, 0x77, 0x64, 0xc2, 0x4b, 0xb1, 0xf2, 0x08, 0x0b, 0x0a, 0xf6, 0x2f, 0x59, 0x50, 0x3a, 0x85, - 0x91, 0xc0, 0xe6, 0x48, 0x3c, 0x97, 0x4b, 0x5a, 0xc4, 0x70, 0x9b, 0xc7, 0xce, 0xbd, 0xe5, 0xfb, - 0x31, 0xf1, 0x23, 0x26, 0x2a, 0x66, 0x0e, 0xcc, 0x77, 0xc1, 0x99, 0x5b, 0x81, 0xd3, 0x5a, 0x74, - 0x3c, 0xc7, 0x6f, 0x92, 0xb0, 0xe6, 0x6f, 0xf5, 0x35, 0xcb, 0xd2, 0x8d, 0xa8, 0x0a, 0xfd, 0x8c, - 0xa8, 0xec, 0x6d, 0x40, 0x7a, 0x03, 0xc2, 0x70, 0x15, 0xc3, 0x88, 0xcb, 0x9b, 0x12, 0xc3, 0xff, - 0x54, 0x36, 0x77, 0xd7, 0xd5, 0x33, 0xcd, 0x24, 0x93, 0x17, 0x60, 0x49, 0xc8, 0x7e, 0x05, 0x32, - 0x9d, 0xd5, 0xfa, 0xab, 0x0d, 0xec, 0xcf, 0xc3, 0x0c, 0xab, 0x79, 0x4c, 0x91, 0xd6, 0x4e, 0x69, - 0x25, 0x33, 0x62, 0x64, 0xd9, 0x5f, 0xb1, 0x60, 0x6a, 0x2d, 0x15, 0xb0, 0xe3, 0x32, 0x7b, 0x00, - 0xcd, 0x50, 0x86, 0x37, 0x58, 0x29, 0x16, 0xd0, 0x13, 0xd7, 0x41, 0xfd, 0x99, 0x05, 0x89, 0xff, - 0xe8, 0x29, 0x30, 0x5e, 0x4b, 0x06, 0xe3, 0x95, 0xa9, 0x1b, 0x51, 0xdd, 0xc9, 0xe3, 0xbb, 0xd0, - 0x4d, 0x15, 0x2c, 0xa1, 0x87, 0x5a, 0x24, 0x21, 0xc3, 0x5d, 0xeb, 0x27, 0xcd, 0x88, 0x0a, 0x32, - 0x7c, 0x02, 0xb3, 0x9d, 0x52, 0xb8, 0x1f, 0x11, 0xdb, 0x29, 0xd5, 0x9f, 0x9c, 0x1d, 0x5a, 0xd7, - 0xba, 0xcc, 0x4e, 0xae, 0x6f, 0x67, 0xb6, 0xf0, 0x8e, 0xe7, 0xbe, 0x4f, 0x54, 0xc4, 0x97, 0x8a, - 0xb0, 0x6d, 0x17, 0xa5, 0x47, 0x07, 0x95, 0x09, 0xf5, 0x8f, 0x87, 0x05, 0x4b, 0xaa, 0xd8, 0x37, - 0x60, 0x2a, 0x35, 0x60, 0xe8, 0x25, 0x18, 0x6a, 0x6f, 0x3b, 0x11, 0x49, 0xd9, 0x8b, 0x0e, 0xd5, - 0x69, 0xe1, 0xd1, 0x41, 0x65, 0x52, 0x55, 0x60, 0x25, 0x98, 0x63, 0xdb, 0xff, 0xd3, 0x82, 0xd2, - 0x5a, 0xd0, 0x3a, 0x8d, 0xc5, 0xf4, 0xba, 0xb1, 0x98, 0x1e, 0xcf, 0x0b, 0xaa, 0x98, 0xbb, 0x8e, - 0x56, 0x52, 0xeb, 0xe8, 0x62, 0x2e, 0x85, 0xde, 0x4b, 0x68, 0x17, 0xc6, 0x58, 0xa8, 0x46, 0x61, - 0xbf, 0xfa, 0x82, 0x21, 0x03, 0x54, 0x52, 0x32, 0xc0, 0x94, 0x86, 0xaa, 0x49, 0x02, 0x4f, 0xc3, - 0x88, 0xb0, 0xa1, 0x4c, 0x5b, 0xfd, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x8f, 0x15, 0xc1, 0x08, 0x0d, - 0x89, 0x7e, 0xc5, 0x82, 0xf9, 0x90, 0xbb, 0x51, 0xb6, 0xaa, 0x9d, 0xd0, 0xf5, 0xb7, 0x1a, 0xcd, - 0x6d, 0xd2, 0xea, 0x78, 0xae, 0xbf, 0x55, 0xdb, 0xf2, 0x03, 0x55, 0xbc, 0x7c, 0x9f, 0x34, 0x3b, - 0xec, 0x21, 0xa4, 0x4f, 0x1c, 0x4a, 0x65, 0xa3, 0x74, 0xed, 0xf0, 0xa0, 0x32, 0x8f, 0x8f, 0x45, - 0x1b, 0x1f, 0xb3, 0x2f, 0xe8, 0x1b, 0x16, 0x5c, 0xe5, 0x11, 0x13, 0x07, 0xef, 0x7f, 0x0f, 0x89, - 0xa9, 0x2e, 0x49, 0x25, 0x44, 0xd6, 0x49, 0xb8, 0xbb, 0xf8, 0xb2, 0x18, 0xd0, 0xab, 0xf5, 0xe3, - 0xb5, 0x85, 0x8f, 0xdb, 0x39, 0xfb, 0xdf, 0x14, 0x61, 0x42, 0x78, 0xf0, 0x8b, 0xd0, 0x30, 0x2f, - 0x19, 0x4b, 0xe2, 0x89, 0xd4, 0x92, 0x98, 0x31, 0x90, 0x4f, 0x26, 0x2a, 0x4c, 0x04, 0x33, 0x9e, - 0x13, 0xc5, 0x37, 0x88, 0x13, 0xc6, 0x1b, 0xc4, 0xe1, 0xb6, 0x3b, 0xc5, 0x63, 0xdb, 0x19, 0x29, - 0x15, 0xcd, 0xad, 0x34, 0x31, 0xdc, 0x4d, 0x1f, 0xed, 0x01, 0x62, 0x06, 0x48, 0xa1, 0xe3, 0x47, - 0xfc, 0x5b, 0x5c, 0xf1, 0x66, 0x70, 0xbc, 0x56, 0xe7, 0x44, 0xab, 0xe8, 0x56, 0x17, 0x35, 0x9c, - 0xd1, 0x82, 0x66, 0x58, 0x36, 0x34, 0xa8, 0x61, 0xd9, 0x70, 0x1f, 0xd7, 0x1a, 0x1f, 0xa6, 0xbb, - 0x82, 0x30, 0xbc, 0x0d, 0x65, 0x65, 0x00, 0x28, 0x0e, 0x9d, 0xde, 0xb1, 0x4c, 0xd2, 0x14, 0xb8, - 0x1a, 0x25, 0x31, 0x3e, 0x4d, 0xc8, 0xd9, 0xff, 0xac, 0x60, 0x34, 0xc8, 0x27, 0x71, 0x0d, 0x46, - 0x9d, 0x28, 0x72, 0xb7, 0x7c, 0xd2, 0x12, 0x3b, 0xf6, 0xe3, 0x79, 0x3b, 0xd6, 0x68, 0x86, 0x19, - 0x61, 0x2e, 0x88, 0x9a, 0x58, 0xd1, 0x40, 0x37, 0xb8, 0x85, 0xd4, 0x9e, 0xe4, 0xf9, 0x07, 0xa3, - 0x06, 0xd2, 0x86, 0x6a, 0x8f, 0x60, 0x51, 0x1f, 0x7d, 0x81, 0x9b, 0xb0, 0xdd, 0xf4, 0x83, 0x7b, - 0xfe, 0xf5, 0x20, 0x90, 0x6e, 0x77, 0x83, 0x11, 0x9c, 0x91, 0x86, 0x6b, 0xaa, 0x3a, 0x36, 0xa9, - 0x0d, 0x16, 0xa8, 0xe8, 0xbb, 0xe1, 0x0c, 0x25, 0x6d, 0x3a, 0xcf, 0x44, 0x88, 0xc0, 0x94, 0x08, - 0x0f, 0x21, 0xcb, 0xc4, 0xd8, 0x65, 0xb2, 0xf3, 0x66, 0xed, 0x44, 0xe9, 0x77, 0xd3, 0x24, 0x81, - 0xd3, 0x34, 0xed, 0x9f, 0xb4, 0x80, 0x99, 0xfd, 0x9f, 0x02, 0xcb, 0xf0, 0x59, 0x93, 0x65, 0x98, - 0xcd, 0x1b, 0xe4, 0x1c, 0x6e, 0xe1, 0x45, 0xbe, 0xb2, 0xea, 0x61, 0x70, 0x7f, 0x5f, 0x98, 0x0f, - 0xf4, 0xe7, 0x64, 0xed, 0xff, 0x6b, 0xf1, 0x43, 0x4c, 0x79, 0xe2, 0xa3, 0xef, 0x81, 0xd1, 0xa6, - 0xd3, 0x76, 0x9a, 0x3c, 0x8e, 0x71, 0xae, 0x56, 0xc7, 0xa8, 0x34, 0xbf, 0x24, 0x6a, 0x70, 0x2d, - 0x85, 0x0c, 0x33, 0x32, 0x2a, 0x8b, 0xfb, 0x6a, 0x26, 0x54, 0x93, 0x73, 0x3b, 0x30, 0x61, 0x10, - 0x7b, 0xa8, 0x22, 0xed, 0xf7, 0xf0, 0x2b, 0x56, 0x85, 0xc5, 0xd9, 0x85, 0x19, 0x5f, 0xfb, 0x4f, - 0x2f, 0x14, 0x29, 0xa6, 0x7c, 0xbc, 0xdf, 0x25, 0xca, 0x6e, 0x1f, 0xcd, 0xad, 0x21, 0x45, 0x06, - 0x77, 0x53, 0xb6, 0x7f, 0xdc, 0x82, 0x47, 0x75, 0x44, 0x2d, 0x48, 0x42, 0x3f, 0x3d, 0x71, 0x15, - 0x46, 0x83, 0x36, 0x09, 0x9d, 0x38, 0x08, 0xc5, 0xad, 0x71, 0x45, 0x0e, 0xfa, 0x6d, 0x51, 0x7e, - 0x24, 0x02, 0x4a, 0x4a, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0x54, 0x8e, 0x61, 0x83, 0x11, 0x89, 0x00, - 0x16, 0xec, 0x0c, 0x60, 0x4f, 0xa6, 0x11, 0x16, 0x10, 0xfb, 0x0f, 0x2c, 0xbe, 0xb0, 0xf4, 0xae, - 0xa3, 0xf7, 0x60, 0x7a, 0xd7, 0x89, 0x9b, 0xdb, 0xcb, 0xf7, 0xdb, 0x21, 0x57, 0x8f, 0xcb, 0x71, - 0x7a, 0xa6, 0xdf, 0x38, 0x69, 0x1f, 0x99, 0x58, 0xe5, 0xad, 0xa6, 0x88, 0xe1, 0x2e, 0xf2, 0x68, - 0x03, 0xc6, 0x58, 0x19, 0x33, 0xff, 0x8e, 0x7a, 0xb1, 0x06, 0x79, 0xad, 0xa9, 0x57, 0xe7, 0xd5, - 0x84, 0x0e, 0xd6, 0x89, 0xda, 0x5f, 0x2e, 0xf2, 0xdd, 0xce, 0xb8, 0xed, 0xa7, 0x61, 0xa4, 0x1d, - 0xb4, 0x96, 0x6a, 0x55, 0x2c, 0x66, 0x41, 0x5d, 0x23, 0x75, 0x5e, 0x8c, 0x25, 0x1c, 0xbd, 0x0a, - 0x40, 0xee, 0xc7, 0x24, 0xf4, 0x1d, 0x4f, 0x59, 0xc9, 0x28, 0xbb, 0xd0, 0x6a, 0xb0, 0x16, 0xc4, - 0x77, 0x22, 0xf2, 0x5d, 0xcb, 0x0a, 0x05, 0x6b, 0xe8, 0xe8, 0x1a, 0x40, 0x3b, 0x0c, 0xf6, 0xdc, - 0x16, 0xf3, 0x27, 0x2c, 0x9a, 0x36, 0x24, 0x75, 0x05, 0xc1, 0x1a, 0x16, 0x7a, 0x15, 0x26, 0x3a, - 0x7e, 0xc4, 0x39, 0x14, 0x67, 0x43, 0x84, 0x63, 0x1c, 0x4d, 0xac, 0x1b, 0xee, 0xe8, 0x40, 0x6c, - 0xe2, 0xa2, 0x05, 0x18, 0x8e, 0x1d, 0x66, 0x13, 0x31, 0x94, 0x6f, 0xcc, 0xb9, 0x4e, 0x31, 0xf4, - 0x28, 0xba, 0xb4, 0x02, 0x16, 0x15, 0xd1, 0xdb, 0xd2, 0x39, 0x83, 0x9f, 0xf5, 0xc2, 0x8a, 0x7a, - 0xb0, 0x7b, 0x41, 0x73, 0xcd, 0x10, 0xd6, 0xd9, 0x06, 0x2d, 0xfb, 0x1b, 0x65, 0x80, 0x84, 0x1d, - 0x47, 0xef, 0x77, 0x9d, 0x47, 0xcf, 0xf6, 0x66, 0xe0, 0x4f, 0xee, 0x30, 0x42, 0xdf, 0x6f, 0xc1, - 0x98, 0xe3, 0x79, 0x41, 0xd3, 0x89, 0xd9, 0x28, 0x17, 0x7a, 0x9f, 0x87, 0xa2, 0xfd, 0x85, 0xa4, - 0x06, 0xef, 0xc2, 0x0b, 0x72, 0xe1, 0x69, 0x90, 0xbe, 0xbd, 0xd0, 0x1b, 0x46, 0x9f, 0x92, 0x52, - 0x1a, 0x5f, 0x1e, 0x73, 0x69, 0x29, 0xad, 0xcc, 0x8e, 0x7e, 0x4d, 0x40, 0x43, 0x77, 0x8c, 0x48, - 0x7b, 0xa5, 0xfc, 0xa0, 0x13, 0x06, 0x57, 0xda, 0x2f, 0xc8, 0x1e, 0xaa, 0xeb, 0xde, 0x64, 0x43, - 0xf9, 0x91, 0x59, 0x34, 0xf1, 0xa7, 0x8f, 0x27, 0xd9, 0xbb, 0x30, 0xd5, 0x32, 0xef, 0x76, 0xb1, - 0x9a, 0x9e, 0xca, 0xa3, 0x9b, 0x62, 0x05, 0x92, 0xdb, 0x3c, 0x05, 0xc0, 0x69, 0xc2, 0xa8, 0xce, - 0xfd, 0xfa, 0x6a, 0xfe, 0x66, 0x20, 0xac, 0xf1, 0xed, 0xdc, 0xb9, 0xdc, 0x8f, 0x62, 0xb2, 0x4b, - 0x31, 0x93, 0x4b, 0x7b, 0x4d, 0xd4, 0xc5, 0x8a, 0x0a, 0x7a, 0x03, 0x86, 0x99, 0x63, 0x70, 0x34, - 0x3b, 0x9a, 0xaf, 0x4c, 0x34, 0x63, 0x5a, 0x24, 0x9b, 0x8a, 0xfd, 0x8d, 0xb0, 0xa0, 0x80, 0x6e, - 0xc8, 0xc0, 0x37, 0x51, 0xcd, 0xbf, 0x13, 0x11, 0x16, 0xf8, 0xa6, 0xbc, 0xf8, 0xf1, 0x24, 0xa6, - 0x0d, 0x2f, 0xcf, 0x8c, 0x97, 0x6f, 0xd4, 0xa4, 0xcc, 0x91, 0xf8, 0x2f, 0xc3, 0xf0, 0xcf, 0x42, - 0x7e, 0xf7, 0xcc, 0x50, 0xfd, 0xc9, 0x70, 0xde, 0x35, 0x49, 0xe0, 0x34, 0x4d, 0xca, 0x68, 0xf2, - 0x9d, 0x2b, 0xec, 0xf9, 0xfb, 0xed, 0x7f, 0x2e, 0x5f, 0xb3, 0x4b, 0x86, 0x97, 0x60, 0x51, 0xff, - 0x54, 0x6f, 0xfd, 0x39, 0x1f, 0xa6, 0xd3, 0x5b, 0xf4, 0xa1, 0x72, 0x19, 0xbf, 0x5f, 0x82, 0x49, - 0x73, 0x49, 0xa1, 0xab, 0x50, 0x16, 0x44, 0x54, 0x14, 0x56, 0xb5, 0x4b, 0x56, 0x25, 0x00, 0x27, - 0x38, 0x2c, 0xf8, 0x2e, 0xab, 0xae, 0xd9, 0x61, 0x26, 0xc1, 0x77, 0x15, 0x04, 0x6b, 0x58, 0x54, - 0x5e, 0xda, 0x08, 0x82, 0x58, 0x5d, 0x2a, 0x6a, 0xdd, 0x2d, 0xb2, 0x52, 0x2c, 0xa0, 0xf4, 0x32, - 0xd9, 0x21, 0xa1, 0x4f, 0x3c, 0x33, 0xb8, 0x9b, 0xba, 0x4c, 0x6e, 0xea, 0x40, 0x6c, 0xe2, 0xd2, - 0x5b, 0x32, 0x88, 0xd8, 0x42, 0x16, 0x52, 0x59, 0x62, 0xd7, 0xda, 0xe0, 0x2e, 0xf6, 0x12, 0x8e, - 0x3e, 0x0f, 0x8f, 0x2a, 0x8f, 0x78, 0xcc, 0x15, 0xd5, 0xb2, 0xc5, 0x61, 0x43, 0x89, 0xf2, 0xe8, - 0x52, 0x36, 0x1a, 0xce, 0xab, 0x8f, 0x5e, 0x87, 0x49, 0xc1, 0xb9, 0x4b, 0x8a, 0x23, 0xa6, 0xed, - 0xc4, 0x4d, 0x03, 0x8a, 0x53, 0xd8, 0x32, 0x3c, 0x1d, 0x63, 0x9e, 0x25, 0x85, 0xd1, 0xee, 0xf0, - 0x74, 0x3a, 0x1c, 0x77, 0xd5, 0x40, 0x0b, 0x30, 0xc5, 0x59, 0x2b, 0xd7, 0xdf, 0xe2, 0x73, 0x22, - 0xdc, 0x6d, 0xd4, 0x96, 0xba, 0x6d, 0x82, 0x71, 0x1a, 0x1f, 0xbd, 0x02, 0xe3, 0x4e, 0xd8, 0xdc, - 0x76, 0x63, 0xd2, 0x8c, 0x3b, 0x21, 0xf7, 0xc3, 0xd1, 0x8c, 0x4f, 0x16, 0x34, 0x18, 0x36, 0x30, - 0xed, 0xf7, 0xe1, 0x4c, 0x86, 0xa7, 0x1e, 0x5d, 0x38, 0x4e, 0xdb, 0x95, 0xdf, 0x94, 0xb2, 0x50, - 0x5d, 0xa8, 0xd7, 0xe4, 0xd7, 0x68, 0x58, 0x74, 0x75, 0x32, 0x8f, 0x3e, 0x2d, 0xeb, 0x86, 0x5a, - 0x9d, 0x2b, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0x7f, 0x15, 0x60, 0x2a, 0x43, 0xf9, 0xce, 0x32, 0x3f, - 0xa4, 0x64, 0x8f, 0x24, 0xd1, 0x83, 0x19, 0xed, 0xb0, 0x70, 0x8c, 0x68, 0x87, 0xc5, 0x7e, 0xd1, - 0x0e, 0x4b, 0x1f, 0x24, 0xda, 0xa1, 0x39, 0x62, 0x43, 0x03, 0x8d, 0x58, 0x46, 0x84, 0xc4, 0xe1, - 0x63, 0x46, 0x48, 0x34, 0x06, 0x7d, 0x64, 0x80, 0x41, 0xff, 0x5a, 0x01, 0xa6, 0xd3, 0x46, 0x72, - 0xa7, 0xa0, 0x8e, 0x7d, 0xc3, 0x50, 0xc7, 0x66, 0xe7, 0x51, 0x49, 0x9b, 0xee, 0xe5, 0xa9, 0x66, - 0x71, 0x4a, 0x35, 0xfb, 0xc9, 0x81, 0xa8, 0xf5, 0x56, 0xd3, 0xfe, 0x83, 0x02, 0x9c, 0x4b, 0x57, - 0x59, 0xf2, 0x1c, 0x77, 0xf7, 0x14, 0xc6, 0xe6, 0xb6, 0x31, 0x36, 0xcf, 0x0d, 0xf2, 0x35, 0xac, - 0x6b, 0xb9, 0x03, 0xf4, 0x56, 0x6a, 0x80, 0xae, 0x0e, 0x4e, 0xb2, 0xf7, 0x28, 0x7d, 0xb3, 0x08, - 0x17, 0x33, 0xeb, 0x25, 0xda, 0xcc, 0x15, 0x43, 0x9b, 0x79, 0x2d, 0xa5, 0xcd, 0xb4, 0x7b, 0xd7, - 0x3e, 0x19, 0xf5, 0xa6, 0x70, 0xa1, 0x64, 0x11, 0xf1, 0x1e, 0x50, 0xb5, 0x69, 0xb8, 0x50, 0x2a, - 0x42, 0xd8, 0xa4, 0xfb, 0x17, 0x49, 0xa5, 0xf9, 0xef, 0x2c, 0x38, 0x9f, 0x39, 0x37, 0xa7, 0xa0, - 0xc2, 0x5a, 0x33, 0x55, 0x58, 0x4f, 0x0f, 0xbc, 0x5a, 0x73, 0x74, 0x5a, 0xbf, 0x51, 0xca, 0xf9, - 0x16, 0x26, 0xa0, 0xdf, 0x86, 0x31, 0xa7, 0xd9, 0x24, 0x51, 0xb4, 0x1a, 0xb4, 0x54, 0x84, 0xb8, - 0xe7, 0x98, 0x9c, 0x95, 0x14, 0x1f, 0x1d, 0x54, 0xe6, 0xd2, 0x24, 0x12, 0x30, 0xd6, 0x29, 0x98, - 0x41, 0x2d, 0x0b, 0x27, 0x1a, 0xd4, 0xf2, 0x1a, 0xc0, 0x9e, 0xe2, 0xd6, 0xd3, 0x42, 0xbe, 0xc6, - 0xc7, 0x6b, 0x58, 0xe8, 0x0b, 0x30, 0x1a, 0x89, 0x6b, 0x5c, 0x2c, 0xc5, 0x17, 0x06, 0x9c, 0x2b, - 0x67, 0x83, 0x78, 0xa6, 0xaf, 0xbe, 0xd2, 0x87, 0x28, 0x92, 0xe8, 0x3b, 0x60, 0x3a, 0xe2, 0xa1, - 0x60, 0x96, 0x3c, 0x27, 0x62, 0x7e, 0x10, 0x62, 0x15, 0x32, 0x07, 0xfc, 0x46, 0x0a, 0x86, 0xbb, - 0xb0, 0xd1, 0x8a, 0xfc, 0x28, 0x16, 0xb7, 0x86, 0x2f, 0xcc, 0xcb, 0xc9, 0x07, 0x89, 0xbc, 0x53, - 0x67, 0xd3, 0xc3, 0xcf, 0x06, 0x5e, 0xab, 0x89, 0xbe, 0x00, 0x40, 0x97, 0x8f, 0xd0, 0x25, 0x8c, - 0xe4, 0x1f, 0x9e, 0xf4, 0x54, 0x69, 0x65, 0x5a, 0x7e, 0x32, 0xe7, 0xc5, 0xaa, 0x22, 0x82, 0x35, - 0x82, 0xf6, 0xd7, 0x4a, 0xf0, 0x58, 0x8f, 0x33, 0x12, 0x2d, 0x98, 0x4f, 0xa0, 0xcf, 0xa4, 0x85, - 0xeb, 0xb9, 0xcc, 0xca, 0x86, 0xb4, 0x9d, 0x5a, 0x8a, 0x85, 0x0f, 0xbc, 0x14, 0x7f, 0xc0, 0xd2, - 0xd4, 0x1e, 0xdc, 0x98, 0xef, 0xb3, 0xc7, 0x3c, 0xfb, 0x4f, 0x50, 0x0f, 0xb2, 0x99, 0xa1, 0x4c, - 0xb8, 0x36, 0x70, 0x77, 0x06, 0xd6, 0x2e, 0x9c, 0xae, 0xf2, 0xf7, 0xcb, 0x16, 0x3c, 0x91, 0xd9, - 0x5f, 0xc3, 0x64, 0xe3, 0x2a, 0x94, 0x9b, 0xb4, 0x50, 0xf3, 0x55, 0x4b, 0x9c, 0x78, 0x25, 0x00, - 0x27, 0x38, 0x86, 0x65, 0x46, 0xa1, 0xaf, 0x65, 0xc6, 0xbf, 0xb6, 0xa0, 0x6b, 0x7f, 0x9c, 0xc2, - 0x41, 0x5d, 0x33, 0x0f, 0xea, 0x8f, 0x0f, 0x32, 0x97, 0x39, 0x67, 0xf4, 0x1f, 0x4d, 0xc1, 0x23, - 0x39, 0xbe, 0x1a, 0x7b, 0x30, 0xb3, 0xd5, 0x24, 0xa6, 0x17, 0xa0, 0xf8, 0x98, 0x4c, 0x87, 0xc9, - 0x9e, 0x2e, 0x83, 0x2c, 0x1f, 0xd1, 0x4c, 0x17, 0x0a, 0xee, 0x6e, 0x02, 0x7d, 0xd9, 0x82, 0xb3, - 0xce, 0xbd, 0xa8, 0x2b, 0xeb, 0xa4, 0x58, 0x33, 0x2f, 0x66, 0x2a, 0x41, 0xfa, 0x64, 0xa9, 0xe4, - 0x09, 0x9a, 0xb2, 0xb0, 0x70, 0x66, 0x5b, 0x08, 0x8b, 0x98, 0xa1, 0x94, 0x9d, 0xef, 0xe1, 0xa7, - 0x9a, 0xe5, 0x54, 0xc3, 0x8f, 0x6c, 0x09, 0xc1, 0x8a, 0x0e, 0xfa, 0x12, 0x94, 0xb7, 0xa4, 0xa7, - 0x5b, 0xc6, 0x95, 0x90, 0x0c, 0x64, 0x6f, 0xff, 0x3f, 0xfe, 0x40, 0xa9, 0x90, 0x70, 0x42, 0x14, - 0xbd, 0x0e, 0x45, 0x7f, 0x33, 0xea, 0x95, 0xe3, 0x28, 0x65, 0xd3, 0xc4, 0xbd, 0xc1, 0xd7, 0x56, - 0x1a, 0x98, 0x56, 0x44, 0x37, 0xa0, 0x18, 0x6e, 0xb4, 0x84, 0x06, 0x2f, 0xf3, 0x0c, 0xc7, 0x8b, - 0xd5, 0x9c, 0x5e, 0x31, 0x4a, 0x78, 0xb1, 0x8a, 0x29, 0x09, 0x54, 0x87, 0x21, 0xe6, 0xe0, 0x20, - 0xee, 0x83, 0x4c, 0xce, 0xb7, 0x87, 0xa3, 0x10, 0x77, 0x19, 0x67, 0x08, 0x98, 0x13, 0x42, 0xeb, - 0x30, 0xdc, 0x64, 0xf9, 0x70, 0x44, 0xc0, 0xea, 0x4f, 0x65, 0xea, 0xea, 0x7a, 0x24, 0x0a, 0x12, - 0xaa, 0x2b, 0x86, 0x81, 0x05, 0x2d, 0x46, 0x95, 0xb4, 0xb7, 0x37, 0x23, 0x26, 0xeb, 0xe7, 0x51, - 0xed, 0x91, 0xff, 0x4a, 0x50, 0x65, 0x18, 0x58, 0xd0, 0x42, 0x9f, 0x81, 0xc2, 0x66, 0x53, 0xf8, - 0x3f, 0x64, 0x2a, 0xed, 0x4c, 0x87, 0xfe, 0xc5, 0xe1, 0xc3, 0x83, 0x4a, 0x61, 0x65, 0x09, 0x17, - 0x36, 0x9b, 0x68, 0x0d, 0x46, 0x36, 0xb9, 0x0b, 0xb0, 0xd0, 0xcb, 0x3d, 0x95, 0xed, 0x9d, 0xdc, - 0xe5, 0x25, 0xcc, 0xed, 0xf6, 0x05, 0x00, 0x4b, 0x22, 0x2c, 0x04, 0xa7, 0x72, 0x65, 0x16, 0xb1, - 0xa8, 0xe7, 0x8f, 0xe7, 0x7e, 0xce, 0xef, 0xe7, 0xc4, 0x21, 0x1a, 0x6b, 0x14, 0xe9, 0xaa, 0x76, - 0x64, 0xe6, 0x43, 0x11, 0xab, 0x23, 0x73, 0x55, 0xf7, 0x49, 0x0a, 0xc9, 0x57, 0xb5, 0x42, 0xc2, - 0x09, 0x51, 0xb4, 0x03, 0x13, 0x7b, 0x51, 0x7b, 0x9b, 0xc8, 0x2d, 0xcd, 0x42, 0x77, 0xe4, 0x5c, - 0x61, 0x77, 0x05, 0xa2, 0x1b, 0xc6, 0x1d, 0xc7, 0xeb, 0x3a, 0x85, 0xd8, 0xab, 0xf6, 0x5d, 0x9d, - 0x18, 0x36, 0x69, 0xd3, 0xe1, 0x7f, 0xaf, 0x13, 0x6c, 0xec, 0xc7, 0x44, 0x04, 0xaf, 0xce, 0x1c, - 0xfe, 0x37, 0x39, 0x4a, 0xf7, 0xf0, 0x0b, 0x00, 0x96, 0x44, 0xd0, 0x5d, 0x31, 0x3c, 0xec, 0xf4, - 0x9c, 0xce, 0x0f, 0xa6, 0x94, 0x99, 0x7a, 0x54, 0x1b, 0x14, 0x76, 0x5a, 0x26, 0xa4, 0xd8, 0x29, - 0xd9, 0xde, 0x0e, 0xe2, 0xc0, 0x4f, 0x9d, 0xd0, 0x33, 0xf9, 0xa7, 0x64, 0x3d, 0x03, 0xbf, 0xfb, - 0x94, 0xcc, 0xc2, 0xc2, 0x99, 0x6d, 0xa1, 0x16, 0x4c, 0xb6, 0x83, 0x30, 0xbe, 0x17, 0x84, 0x72, - 0x7d, 0xa1, 0x1e, 0x7a, 0x05, 0x03, 0x53, 0xb4, 0xc8, 0x82, 0xa9, 0x9b, 0x10, 0x9c, 0xa2, 0x89, - 0x3e, 0x07, 0x23, 0x51, 0xd3, 0xf1, 0x48, 0xed, 0xf6, 0xec, 0x99, 0xfc, 0xeb, 0xa7, 0xc1, 0x51, - 0x72, 0x56, 0x17, 0x9b, 0x1c, 0x81, 0x82, 0x25, 0x39, 0xb4, 0x02, 0x43, 0x2c, 0x23, 0x02, 0x8b, - 0xbb, 0x9d, 0x13, 0x13, 0xaa, 0xcb, 0xc2, 0x94, 0x9f, 0x4d, 0xac, 0x18, 0xf3, 0xea, 0x74, 0x0f, - 0x08, 0xf6, 0x3a, 0x88, 0x66, 0xcf, 0xe5, 0xef, 0x01, 0xc1, 0x95, 0xdf, 0x6e, 0xf4, 0xda, 0x03, - 0x0a, 0x09, 0x27, 0x44, 0xe9, 0xc9, 0x4c, 0x4f, 0xd3, 0x47, 0x7a, 0x18, 0xb4, 0xe4, 0x9e, 0xa5, - 0xec, 0x64, 0xa6, 0x27, 0x29, 0x25, 0x61, 0xff, 0xee, 0x48, 0x37, 0xcf, 0xc2, 0x04, 0xb2, 0xbf, - 0x6a, 0x75, 0xbd, 0xd5, 0x7d, 0x7a, 0x50, 0xfd, 0xd0, 0x09, 0x72, 0xab, 0x5f, 0xb6, 0xe0, 0x91, - 0x76, 0xe6, 0x87, 0x08, 0x06, 0x60, 0x30, 0x35, 0x13, 0xff, 0x74, 0x15, 0x1b, 0x3f, 0x1b, 0x8e, - 0x73, 0x5a, 0x4a, 0x4b, 0x04, 0xc5, 0x0f, 0x2c, 0x11, 0xac, 0xc2, 0x28, 0x63, 0x32, 0xfb, 0xe4, - 0x87, 0x4b, 0x0b, 0x46, 0x8c, 0x95, 0x58, 0x12, 0x15, 0xb1, 0x22, 0x81, 0x7e, 0xd0, 0x82, 0x0b, - 0xe9, 0xae, 0x63, 0xc2, 0xc0, 0x22, 0x92, 0x3c, 0x97, 0x05, 0x57, 0xc4, 0xf7, 0x5f, 0xa8, 0xf7, - 0x42, 0x3e, 0xea, 0x87, 0x80, 0x7b, 0x37, 0x86, 0xaa, 0x19, 0xc2, 0xe8, 0xb0, 0xa9, 0x80, 0x1f, - 0x40, 0x20, 0x7d, 0x11, 0xc6, 0x77, 0x83, 0x8e, 0x1f, 0x0b, 0xfb, 0x17, 0xe1, 0xb1, 0xc8, 0x1e, - 0x9c, 0x57, 0xb5, 0x72, 0x6c, 0x60, 0xa5, 0xc4, 0xd8, 0xd1, 0x07, 0x16, 0x63, 0xdf, 0x49, 0x65, - 0x01, 0x2f, 0xe7, 0x47, 0x2c, 0x14, 0x12, 0xff, 0x31, 0x72, 0x81, 0x9f, 0xae, 0x6c, 0xf4, 0xd3, - 0x56, 0x06, 0x53, 0xcf, 0xa5, 0xe5, 0xd7, 0x4c, 0x69, 0xf9, 0x72, 0x5a, 0x5a, 0xee, 0x52, 0xbe, - 0x1a, 0x82, 0xf2, 0xe0, 0x61, 0xaf, 0x07, 0x8d, 0x23, 0x67, 0x7b, 0x70, 0xa9, 0xdf, 0xb5, 0xc4, - 0x0c, 0xa1, 0x5a, 0xea, 0xa9, 0x2d, 0x31, 0x84, 0x6a, 0xd5, 0xaa, 0x98, 0x41, 0x06, 0x0d, 0x34, - 0x62, 0xff, 0x0f, 0x0b, 0x8a, 0xf5, 0xa0, 0x75, 0x0a, 0xca, 0xe4, 0xcf, 0x1a, 0xca, 0xe4, 0xc7, - 0x72, 0xb2, 0xb3, 0xe7, 0xaa, 0x8e, 0x97, 0x53, 0xaa, 0xe3, 0x0b, 0x79, 0x04, 0x7a, 0x2b, 0x8a, - 0x7f, 0xa2, 0x08, 0x7a, 0x2e, 0x79, 0xf4, 0x1b, 0x0f, 0x62, 0x85, 0x5c, 0xec, 0x95, 0x5e, 0x5e, - 0x50, 0x66, 0xf6, 0x53, 0xd2, 0x09, 0xef, 0xcf, 0x99, 0x31, 0xf2, 0x5b, 0xc4, 0xdd, 0xda, 0x8e, - 0x49, 0x2b, 0xfd, 0x39, 0xa7, 0x67, 0x8c, 0xfc, 0xdf, 0x2c, 0x98, 0x4a, 0xb5, 0x8e, 0x3c, 0x98, - 0xf0, 0x74, 0x4d, 0xa0, 0x58, 0xa7, 0x0f, 0xa4, 0x44, 0x14, 0xc6, 0x9c, 0x5a, 0x11, 0x36, 0x89, - 0xa3, 0x79, 0x00, 0xf5, 0x52, 0x27, 0x35, 0x60, 0x8c, 0xeb, 0x57, 0x4f, 0x79, 0x11, 0xd6, 0x30, - 0xd0, 0x4b, 0x30, 0x16, 0x07, 0xed, 0xc0, 0x0b, 0xb6, 0xf6, 0x6f, 0x12, 0x19, 0xda, 0x46, 0x99, - 0x68, 0xad, 0x27, 0x20, 0xac, 0xe3, 0xd9, 0x3f, 0x55, 0xe4, 0x1f, 0xea, 0xc7, 0xee, 0xb7, 0xd6, - 0xe4, 0x47, 0x7b, 0x4d, 0x7e, 0xd3, 0x82, 0x69, 0xda, 0x3a, 0x33, 0x17, 0x91, 0x97, 0xad, 0x4a, - 0xbf, 0x63, 0xf5, 0x48, 0xbf, 0x73, 0x99, 0x9e, 0x5d, 0xad, 0xa0, 0x13, 0x0b, 0x0d, 0x9a, 0x76, - 0x38, 0xd1, 0x52, 0x2c, 0xa0, 0x02, 0x8f, 0x84, 0xa1, 0xf0, 0x81, 0xd2, 0xf1, 0x48, 0x18, 0x62, - 0x01, 0x95, 0xd9, 0x79, 0x4a, 0x39, 0xd9, 0x79, 0x58, 0xa0, 0x3e, 0x61, 0x58, 0x20, 0xd8, 0x1e, - 0x2d, 0x50, 0x9f, 0xb4, 0x38, 0x48, 0x70, 0xec, 0x9f, 0x2b, 0xc2, 0x78, 0x3d, 0x68, 0x25, 0x6f, - 0x65, 0x2f, 0x1a, 0x6f, 0x65, 0x97, 0x52, 0x6f, 0x65, 0xd3, 0x3a, 0xee, 0xb7, 0x5e, 0xc6, 0x3e, - 0xac, 0x97, 0xb1, 0x7f, 0x65, 0xb1, 0x59, 0xab, 0xae, 0x35, 0x44, 0x76, 0xe0, 0xe7, 0x61, 0x8c, - 0x1d, 0x48, 0xcc, 0xe9, 0x4e, 0x3e, 0x20, 0xb1, 0xc0, 0xfb, 0x6b, 0x49, 0x31, 0xd6, 0x71, 0xd0, - 0x15, 0x18, 0x8d, 0x88, 0x13, 0x36, 0xb7, 0xd5, 0x19, 0x27, 0x9e, 0x57, 0x78, 0x19, 0x56, 0x50, - 0xf4, 0x66, 0x12, 0x23, 0xae, 0x98, 0x9f, 0xe7, 0x56, 0xef, 0x0f, 0xdf, 0x22, 0xf9, 0x81, 0xe1, - 0xec, 0xb7, 0x00, 0x75, 0xe3, 0x0f, 0x10, 0x1c, 0xa9, 0x62, 0x06, 0x47, 0x2a, 0x77, 0x05, 0x46, - 0xfa, 0x53, 0x0b, 0x26, 0xeb, 0x41, 0x8b, 0x6e, 0xdd, 0xbf, 0x48, 0xfb, 0x54, 0x0f, 0x90, 0x39, - 0xdc, 0x23, 0x40, 0xe6, 0x3f, 0xb4, 0x60, 0xa4, 0x1e, 0xb4, 0x4e, 0x41, 0xef, 0xfe, 0x9a, 0xa9, - 0x77, 0x7f, 0x34, 0x67, 0x49, 0xe4, 0xa8, 0xda, 0x7f, 0xa1, 0x08, 0x13, 0xb4, 0x9f, 0xc1, 0x96, - 0x9c, 0x25, 0x63, 0x44, 0xac, 0x01, 0x46, 0x84, 0xb2, 0xb9, 0x81, 0xe7, 0x05, 0xf7, 0xd2, 0x33, - 0xb6, 0xc2, 0x4a, 0xb1, 0x80, 0xa2, 0x67, 0x61, 0xb4, 0x1d, 0x92, 0x3d, 0x37, 0x10, 0xfc, 0xa3, - 0xf6, 0x8a, 0x51, 0x17, 0xe5, 0x58, 0x61, 0x50, 0xb9, 0x2b, 0x72, 0xfd, 0x26, 0x91, 0x49, 0xb6, - 0x4b, 0x2c, 0x0f, 0x17, 0x8f, 0x7c, 0xad, 0x95, 0x63, 0x03, 0x0b, 0xbd, 0x05, 0x65, 0xf6, 0x9f, - 0x9d, 0x28, 0xc7, 0xcf, 0x1b, 0x24, 0xd2, 0x4d, 0x08, 0x02, 0x38, 0xa1, 0x85, 0xae, 0x01, 0xc4, - 0x32, 0x3a, 0x72, 0x24, 0x62, 0xdc, 0x28, 0x5e, 0x5b, 0xc5, 0x4d, 0x8e, 0xb0, 0x86, 0x85, 0x9e, - 0x81, 0x72, 0xec, 0xb8, 0xde, 0x2d, 0xd7, 0x27, 0x11, 0x53, 0x39, 0x17, 0x65, 0x36, 0x09, 0x51, - 0x88, 0x13, 0x38, 0xe5, 0x75, 0x98, 0x03, 0x38, 0xcf, 0x3a, 0x36, 0xca, 0xb0, 0x19, 0xaf, 0x73, - 0x4b, 0x95, 0x62, 0x0d, 0xc3, 0x7e, 0x05, 0xce, 0xd5, 0x83, 0x56, 0x3d, 0x08, 0xe3, 0x95, 0x20, - 0xbc, 0xe7, 0x84, 0x2d, 0x39, 0x7f, 0x15, 0x99, 0xd8, 0x80, 0x9e, 0x3d, 0x43, 0x7c, 0x67, 0x1a, - 0x29, 0x0b, 0x5e, 0x60, 0xdc, 0xce, 0x31, 0x9d, 0x3a, 0x9a, 0xec, 0xde, 0x55, 0x09, 0x06, 0xaf, - 0x3b, 0x31, 0x41, 0xb7, 0x59, 0x52, 0xb2, 0xe4, 0x0a, 0x12, 0xd5, 0x9f, 0xd6, 0x92, 0x92, 0x25, - 0xc0, 0xcc, 0x3b, 0xcb, 0xac, 0x6f, 0xff, 0x6a, 0x91, 0x9d, 0x46, 0xa9, 0x7c, 0x7b, 0xe8, 0x8b, - 0x30, 0x19, 0x91, 0x5b, 0xae, 0xdf, 0xb9, 0x2f, 0x85, 0xf0, 0x1e, 0x6e, 0x39, 0x8d, 0x65, 0x1d, - 0x93, 0xab, 0xf2, 0xcc, 0x32, 0x9c, 0xa2, 0x46, 0xe7, 0x29, 0xec, 0xf8, 0x0b, 0xd1, 0x9d, 0x88, - 0x84, 0x22, 0xdf, 0x1b, 0x9b, 0x27, 0x2c, 0x0b, 0x71, 0x02, 0xa7, 0xeb, 0x92, 0xfd, 0x59, 0x0b, - 0x7c, 0x1c, 0x04, 0xb1, 0x5c, 0xc9, 0x2c, 0x63, 0x90, 0x56, 0x8e, 0x0d, 0x2c, 0xb4, 0x02, 0x28, - 0xea, 0xb4, 0xdb, 0x1e, 0x7b, 0xd8, 0x77, 0xbc, 0xeb, 0x61, 0xd0, 0x69, 0xf3, 0x57, 0xcf, 0x22, - 0x0f, 0x4c, 0xd8, 0xe8, 0x82, 0xe2, 0x8c, 0x1a, 0xf4, 0xf4, 0xd9, 0x8c, 0xd8, 0x6f, 0xb6, 0xba, - 0x8b, 0x42, 0xbd, 0xde, 0x60, 0x45, 0x58, 0xc2, 0xe8, 0x62, 0x62, 0xcd, 0x73, 0xcc, 0xe1, 0x64, - 0x31, 0x61, 0x55, 0x8a, 0x35, 0x0c, 0xb4, 0x0c, 0x23, 0xd1, 0x7e, 0xd4, 0x8c, 0x45, 0x44, 0xa6, - 0x9c, 0xcc, 0x9d, 0x0d, 0x86, 0xa2, 0x65, 0x93, 0xe0, 0x55, 0xb0, 0xac, 0x6b, 0x7f, 0x0f, 0xbb, - 0x0c, 0x59, 0x76, 0xb0, 0xb8, 0x13, 0x12, 0xb4, 0x0b, 0x13, 0x6d, 0x36, 0xe5, 0x22, 0x76, 0xb5, - 0x98, 0xb7, 0x17, 0x07, 0x94, 0x6a, 0xef, 0xd1, 0x83, 0x46, 0x69, 0x9d, 0x98, 0xb8, 0x50, 0xd7, - 0xc9, 0x61, 0x93, 0xba, 0xfd, 0x35, 0xc4, 0xce, 0xdc, 0x06, 0x17, 0x55, 0x47, 0x84, 0x69, 0xb1, - 0xe0, 0xcb, 0xe7, 0xf2, 0x75, 0x26, 0xc9, 0x17, 0x09, 0xf3, 0x64, 0x2c, 0xeb, 0xa2, 0x37, 0xd9, - 0x2b, 0x35, 0x3f, 0xe8, 0xfa, 0x25, 0x69, 0xe6, 0x58, 0xc6, 0x83, 0xb4, 0xa8, 0x88, 0x35, 0x22, - 0xe8, 0x16, 0x4c, 0x88, 0x64, 0x52, 0x42, 0x29, 0x56, 0x34, 0x94, 0x1e, 0x13, 0x58, 0x07, 0x1e, - 0xa5, 0x0b, 0xb0, 0x59, 0x19, 0x6d, 0xc1, 0x05, 0x2d, 0xb3, 0xe2, 0xf5, 0xd0, 0x61, 0x2f, 0x97, - 0x2e, 0xdb, 0x44, 0xda, 0xb9, 0xf9, 0xc4, 0xe1, 0x41, 0xe5, 0xc2, 0x7a, 0x2f, 0x44, 0xdc, 0x9b, - 0x0e, 0xba, 0x0d, 0xe7, 0xb8, 0x07, 0x5f, 0x95, 0x38, 0x2d, 0xcf, 0xf5, 0xd5, 0xc1, 0xcc, 0xd7, - 0xe1, 0xf9, 0xc3, 0x83, 0xca, 0xb9, 0x85, 0x2c, 0x04, 0x9c, 0x5d, 0x0f, 0xbd, 0x06, 0xe5, 0x96, - 0x1f, 0x89, 0x31, 0x18, 0x36, 0x92, 0x86, 0x96, 0xab, 0x6b, 0x0d, 0xf5, 0xfd, 0xc9, 0x1f, 0x9c, - 0x54, 0x40, 0x5b, 0x5c, 0x31, 0xa6, 0xe4, 0xd0, 0x91, 0xfc, 0x04, 0xf1, 0x62, 0x49, 0x18, 0x3e, - 0x3c, 0x5c, 0x23, 0xac, 0x6c, 0x60, 0x0d, 0xf7, 0x1e, 0x83, 0x30, 0x7a, 0x03, 0x10, 0x65, 0xd4, - 0xdc, 0x26, 0x59, 0x68, 0xb2, 0x10, 0xe2, 0x4c, 0x8f, 0x38, 0x6a, 0xf8, 0x4c, 0xa0, 0x46, 0x17, - 0x06, 0xce, 0xa8, 0x85, 0x6e, 0xd0, 0x83, 0x4c, 0x2f, 0x15, 0xb6, 0xbc, 0x92, 0xb9, 0x9f, 0xad, - 0x92, 0x76, 0x48, 0x9a, 0x4e, 0x4c, 0x5a, 0x26, 0x45, 0x9c, 0xaa, 0x47, 0xef, 0x52, 0x95, 0x4d, - 0x08, 0xcc, 0xb0, 0x19, 0xdd, 0x19, 0x85, 0xa8, 0x5c, 0xbc, 0x1d, 0x44, 0xf1, 0x1a, 0x89, 0xef, - 0x05, 0xe1, 0x8e, 0x88, 0x52, 0x96, 0x04, 0xcc, 0x4c, 0x40, 0x58, 0xc7, 0xa3, 0x7c, 0x30, 0x7b, - 0x26, 0xae, 0x55, 0xd9, 0x0b, 0xdd, 0x68, 0xb2, 0x4f, 0x6e, 0xf0, 0x62, 0x2c, 0xe1, 0x12, 0xb5, - 0x56, 0x5f, 0x62, 0xaf, 0x6d, 0x29, 0xd4, 0x5a, 0x7d, 0x09, 0x4b, 0x38, 0x22, 0xdd, 0x09, 0x59, - 0x27, 0xf3, 0xb5, 0x9a, 0xdd, 0xd7, 0xc1, 0x80, 0x39, 0x59, 0x7d, 0x98, 0x56, 0xa9, 0x60, 0x79, - 0xf8, 0xb6, 0x68, 0x76, 0x8a, 0x2d, 0x92, 0xc1, 0x63, 0xbf, 0x29, 0x3d, 0x71, 0x2d, 0x45, 0x09, - 0x77, 0xd1, 0x36, 0x02, 0x99, 0x4c, 0xf7, 0xcd, 0x06, 0x75, 0x15, 0xca, 0x51, 0x67, 0xa3, 0x15, - 0xec, 0x3a, 0xae, 0xcf, 0x1e, 0xc7, 0x34, 0x26, 0xab, 0x21, 0x01, 0x38, 0xc1, 0x41, 0x2b, 0x30, - 0xea, 0x48, 0x25, 0x30, 0xca, 0x8f, 0x5a, 0xa0, 0x54, 0xbf, 0xdc, 0x91, 0x57, 0xaa, 0x7d, 0x55, - 0x5d, 0xf4, 0x2a, 0x4c, 0x08, 0xbf, 0x2d, 0x1e, 0xcb, 0x81, 0x3d, 0x5e, 0x69, 0x86, 0xf9, 0x0d, - 0x1d, 0x88, 0x4d, 0x5c, 0xf4, 0x05, 0x98, 0xa4, 0x54, 0x92, 0x83, 0x6d, 0xf6, 0xec, 0x20, 0x27, - 0xa2, 0x96, 0xe5, 0x43, 0xaf, 0x8c, 0x53, 0xc4, 0x50, 0x0b, 0x1e, 0x77, 0x3a, 0x71, 0xc0, 0x14, - 0xe9, 0xe6, 0xfa, 0x5f, 0x0f, 0x76, 0x88, 0xcf, 0xde, 0xb0, 0x46, 0x17, 0x2f, 0x1d, 0x1e, 0x54, - 0x1e, 0x5f, 0xe8, 0x81, 0x87, 0x7b, 0x52, 0x41, 0x77, 0x60, 0x2c, 0x0e, 0x3c, 0x66, 0x22, 0x4f, - 0x59, 0x89, 0x47, 0xf2, 0x03, 0x01, 0xad, 0x2b, 0x34, 0x5d, 0x89, 0xa4, 0xaa, 0x62, 0x9d, 0x0e, - 0x5a, 0xe7, 0x7b, 0x8c, 0x85, 0x48, 0x25, 0xd1, 0xec, 0xa3, 0xf9, 0x03, 0xa3, 0x22, 0xa9, 0x9a, - 0x5b, 0x50, 0xd4, 0xc4, 0x3a, 0x19, 0x74, 0x1d, 0x66, 0xda, 0xa1, 0x1b, 0xb0, 0x85, 0xad, 0x1e, - 0x31, 0x66, 0xcd, 0xc4, 0x0e, 0xf5, 0x34, 0x02, 0xee, 0xae, 0x43, 0x85, 0x4c, 0x59, 0x38, 0x7b, - 0x9e, 0x67, 0x09, 0xe3, 0x8c, 0x37, 0x2f, 0xc3, 0x0a, 0x8a, 0x56, 0xd9, 0xb9, 0xcc, 0xc5, 0xc1, - 0xd9, 0xb9, 0xfc, 0x68, 0x0f, 0xba, 0xd8, 0xc8, 0xf9, 0x25, 0xf5, 0x17, 0x27, 0x14, 0xe8, 0xbd, - 0x11, 0x6d, 0x3b, 0x21, 0xa9, 0x87, 0x41, 0x93, 0x44, 0x5a, 0x54, 0xe6, 0xc7, 0x78, 0x24, 0x47, - 0x7a, 0x6f, 0x34, 0xb2, 0x10, 0x70, 0x76, 0x3d, 0xd4, 0xd2, 0x92, 0x63, 0x53, 0x36, 0x34, 0x9a, - 0x7d, 0xbc, 0x87, 0xc1, 0x51, 0x8a, 0x67, 0x4d, 0xd6, 0xa2, 0x51, 0x1c, 0xe1, 0x14, 0x4d, 0xf4, - 0x1d, 0x30, 0x2d, 0x02, 0x1f, 0x25, 0xe3, 0x7e, 0x21, 0xb1, 0x64, 0xc4, 0x29, 0x18, 0xee, 0xc2, - 0xe6, 0xb1, 0xa8, 0x9d, 0x0d, 0x8f, 0x88, 0x45, 0x78, 0xcb, 0xf5, 0x77, 0xa2, 0xd9, 0x8b, 0xec, - 0xab, 0x45, 0x2c, 0xea, 0x34, 0x14, 0x67, 0xd4, 0x98, 0xfb, 0x76, 0x98, 0xe9, 0xba, 0xb9, 0x8e, - 0x15, 0xbf, 0xfd, 0x4f, 0x86, 0xa0, 0xac, 0x94, 0xf2, 0xe8, 0xaa, 0xf9, 0xd6, 0x72, 0x3e, 0xfd, - 0xd6, 0x32, 0x4a, 0x65, 0x03, 0xfd, 0x79, 0x65, 0xdd, 0x30, 0xd4, 0x2b, 0xe4, 0x67, 0x4b, 0xd3, - 0xb9, 0xfb, 0xbe, 0x4e, 0x7f, 0x9a, 0x8e, 0xa5, 0x38, 0xf0, 0xa3, 0x4d, 0xa9, 0xa7, 0xda, 0x66, - 0xc0, 0x64, 0xc5, 0xe8, 0x49, 0x2a, 0x20, 0xb5, 0x6a, 0xf5, 0x74, 0xf6, 0xce, 0x3a, 0x2d, 0xc4, - 0x1c, 0xc6, 0x04, 0x49, 0xca, 0x66, 0x31, 0x41, 0x72, 0xe4, 0x01, 0x05, 0x49, 0x49, 0x00, 0x27, - 0xb4, 0x90, 0x07, 0x33, 0x4d, 0x33, 0xf1, 0xaa, 0x72, 0xf4, 0x7b, 0xb2, 0x6f, 0x0a, 0xd4, 0x8e, - 0x96, 0xe5, 0x6e, 0x29, 0x4d, 0x05, 0x77, 0x13, 0x46, 0xaf, 0xc2, 0xe8, 0x7b, 0x41, 0xc4, 0x16, - 0xa5, 0xe0, 0x35, 0xa4, 0x43, 0xd4, 0xe8, 0x9b, 0xb7, 0x1b, 0xac, 0xfc, 0xe8, 0xa0, 0x32, 0x56, - 0x0f, 0x5a, 0xf2, 0x2f, 0x56, 0x15, 0xd0, 0x7d, 0x38, 0x67, 0x9c, 0xd0, 0xaa, 0xbb, 0x30, 0x78, - 0x77, 0x2f, 0x88, 0xe6, 0xce, 0xd5, 0xb2, 0x28, 0xe1, 0xec, 0x06, 0xe8, 0xb1, 0xe7, 0x07, 0x22, - 0x69, 0xb1, 0xe4, 0x67, 0x18, 0xdb, 0x52, 0xd6, 0xdd, 0xe1, 0x53, 0x08, 0xb8, 0xbb, 0x8e, 0xfd, - 0xcb, 0xfc, 0x0d, 0x43, 0x68, 0x3a, 0x49, 0xd4, 0xf1, 0x4e, 0x23, 0x27, 0xd6, 0xb2, 0xa1, 0x84, - 0x7d, 0xe0, 0x77, 0xb2, 0x5f, 0xb7, 0xd8, 0x3b, 0xd9, 0x3a, 0xd9, 0x6d, 0x7b, 0x54, 0xde, 0x7e, - 0xf8, 0x1d, 0x7f, 0x13, 0x46, 0x63, 0xd1, 0x5a, 0xaf, 0x34, 0x5e, 0x5a, 0xa7, 0xd8, 0x5b, 0xa1, - 0xe2, 0x74, 0x64, 0x29, 0x56, 0x64, 0xec, 0x7f, 0xc1, 0x67, 0x40, 0x42, 0x4e, 0x41, 0x21, 0x56, - 0x35, 0x15, 0x62, 0x95, 0x3e, 0x5f, 0x90, 0xa3, 0x18, 0xfb, 0xe7, 0x66, 0xbf, 0x99, 0x50, 0xf9, - 0x51, 0x7f, 0xa0, 0xb5, 0x7f, 0xd8, 0x82, 0xb3, 0x59, 0x16, 0x4d, 0x94, 0x3b, 0xe5, 0x22, 0xad, - 0x7a, 0xb0, 0x56, 0x23, 0x78, 0x57, 0x94, 0x63, 0x85, 0x31, 0x70, 0x86, 0x8c, 0xe3, 0x45, 0x8c, - 0xbb, 0x0d, 0x13, 0xf5, 0x90, 0x68, 0x77, 0xc0, 0xeb, 0xdc, 0xb3, 0x8e, 0xf7, 0xe7, 0xd9, 0x63, - 0x7b, 0xd5, 0xd9, 0x3f, 0x53, 0x80, 0xb3, 0xfc, 0xc5, 0x69, 0x61, 0x2f, 0x70, 0x5b, 0xf5, 0xa0, - 0x25, 0xb2, 0x9b, 0xbc, 0x0d, 0xe3, 0x6d, 0x4d, 0x0f, 0xd1, 0x2b, 0x66, 0x95, 0xae, 0xaf, 0x48, - 0xe4, 0x41, 0xbd, 0x14, 0x1b, 0xb4, 0x50, 0x0b, 0xc6, 0xc9, 0x9e, 0xdb, 0x54, 0xcf, 0x16, 0x85, - 0x63, 0xdf, 0x0d, 0xaa, 0x95, 0x65, 0x8d, 0x0e, 0x36, 0xa8, 0x3e, 0x84, 0x84, 0x77, 0xf6, 0x8f, - 0x58, 0xf0, 0x68, 0x4e, 0x84, 0x2b, 0xda, 0xdc, 0x3d, 0xf6, 0xb6, 0x27, 0x72, 0x67, 0xa9, 0xe6, - 0xf8, 0x8b, 0x1f, 0x16, 0x50, 0xf4, 0x39, 0x00, 0xfe, 0x62, 0x47, 0xc5, 0xa3, 0x7e, 0xa1, 0x80, - 0x8c, 0x28, 0x26, 0x5a, 0xf4, 0x09, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x9f, 0x2c, 0xc2, 0x10, 0x7b, - 0x21, 0x42, 0x2b, 0x30, 0xb2, 0xcd, 0x63, 0x3e, 0x0f, 0x12, 0x5e, 0x3a, 0x91, 0x33, 0x79, 0x01, - 0x96, 0x95, 0xd1, 0x2a, 0x9c, 0xe1, 0x31, 0xb3, 0xbd, 0x2a, 0xf1, 0x9c, 0x7d, 0xa9, 0xae, 0xe0, - 0xf9, 0xa6, 0x54, 0x24, 0x8d, 0x5a, 0x37, 0x0a, 0xce, 0xaa, 0x87, 0x5e, 0x87, 0x49, 0xca, 0xdf, - 0x05, 0x9d, 0x58, 0x52, 0xe2, 0xd1, 0xb2, 0x15, 0x43, 0xb9, 0x6e, 0x40, 0x71, 0x0a, 0x9b, 0x0a, - 0x5e, 0xed, 0x2e, 0xc5, 0xcc, 0x50, 0x22, 0x78, 0x99, 0xca, 0x18, 0x13, 0x97, 0x99, 0x32, 0x75, - 0x98, 0xe1, 0xd6, 0xfa, 0x76, 0x48, 0xa2, 0xed, 0xc0, 0x6b, 0x89, 0x74, 0xe5, 0x89, 0x29, 0x53, - 0x0a, 0x8e, 0xbb, 0x6a, 0x50, 0x2a, 0x9b, 0x8e, 0xeb, 0x75, 0x42, 0x92, 0x50, 0x19, 0x36, 0xa9, - 0xac, 0xa4, 0xe0, 0xb8, 0xab, 0x06, 0x5d, 0x47, 0xe7, 0x44, 0xfe, 0x70, 0xe9, 0xdf, 0xaf, 0xec, - 0xd3, 0x46, 0xa4, 0xa7, 0x53, 0x8f, 0x00, 0x37, 0xc2, 0x82, 0x47, 0x65, 0x20, 0xd7, 0xf4, 0x89, - 0xc2, 0xc7, 0x49, 0x52, 0x79, 0x90, 0x2c, 0xd6, 0xbf, 0x6b, 0xc1, 0x99, 0x0c, 0x3b, 0x58, 0x7e, - 0x54, 0x6d, 0xb9, 0x51, 0xac, 0x72, 0xea, 0x68, 0x47, 0x15, 0x2f, 0xc7, 0x0a, 0x83, 0xee, 0x07, - 0x7e, 0x18, 0xa6, 0x0f, 0x40, 0x61, 0x67, 0x26, 0xa0, 0xc7, 0xcc, 0x4e, 0x73, 0x09, 0x4a, 0x9d, - 0x88, 0xc8, 0xd0, 0x54, 0xea, 0xfc, 0x66, 0x1a, 0x66, 0x06, 0xa1, 0xac, 0xe9, 0x96, 0x52, 0xee, - 0x6a, 0xac, 0x29, 0xd7, 0xd8, 0x72, 0x98, 0xfd, 0xd5, 0x22, 0x9c, 0xcf, 0xb5, 0x78, 0xa7, 0x5d, - 0xda, 0x0d, 0x7c, 0x37, 0x0e, 0xd4, 0xeb, 0x23, 0x0f, 0x8e, 0x42, 0xda, 0xdb, 0xab, 0xa2, 0x1c, - 0x2b, 0x0c, 0x74, 0x59, 0x66, 0xb2, 0x4f, 0x67, 0x0d, 0x5a, 0xac, 0x1a, 0xc9, 0xec, 0x07, 0xcd, - 0xc8, 0xf6, 0x24, 0x94, 0xda, 0x41, 0xe0, 0xa5, 0x0f, 0x23, 0xda, 0xdd, 0x20, 0xf0, 0x30, 0x03, - 0xa2, 0x4f, 0x88, 0x71, 0x48, 0x3d, 0xb7, 0x61, 0xa7, 0x15, 0x44, 0xda, 0x60, 0x3c, 0x0d, 0x23, - 0x3b, 0x64, 0x3f, 0x74, 0xfd, 0xad, 0xf4, 0x33, 0xec, 0x4d, 0x5e, 0x8c, 0x25, 0xdc, 0xcc, 0x21, - 0x31, 0x72, 0xd2, 0xa9, 0xd4, 0x46, 0xfb, 0x5e, 0x6d, 0x3f, 0x50, 0x84, 0x29, 0xbc, 0x58, 0xfd, - 0xd6, 0x44, 0xdc, 0xe9, 0x9e, 0x88, 0x93, 0x4e, 0xa5, 0xd6, 0x7f, 0x36, 0x7e, 0xc1, 0x82, 0x29, - 0x16, 0x67, 0x59, 0x84, 0xe4, 0x70, 0x03, 0xff, 0x14, 0x58, 0xb7, 0x27, 0x61, 0x28, 0xa4, 0x8d, - 0xa6, 0xd3, 0x05, 0xb1, 0x9e, 0x60, 0x0e, 0x43, 0x8f, 0x43, 0x89, 0x75, 0x81, 0x4e, 0xde, 0x38, - 0xcf, 0xb4, 0x50, 0x75, 0x62, 0x07, 0xb3, 0x52, 0xe6, 0x67, 0x8e, 0x49, 0xdb, 0x73, 0x79, 0xa7, - 0x93, 0xa7, 0x8d, 0x8f, 0x86, 0x9f, 0x79, 0x66, 0xd7, 0x3e, 0x98, 0x9f, 0x79, 0x36, 0xc9, 0xde, - 0x62, 0xd1, 0x1f, 0x16, 0xe0, 0x62, 0x66, 0xbd, 0x81, 0xfd, 0xcc, 0x7b, 0xd7, 0x3e, 0x19, 0x6b, - 0x9a, 0x6c, 0x23, 0x97, 0xe2, 0x29, 0x1a, 0xb9, 0x94, 0x06, 0xe5, 0x1c, 0x87, 0x06, 0x70, 0xff, - 0xce, 0x1c, 0xb2, 0x8f, 0x88, 0xfb, 0x77, 0x66, 0xdf, 0x72, 0xc4, 0xba, 0x3f, 0x2b, 0xe4, 0x7c, - 0x0b, 0x13, 0xf0, 0xae, 0xd0, 0x73, 0x86, 0x01, 0x23, 0xc1, 0x09, 0x8f, 0xf3, 0x33, 0x86, 0x97, - 0x61, 0x05, 0x45, 0xae, 0xe6, 0x48, 0x5d, 0xc8, 0xcf, 0x9e, 0x99, 0xdb, 0xd4, 0xbc, 0xf9, 0x12, - 0xa5, 0x86, 0x20, 0xc3, 0xa9, 0x7a, 0x55, 0x13, 0xca, 0x8b, 0x83, 0x0b, 0xe5, 0xe3, 0xd9, 0x02, - 0x39, 0x5a, 0x80, 0xa9, 0x5d, 0xd7, 0xa7, 0xc7, 0xe6, 0xbe, 0xc9, 0x8a, 0xaa, 0xb8, 0x22, 0xab, - 0x26, 0x18, 0xa7, 0xf1, 0xe7, 0x5e, 0x85, 0x89, 0x07, 0x57, 0x47, 0x7e, 0xb3, 0x08, 0x8f, 0xf5, - 0xd8, 0xf6, 0xfc, 0xac, 0x37, 0xe6, 0x40, 0x3b, 0xeb, 0xbb, 0xe6, 0xa1, 0x0e, 0x67, 0x37, 0x3b, - 0x9e, 0xb7, 0xcf, 0xec, 0x48, 0x49, 0x4b, 0x62, 0x08, 0x5e, 0xf1, 0x71, 0x99, 0xdb, 0x62, 0x25, - 0x03, 0x07, 0x67, 0xd6, 0x44, 0x6f, 0x00, 0x0a, 0x44, 0xea, 0xde, 0xeb, 0xc4, 0x17, 0xfa, 0x7d, - 0x36, 0xf0, 0xc5, 0x64, 0x33, 0xde, 0xee, 0xc2, 0xc0, 0x19, 0xb5, 0x28, 0xd3, 0x4f, 0x6f, 0xa5, - 0x7d, 0xd5, 0xad, 0x14, 0xd3, 0x8f, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x75, 0x98, 0x71, 0xf6, 0x1c, - 0x97, 0xc7, 0xdb, 0x93, 0x04, 0x38, 0xd7, 0xaf, 0x94, 0x60, 0x0b, 0x69, 0x04, 0xdc, 0x5d, 0x27, - 0xe5, 0x6a, 0x3d, 0x9c, 0xef, 0x6a, 0xdd, 0xfb, 0x5c, 0xec, 0xa7, 0xd3, 0xb5, 0xff, 0xb3, 0x45, - 0xaf, 0xaf, 0x8c, 0xf4, 0xfb, 0x74, 0x1c, 0x94, 0x6e, 0x52, 0xf3, 0x7a, 0x3e, 0xa7, 0x59, 0x8a, - 0x24, 0x40, 0x6c, 0xe2, 0xf2, 0x05, 0x11, 0x25, 0xce, 0x36, 0x06, 0xeb, 0x2e, 0xa2, 0x26, 0x28, - 0x0c, 0xf4, 0x79, 0x18, 0x69, 0xb9, 0x7b, 0x6e, 0x14, 0x84, 0x62, 0xb3, 0x1c, 0xd3, 0x65, 0x21, - 0x39, 0x07, 0xab, 0x9c, 0x0c, 0x96, 0xf4, 0xec, 0x1f, 0x28, 0xc0, 0x84, 0x6c, 0xf1, 0xcd, 0x4e, - 0x10, 0x3b, 0xa7, 0x70, 0x2d, 0x5f, 0x37, 0xae, 0xe5, 0x4f, 0xf4, 0x0a, 0x1d, 0xc1, 0xba, 0x94, - 0x7b, 0x1d, 0xdf, 0x4e, 0x5d, 0xc7, 0x4f, 0xf5, 0x27, 0xd5, 0xfb, 0x1a, 0xfe, 0x97, 0x16, 0xcc, - 0x18, 0xf8, 0xa7, 0x70, 0x1b, 0xac, 0x98, 0xb7, 0xc1, 0x13, 0x7d, 0xbf, 0x21, 0xe7, 0x16, 0xf8, - 0xbe, 0x62, 0xaa, 0xef, 0xec, 0xf4, 0x7f, 0x0f, 0x4a, 0xdb, 0x4e, 0xd8, 0xea, 0x15, 0xa2, 0xb6, - 0xab, 0xd2, 0xfc, 0x0d, 0x27, 0x6c, 0xf1, 0x33, 0xfc, 0x59, 0x95, 0xff, 0xd2, 0x09, 0x5b, 0x7d, - 0x7d, 0xcb, 0x58, 0x53, 0xe8, 0x15, 0x18, 0x8e, 0x9a, 0x41, 0x5b, 0x59, 0x7e, 0x5e, 0xe2, 0xb9, - 0x31, 0x69, 0xc9, 0xd1, 0x41, 0x05, 0x99, 0xcd, 0xd1, 0x62, 0x2c, 0xf0, 0xd1, 0xdb, 0x30, 0xc1, - 0x7e, 0x29, 0x0b, 0x88, 0x62, 0x7e, 0x62, 0x84, 0x86, 0x8e, 0xc8, 0x0d, 0x69, 0x8c, 0x22, 0x6c, - 0x92, 0x9a, 0xdb, 0x82, 0xb2, 0xfa, 0xac, 0x87, 0xea, 0x13, 0xf4, 0x1f, 0x8a, 0x70, 0x26, 0x63, - 0xcd, 0xa1, 0xc8, 0x98, 0x89, 0xe7, 0x07, 0x5c, 0xaa, 0x1f, 0x70, 0x2e, 0x22, 0x26, 0x0d, 0xb5, - 0xc4, 0xda, 0x1a, 0xb8, 0xd1, 0x3b, 0x11, 0x49, 0x37, 0x4a, 0x8b, 0xfa, 0x37, 0x4a, 0x1b, 0x3b, - 0xb5, 0xa1, 0xa6, 0x0d, 0xa9, 0x9e, 0x3e, 0xd4, 0x39, 0xfd, 0xe3, 0x22, 0x9c, 0xcd, 0x8a, 0x66, - 0x83, 0xbe, 0x3b, 0x95, 0x24, 0xe7, 0xc5, 0x41, 0xe3, 0xe0, 0xf0, 0xcc, 0x39, 0x22, 0xc7, 0xf5, - 0xbc, 0x99, 0x36, 0xa7, 0xef, 0x30, 0x8b, 0x36, 0x99, 0x23, 0x69, 0xc8, 0x93, 0x1b, 0xc9, 0xe3, - 0xe3, 0xd3, 0x03, 0x77, 0x40, 0x64, 0x45, 0x8a, 0x52, 0x8e, 0xa4, 0xb2, 0xb8, 0xbf, 0x23, 0xa9, - 0x6c, 0x79, 0xce, 0x85, 0x31, 0xed, 0x6b, 0x1e, 0xea, 0x8c, 0xef, 0xd0, 0xdb, 0x4a, 0xeb, 0xf7, - 0x43, 0x9d, 0xf5, 0x1f, 0xb1, 0x20, 0x65, 0x66, 0xa9, 0xd4, 0x5d, 0x56, 0xae, 0xba, 0xeb, 0x12, - 0x94, 0xc2, 0xc0, 0x23, 0xe9, 0x9c, 0x34, 0x38, 0xf0, 0x08, 0x66, 0x10, 0x8a, 0x11, 0x27, 0xca, - 0x8e, 0x71, 0x5d, 0x90, 0x13, 0x22, 0xda, 0x93, 0x30, 0xe4, 0x91, 0x3d, 0xe2, 0xa5, 0x03, 0xbe, - 0xdf, 0xa2, 0x85, 0x98, 0xc3, 0xec, 0x5f, 0x28, 0xc1, 0x85, 0x9e, 0xae, 0xd8, 0x54, 0x1c, 0xda, - 0x72, 0x62, 0x72, 0xcf, 0xd9, 0x4f, 0x47, 0x66, 0xbe, 0xce, 0x8b, 0xb1, 0x84, 0x33, 0xcb, 0x73, - 0x1e, 0x89, 0x31, 0xa5, 0x1c, 0x14, 0x01, 0x18, 0x05, 0xf4, 0x21, 0xe4, 0xf7, 0xbf, 0x06, 0x10, - 0x45, 0x1e, 0xb7, 0x1b, 0x68, 0x09, 0x93, 0xf6, 0x24, 0x62, 0x67, 0xe3, 0x96, 0x80, 0x60, 0x0d, - 0x0b, 0x55, 0x61, 0xba, 0x1d, 0x06, 0x31, 0xd7, 0xb5, 0x56, 0xb9, 0xc1, 0xd1, 0x90, 0xe9, 0x05, - 0x5b, 0x4f, 0xc1, 0x71, 0x57, 0x0d, 0xf4, 0x12, 0x8c, 0x09, 0xcf, 0xd8, 0x7a, 0x10, 0x78, 0x42, - 0x0d, 0xa4, 0xcc, 0x57, 0x1a, 0x09, 0x08, 0xeb, 0x78, 0x5a, 0x35, 0xa6, 0xc0, 0x1d, 0xc9, 0xac, - 0xc6, 0x95, 0xb8, 0x1a, 0x5e, 0x2a, 0xb2, 0xd5, 0xe8, 0x40, 0x91, 0xad, 0x12, 0xc5, 0x58, 0x79, - 0xe0, 0x37, 0x2b, 0xe8, 0xab, 0x4a, 0xfa, 0xd9, 0x12, 0x9c, 0x11, 0x0b, 0xe7, 0x61, 0x2f, 0x97, - 0x3b, 0xdd, 0xcb, 0xe5, 0x24, 0x54, 0x67, 0xdf, 0x5a, 0x33, 0xa7, 0xbd, 0x66, 0x7e, 0xd0, 0x02, - 0x93, 0xbd, 0x42, 0x7f, 0x29, 0x37, 0xb4, 0xfd, 0x4b, 0xb9, 0xec, 0x5a, 0x4b, 0x5e, 0x20, 0x1f, - 0x30, 0xc8, 0xbd, 0xfd, 0x9f, 0x2c, 0x78, 0xa2, 0x2f, 0x45, 0xb4, 0x0c, 0x65, 0xc6, 0x03, 0x6a, - 0xd2, 0xd9, 0x53, 0xca, 0x20, 0x51, 0x02, 0x72, 0x58, 0xd2, 0xa4, 0x26, 0x5a, 0xee, 0xca, 0x21, - 0xf0, 0x74, 0x46, 0x0e, 0x81, 0x73, 0xc6, 0xf0, 0x3c, 0x60, 0x12, 0x81, 0x5f, 0x2e, 0xc2, 0x30, - 0x5f, 0xf1, 0xa7, 0x20, 0x86, 0xad, 0x08, 0xbd, 0x6d, 0x8f, 0xd8, 0x56, 0xbc, 0x2f, 0xf3, 0x55, - 0x27, 0x76, 0x38, 0x9b, 0xa0, 0x6e, 0xab, 0x44, 0xc3, 0x8b, 0xe6, 0x8d, 0xfb, 0x6c, 0x2e, 0xa5, - 0x98, 0x04, 0x4e, 0x43, 0xbb, 0xdd, 0xbe, 0x08, 0x10, 0xb1, 0xfc, 0xfb, 0x94, 0x86, 0x88, 0x92, - 0xf6, 0xc9, 0x1e, 0xad, 0x37, 0x14, 0x32, 0xef, 0x43, 0xb2, 0xd3, 0x15, 0x00, 0x6b, 0x14, 0xe7, - 0x5e, 0x86, 0xb2, 0x42, 0xee, 0xa7, 0xc5, 0x19, 0xd7, 0x99, 0x8b, 0xcf, 0xc2, 0x54, 0xaa, 0xad, - 0x63, 0x29, 0x81, 0x7e, 0xd1, 0x82, 0x29, 0xde, 0xe5, 0x65, 0x7f, 0x4f, 0x9c, 0xa9, 0xef, 0xc3, - 0x59, 0x2f, 0xe3, 0x6c, 0x13, 0x33, 0x3a, 0xf8, 0x59, 0xa8, 0x94, 0x3e, 0x59, 0x50, 0x9c, 0xd9, - 0x06, 0xba, 0x42, 0xd7, 0x2d, 0x3d, 0xbb, 0x1c, 0x4f, 0x78, 0x31, 0x8d, 0xf3, 0x35, 0xcb, 0xcb, - 0xb0, 0x82, 0xda, 0xbf, 0x6d, 0xc1, 0x0c, 0xef, 0xf9, 0x4d, 0xb2, 0xaf, 0x76, 0xf8, 0x87, 0xd9, - 0x77, 0x91, 0xd6, 0xa3, 0x90, 0x93, 0xd6, 0x43, 0xff, 0xb4, 0x62, 0xcf, 0x4f, 0xfb, 0x19, 0x0b, - 0xc4, 0x0a, 0x3c, 0x05, 0x51, 0xfe, 0xdb, 0x4d, 0x51, 0x7e, 0x2e, 0x7f, 0x51, 0xe7, 0xc8, 0xf0, - 0x7f, 0x6a, 0xc1, 0x34, 0x47, 0x48, 0xde, 0x92, 0x3f, 0xd4, 0x79, 0x18, 0x24, 0x3f, 0x9f, 0x4a, - 0xda, 0x9d, 0xfd, 0x51, 0xc6, 0x64, 0x95, 0x7a, 0x4e, 0x56, 0x4b, 0x6e, 0xa0, 0x63, 0xe4, 0xa6, - 0x3c, 0x76, 0x78, 0x6c, 0xfb, 0x0f, 0x2c, 0x40, 0xbc, 0x19, 0x83, 0xfd, 0xa1, 0x4c, 0x05, 0x2b, - 0xd5, 0xae, 0x8b, 0xe4, 0xa8, 0x51, 0x10, 0xac, 0x61, 0x9d, 0xc8, 0xf0, 0xa4, 0x0c, 0x02, 0x8a, - 0xfd, 0x0d, 0x02, 0x8e, 0x31, 0xa2, 0xff, 0xa7, 0x04, 0x69, 0xb7, 0x02, 0x74, 0x17, 0xc6, 0x9b, - 0x4e, 0xdb, 0xd9, 0x70, 0x3d, 0x37, 0x76, 0x49, 0xd4, 0xcb, 0x92, 0x68, 0x49, 0xc3, 0x13, 0x4f, - 0xbd, 0x5a, 0x09, 0x36, 0xe8, 0xa0, 0x79, 0x80, 0x76, 0xe8, 0xee, 0xb9, 0x1e, 0xd9, 0x62, 0x1a, - 0x07, 0xe6, 0x37, 0xc9, 0xcd, 0x63, 0x64, 0x29, 0xd6, 0x30, 0x32, 0x5c, 0xe0, 0x8a, 0x0f, 0xcf, - 0x05, 0xae, 0x74, 0x4c, 0x17, 0xb8, 0xa1, 0x81, 0x5c, 0xe0, 0x30, 0x3c, 0x22, 0x59, 0x24, 0xfa, - 0x7f, 0xc5, 0xf5, 0x88, 0xe0, 0x8b, 0xb9, 0x37, 0xe5, 0xdc, 0xe1, 0x41, 0xe5, 0x11, 0x9c, 0x89, - 0x81, 0x73, 0x6a, 0xa2, 0xcf, 0xc1, 0xac, 0xe3, 0x79, 0xc1, 0x3d, 0x35, 0x6a, 0xcb, 0x51, 0xd3, - 0xf1, 0xb8, 0xc6, 0x7e, 0x84, 0x51, 0x7d, 0xfc, 0xf0, 0xa0, 0x32, 0xbb, 0x90, 0x83, 0x83, 0x73, - 0x6b, 0xa7, 0x3c, 0xe8, 0x46, 0xfb, 0x7a, 0xd0, 0xbd, 0x06, 0xe5, 0x76, 0x18, 0x34, 0x57, 0x35, - 0xaf, 0x9e, 0x8b, 0x2c, 0xf3, 0xbd, 0x2c, 0x3c, 0x3a, 0xa8, 0x4c, 0xa8, 0x3f, 0xec, 0x86, 0x4f, - 0x2a, 0xd8, 0x3b, 0x70, 0xa6, 0x41, 0x42, 0x97, 0xe5, 0xd4, 0x6c, 0x25, 0x1b, 0x7a, 0x1d, 0xca, - 0x61, 0xea, 0x08, 0x1b, 0x28, 0x40, 0x93, 0x16, 0x37, 0x58, 0x1e, 0x59, 0x09, 0x21, 0xfb, 0x4f, - 0x2c, 0x18, 0x11, 0x16, 0xe6, 0xa7, 0xc0, 0x39, 0x2d, 0x18, 0x0a, 0xec, 0x4a, 0xf6, 0x31, 0xcf, - 0x3a, 0x93, 0xab, 0xba, 0xae, 0xa5, 0x54, 0xd7, 0x4f, 0xf4, 0x22, 0xd2, 0x5b, 0x69, 0xfd, 0x77, - 0x8b, 0x30, 0x69, 0x3a, 0x85, 0x9c, 0xc2, 0x10, 0xac, 0xc1, 0x48, 0x24, 0x3c, 0x90, 0x0a, 0xf9, - 0x96, 0xd3, 0xe9, 0x49, 0x4c, 0xcc, 0xa2, 0x84, 0xcf, 0x91, 0x24, 0x92, 0xe9, 0xda, 0x54, 0x7c, - 0x88, 0xae, 0x4d, 0xfd, 0xfc, 0x72, 0x4a, 0x27, 0xe1, 0x97, 0x63, 0x7f, 0x9d, 0x5d, 0x35, 0x7a, - 0xf9, 0x29, 0x70, 0x21, 0xd7, 0xcd, 0x4b, 0xc9, 0xee, 0xb1, 0xb2, 0x44, 0xa7, 0x72, 0xb8, 0x91, - 0x9f, 0xb7, 0xe0, 0x42, 0xc6, 0x57, 0x69, 0xac, 0xc9, 0xb3, 0x30, 0xea, 0x74, 0x5a, 0xae, 0xda, - 0xcb, 0xda, 0x33, 0xd6, 0x82, 0x28, 0xc7, 0x0a, 0x03, 0x2d, 0xc1, 0x0c, 0xb9, 0xdf, 0x76, 0xf9, - 0x3b, 0xa2, 0x6e, 0xbb, 0x58, 0xe4, 0x41, 0x6b, 0x97, 0xd3, 0x40, 0xdc, 0x8d, 0xaf, 0xdc, 0xba, - 0x8b, 0xb9, 0x6e, 0xdd, 0xff, 0xc4, 0x82, 0x31, 0xe5, 0x6d, 0xf2, 0xd0, 0x47, 0xfb, 0x3b, 0xcc, - 0xd1, 0x7e, 0xac, 0xc7, 0x68, 0xe7, 0x0c, 0xf3, 0xdf, 0x2f, 0xa8, 0xfe, 0xd6, 0x83, 0x30, 0x1e, - 0x80, 0xe5, 0x79, 0x05, 0x46, 0xdb, 0x61, 0x10, 0x07, 0xcd, 0xc0, 0x13, 0x1c, 0xcf, 0xe3, 0x49, - 0xd4, 0x01, 0x5e, 0x7e, 0xa4, 0xfd, 0xc6, 0x0a, 0x9b, 0x8d, 0x5e, 0x10, 0xc6, 0x82, 0xcb, 0x48, - 0x46, 0x2f, 0x08, 0x63, 0xcc, 0x20, 0xa8, 0x05, 0x10, 0x3b, 0xe1, 0x16, 0x89, 0x69, 0x99, 0x08, - 0x60, 0x92, 0x7f, 0x78, 0x74, 0x62, 0xd7, 0x9b, 0x77, 0xfd, 0x38, 0x8a, 0xc3, 0xf9, 0x9a, 0x1f, - 0xdf, 0x0e, 0xb9, 0x00, 0xa5, 0x85, 0x11, 0x50, 0xb4, 0xb0, 0x46, 0x57, 0xfa, 0x7a, 0xb2, 0x36, - 0x86, 0xcc, 0x07, 0xf1, 0x35, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0x32, 0xbb, 0x4a, 0xd8, 0x00, 0x1d, - 0xcf, 0xc3, 0xff, 0x1b, 0xa3, 0x6a, 0x68, 0xd9, 0x6b, 0x58, 0x55, 0x8f, 0x23, 0xd0, 0xfb, 0xe4, - 0xa6, 0x0d, 0xeb, 0x7e, 0x34, 0x49, 0xb0, 0x01, 0xf4, 0x9d, 0x5d, 0x76, 0x12, 0xcf, 0xf5, 0xb9, - 0x02, 0x8e, 0x61, 0x19, 0xc1, 0x02, 0x69, 0xb3, 0x30, 0xc3, 0xb5, 0xba, 0x58, 0xe4, 0x5a, 0x20, - 0x6d, 0x01, 0xc0, 0x09, 0x0e, 0xba, 0x2a, 0xc4, 0xef, 0x92, 0x91, 0x4e, 0x4f, 0x8a, 0xdf, 0xf2, - 0xf3, 0x35, 0xf9, 0xfb, 0x79, 0x18, 0x53, 0x69, 0xf5, 0xea, 0x3c, 0x3b, 0x99, 0x08, 0xe7, 0xb2, - 0x9c, 0x14, 0x63, 0x1d, 0x07, 0xad, 0xc3, 0x54, 0xc4, 0x75, 0x2f, 0x2a, 0x6a, 0x1f, 0xd7, 0x61, - 0x7d, 0x52, 0xda, 0x57, 0x34, 0x4c, 0xf0, 0x11, 0x2b, 0xe2, 0x47, 0x87, 0x74, 0xd8, 0x4c, 0x93, - 0x40, 0xaf, 0xc3, 0xa4, 0xa7, 0x27, 0xb0, 0xaf, 0x0b, 0x15, 0x97, 0x32, 0x3f, 0x36, 0xd2, 0xdb, - 0xd7, 0x71, 0x0a, 0x9b, 0x72, 0x4a, 0x7a, 0x89, 0x88, 0x34, 0xe9, 0xf8, 0x5b, 0x24, 0x12, 0x49, - 0xc1, 0x18, 0xa7, 0x74, 0x2b, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0xaf, 0xc0, 0xb8, 0xfc, 0x7c, 0xcd, - 0x1d, 0x39, 0x31, 0x72, 0xd7, 0x60, 0xd8, 0xc0, 0x44, 0xf7, 0xe0, 0x9c, 0xfc, 0xbf, 0x1e, 0x3a, - 0x9b, 0x9b, 0x6e, 0x53, 0x78, 0x83, 0x73, 0x4f, 0x9f, 0x05, 0xe9, 0x3a, 0xb4, 0x9c, 0x85, 0x74, - 0x74, 0x50, 0xb9, 0x24, 0x46, 0x2d, 0x13, 0xce, 0x26, 0x31, 0x9b, 0x3e, 0x5a, 0x85, 0x33, 0xdb, - 0xc4, 0xf1, 0xe2, 0xed, 0xa5, 0x6d, 0xd2, 0xdc, 0x91, 0x9b, 0x88, 0x39, 0x39, 0x6b, 0xa6, 0xe1, - 0x37, 0xba, 0x51, 0x70, 0x56, 0x3d, 0xf4, 0x0e, 0xcc, 0xb6, 0x3b, 0x1b, 0x9e, 0x1b, 0x6d, 0xaf, - 0x05, 0x31, 0x33, 0xe9, 0x50, 0x59, 0xe9, 0x84, 0x37, 0xb4, 0x72, 0xf0, 0xae, 0xe7, 0xe0, 0xe1, - 0x5c, 0x0a, 0xe8, 0x7d, 0x38, 0x97, 0x5a, 0x0c, 0xc2, 0x37, 0x73, 0x32, 0x3f, 0x6e, 0x6f, 0x23, - 0xab, 0x82, 0xf0, 0xb5, 0xcc, 0x02, 0xe1, 0xec, 0x26, 0x3e, 0x98, 0xa1, 0xcf, 0x7b, 0xb4, 0xb2, - 0xc6, 0x94, 0xa1, 0x2f, 0xc1, 0xb8, 0xbe, 0x8a, 0xc4, 0x05, 0x73, 0x39, 0x9b, 0x67, 0xd1, 0x56, - 0x1b, 0x67, 0xe9, 0xd4, 0x8a, 0xd2, 0x61, 0xd8, 0xa0, 0x68, 0x13, 0xc8, 0xfe, 0x3e, 0x74, 0x0b, - 0x46, 0x9b, 0x9e, 0x4b, 0xfc, 0xb8, 0x56, 0xef, 0x15, 0x3c, 0x64, 0x49, 0xe0, 0x88, 0x01, 0x13, - 0x81, 0x4e, 0x79, 0x19, 0x56, 0x14, 0xec, 0x5f, 0x2b, 0x40, 0xa5, 0x4f, 0xd4, 0xdc, 0x94, 0x3e, - 0xda, 0x1a, 0x48, 0x1f, 0xbd, 0x20, 0x73, 0xec, 0xad, 0xa5, 0x84, 0xf4, 0x54, 0xfe, 0xbc, 0x44, - 0x54, 0x4f, 0xe3, 0x0f, 0x6c, 0x1f, 0xac, 0xab, 0xb4, 0x4b, 0x7d, 0x2d, 0xd7, 0x8d, 0xa7, 0xac, - 0xa1, 0xc1, 0x05, 0x91, 0xdc, 0x67, 0x09, 0xfb, 0xeb, 0x05, 0x38, 0xa7, 0x86, 0xf0, 0x2f, 0xee, - 0xc0, 0xdd, 0xe9, 0x1e, 0xb8, 0x13, 0x78, 0xd4, 0xb1, 0x6f, 0xc3, 0x30, 0x0f, 0xbe, 0x32, 0x00, - 0x03, 0xf4, 0xa4, 0x19, 0xa9, 0x4b, 0x5d, 0xd3, 0x46, 0xb4, 0xae, 0xbf, 0x66, 0xc1, 0xd4, 0xfa, - 0x52, 0xbd, 0x11, 0x34, 0x77, 0x48, 0xbc, 0xc0, 0x19, 0x56, 0x2c, 0xf8, 0x1f, 0xeb, 0x01, 0xf9, - 0x9a, 0x2c, 0x8e, 0xe9, 0x12, 0x94, 0xb6, 0x83, 0x28, 0x4e, 0xbf, 0xf8, 0xde, 0x08, 0xa2, 0x18, - 0x33, 0x88, 0xfd, 0x3b, 0x16, 0x0c, 0xb1, 0xcc, 0xb0, 0xfd, 0xd2, 0x15, 0x0f, 0xf2, 0x5d, 0xe8, - 0x25, 0x18, 0x26, 0x9b, 0x9b, 0xa4, 0x19, 0x8b, 0x59, 0x95, 0xee, 0xa8, 0xc3, 0xcb, 0xac, 0x94, - 0x5e, 0xfa, 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, 0xf4, 0x16, 0x94, 0x63, 0x77, 0x97, 0x2c, 0xb4, - 0x5a, 0xe2, 0xcd, 0xec, 0x01, 0xbc, 0x7f, 0xd7, 0x25, 0x01, 0x9c, 0xd0, 0xb2, 0xbf, 0x5a, 0x00, - 0x48, 0x42, 0x08, 0xf4, 0xfb, 0xc4, 0xc5, 0xae, 0xd7, 0x94, 0xcb, 0x19, 0xaf, 0x29, 0x28, 0x21, - 0x98, 0xf1, 0x94, 0xa2, 0x86, 0xa9, 0x38, 0xd0, 0x30, 0x95, 0x8e, 0x33, 0x4c, 0x4b, 0x30, 0x93, - 0x84, 0x40, 0x30, 0xe3, 0xc1, 0x30, 0x21, 0x65, 0x3d, 0x0d, 0xc4, 0xdd, 0xf8, 0x36, 0x81, 0x4b, - 0x32, 0x32, 0xa7, 0xbc, 0x6b, 0x98, 0x49, 0xe6, 0x31, 0x32, 0x57, 0x27, 0xcf, 0x45, 0x85, 0xdc, - 0xe7, 0xa2, 0x1f, 0xb7, 0xe0, 0x6c, 0xba, 0x1d, 0xe6, 0xfb, 0xf6, 0x15, 0x0b, 0xce, 0xb1, 0x47, - 0x33, 0xd6, 0x6a, 0xf7, 0x13, 0xdd, 0x8b, 0xd9, 0xa1, 0x21, 0x7a, 0xf7, 0x38, 0xf1, 0x7b, 0x5e, - 0xcd, 0x22, 0x8d, 0xb3, 0x5b, 0xb4, 0xbf, 0x62, 0xc1, 0xf9, 0xdc, 0x84, 0x44, 0xe8, 0x0a, 0x8c, - 0x3a, 0x6d, 0x97, 0x6b, 0xa4, 0xc4, 0x7e, 0x67, 0xd2, 0x63, 0xbd, 0xc6, 0xf5, 0x51, 0x0a, 0xaa, - 0x12, 0x25, 0x16, 0x72, 0x13, 0x25, 0xf6, 0xcd, 0x7b, 0x68, 0x7f, 0xbf, 0x05, 0xc2, 0xdd, 0x69, - 0x80, 0x43, 0xe6, 0x6d, 0x99, 0x67, 0xd6, 0x08, 0x8a, 0x7e, 0x29, 0xdf, 0xff, 0x4b, 0x84, 0x42, - 0x57, 0x97, 0xba, 0x11, 0x00, 0xdd, 0xa0, 0x65, 0xb7, 0x40, 0x40, 0xab, 0x84, 0xe9, 0xac, 0xfa, - 0xf7, 0xe6, 0x1a, 0x40, 0x8b, 0xe1, 0x6a, 0xd9, 0x26, 0xd5, 0x15, 0x52, 0x55, 0x10, 0xac, 0x61, - 0xd9, 0x3f, 0x54, 0x80, 0x31, 0x19, 0x84, 0xbb, 0xe3, 0x0f, 0x22, 0x59, 0x1e, 0x2b, 0x2b, 0x0f, - 0x4b, 0xcf, 0x4a, 0x09, 0xd7, 0x13, 0x81, 0x3c, 0x49, 0xcf, 0x2a, 0x01, 0x38, 0xc1, 0x41, 0x4f, - 0xc3, 0x48, 0xd4, 0xd9, 0x60, 0xe8, 0x29, 0x27, 0x9e, 0x06, 0x2f, 0xc6, 0x12, 0x8e, 0x3e, 0x07, - 0xd3, 0xbc, 0x5e, 0x18, 0xb4, 0x9d, 0x2d, 0xae, 0xfe, 0x1c, 0x52, 0x5e, 0xb5, 0xd3, 0xab, 0x29, - 0xd8, 0xd1, 0x41, 0xe5, 0x6c, 0xba, 0x8c, 0x29, 0xce, 0xbb, 0xa8, 0xd8, 0x5f, 0x02, 0xd4, 0x1d, - 0x57, 0x1c, 0xbd, 0xc1, 0x4d, 0xa9, 0xdc, 0x90, 0xb4, 0x7a, 0x69, 0xc4, 0x75, 0x27, 0x50, 0x69, - 0x48, 0xcf, 0x6b, 0x61, 0x55, 0xdf, 0xfe, 0x9b, 0x45, 0x98, 0x4e, 0xbb, 0x04, 0xa2, 0x1b, 0x30, - 0xcc, 0x2f, 0x3b, 0x41, 0xbe, 0xc7, 0x83, 0xab, 0xe6, 0x48, 0xc8, 0xb6, 0xbd, 0xb8, 0x2f, 0x45, - 0x7d, 0xf4, 0x0e, 0x8c, 0xb5, 0x82, 0x7b, 0xfe, 0x3d, 0x27, 0x6c, 0x2d, 0xd4, 0x6b, 0x62, 0x5d, - 0x66, 0xf2, 0xcc, 0xd5, 0x04, 0x4d, 0x77, 0x4e, 0x64, 0x8f, 0x0b, 0x09, 0x08, 0xeb, 0xe4, 0xd0, - 0x3a, 0x8b, 0x95, 0xb8, 0xe9, 0x6e, 0xad, 0x3a, 0xed, 0x5e, 0x76, 0xb5, 0x4b, 0x12, 0x49, 0xa3, - 0x3c, 0x21, 0x02, 0x2a, 0x72, 0x00, 0x4e, 0x08, 0xa1, 0xef, 0x86, 0x33, 0x51, 0x8e, 0x9a, 0x2d, - 0x2f, 0xcd, 0x44, 0x2f, 0xcd, 0xd3, 0xe2, 0xa3, 0x54, 0x9a, 0xc9, 0x52, 0xc8, 0x65, 0x35, 0x63, - 0x7f, 0xf9, 0x0c, 0x18, 0xbb, 0xd1, 0xc8, 0x3a, 0x64, 0x9d, 0x50, 0xd6, 0x21, 0x0c, 0xa3, 0x64, - 0xb7, 0x1d, 0xef, 0x57, 0xdd, 0xb0, 0x57, 0x56, 0xbc, 0x65, 0x81, 0xd3, 0x4d, 0x53, 0x42, 0xb0, - 0xa2, 0x93, 0x9d, 0x1a, 0xaa, 0xf8, 0x21, 0xa6, 0x86, 0x2a, 0x9d, 0x62, 0x6a, 0xa8, 0x35, 0x18, - 0xd9, 0x72, 0x63, 0x4c, 0xda, 0x81, 0x60, 0x33, 0x33, 0xd7, 0xe1, 0x75, 0x8e, 0xd2, 0x9d, 0x84, - 0x44, 0x00, 0xb0, 0x24, 0x82, 0xde, 0x50, 0x3b, 0x70, 0x38, 0x5f, 0x4a, 0xeb, 0x7e, 0x19, 0xcc, - 0xdc, 0x83, 0x22, 0x01, 0xd4, 0xc8, 0x83, 0x26, 0x80, 0x5a, 0x91, 0x69, 0x9b, 0x46, 0xf3, 0x8d, - 0xe0, 0x59, 0x56, 0xa6, 0x3e, 0xc9, 0x9a, 0xee, 0xea, 0xa9, 0xae, 0xca, 0xf9, 0x27, 0x81, 0xca, - 0x62, 0x35, 0x60, 0x82, 0xab, 0xef, 0xb7, 0xe0, 0x5c, 0x3b, 0x2b, 0xeb, 0x9b, 0x48, 0xb6, 0xf4, - 0xd2, 0xc0, 0x69, 0xed, 0x8c, 0x06, 0x99, 0xb8, 0x9e, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, - 0x6e, 0xb4, 0x44, 0x86, 0xa6, 0x27, 0x73, 0x32, 0x65, 0xf5, 0xc8, 0x8f, 0xb5, 0x9e, 0x91, 0x95, - 0xe9, 0xe3, 0x79, 0x59, 0x99, 0x06, 0xce, 0xc5, 0xf4, 0x86, 0xca, 0x91, 0x35, 0x91, 0xbf, 0x94, - 0x78, 0x06, 0xac, 0xbe, 0x99, 0xb1, 0xde, 0x50, 0x99, 0xb1, 0x7a, 0xc4, 0x8c, 0xe3, 0x79, 0xaf, - 0xfa, 0xe6, 0xc3, 0xd2, 0x72, 0x5a, 0x4d, 0x9d, 0x4c, 0x4e, 0x2b, 0xe3, 0xaa, 0xe1, 0x69, 0x95, - 0x9e, 0xe9, 0x73, 0xd5, 0x18, 0x74, 0x7b, 0x5f, 0x36, 0x3c, 0x7f, 0xd7, 0xcc, 0x03, 0xe5, 0xef, - 0xba, 0xab, 0xe7, 0xc3, 0x42, 0x7d, 0x12, 0x3e, 0x51, 0xa4, 0x01, 0xb3, 0x60, 0xdd, 0xd5, 0x2f, - 0xc0, 0x33, 0xf9, 0x74, 0xd5, 0x3d, 0xd7, 0x4d, 0x37, 0xf3, 0x0a, 0xec, 0xca, 0xae, 0x75, 0xf6, - 0x74, 0xb2, 0x6b, 0x9d, 0x3b, 0xf1, 0xec, 0x5a, 0x8f, 0x9c, 0x42, 0x76, 0xad, 0x47, 0x3f, 0xd4, - 0xec, 0x5a, 0xb3, 0x0f, 0x21, 0xbb, 0xd6, 0x5a, 0x92, 0x5d, 0xeb, 0x7c, 0xfe, 0x94, 0x64, 0x58, - 0xe6, 0xe6, 0xe4, 0xd4, 0xba, 0xcb, 0x9e, 0xe7, 0x79, 0xcc, 0x0a, 0x11, 0xd4, 0x2e, 0x3b, 0x93, - 0x70, 0x56, 0x60, 0x0b, 0x3e, 0x25, 0x0a, 0x84, 0x13, 0x52, 0x94, 0x6e, 0x92, 0x63, 0xeb, 0xb1, - 0x1e, 0x0a, 0xd9, 0x2c, 0x55, 0x57, 0x7e, 0x66, 0x2d, 0xfb, 0xaf, 0x17, 0xe0, 0x62, 0xef, 0x75, - 0x9d, 0xe8, 0xc9, 0xea, 0xc9, 0xbb, 0x4e, 0x4a, 0x4f, 0xc6, 0x85, 0x9c, 0x04, 0x6b, 0xe0, 0xc0, - 0x3e, 0xd7, 0x61, 0x46, 0x99, 0xe4, 0x7a, 0x6e, 0x73, 0x5f, 0xcb, 0x30, 0xac, 0x5c, 0x0f, 0x1b, - 0x69, 0x04, 0xdc, 0x5d, 0x07, 0x2d, 0xc0, 0x94, 0x51, 0x58, 0xab, 0x0a, 0x61, 0x46, 0x29, 0xe6, - 0x1a, 0x26, 0x18, 0xa7, 0xf1, 0xed, 0x9f, 0xb6, 0xe0, 0xd1, 0x9c, 0xc4, 0x13, 0x03, 0xc7, 0xad, - 0xd9, 0x84, 0xa9, 0xb6, 0x59, 0xb5, 0x4f, 0x78, 0x2b, 0x23, 0xbd, 0x85, 0xea, 0x6b, 0x0a, 0x80, - 0xd3, 0x44, 0x17, 0xaf, 0xfc, 0xe6, 0xef, 0x5d, 0xfc, 0xd8, 0x6f, 0xfd, 0xde, 0xc5, 0x8f, 0xfd, - 0xf6, 0xef, 0x5d, 0xfc, 0xd8, 0x5f, 0x3e, 0xbc, 0x68, 0xfd, 0xe6, 0xe1, 0x45, 0xeb, 0xb7, 0x0e, - 0x2f, 0x5a, 0xbf, 0x7d, 0x78, 0xd1, 0xfa, 0xdd, 0xc3, 0x8b, 0xd6, 0x57, 0x7f, 0xff, 0xe2, 0xc7, - 0xde, 0x2e, 0xec, 0x3d, 0xff, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x84, 0x97, 0x9c, 0xb4, 0x50, - 0xe8, 0x00, 0x00, + // 12934 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x64, 0x57, + 0x56, 0x18, 0xbe, 0xaf, 0xbb, 0x25, 0x75, 0x1f, 0x7d, 0xdf, 0x99, 0xb1, 0x35, 0xf2, 0xcc, 0xf4, + 0xf8, 0x79, 0x77, 0x3c, 0x5e, 0xdb, 0xd2, 0x7a, 0x6c, 0xaf, 0xcd, 0xda, 0x6b, 0x90, 0xd4, 0xd2, + 0x4c, 0x7b, 0x46, 0x9a, 0xf6, 0x6d, 0xcd, 0x78, 0xd7, 0x78, 0x17, 0x3f, 0x75, 0x5f, 0x49, 0xcf, + 0x6a, 0xbd, 0xd7, 0x7e, 0xef, 0xb5, 0x66, 0xe4, 0x1f, 0xd4, 0x2f, 0x59, 0x02, 0x61, 0x03, 0x95, + 0xda, 0x4a, 0xb6, 0xf2, 0x01, 0x14, 0xa9, 0x22, 0xa4, 0x80, 0x90, 0xa4, 0x42, 0x20, 0x40, 0x58, + 0x48, 0x08, 0x24, 0x55, 0x24, 0x7f, 0x6c, 0x48, 0xaa, 0x52, 0x4b, 0x15, 0x15, 0x05, 0x44, 0x2a, + 0x29, 0xfe, 0x08, 0xa4, 0x42, 0xfe, 0x08, 0x0a, 0x15, 0x52, 0xf7, 0xf3, 0xdd, 0xfb, 0xfa, 0xbd, + 0xee, 0xd6, 0x58, 0x23, 0x9b, 0xad, 0xfd, 0xaf, 0xfb, 0x9e, 0x73, 0xcf, 0xbd, 0xef, 0x7e, 0x9e, + 0x73, 0xee, 0xf9, 0x80, 0x57, 0x76, 0x5e, 0x0e, 0xe7, 0x5c, 0x7f, 0x7e, 0xa7, 0xb3, 0x41, 0x02, + 0x8f, 0x44, 0x24, 0x9c, 0xdf, 0x23, 0x5e, 0xd3, 0x0f, 0xe6, 0x05, 0xc0, 0x69, 0xbb, 0xf3, 0x0d, + 0x3f, 0x20, 0xf3, 0x7b, 0xcf, 0xcd, 0x6f, 0x11, 0x8f, 0x04, 0x4e, 0x44, 0x9a, 0x73, 0xed, 0xc0, + 0x8f, 0x7c, 0x84, 0x38, 0xce, 0x9c, 0xd3, 0x76, 0xe7, 0x28, 0xce, 0xdc, 0xde, 0x73, 0xb3, 0xcf, + 0x6e, 0xb9, 0xd1, 0x76, 0x67, 0x63, 0xae, 0xe1, 0xef, 0xce, 0x6f, 0xf9, 0x5b, 0xfe, 0x3c, 0x43, + 0xdd, 0xe8, 0x6c, 0xb2, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xbe, 0x10, 0x37, 0xb3, 0xeb, + 0x34, 0xb6, 0x5d, 0x8f, 0x04, 0xfb, 0xf3, 0xed, 0x9d, 0x2d, 0xd6, 0x6e, 0x40, 0x42, 0xbf, 0x13, + 0x34, 0x48, 0xb2, 0xe1, 0x9e, 0xb5, 0xc2, 0xf9, 0x5d, 0x12, 0x39, 0x29, 0xdd, 0x9d, 0x9d, 0xcf, + 0xaa, 0x15, 0x74, 0xbc, 0xc8, 0xdd, 0xed, 0x6e, 0xe6, 0xd3, 0xfd, 0x2a, 0x84, 0x8d, 0x6d, 0xb2, + 0xeb, 0x74, 0xd5, 0x7b, 0x3e, 0xab, 0x5e, 0x27, 0x72, 0x5b, 0xf3, 0xae, 0x17, 0x85, 0x51, 0x90, + 0xac, 0x64, 0x7f, 0xc3, 0x82, 0xcb, 0x0b, 0x6f, 0xd6, 0x97, 0x5b, 0x4e, 0x18, 0xb9, 0x8d, 0xc5, + 0x96, 0xdf, 0xd8, 0xa9, 0x47, 0x7e, 0x40, 0xee, 0xfa, 0xad, 0xce, 0x2e, 0xa9, 0xb3, 0x81, 0x40, + 0xcf, 0x40, 0x71, 0x8f, 0xfd, 0xaf, 0x56, 0x66, 0xac, 0xcb, 0xd6, 0xd5, 0xd2, 0xe2, 0xd4, 0x6f, + 0x1e, 0x94, 0x3f, 0x76, 0x78, 0x50, 0x2e, 0xde, 0x15, 0xe5, 0x58, 0x61, 0xa0, 0x2b, 0x30, 0xbc, + 0x19, 0xae, 0xef, 0xb7, 0xc9, 0x4c, 0x8e, 0xe1, 0x4e, 0x08, 0xdc, 0xe1, 0x95, 0x3a, 0x2d, 0xc5, + 0x02, 0x8a, 0xe6, 0xa1, 0xd4, 0x76, 0x82, 0xc8, 0x8d, 0x5c, 0xdf, 0x9b, 0xc9, 0x5f, 0xb6, 0xae, + 0x0e, 0x2d, 0x4e, 0x0b, 0xd4, 0x52, 0x4d, 0x02, 0x70, 0x8c, 0x43, 0xbb, 0x11, 0x10, 0xa7, 0x79, + 0xdb, 0x6b, 0xed, 0xcf, 0x14, 0x2e, 0x5b, 0x57, 0x8b, 0x71, 0x37, 0xb0, 0x28, 0xc7, 0x0a, 0xc3, + 0xfe, 0xe1, 0x1c, 0x14, 0x17, 0x36, 0x37, 0x5d, 0xcf, 0x8d, 0xf6, 0xd1, 0x5d, 0x18, 0xf3, 0xfc, + 0x26, 0x91, 0xff, 0xd9, 0x57, 0x8c, 0x5e, 0xbb, 0x3c, 0xd7, 0xbd, 0x94, 0xe6, 0xd6, 0x34, 0xbc, + 0xc5, 0xa9, 0xc3, 0x83, 0xf2, 0x98, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x68, 0xdb, 0x6f, 0x2a, + 0xb2, 0x39, 0x46, 0xb6, 0x9c, 0x46, 0xb6, 0x16, 0xa3, 0x2d, 0x4e, 0x1e, 0x1e, 0x94, 0x47, 0xb5, + 0x02, 0xac, 0x13, 0x41, 0x1b, 0x30, 0x49, 0xff, 0x7a, 0x91, 0xab, 0xe8, 0xe6, 0x19, 0xdd, 0x27, + 0xb2, 0xe8, 0x6a, 0xa8, 0x8b, 0x67, 0x0e, 0x0f, 0xca, 0x93, 0x89, 0x42, 0x9c, 0x24, 0x68, 0xbf, + 0x0f, 0x13, 0x0b, 0x51, 0xe4, 0x34, 0xb6, 0x49, 0x93, 0xcf, 0x20, 0x7a, 0x01, 0x0a, 0x9e, 0xb3, + 0x4b, 0xc4, 0xfc, 0x5e, 0x16, 0x03, 0x5b, 0x58, 0x73, 0x76, 0xc9, 0xd1, 0x41, 0x79, 0xea, 0x8e, + 0xe7, 0xbe, 0xd7, 0x11, 0xab, 0x82, 0x96, 0x61, 0x86, 0x8d, 0xae, 0x01, 0x34, 0xc9, 0x9e, 0xdb, + 0x20, 0x35, 0x27, 0xda, 0x16, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x28, 0x08, 0xd6, 0xb0, 0xec, 0xfb, + 0x50, 0x5a, 0xd8, 0xf3, 0xdd, 0x66, 0xcd, 0x6f, 0x86, 0x68, 0x07, 0x26, 0xdb, 0x01, 0xd9, 0x24, + 0x81, 0x2a, 0x9a, 0xb1, 0x2e, 0xe7, 0xaf, 0x8e, 0x5e, 0xbb, 0x9a, 0xfa, 0xb1, 0x26, 0xea, 0xb2, + 0x17, 0x05, 0xfb, 0x8b, 0x8f, 0x8a, 0xf6, 0x26, 0x13, 0x50, 0x9c, 0xa4, 0x6c, 0xff, 0xab, 0x1c, + 0x9c, 0x5b, 0x78, 0xbf, 0x13, 0x90, 0x8a, 0x1b, 0xee, 0x24, 0x57, 0x78, 0xd3, 0x0d, 0x77, 0xd6, + 0xe2, 0x11, 0x50, 0x4b, 0xab, 0x22, 0xca, 0xb1, 0xc2, 0x40, 0xcf, 0xc2, 0x08, 0xfd, 0x7d, 0x07, + 0x57, 0xc5, 0x27, 0x9f, 0x11, 0xc8, 0xa3, 0x15, 0x27, 0x72, 0x2a, 0x1c, 0x84, 0x25, 0x0e, 0x5a, + 0x85, 0xd1, 0x06, 0xdb, 0x90, 0x5b, 0xab, 0x7e, 0x93, 0xb0, 0xc9, 0x2c, 0x2d, 0x3e, 0x4d, 0xd1, + 0x97, 0xe2, 0xe2, 0xa3, 0x83, 0xf2, 0x0c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, + 0x6a, 0x7f, 0x15, 0x18, 0x25, 0x48, 0xd9, 0x5b, 0x57, 0xb5, 0xad, 0x32, 0xc4, 0xb6, 0xca, 0x58, + 0xfa, 0x36, 0x41, 0xcf, 0x41, 0x61, 0xc7, 0xf5, 0x9a, 0x33, 0xc3, 0x8c, 0xd6, 0x45, 0x3a, 0xe7, + 0x37, 0x5d, 0xaf, 0x79, 0x74, 0x50, 0x9e, 0x36, 0xba, 0x43, 0x0b, 0x31, 0x43, 0xb5, 0xff, 0xd8, + 0x82, 0x32, 0x83, 0xad, 0xb8, 0x2d, 0x52, 0x23, 0x41, 0xe8, 0x86, 0x11, 0xf1, 0x22, 0x63, 0x40, + 0xaf, 0x01, 0x84, 0xa4, 0x11, 0x90, 0x48, 0x1b, 0x52, 0xb5, 0x30, 0xea, 0x0a, 0x82, 0x35, 0x2c, + 0x7a, 0x20, 0x84, 0xdb, 0x4e, 0xc0, 0xd6, 0x97, 0x18, 0x58, 0x75, 0x20, 0xd4, 0x25, 0x00, 0xc7, + 0x38, 0xc6, 0x81, 0x90, 0xef, 0x77, 0x20, 0xa0, 0xcf, 0xc2, 0x64, 0xdc, 0x58, 0xd8, 0x76, 0x1a, + 0x72, 0x00, 0xd9, 0x96, 0xa9, 0x9b, 0x20, 0x9c, 0xc4, 0xb5, 0xff, 0xbe, 0x25, 0x16, 0x0f, 0xfd, + 0xea, 0x8f, 0xf8, 0xb7, 0xda, 0xbf, 0x64, 0xc1, 0xc8, 0xa2, 0xeb, 0x35, 0x5d, 0x6f, 0x0b, 0xbd, + 0x03, 0x45, 0x7a, 0x37, 0x35, 0x9d, 0xc8, 0x11, 0xe7, 0xde, 0xa7, 0xb4, 0xbd, 0xa5, 0xae, 0x8a, + 0xb9, 0xf6, 0xce, 0x16, 0x2d, 0x08, 0xe7, 0x28, 0x36, 0xdd, 0x6d, 0xb7, 0x37, 0xde, 0x25, 0x8d, + 0x68, 0x95, 0x44, 0x4e, 0xfc, 0x39, 0x71, 0x19, 0x56, 0x54, 0xd1, 0x4d, 0x18, 0x8e, 0x9c, 0x60, + 0x8b, 0x44, 0xe2, 0x00, 0x4c, 0x3d, 0xa8, 0x78, 0x4d, 0x4c, 0x77, 0x24, 0xf1, 0x1a, 0x24, 0xbe, + 0x16, 0xd6, 0x59, 0x55, 0x2c, 0x48, 0xd8, 0x7f, 0x65, 0x18, 0xce, 0x2f, 0xd5, 0xab, 0x19, 0xeb, + 0xea, 0x0a, 0x0c, 0x37, 0x03, 0x77, 0x8f, 0x04, 0x62, 0x9c, 0x15, 0x95, 0x0a, 0x2b, 0xc5, 0x02, + 0x8a, 0x5e, 0x86, 0x31, 0x7e, 0x21, 0xdd, 0x70, 0xbc, 0x66, 0x4b, 0x0e, 0xf1, 0x59, 0x81, 0x3d, + 0x76, 0x57, 0x83, 0x61, 0x03, 0xf3, 0x98, 0x8b, 0xea, 0x4a, 0x62, 0x33, 0x66, 0x5d, 0x76, 0x5f, + 0xb6, 0x60, 0x8a, 0x37, 0xb3, 0x10, 0x45, 0x81, 0xbb, 0xd1, 0x89, 0x48, 0x38, 0x33, 0xc4, 0x4e, + 0xba, 0xa5, 0xb4, 0xd1, 0xca, 0x1c, 0x81, 0xb9, 0xbb, 0x09, 0x2a, 0xfc, 0x10, 0x9c, 0x11, 0xed, + 0x4e, 0x25, 0xc1, 0xb8, 0xab, 0x59, 0xf4, 0xbd, 0x16, 0xcc, 0x36, 0x7c, 0x2f, 0x0a, 0xfc, 0x56, + 0x8b, 0x04, 0xb5, 0xce, 0x46, 0xcb, 0x0d, 0xb7, 0xf9, 0x3a, 0xc5, 0x64, 0x93, 0x9d, 0x04, 0x19, + 0x73, 0xa8, 0x90, 0xc4, 0x1c, 0x5e, 0x3a, 0x3c, 0x28, 0xcf, 0x2e, 0x65, 0x92, 0xc2, 0x3d, 0x9a, + 0x41, 0x3b, 0x80, 0xe8, 0x55, 0x5a, 0x8f, 0x9c, 0x2d, 0x12, 0x37, 0x3e, 0x32, 0x78, 0xe3, 0x8f, + 0x1c, 0x1e, 0x94, 0xd1, 0x5a, 0x17, 0x09, 0x9c, 0x42, 0x16, 0xbd, 0x07, 0x67, 0x69, 0x69, 0xd7, + 0xb7, 0x16, 0x07, 0x6f, 0x6e, 0xe6, 0xf0, 0xa0, 0x7c, 0x76, 0x2d, 0x85, 0x08, 0x4e, 0x25, 0x3d, + 0xbb, 0x04, 0xe7, 0x52, 0xa7, 0x0a, 0x4d, 0x41, 0x7e, 0x87, 0x70, 0x16, 0xa4, 0x84, 0xe9, 0x4f, + 0x74, 0x16, 0x86, 0xf6, 0x9c, 0x56, 0x47, 0xac, 0x52, 0xcc, 0xff, 0x7c, 0x26, 0xf7, 0xb2, 0x65, + 0xff, 0xeb, 0x3c, 0x4c, 0x2e, 0xd5, 0xab, 0x0f, 0xb4, 0x05, 0xf4, 0x3b, 0x20, 0xd7, 0xf3, 0x0e, + 0x88, 0x6f, 0x94, 0x7c, 0xe6, 0x8d, 0xf2, 0xff, 0xa7, 0xac, 0xdf, 0x02, 0x5b, 0xbf, 0xdf, 0x96, + 0xb1, 0x7e, 0x4f, 0x78, 0xd5, 0xee, 0x65, 0x4c, 0xe1, 0x10, 0x9b, 0xc2, 0x54, 0x76, 0xe1, 0x96, + 0xdf, 0x70, 0x5a, 0xc9, 0x73, 0xe7, 0x43, 0x99, 0xc7, 0x06, 0x8c, 0x2d, 0x39, 0x6d, 0x67, 0xc3, + 0x6d, 0xb9, 0x91, 0x4b, 0x42, 0xf4, 0x24, 0xe4, 0x9d, 0x66, 0x93, 0xb1, 0x3a, 0xa5, 0xc5, 0x73, + 0x87, 0x07, 0xe5, 0xfc, 0x42, 0x93, 0xde, 0xb9, 0xa0, 0xb0, 0xf6, 0x31, 0xc5, 0x40, 0x9f, 0x84, + 0x42, 0x33, 0xf0, 0xdb, 0x33, 0x39, 0x86, 0x49, 0x97, 0x7c, 0xa1, 0x12, 0xf8, 0xed, 0x04, 0x2a, + 0xc3, 0xb1, 0x7f, 0x2d, 0x07, 0x17, 0x96, 0x48, 0x7b, 0x7b, 0xa5, 0x9e, 0x71, 0x78, 0x5e, 0x85, + 0xe2, 0xae, 0xef, 0xb9, 0x91, 0x1f, 0x84, 0xa2, 0x69, 0xb6, 0x22, 0x56, 0x45, 0x19, 0x56, 0x50, + 0x74, 0x19, 0x0a, 0xed, 0x98, 0xa3, 0x1b, 0x93, 0xdc, 0x20, 0xe3, 0xe5, 0x18, 0x84, 0x62, 0x74, + 0x42, 0x12, 0x88, 0x15, 0xa3, 0x30, 0xee, 0x84, 0x24, 0xc0, 0x0c, 0x12, 0x5f, 0x8b, 0xf4, 0xc2, + 0x14, 0xc7, 0x63, 0xe2, 0x5a, 0xa4, 0x10, 0xac, 0x61, 0xa1, 0x1a, 0x94, 0xc2, 0xc4, 0xcc, 0x0e, + 0xb4, 0x39, 0xc7, 0xd9, 0xbd, 0xa9, 0x66, 0x32, 0x26, 0x62, 0x1c, 0xe7, 0xc3, 0x7d, 0xef, 0xcd, + 0xaf, 0xe5, 0x00, 0xf1, 0x21, 0xfc, 0x73, 0x36, 0x70, 0x77, 0xba, 0x07, 0x6e, 0xf0, 0x2d, 0x71, + 0x52, 0xa3, 0xf7, 0xbf, 0x2c, 0xb8, 0xb0, 0xe4, 0x7a, 0x4d, 0x12, 0x64, 0x2c, 0xc0, 0x87, 0x23, + 0x48, 0x1e, 0xef, 0xc6, 0x36, 0x96, 0x58, 0xe1, 0x04, 0x96, 0x98, 0xfd, 0x47, 0x16, 0x20, 0xfe, + 0xd9, 0x1f, 0xb9, 0x8f, 0xbd, 0xd3, 0xfd, 0xb1, 0x27, 0xb0, 0x2c, 0xec, 0x5b, 0x30, 0xb1, 0xd4, + 0x72, 0x89, 0x17, 0x55, 0x6b, 0x4b, 0xbe, 0xb7, 0xe9, 0x6e, 0xa1, 0xcf, 0xc0, 0x44, 0xe4, 0xee, + 0x12, 0xbf, 0x13, 0xd5, 0x49, 0xc3, 0xf7, 0x98, 0x18, 0x47, 0x25, 0x7a, 0x74, 0x78, 0x50, 0x9e, + 0x58, 0x37, 0x20, 0x38, 0x81, 0x69, 0xff, 0x0e, 0x1d, 0x3f, 0x7f, 0xb7, 0xed, 0x7b, 0xc4, 0x8b, + 0x96, 0x7c, 0xaf, 0xc9, 0xc5, 0xfd, 0xcf, 0x40, 0x21, 0xa2, 0xe3, 0xc1, 0xc7, 0xee, 0x8a, 0xdc, + 0x28, 0x74, 0x14, 0x8e, 0x0e, 0xca, 0x8f, 0x74, 0xd7, 0x60, 0xe3, 0xc4, 0xea, 0xa0, 0x6f, 0x83, + 0xe1, 0x30, 0x72, 0xa2, 0x4e, 0x28, 0x46, 0xf3, 0x71, 0x39, 0x9a, 0x75, 0x56, 0x7a, 0x74, 0x50, + 0x9e, 0x54, 0xd5, 0x78, 0x11, 0x16, 0x15, 0xd0, 0x53, 0x30, 0xb2, 0x4b, 0xc2, 0xd0, 0xd9, 0x92, + 0xb7, 0xe1, 0xa4, 0xa8, 0x3b, 0xb2, 0xca, 0x8b, 0xb1, 0x84, 0xa3, 0x27, 0x60, 0x88, 0x04, 0x81, + 0x1f, 0x88, 0x3d, 0x3a, 0x2e, 0x10, 0x87, 0x96, 0x69, 0x21, 0xe6, 0x30, 0xfb, 0xdf, 0x59, 0x30, + 0xa9, 0xfa, 0xca, 0xdb, 0x3a, 0x05, 0x96, 0xfc, 0x2d, 0x80, 0x86, 0xfc, 0xc0, 0x90, 0xdd, 0x1e, + 0xa3, 0xd7, 0xae, 0xa4, 0x5e, 0xd4, 0x5d, 0xc3, 0x18, 0x53, 0x56, 0x45, 0x21, 0xd6, 0xa8, 0xd9, + 0xbf, 0x6a, 0xc1, 0x99, 0xc4, 0x17, 0xdd, 0x72, 0xc3, 0x08, 0xbd, 0xdd, 0xf5, 0x55, 0x73, 0x83, + 0x7d, 0x15, 0xad, 0xcd, 0xbe, 0x49, 0x2d, 0x65, 0x59, 0xa2, 0x7d, 0xd1, 0x0d, 0x18, 0x72, 0x23, + 0xb2, 0x2b, 0x3f, 0xe6, 0x89, 0x9e, 0x1f, 0xc3, 0x7b, 0x15, 0xcf, 0x48, 0x95, 0xd6, 0xc4, 0x9c, + 0x80, 0xfd, 0xd7, 0xf3, 0x50, 0xe2, 0xcb, 0x76, 0xd5, 0x69, 0x9f, 0xc2, 0x5c, 0x54, 0xa1, 0xc0, + 0xa8, 0xf3, 0x8e, 0x3f, 0x99, 0xde, 0x71, 0xd1, 0x9d, 0x39, 0x2a, 0x6f, 0x73, 0xe6, 0x48, 0x5d, + 0x0d, 0xb4, 0x08, 0x33, 0x12, 0xc8, 0x01, 0xd8, 0x70, 0x3d, 0x27, 0xd8, 0xa7, 0x65, 0x33, 0x79, + 0x46, 0xf0, 0xd9, 0xde, 0x04, 0x17, 0x15, 0x3e, 0x27, 0xab, 0xfa, 0x1a, 0x03, 0xb0, 0x46, 0x74, + 0xf6, 0x25, 0x28, 0x29, 0xe4, 0xe3, 0xf0, 0x38, 0xb3, 0x9f, 0x85, 0xc9, 0x44, 0x5b, 0xfd, 0xaa, + 0x8f, 0xe9, 0x2c, 0xd2, 0x2f, 0xb3, 0x53, 0x40, 0xf4, 0x7a, 0xd9, 0xdb, 0x13, 0xa7, 0xe8, 0xfb, + 0x70, 0xb6, 0x95, 0x72, 0x38, 0x89, 0xa9, 0x1a, 0xfc, 0x30, 0xbb, 0x20, 0x3e, 0xfb, 0x6c, 0x1a, + 0x14, 0xa7, 0xb6, 0x41, 0xaf, 0x7d, 0xbf, 0x4d, 0xd7, 0xbc, 0xd3, 0xd2, 0x39, 0xe8, 0xdb, 0xa2, + 0x0c, 0x2b, 0x28, 0x3d, 0xc2, 0xce, 0xaa, 0xce, 0xdf, 0x24, 0xfb, 0x75, 0xd2, 0x22, 0x8d, 0xc8, + 0x0f, 0x3e, 0xd4, 0xee, 0x5f, 0xe4, 0xa3, 0xcf, 0x4f, 0xc0, 0x51, 0x41, 0x20, 0x7f, 0x93, 0xec, + 0xf3, 0xa9, 0xd0, 0xbf, 0x2e, 0xdf, 0xf3, 0xeb, 0x7e, 0xd6, 0x82, 0x71, 0xf5, 0x75, 0xa7, 0xb0, + 0xd5, 0x17, 0xcd, 0xad, 0x7e, 0xb1, 0xe7, 0x02, 0xcf, 0xd8, 0xe4, 0x5f, 0xcb, 0xc1, 0x79, 0x85, + 0x43, 0xd9, 0x7d, 0xfe, 0x47, 0xac, 0xaa, 0x79, 0x28, 0x79, 0x4a, 0x0b, 0x64, 0x99, 0xea, 0x97, + 0x58, 0x07, 0x14, 0xe3, 0x50, 0xae, 0xcd, 0x8b, 0x55, 0x35, 0x63, 0xba, 0x7a, 0x54, 0xa8, 0x42, + 0x17, 0x21, 0xdf, 0x71, 0x9b, 0xe2, 0xce, 0xf8, 0x94, 0x1c, 0xed, 0x3b, 0xd5, 0xca, 0xd1, 0x41, + 0xf9, 0xf1, 0x2c, 0xd5, 0x3c, 0xbd, 0xac, 0xc2, 0xb9, 0x3b, 0xd5, 0x0a, 0xa6, 0x95, 0xd1, 0x02, + 0x4c, 0xca, 0xd7, 0x87, 0xbb, 0x94, 0x83, 0xf2, 0x3d, 0x71, 0xb5, 0x28, 0x1d, 0x27, 0x36, 0xc1, + 0x38, 0x89, 0x8f, 0x2a, 0x30, 0xb5, 0xd3, 0xd9, 0x20, 0x2d, 0x12, 0xf1, 0x0f, 0xbe, 0x49, 0xb8, + 0x06, 0xb0, 0x14, 0x0b, 0x5b, 0x37, 0x13, 0x70, 0xdc, 0x55, 0xc3, 0xfe, 0x33, 0x76, 0xc4, 0x8b, + 0xd1, 0xab, 0x05, 0x3e, 0x5d, 0x58, 0x94, 0xfa, 0x87, 0xb9, 0x9c, 0x07, 0x59, 0x15, 0x37, 0xc9, + 0xfe, 0xba, 0x4f, 0x99, 0xed, 0xf4, 0x55, 0x61, 0xac, 0xf9, 0x42, 0xcf, 0x35, 0xff, 0xf3, 0x39, + 0x38, 0xa7, 0x46, 0xc0, 0xe0, 0xeb, 0xfe, 0xbc, 0x8f, 0xc1, 0x73, 0x30, 0xda, 0x24, 0x9b, 0x4e, + 0xa7, 0x15, 0x29, 0x75, 0xf4, 0x10, 0x7f, 0x92, 0xa8, 0xc4, 0xc5, 0x58, 0xc7, 0x39, 0xc6, 0xb0, + 0xfd, 0xc4, 0x28, 0xbb, 0x5b, 0x23, 0x87, 0xae, 0x71, 0xb5, 0x6b, 0xac, 0xcc, 0x5d, 0xf3, 0x04, + 0x0c, 0xb9, 0xbb, 0x94, 0xd7, 0xca, 0x99, 0x2c, 0x54, 0x95, 0x16, 0x62, 0x0e, 0x43, 0x9f, 0x80, + 0x91, 0x86, 0xbf, 0xbb, 0xeb, 0x78, 0x4d, 0x76, 0xe5, 0x95, 0x16, 0x47, 0x29, 0x3b, 0xb6, 0xc4, + 0x8b, 0xb0, 0x84, 0xa1, 0x0b, 0x50, 0x70, 0x82, 0x2d, 0xae, 0x96, 0x28, 0x2d, 0x16, 0x69, 0x4b, + 0x0b, 0xc1, 0x56, 0x88, 0x59, 0x29, 0x95, 0xaa, 0xee, 0xf9, 0xc1, 0x8e, 0xeb, 0x6d, 0x55, 0xdc, + 0x40, 0x6c, 0x09, 0x75, 0x17, 0xbe, 0xa9, 0x20, 0x58, 0xc3, 0x42, 0x2b, 0x30, 0xd4, 0xf6, 0x83, + 0x28, 0x9c, 0x19, 0x66, 0xc3, 0xfd, 0x78, 0xc6, 0x41, 0xc4, 0xbf, 0xb6, 0xe6, 0x07, 0x51, 0xfc, + 0x01, 0xf4, 0x5f, 0x88, 0x79, 0x75, 0xf4, 0x6d, 0x90, 0x27, 0xde, 0xde, 0xcc, 0x08, 0xa3, 0x32, + 0x9b, 0x46, 0x65, 0xd9, 0xdb, 0xbb, 0xeb, 0x04, 0xf1, 0x29, 0xbd, 0xec, 0xed, 0x61, 0x5a, 0x07, + 0x7d, 0x1e, 0x4a, 0x72, 0x8b, 0x87, 0x42, 0x5d, 0x95, 0xba, 0xc4, 0xe4, 0xc1, 0x80, 0xc9, 0x7b, + 0x1d, 0x37, 0x20, 0xbb, 0xc4, 0x8b, 0xc2, 0xf8, 0x4c, 0x93, 0xd0, 0x10, 0xc7, 0xd4, 0xd0, 0xe7, + 0xa5, 0x8e, 0x74, 0xd5, 0xef, 0x78, 0x51, 0x38, 0x53, 0x62, 0xdd, 0x4b, 0x7d, 0xbd, 0xba, 0x1b, + 0xe3, 0x25, 0x95, 0xa8, 0xbc, 0x32, 0x36, 0x48, 0x21, 0x0c, 0xe3, 0x2d, 0x77, 0x8f, 0x78, 0x24, + 0x0c, 0x6b, 0x81, 0xbf, 0x41, 0x66, 0x80, 0xf5, 0xfc, 0x7c, 0xfa, 0xa3, 0x8e, 0xbf, 0x41, 0x16, + 0xa7, 0x0f, 0x0f, 0xca, 0xe3, 0xb7, 0xf4, 0x3a, 0xd8, 0x24, 0x81, 0xee, 0xc0, 0x04, 0x95, 0x6b, + 0xdc, 0x98, 0xe8, 0x68, 0x3f, 0xa2, 0x4c, 0xfa, 0xc0, 0x46, 0x25, 0x9c, 0x20, 0x82, 0x5e, 0x87, + 0x52, 0xcb, 0xdd, 0x24, 0x8d, 0xfd, 0x46, 0x8b, 0xcc, 0x8c, 0x31, 0x8a, 0xa9, 0xdb, 0xea, 0x96, + 0x44, 0xe2, 0x72, 0x91, 0xfa, 0x8b, 0xe3, 0xea, 0xe8, 0x2e, 0x3c, 0x12, 0x91, 0x60, 0xd7, 0xf5, + 0x1c, 0xba, 0x1d, 0x84, 0xbc, 0xc0, 0x9e, 0xc6, 0xc6, 0xd9, 0x7a, 0xbb, 0x24, 0x86, 0xee, 0x91, + 0xf5, 0x54, 0x2c, 0x9c, 0x51, 0x1b, 0xdd, 0x86, 0x49, 0xb6, 0x13, 0x6a, 0x9d, 0x56, 0xab, 0xe6, + 0xb7, 0xdc, 0xc6, 0xfe, 0xcc, 0x04, 0x23, 0xf8, 0x09, 0x79, 0x2f, 0x54, 0x4d, 0xf0, 0xd1, 0x41, + 0x19, 0xe2, 0x7f, 0x38, 0x59, 0x1b, 0x6d, 0xb0, 0xb7, 0x90, 0x4e, 0xe0, 0x46, 0xfb, 0x74, 0xfd, + 0x92, 0xfb, 0xd1, 0xcc, 0x64, 0x4f, 0x51, 0x58, 0x47, 0x55, 0x0f, 0x26, 0x7a, 0x21, 0x4e, 0x12, + 0xa4, 0x5b, 0x3b, 0x8c, 0x9a, 0xae, 0x37, 0x33, 0xc5, 0x4e, 0x0c, 0xb5, 0x33, 0xea, 0xb4, 0x10, + 0x73, 0x18, 0x7b, 0x07, 0xa1, 0x3f, 0x6e, 0xd3, 0x13, 0x74, 0x9a, 0x21, 0xc6, 0xef, 0x20, 0x12, + 0x80, 0x63, 0x1c, 0xca, 0xd4, 0x44, 0xd1, 0xfe, 0x0c, 0x62, 0xa8, 0x6a, 0xbb, 0xac, 0xaf, 0x7f, + 0x1e, 0xd3, 0x72, 0x74, 0x0b, 0x46, 0x88, 0xb7, 0xb7, 0x12, 0xf8, 0xbb, 0x33, 0x67, 0xb2, 0xf7, + 0xec, 0x32, 0x47, 0xe1, 0x07, 0x7a, 0x2c, 0xe0, 0x89, 0x62, 0x2c, 0x49, 0xa0, 0xfb, 0x30, 0x93, + 0x32, 0x23, 0x7c, 0x02, 0xce, 0xb2, 0x09, 0x78, 0x55, 0xd4, 0x9d, 0x59, 0xcf, 0xc0, 0x3b, 0xea, + 0x01, 0xc3, 0x99, 0xd4, 0xd1, 0x17, 0x60, 0x9c, 0x6f, 0x28, 0xfe, 0x88, 0x1a, 0xce, 0x9c, 0x63, + 0x5f, 0x73, 0x39, 0x7b, 0x73, 0x72, 0xc4, 0xc5, 0x73, 0xa2, 0x43, 0xe3, 0x7a, 0x69, 0x88, 0x4d, + 0x6a, 0xf6, 0x06, 0x4c, 0xa8, 0x73, 0x8b, 0x2d, 0x1d, 0x54, 0x86, 0x21, 0xc6, 0xed, 0x08, 0xfd, + 0x56, 0x89, 0xce, 0x14, 0xe3, 0x84, 0x30, 0x2f, 0x67, 0x33, 0xe5, 0xbe, 0x4f, 0x16, 0xf7, 0x23, + 0xc2, 0xa5, 0xea, 0xbc, 0x36, 0x53, 0x12, 0x80, 0x63, 0x1c, 0xfb, 0xff, 0x72, 0xae, 0x31, 0x3e, + 0x1c, 0x07, 0xb8, 0x0e, 0x9e, 0x81, 0xe2, 0xb6, 0x1f, 0x46, 0x14, 0x9b, 0xb5, 0x31, 0x14, 0xf3, + 0x89, 0x37, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x15, 0x18, 0x6f, 0xe8, 0x0d, 0x88, 0xbb, 0x4c, 0x0d, + 0x81, 0xd1, 0x3a, 0x36, 0x71, 0xd1, 0xcb, 0x50, 0x64, 0x26, 0x10, 0x0d, 0xbf, 0x25, 0x98, 0x2c, + 0x79, 0x21, 0x17, 0x6b, 0xa2, 0xfc, 0x48, 0xfb, 0x8d, 0x15, 0x36, 0xba, 0x02, 0xc3, 0xb4, 0x0b, + 0xd5, 0x9a, 0xb8, 0x45, 0x94, 0xaa, 0xe6, 0x06, 0x2b, 0xc5, 0x02, 0x6a, 0xff, 0xb5, 0x9c, 0x36, + 0xca, 0x54, 0x22, 0x25, 0xa8, 0x06, 0x23, 0xf7, 0x1c, 0x37, 0x72, 0xbd, 0x2d, 0xc1, 0x2e, 0x3c, + 0xd5, 0xf3, 0x4a, 0x61, 0x95, 0xde, 0xe4, 0x15, 0xf8, 0xa5, 0x27, 0xfe, 0x60, 0x49, 0x86, 0x52, + 0x0c, 0x3a, 0x9e, 0x47, 0x29, 0xe6, 0x06, 0xa5, 0x88, 0x79, 0x05, 0x4e, 0x51, 0xfc, 0xc1, 0x92, + 0x0c, 0x7a, 0x1b, 0x40, 0x2e, 0x4b, 0xd2, 0x14, 0xa6, 0x07, 0xcf, 0xf4, 0x27, 0xba, 0xae, 0xea, + 0x2c, 0x4e, 0xd0, 0x2b, 0x35, 0xfe, 0x8f, 0x35, 0x7a, 0x76, 0xc4, 0xd8, 0xaa, 0xee, 0xce, 0xa0, + 0xef, 0xa4, 0x27, 0x81, 0x13, 0x44, 0xa4, 0xb9, 0x10, 0x89, 0xc1, 0xf9, 0xe4, 0x60, 0x32, 0xc5, + 0xba, 0xbb, 0x4b, 0xf4, 0x53, 0x43, 0x10, 0xc1, 0x31, 0x3d, 0xfb, 0x17, 0xf3, 0x30, 0x93, 0xd5, + 0x5d, 0xba, 0xe8, 0xc8, 0x7d, 0x37, 0x5a, 0xa2, 0xdc, 0x90, 0x65, 0x2e, 0xba, 0x65, 0x51, 0x8e, + 0x15, 0x06, 0x9d, 0xfd, 0xd0, 0xdd, 0x92, 0x22, 0xe1, 0x50, 0x3c, 0xfb, 0x75, 0x56, 0x8a, 0x05, + 0x94, 0xe2, 0x05, 0xc4, 0x09, 0x85, 0x6d, 0x8b, 0xb6, 0x4a, 0x30, 0x2b, 0xc5, 0x02, 0xaa, 0xeb, + 0x9b, 0x0a, 0x7d, 0xf4, 0x4d, 0xc6, 0x10, 0x0d, 0x9d, 0xec, 0x10, 0xa1, 0x2f, 0x02, 0x6c, 0xba, + 0x9e, 0x1b, 0x6e, 0x33, 0xea, 0xc3, 0xc7, 0xa6, 0xae, 0x78, 0xa9, 0x15, 0x45, 0x05, 0x6b, 0x14, + 0xd1, 0x8b, 0x30, 0xaa, 0x36, 0x60, 0xb5, 0xc2, 0x1e, 0xfa, 0x34, 0xc3, 0x89, 0xf8, 0x34, 0xaa, + 0x60, 0x1d, 0xcf, 0x7e, 0x37, 0xb9, 0x5e, 0xc4, 0x0e, 0xd0, 0xc6, 0xd7, 0x1a, 0x74, 0x7c, 0x73, + 0xbd, 0xc7, 0xd7, 0xfe, 0xf5, 0x3c, 0x4c, 0x1a, 0x8d, 0x75, 0xc2, 0x01, 0xce, 0xac, 0xeb, 0xf4, + 0x9e, 0x73, 0x22, 0x22, 0xf6, 0x9f, 0xdd, 0x7f, 0xab, 0xe8, 0x77, 0x21, 0xdd, 0x01, 0xbc, 0x3e, + 0xfa, 0x22, 0x94, 0x5a, 0x4e, 0xc8, 0x74, 0x57, 0x44, 0xec, 0xbb, 0x41, 0x88, 0xc5, 0x72, 0x84, + 0x13, 0x46, 0xda, 0x55, 0xc3, 0x69, 0xc7, 0x24, 0xe9, 0x85, 0x4c, 0x79, 0x1f, 0x69, 0x3c, 0xa5, + 0x3a, 0x41, 0x19, 0xa4, 0x7d, 0xcc, 0x61, 0xe8, 0x65, 0x18, 0x0b, 0x08, 0x5b, 0x15, 0x4b, 0x94, + 0x95, 0x63, 0xcb, 0x6c, 0x28, 0xe6, 0xf9, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0xcc, 0xca, 0x0f, 0xf7, + 0x60, 0xe5, 0x9f, 0x82, 0x11, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0x55, 0x5e, 0x8c, 0x25, 0x3c, + 0xb9, 0x60, 0x8a, 0x03, 0x2e, 0x98, 0x4f, 0xc2, 0x44, 0xc5, 0x21, 0xbb, 0xbe, 0xb7, 0xec, 0x35, + 0xdb, 0xbe, 0xeb, 0x45, 0x68, 0x06, 0x0a, 0xec, 0x76, 0xe0, 0x7b, 0xbb, 0x40, 0x29, 0xe0, 0x02, + 0x65, 0xcc, 0xed, 0x2d, 0x38, 0x57, 0xf1, 0xef, 0x79, 0xf7, 0x9c, 0xa0, 0xb9, 0x50, 0xab, 0x6a, + 0x72, 0xee, 0x9a, 0x94, 0xb3, 0xb8, 0x31, 0x52, 0xea, 0x99, 0xaa, 0xd5, 0xe4, 0x77, 0xed, 0x8a, + 0xdb, 0x22, 0x19, 0xda, 0x88, 0xbf, 0x99, 0x33, 0x5a, 0x8a, 0xf1, 0xd5, 0x83, 0x91, 0x95, 0xf9, + 0x60, 0xf4, 0x06, 0x14, 0x37, 0x5d, 0xd2, 0x6a, 0x62, 0xb2, 0x29, 0x96, 0xd8, 0x93, 0xd9, 0xf6, + 0x15, 0x2b, 0x14, 0x53, 0x6a, 0x9f, 0xb8, 0x94, 0xb6, 0x22, 0x2a, 0x63, 0x45, 0x06, 0xed, 0xc0, + 0x94, 0x14, 0x03, 0x24, 0x54, 0x2c, 0xb8, 0xa7, 0x7a, 0xc9, 0x16, 0x26, 0xf1, 0xb3, 0x87, 0x07, + 0xe5, 0x29, 0x9c, 0x20, 0x83, 0xbb, 0x08, 0x53, 0xb1, 0x6c, 0x97, 0x1e, 0xad, 0x05, 0x36, 0xfc, + 0x4c, 0x2c, 0x63, 0x12, 0x26, 0x2b, 0xb5, 0x7f, 0xd4, 0x82, 0x47, 0xbb, 0x46, 0x46, 0x48, 0xda, + 0x27, 0x3c, 0x0b, 0x49, 0xc9, 0x37, 0xd7, 0x5f, 0xf2, 0xb5, 0xff, 0x81, 0x05, 0x67, 0x97, 0x77, + 0xdb, 0xd1, 0x7e, 0xc5, 0x35, 0x5f, 0x77, 0x5e, 0x82, 0xe1, 0x5d, 0xd2, 0x74, 0x3b, 0xbb, 0x62, + 0xe6, 0xca, 0xf2, 0xf8, 0x59, 0x65, 0xa5, 0x47, 0x07, 0xe5, 0xf1, 0x7a, 0xe4, 0x07, 0xce, 0x16, + 0xe1, 0x05, 0x58, 0xa0, 0xb3, 0x43, 0xdc, 0x7d, 0x9f, 0xdc, 0x72, 0x77, 0x5d, 0x69, 0x2f, 0xd3, + 0x53, 0x77, 0x36, 0x27, 0x07, 0x74, 0xee, 0x8d, 0x8e, 0xe3, 0x45, 0x6e, 0xb4, 0x2f, 0x1e, 0x66, + 0x24, 0x11, 0x1c, 0xd3, 0xb3, 0xbf, 0x61, 0xc1, 0xa4, 0x5c, 0xf7, 0x0b, 0xcd, 0x66, 0x40, 0xc2, + 0x10, 0xcd, 0x42, 0xce, 0x6d, 0x8b, 0x5e, 0x82, 0xe8, 0x65, 0xae, 0x5a, 0xc3, 0x39, 0xb7, 0x8d, + 0x6a, 0x50, 0xe2, 0x66, 0x37, 0xf1, 0xe2, 0x1a, 0xc8, 0x78, 0x87, 0xf5, 0x60, 0x5d, 0xd6, 0xc4, + 0x31, 0x11, 0xc9, 0xc1, 0xb1, 0x33, 0x33, 0x6f, 0xbe, 0x7a, 0xdd, 0x10, 0xe5, 0x58, 0x61, 0xa0, + 0xab, 0x50, 0xf4, 0xfc, 0x26, 0xb7, 0x82, 0xe2, 0xb7, 0x1f, 0x5b, 0xb2, 0x6b, 0xa2, 0x0c, 0x2b, + 0xa8, 0xfd, 0x43, 0x16, 0x8c, 0xc9, 0x2f, 0x1b, 0x90, 0x99, 0xa4, 0x5b, 0x2b, 0x66, 0x24, 0xe3, + 0xad, 0x45, 0x99, 0x41, 0x06, 0x31, 0x78, 0xc0, 0xfc, 0x71, 0x78, 0x40, 0xfb, 0x47, 0x72, 0x30, + 0x21, 0xbb, 0x53, 0xef, 0x6c, 0x84, 0x24, 0x42, 0xeb, 0x50, 0x72, 0xf8, 0x90, 0x13, 0xb9, 0x62, + 0x9f, 0x48, 0x17, 0x3e, 0x8c, 0xf9, 0x89, 0xaf, 0xe5, 0x05, 0x59, 0x1b, 0xc7, 0x84, 0x50, 0x0b, + 0xa6, 0x3d, 0x3f, 0x62, 0x47, 0xb4, 0x82, 0xf7, 0x7a, 0x02, 0x49, 0x52, 0x3f, 0x2f, 0xa8, 0x4f, + 0xaf, 0x25, 0xa9, 0xe0, 0x6e, 0xc2, 0x68, 0x59, 0x2a, 0x3c, 0xf2, 0xd9, 0xe2, 0x86, 0x3e, 0x0b, + 0xe9, 0xfa, 0x0e, 0xfb, 0x57, 0x2c, 0x28, 0x49, 0xb4, 0xd3, 0x78, 0xed, 0x5a, 0x85, 0x91, 0x90, + 0x4d, 0x82, 0x1c, 0x1a, 0xbb, 0x57, 0xc7, 0xf9, 0x7c, 0xc5, 0x37, 0x0f, 0xff, 0x1f, 0x62, 0x49, + 0x83, 0xe9, 0xbb, 0x55, 0xf7, 0x3f, 0x22, 0xfa, 0x6e, 0xd5, 0x9f, 0x8c, 0x1b, 0xe6, 0xbf, 0xb1, + 0x3e, 0x6b, 0x62, 0x2d, 0x65, 0x90, 0xda, 0x01, 0xd9, 0x74, 0xef, 0x27, 0x19, 0xa4, 0x1a, 0x2b, + 0xc5, 0x02, 0x8a, 0xde, 0x86, 0xb1, 0x86, 0x54, 0x74, 0xc6, 0xc7, 0xc0, 0x95, 0x9e, 0x4a, 0x77, + 0xf5, 0x3e, 0xc3, 0x2d, 0xa4, 0x97, 0xb4, 0xfa, 0xd8, 0xa0, 0x66, 0x3e, 0xb7, 0xe7, 0xfb, 0x3d, + 0xb7, 0xc7, 0x74, 0xb3, 0x1f, 0x9f, 0x7f, 0xcc, 0x82, 0x61, 0xae, 0x2e, 0x1b, 0x4c, 0xbf, 0xa8, + 0x3d, 0x57, 0xc5, 0x63, 0x77, 0x97, 0x16, 0x8a, 0xe7, 0x27, 0xb4, 0x0a, 0x25, 0xf6, 0x83, 0xa9, + 0x0d, 0xf2, 0xd9, 0xa6, 0xe1, 0xbc, 0x55, 0xbd, 0x83, 0x77, 0x65, 0x35, 0x1c, 0x53, 0xb0, 0xbf, + 0x9a, 0xa7, 0x47, 0x55, 0x8c, 0x6a, 0xdc, 0xe0, 0xd6, 0xc3, 0xbb, 0xc1, 0x73, 0x0f, 0xeb, 0x06, + 0xdf, 0x82, 0xc9, 0x86, 0xf6, 0xb8, 0x15, 0xcf, 0xe4, 0xd5, 0x9e, 0x8b, 0x44, 0x7b, 0x07, 0xe3, + 0x2a, 0xa3, 0x25, 0x93, 0x08, 0x4e, 0x52, 0x45, 0xdf, 0x09, 0x63, 0x7c, 0x9e, 0x45, 0x2b, 0xdc, + 0x62, 0xe1, 0x13, 0xd9, 0xeb, 0x45, 0x6f, 0x82, 0xad, 0xc4, 0xba, 0x56, 0x1d, 0x1b, 0xc4, 0xec, + 0x5f, 0x2c, 0xc2, 0xd0, 0xf2, 0x1e, 0xf1, 0xa2, 0x53, 0x38, 0x90, 0x1a, 0x30, 0xe1, 0x7a, 0x7b, + 0x7e, 0x6b, 0x8f, 0x34, 0x39, 0xfc, 0x38, 0x97, 0xeb, 0x23, 0x82, 0xf4, 0x44, 0xd5, 0x20, 0x81, + 0x13, 0x24, 0x1f, 0x86, 0x84, 0x79, 0x1d, 0x86, 0xf9, 0xdc, 0x0b, 0xf1, 0x32, 0x55, 0x19, 0xcc, + 0x06, 0x51, 0xec, 0x82, 0x58, 0xfa, 0xe5, 0xda, 0x67, 0x51, 0x1d, 0xbd, 0x0b, 0x13, 0x9b, 0x6e, + 0x10, 0x46, 0x54, 0x34, 0x0c, 0x23, 0x67, 0xb7, 0xfd, 0x00, 0x12, 0xa5, 0x1a, 0x87, 0x15, 0x83, + 0x12, 0x4e, 0x50, 0x46, 0x5b, 0x30, 0x4e, 0x85, 0x9c, 0xb8, 0xa9, 0x91, 0x63, 0x37, 0xa5, 0x54, + 0x46, 0xb7, 0x74, 0x42, 0xd8, 0xa4, 0x4b, 0x0f, 0x93, 0x06, 0x13, 0x8a, 0x8a, 0x8c, 0xa3, 0x50, + 0x87, 0x09, 0x97, 0x86, 0x38, 0x8c, 0x9e, 0x49, 0xcc, 0x6c, 0xa5, 0x64, 0x9e, 0x49, 0x9a, 0x71, + 0xca, 0x3b, 0x50, 0x22, 0x74, 0x08, 0x29, 0x61, 0xa1, 0x18, 0x9f, 0x1f, 0xac, 0xaf, 0xab, 0x6e, + 0x23, 0xf0, 0x4d, 0x59, 0x7e, 0x59, 0x52, 0xc2, 0x31, 0x51, 0xb4, 0x04, 0xc3, 0x21, 0x09, 0x5c, + 0x12, 0x0a, 0x15, 0x79, 0x8f, 0x69, 0x64, 0x68, 0xdc, 0xe2, 0x93, 0xff, 0xc6, 0xa2, 0x2a, 0x5d, + 0x5e, 0x0e, 0x93, 0x86, 0x98, 0x56, 0x5c, 0x5b, 0x5e, 0x0b, 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x1d, + 0x46, 0x02, 0xd2, 0x62, 0xca, 0xa2, 0xf1, 0xc1, 0x17, 0x39, 0xd7, 0x3d, 0xf1, 0x7a, 0x58, 0x12, + 0x40, 0x37, 0x01, 0x05, 0x84, 0xf2, 0x10, 0xae, 0xb7, 0xa5, 0x8c, 0x39, 0x84, 0xae, 0xfb, 0x31, + 0xd1, 0xfe, 0x19, 0x1c, 0x63, 0x48, 0xeb, 0x62, 0x9c, 0x52, 0x0d, 0x5d, 0x87, 0x69, 0x55, 0x5a, + 0xf5, 0xc2, 0xc8, 0xf1, 0x1a, 0x84, 0xa9, 0xb9, 0x4b, 0x31, 0x57, 0x84, 0x93, 0x08, 0xb8, 0xbb, + 0x8e, 0xfd, 0xd3, 0x94, 0x9d, 0xa1, 0xa3, 0x75, 0x0a, 0xbc, 0xc0, 0x6b, 0x26, 0x2f, 0x70, 0x3e, + 0x73, 0xe6, 0x32, 0xf8, 0x80, 0x43, 0x0b, 0x46, 0xb5, 0x99, 0x8d, 0xd7, 0xac, 0xd5, 0x63, 0xcd, + 0x76, 0x60, 0x8a, 0xae, 0xf4, 0xdb, 0x1b, 0x21, 0x09, 0xf6, 0x48, 0x93, 0x2d, 0xcc, 0xdc, 0x83, + 0x2d, 0x4c, 0xf5, 0xca, 0x7c, 0x2b, 0x41, 0x10, 0x77, 0x35, 0x81, 0x5e, 0x92, 0x9a, 0x93, 0xbc, + 0x61, 0xa4, 0xc5, 0xb5, 0x22, 0x47, 0x07, 0xe5, 0x29, 0xed, 0x43, 0x74, 0x4d, 0x89, 0xfd, 0x8e, + 0xfc, 0x46, 0xf5, 0x9a, 0xdf, 0x50, 0x8b, 0x25, 0xf1, 0x9a, 0xaf, 0x96, 0x03, 0x8e, 0x71, 0xe8, + 0x1e, 0xa5, 0x22, 0x48, 0xf2, 0x35, 0x9f, 0x0a, 0x28, 0x98, 0x41, 0xec, 0xe7, 0x01, 0x96, 0xef, + 0x93, 0x06, 0x5f, 0xea, 0xfa, 0x03, 0xa4, 0x95, 0xfd, 0x00, 0x69, 0xff, 0x07, 0x0b, 0x26, 0x56, + 0x96, 0x0c, 0x31, 0x71, 0x0e, 0x80, 0xcb, 0x46, 0x6f, 0xbe, 0xb9, 0x26, 0x75, 0xeb, 0x5c, 0x3d, + 0xaa, 0x4a, 0xb1, 0x86, 0x81, 0xce, 0x43, 0xbe, 0xd5, 0xf1, 0x84, 0xc8, 0x32, 0x72, 0x78, 0x50, + 0xce, 0xdf, 0xea, 0x78, 0x98, 0x96, 0x69, 0x16, 0x82, 0xf9, 0x81, 0x2d, 0x04, 0xfb, 0xba, 0xc9, + 0xa1, 0x32, 0x0c, 0xdd, 0xbb, 0xe7, 0x36, 0xb9, 0x33, 0x82, 0xd0, 0xfb, 0xbf, 0xf9, 0x66, 0xb5, + 0x12, 0x62, 0x5e, 0x6e, 0x7f, 0x25, 0x0f, 0xb3, 0x2b, 0x2d, 0x72, 0xff, 0x03, 0x3a, 0x64, 0x0c, + 0x6a, 0xdf, 0x78, 0x3c, 0x7e, 0xf1, 0xb8, 0x36, 0xac, 0xfd, 0xc7, 0x63, 0x13, 0x46, 0xf8, 0x63, + 0xb6, 0x74, 0xcf, 0x78, 0x25, 0xad, 0xf5, 0xec, 0x01, 0x99, 0xe3, 0x8f, 0xe2, 0xc2, 0xc0, 0x5d, + 0xdd, 0xb4, 0xa2, 0x14, 0x4b, 0xe2, 0xb3, 0x9f, 0x81, 0x31, 0x1d, 0xf3, 0x58, 0xd6, 0xe4, 0x7f, + 0x31, 0x0f, 0x53, 0xb4, 0x07, 0x0f, 0x75, 0x22, 0xee, 0x74, 0x4f, 0xc4, 0x49, 0x5b, 0x14, 0xf7, + 0x9f, 0x8d, 0xb7, 0x93, 0xb3, 0xf1, 0x5c, 0xd6, 0x6c, 0x9c, 0xf6, 0x1c, 0x7c, 0xaf, 0x05, 0x67, + 0x56, 0x5a, 0x7e, 0x63, 0x27, 0x61, 0xf5, 0xfb, 0x22, 0x8c, 0xd2, 0x73, 0x3c, 0x34, 0xbc, 0xc1, + 0x0c, 0xff, 0x40, 0x01, 0xc2, 0x3a, 0x9e, 0x56, 0xed, 0xce, 0x9d, 0x6a, 0x25, 0xcd, 0xad, 0x50, + 0x80, 0xb0, 0x8e, 0x67, 0x7f, 0xdd, 0x82, 0x8b, 0xd7, 0x97, 0x96, 0xe3, 0xa5, 0xd8, 0xe5, 0xd9, + 0x48, 0xa5, 0xc0, 0xa6, 0xd6, 0x95, 0x58, 0x0a, 0xac, 0xb0, 0x5e, 0x08, 0xe8, 0x47, 0xc5, 0x6b, + 0xf7, 0xa7, 0x2c, 0x38, 0x73, 0xdd, 0x8d, 0xe8, 0xb5, 0x9c, 0xf4, 0xb1, 0xa3, 0xf7, 0x72, 0xe8, + 0x46, 0x7e, 0xb0, 0x9f, 0xf4, 0xb1, 0xc3, 0x0a, 0x82, 0x35, 0x2c, 0xde, 0xf2, 0x9e, 0xcb, 0xcc, + 0xa8, 0x72, 0xa6, 0x2a, 0x0a, 0x8b, 0x72, 0xac, 0x30, 0xe8, 0x87, 0x35, 0xdd, 0x80, 0x89, 0x12, + 0xfb, 0xe2, 0x84, 0x55, 0x1f, 0x56, 0x91, 0x00, 0x1c, 0xe3, 0xd8, 0x7f, 0x68, 0x41, 0xf9, 0x7a, + 0xab, 0x13, 0x46, 0x24, 0xd8, 0x0c, 0x33, 0x4e, 0xc7, 0xe7, 0xa1, 0x44, 0xa4, 0xe0, 0x2e, 0x7a, + 0xad, 0x58, 0x4d, 0x25, 0xd1, 0x73, 0x57, 0x3f, 0x85, 0x37, 0x80, 0x0f, 0xc1, 0xf1, 0x8c, 0xc0, + 0x57, 0x00, 0x11, 0xbd, 0x2d, 0xdd, 0xf7, 0x91, 0x39, 0x51, 0x2d, 0x77, 0x41, 0x71, 0x4a, 0x0d, + 0xfb, 0x47, 0x2d, 0x38, 0xa7, 0x3e, 0xf8, 0x23, 0xf7, 0x99, 0xf6, 0xcf, 0xe5, 0x60, 0xfc, 0xc6, + 0xfa, 0x7a, 0xed, 0x3a, 0x89, 0xc4, 0xb5, 0xdd, 0x5f, 0xb7, 0x8e, 0x35, 0x15, 0x61, 0x2f, 0x29, + 0xb0, 0x13, 0xb9, 0xad, 0x39, 0xee, 0x42, 0x3f, 0x57, 0xf5, 0xa2, 0xdb, 0x41, 0x3d, 0x0a, 0x5c, + 0x6f, 0x2b, 0x55, 0xa9, 0x28, 0x99, 0x8b, 0x7c, 0x16, 0x73, 0x81, 0x9e, 0x87, 0x61, 0xe6, 0xc3, + 0x2f, 0x27, 0xe1, 0x31, 0x25, 0x44, 0xb1, 0xd2, 0xa3, 0x83, 0x72, 0xe9, 0x0e, 0xae, 0xf2, 0x3f, + 0x58, 0xa0, 0xa2, 0x3b, 0x30, 0xba, 0x1d, 0x45, 0xed, 0x1b, 0xc4, 0x69, 0x92, 0x40, 0x1e, 0x87, + 0x97, 0xd2, 0x8e, 0x43, 0x3a, 0x08, 0x1c, 0x2d, 0x3e, 0x41, 0xe2, 0xb2, 0x10, 0xeb, 0x74, 0xec, + 0x3a, 0x40, 0x0c, 0x3b, 0x21, 0x85, 0x8a, 0xfd, 0xfb, 0x16, 0x8c, 0x70, 0x77, 0xca, 0x00, 0xbd, + 0x0a, 0x05, 0x72, 0x9f, 0x34, 0x04, 0xab, 0x9c, 0xda, 0xe1, 0x98, 0xd3, 0xe2, 0xcf, 0x03, 0xf4, + 0x3f, 0x66, 0xb5, 0xd0, 0x0d, 0x18, 0xa1, 0xbd, 0xbd, 0xae, 0x7c, 0x4b, 0x1f, 0xcf, 0xfa, 0x62, + 0x35, 0xed, 0x9c, 0x39, 0x13, 0x45, 0x58, 0x56, 0x67, 0xaa, 0xee, 0x46, 0xbb, 0x4e, 0x4f, 0xec, + 0xa8, 0x17, 0x63, 0xb1, 0xbe, 0x54, 0xe3, 0x48, 0x82, 0x1a, 0x57, 0x75, 0xcb, 0x42, 0x1c, 0x13, + 0xb1, 0xd7, 0xa1, 0x44, 0x27, 0x75, 0xa1, 0xe5, 0x3a, 0xbd, 0xb5, 0xec, 0x4f, 0x43, 0x49, 0x6a, + 0xbc, 0x43, 0xe1, 0xc9, 0xc5, 0xa8, 0x4a, 0x85, 0x78, 0x88, 0x63, 0xb8, 0xbd, 0x09, 0x67, 0x99, + 0xa9, 0x83, 0x13, 0x6d, 0x1b, 0x7b, 0xac, 0xff, 0x62, 0x7e, 0x46, 0x48, 0x9e, 0x7c, 0x66, 0x66, + 0x34, 0x67, 0x89, 0x31, 0x49, 0x31, 0x96, 0x42, 0xed, 0x3f, 0x28, 0xc0, 0x63, 0xd5, 0x7a, 0xb6, + 0xa7, 0xed, 0xcb, 0x30, 0xc6, 0xf9, 0x52, 0xba, 0xb4, 0x9d, 0x96, 0x68, 0x57, 0x3d, 0x04, 0xae, + 0x6b, 0x30, 0x6c, 0x60, 0xa2, 0x8b, 0x90, 0x77, 0xdf, 0xf3, 0x92, 0x76, 0xc7, 0xd5, 0x37, 0xd6, + 0x30, 0x2d, 0xa7, 0x60, 0xca, 0xe2, 0xf2, 0xbb, 0x43, 0x81, 0x15, 0x9b, 0xfb, 0x1a, 0x4c, 0xb8, + 0x61, 0x23, 0x74, 0xab, 0x1e, 0x3d, 0x67, 0xb4, 0x93, 0x4a, 0x69, 0x45, 0x68, 0xa7, 0x15, 0x14, + 0x27, 0xb0, 0xb5, 0x8b, 0x6c, 0x68, 0x60, 0x36, 0xb9, 0xaf, 0x6b, 0x13, 0x95, 0x00, 0xda, 0xec, + 0xeb, 0x42, 0x66, 0xc5, 0x27, 0x24, 0x00, 0xfe, 0xc1, 0x21, 0x96, 0x30, 0x2a, 0x72, 0x36, 0xb6, + 0x9d, 0xf6, 0x42, 0x27, 0xda, 0xae, 0xb8, 0x61, 0xc3, 0xdf, 0x23, 0xc1, 0x3e, 0xd3, 0x16, 0x14, + 0x63, 0x91, 0x53, 0x01, 0x96, 0x6e, 0x2c, 0xd4, 0x28, 0x26, 0xee, 0xae, 0x63, 0xb2, 0xc1, 0x70, + 0x12, 0x6c, 0xf0, 0x02, 0x4c, 0xca, 0x66, 0xea, 0x24, 0x64, 0x97, 0xe2, 0x28, 0xeb, 0x98, 0xb2, + 0x2d, 0x16, 0xc5, 0xaa, 0x5b, 0x49, 0x7c, 0xf4, 0x12, 0x8c, 0xbb, 0x9e, 0x1b, 0xb9, 0x4e, 0xe4, + 0x07, 0x8c, 0xa5, 0xe0, 0x8a, 0x01, 0x66, 0xba, 0x57, 0xd5, 0x01, 0xd8, 0xc4, 0xb3, 0xff, 0x4b, + 0x01, 0xa6, 0xd9, 0xb4, 0x7d, 0x6b, 0x85, 0x7d, 0x64, 0x56, 0xd8, 0x9d, 0xee, 0x15, 0x76, 0x12, + 0xfc, 0xfd, 0x87, 0xb9, 0xcc, 0xde, 0x85, 0x92, 0x32, 0x7e, 0x96, 0xde, 0x0f, 0x56, 0x86, 0xf7, + 0x43, 0x7f, 0xee, 0x43, 0xbe, 0x5b, 0xe7, 0x53, 0xdf, 0xad, 0xff, 0xb6, 0x05, 0xb1, 0x0d, 0x28, + 0xba, 0x01, 0xa5, 0xb6, 0xcf, 0xec, 0x2c, 0x02, 0x69, 0xbc, 0xf4, 0x58, 0xea, 0x45, 0xc5, 0x2f, + 0x45, 0x3e, 0x7e, 0x35, 0x59, 0x03, 0xc7, 0x95, 0xd1, 0x22, 0x8c, 0xb4, 0x03, 0x52, 0x8f, 0x98, + 0xcf, 0x6f, 0x5f, 0x3a, 0x7c, 0x8d, 0x70, 0x7c, 0x2c, 0x2b, 0xda, 0x3f, 0x6f, 0x01, 0xf0, 0xa7, + 0x61, 0xc7, 0xdb, 0x22, 0xa7, 0xa0, 0xee, 0xae, 0x40, 0x21, 0x6c, 0x93, 0x46, 0x2f, 0x0b, 0x98, + 0xb8, 0x3f, 0xf5, 0x36, 0x69, 0xc4, 0x03, 0x4e, 0xff, 0x61, 0x56, 0xdb, 0xfe, 0x3e, 0x80, 0x89, + 0x18, 0xad, 0x1a, 0x91, 0x5d, 0xf4, 0xac, 0xe1, 0x03, 0x78, 0x3e, 0xe1, 0x03, 0x58, 0x62, 0xd8, + 0x9a, 0x66, 0xf5, 0x5d, 0xc8, 0xef, 0x3a, 0xf7, 0x85, 0xea, 0xec, 0xe9, 0xde, 0xdd, 0xa0, 0xf4, + 0xe7, 0x56, 0x9d, 0xfb, 0x5c, 0x48, 0x7c, 0x5a, 0x2e, 0x90, 0x55, 0xe7, 0xfe, 0x11, 0xb7, 0x73, + 0x61, 0x87, 0xd4, 0x2d, 0x37, 0x8c, 0xbe, 0xf4, 0x9f, 0xe3, 0xff, 0x6c, 0xd9, 0xd1, 0x46, 0x58, + 0x5b, 0xae, 0x27, 0x1e, 0x4a, 0x07, 0x6a, 0xcb, 0xf5, 0x92, 0x6d, 0xb9, 0xde, 0x00, 0x6d, 0xb9, + 0x1e, 0x7a, 0x1f, 0x46, 0x84, 0x51, 0x82, 0xf0, 0xb9, 0x9f, 0x1f, 0xa0, 0x3d, 0x61, 0xd3, 0xc0, + 0xdb, 0x9c, 0x97, 0x42, 0xb0, 0x28, 0xed, 0xdb, 0xae, 0x6c, 0x10, 0xfd, 0x0d, 0x0b, 0x26, 0xc4, + 0x6f, 0x4c, 0xde, 0xeb, 0x90, 0x30, 0x12, 0xbc, 0xe7, 0xa7, 0x07, 0xef, 0x83, 0xa8, 0xc8, 0xbb, + 0xf2, 0x69, 0x79, 0xcc, 0x9a, 0xc0, 0xbe, 0x3d, 0x4a, 0xf4, 0x02, 0xfd, 0x23, 0x0b, 0xce, 0xee, + 0x3a, 0xf7, 0x79, 0x8b, 0xbc, 0x0c, 0x3b, 0x91, 0xeb, 0x0b, 0x63, 0xfd, 0x57, 0x07, 0x9b, 0xfe, + 0xae, 0xea, 0xbc, 0x93, 0xd2, 0xae, 0xf7, 0x6c, 0x1a, 0x4a, 0xdf, 0xae, 0xa6, 0xf6, 0x6b, 0x76, + 0x13, 0x8a, 0x72, 0xbd, 0xa5, 0xa8, 0x1a, 0x2a, 0x3a, 0x63, 0x7d, 0x6c, 0x9b, 0x10, 0xdd, 0x11, + 0x8f, 0xb6, 0x23, 0xd6, 0xda, 0x43, 0x6d, 0xe7, 0x5d, 0x18, 0xd3, 0xd7, 0xd8, 0x43, 0x6d, 0xeb, + 0x3d, 0x38, 0x93, 0xb2, 0x96, 0x1e, 0x6a, 0x93, 0xf7, 0xe0, 0x7c, 0xe6, 0xfa, 0x78, 0x98, 0x0d, + 0xdb, 0x3f, 0x67, 0xe9, 0xe7, 0xe0, 0x29, 0xbc, 0x39, 0x2c, 0x99, 0x6f, 0x0e, 0x97, 0x7a, 0xef, + 0x9c, 0x8c, 0x87, 0x87, 0xb7, 0xf5, 0x4e, 0xd3, 0x53, 0x1d, 0xbd, 0x0e, 0xc3, 0x2d, 0x5a, 0x22, + 0xad, 0x61, 0xec, 0xfe, 0x3b, 0x32, 0xe6, 0xa5, 0x58, 0x79, 0x88, 0x05, 0x05, 0xfb, 0x97, 0x2c, + 0x28, 0x9c, 0xc2, 0x48, 0x60, 0x73, 0x24, 0x9e, 0xcd, 0x24, 0x2d, 0x62, 0xf1, 0xcd, 0x61, 0xe7, + 0xde, 0xf2, 0xfd, 0x88, 0x78, 0x21, 0x13, 0x15, 0x53, 0x07, 0xe6, 0xbb, 0xe0, 0xcc, 0x2d, 0xdf, + 0x69, 0x2e, 0x3a, 0x2d, 0xc7, 0x6b, 0x90, 0xa0, 0xea, 0x6d, 0xf5, 0x35, 0xcb, 0xd2, 0x8d, 0xa8, + 0x72, 0xfd, 0x8c, 0xa8, 0xec, 0x6d, 0x40, 0x7a, 0x03, 0xc2, 0x70, 0x15, 0xc3, 0x88, 0xcb, 0x9b, + 0x12, 0xc3, 0xff, 0x64, 0x3a, 0x77, 0xd7, 0xd5, 0x33, 0xcd, 0x24, 0x93, 0x17, 0x60, 0x49, 0xc8, + 0x7e, 0x19, 0x52, 0x9d, 0xd5, 0xfa, 0xab, 0x0d, 0xec, 0xcf, 0xc3, 0x34, 0xab, 0x79, 0x4c, 0x91, + 0xd6, 0x4e, 0x68, 0x25, 0x53, 0x22, 0xd3, 0xd8, 0x5f, 0xb6, 0x60, 0x72, 0x2d, 0x11, 0xb0, 0xe3, + 0x0a, 0x7b, 0x00, 0x4d, 0x51, 0x86, 0xd7, 0x59, 0x29, 0x16, 0xd0, 0x13, 0xd7, 0x41, 0xfd, 0x99, + 0x05, 0xb1, 0xff, 0xe8, 0x29, 0x30, 0x5e, 0x4b, 0x06, 0xe3, 0x95, 0xaa, 0x1b, 0x51, 0xdd, 0xc9, + 0xe2, 0xbb, 0xd0, 0x4d, 0x15, 0x2c, 0xa1, 0x87, 0x5a, 0x24, 0x26, 0xc3, 0x5d, 0xeb, 0x27, 0xcc, + 0x88, 0x0a, 0x32, 0x7c, 0x02, 0xb3, 0x9d, 0x52, 0xb8, 0x1f, 0x11, 0xdb, 0x29, 0xd5, 0x9f, 0x8c, + 0x1d, 0x5a, 0xd3, 0xba, 0xcc, 0x4e, 0xae, 0x6f, 0x67, 0xb6, 0xf0, 0x4e, 0xcb, 0x7d, 0x9f, 0xa8, + 0x88, 0x2f, 0x65, 0x61, 0xdb, 0x2e, 0x4a, 0x8f, 0x0e, 0xca, 0xe3, 0xea, 0x1f, 0x0f, 0xef, 0x16, + 0x57, 0xb1, 0x6f, 0xc0, 0x64, 0x62, 0xc0, 0xd0, 0x8b, 0x30, 0xd4, 0xde, 0x76, 0x42, 0x92, 0xb0, + 0x17, 0x1d, 0xaa, 0xd1, 0xc2, 0xa3, 0x83, 0xf2, 0x84, 0xaa, 0xc0, 0x4a, 0x30, 0xc7, 0xb6, 0xff, + 0x87, 0x05, 0x85, 0x35, 0xbf, 0x79, 0x1a, 0x8b, 0xe9, 0x35, 0x63, 0x31, 0x5d, 0xc8, 0x0a, 0x8e, + 0x99, 0xb9, 0x8e, 0x56, 0x12, 0xeb, 0xe8, 0x52, 0x26, 0x85, 0xde, 0x4b, 0x68, 0x17, 0x46, 0x59, + 0xc8, 0x4d, 0x61, 0xbf, 0xfa, 0xbc, 0x21, 0x03, 0x94, 0x13, 0x32, 0xc0, 0xa4, 0x86, 0xaa, 0x49, + 0x02, 0x4f, 0xc1, 0x88, 0xb0, 0xa1, 0x4c, 0x5a, 0xfd, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x8f, 0xe5, + 0xc1, 0x08, 0xf1, 0x89, 0x7e, 0xc5, 0x82, 0xb9, 0x80, 0xbb, 0x51, 0x36, 0x2b, 0x9d, 0xc0, 0xf5, + 0xb6, 0xea, 0x8d, 0x6d, 0xd2, 0xec, 0xb4, 0x5c, 0x6f, 0xab, 0xba, 0xe5, 0xf9, 0xaa, 0x78, 0xf9, + 0x3e, 0x69, 0x74, 0xd8, 0x43, 0x48, 0x9f, 0x78, 0xa2, 0xca, 0x46, 0xe9, 0xda, 0xe1, 0x41, 0x79, + 0x0e, 0x1f, 0x8b, 0x36, 0x3e, 0x66, 0x5f, 0xd0, 0xd7, 0x2d, 0x98, 0xe7, 0x91, 0x2f, 0x07, 0xef, + 0x7f, 0x0f, 0x89, 0xa9, 0x26, 0x49, 0xc5, 0x44, 0xd6, 0x49, 0xb0, 0xbb, 0xf8, 0x92, 0x18, 0xd0, + 0xf9, 0xda, 0xf1, 0xda, 0xc2, 0xc7, 0xed, 0x9c, 0xfd, 0x2f, 0xf3, 0x30, 0x2e, 0x3c, 0xf8, 0x45, + 0x68, 0x98, 0x17, 0x8d, 0x25, 0xf1, 0x78, 0x62, 0x49, 0x4c, 0x1b, 0xc8, 0x27, 0x13, 0x15, 0x26, + 0x84, 0xe9, 0x96, 0x13, 0x46, 0x37, 0x88, 0x13, 0x44, 0x1b, 0xc4, 0xe1, 0xb6, 0x3b, 0xf9, 0x63, + 0xdb, 0x19, 0x29, 0x15, 0xcd, 0xad, 0x24, 0x31, 0xdc, 0x4d, 0x1f, 0xed, 0x01, 0x62, 0x06, 0x48, + 0x81, 0xe3, 0x85, 0xfc, 0x5b, 0x5c, 0xf1, 0x66, 0x70, 0xbc, 0x56, 0x67, 0x45, 0xab, 0xe8, 0x56, + 0x17, 0x35, 0x9c, 0xd2, 0x82, 0x66, 0x58, 0x36, 0x34, 0xa8, 0x61, 0xd9, 0x70, 0x1f, 0xd7, 0x1a, + 0x0f, 0xa6, 0xba, 0x82, 0x30, 0xbc, 0x05, 0x25, 0x65, 0x00, 0x28, 0x0e, 0x9d, 0xde, 0xb1, 0x4c, + 0x92, 0x14, 0xb8, 0x1a, 0x25, 0x36, 0x3e, 0x8d, 0xc9, 0xd9, 0xff, 0x38, 0x67, 0x34, 0xc8, 0x27, + 0x71, 0x0d, 0x8a, 0x4e, 0x18, 0xba, 0x5b, 0x1e, 0x69, 0x8a, 0x1d, 0xfb, 0xf1, 0xac, 0x1d, 0x6b, + 0x34, 0xc3, 0x8c, 0x30, 0x17, 0x44, 0x4d, 0xac, 0x68, 0xa0, 0x1b, 0xdc, 0x42, 0x6a, 0x4f, 0xf2, + 0xfc, 0x83, 0x51, 0x03, 0x69, 0x43, 0xb5, 0x47, 0xb0, 0xa8, 0x8f, 0xbe, 0xc0, 0x4d, 0xd8, 0x6e, + 0x7a, 0xfe, 0x3d, 0xef, 0xba, 0xef, 0x4b, 0xb7, 0xbb, 0xc1, 0x08, 0x4e, 0x4b, 0xc3, 0x35, 0x55, + 0x1d, 0x9b, 0xd4, 0x06, 0x0b, 0x54, 0xf4, 0xdd, 0x70, 0x86, 0x92, 0x36, 0x9d, 0x67, 0x42, 0x44, + 0x60, 0x52, 0x84, 0x87, 0x90, 0x65, 0x62, 0xec, 0x52, 0xd9, 0x79, 0xb3, 0x76, 0xac, 0xf4, 0xbb, + 0x69, 0x92, 0xc0, 0x49, 0x9a, 0xf6, 0x4f, 0x5a, 0xc0, 0xcc, 0xfe, 0x4f, 0x81, 0x65, 0xf8, 0xac, + 0xc9, 0x32, 0xcc, 0x64, 0x0d, 0x72, 0x06, 0xb7, 0xf0, 0x02, 0x5f, 0x59, 0xb5, 0xc0, 0xbf, 0xbf, + 0x2f, 0xcc, 0x07, 0xfa, 0x73, 0xb2, 0xf6, 0xff, 0xb1, 0xf8, 0x21, 0xa6, 0x3c, 0xf1, 0xd1, 0xf7, + 0x40, 0xb1, 0xe1, 0xb4, 0x9d, 0x06, 0x8f, 0x47, 0x9d, 0xa9, 0xd5, 0x31, 0x2a, 0xcd, 0x2d, 0x89, + 0x1a, 0x5c, 0x4b, 0x21, 0xc3, 0x8c, 0x14, 0x65, 0x71, 0x5f, 0xcd, 0x84, 0x6a, 0x72, 0x76, 0x07, + 0xc6, 0x0d, 0x62, 0x0f, 0x55, 0xa4, 0xfd, 0x1e, 0x7e, 0xc5, 0xaa, 0xb0, 0x38, 0xbb, 0x30, 0xed, + 0x69, 0xff, 0xe9, 0x85, 0x22, 0xc5, 0x94, 0x8f, 0xf7, 0xbb, 0x44, 0xd9, 0xed, 0xa3, 0xb9, 0x35, + 0x24, 0xc8, 0xe0, 0x6e, 0xca, 0xf6, 0x8f, 0x5b, 0xf0, 0xa8, 0x8e, 0xa8, 0x05, 0x49, 0xe8, 0xa7, + 0x27, 0xae, 0x40, 0xd1, 0x6f, 0x93, 0xc0, 0x89, 0xfc, 0x40, 0xdc, 0x1a, 0x57, 0xe5, 0xa0, 0xdf, + 0x16, 0xe5, 0x47, 0x22, 0xa0, 0xa4, 0xa4, 0x2e, 0xcb, 0xb1, 0xaa, 0x49, 0xe5, 0x18, 0x36, 0x18, + 0xa1, 0x08, 0x60, 0xc1, 0xce, 0x00, 0xf6, 0x64, 0x1a, 0x62, 0x01, 0xb1, 0xff, 0xc0, 0xe2, 0x0b, + 0x4b, 0xef, 0x3a, 0x7a, 0x0f, 0xa6, 0x76, 0x9d, 0xa8, 0xb1, 0xbd, 0x7c, 0xbf, 0x1d, 0x70, 0xf5, + 0xb8, 0x1c, 0xa7, 0xa7, 0xfb, 0x8d, 0x93, 0xf6, 0x91, 0xb1, 0x55, 0xde, 0x6a, 0x82, 0x18, 0xee, + 0x22, 0x8f, 0x36, 0x60, 0x94, 0x95, 0x31, 0xf3, 0xef, 0xb0, 0x17, 0x6b, 0x90, 0xd5, 0x9a, 0x7a, + 0x75, 0x5e, 0x8d, 0xe9, 0x60, 0x9d, 0xa8, 0xfd, 0xa5, 0x3c, 0xdf, 0xed, 0x8c, 0xdb, 0x7e, 0x0a, + 0x46, 0xda, 0x7e, 0x73, 0xa9, 0x5a, 0xc1, 0x62, 0x16, 0xd4, 0x35, 0x52, 0xe3, 0xc5, 0x58, 0xc2, + 0xd1, 0x2b, 0x00, 0xe4, 0x7e, 0x44, 0x02, 0xcf, 0x69, 0x29, 0x2b, 0x19, 0x65, 0x17, 0x5a, 0xf1, + 0xd7, 0xfc, 0xe8, 0x4e, 0x48, 0xbe, 0x6b, 0x59, 0xa1, 0x60, 0x0d, 0x1d, 0x5d, 0x03, 0x68, 0x07, + 0xfe, 0x9e, 0xdb, 0x64, 0xfe, 0x84, 0x79, 0xd3, 0x86, 0xa4, 0xa6, 0x20, 0x58, 0xc3, 0x42, 0xaf, + 0xc0, 0x78, 0xc7, 0x0b, 0x39, 0x87, 0xe2, 0x6c, 0x88, 0x70, 0x8c, 0xc5, 0xd8, 0xba, 0xe1, 0x8e, + 0x0e, 0xc4, 0x26, 0x2e, 0x5a, 0x80, 0xe1, 0xc8, 0x61, 0x36, 0x11, 0x43, 0xd9, 0xc6, 0x9c, 0xeb, + 0x14, 0x43, 0x8f, 0x86, 0x4c, 0x2b, 0x60, 0x51, 0x11, 0xbd, 0x25, 0x9d, 0x33, 0xf8, 0x59, 0x2f, + 0xac, 0xa8, 0x07, 0xbb, 0x17, 0x34, 0xd7, 0x0c, 0x61, 0x9d, 0x6d, 0xd0, 0xb2, 0xbf, 0x5e, 0x02, + 0x88, 0xd9, 0x71, 0xf4, 0x7e, 0xd7, 0x79, 0xf4, 0x4c, 0x6f, 0x06, 0xfe, 0xe4, 0x0e, 0x23, 0xf4, + 0xfd, 0x16, 0x8c, 0x3a, 0xad, 0x96, 0xdf, 0x70, 0x22, 0x36, 0xca, 0xb9, 0xde, 0xe7, 0xa1, 0x68, + 0x7f, 0x21, 0xae, 0xc1, 0xbb, 0xf0, 0xbc, 0x5c, 0x78, 0x1a, 0xa4, 0x6f, 0x2f, 0xf4, 0x86, 0xd1, + 0xa7, 0xa4, 0x94, 0xc6, 0x97, 0xc7, 0x6c, 0x52, 0x4a, 0x2b, 0xb1, 0xa3, 0x5f, 0x13, 0xd0, 0xd0, + 0x1d, 0x23, 0xd2, 0x5e, 0x21, 0x3b, 0xe8, 0x84, 0xc1, 0x95, 0xf6, 0x0b, 0xb2, 0x87, 0x6a, 0xba, + 0x37, 0xd9, 0x50, 0x76, 0x64, 0x16, 0x4d, 0xfc, 0xe9, 0xe3, 0x49, 0xf6, 0x2e, 0x4c, 0x36, 0xcd, + 0xbb, 0x5d, 0xac, 0xa6, 0x27, 0xb3, 0xe8, 0x26, 0x58, 0x81, 0xf8, 0x36, 0x4f, 0x00, 0x70, 0x92, + 0x30, 0xaa, 0x71, 0xbf, 0xbe, 0xaa, 0xb7, 0xe9, 0x0b, 0x6b, 0x7c, 0x3b, 0x73, 0x2e, 0xf7, 0xc3, + 0x88, 0xec, 0x52, 0xcc, 0xf8, 0xd2, 0x5e, 0x13, 0x75, 0xb1, 0xa2, 0x82, 0x5e, 0x87, 0x61, 0xe6, + 0x18, 0x1c, 0xce, 0x14, 0xb3, 0x95, 0x89, 0x66, 0x4c, 0x8b, 0x78, 0x53, 0xb1, 0xbf, 0x21, 0x16, + 0x14, 0xd0, 0x0d, 0x19, 0xf8, 0x26, 0xac, 0x7a, 0x77, 0x42, 0xc2, 0x02, 0xdf, 0x94, 0x16, 0x3f, + 0x1e, 0xc7, 0xb4, 0xe1, 0xe5, 0xa9, 0x79, 0x0f, 0x8c, 0x9a, 0x94, 0x39, 0x12, 0xff, 0x65, 0x3a, + 0x85, 0x19, 0xc8, 0xee, 0x9e, 0x99, 0x72, 0x21, 0x1e, 0xce, 0xbb, 0x26, 0x09, 0x9c, 0xa4, 0x49, + 0x19, 0x4d, 0xbe, 0x73, 0x85, 0x3d, 0x7f, 0xbf, 0xfd, 0xcf, 0xe5, 0x6b, 0x76, 0xc9, 0xf0, 0x12, + 0x2c, 0xea, 0x9f, 0xea, 0xad, 0x3f, 0xeb, 0xc1, 0x54, 0x72, 0x8b, 0x3e, 0x54, 0x2e, 0xe3, 0xf7, + 0x0b, 0x30, 0x61, 0x2e, 0x29, 0x34, 0x0f, 0x25, 0x41, 0x44, 0x45, 0x61, 0x55, 0xbb, 0x64, 0x55, + 0x02, 0x70, 0x8c, 0xc3, 0x82, 0xef, 0xb2, 0xea, 0x9a, 0x1d, 0x66, 0x1c, 0x7c, 0x57, 0x41, 0xb0, + 0x86, 0x45, 0xe5, 0xa5, 0x0d, 0xdf, 0x8f, 0xd4, 0xa5, 0xa2, 0xd6, 0xdd, 0x22, 0x2b, 0xc5, 0x02, + 0x4a, 0x2f, 0x93, 0x1d, 0x12, 0x78, 0xa4, 0x65, 0x06, 0x77, 0x53, 0x97, 0xc9, 0x4d, 0x1d, 0x88, + 0x4d, 0x5c, 0x7a, 0x4b, 0xfa, 0x21, 0x5b, 0xc8, 0x42, 0x2a, 0x8b, 0xed, 0x5a, 0xeb, 0xdc, 0xc5, + 0x5e, 0xc2, 0xd1, 0xe7, 0xe1, 0x51, 0xe5, 0x11, 0x8f, 0xb9, 0xa2, 0x5a, 0xb6, 0x38, 0x6c, 0x28, + 0x51, 0x1e, 0x5d, 0x4a, 0x47, 0xc3, 0x59, 0xf5, 0xd1, 0x6b, 0x30, 0x21, 0x38, 0x77, 0x49, 0x71, + 0xc4, 0xb4, 0x9d, 0xb8, 0x69, 0x40, 0x71, 0x02, 0x5b, 0x86, 0xa7, 0x63, 0xcc, 0xb3, 0xa4, 0x50, + 0xec, 0x0e, 0x4f, 0xa7, 0xc3, 0x71, 0x57, 0x0d, 0xb4, 0x00, 0x93, 0x9c, 0xb5, 0x72, 0xbd, 0x2d, + 0x3e, 0x27, 0xc2, 0xdd, 0x46, 0x6d, 0xa9, 0xdb, 0x26, 0x18, 0x27, 0xf1, 0xd1, 0xcb, 0x30, 0xe6, + 0x04, 0x8d, 0x6d, 0x37, 0x22, 0x8d, 0xa8, 0x13, 0x70, 0x3f, 0x1c, 0xcd, 0xf8, 0x64, 0x41, 0x83, + 0x61, 0x03, 0xd3, 0x7e, 0x1f, 0xce, 0xa4, 0x78, 0xea, 0xd1, 0x85, 0xe3, 0xb4, 0x5d, 0xf9, 0x4d, + 0x09, 0x0b, 0xd5, 0x85, 0x5a, 0x55, 0x7e, 0x8d, 0x86, 0x45, 0x57, 0x27, 0xf3, 0xe8, 0xd3, 0xb2, + 0xa7, 0xa8, 0xd5, 0xb9, 0x22, 0x01, 0x38, 0xc6, 0xb1, 0xff, 0x67, 0x0e, 0x26, 0x53, 0x94, 0xef, + 0x2c, 0x83, 0x47, 0x42, 0xf6, 0x88, 0x13, 0x76, 0x98, 0xd1, 0x0e, 0x73, 0xc7, 0x88, 0x76, 0x98, + 0xef, 0x17, 0xed, 0xb0, 0xf0, 0x41, 0xa2, 0x1d, 0x9a, 0x23, 0x36, 0x34, 0xd0, 0x88, 0xa5, 0x44, + 0x48, 0x1c, 0x3e, 0x66, 0x84, 0x44, 0x63, 0xd0, 0x47, 0x06, 0x18, 0xf4, 0xaf, 0xe6, 0x60, 0x2a, + 0x69, 0x24, 0x77, 0x0a, 0xea, 0xd8, 0xd7, 0x0d, 0x75, 0x6c, 0x7a, 0x3e, 0x9c, 0xa4, 0xe9, 0x5e, + 0x96, 0x6a, 0x16, 0x27, 0x54, 0xb3, 0x9f, 0x1c, 0x88, 0x5a, 0x6f, 0x35, 0xed, 0xdf, 0xcd, 0xc1, + 0xb9, 0x64, 0x95, 0xa5, 0x96, 0xe3, 0xee, 0x9e, 0xc2, 0xd8, 0xdc, 0x36, 0xc6, 0xe6, 0xd9, 0x41, + 0xbe, 0x86, 0x75, 0x2d, 0x73, 0x80, 0xde, 0x4c, 0x0c, 0xd0, 0xfc, 0xe0, 0x24, 0x7b, 0x8f, 0xd2, + 0x37, 0xf2, 0x70, 0x29, 0xb5, 0x5e, 0xac, 0xcd, 0x5c, 0x31, 0xb4, 0x99, 0xd7, 0x12, 0xda, 0x4c, + 0xbb, 0x77, 0xed, 0x93, 0x51, 0x6f, 0x0a, 0x17, 0x4a, 0x16, 0x11, 0xef, 0x01, 0x55, 0x9b, 0x86, + 0x0b, 0xa5, 0x22, 0x84, 0x4d, 0xba, 0xdf, 0x4c, 0x2a, 0xcd, 0x7f, 0x63, 0xc1, 0xf9, 0xd4, 0xb9, + 0x39, 0x05, 0x15, 0xd6, 0x9a, 0xa9, 0xc2, 0x7a, 0x6a, 0xe0, 0xd5, 0x9a, 0xa1, 0xd3, 0xfa, 0x8d, + 0x42, 0xc6, 0xb7, 0x30, 0x01, 0xfd, 0x36, 0x8c, 0x3a, 0x8d, 0x06, 0x09, 0xc3, 0x55, 0xbf, 0xa9, + 0x22, 0xc4, 0x3d, 0xcb, 0xe4, 0xac, 0xb8, 0xf8, 0xe8, 0xa0, 0x3c, 0x9b, 0x24, 0x11, 0x83, 0xb1, + 0x4e, 0xc1, 0x0c, 0x6a, 0x99, 0x3b, 0xd1, 0xa0, 0x96, 0xd7, 0x00, 0xf6, 0x14, 0xb7, 0x9e, 0x14, + 0xf2, 0x35, 0x3e, 0x5e, 0xc3, 0x42, 0x5f, 0x80, 0x62, 0x28, 0xae, 0x71, 0xb1, 0x14, 0x9f, 0x1f, + 0x70, 0xae, 0x9c, 0x0d, 0xd2, 0x32, 0x7d, 0xf5, 0x95, 0x3e, 0x44, 0x91, 0x44, 0xdf, 0x01, 0x53, + 0x21, 0x0f, 0x05, 0xb3, 0xd4, 0x72, 0x42, 0xe6, 0x07, 0x21, 0x56, 0x21, 0x73, 0xc0, 0xaf, 0x27, + 0x60, 0xb8, 0x0b, 0x1b, 0xad, 0xc8, 0x8f, 0x62, 0x71, 0x6b, 0xf8, 0xc2, 0xbc, 0x12, 0x7f, 0x90, + 0xc8, 0x1f, 0x76, 0x36, 0x39, 0xfc, 0x6c, 0xe0, 0xb5, 0x9a, 0xe8, 0x0b, 0x00, 0x74, 0xf9, 0x08, + 0x5d, 0xc2, 0x48, 0xf6, 0xe1, 0x49, 0x4f, 0x95, 0x66, 0xaa, 0xe5, 0x27, 0x73, 0x5e, 0xac, 0x28, + 0x22, 0x58, 0x23, 0x68, 0x7f, 0xb5, 0x00, 0x8f, 0xf5, 0x38, 0x23, 0xd1, 0x82, 0xf9, 0x04, 0xfa, + 0x74, 0x52, 0xb8, 0x9e, 0x4d, 0xad, 0x6c, 0x48, 0xdb, 0x89, 0xa5, 0x98, 0xfb, 0xc0, 0x4b, 0xf1, + 0x07, 0x2d, 0x4d, 0xed, 0xc1, 0x8d, 0xf9, 0x3e, 0x7b, 0xcc, 0xb3, 0xff, 0x04, 0xf5, 0x20, 0x9b, + 0x29, 0xca, 0x84, 0x6b, 0x03, 0x77, 0x67, 0x60, 0xed, 0xc2, 0xe9, 0x2a, 0x7f, 0xbf, 0x64, 0xc1, + 0xe3, 0xa9, 0xfd, 0x35, 0x4c, 0x36, 0xe6, 0xa1, 0xd4, 0xa0, 0x85, 0x9a, 0xaf, 0x5a, 0xec, 0xc4, + 0x2b, 0x01, 0x38, 0xc6, 0x31, 0x2c, 0x33, 0x72, 0x7d, 0x2d, 0x33, 0xfe, 0x85, 0x05, 0x5d, 0xfb, + 0xe3, 0x14, 0x0e, 0xea, 0xaa, 0x79, 0x50, 0x7f, 0x7c, 0x90, 0xb9, 0xcc, 0x38, 0xa3, 0xff, 0x68, + 0x12, 0x1e, 0xc9, 0xf0, 0xd5, 0xd8, 0x83, 0xe9, 0xad, 0x06, 0x31, 0xbd, 0x00, 0xc5, 0xc7, 0xa4, + 0x3a, 0x4c, 0xf6, 0x74, 0x19, 0x64, 0xf9, 0x88, 0xa6, 0xbb, 0x50, 0x70, 0x77, 0x13, 0xe8, 0x4b, + 0x16, 0x9c, 0x75, 0xee, 0x85, 0x5d, 0xd9, 0x43, 0xc5, 0x9a, 0x79, 0x21, 0x55, 0x09, 0xd2, 0x27, + 0xdb, 0x28, 0x4f, 0xd0, 0x94, 0x86, 0x85, 0x53, 0xdb, 0x42, 0x58, 0xc4, 0x0c, 0xa5, 0xec, 0x7c, + 0x0f, 0x3f, 0xd5, 0x34, 0xa7, 0x1a, 0x7e, 0x64, 0x4b, 0x08, 0x56, 0x74, 0xd0, 0x3b, 0x50, 0xda, + 0x92, 0x9e, 0x6e, 0x29, 0x57, 0x42, 0x3c, 0x90, 0xbd, 0xfd, 0xff, 0xf8, 0x03, 0xa5, 0x42, 0xc2, + 0x31, 0x51, 0xf4, 0x1a, 0xe4, 0xbd, 0xcd, 0xb0, 0x57, 0x8e, 0xa3, 0x84, 0x4d, 0x13, 0xf7, 0x06, + 0x5f, 0x5b, 0xa9, 0x63, 0x5a, 0x11, 0xdd, 0x80, 0x7c, 0xb0, 0xd1, 0x14, 0x1a, 0xbc, 0xd4, 0x33, + 0x1c, 0x2f, 0x56, 0x32, 0x7a, 0xc5, 0x28, 0xe1, 0xc5, 0x0a, 0xa6, 0x24, 0x50, 0x0d, 0x86, 0x98, + 0x83, 0x83, 0xb8, 0x0f, 0x52, 0x39, 0xdf, 0x1e, 0x8e, 0x42, 0xdc, 0x65, 0x9c, 0x21, 0x60, 0x4e, + 0x08, 0xad, 0xc3, 0x70, 0x83, 0xe5, 0xc3, 0x11, 0x01, 0xab, 0x3f, 0x95, 0xaa, 0xab, 0xeb, 0x91, + 0x28, 0x48, 0xa8, 0xae, 0x18, 0x06, 0x16, 0xb4, 0x18, 0x55, 0xd2, 0xde, 0xde, 0x0c, 0x99, 0xac, + 0x9f, 0x45, 0xb5, 0x47, 0xfe, 0x2b, 0x41, 0x95, 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x06, 0x72, 0x9b, + 0x0d, 0xe1, 0xff, 0x90, 0xaa, 0xb4, 0x33, 0x1d, 0xfa, 0x17, 0x87, 0x0f, 0x0f, 0xca, 0xb9, 0x95, + 0x25, 0x9c, 0xdb, 0x6c, 0xa0, 0x35, 0x18, 0xd9, 0xe4, 0x2e, 0xc0, 0x42, 0x2f, 0xf7, 0x64, 0xba, + 0x77, 0x72, 0x97, 0x97, 0x30, 0xb7, 0xdb, 0x17, 0x00, 0x2c, 0x89, 0xb0, 0x10, 0x9c, 0xca, 0x95, + 0x59, 0xc4, 0xa2, 0x9e, 0x3b, 0x9e, 0xfb, 0x39, 0xbf, 0x9f, 0x63, 0x87, 0x68, 0xac, 0x51, 0xa4, + 0xab, 0xda, 0x91, 0x19, 0x2c, 0x45, 0xac, 0x8e, 0xd4, 0x55, 0xdd, 0x27, 0xb9, 0x27, 0x5f, 0xd5, + 0x0a, 0x09, 0xc7, 0x44, 0xd1, 0x0e, 0x8c, 0xef, 0x85, 0xed, 0x6d, 0x22, 0xb7, 0x34, 0x0b, 0xdd, + 0x91, 0x71, 0x85, 0xdd, 0x15, 0x88, 0x6e, 0x10, 0x75, 0x9c, 0x56, 0xd7, 0x29, 0xc4, 0x5e, 0xb5, + 0xef, 0xea, 0xc4, 0xb0, 0x49, 0x9b, 0x0e, 0xff, 0x7b, 0x1d, 0x7f, 0x63, 0x3f, 0x22, 0x22, 0x78, + 0x75, 0xea, 0xf0, 0xbf, 0xc1, 0x51, 0xba, 0x87, 0x5f, 0x00, 0xb0, 0x24, 0x82, 0xee, 0x8a, 0xe1, + 0x61, 0xa7, 0xe7, 0x54, 0x76, 0x30, 0xa5, 0xd4, 0x14, 0xb2, 0xda, 0xa0, 0xb0, 0xd3, 0x32, 0x26, + 0xc5, 0x4e, 0xc9, 0xf6, 0xb6, 0x1f, 0xf9, 0x5e, 0xe2, 0x84, 0x9e, 0xce, 0x3e, 0x25, 0x6b, 0x29, + 0xf8, 0xdd, 0xa7, 0x64, 0x1a, 0x16, 0x4e, 0x6d, 0x0b, 0x35, 0x61, 0xa2, 0xed, 0x07, 0xd1, 0x3d, + 0x3f, 0x90, 0xeb, 0x0b, 0xf5, 0xd0, 0x2b, 0x18, 0x98, 0xa2, 0x45, 0x16, 0x4c, 0xdd, 0x84, 0xe0, + 0x04, 0x4d, 0xf4, 0x39, 0x18, 0x09, 0x1b, 0x4e, 0x8b, 0x54, 0x6f, 0xcf, 0x9c, 0xc9, 0xbe, 0x7e, + 0xea, 0x1c, 0x25, 0x63, 0x75, 0xb1, 0xc9, 0x11, 0x28, 0x58, 0x92, 0x43, 0x2b, 0x30, 0xc4, 0x32, + 0x22, 0xb0, 0xb8, 0xdb, 0x19, 0x31, 0xa1, 0xba, 0x2c, 0x4c, 0xf9, 0xd9, 0xc4, 0x8a, 0x31, 0xaf, + 0x4e, 0xf7, 0x80, 0x60, 0xaf, 0xfd, 0x70, 0xe6, 0x5c, 0xf6, 0x1e, 0x10, 0x5c, 0xf9, 0xed, 0x7a, + 0xaf, 0x3d, 0xa0, 0x90, 0x70, 0x4c, 0x94, 0x9e, 0xcc, 0xf4, 0x34, 0x7d, 0xa4, 0x87, 0x41, 0x4b, + 0xe6, 0x59, 0xca, 0x4e, 0x66, 0x7a, 0x92, 0x52, 0x12, 0xf6, 0xef, 0x8e, 0x74, 0xf3, 0x2c, 0x4c, + 0x20, 0xfb, 0x4b, 0x56, 0xd7, 0x5b, 0xdd, 0xa7, 0x07, 0xd5, 0x0f, 0x9d, 0x20, 0xb7, 0xfa, 0x25, + 0x0b, 0x1e, 0x69, 0xa7, 0x7e, 0x88, 0x60, 0x00, 0x06, 0x53, 0x33, 0xf1, 0x4f, 0x57, 0xb1, 0xf1, + 0xd3, 0xe1, 0x38, 0xa3, 0xa5, 0xa4, 0x44, 0x90, 0xff, 0xc0, 0x12, 0xc1, 0x2a, 0x14, 0x19, 0x93, + 0xd9, 0x27, 0x3f, 0x5c, 0x52, 0x30, 0x62, 0xac, 0xc4, 0x92, 0xa8, 0x88, 0x15, 0x09, 0xf4, 0x43, + 0x16, 0x5c, 0x4c, 0x76, 0x1d, 0x13, 0x06, 0x16, 0x91, 0xe4, 0xb9, 0x2c, 0xb8, 0x22, 0xbe, 0xff, + 0x62, 0xad, 0x17, 0xf2, 0x51, 0x3f, 0x04, 0xdc, 0xbb, 0x31, 0x54, 0x49, 0x11, 0x46, 0x87, 0x4d, + 0x05, 0xfc, 0x00, 0x02, 0xe9, 0x0b, 0x30, 0xb6, 0xeb, 0x77, 0xbc, 0x48, 0xd8, 0xbf, 0x08, 0x8f, + 0x45, 0xf6, 0xe0, 0xbc, 0xaa, 0x95, 0x63, 0x03, 0x2b, 0x21, 0xc6, 0x16, 0x1f, 0x58, 0x8c, 0x7d, + 0x3b, 0x91, 0xcd, 0xbd, 0x94, 0x1d, 0xb1, 0x50, 0x48, 0xfc, 0xc7, 0xc8, 0xe9, 0x7e, 0xba, 0xb2, + 0xd1, 0x4f, 0x5b, 0x29, 0x4c, 0x3d, 0x97, 0x96, 0x5f, 0x35, 0xa5, 0xe5, 0x2b, 0x49, 0x69, 0xb9, + 0x4b, 0xf9, 0x6a, 0x08, 0xca, 0x83, 0x87, 0xbd, 0x1e, 0x34, 0x8e, 0x9c, 0xdd, 0x82, 0xcb, 0xfd, + 0xae, 0x25, 0x66, 0x08, 0xd5, 0x54, 0x4f, 0x6d, 0xb1, 0x21, 0x54, 0xb3, 0x5a, 0xc1, 0x0c, 0x32, + 0x68, 0xa0, 0x11, 0xfb, 0xbf, 0x5b, 0x90, 0xaf, 0xf9, 0xcd, 0x53, 0x50, 0x26, 0x7f, 0xd6, 0x50, + 0x26, 0x3f, 0x96, 0x91, 0x65, 0x3f, 0x53, 0x75, 0xbc, 0x9c, 0x50, 0x1d, 0x5f, 0xcc, 0x22, 0xd0, + 0x5b, 0x51, 0xfc, 0x13, 0x79, 0x18, 0xad, 0xf9, 0x4d, 0x65, 0x85, 0xfc, 0x1b, 0x0f, 0x62, 0x85, + 0x9c, 0x19, 0x16, 0x56, 0xa3, 0xcc, 0xec, 0xa7, 0xa4, 0x13, 0xde, 0x9f, 0x33, 0x63, 0xe4, 0x37, + 0x89, 0xbb, 0xb5, 0x1d, 0x91, 0x66, 0xf2, 0x73, 0x4e, 0xcf, 0x18, 0xf9, 0xbf, 0x5a, 0x30, 0x99, + 0x68, 0x1d, 0xb5, 0x60, 0xbc, 0xa5, 0x6b, 0x02, 0xc5, 0x3a, 0x7d, 0x20, 0x25, 0xa2, 0x30, 0xe6, + 0xd4, 0x8a, 0xb0, 0x49, 0x1c, 0xcd, 0x01, 0xa8, 0x97, 0x3a, 0xa9, 0x01, 0x63, 0x5c, 0xbf, 0x7a, + 0xca, 0x0b, 0xb1, 0x86, 0x81, 0x5e, 0x84, 0xd1, 0xc8, 0x6f, 0xfb, 0x2d, 0x7f, 0x6b, 0xff, 0x26, + 0x91, 0xa1, 0x6d, 0x94, 0x89, 0xd6, 0x7a, 0x0c, 0xc2, 0x3a, 0x9e, 0xfd, 0x53, 0x79, 0xfe, 0xa1, + 0x5e, 0xe4, 0x7e, 0x6b, 0x4d, 0x7e, 0xb4, 0xd7, 0xe4, 0x37, 0x2c, 0x98, 0xa2, 0xad, 0x33, 0x73, + 0x11, 0x79, 0xd9, 0xaa, 0xf4, 0x3b, 0x56, 0x8f, 0xf4, 0x3b, 0x57, 0xe8, 0xd9, 0xd5, 0xf4, 0x3b, + 0x91, 0xd0, 0xa0, 0x69, 0x87, 0x13, 0x2d, 0xc5, 0x02, 0x2a, 0xf0, 0x48, 0x10, 0x08, 0x1f, 0x28, + 0x1d, 0x8f, 0x04, 0x01, 0x16, 0x50, 0x99, 0x9d, 0xa7, 0x90, 0x91, 0x9d, 0x87, 0x05, 0xea, 0x13, + 0x86, 0x05, 0x82, 0xed, 0xd1, 0x02, 0xf5, 0x49, 0x8b, 0x83, 0x18, 0xc7, 0xfe, 0xb9, 0x3c, 0x8c, + 0xd5, 0xfc, 0x66, 0xfc, 0x56, 0xf6, 0x82, 0xf1, 0x56, 0x76, 0x39, 0xf1, 0x56, 0x36, 0xa5, 0xe3, + 0x7e, 0xeb, 0x65, 0xec, 0xc3, 0x7a, 0x19, 0xfb, 0xe7, 0x16, 0x9b, 0xb5, 0xca, 0x5a, 0x5d, 0x64, + 0x07, 0x7e, 0x0e, 0x46, 0xd9, 0x81, 0xc4, 0x9c, 0xee, 0xe4, 0x03, 0x12, 0x0b, 0xbc, 0xbf, 0x16, + 0x17, 0x63, 0x1d, 0x07, 0x5d, 0x85, 0x62, 0x48, 0x9c, 0xa0, 0xb1, 0xad, 0xce, 0x38, 0xf1, 0xbc, + 0xc2, 0xcb, 0xb0, 0x82, 0xa2, 0x37, 0xe2, 0x18, 0x71, 0xf9, 0xec, 0x3c, 0xb7, 0x7a, 0x7f, 0xf8, + 0x16, 0xc9, 0x0e, 0x0c, 0x67, 0xbf, 0x09, 0xa8, 0x1b, 0x7f, 0x80, 0xe0, 0x48, 0x65, 0x33, 0x38, + 0x52, 0xa9, 0x2b, 0x30, 0xd2, 0x9f, 0x5a, 0x30, 0x51, 0xf3, 0x9b, 0x74, 0xeb, 0x7e, 0x33, 0xed, + 0x53, 0x3d, 0x40, 0xe6, 0x70, 0x8f, 0x00, 0x99, 0x7f, 0xcf, 0x82, 0x91, 0x9a, 0xdf, 0x3c, 0x05, + 0xbd, 0xfb, 0xab, 0xa6, 0xde, 0xfd, 0xd1, 0x8c, 0x25, 0x91, 0xa1, 0x6a, 0xff, 0x85, 0x3c, 0x8c, + 0xd3, 0x7e, 0xfa, 0x5b, 0x72, 0x96, 0x8c, 0x11, 0xb1, 0x06, 0x18, 0x11, 0xca, 0xe6, 0xfa, 0xad, + 0x96, 0x7f, 0x2f, 0x39, 0x63, 0x2b, 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x06, 0x8a, 0xed, 0x80, 0xec, + 0xb9, 0xbe, 0xe0, 0x1f, 0xb5, 0x57, 0x8c, 0x9a, 0x28, 0xc7, 0x0a, 0x83, 0xca, 0x5d, 0xa1, 0xeb, + 0x35, 0x88, 0x4c, 0xb2, 0x5d, 0x60, 0x79, 0xb8, 0x78, 0xe4, 0x6b, 0xad, 0x1c, 0x1b, 0x58, 0xe8, + 0x4d, 0x28, 0xb1, 0xff, 0xec, 0x44, 0x39, 0x7e, 0xde, 0x20, 0x91, 0x6e, 0x42, 0x10, 0xc0, 0x31, + 0x2d, 0x74, 0x0d, 0x20, 0x92, 0xd1, 0x91, 0x43, 0x11, 0xe3, 0x46, 0xf1, 0xda, 0x2a, 0x6e, 0x72, + 0x88, 0x35, 0x2c, 0xf4, 0x34, 0x94, 0x22, 0xc7, 0x6d, 0xdd, 0x72, 0x3d, 0x12, 0x32, 0x95, 0x73, + 0x5e, 0x66, 0x93, 0x10, 0x85, 0x38, 0x86, 0x53, 0x5e, 0x87, 0x39, 0x80, 0xf3, 0xac, 0x63, 0x45, + 0x86, 0xcd, 0x78, 0x9d, 0x5b, 0xaa, 0x14, 0x6b, 0x18, 0xf6, 0xcb, 0x70, 0xae, 0xe6, 0x37, 0x6b, + 0x7e, 0x10, 0xad, 0xf8, 0xc1, 0x3d, 0x27, 0x68, 0xca, 0xf9, 0x2b, 0xcb, 0xc4, 0x06, 0xf4, 0xec, + 0x19, 0xe2, 0x3b, 0xd3, 0x48, 0x59, 0xf0, 0x3c, 0xe3, 0x76, 0x8e, 0xe9, 0xd4, 0xd1, 0x60, 0xf7, + 0xae, 0x4a, 0x30, 0x78, 0xdd, 0x89, 0x08, 0xba, 0xcd, 0x92, 0x92, 0xc5, 0x57, 0x90, 0xa8, 0xfe, + 0x94, 0x96, 0x94, 0x2c, 0x06, 0xa6, 0xde, 0x59, 0x66, 0x7d, 0xfb, 0x57, 0xf3, 0xec, 0x34, 0x4a, + 0xe4, 0xdb, 0x43, 0x5f, 0x84, 0x89, 0x90, 0xdc, 0x72, 0xbd, 0xce, 0x7d, 0x29, 0x84, 0xf7, 0x70, + 0xcb, 0xa9, 0x2f, 0xeb, 0x98, 0x5c, 0x95, 0x67, 0x96, 0xe1, 0x04, 0x35, 0x3a, 0x4f, 0x41, 0xc7, + 0x5b, 0x08, 0xef, 0x84, 0x24, 0x10, 0xf9, 0xde, 0xd8, 0x3c, 0x61, 0x59, 0x88, 0x63, 0x38, 0x5d, + 0x97, 0xec, 0xcf, 0x9a, 0xef, 0x61, 0xdf, 0x8f, 0xe4, 0x4a, 0x66, 0x19, 0x83, 0xb4, 0x72, 0x6c, + 0x60, 0xa1, 0x15, 0x40, 0x61, 0xa7, 0xdd, 0x6e, 0xb1, 0x87, 0x7d, 0xa7, 0x75, 0x3d, 0xf0, 0x3b, + 0x6d, 0xfe, 0xea, 0x99, 0xe7, 0x81, 0x09, 0xeb, 0x5d, 0x50, 0x9c, 0x52, 0x83, 0x9e, 0x3e, 0x9b, + 0x21, 0xfb, 0xcd, 0x56, 0x77, 0x5e, 0xa8, 0xd7, 0xeb, 0xac, 0x08, 0x4b, 0x18, 0x5d, 0x4c, 0xac, + 0x79, 0x8e, 0x39, 0x1c, 0x2f, 0x26, 0xac, 0x4a, 0xb1, 0x86, 0x81, 0x96, 0x61, 0x24, 0xdc, 0x0f, + 0x1b, 0x91, 0x88, 0xc8, 0x94, 0x91, 0xb9, 0xb3, 0xce, 0x50, 0xb4, 0x6c, 0x12, 0xbc, 0x0a, 0x96, + 0x75, 0xed, 0xef, 0x61, 0x97, 0x21, 0xcb, 0x0e, 0x16, 0x75, 0x02, 0x82, 0x76, 0x61, 0xbc, 0xcd, + 0xa6, 0x5c, 0xc4, 0xae, 0x16, 0xf3, 0xf6, 0xc2, 0x80, 0x52, 0xed, 0x3d, 0x7a, 0xd0, 0x28, 0xad, + 0x13, 0x13, 0x17, 0x6a, 0x3a, 0x39, 0x6c, 0x52, 0xb7, 0xbf, 0x8a, 0xd8, 0x99, 0x5b, 0xe7, 0xa2, + 0xea, 0x88, 0x30, 0x2d, 0x16, 0x7c, 0xf9, 0x6c, 0xb6, 0xce, 0x24, 0xfe, 0x22, 0x61, 0x9e, 0x8c, + 0x65, 0x5d, 0xf4, 0x06, 0x7b, 0xa5, 0xe6, 0x07, 0x5d, 0xbf, 0x24, 0xcd, 0x1c, 0xcb, 0x78, 0x90, + 0x16, 0x15, 0xb1, 0x46, 0x04, 0xdd, 0x82, 0x71, 0x91, 0x4c, 0x4a, 0x28, 0xc5, 0xf2, 0x86, 0xd2, + 0x63, 0x1c, 0xeb, 0xc0, 0xa3, 0x64, 0x01, 0x36, 0x2b, 0xa3, 0x2d, 0xb8, 0xa8, 0x65, 0x56, 0xbc, + 0x1e, 0x38, 0xec, 0xe5, 0xd2, 0x65, 0x9b, 0x48, 0x3b, 0x37, 0x1f, 0x3f, 0x3c, 0x28, 0x5f, 0x5c, + 0xef, 0x85, 0x88, 0x7b, 0xd3, 0x41, 0xb7, 0xe1, 0x1c, 0xf7, 0xe0, 0xab, 0x10, 0xa7, 0xd9, 0x72, + 0x3d, 0x75, 0x30, 0xf3, 0x75, 0x78, 0xfe, 0xf0, 0xa0, 0x7c, 0x6e, 0x21, 0x0d, 0x01, 0xa7, 0xd7, + 0x43, 0xaf, 0x42, 0xa9, 0xe9, 0x85, 0x62, 0x0c, 0x86, 0x8d, 0xa4, 0xa1, 0xa5, 0xca, 0x5a, 0x5d, + 0x7d, 0x7f, 0xfc, 0x07, 0xc7, 0x15, 0xd0, 0x16, 0x57, 0x8c, 0x29, 0x39, 0x74, 0x24, 0x3b, 0x41, + 0xbc, 0x58, 0x12, 0x86, 0x0f, 0x0f, 0xd7, 0x08, 0x2b, 0x1b, 0x58, 0xc3, 0xbd, 0xc7, 0x20, 0x8c, + 0x5e, 0x07, 0x44, 0x19, 0x35, 0xb7, 0x41, 0x16, 0x1a, 0x2c, 0x84, 0x38, 0xd3, 0x23, 0x16, 0x0d, + 0x9f, 0x09, 0x54, 0xef, 0xc2, 0xc0, 0x29, 0xb5, 0xd0, 0x0d, 0x7a, 0x90, 0xe9, 0xa5, 0xc2, 0x96, + 0x57, 0x32, 0xf7, 0x33, 0x15, 0xd2, 0x0e, 0x48, 0xc3, 0x89, 0x48, 0xd3, 0xa4, 0x88, 0x13, 0xf5, + 0xe8, 0x5d, 0xaa, 0xb2, 0x09, 0x81, 0x19, 0x36, 0xa3, 0x3b, 0xa3, 0x10, 0x95, 0x8b, 0xb7, 0xfd, + 0x30, 0x5a, 0x23, 0xd1, 0x3d, 0x3f, 0xd8, 0x11, 0x51, 0xca, 0xe2, 0x80, 0x99, 0x31, 0x08, 0xeb, + 0x78, 0x94, 0x0f, 0x66, 0xcf, 0xc4, 0xd5, 0x0a, 0x7b, 0xa1, 0x2b, 0xc6, 0xfb, 0xe4, 0x06, 0x2f, + 0xc6, 0x12, 0x2e, 0x51, 0xab, 0xb5, 0x25, 0xf6, 0xda, 0x96, 0x40, 0xad, 0xd6, 0x96, 0xb0, 0x84, + 0x23, 0xd2, 0x9d, 0x90, 0x75, 0x22, 0x5b, 0xab, 0xd9, 0x7d, 0x1d, 0x0c, 0x98, 0x93, 0xd5, 0x83, + 0x29, 0x95, 0x0a, 0x96, 0x87, 0x6f, 0x0b, 0x67, 0x26, 0xd9, 0x22, 0x19, 0x3c, 0xf6, 0x9b, 0xd2, + 0x13, 0x57, 0x13, 0x94, 0x70, 0x17, 0x6d, 0x23, 0x90, 0xc9, 0x54, 0xdf, 0x6c, 0x50, 0xf3, 0x50, + 0x0a, 0x3b, 0x1b, 0x4d, 0x7f, 0xd7, 0x71, 0x3d, 0xf6, 0x38, 0xa6, 0x31, 0x59, 0x75, 0x09, 0xc0, + 0x31, 0x0e, 0x5a, 0x81, 0xa2, 0x23, 0x95, 0xc0, 0x28, 0x3b, 0x6a, 0x81, 0x52, 0xfd, 0x72, 0x47, + 0x5e, 0xa9, 0xf6, 0x55, 0x75, 0xd1, 0x2b, 0x30, 0x2e, 0xfc, 0xb6, 0x78, 0x2c, 0x07, 0xf6, 0x78, + 0xa5, 0x19, 0xe6, 0xd7, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x17, 0x60, 0x82, 0x52, 0x89, 0x0f, 0xb6, + 0x99, 0xb3, 0x83, 0x9c, 0x88, 0x5a, 0x96, 0x0f, 0xbd, 0x32, 0x4e, 0x10, 0x43, 0x4d, 0xb8, 0xe0, + 0x74, 0x22, 0x9f, 0x29, 0xd2, 0xcd, 0xf5, 0xbf, 0xee, 0xef, 0x10, 0x8f, 0xbd, 0x61, 0x15, 0x17, + 0x2f, 0x1f, 0x1e, 0x94, 0x2f, 0x2c, 0xf4, 0xc0, 0xc3, 0x3d, 0xa9, 0xa0, 0x3b, 0x30, 0x1a, 0xf9, + 0x2d, 0x66, 0x22, 0x4f, 0x59, 0x89, 0x47, 0xb2, 0x03, 0x01, 0xad, 0x2b, 0x34, 0x5d, 0x89, 0xa4, + 0xaa, 0x62, 0x9d, 0x0e, 0x5a, 0xe7, 0x7b, 0x8c, 0x85, 0x48, 0x25, 0xe1, 0xcc, 0xa3, 0xd9, 0x03, + 0xa3, 0x22, 0xa9, 0x9a, 0x5b, 0x50, 0xd4, 0xc4, 0x3a, 0x19, 0x74, 0x1d, 0xa6, 0xdb, 0x81, 0xeb, + 0xb3, 0x85, 0xad, 0x1e, 0x31, 0x66, 0xcc, 0xc4, 0x0e, 0xb5, 0x24, 0x02, 0xee, 0xae, 0x43, 0x85, + 0x4c, 0x59, 0x38, 0x73, 0x9e, 0x67, 0x09, 0xe3, 0x8c, 0x37, 0x2f, 0xc3, 0x0a, 0x8a, 0x56, 0xd9, + 0xb9, 0xcc, 0xc5, 0xc1, 0x99, 0xd9, 0xec, 0x68, 0x0f, 0xba, 0xd8, 0xc8, 0xf9, 0x25, 0xf5, 0x17, + 0xc7, 0x14, 0xe8, 0xbd, 0x11, 0x6e, 0x3b, 0x01, 0xa9, 0x05, 0x7e, 0x83, 0x84, 0x5a, 0x54, 0xe6, + 0xc7, 0x78, 0x24, 0x47, 0x7a, 0x6f, 0xd4, 0xd3, 0x10, 0x70, 0x7a, 0x3d, 0xd4, 0xd4, 0x92, 0x63, + 0x53, 0x36, 0x34, 0x9c, 0xb9, 0xd0, 0xc3, 0xe0, 0x28, 0xc1, 0xb3, 0xc6, 0x6b, 0xd1, 0x28, 0x0e, + 0x71, 0x82, 0x26, 0xfa, 0x0e, 0x98, 0x12, 0x81, 0x8f, 0xe2, 0x71, 0xbf, 0x18, 0x5b, 0x32, 0xe2, + 0x04, 0x0c, 0x77, 0x61, 0xf3, 0x58, 0xd4, 0xce, 0x46, 0x8b, 0x88, 0x45, 0x78, 0xcb, 0xf5, 0x76, + 0xc2, 0x99, 0x4b, 0xec, 0xab, 0x45, 0x2c, 0xea, 0x24, 0x14, 0xa7, 0xd4, 0x98, 0xfd, 0x76, 0x98, + 0xee, 0xba, 0xb9, 0x8e, 0x15, 0xbf, 0xfd, 0x4f, 0x86, 0xa0, 0xa4, 0x94, 0xf2, 0x68, 0xde, 0x7c, + 0x6b, 0x39, 0x9f, 0x7c, 0x6b, 0x29, 0x52, 0xd9, 0x40, 0x7f, 0x5e, 0x59, 0x37, 0x0c, 0xf5, 0x72, + 0xd9, 0xd9, 0xd2, 0x74, 0xee, 0xbe, 0xaf, 0xd3, 0x9f, 0xa6, 0x63, 0xc9, 0x0f, 0xfc, 0x68, 0x53, + 0xe8, 0xa9, 0xb6, 0x19, 0x30, 0x59, 0x31, 0x7a, 0x82, 0x0a, 0x48, 0xcd, 0x6a, 0x2d, 0x99, 0xbd, + 0xb3, 0x46, 0x0b, 0x31, 0x87, 0x31, 0x41, 0x92, 0xb2, 0x59, 0x4c, 0x90, 0x1c, 0x79, 0x40, 0x41, + 0x52, 0x12, 0xc0, 0x31, 0x2d, 0xd4, 0x82, 0xe9, 0x86, 0x99, 0x78, 0x55, 0x39, 0xfa, 0x3d, 0xd1, + 0x37, 0x05, 0x6a, 0x47, 0xcb, 0x72, 0xb7, 0x94, 0xa4, 0x82, 0xbb, 0x09, 0xa3, 0x57, 0xa0, 0xf8, + 0x9e, 0x1f, 0xb2, 0x45, 0x29, 0x78, 0x0d, 0xe9, 0x10, 0x55, 0x7c, 0xe3, 0x76, 0x9d, 0x95, 0x1f, + 0x1d, 0x94, 0x47, 0x6b, 0x7e, 0x53, 0xfe, 0xc5, 0xaa, 0x02, 0xba, 0x0f, 0xe7, 0x8c, 0x13, 0x5a, + 0x75, 0x17, 0x06, 0xef, 0xee, 0x45, 0xd1, 0xdc, 0xb9, 0x6a, 0x1a, 0x25, 0x9c, 0xde, 0x00, 0x3d, + 0xf6, 0x3c, 0x5f, 0x24, 0x2d, 0x96, 0xfc, 0x0c, 0x63, 0x5b, 0x4a, 0xba, 0x3b, 0x7c, 0x02, 0x01, + 0x77, 0xd7, 0xb1, 0x7f, 0x99, 0xbf, 0x61, 0x08, 0x4d, 0x27, 0x09, 0x3b, 0xad, 0xd3, 0xc8, 0x89, + 0xb5, 0x6c, 0x28, 0x61, 0x1f, 0xf8, 0x9d, 0xec, 0xd7, 0x2d, 0xf6, 0x4e, 0xb6, 0x4e, 0x76, 0xdb, + 0x2d, 0x2a, 0x6f, 0x3f, 0xfc, 0x8e, 0xbf, 0x01, 0xc5, 0x48, 0xb4, 0xd6, 0x2b, 0x8d, 0x97, 0xd6, + 0x29, 0xf6, 0x56, 0xa8, 0x38, 0x1d, 0x59, 0x8a, 0x15, 0x19, 0xfb, 0x9f, 0xf2, 0x19, 0x90, 0x90, + 0x53, 0x50, 0x88, 0x55, 0x4c, 0x85, 0x58, 0xb9, 0xcf, 0x17, 0x64, 0x28, 0xc6, 0xfe, 0x89, 0xd9, + 0x6f, 0x26, 0x54, 0x7e, 0xd4, 0x1f, 0x68, 0xed, 0x1f, 0xb6, 0xe0, 0x6c, 0x9a, 0x45, 0x13, 0xe5, + 0x4e, 0xb9, 0x48, 0xab, 0x1e, 0xac, 0xd5, 0x08, 0xde, 0x15, 0xe5, 0x58, 0x61, 0x0c, 0x9c, 0x21, + 0xe3, 0x78, 0x11, 0xe3, 0x6e, 0xc3, 0x78, 0x2d, 0x20, 0xda, 0x1d, 0xf0, 0x1a, 0xf7, 0xac, 0xe3, + 0xfd, 0x79, 0xe6, 0xd8, 0x5e, 0x75, 0xf6, 0xcf, 0xe4, 0xe0, 0x2c, 0x7f, 0x71, 0x5a, 0xd8, 0xf3, + 0xdd, 0x66, 0xcd, 0x6f, 0x8a, 0xec, 0x26, 0x6f, 0xc1, 0x58, 0x5b, 0xd3, 0x43, 0xf4, 0x8a, 0x59, + 0xa5, 0xeb, 0x2b, 0x62, 0x79, 0x50, 0x2f, 0xc5, 0x06, 0x2d, 0xd4, 0x84, 0x31, 0xb2, 0xe7, 0x36, + 0xd4, 0xb3, 0x45, 0xee, 0xd8, 0x77, 0x83, 0x6a, 0x65, 0x59, 0xa3, 0x83, 0x0d, 0xaa, 0x0f, 0x21, + 0xe1, 0x9d, 0xfd, 0x23, 0x16, 0x3c, 0x9a, 0x11, 0xe1, 0x8a, 0x36, 0x77, 0x8f, 0xbd, 0xed, 0x89, + 0xdc, 0x59, 0xaa, 0x39, 0xfe, 0xe2, 0x87, 0x05, 0x14, 0x7d, 0x0e, 0x80, 0xbf, 0xd8, 0x51, 0xf1, + 0xa8, 0x5f, 0x28, 0x20, 0x23, 0x8a, 0x89, 0x16, 0x7d, 0x42, 0xd6, 0xc7, 0x1a, 0x2d, 0xfb, 0x27, + 0xf3, 0x30, 0xc4, 0x5e, 0x88, 0xd0, 0x0a, 0x8c, 0x6c, 0xf3, 0x98, 0xcf, 0x83, 0x84, 0x97, 0x8e, + 0xe5, 0x4c, 0x5e, 0x80, 0x65, 0x65, 0xb4, 0x0a, 0x67, 0x78, 0xcc, 0xec, 0x56, 0x85, 0xb4, 0x9c, + 0x7d, 0xa9, 0xae, 0xe0, 0xf9, 0xa6, 0x54, 0x24, 0x8d, 0x6a, 0x37, 0x0a, 0x4e, 0xab, 0x87, 0x5e, + 0x83, 0x09, 0xca, 0xdf, 0xf9, 0x9d, 0x48, 0x52, 0xe2, 0xd1, 0xb2, 0x15, 0x43, 0xb9, 0x6e, 0x40, + 0x71, 0x02, 0x9b, 0x0a, 0x5e, 0xed, 0x2e, 0xc5, 0xcc, 0x50, 0x2c, 0x78, 0x99, 0xca, 0x18, 0x13, + 0x97, 0x99, 0x32, 0x75, 0x98, 0xe1, 0xd6, 0xfa, 0x76, 0x40, 0xc2, 0x6d, 0xbf, 0xd5, 0x14, 0xe9, + 0xca, 0x63, 0x53, 0xa6, 0x04, 0x1c, 0x77, 0xd5, 0xa0, 0x54, 0x36, 0x1d, 0xb7, 0xd5, 0x09, 0x48, + 0x4c, 0x65, 0xd8, 0xa4, 0xb2, 0x92, 0x80, 0xe3, 0xae, 0x1a, 0x74, 0x1d, 0x9d, 0x13, 0xf9, 0xc3, + 0xa5, 0x7f, 0xbf, 0xb2, 0x4f, 0x1b, 0x91, 0x9e, 0x4e, 0x3d, 0x02, 0xdc, 0x08, 0x0b, 0x1e, 0x95, + 0x81, 0x5c, 0xd3, 0x27, 0x0a, 0x1f, 0x27, 0x49, 0xe5, 0x41, 0xb2, 0x58, 0xff, 0x40, 0x0e, 0xce, + 0xa4, 0xd8, 0xc1, 0xf2, 0xa3, 0x6a, 0xcb, 0x0d, 0x23, 0x95, 0x53, 0x47, 0x3b, 0xaa, 0x78, 0x39, + 0x56, 0x18, 0x74, 0x3f, 0xf0, 0xc3, 0x30, 0x79, 0x00, 0x0a, 0x3b, 0x33, 0x01, 0x3d, 0x66, 0x76, + 0x9a, 0xcb, 0x50, 0xe8, 0x84, 0x44, 0x86, 0xa6, 0x52, 0xe7, 0x37, 0xd3, 0x30, 0x33, 0x08, 0x65, + 0x4d, 0xb7, 0x94, 0x72, 0x57, 0x63, 0x4d, 0xb9, 0xc6, 0x96, 0xc3, 0x68, 0xe7, 0x22, 0xe2, 0x39, + 0x5e, 0x24, 0x18, 0xd8, 0x38, 0xa0, 0x0a, 0x2b, 0xc5, 0x02, 0x6a, 0x7f, 0x25, 0x0f, 0xe7, 0x33, + 0x2d, 0xe3, 0x69, 0xd7, 0x77, 0x7d, 0xcf, 0x8d, 0x7c, 0xf5, 0x4a, 0xc9, 0x83, 0xa8, 0x90, 0xf6, + 0xf6, 0xaa, 0x28, 0xc7, 0x0a, 0x03, 0x5d, 0x91, 0x19, 0xef, 0x93, 0xd9, 0x85, 0x16, 0x2b, 0x46, + 0xd2, 0xfb, 0x41, 0x33, 0xb7, 0x3d, 0x01, 0x85, 0xb6, 0xef, 0xb7, 0x92, 0x87, 0x16, 0xed, 0xae, + 0xef, 0xb7, 0x30, 0x03, 0xa2, 0x4f, 0x88, 0xf1, 0x4a, 0x3c, 0xcb, 0x61, 0xa7, 0xe9, 0x87, 0xda, + 0xa0, 0x3d, 0x05, 0x23, 0x3b, 0x64, 0x3f, 0x70, 0xbd, 0xad, 0xe4, 0x73, 0xed, 0x4d, 0x5e, 0x8c, + 0x25, 0xdc, 0xcc, 0x35, 0x31, 0x72, 0xd2, 0x29, 0xd7, 0x8a, 0x7d, 0xaf, 0xc0, 0x1f, 0xcc, 0xc3, + 0x24, 0x5e, 0xac, 0x7c, 0x6b, 0x22, 0xee, 0x74, 0x4f, 0xc4, 0x49, 0xa7, 0x5c, 0xeb, 0x3f, 0x1b, + 0xbf, 0x60, 0xc1, 0x24, 0x8b, 0xc7, 0x2c, 0x42, 0x77, 0xb8, 0xbe, 0x77, 0x0a, 0x2c, 0xde, 0x13, + 0x30, 0x14, 0xd0, 0x46, 0x93, 0x69, 0x85, 0x58, 0x4f, 0x30, 0x87, 0xa1, 0x0b, 0x50, 0x60, 0x5d, + 0xa0, 0x93, 0x37, 0xc6, 0x33, 0x32, 0x54, 0x9c, 0xc8, 0xc1, 0xac, 0x94, 0xf9, 0xa3, 0x63, 0xd2, + 0x6e, 0xb9, 0xbc, 0xd3, 0xf1, 0x13, 0xc8, 0x47, 0xc3, 0x1f, 0x3d, 0xb5, 0x6b, 0x1f, 0xcc, 0x1f, + 0x3d, 0x9d, 0x64, 0x6f, 0xf1, 0xe9, 0x0f, 0x73, 0x70, 0x29, 0xb5, 0xde, 0xc0, 0xfe, 0xe8, 0xbd, + 0x6b, 0x9f, 0x8c, 0xd5, 0x4d, 0xba, 0x31, 0x4c, 0xfe, 0x14, 0x8d, 0x61, 0x0a, 0x83, 0x72, 0x98, + 0x43, 0x03, 0xb8, 0x89, 0xa7, 0x0e, 0xd9, 0x47, 0xc4, 0x4d, 0x3c, 0xb5, 0x6f, 0x19, 0xe2, 0xdf, + 0x9f, 0xe5, 0x32, 0xbe, 0x85, 0x09, 0x82, 0x57, 0xe9, 0x39, 0xc3, 0x80, 0xa1, 0xe0, 0x98, 0xc7, + 0xf8, 0x19, 0xc3, 0xcb, 0xb0, 0x82, 0x22, 0x57, 0x73, 0xb8, 0xce, 0x65, 0x67, 0xd9, 0xcc, 0x6c, + 0x6a, 0xce, 0x7c, 0xb1, 0x52, 0x43, 0x90, 0xe2, 0x7c, 0xbd, 0xaa, 0x09, 0xef, 0xf9, 0xc1, 0x85, + 0xf7, 0xb1, 0x74, 0xc1, 0x1d, 0x2d, 0xc0, 0xe4, 0xae, 0xeb, 0xd1, 0x63, 0x73, 0xdf, 0x64, 0x59, + 0x55, 0xfc, 0x91, 0x55, 0x13, 0x8c, 0x93, 0xf8, 0xb3, 0xaf, 0xc0, 0xf8, 0x83, 0xab, 0x2d, 0xbf, + 0x91, 0x87, 0xc7, 0x7a, 0x6c, 0x7b, 0x7e, 0xd6, 0x1b, 0x73, 0xa0, 0x9d, 0xf5, 0x5d, 0xf3, 0x50, + 0x83, 0xb3, 0x9b, 0x9d, 0x56, 0x6b, 0x9f, 0xd9, 0x9b, 0x92, 0xa6, 0xc4, 0x10, 0x3c, 0xe5, 0x05, + 0x99, 0x03, 0x63, 0x25, 0x05, 0x07, 0xa7, 0xd6, 0x44, 0xaf, 0x03, 0xf2, 0x45, 0x8a, 0xdf, 0xeb, + 0xc4, 0x13, 0xef, 0x00, 0x6c, 0xe0, 0xf3, 0xf1, 0x66, 0xbc, 0xdd, 0x85, 0x81, 0x53, 0x6a, 0x51, + 0xe1, 0x80, 0xde, 0x4a, 0xfb, 0xaa, 0x5b, 0x09, 0xe1, 0x00, 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0xeb, + 0x30, 0xed, 0xec, 0x39, 0x2e, 0x8f, 0xcb, 0x27, 0x09, 0x70, 0xe9, 0x40, 0x29, 0xcb, 0x16, 0x92, + 0x08, 0xb8, 0xbb, 0x4e, 0xc2, 0x25, 0x7b, 0x38, 0xdb, 0x25, 0xbb, 0xf7, 0xb9, 0xd8, 0x4f, 0xf7, + 0x6b, 0xff, 0x27, 0x8b, 0x5e, 0x5f, 0x29, 0x69, 0xfa, 0xe9, 0x38, 0x28, 0x1d, 0xa6, 0xe6, 0x1d, + 0x7d, 0x4e, 0xb3, 0x28, 0x89, 0x81, 0xd8, 0xc4, 0xe5, 0x0b, 0x22, 0x8c, 0x9d, 0x72, 0x0c, 0x16, + 0x5f, 0x44, 0x57, 0x50, 0x18, 0xe8, 0xf3, 0x30, 0xd2, 0x74, 0xf7, 0xdc, 0xd0, 0x0f, 0xc4, 0x66, + 0x39, 0xa6, 0x6b, 0x43, 0x7c, 0x0e, 0x56, 0x38, 0x19, 0x2c, 0xe9, 0xd9, 0x3f, 0x98, 0x83, 0x71, + 0xd9, 0xe2, 0x1b, 0x1d, 0x3f, 0x72, 0x4e, 0xe1, 0x5a, 0xbe, 0x6e, 0x5c, 0xcb, 0x9f, 0xe8, 0x15, + 0x62, 0x82, 0x75, 0x29, 0xf3, 0x3a, 0xbe, 0x9d, 0xb8, 0x8e, 0x9f, 0xec, 0x4f, 0xaa, 0xf7, 0x35, + 0xfc, 0xcf, 0x2c, 0x98, 0x36, 0xf0, 0x4f, 0xe1, 0x36, 0x58, 0x31, 0x6f, 0x83, 0xc7, 0xfb, 0x7e, + 0x43, 0xc6, 0x2d, 0xf0, 0x7d, 0xf9, 0x44, 0xdf, 0xd9, 0xe9, 0xff, 0x1e, 0x14, 0xb6, 0x9d, 0xa0, + 0xd9, 0x2b, 0x94, 0x6d, 0x57, 0xa5, 0xb9, 0x1b, 0x4e, 0xd0, 0xe4, 0x67, 0xf8, 0x33, 0x2a, 0x4f, + 0xa6, 0x13, 0x34, 0xfb, 0xfa, 0xa0, 0xb1, 0xa6, 0xd0, 0xcb, 0x30, 0x1c, 0x36, 0xfc, 0xb6, 0xb2, + 0x10, 0xbd, 0xcc, 0x73, 0x68, 0xd2, 0x92, 0xa3, 0x83, 0x32, 0x32, 0x9b, 0xa3, 0xc5, 0x58, 0xe0, + 0xa3, 0xb7, 0x60, 0x9c, 0xfd, 0x52, 0x96, 0x12, 0xf9, 0xec, 0x04, 0x0a, 0x75, 0x1d, 0x91, 0x1b, + 0xdc, 0x18, 0x45, 0xd8, 0x24, 0x35, 0xbb, 0x05, 0x25, 0xf5, 0x59, 0x0f, 0xd5, 0x77, 0xe8, 0xdf, + 0xe7, 0xe1, 0x4c, 0xca, 0x9a, 0x43, 0xa1, 0x31, 0x13, 0xcf, 0x0d, 0xb8, 0x54, 0x3f, 0xe0, 0x5c, + 0x84, 0x4c, 0x1a, 0x6a, 0x8a, 0xb5, 0x35, 0x70, 0xa3, 0x77, 0x42, 0x92, 0x6c, 0x94, 0x16, 0xf5, + 0x6f, 0x94, 0x36, 0x76, 0x6a, 0x43, 0x4d, 0x1b, 0x52, 0x3d, 0x7d, 0xa8, 0x73, 0xfa, 0xc7, 0x79, + 0x38, 0x9b, 0x16, 0xf5, 0x06, 0x7d, 0x77, 0x22, 0x99, 0xce, 0x0b, 0x83, 0xc6, 0xcb, 0xe1, 0x19, + 0x76, 0x44, 0x2e, 0xec, 0x39, 0x33, 0xbd, 0x4e, 0xdf, 0x61, 0x16, 0x6d, 0x32, 0x87, 0xd3, 0x80, + 0x27, 0x41, 0x92, 0xc7, 0xc7, 0xa7, 0x07, 0xee, 0x80, 0xc8, 0x9e, 0x14, 0x26, 0x1c, 0x4e, 0x65, + 0x71, 0x7f, 0x87, 0x53, 0xd9, 0xf2, 0xac, 0x0b, 0xa3, 0xda, 0xd7, 0x3c, 0xd4, 0x19, 0xdf, 0xa1, + 0xb7, 0x95, 0xd6, 0xef, 0x87, 0x3a, 0xeb, 0x3f, 0x62, 0x41, 0xc2, 0x1c, 0x53, 0xa9, 0xc5, 0xac, + 0x4c, 0xb5, 0xd8, 0x65, 0x28, 0x04, 0x7e, 0x8b, 0x24, 0x73, 0xd7, 0x60, 0xbf, 0x45, 0x30, 0x83, + 0x50, 0x8c, 0x28, 0x56, 0x76, 0x8c, 0xe9, 0x82, 0x9c, 0x10, 0xd1, 0x9e, 0x80, 0xa1, 0x16, 0xd9, + 0x23, 0xad, 0x64, 0x60, 0xf8, 0x5b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x0b, 0x05, 0xb8, 0xd8, 0xd3, + 0x65, 0x9b, 0x8a, 0x43, 0x5b, 0x4e, 0x44, 0xee, 0x39, 0xfb, 0xc9, 0x08, 0xce, 0xd7, 0x79, 0x31, + 0x96, 0x70, 0x66, 0xa1, 0xce, 0x23, 0x36, 0x26, 0x94, 0x88, 0x22, 0x50, 0xa3, 0x80, 0x9a, 0x4a, + 0xa9, 0xfc, 0x49, 0x28, 0xa5, 0xae, 0x01, 0x84, 0x61, 0x8b, 0xdb, 0x17, 0x34, 0x85, 0xe9, 0x7b, + 0x1c, 0xd9, 0xb3, 0x7e, 0x4b, 0x40, 0xb0, 0x86, 0x85, 0x2a, 0x30, 0xd5, 0x0e, 0xfc, 0x88, 0xeb, + 0x64, 0x2b, 0xdc, 0x30, 0x69, 0xc8, 0xf4, 0x96, 0xad, 0x25, 0xe0, 0xb8, 0xab, 0x06, 0x7a, 0x11, + 0x46, 0x85, 0x07, 0x6d, 0xcd, 0xf7, 0x5b, 0x42, 0x0d, 0xa4, 0xcc, 0x5c, 0xea, 0x31, 0x08, 0xeb, + 0x78, 0x5a, 0x35, 0xa6, 0xe8, 0x1d, 0x49, 0xad, 0xc6, 0x95, 0xbd, 0x1a, 0x5e, 0x22, 0x02, 0x56, + 0x71, 0xa0, 0x08, 0x58, 0xb1, 0x62, 0xac, 0x34, 0xf0, 0xdb, 0x16, 0xf4, 0x55, 0x25, 0xfd, 0x6c, + 0x01, 0xce, 0x88, 0x85, 0xf3, 0xb0, 0x97, 0xcb, 0x9d, 0xee, 0xe5, 0x72, 0x12, 0xaa, 0xb3, 0x6f, + 0xad, 0x99, 0xd3, 0x5e, 0x33, 0x3f, 0x64, 0x81, 0xc9, 0x5e, 0xa1, 0xff, 0x2f, 0x33, 0x04, 0xfe, + 0x8b, 0x99, 0xec, 0x5a, 0x53, 0x5e, 0x20, 0x1f, 0x30, 0x18, 0xbe, 0xfd, 0x1f, 0x2d, 0x78, 0xbc, + 0x2f, 0x45, 0xb4, 0x0c, 0x25, 0xc6, 0x03, 0x6a, 0xd2, 0xd9, 0x93, 0xca, 0x70, 0x51, 0x02, 0x32, + 0x58, 0xd2, 0xb8, 0x26, 0x5a, 0xee, 0xca, 0x35, 0xf0, 0x54, 0x4a, 0xae, 0x81, 0x73, 0xc6, 0xf0, + 0x3c, 0x60, 0xb2, 0x81, 0x5f, 0xce, 0xc3, 0x30, 0x5f, 0xf1, 0xa7, 0x20, 0x86, 0xad, 0x08, 0xbd, + 0x6d, 0x8f, 0x18, 0x58, 0xbc, 0x2f, 0x73, 0x15, 0x27, 0x72, 0x38, 0x9b, 0xa0, 0x6e, 0xab, 0x58, + 0xc3, 0x8b, 0xe6, 0x8c, 0xfb, 0x6c, 0x36, 0xa1, 0x98, 0x04, 0x4e, 0x43, 0xbb, 0xdd, 0xbe, 0x08, + 0x10, 0xb2, 0x3c, 0xfd, 0x94, 0x86, 0x88, 0xa6, 0xf6, 0xc9, 0x1e, 0xad, 0xd7, 0x15, 0x32, 0xef, + 0x43, 0xbc, 0xd3, 0x15, 0x00, 0x6b, 0x14, 0x67, 0x5f, 0x82, 0x92, 0x42, 0xee, 0xa7, 0xc5, 0x19, + 0xd3, 0x99, 0x8b, 0xcf, 0xc2, 0x64, 0xa2, 0xad, 0x63, 0x29, 0x81, 0x7e, 0xd1, 0x82, 0x49, 0xde, + 0xe5, 0x65, 0x6f, 0x4f, 0x9c, 0xa9, 0xef, 0xc3, 0xd9, 0x56, 0xca, 0xd9, 0x26, 0x66, 0x74, 0xf0, + 0xb3, 0x50, 0x29, 0x7d, 0xd2, 0xa0, 0x38, 0xb5, 0x0d, 0x74, 0x95, 0xae, 0x5b, 0x7a, 0x76, 0x39, + 0x2d, 0xe1, 0xed, 0x34, 0xc6, 0xd7, 0x2c, 0x2f, 0xc3, 0x0a, 0x6a, 0xff, 0xb6, 0x05, 0xd3, 0xbc, + 0xe7, 0x37, 0xc9, 0xbe, 0xda, 0xe1, 0x1f, 0x66, 0xdf, 0x45, 0xfa, 0x8f, 0x5c, 0x46, 0xfa, 0x0f, + 0xfd, 0xd3, 0xf2, 0x3d, 0x3f, 0xed, 0x67, 0x2c, 0x10, 0x2b, 0xf0, 0x14, 0x44, 0xf9, 0x6f, 0x37, + 0x45, 0xf9, 0xd9, 0xec, 0x45, 0x9d, 0x21, 0xc3, 0xff, 0xa9, 0x05, 0x53, 0x1c, 0x21, 0x7e, 0x73, + 0xfe, 0x50, 0xe7, 0x61, 0x90, 0x3c, 0x7e, 0x2a, 0xb9, 0x77, 0xfa, 0x47, 0x19, 0x93, 0x55, 0xe8, + 0x39, 0x59, 0x4d, 0xb9, 0x81, 0x8e, 0x91, 0xc3, 0xf2, 0xd8, 0x61, 0xb4, 0xed, 0x3f, 0xb0, 0x00, + 0xf1, 0x66, 0x0c, 0xf6, 0x87, 0x32, 0x15, 0xac, 0x54, 0xbb, 0x2e, 0xe2, 0xa3, 0x46, 0x41, 0xb0, + 0x86, 0x75, 0x22, 0xc3, 0x93, 0x30, 0x1c, 0xc8, 0xf7, 0x37, 0x1c, 0x38, 0xc6, 0x88, 0xfe, 0xef, + 0x02, 0x24, 0xdd, 0x0f, 0xd0, 0x5d, 0x18, 0x6b, 0x38, 0x6d, 0x67, 0xc3, 0x6d, 0xb9, 0x91, 0x4b, + 0xc2, 0x5e, 0x16, 0x47, 0x4b, 0x1a, 0x9e, 0x78, 0xea, 0xd5, 0x4a, 0xb0, 0x41, 0x07, 0xcd, 0x01, + 0xb4, 0x03, 0x77, 0xcf, 0x6d, 0x91, 0x2d, 0xa6, 0x71, 0x60, 0xfe, 0x95, 0xdc, 0x8c, 0x46, 0x96, + 0x62, 0x0d, 0x23, 0xc5, 0x55, 0x2e, 0xff, 0xf0, 0x5c, 0xe5, 0x0a, 0xc7, 0x74, 0x95, 0x1b, 0x1a, + 0xc8, 0x55, 0x0e, 0xc3, 0x23, 0x92, 0x45, 0xa2, 0xff, 0x57, 0xdc, 0x16, 0x11, 0x7c, 0x31, 0xf7, + 0xba, 0x9c, 0x3d, 0x3c, 0x28, 0x3f, 0x82, 0x53, 0x31, 0x70, 0x46, 0x4d, 0xf4, 0x39, 0x98, 0x71, + 0x5a, 0x2d, 0xff, 0x9e, 0x1a, 0xb5, 0xe5, 0xb0, 0xe1, 0xb4, 0xb8, 0xc6, 0x7e, 0x84, 0x51, 0xbd, + 0x70, 0x78, 0x50, 0x9e, 0x59, 0xc8, 0xc0, 0xc1, 0x99, 0xb5, 0x13, 0x9e, 0x76, 0xc5, 0xbe, 0x9e, + 0x76, 0xaf, 0x42, 0xa9, 0x1d, 0xf8, 0x8d, 0x55, 0xcd, 0xfb, 0xe7, 0x12, 0xcb, 0x90, 0x2f, 0x0b, + 0x8f, 0x0e, 0xca, 0xe3, 0xea, 0x0f, 0xbb, 0xe1, 0xe3, 0x0a, 0xf6, 0x0e, 0x9c, 0xa9, 0x93, 0xc0, + 0x65, 0xb9, 0x37, 0x9b, 0xf1, 0x86, 0x5e, 0x87, 0x52, 0x90, 0x38, 0xc2, 0x06, 0x0a, 0xe4, 0xa4, + 0xc5, 0x17, 0x96, 0x47, 0x56, 0x4c, 0xc8, 0xfe, 0x13, 0x0b, 0x46, 0x84, 0x25, 0xfa, 0x29, 0x70, + 0x4e, 0x0b, 0x86, 0x02, 0xbb, 0x9c, 0x7e, 0xcc, 0xb3, 0xce, 0x64, 0xaa, 0xae, 0xab, 0x09, 0xd5, + 0xf5, 0xe3, 0xbd, 0x88, 0xf4, 0x56, 0x5a, 0xff, 0xad, 0x3c, 0x4c, 0x98, 0xce, 0x23, 0xa7, 0x30, + 0x04, 0x6b, 0x30, 0x12, 0x0a, 0x4f, 0xa5, 0x5c, 0xb6, 0x85, 0x75, 0x72, 0x12, 0x63, 0xf3, 0x29, + 0xe1, 0x9b, 0x24, 0x89, 0xa4, 0xba, 0x40, 0xe5, 0x1f, 0xa2, 0x0b, 0x54, 0x3f, 0xff, 0x9d, 0xc2, + 0x49, 0xf8, 0xef, 0xd8, 0x5f, 0x63, 0x57, 0x8d, 0x5e, 0x7e, 0x0a, 0x5c, 0xc8, 0x75, 0xf3, 0x52, + 0xb2, 0x7b, 0xac, 0x2c, 0xd1, 0xa9, 0x0c, 0x6e, 0xe4, 0xe7, 0x2d, 0xb8, 0x98, 0xf2, 0x55, 0x1a, + 0x6b, 0xf2, 0x0c, 0x14, 0x9d, 0x4e, 0xd3, 0x55, 0x7b, 0x59, 0x7b, 0xc6, 0x5a, 0x10, 0xe5, 0x58, + 0x61, 0xa0, 0x25, 0x98, 0x26, 0xf7, 0xdb, 0x2e, 0x7f, 0x47, 0xd4, 0x6d, 0x1c, 0xf3, 0x3c, 0xb8, + 0xed, 0x72, 0x12, 0x88, 0xbb, 0xf1, 0x95, 0xfb, 0x77, 0x3e, 0xd3, 0xfd, 0xfb, 0x1f, 0x5a, 0x30, + 0xaa, 0xbc, 0x52, 0x1e, 0xfa, 0x68, 0x7f, 0x87, 0x39, 0xda, 0x8f, 0xf5, 0x18, 0xed, 0x8c, 0x61, + 0xfe, 0x3b, 0x39, 0xd5, 0xdf, 0x9a, 0x1f, 0x44, 0x03, 0xb0, 0x3c, 0x2f, 0x43, 0xb1, 0x1d, 0xf8, + 0x91, 0xdf, 0xf0, 0x5b, 0x82, 0xe3, 0xb9, 0x10, 0x47, 0x27, 0xe0, 0xe5, 0x47, 0xda, 0x6f, 0xac, + 0xb0, 0xd9, 0xe8, 0xf9, 0x41, 0x24, 0xb8, 0x8c, 0x78, 0xf4, 0xfc, 0x20, 0xc2, 0x0c, 0x82, 0x9a, + 0x00, 0x91, 0x13, 0x6c, 0x91, 0x88, 0x96, 0x89, 0x40, 0x27, 0xd9, 0x87, 0x47, 0x27, 0x72, 0x5b, + 0x73, 0xae, 0x17, 0x85, 0x51, 0x30, 0x57, 0xf5, 0xa2, 0xdb, 0x01, 0x17, 0xa0, 0xb4, 0x70, 0x03, + 0x8a, 0x16, 0xd6, 0xe8, 0x4a, 0x9f, 0x50, 0xd6, 0xc6, 0x90, 0xf9, 0x20, 0xbe, 0x26, 0xca, 0xb1, + 0xc2, 0xb0, 0x5f, 0x62, 0x57, 0x09, 0x1b, 0xa0, 0xe3, 0x45, 0x02, 0xf8, 0x7a, 0x51, 0x0d, 0x2d, + 0x7b, 0x0d, 0xab, 0xe8, 0xf1, 0x06, 0x7a, 0x9f, 0xdc, 0xb4, 0x61, 0xdd, 0xdf, 0x26, 0x0e, 0x4a, + 0x80, 0xbe, 0xb3, 0xcb, 0x4e, 0xe2, 0xd9, 0x3e, 0x57, 0xc0, 0x31, 0x2c, 0x23, 0x58, 0xc0, 0x6d, + 0x16, 0x8e, 0xb8, 0x5a, 0x13, 0x8b, 0x5c, 0x0b, 0xb8, 0x2d, 0x00, 0x38, 0xc6, 0x41, 0xf3, 0x42, + 0xfc, 0x2e, 0x18, 0x69, 0xf7, 0xa4, 0xf8, 0x2d, 0x3f, 0x5f, 0x93, 0xbf, 0x9f, 0x83, 0x51, 0x95, + 0x7e, 0xaf, 0xc6, 0xb3, 0x98, 0x89, 0xb0, 0x2f, 0xcb, 0x71, 0x31, 0xd6, 0x71, 0xd0, 0x3a, 0x4c, + 0x86, 0x5c, 0xf7, 0xa2, 0xa2, 0xfb, 0x71, 0x1d, 0xd6, 0x27, 0xa5, 0x7d, 0x45, 0xdd, 0x04, 0x1f, + 0xb1, 0x22, 0x7e, 0x74, 0x48, 0xc7, 0xce, 0x24, 0x09, 0xf4, 0x1a, 0x4c, 0xb4, 0xf4, 0x44, 0xf7, + 0x35, 0xa1, 0xe2, 0x52, 0x66, 0xca, 0x46, 0x1a, 0xfc, 0x1a, 0x4e, 0x60, 0x53, 0x4e, 0x49, 0x2f, + 0x11, 0x11, 0x29, 0x1d, 0x6f, 0x8b, 0x84, 0x22, 0x79, 0x18, 0xe3, 0x94, 0x6e, 0x65, 0xe0, 0xe0, + 0xcc, 0xda, 0xe8, 0x65, 0x18, 0x93, 0x9f, 0xaf, 0xb9, 0x2d, 0xc7, 0xc6, 0xf0, 0x1a, 0x0c, 0x1b, + 0x98, 0xe8, 0x1e, 0x9c, 0x93, 0xff, 0xd7, 0x03, 0x67, 0x73, 0xd3, 0x6d, 0x08, 0xaf, 0x71, 0xee, + 0x11, 0xb4, 0x20, 0x5d, 0x8c, 0x96, 0xd3, 0x90, 0x8e, 0x0e, 0xca, 0x97, 0xc5, 0xa8, 0xa5, 0xc2, + 0xd9, 0x24, 0xa6, 0xd3, 0x47, 0xab, 0x70, 0x66, 0x9b, 0x38, 0xad, 0x68, 0x7b, 0x69, 0x9b, 0x34, + 0x76, 0xe4, 0x26, 0x62, 0xce, 0xd0, 0x9a, 0x09, 0xf9, 0x8d, 0x6e, 0x14, 0x9c, 0x56, 0x0f, 0xbd, + 0x0d, 0x33, 0xed, 0xce, 0x46, 0xcb, 0x0d, 0xb7, 0xd7, 0xfc, 0x88, 0x99, 0x74, 0xa8, 0xec, 0x75, + 0xc2, 0x6b, 0x5a, 0x39, 0x82, 0xd7, 0x32, 0xf0, 0x70, 0x26, 0x05, 0xf4, 0x3e, 0x9c, 0x4b, 0x2c, + 0x06, 0xe1, 0xc3, 0x39, 0x91, 0x1d, 0xdf, 0xb7, 0x9e, 0x56, 0x41, 0xf8, 0x64, 0xa6, 0x81, 0x70, + 0x7a, 0x13, 0x1f, 0xcc, 0xd0, 0xe7, 0x3d, 0x5a, 0x59, 0x63, 0xca, 0xd0, 0x3b, 0x30, 0xa6, 0xaf, + 0x22, 0x71, 0xc1, 0x5c, 0x49, 0xe7, 0x59, 0xb4, 0xd5, 0xc6, 0x59, 0x3a, 0xb5, 0xa2, 0x74, 0x18, + 0x36, 0x28, 0xda, 0x04, 0xd2, 0xbf, 0x0f, 0xdd, 0x82, 0x62, 0xa3, 0xe5, 0x12, 0x2f, 0xaa, 0xd6, + 0x7a, 0x05, 0x19, 0x59, 0x12, 0x38, 0x62, 0xc0, 0x44, 0x40, 0x54, 0x5e, 0x86, 0x15, 0x05, 0xfb, + 0xd7, 0x72, 0x50, 0xee, 0x13, 0x5d, 0x37, 0xa1, 0x8f, 0xb6, 0x06, 0xd2, 0x47, 0x2f, 0xc8, 0x5c, + 0x7c, 0x6b, 0x09, 0x21, 0x3d, 0x91, 0x67, 0x2f, 0x16, 0xd5, 0x93, 0xf8, 0x03, 0xdb, 0x07, 0xeb, + 0x2a, 0xed, 0x42, 0x5f, 0x0b, 0x77, 0xe3, 0x29, 0x6b, 0x68, 0x70, 0x41, 0x24, 0xf3, 0x59, 0xc2, + 0xfe, 0x5a, 0x0e, 0xce, 0xa9, 0x21, 0xfc, 0xe6, 0x1d, 0xb8, 0x3b, 0xdd, 0x03, 0x77, 0x02, 0x8f, + 0x3a, 0xf6, 0x6d, 0x18, 0xe6, 0x41, 0x5a, 0x06, 0x60, 0x80, 0x9e, 0x30, 0x23, 0x7a, 0xa9, 0x6b, + 0xda, 0x88, 0xea, 0xf5, 0x97, 0x2d, 0x98, 0x5c, 0x5f, 0xaa, 0xd5, 0xfd, 0xc6, 0x0e, 0x89, 0x16, + 0x38, 0xc3, 0x8a, 0x05, 0xff, 0x63, 0x3d, 0x20, 0x5f, 0x93, 0xc6, 0x31, 0x5d, 0x86, 0xc2, 0xb6, + 0x1f, 0x46, 0xc9, 0x17, 0xdf, 0x1b, 0x7e, 0x18, 0x61, 0x06, 0xb1, 0x7f, 0xc7, 0x82, 0x21, 0x96, + 0x41, 0xb6, 0x5f, 0x5a, 0xe3, 0x41, 0xbe, 0x0b, 0xbd, 0x08, 0xc3, 0x64, 0x73, 0x93, 0x34, 0x22, + 0x31, 0xab, 0xd2, 0x6d, 0x75, 0x78, 0x99, 0x95, 0xd2, 0x4b, 0x9f, 0x35, 0xc6, 0xff, 0x62, 0x81, + 0x8c, 0xde, 0x84, 0x52, 0xe4, 0xee, 0x92, 0x85, 0x66, 0x53, 0xbc, 0x99, 0x3d, 0x80, 0x97, 0xf0, + 0xba, 0x24, 0x80, 0x63, 0x5a, 0xf6, 0x57, 0x72, 0x00, 0x71, 0xa8, 0x81, 0x7e, 0x9f, 0xb8, 0xd8, + 0xf5, 0x9a, 0x72, 0x25, 0xe5, 0x35, 0x05, 0xc5, 0x04, 0x53, 0x9e, 0x52, 0xd4, 0x30, 0xe5, 0x07, + 0x1a, 0xa6, 0xc2, 0x71, 0x86, 0x69, 0x09, 0xa6, 0xe3, 0x50, 0x09, 0x66, 0xdc, 0x18, 0x26, 0xa4, + 0xac, 0x27, 0x81, 0xb8, 0x1b, 0xdf, 0x26, 0x70, 0x59, 0x46, 0xf0, 0x94, 0x77, 0x0d, 0x33, 0xc9, + 0x3c, 0x46, 0x86, 0xeb, 0xf8, 0xb9, 0x28, 0x97, 0xf9, 0x5c, 0xf4, 0xe3, 0x16, 0x9c, 0x4d, 0xb6, + 0xc3, 0x7c, 0xe4, 0xbe, 0x6c, 0xc1, 0x39, 0xf6, 0x68, 0xc6, 0x5a, 0xed, 0x7e, 0xa2, 0x7b, 0x21, + 0x3d, 0x84, 0x44, 0xef, 0x1e, 0xc7, 0xfe, 0xd1, 0xab, 0x69, 0xa4, 0x71, 0x7a, 0x8b, 0xf6, 0x97, + 0x2d, 0x38, 0x9f, 0x99, 0xb8, 0x08, 0x5d, 0x85, 0xa2, 0xd3, 0x76, 0xb9, 0x46, 0x4a, 0xec, 0x77, + 0x26, 0x3d, 0xd6, 0xaa, 0x5c, 0x1f, 0xa5, 0xa0, 0x2a, 0xa1, 0x62, 0x2e, 0x33, 0xa1, 0x62, 0xdf, + 0xfc, 0x88, 0xf6, 0xf7, 0x5b, 0x20, 0xdc, 0xa2, 0x06, 0x38, 0x64, 0xde, 0x92, 0xf9, 0x68, 0x8d, + 0xe0, 0xe9, 0x97, 0xb3, 0xfd, 0xc4, 0x44, 0xc8, 0x74, 0x75, 0xa9, 0x1b, 0x81, 0xd2, 0x0d, 0x5a, + 0x76, 0x13, 0x04, 0xb4, 0x42, 0x98, 0xce, 0xaa, 0x7f, 0x6f, 0xae, 0x01, 0x34, 0x19, 0xae, 0x96, + 0x95, 0x52, 0x5d, 0x21, 0x15, 0x05, 0xc1, 0x1a, 0x96, 0xfd, 0x6f, 0x73, 0x30, 0x2a, 0x83, 0x75, + 0x77, 0xbc, 0x41, 0x24, 0xcb, 0x63, 0x65, 0xef, 0x61, 0x69, 0x5c, 0x29, 0xe1, 0x5a, 0x2c, 0x90, + 0xc7, 0x69, 0x5c, 0x25, 0x00, 0xc7, 0x38, 0xe8, 0x29, 0x18, 0x09, 0x3b, 0x1b, 0x0c, 0x3d, 0xe1, + 0xc4, 0x53, 0xe7, 0xc5, 0x58, 0xc2, 0xd1, 0xe7, 0x60, 0x8a, 0xd7, 0x0b, 0xfc, 0xb6, 0xb3, 0xc5, + 0xd5, 0x9f, 0x43, 0xca, 0xfb, 0x76, 0x6a, 0x35, 0x01, 0x3b, 0x3a, 0x28, 0x9f, 0x4d, 0x96, 0x31, + 0xc5, 0x79, 0x17, 0x15, 0xf6, 0x18, 0xcf, 0x1b, 0xa1, 0xcb, 0xb4, 0xeb, 0x0d, 0x3f, 0x06, 0x61, + 0x1d, 0xcf, 0x7e, 0x07, 0x50, 0x77, 0xd8, 0x72, 0xf4, 0x3a, 0xb7, 0xc0, 0x72, 0x03, 0xd2, 0xec, + 0xa5, 0x48, 0xd7, 0x7d, 0x4c, 0xa5, 0xfd, 0x3d, 0xaf, 0x85, 0x55, 0x7d, 0xfb, 0xaf, 0xe6, 0x61, + 0x2a, 0xe9, 0x71, 0x88, 0x6e, 0xc0, 0x30, 0xbf, 0x23, 0x05, 0xf9, 0x1e, 0xef, 0xb4, 0x9a, 0x9f, + 0x22, 0x3b, 0x2d, 0xc4, 0x35, 0x2b, 0xea, 0xa3, 0xb7, 0x61, 0xb4, 0xe9, 0xdf, 0xf3, 0xee, 0x39, + 0x41, 0x73, 0xa1, 0x56, 0x15, 0xcb, 0x39, 0x95, 0xd5, 0xae, 0xc4, 0x68, 0xba, 0xef, 0x23, 0x7b, + 0x93, 0x88, 0x41, 0x58, 0x27, 0x87, 0xd6, 0x59, 0x28, 0xc6, 0x4d, 0x77, 0x6b, 0xd5, 0x69, 0xf7, + 0x32, 0xc7, 0x5d, 0x92, 0x48, 0x1a, 0xe5, 0x71, 0x11, 0xaf, 0x91, 0x03, 0x70, 0x4c, 0x08, 0x7d, + 0x37, 0x9c, 0x09, 0x33, 0xb4, 0x73, 0x59, 0x59, 0x2c, 0x7a, 0x29, 0xac, 0x16, 0x1f, 0xa5, 0x42, + 0x50, 0x9a, 0x1e, 0x2f, 0xad, 0x19, 0xfb, 0xd7, 0xcf, 0x80, 0xb1, 0x89, 0x8d, 0xa4, 0x46, 0xd6, + 0x09, 0x25, 0x35, 0xc2, 0x50, 0x24, 0xbb, 0xed, 0x68, 0xbf, 0xe2, 0x06, 0xbd, 0x92, 0xee, 0x2d, + 0x0b, 0x9c, 0x6e, 0x9a, 0x12, 0x82, 0x15, 0x9d, 0xf4, 0xcc, 0x53, 0xf9, 0x0f, 0x31, 0xf3, 0x54, + 0xe1, 0x14, 0x33, 0x4f, 0xad, 0xc1, 0xc8, 0x96, 0x1b, 0x61, 0xd2, 0xf6, 0x05, 0x77, 0x9a, 0xba, + 0x0e, 0xaf, 0x73, 0x94, 0xee, 0x1c, 0x27, 0x02, 0x80, 0x25, 0x11, 0xf4, 0xba, 0xda, 0x81, 0xc3, + 0xd9, 0xc2, 0x5d, 0xf7, 0x83, 0x62, 0xea, 0x1e, 0x14, 0xf9, 0xa5, 0x46, 0x1e, 0x34, 0xbf, 0xd4, + 0x8a, 0xcc, 0x0a, 0x55, 0xcc, 0xb6, 0x9d, 0x67, 0x49, 0x9f, 0xfa, 0xe4, 0x82, 0xba, 0xab, 0x67, + 0xd2, 0x2a, 0x65, 0x9f, 0x04, 0x2a, 0x49, 0xd6, 0x80, 0xf9, 0xb3, 0xbe, 0xdf, 0x82, 0x73, 0xed, + 0xb4, 0xa4, 0x72, 0x22, 0x97, 0xd3, 0x8b, 0x03, 0x67, 0xcd, 0x33, 0x1a, 0x64, 0x52, 0x7e, 0x2a, + 0x1a, 0x4e, 0x6f, 0x8e, 0x0e, 0x74, 0xb0, 0xd1, 0x14, 0x09, 0xa0, 0x9e, 0xc8, 0x48, 0xc4, 0xd5, + 0x23, 0xfd, 0xd6, 0x7a, 0x4a, 0xd2, 0xa7, 0x8f, 0x67, 0x25, 0x7d, 0x1a, 0x38, 0xd5, 0xd3, 0xeb, + 0x2a, 0x05, 0xd7, 0x78, 0xf6, 0x52, 0xe2, 0x09, 0xb6, 0xfa, 0x26, 0xde, 0x7a, 0x5d, 0x25, 0xde, + 0xea, 0x11, 0x92, 0x8e, 0xa7, 0xd5, 0xea, 0x9b, 0x6e, 0x4b, 0x4b, 0x99, 0x35, 0x79, 0x32, 0x29, + 0xb3, 0x8c, 0xab, 0x86, 0x67, 0x6d, 0x7a, 0xba, 0xcf, 0x55, 0x63, 0xd0, 0xed, 0x7d, 0xd9, 0xf0, + 0xf4, 0x60, 0xd3, 0x0f, 0x94, 0x1e, 0xec, 0xae, 0x9e, 0x6e, 0x0b, 0xf5, 0xc9, 0x27, 0x45, 0x91, + 0x06, 0x4c, 0xb2, 0x75, 0x57, 0xbf, 0x00, 0xcf, 0x64, 0xd3, 0x55, 0xf7, 0x5c, 0x37, 0xdd, 0xd4, + 0x2b, 0xb0, 0x2b, 0x79, 0xd7, 0xd9, 0xd3, 0x49, 0xde, 0x75, 0xee, 0xc4, 0x93, 0x77, 0x3d, 0x72, + 0x0a, 0xc9, 0xbb, 0x1e, 0xfd, 0x50, 0x93, 0x77, 0xcd, 0x3c, 0x84, 0xe4, 0x5d, 0x6b, 0x71, 0xf2, + 0xae, 0xf3, 0xd9, 0x53, 0x92, 0x62, 0xd0, 0x9b, 0x91, 0xb2, 0xeb, 0x2e, 0x7b, 0xd5, 0xe7, 0x21, + 0x31, 0x44, 0xcc, 0xbc, 0xf4, 0x44, 0xc5, 0x69, 0x71, 0x33, 0xf8, 0x94, 0x28, 0x10, 0x8e, 0x49, + 0x51, 0xba, 0x71, 0x0a, 0xaf, 0xc7, 0x7a, 0xe8, 0x71, 0xd3, 0x34, 0x64, 0x3d, 0x12, 0x77, 0xbd, + 0xc6, 0x13, 0x77, 0x5d, 0xc8, 0x3e, 0xc9, 0x93, 0xd7, 0x9d, 0x99, 0xae, 0xeb, 0x07, 0x72, 0x70, + 0xa9, 0xf7, 0xbe, 0x88, 0xd5, 0x73, 0xb5, 0xf8, 0x39, 0x29, 0xa1, 0x9e, 0xe3, 0xb2, 0x55, 0x8c, + 0x35, 0x70, 0xdc, 0xa1, 0xeb, 0x30, 0xad, 0x2c, 0x81, 0x5b, 0x6e, 0x63, 0x5f, 0x4b, 0x80, 0xac, + 0x3c, 0x1e, 0xeb, 0x49, 0x04, 0xdc, 0x5d, 0x07, 0x2d, 0xc0, 0xa4, 0x51, 0x58, 0xad, 0x08, 0x19, + 0x4a, 0xe9, 0x03, 0xeb, 0x26, 0x18, 0x27, 0xf1, 0xed, 0x9f, 0xb6, 0xe0, 0xd1, 0x8c, 0xbc, 0x18, + 0x03, 0x87, 0xd5, 0xd9, 0x84, 0xc9, 0xb6, 0x59, 0xb5, 0x4f, 0xf4, 0x2d, 0x23, 0xfb, 0x86, 0xea, + 0x6b, 0x02, 0x80, 0x93, 0x44, 0x17, 0xaf, 0xfe, 0xe6, 0xef, 0x5d, 0xfa, 0xd8, 0x6f, 0xfd, 0xde, + 0xa5, 0x8f, 0xfd, 0xf6, 0xef, 0x5d, 0xfa, 0xd8, 0x5f, 0x38, 0xbc, 0x64, 0xfd, 0xe6, 0xe1, 0x25, + 0xeb, 0xb7, 0x0e, 0x2f, 0x59, 0xbf, 0x7d, 0x78, 0xc9, 0xfa, 0xdd, 0xc3, 0x4b, 0xd6, 0x57, 0x7e, + 0xff, 0xd2, 0xc7, 0xde, 0xca, 0xed, 0x3d, 0xf7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x9b, + 0xc3, 0x9b, 0xb7, 0xea, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index b13a2db72f5..b9d569f5f93 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -220,6 +220,37 @@ message CSIPersistentVolumeSource { optional SecretReference nodePublishSecretRef = 8; } +// Represents a source location of a volume to mount, managed by an external CSI driver +message CSIVolumeSource { + // Driver is the name of the CSI driver that handles this volume. + // Consult with your admin for the correct name as registered in the cluster. + optional string driver = 1; + + // Specifies a read-only configuration for the volume. + // Defaults to false (read/write). + // +optional + optional bool readOnly = 2; + + // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". + // If not provided, the empty value is passed to the associated CSI driver + // which will determine the default filesystem to apply. + // +optional + optional string fsType = 3; + + // VolumeAttributes stores driver-specific properties that are passed to the CSI + // driver. Consult your driver's documentation for supported values. + // +optional + map volumeAttributes = 4; + + // NodePublishSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // NodePublishVolume and NodeUnpublishVolume calls. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secret references are passed. + // +optional + optional LocalObjectReference nodePublishSecretRef = 5; +} + // Adds and removes POSIX capabilities from running containers. message Capabilities { // Added capabilities @@ -1636,11 +1667,15 @@ message Lifecycle { // +optional optional Handler postStart = 1; - // PreStop is called immediately before a container is terminated. - // The container is terminated after the handler completes. - // The reason for termination is passed to the handler. - // Regardless of the outcome of the handler, the container is eventually terminated. - // Other management of the container blocks until the hook completes. + // PreStop is called immediately before a container is terminated due to an + // API request or management event such as liveness probe failure, + // preemption, resource contention, etc. The handler is not called if the + // container crashes or exits. The reason for termination is passed to the + // handler. The Pod's termination grace period countdown begins before the + // PreStop hooked is executed. Regardless of the outcome of the handler, the + // container will eventually terminate within the Pod's termination grace + // period. Other management of the container blocks until the hook completes + // or until the termination grace period is reached. // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional optional Handler preStop = 2; @@ -2488,7 +2523,7 @@ message PersistentVolumeSource { // +optional optional StorageOSPersistentVolumeSource storageos = 21; - // CSI represents storage that handled by an external CSI driver (Beta feature). + // CSI represents storage that is handled by an external CSI driver (Beta feature). // +optional optional CSIPersistentVolumeSource csi = 22; } @@ -3141,7 +3176,7 @@ message PodSpec { // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md + // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional repeated PodReadinessGate readinessGates = 28; @@ -3149,7 +3184,7 @@ message PodSpec { // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an // empty definition that uses the default runtime handler. - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md + // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md // This is an alpha feature and may change in the future. // +optional optional string runtimeClassName = 29; @@ -3422,6 +3457,11 @@ message QuobyteVolumeSource { // Default is no group // +optional optional string group = 5; + + // Tenant owning the given Quobyte volume in the Backend + // Used with dynamically provisioned Quobyte volumes, value is set by the plugin + // +optional + optional string tenant = 6; } // Represents a Rados Block Device mount that lasts the lifetime of a pod. @@ -4248,6 +4288,9 @@ message ServiceSpec { // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies // +patchMergeKey=port // +patchStrategy=merge + // +listType=map + // +listMapKey=port + // +listMapKey=protocol repeated ServicePort ports = 1; // Route service traffic to pods with label keys and values matching this @@ -4284,7 +4327,7 @@ message ServiceSpec { // "LoadBalancer" builds on NodePort and creates an // external load-balancer (if supported in the current cloud) which routes // to the clusterIP. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types // +optional optional string type = 4; @@ -4596,6 +4639,14 @@ message VolumeMount { // This field is beta in 1.10. // +optional optional string mountPropagation = 5; + + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + // This field is alpha in 1.14. + // +optional + optional string subPathExpr = 6; } // VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from. @@ -4756,6 +4807,10 @@ message VolumeSource { // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. // +optional optional StorageOSVolumeSource storageos = 27; + + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). + // +optional + optional CSIVolumeSource csi = 28; } // Represents a vSphere volume resource. diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index 3986b689478..3af134400cb 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -28,6 +28,8 @@ const ( NamespaceDefault string = "default" // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces NamespaceAll string = "" + // NamespaceNodeLease is the namespace where we place node lease objects (used for node heartbeats) + NamespaceNodeLease string = "kube-node-lease" ) // Volume represents a named volume in a pod that may be accessed by any container in the pod. @@ -149,6 +151,9 @@ type VolumeSource struct { // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. // +optional StorageOS *StorageOSVolumeSource `json:"storageos,omitempty" protobuf:"bytes,27,opt,name=storageos"` + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). + // +optional + CSI *CSIVolumeSource `json:"csi,omitempty" protobuf:"bytes,28,opt,name=csi"` } // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. @@ -246,7 +251,7 @@ type PersistentVolumeSource struct { // More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md // +optional StorageOS *StorageOSPersistentVolumeSource `json:"storageos,omitempty" protobuf:"bytes,21,opt,name=storageos"` - // CSI represents storage that handled by an external CSI driver (Beta feature). + // CSI represents storage that is handled by an external CSI driver (Beta feature). // +optional CSI *CSIPersistentVolumeSource `json:"csi,omitempty" protobuf:"bytes,22,opt,name=csi"` } @@ -465,7 +470,7 @@ type PersistentVolumeClaimSpec struct { // In the future, we plan to support more data source types and the behavior // of the provisioner may change. // +optional - DataSource *TypedLocalObjectReference `json:"dataSource" protobuf:"bytes,7,opt,name=dataSource"` + DataSource *TypedLocalObjectReference `json:"dataSource,omitempty" protobuf:"bytes,7,opt,name=dataSource"` } // PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type @@ -521,7 +526,7 @@ type PersistentVolumeClaimStatus struct { type PersistentVolumeAccessMode string const ( - // can be mounted read/write mode to exactly 1 host + // can be mounted in read/write mode to exactly 1 host ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce" // can be mounted in read-only mode to many hosts ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany" @@ -953,6 +958,11 @@ type QuobyteVolumeSource struct { // Default is no group // +optional Group string `json:"group,omitempty" protobuf:"bytes,5,opt,name=group"` + + // Tenant owning the given Quobyte volume in the Backend + // Used with dynamically provisioned Quobyte volumes, value is set by the plugin + // +optional + Tenant string `json:"tenant,omitempty" protobuf:"bytes,6,opt,name=tenant"` } // FlexPersistentVolumeSource represents a generic persistent volume resource that is @@ -1684,6 +1694,37 @@ type CSIPersistentVolumeSource struct { NodePublishSecretRef *SecretReference `json:"nodePublishSecretRef,omitempty" protobuf:"bytes,8,opt,name=nodePublishSecretRef"` } +// Represents a source location of a volume to mount, managed by an external CSI driver +type CSIVolumeSource struct { + // Driver is the name of the CSI driver that handles this volume. + // Consult with your admin for the correct name as registered in the cluster. + Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` + + // Specifies a read-only configuration for the volume. + // Defaults to false (read/write). + // +optional + ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + + // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". + // If not provided, the empty value is passed to the associated CSI driver + // which will determine the default filesystem to apply. + // +optional + FSType *string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` + + // VolumeAttributes stores driver-specific properties that are passed to the CSI + // driver. Consult your driver's documentation for supported values. + // +optional + VolumeAttributes map[string]string `json:"volumeAttributes,omitempty" protobuf:"bytes,4,rep,name=volumeAttributes"` + + // NodePublishSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // NodePublishVolume and NodeUnpublishVolume calls. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secret references are passed. + // +optional + NodePublishSecretRef *LocalObjectReference `json:"nodePublishSecretRef,omitempty" protobuf:"bytes,5,opt,name=nodePublishSecretRef"` +} + // ContainerPort represents a network port in a single container. type ContainerPort struct { // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each @@ -1730,6 +1771,13 @@ type VolumeMount struct { // This field is beta in 1.10. // +optional MountPropagation *MountPropagationMode `json:"mountPropagation,omitempty" protobuf:"bytes,5,opt,name=mountPropagation,casttype=MountPropagationMode"` + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + // This field is alpha in 1.14. + // +optional + SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` } // MountPropagationMode describes mount propagation. @@ -2214,11 +2262,15 @@ type Lifecycle struct { // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional PostStart *Handler `json:"postStart,omitempty" protobuf:"bytes,1,opt,name=postStart"` - // PreStop is called immediately before a container is terminated. - // The container is terminated after the handler completes. - // The reason for termination is passed to the handler. - // Regardless of the outcome of the handler, the container is eventually terminated. - // Other management of the container blocks until the hook completes. + // PreStop is called immediately before a container is terminated due to an + // API request or management event such as liveness probe failure, + // preemption, resource contention, etc. The handler is not called if the + // container crashes or exits. The reason for termination is passed to the + // handler. The Pod's termination grace period countdown begins before the + // PreStop hooked is executed. Regardless of the outcome of the handler, the + // container will eventually terminate within the Pod's termination grace + // period. Other management of the container blocks until the hook completes + // or until the termination grace period is reached. // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional PreStop *Handler `json:"preStop,omitempty" protobuf:"bytes,2,opt,name=preStop"` @@ -2905,14 +2957,14 @@ type PodSpec struct { // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md + // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional ReadinessGates []PodReadinessGate `json:"readinessGates,omitempty" protobuf:"bytes,28,opt,name=readinessGates"` // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an // empty definition that uses the default runtime handler. - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md + // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md // This is an alpha feature and may change in the future. // +optional RuntimeClassName *string `json:"runtimeClassName,omitempty" protobuf:"bytes,29,opt,name=runtimeClassName"` @@ -3449,6 +3501,9 @@ type ServiceSpec struct { // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies // +patchMergeKey=port // +patchStrategy=merge + // +listType=map + // +listMapKey=port + // +listMapKey=protocol Ports []ServicePort `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"` // Route service traffic to pods with label keys and values matching this @@ -3485,7 +3540,7 @@ type ServiceSpec struct { // "LoadBalancer" builds on NodePort and creates an // external load-balancer (if supported in the current cloud) which routes // to the clusterIP. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types // +optional Type ServiceType `json:"type,omitempty" protobuf:"bytes,4,opt,name=type,casttype=ServiceType"` diff --git a/vendor/k8s.io/api/core/v1/well_known_labels.go b/vendor/k8s.io/api/core/v1/well_known_labels.go new file mode 100644 index 00000000000..4497760d3f6 --- /dev/null +++ b/vendor/k8s.io/api/core/v1/well_known_labels.go @@ -0,0 +1,36 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +const ( + LabelHostname = "kubernetes.io/hostname" + LabelZoneFailureDomain = "failure-domain.beta.kubernetes.io/zone" + LabelZoneRegion = "failure-domain.beta.kubernetes.io/region" + + LabelInstanceType = "beta.kubernetes.io/instance-type" + + LabelOSStable = "kubernetes.io/os" + LabelArchStable = "kubernetes.io/arch" + + // LabelNamespaceSuffixKubelet is an allowed label namespace suffix kubelets can self-set ([*.]kubelet.kubernetes.io/*) + LabelNamespaceSuffixKubelet = "kubelet.kubernetes.io" + // LabelNamespaceSuffixNode is an allowed label namespace suffix kubelets can self-set ([*.]node.kubernetes.io/*) + LabelNamespaceSuffixNode = "node.kubernetes.io" + + // LabelNamespaceNodeRestriction is a forbidden label namespace that kubelets may not self-set when the NodeRestriction admission plugin is enabled + LabelNamespaceNodeRestriction = "node-restriction.kubernetes.io" +) diff --git a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index 4219c95eb09..9a580c07970 100644 --- a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -250,6 +250,44 @@ func (in *CSIPersistentVolumeSource) DeepCopy() *CSIPersistentVolumeSource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIVolumeSource) DeepCopyInto(out *CSIVolumeSource) { + *out = *in + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } + if in.VolumeAttributes != nil { + in, out := &in.VolumeAttributes, &out.VolumeAttributes + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.NodePublishSecretRef != nil { + in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef + *out = new(LocalObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIVolumeSource. +func (in *CSIVolumeSource) DeepCopy() *CSIVolumeSource { + if in == nil { + return nil + } + out := new(CSIVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Capabilities) DeepCopyInto(out *Capabilities) { *out = *in @@ -5383,6 +5421,11 @@ func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = new(StorageOSVolumeSource) (*in).DeepCopyInto(*out) } + if in.CSI != nil { + in, out := &in.CSI, &out.CSI + *out = new(CSIVolumeSource) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/k8s.io/api/extensions/OWNERS b/vendor/k8s.io/api/extensions/OWNERS old mode 100755 new mode 100644 index cfac471108c..4b2bf8f5829 --- a/vendor/k8s.io/api/extensions/OWNERS +++ b/vendor/k8s.io/api/extensions/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/api/extensions/v1beta1/doc.go b/vendor/k8s.io/api/extensions/v1beta1/doc.go index 8ce18304be6..fa799f30261 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/doc.go +++ b/vendor/k8s.io/api/extensions/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/extensions/v1beta1" diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go index a0dfa96620d..6802be28b72 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -24,6 +24,7 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/extensions/v1beta1/generated.proto It has these top-level messages: + AllowedCSIDriver AllowedFlexVolume AllowedHostPath DaemonSet @@ -109,241 +110,246 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +func (m *AllowedCSIDriver) Reset() { *m = AllowedCSIDriver{} } +func (*AllowedCSIDriver) ProtoMessage() {} +func (*AllowedCSIDriver) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } func (*AllowedFlexVolume) ProtoMessage() {} -func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } func (*AllowedHostPath) ProtoMessage() {} -func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } func (m *DaemonSet) Reset() { *m = DaemonSet{} } func (*DaemonSet) ProtoMessage() {} -func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } func (*DaemonSetCondition) ProtoMessage() {} -func (*DaemonSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (*DaemonSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } func (*DaemonSetList) ProtoMessage() {} -func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } func (*DaemonSetSpec) ProtoMessage() {} -func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } func (*DaemonSetStatus) ProtoMessage() {} -func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } func (*DaemonSetUpdateStrategy) ProtoMessage() {} -func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } func (m *Deployment) Reset() { *m = Deployment{} } func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } func (*DeploymentCondition) ProtoMessage() {} -func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } func (m *DeploymentList) Reset() { *m = DeploymentList{} } func (*DeploymentList) ProtoMessage() {} -func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } func (*DeploymentRollback) ProtoMessage() {} -func (*DeploymentRollback) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (*DeploymentRollback) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } func (*DeploymentSpec) ProtoMessage() {} -func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } func (*DeploymentStatus) ProtoMessage() {} -func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } func (*DeploymentStrategy) ProtoMessage() {} -func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } func (*FSGroupStrategyOptions) ProtoMessage() {} -func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } func (*HTTPIngressPath) ProtoMessage() {} -func (*HTTPIngressPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (*HTTPIngressPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } func (*HTTPIngressRuleValue) ProtoMessage() {} -func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } func (m *HostPortRange) Reset() { *m = HostPortRange{} } func (*HostPortRange) ProtoMessage() {} -func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } func (m *IDRange) Reset() { *m = IDRange{} } func (*IDRange) ProtoMessage() {} -func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } func (m *IPBlock) Reset() { *m = IPBlock{} } func (*IPBlock) ProtoMessage() {} -func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } func (m *Ingress) Reset() { *m = Ingress{} } func (*Ingress) ProtoMessage() {} -func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } func (m *IngressBackend) Reset() { *m = IngressBackend{} } func (*IngressBackend) ProtoMessage() {} -func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } func (m *IngressList) Reset() { *m = IngressList{} } func (*IngressList) ProtoMessage() {} -func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } func (m *IngressRule) Reset() { *m = IngressRule{} } func (*IngressRule) ProtoMessage() {} -func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } func (*IngressRuleValue) ProtoMessage() {} -func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } func (m *IngressSpec) Reset() { *m = IngressSpec{} } func (*IngressSpec) ProtoMessage() {} -func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } func (m *IngressStatus) Reset() { *m = IngressStatus{} } func (*IngressStatus) ProtoMessage() {} -func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } func (m *IngressTLS) Reset() { *m = IngressTLS{} } func (*IngressTLS) ProtoMessage() {} -func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } func (*NetworkPolicy) ProtoMessage() {} -func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } func (*NetworkPolicyEgressRule) ProtoMessage() {} func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{30} + return fileDescriptorGenerated, []int{31} } func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } func (*NetworkPolicyIngressRule) ProtoMessage() {} func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{31} + return fileDescriptorGenerated, []int{32} } func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } func (*NetworkPolicyList) ProtoMessage() {} -func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } func (*NetworkPolicyPeer) ProtoMessage() {} -func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } func (*NetworkPolicyPort) ProtoMessage() {} -func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } func (*NetworkPolicySpec) ProtoMessage() {} -func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } func (*ReplicaSet) ProtoMessage() {} -func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } func (*ReplicaSetCondition) ProtoMessage() {} -func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } func (*ReplicaSetList) ProtoMessage() {} -func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } func (*ReplicaSetSpec) ProtoMessage() {} -func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } func (*ReplicaSetStatus) ProtoMessage() {} -func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } func (*ReplicationControllerDummy) ProtoMessage() {} func (*ReplicationControllerDummy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{44} + return fileDescriptorGenerated, []int{45} } func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } func (*RollbackConfig) ProtoMessage() {} -func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } func (*RollingUpdateDaemonSet) ProtoMessage() {} -func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{47} + return fileDescriptorGenerated, []int{48} } func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } func (*RunAsGroupStrategyOptions) ProtoMessage() {} func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{48} + return fileDescriptorGenerated, []int{49} } func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } func (*RunAsUserStrategyOptions) ProtoMessage() {} func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{49} + return fileDescriptorGenerated, []int{50} } func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } func (m *Scale) Reset() { *m = Scale{} } func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } +func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } +func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{54} + return fileDescriptorGenerated, []int{55} } func init() { + proto.RegisterType((*AllowedCSIDriver)(nil), "k8s.io.api.extensions.v1beta1.AllowedCSIDriver") proto.RegisterType((*AllowedFlexVolume)(nil), "k8s.io.api.extensions.v1beta1.AllowedFlexVolume") proto.RegisterType((*AllowedHostPath)(nil), "k8s.io.api.extensions.v1beta1.AllowedHostPath") proto.RegisterType((*DaemonSet)(nil), "k8s.io.api.extensions.v1beta1.DaemonSet") @@ -400,6 +406,28 @@ func init() { proto.RegisterType((*ScaleStatus)(nil), "k8s.io.api.extensions.v1beta1.ScaleStatus") proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.SupplementalGroupsStrategyOptions") } +func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowedCSIDriver) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + return i, nil +} + func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2176,6 +2204,20 @@ func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { } i += n47 } + if len(m.AllowedCSIDrivers) > 0 { + for _, msg := range m.AllowedCSIDrivers { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } @@ -2748,6 +2790,14 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } +func (m *AllowedCSIDriver) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *AllowedFlexVolume) Size() (n int) { var l int _ = l @@ -3379,6 +3429,12 @@ func (m *PodSecurityPolicySpec) Size() (n int) { l = m.RunAsGroup.Size() n += 2 + l + sovGenerated(uint64(l)) } + if len(m.AllowedCSIDrivers) > 0 { + for _, e := range m.AllowedCSIDrivers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -3597,6 +3653,16 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *AllowedCSIDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AllowedCSIDriver{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func (this *AllowedFlexVolume) String() string { if this == nil { return "nil" @@ -4088,6 +4154,7 @@ func (this *PodSecurityPolicySpec) String() string { `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, `AllowedProcMountTypes:` + fmt.Sprintf("%v", this.AllowedProcMountTypes) + `,`, `RunAsGroup:` + strings.Replace(fmt.Sprintf("%v", this.RunAsGroup), "RunAsGroupStrategyOptions", "RunAsGroupStrategyOptions", 1) + `,`, + `AllowedCSIDrivers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedCSIDrivers), "AllowedCSIDriver", "AllowedCSIDriver", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -4293,6 +4360,85 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } +func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedCSIDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedCSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9978,6 +10124,37 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCSIDrivers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedCSIDrivers = append(m.AllowedCSIDrivers, AllowedCSIDriver{}) + if err := m.AllowedCSIDrivers[len(m.AllowedCSIDrivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -12069,230 +12246,232 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 3587 bytes of a gzipped FileDescriptorProto + // 3622 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x1c, 0x47, 0x76, 0x57, 0xcf, 0x0c, 0x39, 0xc3, 0x47, 0xf1, 0xab, 0x48, 0x91, 0x63, 0xc9, 0xe2, 0xc8, 0x6d, - 0x40, 0x91, 0x1d, 0x69, 0xc6, 0x92, 0x2d, 0x59, 0xb1, 0x10, 0xdb, 0x1c, 0x52, 0x94, 0xe8, 0xf0, + 0x40, 0x91, 0x1d, 0x69, 0xc6, 0x92, 0x25, 0x59, 0xb1, 0x10, 0xdb, 0x1c, 0x52, 0x94, 0xe8, 0xf0, 0x63, 0x5c, 0x43, 0x2a, 0x86, 0x11, 0x3b, 0x6e, 0xce, 0x14, 0x87, 0x2d, 0xf6, 0x74, 0xb7, 0xbb, - 0x6b, 0x68, 0x0e, 0x90, 0x43, 0x0e, 0x49, 0x80, 0x00, 0x09, 0x92, 0x8b, 0x93, 0x1c, 0x63, 0x04, - 0xc8, 0x69, 0x17, 0xbb, 0xb7, 0xdd, 0x83, 0x61, 0x60, 0x01, 0x2f, 0x20, 0x2c, 0xbc, 0x80, 0x6f, - 0xeb, 0x13, 0xb1, 0xa6, 0x4f, 0x8b, 0xfd, 0x07, 0x16, 0x3a, 0x2c, 0x16, 0x55, 0x5d, 0xfd, 0xdd, - 0xad, 0x69, 0xd2, 0x12, 0xb1, 0x58, 0xec, 0x8d, 0x53, 0xef, 0xbd, 0xdf, 0x7b, 0x55, 0xf5, 0xea, - 0xbd, 0xd7, 0x55, 0x8f, 0xb0, 0xbc, 0x77, 0xdb, 0xae, 0xaa, 0x46, 0x6d, 0xaf, 0xb7, 0x4d, 0x2c, - 0x9d, 0x50, 0x62, 0xd7, 0xf6, 0x89, 0xde, 0x36, 0xac, 0x9a, 0x20, 0x28, 0xa6, 0x5a, 0x23, 0x07, - 0x94, 0xe8, 0xb6, 0x6a, 0xe8, 0x76, 0x6d, 0xff, 0xfa, 0x36, 0xa1, 0xca, 0xf5, 0x5a, 0x87, 0xe8, - 0xc4, 0x52, 0x28, 0x69, 0x57, 0x4d, 0xcb, 0xa0, 0x06, 0xba, 0xe8, 0xb0, 0x57, 0x15, 0x53, 0xad, - 0xfa, 0xec, 0x55, 0xc1, 0x7e, 0xfe, 0x5a, 0x47, 0xa5, 0xbb, 0xbd, 0xed, 0x6a, 0xcb, 0xe8, 0xd6, - 0x3a, 0x46, 0xc7, 0xa8, 0x71, 0xa9, 0xed, 0xde, 0x0e, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x1c, 0xb4, - 0xf3, 0x72, 0x40, 0x79, 0xcb, 0xb0, 0x48, 0x6d, 0x3f, 0xa6, 0xf1, 0xfc, 0x6b, 0x3e, 0x4f, 0x57, - 0x69, 0xed, 0xaa, 0x3a, 0xb1, 0xfa, 0x35, 0x73, 0xaf, 0xc3, 0x06, 0xec, 0x5a, 0x97, 0x50, 0x25, - 0x49, 0xaa, 0x96, 0x26, 0x65, 0xf5, 0x74, 0xaa, 0x76, 0x49, 0x4c, 0xe0, 0xd6, 0x20, 0x01, 0xbb, - 0xb5, 0x4b, 0xba, 0x4a, 0x4c, 0xee, 0xd5, 0x34, 0xb9, 0x1e, 0x55, 0xb5, 0x9a, 0xaa, 0x53, 0x9b, - 0x5a, 0x51, 0x21, 0xf9, 0x0e, 0x4c, 0x2d, 0x68, 0x9a, 0xf1, 0x09, 0x69, 0x2f, 0x6b, 0xe4, 0xe0, - 0x81, 0xa1, 0xf5, 0xba, 0x04, 0x5d, 0x86, 0xe1, 0xb6, 0xa5, 0xee, 0x13, 0xab, 0x2c, 0x5d, 0x92, - 0xae, 0x8c, 0xd4, 0xc7, 0x1f, 0x1d, 0x56, 0xce, 0x1c, 0x1d, 0x56, 0x86, 0x97, 0xf8, 0x28, 0x16, - 0x54, 0xd9, 0x86, 0x09, 0x21, 0x7c, 0xdf, 0xb0, 0x69, 0x43, 0xa1, 0xbb, 0xe8, 0x06, 0x80, 0xa9, - 0xd0, 0xdd, 0x86, 0x45, 0x76, 0xd4, 0x03, 0x21, 0x8e, 0x84, 0x38, 0x34, 0x3c, 0x0a, 0x0e, 0x70, - 0xa1, 0xab, 0x50, 0xb2, 0x88, 0xd2, 0xde, 0xd0, 0xb5, 0x7e, 0x39, 0x77, 0x49, 0xba, 0x52, 0xaa, - 0x4f, 0x0a, 0x89, 0x12, 0x16, 0xe3, 0xd8, 0xe3, 0x90, 0x3f, 0xcd, 0xc1, 0xc8, 0x92, 0x42, 0xba, - 0x86, 0xde, 0x24, 0x14, 0x7d, 0x04, 0x25, 0xb6, 0xf0, 0x6d, 0x85, 0x2a, 0x5c, 0xdb, 0xe8, 0x8d, - 0x57, 0xaa, 0xbe, 0x63, 0x78, 0xeb, 0x50, 0x35, 0xf7, 0x3a, 0x6c, 0xc0, 0xae, 0x32, 0xee, 0xea, - 0xfe, 0xf5, 0xea, 0xc6, 0xf6, 0x43, 0xd2, 0xa2, 0x6b, 0x84, 0x2a, 0xbe, 0x7d, 0xfe, 0x18, 0xf6, - 0x50, 0xd1, 0x3a, 0x14, 0x6c, 0x93, 0xb4, 0xb8, 0x65, 0xa3, 0x37, 0xae, 0x56, 0x9f, 0xe8, 0x76, - 0x55, 0xcf, 0xb2, 0xa6, 0x49, 0x5a, 0xf5, 0xb3, 0x02, 0xb9, 0xc0, 0x7e, 0x61, 0x8e, 0x83, 0x1e, - 0xc0, 0xb0, 0x4d, 0x15, 0xda, 0xb3, 0xcb, 0x79, 0x8e, 0x58, 0xcd, 0x8c, 0xc8, 0xa5, 0xfc, 0xcd, - 0x70, 0x7e, 0x63, 0x81, 0x26, 0xff, 0x26, 0x07, 0xc8, 0xe3, 0x5d, 0x34, 0xf4, 0xb6, 0x4a, 0x55, - 0x43, 0x47, 0x6f, 0x40, 0x81, 0xf6, 0x4d, 0x22, 0xb6, 0xe2, 0xb2, 0x6b, 0xd0, 0x66, 0xdf, 0x24, - 0x8f, 0x0f, 0x2b, 0xb3, 0x71, 0x09, 0x46, 0xc1, 0x5c, 0x06, 0xad, 0x7a, 0xa6, 0xe6, 0xb8, 0xf4, - 0x6b, 0x61, 0xd5, 0x8f, 0x0f, 0x2b, 0x09, 0xc7, 0xa6, 0xea, 0x21, 0x85, 0x0d, 0x44, 0xfb, 0x80, - 0x34, 0xc5, 0xa6, 0x9b, 0x96, 0xa2, 0xdb, 0x8e, 0x26, 0xb5, 0x4b, 0xc4, 0x22, 0xbc, 0x9c, 0x6d, - 0xd3, 0x98, 0x44, 0xfd, 0xbc, 0xb0, 0x02, 0xad, 0xc6, 0xd0, 0x70, 0x82, 0x06, 0xe6, 0xcd, 0x16, - 0x51, 0x6c, 0x43, 0x2f, 0x17, 0xc2, 0xde, 0x8c, 0xf9, 0x28, 0x16, 0x54, 0xf4, 0x12, 0x14, 0xbb, - 0xc4, 0xb6, 0x95, 0x0e, 0x29, 0x0f, 0x71, 0xc6, 0x09, 0xc1, 0x58, 0x5c, 0x73, 0x86, 0xb1, 0x4b, - 0x97, 0x3f, 0x97, 0x60, 0xcc, 0x5b, 0xb9, 0x55, 0xd5, 0xa6, 0xe8, 0xef, 0x62, 0x7e, 0x58, 0xcd, - 0x36, 0x25, 0x26, 0xcd, 0xbd, 0xd0, 0xf3, 0x79, 0x77, 0x24, 0xe0, 0x83, 0x6b, 0x30, 0xa4, 0x52, - 0xd2, 0x65, 0xfb, 0x90, 0xbf, 0x32, 0x7a, 0xe3, 0x4a, 0x56, 0x97, 0xa9, 0x8f, 0x09, 0xd0, 0xa1, - 0x15, 0x26, 0x8e, 0x1d, 0x14, 0xf9, 0xbf, 0x0a, 0x01, 0xf3, 0x99, 0x6b, 0xa2, 0x0f, 0xa0, 0x64, - 0x13, 0x8d, 0xb4, 0xa8, 0x61, 0x09, 0xf3, 0x5f, 0xcd, 0x68, 0xbe, 0xb2, 0x4d, 0xb4, 0xa6, 0x10, - 0xad, 0x9f, 0x65, 0xf6, 0xbb, 0xbf, 0xb0, 0x07, 0x89, 0xde, 0x85, 0x12, 0x25, 0x5d, 0x53, 0x53, - 0x28, 0x11, 0xe7, 0xe8, 0xc5, 0xe0, 0x14, 0x98, 0xe7, 0x30, 0xb0, 0x86, 0xd1, 0xde, 0x14, 0x6c, - 0xfc, 0xf8, 0x78, 0x4b, 0xe2, 0x8e, 0x62, 0x0f, 0x06, 0xed, 0xc3, 0x78, 0xcf, 0x6c, 0x33, 0x4e, - 0xca, 0xe2, 0x59, 0xa7, 0x2f, 0x3c, 0xe9, 0x56, 0xd6, 0xb5, 0xd9, 0x0a, 0x49, 0xd7, 0x67, 0x85, - 0xae, 0xf1, 0xf0, 0x38, 0x8e, 0x68, 0x41, 0x0b, 0x30, 0xd1, 0x55, 0x75, 0x16, 0x97, 0xfa, 0x4d, - 0xd2, 0x32, 0xf4, 0xb6, 0xcd, 0xdd, 0x6a, 0xa8, 0x3e, 0x27, 0x00, 0x26, 0xd6, 0xc2, 0x64, 0x1c, - 0xe5, 0x47, 0xef, 0x00, 0x72, 0xa7, 0x71, 0xcf, 0x09, 0xc7, 0xaa, 0xa1, 0x73, 0x9f, 0xcb, 0xfb, - 0xce, 0xbd, 0x19, 0xe3, 0xc0, 0x09, 0x52, 0x68, 0x15, 0x66, 0x2c, 0xb2, 0xaf, 0xb2, 0x39, 0xde, - 0x57, 0x6d, 0x6a, 0x58, 0xfd, 0x55, 0xb5, 0xab, 0xd2, 0xf2, 0x30, 0xb7, 0xa9, 0x7c, 0x74, 0x58, - 0x99, 0xc1, 0x09, 0x74, 0x9c, 0x28, 0x25, 0xff, 0xf7, 0x30, 0x4c, 0x44, 0xe2, 0x0d, 0x7a, 0x00, - 0xb3, 0xad, 0x9e, 0x65, 0x11, 0x9d, 0xae, 0xf7, 0xba, 0xdb, 0xc4, 0x6a, 0xb6, 0x76, 0x49, 0xbb, - 0xa7, 0x91, 0x36, 0x77, 0x94, 0xa1, 0xfa, 0xbc, 0xb0, 0x78, 0x76, 0x31, 0x91, 0x0b, 0xa7, 0x48, - 0xb3, 0x55, 0xd0, 0xf9, 0xd0, 0x9a, 0x6a, 0xdb, 0x1e, 0x66, 0x8e, 0x63, 0x7a, 0xab, 0xb0, 0x1e, - 0xe3, 0xc0, 0x09, 0x52, 0xcc, 0xc6, 0x36, 0xb1, 0x55, 0x8b, 0xb4, 0xa3, 0x36, 0xe6, 0xc3, 0x36, - 0x2e, 0x25, 0x72, 0xe1, 0x14, 0x69, 0x74, 0x13, 0x46, 0x1d, 0x6d, 0x7c, 0xff, 0xc4, 0x46, 0x4f, - 0x0b, 0xb0, 0xd1, 0x75, 0x9f, 0x84, 0x83, 0x7c, 0x6c, 0x6a, 0xc6, 0xb6, 0x4d, 0xac, 0x7d, 0xd2, - 0x4e, 0xdf, 0xe0, 0x8d, 0x18, 0x07, 0x4e, 0x90, 0x62, 0x53, 0x73, 0x3c, 0x30, 0x36, 0xb5, 0xe1, - 0xf0, 0xd4, 0xb6, 0x12, 0xb9, 0x70, 0x8a, 0x34, 0xf3, 0x63, 0xc7, 0xe4, 0x85, 0x7d, 0x45, 0xd5, - 0x94, 0x6d, 0x8d, 0x94, 0x8b, 0x61, 0x3f, 0x5e, 0x0f, 0x93, 0x71, 0x94, 0x1f, 0xdd, 0x83, 0x29, - 0x67, 0x68, 0x4b, 0x57, 0x3c, 0x90, 0x12, 0x07, 0x79, 0x4e, 0x80, 0x4c, 0xad, 0x47, 0x19, 0x70, - 0x5c, 0x06, 0xbd, 0x01, 0xe3, 0x2d, 0x43, 0xd3, 0xb8, 0x3f, 0x2e, 0x1a, 0x3d, 0x9d, 0x96, 0x47, - 0x38, 0x0a, 0x62, 0xe7, 0x71, 0x31, 0x44, 0xc1, 0x11, 0x4e, 0x44, 0x00, 0x5a, 0x6e, 0xc2, 0xb1, - 0xcb, 0xc0, 0xe3, 0xe3, 0xf5, 0xac, 0x31, 0xc0, 0x4b, 0x55, 0x7e, 0x0d, 0xe0, 0x0d, 0xd9, 0x38, - 0x00, 0x2c, 0xff, 0x42, 0x82, 0xb9, 0x94, 0xd0, 0x81, 0xde, 0x0a, 0xa5, 0xd8, 0xbf, 0x8c, 0xa4, - 0xd8, 0x0b, 0x29, 0x62, 0x81, 0x3c, 0xab, 0xc3, 0x98, 0xc5, 0x66, 0xa5, 0x77, 0x1c, 0x16, 0x11, - 0x23, 0x6f, 0x0e, 0x98, 0x06, 0x0e, 0xca, 0xf8, 0x31, 0x7f, 0xea, 0xe8, 0xb0, 0x32, 0x16, 0xa2, - 0xe1, 0x30, 0xbc, 0xfc, 0x3f, 0x39, 0x80, 0x25, 0x62, 0x6a, 0x46, 0xbf, 0x4b, 0xf4, 0xd3, 0xa8, - 0xa1, 0x36, 0x42, 0x35, 0xd4, 0xb5, 0x41, 0xdb, 0xe3, 0x99, 0x96, 0x5a, 0x44, 0xfd, 0x6d, 0xa4, - 0x88, 0xaa, 0x65, 0x87, 0x7c, 0x72, 0x15, 0xf5, 0xab, 0x3c, 0x4c, 0xfb, 0xcc, 0x7e, 0x19, 0x75, - 0x27, 0xb4, 0xc7, 0x7f, 0x11, 0xd9, 0xe3, 0xb9, 0x04, 0x91, 0x67, 0x56, 0x47, 0x3d, 0xfd, 0x7a, - 0x06, 0x3d, 0x84, 0x71, 0x56, 0x38, 0x39, 0xee, 0xc1, 0xcb, 0xb2, 0xe1, 0x63, 0x97, 0x65, 0x5e, - 0x02, 0x5d, 0x0d, 0x21, 0xe1, 0x08, 0x72, 0x4a, 0x19, 0x58, 0x7c, 0xd6, 0x65, 0xa0, 0xfc, 0x85, - 0x04, 0xe3, 0xfe, 0x36, 0x9d, 0x42, 0xd1, 0xb6, 0x1e, 0x2e, 0xda, 0x5e, 0xca, 0xec, 0xa2, 0x29, - 0x55, 0xdb, 0xef, 0x58, 0x81, 0xef, 0x31, 0xb1, 0x03, 0xbe, 0xad, 0xb4, 0xf6, 0xd0, 0x25, 0x28, - 0xe8, 0x4a, 0xd7, 0xf5, 0x4c, 0xef, 0xb0, 0xac, 0x2b, 0x5d, 0x82, 0x39, 0x05, 0x7d, 0x2a, 0x01, - 0x12, 0x59, 0x60, 0x41, 0xd7, 0x0d, 0xaa, 0x38, 0xb1, 0xd2, 0x31, 0x6b, 0x25, 0xb3, 0x59, 0xae, - 0xc6, 0xea, 0x56, 0x0c, 0xeb, 0xae, 0x4e, 0xad, 0xbe, 0xbf, 0x23, 0x71, 0x06, 0x9c, 0x60, 0x00, - 0x52, 0x00, 0x2c, 0x81, 0xb9, 0x69, 0x88, 0x83, 0x7c, 0x2d, 0x43, 0xcc, 0x63, 0x02, 0x8b, 0x86, - 0xbe, 0xa3, 0x76, 0xfc, 0xb0, 0x83, 0x3d, 0x20, 0x1c, 0x00, 0x3d, 0x7f, 0x17, 0xe6, 0x52, 0xac, - 0x45, 0x93, 0x90, 0xdf, 0x23, 0x7d, 0x67, 0xd9, 0x30, 0xfb, 0x13, 0xcd, 0xc0, 0xd0, 0xbe, 0xa2, - 0xf5, 0x9c, 0xf0, 0x3b, 0x82, 0x9d, 0x1f, 0x6f, 0xe4, 0x6e, 0x4b, 0xf2, 0xe7, 0x43, 0x41, 0xdf, - 0xe1, 0x15, 0xf3, 0x15, 0xf6, 0xd1, 0x6a, 0x6a, 0x6a, 0x4b, 0xb1, 0x45, 0x21, 0x74, 0xd6, 0xf9, - 0x60, 0x75, 0xc6, 0xb0, 0x47, 0x0d, 0xd5, 0xd6, 0xb9, 0x67, 0x5b, 0x5b, 0xe7, 0x9f, 0x4e, 0x6d, - 0xfd, 0xf7, 0x50, 0xb2, 0xdd, 0xaa, 0xba, 0xc0, 0x21, 0xaf, 0x1f, 0x23, 0xbe, 0x8a, 0x82, 0xda, - 0x53, 0xe0, 0x95, 0xd2, 0x1e, 0x68, 0x52, 0x11, 0x3d, 0x74, 0xcc, 0x22, 0xfa, 0xa9, 0x16, 0xbe, - 0x2c, 0xa6, 0x9a, 0x4a, 0xcf, 0x26, 0x6d, 0x1e, 0x88, 0x4a, 0x7e, 0x4c, 0x6d, 0xf0, 0x51, 0x2c, - 0xa8, 0xe8, 0x83, 0x90, 0xcb, 0x96, 0x4e, 0xe2, 0xb2, 0xe3, 0xe9, 0xee, 0x8a, 0xb6, 0x60, 0xce, - 0xb4, 0x8c, 0x8e, 0x45, 0x6c, 0x7b, 0x89, 0x28, 0x6d, 0x4d, 0xd5, 0x89, 0xbb, 0x3e, 0x4e, 0x45, - 0x74, 0xe1, 0xe8, 0xb0, 0x32, 0xd7, 0x48, 0x66, 0xc1, 0x69, 0xb2, 0xf2, 0xa3, 0x02, 0x4c, 0x46, - 0x33, 0x60, 0x4a, 0x91, 0x2a, 0x9d, 0xa8, 0x48, 0xbd, 0x1a, 0x38, 0x0c, 0x4e, 0x05, 0x1f, 0xb8, - 0xc1, 0x89, 0x1d, 0x88, 0x05, 0x98, 0x10, 0xd1, 0xc0, 0x25, 0x8a, 0x32, 0xdd, 0xdb, 0xfd, 0xad, - 0x30, 0x19, 0x47, 0xf9, 0x59, 0xe9, 0xe9, 0x57, 0x94, 0x2e, 0x48, 0x21, 0x5c, 0x7a, 0x2e, 0x44, - 0x19, 0x70, 0x5c, 0x06, 0xad, 0xc1, 0x74, 0x4f, 0x8f, 0x43, 0x39, 0xde, 0x78, 0x41, 0x40, 0x4d, - 0x6f, 0xc5, 0x59, 0x70, 0x92, 0x1c, 0xda, 0x09, 0x55, 0xa3, 0xc3, 0x3c, 0xc2, 0xde, 0xc8, 0x7c, - 0x76, 0x32, 0x97, 0xa3, 0xe8, 0x0e, 0x8c, 0x59, 0xfc, 0xbb, 0xc3, 0x35, 0xd8, 0xa9, 0xdd, 0xcf, - 0x09, 0xb1, 0x31, 0x1c, 0x24, 0xe2, 0x30, 0x6f, 0x42, 0xb9, 0x5d, 0xca, 0x5a, 0x6e, 0xcb, 0x3f, - 0x93, 0x82, 0x49, 0xc8, 0x2b, 0x81, 0x07, 0xdd, 0x32, 0xc5, 0x24, 0x02, 0xd5, 0x91, 0x91, 0x5c, - 0xfd, 0xde, 0x3a, 0x56, 0xf5, 0xeb, 0x27, 0xcf, 0xc1, 0xe5, 0xef, 0x67, 0x12, 0xcc, 0x2e, 0x37, - 0xef, 0x59, 0x46, 0xcf, 0x74, 0xcd, 0xd9, 0x30, 0x9d, 0x75, 0x7d, 0x1d, 0x0a, 0x56, 0x4f, 0x73, - 0xe7, 0xf1, 0xa2, 0x3b, 0x0f, 0xdc, 0xd3, 0xd8, 0x3c, 0xa6, 0x23, 0x52, 0xce, 0x24, 0x98, 0x00, - 0x5a, 0x87, 0x61, 0x4b, 0xd1, 0x3b, 0xc4, 0x4d, 0xab, 0x97, 0x07, 0x58, 0xbf, 0xb2, 0x84, 0x19, - 0x7b, 0xa0, 0x78, 0xe3, 0xd2, 0x58, 0xa0, 0xc8, 0xff, 0x2e, 0xc1, 0xc4, 0xfd, 0xcd, 0xcd, 0xc6, - 0x8a, 0xce, 0x4f, 0x34, 0xbf, 0x5b, 0xbd, 0x04, 0x05, 0x53, 0xa1, 0xbb, 0xd1, 0x4c, 0xcf, 0x68, - 0x98, 0x53, 0xd0, 0x7b, 0x50, 0x64, 0x91, 0x84, 0xe8, 0xed, 0x8c, 0xa5, 0xb6, 0x80, 0xaf, 0x3b, - 0x42, 0x7e, 0x85, 0x28, 0x06, 0xb0, 0x0b, 0x27, 0xef, 0xc1, 0x4c, 0xc0, 0x1c, 0xb6, 0x1e, 0x0f, - 0x58, 0x76, 0x44, 0x4d, 0x18, 0x62, 0x9a, 0x59, 0x0e, 0xcc, 0x67, 0xb8, 0xcc, 0x8c, 0x4c, 0xc9, - 0xaf, 0x74, 0xd8, 0x2f, 0x1b, 0x3b, 0x58, 0xf2, 0x1a, 0x8c, 0xf1, 0x0b, 0x65, 0xc3, 0xa2, 0x7c, - 0x59, 0xd0, 0x45, 0xc8, 0x77, 0x55, 0x5d, 0xe4, 0xd9, 0x51, 0x21, 0x93, 0x67, 0x39, 0x82, 0x8d, - 0x73, 0xb2, 0x72, 0x20, 0x22, 0x8f, 0x4f, 0x56, 0x0e, 0x30, 0x1b, 0x97, 0xef, 0x41, 0x51, 0x2c, - 0x77, 0x10, 0x28, 0xff, 0x64, 0xa0, 0x7c, 0x02, 0xd0, 0x06, 0x14, 0x57, 0x1a, 0x75, 0xcd, 0x70, - 0xaa, 0xae, 0x96, 0xda, 0xb6, 0xa2, 0x7b, 0xb1, 0xb8, 0xb2, 0x84, 0x31, 0xa7, 0x20, 0x19, 0x86, - 0xc9, 0x41, 0x8b, 0x98, 0x94, 0x7b, 0xc4, 0x48, 0x1d, 0xd8, 0x2e, 0xdf, 0xe5, 0x23, 0x58, 0x50, - 0xe4, 0xff, 0xc8, 0x41, 0x51, 0x2c, 0xc7, 0x29, 0x7c, 0x85, 0xad, 0x86, 0xbe, 0xc2, 0x5e, 0xce, - 0xe6, 0x1a, 0xa9, 0x9f, 0x60, 0x9b, 0x91, 0x4f, 0xb0, 0xab, 0x19, 0xf1, 0x9e, 0xfc, 0xfd, 0xf5, - 0x63, 0x09, 0xc6, 0xc3, 0x4e, 0x89, 0x6e, 0xc2, 0x28, 0x4b, 0x38, 0x6a, 0x8b, 0xac, 0xfb, 0x75, - 0xae, 0x77, 0x09, 0xd3, 0xf4, 0x49, 0x38, 0xc8, 0x87, 0x3a, 0x9e, 0x18, 0xf3, 0x23, 0x31, 0xe9, - 0xf4, 0x25, 0xed, 0x51, 0x55, 0xab, 0x3a, 0x8f, 0x24, 0xd5, 0x15, 0x9d, 0x6e, 0x58, 0x4d, 0x6a, - 0xa9, 0x7a, 0x27, 0xa6, 0x88, 0x3b, 0x65, 0x10, 0x59, 0xfe, 0xa9, 0x04, 0xa3, 0xc2, 0xe4, 0x53, - 0xf8, 0xaa, 0xf8, 0x9b, 0xf0, 0x57, 0xc5, 0xe5, 0x8c, 0x07, 0x3c, 0xf9, 0x93, 0xe2, 0xff, 0x7d, - 0xd3, 0xd9, 0x91, 0x66, 0x5e, 0xbd, 0x6b, 0xd8, 0x34, 0xea, 0xd5, 0xec, 0x30, 0x62, 0x4e, 0x41, - 0x3d, 0x98, 0x54, 0x23, 0x31, 0x40, 0x2c, 0x6d, 0x2d, 0x9b, 0x25, 0x9e, 0x58, 0xbd, 0x2c, 0xe0, - 0x27, 0xa3, 0x14, 0x1c, 0x53, 0x21, 0x13, 0x88, 0x71, 0xa1, 0x77, 0xa1, 0xb0, 0x4b, 0xa9, 0x99, - 0x70, 0x5f, 0x3d, 0x20, 0xf2, 0xf8, 0x26, 0x94, 0xf8, 0xec, 0x36, 0x37, 0x1b, 0x98, 0x43, 0xc9, - 0xbf, 0xf7, 0xd7, 0xa3, 0xe9, 0xf8, 0xb8, 0x17, 0x4f, 0xa5, 0x93, 0xc4, 0xd3, 0xd1, 0xa4, 0x58, - 0x8a, 0xee, 0x43, 0x9e, 0x6a, 0x59, 0x3f, 0x0b, 0x05, 0xe2, 0xe6, 0x6a, 0xd3, 0x0f, 0x48, 0x9b, - 0xab, 0x4d, 0xcc, 0x20, 0xd0, 0x06, 0x0c, 0xb1, 0xec, 0xc3, 0x8e, 0x60, 0x3e, 0xfb, 0x91, 0x66, - 0xf3, 0xf7, 0x1d, 0x82, 0xfd, 0xb2, 0xb1, 0x83, 0x23, 0x7f, 0x0c, 0x63, 0xa1, 0x73, 0x8a, 0x3e, - 0x82, 0xb3, 0x9a, 0xa1, 0xb4, 0xeb, 0x8a, 0xa6, 0xe8, 0x2d, 0xe2, 0x3e, 0x0e, 0x5c, 0x4e, 0xfa, - 0xc2, 0x58, 0x0d, 0xf0, 0x89, 0x53, 0x3e, 0x23, 0x94, 0x9c, 0x0d, 0xd2, 0x70, 0x08, 0x51, 0x56, - 0x00, 0xfc, 0x39, 0xa2, 0x0a, 0x0c, 0x31, 0x3f, 0x73, 0xf2, 0xc9, 0x48, 0x7d, 0x84, 0x59, 0xc8, - 0xdc, 0xcf, 0xc6, 0xce, 0x38, 0xba, 0x01, 0x60, 0x93, 0x96, 0x45, 0x28, 0x0f, 0x06, 0xb9, 0xf0, - 0x03, 0x63, 0xd3, 0xa3, 0xe0, 0x00, 0x97, 0xfc, 0x73, 0x09, 0xc6, 0xd6, 0x09, 0xfd, 0xc4, 0xb0, - 0xf6, 0x1a, 0x86, 0xa6, 0xb6, 0xfa, 0xa7, 0x10, 0x6c, 0x71, 0x28, 0xd8, 0xbe, 0x32, 0x60, 0x67, - 0x42, 0xd6, 0xa5, 0x85, 0x5c, 0xf9, 0x0b, 0x09, 0xe6, 0x42, 0x9c, 0x77, 0xfd, 0xa3, 0xbb, 0x05, - 0x43, 0xa6, 0x61, 0x51, 0x37, 0x11, 0x1f, 0x4b, 0x21, 0x0b, 0x63, 0x81, 0x54, 0xcc, 0x60, 0xb0, - 0x83, 0x86, 0x56, 0x21, 0x47, 0x0d, 0xe1, 0xaa, 0xc7, 0xc3, 0x24, 0xc4, 0xaa, 0x83, 0xc0, 0xcc, - 0x6d, 0x1a, 0x38, 0x47, 0x0d, 0xb6, 0x11, 0xe5, 0x10, 0x57, 0x30, 0xf8, 0x3c, 0xa3, 0x19, 0x60, - 0x28, 0xec, 0x58, 0x46, 0xf7, 0xc4, 0x73, 0xf0, 0x36, 0x62, 0xd9, 0x32, 0xba, 0x98, 0x63, 0xc9, - 0x5f, 0x4a, 0x30, 0x15, 0xe2, 0x3c, 0x85, 0xc0, 0xff, 0x6e, 0x38, 0xf0, 0x5f, 0x3d, 0xce, 0x44, - 0x52, 0xc2, 0xff, 0x97, 0xb9, 0xc8, 0x34, 0xd8, 0x84, 0xd1, 0x0e, 0x8c, 0x9a, 0x46, 0xbb, 0xf9, - 0x14, 0x9e, 0x03, 0x27, 0x58, 0xde, 0x6c, 0xf8, 0x58, 0x38, 0x08, 0x8c, 0x0e, 0x60, 0x4a, 0x57, - 0xba, 0xc4, 0x36, 0x95, 0x16, 0x69, 0x3e, 0x85, 0x0b, 0x92, 0x73, 0xfc, 0xbd, 0x21, 0x8a, 0x88, - 0xe3, 0x4a, 0xd0, 0x1a, 0x14, 0x55, 0x93, 0xd7, 0x71, 0xa2, 0x76, 0x19, 0x98, 0x45, 0x9d, 0xaa, - 0xcf, 0x89, 0xe7, 0xe2, 0x07, 0x76, 0x31, 0xe4, 0x1f, 0x44, 0xbd, 0x81, 0xf9, 0x1f, 0xba, 0x07, - 0x25, 0xde, 0x62, 0xd1, 0x32, 0x34, 0xf7, 0x65, 0x80, 0xed, 0x6c, 0x43, 0x8c, 0x3d, 0x3e, 0xac, - 0x5c, 0x48, 0xb8, 0xf4, 0x75, 0xc9, 0xd8, 0x13, 0x46, 0xeb, 0x50, 0x30, 0xbf, 0x4f, 0x05, 0xc3, - 0x93, 0x1c, 0x2f, 0x5b, 0x38, 0x8e, 0xfc, 0x4f, 0xf9, 0x88, 0xb9, 0x3c, 0xd5, 0x3d, 0x7c, 0x6a, - 0xbb, 0xee, 0x55, 0x4c, 0xa9, 0x3b, 0xbf, 0x0d, 0x45, 0x91, 0xe1, 0x85, 0x33, 0xbf, 0x7e, 0x1c, - 0x67, 0x0e, 0x66, 0x31, 0xef, 0x83, 0xc5, 0x1d, 0x74, 0x81, 0xd1, 0x87, 0x30, 0x4c, 0x1c, 0x15, - 0x4e, 0x6e, 0xbc, 0x75, 0x1c, 0x15, 0x7e, 0x5c, 0xf5, 0x0b, 0x55, 0x31, 0x26, 0x50, 0xd1, 0x5b, - 0x6c, 0xbd, 0x18, 0x2f, 0xfb, 0x08, 0xb4, 0xcb, 0x05, 0x9e, 0xae, 0x2e, 0x3a, 0xd3, 0xf6, 0x86, - 0x1f, 0x1f, 0x56, 0xc0, 0xff, 0x89, 0x83, 0x12, 0xf2, 0x2f, 0x25, 0x98, 0xe2, 0x2b, 0xd4, 0xea, - 0x59, 0x2a, 0xed, 0x9f, 0x5a, 0x62, 0x7a, 0x10, 0x4a, 0x4c, 0xaf, 0x0d, 0x58, 0x96, 0x98, 0x85, - 0xa9, 0xc9, 0xe9, 0x2b, 0x09, 0xce, 0xc5, 0xb8, 0x4f, 0x21, 0x2e, 0x6e, 0x85, 0xe3, 0xe2, 0x2b, - 0xc7, 0x9d, 0x50, 0x4a, 0x6c, 0xfc, 0xe7, 0xc9, 0x84, 0xe9, 0xf0, 0x93, 0x72, 0x03, 0xc0, 0xb4, - 0xd4, 0x7d, 0x55, 0x23, 0x1d, 0xf1, 0x08, 0x5e, 0x0a, 0xb4, 0x38, 0x79, 0x14, 0x1c, 0xe0, 0x42, - 0x36, 0xcc, 0xb6, 0xc9, 0x8e, 0xd2, 0xd3, 0xe8, 0x42, 0xbb, 0xbd, 0xa8, 0x98, 0xca, 0xb6, 0xaa, - 0xa9, 0x54, 0x15, 0xd7, 0x05, 0x23, 0xf5, 0x3b, 0xce, 0xe3, 0x74, 0x12, 0xc7, 0xe3, 0xc3, 0xca, - 0xc5, 0xa4, 0xd7, 0x21, 0x97, 0xa5, 0x8f, 0x53, 0xa0, 0x51, 0x1f, 0xca, 0x16, 0xf9, 0xb8, 0xa7, - 0x5a, 0xa4, 0xbd, 0x64, 0x19, 0x66, 0x48, 0x6d, 0x9e, 0xab, 0xfd, 0xeb, 0xa3, 0xc3, 0x4a, 0x19, - 0xa7, 0xf0, 0x0c, 0x56, 0x9c, 0x0a, 0x8f, 0x1e, 0xc2, 0xb4, 0xe2, 0x74, 0x86, 0x85, 0xb4, 0x3a, - 0xa7, 0xe4, 0xf6, 0xd1, 0x61, 0x65, 0x7a, 0x21, 0x4e, 0x1e, 0xac, 0x30, 0x09, 0x14, 0xd5, 0xa0, - 0xb8, 0xcf, 0xfb, 0xd6, 0xec, 0xf2, 0x10, 0xc7, 0x67, 0x89, 0xa0, 0xe8, 0xb4, 0xb2, 0x31, 0xcc, - 0xe1, 0xe5, 0x26, 0x3f, 0x7d, 0x2e, 0x17, 0xfb, 0xa0, 0x64, 0xb5, 0xa4, 0x38, 0xf1, 0xfc, 0xc6, - 0xb8, 0xe4, 0x47, 0xad, 0xfb, 0x3e, 0x09, 0x07, 0xf9, 0xd0, 0x07, 0x30, 0xb2, 0x2b, 0x6e, 0x25, - 0xec, 0x72, 0x31, 0x53, 0x12, 0x0e, 0xdd, 0x62, 0xd4, 0xa7, 0x84, 0x8a, 0x11, 0x77, 0xd8, 0xc6, - 0x3e, 0x22, 0x7a, 0x09, 0x8a, 0xfc, 0xc7, 0xca, 0x12, 0xbf, 0x8e, 0x2b, 0xf9, 0xb1, 0xed, 0xbe, - 0x33, 0x8c, 0x5d, 0xba, 0xcb, 0xba, 0xd2, 0x58, 0xe4, 0xd7, 0xc2, 0x11, 0xd6, 0x95, 0xc6, 0x22, - 0x76, 0xe9, 0xe8, 0x23, 0x28, 0xda, 0x64, 0x55, 0xd5, 0x7b, 0x07, 0x65, 0xc8, 0xf4, 0xa8, 0xdc, - 0xbc, 0xcb, 0xb9, 0x23, 0x17, 0x63, 0xbe, 0x06, 0x41, 0xc7, 0x2e, 0x2c, 0xda, 0x85, 0x11, 0xab, - 0xa7, 0x2f, 0xd8, 0x5b, 0x36, 0xb1, 0xca, 0xa3, 0x5c, 0xc7, 0xa0, 0x70, 0x8e, 0x5d, 0xfe, 0xa8, - 0x16, 0x6f, 0x85, 0x3c, 0x0e, 0xec, 0x83, 0xa3, 0x7f, 0x93, 0x00, 0xd9, 0x3d, 0xd3, 0xd4, 0x48, - 0x97, 0xe8, 0x54, 0xd1, 0xf8, 0x5d, 0x9c, 0x5d, 0x3e, 0xcb, 0x75, 0xbe, 0x3d, 0x68, 0x5e, 0x31, - 0xc1, 0xa8, 0x72, 0xef, 0xd2, 0x3b, 0xce, 0x8a, 0x13, 0xf4, 0xb2, 0xa5, 0xdd, 0xb1, 0xf9, 0xdf, - 0xe5, 0xb1, 0x4c, 0x4b, 0x9b, 0x7c, 0xe7, 0xe8, 0x2f, 0xad, 0xa0, 0x63, 0x17, 0x16, 0x3d, 0x80, - 0x59, 0xb7, 0xed, 0x11, 0x1b, 0x06, 0x5d, 0x56, 0x35, 0x62, 0xf7, 0x6d, 0x4a, 0xba, 0xe5, 0x71, - 0xbe, 0xed, 0x5e, 0xef, 0x07, 0x4e, 0xe4, 0xc2, 0x29, 0xd2, 0xa8, 0x0b, 0x15, 0x37, 0x64, 0xb0, - 0xf3, 0xe4, 0xc5, 0xac, 0xbb, 0x76, 0x4b, 0xd1, 0x9c, 0x77, 0x80, 0x09, 0xae, 0xe0, 0xc5, 0xa3, - 0xc3, 0x4a, 0x65, 0xe9, 0xc9, 0xac, 0x78, 0x10, 0x16, 0x7a, 0x0f, 0xca, 0x4a, 0x9a, 0x9e, 0x49, - 0xae, 0xe7, 0x79, 0x16, 0x87, 0x52, 0x15, 0xa4, 0x4a, 0x23, 0x0a, 0x93, 0x4a, 0xb8, 0x01, 0xd5, - 0x2e, 0x4f, 0x65, 0xba, 0x88, 0x8c, 0xf4, 0xad, 0xfa, 0x97, 0x11, 0x11, 0x82, 0x8d, 0x63, 0x1a, - 0xd0, 0x3f, 0x00, 0x52, 0xa2, 0x3d, 0xb3, 0x76, 0x19, 0x65, 0x4a, 0x3f, 0xb1, 0x66, 0x5b, 0xdf, - 0xed, 0x62, 0x24, 0x1b, 0x27, 0xe8, 0x41, 0xab, 0x30, 0x23, 0x46, 0xb7, 0x74, 0x5b, 0xd9, 0x21, - 0xcd, 0xbe, 0xdd, 0xa2, 0x9a, 0x5d, 0x9e, 0xe6, 0xb1, 0x8f, 0x3f, 0x7c, 0x2d, 0x24, 0xd0, 0x71, - 0xa2, 0x14, 0x7a, 0x1b, 0x26, 0x77, 0x0c, 0x6b, 0x5b, 0x6d, 0xb7, 0x89, 0xee, 0x22, 0xcd, 0x70, - 0xa4, 0x19, 0xb6, 0x1a, 0xcb, 0x11, 0x1a, 0x8e, 0x71, 0x23, 0x1b, 0xce, 0x09, 0xe4, 0x86, 0x65, - 0xb4, 0xd6, 0x8c, 0x9e, 0x4e, 0x9d, 0x92, 0xe8, 0x9c, 0x97, 0x62, 0xce, 0x2d, 0x24, 0x31, 0x3c, - 0x3e, 0xac, 0x5c, 0x4a, 0xae, 0x80, 0x7d, 0x26, 0x9c, 0x8c, 0x8d, 0x76, 0x01, 0x78, 0x5c, 0x70, - 0x8e, 0xdf, 0x2c, 0x3f, 0x7e, 0xb7, 0xb3, 0x44, 0x9d, 0xc4, 0x13, 0xe8, 0x3c, 0xc9, 0x79, 0x64, - 0x1c, 0xc0, 0xe6, 0xbd, 0x32, 0xe2, 0xe5, 0xe4, 0x74, 0xfa, 0x8d, 0x8f, 0xd7, 0x2b, 0xe3, 0x9b, - 0xf6, 0xd4, 0x7a, 0x65, 0x02, 0x90, 0x4f, 0xbe, 0xab, 0xfd, 0x6d, 0x0e, 0xa6, 0x7d, 0xe6, 0xcc, - 0xbd, 0x32, 0x09, 0x22, 0x7f, 0xee, 0x39, 0x1e, 0xdc, 0x73, 0xfc, 0x85, 0x04, 0xe3, 0xfe, 0xd2, - 0xfd, 0xf1, 0xf5, 0xaf, 0xf8, 0xb6, 0xa5, 0x54, 0xd4, 0x3f, 0xca, 0x05, 0x27, 0xf0, 0x27, 0xdf, - 0x44, 0xf1, 0xfd, 0x1b, 0x85, 0xe5, 0xaf, 0xf2, 0x30, 0x19, 0x3d, 0x8d, 0xa1, 0xb7, 0x76, 0x69, - 0xe0, 0x5b, 0x7b, 0x03, 0x66, 0x76, 0x7a, 0x9a, 0xd6, 0xe7, 0xcb, 0x10, 0x78, 0x70, 0x77, 0xde, - 0xca, 0x9e, 0x17, 0x92, 0x33, 0xcb, 0x09, 0x3c, 0x38, 0x51, 0x32, 0xa5, 0x6f, 0x20, 0x7f, 0xa2, - 0xbe, 0x81, 0xd8, 0x33, 0x76, 0xe1, 0x18, 0xcf, 0xd8, 0x89, 0x3d, 0x00, 0x43, 0x27, 0xe8, 0x01, - 0x38, 0xc9, 0xa3, 0x7d, 0x42, 0x10, 0x1b, 0xd8, 0x43, 0xfa, 0x3c, 0x9c, 0x17, 0x62, 0x94, 0xbf, - 0xa7, 0xeb, 0xd4, 0x32, 0x34, 0x8d, 0x58, 0x4b, 0xbd, 0x6e, 0xb7, 0x2f, 0xbf, 0x09, 0xe3, 0xe1, - 0x4e, 0x11, 0x67, 0xa7, 0x9d, 0x66, 0x15, 0xf1, 0x62, 0x19, 0xd8, 0x69, 0x67, 0x1c, 0x7b, 0x1c, - 0xf2, 0xbf, 0x48, 0x30, 0x9b, 0xdc, 0x11, 0x8a, 0x34, 0x18, 0xef, 0x2a, 0x07, 0xc1, 0x2e, 0x5d, - 0xe9, 0x84, 0x77, 0x49, 0xbc, 0x45, 0x60, 0x2d, 0x84, 0x85, 0x23, 0xd8, 0xf2, 0x77, 0x12, 0xcc, - 0xa5, 0x3c, 0xce, 0x9f, 0xae, 0x25, 0xe8, 0x7d, 0x28, 0x75, 0x95, 0x83, 0x66, 0xcf, 0xea, 0x90, - 0x13, 0xdf, 0x9e, 0xf1, 0x88, 0xb1, 0x26, 0x50, 0xb0, 0x87, 0x27, 0xff, 0x9f, 0x04, 0xcf, 0xa5, - 0x56, 0x14, 0xe8, 0x56, 0xa8, 0x8f, 0x40, 0x8e, 0xf4, 0x11, 0xa0, 0xb8, 0xe0, 0x33, 0x6a, 0x23, - 0xf8, 0x4c, 0x82, 0x72, 0xda, 0xd7, 0x16, 0xba, 0x19, 0x32, 0xf2, 0x85, 0x88, 0x91, 0x53, 0x31, - 0xb9, 0x67, 0x64, 0xe3, 0x0f, 0x25, 0x98, 0x4d, 0xfe, 0xea, 0x44, 0xaf, 0x86, 0x2c, 0xac, 0x44, - 0x2c, 0x9c, 0x88, 0x48, 0x09, 0xfb, 0x3e, 0x84, 0x71, 0xf1, 0x6d, 0x2a, 0x60, 0xc4, 0xde, 0xcb, - 0x49, 0x11, 0x5d, 0x40, 0xb8, 0x95, 0x20, 0xf7, 0xaa, 0xf0, 0x18, 0x8e, 0xa0, 0xc9, 0xff, 0x9a, - 0x83, 0xa1, 0x66, 0x4b, 0xd1, 0xc8, 0x29, 0x14, 0x83, 0xef, 0x84, 0x8a, 0xc1, 0x41, 0xff, 0xf7, - 0xc3, 0xad, 0x4a, 0xad, 0x03, 0x71, 0xa4, 0x0e, 0x7c, 0x39, 0x13, 0xda, 0x93, 0x4b, 0xc0, 0xbf, - 0x82, 0x11, 0x4f, 0xe9, 0xf1, 0x32, 0x93, 0xfc, 0xbf, 0x39, 0x18, 0x0d, 0xa8, 0x38, 0x66, 0x5e, - 0xdb, 0x09, 0xd5, 0x03, 0xf9, 0x0c, 0xe5, 0x7f, 0x40, 0x57, 0xd5, 0xad, 0x00, 0x9c, 0xbe, 0x55, - 0xbf, 0x53, 0x31, 0x5e, 0x18, 0xbc, 0x09, 0xe3, 0x54, 0xb1, 0x3a, 0x84, 0x7a, 0x37, 0xe3, 0x79, - 0xee, 0x8b, 0x5e, 0xb7, 0xf3, 0x66, 0x88, 0x8a, 0x23, 0xdc, 0xe7, 0xef, 0xc0, 0x58, 0x48, 0xd9, - 0xb1, 0xda, 0x4e, 0x7f, 0x22, 0xc1, 0x0b, 0x03, 0xef, 0x2d, 0x50, 0x3d, 0x74, 0x48, 0xaa, 0x91, - 0x43, 0x32, 0x9f, 0x0e, 0xf0, 0xec, 0xda, 0x97, 0xea, 0xd7, 0x1e, 0x7d, 0x3b, 0x7f, 0xe6, 0xeb, - 0x6f, 0xe7, 0xcf, 0x7c, 0xf3, 0xed, 0xfc, 0x99, 0x7f, 0x3c, 0x9a, 0x97, 0x1e, 0x1d, 0xcd, 0x4b, - 0x5f, 0x1f, 0xcd, 0x4b, 0xdf, 0x1c, 0xcd, 0x4b, 0xbf, 0x3e, 0x9a, 0x97, 0xfe, 0xf3, 0xbb, 0xf9, - 0x33, 0xef, 0x17, 0x05, 0xdc, 0x1f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x51, 0x7e, 0x9f, 0x62, 0x14, - 0x3c, 0x00, 0x00, + 0x6b, 0x68, 0x0e, 0x90, 0x43, 0x0e, 0x41, 0x80, 0x00, 0x09, 0x92, 0x8b, 0x93, 0x1c, 0x63, 0x04, + 0xc8, 0x29, 0x41, 0x72, 0xcb, 0x1e, 0x0c, 0x03, 0x0b, 0x78, 0x01, 0x61, 0xe1, 0x05, 0x7c, 0x5b, + 0x9f, 0x88, 0x35, 0x7d, 0x5a, 0xec, 0x3f, 0xb0, 0xd0, 0x61, 0x77, 0x51, 0xd5, 0xd5, 0xdf, 0xdd, + 0x9a, 0x26, 0x2d, 0x11, 0x8b, 0xc5, 0xde, 0x38, 0xf5, 0xde, 0xfb, 0xbd, 0x57, 0x55, 0xaf, 0xde, + 0x7b, 0x5d, 0xf5, 0x08, 0xcb, 0x7b, 0x77, 0xec, 0xaa, 0x6a, 0xd4, 0xf6, 0x7a, 0xdb, 0xc4, 0xd2, + 0x09, 0x25, 0x76, 0x6d, 0x9f, 0xe8, 0x6d, 0xc3, 0xaa, 0x09, 0x82, 0x62, 0xaa, 0x35, 0x72, 0x40, + 0x89, 0x6e, 0xab, 0x86, 0x6e, 0xd7, 0xf6, 0xaf, 0x6f, 0x13, 0xaa, 0x5c, 0xaf, 0x75, 0x88, 0x4e, + 0x2c, 0x85, 0x92, 0x76, 0xd5, 0xb4, 0x0c, 0x6a, 0xa0, 0x8b, 0x0e, 0x7b, 0x55, 0x31, 0xd5, 0xaa, + 0xcf, 0x5e, 0x15, 0xec, 0xe7, 0xaf, 0x75, 0x54, 0xba, 0xdb, 0xdb, 0xae, 0xb6, 0x8c, 0x6e, 0xad, + 0x63, 0x74, 0x8c, 0x1a, 0x97, 0xda, 0xee, 0xed, 0xf0, 0x5f, 0xfc, 0x07, 0xff, 0xcb, 0x41, 0x3b, + 0x2f, 0x07, 0x94, 0xb7, 0x0c, 0x8b, 0xd4, 0xf6, 0x63, 0x1a, 0xcf, 0xdf, 0xf4, 0x79, 0xba, 0x4a, + 0x6b, 0x57, 0xd5, 0x89, 0xd5, 0xaf, 0x99, 0x7b, 0x1d, 0x36, 0x60, 0xd7, 0xba, 0x84, 0x2a, 0x49, + 0x52, 0xb5, 0x34, 0x29, 0xab, 0xa7, 0x53, 0xb5, 0x4b, 0x62, 0x02, 0xb7, 0x07, 0x09, 0xd8, 0xad, + 0x5d, 0xd2, 0x55, 0x62, 0x72, 0xaf, 0xa7, 0xc9, 0xf5, 0xa8, 0xaa, 0xd5, 0x54, 0x9d, 0xda, 0xd4, + 0x8a, 0x0a, 0xc9, 0x37, 0x61, 0x72, 0x41, 0xd3, 0x8c, 0x4f, 0x49, 0x7b, 0xb1, 0xb9, 0xb2, 0x64, + 0xa9, 0xfb, 0xc4, 0x42, 0x97, 0xa0, 0xa0, 0x2b, 0x5d, 0x52, 0x96, 0x2e, 0x49, 0x57, 0x46, 0xea, + 0x67, 0x1f, 0x1f, 0x56, 0xce, 0x1c, 0x1d, 0x56, 0x0a, 0xeb, 0x4a, 0x97, 0x60, 0x4e, 0x91, 0xef, + 0xc2, 0x94, 0x90, 0x5a, 0xd6, 0xc8, 0xc1, 0x43, 0x43, 0xeb, 0x75, 0x09, 0xba, 0x0c, 0xc3, 0x6d, + 0x0e, 0x20, 0x04, 0xc7, 0x85, 0xe0, 0xb0, 0x03, 0x8b, 0x05, 0x55, 0xb6, 0x61, 0x42, 0x08, 0x3f, + 0x30, 0x6c, 0xda, 0x50, 0xe8, 0x2e, 0xba, 0x01, 0x60, 0x2a, 0x74, 0xb7, 0x61, 0x91, 0x1d, 0xf5, + 0x40, 0x88, 0x23, 0x21, 0x0e, 0x0d, 0x8f, 0x82, 0x03, 0x5c, 0xe8, 0x2a, 0x94, 0x2c, 0xa2, 0xb4, + 0x37, 0x74, 0xad, 0x5f, 0xce, 0x5d, 0x92, 0xae, 0x94, 0xea, 0x93, 0x42, 0xa2, 0x84, 0xc5, 0x38, + 0xf6, 0x38, 0xe4, 0xcf, 0x72, 0x30, 0xb2, 0xa4, 0x90, 0xae, 0xa1, 0x37, 0x09, 0x45, 0x1f, 0x43, + 0x89, 0x6d, 0x57, 0x5b, 0xa1, 0x0a, 0xd7, 0x36, 0x7a, 0xe3, 0xb5, 0xaa, 0xef, 0x4e, 0xde, 0xea, + 0x55, 0xcd, 0xbd, 0x0e, 0x1b, 0xb0, 0xab, 0x8c, 0xbb, 0xba, 0x7f, 0xbd, 0xba, 0xb1, 0xfd, 0x88, + 0xb4, 0xe8, 0x1a, 0xa1, 0x8a, 0x6f, 0x9f, 0x3f, 0x86, 0x3d, 0x54, 0xb4, 0x0e, 0x05, 0xdb, 0x24, + 0x2d, 0x6e, 0xd9, 0xe8, 0x8d, 0xab, 0xd5, 0xa7, 0x3a, 0x6b, 0xd5, 0xb3, 0xac, 0x69, 0x92, 0x96, + 0xbf, 0xe2, 0xec, 0x17, 0xe6, 0x38, 0xe8, 0x21, 0x0c, 0xdb, 0x54, 0xa1, 0x3d, 0xbb, 0x9c, 0xe7, + 0x88, 0xd5, 0xcc, 0x88, 0x5c, 0xca, 0xdf, 0x0c, 0xe7, 0x37, 0x16, 0x68, 0xf2, 0x2f, 0x73, 0x80, + 0x3c, 0xde, 0x45, 0x43, 0x6f, 0xab, 0x54, 0x35, 0x74, 0xf4, 0x26, 0x14, 0x68, 0xdf, 0x74, 0x5d, + 0xe0, 0xb2, 0x6b, 0xd0, 0x66, 0xdf, 0x24, 0x4f, 0x0e, 0x2b, 0xb3, 0x71, 0x09, 0x46, 0xc1, 0x5c, + 0x06, 0xad, 0x7a, 0xa6, 0xe6, 0xb8, 0xf4, 0xcd, 0xb0, 0xea, 0x27, 0x87, 0x95, 0x84, 0xc3, 0x56, + 0xf5, 0x90, 0xc2, 0x06, 0xa2, 0x7d, 0x40, 0x9a, 0x62, 0xd3, 0x4d, 0x4b, 0xd1, 0x6d, 0x47, 0x93, + 0xda, 0x25, 0x62, 0x11, 0x5e, 0xcd, 0xb6, 0x69, 0x4c, 0xa2, 0x7e, 0x5e, 0x58, 0x81, 0x56, 0x63, + 0x68, 0x38, 0x41, 0x03, 0xf3, 0x66, 0x8b, 0x28, 0xb6, 0xa1, 0x97, 0x0b, 0x61, 0x6f, 0xc6, 0x7c, + 0x14, 0x0b, 0x2a, 0x7a, 0x05, 0x8a, 0x5d, 0x62, 0xdb, 0x4a, 0x87, 0x94, 0x87, 0x38, 0xe3, 0x84, + 0x60, 0x2c, 0xae, 0x39, 0xc3, 0xd8, 0xa5, 0xcb, 0x5f, 0x48, 0x30, 0xe6, 0xad, 0xdc, 0xaa, 0x6a, + 0x53, 0xf4, 0x57, 0x31, 0x3f, 0xac, 0x66, 0x9b, 0x12, 0x93, 0xe6, 0x5e, 0xe8, 0xf9, 0xbc, 0x3b, + 0x12, 0xf0, 0xc1, 0x35, 0x18, 0x52, 0x29, 0xe9, 0xb2, 0x7d, 0xc8, 0x5f, 0x19, 0xbd, 0x71, 0x25, + 0xab, 0xcb, 0xd4, 0xc7, 0x04, 0xe8, 0xd0, 0x0a, 0x13, 0xc7, 0x0e, 0x8a, 0xfc, 0xaf, 0x85, 0x80, + 0xf9, 0xcc, 0x35, 0xd1, 0x87, 0x50, 0xb2, 0x89, 0x46, 0x5a, 0xd4, 0xb0, 0x84, 0xf9, 0xaf, 0x67, + 0x34, 0x5f, 0xd9, 0x26, 0x5a, 0x53, 0x88, 0xd6, 0xcf, 0x32, 0xfb, 0xdd, 0x5f, 0xd8, 0x83, 0x44, + 0xef, 0x41, 0x89, 0x92, 0xae, 0xa9, 0x29, 0x94, 0x88, 0x73, 0xf4, 0x72, 0x70, 0x0a, 0xcc, 0x73, + 0x18, 0x58, 0xc3, 0x68, 0x6f, 0x0a, 0x36, 0x7e, 0x7c, 0xbc, 0x25, 0x71, 0x47, 0xb1, 0x07, 0x83, + 0xf6, 0x61, 0xbc, 0x67, 0xb6, 0x19, 0x27, 0x65, 0x51, 0xb0, 0xd3, 0x17, 0x9e, 0x74, 0x3b, 0xeb, + 0xda, 0x6c, 0x85, 0xa4, 0xeb, 0xb3, 0x42, 0xd7, 0x78, 0x78, 0x1c, 0x47, 0xb4, 0xa0, 0x05, 0x98, + 0xe8, 0xaa, 0x3a, 0x8b, 0x4b, 0xfd, 0x26, 0x69, 0x19, 0x7a, 0xdb, 0xe6, 0x6e, 0x35, 0x54, 0x9f, + 0x13, 0x00, 0x13, 0x6b, 0x61, 0x32, 0x8e, 0xf2, 0xa3, 0x77, 0x01, 0xb9, 0xd3, 0xb8, 0xef, 0x04, + 0x71, 0xd5, 0xd0, 0xb9, 0xcf, 0xe5, 0x7d, 0xe7, 0xde, 0x8c, 0x71, 0xe0, 0x04, 0x29, 0xb4, 0x0a, + 0x33, 0x16, 0xd9, 0x57, 0xd9, 0x1c, 0x1f, 0xa8, 0x36, 0x35, 0xac, 0xfe, 0xaa, 0xda, 0x55, 0x69, + 0x79, 0x98, 0xdb, 0x54, 0x3e, 0x3a, 0xac, 0xcc, 0xe0, 0x04, 0x3a, 0x4e, 0x94, 0x92, 0xff, 0x6d, + 0x18, 0x26, 0x22, 0xf1, 0x06, 0x3d, 0x84, 0xd9, 0x56, 0xcf, 0xb2, 0x88, 0x4e, 0xd7, 0x7b, 0xdd, + 0x6d, 0x62, 0x35, 0x5b, 0xbb, 0xa4, 0xdd, 0xd3, 0x48, 0x9b, 0x3b, 0xca, 0x50, 0x7d, 0x5e, 0x58, + 0x3c, 0xbb, 0x98, 0xc8, 0x85, 0x53, 0xa4, 0xd9, 0x2a, 0xe8, 0x7c, 0x68, 0x4d, 0xb5, 0x6d, 0x0f, + 0x33, 0xc7, 0x31, 0xbd, 0x55, 0x58, 0x8f, 0x71, 0xe0, 0x04, 0x29, 0x66, 0x63, 0x9b, 0xd8, 0xaa, + 0x45, 0xda, 0x51, 0x1b, 0xf3, 0x61, 0x1b, 0x97, 0x12, 0xb9, 0x70, 0x8a, 0x34, 0xba, 0x05, 0xa3, + 0x8e, 0x36, 0xbe, 0x7f, 0x62, 0xa3, 0xa7, 0x05, 0xd8, 0xe8, 0xba, 0x4f, 0xc2, 0x41, 0x3e, 0x36, + 0x35, 0x63, 0xdb, 0x26, 0xd6, 0x3e, 0x69, 0xa7, 0x6f, 0xf0, 0x46, 0x8c, 0x03, 0x27, 0x48, 0xb1, + 0xa9, 0x39, 0x1e, 0x18, 0x9b, 0xda, 0x70, 0x78, 0x6a, 0x5b, 0x89, 0x5c, 0x38, 0x45, 0x9a, 0xf9, + 0xb1, 0x63, 0xf2, 0xc2, 0xbe, 0xa2, 0x6a, 0xca, 0xb6, 0x46, 0xca, 0xc5, 0xb0, 0x1f, 0xaf, 0x87, + 0xc9, 0x38, 0xca, 0x8f, 0xee, 0xc3, 0x94, 0x33, 0xb4, 0xa5, 0x2b, 0x1e, 0x48, 0x89, 0x83, 0xbc, + 0x20, 0x40, 0xa6, 0xd6, 0xa3, 0x0c, 0x38, 0x2e, 0x83, 0xde, 0x84, 0xf1, 0x96, 0xa1, 0x69, 0xdc, + 0x1f, 0x17, 0x8d, 0x9e, 0x4e, 0xcb, 0x23, 0x1c, 0x05, 0xb1, 0xf3, 0xb8, 0x18, 0xa2, 0xe0, 0x08, + 0x27, 0x22, 0x00, 0x2d, 0x37, 0xe1, 0xd8, 0x65, 0xe0, 0xf1, 0xf1, 0x7a, 0xd6, 0x18, 0xe0, 0xa5, + 0x2a, 0xbf, 0x06, 0xf0, 0x86, 0x6c, 0x1c, 0x00, 0x96, 0x7f, 0x2a, 0xc1, 0x5c, 0x4a, 0xe8, 0x40, + 0x6f, 0x87, 0x52, 0xec, 0x9f, 0x46, 0x52, 0xec, 0x85, 0x14, 0xb1, 0x40, 0x9e, 0xd5, 0x61, 0xcc, + 0x62, 0xb3, 0xd2, 0x3b, 0x0e, 0x8b, 0x88, 0x91, 0xb7, 0x06, 0x4c, 0x03, 0x07, 0x65, 0xfc, 0x98, + 0x3f, 0x75, 0x74, 0x58, 0x19, 0x0b, 0xd1, 0x70, 0x18, 0x5e, 0xfe, 0xf7, 0x1c, 0xc0, 0x12, 0x31, + 0x35, 0xa3, 0xdf, 0x25, 0xfa, 0x69, 0xd4, 0x50, 0x1b, 0xa1, 0x1a, 0xea, 0xda, 0xa0, 0xed, 0xf1, + 0x4c, 0x4b, 0x2d, 0xa2, 0xfe, 0x32, 0x52, 0x44, 0xd5, 0xb2, 0x43, 0x3e, 0xbd, 0x8a, 0xfa, 0x79, + 0x1e, 0xa6, 0x7d, 0x66, 0xbf, 0x8c, 0xba, 0x1b, 0xda, 0xe3, 0x3f, 0x89, 0xec, 0xf1, 0x5c, 0x82, + 0xc8, 0x73, 0xab, 0xa3, 0x9e, 0x7d, 0x3d, 0x83, 0x1e, 0xc1, 0x38, 0x2b, 0x9c, 0x1c, 0xf7, 0xe0, + 0x65, 0xd9, 0xf0, 0xb1, 0xcb, 0x32, 0x2f, 0x81, 0xae, 0x86, 0x90, 0x70, 0x04, 0x39, 0xa5, 0x0c, + 0x2c, 0x3e, 0xef, 0x32, 0x50, 0xfe, 0x52, 0x82, 0x71, 0x7f, 0x9b, 0x4e, 0xa1, 0x68, 0x5b, 0x0f, + 0x17, 0x6d, 0xaf, 0x64, 0x76, 0xd1, 0x94, 0xaa, 0xed, 0xd7, 0xac, 0xc0, 0xf7, 0x98, 0xd8, 0x01, + 0xdf, 0x56, 0x5a, 0x7b, 0x83, 0xbf, 0xf1, 0xd0, 0x67, 0x12, 0x20, 0x91, 0x05, 0x16, 0x74, 0xdd, + 0xa0, 0x8a, 0x13, 0x2b, 0x1d, 0xb3, 0x56, 0x32, 0x9b, 0xe5, 0x6a, 0xac, 0x6e, 0xc5, 0xb0, 0xee, + 0xe9, 0xd4, 0xea, 0xfb, 0x3b, 0x12, 0x67, 0xc0, 0x09, 0x06, 0x20, 0x05, 0xc0, 0x12, 0x98, 0x9b, + 0x86, 0x38, 0xc8, 0xd7, 0x32, 0xc4, 0x3c, 0x26, 0xb0, 0x68, 0xe8, 0x3b, 0x6a, 0xc7, 0x0f, 0x3b, + 0xd8, 0x03, 0xc2, 0x01, 0xd0, 0xf3, 0xf7, 0x60, 0x2e, 0xc5, 0x5a, 0x34, 0x09, 0xf9, 0x3d, 0xd2, + 0x77, 0x96, 0x0d, 0xb3, 0x3f, 0xd1, 0x0c, 0x0c, 0xed, 0x2b, 0x5a, 0xcf, 0x09, 0xbf, 0x23, 0xd8, + 0xf9, 0xf1, 0x66, 0xee, 0x8e, 0x24, 0x7f, 0x31, 0x14, 0xf4, 0x1d, 0x5e, 0x31, 0x5f, 0x61, 0x1f, + 0xad, 0xa6, 0xa6, 0xb6, 0x14, 0x5b, 0x14, 0x42, 0x67, 0x9d, 0x0f, 0x56, 0x67, 0x0c, 0x7b, 0xd4, + 0x50, 0x6d, 0x9d, 0x7b, 0xbe, 0xb5, 0x75, 0xfe, 0xd9, 0xd4, 0xd6, 0x7f, 0x0d, 0x25, 0xdb, 0xad, + 0xaa, 0x0b, 0x1c, 0xf2, 0xfa, 0x31, 0xe2, 0xab, 0x28, 0xa8, 0x3d, 0x05, 0x5e, 0x29, 0xed, 0x81, + 0x26, 0x15, 0xd1, 0x43, 0xc7, 0x2c, 0xa2, 0x9f, 0x69, 0xe1, 0xcb, 0x62, 0xaa, 0xa9, 0xf4, 0x6c, + 0xd2, 0xe6, 0x81, 0xa8, 0xe4, 0xc7, 0xd4, 0x06, 0x1f, 0xc5, 0x82, 0x8a, 0x3e, 0x0c, 0xb9, 0x6c, + 0xe9, 0x24, 0x2e, 0x3b, 0x9e, 0xee, 0xae, 0x68, 0x0b, 0xe6, 0x4c, 0xcb, 0xe8, 0x58, 0xc4, 0xb6, + 0x97, 0x88, 0xd2, 0xd6, 0x54, 0x9d, 0xb8, 0xeb, 0xe3, 0x54, 0x44, 0x17, 0x8e, 0x0e, 0x2b, 0x73, + 0x8d, 0x64, 0x16, 0x9c, 0x26, 0x2b, 0x3f, 0x2e, 0xc0, 0x64, 0x34, 0x03, 0xa6, 0x14, 0xa9, 0xd2, + 0x89, 0x8a, 0xd4, 0xab, 0x81, 0xc3, 0xe0, 0x54, 0xf0, 0x81, 0x1b, 0x9c, 0xd8, 0x81, 0x58, 0x80, + 0x09, 0x11, 0x0d, 0x5c, 0xa2, 0x28, 0xd3, 0xbd, 0xdd, 0xdf, 0x0a, 0x93, 0x71, 0x94, 0x9f, 0x95, + 0x9e, 0x7e, 0x45, 0xe9, 0x82, 0x14, 0xc2, 0xa5, 0xe7, 0x42, 0x94, 0x01, 0xc7, 0x65, 0xd0, 0x1a, + 0x4c, 0xf7, 0xf4, 0x38, 0x94, 0xe3, 0x8d, 0x17, 0x04, 0xd4, 0xf4, 0x56, 0x9c, 0x05, 0x27, 0xc9, + 0xa1, 0x9d, 0x50, 0x35, 0x3a, 0xcc, 0x23, 0xec, 0x8d, 0xcc, 0x67, 0x27, 0x73, 0x39, 0x8a, 0xee, + 0xc2, 0x98, 0xc5, 0xbf, 0x3b, 0x5c, 0x83, 0x9d, 0xda, 0xfd, 0x9c, 0x10, 0x1b, 0xc3, 0x41, 0x22, + 0x0e, 0xf3, 0x26, 0x94, 0xdb, 0xa5, 0xac, 0xe5, 0xb6, 0xfc, 0x63, 0x29, 0x98, 0x84, 0xbc, 0x12, + 0x78, 0xd0, 0x2d, 0x53, 0x4c, 0x22, 0x50, 0x1d, 0x19, 0xc9, 0xd5, 0xef, 0xed, 0x63, 0x55, 0xbf, + 0x7e, 0xf2, 0x1c, 0x5c, 0xfe, 0x7e, 0x2e, 0xc1, 0xec, 0x72, 0xf3, 0xbe, 0x65, 0xf4, 0x4c, 0xd7, + 0x9c, 0x0d, 0xd3, 0x59, 0xd7, 0x37, 0xa0, 0x60, 0xf5, 0x34, 0x77, 0x1e, 0x2f, 0xbb, 0xf3, 0xc0, + 0x3d, 0x8d, 0xcd, 0x63, 0x3a, 0x22, 0xe5, 0x4c, 0x82, 0x09, 0xa0, 0x75, 0x18, 0xb6, 0x14, 0xbd, + 0x43, 0xdc, 0xb4, 0x7a, 0x79, 0x80, 0xf5, 0x2b, 0x4b, 0x98, 0xb1, 0x07, 0x8a, 0x37, 0x2e, 0x8d, + 0x05, 0x8a, 0xfc, 0x4f, 0x12, 0x4c, 0x3c, 0xd8, 0xdc, 0x6c, 0xac, 0xe8, 0xfc, 0x44, 0xf3, 0xbb, + 0xd5, 0x4b, 0x50, 0x30, 0x15, 0xba, 0x1b, 0xcd, 0xf4, 0x8c, 0x86, 0x39, 0x05, 0xbd, 0x0f, 0x45, + 0x16, 0x49, 0x88, 0xde, 0xce, 0x58, 0x6a, 0x0b, 0xf8, 0xba, 0x23, 0xe4, 0x57, 0x88, 0x62, 0x00, + 0xbb, 0x70, 0xf2, 0x1e, 0xcc, 0x04, 0xcc, 0x61, 0xeb, 0xf1, 0x90, 0x65, 0x47, 0xd4, 0x84, 0x21, + 0xa6, 0x99, 0xe5, 0xc0, 0x7c, 0x86, 0xcb, 0xcc, 0xc8, 0x94, 0xfc, 0x4a, 0x87, 0xfd, 0xb2, 0xb1, + 0x83, 0x25, 0xaf, 0xc1, 0x18, 0xbf, 0x50, 0x36, 0x2c, 0xca, 0x97, 0x05, 0x5d, 0x84, 0x7c, 0x57, + 0xd5, 0x45, 0x9e, 0x1d, 0x15, 0x32, 0x79, 0x96, 0x23, 0xd8, 0x38, 0x27, 0x2b, 0x07, 0x22, 0xf2, + 0xf8, 0x64, 0xe5, 0x00, 0xb3, 0x71, 0xf9, 0x3e, 0x14, 0xc5, 0x72, 0x07, 0x81, 0xf2, 0x4f, 0x07, + 0xca, 0x27, 0x00, 0x6d, 0x40, 0x71, 0xa5, 0x51, 0xd7, 0x0c, 0xa7, 0xea, 0x6a, 0xa9, 0x6d, 0x2b, + 0xba, 0x17, 0x8b, 0x2b, 0x4b, 0x18, 0x73, 0x0a, 0x92, 0x61, 0x98, 0x1c, 0xb4, 0x88, 0x49, 0xb9, + 0x47, 0x8c, 0xd4, 0x81, 0xed, 0xf2, 0x3d, 0x3e, 0x82, 0x05, 0x45, 0xfe, 0xe7, 0x1c, 0x14, 0xc5, + 0x72, 0x9c, 0xc2, 0x57, 0xd8, 0x6a, 0xe8, 0x2b, 0xec, 0xd5, 0x6c, 0xae, 0x91, 0xfa, 0x09, 0xb6, + 0x19, 0xf9, 0x04, 0xbb, 0x9a, 0x11, 0xef, 0xe9, 0xdf, 0x5f, 0xff, 0x27, 0xc1, 0x78, 0xd8, 0x29, + 0xd1, 0x2d, 0x18, 0x65, 0x09, 0x47, 0x6d, 0x91, 0x75, 0xbf, 0xce, 0xf5, 0x2e, 0x61, 0x9a, 0x3e, + 0x09, 0x07, 0xf9, 0x50, 0xc7, 0x13, 0x63, 0x7e, 0x24, 0x26, 0x9d, 0xbe, 0xa4, 0x3d, 0xaa, 0x6a, + 0x55, 0xe7, 0x69, 0xa5, 0xba, 0xa2, 0xd3, 0x0d, 0xab, 0x49, 0x2d, 0x55, 0xef, 0xc4, 0x14, 0x71, + 0xa7, 0x0c, 0x22, 0xcb, 0x3f, 0x92, 0x60, 0x54, 0x98, 0x7c, 0x0a, 0x5f, 0x15, 0x7f, 0x11, 0xfe, + 0xaa, 0xb8, 0x9c, 0xf1, 0x80, 0x27, 0x7f, 0x52, 0xfc, 0x97, 0x6f, 0x3a, 0x3b, 0xd2, 0xcc, 0xab, + 0x77, 0x0d, 0x9b, 0x46, 0xbd, 0x9a, 0x1d, 0x46, 0xcc, 0x29, 0xa8, 0x07, 0x93, 0x6a, 0x24, 0x06, + 0x88, 0xa5, 0xad, 0x65, 0xb3, 0xc4, 0x13, 0xab, 0x97, 0x05, 0xfc, 0x64, 0x94, 0x82, 0x63, 0x2a, + 0x64, 0x02, 0x31, 0x2e, 0xf4, 0x1e, 0x14, 0x76, 0x29, 0x35, 0x13, 0xee, 0xab, 0x07, 0x44, 0x1e, + 0xdf, 0x84, 0x12, 0x9f, 0xdd, 0xe6, 0x66, 0x03, 0x73, 0x28, 0xf9, 0x37, 0xfe, 0x7a, 0x34, 0x1d, + 0x1f, 0xf7, 0xe2, 0xa9, 0x74, 0x92, 0x78, 0x3a, 0x9a, 0x14, 0x4b, 0xd1, 0x03, 0xc8, 0x53, 0x2d, + 0xeb, 0x67, 0xa1, 0x40, 0xdc, 0x5c, 0x6d, 0xfa, 0x01, 0x69, 0x73, 0xb5, 0x89, 0x19, 0x04, 0xda, + 0x80, 0x21, 0x96, 0x7d, 0xd8, 0x11, 0xcc, 0x67, 0x3f, 0xd2, 0x6c, 0xfe, 0xbe, 0x43, 0xb0, 0x5f, + 0x36, 0x76, 0x70, 0xe4, 0x4f, 0x60, 0x2c, 0x74, 0x4e, 0xd1, 0xc7, 0x70, 0x56, 0x33, 0x94, 0x76, + 0x5d, 0xd1, 0x14, 0xbd, 0x45, 0xdc, 0xc7, 0x81, 0xcb, 0x49, 0x5f, 0x18, 0xab, 0x01, 0x3e, 0x71, + 0xca, 0x67, 0x84, 0x92, 0xb3, 0x41, 0x1a, 0x0e, 0x21, 0xca, 0x0a, 0x80, 0x3f, 0x47, 0x54, 0x81, + 0x21, 0xe6, 0x67, 0x4e, 0x3e, 0x19, 0xa9, 0x8f, 0x30, 0x0b, 0x99, 0xfb, 0xd9, 0xd8, 0x19, 0x47, + 0x37, 0x00, 0x6c, 0xd2, 0xb2, 0x08, 0xe5, 0xc1, 0x20, 0x17, 0x7e, 0x60, 0x6c, 0x7a, 0x14, 0x1c, + 0xe0, 0x92, 0x7f, 0x22, 0xc1, 0xd8, 0x3a, 0xa1, 0x9f, 0x1a, 0xd6, 0x5e, 0xc3, 0xd0, 0xd4, 0x56, + 0xff, 0x14, 0x82, 0x2d, 0x0e, 0x05, 0xdb, 0xd7, 0x06, 0xec, 0x4c, 0xc8, 0xba, 0xb4, 0x90, 0x2b, + 0x7f, 0x29, 0xc1, 0x5c, 0x88, 0xf3, 0x9e, 0x7f, 0x74, 0xb7, 0x60, 0xc8, 0x34, 0x2c, 0xea, 0x26, + 0xe2, 0x63, 0x29, 0x64, 0x61, 0x2c, 0x90, 0x8a, 0x19, 0x0c, 0x76, 0xd0, 0xd0, 0x2a, 0xe4, 0xa8, + 0x21, 0x5c, 0xf5, 0x78, 0x98, 0x84, 0x58, 0x75, 0x10, 0x98, 0xb9, 0x4d, 0x03, 0xe7, 0xa8, 0xc1, + 0x36, 0xa2, 0x1c, 0xe2, 0x0a, 0x06, 0x9f, 0xe7, 0x34, 0x03, 0x0c, 0x85, 0x1d, 0xcb, 0xe8, 0x9e, + 0x78, 0x0e, 0xde, 0x46, 0x2c, 0x5b, 0x46, 0x17, 0x73, 0x2c, 0xf9, 0x2b, 0x09, 0xa6, 0x42, 0x9c, + 0xa7, 0x10, 0xf8, 0xdf, 0x0b, 0x07, 0xfe, 0xab, 0xc7, 0x99, 0x48, 0x4a, 0xf8, 0xff, 0x2a, 0x17, + 0x99, 0x06, 0x9b, 0x30, 0xda, 0x81, 0x51, 0xd3, 0x68, 0x37, 0x9f, 0xc1, 0x73, 0xe0, 0x04, 0xcb, + 0x9b, 0x0d, 0x1f, 0x0b, 0x07, 0x81, 0xd1, 0x01, 0x4c, 0xe9, 0x4a, 0x97, 0xd8, 0xa6, 0xd2, 0x22, + 0xcd, 0x67, 0x70, 0x41, 0x72, 0x8e, 0xbf, 0x37, 0x44, 0x11, 0x71, 0x5c, 0x09, 0x5a, 0x83, 0xa2, + 0x6a, 0xf2, 0x3a, 0x4e, 0xd4, 0x2e, 0x03, 0xb3, 0xa8, 0x53, 0xf5, 0x39, 0xf1, 0x5c, 0xfc, 0xc0, + 0x2e, 0x86, 0xfc, 0xdf, 0x51, 0x6f, 0x60, 0xfe, 0x87, 0xee, 0x43, 0x89, 0x37, 0x66, 0xb4, 0x0c, + 0xcd, 0x7d, 0x19, 0x60, 0x3b, 0xdb, 0x10, 0x63, 0x4f, 0x0e, 0x2b, 0x17, 0x12, 0x2e, 0x7d, 0x5d, + 0x32, 0xf6, 0x84, 0xd1, 0x3a, 0x14, 0xcc, 0x1f, 0x52, 0xc1, 0xf0, 0x24, 0xc7, 0xcb, 0x16, 0x8e, + 0x23, 0xff, 0x5d, 0x3e, 0x62, 0x2e, 0x4f, 0x75, 0x8f, 0x9e, 0xd9, 0xae, 0x7b, 0x15, 0x53, 0xea, + 0xce, 0x6f, 0x43, 0x51, 0x64, 0x78, 0xe1, 0xcc, 0x6f, 0x1c, 0xc7, 0x99, 0x83, 0x59, 0xcc, 0xfb, + 0x60, 0x71, 0x07, 0x5d, 0x60, 0xf4, 0x11, 0x0c, 0x13, 0x47, 0x85, 0x93, 0x1b, 0x6f, 0x1f, 0x47, + 0x85, 0x1f, 0x57, 0xfd, 0x42, 0x55, 0x8c, 0x09, 0x54, 0xf4, 0x36, 0x5b, 0x2f, 0xc6, 0xcb, 0x3e, + 0x02, 0xed, 0x72, 0x81, 0xa7, 0xab, 0x8b, 0xce, 0xb4, 0xbd, 0xe1, 0x27, 0x87, 0x15, 0xf0, 0x7f, + 0xe2, 0xa0, 0x84, 0xfc, 0x33, 0x09, 0xa6, 0xf8, 0x0a, 0xb5, 0x7a, 0x96, 0x4a, 0xfb, 0xa7, 0x96, + 0x98, 0x1e, 0x86, 0x12, 0xd3, 0xcd, 0x01, 0xcb, 0x12, 0xb3, 0x30, 0x35, 0x39, 0x7d, 0x2d, 0xc1, + 0xb9, 0x18, 0xf7, 0x29, 0xc4, 0xc5, 0xad, 0x70, 0x5c, 0x7c, 0xed, 0xb8, 0x13, 0x4a, 0x89, 0x8d, + 0xbf, 0x9d, 0x4c, 0x98, 0x0e, 0x3f, 0x29, 0x37, 0x00, 0x4c, 0x4b, 0xdd, 0x57, 0x35, 0xd2, 0x11, + 0x8f, 0xe0, 0xa5, 0x40, 0x8b, 0x93, 0x47, 0xc1, 0x01, 0x2e, 0x64, 0xc3, 0x6c, 0x9b, 0xec, 0x28, + 0x3d, 0x8d, 0x2e, 0xb4, 0xdb, 0x8b, 0x8a, 0xa9, 0x6c, 0xab, 0x9a, 0x4a, 0x55, 0x71, 0x5d, 0x30, + 0x52, 0xbf, 0xeb, 0x3c, 0x4e, 0x27, 0x71, 0x3c, 0x39, 0xac, 0x5c, 0x4c, 0x7a, 0x1d, 0x72, 0x59, + 0xfa, 0x38, 0x05, 0x1a, 0xf5, 0xa1, 0x6c, 0x91, 0x4f, 0x7a, 0xaa, 0x45, 0xda, 0x4b, 0x96, 0x61, + 0x86, 0xd4, 0xe6, 0xb9, 0xda, 0x3f, 0x3f, 0x3a, 0xac, 0x94, 0x71, 0x0a, 0xcf, 0x60, 0xc5, 0xa9, + 0xf0, 0xe8, 0x11, 0x4c, 0x2b, 0xa2, 0x19, 0x2d, 0xa8, 0xd5, 0x39, 0x25, 0x77, 0x8e, 0x0e, 0x2b, + 0xd3, 0x0b, 0x71, 0xf2, 0x60, 0x85, 0x49, 0xa0, 0xa8, 0x06, 0xc5, 0x7d, 0xde, 0xb7, 0x66, 0x97, + 0x87, 0x38, 0x3e, 0x4b, 0x04, 0x45, 0xa7, 0x95, 0x8d, 0x61, 0x0e, 0x2f, 0x37, 0xf9, 0xe9, 0x73, + 0xb9, 0xd8, 0x07, 0x25, 0xab, 0x25, 0xc5, 0x89, 0xe7, 0x37, 0xc6, 0x25, 0x3f, 0x6a, 0x3d, 0xf0, + 0x49, 0x38, 0xc8, 0x87, 0x3e, 0x84, 0x91, 0x5d, 0x71, 0x2b, 0x61, 0x97, 0x8b, 0x99, 0x92, 0x70, + 0xe8, 0x16, 0xa3, 0x3e, 0x25, 0x54, 0x8c, 0xb8, 0xc3, 0x36, 0xf6, 0x11, 0xd1, 0x2b, 0x50, 0xe4, + 0x3f, 0x56, 0x96, 0xf8, 0x75, 0x5c, 0xc9, 0x8f, 0x6d, 0x0f, 0x9c, 0x61, 0xec, 0xd2, 0x5d, 0xd6, + 0x95, 0xc6, 0x22, 0xbf, 0x16, 0x8e, 0xb0, 0xae, 0x34, 0x16, 0xb1, 0x4b, 0x47, 0x1f, 0x43, 0xd1, + 0x26, 0xab, 0xaa, 0xde, 0x3b, 0x28, 0x43, 0xa6, 0x47, 0xe5, 0xe6, 0x3d, 0xce, 0x1d, 0xb9, 0x18, + 0xf3, 0x35, 0x08, 0x3a, 0x76, 0x61, 0xd1, 0x2e, 0x8c, 0x58, 0x3d, 0x7d, 0xc1, 0xde, 0xb2, 0x89, + 0x55, 0x1e, 0xe5, 0x3a, 0x06, 0x85, 0x73, 0xec, 0xf2, 0x47, 0xb5, 0x78, 0x2b, 0xe4, 0x71, 0x60, + 0x1f, 0x1c, 0xfd, 0xa3, 0x04, 0xc8, 0xee, 0x99, 0xa6, 0x46, 0xba, 0x44, 0xa7, 0x8a, 0xc6, 0xef, + 0xe2, 0xec, 0xf2, 0x59, 0xae, 0xf3, 0x9d, 0x41, 0xf3, 0x8a, 0x09, 0x46, 0x95, 0x7b, 0x97, 0xde, + 0x71, 0x56, 0x9c, 0xa0, 0x97, 0x2d, 0xed, 0x8e, 0xcd, 0xff, 0x2e, 0x8f, 0x65, 0x5a, 0xda, 0xe4, + 0x3b, 0x47, 0x7f, 0x69, 0x05, 0x1d, 0xbb, 0xb0, 0xe8, 0x21, 0xcc, 0xba, 0x6d, 0x8f, 0xd8, 0x30, + 0xe8, 0xb2, 0xaa, 0x11, 0xbb, 0x6f, 0x53, 0xd2, 0x2d, 0x8f, 0xf3, 0x6d, 0xf7, 0x7a, 0x3f, 0x70, + 0x22, 0x17, 0x4e, 0x91, 0x46, 0x5d, 0xa8, 0xb8, 0x21, 0x83, 0x9d, 0x27, 0x2f, 0x66, 0xdd, 0xb3, + 0x5b, 0x8a, 0xe6, 0xbc, 0x03, 0x4c, 0x70, 0x05, 0x2f, 0x1f, 0x1d, 0x56, 0x2a, 0x4b, 0x4f, 0x67, + 0xc5, 0x83, 0xb0, 0xd0, 0xfb, 0x50, 0x56, 0xd2, 0xf4, 0x4c, 0x72, 0x3d, 0x2f, 0xb2, 0x38, 0x94, + 0xaa, 0x20, 0x55, 0x1a, 0x51, 0x98, 0x54, 0xc2, 0x0d, 0xa8, 0x76, 0x79, 0x2a, 0xd3, 0x45, 0x64, + 0xa4, 0x6f, 0xd5, 0xbf, 0x8c, 0x88, 0x10, 0x6c, 0x1c, 0xd3, 0x80, 0xfe, 0x06, 0x90, 0x12, 0xed, + 0x99, 0xb5, 0xcb, 0x28, 0x53, 0xfa, 0x89, 0x35, 0xdb, 0xfa, 0x6e, 0x17, 0x23, 0xd9, 0x38, 0x41, + 0x0f, 0x5a, 0x85, 0x19, 0x31, 0xba, 0xa5, 0xdb, 0xca, 0x0e, 0x69, 0xf6, 0xed, 0x16, 0xd5, 0xec, + 0xf2, 0x34, 0x8f, 0x7d, 0xfc, 0xe1, 0x6b, 0x21, 0x81, 0x8e, 0x13, 0xa5, 0xd0, 0x3b, 0x30, 0xb9, + 0x63, 0x58, 0xdb, 0x6a, 0xbb, 0x4d, 0x74, 0x17, 0x69, 0x86, 0x23, 0xcd, 0xb0, 0xd5, 0x58, 0x8e, + 0xd0, 0x70, 0x8c, 0x1b, 0xd9, 0x70, 0x4e, 0x20, 0x37, 0x2c, 0xa3, 0xb5, 0x66, 0xf4, 0x74, 0xea, + 0x94, 0x44, 0xe7, 0xbc, 0x14, 0x73, 0x6e, 0x21, 0x89, 0xe1, 0xc9, 0x61, 0xe5, 0x52, 0x72, 0x05, + 0xec, 0x33, 0xe1, 0x64, 0x6c, 0xb4, 0x0b, 0xc0, 0xe3, 0x82, 0x73, 0xfc, 0x66, 0xf9, 0xf1, 0xbb, + 0x93, 0x25, 0xea, 0x24, 0x9e, 0x40, 0xe7, 0x49, 0xce, 0x23, 0xe3, 0x00, 0x36, 0xfb, 0x4a, 0x51, + 0x22, 0x6d, 0xd5, 0x76, 0x79, 0x8e, 0xef, 0x75, 0x2d, 0xdb, 0x5e, 0x7b, 0x72, 0x81, 0xa7, 0xa9, + 0x28, 0x22, 0x8e, 0x2b, 0xe1, 0x5d, 0x3a, 0xe2, 0xcd, 0xe6, 0x74, 0x3a, 0x9d, 0x8f, 0xd7, 0xa5, + 0xe3, 0x9b, 0xf6, 0xcc, 0xba, 0x74, 0x02, 0x90, 0x4f, 0xbf, 0x25, 0xfe, 0x55, 0x0e, 0xa6, 0x7d, + 0xe6, 0xcc, 0x5d, 0x3a, 0x09, 0x22, 0x7f, 0xec, 0x76, 0x1e, 0xdc, 0xed, 0xfc, 0xa5, 0x04, 0xe3, + 0xfe, 0xd2, 0xfd, 0xfe, 0x75, 0xce, 0xf8, 0xb6, 0xa5, 0xd4, 0xf2, 0xff, 0x9b, 0x0b, 0x4e, 0xe0, + 0x0f, 0xbe, 0x7d, 0xe3, 0x87, 0xb7, 0x28, 0xcb, 0x5f, 0xe7, 0x61, 0x32, 0x7a, 0x1a, 0x43, 0xaf, + 0xfc, 0xd2, 0xc0, 0x57, 0xfe, 0x06, 0xcc, 0xec, 0xf4, 0x34, 0xad, 0xcf, 0x97, 0x21, 0xf0, 0xd4, + 0xef, 0xbc, 0xd2, 0xbd, 0x28, 0x24, 0x67, 0x96, 0x13, 0x78, 0x70, 0xa2, 0x64, 0x4a, 0xc7, 0x42, + 0xfe, 0x44, 0x1d, 0x0b, 0xb1, 0x07, 0xf4, 0xc2, 0x31, 0x1e, 0xd0, 0x13, 0xbb, 0x0f, 0x86, 0x4e, + 0xd0, 0x7d, 0x70, 0x92, 0x76, 0x81, 0x84, 0x20, 0x36, 0xb0, 0x7b, 0xf5, 0x45, 0x38, 0x2f, 0xc4, + 0x28, 0x7f, 0xc9, 0xd7, 0xa9, 0x65, 0x68, 0x1a, 0xb1, 0x96, 0x7a, 0xdd, 0x6e, 0x5f, 0x7e, 0x0b, + 0xc6, 0xc3, 0x3d, 0x2a, 0xce, 0x4e, 0x3b, 0x6d, 0x32, 0xe2, 0xad, 0x34, 0xb0, 0xd3, 0xce, 0x38, + 0xf6, 0x38, 0xe4, 0xbf, 0x97, 0x60, 0x36, 0xb9, 0x17, 0x15, 0x69, 0x30, 0xde, 0x55, 0x0e, 0x82, + 0xfd, 0xc1, 0xd2, 0x09, 0x6f, 0xb1, 0x78, 0x73, 0xc2, 0x5a, 0x08, 0x0b, 0x47, 0xb0, 0xe5, 0xef, + 0x25, 0x98, 0x4b, 0x69, 0x0b, 0x38, 0x5d, 0x4b, 0xd0, 0x07, 0x50, 0xea, 0x2a, 0x07, 0xcd, 0x9e, + 0xd5, 0x21, 0x27, 0xbe, 0xb7, 0xe3, 0x11, 0x63, 0x4d, 0xa0, 0x60, 0x0f, 0x4f, 0xfe, 0x4f, 0x09, + 0x5e, 0x48, 0xad, 0x65, 0xd0, 0xed, 0x50, 0x07, 0x83, 0x1c, 0xe9, 0x60, 0x40, 0x71, 0xc1, 0xe7, + 0xd4, 0xc0, 0xf0, 0xb9, 0x04, 0xe5, 0xb4, 0xef, 0x3c, 0x74, 0x2b, 0x64, 0xe4, 0x4b, 0x11, 0x23, + 0xa7, 0x62, 0x72, 0xcf, 0xc9, 0xc6, 0xff, 0x91, 0x60, 0x36, 0xf9, 0x7b, 0x17, 0xbd, 0x1e, 0xb2, + 0xb0, 0x12, 0xb1, 0x70, 0x22, 0x22, 0x25, 0xec, 0xfb, 0x08, 0xc6, 0xc5, 0x57, 0xb1, 0x80, 0x11, + 0x7b, 0x2f, 0x27, 0x45, 0x74, 0x01, 0xe1, 0xd6, 0xa0, 0xdc, 0xab, 0xc2, 0x63, 0x38, 0x82, 0x26, + 0xff, 0x43, 0x0e, 0x86, 0x9a, 0x2d, 0x45, 0x23, 0xa7, 0x50, 0x0c, 0xbe, 0x1b, 0x2a, 0x06, 0x07, + 0xfd, 0xc7, 0x11, 0xb7, 0x2a, 0xb5, 0x0e, 0xc4, 0x91, 0x3a, 0xf0, 0xd5, 0x4c, 0x68, 0x4f, 0x2f, + 0x01, 0xff, 0x0c, 0x46, 0x3c, 0xa5, 0xc7, 0xcb, 0x4c, 0xf2, 0x7f, 0xe4, 0x60, 0x34, 0xa0, 0xe2, + 0x98, 0x79, 0x6d, 0x27, 0x54, 0x0f, 0xe4, 0x33, 0x7c, 0x78, 0x04, 0x74, 0x55, 0xdd, 0x0a, 0xc0, + 0xe9, 0x98, 0xf5, 0x7b, 0x24, 0xe3, 0x85, 0xc1, 0x5b, 0x30, 0x4e, 0x15, 0xab, 0x43, 0xa8, 0x77, + 0x27, 0x9f, 0xe7, 0xbe, 0xe8, 0xf5, 0x59, 0x6f, 0x86, 0xa8, 0x38, 0xc2, 0x7d, 0xfe, 0x2e, 0x8c, + 0x85, 0x94, 0x1d, 0xab, 0xe1, 0xf5, 0xff, 0x25, 0x78, 0x69, 0xe0, 0x8d, 0x09, 0xaa, 0x87, 0x0e, + 0x49, 0x35, 0x72, 0x48, 0xe6, 0xd3, 0x01, 0x9e, 0x5f, 0xe3, 0x54, 0xfd, 0xda, 0xe3, 0xef, 0xe6, + 0xcf, 0x7c, 0xf3, 0xdd, 0xfc, 0x99, 0x6f, 0xbf, 0x9b, 0x3f, 0xf3, 0xb7, 0x47, 0xf3, 0xd2, 0xe3, + 0xa3, 0x79, 0xe9, 0x9b, 0xa3, 0x79, 0xe9, 0xdb, 0xa3, 0x79, 0xe9, 0x17, 0x47, 0xf3, 0xd2, 0xbf, + 0x7c, 0x3f, 0x7f, 0xe6, 0x83, 0xa2, 0x80, 0xfb, 0x5d, 0x00, 0x00, 0x00, 0xff, 0xff, 0x66, 0xf0, + 0x40, 0xcd, 0xc4, 0x3c, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.proto b/vendor/k8s.io/api/extensions/v1beta1/generated.proto index efcda7ebdea..55239b8dff6 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/generated.proto +++ b/vendor/k8s.io/api/extensions/v1beta1/generated.proto @@ -30,6 +30,12 @@ import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +message AllowedCSIDriver { + // Name is the registered name of the CSI driver + optional string name = 1; +} + // AllowedFlexVolume represents a single Flexvolume that is allowed to be used. // Deprecated: use AllowedFlexVolume from policy API Group instead. message AllowedFlexVolume { @@ -60,12 +66,12 @@ message AllowedHostPath { // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetSpec spec = 2; @@ -73,7 +79,7 @@ message DaemonSet { // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetStatus status = 3; } @@ -102,7 +108,7 @@ message DaemonSetCondition { // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -471,19 +477,20 @@ message IPBlock { // endpoints defined by a backend. An Ingress can be configured to give services // externally-reachable urls, load balance traffic, terminate SSL, offer name // based virtual hosting etc. +// DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information. message Ingress { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec is the desired state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional IngressSpec spec = 2; // Status is the current state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional IngressStatus status = 3; } @@ -500,7 +507,7 @@ message IngressBackend { // IngressList is a collection of Ingress. message IngressList { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -597,7 +604,7 @@ message IngressTLS { // NetworkPolicy describes what network traffic is allowed for a set of Pods message NetworkPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -652,7 +659,7 @@ message NetworkPolicyIngressRule { // Network Policy List is a list of NetworkPolicy objects. message NetworkPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -732,7 +739,7 @@ message NetworkPolicySpec { repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -750,7 +757,7 @@ message NetworkPolicySpec { // Deprecated: use PodSecurityPolicy from policy API Group instead. message PodSecurityPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -763,7 +770,7 @@ message PodSecurityPolicy { // Deprecated: use PodSecurityPolicyList from policy API Group instead. message PodSecurityPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -864,6 +871,11 @@ message PodSecurityPolicySpec { // +optional repeated AllowedFlexVolume allowedFlexVolumes = 18; + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value means no CSI drivers can run inline within a pod spec. + // +optional + repeated AllowedCSIDriver allowedCSIDrivers = 23; + // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -898,12 +910,12 @@ message PodSecurityPolicySpec { message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetSpec spec = 2; @@ -911,7 +923,7 @@ message ReplicaSet { // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetStatus status = 3; } @@ -940,7 +952,7 @@ message ReplicaSetCondition { // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1063,7 +1075,7 @@ message RollingUpdateDeployment { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new RC can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } @@ -1106,15 +1118,15 @@ message SELinuxStrategyOptions { // represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff --git a/vendor/k8s.io/api/extensions/v1beta1/types.go b/vendor/k8s.io/api/extensions/v1beta1/types.go index 5ba6f958545..c34ea599d6c 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/types.go +++ b/vendor/k8s.io/api/extensions/v1beta1/types.go @@ -18,7 +18,7 @@ package v1beta1 import ( appsv1beta1 "k8s.io/api/apps/v1beta1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -54,15 +54,15 @@ type ScaleStatus struct { // represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -229,7 +229,7 @@ type RollingUpdateDeployment struct { // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new RC can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } @@ -489,12 +489,12 @@ type DaemonSetCondition struct { type DaemonSet struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -502,7 +502,7 @@ type DaemonSet struct { // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -526,7 +526,7 @@ const ( type DaemonSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -541,20 +541,21 @@ type DaemonSetList struct { // endpoints defined by a backend. An Ingress can be configured to give services // externally-reachable urls, load balance traffic, terminate SSL, offer name // based virtual hosting etc. +// DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information. type Ingress struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is the desired state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the current state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -565,7 +566,7 @@ type Ingress struct { type IngressList struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -716,12 +717,12 @@ type ReplicaSet struct { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -729,7 +730,7 @@ type ReplicaSet struct { // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -740,7 +741,7 @@ type ReplicaSet struct { type ReplicaSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -844,7 +845,7 @@ type ReplicaSetCondition struct { type PodSecurityPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -927,6 +928,10 @@ type PodSecurityPolicySpec struct { // is allowed in the "volumes" field. // +optional AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"` + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value means no CSI drivers can run inline within a pod spec. + // +optional + AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"` // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -997,6 +1002,7 @@ var ( ConfigMap FSType = "configMap" Quobyte FSType = "quobyte" AzureDisk FSType = "azureDisk" + CSI FSType = "csi" All FSType = "*" ) @@ -1007,6 +1013,12 @@ type AllowedFlexVolume struct { Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` } +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +type AllowedCSIDriver struct { + // Name is the registered name of the CSI driver + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + // HostPortRange defines a range of host ports that will be enabled by a policy // for pods to use. It requires both the start and end to be defined. // Deprecated: use HostPortRange from policy API Group instead. @@ -1166,7 +1178,7 @@ const ( type PodSecurityPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -1181,7 +1193,7 @@ type PodSecurityPolicyList struct { type NetworkPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -1232,7 +1244,7 @@ type NetworkPolicySpec struct { Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -1351,7 +1363,7 @@ type NetworkPolicyPeer struct { type NetworkPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff --git a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index 8128c079b48..a67968af4c2 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -27,6 +27,22 @@ import ( intstr "k8s.io/apimachinery/pkg/util/intstr" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. +func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { + if in == nil { + return nil + } + out := new(AllowedCSIDriver) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { *out = *in @@ -1049,6 +1065,11 @@ func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { *out = make([]AllowedFlexVolume, len(*in)) copy(*out, *in) } + if in.AllowedCSIDrivers != nil { + in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers + *out = make([]AllowedCSIDriver, len(*in)) + copy(*out, *in) + } if in.AllowedUnsafeSysctls != nil { in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls *out = make([]string, len(*in)) diff --git a/vendor/k8s.io/api/networking/OWNERS b/vendor/k8s.io/api/networking/OWNERS old mode 100755 new mode 100644 index 0e696c0fbb4..21b1f1ecd2a --- a/vendor/k8s.io/api/networking/OWNERS +++ b/vendor/k8s.io/api/networking/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - caseydavenport - cmluciano diff --git a/vendor/k8s.io/api/networking/v1/doc.go b/vendor/k8s.io/api/networking/v1/doc.go index 887c3664796..d3ffd5ed178 100644 --- a/vendor/k8s.io/api/networking/v1/doc.go +++ b/vendor/k8s.io/api/networking/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=networking.k8s.io diff --git a/vendor/k8s.io/api/networking/v1/generated.proto b/vendor/k8s.io/api/networking/v1/generated.proto index ab3731e9c39..cbbb265289c 100644 --- a/vendor/k8s.io/api/networking/v1/generated.proto +++ b/vendor/k8s.io/api/networking/v1/generated.proto @@ -48,7 +48,7 @@ message IPBlock { // NetworkPolicy describes what network traffic is allowed for a set of Pods message NetworkPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -101,7 +101,7 @@ message NetworkPolicyIngressRule { // NetworkPolicyList is a list of NetworkPolicy objects. message NetworkPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -180,7 +180,7 @@ message NetworkPolicySpec { repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. diff --git a/vendor/k8s.io/api/networking/v1/types.go b/vendor/k8s.io/api/networking/v1/types.go index ce70448d320..59331111f46 100644 --- a/vendor/k8s.io/api/networking/v1/types.go +++ b/vendor/k8s.io/api/networking/v1/types.go @@ -29,7 +29,7 @@ import ( type NetworkPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -80,7 +80,7 @@ type NetworkPolicySpec struct { Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -194,7 +194,7 @@ type NetworkPolicyPeer struct { type NetworkPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff --git a/vendor/k8s.io/api/networking/v1beta1/BUILD b/vendor/k8s.io/api/networking/v1beta1/BUILD new file mode 100644 index 00000000000..bdfc736dc1d --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/BUILD @@ -0,0 +1,41 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated.pb.go", + "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1", + importpath = "k8s.io/api/networking/v1beta1", + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/api/networking/v1beta1/doc.go b/vendor/k8s.io/api/networking/v1beta1/doc.go new file mode 100644 index 00000000000..12d3d4ff06c --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true +// +groupName=networking.k8s.io + +package v1beta1 // import "k8s.io/api/networking/v1beta1" diff --git a/vendor/k8s.io/api/networking/v1beta1/generated.pb.go b/vendor/k8s.io/api/networking/v1beta1/generated.pb.go new file mode 100644 index 00000000000..14430cbacb1 --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/generated.pb.go @@ -0,0 +1,1953 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1/generated.proto + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1/generated.proto + + It has these top-level messages: + HTTPIngressPath + HTTPIngressRuleValue + Ingress + IngressBackend + IngressList + IngressRule + IngressRuleValue + IngressSpec + IngressStatus + IngressTLS +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } +func (*HTTPIngressPath) ProtoMessage() {} +func (*HTTPIngressPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } +func (*HTTPIngressRuleValue) ProtoMessage() {} +func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *IngressBackend) Reset() { *m = IngressBackend{} } +func (*IngressBackend) ProtoMessage() {} +func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *IngressList) Reset() { *m = IngressList{} } +func (*IngressList) ProtoMessage() {} +func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *IngressRule) Reset() { *m = IngressRule{} } +func (*IngressRule) ProtoMessage() {} +func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } +func (*IngressRuleValue) ProtoMessage() {} +func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *IngressSpec) Reset() { *m = IngressSpec{} } +func (*IngressSpec) ProtoMessage() {} +func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *IngressStatus) Reset() { *m = IngressStatus{} } +func (*IngressStatus) ProtoMessage() {} +func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *IngressTLS) Reset() { *m = IngressTLS{} } +func (*IngressTLS) ProtoMessage() {} +func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func init() { + proto.RegisterType((*HTTPIngressPath)(nil), "k8s.io.api.networking.v1beta1.HTTPIngressPath") + proto.RegisterType((*HTTPIngressRuleValue)(nil), "k8s.io.api.networking.v1beta1.HTTPIngressRuleValue") + proto.RegisterType((*Ingress)(nil), "k8s.io.api.networking.v1beta1.Ingress") + proto.RegisterType((*IngressBackend)(nil), "k8s.io.api.networking.v1beta1.IngressBackend") + proto.RegisterType((*IngressList)(nil), "k8s.io.api.networking.v1beta1.IngressList") + proto.RegisterType((*IngressRule)(nil), "k8s.io.api.networking.v1beta1.IngressRule") + proto.RegisterType((*IngressRuleValue)(nil), "k8s.io.api.networking.v1beta1.IngressRuleValue") + proto.RegisterType((*IngressSpec)(nil), "k8s.io.api.networking.v1beta1.IngressSpec") + proto.RegisterType((*IngressStatus)(nil), "k8s.io.api.networking.v1beta1.IngressStatus") + proto.RegisterType((*IngressTLS)(nil), "k8s.io.api.networking.v1beta1.IngressTLS") +} +func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HTTPIngressPath) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i += copy(dAtA[i:], m.Path) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Backend.Size())) + n1, err := m.Backend.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + return i, nil +} + +func (m *HTTPIngressRuleValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HTTPIngressRuleValue) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Paths) > 0 { + for _, msg := range m.Paths { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *Ingress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Ingress) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n2, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n3, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n4, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + return i, nil +} + +func (m *IngressBackend) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressBackend) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i += copy(dAtA[i:], m.ServiceName) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ServicePort.Size())) + n5, err := m.ServicePort.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + return i, nil +} + +func (m *IngressList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n6, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *IngressRule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressRule) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i += copy(dAtA[i:], m.Host) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.IngressRuleValue.Size())) + n7, err := m.IngressRuleValue.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + return i, nil +} + +func (m *IngressRuleValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressRuleValue) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.HTTP != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.HTTP.Size())) + n8, err := m.HTTP.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} + +func (m *IngressSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Backend != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Backend.Size())) + n9, err := m.Backend.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if len(m.TLS) > 0 { + for _, msg := range m.TLS { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Rules) > 0 { + for _, msg := range m.Rules { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *IngressStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) + n10, err := m.LoadBalancer.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + return i, nil +} + +func (m *IngressTLS) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressTLS) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Hosts) > 0 { + for _, s := range m.Hosts { + dAtA[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i += copy(dAtA[i:], m.SecretName) + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *HTTPIngressPath) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Backend.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HTTPIngressRuleValue) Size() (n int) { + var l int + _ = l + if len(m.Paths) > 0 { + for _, e := range m.Paths { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Ingress) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressBackend) Size() (n int) { + var l int + _ = l + l = len(m.ServiceName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ServicePort.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IngressRule) Size() (n int) { + var l int + _ = l + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = m.IngressRuleValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressRuleValue) Size() (n int) { + var l int + _ = l + if m.HTTP != nil { + l = m.HTTP.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *IngressSpec) Size() (n int) { + var l int + _ = l + if m.Backend != nil { + l = m.Backend.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.TLS) > 0 { + for _, e := range m.TLS { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IngressStatus) Size() (n int) { + var l int + _ = l + l = m.LoadBalancer.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressTLS) Size() (n int) { + var l int + _ = l + if len(m.Hosts) > 0 { + for _, s := range m.Hosts { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.SecretName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *HTTPIngressPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPIngressPath{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Backend:` + strings.Replace(strings.Replace(this.Backend.String(), "IngressBackend", "IngressBackend", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPIngressRuleValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPIngressRuleValue{`, + `Paths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Paths), "HTTPIngressPath", "HTTPIngressPath", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Ingress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ingress{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "IngressSpec", "IngressSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "IngressStatus", "IngressStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressBackend) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressBackend{`, + `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, + `ServicePort:` + strings.Replace(strings.Replace(this.ServicePort.String(), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Ingress", "Ingress", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRule{`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `IngressRuleValue:` + strings.Replace(strings.Replace(this.IngressRuleValue.String(), "IngressRuleValue", "IngressRuleValue", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressRuleValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRuleValue{`, + `HTTP:` + strings.Replace(fmt.Sprintf("%v", this.HTTP), "HTTPIngressRuleValue", "HTTPIngressRuleValue", 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressSpec{`, + `Backend:` + strings.Replace(fmt.Sprintf("%v", this.Backend), "IngressBackend", "IngressBackend", 1) + `,`, + `TLS:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TLS), "IngressTLS", "IngressTLS", 1), `&`, ``, 1) + `,`, + `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "IngressRule", "IngressRule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "k8s_io_api_core_v1.LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressTLS) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressTLS{`, + `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *HTTPIngressPath) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPIngressPath: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPIngressPath: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Backend", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Backend.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HTTPIngressRuleValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPIngressRuleValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPIngressRuleValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Paths = append(m.Paths, HTTPIngressPath{}) + if err := m.Paths[len(m.Paths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ingress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Ingress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ingress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressBackend) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressBackend: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressBackend: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServicePort", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServicePort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Ingress{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressRule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressRule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressRule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IngressRuleValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.IngressRuleValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressRuleValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressRuleValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressRuleValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTP", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HTTP == nil { + m.HTTP = &HTTPIngressRuleValue{} + } + if err := m.HTTP.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Backend", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Backend == nil { + m.Backend = &IngressBackend{} + } + if err := m.Backend.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TLS = append(m.TLS, IngressTLS{}) + if err := m.TLS[len(m.TLS)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, IngressRule{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LoadBalancer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressTLS) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressTLS: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressTLS: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hosts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hosts = append(m.Hosts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 812 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcf, 0x6e, 0xfb, 0x44, + 0x10, 0x8e, 0xf3, 0xa7, 0x69, 0xd7, 0xfd, 0xa7, 0xa5, 0x87, 0xa8, 0x12, 0x6e, 0xe4, 0x03, 0x2a, + 0x88, 0xae, 0x69, 0x0a, 0x88, 0xb3, 0x0f, 0xa8, 0x15, 0x81, 0x86, 0x75, 0x84, 0x10, 0xe2, 0xd0, + 0x8d, 0xb3, 0x38, 0x26, 0x89, 0x6d, 0x76, 0xd7, 0x41, 0xdc, 0x78, 0x01, 0x04, 0x4f, 0xc1, 0x99, + 0x23, 0x8f, 0xd0, 0x63, 0x8f, 0x3d, 0x55, 0x34, 0xbc, 0x07, 0x42, 0xbb, 0xde, 0xda, 0x4e, 0xd2, + 0xfe, 0x6a, 0xfd, 0x6e, 0xde, 0x9d, 0xf9, 0xbe, 0xd9, 0x99, 0xf9, 0x66, 0x0c, 0x3e, 0x9f, 0x7e, + 0xc6, 0x51, 0x18, 0x3b, 0xd3, 0x74, 0x44, 0x59, 0x44, 0x05, 0xe5, 0xce, 0x82, 0x46, 0xe3, 0x98, + 0x39, 0xda, 0x40, 0x92, 0xd0, 0x89, 0xa8, 0xf8, 0x39, 0x66, 0xd3, 0x30, 0x0a, 0x9c, 0xc5, 0xf9, + 0x88, 0x0a, 0x72, 0xee, 0x04, 0x34, 0xa2, 0x8c, 0x08, 0x3a, 0x46, 0x09, 0x8b, 0x45, 0x0c, 0xdf, + 0xcd, 0xdc, 0x11, 0x49, 0x42, 0x54, 0xb8, 0x23, 0xed, 0x7e, 0x7c, 0x16, 0x84, 0x62, 0x92, 0x8e, + 0x90, 0x1f, 0xcf, 0x9d, 0x20, 0x0e, 0x62, 0x47, 0xa1, 0x46, 0xe9, 0x0f, 0xea, 0xa4, 0x0e, 0xea, + 0x2b, 0x63, 0x3b, 0xb6, 0x4b, 0xc1, 0xfd, 0x98, 0x51, 0x67, 0xb1, 0x11, 0xf1, 0xf8, 0xe3, 0xc2, + 0x67, 0x4e, 0xfc, 0x49, 0x18, 0x51, 0xf6, 0x8b, 0x93, 0x4c, 0x03, 0x79, 0xc1, 0x9d, 0x39, 0x15, + 0xe4, 0x39, 0x94, 0xf3, 0x12, 0x8a, 0xa5, 0x91, 0x08, 0xe7, 0x74, 0x03, 0xf0, 0xe9, 0x6b, 0x00, + 0xee, 0x4f, 0xe8, 0x9c, 0x6c, 0xe0, 0x2e, 0x5e, 0xc2, 0xa5, 0x22, 0x9c, 0x39, 0x61, 0x24, 0xb8, + 0x60, 0xeb, 0x20, 0xfb, 0x37, 0x03, 0x1c, 0x5c, 0x0e, 0x87, 0x83, 0xab, 0x28, 0x60, 0x94, 0xf3, + 0x01, 0x11, 0x13, 0xd8, 0x05, 0xcd, 0x84, 0x88, 0x49, 0xc7, 0xe8, 0x1a, 0xa7, 0x3b, 0xee, 0xee, + 0xed, 0xc3, 0x49, 0x6d, 0xf9, 0x70, 0xd2, 0x94, 0x36, 0xac, 0x2c, 0xf0, 0x5b, 0xd0, 0x1e, 0x11, + 0x7f, 0x4a, 0xa3, 0x71, 0xa7, 0xde, 0x35, 0x4e, 0xcd, 0xde, 0x19, 0x7a, 0x63, 0x37, 0x90, 0xa6, + 0x77, 0x33, 0x90, 0x7b, 0xa0, 0x39, 0xdb, 0xfa, 0x02, 0x3f, 0xd1, 0xd9, 0x53, 0x70, 0x54, 0x7a, + 0x0e, 0x4e, 0x67, 0xf4, 0x1b, 0x32, 0x4b, 0x29, 0xf4, 0x40, 0x4b, 0x46, 0xe6, 0x1d, 0xa3, 0xdb, + 0x38, 0x35, 0x7b, 0xe8, 0x95, 0x78, 0x6b, 0x29, 0xb9, 0x7b, 0x3a, 0x60, 0x4b, 0x9e, 0x38, 0xce, + 0xb8, 0xec, 0xdf, 0xeb, 0xa0, 0xad, 0xbd, 0xe0, 0x0d, 0xd8, 0x96, 0x1d, 0x1c, 0x13, 0x41, 0x54, + 0xe2, 0x66, 0xef, 0xa3, 0x52, 0x8c, 0xbc, 0xa0, 0x28, 0x99, 0x06, 0xf2, 0x82, 0x23, 0xe9, 0x8d, + 0x16, 0xe7, 0xe8, 0x7a, 0xf4, 0x23, 0xf5, 0xc5, 0x97, 0x54, 0x10, 0x17, 0xea, 0x28, 0xa0, 0xb8, + 0xc3, 0x39, 0x2b, 0xec, 0x83, 0x26, 0x4f, 0xa8, 0xaf, 0x2b, 0xf6, 0x41, 0xb5, 0x8a, 0x79, 0x09, + 0xf5, 0x8b, 0x16, 0xc8, 0x13, 0x56, 0x2c, 0x70, 0x08, 0xb6, 0xb8, 0x20, 0x22, 0xe5, 0x9d, 0x86, + 0xe2, 0xfb, 0xb0, 0x22, 0x9f, 0xc2, 0xb8, 0xfb, 0x9a, 0x71, 0x2b, 0x3b, 0x63, 0xcd, 0x65, 0xff, + 0x65, 0x80, 0xfd, 0xd5, 0x5e, 0xc1, 0x4f, 0x80, 0xc9, 0x29, 0x5b, 0x84, 0x3e, 0xfd, 0x8a, 0xcc, + 0xa9, 0x16, 0xc5, 0x3b, 0x1a, 0x6f, 0x7a, 0x85, 0x09, 0x97, 0xfd, 0x60, 0x90, 0xc3, 0x06, 0x31, + 0x13, 0x3a, 0xe9, 0x97, 0x4b, 0x2a, 0x35, 0x8a, 0x32, 0x8d, 0xa2, 0xab, 0x48, 0x5c, 0x33, 0x4f, + 0xb0, 0x30, 0x0a, 0x36, 0x02, 0x49, 0x32, 0x5c, 0x66, 0xb6, 0xff, 0x36, 0x80, 0xa9, 0x9f, 0xdc, + 0x0f, 0xb9, 0x80, 0xdf, 0x6f, 0x34, 0x12, 0x55, 0x6b, 0xa4, 0x44, 0xab, 0x36, 0x1e, 0xea, 0x98, + 0xdb, 0x4f, 0x37, 0xa5, 0x26, 0x7e, 0x01, 0x5a, 0xa1, 0xa0, 0x73, 0xde, 0xa9, 0x2b, 0x1d, 0xbe, + 0x57, 0x51, 0xf7, 0xb9, 0xfe, 0xae, 0x24, 0x18, 0x67, 0x1c, 0xf6, 0x9f, 0xc5, 0xd3, 0xa5, 0xd2, + 0xe5, 0xe0, 0x4d, 0x62, 0x2e, 0xd6, 0x07, 0xef, 0x32, 0xe6, 0x02, 0x2b, 0x0b, 0x4c, 0xc1, 0x61, + 0xb8, 0x36, 0x1a, 0xba, 0xb4, 0x4e, 0xb5, 0x97, 0xe4, 0x30, 0xb7, 0xa3, 0xe9, 0x0f, 0xd7, 0x2d, + 0x78, 0x23, 0x84, 0x4d, 0xc1, 0x86, 0x17, 0xfc, 0x1a, 0x34, 0x27, 0x42, 0x24, 0xba, 0xc6, 0x17, + 0xd5, 0x07, 0xb2, 0x78, 0xc2, 0xb6, 0xca, 0x6e, 0x38, 0x1c, 0x60, 0x45, 0x65, 0xff, 0x57, 0xd4, + 0xc3, 0xcb, 0x34, 0x9e, 0xaf, 0x19, 0xe3, 0x6d, 0xd6, 0x8c, 0xf9, 0xdc, 0x8a, 0x81, 0x97, 0xa0, + 0x21, 0x66, 0x4f, 0x0d, 0x7c, 0xbf, 0x1a, 0xe3, 0xb0, 0xef, 0xb9, 0xa6, 0x2e, 0x58, 0x63, 0xd8, + 0xf7, 0xb0, 0xa4, 0x80, 0xd7, 0xa0, 0xc5, 0xd2, 0x19, 0x95, 0x23, 0xd8, 0xa8, 0x3e, 0xd2, 0x32, + 0xff, 0x42, 0x10, 0xf2, 0xc4, 0x71, 0xc6, 0x63, 0xff, 0x04, 0xf6, 0x56, 0xe6, 0x14, 0xde, 0x80, + 0xdd, 0x59, 0x4c, 0xc6, 0x2e, 0x99, 0x91, 0xc8, 0xa7, 0x4c, 0x97, 0x61, 0x45, 0x75, 0xf2, 0x6f, + 0xa5, 0xe4, 0x5b, 0xf2, 0xd3, 0x53, 0x7e, 0xa4, 0x83, 0xec, 0x96, 0x6d, 0x78, 0x85, 0xd1, 0x26, + 0x00, 0x14, 0x39, 0xc2, 0x13, 0xd0, 0x92, 0x3a, 0xcb, 0xd6, 0xec, 0x8e, 0xbb, 0x23, 0x5f, 0x28, + 0xe5, 0xc7, 0x71, 0x76, 0x0f, 0x7b, 0x00, 0x70, 0xea, 0x33, 0x2a, 0xd4, 0x32, 0xa8, 0x2b, 0xa1, + 0xe6, 0x6b, 0xcf, 0xcb, 0x2d, 0xb8, 0xe4, 0xe5, 0x9e, 0xdd, 0x3e, 0x5a, 0xb5, 0xbb, 0x47, 0xab, + 0x76, 0xff, 0x68, 0xd5, 0x7e, 0x5d, 0x5a, 0xc6, 0xed, 0xd2, 0x32, 0xee, 0x96, 0x96, 0x71, 0xbf, + 0xb4, 0x8c, 0x7f, 0x96, 0x96, 0xf1, 0xc7, 0xbf, 0x56, 0xed, 0xbb, 0xb6, 0x2e, 0xd3, 0xff, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xdb, 0x8a, 0xe4, 0xd8, 0x21, 0x08, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/networking/v1beta1/generated.proto b/vendor/k8s.io/api/networking/v1beta1/generated.proto new file mode 100644 index 00000000000..7df19138e24 --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/generated.proto @@ -0,0 +1,186 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.networking.v1beta1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +message HTTPIngressPath { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + // +optional + optional string path = 1; + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + optional IngressBackend backend = 2; +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +message HTTPIngressRuleValue { + // A collection of paths that map requests to backends. + repeated HTTPIngressPath paths = 1; +} + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +message Ingress { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec is the desired state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional IngressSpec spec = 2; + + // Status is the current state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional IngressStatus status = 3; +} + +// IngressBackend describes all endpoints for a given service and port. +message IngressBackend { + // Specifies the name of the referenced service. + optional string serviceName = 1; + + // Specifies the port of the referenced service. + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString servicePort = 2; +} + +// IngressList is a collection of Ingress. +message IngressList { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of Ingress. + repeated Ingress items = 2; +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +message IngressRule { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + // +optional + optional string host = 1; + + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + // +optional + optional IngressRuleValue ingressRuleValue = 2; +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +message IngressRuleValue { + // +optional + optional HTTPIngressRuleValue http = 1; +} + +// IngressSpec describes the Ingress the user wishes to exist. +message IngressSpec { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + // +optional + optional IngressBackend backend = 1; + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + // +optional + repeated IngressTLS tls = 2; + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + // +optional + repeated IngressRule rules = 3; +} + +// IngressStatus describe the current state of the Ingress. +message IngressStatus { + // LoadBalancer contains the current status of the load-balancer. + // +optional + optional k8s.io.api.core.v1.LoadBalancerStatus loadBalancer = 1; +} + +// IngressTLS describes the transport layer security associated with an Ingress. +message IngressTLS { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + // +optional + repeated string hosts = 1; + + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + // +optional + optional string secretName = 2; +} + diff --git a/vendor/k8s.io/api/networking/v1beta1/register.go b/vendor/k8s.io/api/networking/v1beta1/register.go new file mode 100644 index 00000000000..c046c49012c --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/register.go @@ -0,0 +1,56 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "networking.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder holds functions that add things to a scheme + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + + // AddToScheme adds the types of this group into the given scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Ingress{}, + &IngressList{}, + ) + // Add the watch version that applies + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/networking/v1beta1/types.go b/vendor/k8s.io/api/networking/v1beta1/types.go new file mode 100644 index 00000000000..63bf2d52a3d --- /dev/null +++ b/vendor/k8s.io/api/networking/v1beta1/types.go @@ -0,0 +1,192 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +type Ingress struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec is the desired state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status is the current state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IngressList is a collection of Ingress. +type IngressList struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of Ingress. + Items []Ingress `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// IngressSpec describes the Ingress the user wishes to exist. +type IngressSpec struct { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + // +optional + Backend *IngressBackend `json:"backend,omitempty" protobuf:"bytes,1,opt,name=backend"` + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + // +optional + TLS []IngressTLS `json:"tls,omitempty" protobuf:"bytes,2,rep,name=tls"` + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + // +optional + Rules []IngressRule `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"` + // TODO: Add the ability to specify load-balancer IP through claims +} + +// IngressTLS describes the transport layer security associated with an Ingress. +type IngressTLS struct { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + // +optional + Hosts []string `json:"hosts,omitempty" protobuf:"bytes,1,rep,name=hosts"` + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + // +optional + SecretName string `json:"secretName,omitempty" protobuf:"bytes,2,opt,name=secretName"` + // TODO: Consider specifying different modes of termination, protocols etc. +} + +// IngressStatus describe the current state of the Ingress. +type IngressStatus struct { + // LoadBalancer contains the current status of the load-balancer. + // +optional + LoadBalancer v1.LoadBalancerStatus `json:"loadBalancer,omitempty" protobuf:"bytes,1,opt,name=loadBalancer"` +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +type IngressRule struct { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + // +optional + Host string `json:"host,omitempty" protobuf:"bytes,1,opt,name=host"` + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + // +optional + IngressRuleValue `json:",inline,omitempty" protobuf:"bytes,2,opt,name=ingressRuleValue"` +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +type IngressRuleValue struct { + //TODO: + // 1. Consider renaming this resource and the associated rules so they + // aren't tied to Ingress. They can be used to route intra-cluster traffic. + // 2. Consider adding fields for ingress-type specific global options + // usable by a loadbalancer, like http keep-alive. + + // +optional + HTTP *HTTPIngressRuleValue `json:"http,omitempty" protobuf:"bytes,1,opt,name=http"` +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +type HTTPIngressRuleValue struct { + // A collection of paths that map requests to backends. + Paths []HTTPIngressPath `json:"paths" protobuf:"bytes,1,rep,name=paths"` + // TODO: Consider adding fields for ingress-type specific global + // options usable by a loadbalancer, like http keep-alive. +} + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +type HTTPIngressPath struct { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + // +optional + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + Backend IngressBackend `json:"backend" protobuf:"bytes,2,opt,name=backend"` +} + +// IngressBackend describes all endpoints for a given service and port. +type IngressBackend struct { + // Specifies the name of the referenced service. + ServiceName string `json:"serviceName" protobuf:"bytes,1,opt,name=serviceName"` + + // Specifies the port of the referenced service. + ServicePort intstr.IntOrString `json:"servicePort" protobuf:"bytes,2,opt,name=servicePort"` +} diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go similarity index 56% rename from vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/zz_generated.deepcopy.go rename to vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go index 915ef995a01..6342c985c87 100644 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go @@ -18,137 +18,52 @@ limitations under the License. // Code generated by deepcopy-gen. DO NOT EDIT. -package v1alpha1 +package v1beta1 import ( runtime "k8s.io/apimachinery/pkg/runtime" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIDriver) DeepCopyInto(out *CSIDriver) { +func (in *HTTPIngressPath) DeepCopyInto(out *HTTPIngressPath) { *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) + out.Backend = in.Backend return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriver. -func (in *CSIDriver) DeepCopy() *CSIDriver { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressPath. +func (in *HTTPIngressPath) DeepCopy() *HTTPIngressPath { if in == nil { return nil } - out := new(CSIDriver) + out := new(HTTPIngressPath) in.DeepCopyInto(out) return out } -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CSIDriver) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIDriverInfoSpec) DeepCopyInto(out *CSIDriverInfoSpec) { +func (in *HTTPIngressRuleValue) DeepCopyInto(out *HTTPIngressRuleValue) { *out = *in - if in.TopologyKeys != nil { - in, out := &in.TopologyKeys, &out.TopologyKeys - *out = make([]string, len(*in)) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) copy(*out, *in) } return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverInfoSpec. -func (in *CSIDriverInfoSpec) DeepCopy() *CSIDriverInfoSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressRuleValue. +func (in *HTTPIngressRuleValue) DeepCopy() *HTTPIngressRuleValue { if in == nil { return nil } - out := new(CSIDriverInfoSpec) + out := new(HTTPIngressRuleValue) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIDriverInfoStatus) DeepCopyInto(out *CSIDriverInfoStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverInfoStatus. -func (in *CSIDriverInfoStatus) DeepCopy() *CSIDriverInfoStatus { - if in == nil { - return nil - } - out := new(CSIDriverInfoStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIDriverList) DeepCopyInto(out *CSIDriverList) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]CSIDriver, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverList. -func (in *CSIDriverList) DeepCopy() *CSIDriverList { - if in == nil { - return nil - } - out := new(CSIDriverList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CSIDriverList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIDriverSpec) DeepCopyInto(out *CSIDriverSpec) { - *out = *in - if in.AttachRequired != nil { - in, out := &in.AttachRequired, &out.AttachRequired - *out = new(bool) - **out = **in - } - if in.PodInfoOnMountVersion != nil { - in, out := &in.PodInfoOnMountVersion, &out.PodInfoOnMountVersion - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverSpec. -func (in *CSIDriverSpec) DeepCopy() *CSIDriverSpec { - if in == nil { - return nil - } - out := new(CSIDriverSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSINodeInfo) DeepCopyInto(out *CSINodeInfo) { +func (in *Ingress) DeepCopyInto(out *Ingress) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) @@ -157,18 +72,18 @@ func (in *CSINodeInfo) DeepCopyInto(out *CSINodeInfo) { return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeInfo. -func (in *CSINodeInfo) DeepCopy() *CSINodeInfo { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { if in == nil { return nil } - out := new(CSINodeInfo) + out := new(Ingress) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CSINodeInfo) DeepCopyObject() runtime.Object { +func (in *Ingress) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -176,13 +91,30 @@ func (in *CSINodeInfo) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSINodeInfoList) DeepCopyInto(out *CSINodeInfoList) { +func (in *IngressBackend) DeepCopyInto(out *IngressBackend) { + *out = *in + out.ServicePort = in.ServicePort + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressBackend. +func (in *IngressBackend) DeepCopy() *IngressBackend { + if in == nil { + return nil + } + out := new(IngressBackend) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressList) DeepCopyInto(out *IngressList) { *out = *in out.TypeMeta = in.TypeMeta out.ListMeta = in.ListMeta if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]CSINodeInfo, len(*in)) + *out = make([]Ingress, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -190,18 +122,18 @@ func (in *CSINodeInfoList) DeepCopyInto(out *CSINodeInfoList) { return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeInfoList. -func (in *CSINodeInfoList) DeepCopy() *CSINodeInfoList { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressList. +func (in *IngressList) DeepCopy() *IngressList { if in == nil { return nil } - out := new(CSINodeInfoList) + out := new(IngressList) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CSINodeInfoList) DeepCopyObject() runtime.Object { +func (in *IngressList) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -209,11 +141,61 @@ func (in *CSINodeInfoList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSINodeInfoSpec) DeepCopyInto(out *CSINodeInfoSpec) { +func (in *IngressRule) DeepCopyInto(out *IngressRule) { *out = *in - if in.Drivers != nil { - in, out := &in.Drivers, &out.Drivers - *out = make([]CSIDriverInfoSpec, len(*in)) + in.IngressRuleValue.DeepCopyInto(&out.IngressRuleValue) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRule. +func (in *IngressRule) DeepCopy() *IngressRule { + if in == nil { + return nil + } + out := new(IngressRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressRuleValue) DeepCopyInto(out *IngressRuleValue) { + *out = *in + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRuleValue. +func (in *IngressRuleValue) DeepCopy() *IngressRuleValue { + if in == nil { + return nil + } + out := new(IngressRuleValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressSpec) DeepCopyInto(out *IngressSpec) { + *out = *in + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -221,33 +203,50 @@ func (in *CSINodeInfoSpec) DeepCopyInto(out *CSINodeInfoSpec) { return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeInfoSpec. -func (in *CSINodeInfoSpec) DeepCopy() *CSINodeInfoSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec. +func (in *IngressSpec) DeepCopy() *IngressSpec { if in == nil { return nil } - out := new(CSINodeInfoSpec) + out := new(IngressSpec) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSINodeInfoStatus) DeepCopyInto(out *CSINodeInfoStatus) { +func (in *IngressStatus) DeepCopyInto(out *IngressStatus) { *out = *in - if in.Drivers != nil { - in, out := &in.Drivers, &out.Drivers - *out = make([]CSIDriverInfoStatus, len(*in)) + in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressStatus. +func (in *IngressStatus) DeepCopy() *IngressStatus { + if in == nil { + return nil + } + out := new(IngressStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressTLS) DeepCopyInto(out *IngressTLS) { + *out = *in + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) copy(*out, *in) } return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeInfoStatus. -func (in *CSINodeInfoStatus) DeepCopy() *CSINodeInfoStatus { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressTLS. +func (in *IngressTLS) DeepCopy() *IngressTLS { if in == nil { return nil } - out := new(CSINodeInfoStatus) + out := new(IngressTLS) in.DeepCopyInto(out) return out } diff --git a/vendor/k8s.io/api/node/OWNERS b/vendor/k8s.io/api/node/OWNERS new file mode 100644 index 00000000000..d871b2832ce --- /dev/null +++ b/vendor/k8s.io/api/node/OWNERS @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# approval on api packages bubbles to api-approvers +reviewers: +- tallclair +- dchen1107 +- derekwaynecarr +labels: +- sig/node diff --git a/vendor/k8s.io/api/node/v1alpha1/BUILD b/vendor/k8s.io/api/node/v1alpha1/BUILD new file mode 100644 index 00000000000..4f8f496f616 --- /dev/null +++ b/vendor/k8s.io/api/node/v1alpha1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated.pb.go", + "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1", + importpath = "k8s.io/api/node/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/doc.go b/vendor/k8s.io/api/node/v1alpha1/doc.go similarity index 82% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/doc.go rename to vendor/k8s.io/api/node/v1alpha1/doc.go index a7492964ef2..f7f8b78b42a 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/doc.go +++ b/vendor/k8s.io/api/node/v1alpha1/doc.go @@ -15,6 +15,8 @@ limitations under the License. */ // +k8s:deepcopy-gen=package -// +k8s:conversion-gen=k8s.io/apiserver/pkg/apis/config +// +k8s:openapi-gen=true -package v1alpha1 // import "k8s.io/apiserver/pkg/apis/config/v1alpha1" +// +groupName=node.k8s.io + +package v1alpha1 // import "k8s.io/api/node/v1alpha1" diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.pb.go b/vendor/k8s.io/api/node/v1alpha1/generated.pb.go new file mode 100644 index 00000000000..16f5af92992 --- /dev/null +++ b/vendor/k8s.io/api/node/v1alpha1/generated.pb.go @@ -0,0 +1,696 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto + +/* + Package v1alpha1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto + + It has these top-level messages: + RuntimeClass + RuntimeClassList + RuntimeClassSpec +*/ +package v1alpha1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } +func (*RuntimeClass) ProtoMessage() {} +func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } +func (*RuntimeClassList) ProtoMessage() {} +func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *RuntimeClassSpec) Reset() { *m = RuntimeClassSpec{} } +func (*RuntimeClassSpec) ProtoMessage() {} +func (*RuntimeClassSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func init() { + proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1alpha1.RuntimeClass") + proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassList") + proto.RegisterType((*RuntimeClassSpec)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassSpec") +} +func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + return i, nil +} + +func (m *RuntimeClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n3, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *RuntimeClassSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeHandler))) + i += copy(dAtA[i:], m.RuntimeHandler) + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *RuntimeClass) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RuntimeClassList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RuntimeClassSpec) Size() (n int) { + var l int + _ = l + l = len(m.RuntimeHandler) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *RuntimeClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "RuntimeClassSpec", "RuntimeClassSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RuntimeClass", "RuntimeClass", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassSpec{`, + `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *RuntimeClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RuntimeClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 421 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x6b, 0xd4, 0x40, + 0x14, 0xc7, 0x33, 0xb5, 0x85, 0x75, 0x5a, 0x4b, 0xc9, 0x41, 0xc2, 0x1e, 0xa6, 0x65, 0x0f, 0x52, + 0x04, 0x67, 0xdc, 0x22, 0xe2, 0x49, 0x30, 0x5e, 0x14, 0x2b, 0x42, 0xbc, 0x89, 0x07, 0x27, 0xc9, + 0x33, 0x19, 0xb3, 0xc9, 0x0c, 0x99, 0x49, 0xc0, 0x9b, 0x1f, 0xc1, 0x2f, 0xa4, 0xe7, 0x3d, 0xf6, + 0xd8, 0x53, 0x71, 0xe3, 0x17, 0x91, 0x99, 0x64, 0xbb, 0xdb, 0x2e, 0xc5, 0xbd, 0xe5, 0xbd, 0xf9, + 0xff, 0x7f, 0xef, 0xfd, 0x5f, 0xf0, 0xab, 0xe2, 0x85, 0xa6, 0x42, 0xb2, 0xa2, 0x89, 0xa1, 0xae, + 0xc0, 0x80, 0x66, 0x2d, 0x54, 0xa9, 0xac, 0xd9, 0xf0, 0xc0, 0x95, 0x60, 0x95, 0x4c, 0x81, 0xb5, + 0x53, 0x3e, 0x53, 0x39, 0x9f, 0xb2, 0x0c, 0x2a, 0xa8, 0xb9, 0x81, 0x94, 0xaa, 0x5a, 0x1a, 0xe9, + 0x07, 0xbd, 0x92, 0x72, 0x25, 0xa8, 0x55, 0xd2, 0xa5, 0x72, 0xfc, 0x24, 0x13, 0x26, 0x6f, 0x62, + 0x9a, 0xc8, 0x92, 0x65, 0x32, 0x93, 0xcc, 0x19, 0xe2, 0xe6, 0xab, 0xab, 0x5c, 0xe1, 0xbe, 0x7a, + 0xd0, 0xf8, 0xd9, 0x6a, 0x64, 0xc9, 0x93, 0x5c, 0x54, 0x50, 0x7f, 0x67, 0xaa, 0xc8, 0x6c, 0x43, + 0xb3, 0x12, 0x0c, 0x67, 0xed, 0xc6, 0xf8, 0x31, 0xbb, 0xcb, 0x55, 0x37, 0x95, 0x11, 0x25, 0x6c, + 0x18, 0x9e, 0xff, 0xcf, 0xa0, 0x93, 0x1c, 0x4a, 0x7e, 0xdb, 0x37, 0xf9, 0x8d, 0xf0, 0x41, 0xd4, + 0x4b, 0x5e, 0xcf, 0xb8, 0xd6, 0xfe, 0x17, 0x3c, 0xb2, 0x4b, 0xa5, 0xdc, 0xf0, 0x00, 0x9d, 0xa0, + 0xd3, 0xfd, 0xb3, 0xa7, 0x74, 0x75, 0x8b, 0x6b, 0x36, 0x55, 0x45, 0x66, 0x1b, 0x9a, 0x5a, 0x35, + 0x6d, 0xa7, 0xf4, 0x43, 0xfc, 0x0d, 0x12, 0xf3, 0x1e, 0x0c, 0x0f, 0xfd, 0xf9, 0xd5, 0xb1, 0xd7, + 0x5d, 0x1d, 0xe3, 0x55, 0x2f, 0xba, 0xa6, 0xfa, 0xe7, 0x78, 0x57, 0x2b, 0x48, 0x82, 0x1d, 0x47, + 0x7f, 0x4c, 0xef, 0xba, 0x34, 0x5d, 0xdf, 0xeb, 0xa3, 0x82, 0x24, 0x3c, 0x18, 0xb8, 0xbb, 0xb6, + 0x8a, 0x1c, 0x65, 0xf2, 0x0b, 0xe1, 0xa3, 0x75, 0xe1, 0xb9, 0xd0, 0xc6, 0xff, 0xbc, 0x11, 0x82, + 0x6e, 0x17, 0xc2, 0xba, 0x5d, 0x84, 0xa3, 0x61, 0xd4, 0x68, 0xd9, 0x59, 0x0b, 0xf0, 0x0e, 0xef, + 0x09, 0x03, 0xa5, 0x0e, 0x76, 0x4e, 0xee, 0x9d, 0xee, 0x9f, 0x3d, 0xda, 0x2e, 0x41, 0xf8, 0x60, + 0x40, 0xee, 0xbd, 0xb5, 0xe6, 0xa8, 0x67, 0x4c, 0xa2, 0x9b, 0xeb, 0xdb, 0x64, 0xfe, 0x4b, 0x7c, + 0x38, 0xfc, 0xb6, 0x37, 0xbc, 0x4a, 0x67, 0x50, 0xbb, 0x10, 0xf7, 0xc3, 0x87, 0x03, 0xe1, 0x30, + 0xba, 0xf1, 0x1a, 0xdd, 0x52, 0x87, 0x74, 0xbe, 0x20, 0xde, 0xc5, 0x82, 0x78, 0x97, 0x0b, 0xe2, + 0xfd, 0xe8, 0x08, 0x9a, 0x77, 0x04, 0x5d, 0x74, 0x04, 0x5d, 0x76, 0x04, 0xfd, 0xe9, 0x08, 0xfa, + 0xf9, 0x97, 0x78, 0x9f, 0x46, 0xcb, 0x35, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x94, 0x34, 0x0e, + 0xef, 0x30, 0x03, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.proto b/vendor/k8s.io/api/node/v1alpha1/generated.proto new file mode 100644 index 00000000000..ca4e5e53506 --- /dev/null +++ b/vendor/k8s.io/api/node/v1alpha1/generated.proto @@ -0,0 +1,76 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.node.v1alpha1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1alpha1"; + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +message RuntimeClass { + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the RuntimeClass + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + optional RuntimeClassSpec spec = 2; +} + +// RuntimeClassList is a list of RuntimeClass objects. +message RuntimeClassList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated RuntimeClass items = 2; +} + +// RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters +// that are required to describe the RuntimeClass to the Container Runtime +// Interface (CRI) implementation, as well as any other components that need to +// understand how the pod will be run. The RuntimeClassSpec is immutable. +message RuntimeClassSpec { + // RuntimeHandler specifies the underlying runtime and configuration that the + // CRI implementation will use to handle pods of this class. The possible + // values are specific to the node & CRI configuration. It is assumed that + // all handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements + // and is immutable. + optional string runtimeHandler = 1; +} + diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/register.go b/vendor/k8s.io/api/node/v1alpha1/register.go similarity index 69% rename from vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/register.go rename to vendor/k8s.io/api/node/v1alpha1/register.go index b2ffe63ab2b..b6082142a2a 100644 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/register.go +++ b/vendor/k8s.io/api/node/v1alpha1/register.go @@ -22,16 +22,8 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -const ( - // GroupName is the group name use in this package - GroupName string = "csi.storage.k8s.io" - - // CsiDriverResourcePlural is the plural name of the CSIDriver resource - CsiDriverResourcePlural string = "csidrivers" - - // CsiNodeInfoResourcePlural is the plural name of the CSINode resource - CsiNodeInfoResourcePlural string = "csinodeinfos" -) +// GroupName is the group name use in this package +const GroupName = "node.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} @@ -42,19 +34,17 @@ func Resource(resource string) schema.GroupResource { } var ( - // SchemeBuilder collects schemas to build. + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - // AddToScheme is used by generated client to add this scheme to the generated client. + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme AddToScheme = SchemeBuilder.AddToScheme ) -// Adds the list of known types to the given scheme. +// addKnownTypes adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, - &CSIDriver{}, - &CSIDriverList{}, - &CSINodeInfo{}, - &CSINodeInfoList{}, + &RuntimeClass{}, + &RuntimeClassList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff --git a/vendor/k8s.io/api/node/v1alpha1/types.go b/vendor/k8s.io/api/node/v1alpha1/types.go new file mode 100644 index 00000000000..2ce67c116fc --- /dev/null +++ b/vendor/k8s.io/api/node/v1alpha1/types.go @@ -0,0 +1,75 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +type RuntimeClass struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the RuntimeClass + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + Spec RuntimeClassSpec `json:"spec" protobuf:"bytes,2,name=spec"` +} + +// RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters +// that are required to describe the RuntimeClass to the Container Runtime +// Interface (CRI) implementation, as well as any other components that need to +// understand how the pod will be run. The RuntimeClassSpec is immutable. +type RuntimeClassSpec struct { + // RuntimeHandler specifies the underlying runtime and configuration that the + // CRI implementation will use to handle pods of this class. The possible + // values are specific to the node & CRI configuration. It is assumed that + // all handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements + // and is immutable. + RuntimeHandler string `json:"runtimeHandler" protobuf:"bytes,1,opt,name=runtimeHandler"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClassList is a list of RuntimeClass objects. +type RuntimeClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []RuntimeClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..0d63110b3b0 --- /dev/null +++ b/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,101 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClass. +func (in *RuntimeClass) DeepCopy() *RuntimeClass { + if in == nil { + return nil + } + out := new(RuntimeClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassList) DeepCopyInto(out *RuntimeClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RuntimeClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassList. +func (in *RuntimeClassList) DeepCopy() *RuntimeClassList { + if in == nil { + return nil + } + out := new(RuntimeClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassSpec) DeepCopyInto(out *RuntimeClassSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassSpec. +func (in *RuntimeClassSpec) DeepCopy() *RuntimeClassSpec { + if in == nil { + return nil + } + out := new(RuntimeClassSpec) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/BUILD b/vendor/k8s.io/api/node/v1beta1/BUILD similarity index 75% rename from vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/BUILD rename to vendor/k8s.io/api/node/v1beta1/BUILD index 445e43c5ba6..5ae9e598dac 100644 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/BUILD +++ b/vendor/k8s.io/api/node/v1beta1/BUILD @@ -4,17 +4,20 @@ go_library( name = "go_default_library", srcs = [ "doc.go", + "generated.pb.go", "register.go", "types.go", + "types_swagger_doc_generated.go", "zz_generated.deepcopy.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1", - importpath = "k8s.io/csi-api/pkg/apis/csi/v1alpha1", + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1", + importpath = "k8s.io/api/node/v1beta1", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", ], ) diff --git a/vendor/k8s.io/api/node/v1beta1/doc.go b/vendor/k8s.io/api/node/v1beta1/doc.go new file mode 100644 index 00000000000..0e8338cf7ab --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:openapi-gen=true + +// +groupName=node.k8s.io + +package v1beta1 // import "k8s.io/api/node/v1beta1" diff --git a/vendor/k8s.io/api/node/v1beta1/generated.pb.go b/vendor/k8s.io/api/node/v1beta1/generated.pb.go new file mode 100644 index 00000000000..27251a8a892 --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/generated.pb.go @@ -0,0 +1,564 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto + + It has these top-level messages: + RuntimeClass + RuntimeClassList +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } +func (*RuntimeClass) ProtoMessage() {} +func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } +func (*RuntimeClassList) ProtoMessage() {} +func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func init() { + proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1beta1.RuntimeClass") + proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1beta1.RuntimeClassList") +} +func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Handler))) + i += copy(dAtA[i:], m.Handler) + return i, nil +} + +func (m *RuntimeClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n2, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *RuntimeClass) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Handler) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RuntimeClassList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *RuntimeClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Handler:` + fmt.Sprintf("%v", this.Handler) + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RuntimeClass", "RuntimeClass", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *RuntimeClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Handler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Handler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RuntimeClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 389 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x6a, 0xdb, 0x40, + 0x14, 0x85, 0x35, 0x2e, 0xc6, 0xae, 0xdc, 0x52, 0xa3, 0x4d, 0x8d, 0x17, 0x63, 0x63, 0x28, 0xb8, + 0x0b, 0xcf, 0xd4, 0xa6, 0x94, 0x2e, 0x8b, 0xba, 0x69, 0x4b, 0x4b, 0x41, 0xcb, 0x90, 0x45, 0x46, + 0xd2, 0x8d, 0x34, 0x91, 0xa5, 0x11, 0x9a, 0x91, 0x20, 0xbb, 0x3c, 0x42, 0xf6, 0x79, 0x95, 0x3c, + 0x80, 0x97, 0x5e, 0x7a, 0x65, 0x62, 0xe5, 0x45, 0x82, 0x7e, 0xfc, 0x43, 0x8c, 0x49, 0x76, 0xba, + 0xe7, 0x9e, 0x73, 0xee, 0x87, 0x18, 0xfd, 0x47, 0xf0, 0x5d, 0x12, 0x2e, 0x68, 0x90, 0xda, 0x90, + 0x44, 0xa0, 0x40, 0xd2, 0x0c, 0x22, 0x57, 0x24, 0xb4, 0x5e, 0xb0, 0x98, 0xd3, 0x48, 0xb8, 0x40, + 0xb3, 0xa9, 0x0d, 0x8a, 0x4d, 0xa9, 0x07, 0x11, 0x24, 0x4c, 0x81, 0x4b, 0xe2, 0x44, 0x28, 0x61, + 0x7c, 0xac, 0x8c, 0x84, 0xc5, 0x9c, 0x14, 0x46, 0x52, 0x1b, 0xfb, 0x13, 0x8f, 0x2b, 0x3f, 0xb5, + 0x89, 0x23, 0x42, 0xea, 0x09, 0x4f, 0xd0, 0xd2, 0x6f, 0xa7, 0x97, 0xe5, 0x54, 0x0e, 0xe5, 0x57, + 0xd5, 0xd3, 0xff, 0xba, 0x3f, 0x18, 0x32, 0xc7, 0xe7, 0x11, 0x24, 0xd7, 0x34, 0x0e, 0xbc, 0x42, + 0x90, 0x34, 0x04, 0xc5, 0x68, 0x76, 0x74, 0xbd, 0x4f, 0x4f, 0xa5, 0x92, 0x34, 0x52, 0x3c, 0x84, + 0xa3, 0xc0, 0xb7, 0x97, 0x02, 0xd2, 0xf1, 0x21, 0x64, 0xcf, 0x73, 0xa3, 0x3b, 0xa4, 0xbf, 0xb3, + 0x2a, 0xcb, 0xcf, 0x39, 0x93, 0xd2, 0xb8, 0xd0, 0xdb, 0x05, 0x94, 0xcb, 0x14, 0xeb, 0xa1, 0x21, + 0x1a, 0x77, 0x66, 0x5f, 0xc8, 0xfe, 0x57, 0xec, 0xba, 0x49, 0x1c, 0x78, 0x85, 0x20, 0x49, 0xe1, + 0x26, 0xd9, 0x94, 0xfc, 0xb7, 0xaf, 0xc0, 0x51, 0xff, 0x40, 0x31, 0xd3, 0x58, 0xac, 0x07, 0x5a, + 0xbe, 0x1e, 0xe8, 0x7b, 0xcd, 0xda, 0xb5, 0x1a, 0x9f, 0xf5, 0x96, 0xcf, 0x22, 0x77, 0x0e, 0x49, + 0xaf, 0x31, 0x44, 0xe3, 0xb7, 0xe6, 0x87, 0xda, 0xde, 0xfa, 0x55, 0xc9, 0xd6, 0x76, 0x3f, 0xba, + 0x47, 0x7a, 0xf7, 0x90, 0xee, 0x2f, 0x97, 0xca, 0x38, 0x3f, 0x22, 0x24, 0xaf, 0x23, 0x2c, 0xd2, + 0x25, 0x5f, 0xb7, 0x3e, 0xd8, 0xde, 0x2a, 0x07, 0x74, 0x7f, 0xf4, 0x26, 0x57, 0x10, 0xca, 0x5e, + 0x63, 0xf8, 0x66, 0xdc, 0x99, 0x7d, 0x22, 0x27, 0xde, 0x01, 0x39, 0xe4, 0x32, 0xdf, 0xd7, 0x8d, + 0xcd, 0xdf, 0x45, 0xd6, 0xaa, 0x2a, 0xcc, 0xc9, 0x62, 0x83, 0xb5, 0xe5, 0x06, 0x6b, 0xab, 0x0d, + 0xd6, 0x6e, 0x72, 0x8c, 0x16, 0x39, 0x46, 0xcb, 0x1c, 0xa3, 0x55, 0x8e, 0xd1, 0x43, 0x8e, 0xd1, + 0xed, 0x23, 0xd6, 0xce, 0x5a, 0x75, 0xe3, 0x53, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x68, 0xe5, + 0x0d, 0xb5, 0x02, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/node/v1beta1/generated.proto b/vendor/k8s.io/api/node/v1beta1/generated.proto new file mode 100644 index 00000000000..9082fbd3344 --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/generated.proto @@ -0,0 +1,66 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.node.v1beta1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +message RuntimeClass { + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Handler specifies the underlying runtime and configuration that the CRI + // implementation will use to handle pods of this class. The possible values + // are specific to the node & CRI configuration. It is assumed that all + // handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The Handler must conform to the DNS Label (RFC 1123) requirements, and is + // immutable. + optional string handler = 2; +} + +// RuntimeClassList is a list of RuntimeClass objects. +message RuntimeClassList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated RuntimeClass items = 2; +} + diff --git a/vendor/k8s.io/api/node/v1beta1/register.go b/vendor/k8s.io/api/node/v1beta1/register.go new file mode 100644 index 00000000000..3c3b61ba40c --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/register.go @@ -0,0 +1,52 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = SchemeBuilder.AddToScheme +) + +// addKnownTypes adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &RuntimeClass{}, + &RuntimeClassList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/node/v1beta1/types.go b/vendor/k8s.io/api/node/v1beta1/types.go new file mode 100644 index 00000000000..993c6e50660 --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/types.go @@ -0,0 +1,65 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +type RuntimeClass struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Handler specifies the underlying runtime and configuration that the CRI + // implementation will use to handle pods of this class. The possible values + // are specific to the node & CRI configuration. It is assumed that all + // handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The Handler must conform to the DNS Label (RFC 1123) requirements, and is + // immutable. + Handler string `json:"handler" protobuf:"bytes,2,opt,name=handler"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClassList is a list of RuntimeClass objects. +type RuntimeClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []RuntimeClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..98b5d480af4 --- /dev/null +++ b/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,84 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClass. +func (in *RuntimeClass) DeepCopy() *RuntimeClass { + if in == nil { + return nil + } + out := new(RuntimeClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassList) DeepCopyInto(out *RuntimeClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RuntimeClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassList. +func (in *RuntimeClassList) DeepCopy() *RuntimeClassList { + if in == nil { + return nil + } + out := new(RuntimeClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/k8s.io/api/policy/OWNERS b/vendor/k8s.io/api/policy/OWNERS old mode 100755 new mode 100644 index 61a5da4cf3e..8d0776d605a --- a/vendor/k8s.io/api/policy/OWNERS +++ b/vendor/k8s.io/api/policy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-apps-reviewers diff --git a/vendor/k8s.io/api/policy/v1beta1/doc.go b/vendor/k8s.io/api/policy/v1beta1/doc.go index 74611c6ba5d..05d8332f807 100644 --- a/vendor/k8s.io/api/policy/v1beta1/doc.go +++ b/vendor/k8s.io/api/policy/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // Package policy is for any kind of policy object. Suitable examples, even if diff --git a/vendor/k8s.io/api/policy/v1beta1/generated.pb.go b/vendor/k8s.io/api/policy/v1beta1/generated.pb.go index d122fcfda12..deeeac69611 100644 --- a/vendor/k8s.io/api/policy/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/policy/v1beta1/generated.pb.go @@ -24,6 +24,7 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/policy/v1beta1/generated.proto It has these top-level messages: + AllowedCSIDriver AllowedFlexVolume AllowedHostPath Eviction @@ -71,83 +72,88 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +func (m *AllowedCSIDriver) Reset() { *m = AllowedCSIDriver{} } +func (*AllowedCSIDriver) ProtoMessage() {} +func (*AllowedCSIDriver) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } func (*AllowedFlexVolume) ProtoMessage() {} -func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } func (*AllowedHostPath) ProtoMessage() {} -func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } func (m *Eviction) Reset() { *m = Eviction{} } func (*Eviction) ProtoMessage() {} -func (*Eviction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*Eviction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } func (*FSGroupStrategyOptions) ProtoMessage() {} -func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } func (m *HostPortRange) Reset() { *m = HostPortRange{} } func (*HostPortRange) ProtoMessage() {} -func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } func (m *IDRange) Reset() { *m = IDRange{} } func (*IDRange) ProtoMessage() {} -func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } func (*PodDisruptionBudget) ProtoMessage() {} -func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } func (*PodDisruptionBudgetList) ProtoMessage() {} -func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } func (*PodDisruptionBudgetSpec) ProtoMessage() {} -func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } func (*PodDisruptionBudgetStatus) ProtoMessage() {} func (*PodDisruptionBudgetStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{9} + return fileDescriptorGenerated, []int{10} } func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } func (*RunAsGroupStrategyOptions) ProtoMessage() {} func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{13} + return fileDescriptorGenerated, []int{14} } func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } func (*RunAsUserStrategyOptions) ProtoMessage() {} func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{14} + return fileDescriptorGenerated, []int{15} } func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{16} + return fileDescriptorGenerated, []int{17} } func init() { + proto.RegisterType((*AllowedCSIDriver)(nil), "k8s.io.api.policy.v1beta1.AllowedCSIDriver") proto.RegisterType((*AllowedFlexVolume)(nil), "k8s.io.api.policy.v1beta1.AllowedFlexVolume") proto.RegisterType((*AllowedHostPath)(nil), "k8s.io.api.policy.v1beta1.AllowedHostPath") proto.RegisterType((*Eviction)(nil), "k8s.io.api.policy.v1beta1.Eviction") @@ -166,6 +172,28 @@ func init() { proto.RegisterType((*SELinuxStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SELinuxStrategyOptions") proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SupplementalGroupsStrategyOptions") } +func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowedCSIDriver) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + return i, nil +} + func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -872,6 +900,20 @@ func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { } i += n18 } + if len(m.AllowedCSIDrivers) > 0 { + for _, msg := range m.AllowedCSIDrivers { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } @@ -1018,6 +1060,14 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } +func (m *AllowedCSIDriver) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *AllowedFlexVolume) Size() (n int) { var l int _ = l @@ -1251,6 +1301,12 @@ func (m *PodSecurityPolicySpec) Size() (n int) { l = m.RunAsGroup.Size() n += 2 + l + sovGenerated(uint64(l)) } + if len(m.AllowedCSIDrivers) > 0 { + for _, e := range m.AllowedCSIDrivers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -1321,6 +1377,16 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *AllowedCSIDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AllowedCSIDriver{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func (this *AllowedFlexVolume) String() string { if this == nil { return "nil" @@ -1495,6 +1561,7 @@ func (this *PodSecurityPolicySpec) String() string { `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, `AllowedProcMountTypes:` + fmt.Sprintf("%v", this.AllowedProcMountTypes) + `,`, `RunAsGroup:` + strings.Replace(fmt.Sprintf("%v", this.RunAsGroup), "RunAsGroupStrategyOptions", "RunAsGroupStrategyOptions", 1) + `,`, + `AllowedCSIDrivers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedCSIDrivers), "AllowedCSIDriver", "AllowedCSIDriver", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -1551,6 +1618,85 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } +func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedCSIDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedCSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3637,6 +3783,37 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCSIDrivers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedCSIDrivers = append(m.AllowedCSIDrivers, AllowedCSIDriver{}) + if err := m.AllowedCSIDrivers[len(m.AllowedCSIDrivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -4210,115 +4387,119 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 1756 bytes of a gzipped FileDescriptorProto + // 1809 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x8e, 0xdb, 0xc6, - 0x15, 0x5e, 0x5a, 0xfb, 0xa3, 0x9d, 0xfd, 0x9f, 0xfd, 0x29, 0xbd, 0xa8, 0x45, 0x47, 0x01, 0x0a, - 0x37, 0x48, 0xa8, 0x78, 0x9d, 0xa4, 0x46, 0xd3, 0x16, 0x59, 0x5a, 0xbb, 0xf6, 0x06, 0xde, 0xae, - 0x3a, 0xb2, 0x83, 0xb6, 0x70, 0x8b, 0x8e, 0xc4, 0x59, 0xed, 0x64, 0x29, 0x92, 0x9d, 0x19, 0x2a, - 0xab, 0xbb, 0x5e, 0xf4, 0xa2, 0x97, 0x7d, 0x81, 0xa0, 0x0f, 0x50, 0xf4, 0xaa, 0x2f, 0xe1, 0x02, - 0x45, 0x91, 0xcb, 0xa0, 0x17, 0x42, 0xad, 0x22, 0x2f, 0xe1, 0xab, 0x80, 0xa3, 0x21, 0x25, 0xfe, - 0x49, 0x5e, 0x03, 0xf6, 0x1d, 0x39, 0xe7, 0xfb, 0xbe, 0x73, 0xe6, 0xcc, 0x99, 0x33, 0x43, 0x02, - 0xeb, 0xf2, 0x3e, 0x37, 0xa9, 0x57, 0xbb, 0x0c, 0x5a, 0x84, 0xb9, 0x44, 0x10, 0x5e, 0xeb, 0x11, - 0xd7, 0xf6, 0x58, 0x4d, 0x19, 0xb0, 0x4f, 0x6b, 0xbe, 0xe7, 0xd0, 0x76, 0xbf, 0xd6, 0xbb, 0xdb, - 0x22, 0x02, 0xdf, 0xad, 0x75, 0x88, 0x4b, 0x18, 0x16, 0xc4, 0x36, 0x7d, 0xe6, 0x09, 0x0f, 0xde, - 0x1c, 0x41, 0x4d, 0xec, 0x53, 0x73, 0x04, 0x35, 0x15, 0x74, 0xff, 0x83, 0x0e, 0x15, 0x17, 0x41, - 0xcb, 0x6c, 0x7b, 0xdd, 0x5a, 0xc7, 0xeb, 0x78, 0x35, 0xc9, 0x68, 0x05, 0xe7, 0xf2, 0x4d, 0xbe, - 0xc8, 0xa7, 0x91, 0xd2, 0x7e, 0x75, 0xc2, 0x69, 0xdb, 0x63, 0xa4, 0xd6, 0xcb, 0x78, 0xdb, 0xff, - 0x68, 0x8c, 0xe9, 0xe2, 0xf6, 0x05, 0x75, 0x09, 0xeb, 0xd7, 0xfc, 0xcb, 0x4e, 0x38, 0xc0, 0x6b, - 0x5d, 0x22, 0x70, 0x1e, 0xab, 0x56, 0xc4, 0x62, 0x81, 0x2b, 0x68, 0x97, 0x64, 0x08, 0x9f, 0xcc, - 0x22, 0xf0, 0xf6, 0x05, 0xe9, 0xe2, 0x0c, 0xef, 0x5e, 0x11, 0x2f, 0x10, 0xd4, 0xa9, 0x51, 0x57, - 0x70, 0xc1, 0xd2, 0xa4, 0xea, 0xa7, 0x60, 0xeb, 0xd0, 0x71, 0xbc, 0xaf, 0x88, 0x7d, 0xec, 0x90, - 0xab, 0x2f, 0x3c, 0x27, 0xe8, 0x12, 0xf8, 0x23, 0xb0, 0x68, 0x33, 0xda, 0x23, 0x4c, 0xd7, 0x6e, - 0x6b, 0x77, 0x96, 0xad, 0xf5, 0xe7, 0x03, 0x63, 0x6e, 0x38, 0x30, 0x16, 0xeb, 0x72, 0x14, 0x29, - 0x6b, 0x95, 0x83, 0x0d, 0x45, 0x7e, 0xe4, 0x71, 0xd1, 0xc0, 0xe2, 0x02, 0x1e, 0x00, 0xe0, 0x63, - 0x71, 0xd1, 0x60, 0xe4, 0x9c, 0x5e, 0x29, 0x3a, 0x54, 0x74, 0xd0, 0x88, 0x2d, 0x68, 0x02, 0x05, - 0xdf, 0x07, 0x65, 0x46, 0xb0, 0x7d, 0xe6, 0x3a, 0x7d, 0xfd, 0xc6, 0x6d, 0xed, 0x4e, 0xd9, 0xda, - 0x54, 0x8c, 0x32, 0x52, 0xe3, 0x28, 0x46, 0x54, 0xff, 0xab, 0x81, 0xf2, 0x51, 0x8f, 0xb6, 0x05, - 0xf5, 0x5c, 0xf8, 0x07, 0x50, 0x0e, 0xf3, 0x6e, 0x63, 0x81, 0xa5, 0xb3, 0x95, 0x83, 0x0f, 0xcd, - 0x71, 0x4d, 0xc4, 0x69, 0x30, 0xfd, 0xcb, 0x4e, 0x38, 0xc0, 0xcd, 0x10, 0x6d, 0xf6, 0xee, 0x9a, - 0x67, 0xad, 0x2f, 0x49, 0x5b, 0x9c, 0x12, 0x81, 0xc7, 0xe1, 0x8d, 0xc7, 0x50, 0xac, 0x0a, 0x1d, - 0xb0, 0x66, 0x13, 0x87, 0x08, 0x72, 0xe6, 0x87, 0x1e, 0xb9, 0x8c, 0x70, 0xe5, 0xe0, 0xde, 0xab, - 0xb9, 0xa9, 0x4f, 0x52, 0xad, 0xad, 0xe1, 0xc0, 0x58, 0x4b, 0x0c, 0xa1, 0xa4, 0x78, 0xf5, 0x6b, - 0x0d, 0xec, 0x1d, 0x37, 0x1f, 0x32, 0x2f, 0xf0, 0x9b, 0x22, 0x5c, 0xa7, 0x4e, 0x5f, 0x99, 0xe0, - 0x4f, 0xc0, 0x3c, 0x0b, 0x1c, 0xa2, 0x72, 0xfa, 0xae, 0x0a, 0x7a, 0x1e, 0x05, 0x0e, 0x79, 0x39, - 0x30, 0xb6, 0x53, 0xac, 0x27, 0x7d, 0x9f, 0x20, 0x49, 0x80, 0x9f, 0x83, 0x45, 0x86, 0xdd, 0x0e, - 0x09, 0x43, 0x2f, 0xdd, 0x59, 0x39, 0xa8, 0x9a, 0x85, 0xbb, 0xc6, 0x3c, 0xa9, 0xa3, 0x10, 0x3a, - 0x5e, 0x71, 0xf9, 0xca, 0x91, 0x52, 0xa8, 0x9e, 0x82, 0x35, 0xb9, 0xd4, 0x1e, 0x13, 0xd2, 0x02, - 0x6f, 0x81, 0x52, 0x97, 0xba, 0x32, 0xa8, 0x05, 0x6b, 0x45, 0xb1, 0x4a, 0xa7, 0xd4, 0x45, 0xe1, - 0xb8, 0x34, 0xe3, 0x2b, 0x99, 0xb3, 0x49, 0x33, 0xbe, 0x42, 0xe1, 0x78, 0xf5, 0x21, 0x58, 0x52, - 0x1e, 0x27, 0x85, 0x4a, 0xd3, 0x85, 0x4a, 0x39, 0x42, 0x7f, 0xbf, 0x01, 0xb6, 0x1b, 0x9e, 0x5d, - 0xa7, 0x9c, 0x05, 0x32, 0x5f, 0x56, 0x60, 0x77, 0x88, 0x78, 0x0b, 0xf5, 0xf1, 0x04, 0xcc, 0x73, - 0x9f, 0xb4, 0x55, 0x59, 0x1c, 0x4c, 0xc9, 0x6d, 0x4e, 0x7c, 0x4d, 0x9f, 0xb4, 0xad, 0xd5, 0x68, - 0x29, 0xc3, 0x37, 0x24, 0xd5, 0xe0, 0x33, 0xb0, 0xc8, 0x05, 0x16, 0x01, 0xd7, 0x4b, 0x52, 0xf7, - 0xa3, 0x6b, 0xea, 0x4a, 0xee, 0x78, 0x15, 0x47, 0xef, 0x48, 0x69, 0x56, 0xff, 0xad, 0x81, 0x1f, - 0xe4, 0xb0, 0x1e, 0x53, 0x2e, 0xe0, 0xb3, 0x4c, 0xc6, 0xcc, 0x57, 0xcb, 0x58, 0xc8, 0x96, 0xf9, - 0x8a, 0x37, 0x6f, 0x34, 0x32, 0x91, 0xad, 0x26, 0x58, 0xa0, 0x82, 0x74, 0xa3, 0x52, 0x34, 0xaf, - 0x37, 0x2d, 0x6b, 0x4d, 0x49, 0x2f, 0x9c, 0x84, 0x22, 0x68, 0xa4, 0x55, 0xfd, 0xcf, 0x8d, 0xdc, - 0xe9, 0x84, 0xe9, 0x84, 0xe7, 0x60, 0xb5, 0x4b, 0xdd, 0xc3, 0x1e, 0xa6, 0x0e, 0x6e, 0xa9, 0xdd, - 0x33, 0xad, 0x08, 0xc2, 0x5e, 0x69, 0x8e, 0x7a, 0xa5, 0x79, 0xe2, 0x8a, 0x33, 0xd6, 0x14, 0x8c, - 0xba, 0x1d, 0x6b, 0x73, 0x38, 0x30, 0x56, 0x4f, 0x27, 0x94, 0x50, 0x42, 0x17, 0xfe, 0x0e, 0x94, - 0x39, 0x71, 0x48, 0x5b, 0x78, 0xec, 0x7a, 0x1d, 0xe2, 0x31, 0x6e, 0x11, 0xa7, 0xa9, 0xa8, 0xd6, - 0x6a, 0x98, 0xb7, 0xe8, 0x0d, 0xc5, 0x92, 0xd0, 0x01, 0xeb, 0x5d, 0x7c, 0xf5, 0xd4, 0xc5, 0xf1, - 0x44, 0x4a, 0xaf, 0x39, 0x11, 0x38, 0x1c, 0x18, 0xeb, 0xa7, 0x09, 0x2d, 0x94, 0xd2, 0xae, 0x7e, - 0x37, 0x0f, 0x6e, 0x16, 0x56, 0x15, 0xfc, 0x1c, 0x40, 0xaf, 0xc5, 0x09, 0xeb, 0x11, 0xfb, 0xe1, - 0xe8, 0x34, 0xa1, 0x5e, 0xb4, 0x71, 0xf7, 0xd5, 0x02, 0xc1, 0xb3, 0x0c, 0x02, 0xe5, 0xb0, 0xe0, - 0x9f, 0x35, 0xb0, 0x66, 0x8f, 0xdc, 0x10, 0xbb, 0xe1, 0xd9, 0x51, 0x61, 0x3c, 0x7c, 0x9d, 0x7a, - 0x37, 0xeb, 0x93, 0x4a, 0x47, 0xae, 0x60, 0x7d, 0x6b, 0x57, 0x05, 0xb4, 0x96, 0xb0, 0xa1, 0xa4, - 0x53, 0x78, 0x0a, 0xa0, 0x1d, 0x4b, 0x72, 0x75, 0xa6, 0xc9, 0x14, 0x2f, 0x58, 0xb7, 0x94, 0xc2, - 0x6e, 0xc2, 0x6f, 0x04, 0x42, 0x39, 0x44, 0xf8, 0x0b, 0xb0, 0xde, 0x0e, 0x18, 0x23, 0xae, 0x78, - 0x44, 0xb0, 0x23, 0x2e, 0xfa, 0xfa, 0xbc, 0x94, 0xda, 0x53, 0x52, 0xeb, 0x0f, 0x12, 0x56, 0x94, - 0x42, 0x87, 0x7c, 0x9b, 0x70, 0xca, 0x88, 0x1d, 0xf1, 0x17, 0x92, 0xfc, 0x7a, 0xc2, 0x8a, 0x52, - 0x68, 0x78, 0x1f, 0xac, 0x92, 0x2b, 0x9f, 0xb4, 0xa3, 0x9c, 0x2e, 0x4a, 0xf6, 0x8e, 0x62, 0xaf, - 0x1e, 0x4d, 0xd8, 0x50, 0x02, 0xb9, 0xef, 0x00, 0x98, 0x4d, 0x22, 0xdc, 0x04, 0xa5, 0x4b, 0xd2, - 0x1f, 0x9d, 0x3c, 0x28, 0x7c, 0x84, 0x9f, 0x81, 0x85, 0x1e, 0x76, 0x02, 0xa2, 0x6a, 0xfd, 0xbd, - 0x57, 0xab, 0xf5, 0x27, 0xb4, 0x4b, 0xd0, 0x88, 0xf8, 0xd3, 0x1b, 0xf7, 0xb5, 0xea, 0xbf, 0x34, - 0xb0, 0xd5, 0xf0, 0xec, 0x26, 0x69, 0x07, 0x8c, 0x8a, 0x7e, 0x43, 0xae, 0xf3, 0x5b, 0xe8, 0xd9, - 0x28, 0xd1, 0xb3, 0x3f, 0x9c, 0x5e, 0x6b, 0xc9, 0xe8, 0x8a, 0x3a, 0x76, 0xf5, 0xb9, 0x06, 0x76, - 0x33, 0xe8, 0xb7, 0xd0, 0x51, 0x7f, 0x95, 0xec, 0xa8, 0xef, 0x5f, 0x67, 0x32, 0x05, 0xfd, 0xf4, - 0xbb, 0x8d, 0x9c, 0xa9, 0xc8, 0x6e, 0x1a, 0xde, 0xee, 0x18, 0xed, 0x51, 0x87, 0x74, 0x88, 0x2d, - 0x27, 0x53, 0x9e, 0xb8, 0xdd, 0xc5, 0x16, 0x34, 0x81, 0x82, 0x1c, 0xec, 0xd9, 0xe4, 0x1c, 0x07, - 0x8e, 0x38, 0xb4, 0xed, 0x07, 0xd8, 0xc7, 0x2d, 0xea, 0x50, 0x41, 0xd5, 0x75, 0x64, 0xd9, 0xfa, - 0x74, 0x38, 0x30, 0xf6, 0xea, 0xb9, 0x88, 0x97, 0x03, 0xe3, 0x56, 0xf6, 0x5e, 0x6e, 0xc6, 0x90, - 0x3e, 0x2a, 0x90, 0x86, 0x7d, 0xa0, 0x33, 0xf2, 0xc7, 0x20, 0xdc, 0x14, 0x75, 0xe6, 0xf9, 0x09, - 0xb7, 0x25, 0xe9, 0xf6, 0xe7, 0xc3, 0x81, 0xa1, 0xa3, 0x02, 0xcc, 0x6c, 0xc7, 0x85, 0xf2, 0xf0, - 0x4b, 0xb0, 0x8d, 0x47, 0x7d, 0x20, 0xe1, 0x75, 0x5e, 0x7a, 0xbd, 0x3f, 0x1c, 0x18, 0xdb, 0x87, - 0x59, 0xf3, 0x6c, 0x87, 0x79, 0xa2, 0xb0, 0x06, 0x96, 0x7a, 0xf2, 0xca, 0xce, 0xf5, 0x05, 0xa9, - 0xbf, 0x3b, 0x1c, 0x18, 0x4b, 0xa3, 0x5b, 0x7c, 0xa8, 0xb9, 0x78, 0xdc, 0x94, 0x17, 0xc1, 0x08, - 0x05, 0x3f, 0x06, 0x2b, 0x17, 0x1e, 0x17, 0xbf, 0x24, 0xe2, 0x2b, 0x8f, 0x5d, 0xca, 0xc6, 0x50, - 0xb6, 0xb6, 0xd5, 0x0a, 0xae, 0x3c, 0x1a, 0x9b, 0xd0, 0x24, 0x0e, 0xfe, 0x06, 0x2c, 0x5f, 0xa8, - 0x6b, 0x1f, 0xd7, 0x97, 0x64, 0xa1, 0xdd, 0x99, 0x52, 0x68, 0x89, 0x2b, 0xa2, 0xb5, 0xa5, 0xe4, - 0x97, 0xa3, 0x61, 0x8e, 0xc6, 0x6a, 0xf0, 0xc7, 0x60, 0x49, 0xbe, 0x9c, 0xd4, 0xf5, 0xb2, 0x8c, - 0x66, 0x43, 0xc1, 0x97, 0x1e, 0x8d, 0x86, 0x51, 0x64, 0x8f, 0xa0, 0x27, 0x8d, 0x07, 0xfa, 0x72, - 0x16, 0x7a, 0xd2, 0x78, 0x80, 0x22, 0x3b, 0x7c, 0x06, 0x96, 0x38, 0x79, 0x4c, 0xdd, 0xe0, 0x4a, - 0x07, 0x72, 0xcb, 0xdd, 0x9d, 0x12, 0x6e, 0xf3, 0x48, 0x22, 0x53, 0x17, 0xee, 0xb1, 0xba, 0xb2, - 0xa3, 0x48, 0x12, 0xda, 0x60, 0x99, 0x05, 0xee, 0x21, 0x7f, 0xca, 0x09, 0xd3, 0x57, 0x32, 0xa7, - 0x7d, 0x5a, 0x1f, 0x45, 0xd8, 0xb4, 0x87, 0x38, 0x33, 0x31, 0x02, 0x8d, 0x85, 0xe1, 0x5f, 0x34, - 0x00, 0x79, 0xe0, 0xfb, 0x0e, 0xe9, 0x12, 0x57, 0x60, 0x47, 0xde, 0xef, 0xb9, 0xbe, 0x2a, 0xfd, - 0xfd, 0x6c, 0xda, 0x7c, 0x32, 0xa4, 0xb4, 0xe3, 0xf8, 0x98, 0xce, 0x42, 0x51, 0x8e, 0xcf, 0x30, - 0x9d, 0xe7, 0x5c, 0x3e, 0xeb, 0x6b, 0x33, 0xd3, 0x99, 0xff, 0xfd, 0x32, 0x4e, 0xa7, 0xb2, 0xa3, - 0x48, 0x12, 0x7e, 0x01, 0xf6, 0xa2, 0xaf, 0x3b, 0xe4, 0x79, 0xe2, 0x98, 0x3a, 0x84, 0xf7, 0xb9, - 0x20, 0x5d, 0x7d, 0x5d, 0x2e, 0x73, 0x45, 0x31, 0xf7, 0x50, 0x2e, 0x0a, 0x15, 0xb0, 0x61, 0x17, - 0x18, 0x51, 0x7b, 0x08, 0xf7, 0x4e, 0xdc, 0x9f, 0x8e, 0x78, 0x1b, 0x3b, 0xa3, 0x5b, 0xcb, 0x86, - 0x74, 0xf0, 0xee, 0x70, 0x60, 0x18, 0xf5, 0xe9, 0x50, 0x34, 0x4b, 0x0b, 0xfe, 0x1a, 0xe8, 0xb8, - 0xc8, 0xcf, 0xa6, 0xf4, 0xf3, 0xc3, 0xb0, 0xe7, 0x14, 0x3a, 0x28, 0x64, 0x43, 0x1f, 0x6c, 0xe2, - 0xe4, 0x77, 0x36, 0xd7, 0xb7, 0xe4, 0x2e, 0x7c, 0x6f, 0xca, 0x3a, 0xa4, 0x3e, 0xcd, 0x2d, 0x5d, - 0xa5, 0x71, 0x33, 0x65, 0xe0, 0x28, 0xa3, 0x0e, 0xaf, 0x00, 0xc4, 0xe9, 0xdf, 0x02, 0x5c, 0x87, - 0x33, 0x8f, 0x98, 0xcc, 0xbf, 0x84, 0x71, 0xa9, 0x65, 0x4c, 0x1c, 0xe5, 0xf8, 0x80, 0x8f, 0xc1, - 0x8e, 0x1a, 0x7d, 0xea, 0x72, 0x7c, 0x4e, 0x9a, 0x7d, 0xde, 0x16, 0x0e, 0xd7, 0xb7, 0x65, 0x7f, - 0xd3, 0x87, 0x03, 0x63, 0xe7, 0x30, 0xc7, 0x8e, 0x72, 0x59, 0xf0, 0x33, 0xb0, 0x79, 0xee, 0xb1, - 0x16, 0xb5, 0x6d, 0xe2, 0x46, 0x4a, 0x3b, 0x52, 0x69, 0x27, 0xcc, 0xc4, 0x71, 0xca, 0x86, 0x32, - 0x68, 0xc8, 0xc1, 0xae, 0x52, 0x6e, 0x30, 0xaf, 0x7d, 0xea, 0x05, 0xae, 0x08, 0x5b, 0x2a, 0xd7, - 0x77, 0xe3, 0x63, 0x64, 0xf7, 0x30, 0x0f, 0xf0, 0x72, 0x60, 0xdc, 0xce, 0x69, 0xe9, 0x09, 0x10, - 0xca, 0xd7, 0x86, 0x36, 0x00, 0xb2, 0x0f, 0x8c, 0xb6, 0xdc, 0xde, 0xcc, 0x4f, 0x40, 0x14, 0x83, - 0xd3, 0xbb, 0x6e, 0x3d, 0x3c, 0x99, 0xc7, 0x66, 0x34, 0xa1, 0x5b, 0xfd, 0x9b, 0x06, 0x6e, 0x16, - 0x32, 0xe1, 0x27, 0x89, 0xff, 0x0d, 0xd5, 0xd4, 0xff, 0x06, 0x98, 0x25, 0xbe, 0x81, 0xdf, 0x0d, - 0x5f, 0x6b, 0x40, 0x2f, 0xea, 0x9e, 0xf0, 0xe3, 0x44, 0x80, 0xef, 0xa4, 0x02, 0xdc, 0xca, 0xf0, - 0xde, 0x40, 0x7c, 0xff, 0xd0, 0xc0, 0x5e, 0xfe, 0xe9, 0x01, 0xef, 0x25, 0xa2, 0x33, 0x52, 0xd1, - 0x6d, 0xa4, 0x58, 0x2a, 0xb6, 0xdf, 0x83, 0x75, 0x75, 0xc6, 0x24, 0xff, 0x36, 0x25, 0x62, 0x0c, - 0x2b, 0x29, 0xbc, 0x1e, 0x2a, 0x89, 0x68, 0xa5, 0xe5, 0x87, 0x5d, 0x72, 0x0c, 0xa5, 0xd4, 0xaa, - 0xff, 0xd4, 0xc0, 0x3b, 0x33, 0x4f, 0x07, 0x68, 0x25, 0x42, 0x37, 0x53, 0xa1, 0x57, 0x8a, 0x05, - 0xde, 0xcc, 0x4f, 0x27, 0xeb, 0x83, 0xe7, 0x2f, 0x2a, 0x73, 0xdf, 0xbc, 0xa8, 0xcc, 0x7d, 0xfb, - 0xa2, 0x32, 0xf7, 0xa7, 0x61, 0x45, 0x7b, 0x3e, 0xac, 0x68, 0xdf, 0x0c, 0x2b, 0xda, 0xb7, 0xc3, - 0x8a, 0xf6, 0xbf, 0x61, 0x45, 0xfb, 0xeb, 0xff, 0x2b, 0x73, 0xbf, 0x5d, 0x52, 0x72, 0xdf, 0x07, - 0x00, 0x00, 0xff, 0xff, 0x15, 0x2e, 0xf4, 0x72, 0x59, 0x16, 0x00, 0x00, + 0x15, 0x5e, 0x7a, 0xff, 0xb4, 0xb3, 0x3f, 0xd6, 0xce, 0xfe, 0x84, 0x5e, 0xd4, 0xa2, 0xc3, 0x00, + 0x85, 0x9b, 0x26, 0x54, 0xbc, 0x76, 0x52, 0xa3, 0x69, 0x8b, 0x2c, 0x57, 0xbb, 0xf6, 0x06, 0xde, + 0xac, 0x3a, 0xb2, 0x83, 0xb6, 0x70, 0x8b, 0x8e, 0xc4, 0x59, 0xed, 0x64, 0x29, 0x92, 0x9d, 0x19, + 0x2a, 0xab, 0xbb, 0x5e, 0xf4, 0xa2, 0x97, 0x7d, 0x81, 0xa0, 0x0f, 0x50, 0xf4, 0xaa, 0x2f, 0xe1, + 0x02, 0x45, 0x91, 0xcb, 0xa0, 0x05, 0x84, 0x5a, 0x45, 0x5f, 0xc2, 0x57, 0x05, 0x47, 0x43, 0x4a, + 0xfc, 0x91, 0x64, 0x1b, 0xb0, 0xef, 0xc8, 0x39, 0xdf, 0xf7, 0x9d, 0xc3, 0x33, 0x67, 0xce, 0x0c, + 0x07, 0xd8, 0x97, 0xf7, 0xb9, 0x45, 0xfd, 0xea, 0x65, 0xd8, 0x24, 0xcc, 0x23, 0x82, 0xf0, 0x6a, + 0x97, 0x78, 0x8e, 0xcf, 0xaa, 0xca, 0x80, 0x03, 0x5a, 0x0d, 0x7c, 0x97, 0xb6, 0x7a, 0xd5, 0xee, + 0x9d, 0x26, 0x11, 0xf8, 0x4e, 0xb5, 0x4d, 0x3c, 0xc2, 0xb0, 0x20, 0x8e, 0x15, 0x30, 0x5f, 0xf8, + 0xf0, 0xc6, 0x10, 0x6a, 0xe1, 0x80, 0x5a, 0x43, 0xa8, 0xa5, 0xa0, 0x7b, 0x1f, 0xb6, 0xa9, 0xb8, + 0x08, 0x9b, 0x56, 0xcb, 0xef, 0x54, 0xdb, 0x7e, 0xdb, 0xaf, 0x4a, 0x46, 0x33, 0x3c, 0x97, 0x6f, + 0xf2, 0x45, 0x3e, 0x0d, 0x95, 0xf6, 0xcc, 0x31, 0xa7, 0x2d, 0x9f, 0x91, 0x6a, 0x37, 0xe7, 0x6d, + 0xef, 0xde, 0x08, 0xd3, 0xc1, 0xad, 0x0b, 0xea, 0x11, 0xd6, 0xab, 0x06, 0x97, 0xed, 0x68, 0x80, + 0x57, 0x3b, 0x44, 0xe0, 0x22, 0x56, 0x75, 0x12, 0x8b, 0x85, 0x9e, 0xa0, 0x1d, 0x92, 0x23, 0x7c, + 0x32, 0x8b, 0xc0, 0x5b, 0x17, 0xa4, 0x83, 0x73, 0xbc, 0xbb, 0x93, 0x78, 0xa1, 0xa0, 0x6e, 0x95, + 0x7a, 0x82, 0x0b, 0x96, 0x25, 0x99, 0xf7, 0x40, 0xf9, 0xc0, 0x75, 0xfd, 0xaf, 0x89, 0x73, 0xd8, + 0x38, 0xa9, 0x31, 0xda, 0x25, 0x0c, 0xde, 0x02, 0x0b, 0x1e, 0xee, 0x10, 0x5d, 0xbb, 0xa5, 0xdd, + 0x5e, 0xb1, 0xd7, 0x9e, 0xf5, 0x8d, 0xb9, 0x41, 0xdf, 0x58, 0xf8, 0x02, 0x77, 0x08, 0x92, 0x16, + 0xf3, 0x53, 0xb0, 0xa9, 0x58, 0xc7, 0x2e, 0xb9, 0xfa, 0xd2, 0x77, 0xc3, 0x0e, 0x81, 0xdf, 0x07, + 0x4b, 0x8e, 0x14, 0x50, 0xc4, 0x0d, 0x45, 0x5c, 0x1a, 0xca, 0x22, 0x65, 0x35, 0x39, 0xb8, 0xae, + 0xc8, 0x0f, 0x7d, 0x2e, 0xea, 0x58, 0x5c, 0xc0, 0x7d, 0x00, 0x02, 0x2c, 0x2e, 0xea, 0x8c, 0x9c, + 0xd3, 0x2b, 0x45, 0x87, 0x8a, 0x0e, 0xea, 0x89, 0x05, 0x8d, 0xa1, 0xe0, 0x07, 0xa0, 0xc4, 0x08, + 0x76, 0xce, 0x3c, 0xb7, 0xa7, 0x5f, 0xbb, 0xa5, 0xdd, 0x2e, 0xd9, 0x65, 0xc5, 0x28, 0x21, 0x35, + 0x8e, 0x12, 0x84, 0xf9, 0x2f, 0x0d, 0x94, 0x8e, 0xba, 0xb4, 0x25, 0xa8, 0xef, 0xc1, 0xdf, 0x82, + 0x52, 0x34, 0x5b, 0x0e, 0x16, 0x58, 0x3a, 0x5b, 0xdd, 0xff, 0xc8, 0x1a, 0x55, 0x52, 0x92, 0x3c, + 0x2b, 0xb8, 0x6c, 0x47, 0x03, 0xdc, 0x8a, 0xd0, 0x56, 0xf7, 0x8e, 0x75, 0xd6, 0xfc, 0x8a, 0xb4, + 0xc4, 0x29, 0x11, 0x78, 0x14, 0xde, 0x68, 0x0c, 0x25, 0xaa, 0xd0, 0x05, 0xeb, 0x0e, 0x71, 0x89, + 0x20, 0x67, 0x41, 0xe4, 0x91, 0xcb, 0x08, 0x57, 0xf7, 0xef, 0xbe, 0x9c, 0x9b, 0xda, 0x38, 0xd5, + 0xde, 0x1c, 0xf4, 0x8d, 0xf5, 0xd4, 0x10, 0x4a, 0x8b, 0x9b, 0xdf, 0x68, 0x60, 0xf7, 0xb8, 0xf1, + 0x80, 0xf9, 0x61, 0xd0, 0x10, 0xd1, 0xec, 0xb6, 0x7b, 0xca, 0x04, 0x7f, 0x04, 0x16, 0x58, 0xe8, + 0xc6, 0x73, 0xf9, 0x5e, 0x3c, 0x97, 0x28, 0x74, 0xc9, 0x8b, 0xbe, 0xb1, 0x95, 0x61, 0x3d, 0xee, + 0x05, 0x04, 0x49, 0x02, 0xfc, 0x1c, 0x2c, 0x31, 0xec, 0xb5, 0x49, 0x14, 0xfa, 0xfc, 0xed, 0xd5, + 0x7d, 0xd3, 0x9a, 0xb8, 0xd6, 0xac, 0x93, 0x1a, 0x8a, 0xa0, 0xa3, 0x19, 0x97, 0xaf, 0x1c, 0x29, + 0x05, 0xf3, 0x14, 0xac, 0xcb, 0xa9, 0xf6, 0x99, 0x90, 0x16, 0x78, 0x13, 0xcc, 0x77, 0xa8, 0x27, + 0x83, 0x5a, 0xb4, 0x57, 0x15, 0x6b, 0xfe, 0x94, 0x7a, 0x28, 0x1a, 0x97, 0x66, 0x7c, 0x25, 0x73, + 0x36, 0x6e, 0xc6, 0x57, 0x28, 0x1a, 0x37, 0x1f, 0x80, 0x65, 0xe5, 0x71, 0x5c, 0x68, 0x7e, 0xba, + 0xd0, 0x7c, 0x81, 0xd0, 0x5f, 0xae, 0x81, 0xad, 0xba, 0xef, 0xd4, 0x28, 0x67, 0xa1, 0xcc, 0x97, + 0x1d, 0x3a, 0x6d, 0x22, 0xde, 0x42, 0x7d, 0x3c, 0x06, 0x0b, 0x3c, 0x20, 0x2d, 0x55, 0x16, 0xfb, + 0x53, 0x72, 0x5b, 0x10, 0x5f, 0x23, 0x20, 0xad, 0xd1, 0xb2, 0x8c, 0xde, 0x90, 0x54, 0x83, 0x4f, + 0xc1, 0x12, 0x17, 0x58, 0x84, 0x5c, 0x9f, 0x97, 0xba, 0xf7, 0x5e, 0x51, 0x57, 0x72, 0x47, 0xb3, + 0x38, 0x7c, 0x47, 0x4a, 0xd3, 0xfc, 0x87, 0x06, 0xde, 0x29, 0x60, 0x3d, 0xa2, 0x5c, 0xc0, 0xa7, + 0xb9, 0x8c, 0x59, 0x2f, 0x97, 0xb1, 0x88, 0x2d, 0xf3, 0x95, 0x2c, 0xde, 0x78, 0x64, 0x2c, 0x5b, + 0x0d, 0xb0, 0x48, 0x05, 0xe9, 0xc4, 0xa5, 0x68, 0xbd, 0xda, 0x67, 0xd9, 0xeb, 0x4a, 0x7a, 0xf1, + 0x24, 0x12, 0x41, 0x43, 0x2d, 0xf3, 0x9f, 0xd7, 0x0a, 0x3f, 0x27, 0x4a, 0x27, 0x3c, 0x07, 0x6b, + 0x1d, 0xea, 0x1d, 0x74, 0x31, 0x75, 0x71, 0x53, 0xad, 0x9e, 0x69, 0x45, 0x10, 0x75, 0x58, 0x6b, + 0xd8, 0x61, 0xad, 0x13, 0x4f, 0x9c, 0xb1, 0x86, 0x60, 0xd4, 0x6b, 0xdb, 0xe5, 0x41, 0xdf, 0x58, + 0x3b, 0x1d, 0x53, 0x42, 0x29, 0x5d, 0xf8, 0x6b, 0x50, 0xe2, 0xc4, 0x25, 0x2d, 0xe1, 0xb3, 0x57, + 0xeb, 0x10, 0x8f, 0x70, 0x93, 0xb8, 0x0d, 0x45, 0xb5, 0xd7, 0xa2, 0xbc, 0xc5, 0x6f, 0x28, 0x91, + 0x84, 0x2e, 0xd8, 0xe8, 0xe0, 0xab, 0x27, 0x1e, 0x4e, 0x3e, 0x64, 0xfe, 0x35, 0x3f, 0x04, 0x0e, + 0xfa, 0xc6, 0xc6, 0x69, 0x4a, 0x0b, 0x65, 0xb4, 0xcd, 0xff, 0x2d, 0x80, 0x1b, 0x13, 0xab, 0x0a, + 0x7e, 0x0e, 0xa0, 0xdf, 0xe4, 0x84, 0x75, 0x89, 0xf3, 0x60, 0xb8, 0x07, 0x51, 0x3f, 0x5e, 0xb8, + 0x7b, 0x6a, 0x82, 0xe0, 0x59, 0x0e, 0x81, 0x0a, 0x58, 0xf0, 0x0f, 0x1a, 0x58, 0x77, 0x86, 0x6e, + 0x88, 0x53, 0xf7, 0x9d, 0xb8, 0x30, 0x1e, 0xbc, 0x4e, 0xbd, 0x5b, 0xb5, 0x71, 0xa5, 0x23, 0x4f, + 0xb0, 0x9e, 0xbd, 0xa3, 0x02, 0x5a, 0x4f, 0xd9, 0x50, 0xda, 0x29, 0x3c, 0x05, 0xd0, 0x49, 0x24, + 0xb9, 0xda, 0xd3, 0x64, 0x8a, 0x17, 0xed, 0x9b, 0x4a, 0x61, 0x27, 0xe5, 0x37, 0x06, 0xa1, 0x02, + 0x22, 0xfc, 0x19, 0xd8, 0x68, 0x85, 0x8c, 0x11, 0x4f, 0x3c, 0x24, 0xd8, 0x15, 0x17, 0x3d, 0x7d, + 0x41, 0x4a, 0xed, 0x2a, 0xa9, 0x8d, 0xc3, 0x94, 0x15, 0x65, 0xd0, 0x11, 0xdf, 0x21, 0x9c, 0x32, + 0xe2, 0xc4, 0xfc, 0xc5, 0x34, 0xbf, 0x96, 0xb2, 0xa2, 0x0c, 0x1a, 0xde, 0x07, 0x6b, 0xe4, 0x2a, + 0x20, 0xad, 0x38, 0xa7, 0x4b, 0x92, 0xbd, 0xad, 0xd8, 0x6b, 0x47, 0x63, 0x36, 0x94, 0x42, 0xee, + 0xb9, 0x00, 0xe6, 0x93, 0x08, 0xcb, 0x60, 0xfe, 0x92, 0xf4, 0x86, 0x3b, 0x0f, 0x8a, 0x1e, 0xe1, + 0x67, 0x60, 0xb1, 0x8b, 0xdd, 0x90, 0xa8, 0x5a, 0x7f, 0xff, 0xe5, 0x6a, 0xfd, 0x31, 0xed, 0x10, + 0x34, 0x24, 0xfe, 0xf8, 0xda, 0x7d, 0xcd, 0xfc, 0xbb, 0x06, 0x36, 0xeb, 0xbe, 0xd3, 0x20, 0xad, + 0x90, 0x51, 0xd1, 0xab, 0xcb, 0x79, 0x7e, 0x0b, 0x3d, 0x1b, 0xa5, 0x7a, 0xf6, 0x47, 0xd3, 0x6b, + 0x2d, 0x1d, 0xdd, 0xa4, 0x8e, 0x6d, 0x3e, 0xd3, 0xc0, 0x4e, 0x0e, 0xfd, 0x16, 0x3a, 0xea, 0xcf, + 0xd3, 0x1d, 0xf5, 0x83, 0x57, 0xf9, 0x98, 0x09, 0xfd, 0xf4, 0xdf, 0xe5, 0x82, 0x4f, 0x91, 0xdd, + 0x34, 0x3a, 0xdd, 0x31, 0xda, 0xa5, 0x2e, 0x69, 0x13, 0x47, 0x7e, 0x4c, 0x69, 0xec, 0x74, 0x97, + 0x58, 0xd0, 0x18, 0x0a, 0x72, 0xb0, 0xeb, 0x90, 0x73, 0x1c, 0xba, 0xe2, 0xc0, 0x71, 0x0e, 0x71, + 0x80, 0x9b, 0xd4, 0xa5, 0x82, 0xaa, 0xe3, 0xc8, 0x8a, 0xfd, 0xe9, 0xa0, 0x6f, 0xec, 0xd6, 0x0a, + 0x11, 0x2f, 0xfa, 0xc6, 0xcd, 0xfc, 0x69, 0xde, 0x4a, 0x20, 0x3d, 0x34, 0x41, 0x1a, 0xf6, 0x80, + 0xce, 0xc8, 0xef, 0xc2, 0x68, 0x51, 0xd4, 0x98, 0x1f, 0xa4, 0xdc, 0xce, 0x4b, 0xb7, 0x3f, 0x1d, + 0xf4, 0x0d, 0x1d, 0x4d, 0xc0, 0xcc, 0x76, 0x3c, 0x51, 0x1e, 0x7e, 0x05, 0xb6, 0xb0, 0x3a, 0x87, + 0x8f, 0x7b, 0x5d, 0x90, 0x5e, 0xef, 0x0f, 0xfa, 0xc6, 0xd6, 0x41, 0xde, 0x3c, 0xdb, 0x61, 0x91, + 0x28, 0xac, 0x82, 0xe5, 0xae, 0x3c, 0xb2, 0x73, 0x7d, 0x51, 0xea, 0xef, 0x0c, 0xfa, 0xc6, 0xf2, + 0xf0, 0x14, 0x1f, 0x69, 0x2e, 0x1d, 0x37, 0xe4, 0x41, 0x30, 0x46, 0xc1, 0x8f, 0xc1, 0xea, 0x85, + 0xcf, 0xc5, 0x17, 0x44, 0x7c, 0xed, 0xb3, 0x4b, 0xd9, 0x18, 0x4a, 0xf6, 0x96, 0x9a, 0xc1, 0xd5, + 0x87, 0x23, 0x13, 0x1a, 0xc7, 0xc1, 0x5f, 0x82, 0x95, 0x0b, 0x75, 0xec, 0xe3, 0xfa, 0xb2, 0x2c, + 0xb4, 0xdb, 0x53, 0x0a, 0x2d, 0x75, 0x44, 0xb4, 0x37, 0x95, 0xfc, 0x4a, 0x3c, 0xcc, 0xd1, 0x48, + 0x0d, 0xfe, 0x00, 0x2c, 0xcb, 0x97, 0x93, 0x9a, 0x5e, 0x92, 0xd1, 0x5c, 0x57, 0xf0, 0xe5, 0x87, + 0xc3, 0x61, 0x14, 0xdb, 0x63, 0xe8, 0x49, 0xfd, 0x50, 0x5f, 0xc9, 0x43, 0x4f, 0xea, 0x87, 0x28, + 0xb6, 0xc3, 0xa7, 0x60, 0x99, 0x93, 0x47, 0xd4, 0x0b, 0xaf, 0x74, 0x20, 0x97, 0xdc, 0x9d, 0x29, + 0xe1, 0x36, 0x8e, 0x24, 0x32, 0x73, 0xe0, 0x1e, 0xa9, 0x2b, 0x3b, 0x8a, 0x25, 0xa1, 0x03, 0x56, + 0x58, 0xe8, 0x1d, 0xf0, 0x27, 0x9c, 0x30, 0x7d, 0x35, 0xb7, 0xdb, 0x67, 0xf5, 0x51, 0x8c, 0xcd, + 0x7a, 0x48, 0x32, 0x93, 0x20, 0xd0, 0x48, 0x18, 0xfe, 0x51, 0x03, 0x90, 0x87, 0x41, 0xe0, 0x92, + 0x0e, 0xf1, 0x04, 0x76, 0xe5, 0xf9, 0x9e, 0xeb, 0x6b, 0xd2, 0xdf, 0x4f, 0xa6, 0x7d, 0x4f, 0x8e, + 0x94, 0x75, 0x9c, 0x6c, 0xd3, 0x79, 0x28, 0x2a, 0xf0, 0x19, 0xa5, 0xf3, 0x9c, 0xcb, 0x67, 0x7d, + 0x7d, 0x66, 0x3a, 0x8b, 0xff, 0x5f, 0x46, 0xe9, 0x54, 0x76, 0x14, 0x4b, 0xc2, 0x2f, 0xc1, 0x6e, + 0xfc, 0x77, 0x87, 0x7c, 0x5f, 0x1c, 0x53, 0x97, 0xf0, 0x1e, 0x17, 0xa4, 0xa3, 0x6f, 0xc8, 0x69, + 0xae, 0x28, 0xe6, 0x2e, 0x2a, 0x44, 0xa1, 0x09, 0x6c, 0xd8, 0x01, 0x46, 0xdc, 0x1e, 0xa2, 0xb5, + 0x93, 0xf4, 0xa7, 0x23, 0xde, 0xc2, 0xee, 0xf0, 0xd4, 0x72, 0x5d, 0x3a, 0x78, 0x6f, 0xd0, 0x37, + 0x8c, 0xda, 0x74, 0x28, 0x9a, 0xa5, 0x05, 0x7f, 0x01, 0x74, 0x3c, 0xc9, 0x4f, 0x59, 0xfa, 0xf9, + 0x5e, 0xd4, 0x73, 0x26, 0x3a, 0x98, 0xc8, 0x86, 0x01, 0x28, 0xe3, 0xf4, 0x7f, 0x36, 0xd7, 0x37, + 0xe5, 0x2a, 0x7c, 0x7f, 0xca, 0x3c, 0x64, 0x7e, 0xcd, 0x6d, 0x5d, 0xa5, 0xb1, 0x9c, 0x31, 0x70, + 0x94, 0x53, 0x87, 0x57, 0x00, 0xe2, 0xec, 0xb5, 0x00, 0xd7, 0xe1, 0xcc, 0x2d, 0x26, 0x77, 0x97, + 0x30, 0x2a, 0xb5, 0x9c, 0x89, 0xa3, 0x02, 0x1f, 0xf0, 0x11, 0xd8, 0x56, 0xa3, 0x4f, 0x3c, 0x8e, + 0xcf, 0x49, 0xa3, 0xc7, 0x5b, 0xc2, 0xe5, 0xfa, 0x96, 0xec, 0x6f, 0xfa, 0xa0, 0x6f, 0x6c, 0x1f, + 0x14, 0xd8, 0x51, 0x21, 0x0b, 0x7e, 0x06, 0xca, 0xe7, 0x3e, 0x6b, 0x52, 0xc7, 0x21, 0x5e, 0xac, + 0xb4, 0x2d, 0x95, 0xb6, 0xa3, 0x4c, 0x1c, 0x67, 0x6c, 0x28, 0x87, 0x86, 0x1c, 0xec, 0x28, 0xe5, + 0x3a, 0xf3, 0x5b, 0xa7, 0x7e, 0xe8, 0x89, 0xa8, 0xa5, 0x72, 0x7d, 0x27, 0xd9, 0x46, 0x76, 0x0e, + 0x8a, 0x00, 0x2f, 0xfa, 0xc6, 0xad, 0x82, 0x96, 0x9e, 0x02, 0xa1, 0x62, 0x6d, 0xe8, 0x00, 0x20, + 0xfb, 0xc0, 0x70, 0xc9, 0xed, 0xce, 0xfc, 0x05, 0x44, 0x09, 0x38, 0xbb, 0xea, 0x36, 0xa2, 0x9d, + 0x79, 0x64, 0x46, 0x63, 0xba, 0x50, 0x80, 0x4d, 0x9c, 0xb9, 0x31, 0xe2, 0xfa, 0x3b, 0x72, 0x8e, + 0x7f, 0x38, 0x7b, 0x8e, 0x13, 0x8e, 0x7d, 0x43, 0x4d, 0xf1, 0x66, 0xd6, 0xc2, 0x51, 0xde, 0x81, + 0xf9, 0x67, 0x0d, 0xdc, 0x98, 0x18, 0x2f, 0xfc, 0x24, 0x75, 0xcb, 0x61, 0x66, 0x6e, 0x39, 0x60, + 0x9e, 0xf8, 0x06, 0x2e, 0x39, 0xbe, 0xd1, 0x80, 0x3e, 0xa9, 0x67, 0xc3, 0x8f, 0x53, 0x01, 0xbe, + 0x9b, 0x09, 0x70, 0x33, 0xc7, 0x7b, 0x03, 0xf1, 0xfd, 0x55, 0x03, 0xbb, 0xc5, 0x7b, 0x16, 0xbc, + 0x9b, 0x8a, 0xce, 0xc8, 0x44, 0x77, 0x3d, 0xc3, 0x52, 0xb1, 0xfd, 0x06, 0x6c, 0xa8, 0x9d, 0x2d, + 0x7d, 0xc7, 0x95, 0x8a, 0x31, 0xaa, 0xdf, 0xe8, 0x50, 0xaa, 0x24, 0xe2, 0xfa, 0x92, 0xbf, 0x93, + 0xe9, 0x31, 0x94, 0x51, 0x33, 0xff, 0xa6, 0x81, 0x77, 0x67, 0xee, 0x49, 0xd0, 0x4e, 0x85, 0x6e, + 0x65, 0x42, 0xaf, 0x4c, 0x16, 0x78, 0x33, 0x57, 0x5d, 0xf6, 0x87, 0xcf, 0x9e, 0x57, 0xe6, 0xbe, + 0x7d, 0x5e, 0x99, 0xfb, 0xee, 0x79, 0x65, 0xee, 0xf7, 0x83, 0x8a, 0xf6, 0x6c, 0x50, 0xd1, 0xbe, + 0x1d, 0x54, 0xb4, 0xef, 0x06, 0x15, 0xed, 0x3f, 0x83, 0x8a, 0xf6, 0xa7, 0xff, 0x56, 0xe6, 0x7e, + 0xb5, 0xac, 0xe4, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xf9, 0x85, 0x0c, 0x05, 0x17, 0x00, + 0x00, } diff --git a/vendor/k8s.io/api/policy/v1beta1/generated.proto b/vendor/k8s.io/api/policy/v1beta1/generated.proto index e9df3c16fe4..738c82c67b2 100644 --- a/vendor/k8s.io/api/policy/v1beta1/generated.proto +++ b/vendor/k8s.io/api/policy/v1beta1/generated.proto @@ -30,6 +30,12 @@ import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +message AllowedCSIDriver { + // Name is the registered name of the CSI driver + optional string name = 1; +} + // AllowedFlexVolume represents a single Flexvolume that is allowed to be used. message AllowedFlexVolume { // driver is the name of the Flexvolume driver. @@ -292,6 +298,11 @@ message PodSecurityPolicySpec { // +optional repeated AllowedFlexVolume allowedFlexVolumes = 18; + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value means no CSI drivers can run inline within a pod spec. + // +optional + repeated AllowedCSIDriver allowedCSIDrivers = 23; + // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. diff --git a/vendor/k8s.io/api/policy/v1beta1/types.go b/vendor/k8s.io/api/policy/v1beta1/types.go index 91ea1185878..74ddd069321 100644 --- a/vendor/k8s.io/api/policy/v1beta1/types.go +++ b/vendor/k8s.io/api/policy/v1beta1/types.go @@ -216,6 +216,10 @@ type PodSecurityPolicySpec struct { // is allowed in the "volumes" field. // +optional AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"` + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value means no CSI drivers can run inline within a pod spec. + // +optional + AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"` // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -304,6 +308,12 @@ type AllowedFlexVolume struct { Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` } +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +type AllowedCSIDriver struct { + // Name is the registered name of the CSI driver + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + // HostPortRange defines a range of host ports that will be enabled by a policy // for pods to use. It requires both the start and end to be defined. type HostPortRange struct { diff --git a/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go index 1a02ae60070..24b078eda1f 100644 --- a/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go @@ -27,6 +27,22 @@ import ( intstr "k8s.io/apimachinery/pkg/util/intstr" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. +func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { + if in == nil { + return nil + } + out := new(AllowedCSIDriver) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { *out = *in @@ -375,6 +391,11 @@ func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { *out = make([]AllowedFlexVolume, len(*in)) copy(*out, *in) } + if in.AllowedCSIDrivers != nil { + in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers + *out = make([]AllowedCSIDriver, len(*in)) + copy(*out, *in) + } if in.AllowedUnsafeSysctls != nil { in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls *out = make([]string, len(*in)) diff --git a/vendor/k8s.io/api/rbac/OWNERS b/vendor/k8s.io/api/rbac/OWNERS old mode 100755 new mode 100644 index ff4a7f4bf9a..dbc9a28c6f2 --- a/vendor/k8s.io/api/rbac/OWNERS +++ b/vendor/k8s.io/api/rbac/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-authorizers-approvers diff --git a/vendor/k8s.io/api/rbac/v1/doc.go b/vendor/k8s.io/api/rbac/v1/doc.go index 76899ef0965..80f43ce9224 100644 --- a/vendor/k8s.io/api/rbac/v1/doc.go +++ b/vendor/k8s.io/api/rbac/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=rbac.authorization.k8s.io diff --git a/vendor/k8s.io/api/rbac/v1/generated.proto b/vendor/k8s.io/api/rbac/v1/generated.proto index 4b321a7c243..71fa08341cd 100644 --- a/vendor/k8s.io/api/rbac/v1/generated.proto +++ b/vendor/k8s.io/api/rbac/v1/generated.proto @@ -43,6 +43,7 @@ message ClusterRole { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this ClusterRole + // +optional repeated PolicyRule rules = 2; // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. @@ -121,6 +122,7 @@ message Role { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this Role + // +optional repeated PolicyRule rules = 2; } diff --git a/vendor/k8s.io/api/rbac/v1/types.go b/vendor/k8s.io/api/rbac/v1/types.go index 17163cbb269..7ba7d05435e 100644 --- a/vendor/k8s.io/api/rbac/v1/types.go +++ b/vendor/k8s.io/api/rbac/v1/types.go @@ -108,6 +108,7 @@ type Role struct { metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this Role + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } @@ -170,6 +171,7 @@ type ClusterRole struct { metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this ClusterRole + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. diff --git a/vendor/k8s.io/api/rbac/v1beta1/doc.go b/vendor/k8s.io/api/rbac/v1beta1/doc.go index 516625eeeae..fe7aae975a1 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/doc.go +++ b/vendor/k8s.io/api/rbac/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=rbac.authorization.k8s.io diff --git a/vendor/k8s.io/api/rbac/v1beta1/generated.proto b/vendor/k8s.io/api/rbac/v1beta1/generated.proto index 27bd30ce9f8..07bf735a06b 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/generated.proto +++ b/vendor/k8s.io/api/rbac/v1beta1/generated.proto @@ -43,6 +43,7 @@ message ClusterRole { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this ClusterRole + // +optional repeated PolicyRule rules = 2; // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. @@ -122,6 +123,7 @@ message Role { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this Role + // +optional repeated PolicyRule rules = 2; } diff --git a/vendor/k8s.io/api/rbac/v1beta1/types.go b/vendor/k8s.io/api/rbac/v1beta1/types.go index 857b67a6f84..35843c90d18 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/types.go +++ b/vendor/k8s.io/api/rbac/v1beta1/types.go @@ -109,6 +109,7 @@ type Role struct { metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this Role + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } @@ -171,6 +172,7 @@ type ClusterRole struct { metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this ClusterRole + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. // If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be diff --git a/vendor/k8s.io/api/scheduling/v1/BUILD b/vendor/k8s.io/api/scheduling/v1/BUILD new file mode 100644 index 00000000000..b29e2571338 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated.pb.go", + "register.go", + "types.go", + "types_swagger_doc_generated.go", + "zz_generated.deepcopy.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1", + importpath = "k8s.io/api/scheduling/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/github.com/gogo/protobuf/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/api/scheduling/v1/doc.go b/vendor/k8s.io/api/scheduling/v1/doc.go new file mode 100644 index 00000000000..76c4da002ef --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=scheduling.k8s.io + +package v1 // import "k8s.io/api/scheduling/v1" diff --git a/vendor/k8s.io/api/scheduling/v1/generated.pb.go b/vendor/k8s.io/api/scheduling/v1/generated.pb.go new file mode 100644 index 00000000000..5adf978ef87 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/generated.pb.go @@ -0,0 +1,621 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1/generated.proto + +/* + Package v1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1/generated.proto + + It has these top-level messages: + PriorityClass + PriorityClassList +*/ +package v1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *PriorityClass) Reset() { *m = PriorityClass{} } +func (*PriorityClass) ProtoMessage() {} +func (*PriorityClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } +func (*PriorityClassList) ProtoMessage() {} +func (*PriorityClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func init() { + proto.RegisterType((*PriorityClass)(nil), "k8s.io.api.scheduling.v1.PriorityClass") + proto.RegisterType((*PriorityClassList)(nil), "k8s.io.api.scheduling.v1.PriorityClassList") +} +func (m *PriorityClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PriorityClass) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) + dAtA[i] = 0x18 + i++ + if m.GlobalDefault { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i += copy(dAtA[i:], m.Description) + return i, nil +} + +func (m *PriorityClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PriorityClassList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n2, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *PriorityClass) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Value)) + n += 2 + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PriorityClassList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *PriorityClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PriorityClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `GlobalDefault:` + fmt.Sprintf("%v", this.GlobalDefault) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `}`, + }, "") + return s +} +func (this *PriorityClassList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PriorityClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *PriorityClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PriorityClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PriorityClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + m.Value = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Value |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GlobalDefault", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.GlobalDefault = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PriorityClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PriorityClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PriorityClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PriorityClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 442 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x3f, 0x8b, 0xd4, 0x40, + 0x18, 0xc6, 0x33, 0x7b, 0x2e, 0xac, 0xb3, 0x2c, 0x68, 0x44, 0x08, 0x5b, 0xcc, 0x85, 0xb3, 0x30, + 0x8d, 0x33, 0xee, 0xa1, 0x22, 0x58, 0x19, 0x0f, 0x44, 0x38, 0x51, 0x52, 0x58, 0x88, 0x85, 0x93, + 0xe4, 0xbd, 0xec, 0xb8, 0x49, 0x26, 0xcc, 0x4c, 0x02, 0xd7, 0x59, 0x5b, 0xf9, 0x8d, 0x6c, 0xb7, + 0xbc, 0xf2, 0xaa, 0xc3, 0x8d, 0x5f, 0x44, 0xf2, 0xc7, 0xcb, 0xae, 0xe7, 0xe1, 0x75, 0x99, 0xe7, + 0x7d, 0x7e, 0xcf, 0x3b, 0x79, 0x18, 0xfc, 0x72, 0xf5, 0x5c, 0x53, 0x21, 0xd9, 0xaa, 0x0c, 0x41, + 0xe5, 0x60, 0x40, 0xb3, 0x0a, 0xf2, 0x58, 0x2a, 0xd6, 0x0f, 0x78, 0x21, 0x98, 0x8e, 0x96, 0x10, + 0x97, 0xa9, 0xc8, 0x13, 0x56, 0x2d, 0x58, 0x02, 0x39, 0x28, 0x6e, 0x20, 0xa6, 0x85, 0x92, 0x46, + 0xda, 0x4e, 0xe7, 0xa4, 0xbc, 0x10, 0x74, 0x70, 0xd2, 0x6a, 0x31, 0x7f, 0x94, 0x08, 0xb3, 0x2c, + 0x43, 0x1a, 0xc9, 0x8c, 0x25, 0x32, 0x91, 0xac, 0x05, 0xc2, 0xf2, 0xa4, 0x3d, 0xb5, 0x87, 0xf6, + 0xab, 0x0b, 0x9a, 0x3f, 0x19, 0x56, 0x66, 0x3c, 0x5a, 0x8a, 0x1c, 0xd4, 0x29, 0x2b, 0x56, 0x49, + 0x23, 0x68, 0x96, 0x81, 0xe1, 0xff, 0x58, 0x3f, 0x67, 0xd7, 0x51, 0xaa, 0xcc, 0x8d, 0xc8, 0xe0, + 0x0a, 0xf0, 0xec, 0x7f, 0x40, 0xf3, 0x13, 0x19, 0xff, 0x9b, 0x3b, 0xf8, 0x36, 0xc2, 0xb3, 0xf7, + 0x4a, 0x48, 0x25, 0xcc, 0xe9, 0xab, 0x94, 0x6b, 0x6d, 0x7f, 0xc6, 0x93, 0xe6, 0x56, 0x31, 0x37, + 0xdc, 0x41, 0x2e, 0xf2, 0xa6, 0x87, 0x8f, 0xe9, 0x50, 0xc6, 0x65, 0x38, 0x2d, 0x56, 0x49, 0x23, + 0x68, 0xda, 0xb8, 0x69, 0xb5, 0xa0, 0xef, 0xc2, 0x2f, 0x10, 0x99, 0xb7, 0x60, 0xb8, 0x6f, 0xaf, + 0x2f, 0xf6, 0xad, 0xfa, 0x62, 0x1f, 0x0f, 0x5a, 0x70, 0x99, 0x6a, 0x3f, 0xc0, 0xe3, 0x8a, 0xa7, + 0x25, 0x38, 0x23, 0x17, 0x79, 0x63, 0x7f, 0xd6, 0x9b, 0xc7, 0x1f, 0x1a, 0x31, 0xe8, 0x66, 0xf6, + 0x0b, 0x3c, 0x4b, 0x52, 0x19, 0xf2, 0xf4, 0x08, 0x4e, 0x78, 0x99, 0x1a, 0x67, 0xcf, 0x45, 0xde, + 0xc4, 0xbf, 0xdf, 0x9b, 0x67, 0xaf, 0xb7, 0x87, 0xc1, 0xae, 0xd7, 0x7e, 0x8a, 0xa7, 0x31, 0xe8, + 0x48, 0x89, 0xc2, 0x08, 0x99, 0x3b, 0xb7, 0x5c, 0xe4, 0xdd, 0xf6, 0xef, 0xf5, 0xe8, 0xf4, 0x68, + 0x18, 0x05, 0xdb, 0xbe, 0x83, 0x1f, 0x08, 0xdf, 0xdd, 0x29, 0xe3, 0x58, 0x68, 0x63, 0x7f, 0xba, + 0x52, 0x08, 0xbd, 0x59, 0x21, 0x0d, 0xdd, 0xd6, 0x71, 0xa7, 0xdf, 0x3c, 0xf9, 0xa3, 0x6c, 0x95, + 0x71, 0x8c, 0xc7, 0xc2, 0x40, 0xa6, 0x9d, 0x91, 0xbb, 0xe7, 0x4d, 0x0f, 0x1f, 0xd2, 0xeb, 0x1e, + 0x1e, 0xdd, 0xb9, 0xd9, 0xd0, 0xda, 0x9b, 0x86, 0x0e, 0xba, 0x10, 0xdf, 0x5b, 0x6f, 0x88, 0x75, + 0xb6, 0x21, 0xd6, 0xf9, 0x86, 0x58, 0x5f, 0x6b, 0x82, 0xd6, 0x35, 0x41, 0x67, 0x35, 0x41, 0xe7, + 0x35, 0x41, 0x3f, 0x6b, 0x82, 0xbe, 0xff, 0x22, 0xd6, 0xc7, 0x51, 0xb5, 0xf8, 0x1d, 0x00, 0x00, + 0xff, 0xff, 0x32, 0xe8, 0x23, 0x88, 0x24, 0x03, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/scheduling/v1/generated.proto b/vendor/k8s.io/api/scheduling/v1/generated.proto new file mode 100644 index 00000000000..791ba8dc793 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/generated.proto @@ -0,0 +1,67 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.scheduling.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// PriorityClass defines mapping from a priority class name to the priority +// integer value. The value can be any valid integer. +message PriorityClass { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // The value of this priority class. This is the actual priority that pods + // receive when they have the name of this class in their pod spec. + optional int32 value = 2; + + // globalDefault specifies whether this PriorityClass should be considered as + // the default priority for pods that do not have any priority class. + // Only one PriorityClass can be marked as `globalDefault`. However, if more than + // one PriorityClasses exists with their `globalDefault` field set to true, + // the smallest value of such global default PriorityClasses will be used as the default priority. + // +optional + optional bool globalDefault = 3; + + // description is an arbitrary string that usually provides guidelines on + // when this priority class should be used. + // +optional + optional string description = 4; +} + +// PriorityClassList is a collection of priority classes. +message PriorityClassList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of PriorityClasses + repeated PriorityClass items = 2; +} + diff --git a/vendor/k8s.io/api/scheduling/v1/register.go b/vendor/k8s.io/api/scheduling/v1/register.go new file mode 100644 index 00000000000..33977fe9a71 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/register.go @@ -0,0 +1,55 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "scheduling.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + + // SchemeBuilder is a collection of functions that add things to a scheme. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &PriorityClass{}, + &PriorityClassList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/scheduling/v1/types.go b/vendor/k8s.io/api/scheduling/v1/types.go new file mode 100644 index 00000000000..d33e0085aa1 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/types.go @@ -0,0 +1,66 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PriorityClass defines mapping from a priority class name to the priority +// integer value. The value can be any valid integer. +type PriorityClass struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The value of this priority class. This is the actual priority that pods + // receive when they have the name of this class in their pod spec. + Value int32 `json:"value" protobuf:"bytes,2,opt,name=value"` + + // globalDefault specifies whether this PriorityClass should be considered as + // the default priority for pods that do not have any priority class. + // Only one PriorityClass can be marked as `globalDefault`. However, if more than + // one PriorityClasses exists with their `globalDefault` field set to true, + // the smallest value of such global default PriorityClasses will be used as the default priority. + // +optional + GlobalDefault bool `json:"globalDefault,omitempty" protobuf:"bytes,3,opt,name=globalDefault"` + + // description is an arbitrary string that usually provides guidelines on + // when this priority class should be used. + // +optional + Description string `json:"description,omitempty" protobuf:"bytes,4,opt,name=description"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PriorityClassList is a collection of priority classes. +type PriorityClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of PriorityClasses + Items []PriorityClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..09bfc3775f7 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go @@ -0,0 +1,84 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PriorityClass) DeepCopyInto(out *PriorityClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityClass. +func (in *PriorityClass) DeepCopy() *PriorityClass { + if in == nil { + return nil + } + out := new(PriorityClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PriorityClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PriorityClassList) DeepCopyInto(out *PriorityClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PriorityClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityClassList. +func (in *PriorityClassList) DeepCopy() *PriorityClassList { + if in == nil { + return nil + } + out := new(PriorityClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PriorityClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/k8s.io/api/scheduling/v1beta1/doc.go b/vendor/k8s.io/api/scheduling/v1beta1/doc.go index 7cf1af2124c..e661968980b 100644 --- a/vendor/k8s.io/api/scheduling/v1beta1/doc.go +++ b/vendor/k8s.io/api/scheduling/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=scheduling.k8s.io diff --git a/vendor/k8s.io/api/scheduling/v1beta1/generated.proto b/vendor/k8s.io/api/scheduling/v1beta1/generated.proto index 0a95755032e..3f15dc1d5c1 100644 --- a/vendor/k8s.io/api/scheduling/v1beta1/generated.proto +++ b/vendor/k8s.io/api/scheduling/v1beta1/generated.proto @@ -28,11 +28,12 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. message PriorityClass { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -57,7 +58,7 @@ message PriorityClass { // PriorityClassList is a collection of priority classes. message PriorityClassList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff --git a/vendor/k8s.io/api/scheduling/v1beta1/types.go b/vendor/k8s.io/api/scheduling/v1beta1/types.go index a9aaa86650d..2f6b3c9683d 100644 --- a/vendor/k8s.io/api/scheduling/v1beta1/types.go +++ b/vendor/k8s.io/api/scheduling/v1beta1/types.go @@ -24,12 +24,13 @@ import ( // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. type PriorityClass struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -57,7 +58,7 @@ type PriorityClass struct { type PriorityClassList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff --git a/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go new file mode 100644 index 00000000000..e99ed8fc481 --- /dev/null +++ b/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go @@ -0,0 +1,52 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_PriorityClass = map[string]string{ + "": "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", +} + +func (PriorityClass) SwaggerDoc() map[string]string { + return map_PriorityClass +} + +var map_PriorityClassList = map[string]string{ + "": "PriorityClassList is a collection of priority classes.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "items is the list of PriorityClasses", +} + +func (PriorityClassList) SwaggerDoc() map[string]string { + return map_PriorityClassList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/api/storage/OWNERS b/vendor/k8s.io/api/storage/OWNERS old mode 100755 new mode 100644 index d59ed6e1d8a..7562f04b86a --- a/vendor/k8s.io/api/storage/OWNERS +++ b/vendor/k8s.io/api/storage/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - mbohlool diff --git a/vendor/k8s.io/api/storage/v1/doc.go b/vendor/k8s.io/api/storage/v1/doc.go index ff8bb34ca1c..75a6489da2c 100644 --- a/vendor/k8s.io/api/storage/v1/doc.go +++ b/vendor/k8s.io/api/storage/v1/doc.go @@ -15,7 +15,8 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true -package v1 +package v1 // import "k8s.io/api/storage/v1" diff --git a/vendor/k8s.io/api/storage/v1/generated.proto b/vendor/k8s.io/api/storage/v1/generated.proto index 668c8544743..7ac6cb2d2ab 100644 --- a/vendor/k8s.io/api/storage/v1/generated.proto +++ b/vendor/k8s.io/api/storage/v1/generated.proto @@ -178,7 +178,7 @@ message VolumeError { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time time = 1; // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional optional string message = 2; diff --git a/vendor/k8s.io/api/storage/v1/types.go b/vendor/k8s.io/api/storage/v1/types.go index 9f2f67b6b76..bd60e1026b7 100644 --- a/vendor/k8s.io/api/storage/v1/types.go +++ b/vendor/k8s.io/api/storage/v1/types.go @@ -204,7 +204,7 @@ type VolumeError struct { Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"` // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` diff --git a/vendor/k8s.io/api/storage/v1beta1/doc.go b/vendor/k8s.io/api/storage/v1beta1/doc.go index ea7667dda38..e3e3626e247 100644 --- a/vendor/k8s.io/api/storage/v1beta1/doc.go +++ b/vendor/k8s.io/api/storage/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.pb.go b/vendor/k8s.io/api/storage/v1beta1/generated.pb.go index 3e995f039fc..0cde6ec0874 100644 --- a/vendor/k8s.io/api/storage/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/storage/v1beta1/generated.pb.go @@ -24,6 +24,13 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/storage/v1beta1/generated.proto It has these top-level messages: + CSIDriver + CSIDriverList + CSIDriverSpec + CSINode + CSINodeDriver + CSINodeList + CSINodeSpec StorageClass StorageClassList VolumeAttachment @@ -59,39 +66,74 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +func (m *CSIDriver) Reset() { *m = CSIDriver{} } +func (*CSIDriver) ProtoMessage() {} +func (*CSIDriver) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *CSIDriverList) Reset() { *m = CSIDriverList{} } +func (*CSIDriverList) ProtoMessage() {} +func (*CSIDriverList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *CSIDriverSpec) Reset() { *m = CSIDriverSpec{} } +func (*CSIDriverSpec) ProtoMessage() {} +func (*CSIDriverSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *CSINode) Reset() { *m = CSINode{} } +func (*CSINode) ProtoMessage() {} +func (*CSINode) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *CSINodeDriver) Reset() { *m = CSINodeDriver{} } +func (*CSINodeDriver) ProtoMessage() {} +func (*CSINodeDriver) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *CSINodeList) Reset() { *m = CSINodeList{} } +func (*CSINodeList) ProtoMessage() {} +func (*CSINodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *CSINodeSpec) Reset() { *m = CSINodeSpec{} } +func (*CSINodeSpec) ProtoMessage() {} +func (*CSINodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + func (m *StorageClass) Reset() { *m = StorageClass{} } func (*StorageClass) ProtoMessage() {} -func (*StorageClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (*StorageClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } func (m *StorageClassList) Reset() { *m = StorageClassList{} } func (*StorageClassList) ProtoMessage() {} -func (*StorageClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (*StorageClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } func (*VolumeAttachment) ProtoMessage() {} -func (*VolumeAttachment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*VolumeAttachment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } func (*VolumeAttachmentList) ProtoMessage() {} -func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } func (*VolumeAttachmentSource) ProtoMessage() {} -func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } func (*VolumeAttachmentSpec) ProtoMessage() {} -func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } func (*VolumeAttachmentStatus) ProtoMessage() {} -func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } func (m *VolumeError) Reset() { *m = VolumeError{} } func (*VolumeError) ProtoMessage() {} -func (*VolumeError) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (*VolumeError) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } func init() { + proto.RegisterType((*CSIDriver)(nil), "k8s.io.api.storage.v1beta1.CSIDriver") + proto.RegisterType((*CSIDriverList)(nil), "k8s.io.api.storage.v1beta1.CSIDriverList") + proto.RegisterType((*CSIDriverSpec)(nil), "k8s.io.api.storage.v1beta1.CSIDriverSpec") + proto.RegisterType((*CSINode)(nil), "k8s.io.api.storage.v1beta1.CSINode") + proto.RegisterType((*CSINodeDriver)(nil), "k8s.io.api.storage.v1beta1.CSINodeDriver") + proto.RegisterType((*CSINodeList)(nil), "k8s.io.api.storage.v1beta1.CSINodeList") + proto.RegisterType((*CSINodeSpec)(nil), "k8s.io.api.storage.v1beta1.CSINodeSpec") proto.RegisterType((*StorageClass)(nil), "k8s.io.api.storage.v1beta1.StorageClass") proto.RegisterType((*StorageClassList)(nil), "k8s.io.api.storage.v1beta1.StorageClassList") proto.RegisterType((*VolumeAttachment)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachment") @@ -101,6 +143,259 @@ func init() { proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentStatus") proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1beta1.VolumeError") } +func (m *CSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIDriver) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + return i, nil +} + +func (m *CSIDriverList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIDriverList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n3, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *CSIDriverSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIDriverSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.AttachRequired != nil { + dAtA[i] = 0x8 + i++ + if *m.AttachRequired { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.PodInfoOnMount != nil { + dAtA[i] = 0x10 + i++ + if *m.PodInfoOnMount { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + return i, nil +} + +func (m *CSINode) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSINode) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n5, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + return i, nil +} + +func (m *CSINodeDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSINodeDriver) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeID))) + i += copy(dAtA[i:], m.NodeID) + if len(m.TopologyKeys) > 0 { + for _, s := range m.TopologyKeys { + dAtA[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + return i, nil +} + +func (m *CSINodeList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSINodeList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n6, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *CSINodeSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSINodeSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Drivers) > 0 { + for _, msg := range m.Drivers { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + func (m *StorageClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -119,11 +414,11 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n1 + i += n7 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) @@ -220,11 +515,11 @@ func (m *StorageClassList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) + n8, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n2 + i += n8 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -258,27 +553,27 @@ func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n3 + i += n9 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n4, err := m.Spec.MarshalTo(dAtA[i:]) + n10, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n10 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n5, err := m.Status.MarshalTo(dAtA[i:]) + n11, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n5 + i += n11 return i, nil } @@ -300,11 +595,11 @@ func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) + n12, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n12 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -366,11 +661,11 @@ func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n7, err := m.Source.MarshalTo(dAtA[i:]) + n13, err := m.Source.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n13 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) @@ -427,21 +722,21 @@ func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AttachError.Size())) - n8, err := m.AttachError.MarshalTo(dAtA[i:]) + n14, err := m.AttachError.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n8 + i += n14 } if m.DetachError != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DetachError.Size())) - n9, err := m.DetachError.MarshalTo(dAtA[i:]) + n15, err := m.DetachError.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n15 } return i, nil } @@ -464,11 +759,11 @@ func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Time.Size())) - n10, err := m.Time.MarshalTo(dAtA[i:]) + n16, err := m.Time.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n16 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) @@ -485,6 +780,94 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } +func (m *CSIDriver) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CSIDriverList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSIDriverSpec) Size() (n int) { + var l int + _ = l + if m.AttachRequired != nil { + n += 2 + } + if m.PodInfoOnMount != nil { + n += 2 + } + return n +} + +func (m *CSINode) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CSINodeDriver) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.TopologyKeys) > 0 { + for _, s := range m.TopologyKeys { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSINodeList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSINodeSpec) Size() (n int) { + var l int + _ = l + if len(m.Drivers) > 0 { + for _, e := range m.Drivers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *StorageClass) Size() (n int) { var l int _ = l @@ -634,6 +1017,83 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *CSIDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIDriver{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CSIDriverSpec", "CSIDriverSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIDriverList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIDriverList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CSIDriver", "CSIDriver", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIDriverSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIDriverSpec{`, + `AttachRequired:` + valueToStringGenerated(this.AttachRequired) + `,`, + `PodInfoOnMount:` + valueToStringGenerated(this.PodInfoOnMount) + `,`, + `}`, + }, "") + return s +} +func (this *CSINode) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINode{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CSINodeSpec", "CSINodeSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINodeDriver{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, + `TopologyKeys:` + fmt.Sprintf("%v", this.TopologyKeys) + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINodeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CSINode", "CSINode", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINodeSpec{`, + `Drivers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Drivers), "CSINodeDriver", "CSINodeDriver", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *StorageClass) String() string { if this == nil { return "nil" @@ -759,6 +1219,758 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } +func (m *CSIDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIDriverList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriverList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriverList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CSIDriver{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIDriverSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriverSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriverSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AttachRequired", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AttachRequired = &b + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PodInfoOnMount", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.PodInfoOnMount = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINode) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINode: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINode: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINodeDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINodeDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINodeDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TopologyKeys", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TopologyKeys = append(m.TopologyKeys, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINodeList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINodeList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINodeList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CSINode{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINodeSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINodeSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINodeSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Drivers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Drivers = append(m.Drivers, CSINodeDriver{}) + if err := m.Drivers[len(m.Drivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *StorageClass) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2180,67 +3392,81 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 988 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xc6, 0xf9, 0x70, 0xc6, 0x09, 0x4d, 0x86, 0x08, 0x8c, 0x0f, 0x76, 0xe4, 0x0b, 0xa6, - 0x6a, 0x77, 0x9b, 0xa8, 0xa0, 0x08, 0x89, 0x83, 0xb7, 0xe4, 0x00, 0x8a, 0xdb, 0x30, 0x89, 0x2a, - 0x54, 0x71, 0x60, 0xb2, 0xfb, 0x76, 0xb3, 0x78, 0x77, 0x67, 0x99, 0x19, 0x1b, 0x72, 0xe3, 0xc4, - 0x19, 0x71, 0xe0, 0x17, 0xf0, 0x3f, 0x38, 0x92, 0x13, 0xea, 0xb1, 0x27, 0x8b, 0x2c, 0xff, 0x22, - 0xe2, 0x80, 0x66, 0x76, 0x62, 0xaf, 0xbd, 0x0e, 0x6d, 0x7a, 0xe8, 0xcd, 0xef, 0xc7, 0xf3, 0xbc, - 0xdf, 0xb3, 0x46, 0x8f, 0xfa, 0xfb, 0xc2, 0x0e, 0x99, 0xd3, 0x1f, 0x9c, 0x02, 0x4f, 0x40, 0x82, - 0x70, 0x86, 0x90, 0xf8, 0x8c, 0x3b, 0xc6, 0x40, 0xd3, 0xd0, 0x11, 0x92, 0x71, 0x1a, 0x80, 0x33, - 0xdc, 0x3d, 0x05, 0x49, 0x77, 0x9d, 0x00, 0x12, 0xe0, 0x54, 0x82, 0x6f, 0xa7, 0x9c, 0x49, 0x86, - 0x1b, 0xb9, 0xaf, 0x4d, 0xd3, 0xd0, 0x36, 0xbe, 0xb6, 0xf1, 0x6d, 0xdc, 0x0f, 0x42, 0x79, 0x36, - 0x38, 0xb5, 0x3d, 0x16, 0x3b, 0x01, 0x0b, 0x98, 0xa3, 0x21, 0xa7, 0x83, 0xe7, 0x5a, 0xd2, 0x82, - 0xfe, 0x95, 0x53, 0x35, 0xda, 0x85, 0xb0, 0x1e, 0xe3, 0x2a, 0xe6, 0x6c, 0xb8, 0xc6, 0xc3, 0x89, - 0x4f, 0x4c, 0xbd, 0xb3, 0x30, 0x01, 0x7e, 0xee, 0xa4, 0xfd, 0x40, 0x29, 0x84, 0x13, 0x83, 0xa4, - 0xf3, 0x50, 0xce, 0x4d, 0x28, 0x3e, 0x48, 0x64, 0x18, 0x43, 0x09, 0xf0, 0xc9, 0xab, 0x00, 0xc2, - 0x3b, 0x83, 0x98, 0xce, 0xe2, 0xda, 0xbf, 0xae, 0xa0, 0xf5, 0xe3, 0xbc, 0x0b, 0x8f, 0x22, 0x2a, - 0x04, 0xfe, 0x16, 0x55, 0x55, 0x52, 0x3e, 0x95, 0xb4, 0x6e, 0xed, 0x58, 0x9d, 0xda, 0xde, 0x03, - 0x7b, 0xd2, 0xb1, 0x31, 0xb7, 0x9d, 0xf6, 0x03, 0xa5, 0x10, 0xb6, 0xf2, 0xb6, 0x87, 0xbb, 0xf6, - 0x93, 0xd3, 0xef, 0xc0, 0x93, 0x3d, 0x90, 0xd4, 0xc5, 0x17, 0xa3, 0xd6, 0x42, 0x36, 0x6a, 0xa1, - 0x89, 0x8e, 0x8c, 0x59, 0xf1, 0xc7, 0xa8, 0x96, 0x72, 0x36, 0x0c, 0x45, 0xc8, 0x12, 0xe0, 0xf5, - 0xc5, 0x1d, 0xab, 0xb3, 0xe6, 0xbe, 0x6b, 0x20, 0xb5, 0xa3, 0x89, 0x89, 0x14, 0xfd, 0x70, 0x84, - 0x50, 0x4a, 0x39, 0x8d, 0x41, 0x02, 0x17, 0xf5, 0xca, 0x4e, 0xa5, 0x53, 0xdb, 0xdb, 0xb7, 0x6f, - 0x1e, 0xa6, 0x5d, 0x2c, 0xcb, 0x3e, 0x1a, 0x43, 0x0f, 0x12, 0xc9, 0xcf, 0x27, 0x29, 0x4e, 0x0c, - 0xa4, 0xc0, 0x8f, 0xfb, 0x68, 0x83, 0x83, 0x17, 0xd1, 0x30, 0x3e, 0x62, 0x51, 0xe8, 0x9d, 0xd7, - 0x97, 0x74, 0x9a, 0x07, 0xd9, 0xa8, 0xb5, 0x41, 0x8a, 0x86, 0xab, 0x51, 0xeb, 0x41, 0x79, 0x0d, - 0xec, 0x23, 0xe0, 0x22, 0x14, 0x12, 0x12, 0xf9, 0x94, 0x45, 0x83, 0x18, 0xa6, 0x30, 0x64, 0x9a, - 0x1b, 0x3f, 0x44, 0xeb, 0x31, 0x1b, 0x24, 0xf2, 0x49, 0x2a, 0x43, 0x96, 0x88, 0xfa, 0xf2, 0x4e, - 0xa5, 0xb3, 0xe6, 0x6e, 0x66, 0xa3, 0xd6, 0x7a, 0xaf, 0xa0, 0x27, 0x53, 0x5e, 0xf8, 0x10, 0x6d, - 0xd3, 0x28, 0x62, 0x3f, 0xe4, 0x01, 0x0e, 0x7e, 0x4c, 0x69, 0xa2, 0x5a, 0x55, 0x5f, 0xd9, 0xb1, - 0x3a, 0x55, 0xb7, 0x9e, 0x8d, 0x5a, 0xdb, 0xdd, 0x39, 0x76, 0x32, 0x17, 0x85, 0xbf, 0x46, 0x5b, - 0x43, 0xad, 0x72, 0xc3, 0xc4, 0x0f, 0x93, 0xa0, 0xc7, 0x7c, 0xa8, 0xaf, 0xea, 0xa2, 0xef, 0x66, - 0xa3, 0xd6, 0xd6, 0xd3, 0x59, 0xe3, 0xd5, 0x3c, 0x25, 0x29, 0x93, 0xe0, 0xef, 0xd1, 0x96, 0x8e, - 0x08, 0xfe, 0x09, 0x4b, 0x59, 0xc4, 0x82, 0x10, 0x44, 0xbd, 0xaa, 0xe7, 0xd7, 0x29, 0xce, 0x4f, - 0xb5, 0x4e, 0x2d, 0x92, 0xf1, 0x3a, 0x3f, 0x86, 0x08, 0x3c, 0xc9, 0xf8, 0x09, 0xf0, 0xd8, 0xfd, - 0xc0, 0xcc, 0x6b, 0xab, 0x3b, 0x4b, 0x45, 0xca, 0xec, 0x8d, 0xcf, 0xd0, 0x9d, 0x99, 0x81, 0xe3, - 0x4d, 0x54, 0xe9, 0xc3, 0xb9, 0x5e, 0xe9, 0x35, 0xa2, 0x7e, 0xe2, 0x6d, 0xb4, 0x3c, 0xa4, 0xd1, - 0x00, 0xf2, 0x0d, 0x24, 0xb9, 0xf0, 0xe9, 0xe2, 0xbe, 0xd5, 0xfe, 0xc3, 0x42, 0x9b, 0xc5, 0xed, - 0x39, 0x0c, 0x85, 0xc4, 0xdf, 0x94, 0x0e, 0xc3, 0x7e, 0xbd, 0xc3, 0x50, 0x68, 0x7d, 0x16, 0x9b, - 0xa6, 0x86, 0xea, 0xb5, 0xa6, 0x70, 0x14, 0x3d, 0xb4, 0x1c, 0x4a, 0x88, 0x45, 0x7d, 0xb1, 0xdc, - 0x98, 0xff, 0x5b, 0x6c, 0x77, 0xc3, 0x90, 0x2e, 0x7f, 0xa1, 0xe0, 0x24, 0x67, 0x69, 0xff, 0xbe, - 0x88, 0x36, 0xf3, 0xe1, 0x74, 0xa5, 0xa4, 0xde, 0x59, 0x0c, 0x89, 0x7c, 0x0b, 0xa7, 0x4d, 0xd0, - 0x92, 0x48, 0xc1, 0xd3, 0x1d, 0x9d, 0x66, 0x2f, 0x15, 0x31, 0x9b, 0xdd, 0x71, 0x0a, 0x9e, 0xbb, - 0x6e, 0xd8, 0x97, 0x94, 0x44, 0x34, 0x17, 0x7e, 0x86, 0x56, 0x84, 0xa4, 0x72, 0xa0, 0x6e, 0x5e, - 0xb1, 0xee, 0xdd, 0x8a, 0x55, 0x23, 0xdd, 0x77, 0x0c, 0xef, 0x4a, 0x2e, 0x13, 0xc3, 0xd8, 0xfe, - 0xd3, 0x42, 0xdb, 0xb3, 0x90, 0xb7, 0x30, 0xec, 0xaf, 0xa6, 0x87, 0x7d, 0xef, 0x36, 0x15, 0xdd, - 0x30, 0xf0, 0xe7, 0xe8, 0xbd, 0x52, 0xed, 0x6c, 0xc0, 0x3d, 0x50, 0xcf, 0x44, 0x3a, 0xf3, 0x18, - 0x3d, 0xa6, 0x31, 0xe4, 0x97, 0x90, 0x3f, 0x13, 0x47, 0x73, 0xec, 0x64, 0x2e, 0xaa, 0xfd, 0xd7, - 0x9c, 0x8e, 0xa9, 0x61, 0xe1, 0x7b, 0xa8, 0x4a, 0xb5, 0x06, 0xb8, 0xa1, 0x1e, 0x77, 0xa0, 0x6b, - 0xf4, 0x64, 0xec, 0xa1, 0x87, 0xaa, 0xd3, 0x33, 0xab, 0x72, 0xbb, 0xa1, 0x6a, 0x64, 0x61, 0xa8, - 0x5a, 0x26, 0x86, 0x51, 0x65, 0x92, 0x30, 0x3f, 0x2f, 0xb2, 0x32, 0x9d, 0xc9, 0x63, 0xa3, 0x27, - 0x63, 0x8f, 0xf6, 0xbf, 0x95, 0x39, 0x9d, 0xd3, 0xdb, 0x51, 0x28, 0xc9, 0xd7, 0x25, 0x55, 0x4b, - 0x25, 0xf9, 0xe3, 0x92, 0x7c, 0xfc, 0x9b, 0x85, 0x30, 0x1d, 0x53, 0xf4, 0xae, 0xb7, 0x27, 0x1f, - 0xf1, 0x97, 0xb7, 0x5f, 0x5a, 0xbb, 0x5b, 0x22, 0xcb, 0x3f, 0x5d, 0x0d, 0x93, 0x04, 0x2e, 0x3b, - 0x90, 0x39, 0x19, 0xe0, 0x10, 0xd5, 0x72, 0xed, 0x01, 0xe7, 0x8c, 0x9b, 0x2b, 0xfa, 0xf0, 0xd5, - 0x09, 0x69, 0x77, 0xb7, 0xa9, 0x3e, 0xca, 0xdd, 0x09, 0xfe, 0x6a, 0xd4, 0xaa, 0x15, 0xec, 0xa4, - 0xc8, 0xad, 0x42, 0xf9, 0x30, 0x09, 0xb5, 0xf4, 0x06, 0xa1, 0x3e, 0x87, 0x9b, 0x43, 0x15, 0xb8, - 0x1b, 0x07, 0xe8, 0xfd, 0x1b, 0x1a, 0x74, 0xab, 0xa7, 0xfe, 0x67, 0x0b, 0x15, 0x63, 0xe0, 0x43, - 0xb4, 0xa4, 0xfe, 0x2e, 0x99, 0xa3, 0xbf, 0xfb, 0x7a, 0x47, 0x7f, 0x12, 0xc6, 0x30, 0x79, 0xbb, - 0x94, 0x44, 0x34, 0x0b, 0xfe, 0x08, 0xad, 0xc6, 0x20, 0x04, 0x0d, 0x4c, 0x64, 0xf7, 0x8e, 0x71, - 0x5a, 0xed, 0xe5, 0x6a, 0x72, 0x6d, 0x77, 0xef, 0x5f, 0x5c, 0x36, 0x17, 0x5e, 0x5c, 0x36, 0x17, - 0x5e, 0x5e, 0x36, 0x17, 0x7e, 0xca, 0x9a, 0xd6, 0x45, 0xd6, 0xb4, 0x5e, 0x64, 0x4d, 0xeb, 0x65, - 0xd6, 0xb4, 0xfe, 0xce, 0x9a, 0xd6, 0x2f, 0xff, 0x34, 0x17, 0x9e, 0xad, 0x9a, 0xbe, 0xfd, 0x17, - 0x00, 0x00, 0xff, 0xff, 0xb4, 0x63, 0x7e, 0xa7, 0x0b, 0x0b, 0x00, 0x00, + // 1216 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xc6, 0x4e, 0x9c, 0x8c, 0x93, 0x36, 0x59, 0x22, 0x30, 0x3e, 0xd8, 0x91, 0x11, 0x34, + 0xad, 0xda, 0x75, 0x1b, 0x15, 0x14, 0x55, 0xe2, 0x60, 0x27, 0x91, 0x70, 0x1b, 0x27, 0x66, 0x12, + 0x55, 0xa8, 0xe2, 0xc0, 0x64, 0xf7, 0xc5, 0x59, 0xec, 0xdd, 0xd9, 0xce, 0x8e, 0x0d, 0xbe, 0x71, + 0x82, 0x23, 0x88, 0x03, 0x9f, 0x80, 0xaf, 0x00, 0x12, 0x5c, 0x38, 0x92, 0x13, 0xea, 0xb1, 0x27, + 0x8b, 0x98, 0x6f, 0x11, 0x71, 0x40, 0x33, 0x3b, 0xf6, 0xee, 0xfa, 0x4f, 0xe3, 0x70, 0xf0, 0xcd, + 0xf3, 0xde, 0xfb, 0xfd, 0xde, 0xdf, 0x79, 0xb3, 0x46, 0xbb, 0x8d, 0x1d, 0xdf, 0xb0, 0x69, 0xb1, + 0xd1, 0x3a, 0x05, 0xe6, 0x02, 0x07, 0xbf, 0xd8, 0x06, 0xd7, 0xa2, 0xac, 0xa8, 0x14, 0xc4, 0xb3, + 0x8b, 0x3e, 0xa7, 0x8c, 0xd4, 0xa1, 0xd8, 0x7e, 0x74, 0x0a, 0x9c, 0x3c, 0x2a, 0xd6, 0xc1, 0x05, + 0x46, 0x38, 0x58, 0x86, 0xc7, 0x28, 0xa7, 0x7a, 0x36, 0xb0, 0x35, 0x88, 0x67, 0x1b, 0xca, 0xd6, + 0x50, 0xb6, 0xd9, 0x07, 0x75, 0x9b, 0x9f, 0xb7, 0x4e, 0x0d, 0x93, 0x3a, 0xc5, 0x3a, 0xad, 0xd3, + 0xa2, 0x84, 0x9c, 0xb6, 0xce, 0xe4, 0x49, 0x1e, 0xe4, 0xaf, 0x80, 0x2a, 0x5b, 0x88, 0xb8, 0x35, + 0x29, 0x13, 0x3e, 0x87, 0xdd, 0x65, 0x1f, 0x87, 0x36, 0x0e, 0x31, 0xcf, 0x6d, 0x17, 0x58, 0xa7, + 0xe8, 0x35, 0xea, 0x42, 0xe0, 0x17, 0x1d, 0xe0, 0x64, 0x1c, 0xaa, 0x38, 0x09, 0xc5, 0x5a, 0x2e, + 0xb7, 0x1d, 0x18, 0x01, 0x7c, 0x74, 0x1d, 0xc0, 0x37, 0xcf, 0xc1, 0x21, 0xc3, 0xb8, 0xc2, 0xef, + 0x1a, 0x5a, 0xde, 0x3d, 0xae, 0xec, 0x31, 0xbb, 0x0d, 0x4c, 0xff, 0x02, 0x2d, 0x89, 0x88, 0x2c, + 0xc2, 0x49, 0x46, 0xdb, 0xd4, 0xb6, 0xd2, 0xdb, 0x0f, 0x8d, 0xb0, 0x5c, 0x03, 0x62, 0xc3, 0x6b, + 0xd4, 0x85, 0xc0, 0x37, 0x84, 0xb5, 0xd1, 0x7e, 0x64, 0x1c, 0x9d, 0x7e, 0x09, 0x26, 0xaf, 0x02, + 0x27, 0x65, 0xfd, 0xa2, 0x9b, 0x9f, 0xeb, 0x75, 0xf3, 0x28, 0x94, 0xe1, 0x01, 0xab, 0xfe, 0x0c, + 0x25, 0x7d, 0x0f, 0xcc, 0xcc, 0xbc, 0x64, 0xbf, 0x6b, 0x4c, 0x6e, 0x86, 0x31, 0x08, 0xeb, 0xd8, + 0x03, 0xb3, 0xbc, 0xa2, 0x68, 0x93, 0xe2, 0x84, 0x25, 0x49, 0xe1, 0x37, 0x0d, 0xad, 0x0e, 0xac, + 0x0e, 0x6c, 0x9f, 0xeb, 0x9f, 0x8f, 0x24, 0x60, 0x4c, 0x97, 0x80, 0x40, 0xcb, 0xf0, 0xd7, 0x94, + 0x9f, 0xa5, 0xbe, 0x24, 0x12, 0xfc, 0x53, 0xb4, 0x60, 0x73, 0x70, 0xfc, 0xcc, 0xfc, 0x66, 0x62, + 0x2b, 0xbd, 0xfd, 0xfe, 0x54, 0xd1, 0x97, 0x57, 0x15, 0xe3, 0x42, 0x45, 0x60, 0x71, 0x40, 0x51, + 0xf8, 0x2e, 0x1a, 0xbb, 0xc8, 0x49, 0x7f, 0x82, 0x6e, 0x11, 0xce, 0x89, 0x79, 0x8e, 0xe1, 0x65, + 0xcb, 0x66, 0x60, 0xc9, 0x0c, 0x96, 0xca, 0x7a, 0xaf, 0x9b, 0xbf, 0x55, 0x8a, 0x69, 0xf0, 0x90, + 0xa5, 0xc0, 0x7a, 0xd4, 0xaa, 0xb8, 0x67, 0xf4, 0xc8, 0xad, 0xd2, 0x96, 0xcb, 0x65, 0x81, 0x15, + 0xb6, 0x16, 0xd3, 0xe0, 0x21, 0xcb, 0xc2, 0xaf, 0x1a, 0x4a, 0xed, 0x1e, 0x57, 0x0e, 0xa9, 0x05, + 0x33, 0x18, 0x80, 0x4a, 0x6c, 0x00, 0xee, 0x5c, 0x53, 0x42, 0x11, 0xd4, 0xc4, 0xf6, 0x7f, 0x1f, + 0x94, 0x50, 0xd8, 0xa8, 0xf9, 0xdd, 0x44, 0x49, 0x97, 0x38, 0x20, 0x43, 0x5f, 0x0e, 0x31, 0x87, + 0xc4, 0x01, 0x2c, 0x35, 0xfa, 0x07, 0x68, 0xd1, 0xa5, 0x16, 0x54, 0xf6, 0x64, 0x00, 0xcb, 0xe5, + 0x5b, 0xca, 0x66, 0xf1, 0x50, 0x4a, 0xb1, 0xd2, 0xea, 0x8f, 0xd1, 0x0a, 0xa7, 0x1e, 0x6d, 0xd2, + 0x7a, 0xe7, 0x19, 0x74, 0xfc, 0x4c, 0x62, 0x33, 0xb1, 0xb5, 0x5c, 0x5e, 0xeb, 0x75, 0xf3, 0x2b, + 0x27, 0x11, 0x39, 0x8e, 0x59, 0x15, 0x7e, 0xd1, 0x50, 0x5a, 0x45, 0x34, 0x83, 0x71, 0xfc, 0x24, + 0x3e, 0x8e, 0xef, 0x4d, 0x51, 0xcb, 0x09, 0xc3, 0x68, 0x0e, 0xc2, 0x96, 0x93, 0x78, 0x82, 0x52, + 0x96, 0x2c, 0xa8, 0x9f, 0xd1, 0x24, 0xf5, 0xdd, 0x29, 0xa8, 0xd5, 0xb4, 0xdf, 0x56, 0x0e, 0x52, + 0xc1, 0xd9, 0xc7, 0x7d, 0xaa, 0xc2, 0x8f, 0x8b, 0x68, 0xe5, 0x38, 0xc0, 0xee, 0x36, 0x89, 0xef, + 0xcf, 0x60, 0xd8, 0x3e, 0x44, 0x69, 0x8f, 0xd1, 0xb6, 0xed, 0xdb, 0xd4, 0x05, 0xa6, 0x5a, 0xfe, + 0x96, 0x82, 0xa4, 0x6b, 0xa1, 0x0a, 0x47, 0xed, 0xf4, 0x26, 0x42, 0x1e, 0x61, 0xc4, 0x01, 0x2e, + 0x4a, 0x90, 0x90, 0x25, 0xd8, 0x79, 0x53, 0x09, 0xa2, 0x69, 0x19, 0xb5, 0x01, 0x74, 0xdf, 0xe5, + 0xac, 0x13, 0x86, 0x18, 0x2a, 0x70, 0x84, 0x5f, 0x6f, 0xa0, 0x55, 0x06, 0x66, 0x93, 0xd8, 0x4e, + 0x8d, 0x36, 0x6d, 0xb3, 0x93, 0x49, 0xca, 0x30, 0xf7, 0x7b, 0xdd, 0xfc, 0x2a, 0x8e, 0x2a, 0xae, + 0xba, 0xf9, 0x87, 0xa3, 0x2f, 0x8e, 0x51, 0x03, 0xe6, 0xdb, 0x3e, 0x07, 0x97, 0x3f, 0xa7, 0xcd, + 0x96, 0x03, 0x31, 0x0c, 0x8e, 0x73, 0x8b, 0xb9, 0x76, 0xc4, 0xad, 0x3f, 0xf2, 0xb8, 0x4d, 0x5d, + 0x3f, 0xb3, 0x10, 0xce, 0x75, 0x35, 0x22, 0xc7, 0x31, 0x2b, 0xfd, 0x00, 0x6d, 0x90, 0x66, 0x93, + 0x7e, 0x15, 0x38, 0xd8, 0xff, 0xda, 0x23, 0xae, 0x28, 0x55, 0x66, 0x51, 0x2e, 0x99, 0x4c, 0xaf, + 0x9b, 0xdf, 0x28, 0x8d, 0xd1, 0xe3, 0xb1, 0x28, 0xfd, 0x33, 0xb4, 0xde, 0x96, 0xa2, 0xb2, 0xed, + 0x5a, 0xb6, 0x5b, 0xaf, 0x52, 0x0b, 0x32, 0x29, 0x99, 0xf4, 0xbd, 0x5e, 0x37, 0xbf, 0xfe, 0x7c, + 0x58, 0x79, 0x35, 0x4e, 0x88, 0x47, 0x49, 0xf4, 0x97, 0x68, 0x5d, 0x7a, 0x04, 0x4b, 0x5d, 0x52, + 0x1b, 0xfc, 0xcc, 0x92, 0xec, 0xdf, 0x56, 0xb4, 0x7f, 0xa2, 0x74, 0x62, 0x90, 0xfa, 0x57, 0xf9, + 0x18, 0x9a, 0x60, 0x72, 0xca, 0x4e, 0x80, 0x39, 0xe5, 0x77, 0x55, 0xbf, 0xd6, 0x4b, 0xc3, 0x54, + 0x78, 0x94, 0x3d, 0xfb, 0x31, 0xba, 0x3d, 0xd4, 0x70, 0x7d, 0x0d, 0x25, 0x1a, 0xd0, 0x09, 0x96, + 0x10, 0x16, 0x3f, 0xf5, 0x0d, 0xb4, 0xd0, 0x26, 0xcd, 0x16, 0x04, 0x13, 0x88, 0x83, 0xc3, 0x93, + 0xf9, 0x1d, 0xad, 0xf0, 0x87, 0x86, 0xd6, 0xa2, 0xd3, 0x33, 0x83, 0xb5, 0x51, 0x8d, 0xaf, 0x8d, + 0xad, 0x69, 0x07, 0x7b, 0xc2, 0xee, 0xf8, 0x79, 0x1e, 0xad, 0x05, 0xcd, 0x09, 0xde, 0x28, 0x07, + 0x5c, 0x3e, 0x83, 0xab, 0x8d, 0x63, 0xef, 0xc8, 0xc3, 0x37, 0x25, 0x31, 0x1c, 0xdd, 0xa4, 0x07, + 0x45, 0x7f, 0x81, 0x16, 0x7d, 0x4e, 0x78, 0x4b, 0xdc, 0x79, 0xc1, 0xba, 0x7d, 0x23, 0x56, 0x89, + 0x0c, 0x1f, 0x94, 0xe0, 0x8c, 0x15, 0x63, 0xe1, 0x4f, 0x0d, 0x6d, 0x0c, 0x43, 0x66, 0xd0, 0xec, + 0x4f, 0xe3, 0xcd, 0xbe, 0x7f, 0x93, 0x8c, 0x26, 0x34, 0xfc, 0x0c, 0xbd, 0x3d, 0x92, 0x3b, 0x6d, + 0x31, 0x13, 0xc4, 0x9a, 0xf0, 0x86, 0x96, 0xd1, 0x61, 0xf8, 0x1c, 0xcb, 0x35, 0x51, 0x1b, 0xa3, + 0xc7, 0x63, 0x51, 0x85, 0xbf, 0xc6, 0x54, 0x4c, 0x3e, 0x4f, 0xf7, 0xd1, 0x52, 0xf0, 0xf9, 0x03, + 0x4c, 0x51, 0x0f, 0x2a, 0x50, 0x52, 0x72, 0x3c, 0xb0, 0x90, 0x4d, 0x95, 0xe1, 0xa9, 0x51, 0xb9, + 0x59, 0x53, 0x25, 0x32, 0xd2, 0x54, 0x79, 0xc6, 0x8a, 0x51, 0x44, 0x22, 0xbe, 0x17, 0x64, 0x92, + 0x89, 0x78, 0x24, 0x87, 0x4a, 0x8e, 0x07, 0x16, 0x85, 0x7f, 0x13, 0x63, 0x2a, 0x27, 0xa7, 0x23, + 0x92, 0x52, 0xff, 0xab, 0x6f, 0x38, 0x25, 0x6b, 0x90, 0x92, 0xa5, 0xff, 0xa4, 0x21, 0x9d, 0x0c, + 0x28, 0xaa, 0xfd, 0xe9, 0x09, 0x5a, 0xfc, 0xf4, 0xe6, 0x43, 0x6b, 0x94, 0x46, 0xc8, 0x82, 0xa7, + 0x2b, 0xab, 0x82, 0xd0, 0x47, 0x0d, 0xf0, 0x98, 0x08, 0x74, 0x1b, 0xa5, 0x03, 0xe9, 0x3e, 0x63, + 0x94, 0xa9, 0x5b, 0x74, 0xe7, 0xfa, 0x80, 0xa4, 0x79, 0x39, 0x27, 0x1e, 0xe5, 0x52, 0x88, 0xbf, + 0xea, 0xe6, 0xd3, 0x11, 0x3d, 0x8e, 0x72, 0x0b, 0x57, 0x16, 0x84, 0xae, 0x92, 0xff, 0xc3, 0xd5, + 0x1e, 0x4c, 0x76, 0x15, 0xe1, 0xce, 0xee, 0xa3, 0x77, 0x26, 0x14, 0xe8, 0x46, 0xab, 0xfe, 0x5b, + 0x0d, 0x45, 0x7d, 0xe8, 0x07, 0x28, 0x29, 0xfe, 0x99, 0xa9, 0x4b, 0x7f, 0x6f, 0xba, 0x4b, 0x7f, + 0x62, 0x3b, 0x10, 0xee, 0x2e, 0x71, 0xc2, 0x92, 0x45, 0xbf, 0x8b, 0x52, 0x0e, 0xf8, 0x3e, 0xa9, + 0x2b, 0xcf, 0xe1, 0x87, 0x58, 0x35, 0x10, 0xe3, 0xbe, 0xbe, 0xfc, 0xe0, 0xe2, 0x32, 0x37, 0xf7, + 0xea, 0x32, 0x37, 0xf7, 0xfa, 0x32, 0x37, 0xf7, 0x4d, 0x2f, 0xa7, 0x5d, 0xf4, 0x72, 0xda, 0xab, + 0x5e, 0x4e, 0x7b, 0xdd, 0xcb, 0x69, 0x7f, 0xf7, 0x72, 0xda, 0x0f, 0xff, 0xe4, 0xe6, 0x5e, 0xa4, + 0x54, 0xdd, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x78, 0xdc, 0x5e, 0x79, 0x76, 0x0f, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.proto b/vendor/k8s.io/api/storage/v1beta1/generated.proto index db1f302a053..6d9fe90499b 100644 --- a/vendor/k8s.io/api/storage/v1beta1/generated.proto +++ b/vendor/k8s.io/api/storage/v1beta1/generated.proto @@ -29,6 +29,143 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// CSIDriver captures information about a Container Storage Interface (CSI) +// volume driver deployed on the cluster. +// CSI drivers do not need to create the CSIDriver object directly. Instead they may use the +// cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically +// creates a CSIDriver object representing the driver. +// Kubernetes attach detach controller uses this object to determine whether attach is required. +// Kubelet uses this object to determine whether pod information needs to be passed on mount. +// CSIDriver objects are non-namespaced. +message CSIDriver { + // Standard object metadata. + // metadata.Name indicates the name of the CSI driver that this object + // refers to; it MUST be the same name returned by the CSI GetPluginName() + // call for that driver. + // The driver name must be 63 characters or less, beginning and ending with + // an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the CSI Driver. + optional CSIDriverSpec spec = 2; +} + +// CSIDriverList is a collection of CSIDriver objects. +message CSIDriverList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of CSIDriver + repeated CSIDriver items = 2; +} + +// CSIDriverSpec is the specification of a CSIDriver. +message CSIDriverSpec { + // attachRequired indicates this CSI volume driver requires an attach + // operation (because it implements the CSI ControllerPublishVolume() + // method), and that the Kubernetes attach detach controller should call + // the attach volume interface which checks the volumeattachment status + // and waits until the volume is attached before proceeding to mounting. + // The CSI external-attacher coordinates with CSI volume driver and updates + // the volumeattachment status when the attach operation is complete. + // If the CSIDriverRegistry feature gate is enabled and the value is + // specified to false, the attach operation will be skipped. + // Otherwise the attach operation will be called. + // +optional + optional bool attachRequired = 1; + + // If set to true, podInfoOnMount indicates this CSI volume driver + // requires additional pod information (like podName, podUID, etc.) during + // mount operations. + // If set to false, pod information will not be passed on mount. + // Default is false. + // The CSI driver specifies podInfoOnMount as part of driver deployment. + // If true, Kubelet will pass pod information as VolumeContext in the CSI + // NodePublishVolume() calls. + // The CSI driver is responsible for parsing and validating the information + // passed in as VolumeContext. + // The following VolumeConext will be passed if podInfoOnMount is set to true. + // This list might grow, but the prefix will be used. + // "csi.storage.k8s.io/pod.name": pod.Name + // "csi.storage.k8s.io/pod.namespace": pod.Namespace + // "csi.storage.k8s.io/pod.uid": string(pod.UID) + // +optional + optional bool podInfoOnMount = 2; +} + +// CSINode holds information about all CSI drivers installed on a node. +// CSI drivers do not need to create the CSINode object directly. As long as +// they use the node-driver-registrar sidecar container, the kubelet will +// automatically populate the CSINode object for the CSI driver as part of +// kubelet plugin registration. +// CSINode has the same name as a node. If the object is missing, it means either +// there are no CSI Drivers available on the node, or the Kubelet version is low +// enough that it doesn't create this object. +// CSINode has an OwnerReference that points to the corresponding node object. +message CSINode { + // metadata.name must be the Kubernetes node name. + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the specification of CSINode + optional CSINodeSpec spec = 2; +} + +// CSINodeDriver holds information about the specification of one CSI driver installed on a node +message CSINodeDriver { + // This is the name of the CSI driver that this object refers to. + // This MUST be the same name returned by the CSI GetPluginName() call for + // that driver. + optional string name = 1; + + // nodeID of the node from the driver point of view. + // This field enables Kubernetes to communicate with storage systems that do + // not share the same nomenclature for nodes. For example, Kubernetes may + // refer to a given node as "node1", but the storage system may refer to + // the same node as "nodeA". When Kubernetes issues a command to the storage + // system to attach a volume to a specific node, it can use this field to + // refer to the node name using the ID that the storage system will + // understand, e.g. "nodeA" instead of "node1". This field is required. + optional string nodeID = 2; + + // topologyKeys is the list of keys supported by the driver. + // When a driver is initialized on a cluster, it provides a set of topology + // keys that it understands (e.g. "company.com/zone", "company.com/region"). + // When a driver is initialized on a node, it provides the same topology keys + // along with values. Kubelet will expose these topology keys as labels + // on its own node object. + // When Kubernetes does topology aware provisioning, it can use this list to + // determine which labels it should retrieve from the node object and pass + // back to the driver. + // It is possible for different nodes to use different topology keys. + // This can be empty if driver does not support topology. + // +optional + repeated string topologyKeys = 3; +} + +// CSINodeList is a collection of CSINode objects. +message CSINodeList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of CSINode + repeated CSINode items = 2; +} + +// CSINodeSpec holds information about the specification of all CSI drivers installed on a node +message CSINodeSpec { + // drivers is a list of information of all CSI Drivers existing on a node. + // If all drivers in the list are uninstalled, this can become empty. + // +patchMergeKey=name + // +patchStrategy=merge + repeated CSINodeDriver drivers = 1; +} + // StorageClass describes the parameters for a class of storage for // which PersistentVolumes can be dynamically provisioned. // @@ -178,7 +315,7 @@ message VolumeError { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time time = 1; // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional optional string message = 2; diff --git a/vendor/k8s.io/api/storage/v1beta1/register.go b/vendor/k8s.io/api/storage/v1beta1/register.go index 06b0f3d5299..c270ace57d6 100644 --- a/vendor/k8s.io/api/storage/v1beta1/register.go +++ b/vendor/k8s.io/api/storage/v1beta1/register.go @@ -49,6 +49,12 @@ func addKnownTypes(scheme *runtime.Scheme) error { &VolumeAttachment{}, &VolumeAttachmentList{}, + + &CSIDriver{}, + &CSIDriverList{}, + + &CSINode{}, + &CSINodeList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff --git a/vendor/k8s.io/api/storage/v1beta1/types.go b/vendor/k8s.io/api/storage/v1beta1/types.go index 5702c21bcc8..49005791202 100644 --- a/vendor/k8s.io/api/storage/v1beta1/types.go +++ b/vendor/k8s.io/api/storage/v1beta1/types.go @@ -204,8 +204,165 @@ type VolumeError struct { Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"` // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` } + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriver captures information about a Container Storage Interface (CSI) +// volume driver deployed on the cluster. +// CSI drivers do not need to create the CSIDriver object directly. Instead they may use the +// cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically +// creates a CSIDriver object representing the driver. +// Kubernetes attach detach controller uses this object to determine whether attach is required. +// Kubelet uses this object to determine whether pod information needs to be passed on mount. +// CSIDriver objects are non-namespaced. +type CSIDriver struct { + metav1.TypeMeta `json:",inline"` + + // Standard object metadata. + // metadata.Name indicates the name of the CSI driver that this object + // refers to; it MUST be the same name returned by the CSI GetPluginName() + // call for that driver. + // The driver name must be 63 characters or less, beginning and ending with + // an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the CSI Driver. + Spec CSIDriverSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriverList is a collection of CSIDriver objects. +type CSIDriverList struct { + metav1.TypeMeta `json:",inline"` + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of CSIDriver + Items []CSIDriver `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// CSIDriverSpec is the specification of a CSIDriver. +type CSIDriverSpec struct { + // attachRequired indicates this CSI volume driver requires an attach + // operation (because it implements the CSI ControllerPublishVolume() + // method), and that the Kubernetes attach detach controller should call + // the attach volume interface which checks the volumeattachment status + // and waits until the volume is attached before proceeding to mounting. + // The CSI external-attacher coordinates with CSI volume driver and updates + // the volumeattachment status when the attach operation is complete. + // If the CSIDriverRegistry feature gate is enabled and the value is + // specified to false, the attach operation will be skipped. + // Otherwise the attach operation will be called. + // +optional + AttachRequired *bool `json:"attachRequired,omitempty" protobuf:"varint,1,opt,name=attachRequired"` + + // If set to true, podInfoOnMount indicates this CSI volume driver + // requires additional pod information (like podName, podUID, etc.) during + // mount operations. + // If set to false, pod information will not be passed on mount. + // Default is false. + // The CSI driver specifies podInfoOnMount as part of driver deployment. + // If true, Kubelet will pass pod information as VolumeContext in the CSI + // NodePublishVolume() calls. + // The CSI driver is responsible for parsing and validating the information + // passed in as VolumeContext. + // The following VolumeConext will be passed if podInfoOnMount is set to true. + // This list might grow, but the prefix will be used. + // "csi.storage.k8s.io/pod.name": pod.Name + // "csi.storage.k8s.io/pod.namespace": pod.Namespace + // "csi.storage.k8s.io/pod.uid": string(pod.UID) + // +optional + PodInfoOnMount *bool `json:"podInfoOnMount,omitempty" protobuf:"bytes,2,opt,name=podInfoOnMount"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINode holds information about all CSI drivers installed on a node. +// CSI drivers do not need to create the CSINode object directly. As long as +// they use the node-driver-registrar sidecar container, the kubelet will +// automatically populate the CSINode object for the CSI driver as part of +// kubelet plugin registration. +// CSINode has the same name as a node. If the object is missing, it means either +// there are no CSI Drivers available on the node, or the Kubelet version is low +// enough that it doesn't create this object. +// CSINode has an OwnerReference that points to the corresponding node object. +type CSINode struct { + metav1.TypeMeta `json:",inline"` + + // metadata.name must be the Kubernetes node name. + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the specification of CSINode + Spec CSINodeSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// CSINodeSpec holds information about the specification of all CSI drivers installed on a node +type CSINodeSpec struct { + // drivers is a list of information of all CSI Drivers existing on a node. + // If all drivers in the list are uninstalled, this can become empty. + // +patchMergeKey=name + // +patchStrategy=merge + Drivers []CSINodeDriver `json:"drivers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,1,rep,name=drivers"` +} + +// CSINodeDriver holds information about the specification of one CSI driver installed on a node +type CSINodeDriver struct { + // This is the name of the CSI driver that this object refers to. + // This MUST be the same name returned by the CSI GetPluginName() call for + // that driver. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // nodeID of the node from the driver point of view. + // This field enables Kubernetes to communicate with storage systems that do + // not share the same nomenclature for nodes. For example, Kubernetes may + // refer to a given node as "node1", but the storage system may refer to + // the same node as "nodeA". When Kubernetes issues a command to the storage + // system to attach a volume to a specific node, it can use this field to + // refer to the node name using the ID that the storage system will + // understand, e.g. "nodeA" instead of "node1". This field is required. + NodeID string `json:"nodeID" protobuf:"bytes,2,opt,name=nodeID"` + + // topologyKeys is the list of keys supported by the driver. + // When a driver is initialized on a cluster, it provides a set of topology + // keys that it understands (e.g. "company.com/zone", "company.com/region"). + // When a driver is initialized on a node, it provides the same topology keys + // along with values. Kubelet will expose these topology keys as labels + // on its own node object. + // When Kubernetes does topology aware provisioning, it can use this list to + // determine which labels it should retrieve from the node object and pass + // back to the driver. + // It is possible for different nodes to use different topology keys. + // This can be empty if driver does not support topology. + // +optional + TopologyKeys []string `json:"topologyKeys" protobuf:"bytes,3,rep,name=topologyKeys"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINodeList is a collection of CSINode objects. +type CSINodeList struct { + metav1.TypeMeta `json:",inline"` + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of CSINode + Items []CSINode `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go index 8096dba9be7..022815f1830 100644 --- a/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go @@ -25,6 +25,196 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriver) DeepCopyInto(out *CSIDriver) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriver. +func (in *CSIDriver) DeepCopy() *CSIDriver { + if in == nil { + return nil + } + out := new(CSIDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriver) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverList) DeepCopyInto(out *CSIDriverList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSIDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverList. +func (in *CSIDriverList) DeepCopy() *CSIDriverList { + if in == nil { + return nil + } + out := new(CSIDriverList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriverList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverSpec) DeepCopyInto(out *CSIDriverSpec) { + *out = *in + if in.AttachRequired != nil { + in, out := &in.AttachRequired, &out.AttachRequired + *out = new(bool) + **out = **in + } + if in.PodInfoOnMount != nil { + in, out := &in.PodInfoOnMount, &out.PodInfoOnMount + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverSpec. +func (in *CSIDriverSpec) DeepCopy() *CSIDriverSpec { + if in == nil { + return nil + } + out := new(CSIDriverSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINode) DeepCopyInto(out *CSINode) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINode. +func (in *CSINode) DeepCopy() *CSINode { + if in == nil { + return nil + } + out := new(CSINode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINode) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeDriver) DeepCopyInto(out *CSINodeDriver) { + *out = *in + if in.TopologyKeys != nil { + in, out := &in.TopologyKeys, &out.TopologyKeys + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeDriver. +func (in *CSINodeDriver) DeepCopy() *CSINodeDriver { + if in == nil { + return nil + } + out := new(CSINodeDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeList) DeepCopyInto(out *CSINodeList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSINode, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeList. +func (in *CSINodeList) DeepCopy() *CSINodeList { + if in == nil { + return nil + } + out := new(CSINodeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINodeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeSpec) DeepCopyInto(out *CSINodeSpec) { + *out = *in + if in.Drivers != nil { + in, out := &in.Drivers, &out.Drivers + *out = make([]CSINodeDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeSpec. +func (in *CSINodeSpec) DeepCopy() *CSINodeSpec { + if in == nil { + return nil + } + out := new(CSINodeSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StorageClass) DeepCopyInto(out *StorageClass) { *out = *in diff --git a/vendor/k8s.io/apiextensions-apiserver/BUILD b/vendor/k8s.io/apiextensions-apiserver/BUILD index e555fb761c0..a52a7a2b2f0 100644 --- a/vendor/k8s.io/apiextensions-apiserver/BUILD +++ b/vendor/k8s.io/apiextensions-apiserver/BUILD @@ -19,7 +19,7 @@ go_library( deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -47,9 +47,11 @@ filegroup( "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer:all-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/crdserverscheme:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:all-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition:all-srcs", "//staging/src/k8s.io/apiextensions-apiserver/test/integration:all-srcs", diff --git a/vendor/k8s.io/apiextensions-apiserver/CONTRIBUTING.md b/vendor/k8s.io/apiextensions-apiserver/CONTRIBUTING.md index d8ad4d2d347..f4a25cf706b 100644 --- a/vendor/k8s.io/apiextensions-apiserver/CONTRIBUTING.md +++ b/vendor/k8s.io/apiextensions-apiserver/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/apiextensions-apiserver](https://git.k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/apiextensions-apiserver](https://git.k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/apiextensions-apiserver/OWNERS b/vendor/k8s.io/apiextensions-apiserver/OWNERS index 6d8c639240d..df1974380ae 100644 --- a/vendor/k8s.io/apiextensions-apiserver/OWNERS +++ b/vendor/k8s.io/apiextensions-apiserver/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - sttts diff --git a/vendor/k8s.io/apiextensions-apiserver/README.md b/vendor/k8s.io/apiextensions-apiserver/README.md index be75b9ba49d..c9c84bae58f 100644 --- a/vendor/k8s.io/apiextensions-apiserver/README.md +++ b/vendor/k8s.io/apiextensions-apiserver/README.md @@ -6,7 +6,7 @@ It provides an API for registering `CustomResourceDefinitions`. ## Purpose -This API server provides the implementation for `CustomResourceDefinitions` which is included as +This API server provides the implementation for `CustomResourceDefinitions` which is included as delegate server inside of `kube-apiserver`. diff --git a/vendor/k8s.io/apiextensions-apiserver/SECURITY_CONTACTS b/vendor/k8s.io/apiextensions-apiserver/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/apiextensions-apiserver/SECURITY_CONTACTS +++ b/vendor/k8s.io/apiextensions-apiserver/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS index bae178f8175..38336c177f9 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/helpers.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/helpers.go index 92cad7d9b73..2d0432a5508 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/helpers.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/helpers.go @@ -23,8 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// SetCRDCondition sets the status condition. It either overwrites the existing one or -// creates a new one +// SetCRDCondition sets the status condition. It either overwrites the existing one or creates a new one. func SetCRDCondition(crd *CustomResourceDefinition, newCondition CustomResourceDefinitionCondition) { existingCondition := FindCRDCondition(crd, newCondition.Type) if existingCondition == nil { @@ -53,7 +52,7 @@ func RemoveCRDCondition(crd *CustomResourceDefinition, conditionType CustomResou crd.Status.Conditions = newConditions } -// FindCRDCondition returns the condition you're looking for or nil +// FindCRDCondition returns the condition you're looking for or nil. func FindCRDCondition(crd *CustomResourceDefinition, conditionType CustomResourceDefinitionConditionType) *CustomResourceDefinitionCondition { for i := range crd.Status.Conditions { if crd.Status.Conditions[i].Type == conditionType { @@ -64,17 +63,17 @@ func FindCRDCondition(crd *CustomResourceDefinition, conditionType CustomResourc return nil } -// IsCRDConditionTrue indicates if the condition is present and strictly true +// IsCRDConditionTrue indicates if the condition is present and strictly true. func IsCRDConditionTrue(crd *CustomResourceDefinition, conditionType CustomResourceDefinitionConditionType) bool { return IsCRDConditionPresentAndEqual(crd, conditionType, ConditionTrue) } -// IsCRDConditionFalse indicates if the condition is present and false true +// IsCRDConditionFalse indicates if the condition is present and false. func IsCRDConditionFalse(crd *CustomResourceDefinition, conditionType CustomResourceDefinitionConditionType) bool { return IsCRDConditionPresentAndEqual(crd, conditionType, ConditionFalse) } -// IsCRDConditionPresentAndEqual indicates if the condition is present and equal to the arg +// IsCRDConditionPresentAndEqual indicates if the condition is present and equal to the given status. func IsCRDConditionPresentAndEqual(crd *CustomResourceDefinition, conditionType CustomResourceDefinitionConditionType, status ConditionStatus) bool { for _, condition := range crd.Status.Conditions { if condition.Type == conditionType { @@ -84,7 +83,7 @@ func IsCRDConditionPresentAndEqual(crd *CustomResourceDefinition, conditionType return false } -// IsCRDConditionEquivalent returns true if the lhs and rhs are equivalent except for times +// IsCRDConditionEquivalent returns true if the lhs and rhs are equivalent except for times. func IsCRDConditionEquivalent(lhs, rhs *CustomResourceDefinitionCondition) bool { if lhs == nil && rhs == nil { return true @@ -96,7 +95,7 @@ func IsCRDConditionEquivalent(lhs, rhs *CustomResourceDefinitionCondition) bool return lhs.Message == rhs.Message && lhs.Reason == rhs.Reason && lhs.Status == rhs.Status && lhs.Type == rhs.Type } -// CRDHasFinalizer returns true if the finalizer is in the list +// CRDHasFinalizer returns true if the finalizer is in the list. func CRDHasFinalizer(crd *CustomResourceDefinition, needle string) bool { for _, finalizer := range crd.Finalizers { if finalizer == needle { @@ -107,7 +106,7 @@ func CRDHasFinalizer(crd *CustomResourceDefinition, needle string) bool { return false } -// CRDRemoveFinalizer removes the finalizer if present +// CRDRemoveFinalizer removes the finalizer if present. func CRDRemoveFinalizer(crd *CustomResourceDefinition, needle string) { newFinalizers := []string{} for _, finalizer := range crd.Finalizers { @@ -118,7 +117,7 @@ func CRDRemoveFinalizer(crd *CustomResourceDefinition, needle string) { crd.Finalizers = newFinalizers } -// HasServedCRDVersion returns true if `version` is in the list of CRD's versions and the Served flag is set. +// HasServedCRDVersion returns true if the given version is in the list of CRD's versions and the Served flag is set. func HasServedCRDVersion(crd *CustomResourceDefinition, version string) bool { for _, v := range crd.Spec.Versions { if v.Name == version { @@ -139,6 +138,7 @@ func GetCRDStorageVersion(crd *CustomResourceDefinition) (string, error) { return "", fmt.Errorf("invalid CustomResourceDefinition, no storage version") } +// IsStoredVersion returns whether the given version is the storage version of the CRD. func IsStoredVersion(crd *CustomResourceDefinition, version string) bool { for _, v := range crd.Status.StoredVersions { if version == v { @@ -147,3 +147,108 @@ func IsStoredVersion(crd *CustomResourceDefinition, version string) bool { } return false } + +// GetSchemaForVersion returns the validation schema for the given version or nil. +func GetSchemaForVersion(crd *CustomResourceDefinition, version string) (*CustomResourceValidation, error) { + if !HasPerVersionSchema(crd.Spec.Versions) { + return crd.Spec.Validation, nil + } + if crd.Spec.Validation != nil { + return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version schemas must be mutual exclusive", crd.Name, version) + } + for _, v := range crd.Spec.Versions { + if version == v.Name { + return v.Schema, nil + } + } + return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) +} + +// GetSubresourcesForVersion returns the subresources for given version or nil. +func GetSubresourcesForVersion(crd *CustomResourceDefinition, version string) (*CustomResourceSubresources, error) { + if !HasPerVersionSubresources(crd.Spec.Versions) { + return crd.Spec.Subresources, nil + } + if crd.Spec.Subresources != nil { + return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version subresources must be mutual exclusive", crd.Name, version) + } + for _, v := range crd.Spec.Versions { + if version == v.Name { + return v.Subresources, nil + } + } + return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) +} + +// GetColumnsForVersion returns the columns for given version or nil. +// NOTE: the newly logically-defaulted columns is not pointing to the original CRD object. +// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through +// the original CRD object instead. +func GetColumnsForVersion(crd *CustomResourceDefinition, version string) ([]CustomResourceColumnDefinition, error) { + if !HasPerVersionColumns(crd.Spec.Versions) { + return serveDefaultColumnsIfEmpty(crd.Spec.AdditionalPrinterColumns), nil + } + if len(crd.Spec.AdditionalPrinterColumns) > 0 { + return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version additionalPrinterColumns must be mutual exclusive", crd.Name, version) + } + for _, v := range crd.Spec.Versions { + if version == v.Name { + return serveDefaultColumnsIfEmpty(v.AdditionalPrinterColumns), nil + } + } + return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) +} + +// HasPerVersionSchema returns true if a CRD uses per-version schema. +func HasPerVersionSchema(versions []CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if v.Schema != nil { + return true + } + } + return false +} + +// HasPerVersionSubresources returns true if a CRD uses per-version subresources. +func HasPerVersionSubresources(versions []CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if v.Subresources != nil { + return true + } + } + return false +} + +// HasPerVersionColumns returns true if a CRD uses per-version columns. +func HasPerVersionColumns(versions []CustomResourceDefinitionVersion) bool { + for _, v := range versions { + if len(v.AdditionalPrinterColumns) > 0 { + return true + } + } + return false +} + +// serveDefaultColumnsIfEmpty applies logically defaulting to columns, if the input columns is empty. +// NOTE: in this way, the newly logically-defaulted columns is not pointing to the original CRD object. +// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through +// the original CRD object instead. +func serveDefaultColumnsIfEmpty(columns []CustomResourceColumnDefinition) []CustomResourceColumnDefinition { + if len(columns) > 0 { + return columns + } + return []CustomResourceColumnDefinition{ + {Name: "Age", Type: "date", Description: "", JSONPath: ".metadata.creationTimestamp"}, + } +} + +// HasVersionServed returns true if given CRD has given version served. +func HasVersionServed(crd *CustomResourceDefinition, version string) bool { + for _, v := range crd.Spec.Versions { + if !v.Served || v.Name != version { + continue + } + return true + } + return false +} diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go index fcbd8bd197a..21873d46020 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go @@ -84,6 +84,15 @@ type CustomResourceConversion struct { // `webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. WebhookClientConfig *WebhookClientConfig + + // ConversionReviewVersions is an ordered list of preferred `ConversionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, conversion will fail for this object. + // If a persisted Webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail. + // +optional + ConversionReviewVersions []string } // WebhookClientConfig contains the information to make a TLS diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types_jsonschema.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types_jsonschema.go index 79f34e8bf65..af78c34fb6e 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types_jsonschema.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types_jsonschema.go @@ -23,6 +23,7 @@ type JSONSchemaProps struct { Ref *string Description string Type string + Nullable bool Format string Title string Default *JSON diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/defaults.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/defaults.go index 5579032d26f..b3db1ac7987 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/defaults.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/defaults.go @@ -68,4 +68,7 @@ func SetDefaults_CustomResourceDefinitionSpec(obj *CustomResourceDefinitionSpec) Strategy: NoneConverter, } } + if obj.Conversion.Strategy == WebhookConverter && len(obj.Conversion.ConversionReviewVersions) == 0 { + obj.Conversion.ConversionReviewVersions = []string{SchemeGroupVersion.Version} + } } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/doc.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/doc.go index acd09aca287..3f631dd4e6d 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/doc.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/apiextensions-apiserver/pkg/apis/apiextensions // +k8s:defaulter-gen=TypeMeta // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go index ef2dfe16aa6..ea46688ec36 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go @@ -416,6 +416,21 @@ func (m *CustomResourceConversion) MarshalTo(dAtA []byte) (int, error) { } i += n4 } + if len(m.ConversionReviewVersions) > 0 { + for _, s := range m.ConversionReviewVersions { + dAtA[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } return i, nil } @@ -1406,6 +1421,16 @@ func (m *JSONSchemaProps) MarshalTo(dAtA []byte) (int, error) { } i += n30 } + dAtA[i] = 0xa8 + i++ + dAtA[i] = 0x2 + i++ + if m.Nullable { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ return i, nil } @@ -1681,6 +1706,12 @@ func (m *CustomResourceConversion) Size() (n int) { l = m.WebhookClientConfig.Size() n += 1 + l + sovGenerated(uint64(l)) } + if len(m.ConversionReviewVersions) > 0 { + for _, s := range m.ConversionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -2043,6 +2074,7 @@ func (m *JSONSchemaProps) Size() (n int) { l = m.Example.Size() n += 2 + l + sovGenerated(uint64(l)) } + n += 3 return n } @@ -2191,6 +2223,7 @@ func (this *CustomResourceConversion) String() string { s := strings.Join([]string{`&CustomResourceConversion{`, `Strategy:` + fmt.Sprintf("%v", this.Strategy) + `,`, `WebhookClientConfig:` + strings.Replace(fmt.Sprintf("%v", this.WebhookClientConfig), "WebhookClientConfig", "WebhookClientConfig", 1) + `,`, + `ConversionReviewVersions:` + fmt.Sprintf("%v", this.ConversionReviewVersions) + `,`, `}`, }, "") return s @@ -2436,6 +2469,7 @@ func (this *JSONSchemaProps) String() string { `Definitions:` + mapStringForDefinitions + `,`, `ExternalDocs:` + strings.Replace(fmt.Sprintf("%v", this.ExternalDocs), "ExternalDocumentation", "ExternalDocumentation", 1) + `,`, `Example:` + strings.Replace(fmt.Sprintf("%v", this.Example), "JSON", "JSON", 1) + `,`, + `Nullable:` + fmt.Sprintf("%v", this.Nullable) + `,`, `}`, }, "") return s @@ -3205,6 +3239,35 @@ func (m *CustomResourceConversion) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConversionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConversionReviewVersions = append(m.ConversionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6511,6 +6574,26 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 37: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Nullable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Nullable = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -7253,177 +7336,179 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 2740 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0x1c, 0x47, - 0x15, 0xf7, 0xec, 0x6a, 0xa5, 0x55, 0x4b, 0xb2, 0xa4, 0xb6, 0xe5, 0x8c, 0x85, 0xbd, 0x2b, 0xad, - 0x49, 0x4a, 0x04, 0x7b, 0x15, 0x9b, 0x84, 0x84, 0x54, 0x71, 0xd0, 0x4a, 0x4a, 0x4a, 0xc6, 0xfa, - 0xa0, 0xd7, 0x76, 0x80, 0x7c, 0xb6, 0x66, 0x7b, 0x57, 0x63, 0xcd, 0x97, 0xa7, 0x67, 0x56, 0x52, - 0x05, 0x28, 0x48, 0x2a, 0x05, 0x45, 0x01, 0xa1, 0x88, 0x2f, 0x14, 0x70, 0x00, 0x8a, 0x0b, 0x45, - 0xc1, 0x01, 0x6e, 0xf0, 0x07, 0xf8, 0x98, 0xe2, 0x94, 0xd3, 0x16, 0xde, 0xfc, 0x0b, 0x54, 0x51, - 0xa5, 0x13, 0xd5, 0x1f, 0xd3, 0x33, 0x3b, 0xbb, 0x6b, 0xab, 0xe2, 0xdd, 0x98, 0x9b, 0xe6, 0xbd, - 0xd7, 0xef, 0xf7, 0xfa, 0xf5, 0x7b, 0xaf, 0x5f, 0xbf, 0x15, 0xa8, 0xef, 0xbf, 0x44, 0xcb, 0xa6, - 0xbb, 0xbc, 0x1f, 0xee, 0x12, 0xdf, 0x21, 0x01, 0xa1, 0xcb, 0x4d, 0xe2, 0xd4, 0x5c, 0x7f, 0x59, - 0x32, 0xb0, 0x67, 0x92, 0xc3, 0x80, 0x38, 0xd4, 0x74, 0x1d, 0x7a, 0x05, 0x7b, 0x26, 0x25, 0x7e, - 0x93, 0xf8, 0xcb, 0xde, 0x7e, 0x83, 0xf1, 0x68, 0xa7, 0xc0, 0x72, 0xf3, 0xea, 0x2e, 0x09, 0xf0, - 0xd5, 0xe5, 0x06, 0x71, 0x88, 0x8f, 0x03, 0x52, 0x2b, 0x7b, 0xbe, 0x1b, 0xb8, 0xf0, 0xeb, 0x42, - 0x5d, 0xb9, 0x43, 0xfa, 0x6d, 0xa5, 0xae, 0xec, 0xed, 0x37, 0x18, 0x8f, 0x76, 0x0a, 0x94, 0xa5, - 0xba, 0xf9, 0x2b, 0x0d, 0x33, 0xd8, 0x0b, 0x77, 0xcb, 0x86, 0x6b, 0x2f, 0x37, 0xdc, 0x86, 0xbb, - 0xcc, 0xb5, 0xee, 0x86, 0x75, 0xfe, 0xc5, 0x3f, 0xf8, 0x5f, 0x02, 0x6d, 0xfe, 0xf9, 0xd8, 0x78, - 0x1b, 0x1b, 0x7b, 0xa6, 0x43, 0xfc, 0xa3, 0xd8, 0x62, 0x9b, 0x04, 0x78, 0xb9, 0xd9, 0x65, 0xe3, - 0xfc, 0x72, 0xbf, 0x55, 0x7e, 0xe8, 0x04, 0xa6, 0x4d, 0xba, 0x16, 0x7c, 0xf5, 0x51, 0x0b, 0xa8, - 0xb1, 0x47, 0x6c, 0x9c, 0x5e, 0x57, 0x3a, 0xd6, 0xc0, 0xec, 0xaa, 0xeb, 0x34, 0x89, 0xcf, 0x76, - 0x89, 0xc8, 0xdd, 0x90, 0xd0, 0x00, 0x56, 0x40, 0x36, 0x34, 0x6b, 0xba, 0xb6, 0xa0, 0x2d, 0x8d, - 0x57, 0x9e, 0xbb, 0xdf, 0x2a, 0x9e, 0x6a, 0xb7, 0x8a, 0xd9, 0x5b, 0x1b, 0x6b, 0xc7, 0xad, 0xe2, - 0x62, 0x3f, 0xa4, 0xe0, 0xc8, 0x23, 0xb4, 0x7c, 0x6b, 0x63, 0x0d, 0xb1, 0xc5, 0xf0, 0x55, 0x30, - 0x5b, 0x23, 0xd4, 0xf4, 0x49, 0x6d, 0x65, 0x67, 0xe3, 0xb6, 0xd0, 0xaf, 0x67, 0xb8, 0xc6, 0xf3, - 0x52, 0xe3, 0xec, 0x5a, 0x5a, 0x00, 0x75, 0xaf, 0x81, 0xdf, 0x02, 0x63, 0xee, 0xee, 0x1d, 0x62, - 0x04, 0x54, 0xcf, 0x2e, 0x64, 0x97, 0x26, 0xae, 0x5d, 0x29, 0xc7, 0x27, 0xa8, 0x4c, 0xe0, 0xc7, - 0x26, 0x37, 0x5b, 0x46, 0xf8, 0x60, 0x3d, 0x3a, 0xb9, 0xca, 0xb4, 0x44, 0x1b, 0xdb, 0x16, 0x5a, - 0x50, 0xa4, 0xae, 0xf4, 0x87, 0x0c, 0x80, 0xc9, 0xcd, 0x53, 0xcf, 0x75, 0x28, 0x19, 0xc8, 0xee, - 0x29, 0x98, 0x31, 0xb8, 0xe6, 0x80, 0xd4, 0x24, 0xae, 0x9e, 0xf9, 0x2c, 0xd6, 0xeb, 0x12, 0x7f, - 0x66, 0x35, 0xa5, 0x0e, 0x75, 0x01, 0xc0, 0x9b, 0x60, 0xd4, 0x27, 0x34, 0xb4, 0x02, 0x3d, 0xbb, - 0xa0, 0x2d, 0x4d, 0x5c, 0xbb, 0xdc, 0x17, 0x8a, 0xc7, 0x37, 0x0b, 0xbe, 0x72, 0xf3, 0x6a, 0xb9, - 0x1a, 0xe0, 0x20, 0xa4, 0x95, 0xd3, 0x12, 0x69, 0x14, 0x71, 0x1d, 0x48, 0xea, 0x2a, 0xfd, 0x38, - 0x03, 0x66, 0x92, 0x5e, 0x6a, 0x9a, 0xe4, 0x00, 0x1e, 0x80, 0x31, 0x5f, 0x04, 0x0b, 0xf7, 0xd3, - 0xc4, 0xb5, 0x9d, 0xf2, 0x63, 0xa5, 0x55, 0xb9, 0x2b, 0x08, 0x2b, 0x13, 0xec, 0xcc, 0xe4, 0x07, - 0x8a, 0xd0, 0xe0, 0xbb, 0x20, 0xef, 0xcb, 0x83, 0xe2, 0xd1, 0x34, 0x71, 0xed, 0x9b, 0x03, 0x44, - 0x16, 0x8a, 0x2b, 0x93, 0xed, 0x56, 0x31, 0x1f, 0x7d, 0x21, 0x05, 0x58, 0xfa, 0x28, 0x03, 0x0a, - 0xab, 0x21, 0x0d, 0x5c, 0x1b, 0x11, 0xea, 0x86, 0xbe, 0x41, 0x56, 0x5d, 0x2b, 0xb4, 0x9d, 0x35, - 0x52, 0x37, 0x1d, 0x33, 0x60, 0xd1, 0xba, 0x00, 0x46, 0x1c, 0x6c, 0x13, 0x19, 0x3d, 0x93, 0xd2, - 0xa7, 0x23, 0x5b, 0xd8, 0x26, 0x88, 0x73, 0x98, 0x04, 0x0b, 0x16, 0x99, 0x0b, 0x4a, 0xe2, 0xe6, - 0x91, 0x47, 0x10, 0xe7, 0xc0, 0x67, 0xc0, 0x68, 0xdd, 0xf5, 0x6d, 0x2c, 0xce, 0x71, 0x3c, 0x3e, - 0x99, 0x57, 0x38, 0x15, 0x49, 0x2e, 0x7c, 0x01, 0x4c, 0xd4, 0x08, 0x35, 0x7c, 0xd3, 0x63, 0xd0, - 0xfa, 0x08, 0x17, 0x3e, 0x23, 0x85, 0x27, 0xd6, 0x62, 0x16, 0x4a, 0xca, 0xc1, 0xcb, 0x20, 0xef, - 0xf9, 0xa6, 0xeb, 0x9b, 0xc1, 0x91, 0x9e, 0x5b, 0xd0, 0x96, 0x72, 0x95, 0x19, 0xb9, 0x26, 0xbf, - 0x23, 0xe9, 0x48, 0x49, 0xc0, 0x05, 0x90, 0xbf, 0x5e, 0xdd, 0xde, 0xda, 0xc1, 0xc1, 0x9e, 0x3e, - 0xca, 0x11, 0x46, 0x98, 0x34, 0xca, 0xdf, 0x91, 0xd4, 0xd2, 0x7b, 0x19, 0xa0, 0xa7, 0xbd, 0x12, - 0xb9, 0x14, 0xbe, 0x02, 0xf2, 0x34, 0x60, 0x15, 0xa7, 0x71, 0x24, 0x7d, 0xf2, 0x6c, 0x04, 0x56, - 0x95, 0xf4, 0xe3, 0x56, 0xf1, 0x5c, 0xbc, 0x22, 0xa2, 0x72, 0x7f, 0xa8, 0xb5, 0xf0, 0xb7, 0x1a, - 0x38, 0x73, 0x40, 0x76, 0xf7, 0x5c, 0x77, 0x7f, 0xd5, 0x32, 0x89, 0x13, 0xac, 0xba, 0x4e, 0xdd, - 0x6c, 0xc8, 0x18, 0x40, 0x8f, 0x19, 0x03, 0xaf, 0x75, 0x6b, 0xae, 0x3c, 0xd5, 0x6e, 0x15, 0xcf, - 0xf4, 0x60, 0xa0, 0x5e, 0x76, 0x94, 0xde, 0xcf, 0xa6, 0x9d, 0x90, 0x08, 0x8a, 0x77, 0x40, 0x9e, - 0x25, 0x5b, 0x0d, 0x07, 0x58, 0xa6, 0xcb, 0x73, 0x27, 0x4b, 0x4d, 0x91, 0xd9, 0x9b, 0x24, 0xc0, - 0x15, 0x28, 0xdd, 0x06, 0x62, 0x1a, 0x52, 0x5a, 0xe1, 0xf7, 0xc0, 0x08, 0xf5, 0x88, 0x21, 0xdd, - 0xf1, 0xfa, 0xe3, 0xa6, 0x44, 0x9f, 0x8d, 0x54, 0x3d, 0x62, 0xc4, 0x11, 0xcb, 0xbe, 0x10, 0x87, - 0x85, 0x1f, 0x68, 0x60, 0x94, 0xf2, 0x32, 0x22, 0x4b, 0xcf, 0x9b, 0xc3, 0xb2, 0x20, 0x55, 0xab, - 0xc4, 0x37, 0x92, 0xe0, 0xa5, 0xff, 0x64, 0xc0, 0x62, 0xbf, 0xa5, 0xab, 0xae, 0x53, 0x13, 0xc7, - 0xb1, 0x21, 0x33, 0x50, 0xc4, 0xe3, 0x0b, 0xc9, 0x0c, 0x3c, 0x6e, 0x15, 0x9f, 0x7e, 0xa4, 0x82, - 0x44, 0xaa, 0x7e, 0x4d, 0xed, 0x5b, 0xa4, 0xf3, 0x62, 0xa7, 0x61, 0xc7, 0xad, 0xe2, 0xb4, 0x5a, - 0xd6, 0x69, 0x2b, 0x6c, 0x02, 0x68, 0x61, 0x1a, 0xdc, 0xf4, 0xb1, 0x43, 0x85, 0x5a, 0xd3, 0x26, - 0xd2, 0x7d, 0xcf, 0x9e, 0x2c, 0x3c, 0xd8, 0x8a, 0xca, 0xbc, 0x84, 0x84, 0x37, 0xba, 0xb4, 0xa1, - 0x1e, 0x08, 0xac, 0xba, 0xf8, 0x04, 0x53, 0x55, 0x30, 0x12, 0x75, 0x9f, 0x51, 0x91, 0xe4, 0xc2, - 0x2f, 0x81, 0x31, 0x9b, 0x50, 0x8a, 0x1b, 0x84, 0x57, 0x89, 0xf1, 0xf8, 0x22, 0xdd, 0x14, 0x64, - 0x14, 0xf1, 0x59, 0x17, 0x71, 0xa1, 0x9f, 0xd7, 0x6e, 0x98, 0x34, 0x80, 0x6f, 0x74, 0x25, 0x40, - 0xf9, 0x64, 0x3b, 0x64, 0xab, 0x79, 0xf8, 0xab, 0x12, 0x15, 0x51, 0x12, 0xc1, 0xff, 0x5d, 0x90, - 0x33, 0x03, 0x62, 0x47, 0x37, 0xec, 0x6b, 0x43, 0x8a, 0xbd, 0xca, 0x94, 0xb4, 0x21, 0xb7, 0xc1, - 0xd0, 0x90, 0x00, 0x2d, 0xfd, 0x31, 0x03, 0x2e, 0xf6, 0x5b, 0xc2, 0xca, 0x3e, 0x65, 0x1e, 0xf7, - 0xac, 0xd0, 0xc7, 0x96, 0x8c, 0x38, 0xe5, 0xf1, 0x1d, 0x4e, 0x45, 0x92, 0xcb, 0x0a, 0x33, 0x35, - 0x9d, 0x46, 0x68, 0x61, 0x5f, 0x86, 0x93, 0xda, 0x75, 0x55, 0xd2, 0x91, 0x92, 0x80, 0x65, 0x00, - 0xe8, 0x9e, 0xeb, 0x07, 0x1c, 0x83, 0xb7, 0x46, 0xe3, 0x95, 0xd3, 0xac, 0x40, 0x54, 0x15, 0x15, - 0x25, 0x24, 0xd8, 0xbd, 0xb3, 0x6f, 0x3a, 0x35, 0x79, 0xea, 0x2a, 0x8b, 0xbf, 0x61, 0x3a, 0x35, - 0xc4, 0x39, 0x0c, 0xdf, 0x32, 0x69, 0xc0, 0x28, 0xf2, 0xc8, 0x3b, 0xbc, 0xce, 0x25, 0x95, 0x04, - 0xc3, 0x37, 0x58, 0x6d, 0x76, 0x7d, 0x93, 0x50, 0x7d, 0x34, 0xc6, 0x5f, 0x55, 0x54, 0x94, 0x90, - 0x28, 0xfd, 0x3a, 0xdf, 0x3f, 0x48, 0x58, 0x29, 0x81, 0x97, 0x40, 0xae, 0xe1, 0xbb, 0xa1, 0x27, - 0xbd, 0xa4, 0xbc, 0xfd, 0x2a, 0x23, 0x22, 0xc1, 0x63, 0x51, 0xd9, 0xec, 0x68, 0x26, 0x55, 0x54, - 0x46, 0x2d, 0x64, 0xc4, 0x87, 0x3f, 0xd4, 0x40, 0xce, 0x91, 0xce, 0x61, 0x21, 0xf7, 0xc6, 0x90, - 0xe2, 0x82, 0xbb, 0x37, 0x36, 0x57, 0x78, 0x5e, 0x20, 0xc3, 0xe7, 0x41, 0x8e, 0x1a, 0xae, 0x47, - 0xa4, 0xd7, 0x0b, 0x91, 0x50, 0x95, 0x11, 0x8f, 0x5b, 0xc5, 0xa9, 0x48, 0x1d, 0x27, 0x20, 0x21, - 0x0c, 0x7f, 0xa4, 0x01, 0xd0, 0xc4, 0x96, 0x59, 0xc3, 0xfc, 0x62, 0xcf, 0x71, 0xf3, 0x07, 0x1b, - 0xd6, 0xb7, 0x95, 0x7a, 0x71, 0x68, 0xf1, 0x37, 0x4a, 0x40, 0xc3, 0x0f, 0x35, 0x30, 0x49, 0xc3, - 0x5d, 0x5f, 0xae, 0xa2, 0xbc, 0x05, 0x98, 0xb8, 0xf6, 0xed, 0x81, 0xda, 0x52, 0x4d, 0x00, 0x54, - 0x66, 0xda, 0xad, 0xe2, 0x64, 0x92, 0x82, 0x3a, 0x0c, 0x80, 0x3f, 0xd5, 0x40, 0x5e, 0x9e, 0x30, - 0xd5, 0xc7, 0x78, 0xc2, 0xbf, 0x35, 0xa4, 0x83, 0x95, 0x11, 0x15, 0x67, 0x81, 0x24, 0x50, 0xa4, - 0x2c, 0x80, 0xff, 0xd0, 0x80, 0x8e, 0x6b, 0xa2, 0xc0, 0x63, 0x6b, 0xc7, 0x37, 0x9d, 0x80, 0xf8, - 0xa2, 0x2b, 0xa4, 0x7a, 0x9e, 0x9b, 0x37, 0xd8, 0xbb, 0x30, 0xdd, 0x71, 0x56, 0x16, 0xa4, 0x75, - 0xfa, 0x4a, 0x1f, 0x33, 0x50, 0x5f, 0x03, 0x79, 0xa0, 0x19, 0xaa, 0xf5, 0xd2, 0xc7, 0x87, 0x10, - 0x68, 0x71, 0x67, 0x27, 0xab, 0x43, 0xdc, 0x6e, 0x27, 0xa0, 0x4b, 0x1f, 0x66, 0xd3, 0xad, 0x75, - 0xfa, 0xd2, 0x87, 0xf7, 0x84, 0xb1, 0x62, 0x2b, 0x54, 0xd7, 0xb8, 0x73, 0xdf, 0x19, 0xd2, 0xd9, - 0xab, 0x5b, 0x3b, 0x6e, 0xbc, 0x14, 0x89, 0xa2, 0x84, 0x1d, 0xf0, 0x57, 0x1a, 0x98, 0xc2, 0x86, - 0x41, 0xbc, 0x80, 0xd4, 0x44, 0x2d, 0xce, 0x7c, 0x0e, 0xe5, 0x66, 0x4e, 0x5a, 0x35, 0xb5, 0x92, - 0x84, 0x46, 0x9d, 0x96, 0xc0, 0x97, 0xc1, 0x69, 0x1a, 0xb8, 0x3e, 0xa9, 0x45, 0x91, 0x2b, 0xef, - 0x09, 0xd8, 0x6e, 0x15, 0x4f, 0x57, 0x3b, 0x38, 0x28, 0x25, 0x59, 0xfa, 0x74, 0x04, 0x14, 0x1f, - 0x91, 0x19, 0x27, 0x78, 0xed, 0x3c, 0x03, 0x46, 0xf9, 0x76, 0x6b, 0xdc, 0x2b, 0xf9, 0x44, 0xe7, - 0xc6, 0xa9, 0x48, 0x72, 0x59, 0x5d, 0x67, 0xf8, 0xac, 0xdb, 0xc8, 0x72, 0x41, 0x55, 0xd7, 0xab, - 0x82, 0x8c, 0x22, 0x3e, 0x7c, 0x17, 0x8c, 0x8a, 0x69, 0x06, 0x2f, 0xaa, 0x43, 0x2c, 0x8c, 0x80, - 0xdb, 0xc9, 0xa1, 0x90, 0x84, 0xec, 0x2e, 0x88, 0xb9, 0x27, 0x5d, 0x10, 0x1f, 0x5a, 0x81, 0x46, - 0xff, 0xcf, 0x2b, 0x50, 0xe9, 0xbf, 0x5a, 0x3a, 0xef, 0x13, 0x5b, 0xad, 0x1a, 0xd8, 0x22, 0x70, - 0x0d, 0xcc, 0xb0, 0x47, 0x06, 0x22, 0x9e, 0x65, 0x1a, 0x98, 0xf2, 0x97, 0xa8, 0x08, 0x38, 0x35, - 0x1c, 0xa9, 0xa6, 0xf8, 0xa8, 0x6b, 0x05, 0xbc, 0x0e, 0xa0, 0x68, 0xbc, 0x3b, 0xf4, 0x88, 0x1e, - 0x42, 0xb5, 0xd0, 0xd5, 0x2e, 0x09, 0xd4, 0x63, 0x15, 0x5c, 0x05, 0xb3, 0x16, 0xde, 0x25, 0x56, - 0x95, 0x58, 0xc4, 0x08, 0x5c, 0x9f, 0xab, 0x12, 0x6f, 0xf5, 0xb9, 0x76, 0xab, 0x38, 0x7b, 0x23, - 0xcd, 0x44, 0xdd, 0xf2, 0xa5, 0xc5, 0x74, 0x7a, 0x25, 0x37, 0x2e, 0x9e, 0x33, 0xbf, 0xcb, 0x80, - 0xf9, 0xfe, 0x91, 0x01, 0xdf, 0x8b, 0x5f, 0x5d, 0xa2, 0xa9, 0x7e, 0x6b, 0x58, 0x51, 0x28, 0x9f, - 0x5d, 0xa0, 0xfb, 0xc9, 0x05, 0xbf, 0xcf, 0x3a, 0x1c, 0x6c, 0x45, 0xd3, 0x98, 0x37, 0x87, 0x66, - 0x02, 0x03, 0xa9, 0x8c, 0x8b, 0xe6, 0x09, 0x5b, 0xbc, 0x57, 0xc2, 0x16, 0x29, 0xfd, 0x49, 0x4b, - 0x3f, 0xbc, 0xe3, 0x0c, 0x86, 0x3f, 0xd3, 0xc0, 0xb4, 0xeb, 0x11, 0x67, 0x65, 0x67, 0xe3, 0xf6, - 0x57, 0x44, 0x26, 0x4b, 0x57, 0x6d, 0x3d, 0xa6, 0x9d, 0xd7, 0xab, 0xdb, 0x5b, 0x42, 0xe1, 0x8e, - 0xef, 0x7a, 0xb4, 0x72, 0xa6, 0xdd, 0x2a, 0x4e, 0x6f, 0x77, 0x42, 0xa1, 0x34, 0x76, 0xc9, 0x06, - 0x73, 0xeb, 0x87, 0x01, 0xf1, 0x1d, 0x6c, 0xad, 0xb9, 0x46, 0x68, 0x13, 0x27, 0x10, 0x86, 0xa6, - 0x46, 0x39, 0xda, 0x09, 0x47, 0x39, 0x17, 0x41, 0x36, 0xf4, 0x2d, 0x19, 0xc5, 0x13, 0x6a, 0x54, - 0x89, 0x6e, 0x20, 0x46, 0x2f, 0x2d, 0x82, 0x11, 0x66, 0x27, 0x3c, 0x0f, 0xb2, 0x3e, 0x3e, 0xe0, - 0x5a, 0x27, 0x2b, 0x63, 0x4c, 0x04, 0xe1, 0x03, 0xc4, 0x68, 0xa5, 0x3f, 0x5f, 0x00, 0xd3, 0xa9, - 0xbd, 0xc0, 0x79, 0x90, 0x51, 0xf3, 0x4f, 0x20, 0x95, 0x66, 0x36, 0xd6, 0x50, 0xc6, 0xac, 0xc1, - 0x17, 0x55, 0xf1, 0x15, 0xa0, 0x45, 0x55, 0xcf, 0x39, 0x95, 0xb5, 0xb4, 0xb1, 0x3a, 0x66, 0x48, - 0x54, 0x38, 0x99, 0x0d, 0xa4, 0x2e, 0xb3, 0x44, 0xd8, 0x40, 0xea, 0x88, 0xd1, 0x3e, 0xeb, 0x1c, - 0x2b, 0x1a, 0xa4, 0xe5, 0x4e, 0x30, 0x48, 0x1b, 0x7d, 0xe8, 0x20, 0xed, 0x12, 0xc8, 0x05, 0x66, - 0x60, 0x11, 0x7d, 0xac, 0xf3, 0xe5, 0x71, 0x93, 0x11, 0x91, 0xe0, 0xc1, 0x3b, 0x60, 0xac, 0x46, - 0xea, 0x38, 0xb4, 0x02, 0x3d, 0xcf, 0x43, 0x68, 0x75, 0x00, 0x21, 0x24, 0xa6, 0x9c, 0x6b, 0x42, - 0x2f, 0x8a, 0x00, 0xe0, 0xd3, 0x60, 0xcc, 0xc6, 0x87, 0xa6, 0x1d, 0xda, 0xbc, 0x27, 0xd3, 0x84, - 0xd8, 0xa6, 0x20, 0xa1, 0x88, 0xc7, 0x2a, 0x23, 0x39, 0x34, 0xac, 0x90, 0x9a, 0x4d, 0x22, 0x99, - 0x3a, 0xe0, 0xb7, 0xa7, 0xaa, 0x8c, 0xeb, 0x29, 0x3e, 0xea, 0x5a, 0xc1, 0xc1, 0x4c, 0x87, 0x2f, - 0x9e, 0x48, 0x80, 0x09, 0x12, 0x8a, 0x78, 0x9d, 0x60, 0x52, 0x7e, 0xb2, 0x1f, 0x98, 0x5c, 0xdc, - 0xb5, 0x02, 0x7e, 0x19, 0x8c, 0xdb, 0xf8, 0xf0, 0x06, 0x71, 0x1a, 0xc1, 0x9e, 0x3e, 0xb5, 0xa0, - 0x2d, 0x65, 0x2b, 0x53, 0xed, 0x56, 0x71, 0x7c, 0x33, 0x22, 0xa2, 0x98, 0xcf, 0x85, 0x4d, 0x47, - 0x0a, 0x9f, 0x4e, 0x08, 0x47, 0x44, 0x14, 0xf3, 0x59, 0x07, 0xe1, 0xe1, 0x80, 0x25, 0x97, 0x3e, - 0xdd, 0xf9, 0x32, 0xdc, 0x11, 0x64, 0x14, 0xf1, 0xe1, 0x12, 0xc8, 0xdb, 0xf8, 0x90, 0xbf, 0xe2, - 0xf5, 0x19, 0xae, 0x96, 0x4f, 0x7c, 0x37, 0x25, 0x0d, 0x29, 0x2e, 0x97, 0x34, 0x1d, 0x21, 0x39, - 0x9b, 0x90, 0x94, 0x34, 0xa4, 0xb8, 0x2c, 0x88, 0x43, 0xc7, 0xbc, 0x1b, 0x12, 0x21, 0x0c, 0xb9, - 0x67, 0x54, 0x10, 0xdf, 0x8a, 0x59, 0x28, 0x29, 0xc7, 0x5e, 0xd1, 0x76, 0x68, 0x05, 0xa6, 0x67, - 0x91, 0xed, 0xba, 0x7e, 0x86, 0xfb, 0x9f, 0xf7, 0xc9, 0x9b, 0x8a, 0x8a, 0x12, 0x12, 0x90, 0x80, - 0x11, 0xe2, 0x84, 0xb6, 0x7e, 0x96, 0x5f, 0xec, 0x03, 0x09, 0x41, 0x95, 0x39, 0xeb, 0x4e, 0x68, - 0x23, 0xae, 0x1e, 0xbe, 0x08, 0xa6, 0x6c, 0x7c, 0xc8, 0xca, 0x01, 0xf1, 0x03, 0xf6, 0xbe, 0x9f, - 0xe3, 0x9b, 0x9f, 0x65, 0x1d, 0xe7, 0x66, 0x92, 0x81, 0x3a, 0xe5, 0xf8, 0x42, 0xd3, 0x49, 0x2c, - 0x3c, 0x97, 0x58, 0x98, 0x64, 0xa0, 0x4e, 0x39, 0xe6, 0x69, 0x9f, 0xdc, 0x0d, 0x4d, 0x9f, 0xd4, - 0xf4, 0xa7, 0x78, 0x93, 0x2a, 0xa7, 0xf0, 0x82, 0x86, 0x14, 0x17, 0x36, 0xa3, 0x71, 0x8f, 0xce, - 0xd3, 0xf0, 0xd6, 0x60, 0x2b, 0xf9, 0xb6, 0xbf, 0xe2, 0xfb, 0xf8, 0x48, 0xdc, 0x34, 0xc9, 0x41, - 0x0f, 0xa4, 0x20, 0x87, 0x2d, 0x6b, 0xbb, 0xae, 0x9f, 0xe7, 0xbe, 0x1f, 0xf4, 0x0d, 0xa2, 0xaa, - 0xce, 0x0a, 0x03, 0x41, 0x02, 0x8b, 0x81, 0xba, 0x0e, 0x0b, 0x8d, 0xf9, 0xe1, 0x82, 0x6e, 0x33, - 0x10, 0x24, 0xb0, 0xf8, 0x4e, 0x9d, 0xa3, 0xed, 0xba, 0xfe, 0x85, 0x21, 0xef, 0x94, 0x81, 0x20, - 0x81, 0x05, 0x4d, 0x90, 0x75, 0xdc, 0x40, 0xbf, 0x30, 0x94, 0xeb, 0x99, 0x5f, 0x38, 0x5b, 0x6e, - 0x80, 0x18, 0x06, 0xfc, 0xa5, 0x06, 0x80, 0x17, 0x87, 0xe8, 0xc5, 0x81, 0x4c, 0x11, 0x52, 0x90, - 0xe5, 0x38, 0xb6, 0xd7, 0x9d, 0xc0, 0x3f, 0x8a, 0xdf, 0x91, 0x89, 0x1c, 0x48, 0x58, 0x01, 0x7f, - 0xaf, 0x81, 0xb3, 0xc9, 0x36, 0x59, 0x99, 0x57, 0xe0, 0x1e, 0xb9, 0x39, 0xe8, 0x30, 0xaf, 0xb8, - 0xae, 0x55, 0xd1, 0xdb, 0xad, 0xe2, 0xd9, 0x95, 0x1e, 0xa8, 0xa8, 0xa7, 0x2d, 0xf0, 0x2f, 0x1a, - 0x98, 0x95, 0x55, 0x34, 0x61, 0x61, 0x91, 0x3b, 0x90, 0x0c, 0xda, 0x81, 0x69, 0x1c, 0xe1, 0x47, - 0xf5, 0xeb, 0x71, 0x17, 0x1f, 0x75, 0x9b, 0x06, 0xff, 0xae, 0x81, 0xc9, 0x1a, 0xf1, 0x88, 0x53, - 0x23, 0x8e, 0xc1, 0x6c, 0x5d, 0x18, 0xc8, 0xd8, 0x20, 0x6d, 0xeb, 0x5a, 0x02, 0x42, 0x98, 0x59, - 0x96, 0x66, 0x4e, 0x26, 0x59, 0xc7, 0xad, 0xe2, 0xb9, 0x78, 0x69, 0x92, 0x83, 0x3a, 0xac, 0x84, - 0x1f, 0x69, 0x60, 0x3a, 0x3e, 0x00, 0x71, 0xa5, 0x2c, 0x0e, 0x31, 0x0e, 0x78, 0xfb, 0xba, 0xd2, - 0x09, 0x88, 0xd2, 0x16, 0xc0, 0xbf, 0x6a, 0xac, 0x53, 0x8b, 0xde, 0x7d, 0x54, 0x2f, 0x71, 0x5f, - 0xbe, 0x3d, 0x70, 0x5f, 0x2a, 0x04, 0xe1, 0xca, 0xcb, 0x71, 0x2b, 0xa8, 0x38, 0xc7, 0xad, 0xe2, - 0x5c, 0xd2, 0x93, 0x8a, 0x81, 0x92, 0x16, 0xc2, 0x9f, 0x68, 0x60, 0x92, 0xc4, 0x1d, 0x37, 0xd5, - 0x2f, 0x0d, 0xc4, 0x89, 0x3d, 0x9b, 0x78, 0xf1, 0x52, 0x4f, 0xb0, 0x28, 0xea, 0xc0, 0x66, 0x1d, - 0x24, 0x39, 0xc4, 0xb6, 0x67, 0x11, 0xfd, 0x8b, 0x03, 0xee, 0x20, 0xd7, 0x85, 0x5e, 0x14, 0x01, - 0xcc, 0xb3, 0x97, 0x4f, 0x2a, 0x73, 0xe0, 0x0c, 0xc8, 0xee, 0x13, 0xf9, 0x33, 0x2c, 0x62, 0x7f, - 0xc2, 0x1a, 0xc8, 0x35, 0xb1, 0x15, 0x46, 0x8f, 0xb7, 0x01, 0x57, 0x5d, 0x24, 0x94, 0xbf, 0x9c, - 0x79, 0x49, 0x9b, 0xbf, 0xa7, 0x81, 0x73, 0xbd, 0x13, 0xfa, 0x89, 0x9a, 0xf5, 0x1b, 0x0d, 0xcc, - 0x76, 0xe5, 0x6e, 0x0f, 0x8b, 0xee, 0x76, 0x5a, 0xf4, 0xfa, 0xa0, 0x93, 0xb0, 0x1a, 0xf8, 0xa6, - 0xd3, 0xe0, 0x9d, 0x47, 0xd2, 0xbc, 0x9f, 0x6b, 0x60, 0x26, 0x9d, 0x0e, 0x4f, 0xd2, 0x5f, 0xa5, - 0x7b, 0x19, 0x70, 0xae, 0x77, 0xc3, 0x04, 0x7d, 0xf5, 0x32, 0x1c, 0xce, 0x0b, 0xbb, 0xd7, 0x34, - 0xee, 0x03, 0x0d, 0x4c, 0xdc, 0x51, 0x72, 0xd1, 0x0f, 0x80, 0x03, 0x7f, 0xdb, 0x47, 0xf5, 0x27, - 0x66, 0x50, 0x94, 0xc4, 0x2d, 0xfd, 0x4d, 0x03, 0x73, 0x3d, 0x0b, 0x2b, 0x7b, 0x82, 0x62, 0xcb, - 0x72, 0x0f, 0xc4, 0x88, 0x26, 0x31, 0xff, 0x5c, 0xe1, 0x54, 0x24, 0xb9, 0x09, 0xef, 0x65, 0x3e, - 0x2f, 0xef, 0x95, 0xfe, 0xa9, 0x81, 0x0b, 0x0f, 0x8b, 0xc4, 0x27, 0x72, 0xa4, 0x4b, 0x20, 0x2f, - 0x9b, 0xa2, 0x23, 0x7e, 0x9c, 0xf2, 0x1d, 0x20, 0x8b, 0x06, 0xff, 0xcf, 0x14, 0xf1, 0x57, 0xe9, - 0x7d, 0x0d, 0xcc, 0x54, 0x89, 0xdf, 0x34, 0x0d, 0x82, 0x48, 0x9d, 0xf8, 0xc4, 0x31, 0x08, 0x5c, - 0x06, 0xe3, 0xfc, 0x97, 0x37, 0x0f, 0x1b, 0xd1, 0x58, 0x7a, 0x56, 0xba, 0x7c, 0x7c, 0x2b, 0x62, - 0xa0, 0x58, 0x46, 0x8d, 0xb0, 0x33, 0x7d, 0x47, 0xd8, 0x17, 0xc0, 0x88, 0x17, 0x0f, 0xf8, 0xf2, - 0x8c, 0xcb, 0x67, 0x7a, 0x9c, 0x5a, 0xfa, 0x97, 0x06, 0x7a, 0xfd, 0x97, 0x08, 0x6c, 0x82, 0x31, - 0x2a, 0x8c, 0x93, 0xce, 0xdb, 0x7e, 0x4c, 0xe7, 0xa5, 0xb7, 0x2a, 0x0a, 0x7f, 0x44, 0x8d, 0xc0, - 0x98, 0xff, 0x0c, 0x5c, 0x09, 0x9d, 0x9a, 0x1c, 0xc9, 0x4d, 0x0a, 0xff, 0xad, 0xae, 0x08, 0x1a, - 0x52, 0x5c, 0x78, 0x5e, 0x0c, 0x8f, 0x12, 0x13, 0x99, 0x68, 0x70, 0x54, 0xb9, 0x72, 0xff, 0x41, - 0xe1, 0xd4, 0xc7, 0x0f, 0x0a, 0xa7, 0x3e, 0x79, 0x50, 0x38, 0xf5, 0x83, 0x76, 0x41, 0xbb, 0xdf, - 0x2e, 0x68, 0x1f, 0xb7, 0x0b, 0xda, 0x27, 0xed, 0x82, 0xf6, 0xef, 0x76, 0x41, 0xfb, 0xc5, 0xa7, - 0x85, 0x53, 0xdf, 0x19, 0x93, 0xa6, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc5, 0xe4, 0x3a, - 0xbb, 0x29, 0x00, 0x00, + // 2783 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdf, 0x6f, 0x23, 0x57, + 0xf5, 0xdf, 0xb1, 0xe3, 0xc4, 0xb9, 0x49, 0x36, 0xc9, 0xdd, 0x66, 0x3b, 0x9b, 0x6f, 0x6a, 0x27, + 0xee, 0xb7, 0x55, 0x28, 0xbb, 0x4e, 0xbb, 0xb4, 0xb4, 0x54, 0xe2, 0x21, 0x76, 0xd2, 0x2a, 0x65, + 0xf3, 0x83, 0xeb, 0xdd, 0xb6, 0xd0, 0x9f, 0x37, 0xe3, 0x6b, 0x67, 0x36, 0xf3, 0x6b, 0xe7, 0xce, + 0x38, 0x89, 0x0a, 0x08, 0xa8, 0x2a, 0x10, 0x02, 0x8a, 0xe8, 0xbe, 0x20, 0xe0, 0x01, 0x10, 0x2f, + 0x3c, 0xc0, 0x03, 0xbc, 0xc1, 0x1f, 0xb0, 0x8f, 0x15, 0x4f, 0x15, 0x42, 0x16, 0xeb, 0xfe, 0x0b, + 0x48, 0x48, 0x79, 0x42, 0xf7, 0xc7, 0xdc, 0x19, 0x8f, 0xed, 0xdd, 0xa8, 0x6b, 0x77, 0x79, 0xcb, + 0x9c, 0x73, 0xee, 0xf9, 0x9c, 0x7b, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0x1c, 0xd0, 0x38, 0x7c, 0x81, + 0x96, 0x4d, 0x77, 0xed, 0x30, 0xdc, 0x27, 0xbe, 0x43, 0x02, 0x42, 0xd7, 0x5a, 0xc4, 0xa9, 0xbb, + 0xfe, 0x9a, 0x64, 0x60, 0xcf, 0x24, 0xc7, 0x01, 0x71, 0xa8, 0xe9, 0x3a, 0xf4, 0x0a, 0xf6, 0x4c, + 0x4a, 0xfc, 0x16, 0xf1, 0xd7, 0xbc, 0xc3, 0x26, 0xe3, 0xd1, 0x6e, 0x81, 0xb5, 0xd6, 0x33, 0xfb, + 0x24, 0xc0, 0xcf, 0xac, 0x35, 0x89, 0x43, 0x7c, 0x1c, 0x90, 0x7a, 0xd9, 0xf3, 0xdd, 0xc0, 0x85, + 0x5f, 0x15, 0xea, 0xca, 0x5d, 0xd2, 0xef, 0x28, 0x75, 0x65, 0xef, 0xb0, 0xc9, 0x78, 0xb4, 0x5b, + 0xa0, 0x2c, 0xd5, 0x2d, 0x5e, 0x69, 0x9a, 0xc1, 0x41, 0xb8, 0x5f, 0x36, 0x5c, 0x7b, 0xad, 0xe9, + 0x36, 0xdd, 0x35, 0xae, 0x75, 0x3f, 0x6c, 0xf0, 0x2f, 0xfe, 0xc1, 0xff, 0x12, 0x68, 0x8b, 0xcf, + 0xc6, 0xc6, 0xdb, 0xd8, 0x38, 0x30, 0x1d, 0xe2, 0x9f, 0xc4, 0x16, 0xdb, 0x24, 0xc0, 0x6b, 0xad, + 0x1e, 0x1b, 0x17, 0xd7, 0x06, 0xad, 0xf2, 0x43, 0x27, 0x30, 0x6d, 0xd2, 0xb3, 0xe0, 0xcb, 0xf7, + 0x5b, 0x40, 0x8d, 0x03, 0x62, 0xe3, 0xf4, 0xba, 0xd2, 0xa9, 0x06, 0xe6, 0xab, 0xae, 0xd3, 0x22, + 0x3e, 0xdb, 0x25, 0x22, 0xb7, 0x42, 0x42, 0x03, 0x58, 0x01, 0xd9, 0xd0, 0xac, 0xeb, 0xda, 0xb2, + 0xb6, 0x3a, 0x59, 0x79, 0xfa, 0x4e, 0xbb, 0x78, 0xae, 0xd3, 0x2e, 0x66, 0x6f, 0x6c, 0x6d, 0x9c, + 0xb6, 0x8b, 0x2b, 0x83, 0x90, 0x82, 0x13, 0x8f, 0xd0, 0xf2, 0x8d, 0xad, 0x0d, 0xc4, 0x16, 0xc3, + 0x97, 0xc1, 0x7c, 0x9d, 0x50, 0xd3, 0x27, 0xf5, 0xf5, 0xbd, 0xad, 0x57, 0x85, 0x7e, 0x3d, 0xc3, + 0x35, 0x5e, 0x92, 0x1a, 0xe7, 0x37, 0xd2, 0x02, 0xa8, 0x77, 0x0d, 0x7c, 0x1d, 0x4c, 0xb8, 0xfb, + 0x37, 0x89, 0x11, 0x50, 0x3d, 0xbb, 0x9c, 0x5d, 0x9d, 0xba, 0x7a, 0xa5, 0x1c, 0x9f, 0xa0, 0x32, + 0x81, 0x1f, 0x9b, 0xdc, 0x6c, 0x19, 0xe1, 0xa3, 0xcd, 0xe8, 0xe4, 0x2a, 0xb3, 0x12, 0x6d, 0x62, + 0x57, 0x68, 0x41, 0x91, 0xba, 0xd2, 0xef, 0x32, 0x00, 0x26, 0x37, 0x4f, 0x3d, 0xd7, 0xa1, 0x64, + 0x28, 0xbb, 0xa7, 0x60, 0xce, 0xe0, 0x9a, 0x03, 0x52, 0x97, 0xb8, 0x7a, 0xe6, 0xb3, 0x58, 0xaf, + 0x4b, 0xfc, 0xb9, 0x6a, 0x4a, 0x1d, 0xea, 0x01, 0x80, 0xd7, 0xc1, 0xb8, 0x4f, 0x68, 0x68, 0x05, + 0x7a, 0x76, 0x59, 0x5b, 0x9d, 0xba, 0x7a, 0x79, 0x20, 0x14, 0x8f, 0x6f, 0x16, 0x7c, 0xe5, 0xd6, + 0x33, 0xe5, 0x5a, 0x80, 0x83, 0x90, 0x56, 0xce, 0x4b, 0xa4, 0x71, 0xc4, 0x75, 0x20, 0xa9, 0xab, + 0xf4, 0xc3, 0x0c, 0x98, 0x4b, 0x7a, 0xa9, 0x65, 0x92, 0x23, 0x78, 0x04, 0x26, 0x7c, 0x11, 0x2c, + 0xdc, 0x4f, 0x53, 0x57, 0xf7, 0xca, 0x0f, 0x94, 0x56, 0xe5, 0x9e, 0x20, 0xac, 0x4c, 0xb1, 0x33, + 0x93, 0x1f, 0x28, 0x42, 0x83, 0xef, 0x81, 0xbc, 0x2f, 0x0f, 0x8a, 0x47, 0xd3, 0xd4, 0xd5, 0xaf, + 0x0f, 0x11, 0x59, 0x28, 0xae, 0x4c, 0x77, 0xda, 0xc5, 0x7c, 0xf4, 0x85, 0x14, 0x60, 0xe9, 0xa3, + 0x0c, 0x28, 0x54, 0x43, 0x1a, 0xb8, 0x36, 0x22, 0xd4, 0x0d, 0x7d, 0x83, 0x54, 0x5d, 0x2b, 0xb4, + 0x9d, 0x0d, 0xd2, 0x30, 0x1d, 0x33, 0x60, 0xd1, 0xba, 0x0c, 0xc6, 0x1c, 0x6c, 0x13, 0x19, 0x3d, + 0xd3, 0xd2, 0xa7, 0x63, 0x3b, 0xd8, 0x26, 0x88, 0x73, 0x98, 0x04, 0x0b, 0x16, 0x99, 0x0b, 0x4a, + 0xe2, 0xfa, 0x89, 0x47, 0x10, 0xe7, 0xc0, 0x27, 0xc1, 0x78, 0xc3, 0xf5, 0x6d, 0x2c, 0xce, 0x71, + 0x32, 0x3e, 0x99, 0x97, 0x38, 0x15, 0x49, 0x2e, 0x7c, 0x0e, 0x4c, 0xd5, 0x09, 0x35, 0x7c, 0xd3, + 0x63, 0xd0, 0xfa, 0x18, 0x17, 0xbe, 0x20, 0x85, 0xa7, 0x36, 0x62, 0x16, 0x4a, 0xca, 0xc1, 0xcb, + 0x20, 0xef, 0xf9, 0xa6, 0xeb, 0x9b, 0xc1, 0x89, 0x9e, 0x5b, 0xd6, 0x56, 0x73, 0x95, 0x39, 0xb9, + 0x26, 0xbf, 0x27, 0xe9, 0x48, 0x49, 0xc0, 0x65, 0x90, 0x7f, 0xa5, 0xb6, 0xbb, 0xb3, 0x87, 0x83, + 0x03, 0x7d, 0x9c, 0x23, 0x8c, 0x31, 0x69, 0x94, 0xbf, 0x29, 0xa9, 0xa5, 0x7f, 0x66, 0x80, 0x9e, + 0xf6, 0x4a, 0xe4, 0x52, 0xf8, 0x12, 0xc8, 0xd3, 0x80, 0x55, 0x9c, 0xe6, 0x89, 0xf4, 0xc9, 0x53, + 0x11, 0x58, 0x4d, 0xd2, 0x4f, 0xdb, 0xc5, 0x8b, 0xf1, 0x8a, 0x88, 0xca, 0xfd, 0xa1, 0xd6, 0xc2, + 0x5f, 0x6b, 0xe0, 0xc2, 0x11, 0xd9, 0x3f, 0x70, 0xdd, 0xc3, 0xaa, 0x65, 0x12, 0x27, 0xa8, 0xba, + 0x4e, 0xc3, 0x6c, 0xca, 0x18, 0x40, 0x0f, 0x18, 0x03, 0xaf, 0xf5, 0x6a, 0xae, 0x3c, 0xda, 0x69, + 0x17, 0x2f, 0xf4, 0x61, 0xa0, 0x7e, 0x76, 0xc0, 0xd7, 0x81, 0x6e, 0xa4, 0x92, 0x44, 0x16, 0x30, + 0x51, 0xb6, 0x26, 0x2b, 0x4b, 0x9d, 0x76, 0x51, 0xaf, 0x0e, 0x90, 0x41, 0x03, 0x57, 0x97, 0xde, + 0xcf, 0xa6, 0xdd, 0x9b, 0x08, 0xb7, 0x77, 0x41, 0x9e, 0xa5, 0x71, 0x1d, 0x07, 0x58, 0x26, 0xe2, + 0xd3, 0x67, 0x4b, 0x7a, 0x51, 0x33, 0xb6, 0x49, 0x80, 0x2b, 0x50, 0x1e, 0x08, 0x88, 0x69, 0x48, + 0x69, 0x85, 0xdf, 0x06, 0x63, 0xd4, 0x23, 0x86, 0x74, 0xf4, 0x1b, 0x0f, 0x9a, 0x6c, 0x03, 0x36, + 0x52, 0xf3, 0x88, 0x11, 0xe7, 0x02, 0xfb, 0x42, 0x1c, 0x16, 0x7e, 0xa0, 0x81, 0x71, 0xca, 0x0b, + 0x94, 0x2c, 0x6a, 0x6f, 0x8d, 0xca, 0x82, 0x54, 0x15, 0x14, 0xdf, 0x48, 0x82, 0x97, 0xfe, 0x9d, + 0x01, 0x2b, 0x83, 0x96, 0x56, 0x5d, 0xa7, 0x2e, 0x8e, 0x63, 0x4b, 0xe6, 0xb6, 0x88, 0xf4, 0xe7, + 0x92, 0xb9, 0x7d, 0xda, 0x2e, 0x3e, 0x71, 0x5f, 0x05, 0x89, 0x22, 0xf0, 0x15, 0xb5, 0x6f, 0x51, + 0x28, 0x56, 0xba, 0x0d, 0x3b, 0x6d, 0x17, 0x67, 0xd5, 0xb2, 0x6e, 0x5b, 0x61, 0x0b, 0x40, 0x0b, + 0xd3, 0xe0, 0xba, 0x8f, 0x1d, 0x2a, 0xd4, 0x9a, 0x36, 0x91, 0xee, 0x7b, 0xea, 0x6c, 0xe1, 0xc1, + 0x56, 0x54, 0x16, 0x25, 0x24, 0xbc, 0xd6, 0xa3, 0x0d, 0xf5, 0x41, 0x60, 0x75, 0xcb, 0x27, 0x98, + 0xaa, 0x52, 0x94, 0xb8, 0x51, 0x18, 0x15, 0x49, 0x2e, 0xfc, 0x02, 0x98, 0xb0, 0x09, 0xa5, 0xb8, + 0x49, 0x78, 0xfd, 0x99, 0x8c, 0xaf, 0xe8, 0x6d, 0x41, 0x46, 0x11, 0x9f, 0xf5, 0x27, 0x4b, 0x83, + 0xbc, 0x76, 0xcd, 0xa4, 0x01, 0x7c, 0xb3, 0x27, 0x01, 0xca, 0x67, 0xdb, 0x21, 0x5b, 0xcd, 0xc3, + 0x5f, 0x15, 0xbf, 0x88, 0x92, 0x08, 0xfe, 0x6f, 0x81, 0x9c, 0x19, 0x10, 0x3b, 0xba, 0xbb, 0x5f, + 0x1b, 0x51, 0xec, 0x55, 0x66, 0xa4, 0x0d, 0xb9, 0x2d, 0x86, 0x86, 0x04, 0x68, 0xe9, 0xf7, 0x19, + 0xf0, 0xd8, 0xa0, 0x25, 0xec, 0x42, 0xa1, 0xcc, 0xe3, 0x9e, 0x15, 0xfa, 0xd8, 0x92, 0x11, 0xa7, + 0x3c, 0xbe, 0xc7, 0xa9, 0x48, 0x72, 0x59, 0xc9, 0xa7, 0xa6, 0xd3, 0x0c, 0x2d, 0xec, 0xcb, 0x70, + 0x52, 0xbb, 0xae, 0x49, 0x3a, 0x52, 0x12, 0xb0, 0x0c, 0x00, 0x3d, 0x70, 0xfd, 0x80, 0x63, 0xc8, + 0xea, 0x75, 0x9e, 0x15, 0x88, 0x9a, 0xa2, 0xa2, 0x84, 0x04, 0xbb, 0xd1, 0x0e, 0x4d, 0xa7, 0x2e, + 0x4f, 0x5d, 0x65, 0xf1, 0xd7, 0x4c, 0xa7, 0x8e, 0x38, 0x87, 0xe1, 0x5b, 0x26, 0x0d, 0x18, 0x45, + 0x1e, 0x79, 0x97, 0xd7, 0xb9, 0xa4, 0x92, 0x60, 0xf8, 0x06, 0xab, 0xfa, 0xae, 0x6f, 0x12, 0xaa, + 0x8f, 0xc7, 0xf8, 0x55, 0x45, 0x45, 0x09, 0x89, 0xd2, 0x2f, 0xf3, 0x83, 0x83, 0x84, 0x95, 0x12, + 0xf8, 0x38, 0xc8, 0x35, 0x7d, 0x37, 0xf4, 0xa4, 0x97, 0x94, 0xb7, 0x5f, 0x66, 0x44, 0x24, 0x78, + 0x2c, 0x2a, 0x5b, 0x5d, 0x6d, 0xaa, 0x8a, 0xca, 0xa8, 0x39, 0x8d, 0xf8, 0xf0, 0x7b, 0x1a, 0xc8, + 0x39, 0xd2, 0x39, 0x2c, 0xe4, 0xde, 0x1c, 0x51, 0x5c, 0x70, 0xf7, 0xc6, 0xe6, 0x0a, 0xcf, 0x0b, + 0x64, 0xf8, 0x2c, 0xc8, 0x51, 0xc3, 0xf5, 0x88, 0xf4, 0x7a, 0x21, 0x12, 0xaa, 0x31, 0xe2, 0x69, + 0xbb, 0x38, 0x13, 0xa9, 0xe3, 0x04, 0x24, 0x84, 0xe1, 0x0f, 0x34, 0x00, 0x5a, 0xd8, 0x32, 0xeb, + 0x98, 0xb7, 0x0c, 0x39, 0x6e, 0xfe, 0x70, 0xc3, 0xfa, 0x55, 0xa5, 0x5e, 0x1c, 0x5a, 0xfc, 0x8d, + 0x12, 0xd0, 0xf0, 0x43, 0x0d, 0x4c, 0xd3, 0x70, 0xdf, 0x97, 0xab, 0x28, 0x6f, 0x2e, 0xa6, 0xae, + 0x7e, 0x63, 0xa8, 0xb6, 0xd4, 0x12, 0x00, 0x95, 0xb9, 0x4e, 0xbb, 0x38, 0x9d, 0xa4, 0xa0, 0x2e, + 0x03, 0xe0, 0x8f, 0x35, 0x90, 0x6f, 0x45, 0x77, 0xf6, 0x04, 0x4f, 0xf8, 0xb7, 0x47, 0x74, 0xb0, + 0x32, 0xa2, 0xe2, 0x2c, 0x50, 0x7d, 0x80, 0xb2, 0x00, 0xfe, 0x55, 0x03, 0x3a, 0xae, 0x8b, 0x02, + 0x8f, 0xad, 0x3d, 0xdf, 0x74, 0x02, 0xe2, 0x8b, 0x7e, 0x93, 0xea, 0x79, 0x6e, 0xde, 0x70, 0xef, + 0xc2, 0x74, 0x2f, 0x5b, 0x59, 0x96, 0xd6, 0xe9, 0xeb, 0x03, 0xcc, 0x40, 0x03, 0x0d, 0xe4, 0x81, + 0x16, 0xb7, 0x34, 0xfa, 0xe4, 0x08, 0x02, 0x2d, 0xee, 0xa5, 0x64, 0x75, 0x88, 0x3b, 0xa8, 0x04, + 0x74, 0xe9, 0xc3, 0x6c, 0xba, 0x69, 0x4f, 0x5f, 0xfa, 0xf0, 0xb6, 0x30, 0x56, 0x6c, 0x85, 0xea, + 0x1a, 0x77, 0xee, 0xbb, 0x23, 0x3a, 0x7b, 0x75, 0x6b, 0xc7, 0x8d, 0x97, 0x22, 0x51, 0x94, 0xb0, + 0x03, 0xfe, 0x42, 0x03, 0x33, 0xd8, 0x30, 0x88, 0x17, 0x90, 0xba, 0xa8, 0xc5, 0x99, 0xcf, 0xa1, + 0xdc, 0x2c, 0x48, 0xab, 0x66, 0xd6, 0x93, 0xd0, 0xa8, 0xdb, 0x12, 0xf8, 0x22, 0x38, 0x4f, 0x03, + 0xd7, 0x27, 0xf5, 0x54, 0x97, 0x0b, 0x3b, 0xed, 0xe2, 0xf9, 0x5a, 0x17, 0x07, 0xa5, 0x24, 0x4b, + 0x9f, 0x8e, 0x81, 0xe2, 0x7d, 0x32, 0xe3, 0x0c, 0xef, 0xa8, 0x27, 0xc1, 0x38, 0xdf, 0x6e, 0x9d, + 0x7b, 0x25, 0x9f, 0xe8, 0xdc, 0x38, 0x15, 0x49, 0x2e, 0xab, 0xeb, 0x0c, 0x9f, 0x75, 0x1b, 0x59, + 0x2e, 0xa8, 0xea, 0x7a, 0x4d, 0x90, 0x51, 0xc4, 0x87, 0xef, 0x81, 0x71, 0x31, 0x27, 0xe1, 0x45, + 0x75, 0x84, 0x85, 0x11, 0x70, 0x3b, 0x39, 0x14, 0x92, 0x90, 0xbd, 0x05, 0x31, 0xf7, 0xb0, 0x0b, + 0xe2, 0x3d, 0x2b, 0xd0, 0xf8, 0xff, 0x78, 0x05, 0x2a, 0xfd, 0x47, 0x4b, 0xe7, 0x7d, 0x62, 0xab, + 0x35, 0x03, 0x5b, 0x04, 0x6e, 0x80, 0x39, 0xf6, 0xc8, 0x40, 0xc4, 0xb3, 0x4c, 0x03, 0x53, 0xfe, + 0xc6, 0x15, 0x01, 0xa7, 0xc6, 0x2e, 0xb5, 0x14, 0x1f, 0xf5, 0xac, 0x80, 0xaf, 0x00, 0x28, 0x1a, + 0xef, 0x2e, 0x3d, 0xa2, 0x87, 0x50, 0x2d, 0x74, 0xad, 0x47, 0x02, 0xf5, 0x59, 0x05, 0xab, 0x60, + 0xde, 0xc2, 0xfb, 0xc4, 0xaa, 0x11, 0x8b, 0x18, 0x81, 0xeb, 0x73, 0x55, 0x62, 0x0a, 0xb0, 0xd0, + 0x69, 0x17, 0xe7, 0xaf, 0xa5, 0x99, 0xa8, 0x57, 0xbe, 0xb4, 0x92, 0x4e, 0xaf, 0xe4, 0xc6, 0xc5, + 0x73, 0xe6, 0x37, 0x19, 0xb0, 0x38, 0x38, 0x32, 0xe0, 0xf7, 0xe3, 0x57, 0x97, 0x68, 0xaa, 0xdf, + 0x1e, 0x55, 0x14, 0xca, 0x67, 0x17, 0xe8, 0x7d, 0x72, 0xc1, 0xef, 0xb0, 0x0e, 0x07, 0x5b, 0xd1, + 0x9c, 0xe7, 0xad, 0x91, 0x99, 0xc0, 0x40, 0x2a, 0x93, 0xa2, 0x79, 0xc2, 0x16, 0xef, 0x95, 0xb0, + 0x45, 0x4a, 0x7f, 0xd0, 0xd2, 0x0f, 0xef, 0x38, 0x83, 0xe1, 0x4f, 0x34, 0x30, 0xeb, 0x7a, 0xc4, + 0x59, 0xdf, 0xdb, 0x7a, 0xf5, 0x4b, 0x22, 0x93, 0xa5, 0xab, 0x76, 0x1e, 0xd0, 0xce, 0x57, 0x6a, + 0xbb, 0x3b, 0x42, 0xe1, 0x9e, 0xef, 0x7a, 0xb4, 0x72, 0xa1, 0xd3, 0x2e, 0xce, 0xee, 0x76, 0x43, + 0xa1, 0x34, 0x76, 0xc9, 0x06, 0x0b, 0x9b, 0xc7, 0x01, 0xf1, 0x1d, 0x6c, 0x6d, 0xb8, 0x46, 0x68, + 0x13, 0x27, 0x10, 0x86, 0xa6, 0x86, 0x44, 0xda, 0x19, 0x87, 0x44, 0x8f, 0x81, 0x6c, 0xe8, 0x5b, + 0x32, 0x8a, 0xa7, 0xd4, 0x10, 0x14, 0x5d, 0x43, 0x8c, 0x5e, 0x5a, 0x01, 0x63, 0xcc, 0x4e, 0x78, + 0x09, 0x64, 0x7d, 0x7c, 0xc4, 0xb5, 0x4e, 0x57, 0x26, 0x98, 0x08, 0xc2, 0x47, 0x88, 0xd1, 0x4a, + 0xff, 0x58, 0x02, 0xb3, 0xa9, 0xbd, 0xc0, 0x45, 0x90, 0x51, 0x93, 0x55, 0x20, 0x95, 0x66, 0xb6, + 0x36, 0x50, 0xc6, 0xac, 0xc3, 0xe7, 0x55, 0xf1, 0x15, 0xa0, 0x45, 0x55, 0xcf, 0x39, 0x95, 0xb5, + 0xb4, 0xb1, 0x3a, 0x66, 0x48, 0x54, 0x38, 0x99, 0x0d, 0xa4, 0x21, 0xb3, 0x44, 0xd8, 0x40, 0x1a, + 0x88, 0xd1, 0x3e, 0xeb, 0x84, 0x2c, 0x1a, 0xd1, 0xe5, 0xce, 0x30, 0xa2, 0x1b, 0xbf, 0xe7, 0x88, + 0xee, 0x71, 0x90, 0x0b, 0xcc, 0xc0, 0x22, 0xfa, 0x44, 0xf7, 0xcb, 0xe3, 0x3a, 0x23, 0x22, 0xc1, + 0x83, 0x37, 0xc1, 0x44, 0x9d, 0x34, 0x70, 0x68, 0x05, 0x7a, 0x9e, 0x87, 0x50, 0x75, 0x08, 0x21, + 0x24, 0xe6, 0xa7, 0x1b, 0x42, 0x2f, 0x8a, 0x00, 0xe0, 0x13, 0x60, 0xc2, 0xc6, 0xc7, 0xa6, 0x1d, + 0xda, 0xbc, 0x27, 0xd3, 0x84, 0xd8, 0xb6, 0x20, 0xa1, 0x88, 0xc7, 0x2a, 0x23, 0x39, 0x36, 0xac, + 0x90, 0x9a, 0x2d, 0x22, 0x99, 0x3a, 0xe0, 0xb7, 0xa7, 0xaa, 0x8c, 0x9b, 0x29, 0x3e, 0xea, 0x59, + 0xc1, 0xc1, 0x4c, 0x87, 0x2f, 0x9e, 0x4a, 0x80, 0x09, 0x12, 0x8a, 0x78, 0xdd, 0x60, 0x52, 0x7e, + 0x7a, 0x10, 0x98, 0x5c, 0xdc, 0xb3, 0x02, 0x7e, 0x11, 0x4c, 0xda, 0xf8, 0xf8, 0x1a, 0x71, 0x9a, + 0xc1, 0x81, 0x3e, 0xb3, 0xac, 0xad, 0x66, 0x2b, 0x33, 0x9d, 0x76, 0x71, 0x72, 0x3b, 0x22, 0xa2, + 0x98, 0xcf, 0x85, 0x4d, 0x47, 0x0a, 0x9f, 0x4f, 0x08, 0x47, 0x44, 0x14, 0xf3, 0x59, 0x07, 0xe1, + 0xe1, 0x80, 0x25, 0x97, 0x3e, 0xdb, 0xfd, 0x32, 0xdc, 0x13, 0x64, 0x14, 0xf1, 0xe1, 0x2a, 0xc8, + 0xdb, 0xf8, 0x98, 0xbf, 0xe2, 0xf5, 0x39, 0xae, 0x96, 0xcf, 0x92, 0xb7, 0x25, 0x0d, 0x29, 0x2e, + 0x97, 0x34, 0x1d, 0x21, 0x39, 0x9f, 0x90, 0x94, 0x34, 0xa4, 0xb8, 0x2c, 0x88, 0x43, 0xc7, 0xbc, + 0x15, 0x12, 0x21, 0x0c, 0xb9, 0x67, 0x54, 0x10, 0xdf, 0x88, 0x59, 0x28, 0x29, 0xc7, 0x5e, 0xd1, + 0x76, 0x68, 0x05, 0xa6, 0x67, 0x91, 0xdd, 0x86, 0x7e, 0x81, 0xfb, 0x9f, 0xf7, 0xc9, 0xdb, 0x8a, + 0x8a, 0x12, 0x12, 0x90, 0x80, 0x31, 0xe2, 0x84, 0xb6, 0xfe, 0x08, 0xbf, 0xd8, 0x87, 0x12, 0x82, + 0x2a, 0x73, 0x36, 0x9d, 0xd0, 0x46, 0x5c, 0x3d, 0x7c, 0x1e, 0xcc, 0xd8, 0xf8, 0x98, 0x95, 0x03, + 0xe2, 0x07, 0xec, 0x7d, 0xbf, 0xc0, 0x37, 0x3f, 0xcf, 0x3a, 0xce, 0xed, 0x24, 0x03, 0x75, 0xcb, + 0xf1, 0x85, 0xa6, 0x93, 0x58, 0x78, 0x31, 0xb1, 0x30, 0xc9, 0x40, 0xdd, 0x72, 0xcc, 0xd3, 0x3e, + 0xb9, 0x15, 0x9a, 0x3e, 0xa9, 0xeb, 0x8f, 0xf2, 0x26, 0x55, 0xce, 0xf7, 0x05, 0x0d, 0x29, 0x2e, + 0x6c, 0x45, 0xe3, 0x1e, 0x9d, 0xa7, 0xe1, 0x8d, 0xe1, 0x56, 0xf2, 0x5d, 0x7f, 0xdd, 0xf7, 0xf1, + 0x89, 0xb8, 0x69, 0x92, 0x83, 0x1e, 0x48, 0x41, 0x0e, 0x5b, 0xd6, 0x6e, 0x43, 0xbf, 0xc4, 0x7d, + 0x3f, 0xec, 0x1b, 0x44, 0x55, 0x9d, 0x75, 0x06, 0x82, 0x04, 0x16, 0x03, 0x75, 0x1d, 0x16, 0x1a, + 0x8b, 0xa3, 0x05, 0xdd, 0x65, 0x20, 0x48, 0x60, 0xf1, 0x9d, 0x3a, 0x27, 0xbb, 0x0d, 0xfd, 0xff, + 0x46, 0xbc, 0x53, 0x06, 0x82, 0x04, 0x16, 0x34, 0x41, 0xd6, 0x71, 0x03, 0x7d, 0x69, 0x24, 0xd7, + 0x33, 0xbf, 0x70, 0x76, 0xdc, 0x00, 0x31, 0x0c, 0xf8, 0x73, 0x0d, 0x00, 0x2f, 0x0e, 0xd1, 0xc7, + 0x86, 0x32, 0x45, 0x48, 0x41, 0x96, 0xe3, 0xd8, 0xde, 0x74, 0x02, 0xff, 0x24, 0x7e, 0x47, 0x26, + 0x72, 0x20, 0x61, 0x05, 0xfc, 0xad, 0x06, 0x1e, 0x49, 0xb6, 0xc9, 0xca, 0xbc, 0x02, 0xf7, 0xc8, + 0xf5, 0x61, 0x87, 0x79, 0xc5, 0x75, 0xad, 0x8a, 0xde, 0x69, 0x17, 0x1f, 0x59, 0xef, 0x83, 0x8a, + 0xfa, 0xda, 0x02, 0xff, 0xa8, 0x81, 0x79, 0x59, 0x45, 0x13, 0x16, 0x16, 0xb9, 0x03, 0xc9, 0xb0, + 0x1d, 0x98, 0xc6, 0x11, 0x7e, 0x54, 0xbf, 0x4b, 0xf7, 0xf0, 0x51, 0xaf, 0x69, 0xf0, 0x2f, 0x1a, + 0x98, 0xae, 0x13, 0x8f, 0x38, 0x75, 0xe2, 0x18, 0xcc, 0xd6, 0xe5, 0xa1, 0x8c, 0x0d, 0xd2, 0xb6, + 0x6e, 0x24, 0x20, 0x84, 0x99, 0x65, 0x69, 0xe6, 0x74, 0x92, 0x75, 0xda, 0x2e, 0x5e, 0x8c, 0x97, + 0x26, 0x39, 0xa8, 0xcb, 0x4a, 0xf8, 0x91, 0x06, 0x66, 0xe3, 0x03, 0x10, 0x57, 0xca, 0xca, 0x08, + 0xe3, 0x80, 0xb7, 0xaf, 0xeb, 0xdd, 0x80, 0x28, 0x6d, 0x01, 0xfc, 0x93, 0xc6, 0x3a, 0xb5, 0xe8, + 0xdd, 0x47, 0xf5, 0x12, 0xf7, 0xe5, 0x3b, 0x43, 0xf7, 0xa5, 0x42, 0x10, 0xae, 0xbc, 0x1c, 0xb7, + 0x82, 0x8a, 0x73, 0xda, 0x2e, 0x2e, 0x24, 0x3d, 0xa9, 0x18, 0x28, 0x69, 0x21, 0xfc, 0x91, 0x06, + 0xa6, 0x49, 0xdc, 0x71, 0x53, 0xfd, 0xf1, 0xa1, 0x38, 0xb1, 0x6f, 0x13, 0x2f, 0x5e, 0xea, 0x09, + 0x16, 0x45, 0x5d, 0xd8, 0xac, 0x83, 0x24, 0xc7, 0xd8, 0xf6, 0x2c, 0xa2, 0xff, 0xff, 0x90, 0x3b, + 0xc8, 0x4d, 0xa1, 0x17, 0x45, 0x00, 0xf0, 0x32, 0xc8, 0x3b, 0xa1, 0x65, 0xe1, 0x7d, 0x8b, 0xe8, + 0x4f, 0xf0, 0x5e, 0x44, 0x4d, 0x31, 0x77, 0x24, 0x1d, 0x29, 0x89, 0x45, 0xf6, 0x4e, 0x4a, 0xe5, + 0x19, 0x9c, 0x03, 0xd9, 0x43, 0x22, 0x7f, 0x0e, 0x46, 0xec, 0x4f, 0x58, 0x07, 0xb9, 0x16, 0xb6, + 0xc2, 0xe8, 0xa9, 0x37, 0xe4, 0x1a, 0x8d, 0x84, 0xf2, 0x17, 0x33, 0x2f, 0x68, 0x8b, 0xb7, 0x35, + 0x70, 0xb1, 0x7f, 0xfa, 0x3f, 0x54, 0xb3, 0x7e, 0xa5, 0x81, 0xf9, 0x9e, 0x4c, 0xef, 0x63, 0xd1, + 0xad, 0x6e, 0x8b, 0xde, 0x18, 0x76, 0xca, 0xd6, 0x02, 0xdf, 0x74, 0x9a, 0xbc, 0x4f, 0x49, 0x9a, + 0xf7, 0x53, 0x0d, 0xcc, 0xa5, 0x93, 0xe7, 0x61, 0xfa, 0xab, 0x74, 0x3b, 0x03, 0x2e, 0xf6, 0x6f, + 0xaf, 0xa0, 0xaf, 0xde, 0x91, 0xa3, 0x79, 0x8f, 0xf7, 0x9b, 0xdd, 0x7d, 0xa0, 0x81, 0xa9, 0x9b, + 0x4a, 0x2e, 0xfa, 0xb9, 0x70, 0xe8, 0x93, 0x80, 0xa8, 0x5a, 0xc5, 0x0c, 0x8a, 0x92, 0xb8, 0xa5, + 0x3f, 0x6b, 0x60, 0xa1, 0x6f, 0x19, 0x66, 0x0f, 0x56, 0x6c, 0x59, 0xee, 0x91, 0x18, 0xe8, 0x24, + 0xa6, 0xa5, 0xeb, 0x9c, 0x8a, 0x24, 0x37, 0xe1, 0xbd, 0xcc, 0xe7, 0xe5, 0xbd, 0xd2, 0xdf, 0x34, + 0xb0, 0x74, 0xaf, 0x48, 0x7c, 0x28, 0x47, 0xba, 0x0a, 0xf2, 0xb2, 0x85, 0x3a, 0xe1, 0xc7, 0x29, + 0x5f, 0x0d, 0xb2, 0x68, 0xf0, 0xff, 0x90, 0x11, 0x7f, 0x95, 0xde, 0xd7, 0xc0, 0x5c, 0x8d, 0xf8, + 0x2d, 0xd3, 0x20, 0x88, 0x34, 0x88, 0x4f, 0x1c, 0x83, 0xc0, 0x35, 0x30, 0xc9, 0x7f, 0xa7, 0xf3, + 0xb0, 0x11, 0x0d, 0xb1, 0xe7, 0xa5, 0xcb, 0x27, 0x77, 0x22, 0x06, 0x8a, 0x65, 0xd4, 0xc0, 0x3b, + 0x33, 0x70, 0xe0, 0xbd, 0x04, 0xc6, 0xbc, 0x78, 0x1c, 0x98, 0x67, 0x5c, 0x3e, 0x01, 0xe4, 0xd4, + 0xd2, 0xdf, 0x35, 0xd0, 0xef, 0xbf, 0x55, 0x60, 0x0b, 0x4c, 0x50, 0x61, 0x9c, 0x74, 0xde, 0xee, + 0x03, 0x3a, 0x2f, 0xbd, 0x55, 0x71, 0x4d, 0x44, 0xd4, 0x08, 0x8c, 0xf9, 0xcf, 0xc0, 0x95, 0xd0, + 0xa9, 0xcb, 0x01, 0xde, 0xb4, 0xf0, 0x5f, 0x75, 0x5d, 0xd0, 0x90, 0xe2, 0xc2, 0x4b, 0x62, 0xd4, + 0x94, 0x98, 0xdf, 0x44, 0x63, 0xa6, 0xca, 0x95, 0x3b, 0x77, 0x0b, 0xe7, 0x3e, 0xbe, 0x5b, 0x38, + 0xf7, 0xc9, 0xdd, 0xc2, 0xb9, 0xef, 0x76, 0x0a, 0xda, 0x9d, 0x4e, 0x41, 0xfb, 0xb8, 0x53, 0xd0, + 0x3e, 0xe9, 0x14, 0xb4, 0x7f, 0x75, 0x0a, 0xda, 0xcf, 0x3e, 0x2d, 0x9c, 0xfb, 0xe6, 0x84, 0x34, + 0xed, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0xda, 0x75, 0x14, 0x43, 0x2a, 0x00, 0x00, } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto index 8ee83cf5670..7e18cb9e314 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto @@ -113,6 +113,16 @@ message CustomResourceConversion { // alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. // +optional optional WebhookClientConfig webhookClientConfig = 2; + + // ConversionReviewVersions is an ordered list of preferred `ConversionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, conversion will fail for this object. + // If a persisted Webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail. + // Default to `['v1beta1']`. + // +optional + repeated string conversionReviewVersions = 3; } // CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format @@ -431,6 +441,8 @@ message JSONSchemaProps { optional ExternalDocumentation externalDocs = 35; optional JSON example = 36; + + optional bool nullable = 37; } // JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go index e99d9e49b52..973ac0eedd5 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go @@ -91,6 +91,16 @@ type CustomResourceConversion struct { // alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. // +optional WebhookClientConfig *WebhookClientConfig `json:"webhookClientConfig,omitempty" protobuf:"bytes,2,name=webhookClientConfig"` + + // ConversionReviewVersions is an ordered list of preferred `ConversionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, conversion will fail for this object. + // If a persisted Webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail. + // Default to `['v1beta1']`. + // +optional + ConversionReviewVersions []string `json:"conversionReviewVersions,omitempty" protobuf:"bytes,3,rep,name=conversionReviewVersions"` } // WebhookClientConfig contains the information to make a TLS diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types_jsonschema.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types_jsonschema.go index 9776731cf99..54c0a4ae13f 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types_jsonschema.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types_jsonschema.go @@ -54,6 +54,7 @@ type JSONSchemaProps struct { Definitions JSONSchemaDefinitions `json:"definitions,omitempty" protobuf:"bytes,34,opt,name=definitions"` ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty" protobuf:"bytes,35,opt,name=externalDocs"` Example *JSON `json:"example,omitempty" protobuf:"bytes,36,opt,name=example"` + Nullable bool `json:"nullable,omitempty" protobuf:"bytes,37,opt,name=nullable"` } // JSON represents any valid JSON value. @@ -68,7 +69,7 @@ type JSON struct { // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators func (_ JSON) OpenAPISchemaType() []string { // TODO: return actual types when anyOf is supported - return []string{} + return nil } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing @@ -91,7 +92,7 @@ type JSONSchemaPropsOrArray struct { // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators func (_ JSONSchemaPropsOrArray) OpenAPISchemaType() []string { // TODO: return actual types when anyOf is supported - return []string{} + return nil } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing @@ -111,7 +112,7 @@ type JSONSchemaPropsOrBool struct { // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators func (_ JSONSchemaPropsOrBool) OpenAPISchemaType() []string { // TODO: return actual types when anyOf is supported - return []string{} + return nil } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing @@ -133,7 +134,7 @@ type JSONSchemaPropsOrStringArray struct { // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators func (_ JSONSchemaPropsOrStringArray) OpenAPISchemaType() []string { // TODO: return actual types when anyOf is supported - return []string{} + return nil } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.conversion.go index cab8019b458..e7ae745b627 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.conversion.go @@ -296,6 +296,7 @@ func Convert_apiextensions_CustomResourceColumnDefinition_To_v1beta1_CustomResou func autoConvert_v1beta1_CustomResourceConversion_To_apiextensions_CustomResourceConversion(in *CustomResourceConversion, out *apiextensions.CustomResourceConversion, s conversion.Scope) error { out.Strategy = apiextensions.ConversionStrategyType(in.Strategy) out.WebhookClientConfig = (*apiextensions.WebhookClientConfig)(unsafe.Pointer(in.WebhookClientConfig)) + out.ConversionReviewVersions = *(*[]string)(unsafe.Pointer(&in.ConversionReviewVersions)) return nil } @@ -307,6 +308,7 @@ func Convert_v1beta1_CustomResourceConversion_To_apiextensions_CustomResourceCon func autoConvert_apiextensions_CustomResourceConversion_To_v1beta1_CustomResourceConversion(in *apiextensions.CustomResourceConversion, out *CustomResourceConversion, s conversion.Scope) error { out.Strategy = ConversionStrategyType(in.Strategy) out.WebhookClientConfig = (*WebhookClientConfig)(unsafe.Pointer(in.WebhookClientConfig)) + out.ConversionReviewVersions = *(*[]string)(unsafe.Pointer(&in.ConversionReviewVersions)) return nil } @@ -902,6 +904,7 @@ func autoConvert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(in *JS } else { out.Example = nil } + out.Nullable = in.Nullable return nil } @@ -916,6 +919,7 @@ func autoConvert_apiextensions_JSONSchemaProps_To_v1beta1_JSONSchemaProps(in *ap out.Ref = (*string)(unsafe.Pointer(in.Ref)) out.Description = in.Description out.Type = in.Type + out.Nullable = in.Nullable out.Format = in.Format out.Title = in.Title if in.Default != nil { diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.deepcopy.go index 8dd7a87bfcf..20ded01bf37 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.deepcopy.go @@ -130,6 +130,11 @@ func (in *CustomResourceConversion) DeepCopyInto(out *CustomResourceConversion) *out = new(WebhookClientConfig) (*in).DeepCopyInto(*out) } + if in.ConversionReviewVersions != nil { + in, out := &in.ConversionReviewVersions, &out.ConversionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/BUILD b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/BUILD index 1c80d0c5a0d..5f974a41f5e 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/BUILD +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/BUILD @@ -13,6 +13,7 @@ go_library( importpath = "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation", deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go index f0357a12467..39aed4b1f8e 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go @@ -24,13 +24,13 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" genericvalidation "k8s.io/apimachinery/pkg/api/validation" "k8s.io/apimachinery/pkg/util/sets" + utilvalidation "k8s.io/apimachinery/pkg/util/validation" validationutil "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/webhook" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" ) var ( @@ -112,6 +112,10 @@ func ValidateCustomResourceDefinitionVersion(version *apiextensions.CustomResour // ValidateCustomResourceDefinitionSpec statically validates func ValidateCustomResourceDefinitionSpec(spec *apiextensions.CustomResourceDefinitionSpec, fldPath *field.Path) field.ErrorList { + return validateCustomResourceDefinitionSpec(spec, true, fldPath) +} + +func validateCustomResourceDefinitionSpec(spec *apiextensions.CustomResourceDefinitionSpec, requireRecognizedVersion bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if len(spec.Group) == 0 { @@ -195,18 +199,8 @@ func ValidateCustomResourceDefinitionSpec(spec *apiextensions.CustomResourceDefi } allErrs = append(allErrs, ValidateCustomResourceDefinitionNames(&spec.Names, fldPath.Child("names"))...) - - if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) { - allErrs = append(allErrs, ValidateCustomResourceDefinitionValidation(spec.Validation, hasAnyStatusEnabled(spec), fldPath.Child("validation"))...) - } else if spec.Validation != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("validation"), "disabled by feature-gate CustomResourceValidation")) - } - - if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) { - allErrs = append(allErrs, ValidateCustomResourceDefinitionSubresources(spec.Subresources, fldPath.Child("subresources"))...) - } else if spec.Subresources != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("subresources"), "disabled by feature-gate CustomResourceSubresources")) - } + allErrs = append(allErrs, ValidateCustomResourceDefinitionValidation(spec.Validation, hasAnyStatusEnabled(spec), fldPath.Child("validation"))...) + allErrs = append(allErrs, ValidateCustomResourceDefinitionSubresources(spec.Subresources, fldPath.Child("subresources"))...) for i := range spec.AdditionalPrinterColumns { if errs := ValidateCustomResourceColumnDefinition(&spec.AdditionalPrinterColumns[i], fldPath.Child("additionalPrinterColumns").Index(i)); len(errs) > 0 { @@ -214,7 +208,7 @@ func ValidateCustomResourceDefinitionSpec(spec *apiextensions.CustomResourceDefi } } - allErrs = append(allErrs, ValidateCustomResourceConversion(spec.Conversion, fldPath.Child("conversion"))...) + allErrs = append(allErrs, validateCustomResourceConversion(spec.Conversion, requireRecognizedVersion, fldPath.Child("conversion"))...) return allErrs } @@ -234,8 +228,66 @@ func validateEnumStrings(fldPath *field.Path, value string, accepted []string, r return field.ErrorList{field.NotSupported(fldPath, value, accepted)} } +var acceptedConversionReviewVersion = []string{v1beta1.SchemeGroupVersion.Version} + +func isAcceptedConversionReviewVersion(v string) bool { + for _, version := range acceptedConversionReviewVersion { + if v == version { + return true + } + } + return false +} + +func validateConversionReviewVersions(versions []string, requireRecognizedVersion bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(versions) < 1 { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else { + seen := map[string]bool{} + hasAcceptedVersion := false + for i, v := range versions { + if seen[v] { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), v, "duplicate version")) + continue + } + seen[v] = true + for _, errString := range utilvalidation.IsDNS1035Label(v) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), v, errString)) + } + if isAcceptedConversionReviewVersion(v) { + hasAcceptedVersion = true + } + } + if requireRecognizedVersion && !hasAcceptedVersion { + allErrs = append(allErrs, field.Invalid( + fldPath, versions, + fmt.Sprintf("none of the versions accepted by this server. accepted version(s) are %v", + strings.Join(acceptedConversionReviewVersion, ", ")))) + } + } + return allErrs +} + +// hasValidConversionReviewVersion return true if there is a valid version or if the list is empty. +func hasValidConversionReviewVersionOrEmpty(versions []string) bool { + if len(versions) < 1 { + return true + } + for _, v := range versions { + if isAcceptedConversionReviewVersion(v) { + return true + } + } + return false +} + // ValidateCustomResourceConversion statically validates func ValidateCustomResourceConversion(conversion *apiextensions.CustomResourceConversion, fldPath *field.Path) field.ErrorList { + return validateCustomResourceConversion(conversion, true, fldPath) +} + +func validateCustomResourceConversion(conversion *apiextensions.CustomResourceConversion, requireRecognizedVersion bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if conversion == nil { return allErrs @@ -255,15 +307,22 @@ func ValidateCustomResourceConversion(conversion *apiextensions.CustomResourceCo allErrs = append(allErrs, webhook.ValidateWebhookService(fldPath.Child("webhookClientConfig").Child("service"), cc.Service.Name, cc.Service.Namespace, cc.Service.Path)...) } } - } else if conversion.WebhookClientConfig != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("webhookClientConfig"), "should not be set when strategy is not set to Webhook")) + allErrs = append(allErrs, validateConversionReviewVersions(conversion.ConversionReviewVersions, requireRecognizedVersion, fldPath.Child("conversionReviewVersions"))...) + } else { + if conversion.WebhookClientConfig != nil { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("webhookClientConfig"), "should not be set when strategy is not set to Webhook")) + } + if len(conversion.ConversionReviewVersions) > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("conversionReviewVersions"), "should not be set when strategy is not set to Webhook")) + } } return allErrs } // ValidateCustomResourceDefinitionSpecUpdate statically validates func ValidateCustomResourceDefinitionSpecUpdate(spec, oldSpec *apiextensions.CustomResourceDefinitionSpec, established bool, fldPath *field.Path) field.ErrorList { - allErrs := ValidateCustomResourceDefinitionSpec(spec, fldPath) + requireRecognizedVersion := oldSpec.Conversion == nil || hasValidConversionReviewVersionOrEmpty(oldSpec.Conversion.ConversionReviewVersions) + allErrs := validateCustomResourceDefinitionSpec(spec, requireRecognizedVersion, fldPath) if established { // these effect the storage and cannot be changed therefore @@ -476,7 +535,7 @@ func ValidateCustomResourceDefinitionValidation(customResourceValidation *apiext if schema := customResourceValidation.OpenAPIV3Schema; schema != nil { // if the status subresource is enabled, only certain fields are allowed inside the root schema. // these fields are chosen such that, if status is extracted as properties["status"], it's validation is not lost. - if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && statusSubresourceEnabled { + if statusSubresourceEnabled { v := reflect.ValueOf(schema).Elem() for i := 0; i < v.NumField(); i++ { // skip zero values @@ -502,6 +561,10 @@ func ValidateCustomResourceDefinitionValidation(customResourceValidation *apiext } } + if schema.Nullable { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("openAPIV3Schema.nullable"), fmt.Sprintf(`nullable cannot be true at the root`))) + } + openAPIV3Schema := &specStandardValidatorV3{} allErrs = append(allErrs, ValidateCustomResourceDefinitionOpenAPISchema(schema, fldPath.Child("openAPIV3Schema"), openAPIV3Schema)...) } @@ -640,7 +703,7 @@ func (v *specStandardValidatorV3) validate(schema *apiextensions.JSONSchemaProps } if schema.Type == "null" { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("type"), "type cannot be set to null")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("type"), "type cannot be set to null, use nullable as an alternative")) } if schema.Items != nil && len(schema.Items.JSONSchemas) != 0 { diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/zz_generated.deepcopy.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/zz_generated.deepcopy.go index 5a01307539d..667e556ac95 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/zz_generated.deepcopy.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/zz_generated.deepcopy.go @@ -48,6 +48,11 @@ func (in *CustomResourceConversion) DeepCopyInto(out *CustomResourceConversion) *out = new(WebhookClientConfig) (*in).DeepCopyInto(*out) } + if in.ConversionReviewVersions != nil { + in, out := &in.ConversionReviewVersions, &out.ConversionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD index 5da6c14cda3..c7378143b9d 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD @@ -13,7 +13,6 @@ go_library( "customresource_discovery.go", "customresource_discovery_controller.go", "customresource_handler.go", - "helpers.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver", importpath = "k8s.io/apiextensions-apiserver/pkg/apiserver", @@ -33,6 +32,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/establish:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/crdserverscheme:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", @@ -55,11 +55,14 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/discovery:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go index b6830d762c8..1ba74a1933a 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go @@ -21,10 +21,23 @@ import ( "net/http" "time" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + _ "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" + _ "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" + _ "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" + internalinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" + "k8s.io/apiextensions-apiserver/pkg/controller/establish" + "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" + "k8s.io/apiextensions-apiserver/pkg/controller/status" + "k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/version" "k8s.io/apiserver/pkg/endpoints/discovery" genericregistry "k8s.io/apiserver/pkg/registry/generic" @@ -32,20 +45,6 @@ import ( genericapiserver "k8s.io/apiserver/pkg/server" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/apiserver/pkg/util/webhook" - - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/pkg/client/clientset/internalclientset" - internalinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" - "k8s.io/apiextensions-apiserver/pkg/controller/establish" - "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" - "k8s.io/apiextensions-apiserver/pkg/controller/status" - "k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition" - - _ "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - _ "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" - _ "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" ) var ( @@ -184,6 +183,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) c.ExtraConfig.ServiceResolver, c.ExtraConfig.AuthResolverWrapper, c.ExtraConfig.MasterCount, + s.GenericAPIServer.Authorizer, ) if err != nil { return nil, err @@ -199,17 +199,25 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) crdHandler, ) - s.GenericAPIServer.AddPostStartHook("start-apiextensions-informers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-apiextensions-informers", func(context genericapiserver.PostStartHookContext) error { s.Informers.Start(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("start-apiextensions-controllers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-apiextensions-controllers", func(context genericapiserver.PostStartHookContext) error { go crdController.Run(context.StopCh) go namingController.Run(context.StopCh) go establishingController.Run(context.StopCh) go finalizingController.Run(5, context.StopCh) return nil }) + // we don't want to report healthy until we can handle all CRDs that have already been registered. Waiting for the informer + // to sync makes sure that the lister will be valid before we begin. There may still be races for CRDs added after startup, + // but we won't go healthy until we can handle the ones already present. + s.GenericAPIServer.AddPostStartHookOrDie("crd-informer-synced", func(context genericapiserver.PostStartHookContext) error { + return wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { + return s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer().HasSynced(), nil + }, context.StopCh) + }) return s, nil } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD index 560e9388341..2639f2ab6e3 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/BUILD @@ -1,9 +1,10 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ "converter.go", + "metrics.go", "nop_converter.go", "webhook_converter.go", ], @@ -22,6 +23,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", ], ) @@ -38,3 +40,16 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = ["converter_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library", + ], +) diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go index dd7a193c824..ccece40054f 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/converter.go @@ -43,28 +43,36 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin validVersions[schema.GroupVersion{Group: crd.Spec.Group, Version: version.Name}] = true } + var converter crConverterInterface switch crd.Spec.Conversion.Strategy { case apiextensions.NoneConverter: - unsafe = &crConverter{ - clusterScoped: crd.Spec.Scope == apiextensions.ClusterScoped, - delegate: &nopConverter{ - validVersions: validVersions, - }, - } - return &safeConverterWrapper{unsafe}, unsafe, nil + converter = &nopConverter{} case apiextensions.WebhookConverter: return nil, nil, fmt.Errorf("webhook conversion is disabled on this cluster") + default: + return nil, nil, fmt.Errorf("unknown conversion strategy %q for CRD %s", crd.Spec.Conversion.Strategy, crd.Name) } - - return nil, nil, fmt.Errorf("unknown conversion strategy %q for CRD %s", crd.Spec.Conversion.Strategy, crd.Name) + unsafe = &crConverter{ + validVersions: validVersions, + clusterScoped: crd.Spec.Scope == apiextensions.ClusterScoped, + converter: converter, + } + return &safeConverterWrapper{unsafe}, unsafe, nil } -var _ runtime.ObjectConvertor = &crConverter{} +// crConverterInterface is the interface all cr converters must implement +type crConverterInterface interface { + // Convert converts in object to the given gvk and returns the converted object. + // Note that the function may mutate in object and return it. A safe wrapper will make sure + // a safe converter will be returned. + Convert(in runtime.Object, targetGVK schema.GroupVersion) (runtime.Object, error) +} -// crConverter extends the delegate with generic CR conversion behaviour. The delegate will implement the +// crConverter extends the delegate converter with generic CR conversion behaviour. The delegate will implement the // user defined conversion strategy given in the CustomResourceDefinition. type crConverter struct { - delegate runtime.ObjectConvertor + converter crConverterInterface + validVersions map[schema.GroupVersion]bool clusterScoped bool } @@ -81,29 +89,60 @@ func (c *crConverter) ConvertFieldLabel(gvk schema.GroupVersionKind, label, valu } func (c *crConverter) Convert(in, out, context interface{}) error { - return c.delegate.Convert(in, out, context) + unstructIn, ok := in.(*unstructured.Unstructured) + if !ok { + return fmt.Errorf("input type %T in not valid for unstructured conversion", in) + } + + unstructOut, ok := out.(*unstructured.Unstructured) + if !ok { + return fmt.Errorf("output type %T in not valid for unstructured conversion", out) + } + + outGVK := unstructOut.GroupVersionKind() + converted, err := c.ConvertToVersion(unstructIn, outGVK.GroupVersion()) + if err != nil { + return err + } + unstructuredConverted, ok := converted.(runtime.Unstructured) + if !ok { + // this should not happened + return fmt.Errorf("CR conversion failed") + } + unstructOut.SetUnstructuredContent(unstructuredConverted.UnstructuredContent()) + return nil } // ConvertToVersion converts in object to the given gvk in place and returns the same `in` object. +// The in object can be a single object or a UnstructuredList. CRD storage implementation creates an +// UnstructuredList with the request's GV, populates it from storage, then calls conversion to convert +// the individual items. This function assumes it never gets a v1.List. func (c *crConverter) ConvertToVersion(in runtime.Object, target runtime.GroupVersioner) (runtime.Object, error) { - // Run the converter on the list items instead of list itself + fromGVK := in.GetObjectKind().GroupVersionKind() + toGVK, ok := target.KindForGroupVersionKinds([]schema.GroupVersionKind{fromGVK}) + if !ok { + // TODO: should this be a typed error? + return nil, fmt.Errorf("%v is unstructured and is not suitable for converting to %q", fromGVK.String(), target) + } + if !c.validVersions[toGVK.GroupVersion()] { + return nil, fmt.Errorf("request to convert CR to an invalid group/version: %s", toGVK.GroupVersion().String()) + } + // Note that even if the request is for a list, the GV of the request UnstructuredList is what + // is expected to convert to. As mentioned in the function's document, it is not expected to + // get a v1.List. + if !c.validVersions[fromGVK.GroupVersion()] { + return nil, fmt.Errorf("request to convert CR from an invalid group/version: %s", fromGVK.GroupVersion().String()) + } + // Check list item's apiVersion if list, ok := in.(*unstructured.UnstructuredList); ok { for i := range list.Items { - obj, err := c.delegate.ConvertToVersion(&list.Items[i], target) - if err != nil { - return nil, err + expectedGV := list.Items[i].GroupVersionKind().GroupVersion() + if !c.validVersions[expectedGV] { + return nil, fmt.Errorf("request to convert CR list failed, list index %d has invalid group/version: %s", i, expectedGV.String()) } - - u, ok := obj.(*unstructured.Unstructured) - if !ok { - return nil, fmt.Errorf("output type %T in not valid for unstructured conversion", obj) - } - list.Items[i] = *u } - return list, nil } - - return c.delegate.ConvertToVersion(in, target) + return c.converter.Convert(in, toGVK.GroupVersion()) } // safeConverterWrapper is a wrapper over an unsafe object converter that makes copy of the input and then delegate to the unsafe converter. @@ -111,7 +150,7 @@ type safeConverterWrapper struct { unsafe runtime.ObjectConvertor } -var _ runtime.ObjectConvertor = &nopConverter{} +var _ runtime.ObjectConvertor = &safeConverterWrapper{} // ConvertFieldLabel delegate the call to the unsafe converter. func (c *safeConverterWrapper) ConvertFieldLabel(gvk schema.GroupVersionKind, label, value string) (string, string, error) { diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/metrics.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/metrics.go new file mode 100644 index 00000000000..89090d7f999 --- /dev/null +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/metrics.go @@ -0,0 +1,88 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "fmt" + "strconv" + "sync" + "time" + + "github.com/prometheus/client_golang/prometheus" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + latencyBuckets = prometheus.ExponentialBuckets(0.001, 2, 15) +) + +// converterMetricFactory holds metrics for all CRD converters +type converterMetricFactory struct { + // A map from a converter name to it's metric. Allows the converterMetric to be created + // again with the same metric for a specific converter (e.g. 'webhook'). + durations map[string]*prometheus.HistogramVec + factoryLock sync.Mutex +} + +func newConverterMertricFactory() *converterMetricFactory { + return &converterMetricFactory{durations: map[string]*prometheus.HistogramVec{}, factoryLock: sync.Mutex{}} +} + +var _ crConverterInterface = &converterMetric{} + +type converterMetric struct { + delegate crConverterInterface + latencies *prometheus.HistogramVec + crdName string +} + +func (c *converterMetricFactory) addMetrics(converterName string, crdName string, converter crConverterInterface) (crConverterInterface, error) { + c.factoryLock.Lock() + defer c.factoryLock.Unlock() + metric, exists := c.durations[converterName] + if !exists { + metric = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: fmt.Sprintf("apiserver_crd_%s_conversion_duration_seconds", converterName), + Help: fmt.Sprintf("CRD %s conversion duration in seconds", converterName), + Buckets: latencyBuckets, + }, + []string{"crd_name", "from_version", "to_version", "succeeded"}) + err := prometheus.Register(metric) + if err != nil { + return nil, err + } + c.durations[converterName] = metric + } + return &converterMetric{latencies: metric, delegate: converter, crdName: crdName}, nil +} + +func (m *converterMetric) Convert(in runtime.Object, targetGV schema.GroupVersion) (runtime.Object, error) { + start := time.Now() + obj, err := m.delegate.Convert(in, targetGV) + fromVersion := in.GetObjectKind().GroupVersionKind().Version + toVersion := targetGV.Version + + // only record this observation if the version is different + if fromVersion != toVersion { + m.latencies.WithLabelValues( + m.crdName, fromVersion, toVersion, strconv.FormatBool(err == nil)).Observe(time.Since(start).Seconds()) + } + return obj, err +} diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/nop_converter.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/nop_converter.go index 8791238c5d0..8254fdfc0b9 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/nop_converter.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/conversion/nop_converter.go @@ -17,9 +17,6 @@ limitations under the License. package conversion import ( - "errors" - "fmt" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -27,53 +24,18 @@ import ( // nopConverter is a converter that only sets the apiVersion fields, but does not real conversion. type nopConverter struct { - validVersions map[schema.GroupVersion]bool } -var _ runtime.ObjectConvertor = &nopConverter{} +var _ crConverterInterface = &nopConverter{} -func (nopConverter) ConvertFieldLabel(gvk schema.GroupVersionKind, label, value string) (string, string, error) { - return "", "", errors.New("unstructured cannot convert field labels") -} - -func (c *nopConverter) Convert(in, out, context interface{}) error { - unstructIn, ok := in.(*unstructured.Unstructured) - if !ok { - return fmt.Errorf("input type %T in not valid for unstructured conversion", in) +// ConvertToVersion converts in object to the given gv in place and returns the same `in` object. +func (c *nopConverter) Convert(in runtime.Object, targetGV schema.GroupVersion) (runtime.Object, error) { + // Run the converter on the list items instead of list itself + if list, ok := in.(*unstructured.UnstructuredList); ok { + for i := range list.Items { + list.Items[i].SetGroupVersionKind(targetGV.WithKind(list.Items[i].GroupVersionKind().Kind)) + } } - - unstructOut, ok := out.(*unstructured.Unstructured) - if !ok { - return fmt.Errorf("output type %T in not valid for unstructured conversion", out) - } - - outGVK := unstructOut.GroupVersionKind() - if !c.validVersions[outGVK.GroupVersion()] { - return fmt.Errorf("request to convert CR from an invalid group/version: %s", outGVK.String()) - } - inGVK := unstructIn.GroupVersionKind() - if !c.validVersions[inGVK.GroupVersion()] { - return fmt.Errorf("request to convert CR to an invalid group/version: %s", inGVK.String()) - } - - unstructOut.SetUnstructuredContent(unstructIn.UnstructuredContent()) - _, err := c.ConvertToVersion(unstructOut, outGVK.GroupVersion()) - if err != nil { - return err - } - return nil -} - -func (c *nopConverter) ConvertToVersion(in runtime.Object, target runtime.GroupVersioner) (runtime.Object, error) { - kind := in.GetObjectKind().GroupVersionKind() - gvk, ok := target.KindForGroupVersionKinds([]schema.GroupVersionKind{kind}) - if !ok { - // TODO: should this be a typed error? - return nil, fmt.Errorf("%v is unstructured and is not suitable for converting to %q", kind, target) - } - if !c.validVersions[gvk.GroupVersion()] { - return nil, fmt.Errorf("request to convert CR to an invalid group/version: %s", gvk.String()) - } - in.GetObjectKind().SetGroupVersionKind(gvk) + in.GetObjectKind().SetGroupVersionKind(targetGV.WithKind(in.GetObjectKind().GroupVersionKind().Kind)) return in, nil } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go index 3b13e8357db..74746d16bba 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_discovery_controller.go @@ -127,16 +127,16 @@ func (c *DiscoveryController) sync(version schema.GroupVersion) error { } apiResourcesForDiscovery = append(apiResourcesForDiscovery, metav1.APIResource{ - Name: crd.Status.AcceptedNames.Plural, - SingularName: crd.Status.AcceptedNames.Singular, - Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, - Kind: crd.Status.AcceptedNames.Kind, - Verbs: verbs, - ShortNames: crd.Status.AcceptedNames.ShortNames, - Categories: crd.Status.AcceptedNames.Categories, + Name: crd.Status.AcceptedNames.Plural, + SingularName: crd.Status.AcceptedNames.Singular, + Namespaced: crd.Spec.Scope == apiextensions.NamespaceScoped, + Kind: crd.Status.AcceptedNames.Kind, + Verbs: verbs, + ShortNames: crd.Status.AcceptedNames.ShortNames, + Categories: crd.Status.AcceptedNames.Categories, }) - subresources, err := getSubresourcesForVersion(crd, version.Version) + subresources, err := apiextensions.GetSubresourcesForVersion(crd, version.Version) if err != nil { return err } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 2cd4b83f5c5..921adda8b81 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -18,6 +18,7 @@ package apiserver import ( "fmt" + "k8s.io/klog" "net/http" "path" "strings" @@ -25,8 +26,16 @@ import ( "sync/atomic" "time" - "k8s.io/klog" - + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" + informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" + listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + "k8s.io/apiextensions-apiserver/pkg/controller/establish" + "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" + "k8s.io/apiextensions-apiserver/pkg/crdserverscheme" + apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" + "k8s.io/apiextensions-apiserver/pkg/registry/customresource" + "k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor" apiequality "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -41,6 +50,7 @@ import ( "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/endpoints/handlers" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/metrics" @@ -49,21 +59,10 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/storage/storagebackend" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/apiserver/pkg/util/webhook" "k8s.io/client-go/scale" "k8s.io/client-go/scale/scheme/autoscalingv1" "k8s.io/client-go/tools/cache" - - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/apiextensions-apiserver/pkg/apiserver/conversion" - informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" - listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" - "k8s.io/apiextensions-apiserver/pkg/controller/establish" - "k8s.io/apiextensions-apiserver/pkg/controller/finalizer" - "k8s.io/apiextensions-apiserver/pkg/crdserverscheme" - apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" - "k8s.io/apiextensions-apiserver/pkg/registry/customresource" - "k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor" - "k8s.io/apiserver/pkg/util/webhook" ) // crdHandler serves the `/apis` endpoint. @@ -92,6 +91,9 @@ type crdHandler struct { masterCount int converterFactory *conversion.CRConverterFactory + + // so that we can do create on update. + authorizer authorizer.Authorizer } // crdInfo stores enough information to serve the storage for the custom resource @@ -130,7 +132,8 @@ func NewCustomResourceDefinitionHandler( establishingController *establish.EstablishingController, serviceResolver webhook.ServiceResolver, authResolverWrapper webhook.AuthenticationInfoResolverWrapper, - masterCount int) (*crdHandler, error) { + masterCount int, + authorizer authorizer.Authorizer) (*crdHandler, error) { ret := &crdHandler{ versionDiscoveryHandler: versionDiscoveryHandler, groupDiscoveryHandler: groupDiscoveryHandler, @@ -141,6 +144,7 @@ func NewCustomResourceDefinitionHandler( admission: admission, establishingController: establishingController, masterCount: masterCount, + authorizer: authorizer, } crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ UpdateFunc: ret.updateCustomResourceDefinition, @@ -226,7 +230,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } var handler http.HandlerFunc - subresources, err := getSubresourcesForVersion(crd, requestInfo.APIVersion) + subresources, err := apiextensions.GetSubresourcesForVersion(crd, requestInfo.APIVersion) if err != nil { utilruntime.HandleError(err) http.Error(w, "the server could not properly serve the CR subresources", http.StatusInternalServerError) @@ -244,7 +248,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } if handler != nil { - handler = metrics.InstrumentHandlerFunc(verb, resource, subresource, scope, handler) + handler = metrics.InstrumentHandlerFunc(verb, requestInfo.APIGroup, requestInfo.APIVersion, resource, subresource, scope, metrics.APIServerComponent, handler) handler(w, req) return } @@ -457,7 +461,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource creator := unstructuredCreator{} var statusSpec *apiextensions.CustomResourceSubresourceStatus - subresources, err := getSubresourcesForVersion(crd, v.Name) + subresources, err := apiextensions.GetSubresourcesForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR subresources") @@ -471,7 +475,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource scaleSpec = subresources.Scale } - columns, err := getColumnsForVersion(crd, v.Name) + columns, err := apiextensions.GetColumnsForVersion(crd, v.Name) if err != nil { utilruntime.HandleError(err) return nil, fmt.Errorf("the server could not properly serve the CR columns") @@ -536,6 +540,8 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource MetaGroupVersion: metav1.SchemeGroupVersion, TableConvertor: storages[v.Name].CustomResource, + + Authorizer: r.authorizer, } // override scaleSpec subresource values diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go deleted file mode 100644 index 85ee452c7ba..00000000000 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/helpers.go +++ /dev/null @@ -1,117 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package apiserver - -import ( - "fmt" - - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" -) - -// getSchemaForVersion returns the validation schema for given version in given CRD. -func getSchemaForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceValidation, error) { - if !hasPerVersionSchema(crd.Spec.Versions) { - return crd.Spec.Validation, nil - } - if crd.Spec.Validation != nil { - return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version schemas must be mutual exclusive", crd.Name, version) - } - for _, v := range crd.Spec.Versions { - if version == v.Name { - return v.Schema, nil - } - } - return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) -} - -// getSubresourcesForVersion returns the subresources for given version in given CRD. -func getSubresourcesForVersion(crd *apiextensions.CustomResourceDefinition, version string) (*apiextensions.CustomResourceSubresources, error) { - if !hasPerVersionSubresources(crd.Spec.Versions) { - return crd.Spec.Subresources, nil - } - if crd.Spec.Subresources != nil { - return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version subresources must be mutual exclusive", crd.Name, version) - } - for _, v := range crd.Spec.Versions { - if version == v.Name { - return v.Subresources, nil - } - } - return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) -} - -// getColumnsForVersion returns the columns for given version in given CRD. -// NOTE: the newly logically-defaulted columns is not pointing to the original CRD object. -// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through -// the original CRD object instead. -func getColumnsForVersion(crd *apiextensions.CustomResourceDefinition, version string) ([]apiextensions.CustomResourceColumnDefinition, error) { - if !hasPerVersionColumns(crd.Spec.Versions) { - return serveDefaultColumnsIfEmpty(crd.Spec.AdditionalPrinterColumns), nil - } - if len(crd.Spec.AdditionalPrinterColumns) > 0 { - return nil, fmt.Errorf("malformed CustomResourceDefinition %s version %s: top-level and per-version additionalPrinterColumns must be mutual exclusive", crd.Name, version) - } - for _, v := range crd.Spec.Versions { - if version == v.Name { - return serveDefaultColumnsIfEmpty(v.AdditionalPrinterColumns), nil - } - } - return nil, fmt.Errorf("version %s not found in CustomResourceDefinition: %v", version, crd.Name) -} - -// serveDefaultColumnsIfEmpty applies logically defaulting to columns, if the input columns is empty. -// NOTE: in this way, the newly logically-defaulted columns is not pointing to the original CRD object. -// One cannot mutate the original CRD columns using the logically-defaulted columns. Please iterate through -// the original CRD object instead. -func serveDefaultColumnsIfEmpty(columns []apiextensions.CustomResourceColumnDefinition) []apiextensions.CustomResourceColumnDefinition { - if len(columns) > 0 { - return columns - } - return []apiextensions.CustomResourceColumnDefinition{ - {Name: "Age", Type: "date", Description: "", JSONPath: ".metadata.creationTimestamp"}, - } -} - -// hasPerVersionSchema returns true if a CRD uses per-version schema. -func hasPerVersionSchema(versions []apiextensions.CustomResourceDefinitionVersion) bool { - for _, v := range versions { - if v.Schema != nil { - return true - } - } - return false -} - -// hasPerVersionSubresources returns true if a CRD uses per-version subresources. -func hasPerVersionSubresources(versions []apiextensions.CustomResourceDefinitionVersion) bool { - for _, v := range versions { - if v.Subresources != nil { - return true - } - } - return false -} - -// hasPerVersionColumns returns true if a CRD uses per-version columns. -func hasPerVersionColumns(versions []apiextensions.CustomResourceDefinitionVersion) bool { - for _, v := range versions { - if len(v.AdditionalPrinterColumns) > 0 { - return true - } - } - return false -} diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go index 63fcb510ab4..aa2dbcbb088 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go @@ -28,8 +28,6 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface ApiextensionsV1beta1() apiextensionsv1beta1.ApiextensionsV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Apiextensions() apiextensionsv1beta1.ApiextensionsV1beta1Interface } // Clientset contains the clients for groups. Each group has exactly one @@ -44,12 +42,6 @@ func (c *Clientset) ApiextensionsV1beta1() apiextensionsv1beta1.ApiextensionsV1b return c.apiextensionsV1beta1 } -// Deprecated: Apiextensions retrieves the default version of ApiextensionsClient. -// Please explicitly pick a version. -func (c *Clientset) Apiextensions() apiextensionsv1beta1.ApiextensionsV1beta1Interface { - return c.apiextensionsV1beta1 -} - // Discovery retrieves the DiscoveryClient func (c *Clientset) Discovery() discovery.DiscoveryInterface { if c == nil { diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go b/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go index c787aa6419f..8803bb3997d 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go @@ -91,7 +91,7 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err } serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs) - if err := o.RecommendedOptions.ApplyTo(serverConfig, apiserver.Scheme); err != nil { + if err := o.RecommendedOptions.ApplyTo(serverConfig); err != nil { return nil, err } if err := o.APIEnablement.ApplyTo(&serverConfig.Config, apiserver.DefaultAPIResourceConfigSource(), apiserver.Scheme); err != nil { diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go index c2ebdcf1709..e3e3d27c0b0 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/finalizer/crd_finalizer.go @@ -79,7 +79,7 @@ func NewCRDFinalizer( crdLister: crdInformer.Lister(), crdSynced: crdInformer.Informer().HasSynced, crClientGetter: crClientGetter, - queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "CustomResourceDefinition-CRDFinalizer"), + queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "crd_finalizer"), } crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go index fe5c9479847..1bea5f440b9 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go @@ -66,7 +66,7 @@ func NewNamingConditionController( crdClient: crdClient, crdLister: crdInformer.Lister(), crdSynced: crdInformer.Informer().HasSynced, - queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "CustomResourceDefinition-NamingConditionController"), + queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "crd_naming_condition_controller"), } informerIndexer := crdInformer.Informer().GetIndexer() diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS b/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS index fe7b0144e0c..05b08249aed 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - feature-approvers diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go index 3f21a9854a0..b502855f3c2 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go @@ -43,13 +43,13 @@ const ( ) func init() { - utilfeature.DefaultFeatureGate.Add(defaultKubernetesFeatureGates) + utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) } // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. // To add a new feature, define a key for it above and add it here. The features will be // available throughout Kubernetes binaries. var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ - CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, - CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, + CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, + CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresource/strategy.go b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresource/strategy.go index ab75be3aad2..a125988af2d 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresource/strategy.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresource/strategy.go @@ -149,12 +149,12 @@ func (a customResourceStrategy) ValidateUpdate(ctx context.Context, obj, old run } // GetAttrs returns labels and fields of a given object for filtering purposes. -func (a customResourceStrategy) GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func (a customResourceStrategy) GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { accessor, err := meta.Accessor(obj) if err != nil { - return nil, nil, false, err + return nil, nil, err } - return labels.Set(accessor.GetLabels()), objectMetaFieldsSet(accessor, a.namespaceScoped), accessor.GetInitializers() != nil, nil + return labels.Set(accessor.GetLabels()), objectMetaFieldsSet(accessor, a.namespaceScoped), nil } // objectMetaFieldsSet returns a fields that represent the ObjectMeta. diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/BUILD b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/BUILD index 153b889eacf..c51e800e1b4 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/BUILD +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/BUILD @@ -1,9 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", @@ -47,3 +44,16 @@ filegroup( srcs = [":package-srcs"], tags = ["automanaged"], ) + +go_test( + name = "go_default_test", + srcs = ["strategy_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", + ], +) diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go index c6b50915f1f..0bc9f64ddc8 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go @@ -92,6 +92,14 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp ) return nil, false, err } + if options.Preconditions.ResourceVersion != nil && *options.Preconditions.ResourceVersion != crd.ResourceVersion { + err = apierrors.NewConflict( + apiextensions.Resource("customresourcedefinitions"), + name, + fmt.Errorf("Precondition failed: ResourceVersion in precondition: %v, ResourceVersion in object meta: %v", *options.Preconditions.ResourceVersion, crd.ResourceVersion), + ) + return nil, false, err + } // upon first request to delete, add our finalizer and then delegate if crd.DeletionTimestamp.IsZero() { @@ -100,7 +108,7 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp return nil, false, err } - preconditions := storage.Preconditions{UID: options.Preconditions.UID} + preconditions := storage.Preconditions{UID: options.Preconditions.UID, ResourceVersion: options.Preconditions.ResourceVersion} out := r.Store.NewFunc() err = r.Store.Storage.GuaranteedUpdate( diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/strategy.go b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/strategy.go index 59a649021d0..bb8014b608e 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/strategy.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/strategy.go @@ -54,27 +54,7 @@ func (strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { crd.Status = apiextensions.CustomResourceDefinitionStatus{} crd.Generation = 1 - // if the feature gate is disabled, drop the feature. - if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) { - crd.Spec.Validation = nil - for i := range crd.Spec.Versions { - crd.Spec.Versions[i].Schema = nil - } - } - if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) { - crd.Spec.Subresources = nil - for i := range crd.Spec.Versions { - crd.Spec.Versions[i].Subresources = nil - } - } - for i := range crd.Spec.Versions { - crd.Spec.Versions[i].Schema = nil - crd.Spec.Versions[i].Subresources = nil - crd.Spec.Versions[i].AdditionalPrinterColumns = nil - } - if crd.Spec.Conversion != nil { - crd.Spec.Conversion.WebhookClientConfig = nil - } + dropDisabledFields(&crd.Spec, nil) for _, v := range crd.Spec.Versions { if v.Storage { @@ -104,39 +84,7 @@ func (strategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { newCRD.Generation = oldCRD.Generation + 1 } - if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) { - newCRD.Spec.Validation = nil - oldCRD.Spec.Validation = nil - for i := range newCRD.Spec.Versions { - newCRD.Spec.Versions[i].Schema = nil - } - for i := range oldCRD.Spec.Versions { - oldCRD.Spec.Versions[i].Schema = nil - } - } - if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) { - newCRD.Spec.Subresources = nil - oldCRD.Spec.Subresources = nil - for i := range newCRD.Spec.Versions { - newCRD.Spec.Versions[i].Subresources = nil - } - for i := range oldCRD.Spec.Versions { - oldCRD.Spec.Versions[i].Subresources = nil - } - } - - if !hasPerVersionField(oldCRD.Spec.Versions) { - for i := range newCRD.Spec.Versions { - newCRD.Spec.Versions[i].Schema = nil - newCRD.Spec.Versions[i].Subresources = nil - newCRD.Spec.Versions[i].AdditionalPrinterColumns = nil - } - } - if newCRD.Spec.Conversion != nil { - if oldCRD.Spec.Conversion == nil || newCRD.Spec.Conversion.WebhookClientConfig == nil { - newCRD.Spec.Conversion.WebhookClientConfig = nil - } - } + dropDisabledFields(&newCRD.Spec, &oldCRD.Spec) for _, v := range newCRD.Spec.Versions { if v.Storage { @@ -148,16 +96,6 @@ func (strategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { } } -// hasPerVersionField returns true if a CRD uses per-version schema/subresources/columns fields. -func hasPerVersionField(versions []apiextensions.CustomResourceDefinitionVersion) bool { - for _, v := range versions { - if v.Schema != nil || v.Subresources != nil || len(v.AdditionalPrinterColumns) > 0 { - return true - } - } - return false -} - // Validate validates a new CustomResourceDefinition. func (strategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { return validation.ValidateCustomResourceDefinition(obj.(*apiextensions.CustomResourceDefinition)) @@ -226,12 +164,12 @@ func (statusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Objec } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { apiserver, ok := obj.(*apiextensions.CustomResourceDefinition) if !ok { - return nil, nil, false, fmt.Errorf("given object is not a CustomResourceDefinition") + return nil, nil, fmt.Errorf("given object is not a CustomResourceDefinition") } - return labels.Set(apiserver.ObjectMeta.Labels), CustomResourceDefinitionToSelectableFields(apiserver), apiserver.Initializers != nil, nil + return labels.Set(apiserver.ObjectMeta.Labels), CustomResourceDefinitionToSelectableFields(apiserver), nil } // MatchCustomResourceDefinition is the filter used by the generic etcd backend to watch events @@ -248,3 +186,100 @@ func MatchCustomResourceDefinition(label labels.Selector, field fields.Selector) func CustomResourceDefinitionToSelectableFields(obj *apiextensions.CustomResourceDefinition) fields.Set { return generic.ObjectMetaFieldsSet(&obj.ObjectMeta, true) } + +func dropDisabledFields(crdSpec, oldCrdSpec *apiextensions.CustomResourceDefinitionSpec) { + // if the feature gate is disabled, drop the feature. + if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) && + !validationInUse(oldCrdSpec) { + crdSpec.Validation = nil + for i := range crdSpec.Versions { + crdSpec.Versions[i].Schema = nil + } + } + if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && + !subresourceInUse(oldCrdSpec) { + crdSpec.Subresources = nil + for i := range crdSpec.Versions { + crdSpec.Versions[i].Subresources = nil + } + } + + // 1. On CREATE (in which case the old CRD spec is nil), if the CustomResourceWebhookConversion feature gate is off, we auto-clear + // the per-version fields. This is to be consistent with the other built-in types, as the + // apiserver drops unknown fields. + // 2. On UPDATE, if the CustomResourceWebhookConversion feature gate is off, we auto-clear + // the per-version fields if the old CRD doesn't use per-version fields already. + // This is to be consistent with the other built-in types, as the apiserver drops unknown + // fields. If the old CRD already uses per-version fields, the CRD is allowed to continue + // use per-version fields. + if !hasPerVersionField(oldCrdSpec) { + for i := range crdSpec.Versions { + crdSpec.Versions[i].Schema = nil + crdSpec.Versions[i].Subresources = nil + crdSpec.Versions[i].AdditionalPrinterColumns = nil + } + } + + if !conversionWebhookInUse(oldCrdSpec) { + if crdSpec.Conversion != nil { + crdSpec.Conversion.WebhookClientConfig = nil + } + } + +} + +func validationInUse(crdSpec *apiextensions.CustomResourceDefinitionSpec) bool { + if crdSpec == nil { + return false + } + if crdSpec.Validation != nil { + return true + } + + for i := range crdSpec.Versions { + if crdSpec.Versions[i].Schema != nil { + return true + } + } + return false +} + +func subresourceInUse(crdSpec *apiextensions.CustomResourceDefinitionSpec) bool { + if crdSpec == nil { + return false + } + if crdSpec.Subresources != nil { + return true + } + + for i := range crdSpec.Versions { + if crdSpec.Versions[i].Subresources != nil { + return true + } + } + return false +} + +// hasPerVersionField returns true if a CRD uses per-version schema/subresources/columns fields. +//func hasPerVersionField(versions []apiextensions.CustomResourceDefinitionVersion) bool { +func hasPerVersionField(crdSpec *apiextensions.CustomResourceDefinitionSpec) bool { + if crdSpec == nil { + return false + } + for _, v := range crdSpec.Versions { + if v.Schema != nil || v.Subresources != nil || len(v.AdditionalPrinterColumns) > 0 { + return true + } + } + return false +} + +func conversionWebhookInUse(crdSpec *apiextensions.CustomResourceDefinitionSpec) bool { + if crdSpec == nil { + return false + } + if crdSpec.Conversion == nil { + return false + } + return crdSpec.Conversion.WebhookClientConfig != nil +} diff --git a/vendor/k8s.io/apimachinery/BUILD b/vendor/k8s.io/apimachinery/BUILD new file mode 100644 index 00000000000..d818e560327 --- /dev/null +++ b/vendor/k8s.io/apimachinery/BUILD @@ -0,0 +1,64 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/meta:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/api/validation:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/apis/testapigroup:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/conversion:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/fields:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/labels:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/runtime:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/selection:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/test:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/types:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/cache:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/duration:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/framer:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/httpstream:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/intstr:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/json:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/jsonmergepatch:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/mergepatch:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/naming:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/net:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/proxy:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/rand:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/remotecommand:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/validation:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/version:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/wait:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/waitgroup:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/webhook:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/util/yaml:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/version:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/watch:all-srcs", + "//staging/src/k8s.io/apimachinery/third_party/forked/golang/json:all-srcs", + "//staging/src/k8s.io/apimachinery/third_party/forked/golang/netutil:all-srcs", + "//staging/src/k8s.io/apimachinery/third_party/forked/golang/reflect:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/apimachinery/CONTRIBUTING.md b/vendor/k8s.io/apimachinery/CONTRIBUTING.md index 6a50b56240f..4bcf54520d9 100644 --- a/vendor/k8s.io/apimachinery/CONTRIBUTING.md +++ b/vendor/k8s.io/apimachinery/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/apimachinery](https://git.k8s.io/kubernetes/staging/src/k8s.io/apimachinery) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/apimachinery](https://git.k8s.io/kubernetes/staging/src/k8s.io/apimachinery) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/apimachinery/OWNERS b/vendor/k8s.io/apimachinery/OWNERS index 3449af97672..fb7b41c27b3 100644 --- a/vendor/k8s.io/apimachinery/OWNERS +++ b/vendor/k8s.io/apimachinery/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - lavalamp - smarterclayton @@ -13,6 +15,7 @@ reviewers: - deads2k - derekwaynecarr - caesarxuchao +- cheftako - mikedanese - liggitt - gmarek diff --git a/vendor/k8s.io/apimachinery/README.md b/vendor/k8s.io/apimachinery/README.md index 258250ce2cb..0fb4a5f1eb9 100644 --- a/vendor/k8s.io/apimachinery/README.md +++ b/vendor/k8s.io/apimachinery/README.md @@ -5,7 +5,7 @@ Scheme, typing, encoding, decoding, and conversion packages for Kubernetes and K ## Purpose -This library is a shared dependency for servers and clients to work with Kubernetes API infrastructure without direct +This library is a shared dependency for servers and clients to work with Kubernetes API infrastructure without direct type dependencies. Its first consumers are `k8s.io/kubernetes`, `k8s.io/client-go`, and `k8s.io/apiserver`. diff --git a/vendor/k8s.io/apimachinery/SECURITY_CONTACTS b/vendor/k8s.io/apimachinery/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/apimachinery/SECURITY_CONTACTS +++ b/vendor/k8s.io/apimachinery/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/apimachinery/pkg/OWNERS b/vendor/k8s.io/apimachinery/pkg/OWNERS index 63bb7814fc2..d6daa1280f2 100644 --- a/vendor/k8s.io/apimachinery/pkg/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - deads2k diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS old mode 100755 new mode 100644 index dc6a4c72425..63434030ca1 --- a/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go index 48c1104d99f..afd97f7adcb 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go @@ -184,6 +184,20 @@ func NewConflict(qualifiedResource schema.GroupResource, name string, err error) }} } +// NewApplyConflict returns an error including details on the requests apply conflicts +func NewApplyConflict(causes []metav1.StatusCause, message string) *StatusError { + return &StatusError{ErrStatus: metav1.Status{ + Status: metav1.StatusFailure, + Code: http.StatusConflict, + Reason: metav1.StatusReasonConflict, + Details: &metav1.StatusDetails{ + // TODO: Get obj details here? + Causes: causes, + }, + Message: message, + }} +} + // NewGone returns an error indicating the item no longer available at the server and no forwarding address is known. func NewGone(message string) *StatusError { return &StatusError{metav1.Status{ diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS old mode 100755 new mode 100644 index 5f729ffe63c..dd2c0cb6142 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/help.go b/vendor/k8s.io/apimachinery/pkg/api/meta/help.go index c70b3d2b6c7..3425055f6ec 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/help.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/help.go @@ -158,6 +158,19 @@ func ExtractList(obj runtime.Object) ([]runtime.Object, error) { // objectSliceType is the type of a slice of Objects var objectSliceType = reflect.TypeOf([]runtime.Object{}) +// LenList returns the length of this list or 0 if it is not a list. +func LenList(list runtime.Object) int { + itemsPtr, err := GetItemsPtr(list) + if err != nil { + return 0 + } + items, err := conversion.EnforcePtr(itemsPtr) + if err != nil { + return 0 + } + return items.Len() +} + // SetList sets the given list object's Items member have the elements given in // objects. // Returns an error if list is not a List type (does not have an Items member), diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go b/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go index 6fe7458f6c4..b50337e13f4 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go @@ -20,14 +20,13 @@ import ( "fmt" "reflect" - "k8s.io/klog" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" + "k8s.io/klog" ) // errNotList is returned when an object implements the Object style interfaces but not the List style @@ -138,6 +137,7 @@ func AsPartialObjectMetadata(m metav1.Object) *metav1beta1.PartialObjectMetadata Finalizers: m.GetFinalizers(), ClusterName: m.GetClusterName(), Initializers: m.GetInitializers(), + ManagedFields: m.GetManagedFields(), }, } } diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/table/table.go b/vendor/k8s.io/apimachinery/pkg/api/meta/table/table.go index 2144a77cb19..798cc41bdd8 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/table/table.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/table/table.go @@ -67,5 +67,5 @@ func ConvertToHumanReadableDateType(timestamp metav1.Time) string { if timestamp.IsZero() { return "" } - return duration.ShortHumanDuration(time.Now().Sub(timestamp.Time)) + return duration.HumanDuration(time.Now().Sub(timestamp.Time)) } diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS old mode 100755 new mode 100644 index c430067f357..8454be55ed0 --- a/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go index b155a62a45a..54fda58064d 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go +++ b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go @@ -680,7 +680,7 @@ func NewScaledQuantity(value int64, scale Scale) *Quantity { } } -// Value returns the value of q; any fractional part will be lost. +// Value returns the unscaled value of q rounded up to the nearest integer away from 0. func (q *Quantity) Value() int64 { return q.ScaledValue(0) } diff --git a/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go b/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go index 44b9b160066..cf668c7c816 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go +++ b/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go @@ -176,40 +176,17 @@ func ValidateObjectMetaAccessor(meta metav1.Object, requiresNamespace bool, name allErrs = append(allErrs, field.Invalid(fldPath.Child("clusterName"), meta.GetClusterName(), msg)) } } + for _, entry := range meta.GetManagedFields() { + allErrs = append(allErrs, v1validation.ValidateFieldManager(entry.Manager, fldPath.Child("fieldManager"))...) + } allErrs = append(allErrs, ValidateNonnegativeField(meta.GetGeneration(), fldPath.Child("generation"))...) allErrs = append(allErrs, v1validation.ValidateLabels(meta.GetLabels(), fldPath.Child("labels"))...) allErrs = append(allErrs, ValidateAnnotations(meta.GetAnnotations(), fldPath.Child("annotations"))...) allErrs = append(allErrs, ValidateOwnerReferences(meta.GetOwnerReferences(), fldPath.Child("ownerReferences"))...) - allErrs = append(allErrs, ValidateInitializers(meta.GetInitializers(), fldPath.Child("initializers"))...) allErrs = append(allErrs, ValidateFinalizers(meta.GetFinalizers(), fldPath.Child("finalizers"))...) return allErrs } -func ValidateInitializers(initializers *metav1.Initializers, fldPath *field.Path) field.ErrorList { - var allErrs field.ErrorList - if initializers == nil { - return allErrs - } - for i, initializer := range initializers.Pending { - allErrs = append(allErrs, validation.IsFullyQualifiedName(fldPath.Child("pending").Index(i).Child("name"), initializer.Name)...) - } - allErrs = append(allErrs, validateInitializersResult(initializers.Result, fldPath.Child("result"))...) - return allErrs -} - -func validateInitializersResult(result *metav1.Status, fldPath *field.Path) field.ErrorList { - var allErrs field.ErrorList - if result == nil { - return allErrs - } - switch result.Status { - case metav1.StatusFailure: - default: - allErrs = append(allErrs, field.Invalid(fldPath.Child("status"), result.Status, "must be 'Failure'")) - } - return allErrs -} - // ValidateFinalizers tests if the finalizers name are valid, and if there are conflicting finalizers. func ValidateFinalizers(finalizers []string, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} @@ -265,8 +242,9 @@ func ValidateObjectMetaAccessorUpdate(newMeta, oldMeta metav1.Object, fldPath *f allErrs = append(allErrs, field.Invalid(fldPath.Child("generation"), newMeta.GetGeneration(), "must not be decremented")) } - allErrs = append(allErrs, ValidateInitializersUpdate(newMeta.GetInitializers(), oldMeta.GetInitializers(), fldPath.Child("initializers"))...) - + for _, entry := range newMeta.GetManagedFields() { + allErrs = append(allErrs, v1validation.ValidateFieldManager(entry.Manager, fldPath.Child("fieldManager"))...) + } allErrs = append(allErrs, ValidateImmutableField(newMeta.GetName(), oldMeta.GetName(), fldPath.Child("name"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.GetNamespace(), oldMeta.GetNamespace(), fldPath.Child("namespace"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.GetUID(), oldMeta.GetUID(), fldPath.Child("uid"))...) @@ -281,28 +259,3 @@ func ValidateObjectMetaAccessorUpdate(newMeta, oldMeta metav1.Object, fldPath *f return allErrs } - -// ValidateInitializersUpdate checks the update of the metadata initializers field -func ValidateInitializersUpdate(newInit, oldInit *metav1.Initializers, fldPath *field.Path) field.ErrorList { - var allErrs field.ErrorList - switch { - case oldInit == nil && newInit != nil: - // Initializers may not be set on new objects - allErrs = append(allErrs, field.Invalid(fldPath, nil, "field is immutable once initialization has completed")) - case oldInit != nil && newInit == nil: - // this is a valid transition and means initialization was successful - case oldInit != nil && newInit != nil: - // validate changes to initializers - switch { - case oldInit.Result == nil && newInit.Result != nil: - // setting a result is allowed - allErrs = append(allErrs, validateInitializersResult(newInit.Result, fldPath.Child("result"))...) - case oldInit.Result != nil: - // setting Result implies permanent failure, and all future updates will be prevented - allErrs = append(allErrs, ValidateImmutableField(newInit.Result, oldInit.Result, fldPath.Child("result"))...) - default: - // leaving the result nil is allowed - } - } - return allErrs -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/OWNERS b/vendor/k8s.io/apimachinery/pkg/apis/OWNERS index bae178f8175..38336c177f9 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/apis/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/OWNERS b/vendor/k8s.io/apimachinery/pkg/apis/config/OWNERS deleted file mode 100644 index 2f7b10df4b9..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/OWNERS +++ /dev/null @@ -1,7 +0,0 @@ -approvers: -- api-approvers -- sttts -- luxas -reviewers: -- api-reviewers -- hanxiaoshuai diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/types.go b/vendor/k8s.io/apimachinery/pkg/apis/config/types.go deleted file mode 100644 index b32fc8a2811..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/types.go +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package config - -// ClientConnectionConfiguration contains details for constructing a client. -type ClientConnectionConfiguration struct { - // kubeconfig is the path to a KubeConfig file. - Kubeconfig string - // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the - // default value of 'application/json'. This field will control all connections to the server used by a particular - // client. - AcceptContentTypes string - // contentType is the content type used when sending data to the server from this client. - ContentType string - // qps controls the number of queries per second allowed for this connection. - QPS float32 - // burst allows extra queries to accumulate when a client is exceeding its rate. - Burst int32 -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/conversion.go deleted file mode 100644 index 7e7d34795e0..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/conversion.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - "k8s.io/apimachinery/pkg/apis/config" - "k8s.io/apimachinery/pkg/conversion" -) - -// Important! The public back-and-forth conversion functions for the types in this generic -// package with ComponentConfig types need to be manually exposed like this in order for -// other packages that reference this package to be able to call these conversion functions -// in an autogenerated manner. -// TODO: Fix the bug in conversion-gen so it automatically discovers these Convert_* functions -// in autogenerated code as well. - -func Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in *ClientConnectionConfiguration, out *config.ClientConnectionConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in, out, s) -} - -func Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in *config.ClientConnectionConfiguration, out *ClientConnectionConfiguration, s conversion.Scope) error { - return autoConvert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in, out, s) -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/defaults.go b/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/defaults.go deleted file mode 100644 index 37971fcc5c5..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/defaults.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -// RecommendedDefaultClientConnectionConfiguration defaults a pointer to a -// ClientConnectionConfiguration struct. This will set the recommended default -// values, but they may be subject to change between API versions. This function -// is intentionally not registered in the scheme as a "normal" `SetDefaults_Foo` -// function to allow consumers of this type to set whatever defaults for their -// embedded configs. Forcing consumers to use these defaults would be problematic -// as defaulting in the scheme is done as part of the conversion, and there would -// be no easy way to opt-out. Instead, if you want to use this defaulting method -// run it in your wrapper struct of this type in its `SetDefaults_` method. -func RecommendedDefaultClientConnectionConfiguration(obj *ClientConnectionConfiguration) { - if len(obj.ContentType) == 0 { - obj.ContentType = "application/vnd.kubernetes.protobuf" - } - if obj.QPS == 0.0 { - obj.QPS = 50.0 - } - if obj.Burst == 0 { - obj.Burst = 100 - } -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/types.go deleted file mode 100644 index b762c4f0bb7..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/types.go +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -// ClientConnectionConfiguration contains details for constructing a client. -type ClientConnectionConfiguration struct { - // kubeconfig is the path to a KubeConfig file. - Kubeconfig string `json:"kubeconfig"` - // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the - // default value of 'application/json'. This field will control all connections to the server used by a particular - // client. - AcceptContentTypes string `json:"acceptContentTypes"` - // contentType is the content type used when sending data to the server from this client. - ContentType string `json:"contentType"` - // qps controls the number of queries per second allowed for this connection. - QPS float32 `json:"qps"` - // burst allows extra queries to accumulate when a client is exceeding its rate. - Burst int32 `json:"burst"` -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.conversion.go deleted file mode 100644 index 4cea203cc43..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.conversion.go +++ /dev/null @@ -1,75 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by conversion-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - config "k8s.io/apimachinery/pkg/apis/config" - conversion "k8s.io/apimachinery/pkg/conversion" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -func init() { - localSchemeBuilder.Register(RegisterConversions) -} - -// RegisterConversions adds conversion functions to the given scheme. -// Public to allow building arbitrary schemes. -func RegisterConversions(s *runtime.Scheme) error { - if err := s.AddGeneratedConversionFunc((*ClientConnectionConfiguration)(nil), (*config.ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(a.(*ClientConnectionConfiguration), b.(*config.ClientConnectionConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ClientConnectionConfiguration)(nil), (*ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(a.(*config.ClientConnectionConfiguration), b.(*ClientConnectionConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.ClientConnectionConfiguration)(nil), (*ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(a.(*config.ClientConnectionConfiguration), b.(*ClientConnectionConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*ClientConnectionConfiguration)(nil), (*config.ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(a.(*ClientConnectionConfiguration), b.(*config.ClientConnectionConfiguration), scope) - }); err != nil { - return err - } - return nil -} - -func autoConvert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in *ClientConnectionConfiguration, out *config.ClientConnectionConfiguration, s conversion.Scope) error { - out.Kubeconfig = in.Kubeconfig - out.AcceptContentTypes = in.AcceptContentTypes - out.ContentType = in.ContentType - out.QPS = in.QPS - out.Burst = in.Burst - return nil -} - -func autoConvert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in *config.ClientConnectionConfiguration, out *ClientConnectionConfiguration, s conversion.Scope) error { - out.Kubeconfig = in.Kubeconfig - out.AcceptContentTypes = in.AcceptContentTypes - out.ContentType = in.ContentType - out.QPS = in.QPS - out.Burst = in.Burst - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index d03adfbff99..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,37 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClientConnectionConfiguration) DeepCopyInto(out *ClientConnectionConfiguration) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClientConnectionConfiguration. -func (in *ClientConnectionConfiguration) DeepCopy() *ClientConnectionConfiguration { - if in == nil { - return nil - } - out := new(ClientConnectionConfiguration) - in.DeepCopyInto(out) - return out -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/validation/validation.go b/vendor/k8s.io/apimachinery/pkg/apis/config/validation/validation.go deleted file mode 100644 index dba37677448..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/validation/validation.go +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package validation - -import ( - "k8s.io/apimachinery/pkg/apis/config" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -// ValidateClientConnectionConfiguration ensures validation of the ClientConnectionConfiguration struct -func ValidateClientConnectionConfiguration(cc *config.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if cc.Burst < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("burst"), cc.Burst, "must be non-negative")) - } - return allErrs -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/conversion.go index 673e56212a7..bdb71340ab6 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/conversion.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/conversion.go @@ -28,7 +28,6 @@ func Convert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out if err := metav1.Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil { return err } - out.IncludeUninitialized = in.IncludeUninitialized out.ResourceVersion = in.ResourceVersion out.TimeoutSeconds = in.TimeoutSeconds out.Watch = in.Watch @@ -44,7 +43,6 @@ func Convert_v1_ListOptions_To_internalversion_ListOptions(in *metav1.ListOption if err := metav1.Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil { return err } - out.IncludeUninitialized = in.IncludeUninitialized out.ResourceVersion = in.ResourceVersion out.TimeoutSeconds = in.TimeoutSeconds out.Watch = in.Watch diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go index 1e85c5c43da..2741ee2c805 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go @@ -17,4 +17,4 @@ limitations under the License. // +k8s:deepcopy-gen=package // +k8s:conversion-gen=k8s.io/apimachinery/pkg/apis/meta/v1 -package internalversion +package internalversion // import "k8s.io/apimachinery/pkg/apis/meta/internalversion" diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go index 2f6740d368a..e434e5055ab 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go @@ -33,9 +33,6 @@ type ListOptions struct { LabelSelector labels.Selector // A selector based on fields FieldSelector fields.Selector - // If true, partially initialized resources are included in the response. - // +optional - IncludeUninitialized bool // If true, watch for changes to this list Watch bool // When specified with a watch call, shows changes that occur after that particular version of a resource. diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go index 18d190b2444..79b7567360f 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go @@ -117,7 +117,6 @@ func autoConvert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, if err := v1.Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil { return err } - out.IncludeUninitialized = in.IncludeUninitialized out.Watch = in.Watch out.ResourceVersion = in.ResourceVersion out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds)) @@ -133,7 +132,6 @@ func autoConvert_v1_ListOptions_To_internalversion_ListOptions(in *v1.ListOption if err := v1.Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil { return err } - out.IncludeUninitialized = in.IncludeUninitialized out.Watch = in.Watch out.ResourceVersion = in.ResourceVersion out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds)) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/BUILD b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/BUILD index 267bccc4aa9..feb430e9789 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/BUILD @@ -16,6 +16,7 @@ go_test( "helpers_test.go", "labels_test.go", "micro_time_test.go", + "options_test.go", "time_test.go", "types_test.go", ], @@ -25,6 +26,9 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//vendor/github.com/google/gofuzz:go_default_library", "//vendor/sigs.k8s.io/yaml:go_default_library", ], ) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS old mode 100755 new mode 100644 index cdb125a0dd4..44929b1c002 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go index 2eaabf0794f..babe8a8b53b 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go @@ -48,3 +48,13 @@ func (d *Duration) UnmarshalJSON(b []byte) error { func (d Duration) MarshalJSON() ([]byte, error) { return json.Marshal(d.Duration.String()) } + +// OpenAPISchemaType is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// +// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators +func (_ Duration) OpenAPISchemaType() []string { return []string{"string"} } + +// OpenAPISchemaFormat is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +func (_ Duration) OpenAPISchemaFormat() string { return "" } diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go index 81320c9c882..69e65099321 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go @@ -33,6 +33,7 @@ limitations under the License. DeleteOptions Duration ExportOptions + Fields GetOptions GroupKind GroupResource @@ -47,10 +48,12 @@ limitations under the License. List ListMeta ListOptions + ManagedFieldsEntry MicroTime ObjectMeta OwnerReference Patch + PatchOptions Preconditions RootPaths ServerAddressByClientCIDR @@ -130,131 +133,143 @@ func (m *ExportOptions) Reset() { *m = ExportOptions{} } func (*ExportOptions) ProtoMessage() {} func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (m *Fields) Reset() { *m = Fields{} } +func (*Fields) ProtoMessage() {} +func (*Fields) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + func (m *GetOptions) Reset() { *m = GetOptions{} } func (*GetOptions) ProtoMessage() {} -func (*GetOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (*GetOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } func (m *GroupKind) Reset() { *m = GroupKind{} } func (*GroupKind) ProtoMessage() {} -func (*GroupKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +func (*GroupKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } func (m *GroupResource) Reset() { *m = GroupResource{} } func (*GroupResource) ProtoMessage() {} -func (*GroupResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (*GroupResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func (m *GroupVersion) Reset() { *m = GroupVersion{} } func (*GroupVersion) ProtoMessage() {} -func (*GroupVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +func (*GroupVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } func (*GroupVersionForDiscovery) ProtoMessage() {} func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{13} + return fileDescriptorGenerated, []int{14} } func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } func (*GroupVersionKind) ProtoMessage() {} -func (*GroupVersionKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (*GroupVersionKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } func (*GroupVersionResource) ProtoMessage() {} -func (*GroupVersionResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (*GroupVersionResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } func (m *Initializer) Reset() { *m = Initializer{} } func (*Initializer) ProtoMessage() {} -func (*Initializer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (*Initializer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } func (m *Initializers) Reset() { *m = Initializers{} } func (*Initializers) ProtoMessage() {} -func (*Initializers) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +func (*Initializers) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } func (m *LabelSelector) Reset() { *m = LabelSelector{} } func (*LabelSelector) ProtoMessage() {} -func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } func (*LabelSelectorRequirement) ProtoMessage() {} func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{19} + return fileDescriptorGenerated, []int{20} } func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } func (m *ListMeta) Reset() { *m = ListMeta{} } func (*ListMeta) ProtoMessage() {} -func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } func (m *ListOptions) Reset() { *m = ListOptions{} } func (*ListOptions) ProtoMessage() {} -func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } + +func (m *ManagedFieldsEntry) Reset() { *m = ManagedFieldsEntry{} } +func (*ManagedFieldsEntry) ProtoMessage() {} +func (*ManagedFieldsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } func (m *MicroTime) Reset() { *m = MicroTime{} } func (*MicroTime) ProtoMessage() {} -func (*MicroTime) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (*MicroTime) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } func (*ObjectMeta) ProtoMessage() {} -func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } func (m *OwnerReference) Reset() { *m = OwnerReference{} } func (*OwnerReference) ProtoMessage() {} -func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } func (m *Patch) Reset() { *m = Patch{} } func (*Patch) ProtoMessage() {} -func (*Patch) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (*Patch) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } + +func (m *PatchOptions) Reset() { *m = PatchOptions{} } +func (*PatchOptions) ProtoMessage() {} +func (*PatchOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } func (m *RootPaths) Reset() { *m = RootPaths{} } func (*RootPaths) ProtoMessage() {} -func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } func (*ServerAddressByClientCIDR) ProtoMessage() {} func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{29} + return fileDescriptorGenerated, []int{32} } func (m *Status) Reset() { *m = Status{} } func (*Status) ProtoMessage() {} -func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } +func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } func (m *StatusCause) Reset() { *m = StatusCause{} } func (*StatusCause) ProtoMessage() {} -func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } func (m *StatusDetails) Reset() { *m = StatusDetails{} } func (*StatusDetails) ProtoMessage() {} -func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } func (m *Time) Reset() { *m = Time{} } func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } func (m *Timestamp) Reset() { *m = Timestamp{} } func (*Timestamp) ProtoMessage() {} -func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } func (m *TypeMeta) Reset() { *m = TypeMeta{} } func (*TypeMeta) ProtoMessage() {} -func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } func (m *UpdateOptions) Reset() { *m = UpdateOptions{} } func (*UpdateOptions) ProtoMessage() {} -func (*UpdateOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } +func (*UpdateOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } func (m *Verbs) Reset() { *m = Verbs{} } func (*Verbs) ProtoMessage() {} -func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } func (m *WatchEvent) Reset() { *m = WatchEvent{} } func (*WatchEvent) ProtoMessage() {} -func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } func init() { proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup") @@ -266,6 +281,7 @@ func init() { proto.RegisterType((*DeleteOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions") proto.RegisterType((*Duration)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Duration") proto.RegisterType((*ExportOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ExportOptions") + proto.RegisterType((*Fields)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Fields") proto.RegisterType((*GetOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GetOptions") proto.RegisterType((*GroupKind)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupKind") proto.RegisterType((*GroupResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupResource") @@ -280,10 +296,12 @@ func init() { proto.RegisterType((*List)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.List") proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta") proto.RegisterType((*ListOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions") + proto.RegisterType((*ManagedFieldsEntry)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry") proto.RegisterType((*MicroTime)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime") proto.RegisterType((*ObjectMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta") proto.RegisterType((*OwnerReference)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference") proto.RegisterType((*Patch)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Patch") + proto.RegisterType((*PatchOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.PatchOptions") proto.RegisterType((*Preconditions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Preconditions") proto.RegisterType((*RootPaths)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.RootPaths") proto.RegisterType((*ServerAddressByClientCIDR)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR") @@ -464,6 +482,10 @@ func (m *APIResource) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) i += copy(dAtA[i:], m.Version) + dAtA[i] = 0x52 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageVersionHash))) + i += copy(dAtA[i:], m.StorageVersionHash) return i, nil } @@ -576,14 +598,10 @@ func (m *CreateOptions) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } - dAtA[i] = 0x10 - i++ - if m.IncludeUninitialized { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } + dAtA[i] = 0x1a i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i += copy(dAtA[i:], m.FieldManager) return i, nil } @@ -706,6 +724,55 @@ func (m *ExportOptions) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *Fields) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Fields) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Map) > 0 { + keysForMap := make([]string, 0, len(m.Map)) + for k := range m.Map { + keysForMap = append(keysForMap, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMap) + for _, k := range keysForMap { + dAtA[i] = 0xa + i++ + v := m.Map[string(k)] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovGenerated(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize + i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) + n4, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + } + return i, nil +} + func (m *GetOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -725,14 +792,6 @@ func (m *GetOptions) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x10 - i++ - if m.IncludeUninitialized { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ return i, nil } @@ -953,11 +1012,11 @@ func (m *Initializers) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Result.Size())) - n4, err := m.Result.MarshalTo(dAtA[i:]) + n5, err := m.Result.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n5 } return i, nil } @@ -1073,11 +1132,11 @@ func (m *List) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) + n6, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n5 + i += n6 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -1163,14 +1222,6 @@ func (m *ListOptions) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) } - dAtA[i] = 0x30 - i++ - if m.IncludeUninitialized { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ dAtA[i] = 0x38 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Limit)) @@ -1181,6 +1232,56 @@ func (m *ListOptions) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *ManagedFieldsEntry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ManagedFieldsEntry) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Manager))) + i += copy(dAtA[i:], m.Manager) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operation))) + i += copy(dAtA[i:], m.Operation) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i += copy(dAtA[i:], m.APIVersion) + if m.Time != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Time.Size())) + n7, err := m.Time.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.Fields != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Fields.Size())) + n8, err := m.Fields.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} + func (m *ObjectMeta) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1226,20 +1327,20 @@ func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CreationTimestamp.Size())) - n6, err := m.CreationTimestamp.MarshalTo(dAtA[i:]) + n9, err := m.CreationTimestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n9 if m.DeletionTimestamp != nil { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DeletionTimestamp.Size())) - n7, err := m.DeletionTimestamp.MarshalTo(dAtA[i:]) + n10, err := m.DeletionTimestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n10 } if m.DeletionGracePeriodSeconds != nil { dAtA[i] = 0x50 @@ -1327,11 +1428,25 @@ func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Initializers.Size())) - n8, err := m.Initializers.MarshalTo(dAtA[i:]) + n11, err := m.Initializers.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n8 + i += n11 + } + if len(m.ManagedFields) > 0 { + for _, msg := range m.ManagedFields { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } } return i, nil } @@ -1408,6 +1523,53 @@ func (m *Patch) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *PatchOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PatchOptions) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + dAtA[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + if m.Force != nil { + dAtA[i] = 0x10 + i++ + if *m.Force { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i += copy(dAtA[i:], m.FieldManager) + return i, nil +} + func (m *Preconditions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1429,6 +1591,12 @@ func (m *Preconditions) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(len(*m.UID))) i += copy(dAtA[i:], *m.UID) } + if m.ResourceVersion != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ResourceVersion))) + i += copy(dAtA[i:], *m.ResourceVersion) + } return i, nil } @@ -1509,11 +1677,11 @@ func (m *Status) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n9, err := m.ListMeta.MarshalTo(dAtA[i:]) + n12, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n12 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) @@ -1530,11 +1698,11 @@ func (m *Status) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Details.Size())) - n10, err := m.Details.MarshalTo(dAtA[i:]) + n13, err := m.Details.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n13 } dAtA[i] = 0x30 i++ @@ -1701,6 +1869,10 @@ func (m *UpdateOptions) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i += copy(dAtA[i:], m.FieldManager) return i, nil } @@ -1759,11 +1931,11 @@ func (m *WatchEvent) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n11, err := m.Object.MarshalTo(dAtA[i:]) + n14, err := m.Object.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n14 return i, nil } @@ -1840,6 +2012,8 @@ func (m *APIResource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Version) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageVersionHash) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -1884,7 +2058,8 @@ func (m *CreateOptions) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } - n += 2 + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -1929,12 +2104,26 @@ func (m *ExportOptions) Size() (n int) { return n } +func (m *Fields) Size() (n int) { + var l int + _ = l + if len(m.Map) > 0 { + for k, v := range m.Map { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *GetOptions) Size() (n int) { var l int _ = l l = len(m.ResourceVersion) n += 1 + l + sovGenerated(uint64(l)) - n += 2 return n } @@ -2101,13 +2290,32 @@ func (m *ListOptions) Size() (n int) { if m.TimeoutSeconds != nil { n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) } - n += 2 n += 1 + sovGenerated(uint64(m.Limit)) l = len(m.Continue) n += 1 + l + sovGenerated(uint64(l)) return n } +func (m *ManagedFieldsEntry) Size() (n int) { + var l int + _ = l + l = len(m.Manager) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operation) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + if m.Time != nil { + l = m.Time.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Fields != nil { + l = m.Fields.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *ObjectMeta) Size() (n int) { var l int _ = l @@ -2167,6 +2375,12 @@ func (m *ObjectMeta) Size() (n int) { l = m.Initializers.Size() n += 2 + l + sovGenerated(uint64(l)) } + if len(m.ManagedFields) > 0 { + for _, e := range m.ManagedFields { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -2196,6 +2410,23 @@ func (m *Patch) Size() (n int) { return n } +func (m *PatchOptions) Size() (n int) { + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Force != nil { + n += 2 + } + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Preconditions) Size() (n int) { var l int _ = l @@ -2203,6 +2434,10 @@ func (m *Preconditions) Size() (n int) { l = len(*m.UID) n += 1 + l + sovGenerated(uint64(l)) } + if m.ResourceVersion != nil { + l = len(*m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -2307,6 +2542,8 @@ func (m *UpdateOptions) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -2382,6 +2619,7 @@ func (this *APIResource) String() string { `Categories:` + fmt.Sprintf("%v", this.Categories) + `,`, `Group:` + fmt.Sprintf("%v", this.Group) + `,`, `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `StorageVersionHash:` + fmt.Sprintf("%v", this.StorageVersionHash) + `,`, `}`, }, "") return s @@ -2403,7 +2641,7 @@ func (this *CreateOptions) String() string { } s := strings.Join([]string{`&CreateOptions{`, `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, - `IncludeUninitialized:` + fmt.Sprintf("%v", this.IncludeUninitialized) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, `}`, }, "") return s @@ -2443,13 +2681,32 @@ func (this *ExportOptions) String() string { }, "") return s } +func (this *Fields) String() string { + if this == nil { + return "nil" + } + keysForMap := make([]string, 0, len(this.Map)) + for k := range this.Map { + keysForMap = append(keysForMap, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMap) + mapStringForMap := "map[string]Fields{" + for _, k := range keysForMap { + mapStringForMap += fmt.Sprintf("%v: %v,", k, this.Map[k]) + } + mapStringForMap += "}" + s := strings.Join([]string{`&Fields{`, + `Map:` + mapStringForMap + `,`, + `}`, + }, "") + return s +} func (this *GetOptions) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&GetOptions{`, `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, - `IncludeUninitialized:` + fmt.Sprintf("%v", this.IncludeUninitialized) + `,`, `}`, }, "") return s @@ -2552,13 +2809,26 @@ func (this *ListOptions) String() string { `Watch:` + fmt.Sprintf("%v", this.Watch) + `,`, `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, - `IncludeUninitialized:` + fmt.Sprintf("%v", this.IncludeUninitialized) + `,`, `Limit:` + fmt.Sprintf("%v", this.Limit) + `,`, `Continue:` + fmt.Sprintf("%v", this.Continue) + `,`, `}`, }, "") return s } +func (this *ManagedFieldsEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ManagedFieldsEntry{`, + `Manager:` + fmt.Sprintf("%v", this.Manager) + `,`, + `Operation:` + fmt.Sprintf("%v", this.Operation) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Time:` + strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "Time", 1) + `,`, + `Fields:` + strings.Replace(fmt.Sprintf("%v", this.Fields), "Fields", "Fields", 1) + `,`, + `}`, + }, "") + return s +} func (this *ObjectMeta) String() string { if this == nil { return "nil" @@ -2600,6 +2870,7 @@ func (this *ObjectMeta) String() string { `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, `ClusterName:` + fmt.Sprintf("%v", this.ClusterName) + `,`, `Initializers:` + strings.Replace(fmt.Sprintf("%v", this.Initializers), "Initializers", "Initializers", 1) + `,`, + `ManagedFields:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ManagedFields), "ManagedFieldsEntry", "ManagedFieldsEntry", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2628,12 +2899,25 @@ func (this *Patch) String() string { }, "") return s } +func (this *PatchOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PatchOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `Force:` + valueToStringGenerated(this.Force) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, + `}`, + }, "") + return s +} func (this *Preconditions) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&Preconditions{`, `UID:` + valueToStringGenerated(this.UID) + `,`, + `ResourceVersion:` + valueToStringGenerated(this.ResourceVersion) + `,`, `}`, }, "") return s @@ -2729,6 +3013,7 @@ func (this *UpdateOptions) String() string { } s := strings.Join([]string{`&UpdateOptions{`, `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, `}`, }, "") return s @@ -3289,6 +3574,35 @@ func (m *APIResource) Unmarshal(dAtA []byte) error { } m.Version = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StorageVersionHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StorageVersionHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3588,11 +3902,11 @@ func (m *CreateOptions) Unmarshal(dAtA []byte) error { } m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeUninitialized", wireType) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3602,12 +3916,21 @@ func (m *CreateOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - m.IncludeUninitialized = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3971,6 +4294,179 @@ func (m *ExportOptions) Unmarshal(dAtA []byte) error { } return nil } +func (m *Fields) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Fields: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Fields: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Map", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Map == nil { + m.Map = make(map[string]Fields) + } + var mapkey string + mapvalue := &Fields{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Fields{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Map[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *GetOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4029,26 +4525,6 @@ func (m *GetOptions) Unmarshal(dAtA []byte) error { } m.ResourceVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeUninitialized", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IncludeUninitialized = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -5709,26 +6185,6 @@ func (m *ListOptions) Unmarshal(dAtA []byte) error { } } m.TimeoutSeconds = &v - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeUninitialized", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IncludeUninitialized = bool(v != 0) case 7: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) @@ -5798,6 +6254,209 @@ func (m *ListOptions) Unmarshal(dAtA []byte) error { } return nil } +func (m *ManagedFieldsEntry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ManagedFieldsEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ManagedFieldsEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Manager", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Manager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operation = ManagedFieldsOperationType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Time == nil { + m.Time = &Time{} + } + if err := m.Time.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fields", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Fields == nil { + m.Fields = &Fields{} + } + if err := m.Fields.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ObjectMeta) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6461,6 +7120,37 @@ func (m *ObjectMeta) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ManagedFields", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ManagedFields = append(m.ManagedFields, ManagedFieldsEntry{}) + if err := m.ManagedFields[len(m.ManagedFields)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6740,6 +7430,135 @@ func (m *Patch) Unmarshal(dAtA []byte) error { } return nil } +func (m *PatchOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PatchOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PatchOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Force = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Preconditions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6799,6 +7618,36 @@ func (m *Preconditions) Unmarshal(dAtA []byte) error { s := k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) m.UID = &s iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.ResourceVersion = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -7833,6 +8682,35 @@ func (m *UpdateOptions) Unmarshal(dAtA []byte) error { } m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -8152,160 +9030,173 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 2465 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4d, 0x6c, 0x23, 0x49, - 0xf5, 0x4f, 0xdb, 0xb1, 0x63, 0x3f, 0xc7, 0xf9, 0xa8, 0xcd, 0xfe, 0xff, 0xde, 0x08, 0xec, 0x6c, - 0x2f, 0x5a, 0x65, 0x61, 0xd6, 0x26, 0x59, 0x58, 0x0d, 0x03, 0x2c, 0xc4, 0x71, 0x66, 0x14, 0xed, - 0x64, 0xc6, 0xaa, 0xec, 0x0c, 0x62, 0x18, 0x21, 0x3a, 0xdd, 0x15, 0xa7, 0x49, 0xbb, 0xdb, 0x5b, - 0xd5, 0xce, 0x8c, 0xe1, 0xc0, 0x1e, 0x40, 0x70, 0x40, 0x68, 0x8e, 0x9c, 0xd0, 0x8e, 0xe0, 0xc2, - 0x95, 0x13, 0x17, 0x38, 0x21, 0x31, 0xc7, 0x91, 0xb8, 0xec, 0x01, 0x59, 0x3b, 0xe6, 0xc0, 0x09, - 0x71, 0xcf, 0x09, 0x55, 0x75, 0x75, 0x75, 0xb7, 0x1d, 0x4f, 0xda, 0x3b, 0xbb, 0x88, 0x53, 0xd2, - 0xef, 0xe3, 0xf7, 0x5e, 0x55, 0xbd, 0x7a, 0xef, 0xd5, 0x33, 0x1c, 0x9c, 0x5e, 0x65, 0x75, 0xdb, - 0x6b, 0x9c, 0xf6, 0x8f, 0x08, 0x75, 0x89, 0x4f, 0x58, 0xe3, 0x8c, 0xb8, 0x96, 0x47, 0x1b, 0x92, - 0x61, 0xf4, 0xec, 0xae, 0x61, 0x9e, 0xd8, 0x2e, 0xa1, 0x83, 0x46, 0xef, 0xb4, 0xc3, 0x09, 0xac, - 0xd1, 0x25, 0xbe, 0xd1, 0x38, 0xdb, 0x6a, 0x74, 0x88, 0x4b, 0xa8, 0xe1, 0x13, 0xab, 0xde, 0xa3, - 0x9e, 0xef, 0xa1, 0x2f, 0x04, 0x5a, 0xf5, 0xb8, 0x56, 0xbd, 0x77, 0xda, 0xe1, 0x04, 0x56, 0xe7, - 0x5a, 0xf5, 0xb3, 0xad, 0xf5, 0x37, 0x3b, 0xb6, 0x7f, 0xd2, 0x3f, 0xaa, 0x9b, 0x5e, 0xb7, 0xd1, - 0xf1, 0x3a, 0x5e, 0x43, 0x28, 0x1f, 0xf5, 0x8f, 0xc5, 0x97, 0xf8, 0x10, 0xff, 0x05, 0xa0, 0xeb, - 0x53, 0x5d, 0xa1, 0x7d, 0xd7, 0xb7, 0xbb, 0x64, 0xdc, 0x8b, 0xf5, 0xb7, 0x2f, 0x53, 0x60, 0xe6, - 0x09, 0xe9, 0x1a, 0xe3, 0x7a, 0xfa, 0x5f, 0xb3, 0x50, 0xd8, 0x69, 0xef, 0xdf, 0xa0, 0x5e, 0xbf, - 0x87, 0x36, 0x60, 0xde, 0x35, 0xba, 0xa4, 0xa2, 0x6d, 0x68, 0x9b, 0xc5, 0xe6, 0xe2, 0x93, 0x61, - 0x6d, 0x6e, 0x34, 0xac, 0xcd, 0xdf, 0x32, 0xba, 0x04, 0x0b, 0x0e, 0x72, 0xa0, 0x70, 0x46, 0x28, - 0xb3, 0x3d, 0x97, 0x55, 0x32, 0x1b, 0xd9, 0xcd, 0xd2, 0xf6, 0x3b, 0xf5, 0x34, 0xeb, 0xaf, 0x0b, - 0x03, 0x77, 0x03, 0xd5, 0xeb, 0x1e, 0x6d, 0xd9, 0xcc, 0xf4, 0xce, 0x08, 0x1d, 0x34, 0x57, 0xa4, - 0x95, 0x82, 0x64, 0x32, 0xac, 0x2c, 0xa0, 0x9f, 0x6a, 0xb0, 0xd2, 0xa3, 0xe4, 0x98, 0x50, 0x4a, - 0x2c, 0xc9, 0xaf, 0x64, 0x37, 0xb4, 0x4f, 0xc1, 0x6c, 0x45, 0x9a, 0x5d, 0x69, 0x8f, 0xe1, 0xe3, - 0x09, 0x8b, 0xe8, 0xb7, 0x1a, 0xac, 0x33, 0x42, 0xcf, 0x08, 0xdd, 0xb1, 0x2c, 0x4a, 0x18, 0x6b, - 0x0e, 0x76, 0x1d, 0x9b, 0xb8, 0xfe, 0xee, 0x7e, 0x0b, 0xb3, 0xca, 0xbc, 0xd8, 0x87, 0x6f, 0xa5, - 0x73, 0xe8, 0x70, 0x1a, 0x4e, 0x53, 0x97, 0x1e, 0xad, 0x4f, 0x15, 0x61, 0xf8, 0x39, 0x6e, 0xe8, - 0xc7, 0xb0, 0x18, 0x1e, 0xe4, 0x4d, 0x9b, 0xf9, 0xe8, 0x2e, 0xe4, 0x3b, 0xfc, 0x83, 0x55, 0x34, - 0xe1, 0x60, 0x3d, 0x9d, 0x83, 0x21, 0x46, 0x73, 0x49, 0xfa, 0x93, 0x17, 0x9f, 0x0c, 0x4b, 0x34, - 0xfd, 0x4f, 0x59, 0x28, 0xed, 0xb4, 0xf7, 0x31, 0x61, 0x5e, 0x9f, 0x9a, 0x24, 0x45, 0xd0, 0x6c, - 0x03, 0xf0, 0xbf, 0xac, 0x67, 0x98, 0xc4, 0xaa, 0x64, 0x36, 0xb4, 0xcd, 0x42, 0x13, 0x49, 0x39, - 0xb8, 0xa5, 0x38, 0x38, 0x26, 0xc5, 0x51, 0x4f, 0x6d, 0xd7, 0x12, 0xa7, 0x1d, 0x43, 0x7d, 0xd7, - 0x76, 0x2d, 0x2c, 0x38, 0xe8, 0x26, 0xe4, 0xce, 0x08, 0x3d, 0xe2, 0xfb, 0xcf, 0x03, 0xe2, 0x4b, - 0xe9, 0x96, 0x77, 0x97, 0xab, 0x34, 0x8b, 0xa3, 0x61, 0x2d, 0x27, 0xfe, 0xc5, 0x01, 0x08, 0xaa, - 0x03, 0xb0, 0x13, 0x8f, 0xfa, 0xc2, 0x9d, 0x4a, 0x6e, 0x23, 0xbb, 0x59, 0x6c, 0x2e, 0x71, 0xff, - 0x0e, 0x15, 0x15, 0xc7, 0x24, 0xd0, 0x55, 0x58, 0x64, 0xb6, 0xdb, 0xe9, 0x3b, 0x06, 0xe5, 0x84, - 0x4a, 0x5e, 0xf8, 0xb9, 0x26, 0xfd, 0x5c, 0x3c, 0x8c, 0xf1, 0x70, 0x42, 0x92, 0x5b, 0x32, 0x0d, - 0x9f, 0x74, 0x3c, 0x6a, 0x13, 0x56, 0x59, 0x88, 0x2c, 0xed, 0x2a, 0x2a, 0x8e, 0x49, 0xa0, 0xd7, - 0x20, 0x27, 0x76, 0xbe, 0x52, 0x10, 0x26, 0xca, 0xd2, 0x44, 0x4e, 0x1c, 0x0b, 0x0e, 0x78, 0xe8, - 0x0d, 0x58, 0x90, 0xb7, 0xa6, 0x52, 0x14, 0x62, 0xcb, 0x52, 0x6c, 0x21, 0x0c, 0xeb, 0x90, 0xaf, - 0xff, 0x41, 0x83, 0xe5, 0xd8, 0xf9, 0x89, 0x58, 0xb9, 0x0a, 0x8b, 0x9d, 0xd8, 0x4d, 0x91, 0x67, - 0xa9, 0x56, 0x13, 0xbf, 0x45, 0x38, 0x21, 0x89, 0x08, 0x14, 0xa9, 0x44, 0x0a, 0x33, 0xc2, 0x56, - 0xea, 0x40, 0x0b, 0x7d, 0x88, 0x2c, 0xc5, 0x88, 0x0c, 0x47, 0xc8, 0xfa, 0x3f, 0x35, 0x11, 0x74, - 0x61, 0x8e, 0x40, 0x9b, 0xb1, 0x3c, 0xa4, 0x89, 0x2d, 0x5c, 0x9c, 0x92, 0x43, 0x2e, 0xb9, 0xbc, - 0x99, 0xff, 0x89, 0xcb, 0x7b, 0xad, 0xf0, 0xeb, 0x0f, 0x6b, 0x73, 0x1f, 0xfc, 0x7d, 0x63, 0x4e, - 0xff, 0x99, 0x06, 0xe5, 0x5d, 0x4a, 0x0c, 0x9f, 0xdc, 0xee, 0xf9, 0x62, 0x05, 0x3a, 0xe4, 0x2d, - 0x3a, 0xc0, 0x7d, 0x57, 0xae, 0x14, 0xf8, 0xa5, 0x6c, 0x09, 0x0a, 0x96, 0x1c, 0xd4, 0x86, 0x35, - 0xdb, 0x35, 0x9d, 0xbe, 0x45, 0xee, 0xb8, 0xb6, 0x6b, 0xfb, 0xb6, 0xe1, 0xd8, 0x3f, 0x52, 0x97, - 0xed, 0x73, 0xd2, 0xbb, 0xb5, 0xfd, 0x0b, 0x64, 0xf0, 0x85, 0x9a, 0xfa, 0xcf, 0xb3, 0x50, 0x6e, - 0x11, 0x87, 0x44, 0x7e, 0x5c, 0x07, 0xd4, 0xa1, 0x86, 0x49, 0xda, 0x84, 0xda, 0x9e, 0x75, 0x48, - 0x4c, 0xcf, 0xb5, 0x98, 0x08, 0x95, 0x6c, 0xf3, 0xff, 0x46, 0xc3, 0x1a, 0xba, 0x31, 0xc1, 0xc5, - 0x17, 0x68, 0x20, 0x07, 0xca, 0x3d, 0x2a, 0xfe, 0xb7, 0x7d, 0x59, 0x48, 0xf8, 0x05, 0x7e, 0x2b, - 0xdd, 0x19, 0xb4, 0xe3, 0xaa, 0xcd, 0xd5, 0xd1, 0xb0, 0x56, 0x4e, 0x90, 0x70, 0x12, 0x1c, 0x7d, - 0x1b, 0x56, 0x3c, 0xda, 0x3b, 0x31, 0xdc, 0x16, 0xe9, 0x11, 0xd7, 0x22, 0xae, 0xcf, 0x44, 0x52, - 0x29, 0x34, 0xd7, 0x78, 0xfa, 0xbf, 0x3d, 0xc6, 0xc3, 0x13, 0xd2, 0xe8, 0x1e, 0xac, 0xf6, 0xa8, - 0xd7, 0x33, 0x3a, 0x06, 0x47, 0x6c, 0x7b, 0x8e, 0x6d, 0x0e, 0x44, 0xd2, 0x29, 0x36, 0xaf, 0x8c, - 0x86, 0xb5, 0xd5, 0xf6, 0x38, 0xf3, 0x7c, 0x58, 0x7b, 0x49, 0x6c, 0x1d, 0xa7, 0x44, 0x4c, 0x3c, - 0x09, 0x13, 0x3b, 0xdb, 0xdc, 0xb4, 0xb3, 0xd5, 0xf7, 0xa1, 0xd0, 0xea, 0x53, 0xa1, 0x85, 0xbe, - 0x09, 0x05, 0x4b, 0xfe, 0x2f, 0x77, 0xfe, 0xd5, 0xb0, 0x7e, 0x86, 0x32, 0xe7, 0xc3, 0x5a, 0x99, - 0x57, 0xfc, 0x7a, 0x48, 0xc0, 0x4a, 0x45, 0xbf, 0x0f, 0xe5, 0xbd, 0x87, 0x3d, 0x8f, 0xfa, 0xe1, - 0x99, 0xbe, 0x0e, 0x79, 0x22, 0x08, 0x02, 0xad, 0x10, 0x25, 0xfd, 0x40, 0x0c, 0x4b, 0x2e, 0x4f, - 0x42, 0xe4, 0xa1, 0x61, 0xfa, 0x32, 0xa0, 0x54, 0x12, 0xda, 0xe3, 0x44, 0x1c, 0xf0, 0xf4, 0xc7, - 0x1a, 0xc0, 0x0d, 0xa2, 0xb0, 0x77, 0x60, 0x39, 0xbc, 0xc0, 0xc9, 0xbc, 0xf2, 0xff, 0x52, 0x7b, - 0x19, 0x27, 0xd9, 0x78, 0x5c, 0xfe, 0x33, 0x08, 0xeb, 0xfb, 0x50, 0x14, 0xd9, 0x8c, 0x17, 0x92, - 0x28, 0xb5, 0x6a, 0xcf, 0x49, 0xad, 0x61, 0x25, 0xca, 0x4c, 0xab, 0x44, 0xb1, 0xcb, 0xeb, 0x40, - 0x39, 0xd0, 0x0d, 0x8b, 0x63, 0x2a, 0x0b, 0x57, 0xa0, 0x10, 0x2e, 0x5c, 0x5a, 0x51, 0x4d, 0x51, - 0x08, 0x84, 0x95, 0x44, 0xcc, 0xda, 0x09, 0x24, 0x32, 0x73, 0x3a, 0x63, 0xb1, 0x4a, 0x91, 0x79, - 0x7e, 0xa5, 0x88, 0x59, 0xfa, 0x09, 0x54, 0xa6, 0x75, 0x52, 0x2f, 0x50, 0x3b, 0xd2, 0xbb, 0xa2, - 0xff, 0x4a, 0x83, 0x95, 0x38, 0x52, 0xfa, 0xe3, 0x4b, 0x6f, 0xe4, 0xf2, 0x9e, 0x23, 0xb6, 0x23, - 0xbf, 0xd1, 0x60, 0x2d, 0xb1, 0xb4, 0x99, 0x4e, 0x7c, 0x06, 0xa7, 0xe2, 0xc1, 0x91, 0x9d, 0x21, - 0x38, 0x1a, 0x50, 0xda, 0x57, 0x71, 0x4f, 0x2f, 0xef, 0xd2, 0xf4, 0x3f, 0x6b, 0xb0, 0x18, 0xd3, - 0x60, 0xe8, 0x3e, 0x2c, 0xf0, 0x1c, 0x68, 0xbb, 0x1d, 0xd9, 0x41, 0xa6, 0x2c, 0xec, 0x31, 0x90, - 0x68, 0x5d, 0xed, 0x00, 0x09, 0x87, 0x90, 0xa8, 0x0d, 0x79, 0x4a, 0x58, 0xdf, 0xf1, 0x65, 0xfa, - 0xbf, 0x92, 0xb2, 0x04, 0xfb, 0x86, 0xdf, 0x67, 0x41, 0x9e, 0xc4, 0x42, 0x1f, 0x4b, 0x1c, 0xfd, - 0x6f, 0x19, 0x28, 0xdf, 0x34, 0x8e, 0x88, 0x73, 0x48, 0x1c, 0x62, 0xfa, 0x1e, 0x45, 0x3f, 0x86, - 0x52, 0xd7, 0xf0, 0xcd, 0x13, 0x41, 0x0d, 0xfb, 0xe0, 0x56, 0x3a, 0x43, 0x09, 0xa4, 0xfa, 0x41, - 0x04, 0xb3, 0xe7, 0xfa, 0x74, 0xd0, 0x7c, 0x49, 0x2e, 0xac, 0x14, 0xe3, 0xe0, 0xb8, 0x35, 0xf1, - 0x78, 0x11, 0xdf, 0x7b, 0x0f, 0x7b, 0xbc, 0xe0, 0xcf, 0xfe, 0x66, 0x4a, 0xb8, 0x80, 0xc9, 0xfb, - 0x7d, 0x9b, 0x92, 0x2e, 0x71, 0xfd, 0xe8, 0xf1, 0x72, 0x30, 0x86, 0x8f, 0x27, 0x2c, 0xae, 0xbf, - 0x03, 0x2b, 0xe3, 0xce, 0xa3, 0x15, 0xc8, 0x9e, 0x92, 0x41, 0x10, 0x0b, 0x98, 0xff, 0x8b, 0xd6, - 0x20, 0x77, 0x66, 0x38, 0x7d, 0x99, 0x7f, 0x70, 0xf0, 0x71, 0x2d, 0x73, 0x55, 0xd3, 0x7f, 0xa7, - 0x41, 0x65, 0x9a, 0x23, 0xe8, 0xf3, 0x31, 0xa0, 0x66, 0x49, 0x7a, 0x95, 0x7d, 0x97, 0x0c, 0x02, - 0xd4, 0x3d, 0x28, 0x78, 0x3d, 0xfe, 0xdc, 0xf4, 0xa8, 0x8c, 0xf3, 0x37, 0xc2, 0xd8, 0xbd, 0x2d, - 0xe9, 0xe7, 0xc3, 0xda, 0xcb, 0x09, 0xf8, 0x90, 0x81, 0x95, 0x2a, 0x2f, 0x92, 0xc2, 0x1f, 0x5e, - 0xb8, 0x55, 0x91, 0xbc, 0x2b, 0x28, 0x58, 0x72, 0xf4, 0x3f, 0x6a, 0x30, 0x2f, 0x5a, 0xd9, 0xfb, - 0x50, 0xe0, 0xfb, 0x67, 0x19, 0xbe, 0x21, 0xfc, 0x4a, 0xfd, 0xf0, 0xe1, 0xda, 0x07, 0xc4, 0x37, - 0xa2, 0xfb, 0x15, 0x52, 0xb0, 0x42, 0x44, 0x18, 0x72, 0xb6, 0x4f, 0xba, 0xe1, 0x41, 0xbe, 0x39, - 0x15, 0x5a, 0x3e, 0xbb, 0xeb, 0xd8, 0x78, 0xb0, 0xf7, 0xd0, 0x27, 0x2e, 0x3f, 0x8c, 0x28, 0x19, - 0xec, 0x73, 0x0c, 0x1c, 0x40, 0xe9, 0xbf, 0xd7, 0x40, 0x99, 0xe2, 0xd7, 0x9d, 0x11, 0xe7, 0xf8, - 0xa6, 0xed, 0x9e, 0xca, 0x6d, 0x55, 0xee, 0x1c, 0x4a, 0x3a, 0x56, 0x12, 0x17, 0x95, 0xd8, 0xcc, - 0x8c, 0x25, 0xf6, 0x0a, 0x14, 0x4c, 0xcf, 0xf5, 0x6d, 0xb7, 0x3f, 0x91, 0x5f, 0x76, 0x25, 0x1d, - 0x2b, 0x09, 0xfd, 0x69, 0x16, 0x4a, 0xdc, 0xd7, 0xb0, 0xc6, 0x7f, 0x1d, 0xca, 0x4e, 0xfc, 0xf4, - 0xa4, 0xcf, 0x2f, 0x4b, 0x88, 0xe4, 0x7d, 0xc4, 0x49, 0x59, 0xae, 0x7c, 0x6c, 0x13, 0xc7, 0x52, - 0xca, 0x99, 0xa4, 0xf2, 0xf5, 0x38, 0x13, 0x27, 0x65, 0x79, 0x9e, 0x7d, 0xc0, 0xe3, 0x5a, 0x36, - 0x73, 0x6a, 0x6b, 0xbf, 0xc3, 0x89, 0x38, 0xe0, 0x5d, 0xb4, 0x3f, 0xf3, 0x33, 0xee, 0xcf, 0x35, - 0x58, 0xe2, 0x07, 0xe9, 0xf5, 0xfd, 0xb0, 0xe3, 0xcd, 0x89, 0xbe, 0x0b, 0x8d, 0x86, 0xb5, 0xa5, - 0xf7, 0x12, 0x1c, 0x3c, 0x26, 0x39, 0xb5, 0x7d, 0xc9, 0x7f, 0xd2, 0xf6, 0x85, 0xaf, 0xda, 0xb1, - 0xbb, 0xb6, 0x5f, 0x59, 0x10, 0x4e, 0xa8, 0x55, 0xdf, 0xe4, 0x44, 0x1c, 0xf0, 0x12, 0x47, 0x5a, - 0xb8, 0xf4, 0x48, 0xdf, 0x87, 0xe2, 0x81, 0x6d, 0x52, 0x8f, 0xaf, 0x85, 0x17, 0x26, 0x96, 0x68, - 0xec, 0x55, 0x02, 0x0f, 0xd7, 0x18, 0xf2, 0xb9, 0x2b, 0xae, 0xe1, 0x7a, 0x41, 0xfb, 0x9e, 0x8b, - 0x5c, 0xb9, 0xc5, 0x89, 0x38, 0xe0, 0x5d, 0x5b, 0xe3, 0xf5, 0xe8, 0x17, 0x8f, 0x6b, 0x73, 0x8f, - 0x1e, 0xd7, 0xe6, 0x3e, 0x7c, 0x2c, 0x6b, 0xd3, 0xbf, 0x00, 0xe0, 0xf6, 0xd1, 0x0f, 0x89, 0x19, - 0xc4, 0xfc, 0xe5, 0x13, 0x04, 0xde, 0x63, 0xc8, 0xc1, 0x95, 0x78, 0x6d, 0x67, 0xc6, 0x7a, 0x8c, - 0x18, 0x0f, 0x27, 0x24, 0x51, 0x03, 0x8a, 0x6a, 0xaa, 0x20, 0xe3, 0x7b, 0x55, 0xaa, 0x15, 0xd5, - 0xe8, 0x01, 0x47, 0x32, 0x89, 0x0b, 0x38, 0x7f, 0xe9, 0x05, 0x6c, 0x42, 0xb6, 0x6f, 0x5b, 0x22, - 0x24, 0x8a, 0xcd, 0x2f, 0x87, 0x09, 0xf0, 0xce, 0x7e, 0xeb, 0x7c, 0x58, 0x7b, 0x75, 0xda, 0x48, - 0xce, 0x1f, 0xf4, 0x08, 0xab, 0xdf, 0xd9, 0x6f, 0x61, 0xae, 0x7c, 0x51, 0x90, 0xe6, 0x67, 0x0c, - 0xd2, 0x6d, 0x00, 0xb9, 0x6a, 0xae, 0x1d, 0xc4, 0x86, 0x9a, 0xb0, 0xdc, 0x50, 0x1c, 0x1c, 0x93, - 0x42, 0x0c, 0x56, 0x4d, 0xfe, 0xce, 0xb4, 0x3d, 0x97, 0x1f, 0x3d, 0xf3, 0x8d, 0x6e, 0x30, 0x63, - 0x28, 0x6d, 0x7f, 0x31, 0x5d, 0xc6, 0xe4, 0x6a, 0xcd, 0x57, 0xa4, 0x99, 0xd5, 0xdd, 0x71, 0x30, - 0x3c, 0x89, 0x8f, 0x3c, 0x58, 0xb5, 0xe4, 0xcb, 0x28, 0x32, 0x5a, 0x9c, 0xd9, 0xe8, 0xcb, 0xdc, - 0x60, 0x6b, 0x1c, 0x08, 0x4f, 0x62, 0xa3, 0xef, 0xc3, 0x7a, 0x48, 0x9c, 0x7c, 0x9e, 0x56, 0x40, - 0xec, 0x54, 0x95, 0x3f, 0xdc, 0x5b, 0x53, 0xa5, 0xf0, 0x73, 0x10, 0x90, 0x05, 0x79, 0x27, 0xe8, - 0x2e, 0x4a, 0xa2, 0x22, 0x7c, 0x23, 0xdd, 0x2a, 0xa2, 0xe8, 0xaf, 0xc7, 0xbb, 0x0a, 0xf5, 0xfc, - 0x92, 0x0d, 0x85, 0xc4, 0x46, 0x0f, 0xa1, 0x64, 0xb8, 0xae, 0xe7, 0x1b, 0xc1, 0x83, 0x79, 0x51, - 0x98, 0xda, 0x99, 0xd9, 0xd4, 0x4e, 0x84, 0x31, 0xd6, 0xc5, 0xc4, 0x38, 0x38, 0x6e, 0x0a, 0x3d, - 0x80, 0x65, 0xef, 0x81, 0x4b, 0x28, 0x26, 0xc7, 0x84, 0x12, 0xd7, 0x24, 0xac, 0x52, 0x16, 0xd6, - 0xbf, 0x92, 0xd2, 0x7a, 0x42, 0x39, 0x0a, 0xe9, 0x24, 0x9d, 0xe1, 0x71, 0x2b, 0xa8, 0x0e, 0x70, - 0x6c, 0xbb, 0xb2, 0x17, 0xad, 0x2c, 0x45, 0x63, 0xb2, 0xeb, 0x8a, 0x8a, 0x63, 0x12, 0xe8, 0xab, - 0x50, 0x32, 0x9d, 0x3e, 0xf3, 0x49, 0x30, 0x8f, 0x5b, 0x16, 0x37, 0x48, 0xad, 0x6f, 0x37, 0x62, - 0xe1, 0xb8, 0x1c, 0x3a, 0x81, 0x45, 0x3b, 0xd6, 0xf4, 0x56, 0x56, 0x44, 0x2c, 0x6e, 0xcf, 0xdc, - 0xe9, 0xb2, 0xe6, 0x0a, 0xcf, 0x44, 0x71, 0x0a, 0x4e, 0x20, 0xaf, 0x7f, 0x0d, 0x4a, 0x9f, 0xb0, - 0x07, 0xe3, 0x3d, 0xdc, 0xf8, 0xd1, 0xcd, 0xd4, 0xc3, 0xfd, 0x25, 0x03, 0x4b, 0xc9, 0x0d, 0x57, - 0x6f, 0x1d, 0x6d, 0xea, 0x7c, 0x35, 0xcc, 0xca, 0xd9, 0xa9, 0x59, 0x59, 0x26, 0xbf, 0xf9, 0x17, - 0x49, 0x7e, 0xdb, 0x00, 0x46, 0xcf, 0x0e, 0xf3, 0x5e, 0x90, 0x47, 0x55, 0xe6, 0x8a, 0x26, 0x7e, - 0x38, 0x26, 0x25, 0x26, 0xa8, 0x9e, 0xeb, 0x53, 0xcf, 0x71, 0x08, 0x95, 0xc5, 0x34, 0x98, 0xa0, - 0x2a, 0x2a, 0x8e, 0x49, 0xa0, 0xeb, 0x80, 0x8e, 0x1c, 0xcf, 0x3c, 0x15, 0x5b, 0x10, 0xde, 0x73, - 0x91, 0x25, 0x0b, 0xc1, 0xe0, 0xaa, 0x39, 0xc1, 0xc5, 0x17, 0x68, 0xe8, 0x0b, 0x90, 0x6b, 0xf3, - 0xb6, 0x42, 0xbf, 0x0d, 0xc9, 0x99, 0x13, 0x7a, 0x27, 0xd8, 0x09, 0x4d, 0x0d, 0x85, 0x66, 0xdb, - 0x05, 0xfd, 0x0a, 0x14, 0xb1, 0xe7, 0xf9, 0x6d, 0xc3, 0x3f, 0x61, 0xa8, 0x06, 0xb9, 0x1e, 0xff, - 0x47, 0x8e, 0xfb, 0xc4, 0xac, 0x5a, 0x70, 0x70, 0x40, 0xd7, 0x7f, 0xa9, 0xc1, 0x2b, 0x53, 0xe7, - 0x8c, 0x7c, 0x47, 0x4d, 0xf5, 0x25, 0x5d, 0x52, 0x3b, 0x1a, 0xc9, 0xe1, 0x98, 0x14, 0xef, 0xc4, - 0x12, 0xc3, 0xc9, 0xf1, 0x4e, 0x2c, 0x61, 0x0d, 0x27, 0x65, 0xf5, 0x7f, 0x67, 0x20, 0x1f, 0x3c, - 0xcb, 0x3e, 0xe3, 0xe6, 0xfb, 0x75, 0xc8, 0x33, 0x61, 0x47, 0xba, 0xa7, 0xb2, 0x65, 0x60, 0x1d, - 0x4b, 0x2e, 0x6f, 0x62, 0xba, 0x84, 0x31, 0xa3, 0x13, 0x06, 0xaf, 0x6a, 0x62, 0x0e, 0x02, 0x32, - 0x0e, 0xf9, 0xe8, 0x6d, 0xfe, 0x0a, 0x35, 0x98, 0xea, 0x0b, 0xab, 0x21, 0x24, 0x16, 0xd4, 0xf3, - 0x61, 0x6d, 0x51, 0x82, 0x8b, 0x6f, 0x2c, 0xa5, 0xd1, 0x3d, 0x58, 0xb0, 0x88, 0x6f, 0xd8, 0x4e, - 0xd0, 0x0e, 0xa6, 0x9e, 0x5e, 0x06, 0x60, 0xad, 0x40, 0xb5, 0x59, 0xe2, 0x3e, 0xc9, 0x0f, 0x1c, - 0x02, 0xf2, 0x8b, 0x67, 0x7a, 0x56, 0xf0, 0x93, 0x42, 0x2e, 0xba, 0x78, 0xbb, 0x9e, 0x45, 0xb0, - 0xe0, 0xe8, 0x8f, 0x34, 0x28, 0x05, 0x48, 0xbb, 0x46, 0x9f, 0x11, 0xb4, 0xa5, 0x56, 0x11, 0x1c, - 0x77, 0x58, 0x93, 0xe7, 0xdf, 0x1b, 0xf4, 0xc8, 0xf9, 0xb0, 0x56, 0x14, 0x62, 0xfc, 0x43, 0x2d, - 0x20, 0xb6, 0x47, 0x99, 0x4b, 0xf6, 0xe8, 0x35, 0xc8, 0x89, 0xd6, 0x5b, 0x6e, 0xa6, 0x6a, 0xf4, - 0x44, 0x7b, 0x8e, 0x03, 0x9e, 0xfe, 0x71, 0x06, 0xca, 0x89, 0xc5, 0xa5, 0xe8, 0xea, 0xd4, 0xa8, - 0x24, 0x93, 0x62, 0xfc, 0x36, 0xfd, 0x87, 0xa0, 0xef, 0x42, 0xde, 0xe4, 0xeb, 0x0b, 0x7f, 0x89, - 0xdb, 0x9a, 0xe5, 0x28, 0xc4, 0xce, 0x44, 0x91, 0x24, 0x3e, 0x19, 0x96, 0x80, 0xe8, 0x06, 0xac, - 0x52, 0xe2, 0xd3, 0xc1, 0xce, 0xb1, 0x4f, 0x68, 0xbc, 0xff, 0xcf, 0x45, 0x7d, 0x0f, 0x1e, 0x17, - 0xc0, 0x93, 0x3a, 0x61, 0xaa, 0xcc, 0xbf, 0x40, 0xaa, 0xd4, 0x1d, 0x98, 0xff, 0x2f, 0xf6, 0xe8, - 0xdf, 0x83, 0x62, 0xd4, 0x45, 0x7d, 0xca, 0x26, 0xf5, 0x1f, 0x40, 0x81, 0x47, 0x63, 0xd8, 0xfd, - 0x5f, 0x52, 0x89, 0x92, 0x35, 0x22, 0x93, 0xa6, 0x46, 0xe8, 0x6f, 0x41, 0xf9, 0x4e, 0xcf, 0x9a, - 0xed, 0x57, 0x14, 0x7d, 0x1b, 0x82, 0x1f, 0x05, 0x79, 0x0a, 0x0e, 0x9e, 0xf9, 0xb1, 0x14, 0x1c, - 0x7f, 0xb3, 0x27, 0x7f, 0xaf, 0x01, 0xf1, 0xe6, 0xdc, 0x3b, 0x23, 0xae, 0xcf, 0x57, 0xc3, 0x8f, - 0x6d, 0x7c, 0x35, 0xe2, 0xee, 0x09, 0x0e, 0xba, 0x03, 0x79, 0x4f, 0xb4, 0x64, 0x72, 0xf0, 0x35, - 0xe3, 0x0c, 0x41, 0x85, 0x6a, 0xd0, 0xd7, 0x61, 0x09, 0xd6, 0xdc, 0x7c, 0xf2, 0xac, 0x3a, 0xf7, - 0xf4, 0x59, 0x75, 0xee, 0xa3, 0x67, 0xd5, 0xb9, 0x0f, 0x46, 0x55, 0xed, 0xc9, 0xa8, 0xaa, 0x3d, - 0x1d, 0x55, 0xb5, 0x8f, 0x46, 0x55, 0xed, 0xe3, 0x51, 0x55, 0x7b, 0xf4, 0x8f, 0xea, 0xdc, 0xbd, - 0xcc, 0xd9, 0xd6, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xab, 0xec, 0x02, 0x4a, 0x00, 0x21, 0x00, - 0x00, + // 2674 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x19, 0x4d, 0x6c, 0x23, 0x57, + 0x39, 0x63, 0xc7, 0x8e, 0xfd, 0x39, 0xce, 0xcf, 0xeb, 0x16, 0x5c, 0x4b, 0xc4, 0xe9, 0x14, 0x55, + 0x29, 0x6c, 0x6d, 0x92, 0xd2, 0x6a, 0x59, 0x68, 0x21, 0x8e, 0x93, 0x6d, 0xe8, 0xa6, 0x89, 0x5e, + 0xba, 0x8b, 0x58, 0x56, 0x88, 0x89, 0xe7, 0xc5, 0x19, 0x62, 0xcf, 0x4c, 0xdf, 0x1b, 0x67, 0x37, + 0x70, 0xa0, 0x07, 0x10, 0x20, 0x41, 0xb5, 0x47, 0x4e, 0xa8, 0x2b, 0xb8, 0x70, 0xe5, 0xc4, 0x89, + 0x53, 0x25, 0xf6, 0x58, 0x89, 0x4b, 0x0f, 0xc8, 0xea, 0x06, 0x24, 0xb8, 0x71, 0xcf, 0x01, 0xa1, + 0xf7, 0x33, 0x33, 0x6f, 0xec, 0x78, 0x33, 0x66, 0x0b, 0xe2, 0x14, 0xcf, 0xf7, 0xff, 0xbe, 0xef, + 0x7b, 0xdf, 0xf7, 0xbd, 0x2f, 0xb0, 0x73, 0x7c, 0x8d, 0xd5, 0x1d, 0xaf, 0x71, 0xdc, 0x3f, 0x20, + 0xd4, 0x25, 0x01, 0x61, 0x8d, 0x13, 0xe2, 0xda, 0x1e, 0x6d, 0x28, 0x84, 0xe5, 0x3b, 0x3d, 0xab, + 0x7d, 0xe4, 0xb8, 0x84, 0x9e, 0x36, 0xfc, 0xe3, 0x0e, 0x07, 0xb0, 0x46, 0x8f, 0x04, 0x56, 0xe3, + 0x64, 0xb5, 0xd1, 0x21, 0x2e, 0xa1, 0x56, 0x40, 0xec, 0xba, 0x4f, 0xbd, 0xc0, 0x43, 0x9f, 0x97, + 0x5c, 0x75, 0x9d, 0xab, 0xee, 0x1f, 0x77, 0x38, 0x80, 0xd5, 0x39, 0x57, 0xfd, 0x64, 0xb5, 0xfa, + 0x72, 0xc7, 0x09, 0x8e, 0xfa, 0x07, 0xf5, 0xb6, 0xd7, 0x6b, 0x74, 0xbc, 0x8e, 0xd7, 0x10, 0xcc, + 0x07, 0xfd, 0x43, 0xf1, 0x25, 0x3e, 0xc4, 0x2f, 0x29, 0xb4, 0x3a, 0xd6, 0x14, 0xda, 0x77, 0x03, + 0xa7, 0x47, 0x86, 0xad, 0xa8, 0xbe, 0x76, 0x19, 0x03, 0x6b, 0x1f, 0x91, 0x9e, 0x35, 0xcc, 0x67, + 0xfe, 0x29, 0x0b, 0x85, 0xf5, 0xbd, 0xed, 0x1b, 0xd4, 0xeb, 0xfb, 0x68, 0x19, 0xa6, 0x5d, 0xab, + 0x47, 0x2a, 0xc6, 0xb2, 0xb1, 0x52, 0x6c, 0xce, 0x3e, 0x1a, 0xd4, 0xa6, 0xce, 0x06, 0xb5, 0xe9, + 0xb7, 0xad, 0x1e, 0xc1, 0x02, 0x83, 0xba, 0x50, 0x38, 0x21, 0x94, 0x39, 0x9e, 0xcb, 0x2a, 0x99, + 0xe5, 0xec, 0x4a, 0x69, 0xed, 0x8d, 0x7a, 0x9a, 0xf3, 0xd7, 0x85, 0x82, 0xdb, 0x92, 0x75, 0xcb, + 0xa3, 0x2d, 0x87, 0xb5, 0xbd, 0x13, 0x42, 0x4f, 0x9b, 0x0b, 0x4a, 0x4b, 0x41, 0x21, 0x19, 0x8e, + 0x34, 0xa0, 0x1f, 0x1b, 0xb0, 0xe0, 0x53, 0x72, 0x48, 0x28, 0x25, 0xb6, 0xc2, 0x57, 0xb2, 0xcb, + 0xc6, 0xa7, 0xa0, 0xb6, 0xa2, 0xd4, 0x2e, 0xec, 0x0d, 0xc9, 0xc7, 0x23, 0x1a, 0xd1, 0x6f, 0x0c, + 0xa8, 0x32, 0x42, 0x4f, 0x08, 0x5d, 0xb7, 0x6d, 0x4a, 0x18, 0x6b, 0x9e, 0x6e, 0x74, 0x1d, 0xe2, + 0x06, 0x1b, 0xdb, 0x2d, 0xcc, 0x2a, 0xd3, 0xc2, 0x0f, 0x5f, 0x4f, 0x67, 0xd0, 0xfe, 0x38, 0x39, + 0x4d, 0x53, 0x59, 0x54, 0x1d, 0x4b, 0xc2, 0xf0, 0x13, 0xcc, 0x30, 0x0f, 0x61, 0x36, 0x0c, 0xe4, + 0x4d, 0x87, 0x05, 0xe8, 0x36, 0xe4, 0x3b, 0xfc, 0x83, 0x55, 0x0c, 0x61, 0x60, 0x3d, 0x9d, 0x81, + 0xa1, 0x8c, 0xe6, 0x9c, 0xb2, 0x27, 0x2f, 0x3e, 0x19, 0x56, 0xd2, 0xcc, 0x9f, 0x4f, 0x43, 0x69, + 0x7d, 0x6f, 0x1b, 0x13, 0xe6, 0xf5, 0x69, 0x9b, 0xa4, 0x48, 0x9a, 0x35, 0x00, 0xfe, 0x97, 0xf9, + 0x56, 0x9b, 0xd8, 0x95, 0xcc, 0xb2, 0xb1, 0x52, 0x68, 0x22, 0x45, 0x07, 0x6f, 0x47, 0x18, 0xac, + 0x51, 0x71, 0xa9, 0xc7, 0x8e, 0x6b, 0x8b, 0x68, 0x6b, 0x52, 0xdf, 0x72, 0x5c, 0x1b, 0x0b, 0x0c, + 0xba, 0x09, 0xb9, 0x13, 0x42, 0x0f, 0xb8, 0xff, 0x79, 0x42, 0x7c, 0x31, 0xdd, 0xf1, 0x6e, 0x73, + 0x96, 0x66, 0xf1, 0x6c, 0x50, 0xcb, 0x89, 0x9f, 0x58, 0x0a, 0x41, 0x75, 0x00, 0x76, 0xe4, 0xd1, + 0x40, 0x98, 0x53, 0xc9, 0x2d, 0x67, 0x57, 0x8a, 0xcd, 0x39, 0x6e, 0xdf, 0x7e, 0x04, 0xc5, 0x1a, + 0x05, 0xba, 0x06, 0xb3, 0xcc, 0x71, 0x3b, 0xfd, 0xae, 0x45, 0x39, 0xa0, 0x92, 0x17, 0x76, 0x5e, + 0x51, 0x76, 0xce, 0xee, 0x6b, 0x38, 0x9c, 0xa0, 0xe4, 0x9a, 0xda, 0x56, 0x40, 0x3a, 0x1e, 0x75, + 0x08, 0xab, 0xcc, 0xc4, 0x9a, 0x36, 0x22, 0x28, 0xd6, 0x28, 0xd0, 0x0b, 0x90, 0x13, 0x9e, 0xaf, + 0x14, 0x84, 0x8a, 0xb2, 0x52, 0x91, 0x13, 0x61, 0xc1, 0x12, 0x87, 0x5e, 0x82, 0x19, 0x75, 0x6b, + 0x2a, 0x45, 0x41, 0x36, 0xaf, 0xc8, 0x66, 0xc2, 0xb4, 0x0e, 0xf1, 0xe8, 0x9b, 0x80, 0x58, 0xe0, + 0x51, 0xab, 0x43, 0x14, 0xea, 0x4d, 0x8b, 0x1d, 0x55, 0x40, 0x70, 0x55, 0x15, 0x17, 0xda, 0x1f, + 0xa1, 0xc0, 0x17, 0x70, 0x99, 0xbf, 0x37, 0x60, 0x5e, 0xcb, 0x05, 0x91, 0x77, 0xd7, 0x60, 0xb6, + 0xa3, 0xdd, 0x3a, 0x95, 0x17, 0x91, 0x67, 0xf4, 0x1b, 0x89, 0x13, 0x94, 0x88, 0x40, 0x91, 0x2a, + 0x49, 0x61, 0x75, 0x59, 0x4d, 0x9d, 0xb4, 0xa1, 0x0d, 0xb1, 0x26, 0x0d, 0xc8, 0x70, 0x2c, 0xd9, + 0xfc, 0xbb, 0x21, 0x12, 0x38, 0xac, 0x37, 0x68, 0x45, 0xab, 0x69, 0x86, 0x08, 0xc7, 0xec, 0x98, + 0x7a, 0x74, 0x49, 0x21, 0xc8, 0xfc, 0x5f, 0x14, 0x82, 0xeb, 0x85, 0x5f, 0x7d, 0x50, 0x9b, 0x7a, + 0xef, 0x2f, 0xcb, 0x53, 0x66, 0x0f, 0xca, 0x1b, 0x94, 0x58, 0x01, 0xd9, 0xf5, 0x03, 0x71, 0x00, + 0x13, 0xf2, 0x36, 0x3d, 0xc5, 0x7d, 0x57, 0x1d, 0x14, 0xf8, 0xfd, 0x6e, 0x09, 0x08, 0x56, 0x18, + 0x1e, 0xbf, 0x43, 0x87, 0x74, 0xed, 0x1d, 0xcb, 0xb5, 0x3a, 0x84, 0xaa, 0x1b, 0x18, 0x79, 0x75, + 0x4b, 0xc3, 0xe1, 0x04, 0xa5, 0xf9, 0xd3, 0x2c, 0x94, 0x5b, 0xa4, 0x4b, 0x62, 0x7d, 0x5b, 0x80, + 0x3a, 0xd4, 0x6a, 0x93, 0x3d, 0x42, 0x1d, 0xcf, 0xde, 0x27, 0x6d, 0xcf, 0xb5, 0x99, 0xc8, 0x88, + 0x6c, 0xf3, 0x33, 0x3c, 0xcf, 0x6e, 0x8c, 0x60, 0xf1, 0x05, 0x1c, 0xa8, 0x0b, 0x65, 0x9f, 0x8a, + 0xdf, 0x4e, 0xa0, 0x7a, 0x0f, 0xbf, 0xf3, 0xaf, 0xa4, 0x73, 0xf5, 0x9e, 0xce, 0xda, 0x5c, 0x3c, + 0x1b, 0xd4, 0xca, 0x09, 0x10, 0x4e, 0x0a, 0x47, 0xdf, 0x80, 0x05, 0x8f, 0xfa, 0x47, 0x96, 0xdb, + 0x22, 0x3e, 0x71, 0x6d, 0xe2, 0x06, 0x4c, 0x78, 0xa1, 0xd0, 0xbc, 0xc2, 0x3b, 0xc6, 0xee, 0x10, + 0x0e, 0x8f, 0x50, 0xa3, 0x3b, 0xb0, 0xe8, 0x53, 0xcf, 0xb7, 0x3a, 0x16, 0x97, 0xb8, 0xe7, 0x75, + 0x9d, 0xf6, 0xa9, 0xa8, 0x53, 0xc5, 0xe6, 0xd5, 0xb3, 0x41, 0x6d, 0x71, 0x6f, 0x18, 0x79, 0x3e, + 0xa8, 0x3d, 0x23, 0x5c, 0xc7, 0x21, 0x31, 0x12, 0x8f, 0x8a, 0xd1, 0x62, 0x98, 0x1b, 0x17, 0x43, + 0x73, 0x1b, 0x0a, 0xad, 0x3e, 0x15, 0x5c, 0xe8, 0x75, 0x28, 0xd8, 0xea, 0xb7, 0xf2, 0xfc, 0xf3, + 0x61, 0xcb, 0x0d, 0x69, 0xce, 0x07, 0xb5, 0x32, 0x1f, 0x12, 0xea, 0x21, 0x00, 0x47, 0x2c, 0xe6, + 0x5d, 0x28, 0x6f, 0xde, 0xf7, 0x3d, 0x1a, 0x84, 0x31, 0x7d, 0x11, 0xf2, 0x44, 0x00, 0x84, 0xb4, + 0x42, 0xdc, 0x27, 0x24, 0x19, 0x56, 0x58, 0x5e, 0xb7, 0xc8, 0x7d, 0xab, 0x1d, 0xa8, 0x82, 0x1f, + 0xd5, 0xad, 0x4d, 0x0e, 0xc4, 0x12, 0x67, 0x7e, 0x68, 0x40, 0x5e, 0x64, 0x14, 0x43, 0xef, 0x40, + 0xb6, 0x67, 0xf9, 0xaa, 0x59, 0xbd, 0x9a, 0x2e, 0xb2, 0x92, 0xb5, 0xbe, 0x63, 0xf9, 0x9b, 0x6e, + 0x40, 0x4f, 0x9b, 0x25, 0xa5, 0x24, 0xbb, 0x63, 0xf9, 0x98, 0x8b, 0xab, 0xda, 0x50, 0x08, 0xb1, + 0x68, 0x01, 0xb2, 0xc7, 0xe4, 0x54, 0x16, 0x24, 0xcc, 0x7f, 0xa2, 0x26, 0xe4, 0x4e, 0xac, 0x6e, + 0x9f, 0xa8, 0x7c, 0xba, 0x3a, 0x89, 0x56, 0x2c, 0x59, 0xaf, 0x67, 0xae, 0x19, 0xe6, 0x2e, 0xc0, + 0x0d, 0x12, 0x79, 0x68, 0x1d, 0xe6, 0xc3, 0x6a, 0x93, 0x2c, 0x82, 0x9f, 0x55, 0xe6, 0xcd, 0xe3, + 0x24, 0x1a, 0x0f, 0xd3, 0x9b, 0x77, 0xa1, 0x28, 0x0a, 0x25, 0xef, 0x77, 0x71, 0x07, 0x30, 0x9e, + 0xd0, 0x01, 0xc2, 0x86, 0x99, 0x19, 0xd7, 0x30, 0xb5, 0xba, 0xd0, 0x85, 0xb2, 0xe4, 0x0d, 0x7b, + 0x78, 0x2a, 0x0d, 0x57, 0xa1, 0x10, 0x9a, 0xa9, 0xb4, 0x44, 0xb3, 0x5b, 0x28, 0x08, 0x47, 0x14, + 0x9a, 0xb6, 0x23, 0x48, 0x14, 0xfd, 0x74, 0xca, 0xb4, 0x86, 0x96, 0x79, 0x72, 0x43, 0xd3, 0x34, + 0xfd, 0x08, 0x2a, 0xe3, 0x06, 0xbe, 0xa7, 0x68, 0x4b, 0xe9, 0x4d, 0x31, 0xdf, 0x37, 0x60, 0x41, + 0x97, 0x94, 0x3e, 0x7c, 0xe9, 0x95, 0x5c, 0x3e, 0x1a, 0x69, 0x1e, 0xf9, 0xb5, 0x01, 0x57, 0x12, + 0x47, 0x9b, 0x28, 0xe2, 0x13, 0x18, 0xa5, 0x27, 0x47, 0x76, 0x82, 0xe4, 0x68, 0x40, 0x69, 0xdb, + 0x75, 0x02, 0xc7, 0xea, 0x3a, 0x3f, 0x20, 0xf4, 0xf2, 0x61, 0xd2, 0xfc, 0xa3, 0x01, 0xb3, 0x1a, + 0x07, 0x43, 0x77, 0x61, 0x86, 0xd7, 0x5d, 0xc7, 0xed, 0xa8, 0xda, 0x91, 0x72, 0x66, 0xd0, 0x84, + 0xc4, 0xe7, 0xda, 0x93, 0x92, 0x70, 0x28, 0x12, 0xed, 0x41, 0x9e, 0x12, 0xd6, 0xef, 0x06, 0x93, + 0x95, 0x88, 0xfd, 0xc0, 0x0a, 0xfa, 0x4c, 0xd6, 0x66, 0x2c, 0xf8, 0xb1, 0x92, 0x63, 0xfe, 0x39, + 0x03, 0xe5, 0x9b, 0xd6, 0x01, 0xe9, 0xee, 0x93, 0x2e, 0x69, 0x07, 0x1e, 0x45, 0x3f, 0x84, 0x52, + 0xcf, 0x0a, 0xda, 0x47, 0x02, 0x1a, 0x8e, 0xeb, 0xad, 0x74, 0x8a, 0x12, 0x92, 0xea, 0x3b, 0xb1, + 0x18, 0x59, 0x10, 0x9f, 0x51, 0x07, 0x2b, 0x69, 0x18, 0xac, 0x6b, 0x13, 0x6f, 0x2c, 0xf1, 0xbd, + 0x79, 0xdf, 0xe7, 0xb3, 0xc4, 0xe4, 0x4f, 0xbb, 0x84, 0x09, 0x98, 0xbc, 0xdb, 0x77, 0x28, 0xe9, + 0x11, 0x37, 0x88, 0xdf, 0x58, 0x3b, 0x43, 0xf2, 0xf1, 0x88, 0xc6, 0xea, 0x1b, 0xb0, 0x30, 0x6c, + 0xfc, 0x05, 0xf5, 0xfa, 0x8a, 0x5e, 0xaf, 0x8b, 0x7a, 0x05, 0xfe, 0xad, 0x01, 0x95, 0x71, 0x86, + 0xa0, 0xcf, 0x69, 0x82, 0xe2, 0x1e, 0xf1, 0x16, 0x39, 0x95, 0x52, 0x37, 0xa1, 0xe0, 0xf9, 0xfc, + 0x55, 0xec, 0x51, 0x95, 0xe7, 0x2f, 0x85, 0xb9, 0xbb, 0xab, 0xe0, 0xe7, 0x83, 0xda, 0xb3, 0x09, + 0xf1, 0x21, 0x02, 0x47, 0xac, 0xbc, 0x31, 0x0b, 0x7b, 0xf8, 0xb0, 0x10, 0x35, 0xe6, 0xdb, 0x02, + 0x82, 0x15, 0xc6, 0xfc, 0x83, 0x01, 0xd3, 0x62, 0x4a, 0xbe, 0x0b, 0x05, 0xee, 0x3f, 0xdb, 0x0a, + 0x2c, 0x61, 0x57, 0xea, 0xf7, 0x19, 0xe7, 0xde, 0x21, 0x81, 0x15, 0xdf, 0xaf, 0x10, 0x82, 0x23, + 0x89, 0x08, 0x43, 0xce, 0x09, 0x48, 0x2f, 0x0c, 0xe4, 0xcb, 0x63, 0x45, 0xab, 0xed, 0x40, 0x1d, + 0x5b, 0xf7, 0x36, 0xef, 0x07, 0xc4, 0xe5, 0xc1, 0x88, 0x8b, 0xc1, 0x36, 0x97, 0x81, 0xa5, 0x28, + 0xf3, 0x77, 0x06, 0x44, 0xaa, 0xf8, 0x75, 0x67, 0xa4, 0x7b, 0x78, 0xd3, 0x71, 0x8f, 0x95, 0x5b, + 0x23, 0x73, 0xf6, 0x15, 0x1c, 0x47, 0x14, 0x17, 0x35, 0xc4, 0xcc, 0x64, 0x0d, 0x91, 0x2b, 0x6c, + 0x7b, 0x6e, 0xe0, 0xb8, 0xfd, 0x91, 0xfa, 0xb2, 0xa1, 0xe0, 0x38, 0xa2, 0x30, 0xff, 0x95, 0x81, + 0x12, 0xb7, 0x35, 0xec, 0xc8, 0x5f, 0x85, 0x72, 0x57, 0x8f, 0x9e, 0xb2, 0xf9, 0x59, 0x25, 0x22, + 0x79, 0x1f, 0x71, 0x92, 0x96, 0x33, 0x8b, 0x31, 0x37, 0x62, 0xce, 0x24, 0x99, 0xb7, 0x74, 0x24, + 0x4e, 0xd2, 0xf2, 0x3a, 0x7b, 0x8f, 0xe7, 0xb5, 0x1a, 0x20, 0x23, 0xd7, 0x7e, 0x8b, 0x03, 0xb1, + 0xc4, 0x5d, 0xe4, 0x9f, 0xe9, 0x09, 0xfd, 0x73, 0x1d, 0xe6, 0x78, 0x20, 0xbd, 0x7e, 0x10, 0x4e, + 0xd9, 0x39, 0x31, 0xeb, 0xa1, 0xb3, 0x41, 0x6d, 0xee, 0x9d, 0x04, 0x06, 0x0f, 0x51, 0x72, 0x1b, + 0xbb, 0x4e, 0xcf, 0x09, 0x2a, 0x33, 0x82, 0x25, 0xb2, 0xf1, 0x26, 0x07, 0x62, 0x89, 0x4b, 0x04, + 0xa0, 0x70, 0x69, 0x00, 0xfe, 0x91, 0x01, 0x24, 0x9f, 0x05, 0xb6, 0x9c, 0x96, 0xe4, 0x8d, 0x7e, + 0x09, 0x66, 0x7a, 0xea, 0x59, 0x61, 0x24, 0x1b, 0x4a, 0xf8, 0xa2, 0x08, 0xf1, 0x68, 0x07, 0x8a, + 0xf2, 0x66, 0xc5, 0xd9, 0xd2, 0x50, 0xc4, 0xc5, 0xdd, 0x10, 0x71, 0x3e, 0xa8, 0x55, 0x13, 0x6a, + 0x22, 0xcc, 0x3b, 0xa7, 0x3e, 0xc1, 0xb1, 0x04, 0xb4, 0x06, 0x60, 0xf9, 0x8e, 0xbe, 0x43, 0x2a, + 0xc6, 0x3b, 0x88, 0xf8, 0x35, 0x88, 0x35, 0x2a, 0xf4, 0x26, 0x4c, 0x73, 0x4f, 0xa9, 0x05, 0xc3, + 0x17, 0xd2, 0xdd, 0x4f, 0xee, 0xeb, 0x66, 0x81, 0x37, 0x2d, 0xfe, 0x0b, 0x0b, 0x09, 0xe8, 0x0e, + 0xe4, 0x45, 0x5a, 0xc8, 0xa8, 0x4c, 0x38, 0x68, 0x8a, 0x57, 0x87, 0x9a, 0x92, 0xcf, 0xa3, 0x5f, + 0x58, 0x49, 0x34, 0xdf, 0x85, 0xe2, 0x8e, 0xd3, 0xa6, 0x1e, 0x57, 0xc7, 0x1d, 0xcc, 0x12, 0xaf, + 0xac, 0xc8, 0xc1, 0x61, 0xf0, 0x43, 0x3c, 0x8f, 0xba, 0x6b, 0xb9, 0x9e, 0x7c, 0x4b, 0xe5, 0xe2, + 0xa8, 0xbf, 0xcd, 0x81, 0x58, 0xe2, 0xae, 0x5f, 0xe1, 0x8d, 0xfa, 0x67, 0x0f, 0x6b, 0x53, 0x0f, + 0x1e, 0xd6, 0xa6, 0x3e, 0x78, 0xa8, 0x9a, 0xf6, 0xdf, 0x4a, 0x00, 0xbb, 0x07, 0xdf, 0x27, 0x6d, + 0x59, 0x0c, 0x2e, 0xdf, 0x00, 0xf1, 0xe1, 0x4b, 0x2d, 0x1e, 0xc5, 0xb6, 0x24, 0x33, 0x34, 0x7c, + 0x69, 0x38, 0x9c, 0xa0, 0x44, 0x0d, 0x28, 0x46, 0x5b, 0x21, 0x15, 0xb6, 0xc5, 0x30, 0x0d, 0xa2, + 0xd5, 0x11, 0x8e, 0x69, 0x12, 0x95, 0x69, 0xfa, 0xd2, 0xca, 0xd4, 0x84, 0x6c, 0xdf, 0xb1, 0x45, + 0x54, 0x8a, 0xcd, 0x2f, 0x85, 0x9d, 0xe1, 0xd6, 0x76, 0xeb, 0x7c, 0x50, 0x7b, 0x7e, 0xdc, 0x4a, + 0x35, 0x38, 0xf5, 0x09, 0xab, 0xdf, 0xda, 0x6e, 0x61, 0xce, 0x7c, 0xd1, 0xed, 0xcd, 0x4f, 0x78, + 0x7b, 0xd7, 0x00, 0xd4, 0xa9, 0x39, 0xb7, 0xbc, 0x86, 0x51, 0x76, 0xde, 0x88, 0x30, 0x58, 0xa3, + 0x42, 0x0c, 0x16, 0xdb, 0xfc, 0x71, 0xcf, 0x93, 0xdd, 0xe9, 0x11, 0x16, 0x58, 0x3d, 0xb9, 0x23, + 0x9a, 0x2c, 0x55, 0x9f, 0x53, 0x6a, 0x16, 0x37, 0x86, 0x85, 0xe1, 0x51, 0xf9, 0xc8, 0x83, 0x45, + 0x5b, 0x3d, 0x53, 0x63, 0xa5, 0xc5, 0x89, 0x95, 0x3e, 0xcb, 0x15, 0xb6, 0x86, 0x05, 0xe1, 0x51, + 0xd9, 0xe8, 0xbb, 0x50, 0x0d, 0x81, 0xa3, 0xbb, 0x02, 0xb1, 0xb5, 0xca, 0x36, 0x97, 0xce, 0x06, + 0xb5, 0x6a, 0x6b, 0x2c, 0x15, 0x7e, 0x82, 0x04, 0x64, 0x43, 0xbe, 0x2b, 0xc7, 0xae, 0x92, 0x68, + 0x95, 0x5f, 0x4b, 0x77, 0x8a, 0x38, 0xfb, 0xeb, 0xfa, 0xb8, 0x15, 0xbd, 0x85, 0xd5, 0xa4, 0xa5, + 0x64, 0xa3, 0xfb, 0x50, 0xb2, 0x5c, 0xd7, 0x0b, 0x2c, 0xb9, 0xbd, 0x98, 0x15, 0xaa, 0xd6, 0x27, + 0x56, 0xb5, 0x1e, 0xcb, 0x18, 0x1a, 0xef, 0x34, 0x0c, 0xd6, 0x55, 0xa1, 0x7b, 0x30, 0xef, 0xdd, + 0x73, 0x09, 0xc5, 0xe4, 0x90, 0x50, 0xe2, 0xb6, 0x09, 0xab, 0x94, 0x85, 0xf6, 0x2f, 0xa7, 0xd4, + 0x9e, 0x60, 0x8e, 0x53, 0x3a, 0x09, 0x67, 0x78, 0x58, 0x0b, 0xaa, 0x03, 0x1c, 0x3a, 0xae, 0x1a, + 0xd2, 0x2b, 0x73, 0xf1, 0x9a, 0x73, 0x2b, 0x82, 0x62, 0x8d, 0x02, 0xbd, 0x0a, 0xa5, 0x76, 0xb7, + 0xcf, 0x02, 0x22, 0xf7, 0xa9, 0xf3, 0xe2, 0x06, 0x45, 0xe7, 0xdb, 0x88, 0x51, 0x58, 0xa7, 0x43, + 0x47, 0x30, 0xeb, 0x68, 0xaf, 0x81, 0xca, 0x82, 0xc8, 0xc5, 0xb5, 0x89, 0x9f, 0x00, 0xac, 0xb9, + 0xc0, 0x2b, 0x91, 0x0e, 0xc1, 0x09, 0xc9, 0xa8, 0x0f, 0xe5, 0x9e, 0xde, 0x6a, 0x2a, 0x8b, 0xc2, + 0x8f, 0xd7, 0xd2, 0xa9, 0x1a, 0x6d, 0x86, 0xf1, 0x00, 0x91, 0xc0, 0xe1, 0xa4, 0x96, 0xea, 0x57, + 0xa0, 0xf4, 0x1f, 0xce, 0xc4, 0x7c, 0xa6, 0x1e, 0xce, 0x98, 0x89, 0x66, 0xea, 0x0f, 0x33, 0x30, + 0x97, 0x8c, 0x73, 0xf4, 0xf6, 0x34, 0xc6, 0xae, 0xe5, 0xc3, 0x66, 0x90, 0x1d, 0xdb, 0x0c, 0x54, + 0xcd, 0x9d, 0x7e, 0x9a, 0x9a, 0x9b, 0x6c, 0xe7, 0xb9, 0x54, 0xed, 0xbc, 0x0e, 0xc0, 0xe7, 0x13, + 0xea, 0x75, 0xbb, 0x84, 0x8a, 0x12, 0x5d, 0x50, 0x8b, 0xf7, 0x08, 0x8a, 0x35, 0x0a, 0xb4, 0x05, + 0xe8, 0xa0, 0xeb, 0xb5, 0x8f, 0x85, 0x0b, 0xc2, 0xf2, 0x22, 0x8a, 0x73, 0x41, 0x2e, 0x2f, 0x9b, + 0x23, 0x58, 0x7c, 0x01, 0x87, 0x39, 0x03, 0xb9, 0x3d, 0x3e, 0xe6, 0x99, 0xbf, 0x34, 0x60, 0x56, + 0xfc, 0x9a, 0x64, 0x1d, 0x5b, 0x83, 0xdc, 0xa1, 0x17, 0xae, 0x5c, 0x0a, 0xf2, 0x3f, 0x17, 0x5b, + 0x1c, 0x80, 0x25, 0xfc, 0x29, 0xf6, 0xb5, 0xef, 0x1b, 0x90, 0x5c, 0x84, 0xa2, 0x37, 0x64, 0x68, + 0x8c, 0x68, 0x53, 0x39, 0x61, 0x58, 0x5e, 0x1f, 0x37, 0xe8, 0x3f, 0x93, 0x6a, 0xeb, 0x75, 0x15, + 0x8a, 0xd8, 0xf3, 0x82, 0x3d, 0x2b, 0x38, 0x62, 0xfc, 0xe0, 0x3e, 0xff, 0xa1, 0x7c, 0x23, 0x0e, + 0x2e, 0x30, 0x58, 0xc2, 0xcd, 0x5f, 0x18, 0xf0, 0xdc, 0xd8, 0x15, 0x39, 0xcf, 0x90, 0x76, 0xf4, + 0xa5, 0x4e, 0x14, 0x65, 0x48, 0x4c, 0x87, 0x35, 0x2a, 0x3e, 0xe9, 0x27, 0xf6, 0xea, 0xc3, 0x93, + 0x7e, 0x42, 0x1b, 0x4e, 0xd2, 0x9a, 0xff, 0xcc, 0x40, 0x5e, 0x3e, 0xfb, 0xff, 0xcb, 0x8f, 0xbb, + 0x17, 0x21, 0xcf, 0x84, 0x1e, 0x65, 0x5e, 0xd4, 0x74, 0xa4, 0x76, 0xac, 0xb0, 0x62, 0xd8, 0x26, + 0x8c, 0x59, 0x9d, 0xf0, 0x32, 0xc6, 0xc3, 0xb6, 0x04, 0xe3, 0x10, 0x8f, 0x5e, 0x83, 0x3c, 0x25, + 0x16, 0x8b, 0xde, 0x1d, 0x4b, 0xa1, 0x48, 0x2c, 0xa0, 0xe7, 0x83, 0xda, 0xac, 0x12, 0x2e, 0xbe, + 0xb1, 0xa2, 0x46, 0x77, 0x60, 0xc6, 0x26, 0x81, 0xe5, 0x74, 0xc3, 0xc1, 0xf6, 0x95, 0x49, 0xd6, + 0x23, 0x2d, 0xc9, 0xda, 0x2c, 0x71, 0x9b, 0xd4, 0x07, 0x0e, 0x05, 0xf2, 0x42, 0xd2, 0xf6, 0x6c, + 0xf9, 0x9f, 0xb5, 0x5c, 0x5c, 0x48, 0x36, 0x3c, 0x9b, 0x60, 0x81, 0x31, 0x1f, 0x18, 0x50, 0x92, + 0x92, 0x36, 0xac, 0x3e, 0x23, 0x68, 0x35, 0x3a, 0x85, 0x0c, 0x77, 0x38, 0xda, 0x4c, 0xf3, 0xc7, + 0xc0, 0xf9, 0xa0, 0x56, 0x14, 0x64, 0xe2, 0x65, 0x10, 0x1e, 0x40, 0xf3, 0x51, 0xe6, 0x12, 0x1f, + 0xbd, 0x00, 0x39, 0x71, 0x7b, 0x94, 0x33, 0xa3, 0x79, 0x59, 0x5c, 0x30, 0x2c, 0x71, 0xe6, 0x27, + 0x19, 0x28, 0x27, 0x0e, 0x97, 0x62, 0x38, 0x8e, 0x56, 0x71, 0x99, 0x14, 0xeb, 0xdd, 0xf1, 0xff, + 0x0f, 0xfd, 0x36, 0xe4, 0xdb, 0xfc, 0x7c, 0xe1, 0x3f, 0xa4, 0x57, 0x27, 0x09, 0x85, 0xf0, 0x4c, + 0x9c, 0x49, 0xe2, 0x93, 0x61, 0x25, 0x10, 0xdd, 0x80, 0x45, 0x4a, 0x02, 0x7a, 0xba, 0x7e, 0x18, + 0x10, 0xaa, 0xbf, 0x2f, 0x73, 0xf1, 0xf8, 0x88, 0x87, 0x09, 0xf0, 0x28, 0x4f, 0x58, 0xfa, 0xf3, + 0x4f, 0x51, 0xfa, 0xcd, 0x2e, 0x4c, 0xff, 0x0f, 0x9f, 0x3a, 0xdf, 0x81, 0x62, 0x3c, 0x8c, 0x7e, + 0xca, 0x2a, 0xcd, 0xef, 0x41, 0x81, 0x67, 0x63, 0xf8, 0x88, 0xba, 0xa4, 0xb3, 0x26, 0x7b, 0x5e, + 0x26, 0x4d, 0xcf, 0x33, 0x7b, 0x50, 0xbe, 0xe5, 0xdb, 0x4f, 0xf9, 0x1f, 0xc0, 0x4c, 0xea, 0x8e, + 0xb2, 0x06, 0xf2, 0xbf, 0xea, 0xbc, 0x78, 0xcb, 0x05, 0x94, 0x56, 0xbc, 0xf5, 0x6d, 0x92, 0xb6, + 0x01, 0xfe, 0x89, 0x01, 0x20, 0xb6, 0x21, 0x9b, 0x27, 0xc4, 0x0d, 0xb8, 0x1f, 0x78, 0xc0, 0x87, + 0xfd, 0x20, 0x6e, 0xad, 0xc0, 0xa0, 0x5b, 0x90, 0xf7, 0xc4, 0x4c, 0xac, 0x56, 0xb2, 0x13, 0x6e, + 0xb7, 0xa2, 0x24, 0x97, 0x83, 0x35, 0x56, 0xc2, 0x9a, 0x2b, 0x8f, 0x1e, 0x2f, 0x4d, 0x7d, 0xf4, + 0x78, 0x69, 0xea, 0xe3, 0xc7, 0x4b, 0x53, 0xef, 0x9d, 0x2d, 0x19, 0x8f, 0xce, 0x96, 0x8c, 0x8f, + 0xce, 0x96, 0x8c, 0x8f, 0xcf, 0x96, 0x8c, 0x4f, 0xce, 0x96, 0x8c, 0x07, 0x7f, 0x5d, 0x9a, 0xba, + 0x93, 0x39, 0x59, 0xfd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x66, 0x55, 0x2c, 0x41, 0x24, + 0x00, 0x00, } diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto index 989f076a103..36bda1fe591 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto @@ -92,6 +92,16 @@ message APIResource { // categories is a list of the grouped resources this resource belongs to (e.g. 'all') repeated string categories = 7; + + // The hash value of the storage version, the version this resource is + // converted to when written to the data store. Value must be treated + // as opaque by clients. Only equality comparison on the value is valid. + // This is an alpha feature and may change or be removed in the future. + // The field is populated by the apiserver only if the + // StorageVersionHash feature gate is enabled. + // This field will remain optional even if it graduates. + // +optional + optional string storageVersionHash = 10; } // APIResourceList is a list of APIResource, it is used to expose the name of the @@ -134,9 +144,12 @@ message CreateOptions { // +optional repeated string dryRun = 1; - // If IncludeUninitialized is specified, the object may be - // returned without completing initialization. - optional bool includeUninitialized = 2; + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + optional string fieldManager = 3; } // DeleteOptions may be provided when deleting an API object. @@ -188,14 +201,34 @@ message Duration { } // ExportOptions is the query options to the standard REST get call. +// Deprecated. Planned for removal in 1.18. message ExportOptions { // Should this value be exported. Export strips fields that a user can not specify. + // Deprecated. Planned for removal in 1.18. optional bool export = 1; // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. + // Deprecated. Planned for removal in 1.18. optional bool exact = 2; } +// Fields stores a set of fields in a data structure like a Trie. +// To understand how this is used, see: https://github.com/kubernetes-sigs/structured-merge-diff +message Fields { + // Map stores a set of fields in a data structure like a Trie. + // + // Each key is either a '.' representing the field itself, and will always map to an empty set, + // or a string representing a sub-field or item. The string will follow one of these four formats: + // 'f:', where is the name of a field in a struct, or key in a map + // 'v:', where is the exact json formatted value of a list item + // 'i:', where is position of a item in a list + // 'k:', where is a map of a list item's key fields to their unique values + // If a key maps to an empty Fields value, the field that key represents is part of the set. + // + // The exact format is defined in k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal + map map = 1; +} + // GetOptions is the standard query options to the standard REST get call. message GetOptions { // When specified: @@ -203,10 +236,6 @@ message GetOptions { // - if it's 0, then we simply return what we currently have in cache, no guarantee; // - if set to non zero, then the result is at least as fresh as given rv. optional string resourceVersion = 1; - - // If true, partially initialized resources are included in the response. - // +optional - optional bool includeUninitialized = 2; } // GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying @@ -380,10 +409,6 @@ message ListOptions { // +optional optional string fieldSelector = 2; - // If true, partially initialized resources are included in the response. - // +optional - optional bool includeUninitialized = 6; - // Watch for changes to the described resources and return them as a stream of // add, update, and remove notifications. Specify resourceVersion. // +optional @@ -438,6 +463,31 @@ message ListOptions { optional string continue = 8; } +// ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource +// that the fieldset applies to. +message ManagedFieldsEntry { + // Manager is an identifier of the workflow managing these fields. + optional string manager = 1; + + // Operation is the type of operation which lead to this ManagedFieldsEntry being created. + // The only valid values for this field are 'Apply' and 'Update'. + optional string operation = 2; + + // APIVersion defines the version of this resource that this field set + // applies to. The format is "group/version" just like the top-level + // APIVersion field. It is necessary to track the version of a field + // set because it cannot be automatically converted. + optional string apiVersion = 3; + + // Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply' + // +optional + optional Time time = 4; + + // Fields identifies a set of fields. + // +optional + optional Fields fields = 5; +} + // MicroTime is version of Time with microsecond level precision. // // +protobuf.options.marshal=false @@ -602,6 +652,8 @@ message ObjectMeta { // When an object is created, the system will populate this list with the current set of initializers. // Only privileged users may set or modify this list. Once it is empty, it may not be modified further // by any user. + // + // DEPRECATED - initializers are an alpha field and will be removed in v1.15. optional Initializers initializers = 16; // Must be empty before the object is deleted from the registry. Each entry @@ -617,6 +669,19 @@ message ObjectMeta { // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. // +optional optional string clusterName = 15; + + // ManagedFields maps workflow-id and version to the set of fields + // that are managed by that workflow. This is mostly for internal + // housekeeping, and users typically shouldn't need to set or + // understand this field. A workflow can be the user's name, a + // controller's name, or the name of a specific apply path like + // "ci-cd". The set of fields is always in the version that the + // workflow used when modifying the object. + // + // This field is alpha and can be changed or removed without notice. + // + // +optional + repeated ManagedFieldsEntry managedFields = 17; } // OwnerReference contains enough information to let you identify an owning @@ -656,11 +721,43 @@ message OwnerReference { message Patch { } +// PatchOptions may be provided when patching an API object. +// PatchOptions is meant to be a superset of UpdateOptions. +message PatchOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. Force + // flag must be unset for non-apply patch requests. + // +optional + optional bool force = 2; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required for apply requests + // (application/apply-patch) but optional for non-apply patch + // types (JsonPatch, MergePatch, StrategicMergePatch). + // +optional + optional string fieldManager = 3; +} + // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. message Preconditions { // Specifies the target UID. // +optional optional string uid = 1; + + // Specifies the target ResourceVersion + // +optional + optional string resourceVersion = 2; } // RootPaths lists the paths available at root. @@ -841,6 +938,7 @@ message TypeMeta { } // UpdateOptions may be provided when updating an API object. +// All fields in UpdateOptions should also be present in PatchOptions. message UpdateOptions { // When present, indicates that modifications should not be // persisted. An invalid or unrecognized dryRun directive will @@ -849,6 +947,13 @@ message UpdateOptions { // - All: all dry run stages will be processed // +optional repeated string dryRun = 1; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + optional string fieldManager = 2; } // Verbs masks the value so protobuf can generate diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go index d845d7b0fff..b4dc78b3eaa 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go @@ -17,6 +17,7 @@ limitations under the License. package v1 import ( + "encoding/json" "fmt" "k8s.io/apimachinery/pkg/fields" @@ -227,8 +228,40 @@ func NewUIDPreconditions(uid string) *Preconditions { return &Preconditions{UID: &u} } +// NewRVDeletionPrecondition returns a DeleteOptions with a ResourceVersion precondition set. +func NewRVDeletionPrecondition(rv string) *DeleteOptions { + p := Preconditions{ResourceVersion: &rv} + return &DeleteOptions{Preconditions: &p} +} + // HasObjectMetaSystemFieldValues returns true if fields that are managed by the system on ObjectMeta have values. func HasObjectMetaSystemFieldValues(meta Object) bool { return !meta.GetCreationTimestamp().Time.IsZero() || len(meta.GetUID()) != 0 } + +// ResetObjectMetaForStatus forces the meta fields for a status update to match the meta fields +// for a pre-existing object. This is opt-in for new objects with Status subresource. +func ResetObjectMetaForStatus(meta, existingMeta Object) { + meta.SetDeletionTimestamp(existingMeta.GetDeletionTimestamp()) + meta.SetGeneration(existingMeta.GetGeneration()) + meta.SetSelfLink(existingMeta.GetSelfLink()) + meta.SetLabels(existingMeta.GetLabels()) + meta.SetAnnotations(existingMeta.GetAnnotations()) + meta.SetFinalizers(existingMeta.GetFinalizers()) + meta.SetOwnerReferences(existingMeta.GetOwnerReferences()) + meta.SetManagedFields(existingMeta.GetManagedFields()) +} + +// MarshalJSON implements json.Marshaler +func (f Fields) MarshalJSON() ([]byte, error) { + return json.Marshal(&f.Map) +} + +// UnmarshalJSON implements json.Unmarshaler +func (f *Fields) UnmarshalJSON(b []byte) error { + return json.Unmarshal(b, &f.Map) +} + +var _ json.Marshaler = Fields{} +var _ json.Unmarshaler = &Fields{} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go index ee1447541fc..05f07adf1b8 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go @@ -63,6 +63,8 @@ type Object interface { SetOwnerReferences([]OwnerReference) GetClusterName() string SetClusterName(clusterName string) + GetManagedFields() []ManagedFieldsEntry + SetManagedFields(managedFields []ManagedFieldsEntry) } // ListMetaAccessor retrieves the list interface from an object @@ -166,5 +168,9 @@ func (meta *ObjectMeta) GetOwnerReferences() []OwnerReference { return m func (meta *ObjectMeta) SetOwnerReferences(references []OwnerReference) { meta.OwnerReferences = references } -func (meta *ObjectMeta) GetClusterName() string { return meta.ClusterName } -func (meta *ObjectMeta) SetClusterName(clusterName string) { meta.ClusterName = clusterName } +func (meta *ObjectMeta) GetClusterName() string { return meta.ClusterName } +func (meta *ObjectMeta) SetClusterName(clusterName string) { meta.ClusterName = clusterName } +func (meta *ObjectMeta) GetManagedFields() []ManagedFieldsEntry { return meta.ManagedFields } +func (meta *ObjectMeta) SetManagedFields(managedFields []ManagedFieldsEntry) { + meta.ManagedFields = managedFields +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go index 0827729d087..76d042a9661 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go @@ -55,6 +55,7 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion) &DeleteOptions{}, &CreateOptions{}, &UpdateOptions{}, + &PatchOptions{}, ) utilruntime.Must(scheme.AddConversionFuncs( Convert_v1_WatchEvent_To_watch_Event, @@ -90,6 +91,7 @@ func init() { &DeleteOptions{}, &CreateOptions{}, &UpdateOptions{}, + &PatchOptions{}, ) // register manually. This usually goes through the SchemeBuilder, which we cannot use here. diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index 65f87546d20..fd6395256a5 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -235,6 +235,8 @@ type ObjectMeta struct { // When an object is created, the system will populate this list with the current set of initializers. // Only privileged users may set or modify this list. Once it is empty, it may not be modified further // by any user. + // + // DEPRECATED - initializers are an alpha field and will be removed in v1.15. Initializers *Initializers `json:"initializers,omitempty" protobuf:"bytes,16,opt,name=initializers"` // Must be empty before the object is deleted from the registry. Each entry @@ -250,6 +252,19 @@ type ObjectMeta struct { // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. // +optional ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"` + + // ManagedFields maps workflow-id and version to the set of fields + // that are managed by that workflow. This is mostly for internal + // housekeeping, and users typically shouldn't need to set or + // understand this field. A workflow can be the user's name, a + // controller's name, or the name of a specific apply path like + // "ci-cd". The set of fields is always in the version that the + // workflow used when modifying the object. + // + // This field is alpha and can be changed or removed without notice. + // + // +optional + ManagedFields []ManagedFieldsEntry `json:"managedFields,omitempty" protobuf:"bytes,17,rep,name=managedFields"` } // Initializers tracks the progress of initialization. @@ -327,9 +342,9 @@ type ListOptions struct { // Defaults to everything. // +optional FieldSelector string `json:"fieldSelector,omitempty" protobuf:"bytes,2,opt,name=fieldSelector"` - // If true, partially initialized resources are included in the response. - // +optional - IncludeUninitialized bool `json:"includeUninitialized,omitempty" protobuf:"varint,6,opt,name=includeUninitialized"` + + // +k8s:deprecated=includeUninitialized,protobuf=6 + // Watch for changes to the described resources and return them as a stream of // add, update, and remove notifications. Specify resourceVersion. // +optional @@ -384,11 +399,14 @@ type ListOptions struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ExportOptions is the query options to the standard REST get call. +// Deprecated. Planned for removal in 1.18. type ExportOptions struct { TypeMeta `json:",inline"` // Should this value be exported. Export strips fields that a user can not specify. + // Deprecated. Planned for removal in 1.18. Export bool `json:"export" protobuf:"varint,1,opt,name=export"` // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. + // Deprecated. Planned for removal in 1.18. Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` } @@ -402,9 +420,7 @@ type GetOptions struct { // - if it's 0, then we simply return what we currently have in cache, no guarantee; // - if set to non zero, then the result is at least as fresh as given rv. ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,1,opt,name=resourceVersion"` - // If true, partially initialized resources are included in the response. - // +optional - IncludeUninitialized bool `json:"includeUninitialized,omitempty" protobuf:"varint,2,opt,name=includeUninitialized"` + // +k8s:deprecated=includeUninitialized,protobuf=2 } // DeletionPropagation decides if a deletion will propagate to the dependents of @@ -489,15 +505,52 @@ type CreateOptions struct { // - All: all dry run stages will be processed // +optional DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + // +k8s:deprecated=includeUninitialized,protobuf=2 - // If IncludeUninitialized is specified, the object may be - // returned without completing initialization. - IncludeUninitialized bool `json:"includeUninitialized,omitempty" protobuf:"varint,2,opt,name=includeUninitialized"` + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PatchOptions may be provided when patching an API object. +// PatchOptions is meant to be a superset of UpdateOptions. +type PatchOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. Force + // flag must be unset for non-apply patch requests. + // +optional + Force *bool `json:"force,omitempty" protobuf:"varint,2,opt,name=force"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required for apply requests + // (application/apply-patch) but optional for non-apply patch + // types (JsonPatch, MergePatch, StrategicMergePatch). + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // UpdateOptions may be provided when updating an API object. +// All fields in UpdateOptions should also be present in PatchOptions. type UpdateOptions struct { TypeMeta `json:",inline"` @@ -508,6 +561,13 @@ type UpdateOptions struct { // - All: all dry run stages will be processed // +optional DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,2,name=fieldManager"` } // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. @@ -515,6 +575,9 @@ type Preconditions struct { // Specifies the target UID. // +optional UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` + // Specifies the target ResourceVersion + // +optional + ResourceVersion *string `json:"resourceVersion,omitempty" protobuf:"bytes,2,opt,name=resourceVersion"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -792,6 +855,9 @@ const ( // without the expected return type. The presence of this cause indicates the error may be // due to an intervening proxy or the server software malfunctioning. CauseTypeUnexpectedServerResponse CauseType = "UnexpectedServerResponse" + // FieldManagerConflict is used to report when another client claims to manage this field, + // It should only be returned for a request using server-side apply. + CauseTypeFieldManagerConflict CauseType = "FieldManagerConflict" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -906,6 +972,15 @@ type APIResource struct { ShortNames []string `json:"shortNames,omitempty" protobuf:"bytes,5,rep,name=shortNames"` // categories is a list of the grouped resources this resource belongs to (e.g. 'all') Categories []string `json:"categories,omitempty" protobuf:"bytes,7,rep,name=categories"` + // The hash value of the storage version, the version this resource is + // converted to when written to the data store. Value must be treated + // as opaque by clients. Only equality comparison on the value is valid. + // This is an alpha feature and may change or be removed in the future. + // The field is populated by the apiserver only if the + // StorageVersionHash feature gate is enabled. + // This field will remain optional even if it graduates. + // +optional + StorageVersionHash string `json:"storageVersionHash,omitempty" protobuf:"bytes,10,opt,name=storageVersionHash"` } // Verbs masks the value so protobuf can generate @@ -1007,3 +1082,49 @@ const ( LabelSelectorOpExists LabelSelectorOperator = "Exists" LabelSelectorOpDoesNotExist LabelSelectorOperator = "DoesNotExist" ) + +// ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource +// that the fieldset applies to. +type ManagedFieldsEntry struct { + // Manager is an identifier of the workflow managing these fields. + Manager string `json:"manager,omitempty" protobuf:"bytes,1,opt,name=manager"` + // Operation is the type of operation which lead to this ManagedFieldsEntry being created. + // The only valid values for this field are 'Apply' and 'Update'. + Operation ManagedFieldsOperationType `json:"operation,omitempty" protobuf:"bytes,2,opt,name=operation,casttype=ManagedFieldsOperationType"` + // APIVersion defines the version of this resource that this field set + // applies to. The format is "group/version" just like the top-level + // APIVersion field. It is necessary to track the version of a field + // set because it cannot be automatically converted. + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` + // Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply' + // +optional + Time *Time `json:"time,omitempty" protobuf:"bytes,4,opt,name=time"` + // Fields identifies a set of fields. + // +optional + Fields *Fields `json:"fields,omitempty" protobuf:"bytes,5,opt,name=fields,casttype=Fields"` +} + +// ManagedFieldsOperationType is the type of operation which lead to a ManagedFieldsEntry being created. +type ManagedFieldsOperationType string + +const ( + ManagedFieldsOperationApply ManagedFieldsOperationType = "Apply" + ManagedFieldsOperationUpdate ManagedFieldsOperationType = "Update" +) + +// Fields stores a set of fields in a data structure like a Trie. +// To understand how this is used, see: https://github.com/kubernetes-sigs/structured-merge-diff +type Fields struct { + // Map stores a set of fields in a data structure like a Trie. + // + // Each key is either a '.' representing the field itself, and will always map to an empty set, + // or a string representing a sub-field or item. The string will follow one of these four formats: + // 'f:', where is the name of a field in a struct, or key in a map + // 'v:', where is the exact json formatted value of a list item + // 'i:', where is position of a item in a list + // 'k:', where is a map of a list item's key fields to their unique values + // If a key maps to an empty Fields value, the field that key represents is part of the set. + // + // The exact format is defined in k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal + Map map[string]Fields `json:",inline" protobuf:"bytes,1,rep,name=map"` +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go index fc138e75aa9..75ac693fe48 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go @@ -47,6 +47,9 @@ func NestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{ var val interface{} = obj for i, field := range fields { + if val == nil { + return nil, false, nil + } if m, ok := val.(map[string]interface{}); ok { val, ok = m[field] if !ok { diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go index 781469ec265..1eaa85804f3 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go @@ -143,13 +143,20 @@ func (u *Unstructured) setNestedField(value interface{}, fields ...string) { SetNestedField(u.Object, value, fields...) } -func (u *Unstructured) setNestedSlice(value []string, fields ...string) { +func (u *Unstructured) setNestedStringSlice(value []string, fields ...string) { if u.Object == nil { u.Object = make(map[string]interface{}) } SetNestedStringSlice(u.Object, value, fields...) } +func (u *Unstructured) setNestedSlice(value []interface{}, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + SetNestedSlice(u.Object, value, fields...) +} + func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) { if u.Object == nil { u.Object = make(map[string]interface{}) @@ -436,7 +443,7 @@ func (u *Unstructured) SetFinalizers(finalizers []string) { RemoveNestedField(u.Object, "metadata", "finalizers") return } - u.setNestedSlice(finalizers, "metadata", "finalizers") + u.setNestedStringSlice(finalizers, "metadata", "finalizers") } func (u *Unstructured) GetClusterName() string { @@ -450,3 +457,42 @@ func (u *Unstructured) SetClusterName(clusterName string) { } u.setNestedField(clusterName, "metadata", "clusterName") } + +func (u *Unstructured) GetManagedFields() []metav1.ManagedFieldsEntry { + items, found, err := NestedSlice(u.Object, "metadata", "managedFields") + if !found || err != nil { + return nil + } + managedFields := []metav1.ManagedFieldsEntry{} + for _, item := range items { + m, ok := item.(map[string]interface{}) + if !ok { + utilruntime.HandleError(fmt.Errorf("unable to retrieve managedFields for object, item %v is not a map", item)) + return nil + } + out := metav1.ManagedFieldsEntry{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(m, &out); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to retrieve managedFields for object: %v", err)) + return nil + } + managedFields = append(managedFields, out) + } + return managedFields +} + +func (u *Unstructured) SetManagedFields(managedFields []metav1.ManagedFieldsEntry) { + if managedFields == nil { + RemoveNestedField(u.Object, "metadata", "managedFields") + return + } + items := []interface{}{} + for _, managedFieldsEntry := range managedFields { + out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&managedFieldsEntry) + if err != nil { + utilruntime.HandleError(fmt.Errorf("unable to set managedFields for object: %v", err)) + return + } + items = append(items, out) + } + u.setNestedSlice(items, "metadata", "managedFields") +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/BUILD b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/BUILD index ea9cc91b057..822d81a6ed3 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/BUILD @@ -10,7 +10,11 @@ go_test( name = "go_default_test", srcs = ["validation_test.go"], embed = [":go_default_library"], - deps = ["//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + ], ) go_library( @@ -20,6 +24,7 @@ go_library( importpath = "k8s.io/apimachinery/pkg/apis/meta/v1/validation", deps = [ "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go index 81f86fb3068..717fde95afd 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go @@ -17,7 +17,11 @@ limitations under the License. package validation import ( + "fmt" + "unicode" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" @@ -85,21 +89,60 @@ func ValidateDeleteOptions(options *metav1.DeleteOptions) field.ErrorList { *options.PropagationPolicy != metav1.DeletePropagationOrphan { allErrs = append(allErrs, field.NotSupported(field.NewPath("propagationPolicy"), options.PropagationPolicy, []string{string(metav1.DeletePropagationForeground), string(metav1.DeletePropagationBackground), string(metav1.DeletePropagationOrphan), "nil"})) } - allErrs = append(allErrs, validateDryRun(field.NewPath("dryRun"), options.DryRun)...) + allErrs = append(allErrs, ValidateDryRun(field.NewPath("dryRun"), options.DryRun)...) return allErrs } func ValidateCreateOptions(options *metav1.CreateOptions) field.ErrorList { - return validateDryRun(field.NewPath("dryRun"), options.DryRun) + return append( + ValidateFieldManager(options.FieldManager, field.NewPath("fieldManager")), + ValidateDryRun(field.NewPath("dryRun"), options.DryRun)..., + ) } func ValidateUpdateOptions(options *metav1.UpdateOptions) field.ErrorList { - return validateDryRun(field.NewPath("dryRun"), options.DryRun) + return append( + ValidateFieldManager(options.FieldManager, field.NewPath("fieldManager")), + ValidateDryRun(field.NewPath("dryRun"), options.DryRun)..., + ) +} + +func ValidatePatchOptions(options *metav1.PatchOptions, patchType types.PatchType) field.ErrorList { + allErrs := field.ErrorList{} + if options.Force != nil { + allErrs = append(allErrs, field.Forbidden(field.NewPath("force"), "may not be specified for non-apply patch")) + } + allErrs = append(allErrs, ValidateFieldManager(options.FieldManager, field.NewPath("fieldManager"))...) + allErrs = append(allErrs, ValidateDryRun(field.NewPath("dryRun"), options.DryRun)...) + return allErrs +} + +var FieldManagerMaxLength = 128 + +// ValidateFieldManager valides that the fieldManager is the proper length and +// only has printable characters. +func ValidateFieldManager(fieldManager string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // the field can not be set as a `*string`, so a empty string ("") is + // considered as not set and is defaulted by the rest of the process + // (unless apply is used, in which case it is required). + if len(fieldManager) > FieldManagerMaxLength { + allErrs = append(allErrs, field.TooLong(fldPath, fieldManager, FieldManagerMaxLength)) + } + // Verify that all characters are printable. + for i, r := range fieldManager { + if !unicode.IsPrint(r) { + allErrs = append(allErrs, field.Invalid(fldPath, fieldManager, fmt.Sprintf("invalid character %#U (at position %d)", r, i))) + } + } + + return allErrs } var allowedDryRunValues = sets.NewString(metav1.DryRunAll) -func validateDryRun(fldPath *field.Path, dryRun []string) field.ErrorList { +// ValidateDryRun validates that a dryRun query param only contains allowed values. +func ValidateDryRun(fldPath *field.Path, dryRun []string) field.ErrorList { allErrs := field.ErrorList{} if !allowedDryRunValues.HasAll(dryRun...) { allErrs = append(allErrs, field.NotSupported(fldPath, dryRun, allowedDryRunValues.List())) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go index 10845993e26..68498b8d209 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go @@ -312,6 +312,29 @@ func (in *ExportOptions) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Fields) DeepCopyInto(out *Fields) { + *out = *in + if in.Map != nil { + in, out := &in.Map, &out.Map + *out = make(map[string]Fields, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Fields. +func (in *Fields) DeepCopy() *Fields { + if in == nil { + return nil + } + out := new(Fields) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GetOptions) DeepCopyInto(out *GetOptions) { *out = *in @@ -624,6 +647,31 @@ func (in *ListOptions) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ManagedFieldsEntry) DeepCopyInto(out *ManagedFieldsEntry) { + *out = *in + if in.Time != nil { + in, out := &in.Time, &out.Time + *out = (*in).DeepCopy() + } + if in.Fields != nil { + in, out := &in.Fields, &out.Fields + *out = new(Fields) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedFieldsEntry. +func (in *ManagedFieldsEntry) DeepCopy() *ManagedFieldsEntry { + if in == nil { + return nil + } + out := new(ManagedFieldsEntry) + in.DeepCopyInto(out) + return out +} + // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MicroTime. func (in *MicroTime) DeepCopy() *MicroTime { if in == nil { @@ -678,6 +726,13 @@ func (in *ObjectMeta) DeepCopyInto(out *ObjectMeta) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.ManagedFields != nil { + in, out := &in.ManagedFields, &out.ManagedFields + *out = make([]ManagedFieldsEntry, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -733,6 +788,41 @@ func (in *Patch) DeepCopy() *Patch { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PatchOptions) DeepCopyInto(out *PatchOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Force != nil { + in, out := &in.Force, &out.Force + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchOptions. +func (in *PatchOptions) DeepCopy() *PatchOptions { + if in == nil { + return nil + } + out := new(PatchOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PatchOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Preconditions) DeepCopyInto(out *Preconditions) { *out = *in @@ -741,6 +831,11 @@ func (in *Preconditions) DeepCopyInto(out *Preconditions) { *out = new(types.UID) **out = **in } + if in.ResourceVersion != nil { + in, out := &in.ResourceVersion, &out.ResourceVersion + *out = new(string) + **out = **in + } return } diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go index 46b0e133c37..20c9d2ec737 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go @@ -20,4 +20,4 @@ limitations under the License. // +groupName=meta.k8s.io -package v1beta1 +package v1beta1 // import "k8s.io/apimachinery/pkg/apis/meta/v1beta1" diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/BUILD b/vendor/k8s.io/apimachinery/pkg/conversion/BUILD index 29a2adee0da..6b5f68b39c0 100644 --- a/vendor/k8s.io/apimachinery/pkg/conversion/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/conversion/BUILD @@ -45,6 +45,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/apimachinery/pkg/conversion/queryparams:all-srcs", + "//staging/src/k8s.io/apimachinery/pkg/conversion/unstructured:all-srcs", ], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go index dff56e03401..80343081f52 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go @@ -746,7 +746,7 @@ func isZero(v reflect.Value) bool { func structToUnstructured(sv, dv reflect.Value) error { st, dt := sv.Type(), dv.Type() if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 { - dv.Set(reflect.MakeMap(mapStringInterfaceType)) + dv.Set(reflect.MakeMapWithSize(mapStringInterfaceType, st.NumField())) dv = dv.Elem() dt = dv.Type() } diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/BUILD b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/BUILD index 785dc5fcfe4..9ba9d16f5a4 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/BUILD @@ -8,12 +8,17 @@ load( go_test( name = "go_default_test", - srcs = ["versioning_test.go"], + srcs = [ + "versioning_test.go", + "versioning_unstructured_test.go", + ], embed = [":go_default_library"], deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", ], ) diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/types.go b/vendor/k8s.io/apimachinery/pkg/runtime/types.go index e4515d8ed00..1f7f662e075 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/types.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/types.go @@ -42,6 +42,7 @@ type TypeMeta struct { const ( ContentTypeJSON string = "application/json" + ContentTypeYAML string = "application/yaml" ) // RawExtension is used to hold extensions in external versions. diff --git a/vendor/k8s.io/apimachinery/pkg/util/errors/BUILD b/vendor/k8s.io/apimachinery/pkg/util/errors/BUILD index c1de3109a4d..25d90f31cc1 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/errors/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/util/errors/BUILD @@ -20,6 +20,7 @@ go_library( ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/errors", importpath = "k8s.io/apimachinery/pkg/util/errors", + deps = ["//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library"], ) filegroup( diff --git a/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go index 88e937679da..62a73f34ebe 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go @@ -19,6 +19,8 @@ package errors import ( "errors" "fmt" + + "k8s.io/apimachinery/pkg/util/sets" ) // MessageCountMap contains occurrence for each error message. @@ -67,12 +69,38 @@ func (agg aggregate) Error() string { if len(agg) == 1 { return agg[0].Error() } - result := fmt.Sprintf("[%s", agg[0].Error()) - for i := 1; i < len(agg); i++ { - result += fmt.Sprintf(", %s", agg[i].Error()) + seenerrs := sets.NewString() + result := "" + agg.visit(func(err error) { + msg := err.Error() + if seenerrs.Has(msg) { + return + } + seenerrs.Insert(msg) + if len(seenerrs) > 1 { + result += ", " + } + result += msg + }) + if len(seenerrs) == 1 { + return result + } + return "[" + result + "]" +} + +func (agg aggregate) visit(f func(err error)) { + for _, err := range agg { + switch err := err.(type) { + case aggregate: + err.visit(f) + case Aggregate: + for _, nestedErr := range err.Errors() { + f(nestedErr) + } + default: + f(err) + } } - result += "]" - return result } // Errors is part of the Aggregate interface. diff --git a/vendor/k8s.io/apimachinery/pkg/util/initialization/initialization.go b/vendor/k8s.io/apimachinery/pkg/util/initialization/initialization.go deleted file mode 100644 index 341b5955748..00000000000 --- a/vendor/k8s.io/apimachinery/pkg/util/initialization/initialization.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package initialization - -import ( - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -// IsInitialized returns if the initializers indicates means initialized. -func IsInitialized(initializers *metav1.Initializers) bool { - if initializers == nil { - return true - } - // Persisted objects will never be in this state. The initializer admission - // plugin will override metadata.initializers to nil. If the initializer - // admissio plugin is disabled, the generic registry always set - // metadata.initializers to nil. However, this function - // might be called before the object persisted, thus the check. - if len(initializers.Pending) == 0 && initializers.Result == nil { - return true - } - return false -} - -// IsObjectInitialized returns if the object is initialized. -func IsObjectInitialized(obj runtime.Object) (bool, error) { - accessor, err := meta.Accessor(obj) - if err != nil { - return false, err - } - return IsInitialized(accessor.GetInitializers()), nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/util/mergepatch/OWNERS b/vendor/k8s.io/apimachinery/pkg/util/mergepatch/OWNERS index 8e8d9fce8ef..3f72c69ba39 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/mergepatch/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/util/mergepatch/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pwittrock reviewers: diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go index 155667cdfc7..078f00d9b97 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/net/http.go +++ b/vendor/k8s.io/apimachinery/pkg/util/net/http.go @@ -68,14 +68,17 @@ func IsProbableEOF(err error) bool { if uerr, ok := err.(*url.Error); ok { err = uerr.Err } + msg := err.Error() switch { case err == io.EOF: return true - case err.Error() == "http: can't write HTTP request on broken connection": + case msg == "http: can't write HTTP request on broken connection": return true - case strings.Contains(err.Error(), "connection reset by peer"): + case strings.Contains(msg, "http2: server sent GOAWAY and closed the connection"): return true - case strings.Contains(strings.ToLower(err.Error()), "use of closed network connection"): + case strings.Contains(msg, "connection reset by peer"): + return true + case strings.Contains(strings.ToLower(msg), "use of closed network connection"): return true } return false diff --git a/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go b/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go index 3c8e09399f5..c3591db40d4 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go +++ b/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go @@ -230,7 +230,34 @@ func (h *UpgradeAwareHandler) ServeHTTP(w http.ResponseWriter, req *http.Request proxy := httputil.NewSingleHostReverseProxy(&url.URL{Scheme: h.Location.Scheme, Host: h.Location.Host}) proxy.Transport = h.Transport proxy.FlushInterval = h.FlushInterval - proxy.ServeHTTP(w, newReq) + proxy.ServeHTTP(maybeWrapFlushHeadersWriter(w), newReq) +} + +// maybeWrapFlushHeadersWriter wraps the given writer to force flushing headers prior to writing the response body. +// if the given writer does not support http.Flusher, http.Hijacker, and http.CloseNotifier, the original writer is returned. +// TODO(liggitt): drop this once https://github.com/golang/go/issues/31125 is fixed +func maybeWrapFlushHeadersWriter(w http.ResponseWriter) http.ResponseWriter { + flusher, isFlusher := w.(http.Flusher) + hijacker, isHijacker := w.(http.Hijacker) + closeNotifier, isCloseNotifier := w.(http.CloseNotifier) + // flusher, hijacker, and closeNotifier are all used by the ReverseProxy implementation. + // if the given writer can't support all three, return the original writer. + if !isFlusher || !isHijacker || !isCloseNotifier { + return w + } + return &flushHeadersWriter{w, flusher, hijacker, closeNotifier} +} + +type flushHeadersWriter struct { + http.ResponseWriter + http.Flusher + http.Hijacker + http.CloseNotifier +} + +func (w *flushHeadersWriter) WriteHeader(code int) { + w.ResponseWriter.WriteHeader(code) + w.Flusher.Flush() } // tryUpgrade returns true if the request was handled. diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/BUILD b/vendor/k8s.io/apimachinery/pkg/util/sets/BUILD index 76ef7263806..50a46453c82 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/sets/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/util/sets/BUILD @@ -1,6 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load("@io_kubernetes_build//defs:go.bzl", "go_genrule") +load("@io_k8s_repo_infra//defs:go.bzl", "go_genrule") load( "@io_bazel_rules_go//go:def.bzl", "go_library", diff --git a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS index dbbe0de4ca3..cfee199fa08 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS +++ b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pwittrock - mengqiy diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go b/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go index e0d1715420e..2dd99992dca 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go +++ b/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go @@ -87,6 +87,8 @@ func IsFullyQualifiedName(fldPath *field.Path, name string) field.ErrorList { const labelValueFmt string = "(" + qualifiedNameFmt + ")?" const labelValueErrMsg string = "a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character" + +// LabelValueMaxLength is a label's max length const LabelValueMaxLength int = 63 var labelValueRegexp = regexp.MustCompile("^" + labelValueFmt + "$") @@ -107,6 +109,8 @@ func IsValidLabelValue(value string) []string { const dns1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" const dns1123LabelErrMsg string = "a DNS-1123 label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character" + +// DNS1123LabelMaxLength is a label's max length in DNS (RFC 1123) const DNS1123LabelMaxLength int = 63 var dns1123LabelRegexp = regexp.MustCompile("^" + dns1123LabelFmt + "$") @@ -126,6 +130,8 @@ func IsDNS1123Label(value string) []string { const dns1123SubdomainFmt string = dns1123LabelFmt + "(\\." + dns1123LabelFmt + ")*" const dns1123SubdomainErrorMsg string = "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character" + +// DNS1123SubdomainMaxLength is a subdomain's max length in DNS (RFC 1123) const DNS1123SubdomainMaxLength int = 253 var dns1123SubdomainRegexp = regexp.MustCompile("^" + dns1123SubdomainFmt + "$") @@ -145,6 +151,8 @@ func IsDNS1123Subdomain(value string) []string { const dns1035LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?" const dns1035LabelErrMsg string = "a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character" + +// DNS1035LabelMaxLength is a label's max length in DNS (RFC 1035) const DNS1035LabelMaxLength int = 63 var dns1035LabelRegexp = regexp.MustCompile("^" + dns1035LabelFmt + "$") @@ -282,6 +290,7 @@ const percentErrMsg string = "a valid percent string must be a numeric string fo var percentRegexp = regexp.MustCompile("^" + percentFmt + "$") +// IsValidPercent checks that string is in the form of a percentage func IsValidPercent(percent string) []string { if !percentRegexp.MatchString(percent) { return []string{RegexError(percentErrMsg, percentFmt, "1%", "93%")} @@ -391,13 +400,13 @@ func hasChDirPrefix(value string) []string { return errs } -// IsSocketAddr checks that a string conforms is a valid socket address +// IsValidSocketAddr checks that string represents a valid socket address // as defined in RFC 789. (e.g 0.0.0.0:10254 or [::]:10254)) func IsValidSocketAddr(value string) []string { var errs []string ip, port, err := net.SplitHostPort(value) if err != nil { - return append(errs, "must be a valid socket address format, (e.g. 0.0.0.0:10254 or [::]:10254)") + errs = append(errs, "must be a valid socket address format, (e.g. 0.0.0.0:10254 or [::]:10254)") return errs } portInt, _ := strconv.Atoi(port) diff --git a/vendor/k8s.io/apimachinery/pkg/util/version/version.go b/vendor/k8s.io/apimachinery/pkg/util/version/version.go index 24724e50ac5..9bc928a4e82 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/version/version.go +++ b/vendor/k8s.io/apimachinery/pkg/util/version/version.go @@ -154,6 +154,35 @@ func (v *Version) Components() []uint { return v.components } +// WithMajor returns copy of the version object with requested major number +func (v *Version) WithMajor(major uint) *Version { + result := *v + result.components = []uint{major, v.Minor(), v.Patch()} + return &result +} + +// WithMinor returns copy of the version object with requested minor number +func (v *Version) WithMinor(minor uint) *Version { + result := *v + result.components = []uint{v.Major(), minor, v.Patch()} + return &result +} + +// WithPatch returns copy of the version object with requested patch number +func (v *Version) WithPatch(patch uint) *Version { + result := *v + result.components = []uint{v.Major(), v.Minor(), patch} + return &result +} + +// WithPreRelease returns copy of the version object with requested prerelease +func (v *Version) WithPreRelease(preRelease string) *Version { + result := *v + result.components = []uint{v.Major(), v.Minor(), v.Patch()} + result.preRelease = preRelease + return &result +} + // String converts a Version back to a string; note that for versions parsed with // ParseGeneric, this will not include the trailing uninterpreted portion of the version // number. diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go index ca61168cd4a..204177563b0 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go +++ b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go @@ -88,6 +88,15 @@ func Until(f func(), period time.Duration, stopCh <-chan struct{}) { JitterUntil(f, period, 0.0, true, stopCh) } +// UntilWithContext loops until context is done, running f every period. +// +// UntilWithContext is syntactic sugar on top of JitterUntilWithContext +// with zero jitter factor and with sliding = true (which means the timer +// for period starts after the f completes). +func UntilWithContext(ctx context.Context, f func(context.Context), period time.Duration) { + JitterUntilWithContext(ctx, f, period, 0.0, true) +} + // NonSlidingUntil loops until stop channel is closed, running f every // period. // @@ -98,6 +107,16 @@ func NonSlidingUntil(f func(), period time.Duration, stopCh <-chan struct{}) { JitterUntil(f, period, 0.0, false, stopCh) } +// NonSlidingUntilWithContext loops until context is done, running f every +// period. +// +// NonSlidingUntilWithContext is syntactic sugar on top of JitterUntilWithContext +// with zero jitter factor, with sliding = false (meaning the timer for period +// starts at the same time as the function starts). +func NonSlidingUntilWithContext(ctx context.Context, f func(context.Context), period time.Duration) { + JitterUntilWithContext(ctx, f, period, 0.0, false) +} + // JitterUntil loops until stop channel is closed, running f every period. // // If jitterFactor is positive, the period is jittered before every run of f. @@ -151,6 +170,19 @@ func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding b } } +// JitterUntilWithContext loops until context is done, running f every period. +// +// If jitterFactor is positive, the period is jittered before every run of f. +// If jitterFactor is not positive, the period is unchanged and not jittered. +// +// If sliding is true, the period is computed after f runs. If it is false then +// period includes the runtime for f. +// +// Cancel context to stop. f may not be invoked if context is already expired. +func JitterUntilWithContext(ctx context.Context, f func(context.Context), period time.Duration, jitterFactor float64, sliding bool) { + JitterUntil(func() { f(ctx) }, period, jitterFactor, sliding, ctx.Done()) +} + // Jitter returns a time.Duration between duration and duration + maxFactor * // duration. // @@ -173,10 +205,49 @@ type ConditionFunc func() (done bool, err error) // Backoff holds parameters applied to a Backoff function. type Backoff struct { - Duration time.Duration // the base duration - Factor float64 // Duration is multiplied by factor each iteration - Jitter float64 // The amount of jitter applied each iteration - Steps int // Exit with error after this many steps + // The initial duration. + Duration time.Duration + // Duration is multiplied by factor each iteration. Must be greater + // than or equal to zero. + Factor float64 + // The amount of jitter applied each iteration. Jitter is applied after + // cap. + Jitter float64 + // The number of steps before duration stops changing. If zero, initial + // duration is always used. Used for exponential backoff in combination + // with Factor. + Steps int + // The returned duration will never be greater than cap *before* jitter + // is applied. The actual maximum cap is `cap * (1.0 + jitter)`. + Cap time.Duration +} + +// Step returns the next interval in the exponential backoff. This method +// will mutate the provided backoff. +func (b *Backoff) Step() time.Duration { + if b.Steps < 1 { + if b.Jitter > 0 { + return Jitter(b.Duration, b.Jitter) + } + return b.Duration + } + b.Steps-- + + duration := b.Duration + + // calculate the next step + if b.Factor != 0 { + b.Duration = time.Duration(float64(b.Duration) * b.Factor) + if b.Cap > 0 && b.Duration > b.Cap { + b.Duration = b.Cap + b.Steps = 0 + } + } + + if b.Jitter > 0 { + duration = Jitter(duration, b.Jitter) + } + return duration } // ExponentialBackoff repeats a condition check with exponential backoff. @@ -190,19 +261,14 @@ type Backoff struct { // If the condition never returns true, ErrWaitTimeout is returned. All other // errors terminate immediately. func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { - duration := backoff.Duration - for i := 0; i < backoff.Steps; i++ { - if i != 0 { - adjusted := duration - if backoff.Jitter > 0.0 { - adjusted = Jitter(duration, backoff.Jitter) - } - time.Sleep(adjusted) - duration = time.Duration(float64(duration) * backoff.Factor) - } + for backoff.Steps > 0 { if ok, err := condition(); err != nil || ok { return err } + if backoff.Steps == 1 { + break + } + time.Sleep(backoff.Step()) } return ErrWaitTimeout } @@ -317,29 +383,39 @@ type WaitFunc func(done <-chan struct{}) <-chan struct{} // WaitFor continually checks 'fn' as driven by 'wait'. // // WaitFor gets a channel from 'wait()'', and then invokes 'fn' once for every value -// placed on the channel and once more when the channel is closed. +// placed on the channel and once more when the channel is closed. If the channel is closed +// and 'fn' returns false without error, WaitFor returns ErrWaitTimeout. // -// If 'fn' returns an error the loop ends and that error is returned, and if +// If 'fn' returns an error the loop ends and that error is returned. If // 'fn' returns true the loop ends and nil is returned. // -// ErrWaitTimeout will be returned if the channel is closed without fn ever +// ErrWaitTimeout will be returned if the 'done' channel is closed without fn ever // returning true. +// +// When the done channel is closed, because the golang `select` statement is +// "uniform pseudo-random", the `fn` might still run one or multiple time, +// though eventually `WaitFor` will return. func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { - c := wait(done) + stopCh := make(chan struct{}) + defer close(stopCh) + c := wait(stopCh) for { - _, open := <-c - ok, err := fn() - if err != nil { - return err - } - if ok { - return nil - } - if !open { - break + select { + case _, open := <-c: + ok, err := fn() + if err != nil { + return err + } + if ok { + return nil + } + if !open { + return ErrWaitTimeout + } + case <-done: + return ErrWaitTimeout } } - return ErrWaitTimeout } // poller returns a WaitFunc that will send to the channel every interval until diff --git a/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go b/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go index 63d735a804c..a9a3853ac3d 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go +++ b/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go @@ -217,11 +217,9 @@ func (d *YAMLOrJSONDecoder) Decode(into interface{}) error { if d.decoder == nil { buffer, origData, isJSON := GuessJSONStream(d.r, d.bufferSize) if isJSON { - klog.V(4).Infof("decoding stream as JSON") d.decoder = json.NewDecoder(buffer) d.rawData = origData } else { - klog.V(4).Infof("decoding stream as YAML") d.decoder = NewYAMLToJSONDecoder(buffer) } } diff --git a/vendor/k8s.io/apimachinery/third_party/forked/golang/json/OWNERS b/vendor/k8s.io/apimachinery/third_party/forked/golang/json/OWNERS index 8e8d9fce8ef..3f72c69ba39 100644 --- a/vendor/k8s.io/apimachinery/third_party/forked/golang/json/OWNERS +++ b/vendor/k8s.io/apimachinery/third_party/forked/golang/json/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pwittrock reviewers: diff --git a/vendor/k8s.io/apiserver/BUILD b/vendor/k8s.io/apiserver/BUILD new file mode 100644 index 00000000000..9b457fb28ba --- /dev/null +++ b/vendor/k8s.io/apiserver/BUILD @@ -0,0 +1,56 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/apiserver/pkg/admission:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/apis/apiserver:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/apis/audit:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/apis/config:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/apis/example:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/apis/example2:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/audit:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/group:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/anonymous:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/bearertoken:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/headerrequest:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/union:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/websocket:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/request/x509:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/token/cache:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/token/tokenfile:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/token/union:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authentication/user:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authorization/authorizerfactory:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authorization/path:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/authorization/union:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/endpoints:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/features:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/registry:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/server:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/storage:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/dryrun:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/feature:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/flushwriter:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/openapi:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/proxy:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/term:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/webhook:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/util/wsstream:all-srcs", + "//staging/src/k8s.io/apiserver/plugin/pkg/audit:all-srcs", + "//staging/src/k8s.io/apiserver/plugin/pkg/authenticator:all-srcs", + "//staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/apiserver/CONTRIBUTING.md b/vendor/k8s.io/apiserver/CONTRIBUTING.md index 94a28899367..511739f5992 100644 --- a/vendor/k8s.io/apiserver/CONTRIBUTING.md +++ b/vendor/k8s.io/apiserver/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/apiserver](https://git.k8s.io/kubernetes/staging/src/k8s.io/apiserver) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/apiserver/OWNERS b/vendor/k8s.io/apiserver/OWNERS index 9617c277817..6f69285eab4 100644 --- a/vendor/k8s.io/apiserver/OWNERS +++ b/vendor/k8s.io/apiserver/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - lavalamp - smarterclayton @@ -17,6 +19,8 @@ reviewers: - enj - hzxuzhonghu - CaoShuFeng +- jennybuckley +- apelisse labels: - sig/api-machinery - area/apiserver diff --git a/vendor/k8s.io/apiserver/README.md b/vendor/k8s.io/apiserver/README.md index 90160ce911e..7a8e78d053f 100644 --- a/vendor/k8s.io/apiserver/README.md +++ b/vendor/k8s.io/apiserver/README.md @@ -5,7 +5,7 @@ Generic library for building a Kubernetes aggregated API server. ## Purpose -This library contains code to create Kubernetes aggregation server complete with delegated authentication and authorization, +This library contains code to create Kubernetes aggregation server complete with delegated authentication and authorization, `kubectl` compatible discovery information, optional admission chain, and versioned types. It's first consumers are `k8s.io/kubernetes`, `k8s.io/kube-aggregator`, and `github.com/kubernetes-incubator/service-catalog`. diff --git a/vendor/k8s.io/apiserver/SECURITY_CONTACTS b/vendor/k8s.io/apiserver/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/apiserver/SECURITY_CONTACTS +++ b/vendor/k8s.io/apiserver/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/apiserver/pkg/admission/BUILD b/vendor/k8s.io/apiserver/pkg/admission/BUILD index e45f33e1ecf..6a37d463e39 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/BUILD @@ -42,6 +42,7 @@ go_library( "handler.go", "interfaces.go", "plugins.go", + "util.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/admission", importpath = "k8s.io/apiserver/pkg/admission", @@ -78,7 +79,6 @@ filegroup( "//staging/src/k8s.io/apiserver/pkg/admission/configuration:all-srcs", "//staging/src/k8s.io/apiserver/pkg/admission/initializer:all-srcs", "//staging/src/k8s.io/apiserver/pkg/admission/metrics:all-srcs", - "//staging/src/k8s.io/apiserver/pkg/admission/plugin/initialization:all-srcs", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:all-srcs", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config:all-srcs", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/errors:all-srcs", diff --git a/vendor/k8s.io/apiserver/pkg/admission/audit.go b/vendor/k8s.io/apiserver/pkg/admission/audit.go index 13d86b33b96..d81622b9217 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/audit.go +++ b/vendor/k8s.io/apiserver/pkg/admission/audit.go @@ -44,7 +44,7 @@ func WithAudit(i Interface, ae *auditinternal.Event) Interface { return &auditHandler{i, ae} } -func (handler auditHandler) Admit(a Attributes) error { +func (handler auditHandler) Admit(a Attributes, o ObjectInterfaces) error { if !handler.Interface.Handles(a.GetOperation()) { return nil } @@ -53,13 +53,13 @@ func (handler auditHandler) Admit(a Attributes) error { } var err error if mutator, ok := handler.Interface.(MutationInterface); ok { - err = mutator.Admit(a) + err = mutator.Admit(a, o) handler.logAnnotations(a) } return err } -func (handler auditHandler) Validate(a Attributes) error { +func (handler auditHandler) Validate(a Attributes, o ObjectInterfaces) error { if !handler.Interface.Handles(a.GetOperation()) { return nil } @@ -68,7 +68,7 @@ func (handler auditHandler) Validate(a Attributes) error { } var err error if validator, ok := handler.Interface.(ValidationInterface); ok { - err = validator.Validate(a) + err = validator.Validate(a, o) handler.logAnnotations(a) } return err diff --git a/vendor/k8s.io/apiserver/pkg/admission/chain.go b/vendor/k8s.io/apiserver/pkg/admission/chain.go index 011641ff065..37405aeaf04 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/chain.go +++ b/vendor/k8s.io/apiserver/pkg/admission/chain.go @@ -26,13 +26,13 @@ func NewChainHandler(handlers ...Interface) chainAdmissionHandler { } // Admit performs an admission control check using a chain of handlers, and returns immediately on first error -func (admissionHandler chainAdmissionHandler) Admit(a Attributes) error { +func (admissionHandler chainAdmissionHandler) Admit(a Attributes, o ObjectInterfaces) error { for _, handler := range admissionHandler { if !handler.Handles(a.GetOperation()) { continue } if mutator, ok := handler.(MutationInterface); ok { - err := mutator.Admit(a) + err := mutator.Admit(a, o) if err != nil { return err } @@ -42,13 +42,13 @@ func (admissionHandler chainAdmissionHandler) Admit(a Attributes) error { } // Validate performs an admission control check using a chain of handlers, and returns immediately on first error -func (admissionHandler chainAdmissionHandler) Validate(a Attributes) error { +func (admissionHandler chainAdmissionHandler) Validate(a Attributes, o ObjectInterfaces) error { for _, handler := range admissionHandler { if !handler.Handles(a.GetOperation()) { continue } if validator, ok := handler.(ValidationInterface); ok { - err := validator.Validate(a) + err := validator.Validate(a, o) if err != nil { return err } diff --git a/vendor/k8s.io/apiserver/pkg/admission/config.go b/vendor/k8s.io/apiserver/pkg/admission/config.go index ffda2f3262c..b05f40f07d8 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/config.go +++ b/vendor/k8s.io/apiserver/pkg/admission/config.go @@ -87,7 +87,6 @@ func ReadAdmissionConfiguration(pluginNames []string, configFilePath string, con } return configProvider{ config: decodedConfig, - scheme: configScheme, }, nil } // we got an error where the decode wasn't related to a missing type @@ -127,13 +126,11 @@ func ReadAdmissionConfiguration(pluginNames []string, configFilePath string, con } return configProvider{ config: internalConfig, - scheme: configScheme, }, nil } type configProvider struct { config *apiserver.AdmissionConfiguration - scheme *runtime.Scheme } // GetAdmissionPluginConfigurationFor returns a reader that holds the admission plugin configuration. diff --git a/vendor/k8s.io/apiserver/pkg/admission/configuration/BUILD b/vendor/k8s.io/apiserver/pkg/admission/configuration/BUILD index 10136848ecc..34432781415 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/configuration/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/configuration/BUILD @@ -10,18 +10,14 @@ go_test( name = "go_default_test", srcs = [ "configuration_manager_test.go", - "initializer_manager_test.go", "mutating_webhook_manager_test.go", "validating_webhook_manager_test.go", ], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", @@ -32,17 +28,13 @@ go_library( name = "go_default_library", srcs = [ "configuration_manager.go", - "initializer_manager.go", "mutating_webhook_manager.go", "validating_webhook_manager.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/admission/configuration", importpath = "k8s.io/apiserver/pkg/admission/configuration", deps = [ - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", @@ -51,7 +43,6 @@ go_library( "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/listers/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/admission/initializer/BUILD b/vendor/k8s.io/apiserver/pkg/admission/initializer/BUILD index a5de9eee25c..130de6417b8 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/initializer/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/initializer/BUILD @@ -15,7 +15,6 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/admission/initializer", importpath = "k8s.io/apiserver/pkg/admission/initializer", deps = [ - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", @@ -28,7 +27,6 @@ go_test( srcs = ["initializer_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/admission/initializer/initializer.go b/vendor/k8s.io/apiserver/pkg/admission/initializer/initializer.go index abe764bb94d..822885a5e87 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/initializer/initializer.go +++ b/vendor/k8s.io/apiserver/pkg/admission/initializer/initializer.go @@ -17,7 +17,6 @@ limitations under the License. package initializer import ( - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/client-go/informers" @@ -28,7 +27,6 @@ type pluginInitializer struct { externalClient kubernetes.Interface externalInformers informers.SharedInformerFactory authorizer authorizer.Authorizer - scheme *runtime.Scheme } // New creates an instance of admission plugins initializer. @@ -37,13 +35,11 @@ func New( extClientset kubernetes.Interface, extInformers informers.SharedInformerFactory, authz authorizer.Authorizer, - scheme *runtime.Scheme, ) pluginInitializer { return pluginInitializer{ externalClient: extClientset, externalInformers: extInformers, authorizer: authz, - scheme: scheme, } } @@ -61,10 +57,6 @@ func (i pluginInitializer) Initialize(plugin admission.Interface) { if wants, ok := plugin.(WantsAuthorizer); ok { wants.SetAuthorizer(i.authorizer) } - - if wants, ok := plugin.(WantsScheme); ok { - wants.SetScheme(i.scheme) - } } var _ admission.PluginInitializer = pluginInitializer{} diff --git a/vendor/k8s.io/apiserver/pkg/admission/initializer/interfaces.go b/vendor/k8s.io/apiserver/pkg/admission/initializer/interfaces.go index 98a07585406..9bddb7155cd 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/initializer/interfaces.go +++ b/vendor/k8s.io/apiserver/pkg/admission/initializer/interfaces.go @@ -17,7 +17,6 @@ limitations under the License. package initializer import ( - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/client-go/informers" @@ -41,9 +40,3 @@ type WantsAuthorizer interface { SetAuthorizer(authorizer.Authorizer) admission.InitializationValidator } - -// WantsScheme defines a function that accepts runtime.Scheme for admission plugins that need it. -type WantsScheme interface { - SetScheme(*runtime.Scheme) - admission.InitializationValidator -} diff --git a/vendor/k8s.io/apiserver/pkg/admission/interfaces.go b/vendor/k8s.io/apiserver/pkg/admission/interfaces.go index a17c28990ab..866777cc708 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/interfaces.go +++ b/vendor/k8s.io/apiserver/pkg/admission/interfaces.go @@ -62,6 +62,20 @@ type Attributes interface { AddAnnotation(key, value string) error } +// ObjectInterfaces is an interface used by AdmissionController to get object interfaces +// such as Converter or Defaulter. These interfaces are normally coming from Request Scope +// to handle special cases like CRDs. +type ObjectInterfaces interface { + // GetObjectCreater is the ObjectCreator appropriate for the requested object. + GetObjectCreater() runtime.ObjectCreater + // GetObjectTyper is the ObjectTyper appropriate for the requested object. + GetObjectTyper() runtime.ObjectTyper + // GetObjectDefaulter is the ObjectDefaulter appropriate for the requested object. + GetObjectDefaulter() runtime.ObjectDefaulter + // GetObjectConvertor is the ObjectConvertor appropriate for the requested object. + GetObjectConvertor() runtime.ObjectConvertor +} + // privateAnnotationsGetter is a private interface which allows users to get annotations from Attributes. type privateAnnotationsGetter interface { getAnnotations() map[string]string @@ -84,7 +98,7 @@ type MutationInterface interface { Interface // Admit makes an admission decision based on the request attributes - Admit(a Attributes) (err error) + Admit(a Attributes, o ObjectInterfaces) (err error) } // ValidationInterface is an abstract, pluggable interface for Admission Control decisions. @@ -92,7 +106,7 @@ type ValidationInterface interface { Interface // Validate makes an admission decision based on the request attributes. It is NOT allowed to mutate - Validate(a Attributes) (err error) + Validate(a Attributes, o ObjectInterfaces) (err error) } // Operation is the type of resource operation being checked for admission control diff --git a/vendor/k8s.io/apiserver/pkg/admission/metrics/metrics.go b/vendor/k8s.io/apiserver/pkg/admission/metrics/metrics.go index a5ab97a74d5..e445e2abdb4 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/metrics/metrics.go +++ b/vendor/k8s.io/apiserver/pkg/admission/metrics/metrics.go @@ -75,27 +75,27 @@ type pluginHandlerWithMetrics struct { } // Admit performs a mutating admission control check and emit metrics. -func (p pluginHandlerWithMetrics) Admit(a admission.Attributes) error { +func (p pluginHandlerWithMetrics) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { mutatingHandler, ok := p.Interface.(admission.MutationInterface) if !ok { return nil } start := time.Now() - err := mutatingHandler.Admit(a) + err := mutatingHandler.Admit(a, o) p.observer(time.Since(start), err != nil, a, stepAdmit, p.extraLabels...) return err } // Validate performs a non-mutating admission control check and emits metrics. -func (p pluginHandlerWithMetrics) Validate(a admission.Attributes) error { +func (p pluginHandlerWithMetrics) Validate(a admission.Attributes, o admission.ObjectInterfaces) error { validatingHandler, ok := p.Interface.(admission.ValidationInterface) if !ok { return nil } start := time.Now() - err := validatingHandler.Validate(a) + err := validatingHandler.Validate(a, o) p.observer(time.Since(start), err != nil, a, stepValidate, p.extraLabels...) return err } @@ -153,19 +153,31 @@ func (m *AdmissionMetrics) ObserveWebhook(elapsed time.Duration, rejected bool, } type metricSet struct { - latencies *prometheus.HistogramVec - latenciesSummary *prometheus.SummaryVec + latencies *prometheus.HistogramVec + deprecatedLatencies *prometheus.HistogramVec + latenciesSummary *prometheus.SummaryVec + deprecatedLatenciesSummary *prometheus.SummaryVec } func newMetricSet(name string, labels []string, helpTemplate string, hasSummary bool) *metricSet { - var summary *prometheus.SummaryVec + var summary, deprecatedSummary *prometheus.SummaryVec if hasSummary { summary = prometheus.NewSummaryVec( prometheus.SummaryOpts{ Namespace: namespace, Subsystem: subsystem, - Name: fmt.Sprintf("%s_admission_latencies_seconds_summary", name), - Help: fmt.Sprintf(helpTemplate, "latency summary"), + Name: fmt.Sprintf("%s_admission_duration_seconds_summary", name), + Help: fmt.Sprintf(helpTemplate, "latency summary in seconds"), + MaxAge: latencySummaryMaxAge, + }, + labels, + ) + deprecatedSummary = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: fmt.Sprintf("%s_admission_latencies_milliseconds_summary", name), + Help: fmt.Sprintf("(Deprecated) "+helpTemplate, "latency summary in milliseconds"), MaxAge: latencySummaryMaxAge, }, labels, @@ -177,38 +189,62 @@ func newMetricSet(name string, labels []string, helpTemplate string, hasSummary prometheus.HistogramOpts{ Namespace: namespace, Subsystem: subsystem, - Name: fmt.Sprintf("%s_admission_latencies_seconds", name), - Help: fmt.Sprintf(helpTemplate, "latency histogram"), + Name: fmt.Sprintf("%s_admission_duration_seconds", name), + Help: fmt.Sprintf(helpTemplate, "latency histogram in seconds"), + Buckets: latencyBuckets, + }, + labels, + ), + deprecatedLatencies: prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: fmt.Sprintf("%s_admission_latencies_milliseconds", name), + Help: fmt.Sprintf("(Deprecated) "+helpTemplate, "latency histogram in milliseconds"), Buckets: latencyBuckets, }, labels, ), - latenciesSummary: summary, + latenciesSummary: summary, + deprecatedLatenciesSummary: deprecatedSummary, } } // MustRegister registers all the prometheus metrics in the metricSet. func (m *metricSet) mustRegister() { prometheus.MustRegister(m.latencies) + prometheus.MustRegister(m.deprecatedLatencies) if m.latenciesSummary != nil { prometheus.MustRegister(m.latenciesSummary) } + if m.deprecatedLatenciesSummary != nil { + prometheus.MustRegister(m.deprecatedLatenciesSummary) + } } // Reset resets all the prometheus metrics in the metricSet. func (m *metricSet) reset() { m.latencies.Reset() + m.deprecatedLatencies.Reset() if m.latenciesSummary != nil { m.latenciesSummary.Reset() } + if m.deprecatedLatenciesSummary != nil { + m.deprecatedLatenciesSummary.Reset() + } } // Observe records an observed admission event to all metrics in the metricSet. func (m *metricSet) observe(elapsed time.Duration, labels ...string) { + elapsedSeconds := elapsed.Seconds() elapsedMicroseconds := float64(elapsed / time.Microsecond) - m.latencies.WithLabelValues(labels...).Observe(elapsedMicroseconds) + m.latencies.WithLabelValues(labels...).Observe(elapsedSeconds) + m.deprecatedLatencies.WithLabelValues(labels...).Observe(elapsedMicroseconds) if m.latenciesSummary != nil { - m.latenciesSummary.WithLabelValues(labels...).Observe(elapsedMicroseconds) + m.latenciesSummary.WithLabelValues(labels...).Observe(elapsedSeconds) + } + if m.deprecatedLatenciesSummary != nil { + m.deprecatedLatenciesSummary.WithLabelValues(labels...).Observe(elapsedMicroseconds) } } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go index d7bb0215b98..c6517bee31e 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go @@ -73,7 +73,7 @@ var _ = initializer.WantsExternalKubeInformerFactory(&Lifecycle{}) var _ = initializer.WantsExternalKubeClientSet(&Lifecycle{}) // Admit makes an admission decision based on the request attributes -func (l *Lifecycle) Admit(a admission.Attributes) error { +func (l *Lifecycle) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { // prevent deletion of immortal namespaces if a.GetOperation() == admission.Delete && a.GetKind().GroupKind() == v1.SchemeGroupVersion.WithKind("Namespace").GroupKind() && l.immortalNamespaces.Has(a.GetName()) { return errors.NewForbidden(a.GetResource().GroupResource(), a.GetName(), fmt.Errorf("this namespace may not be deleted")) diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/BUILD b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/BUILD index 75883f61354..b8f9bb55274 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/BUILD @@ -50,6 +50,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example2/v1:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/conversion.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/conversion.go index 050c31730fe..11f704f736a 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/conversion.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/conversion.go @@ -17,29 +17,23 @@ limitations under the License. package generic import ( - "fmt" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" ) -// convertor converts objects to the desired version. -type convertor struct { - Scheme *runtime.Scheme -} - // ConvertToGVK converts object to the desired gvk. -func (c *convertor) ConvertToGVK(obj runtime.Object, gvk schema.GroupVersionKind) (runtime.Object, error) { +func ConvertToGVK(obj runtime.Object, gvk schema.GroupVersionKind, o admission.ObjectInterfaces) (runtime.Object, error) { // Unlike other resources, custom resources do not have internal version, so // if obj is a custom resource, it should not need conversion. if obj.GetObjectKind().GroupVersionKind() == gvk { return obj, nil } - out, err := c.Scheme.New(gvk) + out, err := o.GetObjectCreater().New(gvk) if err != nil { return nil, err } - err = c.Scheme.Convert(obj, out, nil) + err = o.GetObjectConvertor().Convert(obj, out, nil) if err != nil { return nil, err } @@ -47,11 +41,3 @@ func (c *convertor) ConvertToGVK(obj runtime.Object, gvk schema.GroupVersionKind out.GetObjectKind().SetGroupVersionKind(gvk) return out, nil } - -// Validate checks if the conversion has a scheme. -func (c *convertor) Validate() error { - if c.Scheme == nil { - return fmt.Errorf("the convertor requires a scheme") - } - return nil -} diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/interfaces.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/interfaces.go index 3a7edb526d6..d998b6b71ec 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/interfaces.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/interfaces.go @@ -41,5 +41,5 @@ type VersionedAttributes struct { // Dispatcher dispatches webhook call to a list of webhooks with admission attributes as argument. type Dispatcher interface { // Dispatch a request to the webhooks using the given webhooks. A non-nil error means the request is rejected. - Dispatch(ctx context.Context, a *VersionedAttributes, hooks []*v1beta1.Webhook) error + Dispatch(ctx context.Context, a *VersionedAttributes, o admission.ObjectInterfaces, hooks []*v1beta1.Webhook) error } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go index 13b898bca9b..c44f67346c2 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go @@ -24,7 +24,6 @@ import ( admissionv1beta1 "k8s.io/api/admission/v1beta1" "k8s.io/api/admissionregistration/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/admission" genericadmissioninit "k8s.io/apiserver/pkg/admission/initializer" "k8s.io/apiserver/pkg/admission/plugin/webhook/config" @@ -43,7 +42,6 @@ type Webhook struct { hookSource Source clientManager *webhook.ClientManager - convertor *convertor namespaceMatcher *namespace.Matcher dispatcher Dispatcher } @@ -79,7 +77,6 @@ func NewWebhook(handler *admission.Handler, configFile io.Reader, sourceFactory Handler: handler, sourceFactory: sourceFactory, clientManager: &cm, - convertor: &convertor{}, namespaceMatcher: &namespace.Matcher{}, dispatcher: dispatcherFactory(&cm), }, nil @@ -98,13 +95,6 @@ func (a *Webhook) SetServiceResolver(sr webhook.ServiceResolver) { a.clientManager.SetServiceResolver(sr) } -// SetScheme sets a serializer(NegotiatedSerializer) which is derived from the scheme -func (a *Webhook) SetScheme(scheme *runtime.Scheme) { - if scheme != nil { - a.convertor.Scheme = scheme - } -} - // SetExternalKubeClientSet implements the WantsExternalKubeInformerFactory interface. // It sets external ClientSet for admission plugins that need it func (a *Webhook) SetExternalKubeClientSet(client clientset.Interface) { @@ -132,9 +122,6 @@ func (a *Webhook) ValidateInitialization() error { if err := a.clientManager.Validate(); err != nil { return fmt.Errorf("clientManager is not properly setup: %v", err) } - if err := a.convertor.Validate(); err != nil { - return fmt.Errorf("convertor is not properly setup: %v", err) - } return nil } @@ -156,7 +143,7 @@ func (a *Webhook) ShouldCallHook(h *v1beta1.Webhook, attr admission.Attributes) } // Dispatch is called by the downstream Validate or Admit methods. -func (a *Webhook) Dispatch(attr admission.Attributes) error { +func (a *Webhook) Dispatch(attr admission.Attributes, o admission.ObjectInterfaces) error { if rules.IsWebhookConfigurationResource(attr) { return nil } @@ -188,18 +175,18 @@ func (a *Webhook) Dispatch(attr admission.Attributes) error { Attributes: attr, } if oldObj := attr.GetOldObject(); oldObj != nil { - out, err := a.convertor.ConvertToGVK(oldObj, attr.GetKind()) + out, err := ConvertToGVK(oldObj, attr.GetKind(), o) if err != nil { return apierrors.NewInternalError(err) } versionedAttr.VersionedOldObject = out } if obj := attr.GetObject(); obj != nil { - out, err := a.convertor.ConvertToGVK(obj, attr.GetKind()) + out, err := ConvertToGVK(obj, attr.GetKind(), o) if err != nil { return apierrors.NewInternalError(err) } versionedAttr.VersionedObject = out } - return a.dispatcher.Dispatch(ctx, &versionedAttr, relevantHooks) + return a.dispatcher.Dispatch(ctx, &versionedAttr, o, relevantHooks) } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/BUILD b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/BUILD index da393cf2283..1a6530395f4 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/BUILD @@ -39,8 +39,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/api/admission/v1beta1:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go index d646bacb535..441e64f838d 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go @@ -31,7 +31,9 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer/json" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" admissionmetrics "k8s.io/apiserver/pkg/admission/metrics" webhookerrors "k8s.io/apiserver/pkg/admission/plugin/webhook/errors" "k8s.io/apiserver/pkg/admission/plugin/webhook/generic" @@ -53,10 +55,10 @@ func newMutatingDispatcher(p *Plugin) func(cm *webhook.ClientManager) generic.Di var _ generic.Dispatcher = &mutatingDispatcher{} -func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr *generic.VersionedAttributes, relevantHooks []*v1beta1.Webhook) error { +func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr *generic.VersionedAttributes, o admission.ObjectInterfaces, relevantHooks []*v1beta1.Webhook) error { for _, hook := range relevantHooks { t := time.Now() - err := a.callAttrMutatingHook(ctx, hook, attr) + err := a.callAttrMutatingHook(ctx, hook, attr, o) admissionmetrics.Metrics.ObserveWebhook(time.Since(t), err != nil, attr.Attributes, "admit", hook.Name) if err == nil { continue @@ -76,13 +78,13 @@ func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr *generic.Version // convert attr.VersionedObject to the internal version in the underlying admission.Attributes if attr.VersionedObject != nil { - return a.plugin.scheme.Convert(attr.VersionedObject, attr.Attributes.GetObject(), nil) + return o.GetObjectConvertor().Convert(attr.VersionedObject, attr.Attributes.GetObject(), nil) } return nil } // note that callAttrMutatingHook updates attr -func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta1.Webhook, attr *generic.VersionedAttributes) error { +func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta1.Webhook, attr *generic.VersionedAttributes, o admission.ObjectInterfaces) error { if attr.IsDryRun() { if h.SideEffects == nil { return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: fmt.Errorf("Webhook SideEffects is nil")} @@ -92,6 +94,12 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta } } + // Currently dispatcher only supports `v1beta1` AdmissionReview + // TODO: Make the dispatcher capable of sending multiple AdmissionReview versions + if !util.HasAdmissionReviewVersion(v1beta1.SchemeGroupVersion.Version, h) { + return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: fmt.Errorf("webhook does not accept v1beta1 AdmissionReview")} + } + // Make the webhook request request := request.CreateAdmissionReview(attr) client, err := a.cm.HookClient(util.HookClientConfigForWebhook(h)) @@ -99,7 +107,11 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: err} } response := &admissionv1beta1.AdmissionReview{} - if err := client.Post().Context(ctx).Body(&request).Do().Into(response); err != nil { + r := client.Post().Context(ctx).Body(&request) + if h.TimeoutSeconds != nil { + r = r.Timeout(time.Duration(*h.TimeoutSeconds) * time.Second) + } + if err := r.Do().Into(response); err != nil { return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: err} } @@ -135,7 +147,8 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta return apierrors.NewInternalError(fmt.Errorf("admission webhook %q attempted to modify the object, which is not supported for this operation", h.Name)) } - objJS, err := runtime.Encode(a.plugin.jsonSerializer, attr.VersionedObject) + jsonSerializer := json.NewSerializer(json.DefaultMetaFactory, o.GetObjectCreater(), o.GetObjectTyper(), false) + objJS, err := runtime.Encode(jsonSerializer, attr.VersionedObject) if err != nil { return apierrors.NewInternalError(err) } @@ -150,17 +163,17 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta // They are represented as Unstructured. newVersionedObject = &unstructured.Unstructured{} } else { - newVersionedObject, err = a.plugin.scheme.New(attr.GetKind()) + newVersionedObject, err = o.GetObjectCreater().New(attr.GetKind()) if err != nil { return apierrors.NewInternalError(err) } } // TODO: if we have multiple mutating webhooks, we can remember the json // instead of encoding and decoding for each one. - if _, _, err := a.plugin.jsonSerializer.Decode(patchedJS, nil, newVersionedObject); err != nil { + if _, _, err := jsonSerializer.Decode(patchedJS, nil, newVersionedObject); err != nil { return apierrors.NewInternalError(err) } attr.VersionedObject = newVersionedObject - a.plugin.scheme.Default(attr.VersionedObject) + o.GetObjectDefaulter().Default(attr.VersionedObject) return nil } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/plugin.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/plugin.go index 33572b24b5b..6202fbc63fe 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/plugin.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/plugin.go @@ -17,11 +17,8 @@ limitations under the License. package mutating import ( - "fmt" "io" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission/configuration" "k8s.io/apiserver/pkg/admission/plugin/webhook/generic" @@ -47,9 +44,6 @@ func Register(plugins *admission.Plugins) { // Plugin is an implementation of admission.Interface. type Plugin struct { *generic.Webhook - - scheme *runtime.Scheme - jsonSerializer *json.Serializer } var _ admission.MutationInterface = &Plugin{} @@ -67,30 +61,15 @@ func NewMutatingWebhook(configFile io.Reader) (*Plugin, error) { return p, nil } -// SetScheme sets a serializer(NegotiatedSerializer) which is derived from the scheme -func (a *Plugin) SetScheme(scheme *runtime.Scheme) { - a.Webhook.SetScheme(scheme) - if scheme != nil { - a.scheme = scheme - a.jsonSerializer = json.NewSerializer(json.DefaultMetaFactory, scheme, scheme, false) - } -} - // ValidateInitialization implements the InitializationValidator interface. func (a *Plugin) ValidateInitialization() error { if err := a.Webhook.ValidateInitialization(); err != nil { return err } - if a.scheme == nil { - return fmt.Errorf("scheme is not properly setup") - } - if a.jsonSerializer == nil { - return fmt.Errorf("jsonSerializer is not properly setup") - } return nil } // Admit makes an admission decision based on the request attributes. -func (a *Plugin) Admit(attr admission.Attributes) error { - return a.Webhook.Dispatch(attr) +func (a *Plugin) Admit(attr admission.Attributes, o admission.ObjectInterfaces) error { + return a.Webhook.Dispatch(attr, o) } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/BUILD b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/BUILD index 8da2ba936d8..e48ba5583f1 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/BUILD @@ -8,6 +8,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", ], ) @@ -19,6 +21,7 @@ go_test( deps = [ "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go index 096ab5021d1..050885323d3 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go @@ -20,6 +20,8 @@ import ( "strings" "k8s.io/api/admissionregistration/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/admission" ) @@ -31,7 +33,8 @@ type Matcher struct { // Matches returns if the Attr matches the Rule. func (r *Matcher) Matches() bool { - return r.operation() && + return r.scope() && + r.operation() && r.group() && r.version() && r.resource() @@ -50,6 +53,25 @@ func exactOrWildcard(items []string, requested string) bool { return false } +var namespaceResource = schema.GroupVersionResource{Group: "", Version: "v1", Resource: "namespaces"} + +func (r *Matcher) scope() bool { + if r.Rule.Scope == nil || *r.Rule.Scope == v1beta1.AllScopes { + return true + } + // attr.GetNamespace() is set to the name of the namespace for requests of the namespace object itself. + switch *r.Rule.Scope { + case v1beta1.NamespacedScope: + // first make sure that we are not requesting a namespace object (namespace objects are cluster-scoped) + return r.Attr.GetResource() != namespaceResource && r.Attr.GetNamespace() != metav1.NamespaceNone + case v1beta1.ClusterScope: + // also return true if the request is for a namespace object (namespace objects are cluster-scoped) + return r.Attr.GetResource() == namespaceResource || r.Attr.GetNamespace() == metav1.NamespaceNone + default: + return false + } +} + func (r *Matcher) group() bool { return exactOrWildcard(r.Rule.APIGroups, r.Attr.GetResource().Group) } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/util/client_config.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/util/client_config.go index 49255eba06a..b5fa1ea3ec8 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/util/client_config.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/util/client_config.go @@ -40,3 +40,13 @@ func HookClientConfigForWebhook(w *v1beta1.Webhook) webhook.ClientConfig { } return ret } + +// HasAdmissionReviewVersion check whether a version is accepted by a given webhook. +func HasAdmissionReviewVersion(a string, w *v1beta1.Webhook) bool { + for _, b := range w.AdmissionReviewVersions { + if b == a { + return true + } + } + return false +} diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/BUILD b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/BUILD index ea9f489f8ec..f9f1c668eb7 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/BUILD +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/BUILD @@ -32,13 +32,9 @@ go_test( srcs = ["plugin_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/api/admission/v1beta1:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/testing:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", - "//vendor/github.com/stretchr/testify/require:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go index 166e21adcdf..7889b4f5da4 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go @@ -28,6 +28,7 @@ import ( "k8s.io/api/admissionregistration/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" admissionmetrics "k8s.io/apiserver/pkg/admission/metrics" webhookerrors "k8s.io/apiserver/pkg/admission/plugin/webhook/errors" "k8s.io/apiserver/pkg/admission/plugin/webhook/generic" @@ -46,7 +47,7 @@ func newValidatingDispatcher(cm *webhook.ClientManager) generic.Dispatcher { var _ generic.Dispatcher = &validatingDispatcher{} -func (d *validatingDispatcher) Dispatch(ctx context.Context, attr *generic.VersionedAttributes, relevantHooks []*v1beta1.Webhook) error { +func (d *validatingDispatcher) Dispatch(ctx context.Context, attr *generic.VersionedAttributes, o admission.ObjectInterfaces, relevantHooks []*v1beta1.Webhook) error { wg := sync.WaitGroup{} errCh := make(chan error, len(relevantHooks)) wg.Add(len(relevantHooks)) @@ -107,6 +108,12 @@ func (d *validatingDispatcher) callHook(ctx context.Context, h *v1beta1.Webhook, } } + // Currently dispatcher only supports `v1beta1` AdmissionReview + // TODO: Make the dispatcher capable of sending multiple AdmissionReview versions + if !util.HasAdmissionReviewVersion(v1beta1.SchemeGroupVersion.Version, h) { + return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: fmt.Errorf("webhook does not accept v1beta1 AdmissionReviewRequest")} + } + // Make the webhook request request := request.CreateAdmissionReview(attr) client, err := d.cm.HookClient(util.HookClientConfigForWebhook(h)) @@ -114,7 +121,11 @@ func (d *validatingDispatcher) callHook(ctx context.Context, h *v1beta1.Webhook, return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: err} } response := &admissionv1beta1.AdmissionReview{} - if err := client.Post().Context(ctx).Body(&request).Do().Into(response); err != nil { + r := client.Post().Context(ctx).Body(&request) + if h.TimeoutSeconds != nil { + r = r.Timeout(time.Duration(*h.TimeoutSeconds) * time.Second) + } + if err := r.Do().Into(response); err != nil { return &webhook.ErrCallingWebhook{WebhookName: h.Name, Reason: err} } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/plugin.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/plugin.go index 7f79b9d7a08..388a237c984 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/plugin.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/plugin.go @@ -59,6 +59,6 @@ func NewValidatingAdmissionWebhook(configFile io.Reader) (*Plugin, error) { } // Validate makes an admission decision based on the request attributes. -func (a *Plugin) Validate(attr admission.Attributes) error { - return a.Webhook.Dispatch(attr) +func (a *Plugin) Validate(attr admission.Attributes, o admission.ObjectInterfaces) error { + return a.Webhook.Dispatch(attr, o) } diff --git a/vendor/k8s.io/apiserver/pkg/admission/util.go b/vendor/k8s.io/apiserver/pkg/admission/util.go new file mode 100644 index 00000000000..61222f5d55c --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/admission/util.go @@ -0,0 +1,28 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package admission + +import "k8s.io/apimachinery/pkg/runtime" + +type SchemeBasedObjectInterfaces struct { + Scheme *runtime.Scheme +} + +func (r *SchemeBasedObjectInterfaces) GetObjectCreater() runtime.ObjectCreater { return r.Scheme } +func (r *SchemeBasedObjectInterfaces) GetObjectTyper() runtime.ObjectTyper { return r.Scheme } +func (r *SchemeBasedObjectInterfaces) GetObjectDefaulter() runtime.ObjectDefaulter { return r.Scheme } +func (r *SchemeBasedObjectInterfaces) GetObjectConvertor() runtime.ObjectConvertor { return r.Scheme } diff --git a/vendor/k8s.io/apiserver/pkg/apis/OWNERS b/vendor/k8s.io/apiserver/pkg/apis/OWNERS index bae178f8175..38336c177f9 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/apis/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/apiserver/pkg/apis/audit/OWNERS b/vendor/k8s.io/apiserver/pkg/apis/audit/OWNERS index 8389778900f..7a21104f6df 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/audit/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/apis/audit/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-audit-approvers diff --git a/vendor/k8s.io/apiserver/pkg/apis/audit/v1/doc.go b/vendor/k8s.io/apiserver/pkg/apis/audit/v1/doc.go index b8f818ffdb2..d1f180c942a 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/audit/v1/doc.go +++ b/vendor/k8s.io/apiserver/pkg/apis/audit/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/apiserver/pkg/apis/audit // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta diff --git a/vendor/k8s.io/apiserver/pkg/apis/audit/v1alpha1/doc.go b/vendor/k8s.io/apiserver/pkg/apis/audit/v1alpha1/doc.go index d2cbdd9919b..54a8440eb7e 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/audit/v1alpha1/doc.go +++ b/vendor/k8s.io/apiserver/pkg/apis/audit/v1alpha1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/apiserver/pkg/apis/audit // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta diff --git a/vendor/k8s.io/apiserver/pkg/apis/audit/v1beta1/doc.go b/vendor/k8s.io/apiserver/pkg/apis/audit/v1beta1/doc.go index d43a807c3de..f3fe61683d8 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/audit/v1beta1/doc.go +++ b/vendor/k8s.io/apiserver/pkg/apis/audit/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/apiserver/pkg/apis/audit // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta diff --git a/vendor/k8s.io/apiserver/pkg/apis/audit/validation/validation.go b/vendor/k8s.io/apiserver/pkg/apis/audit/validation/validation.go index 397317f23b2..0611c1ae5f1 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/audit/validation/validation.go +++ b/vendor/k8s.io/apiserver/pkg/apis/audit/validation/validation.go @@ -100,7 +100,7 @@ func validateResources(groupResources []audit.GroupResources, fldPath *field.Pat // The empty string represents the core API group. if len(groupResource.Group) != 0 { // Group names must be lower case and be valid DNS subdomains. - // reference: https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md + // reference: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md // an error is returned for group name like rbac.authorization.k8s.io/v1beta1 // rbac.authorization.k8s.io is the valid one if msgs := validation.NameIsDNSSubdomain(groupResource.Group, false); len(msgs) != 0 { diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/BUILD b/vendor/k8s.io/apiserver/pkg/apis/config/BUILD index feaa8a3c370..ce25409aaa8 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/BUILD +++ b/vendor/k8s.io/apiserver/pkg/apis/config/BUILD @@ -30,8 +30,6 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/apiserver/pkg/apis/config/v1:all-srcs", - "//staging/src/k8s.io/apiserver/pkg/apis/config/v1alpha1:all-srcs", - "//staging/src/k8s.io/apiserver/pkg/apis/config/validation:all-srcs", ], tags = ["automanaged"], visibility = ["//visibility:public"], diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/types.go b/vendor/k8s.io/apiserver/pkg/apis/config/types.go index 822806d7e5d..5d4caaa5da0 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/types.go +++ b/vendor/k8s.io/apiserver/pkg/apis/config/types.go @@ -20,43 +20,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// LeaderElectionConfiguration defines the configuration of leader election -// clients for components that can run with leader election enabled. -type LeaderElectionConfiguration struct { - // leaderElect enables a leader election client to gain leadership - // before executing the main loop. Enable this when running replicated - // components for high availability. - LeaderElect bool - // leaseDuration is the duration that non-leader candidates will wait - // after observing a leadership renewal until attempting to acquire - // leadership of a led but unrenewed leader slot. This is effectively the - // maximum duration that a leader can be stopped before it is replaced - // by another candidate. This is only applicable if leader election is - // enabled. - LeaseDuration metav1.Duration - // renewDeadline is the interval between attempts by the acting master to - // renew a leadership slot before it stops leading. This must be less - // than or equal to the lease duration. This is only applicable if leader - // election is enabled. - RenewDeadline metav1.Duration - // retryPeriod is the duration the clients should wait between attempting - // acquisition and renewal of a leadership. This is only applicable if - // leader election is enabled. - RetryPeriod metav1.Duration - // resourceLock indicates the resource object type that will be used to lock - // during leader election cycles. - ResourceLock string -} - -// DebuggingConfiguration holds configuration for Debugging related features. -type DebuggingConfiguration struct { - // enableProfiling enables profiling via web interface host:port/debug/pprof/ - EnableProfiling bool - // enableContentionProfiling enables lock contention profiling, if - // enableProfiling is true. - EnableContentionProfiling bool -} - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // EncryptionConfiguration stores the complete configuration for encryption providers. @@ -123,4 +86,7 @@ type KMSConfiguration struct { CacheSize int32 // endpoint is the gRPC server listening address, for example "unix:///var/run/kms-provider.sock". Endpoint string + // Timeout for gRPC calls to kms-plugin (ex. 5s). The default is 3 seconds. + // +optional + Timeout *metav1.Duration } diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1/types.go b/vendor/k8s.io/apiserver/pkg/apis/config/v1/types.go index e2c123d1dc2..7b283a4e4ce 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1/types.go +++ b/vendor/k8s.io/apiserver/pkg/apis/config/v1/types.go @@ -84,4 +84,7 @@ type KMSConfiguration struct { CacheSize int32 `json:"cachesize,omitempty"` // endpoint is the gRPC server listening address, for example "unix:///var/run/kms-provider.sock". Endpoint string `json:"endpoint"` + // Timeout for gRPC calls to kms-plugin (ex. 5s). The default is 3 seconds. + // +optional + Timeout *metav1.Duration `json:"timeout,omitempty"` } diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.conversion.go b/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.conversion.go index 27fb16d3183..4a6843df048 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.conversion.go +++ b/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.conversion.go @@ -23,6 +23,7 @@ package v1 import ( unsafe "unsafe" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" config "k8s.io/apiserver/pkg/apis/config" @@ -180,6 +181,7 @@ func autoConvert_v1_KMSConfiguration_To_config_KMSConfiguration(in *KMSConfigura out.Name = in.Name out.CacheSize = in.CacheSize out.Endpoint = in.Endpoint + out.Timeout = (*metav1.Duration)(unsafe.Pointer(in.Timeout)) return nil } @@ -192,6 +194,7 @@ func autoConvert_config_KMSConfiguration_To_v1_KMSConfiguration(in *config.KMSCo out.Name = in.Name out.CacheSize = in.CacheSize out.Endpoint = in.Endpoint + out.Timeout = (*metav1.Duration)(unsafe.Pointer(in.Timeout)) return nil } diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.deepcopy.go b/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.deepcopy.go index e5f28d46a3d..9bd7732b062 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/apiserver/pkg/apis/config/v1/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package v1 import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -96,6 +97,11 @@ func (in *IdentityConfiguration) DeepCopy() *IdentityConfiguration { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KMSConfiguration) DeepCopyInto(out *KMSConfiguration) { *out = *in + if in.Timeout != nil { + in, out := &in.Timeout, &out.Timeout + *out = new(metav1.Duration) + **out = **in + } return } @@ -151,7 +157,7 @@ func (in *ProviderConfiguration) DeepCopyInto(out *ProviderConfiguration) { if in.KMS != nil { in, out := &in.KMS, &out.KMS *out = new(KMSConfiguration) - **out = **in + (*in).DeepCopyInto(*out) } return } diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/register.go b/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/register.go deleted file mode 100644 index ddc186c9aa4..00000000000 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/register.go +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - "k8s.io/apimachinery/pkg/runtime" -) - -var ( - // SchemeBuilder is the scheme builder with scheme init functions to run for this API package - SchemeBuilder runtime.SchemeBuilder - // localSchemeBuilder extends the SchemeBuilder instance with the external types. In this package, - // defaulting and conversion init funcs are registered as well. - localSchemeBuilder = &SchemeBuilder - // AddToScheme is a global function that registers this API group & version to a scheme - AddToScheme = localSchemeBuilder.AddToScheme -) diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/zz_generated.deepcopy.go b/vendor/k8s.io/apiserver/pkg/apis/config/zz_generated.deepcopy.go index 438dff997d5..ce15176ef8c 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/zz_generated.deepcopy.go +++ b/vendor/k8s.io/apiserver/pkg/apis/config/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package config import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -45,22 +46,6 @@ func (in *AESConfiguration) DeepCopy() *AESConfiguration { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DebuggingConfiguration) DeepCopyInto(out *DebuggingConfiguration) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DebuggingConfiguration. -func (in *DebuggingConfiguration) DeepCopy() *DebuggingConfiguration { - if in == nil { - return nil - } - out := new(DebuggingConfiguration) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EncryptionConfiguration) DeepCopyInto(out *EncryptionConfiguration) { *out = *in @@ -112,6 +97,11 @@ func (in *IdentityConfiguration) DeepCopy() *IdentityConfiguration { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KMSConfiguration) DeepCopyInto(out *KMSConfiguration) { *out = *in + if in.Timeout != nil { + in, out := &in.Timeout, &out.Timeout + *out = new(v1.Duration) + **out = **in + } return } @@ -141,25 +131,6 @@ func (in *Key) DeepCopy() *Key { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LeaderElectionConfiguration) DeepCopyInto(out *LeaderElectionConfiguration) { - *out = *in - out.LeaseDuration = in.LeaseDuration - out.RenewDeadline = in.RenewDeadline - out.RetryPeriod = in.RetryPeriod - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaderElectionConfiguration. -func (in *LeaderElectionConfiguration) DeepCopy() *LeaderElectionConfiguration { - if in == nil { - return nil - } - out := new(LeaderElectionConfiguration) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProviderConfiguration) DeepCopyInto(out *ProviderConfiguration) { *out = *in @@ -186,7 +157,7 @@ func (in *ProviderConfiguration) DeepCopyInto(out *ProviderConfiguration) { if in.KMS != nil { in, out := &in.KMS, &out.KMS *out = new(KMSConfiguration) - **out = **in + (*in).DeepCopyInto(*out) } return } diff --git a/vendor/k8s.io/apiserver/pkg/audit/BUILD b/vendor/k8s.io/apiserver/pkg/audit/BUILD index f71da4d4243..f6923a2828a 100644 --- a/vendor/k8s.io/apiserver/pkg/audit/BUILD +++ b/vendor/k8s.io/apiserver/pkg/audit/BUILD @@ -19,6 +19,7 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/audit", importpath = "k8s.io/apiserver/pkg/audit", deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/audit/OWNERS b/vendor/k8s.io/apiserver/pkg/audit/OWNERS index 178ce84a5ce..c3486ad5ded 100644 --- a/vendor/k8s.io/apiserver/pkg/audit/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/audit/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-audit-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/audit/request.go b/vendor/k8s.io/apiserver/pkg/audit/request.go index d4b12770eab..7ddf764ba6d 100644 --- a/vendor/k8s.io/apiserver/pkg/audit/request.go +++ b/vendor/k8s.io/apiserver/pkg/audit/request.go @@ -20,13 +20,13 @@ import ( "bytes" "fmt" "net/http" + "reflect" "time" "github.com/pborman/uuid" "k8s.io/klog" - "reflect" - + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -117,8 +117,9 @@ func LogRequestObject(ae *auditinternal.Event, obj runtime.Object, gvr schema.Gr if ae.ObjectRef == nil { ae.ObjectRef = &auditinternal.ObjectReference{} } - if acc, ok := obj.(metav1.ObjectMetaAccessor); ok { - meta := acc.GetObjectMeta() + + // meta.Accessor is more general than ObjectMetaAccessor, but if it fails, we can just skip setting these bits + if meta, err := meta.Accessor(obj); err == nil { if len(ae.ObjectRef.Namespace) == 0 { ae.ObjectRef.Namespace = meta.GetNamespace() } diff --git a/vendor/k8s.io/apiserver/pkg/audit/scheme.go b/vendor/k8s.io/apiserver/pkg/audit/scheme.go index d72e394ec0d..031759ec75f 100644 --- a/vendor/k8s.io/apiserver/pkg/audit/scheme.go +++ b/vendor/k8s.io/apiserver/pkg/audit/scheme.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + auditinternal "k8s.io/apiserver/pkg/apis/audit" "k8s.io/apiserver/pkg/apis/audit/v1" "k8s.io/apiserver/pkg/apis/audit/v1alpha1" "k8s.io/apiserver/pkg/apis/audit/v1beta1" @@ -36,4 +37,6 @@ func init() { utilruntime.Must(v1.AddToScheme(Scheme)) utilruntime.Must(v1alpha1.AddToScheme(Scheme)) utilruntime.Must(v1beta1.AddToScheme(Scheme)) + utilruntime.Must(auditinternal.AddToScheme(Scheme)) + utilruntime.Must(Scheme.SetVersionPriority(v1.SchemeGroupVersion, v1beta1.SchemeGroupVersion, v1alpha1.SchemeGroupVersion)) } diff --git a/vendor/k8s.io/apiserver/pkg/authentication/OWNERS b/vendor/k8s.io/apiserver/pkg/authentication/OWNERS index c607d2aa8c5..3e05d309be5 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/authentication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS index 470b7a1c92d..3cf03643835 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go index bc875adacf1..5e91034aa24 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go @@ -39,6 +39,9 @@ var clientCertificateExpirationHistogram = prometheus.NewHistogram( Help: "Distribution of the remaining lifetime on the certificate used to authenticate a request.", Buckets: []float64{ 0, + (30 * time.Minute).Seconds(), + (1 * time.Hour).Seconds(), + (2 * time.Hour).Seconds(), (6 * time.Hour).Seconds(), (12 * time.Hour).Seconds(), (24 * time.Hour).Seconds(), diff --git a/vendor/k8s.io/apiserver/pkg/authentication/user/doc.go b/vendor/k8s.io/apiserver/pkg/authentication/user/doc.go index 570c51ae995..3d87fd72caf 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/user/doc.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/user/doc.go @@ -16,4 +16,4 @@ limitations under the License. // Package user contains utilities for dealing with simple user exchange in the auth // packages. The user.Info interface defines an interface for exchanging that info. -package user +package user // import "k8s.io/apiserver/pkg/authentication/user" diff --git a/vendor/k8s.io/apiserver/pkg/authorization/OWNERS b/vendor/k8s.io/apiserver/pkg/authorization/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/apiserver/pkg/authorization/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/authorization/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/authorization/authorizer/interfaces.go b/vendor/k8s.io/apiserver/pkg/authorization/authorizer/interfaces.go index 95ade009e3d..5f212ca04eb 100644 --- a/vendor/k8s.io/apiserver/pkg/authorization/authorizer/interfaces.go +++ b/vendor/k8s.io/apiserver/pkg/authorization/authorizer/interfaces.go @@ -56,7 +56,7 @@ type Attributes interface { GetAPIVersion() string // IsResourceRequest returns true for requests to API resources, like /api/v1/nodes, - // and false for non-resource endpoints like /api, /healthz, and /swaggerapi + // and false for non-resource endpoints like /api, /healthz IsResourceRequest() bool // GetPath returns the path of the request diff --git a/vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory/OWNERS b/vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory/OWNERS old mode 100755 new mode 100644 index cb2ae800f36..a5ccdcbd1b0 --- a/vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - dims diff --git a/vendor/k8s.io/apiserver/pkg/authorization/path/doc.go b/vendor/k8s.io/apiserver/pkg/authorization/path/doc.go index 743d945b46b..654aaeb7424 100644 --- a/vendor/k8s.io/apiserver/pkg/authorization/path/doc.go +++ b/vendor/k8s.io/apiserver/pkg/authorization/path/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package path contains an authorizer that allows certain paths and path prefixes. -package path +package path // import "k8s.io/apiserver/pkg/authorization/path" diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/BUILD b/vendor/k8s.io/apiserver/pkg/endpoints/BUILD index ad36f85ea72..1b0d7be70b1 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/BUILD +++ b/vendor/k8s.io/apiserver/pkg/endpoints/BUILD @@ -82,10 +82,13 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/discovery:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/filters:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", ], diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/discovery/BUILD b/vendor/k8s.io/apiserver/pkg/endpoints/discovery/BUILD index f6395aeca8c..d80a60ea96b 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/discovery/BUILD +++ b/vendor/k8s.io/apiserver/pkg/endpoints/discovery/BUILD @@ -32,6 +32,7 @@ go_library( "group.go", "legacy.go", "root.go", + "storageversionhash.go", "util.go", "version.go", ], diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/filters/OWNERS b/vendor/k8s.io/apiserver/pkg/endpoints/filters/OWNERS old mode 100755 new mode 100644 index 6f780ff899b..05259ce3538 --- a/vendor/k8s.io/apiserver/pkg/endpoints/filters/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/endpoints/filters/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - sttts diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/BUILD b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/BUILD index 734fc9004b2..a0e445f715e 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/BUILD +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/BUILD @@ -9,6 +9,7 @@ load( go_test( name = "go_default_test", srcs = [ + "create_test.go", "namer_test.go", "rest_test.go", ], @@ -27,12 +28,13 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) @@ -73,6 +75,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/audit:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", @@ -82,12 +85,11 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/httplog:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/dryrun:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/wsstream:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/golang.org/x/net/websocket:go_default_library", "//vendor/k8s.io/klog:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) @@ -102,6 +104,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager:all-srcs", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation:all-srcs", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:all-srcs", ], diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go index 6293a72867a..3baab8bc817 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go @@ -17,13 +17,16 @@ limitations under the License. package handlers import ( + "bytes" "context" "fmt" "net/http" + "strings" "time" + "unicode" + "unicode/utf8" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/api/meta" metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/validation" @@ -37,7 +40,7 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/util/dryrun" utilfeature "k8s.io/apiserver/pkg/util/feature" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Interface, includeName bool) http.HandlerFunc { @@ -70,6 +73,11 @@ func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Inte ctx := req.Context() ctx = request.WithNamespace(ctx, namespace) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) + if err != nil { + scope.err(err, w, req) + return + } gv := scope.Kind.GroupVersion() s, err := negotiation.NegotiateInputSerializer(req, false, scope.Serializer) @@ -77,6 +85,7 @@ func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Inte scope.err(err, w, req) return } + decoder := scope.Serializer.DecoderToVersion(s.Serializer, scope.HubGroupVersion) body, err := limitedReadBody(req, scope.MaxRequestBodyBytes) @@ -121,7 +130,7 @@ func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Inte userInfo, _ := request.UserFrom(ctx) admissionAttributes := admission.NewAttributesRecord(obj, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, dryrun.IsDryRun(options.DryRun), userInfo) if mutatingAdmission, ok := admit.(admission.MutationInterface); ok && mutatingAdmission.Handles(admission.Create) { - err = mutatingAdmission.Admit(admissionAttributes) + err = mutatingAdmission.Admit(admissionAttributes, &scope) if err != nil { scope.err(err, w, req) return @@ -134,7 +143,7 @@ func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Inte ctx, name, obj, - rest.AdmissionToValidateObjectFunc(admit, admissionAttributes), + rest.AdmissionToValidateObjectFunc(admit, admissionAttributes, &scope), options, ) }) @@ -144,31 +153,14 @@ func createHandler(r rest.NamedCreater, scope RequestScope, admit admission.Inte } trace.Step("Object stored in database") - requestInfo, ok := request.RequestInfoFrom(ctx) - if !ok { - scope.err(fmt.Errorf("missing requestInfo"), w, req) - return - } - if err := setSelfLink(result, requestInfo, scope.Namer); err != nil { - scope.err(err, w, req) - return - } - trace.Step("Self-link added") - - // If the object is partially initialized, always indicate it via StatusAccepted code := http.StatusCreated - if accessor, err := meta.Accessor(result); err == nil { - if accessor.GetInitializers() != nil { - code = http.StatusAccepted - } - } status, ok := result.(*metav1.Status) if ok && err == nil && status.Code == 0 { status.Code = int32(code) } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, code, result) + transformResponseObject(ctx, scope, req, w, code, outputMediaType, result) } } @@ -189,3 +181,32 @@ type namedCreaterAdapter struct { func (c *namedCreaterAdapter) Create(ctx context.Context, name string, obj runtime.Object, createValidatingAdmission rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { return c.Creater.Create(ctx, obj, createValidatingAdmission, options) } + +// manager is assumed to be already a valid value, we need to make +// userAgent into a valid value too. +func managerOrUserAgent(manager, userAgent string) string { + if manager != "" { + return manager + } + return prefixFromUserAgent(userAgent) +} + +// prefixFromUserAgent takes the characters preceding the first /, quote +// unprintable character and then trim what's beyond the +// FieldManagerMaxLength limit. +func prefixFromUserAgent(u string) string { + m := strings.Split(u, "/")[0] + buf := bytes.NewBuffer(nil) + for _, r := range m { + // Ignore non-printable characters + if !unicode.IsPrint(r) { + continue + } + // Only append if we have room for it + if buf.Len()+utf8.RuneLen(r) > validation.FieldManagerMaxLength { + break + } + buf.WriteRune(r) + } + return buf.String() +} diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/delete.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/delete.go index 2961eb75c85..a37c7f8d525 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/delete.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/delete.go @@ -35,7 +35,7 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/util/dryrun" utilfeature "k8s.io/apiserver/pkg/util/feature" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) // DeleteResource returns a function that will handle a resource deletion @@ -64,6 +64,12 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco ae := request.AuditEventFrom(ctx) admit = admission.WithAudit(admit, ae) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) + if err != nil { + scope.err(err, w, req) + return + } + options := &metav1.DeleteOptions{} if allowsOptions { body, err := limitedReadBody(req, scope.MaxRequestBodyBytes) @@ -113,13 +119,13 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco userInfo, _ := request.UserFrom(ctx) attrs := admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Delete, dryrun.IsDryRun(options.DryRun), userInfo) if mutatingAdmission, ok := admit.(admission.MutationInterface); ok { - if err := mutatingAdmission.Admit(attrs); err != nil { + if err := mutatingAdmission.Admit(attrs, &scope); err != nil { scope.err(err, w, req) return } } if validatingAdmission, ok := admit.(admission.ValidationInterface); ok { - if err := validatingAdmission.Validate(attrs); err != nil { + if err := validatingAdmission.Validate(attrs, &scope); err != nil { scope.err(err, w, req) return } @@ -160,23 +166,10 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco Kind: scope.Kind.Kind, }, } - } else { - // when a non-status response is returned, set the self link - requestInfo, ok := request.RequestInfoFrom(ctx) - if !ok { - scope.err(fmt.Errorf("missing requestInfo"), w, req) - return - } - if _, ok := result.(*metav1.Status); !ok { - if err := setSelfLink(result, requestInfo, scope.Namer); err != nil { - scope.err(err, w, req) - return - } - } } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, status, result) + transformResponseObject(ctx, scope, req, w, status, outputMediaType, result) } } @@ -204,6 +197,12 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco ctx = request.WithNamespace(ctx, namespace) ae := request.AuditEventFrom(ctx) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) + if err != nil { + scope.err(err, w, req) + return + } + listOptions := metainternalversion.ListOptions{} if err := metainternalversion.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, &listOptions); err != nil { err = errors.NewBadRequest(err.Error()) @@ -270,7 +269,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco userInfo, _ := request.UserFrom(ctx) attrs := admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, "", scope.Resource, scope.Subresource, admission.Delete, dryrun.IsDryRun(options.DryRun), userInfo) if mutatingAdmission, ok := admit.(admission.MutationInterface); ok { - err = mutatingAdmission.Admit(attrs) + err = mutatingAdmission.Admit(attrs, &scope) if err != nil { scope.err(err, w, req) return @@ -278,7 +277,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco } if validatingAdmission, ok := admit.(admission.ValidationInterface); ok { - err = validatingAdmission.Validate(attrs) + err = validatingAdmission.Validate(attrs, &scope) if err != nil { scope.err(err, w, req) return @@ -304,17 +303,9 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco Kind: scope.Kind.Kind, }, } - } else { - // when a non-status response is returned, set the self link - if _, ok := result.(*metav1.Status); !ok { - if _, err := setListSelfLink(result, ctx, req, scope.Namer); err != nil { - scope.err(err, w, req) - return - } - } } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, http.StatusOK, result) + transformResponseObject(ctx, scope, req, w, http.StatusOK, outputMediaType, result) } } diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/get.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/get.go index 0f1c59946a3..cfa8a6872b8 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/get.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/get.go @@ -33,10 +33,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) // getterFunc performs a get request with the given context and object name. The request @@ -58,24 +59,21 @@ func getResourceHandler(scope RequestScope, getter getterFunc) http.HandlerFunc ctx := req.Context() ctx = request.WithNamespace(ctx, namespace) - result, err := getter(ctx, name, req, trace) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) if err != nil { scope.err(err, w, req) return } - requestInfo, ok := request.RequestInfoFrom(ctx) - if !ok { - scope.err(fmt.Errorf("missing requestInfo"), w, req) - return - } - if err := setSelfLink(result, requestInfo, scope.Namer); err != nil { + + result, err := getter(ctx, name, req, trace) + if err != nil { scope.err(err, w, req) return } trace.Step("About to write a response") scope.Trace = trace - transformResponseObject(ctx, scope, req, w, http.StatusOK, result) + transformResponseObject(ctx, scope, req, w, http.StatusOK, outputMediaType, result) trace.Step("Transformed response object") } } @@ -187,6 +185,12 @@ func ListResource(r rest.Lister, rw rest.Watcher, scope RequestScope, forceWatch ctx := req.Context() ctx = request.WithNamespace(ctx, namespace) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) + if err != nil { + scope.err(err, w, req) + return + } + opts := metainternalversion.ListOptions{} if err := metainternalversion.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, &opts); err != nil { err = errors.NewBadRequest(err.Error()) @@ -252,7 +256,7 @@ func ListResource(r rest.Lister, rw rest.Watcher, scope RequestScope, forceWatch return } requestInfo, _ := request.RequestInfoFrom(ctx) - metrics.RecordLongRunning(req, requestInfo, func() { + metrics.RecordLongRunning(req, requestInfo, metrics.APIServerComponent, func() { serveWatch(watcher, scope, req, w, timeout) }) return @@ -267,22 +271,9 @@ func ListResource(r rest.Lister, rw rest.Watcher, scope RequestScope, forceWatch return } trace.Step("Listing from storage done") - numberOfItems, err := setListSelfLink(result, ctx, req, scope.Namer) - if err != nil { - scope.err(err, w, req) - return - } - trace.Step("Self-linking done") - // Ensure empty lists return a non-nil items slice - if numberOfItems == 0 && meta.IsListType(result) { - if err := meta.SetList(result, []runtime.Object{}); err != nil { - scope.err(err, w, req) - return - } - } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, http.StatusOK, result) - trace.Step(fmt.Sprintf("Writing http response done (%d items)", numberOfItems)) + transformResponseObject(ctx, scope, req, w, http.StatusOK, outputMediaType, result) + trace.Step(fmt.Sprintf("Writing http response done (%d items)", meta.LenList(result))) } } diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/BUILD b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/BUILD index a3f78ce9357..784fed6eb3c 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/BUILD +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/BUILD @@ -29,7 +29,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//vendor/bitbucket.org/ww/goautoneg:go_default_library", + "//vendor/github.com/munnerz/goautoneg:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/errors.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/errors.go index 93b17cfb097..9a38abddbcc 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/errors.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/errors.go @@ -29,6 +29,7 @@ type errNotAcceptable struct { accepted []string } +// NewNotAcceptableError returns an error of NotAcceptable which contains specified string func NewNotAcceptableError(accepted []string) error { return errNotAcceptable{accepted} } @@ -51,6 +52,7 @@ type errUnsupportedMediaType struct { accepted []string } +// NewUnsupportedMediaTypeError returns an error of UnsupportedMediaType which contains specified string func NewUnsupportedMediaTypeError(accepted []string) error { return errUnsupportedMediaType{accepted} } diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/negotiate.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/negotiate.go index f9bb47babca..ec8861cc63f 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/negotiate.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/negotiate.go @@ -22,7 +22,7 @@ import ( "strconv" "strings" - "bitbucket.org/ww/goautoneg" + "github.com/munnerz/goautoneg" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -133,6 +133,8 @@ type EndpointRestrictions interface { AllowsStreamSchema(schema string) bool } +// DefaultEndpointRestrictions is the default EndpointRestrictions which allows +// content-type negotiation to verify server support for specific options var DefaultEndpointRestrictions = emptyEndpointRestrictions{} type emptyEndpointRestrictions struct{} diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go index e06dcdcf5c7..383230c8a7a 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go @@ -24,8 +24,8 @@ import ( "time" "github.com/evanphx/json-patch" - "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/validation" @@ -38,13 +38,14 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/audit" + "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/util/dryrun" utilfeature "k8s.io/apiserver/pkg/util/feature" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) const ( @@ -93,20 +94,26 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface ctx := req.Context() ctx = request.WithNamespace(ctx, namespace) - patchJS, err := limitedReadBody(req, scope.MaxRequestBodyBytes) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) if err != nil { scope.err(err, w, req) return } - options := &metav1.UpdateOptions{} + patchBytes, err := limitedReadBody(req, scope.MaxRequestBodyBytes) + if err != nil { + scope.err(err, w, req) + return + } + + options := &metav1.PatchOptions{} if err := metainternalversion.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, options); err != nil { err = errors.NewBadRequest(err.Error()) scope.err(err, w, req) return } - if errs := validation.ValidateUpdateOptions(options); len(errs) > 0 { - err := errors.NewInvalid(schema.GroupKind{Group: metav1.GroupName, Kind: "UpdateOptions"}, "", errs) + if errs := validation.ValidatePatchOptions(options, patchType); len(errs) > 0 { + err := errors.NewInvalid(schema.GroupKind{Group: metav1.GroupName, Kind: "PatchOptions"}, "", errs) scope.err(err, w, req) return } @@ -114,12 +121,13 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface ae := request.AuditEventFrom(ctx) admit = admission.WithAudit(admit, ae) - audit.LogRequestPatch(ae, patchJS) + audit.LogRequestPatch(ae, patchBytes) trace.Step("Recorded the audit event") - s, ok := runtime.SerializerInfoForMediaType(scope.Serializer.SupportedMediaTypes(), runtime.ContentTypeJSON) + baseContentType := runtime.ContentTypeJSON + s, ok := runtime.SerializerInfoForMediaType(scope.Serializer.SupportedMediaTypes(), baseContentType) if !ok { - scope.err(fmt.Errorf("no serializer defined for JSON"), w, req) + scope.err(fmt.Errorf("no serializer defined for %v", baseContentType), w, req) return } gv := scope.Kind.GroupVersion() @@ -130,7 +138,18 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface ) userInfo, _ := request.UserFrom(ctx) - staticAdmissionAttributes := admission.NewAttributesRecord( + staticCreateAttributes := admission.NewAttributesRecord( + nil, + nil, + scope.Kind, + namespace, + name, + scope.Resource, + scope.Subresource, + admission.Create, + dryrun.IsDryRun(options.DryRun), + userInfo) + staticUpdateAttributes := admission.NewAttributesRecord( nil, nil, scope.Kind, @@ -142,38 +161,39 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface dryrun.IsDryRun(options.DryRun), userInfo, ) - admissionCheck := func(updatedObject runtime.Object, currentObject runtime.Object) error { - // if we allow create-on-patch, we have this TODO: call the mutating admission chain with the CREATE verb instead of UPDATE - if mutatingAdmission, ok := admit.(admission.MutationInterface); ok && admit.Handles(admission.Update) { - return mutatingAdmission.Admit(admission.NewAttributesRecord( - updatedObject, - currentObject, - scope.Kind, - namespace, - name, - scope.Resource, - scope.Subresource, - admission.Update, - dryrun.IsDryRun(options.DryRun), - userInfo, - )) - } - return nil + + mutatingAdmission, _ := admit.(admission.MutationInterface) + createAuthorizerAttributes := authorizer.AttributesRecord{ + User: userInfo, + ResourceRequest: true, + Path: req.URL.Path, + Verb: "create", + APIGroup: scope.Resource.Group, + APIVersion: scope.Resource.Version, + Resource: scope.Resource.Resource, + Subresource: scope.Subresource, + Namespace: namespace, + Name: name, } p := patcher{ namer: scope.Namer, creater: scope.Creater, defaulter: scope.Defaulter, + typer: scope.Typer, unsafeConvertor: scope.UnsafeConvertor, kind: scope.Kind, resource: scope.Resource, + subresource: scope.Subresource, + dryRun: dryrun.IsDryRun(options.DryRun), + + objectInterfaces: &scope, hubGroupVersion: scope.HubGroupVersion, - createValidation: rest.AdmissionToValidateObjectFunc(admit, staticAdmissionAttributes), - updateValidation: rest.AdmissionToValidateObjectUpdateFunc(admit, staticAdmissionAttributes), - admissionCheck: admissionCheck, + createValidation: withAuthorization(rest.AdmissionToValidateObjectFunc(admit, staticCreateAttributes, &scope), scope.Authorizer, createAuthorizerAttributes), + updateValidation: rest.AdmissionToValidateObjectUpdateFunc(admit, staticUpdateAttributes, &scope), + admissionCheck: mutatingAdmission, codec: codec, @@ -183,12 +203,13 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface restPatcher: r, name: name, patchType: patchType, - patchJS: patchJS, + patchBytes: patchBytes, + userAgent: req.UserAgent(), trace: trace, } - result, err := p.patchResource(ctx) + result, wasCreated, err := p.patchResource(ctx, scope) if err != nil { scope.err(err, w, req) return @@ -206,8 +227,12 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface } trace.Step("Self-link added") + status := http.StatusOK + if wasCreated { + status = http.StatusCreated + } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, http.StatusOK, result) + transformResponseObject(ctx, scope, req, w, status, outputMediaType, result) } } @@ -223,27 +248,33 @@ type patcher struct { namer ScopeNamer creater runtime.ObjectCreater defaulter runtime.ObjectDefaulter + typer runtime.ObjectTyper unsafeConvertor runtime.ObjectConvertor resource schema.GroupVersionResource kind schema.GroupVersionKind + subresource string + dryRun bool + + objectInterfaces admission.ObjectInterfaces hubGroupVersion schema.GroupVersion // Validation functions createValidation rest.ValidateObjectFunc updateValidation rest.ValidateObjectUpdateFunc - admissionCheck mutateObjectUpdateFunc + admissionCheck admission.MutationInterface codec runtime.Codec timeout time.Duration - options *metav1.UpdateOptions + options *metav1.PatchOptions // Operation information restPatcher rest.Patcher name string patchType types.PatchType - patchJS []byte + patchBytes []byte + userAgent string trace *utiltrace.Trace @@ -251,10 +282,12 @@ type patcher struct { namespace string updatedObjectInfo rest.UpdatedObjectInfo mechanism patchMechanism + forceAllowCreate bool } type patchMechanism interface { applyPatchToCurrentObject(currentObject runtime.Object) (runtime.Object, error) + createNewObject() (runtime.Object, error) } type jsonPatcher struct { @@ -283,12 +316,16 @@ func (p *jsonPatcher) applyPatchToCurrentObject(currentObject runtime.Object) (r return objToUpdate, nil } -// patchJS applies the patch. Input and output objects must both have +func (p *jsonPatcher) createNewObject() (runtime.Object, error) { + return nil, errors.NewNotFound(p.resource.GroupResource(), p.name) +} + +// applyJSPatch applies the patch. Input and output objects must both have // the external version, since that is what the patch must have been constructed against. func (p *jsonPatcher) applyJSPatch(versionedJS []byte) (patchedJS []byte, retErr error) { switch p.patchType { case types.JSONPatchType: - patchObj, err := jsonpatch.DecodePatch(p.patchJS) + patchObj, err := jsonpatch.DecodePatch(p.patchBytes) if err != nil { return nil, errors.NewBadRequest(err.Error()) } @@ -303,7 +340,7 @@ func (p *jsonPatcher) applyJSPatch(versionedJS []byte) (patchedJS []byte, retErr } return patchedJS, nil case types.MergePatchType: - return jsonpatch.MergePatch(versionedJS, p.patchJS) + return jsonpatch.MergePatch(versionedJS, p.patchBytes) default: // only here as a safety net - go-restful filters content-type return nil, fmt.Errorf("unknown Content-Type header for patch: %v", p.patchType) @@ -328,22 +365,31 @@ func (p *smpPatcher) applyPatchToCurrentObject(currentObject runtime.Object) (ru if err != nil { return nil, err } - if err := strategicPatchObject(p.defaulter, currentVersionedObject, p.patchJS, versionedObjToUpdate, p.schemaReferenceObj); err != nil { + if err := strategicPatchObject(p.defaulter, currentVersionedObject, p.patchBytes, versionedObjToUpdate, p.schemaReferenceObj); err != nil { return nil, err } // Convert the object back to the hub version - return p.unsafeConvertor.ConvertToVersion(versionedObjToUpdate, p.hubGroupVersion) + newObj, err := p.unsafeConvertor.ConvertToVersion(versionedObjToUpdate, p.hubGroupVersion) + if err != nil { + return nil, err + } + + return newObj, nil } -// strategicPatchObject applies a strategic merge patch of to +func (p *smpPatcher) createNewObject() (runtime.Object, error) { + return nil, errors.NewNotFound(p.resource.GroupResource(), p.name) +} + +// strategicPatchObject applies a strategic merge patch of to // and stores the result in . // It additionally returns the map[string]interface{} representation of the -// and . +// and . // NOTE: Both and are supposed to be versioned. func strategicPatchObject( defaulter runtime.ObjectDefaulter, originalObject runtime.Object, - patchJS []byte, + patchBytes []byte, objToUpdate runtime.Object, schemaReferenceObj runtime.Object, ) error { @@ -353,7 +399,7 @@ func strategicPatchObject( } patchMap := make(map[string]interface{}) - if err := json.Unmarshal(patchJS, &patchMap); err != nil { + if err := json.Unmarshal(patchBytes, &patchMap); err != nil { return errors.NewBadRequest(err.Error()) } @@ -365,52 +411,102 @@ func strategicPatchObject( // applyPatch is called every time GuaranteedUpdate asks for the updated object, // and is given the currently persisted object as input. -func (p *patcher) applyPatch(_ context.Context, _, currentObject runtime.Object) (runtime.Object, error) { +// TODO: rename this function because the name implies it is related to applyPatcher +func (p *patcher) applyPatch(_ context.Context, _, currentObject runtime.Object) (objToUpdate runtime.Object, patchErr error) { // Make sure we actually have a persisted currentObject p.trace.Step("About to apply patch") - if hasUID, err := hasUID(currentObject); err != nil { + currentObjectHasUID, err := hasUID(currentObject) + if err != nil { return nil, err - } else if !hasUID { - return nil, errors.NewNotFound(p.resource.GroupResource(), p.name) + } else if !currentObjectHasUID { + objToUpdate, patchErr = p.mechanism.createNewObject() + } else { + objToUpdate, patchErr = p.mechanism.applyPatchToCurrentObject(currentObject) } - objToUpdate, err := p.mechanism.applyPatchToCurrentObject(currentObject) + if patchErr != nil { + return nil, patchErr + } + + objToUpdateHasUID, err := hasUID(objToUpdate) if err != nil { return nil, err } + if objToUpdateHasUID && !currentObjectHasUID { + accessor, err := meta.Accessor(objToUpdate) + if err != nil { + return nil, err + } + return nil, errors.NewConflict(p.resource.GroupResource(), p.name, fmt.Errorf("uid mismatch: the provided object specified uid %s, and no existing object was found", accessor.GetUID())) + } + if err := checkName(objToUpdate, p.name, p.namespace, p.namer); err != nil { return nil, err } return objToUpdate, nil } +func (p *patcher) admissionAttributes(ctx context.Context, updatedObject runtime.Object, currentObject runtime.Object, operation admission.Operation) admission.Attributes { + userInfo, _ := request.UserFrom(ctx) + return admission.NewAttributesRecord(updatedObject, currentObject, p.kind, p.namespace, p.name, p.resource, p.subresource, operation, p.dryRun, userInfo) +} + // applyAdmission is called every time GuaranteedUpdate asks for the updated object, // and is given the currently persisted object and the patched object as input. +// TODO: rename this function because the name implies it is related to applyPatcher func (p *patcher) applyAdmission(ctx context.Context, patchedObject runtime.Object, currentObject runtime.Object) (runtime.Object, error) { p.trace.Step("About to check admission control") - return patchedObject, p.admissionCheck(patchedObject, currentObject) + var operation admission.Operation + if hasUID, err := hasUID(currentObject); err != nil { + return nil, err + } else if !hasUID { + operation = admission.Create + currentObject = nil + } else { + operation = admission.Update + } + if p.admissionCheck != nil && p.admissionCheck.Handles(operation) { + attributes := p.admissionAttributes(ctx, patchedObject, currentObject, operation) + return patchedObject, p.admissionCheck.Admit(attributes, p.objectInterfaces) + } + return patchedObject, nil } // patchResource divides PatchResource for easier unit testing -func (p *patcher) patchResource(ctx context.Context) (runtime.Object, error) { +func (p *patcher) patchResource(ctx context.Context, scope RequestScope) (runtime.Object, bool, error) { p.namespace = request.NamespaceValue(ctx) switch p.patchType { case types.JSONPatchType, types.MergePatchType: - p.mechanism = &jsonPatcher{patcher: p} + p.mechanism = &jsonPatcher{ + patcher: p, + } case types.StrategicMergePatchType: schemaReferenceObj, err := p.unsafeConvertor.ConvertToVersion(p.restPatcher.New(), p.kind.GroupVersion()) + if err != nil { + return nil, false, err + } + p.mechanism = &smpPatcher{ + patcher: p, + schemaReferenceObj: schemaReferenceObj, + } + // this case is unreachable if ServerSideApply is not enabled because we will have already rejected the content type + default: + return nil, false, fmt.Errorf("%v: unimplemented patch type", p.patchType) + } + + wasCreated := false + p.updatedObjectInfo = rest.DefaultUpdatedObjectInfo(nil, p.applyPatch, p.applyAdmission) + result, err := finishRequest(p.timeout, func() (runtime.Object, error) { + // TODO: Pass in UpdateOptions to override UpdateStrategy.AllowUpdateOnCreate + options, err := patchToUpdateOptions(p.options) if err != nil { return nil, err } - p.mechanism = &smpPatcher{patcher: p, schemaReferenceObj: schemaReferenceObj} - default: - return nil, fmt.Errorf("%v: unimplemented patch type", p.patchType) - } - p.updatedObjectInfo = rest.DefaultUpdatedObjectInfo(nil, p.applyPatch, p.applyAdmission) - return finishRequest(p.timeout, func() (runtime.Object, error) { - updateObject, _, updateErr := p.restPatcher.Update(ctx, p.name, p.updatedObjectInfo, p.createValidation, p.updateValidation, false, p.options) + updateObject, created, updateErr := p.restPatcher.Update(ctx, p.name, p.updatedObjectInfo, p.createValidation, p.updateValidation, p.forceAllowCreate, options) + wasCreated = created return updateObject, updateErr }) + return result, wasCreated, err } // applyPatchToObject applies a strategic merge patch of to @@ -449,3 +545,13 @@ func interpretStrategicMergePatchError(err error) error { return err } } + +func patchToUpdateOptions(po *metav1.PatchOptions) (*metav1.UpdateOptions, error) { + b, err := json.Marshal(po) + if err != nil { + return nil, err + } + uo := metav1.UpdateOptions{} + err = json.Unmarshal(b, &uo) + return &uo, err +} diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go index e140c081746..f9f363840f7 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go @@ -27,160 +27,85 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" ) // transformResponseObject takes an object loaded from storage and performs any necessary transformations. // Will write the complete response object. -func transformResponseObject(ctx context.Context, scope RequestScope, req *http.Request, w http.ResponseWriter, statusCode int, result runtime.Object) { - // TODO: fetch the media type much earlier in request processing and pass it into this method. - trace := scope.Trace - mediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) - if err != nil { - status := responsewriters.ErrorToAPIStatus(err) - trace.Step("Writing raw JSON response") - responsewriters.WriteRawJSON(int(status.Code), status, w) +func transformResponseObject(ctx context.Context, scope RequestScope, req *http.Request, w http.ResponseWriter, statusCode int, mediaType negotiation.MediaTypeOptions, result runtime.Object) { + // status objects are ignored for transformation + if _, ok := result.(*metav1.Status); ok { + responsewriters.WriteObject(statusCode, scope.Kind.GroupVersion(), scope.Serializer, result, w, req) return } - // If conversion was allowed by the scope, perform it before writing the response - if target := mediaType.Convert; target != nil { - switch { - - case target.Kind == "PartialObjectMetadata" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: - if meta.IsListType(result) { - // TODO: this should be calculated earlier - err = newNotAcceptableError(fmt.Sprintf("you requested PartialObjectMetadata, but the requested object is a list (%T)", result)) - scope.err(err, w, req) - return - } - m, err := meta.Accessor(result) - if err != nil { - scope.err(err, w, req) - return - } - partial := meta.AsPartialObjectMetadata(m) - partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) - - // renegotiate under the internal version - _, info, err := negotiation.NegotiateOutputMediaType(req, metainternalversion.Codecs, &scope) - if err != nil { - scope.err(err, w, req) - return - } - encoder := metainternalversion.Codecs.EncoderForVersion(info.Serializer, metav1beta1.SchemeGroupVersion) - trace.Step(fmt.Sprintf("Serializing response as type %s", info.MediaType)) - responsewriters.SerializeObject(info.MediaType, encoder, w, req, statusCode, partial) - return - - case target.Kind == "PartialObjectMetadataList" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: - if !meta.IsListType(result) { - // TODO: this should be calculated earlier - err = newNotAcceptableError(fmt.Sprintf("you requested PartialObjectMetadataList, but the requested object is not a list (%T)", result)) - scope.err(err, w, req) - return - } - list := &metav1beta1.PartialObjectMetadataList{} - trace.Step("Processing list items") - err := meta.EachListItem(result, func(obj runtime.Object) error { - m, err := meta.Accessor(obj) - if err != nil { - return err - } - partial := meta.AsPartialObjectMetadata(m) - partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) - list.Items = append(list.Items, partial) - return nil - }) - if err != nil { - scope.err(err, w, req) - return - } - - // renegotiate under the internal version - _, info, err := negotiation.NegotiateOutputMediaType(req, metainternalversion.Codecs, &scope) - if err != nil { - scope.err(err, w, req) - return - } - encoder := metainternalversion.Codecs.EncoderForVersion(info.Serializer, metav1beta1.SchemeGroupVersion) - trace.Step(fmt.Sprintf("Serializing response as type %s", info.MediaType)) - responsewriters.SerializeObject(info.MediaType, encoder, w, req, statusCode, list) - return - - case target.Kind == "Table" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: - // TODO: relax the version abstraction - // TODO: skip if this is a status response (delete without body)? - - opts := &metav1beta1.TableOptions{} - trace.Step("Decoding parameters") - if err := metav1beta1.ParameterCodec.DecodeParameters(req.URL.Query(), metav1beta1.SchemeGroupVersion, opts); err != nil { - scope.err(err, w, req) - return - } - - trace.Step("Converting to table") - table, err := scope.TableConvertor.ConvertToTable(ctx, result, opts) - if err != nil { - scope.err(err, w, req) - return - } - - trace.Step("Processing rows") - for i := range table.Rows { - item := &table.Rows[i] - switch opts.IncludeObject { - case metav1beta1.IncludeObject: - item.Object.Object, err = scope.Convertor.ConvertToVersion(item.Object.Object, scope.Kind.GroupVersion()) - if err != nil { - scope.err(err, w, req) - return - } - // TODO: rely on defaulting for the value here? - case metav1beta1.IncludeMetadata, "": - m, err := meta.Accessor(item.Object.Object) - if err != nil { - scope.err(err, w, req) - return - } - // TODO: turn this into an internal type and do conversion in order to get object kind automatically set? - partial := meta.AsPartialObjectMetadata(m) - partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) - item.Object.Object = partial - case metav1beta1.IncludeNone: - item.Object.Object = nil - default: - // TODO: move this to validation on the table options? - err = errors.NewBadRequest(fmt.Sprintf("unrecognized includeObject value: %q", opts.IncludeObject)) - scope.err(err, w, req) - } - } - - // renegotiate under the internal version - _, info, err := negotiation.NegotiateOutputMediaType(req, metainternalversion.Codecs, &scope) - if err != nil { - scope.err(err, w, req) - return - } - encoder := metainternalversion.Codecs.EncoderForVersion(info.Serializer, metav1beta1.SchemeGroupVersion) - trace.Step(fmt.Sprintf("Serializing response as type %s", info.MediaType)) - responsewriters.SerializeObject(info.MediaType, encoder, w, req, statusCode, table) - return - - default: - // this block should only be hit if scope AllowsConversion is incorrect - accepted, _ := negotiation.MediaTypesForSerializer(metainternalversion.Codecs) - err := negotiation.NewNotAcceptableError(accepted) - status := responsewriters.ErrorToAPIStatus(err) - trace.Step("Writing raw JSON response") - responsewriters.WriteRawJSON(int(status.Code), status, w) - return - } + // ensure the self link and empty list array are set + if err := setObjectSelfLink(ctx, result, req, scope.Namer); err != nil { + scope.err(err, w, req) + return } - trace.Step("Writing response") - responsewriters.WriteObject(statusCode, scope.Kind.GroupVersion(), scope.Serializer, result, w, req) + trace := scope.Trace + + // If conversion was allowed by the scope, perform it before writing the response + switch target := mediaType.Convert; { + + case target == nil: + trace.Step("Writing response") + responsewriters.WriteObject(statusCode, scope.Kind.GroupVersion(), scope.Serializer, result, w, req) + + case target.Kind == "PartialObjectMetadata" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: + partial, err := asV1Beta1PartialObjectMetadata(result) + if err != nil { + scope.err(err, w, req) + return + } + + if err := writeMetaInternalVersion(partial, statusCode, w, req, &scope, target.GroupVersion()); err != nil { + scope.err(err, w, req) + return + } + + case target.Kind == "PartialObjectMetadataList" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: + trace.Step("Processing list items") + partial, err := asV1Beta1PartialObjectMetadataList(result) + if err != nil { + scope.err(err, w, req) + return + } + + if err := writeMetaInternalVersion(partial, statusCode, w, req, &scope, target.GroupVersion()); err != nil { + scope.err(err, w, req) + return + } + + case target.Kind == "Table" && target.GroupVersion() == metav1beta1.SchemeGroupVersion: + opts := &metav1beta1.TableOptions{} + trace.Step("Decoding parameters") + if err := metav1beta1.ParameterCodec.DecodeParameters(req.URL.Query(), metav1beta1.SchemeGroupVersion, opts); err != nil { + scope.err(err, w, req) + return + } + + table, err := asV1Beta1Table(ctx, result, opts, scope) + if err != nil { + scope.err(err, w, req) + return + } + + if err := writeMetaInternalVersion(table, statusCode, w, req, &scope, target.GroupVersion()); err != nil { + scope.err(err, w, req) + return + } + + default: + // this block should only be hit if scope AllowsConversion is incorrect + accepted, _ := negotiation.MediaTypesForSerializer(metainternalversion.Codecs) + err := negotiation.NewNotAcceptableError(accepted) + scope.err(err, w, req) + } } // errNotAcceptable indicates Accept negotiation has failed @@ -204,3 +129,91 @@ func (e errNotAcceptable) Status() metav1.Status { Message: e.Error(), } } + +func asV1Beta1Table(ctx context.Context, result runtime.Object, opts *metav1beta1.TableOptions, scope RequestScope) (runtime.Object, error) { + trace := scope.Trace + + trace.Step("Converting to table") + table, err := scope.TableConvertor.ConvertToTable(ctx, result, opts) + if err != nil { + return nil, err + } + + trace.Step("Processing rows") + for i := range table.Rows { + item := &table.Rows[i] + switch opts.IncludeObject { + case metav1beta1.IncludeObject: + item.Object.Object, err = scope.Convertor.ConvertToVersion(item.Object.Object, scope.Kind.GroupVersion()) + if err != nil { + return nil, err + } + // TODO: rely on defaulting for the value here? + case metav1beta1.IncludeMetadata, "": + m, err := meta.Accessor(item.Object.Object) + if err != nil { + return nil, err + } + // TODO: turn this into an internal type and do conversion in order to get object kind automatically set? + partial := meta.AsPartialObjectMetadata(m) + partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) + item.Object.Object = partial + case metav1beta1.IncludeNone: + item.Object.Object = nil + default: + // TODO: move this to validation on the table options? + err = errors.NewBadRequest(fmt.Sprintf("unrecognized includeObject value: %q", opts.IncludeObject)) + return nil, err + } + } + + return table, nil +} + +func asV1Beta1PartialObjectMetadata(result runtime.Object) (runtime.Object, error) { + if meta.IsListType(result) { + // TODO: this should be calculated earlier + err := newNotAcceptableError(fmt.Sprintf("you requested PartialObjectMetadata, but the requested object is a list (%T)", result)) + return nil, err + } + m, err := meta.Accessor(result) + if err != nil { + return nil, err + } + partial := meta.AsPartialObjectMetadata(m) + partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) + return partial, nil +} + +func asV1Beta1PartialObjectMetadataList(result runtime.Object) (runtime.Object, error) { + if !meta.IsListType(result) { + // TODO: this should be calculated earlier + return nil, newNotAcceptableError(fmt.Sprintf("you requested PartialObjectMetadataList, but the requested object is not a list (%T)", result)) + } + list := &metav1beta1.PartialObjectMetadataList{} + err := meta.EachListItem(result, func(obj runtime.Object) error { + m, err := meta.Accessor(obj) + if err != nil { + return err + } + partial := meta.AsPartialObjectMetadata(m) + partial.GetObjectKind().SetGroupVersionKind(metav1beta1.SchemeGroupVersion.WithKind("PartialObjectMetadata")) + list.Items = append(list.Items, partial) + return nil + }) + if err != nil { + return nil, err + } + return list, nil +} + +func writeMetaInternalVersion(obj runtime.Object, statusCode int, w http.ResponseWriter, req *http.Request, restrictions negotiation.EndpointRestrictions, target schema.GroupVersion) error { + // renegotiate under the internal version + _, info, err := negotiation.NegotiateOutputMediaType(req, metainternalversion.Codecs, restrictions) + if err != nil { + return err + } + encoder := metainternalversion.Codecs.EncoderForVersion(info.Serializer, target) + responsewriters.SerializeObject(info.MediaType, encoder, w, req, statusCode, obj) + return nil +} diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/status.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/status.go index 99673077b2b..5a845435033 100755 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/status.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/status.go @@ -38,11 +38,18 @@ func ErrorToAPIStatus(err error) *metav1.Status { if len(status.Status) == 0 { status.Status = metav1.StatusFailure } - if status.Code == 0 { - switch status.Status { - case metav1.StatusSuccess: + switch status.Status { + case metav1.StatusSuccess: + if status.Code == 0 { status.Code = http.StatusOK - case metav1.StatusFailure: + } + case metav1.StatusFailure: + if status.Code == 0 { + status.Code = http.StatusInternalServerError + } + default: + runtime.HandleError(fmt.Errorf("apiserver received an error with wrong status field : %#+v", err)) + if status.Code == 0 { status.Code = http.StatusInternalServerError } } diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go index fd335b5d7e5..5a811401cf3 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go @@ -64,7 +64,7 @@ func WriteObject(statusCode int, gv schema.GroupVersion, s runtime.NegotiatedSer stream, ok := object.(rest.ResourceStreamer) if ok { requestInfo, _ := request.RequestInfoFrom(req.Context()) - metrics.RecordLongRunning(req, requestInfo, func() { + metrics.RecordLongRunning(req, requestInfo, metrics.APIServerComponent, func() { StreamObject(statusCode, gv, s, stream, w, req) }) return @@ -101,6 +101,10 @@ func StreamObject(statusCode int, gv schema.GroupVersion, s runtime.NegotiatedSe } w.Header().Set("Content-Type", contentType) w.WriteHeader(statusCode) + // Flush headers, if possible + if flusher, ok := w.(http.Flusher); ok { + flusher.Flush() + } writer := w.(io.Writer) if flush { writer = flushwriter.Wrap(w) diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go index de829fa611f..2fe27b8244c 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go @@ -28,8 +28,6 @@ import ( "strings" "time" - "k8s.io/klog" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -42,7 +40,8 @@ import ( "k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" - utiltrace "k8s.io/apiserver/pkg/util/trace" + "k8s.io/klog" + utiltrace "k8s.io/utils/trace" ) // RequestScope encapsulates common fields across all RESTful handler methods. @@ -102,6 +101,13 @@ func (scope *RequestScope) AllowsStreamSchema(s string) bool { return s == "watch" } +var _ admission.ObjectInterfaces = &RequestScope{} + +func (r *RequestScope) GetObjectCreater() runtime.ObjectCreater { return r.Creater } +func (r *RequestScope) GetObjectTyper() runtime.ObjectTyper { return r.Typer } +func (r *RequestScope) GetObjectDefaulter() runtime.ObjectDefaulter { return r.Defaulter } +func (r *RequestScope) GetObjectConvertor() runtime.ObjectConvertor { return r.Convertor } + // ConnectResource returns a function that handles a connect request on a rest.Storage object. func ConnectResource(connecter rest.Connecter, scope RequestScope, admit admission.Interface, restPath string, isSubresource bool) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { @@ -130,14 +136,14 @@ func ConnectResource(connecter rest.Connecter, scope RequestScope, admit admissi userInfo, _ := request.UserFrom(ctx) // TODO: remove the mutating admission here as soon as we have ported all plugin that handle CONNECT if mutatingAdmission, ok := admit.(admission.MutationInterface); ok { - err = mutatingAdmission.Admit(admission.NewAttributesRecord(opts, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Connect, false, userInfo)) + err = mutatingAdmission.Admit(admission.NewAttributesRecord(opts, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Connect, false, userInfo), &scope) if err != nil { scope.err(err, w, req) return } } if validatingAdmission, ok := admit.(admission.ValidationInterface); ok { - err = validatingAdmission.Validate(admission.NewAttributesRecord(opts, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Connect, false, userInfo)) + err = validatingAdmission.Validate(admission.NewAttributesRecord(opts, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Connect, false, userInfo), &scope) if err != nil { scope.err(err, w, req) return @@ -145,7 +151,7 @@ func ConnectResource(connecter rest.Connecter, scope RequestScope, admit admissi } } requestInfo, _ := request.RequestInfoFrom(ctx) - metrics.RecordLongRunning(req, requestInfo, func() { + metrics.RecordLongRunning(req, requestInfo, metrics.APIServerComponent, func() { handler, err := connecter.Connect(ctx, name, opts, &responder{scope: scope, req: req, w: w}) if err != nil { scope.err(err, w, req) @@ -281,23 +287,26 @@ func checkName(obj runtime.Object, name, namespace string, namer ScopeNamer) err return nil } -// setListSelfLink sets the self link of a list to the base URL, then sets the self links -// on all child objects returned. Returns the number of items in the list. -func setListSelfLink(obj runtime.Object, ctx context.Context, req *http.Request, namer ScopeNamer) (int, error) { +// setObjectSelfLink sets the self link of an object as needed. +func setObjectSelfLink(ctx context.Context, obj runtime.Object, req *http.Request, namer ScopeNamer) error { if !meta.IsListType(obj) { - return 0, nil + requestInfo, ok := request.RequestInfoFrom(ctx) + if !ok { + return fmt.Errorf("missing requestInfo") + } + return setSelfLink(obj, requestInfo, namer) } uri, err := namer.GenerateListLink(req) if err != nil { - return 0, err + return err } if err := namer.SetSelfLink(obj, uri); err != nil { klog.V(4).Infof("Unable to set self link on object: %v", err) } requestInfo, ok := request.RequestInfoFrom(ctx) if !ok { - return 0, fmt.Errorf("missing requestInfo") + return fmt.Errorf("missing requestInfo") } count := 0 @@ -305,7 +314,14 @@ func setListSelfLink(obj runtime.Object, ctx context.Context, req *http.Request, count++ return setSelfLink(obj, requestInfo, namer) }) - return count, err + + if count == 0 { + if err := meta.SetList(obj, []runtime.Object{}); err != nil { + return err + } + } + + return err } func summarizeData(data []byte, maxLength int) string { diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go index f6bbd061a6b..23cb916a351 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go @@ -38,7 +38,7 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/util/dryrun" utilfeature "k8s.io/apiserver/pkg/util/feature" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) // UpdateResource returns a function that will handle a resource update @@ -64,6 +64,12 @@ func UpdateResource(r rest.Updater, scope RequestScope, admit admission.Interfac ctx := req.Context() ctx = request.WithNamespace(ctx, namespace) + outputMediaType, _, err := negotiation.NegotiateOutputMediaType(req, scope.Serializer, &scope) + if err != nil { + scope.err(err, w, req) + return + } + body, err := limitedReadBody(req, scope.MaxRequestBodyBytes) if err != nil { scope.err(err, w, req) @@ -115,7 +121,7 @@ func UpdateResource(r rest.Updater, scope RequestScope, admit admission.Interfac } userInfo, _ := request.UserFrom(ctx) - var transformers []rest.TransformFunc + transformers := []rest.TransformFunc{} if mutatingAdmission, ok := admit.(admission.MutationInterface); ok { transformers = append(transformers, func(ctx context.Context, newObj, oldObj runtime.Object) (runtime.Object, error) { isNotZeroObject, err := hasUID(oldObj) @@ -123,11 +129,11 @@ func UpdateResource(r rest.Updater, scope RequestScope, admit admission.Interfac return nil, fmt.Errorf("unexpected error when extracting UID from oldObj: %v", err.Error()) } else if !isNotZeroObject { if mutatingAdmission.Handles(admission.Create) { - return newObj, mutatingAdmission.Admit(admission.NewAttributesRecord(newObj, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, dryrun.IsDryRun(options.DryRun), userInfo)) + return newObj, mutatingAdmission.Admit(admission.NewAttributesRecord(newObj, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, dryrun.IsDryRun(options.DryRun), userInfo), &scope) } } else { if mutatingAdmission.Handles(admission.Update) { - return newObj, mutatingAdmission.Admit(admission.NewAttributesRecord(newObj, oldObj, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, dryrun.IsDryRun(options.DryRun), userInfo)) + return newObj, mutatingAdmission.Admit(admission.NewAttributesRecord(newObj, oldObj, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, dryrun.IsDryRun(options.DryRun), userInfo), &scope) } } return newObj, nil @@ -157,11 +163,11 @@ func UpdateResource(r rest.Updater, scope RequestScope, admit admission.Interfac rest.DefaultUpdatedObjectInfo(obj, transformers...), withAuthorization(rest.AdmissionToValidateObjectFunc( admit, - admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, dryrun.IsDryRun(options.DryRun), userInfo)), + admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, dryrun.IsDryRun(options.DryRun), userInfo), &scope), scope.Authorizer, createAuthorizerAttributes), rest.AdmissionToValidateObjectUpdateFunc( admit, - admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, dryrun.IsDryRun(options.DryRun), userInfo)), + admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, dryrun.IsDryRun(options.DryRun), userInfo), &scope), false, options, ) @@ -174,24 +180,13 @@ func UpdateResource(r rest.Updater, scope RequestScope, admit admission.Interfac } trace.Step("Object stored in database") - requestInfo, ok := request.RequestInfoFrom(ctx) - if !ok { - scope.err(fmt.Errorf("missing requestInfo"), w, req) - return - } - if err := setSelfLink(result, requestInfo, scope.Namer); err != nil { - scope.err(err, w, req) - return - } - trace.Step("Self-link added") - status := http.StatusOK if wasCreated { status = http.StatusCreated } scope.Trace = trace - transformResponseObject(ctx, scope, req, w, status, result) + transformResponseObject(ctx, scope, req, w, status, outputMediaType, result) } } diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go old mode 100755 new mode 100644 diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/installer.go b/vendor/k8s.io/apiserver/pkg/endpoints/installer.go index 21a142b1045..0b7c65a8f3b 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/installer.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/installer.go @@ -27,7 +27,6 @@ import ( "unicode" "github.com/emicklei/go-restful" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" @@ -46,9 +45,9 @@ const ( ) type APIInstaller struct { - group *APIGroupVersion - prefix string // Path prefix where API resources are to be registered. - minRequestTimeout time.Duration + group *APIGroupVersion + prefix string // Path prefix where API resources are to be registered. + minRequestTimeout time.Duration } // Struct capturing information about an action ("GET", "POST", "WATCH", "PROXY", etc). @@ -174,6 +173,8 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag return nil, err } + group, version := a.group.GroupVersion.Group, a.group.GroupVersion.Version + fqKindToRegister, err := GetResourceKind(a.group.GroupVersion, storage, a.group.Typer) if err != nil { return nil, err @@ -260,6 +261,10 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if err != nil { return nil, err } + versionedPatchOptions, err := a.group.Creater.New(optionsExternalVersion.WithKind("PatchOptions")) + if err != nil { + return nil, err + } versionedUpdateOptions, err := a.group.Creater.New(optionsExternalVersion.WithKind("UpdateOptions")) if err != nil { return nil, err @@ -355,6 +360,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag tableProvider, _ := storage.(rest.TableConvertor) var apiResource metav1.APIResource + // Get the list of actions for the given scope. switch { case !namespaceScoped: @@ -401,7 +407,6 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag actions = appendIf(actions, action{"WATCH", "watch/" + itemPath, nameParams, namer, false}, isWatcher) actions = appendIf(actions, action{"CONNECT", itemPath, nameParams, namer, false}, isConnecter) actions = appendIf(actions, action{"CONNECT", itemPath + "/{path:*}", proxyParams, namer, false}, isConnecter && connectSubpath) - break default: namespaceParamName := "namespaces" // Handler for standard REST verbs (GET, PUT, POST and DELETE). @@ -457,7 +462,6 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag // DEPRECATED in 1.11 actions = appendIf(actions, action{"WATCHLIST", "watch/" + resource, params, namer, true}, allowWatchList) } - break } // Create Routes for the actions. @@ -570,9 +574,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if needOverride { // need change the reported verb - handler = metrics.InstrumentRouteFunc(verbOverrider.OverrideMetricsVerb(action.Verb), resource, subresource, requestScope, handler) + handler = metrics.InstrumentRouteFunc(verbOverrider.OverrideMetricsVerb(action.Verb), group, version, resource, subresource, requestScope, metrics.APIServerComponent, handler) } else { - handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, handler) + handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, handler) } doc := "read the specified " + kind @@ -587,12 +591,12 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Returns(http.StatusOK, "OK", producedObject). Writes(producedObject) if isGetterWithOptions { - if err := addObjectParams(ws, route, versionedGetOptions); err != nil { + if err := AddObjectParams(ws, route, versionedGetOptions); err != nil { return nil, err } } if isExporter { - if err := addObjectParams(ws, route, versionedExportOptions); err != nil { + if err := AddObjectParams(ws, route, versionedExportOptions); err != nil { return nil, err } } @@ -603,7 +607,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isSubresource { doc = "list " + subresource + " of objects of kind " + kind } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout)) route := ws.GET(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -611,7 +615,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Produces(append(storageMeta.ProducesMIMETypes(action.Verb), allMediaTypes...)...). Returns(http.StatusOK, "OK", versionedList). Writes(versionedList) - if err := addObjectParams(ws, route, versionedListOptions); err != nil { + if err := AddObjectParams(ws, route, versionedListOptions); err != nil { return nil, err } switch { @@ -635,7 +639,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isSubresource { doc = "replace " + subresource + " of the specified " + kind } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulUpdateResource(updater, reqScope, admit)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulUpdateResource(updater, reqScope, admit)) route := ws.PUT(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -647,7 +651,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Returns(http.StatusCreated, "Created", producedObject). Reads(defaultVersionedObject). Writes(producedObject) - if err := addObjectParams(ws, route, versionedUpdateOptions); err != nil { + if err := AddObjectParams(ws, route, versionedUpdateOptions); err != nil { return nil, err } addParams(route, action.Params) @@ -662,17 +666,17 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag string(types.MergePatchType), string(types.StrategicMergePatchType), } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, supportedTypes)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulPatchResource(patcher, reqScope, admit, supportedTypes)) route := ws.PATCH(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). - Consumes(string(types.JSONPatchType), string(types.MergePatchType), string(types.StrategicMergePatchType)). + Consumes(supportedTypes...). Operation("patch"+namespaced+kind+strings.Title(subresource)+operationSuffix). Produces(append(storageMeta.ProducesMIMETypes(action.Verb), mediaTypes...)...). Returns(http.StatusOK, "OK", producedObject). Reads(metav1.Patch{}). Writes(producedObject) - if err := addObjectParams(ws, route, versionedUpdateOptions); err != nil { + if err := AddObjectParams(ws, route, versionedPatchOptions); err != nil { return nil, err } addParams(route, action.Params) @@ -684,8 +688,8 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag } else { handler = restfulCreateResource(creater, reqScope, admit) } - handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, handler) - article := getArticleForNoun(kind, " ") + handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, handler) + article := GetArticleForNoun(kind, " ") doc := "create" + article + kind if isSubresource { doc = "create " + subresource + " of" + article + kind @@ -702,18 +706,18 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Returns(http.StatusAccepted, "Accepted", producedObject). Reads(defaultVersionedObject). Writes(producedObject) - if err := addObjectParams(ws, route, versionedCreateOptions); err != nil { + if err := AddObjectParams(ws, route, versionedCreateOptions); err != nil { return nil, err } addParams(route, action.Params) routes = append(routes, route) case "DELETE": // Delete a resource. - article := getArticleForNoun(kind, " ") + article := GetArticleForNoun(kind, " ") doc := "delete" + article + kind if isSubresource { doc = "delete " + subresource + " of" + article + kind } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit)) route := ws.DELETE(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -725,7 +729,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isGracefulDeleter { route.Reads(versionedDeleterObject) route.ParameterNamed("body").Required(false) - if err := addObjectParams(ws, route, versionedDeleteOptions); err != nil { + if err := AddObjectParams(ws, route, versionedDeleteOptions); err != nil { return nil, err } } @@ -736,7 +740,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isSubresource { doc = "delete collection of " + subresource + " of a " + kind } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit)) route := ws.DELETE(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -744,7 +748,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Produces(append(storageMeta.ProducesMIMETypes(action.Verb), mediaTypes...)...). Writes(versionedStatus). Returns(http.StatusOK, "OK", versionedStatus) - if err := addObjectParams(ws, route, versionedListOptions); err != nil { + if err := AddObjectParams(ws, route, versionedListOptions); err != nil { return nil, err } addParams(route, action.Params) @@ -756,7 +760,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag doc = "watch changes to " + subresource + " of an object of kind " + kind } doc += ". deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter." - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout)) route := ws.GET(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -764,7 +768,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Produces(allMediaTypes...). Returns(http.StatusOK, "OK", versionedWatchEvent). Writes(versionedWatchEvent) - if err := addObjectParams(ws, route, versionedListOptions); err != nil { + if err := AddObjectParams(ws, route, versionedListOptions); err != nil { return nil, err } addParams(route, action.Params) @@ -776,7 +780,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag doc = "watch individual changes to a list of " + subresource + " of " + kind } doc += ". deprecated: use the 'watch' parameter with a list operation instead." - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout)) route := ws.GET(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). @@ -784,7 +788,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Produces(allMediaTypes...). Returns(http.StatusOK, "OK", versionedWatchEvent). Writes(versionedWatchEvent) - if err := addObjectParams(ws, route, versionedListOptions); err != nil { + if err := AddObjectParams(ws, route, versionedListOptions); err != nil { return nil, err } addParams(route, action.Params) @@ -799,7 +803,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isSubresource { doc = "connect " + method + " requests to " + subresource + " of " + kind } - handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulConnectResource(connecter, reqScope, admit, path, isSubresource)) + handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulConnectResource(connecter, reqScope, admit, path, isSubresource)) route := ws.Method(method).Path(action.Path). To(handler). Doc(doc). @@ -808,7 +812,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag Consumes("*/*"). Writes(connectProducedObject) if versionedConnectOptions != nil { - if err := addObjectParams(ws, route, versionedConnectOptions); err != nil { + if err := AddObjectParams(ws, route, versionedConnectOptions); err != nil { return nil, err } } @@ -877,13 +881,13 @@ func addParams(route *restful.RouteBuilder, params []*restful.Parameter) { } } -// addObjectParams converts a runtime.Object into a set of go-restful Param() definitions on the route. +// AddObjectParams converts a runtime.Object into a set of go-restful Param() definitions on the route. // The object must be a pointer to a struct; only fields at the top level of the struct that are not // themselves interfaces or structs are used; only fields with a json tag that is non empty (the standard // Go JSON behavior for omitting a field) become query parameters. The name of the query parameter is // the JSON field name. If a description struct tag is set on the field, that description is used on the // query parameter. In essence, it converts a standard JSON top level object into a query param schema. -func addObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj interface{}) error { +func AddObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj interface{}) error { sv, err := conversion.EnforcePtr(obj) if err != nil { return err @@ -985,8 +989,8 @@ func splitSubresource(path string) (string, string, error) { return resource, subresource, nil } -// getArticleForNoun returns the article needed for the given noun. -func getArticleForNoun(noun string, padding string) string { +// GetArticleForNoun returns the article needed for the given noun. +func GetArticleForNoun(noun string, padding string) string { if noun[len(noun)-2:] != "ss" && noun[len(noun)-1:] == "s" { // Plurals don't have an article. // Don't catch words like class diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD index ea44cdc05e8..4df68923804 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD +++ b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD @@ -18,8 +18,13 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/endpoints/metrics", importpath = "k8s.io/apiserver/pkg/endpoints/metrics", deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", ], diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/OWNERS b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/OWNERS old mode 100755 new mode 100644 index f0706b3f104..33c780d7a6d --- a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - jimmidyson diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go index ae16d43bb1e..02efbce5cee 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go @@ -26,11 +26,12 @@ import ( "sync" "time" - utilnet "k8s.io/apimachinery/pkg/util/net" - "k8s.io/apiserver/pkg/endpoints/request" - "github.com/emicklei/go-restful" "github.com/prometheus/client_golang/prometheus" + "k8s.io/apimachinery/pkg/apis/meta/v1/validation" + utilnet "k8s.io/apimachinery/pkg/util/net" + utilsets "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/endpoints/request" ) // resettableCollector is the interface implemented by prometheus.MetricVec @@ -40,59 +41,93 @@ type resettableCollector interface { Reset() } +const ( + APIServerComponent string = "apiserver" +) + var ( // TODO(a-robinson): Add unit tests for the handling of these metrics once // the upstream library supports it. requestCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ - Name: "apiserver_request_count", - Help: "Counter of apiserver requests broken out for each verb, API resource, client, and HTTP response contentType and code.", + Name: "apiserver_request_total", + Help: "Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, client, and HTTP response contentType and code.", }, - []string{"verb", "resource", "subresource", "scope", "client", "contentType", "code"}, + // The label_name contentType doesn't follow the label_name convention defined here: + // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/instrumentation.md + // But changing it would break backwards compatibility. Future label_names + // should be all lowercase and separated by underscores. + []string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component", "client", "contentType", "code"}, + ) + deprecatedRequestCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "apiserver_request_count", + Help: "(Deprecated) Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.", + }, + []string{"verb", "group", "version", "resource", "subresource", "scope", "component", "client", "contentType", "code"}, ) longRunningRequestGauge = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "apiserver_longrunning_gauge", - Help: "Gauge of all active long-running apiserver requests broken out by verb, API resource, and scope. Not all requests are tracked this way.", + Help: "Gauge of all active long-running apiserver requests broken out by verb, group, version, resource, scope and component. Not all requests are tracked this way.", }, - []string{"verb", "resource", "subresource", "scope"}, + []string{"verb", "group", "version", "resource", "subresource", "scope", "component"}, ) requestLatencies = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "apiserver_request_duration_seconds", + Help: "Response latency distribution in seconds for each verb, dry run value, group, version, resource, subresource, scope and component.", + // This metric is used for verifying api call latencies SLO, + // as well as tracking regressions in this aspects. + // Thus we customize buckets significantly, to empower both usecases. + Buckets: []float64{0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, + 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40, 50, 60}, + }, + []string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component"}, + ) + deprecatedRequestLatencies = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "apiserver_request_latencies", - Help: "Response latency distribution in microseconds for each verb, resource and subresource.", + Help: "(Deprecated) Response latency distribution in microseconds for each verb, group, version, resource, subresource, scope and component.", // Use buckets ranging from 125 ms to 8 seconds. Buckets: prometheus.ExponentialBuckets(125000, 2.0, 7), }, - []string{"verb", "resource", "subresource", "scope"}, + []string{"verb", "group", "version", "resource", "subresource", "scope", "component"}, ) - requestLatenciesSummary = prometheus.NewSummaryVec( + deprecatedRequestLatenciesSummary = prometheus.NewSummaryVec( prometheus.SummaryOpts{ Name: "apiserver_request_latencies_summary", - Help: "Response latency summary in microseconds for each verb, resource and subresource.", + Help: "(Deprecated) Response latency summary in microseconds for each verb, group, version, resource, subresource, scope and component.", // Make the sliding window of 5h. // TODO: The value for this should be based on our SLI definition (medium term). MaxAge: 5 * time.Hour, }, - []string{"verb", "resource", "subresource", "scope"}, + []string{"verb", "group", "version", "resource", "subresource", "scope", "component"}, ) responseSizes = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "apiserver_response_sizes", - Help: "Response size distribution in bytes for each verb, resource, subresource and scope (namespace/cluster).", + Help: "Response size distribution in bytes for each group, version, verb, resource, subresource, scope and component.", // Use buckets ranging from 1000 bytes (1KB) to 10^9 bytes (1GB). Buckets: prometheus.ExponentialBuckets(1000, 10.0, 7), }, - []string{"verb", "resource", "subresource", "scope"}, + []string{"verb", "group", "version", "resource", "subresource", "scope", "component"}, ) // DroppedRequests is a number of requests dropped with 'Try again later' response" DroppedRequests = prometheus.NewCounterVec( prometheus.CounterOpts{ - Name: "apiserver_dropped_requests", + Name: "apiserver_dropped_requests_total", Help: "Number of requests dropped with 'Try again later' response", }, []string{"requestKind"}, ) + DeprecatedDroppedRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "apiserver_dropped_requests", + Help: "(Deprecated) Number of requests dropped with 'Try again later' response", + }, + []string{"requestKind"}, + ) // RegisteredWatchers is a number of currently registered watchers splitted by resource. RegisteredWatchers = prometheus.NewGaugeVec( prometheus.GaugeOpts{ @@ -106,7 +141,7 @@ var ( currentInflightRequests = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "apiserver_current_inflight_requests", - Help: "Maximal mumber of currently used inflight request limit of this apiserver per request kind in last second.", + Help: "Maximal number of currently used inflight request limit of this apiserver per request kind in last second.", }, []string{"requestKind"}, ) @@ -114,11 +149,14 @@ var ( metrics = []resettableCollector{ requestCounter, + deprecatedRequestCounter, longRunningRequestGauge, requestLatencies, - requestLatenciesSummary, + deprecatedRequestLatencies, + deprecatedRequestLatenciesSummary, responseSizes, DroppedRequests, + DeprecatedDroppedRequests, RegisteredWatchers, currentInflightRequests, } @@ -157,21 +195,21 @@ func UpdateInflightRequestMetrics(nonmutating, mutating int) { // Record records a single request to the standard metrics endpoints. For use by handlers that perform their own // processing. All API paths should use InstrumentRouteFunc implicitly. Use this instead of MonitorRequest if // you already have a RequestInfo object. -func Record(req *http.Request, requestInfo *request.RequestInfo, contentType string, code int, responseSizeInBytes int, elapsed time.Duration) { +func Record(req *http.Request, requestInfo *request.RequestInfo, component, contentType string, code int, responseSizeInBytes int, elapsed time.Duration) { if requestInfo == nil { requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path} } scope := CleanScope(requestInfo) if requestInfo.IsResourceRequest { - MonitorRequest(req, strings.ToUpper(requestInfo.Verb), requestInfo.Resource, requestInfo.Subresource, scope, contentType, code, responseSizeInBytes, elapsed) + MonitorRequest(req, strings.ToUpper(requestInfo.Verb), requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, contentType, code, responseSizeInBytes, elapsed) } else { - MonitorRequest(req, strings.ToUpper(requestInfo.Verb), "", requestInfo.Path, scope, contentType, code, responseSizeInBytes, elapsed) + MonitorRequest(req, strings.ToUpper(requestInfo.Verb), "", "", "", requestInfo.Path, scope, component, contentType, code, responseSizeInBytes, elapsed) } } // RecordLongRunning tracks the execution of a long running request against the API server. It provides an accurate count // of the total number of open long running requests. requestInfo may be nil if the caller is not in the normal request flow. -func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, fn func()) { +func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, component string, fn func()) { if requestInfo == nil { requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path} } @@ -179,9 +217,9 @@ func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, fn f scope := CleanScope(requestInfo) reportedVerb := cleanVerb(strings.ToUpper(requestInfo.Verb), req) if requestInfo.IsResourceRequest { - g = longRunningRequestGauge.WithLabelValues(reportedVerb, requestInfo.Resource, requestInfo.Subresource, scope) + g = longRunningRequestGauge.WithLabelValues(reportedVerb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component) } else { - g = longRunningRequestGauge.WithLabelValues(reportedVerb, "", requestInfo.Path, scope) + g = longRunningRequestGauge.WithLabelValues(reportedVerb, "", "", "", requestInfo.Path, scope, component) } g.Inc() defer g.Dec() @@ -190,22 +228,26 @@ func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, fn f // MonitorRequest handles standard transformations for client and the reported verb and then invokes Monitor to record // a request. verb must be uppercase to be backwards compatible with existing monitoring tooling. -func MonitorRequest(req *http.Request, verb, resource, subresource, scope, contentType string, httpCode, respSize int, elapsed time.Duration) { +func MonitorRequest(req *http.Request, verb, group, version, resource, subresource, scope, component, contentType string, httpCode, respSize int, elapsed time.Duration) { reportedVerb := cleanVerb(verb, req) + dryRun := cleanDryRun(req.URL.Query()["dryRun"]) client := cleanUserAgent(utilnet.GetHTTPClient(req)) elapsedMicroseconds := float64(elapsed / time.Microsecond) - requestCounter.WithLabelValues(reportedVerb, resource, subresource, scope, client, contentType, codeToString(httpCode)).Inc() - requestLatencies.WithLabelValues(reportedVerb, resource, subresource, scope).Observe(elapsedMicroseconds) - requestLatenciesSummary.WithLabelValues(reportedVerb, resource, subresource, scope).Observe(elapsedMicroseconds) + elapsedSeconds := elapsed.Seconds() + requestCounter.WithLabelValues(reportedVerb, dryRun, group, version, resource, subresource, scope, component, client, contentType, codeToString(httpCode)).Inc() + deprecatedRequestCounter.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component, client, contentType, codeToString(httpCode)).Inc() + requestLatencies.WithLabelValues(reportedVerb, dryRun, group, version, resource, subresource, scope, component).Observe(elapsedSeconds) + deprecatedRequestLatencies.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds) + deprecatedRequestLatenciesSummary.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds) // We are only interested in response sizes of read requests. if verb == "GET" || verb == "LIST" { - responseSizes.WithLabelValues(reportedVerb, resource, subresource, scope).Observe(float64(respSize)) + responseSizes.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(float64(respSize)) } } // InstrumentRouteFunc works like Prometheus' InstrumentHandlerFunc but wraps // the go-restful RouteFunction instead of a HandlerFunc plus some Kubernetes endpoint specific information. -func InstrumentRouteFunc(verb, resource, subresource, scope string, routeFunc restful.RouteFunction) restful.RouteFunction { +func InstrumentRouteFunc(verb, group, version, resource, subresource, scope, component string, routeFunc restful.RouteFunction) restful.RouteFunction { return restful.RouteFunction(func(request *restful.Request, response *restful.Response) { now := time.Now() @@ -224,12 +266,12 @@ func InstrumentRouteFunc(verb, resource, subresource, scope string, routeFunc re routeFunc(request, response) - MonitorRequest(request.Request, verb, resource, subresource, scope, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) + MonitorRequest(request.Request, verb, group, version, resource, subresource, scope, component, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) }) } // InstrumentHandlerFunc works like Prometheus' InstrumentHandlerFunc but adds some Kubernetes endpoint specific information. -func InstrumentHandlerFunc(verb, resource, subresource, scope string, handler http.HandlerFunc) http.HandlerFunc { +func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, component string, handler http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { now := time.Now() @@ -246,7 +288,7 @@ func InstrumentHandlerFunc(verb, resource, subresource, scope string, handler ht handler(w, req) - MonitorRequest(req, verb, resource, subresource, scope, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) + MonitorRequest(req, verb, group, version, resource, subresource, scope, component, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) } } @@ -282,6 +324,15 @@ func cleanVerb(verb string, request *http.Request) string { return reportedVerb } +func cleanDryRun(dryRun []string) string { + if errs := validation.ValidateDryRun(nil, dryRun); len(errs) > 0 { + return "invalid" + } + // Since dryRun could be valid with any arbitrarily long length + // we have to dedup and sort the elements before joining them together + return strings.Join(utilsets.NewString(dryRun...).List(), ",") +} + func cleanUserAgent(ua string) string { // We collapse all "web browser"-type user agents into one "browser" to reduce metric cardinality. if strings.HasPrefix(ua, "Mozilla/") { diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/request/OWNERS b/vendor/k8s.io/apiserver/pkg/endpoints/request/OWNERS old mode 100755 new mode 100644 index 9d268c4d148..4da107c8c38 --- a/vendor/k8s.io/apiserver/pkg/endpoints/request/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/endpoints/request/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sttts diff --git a/vendor/k8s.io/apiserver/pkg/features/OWNERS b/vendor/k8s.io/apiserver/pkg/features/OWNERS index fe7b0144e0c..05b08249aed 100644 --- a/vendor/k8s.io/apiserver/pkg/features/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/features/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - feature-approvers diff --git a/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiserver/pkg/features/kube_features.go index 79c0859b01a..63a54c68775 100644 --- a/vendor/k8s.io/apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -35,6 +35,14 @@ const ( // redirects from the backend (Kubelet) for streaming requests (exec/attach/port-forward). StreamingProxyRedirects utilfeature.Feature = "StreamingProxyRedirects" + // owner: @tallclair + // alpha: v1.10 + // beta: v1.14 + // + // ValidateProxyRedirects controls whether the apiserver should validate that redirects are only + // followed to the same host. Only used if StreamingProxyRedirects is enabled. + ValidateProxyRedirects utilfeature.Feature = "ValidateProxyRedirects" + // owner: @tallclair // alpha: v1.7 // beta: v1.8 @@ -64,7 +72,7 @@ const ( ) func init() { - utilfeature.DefaultFeatureGate.Add(defaultKubernetesFeatureGates) + utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) } // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. @@ -72,6 +80,7 @@ func init() { // available throughout Kubernetes binaries. var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, + ValidateProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, AdvancedAuditing: {Default: true, PreRelease: utilfeature.GA}, APIListChunking: {Default: true, PreRelease: utilfeature.Beta}, DryRun: {Default: true, PreRelease: utilfeature.Beta}, diff --git a/vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS b/vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS old mode 100755 new mode 100644 index 75e139342b7..5f38d15b24b --- a/vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/apiserver/pkg/registry/generic/registry/BUILD b/vendor/k8s.io/apiserver/pkg/registry/generic/registry/BUILD index 69db1062085..0935908b249 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/generic/registry/BUILD +++ b/vendor/k8s.io/apiserver/pkg/registry/generic/registry/BUILD @@ -36,7 +36,6 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/apis/example:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/example/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", @@ -46,8 +45,6 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/testing:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go b/vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go index 2dcf99eae52..be15e2bb3bf 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go +++ b/vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go @@ -177,6 +177,12 @@ type Store struct { // resource. It is wrapped into a "DryRunnableStorage" that will // either pass-through or simply dry-run. Storage DryRunnableStorage + // StorageVersioner outputs the an object will be + // converted to before persisted in etcd, given a list of possible + // kinds of the object. + // If the StorageVersioner is nil, apiserver will leave the + // storageVersionHash as empty in the discovery document. + StorageVersioner runtime.GroupVersioner // Called to cleanup clients used by the underlying Storage; optional. DestroyFunc func() } @@ -307,7 +313,6 @@ func (e *Store) ListPredicate(ctx context.Context, p storage.SelectionPredicate, // By default we should serve the request from etcd. options = &metainternalversion.ListOptions{ResourceVersion: ""} } - p.IncludeUninitialized = options.IncludeUninitialized p.Limit = options.Limit p.Continue = options.Continue list := e.NewListFunc() @@ -380,92 +385,9 @@ func (e *Store) Create(ctx context.Context, obj runtime.Object, createValidation return nil, err } } - if !options.IncludeUninitialized { - return e.WaitForInitialized(ctx, out) - } return out, nil } -// WaitForInitialized holds until the object is initialized, or returns an error if the default limit expires. -// This method is exposed publicly for consumers of generic rest tooling. -func (e *Store) WaitForInitialized(ctx context.Context, obj runtime.Object) (runtime.Object, error) { - // return early if we don't have initializers, or if they've completed already - accessor, err := meta.Accessor(obj) - if err != nil { - return obj, nil - } - initializers := accessor.GetInitializers() - if initializers == nil { - return obj, nil - } - if result := initializers.Result; result != nil { - return nil, kubeerr.FromObject(result) - } - - key, err := e.KeyFunc(ctx, accessor.GetName()) - if err != nil { - return nil, err - } - qualifiedResource := e.qualifiedResourceFromContext(ctx) - w, err := e.Storage.Watch(ctx, key, accessor.GetResourceVersion(), storage.SelectionPredicate{ - Label: labels.Everything(), - Field: fields.Everything(), - - IncludeUninitialized: true, - }) - if err != nil { - return nil, err - } - defer w.Stop() - - latest := obj - ch := w.ResultChan() - for { - select { - case event, ok := <-ch: - if !ok { - msg := fmt.Sprintf("server has timed out waiting for the initialization of %s %s", - qualifiedResource.String(), accessor.GetName()) - return nil, kubeerr.NewTimeoutError(msg, 0) - } - switch event.Type { - case watch.Deleted: - if latest = event.Object; latest != nil { - if accessor, err := meta.Accessor(latest); err == nil { - if initializers := accessor.GetInitializers(); initializers != nil && initializers.Result != nil { - // initialization failed, but we missed the modification event - return nil, kubeerr.FromObject(initializers.Result) - } - } - } - return nil, kubeerr.NewInternalError(fmt.Errorf("object deleted while waiting for creation")) - case watch.Error: - if status, ok := event.Object.(*metav1.Status); ok { - return nil, &kubeerr.StatusError{ErrStatus: *status} - } - return nil, kubeerr.NewInternalError(fmt.Errorf("unexpected object in watch stream, can't complete initialization %T", event.Object)) - case watch.Modified: - latest = event.Object - accessor, err = meta.Accessor(latest) - if err != nil { - return nil, kubeerr.NewInternalError(fmt.Errorf("object no longer has access to metadata %T: %v", latest, err)) - } - initializers := accessor.GetInitializers() - if initializers == nil { - // completed initialization - return latest, nil - } - if result := initializers.Result; result != nil { - // initialization failed - return nil, kubeerr.FromObject(result) - } - } - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - // shouldDeleteDuringUpdate checks if a Update is removing all the object's // finalizers. If so, it further checks if the object's // DeletionGracePeriodSeconds is 0. @@ -483,20 +405,6 @@ func (e *Store) shouldDeleteDuringUpdate(ctx context.Context, key string, obj, e return len(newMeta.GetFinalizers()) == 0 && oldMeta.GetDeletionGracePeriodSeconds() != nil && *oldMeta.GetDeletionGracePeriodSeconds() == 0 } -// shouldDeleteForFailedInitialization returns true if the provided object is initializing and has -// a failure recorded. -func (e *Store) shouldDeleteForFailedInitialization(ctx context.Context, obj runtime.Object) bool { - m, err := meta.Accessor(obj) - if err != nil { - utilruntime.HandleError(err) - return false - } - if initializers := m.GetInitializers(); initializers != nil && initializers.Result != nil { - return true - } - return false -} - // deleteWithoutFinalizers handles deleting an object ignoring its finalizer list. // Used for objects that are either been finalized or have never initialized. func (e *Store) deleteWithoutFinalizers(ctx context.Context, name, key string, obj runtime.Object, preconditions *storage.Preconditions, dryRun bool) (runtime.Object, bool, error) { @@ -540,6 +448,7 @@ func (e *Store) Update(ctx context.Context, name string, objInfo rest.UpdatedObj storagePreconditions := &storage.Preconditions{} if preconditions := objInfo.Preconditions(); preconditions != nil { storagePreconditions.UID = preconditions.UID + storagePreconditions.ResourceVersion = preconditions.ResourceVersion } out := e.NewFunc() @@ -652,10 +561,6 @@ func (e *Store) Update(ctx context.Context, name string, objInfo rest.UpdatedObj return nil, false, err } - if e.shouldDeleteForFailedInitialization(ctx, out) { - return e.deleteWithoutFinalizers(ctx, name, key, out, storagePreconditions, dryrun.IsDryRun(options.DryRun)) - } - if creating { if e.AfterCreate != nil { if err := e.AfterCreate(out); err != nil { @@ -841,21 +746,25 @@ func deletionFinalizersForGarbageCollection(ctx context.Context, e *Store, acces } // markAsDeleting sets the obj's DeletionGracePeriodSeconds to 0, and sets the -// DeletionTimestamp to "now". Finalizers are watching for such updates and will +// DeletionTimestamp to "now" if there is no existing deletionTimestamp or if the existing +// deletionTimestamp is further in future. Finalizers are watching for such updates and will // finalize the object if their IDs are present in the object's Finalizers list. -func markAsDeleting(obj runtime.Object) (err error) { +func markAsDeleting(obj runtime.Object, now time.Time) (err error) { objectMeta, kerr := meta.Accessor(obj) if kerr != nil { return kerr } - now := metav1.NewTime(time.Now()) // This handles Generation bump for resources that don't support graceful // deletion. For resources that support graceful deletion is handle in // pkg/api/rest/delete.go if objectMeta.GetDeletionTimestamp() == nil && objectMeta.GetGeneration() > 0 { objectMeta.SetGeneration(objectMeta.GetGeneration() + 1) } - objectMeta.SetDeletionTimestamp(&now) + existingDeletionTimestamp := objectMeta.GetDeletionTimestamp() + if existingDeletionTimestamp == nil || existingDeletionTimestamp.After(now) { + metaNow := metav1.NewTime(now) + objectMeta.SetDeletionTimestamp(&metaNow) + } var zero int64 = 0 objectMeta.SetDeletionGracePeriodSeconds(&zero) return nil @@ -910,7 +819,7 @@ func (e *Store) updateForGracefulDeletionAndFinalizers(ctx context.Context, name // set the DeleteGracePeriods to 0 if the object has pendingFinalizers but not supporting graceful deletion if pendingFinalizers { klog.V(6).Infof("update the DeletionTimestamp to \"now\" and GracePeriodSeconds to 0 for object %s, because it has pending finalizers", name) - err = markAsDeleting(existing) + err = markAsDeleting(existing, time.Now()) if err != nil { return nil, err } @@ -971,6 +880,7 @@ func (e *Store) Delete(ctx context.Context, name string, options *metav1.DeleteO var preconditions storage.Preconditions if options.Preconditions != nil { preconditions.UID = options.Preconditions.UID + preconditions.ResourceVersion = options.Preconditions.ResourceVersion } graceful, pendingGraceful, err := rest.BeforeDelete(e.DeleteStrategy, ctx, obj, options) if err != nil { @@ -1051,11 +961,6 @@ func (e *Store) DeleteCollection(ctx context.Context, options *metav1.DeleteOpti listOptions = listOptions.DeepCopy() } - // DeleteCollection must remain backwards compatible with old clients that expect it to - // remove all resources, initialized or not, within the type. It is also consistent with - // Delete which does not require IncludeUninitialized - listOptions.IncludeUninitialized = true - listObj, err := e.List(ctx, listOptions) if err != nil { return nil, err @@ -1170,7 +1075,6 @@ func (e *Store) Watch(ctx context.Context, options *metainternalversion.ListOpti resourceVersion := "" if options != nil { resourceVersion = options.ResourceVersion - predicate.IncludeUninitialized = options.IncludeUninitialized } return e.WatchPredicate(ctx, predicate, resourceVersion) } @@ -1391,6 +1295,7 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { attrFunc, triggerFunc, ) + e.StorageVersioner = opts.StorageConfig.EncodeVersioner if opts.CountMetricPollPeriod > 0 { stopFunc := e.startObservingCount(opts.CountMetricPollPeriod) @@ -1431,3 +1336,7 @@ func (e *Store) ConvertToTable(ctx context.Context, object runtime.Object, table } return rest.NewDefaultTableConvertor(e.qualifiedResourceFromContext(ctx)).ConvertToTable(ctx, object, tableOptions) } + +func (e *Store) StorageVersion() runtime.GroupVersioner { + return e.StorageVersioner +} diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/BUILD b/vendor/k8s.io/apiserver/pkg/registry/rest/BUILD index 7ad6f3b6fa8..3d801d7a8c2 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/rest/BUILD +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/BUILD @@ -22,6 +22,7 @@ go_library( name = "go_default_library", srcs = [ "create.go", + "create_update.go", "delete.go", "doc.go", "export.go", diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/OWNERS b/vendor/k8s.io/apiserver/pkg/registry/rest/OWNERS old mode 100755 new mode 100644 index 6427750a9e9..98488d8114d --- a/vendor/k8s.io/apiserver/pkg/registry/rest/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/create.go b/vendor/k8s.io/apiserver/pkg/registry/rest/create.go index 57e0f652384..deddb8b96fc 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/rest/create.go +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/create.go @@ -90,9 +90,12 @@ func BeforeCreate(strategy RESTCreateStrategy, ctx context.Context, obj runtime. objectMeta.SetName(strategy.GenerateName(objectMeta.GetGenerateName())) } - // Ensure Initializers are not set unless the feature is enabled + // Initializers are a deprecated alpha field and should not be saved objectMeta.SetInitializers(nil) + // Ensure managedFields is not set unless the feature is enabled + objectMeta.SetManagedFields(nil) + // ClusterName is ignored and should not be saved if len(objectMeta.GetClusterName()) > 0 { objectMeta.SetClusterName("") @@ -153,7 +156,7 @@ type NamespaceScopedStrategy interface { } // AdmissionToValidateObjectFunc converts validating admission to a rest validate object func -func AdmissionToValidateObjectFunc(admit admission.Interface, staticAttributes admission.Attributes) ValidateObjectFunc { +func AdmissionToValidateObjectFunc(admit admission.Interface, staticAttributes admission.Attributes, o admission.ObjectInterfaces) ValidateObjectFunc { validatingAdmission, ok := admit.(admission.ValidationInterface) if !ok { return func(obj runtime.Object) error { return nil } @@ -174,6 +177,6 @@ func AdmissionToValidateObjectFunc(admit admission.Interface, staticAttributes a if !validatingAdmission.Handles(finalAttributes.GetOperation()) { return nil } - return validatingAdmission.Validate(finalAttributes) + return validatingAdmission.Validate(finalAttributes, o) } } diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/create_update.go b/vendor/k8s.io/apiserver/pkg/registry/rest/create_update.go new file mode 100644 index 00000000000..37d6c8f8ada --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/create_update.go @@ -0,0 +1,52 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +// RESTCreateUpdateStrategy is a union of RESTUpdateStrategy and RESTCreateStrategy, +// and it defines the minimum validation, accepted input, and name generation +// behavior to create and update an object that follows Kubernetes API conventions. +type RESTCreateUpdateStrategy interface { + RESTCreateStrategy + // AllowCreateOnUpdate returns true if the object can be created by a PUT. + AllowCreateOnUpdate() bool + // PrepareForUpdate is invoked on update before validation to normalize + // the object. For example: remove fields that are not to be persisted, + // sort order-insensitive list fields, etc. This should not remove fields + // whose presence would be considered a validation error. + PrepareForUpdate(ctx context.Context, obj, old runtime.Object) + // ValidateUpdate is invoked after default fields in the object have been + // filled in before the object is persisted. This method should not mutate + // the object. + ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList + // AllowUnconditionalUpdate returns true if the object can be updated + // unconditionally (irrespective of the latest resource version), when + // there is no resource version specified in the object. + AllowUnconditionalUpdate() bool +} + +// Ensure that RESTCreateUpdateStrategy extends RESTCreateStrategy +var _ RESTCreateStrategy = (RESTCreateUpdateStrategy)(nil) + +// Ensure that RESTCreateUpdateStrategy extends RESTUpdateStrategy +var _ RESTUpdateStrategy = (RESTCreateUpdateStrategy)(nil) diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/delete.go b/vendor/k8s.io/apiserver/pkg/registry/rest/delete.go index 7c39f6be10f..16c9e1b40db 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/rest/delete.go +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/delete.go @@ -77,8 +77,13 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx context.Context, obj runtime. return false, false, errors.NewInvalid(schema.GroupKind{Group: metav1.GroupName, Kind: "DeleteOptions"}, "", errs) } // Checking the Preconditions here to fail early. They'll be enforced later on when we actually do the deletion, too. - if options.Preconditions != nil && options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.GetUID() { - return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.GetUID())) + if options.Preconditions != nil { + if options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.GetUID() { + return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.GetUID())) + } + if options.Preconditions.ResourceVersion != nil && *options.Preconditions.ResourceVersion != objectMeta.GetResourceVersion() { + return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the ResourceVersion in the precondition (%s) does not match the ResourceVersion in record (%s). The object might have been modified", *options.Preconditions.ResourceVersion, objectMeta.GetResourceVersion())) + } } gracefulStrategy, ok := strategy.(RESTGracefulDeleteStrategy) if !ok { diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/rest.go b/vendor/k8s.io/apiserver/pkg/registry/rest/rest.go index 572f924e73b..b16f7f677bc 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/rest/rest.go +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/rest.go @@ -176,8 +176,7 @@ type Creater interface { // This object must be a pointer type for use with Codec.DecodeInto([]byte, runtime.Object) New() runtime.Object - // Create creates a new version of a resource. If includeUninitialized is set, the object may be returned - // without completing initialization. + // Create creates a new version of a resource. Create(ctx context.Context, obj runtime.Object, createValidation ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) } @@ -189,8 +188,7 @@ type NamedCreater interface { // Create creates a new version of a resource. It expects a name parameter from the path. // This is needed for create operations on subresources which include the name of the parent - // resource in the path. If includeUninitialized is set, the object may be returned without - // completing initialization. + // resource in the path. Create(ctx context.Context, name string, obj runtime.Object, createValidation ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) } @@ -334,3 +332,12 @@ type StorageMetadata interface { // it is not nil. Only the type of the return object matters, the value will be ignored. ProducesObject(verb string) interface{} } + +// StorageVersionProvider is an optional interface that a storage object can +// implement if it wishes to disclose its storage version. +type StorageVersionProvider interface { + // StorageVersion returns a group versioner, which will outputs the gvk + // an object will be converted to before persisted in etcd, given a + // list of kinds the object might belong to. + StorageVersion() runtime.GroupVersioner +} diff --git a/vendor/k8s.io/apiserver/pkg/registry/rest/update.go b/vendor/k8s.io/apiserver/pkg/registry/rest/update.go index 9d303d8e83b..966962d3663 100644 --- a/vendor/k8s.io/apiserver/pkg/registry/rest/update.go +++ b/vendor/k8s.io/apiserver/pkg/registry/rest/update.go @@ -102,10 +102,14 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx context.Context, obj, old run } objectMeta.SetGeneration(oldMeta.GetGeneration()) - // Ensure Initializers are not set unless the feature is enabled + // Initializers are a deprecated alpha field and should not be saved oldMeta.SetInitializers(nil) objectMeta.SetInitializers(nil) + // Ensure managedFields state is removed unless ServerSideApply is enabled + oldMeta.SetManagedFields(nil) + objectMeta.SetManagedFields(nil) + strategy.PrepareForUpdate(ctx, obj, old) // ClusterName is ignored and should not be saved @@ -248,7 +252,7 @@ func (i *wrappedUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj run } // AdmissionToValidateObjectUpdateFunc converts validating admission to a rest validate object update func -func AdmissionToValidateObjectUpdateFunc(admit admission.Interface, staticAttributes admission.Attributes) ValidateObjectUpdateFunc { +func AdmissionToValidateObjectUpdateFunc(admit admission.Interface, staticAttributes admission.Attributes, o admission.ObjectInterfaces) ValidateObjectUpdateFunc { validatingAdmission, ok := admit.(admission.ValidationInterface) if !ok { return func(obj, old runtime.Object) error { return nil } @@ -269,6 +273,6 @@ func AdmissionToValidateObjectUpdateFunc(admit admission.Interface, staticAttrib if !validatingAdmission.Handles(finalAttributes.GetOperation()) { return nil } - return validatingAdmission.Validate(finalAttributes) + return validatingAdmission.Validate(finalAttributes, o) } } diff --git a/vendor/k8s.io/apiserver/pkg/server/BUILD b/vendor/k8s.io/apiserver/pkg/server/BUILD index 5cd27168da9..80afc805f86 100644 --- a/vendor/k8s.io/apiserver/pkg/server/BUILD +++ b/vendor/k8s.io/apiserver/pkg/server/BUILD @@ -73,7 +73,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/waitgroup:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/admission/plugin/initialization:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating:go_default_library", @@ -102,14 +101,13 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/openapi:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/coreos/go-systemd/daemon:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", - "//vendor/github.com/emicklei/go-restful-swagger12:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/github.com/pborman/uuid:go_default_library", @@ -117,6 +115,7 @@ go_library( "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/handler:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/util:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", ], diff --git a/vendor/k8s.io/apiserver/pkg/server/config.go b/vendor/k8s.io/apiserver/pkg/server/config.go index de7158ca467..cbab2fbafc3 100644 --- a/vendor/k8s.io/apiserver/pkg/server/config.go +++ b/vendor/k8s.io/apiserver/pkg/server/config.go @@ -55,9 +55,11 @@ import ( "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/routes" serverstore "k8s.io/apiserver/pkg/server/storage" - "k8s.io/apiserver/pkg/util/logs" "k8s.io/client-go/informers" restclient "k8s.io/client-go/rest" + certutil "k8s.io/client-go/util/cert" + "k8s.io/component-base/logs" + // install apis _ "k8s.io/apiserver/pkg/apis/apiserver/install" ) @@ -284,6 +286,25 @@ func NewRecommendedConfig(codecs serializer.CodecFactory) *RecommendedConfig { } } +func (c *AuthenticationInfo) ApplyClientCert(clientCAFile string, servingInfo *SecureServingInfo) error { + if servingInfo != nil { + if len(clientCAFile) > 0 { + clientCAs, err := certutil.CertsFromFile(clientCAFile) + if err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + if servingInfo.ClientCA == nil { + servingInfo.ClientCA = x509.NewCertPool() + } + for _, cert := range clientCAs { + servingInfo.ClientCA.AddCert(cert) + } + } + } + + return nil +} + type completedConfig struct { *Config diff --git a/vendor/k8s.io/apiserver/pkg/server/deprecated_insecure_serving.go b/vendor/k8s.io/apiserver/pkg/server/deprecated_insecure_serving.go index a78250edae9..4f8d07a42dc 100644 --- a/vendor/k8s.io/apiserver/pkg/server/deprecated_insecure_serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/deprecated_insecure_serving.go @@ -50,7 +50,9 @@ func (s *DeprecatedInsecureServingInfo) Serve(handler http.Handler, shutdownTime } else { klog.Infof("Serving insecurely on %s", s.Listener.Addr()) } - return RunServer(insecureServer, s.Listener, shutdownTimeout, stopCh) + _, err := RunServer(insecureServer, s.Listener, shutdownTimeout, stopCh) + // NOTE: we do not handle stoppedCh returned by RunServer for graceful termination here + return err } func (s *DeprecatedInsecureServingInfo) NewLoopbackClientConfig() (*rest.Config, error) { diff --git a/vendor/k8s.io/apiserver/pkg/server/doc.go b/vendor/k8s.io/apiserver/pkg/server/doc.go index b5f97c65857..bc671eae844 100644 --- a/vendor/k8s.io/apiserver/pkg/server/doc.go +++ b/vendor/k8s.io/apiserver/pkg/server/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package server contains the plumbing to create kubernetes-like API server command. -package server +package server // import "k8s.io/apiserver/pkg/server" diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/BUILD b/vendor/k8s.io/apiserver/pkg/server/filters/BUILD index b75b3de9824..44b669deb5a 100644 --- a/vendor/k8s.io/apiserver/pkg/server/filters/BUILD +++ b/vendor/k8s.io/apiserver/pkg/server/filters/BUILD @@ -10,6 +10,7 @@ go_test( name = "go_default_test", srcs = [ "compression_test.go", + "content_type_test.go", "cors_test.go", "maxinflight_test.go", "timeout_test.go", @@ -32,6 +33,7 @@ go_library( name = "go_default_library", srcs = [ "compression.go", + "content_type.go", "cors.go", "doc.go", "longrunning.go", diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/OWNERS b/vendor/k8s.io/apiserver/pkg/server/filters/OWNERS old mode 100755 new mode 100644 index 121af9571f4..c5f73991a31 --- a/vendor/k8s.io/apiserver/pkg/server/filters/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/server/filters/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sttts - dims diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/content_type.go b/vendor/k8s.io/apiserver/pkg/server/filters/content_type.go new file mode 100644 index 00000000000..65c73fcdc46 --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/server/filters/content_type.go @@ -0,0 +1,28 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package filters + +import "net/http" + +// WithContentType sets both the Content-Type and the X-Content-Type-Options (nosniff) header +func WithContentType(handler http.Handler, contentType string) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", contentType) + w.Header().Set("X-Content-Type-Options", "nosniff") + handler.ServeHTTP(w, r) + }) +} diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/maxinflight.go b/vendor/k8s.io/apiserver/pkg/server/filters/maxinflight.go index 8818cb5633f..f7bc691c762 100644 --- a/vendor/k8s.io/apiserver/pkg/server/filters/maxinflight.go +++ b/vendor/k8s.io/apiserver/pkg/server/filters/maxinflight.go @@ -163,8 +163,10 @@ func WithMaxInFlightLimit( // We need to split this data between buckets used for throttling. if isMutatingRequest { metrics.DroppedRequests.WithLabelValues(metrics.MutatingKind).Inc() + metrics.DeprecatedDroppedRequests.WithLabelValues(metrics.MutatingKind).Inc() } else { metrics.DroppedRequests.WithLabelValues(metrics.ReadOnlyKind).Inc() + metrics.DeprecatedDroppedRequests.WithLabelValues(metrics.ReadOnlyKind).Inc() } // at this point we're about to return a 429, BUT not all actors should be rate limited. A system:master is so powerful // that they should always get an answer. It's a super-admin or a loopback connection. @@ -176,7 +178,7 @@ func WithMaxInFlightLimit( } } } - metrics.Record(r, requestInfo, "", http.StatusTooManyRequests, 0, 0) + metrics.Record(r, requestInfo, metrics.APIServerComponent, "", http.StatusTooManyRequests, 0, 0) tooManyRequests(r, w) } } diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/timeout.go b/vendor/k8s.io/apiserver/pkg/server/filters/timeout.go index adb179f8235..56cd8a4ce05 100644 --- a/vendor/k8s.io/apiserver/pkg/server/filters/timeout.go +++ b/vendor/k8s.io/apiserver/pkg/server/filters/timeout.go @@ -58,7 +58,7 @@ func WithTimeoutForNonLongRunningRequests(handler http.Handler, longRunning apir postTimeoutFn := func() { cancel() - metrics.Record(req, requestInfo, "", http.StatusGatewayTimeout, 0, 0) + metrics.Record(req, requestInfo, metrics.APIServerComponent, "", http.StatusGatewayTimeout, 0, 0) } return req, time.After(timeout), postTimeoutFn, apierrors.NewTimeoutError(fmt.Sprintf("request did not complete within %s", timeout), 0) } diff --git a/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go b/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go index 0f78e246ce2..8206ea4b92b 100644 --- a/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go +++ b/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go @@ -276,9 +276,11 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) error { // Use an internal stop channel to allow cleanup of the listeners on error. internalStopCh := make(chan struct{}) - + var stoppedCh <-chan struct{} if s.SecureServingInfo != nil && s.Handler != nil { - if err := s.SecureServingInfo.Serve(s.Handler, s.ShutdownTimeout, internalStopCh); err != nil { + var err error + stoppedCh, err = s.SecureServingInfo.Serve(s.Handler, s.ShutdownTimeout, internalStopCh) + if err != nil { close(internalStopCh) return err } @@ -290,6 +292,9 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) error { go func() { <-stopCh close(internalStopCh) + if stoppedCh != nil { + <-stoppedCh + } s.HandlerChainWaitGroup.Wait() close(auditStopCh) }() @@ -329,6 +334,7 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo if !s.legacyAPIGroupPrefixes.Has(apiPrefix) { return fmt.Errorf("%q is not in the allowed legacy API prefixes: %v", apiPrefix, s.legacyAPIGroupPrefixes.List()) } + if err := s.installAPIResources(apiPrefix, apiGroupInfo); err != nil { return err } @@ -340,49 +346,57 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo return nil } +// Exposes given api groups in the API. +func (s *GenericAPIServer) InstallAPIGroups(apiGroupInfos ...*APIGroupInfo) error { + for _, apiGroupInfo := range apiGroupInfos { + // Do not register empty group or empty version. Doing so claims /apis/ for the wrong entity to be returned. + // Catching these here places the error much closer to its origin + if len(apiGroupInfo.PrioritizedVersions[0].Group) == 0 { + return fmt.Errorf("cannot register handler with an empty group for %#v", *apiGroupInfo) + } + if len(apiGroupInfo.PrioritizedVersions[0].Version) == 0 { + return fmt.Errorf("cannot register handler with an empty version for %#v", *apiGroupInfo) + } + } + + for _, apiGroupInfo := range apiGroupInfos { + if err := s.installAPIResources(APIGroupPrefix, apiGroupInfo); err != nil { + return fmt.Errorf("unable to install api resources: %v", err) + } + + // setup discovery + // Install the version handler. + // Add a handler at /apis/ to enumerate all versions supported by this group. + apiVersionsForDiscovery := []metav1.GroupVersionForDiscovery{} + for _, groupVersion := range apiGroupInfo.PrioritizedVersions { + // Check the config to make sure that we elide versions that don't have any resources + if len(apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version]) == 0 { + continue + } + apiVersionsForDiscovery = append(apiVersionsForDiscovery, metav1.GroupVersionForDiscovery{ + GroupVersion: groupVersion.String(), + Version: groupVersion.Version, + }) + } + preferredVersionForDiscovery := metav1.GroupVersionForDiscovery{ + GroupVersion: apiGroupInfo.PrioritizedVersions[0].String(), + Version: apiGroupInfo.PrioritizedVersions[0].Version, + } + apiGroup := metav1.APIGroup{ + Name: apiGroupInfo.PrioritizedVersions[0].Group, + Versions: apiVersionsForDiscovery, + PreferredVersion: preferredVersionForDiscovery, + } + + s.DiscoveryGroupManager.AddGroup(apiGroup) + s.Handler.GoRestfulContainer.Add(discovery.NewAPIGroupHandler(s.Serializer, apiGroup).WebService()) + } + return nil +} + // Exposes the given api group in the API. func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error { - // Do not register empty group or empty version. Doing so claims /apis/ for the wrong entity to be returned. - // Catching these here places the error much closer to its origin - if len(apiGroupInfo.PrioritizedVersions[0].Group) == 0 { - return fmt.Errorf("cannot register handler with an empty group for %#v", *apiGroupInfo) - } - if len(apiGroupInfo.PrioritizedVersions[0].Version) == 0 { - return fmt.Errorf("cannot register handler with an empty version for %#v", *apiGroupInfo) - } - - if err := s.installAPIResources(APIGroupPrefix, apiGroupInfo); err != nil { - return err - } - - // setup discovery - // Install the version handler. - // Add a handler at /apis/ to enumerate all versions supported by this group. - apiVersionsForDiscovery := []metav1.GroupVersionForDiscovery{} - for _, groupVersion := range apiGroupInfo.PrioritizedVersions { - // Check the config to make sure that we elide versions that don't have any resources - if len(apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version]) == 0 { - continue - } - apiVersionsForDiscovery = append(apiVersionsForDiscovery, metav1.GroupVersionForDiscovery{ - GroupVersion: groupVersion.String(), - Version: groupVersion.Version, - }) - } - preferredVersionForDiscovery := metav1.GroupVersionForDiscovery{ - GroupVersion: apiGroupInfo.PrioritizedVersions[0].String(), - Version: apiGroupInfo.PrioritizedVersions[0].Version, - } - apiGroup := metav1.APIGroup{ - Name: apiGroupInfo.PrioritizedVersions[0].Group, - Versions: apiVersionsForDiscovery, - PreferredVersion: preferredVersionForDiscovery, - } - - s.DiscoveryGroupManager.AddGroup(apiGroup) - s.Handler.GoRestfulContainer.Add(discovery.NewAPIGroupHandler(s.Serializer, apiGroup).WebService()) - - return nil + return s.InstallAPIGroups(apiGroupInfo) } func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion, apiPrefix string) *genericapi.APIGroupVersion { diff --git a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go index 17d85fbe637..ebb3dadfb79 100644 --- a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -167,7 +167,7 @@ func handleRootHealthz(checks ...HealthzChecker) http.HandlerFunc { if err := check.Check(r); err != nil { // don't include the error since this endpoint is public. If someone wants more detail // they should have explicit permission to the detailed checks. - klog.V(6).Infof("healthz check %v failed: %v", check.Name(), err) + klog.V(4).Infof("healthz check %v failed: %v", check.Name(), err) fmt.Fprintf(&verboseOut, "[-]%v failed: reason withheld\n", check.Name()) failed = true } else { @@ -185,6 +185,8 @@ func handleRootHealthz(checks ...HealthzChecker) http.HandlerFunc { return } + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") if _, found := r.URL.Query()["verbose"]; !found { fmt.Fprint(w, "ok") return diff --git a/vendor/k8s.io/apiserver/pkg/server/hooks.go b/vendor/k8s.io/apiserver/pkg/server/hooks.go index 921255218bc..d431eda869b 100644 --- a/vendor/k8s.io/apiserver/pkg/server/hooks.go +++ b/vendor/k8s.io/apiserver/pkg/server/hooks.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "net/http" + "runtime/debug" "k8s.io/klog" @@ -58,6 +59,9 @@ type PostStartHookProvider interface { type postStartHookEntry struct { hook PostStartHookFunc + // originatingStack holds the stack that registered postStartHooks. This allows us to show a more helpful message + // for duplicate registration. + originatingStack string // done will be closed when the postHook is finished done chan struct{} @@ -85,15 +89,18 @@ func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc) if s.postStartHooksCalled { return fmt.Errorf("unable to add %q because PostStartHooks have already been called", name) } - if _, exists := s.postStartHooks[name]; exists { - return fmt.Errorf("unable to add %q because it is already registered", name) + if postStartHook, exists := s.postStartHooks[name]; exists { + // this is programmer error, but it can be hard to debug + return fmt.Errorf("unable to add %q because it was already registered by: %s", name, postStartHook.originatingStack) } // done is closed when the poststarthook is finished. This is used by the health check to be able to indicate // that the poststarthook is finished done := make(chan struct{}) - s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}) - s.postStartHooks[name] = postStartHookEntry{hook: hook, done: done} + if err := s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}); err != nil { + return err + } + s.postStartHooks[name] = postStartHookEntry{hook: hook, originatingStack: string(debug.Stack()), done: done} return nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/mux/OWNERS b/vendor/k8s.io/apiserver/pkg/server/mux/OWNERS old mode 100755 new mode 100644 index 9d268c4d148..4da107c8c38 --- a/vendor/k8s.io/apiserver/pkg/server/mux/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/server/mux/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sttts diff --git a/vendor/k8s.io/apiserver/pkg/server/mux/doc.go b/vendor/k8s.io/apiserver/pkg/server/mux/doc.go index da9fb8ed7f5..178aa9fe6c0 100644 --- a/vendor/k8s.io/apiserver/pkg/server/mux/doc.go +++ b/vendor/k8s.io/apiserver/pkg/server/mux/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package mux contains abstractions for http multiplexing of APIs. -package mux +package mux // import "k8s.io/apiserver/pkg/server/mux" diff --git a/vendor/k8s.io/apiserver/pkg/server/mux/pathrecorder.go b/vendor/k8s.io/apiserver/pkg/server/mux/pathrecorder.go index 16857cc8a6b..74ed8f6776a 100644 --- a/vendor/k8s.io/apiserver/pkg/server/mux/pathrecorder.go +++ b/vendor/k8s.io/apiserver/pkg/server/mux/pathrecorder.go @@ -55,7 +55,7 @@ type PathRecorderMux struct { pathStacks map[string]string } -// pathHandler is an http.Handler that will satify requests first by exact match, then by prefix, +// pathHandler is an http.Handler that will satisfy requests first by exact match, then by prefix, // then by notFoundHandler type pathHandler struct { // muxName is used for logging so you can trace requests through diff --git a/vendor/k8s.io/apiserver/pkg/server/options/BUILD b/vendor/k8s.io/apiserver/pkg/server/options/BUILD index 79c96a13942..6791981be13 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/BUILD +++ b/vendor/k8s.io/apiserver/pkg/server/options/BUILD @@ -36,7 +36,6 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/metrics:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/admission/plugin/initialization:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating:go_default_library", @@ -63,7 +62,6 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//staging/src/k8s.io/apiserver/plugin/pkg/audit/buffered:go_default_library", "//staging/src/k8s.io/apiserver/plugin/pkg/audit/dynamic:go_default_library", @@ -77,6 +75,8 @@ go_library( "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/pborman/uuid:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/gopkg.in/natefinch/lumberjack.v2:go_default_library", @@ -114,12 +114,12 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api/v1:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/server/options/OWNERS b/vendor/k8s.io/apiserver/pkg/server/options/OWNERS old mode 100755 new mode 100644 index 9d6b439de8d..0e84109d7d4 --- a/vendor/k8s.io/apiserver/pkg/server/options/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/server/options/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - wojtek-t diff --git a/vendor/k8s.io/apiserver/pkg/server/options/admission.go b/vendor/k8s.io/apiserver/pkg/server/options/admission.go index 53c8c5e2f05..d07180f9a57 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/admission.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/admission.go @@ -61,6 +61,8 @@ type AdmissionOptions struct { ConfigFile string // Plugins contains all registered plugins. Plugins *admission.Plugins + // Decorators is a list of admission decorator to wrap around the admission plugins + Decorators admission.Decorators } // NewAdmissionOptions creates a new instance of AdmissionOptions @@ -73,12 +75,14 @@ type AdmissionOptions struct { // Servers that do care can overwrite/append that field after creation. func NewAdmissionOptions() *AdmissionOptions { options := &AdmissionOptions{ - Plugins: admission.NewPlugins(), + Plugins: admission.NewPlugins(), + Decorators: admission.Decorators{admission.DecoratorFunc(admissionmetrics.WithControllerMetrics)}, // This list is mix of mutating admission plugins and validating // admission plugins. The apiserver always runs the validating ones // after all the mutating ones, so their relative order in this list // doesn't matter. RecommendedPluginOrder: []string{lifecycle.PluginName, mutatingwebhook.PluginName, validatingwebhook.PluginName}, + DefaultOffPlugins: sets.NewString(), } server.RegisterAllAdmissionPlugins(options.Plugins) return options @@ -113,18 +117,12 @@ func (a *AdmissionOptions) ApplyTo( c *server.Config, informers informers.SharedInformerFactory, kubeAPIServerClientConfig *rest.Config, - scheme *runtime.Scheme, pluginInitializers ...admission.PluginInitializer, ) error { if a == nil { return nil } - // Admission need scheme to construct admission initializer. - if scheme == nil { - return fmt.Errorf("admission depends on a scheme, it cannot be nil") - } - // Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig. if informers == nil { return fmt.Errorf("admission depends on a Kubernetes core API shared informer, it cannot be nil") @@ -141,12 +139,12 @@ func (a *AdmissionOptions) ApplyTo( if err != nil { return err } - genericInitializer := initializer.New(clientset, informers, c.Authorization.Authorizer, scheme) + genericInitializer := initializer.New(clientset, informers, c.Authorization.Authorizer) initializersChain := admission.PluginInitializers{} pluginInitializers = append(pluginInitializers, genericInitializer) initializersChain = append(initializersChain, pluginInitializers...) - admissionChain, err := a.Plugins.NewFromPlugins(pluginNames, pluginsConfigProvider, initializersChain, admission.DecoratorFunc(admissionmetrics.WithControllerMetrics)) + admissionChain, err := a.Plugins.NewFromPlugins(pluginNames, pluginsConfigProvider, initializersChain, a.Decorators) if err != nil { return err } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go b/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go index 71eda2981a6..65f143bf0d7 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go @@ -25,18 +25,18 @@ import ( "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/resourceconfig" serverstore "k8s.io/apiserver/pkg/server/storage" - utilflag "k8s.io/apiserver/pkg/util/flag" + cliflag "k8s.io/component-base/cli/flag" ) // APIEnablementOptions contains the options for which resources to turn on and off. // Given small aggregated API servers, this option isn't required for "normal" API servers type APIEnablementOptions struct { - RuntimeConfig utilflag.ConfigurationMap + RuntimeConfig cliflag.ConfigurationMap } func NewAPIEnablementOptions() *APIEnablementOptions { return &APIEnablementOptions{ - RuntimeConfig: make(utilflag.ConfigurationMap), + RuntimeConfig: make(cliflag.ConfigurationMap), } } @@ -84,6 +84,7 @@ func (s *APIEnablementOptions) Validate(registries ...GroupRegisty) []error { // ApplyTo override MergedResourceConfig with defaults and registry func (s *APIEnablementOptions) ApplyTo(c *server.Config, defaultResourceConfig *serverstore.ResourceConfig, registry resourceconfig.GroupVersionRegistry) error { + if s == nil { return nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/authentication.go b/vendor/k8s.io/apiserver/pkg/server/options/authentication.go index 00d905617fd..9dfeec8c4c1 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/authentication.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/authentication.go @@ -17,12 +17,15 @@ limitations under the License. package options import ( + "encoding/json" "fmt" + "io/ioutil" "time" "github.com/spf13/pflag" "k8s.io/klog" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/authentication/authenticatorfactory" @@ -32,6 +35,70 @@ import ( "k8s.io/client-go/tools/clientcmd" ) +type RequestHeaderAuthenticationOptions struct { + // ClientCAFile is the root certificate bundle to verify client certificates on incoming requests + // before trusting usernames in headers. + ClientCAFile string + + UsernameHeaders []string + GroupHeaders []string + ExtraHeaderPrefixes []string + AllowedNames []string +} + +func (s *RequestHeaderAuthenticationOptions) AddFlags(fs *pflag.FlagSet) { + if s == nil { + return + } + + fs.StringSliceVar(&s.UsernameHeaders, "requestheader-username-headers", s.UsernameHeaders, ""+ + "List of request headers to inspect for usernames. X-Remote-User is common.") + + fs.StringSliceVar(&s.GroupHeaders, "requestheader-group-headers", s.GroupHeaders, ""+ + "List of request headers to inspect for groups. X-Remote-Group is suggested.") + + fs.StringSliceVar(&s.ExtraHeaderPrefixes, "requestheader-extra-headers-prefix", s.ExtraHeaderPrefixes, ""+ + "List of request header prefixes to inspect. X-Remote-Extra- is suggested.") + + fs.StringVar(&s.ClientCAFile, "requestheader-client-ca-file", s.ClientCAFile, ""+ + "Root certificate bundle to use to verify client certificates on incoming requests "+ + "before trusting usernames in headers specified by --requestheader-username-headers. "+ + "WARNING: generally do not depend on authorization being already done for incoming requests.") + + fs.StringSliceVar(&s.AllowedNames, "requestheader-allowed-names", s.AllowedNames, ""+ + "List of client certificate common names to allow to provide usernames in headers "+ + "specified by --requestheader-username-headers. If empty, any client certificate validated "+ + "by the authorities in --requestheader-client-ca-file is allowed.") +} + +// ToAuthenticationRequestHeaderConfig returns a RequestHeaderConfig config object for these options +// if necessary, nil otherwise. +func (s *RequestHeaderAuthenticationOptions) ToAuthenticationRequestHeaderConfig() *authenticatorfactory.RequestHeaderConfig { + if len(s.ClientCAFile) == 0 { + return nil + } + + return &authenticatorfactory.RequestHeaderConfig{ + UsernameHeaders: s.UsernameHeaders, + GroupHeaders: s.GroupHeaders, + ExtraHeaderPrefixes: s.ExtraHeaderPrefixes, + ClientCA: s.ClientCAFile, + AllowedClientNames: s.AllowedNames, + } +} + +type ClientCertAuthenticationOptions struct { + // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates + ClientCA string +} + +func (s *ClientCertAuthenticationOptions) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&s.ClientCA, "client-ca-file", s.ClientCA, ""+ + "If set, any request presenting a client certificate signed by one of "+ + "the authorities in the client-ca-file is authenticated with an identity "+ + "corresponding to the CommonName of the client certificate.") +} + // DelegatingAuthenticationOptions provides an easy way for composing API servers to delegate their authentication to // the root kube API server. The API federator will act as // a front proxy and direction connections will be able to delegate to the core kube API server @@ -46,6 +113,10 @@ type DelegatingAuthenticationOptions struct { // CacheTTL is the length of time that a token authentication answer will be cached. CacheTTL time.Duration + ClientCert ClientCertAuthenticationOptions + RequestHeader RequestHeaderAuthenticationOptions + + // SkipInClusterLookup indicates missing authentication configuration should not be retrieved from the cluster configmap SkipInClusterLookup bool // TolerateInClusterLookupFailure indicates failures to look up authentication configuration from the cluster configmap should not be fatal. @@ -57,6 +128,12 @@ func NewDelegatingAuthenticationOptions() *DelegatingAuthenticationOptions { return &DelegatingAuthenticationOptions{ // very low for responsiveness, but high enough to handle storms CacheTTL: 10 * time.Second, + ClientCert: ClientCertAuthenticationOptions{}, + RequestHeader: RequestHeaderAuthenticationOptions{ + UsernameHeaders: []string{"x-remote-user"}, + GroupHeaders: []string{"x-remote-group"}, + ExtraHeaderPrefixes: []string{"x-remote-extra-"}, + }, } } @@ -81,6 +158,9 @@ func (s *DelegatingAuthenticationOptions) AddFlags(fs *pflag.FlagSet) { fs.DurationVar(&s.CacheTTL, "authentication-token-webhook-cache-ttl", s.CacheTTL, "The duration to cache responses from the webhook token authenticator.") + s.ClientCert.AddFlags(fs) + s.RequestHeader.AddFlags(fs) + fs.BoolVar(&s.SkipInClusterLookup, "authentication-skip-lookup", s.SkipInClusterLookup, ""+ "If false, the authentication-kubeconfig will be used to lookup missing authentication "+ "configuration from the cluster.") @@ -118,6 +198,17 @@ func (s *DelegatingAuthenticationOptions) ApplyTo(c *server.AuthenticationInfo, } } + // configure AuthenticationInfo config + cfg.ClientCAFile = s.ClientCert.ClientCA + if err = c.ApplyClientCert(s.ClientCert.ClientCA, servingInfo); err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + + cfg.RequestHeaderConfig = s.RequestHeader.ToAuthenticationRequestHeaderConfig() + if err = c.ApplyClientCert(s.RequestHeader.ClientCAFile, servingInfo); err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + // create authenticator authenticator, err := cfg.New() if err != nil { @@ -140,26 +231,133 @@ const ( ) func (s *DelegatingAuthenticationOptions) lookupMissingConfigInCluster(client kubernetes.Interface) error { + if len(s.ClientCert.ClientCA) > 0 && len(s.RequestHeader.ClientCAFile) > 0 { + return nil + } if client == nil { + if len(s.ClientCert.ClientCA) == 0 { + klog.Warningf("No authentication-kubeconfig provided in order to lookup client-ca-file in configmap/%s in %s, so client certificate authentication won't work.", authenticationConfigMapName, authenticationConfigMapNamespace) + } + if len(s.RequestHeader.ClientCAFile) == 0 { + klog.Warningf("No authentication-kubeconfig provided in order to lookup requestheader-client-ca-file in configmap/%s in %s, so request-header client certificate authentication won't work.", authenticationConfigMapName, authenticationConfigMapNamespace) + } return nil } - _, err := client.CoreV1().ConfigMaps(authenticationConfigMapNamespace).Get(authenticationConfigMapName, metav1.GetOptions{}) + authConfigMap, err := client.CoreV1().ConfigMaps(authenticationConfigMapNamespace).Get(authenticationConfigMapName, metav1.GetOptions{}) switch { case errors.IsNotFound(err): // ignore, authConfigMap is nil now case errors.IsForbidden(err): klog.Warningf("Unable to get configmap/%s in %s. Usually fixed by "+ - "'kubectl create rolebinding -n %s ROLE_NAME --role=%s --serviceaccount=YOUR_NS:YOUR_SA'", + "'kubectl create rolebinding -n %s ROLEBINDING_NAME --role=%s --serviceaccount=YOUR_NS:YOUR_SA'", authenticationConfigMapName, authenticationConfigMapNamespace, authenticationConfigMapNamespace, authenticationRoleName) return err case err != nil: return err } + if len(s.ClientCert.ClientCA) == 0 { + if authConfigMap != nil { + opt, err := inClusterClientCA(authConfigMap) + if err != nil { + return err + } + if opt != nil { + s.ClientCert = *opt + } + } + if len(s.ClientCert.ClientCA) == 0 { + klog.Warningf("Cluster doesn't provide client-ca-file in configmap/%s in %s, so client certificate authentication won't work.", authenticationConfigMapName, authenticationConfigMapNamespace) + } + } + + if len(s.RequestHeader.ClientCAFile) == 0 { + if authConfigMap != nil { + opt, err := inClusterRequestHeader(authConfigMap) + if err != nil { + return err + } + if opt != nil { + s.RequestHeader = *opt + } + } + if len(s.RequestHeader.ClientCAFile) == 0 { + klog.Warningf("Cluster doesn't provide requestheader-client-ca-file in configmap/%s in %s, so request-header client certificate authentication won't work.", authenticationConfigMapName, authenticationConfigMapNamespace) + } + } + return nil } +func inClusterClientCA(authConfigMap *v1.ConfigMap) (*ClientCertAuthenticationOptions, error) { + clientCA, ok := authConfigMap.Data["client-ca-file"] + if !ok { + // not having a client-ca is fine, return nil + return nil, nil + } + + f, err := ioutil.TempFile("", "client-ca-file") + if err != nil { + return nil, err + } + if err := ioutil.WriteFile(f.Name(), []byte(clientCA), 0600); err != nil { + return nil, err + } + return &ClientCertAuthenticationOptions{ClientCA: f.Name()}, nil +} + +func inClusterRequestHeader(authConfigMap *v1.ConfigMap) (*RequestHeaderAuthenticationOptions, error) { + requestHeaderCA, ok := authConfigMap.Data["requestheader-client-ca-file"] + if !ok { + // not having a requestheader-client-ca is fine, return nil + return nil, nil + } + + f, err := ioutil.TempFile("", "requestheader-client-ca-file") + if err != nil { + return nil, err + } + if err := ioutil.WriteFile(f.Name(), []byte(requestHeaderCA), 0600); err != nil { + return nil, err + } + usernameHeaders, err := deserializeStrings(authConfigMap.Data["requestheader-username-headers"]) + if err != nil { + return nil, err + } + groupHeaders, err := deserializeStrings(authConfigMap.Data["requestheader-group-headers"]) + if err != nil { + return nil, err + } + extraHeaderPrefixes, err := deserializeStrings(authConfigMap.Data["requestheader-extra-headers-prefix"]) + if err != nil { + return nil, err + } + allowedNames, err := deserializeStrings(authConfigMap.Data["requestheader-allowed-names"]) + if err != nil { + return nil, err + } + + return &RequestHeaderAuthenticationOptions{ + UsernameHeaders: usernameHeaders, + GroupHeaders: groupHeaders, + ExtraHeaderPrefixes: extraHeaderPrefixes, + ClientCAFile: f.Name(), + AllowedNames: allowedNames, + }, nil +} + +func deserializeStrings(in string) ([]string, error) { + if len(in) == 0 { + return nil, nil + } + var ret []string + if err := json.Unmarshal([]byte(in), &ret); err != nil { + return nil, err + } + return ret, nil +} + // getClient returns a Kubernetes clientset. If s.RemoteKubeConfigFileOptional is true, nil will be returned // if no kubeconfig is specified by the user and the in-cluster config is not found. func (s *DelegatingAuthenticationOptions) getClient() (kubernetes.Interface, error) { diff --git a/vendor/k8s.io/apiserver/pkg/server/options/deprecated_insecure_serving.go b/vendor/k8s.io/apiserver/pkg/server/options/deprecated_insecure_serving.go index f2ede523fc3..cf959ed7cf7 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/deprecated_insecure_serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/deprecated_insecure_serving.go @@ -69,6 +69,7 @@ func (s *DeprecatedInsecureServingOptions) AddFlags(fs *pflag.FlagSet) { fs.IPVar(&s.BindAddress, "insecure-bind-address", s.BindAddress, ""+ "The IP address on which to serve the --insecure-port (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces).") + // Though this flag is deprecated, we discovered security concerns over how to do health checks without it e.g. #43784 fs.MarkDeprecated("insecure-bind-address", "This flag will be removed in a future version.") fs.Lookup("insecure-bind-address").Hidden = false @@ -92,7 +93,7 @@ func (s *DeprecatedInsecureServingOptions) AddUnqualifiedFlags(fs *pflag.FlagSet fs.Lookup("port").Hidden = false } -// ApplyTo adds DeprecatedInsecureServingOptions to the insecureserverinfo amd kube-controller manager configuration. +// ApplyTo adds DeprecatedInsecureServingOptions to the insecureserverinfo and kube-controller manager configuration. // Note: the double pointer allows to set the *DeprecatedInsecureServingInfo to nil without referencing the struct hosting this pointer. func (s *DeprecatedInsecureServingOptions) ApplyTo(c **server.DeprecatedInsecureServingInfo) error { if s == nil { @@ -128,7 +129,8 @@ func (o *DeprecatedInsecureServingOptions) WithLoopback() *DeprecatedInsecureSer } // DeprecatedInsecureServingOptionsWithLoopback adds loopback functionality to the DeprecatedInsecureServingOptions. -// DEPRECATED: all insecure serving options are removed in a future version +// DEPRECATED: all insecure serving options will be removed in a future version, however note that +// there are security concerns over how health checks can work here - see e.g. #43784 type DeprecatedInsecureServingOptionsWithLoopback struct { *DeprecatedInsecureServingOptions } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS b/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS index 498b470c9bf..71edc3ecdcc 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-encryption-at-rest-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go b/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go index d86a3e10181..de0201534d5 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go @@ -173,8 +173,16 @@ func GetPrefixTransformers(config *apiserverconfig.ResourceConfiguration) ([]val return nil, fmt.Errorf("remote KMS provider can't use empty string as endpoint") } + timeout := kmsPluginConnectionTimeout + if provider.KMS.Timeout != nil { + if provider.KMS.Timeout.Duration <= 0 { + return nil, fmt.Errorf("could not configure KMS plugin %q, timeout should be a positive value", provider.KMS.Name) + } + timeout = provider.KMS.Timeout.Duration + } + // Get gRPC client service with endpoint. - envelopeService, err := envelopeServiceFactory(provider.KMS.Endpoint, kmsPluginConnectionTimeout) + envelopeService, err := envelopeServiceFactory(provider.KMS.Endpoint, timeout) if err != nil { return nil, fmt.Errorf("could not configure KMS plugin %q, error: %v", provider.KMS.Name, err) } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/etcd.go b/vendor/k8s.io/apiserver/pkg/server/options/etcd.go index 67b28b8b8ae..6967bdb2078 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/etcd.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/etcd.go @@ -106,9 +106,10 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) { "Default watch cache size. If zero, watch cache will be disabled for resources that do not have a default watch size set.") fs.StringSliceVar(&s.WatchCacheSizes, "watch-cache-sizes", s.WatchCacheSizes, ""+ - "List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. "+ - "The individual override format: resource[.group]#size, where resource is lowercase plural (no version), "+ - "group is optional, and size is a number. It takes effect when watch-cache is enabled. "+ + "Watch cache size settings for some resources (pods, nodes, etc.), comma separated. "+ + "The individual setting format: resource[.group]#size, where resource is lowercase plural (no version), "+ + "group is omitted for resources of apiVersion v1 (the legacy core API) and included for others, "+ + "and size is a number. It takes effect when watch-cache is enabled. "+ "Some resources (replicationcontrollers, endpoints, nodes, pods, services, apiservices.apiregistration.k8s.io) "+ "have system defaults set by heuristics, others default to default-watch-cache-size") @@ -119,19 +120,19 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) { fs.IntVar(&dummyCacheSize, "deserialization-cache-size", 0, "Number of deserialized json objects to cache in memory.") fs.MarkDeprecated("deserialization-cache-size", "the deserialization cache was dropped in 1.13 with support for etcd2") - fs.StringSliceVar(&s.StorageConfig.ServerList, "etcd-servers", s.StorageConfig.ServerList, + fs.StringSliceVar(&s.StorageConfig.Transport.ServerList, "etcd-servers", s.StorageConfig.Transport.ServerList, "List of etcd servers to connect with (scheme://ip:port), comma separated.") fs.StringVar(&s.StorageConfig.Prefix, "etcd-prefix", s.StorageConfig.Prefix, "The prefix to prepend to all resource paths in etcd.") - fs.StringVar(&s.StorageConfig.KeyFile, "etcd-keyfile", s.StorageConfig.KeyFile, + fs.StringVar(&s.StorageConfig.Transport.KeyFile, "etcd-keyfile", s.StorageConfig.Transport.KeyFile, "SSL key file used to secure etcd communication.") - fs.StringVar(&s.StorageConfig.CertFile, "etcd-certfile", s.StorageConfig.CertFile, + fs.StringVar(&s.StorageConfig.Transport.CertFile, "etcd-certfile", s.StorageConfig.Transport.CertFile, "SSL certification file used to secure etcd communication.") - fs.StringVar(&s.StorageConfig.CAFile, "etcd-cafile", s.StorageConfig.CAFile, + fs.StringVar(&s.StorageConfig.Transport.CAFile, "etcd-cafile", s.StorageConfig.Transport.CAFile, "SSL Certificate Authority file used to secure etcd communication.") fs.StringVar(&s.EncryptionProviderConfigFilepath, "experimental-encryption-provider-config", s.EncryptionProviderConfigFilepath, diff --git a/vendor/k8s.io/apiserver/pkg/server/options/recommended.go b/vendor/k8s.io/apiserver/pkg/server/options/recommended.go index d85c3538552..96f646665c7 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/recommended.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/recommended.go @@ -82,9 +82,8 @@ func (o *RecommendedOptions) AddFlags(fs *pflag.FlagSet) { } // ApplyTo adds RecommendedOptions to the server configuration. -// scheme is the scheme of the apiserver types that are sent to the admission chain. // pluginInitializers can be empty, it is only need for additional initializers. -func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig, scheme *runtime.Scheme) error { +func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig) error { if err := o.Etcd.ApplyTo(&config.Config); err != nil { return err } @@ -108,7 +107,7 @@ func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig, scheme *r } if initializers, err := o.ExtraAdmissionInitializers(config); err != nil { return err - } else if err := o.Admission.ApplyTo(&config.Config, config.SharedInformerFactory, config.ClientConfig, scheme, initializers...); err != nil { + } else if err := o.Admission.ApplyTo(&config.Config, config.SharedInformerFactory, config.ClientConfig, initializers...); err != nil { return err } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go index de6b32f455f..02639bf93b9 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go @@ -174,5 +174,5 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { "handler, which picks a randomized value above this number as the connection timeout, "+ "to spread out load.") - utilfeature.DefaultFeatureGate.AddFlag(fs) + utilfeature.DefaultMutableFeatureGate.AddFlag(fs) } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/serving.go b/vendor/k8s.io/apiserver/pkg/server/options/serving.go index 1f0dc585481..76fee81b88b 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/serving.go @@ -29,8 +29,9 @@ import ( utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apiserver/pkg/server" - utilflag "k8s.io/apiserver/pkg/util/flag" certutil "k8s.io/client-go/util/cert" + "k8s.io/client-go/util/keyutil" + cliflag "k8s.io/component-base/cli/flag" ) type SecureServingOptions struct { @@ -54,7 +55,7 @@ type SecureServingOptions struct { // ServerCert is the TLS cert info for serving secure traffic ServerCert GeneratableKeyCert // SNICertKeys are named CertKeys for serving secure traffic with SNI support. - SNICertKeys []utilflag.NamedCertKey + SNICertKeys []cliflag.NamedCertKey // CipherSuites is the list of allowed cipher suites for the server. // Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). CipherSuites []string @@ -169,18 +170,18 @@ func (s *SecureServingOptions) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&s.ServerCert.CertKey.KeyFile, "tls-private-key-file", s.ServerCert.CertKey.KeyFile, "File containing the default x509 private key matching --tls-cert-file.") - tlsCipherPossibleValues := utilflag.TLSCipherPossibleValues() + tlsCipherPossibleValues := cliflag.TLSCipherPossibleValues() fs.StringSliceVar(&s.CipherSuites, "tls-cipher-suites", s.CipherSuites, "Comma-separated list of cipher suites for the server. "+ "If omitted, the default Go cipher suites will be use. "+ "Possible values: "+strings.Join(tlsCipherPossibleValues, ",")) - tlsPossibleVersions := utilflag.TLSPossibleVersions() + tlsPossibleVersions := cliflag.TLSPossibleVersions() fs.StringVar(&s.MinTLSVersion, "tls-min-version", s.MinTLSVersion, "Minimum TLS version supported. "+ "Possible values: "+strings.Join(tlsPossibleVersions, ", ")) - fs.Var(utilflag.NewNamedCertKeyArray(&s.SNICertKeys), "tls-sni-cert-key", ""+ + fs.Var(cliflag.NewNamedCertKeyArray(&s.SNICertKeys), "tls-sni-cert-key", ""+ "A pair of x509 certificate and private key file paths, optionally suffixed with a list of "+ "domain patterns which are fully qualified domain names, possibly with prefixed wildcard "+ "segments. If no domain patterns are provided, the names of the certificate are "+ @@ -238,7 +239,7 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } if len(s.CipherSuites) != 0 { - cipherSuites, err := utilflag.TLSCipherSuites(s.CipherSuites) + cipherSuites, err := cliflag.TLSCipherSuites(s.CipherSuites) if err != nil { return err } @@ -246,7 +247,7 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } var err error - c.MinTLSVersion, err = utilflag.TLSVersion(s.MinTLSVersion) + c.MinTLSVersion, err = cliflag.TLSVersion(s.MinTLSVersion) if err != nil { return err } @@ -311,7 +312,7 @@ func (s *SecureServingOptions) MaybeDefaultWithSelfSignedCerts(publicAddress str if err := certutil.WriteCert(keyCert.CertFile, cert); err != nil { return err } - if err := certutil.WriteKey(keyCert.KeyFile, key); err != nil { + if err := keyutil.WriteKey(keyCert.KeyFile, key); err != nil { return err } klog.Infof("Generated self-signed cert (%s, %s)", keyCert.CertFile, keyCert.KeyFile) diff --git a/vendor/k8s.io/apiserver/pkg/server/resourceconfig/BUILD b/vendor/k8s.io/apiserver/pkg/server/resourceconfig/BUILD index bc889d28c7a..6c9b97f0920 100644 --- a/vendor/k8s.io/apiserver/pkg/server/resourceconfig/BUILD +++ b/vendor/k8s.io/apiserver/pkg/server/resourceconfig/BUILD @@ -13,7 +13,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go b/vendor/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go index cb1c54e3f0b..09047cfe978 100644 --- a/vendor/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go +++ b/vendor/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go @@ -24,7 +24,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" serverstore "k8s.io/apiserver/pkg/server/storage" - utilflag "k8s.io/apiserver/pkg/util/flag" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/klog" ) // GroupVersionRegistry provides access to registered group versions. @@ -50,24 +51,12 @@ func MergeResourceEncodingConfigs( return resourceEncodingConfig } -// MergeGroupEncodingConfigs merges the given defaultResourceConfig with specific GroupVersion overrides. -func MergeGroupEncodingConfigs( - defaultResourceEncoding *serverstore.DefaultResourceEncodingConfig, - storageEncodingOverrides map[string]schema.GroupVersion, -) *serverstore.DefaultResourceEncodingConfig { - resourceEncodingConfig := defaultResourceEncoding - for group, storageEncodingVersion := range storageEncodingOverrides { - resourceEncodingConfig.SetVersionEncoding(group, storageEncodingVersion, schema.GroupVersion{Group: group, Version: runtime.APIVersionInternal}) - } - return resourceEncodingConfig -} - // MergeAPIResourceConfigs merges the given defaultAPIResourceConfig with the given resourceConfigOverrides. // Exclude the groups not registered in registry, and check if version is // not registered in group, then it will fail. func MergeAPIResourceConfigs( defaultAPIResourceConfig *serverstore.ResourceConfig, - resourceConfigOverrides utilflag.ConfigurationMap, + resourceConfigOverrides cliflag.ConfigurationMap, registry GroupVersionRegistry, ) (*serverstore.ResourceConfig, error) { resourceConfig := defaultAPIResourceConfig @@ -94,7 +83,7 @@ func MergeAPIResourceConfigs( } tokens := strings.Split(key, "/") - if len(tokens) != 2 { + if len(tokens) < 2 { continue } groupVersionString := tokens[0] + "/" + tokens[1] @@ -103,6 +92,13 @@ func MergeAPIResourceConfigs( return nil, fmt.Errorf("invalid key %s", key) } + // individual resource enablement/disablement is only supported in the extensions/v1beta1 API group for legacy reasons. + // all other API groups are expected to contain coherent sets of resources that are enabled/disabled together. + if len(tokens) > 2 && (groupVersion != schema.GroupVersion{Group: "extensions", Version: "v1beta1"}) { + klog.Warningf("ignoring invalid key %s, individual resource enablement/disablement is not supported in %s, and will prevent starting in future releases", key, groupVersion.String()) + continue + } + // Exclude group not registered into the registry. if !registry.IsGroupRegistered(groupVersion.Group) { continue @@ -117,16 +113,28 @@ func MergeAPIResourceConfigs( return nil, err } if enabled { + // enable the groupVersion for "group/version=true" and "group/version/resource=true" resourceConfig.EnableVersions(groupVersion) - } else { + } else if len(tokens) == 2 { + // disable the groupVersion only for "group/version=false", not "group/version/resource=false" resourceConfig.DisableVersions(groupVersion) } + + if len(tokens) < 3 { + continue + } + groupVersionResource := groupVersion.WithResource(tokens[2]) + if enabled { + resourceConfig.EnableResources(groupVersionResource) + } else { + resourceConfig.DisableResources(groupVersionResource) + } } return resourceConfig, nil } -func getRuntimeConfigValue(overrides utilflag.ConfigurationMap, apiKey string, defaultValue bool) (bool, error) { +func getRuntimeConfigValue(overrides cliflag.ConfigurationMap, apiKey string, defaultValue bool) (bool, error) { flagValue, ok := overrides[apiKey] if ok { if flagValue == "" { @@ -142,7 +150,7 @@ func getRuntimeConfigValue(overrides utilflag.ConfigurationMap, apiKey string, d } // ParseGroups takes in resourceConfig and returns parsed groups. -func ParseGroups(resourceConfig utilflag.ConfigurationMap) ([]string, error) { +func ParseGroups(resourceConfig cliflag.ConfigurationMap) ([]string, error) { groups := []string{} for key := range resourceConfig { if key == "api/all" { diff --git a/vendor/k8s.io/apiserver/pkg/server/routes/BUILD b/vendor/k8s.io/apiserver/pkg/server/routes/BUILD index 0b81332a3a4..3e157eae31a 100644 --- a/vendor/k8s.io/apiserver/pkg/server/routes/BUILD +++ b/vendor/k8s.io/apiserver/pkg/server/routes/BUILD @@ -14,8 +14,6 @@ go_library( "metrics.go", "openapi.go", "profiling.go", - "swagger.go", - "swaggerui.go", "version.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/server/routes", @@ -27,13 +25,12 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server/routes/data/swagger:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd/metrics:go_default_library", - "//vendor/github.com/elazarl/go-bindata-assetfs:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", - "//vendor/github.com/emicklei/go-restful-swagger12:go_default_library", + "//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/handler:go_default_library", ], @@ -48,9 +45,6 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/apiserver/pkg/server/routes/data/swagger:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/apiserver/pkg/server/routes/OWNERS b/vendor/k8s.io/apiserver/pkg/server/routes/OWNERS old mode 100755 new mode 100644 index 9d268c4d148..4da107c8c38 --- a/vendor/k8s.io/apiserver/pkg/server/routes/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/server/routes/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sttts diff --git a/vendor/k8s.io/apiserver/pkg/server/routes/doc.go b/vendor/k8s.io/apiserver/pkg/server/routes/doc.go index adefbd3d559..603e899cde4 100644 --- a/vendor/k8s.io/apiserver/pkg/server/routes/doc.go +++ b/vendor/k8s.io/apiserver/pkg/server/routes/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package routes holds a collection of optional genericapiserver http handlers. -package routes +package routes // import "k8s.io/apiserver/pkg/server/routes" diff --git a/vendor/k8s.io/apiserver/pkg/server/secure_serving.go b/vendor/k8s.io/apiserver/pkg/server/secure_serving.go index 08006c96550..b3dce77fd35 100644 --- a/vendor/k8s.io/apiserver/pkg/server/secure_serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/secure_serving.go @@ -37,12 +37,12 @@ const ( defaultKeepAlivePeriod = 3 * time.Minute ) -// serveSecurely runs the secure http server. It fails only if certificates cannot -// be loaded or the initial listen call fails. The actual server loop (stoppable by closing -// stopCh) runs in a go routine, i.e. serveSecurely does not block. -func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Duration, stopCh <-chan struct{}) error { +// Serve runs the secure http server. It fails only if certificates cannot be loaded or the initial listen call fails. +// The actual server loop (stoppable by closing stopCh) runs in a go routine, i.e. Serve does not block. +// It returns a stoppedCh that is closed when all non-hijacked active requests have been processed. +func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Duration, stopCh <-chan struct{}) (<-chan struct{}, error) { if s.Listener == nil { - return fmt.Errorf("listener must not be nil") + return nil, fmt.Errorf("listener must not be nil") } secureServer := &http.Server{ @@ -110,7 +110,7 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur // apply settings to the server if err := http2.ConfigureServer(secureServer, http2Options); err != nil { - return fmt.Errorf("error configuring http2: %v", err) + return nil, fmt.Errorf("error configuring http2: %v", err) } klog.Infof("Serving securely on %s", secureServer.Addr) @@ -118,21 +118,25 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur } // RunServer listens on the given port if listener is not given, -// then spawns a go-routine continuously serving -// until the stopCh is closed. This function does not block. +// then spawns a go-routine continuously serving until the stopCh is closed. +// It returns a stoppedCh that is closed when all non-hijacked active requests +// have been processed. +// This function does not block // TODO: make private when insecure serving is gone from the kube-apiserver func RunServer( server *http.Server, ln net.Listener, shutDownTimeout time.Duration, stopCh <-chan struct{}, -) error { +) (<-chan struct{}, error) { if ln == nil { - return fmt.Errorf("listener must not be nil") + return nil, fmt.Errorf("listener must not be nil") } // Shutdown server gracefully. + stoppedCh := make(chan struct{}) go func() { + defer close(stoppedCh) <-stopCh ctx, cancel := context.WithTimeout(context.Background(), shutDownTimeout) server.Shutdown(ctx) @@ -159,18 +163,18 @@ func RunServer( } }() - return nil + return stoppedCh, nil } type NamedTLSCert struct { TLSCert tls.Certificate - // names is a list of domain patterns: fully qualified domain names, possibly prefixed with + // Names is a list of domain patterns: fully qualified domain names, possibly prefixed with // wildcard segments. Names []string } -// getNamedCertificateMap returns a map of *tls.Certificate by name. It's is +// GetNamedCertificateMap returns a map of *tls.Certificate by name. It's // suitable for use in tls.Config#NamedCertificates. Returns an error if any of the certs // cannot be loaded. Returns nil if len(certs) == 0 func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, error) { diff --git a/vendor/k8s.io/apiserver/pkg/server/signal.go b/vendor/k8s.io/apiserver/pkg/server/signal.go index 6f0cff4baed..0ea19d6606d 100644 --- a/vendor/k8s.io/apiserver/pkg/server/signal.go +++ b/vendor/k8s.io/apiserver/pkg/server/signal.go @@ -22,6 +22,7 @@ import ( ) var onlyOneSignalHandler = make(chan struct{}) +var shutdownHandler chan os.Signal // SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned // which is closed on one of these signals. If a second signal is caught, the program @@ -29,15 +30,30 @@ var onlyOneSignalHandler = make(chan struct{}) func SetupSignalHandler() <-chan struct{} { close(onlyOneSignalHandler) // panics when called twice + shutdownHandler = make(chan os.Signal, 2) + stop := make(chan struct{}) - c := make(chan os.Signal, 2) - signal.Notify(c, shutdownSignals...) + signal.Notify(shutdownHandler, shutdownSignals...) go func() { - <-c + <-shutdownHandler close(stop) - <-c + <-shutdownHandler os.Exit(1) // second signal. Exit directly. }() return stop } + +// RequestShutdown emulates a received event that is considered as shutdown signal (SIGTERM/SIGINT) +// This returns whether a handler was notified +func RequestShutdown() bool { + if shutdownHandler != nil { + select { + case shutdownHandler <- shutdownSignals[0]: + return true + default: + } + } + + return false +} diff --git a/vendor/k8s.io/apiserver/pkg/server/storage/doc.go b/vendor/k8s.io/apiserver/pkg/server/storage/doc.go index 71d4e2be7d4..36b0d22524d 100644 --- a/vendor/k8s.io/apiserver/pkg/server/storage/doc.go +++ b/vendor/k8s.io/apiserver/pkg/server/storage/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package storage contains the plumbing to setup the etcd storage of the apiserver. -package storage +package storage // import "k8s.io/apiserver/pkg/server/storage" diff --git a/vendor/k8s.io/apiserver/pkg/server/storage/resource_config.go b/vendor/k8s.io/apiserver/pkg/server/storage/resource_config.go index d16be4279a3..eb892b5a5c0 100644 --- a/vendor/k8s.io/apiserver/pkg/server/storage/resource_config.go +++ b/vendor/k8s.io/apiserver/pkg/server/storage/resource_config.go @@ -23,6 +23,7 @@ import ( // APIResourceConfigSource is the interface to determine which groups and versions are enabled type APIResourceConfigSource interface { VersionEnabled(version schema.GroupVersion) bool + ResourceEnabled(resource schema.GroupVersionResource) bool AnyVersionForGroupEnabled(group string) bool } @@ -30,18 +31,21 @@ var _ APIResourceConfigSource = &ResourceConfig{} type ResourceConfig struct { GroupVersionConfigs map[schema.GroupVersion]bool + ResourceConfigs map[schema.GroupVersionResource]bool } func NewResourceConfig() *ResourceConfig { - return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}} + return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}, ResourceConfigs: map[schema.GroupVersionResource]bool{}} } +// DisableAll disables all group/versions. It does not modify individual resource enablement/disablement. func (o *ResourceConfig) DisableAll() { for k := range o.GroupVersionConfigs { o.GroupVersionConfigs[k] = false } } +// EnableAll enables all group/versions. It does not modify individual resource enablement/disablement. func (o *ResourceConfig) EnableAll() { for k := range o.GroupVersionConfigs { o.GroupVersionConfigs[k] = true @@ -70,6 +74,29 @@ func (o *ResourceConfig) VersionEnabled(version schema.GroupVersion) bool { return false } +func (o *ResourceConfig) DisableResources(resources ...schema.GroupVersionResource) { + for _, resource := range resources { + o.ResourceConfigs[resource] = false + } +} + +func (o *ResourceConfig) EnableResources(resources ...schema.GroupVersionResource) { + for _, resource := range resources { + o.ResourceConfigs[resource] = true + } +} + +func (o *ResourceConfig) ResourceEnabled(resource schema.GroupVersionResource) bool { + if !o.VersionEnabled(resource.GroupVersion()) { + return false + } + resourceEnabled, explicitlySet := o.ResourceConfigs[resource] + if !explicitlySet { + return true + } + return resourceEnabled +} + func (o *ResourceConfig) AnyVersionForGroupEnabled(group string) bool { for version := range o.GroupVersionConfigs { if version.Group == group { diff --git a/vendor/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go b/vendor/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go index eff1fe8a417..efb22fbc8d6 100644 --- a/vendor/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go +++ b/vendor/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go @@ -34,50 +34,27 @@ type ResourceEncodingConfig interface { } type DefaultResourceEncodingConfig struct { - groups map[string]*GroupResourceEncodingConfig - scheme *runtime.Scheme + // resources records the overriding encoding configs for individual resources. + resources map[schema.GroupResource]*OverridingResourceEncoding + scheme *runtime.Scheme } -type GroupResourceEncodingConfig struct { - DefaultExternalEncoding schema.GroupVersion - ExternalResourceEncodings map[string]schema.GroupVersion - - DefaultInternalEncoding schema.GroupVersion - InternalResourceEncodings map[string]schema.GroupVersion +type OverridingResourceEncoding struct { + ExternalResourceEncoding schema.GroupVersion + InternalResourceEncoding schema.GroupVersion } var _ ResourceEncodingConfig = &DefaultResourceEncodingConfig{} func NewDefaultResourceEncodingConfig(scheme *runtime.Scheme) *DefaultResourceEncodingConfig { - return &DefaultResourceEncodingConfig{groups: map[string]*GroupResourceEncodingConfig{}, scheme: scheme} -} - -func newGroupResourceEncodingConfig(defaultEncoding, defaultInternalVersion schema.GroupVersion) *GroupResourceEncodingConfig { - return &GroupResourceEncodingConfig{ - DefaultExternalEncoding: defaultEncoding, ExternalResourceEncodings: map[string]schema.GroupVersion{}, - DefaultInternalEncoding: defaultInternalVersion, InternalResourceEncodings: map[string]schema.GroupVersion{}, - } -} - -func (o *DefaultResourceEncodingConfig) SetVersionEncoding(group string, externalEncodingVersion, internalVersion schema.GroupVersion) { - _, groupExists := o.groups[group] - if !groupExists { - o.groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion) - } - - o.groups[group].DefaultExternalEncoding = externalEncodingVersion - o.groups[group].DefaultInternalEncoding = internalVersion + return &DefaultResourceEncodingConfig{resources: map[schema.GroupResource]*OverridingResourceEncoding{}, scheme: scheme} } func (o *DefaultResourceEncodingConfig) SetResourceEncoding(resourceBeingStored schema.GroupResource, externalEncodingVersion, internalVersion schema.GroupVersion) { - group := resourceBeingStored.Group - _, groupExists := o.groups[group] - if !groupExists { - o.groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion) + o.resources[resourceBeingStored] = &OverridingResourceEncoding{ + ExternalResourceEncoding: externalEncodingVersion, + InternalResourceEncoding: internalVersion, } - - o.groups[group].ExternalResourceEncodings[resourceBeingStored.Resource] = externalEncodingVersion - o.groups[group].InternalResourceEncodings[resourceBeingStored.Resource] = internalVersion } func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { @@ -85,19 +62,13 @@ func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.Group return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) } - groupEncoding, groupExists := o.groups[resource.Group] - - if !groupExists { - // return the most preferred external version for the group - return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil + resourceOverride, resourceExists := o.resources[resource] + if resourceExists { + return resourceOverride.ExternalResourceEncoding, nil } - resourceOverride, resourceExists := groupEncoding.ExternalResourceEncodings[resource.Resource] - if !resourceExists { - return groupEncoding.DefaultExternalEncoding, nil - } - - return resourceOverride, nil + // return the most preferred external version for the group + return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil } func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { @@ -105,15 +76,9 @@ func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.Grou return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) } - groupEncoding, groupExists := o.groups[resource.Group] - if !groupExists { - return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil + resourceOverride, resourceExists := o.resources[resource] + if resourceExists { + return resourceOverride.InternalResourceEncoding, nil } - - resourceOverride, resourceExists := groupEncoding.InternalResourceEncodings[resource.Resource] - if !resourceExists { - return groupEncoding.DefaultInternalEncoding, nil - } - - return resourceOverride, nil + return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/storage/storage_codec.go b/vendor/k8s.io/apiserver/pkg/server/storage/storage_codec.go index e2f91bf13d2..96faa171229 100644 --- a/vendor/k8s.io/apiserver/pkg/server/storage/storage_codec.go +++ b/vendor/k8s.io/apiserver/pkg/server/storage/storage_codec.go @@ -40,15 +40,15 @@ type StorageCodecConfig struct { // NewStorageCodec assembles a storage codec for the provided storage media type, the provided serializer, and the requested // storage and memory versions. -func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, error) { +func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, runtime.GroupVersioner, error) { mediaType, _, err := mime.ParseMediaType(opts.StorageMediaType) if err != nil { - return nil, fmt.Errorf("%q is not a valid mime-type", opts.StorageMediaType) + return nil, nil, fmt.Errorf("%q is not a valid mime-type", opts.StorageMediaType) } serializer, ok := runtime.SerializerInfoForMediaType(opts.StorageSerializer.SupportedMediaTypes(), mediaType) if !ok { - return nil, fmt.Errorf("unable to find serializer for %q", mediaType) + return nil, nil, fmt.Errorf("unable to find serializer for %q", mediaType) } s := serializer.Serializer @@ -74,14 +74,16 @@ func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, error) { decoders = opts.DecoderDecoratorFn(decoders) } + encodeVersioner := runtime.NewMultiGroupVersioner( + opts.StorageVersion, + schema.GroupKind{Group: opts.StorageVersion.Group}, + schema.GroupKind{Group: opts.MemoryVersion.Group}, + ) + // Ensure the storage receives the correct version. encoder = opts.StorageSerializer.EncoderForVersion( encoder, - runtime.NewMultiGroupVersioner( - opts.StorageVersion, - schema.GroupKind{Group: opts.StorageVersion.Group}, - schema.GroupKind{Group: opts.MemoryVersion.Group}, - ), + encodeVersioner, ) decoder := opts.StorageSerializer.DecoderToVersion( recognizer.NewDecoder(decoders...), @@ -92,5 +94,5 @@ func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, error) { ), ) - return runtime.NewCodec(encoder, decoder), nil + return runtime.NewCodec(encoder, decoder), encodeVersioner, nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go b/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go index a87ce4a5efb..267de1370b3 100644 --- a/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go +++ b/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go @@ -86,7 +86,7 @@ type DefaultStorageFactory struct { APIResourceConfigSource APIResourceConfigSource // newStorageCodecFn exists to be overwritten for unit testing. - newStorageCodecFn func(opts StorageCodecConfig) (codec runtime.Codec, err error) + newStorageCodecFn func(opts StorageCodecConfig) (codec runtime.Codec, encodeVersioner runtime.GroupVersioner, err error) } type groupResourceOverrides struct { @@ -121,7 +121,7 @@ type groupResourceOverrides struct { // Apply overrides the provided config and options if the override has a value in that position func (o groupResourceOverrides) Apply(config *storagebackend.Config, options *StorageCodecConfig) { if len(o.etcdLocation) > 0 { - config.ServerList = o.etcdLocation + config.Transport.ServerList = o.etcdLocation } if len(o.etcdPrefix) > 0 { config.Prefix = o.etcdPrefix @@ -278,7 +278,7 @@ func (s *DefaultStorageFactory) NewConfig(groupResource schema.GroupResource) (* } codecConfig.Config = storageConfig - storageConfig.Codec, err = s.newStorageCodecFn(codecConfig) + storageConfig.Codec, storageConfig.EncodeVersioner, err = s.newStorageCodecFn(codecConfig) if err != nil { return nil, err } @@ -290,7 +290,7 @@ func (s *DefaultStorageFactory) NewConfig(groupResource schema.GroupResource) (* // Backends returns all backends for all registered storage destinations. // Used for getting all instances for health validations. func (s *DefaultStorageFactory) Backends() []Backend { - servers := sets.NewString(s.StorageConfig.ServerList...) + servers := sets.NewString(s.StorageConfig.Transport.ServerList...) for _, overrides := range s.Overrides { servers.Insert(overrides.etcdLocation...) @@ -299,16 +299,16 @@ func (s *DefaultStorageFactory) Backends() []Backend { tlsConfig := &tls.Config{ InsecureSkipVerify: true, } - if len(s.StorageConfig.CertFile) > 0 && len(s.StorageConfig.KeyFile) > 0 { - cert, err := tls.LoadX509KeyPair(s.StorageConfig.CertFile, s.StorageConfig.KeyFile) + if len(s.StorageConfig.Transport.CertFile) > 0 && len(s.StorageConfig.Transport.KeyFile) > 0 { + cert, err := tls.LoadX509KeyPair(s.StorageConfig.Transport.CertFile, s.StorageConfig.Transport.KeyFile) if err != nil { klog.Errorf("failed to load key pair while getting backends: %s", err) } else { tlsConfig.Certificates = []tls.Certificate{cert} } } - if len(s.StorageConfig.CAFile) > 0 { - if caCert, err := ioutil.ReadFile(s.StorageConfig.CAFile); err != nil { + if len(s.StorageConfig.Transport.CAFile) > 0 { + if caCert, err := ioutil.ReadFile(s.StorageConfig.Transport.CAFile); err != nil { klog.Errorf("failed to read ca file while getting backends: %s", err) } else { caPool := x509.NewCertPool() diff --git a/vendor/k8s.io/apiserver/pkg/storage/OWNERS b/vendor/k8s.io/apiserver/pkg/storage/OWNERS index b7bff4f12f7..26ea9eeb431 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/storage/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - lavalamp - liggitt diff --git a/vendor/k8s.io/apiserver/pkg/storage/cacher/BUILD b/vendor/k8s.io/apiserver/pkg/storage/cacher/BUILD index af3a14a8fba..0f47738e315 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/cacher/BUILD +++ b/vendor/k8s.io/apiserver/pkg/storage/cacher/BUILD @@ -26,9 +26,10 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go index fb5aa229d9a..0f5c0848dae 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go +++ b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go @@ -39,10 +39,26 @@ import ( "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/storage" utilfeature "k8s.io/apiserver/pkg/util/feature" - utiltrace "k8s.io/apiserver/pkg/util/trace" "k8s.io/client-go/tools/cache" + utiltrace "k8s.io/utils/trace" + + "github.com/prometheus/client_golang/prometheus" ) +var ( + initCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "apiserver_init_events_total", + Help: "Counter of init events processed in watchcache broken by resource type", + }, + []string{"resource"}, + ) +) + +func init() { + prometheus.MustRegister(initCounter) +} + // Config contains the configuration for a given Cache. type Config struct { // Maximum size of the history cached in memory. @@ -62,8 +78,8 @@ type Config struct { // KeyFunc is used to get a key in the underlying storage for a given object. KeyFunc func(runtime.Object) (string, error) - // GetAttrsFunc is used to get object labels, fields, and the uninitialized bool - GetAttrsFunc func(runtime.Object) (label labels.Set, field fields.Set, uninitialized bool, err error) + // GetAttrsFunc is used to get object labels, fields + GetAttrsFunc func(runtime.Object) (label labels.Set, field fields.Set, err error) // TriggerPublisherFunc is used for optimizing amount of watchers that // needs to process an incoming event. @@ -82,14 +98,17 @@ func (wm watchersMap) addWatcher(w *cacheWatcher, number int) { wm[number] = w } -func (wm watchersMap) deleteWatcher(number int) { - delete(wm, number) +func (wm watchersMap) deleteWatcher(number int, done func(*cacheWatcher)) { + if watcher, ok := wm[number]; ok { + delete(wm, number) + done(watcher) + } } -func (wm watchersMap) terminateAll() { +func (wm watchersMap) terminateAll(done func(*cacheWatcher)) { for key, watcher := range wm { delete(wm, key) - watcher.stop() + done(watcher) } } @@ -109,29 +128,29 @@ func (i *indexedWatchers) addWatcher(w *cacheWatcher, number int, value string, } } -func (i *indexedWatchers) deleteWatcher(number int, value string, supported bool) { +func (i *indexedWatchers) deleteWatcher(number int, value string, supported bool, done func(*cacheWatcher)) { if supported { - i.valueWatchers[value].deleteWatcher(number) + i.valueWatchers[value].deleteWatcher(number, done) if len(i.valueWatchers[value]) == 0 { delete(i.valueWatchers, value) } } else { - i.allWatchers.deleteWatcher(number) + i.allWatchers.deleteWatcher(number, done) } } -func (i *indexedWatchers) terminateAll(objectType reflect.Type) { +func (i *indexedWatchers) terminateAll(objectType reflect.Type, done func(*cacheWatcher)) { if len(i.allWatchers) > 0 || len(i.valueWatchers) > 0 { klog.Warningf("Terminating all watchers from cacher %v", objectType) } - i.allWatchers.terminateAll() + i.allWatchers.terminateAll(done) for index, watchers := range i.valueWatchers { - watchers.terminateAll() + watchers.terminateAll(done) delete(i.valueWatchers, index) } } -type filterWithAttrsFunc func(key string, l labels.Set, f fields.Set, uninitialized bool) bool +type filterWithAttrsFunc func(key string, l labels.Set, f fields.Set) bool // Cacher is responsible for serving WATCH and LIST requests for a given // resource from its internal cache and updating its cache in the background @@ -186,6 +205,20 @@ type Cacher struct { stopped bool stopCh chan struct{} stopWg sync.WaitGroup + + // timer is used to avoid unnecessary allocations in underlying watchers. + timer *time.Timer + + // dispatching determines whether there is currently dispatching of + // any event in flight. + dispatching bool + // watchersBuffer is a list of watchers potentially interested in currently + // dispatched event. + watchersBuffer []*cacheWatcher + // watchersToStop is a list of watchers that were supposed to be stopped + // during current dispatching, but stopping was deferred to the end of + // dispatching that event to avoid race with closing channels in watchers. + watchersToStop []*cacheWatcher } // NewCacherFromConfig creates a new Cacher responsible for servicing WATCH and LIST requests from @@ -227,6 +260,7 @@ func NewCacherFromConfig(config Config) *Cacher { // and there are no guarantees on the order that they will stop. // So we will be simply closing the channel, and synchronizing on the WaitGroup. stopCh: stopCh, + timer: time.NewTimer(time.Duration(0)), } watchCache.SetOnEvent(cacher.processEvent) go cacher.dispatchEvents() @@ -242,6 +276,14 @@ func NewCacherFromConfig(config Config) *Cacher { }, time.Second, stopCh, ) }() + + // Ensure that timer is stopped. + if !cacher.timer.Stop() { + // Consume triggered (but not yet received) timer event + // so that future reuse does not get a spurious timeout. + <-cacher.timer.C + } + return cacher } @@ -465,7 +507,7 @@ func (c *Cacher) GetToList(ctx context.Context, key string, resourceVersion stri if !ok { return fmt.Errorf("non *storeElement returned from storage: %v", obj) } - if filter(elem.Key, elem.Labels, elem.Fields, elem.Uninitialized) { + if filter(elem.Key, elem.Labels, elem.Fields) { listVal.Set(reflect.Append(listVal, reflect.ValueOf(elem.Object).Elem())) } } @@ -539,7 +581,7 @@ func (c *Cacher) List(ctx context.Context, key string, resourceVersion string, p if !ok { return fmt.Errorf("non *storeElement returned from storage: %v", obj) } - if filter(elem.Key, elem.Labels, elem.Fields, elem.Uninitialized) { + if filter(elem.Key, elem.Labels, elem.Fields) { listVal.Set(reflect.Append(listVal, reflect.ValueOf(elem.Object).Elem())) } } @@ -622,19 +664,41 @@ func (c *Cacher) dispatchEvents() { } func (c *Cacher) dispatchEvent(event *watchCacheEvent) { + c.startDispatching(event) + + // Since add() can block, we explicitly add when cacher is unlocked. + for _, watcher := range c.watchersBuffer { + watcher.add(event, c.timer, c.dispatchTimeoutBudget) + } + + c.finishDispatching() +} + +// startDispatching chooses watchers potentially interested in a given event +// a marks dispatching as true. +func (c *Cacher) startDispatching(event *watchCacheEvent) { triggerValues, supported := c.triggerValues(event) c.Lock() defer c.Unlock() + + c.dispatching = true + // We are reusing the slice to avoid memory reallocations in every + // dispatchEvent() call. That may prevent Go GC from freeing items + // from previous phases that are sitting behind the current length + // of the slice, but there is only a limited number of those and the + // gain from avoiding memory allocations is much bigger. + c.watchersBuffer = c.watchersBuffer[:0] + // Iterate over "allWatchers" no matter what the trigger function is. for _, watcher := range c.watchers.allWatchers { - watcher.add(event, c.dispatchTimeoutBudget) + c.watchersBuffer = append(c.watchersBuffer, watcher) } if supported { // Iterate over watchers interested in the given values of the trigger. for _, triggerValue := range triggerValues { for _, watcher := range c.watchers.valueWatchers[triggerValue] { - watcher.add(event, c.dispatchTimeoutBudget) + c.watchersBuffer = append(c.watchersBuffer, watcher) } } } else { @@ -647,16 +711,38 @@ func (c *Cacher) dispatchEvent(event *watchCacheEvent) { // Iterate over watchers interested in exact values for all values. for _, watchers := range c.watchers.valueWatchers { for _, watcher := range watchers { - watcher.add(event, c.dispatchTimeoutBudget) + c.watchersBuffer = append(c.watchersBuffer, watcher) } } } } +// finishDispatching stops all the watchers that were supposed to be +// stopped in the meantime, but it was deferred to avoid closing input +// channels of watchers, as add() may still have writing to it. +// It also marks dispatching as false. +func (c *Cacher) finishDispatching() { + c.Lock() + defer c.Unlock() + c.dispatching = false + for _, watcher := range c.watchersToStop { + watcher.stop() + } + c.watchersToStop = c.watchersToStop[:0] +} + func (c *Cacher) terminateAllWatchers() { c.Lock() defer c.Unlock() - c.watchers.terminateAll(c.objectType) + c.watchers.terminateAll(c.objectType, c.stopWatcherThreadUnsafe) +} + +func (c *Cacher) stopWatcherThreadUnsafe(watcher *cacheWatcher) { + if c.dispatching { + c.watchersToStop = append(c.watchersToStop, watcher) + } else { + watcher.stop() + } } func (c *Cacher) isStopped() bool { @@ -682,29 +768,24 @@ func (c *Cacher) Stop() { c.stopWg.Wait() } -func forgetWatcher(c *Cacher, index int, triggerValue string, triggerSupported bool) func(bool) { - return func(lock bool) { - if lock { - c.Lock() - defer c.Unlock() - } else { - // false is currently passed only if we are forcing watcher to close due - // to its unresponsiveness and blocking other watchers. - // TODO: Get this information in cleaner way. - klog.V(1).Infof("Forcing watcher close due to unresponsiveness: %v", c.objectType.String()) - } +func forgetWatcher(c *Cacher, index int, triggerValue string, triggerSupported bool) func() { + return func() { + c.Lock() + defer c.Unlock() + // It's possible that the watcher is already not in the structure (e.g. in case of - // simultaneous Stop() and terminateAllWatchers(), but it doesn't break anything. - c.watchers.deleteWatcher(index, triggerValue, triggerSupported) + // simultaneous Stop() and terminateAllWatchers(), but it is safe to call stop() + // on a watcher multiple times. + c.watchers.deleteWatcher(index, triggerValue, triggerSupported, c.stopWatcherThreadUnsafe) } } func filterWithAttrsFunction(key string, p storage.SelectionPredicate) filterWithAttrsFunc { - filterFunc := func(objKey string, label labels.Set, field fields.Set, uninitialized bool) bool { + filterFunc := func(objKey string, label labels.Set, field fields.Set) bool { if !hasPathPrefix(objKey, key) { return false } - return p.MatchesObjectAttributes(label, field, uninitialized) + return p.MatchesObjectAttributes(label, field) } return filterFunc } @@ -794,11 +875,11 @@ type cacheWatcher struct { done chan struct{} filter filterWithAttrsFunc stopped bool - forget func(bool) + forget func() versioner storage.Versioner } -func newCacheWatcher(resourceVersion uint64, chanSize int, initEvents []*watchCacheEvent, filter filterWithAttrsFunc, forget func(bool), versioner storage.Versioner) *cacheWatcher { +func newCacheWatcher(resourceVersion uint64, chanSize int, initEvents []*watchCacheEvent, filter filterWithAttrsFunc, forget func(), versioner storage.Versioner) *cacheWatcher { watcher := &cacheWatcher{ input: make(chan *watchCacheEvent, chanSize), result: make(chan watch.Event, chanSize), @@ -819,8 +900,7 @@ func (c *cacheWatcher) ResultChan() <-chan watch.Event { // Implements watch.Interface. func (c *cacheWatcher) Stop() { - c.forget(true) - c.stop() + c.forget() } func (c *cacheWatcher) stop() { @@ -833,9 +913,7 @@ func (c *cacheWatcher) stop() { } } -var timerPool sync.Pool - -func (c *cacheWatcher) add(event *watchCacheEvent, budget *timeBudget) { +func (c *cacheWatcher) add(event *watchCacheEvent, timer *time.Timer, budget *timeBudget) { // Try to send the event immediately, without blocking. select { case c.input <- event: @@ -849,28 +927,21 @@ func (c *cacheWatcher) add(event *watchCacheEvent, budget *timeBudget) { startTime := time.Now() timeout := budget.takeAvailable() - t, ok := timerPool.Get().(*time.Timer) - if ok { - t.Reset(timeout) - } else { - t = time.NewTimer(timeout) - } - defer timerPool.Put(t) + timer.Reset(timeout) select { case c.input <- event: - stopped := t.Stop() - if !stopped { + if !timer.Stop() { // Consume triggered (but not yet received) timer event // so that future reuse does not get a spurious timeout. - <-t.C + <-timer.C } - case <-t.C: + case <-timer.C: // This means that we couldn't send event to that watcher. // Since we don't want to block on it infinitely, // we simply terminate it. - c.forget(false) - c.stop() + klog.V(1).Infof("Forcing watcher close due to unresponsiveness: %v", reflect.TypeOf(event.Object).String()) + c.forget() } budget.returnUnused(timeout - time.Since(startTime)) @@ -878,10 +949,10 @@ func (c *cacheWatcher) add(event *watchCacheEvent, budget *timeBudget) { // NOTE: sendWatchCacheEvent is assumed to not modify !!! func (c *cacheWatcher) sendWatchCacheEvent(event *watchCacheEvent) { - curObjPasses := event.Type != watch.Deleted && c.filter(event.Key, event.ObjLabels, event.ObjFields, event.ObjUninitialized) + curObjPasses := event.Type != watch.Deleted && c.filter(event.Key, event.ObjLabels, event.ObjFields) oldObjPasses := false if event.PrevObject != nil { - oldObjPasses = c.filter(event.Key, event.PrevObjLabels, event.PrevObjFields, event.PrevObjUninitialized) + oldObjPasses = c.filter(event.Key, event.PrevObjLabels, event.PrevObjFields) } if !curObjPasses && !oldObjPasses { // Watcher is not interested in that object. @@ -948,6 +1019,10 @@ func (c *cacheWatcher) process(initEvents []*watchCacheEvent, resourceVersion ui for _, event := range initEvents { c.sendWatchCacheEvent(event) } + if len(initEvents) > 0 { + objType := reflect.TypeOf(initEvents[0].Object).String() + initCounter.WithLabelValues(objType).Add(float64(len(initEvents))) + } processingTime := time.Since(startTime) if processingTime > initProcessThreshold { objType := "" @@ -959,11 +1034,7 @@ func (c *cacheWatcher) process(initEvents []*watchCacheEvent, resourceVersion ui defer close(c.result) defer c.Stop() - for { - event, ok := <-c.input - if !ok { - return - } + for event := range c.input { // only send events newer than resourceVersion if event.ResourceVersion > resourceVersion { c.sendWatchCacheEvent(event) diff --git a/vendor/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go b/vendor/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go index 527b81dda2b..f9729aa44f5 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go +++ b/vendor/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go @@ -29,8 +29,8 @@ import ( "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/watch" "k8s.io/apiserver/pkg/storage" - utiltrace "k8s.io/apiserver/pkg/util/trace" "k8s.io/client-go/tools/cache" + utiltrace "k8s.io/utils/trace" ) const ( @@ -46,30 +46,27 @@ const ( // the previous value of the object to enable proper filtering in the // upper layers. type watchCacheEvent struct { - Type watch.EventType - Object runtime.Object - ObjLabels labels.Set - ObjFields fields.Set - ObjUninitialized bool - PrevObject runtime.Object - PrevObjLabels labels.Set - PrevObjFields fields.Set - PrevObjUninitialized bool - Key string - ResourceVersion uint64 + Type watch.EventType + Object runtime.Object + ObjLabels labels.Set + ObjFields fields.Set + PrevObject runtime.Object + PrevObjLabels labels.Set + PrevObjFields fields.Set + Key string + ResourceVersion uint64 } // Computing a key of an object is generally non-trivial (it performs // e.g. validation underneath). Similarly computing object fields and // labels. To avoid computing them multiple times (to serve the event // in different List/Watch requests), in the underlying store we are -// keeping structs (key, object, labels, fields, uninitialized). +// keeping structs (key, object, labels, fields). type storeElement struct { - Key string - Object runtime.Object - Labels labels.Set - Fields fields.Set - Uninitialized bool + Key string + Object runtime.Object + Labels labels.Set + Fields fields.Set } func storeElementKey(obj interface{}) (string, error) { @@ -107,7 +104,7 @@ type watchCache struct { keyFunc func(runtime.Object) (string, error) // getAttrsFunc is used to get labels and fields of an object. - getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, bool, error) + getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, error) // cache is used a cyclic buffer - its first element (with the smallest // resourceVersion) is defined by startIndex, its last element is defined @@ -147,7 +144,7 @@ type watchCache struct { func newWatchCache( capacity int, keyFunc func(runtime.Object) (string, error), - getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, bool, error), + getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, error), versioner storage.Versioner) *watchCache { wc := &watchCache{ capacity: capacity, @@ -220,19 +217,18 @@ func (w *watchCache) processEvent(event watch.Event, resourceVersion uint64, upd return fmt.Errorf("couldn't compute key: %v", err) } elem := &storeElement{Key: key, Object: event.Object} - elem.Labels, elem.Fields, elem.Uninitialized, err = w.getAttrsFunc(event.Object) + elem.Labels, elem.Fields, err = w.getAttrsFunc(event.Object) if err != nil { return err } watchCacheEvent := &watchCacheEvent{ - Type: event.Type, - Object: elem.Object, - ObjLabels: elem.Labels, - ObjFields: elem.Fields, - ObjUninitialized: elem.Uninitialized, - Key: key, - ResourceVersion: resourceVersion, + Type: event.Type, + Object: elem.Object, + ObjLabels: elem.Labels, + ObjFields: elem.Fields, + Key: key, + ResourceVersion: resourceVersion, } // TODO: We should consider moving this lock below after the watchCacheEvent @@ -250,7 +246,6 @@ func (w *watchCache) processEvent(event watch.Event, resourceVersion uint64, upd watchCacheEvent.PrevObject = previousElem.Object watchCacheEvent.PrevObjLabels = previousElem.Labels watchCacheEvent.PrevObjFields = previousElem.Fields - watchCacheEvent.PrevObjUninitialized = previousElem.Uninitialized } if w.onEvent != nil { @@ -373,16 +368,15 @@ func (w *watchCache) Replace(objs []interface{}, resourceVersion string) error { if err != nil { return fmt.Errorf("couldn't compute key: %v", err) } - objLabels, objFields, objUninitialized, err := w.getAttrsFunc(object) + objLabels, objFields, err := w.getAttrsFunc(object) if err != nil { return err } toReplace = append(toReplace, &storeElement{ - Key: key, - Object: object, - Labels: objLabels, - Fields: objFields, - Uninitialized: objUninitialized, + Key: key, + Object: object, + Labels: objLabels, + Fields: objFields, }) } @@ -451,18 +445,17 @@ func (w *watchCache) GetAllEventsSinceThreadUnsafe(resourceVersion uint64) ([]*w if !ok { return nil, fmt.Errorf("not a storeElement: %v", elem) } - objLabels, objFields, objUninitialized, err := w.getAttrsFunc(elem.Object) + objLabels, objFields, err := w.getAttrsFunc(elem.Object) if err != nil { return nil, err } result[i] = &watchCacheEvent{ - Type: watch.Added, - Object: elem.Object, - ObjLabels: objLabels, - ObjFields: objFields, - ObjUninitialized: objUninitialized, - Key: elem.Key, - ResourceVersion: w.resourceVersion, + Type: watch.Added, + Object: elem.Object, + ObjLabels: objLabels, + ObjFields: objFields, + Key: elem.Key, + ResourceVersion: w.resourceVersion, } } return result, nil diff --git a/vendor/k8s.io/apiserver/pkg/storage/errors/doc.go b/vendor/k8s.io/apiserver/pkg/storage/errors/doc.go index 3d3150c5690..e251b61680e 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/errors/doc.go +++ b/vendor/k8s.io/apiserver/pkg/storage/errors/doc.go @@ -14,5 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package etcd provides conversion of etcd errors to API errors. +// Package storage provides conversion of storage errors to API errors. package storage // import "k8s.io/apiserver/pkg/storage/errors" diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd/api_object_versioner.go b/vendor/k8s.io/apiserver/pkg/storage/etcd/api_object_versioner.go index 471a3313dff..2fed9f486fe 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd/api_object_versioner.go +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd/api_object_versioner.go @@ -101,7 +101,7 @@ func (a APIObjectVersioner) ParseResourceVersion(resourceVersion string) (uint64 return version, nil } -// APIObjectVersioner implements Versioner +// Versioner implements Versioner var Versioner storage.Versioner = APIObjectVersioner{} // CompareResourceVersion compares etcd resource versions. Outside this API they are all strings, diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd/metrics/metrics.go b/vendor/k8s.io/apiserver/pkg/storage/etcd/metrics/metrics.go index 96385f6e601..911a343138b 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd/metrics/metrics.go +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd/metrics/metrics.go @@ -25,37 +25,37 @@ import ( var ( cacheHitCounterOpts = prometheus.CounterOpts{ - Name: "etcd_helper_cache_hit_count", + Name: "etcd_helper_cache_hit_total", Help: "Counter of etcd helper cache hits.", } cacheHitCounter = prometheus.NewCounter(cacheHitCounterOpts) cacheMissCounterOpts = prometheus.CounterOpts{ - Name: "etcd_helper_cache_miss_count", + Name: "etcd_helper_cache_miss_total", Help: "Counter of etcd helper cache miss.", } cacheMissCounter = prometheus.NewCounter(cacheMissCounterOpts) cacheEntryCounterOpts = prometheus.CounterOpts{ - Name: "etcd_helper_cache_entry_count", + Name: "etcd_helper_cache_entry_total", Help: "Counter of etcd helper cache entries. This can be different from etcd_helper_cache_miss_count " + "because two concurrent threads can miss the cache and generate the same entry twice.", } cacheEntryCounter = prometheus.NewCounter(cacheEntryCounterOpts) - cacheGetLatency = prometheus.NewSummary( - prometheus.SummaryOpts{ - Name: "etcd_request_cache_get_latencies_summary", - Help: "Latency in microseconds of getting an object from etcd cache", + cacheGetLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Name: "etcd_request_cache_get_duration_seconds", + Help: "Latency in seconds of getting an object from etcd cache", }, ) - cacheAddLatency = prometheus.NewSummary( - prometheus.SummaryOpts{ - Name: "etcd_request_cache_add_latencies_summary", - Help: "Latency in microseconds of adding an object to etcd cache", + cacheAddLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Name: "etcd_request_cache_add_duration_seconds", + Help: "Latency in seconds of adding an object to etcd cache", }, ) - etcdRequestLatenciesSummary = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ - Name: "etcd_request_latencies_summary", - Help: "Etcd request latency summary in microseconds for each operation and object type.", + etcdRequestLatency = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "etcd_request_duration_seconds", + Help: "Etcd request latency in seconds for each operation and object type.", }, []string{"operation", "type"}, ) @@ -66,6 +66,42 @@ var ( }, []string{"resource"}, ) + + deprecatedCacheHitCounterOpts = prometheus.CounterOpts{ + Name: "etcd_helper_cache_hit_count", + Help: "(Deprecated) Counter of etcd helper cache hits.", + } + deprecatedCacheHitCounter = prometheus.NewCounter(deprecatedCacheHitCounterOpts) + deprecatedCacheMissCounterOpts = prometheus.CounterOpts{ + Name: "etcd_helper_cache_miss_count", + Help: "(Deprecated) Counter of etcd helper cache miss.", + } + deprecatedCacheMissCounter = prometheus.NewCounter(deprecatedCacheMissCounterOpts) + deprecatedCacheEntryCounterOpts = prometheus.CounterOpts{ + Name: "etcd_helper_cache_entry_count", + Help: "(Deprecated) Counter of etcd helper cache entries. This can be different from etcd_helper_cache_miss_count " + + "because two concurrent threads can miss the cache and generate the same entry twice.", + } + deprecatedCacheEntryCounter = prometheus.NewCounter(deprecatedCacheEntryCounterOpts) + deprecatedCacheGetLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Name: "etcd_request_cache_get_latencies_summary", + Help: "(Deprecated) Latency in microseconds of getting an object from etcd cache", + }, + ) + deprecatedCacheAddLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Name: "etcd_request_cache_add_latencies_summary", + Help: "(Deprecated) Latency in microseconds of adding an object to etcd cache", + }, + ) + deprecatedEtcdRequestLatenciesSummary = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Name: "etcd_request_latencies_summary", + Help: "(Deprecated) Etcd request latency summary in microseconds for each operation and object type.", + }, + []string{"operation", "type"}, + ) ) var registerMetrics sync.Once @@ -79,8 +115,16 @@ func Register() { prometheus.MustRegister(cacheEntryCounter) prometheus.MustRegister(cacheAddLatency) prometheus.MustRegister(cacheGetLatency) - prometheus.MustRegister(etcdRequestLatenciesSummary) + prometheus.MustRegister(etcdRequestLatency) prometheus.MustRegister(objectCounts) + + // TODO(danielqsj): Remove the following metrics, they are deprecated + prometheus.MustRegister(deprecatedCacheHitCounter) + prometheus.MustRegister(deprecatedCacheMissCounter) + prometheus.MustRegister(deprecatedCacheEntryCounter) + prometheus.MustRegister(deprecatedCacheAddLatency) + prometheus.MustRegister(deprecatedCacheGetLatency) + prometheus.MustRegister(deprecatedEtcdRequestLatenciesSummary) }) } @@ -89,27 +133,33 @@ func UpdateObjectCount(resourcePrefix string, count int64) { } func RecordEtcdRequestLatency(verb, resource string, startTime time.Time) { - etcdRequestLatenciesSummary.WithLabelValues(verb, resource).Observe(float64(time.Since(startTime) / time.Microsecond)) + etcdRequestLatency.WithLabelValues(verb, resource).Observe(sinceInSeconds(startTime)) + deprecatedEtcdRequestLatenciesSummary.WithLabelValues(verb, resource).Observe(sinceInMicroseconds(startTime)) } func ObserveGetCache(startTime time.Time) { - cacheGetLatency.Observe(float64(time.Since(startTime) / time.Microsecond)) + cacheGetLatency.Observe(sinceInSeconds(startTime)) + deprecatedCacheGetLatency.Observe(sinceInMicroseconds(startTime)) } func ObserveAddCache(startTime time.Time) { - cacheAddLatency.Observe(float64(time.Since(startTime) / time.Microsecond)) + cacheAddLatency.Observe(sinceInSeconds(startTime)) + deprecatedCacheAddLatency.Observe(sinceInMicroseconds(startTime)) } func ObserveCacheHit() { cacheHitCounter.Inc() + deprecatedCacheHitCounter.Inc() } func ObserveCacheMiss() { cacheMissCounter.Inc() + deprecatedCacheMissCounter.Inc() } func ObserveNewEntry() { cacheEntryCounter.Inc() + deprecatedCacheEntryCounter.Inc() } func Reset() { @@ -118,5 +168,20 @@ func Reset() { cacheEntryCounter = prometheus.NewCounter(cacheEntryCounterOpts) // TODO: Reset cacheAddLatency. // TODO: Reset cacheGetLatency. - etcdRequestLatenciesSummary.Reset() + etcdRequestLatency.Reset() + + deprecatedCacheHitCounter = prometheus.NewCounter(deprecatedCacheHitCounterOpts) + deprecatedCacheMissCounter = prometheus.NewCounter(deprecatedCacheMissCounterOpts) + deprecatedCacheEntryCounter = prometheus.NewCounter(deprecatedCacheEntryCounterOpts) + deprecatedEtcdRequestLatenciesSummary.Reset() +} + +// sinceInMicroseconds gets the time since the specified start in microseconds. +func sinceInMicroseconds(start time.Time) float64 { + return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) +} + +// sinceInSeconds gets the time since the specified start in seconds. +func sinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() } diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd3/BUILD b/vendor/k8s.io/apiserver/pkg/storage/etcd3/BUILD index 1b177714b27..2d064bac409 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd3/BUILD +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd3/BUILD @@ -47,6 +47,7 @@ go_library( "errors.go", "event.go", "lease_manager.go", + "logger.go", "store.go", "watcher.go", ], @@ -62,11 +63,11 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//vendor/github.com/coreos/etcd/clientv3:go_default_library", "//vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", "//vendor/github.com/coreos/etcd/mvcc/mvccpb:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd3/OWNERS b/vendor/k8s.io/apiserver/pkg/storage/etcd3/OWNERS old mode 100755 new mode 100644 index 84c24e70c42..84666835da6 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd3/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd3/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - timothysc diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd3/logger.go b/vendor/k8s.io/apiserver/pkg/storage/etcd3/logger.go new file mode 100644 index 00000000000..a117db6fe26 --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd3/logger.go @@ -0,0 +1,84 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd3 + +import ( + "fmt" + + "github.com/coreos/etcd/clientv3" + "k8s.io/klog" +) + +func init() { + clientv3.SetLogger(klogWrapper{}) +} + +type klogWrapper struct{} + +const klogWrapperDepth = 4 + +func (klogWrapper) Info(args ...interface{}) { + klog.InfoDepth(klogWrapperDepth, args...) +} + +func (klogWrapper) Infoln(args ...interface{}) { + klog.InfoDepth(klogWrapperDepth, fmt.Sprintln(args...)) +} + +func (klogWrapper) Infof(format string, args ...interface{}) { + klog.InfoDepth(klogWrapperDepth, fmt.Sprintf(format, args...)) +} + +func (klogWrapper) Warning(args ...interface{}) { + klog.WarningDepth(klogWrapperDepth, args...) +} + +func (klogWrapper) Warningln(args ...interface{}) { + klog.WarningDepth(klogWrapperDepth, fmt.Sprintln(args...)) +} + +func (klogWrapper) Warningf(format string, args ...interface{}) { + klog.WarningDepth(klogWrapperDepth, fmt.Sprintf(format, args...)) +} + +func (klogWrapper) Error(args ...interface{}) { + klog.ErrorDepth(klogWrapperDepth, args...) +} + +func (klogWrapper) Errorln(args ...interface{}) { + klog.ErrorDepth(klogWrapperDepth, fmt.Sprintln(args...)) +} + +func (klogWrapper) Errorf(format string, args ...interface{}) { + klog.ErrorDepth(klogWrapperDepth, fmt.Sprintf(format, args...)) +} + +func (klogWrapper) Fatal(args ...interface{}) { + klog.FatalDepth(klogWrapperDepth, args...) +} + +func (klogWrapper) Fatalln(args ...interface{}) { + klog.FatalDepth(klogWrapperDepth, fmt.Sprintln(args...)) +} + +func (klogWrapper) Fatalf(format string, args ...interface{}) { + klog.FatalDepth(klogWrapperDepth, fmt.Sprintf(format, args...)) +} + +func (klogWrapper) V(l int) bool { + return bool(klog.V(klog.Level(l))) +} diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go b/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go index 129b593f53b..2413a6674a2 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -39,7 +39,7 @@ import ( "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd" "k8s.io/apiserver/pkg/storage/value" - utiltrace "k8s.io/apiserver/pkg/util/trace" + utiltrace "k8s.io/utils/trace" ) // authenticatedDataString satisfies the value.Context interface. It uses the key to diff --git a/vendor/k8s.io/apiserver/pkg/storage/interfaces.go b/vendor/k8s.io/apiserver/pkg/storage/interfaces.go index 2b5da24ff86..cff425f3abf 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/interfaces.go +++ b/vendor/k8s.io/apiserver/pkg/storage/interfaces.go @@ -86,8 +86,6 @@ type TriggerPublisherFunc func(obj runtime.Object) []MatchValue var Everything = SelectionPredicate{ Label: labels.Everything(), Field: fields.Everything(), - // TODO: split this into a new top level constant? - IncludeUninitialized: true, } // Pass an UpdateFunc to Interface.GuaranteedUpdate to make an update @@ -100,6 +98,9 @@ type Preconditions struct { // Specifies the target UID. // +optional UID *types.UID `json:"uid,omitempty"` + // Specifies the target ResourceVersion + // +optional + ResourceVersion *string `json:"resourceVersion,omitempty"` } // NewUIDPreconditions returns a Preconditions with UID set. @@ -127,8 +128,14 @@ func (p *Preconditions) Check(key string, obj runtime.Object) error { objMeta.GetUID()) return NewInvalidObjError(key, err) } + if p.ResourceVersion != nil && *p.ResourceVersion != objMeta.GetResourceVersion() { + err := fmt.Sprintf( + "Precondition failed: ResourceVersion in precondition: %v, ResourceVersion in object meta: %v", + *p.ResourceVersion, + objMeta.GetResourceVersion()) + return NewInvalidObjError(key, err) + } return nil - } // Interface offers a common interface for object marshaling/unmarshaling operations and diff --git a/vendor/k8s.io/apiserver/pkg/storage/selection_predicate.go b/vendor/k8s.io/apiserver/pkg/storage/selection_predicate.go index 9c8c3d5994c..bed741dfa7b 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/selection_predicate.go +++ b/vendor/k8s.io/apiserver/pkg/storage/selection_predicate.go @@ -25,59 +25,58 @@ import ( // AttrFunc returns label and field sets and the uninitialized flag for List or Watch to match. // In any failure to parse given object, it returns error. -type AttrFunc func(obj runtime.Object) (labels.Set, fields.Set, bool, error) +type AttrFunc func(obj runtime.Object) (labels.Set, fields.Set, error) // FieldMutationFunc allows the mutation of the field selection fields. It is mutating to // avoid the extra allocation on this common path type FieldMutationFunc func(obj runtime.Object, fieldSet fields.Set) error -func DefaultClusterScopedAttr(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func DefaultClusterScopedAttr(obj runtime.Object) (labels.Set, fields.Set, error) { metadata, err := meta.Accessor(obj) if err != nil { - return nil, nil, false, err + return nil, nil, err } fieldSet := fields.Set{ "metadata.name": metadata.GetName(), } - return labels.Set(metadata.GetLabels()), fieldSet, metadata.GetInitializers() != nil, nil + return labels.Set(metadata.GetLabels()), fieldSet, nil } -func DefaultNamespaceScopedAttr(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func DefaultNamespaceScopedAttr(obj runtime.Object) (labels.Set, fields.Set, error) { metadata, err := meta.Accessor(obj) if err != nil { - return nil, nil, false, err + return nil, nil, err } fieldSet := fields.Set{ "metadata.name": metadata.GetName(), "metadata.namespace": metadata.GetNamespace(), } - return labels.Set(metadata.GetLabels()), fieldSet, metadata.GetInitializers() != nil, nil + return labels.Set(metadata.GetLabels()), fieldSet, nil } func (f AttrFunc) WithFieldMutation(fieldMutator FieldMutationFunc) AttrFunc { - return func(obj runtime.Object) (labels.Set, fields.Set, bool, error) { - labelSet, fieldSet, initialized, err := f(obj) + return func(obj runtime.Object) (labels.Set, fields.Set, error) { + labelSet, fieldSet, err := f(obj) if err != nil { - return nil, nil, false, err + return nil, nil, err } if err := fieldMutator(obj, fieldSet); err != nil { - return nil, nil, false, err + return nil, nil, err } - return labelSet, fieldSet, initialized, nil + return labelSet, fieldSet, nil } } // SelectionPredicate is used to represent the way to select objects from api storage. type SelectionPredicate struct { - Label labels.Selector - Field fields.Selector - IncludeUninitialized bool - GetAttrs AttrFunc - IndexFields []string - Limit int64 - Continue string + Label labels.Selector + Field fields.Selector + GetAttrs AttrFunc + IndexFields []string + Limit int64 + Continue string } // Matches returns true if the given object's labels and fields (as @@ -87,13 +86,10 @@ func (s *SelectionPredicate) Matches(obj runtime.Object) (bool, error) { if s.Empty() { return true, nil } - labels, fields, uninitialized, err := s.GetAttrs(obj) + labels, fields, err := s.GetAttrs(obj) if err != nil { return false, err } - if !s.IncludeUninitialized && uninitialized { - return false, nil - } matched := s.Label.Matches(labels) if matched && s.Field != nil { matched = matched && s.Field.Matches(fields) @@ -103,10 +99,7 @@ func (s *SelectionPredicate) Matches(obj runtime.Object) (bool, error) { // MatchesObjectAttributes returns true if the given labels and fields // match s.Label and s.Field. -func (s *SelectionPredicate) MatchesObjectAttributes(l labels.Set, f fields.Set, uninitialized bool) bool { - if !s.IncludeUninitialized && uninitialized { - return false - } +func (s *SelectionPredicate) MatchesObjectAttributes(l labels.Set, f fields.Set) bool { if s.Label.Empty() && s.Field.Empty() { return true } @@ -146,5 +139,5 @@ func (s *SelectionPredicate) MatcherIndex() []MatchValue { // Empty returns true if the predicate performs no filtering. func (s *SelectionPredicate) Empty() bool { - return s.Label.Empty() && s.Field.Empty() && s.IncludeUninitialized + return s.Label.Empty() && s.Field.Empty() } diff --git a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/OWNERS b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/OWNERS old mode 100755 new mode 100644 index d14ed51815d..dbef228c1a7 --- a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - lavalamp - smarterclayton diff --git a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/config.go b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/config.go index 68c707f471b..b5b2ee41043 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/config.go +++ b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/config.go @@ -31,18 +31,26 @@ const ( DefaultCompactInterval = 5 * time.Minute ) -// Config is configuration for creating a storage backend. -type Config struct { - // Type defines the type of storage backend. Default ("") is "etcd3". - Type string - // Prefix is the prefix to all keys passed to storage.Interface methods. - Prefix string +// TransportConfig holds all connection related info, i.e. equal TransportConfig means equal servers we talk to. +type TransportConfig struct { // ServerList is the list of storage servers to connect with. ServerList []string // TLS credentials KeyFile string CertFile string CAFile string +} + +// Config is configuration for creating a storage backend. +type Config struct { + // Type defines the type of storage backend. Default ("") is "etcd3". + Type string + // Prefix is the prefix to all keys passed to storage.Interface methods. + Prefix string + // Transport holds all connection related info, i.e. equal TransportConfig means equal servers we talk to. + Transport TransportConfig + // Quorum indicates that whether read operations should be quorum-level consistent. + Quorum bool // Paging indicates whether the server implementation should allow paging (if it is // supported). This is generally configured by feature gating, or by a specific // resource type not wishing to allow paging, and is not intended for end users to @@ -50,13 +58,17 @@ type Config struct { Paging bool Codec runtime.Codec + // EncodeVersioner is the same groupVersioner used to build the + // storage encoder. Given a list of kinds the input object might belong + // to, the EncodeVersioner outputs the gvk the object will be + // converted to before persisted in etcd. + EncodeVersioner runtime.GroupVersioner // Transformer allows the value to be transformed prior to persisting into etcd. Transformer value.Transformer // CompactionInterval is an interval of requesting compaction from apiserver. // If the value is 0, no compaction will be issued. CompactionInterval time.Duration - // CountMetricPollPeriod specifies how often should count metric be updated CountMetricPollPeriod time.Duration } diff --git a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index e18fe9acde7..801f8d6c920 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -19,6 +19,8 @@ package factory import ( "context" "fmt" + "path" + "sync" "sync/atomic" "time" @@ -54,7 +56,7 @@ func newETCD3HealthCheck(c storagebackend.Config) (func() error, error) { clientErrMsg.Store("etcd client connection not yet established") go wait.PollUntil(time.Second, func() (bool, error) { - client, err := newETCD3Client(c) + client, err := newETCD3Client(c.Transport) if err != nil { clientErrMsg.Store(err.Error()) return false, nil @@ -71,14 +73,16 @@ func newETCD3HealthCheck(c storagebackend.Config) (func() error, error) { client := clientValue.Load().(*clientv3.Client) ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() - if _, err := client.Cluster.MemberList(ctx); err != nil { - return fmt.Errorf("error listing etcd members: %v", err) + // See https://github.com/etcd-io/etcd/blob/master/etcdctl/ctlv3/command/ep_command.go#L118 + _, err := client.Get(ctx, path.Join(c.Prefix, "health")) + if err == nil { + return nil } - return nil + return fmt.Errorf("error getting data from etcd: %v", err) }, nil } -func newETCD3Client(c storagebackend.Config) (*clientv3.Client, error) { +func newETCD3Client(c storagebackend.TransportConfig) (*clientv3.Client, error) { tlsInfo := transport.TLSInfo{ CertFile: c.CertFile, KeyFile: c.KeyFile, @@ -108,16 +112,88 @@ func newETCD3Client(c storagebackend.Config) (*clientv3.Client, error) { return clientv3.New(cfg) } +type runningCompactor struct { + interval time.Duration + cancel context.CancelFunc + client *clientv3.Client + refs int +} + +var ( + lock sync.Mutex + compactors = map[string]*runningCompactor{} +) + +// startCompactorOnce start one compactor per transport. If the interval get smaller on repeated calls, the +// compactor is replaced. A destroy func is returned. If all destroy funcs with the same transport are called, +// the compactor is stopped. +func startCompactorOnce(c storagebackend.TransportConfig, interval time.Duration) (func(), error) { + lock.Lock() + defer lock.Unlock() + + key := fmt.Sprintf("%v", c) // gives: {[server1 server2] keyFile certFile caFile} + if compactor, foundBefore := compactors[key]; !foundBefore || compactor.interval > interval { + compactorClient, err := newETCD3Client(c) + if err != nil { + return nil, err + } + + if foundBefore { + // replace compactor + compactor.cancel() + compactor.client.Close() + } else { + // start new compactor + compactor = &runningCompactor{} + compactors[key] = compactor + } + + ctx, cancel := context.WithCancel(context.Background()) + + compactor.interval = interval + compactor.cancel = cancel + compactor.client = compactorClient + + etcd3.StartCompactor(ctx, compactorClient, interval) + } + + compactors[key].refs++ + + return func() { + lock.Lock() + defer lock.Unlock() + + compactor := compactors[key] + compactor.refs-- + if compactor.refs == 0 { + compactor.cancel() + compactor.client.Close() + delete(compactors, key) + } + }, nil +} + func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { - client, err := newETCD3Client(c) + stopCompactor, err := startCompactorOnce(c.Transport, c.CompactionInterval) if err != nil { return nil, nil, err } - ctx, cancel := context.WithCancel(context.Background()) - etcd3.StartCompactor(ctx, client, c.CompactionInterval) + + client, err := newETCD3Client(c.Transport) + if err != nil { + stopCompactor() + return nil, nil, err + } + + var once sync.Once destroyFunc := func() { - cancel() - client.Close() + // we know that storage destroy funcs are called multiple times (due to reuse in subresources). + // Hence, we only destroy once. + // TODO: fix duplicated storage destroy calls higher level + once.Do(func() { + stopCompactor() + client.Close() + }) } transformer := c.Transformer if transformer == nil { diff --git a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS index 498b470c9bf..71edc3ecdcc 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS +++ b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-encryption-at-rest-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/BUILD b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/BUILD index bd42719d88d..68a3cdceda9 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/BUILD +++ b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/BUILD @@ -36,42 +36,52 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/aes:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:android": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:darwin": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:dragonfly": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:freebsd": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:linux": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:netbsd": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:openbsd": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:plan9": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], "@io_bazel_rules_go//go/platform:solaris": [ + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", ], diff --git a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1/service.proto b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1/service.proto index dbde9080e70..b6c2f31c7ea 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1/service.proto +++ b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1/service.proto @@ -1,3 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + // To regenerate service.pb.go run hack/update-generated-kms.sh syntax = "proto3"; diff --git a/vendor/k8s.io/apiserver/pkg/storage/value/metrics.go b/vendor/k8s.io/apiserver/pkg/storage/value/metrics.go index 1fe31678214..c9dc66a8f35 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/value/metrics.go +++ b/vendor/k8s.io/apiserver/pkg/storage/value/metrics.go @@ -30,11 +30,23 @@ const ( var ( transformerLatencies = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "transformation_duration_seconds", + Help: "Latencies in seconds of value transformation operations.", + // In-process transformations (ex. AES CBC) complete on the order of 20 microseconds. However, when + // external KMS is involved latencies may climb into milliseconds. + Buckets: prometheus.ExponentialBuckets(5e-6, 2, 14), + }, + []string{"transformation_type"}, + ) + deprecatedTransformerLatencies = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: namespace, Subsystem: subsystem, Name: "transformation_latencies_microseconds", - Help: "Latencies in microseconds of value transformation operations.", + Help: "(Deprecated) Latencies in microseconds of value transformation operations.", // In-process transformations (ex. AES CBC) complete on the order of 20 microseconds. However, when // external KMS is involved latencies may climb into milliseconds. Buckets: prometheus.ExponentialBuckets(5, 2, 14), @@ -61,11 +73,20 @@ var ( ) dataKeyGenerationLatencies = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "data_key_generation_duration_seconds", + Help: "Latencies in seconds of data encryption key(DEK) generation operations.", + Buckets: prometheus.ExponentialBuckets(5e-6, 2, 14), + }, + ) + deprecatedDataKeyGenerationLatencies = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: namespace, Subsystem: subsystem, Name: "data_key_generation_latencies_microseconds", - Help: "Latencies in microseconds of data encryption key(DEK) generation operations.", + Help: "(Deprecated) Latencies in microseconds of data encryption key(DEK) generation operations.", Buckets: prometheus.ExponentialBuckets(5, 2, 14), }, ) @@ -84,9 +105,11 @@ var registerMetrics sync.Once func RegisterMetrics() { registerMetrics.Do(func() { prometheus.MustRegister(transformerLatencies) + prometheus.MustRegister(deprecatedTransformerLatencies) prometheus.MustRegister(transformerFailuresTotal) prometheus.MustRegister(envelopeTransformationCacheMissTotal) prometheus.MustRegister(dataKeyGenerationLatencies) + prometheus.MustRegister(deprecatedDataKeyGenerationLatencies) prometheus.MustRegister(dataKeyGenerationFailuresTotal) }) } @@ -98,8 +121,8 @@ func RecordTransformation(transformationType string, start time.Time, err error) return } - since := sinceInMicroseconds(start) - transformerLatencies.WithLabelValues(transformationType).Observe(float64(since)) + transformerLatencies.WithLabelValues(transformationType).Observe(sinceInSeconds(start)) + deprecatedTransformerLatencies.WithLabelValues(transformationType).Observe(sinceInMicroseconds(start)) } // RecordCacheMiss records a miss on Key Encryption Key(KEK) - call to KMS was required to decrypt KEK. @@ -114,11 +137,16 @@ func RecordDataKeyGeneration(start time.Time, err error) { return } - since := sinceInMicroseconds(start) - dataKeyGenerationLatencies.Observe(float64(since)) + dataKeyGenerationLatencies.Observe(sinceInSeconds(start)) + deprecatedDataKeyGenerationLatencies.Observe(sinceInMicroseconds(start)) } -func sinceInMicroseconds(start time.Time) int64 { - elapsedNanoseconds := time.Since(start).Nanoseconds() - return elapsedNanoseconds / int64(time.Microsecond) +// sinceInMicroseconds gets the time since the specified start in microseconds. +func sinceInMicroseconds(start time.Time) float64 { + return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) +} + +// sinceInSeconds gets the time since the specified start in seconds. +func sinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() } diff --git a/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go index a83dafd56ab..90f8300bd32 100644 --- a/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go +++ b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go @@ -51,12 +51,23 @@ var ( allAlphaGate: setUnsetAlphaGates, } + // DefaultMutableFeatureGate is a mutable version of DefaultFeatureGate. + // Only top-level commands/options setup and the k8s.io/apiserver/pkg/util/feature/testing package should make use of this. + // Tests that need to modify feature gates for the duration of their test should use: + // defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features., )() + DefaultMutableFeatureGate MutableFeatureGate = NewFeatureGate() + // DefaultFeatureGate is a shared global FeatureGate. - DefaultFeatureGate FeatureGate = NewFeatureGate() + // Top-level commands/options setup that needs to modify this feature gate should use DefaultMutableFeatureGate. + DefaultFeatureGate FeatureGate = DefaultMutableFeatureGate ) type FeatureSpec struct { - Default bool + // Default is the default enablement state for the feature + Default bool + // LockToDefault indicates that the feature is locked to its default and cannot be changed + LockToDefault bool + // PreRelease indicates the maturity level of the feature PreRelease prerelease } @@ -72,9 +83,23 @@ const ( Deprecated = prerelease("DEPRECATED") ) -// FeatureGate parses and stores flag gates for known features from -// a string like feature1=true,feature2=false,... +// FeatureGate indicates whether a given feature is enabled or not type FeatureGate interface { + // Enabled returns true if the key is enabled. + Enabled(key Feature) bool + // KnownFeatures returns a slice of strings describing the FeatureGate's known features. + KnownFeatures() []string + // DeepCopy returns a deep copy of the FeatureGate object, such that gates can be + // set on the copy without mutating the original. This is useful for validating + // config against potential feature gate changes before committing those changes. + DeepCopy() MutableFeatureGate +} + +// MutableFeatureGate parses and stores flag gates for known features from +// a string like feature1=true,feature2=false,... +type MutableFeatureGate interface { + FeatureGate + // AddFlag adds a flag for setting global feature gates to the specified FlagSet. AddFlag(fs *pflag.FlagSet) // Set parses and stores flag gates for known features @@ -82,16 +107,8 @@ type FeatureGate interface { Set(value string) error // SetFromMap stores flag gates for known features from a map[string]bool or returns an error SetFromMap(m map[string]bool) error - // Enabled returns true if the key is enabled. - Enabled(key Feature) bool // Add adds features to the featureGate. Add(features map[Feature]FeatureSpec) error - // KnownFeatures returns a slice of strings describing the FeatureGate's known features. - KnownFeatures() []string - // DeepCopy returns a deep copy of the FeatureGate object, such that gates can be - // set on the copy without mutating the original. This is useful for validating - // config against potential feature gate changes before committing those changes. - DeepCopy() FeatureGate } // featureGate implements FeatureGate as well as pflag.Value for flag parsing. @@ -186,6 +203,9 @@ func (f *featureGate) SetFromMap(m map[string]bool) error { if !ok { return fmt.Errorf("unrecognized feature gate: %s", k) } + if featureSpec.LockToDefault && featureSpec.Default != v { + return fmt.Errorf("cannot set feature gate %v to %v, feature is locked to %v", k, v, featureSpec.Default) + } enabled[k] = v // Handle "special" features like "all alpha gates" if fn, found := f.special[k]; found { @@ -294,7 +314,7 @@ func (f *featureGate) KnownFeatures() []string { // DeepCopy returns a deep copy of the FeatureGate object, such that gates can be // set on the copy without mutating the original. This is useful for validating // config against potential feature gate changes before committing those changes. -func (f *featureGate) DeepCopy() FeatureGate { +func (f *featureGate) DeepCopy() MutableFeatureGate { // Copy existing state. known := map[Feature]FeatureSpec{} for k, v := range f.known.Load().(map[Feature]FeatureSpec) { diff --git a/vendor/k8s.io/apiserver/pkg/util/trace/BUILD b/vendor/k8s.io/apiserver/pkg/util/term/BUILD similarity index 53% rename from vendor/k8s.io/apiserver/pkg/util/trace/BUILD rename to vendor/k8s.io/apiserver/pkg/util/term/BUILD index 4e93ff5b498..346cff3e31b 100644 --- a/vendor/k8s.io/apiserver/pkg/util/trace/BUILD +++ b/vendor/k8s.io/apiserver/pkg/util/term/BUILD @@ -1,16 +1,12 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["trace.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/util/trace", - importpath = "k8s.io/apiserver/pkg/util/trace", - deps = ["//vendor/k8s.io/klog:go_default_library"], + srcs = ["term.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/util/term", + importpath = "k8s.io/apiserver/pkg/util/term", + visibility = ["//visibility:public"], + deps = ["//vendor/github.com/docker/docker/pkg/term:go_default_library"], ) filegroup( @@ -24,4 +20,5 @@ filegroup( name = "all-srcs", srcs = [":package-srcs"], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/apiserver/pkg/util/term/term.go b/vendor/k8s.io/apiserver/pkg/util/term/term.go new file mode 100644 index 00000000000..123985bbf63 --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/util/term/term.go @@ -0,0 +1,39 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "fmt" + "io" + + "github.com/docker/docker/pkg/term" +) + +// TerminalSize returns the current width and height of the user's terminal. If it isn't a terminal, +// nil is returned. On error, zero values are returned for width and height. +// Usually w must be the stdout of the process. Stderr won't work. +func TerminalSize(w io.Writer) (int, int, error) { + outFd, isTerminal := term.GetFdInfo(w) + if !isTerminal { + return 0, 0, fmt.Errorf("given writer is no terminal") + } + winsize, err := term.GetWinsize(outFd) + if err != nil { + return 0, 0, err + } + return int(winsize.Width), int(winsize.Height), nil +} diff --git a/vendor/k8s.io/apiserver/pkg/util/webhook/gencerts.sh b/vendor/k8s.io/apiserver/pkg/util/webhook/gencerts.sh index a042ab62af8..de407730117 100755 --- a/vendor/k8s.io/apiserver/pkg/util/webhook/gencerts.sh +++ b/vendor/k8s.io/apiserver/pkg/util/webhook/gencerts.sh @@ -88,12 +88,12 @@ See the License for the specific language governing permissions and limitations under the License. */ +// This file was generated using openssl by the gencerts.sh script +// and holds raw certificates for the webhook tests. + +package webhook EOF -echo "// This file was generated using openssl by the gencerts.sh script" >> $outfile -echo "// and holds raw certificates for the webhook tests." >> $outfile -echo "" >> $outfile -echo "package webhook" >> $outfile for file in caKey caCert badCAKey badCACert serverKey serverCert clientKey clientCert; do data=$(cat ${file}.pem) echo "" >> $outfile @@ -101,7 +101,7 @@ for file in caKey caCert badCAKey badCACert serverKey serverCert clientKey clien done # Clean up after we're done. -rm *.pem -rm *.csr -rm *.srl -rm *.conf +rm ./*.pem +rm ./*.csr +rm ./*.srl +rm ./*.conf diff --git a/vendor/k8s.io/apiserver/plugin/pkg/audit/OWNERS b/vendor/k8s.io/apiserver/plugin/pkg/audit/OWNERS index 178ce84a5ce..c3486ad5ded 100644 --- a/vendor/k8s.io/apiserver/plugin/pkg/audit/OWNERS +++ b/vendor/k8s.io/apiserver/plugin/pkg/audit/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-audit-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS b/vendor/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS index c607d2aa8c5..3e05d309be5 100644 --- a/vendor/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS +++ b/vendor/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go b/vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go index 7e8fab32540..7774a0193f8 100644 --- a/vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go +++ b/vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go @@ -19,6 +19,7 @@ package webhook import ( "context" + "errors" "time" authentication "k8s.io/api/authentication/v1" @@ -120,7 +121,11 @@ func (w *WebhookTokenAuthenticator) AuthenticateToken(ctx context.Context, token r.Status = result.Status if !r.Status.Authenticated { - return nil, false, nil + var err error + if len(r.Status.Error) != 0 { + err = errors.New(r.Status.Error) + } + return nil, false, err } var extra map[string][]string diff --git a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS +++ b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/gencerts.sh b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/gencerts.sh index 1e5fb1fd503..a66f8f381e7 100755 --- a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/gencerts.sh +++ b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/gencerts.sh @@ -17,7 +17,7 @@ set -e # gencerts.sh generates the certificates for the webhook authz plugin tests. -# +# # It is not expected to be run often (there is no go generate rule), and mainly # exists for documentation purposes. @@ -83,12 +83,12 @@ See the License for the specific language governing permissions and limitations under the License. */ +// This file was generated using openssl by the gencerts.sh script +// and holds raw certificates for the webhook tests. + +package webhook EOF -echo "// This file was generated using openssl by the gencerts.sh script" >> $outfile -echo "// and holds raw certificates for the webhook tests." >> $outfile -echo "" >> $outfile -echo "package webhook" >> $outfile for file in caKey caCert badCAKey badCACert serverKey serverCert clientKey clientCert; do data=$(cat ${file}.pem) echo "" >> $outfile @@ -96,7 +96,7 @@ for file in caKey caCert badCAKey badCACert serverKey serverCert clientKey clien done # Clean up after we're done. -rm *.pem -rm *.csr -rm *.srl -rm *.conf +rm ./*.pem +rm ./*.csr +rm ./*.srl +rm ./*.conf diff --git a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go index a9e4ce77733..8e65ef988e6 100644 --- a/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go +++ b/vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go @@ -39,7 +39,11 @@ var ( groupVersions = []schema.GroupVersion{authorization.SchemeGroupVersion} ) -const retryBackoff = 500 * time.Millisecond +const ( + retryBackoff = 500 * time.Millisecond + // The maximum length of requester-controlled attributes to allow caching. + maxControlledAttrCacheSize = 10000 +) // Ensure Webhook implements the authorizer.Authorizer interface. var _ authorizer.Authorizer = (*WebhookAuthorizer)(nil) @@ -193,10 +197,12 @@ func (w *WebhookAuthorizer) Authorize(attr authorizer.Attributes) (decision auth return w.decisionOnError, "", err } r.Status = result.Status - if r.Status.Allowed { - w.responseCache.Add(string(key), r.Status, w.authorizedTTL) - } else { - w.responseCache.Add(string(key), r.Status, w.unauthorizedTTL) + if shouldCache(attr) { + if r.Status.Allowed { + w.responseCache.Add(string(key), r.Status, w.authorizedTTL) + } else { + w.responseCache.Add(string(key), r.Status, w.unauthorizedTTL) + } } } switch { @@ -262,3 +268,17 @@ func (t *subjectAccessReviewClient) Create(subjectAccessReview *authorization.Su err := t.w.RestClient.Post().Body(subjectAccessReview).Do().Into(result) return result, err } + +// shouldCache determines whether it is safe to cache the given request attributes. If the +// requester-controlled attributes are too large, this may be a DoS attempt, so we skip the cache. +func shouldCache(attr authorizer.Attributes) bool { + controlledAttrSize := int64(len(attr.GetNamespace())) + + int64(len(attr.GetVerb())) + + int64(len(attr.GetAPIGroup())) + + int64(len(attr.GetAPIVersion())) + + int64(len(attr.GetResource())) + + int64(len(attr.GetSubresource())) + + int64(len(attr.GetName())) + + int64(len(attr.GetPath())) + return controlledAttrSize < maxControlledAttrCacheSize +} diff --git a/vendor/k8s.io/cli-runtime/BUILD b/vendor/k8s.io/cli-runtime/BUILD new file mode 100644 index 00000000000..a0ca6780e55 --- /dev/null +++ b/vendor/k8s.io/cli-runtime/BUILD @@ -0,0 +1,20 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/cli-runtime/artifacts:all-srcs", + "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:all-srcs", + "//staging/src/k8s.io/cli-runtime/pkg/kustomize:all-srcs", + "//staging/src/k8s.io/cli-runtime/pkg/printers:all-srcs", + "//staging/src/k8s.io/cli-runtime/pkg/resource:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/cli-runtime/CONTRIBUTING.md b/vendor/k8s.io/cli-runtime/CONTRIBUTING.md index 025a70e30fc..cca7de7d53f 100644 --- a/vendor/k8s.io/cli-runtime/CONTRIBUTING.md +++ b/vendor/k8s.io/cli-runtime/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/cli-runtime](https://git.k8s.io/kubernetes/staging/src/k8s.io/cli-runtime) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/cli-runtime/OWNERS b/vendor/k8s.io/cli-runtime/OWNERS index 27bd34cf6d6..983b7aece15 100644 --- a/vendor/k8s.io/cli-runtime/OWNERS +++ b/vendor/k8s.io/cli-runtime/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - pwittrock diff --git a/vendor/k8s.io/cli-runtime/SECURITY_CONTACTS b/vendor/k8s.io/cli-runtime/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/cli-runtime/SECURITY_CONTACTS +++ b/vendor/k8s.io/cli-runtime/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/BUILD b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/BUILD index 02ae9fd6caf..9b535f5c649 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/BUILD +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/BUILD @@ -25,9 +25,10 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", + "//staging/src/k8s.io/client-go/discovery/cached/disk:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/restmapper:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", @@ -48,11 +49,7 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:all-srcs", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags.go index f6686edd49c..77007a9988d 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" ) // ResourceBuilderFlags are flags for finding resources @@ -28,12 +28,11 @@ import ( type ResourceBuilderFlags struct { FileNameFlags *FileNameFlags - LabelSelector *string - FieldSelector *string - AllNamespaces *bool - All *bool - Local *bool - IncludeUninitialized *bool + LabelSelector *string + FieldSelector *string + AllNamespaces *bool + All *bool + Local *bool Scheme *runtime.Scheme Latest bool @@ -88,12 +87,6 @@ func (o *ResourceBuilderFlags) WithLocal(defaultVal bool) *ResourceBuilderFlags return o } -// WithUninitialized is using an alpha feature and may be dropped -func (o *ResourceBuilderFlags) WithUninitialized(defaultVal bool) *ResourceBuilderFlags { - o.IncludeUninitialized = &defaultVal - return o -} - func (o *ResourceBuilderFlags) WithScheme(scheme *runtime.Scheme) *ResourceBuilderFlags { o.Scheme = scheme return o @@ -120,7 +113,7 @@ func (o *ResourceBuilderFlags) AddFlags(flagset *pflag.FlagSet) { flagset.StringVar(o.FieldSelector, "field-selector", *o.FieldSelector, "Selector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.") } if o.AllNamespaces != nil { - flagset.BoolVar(o.AllNamespaces, "all-namespaces", *o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") + flagset.BoolVarP(o.AllNamespaces, "all-namespaces", "A", *o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") } if o.All != nil { flagset.BoolVar(o.All, "all", *o.All, "Select all resources in the namespace of the specified resource types") @@ -128,9 +121,6 @@ func (o *ResourceBuilderFlags) AddFlags(flagset *pflag.FlagSet) { if o.Local != nil { flagset.BoolVar(o.Local, "local", *o.Local, "If true, annotation will NOT contact api-server but run locally.") } - if o.IncludeUninitialized != nil { - flagset.BoolVar(o.IncludeUninitialized, "include-uninitialized", *o.IncludeUninitialized, `If true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.`) - } } // ToBuilder gives you back a resource finder to visit resources that are located @@ -179,10 +169,6 @@ func (o *ResourceBuilderFlags) ToBuilder(restClientGetter RESTClientGetter, reso } } - if o.IncludeUninitialized != nil { - builder.IncludeUninitialized(*o.IncludeUninitialized) - } - if !o.StopOnFirstError { builder.ContinueOnError() } diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags_fake.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags_fake.go index ca87d1e4c5c..310382919f4 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags_fake.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/builder_flags_fake.go @@ -17,7 +17,7 @@ limitations under the License. package genericclioptions import ( - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" ) // NewSimpleResourceFinder builds a super simple ResourceFinder that just iterates over the objects you provided diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index e32e1eee770..34b1f8e3a0f 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -21,12 +21,14 @@ import ( "path/filepath" "regexp" "strings" + "sync" "time" "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/client-go/discovery" + diskcached "k8s.io/client-go/discovery/cached/disk" "k8s.io/client-go/rest" "k8s.io/client-go/restmapper" "k8s.io/client-go/tools/clientcmd" @@ -92,6 +94,13 @@ type ConfigFlags struct { Username *string Password *string Timeout *string + + clientConfig clientcmd.ClientConfig + lock sync.Mutex + // If set to true, will use persistent client config and + // propagate the config to the places that need it, rather than + // loading the config multiple times + usePersistentConfig bool } // ToRESTConfig implements RESTClientGetter. @@ -106,6 +115,13 @@ func (f *ConfigFlags) ToRESTConfig() (*rest.Config, error) { // Returns an interactive clientConfig if the password flag is enabled, // or a non-interactive clientConfig otherwise. func (f *ConfigFlags) ToRawKubeConfigLoader() clientcmd.ClientConfig { + if f.usePersistentConfig { + return f.toRawKubePersistentConfigLoader() + } + return f.toRawKubeConfigLoader() +} + +func (f *ConfigFlags) toRawKubeConfigLoader() clientcmd.ClientConfig { loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() // use the standard defaults for this client command // DEPRECATED: remove and replace with something more accurate @@ -181,6 +197,19 @@ func (f *ConfigFlags) ToRawKubeConfigLoader() clientcmd.ClientConfig { return clientConfig } +// toRawKubePersistentConfigLoader binds config flag values to config overrides +// Returns a persistent clientConfig for propagation. +func (f *ConfigFlags) toRawKubePersistentConfigLoader() clientcmd.ClientConfig { + f.lock.Lock() + defer f.lock.Unlock() + + if f.clientConfig == nil { + f.clientConfig = f.toRawKubeConfigLoader() + } + + return f.clientConfig +} + // ToDiscoveryClient implements RESTClientGetter. // Expects the AddFlags method to have been called. // Returns a CachedDiscoveryInterface using a computed RESTConfig. @@ -203,7 +232,7 @@ func (f *ConfigFlags) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, e } discoveryCacheDir := computeDiscoverCacheDir(filepath.Join(homedir.HomeDir(), ".kube", "cache", "discovery"), config.Host) - return discovery.NewCachedDiscoveryClientForConfig(config, discoveryCacheDir, httpCacheDir, time.Duration(10*time.Minute)) + return diskcached.NewCachedDiscoveryClientForConfig(config, discoveryCacheDir, httpCacheDir, time.Duration(10*time.Minute)) } // ToRESTMapper returns a mapper. @@ -285,7 +314,7 @@ func (f *ConfigFlags) WithDeprecatedPasswordFlag() *ConfigFlags { } // NewConfigFlags returns ConfigFlags with default values set -func NewConfigFlags() *ConfigFlags { +func NewConfigFlags(usePersistentConfig bool) *ConfigFlags { impersonateGroup := []string{} insecure := false @@ -306,6 +335,8 @@ func NewConfigFlags() *ConfigFlags { BearerToken: stringptr(""), Impersonate: stringptr(""), ImpersonateGroup: &impersonateGroup, + + usePersistentConfig: usePersistentConfig, } } diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/doc.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/doc.go index 2bf32d25611..4796a8a449f 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/doc.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/doc.go @@ -16,4 +16,4 @@ limitations under the License. // Package genericclioptions contains flags which can be added to you command, bound, completed, and produce // useful helper functions. Nothing in this package can depend on kube/kube -package genericclioptions +package genericclioptions // import "k8s.io/cli-runtime/pkg/genericclioptions" diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/filename_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/filename_flags.go index 348a9c6368e..d41da7615ff 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/filename_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/filename_flags.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" ) // Usage of this struct by itself is discouraged. diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/json_yaml_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/json_yaml_flags.go index d9b58127378..a344eb0b639 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/json_yaml_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/json_yaml_flags.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) func (f *JSONYamlPrintFlags) AllowedFormats() []string { diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/jsonpath_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/jsonpath_flags.go index 8fc2227cf1c..0ebd6a6498b 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/jsonpath_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/jsonpath_flags.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) // templates are logically optional for specifying a format. diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/kube_template_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/kube_template_flags.go index d35384c2ca9..df2b58c1c28 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/kube_template_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/kube_template_flags.go @@ -19,7 +19,7 @@ package genericclioptions import ( "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) // KubeTemplatePrintFlags composes print flags that provide both a JSONPath and a go-template printer. diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/name_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/name_flags.go index 3a1f4f3f51b..7aa89ab05aa 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/name_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/name_flags.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) // NamePrintFlags provides default flags necessary for printing diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/print_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/print_flags.go index 3f59dab4b9e..17b05c8cd69 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/print_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/print_flags.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) type NoCompatiblePrinterError struct { diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/template_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/template_flags.go index 08954b24173..342912798a9 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/template_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/template_flags.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) // templates are logically optional for specifying a format. diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/BUILD b/vendor/k8s.io/cli-runtime/pkg/printers/BUILD similarity index 90% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/BUILD rename to vendor/k8s.io/cli-runtime/pkg/printers/BUILD index 2cbb55099d2..d856677347b 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/BUILD +++ b/vendor/k8s.io/cli-runtime/pkg/printers/BUILD @@ -4,6 +4,7 @@ go_library( name = "go_default_library", srcs = [ "discard.go", + "doc.go", "interface.go", "json.go", "jsonpath.go", @@ -12,14 +13,15 @@ go_library( "template.go", "typesetter.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers", - importpath = "k8s.io/cli-runtime/pkg/genericclioptions/printers", + importmap = "k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/printers", + importpath = "k8s.io/cli-runtime/pkg/printers", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", "//staging/src/k8s.io/client-go/util/jsonpath:go_default_library", "//vendor/sigs.k8s.io/yaml:go_default_library", ], diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/discard.go b/vendor/k8s.io/cli-runtime/pkg/printers/discard.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/discard.go rename to vendor/k8s.io/cli-runtime/pkg/printers/discard.go diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/doc.go b/vendor/k8s.io/cli-runtime/pkg/printers/doc.go new file mode 100644 index 00000000000..ee205371de5 --- /dev/null +++ b/vendor/k8s.io/cli-runtime/pkg/printers/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package printers is helper for formatting and printing runtime objects into +// primitives io.writer. +package printers // import "k8s.io/cli-runtime/pkg/printers" diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/interface.go b/vendor/k8s.io/cli-runtime/pkg/printers/interface.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/interface.go rename to vendor/k8s.io/cli-runtime/pkg/printers/interface.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/json.go b/vendor/k8s.io/cli-runtime/pkg/printers/json.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/json.go rename to vendor/k8s.io/cli-runtime/pkg/printers/json.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/jsonpath.go b/vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/jsonpath.go rename to vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/name.go b/vendor/k8s.io/cli-runtime/pkg/printers/name.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/name.go rename to vendor/k8s.io/cli-runtime/pkg/printers/name.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/sourcechecker.go b/vendor/k8s.io/cli-runtime/pkg/printers/sourcechecker.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/sourcechecker.go rename to vendor/k8s.io/cli-runtime/pkg/printers/sourcechecker.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/template.go b/vendor/k8s.io/cli-runtime/pkg/printers/template.go similarity index 98% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/template.go rename to vendor/k8s.io/cli-runtime/pkg/printers/template.go index 5dd807dad99..ccff542262c 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/template.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/template.go @@ -18,13 +18,13 @@ package printers import ( "encoding/base64" - "encoding/json" "fmt" "io" "reflect" "text/template" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/json" ) // GoTemplatePrinter is an implementation of ResourcePrinter which formats data with a Go Template. diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/typesetter.go b/vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/printers/typesetter.go rename to vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/BUILD b/vendor/k8s.io/cli-runtime/pkg/resource/BUILD similarity index 95% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/BUILD rename to vendor/k8s.io/cli-runtime/pkg/resource/BUILD index 22b34de0087..cd1e0073f2a 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/BUILD +++ b/vendor/k8s.io/cli-runtime/pkg/resource/BUILD @@ -15,8 +15,8 @@ go_library( "selector.go", "visitor.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource", - importpath = "k8s.io/cli-runtime/pkg/genericclioptions/resource", + importmap = "k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource", + importpath = "k8s.io/cli-runtime/pkg/resource", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -35,12 +35,14 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/kustomize:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/restmapper:go_default_library", "//vendor/golang.org/x/text/encoding/unicode:go_default_library", "//vendor/golang.org/x/text/transform:go_default_library", + "//vendor/sigs.k8s.io/kustomize/pkg/fs:go_default_library", ], ) diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/builder.go b/vendor/k8s.io/cli-runtime/pkg/resource/builder.go similarity index 97% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/builder.go rename to vendor/k8s.io/cli-runtime/pkg/resource/builder.go index 42f660a4e53..e7c06aaa4e1 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/builder.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/builder.go @@ -73,12 +73,11 @@ type Builder struct { stream bool dir bool - labelSelector *string - fieldSelector *string - selectAll bool - includeUninitialized bool - limitChunks int64 - requestTransforms []RequestTransform + labelSelector *string + fieldSelector *string + selectAll bool + limitChunks int64 + requestTransforms []RequestTransform resources []string @@ -134,6 +133,15 @@ type FilenameOptions struct { Recursive bool } +func (o *FilenameOptions) validate() []error { + var errs []error + return errs +} + +func (o *FilenameOptions) RequireFilenameOrKustomize() error { + return nil +} + type resourceTuple struct { Resource string Name string @@ -196,6 +204,10 @@ func (b *Builder) AddError(err error) *Builder { // If ContinueOnError() is set prior to this method, objects on the path that are not // recognized will be ignored (but logged at V(2)). func (b *Builder) FilenameParam(enforceNamespace bool, filenameOptions *FilenameOptions) *Builder { + if errs := filenameOptions.validate(); len(errs) > 0 { + b.errs = append(b.errs, errs...) + return b + } recursive := filenameOptions.Recursive paths := filenameOptions.Filenames for _, s := range paths { @@ -441,12 +453,6 @@ func (b *Builder) ExportParam(export bool) *Builder { return b } -// IncludeUninitialized accepts the include-uninitialized boolean for these resources -func (b *Builder) IncludeUninitialized(includeUninitialized bool) *Builder { - b.includeUninitialized = includeUninitialized - return b -} - // NamespaceParam accepts the namespace that these resources should be // considered under from - used by DefaultNamespace() and RequireNamespace() func (b *Builder) NamespaceParam(namespace string) *Builder { @@ -715,12 +721,12 @@ func (b *Builder) mappingFor(resourceOrKindArg string) (*meta.RESTMapping, error // if we error out here, it is because we could not match a resource or a kind // for the given argument. To maintain consistency with previous behavior, // announce that a resource type could not be found. - // if the error is a URL error, then we had trouble doing discovery, so we should return the original - // error since it may help a user diagnose what is actually wrong - if _, ok := err.(*url.Error); ok { - return nil, err + // if the error is _not_ a *meta.NoKindMatchError, then we had trouble doing discovery, + // so we should return the original error since it may help a user diagnose what is actually wrong + if meta.IsNoMatchError(err) { + return nil, fmt.Errorf("the server doesn't have a resource type %q", groupResource.Resource) } - return nil, fmt.Errorf("the server doesn't have a resource type %q", groupResource.Resource) + return nil, err } return mapping, nil @@ -844,7 +850,7 @@ func (b *Builder) visitBySelector() *Result { if mapping.Scope.Name() != meta.RESTScopeNameNamespace { selectorNamespace = "" } - visitors = append(visitors, NewSelector(client, mapping, selectorNamespace, labelSelector, fieldSelector, b.export, b.includeUninitialized, b.limitChunks)) + visitors = append(visitors, NewSelector(client, mapping, selectorNamespace, labelSelector, fieldSelector, b.export, b.limitChunks)) } if b.continueOnError { result.visitor = EagerVisitorList(visitors) diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/client.go b/vendor/k8s.io/cli-runtime/pkg/resource/client.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/client.go rename to vendor/k8s.io/cli-runtime/pkg/resource/client.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/doc.go b/vendor/k8s.io/cli-runtime/pkg/resource/doc.go similarity index 94% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/doc.go rename to vendor/k8s.io/cli-runtime/pkg/resource/doc.go index a0e22e7cf78..f83fdcbf8eb 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/doc.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/doc.go @@ -21,4 +21,4 @@ limitations under the License. // standard command line arguments and parameters into a Visitor that can iterate // over all of the identified resources, whether on the server or on the local // filesystem. -package resource +package resource // import "k8s.io/cli-runtime/pkg/resource" diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/fake.go b/vendor/k8s.io/cli-runtime/pkg/resource/fake.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/fake.go rename to vendor/k8s.io/cli-runtime/pkg/resource/fake.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/helper.go b/vendor/k8s.io/cli-runtime/pkg/resource/helper.go similarity index 98% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/helper.go rename to vendor/k8s.io/cli-runtime/pkg/resource/helper.go index 059d518af22..851351cf166 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/helper.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/helper.go @@ -138,9 +138,9 @@ func (m *Helper) createResource(c RESTClient, resource, namespace string, obj ru Do(). Get() } -func (m *Helper) Patch(namespace, name string, pt types.PatchType, data []byte, options *metav1.UpdateOptions) (runtime.Object, error) { +func (m *Helper) Patch(namespace, name string, pt types.PatchType, data []byte, options *metav1.PatchOptions) (runtime.Object, error) { if options == nil { - options = &metav1.UpdateOptions{} + options = &metav1.PatchOptions{} } return m.RESTClient.Patch(pt). NamespaceIfScoped(namespace, m.NamespaceScoped). diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/interfaces.go b/vendor/k8s.io/cli-runtime/pkg/resource/interfaces.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/interfaces.go rename to vendor/k8s.io/cli-runtime/pkg/resource/interfaces.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/mapper.go b/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/mapper.go rename to vendor/k8s.io/cli-runtime/pkg/resource/mapper.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/result.go b/vendor/k8s.io/cli-runtime/pkg/resource/result.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/result.go rename to vendor/k8s.io/cli-runtime/pkg/resource/result.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/scheme.go b/vendor/k8s.io/cli-runtime/pkg/resource/scheme.go similarity index 100% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/scheme.go rename to vendor/k8s.io/cli-runtime/pkg/resource/scheme.go diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/selector.go b/vendor/k8s.io/cli-runtime/pkg/resource/selector.go similarity index 79% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/selector.go rename to vendor/k8s.io/cli-runtime/pkg/resource/selector.go index f36508bd4a9..0c0bdbec41c 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/selector.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/selector.go @@ -27,27 +27,25 @@ import ( // Selector is a Visitor for resources that match a label selector. type Selector struct { - Client RESTClient - Mapping *meta.RESTMapping - Namespace string - LabelSelector string - FieldSelector string - Export bool - IncludeUninitialized bool - LimitChunks int64 + Client RESTClient + Mapping *meta.RESTMapping + Namespace string + LabelSelector string + FieldSelector string + Export bool + LimitChunks int64 } // NewSelector creates a resource selector which hides details of getting items by their label selector. -func NewSelector(client RESTClient, mapping *meta.RESTMapping, namespace, labelSelector, fieldSelector string, export, includeUninitialized bool, limitChunks int64) *Selector { +func NewSelector(client RESTClient, mapping *meta.RESTMapping, namespace, labelSelector, fieldSelector string, export bool, limitChunks int64) *Selector { return &Selector{ - Client: client, - Mapping: mapping, - Namespace: namespace, - LabelSelector: labelSelector, - FieldSelector: fieldSelector, - Export: export, - IncludeUninitialized: includeUninitialized, - LimitChunks: limitChunks, + Client: client, + Mapping: mapping, + Namespace: namespace, + LabelSelector: labelSelector, + FieldSelector: fieldSelector, + Export: export, + LimitChunks: limitChunks, } } @@ -60,11 +58,10 @@ func (r *Selector) Visit(fn VisitorFunc) error { r.ResourceMapping().GroupVersionKind.GroupVersion().String(), r.Export, &metav1.ListOptions{ - LabelSelector: r.LabelSelector, - FieldSelector: r.FieldSelector, - IncludeUninitialized: r.IncludeUninitialized, - Limit: r.LimitChunks, - Continue: continueToken, + LabelSelector: r.LabelSelector, + FieldSelector: r.FieldSelector, + Limit: r.LimitChunks, + Continue: continueToken, }, ) if err != nil { diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/visitor.go b/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go similarity index 97% rename from vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/visitor.go rename to vendor/k8s.io/cli-runtime/pkg/resource/visitor.go index 32c1a691a5a..b4e3b359a1c 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/resource/visitor.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go @@ -24,6 +24,7 @@ import ( "net/url" "os" "path/filepath" + "strings" "time" "golang.org/x/text/encoding/unicode" @@ -141,6 +142,18 @@ func (i *Info) Refresh(obj runtime.Object, ignoreError bool) error { return nil } +// ObjectName returns an approximate form of the resource's kind/name. +func (i *Info) ObjectName() string { + if i.Mapping != nil { + return fmt.Sprintf("%s/%s", i.Mapping.Resource.Resource, i.Name) + } + gvk := i.Object.GetObjectKind().GroupVersionKind() + if len(gvk.Group) == 0 { + return fmt.Sprintf("%s/%s", strings.ToLower(gvk.Kind), i.Name) + } + return fmt.Sprintf("%s.%s/%s\n", strings.ToLower(gvk.Kind), gvk.Group, i.Name) +} + // String returns the general purpose string representation func (i *Info) String() string { basicInfo := fmt.Sprintf("Name: %q, Namespace: %q\nObject: %+q", i.Name, i.Namespace, i.Object) diff --git a/vendor/k8s.io/client-go/BUILD b/vendor/k8s.io/client-go/BUILD new file mode 100644 index 00000000000..02fd33cbc24 --- /dev/null +++ b/vendor/k8s.io/client-go/BUILD @@ -0,0 +1,94 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/deprecated-dynamic:all-srcs", + "//staging/src/k8s.io/client-go/discovery:all-srcs", + "//staging/src/k8s.io/client-go/dynamic:all-srcs", + "//staging/src/k8s.io/client-go/examples/create-update-delete-deployment:all-srcs", + "//staging/src/k8s.io/client-go/examples/fake-client:all-srcs", + "//staging/src/k8s.io/client-go/examples/in-cluster-client-configuration:all-srcs", + "//staging/src/k8s.io/client-go/examples/out-of-cluster-client-configuration:all-srcs", + "//staging/src/k8s.io/client-go/examples/workqueue:all-srcs", + "//staging/src/k8s.io/client-go/informers:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes_test:all-srcs", + "//staging/src/k8s.io/client-go/listers/admissionregistration/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/apps/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/apps/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/apps/v1beta2:all-srcs", + "//staging/src/k8s.io/client-go/listers/auditregistration/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/authentication/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/authentication/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/authorization/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/authorization/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/autoscaling/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/autoscaling/v2beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/autoscaling/v2beta2:all-srcs", + "//staging/src/k8s.io/client-go/listers/batch/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/batch/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/batch/v2alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/certificates/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/coordination/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/coordination/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/core/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/events/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/extensions/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/imagepolicy/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/networking/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/networking/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/node/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/node/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/policy/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/rbac/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/rbac/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/rbac/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/scheduling/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/scheduling/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/scheduling/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/listers/settings/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/storage/v1:all-srcs", + "//staging/src/k8s.io/client-go/listers/storage/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/listers/storage/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/pkg/apis/clientauthentication:all-srcs", + "//staging/src/k8s.io/client-go/pkg/version:all-srcs", + "//staging/src/k8s.io/client-go/plugin/pkg/client/auth:all-srcs", + "//staging/src/k8s.io/client-go/rest:all-srcs", + "//staging/src/k8s.io/client-go/restmapper:all-srcs", + "//staging/src/k8s.io/client-go/scale:all-srcs", + "//staging/src/k8s.io/client-go/testing:all-srcs", + "//staging/src/k8s.io/client-go/third_party/forked/golang/template:all-srcs", + "//staging/src/k8s.io/client-go/tools/auth:all-srcs", + "//staging/src/k8s.io/client-go/tools/cache:all-srcs", + "//staging/src/k8s.io/client-go/tools/clientcmd:all-srcs", + "//staging/src/k8s.io/client-go/tools/leaderelection:all-srcs", + "//staging/src/k8s.io/client-go/tools/metrics:all-srcs", + "//staging/src/k8s.io/client-go/tools/pager:all-srcs", + "//staging/src/k8s.io/client-go/tools/portforward:all-srcs", + "//staging/src/k8s.io/client-go/tools/record:all-srcs", + "//staging/src/k8s.io/client-go/tools/reference:all-srcs", + "//staging/src/k8s.io/client-go/tools/remotecommand:all-srcs", + "//staging/src/k8s.io/client-go/tools/watch:all-srcs", + "//staging/src/k8s.io/client-go/transport:all-srcs", + "//staging/src/k8s.io/client-go/util/cert:all-srcs", + "//staging/src/k8s.io/client-go/util/certificate:all-srcs", + "//staging/src/k8s.io/client-go/util/connrotation:all-srcs", + "//staging/src/k8s.io/client-go/util/exec:all-srcs", + "//staging/src/k8s.io/client-go/util/flowcontrol:all-srcs", + "//staging/src/k8s.io/client-go/util/homedir:all-srcs", + "//staging/src/k8s.io/client-go/util/jsonpath:all-srcs", + "//staging/src/k8s.io/client-go/util/keyutil:all-srcs", + "//staging/src/k8s.io/client-go/util/retry:all-srcs", + "//staging/src/k8s.io/client-go/util/testing:all-srcs", + "//staging/src/k8s.io/client-go/util/workqueue:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/CONTRIBUTING.md b/vendor/k8s.io/client-go/CONTRIBUTING.md index b01f8abb0e0..267164690db 100644 --- a/vendor/k8s.io/client-go/CONTRIBUTING.md +++ b/vendor/k8s.io/client-go/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/client-go](https://git.k8s.io/kubernetes/staging/src/k8s.io/client-go) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/client-go](https://git.k8s.io/kubernetes/staging/src/k8s.io/client-go) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/client-go/OWNERS b/vendor/k8s.io/client-go/OWNERS index 52d334653cc..2f9f0fb4dc8 100644 --- a/vendor/k8s.io/client-go/OWNERS +++ b/vendor/k8s.io/client-go/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - deads2k diff --git a/vendor/k8s.io/client-go/SECURITY_CONTACTS b/vendor/k8s.io/client-go/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/client-go/SECURITY_CONTACTS +++ b/vendor/k8s.io/client-go/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/client-go/discovery/BUILD b/vendor/k8s.io/client-go/discovery/BUILD index 64e75dc511c..da3890de609 100644 --- a/vendor/k8s.io/client-go/discovery/BUILD +++ b/vendor/k8s.io/client-go/discovery/BUILD @@ -9,11 +9,9 @@ load( go_library( name = "go_default_library", srcs = [ - "cached_discovery.go", "discovery_client.go", "doc.go", "helper.go", - "round_tripper.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/discovery", importpath = "k8s.io/client-go/discovery", @@ -30,10 +28,6 @@ go_library( "//staging/src/k8s.io/client-go/rest:go_default_library", "//vendor/github.com/golang/protobuf/proto:go_default_library", "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", - "//vendor/github.com/gregjones/httpcache:go_default_library", - "//vendor/github.com/gregjones/httpcache/diskcache:go_default_library", - "//vendor/github.com/peterbourgon/diskv:go_default_library", - "//vendor/k8s.io/klog:go_default_library", ], ) @@ -57,15 +51,12 @@ filegroup( go_test( name = "go_default_test", srcs = [ - "cached_discovery_test.go", "discovery_client_test.go", "helper_blackbox_test.go", - "round_tripper_test.go", ], embed = [":go_default_library"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/vendor/k8s.io/client-go/discovery/cached/BUILD b/vendor/k8s.io/client-go/discovery/cached/BUILD index 3fa72ceb8a9..00d4a5d24f4 100644 --- a/vendor/k8s.io/client-go/discovery/cached/BUILD +++ b/vendor/k8s.io/client-go/discovery/cached/BUILD @@ -1,33 +1,14 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_test( - name = "go_default_test", - srcs = ["memcache_test.go"], - embed = [":go_default_library"], - deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/client-go/discovery/fake:go_default_library", - ], -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["memcache.go"], + srcs = ["legacy.go"], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/discovery/cached", importpath = "k8s.io/client-go/discovery/cached", + visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library", ], ) @@ -40,6 +21,11 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/discovery/cached/disk:all-srcs", + "//staging/src/k8s.io/client-go/discovery/cached/memory:all-srcs", + ], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/client-go/discovery/cached/disk/BUILD b/vendor/k8s.io/client-go/discovery/cached/disk/BUILD new file mode 100644 index 00000000000..3b037bcdca5 --- /dev/null +++ b/vendor/k8s.io/client-go/discovery/cached/disk/BUILD @@ -0,0 +1,59 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "cached_discovery.go", + "round_tripper.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/discovery/cached/disk", + importpath = "k8s.io/client-go/discovery/cached/disk", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", + "//staging/src/k8s.io/client-go/discovery:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//vendor/github.com/gregjones/httpcache:go_default_library", + "//vendor/github.com/gregjones/httpcache/diskcache:go_default_library", + "//vendor/github.com/peterbourgon/diskv:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "cached_discovery_test.go", + "round_tripper_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", + "//staging/src/k8s.io/client-go/discovery:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/client-go/rest/fake:go_default_library", + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/discovery/cached_discovery.go b/vendor/k8s.io/client-go/discovery/cached/disk/cached_discovery.go similarity index 90% rename from vendor/k8s.io/client-go/discovery/cached_discovery.go rename to vendor/k8s.io/client-go/discovery/cached/disk/cached_discovery.go index df69d6a1930..9ede5016bc7 100644 --- a/vendor/k8s.io/client-go/discovery/cached_discovery.go +++ b/vendor/k8s.io/client-go/discovery/cached/disk/cached_discovery.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package discovery +package disk import ( "errors" @@ -25,12 +25,13 @@ import ( "sync" "time" - "github.com/googleapis/gnostic/OpenAPIv2" + openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2" "k8s.io/klog" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/version" + "k8s.io/client-go/discovery" "k8s.io/client-go/kubernetes/scheme" restclient "k8s.io/client-go/rest" ) @@ -38,7 +39,7 @@ import ( // CachedDiscoveryClient implements the functions that discovery server-supported API groups, // versions and resources. type CachedDiscoveryClient struct { - delegate DiscoveryInterface + delegate discovery.DiscoveryInterface // cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. cacheDirectory string @@ -57,7 +58,7 @@ type CachedDiscoveryClient struct { fresh bool } -var _ CachedDiscoveryInterface = &CachedDiscoveryClient{} +var _ discovery.CachedDiscoveryInterface = &CachedDiscoveryClient{} // ServerResourcesForGroupVersion returns the supported resources for a group and version. func (d *CachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { @@ -90,8 +91,15 @@ func (d *CachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion stri } // ServerResources returns the supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. func (d *CachedDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { - return ServerResources(d) + _, rs, err := discovery.ServerGroupsAndResources(d) + return rs, err +} + +// ServerGroupsAndResources returns the supported groups and resources for all groups and versions. +func (d *CachedDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return discovery.ServerGroupsAndResources(d) } // ServerGroups returns the supported groups, with information like supported versions and the @@ -213,13 +221,13 @@ func (d *CachedDiscoveryClient) RESTClient() restclient.Interface { // ServerPreferredResources returns the supported resources with the version preferred by the // server. func (d *CachedDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredResources(d) + return discovery.ServerPreferredResources(d) } // ServerPreferredNamespacedResources returns the supported namespaced resources with the // version preferred by the server. func (d *CachedDiscoveryClient) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredNamespacedResources(d) + return discovery.ServerPreferredNamespacedResources(d) } // ServerVersion retrieves and parses the server's version (git version). @@ -266,16 +274,13 @@ func NewCachedDiscoveryClientForConfig(config *restclient.Config, discoveryCache if len(httpCacheDir) > 0 { // update the given restconfig with a custom roundtripper that // understands how to handle cache responses. - wt := config.WrapTransport - config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { - if wt != nil { - rt = wt(rt) - } + config = restclient.CopyConfig(config) + config.Wrap(func(rt http.RoundTripper) http.RoundTripper { return newCacheRoundTripper(httpCacheDir, rt) - } + }) } - discoveryClient, err := NewDiscoveryClientForConfig(config) + discoveryClient, err := discovery.NewDiscoveryClientForConfig(config) if err != nil { return nil, err } @@ -284,7 +289,7 @@ func NewCachedDiscoveryClientForConfig(config *restclient.Config, discoveryCache } // NewCachedDiscoveryClient creates a new DiscoveryClient. cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. -func newCachedDiscoveryClient(delegate DiscoveryInterface, cacheDirectory string, ttl time.Duration) *CachedDiscoveryClient { +func newCachedDiscoveryClient(delegate discovery.DiscoveryInterface, cacheDirectory string, ttl time.Duration) *CachedDiscoveryClient { return &CachedDiscoveryClient{ delegate: delegate, cacheDirectory: cacheDirectory, diff --git a/vendor/k8s.io/client-go/discovery/round_tripper.go b/vendor/k8s.io/client-go/discovery/cached/disk/round_tripper.go similarity index 98% rename from vendor/k8s.io/client-go/discovery/round_tripper.go rename to vendor/k8s.io/client-go/discovery/cached/disk/round_tripper.go index 4e2bc24e774..7e2a537a9a2 100644 --- a/vendor/k8s.io/client-go/discovery/round_tripper.go +++ b/vendor/k8s.io/client-go/discovery/cached/disk/round_tripper.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package discovery +package disk import ( "net/http" diff --git a/vendor/k8s.io/client-go/discovery/cached/legacy.go b/vendor/k8s.io/client-go/discovery/cached/legacy.go new file mode 100644 index 00000000000..725900a91ca --- /dev/null +++ b/vendor/k8s.io/client-go/discovery/cached/legacy.go @@ -0,0 +1,30 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package memory + +import ( + "k8s.io/client-go/discovery" + "k8s.io/client-go/discovery/cached/memory" +) + +// NewMemCacheClient is DEPRECATED. Use memory.NewMemCacheClient directly. +func NewMemCacheClient(delegate discovery.DiscoveryInterface) discovery.CachedDiscoveryInterface { + return memory.NewMemCacheClient(delegate) +} + +// ErrCacheNotFound is DEPRECATED. Use memory.ErrCacheNotFound directly. +var ErrCacheNotFound = memory.ErrCacheNotFound diff --git a/vendor/k8s.io/client-go/discovery/cached/memory/BUILD b/vendor/k8s.io/client-go/discovery/cached/memory/BUILD new file mode 100644 index 00000000000..ffeee040b0f --- /dev/null +++ b/vendor/k8s.io/client-go/discovery/cached/memory/BUILD @@ -0,0 +1,47 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = ["memcache_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/client-go/discovery/fake:go_default_library", + ], +) + +go_library( + name = "go_default_library", + srcs = ["memcache.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/discovery/cached/memory", + importpath = "k8s.io/client-go/discovery/cached/memory", + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", + "//staging/src/k8s.io/client-go/discovery:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/client-go/discovery/cached/memcache.go b/vendor/k8s.io/client-go/discovery/cached/memory/memcache.go similarity index 54% rename from vendor/k8s.io/client-go/discovery/cached/memcache.go rename to vendor/k8s.io/client-go/discovery/cached/memory/memcache.go index 702392514b5..31e42156610 100644 --- a/vendor/k8s.io/client-go/discovery/cached/memcache.go +++ b/vendor/k8s.io/client-go/discovery/cached/memory/memcache.go @@ -14,15 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ -package cached +package memory import ( "errors" "fmt" + "net" + "net/url" "sync" + "syscall" "github.com/googleapis/gnostic/OpenAPIv2" + errorsutil "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/version" @@ -30,52 +34,107 @@ import ( restclient "k8s.io/client-go/rest" ) +type cacheEntry struct { + resourceList *metav1.APIResourceList + err error +} + // memCacheClient can Invalidate() to stay up-to-date with discovery // information. // -// TODO: Switch to a watch interface. Right now it will poll anytime -// Invalidate() is called. +// TODO: Switch to a watch interface. Right now it will poll after each +// Invalidate() call. type memCacheClient struct { delegate discovery.DiscoveryInterface lock sync.RWMutex - groupToServerResources map[string]*metav1.APIResourceList + groupToServerResources map[string]*cacheEntry groupList *metav1.APIGroupList cacheValid bool } // Error Constants var ( - ErrCacheEmpty = errors.New("the cache has not been filled yet") ErrCacheNotFound = errors.New("not found") ) var _ discovery.CachedDiscoveryInterface = &memCacheClient{} +// isTransientConnectionError checks whether given error is "Connection refused" or +// "Connection reset" error which usually means that apiserver is temporarily +// unavailable. +func isTransientConnectionError(err error) bool { + urlError, ok := err.(*url.Error) + if !ok { + return false + } + opError, ok := urlError.Err.(*net.OpError) + if !ok { + return false + } + errno, ok := opError.Err.(syscall.Errno) + if !ok { + return false + } + return errno == syscall.ECONNREFUSED || errno == syscall.ECONNRESET +} + +func isTransientError(err error) bool { + if isTransientConnectionError(err) { + return true + } + + if t, ok := err.(errorsutil.APIStatus); ok && t.Status().Code >= 500 { + return true + } + + return errorsutil.IsTooManyRequests(err) +} + // ServerResourcesForGroupVersion returns the supported resources for a group and version. func (d *memCacheClient) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { - d.lock.RLock() - defer d.lock.RUnlock() + d.lock.Lock() + defer d.lock.Unlock() if !d.cacheValid { - return nil, ErrCacheEmpty + if err := d.refreshLocked(); err != nil { + return nil, err + } } cachedVal, ok := d.groupToServerResources[groupVersion] if !ok { return nil, ErrCacheNotFound } - return cachedVal, nil + + if cachedVal.err != nil && isTransientError(cachedVal.err) { + r, err := d.serverResourcesForGroupVersion(groupVersion) + if err != nil { + utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", groupVersion, err)) + } + cachedVal = &cacheEntry{r, err} + d.groupToServerResources[groupVersion] = cachedVal + } + + return cachedVal.resourceList, cachedVal.err } // ServerResources returns the supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. func (d *memCacheClient) ServerResources() ([]*metav1.APIResourceList, error) { return discovery.ServerResources(d) } +// ServerGroupsAndResources returns the groups and supported resources for all groups and versions. +func (d *memCacheClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return discovery.ServerGroupsAndResources(d) +} + func (d *memCacheClient) ServerGroups() (*metav1.APIGroupList, error) { - d.lock.RLock() - defer d.lock.RUnlock() - if d.groupList == nil { - return nil, ErrCacheEmpty + d.lock.Lock() + defer d.lock.Unlock() + if !d.cacheValid { + if err := d.refreshLocked(); err != nil { + return nil, err + } } return d.groupList, nil } @@ -103,49 +162,59 @@ func (d *memCacheClient) OpenAPISchema() (*openapi_v2.Document, error) { func (d *memCacheClient) Fresh() bool { d.lock.RLock() defer d.lock.RUnlock() - // Fresh is supposed to tell the caller whether or not to retry if the cache - // fails to find something. The idea here is that Invalidate will be called - // periodically and therefore we'll always be returning the latest data. (And - // in the future we can watch and stay even more up-to-date.) So we only - // return false if the cache has never been filled. + // Return whether the cache is populated at all. It is still possible that + // a single entry is missing due to transient errors and the attempt to read + // that entry will trigger retry. return d.cacheValid } -// Invalidate refreshes the cache, blocking calls until the cache has been -// refreshed. It would be trivial to make a version that does this in the -// background while continuing to respond to requests if needed. +// Invalidate enforces that no cached data that is older than the current time +// is used. func (d *memCacheClient) Invalidate() { d.lock.Lock() defer d.lock.Unlock() + d.cacheValid = false + d.groupToServerResources = nil + d.groupList = nil +} +// refreshLocked refreshes the state of cache. The caller must hold d.lock for +// writing. +func (d *memCacheClient) refreshLocked() error { // TODO: Could this multiplicative set of calls be replaced by a single call // to ServerResources? If it's possible for more than one resulting // APIResourceList to have the same GroupVersion, the lists would need merged. gl, err := d.delegate.ServerGroups() if err != nil || len(gl.Groups) == 0 { - utilruntime.HandleError(fmt.Errorf("couldn't get current server API group list; will keep using cached value. (%v)", err)) - return + utilruntime.HandleError(fmt.Errorf("couldn't get current server API group list: %v", err)) + return err } - rl := map[string]*metav1.APIResourceList{} + rl := map[string]*cacheEntry{} for _, g := range gl.Groups { for _, v := range g.Versions { - r, err := d.delegate.ServerResourcesForGroupVersion(v.GroupVersion) - if err != nil || len(r.APIResources) == 0 { + r, err := d.serverResourcesForGroupVersion(v.GroupVersion) + rl[v.GroupVersion] = &cacheEntry{r, err} + if err != nil { utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", v.GroupVersion, err)) - if cur, ok := d.groupToServerResources[v.GroupVersion]; ok { - // retain the existing list, if we had it. - r = cur - } else { - continue - } } - rl[v.GroupVersion] = r } } d.groupToServerResources, d.groupList = rl, gl d.cacheValid = true + return nil +} + +func (d *memCacheClient) serverResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { + r, err := d.delegate.ServerResourcesForGroupVersion(groupVersion) + if err != nil { + return r, err + } + if len(r.APIResources) == 0 { + return r, fmt.Errorf("Got empty response for: %v", groupVersion) + } + return r, nil } // NewMemCacheClient creates a new CachedDiscoveryInterface which caches @@ -156,6 +225,6 @@ func (d *memCacheClient) Invalidate() { func NewMemCacheClient(delegate discovery.DiscoveryInterface) discovery.CachedDiscoveryInterface { return &memCacheClient{ delegate: delegate, - groupToServerResources: map[string]*metav1.APIResourceList{}, + groupToServerResources: map[string]*cacheEntry{}, } } diff --git a/vendor/k8s.io/client-go/discovery/discovery_client.go b/vendor/k8s.io/client-go/discovery/discovery_client.go index 17b39de0539..61b9c4481bc 100644 --- a/vendor/k8s.io/client-go/discovery/discovery_client.go +++ b/vendor/k8s.io/client-go/discovery/discovery_client.go @@ -26,7 +26,7 @@ import ( "time" "github.com/golang/protobuf/proto" - "github.com/googleapis/gnostic/OpenAPIv2" + openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -60,6 +60,9 @@ type DiscoveryInterface interface { } // CachedDiscoveryInterface is a DiscoveryInterface with cache invalidation and freshness. +// Note that If the ServerResourcesForGroupVersion method returns a cache miss +// error, the user needs to explicitly call Invalidate to clear the cache, +// otherwise the same cache miss error will be returned next time. type CachedDiscoveryInterface interface { DiscoveryInterface // Fresh is supposed to tell the caller whether or not to retry if the cache @@ -68,7 +71,8 @@ type CachedDiscoveryInterface interface { // TODO: this needs to be revisited, this interface can't be locked properly // and doesn't make a lot of sense. Fresh() bool - // Invalidate enforces that no cached data is used in the future that is older than the current time. + // Invalidate enforces that no cached data that is older than the current time + // is used. Invalidate() } @@ -84,12 +88,28 @@ type ServerResourcesInterface interface { // ServerResourcesForGroupVersion returns the supported resources for a group and version. ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) // ServerResources returns the supported resources for all groups and versions. + // + // The returned resource list might be non-nil with partial results even in the case of + // non-nil error. + // + // Deprecated: use ServerGroupsAndResources instead. ServerResources() ([]*metav1.APIResourceList, error) + // ServerResources returns the supported groups and resources for all groups and versions. + // + // The returned group and resource lists might be non-nil with partial results even in the + // case of non-nil error. + ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) // ServerPreferredResources returns the supported resources with the version preferred by the // server. + // + // The returned group and resource lists might be non-nil with partial results even in the + // case of non-nil error. ServerPreferredResources() ([]*metav1.APIResourceList, error) // ServerPreferredNamespacedResources returns the supported namespaced resources with the // version preferred by the server. + // + // The returned resource list might be non-nil with partial results even in the case of + // non-nil error. ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) } @@ -187,14 +207,18 @@ func (d *DiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (r return resources, nil } -// serverResources returns the supported resources for all groups and versions. -func (d *DiscoveryClient) serverResources() ([]*metav1.APIResourceList, error) { - return ServerResources(d) +// ServerResources returns the supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. +func (d *DiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { + _, rs, err := d.ServerGroupsAndResources() + return rs, err } -// ServerResources returns the supported resources for all groups and versions. -func (d *DiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { - return withRetries(defaultRetries, d.serverResources) +// ServerGroupsAndResources returns the supported resources for all groups and versions. +func (d *DiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return ServerGroupsAndResources(d) + }) } // ErrGroupDiscoveryFailed is returned if one or more API groups fail to load. @@ -220,23 +244,28 @@ func IsGroupDiscoveryFailedError(err error) bool { return err != nil && ok } -// serverPreferredResources returns the supported resources with the version preferred by the server. -func (d *DiscoveryClient) serverPreferredResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredResources(d) +// ServerResources uses the provided discovery interface to look up supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. +func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) { + _, rs, err := ServerGroupsAndResources(d) + return rs, err } -// ServerResources uses the provided discovery interface to look up supported resources for all groups and versions. -func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) { - apiGroups, err := d.ServerGroups() - if err != nil { - return nil, err +func ServerGroupsAndResources(d DiscoveryInterface) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + sgs, err := d.ServerGroups() + if sgs == nil { + return nil, nil, err + } + resultGroups := []*metav1.APIGroup{} + for i := range sgs.Groups { + resultGroups = append(resultGroups, &sgs.Groups[i]) } - groupVersionResources, failedGroups := fetchGroupVersionResources(d, apiGroups) + groupVersionResources, failedGroups := fetchGroupVersionResources(d, sgs) // order results by group/version discovery order result := []*metav1.APIResourceList{} - for _, apiGroup := range apiGroups.Groups { + for _, apiGroup := range sgs.Groups { for _, version := range apiGroup.Versions { gv := schema.GroupVersion{Group: apiGroup.Name, Version: version.Version} if resources, ok := groupVersionResources[gv]; ok { @@ -246,10 +275,10 @@ func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) { } if len(failedGroups) == 0 { - return result, nil + return resultGroups, result, nil } - return result, &ErrGroupDiscoveryFailed{Groups: failedGroups} + return resultGroups, result, &ErrGroupDiscoveryFailed{Groups: failedGroups} } // ServerPreferredResources uses the provided discovery interface to look up preferred resources @@ -313,7 +342,7 @@ func ServerPreferredResources(d DiscoveryInterface) ([]*metav1.APIResourceList, return result, &ErrGroupDiscoveryFailed{Groups: failedGroups} } -// fetchServerResourcesForGroupVersions uses the discovery client to fetch the resources for the specified groups in parallel +// fetchServerResourcesForGroupVersions uses the discovery client to fetch the resources for the specified groups in parallel. func fetchGroupVersionResources(d DiscoveryInterface, apiGroups *metav1.APIGroupList) (map[schema.GroupVersion]*metav1.APIResourceList, map[schema.GroupVersion]error) { groupVersionResources := make(map[schema.GroupVersion]*metav1.APIResourceList) failedGroups := make(map[schema.GroupVersion]error) @@ -337,7 +366,9 @@ func fetchGroupVersionResources(d DiscoveryInterface, apiGroups *metav1.APIGroup if err != nil { // TODO: maybe restrict this to NotFound errors failedGroups[groupVersion] = err - } else { + } + if apiResourceList != nil { + // even in case of error, some fallback might have been returned groupVersionResources[groupVersion] = apiResourceList } }() @@ -351,7 +382,11 @@ func fetchGroupVersionResources(d DiscoveryInterface, apiGroups *metav1.APIGroup // ServerPreferredResources returns the supported resources with the version preferred by the // server. func (d *DiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return withRetries(defaultRetries, d.serverPreferredResources) + _, rs, err := withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + rs, err := ServerPreferredResources(d) + return nil, rs, err + }) + return rs, err } // ServerPreferredNamespacedResources returns the supported namespaced resources with the @@ -377,7 +412,7 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { var info version.Info err = json.Unmarshal(body, &info) if err != nil { - return nil, fmt.Errorf("got '%s': %v", string(body), err) + return nil, fmt.Errorf("unable to parse the server version: %v", err) } return &info, nil } @@ -388,7 +423,7 @@ func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { if err != nil { if errors.IsForbidden(err) || errors.IsNotFound(err) || errors.IsNotAcceptable(err) { // single endpoint not found/registered in old server, try to fetch old endpoint - // TODO(roycaihw): remove this in 1.11 + // TODO: remove this when kubectl/client-go don't work with 1.9 server data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() if err != nil { return nil, err @@ -406,19 +441,20 @@ func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { } // withRetries retries the given recovery function in case the groups supported by the server change after ServerGroup() returns. -func withRetries(maxRetries int, f func() ([]*metav1.APIResourceList, error)) ([]*metav1.APIResourceList, error) { +func withRetries(maxRetries int, f func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error)) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { var result []*metav1.APIResourceList + var resultGroups []*metav1.APIGroup var err error for i := 0; i < maxRetries; i++ { - result, err = f() + resultGroups, result, err = f() if err == nil { - return result, nil + return resultGroups, result, nil } if _, ok := err.(*ErrGroupDiscoveryFailed); !ok { - return nil, err + return nil, nil, err } } - return result, err + return resultGroups, result, err } func setDiscoveryDefaults(config *restclient.Config) error { diff --git a/vendor/k8s.io/client-go/dynamic/interface.go b/vendor/k8s.io/client-go/dynamic/interface.go index c457be1780b..70756a4f588 100644 --- a/vendor/k8s.io/client-go/dynamic/interface.go +++ b/vendor/k8s.io/client-go/dynamic/interface.go @@ -37,7 +37,7 @@ type ResourceInterface interface { Get(name string, options metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) List(opts metav1.ListOptions) (*unstructured.UnstructuredList, error) Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, options metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) + Patch(name string, pt types.PatchType, data []byte, options metav1.PatchOptions, subresources ...string) (*unstructured.Unstructured, error) } type NamespaceableResourceInterface interface { diff --git a/vendor/k8s.io/client-go/dynamic/simple.go b/vendor/k8s.io/client-go/dynamic/simple.go index 9e21cda6e37..852f0c5120a 100644 --- a/vendor/k8s.io/client-go/dynamic/simple.go +++ b/vendor/k8s.io/client-go/dynamic/simple.go @@ -283,7 +283,7 @@ func (c *dynamicResourceClient) Watch(opts metav1.ListOptions) (watch.Interface, WatchWithSpecificDecoders(wrappedDecoderFn, unstructured.UnstructuredJSONScheme) } -func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) { +func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (*unstructured.Unstructured, error) { result := c.client.client. Patch(pt). AbsPath(append(c.makeURLSegments(name), subresources...)...). diff --git a/vendor/k8s.io/client-go/informers/BUILD b/vendor/k8s.io/client-go/informers/BUILD index 24af1356b8c..2af12205599 100644 --- a/vendor/k8s.io/client-go/informers/BUILD +++ b/vendor/k8s.io/client-go/informers/BUILD @@ -10,7 +10,6 @@ go_library( importpath = "k8s.io/client-go/informers", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", @@ -23,15 +22,20 @@ go_library( "//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/events/v1beta1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/networking/v1:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/api/settings/v1alpha1:go_default_library", @@ -53,6 +57,7 @@ go_library( "//staging/src/k8s.io/client-go/informers/extensions:go_default_library", "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", "//staging/src/k8s.io/client-go/informers/networking:go_default_library", + "//staging/src/k8s.io/client-go/informers/node:go_default_library", "//staging/src/k8s.io/client-go/informers/policy:go_default_library", "//staging/src/k8s.io/client-go/informers/rbac:go_default_library", "//staging/src/k8s.io/client-go/informers/scheduling:go_default_library", @@ -86,6 +91,7 @@ filegroup( "//staging/src/k8s.io/client-go/informers/extensions:all-srcs", "//staging/src/k8s.io/client-go/informers/internalinterfaces:all-srcs", "//staging/src/k8s.io/client-go/informers/networking:all-srcs", + "//staging/src/k8s.io/client-go/informers/node:all-srcs", "//staging/src/k8s.io/client-go/informers/policy:all-srcs", "//staging/src/k8s.io/client-go/informers/rbac:all-srcs", "//staging/src/k8s.io/client-go/informers/scheduling:all-srcs", diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/BUILD b/vendor/k8s.io/client-go/informers/admissionregistration/BUILD index 133a747864e..679ce4eefca 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/BUILD +++ b/vendor/k8s.io/client-go/informers/admissionregistration/BUILD @@ -11,7 +11,6 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/admissionregistration", importpath = "k8s.io/client-go/informers/admissionregistration", deps = [ - "//staging/src/k8s.io/client-go/informers/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/client-go/informers/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", ], @@ -28,7 +27,6 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//staging/src/k8s.io/client-go/informers/admissionregistration/v1alpha1:all-srcs", "//staging/src/k8s.io/client-go/informers/admissionregistration/v1beta1:all-srcs", ], tags = ["automanaged"], diff --git a/vendor/k8s.io/client-go/informers/autoscaling/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/interface.go index 426a29f0c8e..81e8390147d 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/interface.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/interface.go @@ -20,6 +20,7 @@ package autoscaling import ( v1 "k8s.io/client-go/informers/autoscaling/v1" + v2beta1 "k8s.io/client-go/informers/autoscaling/v2beta1" v2beta2 "k8s.io/client-go/informers/autoscaling/v2beta2" internalinterfaces "k8s.io/client-go/informers/internalinterfaces" ) @@ -28,6 +29,8 @@ import ( type Interface interface { // V1 provides access to shared informers for resources in V1. V1() v1.Interface + // V2beta1 provides access to shared informers for resources in V2beta1. + V2beta1() v2beta1.Interface // V2beta2 provides access to shared informers for resources in V2beta2. V2beta2() v2beta2.Interface } @@ -48,6 +51,11 @@ func (g *group) V1() v1.Interface { return v1.New(g.factory, g.namespace, g.tweakListOptions) } +// V2beta1 returns a new v2beta1.Interface. +func (g *group) V2beta1() v2beta1.Interface { + return v2beta1.New(g.factory, g.namespace, g.tweakListOptions) +} + // V2beta2 returns a new v2beta2.Interface. func (g *group) V2beta2() v2beta2.Interface { return v2beta2.New(g.factory, g.namespace, g.tweakListOptions) diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/BUILD b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/BUILD new file mode 100644 index 00000000000..57800041903 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "horizontalpodautoscaler.go", + "interface.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/autoscaling/v2beta1", + importpath = "k8s.io/client-go/informers/autoscaling/v2beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/autoscaling/v2beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/autoscaling/v2beta1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go new file mode 100644 index 00000000000..4627c5a0b5c --- /dev/null +++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v2beta1 + +import ( + time "time" + + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v2beta1 "k8s.io/client-go/listers/autoscaling/v2beta1" + cache "k8s.io/client-go/tools/cache" +) + +// HorizontalPodAutoscalerInformer provides access to a shared informer and lister for +// HorizontalPodAutoscalers. +type HorizontalPodAutoscalerInformer interface { + Informer() cache.SharedIndexInformer + Lister() v2beta1.HorizontalPodAutoscalerLister +} + +type horizontalPodAutoscalerInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredHorizontalPodAutoscalerInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).Watch(options) + }, + }, + &autoscalingv2beta1.HorizontalPodAutoscaler{}, + resyncPeriod, + indexers, + ) +} + +func (f *horizontalPodAutoscalerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredHorizontalPodAutoscalerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *horizontalPodAutoscalerInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&autoscalingv2beta1.HorizontalPodAutoscaler{}, f.defaultInformer) +} + +func (f *horizontalPodAutoscalerInformer) Lister() v2beta1.HorizontalPodAutoscalerLister { + return v2beta1.NewHorizontalPodAutoscalerLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go new file mode 100644 index 00000000000..ff5d44b09d6 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v2beta1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer. + HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer. +func (v *version) HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer { + return &horizontalPodAutoscalerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/coordination/BUILD b/vendor/k8s.io/client-go/informers/coordination/BUILD new file mode 100644 index 00000000000..51e67990781 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["interface.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/coordination", + importpath = "k8s.io/client-go/informers/coordination", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/client-go/informers/coordination/v1:go_default_library", + "//staging/src/k8s.io/client-go/informers/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/informers/coordination/v1:all-srcs", + "//staging/src/k8s.io/client-go/informers/coordination/v1beta1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/coordination/interface.go b/vendor/k8s.io/client-go/informers/coordination/interface.go new file mode 100644 index 00000000000..54cfd7b9f26 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/interface.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package coordination + +import ( + v1 "k8s.io/client-go/informers/coordination/v1" + v1beta1 "k8s.io/client-go/informers/coordination/v1beta1" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface + // V1beta1 provides access to shared informers for resources in V1beta1. + V1beta1() v1beta1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} + +// V1beta1 returns a new v1beta1.Interface. +func (g *group) V1beta1() v1beta1.Interface { + return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/BUILD b/vendor/k8s.io/client-go/informers/coordination/v1/BUILD new file mode 100644 index 00000000000..d4c2ea57860 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/coordination/v1", + importpath = "k8s.io/client-go/informers/coordination/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/coordination/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1/interface.go new file mode 100644 index 00000000000..05c4acbef8b --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Leases returns a LeaseInformer. + Leases() LeaseInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Leases returns a LeaseInformer. +func (v *version) Leases() LeaseInformer { + return &leaseInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1/lease.go new file mode 100644 index 00000000000..b8a3de471c9 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1/lease.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + time "time" + + coordinationv1 "k8s.io/api/coordination/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1 "k8s.io/client-go/listers/coordination/v1" + cache "k8s.io/client-go/tools/cache" +) + +// LeaseInformer provides access to a shared informer and lister for +// Leases. +type LeaseInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.LeaseLister +} + +type leaseInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewLeaseInformer constructs a new informer for Lease type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredLeaseInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredLeaseInformer constructs a new informer for Lease type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoordinationV1().Leases(namespace).List(options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoordinationV1().Leases(namespace).Watch(options) + }, + }, + &coordinationv1.Lease{}, + resyncPeriod, + indexers, + ) +} + +func (f *leaseInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredLeaseInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *leaseInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&coordinationv1.Lease{}, f.defaultInformer) +} + +func (f *leaseInformer) Lister() v1.LeaseLister { + return v1.NewLeaseLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/coordination/v1beta1/BUILD new file mode 100644 index 00000000000..22d27614f10 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/coordination/v1beta1", + importpath = "k8s.io/client-go/informers/coordination/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go new file mode 100644 index 00000000000..360266206cf --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Leases returns a LeaseInformer. + Leases() LeaseInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Leases returns a LeaseInformer. +func (v *version) Leases() LeaseInformer { + return &leaseInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go new file mode 100644 index 00000000000..bb59be13e12 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/coordination/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// LeaseInformer provides access to a shared informer and lister for +// Leases. +type LeaseInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.LeaseLister +} + +type leaseInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewLeaseInformer constructs a new informer for Lease type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredLeaseInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredLeaseInformer constructs a new informer for Lease type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoordinationV1beta1().Leases(namespace).List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoordinationV1beta1().Leases(namespace).Watch(options) + }, + }, + &coordinationv1beta1.Lease{}, + resyncPeriod, + indexers, + ) +} + +func (f *leaseInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredLeaseInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *leaseInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&coordinationv1beta1.Lease{}, f.defaultInformer) +} + +func (f *leaseInformer) Lister() v1beta1.LeaseLister { + return v1beta1.NewLeaseLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/factory.go b/vendor/k8s.io/client-go/informers/factory.go index e3528d31cbc..029600916b1 100644 --- a/vendor/k8s.io/client-go/informers/factory.go +++ b/vendor/k8s.io/client-go/informers/factory.go @@ -31,10 +31,12 @@ import ( autoscaling "k8s.io/client-go/informers/autoscaling" batch "k8s.io/client-go/informers/batch" certificates "k8s.io/client-go/informers/certificates" + coordination "k8s.io/client-go/informers/coordination" core "k8s.io/client-go/informers/core" extensions "k8s.io/client-go/informers/extensions" internalinterfaces "k8s.io/client-go/informers/internalinterfaces" networking "k8s.io/client-go/informers/networking" + node "k8s.io/client-go/informers/node" policy "k8s.io/client-go/informers/policy" rbac "k8s.io/client-go/informers/rbac" scheduling "k8s.io/client-go/informers/scheduling" @@ -188,9 +190,11 @@ type SharedInformerFactory interface { Autoscaling() autoscaling.Interface Batch() batch.Interface Certificates() certificates.Interface + Coordination() coordination.Interface Core() core.Interface Extensions() extensions.Interface Networking() networking.Interface + Node() node.Interface Policy() policy.Interface Rbac() rbac.Interface Scheduling() scheduling.Interface @@ -217,6 +221,10 @@ func (f *sharedInformerFactory) Certificates() certificates.Interface { return certificates.New(f, f.namespace, f.tweakListOptions) } +func (f *sharedInformerFactory) Coordination() coordination.Interface { + return coordination.New(f, f.namespace, f.tweakListOptions) +} + func (f *sharedInformerFactory) Core() core.Interface { return core.New(f, f.namespace, f.tweakListOptions) } @@ -229,6 +237,10 @@ func (f *sharedInformerFactory) Networking() networking.Interface { return networking.New(f, f.namespace, f.tweakListOptions) } +func (f *sharedInformerFactory) Node() node.Interface { + return node.New(f, f.namespace, f.tweakListOptions) +} + func (f *sharedInformerFactory) Policy() policy.Interface { return policy.New(f, f.namespace, f.tweakListOptions) } diff --git a/vendor/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/client-go/informers/generic.go index cc3c4d83ff8..5685e7de750 100644 --- a/vendor/k8s.io/client-go/informers/generic.go +++ b/vendor/k8s.io/client-go/informers/generic.go @@ -26,17 +26,24 @@ import ( appsv1beta1 "k8s.io/api/apps/v1beta1" v1beta2 "k8s.io/api/apps/v1beta2" autoscalingv1 "k8s.io/api/autoscaling/v1" + v2beta1 "k8s.io/api/autoscaling/v2beta1" v2beta2 "k8s.io/api/autoscaling/v2beta2" batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" v2alpha1 "k8s.io/api/batch/v2alpha1" certificatesv1beta1 "k8s.io/api/certificates/v1beta1" + coordinationv1 "k8s.io/api/coordination/v1" + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" corev1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" networkingv1 "k8s.io/api/networking/v1" + networkingv1beta1 "k8s.io/api/networking/v1beta1" + v1alpha1 "k8s.io/api/node/v1alpha1" + nodev1beta1 "k8s.io/api/node/v1beta1" policyv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" rbacv1beta1 "k8s.io/api/rbac/v1beta1" + schedulingv1 "k8s.io/api/scheduling/v1" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" storagev1 "k8s.io/api/storage/v1" storagev1beta1 "k8s.io/api/storage/v1beta1" @@ -112,6 +119,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case autoscalingv1.SchemeGroupVersion.WithResource("horizontalpodautoscalers"): return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V1().HorizontalPodAutoscalers().Informer()}, nil + // Group=autoscaling, Version=v2beta1 + case v2beta1.SchemeGroupVersion.WithResource("horizontalpodautoscalers"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V2beta1().HorizontalPodAutoscalers().Informer()}, nil + // Group=autoscaling, Version=v2beta2 case v2beta2.SchemeGroupVersion.WithResource("horizontalpodautoscalers"): return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V2beta2().HorizontalPodAutoscalers().Informer()}, nil @@ -132,6 +143,14 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case certificatesv1beta1.SchemeGroupVersion.WithResource("certificatesigningrequests"): return &genericInformer{resource: resource.GroupResource(), informer: f.Certificates().V1beta1().CertificateSigningRequests().Informer()}, nil + // Group=coordination.k8s.io, Version=v1 + case coordinationv1.SchemeGroupVersion.WithResource("leases"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1().Leases().Informer()}, nil + + // Group=coordination.k8s.io, Version=v1beta1 + case coordinationv1beta1.SchemeGroupVersion.WithResource("leases"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1beta1().Leases().Informer()}, nil + // Group=core, Version=v1 case corev1.SchemeGroupVersion.WithResource("componentstatuses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ComponentStatuses().Informer()}, nil @@ -182,6 +201,18 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case networkingv1.SchemeGroupVersion.WithResource("networkpolicies"): return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().NetworkPolicies().Informer()}, nil + // Group=networking.k8s.io, Version=v1beta1 + case networkingv1beta1.SchemeGroupVersion.WithResource("ingresses"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1beta1().Ingresses().Informer()}, nil + + // Group=node.k8s.io, Version=v1alpha1 + case v1alpha1.SchemeGroupVersion.WithResource("runtimeclasses"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Node().V1alpha1().RuntimeClasses().Informer()}, nil + + // Group=node.k8s.io, Version=v1beta1 + case nodev1beta1.SchemeGroupVersion.WithResource("runtimeclasses"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Node().V1beta1().RuntimeClasses().Informer()}, nil + // Group=policy, Version=v1beta1 case policyv1beta1.SchemeGroupVersion.WithResource("poddisruptionbudgets"): return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodDisruptionBudgets().Informer()}, nil @@ -208,6 +239,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case rbacv1beta1.SchemeGroupVersion.WithResource("rolebindings"): return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1beta1().RoleBindings().Informer()}, nil + // Group=scheduling.k8s.io, Version=v1 + case schedulingv1.SchemeGroupVersion.WithResource("priorityclasses"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Scheduling().V1().PriorityClasses().Informer()}, nil + // Group=scheduling.k8s.io, Version=v1beta1 case schedulingv1beta1.SchemeGroupVersion.WithResource("priorityclasses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Scheduling().V1beta1().PriorityClasses().Informer()}, nil @@ -219,6 +254,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().VolumeAttachments().Informer()}, nil // Group=storage.k8s.io, Version=v1beta1 + case storagev1beta1.SchemeGroupVersion.WithResource("csidrivers"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().CSIDrivers().Informer()}, nil + case storagev1beta1.SchemeGroupVersion.WithResource("csinodes"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().CSINodes().Informer()}, nil case storagev1beta1.SchemeGroupVersion.WithResource("storageclasses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().StorageClasses().Informer()}, nil case storagev1beta1.SchemeGroupVersion.WithResource("volumeattachments"): diff --git a/vendor/k8s.io/client-go/informers/networking/BUILD b/vendor/k8s.io/client-go/informers/networking/BUILD index 719db0c0619..5c4ba64d567 100644 --- a/vendor/k8s.io/client-go/informers/networking/BUILD +++ b/vendor/k8s.io/client-go/informers/networking/BUILD @@ -13,6 +13,7 @@ go_library( deps = [ "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", "//staging/src/k8s.io/client-go/informers/networking/v1:go_default_library", + "//staging/src/k8s.io/client-go/informers/networking/v1beta1:go_default_library", ], ) @@ -28,6 +29,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/client-go/informers/networking/v1:all-srcs", + "//staging/src/k8s.io/client-go/informers/networking/v1beta1:all-srcs", ], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/client-go/informers/networking/interface.go b/vendor/k8s.io/client-go/informers/networking/interface.go index 989e8fa0fe5..4a028d5d10e 100644 --- a/vendor/k8s.io/client-go/informers/networking/interface.go +++ b/vendor/k8s.io/client-go/informers/networking/interface.go @@ -21,12 +21,15 @@ package networking import ( internalinterfaces "k8s.io/client-go/informers/internalinterfaces" v1 "k8s.io/client-go/informers/networking/v1" + v1beta1 "k8s.io/client-go/informers/networking/v1beta1" ) // Interface provides access to each of this group's versions. type Interface interface { // V1 provides access to shared informers for resources in V1. V1() v1.Interface + // V1beta1 provides access to shared informers for resources in V1beta1. + V1beta1() v1beta1.Interface } type group struct { @@ -44,3 +47,8 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList func (g *group) V1() v1.Interface { return v1.New(g.factory, g.namespace, g.tweakListOptions) } + +// V1beta1 returns a new v1beta1.Interface. +func (g *group) V1beta1() v1beta1.Interface { + return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/networking/v1beta1/BUILD new file mode 100644 index 00000000000..2486558e7fc --- /dev/null +++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "ingress.go", + "interface.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/networking/v1beta1", + importpath = "k8s.io/client-go/informers/networking/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go new file mode 100644 index 00000000000..8abd00e17b0 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + networkingv1beta1 "k8s.io/api/networking/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/networking/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// IngressInformer provides access to a shared informer and lister for +// Ingresses. +type IngressInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.IngressLister +} + +type ingressInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewIngressInformer constructs a new informer for Ingress type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredIngressInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredIngressInformer constructs a new informer for Ingress type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkingV1beta1().Ingresses(namespace).List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkingV1beta1().Ingresses(namespace).Watch(options) + }, + }, + &networkingv1beta1.Ingress{}, + resyncPeriod, + indexers, + ) +} + +func (f *ingressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredIngressInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *ingressInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&networkingv1beta1.Ingress{}, f.defaultInformer) +} + +func (f *ingressInformer) Lister() v1beta1.IngressLister { + return v1beta1.NewIngressLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go new file mode 100644 index 00000000000..ab170dfc86c --- /dev/null +++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Ingresses returns a IngressInformer. + Ingresses() IngressInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Ingresses returns a IngressInformer. +func (v *version) Ingresses() IngressInformer { + return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/node/BUILD b/vendor/k8s.io/client-go/informers/node/BUILD new file mode 100644 index 00000000000..5fd140c6a26 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["interface.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/node", + importpath = "k8s.io/client-go/informers/node", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/informers/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/client-go/informers/node/v1beta1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/informers/node/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/informers/node/v1beta1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/node/interface.go b/vendor/k8s.io/client-go/informers/node/interface.go new file mode 100644 index 00000000000..97736937972 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/interface.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package node + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + v1alpha1 "k8s.io/client-go/informers/node/v1alpha1" + v1beta1 "k8s.io/client-go/informers/node/v1beta1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1alpha1 provides access to shared informers for resources in V1alpha1. + V1alpha1() v1alpha1.Interface + // V1beta1 provides access to shared informers for resources in V1beta1. + V1beta1() v1beta1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1alpha1 returns a new v1alpha1.Interface. +func (g *group) V1alpha1() v1alpha1.Interface { + return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions) +} + +// V1beta1 returns a new v1beta1.Interface. +func (g *group) V1beta1() v1beta1.Interface { + return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/BUILD b/vendor/k8s.io/client-go/informers/node/v1alpha1/BUILD new file mode 100644 index 00000000000..1b924aa429e --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1alpha1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/node/v1alpha1", + importpath = "k8s.io/client-go/informers/node/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go new file mode 100644 index 00000000000..c56442957e5 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // RuntimeClasses returns a RuntimeClassInformer. + RuntimeClasses() RuntimeClassInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// RuntimeClasses returns a RuntimeClassInformer. +func (v *version) RuntimeClasses() RuntimeClassInformer { + return &runtimeClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go new file mode 100644 index 00000000000..31edf930ae5 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go @@ -0,0 +1,88 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + time "time" + + nodev1alpha1 "k8s.io/api/node/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1alpha1 "k8s.io/client-go/listers/node/v1alpha1" + cache "k8s.io/client-go/tools/cache" +) + +// RuntimeClassInformer provides access to a shared informer and lister for +// RuntimeClasses. +type RuntimeClassInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1alpha1.RuntimeClassLister +} + +type runtimeClassInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewRuntimeClassInformer constructs a new informer for RuntimeClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRuntimeClassInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredRuntimeClassInformer constructs a new informer for RuntimeClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NodeV1alpha1().RuntimeClasses().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NodeV1alpha1().RuntimeClasses().Watch(options) + }, + }, + &nodev1alpha1.RuntimeClass{}, + resyncPeriod, + indexers, + ) +} + +func (f *runtimeClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRuntimeClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *runtimeClassInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&nodev1alpha1.RuntimeClass{}, f.defaultInformer) +} + +func (f *runtimeClassInformer) Lister() v1alpha1.RuntimeClassLister { + return v1alpha1.NewRuntimeClassLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/node/v1beta1/BUILD new file mode 100644 index 00000000000..754127aa4db --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1beta1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/node/v1beta1", + importpath = "k8s.io/client-go/informers/node/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/node/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go new file mode 100644 index 00000000000..44a1defb6b7 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // RuntimeClasses returns a RuntimeClassInformer. + RuntimeClasses() RuntimeClassInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// RuntimeClasses returns a RuntimeClassInformer. +func (v *version) RuntimeClasses() RuntimeClassInformer { + return &runtimeClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go new file mode 100644 index 00000000000..6972993ad8f --- /dev/null +++ b/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go @@ -0,0 +1,88 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + nodev1beta1 "k8s.io/api/node/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/node/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// RuntimeClassInformer provides access to a shared informer and lister for +// RuntimeClasses. +type RuntimeClassInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.RuntimeClassLister +} + +type runtimeClassInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewRuntimeClassInformer constructs a new informer for RuntimeClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRuntimeClassInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredRuntimeClassInformer constructs a new informer for RuntimeClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NodeV1beta1().RuntimeClasses().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NodeV1beta1().RuntimeClasses().Watch(options) + }, + }, + &nodev1beta1.RuntimeClass{}, + resyncPeriod, + indexers, + ) +} + +func (f *runtimeClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRuntimeClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *runtimeClassInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&nodev1beta1.RuntimeClass{}, f.defaultInformer) +} + +func (f *runtimeClassInformer) Lister() v1beta1.RuntimeClassLister { + return v1beta1.NewRuntimeClassLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/scheduling/BUILD b/vendor/k8s.io/client-go/informers/scheduling/BUILD index 9695dc4359d..309a12a5da8 100644 --- a/vendor/k8s.io/client-go/informers/scheduling/BUILD +++ b/vendor/k8s.io/client-go/informers/scheduling/BUILD @@ -12,6 +12,7 @@ go_library( importpath = "k8s.io/client-go/informers/scheduling", deps = [ "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/informers/scheduling/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/client-go/informers/scheduling/v1beta1:go_default_library", ], @@ -28,6 +29,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//staging/src/k8s.io/client-go/informers/scheduling/v1:all-srcs", "//staging/src/k8s.io/client-go/informers/scheduling/v1alpha1:all-srcs", "//staging/src/k8s.io/client-go/informers/scheduling/v1beta1:all-srcs", ], diff --git a/vendor/k8s.io/client-go/informers/scheduling/interface.go b/vendor/k8s.io/client-go/informers/scheduling/interface.go index 64c6a73fc72..a9c7d26f9ff 100644 --- a/vendor/k8s.io/client-go/informers/scheduling/interface.go +++ b/vendor/k8s.io/client-go/informers/scheduling/interface.go @@ -20,11 +20,14 @@ package scheduling import ( internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + v1 "k8s.io/client-go/informers/scheduling/v1" v1beta1 "k8s.io/client-go/informers/scheduling/v1beta1" ) // Interface provides access to each of this group's versions. type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface // V1beta1 provides access to shared informers for resources in V1beta1. V1beta1() v1beta1.Interface } @@ -40,6 +43,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} } +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} + // V1beta1 returns a new v1beta1.Interface. func (g *group) V1beta1() v1beta1.Interface { return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/BUILD b/vendor/k8s.io/client-go/informers/scheduling/v1/BUILD new file mode 100644 index 00000000000..3b34304af7a --- /dev/null +++ b/vendor/k8s.io/client-go/informers/scheduling/v1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "priorityclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/informers/scheduling/v1", + importpath = "k8s.io/client-go/informers/scheduling/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/informers/internalinterfaces:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/scheduling/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go new file mode 100644 index 00000000000..fd7931f34ab --- /dev/null +++ b/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // PriorityClasses returns a PriorityClassInformer. + PriorityClasses() PriorityClassInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// PriorityClasses returns a PriorityClassInformer. +func (v *version) PriorityClasses() PriorityClassInformer { + return &priorityClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go new file mode 100644 index 00000000000..a9ee6289e47 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go @@ -0,0 +1,88 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + time "time" + + schedulingv1 "k8s.io/api/scheduling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1 "k8s.io/client-go/listers/scheduling/v1" + cache "k8s.io/client-go/tools/cache" +) + +// PriorityClassInformer provides access to a shared informer and lister for +// PriorityClasses. +type PriorityClassInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.PriorityClassLister +} + +type priorityClassInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewPriorityClassInformer constructs a new informer for PriorityClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredPriorityClassInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredPriorityClassInformer constructs a new informer for PriorityClass type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SchedulingV1().PriorityClasses().List(options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SchedulingV1().PriorityClasses().Watch(options) + }, + }, + &schedulingv1.PriorityClass{}, + resyncPeriod, + indexers, + ) +} + +func (f *priorityClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredPriorityClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *priorityClassInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&schedulingv1.PriorityClass{}, f.defaultInformer) +} + +func (f *priorityClassInformer) Lister() v1.PriorityClassLister { + return v1.NewPriorityClassLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD index 72df0590035..3a7f30cec20 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD @@ -8,6 +8,8 @@ load( go_library( name = "go_default_library", srcs = [ + "csidriver.go", + "csinode.go", "interface.go", "storageclass.go", "volumeattachment.go", diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go new file mode 100644 index 00000000000..7f7cb216df0 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go @@ -0,0 +1,88 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + storagev1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/storage/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// CSIDriverInformer provides access to a shared informer and lister for +// CSIDrivers. +type CSIDriverInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.CSIDriverLister +} + +type cSIDriverInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewCSIDriverInformer constructs a new informer for CSIDriver type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredCSIDriverInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredCSIDriverInformer constructs a new informer for CSIDriver type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().CSIDrivers().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().CSIDrivers().Watch(options) + }, + }, + &storagev1beta1.CSIDriver{}, + resyncPeriod, + indexers, + ) +} + +func (f *cSIDriverInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredCSIDriverInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *cSIDriverInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&storagev1beta1.CSIDriver{}, f.defaultInformer) +} + +func (f *cSIDriverInformer) Lister() v1beta1.CSIDriverLister { + return v1beta1.NewCSIDriverLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go new file mode 100644 index 00000000000..218bb118314 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go @@ -0,0 +1,88 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + storagev1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/storage/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// CSINodeInformer provides access to a shared informer and lister for +// CSINodes. +type CSINodeInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.CSINodeLister +} + +type cSINodeInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewCSINodeInformer constructs a new informer for CSINode type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredCSINodeInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredCSINodeInformer constructs a new informer for CSINode type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().CSINodes().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().CSINodes().Watch(options) + }, + }, + &storagev1beta1.CSINode{}, + resyncPeriod, + indexers, + ) +} + +func (f *cSINodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredCSINodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *cSINodeInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&storagev1beta1.CSINode{}, f.defaultInformer) +} + +func (f *cSINodeInformer) Lister() v1beta1.CSINodeLister { + return v1beta1.NewCSINodeLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go index aa11c2bb6d0..af4ee2f74a1 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go @@ -24,6 +24,10 @@ import ( // Interface provides access to all the informers in this group version. type Interface interface { + // CSIDrivers returns a CSIDriverInformer. + CSIDrivers() CSIDriverInformer + // CSINodes returns a CSINodeInformer. + CSINodes() CSINodeInformer // StorageClasses returns a StorageClassInformer. StorageClasses() StorageClassInformer // VolumeAttachments returns a VolumeAttachmentInformer. @@ -41,6 +45,16 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} } +// CSIDrivers returns a CSIDriverInformer. +func (v *version) CSIDrivers() CSIDriverInformer { + return &cSIDriverInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// CSINodes returns a CSINodeInformer. +func (v *version) CSINodes() CSINodeInformer { + return &cSINodeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + // StorageClasses returns a StorageClassInformer. func (v *version) StorageClasses() StorageClassInformer { return &storageClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} diff --git a/vendor/k8s.io/client-go/kubernetes/BUILD b/vendor/k8s.io/client-go/kubernetes/BUILD index da4639ae342..81541d4d494 100644 --- a/vendor/k8s.io/client-go/kubernetes/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/BUILD @@ -12,7 +12,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/client-go/discovery:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1:go_default_library", @@ -29,15 +28,20 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/networking/v1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/settings/v1alpha1:go_default_library", @@ -62,7 +66,6 @@ filegroup( ":package-srcs", "//staging/src/k8s.io/client-go/kubernetes/fake:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/scheme:all-srcs", - "//staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1:all-srcs", @@ -79,15 +82,20 @@ filegroup( "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/networking/v1:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1:all-srcs", "//staging/src/k8s.io/client-go/kubernetes/typed/settings/v1alpha1:all-srcs", diff --git a/vendor/k8s.io/client-go/kubernetes/clientset.go b/vendor/k8s.io/client-go/kubernetes/clientset.go index 0712938e1b2..80bdc7986a1 100644 --- a/vendor/k8s.io/client-go/kubernetes/clientset.go +++ b/vendor/k8s.io/client-go/kubernetes/clientset.go @@ -27,17 +27,24 @@ import ( authenticationv1 "k8s.io/client-go/kubernetes/typed/authentication/v1" authorizationv1 "k8s.io/client-go/kubernetes/typed/authorization/v1" autoscalingv1 "k8s.io/client-go/kubernetes/typed/autoscaling/v1" + autoscalingv2beta1 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1" autoscalingv2beta2 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2" batchv1 "k8s.io/client-go/kubernetes/typed/batch/v1" batchv1beta1 "k8s.io/client-go/kubernetes/typed/batch/v1beta1" batchv2alpha1 "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" certificatesv1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" + coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1" + coordinationv1beta1 "k8s.io/client-go/kubernetes/typed/coordination/v1beta1" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" networkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1" + networkingv1beta1 "k8s.io/client-go/kubernetes/typed/networking/v1beta1" + nodev1alpha1 "k8s.io/client-go/kubernetes/typed/node/v1alpha1" + nodev1beta1 "k8s.io/client-go/kubernetes/typed/node/v1beta1" policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" rbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1" rbacv1beta1 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" + schedulingv1 "k8s.io/client-go/kubernetes/typed/scheduling/v1" schedulingv1beta1 "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1" storagev1 "k8s.io/client-go/kubernetes/typed/storage/v1" storagev1beta1 "k8s.io/client-go/kubernetes/typed/storage/v1beta1" @@ -48,54 +55,33 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface AdmissionregistrationV1beta1() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Admissionregistration() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface + AppsV1() appsv1.AppsV1Interface AppsV1beta1() appsv1beta1.AppsV1beta1Interface AppsV1beta2() appsv1beta2.AppsV1beta2Interface - AppsV1() appsv1.AppsV1Interface - // Deprecated: please explicitly pick a version if possible. - Apps() appsv1.AppsV1Interface AuthenticationV1() authenticationv1.AuthenticationV1Interface - // Deprecated: please explicitly pick a version if possible. - Authentication() authenticationv1.AuthenticationV1Interface AuthorizationV1() authorizationv1.AuthorizationV1Interface - // Deprecated: please explicitly pick a version if possible. - Authorization() authorizationv1.AuthorizationV1Interface AutoscalingV1() autoscalingv1.AutoscalingV1Interface - // Deprecated: please explicitly pick a version if possible. - Autoscaling() autoscalingv1.AutoscalingV1Interface + AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface AutoscalingV2beta2() autoscalingv2beta2.AutoscalingV2beta2Interface BatchV1() batchv1.BatchV1Interface - // Deprecated: please explicitly pick a version if possible. - Batch() batchv1.BatchV1Interface BatchV1beta1() batchv1beta1.BatchV1beta1Interface BatchV2alpha1() batchv2alpha1.BatchV2alpha1Interface CertificatesV1beta1() certificatesv1beta1.CertificatesV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Certificates() certificatesv1beta1.CertificatesV1beta1Interface + CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface + CoordinationV1() coordinationv1.CoordinationV1Interface CoreV1() corev1.CoreV1Interface - // Deprecated: please explicitly pick a version if possible. - Core() corev1.CoreV1Interface ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Extensions() extensionsv1beta1.ExtensionsV1beta1Interface NetworkingV1() networkingv1.NetworkingV1Interface - // Deprecated: please explicitly pick a version if possible. - Networking() networkingv1.NetworkingV1Interface + NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface + NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface + NodeV1beta1() nodev1beta1.NodeV1beta1Interface PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Policy() policyv1beta1.PolicyV1beta1Interface RbacV1() rbacv1.RbacV1Interface - // Deprecated: please explicitly pick a version if possible. - Rbac() rbacv1.RbacV1Interface RbacV1beta1() rbacv1beta1.RbacV1beta1Interface SchedulingV1beta1() schedulingv1beta1.SchedulingV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Scheduling() schedulingv1beta1.SchedulingV1beta1Interface + SchedulingV1() schedulingv1.SchedulingV1Interface StorageV1beta1() storagev1beta1.StorageV1beta1Interface StorageV1() storagev1.StorageV1Interface - // Deprecated: please explicitly pick a version if possible. - Storage() storagev1.StorageV1Interface } // Clientset contains the clients for groups. Each group has exactly one @@ -103,24 +89,31 @@ type Interface interface { type Clientset struct { *discovery.DiscoveryClient admissionregistrationV1beta1 *admissionregistrationv1beta1.AdmissionregistrationV1beta1Client + appsV1 *appsv1.AppsV1Client appsV1beta1 *appsv1beta1.AppsV1beta1Client appsV1beta2 *appsv1beta2.AppsV1beta2Client - appsV1 *appsv1.AppsV1Client authenticationV1 *authenticationv1.AuthenticationV1Client authorizationV1 *authorizationv1.AuthorizationV1Client autoscalingV1 *autoscalingv1.AutoscalingV1Client + autoscalingV2beta1 *autoscalingv2beta1.AutoscalingV2beta1Client autoscalingV2beta2 *autoscalingv2beta2.AutoscalingV2beta2Client batchV1 *batchv1.BatchV1Client batchV1beta1 *batchv1beta1.BatchV1beta1Client batchV2alpha1 *batchv2alpha1.BatchV2alpha1Client certificatesV1beta1 *certificatesv1beta1.CertificatesV1beta1Client + coordinationV1beta1 *coordinationv1beta1.CoordinationV1beta1Client + coordinationV1 *coordinationv1.CoordinationV1Client coreV1 *corev1.CoreV1Client extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client networkingV1 *networkingv1.NetworkingV1Client + networkingV1beta1 *networkingv1beta1.NetworkingV1beta1Client + nodeV1alpha1 *nodev1alpha1.NodeV1alpha1Client + nodeV1beta1 *nodev1beta1.NodeV1beta1Client policyV1beta1 *policyv1beta1.PolicyV1beta1Client rbacV1 *rbacv1.RbacV1Client rbacV1beta1 *rbacv1beta1.RbacV1beta1Client schedulingV1beta1 *schedulingv1beta1.SchedulingV1beta1Client + schedulingV1 *schedulingv1.SchedulingV1Client storageV1beta1 *storagev1beta1.StorageV1beta1Client storageV1 *storagev1.StorageV1Client } @@ -130,10 +123,9 @@ func (c *Clientset) AdmissionregistrationV1beta1() admissionregistrationv1beta1. return c.admissionregistrationV1beta1 } -// Deprecated: Admissionregistration retrieves the default version of AdmissionregistrationClient. -// Please explicitly pick a version. -func (c *Clientset) Admissionregistration() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface { - return c.admissionregistrationV1beta1 +// AppsV1 retrieves the AppsV1Client +func (c *Clientset) AppsV1() appsv1.AppsV1Interface { + return c.appsV1 } // AppsV1beta1 retrieves the AppsV1beta1Client @@ -146,48 +138,24 @@ func (c *Clientset) AppsV1beta2() appsv1beta2.AppsV1beta2Interface { return c.appsV1beta2 } -// AppsV1 retrieves the AppsV1Client -func (c *Clientset) AppsV1() appsv1.AppsV1Interface { - return c.appsV1 -} - -// Deprecated: Apps retrieves the default version of AppsClient. -// Please explicitly pick a version. -func (c *Clientset) Apps() appsv1.AppsV1Interface { - return c.appsV1 -} - // AuthenticationV1 retrieves the AuthenticationV1Client func (c *Clientset) AuthenticationV1() authenticationv1.AuthenticationV1Interface { return c.authenticationV1 } -// Deprecated: Authentication retrieves the default version of AuthenticationClient. -// Please explicitly pick a version. -func (c *Clientset) Authentication() authenticationv1.AuthenticationV1Interface { - return c.authenticationV1 -} - // AuthorizationV1 retrieves the AuthorizationV1Client func (c *Clientset) AuthorizationV1() authorizationv1.AuthorizationV1Interface { return c.authorizationV1 } -// Deprecated: Authorization retrieves the default version of AuthorizationClient. -// Please explicitly pick a version. -func (c *Clientset) Authorization() authorizationv1.AuthorizationV1Interface { - return c.authorizationV1 -} - // AutoscalingV1 retrieves the AutoscalingV1Client func (c *Clientset) AutoscalingV1() autoscalingv1.AutoscalingV1Interface { return c.autoscalingV1 } -// Deprecated: Autoscaling retrieves the default version of AutoscalingClient. -// Please explicitly pick a version. -func (c *Clientset) Autoscaling() autoscalingv1.AutoscalingV1Interface { - return c.autoscalingV1 +// AutoscalingV2beta1 retrieves the AutoscalingV2beta1Client +func (c *Clientset) AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface { + return c.autoscalingV2beta1 } // AutoscalingV2beta2 retrieves the AutoscalingV2beta2Client @@ -200,12 +168,6 @@ func (c *Clientset) BatchV1() batchv1.BatchV1Interface { return c.batchV1 } -// Deprecated: Batch retrieves the default version of BatchClient. -// Please explicitly pick a version. -func (c *Clientset) Batch() batchv1.BatchV1Interface { - return c.batchV1 -} - // BatchV1beta1 retrieves the BatchV1beta1Client func (c *Clientset) BatchV1beta1() batchv1beta1.BatchV1beta1Interface { return c.batchV1beta1 @@ -221,10 +183,14 @@ func (c *Clientset) CertificatesV1beta1() certificatesv1beta1.CertificatesV1beta return c.certificatesV1beta1 } -// Deprecated: Certificates retrieves the default version of CertificatesClient. -// Please explicitly pick a version. -func (c *Clientset) Certificates() certificatesv1beta1.CertificatesV1beta1Interface { - return c.certificatesV1beta1 +// CoordinationV1beta1 retrieves the CoordinationV1beta1Client +func (c *Clientset) CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface { + return c.coordinationV1beta1 +} + +// CoordinationV1 retrieves the CoordinationV1Client +func (c *Clientset) CoordinationV1() coordinationv1.CoordinationV1Interface { + return c.coordinationV1 } // CoreV1 retrieves the CoreV1Client @@ -232,32 +198,29 @@ func (c *Clientset) CoreV1() corev1.CoreV1Interface { return c.coreV1 } -// Deprecated: Core retrieves the default version of CoreClient. -// Please explicitly pick a version. -func (c *Clientset) Core() corev1.CoreV1Interface { - return c.coreV1 -} - // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface { return c.extensionsV1beta1 } -// Deprecated: Extensions retrieves the default version of ExtensionsClient. -// Please explicitly pick a version. -func (c *Clientset) Extensions() extensionsv1beta1.ExtensionsV1beta1Interface { - return c.extensionsV1beta1 -} - // NetworkingV1 retrieves the NetworkingV1Client func (c *Clientset) NetworkingV1() networkingv1.NetworkingV1Interface { return c.networkingV1 } -// Deprecated: Networking retrieves the default version of NetworkingClient. -// Please explicitly pick a version. -func (c *Clientset) Networking() networkingv1.NetworkingV1Interface { - return c.networkingV1 +// NetworkingV1beta1 retrieves the NetworkingV1beta1Client +func (c *Clientset) NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface { + return c.networkingV1beta1 +} + +// NodeV1alpha1 retrieves the NodeV1alpha1Client +func (c *Clientset) NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface { + return c.nodeV1alpha1 +} + +// NodeV1beta1 retrieves the NodeV1beta1Client +func (c *Clientset) NodeV1beta1() nodev1beta1.NodeV1beta1Interface { + return c.nodeV1beta1 } // PolicyV1beta1 retrieves the PolicyV1beta1Client @@ -265,23 +228,11 @@ func (c *Clientset) PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface { return c.policyV1beta1 } -// Deprecated: Policy retrieves the default version of PolicyClient. -// Please explicitly pick a version. -func (c *Clientset) Policy() policyv1beta1.PolicyV1beta1Interface { - return c.policyV1beta1 -} - // RbacV1 retrieves the RbacV1Client func (c *Clientset) RbacV1() rbacv1.RbacV1Interface { return c.rbacV1 } -// Deprecated: Rbac retrieves the default version of RbacClient. -// Please explicitly pick a version. -func (c *Clientset) Rbac() rbacv1.RbacV1Interface { - return c.rbacV1 -} - // RbacV1beta1 retrieves the RbacV1beta1Client func (c *Clientset) RbacV1beta1() rbacv1beta1.RbacV1beta1Interface { return c.rbacV1beta1 @@ -292,10 +243,9 @@ func (c *Clientset) SchedulingV1beta1() schedulingv1beta1.SchedulingV1beta1Inter return c.schedulingV1beta1 } -// Deprecated: Scheduling retrieves the default version of SchedulingClient. -// Please explicitly pick a version. -func (c *Clientset) Scheduling() schedulingv1beta1.SchedulingV1beta1Interface { - return c.schedulingV1beta1 +// SchedulingV1 retrieves the SchedulingV1Client +func (c *Clientset) SchedulingV1() schedulingv1.SchedulingV1Interface { + return c.schedulingV1 } // StorageV1beta1 retrieves the StorageV1beta1Client @@ -308,12 +258,6 @@ func (c *Clientset) StorageV1() storagev1.StorageV1Interface { return c.storageV1 } -// Deprecated: Storage retrieves the default version of StorageClient. -// Please explicitly pick a version. -func (c *Clientset) Storage() storagev1.StorageV1Interface { - return c.storageV1 -} - // Discovery retrieves the DiscoveryClient func (c *Clientset) Discovery() discovery.DiscoveryInterface { if c == nil { @@ -334,6 +278,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.appsV1beta1, err = appsv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -342,10 +290,6 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } - cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) - if err != nil { - return nil, err - } cs.authenticationV1, err = authenticationv1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -358,6 +302,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.autoscalingV2beta1, err = autoscalingv2beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.autoscalingV2beta2, err = autoscalingv2beta2.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -378,6 +326,14 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.coordinationV1beta1, err = coordinationv1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.coordinationV1, err = coordinationv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.coreV1, err = corev1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -390,6 +346,18 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.networkingV1beta1, err = networkingv1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.nodeV1alpha1, err = nodev1alpha1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.nodeV1beta1, err = nodev1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.policyV1beta1, err = policyv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -406,6 +374,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.schedulingV1, err = schedulingv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.storageV1beta1, err = storagev1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -427,24 +399,31 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { func NewForConfigOrDie(c *rest.Config) *Clientset { var cs Clientset cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.NewForConfigOrDie(c) + cs.appsV1 = appsv1.NewForConfigOrDie(c) cs.appsV1beta1 = appsv1beta1.NewForConfigOrDie(c) cs.appsV1beta2 = appsv1beta2.NewForConfigOrDie(c) - cs.appsV1 = appsv1.NewForConfigOrDie(c) cs.authenticationV1 = authenticationv1.NewForConfigOrDie(c) cs.authorizationV1 = authorizationv1.NewForConfigOrDie(c) cs.autoscalingV1 = autoscalingv1.NewForConfigOrDie(c) + cs.autoscalingV2beta1 = autoscalingv2beta1.NewForConfigOrDie(c) cs.autoscalingV2beta2 = autoscalingv2beta2.NewForConfigOrDie(c) cs.batchV1 = batchv1.NewForConfigOrDie(c) cs.batchV1beta1 = batchv1beta1.NewForConfigOrDie(c) cs.batchV2alpha1 = batchv2alpha1.NewForConfigOrDie(c) cs.certificatesV1beta1 = certificatesv1beta1.NewForConfigOrDie(c) + cs.coordinationV1beta1 = coordinationv1beta1.NewForConfigOrDie(c) + cs.coordinationV1 = coordinationv1.NewForConfigOrDie(c) cs.coreV1 = corev1.NewForConfigOrDie(c) cs.extensionsV1beta1 = extensionsv1beta1.NewForConfigOrDie(c) cs.networkingV1 = networkingv1.NewForConfigOrDie(c) + cs.networkingV1beta1 = networkingv1beta1.NewForConfigOrDie(c) + cs.nodeV1alpha1 = nodev1alpha1.NewForConfigOrDie(c) + cs.nodeV1beta1 = nodev1beta1.NewForConfigOrDie(c) cs.policyV1beta1 = policyv1beta1.NewForConfigOrDie(c) cs.rbacV1 = rbacv1.NewForConfigOrDie(c) cs.rbacV1beta1 = rbacv1beta1.NewForConfigOrDie(c) cs.schedulingV1beta1 = schedulingv1beta1.NewForConfigOrDie(c) + cs.schedulingV1 = schedulingv1.NewForConfigOrDie(c) cs.storageV1beta1 = storagev1beta1.NewForConfigOrDie(c) cs.storageV1 = storagev1.NewForConfigOrDie(c) @@ -456,24 +435,31 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { func New(c rest.Interface) *Clientset { var cs Clientset cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.New(c) + cs.appsV1 = appsv1.New(c) cs.appsV1beta1 = appsv1beta1.New(c) cs.appsV1beta2 = appsv1beta2.New(c) - cs.appsV1 = appsv1.New(c) cs.authenticationV1 = authenticationv1.New(c) cs.authorizationV1 = authorizationv1.New(c) cs.autoscalingV1 = autoscalingv1.New(c) + cs.autoscalingV2beta1 = autoscalingv2beta1.New(c) cs.autoscalingV2beta2 = autoscalingv2beta2.New(c) cs.batchV1 = batchv1.New(c) cs.batchV1beta1 = batchv1beta1.New(c) cs.batchV2alpha1 = batchv2alpha1.New(c) cs.certificatesV1beta1 = certificatesv1beta1.New(c) + cs.coordinationV1beta1 = coordinationv1beta1.New(c) + cs.coordinationV1 = coordinationv1.New(c) cs.coreV1 = corev1.New(c) cs.extensionsV1beta1 = extensionsv1beta1.New(c) cs.networkingV1 = networkingv1.New(c) + cs.networkingV1beta1 = networkingv1beta1.New(c) + cs.nodeV1alpha1 = nodev1alpha1.New(c) + cs.nodeV1beta1 = nodev1beta1.New(c) cs.policyV1beta1 = policyv1beta1.New(c) cs.rbacV1 = rbacv1.New(c) cs.rbacV1beta1 = rbacv1beta1.New(c) cs.schedulingV1beta1 = schedulingv1beta1.New(c) + cs.schedulingV1 = schedulingv1.New(c) cs.storageV1beta1 = storagev1beta1.New(c) cs.storageV1 = storagev1.New(c) diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/BUILD b/vendor/k8s.io/client-go/kubernetes/scheme/BUILD index e36fdd99ea6..a80263d30d3 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/scheme/BUILD @@ -10,7 +10,6 @@ go_library( importpath = "k8s.io/client-go/kubernetes/scheme", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", @@ -27,15 +26,20 @@ go_library( "//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/events/v1beta1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/networking/v1:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/api/settings/v1alpha1:go_default_library", diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/vendor/k8s.io/client-go/kubernetes/scheme/register.go index 5f775026a0a..82d07b6898d 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/register.go +++ b/vendor/k8s.io/client-go/kubernetes/scheme/register.go @@ -26,17 +26,24 @@ import ( authenticationv1 "k8s.io/api/authentication/v1" authorizationv1 "k8s.io/api/authorization/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" batchv2alpha1 "k8s.io/api/batch/v2alpha1" certificatesv1beta1 "k8s.io/api/certificates/v1beta1" + coordinationv1 "k8s.io/api/coordination/v1" + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" corev1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" networkingv1 "k8s.io/api/networking/v1" + networkingv1beta1 "k8s.io/api/networking/v1beta1" + nodev1alpha1 "k8s.io/api/node/v1alpha1" + nodev1beta1 "k8s.io/api/node/v1beta1" policyv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" rbacv1beta1 "k8s.io/api/rbac/v1beta1" + schedulingv1 "k8s.io/api/scheduling/v1" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" storagev1 "k8s.io/api/storage/v1" storagev1beta1 "k8s.io/api/storage/v1beta1" @@ -52,24 +59,31 @@ var Codecs = serializer.NewCodecFactory(Scheme) var ParameterCodec = runtime.NewParameterCodec(Scheme) var localSchemeBuilder = runtime.SchemeBuilder{ admissionregistrationv1beta1.AddToScheme, + appsv1.AddToScheme, appsv1beta1.AddToScheme, appsv1beta2.AddToScheme, - appsv1.AddToScheme, authenticationv1.AddToScheme, authorizationv1.AddToScheme, autoscalingv1.AddToScheme, + autoscalingv2beta1.AddToScheme, autoscalingv2beta2.AddToScheme, batchv1.AddToScheme, batchv1beta1.AddToScheme, batchv2alpha1.AddToScheme, certificatesv1beta1.AddToScheme, + coordinationv1beta1.AddToScheme, + coordinationv1.AddToScheme, corev1.AddToScheme, extensionsv1beta1.AddToScheme, networkingv1.AddToScheme, + networkingv1beta1.AddToScheme, + nodev1alpha1.AddToScheme, + nodev1beta1.AddToScheme, policyv1beta1.AddToScheme, rbacv1.AddToScheme, rbacv1beta1.AddToScheme, schedulingv1beta1.AddToScheme, + schedulingv1.AddToScheme, storagev1beta1.AddToScheme, storagev1.AddToScheme, } diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/OWNERS b/vendor/k8s.io/client-go/kubernetes/typed/authentication/OWNERS index c607d2aa8c5..3e05d309be5 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/OWNERS +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/OWNERS b/vendor/k8s.io/client-go/kubernetes/typed/authorization/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/OWNERS +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/BUILD similarity index 62% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/BUILD rename to vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/BUILD index fb4d6f9038a..44def4ff28c 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/BUILD @@ -3,23 +3,22 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = [ - "csi_client.go", - "csidriver.go", - "csinodeinfo.go", + "autoscaling_client.go", "doc.go", "generated_expansion.go", + "horizontalpodautoscaler.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1", - importpath = "k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1", + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", + importpath = "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", visibility = ["//visibility:public"], deps = [ + "//staging/src/k8s.io/api/autoscaling/v2beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/scheme:go_default_library", ], ) @@ -34,7 +33,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/fake:all-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake:all-srcs", ], tags = ["automanaged"], visibility = ["//visibility:public"], diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go new file mode 100644 index 00000000000..3a49b26b322 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta1 + +import ( + v2beta1 "k8s.io/api/autoscaling/v2beta1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type AutoscalingV2beta1Interface interface { + RESTClient() rest.Interface + HorizontalPodAutoscalersGetter +} + +// AutoscalingV2beta1Client is used to interact with features provided by the autoscaling group. +type AutoscalingV2beta1Client struct { + restClient rest.Interface +} + +func (c *AutoscalingV2beta1Client) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface { + return newHorizontalPodAutoscalers(c, namespace) +} + +// NewForConfig creates a new AutoscalingV2beta1Client for the given config. +func NewForConfig(c *rest.Config) (*AutoscalingV2beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AutoscalingV2beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new AutoscalingV2beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AutoscalingV2beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AutoscalingV2beta1Client for the given RESTClient. +func New(c rest.Interface) *AutoscalingV2beta1Client { + return &AutoscalingV2beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v2beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AutoscalingV2beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go similarity index 86% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/doc.go rename to vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go index 7dc3756168f..06fd344c010 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go @@ -16,5 +16,5 @@ limitations under the License. // Code generated by client-gen. DO NOT EDIT. -// This package contains the scheme of the automatically generated clientset. -package scheme +// This package has the automatically generated typed clients. +package v2beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go new file mode 100644 index 00000000000..6f1704f1ee6 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta1 + +type HorizontalPodAutoscalerExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go new file mode 100644 index 00000000000..02d5cfb9b60 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -0,0 +1,191 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta1 + +import ( + "time" + + v2beta1 "k8s.io/api/autoscaling/v2beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// HorizontalPodAutoscalersGetter has a method to return a HorizontalPodAutoscalerInterface. +// A group's client should implement this interface. +type HorizontalPodAutoscalersGetter interface { + HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface +} + +// HorizontalPodAutoscalerInterface has methods to work with HorizontalPodAutoscaler resources. +type HorizontalPodAutoscalerInterface interface { + Create(*v2beta1.HorizontalPodAutoscaler) (*v2beta1.HorizontalPodAutoscaler, error) + Update(*v2beta1.HorizontalPodAutoscaler) (*v2beta1.HorizontalPodAutoscaler, error) + UpdateStatus(*v2beta1.HorizontalPodAutoscaler) (*v2beta1.HorizontalPodAutoscaler, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v2beta1.HorizontalPodAutoscaler, error) + List(opts v1.ListOptions) (*v2beta1.HorizontalPodAutoscalerList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2beta1.HorizontalPodAutoscaler, err error) + HorizontalPodAutoscalerExpansion +} + +// horizontalPodAutoscalers implements HorizontalPodAutoscalerInterface +type horizontalPodAutoscalers struct { + client rest.Interface + ns string +} + +// newHorizontalPodAutoscalers returns a HorizontalPodAutoscalers +func newHorizontalPodAutoscalers(c *AutoscalingV2beta1Client, namespace string) *horizontalPodAutoscalers { + return &horizontalPodAutoscalers{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the horizontalPodAutoscaler, and returns the corresponding horizontalPodAutoscaler object, and an error if there is any. +func (c *horizontalPodAutoscalers) Get(name string, options v1.GetOptions) (result *v2beta1.HorizontalPodAutoscaler, err error) { + result = &v2beta1.HorizontalPodAutoscaler{} + err = c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of HorizontalPodAutoscalers that match those selectors. +func (c *horizontalPodAutoscalers) List(opts v1.ListOptions) (result *v2beta1.HorizontalPodAutoscalerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v2beta1.HorizontalPodAutoscalerList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested horizontalPodAutoscalers. +func (c *horizontalPodAutoscalers) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a horizontalPodAutoscaler and creates it. Returns the server's representation of the horizontalPodAutoscaler, and an error, if there is any. +func (c *horizontalPodAutoscalers) Create(horizontalPodAutoscaler *v2beta1.HorizontalPodAutoscaler) (result *v2beta1.HorizontalPodAutoscaler, err error) { + result = &v2beta1.HorizontalPodAutoscaler{} + err = c.client.Post(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// Update takes the representation of a horizontalPodAutoscaler and updates it. Returns the server's representation of the horizontalPodAutoscaler, and an error, if there is any. +func (c *horizontalPodAutoscalers) Update(horizontalPodAutoscaler *v2beta1.HorizontalPodAutoscaler) (result *v2beta1.HorizontalPodAutoscaler, err error) { + result = &v2beta1.HorizontalPodAutoscaler{} + err = c.client.Put(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(horizontalPodAutoscaler.Name). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *horizontalPodAutoscalers) UpdateStatus(horizontalPodAutoscaler *v2beta1.HorizontalPodAutoscaler) (result *v2beta1.HorizontalPodAutoscaler, err error) { + result = &v2beta1.HorizontalPodAutoscaler{} + err = c.client.Put(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(horizontalPodAutoscaler.Name). + SubResource("status"). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// Delete takes name of the horizontalPodAutoscaler and deletes it. Returns an error if one occurs. +func (c *horizontalPodAutoscalers) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *horizontalPodAutoscalers) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched horizontalPodAutoscaler. +func (c *horizontalPodAutoscalers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2beta1.HorizontalPodAutoscaler, err error) { + result = &v2beta1.HorizontalPodAutoscaler{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/BUILD new file mode 100644 index 00000000000..1dd901ab4fc --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "coordination_client.go", + "doc.go", + "generated_expansion.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1", + importpath = "k8s.io/client-go/kubernetes/typed/coordination/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go new file mode 100644 index 00000000000..9b566f3106e --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/coordination/v1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type CoordinationV1Interface interface { + RESTClient() rest.Interface + LeasesGetter +} + +// CoordinationV1Client is used to interact with features provided by the coordination.k8s.io group. +type CoordinationV1Client struct { + restClient rest.Interface +} + +func (c *CoordinationV1Client) Leases(namespace string) LeaseInterface { + return newLeases(c, namespace) +} + +// NewForConfig creates a new CoordinationV1Client for the given config. +func NewForConfig(c *rest.Config) (*CoordinationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CoordinationV1Client{client}, nil +} + +// NewForConfigOrDie creates a new CoordinationV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *CoordinationV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CoordinationV1Client for the given RESTClient. +func New(c rest.Interface) *CoordinationV1Client { + return &CoordinationV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CoordinationV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go similarity index 88% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/doc.go rename to vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go index 41721ca52d4..3af5d054f10 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go @@ -16,5 +16,5 @@ limitations under the License. // Code generated by client-gen. DO NOT EDIT. -// This package has the automatically generated clientset. -package versioned +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go new file mode 100644 index 00000000000..ab24f3734ed --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type LeaseExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go new file mode 100644 index 00000000000..b6cf1b64f65 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/coordination/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// LeasesGetter has a method to return a LeaseInterface. +// A group's client should implement this interface. +type LeasesGetter interface { + Leases(namespace string) LeaseInterface +} + +// LeaseInterface has methods to work with Lease resources. +type LeaseInterface interface { + Create(*v1.Lease) (*v1.Lease, error) + Update(*v1.Lease) (*v1.Lease, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Lease, error) + List(opts metav1.ListOptions) (*v1.LeaseList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Lease, err error) + LeaseExpansion +} + +// leases implements LeaseInterface +type leases struct { + client rest.Interface + ns string +} + +// newLeases returns a Leases +func newLeases(c *CoordinationV1Client, namespace string) *leases { + return &leases{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the lease, and returns the corresponding lease object, and an error if there is any. +func (c *leases) Get(name string, options metav1.GetOptions) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Leases that match those selectors. +func (c *leases) List(opts metav1.ListOptions) (result *v1.LeaseList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.LeaseList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested leases. +func (c *leases) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a lease and creates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Create(lease *v1.Lease) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Post(). + Namespace(c.ns). + Resource("leases"). + Body(lease). + Do(). + Into(result) + return +} + +// Update takes the representation of a lease and updates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Update(lease *v1.Lease) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Put(). + Namespace(c.ns). + Resource("leases"). + Name(lease.Name). + Body(lease). + Do(). + Into(result) + return +} + +// Delete takes name of the lease and deletes it. Returns an error if one occurs. +func (c *leases) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *leases) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched lease. +func (c *leases) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("leases"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/BUILD new file mode 100644 index 00000000000..0dd7f096b47 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "coordination_client.go", + "doc.go", + "generated_expansion.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1", + importpath = "k8s.io/client-go/kubernetes/typed/coordination/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go new file mode 100644 index 00000000000..91a764843e8 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/coordination/v1beta1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type CoordinationV1beta1Interface interface { + RESTClient() rest.Interface + LeasesGetter +} + +// CoordinationV1beta1Client is used to interact with features provided by the coordination.k8s.io group. +type CoordinationV1beta1Client struct { + restClient rest.Interface +} + +func (c *CoordinationV1beta1Client) Leases(namespace string) LeaseInterface { + return newLeases(c, namespace) +} + +// NewForConfig creates a new CoordinationV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*CoordinationV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CoordinationV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new CoordinationV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *CoordinationV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CoordinationV1beta1Client for the given RESTClient. +func New(c rest.Interface) *CoordinationV1beta1Client { + return &CoordinationV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CoordinationV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go new file mode 100644 index 00000000000..771101956f3 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go new file mode 100644 index 00000000000..dfd180daf34 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type LeaseExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go new file mode 100644 index 00000000000..490d815aa63 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/coordination/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// LeasesGetter has a method to return a LeaseInterface. +// A group's client should implement this interface. +type LeasesGetter interface { + Leases(namespace string) LeaseInterface +} + +// LeaseInterface has methods to work with Lease resources. +type LeaseInterface interface { + Create(*v1beta1.Lease) (*v1beta1.Lease, error) + Update(*v1beta1.Lease) (*v1beta1.Lease, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.Lease, error) + List(opts v1.ListOptions) (*v1beta1.LeaseList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Lease, err error) + LeaseExpansion +} + +// leases implements LeaseInterface +type leases struct { + client rest.Interface + ns string +} + +// newLeases returns a Leases +func newLeases(c *CoordinationV1beta1Client, namespace string) *leases { + return &leases{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the lease, and returns the corresponding lease object, and an error if there is any. +func (c *leases) Get(name string, options v1.GetOptions) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Leases that match those selectors. +func (c *leases) List(opts v1.ListOptions) (result *v1beta1.LeaseList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.LeaseList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested leases. +func (c *leases) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a lease and creates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Create(lease *v1beta1.Lease) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Post(). + Namespace(c.ns). + Resource("leases"). + Body(lease). + Do(). + Into(result) + return +} + +// Update takes the representation of a lease and updates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Update(lease *v1beta1.Lease) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Put(). + Namespace(c.ns). + Resource("leases"). + Name(lease.Name). + Body(lease). + Do(). + Into(result) + return +} + +// Delete takes name of the lease and deletes it. Returns an error if one occurs. +func (c *leases) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *leases) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched lease. +func (c *leases) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("leases"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/BUILD new file mode 100644 index 00000000000..3501791aef6 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated_expansion.go", + "ingress.go", + "networking_client.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1", + importpath = "k8s.io/client-go/kubernetes/typed/networking/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go new file mode 100644 index 00000000000..771101956f3 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go new file mode 100644 index 00000000000..1442649b376 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type IngressExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go new file mode 100644 index 00000000000..8d76678f166 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go @@ -0,0 +1,191 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/networking/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// IngressesGetter has a method to return a IngressInterface. +// A group's client should implement this interface. +type IngressesGetter interface { + Ingresses(namespace string) IngressInterface +} + +// IngressInterface has methods to work with Ingress resources. +type IngressInterface interface { + Create(*v1beta1.Ingress) (*v1beta1.Ingress, error) + Update(*v1beta1.Ingress) (*v1beta1.Ingress, error) + UpdateStatus(*v1beta1.Ingress) (*v1beta1.Ingress, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.Ingress, error) + List(opts v1.ListOptions) (*v1beta1.IngressList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Ingress, err error) + IngressExpansion +} + +// ingresses implements IngressInterface +type ingresses struct { + client rest.Interface + ns string +} + +// newIngresses returns a Ingresses +func newIngresses(c *NetworkingV1beta1Client, namespace string) *ingresses { + return &ingresses{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. +func (c *ingresses) Get(name string, options v1.GetOptions) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Ingresses that match those selectors. +func (c *ingresses) List(opts v1.ListOptions) (result *v1beta1.IngressList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.IngressList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested ingresses. +func (c *ingresses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Create(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Post(). + Namespace(c.ns). + Resource("ingresses"). + Body(ingress). + Do(). + Into(result) + return +} + +// Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Update(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + Body(ingress). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *ingresses) UpdateStatus(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + SubResource("status"). + Body(ingress). + Do(). + Into(result) + return +} + +// Delete takes name of the ingress and deletes it. Returns an error if one occurs. +func (c *ingresses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *ingresses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched ingress. +func (c *ingresses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("ingresses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go new file mode 100644 index 00000000000..541bf6a9a16 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/networking/v1beta1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type NetworkingV1beta1Interface interface { + RESTClient() rest.Interface + IngressesGetter +} + +// NetworkingV1beta1Client is used to interact with features provided by the networking.k8s.io group. +type NetworkingV1beta1Client struct { + restClient rest.Interface +} + +func (c *NetworkingV1beta1Client) Ingresses(namespace string) IngressInterface { + return newIngresses(c, namespace) +} + +// NewForConfig creates a new NetworkingV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*NetworkingV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NetworkingV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new NetworkingV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NetworkingV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NetworkingV1beta1Client for the given RESTClient. +func New(c rest.Interface) *NetworkingV1beta1Client { + return &NetworkingV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NetworkingV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/BUILD new file mode 100644 index 00000000000..6382fca484e --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated_expansion.go", + "node_client.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1", + importpath = "k8s.io/client-go/kubernetes/typed/node/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go similarity index 100% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/doc.go rename to vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go similarity index 89% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/generated_expansion.go rename to vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go index efa8eeda126..fcef31d1695 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go @@ -18,6 +18,4 @@ limitations under the License. package v1alpha1 -type CSIDriverExpansion interface{} - -type CSINodeInfoExpansion interface{} +type RuntimeClassExpansion interface{} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csi_client.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go similarity index 61% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csi_client.go rename to vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go index dcda8c23e32..863f2d4dc1d 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csi_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go @@ -19,33 +19,28 @@ limitations under the License. package v1alpha1 import ( + v1alpha1 "k8s.io/api/node/v1alpha1" serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" - v1alpha1 "k8s.io/csi-api/pkg/apis/csi/v1alpha1" - "k8s.io/csi-api/pkg/client/clientset/versioned/scheme" ) -type CsiV1alpha1Interface interface { +type NodeV1alpha1Interface interface { RESTClient() rest.Interface - CSIDriversGetter - CSINodeInfosGetter + RuntimeClassesGetter } -// CsiV1alpha1Client is used to interact with features provided by the csi.storage.k8s.io group. -type CsiV1alpha1Client struct { +// NodeV1alpha1Client is used to interact with features provided by the node.k8s.io group. +type NodeV1alpha1Client struct { restClient rest.Interface } -func (c *CsiV1alpha1Client) CSIDrivers() CSIDriverInterface { - return newCSIDrivers(c) +func (c *NodeV1alpha1Client) RuntimeClasses() RuntimeClassInterface { + return newRuntimeClasses(c) } -func (c *CsiV1alpha1Client) CSINodeInfos() CSINodeInfoInterface { - return newCSINodeInfos(c) -} - -// NewForConfig creates a new CsiV1alpha1Client for the given config. -func NewForConfig(c *rest.Config) (*CsiV1alpha1Client, error) { +// NewForConfig creates a new NodeV1alpha1Client for the given config. +func NewForConfig(c *rest.Config) (*NodeV1alpha1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err @@ -54,12 +49,12 @@ func NewForConfig(c *rest.Config) (*CsiV1alpha1Client, error) { if err != nil { return nil, err } - return &CsiV1alpha1Client{client}, nil + return &NodeV1alpha1Client{client}, nil } -// NewForConfigOrDie creates a new CsiV1alpha1Client for the given config and +// NewForConfigOrDie creates a new NodeV1alpha1Client for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *CsiV1alpha1Client { +func NewForConfigOrDie(c *rest.Config) *NodeV1alpha1Client { client, err := NewForConfig(c) if err != nil { panic(err) @@ -67,9 +62,9 @@ func NewForConfigOrDie(c *rest.Config) *CsiV1alpha1Client { return client } -// New creates a new CsiV1alpha1Client for the given RESTClient. -func New(c rest.Interface) *CsiV1alpha1Client { - return &CsiV1alpha1Client{c} +// New creates a new NodeV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *NodeV1alpha1Client { + return &NodeV1alpha1Client{c} } func setConfigDefaults(config *rest.Config) error { @@ -87,7 +82,7 @@ func setConfigDefaults(config *rest.Config) error { // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *CsiV1alpha1Client) RESTClient() rest.Interface { +func (c *NodeV1alpha1Client) RESTClient() rest.Interface { if c == nil { return nil } diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go new file mode 100644 index 00000000000..044460ec0b5 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "time" + + v1alpha1 "k8s.io/api/node/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// RuntimeClassesGetter has a method to return a RuntimeClassInterface. +// A group's client should implement this interface. +type RuntimeClassesGetter interface { + RuntimeClasses() RuntimeClassInterface +} + +// RuntimeClassInterface has methods to work with RuntimeClass resources. +type RuntimeClassInterface interface { + Create(*v1alpha1.RuntimeClass) (*v1alpha1.RuntimeClass, error) + Update(*v1alpha1.RuntimeClass) (*v1alpha1.RuntimeClass, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1alpha1.RuntimeClass, error) + List(opts v1.ListOptions) (*v1alpha1.RuntimeClassList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.RuntimeClass, err error) + RuntimeClassExpansion +} + +// runtimeClasses implements RuntimeClassInterface +type runtimeClasses struct { + client rest.Interface +} + +// newRuntimeClasses returns a RuntimeClasses +func newRuntimeClasses(c *NodeV1alpha1Client) *runtimeClasses { + return &runtimeClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the runtimeClass, and returns the corresponding runtimeClass object, and an error if there is any. +func (c *runtimeClasses) Get(name string, options v1.GetOptions) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Get(). + Resource("runtimeclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RuntimeClasses that match those selectors. +func (c *runtimeClasses) List(opts v1.ListOptions) (result *v1alpha1.RuntimeClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.RuntimeClassList{} + err = c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested runtimeClasses. +func (c *runtimeClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a runtimeClass and creates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Create(runtimeClass *v1alpha1.RuntimeClass) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Post(). + Resource("runtimeclasses"). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a runtimeClass and updates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Update(runtimeClass *v1alpha1.RuntimeClass) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Put(). + Resource("runtimeclasses"). + Name(runtimeClass.Name). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Delete takes name of the runtimeClass and deletes it. Returns an error if one occurs. +func (c *runtimeClasses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("runtimeclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *runtimeClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("runtimeclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched runtimeClass. +func (c *runtimeClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Patch(pt). + Resource("runtimeclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/BUILD new file mode 100644 index 00000000000..61ffbdfbe1a --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated_expansion.go", + "node_client.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1", + importpath = "k8s.io/client-go/kubernetes/typed/node/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go new file mode 100644 index 00000000000..771101956f3 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go new file mode 100644 index 00000000000..669dd0282ec --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type RuntimeClassExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go new file mode 100644 index 00000000000..52683e201cb --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/node/v1beta1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type NodeV1beta1Interface interface { + RESTClient() rest.Interface + RuntimeClassesGetter +} + +// NodeV1beta1Client is used to interact with features provided by the node.k8s.io group. +type NodeV1beta1Client struct { + restClient rest.Interface +} + +func (c *NodeV1beta1Client) RuntimeClasses() RuntimeClassInterface { + return newRuntimeClasses(c) +} + +// NewForConfig creates a new NodeV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*NodeV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NodeV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new NodeV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NodeV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NodeV1beta1Client for the given RESTClient. +func New(c rest.Interface) *NodeV1beta1Client { + return &NodeV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NodeV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go new file mode 100644 index 00000000000..b3f7c497fb1 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/node/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// RuntimeClassesGetter has a method to return a RuntimeClassInterface. +// A group's client should implement this interface. +type RuntimeClassesGetter interface { + RuntimeClasses() RuntimeClassInterface +} + +// RuntimeClassInterface has methods to work with RuntimeClass resources. +type RuntimeClassInterface interface { + Create(*v1beta1.RuntimeClass) (*v1beta1.RuntimeClass, error) + Update(*v1beta1.RuntimeClass) (*v1beta1.RuntimeClass, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.RuntimeClass, error) + List(opts v1.ListOptions) (*v1beta1.RuntimeClassList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.RuntimeClass, err error) + RuntimeClassExpansion +} + +// runtimeClasses implements RuntimeClassInterface +type runtimeClasses struct { + client rest.Interface +} + +// newRuntimeClasses returns a RuntimeClasses +func newRuntimeClasses(c *NodeV1beta1Client) *runtimeClasses { + return &runtimeClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the runtimeClass, and returns the corresponding runtimeClass object, and an error if there is any. +func (c *runtimeClasses) Get(name string, options v1.GetOptions) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Get(). + Resource("runtimeclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RuntimeClasses that match those selectors. +func (c *runtimeClasses) List(opts v1.ListOptions) (result *v1beta1.RuntimeClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.RuntimeClassList{} + err = c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested runtimeClasses. +func (c *runtimeClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a runtimeClass and creates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Create(runtimeClass *v1beta1.RuntimeClass) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Post(). + Resource("runtimeclasses"). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a runtimeClass and updates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Update(runtimeClass *v1beta1.RuntimeClass) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Put(). + Resource("runtimeclasses"). + Name(runtimeClass.Name). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Delete takes name of the runtimeClass and deletes it. Returns an error if one occurs. +func (c *runtimeClasses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("runtimeclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *runtimeClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("runtimeclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched runtimeClass. +func (c *runtimeClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Patch(pt). + Resource("runtimeclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/OWNERS b/vendor/k8s.io/client-go/kubernetes/typed/rbac/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/OWNERS +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/BUILD new file mode 100644 index 00000000000..503bf3f940f --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated_expansion.go", + "priorityclass.go", + "scheduling_client.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1", + importpath = "k8s.io/client-go/kubernetes/typed/scheduling/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go new file mode 100644 index 00000000000..3af5d054f10 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go new file mode 100644 index 00000000000..cc321329b93 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type PriorityClassExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go new file mode 100644 index 00000000000..3abbb7b8eb9 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/scheduling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// PriorityClassesGetter has a method to return a PriorityClassInterface. +// A group's client should implement this interface. +type PriorityClassesGetter interface { + PriorityClasses() PriorityClassInterface +} + +// PriorityClassInterface has methods to work with PriorityClass resources. +type PriorityClassInterface interface { + Create(*v1.PriorityClass) (*v1.PriorityClass, error) + Update(*v1.PriorityClass) (*v1.PriorityClass, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.PriorityClass, error) + List(opts metav1.ListOptions) (*v1.PriorityClassList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PriorityClass, err error) + PriorityClassExpansion +} + +// priorityClasses implements PriorityClassInterface +type priorityClasses struct { + client rest.Interface +} + +// newPriorityClasses returns a PriorityClasses +func newPriorityClasses(c *SchedulingV1Client) *priorityClasses { + return &priorityClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the priorityClass, and returns the corresponding priorityClass object, and an error if there is any. +func (c *priorityClasses) Get(name string, options metav1.GetOptions) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Get(). + Resource("priorityclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of PriorityClasses that match those selectors. +func (c *priorityClasses) List(opts metav1.ListOptions) (result *v1.PriorityClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.PriorityClassList{} + err = c.client.Get(). + Resource("priorityclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested priorityClasses. +func (c *priorityClasses) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("priorityclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a priorityClass and creates it. Returns the server's representation of the priorityClass, and an error, if there is any. +func (c *priorityClasses) Create(priorityClass *v1.PriorityClass) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Post(). + Resource("priorityclasses"). + Body(priorityClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a priorityClass and updates it. Returns the server's representation of the priorityClass, and an error, if there is any. +func (c *priorityClasses) Update(priorityClass *v1.PriorityClass) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Put(). + Resource("priorityclasses"). + Name(priorityClass.Name). + Body(priorityClass). + Do(). + Into(result) + return +} + +// Delete takes name of the priorityClass and deletes it. Returns an error if one occurs. +func (c *priorityClasses) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("priorityclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *priorityClasses) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("priorityclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched priorityClass. +func (c *priorityClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Patch(pt). + Resource("priorityclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go new file mode 100644 index 00000000000..bd7e1e54f29 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/scheduling/v1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type SchedulingV1Interface interface { + RESTClient() rest.Interface + PriorityClassesGetter +} + +// SchedulingV1Client is used to interact with features provided by the scheduling.k8s.io group. +type SchedulingV1Client struct { + restClient rest.Interface +} + +func (c *SchedulingV1Client) PriorityClasses() PriorityClassInterface { + return newPriorityClasses(c) +} + +// NewForConfig creates a new SchedulingV1Client for the given config. +func NewForConfig(c *rest.Config) (*SchedulingV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &SchedulingV1Client{client}, nil +} + +// NewForConfigOrDie creates a new SchedulingV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *SchedulingV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new SchedulingV1Client for the given RESTClient. +func New(c rest.Interface) *SchedulingV1Client { + return &SchedulingV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *SchedulingV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD index 425d2dc9255..c46c64a003f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD @@ -8,6 +8,8 @@ load( go_library( name = "go_default_library", srcs = [ + "csidriver.go", + "csinode.go", "doc.go", "generated_expansion.go", "storage_client.go", diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csidriver.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go similarity index 79% rename from vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csidriver.go rename to vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go index 72c93f6fadc..86cf9bf1807 100644 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csidriver.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go @@ -16,17 +16,17 @@ limitations under the License. // Code generated by client-gen. DO NOT EDIT. -package v1alpha1 +package v1beta1 import ( "time" + v1beta1 "k8s.io/api/storage/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" - v1alpha1 "k8s.io/csi-api/pkg/apis/csi/v1alpha1" - scheme "k8s.io/csi-api/pkg/client/clientset/versioned/scheme" ) // CSIDriversGetter has a method to return a CSIDriverInterface. @@ -37,14 +37,14 @@ type CSIDriversGetter interface { // CSIDriverInterface has methods to work with CSIDriver resources. type CSIDriverInterface interface { - Create(*v1alpha1.CSIDriver) (*v1alpha1.CSIDriver, error) - Update(*v1alpha1.CSIDriver) (*v1alpha1.CSIDriver, error) + Create(*v1beta1.CSIDriver) (*v1beta1.CSIDriver, error) + Update(*v1beta1.CSIDriver) (*v1beta1.CSIDriver, error) Delete(name string, options *v1.DeleteOptions) error DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1alpha1.CSIDriver, error) - List(opts v1.ListOptions) (*v1alpha1.CSIDriverList, error) + Get(name string, options v1.GetOptions) (*v1beta1.CSIDriver, error) + List(opts v1.ListOptions) (*v1beta1.CSIDriverList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CSIDriver, err error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSIDriver, err error) CSIDriverExpansion } @@ -54,15 +54,15 @@ type cSIDrivers struct { } // newCSIDrivers returns a CSIDrivers -func newCSIDrivers(c *CsiV1alpha1Client) *cSIDrivers { +func newCSIDrivers(c *StorageV1beta1Client) *cSIDrivers { return &cSIDrivers{ client: c.RESTClient(), } } // Get takes name of the cSIDriver, and returns the corresponding cSIDriver object, and an error if there is any. -func (c *cSIDrivers) Get(name string, options v1.GetOptions) (result *v1alpha1.CSIDriver, err error) { - result = &v1alpha1.CSIDriver{} +func (c *cSIDrivers) Get(name string, options v1.GetOptions) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} err = c.client.Get(). Resource("csidrivers"). Name(name). @@ -73,12 +73,12 @@ func (c *cSIDrivers) Get(name string, options v1.GetOptions) (result *v1alpha1.C } // List takes label and field selectors, and returns the list of CSIDrivers that match those selectors. -func (c *cSIDrivers) List(opts v1.ListOptions) (result *v1alpha1.CSIDriverList, err error) { +func (c *cSIDrivers) List(opts v1.ListOptions) (result *v1beta1.CSIDriverList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second } - result = &v1alpha1.CSIDriverList{} + result = &v1beta1.CSIDriverList{} err = c.client.Get(). Resource("csidrivers"). VersionedParams(&opts, scheme.ParameterCodec). @@ -103,8 +103,8 @@ func (c *cSIDrivers) Watch(opts v1.ListOptions) (watch.Interface, error) { } // Create takes the representation of a cSIDriver and creates it. Returns the server's representation of the cSIDriver, and an error, if there is any. -func (c *cSIDrivers) Create(cSIDriver *v1alpha1.CSIDriver) (result *v1alpha1.CSIDriver, err error) { - result = &v1alpha1.CSIDriver{} +func (c *cSIDrivers) Create(cSIDriver *v1beta1.CSIDriver) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} err = c.client.Post(). Resource("csidrivers"). Body(cSIDriver). @@ -114,8 +114,8 @@ func (c *cSIDrivers) Create(cSIDriver *v1alpha1.CSIDriver) (result *v1alpha1.CSI } // Update takes the representation of a cSIDriver and updates it. Returns the server's representation of the cSIDriver, and an error, if there is any. -func (c *cSIDrivers) Update(cSIDriver *v1alpha1.CSIDriver) (result *v1alpha1.CSIDriver, err error) { - result = &v1alpha1.CSIDriver{} +func (c *cSIDrivers) Update(cSIDriver *v1beta1.CSIDriver) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} err = c.client.Put(). Resource("csidrivers"). Name(cSIDriver.Name). @@ -151,8 +151,8 @@ func (c *cSIDrivers) DeleteCollection(options *v1.DeleteOptions, listOptions v1. } // Patch applies the patch and returns the patched cSIDriver. -func (c *cSIDrivers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CSIDriver, err error) { - result = &v1alpha1.CSIDriver{} +func (c *cSIDrivers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} err = c.client.Patch(pt). Resource("csidrivers"). SubResource(subresources...). diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go new file mode 100644 index 00000000000..e5540c1287d --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// CSINodesGetter has a method to return a CSINodeInterface. +// A group's client should implement this interface. +type CSINodesGetter interface { + CSINodes() CSINodeInterface +} + +// CSINodeInterface has methods to work with CSINode resources. +type CSINodeInterface interface { + Create(*v1beta1.CSINode) (*v1beta1.CSINode, error) + Update(*v1beta1.CSINode) (*v1beta1.CSINode, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.CSINode, error) + List(opts v1.ListOptions) (*v1beta1.CSINodeList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSINode, err error) + CSINodeExpansion +} + +// cSINodes implements CSINodeInterface +type cSINodes struct { + client rest.Interface +} + +// newCSINodes returns a CSINodes +func newCSINodes(c *StorageV1beta1Client) *cSINodes { + return &cSINodes{ + client: c.RESTClient(), + } +} + +// Get takes name of the cSINode, and returns the corresponding cSINode object, and an error if there is any. +func (c *cSINodes) Get(name string, options v1.GetOptions) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Get(). + Resource("csinodes"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CSINodes that match those selectors. +func (c *cSINodes) List(opts v1.ListOptions) (result *v1beta1.CSINodeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.CSINodeList{} + err = c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cSINodes. +func (c *cSINodes) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cSINode and creates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Create(cSINode *v1beta1.CSINode) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Post(). + Resource("csinodes"). + Body(cSINode). + Do(). + Into(result) + return +} + +// Update takes the representation of a cSINode and updates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Update(cSINode *v1beta1.CSINode) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Put(). + Resource("csinodes"). + Name(cSINode.Name). + Body(cSINode). + Do(). + Into(result) + return +} + +// Delete takes name of the cSINode and deletes it. Returns an error if one occurs. +func (c *cSINodes) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("csinodes"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cSINodes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("csinodes"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cSINode. +func (c *cSINodes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Patch(pt). + Resource("csinodes"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go index 559f88f6767..7ba93142bf6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go @@ -18,6 +18,10 @@ limitations under the License. package v1beta1 +type CSIDriverExpansion interface{} + +type CSINodeExpansion interface{} + type StorageClassExpansion interface{} type VolumeAttachmentExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go index 4bdebb8782d..e9916bc0aaa 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go @@ -27,6 +27,8 @@ import ( type StorageV1beta1Interface interface { RESTClient() rest.Interface + CSIDriversGetter + CSINodesGetter StorageClassesGetter VolumeAttachmentsGetter } @@ -36,6 +38,14 @@ type StorageV1beta1Client struct { restClient rest.Interface } +func (c *StorageV1beta1Client) CSIDrivers() CSIDriverInterface { + return newCSIDrivers(c) +} + +func (c *StorageV1beta1Client) CSINodes() CSINodeInterface { + return newCSINodes(c) +} + func (c *StorageV1beta1Client) StorageClasses() StorageClassInterface { return newStorageClasses(c) } diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/BUILD b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/BUILD new file mode 100644 index 00000000000..80d19292363 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "horizontalpodautoscaler.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/autoscaling/v2beta1", + importpath = "k8s.io/client-go/listers/autoscaling/v2beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/autoscaling/v2beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go new file mode 100644 index 00000000000..8d46a4b6e31 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v2beta1 + +// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to +// HorizontalPodAutoscalerLister. +type HorizontalPodAutoscalerListerExpansion interface{} + +// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to +// HorizontalPodAutoscalerNamespaceLister. +type HorizontalPodAutoscalerNamespaceListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go new file mode 100644 index 00000000000..08d13803ba4 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -0,0 +1,94 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v2beta1 + +import ( + v2beta1 "k8s.io/api/autoscaling/v2beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// HorizontalPodAutoscalerLister helps list HorizontalPodAutoscalers. +type HorizontalPodAutoscalerLister interface { + // List lists all HorizontalPodAutoscalers in the indexer. + List(selector labels.Selector) (ret []*v2beta1.HorizontalPodAutoscaler, err error) + // HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers. + HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister + HorizontalPodAutoscalerListerExpansion +} + +// horizontalPodAutoscalerLister implements the HorizontalPodAutoscalerLister interface. +type horizontalPodAutoscalerLister struct { + indexer cache.Indexer +} + +// NewHorizontalPodAutoscalerLister returns a new HorizontalPodAutoscalerLister. +func NewHorizontalPodAutoscalerLister(indexer cache.Indexer) HorizontalPodAutoscalerLister { + return &horizontalPodAutoscalerLister{indexer: indexer} +} + +// List lists all HorizontalPodAutoscalers in the indexer. +func (s *horizontalPodAutoscalerLister) List(selector labels.Selector) (ret []*v2beta1.HorizontalPodAutoscaler, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v2beta1.HorizontalPodAutoscaler)) + }) + return ret, err +} + +// HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers. +func (s *horizontalPodAutoscalerLister) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister { + return horizontalPodAutoscalerNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// HorizontalPodAutoscalerNamespaceLister helps list and get HorizontalPodAutoscalers. +type HorizontalPodAutoscalerNamespaceLister interface { + // List lists all HorizontalPodAutoscalers in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v2beta1.HorizontalPodAutoscaler, err error) + // Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name. + Get(name string) (*v2beta1.HorizontalPodAutoscaler, error) + HorizontalPodAutoscalerNamespaceListerExpansion +} + +// horizontalPodAutoscalerNamespaceLister implements the HorizontalPodAutoscalerNamespaceLister +// interface. +type horizontalPodAutoscalerNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all HorizontalPodAutoscalers in the indexer for a given namespace. +func (s horizontalPodAutoscalerNamespaceLister) List(selector labels.Selector) (ret []*v2beta1.HorizontalPodAutoscaler, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v2beta1.HorizontalPodAutoscaler)) + }) + return ret, err +} + +// Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name. +func (s horizontalPodAutoscalerNamespaceLister) Get(name string) (*v2beta1.HorizontalPodAutoscaler, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v2beta1.Resource("horizontalpodautoscaler"), name) + } + return obj.(*v2beta1.HorizontalPodAutoscaler), nil +} diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/BUILD b/vendor/k8s.io/client-go/listers/coordination/v1/BUILD new file mode 100644 index 00000000000..9507d35c441 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/coordination/v1", + importpath = "k8s.io/client-go/listers/coordination/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go new file mode 100644 index 00000000000..ddc494f1c36 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// LeaseListerExpansion allows custom methods to be added to +// LeaseLister. +type LeaseListerExpansion interface{} + +// LeaseNamespaceListerExpansion allows custom methods to be added to +// LeaseNamespaceLister. +type LeaseNamespaceListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1/lease.go new file mode 100644 index 00000000000..cc379088cb6 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1/lease.go @@ -0,0 +1,94 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/coordination/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// LeaseLister helps list Leases. +type LeaseLister interface { + // List lists all Leases in the indexer. + List(selector labels.Selector) (ret []*v1.Lease, err error) + // Leases returns an object that can list and get Leases. + Leases(namespace string) LeaseNamespaceLister + LeaseListerExpansion +} + +// leaseLister implements the LeaseLister interface. +type leaseLister struct { + indexer cache.Indexer +} + +// NewLeaseLister returns a new LeaseLister. +func NewLeaseLister(indexer cache.Indexer) LeaseLister { + return &leaseLister{indexer: indexer} +} + +// List lists all Leases in the indexer. +func (s *leaseLister) List(selector labels.Selector) (ret []*v1.Lease, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Lease)) + }) + return ret, err +} + +// Leases returns an object that can list and get Leases. +func (s *leaseLister) Leases(namespace string) LeaseNamespaceLister { + return leaseNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// LeaseNamespaceLister helps list and get Leases. +type LeaseNamespaceLister interface { + // List lists all Leases in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1.Lease, err error) + // Get retrieves the Lease from the indexer for a given namespace and name. + Get(name string) (*v1.Lease, error) + LeaseNamespaceListerExpansion +} + +// leaseNamespaceLister implements the LeaseNamespaceLister +// interface. +type leaseNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Leases in the indexer for a given namespace. +func (s leaseNamespaceLister) List(selector labels.Selector) (ret []*v1.Lease, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Lease)) + }) + return ret, err +} + +// Get retrieves the Lease from the indexer for a given namespace and name. +func (s leaseNamespaceLister) Get(name string) (*v1.Lease, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("lease"), name) + } + return obj.(*v1.Lease), nil +} diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/coordination/v1beta1/BUILD new file mode 100644 index 00000000000..da6d88d53e2 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "lease.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/coordination/v1beta1", + importpath = "k8s.io/client-go/listers/coordination/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go new file mode 100644 index 00000000000..dddc53107b0 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +// LeaseListerExpansion allows custom methods to be added to +// LeaseLister. +type LeaseListerExpansion interface{} + +// LeaseNamespaceListerExpansion allows custom methods to be added to +// LeaseNamespaceLister. +type LeaseNamespaceListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go new file mode 100644 index 00000000000..0027444dc64 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go @@ -0,0 +1,94 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/coordination/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// LeaseLister helps list Leases. +type LeaseLister interface { + // List lists all Leases in the indexer. + List(selector labels.Selector) (ret []*v1beta1.Lease, err error) + // Leases returns an object that can list and get Leases. + Leases(namespace string) LeaseNamespaceLister + LeaseListerExpansion +} + +// leaseLister implements the LeaseLister interface. +type leaseLister struct { + indexer cache.Indexer +} + +// NewLeaseLister returns a new LeaseLister. +func NewLeaseLister(indexer cache.Indexer) LeaseLister { + return &leaseLister{indexer: indexer} +} + +// List lists all Leases in the indexer. +func (s *leaseLister) List(selector labels.Selector) (ret []*v1beta1.Lease, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Lease)) + }) + return ret, err +} + +// Leases returns an object that can list and get Leases. +func (s *leaseLister) Leases(namespace string) LeaseNamespaceLister { + return leaseNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// LeaseNamespaceLister helps list and get Leases. +type LeaseNamespaceLister interface { + // List lists all Leases in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1beta1.Lease, err error) + // Get retrieves the Lease from the indexer for a given namespace and name. + Get(name string) (*v1beta1.Lease, error) + LeaseNamespaceListerExpansion +} + +// leaseNamespaceLister implements the LeaseNamespaceLister +// interface. +type leaseNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Leases in the indexer for a given namespace. +func (s leaseNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Lease, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Lease)) + }) + return ret, err +} + +// Get retrieves the Lease from the indexer for a given namespace and name. +func (s leaseNamespaceLister) Get(name string) (*v1beta1.Lease, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("lease"), name) + } + return obj.(*v1beta1.Lease), nil +} diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/networking/v1beta1/BUILD new file mode 100644 index 00000000000..e1e6985fe17 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "ingress.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/networking/v1beta1", + importpath = "k8s.io/client-go/listers/networking/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go new file mode 100644 index 00000000000..df6da06ebb7 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +// IngressListerExpansion allows custom methods to be added to +// IngressLister. +type IngressListerExpansion interface{} + +// IngressNamespaceListerExpansion allows custom methods to be added to +// IngressNamespaceLister. +type IngressNamespaceListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go new file mode 100644 index 00000000000..6676742e34b --- /dev/null +++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go @@ -0,0 +1,94 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/networking/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// IngressLister helps list Ingresses. +type IngressLister interface { + // List lists all Ingresses in the indexer. + List(selector labels.Selector) (ret []*v1beta1.Ingress, err error) + // Ingresses returns an object that can list and get Ingresses. + Ingresses(namespace string) IngressNamespaceLister + IngressListerExpansion +} + +// ingressLister implements the IngressLister interface. +type ingressLister struct { + indexer cache.Indexer +} + +// NewIngressLister returns a new IngressLister. +func NewIngressLister(indexer cache.Indexer) IngressLister { + return &ingressLister{indexer: indexer} +} + +// List lists all Ingresses in the indexer. +func (s *ingressLister) List(selector labels.Selector) (ret []*v1beta1.Ingress, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Ingress)) + }) + return ret, err +} + +// Ingresses returns an object that can list and get Ingresses. +func (s *ingressLister) Ingresses(namespace string) IngressNamespaceLister { + return ingressNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// IngressNamespaceLister helps list and get Ingresses. +type IngressNamespaceLister interface { + // List lists all Ingresses in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1beta1.Ingress, err error) + // Get retrieves the Ingress from the indexer for a given namespace and name. + Get(name string) (*v1beta1.Ingress, error) + IngressNamespaceListerExpansion +} + +// ingressNamespaceLister implements the IngressNamespaceLister +// interface. +type ingressNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Ingresses in the indexer for a given namespace. +func (s ingressNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Ingress, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Ingress)) + }) + return ret, err +} + +// Get retrieves the Ingress from the indexer for a given namespace and name. +func (s ingressNamespaceLister) Get(name string) (*v1beta1.Ingress, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("ingress"), name) + } + return obj.(*v1beta1.Ingress), nil +} diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/BUILD b/vendor/k8s.io/client-go/listers/node/v1alpha1/BUILD new file mode 100644 index 00000000000..1961002fc5d --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1alpha1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/node/v1alpha1", + importpath = "k8s.io/client-go/listers/node/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go new file mode 100644 index 00000000000..a65c208fac3 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go @@ -0,0 +1,23 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +// RuntimeClassListerExpansion allows custom methods to be added to +// RuntimeClassLister. +type RuntimeClassListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go new file mode 100644 index 00000000000..af3f02b9828 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go @@ -0,0 +1,65 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/node/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RuntimeClassLister helps list RuntimeClasses. +type RuntimeClassLister interface { + // List lists all RuntimeClasses in the indexer. + List(selector labels.Selector) (ret []*v1alpha1.RuntimeClass, err error) + // Get retrieves the RuntimeClass from the index for a given name. + Get(name string) (*v1alpha1.RuntimeClass, error) + RuntimeClassListerExpansion +} + +// runtimeClassLister implements the RuntimeClassLister interface. +type runtimeClassLister struct { + indexer cache.Indexer +} + +// NewRuntimeClassLister returns a new RuntimeClassLister. +func NewRuntimeClassLister(indexer cache.Indexer) RuntimeClassLister { + return &runtimeClassLister{indexer: indexer} +} + +// List lists all RuntimeClasses in the indexer. +func (s *runtimeClassLister) List(selector labels.Selector) (ret []*v1alpha1.RuntimeClass, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.RuntimeClass)) + }) + return ret, err +} + +// Get retrieves the RuntimeClass from the index for a given name. +func (s *runtimeClassLister) Get(name string) (*v1alpha1.RuntimeClass, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1alpha1.Resource("runtimeclass"), name) + } + return obj.(*v1alpha1.RuntimeClass), nil +} diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/node/v1beta1/BUILD new file mode 100644 index 00000000000..1fdca048597 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1beta1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "runtimeclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/node/v1beta1", + importpath = "k8s.io/client-go/listers/node/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go new file mode 100644 index 00000000000..a6744055ce4 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go @@ -0,0 +1,23 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +// RuntimeClassListerExpansion allows custom methods to be added to +// RuntimeClassLister. +type RuntimeClassListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go new file mode 100644 index 00000000000..be642b9990b --- /dev/null +++ b/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go @@ -0,0 +1,65 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/node/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RuntimeClassLister helps list RuntimeClasses. +type RuntimeClassLister interface { + // List lists all RuntimeClasses in the indexer. + List(selector labels.Selector) (ret []*v1beta1.RuntimeClass, err error) + // Get retrieves the RuntimeClass from the index for a given name. + Get(name string) (*v1beta1.RuntimeClass, error) + RuntimeClassListerExpansion +} + +// runtimeClassLister implements the RuntimeClassLister interface. +type runtimeClassLister struct { + indexer cache.Indexer +} + +// NewRuntimeClassLister returns a new RuntimeClassLister. +func NewRuntimeClassLister(indexer cache.Indexer) RuntimeClassLister { + return &runtimeClassLister{indexer: indexer} +} + +// List lists all RuntimeClasses in the indexer. +func (s *runtimeClassLister) List(selector labels.Selector) (ret []*v1beta1.RuntimeClass, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.RuntimeClass)) + }) + return ret, err +} + +// Get retrieves the RuntimeClass from the index for a given name. +func (s *runtimeClassLister) Get(name string) (*v1beta1.RuntimeClass, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("runtimeclass"), name) + } + return obj.(*v1beta1.RuntimeClass), nil +} diff --git a/vendor/k8s.io/client-go/listers/rbac/OWNERS b/vendor/k8s.io/client-go/listers/rbac/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/client-go/listers/rbac/OWNERS +++ b/vendor/k8s.io/client-go/listers/rbac/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/BUILD b/vendor/k8s.io/client-go/listers/scheduling/v1/BUILD new file mode 100644 index 00000000000..052e8386e8e --- /dev/null +++ b/vendor/k8s.io/client-go/listers/scheduling/v1/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "expansion_generated.go", + "priorityclass.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/listers/scheduling/v1", + importpath = "k8s.io/client-go/listers/scheduling/v1", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go new file mode 100644 index 00000000000..d0c45d01255 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go @@ -0,0 +1,23 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// PriorityClassListerExpansion allows custom methods to be added to +// PriorityClassLister. +type PriorityClassListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go new file mode 100644 index 00000000000..452fee591ed --- /dev/null +++ b/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go @@ -0,0 +1,65 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/scheduling/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// PriorityClassLister helps list PriorityClasses. +type PriorityClassLister interface { + // List lists all PriorityClasses in the indexer. + List(selector labels.Selector) (ret []*v1.PriorityClass, err error) + // Get retrieves the PriorityClass from the index for a given name. + Get(name string) (*v1.PriorityClass, error) + PriorityClassListerExpansion +} + +// priorityClassLister implements the PriorityClassLister interface. +type priorityClassLister struct { + indexer cache.Indexer +} + +// NewPriorityClassLister returns a new PriorityClassLister. +func NewPriorityClassLister(indexer cache.Indexer) PriorityClassLister { + return &priorityClassLister{indexer: indexer} +} + +// List lists all PriorityClasses in the indexer. +func (s *priorityClassLister) List(selector labels.Selector) (ret []*v1.PriorityClass, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.PriorityClass)) + }) + return ret, err +} + +// Get retrieves the PriorityClass from the index for a given name. +func (s *priorityClassLister) Get(name string) (*v1.PriorityClass, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("priorityclass"), name) + } + return obj.(*v1.PriorityClass), nil +} diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD index e38902fa3b8..8f22ec79395 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD @@ -8,6 +8,8 @@ load( go_library( name = "go_default_library", srcs = [ + "csidriver.go", + "csinode.go", "expansion_generated.go", "storageclass.go", "volumeattachment.go", diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go new file mode 100644 index 00000000000..8a401375067 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go @@ -0,0 +1,65 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// CSIDriverLister helps list CSIDrivers. +type CSIDriverLister interface { + // List lists all CSIDrivers in the indexer. + List(selector labels.Selector) (ret []*v1beta1.CSIDriver, err error) + // Get retrieves the CSIDriver from the index for a given name. + Get(name string) (*v1beta1.CSIDriver, error) + CSIDriverListerExpansion +} + +// cSIDriverLister implements the CSIDriverLister interface. +type cSIDriverLister struct { + indexer cache.Indexer +} + +// NewCSIDriverLister returns a new CSIDriverLister. +func NewCSIDriverLister(indexer cache.Indexer) CSIDriverLister { + return &cSIDriverLister{indexer: indexer} +} + +// List lists all CSIDrivers in the indexer. +func (s *cSIDriverLister) List(selector labels.Selector) (ret []*v1beta1.CSIDriver, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.CSIDriver)) + }) + return ret, err +} + +// Get retrieves the CSIDriver from the index for a given name. +func (s *cSIDriverLister) Get(name string) (*v1beta1.CSIDriver, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("csidriver"), name) + } + return obj.(*v1beta1.CSIDriver), nil +} diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go new file mode 100644 index 00000000000..bb7a2b2b3b9 --- /dev/null +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go @@ -0,0 +1,65 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// CSINodeLister helps list CSINodes. +type CSINodeLister interface { + // List lists all CSINodes in the indexer. + List(selector labels.Selector) (ret []*v1beta1.CSINode, err error) + // Get retrieves the CSINode from the index for a given name. + Get(name string) (*v1beta1.CSINode, error) + CSINodeListerExpansion +} + +// cSINodeLister implements the CSINodeLister interface. +type cSINodeLister struct { + indexer cache.Indexer +} + +// NewCSINodeLister returns a new CSINodeLister. +func NewCSINodeLister(indexer cache.Indexer) CSINodeLister { + return &cSINodeLister{indexer: indexer} +} + +// List lists all CSINodes in the indexer. +func (s *cSINodeLister) List(selector labels.Selector) (ret []*v1beta1.CSINode, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.CSINode)) + }) + return ret, err +} + +// Get retrieves the CSINode from the index for a given name. +func (s *cSINodeLister) Get(name string) (*v1beta1.CSINode, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("csinode"), name) + } + return obj.(*v1beta1.CSINode), nil +} diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go index 21d95620c1f..eeca4fdb40e 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go @@ -18,6 +18,14 @@ limitations under the License. package v1beta1 +// CSIDriverListerExpansion allows custom methods to be added to +// CSIDriverLister. +type CSIDriverListerExpansion interface{} + +// CSINodeListerExpansion allows custom methods to be added to +// CSINodeLister. +type CSINodeListerExpansion interface{} + // StorageClassListerExpansion allows custom methods to be added to // StorageClassLister. type StorageClassListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go index 714eb40d8f8..0a83f947a44 100644 --- a/vendor/k8s.io/client-go/pkg/version/base.go +++ b/vendor/k8s.io/client-go/pkg/version/base.go @@ -2,9 +2,9 @@ package version var ( gitMajor = "1" - gitMinor = "13" - gitVersion = "v1.13.5-k3s.1" - gitCommit = "256ea73aeb2627eb9b510f6c22881af8f967dd0c" - gitTreeState = "clean" - buildDate = "2019-03-27T18:49+00:00Z" + gitMinor = "14" + gitVersion = "v1.14.1-k3s.1" + gitCommit = "5f445def7ecfc428e253013b1b4d0dc893a5359a" + gitTreeState = "clean" + buildDate = "2019-04-09T03:40+00:00Z" ) diff --git a/vendor/k8s.io/client-go/rest/BUILD b/vendor/k8s.io/client-go/rest/BUILD index 9f00aac950e..4966e09a2b0 100644 --- a/vendor/k8s.io/client-go/rest/BUILD +++ b/vendor/k8s.io/client-go/rest/BUILD @@ -36,6 +36,7 @@ go_test( "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/rest/watch:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", + "//staging/src/k8s.io/client-go/transport:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//staging/src/k8s.io/client-go/util/testing:go_default_library", "//vendor/github.com/google/gofuzz:go_default_library", diff --git a/vendor/k8s.io/client-go/rest/OWNERS b/vendor/k8s.io/client-go/rest/OWNERS old mode 100755 new mode 100644 index 8d97da007d4..49dabc61b00 --- a/vendor/k8s.io/client-go/rest/OWNERS +++ b/vendor/k8s.io/client-go/rest/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go index 072e7392b19..3f6b9bc236b 100644 --- a/vendor/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/client-go/rest/config.go @@ -34,6 +34,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/pkg/version" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "k8s.io/client-go/transport" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog" @@ -95,13 +96,16 @@ type Config struct { // Transport may be used for custom HTTP behavior. This attribute may not // be specified with the TLS client certificate options. Use WrapTransport - // for most client level operations. + // to provide additional per-server middleware behavior. Transport http.RoundTripper // WrapTransport will be invoked for custom HTTP behavior after the underlying // transport is initialized (either the transport created from TLSClientConfig, // Transport, or http.DefaultTransport). The config may layer other RoundTrippers // on top of the returned RoundTripper. - WrapTransport func(rt http.RoundTripper) http.RoundTripper + // + // A future release will change this field to an array. Use config.Wrap() + // instead of setting this value directly. + WrapTransport transport.WrapperFunc // QPS indicates the maximum QPS to the master from this client. // If it's zero, the created RESTClient will use DefaultQPS: 5 @@ -125,6 +129,47 @@ type Config struct { // Version string } +var _ fmt.Stringer = new(Config) +var _ fmt.GoStringer = new(Config) + +type sanitizedConfig *Config + +type sanitizedAuthConfigPersister struct{ AuthProviderConfigPersister } + +func (sanitizedAuthConfigPersister) GoString() string { + return "rest.AuthProviderConfigPersister(--- REDACTED ---)" +} +func (sanitizedAuthConfigPersister) String() string { + return "rest.AuthProviderConfigPersister(--- REDACTED ---)" +} + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of Config +// to prevent accidental leaking via logs. +func (c *Config) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of Config to +// prevent accidental leaking via logs. +func (c *Config) String() string { + if c == nil { + return "" + } + cc := sanitizedConfig(CopyConfig(c)) + // Explicitly mark non-empty credential fields as redacted. + if cc.Password != "" { + cc.Password = "--- REDACTED ---" + } + if cc.BearerToken != "" { + cc.BearerToken = "--- REDACTED ---" + } + if cc.AuthConfigPersister != nil { + cc.AuthConfigPersister = sanitizedAuthConfigPersister{cc.AuthConfigPersister} + } + + return fmt.Sprintf("%#v", cc) +} + // ImpersonationConfig has all the available impersonation options type ImpersonationConfig struct { // UserName is the username to impersonate on each request. @@ -164,6 +209,40 @@ type TLSClientConfig struct { CAData []byte } +var _ fmt.Stringer = TLSClientConfig{} +var _ fmt.GoStringer = TLSClientConfig{} + +type sanitizedTLSClientConfig TLSClientConfig + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// TLSClientConfig to prevent accidental leaking via logs. +func (c TLSClientConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of +// TLSClientConfig to prevent accidental leaking via logs. +func (c TLSClientConfig) String() string { + cc := sanitizedTLSClientConfig{ + Insecure: c.Insecure, + ServerName: c.ServerName, + CertFile: c.CertFile, + KeyFile: c.KeyFile, + CAFile: c.CAFile, + CertData: c.CertData, + KeyData: c.KeyData, + CAData: c.CAData, + } + // Explicitly mark non-empty credential fields as redacted. + if len(cc.CertData) != 0 { + cc.CertData = []byte("--- TRUNCATED ---") + } + if len(cc.KeyData) != 0 { + cc.KeyData = []byte("--- REDACTED ---") + } + return fmt.Sprintf("%#v", cc) +} + type ContentConfig struct { // AcceptContentTypes specifies the types the client will accept and is optional. // If not set, ContentType will be used to define the Accept header diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go index 64901fba20d..dd0630387ab 100644 --- a/vendor/k8s.io/client-go/rest/request.go +++ b/vendor/k8s.io/client-go/rest/request.go @@ -1100,7 +1100,8 @@ func (r Result) Into(obj runtime.Object) error { return fmt.Errorf("serializer for %s doesn't exist", r.contentType) } if len(r.body) == 0 { - return fmt.Errorf("0-length response") + return fmt.Errorf("0-length response with status code: %d and content type: %s", + r.statusCode, r.contentType) } out, _, err := r.decoder.Decode(r.body, nil, obj) @@ -1195,7 +1196,6 @@ func IsValidPathSegmentPrefix(name string) []string { func ValidatePathSegmentName(name string, prefix bool) []string { if prefix { return IsValidPathSegmentPrefix(name) - } else { - return IsValidPathSegmentName(name) } + return IsValidPathSegmentName(name) } diff --git a/vendor/k8s.io/client-go/rest/transport.go b/vendor/k8s.io/client-go/rest/transport.go index 8260f78e74e..9e0283c4f6d 100644 --- a/vendor/k8s.io/client-go/rest/transport.go +++ b/vendor/k8s.io/client-go/rest/transport.go @@ -93,14 +93,15 @@ func (c *Config) TransportConfig() (*transport.Config, error) { if err != nil { return nil, err } - wt := conf.WrapTransport - if wt != nil { - conf.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { - return provider.WrapTransport(wt(rt)) - } - } else { - conf.WrapTransport = provider.WrapTransport - } + conf.Wrap(provider.WrapTransport) } return conf, nil } + +// Wrap adds a transport middleware function that will give the caller +// an opportunity to wrap the underlying http.RoundTripper prior to the +// first API call being made. The provided function is invoked after any +// existing transport wrappers are invoked. +func (c *Config) Wrap(fn transport.WrapperFunc) { + c.WrapTransport = transport.Wrappers(c.WrapTransport, fn) +} diff --git a/vendor/k8s.io/client-go/restmapper/BUILD b/vendor/k8s.io/client-go/restmapper/BUILD index ed8006f0318..4d3169b655a 100644 --- a/vendor/k8s.io/client-go/restmapper/BUILD +++ b/vendor/k8s.io/client-go/restmapper/BUILD @@ -36,6 +36,7 @@ go_test( "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", ], diff --git a/vendor/k8s.io/client-go/restmapper/category_expansion.go b/vendor/k8s.io/client-go/restmapper/category_expansion.go index 1620bbcf810..2537a2b4e25 100644 --- a/vendor/k8s.io/client-go/restmapper/category_expansion.go +++ b/vendor/k8s.io/client-go/restmapper/category_expansion.go @@ -21,7 +21,7 @@ import ( "k8s.io/client-go/discovery" ) -// CategoryExpander maps category strings to GroupResouces. +// CategoryExpander maps category strings to GroupResources. // Categories are classification or 'tag' of a group of resources. type CategoryExpander interface { Expand(category string) ([]schema.GroupResource, bool) diff --git a/vendor/k8s.io/client-go/restmapper/discovery.go b/vendor/k8s.io/client-go/restmapper/discovery.go index 84491f4c5d1..f8d7080d49e 100644 --- a/vendor/k8s.io/client-go/restmapper/discovery.go +++ b/vendor/k8s.io/client-go/restmapper/discovery.go @@ -145,27 +145,26 @@ func NewDiscoveryRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper // GetAPIGroupResources uses the provided discovery client to gather // discovery information and populate a slice of APIGroupResources. func GetAPIGroupResources(cl discovery.DiscoveryInterface) ([]*APIGroupResources, error) { - apiGroups, err := cl.ServerGroups() - if err != nil { - if apiGroups == nil || len(apiGroups.Groups) == 0 { - return nil, err - } + gs, rs, err := cl.ServerGroupsAndResources() + if rs == nil || gs == nil { + return nil, err // TODO track the errors and update callers to handle partial errors. } + rsm := map[string]*metav1.APIResourceList{} + for _, r := range rs { + rsm[r.GroupVersion] = r + } + var result []*APIGroupResources - for _, group := range apiGroups.Groups { + for _, group := range gs { groupResources := &APIGroupResources{ - Group: group, + Group: *group, VersionedResources: make(map[string][]metav1.APIResource), } for _, version := range group.Versions { - resources, err := cl.ServerResourcesForGroupVersion(version.GroupVersion) - if err != nil { - // continue as best we can - // TODO track the errors and update callers to handle partial errors. - if resources == nil || len(resources.APIResources) == 0 { - continue - } + resources, ok := rsm[version.GroupVersion] + if !ok { + continue } groupResources.VersionedResources[version.Version] = resources.APIResources } diff --git a/vendor/k8s.io/client-go/tools/auth/OWNERS b/vendor/k8s.io/client-go/tools/auth/OWNERS index c607d2aa8c5..3e05d309be5 100644 --- a/vendor/k8s.io/client-go/tools/auth/OWNERS +++ b/vendor/k8s.io/client-go/tools/auth/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/client-go/tools/cache/BUILD b/vendor/k8s.io/client-go/tools/cache/BUILD index 8b8b9125855..888eb267008 100644 --- a/vendor/k8s.io/client-go/tools/cache/BUILD +++ b/vendor/k8s.io/client-go/tools/cache/BUILD @@ -81,9 +81,10 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/pager:go_default_library", - "//staging/src/k8s.io/client-go/util/buffer:go_default_library", "//staging/src/k8s.io/client-go/util/retry:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/buffer:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/tools/cache/OWNERS b/vendor/k8s.io/client-go/tools/cache/OWNERS old mode 100755 new mode 100644 index 727377f9df2..a8cd4b432bf --- a/vendor/k8s.io/client-go/tools/cache/OWNERS +++ b/vendor/k8s.io/client-go/tools/cache/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - thockin - lavalamp @@ -22,7 +24,6 @@ reviewers: - erictune - davidopp - pmorie -- kargakis - janetkuo - justinsb - eparis diff --git a/vendor/k8s.io/client-go/tools/cache/controller.go b/vendor/k8s.io/client-go/tools/cache/controller.go index 028c75e8e19..b5d392520b9 100644 --- a/vendor/k8s.io/client-go/tools/cache/controller.go +++ b/vendor/k8s.io/client-go/tools/cache/controller.go @@ -28,9 +28,9 @@ import ( // Config contains all the settings for a Controller. type Config struct { - // The queue for your objects; either a FIFO or - // a DeltaFIFO. Your Process() function should accept - // the output of this Queue's Pop() method. + // The queue for your objects - has to be a DeltaFIFO due to + // assumptions in the implementation. Your Process() function + // should accept the output of this Queue's Pop() method. Queue // Something that can list and watch your objects. @@ -285,45 +285,7 @@ func NewInformer( // This will hold the client state, as we know it. clientState := NewStore(DeletionHandlingMetaNamespaceKeyFunc) - // This will hold incoming changes. Note how we pass clientState in as a - // KeyLister, that way resync operations will result in the correct set - // of update/delete deltas. - fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, clientState) - - cfg := &Config{ - Queue: fifo, - ListerWatcher: lw, - ObjectType: objType, - FullResyncPeriod: resyncPeriod, - RetryOnError: false, - - Process: func(obj interface{}) error { - // from oldest to newest - for _, d := range obj.(Deltas) { - switch d.Type { - case Sync, Added, Updated: - if old, exists, err := clientState.Get(d.Object); err == nil && exists { - if err := clientState.Update(d.Object); err != nil { - return err - } - h.OnUpdate(old, d.Object) - } else { - if err := clientState.Add(d.Object); err != nil { - return err - } - h.OnAdd(d.Object) - } - case Deleted: - if err := clientState.Delete(d.Object); err != nil { - return err - } - h.OnDelete(d.Object) - } - } - return nil - }, - } - return clientState, New(cfg) + return clientState, newInformer(lw, objType, resyncPeriod, h, clientState) } // NewIndexerInformer returns a Indexer and a controller for populating the index @@ -352,6 +314,30 @@ func NewIndexerInformer( // This will hold the client state, as we know it. clientState := NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, indexers) + return clientState, newInformer(lw, objType, resyncPeriod, h, clientState) +} + +// newInformer returns a controller for populating the store while also +// providing event notifications. +// +// Parameters +// * lw is list and watch functions for the source of the resource you want to +// be informed of. +// * objType is an object of the type that you expect to receive. +// * resyncPeriod: if non-zero, will re-list this often (you will get OnUpdate +// calls, even if nothing changed). Otherwise, re-list will be delayed as +// long as possible (until the upstream source closes the watch or times out, +// or you stop the controller). +// * h is the object you want notifications sent to. +// * clientState is the store you want to populate +// +func newInformer( + lw ListerWatcher, + objType runtime.Object, + resyncPeriod time.Duration, + h ResourceEventHandler, + clientState Store, +) Controller { // This will hold incoming changes. Note how we pass clientState in as a // KeyLister, that way resync operations will result in the correct set // of update/delete deltas. @@ -390,5 +376,5 @@ func NewIndexerInformer( return nil }, } - return clientState, New(cfg) + return New(cfg) } diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go index f818a293a69..f24eec25417 100644 --- a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go @@ -466,6 +466,7 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error { if f.knownObjects == nil { // Do deletion detection against our own list. + queuedDeletions := 0 for k, oldItem := range f.items { if keys.Has(k) { continue @@ -474,6 +475,7 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error { if n := oldItem.Newest(); n != nil { deletedObj = n.Object } + queuedDeletions++ if err := f.queueActionLocked(Deleted, DeletedFinalStateUnknown{k, deletedObj}); err != nil { return err } @@ -481,7 +483,9 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error { if !f.populated { f.populated = true - f.initialPopulationCount = len(list) + // While there shouldn't be any queued deletions in the initial + // population of the queue, it's better to be on the safe side. + f.initialPopulationCount = len(list) + queuedDeletions } return nil diff --git a/vendor/k8s.io/client-go/tools/cache/expiration_cache.go b/vendor/k8s.io/client-go/tools/cache/expiration_cache.go index b38fe70b956..68d41c8eced 100644 --- a/vendor/k8s.io/client-go/tools/cache/expiration_cache.go +++ b/vendor/k8s.io/client-go/tools/cache/expiration_cache.go @@ -144,13 +144,13 @@ func (c *ExpirationCache) ListKeys() []string { // Add timestamps an item and inserts it into the cache, overwriting entries // that might exist under the same key. func (c *ExpirationCache) Add(obj interface{}) error { - c.expirationLock.Lock() - defer c.expirationLock.Unlock() - key, err := c.keyFunc(obj) if err != nil { return KeyError{obj, err} } + c.expirationLock.Lock() + defer c.expirationLock.Unlock() + c.cacheStorage.Add(key, ×tampedEntry{obj, c.clock.Now()}) return nil } @@ -163,12 +163,12 @@ func (c *ExpirationCache) Update(obj interface{}) error { // Delete removes an item from the cache. func (c *ExpirationCache) Delete(obj interface{}) error { - c.expirationLock.Lock() - defer c.expirationLock.Unlock() key, err := c.keyFunc(obj) if err != nil { return KeyError{obj, err} } + c.expirationLock.Lock() + defer c.expirationLock.Unlock() c.cacheStorage.Delete(key) return nil } @@ -177,8 +177,6 @@ func (c *ExpirationCache) Delete(obj interface{}) error { // before attempting the replace operation. The replace operation will // delete the contents of the ExpirationCache `c`. func (c *ExpirationCache) Replace(list []interface{}, resourceVersion string) error { - c.expirationLock.Lock() - defer c.expirationLock.Unlock() items := make(map[string]interface{}, len(list)) ts := c.clock.Now() for _, item := range list { @@ -188,6 +186,8 @@ func (c *ExpirationCache) Replace(list []interface{}, resourceVersion string) er } items[key] = ×tampedEntry{item, ts} } + c.expirationLock.Lock() + defer c.expirationLock.Unlock() c.cacheStorage.Replace(items, resourceVersion) return nil } diff --git a/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go b/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go index 8d71c247497..b59e2eb2724 100644 --- a/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go +++ b/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go @@ -40,7 +40,7 @@ func (f *FakeCustomStore) Add(obj interface{}) error { // Update calls the custom Update function if defined func (f *FakeCustomStore) Update(obj interface{}) error { if f.UpdateFunc != nil { - return f.Update(obj) + return f.UpdateFunc(obj) } return nil } diff --git a/vendor/k8s.io/client-go/tools/cache/listers.go b/vendor/k8s.io/client-go/tools/cache/listers.go index ce377329c7f..311ff8c4931 100644 --- a/vendor/k8s.io/client-go/tools/cache/listers.go +++ b/vendor/k8s.io/client-go/tools/cache/listers.go @@ -31,7 +31,14 @@ import ( type AppendFunc func(interface{}) func ListAll(store Store, selector labels.Selector, appendFn AppendFunc) error { + selectAll := selector.Empty() for _, m := range store.List() { + if selectAll { + // Avoid computing labels of the objects to speed up common flows + // of listing all objects. + appendFn(m) + continue + } metadata, err := meta.Accessor(m) if err != nil { return err @@ -44,8 +51,15 @@ func ListAll(store Store, selector labels.Selector, appendFn AppendFunc) error { } func ListAllByNamespace(indexer Indexer, namespace string, selector labels.Selector, appendFn AppendFunc) error { + selectAll := selector.Empty() if namespace == metav1.NamespaceAll { for _, m := range indexer.List() { + if selectAll { + // Avoid computing labels of the objects to speed up common flows + // of listing all objects. + appendFn(m) + continue + } metadata, err := meta.Accessor(m) if err != nil { return err @@ -74,6 +88,12 @@ func ListAllByNamespace(indexer Indexer, namespace string, selector labels.Selec return nil } for _, m := range items { + if selectAll { + // Avoid computing labels of the objects to speed up common flows + // of listing all objects. + appendFn(m) + continue + } metadata, err := meta.Accessor(m) if err != nil { return err diff --git a/vendor/k8s.io/client-go/tools/cache/listwatch.go b/vendor/k8s.io/client-go/tools/cache/listwatch.go index f86791650eb..8227b73b698 100644 --- a/vendor/k8s.io/client-go/tools/cache/listwatch.go +++ b/vendor/k8s.io/client-go/tools/cache/listwatch.go @@ -27,15 +27,25 @@ import ( "k8s.io/client-go/tools/pager" ) -// ListerWatcher is any object that knows how to perform an initial list and start a watch on a resource. -type ListerWatcher interface { +// Lister is any object that knows how to perform an initial list. +type Lister interface { // List should return a list type object; the Items field will be extracted, and the // ResourceVersion field will be used to start the watch in the right place. List(options metav1.ListOptions) (runtime.Object, error) +} + +// Watcher is any object that knows how to start a watch on a resource. +type Watcher interface { // Watch should begin a watch at the specified version. Watch(options metav1.ListOptions) (watch.Interface, error) } +// ListerWatcher is any object that knows how to perform an initial list and start a watch on a resource. +type ListerWatcher interface { + Lister + Watcher +} + // ListFunc knows how to list resources type ListFunc func(options metav1.ListOptions) (runtime.Object, error) diff --git a/vendor/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/client-go/tools/cache/reflector.go index 56d0f523306..c43b7fc52d5 100644 --- a/vendor/k8s.io/client-go/tools/cache/reflector.go +++ b/vendor/k8s.io/client-go/tools/cache/reflector.go @@ -39,6 +39,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" "k8s.io/klog" + "k8s.io/utils/trace" ) // Reflector watches a specified resource and causes all changes to be reflected in the given store. @@ -164,23 +165,55 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { // to be served from cache and potentially be delayed relative to // etcd contents. Reflector framework will catch up via Watch() eventually. options := metav1.ListOptions{ResourceVersion: "0"} - list, err := r.listerWatcher.List(options) - if err != nil { - return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err) + + if err := func() error { + initTrace := trace.New("Reflector " + r.name + " ListAndWatch") + defer initTrace.LogIfLong(10 * time.Second) + var list runtime.Object + var err error + listCh := make(chan struct{}, 1) + panicCh := make(chan interface{}, 1) + go func() { + defer func() { + if r := recover(); r != nil { + panicCh <- r + } + }() + list, err = r.listerWatcher.List(options) + close(listCh) + }() + select { + case <-stopCh: + return nil + case r := <-panicCh: + panic(r) + case <-listCh: + } + if err != nil { + return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err) + } + initTrace.Step("Objects listed") + listMetaInterface, err := meta.ListAccessor(list) + if err != nil { + return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err) + } + resourceVersion = listMetaInterface.GetResourceVersion() + initTrace.Step("Resource version extracted") + items, err := meta.ExtractList(list) + if err != nil { + return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err) + } + initTrace.Step("Objects extracted") + if err := r.syncWith(items, resourceVersion); err != nil { + return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err) + } + initTrace.Step("SyncWith done") + r.setLastSyncResourceVersion(resourceVersion) + initTrace.Step("Resource version updated") + return nil + }(); err != nil { + return err } - listMetaInterface, err := meta.ListAccessor(list) - if err != nil { - return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err) - } - resourceVersion = listMetaInterface.GetResourceVersion() - items, err := meta.ExtractList(list) - if err != nil { - return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err) - } - if err := r.syncWith(items, resourceVersion); err != nil { - return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err) - } - r.setLastSyncResourceVersion(resourceVersion) resyncerrc := make(chan error, 1) cancelCh := make(chan struct{}) diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/vendor/k8s.io/client-go/tools/cache/shared_informer.go index 859099d077e..e7c9d6e95df 100644 --- a/vendor/k8s.io/client-go/tools/cache/shared_informer.go +++ b/vendor/k8s.io/client-go/tools/cache/shared_informer.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/buffer" "k8s.io/client-go/util/retry" + "k8s.io/utils/buffer" "k8s.io/klog" ) diff --git a/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go b/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go index a9512b48258..3ec139531bd 100644 --- a/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go +++ b/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go @@ -153,12 +153,19 @@ func (c *threadSafeMap) Index(indexName string, obj interface{}) ([]interface{}, } index := c.indices[indexName] - // need to de-dupe the return list. Since multiple keys are allowed, this can happen. - returnKeySet := sets.String{} - for _, indexKey := range indexKeys { - set := index[indexKey] - for _, key := range set.UnsortedList() { - returnKeySet.Insert(key) + var returnKeySet sets.String + if len(indexKeys) == 1 { + // In majority of cases, there is exactly one value matching. + // Optimize the most common path - deduping is not needed here. + returnKeySet = index[indexKeys[0]] + } else { + // Need to de-dupe the return list. + // Since multiple keys are allowed, this can happen. + returnKeySet = sets.String{} + for _, indexKey := range indexKeys { + for key := range index[indexKey] { + returnKeySet.Insert(key) + } } } diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go index 1391df7021b..990a440c66d 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go @@ -17,6 +17,8 @@ limitations under the License. package api import ( + "fmt" + "k8s.io/apimachinery/pkg/runtime" ) @@ -150,6 +152,25 @@ type AuthProviderConfig struct { Config map[string]string `json:"config,omitempty"` } +var _ fmt.Stringer = new(AuthProviderConfig) +var _ fmt.GoStringer = new(AuthProviderConfig) + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// AuthProviderConfig to prevent accidental leaking via logs. +func (c AuthProviderConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of +// AuthProviderConfig to prevent accidental leaking via logs. +func (c AuthProviderConfig) String() string { + cfg := "" + if c.Config != nil { + cfg = "--- REDACTED ---" + } + return fmt.Sprintf("api.AuthProviderConfig{Name: %q, Config: map[string]string{%s}}", c.Name, cfg) +} + // ExecConfig specifies a command to provide client credentials. The command is exec'd // and outputs structured stdout holding credentials. // @@ -172,6 +193,29 @@ type ExecConfig struct { APIVersion string `json:"apiVersion,omitempty"` } +var _ fmt.Stringer = new(ExecConfig) +var _ fmt.GoStringer = new(ExecConfig) + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// ExecConfig to prevent accidental leaking via logs. +func (c ExecConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of ExecConfig +// to prevent accidental leaking via logs. +func (c ExecConfig) String() string { + var args []string + if len(c.Args) > 0 { + args = []string{"--- REDACTED ---"} + } + env := "[]ExecEnvVar(nil)" + if len(c.Env) > 0 { + env = "[]ExecEnvVar{--- REDACTED ---}" + } + return fmt.Sprintf("api.AuthProviderConfig{Command: %q, Args: %#v, Env: %s, APIVersion: %q}", c.Command, args, env, c.APIVersion) +} + // ExecEnvVar is used for setting environment variables when executing an exec-based // credential plugin. type ExecEnvVar struct { diff --git a/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go b/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go index 76380db82ab..9cc112a2805 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go @@ -150,7 +150,12 @@ func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) { // if we got a default namespace, determine whether it was explicit or implicit if raw, err := mergedKubeConfig.RawConfig(); err == nil { - if context := raw.Contexts[raw.CurrentContext]; context != nil && len(context.Namespace) > 0 { + // determine the current context + currentContext := raw.CurrentContext + if config.overrides != nil && len(config.overrides.CurrentContext) > 0 { + currentContext = config.overrides.CurrentContext + } + if context := raw.Contexts[currentContext]; context != nil && len(context.Namespace) > 0 { return ns, false, nil } } diff --git a/vendor/k8s.io/client-go/tools/leaderelection/BUILD b/vendor/k8s.io/client-go/tools/leaderelection/BUILD index bed0f89fee7..8e2c2a1dcf0 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/BUILD +++ b/vendor/k8s.io/client-go/tools/leaderelection/BUILD @@ -1,19 +1,15 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ "healthzadaptor.go", "leaderelection.go", + "metrics.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/tools/leaderelection", importpath = "k8s.io/client-go/tools/leaderelection", + visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -33,12 +29,15 @@ go_test( ], embed = [":go_default_library"], deps = [ + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", @@ -56,7 +55,9 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//staging/src/k8s.io/client-go/tools/leaderelection/example:all-srcs", "//staging/src/k8s.io/client-go/tools/leaderelection/resourcelock:all-srcs", ], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/client-go/tools/leaderelection/OWNERS b/vendor/k8s.io/client-go/tools/leaderelection/OWNERS index d9516f8a81c..03ec598b326 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/OWNERS +++ b/vendor/k8s.io/client-go/tools/leaderelection/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - mikedanese - timothysc diff --git a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go index 2096a5996bf..02bdebd1d35 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go @@ -89,10 +89,13 @@ func NewLeaderElector(lec LeaderElectionConfig) (*LeaderElector, error) { if lec.Lock == nil { return nil, fmt.Errorf("Lock must not be nil.") } - return &LeaderElector{ - config: lec, - clock: clock.RealClock{}, - }, nil + le := LeaderElector{ + config: lec, + clock: clock.RealClock{}, + metrics: globalMetricsFactory.newLeaderMetrics(), + } + le.metrics.leaderOff(le.config.Name) + return &le, nil } type LeaderElectionConfig struct { @@ -118,6 +121,13 @@ type LeaderElectionConfig struct { // WatchDog may be null if its not needed/configured. WatchDog *HealthzAdaptor + // ReleaseOnCancel should be set true if the lock should be released + // when the run context is cancelled. If you set this to true, you must + // ensure all code guarded by this lease has successfully completed + // prior to cancelling the context, or you may have two processes + // simultaneously acting on the critical path. + ReleaseOnCancel bool + // Name is the name of the resource lock for debugging Name string } @@ -152,6 +162,8 @@ type LeaderElector struct { // clock is wrapper around time to allow for less flaky testing clock clock.Clock + metrics leaderMetricsAdapter + // name is the name of the resource lock for debugging name string } @@ -211,6 +223,7 @@ func (le *LeaderElector) acquire(ctx context.Context) bool { return } le.config.Lock.RecordEvent("became leader") + le.metrics.leaderOn(le.config.Name) klog.Infof("successfully acquired lease %v", desc) cancel() }, le.config.RetryPeriod, JitterFactor, true, ctx.Done()) @@ -246,9 +259,32 @@ func (le *LeaderElector) renew(ctx context.Context) { return } le.config.Lock.RecordEvent("stopped leading") + le.metrics.leaderOff(le.config.Name) klog.Infof("failed to renew lease %v: %v", desc, err) cancel() }, le.config.RetryPeriod, ctx.Done()) + + // if we hold the lease, give it up + if le.config.ReleaseOnCancel { + le.release() + } +} + +// release attempts to release the leader lease if we have acquired it. +func (le *LeaderElector) release() bool { + if !le.IsLeader() { + return true + } + leaderElectionRecord := rl.LeaderElectionRecord{ + LeaderTransitions: le.observedRecord.LeaderTransitions, + } + if err := le.config.Lock.Update(leaderElectionRecord); err != nil { + klog.Errorf("Failed to release lock: %v", err) + return false + } + le.observedRecord = leaderElectionRecord + le.observedTime = le.clock.Now() + return true } // tryAcquireOrRenew tries to acquire a leader lease if it is not already acquired, @@ -284,7 +320,8 @@ func (le *LeaderElector) tryAcquireOrRenew() bool { le.observedRecord = *oldLeaderElectionRecord le.observedTime = le.clock.Now() } - if le.observedTime.Add(le.config.LeaseDuration).After(now.Time) && + if len(oldLeaderElectionRecord.HolderIdentity) > 0 && + le.observedTime.Add(le.config.LeaseDuration).After(now.Time) && !le.IsLeader() { klog.V(4).Infof("lock is held by %v and has not yet expired", oldLeaderElectionRecord.HolderIdentity) return false diff --git a/vendor/k8s.io/client-go/tools/leaderelection/metrics.go b/vendor/k8s.io/client-go/tools/leaderelection/metrics.go new file mode 100644 index 00000000000..65917bf88e1 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/leaderelection/metrics.go @@ -0,0 +1,109 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package leaderelection + +import ( + "sync" +) + +// This file provides abstractions for setting the provider (e.g., prometheus) +// of metrics. + +type leaderMetricsAdapter interface { + leaderOn(name string) + leaderOff(name string) +} + +// GaugeMetric represents a single numerical value that can arbitrarily go up +// and down. +type SwitchMetric interface { + On(name string) + Off(name string) +} + +type noopMetric struct{} + +func (noopMetric) On(name string) {} +func (noopMetric) Off(name string) {} + +// defaultLeaderMetrics expects the caller to lock before setting any metrics. +type defaultLeaderMetrics struct { + // leader's value indicates if the current process is the owner of name lease + leader SwitchMetric +} + +func (m *defaultLeaderMetrics) leaderOn(name string) { + if m == nil { + return + } + m.leader.On(name) +} + +func (m *defaultLeaderMetrics) leaderOff(name string) { + if m == nil { + return + } + m.leader.Off(name) +} + +type noMetrics struct{} + +func (noMetrics) leaderOn(name string) {} +func (noMetrics) leaderOff(name string) {} + +// MetricsProvider generates various metrics used by the leader election. +type MetricsProvider interface { + NewLeaderMetric() SwitchMetric +} + +type noopMetricsProvider struct{} + +func (_ noopMetricsProvider) NewLeaderMetric() SwitchMetric { + return noopMetric{} +} + +var globalMetricsFactory = leaderMetricsFactory{ + metricsProvider: noopMetricsProvider{}, +} + +type leaderMetricsFactory struct { + metricsProvider MetricsProvider + + onlyOnce sync.Once +} + +func (f *leaderMetricsFactory) setProvider(mp MetricsProvider) { + f.onlyOnce.Do(func() { + f.metricsProvider = mp + }) +} + +func (f *leaderMetricsFactory) newLeaderMetrics() leaderMetricsAdapter { + mp := f.metricsProvider + if mp == (noopMetricsProvider{}) { + return noMetrics{} + } + return &defaultLeaderMetrics{ + leader: mp.NewLeaderMetric(), + } +} + +// SetProvider sets the metrics provider for all subsequently created work +// queues. Only the first call has an effect. +func SetProvider(metricsProvider MetricsProvider) { + globalMetricsFactory.setProvider(metricsProvider) +} diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD index 07c797c23f8..b6e1f91a882 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD @@ -1,9 +1,4 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", @@ -11,14 +6,18 @@ go_library( "configmaplock.go", "endpointslock.go", "interface.go", + "leaselock.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/tools/leaderelection/resourcelock", importpath = "k8s.io/client-go/tools/leaderelection/resourcelock", + visibility = ["//visibility:public"], deps = [ + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/tools/record:go_default_library", ], ) @@ -33,4 +32,5 @@ filegroup( name = "all-srcs", srcs = [":package-srcs"], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go index c12daad022f..785356894f1 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go @@ -93,6 +93,9 @@ func (cml *ConfigMapLock) Update(ler LeaderElectionRecord) error { // RecordEvent in leader election while adding meta-data func (cml *ConfigMapLock) RecordEvent(s string) { + if cml.LockConfig.EventRecorder == nil { + return + } events := fmt.Sprintf("%v %v", cml.LockConfig.Identity, s) cml.LockConfig.EventRecorder.Eventf(&v1.ConfigMap{ObjectMeta: cml.cm.ObjectMeta}, v1.EventTypeNormal, "LeaderElection", events) } diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go index 6f7dcfb0cc9..bfe5e8b1bb3 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go @@ -88,6 +88,9 @@ func (el *EndpointsLock) Update(ler LeaderElectionRecord) error { // RecordEvent in leader election while adding meta-data func (el *EndpointsLock) RecordEvent(s string) { + if el.LockConfig.EventRecorder == nil { + return + } events := fmt.Sprintf("%v %v", el.LockConfig.Identity, s) el.LockConfig.EventRecorder.Eventf(&v1.Endpoints{ObjectMeta: el.e.ObjectMeta}, v1.EventTypeNormal, "LeaderElection", events) } diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go index 676fd1d7dbc..050d41a25fa 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go @@ -20,14 +20,16 @@ import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/tools/record" ) const ( LeaderElectionRecordAnnotationKey = "control-plane.alpha.kubernetes.io/leader" EndpointsResourceLock = "endpoints" ConfigMapsResourceLock = "configmaps" + LeasesResourceLock = "leases" ) // LeaderElectionRecord is the record that is stored in the leader election annotation. @@ -35,6 +37,11 @@ const ( // with a random string (e.g. UUID) with only slight modification of this code. // TODO(mikedanese): this should potentially be versioned type LeaderElectionRecord struct { + // HolderIdentity is the ID that owns the lease. If empty, no one owns this lease and + // all callers may acquire. Versions of this library prior to Kubernetes 1.14 will not + // attempt to acquire leases with empty identities and will wait for the full lease + // interval to expire before attempting to reacquire. This value is set to empty when + // a client voluntarily steps down. HolderIdentity string `json:"holderIdentity"` LeaseDurationSeconds int `json:"leaseDurationSeconds"` AcquireTime metav1.Time `json:"acquireTime"` @@ -42,11 +49,19 @@ type LeaderElectionRecord struct { LeaderTransitions int `json:"leaderTransitions"` } +// EventRecorder records a change in the ResourceLock. +type EventRecorder interface { + Eventf(obj runtime.Object, eventType, reason, message string, args ...interface{}) +} + // ResourceLockConfig common data that exists across different // resource locks type ResourceLockConfig struct { - Identity string - EventRecorder record.EventRecorder + // Identity is the unique string identifying a lease holder across + // all participants in an election. + Identity string + // EventRecorder is optional. + EventRecorder EventRecorder } // Interface offers a common interface for locking on arbitrary @@ -76,7 +91,7 @@ type Interface interface { } // Manufacture will create a lock of a given type according to the input parameters -func New(lockType string, ns string, name string, client corev1.CoreV1Interface, rlc ResourceLockConfig) (Interface, error) { +func New(lockType string, ns string, name string, coreClient corev1.CoreV1Interface, coordinationClient coordinationv1.CoordinationV1Interface, rlc ResourceLockConfig) (Interface, error) { switch lockType { case EndpointsResourceLock: return &EndpointsLock{ @@ -84,7 +99,7 @@ func New(lockType string, ns string, name string, client corev1.CoreV1Interface, Namespace: ns, Name: name, }, - Client: client, + Client: coreClient, LockConfig: rlc, }, nil case ConfigMapsResourceLock: @@ -93,7 +108,16 @@ func New(lockType string, ns string, name string, client corev1.CoreV1Interface, Namespace: ns, Name: name, }, - Client: client, + Client: coreClient, + LockConfig: rlc, + }, nil + case LeasesResourceLock: + return &LeaseLock{ + LeaseMeta: metav1.ObjectMeta{ + Namespace: ns, + Name: name, + }, + Client: coordinationClient, LockConfig: rlc, }, nil default: diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go new file mode 100644 index 00000000000..285f9440540 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go @@ -0,0 +1,124 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourcelock + +import ( + "errors" + "fmt" + + coordinationv1 "k8s.io/api/coordination/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + coordinationv1client "k8s.io/client-go/kubernetes/typed/coordination/v1" +) + +type LeaseLock struct { + // LeaseMeta should contain a Name and a Namespace of a + // LeaseMeta object that the LeaderElector will attempt to lead. + LeaseMeta metav1.ObjectMeta + Client coordinationv1client.LeasesGetter + LockConfig ResourceLockConfig + lease *coordinationv1.Lease +} + +// Get returns the election record from a Lease spec +func (ll *LeaseLock) Get() (*LeaderElectionRecord, error) { + var err error + ll.lease, err = ll.Client.Leases(ll.LeaseMeta.Namespace).Get(ll.LeaseMeta.Name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + return LeaseSpecToLeaderElectionRecord(&ll.lease.Spec), nil +} + +// Create attempts to create a Lease +func (ll *LeaseLock) Create(ler LeaderElectionRecord) error { + var err error + ll.lease, err = ll.Client.Leases(ll.LeaseMeta.Namespace).Create(&coordinationv1.Lease{ + ObjectMeta: metav1.ObjectMeta{ + Name: ll.LeaseMeta.Name, + Namespace: ll.LeaseMeta.Namespace, + }, + Spec: LeaderElectionRecordToLeaseSpec(&ler), + }) + return err +} + +// Update will update an existing Lease spec. +func (ll *LeaseLock) Update(ler LeaderElectionRecord) error { + if ll.lease == nil { + return errors.New("lease not initialized, call get or create first") + } + ll.lease.Spec = LeaderElectionRecordToLeaseSpec(&ler) + var err error + ll.lease, err = ll.Client.Leases(ll.LeaseMeta.Namespace).Update(ll.lease) + return err +} + +// RecordEvent in leader election while adding meta-data +func (ll *LeaseLock) RecordEvent(s string) { + if ll.LockConfig.EventRecorder == nil { + return + } + events := fmt.Sprintf("%v %v", ll.LockConfig.Identity, s) + ll.LockConfig.EventRecorder.Eventf(&coordinationv1.Lease{ObjectMeta: ll.lease.ObjectMeta}, corev1.EventTypeNormal, "LeaderElection", events) +} + +// Describe is used to convert details on current resource lock +// into a string +func (ll *LeaseLock) Describe() string { + return fmt.Sprintf("%v/%v", ll.LeaseMeta.Namespace, ll.LeaseMeta.Name) +} + +// returns the Identity of the lock +func (ll *LeaseLock) Identity() string { + return ll.LockConfig.Identity +} + +func LeaseSpecToLeaderElectionRecord(spec *coordinationv1.LeaseSpec) *LeaderElectionRecord { + holderIdentity := "" + if spec.HolderIdentity != nil { + holderIdentity = *spec.HolderIdentity + } + leaseDurationSeconds := 0 + if spec.LeaseDurationSeconds != nil { + leaseDurationSeconds = int(*spec.LeaseDurationSeconds) + } + leaseTransitions := 0 + if spec.LeaseTransitions != nil { + leaseTransitions = int(*spec.LeaseTransitions) + } + return &LeaderElectionRecord{ + HolderIdentity: holderIdentity, + LeaseDurationSeconds: leaseDurationSeconds, + AcquireTime: metav1.Time{spec.AcquireTime.Time}, + RenewTime: metav1.Time{spec.RenewTime.Time}, + LeaderTransitions: leaseTransitions, + } +} + +func LeaderElectionRecordToLeaseSpec(ler *LeaderElectionRecord) coordinationv1.LeaseSpec { + leaseDurationSeconds := int32(ler.LeaseDurationSeconds) + leaseTransitions := int32(ler.LeaderTransitions) + return coordinationv1.LeaseSpec{ + HolderIdentity: &ler.HolderIdentity, + LeaseDurationSeconds: &leaseDurationSeconds, + AcquireTime: &metav1.MicroTime{ler.AcquireTime.Time}, + RenewTime: &metav1.MicroTime{ler.RenewTime.Time}, + LeaseTransitions: &leaseTransitions, + } +} diff --git a/vendor/k8s.io/client-go/tools/metrics/OWNERS b/vendor/k8s.io/client-go/tools/metrics/OWNERS old mode 100755 new mode 100644 index ff517980719..f150be53699 --- a/vendor/k8s.io/client-go/tools/metrics/OWNERS +++ b/vendor/k8s.io/client-go/tools/metrics/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - eparis diff --git a/vendor/k8s.io/client-go/tools/portforward/portforward.go b/vendor/k8s.io/client-go/tools/portforward/portforward.go index 0e9b369a983..a50a9973ee2 100644 --- a/vendor/k8s.io/client-go/tools/portforward/portforward.go +++ b/vendor/k8s.io/client-go/tools/portforward/portforward.go @@ -23,6 +23,7 @@ import ( "io/ioutil" "net" "net/http" + "sort" "strconv" "strings" "sync" @@ -122,10 +123,14 @@ func parseAddresses(addressesToParse []string) ([]listenAddress, error) { parsed := make(map[string]listenAddress) for _, address := range addressesToParse { if address == "localhost" { - ip := listenAddress{address: "127.0.0.1", protocol: "tcp4", failureMode: "all"} - parsed[ip.address] = ip - ip = listenAddress{address: "::1", protocol: "tcp6", failureMode: "all"} - parsed[ip.address] = ip + if _, exists := parsed["127.0.0.1"]; !exists { + ip := listenAddress{address: "127.0.0.1", protocol: "tcp4", failureMode: "all"} + parsed[ip.address] = ip + } + if _, exists := parsed["::1"]; !exists { + ip := listenAddress{address: "::1", protocol: "tcp6", failureMode: "all"} + parsed[ip.address] = ip + } } else if net.ParseIP(address).To4() != nil { parsed[address] = listenAddress{address: address, protocol: "tcp4", failureMode: "any"} } else if net.ParseIP(address) != nil { @@ -140,6 +145,9 @@ func parseAddresses(addressesToParse []string) ([]listenAddress, error) { addresses[id] = v id++ } + // Sort addresses before returning to get a stable order + sort.Slice(addresses, func(i, j int) bool { return addresses[i].address < addresses[j].address }) + return addresses, nil } @@ -197,8 +205,9 @@ func (pf *PortForwarder) forward() error { var err error listenSuccess := false - for _, port := range pf.ports { - err = pf.listenOnPort(&port) + for i := range pf.ports { + port := &pf.ports[i] + err = pf.listenOnPort(port) switch { case err == nil: listenSuccess = true diff --git a/vendor/k8s.io/client-go/tools/record/BUILD b/vendor/k8s.io/client-go/tools/record/BUILD index 2a8546138e3..6ab64763514 100644 --- a/vendor/k8s.io/client-go/tools/record/BUILD +++ b/vendor/k8s.io/client-go/tools/record/BUILD @@ -48,6 +48,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/client-go/tools/record/util:go_default_library", "//staging/src/k8s.io/client-go/tools/reference:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/github.com/golang/groupcache/lru:go_default_library", @@ -64,6 +65,9 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/tools/record/util:all-srcs", + ], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/client-go/tools/record/OWNERS b/vendor/k8s.io/client-go/tools/record/OWNERS old mode 100755 new mode 100644 index 4dd54bbce98..6ce73bb5cd3 --- a/vendor/k8s.io/client-go/tools/record/OWNERS +++ b/vendor/k8s.io/client-go/tools/record/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - lavalamp - smarterclayton diff --git a/vendor/k8s.io/client-go/tools/record/event.go b/vendor/k8s.io/client-go/tools/record/event.go index 2ee69589c6d..565e72802a2 100644 --- a/vendor/k8s.io/client-go/tools/record/event.go +++ b/vendor/k8s.io/client-go/tools/record/event.go @@ -21,7 +21,7 @@ import ( "math/rand" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -29,10 +29,8 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/record/util" ref "k8s.io/client-go/tools/reference" - - "net/http" - "k8s.io/klog" ) @@ -157,16 +155,6 @@ func recordToSink(sink EventSink, event *v1.Event, eventCorrelator *EventCorrela } } -func isKeyNotFoundError(err error) bool { - statusErr, _ := err.(*errors.StatusError) - - if statusErr != nil && statusErr.Status().Code == http.StatusNotFound { - return true - } - - return false -} - // recordEvent attempts to write event to a sink. It returns true if the event // was successfully recorded or discarded, false if it should be retried. // If updateExistingEvent is false, it creates a new event, otherwise it updates @@ -178,7 +166,7 @@ func recordEvent(sink EventSink, event *v1.Event, patch []byte, updateExistingEv newEvent, err = sink.Patch(event, patch) } // Update can fail because the event may have been removed and it no longer exists. - if !updateExistingEvent || (updateExistingEvent && isKeyNotFoundError(err)) { + if !updateExistingEvent || (updateExistingEvent && util.IsKeyNotFoundError(err)) { // Making sure that ResourceVersion is empty on creation event.ResourceVersion = "" newEvent, err = sink.Create(event) @@ -260,7 +248,7 @@ func (recorder *recorderImpl) generateEvent(object runtime.Object, annotations m return } - if !validateEventType(eventtype) { + if !util.ValidateEventType(eventtype) { klog.Errorf("Unsupported event type: '%v'", eventtype) return } @@ -275,14 +263,6 @@ func (recorder *recorderImpl) generateEvent(object runtime.Object, annotations m }() } -func validateEventType(eventtype string) bool { - switch eventtype { - case v1.EventTypeNormal, v1.EventTypeWarning: - return true - } - return false -} - func (recorder *recorderImpl) Event(object runtime.Object, eventtype, reason, message string) { recorder.generateEvent(object, nil, metav1.Now(), eventtype, reason, message) } diff --git a/vendor/k8s.io/client-go/tools/record/util/BUILD b/vendor/k8s.io/client-go/tools/record/util/BUILD new file mode 100644 index 00000000000..a47a4a2dc7f --- /dev/null +++ b/vendor/k8s.io/client-go/tools/record/util/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["util.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/tools/record/util", + importpath = "k8s.io/client-go/tools/record/util", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/tools/record/util/util.go b/vendor/k8s.io/client-go/tools/record/util/util.go new file mode 100644 index 00000000000..d1818a8d907 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/record/util/util.go @@ -0,0 +1,44 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "net/http" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" +) + +// ValidateEventType checks that eventtype is an expected type of event +func ValidateEventType(eventtype string) bool { + switch eventtype { + case v1.EventTypeNormal, v1.EventTypeWarning: + return true + } + return false +} + +// IsKeyNotFoundError is utility function that checks if an error is not found error +func IsKeyNotFoundError(err error) bool { + statusErr, _ := err.(*errors.StatusError) + + if statusErr != nil && statusErr.Status().Code == http.StatusNotFound { + return true + } + + return false +} diff --git a/vendor/k8s.io/client-go/tools/watch/BUILD b/vendor/k8s.io/client-go/tools/watch/BUILD index 9f7a97cd4aa..f31c836986e 100644 --- a/vendor/k8s.io/client-go/tools/watch/BUILD +++ b/vendor/k8s.io/client-go/tools/watch/BUILD @@ -4,18 +4,22 @@ go_library( name = "go_default_library", srcs = [ "informerwatcher.go", + "retrywatcher.go", "until.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/tools/watch", importpath = "k8s.io/client-go/tools/watch", visibility = ["//visibility:public"], deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -24,11 +28,13 @@ go_test( name = "go_default_test", srcs = [ "informerwatcher_test.go", + "retrywatcher_test.go", "until_test.go", ], embed = [":go_default_library"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", @@ -39,6 +45,7 @@ go_test( "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//vendor/github.com/davecgh/go-spew/spew:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/tools/watch/informerwatcher.go b/vendor/k8s.io/client-go/tools/watch/informerwatcher.go index 35a34694939..4ccc4b49a9c 100644 --- a/vendor/k8s.io/client-go/tools/watch/informerwatcher.go +++ b/vendor/k8s.io/client-go/tools/watch/informerwatcher.go @@ -58,8 +58,10 @@ func (t *ticketer) WaitForTicket(ticket uint64, f func()) { // NewIndexerInformerWatcher will create an IndexerInformer and wrap it into watch.Interface // so you can use it anywhere where you'd have used a regular Watcher returned from Watch method. -func NewIndexerInformerWatcher(lw cache.ListerWatcher, objType runtime.Object) (cache.Indexer, cache.Controller, watch.Interface) { +// it also returns a channel you can use to wait for the informers to fully shutdown. +func NewIndexerInformerWatcher(lw cache.ListerWatcher, objType runtime.Object) (cache.Indexer, cache.Controller, watch.Interface, <-chan struct{}) { ch := make(chan watch.Event) + doneCh := make(chan struct{}) w := watch.NewProxyWatcher(ch) t := newTicketer() @@ -107,8 +109,9 @@ func NewIndexerInformerWatcher(lw cache.ListerWatcher, objType runtime.Object) ( }, cache.Indexers{}) go func() { + defer close(doneCh) informer.Run(w.StopChan()) }() - return indexer, informer, w + return indexer, informer, w, doneCh } diff --git a/vendor/k8s.io/client-go/tools/watch/retrywatcher.go b/vendor/k8s.io/client-go/tools/watch/retrywatcher.go new file mode 100644 index 00000000000..e45d58ec15d --- /dev/null +++ b/vendor/k8s.io/client-go/tools/watch/retrywatcher.go @@ -0,0 +1,287 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "context" + "errors" + "fmt" + "io" + "net/http" + "time" + + "github.com/davecgh/go-spew/spew" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/cache" + "k8s.io/klog" +) + +// resourceVersionGetter is an interface used to get resource version from events. +// We can't reuse an interface from meta otherwise it would be a cyclic dependency and we need just this one method +type resourceVersionGetter interface { + GetResourceVersion() string +} + +// RetryWatcher will make sure that in case the underlying watcher is closed (e.g. due to API timeout or etcd timeout) +// it will get restarted from the last point without the consumer even knowing about it. +// RetryWatcher does that by inspecting events and keeping track of resourceVersion. +// Especially useful when using watch.UntilWithoutRetry where premature termination is causing issues and flakes. +// Please note that this is not resilient to etcd cache not having the resource version anymore - you would need to +// use Informers for that. +type RetryWatcher struct { + lastResourceVersion string + watcherClient cache.Watcher + resultChan chan watch.Event + stopChan chan struct{} + doneChan chan struct{} + minRestartDelay time.Duration +} + +// NewRetryWatcher creates a new RetryWatcher. +// It will make sure that watches gets restarted in case of recoverable errors. +// The initialResourceVersion will be given to watch method when first called. +func NewRetryWatcher(initialResourceVersion string, watcherClient cache.Watcher) (*RetryWatcher, error) { + return newRetryWatcher(initialResourceVersion, watcherClient, 1*time.Second) +} + +func newRetryWatcher(initialResourceVersion string, watcherClient cache.Watcher, minRestartDelay time.Duration) (*RetryWatcher, error) { + switch initialResourceVersion { + case "", "0": + // TODO: revisit this if we ever get WATCH v2 where it means start "now" + // without doing the synthetic list of objects at the beginning (see #74022) + return nil, fmt.Errorf("initial RV %q is not supported due to issues with underlying WATCH", initialResourceVersion) + default: + break + } + + rw := &RetryWatcher{ + lastResourceVersion: initialResourceVersion, + watcherClient: watcherClient, + stopChan: make(chan struct{}), + doneChan: make(chan struct{}), + resultChan: make(chan watch.Event, 0), + minRestartDelay: minRestartDelay, + } + + go rw.receive() + return rw, nil +} + +func (rw *RetryWatcher) send(event watch.Event) bool { + // Writing to an unbuffered channel is blocking operation + // and we need to check if stop wasn't requested while doing so. + select { + case rw.resultChan <- event: + return true + case <-rw.stopChan: + return false + } +} + +// doReceive returns true when it is done, false otherwise. +// If it is not done the second return value holds the time to wait before calling it again. +func (rw *RetryWatcher) doReceive() (bool, time.Duration) { + watcher, err := rw.watcherClient.Watch(metav1.ListOptions{ + ResourceVersion: rw.lastResourceVersion, + }) + // We are very unlikely to hit EOF here since we are just establishing the call, + // but it may happen that the apiserver is just shutting down (e.g. being restarted) + // This is consistent with how it is handled for informers + switch err { + case nil: + break + + case io.EOF: + // watch closed normally + return false, 0 + + case io.ErrUnexpectedEOF: + klog.V(1).Infof("Watch closed with unexpected EOF: %v", err) + return false, 0 + + default: + msg := "Watch failed: %v" + if net.IsProbableEOF(err) { + klog.V(5).Infof(msg, err) + // Retry + return false, 0 + } + + klog.Errorf(msg, err) + // Retry + return false, 0 + } + + if watcher == nil { + klog.Error("Watch returned nil watcher") + // Retry + return false, 0 + } + + ch := watcher.ResultChan() + defer watcher.Stop() + + for { + select { + case <-rw.stopChan: + klog.V(4).Info("Stopping RetryWatcher.") + return true, 0 + case event, ok := <-ch: + if !ok { + klog.V(4).Infof("Failed to get event! Re-creating the watcher. Last RV: %s", rw.lastResourceVersion) + return false, 0 + } + + // We need to inspect the event and get ResourceVersion out of it + switch event.Type { + case watch.Added, watch.Modified, watch.Deleted: + metaObject, ok := event.Object.(resourceVersionGetter) + if !ok { + _ = rw.send(watch.Event{ + Type: watch.Error, + Object: &apierrors.NewInternalError(errors.New("retryWatcher: doesn't support resourceVersion")).ErrStatus, + }) + // We have to abort here because this might cause lastResourceVersion inconsistency by skipping a potential RV with valid data! + return true, 0 + } + + resourceVersion := metaObject.GetResourceVersion() + if resourceVersion == "" { + _ = rw.send(watch.Event{ + Type: watch.Error, + Object: &apierrors.NewInternalError(fmt.Errorf("retryWatcher: object %#v doesn't support resourceVersion", event.Object)).ErrStatus, + }) + // We have to abort here because this might cause lastResourceVersion inconsistency by skipping a potential RV with valid data! + return true, 0 + } + + // All is fine; send the event and update lastResourceVersion + ok = rw.send(event) + if !ok { + return true, 0 + } + rw.lastResourceVersion = resourceVersion + + continue + + case watch.Error: + // This round trip allows us to handle unstructured status + errObject := apierrors.FromObject(event.Object) + statusErr, ok := errObject.(*apierrors.StatusError) + if !ok { + klog.Error(spew.Sprintf("Received an error which is not *metav1.Status but %#+v", event.Object)) + // Retry unknown errors + return false, 0 + } + + status := statusErr.ErrStatus + + statusDelay := time.Duration(0) + if status.Details != nil { + statusDelay = time.Duration(status.Details.RetryAfterSeconds) * time.Second + } + + switch status.Code { + case http.StatusGone: + // Never retry RV too old errors + _ = rw.send(event) + return true, 0 + + case http.StatusGatewayTimeout, http.StatusInternalServerError: + // Retry + return false, statusDelay + + default: + // We retry by default. RetryWatcher is meant to proceed unless it is certain + // that it can't. If we are not certain, we proceed with retry and leave it + // up to the user to timeout if needed. + + // Log here so we have a record of hitting the unexpected error + // and we can whitelist some error codes if we missed any that are expected. + klog.V(5).Info(spew.Sprintf("Retrying after unexpected error: %#+v", event.Object)) + + // Retry + return false, statusDelay + } + + default: + klog.Errorf("Failed to recognize Event type %q", event.Type) + _ = rw.send(watch.Event{ + Type: watch.Error, + Object: &apierrors.NewInternalError(fmt.Errorf("retryWatcher failed to recognize Event type %q", event.Type)).ErrStatus, + }) + // We are unable to restart the watch and have to stop the loop or this might cause lastResourceVersion inconsistency by skipping a potential RV with valid data! + return true, 0 + } + } + } +} + +// receive reads the result from a watcher, restarting it if necessary. +func (rw *RetryWatcher) receive() { + defer close(rw.doneChan) + defer close(rw.resultChan) + + klog.V(4).Info("Starting RetryWatcher.") + defer klog.V(4).Info("Stopping RetryWatcher.") + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + go func() { + select { + case <-rw.stopChan: + cancel() + return + case <-ctx.Done(): + return + } + }() + + // We use non sliding until so we don't introduce delays on happy path when WATCH call + // timeouts or gets closed and we need to reestablish it while also avoiding hot loops. + wait.NonSlidingUntilWithContext(ctx, func(ctx context.Context) { + done, retryAfter := rw.doReceive() + if done { + cancel() + return + } + + time.Sleep(retryAfter) + + klog.V(4).Infof("Restarting RetryWatcher at RV=%q", rw.lastResourceVersion) + }, rw.minRestartDelay) +} + +// ResultChan implements Interface. +func (rw *RetryWatcher) ResultChan() <-chan watch.Event { + return rw.resultChan +} + +// Stop implements Interface. +func (rw *RetryWatcher) Stop() { + close(rw.stopChan) +} + +// Done allows the caller to be notified when Retry watcher stops. +func (rw *RetryWatcher) Done() <-chan struct{} { + return rw.doneChan +} diff --git a/vendor/k8s.io/client-go/tools/watch/until.go b/vendor/k8s.io/client-go/tools/watch/until.go index aa4bbc21169..e12d82aca48 100644 --- a/vendor/k8s.io/client-go/tools/watch/until.go +++ b/vendor/k8s.io/client-go/tools/watch/until.go @@ -95,6 +95,25 @@ func UntilWithoutRetry(ctx context.Context, watcher watch.Interface, conditions return lastEvent, nil } +// Until wraps the watcherClient's watch function with RetryWatcher making sure that watcher gets restarted in case of errors. +// The initialResourceVersion will be given to watch method when first called. It shall not be "" or "0" +// given the underlying WATCH call issues (#74022). If you want the initial list ("", "0") done for you use ListWatchUntil instead. +// Remaining behaviour is identical to function UntilWithoutRetry. (See above.) +// Until can deal with API timeouts and lost connections. +// It guarantees you to see all events and in the order they happened. +// Due to this guarantee there is no way it can deal with 'Resource version too old error'. It will fail in this case. +// (See `UntilWithSync` if you'd prefer to recover from all the errors including RV too old by re-listing +// those items. In normal code you should care about being level driven so you'd not care about not seeing all the edges.) +// The most frequent usage for Until would be a test where you want to verify exact order of events ("edges"). +func Until(ctx context.Context, initialResourceVersion string, watcherClient cache.Watcher, conditions ...ConditionFunc) (*watch.Event, error) { + w, err := NewRetryWatcher(initialResourceVersion, watcherClient) + if err != nil { + return nil, err + } + + return UntilWithoutRetry(ctx, w, conditions...) +} + // UntilWithSync creates an informer from lw, optionally checks precondition when the store is synced, // and watches the output until each provided condition succeeds, in a way that is identical // to function UntilWithoutRetry. (See above.) @@ -108,7 +127,10 @@ func UntilWithoutRetry(ctx context.Context, watcher watch.Interface, conditions // The most frequent usage would be a command that needs to watch the "state of the world" and should't fail, like: // waiting for object reaching a state, "small" controllers, ... func UntilWithSync(ctx context.Context, lw cache.ListerWatcher, objType runtime.Object, precondition PreconditionFunc, conditions ...ConditionFunc) (*watch.Event, error) { - indexer, informer, watcher := NewIndexerInformerWatcher(lw, objType) + indexer, informer, watcher, done := NewIndexerInformerWatcher(lw, objType) + // We need to wait for the internal informers to fully stop so it's easier to reason about + // and it works with non-thread safe clients. + defer func() { <-done }() // Proxy watcher can be stopped multiple times so it's fine to use defer here to cover alternative branches and // let UntilWithoutRetry to stop it defer watcher.Stop() @@ -146,13 +168,14 @@ func ContextWithOptionalTimeout(parent context.Context, timeout time.Duration) ( return context.WithTimeout(parent, timeout) } -// ListWatchUntil checks the provided conditions against the items returned by the list watcher, returning wait.ErrWaitTimeout -// if timeout is exceeded without all conditions returning true, or an error if an error occurs. -// TODO: check for watch expired error and retry watch from latest point? Same issue exists for Until. -// TODO: remove when no longer used -// -// Deprecated: Use UntilWithSync instead. -func ListWatchUntil(timeout time.Duration, lw cache.ListerWatcher, conditions ...ConditionFunc) (*watch.Event, error) { +// ListWatchUntil first lists objects, converts them into synthetic ADDED events +// and checks conditions for those synthetic events. If the conditions have not been reached so far +// it continues by calling Until which establishes a watch from resourceVersion of the list call +// to evaluate those conditions based on new events. +// ListWatchUntil provides the same guarantees as Until and replaces the old WATCH from RV "" (or "0") +// which was mixing list and watch calls internally and having severe design issues. (see #74022) +// There is no resourceVersion order guarantee for the initial list and those synthetic events. +func ListWatchUntil(ctx context.Context, lw cache.ListerWatcher, conditions ...ConditionFunc) (*watch.Event, error) { if len(conditions) == 0 { return nil, nil } @@ -209,17 +232,5 @@ func ListWatchUntil(timeout time.Duration, lw cache.ListerWatcher, conditions .. } currResourceVersion := metaObj.GetResourceVersion() - watchInterface, err := lw.Watch(metav1.ListOptions{ResourceVersion: currResourceVersion}) - if err != nil { - return nil, err - } - - ctx, cancel := ContextWithOptionalTimeout(context.Background(), timeout) - defer cancel() - evt, err := UntilWithoutRetry(ctx, watchInterface, remainingConditions...) - if err == ErrWatchClosed { - // present a consistent error interface to callers - err = wait.ErrWaitTimeout - } - return evt, err + return Until(ctx, currResourceVersion, lw, remainingConditions...) } diff --git a/vendor/k8s.io/client-go/transport/OWNERS b/vendor/k8s.io/client-go/transport/OWNERS old mode 100755 new mode 100644 index bf0ba5b9f95..a52176903c0 --- a/vendor/k8s.io/client-go/transport/OWNERS +++ b/vendor/k8s.io/client-go/transport/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - wojtek-t diff --git a/vendor/k8s.io/client-go/transport/config.go b/vendor/k8s.io/client-go/transport/config.go index acb126d8b09..5de0a2cb101 100644 --- a/vendor/k8s.io/client-go/transport/config.go +++ b/vendor/k8s.io/client-go/transport/config.go @@ -57,7 +57,10 @@ type Config struct { // from TLSClientConfig, Transport, or http.DefaultTransport). The // config may layer other RoundTrippers on top of the returned // RoundTripper. - WrapTransport func(rt http.RoundTripper) http.RoundTripper + // + // A future release will change this field to an array. Use config.Wrap() + // instead of setting this value directly. + WrapTransport WrapperFunc // Dial specifies the dial function for creating unencrypted TCP connections. Dial func(ctx context.Context, network, address string) (net.Conn, error) @@ -98,6 +101,14 @@ func (c *Config) HasCertCallback() bool { return c.TLS.GetCert != nil } +// Wrap adds a transport middleware function that will give the caller +// an opportunity to wrap the underlying http.RoundTripper prior to the +// first API call being made. The provided function is invoked after any +// existing transport wrappers are invoked. +func (c *Config) Wrap(fn WrapperFunc) { + c.WrapTransport = Wrappers(c.WrapTransport, fn) +} + // TLSConfig holds the information needed to set up a TLS transport. type TLSConfig struct { CAFile string // Path of the PEM-encoded server trusted root certificates. diff --git a/vendor/k8s.io/client-go/transport/transport.go b/vendor/k8s.io/client-go/transport/transport.go index c19739fdfe8..2a145c971a3 100644 --- a/vendor/k8s.io/client-go/transport/transport.go +++ b/vendor/k8s.io/client-go/transport/transport.go @@ -17,6 +17,7 @@ limitations under the License. package transport import ( + "context" "crypto/tls" "crypto/x509" "fmt" @@ -167,3 +168,60 @@ func rootCertPool(caData []byte) *x509.CertPool { certPool.AppendCertsFromPEM(caData) return certPool } + +// WrapperFunc wraps an http.RoundTripper when a new transport +// is created for a client, allowing per connection behavior +// to be injected. +type WrapperFunc func(rt http.RoundTripper) http.RoundTripper + +// Wrappers accepts any number of wrappers and returns a wrapper +// function that is the equivalent of calling each of them in order. Nil +// values are ignored, which makes this function convenient for incrementally +// wrapping a function. +func Wrappers(fns ...WrapperFunc) WrapperFunc { + if len(fns) == 0 { + return nil + } + // optimize the common case of wrapping a possibly nil transport wrapper + // with an additional wrapper + if len(fns) == 2 && fns[0] == nil { + return fns[1] + } + return func(rt http.RoundTripper) http.RoundTripper { + base := rt + for _, fn := range fns { + if fn != nil { + base = fn(base) + } + } + return base + } +} + +// ContextCanceller prevents new requests after the provided context is finished. +// err is returned when the context is closed, allowing the caller to provide a context +// appropriate error. +func ContextCanceller(ctx context.Context, err error) WrapperFunc { + return func(rt http.RoundTripper) http.RoundTripper { + return &contextCanceller{ + ctx: ctx, + rt: rt, + err: err, + } + } +} + +type contextCanceller struct { + ctx context.Context + rt http.RoundTripper + err error +} + +func (b *contextCanceller) RoundTrip(req *http.Request) (*http.Response, error) { + select { + case <-b.ctx.Done(): + return nil, b.err + default: + return b.rt.RoundTrip(req) + } +} diff --git a/vendor/k8s.io/client-go/util/buffer/BUILD b/vendor/k8s.io/client-go/util/buffer/BUILD deleted file mode 100644 index d9496272c8c..00000000000 --- a/vendor/k8s.io/client-go/util/buffer/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -go_library( - name = "go_default_library", - srcs = ["ring_growing.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/buffer", - importpath = "k8s.io/client-go/util/buffer", - visibility = ["//visibility:public"], -) - -go_test( - name = "go_default_test", - srcs = ["ring_growing_test.go"], - embed = [":go_default_library"], - deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/client-go/util/cert/BUILD b/vendor/k8s.io/client-go/util/cert/BUILD index 2a42b716eff..661c5e35104 100644 --- a/vendor/k8s.io/client-go/util/cert/BUILD +++ b/vendor/k8s.io/client-go/util/cert/BUILD @@ -8,12 +8,10 @@ load( go_test( name = "go_default_test", - srcs = [ - "csr_test.go", - "pem_test.go", - ], + srcs = ["csr_test.go"], data = glob(["testdata/**"]), embed = [":go_default_library"], + deps = ["//staging/src/k8s.io/client-go/util/keyutil:go_default_library"], ) go_library( @@ -26,6 +24,7 @@ go_library( ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/cert", importpath = "k8s.io/client-go/util/cert", + deps = ["//staging/src/k8s.io/client-go/util/keyutil:go_default_library"], ) filegroup( diff --git a/vendor/k8s.io/client-go/util/cert/OWNERS b/vendor/k8s.io/client-go/util/cert/OWNERS index 470b7a1c92d..3cf03643835 100644 --- a/vendor/k8s.io/client-go/util/cert/OWNERS +++ b/vendor/k8s.io/client-go/util/cert/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go index 3429c82cdff..9fd097af5e3 100644 --- a/vendor/k8s.io/client-go/util/cert/cert.go +++ b/vendor/k8s.io/client-go/util/cert/cert.go @@ -19,29 +19,23 @@ package cert import ( "bytes" "crypto" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" cryptorand "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" - "errors" "fmt" "io/ioutil" - "math" "math/big" "net" "path" "strings" "time" + + "k8s.io/client-go/util/keyutil" ) -const ( - rsaKeySize = 2048 - duration365d = time.Hour * 24 * 365 -) +const duration365d = time.Hour * 24 * 365 // Config contains the basic fields required for creating a certificate type Config struct { @@ -59,11 +53,6 @@ type AltNames struct { IPs []net.IP } -// NewPrivateKey creates an RSA private key -func NewPrivateKey() (*rsa.PrivateKey, error) { - return rsa.GenerateKey(cryptorand.Reader, rsaKeySize) -} - // NewSelfSignedCACert creates a CA certificate func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, error) { now := time.Now() @@ -87,58 +76,6 @@ func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, erro return x509.ParseCertificate(certDERBytes) } -// NewSignedCert creates a signed certificate using the given CA certificate and key -func NewSignedCert(cfg Config, key crypto.Signer, caCert *x509.Certificate, caKey crypto.Signer) (*x509.Certificate, error) { - serial, err := rand.Int(rand.Reader, new(big.Int).SetInt64(math.MaxInt64)) - if err != nil { - return nil, err - } - if len(cfg.CommonName) == 0 { - return nil, errors.New("must specify a CommonName") - } - if len(cfg.Usages) == 0 { - return nil, errors.New("must specify at least one ExtKeyUsage") - } - - certTmpl := x509.Certificate{ - Subject: pkix.Name{ - CommonName: cfg.CommonName, - Organization: cfg.Organization, - }, - DNSNames: cfg.AltNames.DNSNames, - IPAddresses: cfg.AltNames.IPs, - SerialNumber: serial, - NotBefore: caCert.NotBefore, - NotAfter: time.Now().Add(duration365d).UTC(), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: cfg.Usages, - } - certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &certTmpl, caCert, key.Public(), caKey) - if err != nil { - return nil, err - } - return x509.ParseCertificate(certDERBytes) -} - -// MakeEllipticPrivateKeyPEM creates an ECDSA private key -func MakeEllipticPrivateKeyPEM() ([]byte, error) { - privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) - if err != nil { - return nil, err - } - - derBytes, err := x509.MarshalECPrivateKey(privateKey) - if err != nil { - return nil, err - } - - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, - } - return pem.EncodeToMemory(privateKeyPemBlock), nil -} - // GenerateSelfSignedCertKey creates a self-signed certificate and key for the given host. // Host may be an IP or a DNS name // You may also specify additional subject alt names (either ip or dns names) for the certificate. @@ -244,7 +181,7 @@ func GenerateSelfSignedCertKeyWithFixtures(host string, alternateIPs []net.IP, a // Generate key keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + if err := pem.Encode(&keyBuffer, &pem.Block{Type: keyutil.RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { return nil, nil, err } diff --git a/vendor/k8s.io/client-go/util/cert/io.go b/vendor/k8s.io/client-go/util/cert/io.go index a57bf09d5eb..5efb2489487 100644 --- a/vendor/k8s.io/client-go/util/cert/io.go +++ b/vendor/k8s.io/client-go/util/cert/io.go @@ -17,11 +17,7 @@ limitations under the License. package cert import ( - "crypto" - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" - "encoding/pem" "fmt" "io/ioutil" "os" @@ -73,60 +69,6 @@ func WriteCert(certPath string, data []byte) error { return ioutil.WriteFile(certPath, data, os.FileMode(0644)) } -// WriteKey writes the pem-encoded key data to keyPath. -// The key file will be created with file mode 0600. -// If the key file already exists, it will be overwritten. -// The parent directory of the keyPath will be created as needed with file mode 0755. -func WriteKey(keyPath string, data []byte) error { - if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { - return err - } - return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) -} - -// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it -// can't find one, it will generate a new key and store it there. -func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { - loadedData, err := ioutil.ReadFile(keyPath) - // Call verifyKeyData to ensure the file wasn't empty/corrupt. - if err == nil && verifyKeyData(loadedData) { - return loadedData, false, err - } - if !os.IsNotExist(err) { - return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) - } - - generatedData, err := MakeEllipticPrivateKeyPEM() - if err != nil { - return nil, false, fmt.Errorf("error generating key: %v", err) - } - if err := WriteKey(keyPath, generatedData); err != nil { - return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) - } - return generatedData, true, nil -} - -// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to -// a PEM encoded block or returns an error. -func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { - switch t := privateKey.(type) { - case *ecdsa.PrivateKey: - derBytes, err := x509.MarshalECPrivateKey(t) - if err != nil { - return nil, err - } - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, - } - return pem.EncodeToMemory(privateKeyPemBlock), nil - case *rsa.PrivateKey: - return EncodePrivateKeyPEM(t), nil - default: - return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) - } -} - // NewPool returns an x509.CertPool containing the certificates in the given PEM-encoded file. // Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates func NewPool(filename string) (*x509.CertPool, error) { @@ -154,40 +96,3 @@ func CertsFromFile(file string) ([]*x509.Certificate, error) { } return certs, nil } - -// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. -// Returns an error if the file could not be read or if the private key could not be parsed. -func PrivateKeyFromFile(file string) (interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - key, err := ParsePrivateKeyPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading private key file %s: %v", file, err) - } - return key, nil -} - -// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. -// Reads public keys from both public and private key files. -func PublicKeysFromFile(file string) ([]interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - keys, err := ParsePublicKeysPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading public key file %s: %v", file, err) - } - return keys, nil -} - -// verifyKeyData returns true if the provided data appears to be a valid private key. -func verifyKeyData(data []byte) bool { - if len(data) == 0 { - return false - } - _, err := ParsePrivateKeyPEM(data) - return err == nil -} diff --git a/vendor/k8s.io/client-go/util/cert/pem.go b/vendor/k8s.io/client-go/util/cert/pem.go index b99e366519c..9185e2e22d8 100644 --- a/vendor/k8s.io/client-go/util/cert/pem.go +++ b/vendor/k8s.io/client-go/util/cert/pem.go @@ -17,136 +17,18 @@ limitations under the License. package cert import ( - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" "encoding/pem" "errors" - "fmt" ) const ( - // ECPrivateKeyBlockType is a possible value for pem.Block.Type. - ECPrivateKeyBlockType = "EC PRIVATE KEY" - // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. - RSAPrivateKeyBlockType = "RSA PRIVATE KEY" - // PrivateKeyBlockType is a possible value for pem.Block.Type. - PrivateKeyBlockType = "PRIVATE KEY" - // PublicKeyBlockType is a possible value for pem.Block.Type. - PublicKeyBlockType = "PUBLIC KEY" // CertificateBlockType is a possible value for pem.Block.Type. CertificateBlockType = "CERTIFICATE" // CertificateRequestBlockType is a possible value for pem.Block.Type. CertificateRequestBlockType = "CERTIFICATE REQUEST" ) -// EncodePublicKeyPEM returns PEM-encoded public data -func EncodePublicKeyPEM(key *rsa.PublicKey) ([]byte, error) { - der, err := x509.MarshalPKIXPublicKey(key) - if err != nil { - return []byte{}, err - } - block := pem.Block{ - Type: PublicKeyBlockType, - Bytes: der, - } - return pem.EncodeToMemory(&block), nil -} - -// EncodePrivateKeyPEM returns PEM-encoded private key data -func EncodePrivateKeyPEM(key *rsa.PrivateKey) []byte { - block := pem.Block{ - Type: RSAPrivateKeyBlockType, - Bytes: x509.MarshalPKCS1PrivateKey(key), - } - return pem.EncodeToMemory(&block) -} - -// EncodeCertPEM returns PEM-endcoded certificate data -func EncodeCertPEM(cert *x509.Certificate) []byte { - block := pem.Block{ - Type: CertificateBlockType, - Bytes: cert.Raw, - } - return pem.EncodeToMemory(&block) -} - -// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. -// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" -func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { - var privateKeyPemBlock *pem.Block - for { - privateKeyPemBlock, keyData = pem.Decode(keyData) - if privateKeyPemBlock == nil { - break - } - - switch privateKeyPemBlock.Type { - case ECPrivateKeyBlockType: - // ECDSA Private Key in ASN.1 format - if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case RSAPrivateKeyBlockType: - // RSA Private Key in PKCS#1 format - if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case PrivateKeyBlockType: - // RSA or ECDSA Private Key in unencrypted PKCS#8 format - if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - } - - // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks - // originally, only the first PEM block was parsed and expected to be a key block - } - - // we read all the PEM blocks and didn't recognize one - return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") -} - -// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. -// Reads public keys from both public and private key files. -func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { - var block *pem.Block - keys := []interface{}{} - for { - // read the next block - block, keyData = pem.Decode(keyData) - if block == nil { - break - } - - // test block against parsing functions - if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseECPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - - // tolerate non-key PEM blocks for backwards compatibility - // originally, only the first PEM block was parsed and expected to be a key block - } - - if len(keys) == 0 { - return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") - } - return keys, nil -} - // ParseCertsPEM returns the x509.Certificates contained in the given PEM-encoded byte array // Returns an error if a certificate could not be parsed, or if the data does not contain any certificates func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { @@ -177,93 +59,3 @@ func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { } return certs, nil } - -// parseRSAPublicKey parses a single RSA public key from the provided data -func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an RSA Public Key - var pubKey *rsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") - } - - return pubKey, nil -} - -// parseRSAPrivateKey parses a single RSA private key from the provided data -func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { - return nil, err - } - } - - // Test if parsed key is an RSA Private Key - var privKey *rsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") - } - - return privKey, nil -} - -// parseECPublicKey parses a single ECDSA public key from the provided data -func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an ECDSA Public Key - var pubKey *ecdsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") - } - - return pubKey, nil -} - -// parseECPrivateKey parses a single ECDSA private key from the provided data -func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { - return nil, err - } - - // Test if parsed key is an ECDSA Private Key - var privKey *ecdsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") - } - - return privKey, nil -} diff --git a/vendor/k8s.io/client-go/util/certificate/BUILD b/vendor/k8s.io/client-go/util/certificate/BUILD index f204883af91..44cde57dbea 100644 --- a/vendor/k8s.io/client-go/util/certificate/BUILD +++ b/vendor/k8s.io/client-go/util/certificate/BUILD @@ -15,13 +15,11 @@ go_test( "certificate_store_test.go", ], embed = [":go_default_library"], - tags = ["automanaged"], deps = [ "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", ], @@ -35,7 +33,6 @@ go_library( ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/certificate", importpath = "k8s.io/client-go/util/certificate", - tags = ["automanaged"], deps = [ "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", @@ -45,6 +42,7 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/client-go/util/certificate/csr:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/util/certificate/OWNERS b/vendor/k8s.io/client-go/util/certificate/OWNERS index 470b7a1c92d..3cf03643835 100644 --- a/vendor/k8s.io/client-go/util/certificate/OWNERS +++ b/vendor/k8s.io/client-go/util/certificate/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/client-go/util/certificate/certificate_manager.go b/vendor/k8s.io/client-go/util/certificate/certificate_manager.go index ed74559e203..5aa232a42af 100644 --- a/vendor/k8s.io/client-go/util/certificate/certificate_manager.go +++ b/vendor/k8s.io/client-go/util/certificate/certificate_manager.go @@ -38,21 +38,21 @@ import ( certificatesclient "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" "k8s.io/client-go/util/cert" "k8s.io/client-go/util/certificate/csr" + "k8s.io/client-go/util/keyutil" ) -// certificateWaitBackoff controls the amount and timing of retries when the -// watch for certificate approval is interrupted. -var certificateWaitBackoff = wait.Backoff{Duration: 30 * time.Second, Steps: 4, Factor: 1.5, Jitter: 0.1} +// certificateWaitTimeout controls the amount of time we wait for certificate +// approval in one iteration. +var certificateWaitTimeout = 15 * time.Minute // Manager maintains and updates the certificates in use by this certificate // manager. In the background it communicates with the API server to get new // certificates for certificates about to expire. type Manager interface { - // CertificateSigningRequestClient sets the client interface that is used for - // signing new certificates generated as part of rotation. - SetCertificateSigningRequestClient(certificatesclient.CertificateSigningRequestInterface) error // Start the API server status sync loop. Start() + // Stop the cert manager loop. + Stop() // Current returns the currently selected certificate from the // certificate manager, as well as the associated certificate and key data // in PEM format. @@ -67,11 +67,11 @@ type Manager interface { // Config is the set of configuration parameters available for a new Manager. type Config struct { - // CertificateSigningRequestClient will be used for signing new certificate - // requests generated when a key rotation occurs. It must be set either at - // initialization or by using CertificateSigningRequestClient before - // Manager.Start() is called. - CertificateSigningRequestClient certificatesclient.CertificateSigningRequestInterface + // ClientFn will be used to create a client for + // signing new certificate requests generated when a key rotation occurs. + // It must be set at initialization. The function will never be invoked + // in parallel. It is passed the current client certificate if one exists. + ClientFn CSRClientFunc // Template is the CertificateRequest that will be used as a template for // generating certificate signing requests for all new keys generated as // part of rotation. It follows the same rules as the template parameter of @@ -141,21 +141,34 @@ type Gauge interface { // NoCertKeyError indicates there is no cert/key currently available. type NoCertKeyError string +// CSRClientFunc returns a new client for requesting CSRs. It passes the +// current certificate if one is available and valid. +type CSRClientFunc func(current *tls.Certificate) (certificatesclient.CertificateSigningRequestInterface, error) + func (e *NoCertKeyError) Error() string { return string(*e) } type manager struct { - certSigningRequestClient certificatesclient.CertificateSigningRequestInterface - getTemplate func() *x509.CertificateRequest - lastRequestLock sync.Mutex - lastRequest *x509.CertificateRequest - dynamicTemplate bool - usages []certificates.KeyUsage - certStore Store - certAccessLock sync.RWMutex - cert *tls.Certificate - forceRotation bool - certificateExpiration Gauge - serverHealth bool + getTemplate func() *x509.CertificateRequest + lastRequestLock sync.Mutex + lastRequest *x509.CertificateRequest + dynamicTemplate bool + usages []certificates.KeyUsage + forceRotation bool + + certStore Store + + certificateExpiration Gauge + + // the following variables must only be accessed under certAccessLock + certAccessLock sync.RWMutex + cert *tls.Certificate + serverHealth bool + + // the clientFn must only be accessed under the clientAccessLock + clientAccessLock sync.Mutex + clientFn CSRClientFunc + stopCh chan struct{} + stopped bool } // NewManager returns a new certificate manager. A certificate manager is @@ -176,14 +189,15 @@ func NewManager(config *Config) (Manager, error) { } m := manager{ - certSigningRequestClient: config.CertificateSigningRequestClient, - getTemplate: getTemplate, - dynamicTemplate: config.GetTemplate != nil, - usages: config.Usages, - certStore: config.CertificateStore, - cert: cert, - forceRotation: forceRotation, - certificateExpiration: config.CertificateExpiration, + stopCh: make(chan struct{}), + clientFn: config.ClientFn, + getTemplate: getTemplate, + dynamicTemplate: config.GetTemplate != nil, + usages: config.Usages, + certStore: config.CertificateStore, + cert: cert, + forceRotation: forceRotation, + certificateExpiration: config.CertificateExpiration, } return &m, nil @@ -192,10 +206,14 @@ func NewManager(config *Config) (Manager, error) { // Current returns the currently selected certificate from the certificate // manager. This can be nil if the manager was initialized without a // certificate and has not yet received one from the -// CertificateSigningRequestClient. +// CertificateSigningRequestClient, or if the current cert has expired. func (m *manager) Current() *tls.Certificate { m.certAccessLock.RLock() defer m.certAccessLock.RUnlock() + if m.cert != nil && m.cert.Leaf != nil && time.Now().After(m.cert.Leaf.NotAfter) { + klog.V(2).Infof("Current certificate is expired.") + return nil + } return m.cert } @@ -207,18 +225,15 @@ func (m *manager) ServerHealthy() bool { return m.serverHealth } -// SetCertificateSigningRequestClient sets the client interface that is used -// for signing new certificates generated as part of rotation. It must be -// called before Start() and can not be used to change the -// CertificateSigningRequestClient that has already been set. This method is to -// support the one specific scenario where the CertificateSigningRequestClient -// uses the CertificateManager. -func (m *manager) SetCertificateSigningRequestClient(certSigningRequestClient certificatesclient.CertificateSigningRequestInterface) error { - if m.certSigningRequestClient == nil { - m.certSigningRequestClient = certSigningRequestClient - return nil +// Stop terminates the manager. +func (m *manager) Stop() { + m.clientAccessLock.Lock() + defer m.clientAccessLock.Unlock() + if m.stopped { + return } - return fmt.Errorf("property CertificateSigningRequestClient is already set") + close(m.stopCh) + m.stopped = true } // Start will start the background work of rotating the certificates. @@ -226,7 +241,7 @@ func (m *manager) Start() { // Certificate rotation depends on access to the API server certificate // signing API, so don't start the certificate manager if we don't have a // client. - if m.certSigningRequestClient == nil { + if m.clientFn == nil { klog.V(2).Infof("Certificate rotation is not enabled, no connection to the apiserver.") return } @@ -234,7 +249,7 @@ func (m *manager) Start() { klog.V(2).Infof("Certificate rotation is enabled.") templateChanged := make(chan struct{}) - go wait.Forever(func() { + go wait.Until(func() { deadline := m.nextRotationDeadline() if sleepInterval := deadline.Sub(time.Now()); sleepInterval > 0 { klog.V(2).Infof("Waiting %v for next certificate rotation", sleepInterval) @@ -269,17 +284,17 @@ func (m *manager) Start() { utilruntime.HandleError(fmt.Errorf("Reached backoff limit, still unable to rotate certs: %v", err)) wait.PollInfinite(32*time.Second, m.rotateCerts) } - }, time.Second) + }, time.Second, m.stopCh) if m.dynamicTemplate { - go wait.Forever(func() { + go wait.Until(func() { // check if the current template matches what we last requested if !m.certSatisfiesTemplate() && !reflect.DeepEqual(m.getLastRequest(), m.getTemplate()) { // if the template is different, queue up an interrupt of the rotation deadline loop. // if we've requested a CSR that matches the new template by the time the interrupt is handled, the interrupt is disregarded. templateChanged <- struct{}{} } - }, time.Second) + }, time.Second, m.stopCh) } } @@ -327,11 +342,26 @@ func getCurrentCertificateOrBootstrap( return &bootstrapCert, true, nil } +func (m *manager) getClient() (certificatesclient.CertificateSigningRequestInterface, error) { + current := m.Current() + m.clientAccessLock.Lock() + defer m.clientAccessLock.Unlock() + return m.clientFn(current) +} + +// RotateCerts is exposed for testing only and is not a part of the public interface. +// Returns true if it changed the cert, false otherwise. Error is only returned in +// exceptional cases. +func (m *manager) RotateCerts() (bool, error) { + return m.rotateCerts() +} + // rotateCerts attempts to request a client cert from the server, wait a reasonable // period of time for it to be signed, and then update the cert on disk. If it cannot // retrieve a cert, it will return false. It will only return error in exceptional cases. // This method also keeps track of "server health" by interpreting the responses it gets // from the server on the various calls it makes. +// TODO: return errors, have callers handle and log them correctly func (m *manager) rotateCerts() (bool, error) { klog.V(2).Infof("Rotating certificates") @@ -341,9 +371,16 @@ func (m *manager) rotateCerts() (bool, error) { return false, nil } + // request the client each time + client, err := m.getClient() + if err != nil { + utilruntime.HandleError(fmt.Errorf("Unable to load a client to request certificates: %v", err)) + return false, nil + } + // Call the Certificate Signing Request API to get a certificate for the // new private key. - req, err := csr.RequestCertificate(m.certSigningRequestClient, csrPEM, "", m.usages, privateKey) + req, err := csr.RequestCertificate(client, csrPEM, "", m.usages, privateKey) if err != nil { utilruntime.HandleError(fmt.Errorf("Failed while requesting a signed certificate from the master: %v", err)) return false, m.updateServerError(err) @@ -352,29 +389,10 @@ func (m *manager) rotateCerts() (bool, error) { // Once we've successfully submitted a CSR for this template, record that we did so m.setLastRequest(template) - // Wait for the certificate to be signed. Instead of one long watch, we retry with slightly longer - // intervals each time in order to tolerate failures from the server AND to preserve the liveliness - // of the cert manager loop. This creates slightly more traffic against the API server in return - // for bounding the amount of time we wait when a certificate expires. - var crtPEM []byte - watchDuration := time.Minute - if err := wait.ExponentialBackoff(certificateWaitBackoff, func() (bool, error) { - data, err := csr.WaitForCertificate(m.certSigningRequestClient, req, watchDuration) - switch { - case err == nil: - crtPEM = data - return true, nil - case err == wait.ErrWaitTimeout: - watchDuration += time.Minute - if watchDuration > 5*time.Minute { - watchDuration = 5 * time.Minute - } - return false, nil - default: - utilruntime.HandleError(fmt.Errorf("Unable to check certificate signing status: %v", err)) - return false, m.updateServerError(err) - } - }); err != nil { + // Wait for the certificate to be signed. This interface and internal timout + // is a remainder after the old design using raw watch wrapped with backoff. + crtPEM, err := csr.WaitForCertificate(client, req, certificateWaitTimeout) + if err != nil { utilruntime.HandleError(fmt.Errorf("Certificate request was not signed: %v", err)) return false, nil } @@ -530,7 +548,7 @@ func (m *manager) generateCSR() (template *x509.CertificateRequest, csrPEM []byt return nil, nil, nil, nil, fmt.Errorf("unable to marshal the new key to DER: %v", err) } - keyPEM = pem.EncodeToMemory(&pem.Block{Type: cert.ECPrivateKeyBlockType, Bytes: der}) + keyPEM = pem.EncodeToMemory(&pem.Block{Type: keyutil.ECPrivateKeyBlockType, Bytes: der}) template = m.getTemplate() if template == nil { diff --git a/vendor/k8s.io/client-go/util/certificate/csr/csr.go b/vendor/k8s.io/client-go/util/certificate/csr/csr.go index 6338eef9331..1c8d0eb89c7 100644 --- a/vendor/k8s.io/client-go/util/certificate/csr/csr.go +++ b/vendor/k8s.io/client-go/util/certificate/csr/csr.go @@ -17,6 +17,7 @@ limitations under the License. package csr import ( + "context" "crypto" "crypto/x509" "encoding/pem" @@ -83,19 +84,23 @@ func RequestCertificate(client certificatesclient.CertificateSigningRequestInter // WaitForCertificate waits for a certificate to be issued until timeout, or returns an error. func WaitForCertificate(client certificatesclient.CertificateSigningRequestInterface, req *certificates.CertificateSigningRequest, timeout time.Duration) (certData []byte, err error) { fieldSelector := fields.OneTermEqualSelector("metadata.name", req.Name).String() - - event, err := watchtools.ListWatchUntil( - timeout, - &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - options.FieldSelector = fieldSelector - return client.List(options) - }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - options.FieldSelector = fieldSelector - return client.Watch(options) - }, + lw := &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + options.FieldSelector = fieldSelector + return client.List(options) }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + options.FieldSelector = fieldSelector + return client.Watch(options) + }, + } + ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), timeout) + defer cancel() + event, err := watchtools.UntilWithSync( + ctx, + lw, + &certificates.CertificateSigningRequest{}, + nil, func(event watch.Event) (bool, error) { switch event.Type { case watch.Modified, watch.Added: diff --git a/vendor/k8s.io/client-go/util/flowcontrol/BUILD b/vendor/k8s.io/client-go/util/flowcontrol/BUILD index a67ac494f0d..526e8db020f 100644 --- a/vendor/k8s.io/client-go/util/flowcontrol/BUILD +++ b/vendor/k8s.io/client-go/util/flowcontrol/BUILD @@ -26,8 +26,8 @@ go_library( importpath = "k8s.io/client-go/util/flowcontrol", deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//vendor/golang.org/x/time/rate:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/util/flowcontrol/backoff.go b/vendor/k8s.io/client-go/util/flowcontrol/backoff.go index 71d442a62b4..b7cb70ea747 100644 --- a/vendor/k8s.io/client-go/util/flowcontrol/backoff.go +++ b/vendor/k8s.io/client-go/util/flowcontrol/backoff.go @@ -21,7 +21,7 @@ import ( "time" "k8s.io/apimachinery/pkg/util/clock" - "k8s.io/client-go/util/integer" + "k8s.io/utils/integer" ) type backoffEntry struct { diff --git a/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go b/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go index 6633ca0d651..a5a8bbf7a37 100644 --- a/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go +++ b/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go @@ -255,10 +255,9 @@ func (j *JSONPath) evalArray(input []reflect.Value, node *ArrayNode) ([]reflect. params[1].Value = value.Len() } - if params[1].Value < 0 { + if params[1].Value < 0 || (params[1].Value == 0 && params[1].Derived) { params[1].Value += value.Len() } - sliceLength := value.Len() if params[1].Value != params[0].Value { // if you're requesting zero elements, allow it through. if params[0].Value >= sliceLength || params[0].Value < 0 { @@ -267,14 +266,23 @@ func (j *JSONPath) evalArray(input []reflect.Value, node *ArrayNode) ([]reflect. if params[1].Value > sliceLength || params[1].Value < 0 { return input, fmt.Errorf("array index out of bounds: index %d, length %d", params[1].Value-1, sliceLength) } + if params[0].Value > params[1].Value { + return input, fmt.Errorf("starting index %d is greater than ending index %d", params[0].Value, params[1].Value) + } + } else { + return result, nil } - if !params[2].Known { - value = value.Slice(params[0].Value, params[1].Value) - } else { - value = value.Slice3(params[0].Value, params[1].Value, params[2].Value) + value = value.Slice(params[0].Value, params[1].Value) + + step := 1 + if params[2].Known { + if params[2].Value <= 0 { + return input, fmt.Errorf("step must be > 0") + } + step = params[2].Value } - for i := 0; i < value.Len(); i++ { + for i := 0; i < value.Len(); i += step { result = append(result, value.Index(i)) } } diff --git a/vendor/k8s.io/client-go/util/jsonpath/node.go b/vendor/k8s.io/client-go/util/jsonpath/node.go index 2f612b188fb..83abe8b0377 100644 --- a/vendor/k8s.io/client-go/util/jsonpath/node.go +++ b/vendor/k8s.io/client-go/util/jsonpath/node.go @@ -130,8 +130,9 @@ func (f *IdentifierNode) String() string { // ParamsEntry holds param information for ArrayNode type ParamsEntry struct { - Value int - Known bool // whether the value is known when parse it + Value int + Known bool // whether the value is known when parse it + Derived bool } // ArrayNode holds start, end, step information for array index selection diff --git a/vendor/k8s.io/client-go/util/jsonpath/parser.go b/vendor/k8s.io/client-go/util/jsonpath/parser.go index 99b45849c98..1af8f269f7e 100644 --- a/vendor/k8s.io/client-go/util/jsonpath/parser.go +++ b/vendor/k8s.io/client-go/util/jsonpath/parser.go @@ -46,7 +46,7 @@ type Parser struct { var ( ErrSyntax = errors.New("invalid syntax") dictKeyRex = regexp.MustCompile(`^'([^']*)'$`) - sliceOperatorRex = regexp.MustCompile(`^(-?[\d]*)(:-?[\d]*)?(:[\d]*)?$`) + sliceOperatorRex = regexp.MustCompile(`^(-?[\d]*)(:-?[\d]*)?(:-?[\d]*)?$`) ) // Parse parsed the given text and return a node Parser. @@ -325,6 +325,7 @@ Loop: if i == 1 { params[i].Known = true params[i].Value = params[0].Value + 1 + params[i].Derived = true } else { params[i].Known = false params[i].Value = 0 diff --git a/vendor/k8s.io/client-go/util/integer/BUILD b/vendor/k8s.io/client-go/util/keyutil/BUILD similarity index 82% rename from vendor/k8s.io/client-go/util/integer/BUILD rename to vendor/k8s.io/client-go/util/keyutil/BUILD index 338cd1b8192..52793c68f99 100644 --- a/vendor/k8s.io/client-go/util/integer/BUILD +++ b/vendor/k8s.io/client-go/util/keyutil/BUILD @@ -8,15 +8,15 @@ load( go_test( name = "go_default_test", - srcs = ["integer_test.go"], + srcs = ["key_test.go"], embed = [":go_default_library"], ) go_library( name = "go_default_library", - srcs = ["integer.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/integer", - importpath = "k8s.io/client-go/util/integer", + srcs = ["key.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/keyutil", + importpath = "k8s.io/client-go/util/keyutil", ) filegroup( diff --git a/vendor/k8s.io/client-go/util/keyutil/OWNERS b/vendor/k8s.io/client-go/util/keyutil/OWNERS new file mode 100644 index 00000000000..470b7a1c92d --- /dev/null +++ b/vendor/k8s.io/client-go/util/keyutil/OWNERS @@ -0,0 +1,7 @@ +approvers: +- sig-auth-certificates-approvers +reviewers: +- sig-auth-certificates-reviewers +labels: +- sig/auth + diff --git a/vendor/k8s.io/client-go/util/keyutil/key.go b/vendor/k8s.io/client-go/util/keyutil/key.go new file mode 100644 index 00000000000..83c2c6254e0 --- /dev/null +++ b/vendor/k8s.io/client-go/util/keyutil/key.go @@ -0,0 +1,323 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package keyutil contains utilities for managing public/private key pairs. +package keyutil + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "fmt" + "io/ioutil" + "os" + "path/filepath" +) + +const ( + // ECPrivateKeyBlockType is a possible value for pem.Block.Type. + ECPrivateKeyBlockType = "EC PRIVATE KEY" + // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. + RSAPrivateKeyBlockType = "RSA PRIVATE KEY" + // PrivateKeyBlockType is a possible value for pem.Block.Type. + PrivateKeyBlockType = "PRIVATE KEY" + // PublicKeyBlockType is a possible value for pem.Block.Type. + PublicKeyBlockType = "PUBLIC KEY" +) + +// MakeEllipticPrivateKeyPEM creates an ECDSA private key +func MakeEllipticPrivateKeyPEM() ([]byte, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) + if err != nil { + return nil, err + } + + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return nil, err + } + + privateKeyPemBlock := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil +} + +// WriteKey writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKey(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) +} + +// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it +// can't find one, it will generate a new key and store it there. +func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { + loadedData, err := ioutil.ReadFile(keyPath) + // Call verifyKeyData to ensure the file wasn't empty/corrupt. + if err == nil && verifyKeyData(loadedData) { + return loadedData, false, err + } + if !os.IsNotExist(err) { + return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) + } + + generatedData, err := MakeEllipticPrivateKeyPEM() + if err != nil { + return nil, false, fmt.Errorf("error generating key: %v", err) + } + if err := WriteKey(keyPath, generatedData); err != nil { + return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) + } + return generatedData, true, nil +} + +// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to +// a PEM encoded block or returns an error. +func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { + switch t := privateKey.(type) { + case *ecdsa.PrivateKey: + derBytes, err := x509.MarshalECPrivateKey(t) + if err != nil { + return nil, err + } + block := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(block), nil + case *rsa.PrivateKey: + block := &pem.Block{ + Type: RSAPrivateKeyBlockType, + Bytes: x509.MarshalPKCS1PrivateKey(t), + } + return pem.EncodeToMemory(block), nil + default: + return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) + } +} + +// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. +// Returns an error if the file could not be read or if the private key could not be parsed. +func PrivateKeyFromFile(file string) (interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + key, err := ParsePrivateKeyPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading private key file %s: %v", file, err) + } + return key, nil +} + +// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. +// Reads public keys from both public and private key files. +func PublicKeysFromFile(file string) ([]interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + keys, err := ParsePublicKeysPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading public key file %s: %v", file, err) + } + return keys, nil +} + +// verifyKeyData returns true if the provided data appears to be a valid private key. +func verifyKeyData(data []byte) bool { + if len(data) == 0 { + return false + } + _, err := ParsePrivateKeyPEM(data) + return err == nil +} + +// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. +// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" +func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { + var privateKeyPemBlock *pem.Block + for { + privateKeyPemBlock, keyData = pem.Decode(keyData) + if privateKeyPemBlock == nil { + break + } + + switch privateKeyPemBlock.Type { + case ECPrivateKeyBlockType: + // ECDSA Private Key in ASN.1 format + if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case RSAPrivateKeyBlockType: + // RSA Private Key in PKCS#1 format + if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case PrivateKeyBlockType: + // RSA or ECDSA Private Key in unencrypted PKCS#8 format + if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + } + + // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks + // originally, only the first PEM block was parsed and expected to be a key block + } + + // we read all the PEM blocks and didn't recognize one + return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") +} + +// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. +// Reads public keys from both public and private key files. +func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { + var block *pem.Block + keys := []interface{}{} + for { + // read the next block + block, keyData = pem.Decode(keyData) + if block == nil { + break + } + + // test block against parsing functions + if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseECPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + + // tolerate non-key PEM blocks for backwards compatibility + // originally, only the first PEM block was parsed and expected to be a key block + } + + if len(keys) == 0 { + return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") + } + return keys, nil +} + +// parseRSAPublicKey parses a single RSA public key from the provided data +func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an RSA Public Key + var pubKey *rsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") + } + + return pubKey, nil +} + +// parseRSAPrivateKey parses a single RSA private key from the provided data +func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { + return nil, err + } + } + + // Test if parsed key is an RSA Private Key + var privKey *rsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") + } + + return privKey, nil +} + +// parseECPublicKey parses a single ECDSA public key from the provided data +func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an ECDSA Public Key + var pubKey *ecdsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") + } + + return pubKey, nil +} + +// parseECPrivateKey parses a single ECDSA private key from the provided data +func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { + return nil, err + } + + // Test if parsed key is an ECDSA Private Key + var privKey *ecdsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") + } + + return privKey, nil +} diff --git a/vendor/k8s.io/client-go/util/retry/OWNERS b/vendor/k8s.io/client-go/util/retry/OWNERS old mode 100755 new mode 100644 index a4c1c2d4f8c..dec3e88d631 --- a/vendor/k8s.io/client-go/util/retry/OWNERS +++ b/vendor/k8s.io/client-go/util/retry/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - caesarxuchao diff --git a/vendor/k8s.io/client-go/util/workqueue/BUILD b/vendor/k8s.io/client-go/util/workqueue/BUILD index ff0e87a7c75..a298ba0710f 100644 --- a/vendor/k8s.io/client-go/util/workqueue/BUILD +++ b/vendor/k8s.io/client-go/util/workqueue/BUILD @@ -13,7 +13,7 @@ go_test( "delaying_queue_test.go", "metrics_test.go", "queue_test.go", - "rate_limitting_queue_test.go", + "rate_limiting_queue_test.go", ], embed = [":go_default_library"], deps = [ @@ -31,7 +31,7 @@ go_library( "metrics.go", "parallelizer.go", "queue.go", - "rate_limitting_queue.go", + "rate_limiting_queue.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/workqueue", importpath = "k8s.io/client-go/util/workqueue", diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go index a5bed29e007..71bb6322e07 100644 --- a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go +++ b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go @@ -35,7 +35,7 @@ type RateLimiter interface { } // DefaultControllerRateLimiter is a no-arg constructor for a default rate limiter for a workqueue. It has -// both overall and per-item rate limitting. The overall is a token bucket and the per-item is exponential +// both overall and per-item rate limiting. The overall is a token bucket and the per-item is exponential func DefaultControllerRateLimiter() RateLimiter { return NewMaxOfRateLimiter( NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), @@ -62,7 +62,7 @@ func (r *BucketRateLimiter) NumRequeues(item interface{}) int { func (r *BucketRateLimiter) Forget(item interface{}) { } -// ItemExponentialFailureRateLimiter does a simple baseDelay*10^ limit +// ItemExponentialFailureRateLimiter does a simple baseDelay*2^ limit // dealing with max failures and expiration are up to the caller type ItemExponentialFailureRateLimiter struct { failuresLock sync.Mutex diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go index a37177425d7..bd654bf3112 100644 --- a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -43,12 +43,13 @@ func NewNamedDelayingQueue(name string) DelayingInterface { func newDelayingQueue(clock clock.Clock, name string) DelayingInterface { ret := &delayingType{ - Interface: NewNamed(name), - clock: clock, - heartbeat: clock.NewTicker(maxWait), - stopCh: make(chan struct{}), - waitingForAddCh: make(chan *waitFor, 1000), - metrics: newRetryMetrics(name), + Interface: NewNamed(name), + clock: clock, + heartbeat: clock.NewTicker(maxWait), + stopCh: make(chan struct{}), + waitingForAddCh: make(chan *waitFor, 1000), + metrics: newRetryMetrics(name), + deprecatedMetrics: newDeprecatedRetryMetrics(name), } go ret.waitingLoop() @@ -73,7 +74,8 @@ type delayingType struct { waitingForAddCh chan *waitFor // metrics counts the number of retries - metrics retryMetrics + metrics retryMetrics + deprecatedMetrics retryMetrics } // waitFor holds the data to add and the time it should be added @@ -146,6 +148,7 @@ func (q *delayingType) AddAfter(item interface{}, duration time.Duration) { } q.metrics.retry() + q.deprecatedMetrics.retry() // immediately add things with no delay if duration <= 0 { diff --git a/vendor/k8s.io/client-go/util/workqueue/metrics.go b/vendor/k8s.io/client-go/util/workqueue/metrics.go index d4c03d8378f..be23ddd05f7 100644 --- a/vendor/k8s.io/client-go/util/workqueue/metrics.go +++ b/vendor/k8s.io/client-go/util/workqueue/metrics.go @@ -57,6 +57,11 @@ type SummaryMetric interface { Observe(float64) } +// HistogramMetric counts individual observations. +type HistogramMetric interface { + Observe(float64) +} + type noopMetric struct{} func (noopMetric) Inc() {} @@ -73,15 +78,23 @@ type defaultQueueMetrics struct { // total number of adds handled by a workqueue adds CounterMetric // how long an item stays in a workqueue - latency SummaryMetric + latency HistogramMetric // how long processing an item from a workqueue takes - workDuration SummaryMetric + workDuration HistogramMetric addTimes map[t]time.Time processingStartTimes map[t]time.Time // how long have current threads been working? unfinishedWorkSeconds SettableGaugeMetric longestRunningProcessor SettableGaugeMetric + + // TODO(danielqsj): Remove the following metrics, they are deprecated + deprecatedDepth GaugeMetric + deprecatedAdds CounterMetric + deprecatedLatency SummaryMetric + deprecatedWorkDuration SummaryMetric + deprecatedUnfinishedWorkSeconds SettableGaugeMetric + deprecatedLongestRunningProcessor SettableGaugeMetric } func (m *defaultQueueMetrics) add(item t) { @@ -90,7 +103,9 @@ func (m *defaultQueueMetrics) add(item t) { } m.adds.Inc() + m.deprecatedAdds.Inc() m.depth.Inc() + m.deprecatedDepth.Inc() if _, exists := m.addTimes[item]; !exists { m.addTimes[item] = m.clock.Now() } @@ -102,9 +117,11 @@ func (m *defaultQueueMetrics) get(item t) { } m.depth.Dec() + m.deprecatedDepth.Dec() m.processingStartTimes[item] = m.clock.Now() if startTime, exists := m.addTimes[item]; exists { - m.latency.Observe(m.sinceInMicroseconds(startTime)) + m.latency.Observe(m.sinceInSeconds(startTime)) + m.deprecatedLatency.Observe(m.sinceInMicroseconds(startTime)) delete(m.addTimes, item) } } @@ -115,7 +132,8 @@ func (m *defaultQueueMetrics) done(item t) { } if startTime, exists := m.processingStartTimes[item]; exists { - m.workDuration.Observe(m.sinceInMicroseconds(startTime)) + m.workDuration.Observe(m.sinceInSeconds(startTime)) + m.deprecatedWorkDuration.Observe(m.sinceInMicroseconds(startTime)) delete(m.processingStartTimes, item) } } @@ -135,7 +153,9 @@ func (m *defaultQueueMetrics) updateUnfinishedWork() { // Convert to seconds; microseconds is unhelpfully granular for this. total /= 1000000 m.unfinishedWorkSeconds.Set(total) - m.longestRunningProcessor.Set(oldest) // in microseconds. + m.deprecatedUnfinishedWorkSeconds.Set(total) + m.longestRunningProcessor.Set(oldest / 1000000) + m.deprecatedLongestRunningProcessor.Set(oldest) // in microseconds. } type noMetrics struct{} @@ -150,6 +170,11 @@ func (m *defaultQueueMetrics) sinceInMicroseconds(start time.Time) float64 { return float64(m.clock.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } +// Gets the time since the specified start in seconds. +func (m *defaultQueueMetrics) sinceInSeconds(start time.Time) float64 { + return m.clock.Since(start).Seconds() +} + type retryMetrics interface { retry() } @@ -170,11 +195,18 @@ func (m *defaultRetryMetrics) retry() { type MetricsProvider interface { NewDepthMetric(name string) GaugeMetric NewAddsMetric(name string) CounterMetric - NewLatencyMetric(name string) SummaryMetric - NewWorkDurationMetric(name string) SummaryMetric + NewLatencyMetric(name string) HistogramMetric + NewWorkDurationMetric(name string) HistogramMetric NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric - NewLongestRunningProcessorMicrosecondsMetric(name string) SettableGaugeMetric + NewLongestRunningProcessorSecondsMetric(name string) SettableGaugeMetric NewRetriesMetric(name string) CounterMetric + NewDeprecatedDepthMetric(name string) GaugeMetric + NewDeprecatedAddsMetric(name string) CounterMetric + NewDeprecatedLatencyMetric(name string) SummaryMetric + NewDeprecatedWorkDurationMetric(name string) SummaryMetric + NewDeprecatedUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric + NewDeprecatedLongestRunningProcessorMicrosecondsMetric(name string) SettableGaugeMetric + NewDeprecatedRetriesMetric(name string) CounterMetric } type noopMetricsProvider struct{} @@ -187,11 +219,11 @@ func (_ noopMetricsProvider) NewAddsMetric(name string) CounterMetric { return noopMetric{} } -func (_ noopMetricsProvider) NewLatencyMetric(name string) SummaryMetric { +func (_ noopMetricsProvider) NewLatencyMetric(name string) HistogramMetric { return noopMetric{} } -func (_ noopMetricsProvider) NewWorkDurationMetric(name string) SummaryMetric { +func (_ noopMetricsProvider) NewWorkDurationMetric(name string) HistogramMetric { return noopMetric{} } @@ -199,7 +231,7 @@ func (_ noopMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) Settabl return noopMetric{} } -func (_ noopMetricsProvider) NewLongestRunningProcessorMicrosecondsMetric(name string) SettableGaugeMetric { +func (_ noopMetricsProvider) NewLongestRunningProcessorSecondsMetric(name string) SettableGaugeMetric { return noopMetric{} } @@ -207,6 +239,34 @@ func (_ noopMetricsProvider) NewRetriesMetric(name string) CounterMetric { return noopMetric{} } +func (_ noopMetricsProvider) NewDeprecatedDepthMetric(name string) GaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedAddsMetric(name string) CounterMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedLatencyMetric(name string) SummaryMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedWorkDurationMetric(name string) SummaryMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedLongestRunningProcessorMicrosecondsMetric(name string) SettableGaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewDeprecatedRetriesMetric(name string) CounterMetric { + return noopMetric{} +} + var globalMetricsFactory = queueMetricsFactory{ metricsProvider: noopMetricsProvider{}, } @@ -229,15 +289,21 @@ func (f *queueMetricsFactory) newQueueMetrics(name string, clock clock.Clock) qu return noMetrics{} } return &defaultQueueMetrics{ - clock: clock, - depth: mp.NewDepthMetric(name), - adds: mp.NewAddsMetric(name), - latency: mp.NewLatencyMetric(name), - workDuration: mp.NewWorkDurationMetric(name), - unfinishedWorkSeconds: mp.NewUnfinishedWorkSecondsMetric(name), - longestRunningProcessor: mp.NewLongestRunningProcessorMicrosecondsMetric(name), - addTimes: map[t]time.Time{}, - processingStartTimes: map[t]time.Time{}, + clock: clock, + depth: mp.NewDepthMetric(name), + adds: mp.NewAddsMetric(name), + latency: mp.NewLatencyMetric(name), + workDuration: mp.NewWorkDurationMetric(name), + unfinishedWorkSeconds: mp.NewUnfinishedWorkSecondsMetric(name), + longestRunningProcessor: mp.NewLongestRunningProcessorSecondsMetric(name), + deprecatedDepth: mp.NewDeprecatedDepthMetric(name), + deprecatedAdds: mp.NewDeprecatedAddsMetric(name), + deprecatedLatency: mp.NewDeprecatedLatencyMetric(name), + deprecatedWorkDuration: mp.NewDeprecatedWorkDurationMetric(name), + deprecatedUnfinishedWorkSeconds: mp.NewDeprecatedUnfinishedWorkSecondsMetric(name), + deprecatedLongestRunningProcessor: mp.NewDeprecatedLongestRunningProcessorMicrosecondsMetric(name), + addTimes: map[t]time.Time{}, + processingStartTimes: map[t]time.Time{}, } } @@ -251,6 +317,16 @@ func newRetryMetrics(name string) retryMetrics { } } +func newDeprecatedRetryMetrics(name string) retryMetrics { + var ret *defaultRetryMetrics + if len(name) == 0 { + return ret + } + return &defaultRetryMetrics{ + retries: globalMetricsFactory.metricsProvider.NewDeprecatedRetriesMetric(name), + } +} + // SetProvider sets the metrics provider for all subsequently created work // queues. Only the first call has an effect. func SetProvider(metricsProvider MetricsProvider) { diff --git a/vendor/k8s.io/client-go/util/workqueue/rate_limitting_queue.go b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go similarity index 100% rename from vendor/k8s.io/client-go/util/workqueue/rate_limitting_queue.go rename to vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go diff --git a/vendor/k8s.io/cloud-provider/plugins.go b/vendor/k8s.io/cloud-provider/plugins.go new file mode 100644 index 00000000000..d02a58eb9d4 --- /dev/null +++ b/vendor/k8s.io/cloud-provider/plugins.go @@ -0,0 +1,24 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudprovider + +const externalCloudProvider = "external" + +// Detects if the string is an external cloud provider +func IsExternal(name string) bool { + return name == externalCloudProvider +} diff --git a/vendor/k8s.io/cloud-provider/volume/BUILD b/vendor/k8s.io/cloud-provider/volume/BUILD new file mode 100644 index 00000000000..7e447e59b08 --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["constants.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/cloud-provider/volume", + importpath = "k8s.io/cloud-provider/volume", + visibility = ["//visibility:public"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/cloud-provider/volume/errors:all-srcs", + "//staging/src/k8s.io/cloud-provider/volume/helpers:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/cloud-provider/volume/constants.go b/vendor/k8s.io/cloud-provider/volume/constants.go new file mode 100644 index 00000000000..d05f64ae25d --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/constants.go @@ -0,0 +1,26 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package volume + +const ( + // ProvisionedVolumeName is the name of a volume in an external cloud + // that is being provisioned and thus should be ignored by rest of Kubernetes. + ProvisionedVolumeName = "placeholder-for-provisioning" + + // LabelMultiZoneDelimiter separates zones for volumes + LabelMultiZoneDelimiter = "__" +) diff --git a/vendor/k8s.io/cloud-provider/volume/errors/BUILD b/vendor/k8s.io/cloud-provider/volume/errors/BUILD new file mode 100644 index 00000000000..30deba0b0d8 --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/errors/BUILD @@ -0,0 +1,24 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["errors.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/cloud-provider/volume/errors", + importpath = "k8s.io/cloud-provider/volume/errors", + visibility = ["//visibility:public"], + deps = ["//staging/src/k8s.io/apimachinery/pkg/types:go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/error.go b/vendor/k8s.io/cloud-provider/volume/errors/errors.go similarity index 65% rename from vendor/k8s.io/kubernetes/pkg/volume/util/error.go rename to vendor/k8s.io/cloud-provider/volume/errors/errors.go index a52a1b65ce2..5202b4eb310 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/error.go +++ b/vendor/k8s.io/cloud-provider/volume/errors/errors.go @@ -14,12 +14,37 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package errors import ( k8stypes "k8s.io/apimachinery/pkg/types" ) +// NewDeletedVolumeInUseError returns a new instance of DeletedVolumeInUseError +// error. +func NewDeletedVolumeInUseError(message string) error { + return deletedVolumeInUseError(message) +} + +type deletedVolumeInUseError string + +var _ error = deletedVolumeInUseError("") + +// IsDeletedVolumeInUse returns true if an error returned from Delete() is +// deletedVolumeInUseError +func IsDeletedVolumeInUse(err error) bool { + switch err.(type) { + case deletedVolumeInUseError: + return true + default: + return false + } +} + +func (err deletedVolumeInUseError) Error() string { + return string(err) +} + // DanglingAttachError indicates volume is attached to a different node // than we expected. type DanglingAttachError struct { diff --git a/vendor/k8s.io/cloud-provider/volume/helpers/BUILD b/vendor/k8s.io/cloud-provider/volume/helpers/BUILD new file mode 100644 index 00000000000..03d159ae07b --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/helpers/BUILD @@ -0,0 +1,47 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "rounding.go", + "zones.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/cloud-provider/volume/helpers", + importpath = "k8s.io/cloud-provider/volume/helpers", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/cloud-provider/volume:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "rounding_test.go", + "zones_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/cloud-provider/volume/helpers/rounding.go b/vendor/k8s.io/cloud-provider/volume/helpers/rounding.go new file mode 100644 index 00000000000..a4ccaa03480 --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/helpers/rounding.go @@ -0,0 +1,143 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package helpers + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/api/resource" +) + +const ( + // GB - GigaByte size + GB = 1000 * 1000 * 1000 + // GiB - GibiByte size + GiB = 1024 * 1024 * 1024 + + // MB - MegaByte size + MB = 1000 * 1000 + // MiB - MebiByte size + MiB = 1024 * 1024 + + // KB - KiloByte size + KB = 1000 + // KiB - KibiByte size + KiB = 1024 +) + +// RoundUpToGB rounds up given quantity to chunks of GB +func RoundUpToGB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, GB) +} + +// RoundUpToGiB rounds up given quantity upto chunks of GiB +func RoundUpToGiB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, GiB) +} + +// RoundUpToMB rounds up given quantity to chunks of MB +func RoundUpToMB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, MB) +} + +// RoundUpToMiB rounds up given quantity upto chunks of MiB +func RoundUpToMiB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, MiB) +} + +// RoundUpToKB rounds up given quantity to chunks of KB +func RoundUpToKB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, KB) +} + +// RoundUpToKiB rounds up given quantity upto chunks of KiB +func RoundUpToKiB(size resource.Quantity) int64 { + requestBytes := size.Value() + return roundUpSize(requestBytes, KiB) +} + +// RoundUpToGBInt rounds up given quantity to chunks of GB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToGBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, GB) +} + +// RoundUpToGiBInt rounds up given quantity upto chunks of GiB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToGiBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, GiB) +} + +// RoundUpToMBInt rounds up given quantity to chunks of MB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToMBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, MB) +} + +// RoundUpToMiBInt rounds up given quantity upto chunks of MiB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToMiBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, MiB) +} + +// RoundUpToKBInt rounds up given quantity to chunks of KB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToKBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, KB) +} + +// RoundUpToKiBInt rounds up given quantity upto chunks of KiB. It returns an +// int instead of an int64 and an error if there's overflow +func RoundUpToKiBInt(size resource.Quantity) (int, error) { + requestBytes := size.Value() + return roundUpSizeInt(requestBytes, KiB) +} + +// roundUpSizeInt calculates how many allocation units are needed to accommodate +// a volume of given size. It returns an int instead of an int64 and an error if +// there's overflow +func roundUpSizeInt(volumeSizeBytes int64, allocationUnitBytes int64) (int, error) { + roundedUp := roundUpSize(volumeSizeBytes, allocationUnitBytes) + roundedUpInt := int(roundedUp) + if int64(roundedUpInt) != roundedUp { + return 0, fmt.Errorf("capacity %v is too great, casting results in integer overflow", roundedUp) + } + return roundedUpInt, nil +} + +// roundUpSize calculates how many allocation units are needed to accommodate +// a volume of given size. E.g. when user wants 1500MiB volume, while AWS EBS +// allocates volumes in gibibyte-sized chunks, +// RoundUpSize(1500 * 1024*1024, 1024*1024*1024) returns '2' +// (2 GiB is the smallest allocatable volume that can hold 1500MiB) +func roundUpSize(volumeSizeBytes int64, allocationUnitBytes int64) int64 { + roundedUp := volumeSizeBytes / allocationUnitBytes + if volumeSizeBytes%allocationUnitBytes > 0 { + roundedUp++ + } + return roundedUp +} diff --git a/vendor/k8s.io/cloud-provider/volume/helpers/zones.go b/vendor/k8s.io/cloud-provider/volume/helpers/zones.go new file mode 100644 index 00000000000..ec9c5d99158 --- /dev/null +++ b/vendor/k8s.io/cloud-provider/volume/helpers/zones.go @@ -0,0 +1,310 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package helpers + +import ( + "fmt" + "hash/fnv" + "math/rand" + "strconv" + "strings" + + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/sets" + cloudvolume "k8s.io/cloud-provider/volume" + "k8s.io/klog" +) + +// LabelZonesToSet converts a PV label value from string containing a delimited list of zones to set +func LabelZonesToSet(labelZonesValue string) (sets.String, error) { + return stringToSet(labelZonesValue, cloudvolume.LabelMultiZoneDelimiter) +} + +// ZonesSetToLabelValue converts zones set to label value +func ZonesSetToLabelValue(strSet sets.String) string { + return strings.Join(strSet.UnsortedList(), cloudvolume.LabelMultiZoneDelimiter) +} + +// ZonesToSet converts a string containing a comma separated list of zones to set +func ZonesToSet(zonesString string) (sets.String, error) { + zones, err := stringToSet(zonesString, ",") + if err != nil { + return nil, fmt.Errorf("error parsing zones %s, must be strings separated by commas: %v", zonesString, err) + } + return zones, nil +} + +// StringToSet converts a string containing list separated by specified delimiter to a set +func stringToSet(str, delimiter string) (sets.String, error) { + zonesSlice := strings.Split(str, delimiter) + zonesSet := make(sets.String) + for _, zone := range zonesSlice { + trimmedZone := strings.TrimSpace(zone) + if trimmedZone == "" { + return make(sets.String), fmt.Errorf( + "%q separated list (%q) must not contain an empty string", + delimiter, + str) + } + zonesSet.Insert(trimmedZone) + } + return zonesSet, nil +} + +// LabelZonesToList converts a PV label value from string containing a delimited list of zones to list +func LabelZonesToList(labelZonesValue string) ([]string, error) { + return stringToList(labelZonesValue, cloudvolume.LabelMultiZoneDelimiter) +} + +// StringToList converts a string containing list separated by specified delimiter to a list +func stringToList(str, delimiter string) ([]string, error) { + zonesSlice := make([]string, 0) + for _, zone := range strings.Split(str, delimiter) { + trimmedZone := strings.TrimSpace(zone) + if trimmedZone == "" { + return nil, fmt.Errorf( + "%q separated list (%q) must not contain an empty string", + delimiter, + str) + } + zonesSlice = append(zonesSlice, trimmedZone) + } + return zonesSlice, nil +} + +// SelectZoneForVolume is a wrapper around SelectZonesForVolume +// to select a single zone for a volume based on parameters +func SelectZoneForVolume(zoneParameterPresent, zonesParameterPresent bool, zoneParameter string, zonesParameter, zonesWithNodes sets.String, node *v1.Node, allowedTopologies []v1.TopologySelectorTerm, pvcName string) (string, error) { + zones, err := SelectZonesForVolume(zoneParameterPresent, zonesParameterPresent, zoneParameter, zonesParameter, zonesWithNodes, node, allowedTopologies, pvcName, 1) + if err != nil { + return "", err + } + zone, ok := zones.PopAny() + if !ok { + return "", fmt.Errorf("could not determine a zone to provision volume in") + } + return zone, nil +} + +// SelectZonesForVolume selects zones for a volume based on several factors: +// node.zone, allowedTopologies, zone/zones parameters from storageclass, +// zones with active nodes from the cluster. The number of zones = replicas. +func SelectZonesForVolume(zoneParameterPresent, zonesParameterPresent bool, zoneParameter string, zonesParameter, zonesWithNodes sets.String, node *v1.Node, allowedTopologies []v1.TopologySelectorTerm, pvcName string, numReplicas uint32) (sets.String, error) { + if zoneParameterPresent && zonesParameterPresent { + return nil, fmt.Errorf("both zone and zones StorageClass parameters must not be used at the same time") + } + + var zoneFromNode string + // pick one zone from node if present + if node != nil { + // VolumeScheduling implicit since node is not nil + if zoneParameterPresent || zonesParameterPresent { + return nil, fmt.Errorf("zone[s] cannot be specified in StorageClass if VolumeBindingMode is set to WaitForFirstConsumer. Please specify allowedTopologies in StorageClass for constraining zones") + } + + // pick node's zone for one of the replicas + var ok bool + zoneFromNode, ok = node.ObjectMeta.Labels[v1.LabelZoneFailureDomain] + if !ok { + return nil, fmt.Errorf("%s Label for node missing", v1.LabelZoneFailureDomain) + } + // if single replica volume and node with zone found, return immediately + if numReplicas == 1 { + return sets.NewString(zoneFromNode), nil + } + } + + // pick zone from allowedZones if specified + allowedZones, err := ZonesFromAllowedTopologies(allowedTopologies) + if err != nil { + return nil, err + } + + if (len(allowedTopologies) > 0) && (allowedZones.Len() == 0) { + return nil, fmt.Errorf("no matchLabelExpressions with %s key found in allowedTopologies. Please specify matchLabelExpressions with %s key", v1.LabelZoneFailureDomain, v1.LabelZoneFailureDomain) + } + + if allowedZones.Len() > 0 { + // VolumeScheduling implicit since allowedZones present + if zoneParameterPresent || zonesParameterPresent { + return nil, fmt.Errorf("zone[s] cannot be specified in StorageClass if allowedTopologies specified") + } + // scheduler will guarantee if node != null above, zoneFromNode is member of allowedZones. + // so if zoneFromNode != "", we can safely assume it is part of allowedZones. + zones, err := chooseZonesForVolumeIncludingZone(allowedZones, pvcName, zoneFromNode, numReplicas) + if err != nil { + return nil, fmt.Errorf("cannot process zones in allowedTopologies: %v", err) + } + return zones, nil + } + + // pick zone from parameters if present + if zoneParameterPresent { + if numReplicas > 1 { + return nil, fmt.Errorf("zone cannot be specified if desired number of replicas for pv is greather than 1. Please specify zones or allowedTopologies to specify desired zones") + } + return sets.NewString(zoneParameter), nil + } + + if zonesParameterPresent { + if uint32(zonesParameter.Len()) < numReplicas { + return nil, fmt.Errorf("not enough zones found in zones parameter to provision a volume with %d replicas. Found %d zones, need %d zones", numReplicas, zonesParameter.Len(), numReplicas) + } + // directly choose from zones parameter; no zone from node need to be considered + return ChooseZonesForVolume(zonesParameter, pvcName, numReplicas), nil + } + + // pick zone from zones with nodes + if zonesWithNodes.Len() > 0 { + // If node != null (and thus zoneFromNode != ""), zoneFromNode will be member of zonesWithNodes + zones, err := chooseZonesForVolumeIncludingZone(zonesWithNodes, pvcName, zoneFromNode, numReplicas) + if err != nil { + return nil, fmt.Errorf("cannot process zones where nodes exist in the cluster: %v", err) + } + return zones, nil + } + return nil, fmt.Errorf("cannot determine zones to provision volume in") +} + +// ZonesFromAllowedTopologies returns a list of zones specified in allowedTopologies +func ZonesFromAllowedTopologies(allowedTopologies []v1.TopologySelectorTerm) (sets.String, error) { + zones := make(sets.String) + for _, term := range allowedTopologies { + for _, exp := range term.MatchLabelExpressions { + if exp.Key == v1.LabelZoneFailureDomain { + for _, value := range exp.Values { + zones.Insert(value) + } + } else { + return nil, fmt.Errorf("unsupported key found in matchLabelExpressions: %s", exp.Key) + } + } + } + return zones, nil +} + +// chooseZonesForVolumeIncludingZone is a wrapper around ChooseZonesForVolume that ensures zoneToInclude is chosen +// zoneToInclude can either be empty in which case it is ignored. If non-empty, zoneToInclude is expected to be member of zones. +// numReplicas is expected to be > 0 and <= zones.Len() +func chooseZonesForVolumeIncludingZone(zones sets.String, pvcName, zoneToInclude string, numReplicas uint32) (sets.String, error) { + if numReplicas == 0 { + return nil, fmt.Errorf("invalid number of replicas passed") + } + if uint32(zones.Len()) < numReplicas { + return nil, fmt.Errorf("not enough zones found to provision a volume with %d replicas. Need at least %d distinct zones for a volume with %d replicas", numReplicas, numReplicas, numReplicas) + } + if zoneToInclude != "" && !zones.Has(zoneToInclude) { + return nil, fmt.Errorf("zone to be included: %s needs to be member of set: %v", zoneToInclude, zones) + } + if uint32(zones.Len()) == numReplicas { + return zones, nil + } + if zoneToInclude != "" { + zones.Delete(zoneToInclude) + numReplicas = numReplicas - 1 + } + zonesChosen := ChooseZonesForVolume(zones, pvcName, numReplicas) + if zoneToInclude != "" { + zonesChosen.Insert(zoneToInclude) + } + return zonesChosen, nil +} + +// ChooseZonesForVolume is identical to ChooseZoneForVolume, but selects a multiple zones, for multi-zone disks. +func ChooseZonesForVolume(zones sets.String, pvcName string, numZones uint32) sets.String { + // No zones available, return empty set. + replicaZones := sets.NewString() + if zones.Len() == 0 { + return replicaZones + } + + // We create the volume in a zone determined by the name + // Eventually the scheduler will coordinate placement into an available zone + hash, index := getPVCNameHashAndIndexOffset(pvcName) + + // Zones.List returns zones in a consistent order (sorted) + // We do have a potential failure case where volumes will not be properly spread, + // if the set of zones changes during StatefulSet volume creation. However, this is + // probably relatively unlikely because we expect the set of zones to be essentially + // static for clusters. + // Hopefully we can address this problem if/when we do full scheduler integration of + // PVC placement (which could also e.g. avoid putting volumes in overloaded or + // unhealthy zones) + zoneSlice := zones.List() + + startingIndex := index * numZones + for index = startingIndex; index < startingIndex+numZones; index++ { + zone := zoneSlice[(hash+index)%uint32(len(zoneSlice))] + replicaZones.Insert(zone) + } + + klog.V(2).Infof("Creating volume for replicated PVC %q; chosen zones=%q from zones=%q", + pvcName, replicaZones.UnsortedList(), zoneSlice) + return replicaZones +} + +func getPVCNameHashAndIndexOffset(pvcName string) (hash uint32, index uint32) { + if pvcName == "" { + // We should always be called with a name; this shouldn't happen + klog.Warningf("No name defined during volume create; choosing random zone") + + hash = rand.Uint32() + } else { + hashString := pvcName + + // Heuristic to make sure that volumes in a StatefulSet are spread across zones + // StatefulSet PVCs are (currently) named ClaimName-StatefulSetName-Id, + // where Id is an integer index. + // Note though that if a StatefulSet pod has multiple claims, we need them to be + // in the same zone, because otherwise the pod will be unable to mount both volumes, + // and will be unschedulable. So we hash _only_ the "StatefulSetName" portion when + // it looks like `ClaimName-StatefulSetName-Id`. + // We continue to round-robin volume names that look like `Name-Id` also; this is a useful + // feature for users that are creating statefulset-like functionality without using statefulsets. + lastDash := strings.LastIndexByte(pvcName, '-') + if lastDash != -1 { + statefulsetIDString := pvcName[lastDash+1:] + statefulsetID, err := strconv.ParseUint(statefulsetIDString, 10, 32) + if err == nil { + // Offset by the statefulsetID, so we round-robin across zones + index = uint32(statefulsetID) + // We still hash the volume name, but only the prefix + hashString = pvcName[:lastDash] + + // In the special case where it looks like `ClaimName-StatefulSetName-Id`, + // hash only the StatefulSetName, so that different claims on the same StatefulSet + // member end up in the same zone. + // Note that StatefulSetName (and ClaimName) might themselves both have dashes. + // We actually just take the portion after the final - of ClaimName-StatefulSetName. + // For our purposes it doesn't much matter (just suboptimal spreading). + lastDash := strings.LastIndexByte(hashString, '-') + if lastDash != -1 { + hashString = hashString[lastDash+1:] + } + + klog.V(2).Infof("Detected StatefulSet-style volume name %q; index=%d", pvcName, index) + } + } + + // We hash the (base) volume name, so we don't bias towards the first N zones + h := fnv.New32() + h.Write([]byte(hashString)) + hash = h.Sum32() + } + + return hash, index +} diff --git a/vendor/k8s.io/component-base/BUILD b/vendor/k8s.io/component-base/BUILD new file mode 100644 index 00000000000..69be7ee4959 --- /dev/null +++ b/vendor/k8s.io/component-base/BUILD @@ -0,0 +1,19 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/component-base/cli/flag:all-srcs", + "//staging/src/k8s.io/component-base/cli/globalflag:all-srcs", + "//staging/src/k8s.io/component-base/config:all-srcs", + "//staging/src/k8s.io/component-base/logs:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/component-base/CONTRIBUTING.md b/vendor/k8s.io/component-base/CONTRIBUTING.md new file mode 100644 index 00000000000..f54b9e7ee3f --- /dev/null +++ b/vendor/k8s.io/component-base/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing guidelines + +Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. + +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/component-base](https://git.k8s.io/kubernetes/staging/src/k8s.io/component-base) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). + +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/component-base/LICENSE b/vendor/k8s.io/component-base/LICENSE new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/vendor/k8s.io/component-base/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/k8s.io/component-base/OWNERS b/vendor/k8s.io/component-base/OWNERS new file mode 100644 index 00000000000..59950cd8922 --- /dev/null +++ b/vendor/k8s.io/component-base/OWNERS @@ -0,0 +1,17 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- luxas +- sttts +- jbeda +- lavalamp +reviewers: +- luxas +- sttts +- stewart-yu +- dims +- dixudx +- rosti +labels: +- sig/cluster-lifecycle +- sig/api-machinery diff --git a/vendor/k8s.io/component-base/README.md b/vendor/k8s.io/component-base/README.md new file mode 100644 index 00000000000..59d6c704a41 --- /dev/null +++ b/vendor/k8s.io/component-base/README.md @@ -0,0 +1,34 @@ +## component-base + +## Purpose + +Implement KEP 32: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md + +The proposal is essentially about refactoring the Kubernetes core package structure in a way that all core components may share common code around: + - ComponentConfig implementation + - flag and command handling + - HTTPS serving + - delegated authn/z + - logging. + +## Compatibility + +There are *NO compatibility guarantees* for this repository, yet. It is in direct support of Kubernetes, so branches +will track Kubernetes and be compatible with that repo. As we more cleanly separate the layers, we will review the +compatibility guarantee. We have a goal to make this easier to use in the future. + + +## Where does it come from? + +This repository is synced from https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/component-base. +Code changes are made in that location, merged into `k8s.io/kubernetes` and later synced here. + +## Things you should *NOT* do + + 1. Directly modify any files in this repo. Those are driven from `k8s.io/kubernetes/staging/src/k8s.io/component-base`. + 2. Expect compatibility. This repo is changing quickly in direct support of Kubernetes. + +### OWNERS + +WG Component Standard is working on this refactoring process, which is happening incrementally, starting in the v1.14 cycle. +SIG API Machinery and SIG Cluster Lifecycle owns the code. diff --git a/vendor/k8s.io/component-base/SECURITY_CONTACTS b/vendor/k8s.io/component-base/SECURITY_CONTACTS new file mode 100644 index 00000000000..9edb204d162 --- /dev/null +++ b/vendor/k8s.io/component-base/SECURITY_CONTACTS @@ -0,0 +1,17 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Committee to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +cjcullen +liggitt +luxas +sttts +tallclair diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/BUILD b/vendor/k8s.io/component-base/cli/flag/BUILD similarity index 88% rename from vendor/k8s.io/apiserver/pkg/util/flag/BUILD rename to vendor/k8s.io/component-base/cli/flag/BUILD index 7841681a86e..8a09eea7623 100644 --- a/vendor/k8s.io/apiserver/pkg/util/flag/BUILD +++ b/vendor/k8s.io/component-base/cli/flag/BUILD @@ -37,11 +37,10 @@ go_library( "string_flag.go", "tristate.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/util/flag", - importpath = "k8s.io/apiserver/pkg/util/flag", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/cli/flag", + importpath = "k8s.io/component-base/cli/flag", deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//vendor/github.com/docker/docker/pkg/term:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/ciphersuites_flag.go b/vendor/k8s.io/component-base/cli/flag/ciphersuites_flag.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/ciphersuites_flag.go rename to vendor/k8s.io/component-base/cli/flag/ciphersuites_flag.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/colon_separated_multimap_string_string.go b/vendor/k8s.io/component-base/cli/flag/colon_separated_multimap_string_string.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/colon_separated_multimap_string_string.go rename to vendor/k8s.io/component-base/cli/flag/colon_separated_multimap_string_string.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/configuration_map.go b/vendor/k8s.io/component-base/cli/flag/configuration_map.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/configuration_map.go rename to vendor/k8s.io/component-base/cli/flag/configuration_map.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/flags.go b/vendor/k8s.io/component-base/cli/flag/flags.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/flags.go rename to vendor/k8s.io/component-base/cli/flag/flags.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/langle_separated_map_string_string.go b/vendor/k8s.io/component-base/cli/flag/langle_separated_map_string_string.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/langle_separated_map_string_string.go rename to vendor/k8s.io/component-base/cli/flag/langle_separated_map_string_string.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/map_string_bool.go b/vendor/k8s.io/component-base/cli/flag/map_string_bool.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/map_string_bool.go rename to vendor/k8s.io/component-base/cli/flag/map_string_bool.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/map_string_string.go b/vendor/k8s.io/component-base/cli/flag/map_string_string.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/map_string_string.go rename to vendor/k8s.io/component-base/cli/flag/map_string_string.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/namedcertkey_flag.go b/vendor/k8s.io/component-base/cli/flag/namedcertkey_flag.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/namedcertkey_flag.go rename to vendor/k8s.io/component-base/cli/flag/namedcertkey_flag.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/noop.go b/vendor/k8s.io/component-base/cli/flag/noop.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/noop.go rename to vendor/k8s.io/component-base/cli/flag/noop.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/omitempty.go b/vendor/k8s.io/component-base/cli/flag/omitempty.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/omitempty.go rename to vendor/k8s.io/component-base/cli/flag/omitempty.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/sectioned.go b/vendor/k8s.io/component-base/cli/flag/sectioned.go similarity index 79% rename from vendor/k8s.io/apiserver/pkg/util/flag/sectioned.go rename to vendor/k8s.io/component-base/cli/flag/sectioned.go index 52275aa6f3c..493a6c0f0f9 100644 --- a/vendor/k8s.io/apiserver/pkg/util/flag/sectioned.go +++ b/vendor/k8s.io/component-base/cli/flag/sectioned.go @@ -22,7 +22,6 @@ import ( "io" "strings" - "github.com/docker/docker/pkg/term" "github.com/spf13/pflag" ) @@ -78,18 +77,3 @@ func PrintSections(w io.Writer, fss NamedFlagSets, cols int) { } } } - -// TerminalSize returns the current width and height of the user's terminal. If it isn't a terminal, -// nil is returned. On error, zero values are returned for width and height. -// Usually w must be the stdout of the process. Stderr won't work. -func TerminalSize(w io.Writer) (int, int, error) { - outFd, isTerminal := term.GetFdInfo(w) - if !isTerminal { - return 0, 0, fmt.Errorf("given writer is no terminal") - } - winsize, err := term.GetWinsize(outFd) - if err != nil { - return 0, 0, err - } - return int(winsize.Width), int(winsize.Height), nil -} diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/string_flag.go b/vendor/k8s.io/component-base/cli/flag/string_flag.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/string_flag.go rename to vendor/k8s.io/component-base/cli/flag/string_flag.go diff --git a/vendor/k8s.io/apiserver/pkg/util/flag/tristate.go b/vendor/k8s.io/component-base/cli/flag/tristate.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/flag/tristate.go rename to vendor/k8s.io/component-base/cli/flag/tristate.go diff --git a/vendor/k8s.io/apiserver/pkg/util/globalflag/BUILD b/vendor/k8s.io/component-base/cli/globalflag/BUILD similarity index 73% rename from vendor/k8s.io/apiserver/pkg/util/globalflag/BUILD rename to vendor/k8s.io/component-base/cli/globalflag/BUILD index 9600afb0b49..1026eb654c0 100644 --- a/vendor/k8s.io/apiserver/pkg/util/globalflag/BUILD +++ b/vendor/k8s.io/component-base/cli/globalflag/BUILD @@ -3,11 +3,11 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = ["globalflags.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/util/globalflag", - importpath = "k8s.io/apiserver/pkg/util/globalflag", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/cli/globalflag", + importpath = "k8s.io/component-base/cli/globalflag", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) @@ -17,7 +17,7 @@ go_test( srcs = ["globalflags_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/util/globalflag/globalflags.go b/vendor/k8s.io/component-base/cli/globalflag/globalflags.go similarity index 98% rename from vendor/k8s.io/apiserver/pkg/util/globalflag/globalflags.go rename to vendor/k8s.io/component-base/cli/globalflag/globalflags.go index b49c8e9dc8f..455153f680c 100644 --- a/vendor/k8s.io/apiserver/pkg/util/globalflag/globalflags.go +++ b/vendor/k8s.io/component-base/cli/globalflag/globalflags.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/pflag" - "k8s.io/apiserver/pkg/util/logs" + "k8s.io/component-base/logs" ) // AddGlobalFlags explicitly registers flags that libraries (klog, verflag, etc.) register diff --git a/vendor/k8s.io/csi-api/code-of-conduct.md b/vendor/k8s.io/component-base/code-of-conduct.md similarity index 100% rename from vendor/k8s.io/csi-api/code-of-conduct.md rename to vendor/k8s.io/component-base/code-of-conduct.md diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/BUILD b/vendor/k8s.io/component-base/config/BUILD similarity index 59% rename from vendor/k8s.io/apimachinery/pkg/apis/config/BUILD rename to vendor/k8s.io/component-base/config/BUILD index 45016d21ac8..7301ed294de 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/BUILD +++ b/vendor/k8s.io/component-base/config/BUILD @@ -7,9 +7,10 @@ go_library( "types.go", "zz_generated.deepcopy.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/config", - importpath = "k8s.io/apimachinery/pkg/apis/config", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/config", + importpath = "k8s.io/component-base/config", visibility = ["//visibility:public"], + deps = ["//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library"], ) filegroup( @@ -23,8 +24,8 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:all-srcs", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/validation:all-srcs", + "//staging/src/k8s.io/component-base/config/v1alpha1:all-srcs", + "//staging/src/k8s.io/component-base/config/validation:all-srcs", ], tags = ["automanaged"], visibility = ["//visibility:public"], diff --git a/vendor/k8s.io/csi-api/pkg/apis/OWNERS b/vendor/k8s.io/component-base/config/OWNERS similarity index 68% rename from vendor/k8s.io/csi-api/pkg/apis/OWNERS rename to vendor/k8s.io/component-base/config/OWNERS index 1cfcd56de87..11d499d75d9 100644 --- a/vendor/k8s.io/csi-api/pkg/apis/OWNERS +++ b/vendor/k8s.io/component-base/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true @@ -5,6 +7,8 @@ approvers: - api-approvers reviewers: - api-reviewers -- sig-storage-reviewers +- luxas +- mtaufen +- sttts labels: - kind/api-change diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/doc.go b/vendor/k8s.io/component-base/config/doc.go similarity index 90% rename from vendor/k8s.io/apimachinery/pkg/apis/config/doc.go rename to vendor/k8s.io/component-base/config/doc.go index d849c7aa3bd..dd0a5a53a7b 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/doc.go +++ b/vendor/k8s.io/component-base/config/doc.go @@ -16,4 +16,4 @@ limitations under the License. // +k8s:deepcopy-gen=package -package config // import "k8s.io/apimachinery/pkg/apis/config" +package config // import "k8s.io/component-base/config" diff --git a/vendor/k8s.io/component-base/config/types.go b/vendor/k8s.io/component-base/config/types.go new file mode 100644 index 00000000000..f0a20915cc8 --- /dev/null +++ b/vendor/k8s.io/component-base/config/types.go @@ -0,0 +1,74 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ClientConnectionConfiguration contains details for constructing a client. +type ClientConnectionConfiguration struct { + // kubeconfig is the path to a KubeConfig file. + Kubeconfig string + // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the + // default value of 'application/json'. This field will control all connections to the server used by a particular + // client. + AcceptContentTypes string + // contentType is the content type used when sending data to the server from this client. + ContentType string + // qps controls the number of queries per second allowed for this connection. + QPS float32 + // burst allows extra queries to accumulate when a client is exceeding its rate. + Burst int32 +} + +// LeaderElectionConfiguration defines the configuration of leader election +// clients for components that can run with leader election enabled. +type LeaderElectionConfiguration struct { + // leaderElect enables a leader election client to gain leadership + // before executing the main loop. Enable this when running replicated + // components for high availability. + LeaderElect bool + // leaseDuration is the duration that non-leader candidates will wait + // after observing a leadership renewal until attempting to acquire + // leadership of a led but unrenewed leader slot. This is effectively the + // maximum duration that a leader can be stopped before it is replaced + // by another candidate. This is only applicable if leader election is + // enabled. + LeaseDuration metav1.Duration + // renewDeadline is the interval between attempts by the acting master to + // renew a leadership slot before it stops leading. This must be less + // than or equal to the lease duration. This is only applicable if leader + // election is enabled. + RenewDeadline metav1.Duration + // retryPeriod is the duration the clients should wait between attempting + // acquisition and renewal of a leadership. This is only applicable if + // leader election is enabled. + RetryPeriod metav1.Duration + // resourceLock indicates the resource object type that will be used to lock + // during leader election cycles. + ResourceLock string +} + +// DebuggingConfiguration holds configuration for Debugging related features. +type DebuggingConfiguration struct { + // enableProfiling enables profiling via web interface host:port/debug/pprof/ + EnableProfiling bool + // enableContentionProfiling enables lock contention profiling, if + // enableProfiling is true. + EnableContentionProfiling bool +} diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/BUILD b/vendor/k8s.io/component-base/config/v1alpha1/BUILD similarity index 80% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/BUILD rename to vendor/k8s.io/component-base/config/v1alpha1/BUILD index 067f019c66b..d6deae7a9b1 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/BUILD +++ b/vendor/k8s.io/component-base/config/v1alpha1/BUILD @@ -11,14 +11,14 @@ go_library( "zz_generated.conversion.go", "zz_generated.deepcopy.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1", - importpath = "k8s.io/apiserver/pkg/apis/config/v1alpha1", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/config/v1alpha1", + importpath = "k8s.io/component-base/config/v1alpha1", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/conversion.go b/vendor/k8s.io/component-base/config/v1alpha1/conversion.go similarity index 77% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/conversion.go rename to vendor/k8s.io/component-base/config/v1alpha1/conversion.go index 75190ad161c..e2951e310d5 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/conversion.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/conversion.go @@ -18,7 +18,7 @@ package v1alpha1 import ( "k8s.io/apimachinery/pkg/conversion" - "k8s.io/apiserver/pkg/apis/config" + "k8s.io/component-base/config" ) // Important! The public back-and-forth conversion functions for the types in this generic @@ -28,6 +28,14 @@ import ( // TODO: Fix the bug in conversion-gen so it automatically discovers these Convert_* functions // in autogenerated code as well. +func Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in *ClientConnectionConfiguration, out *config.ClientConnectionConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in, out, s) +} + +func Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in *config.ClientConnectionConfiguration, out *ClientConnectionConfiguration, s conversion.Scope) error { + return autoConvert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in, out, s) +} + func Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(in *DebuggingConfiguration, out *config.DebuggingConfiguration, s conversion.Scope) error { return autoConvert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(in, out, s) } diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/defaults.go b/vendor/k8s.io/component-base/config/v1alpha1/defaults.go similarity index 66% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/defaults.go rename to vendor/k8s.io/component-base/config/v1alpha1/defaults.go index caee3d8e491..caeb869a37e 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/defaults.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/defaults.go @@ -50,3 +50,24 @@ func RecommendedDefaultLeaderElectionConfiguration(obj *LeaderElectionConfigurat obj.LeaderElect = utilpointer.BoolPtr(true) } } + +// RecommendedDefaultClientConnectionConfiguration defaults a pointer to a +// ClientConnectionConfiguration struct. This will set the recommended default +// values, but they may be subject to change between API versions. This function +// is intentionally not registered in the scheme as a "normal" `SetDefaults_Foo` +// function to allow consumers of this type to set whatever defaults for their +// embedded configs. Forcing consumers to use these defaults would be problematic +// as defaulting in the scheme is done as part of the conversion, and there would +// be no easy way to opt-out. Instead, if you want to use this defaulting method +// run it in your wrapper struct of this type in its `SetDefaults_` method. +func RecommendedDefaultClientConnectionConfiguration(obj *ClientConnectionConfiguration) { + if len(obj.ContentType) == 0 { + obj.ContentType = "application/vnd.kubernetes.protobuf" + } + if obj.QPS == 0.0 { + obj.QPS = 50.0 + } + if obj.Burst == 0 { + obj.Burst = 100 + } +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/doc.go b/vendor/k8s.io/component-base/config/v1alpha1/doc.go similarity index 81% rename from vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/doc.go rename to vendor/k8s.io/component-base/config/v1alpha1/doc.go index ce0a58a571c..3cd4f4292e5 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/doc.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/doc.go @@ -15,6 +15,6 @@ limitations under the License. */ // +k8s:deepcopy-gen=package -// +k8s:conversion-gen=k8s.io/apimachinery/pkg/apis/config +// +k8s:conversion-gen=k8s.io/component-base/config -package v1alpha1 // import "k8s.io/apimachinery/pkg/apis/config/v1alpha1" +package v1alpha1 // import "k8s.io/component-base/config/v1alpha1" diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/register.go b/vendor/k8s.io/component-base/config/v1alpha1/register.go similarity index 100% rename from vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/register.go rename to vendor/k8s.io/component-base/config/v1alpha1/register.go diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/types.go b/vendor/k8s.io/component-base/config/v1alpha1/types.go similarity index 75% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/types.go rename to vendor/k8s.io/component-base/config/v1alpha1/types.go index f5ca97151a2..d5a0391a209 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/types.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/types.go @@ -58,3 +58,19 @@ type DebuggingConfiguration struct { // enableProfiling is true. EnableContentionProfiling bool `json:"enableContentionProfiling"` } + +// ClientConnectionConfiguration contains details for constructing a client. +type ClientConnectionConfiguration struct { + // kubeconfig is the path to a KubeConfig file. + Kubeconfig string `json:"kubeconfig"` + // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the + // default value of 'application/json'. This field will control all connections to the server used by a particular + // client. + AcceptContentTypes string `json:"acceptContentTypes"` + // contentType is the content type used when sending data to the server from this client. + ContentType string `json:"contentType"` + // qps controls the number of queries per second allowed for this connection. + QPS float32 `json:"qps"` + // burst allows extra queries to accumulate when a client is exceeding its rate. + Burst int32 `json:"burst"` +} diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/component-base/config/v1alpha1/zz_generated.conversion.go similarity index 70% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.conversion.go rename to vendor/k8s.io/component-base/config/v1alpha1/zz_generated.conversion.go index eaf2076ac4b..55f0dac0390 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/zz_generated.conversion.go @@ -24,7 +24,7 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" - config "k8s.io/apiserver/pkg/apis/config" + config "k8s.io/component-base/config" ) func init() { @@ -34,6 +34,16 @@ func init() { // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ClientConnectionConfiguration)(nil), (*config.ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(a.(*ClientConnectionConfiguration), b.(*config.ClientConnectionConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*config.ClientConnectionConfiguration)(nil), (*ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(a.(*config.ClientConnectionConfiguration), b.(*ClientConnectionConfiguration), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*DebuggingConfiguration)(nil), (*config.DebuggingConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(a.(*DebuggingConfiguration), b.(*config.DebuggingConfiguration), scope) }); err != nil { @@ -54,6 +64,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*config.ClientConnectionConfiguration)(nil), (*ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(a.(*config.ClientConnectionConfiguration), b.(*ClientConnectionConfiguration), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*config.DebuggingConfiguration)(nil), (*DebuggingConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(a.(*config.DebuggingConfiguration), b.(*DebuggingConfiguration), scope) }); err != nil { @@ -64,6 +79,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*ClientConnectionConfiguration)(nil), (*config.ClientConnectionConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(a.(*ClientConnectionConfiguration), b.(*config.ClientConnectionConfiguration), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*DebuggingConfiguration)(nil), (*config.DebuggingConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(a.(*DebuggingConfiguration), b.(*config.DebuggingConfiguration), scope) }); err != nil { @@ -77,6 +97,24 @@ func RegisterConversions(s *runtime.Scheme) error { return nil } +func autoConvert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(in *ClientConnectionConfiguration, out *config.ClientConnectionConfiguration, s conversion.Scope) error { + out.Kubeconfig = in.Kubeconfig + out.AcceptContentTypes = in.AcceptContentTypes + out.ContentType = in.ContentType + out.QPS = in.QPS + out.Burst = in.Burst + return nil +} + +func autoConvert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(in *config.ClientConnectionConfiguration, out *ClientConnectionConfiguration, s conversion.Scope) error { + out.Kubeconfig = in.Kubeconfig + out.AcceptContentTypes = in.AcceptContentTypes + out.ContentType = in.ContentType + out.QPS = in.QPS + out.Burst = in.Burst + return nil +} + func autoConvert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(in *DebuggingConfiguration, out *config.DebuggingConfiguration, s conversion.Scope) error { out.EnableProfiling = in.EnableProfiling out.EnableContentionProfiling = in.EnableContentionProfiling diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/component-base/config/v1alpha1/zz_generated.deepcopy.go similarity index 77% rename from vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go rename to vendor/k8s.io/component-base/config/v1alpha1/zz_generated.deepcopy.go index f40bbe19af0..e747afa99b0 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/component-base/config/v1alpha1/zz_generated.deepcopy.go @@ -20,6 +20,22 @@ limitations under the License. package v1alpha1 +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClientConnectionConfiguration) DeepCopyInto(out *ClientConnectionConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClientConnectionConfiguration. +func (in *ClientConnectionConfiguration) DeepCopy() *ClientConnectionConfiguration { + if in == nil { + return nil + } + out := new(ClientConnectionConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DebuggingConfiguration) DeepCopyInto(out *DebuggingConfiguration) { *out = *in diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/validation/BUILD b/vendor/k8s.io/component-base/config/validation/BUILD similarity index 74% rename from vendor/k8s.io/apiserver/pkg/apis/config/validation/BUILD rename to vendor/k8s.io/component-base/config/validation/BUILD index e66a553c3c0..fe29ae9c5b9 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/validation/BUILD +++ b/vendor/k8s.io/component-base/config/validation/BUILD @@ -3,12 +3,12 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = ["validation.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/apis/config/validation", - importpath = "k8s.io/apiserver/pkg/apis/config/validation", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/config/validation", + importpath = "k8s.io/component-base/config/validation", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) @@ -19,7 +19,7 @@ go_test( deps = [ "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/apiserver/pkg/apis/config/validation/validation.go b/vendor/k8s.io/component-base/config/validation/validation.go similarity index 80% rename from vendor/k8s.io/apiserver/pkg/apis/config/validation/validation.go rename to vendor/k8s.io/component-base/config/validation/validation.go index 00cadf10133..6e66c0cec2e 100644 --- a/vendor/k8s.io/apiserver/pkg/apis/config/validation/validation.go +++ b/vendor/k8s.io/component-base/config/validation/validation.go @@ -18,9 +18,18 @@ package validation import ( "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/apis/config" + "k8s.io/component-base/config" ) +// ValidateClientConnectionConfiguration ensures validation of the ClientConnectionConfiguration struct +func ValidateClientConnectionConfiguration(cc *config.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if cc.Burst < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("burst"), cc.Burst, "must be non-negative")) + } + return allErrs +} + // ValidateLeaderElectionConfiguration ensures validation of the LeaderElectionConfiguration struct func ValidateLeaderElectionConfiguration(cc *config.LeaderElectionConfiguration, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/zz_generated.deepcopy.go b/vendor/k8s.io/component-base/config/zz_generated.deepcopy.go similarity index 51% rename from vendor/k8s.io/apimachinery/pkg/apis/config/zz_generated.deepcopy.go rename to vendor/k8s.io/component-base/config/zz_generated.deepcopy.go index f09beb0e38e..9812234f130 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/zz_generated.deepcopy.go +++ b/vendor/k8s.io/component-base/config/zz_generated.deepcopy.go @@ -35,3 +35,38 @@ func (in *ClientConnectionConfiguration) DeepCopy() *ClientConnectionConfigurati in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DebuggingConfiguration) DeepCopyInto(out *DebuggingConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DebuggingConfiguration. +func (in *DebuggingConfiguration) DeepCopy() *DebuggingConfiguration { + if in == nil { + return nil + } + out := new(DebuggingConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaderElectionConfiguration) DeepCopyInto(out *LeaderElectionConfiguration) { + *out = *in + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaderElectionConfiguration. +func (in *LeaderElectionConfiguration) DeepCopy() *LeaderElectionConfiguration { + if in == nil { + return nil + } + out := new(LeaderElectionConfiguration) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/apiserver/pkg/util/logs/BUILD b/vendor/k8s.io/component-base/logs/BUILD similarity index 83% rename from vendor/k8s.io/apiserver/pkg/util/logs/BUILD rename to vendor/k8s.io/component-base/logs/BUILD index d51cc643926..162763199e2 100644 --- a/vendor/k8s.io/apiserver/pkg/util/logs/BUILD +++ b/vendor/k8s.io/component-base/logs/BUILD @@ -8,8 +8,8 @@ load( go_library( name = "go_default_library", srcs = ["logs.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/util/logs", - importpath = "k8s.io/apiserver/pkg/util/logs", + importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/logs", + importpath = "k8s.io/component-base/logs", deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", diff --git a/vendor/k8s.io/apiserver/pkg/util/logs/logs.go b/vendor/k8s.io/component-base/logs/logs.go similarity index 100% rename from vendor/k8s.io/apiserver/pkg/util/logs/logs.go rename to vendor/k8s.io/component-base/logs/logs.go diff --git a/vendor/k8s.io/csi-api/OWNERS b/vendor/k8s.io/csi-api/OWNERS deleted file mode 100644 index 6dfb625d93c..00000000000 --- a/vendor/k8s.io/csi-api/OWNERS +++ /dev/null @@ -1,3 +0,0 @@ -approvers: -- jsafrane -- saad-ali diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/README.md b/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/README.md deleted file mode 100644 index 79a7ec17eed..00000000000 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# CSINodeInfo and CSIDriverInfo Usage and Lifecycle - -CSINodeInfo is an API object representing CSI Information at the Node level. -CSINodeInfo contains a Spec and a Status, each containing Drivers represent the -driver spec and status respectively. The CSIDriverInfoSpec represents the -specification of the driver and is generally not changed, whereas the -CSIDriverInfoStatus represents the current status of the driver and can be -updated and reacted to by various components. - -## Who creates it and when - -CSINodeInfo is created by Kubelet when the first CSI Driver is installed to the -cluster and it is registered through the Kubelet device registration mechanism. - -## Who updates CSIDriverInfo Spec and when - -The CSIDriverInfoSpec for a driver is created upon installation of the CSI -Driver to the cluster and it is registered through the Kubelet device -registration mechanism. The spec is populated with information about the driver -through the nodeinfomanager (inside Kubelet) and will remain unchanged from then -on. - -## Who updates Status and when - -The CSIDriverInfoStatus for the driver is created upon installation of the CSI -Driver to the cluster (the same time as the spec) and it is registered through -the Kubelet device registration mechanism. The Status contains information about -installation and the required Volume Plugin Mechanism of the driver. When the -driver is installed/uninstalled through the Kubelet device registration -mechanism the Available flag is flipped from true/false respectively. The -migration status will also be updated when the flags for migration are set to -true/false on the Kubelet for that Driver on that node. - -## Consumers of Status and Spec - -Currently the only consumer of CSINodeInfo/CSIDriverInfo is the -csi-external-provisioner. In the future, the Attach Detach Controller (ADC) will -need to read this object to determine migration status on a per driver per node -basis. The creation of the CSINodeInfo object could possibly race with the -Attach/Detach controller as for CSI Migration the controller depend on the -existence of the API object for the driver but it will not have been created -yet. The ADC is expected to fail (and retry with exponential backoff) the -operation if it is expecting the object and it has not yet been created. - -## Creation of CSINodeInfo object on Kubelet startup - -For CSI Migration Alpha we expect any user who turns on the feature has both -Kubelet and ADC at a version where the CSINodeInfo's are being created on -Kubelet startup. We will not promote the feature to Beta (on by default) until -the CSINodeInfo's are being created on Kubelet startup for a 2 version skew to -prevent the case where the CSINodeInfo does not exist when the ADC depends on -it. This prevents the race described above becoming a permanent bad state. diff --git a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/types.go b/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/types.go deleted file mode 100644 index 6232b6b4d8e..00000000000 --- a/vendor/k8s.io/csi-api/pkg/apis/csi/v1alpha1/types.go +++ /dev/null @@ -1,190 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - -// VolumePluginMechanism is the type of mechanism components should use for volume operations -type VolumePluginMechanism string - -const ( - // VolumePluginMechanismInTree means components should use the in-tree plugin for volume operations - VolumePluginMechanismInTree VolumePluginMechanism = "in-tree" - // VolumePluginMechanismCSI means components should use the CSI Driver for volume operations - VolumePluginMechanismCSI VolumePluginMechanism = "csi" -) - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CSIDriver captures information about a Container Storage Interface (CSI) -// volume driver deployed on the cluster. -// CSIDriver objects are non-namespaced. -type CSIDriver struct { - metav1.TypeMeta `json:",inline"` - - // Standard object metadata. - // metadata.Name indicates the name of the CSI driver that this object - // refers to; it MUST be the same name returned by the CSI GetPluginName() - // call for that driver. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metav1.ObjectMeta `json:"metadata,omitempty"` - - // Specification of the CSI Driver. - Spec CSIDriverSpec `json:"spec"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CSIDriverList is a collection of CSIDriver objects. -type CSIDriverList struct { - metav1.TypeMeta `json:",inline"` - - // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty"` - - // items is the list of CSIDriver - Items []CSIDriver `json:"items"` -} - -// CSIDriverSpec is the specification of a CSIDriver. -type CSIDriverSpec struct { - // attachRequired indicates this CSI volume driver requires an attach - // operation (because it implements the CSI ControllerPublishVolume() - // method), and that Kubernetes should call attach and wait for any attach - // operation to complete before proceeding to mounting. - // If value is not specified, default is false -- meaning attach will not be - // called. - // +optional - AttachRequired *bool `json:"attachRequired,omitempty"` - - // If specified, podInfoRequiredOnMount indicates this CSI volume driver - // requires additional pod information (like podName, podUID, etc.) during - // mount operations. - // If value is not specified, pod information will not be passed on mount. - // If value is set to a valid version, Kubelet will pass pod information as - // VolumeAttributes in the CSI NodePublishVolume() calls. - // Supported versions: - // Version "v1" will pass the following ValueAttributes - // "csi.storage.k8s.io/pod.name": pod.Name - // "csi.storage.k8s.io/pod.namespace": pod.Namespace - // "csi.storage.k8s.io/pod.uid": string(pod.UID) - // +optional - PodInfoOnMountVersion *string `json:"podInfoOnMountVersion,omitempty"` -} - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CSINodeInfo holds information about all CSI drivers installed on a node. -type CSINodeInfo struct { - metav1.TypeMeta `json:",inline"` - - // metadata.name must be the Kubernetes node name. - metav1.ObjectMeta `json:"metadata,omitempty"` - - // spec is the specification of CSINodeInfo - Spec CSINodeInfoSpec `json:"spec"` - - // status is the current status of CSINodeInfo - Status CSINodeInfoStatus `json:"status"` -} - -// CSINodeInfoSpec holds information about the specification of all CSI drivers installed on a node -type CSINodeInfoSpec struct { - // drivers is a list of specifications of CSIDriverInfo - // +patchMergeKey=name - // +patchStrategy=merge - Drivers []CSIDriverInfoSpec `json:"drivers" patchStrategy:"merge" patchMergeKey:"name"` -} - -// CSINodeInfoStatus holds information about the status of all CSI drivers installed on a node -type CSINodeInfoStatus struct { - // drivers is a list of the statuses of CSIDriverInfo - // +patchMergeKey=name - // +patchStrategy=merge - Drivers []CSIDriverInfoStatus `json:"drivers" patchStrategy:"merge" patchMergeKey:"name"` -} - -// CSIDriverInfoStatus holds information about the status of one CSI driver installed on a node -type CSIDriverInfoStatus struct { - // name is the name of the CSI driver that this object refers to. - // This MUST be the same name returned by the CSI GetPluginName() call for - // that driver. - Name string `json:"name"` - - // available is a boolean representing whether the driver has been installed - // on this node or not. - Available bool `json:"available"` - - // volumePluginMechanism announces what mechanism underlies volume plugins. - // It is set by Kubelet. It is used by the attach/detach controller, which - // needs to know how to perform attachments. The allowed values are: - // * "in-tree": the volume operation (e.g., attach/detach) ought to be - // directly performed by the attach/detach controller. - // * "csi-plugin": the attach/detach controller ought to request - // the csi plugin to perform the volume operation rather than perform it directly. - VolumePluginMechanism VolumePluginMechanism `json:"volumePluginMechanism"` -} - -// CSIDriverInfoSpec holds information about the specification of one CSI driver installed on a node -type CSIDriverInfoSpec struct { - // name is the name of the CSI driver that this object refers to. - // This MUST be the same name returned by the CSI GetPluginName() call for - // that driver. - Name string `json:"name"` - - // nodeID of the node from the driver point of view. - // This field enables Kubernetes to communicate with storage systems that do - // not share the same nomenclature for nodes. For example, Kubernetes may - // refer to a given node as "node1", but the storage system may refer to - // the same node as "nodeA". When Kubernetes issues a command to the storage - // system to attach a volume to a specific node, it can use this field to - // refer to the node name using the ID that the storage system will - // understand, e.g. "nodeA" instead of "node1". - NodeID string `json:"nodeID"` - - // topologyKeys is the list of keys supported by the driver. - // When a driver is initialized on a cluster, it provides a set of topology - // keys that it understands (e.g. "company.com/zone", "company.com/region"). - // When a driver is initialized on a node it provides the same topology keys - // along with values that kubelet applies to the coresponding node API - // object as labels. - // When Kubernetes does topology aware provisioning, it can use this list to - // determine which labels it should retrieve from the node object and pass - // back to the driver. - TopologyKeys []string `json:"topologyKeys"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CSINodeInfoList is a collection of CSINodeInfo objects. -type CSINodeInfoList struct { - metav1.TypeMeta `json:",inline"` - - // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty"` - - // items is the list of CSINodeInfo - Items []CSINodeInfo `json:"items"` -} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/BUILD b/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/BUILD deleted file mode 100644 index ed79e5349f8..00000000000 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "clientset.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-api/pkg/client/clientset/versioned", - importpath = "k8s.io/csi-api/pkg/client/clientset/versioned", - visibility = ["//visibility:public"], - deps = [ - "//staging/src/k8s.io/client-go/discovery:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/fake:all-srcs", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/scheme:all-srcs", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/clientset.go b/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/clientset.go deleted file mode 100644 index 9d9099a7fe2..00000000000 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/clientset.go +++ /dev/null @@ -1,98 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package versioned - -import ( - discovery "k8s.io/client-go/discovery" - rest "k8s.io/client-go/rest" - flowcontrol "k8s.io/client-go/util/flowcontrol" - csiv1alpha1 "k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1" -) - -type Interface interface { - Discovery() discovery.DiscoveryInterface - CsiV1alpha1() csiv1alpha1.CsiV1alpha1Interface - // Deprecated: please explicitly pick a version if possible. - Csi() csiv1alpha1.CsiV1alpha1Interface -} - -// Clientset contains the clients for groups. Each group has exactly one -// version included in a Clientset. -type Clientset struct { - *discovery.DiscoveryClient - csiV1alpha1 *csiv1alpha1.CsiV1alpha1Client -} - -// CsiV1alpha1 retrieves the CsiV1alpha1Client -func (c *Clientset) CsiV1alpha1() csiv1alpha1.CsiV1alpha1Interface { - return c.csiV1alpha1 -} - -// Deprecated: Csi retrieves the default version of CsiClient. -// Please explicitly pick a version. -func (c *Clientset) Csi() csiv1alpha1.CsiV1alpha1Interface { - return c.csiV1alpha1 -} - -// Discovery retrieves the DiscoveryClient -func (c *Clientset) Discovery() discovery.DiscoveryInterface { - if c == nil { - return nil - } - return c.DiscoveryClient -} - -// NewForConfig creates a new Clientset for the given config. -func NewForConfig(c *rest.Config) (*Clientset, error) { - configShallowCopy := *c - if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { - configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) - } - var cs Clientset - var err error - cs.csiV1alpha1, err = csiv1alpha1.NewForConfig(&configShallowCopy) - if err != nil { - return nil, err - } - - cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) - if err != nil { - return nil, err - } - return &cs, nil -} - -// NewForConfigOrDie creates a new Clientset for the given config and -// panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *Clientset { - var cs Clientset - cs.csiV1alpha1 = csiv1alpha1.NewForConfigOrDie(c) - - cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) - return &cs -} - -// New creates a new Clientset for the given RESTClient. -func New(c rest.Interface) *Clientset { - var cs Clientset - cs.csiV1alpha1 = csiv1alpha1.New(c) - - cs.DiscoveryClient = discovery.NewDiscoveryClient(c) - return &cs -} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/register.go b/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/register.go deleted file mode 100644 index 114f615f553..00000000000 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/scheme/register.go +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package scheme - -import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - schema "k8s.io/apimachinery/pkg/runtime/schema" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - csiv1alpha1 "k8s.io/csi-api/pkg/apis/csi/v1alpha1" -) - -var Scheme = runtime.NewScheme() -var Codecs = serializer.NewCodecFactory(Scheme) -var ParameterCodec = runtime.NewParameterCodec(Scheme) -var localSchemeBuilder = runtime.SchemeBuilder{ - csiv1alpha1.AddToScheme, -} - -// AddToScheme adds all types of this clientset into the given scheme. This allows composition -// of clientsets, like in: -// -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) -// -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) -// -// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types -// correctly. -var AddToScheme = localSchemeBuilder.AddToScheme - -func init() { - v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) - utilruntime.Must(AddToScheme(Scheme)) -} diff --git a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csinodeinfo.go b/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csinodeinfo.go deleted file mode 100644 index 3e5f73b0462..00000000000 --- a/vendor/k8s.io/csi-api/pkg/client/clientset/versioned/typed/csi/v1alpha1/csinodeinfo.go +++ /dev/null @@ -1,180 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "time" - - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" - v1alpha1 "k8s.io/csi-api/pkg/apis/csi/v1alpha1" - scheme "k8s.io/csi-api/pkg/client/clientset/versioned/scheme" -) - -// CSINodeInfosGetter has a method to return a CSINodeInfoInterface. -// A group's client should implement this interface. -type CSINodeInfosGetter interface { - CSINodeInfos() CSINodeInfoInterface -} - -// CSINodeInfoInterface has methods to work with CSINodeInfo resources. -type CSINodeInfoInterface interface { - Create(*v1alpha1.CSINodeInfo) (*v1alpha1.CSINodeInfo, error) - Update(*v1alpha1.CSINodeInfo) (*v1alpha1.CSINodeInfo, error) - UpdateStatus(*v1alpha1.CSINodeInfo) (*v1alpha1.CSINodeInfo, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1alpha1.CSINodeInfo, error) - List(opts v1.ListOptions) (*v1alpha1.CSINodeInfoList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CSINodeInfo, err error) - CSINodeInfoExpansion -} - -// cSINodeInfos implements CSINodeInfoInterface -type cSINodeInfos struct { - client rest.Interface -} - -// newCSINodeInfos returns a CSINodeInfos -func newCSINodeInfos(c *CsiV1alpha1Client) *cSINodeInfos { - return &cSINodeInfos{ - client: c.RESTClient(), - } -} - -// Get takes name of the cSINodeInfo, and returns the corresponding cSINodeInfo object, and an error if there is any. -func (c *cSINodeInfos) Get(name string, options v1.GetOptions) (result *v1alpha1.CSINodeInfo, err error) { - result = &v1alpha1.CSINodeInfo{} - err = c.client.Get(). - Resource("csinodeinfos"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of CSINodeInfos that match those selectors. -func (c *cSINodeInfos) List(opts v1.ListOptions) (result *v1alpha1.CSINodeInfoList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.CSINodeInfoList{} - err = c.client.Get(). - Resource("csinodeinfos"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested cSINodeInfos. -func (c *cSINodeInfos) Watch(opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("csinodeinfos"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch() -} - -// Create takes the representation of a cSINodeInfo and creates it. Returns the server's representation of the cSINodeInfo, and an error, if there is any. -func (c *cSINodeInfos) Create(cSINodeInfo *v1alpha1.CSINodeInfo) (result *v1alpha1.CSINodeInfo, err error) { - result = &v1alpha1.CSINodeInfo{} - err = c.client.Post(). - Resource("csinodeinfos"). - Body(cSINodeInfo). - Do(). - Into(result) - return -} - -// Update takes the representation of a cSINodeInfo and updates it. Returns the server's representation of the cSINodeInfo, and an error, if there is any. -func (c *cSINodeInfos) Update(cSINodeInfo *v1alpha1.CSINodeInfo) (result *v1alpha1.CSINodeInfo, err error) { - result = &v1alpha1.CSINodeInfo{} - err = c.client.Put(). - Resource("csinodeinfos"). - Name(cSINodeInfo.Name). - Body(cSINodeInfo). - Do(). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *cSINodeInfos) UpdateStatus(cSINodeInfo *v1alpha1.CSINodeInfo) (result *v1alpha1.CSINodeInfo, err error) { - result = &v1alpha1.CSINodeInfo{} - err = c.client.Put(). - Resource("csinodeinfos"). - Name(cSINodeInfo.Name). - SubResource("status"). - Body(cSINodeInfo). - Do(). - Into(result) - return -} - -// Delete takes name of the cSINodeInfo and deletes it. Returns an error if one occurs. -func (c *cSINodeInfos) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Resource("csinodeinfos"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *cSINodeInfos) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("csinodeinfos"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Timeout(timeout). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched cSINodeInfo. -func (c *cSINodeInfos) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CSINodeInfo, err error) { - result = &v1alpha1.CSINodeInfo{} - err = c.client.Patch(pt). - Resource("csinodeinfos"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/vendor/k8s.io/csi-translation-lib/BUILD b/vendor/k8s.io/csi-translation-lib/BUILD new file mode 100644 index 00000000000..19624f2108e --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/BUILD @@ -0,0 +1,37 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["translate.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-translation-lib", + importpath = "k8s.io/csi-translation-lib", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["translate_test.go"], + embed = [":go_default_library"], + deps = ["//staging/src/k8s.io/api/core/v1:go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/csi-translation-lib/plugins:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/csi-api/CONTRIBUTING.md b/vendor/k8s.io/csi-translation-lib/CONTRIBUTING.md similarity index 89% rename from vendor/k8s.io/csi-api/CONTRIBUTING.md rename to vendor/k8s.io/csi-translation-lib/CONTRIBUTING.md index f793e3047d6..f82be8de049 100644 --- a/vendor/k8s.io/csi-api/CONTRIBUTING.md +++ b/vendor/k8s.io/csi-translation-lib/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/csi-api](https://git.k8s.io/kubernetes/staging/src/k8s.io/csi-api) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information. +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information. diff --git a/vendor/k8s.io/csi-translation-lib/LICENSE b/vendor/k8s.io/csi-translation-lib/LICENSE new file mode 100644 index 00000000000..8dada3edaf5 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/k8s.io/csi-translation-lib/OWNERS b/vendor/k8s.io/csi-translation-lib/OWNERS new file mode 100644 index 00000000000..ecd5ad82007 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - davidz627 + - saad-ali + - msau42 + - ddebroy + - leakingtapan + +approvers: + - davidz627 + - saad-ali + - msau42 diff --git a/vendor/k8s.io/csi-api/README.md b/vendor/k8s.io/csi-translation-lib/README.md similarity index 63% rename from vendor/k8s.io/csi-api/README.md rename to vendor/k8s.io/csi-translation-lib/README.md index 6b9bcf6be15..1201823874b 100644 --- a/vendor/k8s.io/csi-api/README.md +++ b/vendor/k8s.io/csi-translation-lib/README.md @@ -1,10 +1,11 @@ ## Purpose -This repository contains type definitions and client code for the CSI -APIs that Kubernetes makes use of. +This repository contains functions to be consumed by various Kubernetes and +out-of-tree CSI components like external provisioner to facilitate migration of +code from Kubernetes In-tree plugin code to CSI plugin repositories. -Consumers of the CSI APIs can make use of this repository to access -implementations of the APIs. +Consumers of this repository can make use of functions like `TranslateToCSI` and +`TranslateToInTree` functions to translate PV sources. ## Community, discussion, contribution, and support diff --git a/vendor/k8s.io/csi-translation-lib/SECURITY_CONTACTS b/vendor/k8s.io/csi-translation-lib/SECURITY_CONTACTS new file mode 100644 index 00000000000..2e1f26adf30 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/SECURITY_CONTACTS @@ -0,0 +1,13 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Committee to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +saad-ali diff --git a/vendor/k8s.io/csi-translation-lib/code-of-conduct.md b/vendor/k8s.io/csi-translation-lib/code-of-conduct.md new file mode 100644 index 00000000000..0d15c00cf32 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/vendor/k8s.io/csi-translation-lib/plugins/BUILD b/vendor/k8s.io/csi-translation-lib/plugins/BUILD new file mode 100644 index 00000000000..965bbd0175b --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/plugins/BUILD @@ -0,0 +1,39 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "aws_ebs.go", + "gce_pd.go", + "in_tree_volume.go", + "openstack_cinder.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/csi-translation-lib/plugins", + importpath = "k8s.io/csi-translation-lib/plugins", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/cloud-provider/volume:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["aws_ebs_test.go"], + embed = [":go_default_library"], +) diff --git a/vendor/k8s.io/csi-translation-lib/plugins/aws_ebs.go b/vendor/k8s.io/csi-translation-lib/plugins/aws_ebs.go new file mode 100644 index 00000000000..9cb61768493 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/plugins/aws_ebs.go @@ -0,0 +1,170 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import ( + "fmt" + "net/url" + "regexp" + "strconv" + "strings" + + "k8s.io/api/core/v1" +) + +const ( + // AWSEBSDriverName is the name of the CSI driver for EBS + AWSEBSDriverName = "ebs.csi.aws.com" + // AWSEBSInTreePluginName is the name of the intree plugin for EBS + AWSEBSInTreePluginName = "kubernetes.io/aws-ebs" +) + +var _ InTreePlugin = &awsElasticBlockStoreCSITranslator{} + +// awsElasticBlockStoreTranslator handles translation of PV spec from In-tree EBS to CSI EBS and vice versa +type awsElasticBlockStoreCSITranslator struct{} + +// NewAWSElasticBlockStoreCSITranslator returns a new instance of awsElasticBlockStoreTranslator +func NewAWSElasticBlockStoreCSITranslator() InTreePlugin { + return &awsElasticBlockStoreCSITranslator{} +} + +// TranslateInTreeStorageClassParametersToCSI translates InTree EBS storage class parameters to CSI storage class +func (t *awsElasticBlockStoreCSITranslator) TranslateInTreeStorageClassParametersToCSI(scParameters map[string]string) (map[string]string, error) { + return scParameters, nil +} + +// TranslateInTreePVToCSI takes a PV with AWSElasticBlockStore set from in-tree +// and converts the AWSElasticBlockStore source to a CSIPersistentVolumeSource +func (t *awsElasticBlockStoreCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.AWSElasticBlockStore == nil { + return nil, fmt.Errorf("pv is nil or AWS EBS not defined on pv") + } + + ebsSource := pv.Spec.AWSElasticBlockStore + + volumeHandle, err := KubernetesVolumeIDToEBSVolumeID(ebsSource.VolumeID) + if err != nil { + return nil, fmt.Errorf("failed to translate Kubernetes ID to EBS Volume ID %v", err) + } + + csiSource := &v1.CSIPersistentVolumeSource{ + Driver: AWSEBSDriverName, + VolumeHandle: volumeHandle, + ReadOnly: ebsSource.ReadOnly, + FSType: ebsSource.FSType, + VolumeAttributes: map[string]string{ + "partition": strconv.FormatInt(int64(ebsSource.Partition), 10), + }, + } + + pv.Spec.AWSElasticBlockStore = nil + pv.Spec.CSI = csiSource + return pv, nil +} + +// TranslateCSIPVToInTree takes a PV with CSIPersistentVolumeSource set and +// translates the EBS CSI source to a AWSElasticBlockStore source. +func (t *awsElasticBlockStoreCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.CSI == nil { + return nil, fmt.Errorf("pv is nil or CSI source not defined on pv") + } + + csiSource := pv.Spec.CSI + + ebsSource := &v1.AWSElasticBlockStoreVolumeSource{ + VolumeID: csiSource.VolumeHandle, + FSType: csiSource.FSType, + ReadOnly: csiSource.ReadOnly, + } + + if partition, ok := csiSource.VolumeAttributes["partition"]; ok { + partValue, err := strconv.Atoi(partition) + if err != nil { + return nil, fmt.Errorf("Failed to convert partition %v to integer: %v", partition, err) + } + ebsSource.Partition = int32(partValue) + } + + pv.Spec.CSI = nil + pv.Spec.AWSElasticBlockStore = ebsSource + return pv, nil +} + +// CanSupport tests whether the plugin supports a given volume +// specification from the API. The spec pointer should be considered +// const. +func (t *awsElasticBlockStoreCSITranslator) CanSupport(pv *v1.PersistentVolume) bool { + return pv != nil && pv.Spec.AWSElasticBlockStore != nil +} + +// GetInTreePluginName returns the name of the intree plugin driver +func (t *awsElasticBlockStoreCSITranslator) GetInTreePluginName() string { + return AWSEBSInTreePluginName +} + +// GetCSIPluginName returns the name of the CSI plugin +func (t *awsElasticBlockStoreCSITranslator) GetCSIPluginName() string { + return AWSEBSDriverName +} + +// awsVolumeRegMatch represents Regex Match for AWS volume. +var awsVolumeRegMatch = regexp.MustCompile("^vol-[^/]*$") + +// KubernetesVolumeIDToEBSVolumeID translates Kubernetes volume ID to EBS volume ID +// KubernetsVolumeID forms: +// * aws:/// +// * aws:/// +// * +// EBS Volume ID form: +// * vol- +// This translation shouldn't be needed and should be fixed in long run +// See https://github.com/kubernetes/kubernetes/issues/73730 +func KubernetesVolumeIDToEBSVolumeID(kubernetesID string) (string, error) { + // name looks like aws://availability-zone/awsVolumeId + + // The original idea of the URL-style name was to put the AZ into the + // host, so we could find the AZ immediately from the name without + // querying the API. But it turns out we don't actually need it for + // multi-AZ clusters, as we put the AZ into the labels on the PV instead. + // However, if in future we want to support multi-AZ cluster + // volume-awareness without using PersistentVolumes, we likely will + // want the AZ in the host. + if !strings.HasPrefix(kubernetesID, "aws://") { + // Assume a bare aws volume id (vol-1234...) + return kubernetesID, nil + } + url, err := url.Parse(kubernetesID) + if err != nil { + // TODO: Maybe we should pass a URL into the Volume functions + return "", fmt.Errorf("Invalid disk name (%s): %v", kubernetesID, err) + } + if url.Scheme != "aws" { + return "", fmt.Errorf("Invalid scheme for AWS volume (%s)", kubernetesID) + } + + awsID := url.Path + awsID = strings.Trim(awsID, "/") + + // We sanity check the resulting volume; the two known formats are + // vol-12345678 and vol-12345678abcdef01 + if !awsVolumeRegMatch.MatchString(awsID) { + return "", fmt.Errorf("Invalid format for AWS volume (%s)", kubernetesID) + } + + return awsID, nil +} diff --git a/vendor/k8s.io/csi-translation-lib/plugins/gce_pd.go b/vendor/k8s.io/csi-translation-lib/plugins/gce_pd.go new file mode 100644 index 00000000000..103a62279de --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/plugins/gce_pd.go @@ -0,0 +1,190 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import ( + "fmt" + "strconv" + "strings" + + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/sets" + cloudvolume "k8s.io/cloud-provider/volume" +) + +const ( + // GCEPDDriverName is the name of the CSI driver for GCE PD + GCEPDDriverName = "pd.csi.storage.gke.io" + // GCEPDInTreePluginName is the name of the intree plugin for GCE PD + GCEPDInTreePluginName = "kubernetes.io/gce-pd" + + // Volume ID Expected Format + // "projects/{projectName}/zones/{zoneName}/disks/{diskName}" + volIDZonalFmt = "projects/%s/zones/%s/disks/%s" + // "projects/{projectName}/regions/{regionName}/disks/{diskName}" + volIDRegionalFmt = "projects/%s/regions/%s/disks/%s" + volIDDiskNameValue = 5 + volIDTotalElements = 6 + + // UnspecifiedValue is used for an unknown zone string + UnspecifiedValue = "UNSPECIFIED" +) + +var _ InTreePlugin = &gcePersistentDiskCSITranslator{} + +// gcePersistentDiskCSITranslator handles translation of PV spec from In-tree +// GCE PD to CSI GCE PD and vice versa +type gcePersistentDiskCSITranslator struct{} + +// NewGCEPersistentDiskCSITranslator returns a new instance of gcePersistentDiskTranslator +func NewGCEPersistentDiskCSITranslator() InTreePlugin { + return &gcePersistentDiskCSITranslator{} +} + +// TranslateInTreeStorageClassParametersToCSI translates InTree GCE storage class parameters to CSI storage class +func (g *gcePersistentDiskCSITranslator) TranslateInTreeStorageClassParametersToCSI(scParameters map[string]string) (map[string]string, error) { + return scParameters, nil +} + +// TranslateInTreePVToCSI takes a PV with GCEPersistentDisk set from in-tree +// and converts the GCEPersistentDisk source to a CSIPersistentVolumeSource +func (g *gcePersistentDiskCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + var volID string + + if pv == nil || pv.Spec.GCEPersistentDisk == nil { + return nil, fmt.Errorf("pv is nil or GCE Persistent Disk source not defined on pv") + } + + zonesLabel := pv.Labels[v1.LabelZoneFailureDomain] + zones := strings.Split(zonesLabel, cloudvolume.LabelMultiZoneDelimiter) + if len(zones) == 1 && len(zones[0]) != 0 { + // Zonal + volID = fmt.Sprintf(volIDZonalFmt, UnspecifiedValue, zones[0], pv.Spec.GCEPersistentDisk.PDName) + } else if len(zones) > 1 { + // Regional + region, err := getRegionFromZones(zones) + if err != nil { + return nil, fmt.Errorf("failed to get region from zones: %v", err) + } + volID = fmt.Sprintf(volIDZonalFmt, UnspecifiedValue, region, pv.Spec.GCEPersistentDisk.PDName) + } else { + // Unspecified + volID = fmt.Sprintf(volIDZonalFmt, UnspecifiedValue, UnspecifiedValue, pv.Spec.GCEPersistentDisk.PDName) + } + + gceSource := pv.Spec.PersistentVolumeSource.GCEPersistentDisk + + partition := "" + if gceSource.Partition != 0 { + partition = strconv.Itoa(int(gceSource.Partition)) + } + + csiSource := &v1.CSIPersistentVolumeSource{ + Driver: GCEPDDriverName, + VolumeHandle: volID, + ReadOnly: gceSource.ReadOnly, + FSType: gceSource.FSType, + VolumeAttributes: map[string]string{ + "partition": partition, + }, + } + + pv.Spec.PersistentVolumeSource.GCEPersistentDisk = nil + pv.Spec.PersistentVolumeSource.CSI = csiSource + + return pv, nil +} + +// TranslateCSIPVToInTree takes a PV with CSIPersistentVolumeSource set and +// translates the GCE PD CSI source to a GCEPersistentDisk source. +func (g *gcePersistentDiskCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.CSI == nil { + return nil, fmt.Errorf("pv is nil or CSI source not defined on pv") + } + csiSource := pv.Spec.CSI + + pdName, err := pdNameFromVolumeID(csiSource.VolumeHandle) + if err != nil { + return nil, err + } + + gceSource := &v1.GCEPersistentDiskVolumeSource{ + PDName: pdName, + FSType: csiSource.FSType, + ReadOnly: csiSource.ReadOnly, + } + if partition, ok := csiSource.VolumeAttributes["partition"]; ok && partition != "" { + partInt, err := strconv.Atoi(partition) + if err != nil { + return nil, fmt.Errorf("Failed to convert partition %v to integer: %v", partition, err) + } + gceSource.Partition = int32(partInt) + } + + // TODO: Take the zone/regional information and stick it into the label. + + pv.Spec.CSI = nil + pv.Spec.GCEPersistentDisk = gceSource + + return pv, nil +} + +// CanSupport tests whether the plugin supports a given volume +// specification from the API. The spec pointer should be considered +// const. +func (g *gcePersistentDiskCSITranslator) CanSupport(pv *v1.PersistentVolume) bool { + return pv != nil && pv.Spec.GCEPersistentDisk != nil +} + +// GetInTreePluginName returns the name of the intree plugin driver +func (g *gcePersistentDiskCSITranslator) GetInTreePluginName() string { + return GCEPDInTreePluginName +} + +// GetCSIPluginName returns the name of the CSI plugin +func (g *gcePersistentDiskCSITranslator) GetCSIPluginName() string { + return GCEPDDriverName +} + +func pdNameFromVolumeID(id string) (string, error) { + splitID := strings.Split(id, "/") + if len(splitID) != volIDTotalElements { + return "", fmt.Errorf("failed to get id components. Expected projects/{project}/zones/{zone}/disks/{name}. Got: %s", id) + } + return splitID[volIDDiskNameValue], nil +} + +// TODO: Replace this with the imported one from GCE PD CSI Driver when +// the driver removes all k8s/k8s dependencies +func getRegionFromZones(zones []string) (string, error) { + regions := sets.String{} + if len(zones) < 1 { + return "", fmt.Errorf("no zones specified") + } + for _, zone := range zones { + // Zone expected format {locale}-{region}-{zone} + splitZone := strings.Split(zone, "-") + if len(splitZone) != 3 { + return "", fmt.Errorf("zone in unexpected format, expected: {locale}-{region}-{zone}, got: %v", zone) + } + regions.Insert(strings.Join(splitZone[0:2], "-")) + } + if regions.Len() != 1 { + return "", fmt.Errorf("multiple or no regions gotten from zones, got: %v", regions) + } + return regions.UnsortedList()[0], nil +} diff --git a/vendor/k8s.io/csi-translation-lib/plugins/in_tree_volume.go b/vendor/k8s.io/csi-translation-lib/plugins/in_tree_volume.go new file mode 100644 index 00000000000..6d5afd9f1f5 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/plugins/in_tree_volume.go @@ -0,0 +1,46 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import "k8s.io/api/core/v1" + +// InTreePlugin handles translations between CSI and in-tree sources in a PV +type InTreePlugin interface { + + // TranslateInTreeStorageClassParametersToCSI takes in-tree storage class + // parameters and translates them to a set of parameters consumable by CSI plugin + TranslateInTreeStorageClassParametersToCSI(scParameters map[string]string) (map[string]string, error) + + // TranslateInTreePVToCSI takes a persistent volume and will translate + // the in-tree source to a CSI Source. The input persistent volume can be modified + TranslateInTreePVToCSI(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) + + // TranslateCSIPVToInTree takes a PV with a CSI PersistentVolume Source and will translate + // it to a in-tree Persistent Volume Source for the in-tree volume + // by the `Driver` field in the CSI Source. The input PV object can be modified + TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) + + // CanSupport tests whether the plugin supports a given volume + // specification from the API. + CanSupport(pv *v1.PersistentVolume) bool + + // GetInTreePluginName returns the in-tree plugin name this migrates + GetInTreePluginName() string + + // GetCSIPluginName returns the name of the CSI plugin that supersedes the in-tree plugin + GetCSIPluginName() string +} diff --git a/vendor/k8s.io/csi-translation-lib/plugins/openstack_cinder.go b/vendor/k8s.io/csi-translation-lib/plugins/openstack_cinder.go new file mode 100644 index 00000000000..abd204a5575 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/plugins/openstack_cinder.go @@ -0,0 +1,103 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import ( + "fmt" + "k8s.io/api/core/v1" +) + +const ( + // CinderDriverName is the name of the CSI driver for Cinder + CinderDriverName = "cinder.csi.openstack.org" + // CinderInTreePluginName is the name of the intree plugin for Cinder + CinderInTreePluginName = "kubernetes.io/cinder" +) + +var _ InTreePlugin = (*osCinderCSITranslator)(nil) + +// osCinderCSITranslator handles translation of PV spec from In-tree Cinder to CSI Cinder and vice versa +type osCinderCSITranslator struct{} + +// NewOpenStackCinderCSITranslator returns a new instance of osCinderCSITranslator +func NewOpenStackCinderCSITranslator() InTreePlugin { + return &osCinderCSITranslator{} +} + +// TranslateInTreeStorageClassParametersToCSI translates InTree Cinder storage class parameters to CSI storage class +func (t *osCinderCSITranslator) TranslateInTreeStorageClassParametersToCSI(scParameters map[string]string) (map[string]string, error) { + return scParameters, nil +} + +// TranslateInTreePVToCSI takes a PV with Cinder set from in-tree +// and converts the Cinder source to a CSIPersistentVolumeSource +func (t *osCinderCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.Cinder == nil { + return nil, fmt.Errorf("pv is nil or Cinder not defined on pv") + } + + cinderSource := pv.Spec.Cinder + + csiSource := &v1.CSIPersistentVolumeSource{ + Driver: CinderDriverName, + VolumeHandle: cinderSource.VolumeID, + ReadOnly: cinderSource.ReadOnly, + FSType: cinderSource.FSType, + VolumeAttributes: map[string]string{}, + } + + pv.Spec.Cinder = nil + pv.Spec.CSI = csiSource + return pv, nil +} + +// TranslateCSIPVToInTree takes a PV with CSIPersistentVolumeSource set and +// translates the Cinder CSI source to a Cinder In-tree source. +func (t *osCinderCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.CSI == nil { + return nil, fmt.Errorf("pv is nil or CSI source not defined on pv") + } + + csiSource := pv.Spec.CSI + + cinderSource := &v1.CinderPersistentVolumeSource{ + VolumeID: csiSource.VolumeHandle, + FSType: csiSource.FSType, + ReadOnly: csiSource.ReadOnly, + } + + pv.Spec.CSI = nil + pv.Spec.Cinder = cinderSource + return pv, nil +} + +// CanSupport tests whether the plugin supports a given volume +// specification from the API. The spec pointer should be considered +// const. +func (t *osCinderCSITranslator) CanSupport(pv *v1.PersistentVolume) bool { + return pv != nil && pv.Spec.Cinder != nil +} + +// GetInTreePluginName returns the name of the intree plugin driver +func (t *osCinderCSITranslator) GetInTreePluginName() string { + return CinderInTreePluginName +} + +// GetCSIPluginName returns the name of the CSI plugin +func (t *osCinderCSITranslator) GetCSIPluginName() string { + return CinderDriverName +} diff --git a/vendor/k8s.io/csi-translation-lib/translate.go b/vendor/k8s.io/csi-translation-lib/translate.go new file mode 100644 index 00000000000..ac1a4dd3d86 --- /dev/null +++ b/vendor/k8s.io/csi-translation-lib/translate.go @@ -0,0 +1,149 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package csitranslation + +import ( + "errors" + "fmt" + + "k8s.io/api/core/v1" + "k8s.io/csi-translation-lib/plugins" +) + +var ( + inTreePlugins = map[string]plugins.InTreePlugin{ + plugins.GCEPDDriverName: plugins.NewGCEPersistentDiskCSITranslator(), + plugins.AWSEBSDriverName: plugins.NewAWSElasticBlockStoreCSITranslator(), + plugins.CinderDriverName: plugins.NewOpenStackCinderCSITranslator(), + } +) + +// TranslateInTreeStorageClassParametersToCSI takes in-tree storage class +// parameters and translates them to a set of parameters consumable by CSI plugin +func TranslateInTreeStorageClassParametersToCSI(inTreePluginName string, scParameters map[string]string) (map[string]string, error) { + for _, curPlugin := range inTreePlugins { + if inTreePluginName == curPlugin.GetInTreePluginName() { + return curPlugin.TranslateInTreeStorageClassParametersToCSI(scParameters) + } + } + return nil, fmt.Errorf("could not find in-tree storage class parameter translation logic for %#v", inTreePluginName) +} + +// TranslateInTreePVToCSI takes a persistent volume and will translate +// the in-tree source to a CSI Source if the translation logic +// has been implemented. The input persistent volume will not +// be modified +func TranslateInTreePVToCSI(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil { + return nil, errors.New("persistent volume was nil") + } + copiedPV := pv.DeepCopy() + for _, curPlugin := range inTreePlugins { + if curPlugin.CanSupport(copiedPV) { + return curPlugin.TranslateInTreePVToCSI(copiedPV) + } + } + return nil, fmt.Errorf("could not find in-tree plugin translation logic for %#v", copiedPV.Name) +} + +// TranslateCSIPVToInTree takes a PV with a CSI PersistentVolume Source and will translate +// it to a in-tree Persistent Volume Source for the specific in-tree volume specified +// by the `Driver` field in the CSI Source. The input PV object will not be modified. +func TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if pv == nil || pv.Spec.CSI == nil { + return nil, errors.New("CSI persistent volume was nil") + } + copiedPV := pv.DeepCopy() + for driverName, curPlugin := range inTreePlugins { + if copiedPV.Spec.CSI.Driver == driverName { + return curPlugin.TranslateCSIPVToInTree(copiedPV) + } + } + return nil, fmt.Errorf("could not find in-tree plugin translation logic for %s", copiedPV.Spec.CSI.Driver) +} + +// IsMigratableIntreePluginByName tests whether there is migration logic for the in-tree plugin +// whose name matches the given name +func IsMigratableIntreePluginByName(inTreePluginName string) bool { + for _, curPlugin := range inTreePlugins { + if curPlugin.GetInTreePluginName() == inTreePluginName { + return true + } + } + return false +} + +// IsMigratedCSIDriverByName tests whether there exists an in-tree plugin with logic +// to migrate to the CSI driver with given name +func IsMigratedCSIDriverByName(csiPluginName string) bool { + if _, ok := inTreePlugins[csiPluginName]; ok { + return true + } + return false +} + +// GetInTreePluginNameFromSpec returns the plugin name +func GetInTreePluginNameFromSpec(pv *v1.PersistentVolume, vol *v1.Volume) (string, error) { + if pv != nil { + for _, curPlugin := range inTreePlugins { + if curPlugin.CanSupport(pv) { + return curPlugin.GetInTreePluginName(), nil + } + } + return "", fmt.Errorf("could not find in-tree plugin name from persistent volume %v", pv) + } else if vol != nil { + // TODO(dyzz): Implement inline volume migration support + return "", errors.New("inline volume migration not yet supported") + } else { + return "", errors.New("both persistent volume and volume are nil") + } +} + +// GetCSINameFromInTreeName returns the name of a CSI driver that supersedes the +// in-tree plugin with the given name +func GetCSINameFromInTreeName(pluginName string) (string, error) { + for csiDriverName, curPlugin := range inTreePlugins { + if curPlugin.GetInTreePluginName() == pluginName { + return csiDriverName, nil + } + } + return "", fmt.Errorf("could not find CSI Driver name for plugin %v", pluginName) +} + +// GetInTreeNameFromCSIName returns the name of the in-tree plugin superseded by +// a CSI driver with the given name +func GetInTreeNameFromCSIName(pluginName string) (string, error) { + if plugin, ok := inTreePlugins[pluginName]; ok { + return plugin.GetInTreePluginName(), nil + } + return "", fmt.Errorf("Could not find In-Tree driver name for CSI plugin %v", pluginName) +} + +// IsPVMigratable tests whether there is migration logic for the given Persistent Volume +func IsPVMigratable(pv *v1.PersistentVolume) bool { + for _, curPlugin := range inTreePlugins { + if curPlugin.CanSupport(pv) { + return true + } + } + return false +} + +// IsInlineMigratable tests whether there is Migration logic for the given Inline Volume +func IsInlineMigratable(vol *v1.Volume) bool { + return false +} diff --git a/vendor/k8s.io/klog/.travis.yml b/vendor/k8s.io/klog/.travis.yml index fc0d2caf33f..0f508dae66e 100644 --- a/vendor/k8s.io/klog/.travis.yml +++ b/vendor/k8s.io/klog/.travis.yml @@ -1,4 +1,5 @@ language: go +go_import_path: k8s.io/klog dist: xenial go: - 1.9.x diff --git a/vendor/k8s.io/klog/CONTRIBUTING.md b/vendor/k8s.io/klog/CONTRIBUTING.md index de471151372..574a56abbbe 100644 --- a/vendor/k8s.io/klog/CONTRIBUTING.md +++ b/vendor/k8s.io/klog/CONTRIBUTING.md @@ -8,10 +8,6 @@ _As contributors and maintainers of this project, and in the interest of fosteri We have full documentation on how to get started contributing here: - - - [Contributor License Agreement](https://git.k8s.io/community/CLA.md) Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests - [Kubernetes Contributor Guide](http://git.k8s.io/community/contributors/guide) - Main contributor documentation, or you can just jump directly to the [contributing section](http://git.k8s.io/community/contributors/guide#contributing) - [Contributor Cheat Sheet](https://git.k8s.io/community/contributors/guide/contributor-cheatsheet.md) - Common resources for existing developers @@ -20,12 +16,7 @@ If your repo has certain guidelines for contribution, put them here ahead of the - [Mentoring Initiatives](https://git.k8s.io/community/mentoring) - We have a diverse set of mentorship programs available that are always looking for volunteers! - +- [Slack](https://kubernetes.slack.com/messages/sig-architecture) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) diff --git a/vendor/k8s.io/klog/OWNERS b/vendor/k8s.io/klog/OWNERS index 56b0eb044f8..380e514f280 100644 --- a/vendor/k8s.io/klog/OWNERS +++ b/vendor/k8s.io/klog/OWNERS @@ -1,5 +1,13 @@ -# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md - +# See the OWNERS docs at https://go.k8s.io/owners +reviewers: + - jayunit100 + - hoegaarden + - andyxning + - neolit123 + - pohly + - yagonobre + - vincepri + - detiber approvers: - dims - thockin diff --git a/vendor/k8s.io/klog/README.md b/vendor/k8s.io/klog/README.md index a747f538a84..6cb6d168375 100644 --- a/vendor/k8s.io/klog/README.md +++ b/vendor/k8s.io/klog/README.md @@ -5,6 +5,32 @@ klog is a permanant fork of https://github.com/golang/glog. original README from ---- +How to use klog +=============== +- Replace imports for `github.com/golang/glog` with `k8s.io/klog` +- Use `klog.InitFlags(nil)` explicitly for initializing global flags as we no longer use `init()` method to register the flags +- You can now use `log-file` instead of `log-dir` for logging to a single file (See `examples/log_file/usage_log_file.go`) +- If you want to redirect everything logged using klog somewhere else (say syslog!), you can use `klog.SetOutput()` method and supply a `io.Writer`. (See `examples/set_output/usage_set_output.go`) +- For more logging conventions (See [Logging Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/logging.md)) + +### Coexisting with glog +This package can be used side by side with glog. [This example](examples/coexist_glog/coexist_glog.go) shows how to initialize and syncronize flags from the global `flag.CommandLine` FlagSet. In addition, the example makes use of stderr as combined output by setting `alsologtostderr` (or `logtostderr`) to `true`. + +## Community, discussion, contribution, and support + +Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/). + +You can reach the maintainers of this project at: + +- [Slack](https://kubernetes.slack.com/messages/sig-architecture) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) + +### Code of conduct + +Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). + +---- + glog ==== @@ -26,20 +52,20 @@ The comment from glog.go introduces the ideas: Error, Fatal, plus formatting variants such as Infof. It also provides V-style logging controlled by the -v and -vmodule=file=2 flags. - + Basic examples: - + glog.Info("Prepare to repel boarders") - + glog.Fatalf("Initialization failed: %s", err) - + See the documentation for the V function for an explanation of these examples: - + if glog.V(2) { glog.Info("Starting transaction...") } - + glog.V(2).Infoln("Processed", nItems, "elements") diff --git a/vendor/k8s.io/klog/code-of-conduct.md b/vendor/k8s.io/klog/code-of-conduct.md new file mode 100644 index 00000000000..0d15c00cf32 --- /dev/null +++ b/vendor/k8s.io/klog/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/vendor/k8s.io/klog/klog.go b/vendor/k8s.io/klog/klog.go index 13bcc81a756..398cd1c5dbf 100644 --- a/vendor/k8s.io/klog/klog.go +++ b/vendor/k8s.io/klog/klog.go @@ -410,9 +410,9 @@ func InitFlags(flagset *flag.FlagSet) { } flagset.StringVar(&logging.logDir, "log_dir", "", "If non-empty, write log files in this directory") flagset.StringVar(&logging.logFile, "log_file", "", "If non-empty, use this log file") - flagset.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files") + flagset.BoolVar(&logging.toStderr, "logtostderr", true, "log to standard error instead of files") flagset.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files") - flagset.Var(&logging.verbosity, "v", "log level for V logs") + flagset.Var(&logging.verbosity, "v", "number for the log level verbosity") flagset.BoolVar(&logging.skipHeaders, "skip_headers", false, "If true, avoid header prefixes in the log messages") flagset.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") flagset.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging") @@ -872,7 +872,7 @@ func (sb *syncBuffer) Sync() error { func (sb *syncBuffer) Write(p []byte) (n int, err error) { if sb.nbytes+uint64(len(p)) >= MaxSize { - if err := sb.rotateFile(time.Now()); err != nil { + if err := sb.rotateFile(time.Now(), false); err != nil { sb.logger.exit(err) } } @@ -885,13 +885,15 @@ func (sb *syncBuffer) Write(p []byte) (n int, err error) { } // rotateFile closes the syncBuffer's file and starts a new one. -func (sb *syncBuffer) rotateFile(now time.Time) error { +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for apending instead of truncated. +func (sb *syncBuffer) rotateFile(now time.Time, startup bool) error { if sb.file != nil { sb.Flush() sb.file.Close() } var err error - sb.file, _, err = create(severityName[sb.sev], now) + sb.file, _, err = create(severityName[sb.sev], now, startup) sb.nbytes = 0 if err != nil { return err @@ -926,7 +928,7 @@ func (l *loggingT) createFiles(sev severity) error { logger: l, sev: s, } - if err := sb.rotateFile(now); err != nil { + if err := sb.rotateFile(now, true); err != nil { return err } l.file[s] = sb @@ -934,7 +936,7 @@ func (l *loggingT) createFiles(sev severity) error { return nil } -const flushInterval = 30 * time.Second +const flushInterval = 5 * time.Second // flushDaemon periodically flushes the log file buffers. func (l *loggingT) flushDaemon() { diff --git a/vendor/k8s.io/klog/klog_file.go b/vendor/k8s.io/klog/klog_file.go index b76a4e10bec..1c4897f4fdc 100644 --- a/vendor/k8s.io/klog/klog_file.go +++ b/vendor/k8s.io/klog/klog_file.go @@ -97,9 +97,11 @@ var onceLogDirs sync.Once // contains tag ("INFO", "FATAL", etc.) and t. If the file is created // successfully, create also attempts to update the symlink for that tag, ignoring // errors. -func create(tag string, t time.Time) (f *os.File, filename string, err error) { +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for apending instead of truncated. +func create(tag string, t time.Time, startup bool) (f *os.File, filename string, err error) { if logging.logFile != "" { - f, err := os.Create(logging.logFile) + f, err := openOrCreate(logging.logFile, startup) if err == nil { return f, logging.logFile, nil } @@ -113,7 +115,7 @@ func create(tag string, t time.Time) (f *os.File, filename string, err error) { var lastErr error for _, dir := range logDirs { fname := filepath.Join(dir, name) - f, err := os.Create(fname) + f, err := openOrCreate(fname, startup) if err == nil { symlink := filepath.Join(dir, link) os.Remove(symlink) // ignore err @@ -124,3 +126,14 @@ func create(tag string, t time.Time) (f *os.File, filename string, err error) { } return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr) } + +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for appending instead of truncated. +func openOrCreate(name string, startup bool) (*os.File, error) { + if startup { + f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + return f, err + } + f, err := os.Create(name) + return f, err +} diff --git a/vendor/k8s.io/kube-aggregator/BUILD b/vendor/k8s.io/kube-aggregator/BUILD index 99bf2540e29..229d53ddd80 100644 --- a/vendor/k8s.io/kube-aggregator/BUILD +++ b/vendor/k8s.io/kube-aggregator/BUILD @@ -21,7 +21,7 @@ go_library( importpath = "k8s.io/kube-aggregator", deps = [ "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/install:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/validation:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset:go_default_library", diff --git a/vendor/k8s.io/kube-aggregator/CONTRIBUTING.md b/vendor/k8s.io/kube-aggregator/CONTRIBUTING.md index 4466b66c992..71b5e08458e 100644 --- a/vendor/k8s.io/kube-aggregator/CONTRIBUTING.md +++ b/vendor/k8s.io/kube-aggregator/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kube-aggregator](https://git.k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kube-aggregator](https://git.k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/kube-aggregator/OWNERS b/vendor/k8s.io/kube-aggregator/OWNERS index aac40258802..67bdbcc50ed 100644 --- a/vendor/k8s.io/kube-aggregator/OWNERS +++ b/vendor/k8s.io/kube-aggregator/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - lavalamp diff --git a/vendor/k8s.io/kube-aggregator/SECURITY_CONTACTS b/vendor/k8s.io/kube-aggregator/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/kube-aggregator/SECURITY_CONTACTS +++ b/vendor/k8s.io/kube-aggregator/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/OWNERS b/vendor/k8s.io/kube-aggregator/pkg/apis/OWNERS index bae178f8175..38336c177f9 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/OWNERS +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/doc.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/doc.go index 3bd2bc737c8..394bcbc8ef8 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/doc.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/doc.go @@ -17,5 +17,5 @@ limitations under the License. // +k8s:deepcopy-gen=package // +groupName=apiregistration.k8s.io -// Package api is the internal version of the API. +// Package apiregistration is the internal version of the API. package apiregistration // import "k8s.io/kube-aggregator/pkg/apis/apiregistration" diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/helpers.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/helpers.go index ab1f40cdc1f..0f1d6bc6e11 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/helpers.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/helpers.go @@ -25,6 +25,10 @@ import ( "k8s.io/apimachinery/pkg/version" ) +// SortedByGroupAndVersion sorts APIServices into their different groups, and then sorts them based on their versions. +// For example, the first element of the first array contains the APIService with the highest version number, in the +// group with the highest priority; while the last element of the last array contains the APIService with the lowest +// version number, in the group with the lowest priority. func SortedByGroupAndVersion(servers []*APIService) [][]*APIService { serversByGroupPriorityMinimum := ByGroupPriorityMinimum(servers) sort.Sort(serversByGroupPriorityMinimum) @@ -98,16 +102,20 @@ func NewLocalAvailableAPIServiceCondition() APIServiceCondition { } } +// GetAPIServiceConditionByType gets an *APIServiceCondition by APIServiceConditionType if present +func GetAPIServiceConditionByType(apiService *APIService, conditionType APIServiceConditionType) *APIServiceCondition { + for i := range apiService.Status.Conditions { + if apiService.Status.Conditions[i].Type == conditionType { + return &apiService.Status.Conditions[i] + } + } + return nil +} + // SetAPIServiceCondition sets the status condition. It either overwrites the existing one or // creates a new one func SetAPIServiceCondition(apiService *APIService, newCondition APIServiceCondition) { - var existingCondition *APIServiceCondition - for i := range apiService.Status.Conditions { - if apiService.Status.Conditions[i].Type == newCondition.Type { - existingCondition = &apiService.Status.Conditions[i] - break - } - } + existingCondition := GetAPIServiceConditionByType(apiService, newCondition.Type) if existingCondition == nil { apiService.Status.Conditions = append(apiService.Status.Conditions, newCondition) return @@ -124,10 +132,6 @@ func SetAPIServiceCondition(apiService *APIService, newCondition APIServiceCondi // IsAPIServiceConditionTrue indicates if the condition is present and strictly true func IsAPIServiceConditionTrue(apiService *APIService, conditionType APIServiceConditionType) bool { - for _, condition := range apiService.Status.Conditions { - if condition.Type == conditionType && condition.Status == ConditionTrue { - return true - } - } - return false + condition := GetAPIServiceConditionByType(apiService, conditionType) + return condition != nil && condition.Status == ConditionTrue } diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/register.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/register.go index 2ab61e9b4fe..7b88df42fa2 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/register.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/register.go @@ -21,6 +21,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +// GroupName is the API group for apiregistration const GroupName = "apiregistration.k8s.io" // SchemeGroupVersion is group version used to register these objects @@ -37,8 +38,10 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = SchemeBuilder.AddToScheme ) // Adds the list of known types to the given scheme. diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go index 459edfe763c..a8e345f81b9 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go @@ -57,7 +57,7 @@ type APIServiceSpec struct { // +optional CABundle []byte - // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. + // GroupPriorityMinimum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. // Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. // The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). // The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) @@ -78,6 +78,7 @@ type APIServiceSpec struct { VersionPriority int32 } +// ConditionStatus indicates the status of a condition (true, false, or unknown). type ConditionStatus string // These are valid condition statuses. "ConditionTrue" means a resource is in the condition; @@ -90,7 +91,7 @@ const ( ConditionUnknown ConditionStatus = "Unknown" ) -// APIConditionConditionType is a valid value for APIServiceCondition.Type +// APIServiceConditionType is a valid value for APIServiceCondition.Type type APIServiceConditionType string const ( diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/doc.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/doc.go index 19f18ed4c2c..7c5a51e651d 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/doc.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/kube-aggregator/pkg/apis/apiregistration // +k8s:openapi-gen=true // +groupName=apiregistration.k8s.io diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto index f33fc31dc70..120215725bc 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto @@ -40,6 +40,7 @@ message APIService { optional APIServiceStatus status = 3; } +// APIServiceCondition describes the state of an APIService at a particular point message APIServiceCondition { // Type is the type of the condition. optional string type = 1; diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/register.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/register.go index 70d277fdf41..cab9dff6648 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/register.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/register.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +// GroupName is the API group for apiregistration const GroupName = "apiregistration.k8s.io" // SchemeGroupVersion is group version used to register these objects @@ -33,11 +34,13 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. SchemeBuilder runtime.SchemeBuilder localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme ) func init() { diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go index 171ed303acc..0a87c9fae3d 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go @@ -81,6 +81,7 @@ type APIServiceSpec struct { // Priority int64 `json:"priority" protobuf:"varint,6,opt,name=priority"` } +// ConditionStatus indicates the status of a condition (true, false, or unknown). type ConditionStatus string // These are valid condition statuses. "ConditionTrue" means a resource is in the condition; @@ -93,7 +94,7 @@ const ( ConditionUnknown ConditionStatus = "Unknown" ) -// APIConditionConditionType is a valid value for APIServiceCondition.Type +// APIServiceConditionType is a valid value for APIServiceCondition.Type type APIServiceConditionType string const ( @@ -101,6 +102,7 @@ const ( Available APIServiceConditionType = "Available" ) +// APIServiceCondition describes the state of an APIService at a particular point type APIServiceCondition struct { // Type is the type of the condition. Type APIServiceConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=APIServiceConditionType"` diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/doc.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/doc.go index ad50d368306..1f1bae6f952 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/doc.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/kube-aggregator/pkg/apis/apiregistration // +k8s:openapi-gen=true // +groupName=apiregistration.k8s.io diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto index d3b30e742b9..a0214537a6e 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto @@ -40,6 +40,7 @@ message APIService { optional APIServiceStatus status = 3; } +// APIServiceCondition describes the state of an APIService at a particular point message APIServiceCondition { // Type is the type of the condition. optional string type = 1; diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/register.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/register.go index 38babafa9ea..f6a9fabb07e 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/register.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/register.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +// GroupName is the API group for apiregistration const GroupName = "apiregistration.k8s.io" // SchemeGroupVersion is group version used to register these objects @@ -33,11 +34,13 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. SchemeBuilder runtime.SchemeBuilder localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme ) func init() { diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go index a95c5642d9b..02bddab23ab 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go @@ -81,6 +81,7 @@ type APIServiceSpec struct { // Priority int64 `json:"priority" protobuf:"varint,6,opt,name=priority"` } +// ConditionStatus indicates the status of a condition (true, false, or unknown). type ConditionStatus string // These are valid condition statuses. "ConditionTrue" means a resource is in the condition; @@ -93,7 +94,7 @@ const ( ConditionUnknown ConditionStatus = "Unknown" ) -// APIConditionConditionType is a valid value for APIServiceCondition.Type +// APIServiceConditionType is a valid value for APIServiceCondition.Type type APIServiceConditionType string const ( @@ -101,6 +102,7 @@ const ( Available APIServiceConditionType = "Available" ) +// APIServiceCondition describes the state of an APIService at a particular point type APIServiceCondition struct { // Type is the type of the condition. Type APIServiceConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=APIServiceConditionType"` diff --git a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/validation/validation.go b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/validation/validation.go index 725cf71337f..0ffa3fc9186 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/validation/validation.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/validation/validation.go @@ -27,6 +27,7 @@ import ( "k8s.io/kube-aggregator/pkg/apis/apiregistration" ) +// ValidateAPIService validates that the APIService is correctly defined. func ValidateAPIService(apiService *apiregistration.APIService) field.ErrorList { requiredName := apiService.Spec.Version + "." + apiService.Spec.Group @@ -88,6 +89,7 @@ func ValidateAPIService(apiService *apiregistration.APIService) field.ErrorList return allErrs } +// ValidateAPIServiceUpdate validates an update of APIService. func ValidateAPIServiceUpdate(newAPIService *apiregistration.APIService, oldAPIService *apiregistration.APIService) field.ErrorList { allErrs := validation.ValidateObjectMetaUpdate(&newAPIService.ObjectMeta, &oldAPIService.ObjectMeta, field.NewPath("metadata")) allErrs = append(allErrs, ValidateAPIService(newAPIService)...) @@ -95,6 +97,7 @@ func ValidateAPIServiceUpdate(newAPIService *apiregistration.APIService, oldAPIS return allErrs } +// ValidateAPIServiceStatus validates that the APIService status is one of 'True', 'False' or 'Unknown'. func ValidateAPIServiceStatus(status *apiregistration.APIServiceStatus, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} @@ -110,6 +113,7 @@ func ValidateAPIServiceStatus(status *apiregistration.APIServiceStatus, fldPath return allErrs } +// ValidateAPIServiceStatusUpdate validates an update of the status field of APIService. func ValidateAPIServiceStatusUpdate(newAPIService *apiregistration.APIService, oldAPIService *apiregistration.APIService) field.ErrorList { allErrs := validation.ValidateObjectMetaUpdate(&newAPIService.ObjectMeta, &oldAPIService.ObjectMeta, field.NewPath("metadata")) allErrs = append(allErrs, ValidateAPIServiceStatus(&newAPIService.Status, field.NewPath("status"))...) diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/BUILD b/vendor/k8s.io/kube-aggregator/pkg/apiserver/BUILD index 69af8089830..a931e6fc793 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/BUILD +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/BUILD @@ -55,6 +55,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", @@ -77,6 +78,7 @@ go_library( "//staging/src/k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/controllers:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi:go_default_library", + "//staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/controllers/status:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 3f24dd05f34..d020de8dcb2 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -28,7 +28,7 @@ import ( "k8s.io/client-go/pkg/version" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset" @@ -55,6 +55,7 @@ func init() { // legacyAPIServiceName is the fixed name of the only non-groupified API version const legacyAPIServiceName = "v1." +// ExtraConfig represents APIServices-specific configuration type ExtraConfig struct { // ProxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity @@ -69,6 +70,7 @@ type ExtraConfig struct { ServiceResolver ServiceResolver } +// Config represents the configuration needed to create an APIAggregator. type Config struct { GenericConfig *genericapiserver.RecommendedConfig ExtraConfig ExtraConfig @@ -79,6 +81,7 @@ type completedConfig struct { ExtraConfig *ExtraConfig } +// CompletedConfig same as Config, just to swap private object. type CompletedConfig struct { // Embed a private pointer that cannot be instantiated outside of this package. *completedConfig @@ -128,7 +131,7 @@ func (cfg *Config) Complete() CompletedConfig { return CompletedConfig{&c} } -// New returns a new instance of APIAggregator from the given config. +// NewWithDelegate returns a new instance of APIAggregator from the given config. func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.DelegationTarget) (*APIAggregator, error) { // Prevent generic API server to install OpenAPI handler. Aggregator server // has its own customized OpenAPI handler. @@ -181,16 +184,16 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg s.serviceResolver, ) - s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { informerFactory.Start(context.StopCh) c.GenericConfig.SharedInformerFactory.Start(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error { go apiserviceRegistrationController.Run(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-status-available-controller", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("apiservice-status-available-controller", func(context genericapiserver.PostStartHookContext) error { // if we end up blocking for long periods of time, we may need to increase threadiness. go availableController.Run(5, context.StopCh) return nil @@ -200,7 +203,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg } // AddAPIService adds an API service. It is not thread-safe, so only call it on one thread at a time please. -// It's a slow moving API, so its ok to run the controller on a single thread +// It's a slow moving API, so it's ok to run the controller on a single thread func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) error { // if the proxyHandler already exists, it needs to be updated. The aggregation bits do not // since they are wired against listers because they require multiple resources to respond @@ -254,7 +257,7 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er } // RemoveAPIService removes the APIService from being handled. It is not thread-safe, so only call it on one thread at a time please. -// It's a slow moving API, so its ok to run the controller on a single thread. +// It's a slow moving API, so it's ok to run the controller on a single thread. func (s *APIAggregator) RemoveAPIService(apiServiceName string) { version := apiregistration.APIServiceNameToGroupVersion(apiServiceName) @@ -271,6 +274,7 @@ func (s *APIAggregator) RemoveAPIService(apiServiceName string) { // We don't need this right away because the handler properly delegates when no versions are present } +// DefaultAPIResourceConfigSource returns default configuration for an APIResource. func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret := serverstorage.NewResourceConfig() // NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list. diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go index f0b61a67c30..b74143fea31 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go @@ -34,11 +34,13 @@ import ( "k8s.io/kube-aggregator/pkg/controllers" ) +// APIHandlerManager defines the behaviour that an API handler should have. type APIHandlerManager interface { AddAPIService(apiService *apiregistration.APIService) error RemoveAPIService(apiServiceName string) } +// APIServiceRegistrationController is responsible for registering and removing API services. type APIServiceRegistrationController struct { apiHandlerManager APIHandlerManager @@ -51,6 +53,7 @@ type APIServiceRegistrationController struct { queue workqueue.RateLimitingInterface } +// NewAPIServiceRegistrationController returns a new APIServiceRegistrationController. func NewAPIServiceRegistrationController(apiServiceInformer informers.APIServiceInformer, apiHandlerManager APIHandlerManager) *APIServiceRegistrationController { c := &APIServiceRegistrationController{ apiHandlerManager: apiHandlerManager, @@ -83,6 +86,7 @@ func (c *APIServiceRegistrationController) sync(key string) error { return c.apiHandlerManager.AddAPIService(apiService) } +// Run starts APIServiceRegistrationController which will process all registration requests until stopCh is closed. func (c *APIServiceRegistrationController) Run(stopCh <-chan struct{}) { defer utilruntime.HandleCrash() defer c.queue.ShutDown() diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go index 4b24d0b16fc..ee3433212c6 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go @@ -30,6 +30,7 @@ import ( utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/proxy" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" + endpointmetrics "k8s.io/apiserver/pkg/endpoints/metrics" genericapirequest "k8s.io/apiserver/pkg/endpoints/request" genericfeatures "k8s.io/apiserver/pkg/features" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -38,6 +39,8 @@ import ( apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration" ) +const aggregatorComponent string = "aggregator" + // proxyHandler provides a http.Handler which will proxy traffic to locations // specified by items implementing Redirector. type proxyHandler struct { @@ -60,6 +63,8 @@ type proxyHandlingInfo struct { // local indicates that this APIService is locally satisfied local bool + // name is the name of the APIService + name string // restConfig holds the information for building a roundtripper restConfig *restclient.Config // transportBuildingError is an error produced while building the transport. If this @@ -75,6 +80,19 @@ type proxyHandlingInfo struct { serviceAvailable bool } +func proxyError(w http.ResponseWriter, req *http.Request, error string, code int) { + http.Error(w, error, code) + + ctx := req.Context() + info, ok := genericapirequest.RequestInfoFrom(ctx) + if !ok { + klog.Warning("no RequestInfo found in the context") + return + } + // TODO: record long-running request differently? The long-running check func does not necessarily match the one of the aggregated apiserver + endpointmetrics.Record(req, info, aggregatorComponent, "", code, 0, 0) +} + func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { value := r.handlingInfo.Load() if value == nil { @@ -92,18 +110,18 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } if !handlingInfo.serviceAvailable { - http.Error(w, "service unavailable", http.StatusServiceUnavailable) + proxyError(w, req, "service unavailable", http.StatusServiceUnavailable) return } if handlingInfo.transportBuildingError != nil { - http.Error(w, handlingInfo.transportBuildingError.Error(), http.StatusInternalServerError) + proxyError(w, req, handlingInfo.transportBuildingError.Error(), http.StatusInternalServerError) return } user, ok := genericapirequest.UserFrom(req.Context()) if !ok { - http.Error(w, "missing user", http.StatusInternalServerError) + proxyError(w, req, "missing user", http.StatusInternalServerError) return } @@ -113,7 +131,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { rloc, err := r.serviceResolver.ResolveEndpoint(handlingInfo.serviceNamespace, handlingInfo.serviceName) if err != nil { klog.Errorf("error resolving %s/%s: %v", handlingInfo.serviceNamespace, handlingInfo.serviceName, err) - http.Error(w, "service unavailable", http.StatusServiceUnavailable) + proxyError(w, req, "service unavailable", http.StatusServiceUnavailable) return } location.Host = rloc.Host @@ -124,16 +142,17 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { newReq := req.WithContext(context.Background()) newReq.Header = utilnet.CloneHeader(req.Header) newReq.URL = location + newReq.Host = location.Host if handlingInfo.proxyRoundTripper == nil { - http.Error(w, "", http.StatusNotFound) + proxyError(w, req, "", http.StatusNotFound) return } // we need to wrap the roundtripper in another roundtripper which will apply the front proxy headers proxyRoundTripper, upgrade, err := maybeWrapForConnectionUpgrades(handlingInfo.restConfig, handlingInfo.proxyRoundTripper, req) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + proxyError(w, req, err.Error(), http.StatusInternalServerError) return } proxyRoundTripper = transport.NewAuthProxyRoundTripper(user.GetName(), user.GetGroups(), user.GetExtra(), proxyRoundTripper) @@ -161,7 +180,7 @@ func maybeWrapForConnectionUpgrades(restConfig *restclient.Config, rt http.Round return nil, true, err } followRedirects := utilfeature.DefaultFeatureGate.Enabled(genericfeatures.StreamingProxyRedirects) - requireSameHostRedirects := false + requireSameHostRedirects := utilfeature.DefaultFeatureGate.Enabled(genericfeatures.ValidateProxyRedirects) upgradeRoundTripper := spdy.NewRoundTripper(tlsConfig, followRedirects, requireSameHostRedirects) wrappedRT, err := restclient.HTTPWrappersForConfig(restConfig, upgradeRoundTripper) if err != nil { @@ -195,6 +214,7 @@ func (r *proxyHandler) updateAPIService(apiService *apiregistrationapi.APIServic } newInfo := proxyHandlingInfo{ + name: apiService.Name, restConfig: &restclient.Config{ TLSClientConfig: restclient.TLSClientConfig{ Insecure: apiService.Spec.InsecureSkipTLSVerify, diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/resolvers.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/resolvers.go index 532bc7f6157..587b8a208d5 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/resolvers.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/resolvers.go @@ -46,7 +46,7 @@ func (r *aggregatorEndpointRouting) ResolveEndpoint(namespace, name string) (*ur return proxy.ResolveEndpoint(r.services, r.endpoints, namespace, name) } -// NewEndpointServiceResolver returns a ServiceResolver that directly calls the +// NewClusterIPServiceResolver returns a ServiceResolver that directly calls the // service's cluster IP. func NewClusterIPServiceResolver(services listersv1.ServiceLister) ServiceResolver { return &aggregatorClusterRouting{ diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/autoregister/autoregister_controller.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/autoregister/autoregister_controller.go index 3815c7d4635..52776e72f04 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/autoregister/autoregister_controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/autoregister/autoregister_controller.go @@ -39,6 +39,7 @@ import ( ) const ( + // AutoRegisterManagedLabel is a label attached to the APIService that identifies how the APIService wants to be synced. AutoRegisterManagedLabel = "kube-aggregator.kubernetes.io/automanaged" // manageOnStart is a value for the AutoRegisterManagedLabel that indicates the APIService wants to be synced one time when the controller starts. @@ -81,6 +82,7 @@ type autoRegisterController struct { queue workqueue.RateLimitingInterface } +// NewAutoRegisterController creates a new autoRegisterController. func NewAutoRegisterController(apiServiceInformer informers.APIServiceInformer, apiServiceClient apiregistrationclient.APIServicesGetter) *autoRegisterController { c := &autoRegisterController{ apiServiceLister: apiServiceInformer.Lister(), @@ -127,6 +129,7 @@ func NewAutoRegisterController(apiServiceInformer informers.APIServiceInformer, return c } +// Run starts the autoregister controller in a loop which syncs API services until stopCh is closed. func (c *autoRegisterController) Run(threadiness int, stopCh <-chan struct{}) { // don't let panics crash the process defer utilruntime.HandleCrash() @@ -267,6 +270,7 @@ func (c *autoRegisterController) checkAPIService(name string) (err error) { return err } +// GetAPIServiceToSync gets a single API service to sync. func (c *autoRegisterController) GetAPIServiceToSync(name string) *apiregistration.APIService { c.apiServicesToSyncLock.RLock() defer c.apiServicesToSyncLock.RUnlock() @@ -274,10 +278,12 @@ func (c *autoRegisterController) GetAPIServiceToSync(name string) *apiregistrati return c.apiServicesToSync[name] } +// AddAPIServiceToSyncOnStart registers an API service to sync only when the controller starts. func (c *autoRegisterController) AddAPIServiceToSyncOnStart(in *apiregistration.APIService) { c.addAPIServiceToSync(in, manageOnStart) } +// AddAPIServiceToSync registers an API service to sync continuously. func (c *autoRegisterController) AddAPIServiceToSync(in *apiregistration.APIService) { c.addAPIServiceToSync(in, manageContinuously) } @@ -296,6 +302,7 @@ func (c *autoRegisterController) addAPIServiceToSync(in *apiregistration.APIServ c.queue.Add(apiService.Name) } +// RemoveAPIServiceToSync deletes a registered APIService. func (c *autoRegisterController) RemoveAPIServiceToSync(name string) { c.apiServicesToSyncLock.Lock() defer c.apiServicesToSyncLock.Unlock() diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/BUILD b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/BUILD index 3810051bc50..1026e9bd86a 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/BUILD +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/BUILD @@ -8,11 +8,15 @@ load( go_library( name = "go_default_library", - srcs = ["available_controller.go"], + srcs = [ + "available_controller.go", + "metrics.go", + ], importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-aggregator/pkg/controllers/status", importpath = "k8s.io/kube-aggregator/pkg/controllers/status", deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -29,6 +33,7 @@ go_library( "//staging/src/k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/controllers:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -46,6 +51,7 @@ go_test( "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/fake:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", ], ) diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go index 66a4d0f2f75..acbd5c089bd 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go @@ -26,6 +26,7 @@ import ( "k8s.io/klog" "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -45,10 +46,12 @@ import ( "k8s.io/kube-aggregator/pkg/controllers" ) +// ServiceResolver knows how to convert a service reference into an actual location. type ServiceResolver interface { ResolveEndpoint(namespace, name string) (*url.URL, error) } +// AvailableConditionController handles checking the availability of registered API services. type AvailableConditionController struct { apiServiceClient apiregistrationclient.APIServicesGetter @@ -71,6 +74,7 @@ type AvailableConditionController struct { queue workqueue.RateLimitingInterface } +// NewAvailableConditionController returns a new AvailableConditionController. func NewAvailableConditionController( apiServiceInformer informers.APIServiceInformer, serviceInformer v1informers.ServiceInformer, @@ -140,7 +144,7 @@ func NewAvailableConditionController( } func (c *AvailableConditionController) sync(key string) error { - inAPIService, err := c.apiServiceLister.Get(key) + originalAPIService, err := c.apiServiceLister.Get(key) if apierrors.IsNotFound(err) { return nil } @@ -148,7 +152,7 @@ func (c *AvailableConditionController) sync(key string) error { return err } - apiService := inAPIService.DeepCopy() + apiService := originalAPIService.DeepCopy() availableCondition := apiregistration.APIServiceCondition{ Type: apiregistration.Available, @@ -159,7 +163,7 @@ func (c *AvailableConditionController) sync(key string) error { // local API services are always considered available if apiService.Spec.Service == nil { apiregistration.SetAPIServiceCondition(apiService, apiregistration.NewLocalAvailableAPIServiceCondition()) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } @@ -169,14 +173,14 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "ServiceNotFound" availableCondition.Message = fmt.Sprintf("service/%s in %q is not present", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } else if err != nil { availableCondition.Status = apiregistration.ConditionUnknown availableCondition.Reason = "ServiceAccessError" availableCondition.Message = fmt.Sprintf("service/%s in %q cannot be checked due to: %v", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace, err) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } @@ -193,7 +197,7 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "ServicePortError" availableCondition.Message = fmt.Sprintf("service/%s in %q is not listening on port 443", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } @@ -203,14 +207,14 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "EndpointsNotFound" availableCondition.Message = fmt.Sprintf("cannot find endpoints for service/%s in %q", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } else if err != nil { availableCondition.Status = apiregistration.ConditionUnknown availableCondition.Reason = "EndpointsAccessError" availableCondition.Message = fmt.Sprintf("service/%s in %q cannot be checked due to: %v", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace, err) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } hasActiveEndpoints := false @@ -225,7 +229,7 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "MissingEndpoints" availableCondition.Message = fmt.Sprintf("endpoints for service/%s in %q have no addresses", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } } @@ -259,7 +263,7 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "FailedDiscoveryCheck" availableCondition.Message = fmt.Sprintf("no response from %v: %v", discoveryURL, err) apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, updateErr := c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, updateErr := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) if updateErr != nil { return updateErr } @@ -272,10 +276,43 @@ func (c *AvailableConditionController) sync(key string) error { availableCondition.Reason = "Passed" availableCondition.Message = "all checks passed" apiregistration.SetAPIServiceCondition(apiService, availableCondition) - _, err = c.apiServiceClient.APIServices().UpdateStatus(apiService) + _, err = updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) return err } +// updateAPIServiceStatus only issues an update if a change is detected. We have a tight resync loop to quickly detect dead +// apiservices. Doing that means we don't want to quickly issue no-op updates. +func updateAPIServiceStatus(client apiregistrationclient.APIServicesGetter, originalAPIService, newAPIService *apiregistration.APIService) (*apiregistration.APIService, error) { + if equality.Semantic.DeepEqual(originalAPIService.Status, newAPIService.Status) { + return newAPIService, nil + } + + newAPIService, err := client.APIServices().UpdateStatus(newAPIService) + if err != nil { + return nil, err + } + + // update metrics + wasAvailable := apiregistration.IsAPIServiceConditionTrue(originalAPIService, apiregistration.Available) + isAvailable := apiregistration.IsAPIServiceConditionTrue(newAPIService, apiregistration.Available) + if isAvailable != wasAvailable { + if isAvailable { + unavailableGauge.WithLabelValues(newAPIService.Name).Set(0.0) + } else { + unavailableGauge.WithLabelValues(newAPIService.Name).Set(1.0) + + reason := "UnknownReason" + if newCondition := apiregistration.GetAPIServiceConditionByType(newAPIService, apiregistration.Available); newCondition != nil { + reason = newCondition.Reason + } + unavailableCounter.WithLabelValues(newAPIService.Name, reason).Inc() + } + } + + return newAPIService, nil +} + +// Run starts the AvailableConditionController loop which manages the availability condition of API services. func (c *AvailableConditionController) Run(threadiness int, stopCh <-chan struct{}) { defer utilruntime.HandleCrash() defer c.queue.ShutDown() diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/metrics.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/metrics.go new file mode 100644 index 00000000000..539641ea93b --- /dev/null +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/metrics.go @@ -0,0 +1,43 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apiserver + +import ( + "github.com/prometheus/client_golang/prometheus" +) + +var ( + unavailableCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "aggregator_unavailable_apiservice_count", + Help: "Counter of APIServices which are marked as unavailable broken down by APIService name and reason.", + }, + []string{"name", "reason"}, + ) + unavailableGauge = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "aggregator_unavailable_apiservice", + Help: "Gauge of APIServices which are marked as unavailable broken down by APIService name.", + }, + []string{"name"}, + ) +) + +func init() { + prometheus.MustRegister(unavailableCounter) + prometheus.MustRegister(unavailableGauge) +} diff --git a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD index 34c772a362a..8cd7fac7d8e 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD +++ b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD @@ -16,6 +16,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", diff --git a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd/etcd.go b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd/etcd.go index a463def9f96..9c8c6a93a17 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd/etcd.go +++ b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd/etcd.go @@ -32,7 +32,7 @@ import ( "k8s.io/kube-aggregator/pkg/registry/apiservice" ) -// rest implements a RESTStorage for API services against etcd +// REST implements a RESTStorage for API services against etcd type REST struct { *genericregistry.Store } @@ -57,6 +57,7 @@ func NewREST(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) *REST return &REST{store} } +// ConvertToTable implements the TableConvertor interface for REST. func (c *REST) ConvertToTable(ctx context.Context, obj runtime.Object, tableOptions runtime.Object) (*metav1beta1.Table, error) { table := &metav1beta1.Table{ ColumnDefinitions: []metav1beta1.TableColumnDefinition{ @@ -119,12 +120,14 @@ func NewStatusREST(scheme *runtime.Scheme, rest *REST) *StatusREST { return &StatusREST{store: &statusStore} } +// StatusREST implements the REST endpoint for changing the status of an APIService. type StatusREST struct { store *genericregistry.Store } var _ = rest.Patcher(&StatusREST{}) +// New creates a new APIService object. func (r *StatusREST) New() runtime.Object { return &apiregistration.APIService{} } diff --git a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/strategy.go b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/strategy.go index 96c40fd33f5..d9bfe543e27 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/strategy.go +++ b/vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/strategy.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/registry/generic" + "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/names" @@ -37,7 +38,11 @@ type apiServerStrategy struct { names.NameGenerator } -func NewStrategy(typer runtime.ObjectTyper) apiServerStrategy { +// apiServerStrategy must implement rest.RESTCreateUpdateStrategy +var _ rest.RESTCreateUpdateStrategy = apiServerStrategy{} + +// NewStrategy creates a new apiServerStrategy. +func NewStrategy(typer runtime.ObjectTyper) rest.RESTCreateUpdateStrategy { return apiServerStrategy{typer, names.SimpleNameGenerator} } @@ -85,7 +90,8 @@ type apiServerStatusStrategy struct { names.NameGenerator } -func NewStatusStrategy(typer runtime.ObjectTyper) apiServerStatusStrategy { +// NewStatusStrategy creates a new apiServerStatusStrategy. +func NewStatusStrategy(typer runtime.ObjectTyper) rest.RESTUpdateStrategy { return apiServerStatusStrategy{typer, names.SimpleNameGenerator} } @@ -111,19 +117,22 @@ func (apiServerStatusStrategy) AllowUnconditionalUpdate() bool { return false } +// Canonicalize normalizes the object after validation. func (apiServerStatusStrategy) Canonicalize(obj runtime.Object) { } +// ValidateUpdate validates an update of apiServerStatusStrategy. func (apiServerStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateAPIServiceStatusUpdate(obj.(*apiregistration.APIService), old.(*apiregistration.APIService)) } -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +// GetAttrs returns the labels and fields of an API server for filtering purposes. +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { apiserver, ok := obj.(*apiregistration.APIService) if !ok { - return nil, nil, false, fmt.Errorf("given object is not a APIService.") + return nil, nil, fmt.Errorf("given object is not a APIService") } - return labels.Set(apiserver.ObjectMeta.Labels), APIServiceToSelectableFields(apiserver), apiserver.Initializers != nil, nil + return labels.Set(apiserver.ObjectMeta.Labels), ToSelectableFields(apiserver), nil } // MatchAPIService is the filter used by the generic etcd backend to watch events @@ -136,7 +145,7 @@ func MatchAPIService(label labels.Selector, field fields.Selector) storage.Selec } } -// APIServiceToSelectableFields returns a field set that represents the object. -func APIServiceToSelectableFields(obj *apiregistration.APIService) fields.Set { +// ToSelectableFields returns a field set that represents the object. +func ToSelectableFields(obj *apiregistration.APIService) fields.Set { return generic.ObjectMetaFieldsSet(&obj.ObjectMeta, true) } diff --git a/vendor/k8s.io/kube-controller-manager/BUILD b/vendor/k8s.io/kube-controller-manager/BUILD new file mode 100644 index 00000000000..d9847533a30 --- /dev/null +++ b/vendor/k8s.io/kube-controller-manager/BUILD @@ -0,0 +1,16 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/kube-controller-manager/config/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kube-controller-manager/CONTRIBUTING.md b/vendor/k8s.io/kube-controller-manager/CONTRIBUTING.md index 12511d88107..6ae6577f066 100644 --- a/vendor/k8s.io/kube-controller-manager/CONTRIBUTING.md +++ b/vendor/k8s.io/kube-controller-manager/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kube-controller-manager](https://git.k8s.io/kubernetes/staging/src/k8s.io/kube-controller-manager) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/kube-controller-manager/OWNERS b/vendor/k8s.io/kube-controller-manager/OWNERS index b9492dc62e0..10bff6ab77c 100644 --- a/vendor/k8s.io/kube-controller-manager/OWNERS +++ b/vendor/k8s.io/kube-controller-manager/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - luxas @@ -10,3 +12,4 @@ reviewers: - mtaufen - sttts - stewart-yu +- cheftako diff --git a/vendor/k8s.io/kube-controller-manager/SECURITY_CONTACTS b/vendor/k8s.io/kube-controller-manager/SECURITY_CONTACTS index 69eea9ee8eb..9edb204d162 100644 --- a/vendor/k8s.io/kube-controller-manager/SECURITY_CONTACTS +++ b/vendor/k8s.io/kube-controller-manager/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/kube-controller-manager/config/OWNERS b/vendor/k8s.io/kube-controller-manager/config/OWNERS index b6f183359ba..b3f2f4d316c 100644 --- a/vendor/k8s.io/kube-controller-manager/config/OWNERS +++ b/vendor/k8s.io/kube-controller-manager/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/kube-controller-manager/config/v1alpha1/BUILD b/vendor/k8s.io/kube-controller-manager/config/v1alpha1/BUILD index 8ad6dcdc5d5..dc774b1d6e4 100644 --- a/vendor/k8s.io/kube-controller-manager/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kube-controller-manager/config/v1alpha1/BUILD @@ -12,11 +12,10 @@ go_library( importpath = "k8s.io/kube-controller-manager/config/v1alpha1", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", ], ) diff --git a/vendor/k8s.io/kube-controller-manager/config/v1alpha1/types.go b/vendor/k8s.io/kube-controller-manager/config/v1alpha1/types.go index 2e9f45b5b49..38d8bf4d3b3 100644 --- a/vendor/k8s.io/kube-controller-manager/config/v1alpha1/types.go +++ b/vendor/k8s.io/kube-controller-manager/config/v1alpha1/types.go @@ -17,9 +17,8 @@ limitations under the License. package v1alpha1 import ( - apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" ) // PersistentVolumeRecyclerConfiguration contains elements describing persistent volume plugins. @@ -161,11 +160,11 @@ type GenericControllerManagerConfiguration struct { MinResyncPeriod metav1.Duration // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection apimachineryconfigv1alpha1.ClientConnectionConfiguration + ClientConnection componentbaseconfigv1alpha1.ClientConnectionConfiguration // How long to wait between starting controller managers ControllerStartInterval metav1.Duration // leaderElection defines the configuration of leader election client. - LeaderElection apiserverconfigv1alpha1.LeaderElectionConfiguration + LeaderElection componentbaseconfigv1alpha1.LeaderElectionConfiguration // Controllers is the list of controllers to enable or disable // '*' means "all enabled by default controllers" // 'foo' means "enable 'foo'" @@ -173,7 +172,7 @@ type GenericControllerManagerConfiguration struct { // first item for a particular name wins Controllers []string // DebuggingConfiguration holds configuration for Debugging related features. - Debugging apiserverconfigv1alpha1.DebuggingConfiguration + Debugging componentbaseconfigv1alpha1.DebuggingConfiguration } // KubeCloudSharedConfiguration contains elements shared by both kube-controller manager diff --git a/vendor/k8s.io/kube-proxy/BUILD b/vendor/k8s.io/kube-proxy/BUILD new file mode 100644 index 00000000000..f016f361f70 --- /dev/null +++ b/vendor/k8s.io/kube-proxy/BUILD @@ -0,0 +1,16 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/kube-proxy/config/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kube-proxy/CONTRIBUTING.md b/vendor/k8s.io/kube-proxy/CONTRIBUTING.md index 19e40c4db83..6f80589ec78 100644 --- a/vendor/k8s.io/kube-proxy/CONTRIBUTING.md +++ b/vendor/k8s.io/kube-proxy/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kube-proxy](https://git.k8s.io/kubernetes/staging/src/k8s.io/kube-proxy) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/kube-proxy/OWNERS b/vendor/k8s.io/kube-proxy/OWNERS index f820d85fb16..89b8cc04572 100644 --- a/vendor/k8s.io/kube-proxy/OWNERS +++ b/vendor/k8s.io/kube-proxy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-network-approvers - sttts diff --git a/vendor/k8s.io/kube-proxy/SECURITY_CONTACTS b/vendor/k8s.io/kube-proxy/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/kube-proxy/SECURITY_CONTACTS +++ b/vendor/k8s.io/kube-proxy/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/kube-proxy/config/OWNERS b/vendor/k8s.io/kube-proxy/config/OWNERS index 7156a9b8b27..6a6e8cacc9d 100644 --- a/vendor/k8s.io/kube-proxy/config/OWNERS +++ b/vendor/k8s.io/kube-proxy/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/kube-proxy/config/v1alpha1/BUILD b/vendor/k8s.io/kube-proxy/config/v1alpha1/BUILD index 93cbf535996..e6f48d8ae4e 100644 --- a/vendor/k8s.io/kube-proxy/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kube-proxy/config/v1alpha1/BUILD @@ -12,10 +12,10 @@ go_library( importpath = "k8s.io/kube-proxy/config/v1alpha1", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", ], ) diff --git a/vendor/k8s.io/kube-proxy/config/v1alpha1/types.go b/vendor/k8s.io/kube-proxy/config/v1alpha1/types.go index b9c370b0d3c..b266a5c3d7b 100644 --- a/vendor/k8s.io/kube-proxy/config/v1alpha1/types.go +++ b/vendor/k8s.io/kube-proxy/config/v1alpha1/types.go @@ -17,8 +17,8 @@ limitations under the License. package v1alpha1 import ( - apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" ) // KubeProxyIPTablesConfiguration contains iptables-related configuration @@ -74,6 +74,20 @@ type KubeProxyConntrackConfiguration struct { TCPCloseWaitTimeout *metav1.Duration `json:"tcpCloseWaitTimeout"` } +// KubeProxyWinkernelConfiguration contains Windows/HNS settings for +// the Kubernetes proxy server. +type KubeProxyWinkernelConfiguration struct { + // networkName is the name of the network kube-proxy will use + // to create endpoints and policies + NetworkName string `json:"networkName"` + // sourceVip is the IP address of the source VIP endoint used for + // NAT when loadbalancing + SourceVip string `json:"sourceVip"` + // enableDSR tells kube-proxy whether HNS policies should be created + // with DSR + EnableDSR bool `json:"enableDSR"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // KubeProxyConfiguration contains everything necessary to configure the @@ -104,7 +118,7 @@ type KubeProxyConfiguration struct { HostnameOverride string `json:"hostnameOverride"` // clientConnection specifies the kubeconfig file and client connection settings for the proxy // server to use when communicating with the apiserver. - ClientConnection apimachineryconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` + ClientConnection componentbaseconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` // iptables contains iptables-related configuration options. IPTables KubeProxyIPTablesConfiguration `json:"iptables"` // ipvs contains ipvs-related configuration options. @@ -136,6 +150,8 @@ type KubeProxyConfiguration struct { // If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node. // An empty string slice is meant to select all network interfaces. NodePortAddresses []string `json:"nodePortAddresses"` + // winkernel contains winkernel-related configuration options. + Winkernel KubeProxyWinkernelConfiguration `json:"winkernel"` } // Currently, three modes of proxy are available in Linux platform: 'userspace' (older, going to be EOL), 'iptables' diff --git a/vendor/k8s.io/kube-proxy/config/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kube-proxy/config/v1alpha1/zz_generated.deepcopy.go index ca70abbdc97..ff0252d416a 100644 --- a/vendor/k8s.io/kube-proxy/config/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kube-proxy/config/v1alpha1/zz_generated.deepcopy.go @@ -52,6 +52,7 @@ func (in *KubeProxyConfiguration) DeepCopyInto(out *KubeProxyConfiguration) { *out = make([]string, len(*in)) copy(*out, *in) } + out.Winkernel = in.Winkernel return } @@ -159,3 +160,19 @@ func (in *KubeProxyIPVSConfiguration) DeepCopy() *KubeProxyIPVSConfiguration { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeProxyWinkernelConfiguration) DeepCopyInto(out *KubeProxyWinkernelConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeProxyWinkernelConfiguration. +func (in *KubeProxyWinkernelConfiguration) DeepCopy() *KubeProxyWinkernelConfiguration { + if in == nil { + return nil + } + out := new(KubeProxyWinkernelConfiguration) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/kube-scheduler/BUILD b/vendor/k8s.io/kube-scheduler/BUILD new file mode 100644 index 00000000000..81d2965a2fb --- /dev/null +++ b/vendor/k8s.io/kube-scheduler/BUILD @@ -0,0 +1,16 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/kube-scheduler/config/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kube-scheduler/CONTRIBUTING.md b/vendor/k8s.io/kube-scheduler/CONTRIBUTING.md index 68294346fd6..96dabc3c9a4 100644 --- a/vendor/k8s.io/kube-scheduler/CONTRIBUTING.md +++ b/vendor/k8s.io/kube-scheduler/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kube-scheduler](https://git.k8s.io/kubernetes/staging/src/k8s.io/kube-scheduler) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/kube-scheduler/OWNERS b/vendor/k8s.io/kube-scheduler/OWNERS old mode 100755 new mode 100644 index 13f210bae43..613b3a5f834 --- a/vendor/k8s.io/kube-scheduler/OWNERS +++ b/vendor/k8s.io/kube-scheduler/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-scheduling-maintainers - sttts diff --git a/vendor/k8s.io/kube-scheduler/README.md b/vendor/k8s.io/kube-scheduler/README.md index 4082eafed10..be9b6860321 100644 --- a/vendor/k8s.io/kube-scheduler/README.md +++ b/vendor/k8s.io/kube-scheduler/README.md @@ -1,6 +1,6 @@ # kube-scheduler -Implements [KEP 14 - Moving ComponentConfig API types to staging repos](https://github.com/kubernetes/community/blob/master/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md#kube-scheduler-changes) +Implements [KEP 14 - Moving ComponentConfig API types to staging repos](https://git.k8s.io/enhancements/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md#kube-scheduler-changes) This repo provides external, versioned ComponentConfig API types for configuring the kube-scheduler. These external types can easily be vendored and used by any third-party tool writing Kubernetes diff --git a/vendor/k8s.io/kube-scheduler/SECURITY_CONTACTS b/vendor/k8s.io/kube-scheduler/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/kube-scheduler/SECURITY_CONTACTS +++ b/vendor/k8s.io/kube-scheduler/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/kube-scheduler/config/OWNERS b/vendor/k8s.io/kube-scheduler/config/OWNERS index 18a8557ccb9..9584e0e8313 100644 --- a/vendor/k8s.io/kube-scheduler/config/OWNERS +++ b/vendor/k8s.io/kube-scheduler/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/kube-scheduler/config/v1alpha1/BUILD b/vendor/k8s.io/kube-scheduler/config/v1alpha1/BUILD index 8c86fbeb876..d9ca51ea527 100644 --- a/vendor/k8s.io/kube-scheduler/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kube-scheduler/config/v1alpha1/BUILD @@ -12,11 +12,10 @@ go_library( importpath = "k8s.io/kube-scheduler/config/v1alpha1", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", ], ) diff --git a/vendor/k8s.io/kube-scheduler/config/v1alpha1/types.go b/vendor/k8s.io/kube-scheduler/config/v1alpha1/types.go index 811e4062ae9..e37649ad249 100644 --- a/vendor/k8s.io/kube-scheduler/config/v1alpha1/types.go +++ b/vendor/k8s.io/kube-scheduler/config/v1alpha1/types.go @@ -17,9 +17,8 @@ limitations under the License. package v1alpha1 import ( - apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" ) const ( @@ -54,7 +53,7 @@ type KubeSchedulerConfiguration struct { // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection apimachineryconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` + ClientConnection componentbaseconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` // HealthzBindAddress is the IP address and port for the health check server to serve on, // defaulting to 0.0.0.0:10251 HealthzBindAddress string `json:"healthzBindAddress"` @@ -63,8 +62,8 @@ type KubeSchedulerConfiguration struct { MetricsBindAddress string `json:"metricsBindAddress"` // DebuggingConfiguration holds configuration for Debugging related features - // TODO: We might wanna make this a substruct like Debugging apiserverconfig.DebuggingConfiguration - apiserverconfigv1alpha1.DebuggingConfiguration `json:",inline"` + // TODO: We might wanna make this a substruct like Debugging componentbaseconfigv1alpha1.DebuggingConfiguration + componentbaseconfigv1alpha1.DebuggingConfiguration `json:",inline"` // DisablePreemption disables the pod preemption feature. DisablePreemption bool `json:"disablePreemption"` @@ -75,7 +74,8 @@ type KubeSchedulerConfiguration struct { // at least "minFeasibleNodesToFind" feasible nodes no matter what the value of this flag is. // Example: if the cluster size is 500 nodes and the value of this flag is 30, // then scheduler stops finding further feasible nodes once it finds 150 feasible ones. - // When the value is 0, default percentage (50%) of the nodes will be scored. + // When the value is 0, default percentage (5%--50% based on the size of the cluster) of the + // nodes will be scored. PercentageOfNodesToScore int32 `json:"percentageOfNodesToScore"` // DEPRECATED. @@ -125,7 +125,7 @@ type SchedulerPolicyConfigMapSource struct { // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration // to include scheduler specific configuration. type KubeSchedulerLeaderElectionConfiguration struct { - apiserverconfigv1alpha1.LeaderElectionConfiguration `json:",inline"` + componentbaseconfigv1alpha1.LeaderElectionConfiguration `json:",inline"` // LockObjectNamespace defines the namespace of the lock object LockObjectNamespace string `json:"lockObjectNamespace"` // LockObjectName defines the lock object name diff --git a/vendor/k8s.io/kubelet/BUILD b/vendor/k8s.io/kubelet/BUILD new file mode 100644 index 00000000000..261787b5e62 --- /dev/null +++ b/vendor/k8s.io/kubelet/BUILD @@ -0,0 +1,16 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/kubelet/config/v1beta1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubelet/CONTRIBUTING.md b/vendor/k8s.io/kubelet/CONTRIBUTING.md index b3d96ad1337..be789a9d981 100644 --- a/vendor/k8s.io/kubelet/CONTRIBUTING.md +++ b/vendor/k8s.io/kubelet/CONTRIBUTING.md @@ -4,4 +4,4 @@ Do not open pull requests directly against this repository, they will be ignored This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/kubelet](https://git.k8s.io/kubernetes/staging/src/k8s.io/kubelet) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/kubelet/OWNERS b/vendor/k8s.io/kubelet/OWNERS index fd46cbf2bb1..128c82716dc 100644 --- a/vendor/k8s.io/kubelet/OWNERS +++ b/vendor/k8s.io/kubelet/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-node-approvers - sttts diff --git a/vendor/k8s.io/kubelet/README.md b/vendor/k8s.io/kubelet/README.md index 239f50818db..9baec718030 100644 --- a/vendor/k8s.io/kubelet/README.md +++ b/vendor/k8s.io/kubelet/README.md @@ -1,6 +1,6 @@ # kubelet -Implements [KEP 14 - Moving ComponentConfig API types to staging repos](https://github.com/kubernetes/community/blob/master/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md#kubelet-changes) +Implements [KEP 14 - Moving ComponentConfig API types to staging repos](https://git.k8s.io/enhancements/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md#kubelet-changes) This repo provides external, versioned ComponentConfig API types for configuring the kubelet. These external types can easily be vendored and used by any third-party tool writing Kubernetes diff --git a/vendor/k8s.io/kubelet/SECURITY_CONTACTS b/vendor/k8s.io/kubelet/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/kubelet/SECURITY_CONTACTS +++ b/vendor/k8s.io/kubelet/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/kubelet/config/OWNERS b/vendor/k8s.io/kubelet/config/OWNERS index 930fcf08b7e..a459a8f87ad 100644 --- a/vendor/k8s.io/kubelet/config/OWNERS +++ b/vendor/k8s.io/kubelet/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/kubernetes/.gitattributes b/vendor/k8s.io/kubernetes/.gitattributes index 7c65ce9441d..24e696c9a3d 100644 --- a/vendor/k8s.io/kubernetes/.gitattributes +++ b/vendor/k8s.io/kubernetes/.gitattributes @@ -6,6 +6,4 @@ test/test_owners.csv merge=union **/generated.pb.go linguist-generated=true **/generated.proto **/types_swagger_doc_generated.go linguist-generated=true -docs/api-reference/** linguist-generated=true -api/swagger-spec/*.json linguist-generated=true api/openapi-spec/*.json linguist-generated=true diff --git a/vendor/k8s.io/kubernetes/CHANGELOG-1.13.md b/vendor/k8s.io/kubernetes/CHANGELOG-1.13.md deleted file mode 100644 index 0c4079c5715..00000000000 --- a/vendor/k8s.io/kubernetes/CHANGELOG-1.13.md +++ /dev/null @@ -1,1634 +0,0 @@ - -- [v1.13.4](#v1134) - - [Downloads for v1.13.4](#downloads-for-v1134) - - [Client Binaries](#client-binaries) - - [Server Binaries](#server-binaries) - - [Node Binaries](#node-binaries) - - [Changelog since v1.13.3](#changelog-since-v1133) - - [Other notable changes](#other-notable-changes) -- [v1.13.3](#v1133) - - [Downloads for v1.13.3](#downloads-for-v1133) - - [Client Binaries](#client-binaries-1) - - [Server Binaries](#server-binaries-1) - - [Node Binaries](#node-binaries-1) - - [Changelog since v1.13.2](#changelog-since-v1132) - - [Other notable changes](#other-notable-changes-1) -- [v1.13.2](#v1132) - - [Downloads for v1.13.2](#downloads-for-v1132) - - [Client Binaries](#client-binaries-2) - - [Server Binaries](#server-binaries-2) - - [Node Binaries](#node-binaries-2) - - [Changelog since v1.13.1](#changelog-since-v1131) - - [Other notable changes](#other-notable-changes-2) -- [v1.13.1](#v1131) - - [Downloads for v1.13.1](#downloads-for-v1131) - - [Client Binaries](#client-binaries-3) - - [Server Binaries](#server-binaries-3) - - [Node Binaries](#node-binaries-3) - - [Changelog since v1.13.0](#changelog-since-v1130) - - [Other notable changes](#other-notable-changes-3) -- [v1.13.0](#v1130) - - [Downloads for v1.13.0](#downloads-for-v1130) - - [Client Binaries](#client-binaries-4) - - [Server Binaries](#server-binaries-4) - - [Node Binaries](#node-binaries-4) -- [Kubernetes 1.13 Release Notes](#kubernetes-113-release-notes) - - [Security Content](#security-content) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST do this before you upgrade)](#no-really-you-must-do-this-before-you-upgrade) - - [Known Issues](#known-issues) - - [Deprecations](#deprecations) - - [Major Themes](#major-themes) - - [SIG API Machinery](#sig-api-machinery) - - [SIG Auth](#sig-auth) - - [SIG AWS](#sig-aws) - - [SIG Azure](#sig-azure) - - [SIG Big Data](#sig-big-data) - - [SIG CLI](#sig-cli) - - [SIG Cloud Provider](#sig-cloud-provider) - - [SIG Cluster Lifecycle](#sig-cluster-lifecycle) - - [SIG IBM Cloud](#sig-ibm-cloud) - - [SIG Multicluster](#sig-multicluster) - - [SIG Network](#sig-network) - - [SIG Node](#sig-node) - - [SIG Openstack](#sig-openstack) - - [SIG Scalability](#sig-scalability) - - [SIG Scheduling](#sig-scheduling) - - [SIG Service Catalog](#sig-service-catalog) - - [SIG Storage](#sig-storage) - - [SIG UI](#sig-ui) - - [SIG VMWare](#sig-vmware) - - [SIG Windows](#sig-windows) - - [New Features](#new-features) - - [Release Notes From SIGs](#release-notes-from-sigs) - - [SIG API Machinery](#sig-api-machinery-1) - - [SIG Auth](#sig-auth-1) - - [SIG Autoscaling](#sig-autoscaling) - - [SIG AWS](#sig-aws-1) - - [SIG Azure](#sig-azure-1) - - [SIG CLI](#sig-cli-1) - - [SIG Cloud Provider](#sig-cloud-provider-1) - - [SIG Cluster Lifecycle](#sig-cluster-lifecycle-1) - - [SIG GCP](#sig-gcp) - - [SIG Network](#sig-network-1) - - [SIG Node](#sig-node-1) - - [SIG OpenStack](#sig-openstack-1) - - [SIG Release](#sig-release) - - [SIG Scheduling](#sig-scheduling-1) - - [SIG Storage](#sig-storage-1) - - [SIG Windows](#sig-windows-1) - - [External Dependencies](#external-dependencies) -- [v1.13.0-rc.2](#v1130-rc2) - - [Downloads for v1.13.0-rc.2](#downloads-for-v1130-rc2) - - [Client Binaries](#client-binaries-5) - - [Server Binaries](#server-binaries-5) - - [Node Binaries](#node-binaries-5) - - [Changelog since v1.13.0-rc.1](#changelog-since-v1130-rc1) - - [Other notable changes](#other-notable-changes-4) -- [v1.13.0-rc.1](#v1130-rc1) - - [Downloads for v1.13.0-rc.1](#downloads-for-v1130-rc1) - - [Client Binaries](#client-binaries-6) - - [Server Binaries](#server-binaries-6) - - [Node Binaries](#node-binaries-6) - - [Changelog since v1.13.0-beta.2](#changelog-since-v1130-beta2) - - [Other notable changes](#other-notable-changes-5) -- [v1.13.0-beta.2](#v1130-beta2) - - [Downloads for v1.13.0-beta.2](#downloads-for-v1130-beta2) - - [Client Binaries](#client-binaries-7) - - [Server Binaries](#server-binaries-7) - - [Node Binaries](#node-binaries-7) - - [Changelog since v1.13.0-beta.1](#changelog-since-v1130-beta1) - - [Other notable changes](#other-notable-changes-6) -- [v1.13.0-beta.1](#v1130-beta1) - - [Downloads for v1.13.0-beta.1](#downloads-for-v1130-beta1) - - [Client Binaries](#client-binaries-8) - - [Server Binaries](#server-binaries-8) - - [Node Binaries](#node-binaries-8) - - [Changelog since v1.13.0-alpha.3](#changelog-since-v1130-alpha3) - - [Action Required](#action-required) - - [Other notable changes](#other-notable-changes-7) -- [v1.13.0-alpha.3](#v1130-alpha3) - - [Downloads for v1.13.0-alpha.3](#downloads-for-v1130-alpha3) - - [Client Binaries](#client-binaries-9) - - [Server Binaries](#server-binaries-9) - - [Node Binaries](#node-binaries-9) - - [Changelog since v1.13.0-alpha.2](#changelog-since-v1130-alpha2) - - [Other notable changes](#other-notable-changes-8) -- [v1.13.0-alpha.2](#v1130-alpha2) - - [Downloads for v1.13.0-alpha.2](#downloads-for-v1130-alpha2) - - [Client Binaries](#client-binaries-10) - - [Server Binaries](#server-binaries-10) - - [Node Binaries](#node-binaries-10) - - [Changelog since v1.13.0-alpha.1](#changelog-since-v1130-alpha1) - - [Other notable changes](#other-notable-changes-9) -- [v1.13.0-alpha.1](#v1130-alpha1) - - [Downloads for v1.13.0-alpha.1](#downloads-for-v1130-alpha1) - - [Client Binaries](#client-binaries-11) - - [Server Binaries](#server-binaries-11) - - [Node Binaries](#node-binaries-11) - - [Changelog since v1.12.0](#changelog-since-v1120) - - [Action Required](#action-required-1) - - [Other notable changes](#other-notable-changes-10) - - - - - -# v1.13.4 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.4 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes.tar.gz) | `591cd3f4f479744a1d47544902817350321c63f8c37ad771d559e293bcdbc421e89d62663300a6739c667d34e1e24bb080dd73562dc29713381db079ba6e9223` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-src.tar.gz) | `3f3b5318321b661b028da62798b2cb85ccc7d5bfa90605944bd8a626c86e7e77f54fdb7e340587528f41e240fcf2c35bb6808ada7a2f50a4a3b0c755bc18b28c` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-darwin-386.tar.gz) | `78c604ac5c54beff498fffa398abcd6c91f6d6ee6ec7249b675f10a2fa5866e336a560b85275c408daf8bf250c5d2c8632d2e0a2592d98952fae70ae3586f4aa` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-darwin-amd64.tar.gz) | `0678f0305608589b15dbc6a5dca00de99adfb296d881a33fb1745a1393b17a2e9f59becb3978e519465936796dd6692fd2fda63af84b09bca2db5628ebf74503` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-386.tar.gz) | `2c311839a0b843c9203d4b7a558f2c0cff3fa97c40ebcd3838cf592b764c9387d31c315e0ff39da32d73b4117e600cedf5177348e07beaa38a3faa98abee6c60` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-amd64.tar.gz) | `71f813f0d8461967e9a002a9d8842b3ac40ffcaa59979d84499aff1958b2ac78d7ac75b562cffd5a9d122f0ce758a2c53d5dd788e0412df57756323cc4366a56` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-arm.tar.gz) | `20c1779c51692b1bbcddc96dcb1f41868414d9585c53f62aa07ad0ca3ca4cf7a0e2414ee2095fb3a1096bf86bbe74bc8d323c7cd39ad1698a130bb15971c1daa` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-arm64.tar.gz) | `58dd72a04f31613572b58095279a91fa9c16e8a8c052b0ec3e3badea60cf8a2a33953e9d5b839d931070c040c6f8cd098abec46f192db7cb2fdea75c4b7de096` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-ppc64le.tar.gz) | `1e68cd52396cc554d6446575f5de4656fbe9965a432328fdd9ee317db232f875eda3925bcc2956543085560cbfff7231abc7434f52db446a21882cd0721a6edd` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-linux-s390x.tar.gz) | `3fcba2802db6662392b4eaf2465753f88c6b5de2e4e264e2669ad196f6a984dd4ac0a41bf7f11d955e130e543e8a06bb068d654f9c3b1606db380d146a01592e` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-windows-386.tar.gz) | `47c50b8a4bf9541096efba51e8034e4a9b796ff69221e5d0f5589bf921c186053c5f1617cd75913d8bbd288d394b0a3f38c7d789b9e45f4b7fb71b98488aa467` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-client-windows-amd64.tar.gz) | `0572c7755a5190b2f687645a17d6b75e8544dc8b84c1dd09a396fc8dec0ec56be367098da903db1127eeeb8a60275338895d0e03fc15e3fecc94930a15846810` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-server-linux-amd64.tar.gz) | `a36eff3dd5769df6af8a39c0b50268c6b324db5b7000fe4f6c9a5c83d87b971cf187abf1a38e9970602cb0c06373cfae35b41cc13ef8063824b5a92e74cf4740` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-server-linux-arm.tar.gz) | `9564dc220de5210d8e690a5a84f46a7ca0d43fd6e1f5f68b49754ab6335e4bb9e0faf8490109ff28417233f0f668791acbe9cbc90f62eeb92310e1eda3143313` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-server-linux-arm64.tar.gz) | `e9d345633188352caadd9356f3816cd66137721a32b28986bcb516fbd7b9d23dc0dd04223bf177619baf0e0eed6716a801fe51ea24ee6dd97c14f5d0f832f3f9` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-server-linux-ppc64le.tar.gz) | `3062e04932d9386aeccf142734a0ebe2aca0614b4c57ddef735d7554e439d60927a1a64cbf53160ba0b7c8d115deec40da04efb109cfe8f7863daa6cdd547ef8` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-server-linux-s390x.tar.gz) | `337cfb3894f818ca116630678e9b596f44506ce680670b416ee0edb2adae98be34110cbddd5faed5f7b672fd7771c315b12217e9a3858fc10c995fd8385d2b2d` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-linux-amd64.tar.gz) | `1e5e40bb5650a4aef147d21c31af322d44959aa4d7869cda84ba1e2bdd5c983710c6fe50b19c998fb3376cd86eceb45b65cefdfe3d37218d342fe395c73f2f26` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-linux-arm.tar.gz) | `c16b0adbf3296e886a0f0ec6ec36d5a18fb8ff62718bf59ac71ceb06985e73c5f33f0e2c9132faed75e54e8c1d5aa68020136c6167a962ee82269b994bd02b86` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-linux-arm64.tar.gz) | `16cc2c021c0bb09d903ce027a0e8eee5884395ee4e16998969fee29ef87af4e32540e96e6dd90584a6a919b842b9f4e24582406701bc32fc7a770b586cfffd1c` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-linux-ppc64le.tar.gz) | `0bbe3d990fa2aeccf4445980a4046b987d4b508db7d07e09cd6d2570f67d5a0620c11d2026afc142f2fb8cad82bb73267405c611e36c970c4a5dbe412625dd6b` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-linux-s390x.tar.gz) | `0bd7e19efcb09eb0136292dee397cf2893068378e584d098c451e759ffc6b52c86e877f4da2ec61e78871b7ac4c8e5515ae5c963f5665c42315036211725cf27` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.4/kubernetes-node-windows-amd64.tar.gz) | `1909c5b0cc63851f4b9dcbec871ad8e626f974eb86e3488a95eaf1f6736cf15cfd850904f44f2d278f8d6da21ba8251ec6607d61d4786caaf74707ece0cad44a` - -## Changelog since v1.13.3 - -### Other notable changes - -* fix get azure accounts timeout issue when there is no out-bound IP ([#74191](https://github.com/kubernetes/kubernetes/pull/74191), [@andyzhangx](https://github.com/andyzhangx)) -* fix issue: fail to detach azure disk when there is server side error ([#74398](https://github.com/kubernetes/kubernetes/pull/74398), [@andyzhangx](https://github.com/andyzhangx)) -* Fix keymutex issues which may crash in some platforms. ([#74386](https://github.com/kubernetes/kubernetes/pull/74386), [@danielqsj](https://github.com/danielqsj)) -* fix parse devicePath issue on Azure Disk ([#74499](https://github.com/kubernetes/kubernetes/pull/74499), [@andyzhangx](https://github.com/andyzhangx)) -* kubeadm: fixed nil pointer dereference caused by a bug in url parsing ([#74454](https://github.com/kubernetes/kubernetes/pull/74454), [@bart0sh](https://github.com/bart0sh)) -* fix mixed protocol issue for azure load balancer ([#74200](https://github.com/kubernetes/kubernetes/pull/74200), [@andyzhangx](https://github.com/andyzhangx)) -* fix smb remount issue on Windows ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx)) -* remove stale OutOfDisk condition from kubelet side ([#72507](https://github.com/kubernetes/kubernetes/pull/72507), [@dixudx](https://github.com/dixudx)) -* Adds deleting pods created by DaemonSet assigned to not existing nodes. ([#73401](https://github.com/kubernetes/kubernetes/pull/73401), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -* scheduler: use incremental scheduling cycle in PriorityQueue to put all in-flight unschedulable pods back to active queue if we received move request ([#73309](https://github.com/kubernetes/kubernetes/pull/73309), [@cofyc](https://github.com/cofyc)) -* Add `metrics-port` to kube-proxy cmd flags. ([#72682](https://github.com/kubernetes/kubernetes/pull/72682), [@whypro](https://github.com/whypro)) -* kube-apiserver: a request body of a CREATE/UPDATE/PATCH/DELETE resource operation larger than 100 MB will return a 413 "request entity too large" error. ([#73805](https://github.com/kubernetes/kubernetes/pull/73805), [@caesarxuchao](https://github.com/caesarxuchao)) - * Custom apiservers built with the latest apiserver library will have the 100MB limit on the body of resource requests as well. The limit can be altered via ServerRunOptions.MaxRequestBodyBytes. - * The body size limit does not apply to subresources like pods/proxy that proxy request content to another server. -* The apiserver, including both the kube-apiserver and apiservers built with the generic apiserver library, will now return 413 RequestEntityTooLarge error if a json patch contains more than 10,000 operations. ([#74000](https://github.com/kubernetes/kubernetes/pull/74000), [@caesarxuchao](https://github.com/caesarxuchao)) -* Fix watch to not send the same set of events multiple times causing watcher to go back in time ([#73845](https://github.com/kubernetes/kubernetes/pull/73845), [@wojtek-t](https://github.com/wojtek-t)) -* fixes an error processing watch events when running skewed apiservers ([#73482](https://github.com/kubernetes/kubernetes/pull/73482), [@liggitt](https://github.com/liggitt)) -* MAC Address filter has been fixed in vSphere Cloud Provider, it no longer ignores `00:1c:14` and `00:05:69` prefixes ([#73721](https://github.com/kubernetes/kubernetes/pull/73721), [@frapposelli](https://github.com/frapposelli)) - - - -# v1.13.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.3 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes.tar.gz) | `151af896b72c7fd09c05da1a7685e8b2f167c717adbe5776f80a264171e5f3359a948af93642856e0bfbabb49d3bf9c274085eacf6109c4b972ba5bc9d24b8a7` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-src.tar.gz) | `6b9afce63c970e62304767f4a3a58b6974608f7052ede634bffd3b8cc9562e8af56b26c66b8420fb748a0f9aa6336a90454cb57992c7e56c0ff85c37ddb02af8` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-darwin-386.tar.gz) | `945329155f78bcab5f5c062bda17220d0fea427a1ee522cf17fe4f32fab295e9baa6d20f88531b198abe8218be5df7d9877bff36e209f5700bc1ee6e83436291` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-darwin-amd64.tar.gz) | `3aabe9d26818abdbb66724cc047f8ad2e6fa45e48d62d05eb555ac62180fe941d688169c5b876986b7421922d6a8606fd2481b860c51fa73eec9284d88e9da0d` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-386.tar.gz) | `62e18f5d9551ab56c02fefc4a7e7b5f3ad169a2c11c5d3696742231fefe583d4e6c530907a65019f9bca94305df5900f558addbca7b2c7899c47d38f18992e4b` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-amd64.tar.gz) | `b326f6c1177c1176bea8ef404e3652cd64ceefb895f040a1364432e63a516a0a963eb65ce7f1fd294c7d39890f1b5e1989c36f4ac6d66dd98396055d754ef117` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-arm.tar.gz) | `669949d8eb3b12f1952c4f8f0289268d521cb2b58a2ef4551d7532114c82bcaa5269a42ac4094d7dbed5194761feb70cc17f0a3102abaf09328d2a58d3c6d437` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-arm64.tar.gz) | `efc677cc24279734f669faa056a11f61a5bf069ce07919ab8e007f4ed2f6083aa9b168de3adee50a56fd3503ba87ba94cd35f87d72f741ad0c202b3991428cb2` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-ppc64le.tar.gz) | `2b4fc4bdba12809d3cf0159cd1a8afb8404fad0b55c312c28e85d0064b4d1f7c322d1c322ac2f77f1cb7f6a83b7df65677cec4626b6f232fe6847a98f5386b14` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-linux-s390x.tar.gz) | `aba33e8a2ab026ba687eb46c67e79caeee8c74fc959de167ba9d6f2929e6a5e18d29f05a2d70bf80ed66db4778aa752d815f08bb8fc199db3209cd92232bc950` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-windows-386.tar.gz) | `295920b3797947308b37f5852cf136e47d900bca6d442495df97b88c02182eba2487f23519ea92af2d3f33b5a44c6bae204f73a4ad3bfbbaf5c2728b0ea8c639` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-client-windows-amd64.tar.gz) | `9cc3b24e92a8b7c49cc6225876ef9513fbb50520da11eaf897f4bd864304350d20726af580dc1663a03839ab6a5d6a8669f4e2a550e03d5f888a83b68ea6b6c3` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-server-linux-amd64.tar.gz) | `024847f8a370c4edb920a4621904540bf15c3afc0c688a134090ae8503a51296c83ebc402365f5a2be5aff01a8ca89910423874489dd2412608de0e38b455fb5` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-server-linux-arm.tar.gz) | `5fc1f6b60102e8830c6946750d0115cf71cdf59ef9878add2fc0edfed7b3396d25f6e1918d51481403ba6694c322ab038e1fc02cfc2192acb57970ce5954a158` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-server-linux-arm64.tar.gz) | `5cbd4ad922476262eae523c5dddaba9d4af3778b1dd731b7c3c538061d81f0a0913df872c9e34dbfdc5fd57ea5ce33cad1f6377d1a86e966e918af3c27a48fef` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-server-linux-ppc64le.tar.gz) | `1dfd2365cca9fc828f3cedf61f8d74da108a8416bb9320e0ce071da61808125ad79724092d3345b95c0a9f4e1592e9e6514e4dd6e217274bc631f59208984348` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-server-linux-s390x.tar.gz) | `cd096d1229c0e89595fe1353b7c095ba0cbbe72be701392672cbd7d73269c2dccf64a6234eee5d90aba5c7c0bed1c78bf49cd0acebe8a4a81bbef2c199d5458a` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-linux-amd64.tar.gz) | `18245cfc11f3e0eaad4a331f5a73deee5029c747a6c8183184ccc243ff2df010492146ae40b5f8eee312898cfbf2bbaaa6498bcd130d6ff53482daebad2b442d` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-linux-arm.tar.gz) | `52e3e5e6ab31df0be542ee6d4d9a4c2ef4cbbc9e28dc18a819d9f31283af11338bd75683d2722d04894f87e9d0ff14554e88b23d592997d83e3c73fc9ed96a89` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-linux-arm64.tar.gz) | `de4e718e0d996a5e3d7093eb97aef703ec23a0af5bd2d7116a3825a7834a00cd3080fb94acca87786ae6a49ef1966775223c4f4bf02171e80ecd5f372c732f17` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-linux-ppc64le.tar.gz) | `5981ec0b91f1fef0ca11a877362e1507935d03472d1d1de210fe8ef4cb8f45f656829eff23bdf448f68a4210c572cb9d71c34530a3e40e1544e2fd03ca50b10a` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-linux-s390x.tar.gz) | `b4ee2806c67d71697923d29dac821b90004eb0e4f43b3f0d3f3c1d9401c63b00c0e5f54f83111fb857ab69d7dbe78e7aa18e4d3edb9ad60a54aa526dc656d458` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.3/kubernetes-node-windows-amd64.tar.gz) | `3b97d44c038245b860ba08a9b4cc8fe77e75cd1a70b568ead58562dcd4a34e04a9dfa9e7819f2c2098685f3af92d7de34d2bfbb723b68d087f227d0d68f435be` - -## Changelog since v1.13.2 - -### Other notable changes - -* Update to go1.11.5 ([#73326](https://github.com/kubernetes/kubernetes/pull/73326), [@ixdy](https://github.com/ixdy)) -* add goroutine to move unschedulable pods to activeq if they are not retried for more than 1 minute ([#72558](https://github.com/kubernetes/kubernetes/pull/72558), [@denkensk](https://github.com/denkensk)) -* A new `TaintNodesByCondition` admission plugin taints newly created Node objects as "not ready", to fix a race condition that could cause pods to be scheduled on new nodes before their taints were updated to accurately reflect their reported conditions. This admission plugin is enabled by default if the `TaintNodesByCondition` feature is enabled. ([#73097](https://github.com/kubernetes/kubernetes/pull/73097), [@bsalamat](https://github.com/bsalamat)) -* kubeadm: add back `--cert-dir` option for `kubeadm init phase certs sa` ([#73239](https://github.com/kubernetes/kubernetes/pull/73239), [@mattkelly](https://github.com/mattkelly)) -* Scale max-inflight limits together with master VM sizes. ([#73268](https://github.com/kubernetes/kubernetes/pull/73268), [@wojtek-t](https://github.com/wojtek-t)) -* kubeadm: explicitly wait for `etcd` to have grown when joining a new control plane ([#72984](https://github.com/kubernetes/kubernetes/pull/72984), [@ereslibre](https://github.com/ereslibre)) -* Improve efficiency of preemption logic in clusters with many pending pods. ([#72895](https://github.com/kubernetes/kubernetes/pull/72895), [@bsalamat](https://github.com/bsalamat)) -* Fix AWS NLB security group updates where valid security group ports were incorrectly removed ([#68422](https://github.com/kubernetes/kubernetes/pull/68422), [@kellycampbell](https://github.com/kellycampbell)) - * when updating a service or when node changes occur. -* Allow for watching objects larger than 1MB given etcd accepts objects of size up to 1.5MB ([#72053](https://github.com/kubernetes/kubernetes/pull/72053), [@wojtek-t](https://github.com/wojtek-t)) -* kubectl: fixed an issue with "too old resource version" errors continuously appearing when calling `kubectl delete` ([#72825](https://github.com/kubernetes/kubernetes/pull/72825), [@liggitt](https://github.com/liggitt)) -* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#72619](https://github.com/kubernetes/kubernetes/pull/72619), [@everpeace](https://github.com/everpeace)) -* Fixes spurious 0-length API responses. ([#72856](https://github.com/kubernetes/kubernetes/pull/72856), [@liggitt](https://github.com/liggitt)) - - - -# v1.13.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes.tar.gz) | `fe1c30efaffb70b4102879580470031baf78f11c94fc37773bd69568a3aca9a93a0350d067faa2fa0f25f3e85005fe5944cecd7a33d48326f55c60d0c0408004` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-src.tar.gz) | `a6fb14fef46a566a68847cbb522ea091c545293f16af7ddf9ab26a801e548debcd4e4dc48aa6e38cc92bd65f69ca78e7db27d137e915efe687d3228962b94ecb` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-darwin-386.tar.gz) | `9998b7286281018f9bb1d0eeac9d59f287c2f4240f55ff362a9ce2d01565d60931793715904ef76cc82004556db4dedf18869e56022f054518b09b8b9fe6bfcf` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-darwin-amd64.tar.gz) | `4b1016ed9194d6c1e96a5aa896426be3288cf2f5c98cad9383b3760247c52bcdddbdbe4c697196e31cd0491469eb55ee6cd1ec388f82854b88eb68e4e1ece4e1` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-386.tar.gz) | `a48aba3f68a77a65d44121a0fc8ae6b508c71e483f19b05faea924f60cc18c7443c218b7c5170ba958dadb1411ce3aa9517782f3d0a68b5a704a33cb59d76212` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-amd64.tar.gz) | `1c389c36b531349e745bd036b6f33224a116fc4b6fbaff86d96a15dbae436730848263bb83f93fcf63a0e6ceaabd729817bdd1606fe180f57106da660c3c36f0` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-arm.tar.gz) | `87e958e7a9436d4db2264a21c96a113d2e88d485bbb5ea9e73fbeff39dbb3d0f3678cc5a491b72cde19a8564c17717f0bbcc31ead8197cfb0524e15e33820723` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-arm64.tar.gz) | `9ad4f639a95a2211594f125db38f67528ff3c38d6ae32b1cee3b7102bb475d9724ec232acf13f1ee5cbb9e22c58a8cfc09546df4bb2ab7fbde76195cd7f21cdc` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-ppc64le.tar.gz) | `25223a041dca0d13f8f26edae7d559c21c481c42b78a131614db71a8bee2fb85b81857eb34979a42d061e089e2673575d78ba3986b0491a1a844c9a7c74d145a` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-linux-s390x.tar.gz) | `62473b3798f01f0c1776bea6c2877d68e0d0f7221eceabb9108aa2f6060343bd46eba6b9564ae0d6a03fafaef3f32bc7d8c5da5ea970779fa0843395c55056cc` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-windows-386.tar.gz) | `6e43661690067229691df9f62788f23e1af40e23136e1e6c2c316c88a705b1554560c1489787fd34c594f81409a3814d3f7ff598c4248a7d1919db12f5d78fcf` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-client-windows-amd64.tar.gz) | `4bdf3074f3f50fd794d7ccf16c076d412686a1e3c435c9970d3e84da2b44c176c5f17f787e0e08bc30ac33a02ee1f3ca13b7fa4bbd2a07454d8a40c5d500b018` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-server-linux-amd64.tar.gz) | `e2d2f02f76578c5a1c04a9a417e9f1dc16abcc28daab688c50554a1bf64bb75dfbf5aae6d6f3e5c4463b214034e0220884727e314fa563f6e2199b9a3e4147a9` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-server-linux-arm.tar.gz) | `6f4a331fd78157866238dd9b8d986d33bfce6548ae503d0c9f4fb42854b0793df659298f95577103994047d01a6b613140b0eece3ae8c294bb0fe8ace84cdea1` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-server-linux-arm64.tar.gz) | `50fc95da2598775029b828f31978f6e2a98eceee890bd575122e7697dc7805f1fb9de060998999f3f9d8bc76f5d534b25f64f9b340c70a58503172ae2818d98a` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-server-linux-ppc64le.tar.gz) | `eea26a444b99d5fe984efa12672125f4482ab6f0e5cd52b5d110669bc0f1ff1239293cdca5af4ac862507e1c7a2ffdb890a0ff6dc13a6c971a40809370986d4e` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-server-linux-s390x.tar.gz) | `d2277b94c0f487eb8636355e8d0880af9f7a7e4fd5e6688278814582a0d872aa4884b2411d8a2ff5ea1b917ec178b973edb8af4fbb55c79a0f5c902dcfd43fbf` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-linux-amd64.tar.gz) | `f908a95f264792bdc0d8c79c818d044b81bf5cf7179b239a3c3835a58d1e61e5b31df913bb6cfeb662864102b9f51951565e54f419fa2d56859041b7c68de82a` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-linux-arm.tar.gz) | `24d5bedf4da1aa7d445b8ff2e62f43210f6bd5cc4a3a53b157e5edfe1e00c71b25d84767c8738c9c4f6fdfc86e56de4c6225eabaea4ca8385da0856daef6d66d` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-linux-arm64.tar.gz) | `52936dfe3c41207495f5831c9ec93be2e188ee97d696de3a0317ed8caefab2b002c3b1b72c375bd11368a6a8ac7112b0451190d54e1b234d2b5e45a30ea8eddc` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-linux-ppc64le.tar.gz) | `c07bee8d4511eadd0fb45107b672898c53fc817f5de034c57f4ef0fbeef0a8964f188604b3fc0ce042e511444e3a2117574136a4a9b4e013ac316e6d72d8fcd5` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-linux-s390x.tar.gz) | `12b588e226bb7b7dc78378962d46553e540539c666c364bdfc0f1228a87bca90d54ba42dfd7558369f4c986c6460fc5bc98244b2274cb8801997c9f1f4ce95f0` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.2/kubernetes-node-windows-amd64.tar.gz) | `219fe75c216a0d42b944699e8da9f5b4eeff3cc43415d139954c577b75a27b108dc787e7b459cdc0251095367edefab2afc8d5297f33fc44cd222840968b3a08` - -## Changelog since v1.13.1 - -### Other notable changes - -* client-go: shortens refresh period for token files to 1 minute to ensure auto-rotated projected service account tokens are read frequently enough. ([#72437](https://github.com/kubernetes/kubernetes/pull/72437), [@liggitt](https://github.com/liggitt)) -* Updates the kubernetes dashboard add-on to v1.10.1. Skipping dashboard login is no longer enabled by default. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495), [@liggitt](https://github.com/liggitt)) -* Fixes a bug in HPA controller so HPAs are always updated every resyncPeriod (15 seconds). ([#72373](https://github.com/kubernetes/kubernetes/pull/72373), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -* Fix device mountable volume names in DSW to prevent races in device mountable plugin, e.g. local. ([#71509](https://github.com/kubernetes/kubernetes/pull/71509), [@cofyc](https://github.com/cofyc)) -* change azure disk host cache to ReadOnly by default ([#72229](https://github.com/kubernetes/kubernetes/pull/72229), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes issue with cleaning up stale NFS subpath mounts ([#71804](https://github.com/kubernetes/kubernetes/pull/71804), [@msau42](https://github.com/msau42)) -* Fix a race condition in the scheduler preemption logic that could cause nominatedNodeName of a pod not to be considered in one or more scheduling cycles. ([#72259](https://github.com/kubernetes/kubernetes/pull/72259), [@bsalamat](https://github.com/bsalamat)) -* Fixes `kubectl create secret docker-registry` compatibility ([#72344](https://github.com/kubernetes/kubernetes/pull/72344), [@liggitt](https://github.com/liggitt)) -* Fix race condition introduced by graceful termination which can lead to a deadlock in kube-proxy ([#72361](https://github.com/kubernetes/kubernetes/pull/72361), [@lbernail](https://github.com/lbernail)) -* Support graceful termination with IPVS when deleting a service ([#71895](https://github.com/kubernetes/kubernetes/pull/71895), [@lbernail](https://github.com/lbernail)) -* Fixes issue where subpath volume content was deleted during orphaned pod cleanup for Local volumes that are directories (and not mount points) on the root filesystem. ([#72291](https://github.com/kubernetes/kubernetes/pull/72291), [@msau42](https://github.com/msau42)) -* kube-proxy in IPVS mode will stop initiating connections to terminating pods for services with sessionAffinity set. ([#71834](https://github.com/kubernetes/kubernetes/pull/71834), [@lbernail](https://github.com/lbernail)) -* fix race condition when attach azure disk in vmss ([#71992](https://github.com/kubernetes/kubernetes/pull/71992), [@andyzhangx](https://github.com/andyzhangx)) -* Reduce CSI log and event spam. ([#71581](https://github.com/kubernetes/kubernetes/pull/71581), [@saad-ali](https://github.com/saad-ali)) -* fix kubelet log flushing issue in azure disk ([#71990](https://github.com/kubernetes/kubernetes/pull/71990), [@andyzhangx](https://github.com/andyzhangx)) -* Update to use go1.11.3 with fix for CVE-2018-16875 ([#72035](https://github.com/kubernetes/kubernetes/pull/72035), [@seemethere](https://github.com/seemethere)) -* Fix a race condition in which kubeadm only waits for the kubelets kubeconfig file when it has performed the TLS bootstrap, but wasn't waiting for certificates to be present in the filesystem ([#72030](https://github.com/kubernetes/kubernetes/pull/72030), [@ereslibre](https://github.com/ereslibre)) -* kubeadm: fix a possible panic when joining a new control plane node in HA scenarios ([#72123](https://github.com/kubernetes/kubernetes/pull/72123), [@anitgandhi](https://github.com/anitgandhi)) -* kubeadm: fix a bug when syncing etcd endpoints ([#71945](https://github.com/kubernetes/kubernetes/pull/71945), [@pytimer](https://github.com/pytimer)) - - - -# v1.13.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes.tar.gz) | `de3858357b2b4444bccc0599c7d0edd3e6ec1a80267ef96883ebcfb06c518ce467dd8720b48084644677a42b8e3ffad9a7d4745b40170ce9dfe5b43310979be1` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-src.tar.gz) | `7f0a8dbd3c7397cc5a5bc0297eb24b8e734c3c7b78e48fc794c525377c3895f4fd84fd0a2fa70c5513cc47ee5a174c22bab54796abc5a8f2b30687642c819a68` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-darwin-386.tar.gz) | `371028dba7a28ec3c8f10b861448cb1574dce25d32d847af254b76b7f158aa4fcda695972e2a08440faa4e16077f8021b07115d0da897bef79c33e702f3be95e` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-darwin-amd64.tar.gz) | `6aa7025308e9fb1eb4415e504e8aa9c7a0a20b09c500cb48df82bbd04443101664b2614fb284875b9670d4bb11e8f1a10190eaf1d54f81f3a9526053958b0802` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-386.tar.gz) | `6453670bb61b4f5f7fe8ae78804864ecd52682b32592f6956faf3d2220884a64fb22ae2e668b63f28ea8fd354c50aa90ce61c60be327fb0b5fcfe2c7835ef559` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-amd64.tar.gz) | `ca00442f50b5d5627357dce97c90c17cb0126d746b887afdab2d4db9e0826532469fd1ee62f40eb6923761618f46752d10993578ca19c8b92c3a2aeb5102a318` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-arm.tar.gz) | `5fa170cbe56b8f5d103f520e2493f911c5eb59b51a6afdbaa9c08196943f1235e533f0384ce7c01c73a020c6889cf8f03cc3642912d0953c74d1098e4b21f3a0` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-arm64.tar.gz) | `710343ad067f0d642c43cd26871828275645b08b4f4c86bd555865318d8fe08b7f0a720174c04d58acffcb26faf563636dc13eef66a2813eac68bb8b994908f4` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-ppc64le.tar.gz) | `0fa7ab255f0cba3adc754337c6184e6ec464aa5a4d6dd4d38aad8a0e2430a0044f4ed1ffcd7cc7c863190d3cda6b84abd12ca7536139d665ad61fe7704e63d30` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-linux-s390x.tar.gz) | `749a8dce5b81e2edbd315841acac64a0e5d17bb1ead8173560b6a4ccc28604bc8254051297ab51cb5df845495bd75a45137827b3386e3962295fec8601563eaa` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-windows-386.tar.gz) | `cd4732fbe569009c426f963318d05ddcc7c63dc27ec9d2bf9c60d716195e3676aa5b0e6ccbde6298f621450d365d41a910ce3ced89bf2ae6d3e81ee2fed0bb16` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-client-windows-amd64.tar.gz) | `40f5b5d221b3a611511690d316539dc8fb3f4513e4f9eb141bffa17c9ddeee875a462f5bd45e62ce7c7535310fc3e48e3441614700ee9877584c5948ddbef19f` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz) | `e0e48825c5fe33a3f82b1b74847d9bfb8c5716c4313c5e4e6f46be0580e20a1e396a669b8ca446cfa581e3eb75698813249bbfcfc79c8a90793880eb5c177921` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-server-linux-arm.tar.gz) | `7ff4856e7959cf14eba0e1ab274c0bf0d3193391e7034a936697f0c4813e81d8dda4a019d3185677bee9d1345a6433db3fd6e55f644a0f73d076e0b2014ed172` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-server-linux-arm64.tar.gz) | `b8c2356002e675bd3de5ee9c2337a12e2a1bbfa2478f8e3b91065a578dfa8d50f596fd606d9f0232b06b8263867a7ca5cc7c04150718b8e40b49ae7d46001c30` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-server-linux-ppc64le.tar.gz) | `5d3a15b1241d849d8954894aa7f3fb12606f9966f73fc36aa15152038fc385153b0f0e967cc0bf410a5d5894d0269e54eac581d8e79003904d7bc29b33e98684` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-server-linux-s390x.tar.gz) | `78a9cccaf9d737b519db0866c2e80c472c7136bc723910d08649ece1c420ae7f6e56e610d65c436c56ccef8360c4da0f70e75d0cf47c0c8e739f5138cdc7b0d2` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-linux-amd64.tar.gz) | `3a7881a52885bebe5958f02dc54194cc8c330576b7cf5935189df4f0b754b958917b104e1d3358c0bc9277f13a8eef2176284548d664f27a36baa389fbcc7bea` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-linux-arm.tar.gz) | `d0bfcff3ef7c0aa36005e7b111685438ebd0ea61d48dc68a7bd06eea3782b6eb224f9b651d80c955afa162f766c8b682976db43238562c293d6552cdadf9e934` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-linux-arm64.tar.gz) | `2e23bd00661aceb30fa37e24ab71315755bd93dfcc5ff361d78445a8e9ff99e7b3a56641112af3184e8b107545fba6573a6368a82bd0ce475c81cb53fd44da3b` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-linux-ppc64le.tar.gz) | `8d0fdb743c700d662886636fe67b52202cf9e6e57c2d7de5961b8189d8c03c91fda1d68c47033286efcc582e78be40846e2b1f5c589a0b94794fa2ce3c1ebfee` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-linux-s390x.tar.gz) | `70445038b4db62c3fc99540f5ddbb881387018244242f182332b8eaa7159ce1aa8929145010ab2befd4e101d39c24c61e430928235434c7d7eb54f113860a83a` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.1/kubernetes-node-windows-amd64.tar.gz) | `a87ad43f5a6b8f66d1bbd64f9c91e8bcbdf4adc8de0ec3cd559adaa8c14a6fe078ffdf090e52627c0522b79209fcc37bf822b323895dd47b18c20026cb25e9f5` - -## Changelog since v1.13.0 - -### Other notable changes - -* Fix overlapping filenames in diff if multiple resources have the same name. ([#71923](https://github.com/kubernetes/kubernetes/pull/71923), [@apelisse](https://github.com/apelisse)) -* Disable proxy to loopback and linklocal ([#71980](https://github.com/kubernetes/kubernetes/pull/71980), [@micahhausler](https://github.com/micahhausler)) -* kube-scheduler: restores ability to run without authentication configuration lookup permissions ([#71755](https://github.com/kubernetes/kubernetes/pull/71755), [@liggitt](https://github.com/liggitt)) -* client-go: restores behavior of populating the BearerToken field in rest.Config objects constructed from kubeconfig files containing tokenFile config, or from in-cluster configuration. An additional BearerTokenFile field is now populated to enable constructed clients to periodically refresh tokens. ([#71713](https://github.com/kubernetes/kubernetes/pull/71713), [@liggitt](https://github.com/liggitt)) -* apply: fix detection of non-dry-run enabled servers ([#71854](https://github.com/kubernetes/kubernetes/pull/71854), [@apelisse](https://github.com/apelisse)) -* Scheduler only activates unschedulable pods if node's scheduling related properties change. ([#71551](https://github.com/kubernetes/kubernetes/pull/71551), [@mlmhl](https://github.com/mlmhl)) -* Fixes pod deletion when cleaning old cronjobs ([#71802](https://github.com/kubernetes/kubernetes/pull/71802), [@soltysh](https://github.com/soltysh)) -* fix issue: vm sku restriction policy does not work in azure disk attach/detach ([#71941](https://github.com/kubernetes/kubernetes/pull/71941), [@andyzhangx](https://github.com/andyzhangx)) -* Include CRD for BGPConfigurations, needed for calico 2.x to 3.x upgrade. ([#71868](https://github.com/kubernetes/kubernetes/pull/71868), [@satyasm](https://github.com/satyasm)) -* UDP connections now support graceful termination in IPVS mode ([#71515](https://github.com/kubernetes/kubernetes/pull/71515), [@lbernail](https://github.com/lbernail)) -* kubeadm: use kubeconfig flag instead of kubeconfig-dir on init phase bootstrap-token ([#71803](https://github.com/kubernetes/kubernetes/pull/71803), [@yagonobre](https://github.com/yagonobre)) -* On GCI, NPD starts to monitor kubelet, docker, containerd crashlooping, read-only filesystem and corrupt docker overlay2 issues. ([#71522](https://github.com/kubernetes/kubernetes/pull/71522), [@wangzhen127](https://github.com/wangzhen127)) -* Fixes an issue where Portworx volumes cannot be mounted if 9001 port is already in use on the host and users remap 9001 to another port. ([#70392](https://github.com/kubernetes/kubernetes/pull/70392), [@harsh-px](https://github.com/harsh-px)) -* Only use the first IP address got from instance metadata. This is because Azure CNI would set up a list of IP addresses in instance metadata, while only the first one is the Node's IP. ([#71736](https://github.com/kubernetes/kubernetes/pull/71736), [@feiskyer](https://github.com/feiskyer)) -* kube-controller-manager: fixed issue display help for the deprecated insecure --port flag ([#71601](https://github.com/kubernetes/kubernetes/pull/71601), [@liggitt](https://github.com/liggitt)) -* Update Cluster Autoscaler version in gce manifests to 1.13.1 (https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.13.1) ([#71842](https://github.com/kubernetes/kubernetes/pull/71842), [@losipiuk](https://github.com/losipiuk)) -* kubectl: fixes regression in --sort-by behavior ([#71805](https://github.com/kubernetes/kubernetes/pull/71805), [@liggitt](https://github.com/liggitt)) -* Fixes apiserver nil pointer panics when requesting v2beta1 autoscaling object metrics ([#71744](https://github.com/kubernetes/kubernetes/pull/71744), [@yue9944882](https://github.com/yue9944882)) -* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#71488](https://github.com/kubernetes/kubernetes/pull/71488), [@bsalamat](https://github.com/bsalamat)) - - - -# v1.13.0 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes.tar.gz) | `7b6a81c9f1b852b1e889c1b62281569a4b8853c79e5675b0910d941dfa7863c97f244f6d607aae3faf60bccd596dedb9d136b7fffeae199876e780904fd9f31e` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-src.tar.gz) | `844b9fbba21374dd190c8f12dd0e5b3303dd2cd7ad25f241d6f7e46f74adf6987afad021553521d4f479c19d87aa8d4d5be77ac7a6715d31a9187a5bab3b397b` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-darwin-386.tar.gz) | `0c010351acb660a75122feb876c9887d46ec2cb466872dd073b7f5b26fdadd96888a350e01606f2ae43606a5a4ab2d9309441f4357cee924b19688f9b02c55dc` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-darwin-amd64.tar.gz) | `c2c40bd202900124f4e9458b067a1e1fc040030dc84ce9bcc6a5beb263de05892c16f3bdafb8d854e343e71f086207f390fd0b60f6e32e770c73294b053da6e4` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-386.tar.gz) | `5f5449be103b103d72a4e2b1028ab014cf7f74781166327f2ae284e4f5ecb539f6b60f36b8f7c7be0ae43dfb30661b2672dd93a1fa7e26d6c67498672674bf12` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-amd64.tar.gz) | `61a6cd3b1fb34507e0b762a45da09d88e34921985970a2ba594e0e5af737d94c966434b4e9f8e84fb73a0aeb5fa3e557344cd2eb902bf73c67d4b4bff33c6831` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-arm.tar.gz) | `dd5591e2b88c347759a138c4d2436a0f5252341d0e8c9fbab16b8f151e2744cbdd0c8583555a451425bc471f11b688ce568d9245caf8a278cbac2b343fdead89` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-arm64.tar.gz) | `894ed30261598ebf3485f3575e95f85e3c353f4d834bf9a6ea53b265427704b43fba5403fbc4d522b3f02afb08e6afaae200af1fe57996291a7c74398ec2fe17` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-ppc64le.tar.gz) | `6c26c807fc730ea736fda75dc57ac73395ba78bb828fffeee18b385be550d8f3ba2bbc27a52a8f15bcbbe68218c7945d9fb725e6759c117422bc0a632c110670` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-linux-s390x.tar.gz) | `41e6e972de77c0bde22fdd779ea64e731b60f32e97e78a024f33fc3e33a3b364b7f77ece7d3c64ad85b7f8fe7c8fc6d6892098a3362d1fe01ebf3d551fe2bf37` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-windows-386.tar.gz) | `442229e5030452901b924a94e7a879d4085597a4f201a5b3fc5ac9806cab5830c836cfa7a33e8f1693fe2e8badc4047bf227d7fb00c537fb1fb4cb7639de5455` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-client-windows-amd64.tar.gz) | `a11a8e8e732e7292781b9cb1de6e3e41683f95fb3fefc2b1a7b5fb1f064a0d80c0833876d931675135778457d81de9ed2e81caee4b3eb27d9f23c7b722b17442` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-server-linux-amd64.tar.gz) | `a8e3d457e5bcc1c09eeb66111e8dd049d6ba048c3c0fa90a61814291afdcde93f1c6dbb07beef090d1d8a9958402ff843e9af23ae9f069c17c0a7c6ce4034686` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-server-linux-arm.tar.gz) | `4e17494767000256775e4dd33c0a9b2d152bd4b5fba9f343b6dfeb5746ff34e400a8e0aaf2153476453225ef57e4bb1ae3635416ab18f9e4dabf4e5cc82f8aaa` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-server-linux-arm64.tar.gz) | `0ddd0cf0ff56cebfa89efb1972cc2bc6916e824c2af56cfd330ac5638c8918eaf3c60d05714b220dbf4f896160eded123beeba42f5be55fe434a43d04508d86a` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-server-linux-ppc64le.tar.gz) | `b93828560224e812ed21b57fea5458fa8560745cfec96fc1677b258393c00e208ad9b99467b575e74e01699ffd75f03f5793675032e7306cba7208c1afb53c8d` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-server-linux-s390x.tar.gz) | `154d565329d5ba52cdb7c3d43d8854b7a9b8e34803c4df6b3e6ae74c1a6e255c78e6559b7546b9158df0e3f7931bbdaf43407d95cd875c79f5cce960bb9882dd` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-linux-amd64.tar.gz) | `9d18ba5f0c3b09edcf29397a496a1e908f4906087be3792989285630d7bcbaf6cd3bdd7b07dace439823885acc808637190f5eaa240b7b4580acf277b67bb553` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-linux-arm.tar.gz) | `959b04ff7b8690413e01bffeabaab2119794dedf06b7aae1743e49988f797cb7e6ff12e1a91af2d4c5f664414f3aa4bd9020521c6a21c1196c194d12a6f7fe08` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-linux-arm64.tar.gz) | `b5c18e8c9e28cf276067c871446720d86b6f162e22c3a5e9343cdbc6857baa6961d09a6908b6acd1bbd132c2e2e526377676babf77b8d3bfb36f8711827c105a` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-linux-ppc64le.tar.gz) | `63e3504d3b115fdf3396968afafd1107b98e5a1a15b7c042a87f5a9cffbdc274f7b06b07ce90eb51876cfffd57cf7f20180bad7e9f9762af577e51f4f13d2f7a` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-linux-s390x.tar.gz) | `21c5c2721febf7fddeada9569f3ecbd059267e5d2cc325d98fb74faf1ae9e9e15899750225a1fc7c25feef96e7705b1456cb489f4882b9eb10e78bd0f590d019` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0/kubernetes-node-windows-amd64.tar.gz) | `3e73d3ecff14b4c85a71bb6cf91b1ab7d9c3075c64bd5ce6863562ab17bf808b0cbc33ddd25346d25040649c1ad89745796afd218190886b54f1d8acc17896e4` - -# Kubernetes 1.13 Release Notes - -## Security Content - -- CVE-2018-1002105, a critical security issue in the Kubernetes API Server, is resolved in v1.13.0 (and in [v1.10.11](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md/#v11011), [v1.11.5](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md/#v1115), and [v1.12.3](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md/#v1123)). We recommend all clusters running previous versions update to one of these releases immediately. See issue [#71411](https://github.com/kubernetes/kubernetes/issues/71411) for details. - -## Urgent Upgrade Notes - -### (No, really, you MUST do this before you upgrade) - -Before upgrading to Kubernetes 1.13, you must keep the following in mind: - -- kube-apiserver - - The deprecated `etcd2` storage backend has been removed. Before upgrading a kube-apiserver using `--storage-backend=etcd2`, etcd v2 data must be migrated to the v3 storage backend, and kube-apiserver invocations changed to use `--storage-backend=etcd3`. Please consult the installation procedure used to set up etcd for specific migration instructions. Backups prior to upgrade are always a good practice, but since the etcd2 to etcd3 migration is not reversible, an etcd backup prior to migration is essential. - - The deprecated `--etcd-quorum-read` flag has been removed. Quorum reads are now always enabled when fetching data from etcd. Remove the `--etcd-quorum-read` flag from kube-apiserver invocations before upgrading. -- kube-controller-manager - - The deprecated `--insecure-experimental-approve-all-kubelet-csrs-for-group` flag has been removed. -- kubelet - - The deprecated `--google-json-key` flag has been removed. Remove the `--google-json-key` flag from kubelet invocations before upgrading. ([#69354](https://github.com/kubernetes/kubernetes/pull/69354), [@yujuhong](https://github.com/yujuhong)) - - DaemonSet pods now make use of scheduling features that require kubelets to be at 1.11 or above. Ensure all kubelets in the cluster are at 1.11 or above before upgrading kube-controller-manager to 1.13. - - The schema for the alpha `CSINodeInfo` CRD has been split into `spec` and `status` fields, and new fields `status.available` and `status.volumePluginMechanism` added. Clusters using the previous alpha schema must delete and recreate the CRD using the new schema. ([#70515](https://github.com/kubernetes/kubernetes/pull/70515), [@davidz627](https://github.com/davidz627)) -- kube-scheduler dropped support for configuration files with apiVersion `componentconfig/v1alpha1`. Ensure kube-scheduler is configured using command-line flags or a configuration file with apiVersion `kubescheduler.config.k8s.io/v1alpha1` before upgrading to 1.13. -- kubectl - - The deprecated command `run-container` has been removed. Invocations should use `kubectl run` instead ([#70728](https://github.com/kubernetes/kubernetes/pull/70728), [@Pingan2017](https://github.com/Pingan2017)) -- client-go releases will no longer have bootstrap (k8s.io/client-go/tools/bootstrap) related code. Any reference to it will break. Please redirect all references to k8s.io/bootstrap instead. ([#67356](https://github.com/kubernetes/kubernetes/pull/67356), [@yliaog](https://github.com/yliaog)) -- Kubernetes cannot distinguish between GCE Zonal PDs and Regional PDs with the same name. To workaround this issue, precreate PDs with unique names. PDs that are dynamically provisioned do not encounter this issue. ([#70716](https://github.com/kubernetes/kubernetes/pull/70716), [@msau42](https://github.com/msau42)) - -## Known Issues - -- If kubelet plugin registration for a driver fails, kubelet will not retry. The driver must delete and recreate the driver registration socket in order to force kubelet to attempt registration again. Restarting only the driver container may not be sufficient to trigger recreation of the socket, instead a pod restart may be required. ([#71487](https://github.com/kubernetes/kubernetes/issues/71487)) -- In some cases, a Flex volume resize may leave a PVC with erroneous Resizing condition even after volume has been successfully expanded. Users may choose to delete the condition, but it is not required. ([#71470](https://github.com/kubernetes/kubernetes/issues/71470)) -- The CSI driver-registrar external sidecar container v1.0.0-rc2 is known to take up to 1 minute to start in some cases. We expect this issue to be resolved in a future release of the sidecar container. For verification, please see the release notes of future releases of the external sidecar container. ([#76](https://github.com/kubernetes-csi/driver-registrar/issues/76)) -- When using IPV6-only, be sure to use `proxy-mode=iptables` as `proxy-mode=ipvs` is known to not work. ([#68437](https://github.com/kubernetes/kubernetes/issues/68437)) - -## Deprecations - -- kube-apiserver - - The `--service-account-api-audiences` flag is deprecated in favor of `--api-audiences`. The old flag is accepted with a warning but will be removed in a future release. ([#70105](https://github.com/kubernetes/kubernetes/pull/70105), [@mikedanese](https://github.com/mikedanese)) - - The `--experimental-encryption-provider-config` flag is deprecated in favor of `--encryption-provider-config`. The old flag is accepted with a warning but will be removed in 1.14. ([#71206](https://github.com/kubernetes/kubernetes/pull/71206), [@stlaz](https://github.com/stlaz)) - - As part of graduating the etcd encryption feature to beta, the configuration file referenced by `--encryption-provider-config` now uses `kind: EncryptionConfiguration` and `apiVersion: apiserver.config.k8s.io/v1`. Support for `kind: EncryptionConfig` and `apiVersion: v1` is deprecated and will be removed in a future release. ([#67383](https://github.com/kubernetes/kubernetes/pull/67383), [@stlaz](https://github.com/stlaz)) - - The `--deserialization-cache-size` flag is deprecated, and will be removed in a future release. The flag is inactive since the etcd2 storage backend was removed. ([#69842](https://github.com/kubernetes/kubernetes/pull/69842), [@liggitt](https://github.com/liggitt)) - - The `Node` authorization mode no longer allows kubelets to delete their Node API objects (prior to 1.11, in rare circumstances related to cloudprovider node ID changes, kubelets would attempt to delete/recreate their Node object at startup) ([#71021](https://github.com/kubernetes/kubernetes/pull/71021), [@liggitt](https://github.com/liggitt)) - - The built-in `system:csi-external-provisioner` and `system:csi-external-attacher` cluster roles are deprecated and will not be auto-created in a future release. CSI deployments should provide their own RBAC role definitions with required permissions. ([#69868](https://github.com/kubernetes/kubernetes/pull/69868), [@pohly]( https://github.com/pohly)) - - The built-in `system:aws-cloud-provider` cluster role is deprecated and will not be auto-created in a future release. Deployments using the AWS cloud provider should grant required permissions to the `aws-cloud-provider` service account in the `kube-system` namespace as part of deployment. ([#66635](https://github.com/kubernetes/kubernetes/pull/66635), [@wgliang](https://github.com/wgliang)) -- kubelet - - Use of the beta plugin registration directory `{kubelet_root_dir}/plugins/` for registration of external drivers via the kubelet plugin registration protocol is deprecated in favor of `{kubelet_root_dir}/plugins_registry/`. Support for the old directory is planned to be removed in v1.15. Device plugin and CSI storage drivers should switch to the new directory prior to v1.15. Only CSI storage drivers that support 0.x versions of the CSI API are allowed in the old directory. ([#70494](https://github.com/kubernetes/kubernetes/pull/70494) by [@RenaudWasTaken](https://github.com/RenaudWasTaken) and [#71314](https://github.com/kubernetes/kubernetes/pull/71314) by [@saad-ali](https://github.com/saad-ali)) - - With the release of the CSI 1.0 API, support for CSI drivers using 0.3 and older releases of the CSI API is deprecated, and is planned to be removed in Kubernetes v1.15. CSI drivers should be updated to support the CSI 1.0 API, and deployed in the new kubelet plugin registration directory (`{kubelet_root_dir}/plugins_registry/`) once all nodes in the cluster are at 1.13 or higher ([#71020](https://github.com/kubernetes/kubernetes/pull/71020) and [#71314](https://github.com/kubernetes/kubernetes/pull/71314), both by [@saad-ali](https://github.com/saad-ali)) - - Use of the `--node-labels` flag to set labels under the `kubernetes.io/` and `k8s.io/` prefix will be subject to restriction by the `NodeRestriction` admission plugin in future releases. [See admission plugin documentation](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) for allowed labels. ([#68267](https://github.com/kubernetes/kubernetes/pull/68267), [@liggitt](https://github.com/liggitt)) -- kube-scheduler - - The alpha critical pod annotation (`scheduler.alpha.kubernetes.io/critical-pod`) is deprecated. Pod priority should be used instead to mark pods as critical. ([#70298](https://github.com/kubernetes/kubernetes/pull/70298), [@bsalamat](https://github.com/bsalamat)) -- The following features are now GA, and the associated feature gates are deprecated and will be removed in a future release: - - CSIPersistentVolume - - GCERegionalPersistentDisk - - KubeletPluginsWatcher - - VolumeScheduling -- kubeadm - - The DynamicKubeletConfig feature gate is deprecated. The functionality is still accessible by using the kubeadm alpha kubelet enable-dynamic command. - - The command `kubeadm config print-defaults` is deprecated in favor of `kubeadm config print init-defaults` and `kubeadm config print join-defaults` ([#69617](https://github.com/kubernetes/kubernetes/pull/69617), [@rosti](https://github.com/rosti)) - - support for the `v1alpha3` configuration file format is deprecated and will be removed in 1.14. Use `kubeadm config migrate` to migrate `v1alpha3` configuration files to `v1beta1`, which provides improvements in image repository management, addons configuration, and other areas. The documentation for `v1beta1` can be found here: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1 -- The `node.status.volumes.attached.devicePath` field is deprecated for CSI volumes and will not be set in future releases ([#71095](https://github.com/kubernetes/kubernetes/pull/71095), [@msau42](https://github.com/msau42)) -- kubectl - - The `kubectl convert` command is deprecated and will be removed in a future release ([#70820](https://github.com/kubernetes/kubernetes/pull/70820), [@seans3](https://github.com/seans3)) -- Support for passing unknown provider names to the E2E test binaries is deprecated and will be removed in a future release. Use `--provider=skeleton` (no ssh access) or `--provider=local` (local cluster with ssh) instead. ([#70141](https://github.com/kubernetes/kubernetes/pull/70141), [@pohly](https://github.com/pohly)) - -## Major Themes - -### SIG API Machinery - -For the 1.13 release, SIG API Machinery is happy to announce that the [dry-run functionality](https://kubernetes.io/docs/reference/using-api/api-concepts/#dry-run) is now beta. - -### SIG Auth - -With this release we've made several important enhancements to core SIG Auth areas. In the authorization category, we've further reduced Kubelet privileges by [restricting node self-updates of labels to a whitelisted selection and by disallowing kubelets from deleting their Node API object](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction). In authentication, we added alpha-level support for automounting improved service account tokens through projected volumes. We also enabled [audience validation in TokenReview](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#tokenreview-v1-authentication-k8s-io) for the new tokens for improved scoping. Under audit logging, the new alpha-level "dynamic audit configuration" adds support for [dynamically registering webhooks to receive a stream of audit events](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#dynamic-backend). Finally, we've enhanced secrets protection by graduating [etcd encryption](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) out of experimental. - -### SIG AWS - -In v1.13 we worked on tighter integrations of Kubernetes API objects with AWS services. These include three out-of-tree alpha feature releases: - -1) Alpha for AWS ALB (Application Load Balancer) integration to Kubernetes Ingress resources. -2) Alpha for CSI specification 0.3 integration to AWS EBS (Elastic Block Store) -3) Alpha for the cloudprovider-aws cloud controller manager binary. Additionally we added [aws-k8s-tester](https://github.com/kubernetes/test-infra/issues/9814), deployer interface for kubetest, to the test-infra repository. This plugin allowed us to integrate Prow to the 3 subprojects defined above in order to provide CI signal for all 3 features. The CI signal is visible [here](https://testgrid.k8s.io/) under SIG-AWS. - -For detailed release notes on the three alpha features from SIG AWS, please refer to the following Changelogs: - -- [aws-alb-ingress-controller v1.0.0](https://github.com/kubernetes-sigs/aws-alb-ingress-controller/releases/tag/v1.0.0) -- [aws-ebs-csi-driver v0.1](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/CHANGELOG-0.1.md) -- [cloudprovider-aws external v0.1.0](https://github.com/kubernetes/cloud-provider-aws/blob/master/changelogs/CHANGELOG-0.1.md) - -### SIG Azure - -For 1.13 SIG Azure was focused on adding additional Azure Disk support for Ultra SSD, Standard SSD, and Premium Azure Files. Azure Availability Zones and cross resource group nodes were also moved from Alpha to Beta in 1.13. - -### SIG Big Data - -During the 1.13 release cycle, SIG Big Data has been focused on community engagements relating to 3rd-party project integrations with Kubernetes. There have been no impacts on the 1.13 release. - -### SIG CLI - -Over the course of 1.13 release SIG CLI mostly focused on stabilizing the items we’ve been working on over the past releases such as server-side printing and its support in kubectl, as well as finishing [kubectl diff which is based on server-side dry-run feature](https://kubernetes.io/docs/concepts/overview/object-management-kubectl/#how-to-create-objects). We’ve continued separating kubectl code to prepare for extraction out of main repository. Finally, thanks to the awesome support and feedback from community we’ve managed to promote the new [plugin mechanism to Beta](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/). - -### SIG Cloud Provider - -For v1.13, SIG Cloud Provider has been focused on stabilizing the common APIs and interfaces consumed by cloud providers today. This involved auditing the cloud provider APIs for anything that should be deprecated as well as adding changes where necessary. In addition, SIG Cloud Provider has begun exploratory work around having a “cloud provider†e2e test suite which can be used to test common cloud provider functionalities with resources such as nodes and load balancers. - -We are also continuing our long running effort to extract all the existing cloud providers that live in k8s.io/kubernetes into their own respective repos. Along with this migration, we are slowly transitioning users to use the cloud-controller-manager for any cloud provider features instead of the kube-controller-manager. - -### SIG Cluster Lifecycle - -For 1.13 SIG Cluster Lifecycle is pleased to announce the long awaited promotion of kubeadm to stable GA, and the promotion of kubeadm’s configuration API to `v1beta1`. -In this release the SIG again focused on further improving the user experience on cluster creation and also fixing a number of bugs and other assorted improvements. - -Some notable changes in kubeadm since Kubernetes 1.12: - -- kubeadm’s configuration API is now `v1beta1`. The new configuration format provides improvements in - image repository management, addons configuration, and other areas. We encourage `v1alpha3` users to migrate to this configuration API using `kubeadm config migrate`, as `v1alpha3` will be removed in 1.14. The documentation for `v1beta1` can be found here: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1 -- kubeadm has graduated `kubeadm alpha phase` commands to `kubeadm init phase`. This means that the phases of creating a control-plane node are now tightly integrated as part of the `init` command. Alpha features, not yet ready for GA are still kept under `kubeadm alpha` and we appreciate feedback on them. -- `kubeadm init` and `kubeadm init phase` now have a `--image-repository` flag, improving support for environments with limited access to official kubernetes repository. -- The DynamicKubeletConfig and SelfHosting functionality was moved outside of `kubeadm init` and feature gates and is now exposed under `kubeadm alpha`. -- Kubeadm init phase certs now support the `--csr-only` option, simplifying custom CA creation. -- `kubeadm join --experimental-control-plane` now automatically adds a new etcd member for `local etcd` mode, further simplifying required tasks for HA clusters setup. -- Improvements were made to `kubeadm reset` related to cleaning etcd and notifying the user about the state of iptables. -- kubeadm commands now print warnings if input YAML documents contain unknown or duplicate fields. -- kubeadm now properly recognizes Docker 18.09.0 and newer, but still treats 18.06 as the default supported version. -- kubeadm now automatically sets the `--pod-infra-container-image` flag when starting the kubelet. - -### SIG IBM Cloud - -The IBM Cloud SIG was focused on defining its charter and working towards moving its cloud provider code to an external repository with a goal to have this work done by the end of Kubernetes 1.14 release cycle. In the SIG meetings, we also made sure to share updates on the latest Kubernetes developments in the IBM Cloud like the availability of Kubernetes v1.12.2 in the IBM Cloud Kubernetes Service (IKS). The SIG updates were provided in the Kubernetes community weekly call and at the KubeCon China 2018. - -### SIG Multicluster - -Moving Federation v2 from Alpha towards Beta has been the focus of our effort over the past quarter. To this end we engaged with end users, and successfully enlisted additional contributors from companies including IBM, Amadeus, Cisco and others. Federation v2 provides a suite of decoupled API’s and re-usable components for building multi-cluster control planes. We plan to start releasing Beta components in late 2018. In addition, more minor updates were made to our cluster-registry and multi-cluster ingress sub-projects. - -### SIG Network - -For 1.13, the areas of focus were in IPv6, DNS improvements and some smaller items: -CoreDNS is now the default cluster DNS passing all of the scale/resource usage tests -Node-local DNS cache feature is available in Alpha. This feature deploys a lightweight DNS caching Daemonset that avoids the conntrack and converts queries from UDP to more reliable TCP. -PodReady++ feature now has `kubectl` CLI support. - -Progress was made towards finalizing the IPv6 dual stack support KEP and support for topological routing of services. - -### SIG Node - -SIG Node focused on stability and performance improvements in the 1.13 release. A new alpha feature is introduced to improve the mechanism that nodes heartbeat back to the control plane. The `NodeLease` feature results in the node using a `Lease` resource in the `kube-node-lease` namespace that is renewed periodically. The `NodeStatus` that was used previously to heartbeat back to the control plane is only updated when it changes. This reduces load on the control plane for large clusters. The Kubelet plugin registration mechanism, which enables automatic discovery of external plugins (including CSI and device plugins) has been promoted to stable in this release (introduced as alpha in 1.11 and promoted to beta in 1.12). - -### SIG Openstack - -The major theme for the SIG OpenStack release is the work-in-progress for removing the in-tree provider. This work, being done in conjunction with SIG Cloud Provider, is focusing on moving internal APIs that the OpenStack (and other providers) depends upon to staging to guarantee API stability. This work also included abstracting the in-tree Cinder API and refactoring code to the external Cinder provider to remove additional Cinder volume provider code. - -Additional work was also done to implement an OpenStack driver for the Cluster API effort lead by SIG Cluster Lifecycle. For the external Cloud-Provider-OpenStack code, the SIG largely focused on bug fixes and updates to match K8s 1.13 development. - -### SIG Scalability - -SIG Scalability has mostly focused on stability and deflaking our tests, investing into framework for writing scalability tests (ClusterLoader v2) with a goal to migrate all tests to it by the end of 2018 and on the work towards extending definition of Kubernetes scalability by providing more/better user-friendly SLIs/SLOs. - -### SIG Scheduling - -SIG Scheduling has mostly focused on stability in 1.13 and has postponed some of the major features to the next versions. There are still two notable changes: 1. TaintBasedEviction is moved to Beta and will be enabled by default. With this feature enabled, condition taints are automatically added to the nodes and pods can add tolerations for them if needed. 2. Pod critical annotation is deprecated. Pods should use pod priority instead of the annotation. - -It is worth noting again that kube-scheduler will use apiVersion `kubescheduler.config.k8s.io/v1alpha1` instead of `componentconfig/v1alpha1` in its configuration files in 1.13. - -### SIG Service Catalog - -The Service Plan Defaults feature is still under active development. -We continue to improve the UX for the svcat CLI, specifically filling in gaps for the new Namespaced Service Broker feature. - -### SIG Storage - -Over the last year, SIG Storage has been focused on adding support for the Container Storage Interface (CSI) to Kubernetes. The specification recently moved to 1.0, and on the heels of this achievement, Kubernetes v1.13 moves CSI support for PersistentVolumes to GA. - -With CSI the Kubernetes volume layer becomes truly extensible, allowing third party storage developers to write drivers making their storage systems available in Kubernetes without having to touch the core code. - -CSI was first introduction as alpha in Kubernetes v1.9 and moved to beta in Kubernetes v1.10. - -You can find a list of sample and production drivers in the [CSI Documentation](https://kubernetes.io/docs/concepts/storage/volumes/#csi). - -SIG Storage also moves support for Block Volumes to beta (introduced as alpha in v1.9) and support for Topology Aware Volume Scheduling to stable (introduced as alpha in v1.9 and promoted to beta in 1.10). - -### SIG UI - -The migration to the newest version of Angular is still under active development as it is most important thing on the roadmap at the moment. We are getting closer to to the new release. We continue fixing bugs and adding other improvements. - -### SIG VMWare - -Major focus for SIG VMware for this release is the work on moving internal APIs that the vSphere provider depends upon to staging to guarantee API stability. This work is being done in conjunction with SIG Cloud Provider and includes the creation of a brand new vsphere-csi plugin to replace the current volume functionalities in-tree. - -Additional work was also done to implement a vSphere provider for the Cluster API effort lead by SIG Cluster Lifecycle. For the out-of-tree vSphere cloud provider, the SIG largely focused on bug fixes and updates to match K8s 1.13 development. - -### SIG Windows - -SIG Windows focused on improving reliability for Windows and Kubernetes support - -## New Features - -- kubelet: When node lease feature is enabled, kubelet reports node status to api server only if there is some change or it didn't report over last report interval. ([#69753](https://github.com/kubernetes/kubernetes/pull/69753), [@wangzhen127](https://github.com/wangzhen127)) -- vSphereVolume implements Raw Block Volume Support ([#68761](https://github.com/kubernetes/kubernetes/pull/68761), [@fanzhangio](https://github.com/fanzhangio)) -- CRD supports multi-version Schema, Subresources and AdditionalPrintColumns (NOTE that CRDs created prior to 1.13 populated the top-level additionalPrinterColumns field by default. To apply an updated that changes to per-version additionalPrinterColumns, the top-level additionalPrinterColumns field must be explicitly set to null). ([#70211](https://github.com/kubernetes/kubernetes/pull/70211), [@roycaihw](https://github.com/roycaihw)) -- New addon in addon manager that automatically installs CSI CRDs if CSIDriverRegistry or CSINodeInfo feature gates are true. ([#70193](https://github.com/kubernetes/kubernetes/pull/70193), [@saad-ali](https://github.com/saad-ali)) -- Delegated authorization can now allow unrestricted access for `system:masters` like the main kube-apiserver ([#70671](https://github.com/kubernetes/kubernetes/pull/70671), [@deads2k](https://github.com/deads2k)) -- Added dns capabilities for Windows CNI plugins: ([#67435](https://github.com/kubernetes/kubernetes/pull/67435), [@feiskyer](https://github.com/feiskyer)) -- kube-apiserver: `--audit-webhook-version` and `--audit-log-version` now default to `audit.k8s.io/v1` if unspecified ([#70476](https://github.com/kubernetes/kubernetes/pull/70476), [@charrywanganthony](https://github.com/charrywanganthony)) -- kubeadm: timeoutForControlPlane is introduced as part of the API Server config, that controls the timeout for the wait for control plane to be up. Default value is 4 minutes. ([#70480](https://github.com/kubernetes/kubernetes/pull/70480), [@rosti](https://github.com/rosti)) -- `--api-audiences` now defaults to the `--service-account-issuer` if the issuer is provided but the API audience is not. ([#70308](https://github.com/kubernetes/kubernetes/pull/70308), [@mikedanese](https://github.com/mikedanese)) -- Added support for projected volume in describe function ([#70158](https://github.com/kubernetes/kubernetes/pull/70158), [@WanLinghao](https://github.com/WanLinghao)) -- kubeadm now automatically creates a new stacked etcd member when joining a new control plane node (does not applies to external etcd) ([#69486](https://github.com/kubernetes/kubernetes/pull/69486), [@fabriziopandini](https://github.com/fabriziopandini)) -- Display the usage of ephemeral-storage when using `kubectl describe node` ([#70268](https://github.com/kubernetes/kubernetes/pull/70268), [@Pingan2017](https://github.com/Pingan2017)) -- Added functionality to enable br_netfilter and ip_forward for debian packages to improve kubeadm support for CRI runtime besides Docker. ([#70152](https://github.com/kubernetes/kubernetes/pull/70152), [@ashwanikhemani](https://github.com/ashwanikhemani)) -- Added regions ap-northeast-3 and eu-west-3 to the list of well known AWS regions. ([#70252](https://github.com/kubernetes/kubernetes/pull/70252), [@nckturner](https://github.com/nckturner)) -- kubeadm: Implemented preflight check to ensure that number of CPUs ([#70048](https://github.com/kubernetes/kubernetes/pull/70048), [@bart0sh](https://github.com/bart0sh)) -- CoreDNS is now the default DNS server in kube-up deployments. ([#69883](https://github.com/kubernetes/kubernetes/pull/69883), [@chrisohaver](https://github.com/chrisohaver)) -- Opt out of chowning and chmoding from kubectl cp. ([#69573](https://github.com/kubernetes/kubernetes/pull/69573), [@bjhaid](https://github.com/bjhaid)) -- Failed to provision volume with StorageClass "azurefile-premium": failed to create share andy-mg1121-dynamic-pvc-1a7b2813-d1b7-11e8-9e96-000d3a03e16b in account f7228f99bcde411e8ba4900: failed to create file share, err: storage: service returned error: StatusCode=400, ErrorCode=InvalidHeaderValue, ErrorMessage=The value for one of the HTTP headers is not in the correct format. ([#69718](https://github.com/kubernetes/kubernetes/pull/69718), [@andyzhangx](https://github.com/andyzhangx)) -- `TaintBasedEvictions` feature is promoted to beta. ([#69824](https://github.com/kubernetes/kubernetes/pull/69824), [@Huang-Wei](https://github.com/Huang-Wei)) -- Fixed https://github.com/kubernetes/client-go/issues/478 by adding support for JSON Patch in client-go/dynamic/fake ([#69330](https://github.com/kubernetes/kubernetes/pull/69330), [@vaikas-google](https://github.com/vaikas-google)) -- Dry-run is promoted to Beta and will be enabled by default. ([#69644](https://github.com/kubernetes/kubernetes/pull/69644), [@apelisse](https://github.com/apelisse)) -- `kubectl get priorityclass` now prints value column by default. ([#69431](https://github.com/kubernetes/kubernetes/pull/69431), [@Huang-Wei](https://github.com/Huang-Wei)) -- Added a new container based image for running e2e tests ([#69368](https://github.com/kubernetes/kubernetes/pull/69368), [@dims](https://github.com/dims)) -- The `LC_ALL` and `LC_MESSAGES` env vars can now be used to set desired locale for `kubectl` while keeping `LANG` unchanged. ([#69500](https://github.com/kubernetes/kubernetes/pull/69500), [@m1kola](https://github.com/m1kola)) -- NodeLifecycleController: Now node lease renewal is treated as the heartbeat signal from the node, in addition to NodeStatus Update. ([#69241](https://github.com/kubernetes/kubernetes/pull/69241), [@wangzhen127](https://github.com/wangzhen127)) -- Added dynamic shared informers to write generic, non-generated controllers ([#69308](https://github.com/kubernetes/kubernetes/pull/69308), [@p0lyn0mial](https://github.com/p0lyn0mial)) -- Upgraded to etcd 3.3 client ([#69322](https://github.com/kubernetes/kubernetes/pull/69322), [@jpbetz](https://github.com/jpbetz)) -- It is now possible to use named ports in the `kubectl port-forward` command ([#69477](https://github.com/kubernetes/kubernetes/pull/69477), [@m1kola](https://github.com/m1kola)) -- `kubectl wait` now supports condition value checks other than true using `--for condition=available=false` ([#69295](https://github.com/kubernetes/kubernetes/pull/69295), [@deads2k](https://github.com/deads2k)) -- Updated defaultbackend image to 1.5. Users should concentrate on updating scripts to the new version. ([#69120](https://github.com/kubernetes/kubernetes/pull/69120), [@aledbf](https://github.com/aledbf)) -- Bumped Dashboard version to v1.10.0 ([#68450](https://github.com/kubernetes/kubernetes/pull/68450), [@jeefy](https://github.com/jeefy)) -- Added env variables to control CPU requests of kube-controller-manager and kube-scheduler. ([#68823](https://github.com/kubernetes/kubernetes/pull/68823), [@loburm](https://github.com/loburm)) -- PodSecurityPolicy objects now support a `MayRunAs` rule for `fsGroup` and `supplementalGroups` options. This allows specifying ranges of allowed GIDs for pods/containers without forcing a default GID the way `MustRunAs` does. This means that a container to which such a policy applies to won't use any fsGroup/supplementalGroup GID if not explicitly specified, yet a specified GID must still fall in the GID range according to the policy. ([#65135](https://github.com/kubernetes/kubernetes/pull/65135), [@stlaz](https://github.com/stlaz)) -- Upgrade Stackdriver Logging Agent addon image to 0.6-1.6.0-1 to use Fluentd v1.2. This provides nanoseconds timestamp granularity for logs. ([#70954](https://github.com/kubernetes/kubernetes/pull/70954), [@qingling128](https://github.com/qingling128)) -- When the BoundServiceAccountTokenVolumes Alpha feature is enabled, ServiceAccount volumes now use a projected volume source and their names have the prefix "kube-api-access". ([#69848](https://github.com/kubernetes/kubernetes/pull/69848), [@mikedanese](https://github.com/mikedanese)) -- Raw block volume support is promoted to beta, and enabled by default. This is accessible via the `volumeDevices` container field in pod specs, and the `volumeMode` field in persistent volume and persistent volume claims definitions. ([#71167](https://github.com/kubernetes/kubernetes/pull/71167), [@msau42](https://github.com/msau42)) -- TokenReview now supports audience validation of tokens with audiences other than the kube-apiserver. ([#62692](https://github.com/kubernetes/kubernetes/pull/62692), [@mikedanese](https://github.com/mikedanese)) -- StatefulSet is supported in `kubectl autoscale` command ([#71103](https://github.com/kubernetes/kubernetes/pull/71103), [@Pingan2017](https://github.com/Pingan2017)) -- Kubernetes v1.13 moves support for Container Storage Interface to GA. As part of this move Kubernetes now supports CSI v1.0.0 and deprecates support for CSI 0.3 and older releases. Older CSI drivers must be updated to CSI 1.0 and moved to the new kubelet plugin registration directory in order to work with Kubernetes 1.15+. ([#71020](https://github.com/kubernetes/kubernetes/pull/71020), [@saad-ali](https://github.com/saad-ali)) -- Added option to create CSRs instead of certificates for kubeadm init phase certs and kubeadm alpha certs renew ([#70809](https://github.com/kubernetes/kubernetes/pull/70809), [@liztio](https://github.com/liztio)) -- Added a kubelet socket which serves an grpc service containing the devices used by containers on the node. ([#70508](https://github.com/kubernetes/kubernetes/pull/70508), [@dashpole](https://github.com/dashpole)) -- Added DynamicAuditing feature which allows for the configuration of audit webhooks through the use of an AuditSink API object. ([#67257](https://github.com/kubernetes/kubernetes/pull/67257), [@pbarker](https://github.com/pbarker)) -- The kube-apiserver's healthz now takes in an optional query parameter which allows you to disable health checks from causing healthz failures. ([#70676](https://github.com/kubernetes/kubernetes/pull/70676), [@logicalhan](https://github.com/logicalhan)) -- Introduced support for running a nodelocal dns cache. It is disabled by default, can be enabled by setting KUBE_ENABLE_NODELOCAL_DNS=true ([#70555](https://github.com/kubernetes/kubernetes/pull/70555), [@prameshj](https://github.com/prameshj)) -- Added readiness gates in extended output for pods ([#70775](https://github.com/kubernetes/kubernetes/pull/70775), [@freehan](https://github.com/freehan)) -- Added `Ready` column and improve human-readable output of Deployments and StatefulSets ([#70466](https://github.com/kubernetes/kubernetes/pull/70466), [@Pingan2017](https://github.com/Pingan2017)) -- Added `kubelet_container_log_size_bytes` metric representing the log file size of a container. ([#70749](https://github.com/kubernetes/kubernetes/pull/70749), [@brancz](https://github.com/brancz)) -- NodeLifecycleController: When node lease feature is enabled, node lease will be deleted when the corresponding node is deleted. ([#70034](https://github.com/kubernetes/kubernetes/pull/70034), [@wangzhen127](https://github.com/wangzhen127)) -- GCERegionalPersistentDisk feature is GA now! ([#70716](https://github.com/kubernetes/kubernetes/pull/70716), [@jingxu97](https://github.com/jingxu97)) -- Added secure port 10259 to the kube-scheduler (enabled by default) and deprecate old insecure port 10251. Without further flags self-signed certs are created on startup in memory. ([#69663](https://github.com/kubernetes/kubernetes/pull/69663), [@sttts](https://github.com/sttts)) - -## Release Notes From SIGs - -### SIG API Machinery - -- The OwnerReferencesPermissionEnforcement admission plugin now checks authorization for the correct scope (namespaced or cluster-scoped) of the owner resource type. Previously, it always checked permissions at the same scope as the child resource. ([#70389](https://github.com/kubernetes/kubernetes/pull/70389), [@caesarxuchao](https://github.com/caesarxuchao)) -- OpenAPI spec now correctly marks delete request's body parameter as optional ([#70032](https://github.com/kubernetes/kubernetes/pull/70032), [@iamneha](https://github.com/iamneha)) -- The rules for incrementing `metadata.generation` of custom resources changed: ([#69059](https://github.com/kubernetes/kubernetes/pull/69059), [@caesarxuchao](https://github.com/caesarxuchao)) - - If the custom resource participates the spec/status convention, the metadata.generation of the CR increments when there is any change, except for the changes to the metadata or the changes to the status. - - If the custom resource does not participate the spec/status convention, the metadata.generation of the CR increments when there is any change to the CR, except for changes to the metadata. - - A custom resource is considered to participate the spec/status convention if and only if the "CustomResourceSubresources" feature gate is turned on and the CRD has `.spec.subresources.status={}`. -- Fixed patch/update operations on multi-version custom resources ([#70087](https://github.com/kubernetes/kubernetes/pull/70087), [@liggitt](https://github.com/liggitt)) -- Reduced memory utilization of admission webhook metrics by removing resource related labels. ([#69895](https://github.com/kubernetes/kubernetes/pull/69895), [@jpbetz](https://github.com/jpbetz)) -- Kubelet can now parse PEM file containing both TLS certificate and key in arbitrary order. Previously key was always required to be first. ([#69536](https://github.com/kubernetes/kubernetes/pull/69536), [@awly](https://github.com/awly)) -- Code-gen: Removed lowercasing for project imports ([#68484](https://github.com/kubernetes/kubernetes/pull/68484), [@jsturtevant](https://github.com/jsturtevant)) -- Fixed client cert setup in delegating authentication logic ([#69430](https://github.com/kubernetes/kubernetes/pull/69430), [@DirectXMan12](https://github.com/DirectXMan12)) -- OpenAPI spec and API reference now reflect dryRun query parameter for POST/PUT/PATCH operations ([#69359](https://github.com/kubernetes/kubernetes/pull/69359), [@roycaihw](https://github.com/roycaihw)) -- Fixed the sample-apiserver so that its BanFlunder admission plugin can be used. ([#68417](https://github.com/kubernetes/kubernetes/pull/68417), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) -- APIService availability related to networking glitches are corrected faster ([#68678](https://github.com/kubernetes/kubernetes/pull/68678), [@deads2k](https://github.com/deads2k)) -- Fixed an issue with stuck connections handling error responses ([#71412](https://github.com/kubernetes/kubernetes/pull/71412), [@liggitt](https://github.com/liggitt)) -- apiserver: fixed handling and logging of panics in REST handlers ([#71076](https://github.com/kubernetes/kubernetes/pull/71076), [@liggitt](https://github.com/liggitt)) -- kube-controller-manager no longer removes ownerReferences from ResourceQuota objects ([#70035](https://github.com/kubernetes/kubernetes/pull/70035), [@liggitt](https://github.com/liggitt)) -- "unfinished_work_microseconds" is added to the workqueue metrics; it can be used to detect stuck worker threads. (kube-controller-manager runs many workqueues.) ([#70884](https://github.com/kubernetes/kubernetes/pull/70884), [@lavalamp](https://github.com/lavalamp)) -- Timeouts set in ListOptions for clients are also be respected locally ([#70998](https://github.com/kubernetes/kubernetes/pull/70998), [@deads2k](https://github.com/deads2k)) -- Added support for CRD conversion webhook ([#67006](https://github.com/kubernetes/kubernetes/pull/67006), [@mbohlool](https://github.com/mbohlool)) -- client-go: fixed sending oversized data frames to spdystreams in remotecommand.NewSPDYExecutor ([#70999](https://github.com/kubernetes/kubernetes/pull/70999), [@liggitt](https://github.com/liggitt)) -- Fixed missing flags in `-controller-manager --help`. ([#71298](https://github.com/kubernetes/kubernetes/pull/71298), [@stewart-yu](https://github.com/stewart-yu)) -- Fixed missing flags in `kube-apiserver --help`. ([#70204](https://github.com/kubernetes/kubernetes/pull/70204), [@imjching](https://github.com/imjching)) -- The caBundle and service fields in admission webhook API objects now correctly indicate they are optional ([#70138](https://github.com/kubernetes/kubernetes/pull/70138), [@liggitt](https://github.com/liggitt)) -- Fixed an issue with stuck connections handling error responses ([#71419](https://github.com/kubernetes/kubernetes/pull/71419), [@liggitt](https://github.com/liggitt)) -- kube-controller-manager and cloud-controller-manager now hold generated serving certificates in-memory unless a writeable location is specified with --cert-dir ([#69884](https://github.com/kubernetes/kubernetes/pull/69884), [@liggitt](https://github.com/liggitt)) -- CCM server will not listen insecurely if secure port is specified ([#68982](https://github.com/kubernetes/kubernetes/pull/68982), [@aruneli](https://github.com/aruneli)) -- List operations against the API now return internal server errors instead of partially complete lists when a value cannot be transformed from storage. The updated behavior is consistent with all other operations that require transforming data from storage such as watch and get. ([#69399](https://github.com/kubernetes/kubernetes/pull/69399), [@mikedanese](https://github.com/mikedanese)) - -### SIG Auth - -- API Server can be configured to reject requests that cannot be audit-logged. ([#65763](https://github.com/kubernetes/kubernetes/pull/65763), [@x13n](https://github.com/x13n)) -- Go clients created from a kubeconfig that specifies a TokenFile now periodically reload the token from the specified file. ([#70606](https://github.com/kubernetes/kubernetes/pull/70606), [@mikedanese](https://github.com/mikedanese)) -- When `--rotate-server-certificates` is enabled, kubelet will no longer request a new certificate on startup if the current certificate on disk is satisfactory. ([#69991](https://github.com/kubernetes/kubernetes/pull/69991), [@agunnerson-ibm](https://github.com/agunnerson-ibm)) -- Added dynamic audit configuration api ([#67547](https://github.com/kubernetes/kubernetes/pull/67547), [@pbarker](https://github.com/pbarker)) -- Added ability to control primary GID of containers through Pod Spec and PodSecurityPolicy ([#67802](https://github.com/kubernetes/kubernetes/pull/67802), [@krmayankk](https://github.com/krmayankk)) -- kube-apiserver: the `NodeRestriction` admission plugin now prevents kubelets from modifying `Node` labels prefixed with `node-restriction.kubernetes.io/`. The `node-restriction.kubernetes.io/` label prefix is reserved for cluster administrators to use for labeling `Node` objects to target workloads to nodes in a way that kubelets cannot modify or spoof. ([#68267](https://github.com/kubernetes/kubernetes/pull/68267), [@liggitt](https://github.com/liggitt)) - -### SIG Autoscaling - -- Updated Cluster Autoscaler version to 1.13.0. See the [Release Notes](https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.13.0) for more information. ([#71513](https://github.com/kubernetes/kubernetes/pull/71513), [@losipiuk](https://github.com/losipiuk)) - -### SIG AWS - -- `service.beta.kubernetes.io/aws-load-balancer-internal` now supports true and false values, previously it only supported non-empty strings ([#69436](https://github.com/kubernetes/kubernetes/pull/69436), [@mcrute](https://github.com/mcrute)) -- Added `service.beta.kubernetes.io/aws-load-balancer-security-groups` annotation to set the security groups to the AWS ELB to be the only ones specified in the annotation in case this is present (does not add `0.0.0.0/0`). ([#62774](https://github.com/kubernetes/kubernetes/pull/62774), [@Raffo](https://github.com/Raffo)) - -### SIG Azure - -- Ensured orphan public IPs on Azure deleted when service recreated with the same name. ([#70463](https://github.com/kubernetes/kubernetes/pull/70463), [@feiskyer](https://github.com/feiskyer)) -- Improved Azure instance metadata handling by adding caches. ([#70353](https://github.com/kubernetes/kubernetes/pull/70353), [@feiskyer](https://github.com/feiskyer)) -- Corrected check for non-Azure managed nodes with the Azure cloud provider ([#70135](https://github.com/kubernetes/kubernetes/pull/70135), [@marc-sensenich](https://github.com/marc-sensenich)) -- Fixed azure disk attach/detach failed forever issue ([#71377](https://github.com/kubernetes/kubernetes/pull/71377), [@andyzhangx](https://github.com/andyzhangx)) -- DisksAreAttached --> getNodeDataDisks--> GetDataDisks --> getVirtualMachine --> vmCache.Get ([#71495](https://github.com/kubernetes/kubernetes/pull/71495), [@andyzhangx](https://github.com/andyzhangx)) - -### SIG CLI - -- `kubectl apply` can now change a deployment strategy from rollout to recreate without explicitly clearing the rollout-related fields ([#70436](https://github.com/kubernetes/kubernetes/pull/70436), [@liggitt](https://github.com/liggitt)) -- The `kubectl plugin list` command now displays discovered plugin paths in the same order as they are found in a user's PATH variable. ([#70443](https://github.com/kubernetes/kubernetes/pull/70443), [@juanvallejo](https://github.com/juanvallejo)) -- `kubectl get` no longer exits before printing all of its results if an error is found ([#70311](https://github.com/kubernetes/kubernetes/pull/70311), [@juanvallejo](https://github.com/juanvallejo)) -- Fixed a runtime error occuring when sorting the output of `kubectl get` with empty results ([#70740](https://github.com/kubernetes/kubernetes/pull/70740), [@mfpierre](https://github.com/mfpierre)) -- kubectl: support multiple arguments for cordon/uncordon and drain ([#68655](https://github.com/kubernetes/kubernetes/pull/68655), [@goodluckbot](https://github.com/goodluckbot)) -- Fixed ability for admin/edit/view users to see controller revisions, needed for kubectl rollout commands ([#70699](https://github.com/kubernetes/kubernetes/pull/70699), [@liggitt](https://github.com/liggitt)) -- `kubectl rollout undo` now returns errors when attempting to rollback a deployment to a non-existent revision ([#70039](https://github.com/kubernetes/kubernetes/pull/70039), [@liggitt](https://github.com/liggitt)) -- kubectl run now generates apps/v1 deployments by default ([#71006](https://github.com/kubernetes/kubernetes/pull/71006), [@liggitt](https://github.com/liggitt)) -- The "kubectl cp" command now supports path shortcuts (../) in remote paths. ([#65189](https://github.com/kubernetes/kubernetes/pull/65189), [@juanvallejo](https://github.com/juanvallejo)) -- Fixed dry-run output in kubectl apply --prune ([#69344](https://github.com/kubernetes/kubernetes/pull/69344), [@zegl](https://github.com/zegl)) -- The kubectl wait command must handle when a watch returns an error vs closing by printing out the error and retrying the watch. ([#69389](https://github.com/kubernetes/kubernetes/pull/69389), [@smarterclayton](https://github.com/smarterclayton)) -- kubectl: support multiple arguments for cordon/uncordon and drain ([#68655](https://github.com/kubernetes/kubernetes/pull/68655), [@goodluckbot](https://github.com/goodluckbot)) - -### SIG Cloud Provider - -- Added deprecation warning for all cloud providers ([#69171](https://github.com/kubernetes/kubernetes/pull/69171), [@andrewsykim](https://github.com/andrewsykim)) - -### SIG Cluster Lifecycle - -- kubeadm: Updates version of CoreDNS to 1.2.6 ([#70796](https://github.com/kubernetes/kubernetes/pull/70796), [@detiber](https://github.com/detiber)) -- kubeadm: Validate kubeconfig files in case of external CA mode. ([#70537](https://github.com/kubernetes/kubernetes/pull/70537), [@yagonobre](https://github.com/yagonobre)) -- kubeadm: The writable config file option for extra volumes is renamed to readOnly with a reversed meaning. With readOnly defaulted to false (as in pod specs). ([#70495](https://github.com/kubernetes/kubernetes/pull/70495), [@rosti](https://github.com/rosti)) -- kubeadm: Multiple API server endpoints support upon join is removed as it is now redundant. ([#69812](https://github.com/kubernetes/kubernetes/pull/69812), [@rosti](https://github.com/rosti)) -- `kubeadm reset` now cleans up custom etcd data path ([#70003](https://github.com/kubernetes/kubernetes/pull/70003), [@yagonobre](https://github.com/yagonobre)) -- kubeadm: Fixed unnecessary upgrades caused by undefined order of Volumes and VolumeMounts in manifests ([#70027](https://github.com/kubernetes/kubernetes/pull/70027), [@bart0sh](https://github.com/bart0sh)) -- kubeadm: Fixed node join taints. ([#69846](https://github.com/kubernetes/kubernetes/pull/69846), [@andrewrynhard](https://github.com/andrewrynhard)) -- Fixed cluster autoscaler addon permissions so it can access batch/job. ([#69858](https://github.com/kubernetes/kubernetes/pull/69858), [@losipiuk](https://github.com/losipiuk)) -- kubeadm: JoinConfiguration now houses the discovery options in a nested Discovery structure, which in turn has a couple of other nested structures to house more specific options (BootstrapTokenDiscovery and FileDiscovery) ([#67763](https://github.com/kubernetes/kubernetes/pull/67763), [@rosti](https://github.com/rosti)) -- kubeadm: Fixed a possible scenario where kubeadm can pull much newer control-plane images ([#69301](https://github.com/kubernetes/kubernetes/pull/69301), [@neolit123](https://github.com/neolit123)) -- kubeadm now allows mixing of init/cluster and join configuration in a single YAML file (although a warning gets printed in this case). ([#69426](https://github.com/kubernetes/kubernetes/pull/69426), [@rosti](https://github.com/rosti)) -- kubeadm: Added a `v1beta1` API. ([#69289](https://github.com/kubernetes/kubernetes/pull/69289), [@fabriziopandini](https://github.com/fabriziopandini)) -- kubeadm init correctly uses `--node-name` and `--cri-socket` when `--config` option is also used ([#71323](https://github.com/kubernetes/kubernetes/pull/71323), [@bart0sh](https://github.com/bart0sh)) -- kubeadm: Always pass spec.nodeName as `--hostname-override` for kube-proxy ([#71283](https://github.com/kubernetes/kubernetes/pull/71283), [@Klaven](https://github.com/Klaven)) -- `kubeadm join` correctly uses `--node-name` and `--cri-socket` when `--config` option is also used ([#71270](https://github.com/kubernetes/kubernetes/pull/71270), [@bart0sh](https://github.com/bart0sh)) -- kubeadm now supports the `--image-repository` flag for customizing what registry to pull images from ([#71135](https://github.com/kubernetes/kubernetes/pull/71135), [@luxas](https://github.com/luxas)) -- kubeadm: The writable config file option for extra volumes is renamed to readOnly with a reversed meaning. With readOnly defaulted to false (as in pod specs). ([#70495](https://github.com/kubernetes/kubernetes/pull/70495), [@rosti](https://github.com/rosti)) -- kubeadm: Multiple API server endpoints support upon join is removed as it is now redundant. ([#69812](https://github.com/kubernetes/kubernetes/pull/69812), [@rosti](https://github.com/rosti)) -- kubeadm: JoinConfiguration now houses the discovery options in a nested Discovery structure, which in turn has a couple of other nested structures to house more specific options (BootstrapTokenDiscovery and FileDiscovery) ([#67763](https://github.com/kubernetes/kubernetes/pull/67763), [@rosti](https://github.com/rosti)) -- kubeadm: Added a `v1beta1` API. ([#69289](https://github.com/kubernetes/kubernetes/pull/69289), [@fabriziopandini](https://github.com/fabriziopandini)) -- kubeadm: Use `advertise-client-urls` instead of `listen-client-urls` as and `etcd-servers` options for apiserver. ([#69827](https://github.com/kubernetes/kubernetes/pull/69827), [@tomkukral](https://github.com/tomkukral)) -- Kubeadm now respects the custom image registry configuration across joins and upgrades. Kubeadm passes the custom registry to the kubelet for a custom pause container. ([#70603](https://github.com/kubernetes/kubernetes/pull/70603), [@chuckha](https://github.com/chuckha)) -- `kubeadm reset` now outputs instructions about manual iptables rules cleanup. ([#70874](https://github.com/kubernetes/kubernetes/pull/70874), [@rdodev](https://github.com/rdodev)) -- kubeadm: remove the AuditPolicyConfiguration feature gate ([#70807](https://github.com/kubernetes/kubernetes/pull/70807), [@Klaven](https://github.com/Klaven)) -- kubeadm pre-pulls Etcd image only if external Etcd is not used and ([#70743](https://github.com/kubernetes/kubernetes/pull/70743), [@bart0sh](https://github.com/bart0sh)) -- kubeadm: UnifiedControlPlaneImage is replaced by UseHyperKubeImage boolean value. ([#70793](https://github.com/kubernetes/kubernetes/pull/70793), [@rosti](https://github.com/rosti)) -- For kube-up and derived configurations, CoreDNS will honor master taints, for consistency with kube-dns behavior. ([#70868](https://github.com/kubernetes/kubernetes/pull/70868), [@justinsb](https://github.com/justinsb)) -- Recognize newer docker versions without -ce/-ee suffix: 18.09.0 ([#71001](https://github.com/kubernetes/kubernetes/pull/71001), [@thomas-riccardi](https://github.com/thomas-riccardi)) -- Any external provider should be aware the cloud-provider interface should be imported from :- ([#68310](https://github.com/kubernetes/kubernetes/pull/68310), [@cheftako](https://github.com/cheftako)) -- Fixed 'kubeadm upgrade' infinite loop waiting for pod restart ([#69886](https://github.com/kubernetes/kubernetes/pull/69886), [@bart0sh](https://github.com/bart0sh)) -- Bumped addon-manager to v8.8 ([#69337](https://github.com/kubernetes/kubernetes/pull/69337), [@MrHohn](https://github.com/MrHohn)) -- GCE: Filter out spammy audit logs from cluster autoscaler. ([#70696](https://github.com/kubernetes/kubernetes/pull/70696), [@loburm](https://github.com/loburm)) -- GCE: Enable by default audit logging truncating backend. ([#68288](https://github.com/kubernetes/kubernetes/pull/68288), [@loburm](https://github.com/loburm)) -- Bumped cluster-proportional-autoscaler to 1.3.0 ([#69338](https://github.com/kubernetes/kubernetes/pull/69338), [@MrHohn](https://github.com/MrHohn)) -- Updated defaultbackend to v1.5 ([#69334](https://github.com/kubernetes/kubernetes/pull/69334), [@bowei](https://github.com/bowei)) - -### SIG GCP - -- Added tolerations for Stackdriver Logging and Metadata Agents. ([#69737](https://github.com/kubernetes/kubernetes/pull/69737), [@qingling128](https://github.com/qingling128)) -- Enabled insertId generation, and updated Stackdriver Logging Agent image to 0.5-1.5.36-1-k8s. This help reduce log duplication and guarantee log order. ([#68920](https://github.com/kubernetes/kubernetes/pull/68920), [@qingling128](https://github.com/qingling128)) -- Updated crictl to v1.12.0 ([#69033](https://github.com/kubernetes/kubernetes/pull/69033), [@feiskyer](https://github.com/feiskyer)) - -### SIG Network - -- Corrected family type (inet6) for ipsets in ipv6-only clusters ([#68436](https://github.com/kubernetes/kubernetes/pull/68436), [@uablrek](https://github.com/uablrek)) -- kube-proxy argument `hostname-override` can be used to override hostname defined in the configuration file ([#69340](https://github.com/kubernetes/kubernetes/pull/69340), [@stevesloka](https://github.com/stevesloka)) -- CoreDNS correctly implements DNS spec for Services with externalNames that look like IP addresses. Kube-dns does not follow the spec for the same case, resulting in a behavior change when moving from Kube-dns to CoreDNS. See: [coredns/coredns#2324](https://github.com/coredns/coredns/issues/2324) -- IPVS proxier now set net/ipv4/vs/conn_reuse_mode to 0 by default, which will highly improve IPVS proxier performance. ([#71114](https://github.com/kubernetes/kubernetes/pull/71114), [@Lion-Wei](https://github.com/Lion-Wei)) -- CoreDNS is now version 1.2.6 ([#70799](https://github.com/kubernetes/kubernetes/pull/70799), [@rajansandeep](https://github.com/rajansandeep)) -- Addon configuration is introduced in the kubeadm config API, while feature flag CoreDNS is now deprecated. ([#70024](https://github.com/kubernetes/kubernetes/pull/70024), [@fabriziopandini](https://github.com/fabriziopandini)) - -### SIG Node - -- Fixed a bug in previous releases where a pod could be placed inside another pod's cgroup when specifying --cgroup-root ([#70678](https://github.com/kubernetes/kubernetes/pull/70678), [@dashpole](https://github.com/dashpole)) -- Optimized calculating stats when only CPU and Memory stats are returned from Kubelet stats/summary http endpoint. ([#68841](https://github.com/kubernetes/kubernetes/pull/68841), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -- kubelet now supports `log-file` option to write logs directly to a specific file ([#70917](https://github.com/kubernetes/kubernetes/pull/70917), [@dims](https://github.com/dims)) -- Do not detach volume if mount in progress ([#71145](https://github.com/kubernetes/kubernetes/pull/71145), [@gnufied](https://github.com/gnufied)) -- The runtimeHandler field on the RuntimeClass resource now accepts the empty string. ([#69550](https://github.com/kubernetes/kubernetes/pull/69550), [@tallclair](https://github.com/tallclair)) -- kube-apiserver: fixes `procMount` field incorrectly being marked as required in openapi schema ([#69694](https://github.com/kubernetes/kubernetes/pull/69694), [@jessfraz](https://github.com/jessfraz)) - -### SIG OpenStack - -- Fixed cloud-controller-manager crash when using OpenStack provider and PersistentVolume initializing controller ([#70459](https://github.com/kubernetes/kubernetes/pull/70459), [@mvladev](https://github.com/mvladev)) - -### SIG Release - -- Use debian-base instead of busybox as base image for server images ([#70245](https://github.com/kubernetes/kubernetes/pull/70245), [@ixdy](https://github.com/ixdy)) -- Images for cloud-controller-manager, kube-apiserver, kube-controller-manager, and kube-scheduler now contain a minimal /etc/nsswitch.conf and should respect /etc/hosts for lookups ([#69238](https://github.com/kubernetes/kubernetes/pull/69238), [@BenTheElder](https://github.com/BenTheElder)) - -### SIG Scheduling - -- Added metrics for volume scheduling operations ([#59529](https://github.com/kubernetes/kubernetes/pull/59529), [@wackxu](https://github.com/wackxu)) -- Improved memory use and performance when processing large numbers of pods containing tolerations ([#65350](https://github.com/kubernetes/kubernetes/pull/65350), [@liggitt](https://github.com/liggitt)) -- Fixed a bug in the scheduler that could cause the scheduler to go to an infinite loop when all nodes in a zone are removed. ([#69758](https://github.com/kubernetes/kubernetes/pull/69758), [@bsalamat](https://github.com/bsalamat)) -- Clear pod binding cache on bind error to make sure stale pod binding cache will not be used. ([#71212](https://github.com/kubernetes/kubernetes/pull/71212), [@cofyc](https://github.com/cofyc)) -- Fixed a scheduler panic due to internal cache inconsistency ([#71063](https://github.com/kubernetes/kubernetes/pull/71063), [@Huang-Wei](https://github.com/Huang-Wei)) -- Report kube-scheduler unhealthy if leader election is deadlocked. ([#71085](https://github.com/kubernetes/kubernetes/pull/71085), [@bsalamat](https://github.com/bsalamat)) -- Fixed a potential bug that scheduler preempts unnecessary pods. ([#70898](https://github.com/kubernetes/kubernetes/pull/70898), [@Huang-Wei](https://github.com/Huang-Wei)) - -### SIG Storage - -- Fixed CSI volume limits not showing up in node's capacity and allocatable ([#70540](https://github.com/kubernetes/kubernetes/pull/70540), [@gnufied](https://github.com/gnufied)) -- CSI drivers now have access to mountOptions defined on the storage class when attaching volumes. ([#67898](https://github.com/kubernetes/kubernetes/pull/67898), [@bswartz](https://github.com/bswartz)) -- change default azure file mount permission to 0777 ([#69854](https://github.com/kubernetes/kubernetes/pull/69854), [@andyzhangx](https://github.com/andyzhangx)) -- Fixed subpath in containerized kubelet. ([#69565](https://github.com/kubernetes/kubernetes/pull/69565), [@jsafrane](https://github.com/jsafrane)) -- Fixed panic on iSCSI volume tear down. ([#69140](https://github.com/kubernetes/kubernetes/pull/69140), [@jsafrane](https://github.com/jsafrane)) -- CSIPersistentVolume feature, i.e. PersistentVolumes with CSIPersistentVolumeSource, is GA. ([#69929](https://github.com/kubernetes/kubernetes/pull/69929), [@jsafrane](https://github.com/jsafrane)) -- Fixed CSIDriver API object to allow missing fields. ([#69331](https://github.com/kubernetes/kubernetes/pull/69331), [@jsafrane](https://github.com/jsafrane)) -- Flex volume plugins now support expandvolume (to increase underlying volume capacity) and expanfs (resize filesystem) commands that Flex plugin authors can implement to support expanding in use Flex PersistentVolumes ([#67851](https://github.com/kubernetes/kubernetes/pull/67851), [@aniket-s-kulkarni](https://github.com/aniket-s-kulkarni)) -- Enabled AttachVolumeLimit feature ([#69225](https://github.com/kubernetes/kubernetes/pull/69225), [@gnufied](https://github.com/gnufied)) -- The default storage class annotation for the storage addons has been changed to use the GA variant ([#68345](https://github.com/kubernetes/kubernetes/pull/68345), [@smelchior](https://github.com/smelchior)) -- GlusterFS PersistentVolumes sources can now reference endpoints in any namespace using the `spec.glusterfs.endpointsNamespace` field. Ensure all kubelets are upgraded to 1.13+ before using this capability. ([#60195](https://github.com/kubernetes/kubernetes/pull/60195), [@humblec](https://github.com/humblec)) -- Fixed GetVolumeLimits log flushing issue ([#69558](https://github.com/kubernetes/kubernetes/pull/69558), [@andyzhangx](https://github.com/andyzhangx)) -- The `MountPropagation` feature is unconditionally enabled in v1.13, and can no longer be disabled. ([#68230](https://github.com/kubernetes/kubernetes/pull/68230), [@bertinatto](https://github.com/bertinatto)) - -### SIG Windows - -- `kubelet --system-reserved` and `--kube-reserved` are supported now on Windows nodes ([#69960](https://github.com/kubernetes/kubernetes/pull/69960), [@feiskyer](https://github.com/feiskyer)) -- Windows runtime endpoints is now switched to `npipe:////./pipe/dockershim` from `tcp://localhost:3735`. ([#69516](https://github.com/kubernetes/kubernetes/pull/69516), [@feiskyer](https://github.com/feiskyer)) -- Fixed service issues with named targetPort for Windows ([#70076](https://github.com/kubernetes/kubernetes/pull/70076), [@feiskyer](https://github.com/feiskyer)) -- Handle Windows named pipes in host mounts. ([#69484](https://github.com/kubernetes/kubernetes/pull/69484), [@ddebroy](https://github.com/ddebroy)) -- Fixed inconsistency in windows kernel proxy when updating HNS policy. ([#68923](https://github.com/kubernetes/kubernetes/pull/68923), [@delulu](https://github.com/delulu)) - -## External Dependencies - -- Default etcd server is unchanged at v3.2.24 since Kubernetes 1.12. ([#68318](https://github.com/kubernetes/kubernetes/pull/68318)) -- The list of validated docker versions remain unchanged at 1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06 since Kubernetes 1.12. ([#68495](https://github.com/kubernetes/kubernetes/pull/68495)) -- The default Go version was updated to 1.11.2. ([#70665](https://github.com/kubernetes/kubernetes/pull/70665)) -- The minimum supported Go version was updated to 1.11.2 ([#69386](https://github.com/kubernetes/kubernetes/pull/69386)) -- CNI is unchanged at v0.6.0 since Kubernetes 1.10 ([#51250](https://github.com/kubernetes/kubernetes/pull/51250)) -- CSI is updated to 1.0.0. Pre-1.0.0 API support is now deprecated. ([#71020](https://github.com/kubernetes/kubernetes/pull/71020)]) -- The dashboard add-on has been updated to v1.10.0. ([#68450](https://github.com/kubernetes/kubernetes/pull/68450)) -- Heapster remains at v1.6.0-beta, but is now retired in Kubernetes 1.13 ([#67074](https://github.com/kubernetes/kubernetes/pull/67074)) -- Cluster Autoscaler has been upgraded to v1.13.0 ([#71513](https://github.com/kubernetes/kubernetes/pull/71513)) -- kube-dns is unchanged at v1.14.13 since Kubernetes 1.12 ([#68900](https://github.com/kubernetes/kubernetes/pull/68900)) -- Influxdb is unchanged at v1.3.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -- Grafana is unchanged at v4.4.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -- Kibana has been upgraded to v6.3.2. ([#67582](https://github.com/kubernetes/kubernetes/pull/67582)) -- CAdvisor has been updated to v0.32.0 ([#70964](https://github.com/kubernetes/kubernetes/pull/70964)) -- fluentd-gcp-scaler has been updated to v0.5.0 ([#68837](https://github.com/kubernetes/kubernetes/pull/68837)) -- Fluentd in fluentd-elasticsearch is unchanged at v1.2.4 since Kubernetes 1.11 ([#67434](https://github.com/kubernetes/kubernetes/pull/67434)) -- fluentd-elasticsearch has been updated to v2.2.1 ([#68012](https://github.com/kubernetes/kubernetes/pull/68012)) -- The fluent-plugin-kubernetes_metadata_filter plugin in fluentd-elasticsearch is unchanged at 2.0.0 since Kubernetes 1.12 ([#67544](https://github.com/kubernetes/kubernetes/pull/67544)) -- fluentd-gcp has been updated to v3.2.0 ([#70954](https://github.com/kubernetes/kubernetes/pull/70954)) -- OIDC authentication is unchanged at coreos/go-oidc v2 since Kubernetes 1.10 ([#58544](https://github.com/kubernetes/kubernetes/pull/58544)) -- Calico was updated to v3.3.1 ([#70932](https://github.com/kubernetes/kubernetes/pull/70932)) -- Upgraded crictl on GCE to v1.12.0 ([#69033](https://github.com/kubernetes/kubernetes/pull/69033)) -- CoreDNS has been updated to v1.2.6 ([#70799](https://github.com/kubernetes/kubernetes/pull/70799)) -- event-exporter has been updated to v0.2.3 ([#67691](https://github.com/kubernetes/kubernetes/pull/67691)) -- Es-image remains unchanged at Elasticsearch 6.3.2 since Kubernetes 1.12 ([#67484](https://github.com/kubernetes/kubernetes/pull/67484)) -- metrics-server remains unchanged at v0.3.1 since Kubernetes 1.12 ([#68746](https://github.com/kubernetes/kubernetes/pull/68746)) -- GLBC remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) -- Ingress-gce remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) -- ip-masq-agen remains unchanged at v2.1.1 since Kubernetes 1.12 ([#67916](https://github.com/kubernetes/kubernetes/pull/67916)) - -# v1.13.0-rc.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-rc.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes.tar.gz) | `12fbaf943ae72711cd93c9955719ec1773a229dbb8f86a44fcda179229beb82add4dc1a54ceb50b9f48fde48e2464ed0cd4b2e57d9689a7ae784cb052beb6751` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-src.tar.gz) | `8e94f0fe73909610e85c201bb1ba4f66fd55ca2b4ded77217a4dfad2874d402cc1cc94203ecc195f909126c186701e5e1e62890ad288895493a1759f88a190d0` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-darwin-386.tar.gz) | `ac555f5d1e6b88fa4de1e06e0a1ebd372582f97c526c938334a8c63fbf17545607efbba9975d1767e147113e551e986d6523f6985ea41236cfbf7949df31f016` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-darwin-amd64.tar.gz) | `2eae428a0e4bcb2237343d7ac1e431ccfc1f7037622bb3131ad8d48a3af6f5ed34be899ec1ec32af7eb7d411cb0cda02a2413405479722ab868cdc816726c9df` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-386.tar.gz) | `89e671679b4516f184f7fd5ea0fe2a9ab0245fab34447625786bf55841223124527d3aa2ee6fa2474333f37eea4e9a5ba6f3f4dc3698907fd24bedf522f53b40` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-amd64.tar.gz) | `61f6513722e9c485300b822d6fc5998927bbffa18862d2d3f177a7c7cc0ee56c51ec169e3c8239e352c022094bb02124ed060d7d5c3cec9b67aae20ffd42f387` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-arm.tar.gz) | `ef0e5fd4bf2074dfd3cf54d45307550273695906baca3533a9d23424e7b693d706f6d1d3a09a34e2d1f84d9eddc6b62d96e5190b8c7145919e93f0ae75ec4d06` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-arm64.tar.gz) | `d34bb9ce9bfe2a5375fd58920e63b4eef818348719dba460f35838433af57a1a23fa659e53de52c8174fa212c94c4196ac5a02ce02ef714860488c77563b5821` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-ppc64le.tar.gz) | `4dc4e4a5e166e63360ba86e1278bbe75212ac7c3f60ba30425a1c5654bf5a9b1164543fdc23d7dfd9d3aea7be38544c8dc535459e96c062db631e58c5c628762` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-linux-s390x.tar.gz) | `d27675f4753469cd5e31faed13a1ea9654c25d38b0d96c1340215fd231050ffc66dc40c5103f8377339bacf00f1c99d386fe9c21fc68c5a21c10667f773d9d4b` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-windows-386.tar.gz) | `9d6e6de2d4a55eaeebd7fa6b861548e0768381d50838430722b56636428a3417b8f2bbc953bc365294a857d8f5b51d90807e5eafe874f37d9b726f48b5d04197` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-client-windows-amd64.tar.gz) | `30b2da5c015ef88b9efcf90bffe0498d367df7c126b65f2e878af263c5d62b8c93792dbf20511d0ff034c7a9e2c3fc93931860e1254ed158eddec34f407b9005` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-server-linux-amd64.tar.gz) | `8180f2b788249fe65f7f1d3ee431ac758ede29a6349db312afbee080ff2c24586fc468f11a9cbcb8d22842739974f29e10793778f5fd5c55d10129e97a1efce3` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-server-linux-arm.tar.gz) | `e9165284a0b82a9ab88dad05f43bfe1bebecad3bb1c7118475c3426e0b6f9f91d340e1e6223d81df9337ab4cc9a96708443c025030127acf88437f0c327b750b` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-server-linux-arm64.tar.gz) | `03797c021ebed3b08835e72eed405c57aaacce972bbbbf88bf49310efbf8c7242f2f223d73b5d2ed4c21e5196e6e5fb7b2b811f08607db6dbe98f869bf28bedb` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-server-linux-ppc64le.tar.gz) | `ceb49af22e3b518f3ba27c1e7de28e577e2735175e84a6d203f1f8766eceaa7c0424746ff71498d7847e98f538af5663b16cc306cb0adbb006d5d869766dfb9b` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-server-linux-s390x.tar.gz) | `bee4752e8a52e217ae1ffcfbc263453c724de684b4d463d5ddb24a3a30a67fc8f78e6c0a8154c6b6581d17f1e168903bc18d0e56f02fce5933f673bb4c74a8cf` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-linux-amd64.tar.gz) | `b368989bbb8ab4d29b51d5d4d71d073b0ceb39614c944859dcd14c3303c31475850f7012deaa8d5ba9c17edd728bce536fbd523ae7defc74a30f0878f05497bf` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-linux-arm.tar.gz) | `404b7b74a1e0d0fed9088a7e9461e02cfd9a6992c554baa125b7a361a6baa03d1e4622fbc4ec51836f00a7ac4f90167f345307678527f5781e06acdf526b9a45` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-linux-arm64.tar.gz) | `fa531b1675a778c572a2175fb1bed00e78dc589f638f2096b3b5c9d3d691a5668787a43d69898678abd70c7b949e05cfebfb0783c0144a66bdff61fed6094582` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-linux-ppc64le.tar.gz) | `a7ecc1f63e632c1b4f9b312babd6882ec966420bf4f8346edf80495fcf860d912729072c79d23cc071a07239783409b02c1f4a716a24e2597f2b490c9b3bb5b3` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-linux-s390x.tar.gz) | `a7171ed95de943a0ac5a32da4458e8d4366eb1fadbe426bebc371d2bb6536636b14db9d2cd03952258b3cb1b99fdca2db07947b028cc6c7bb92f4281ba6f62f2` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.2/kubernetes-node-windows-amd64.tar.gz) | `8a3a71d142b99fb200c4c1c9c0fa4dc6a3b64a0b506dc37dc3d832a94a791619a09ae4b2c6f73802f6833234570633974547f7700c8bb6de71d91ba2c4ac4b54` - -## Changelog since v1.13.0-rc.1 - -### Other notable changes - -* Update Cluster Autoscaler version to 1.13.0. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.13.0 ([#71513](https://github.com/kubernetes/kubernetes/pull/71513), [@losipiuk](https://github.com/losipiuk)) -* fix detach azure disk issue due to dirty cache ([#71495](https://github.com/kubernetes/kubernetes/pull/71495), [@andyzhangx](https://github.com/andyzhangx)) - - - -# v1.13.0-rc.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-rc.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes.tar.gz) | `1c047e4edcf3553a568679e6e5083988b06df9d938f299a9193c72ad96a9c439a1f47f98b86f75d94746e8c1ae363b7a3de3c29dbdf7585b5e5e67b95f309d4a` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-src.tar.gz) | `d2fd47c38abd29a2037b9e2a3a958ec250e2c6ae77532f6e935a6422bd626485fd720932b18fe2fdfcc7b17c6014a9da08cd9e6f9272f19f666ec52ffc02b564` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `44d0733359be5036953775e12fc1723e4c64452a24a8c3b522c8a624e0a132cf61483a120cafebe1370939b38ddf1809969dfc0daf0c087ce8a888aa98f2fa6f` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `2acd37ed234271b0ff9c30273261e4b127309a1bc91a006b7a07e1a948703fa550699cd7f44dceb4e7cc6be139f80785853ce4dedb3c3d3f0df85598d0488d56` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-386.tar.gz) | `5fe07ea2f776086df0e9447b7e6b0863c5b3af71f5aff8e302087e242d78613278023a169f211be96feab5109d801c9e4f427a911221d039e4d9cadec3086ebf` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `7541d5850d74156862e5fe00817bd954d2b49b2c0cf15abe5cde34406928b8ca34b6907eea51e79e005156964ea1269102f2663e667ccbb4223ea12edfc97c20` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `122121d3e469b6e33cc3fd910b32a5a94b9d3479f0367c54fbc4e7f13df7b097c061b0624b36c0e59f9a35dda7d021f04d400506e6f40eff657672ee53b91a69` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `5e3d415db4239f27461c4ea404903cfc762084d5c1e84f9ed8bc0325d7fa845ac540a279e3bd67ac80d00fcad4860398166f55f76ba22c1060e0bc1c867b2464` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `8651f4161569913b616695bdd1a41c4b177cbfb4773fbca649b3e97957f6c5f46f4fa84bfa92ba24abc34b90cc9543d3c0707962d28d701ef784c764ef49f407` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `920b81f6bbc7e7d4fa2f9c61fbc6f529621f2f134dbbb0f407866ffd0ec47791484187c609cca3b615034a5393869ae8f156a7bd0001d0ef59f195d8aab7229d` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-windows-386.tar.gz) | `0d49277cb7c36e5538d4c1c0fd6e6a69da7cd73c226f5869b29fad1e5b9bf434ffc8423b72d807df67b6674541a370a5235881bccff1b9f390f175064020453a` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `34ae587e2d439f925d1e324d2bbff3a751bb73b18e98b13c93e5742e7e16c00b4d9956b91721b4e06a00087dc00862248e6de167683a6bd1ccd14b1a6dcef753` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `7030ef7463bef0871e524a5233d23c5f8aee18ac92e96555910ddc7a891772d451dac08b583f391132c654eaaea788f3bf29fb510a2f6f3b24b0ac79ca669f77` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `ccd1f413ad357581a904d1ff67f3e376be7882bd72efb13657f8aa1191c4481691743016a1385b777b5e62fe9854c1695ffa847c3b4534459317d0d5b5baaf76` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `ff589f5b6c56713818edda8ae9b39b17dfbf34e881c09736f722de5d70e6dd1508b5fefc60f40547dfd4fddb32ddce2a4470e1d240b315db5840a0fba957d553` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `f748985751bf403bc7b1f9160ce937cd2915552b27c3c79764a66789dc39ef9e3069e6f25d21e15bfaf81c535e3ee3b195eb636965456467ee56c0167c526129` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `b3b0075948d72784defe94073dff251b79083aa46b4f29419026757665cac554356486948a41b59293904238651a733747a0e271f43a72228c6c83cf8f5634a7` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `01907a104c043607985053571183b7bdccf655f847d1dd9d8991cd2c464ddf9953f25cacb255be3067c1b65f6168fe92a90162636e6c6b6ec33340926d537959` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `dbf1801c456312698253767dd36b186fb4e503a03454cd16bba68a1ede9d29e14939591eb39516129bc8c88e64fba2a287ae6447b7e4ff4afcecd1fb50713403` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `15f3259370f1419fcc372a28faa9a3caae5f2c89ee76286c14ea62d612fdca94ac7358a3cd76877736389080d28ba65237fc0aeffed2050bac4e342877351e51` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `00dc7f5bd40d045baeb72d5dcfb302b8566aacc23cd7de1b877724e1160ee1608b3b121358d2c3b081d06deb1a8107d0437d3d1b20df88e4adcfd5f4a05964ee` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `2b80e4dffa0b8bdc0305d1263c06320918541f3a7b6519123752b89be335a2c48965b7d16d814ffc02e304e9cf932db0c780fc316c99a080bebd880d55e3c939` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `600b442a1665e39621fce03ad07b162e2353cc8bc982cad849dab7e1c2db34bde675ef12a4907a75f2ba82e62ae3126e189b3d69db7fcab71548bf6940351dda` - -## Changelog since v1.13.0-beta.2 - -### Other notable changes - -* CVE-2018-1002105: Fix critical security issue in kube-apiserver upgrade request proxy handler ([#71411](https://github.com/kubernetes/kubernetes/issues/71411), [@liggitt](https://github.com/liggitt)) -* Update Cluster Autoscaler version to 1.13.0-rc.2. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.13.0-rc.2 ([#71452](https://github.com/kubernetes/kubernetes/pull/71452), [@losipiuk](https://github.com/losipiuk)) -* Upgrade Stackdriver Logging Agent addon image to 0.6-1.6.0-1 to use Fluentd v1.2. This provides nanoseconds timestamp granularity for logs. ([#70954](https://github.com/kubernetes/kubernetes/pull/70954), [@qingling128](https://github.com/qingling128)) -* fixes a runtime error occuring when sorting the output of `kubectl get` with empty results ([#70740](https://github.com/kubernetes/kubernetes/pull/70740), [@mfpierre](https://github.com/mfpierre)) -* fix azure disk attach/detach failed forever issue ([#71377](https://github.com/kubernetes/kubernetes/pull/71377), [@andyzhangx](https://github.com/andyzhangx)) -* Do not detach volume if mount in progress ([#71145](https://github.com/kubernetes/kubernetes/pull/71145), [@gnufied](https://github.com/gnufied)) - - - -# v1.13.0-beta.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-beta.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes.tar.gz) | `e8607473e2b3946a3655fa895c2b7dee74818b4c2701047fee5343ab6b2f2aa3d97b19b11c7e7aeaca322a95bf99cbb5a7dafca187922fd40eaf24daaaf3bc8d` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-src.tar.gz) | `6ca15ad729a82b41587e1dbbd4e9ad5447e202e8e7ee8c01c411090031ee3feb83f0cc65e211e8634a01e7c52d5f1f7b47cd2ac601708542227853f312401e8f` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `5727218280ea7c68350aa5cf04e3d3c346f97d462e3f60f5196e27358f71841e19523b277a5b8fe9cea4b8fa323c54a820ae1956937922bcb24524612435e699` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `3e3975a41da08135dc654a40acb86ce862b1f56a9361e0c38c9c99c5b5bcad970f2271ae9a17e03c3d6e13ed03176e5e80313b39a8a02680a3b6d806e33f3a1b` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-386.tar.gz) | `26cfa99fbe09b20ebe3d2aebb4d08f0f9f2661d5533b94daf6c8354701b1e4ddb8981c10323073c0d06e52eeb0f68839726b684e4e2222b1be7b940ff6017c72` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `42204953b02af81bb5f695c957aca9fa382609447ada5e3a9701da3e8bbd54923084e0b28dd5be455f39ec0dd5c4bf4e81704542d1ce64d7292c17f0a9b04a32` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `c680c94699b0b319b654a4c1c0a9b7fc387c44fb22744f30049142b17c3fabd3ba5358904cf8d5ccb077d0fb96d0360d222616980a13f91fc4a64ba2afce35b8` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `aa997b3428979ba2652fd251c4c5ece87043472ebe2ee15d8a179e69ddbefd47e8030e9392c4f6659b8207fcfb45b2effb69d9736af7c6c82f4217c5e3ac89e1` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `684dfc462d84d3902e322535997e57f7874003ab17c41508c057bc7c6220062cf57d0486086d28940d9b4c0e8b5ebead5d4a64ad6e23895ecd2f8841844a8527` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `ff98b3a23dfe436a12843eb388be9568cbc29c9328648a1d166518aac40841bd8d855916918259cd92a0cc465e376ab1cb4c7b2b92c1eee454a76495772dc7e1` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-windows-386.tar.gz) | `6897a0f59fb409526dae9c86680702f3d2a1dc68d145504ed2e98b05d8f1dcc9b6a977c1af17277775b64501c86d5392e2f052aded8aec0c0640d6e78f609b87` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `6ed67eecb2b79ace8d428cbd4d07ef7d52ba4e5b3b44eb59d46aff99a7a862f158573b4c2678cbdd31ba060a0acd695fa2d8a29ad0c4e22516622c23d017c5cb` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `351292b217c1c49b5c0241da11b4be0929a5d1645bec7dd05051930df8a70090b130d3ceef2482657db16dd6e4f71013075bcd727e741b497143bc6db67c134a` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `88f166a7b5a3f9d9c19a5b911adb6e8e4cac1a3323b83d681f13aaf7bb285b0d016b147b4168c886efeccb3d9052c7512c1f61f7a0f59e2ba324e2827f802712` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `fb4868a939eca18de17e0b606d1ab127712e277e01c02ffa96138a53973cd583bfc28cf9c2967906896740665fdb02ed53f01ef4341cad9718a8770779d99431` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `47a4e8e96c1e8a8cc37eabd19194b9d174fa93c3feaf1384895f89c5c6836511eb9f4ff3c91dd84c05398b7d0ce2d49fd5b43ddb518b7b9ed706f224a48b18fa` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `4e0823d1da55a71f001fcb07511a7b3416641ea93bfbd56b1e1e435c0a78bafbcecc873ba43808985b66b01464cbf9b60e9ad057ec78fea5080de8a5f7684bab` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `e21964063b80f52e387cd35826f3081ad0a3b62608d182e008b8b76f572442905e4b0625839d3ff28a353f1d686f8dbd15104e6b27126e3c6a579704b2106154` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `cb665911af59a1cf86e5d66a4cdc134dc412e9e479dd89fa0bbbaeb8324eb87d090ffb0985e31bb12b5e063bfe8c045ac797931cfb856287b05f63b53b26a524` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `c172126829aea38e2238af6b62035abad6ed08d041175b0bf99792b7c608a0b27dd7f80b5ad301843cbdfee7ed2825aee9ea52d69752759a79e1148529ad1999` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `0367940078ea9b4d46778b8406840fd2925f612304b5fa5b675fc07d5457bea524ebaf0378691af27f97d0c0fe39fffc6ad75f6db10139f377e52d0d3888252a` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `74382ed862ae099b91ce6056b85b7ee4f075fbdb4e737a8448c92e20fe3a0717047a138c23e13b0a8bda3e457f4299f412ca31768e8c87e57c9faf95b7f9adda` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `9164c4eae920c727965caae046e1b2daabf4822e2dee2260697b22e5208a0d8c6e7ce152a5df7852e8203d4771e6dc6bf9f63159324facb1ab81ea8f212b55fb` - -## Changelog since v1.13.0-beta.1 - -### Other notable changes - -* Fix missing flags in kube-apiserver --help. ([#70204](https://github.com/kubernetes/kubernetes/pull/70204), [@imjching](https://github.com/imjching)) -* kubeadm init correctly uses --node-name and --cri-socket when --config option is also used ([#71323](https://github.com/kubernetes/kubernetes/pull/71323), [@bart0sh](https://github.com/bart0sh)) -* API server flag `--experimental-encryption-provider-config` was renamed to `--encryption-provider-config`. The old flag is accepted with a warning but will be removed in 1.14. ([#71206](https://github.com/kubernetes/kubernetes/pull/71206), [@stlaz](https://github.com/stlaz)) -* Fix missing flags in *-controller-manager --help. ([#71298](https://github.com/kubernetes/kubernetes/pull/71298), [@stewart-yu](https://github.com/stewart-yu)) -* Clear pod binding cache on bind error to make sure stale pod binding cache will not be used. ([#71212](https://github.com/kubernetes/kubernetes/pull/71212), [@cofyc](https://github.com/cofyc)) -* kubeadm: always pass spec.nodeName as --hostname-override for kube-proxy ([#71283](https://github.com/kubernetes/kubernetes/pull/71283), [@Klaven](https://github.com/Klaven)) -* kubeadm join correctly uses --node-name and --cri-socket when --config option is also used ([#71270](https://github.com/kubernetes/kubernetes/pull/71270), [@bart0sh](https://github.com/bart0sh)) -* apiserver can be configured to reject requests that cannot be audit-logged. ([#65763](https://github.com/kubernetes/kubernetes/pull/65763), [@x13n](https://github.com/x13n)) -* Kubelet Device Plugin Registration directory changed from from `{kubelet_root_dir}/plugins/` to `{kubelet_root_dir}/plugins_registry/`. Any drivers (CSI or device plugin) that were using the old path must be updated to work with this version. ([#70494](https://github.com/kubernetes/kubernetes/pull/70494), [@RenaudWasTaken](https://github.com/RenaudWasTaken)) -* When the BoundServiceAccountTokenVolumes Alpha feature is enabled, ServiceAccount volumes now use a projected volume source and their names have the prefix "kube-api-access". ([#69848](https://github.com/kubernetes/kubernetes/pull/69848), [@mikedanese](https://github.com/mikedanese)) - - - -# v1.13.0-beta.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-beta.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes.tar.gz) | `78245b2357a5eeafd193d28f86655327edce7bbc4da142c826eba5f5c05a624cd30b2551f63da37f38e9ca3fcf6990d77a3a068cbfc9075ff19fcdb235db9acb` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-src.tar.gz) | `880c5a8b16215bc58b307922474703048020b38be1d41672425cd07bdcf0626a88f04a080eac13ebb63c42214454420063289ba147d0a6cdf8dc3fe942382964` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `0f804c77ef6122b4b6586a507179fe0f1a383752342b3e5575e09223fdda9731acd89631ad236969e19ba1016adb28cfdb62f5b7a2b594bd68c780a5066cf370` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `0bdbd8003bcbecb4494b4778411e7d057067e78a99a7e8e8e45a3982cbe476dab822bccdeb73b989dfc5222ab8a09554f25dfb1f3d48622a1db3a45088799e49` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-386.tar.gz) | `522795df77ff8543251232863cb36fe2d501671e04a5279a112aa3ffa784de93f3f567af50fffa5367fd27793e595b3e6b8c66b0cfbc99ecadbfbb279fe9e9c1` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `b6481bae237e6971f7b9cc039d3b7e62d49ddd48d52dd979432fa0318a8e3e5bf1677298ffee5c3d9af07e32c50eb94948509218302f8ba966abcc27e391b282` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `45b8fa2557bb742a8ce16e0a69fa64fe898509418c6f9099a24bf1ab20c7d5de61f2e79f2de46c660c53eec78c45d5606a5ae5144f1f47dca54d71d353566596` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `475b823a5e2c4c6e1bc49f35fbef45d1fc6e6279f5335762bad05d0f695fd033a3a81bd90ea854d8ee2c9b41f12b22f10606a2c058ea178f0b07ddb418a69499` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `bc289b249051e9918f8f842bb98bf4d0b8951709fe5b65c2185f04b78213ec0099973f3459ffb062342a0a01739f3919758bb2724566c5e24cb30546af68fad8` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `0935e0ad23a61d570de087e72f22bc3da2a34c19bb5aea0ab342f91655b4a02ba781448c35b837e0174fcd1b5d9cfb5550a1b9271c10f67a93975088df737337` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-windows-386.tar.gz) | `4833425ff040983b841722a00edd2cfa56f85099658ae04890c4e2262931e3c74d7276f3e95a74fbdd6934f32bca41297e72209ffaa1c6192bc9b6866d78582e` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `156a5328834055f7b9732c762cc917cfdbf2d2fc67dd80ba89ae7dcb9c2e7d271fc4fe2b2074f98fc308f2282138b10c86becaf6ed235de0d0d3e66a6d419c5a` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `9435be5cced10252954be579408e2a253eb51dd7b649417f1e91679bce33f6ff735f1c24687994a133155b19453fbcfff4555938134001961ece419b746ecefe` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `8dc3d4a0c09830831efd77fdf193ed9ccc1247bd981b4811192cac38cf5ffd04042575632d4259af933959e6e774b10ac2f9e3a79903629f36dad616dd99b5d5` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `f2549f87f21ea44c5d776a706c59bb2ea61d7f2cca304850aa6ad5b09c4486b16ae1be19ab9f9166a2f9f9d2ffbef6d38676c54104d424a855ce445ca6252607` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `0c0671eaf7cf7262c95411930311bb4610f89583431738149f0ee7f8f6a55b094322fc6717db1cdd496944c66216305ac4a5e3ea782ab1c2817e23a4bc32ff9f` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `ff24909b0b044924d241d6aeac9e9b4f0696c0ca7e973d56a874b02b613a45d00c30c5709326d3ad02f0e30742c1aa412e40a061e4c38631c1a538801273e565` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `235b1c4348b5779ca71a5f63121ff6a162db02bb24b4d815ec73412afedbe0ce5f969a40569e709017fbaf8f51e952d6fbe740ab3daf5d6fc932d8fac3f74c07` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `cd23813419a74983bdd3a3104e20684e947ef7302dcfa1802132439b21e7621ad129621c633094e74a50c2ef57a83685f425b345898e7f501f7b0b639d8ba215` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `fb6283dae828f8d9275a05c6a4ea27bc1136e8e8253b5ddac52c8254813b11e8e4373038bf145a51d9680bb14dc276f8c7852e87d553cead5811550bf21eab5a` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `f910922d422b65f6b6a8d7762a23048991695496c0fc07c3dc4f1a81e32d250d592851a2f5b19588f7ed65281495d4187e8ab61cb4711102f2d0c8766267bf5b` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `d895fed57caf038afe0087ff44d2adfdd8955d18135adad9935952702e9abf2bc07289e1a7545b30f4d9f7ab154c642b4c08d74070c66f5c917196cbb37b9692` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `4bc09e54935d2cb4d2bad7db06831d040cc03906d8934575932ed6eab5f0bc9ab67cdb2720c919c89d8b29388bb61f228c10167c9bc9eec46bbdc10c6381500e` - -## Changelog since v1.13.0-alpha.3 - -### Action Required - -* ACTION REQUIRED: The Node.Status.Volumes.Attached.DevicePath fields is deprecated for CSI volumes and will be unset in a future release ([#71095](https://github.com/kubernetes/kubernetes/pull/71095), [@msau42](https://github.com/msau42)) - -### Other notable changes - -* Raw block volume support is promoted to beta, and enabled by default. This is accessible via the `volumeDevices` container field in pod specs, and the `volumeMode` field in persistent volume and persistent volume claims definitions. ([#71167](https://github.com/kubernetes/kubernetes/pull/71167), [@msau42](https://github.com/msau42)) -* Fix a scheduler panic due to internal cache inconsistency ([#71063](https://github.com/kubernetes/kubernetes/pull/71063), [@Huang-Wei](https://github.com/Huang-Wei)) -* Fix a potential bug that scheduler preempts unnecessary pods. ([#70898](https://github.com/kubernetes/kubernetes/pull/70898), [@Huang-Wei](https://github.com/Huang-Wei)) -* The API server encryption configuration file format has graduated to stable and moved to `apiVersion: apiserver.config.k8s.io/v1` and `kind: EncryptionConfiguration`. ([#67383](https://github.com/kubernetes/kubernetes/pull/67383), [@stlaz](https://github.com/stlaz)) -* kubelet now supports `log-file` option to write logs directly to a specific file ([#70917](https://github.com/kubernetes/kubernetes/pull/70917), [@dims](https://github.com/dims)) -* kubeadm now supports the `--image-repository` flag for customizing what registry to pull images from ([#71135](https://github.com/kubernetes/kubernetes/pull/71135), [@luxas](https://github.com/luxas)) -* timeouts set in ListOptions for clients will also be respected locally ([#70998](https://github.com/kubernetes/kubernetes/pull/70998), [@deads2k](https://github.com/deads2k)) -* IPVS proxier now set net/ipv4/vs/conn_reuse_mode to 0 by default, which will highly improve IPVS proxier performance. ([#71114](https://github.com/kubernetes/kubernetes/pull/71114), [@Lion-Wei](https://github.com/Lion-Wei)) -* StatefulSet is supported in `kubectl autoscale` command ([#71103](https://github.com/kubernetes/kubernetes/pull/71103), [@Pingan2017](https://github.com/Pingan2017)) -* Report kube-scheduler unhealthy if leader election is deadlocked. ([#71085](https://github.com/kubernetes/kubernetes/pull/71085), [@bsalamat](https://github.com/bsalamat)) -* apiserver: fixes handling and logging of panics in REST handlers ([#71076](https://github.com/kubernetes/kubernetes/pull/71076), [@liggitt](https://github.com/liggitt)) -* kubelets are no longer allowed to delete their own Node API object. Prior to 1.11, in rare circumstances related to cloudprovider node ID changes, kubelets would attempt to delete/recreate their Node object at startup. Kubelets older than 1.11 are not supported running against a v1.13+ API server. If an unsupported legacy kubelet encounters this situation, a cluster admin can remove the Node object: ([#71021](https://github.com/kubernetes/kubernetes/pull/71021), [@liggitt](https://github.com/liggitt)) - * `kubectl delete node/` - * or grant self-deletion permission explicitly: - * `kubectl create clusterrole self-deleting-nodes --verb=delete --resource=nodes` - * `kubectl create clusterrolebinding self-deleting-nodes --clusterrole=self-deleting-nodes --group=system:nodes` -* Kubernetes v1.13 moves support for Container Storage Interface to GA. As part of this move Kubernetes now supports CSI v1.0.0 and drops support for CSI 0.3 and older releases. Older CSI drivers must be updated to CSI 1.0 in order to work with Kubernetes 1.13+. ([#71020](https://github.com/kubernetes/kubernetes/pull/71020), [@saad-ali](https://github.com/saad-ali)) -* Remove deprecated kubectl command aliases 'run-container' ([#70728](https://github.com/kubernetes/kubernetes/pull/70728), [@Pingan2017](https://github.com/Pingan2017)) -* kubeadm: enable strict unmarshaling of YAML configuration files and show warnings for unknown and duplicate fields. ([#70901](https://github.com/kubernetes/kubernetes/pull/70901), [@neolit123](https://github.com/neolit123)) -* For kube-up and derived configurations, CoreDNS will honor master taints, for consistency with kube-dns behavior. ([#70868](https://github.com/kubernetes/kubernetes/pull/70868), [@justinsb](https://github.com/justinsb)) -* CoreDNS is now version 1.2.6 ([#70799](https://github.com/kubernetes/kubernetes/pull/70799), [@rajansandeep](https://github.com/rajansandeep)) -* kubeadm: Use `advertise-client-urls` instead of `listen-client-urls` as and `etcd-servers` options for apiserver. ([#69827](https://github.com/kubernetes/kubernetes/pull/69827), [@tomkukral](https://github.com/tomkukral)) -* Add option to create CSRs instead of certificates for kubeadm init phase certs and kubeadm alpha certs renew ([#70809](https://github.com/kubernetes/kubernetes/pull/70809), [@liztio](https://github.com/liztio)) -* Add a kubelet socket which serves an grpc service containing the devices used by containers on the node. ([#70508](https://github.com/kubernetes/kubernetes/pull/70508), [@dashpole](https://github.com/dashpole)) -* kube-apiserver: the `NodeRestriction` admission plugin now prevents kubelets from modifying `Node` labels prefixed with `node-restriction.kubernetes.io/`. The `node-restriction.kubernetes.io/` label prefix is reserved for cluster administrators to use for labeling `Node` objects to target workloads to nodes in a way that kubelets cannot modify or spoof. ([#68267](https://github.com/kubernetes/kubernetes/pull/68267), [@liggitt](https://github.com/liggitt)) - * kubelet: it is now deprecated to use the `--node-labels` flag to set `kubernetes.io/` and `k8s.io/`-prefixed labels other than the following labels: - * `kubernetes.io/hostname` - * `kubernetes.io/instance-type` - * `kubernetes.io/os` - * `kubernetes.io/arch` - * `beta.kubernetes.io/instance-type` - * `beta.kubernetes.io/os` - * `beta.kubernetes.io/arch` - * `failure-domain.kubernetes.io/zone` - * `failure-domain.kubernetes.io/region` - * `failure-domain.beta.kubernetes.io/zone` - * `failure-domain.beta.kubernetes.io/region` - * `[*.]kubelet.kubernetes.io/*` - * `[*.]node.kubernetes.io/*` - * Setting other `kubernetes.io/`- and `k8s.io/`-prefixed labels using the `--node-labels` flag will produce a warning in v1.13, and be disallowed in v1.15. Setting labels that are not prefixed with `kubernetes.io/` or `k8s.io/` is still permitted. -* Adds DynamicAuditing feature which allows for the configuration of audit webhooks through the use of an AuditSink API object. ([#67257](https://github.com/kubernetes/kubernetes/pull/67257), [@pbarker](https://github.com/pbarker)) -* The Kubelet plugin registration mechanism used by device plugins and CSI plugins is now GA ([#70559](https://github.com/kubernetes/kubernetes/pull/70559), [@vladimirvivien](https://github.com/vladimirvivien)) -* CSIPersistentVolume feature, i.e. PersistentVolumes with CSIPersistentVolumeSource, is GA. ([#69929](https://github.com/kubernetes/kubernetes/pull/69929), [@jsafrane](https://github.com/jsafrane)) - * CSIPersistentVolume feature gate is now deprecated and will be removed according to deprecation policy. -* kubectl: support multiple arguments for cordon/uncordon and drain ([#68655](https://github.com/kubernetes/kubernetes/pull/68655), [@goodluckbot](https://github.com/goodluckbot)) -* The kube-apiserver's healthz now takes in an optional query parameter which allows you to disable health checks from causing healthz failures. ([#70676](https://github.com/kubernetes/kubernetes/pull/70676), [@logicalhan](https://github.com/logicalhan)) -* client-go: fixes sending oversized data frames to spdystreams in remotecommand.NewSPDYExecutor ([#70999](https://github.com/kubernetes/kubernetes/pull/70999), [@liggitt](https://github.com/liggitt)) -* kube-controller-manager no longer removes ownerReferences from ResourceQuota objects ([#70035](https://github.com/kubernetes/kubernetes/pull/70035), [@liggitt](https://github.com/liggitt)) -* Introduces support for running a nodelocal dns cache. It is disabled by default, can be enabled by setting KUBE_ENABLE_NODELOCAL_DNS=true ([#70555](https://github.com/kubernetes/kubernetes/pull/70555), [@prameshj](https://github.com/prameshj)) - * An ip address is required for the cache instance to listen for requests on, default is a link local ip address of value 169.254.20.10 -* Fix dry-run output in kubectl apply --prune ([#69344](https://github.com/kubernetes/kubernetes/pull/69344), [@zegl](https://github.com/zegl)) -* kubectl run now generates apps/v1 deployments by default ([#71006](https://github.com/kubernetes/kubernetes/pull/71006), [@liggitt](https://github.com/liggitt)) -* `kubeadm reset` now outputs instructions about manual iptables rules cleanup. ([#70874](https://github.com/kubernetes/kubernetes/pull/70874), [@rdodev](https://github.com/rdodev)) -* Recognize newer docker versions without -ce/-ee suffix: 18.09.0 ([#71001](https://github.com/kubernetes/kubernetes/pull/71001), [@thomas-riccardi](https://github.com/thomas-riccardi)) -* "unfinished_work_microseconds" is added to the workqueue metrics; it can be used to detect stuck worker threads. (kube-controller-manager runs many workqueues.) ([#70884](https://github.com/kubernetes/kubernetes/pull/70884), [@lavalamp](https://github.com/lavalamp)) -* add readiness gates in extended output for pods ([#70775](https://github.com/kubernetes/kubernetes/pull/70775), [@freehan](https://github.com/freehan)) -* add `Ready` column and improve human-readable output of Deployments and StatefulSets ([#70466](https://github.com/kubernetes/kubernetes/pull/70466), [@Pingan2017](https://github.com/Pingan2017)) -* Kubeadm now respects the custom image registry configuration across joins and upgrades. Kubeadm passes the custom registry to the kubelet for a custom pause container. ([#70603](https://github.com/kubernetes/kubernetes/pull/70603), [@chuckha](https://github.com/chuckha)) -* kubeadm: deprecate the DynamicKubeletConfig feature gate. The functionality is still accessible by using the kubeadm alpha kubelet enable-dynamic command. ([#70849](https://github.com/kubernetes/kubernetes/pull/70849), [@yagonobre](https://github.com/yagonobre)) -* Add `kubelet_container_log_size_bytes` metric representing the log file size of a container. ([#70749](https://github.com/kubernetes/kubernetes/pull/70749), [@brancz](https://github.com/brancz)) -* kubeadm: remove the AuditPolicyConfiguration feature gate ([#70807](https://github.com/kubernetes/kubernetes/pull/70807), [@Klaven](https://github.com/Klaven)) -* Kubeadm: attributes for join --control-plane workflow are now grouped into a dedicated JoinControlPlane struct ([#70870](https://github.com/kubernetes/kubernetes/pull/70870), [@fabriziopandini](https://github.com/fabriziopandini)) -* Addon configuration is introduced in the kubeadm config API, while feature flag CoreDNS is now deprecated. ([#70024](https://github.com/kubernetes/kubernetes/pull/70024), [@fabriziopandini](https://github.com/fabriziopandini)) -* Fixes ability for admin/edit/view users to see controller revisions, needed for kubectl rollout commands ([#70699](https://github.com/kubernetes/kubernetes/pull/70699), [@liggitt](https://github.com/liggitt)) -* kubeadm pre-pulls Etcd image only if external Etcd is not used and ([#70743](https://github.com/kubernetes/kubernetes/pull/70743), [@bart0sh](https://github.com/bart0sh)) - * --etcd-upgrade=false is not specified -* Add support for CRD conversion webhook ([#67006](https://github.com/kubernetes/kubernetes/pull/67006), [@mbohlool](https://github.com/mbohlool)) -* Delete node lease if the corresponding node is deleted ([#70034](https://github.com/kubernetes/kubernetes/pull/70034), [@wangzhen127](https://github.com/wangzhen127)) -* In a future release the kubectl convert command will be deprecated. ([#70820](https://github.com/kubernetes/kubernetes/pull/70820), [@seans3](https://github.com/seans3)) -* kubeadm: UnifiedControlPlaneImage is replaced by UseHyperKubeImage boolean value. ([#70793](https://github.com/kubernetes/kubernetes/pull/70793), [@rosti](https://github.com/rosti)) -* kubeadm v1beta1 API: InitConfiguration.APIEndpoint has been renamed to .LocalAPIEndpoint ([#70761](https://github.com/kubernetes/kubernetes/pull/70761), [@luxas](https://github.com/luxas)) -* Breaking change: CSINodeInfo split into Spec and Status. New fields Available and VolumePluginMechanism added to CSINodeInfo csi-api object. CSIDriverInfo no longer deleted on Driver uninstallation, instead Available flag is set to false. ([#70515](https://github.com/kubernetes/kubernetes/pull/70515), [@davidz627](https://github.com/davidz627)) -* GCERegionalPersistentDisk feature is GA now! ([#70716](https://github.com/kubernetes/kubernetes/pull/70716), [@jingxu97](https://github.com/jingxu97)) -* Add secure port 10259 to the kube-scheduler (enabled by default) and deprecate old insecure port 10251. Without further flags self-signed certs are created on startup in memory. ([#69663](https://github.com/kubernetes/kubernetes/pull/69663), [@sttts](https://github.com/sttts)) -* `--feature-gates` argument has been removed from the `kubeadm join` command. Feature gates will be retrieved from the cluster configuration during the join process. ([#70755](https://github.com/kubernetes/kubernetes/pull/70755), [@ereslibre](https://github.com/ereslibre)) -* [kubeadm] Updates version of CoreDNS to 1.2.6 ([#70796](https://github.com/kubernetes/kubernetes/pull/70796), [@detiber](https://github.com/detiber)) -* kubelet: When node lease feature is enabled, kubelet reports node status to api server only if there is some change or it didn't report over last report interval. ([#69753](https://github.com/kubernetes/kubernetes/pull/69753), [@wangzhen127](https://github.com/wangzhen127)) -* Self hosted is no longer supported in the standard workflow. The feature flags have been removed and your self hosted cluster is no longer able to upgrade via kubeadm. ([#69878](https://github.com/kubernetes/kubernetes/pull/69878), [@Klaven](https://github.com/Klaven)) -* vSphereVolume implements Raw Block Volume Support ([#68761](https://github.com/kubernetes/kubernetes/pull/68761), [@fanzhangio](https://github.com/fanzhangio)) -* [GCE] Filter out spammy audit logs from cluster autoscaler. ([#70696](https://github.com/kubernetes/kubernetes/pull/70696), [@loburm](https://github.com/loburm)) -* CRD supports multi-version Schema, Subresources and AdditionalPrintColumns (NOTE that CRDs created prior to 1.13 populated the top-level additionalPrinterColumns field by default. To apply an update that changes to per-version additionalPrinterColumns, the top-level additionalPrinterColumns field must be explicitly set to null). ([#70211](https://github.com/kubernetes/kubernetes/pull/70211), [@roycaihw](https://github.com/roycaihw)) -* Fixes a bug in previous releases where a pod could be placed inside another pod's cgroup when specifying --cgroup-root ([#70678](https://github.com/kubernetes/kubernetes/pull/70678), [@dashpole](https://github.com/dashpole)) -* Upgrade golang.org/x/net image to release-branch.go1.10 ([#70663](https://github.com/kubernetes/kubernetes/pull/70663), [@wenjiaswe](https://github.com/wenjiaswe)) -* New addon in addon manager that automatically installs CSI CRDs if CSIDriverRegistry or CSINodeInfo feature gates are true. ([#70193](https://github.com/kubernetes/kubernetes/pull/70193), [@saad-ali](https://github.com/saad-ali)) -* delegated authorization can now allow unrestricted access for `system:masters` like the main kube-apiserver ([#70671](https://github.com/kubernetes/kubernetes/pull/70671), [@deads2k](https://github.com/deads2k)) -* Update to use go1.11.2 ([#70665](https://github.com/kubernetes/kubernetes/pull/70665), [@cblecker](https://github.com/cblecker)) -* Add dns capabilities for Windows CNI plugins: ([#67435](https://github.com/kubernetes/kubernetes/pull/67435), [@feiskyer](https://github.com/feiskyer)) - * "dns" { - * "servers": ["10.0.0.10"], - * "searches": ["default.svc.cluster.local","svc.cluster.local","cluster.local"], - * "options": [] - * } -* The VolumeScheduling feature is GA. The VolumeScheduling feature gate is deprecated and will be removed in a future release. ([#70673](https://github.com/kubernetes/kubernetes/pull/70673), [@msau42](https://github.com/msau42)) -* Go clients created from a kubeconfig that specifies a TokenFile now periodically reload the token from the specified file. ([#70606](https://github.com/kubernetes/kubernetes/pull/70606), [@mikedanese](https://github.com/mikedanese)) -* kubeadm: validate kubeconfig files in case of external CA mode. ([#70537](https://github.com/kubernetes/kubernetes/pull/70537), [@yagonobre](https://github.com/yagonobre)) -* kube-apiserver: `--audit-webhook-version` and `--audit-log-version` now default to `audit.k8s.io/v1` if unspecified ([#70476](https://github.com/kubernetes/kubernetes/pull/70476), [@charrywanganthony](https://github.com/charrywanganthony)) -* kubeadm: timeoutForControlPlane is introduced as part of the API Server config, that controls the timeout for the wait for control plane to be up. Default value is 4 minutes. ([#70480](https://github.com/kubernetes/kubernetes/pull/70480), [@rosti](https://github.com/rosti)) -* kubeadm: The writable config file option for extra volumes is renamed to readOnly with a reversed meaning. With readOnly defaulted to false (as in pod specs). ([#70495](https://github.com/kubernetes/kubernetes/pull/70495), [@rosti](https://github.com/rosti)) -* remove retry operation on attach/detach azure disk ([#70568](https://github.com/kubernetes/kubernetes/pull/70568), [@andyzhangx](https://github.com/andyzhangx)) -* Fix CSI volume limits not showing up in node's capacity and allocatable ([#70540](https://github.com/kubernetes/kubernetes/pull/70540), [@gnufied](https://github.com/gnufied)) -* Flex volume plugins now support expandvolume (to increase underlying volume capacity) and expanfs (resize filesystem) commands that Flex plugin authors can implement to support expanding in use Flex PersistentVolumes ([#67851](https://github.com/kubernetes/kubernetes/pull/67851), [@aniket-s-kulkarni](https://github.com/aniket-s-kulkarni)) -* kubeadm: Control plane component configs are separated into ClusterConfiguration sub-structs. ([#70371](https://github.com/kubernetes/kubernetes/pull/70371), [@rosti](https://github.com/rosti)) -* The `MountPropagation` feature is unconditionally enabled in v1.13, and can no longer be disabled. ([#68230](https://github.com/kubernetes/kubernetes/pull/68230), [@bertinatto](https://github.com/bertinatto)) -* add azure UltraSSD, StandardSSD disk type support ([#70477](https://github.com/kubernetes/kubernetes/pull/70477), [@andyzhangx](https://github.com/andyzhangx)) -* The OwnerReferencesPermissionEnforcement admission plugin now checks authorization for the correct scope (namespaced or cluster-scoped) of the owner resource type. Previously, it always checked permissions at the same scope as the child resource. ([#70389](https://github.com/kubernetes/kubernetes/pull/70389), [@caesarxuchao](https://github.com/caesarxuchao)) -* Ensure orphan public IPs on Azure deleted when service recreated with the same name. ([#70463](https://github.com/kubernetes/kubernetes/pull/70463), [@feiskyer](https://github.com/feiskyer)) -* `kubectl apply` can now change a deployment strategy from rollout to recreate without explicitly clearing the rollout-related fields ([#70436](https://github.com/kubernetes/kubernetes/pull/70436), [@liggitt](https://github.com/liggitt)) -* Fix cloud-controller-manager crash when using OpenStack provider and PersistentVolume initializing controller ([#70459](https://github.com/kubernetes/kubernetes/pull/70459), [@mvladev](https://github.com/mvladev)) - - - -# v1.13.0-alpha.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-alpha.3 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes.tar.gz) | `1d50cfd34306ace7354516125c45f8c546bba3ca5081af2b21969b535967d302821c06e7d4d590ba05f3e1e89ba56cc3d890b2e5bf2e07456532ac28e7c6c4a8` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-src.tar.gz) | `bf097b99d7b9af15bc1d592ee3782da1e811d8eb68dc9ae9d287589ce9174d3743beaf51422283c42ad03775e43839954bdeb44b1aa5707f73eebabed0cc199e` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `77778ae2887eda52ee716fb0e843c17b2705b1284a67cdf53f91292eb7f1055ef942be1ae0eac25ad9f4c9062c802fd57943e57578113f875f0d1f8a227bbb25` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `b3399767df12b71ee4b7b30126bd8001a0c1396161eb7535d797fd5847c55bccc18fb475f1639c3bf8e5f5c484a61025108c01e35f71417a405e75580c3990f6` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `5ef0d318ff8da28c332ae25164e5a441272d2ee8ef2ac26438a47fe3e7e645ed0b132325243f3f33c93a8681431a117f6207893f0e5270738aacfee16d8bbd32` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `1f429eae5b0b1e39b1d4d30e3220a82d0ae6672a6f4b34a05246c3efc131a236f79e5876d7a98c56d98fbf243b96cfd8db5d1ab73905df9e000d7af2b710fcf3` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `5583aecdc9b4a54a4aa904fc1de66400f50628969e31b5a63ab1d3b6628e3c547a9cef9c2bc9e53a0eeb0155fa0f745f7ee47e92166ce66d0c79199ff20c41de` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `2453b9100c06b11e8c424d59cfd1c5e111c22b596191a9cfb0b330d198abecd982e19eb2ac38d91c3d1ef226c9533c4f9a210b88295029985739e86363905de5` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `4991ec4c19a82d50caed78bc8db51e7cdcd1f2896dfcaa45d84f347a72fe7ee0d0280c897af54afec93f548d2ce247cf70d2b439024752ff701b80b67c385913` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `c55f2802afb2e5d261bb26b6c396df8ebe6b95913ddab1e124cf177f59a00524a26cc9dd74cbf06cc7a6a2207ccba2d3a8585f20a37485214d9b1bebb27fdde7` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `df78465267e35ef078c3c0fd33f8898a9df26fbf411df3ed3283fbdc2e79380693abe2a2815d5a4d53742135db4b5a0a480ce301817ede5c0674b12ac9c9bac9` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `5b93fdaaa931ef8e24196e53c484f91ef9e50b7d11e1053ccb61b2d6bdc8164767dd1d885cdc4949fdb7ed05cfbc7c9f7cc3468ad7affc22f849836b311d855f` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `922a93ce677e686e594c11db75e1969c995b23062bba511bff4a43d3a530e21e1d15cbe9b38d06af407de5a6c141f3b10cf24f50b848ed6b36e701249cece2c3` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `5dd550b58dedf25df020e66f1526e80c50b46d2df3ddd241bd02b6ebf10308599e7739917cbd9a3d2d3e787078d1271c4e3333f7f343a8a754ac5c08dedba0c9` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `3e1037e71d85a74cd5d40dd836bd442b2dcc457f8ccc8247e4537f3deca6f99d6805857c44b4fd69a7655308a3b0b4be43faaf74017cc3e26e8ba81e84968f33` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `a89c46b558613ad09efe44a81574ad18157a787d1e9c5d09c98d3911b499573cd9b9845b7a7526d4de5b93887267bedd96d043f79799552639b2168d3fea49ab` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `47a68668e38ac1b8cb801f4bff3b15060cd88801f446ebfbf06125dbc9aef52be79faa94acee65af46b93512af6f15c1f9f598324a368b82996f5a0f9aca0d14` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `74d5d46ac6ba336fa8aaf55d0a15860f6ebde2ff58d377ca93063593da12fbd4c758fe92c6b3285df0e4cc23c354ce5802ae3f7c38ad4e63f9d1eeaef41f2f2b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `90372cb5270ffe6179d5d7efd3fff6aa029f73853805038fef1a6f92683399d692aee7790eacc3a59681f66e2bd21b76c3abd87bef6404382782ec82fb726d59` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `09693303a1a8489d9599d32f7fbf549d18f31eb53671fa2ed342fe5089f2fba9322d8c52088b141da2414bb2b7f8352634cf84f0c72f3a58afd057629c3e8e5b` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `cbdb3b9ffd9be524ec0b38d72b0545b6dd1b3b789747f41a661fd7cbeffe942eb592c7e928a61e26152e7402b4894f5a74aad09cf2243d726b3b311d41cb0674` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `fc296b386bc03bf10773559118cd4a3d5be3d4c296f09748507fac812a1c791b435881b2ae425846632404f7f53f3f3bf54fc582fb8aa4895310186371dbacfd` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `ae79c62fcb0654a62606d65cf131188d93e4a10787a862e7b0363269942df19543b55fd119ec6ff73578b24db7774235611956103fe5e153eddf450750c4bbee` - -## Changelog since v1.13.0-alpha.2 - -### Other notable changes - -* kubelet --system-reserved and --kube-reserved are supported now on Windows nodes ([#69960](https://github.com/kubernetes/kubernetes/pull/69960), [@feiskyer](https://github.com/feiskyer)) -* CSI drivers now have access to mountOptions defined on the storage class when attaching volumes. ([#67898](https://github.com/kubernetes/kubernetes/pull/67898), [@bswartz](https://github.com/bswartz)) -* The `kubectl plugin list` command will now display discovered plugin paths in the same order as they are found in a user's PATH variable. ([#70443](https://github.com/kubernetes/kubernetes/pull/70443), [@juanvallejo](https://github.com/juanvallejo)) -* Handle Windows named pipes in host mounts. ([#69484](https://github.com/kubernetes/kubernetes/pull/69484), [@ddebroy](https://github.com/ddebroy)) -* kubeadm: Multiple API server endpoints support upon join is removed as it is now redundant. ([#69812](https://github.com/kubernetes/kubernetes/pull/69812), [@rosti](https://github.com/rosti)) -* OpenAPI spec marks delete request's body parameter as optional ([#70032](https://github.com/kubernetes/kubernetes/pull/70032), [@iamneha](https://github.com/iamneha)) -* kube-controller-manager and cloud-controller-manager now hold generated serving certificates in-memory unless a writeable location is specified with --cert-dir ([#69884](https://github.com/kubernetes/kubernetes/pull/69884), [@liggitt](https://github.com/liggitt)) -* Scheduler only activates unschedulable pods if node's scheduling related properties change. ([#70366](https://github.com/kubernetes/kubernetes/pull/70366), [@mlmhl](https://github.com/mlmhl)) -* --api-audiences now defaults to the --service-account-issuer if the issuer is provided but the API audience is not. ([#70308](https://github.com/kubernetes/kubernetes/pull/70308), [@mikedanese](https://github.com/mikedanese)) -* Refactor scheduler_test.go to use a fake k8s client. ([#70290](https://github.com/kubernetes/kubernetes/pull/70290), [@tossmilestone](https://github.com/tossmilestone)) -* `kubectl rollout undo` now returns errors when attempting to rollback a deployment to a non-existent revision ([#70039](https://github.com/kubernetes/kubernetes/pull/70039), [@liggitt](https://github.com/liggitt)) - * `kubectl rollout undo` no longer uses the deprecated extensions/v1beta1 rollback API, which means that Events are no longer emitted when rolling back a deployment -* - The builtin system:csi-external-provisioner and system:csi-external-attacher cluster roles ([#69868](https://github.com/kubernetes/kubernetes/pull/69868), [@pohly](https://github.com/pohly)) - * are deprecated and will not be updated for deployments of CSI sidecar container versions >= 0.4. - * Deployments with the current CSI sidecar containers have to provide their own RBAC - * definitions. The reason is that the rules depend on how the sidecar containers are used, - * which is defined by the deployment. -* Use debian-base instead of busybox as base image for server images ([#70245](https://github.com/kubernetes/kubernetes/pull/70245), [@ixdy](https://github.com/ixdy)) -* add support for projected volume in describe function ([#70158](https://github.com/kubernetes/kubernetes/pull/70158), [@WanLinghao](https://github.com/WanLinghao)) -* Speedup process lookup in /proc ([#66367](https://github.com/kubernetes/kubernetes/pull/66367), [@cpuguy83](https://github.com/cpuguy83)) -* Kubeadm reset now clean up custom etcd data path ([#70003](https://github.com/kubernetes/kubernetes/pull/70003), [@yagonobre](https://github.com/yagonobre)) -* We changed when the `metadata.generation` of a custom resource (CR) increments. ([#69059](https://github.com/kubernetes/kubernetes/pull/69059), [@caesarxuchao](https://github.com/caesarxuchao)) - * If the CR participates the spec/status convention, the metadata.generation of the CR increments when there is any change, except for the changes to the metadata or the changes to the status. - * If the CR does not participate the spec/status convention, the metadata.generation of the CR increments when there is any change to the CR, except for changes to the metadata. - * A CR is considered to participate the spec/status convention if and only if the "CustomResourceSubresources" feature gate is turned on and the CRD has `.spec.subresources.status={}`. -* Improve Azure instance metadata handling by adding caches. ([#70353](https://github.com/kubernetes/kubernetes/pull/70353), [@feiskyer](https://github.com/feiskyer)) -* adding cn-northwest-1 for AWS China Ningxia region ([#70155](https://github.com/kubernetes/kubernetes/pull/70155), [@pahud](https://github.com/pahud)) -* "kubectl get" no longer exits before printing all of its results if an error is found ([#70311](https://github.com/kubernetes/kubernetes/pull/70311), [@juanvallejo](https://github.com/juanvallejo)) -* kubeadm now automatically creates a new stacked etcd member when joining a new control plane node (does not applies to external etcd) ([#69486](https://github.com/kubernetes/kubernetes/pull/69486), [@fabriziopandini](https://github.com/fabriziopandini)) -* Critical pod annotation is deprecated. Pod priority should be used instead to mark pods as critical. ([#70298](https://github.com/kubernetes/kubernetes/pull/70298), [@bsalamat](https://github.com/bsalamat)) -* Display the usage of ephemeral-storage when using `kubectl describe node` ([#70268](https://github.com/kubernetes/kubernetes/pull/70268), [@Pingan2017](https://github.com/Pingan2017)) -* Added functionality to enable br_netfilter and ip_forward for debian packages to improve kubeadm support for CRI runtime besides Docker. ([#70152](https://github.com/kubernetes/kubernetes/pull/70152), [@ashwanikhemani](https://github.com/ashwanikhemani)) -* Add regions ap-northeast-3 and eu-west-3 to the list of well known AWS regions. ([#70252](https://github.com/kubernetes/kubernetes/pull/70252), [@nckturner](https://github.com/nckturner)) -* Remove kube-controller-manager flag '--insecure-experimental-approve-all-kubelet-csrs-for-group'(deprecated in v1.7) ([#69209](https://github.com/kubernetes/kubernetes/pull/69209), [@Pingan2017](https://github.com/Pingan2017)) -* GCE/GKE load balancer health check default interval changes from 2 seconds to 8 seconds, unhealthyThreshold to 3. ([#70099](https://github.com/kubernetes/kubernetes/pull/70099), [@grayluck](https://github.com/grayluck)) - * Health check parameters are configurable to be bigger than default values. -* The kubectl wait command must handle when a watch returns an error vs closing by printing out the error and retrying the watch. ([#69389](https://github.com/kubernetes/kubernetes/pull/69389), [@smarterclayton](https://github.com/smarterclayton)) -* Updates to use debian-iptables v11.0, debian-hyperkube-base 0.12.0, and kube-addon-manager:v8.9. ([#70209](https://github.com/kubernetes/kubernetes/pull/70209), [@ixdy](https://github.com/ixdy)) -* Fixed patch/update operations on multi-version custom resources ([#70087](https://github.com/kubernetes/kubernetes/pull/70087), [@liggitt](https://github.com/liggitt)) -* When `--rotate-server-certificates` is enabled, kubelet will no longer request a new certificate on startup if the current certificate on disk is satisfactory. ([#69991](https://github.com/kubernetes/kubernetes/pull/69991), [@agunnerson-ibm](https://github.com/agunnerson-ibm)) -* - Support for passing unknown provider names to the E2E test binaries is going to be deprecated. Use `--provider=skeleton` (no ssh access) or `--provider=local` (local cluster with ssh) instead. ([#70141](https://github.com/kubernetes/kubernetes/pull/70141), [@pohly](https://github.com/pohly)) -* Add scheduler benchmark tests for PodAffinity and NodeAffinity. ([#69898](https://github.com/kubernetes/kubernetes/pull/69898), [@Huang-Wei](https://github.com/Huang-Wei)) -* fix azure disk attachment error on Linux ([#70002](https://github.com/kubernetes/kubernetes/pull/70002), [@andyzhangx](https://github.com/andyzhangx)) - - - -# v1.13.0-alpha.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-alpha.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes.tar.gz) | `cbe7ef29c7e7bbed82e173289f5f84d7a85ee4965cc5b7ccd16cf8236a3b8171bb8f52011d00ea4dd1119cfeee32a3326260e968038431f2834f194e84f6f070` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-src.tar.gz) | `8b0b8e1b635cd849c2974d755fe174f0ce8fe8c690721d8ac6312683bbd2ca2c6f7eada38e4e470d3a0172138b10a994fa3bebc01abd76d835431660247e8a71` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `fca661a5001e7f368374d0805f20910be24baa485bf4ae5d993185b974f70ff7241497e7a130658dca69abf335fd581c0f5be22de4f9937f32e9fb20fbd0f1e9` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `d31dfea475981c7f7b758c7f201aa5b866db48d87942c79d0a12d464b7cdf501dba2255282c72b53928ccac215282fc8c0a9069a7443e9683bbf39a59814d8c3` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `fecf8362c572fff48952fd2748ddcb9d375462cb484670cda4fda1387eb692713be0a323e93746bb1845a4ef3b15df288430c8b4a5e4f2892c388bb84a66ec9a` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `136cb82ac94bcd791d56e997a948a7e1bee4af03bcc69ce9c835895cdda75524f5916756c778ff8aa693624289824eaee4aff1e62a6d95d18f9b69a7473a3fe9` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `e561c37895edef44614ecd59f497d393275ee62455b6269b169a891873d661d46cbf68e6148447f142ebdddb45bd5c01f6927d8463e2e1c4072358fec205e53e` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `c0d5eb49763e8bf50b5e8e3785c7889fecbd8bf7c0b3c18250fa894a1c5e58a14f796f7526279dbf41d5d47e69114d39e37a62403ff4abb1cc0cd20bd48c1c5a` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `a5a8c150af163e7c726662eeddfc3de8e43f123daaa100b8e82c9bc786313a5ce8135cbaadd41ebbb6c2307aeebdadf43fc84037a5ac9d3c5d6e9052b7fc615b` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `fd162e0244e107f1892d79029f3452cdba84d8616ad1b15eebe197afb3b536328cd8cba9c73c0ce1cd8ac6faed9e0a4613d487bf07b45341fadf0d940062bafa` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `e01fedec8f700e037bc43cb13bc916b85601cd1c9361a0f63fd27092640f89d2faaff4a6157638af8af52538c5f7fa75d9c7674477a45e0215fd505095a62f21` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `d2601efcfa6a4ba8a017e9cac571fb454b21b7700a7b3f8e2fbabdd5301545ef2459da93eca3684c1aa73ea6a6d87bae0e27fffc8b05ed93729004ebbb9e3879` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `4dda298d44bc309f250c067e9282eea37903838a140cf5abf6f861dca624d5a055ba1c43129454ae9abc8350f1fffb224677e34ef4268f7eb43c96fe48b28d78` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `e9c3bdf60272399bc6f85a15bbc55cd69db389c223b275661ddcab4ae8c3afcd2171ec3c35a53df2420376f8c6294af791776e16dc07a27438aaa3220d6c94a3` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `d0a1701a34365f939799b6ea676129acdcfa1582bcf50e82a9751d9aafc73ebffd0fc0365fe352755caa9a2b791c4195d7eb04fbb1ce660f107cb5257d57a967` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `1a23473960aaaa639e796020741b63c11dad8a93903926e80c871814b8209166ef06f5205172cd9b2438f8c8e9c9fb50b96d983f56737ab252530112f816b2d6` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `293d0eb93e2ed641d0c1e26d58423670c04c307dddb034a9fc252043abe5694f63e772d4dfe2bf505fc0b68c41f9d87800d867b87c7697dd6249b11c0efbc580` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `e3cba71c2b2d151cdcc44937c1bea083ee0ceb829e7feb25cd37edd4d0bd7adac0a166144bd33f9aa616d730785d52c3fee70f0db272d892e79c38eb544cfd22` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `28d7f1cf4fecdc72da7f5f19836cc06bb08182f8e8fb1641dc01e9299247905e305b04c676efa9afbdb8b1ed649542148406b110b75b1e87c1daca7ffed6018c` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `cfe22b11502cd857f0e277e7c1af08e6202f7ffc36f852c6154159bdd67bb330ffd18e5f768cf6968f0524aa80ffba6b7012207831ba94dec4084f1ce38a5289` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `195a6785c49af419361a8901c99bb6613a6578a8eac5e8f08ec28077645be18c6d04c9afc2839d07de27b15595584f6dff5e5f9e78001fc2c6a3249e99b82247` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `51f5b5ed47b50f5188d9e2f57b03555492d3e490494842247fa04fe81ea350c6694a52caa46ea50578ca07e48212f4f714b8614d8b1eb8924b424eaed73a8d24` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `d2690d57cd485c0c7ebe425464ad59f2c7722870abd6f264ea7fae65a4e403c89446373ba9cd23cd43e8316902637aa9e0b23d571b0ac890c35ff8e9c3ff3c3b` - -## Changelog since v1.13.0-alpha.1 - -### Other notable changes - -* Corrected family type (inet6) for ipsets in ipv6-only clusters ([#68436](https://github.com/kubernetes/kubernetes/pull/68436), [@uablrek](https://github.com/uablrek)) -* Corrects check for non-Azure managed nodes with the Azure cloud provider ([#70135](https://github.com/kubernetes/kubernetes/pull/70135), [@marc-sensenich](https://github.com/marc-sensenich)) -* Windows runtime endpoints is now switched to 'npipe:////./pipe/dockershim' from 'tcp://localhost:3735'. ([#69516](https://github.com/kubernetes/kubernetes/pull/69516), [@feiskyer](https://github.com/feiskyer)) -* The caBundle and service fields in admission webhook API objects now correctly indicate they are optional ([#70138](https://github.com/kubernetes/kubernetes/pull/70138), [@liggitt](https://github.com/liggitt)) -* The --service-account-api-audiences on kube-apiserver is deprecated in favor of --api-audiences. ([#70105](https://github.com/kubernetes/kubernetes/pull/70105), [@mikedanese](https://github.com/mikedanese)) -* kubeadm: fix unnecessary upgrades caused by undefined order of Volumes and VolumeMounts in manifests ([#70027](https://github.com/kubernetes/kubernetes/pull/70027), [@bart0sh](https://github.com/bart0sh)) -* kubeadm: Implemented preflight check to ensure that number of CPUs ([#70048](https://github.com/kubernetes/kubernetes/pull/70048), [@bart0sh](https://github.com/bart0sh)) - * on the master node is not less than required. -* Reduce memory utilization of admission webhook metrics by removing resource related labels. ([#69895](https://github.com/kubernetes/kubernetes/pull/69895), [@jpbetz](https://github.com/jpbetz)) -* kubeadm: Introduce config print init/join-defaults that deprecate config print-defaults by decoupling init and join configs. ([#69617](https://github.com/kubernetes/kubernetes/pull/69617), [@rosti](https://github.com/rosti)) -* Images based on debian-base no longer include the libsystemd0 package. This should have no user-facing impact. ([#69995](https://github.com/kubernetes/kubernetes/pull/69995), [@ixdy](https://github.com/ixdy)) - * Additionally, the addon-manager image is updated to use kubectl v1.11.3. -* fix 'kubeadm upgrade' infinite loop waiting for pod restart ([#69886](https://github.com/kubernetes/kubernetes/pull/69886), [@bart0sh](https://github.com/bart0sh)) -* add more logging for azure disk diagnostics ([#70012](https://github.com/kubernetes/kubernetes/pull/70012), [@andyzhangx](https://github.com/andyzhangx)) -* Fluentd: concatenate long logs ([#68012](https://github.com/kubernetes/kubernetes/pull/68012), [@desaintmartin](https://github.com/desaintmartin)) -* CoreDNS is now the default DNS server in kube-up deployments. ([#69883](https://github.com/kubernetes/kubernetes/pull/69883), [@chrisohaver](https://github.com/chrisohaver)) -* Optimizes calculating stats when only CPU and Memory stats are returned from Kubelet stats/summary http endpoint. ([#68841](https://github.com/kubernetes/kubernetes/pull/68841), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -* kubeadm: Fix node join taints. ([#69846](https://github.com/kubernetes/kubernetes/pull/69846), [@andrewrynhard](https://github.com/andrewrynhard)) -* Opt out of chowning and chmoding from kubectl cp. ([#69573](https://github.com/kubernetes/kubernetes/pull/69573), [@bjhaid](https://github.com/bjhaid)) -* support Azure premium file for azure file plugin ([#69718](https://github.com/kubernetes/kubernetes/pull/69718), [@andyzhangx](https://github.com/andyzhangx)) -* `TaintBasedEvictions` feature is promoted to beta. ([#69824](https://github.com/kubernetes/kubernetes/pull/69824), [@Huang-Wei](https://github.com/Huang-Wei)) -* improves memory use and performance when processing large numbers of pods containing tolerations ([#65350](https://github.com/kubernetes/kubernetes/pull/65350), [@liggitt](https://github.com/liggitt)) -* Add dynamic audit configuration api ([#67547](https://github.com/kubernetes/kubernetes/pull/67547), [@pbarker](https://github.com/pbarker)) -* Promote resource limits priority function to beta ([#69437](https://github.com/kubernetes/kubernetes/pull/69437), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* Fix cluster autoscaler addon permissions so it can access batch/job. ([#69858](https://github.com/kubernetes/kubernetes/pull/69858), [@losipiuk](https://github.com/losipiuk)) -* change default azure file mount permission to 0777 ([#69854](https://github.com/kubernetes/kubernetes/pull/69854), [@andyzhangx](https://github.com/andyzhangx)) -* kubeadm: JoinConfiguration now houses the discovery options in a nested Discovery structure, which in turn has a couple of other nested structures to house more specific options (BootstrapTokenDiscovery and FileDiscovery) ([#67763](https://github.com/kubernetes/kubernetes/pull/67763), [@rosti](https://github.com/rosti)) -* Fix tests to use fsync instead of sync ([#69755](https://github.com/kubernetes/kubernetes/pull/69755), [@mrunalp](https://github.com/mrunalp)) -* kube-proxy argument `hostname-override` can be used to override hostname defined in the configuration file ([#69340](https://github.com/kubernetes/kubernetes/pull/69340), [@stevesloka](https://github.com/stevesloka)) -* kube-apiserver: the `--deserialization-cache-size` flag is no longer used, is deprecated, and will be removed in a future release ([#69842](https://github.com/kubernetes/kubernetes/pull/69842), [@liggitt](https://github.com/liggitt)) -* Add support for JSON patch in fake client ([#69330](https://github.com/kubernetes/kubernetes/pull/69330), [@vaikas-google](https://github.com/vaikas-google)) - - - -# v1.13.0-alpha.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.13.0-alpha.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes.tar.gz) | `9f8a34b54a22ea4d7925c2f8d0e0cb2e2005486b1ed89e594bc0100ec7202fc247b89c5cbde5dc50c1f9d9f27e4f92aa0ca71fdffb9d079f63751bb1859d5bb4` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-src.tar.gz) | `a27a7c254d3677c823bd6fd1d0d5f9b1e78ccf807837173669a0079b0812a23444d646d80c2433c167ae50bf1a0e2a4b1d7cbd7457a505fc666464b069bd1e5f` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `d77d33c6d6357b99089f65e1c9ec3cabdcf526ec56e87bdee6b09a8c1b1f1b8f6f0ed6d32f2d3b352391da848afc945e5bb6bfc4c05d90fb4ba429e2d2c3ec0f` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `5b4a586defa2ba0ea7c8893dedfe48cae52a2cd324bcb311a3877e27493abb6cb76550e8201a9cac488cde9f83e0d30e6569b95641e8098fd9ec5df9c9e027b2` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `d50572fbb716393004ad2984a15043d2dfadedd16ae03a73fc85653266ae389071fd2c993923fbe9ea7fbd6b8cbeb6680ef147245e20f334969184d4b571509b` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `12ab709e574228f170a2ee2686e18dcbfcf59f64599b2ab9047c2ed63f4bd23d6c9fc48104431c9fa616e0ba30041e1c44fb3994ab54c5c98c0c4a94c5ea4b80` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `3a8c75b62cf9e6476417246d4aaeda5a13b74bc073444fc3649198b9d5dc1e7a62aa6b914c7da5a42bcd6164a8f63aa8b256b3579979b6465afe5aa5533ce501` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `0f5b5956850f11a826d59d226b6a22645ca1f63893cd33c17dfe004bd316f2704d800beb0b9c91a204efc125241825243c9e89b86c01e523bd07636ef925772e` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `06c60dd2e4e8d1ab45474a5b85345b4f644d0c1c66e167596c6c91bd607f957b68121fdb7efed362cb6799e7bcf14752b01f8bea0c929deb85311180f11469be` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `4630e9e523beb02d8d3900c71b3306561c2d119d588399c93d578184eb1a53601ceefe15a600740c13d565eaf24a679f17e371e2b19a70f77bbceab84acb58b3` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `0c0fcc9c492aceb00ff7fd3c10ba228c7bb10d6139b75ceecd8f85532797c5dc1162b39d94ebae5fa6b4c26f2b2a81630371617426f7537d9d11456943c7d50c` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `3548a6d8618c6c7c8042ae8c3eb69654314392c46f839de24ab72d9faa79993a6cf989f6ac619e418e817300081742c9928c8c2dd82cffc74f7c0e532e42288d` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `9dbf2343ef9539b7d4d73949bcd9eef6f46ece59e97fa3390a0e695d0cb2eacbbbae17e3ed53432a8018f55e6db2421a58739aacbc163776d8b2fe774ad62c34` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `a985f3c302246df9bff4b927a2596d209c19fb2f245aa5cb5de189b6a9d247d6fd0234edd45968a691f1a2714a0b72ffba2df1aebf361ba1a3461ab7e5fda2ff` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `80d20df07e6a29b7aedccbd4e26c1c0565b2a1c3146e1a5bb2ebd2e8cf9ab063db137389a498fd6a6c3c42da43486186af6f65fba399b332e4cae134badd7ab0` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `7d45ed3aa8b36e9e666b334ff3ed3de238caea34b4a92b5e1a61a6e7223ae8581bafff43a5b72447a43e118ad4b2c5c15aa0d6faab9a6a72a8fcf99abf340a1e` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `30698478fab2fe7daccac97917b0b21b018c194ec39b005728f8cddf77f889aa3e1a520e0d1d681f9d8b7889a887aa6eb98c33cb04a8bf52b9a40bb8589aa34f` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `4497d14ac81677b43f0b75a457890c1f3bb8745a39875f58d53c734bec1947c37388228e0c952ca87f22d74af101a9263546db07bf1a021d59cba3cea1d5e5b9` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `a3b0357db50e0dec7b0474816fec287388adabc76cc309a40dee9bc73771c951e4526a06145a8b332d72e5999dabb5e467d00d7c47035559a79e56f863def2f7` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `43af8ec4c5f2a1e2baa8cd13817e127fb6a3576dd811a30c4cc5f04d8a9a8bb2267eb5c42e0a895cf2ec0e3260b73c818249296c957625f4048e13102606680a` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `840354219b3e59ed05b5b44cbbf4d45ccc4c0d74044e28c8a557ca75d12e509b091eb10d9bed81e300cb484b0a0f735424383c8b266fbb3e2aa7a2d50dceaf9e` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `796ca2e6855bd942a9a63d93f847ae62c5ee74195e041b60b89ee7d0e5a75643a8809bfaa36898daa176bccf140a8e5e858f5cb74e457d8bbb0a650600628ceb` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.13.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `96d666e8446d09088bdcb440559035118dce07a2d9f5718856192fd807b61840d2d6cee2a808eb13f2e947784300edc1ac41ade14dc3536c044e4d08982f0fdd` - -## Changelog since v1.12.0 - -### Action Required - -* kube-apiserver: the deprecated `--etcd-quorum-read` flag has been removed, and quorum reads are always enabled when fetching data from etcd. ([#69527](https://github.com/kubernetes/kubernetes/pull/69527), [@liggitt](https://github.com/liggitt)) -* Moved staging/src/k8s.io/client-go/tools/bootstrap to staging/src/k8s… ([#67356](https://github.com/kubernetes/kubernetes/pull/67356), [@yliaog](https://github.com/yliaog)) -* [action required] kubeadm: The `v1alpha2` config API has been removed. ([#69055](https://github.com/kubernetes/kubernetes/pull/69055), [@fabriziopandini](https://github.com/fabriziopandini)) - * Please convert your `v1alpha2` configuration files to `v1alpha3` using the - * `kubeadm config migrate` command of kubeadm v1.12.x - -### Other notable changes - -* Refactor factory_test.go to use a fake k8s client. ([#69412](https://github.com/kubernetes/kubernetes/pull/69412), [@tossmilestone](https://github.com/tossmilestone)) -* kubeadm: fix a case where fetching a kubernetesVersion from the internet still happened even if some commands don't need it. ([#69645](https://github.com/kubernetes/kubernetes/pull/69645), [@neolit123](https://github.com/neolit123)) -* Add tolerations for Stackdriver Logging and Metadata Agents. ([#69737](https://github.com/kubernetes/kubernetes/pull/69737), [@qingling128](https://github.com/qingling128)) -* Fix a bug in the scheduler that could cause the scheduler to go to an infinite loop when all nodes in a zone are removed. ([#69758](https://github.com/kubernetes/kubernetes/pull/69758), [@bsalamat](https://github.com/bsalamat)) -* Dry-run is promoted to Beta and will be enabled by default. ([#69644](https://github.com/kubernetes/kubernetes/pull/69644), [@apelisse](https://github.com/apelisse)) -* `kubectl get priorityclass` now prints value column by default. ([#69431](https://github.com/kubernetes/kubernetes/pull/69431), [@Huang-Wei](https://github.com/Huang-Wei)) -* Added a new container based image for running e2e tests ([#69368](https://github.com/kubernetes/kubernetes/pull/69368), [@dims](https://github.com/dims)) -* Remove the deprecated --google-json-key flag from kubelet. ([#69354](https://github.com/kubernetes/kubernetes/pull/69354), [@yujuhong](https://github.com/yujuhong)) -* kube-apiserver: fixes `procMount` field incorrectly being marked as required in openapi schema ([#69694](https://github.com/kubernetes/kubernetes/pull/69694), [@jessfraz](https://github.com/jessfraz)) -* The `LC_ALL` and `LC_MESSAGES` env vars can now be used to set desired locale for `kubectl` while keeping `LANG` unchanged. ([#69500](https://github.com/kubernetes/kubernetes/pull/69500), [@m1kola](https://github.com/m1kola)) -* Add ability to control primary GID of containers through Pod Spec and PodSecurityPolicy ([#67802](https://github.com/kubernetes/kubernetes/pull/67802), [@krmayankk](https://github.com/krmayankk)) -* NodeLifecycleController: Now node lease renewal is treated as the heartbeat signal from the node, in addition to NodeStatus Update. ([#69241](https://github.com/kubernetes/kubernetes/pull/69241), [@wangzhen127](https://github.com/wangzhen127)) -* [GCE] Enable by default audit logging truncating backend. ([#68288](https://github.com/kubernetes/kubernetes/pull/68288), [@loburm](https://github.com/loburm)) -* Enable insertId generation, and update Stackdriver Logging Agent image to 0.5-1.5.36-1-k8s. This help reduce log duplication and guarantee log order. ([#68920](https://github.com/kubernetes/kubernetes/pull/68920), [@qingling128](https://github.com/qingling128)) -* Move NodeInfo utils into pkg/scheduler/cache. ([#69495](https://github.com/kubernetes/kubernetes/pull/69495), [@wgliang](https://github.com/wgliang)) -* adds dynamic shared informers to write generic, non-generated controllers ([#69308](https://github.com/kubernetes/kubernetes/pull/69308), [@p0lyn0mial](https://github.com/p0lyn0mial)) -* Move CacheComparer to pkg/scheduler/internal/cache/comparer. ([#69317](https://github.com/kubernetes/kubernetes/pull/69317), [@wgliang](https://github.com/wgliang)) -* Updating OWNERS list for vSphere Cloud Provider. ([#69187](https://github.com/kubernetes/kubernetes/pull/69187), [@SandeepPissay](https://github.com/SandeepPissay)) -* The default storage class annotation for the storage addons has been changed to use the GA variant ([#68345](https://github.com/kubernetes/kubernetes/pull/68345), [@smelchior](https://github.com/smelchior)) -* Upgrade to etcd 3.3 client ([#69322](https://github.com/kubernetes/kubernetes/pull/69322), [@jpbetz](https://github.com/jpbetz)) -* fix GetVolumeLimits log flushing issue ([#69558](https://github.com/kubernetes/kubernetes/pull/69558), [@andyzhangx](https://github.com/andyzhangx)) -* It is now possible to use named ports in the `kubectl port-forward` command ([#69477](https://github.com/kubernetes/kubernetes/pull/69477), [@m1kola](https://github.com/m1kola)) -* kubeadm: fix a possible scenario where kubeadm can pull much newer control-plane images ([#69301](https://github.com/kubernetes/kubernetes/pull/69301), [@neolit123](https://github.com/neolit123)) -* test/e2e/e2e.test: ([#69105](https://github.com/kubernetes/kubernetes/pull/69105), [@pohly](https://github.com/pohly)) - * -viper-config can be used to set also the options defined by command line flags - * the default config file is "e2e.yaml/toml/json/..." and the test starts when no such config is found (as before) but if -viper-config is used, the config file must exist - * -viper-config can be used to select a file with full path, with or without file suffix - * the csiImageVersion/Registry flags were renamed to storage.csi.imageVersion/Registry -* Move FakeCache to pkg/scheduler/internal/cache/fake. ([#69318](https://github.com/kubernetes/kubernetes/pull/69318), [@wgliang](https://github.com/wgliang)) -* The "kubectl cp" command now supports path shortcuts (../) in remote paths. ([#65189](https://github.com/kubernetes/kubernetes/pull/65189), [@juanvallejo](https://github.com/juanvallejo)) -* Fixed subpath in containerized kubelet. ([#69565](https://github.com/kubernetes/kubernetes/pull/69565), [@jsafrane](https://github.com/jsafrane)) -* The runtimeHandler field on the RuntimeClass resource now accepts the empty string. ([#69550](https://github.com/kubernetes/kubernetes/pull/69550), [@tallclair](https://github.com/tallclair)) -* Kubelet can now parse PEM file containing both TLS certificate and key in arbitrary order. Previously key was always required to be first. ([#69536](https://github.com/kubernetes/kubernetes/pull/69536), [@awly](https://github.com/awly)) -* Scheduling conformance tests related to daemonsets should set the annotation that relaxes node selection restrictions, if any are set. This ensures conformance tests can run on a wider array of clusters. ([#68793](https://github.com/kubernetes/kubernetes/pull/68793), [@aveshagarwal](https://github.com/aveshagarwal)) -* Replace Parallelize with function ParallelizeUntil and formally deprecate the Parallelize. ([#68403](https://github.com/kubernetes/kubernetes/pull/68403), [@wgliang](https://github.com/wgliang)) -* Move scheduler cache interface and implementation to pkg/scheduler/internal/cache. ([#68968](https://github.com/kubernetes/kubernetes/pull/68968), [@wgliang](https://github.com/wgliang)) -* Update to use go1.11.1 ([#69386](https://github.com/kubernetes/kubernetes/pull/69386), [@cblecker](https://github.com/cblecker)) -* Any external provider should be aware the cloud-provider interface should be imported from :- ([#68310](https://github.com/kubernetes/kubernetes/pull/68310), [@cheftako](https://github.com/cheftako)) - * cloudprovider "k8s.io/cloud-provider" -* kubeadm: Fix a crash if the etcd local alpha phase is called when the configuration contains an external etcd cluster ([#69420](https://github.com/kubernetes/kubernetes/pull/69420), [@ereslibre](https://github.com/ereslibre)) -* kubeadm now allows mixing of init/cluster and join configuration in a single YAML file (although a warning gets printed in this case). ([#69426](https://github.com/kubernetes/kubernetes/pull/69426), [@rosti](https://github.com/rosti)) -* Code-gen: Remove lowercasing for project imports ([#68484](https://github.com/kubernetes/kubernetes/pull/68484), [@jsturtevant](https://github.com/jsturtevant)) -* Fix client cert setup in delegating authentication logic ([#69430](https://github.com/kubernetes/kubernetes/pull/69430), [@DirectXMan12](https://github.com/DirectXMan12)) -* service.beta.kubernetes.io/aws-load-balancer-internal now supports true and false values, previously it only supported non-empty strings ([#69436](https://github.com/kubernetes/kubernetes/pull/69436), [@mcrute](https://github.com/mcrute)) -* OpenAPI spec and API reference now reflect dryRun query parameter for POST/PUT/PATCH operations ([#69359](https://github.com/kubernetes/kubernetes/pull/69359), [@roycaihw](https://github.com/roycaihw)) -* kubeadm: Add a `v1beta1` API. ([#69289](https://github.com/kubernetes/kubernetes/pull/69289), [@fabriziopandini](https://github.com/fabriziopandini)) -* kube-apiserver has removed support for the `etcd2` storage backend (deprecated since v1.9). Existing clusters must migrate etcd v2 data to etcd v3 storage before upgrading to v1.13. ([#69310](https://github.com/kubernetes/kubernetes/pull/69310), [@liggitt](https://github.com/liggitt)) -* List operations against the API now return internal server errors instead of partially complete lists when a value cannot be transformed from storage. The updated behavior is consistent with all other operations that require transforming data from storage such as watch and get. ([#69399](https://github.com/kubernetes/kubernetes/pull/69399), [@mikedanese](https://github.com/mikedanese)) -* `kubectl wait` now supports condition value checks other than true using `--for condition=available=false` ([#69295](https://github.com/kubernetes/kubernetes/pull/69295), [@deads2k](https://github.com/deads2k)) -* CCM server will not listen insecurely if secure port is specified ([#68982](https://github.com/kubernetes/kubernetes/pull/68982), [@aruneli](https://github.com/aruneli)) -* Bump cluster-proportional-autoscaler to 1.3.0 ([#69338](https://github.com/kubernetes/kubernetes/pull/69338), [@MrHohn](https://github.com/MrHohn)) - * - Rebase docker image on scratch. -* fix inconsistency in windows kernel proxy when updating HNS policy. ([#68923](https://github.com/kubernetes/kubernetes/pull/68923), [@delulu](https://github.com/delulu)) -* Fixes the sample-apiserver so that its BanFlunder admission plugin can be used. ([#68417](https://github.com/kubernetes/kubernetes/pull/68417), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) -* Fixed CSIDriver API object to allow missing fields. ([#69331](https://github.com/kubernetes/kubernetes/pull/69331), [@jsafrane](https://github.com/jsafrane)) -* Bump addon-manager to v8.8 ([#69337](https://github.com/kubernetes/kubernetes/pull/69337), [@MrHohn](https://github.com/MrHohn)) - * - Rebase docker image on debian-base:0.3.2. -* Update defaultbackend image to 1.5. Users should concentrate on updating scripts to the new version. ([#69120](https://github.com/kubernetes/kubernetes/pull/69120), [@aledbf](https://github.com/aledbf)) -* Bump Dashboard version to v1.10.0 ([#68450](https://github.com/kubernetes/kubernetes/pull/68450), [@jeefy](https://github.com/jeefy)) -* Fixed panic on iSCSI volume tear down. ([#69140](https://github.com/kubernetes/kubernetes/pull/69140), [@jsafrane](https://github.com/jsafrane)) -* Update defaultbackend to v1.5 ([#69334](https://github.com/kubernetes/kubernetes/pull/69334), [@bowei](https://github.com/bowei)) -* Remove unused chaosclient. ([#68409](https://github.com/kubernetes/kubernetes/pull/68409), [@wgliang](https://github.com/wgliang)) -* Enable AttachVolumeLimit feature ([#69225](https://github.com/kubernetes/kubernetes/pull/69225), [@gnufied](https://github.com/gnufied)) -* Update crictl to v1.12.0 ([#69033](https://github.com/kubernetes/kubernetes/pull/69033), [@feiskyer](https://github.com/feiskyer)) -* Wait for pod failed event in subpath test. ([#69300](https://github.com/kubernetes/kubernetes/pull/69300), [@mrunalp](https://github.com/mrunalp)) -* [GCP] Added env variables to control CPU requests of kube-controller-manager and kube-scheduler. ([#68823](https://github.com/kubernetes/kubernetes/pull/68823), [@loburm](https://github.com/loburm)) -* Bump up pod short start timeout to 2 minutes. ([#69291](https://github.com/kubernetes/kubernetes/pull/69291), [@mrunalp](https://github.com/mrunalp)) -* Use the mounted "/var/run/secrets/kubernetes.io/serviceaccount/token" as the token file for running in-cluster based e2e testing. ([#69273](https://github.com/kubernetes/kubernetes/pull/69273), [@dims](https://github.com/dims)) -* apiservice availability related to networking glitches are corrected faster ([#68678](https://github.com/kubernetes/kubernetes/pull/68678), [@deads2k](https://github.com/deads2k)) -* extract volume attachment status checking operation as a common function when attaching a CSI volume ([#68931](https://github.com/kubernetes/kubernetes/pull/68931), [@mlmhl](https://github.com/mlmhl)) -* PodSecurityPolicy objects now support a `MayRunAs` rule for `fsGroup` and `supplementalGroups` options. This allows specifying ranges of allowed GIDs for pods/containers without forcing a default GID the way `MustRunAs` does. This means that a container to which such a policy applies to won't use any fsGroup/supplementalGroup GID if not explicitly specified, yet a specified GID must still fall in the GID range according to the policy. ([#65135](https://github.com/kubernetes/kubernetes/pull/65135), [@stlaz](https://github.com/stlaz)) -* Images for cloud-controller-manager, kube-apiserver, kube-controller-manager, and kube-scheduler now contain a minimal /etc/nsswitch.conf and should respect /etc/hosts for lookups ([#69238](https://github.com/kubernetes/kubernetes/pull/69238), [@BenTheElder](https://github.com/BenTheElder)) -* add deprecation warning for all cloud providers ([#69171](https://github.com/kubernetes/kubernetes/pull/69171), [@andrewsykim](https://github.com/andrewsykim)) -* IPVS proxier mode now support connection based graceful termination. ([#66012](https://github.com/kubernetes/kubernetes/pull/66012), [@Lion-Wei](https://github.com/Lion-Wei)) -* Fix panic in kubectl rollout commands ([#69150](https://github.com/kubernetes/kubernetes/pull/69150), [@soltysh](https://github.com/soltysh)) -* Add fallbacks to ARM API when getting empty node IP from Azure IMDS ([#69077](https://github.com/kubernetes/kubernetes/pull/69077), [@feiskyer](https://github.com/feiskyer)) -* Deduplicate PATH items when reading plugins. ([#69089](https://github.com/kubernetes/kubernetes/pull/69089), [@soltysh](https://github.com/soltysh)) -* Adds permissions for startup of an on-cluster kube-controller-manager ([#69062](https://github.com/kubernetes/kubernetes/pull/69062), [@dghubble](https://github.com/dghubble)) -* Fixes issue [[#68899](https://github.com/kubernetes/kubernetes/pull/68899)](https://github.com/kubernetes/kubernetes/issues/68899) where pods might schedule on an unschedulable node. ([#68984](https://github.com/kubernetes/kubernetes/pull/68984), [@k82cn](https://github.com/k82cn)) -* Returns error if NodeGetInfo fails. ([#68979](https://github.com/kubernetes/kubernetes/pull/68979), [@xing-yang](https://github.com/xing-yang)) -* Pod disruption budgets shouldn't be checked for terminal pods while evicting ([#68892](https://github.com/kubernetes/kubernetes/pull/68892), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* Fix scheduler crashes when Prioritize Map function returns error. ([#68563](https://github.com/kubernetes/kubernetes/pull/68563), [@DylanBLE](https://github.com/DylanBLE)) -* kubeadm: create control plane with ClusterFirstWithHostNet DNS policy ([#68890](https://github.com/kubernetes/kubernetes/pull/68890), [@andrewrynhard](https://github.com/andrewrynhard)) -* Reduced excessive logging from fluentd-gcp-scaler. ([#68837](https://github.com/kubernetes/kubernetes/pull/68837), [@x13n](https://github.com/x13n)) -* adds dynamic lister ([#68748](https://github.com/kubernetes/kubernetes/pull/68748), [@p0lyn0mial](https://github.com/p0lyn0mial)) -* kubectl: add the --no-headers flag to `kubectl top ...` ([#67890](https://github.com/kubernetes/kubernetes/pull/67890), [@WanLinghao](https://github.com/WanLinghao)) -* Restrict redirect following from the apiserver to same-host redirects, and ignore redirects in some cases. ([#66516](https://github.com/kubernetes/kubernetes/pull/66516), [@tallclair](https://github.com/tallclair)) -* Fixed pod cleanup when /var/lib/kubelet is a symlink. ([#68741](https://github.com/kubernetes/kubernetes/pull/68741), [@jsafrane](https://github.com/jsafrane)) -* Add "only_cpu_and_memory" GET parameter to /stats/summary http handler in kubelet. If parameter is true then only cpu and memory will be present in response. ([#67829](https://github.com/kubernetes/kubernetes/pull/67829), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -* Start synchronizing pods after network is ready. ([#68752](https://github.com/kubernetes/kubernetes/pull/68752), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) -* kubectl has gained new --profile and --profile-output options to output go profiles ([#68681](https://github.com/kubernetes/kubernetes/pull/68681), [@dlespiau](https://github.com/dlespiau)) -* Provides FSGroup capability on FlexVolume driver. It allows to disable the VolumeOwnership operation when volume is mounted ([#68680](https://github.com/kubernetes/kubernetes/pull/68680), [@benoitf](https://github.com/benoitf)) -* Apply _netdev mount option on bind mount ([#68626](https://github.com/kubernetes/kubernetes/pull/68626), [@gnufied](https://github.com/gnufied)) -* fix UnmountDevice failure on Windows ([#68608](https://github.com/kubernetes/kubernetes/pull/68608), [@andyzhangx](https://github.com/andyzhangx)) -* Allows changing nodeName in endpoint update. ([#68575](https://github.com/kubernetes/kubernetes/pull/68575), [@prameshj](https://github.com/prameshj)) -* kube-apiserver would return 400 Bad Request when it couldn't decode a json patch. ([#68346](https://github.com/kubernetes/kubernetes/pull/68346), [@CaoShuFeng](https://github.com/CaoShuFeng)) - * kube-apiserver would return 422 Unprocessable Entity when a json patch couldn't be applied to one object. -* remove unused ReplicasetControllerOptions ([#68121](https://github.com/kubernetes/kubernetes/pull/68121), [@dixudx](https://github.com/dixudx)) -* Pass signals to fluentd process ([#68064](https://github.com/kubernetes/kubernetes/pull/68064), [@gianrubio](https://github.com/gianrubio)) -* Flex drivers by default do not produce metrics. Flex plugins can enable metrics collection by setting the capability 'supportsMetrics' to true. Make sure the file system can support fs stat to produce metrics in this case. ([#67508](https://github.com/kubernetes/kubernetes/pull/67508), [@brahmaroutu](https://github.com/brahmaroutu)) -* Use monotonically increasing generation to prevent scheduler equivalence cache race. ([#67308](https://github.com/kubernetes/kubernetes/pull/67308), [@cofyc](https://github.com/cofyc)) -* Fix kubelet service file permission warning ([#66669](https://github.com/kubernetes/kubernetes/pull/66669), [@daixiang0](https://github.com/daixiang0)) -* Add prometheus metric for scheduling throughput. ([#64526](https://github.com/kubernetes/kubernetes/pull/64526), [@misterikkit](https://github.com/misterikkit)) -* Get public IP for Azure vmss nodes. ([#68498](https://github.com/kubernetes/kubernetes/pull/68498), [@feiskyer](https://github.com/feiskyer)) -* test/integration: add a basic test for covering CronJobs ([#66937](https://github.com/kubernetes/kubernetes/pull/66937), [@mortent](https://github.com/mortent)) -* Make service environment variables optional ([#68754](https://github.com/kubernetes/kubernetes/pull/68754), [@bradhoekstra](https://github.com/bradhoekstra)) - diff --git a/vendor/k8s.io/kubernetes/CHANGELOG-1.14.md b/vendor/k8s.io/kubernetes/CHANGELOG-1.14.md new file mode 100644 index 00000000000..261f5bf6c3e --- /dev/null +++ b/vendor/k8s.io/kubernetes/CHANGELOG-1.14.md @@ -0,0 +1,1478 @@ + +- [v1.14.0](#v1140) + - [Downloads for v1.14.0](#downloads-for-v1140) + - [Client Binaries](#client-binaries) + - [Server Binaries](#server-binaries) + - [Node Binaries](#node-binaries) +- [Kubernetes v1.14 Release Notes](#kubernetes-v114-release-notes) + - [1.14 What’s New](#114-what’s-new) + - [Known Issues](#known-issues) + - [Urgent Upgrade Notes](#urgent-upgrade-notes) + - [(No, really, you MUST do this before you upgrade)](#no-really-you-must-do-this-before-you-upgrade) + - [Deprecations](#deprecations) + - [Removed and deprecated metrics](#removed-and-deprecated-metrics) + - [Removed metrics](#removed-metrics) + - [Deprecated metrics](#deprecated-metrics) + - [Notable Features](#notable-features) + - [API Changes](#api-changes) + - [Detailed Bug Fixes And Changes](#detailed-bug-fixes-and-changes) + - [API Machinery](#api-machinery) + - [Apps](#apps) + - [Auth](#auth) + - [AWS](#aws) + - [Azure](#azure) + - [CLI](#cli) + - [Cloud Provider](#cloud-provider) + - [Cluster Lifecycle](#cluster-lifecycle) + - [GCP](#gcp) + - [Network](#network) + - [Node](#node) + - [Scheduling](#scheduling) + - [Storage](#storage) + - [Testing](#testing) + - [VMware](#vmware) + - [Windows](#windows) + - [External Dependencies](#external-dependencies) +- [v1.14.0-rc.1](#v1140-rc1) + - [Downloads for v1.14.0-rc.1](#downloads-for-v1140-rc1) + - [Client Binaries](#client-binaries-1) + - [Server Binaries](#server-binaries-1) + - [Node Binaries](#node-binaries-1) + - [Changelog since v1.14.0-beta.2](#changelog-since-v1140-beta2) + - [Action Required](#action-required) + - [Other notable changes](#other-notable-changes) +- [v1.14.0-beta.2](#v1140-beta2) + - [Downloads for v1.14.0-beta.2](#downloads-for-v1140-beta2) + - [Client Binaries](#client-binaries-2) + - [Server Binaries](#server-binaries-2) + - [Node Binaries](#node-binaries-2) + - [Changelog since v1.14.0-beta.1](#changelog-since-v1140-beta1) + - [Action Required](#action-required-1) + - [Other notable changes](#other-notable-changes-1) +- [v1.14.0-beta.1](#v1140-beta1) + - [Downloads for v1.14.0-beta.1](#downloads-for-v1140-beta1) + - [Client Binaries](#client-binaries-3) + - [Server Binaries](#server-binaries-3) + - [Node Binaries](#node-binaries-3) + - [Changelog since v1.14.0-alpha.3](#changelog-since-v1140-alpha3) + - [Action Required](#action-required-2) + - [Other notable changes](#other-notable-changes-2) +- [v1.14.0-alpha.3](#v1140-alpha3) + - [Downloads for v1.14.0-alpha.3](#downloads-for-v1140-alpha3) + - [Client Binaries](#client-binaries-4) + - [Server Binaries](#server-binaries-4) + - [Node Binaries](#node-binaries-4) + - [Changelog since v1.14.0-alpha.2](#changelog-since-v1140-alpha2) + - [Action Required](#action-required-3) + - [Other notable changes](#other-notable-changes-3) +- [v1.14.0-alpha.2](#v1140-alpha2) + - [Downloads for v1.14.0-alpha.2](#downloads-for-v1140-alpha2) + - [Client Binaries](#client-binaries-5) + - [Server Binaries](#server-binaries-5) + - [Node Binaries](#node-binaries-5) + - [Changelog since v1.14.0-alpha.1](#changelog-since-v1140-alpha1) + - [Action Required](#action-required-4) + - [Other notable changes](#other-notable-changes-4) +- [v1.14.0-alpha.1](#v1140-alpha1) + - [Downloads for v1.14.0-alpha.1](#downloads-for-v1140-alpha1) + - [Client Binaries](#client-binaries-6) + - [Server Binaries](#server-binaries-6) + - [Node Binaries](#node-binaries-6) + - [Changelog since v1.13.0](#changelog-since-v1130) + - [Action Required](#action-required-5) + - [Other notable changes](#other-notable-changes-5) + + + + + +# v1.14.0 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes.tar.gz) | `0ad264a46f185a9ff4db0393508a9598dab146f438b2cfdc7527592eb422870b8f26ade7ed089359c06741d998fcd730f897eae261f922c1a26d9fdc034d270d` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-src.tar.gz) | `c5175439decc1c5f54254572bfec3c9f61f39d6bd1cbc28d1f771f8f931b98f0c305f1871618ce7e9de9cf3bf8227e19dcf985a7e017c74d0d7ab4005b3dbd59` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-darwin-386.tar.gz) | `68bdba50a2b0be755e73e34ffc758fd419940adace096b1ddebd44a0eae2c7cdaed984965ea8f2145c1cab0be47bd6c72c2aeb73e51d449bfeb9ce1854b6c562` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-darwin-amd64.tar.gz) | `255bd93082b3ac5d69bd4e45c75c9f19efee50ad6add50837ff2987ce16cbcc485fad334c980b17f69e5a344ee50548e206f747441ad4a045aa65746c79d10ca` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-386.tar.gz) | `2bd115ad2503fdfe5482e4592fcc0c8a2aee36be5205220a13c8050cd1e55dd3c08377425dbe5a03e4ffd21cf603c739ec4eaf3e5b2514a725d095df46f25d98` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-amd64.tar.gz) | `a551adf8019b17fce5aff2b379fab3627588978a2d628b64ba1af6f3be1b435322368b00dd04fa739d01c341420016b93239cc0d4601cee86706d81d78cb4d7f` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-arm.tar.gz) | `24e771cd4074786330e07f5537259a28d0932102639326230d9161f12a8dc545638a55bc252771eb4e21e95e2c7f0918dc1238ac4dc70d3b8b33f093da7123ab` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-arm64.tar.gz) | `16204f2345ab3523bbe3c868f04806a97c111d940b2594aaff67cf73b4259040c7770d5b0e7bdb7ffd7389f87e5f090ae875bd0f192b07582f59a01a1df32f5b` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-ppc64le.tar.gz) | `cd9ce829d585dd3331c53d35015d4017026d5efd24b9bc2f342995245628598c98bd8b1f1d706b196a7b3046a44049d4aba6efb4b1000722bfd055bd8a662f1f` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-s390x.tar.gz) | `482c0a8e53b27f8922f58d89fb81842ddd9c3ffd120e635838992dc97d535e46b42e7d8c439cb739b7c1d63c8eed27d7e3bcac7126a6a96e56cc13d52f396328` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-windows-386.tar.gz) | `4446d666f999e979a7245e1b7ebf4817f7bd23aa247a38853a63b9cda473c7d4c2d376a2fd0df13ba15b740bf6b458cac14bd03dbf5a8151fc230e40c08294cf` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-windows-amd64.tar.gz) | `97f4789f21d10fd3df446e55bc489472dcd534c623bb40dc3cb20fe1edd74c1a89a50ce7caa4e5e0536f3b22d8698060bfe8c46f4adbd0e507349412e52664e8` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-amd64.tar.gz) | `25739802a641517a8bbb933b69000a943e8dd38e616b8778149dd0138737abacf377683da2ff35fdd0bbb305b88bc8fc711df20a2585720a43bb674ef36b034f` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-arm.tar.gz) | `c1dbba77a4ff5661eb36c55182a753b88ccc9b89ca31e162b06672126743cfea115b2f8ea8658b12344c36df17958e310c1b8efbdd7800f44f013e1e6f10477d` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-arm64.tar.gz) | `ad346bbe2a053c1106b51e5125698737dc7b76fa3bf439e14d4b4ba1c262678fede9c507c1098aac6e14d2c742c526c8d257fefa95dd3bbb1dff959e1dc7b9aa` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-ppc64le.tar.gz) | `49f9bd1c751620ecf4b5c152f287d72b36abca21fd1dfe99443d984473c6efa051a910de585c42f5447ef7c18d7dbd905a66c4f09ca6025f45e63f5e96e3ca2f` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-s390x.tar.gz) | `d6be847f2a0358755a69dea26181e5fc1a80ac4939b8b04a3875e1f6693553cad562452bfad21b2e380ddda1839ab846122bc3339d8bec0971f218f6e8f6dce9` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-amd64.tar.gz) | `75dc99919d1084d7d471a53ab60c743dc399145c99e83f37c6ba3c241b2c0b2ecc2c0d1b94690ff912e2a15b7c5595aa1d2d24c2fc439e06d85ff0246fb43b89` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-arm.tar.gz) | `49013a4f01be8086fff332099d94903082688b9b295d2f34468462656da4709360025e9d84b069410c608977ef803079af09af1f1e2678af7cb64e0fc02e9c9d` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-arm64.tar.gz) | `f8c0cb0c089cd1d1977c049002620b8cf748d193c1b76dd1d3aac01ff9273549c06a1e3dfe983dc40a95ee8b0719908e0cdf86ce17359b5f1b2426f2c55799a1` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-ppc64le.tar.gz) | `48fc02c856a192388877189a43eb1cda531e548bb035f9dfe6a1e3c8d3bcbd0f8e14f29382da45702cb28a91126d13ede42bd6e9159e12ecbd387ca9a58f9a92` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-s390x.tar.gz) | `d7c5f52cf602fd0c0d0f72d4cfe1ceaa4bad70a42f37f21c103f17c3448ceb2396c1bfa521eeeb9eef5f3173d84e4268704a247edd826d765f65e9a29a4f7f72` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-windows-amd64.tar.gz) | `120afdebe844b06a7437bb9788c3e7ea4fc6352aa18cc6a00e70f44f54664f844429f138870bc15862579da632632dff2e7323be7f627d9c33585a11ad2bed6b` + +# Kubernetes v1.14 Release Notes + +## 1.14 What’s New + +Support for Windows Nodes is Graduating to Stable ([#116](https://github.com/kubernetes/enhancements/issues/116) ) + +- Support for Windows Server 2019 for worker nodes and containers +- Support for out of tree networking with Azure-CNI, OVN-Kubernetes and Flannel +- Improved support for pods, service types, workload controllers and metrics/quotas to closely match the capabilities offered for Linux containers +kubernetes/enhancements: [#116](https://github.com/kubernetes/enhancements/issues/116) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20190103-windows-node-support.md)] + +Updated Plugin Mechanism for kubectl is Graduating to Stable ([#579](https://github.com/kubernetes/enhancements/issues/579)) + +- Extends functionality to kubectl to support extensions adding new commands as well as overriding specific subcommands (at any depth). +- Documentation fixes +kubernetes/enhancements: [#579](https://github.com/kubernetes/enhancements/issues/579) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/0024-kubectl-plugins.md#summary)] + +Durable Local Storage Management is Now GA ([#121](https://github.com/kubernetes/enhancements/issues/121#issuecomment-457396290)) + +- Makes locally attached (non-network attached) storage available as a persistent volume source. +- Allows users to take advantage of the typically cheaper and improved performance of persistent local storage +kubernetes/kubernetes: [#73525](https://github.com/kubernetes/kubernetes/pull/73525), [#74391](https://github.com/kubernetes/kubernetes/pull/74391), [#74769](http://github.com/kubernetes/kubernetes/pull/74769) +kubernetes/enhancements: [#121](https://github.com/kubernetes/enhancements/issues/121#issuecomment-457396290) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/20190124-local-persistent-volumes.md)] + +Pid Limiting is Graduating to Beta ([#757](https://github.com/kubernetes/enhancements/issues/757)) + +- Prevents a pod from starving pid resource +- Ability to isolate pid resources pod-to-pod and node-to-pod +kubernetes/kubernetes: [#73651](http://github.com/kubernetes/kubernetes/pull/73651) +kubernetes/enhancements: [#757](https://github.com/kubernetes/enhancements/issues/757) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20190129-pid-limiting.md)] + +Pod Priority and Preemption in Kubernetes ([#564](https://github.com/kubernetes/enhancements/issues/564)) + +- Pod priority and preemption enables Kubernetes scheduler to schedule more important Pods first and when cluster is out of resources, it removes less important pods to create room for more important ones. The importance is specified by priority. +kubernetes/kubernetes: [#73498](https://github.com/kubernetes/kubernetes/pull/73498), [#73555](https://github.com/kubernetes/kubernetes/pull/73555), [#74465](https://github.com/kubernetes/kubernetes/pull/74465) +kubernetes/enhancements: [#564](https://github.com/kubernetes/enhancements/issues/564) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20190131-pod-priority-preemption.md)] + +Pod Ready++ ([#580](https://github.com/kubernetes/enhancements/issues/580)) + +- Introduces extension point for external feedback on pod readiness. +kubernetes/kubernetes: [#74434](http://github.com/kubernetes/kubernetes/pull/74434), +kubernetes/enhancements: [#580](https://github.com/kubernetes/enhancements/issues/580) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md)] + +Kubeadm: Automate certificate copy between control planes in HA setups + +- Joining control plane nodes to a HA cluster can now be simplified by enabling the optional automatic copy of certificates from an existing control plane node. +- You can now use `kubeadm init --experimental-upload-certs` and `kubeadm join --experimental-control-plane --certificate-key`. +kubernetes/kubeadm: [#1373](https://github.com/kubernetes/kubeadm/issues/1373) +kubernetes/enhancements: [#357](https://github.com/kubernetes/enhancements/issues/357) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/20190122-Certificates-copy-for-kubeadm-join--control-plane.md)] + +Kubeadm: Expose the `kubeadm join` workflow as phases + +- The `kubeadm join` command can now be used in phases. Similar to the work that was done for `kubeadm init` in 1.13, in 1.14 the `join` phases can be now executed step-by-step/selectively using the `kubeadm join phase` sub-command. This makes it possible to further customize the workflow of joining nodes to the cluster. +kubernetes/kubeadm: [#1204](https://github.com/kubernetes/kubeadm/issues/1204) +kubernetes/enhancements: [kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md) + +## Known Issues + +- There is a known issue [coredns/coredns#2629](https://github.com/coredns/coredns/issues/2629) in CoreDNS 1.3.1, wherein if the Kubernetes API shuts down while CoreDNS is connected, CoreDNS will crash. The issue is fixed in CoreDNS 1.4.0 in [coredns/coredns#2529](https://github.com/coredns/coredns/pull/2529). +- Kubelet might fail to restart if an existing flexvolume mounted pvc contains a large number of directories, or is full. [#75019](https://github.com/kubernetes/kubernetes/pull/75019) + +## Urgent Upgrade Notes + +### (No, really, you MUST read this before you upgrade) + +- kube-apiserver: + - Default RBAC policy no longer grants access to discovery and permission-checking APIs (used by `kubectl auth can-i`) to *unauthenticated* users. Upgraded clusters preserve prior behavior, but cluster administrators wishing to grant unauthenticated users access in new clusters will need to explicitly opt-in to expose the discovery and/or permission-checking APIs: + - `kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticated` + - `kubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated` + - The deprecated --storage-versions flag has been removed. The storage versions will always be the default value built-in the kube-apiserver binary. ([#67678](https://github.com/kubernetes/kubernetes/pull/67678), [@caesarxuchao](https://github.com/caesarxuchao)) + - The deprecated `--repair-malformed-updates` flag has been removed ([#73663](https://github.com/kubernetes/kubernetes/pull/73663), [@danielqsj](https://github.com/danielqsj)) + - The `/swaggerapi/*` schema docs, deprecated since 1.7, have been removed in favor of the /openapi/v2 schema docs. ([#72924](https://github.com/kubernetes/kubernetes/pull/72924), [@liggitt](https://github.com/liggitt)) + - The /swagger.json and /swagger-2.0.0.pb-v1 schema documents, deprecated since v1.10, have been removed in favor of `/openapi/v2` ([#73148](https://github.com/kubernetes/kubernetes/pull/73148), [@liggitt](https://github.com/liggitt)) + - `kube-apiserver` now only aggregates openapi schemas from `/openapi/v2` endpoints of aggregated API servers. The fallback to aggregate from `/swagger.json` has been removed. Ensure aggregated API servers provide schema information via `/openapi/v2` (available since v1.10). ([#73441](https://github.com/kubernetes/kubernetes/pull/73441), [@roycaihw](https://github.com/roycaihw)) + - The OpenAPI definitions with the prefix "io.k8s.kubernetes.pkg" (deprecated since 1.9) have been removed. ([#74596](https://github.com/kubernetes/kubernetes/pull/74596), [@sttts](https://github.com/sttts)) + - The `ValidateProxyRedirects` feature was promoted to Beta and enabled by default. This feature restricts redirect-following from the apiserver to same-host redirects. If nodes are configured to respond to CRI streaming requests on a different host interface than what the apiserver makes requests on (only the case if not using the built-in dockershim & setting the kubelet flag `--redirect-container-streaming=true`), then these requests will be broken. In that case, the feature can be temporarily disabled until the node configuration is corrected. We suggest setting `--redirect-container-streaming=false` on the kubelet to avoid issues.([#72552](https://github.com/kubernetes/kubernetes/pull/72552), [@tallclair](https://github.com/tallclair)) + +- kubectl + - The deprecated `--show-all` flag to `kubectl get` has been removed ([#69255](https://github.com/kubernetes/kubernetes/pull/69255), [@Pingan2017](https://github.com/Pingan2017)) + +- kubelet + - The deprecated `--experimental-fail-swap-on` flag has been removed ([#69552](https://github.com/kubernetes/kubernetes/pull/69552), [@Pingan2017](https://github.com/Pingan2017)) + - Health check (liveness & readiness) probes using an HTTPGetAction will no longer follow redirects to different hostnames from the original probe request. Instead, these non-local redirects will be treated as a Success (the documented behavior). In this case an event with reason "ProbeWarning" will be generated, indicating that the redirect was ignored. If you were previously relying on the redirect to run health checks against different endpoints, you will need to perform the healthcheck logic outside the Kubelet, for instance by proxying the external endpoint rather than redirecting to it. ([#75416](https://github.com/kubernetes/kubernetes/pull/75416), [@tallclair](https://github.com/tallclair)) + +- client-go + - The deprecated versionless API group accessors (like `clientset.Apps()`) have been removed. Use an explicit version instead (like `clientset.AppsV1()`) ([#74422](https://github.com/kubernetes/kubernetes/pull/74422), [@liggitt](https://github.com/liggitt)) + - The disk-cached discovery client is moved from k8s.io/client-go/discovery to k8s.io/client-go/discovery/cached/disk. +The memory-cached discovery client is moved from k8s.io/client-go/discovery/cached to k8s.io/client-go/discovery/cached/memory. +([#72214](https://github.com/kubernetes/kubernetes/pull/72214), [@caesarxuchao](https://github.com/caesarxuchao)) + +- kubeadm + - `kubeadm alpha preflight` and `kubeadm alpha preflight node` are removed; you can now use `kubeadm join phase preflight` ([#73718](https://github.com/kubernetes/kubernetes/pull/73718), [@fabriziopandini](https://github.com/fabriziopandini)) + +- The deprecated taints `node.alpha.kubernetes.io/notReady` and `node.alpha.kubernetes.io/unreachable` are no longer supported or adjusted. These uses should be replaced with `node.kubernetes.io/not-ready` and `node.kubernetes.io/unreachable` + ([#73001](https://github.com/kubernetes/kubernetes/pull/73001), [@shivnagarajan](https://github.com/shivnagarajan)) + +- Any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) should be updated to use `pod` and `container` instead. `pod_name` and `container_name` labels will be present alongside `pod` and `container` labels for one transitional release and removed in the future. +([#69099](https://github.com/kubernetes/kubernetes/pull/69099), [@ehashman](https://github.com/ehashman)) + +## Deprecations + +- kubectl + - `kubectl convert` is deprecated and will be removed in v1.17. + - The `--export` flag for the `kubectl get` command is deprecated and will be removed in v1.18. ([#73787](https://github.com/kubernetes/kubernetes/pull/73787), [@soltysh](https://github.com/soltysh)) + +- kubelet + - OS and Arch information is now recorded in `kubernetes.io/os` and `kubernetes.io/arch` labels on Node objects. The previous labels (`beta.kubernetes.io/os` and `beta.kubernetes.io/arch`) are still recorded, but are deprecated and targeted for removal in v1.18. ([#73333](https://github.com/kubernetes/kubernetes/pull/73333), [@yujuhong](https://github.com/yujuhong)) + - The `--containerized` flag is deprecated and will be removed in a future release ([#74267](https://github.com/kubernetes/kubernetes/pull/74267), [@dims](https://github.com/dims)) + +- hyperkube + - The `--make-symlinks` flag is deprecated and will be removed in a future release. ([#74975](https://github.com/kubernetes/kubernetes/pull/74975), [@dims](https://github.com/dims)) +- API + - Ingress resources are now available via `networking.k8s.io/v1beta1`. Ingress resources in `extensions/v1beta1` are deprecated and will no longer be served in v1.18. Existing persisted data is available via the new API group/version ([#74057](https://github.com/kubernetes/kubernetes/pull/74057), [@liggitt](https://github.com/liggitt)) + - NetworkPolicy resources will no longer be served from `extensions/v1beta1` in v1.16. Migrate use to the `networking.k8s.io/v1` API, available since v1.8. Existing persisted data can be retrieved via the `networking.k8s.io/v1` API. + - PodSecurityPolicy resources will no longer be served from `extensions/v1beta1` in v1.16. Migrate to the `policy/v1beta1` API, available since v1.10. Existing persisted data can be retrieved via the `policy/v1beta1` API. + - DaemonSet, Deployment, and ReplicaSet resources will no longer be served from `extensions/v1beta1`, `apps/v1beta1`, or `apps/v1beta2` in v1.16. Migrate to the `apps/v1` API, available since v1.9. Existing persisted data can be retrieved via the `apps/v1` API. + - PriorityClass resources have been promoted to `scheduling.k8s.io/v1` with no changes. The `scheduling.k8s.io/v1beta1` and `scheduling.k8s.io/v1alpha1` versions are now deprecated and will stop being served by default in v1.17. ([#73555](https://github.com/kubernetes/kubernetes/pull/73555), [#74465](https://github.com/kubernetes/kubernetes/pull/74465), [@bsalamat](https://github.com/bsalamat)) + - The `export` query parameter for list API calls is deprecated and will be removed in v1.18 ([#73783](https://github.com/kubernetes/kubernetes/pull/73783), [@deads2k](https://github.com/deads2k)) +- The following features are now GA, and the associated feature gates are deprecated and will be removed in v1.15: + - `CustomPodDNS` + - `HugePages` + - `MountPropagation` + - `PersistentLocalVolumes` +- CoreDNS: The following directives or keywords are deprecated and will be removed in v1.15: + - `upstream` option of `kubernetes` plugin, becoming default behavior in v1.15. + - `proxy` plugin replaced by `forward` plugin + +## Removed and deprecated metrics + +### Removed metrics + +- `reflector_items_per_list` +- `reflector_items_per_watch` +- `reflector_last_resource_version` +- `reflector_list_duration_seconds` +- `reflector_lists_total` +- `reflector_short_watches_total` +- `reflector_watch_duration_seconds` +- `reflector_watches_total` + +### Deprecated metrics + +- `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds` +- `apiserver_proxy_tunnel_sync_latency_secs` -> `apiserver_proxy_tunnel_sync_duration_seconds` +- `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds` +- `kubelet_pod_worker_latency_microseconds` -> `kubelet_pod_worker_duration_seconds` +- `kubelet_pod_start_latency_microseconds` -> `kubelet_pod_start_duration_seconds` +- `kubelet_cgroup_manager_latency_microseconds` -> `kubelet_cgroup_manager_duration_seconds` +- `kubelet_pod_worker_start_latency_microseconds` -> `kubelet_pod_worker_start_duration_seconds` +- `kubelet_pleg_relist_latency_microseconds` -> `kubelet_pleg_relist_duration_seconds` +- `kubelet_pleg_relist_interval_microseconds` -> `kubelet_pleg_relist_interval_seconds` +- `kubelet_eviction_stats_age_microseconds` -> `kubelet_eviction_stats_age_seconds` +- `kubelet_runtime_operations` -> `kubelet_runtime_operations_total` +- `kubelet_runtime_operations_latency_microseconds` -> `kubelet_runtime_operations_duration_seconds` +- `kubelet_runtime_operations_errors` -> `kubelet_runtime_operations_errors_total` +- `kubelet_device_plugin_registration_count` -> `kubelet_device_plugin_registration_total` +- `kubelet_device_plugin_alloc_latency_microseconds` -> `kubelet_device_plugin_alloc_duration_seconds` +- `docker_operations` -> `docker_operations_total` +- `docker_operations_latency_microseconds` -> `docker_operations_latency_seconds` +- `docker_operations_errors` -> `docker_operations_errors_total` +- `docker_operations_timeout` -> `docker_operations_timeout_total` +- `network_plugin_operations_latency_microseconds` -> `network_plugin_operations_latency_seconds` +- `sync_proxy_rules_latency_microseconds` -> `sync_proxy_rules_latency_seconds` +- `apiserver_request_count` -> `apiserver_request_total` +- `apiserver_request_latencies` -> `apiserver_request_latency_seconds` +- `apiserver_request_latencies_summary` -> `apiserver_request_latency_seconds` +- `apiserver_dropped_requests` -> `apiserver_dropped_requests_total` +- `etcd_helper_cache_hit_count` -> `etcd_helper_cache_hit_total` +- `etcd_helper_cache_miss_count` -> `etcd_helper_cache_miss_total` +- `etcd_helper_cache_entry_count` -> `etcd_helper_cache_entry_total` +- `etcd_request_cache_get_latencies_summary` -> `etcd_request_cache_get_latency_seconds` +- `etcd_request_cache_add_latencies_summary` -> `etcd_request_cache_add_latency_seconds` +- `etcd_request_latencies_summary` -> `etcd_request_latency_seconds` +- `transformation_latencies_microseconds` -> `transformation_latencies_seconds` +- `data_key_generation_latencies_microseconds` -> `data_key_generation_latencies_seconds` + +## Notable Features + +- Increased the histogram resolution of the API server client certificate to accommodate short-lived (< 6h) client certificates. ([#74806](https://github.com/kubernetes/kubernetes/pull/74806), [@mxinden](https://github.com/mxinden)) +- Updated to use golang 1.12 ([#74632](https://github.com/kubernetes/kubernetes/pull/74632), [@cblecker](https://github.com/cblecker)) +- The `RunAsGroup` feature has been promoted to beta and enabled by default. `PodSpec` and `PodSecurityPolicy` objects can be used to control the primary GID of containers on supported container runtimes. ([#73007](https://github.com/kubernetes/kubernetes/pull/73007), [@krmayankk](https://github.com/krmayankk)) +- Added the same information to an init container as a standard container in a pod when using `PodPresets`. ([#71479](https://github.com/kubernetes/kubernetes/pull/71479), [@soggiest](https://github.com/soggiest)) +- kube-conformance image will now run ginkgo with the `--dryRun` flag if the container is run with the environment variable E2E_DRYRUN set. ([#74731](https://github.com/kubernetes/kubernetes/pull/74731), [@johnSchnake](https://github.com/johnSchnake)) +- Introduced dynamic volume provisioning shim for CSI migration ([#73653](https://github.com/kubernetes/kubernetes/pull/73653), [@ddebroy](https://github.com/ddebroy)) +- Applied resources from a directory containing kustomization.yaml ([#74140](https://github.com/kubernetes/kubernetes/pull/74140), [@Liujingfang1](https://github.com/Liujingfang1)) +- kubeadm: Allowed to download certificate secrets uploaded by `init` or `upload-certs` phase, allowing to transfer certificate secrets (certificates and keys) from the cluster to other master machines when creating HA deployments. ([#74168](https://github.com/kubernetes/kubernetes/pull/74168), [@ereslibre](https://github.com/ereslibre)) +- The `--quiet` option to `kubectl run` now suppresses resource deletion messages emitted when the `--rm` option is specified. ([#73266](https://github.com/kubernetes/kubernetes/pull/73266), [@awh](https://github.com/awh)) +- Added Custom Resource support to `kubectl autoscale` ([#72678](https://github.com/kubernetes/kubernetes/pull/72678), [@rmohr](https://github.com/rmohr)) +- Cinder volume limit can now be configured from node too ([#74542](https://github.com/kubernetes/kubernetes/pull/74542), [@gnufied](https://github.com/gnufied)) +- It is now possible to combine the `-f` and `-l` flags in `kubectl logs` ([#67573](https://github.com/kubernetes/kubernetes/pull/67573), [@m1kola](https://github.com/m1kola)) +- New conformance tests added for API Aggregation. ([#63947](https://github.com/kubernetes/kubernetes/pull/63947), [@jennybuckley](https://github.com/jennybuckley)) +- Moved fluentd-elasticsearch addon images to community controlled location ([#73819](https://github.com/kubernetes/kubernetes/pull/73819), [@coffeepac](https://github.com/coffeepac)) +- Removed local etcd members from the etcd cluster when `kubeadm reset` ([#74112](https://github.com/kubernetes/kubernetes/pull/74112), [@pytimer](https://github.com/pytimer)) +- kubeadm will now not fail preflight checks when running on >= 5.0 Linux kernel ([#74355](https://github.com/kubernetes/kubernetes/pull/74355), [@brb](https://github.com/brb)) +- Scheduler cache snapshot algorithm has been optimized to improve scheduling throughput. ([#74041](https://github.com/kubernetes/kubernetes/pull/74041), [@bsalamat](https://github.com/bsalamat)) +- It is now possible to upload certificates required to join a new control-plane to kubeadm-certs secret using the flag `--experimental-upload-certs` on `init` or upload-certs phase. ([#73907](https://github.com/kubernetes/kubernetes/pull/73907), [@yagonobre](https://github.com/yagonobre)) +[@RobertKrawitz](https://github.com/RobertKrawitz)) +- `kubectl auth reconcile` now outputs details about what changes are being made ([#71564](https://github.com/kubernetes/kubernetes/pull/71564), [@liggitt](https://github.com/liggitt)) +- Added Kustomize as a subcommand in kubectl ([#73033](https://github.com/kubernetes/kubernetes/pull/73033), [@Liujingfang1](https://github.com/Liujingfang1)) +- Added `kubelet_node_name` metrics. ([#72910](https://github.com/kubernetes/kubernetes/pull/72910), [@danielqsj](https://github.com/danielqsj)) +- Updated AWS SDK to v1.16.26 for ECR PrivateLink support ([#73435](https://github.com/kubernetes/kubernetes/pull/73435), [@micahhausler](https://github.com/micahhausler)) +- Expanded `kubectl wait` to work with more types of selectors. ([#71746](https://github.com/kubernetes/kubernetes/pull/71746), [@rctl](https://github.com/rctl)) +([#72832](https://github.com/kubernetes/kubernetes/pull/72832), [@MrHohn](https://github.com/MrHohn)) +- Added configuration for AWS endpoint fine control: ([#72245](https://github.com/kubernetes/kubernetes/pull/72245), [@ampsingram](https://github.com/ampsingram)) +- The CoreDNS configuration now has the forward plugin for proxy in the default configuration instead of the proxy plugin. ([#73267](https://github.com/kubernetes/kubernetes/pull/73267), [@rajansandeep](https://github.com/rajansandeep)) +- Added alpha field storageVersionHash to the discovery document for each resource. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#73191](https://github.com/kubernetes/kubernetes/pull/73191), [@caesarxuchao](https://github.com/caesarxuchao)) +- If you are running the cloud-controller-manager and you have the `pvlabel.kubernetes.io` alpha Initializer enabled, you must now enable PersistentVolume labeling using the `PersistentVolumeLabel` admission controller instead. You can do this by adding `PersistentVolumeLabel` in the `--enable-admission-plugins` kube-apiserver flag. ([#73102](https://github.com/kubernetes/kubernetes/pull/73102), [@andrewsykim](https://github.com/andrewsykim)) +- kubectl supports copying files with wild card ([#72641](https://github.com/kubernetes/kubernetes/pull/72641), [@dixudx](https://github.com/dixudx)) +- kubeadm now attempts to detect an installed CRI by its usual domain socket, so that `--cri-socket` can be omitted from the command line if Docker is not used and there is a single CRI installed. ([#69366](https://github.com/kubernetes/kubernetes/pull/69366), [@rosti](https://github.com/rosti)) +- `CSINodeInfo` and `CSIDriver` CRDs have been installed in the local cluster. ([#72584](https://github.com/kubernetes/kubernetes/pull/72584), [@xing-yang](https://github.com/xing-yang)) +- Node OS/arch labels have been promoted to GA ([#73048](https://github.com/kubernetes/kubernetes/pull/73048), [@yujuhong](https://github.com/yujuhong)) +- Added support for max attach limit for Cinder ([#72980](https://github.com/kubernetes/kubernetes/pull/72980), [@gnufied](https://github.com/gnufied)) +- Enabled mTLS encryption between etcd and kube-apiserver in GCE ([#70144](https://github.com/kubernetes/kubernetes/pull/70144), [@wenjiaswe](https://github.com/wenjiaswe)) +- Added `ResourceVersion` as a precondition for delete in order to ensure a delete fails if an unobserved change happens to an object. ([#74040](https://github.com/kubernetes/kubernetes/pull/74040), [@ajatprabha](https://github.com/ajatprabha)) +- There is now support for collecting pod logs under `/var/log/pods/NAMESPACE_NAME_UID` to stackdriver with `k8s_pod` resource type. ([#74502](https://github.com/kubernetes/kubernetes/pull/74502), [@Random-Liu](https://github.com/Random-Liu)) +- Changed CRI pod log directory from `/var/log/pods/UID` to `/var/log/pods/NAMESPACE_NAME_UID`. ([#74441](https://github.com/kubernetes/kubernetes/pull/74441), [@Random-Liu](https://github.com/Random-Liu)) +- `RuntimeClass` has been promoted to beta, and is enabled by default. ([#75003](https://github.com/kubernetes/kubernetes/pull/75003), [@tallclair](https://github.com/tallclair)) +- New "dry_run" metric label (indicating the value of the dryRun query parameter) has been added into the metrics: +* apiserver_request_total +* apiserver_request_duration_seconds +New "APPLY" value for the "verb" metric label which indicates a PATCH with "Content-Type: apply-patch+yaml". This value is experimental and will only be present if the ServerSideApply alpha feature is enabled. ([#74997](https://github.com/kubernetes/kubernetes/pull/74997), [@jennybuckley](https://github.com/jennybuckley)) +- GCE: bumped COS image version to `cos-beta-73-11647-64-0` ([#75149](https://github.com/kubernetes/kubernetes/pull/75149), [@yguo0905](https://github.com/yguo0905)) +- Added alpha support for ephemeral CSI inline volumes that are embedded in pod specs. ([#74086](https://github.com/kubernetes/kubernetes/pull/74086), [@vladimirvivien](https://github.com/vladimirvivien)) + +## API Changes + +- [CRI] Added a new field called `runtime_handler` into `PodSandbox` and `PodSandboxStatus` to track the `RuntimeClass` information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng)) + +## Detailed Bug Fixes And Changes + +### API Machinery + +- client-go: `PortForwarder.GetPorts()` now contain correct local port if no local port was initially specified when setting up the port forwarder ([#73676](https://github.com/kubernetes/kubernetes/pull/73676), [@martin-helmich](https://github.com/martin-helmich)) +- Fixed an issue with missing `apiVersion/kind` in object data sent to admission webhooks ([#74448](https://github.com/kubernetes/kubernetes/pull/74448), [@liggitt](https://github.com/liggitt)) +- Prometheus metrics for `crd_autoregister`, `crd_finalizer` and `crd_naming_condition_controller` are exported. ([#71767](https://github.com/kubernetes/kubernetes/pull/71767), [@roycaihw](https://github.com/roycaihw)) +- Fixed admission metrics in seconds. ([#72343](https://github.com/kubernetes/kubernetes/pull/72343), [@danielqsj](https://github.com/danielqsj)) +- When a watch is closed by an HTTP2 load balancer and we are told to go away, skip printing the message to stderr by default. +- Spedup kubectl by >10 when calling out to kube-apiserver for discovery information. ([#73345](https://github.com/kubernetes/kubernetes/pull/73345), [@sttts](https://github.com/sttts)) +- Fixed watch to not send the same set of events multiple times causing watcher to go back in time ([#73845](https://github.com/kubernetes/kubernetes/pull/73845), [@wojtek-t](https://github.com/wojtek-t)) +([#73277](https://github.com/kubernetes/kubernetes/pull/73277), [@smarterclayton](https://github.com/smarterclayton)) +- Fix kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts)) +- Add a configuration field to shorten the timeout of validating/mutating admission webhook call. The timeout value must be between 1 and 30 seconds. Default to 30 seconds when unspecified. ([#74562](https://github.com/kubernetes/kubernetes/pull/74562), [@roycaihw](https://github.com/roycaihw)) +- The apiserver, including both the kube-apiserver and apiservers built with the generic apiserver library, will now return 413 RequestEntityTooLarge error if a json patch contains more than 10,000 operations. ([#74000](https://github.com/kubernetes/kubernetes/pull/74000), [@caesarxuchao](https://github.com/caesarxuchao)) +- Fixed an error processing watch events when running skewed apiservers ([#73482](https://github.com/kubernetes/kubernetes/pull/73482), [@liggitt](https://github.com/liggitt)) +- jsonpath expressions containing `[start:end:step]` slice are now evaluated correctly ([#73149](https://github.com/kubernetes/kubernetes/pull/73149), [@liggitt](https://github.com/liggitt)) +- `metadata.deletionTimestamp` is no longer moved into the future when issuing repeated DELETE requests against a resource containing a finalizer. ([#73138](https://github.com/kubernetes/kubernetes/pull/73138), [@liggitt](https://github.com/liggitt)) +- Fixed kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts)) +- `watch.Until` now works for long durations. ([#67350](https://github.com/kubernetes/kubernetes/pull/67350), [@tnozicka](https://github.com/tnozicka)) +- Added duration metric for CRD webhook converters. ([#74376](https://github.com/kubernetes/kubernetes/pull/74376), [@mbohlool](https://github.com/mbohlool)) +- Fixed keymutex issues which may crash in some platforms. ([#74348](https://github.com/kubernetes/kubernetes/pull/74348), [@danielqsj](https://github.com/danielqsj)) +- Considerably reduced the CPU load in kube-apiserver while aggregating OpenAPI specifications from aggregated API servers. ([#71223](https://github.com/kubernetes/kubernetes/pull/71223), [@sttts](https://github.com/sttts)) +- Fixed graceful apiserver shutdown to not drop outgoing bytes before the process terminates. ([#72970](https://github.com/kubernetes/kubernetes/pull/72970), [@sttts](https://github.com/sttts)) + +### Apps + +- Added deleting pods created by `DaemonSet` assigned to not existing nodes. ([#73401](https://github.com/kubernetes/kubernetes/pull/73401), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +- Pod eviction now honors graceful deletion by default if no delete options are provided in the eviction request. ([#72730](https://github.com/kubernetes/kubernetes/pull/72730), [@liggitt](https://github.com/liggitt)) + +### Auth + +- Added `kubectl auth can-i --list` option, which allows users to know what actions they can do in specific namespaces. ([#64820](https://github.com/kubernetes/kubernetes/pull/64820), [@WanLinghao](https://github.com/WanLinghao)) +- The `rules` field in RBAC `Role` and `ClusterRole` objects is now correctly reported as optional in the openapi schema. ([#73250](https://github.com/kubernetes/kubernetes/pull/73250), [@liggitt](https://github.com/liggitt)) +- `system:kube-controller-manager` and `system:kube-scheduler` users are now permitted to perform delegated authentication/authorization checks by default RBAC policy ([#72491](https://github.com/kubernetes/kubernetes/pull/72491), [@liggitt](https://github.com/liggitt)) +- Error messages returned in authentication webhook status responses are now correctly included in the apiserver log ([#73595](https://github.com/kubernetes/kubernetes/pull/73595), [@liggitt](https://github.com/liggitt)) +- Fixed use of webhook admission plugins with multi-version custom resources ([#74154](https://github.com/kubernetes/kubernetes/pull/74154), [@mbohlool](https://github.com/mbohlool)) + +### AWS + +- Prevented AWS Network Load Balancer security groups ingress rules to be deleted by ensuring target groups are tagged. ([#73594](https://github.com/kubernetes/kubernetes/pull/73594), [@masterzen](https://github.com/masterzen)) +- AWS ELB health checks will now use HTTPS/SSL protocol for HTTPS/SSL backends. ([#70309](https://github.com/kubernetes/kubernetes/pull/70309), [@2rs2ts](https://github.com/2rs2ts)) + +### Azure + +- Fixed failure to detach Azure disk when there is server side error ([#74398](https://github.com/kubernetes/kubernetes/pull/74398), [@andyzhangx](https://github.com/andyzhangx)) +- Fixed subnet annotation checking for Azure internal loadbalancer ([#74498](https://github.com/kubernetes/kubernetes/pull/74498), [@feiskyer](https://github.com/feiskyer)) +- Fixed mixed protocol issue for Azure load balancer ([#74200](https://github.com/kubernetes/kubernetes/pull/74200), [@andyzhangx](https://github.com/andyzhangx)) +- Fixed Azure accounts timeout issue when there is no out-bound IP ([#74191](https://github.com/kubernetes/kubernetes/pull/74191), [@andyzhangx](https://github.com/andyzhangx)) +- Fixed Azure Container Registry anonymous repo image pull error ([#74715](https://github.com/kubernetes/kubernetes/pull/74715), [@andyzhangx](https://github.com/andyzhangx)) +- Fixed parse devicePath issue on Azure Disk ([#74499](https://github.com/kubernetes/kubernetes/pull/74499), [@andyzhangx](https://github.com/andyzhangx)) + +### CLI + +- Fixed `--help` flag parsing ([#74682](https://github.com/kubernetes/kubernetes/pull/74682), [@soltysh](https://github.com/soltysh)) +- Fixed a bug where `kubectl describe` cannot obtain the event messages for a static pod ([#74156](https://github.com/kubernetes/kubernetes/pull/74156), [@gaorong](https://github.com/gaorong)) +- Fixed panic when performing a `set env` operation on a `--local` resource ([#65636](https://github.com/kubernetes/kubernetes/pull/65636), [@juanvallejo](https://github.com/juanvallejo)) +- Missing directories listed in a user's PATH are no longer considered errors and are instead logged by the `kubectl plugin list` command when listing available plugins. ([#73542](https://github.com/kubernetes/kubernetes/pull/73542), [@juanvallejo](https://github.com/juanvallejo)) +- Now users can get object info like: + + ```bash + a. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0:3].name + b. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[-2:].name + ``` + +([#73063](https://github.com/kubernetes/kubernetes/pull/73063), [@WanLinghao](https://github.com/WanLinghao)) + +- The `kubectl api-resources` command will no longer fail to display any resources on a single failure ([#73035](https://github.com/kubernetes/kubernetes/pull/73035), [@juanvallejo](https://github.com/juanvallejo)) +- kubectl now loads config file once and uses persistent client config ([#71117](https://github.com/kubernetes/kubernetes/pull/71117), [@dixudx](https://github.com/dixudx)) +- Printed `SizeLimit` of `EmptyDir` in `kubectl describe pod` outputs. ([#69279](https://github.com/kubernetes/kubernetes/pull/69279), [@dtaniwaki](https://github.com/dtaniwaki)) +- `kubectl delete --all-namespaces` is now a recognized flag. ([#73716](https://github.com/kubernetes/kubernetes/pull/73716), [@deads2k](https://github.com/deads2k)) + +### Cloud Provider + +- Fixed a bug that caused PV allocation on non-English vSphere installations to fail ([#73115](https://github.com/kubernetes/kubernetes/pull/73115), [@alvaroaleman](https://github.com/alvaroaleman)) + +### Cluster Lifecycle + +- kubeadm: fixed nil pointer dereference caused by a bug in url parsing ([#74454](https://github.com/kubernetes/kubernetes/pull/74454), [@bart0sh](https://github.com/bart0sh)) +- CoreDNS adds readinessProbe which prevents loadbalancing to unready pods, and also allows rolling updates to work as expected. ([#74137](https://github.com/kubernetes/kubernetes/pull/74137), [@rajansandeep](https://github.com/rajansandeep)) +- kubeadm no longer allows using v1alpha3 configs for anything else than converting them to `v1beta1`. ([#74025](https://github.com/kubernetes/kubernetes/pull/74025), [@rosti](https://github.com/rosti)) +- kubeadm: now allows the usage of `--kubeconfig-dir` and `--config` flags on kubeadm init ([#73998](https://github.com/kubernetes/kubernetes/pull/73998), [@yagonobre](https://github.com/yagonobre)) +- kubeadm: all master components are now exclusively relying on the `PriorityClassName` pod spec for annotating them as cluster critical components. Since `scheduler.alpha.kubernetes.io/critical-pod` annotation is no longer supported by Kubernetes 1.14 this annotation is no longer added to master components. ([#73857](https://github.com/kubernetes/kubernetes/pull/73857), [@ereslibre](https://github.com/ereslibre)) +- kubeadm no longer dumps backtrace if it fails to remove the running containers on reset. ([#73951](https://github.com/kubernetes/kubernetes/pull/73951), [@rosti](https://github.com/rosti)) +- kubeadm: fixed a bug in the underlying library for diff related to characters like '%' ([#73941](https://github.com/kubernetes/kubernetes/pull/73941), [@neolit123](https://github.com/neolit123)) +- Scale max-inflight now limits together with master VM sizes. ([#73268](https://github.com/kubernetes/kubernetes/pull/73268), [@wojtek-t](https://github.com/wojtek-t)) +- kubeadm reset: fixed a crash caused by the absence of a configuration file ([#73636](https://github.com/kubernetes/kubernetes/pull/73636), [@bart0sh](https://github.com/bart0sh)) +- CoreDNS is now version 1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610), [@rajansandeep](https://github.com/rajansandeep)) +- kubeadm: When certificates are present in joining a new control plane now ensures that they match at least the required SANs ([#73093](https://github.com/kubernetes/kubernetes/pull/73093), [@ereslibre](https://github.com/ereslibre)) +- kubeadm: added back `--cert-dir` option for `kubeadm init phase certs sa` ([#73239](https://github.com/kubernetes/kubernetes/pull/73239), [@mattkelly](https://github.com/mattkelly)) +- kubeadm: now explicitly waits for `etcd` to have grown when joining a new control plane ([#72984](https://github.com/kubernetes/kubernetes/pull/72984), [@ereslibre](https://github.com/ereslibre)) +- kubeadm: now pulls images when joining a new control plane instance ([#72870](https://github.com/kubernetes/kubernetes/pull/72870), [@MalloZup](https://github.com/MalloZup)) +- Exited kube-proxy when configuration file changes ([#59176](https://github.com/kubernetes/kubernetes/pull/59176), [@dixudx](https://github.com/dixudx)) +- kube-addon-manager was updated to v9.0, and now uses kubectl v1.13.2 and prunes workload resources via the apps/v1 API ([#72978](https://github.com/kubernetes/kubernetes/pull/72978), [@liggitt](https://github.com/liggitt)) +- kubeadm: Now allows certain certs/keys to be missing on the secret when transferring secrets using `--experimental-upload-certs` feature ([#75415](https://github.com/kubernetes/kubernetes/pull/75415), [@ereslibre](https://github.com/ereslibre)) + +### GCP + +- Fixed liveness probe in fluentd-gcp cluster addon ([#74522](https://github.com/kubernetes/kubernetes/pull/74522), [@Pluies](https://github.com/Pluies)) +- Reduced GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#72062](https://github.com/kubernetes/kubernetes/pull/72062), [@jpbetz](https://github.com/jpbetz)) + +### Network + +- Reduces the cache TTL for negative responses to 5s minimum. ([#74093](https://github.com/kubernetes/kubernetes/pull/74093), [@blakebarnett](https://github.com/blakebarnett)) + +### Node + +- Fixed help message for `--container-runtime-endpoint`: only unix socket is support on Linux. ([#74712](https://github.com/kubernetes/kubernetes/pull/74712), [@feiskyer](https://github.com/feiskyer)) +- Image garbage collection no longer fails for images with only one tag but more than one repository associated. ([#70647](https://github.com/kubernetes/kubernetes/pull/70647), [@corvus-ch](https://github.com/corvus-ch)) +- Re-issued Allocate grpc calls before starting a container that requests device-plugin resources if the cached state is missing. ([#73824](https://github.com/kubernetes/kubernetes/pull/73824), [@jiayingz](https://github.com/jiayingz)) +- [CRI] Added a new field called `runtime_handler` into `PodSandbox` and `PodSandboxStatus` to track the `RuntimeClass` information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng)) +- Kubelet now tries to stop containers in unknown state once before restart or remove. ([#73802](https://github.com/kubernetes/kubernetes/pull/73802), [@Random-Liu](https://github.com/Random-Liu)) +- When pleg channel is full, events are now discarded and count is recorded ([#72709](https://github.com/kubernetes/kubernetes/pull/72709), [@changyaowei](https://github.com/changyaowei)) +- Fixed the unexpected `NotReady` status when Node's iops is full if the runtime is dockershim. ([#74389](https://github.com/kubernetes/kubernetes/pull/74389), [@answer1991](https://github.com/answer1991)) +- Fixed #73264 `cpuPeriod` was not reset, but used as set via flag, although it was disabled via alpha gate ([#73342](https://github.com/kubernetes/kubernetes/pull/73342), [@szuecs](https://github.com/szuecs)) +- Updated kubelet CLI summary documentation and generated webpage ([#73256](https://github.com/kubernetes/kubernetes/pull/73256), [@deitch](https://github.com/deitch)) +- Set a low `oom_score_adj` for containers in pods with system-critical priorities ([#73758](https://github.com/kubernetes/kubernetes/pull/73758), [@sjenning](https://github.com/sjenning)) +- kubelet: Resolved hang/timeout issues when running large numbers of pods with unique `ConfigMap/Secret` references ([#74755](https://github.com/kubernetes/kubernetes/pull/74755), [@liggitt](https://github.com/liggitt)) +- Events reported for container creation, start, and stop now report the container name in the message and are more consistently formatted. ([#73892](https://github.com/kubernetes/kubernetes/pull/73892), [@smarterclayton](https://github.com/smarterclayton)) +- Removed stale `OutOfDisk` condition from kubelet side ([#72507](https://github.com/kubernetes/kubernetes/pull/72507), [@dixudx](https://github.com/dixudx)) +- Fixed the setting of `NodeAddresses` when using the vSphere CloudProvider and nodes that have multiple IP addresses. ([#70805](https://github.com/kubernetes/kubernetes/pull/70805), [@danwinship](https://github.com/danwinship)) +- Fixed dockershim panic issues when deleting docker images. ([#75367](https://github.com/kubernetes/kubernetes/pull/75367), [@feiskyer](https://github.com/feiskyer)) +- Kubelet no longer watches `ConfigMaps` and `Secrets` for terminated pods, in worst scenario causing it to not be able to send other requests to kube-apiserver ([#74809](https://github.com/kubernetes/kubernetes/pull/74809), [@oxddr](https://github.com/oxddr)) +- A new `TaintNodesByCondition` admission plugin taints newly created Node objects as "not ready", to fix a race condition that could cause pods to be scheduled on new nodes before their taints were updated to accurately reflect their reported conditions. This admission plugin is enabled by default if the `TaintNodesByCondition` feature is enabled. ([#73097](https://github.com/kubernetes/kubernetes/pull/73097), [@bsalamat](https://github.com/bsalamat)) +- kubelet now accepts `pid=` in the `--system-reserved` and `--kube-reserved` options to ensure that the specified number of process IDs will be reserved for the system as a whole and for Kubernetes system daemons respectively. Please reference `Kube Reserved` and `System Reserved` in `Reserve Compute Resources for System Daemons` in the Kubernetes documentation for general discussion of resource reservation. To utilize this functionality, you must set the feature gate `SupportNodePidsLimit=true` ([#73651](https://github.com/kubernetes/kubernetes/pull/73651) + +### Scheduling + +- Improved fairness of the scheduling queue by placing pods which are attempted recently behind other pods with the same priority. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [@denkensk](https://github.com/denkensk)) +- Improved scheduler robustness to ensure that unschedulable pods are reconsidered for scheduling when appropriate. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [#72558](https://github.com/kubernetes/kubernetes/pull/72558), [@denkensk](https://github.com/denkensk), [#73078](https://github.com/kubernetes/kubernetes/pull/73078), [@Huang-Wei](https://github.com/Huang-Wei)) + +### Storage + +- Fixed scanning of failed iSCSI targets. ([#74306](https://github.com/kubernetes/kubernetes/pull/74306), [@jsafrane](https://github.com/jsafrane)) +- StorageOS volume plugin updated to fix an issue where volume mount succeeds even if request to mount via StorageOS API fails. ([#69782](https://github.com/kubernetes/kubernetes/pull/69782), [@darkowlzz](https://github.com/darkowlzz)) +- Ensured directories on volumes are group-executable when using `fsGroup` ([#73533](https://github.com/kubernetes/kubernetes/pull/73533), [@mxey](https://github.com/mxey)) +- Updated CSI version to 1.1 ([#75391](https://github.com/kubernetes/kubernetes/pull/75391), [@gnufied](https://github.com/gnufied)) +- Ensured that volumes get provisioned based on the zone information provided in `allowedTopologies`. ([#72731](https://github.com/kubernetes/kubernetes/pull/72731), [@skarthiksrinivas](https://github.com/skarthiksrinivas)) +- Extended the `VolumeSubpathEnvExpansion` alpha feature to support environment variable expansion ([#71351](https://github.com/kubernetes/kubernetes/pull/71351), [@kevtaylor](https://github.com/kevtaylor)) +- Fixed a bug that prevented deletion of dynamically provisioned volumes in Quobyte backends. ([#68925](https://github.com/kubernetes/kubernetes/pull/68925), [@casusbelli](https://github.com/casusbelli)) + +### Testing + +- e2e storage tests now run faster and are easier to read ([#72434](https://github.com/kubernetes/kubernetes/pull/72434), [@pohly](https://github.com/pohly)) +- `e2e.test` now rejects unknown `--provider` values instead of merely warning about them. An empty provider name is not accepted anymore and was replaced by `skeleton` (a provider with no special behavior). ([#73402](https://github.com/kubernetes/kubernetes/pull/73402), [@pohly](https://github.com/pohly)) +- Updated to go1.11.5 ([#73326](https://github.com/kubernetes/kubernetes/pull/73326), [@ixdy](https://github.com/ixdy)) +- Updated to use go1.12.1 ([#75413](https://github.com/kubernetes/kubernetes/pull/75413), [@BenTheElder](https://github.com/BenTheElder)) +- e2e tests that require SSH may now be used against clusters that have nodes without external IP addresses by setting the environment variable `KUBE_SSH_BASTION` to the `host:port` of a machine that is allowed to SSH to those nodes. The same private key that the test would use is used for the bastion host. The test connects to the bastion and then tunnels another SSH connection to the node. ([#72286](https://github.com/kubernetes/kubernetes/pull/72286), [@smarterclayton](https://github.com/smarterclayton)) +- `PidPressure` now evicts pods from lowest priority to highest priority ([#72844](https://github.com/kubernetes/kubernetes/pull/72844), [@dashpole](https://github.com/dashpole)) +- Split up the mondo `kubernetes-test` tarball into `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs. ([#74065](https://github.com/kubernetes/kubernetes/pull/74065), [@ixdy](https://github.com/ixdy)) + +### VMware + +- Applied zone labels to vSphere Volumes automatically. The zone labels are visible on the PV: ([#72687](https://github.com/kubernetes/kubernetes/pull/72687), [@subramanian-neelakantan](https://github.com/subramanian-neelakantan)) + +### Windows + +Support for Windows nodes and Windows containers went going stable. + +Support for Group Managed Service Accounts (GMSA) for Windows containers in Kubernetes. GMSA are a specific type of Active Directory account that provides automatic password management, simplified service principal name (SPN) management, and the ability to delegate the management to other administrators across multiple servers. + +- Fixed smb remount and unmount issues on Windows ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx), [#75087](https://github.com/kubernetes/kubernetes/pull/75087), [@andyzhangx](https://github.com/andyzhangx)) +- Added network stats for Windows nodes and containers ([#74788](https://github.com/kubernetes/kubernetes/pull/74788), [@feiskyer](https://github.com/feiskyer)) +- The new test `[sig-network] DNS should now provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance]` will validate the host entries set in the ``/etc/hosts`` file (pod's FQDN and hostname), which should be managed by Kubelet. ([#72729](https://github.com/kubernetes/kubernetes/pull/72729), [@bclau](https://github.com/bclau)) +- Allowed the kubelet to pass Windows GMSA credentials down to Docker ([#73726](https://github.com/kubernetes/kubernetes/pull/73726), [@wk8](https://github.com/wk8)) +- Added kube-proxy support for overlay networking and DSR in Windows and new flags for `network-name`, `source-vip`, and `enable-dsr`. ([#70896](https://github.com/kubernetes/kubernetes/pull/70896), [@ksubrmnn](https://github.com/ksubrmnn)) +- windows: Ensured graceful termination when being run as windows service ([#73292](https://github.com/kubernetes/kubernetes/pull/73292), [@steffengy](https://github.com/steffengy)) +- vSphere cloud provider now correctly retrieves the VM's UUID when running on Windows ([#71147](https://github.com/kubernetes/kubernetes/pull/71147), [@benmoss](https://github.com/benmoss)) +- Kubelet: added `usageNanoCores` from CRI stats provider ([#73659](https://github.com/kubernetes/kubernetes/pull/73659), [@feiskyer](https://github.com/feiskyer)) +- Introduced support for Windows nodes into the cluster bringup scripts for GCE. ([#73442](https://github.com/kubernetes/kubernetes/pull/73442), [@pjh](https://github.com/pjh)) +- Added network stats for Windows nodes and pods. ([#70121](https://github.com/kubernetes/kubernetes/pull/70121), [@feiskyer](https://github.com/feiskyer)) +- CoreDNS is only officially supported on Linux at this time. As such, when kubeadm is used to deploy this component into your kubernetes cluster, it will be restricted (using `nodeSelectors`) to run only on nodes with that operating system. This ensures that in clusters which include Windows nodes, the scheduler will not ever attempt to place CoreDNS pods on these machines, reducing setup latency and enhancing initial cluster stability. ([#69940](https://github.com/kubernetes/kubernetes/pull/69940), [@MarcPow](https://github.com/MarcPow)) + +## External Dependencies + +- Default etcd server and client have been updated to v3.3.10. ([#71615](https://github.com/kubernetes/kubernetes/pull/71615), [#70168](https://github.com/kubernetes/kubernetes/pull/70168)) +- The list of validated docker versions has changed. 1.11.1 and 1.12.1 have been removed. The current list is 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09. ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [#72831](https://github.com/kubernetes/kubernetes/pull/72831)) +- The default Go version was updated to 1.12.1. ([#75422](https://github.com/kubernetes/kubernetes/pull/75422)) +- CNI has been updated to v0.7.5 ([#75455](https://github.com/kubernetes/kubernetes/pull/75455)) +- CSI has been updated to v1.1.0. ([#75391](https://github.com/kubernetes/kubernetes/pull/75391)) +- The dashboard add-on has been updated to v1.10.1. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495)) +- Cluster Autoscaler has been updated to v1.14.0 ([#75480](https://github.com/kubernetes/kubernetes/pull/75480)) +- kube-dns is unchanged at v1.14.13 since Kubernetes 1.12 ([#68900](https://github.com/kubernetes/kubernetes/pull/68900)) +- Influxdb is unchanged at v1.3.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) +- Grafana is unchanged at v4.4.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) +- Kibana has been upgraded to v6.6.1. ([#71251](https://github.com/kubernetes/kubernetes/pull/71251)) +- CAdvisor has been updated to v0.33.1 ([#75140](https://github.com/kubernetes/kubernetes/pull/75140)) +- fluentd-gcp-scaler is unchanged at v0.5.0 since Kubernetes 1.13 ([#68837](https://github.com/kubernetes/kubernetes/pull/68837)) +- Fluentd in fluentd-elasticsearch has been upgraded to v1.3.3 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180)) +- fluentd-elasticsearch has been updated to v2.4.0 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180)) +- The fluent-plugin-kubernetes_metadata_filter plugin in fluentd-elasticsearch has been updated to v2.1.6 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180)) +- fluentd-gcp is unchanged at v3.2.0 since Kubernetes 1.13 ([#70954](https://github.com/kubernetes/kubernetes/pull/70954)) +- OIDC authentication is unchanged at coreos/go-oidc v2 since Kubernetes 1.10 ([#58544](https://github.com/kubernetes/kubernetes/pull/58544)) +- Calico is unchanged at v3.3.1 since Kubernetes 1.13 ([#70932](https://github.com/kubernetes/kubernetes/pull/70932)) +- crictl on GCE is unchanged at v1.12.0 since Kubernetes 1.13 ([#69033](https://github.com/kubernetes/kubernetes/pull/69033)) +- CoreDNS has been updated to v1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610)) +- event-exporter has been updated to v0.2.3 ([#67691](https://github.com/kubernetes/kubernetes/pull/67691)) +- Es-image has been updated to Elasticsearch 6.6.1 ([#71252](https://github.com/kubernetes/kubernetes/pull/71252)) +- metrics-server remains unchanged at v0.3.1 since Kubernetes 1.12 ([#68746](https://github.com/kubernetes/kubernetes/pull/68746)) +- GLBC remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) +- Ingress-gce remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) +- ip-masq-agen remains unchanged at v2.1.1 since Kubernetes 1.12 ([#67916](https://github.com/kubernetes/kubernetes/pull/67916)) + +- [v1.14.0-rc.1](#v1140-rc1) +- [v1.14.0-beta.2](#v1140-beta2) +- [v1.14.0-beta.1](#v1140-beta1) +- [v1.14.0-alpha.3](#v1140-alpha3) +- [v1.14.0-alpha.2](#v1140-alpha2) +- [v1.14.0-alpha.1](#v1140-alpha1) + + + +# v1.14.0-rc.1 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-rc.1 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes.tar.gz) | `5cb5e8b14b301864063fd7531ab3b755fea054f540c55ecce70ac49fb59193488575eb42ba89c8b4a44f6f2d005602ffc50ac286354a16df27637dd2e05f90f0` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-src.tar.gz) | `395424c2bcdb5e242995b18e8d6e5c00002ce2cb5a3964c28da0a4a181fada73ffceaccedb1fa9799be9b3c4fb5b451010cba65af4d7385c25c8c8f0298218fc` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `ea304f3f8188db30cddd5423b25dc434b8f05315103f773619a65f83bee872581d83d5498a5f36a3064815e68998746cf661802eab36bfe96217253bac7e751c` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `17e106b63067429b9228a4879a7350c01ae98650ef2e6fcc23d00415c2e3a7c340abd5bcfc4b976f3d737d9268159ef5e5e7b08757371daad637e721a2ffb4a9` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-386.tar.gz) | `406323ea4cbd524807e73b9a2f4eb0a813730b262402c224e5076080b84452137521e5782056e39bf6017bda8ef9e797ed497d51a653ed6822357f43d86bb0ae` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `293747816e5da30c53ca29f27479fae880404edd5fca413af165e52cc7ea7ff26312bb3916896eceea75af6b232647268324da76d2d30fa2a4a688557427f7c7` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `98b6749c367282048ecd0c5b70ae8b7dafad82c599e359cbbe782a530bbd7bdb84a198577251d6aedbc39fb4e0297bd929d7e988eb557556f523073227375b09` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `0a650c53946ebd9c38705df36efabbf1fbe3da1acdf418cc4ab881530e6a9089b45ef36bd4a89467106561e2165a00cc2c47f791d9ba422f36544bfa4b1e3b68` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `807263f316f46c9334ec4dad84895cfe2b942ac4ed9aacf3ec8a63193e0d0a6ecaf573d00dfea278d1e552fe91e9474f534ea6798700dbdc84f1d9556ecfda3e` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `5589562ce0da49f4987388e3e2b6fcf29e92859fae65fb57cdd61bba20ff574c7f3e07f4fa26bb63789f927690ce19710803e0d2e3324bd2c80ddc4925ea973d` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-windows-386.tar.gz) | `101245cd70221b443150be046e5b5a2c6c83334085bb17f603f59bb68c5960f353d57b6761acf052449f4fb057a5525978cdd7995d06134ab98f8628c23aac0d` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `b1c3802f60cc70ebc1258cb8fc4ffa1154ecee8fda473b033be4f9d1b187354cfd75d085a1ad45a35fcc42ad640c4fecaa2496cb48fad649a774f40a5150825f` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `8e09465aab0a1d1ec39afc98af17de9b5de99b763c0c5feb2dc824f2bbae25edb690e9d162fd44f5155bea392bd229f544850fe19e767a8b342050f4bfafc2cc` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `9409c368e1f9f26e633b7df5d6c90435394931d48a21f4ad1548d172b18ac462a859019cc66dba4df69d3b10702820c9a3e1bd5c469646b1db581e52e79e035d` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `3893290dc11ca71746fee77a44a607ad9e02036bab56b7fc3be247b71b2cf5b3f639fa41317a713abbe9a997abf80c7113ff1155482d0cc04a318ec8beccf869` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `8ac1e70cb39aeb5b1fe92c3ebba428db2036be739f462cc2f876f17dc71a01ba263b5611a15d95e5934e2fc7aa92042bc9b2fe65cf459263be90f5fbb5d83a15` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `80576cb6cc3a69c4fc0a0358dee5772ecb38437c534a3454c9613426417d4af3c527a0809cce4d46653a7b001c58033b06326c80c498d17387569d22d3ca9b22` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `71cd5dd6075a2eea851231a5a855e58b3f479d83358defafd068dd1d09e5b2c426a8a046ee621de91e17d7ecd67465911b93549088bf27a41c6e6b77d692a8c7` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `48babf4a52013c2bc69049167579ba1bc70c769b782a2704c9dfcf44a6a8a72f07e0789af347135ee4797f2bf1a216c348a9a4a26be71855e95e8387bf4e2aac` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `cc19a52beaa7440ca7581e85d1e10137e93c2decdb7d7d7919e7fdcded63e4d94b3434513ca881dae844dd1eb1e2fe98ea5332fad5ffced846f729894ecf0ed1` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `241bf20ae366384efa0fb3798e07e1cdd3d4ea7ba91c146ef7761fb0b93a8514a0dd91f9eb47999ae263d6793e0577c2bbecf88548bcae06cedb437331d6d3bc` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `37ce3e021073c6c10cf240fb2c3f9a7ab35ece3c0b4a9fecbbdf790eb348b168d179824f3a8eb57d56f962b64f8a6a71925152c087f5bfe43b004cbfae65674d` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `3248db12c274171f094ef41d6a59523aec35655ba35d151576ff2d2089c269f345e2c0646d585d7c04c440c6b4e7379c499bc8f51fcc8b91388e3dc4d1b6a899` + +## Changelog since v1.14.0-beta.2 + +### Action Required + +* ACTION REQUIRED: Health check (liveness & readiness) probes using an HTTPGetAction will no longer follow redirects to different hostnames from the original probe request. Instead, these non-local redirects will be treated as a Success (the documented behavior). In this case an event with reason "ProbeWarning" will be generated, indicating that the redirect was ignored. If you were previously relying on the redirect to run health checks against different endpoints, you will need to perform the healthcheck logic outside the Kubelet, for instance by proxying the external endpoint rather than redirecting to it. ([#75416](https://github.com/kubernetes/kubernetes/pull/75416), [@tallclair](https://github.com/tallclair)) + +### Other notable changes + +* Restores --username and --password flags to kubectl ([#75451](https://github.com/kubernetes/kubernetes/pull/75451), [@liggitt](https://github.com/liggitt)) +* fix race condition issue for smb mount on windows ([#75371](https://github.com/kubernetes/kubernetes/pull/75371), [@andyzhangx](https://github.com/andyzhangx)) +* UDP Service conntrack entries for ExternalIPs are now correctly cleared when endpoints are added ([#75265](https://github.com/kubernetes/kubernetes/pull/75265), [@JacobTanenbaum](https://github.com/JacobTanenbaum)) +* kubeadm: the kubeadm init output now provides join control-plane example only when the preconditions for joining a control plane are satisfied ([#75420](https://github.com/kubernetes/kubernetes/pull/75420), [@fabriziopandini](https://github.com/fabriziopandini)) +* Fix dockershim panic issues when deleting docker images. ([#75367](https://github.com/kubernetes/kubernetes/pull/75367), [@feiskyer](https://github.com/feiskyer)) +* kubeadm: Allow certain certs/keys to be missing on the secret when transferring secrets using `--experimental-upload-certs` feature ([#75415](https://github.com/kubernetes/kubernetes/pull/75415), [@ereslibre](https://github.com/ereslibre)) +* Update to use go1.12.1 ([#75413](https://github.com/kubernetes/kubernetes/pull/75413), [@BenTheElder](https://github.com/BenTheElder)) +* Update CSI version to 1.1 ([#75391](https://github.com/kubernetes/kubernetes/pull/75391), [@gnufied](https://github.com/gnufied)) +* Ensure ownership when deleting a load balancer security group ([#74311](https://github.com/kubernetes/kubernetes/pull/74311), [@hpedrorodrigues](https://github.com/hpedrorodrigues)) +* kubelet: updated logic of verifying a static critical pod. ([#75144](https://github.com/kubernetes/kubernetes/pull/75144), [@Huang-Wei](https://github.com/Huang-Wei)) +* Allow disable outbound SNAT when Azure standard load balancer is used together with outbound rules. ([#75282](https://github.com/kubernetes/kubernetes/pull/75282), [@feiskyer](https://github.com/feiskyer)) +* Add ResourceVersion as a precondition for delete in order to ensure a delete fails if an unobserved change happens to an object. ([#74040](https://github.com/kubernetes/kubernetes/pull/74040), [@ajatprabha](https://github.com/ajatprabha)) +* Services of type=LoadBalancer which have no endpoints will now immediately ICMP reject connections, rather than time out. ([#74394](https://github.com/kubernetes/kubernetes/pull/74394), [@thockin](https://github.com/thockin)) +* Ensure Azure load balancer cleaned up on 404 or 403 when deleting LoadBalancer services. ([#75256](https://github.com/kubernetes/kubernetes/pull/75256), [@feiskyer](https://github.com/feiskyer)) + + + +# v1.14.0-beta.2 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-beta.2 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes.tar.gz) | `c1d5f2615c3319fc167c577f40f385abe6652bf4fd3bdb04617b36029dc3000b190c18b4b3a29827da75c680979697d61fffb45b86ba6226f880b98b2f308f4f` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-src.tar.gz) | `0a8d8ed208bc0bf424060126c76fcd8dbbd53a9b9695647314a4097f7013f548b76850438933760ff76835867676cddddf65134ad79f977ecdb98632fc2edda3` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `c919d030255c5d3879926d8aaa53939cd5aa37084799748452166ca6668bd1d10edf063d633682cddafaaed43dd1b991f4ad09139c5e4f519bd69f581b3fe0aa` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `ec14d4a1d720890065211544b099be17315265534cfd20435194dc842cc807c20b5fae78f5b95ba7d05f3d921d522017f50861760d195ce1bf5b1acfdb2dbb29` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-386.tar.gz) | `6cee12be5b855600ee80f15d1e0511099941b099bd5b252549abdc2a65c077f10ca4d53ab9804a0ce8d51f3b9cbab829cb551733cd4aed37c0d91238b82a8fe4` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `27d8cd48c1f3259055965b85a6b973ecb5b8a36894f94c232d773f89539e28e6c270bfe35427c70b4ad4800e42c869851981cf88f586b7d488efa538e6c88126` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `7f98230569c61fdf2b141e519f042b2e27ff37aeda746dc30bb7ce226b5d6b0c0bb85c6070b9ffc8d38c2441feb5bd8736c67708a59552e86a2c30cc02ecdece` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `159da67010af38d87c5318b7ad594120afd6a9b780d11d6e607e7214862cd6514b00da673cce72574771dbc780ab435dbba0a3267f051a20155c05ee0729ded0` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `d8ca7871d3d40947db69061284cb31c4d072d4da56fbb11a4485f6853f041835d9605cfc5dcea88d58c7f484cce13dbca485e80891c845291b9b28c574df310b` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `1c58db90b6e09b8d8f956a00263cb20271b8403f7fb6c5b20d76cca9ed973c35d2f5c910a6d42980ec9159480682d3786a59e9e05ce356a7e3b4181c848ad122` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-windows-386.tar.gz) | `00fb87dd4899208dd6607c22828f3985ebfd5e1f97cb24e3b2c69c249a4887d5c26c603b3bb4c21f9e2b737c917ddf95a1818d9de5c9ec97d3f5faa0c3dada52` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `7afdf637d62dde480162ad1521360b2bc78e0d4d20f6e6201e2f19b55b8e9bbd69c1ce8d03101c750ef389c65a1bc0a94dfc9a2d501d6840fd31eacbd3582028` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `2ac3c4910cd36f02a62304d78fe144b821edf445c522028e6b57d2dc3bcc7355159a58815d5a6991b3f2c33bb0ef23e07134c8bbf93b34be7452f80c9a9e6edf` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `db06b5f1a83ca4ec82428ab771eae2858b188dc23780fb9b146494c06aa6175421090b200c58b670e2d4253a7e0d4b07172a632e0754c35ccdee7e264c636f17` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `b40e1745d1ecfcc95f3a750990244fa128381d6d74246798a62aecb8cec9c77cdcd470e79334eb5c670e1e3a288080b4e26a080c64481ba608e3156c72df474b` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `c84297fd2b18b6bdade5a135a3da929e286bbba5c8dd66778091bad4eea1ac4b97a32ab3b146a88f0716bebcce9a4a85a7cd421cb185a3df864dcfa77312b3a9` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `39c8f6e7f52bec155b11652b4e80c2c52acf8754dbdf80a9d5bab5370d1debf4f4783c1a6968d41822b00ff744c72947df6cbc4623578e7679b9ce9a98f64ff3` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `bf19ae7140836aea1b6f414532eff886e3b91e0746b9224ce46e60e0b83fa90a8c3df1ff8e01ff340a1e1874ce15da28e98224024ed3139589474e89befa19f2` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `4b8194340a8675107da3969845173fb34ed2b0a38745ec0ac395ebf2116ee84d55be6e22ff84fafbaf4ca60a05f6debf6e95957a2261ac8a587eea32e5803fd5` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `8494dae5225f3b543afd575003fe0f30eb0f3cf9bc9dfbae72d6bda8f17c5446165433c28842a114af66ac3ae8fca9f92d780d1eb93e9bcb6b5dcc4fe8cd2a7f` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `0bd41d95f0a76c1b057a8913a8b2cffbf6d48c47aef1d9beed0de205b8010e8071e8f527eeaa003730ef97a017083278cb2036cf22a1abfb2f4669b935823cdc` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `169b16512df42a6cb5b000a3d6d6da5ae48a733c5d11b034eaec6b3816b86ec97b92e4075872900188bc296427037299841224e552ccf079097d5cf333627cbc` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `ccfebde5176cb28529552889250bf706add04df3c3f9aee5b8bdd9ebdb5bce334add8351cdbeebb9bd4b17b31d994b7739d2c494aa4c64bcb3ceba1a6ef53447` + +## Changelog since v1.14.0-beta.1 + +### Action Required + +* ACTION REQUIRED: The node.k8s.io API group and runtimeclasses.node.k8s.io resource have been migrated to a built-in API. If you were using RuntimeClasses (an default-disabled alpha feature, as of Kubernetes v1.12), then you must recreate all RuntimeClasses after upgrading, and the runtimeclasses.node.k8s.io CRD should be manually deleted. RuntimeClasses can no longer be created without a defined handler. ([#74433](https://github.com/kubernetes/kubernetes/pull/74433), [@tallclair](https://github.com/tallclair)) + * Introduce a RuntimeClass v1beta1 API. This new beta API renames `runtimeHandler` to `handler`, makes it a required field, and cuts out the spec (handler is a top-level field). +* Transition CSINodeInfo and CSIDriver alpha CRDs to in-tree CSINode and CSIDriver core storage v1beta1 APIs. ([#74283](https://github.com/kubernetes/kubernetes/pull/74283), [@xing-yang](https://github.com/xing-yang)) + * ACTION REQUIRED: the alpha CRDs are no longer used and drivers will need to be updated to use the beta APIs. + * The support for `_` in the CSI driver name will be dropped as the CSI Spec does not allow that. + +### Other notable changes + +* Support collecting pod logs under /var/log/pods/NAMESPACE_NAME_UID to stackdriver with `k8s_pod` resource type. ([#74502](https://github.com/kubernetes/kubernetes/pull/74502), [@Random-Liu](https://github.com/Random-Liu)) +* --make-symlinks for hyperkube was marked hidden for a while, This flag is now deprecated and will be removed in a future release. ([#74975](https://github.com/kubernetes/kubernetes/pull/74975), [@dims](https://github.com/dims)) +* fix smb unmount issue on Windows ([#75087](https://github.com/kubernetes/kubernetes/pull/75087), [@andyzhangx](https://github.com/andyzhangx)) +* Kubelet no longer watches configmaps and secrets for terminated pods, in worst scenario causing it to not be able to send other requests to kube-apiserver ([#74809](https://github.com/kubernetes/kubernetes/pull/74809), [@oxddr](https://github.com/oxddr)) +* - Fixes a bug concerning Quobyte volumes where user mappings only worked if the hosts Kubernetes plugin mount was provided via an external configuration using the _allow-usermapping-in-volumename_ option. ([#74520](https://github.com/kubernetes/kubernetes/pull/74520), [@casusbelli](https://github.com/casusbelli)) +* Change CRI pod log directory from `/var/log/pods/UID` to `/var/log/pods/NAMESPACE_NAME_UID`. ([#74441](https://github.com/kubernetes/kubernetes/pull/74441), [@Random-Liu](https://github.com/Random-Liu)) + * It is recommended to drain the node before upgrade, or reboot the node after upgrade. +* Promote RuntimeClass to beta, and enable by default. ([#75003](https://github.com/kubernetes/kubernetes/pull/75003), [@tallclair](https://github.com/tallclair)) +* New "dry_run" metric label (indicating the value of the dryRun query parameter) into the metrics: ([#74997](https://github.com/kubernetes/kubernetes/pull/74997), [@jennybuckley](https://github.com/jennybuckley)) + * apiserver_request_total + * apiserver_request_duration_seconds + * New "APPLY" value for the "verb" metric label which indicates a PATCH with "Content-Type: apply-patch+yaml". This value is experimental and will only be present if the ServerSideApply alpha feature is enabled. +* GCE: bump COS image version to cos-beta-73-11647-64-0 ([#75149](https://github.com/kubernetes/kubernetes/pull/75149), [@yguo0905](https://github.com/yguo0905)) +* - Add duration metric for CRD webhook converters ([#74376](https://github.com/kubernetes/kubernetes/pull/74376), [@mbohlool](https://github.com/mbohlool)) +* Alpha support for ephemeral CSI inline volumes that are embedded in pod specs. ([#74086](https://github.com/kubernetes/kubernetes/pull/74086), [@vladimirvivien](https://github.com/vladimirvivien)) +* Add support for node side CSI volume expansion ([#74863](https://github.com/kubernetes/kubernetes/pull/74863), [@gnufied](https://github.com/gnufied)) +* - Add mechanism for Admission Webhooks to specify which version of AdmissionReview they support ([#74998](https://github.com/kubernetes/kubernetes/pull/74998), [@mbohlool](https://github.com/mbohlool)) + * - Add mechanism for CRD Conversion Webhooks to specify which version of ConversionReview they support +* Add a new kubelet endpoint for serving first-class resource metrics ([#73946](https://github.com/kubernetes/kubernetes/pull/73946), [@dashpole](https://github.com/dashpole)) +* Deprecate AWS, Azure, GCE and Cinder specific volume limit predicates. ([#74544](https://github.com/kubernetes/kubernetes/pull/74544), [@gnufied](https://github.com/gnufied)) +* PodReadinessGate feature is now GA. The feature gate will not allow disabling it. ([#74434](https://github.com/kubernetes/kubernetes/pull/74434), [@freehan](https://github.com/freehan)) +* If CSINodeInfo and CSIMigration feature flags are active in the cluster, Kubelet will post NotReady until CSINode is initialized with basic volume plugin mechanism information for well-known drivers ([#74835](https://github.com/kubernetes/kubernetes/pull/74835), [@davidz627](https://github.com/davidz627)) +* Add network stats for Windows nodes and containers ([#74788](https://github.com/kubernetes/kubernetes/pull/74788), [@feiskyer](https://github.com/feiskyer)) +* kubeadm: when calling "reset" on a control-plane node, remove the APIEndpoint information for this node from the ClusterStatus in the kubeadm ConfigMap. ([#75082](https://github.com/kubernetes/kubernetes/pull/75082), [@neolit123](https://github.com/neolit123)) +* kube-apiserver now serves OpenAPI specs for registered CRDs with defined ([#71192](https://github.com/kubernetes/kubernetes/pull/71192), [@roycaihw](https://github.com/roycaihw)) + * validation schemata as an alpha feature, to be enabled via the "CustomResourcePublishOpenAPI" feature gate. Kubectl will validate client-side using those. Note that in + * future, client-side validation in 1.14 kubectl against a 1.15 cluster will reject + * unknown fields for CRDs with validation schema defined. +* Fix kubelet start failure issue on Azure Stack due to InstanceMetadata setting ([#74936](https://github.com/kubernetes/kubernetes/pull/74936), [@rjaini](https://github.com/rjaini)) +* add subcommand `kubectl create cronjob` ([#71651](https://github.com/kubernetes/kubernetes/pull/71651), [@Pingan2017](https://github.com/Pingan2017)) +* The CSIBlockVolume feature gate is now beta, and defaults to enabled. ([#74909](https://github.com/kubernetes/kubernetes/pull/74909), [@bswartz](https://github.com/bswartz)) +* Pre-existing log files are now opened with O_APPEND, instead of O_TRUNC. This helps prevent losing logs when components crash-loop, and also enables external log rotation utilities to truncate log files in-place without components extending log files to their pre-truncation sizes on subsequent writes. ([#74837](https://github.com/kubernetes/kubernetes/pull/74837), [@mtaufen](https://github.com/mtaufen)) +* the test/e2e/e2e.test binary can test arbitrary storage drivers, see the `-storage.testdriver` parameter ([#72836](https://github.com/kubernetes/kubernetes/pull/72836), [@pohly](https://github.com/pohly)) +* Fix panic in kubectl cp command ([#75037](https://github.com/kubernetes/kubernetes/pull/75037), [@soltysh](https://github.com/soltysh)) +* iscsi modules haven't even been loaded /sys/class/iscsi_host directory won't exist ([#74787](https://github.com/kubernetes/kubernetes/pull/74787), [@jianglingxia](https://github.com/jianglingxia)) +* the fluentd addon daemonset will now target all nodes. ([#74424](https://github.com/kubernetes/kubernetes/pull/74424), [@liggitt](https://github.com/liggitt)) + * setting `ENABLE_METADATA_CONCEALMENT=true` in kube-up will now set a `cloud.google.com/metadata-proxy-ready=true` label on new nodes. In v1.16, the metadata proxy add-on will switch to using that label as a node selector. + * setting `KUBE_PROXY_DAEMONSET=true` in kube-up will now set a `node.kubernetes.io/kube-proxy-ds-ready=true` label on new nodes. In v1.16, the kube-proxy daemonset add-on will switch to using that label as a node selector. + * In 1.16, the masq-agent daemonset add-on will switch to using `node.kubernetes.io/masq-agent-ds-ready` as a node selector. +* - Kubelet: replace `du` and `find` with a golang implementation ([#74675](https://github.com/kubernetes/kubernetes/pull/74675), [@dashpole](https://github.com/dashpole)) + * - Kubelet: periodically update machine info to support hot-add/remove +* kubeadm: add certificate-key and skip-certificate-key-print flags to kubeadm init ([#74671](https://github.com/kubernetes/kubernetes/pull/74671), [@yagonobre](https://github.com/yagonobre)) +* Admission webhooks rules can now limit scope to only match namespaced, or only cluster-scoped resources with a `scope: "Cluster" | "Namespaced" | "*"` field. ([#74477](https://github.com/kubernetes/kubernetes/pull/74477), [@liggitt](https://github.com/liggitt)) +* The CSIPersistentVolume and KubeletPluginWatcher feature gates cannot be disabled, and will be removed in Kubernetes v1.16 ([#74830](https://github.com/kubernetes/kubernetes/pull/74830), [@msau42](https://github.com/msau42)) +* Kubelet won't evict a static pod with priority `system-node-critical` upon resource pressure. ([#74222](https://github.com/kubernetes/kubernetes/pull/74222), [@Huang-Wei](https://github.com/Huang-Wei)) +* Fixes panic if a kubelet is run against an older kube-apiserver ([#74529](https://github.com/kubernetes/kubernetes/pull/74529), [@liggitt](https://github.com/liggitt)) +* The resource group name in Azure providerID is not converted to lower cases. ([#74882](https://github.com/kubernetes/kubernetes/pull/74882), [@feiskyer](https://github.com/feiskyer)) +* Remove the out-of-tree PersistentVolumeLabel controller because it cannot run without Initializers (removed in v1.14). If you are using AWS EBS, GCE PD, Azure Disk, Cinder Disk or vSphere volumes and rely on zone labels, then enable the `PersistentVolumeLabel` admission controller in the `kube-apiserver` in the `--enable-admission-plugins` flag. ([#74615](https://github.com/kubernetes/kubernetes/pull/74615), [@andrewsykim](https://github.com/andrewsykim)) +* kubeadm: improved RequiredIPVSKernelModulesAvailable warning message ([#74033](https://github.com/kubernetes/kubernetes/pull/74033), [@bart0sh](https://github.com/bart0sh)) +* Add `nullable` support to CustomResourceDefinition OpenAPI validation schemata. ([#74804](https://github.com/kubernetes/kubernetes/pull/74804), [@sttts](https://github.com/sttts)) +* Fix kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts)) +* kubeadm: fix a bug where standard kubeconfig paths were searched even if the user provided /etc/kubernetes/admin.conf explicitly for commands that accept --kubeconfig, like kubeadm token. ([#71874](https://github.com/kubernetes/kubernetes/pull/71874), [@neolit123](https://github.com/neolit123)) + * kubeadm: use the default kubeconfig (/etc/kubernetes/admin.conf) for "kubeadm reset" and "kubeadm upgrade" commands. +* Increase api server client certificate expiration histogram resolution to accommodate short-lived (< 6h) client certificates. ([#74806](https://github.com/kubernetes/kubernetes/pull/74806), [@mxinden](https://github.com/mxinden)) +* Default RBAC policy no longer grants access to discovery and permission-checking APIs (used by `kubectl auth can-i`) to *unauthenticated* users. Upgraded clusters preserve prior behavior, but cluster administrators wishing to grant unauthenticated users access in new clusters will need to explicitly opt-in to expose the discovery and/or permission-checking APIs: ([#73807](https://github.com/kubernetes/kubernetes/pull/73807), [@dekkagaijin](https://github.com/dekkagaijin)) + * `kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticated` + * `kubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated` +* The PersistentLocalVolumes feature is GA. The feature gate cannot be disabled and will be removed in Kubernetes 1.17 ([#74769](https://github.com/kubernetes/kubernetes/pull/74769), [@msau42](https://github.com/msau42)) +* kubelet: resolved hang/timeout issues when running large numbers of pods with unique configmap/secret references by reverting to 1.11 configmap/secret lookup behavior ([#74755](https://github.com/kubernetes/kubernetes/pull/74755), [@liggitt](https://github.com/liggitt)) +* Convert `latency`/`latencies` in metrics name to `duration`. ([#74418](https://github.com/kubernetes/kubernetes/pull/74418), [@danielqsj](https://github.com/danielqsj)) + * The following metrics are changed and mark previous metrics as deprecated: + * `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds` + * `apiserver_proxy_tunnel_sync_latency_secs` -> `apiserver_proxy_tunnel_sync_duration_seconds` + * `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds ` +* Fix help message for --container-runtime-endpoint: only unix socket is support on Linux. ([#74712](https://github.com/kubernetes/kubernetes/pull/74712), [@feiskyer](https://github.com/feiskyer)) +* Update to use golang 1.12 ([#74632](https://github.com/kubernetes/kubernetes/pull/74632), [@cblecker](https://github.com/cblecker)) +* The `RunAsGroup` feature has been promoted to beta and enabled by default. PodSpec and PodSecurityPolicy objects can be used to control the primary GID of containers on supported container runtimes. ([#73007](https://github.com/kubernetes/kubernetes/pull/73007), [@krmayankk](https://github.com/krmayankk)) +* fix Azure Container Registry anonymous repo image pull error ([#74715](https://github.com/kubernetes/kubernetes/pull/74715), [@andyzhangx](https://github.com/andyzhangx)) +* Adds the same information to an init container as a standard container in a pod when using PodPresets. ([#71479](https://github.com/kubernetes/kubernetes/pull/71479), [@soggiest](https://github.com/soggiest)) +* fix the flake in scheduling_queue_test.go ([#74611](https://github.com/kubernetes/kubernetes/pull/74611), [@denkensk](https://github.com/denkensk)) +* The kube-apiserver OpenAPI definitions with the prefix "io.k8s.kubernetes.pkg" (deprecated since 1.9) have been removed. ([#74596](https://github.com/kubernetes/kubernetes/pull/74596), [@sttts](https://github.com/sttts)) +* kube-conformance image will now run ginkgo with the --dryRun flag if the container is run with the environment variable E2E_DRYRUN set. ([#74731](https://github.com/kubernetes/kubernetes/pull/74731), [@johnSchnake](https://github.com/johnSchnake)) +* The deprecated `MountPropagation` feature gate has been removed, and the feature is now unconditionally enabled. ([#74720](https://github.com/kubernetes/kubernetes/pull/74720), [@bertinatto](https://github.com/bertinatto)) +* Introduce dynamic volume provisioning shim for CSI migration ([#73653](https://github.com/kubernetes/kubernetes/pull/73653), [@ddebroy](https://github.com/ddebroy)) +* Fix --help flag parsing ([#74682](https://github.com/kubernetes/kubernetes/pull/74682), [@soltysh](https://github.com/soltysh)) +* This PR removes the following metrics: ([#74636](https://github.com/kubernetes/kubernetes/pull/74636), [@logicalhan](https://github.com/logicalhan)) + * reflector_items_per_list + * reflector_items_per_watch + * reflector_last_resource_version + * reflector_list_duration_seconds + * reflector_lists_total + * reflector_short_watches_total + * reflector_watch_duration_seconds + * reflector_watches_total + * While this is a backwards-incompatible change, it would have been impossible to setup reliable monitoring around these metrics since the labels were not stable. +* Add a configuration field to shorten the timeout of validating/mutating admission webhook call. The timeout value must be between 1 and 30 seconds. Default to 30 seconds when unspecified. ([#74562](https://github.com/kubernetes/kubernetes/pull/74562), [@roycaihw](https://github.com/roycaihw)) +* client-go: PortForwarder.GetPorts() now contain correct local port if no local port was initially specified when setting up the port forwarder ([#73676](https://github.com/kubernetes/kubernetes/pull/73676), [@martin-helmich](https://github.com/martin-helmich)) +* # Apply resources from a directory containing kustomization.yaml ([#74140](https://github.com/kubernetes/kubernetes/pull/74140), [@Liujingfang1](https://github.com/Liujingfang1)) + * kubectl apply -k dir + * # Delete resources from a directory containing kustomization.yaml. + * kubectl delete -k dir + * # List resources from a directory containing kustomization.yaml + * kubectl get -k dir +* kubeadm: Allow to download certificate secrets uploaded by `init` or `upload-certs` phase, allowing to transfer certificate secrets (certificates and keys) from the cluster to other master machines when creating HA deployments. ([#74168](https://github.com/kubernetes/kubernetes/pull/74168), [@ereslibre](https://github.com/ereslibre)) +* Fixes an issue with missing apiVersion/kind in object data sent to admission webhooks ([#74448](https://github.com/kubernetes/kubernetes/pull/74448), [@liggitt](https://github.com/liggitt)) +* client-go: the deprecated versionless API group accessors (like `clientset.Apps()` have been removed). Use an explicit version instead (like `clientset.AppsV1()`) ([#74422](https://github.com/kubernetes/kubernetes/pull/74422), [@liggitt](https://github.com/liggitt)) +* The `--quiet` option to `kubectl run` now suppresses resource deletion messages emitted when the `--rm` option is specified. ([#73266](https://github.com/kubernetes/kubernetes/pull/73266), [@awh](https://github.com/awh)) +* Add Custom Resource support to "kubectl autoscale" ([#72678](https://github.com/kubernetes/kubernetes/pull/72678), [@rmohr](https://github.com/rmohr)) +* Image garbage collection no longer fails for images with only one tag but more than one repository associated. ([#70647](https://github.com/kubernetes/kubernetes/pull/70647), [@corvus-ch](https://github.com/corvus-ch)) +* - Fix liveness probe in fluentd-gcp cluster addon ([#74522](https://github.com/kubernetes/kubernetes/pull/74522), [@Pluies](https://github.com/Pluies)) +* The new test ``[sig-network] DNS should provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance]`` will validate the host entries set in the ``/etc/hosts`` file (pod's FQDN and hostname), which should be managed by Kubelet. ([#72729](https://github.com/kubernetes/kubernetes/pull/72729), [@bclau](https://github.com/bclau)) + * The test has the tag ``[LinuxOnly]`` because individual files cannot be mounted in Windows Containers, which means that it cannot pass using Windows nodes. + + + +# v1.14.0-beta.1 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-beta.1 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes.tar.gz) | `065014c751635f8c077fbcc105df578594baf8afd8b8339004909198e1bd68d0a7ce3644ed5d54e5964d1306aa650f22a5ce83063415240f4dffd6706c1cc33b` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-src.tar.gz) | `244c19d9fad21ae154ee78fc94888dc60bcfcf3ec72bdc28a82e77c572cbc969d2abbf20397ef9564a35585c08dfe179b105fc25efac973e0a13d78ee2ff8f42` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `78a61a1e922daa39a9f7dd61b8bad87d202b537bda59f90ae8aae941c0ff412e3d328530af9dd9f22462cbd67254e7ce1556defe48bb10bd6a94d4302464fe8e` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `5a1d66fd90a5dc07b95b7617b5583595e0a4a664e7005f6281f846c85b21e28692b2e2d55b7c40c7b8cbb96b6b8cd6c832f340c7cc67579641beabac033014ad` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-386.tar.gz) | `30991ce0776bae7551b98a811e3ccb5104b0859805c41a216db7d5779cddfb36ef3c5e658ea2adeaf67f8e6f181768850b09a0e8320c2983d34664156ea638ac` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `5501a9c3a95e43f0c691b05043546f2c497d50a6ad88b88219842d61be83d7dcb8871ff9fd2447c02bc842c4c962f298a3ce2e0618fae70e8aa391c9407626e5` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `4bf341a2f943719d006f4cacc26fdf4d021560d37d49c8d9c4620d294142041155a88dc721d9373a8617e1baa904c02b4545f379ffe87c6ab20e5459a5d3c2de` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `1c0c660618947b053404ab8ef40bdec0a06d54a1f9edc585a7259806f878327d9ae54100bba98e5b7f44f5db4303276d189792e68517603520a49868c07e684c` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `9d2c3f4bfbad03b41859670f9cfda6596f51a89077fd4da2f74490f71b5de10e459954e897d2a1ba3a217c62caaf1be74424e5bf6a5609868dc4f069ac06c94f` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `9be5259caf39ff3c4d0f024d616bff50ac417d42a87c56b6877fbdf5aaadecee05631ac8ddd6dca20d52ae4ca7e1227a1fd5e882be9821f3711e144b84d41099` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-windows-386.tar.gz) | `5b1e75f532d9a4d656cd1c5ec48a19d01c4ca731c6c3d986ebbc48a9f1e1d61d6c5603145808fb929117cf2202bc75f31ec7661a50edf24c5af6b3419ebcc0ab` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `a501d3c0be55d5a73214a83d1f48b39a49d4a84f5f9988fa34cf66ef6bc78d3f3e06c40dc3d59538c3bff07aa2128ee814d9825c31f8b9abbf045e1ebb581bed` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `aed44ec5bc6bdaf41c20824a9841ee541bfd23362966f9326eca2cafbd03eca69325877784b8c9b058963dc5b8ba656b9da446513fd5eeed8133a783769acd16` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `e751cb675013183a70a8817dca0b5c456a1ccf075244b411317e813b5164ae710460a53e81191ded9d2ccaf284ae00304bfbe1b3d219b2a8d57761d733293409` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `3aabb1a9bd07413d0740adfb638b0e5ca4cd4a58eda244c5ebc1ea01780e0b2863806c35792a0590069ef0cccc2665198afed1984d1c49f0726b75d4216609a4` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `3c57e2b47b3b9ddc1039684840886877947141b1e4d31f909793678544fe92e10aa82a207936f0bcb3c657044c7b875f34f41f086ccb7f97a154499d01266f73` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `fe418cfafc63cbccc1898086296e52026df27ff498753089792175ce0d41d889ca50a4eb5104a84b78a0a25d524dcdf5ec5eec8aa213d58178ae38411cfb58af` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `83b63d7e9d18fe35564105fd70629af9ba8f20112933b3ace92a48887702862e013ac3b3e144cfd44c8ead7c766df584766749af9d33a9aaa3808e370d3ea359` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `e4ac000be25ced9b308ec698da9702bd10a0a7183bfea9648500ab9d0879989c54328cb4fb51be545831d18676067d6b53e55cc49b14f55f35032a66dfa28806` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `35fa5ec8a7fc001fe33abd89f8a446ce0ea2a011db27dc8ff544c2b199b065b19372afe95e3616f538347243d7599f29fb5cea1a46a3fcfdfe4a0f2a346683b2` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `a5b938e9cdc39fc292269af4c3961a17b9bcdaf85b3c58db680f2d1a4fb088eb648efc268dfe3325aed96f6a7cdcff070dc7a3200cc169010ff2b402fae1a26a` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `d8e2b5a945f881ddb0a25576a614d564ccef0ad4e93c84b30cdc57888e81e04932d798415a1a50cdfc6d2f857e1d027e2034ba9c40b5d8ed0009cfbdc8915e0f` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `426774466800ca11cae16821c7d92917b2ce138fcb3f6dca813ec0f060649d6a50187982aaac31fbb081604f5bd2c317616b6f211beb139f53192269194f012e` + +## Changelog since v1.14.0-alpha.3 + +### Action Required + +* Added cadvisor metric labels `pod` and `container` where `pod_name` and `container_name` are present to match instrumentation guidelines. ([#69099](https://github.com/kubernetes/kubernetes/pull/69099), [@ehashman](https://github.com/ehashman)) + * Action required: any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) should be updated to use `pod` and `container` instead. `pod_name` and `container_name` labels will be present alongside `pod` and `container` labels for one transitional release and removed in the future. + +### Other notable changes + +* fix parse devicePath issue on Azure Disk ([#74499](https://github.com/kubernetes/kubernetes/pull/74499), [@andyzhangx](https://github.com/andyzhangx)) +* fix issue: fail to detach azure disk when there is server side error ([#74398](https://github.com/kubernetes/kubernetes/pull/74398), [@andyzhangx](https://github.com/andyzhangx)) +* Allow Cinder volume limit to be configured from node too ([#74542](https://github.com/kubernetes/kubernetes/pull/74542), [@gnufied](https://github.com/gnufied)) +* Fix subnet annotation checking for Azure internal loadbalancer ([#74498](https://github.com/kubernetes/kubernetes/pull/74498), [@feiskyer](https://github.com/feiskyer)) +* Allow the kubelet to pass Windows GMSA credentials down to Docker ([#73726](https://github.com/kubernetes/kubernetes/pull/73726), [@wk8](https://github.com/wk8)) +* PriorityClass in scheduling.k8s.io/v1beta1 and scheduling.k8s.io/v1alpha1 are deprecated by PriorityClass scheduling.k8s.io/v1 and will not be served starting in v1.17. ([#74465](https://github.com/kubernetes/kubernetes/pull/74465), [@bsalamat](https://github.com/bsalamat)) +* kubeadm: fixed nil pointer dereference caused by a bug in url parsing ([#74454](https://github.com/kubernetes/kubernetes/pull/74454), [@bart0sh](https://github.com/bart0sh)) +* Fix the unexpected NotReady status when Node's iops is full if the runtime is dockershim. ([#74389](https://github.com/kubernetes/kubernetes/pull/74389), [@answer1991](https://github.com/answer1991)) +* Split up the mondo `kubernetes-test` tarball into `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs. ([#74065](https://github.com/kubernetes/kubernetes/pull/74065), [@ixdy](https://github.com/ixdy)) +* Move fluentd-elasticsearch addon images to community controlled location ([#73819](https://github.com/kubernetes/kubernetes/pull/73819), [@coffeepac](https://github.com/coffeepac)) +* The PriorityClass API has been promoted to `scheduling.k8s.io/v1` with no changes. The `scheduling.k8s.io/v1beta1` version is now deprecated and will stop being served by default in v1.17. ([#73555](https://github.com/kubernetes/kubernetes/pull/73555), [@bsalamat](https://github.com/bsalamat)) +* fix get azure accounts timeout issue when there is no out-bound IP ([#74191](https://github.com/kubernetes/kubernetes/pull/74191), [@andyzhangx](https://github.com/andyzhangx)) +* fix mixed protocol issue for azure load balancer ([#74200](https://github.com/kubernetes/kubernetes/pull/74200), [@andyzhangx](https://github.com/andyzhangx)) +* Don't update the Pod object after each scheduling attempt by adding a timestamp to the scheduling queue. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [@denkensk](https://github.com/denkensk)) +* kubeadm: remove local etcd members from the etcd cluster when kubeadm reset ([#74112](https://github.com/kubernetes/kubernetes/pull/74112), [@pytimer](https://github.com/pytimer)) +* Fix keymutex issues which may crash in some platforms. ([#74348](https://github.com/kubernetes/kubernetes/pull/74348), [@danielqsj](https://github.com/danielqsj)) +* Fixed scanning of failed iSCSI targets. ([#74306](https://github.com/kubernetes/kubernetes/pull/74306), [@jsafrane](https://github.com/jsafrane)) +* kubeadm: Do not fail preflight checks when running on >= 5.0 Linux kernel ([#74355](https://github.com/kubernetes/kubernetes/pull/74355), [@brb](https://github.com/brb)) +* Reduces the cache TTL for negative responses to 5s minimum. ([#74093](https://github.com/kubernetes/kubernetes/pull/74093), [@blakebarnett](https://github.com/blakebarnett)) +* The Ingress API is now available via `networking.k8s.io/v1beta1`. `extensions/v1beta1` Ingress objects are deprecated and will no longer be served in v1.18. ([#74057](https://github.com/kubernetes/kubernetes/pull/74057), [@liggitt](https://github.com/liggitt)) +* kubelet's --containerized flag will no longer be supported and will be removed in a future release ([#74267](https://github.com/kubernetes/kubernetes/pull/74267), [@dims](https://github.com/dims)) +* Optimize scheduler cache snapshot algorithm to improve scheduling throughput. ([#74041](https://github.com/kubernetes/kubernetes/pull/74041), [@bsalamat](https://github.com/bsalamat)) +* Extends the VolumeSubpathEnvExpansion alpha feature to support environment variable expansion ([#71351](https://github.com/kubernetes/kubernetes/pull/71351), [@kevtaylor](https://github.com/kevtaylor)) + * Implements subPathExpr field for expanding environment variables into a subPath + * The fields subPathExpr and subPath are mutually exclusive + * Note: This is a breaking change from the previous version of this alpha feature +* Added kube-proxy support for overlay networking and DSR in Windows and new flags for network-name, source-vip, and enable-dsr. ([#70896](https://github.com/kubernetes/kubernetes/pull/70896), [@ksubrmnn](https://github.com/ksubrmnn)) +* StorageOS volume plugin updated to fix an issue where volume mount succeeds even if request to mount via StorageOS API fails. ([#69782](https://github.com/kubernetes/kubernetes/pull/69782), [@darkowlzz](https://github.com/darkowlzz)) +* kubeadm: Allow to upload certificates required to join a new control-plane to kubeadm-certs secret using the flag `--experimental-upload-certs` on `init` or upload-certs phase. ([#73907](https://github.com/kubernetes/kubernetes/pull/73907), [@yagonobre](https://github.com/yagonobre)) +* export query parameter is deprecated and will be removed in a future release ([#73783](https://github.com/kubernetes/kubernetes/pull/73783), [@deads2k](https://github.com/deads2k)) +* e2e storage tests run faster and are easier to read ([#72434](https://github.com/kubernetes/kubernetes/pull/72434), [@pohly](https://github.com/pohly)) +* kubectl: fix a bug where "describe" cannot obtain the event messages for a static pod ([#74156](https://github.com/kubernetes/kubernetes/pull/74156), [@gaorong](https://github.com/gaorong)) +* windows: Ensure graceful termination when being run as windows service ([#73292](https://github.com/kubernetes/kubernetes/pull/73292), [@steffengy](https://github.com/steffengy)) +* CoreDNS adds readinessProbe which prevents loadbalancing to unready pods, and also allows rolling updates to work as expected. ([#74137](https://github.com/kubernetes/kubernetes/pull/74137), [@rajansandeep](https://github.com/rajansandeep)) +* Fixes use of webhook admission plugins with multi-version custom resources ([#74154](https://github.com/kubernetes/kubernetes/pull/74154), [@mbohlool](https://github.com/mbohlool)) +* kubeadm no longer allows using v1alpha3 configs for anything else than converting them to v1beta1. ([#74025](https://github.com/kubernetes/kubernetes/pull/74025), [@rosti](https://github.com/rosti)) +* Change kubelet metrics to conform metrics guidelines. ([#72470](https://github.com/kubernetes/kubernetes/pull/72470), [@danielqsj](https://github.com/danielqsj)) + * The following metrics are deprecated, and will be removed in a future release: + * `kubelet_pod_worker_latency_microseconds` + * `kubelet_pod_start_latency_microseconds` + * `kubelet_cgroup_manager_latency_microseconds` + * `kubelet_pod_worker_start_latency_microseconds` + * `kubelet_pleg_relist_latency_microseconds` + * `kubelet_pleg_relist_interval_microseconds` + * `kubelet_eviction_stats_age_microseconds` + * `kubelet_runtime_operations` + * `kubelet_runtime_operations_latency_microseconds` + * `kubelet_runtime_operations_errors` + * `kubelet_device_plugin_registration_count` + * `kubelet_device_plugin_alloc_latency_microseconds` + * Please convert to the following metrics: + * `kubelet_pod_worker_duration_seconds` + * `kubelet_pod_start_duration_seconds` + * `kubelet_cgroup_manager_duration_seconds` + * `kubelet_pod_worker_start_duration_seconds` + * `kubelet_pleg_relist_duration_seconds` + * `kubelet_pleg_relist_interval_seconds` + * `kubelet_eviction_stats_age_seconds` + * `kubelet_runtime_operations_total` + * `kubelet_runtime_operations_duration_seconds` + * `kubelet_runtime_operations_errors_total` + * `kubelet_device_plugin_registration_total` + * `kubelet_device_plugin_alloc_duration_seconds` +* This change ensures that volumes get provisioned based on the zone information provided in allowedTopologies. ([#72731](https://github.com/kubernetes/kubernetes/pull/72731), [@skarthiksrinivas](https://github.com/skarthiksrinivas)) + * Storage class spec: + * kind: StorageClass + * apiVersion: storage.k8s.io/v1 + * metadata: + * name: fastpolicy1 + * provisioner: kubernetes.io/vsphere-volume + * parameters: + * diskformat: zeroedthick + * storagePolicyName: vSAN Default Storage Policy + * allowedTopologies: + * - matchLabelExpressions: + * - key: failure-domain.beta.kubernetes.io/zone + * values: + * - zone1 + * PV creation Logs: + * I0109 11:17:52.321372 1 vsphere.go:1147] Starting to create a vSphere volume with volumeOptions: &{CapacityKB:1048576 Tags:map[kubernetes.io/created-for/pvc/namespace:default kubernetes.io/created-for/pvc/name:pvcsc-1-policy kubernetes.io/created-for/pv/name:pvc-34650c12-1400-11e9-aef4-005056804cc9] Name:kubernetes-dynamic-pvc-34650c12-1400-11e9-aef4-005056804cc9 DiskFormat:zeroedthick Datastore: VSANStorageProfileData: StoragePolicyName:vSAN Default Storage Policy StoragePolicyID: SCSIControllerType: Zone:[zone1]} + * ... + * I0109 11:17:59.430113 1 vsphere.go:1334] The canonical volume path for the newly created vSphere volume is "[vsanDatastore] 98db185c-6683-d8c7-bc55-0200435ec5da/kubernetes-dynamic-pvc-34650c12-1400-11e9-aef4-005056804cc9.vmdk" + * Ran regression tests (no zone) and they passed. +* vSphere cloud provider correctly retrieves the VM's UUID when running on Windows ([#71147](https://github.com/kubernetes/kubernetes/pull/71147), [@benmoss](https://github.com/benmoss)) +* Re-issue Allocate grpc calls before starting a container that requests device-plugin resources if the cached state is missing. ([#73824](https://github.com/kubernetes/kubernetes/pull/73824), [@jiayingz](https://github.com/jiayingz)) +* [CRI] Add a new field called `runtime_handler` into PodSandbox and PodSandboxStatus to track the RuntimeClass information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng)) +* kubelet: OS and Arch information is now recorded in `kubernetes.io/os` and `kubernetes.io/arch` labels on Node objects. The previous labels (`beta.kubernetes.io/os` and `beta.kubernetes.io/arch`) are still recorded, but are deprecated and targeted for removal in 1.18. ([#73333](https://github.com/kubernetes/kubernetes/pull/73333), [@yujuhong](https://github.com/yujuhong)) +* This change applies zone labels to vSphere Volumes automatically. The zone labels are visible on the PV: ([#72687](https://github.com/kubernetes/kubernetes/pull/72687), [@subramanian-neelakantan](https://github.com/subramanian-neelakantan)) + * $ kubectl get pv --show-labels + * NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE LABELS + * pv-abc 5Gi RWO Bound default/claim1 46s failure-domain.beta.kubernetes.io/region=VC1,failure-domain.beta.kubernetes.io/zone=cluster-1 +* fix smb remount issue on Windows ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx)) +* Kubelet now tries to stop containers in unknown state once before restart or remove. ([#73802](https://github.com/kubernetes/kubernetes/pull/73802), [@Random-Liu](https://github.com/Random-Liu)) +* Deprecate --export flag from kubectl get command. ([#73787](https://github.com/kubernetes/kubernetes/pull/73787), [@soltysh](https://github.com/soltysh)) +* Breaking changes in client-go: ([#72214](https://github.com/kubernetes/kubernetes/pull/72214), [@caesarxuchao](https://github.com/caesarxuchao)) + * The disk-cached discovery client is moved from k8s.io/client-go/discovery to k8s.io/client-go/discovery/cached/disk. + * The memory-cached discovery client is moved from k8s.io/client-go/discovery/cached to k8s.io/client-go/discovery/cached/memory. +* kubelet now accepts `pid=` in the `--system-reserved` and `--kube-reserved` options to ensure that the specified number of process IDs will be reserved for the system as a whole and for Kubernetes system daemons respectively. Please reference `Kube Reserved` and `System Reserved` in `Reserve Compute Resources for System Daemons` in the Kubernetes documentation for general discussion of resource reservation. To utilize this functionality, you must set the feature gate `SupportNodePidsLimit=true` ([#73651](https://github.com/kubernetes/kubernetes/pull/73651), [@RobertKrawitz](https://github.com/RobertKrawitz)) +* The apiserver, including both the kube-apiserver and apiservers built with the generic apiserver library, will now return 413 RequestEntityTooLarge error if a json patch contains more than 10,000 operations. ([#74000](https://github.com/kubernetes/kubernetes/pull/74000), [@caesarxuchao](https://github.com/caesarxuchao)) +* kubeadm: allow the usage of --kubeconfig-dir and --config flags on kubeadm init ([#73998](https://github.com/kubernetes/kubernetes/pull/73998), [@yagonobre](https://github.com/yagonobre)) +* when pleg channel is full, discard events and record its count ([#72709](https://github.com/kubernetes/kubernetes/pull/72709), [@changyaowei](https://github.com/changyaowei)) +* Is ->It in line 6 ([#73898](https://github.com/kubernetes/kubernetes/pull/73898), [@xiezongzhe](https://github.com/xiezongzhe)) +* Events reported for container creation, start, and stop now report the container name in the message and are more consistently formatted. ([#73892](https://github.com/kubernetes/kubernetes/pull/73892), [@smarterclayton](https://github.com/smarterclayton)) +* `kubectl auth reconcile` now outputs details about what changes are being made ([#71564](https://github.com/kubernetes/kubernetes/pull/71564), [@liggitt](https://github.com/liggitt)) +* kubeadm: fix a bug in the underlying library for diff related to characters like '%' ([#73941](https://github.com/kubernetes/kubernetes/pull/73941), [@neolit123](https://github.com/neolit123)) +* kube-apiserver: a request body of a CREATE/UPDATE/PATCH/DELETE resource operation larger than 100 MB will return a 413 "request entity too large" error. ([#73805](https://github.com/kubernetes/kubernetes/pull/73805), [@caesarxuchao](https://github.com/caesarxuchao)) + * Custom apiservers built with the latest apiserver library will have the 100MB limit on the body of resource requests as well. The limit can be altered via ServerRunOptions.MaxRequestBodyBytes. + * The body size limit does not apply to subresources like pods/proxy that proxy request content to another server. +* Kustomize is developed in its own repo https://github.com/kubernetes-sigs/kustomize ([#73033](https://github.com/kubernetes/kubernetes/pull/73033), [@Liujingfang1](https://github.com/Liujingfang1)) + * This PR added a new subcommand `kustomize` in kubectl. + * kubectl kustomize has the same effect as kustomize build + * To build API resources from somedir with a kustomization.yaml file + * kubectl kustomize + * This command can be piped to apply or delete + * kubectl kustomize | kubectl apply -f - + * kubectl kustomize | kubectl delete -f - +* kubeadm: all master components are now exclusively relying on the `PriorityClassName` pod spec for annotating them as cluster critical components. Since `scheduler.alpha.kubernetes.io/critical-pod` annotation is no longer supported by Kubernetes 1.14 this annotation is no longer added to master components. ([#73857](https://github.com/kubernetes/kubernetes/pull/73857), [@ereslibre](https://github.com/ereslibre)) +* Speedup kubectl by >10 when calling out to kube-apiserver for discovery information. ([#73345](https://github.com/kubernetes/kubernetes/pull/73345), [@sttts](https://github.com/sttts)) +* kubeadm no longer dumps backtrace if it fails to remove the running containers on reset. ([#73951](https://github.com/kubernetes/kubernetes/pull/73951), [@rosti](https://github.com/rosti)) + + + +# v1.14.0-alpha.3 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-alpha.3 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes.tar.gz) | `5060dcf689dad4e19da5029eb8fc3060a4b2bad988fddff438d0703a45c02481bcfbc15f45d2855f4fd5e9eb43847400ebb25dce19e24f0e0e194a7f57176ce5` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-src.tar.gz) | `754c948b5d25b01f211866d473257be5fb576b4b97703eb6fc08679d6525e1f53195a450f3f47b77fabb92bf058583b66230959197b5bcf72528e54ccb349c07` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `5bd74dfc86bacf89d6b05d541e13bf390216039a42cc90fef2b248820acd84f56a445ec66d52497ff77e1af47455f285c993cd1d44cc3050996189bd328ea2be` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `34e16661d66d337083583dfb478756ec8cc664d7cfc2dd1817bf1da03cdc380668be9df9f178b5fd5ccab5014e6686f83b9fee6192fbf77d2298d397e872a893` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `15f99e85bcc95f7b8e1b4c6ecc23de36e89a54108003db926e97ec2e7253f363f6ed85e39a47305dbccf596f72e88edd7bcda6d528919da9c0b81541f58506d4` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `2e61cf9b776150c4f1830d068ffee9701cb04979152ed6b62fc1bf53163e6194029a4f75536e7fda71c3dfce1de285f425bde342a4efdd1f7bf973f105750ac4` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `67fb3805bb1b4a77f6603fbde9bd1d26e179de1a594c85618aa7b17be6abc510a9a0cd499ef4fe974574cf73b364da641121f21864c8472d713eec76e4c52bca` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `28930dc384b51051081a52874bc4d6dafa3c992dfa214b977ef711de2c2bc3f90bdaa6243bded1e750997fec04b8ffb910db21c266e47e09426c4dbaf916a64d` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `f59eda797a57961d52fe67ba8b25a3a10267f9ce46029ed2140ef4b02615ba9944bd83d7a6e7874c7268a09a3422858b9b0c31f861941ef8be126c594fc3a7cc` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `c56bfb64e55cf95251157a8229a3e94310b2c46bb1c1250050893873e3112578978c1f8e29fa56fac63e2aa8a6382523ac34baf6dd523fe0919f8d702521a564` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `e49a00fbe600892dc5eed0bc21bac64806da65280c818ca79b5e8adbed7fd5ecebb6b647cb9b89ac862257995145b2397996122eefb3c8d127d857c89c29c9ae` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `797e20969ed4935adcbc80ccbcd72ec5aa697e70b0d071eceefc6dbacea69aff9f6660e7eefad6661ace0afb66067c4ffaa4f6bc82e8b081b57811ab0abde218` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `eddfc9afd7337475c3865443170d1425dcf4a87d981555871a69bcf132e73d99b1ffa08a00490b30c60232f47bbeca4ad6253cf7e1dad44797b4af044dbdbef4` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `dc85cd3a039cc0516beb19018c8378f3b7b88fa2edb8fa1476305e89eb7c64fef2d938bd48fd257ea8e690f7d84a69e9784a42aabed35e83ea7362c60773ba67` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `d7c3a72abaa4c3e3243f8b4b3a8adb8be2758e0f883423ea62d2c61b2081464a8976ad43ea0640a7e453aa4d389e3ea2d6d1baedf3b50e1171eca6e49cd087fe` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `b268a94eb056eea8bdf4d5739dec430f75a6a6b3c18e30df68d970c3566b3e4a638b3577f6219596ae54eac740628a7ebfecb0772645e6d960f790235e1d62c7` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `f4cfd8d2faacdd1f0065f9e0f4f8d0db7bd8f438f812f70a07f4cb5272ae9bed3ec876b3cbaf2f2a71e65e4de725e1dc0829b43f60f43c9e43656ac928657d5e` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `7040ee3c032ec4fe14530c3e47ee53d731acb947b06e2d560cbcd0e7e513142c0f300302059aaef03e24311946a9c59b576948eec9b520e2367f28fc4f80226c` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `3d32e5243d1c65bce573cfb0f60d643ef3fc684a15551dbc8c3d5435e6854ff104c46c77b0b8708d9c661d52f7865a197ea758f0c17e1ed991993674929ea75e` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `d3a17027fa1c057528422b35e32260f5b7c7246400df595f0ebda5d150456d4388129b1ead4229f98f2b461ff9e85382a7da0d682541844a3c06f0aebe0469b6` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `89ed1f5093b49ab9d58d7a70089e881bf388f3316cb2607fa18e3bf072aff3d27aabe99124334774e63decb67349eb82f33ea509b56a72a51e1443c3352b4558` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `755a60824a9b8c4090a791d332e410692708ecece90e37388f58eb2c7ddddea6b859fefcc5a53ec3d275fee0a355086f4446ae8e85482a668d248cca9f5e503c` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `c71d8055d89e535771f345e0f673da021915a7a82c75951855ba2574a4250c8a57d0636b4ec9bba209edde8edef30098c6dec2f80403cd46139bb88d814c3751` + +## Changelog since v1.14.0-alpha.2 + +### Action Required + +* The --storage-versions flag of kube-apiserver is removed. The storage versions will always be the default value built-in the kube-apiserver binary. ([#67678](https://github.com/kubernetes/kubernetes/pull/67678), [@caesarxuchao](https://github.com/caesarxuchao)) + +### Other notable changes + +* fix [#73264](https://github.com/kubernetes/kubernetes/pull/73264) cpuPeriod was not reset, but used as set via flag, although it was disabled via alpha gate ([#73342](https://github.com/kubernetes/kubernetes/pull/73342), [@szuecs](https://github.com/szuecs)) +* Update kubelet CLI summary documentation and generated Webpage ([#73256](https://github.com/kubernetes/kubernetes/pull/73256), [@deitch](https://github.com/deitch)) +* Considerably reduced the CPU load in kube-apiserver while aggregating OpenAPI specifications from aggregated API servers. ([#71223](https://github.com/kubernetes/kubernetes/pull/71223), [@sttts](https://github.com/sttts)) +* kubeadm: add a preflight check that throws a warning if the cgroup driver for Docker on Linux is not "systemd" as per the k8s.io CRI installation guide. ([#73837](https://github.com/kubernetes/kubernetes/pull/73837), [@neolit123](https://github.com/neolit123)) +* Kubelet: add usageNanoCores from CRI stats provider ([#73659](https://github.com/kubernetes/kubernetes/pull/73659), [@feiskyer](https://github.com/feiskyer)) +* Fix watch to not send the same set of events multiple times causing watcher to go back in time ([#73845](https://github.com/kubernetes/kubernetes/pull/73845), [@wojtek-t](https://github.com/wojtek-t)) +* `system:kube-controller-manager` and `system:kube-scheduler` users are now permitted to perform delegated authentication/authorization checks by default RBAC policy ([#72491](https://github.com/kubernetes/kubernetes/pull/72491), [@liggitt](https://github.com/liggitt)) +* Prevent AWS Network Load Balancer security groups ingress rules to be deleted by ensuring target groups are tagged. ([#73594](https://github.com/kubernetes/kubernetes/pull/73594), [@masterzen](https://github.com/masterzen)) +* Set a low oom_score_adj for containers in pods with system-critical priorities ([#73758](https://github.com/kubernetes/kubernetes/pull/73758), [@sjenning](https://github.com/sjenning)) +* Ensure directories on volumes are group-executable when using fsGroup ([#73533](https://github.com/kubernetes/kubernetes/pull/73533), [@mxey](https://github.com/mxey)) +* kube-apiserver now only aggregates openapi schemas from `/openapi/v2` endpoints of aggregated API servers. The fallback to aggregate from `/swagger.json` has been removed. Ensure aggregated API servers provide schema information via `/openapi/v2` (available since v1.10). ([#73441](https://github.com/kubernetes/kubernetes/pull/73441), [@roycaihw](https://github.com/roycaihw)) +* Change docker metrics to conform metrics guidelines and using histogram for better aggregation. ([#72323](https://github.com/kubernetes/kubernetes/pull/72323), [@danielqsj](https://github.com/danielqsj)) + * The following metrics are deprecated, and will be removed in a future release: + * `docker_operations` + * `docker_operations_latency_microseconds` + * `docker_operations_errors` + * `docker_operations_timeout` + * `network_plugin_operations_latency_microseconds` + * Please convert to the following metrics: + * `docker_operations_total` + * `docker_operations_latency_seconds` + * `docker_operations_errors_total` + * `docker_operations_timeout_total` + * `network_plugin_operations_latency_seconds` +* `kubectl delete --all-namespaces` is a recognized flag. ([#73716](https://github.com/kubernetes/kubernetes/pull/73716), [@deads2k](https://github.com/deads2k)) +* MAC Address filter has been fixed in vSphere Cloud Provider, it no longer ignores `00:1c:14` and `00:05:69` prefixes ([#73721](https://github.com/kubernetes/kubernetes/pull/73721), [@frapposelli](https://github.com/frapposelli)) +* Add kubelet_node_name metrics. ([#72910](https://github.com/kubernetes/kubernetes/pull/72910), [@danielqsj](https://github.com/danielqsj)) +* The HugePages feature gate has graduated to GA, and can no longer be disabled. The feature gate will be removed in v1.16 ([#72785](https://github.com/kubernetes/kubernetes/pull/72785), [@derekwaynecarr](https://github.com/derekwaynecarr)) +* Fix a bug that aggregated openapi spec may override swagger securityDefinitions and swagger info in kube-apiserver ([#73484](https://github.com/kubernetes/kubernetes/pull/73484), [@roycaihw](https://github.com/roycaihw)) +* Fixes a bug that prevented deletion of dynamically provisioned volumes in Quobyte backends. ([#68925](https://github.com/kubernetes/kubernetes/pull/68925), [@casusbelli](https://github.com/casusbelli)) +* error messages returned in authentication webhook status responses are now correctly included in the apiserver log ([#73595](https://github.com/kubernetes/kubernetes/pull/73595), [@liggitt](https://github.com/liggitt)) +* kubeadm: `kubeadm alpha preflight` and `kubeadm alpha preflight node` are removed; you can now use `kubeadm join phase preflight` ([#73718](https://github.com/kubernetes/kubernetes/pull/73718), [@fabriziopandini](https://github.com/fabriziopandini)) +* kube-apiserver: the deprecated `repair-malformed-updates` has been removed ([#73663](https://github.com/kubernetes/kubernetes/pull/73663), [@danielqsj](https://github.com/danielqsj)) +* e2e.test now rejects unknown --provider values instead of merely warning about them. An empty provider name is not accepted anymore and was replaced by "skeleton" (= a provider with no special behavior). ([#73402](https://github.com/kubernetes/kubernetes/pull/73402), [@pohly](https://github.com/pohly)) +* Updated AWS SDK to v1.16.26 for ECR PrivateLink support ([#73435](https://github.com/kubernetes/kubernetes/pull/73435), [@micahhausler](https://github.com/micahhausler)) +* Expand kubectl wait to work with more types of selectors. ([#71746](https://github.com/kubernetes/kubernetes/pull/71746), [@rctl](https://github.com/rctl)) +* The CustomPodDNS feature gate has graduated to GA, and can no longer be disabled. The feature gate will be removed in v1.16 ([#72832](https://github.com/kubernetes/kubernetes/pull/72832), [@MrHohn](https://github.com/MrHohn)) +* The `rules` field in RBAC Role and ClusterRole objects is now correctly reported as optional in the openapi schema. ([#73250](https://github.com/kubernetes/kubernetes/pull/73250), [@liggitt](https://github.com/liggitt)) +* AWS ELB health checks will now use HTTPS/SSL protocol for HTTPS/SSL backends. ([#70309](https://github.com/kubernetes/kubernetes/pull/70309), [@2rs2ts](https://github.com/2rs2ts)) +* kubeadm reset: fixed crash caused by absence of a configuration file ([#73636](https://github.com/kubernetes/kubernetes/pull/73636), [@bart0sh](https://github.com/bart0sh)) +* CoreDNS is now version 1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610), [@rajansandeep](https://github.com/rajansandeep)) + * - A new `k8s_external` plugin that allows external zones to point to Kubernetes in-cluster services. + * - CoreDNS now checks if a zone transfer is allowed. Also allow a TTL of 0 to avoid caching in the cache plugin. + * - TTL is also applied to negative responses (NXDOMAIN, etc). + +* Missing directories listed in a user's PATH are no longer considered errors and are instead logged by the "kubectl plugin list" command when listing available plugins. ([#73542](https://github.com/kubernetes/kubernetes/pull/73542), [@juanvallejo](https://github.com/juanvallejo)) +* remove kubelet flag '--experimental-fail-swap-on' (deprecated in v1.8) ([#69552](https://github.com/kubernetes/kubernetes/pull/69552), [@Pingan2017](https://github.com/Pingan2017)) +* Introduced support for Windows nodes into the cluster bringup scripts for GCE. ([#73442](https://github.com/kubernetes/kubernetes/pull/73442), [@pjh](https://github.com/pjh)) +* Now users could get object info like: ([#73063](https://github.com/kubernetes/kubernetes/pull/73063), [@WanLinghao](https://github.com/WanLinghao)) + * a. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0:3].name + * b. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[-2:].name +* scheduler: use incremental scheduling cycle in PriorityQueue to put all in-flight unschedulable pods back to active queue if we received move request ([#73309](https://github.com/kubernetes/kubernetes/pull/73309), [@cofyc](https://github.com/cofyc)) +* fixes an error processing watch events when running skewed apiservers ([#73482](https://github.com/kubernetes/kubernetes/pull/73482), [@liggitt](https://github.com/liggitt)) +* Prometheus metrics for crd_autoregister, crd_finalizer and crd_naming_condition_controller are exported. ([#71767](https://github.com/kubernetes/kubernetes/pull/71767), [@roycaihw](https://github.com/roycaihw)) +* Adds deleting pods created by DaemonSet assigned to not existing nodes. ([#73401](https://github.com/kubernetes/kubernetes/pull/73401), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* Graduate Pod Priority and Preemption to GA. ([#73498](https://github.com/kubernetes/kubernetes/pull/73498), [@bsalamat](https://github.com/bsalamat)) +* Adds configuration for AWS endpoint fine control: ([#72245](https://github.com/kubernetes/kubernetes/pull/72245), [@ampsingram](https://github.com/ampsingram)) + * OverrideEndpoints bool Set to true to allow custom endpoints + * ServiceDelimiter string Delimiter to use to separate overridden services (multiple services) Defaults to "&" + * ServicenameDelimiter string Delimiter to use to separate servicename from its configuration parameters Defaults "|" + * OverrideSeparator string Delimiter to use to separate region of occurrence, url and signing region for each override Defaults to "," + * ServiceOverrides string example: s3|region1, https://s3.foo.bar, some signing_region & ec2|region2, https://ec2.foo.bar, signing_region +* The CoreDNS configuration now has the forward plugin for proxy in the default configuration instead of the proxy plugin. ([#73267](https://github.com/kubernetes/kubernetes/pull/73267), [@rajansandeep](https://github.com/rajansandeep)) +* Fixed a bug that caused PV allocation on non-English vSphere installations to fail ([#73115](https://github.com/kubernetes/kubernetes/pull/73115), [@alvaroaleman](https://github.com/alvaroaleman)) + + + +# v1.14.0-alpha.2 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-alpha.2 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes.tar.gz) | `1330e4421b61f6b1e6e4dee276d4742754bd3dd4493508d67ebb4445065277c619c4da8b4835febf0b2cdcf9e75fce96de1c1d99998904bae2bb794a453693f2` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-src.tar.gz) | `352c043bebf13a616441c920f3eec80d3f02f111d8488c31aa903e1483bce6d1fbe7472208f64730142960c8f778ab921ef7b654540a3ec09e53bd7e644521bd` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `ee5aba4efce323167e6d897a2ff6962a240e466333bcae9390be2c8521c6da50ac2cb6139510b693aad49d6393b97a2118ed1fe4f999dd08bdca6d875d25f804` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `4b5c0b340322956a8d096c595124a765ac318d0eb460d6320218f2470e22d88221a0a9f1f93d5f3075f1c36b18c7041ee2fcb32e0f9c94d9f79bc3fd3005e68e` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `7a5bfe68dd58c8478746a410872b615daf8abb9a78754140fb4d014a0c9177a87859ac046f56f5743fb97a9881abc2cf48c3e51aa02c8a86a754bf2cc59edb54` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `c3139f58070241f2da815f701af3c0bd0ea4fdec1fe54bb859bd11237ac9b75ecb01b62ac1c7a459a4dd79696412c6d2f8cbd492fd062a790ceadd3dcc9b07fd` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `9d96d2e1e11aa61e2c3a5f4f27c18866feae9833b6ee70b15f5cdb5f992849dc1f79821af856b467487092a21a447231fb9c4de6ee6f17defed3cfa16d35b4c6` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `7b4dd825cf9f217c18b28976a3faa94f0bd4868e541e5be7d57cd770e2b163c6daddf12e5f9ad51d92abde794a444f2a20bf582a30f03c39e60186d356030a2d` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `490638e250c24b6bad8b67358fd7890f7a2f6456ae8ffe537c28bb5b3ce7abc591e6fecbddd6744f0f6c0e24b9f44c31f7ca1f7ebfc3c0d17a96fe8cf27b8548` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `9dd8c3361eda15dd1594066c55b79cb9a34578c225b2b48647cd5b34619cf23106b845ee25b80d979f8b69e8733148842177500dc48989177b6944677f071f1c` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `d624b8aead053201765b713d337528be82a71328ee3dd569f556868ceeb4904e64584892a016d247608fc4521c00ead7aed5d973b1206caa2d00406532d5b8b4` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `a1cf8c67984dd4eb4610fa05d27fe9e9e4123159f933e3986e9db835b9cf136962168f0003071001e01e2c1831804ba0a366f2495741aa60a41587a69c09cb62` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `b93982b56371994c540cd11e6bc21808279340617164992c10f30d8e6ae4d5e270e41c1edc0625d3458a18944ec7aa8c273acbbcd718d60b6cacbc24220c42ac` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `bfd76c6b26e5927166d776f6110b97ee36c1d63ad39e2d18899f3e428ebb0f9615bb677ac8e9bcc1864c72a40efd71e1314fe6d137f9c6e54f720270929e3f46` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `6721dec0df9466cd6c056160c73d598296cebb0af9259eb21b693abb8708901bc8bc30e11815e14d00d6eb12b8bb90b699e3119b922da855e2c411bdf229d6e5` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `f8cd307db8141d989ae1218dd2b438bc9cee017d533b1451d2345f9689c451fdb080acd1b9b2f535ed04017e44b81a0585072e7d58a9d201a0ec28fd09df0a6f` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `de7514bbd87a1b363e1bc7787f37d5ea10faac4afe7c5163c23c4df16781aa77570ec553bc4f4b6094166c1fcfc3c431f13e51ffa32f7ea2849e76ec0151ea35` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `8c37fd2fe6232d2c148e23df021b8b5347136263399932bcdff0c7a0186f3145de9ede4936b14de7484cc6db9241517d79b5306c380ed374396882900b63e912` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `389e4e77ab9e62968a25b8f4e146a2c3fbb3db2e60e051922edf6395c26cc5380e5a77bf67022339d6ebfe9abd714636d77510bbc42924b4265fdb245fae08c9` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `7efc32dfeefcef7f860913c25431bd891a435e92cb8d5a95f8deca1a82aa899a007d4b19134493694a4bccb5564867488634a780c128f0cf82c61d98afa889f5` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `da30c03bca4b81d810a7df006db02333dea87e336d6cdca9c93392e01c7e43bf4902c969efa7fa53e8a70a0e863b403ec26b87bd38226b8b9f98777ddb0051a0` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `cce43b7f0350b9e5a77ea703225adb9714ef022d176db5b99a0327937d19021d7a8e93ef1169389fd53b895bb98725d23c7565ef80afdd17596c26daf41eeeac` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `d3accf522d80cbfb3d03e9eaa60a09767ba11e88a8a5b44a629192a7c6916b1fb3440f022a5ffc4ea78f3595f254a42f028dd428d117360091cd0c747ec39eb5` + +## Changelog since v1.14.0-alpha.1 + +### Action Required + +* Promote ValidateProxyRedirects to Beta, and enable by default. This feature restricts redirect following from the apiserver to same-host redirects. ([#72552](https://github.com/kubernetes/kubernetes/pull/72552), [@tallclair](https://github.com/tallclair)) + * ACTION REQUIRED: If nodes are configured to respond to CRI streaming requests on a different host interface than what the apiserver makes requests on (only the case if not using the built-in dockershim & setting the kubelet flag `--redirect-container-streaming=true`), then these requests will be broken. In that case, the feature can be temporarily disabled until the node configuration is corrected. We suggest setting `--redirect-container-streaming=false` on the kubelet to avoid issues. + +### Other notable changes + +* Added alpha field storageVersionHash to the discovery document for each resource. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#73191](https://github.com/kubernetes/kubernetes/pull/73191), [@caesarxuchao](https://github.com/caesarxuchao)) +* Fix admission metrics in seconds. ([#72343](https://github.com/kubernetes/kubernetes/pull/72343), [@danielqsj](https://github.com/danielqsj)) + * Add metrics `*_admission_latencies_milliseconds` and `*_admission_latencies_milliseconds_summary` for backward compatible, but will be removed in a future release. +* Pod eviction now honors graceful deletion by default if no delete options are provided in the eviction request ([#72730](https://github.com/kubernetes/kubernetes/pull/72730), [@liggitt](https://github.com/liggitt)) +* Update to go1.11.5 ([#73326](https://github.com/kubernetes/kubernetes/pull/73326), [@ixdy](https://github.com/ixdy)) +* Change proxy metrics to conform metrics guidelines. ([#72334](https://github.com/kubernetes/kubernetes/pull/72334), [@danielqsj](https://github.com/danielqsj)) + * The metrics `sync_proxy_rules_latency_microseconds` is deprecated, and will be removed in a future release, please convert to metrics`sync_proxy_rules_latency_seconds`. +* Add network stats for Windows nodes and pods. ([#70121](https://github.com/kubernetes/kubernetes/pull/70121), [@feiskyer](https://github.com/feiskyer)) +* kubeadm: When certificates are present joining a new control plane make sure that they match at least the required SANs ([#73093](https://github.com/kubernetes/kubernetes/pull/73093), [@ereslibre](https://github.com/ereslibre)) +* A new `TaintNodesByCondition` admission plugin taints newly created Node objects as "not ready", to fix a race condition that could cause pods to be scheduled on new nodes before their taints were updated to accurately reflect their reported conditions. This admission plugin is enabled by default if the `TaintNodesByCondition` feature is enabled. ([#73097](https://github.com/kubernetes/kubernetes/pull/73097), [@bsalamat](https://github.com/bsalamat)) +* kube-addon-manager was updated to v9.0, and now uses kubectl v1.13.2 and prunes workload resources via the apps/v1 API ([#72978](https://github.com/kubernetes/kubernetes/pull/72978), [@liggitt](https://github.com/liggitt)) +* When a watch is closed by an HTTP2 load balancer and we are told to go away, skip printing the message to stderr by default. ([#73277](https://github.com/kubernetes/kubernetes/pull/73277), [@smarterclayton](https://github.com/smarterclayton)) +* If you are running the cloud-controller-manager and you have the `pvlabel.kubernetes.io` alpha Initializer enabled, you must now enable PersistentVolume labeling using the `PersistentVolumeLabel` admission controller instead. You can do this by adding `PersistentVolumeLabel` in the `--enable-admission-plugins` kube-apiserver flag. ([#73102](https://github.com/kubernetes/kubernetes/pull/73102), [@andrewsykim](https://github.com/andrewsykim)) +* The alpha Initializers feature, `admissionregistration.k8s.io/v1alpha1` API version, `Initializers` admission plugin, and use of the `metadata.initializers` API field have been removed. Discontinue use of the alpha feature and delete any existing `InitializerConfiguration` API objects before upgrading. The `metadata.initializers` field will be removed in a future release. ([#72972](https://github.com/kubernetes/kubernetes/pull/72972), [@liggitt](https://github.com/liggitt)) +* Scale max-inflight limits together with master VM sizes. ([#73268](https://github.com/kubernetes/kubernetes/pull/73268), [@wojtek-t](https://github.com/wojtek-t)) +* kubectl supports copying files with wild card ([#72641](https://github.com/kubernetes/kubernetes/pull/72641), [@dixudx](https://github.com/dixudx)) +* kubeadm: add back `--cert-dir` option for `kubeadm init phase certs sa` ([#73239](https://github.com/kubernetes/kubernetes/pull/73239), [@mattkelly](https://github.com/mattkelly)) +* Remove deprecated args '--show-all' ([#69255](https://github.com/kubernetes/kubernetes/pull/69255), [@Pingan2017](https://github.com/Pingan2017)) +* As per deprecation policy in https://kubernetes.io/docs/reference/using-api/deprecation-policy/ ([#73001](https://github.com/kubernetes/kubernetes/pull/73001), [@shivnagarajan](https://github.com/shivnagarajan)) + * the taints "node.alpha.kubernetes.io/notReady" and "node.alpha.kubernetes.io/unreachable". are no + * longer supported or adjusted. These uses should be replaced with "node.kubernetes.io/not-ready" + * and "node.kubernetes.io/unreachable" respectively instead. +* The /swagger.json and /swagger-2.0.0.pb-v1 schema documents, deprecated since v1.10, have been removed in favor of `/openapi/v2` ([#73148](https://github.com/kubernetes/kubernetes/pull/73148), [@liggitt](https://github.com/liggitt)) +* CoreDNS is only officially supported on Linux at this time. As such, when kubeadm is used to deploy this component into your kubernetes cluster, it will be restricted (using nodeSelectors) to run only on nodes with that operating system. This ensures that in clusters which include Windows nodes, the scheduler will not ever attempt to place CoreDNS pods on these machines, reducing setup latency and enhancing initial cluster stability. ([#69940](https://github.com/kubernetes/kubernetes/pull/69940), [@MarcPow](https://github.com/MarcPow)) +* kubeadm now attempts to detect an installed CRI by its usual domain socket, so that --cri-socket can be omitted from the command line if Docker is not used and there is a single CRI installed. ([#69366](https://github.com/kubernetes/kubernetes/pull/69366), [@rosti](https://github.com/rosti)) +* scheduler: makes pod less racing so as to be put back into activeQ properly ([#73078](https://github.com/kubernetes/kubernetes/pull/73078), [@Huang-Wei](https://github.com/Huang-Wei)) +* jsonpath expressions containing `[start:end:step]` slice are now evaluated correctly ([#73149](https://github.com/kubernetes/kubernetes/pull/73149), [@liggitt](https://github.com/liggitt)) +* metadata.deletionTimestamp is no longer moved into the future when issuing repeated DELETE requests against a resource containing a finalizer. ([#73138](https://github.com/kubernetes/kubernetes/pull/73138), [@liggitt](https://github.com/liggitt)) +* The "kubectl api-resources" command will no longer fail to display any resources on a single failure ([#73035](https://github.com/kubernetes/kubernetes/pull/73035), [@juanvallejo](https://github.com/juanvallejo)) +* e2e tests that require SSH may be used against clusters that have nodes without external IP addresses by setting the environment variable `KUBE_SSH_BASTION` to the `host:port` of a machine that is allowed to SSH to those nodes. The same private key that the test would use is used for the bastion host. The test connects to the bastion and then tunnels another SSH connection to the node. ([#72286](https://github.com/kubernetes/kubernetes/pull/72286), [@smarterclayton](https://github.com/smarterclayton)) +* kubeadm: explicitly wait for `etcd` to have grown when joining a new control plane ([#72984](https://github.com/kubernetes/kubernetes/pull/72984), [@ereslibre](https://github.com/ereslibre)) +* Install CSINodeInfo and CSIDriver CRDs in the local cluster. ([#72584](https://github.com/kubernetes/kubernetes/pull/72584), [@xing-yang](https://github.com/xing-yang)) +* kubectl loads config file once and uses persistent client config ([#71117](https://github.com/kubernetes/kubernetes/pull/71117), [@dixudx](https://github.com/dixudx)) +* remove stale OutOfDisk condition from kubelet side ([#72507](https://github.com/kubernetes/kubernetes/pull/72507), [@dixudx](https://github.com/dixudx)) +* Node OS/arch labels are promoted to GA ([#73048](https://github.com/kubernetes/kubernetes/pull/73048), [@yujuhong](https://github.com/yujuhong)) +* Fix graceful apiserver shutdown to not drop outgoing bytes before the process terminates. ([#72970](https://github.com/kubernetes/kubernetes/pull/72970), [@sttts](https://github.com/sttts)) +* Change apiserver metrics to conform metrics guidelines. ([#72336](https://github.com/kubernetes/kubernetes/pull/72336), [@danielqsj](https://github.com/danielqsj)) + * The following metrics are deprecated, and will be removed in a future release: + * `apiserver_request_count` + * `apiserver_request_latencies` + * `apiserver_request_latencies_summary` + * `apiserver_dropped_requests` + * `etcd_helper_cache_hit_count` + * `etcd_helper_cache_miss_count` + * `etcd_helper_cache_entry_count` + * `etcd_request_cache_get_latencies_summary` + * `etcd_request_cache_add_latencies_summary` + * `etcd_request_latencies_summary` + * `transformation_latencies_microseconds ` + * `data_key_generation_latencies_microseconds` + * Please convert to the following metrics: + * `apiserver_request_total` + * `apiserver_request_latency_seconds` + * `apiserver_dropped_requests_total` + * `etcd_helper_cache_hit_total` + * `etcd_helper_cache_miss_total` + * `etcd_helper_cache_entry_total` + * `etcd_request_cache_get_latency_seconds` + * `etcd_request_cache_add_latency_seconds` + * `etcd_request_latency_seconds` + * `transformation_latencies_seconds` + * `data_key_generation_latencies_seconds` +* acquire lock before operating unschedulablepodsmap ([#73022](https://github.com/kubernetes/kubernetes/pull/73022), [@denkensk](https://github.com/denkensk)) +* Print `SizeLimit` of `EmptyDir` in `kubectl describe pod` outputs. ([#69279](https://github.com/kubernetes/kubernetes/pull/69279), [@dtaniwaki](https://github.com/dtaniwaki)) +* add goroutine to move unschedulable pods to activeq if they are not retried for more than 1 minute ([#72558](https://github.com/kubernetes/kubernetes/pull/72558), [@denkensk](https://github.com/denkensk)) +* PidPressure evicts pods from lowest priority to highest priority ([#72844](https://github.com/kubernetes/kubernetes/pull/72844), [@dashpole](https://github.com/dashpole)) +* Reduce GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#72062](https://github.com/kubernetes/kubernetes/pull/72062), [@jpbetz](https://github.com/jpbetz)) +* Add support for max attach limit for Cinder ([#72980](https://github.com/kubernetes/kubernetes/pull/72980), [@gnufied](https://github.com/gnufied)) +* Fixes the setting of NodeAddresses when using the vSphere CloudProvider and nodes that have multiple IP addresses. ([#70805](https://github.com/kubernetes/kubernetes/pull/70805), [@danwinship](https://github.com/danwinship)) +* kubeadm: pull images when joining a new control plane instance ([#72870](https://github.com/kubernetes/kubernetes/pull/72870), [@MalloZup](https://github.com/MalloZup)) +* Enable mTLS encription between etcd and kube-apiserver in GCE ([#70144](https://github.com/kubernetes/kubernetes/pull/70144), [@wenjiaswe](https://github.com/wenjiaswe)) +* The `/swaggerapi/*` schema docs, deprecated since 1.7, have been removed in favor of the /openapi/v2 schema docs. ([#72924](https://github.com/kubernetes/kubernetes/pull/72924), [@liggitt](https://github.com/liggitt)) +* Allow users to use Docker 18.09 with kubeadm ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [@dims](https://github.com/dims)) + + + +# v1.14.0-alpha.1 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.14.0-alpha.1 + + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes.tar.gz) | `fac80e5674e547d00987516fb2eca6ea9947529307566be6a12932e3c9e430e8ad094afae748f31e9574838d98052423e3634a067f1456f7c13f6b27bfa63bcc` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-src.tar.gz) | `d1b5b2c15cb0daa076606f4ccf887724b0166dee0320f2a61d16ab4689931ab0cf5dac4c499aea3d434eb96d589d2b3effe0037e2244978d4290bd19b9a3edea` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `307c426e4abaf81648af393ddd641c225d87b02d8662d1309fe3528f14ed91b2470f6b46dc8ce0459cf196e2cec906f7eb972bf4c9a96cbd570e206f5a059dca` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `8daa85f3e8feaea0d55f20f850038dd113f0f08b62eef944b08a9109d4e69f323a8fcf20c12790c78386b454148bcc9a0cdf106ba3393620709d185c291887fa` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `28d73c299cb9859fdfeb3e4869a7a9c77f5679309c2613bd2c72d92dafd5faad0653a7377616190edd29cb8fa1aff104daba98f398e72f3447a132f208dde756` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `eb923e13026f80b743a57100d4f94995f322ab6f107c34ffd9aa74b5a6c6a4a410aff8921a4f675ace7db2ff8158a90874b8f56d3142ad2cbe615c11ec2d4535` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `279b0d0c560900021abea4bbfc25aeca7389f0b37d80022dc3335147344663424e7ba6a0abecb2dca1d2facb4163e26080750736a9a1932d67422f88b0940679` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `d69d28361b9c9e16f3e6804ccda92d55ee743e63aba7fded04edf1f7202b1fa96c235e36ab2ca17df99b4aede80b92150790885bdb7f5b4d7956af3c269dd83c` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `ca6ebb87df98bf179c94f54a4e8ae2ef2ea534b1bc5014331f937aa9d4c0442d5423651457871ef5c51f481ba8a3f449d69ef7e42e49c1b313f66cff3d44926f` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `13fa2058ceba66d8da5ba5982aa302cdd1c61d15253183ab97739229584a178f057f7979b49a035cb2355197dbb388d1642939e2c002b10e23263127030022ab` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `42ba4bba477e2958aab674a0fbf888bd5401fa5fbc39466b6cad0fc97e249ac949042c513bf176957bcb336a906e612d9c6790215e78c280225351236ec96993` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `d5f339fe4d37c61babc97208446d1859423b7679f34040f72e9138b72a18d982e66732d1f4b4f3443700f9cbe96bfc0e12eaec0a8a373fb903b49efdafcbae04` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `bcbcbd3ac4419e54e894d1e595f883e61fcf9db0353a30d794a9e5030cde8957abe8124fa5265e8c52fbc93f07cfe79b2493f791dc225468bf927b7ab4694087` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `fda4ea9168555f724659601b06737dea6ec95574569df4ef7e4ab6c2cca3327623ef310bf34f792767f00ee8069b9dd83564835d43daf973087be816be40010b` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `c142857711ec698844cd61188e70b5ab185ba2c8828cf5563a2f42958489e2ae4dbb2c1626271d4f5582167bb363e55ed03afb15e7e86cd414e0dc049fe384c0` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `524a40c5717b24c5a3b2491c4c61cf3038ba5ae7f343797a1b56a5906d6a0a3eb57e9ae78590c28ac3d441d9d1bb480a0c264a07e009a4365503ad2357614aa8` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `ef943fe326b05ece57f2e409ab1cc5fe863f5effa591abae17181c84a5eb4061e9f394ffcc8ee6ebb3f5165b183bab747a8cef540cbb1436343e8180cec037e0` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `396f7588e9131dd1b99d101c8bb94fb7e67ab067327ee58dab5a6e24887d8fbb6fc78fe50804abb0ab2f626034881d4280b3f678a1fd8b34891762bf2172b268` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `b75c1550438da0b66582d6de90436ee3c44e41e67f74947d93ee9a07ed2b7757762f3f2b05bd7b5589d7e1ea2eb3616b2ef4fe59a9fbe9d8e7cb8f0c9d3dd158` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `b6c46f9250b5565fa178ecc99ffedc6724b0bfffb73acc7d3da2c678af71008a264502cc4a48a6e7452bd0a60d77194141bbc2ea9af49176ea66e27d874b77ac` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `8d505c61a59bc9fc53d6f219d6434ddd962ba383654c46e16d413cee0ad6bd26f276a9860ad3680349bcfacb361e75de07fc44f7d14c054c47b6bd0eae63615f` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `83b6cf0fb348faa93fa40ec2a947b202b3a5a2081c3896ae39618f947a57b431bc774fbe3a5437719f50f002de252438dc16bac6f632c11140f55d5051094ae6` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `43471680533685c534023787cd40431b67041bab43e93dea457283ee0f08a8fa02ee9ade3737d8e64d1d3255a281af9a107cb61f9e4d9c99dee188c82a075580` + +## Changelog since v1.13.0 + +### Action Required + +* action required ([#68753](https://github.com/kubernetes/kubernetes/pull/68753), [@johnSchnake](https://github.com/johnSchnake)) + * If you are running E2E tests which require SSH keys and you utilize environment variables to override their location, you may need to modify the environment variable set. On all providers the environment variable override can now be either an absolute path to the key or a relative path (relative to ~/.ssh). Specifically the changes are: + * - Created new GCE_SSH_KEY allowing specification of SSH keys for gce, gke, and kubemark. + * - AWS_SSH_KEY, previously assumed to be an absolute path can now be either relative or absolute + * - LOCAL_SSH_KEY (for local and vsphere providers) was previously assumed to be a filename relative to ~/.ssh but can now also be an absolute path + * - KUBE_SSH_KEY (for skeleton provider) was previously assumed to be a filename relative to ~/.ssh but can now also be an absolute path + +### Other notable changes + +* Connections from Pods to Services with 0 endpoints will now ICMP reject immediately, rather than blackhole and timeout. ([#72534](https://github.com/kubernetes/kubernetes/pull/72534), [@thockin](https://github.com/thockin)) +* Improve efficiency of preemption logic in clusters with many pending pods. ([#72895](https://github.com/kubernetes/kubernetes/pull/72895), [@bsalamat](https://github.com/bsalamat)) +* Change scheduler metrics to conform metrics guidelines. ([#72332](https://github.com/kubernetes/kubernetes/pull/72332), [@danielqsj](https://github.com/danielqsj)) + * The following metrics are deprecated, and will be removed in a future release: + * `e2e_scheduling_latency_microseconds` + * `scheduling_algorithm_latency_microseconds` + * `scheduling_algorithm_predicate_evaluation` + * `scheduling_algorithm_priority_evaluation` + * `scheduling_algorithm_preemption_evaluation` + * `binding_latency_microseconds` + * Please convert to the following metrics: + * `e2e_scheduling_latency_seconds` + * `scheduling_algorithm_latency_seconds` + * `scheduling_algorithm_predicate_evaluation_seconds` + * `scheduling_algorithm_priority_evaluation_seconds` + * `scheduling_algorithm_preemption_evaluation_seconds` + * `binding_latency_seconds` +* Fix SelectorSpreadPriority scheduler to match all selectors when distributing pods. ([#72801](https://github.com/kubernetes/kubernetes/pull/72801), [@Ramyak](https://github.com/Ramyak)) +* Add bootstrap service account & cluster roles for node-lifecycle-controller, cloud-node-lifecycle-controller, and cloud-node-controller. ([#72764](https://github.com/kubernetes/kubernetes/pull/72764), [@andrewsykim](https://github.com/andrewsykim)) +* Fixes spurious 0-length API responses. ([#72856](https://github.com/kubernetes/kubernetes/pull/72856), [@liggitt](https://github.com/liggitt)) +* Updates Fluentd to 1.3.2 & added filter_parser ([#71180](https://github.com/kubernetes/kubernetes/pull/71180), [@monotek](https://github.com/monotek)) +* The leaderelection package allows the lease holder to release its lease when the calling context is cancelled. This allows ([#71490](https://github.com/kubernetes/kubernetes/pull/71490), [@smarterclayton](https://github.com/smarterclayton)) + * faster handoff when a leader-elected process is gracefully terminated. +* Make volume binder resilient to races between main schedule loop and async binding operation ([#72045](https://github.com/kubernetes/kubernetes/pull/72045), [@cofyc](https://github.com/cofyc)) +* Bump minimum docker API version to 1.26 (1.13.1) ([#72831](https://github.com/kubernetes/kubernetes/pull/72831), [@yujuhong](https://github.com/yujuhong)) +* If the `TokenRequestProjection` feature gate is disabled, projected serviceAccountToken volume sources are now dropped at object creation time, or at object update time if the existing object did not have a projected serviceAccountToken volume source. Previously, these would result in validation errors. ([#72714](https://github.com/kubernetes/kubernetes/pull/72714), [@mourya007](https://github.com/mourya007)) +* Add `metrics-port` to kube-proxy cmd flags. ([#72682](https://github.com/kubernetes/kubernetes/pull/72682), [@whypro](https://github.com/whypro)) +* kubectl: fixed an issue with "too old resource version" errors continuously appearing when calling `kubectl delete` ([#72825](https://github.com/kubernetes/kubernetes/pull/72825), [@liggitt](https://github.com/liggitt)) +* [Breaking change, client-go]: The WaitFor function returns, probably an ErrWaitTimeout, when the done channel is closed, even if the `WaitFunc` doesn't handle the done channel. ([#72364](https://github.com/kubernetes/kubernetes/pull/72364), [@kdada](https://github.com/kdada)) +* removes newline from json output for windows nodes [#72657](https://github.com/kubernetes/kubernetes/pull/72657) ([#72659](https://github.com/kubernetes/kubernetes/pull/72659), [@jsturtevant](https://github.com/jsturtevant)) +* The DenyEscalatingExec and DenyExecOnPrivileged admission plugins are deprecated and will be removed in v1.18. Use of `PodSecurityPolicy` or a custom admission plugin to limit creation of pods is recommended instead. ([#72737](https://github.com/kubernetes/kubernetes/pull/72737), [@liggitt](https://github.com/liggitt)) +* Fix `describe statefulset` not printing number of desired replicas correctly ([#72781](https://github.com/kubernetes/kubernetes/pull/72781), [@tghartland](https://github.com/tghartland)) +* Fix kube-proxy PodSecurityPolicy binding on GCE & GKE. This was only an issue when running kube-proxy as a DaemonSet, with PodSecurityPolicy enabled. ([#72761](https://github.com/kubernetes/kubernetes/pull/72761), [@tallclair](https://github.com/tallclair)) +* Drops `status.Conditions` of new `PersistentVolume` objects if it was not set on the old object during `PrepareForUpdate`. ([#72739](https://github.com/kubernetes/kubernetes/pull/72739), [@rajathagasthya](https://github.com/rajathagasthya)) +* kubelet: fixes cadvisor internal error when "--container-runtime-endpoint" is set to "unix:///var/run/crio/crio.sock". ([#72340](https://github.com/kubernetes/kubernetes/pull/72340), [@makocchi-git](https://github.com/makocchi-git)) +* The `spec.SecurityContext.Sysctls` field is now dropped during creation of `Pod` objects unless the `Sysctls` feature gate is enabled. ([#72752](https://github.com/kubernetes/kubernetes/pull/72752), [@rajathagasthya](https://github.com/rajathagasthya)) + * The `spec.AllowedUnsafeSysctls` and `spec.ForbiddenSysctls` fields are now dropped during creation of `PodSecurityPolicy` objects unless the `Sysctls` feature gate is enabled. +* kubeadm: fixed storing of front-proxy certificate in secrets required by kube-controller-manager selfhosting pivoting ([#72727](https://github.com/kubernetes/kubernetes/pull/72727), [@bart0sh](https://github.com/bart0sh)) +* Administrator is able to configure max pids for a pod on a node. ([#72076](https://github.com/kubernetes/kubernetes/pull/72076), [@derekwaynecarr](https://github.com/derekwaynecarr)) +* Move users of `factory.NewConfigFactory` to `scheduler.New`. ([#71875](https://github.com/kubernetes/kubernetes/pull/71875), [@wgliang](https://github.com/wgliang)) +* The `spec.SecurityContext.ShareProcessNamespace` field is now dropped during creation of `Pod` objects unless the `PodShareProcessNamespace ` feature gate is enabled. ([#72698](https://github.com/kubernetes/kubernetes/pull/72698), [@rajathagasthya](https://github.com/rajathagasthya)) +* kube-apiserver: When configuring integration with external KMS Providers, users can supply timeout value (i.e. how long should kube-apiserver wait before giving up on a call to KMS). ([@immutableT](https://github.com/immutableT) ) ([#72540](https://github.com/kubernetes/kubernetes/pull/72540), [@immutableT](https://github.com/immutableT)) +* The `spec.readinessGates` field is now dropped during creation of `Pod` objects unless the `PodReadinessGates` feature gate is enabled. ([#72695](https://github.com/kubernetes/kubernetes/pull/72695), [@rajathagasthya](https://github.com/rajathagasthya)) +* The `spec.dataSource` field is now dropped during creation of PersistentVolumeClaim objects unless the `VolumeSnapshotDataSource` feature gate is enabled. ([#72666](https://github.com/kubernetes/kubernetes/pull/72666), [@rajathagasthya](https://github.com/rajathagasthya)) +* Stop kubelet logging a warning to override hostname if there's no change detected. ([#71560](https://github.com/kubernetes/kubernetes/pull/71560), [@KashifSaadat](https://github.com/KashifSaadat)) +* client-go: fake clients now properly return NotFound errors when attempting to patch non-existent objects ([#70886](https://github.com/kubernetes/kubernetes/pull/70886), [@bouk](https://github.com/bouk)) +* kubectl: fixes a bug determining the correct namespace while running in a pod when the `--context` flag is explicitly specified, and the referenced context specifies the namespace `default` ([#72529](https://github.com/kubernetes/kubernetes/pull/72529), [@liggitt](https://github.com/liggitt)) +* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#72619](https://github.com/kubernetes/kubernetes/pull/72619), [@everpeace](https://github.com/everpeace)) +* If the AppArmor feature gate is disabled, AppArmor-specific annotations in pod and pod templates are dropped when the object is created, and during update of objects that do not already contain AppArmor annotations, rather than triggering a validation error. ([#72655](https://github.com/kubernetes/kubernetes/pull/72655), [@liggitt](https://github.com/liggitt)) +* client-go: shortens refresh period for token files to 1 minute to ensure auto-rotated projected service account tokens are read frequently enough. ([#72437](https://github.com/kubernetes/kubernetes/pull/72437), [@liggitt](https://github.com/liggitt)) +* Multiple tests which previously failed due to lack of external IP addresses defined on the nodes should now be passable. ([#68792](https://github.com/kubernetes/kubernetes/pull/68792), [@johnSchnake](https://github.com/johnSchnake)) +* kubeadm: fixed incorrect controller manager pod mutations during selfhosting pivoting ([#72518](https://github.com/kubernetes/kubernetes/pull/72518), [@bart0sh](https://github.com/bart0sh)) +* Increase Azure default maximumLoadBalancerRuleCount to 250. ([#72621](https://github.com/kubernetes/kubernetes/pull/72621), [@feiskyer](https://github.com/feiskyer)) +* RuntimeClass is now printed with extra `RUNTIME-HANDLER` column. ([#72446](https://github.com/kubernetes/kubernetes/pull/72446), [@Huang-Wei](https://github.com/Huang-Wei)) +* Updates the kubernetes dashboard add-on to v1.10.1. Skipping dashboard login is no longer enabled by default. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495), [@liggitt](https://github.com/liggitt)) +* [GCP] Remove confusing error log entry form fluentd scalers. ([#72243](https://github.com/kubernetes/kubernetes/pull/72243), [@cezarygerard](https://github.com/cezarygerard)) +* change azure disk host cache to ReadOnly by default ([#72229](https://github.com/kubernetes/kubernetes/pull/72229), [@andyzhangx](https://github.com/andyzhangx)) +* Nodes deleted in the cloud provider with Ready condition `Unknown` should also be deleted on the API server. ([#72559](https://github.com/kubernetes/kubernetes/pull/72559), [@andrewsykim](https://github.com/andrewsykim)) +* `kubectl apply --prune` now uses the apps/v1 API to prune workload resources ([#72352](https://github.com/kubernetes/kubernetes/pull/72352), [@liggitt](https://github.com/liggitt)) +* Fixes a bug in HPA controller so HPAs are always updated every resyncPeriod (15 seconds). ([#72373](https://github.com/kubernetes/kubernetes/pull/72373), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* IPVS: "ExternalTrafficPolicy: Local" now works with LoadBalancer services using loadBalancerIP ([#72432](https://github.com/kubernetes/kubernetes/pull/72432), [@lbernail](https://github.com/lbernail)) +* Fixes issue with cleaning up stale NFS subpath mounts ([#71804](https://github.com/kubernetes/kubernetes/pull/71804), [@msau42](https://github.com/msau42)) +* Modify the scheduling result struct and improve logging for successful binding. ([#71926](https://github.com/kubernetes/kubernetes/pull/71926), [@wgliang](https://github.com/wgliang)) +* Run one etcd storage compaction per default interval of 5min. Do not run one for each resource and each CRD. This fixes the compaction log spam and reduces load on etcd. ([#68557](https://github.com/kubernetes/kubernetes/pull/68557), [@sttts](https://github.com/sttts)) +* kube-apiserver: `--runtime-config` can once again be used to enable/disable serving specific resources in the `extensions/v1beta1` API group. Note that specific resource enablement/disablement is only allowed for the `extensions/v1beta1` API group for legacy reasons. Attempts to enable/disable individual resources in other API groups will print a warning, and will return an error in future releases. ([#72249](https://github.com/kubernetes/kubernetes/pull/72249), [@liggitt](https://github.com/liggitt)) +* kubeadm: fixed storing of etcd certificates in secrets required by kube-apiserver selfhosting pivoting ([#72478](https://github.com/kubernetes/kubernetes/pull/72478), [@bart0sh](https://github.com/bart0sh)) +* kubeadm: remove the deprecated "--address" flag for controller-manager and scheduler. ([#71973](https://github.com/kubernetes/kubernetes/pull/71973), [@MalloZup](https://github.com/MalloZup)) +* kube-apiserver: improves performance of requests made with service account token authentication ([#71816](https://github.com/kubernetes/kubernetes/pull/71816), [@liggitt](https://github.com/liggitt)) +* Use prometheus conventions for workqueue metrics. ([#71300](https://github.com/kubernetes/kubernetes/pull/71300), [@danielqsj](https://github.com/danielqsj)) + * It is now deprecated to use the following metrics: + * `{WorkQueueName}_depth` + * `{WorkQueueName}_adds` + * `{WorkQueueName}_queue_latency` + * `{WorkQueueName}_work_duration` + * `{WorkQueueName}_unfinished_work_seconds` + * `{WorkQueueName}_longest_running_processor_microseconds` + * `{WorkQueueName}_retries` + * Please convert to the following metrics: + * `workqueue_depth` + * `workqueue_adds_total` + * `workqueue_queue_latency_seconds` + * `workqueue_work_duration_seconds` + * `workqueue_unfinished_work_seconds` + * `workqueue_longest_running_processor_seconds` + * `workqueue_retries_total` +* Fix inability to use k8s with dockerd having default IPC mode set to private. ([#70826](https://github.com/kubernetes/kubernetes/pull/70826), [@kolyshkin](https://github.com/kolyshkin)) +* Fix a race condition in the scheduler preemption logic that could cause nominatedNodeName of a pod not to be considered in one or more scheduling cycles. ([#72259](https://github.com/kubernetes/kubernetes/pull/72259), [@bsalamat](https://github.com/bsalamat)) +* Fix registration for scheduling framework plugins with the default plugin set ([#72396](https://github.com/kubernetes/kubernetes/pull/72396), [@y-taka-23](https://github.com/y-taka-23)) +* The GA VolumeScheduling feature gate can no longer be disabled and will be removed in a future release ([#72382](https://github.com/kubernetes/kubernetes/pull/72382), [@liggitt](https://github.com/liggitt)) +* Fix race condition introduced by graceful termination which can lead to a deadlock in kube-proxy ([#72361](https://github.com/kubernetes/kubernetes/pull/72361), [@lbernail](https://github.com/lbernail)) +* Fixes issue where subpath volume content was deleted during orphaned pod cleanup for Local volumes that are directories (and not mount points) on the root filesystem. ([#72291](https://github.com/kubernetes/kubernetes/pull/72291), [@msau42](https://github.com/msau42)) +* Fixes `kubectl create secret docker-registry` compatibility ([#72344](https://github.com/kubernetes/kubernetes/pull/72344), [@liggitt](https://github.com/liggitt)) +* Add-on manifests now use the apps/v1 API for DaemonSets, Deployments, and ReplicaSets ([#72203](https://github.com/kubernetes/kubernetes/pull/72203), [@liggitt](https://github.com/liggitt)) +* "kubectl wait" command now supports the "--all" flag to select all resources in the namespace of the specified resource types. ([#70599](https://github.com/kubernetes/kubernetes/pull/70599), [@caesarxuchao](https://github.com/caesarxuchao)) +* `deployments/rollback` is now passed through validation/admission controllers ([#72271](https://github.com/kubernetes/kubernetes/pull/72271), [@jhrv](https://github.com/jhrv)) +* The `Lease` API type in the `coordination.k8s.io` API group is promoted to `v1` ([#72239](https://github.com/kubernetes/kubernetes/pull/72239), [@wojtek-t](https://github.com/wojtek-t)) +* Move compatibility_test.go to pkg/scheduler/api ([#72014](https://github.com/kubernetes/kubernetes/pull/72014), [@huynq0911](https://github.com/huynq0911)) +* New Azure cloud provider option 'cloudProviderBackoffMode' has been added to reduce Azure API retries. Candidate values are: ([#70866](https://github.com/kubernetes/kubernetes/pull/70866), [@feiskyer](https://github.com/feiskyer)) + * default (or empty string): keep same with before. + * v2: only backoff retry with Azure SDK with fixed exponent 2. +* Set percentage of nodes scored in each cycle dynamically based on the cluster size. ([#72140](https://github.com/kubernetes/kubernetes/pull/72140), [@wgliang](https://github.com/wgliang)) +* Fix AAD support for Azure sovereign cloud in kubectl ([#72143](https://github.com/kubernetes/kubernetes/pull/72143), [@karataliu](https://github.com/karataliu)) +* Make kube-proxy service abstraction optional. ([#71355](https://github.com/kubernetes/kubernetes/pull/71355), [@bradhoekstra](https://github.com/bradhoekstra)) + * Add the 'service.kubernetes.io/service-proxy-name' label to a Service to disable the kube-proxy service proxy implementation. +* kubectl: `-A` can now be used as a shortcut for `--all-namespaces` ([#72006](https://github.com/kubernetes/kubernetes/pull/72006), [@soltysh](https://github.com/soltysh)) +* discovery.CachedDiscoveryInterface implementation returned by NewMemCacheClient has changed semantics of Invalidate method -- the cache refresh is now deferred to the first cache lookup. ([#70994](https://github.com/kubernetes/kubernetes/pull/70994), [@mborsz](https://github.com/mborsz)) +* Fix device mountable volume names in DSW to prevent races in device mountable plugin, e.g. local. ([#71509](https://github.com/kubernetes/kubernetes/pull/71509), [@cofyc](https://github.com/cofyc)) +* Enable customize in kubectl: kubectl will be able to recognize directories with kustomization.YAML ([#70875](https://github.com/kubernetes/kubernetes/pull/70875), [@Liujingfang1](https://github.com/Liujingfang1)) +* Stably sort controllerrevisions. This can prevent pods of statefulsets from continually rolling. ([#66882](https://github.com/kubernetes/kubernetes/pull/66882), [@ryanmcnamara](https://github.com/ryanmcnamara)) +* Update to use go1.11.4. ([#72084](https://github.com/kubernetes/kubernetes/pull/72084), [@ixdy](https://github.com/ixdy)) +* fixes an issue deleting pods containing subpath volume mounts with the VolumeSubpath feature disabled ([#70490](https://github.com/kubernetes/kubernetes/pull/70490), [@liggitt](https://github.com/liggitt)) +* Clean up old eclass code ([#71399](https://github.com/kubernetes/kubernetes/pull/71399), [@resouer](https://github.com/resouer)) +* Fix a race condition in which kubeadm only waits for the kubelets kubeconfig file when it has performed the TLS bootstrap, but wasn't waiting for certificates to be present in the filesystem ([#72030](https://github.com/kubernetes/kubernetes/pull/72030), [@ereslibre](https://github.com/ereslibre)) +* In addition to restricting GCE metadata requests to known APIs, the metadata-proxy now restricts query strings to known parameters. ([#71094](https://github.com/kubernetes/kubernetes/pull/71094), [@dekkagaijin](https://github.com/dekkagaijin)) +* kubeadm: fix a possible panic when joining a new control plane node in HA scenarios ([#72123](https://github.com/kubernetes/kubernetes/pull/72123), [@anitgandhi](https://github.com/anitgandhi)) +* fix race condition when attach azure disk in vmss ([#71992](https://github.com/kubernetes/kubernetes/pull/71992), [@andyzhangx](https://github.com/andyzhangx)) +* Update to use go1.11.3 with fix for CVE-2018-16875 ([#72035](https://github.com/kubernetes/kubernetes/pull/72035), [@seemethere](https://github.com/seemethere)) +* kubeadm: fix a bug when syncing etcd endpoints ([#71945](https://github.com/kubernetes/kubernetes/pull/71945), [@pytimer](https://github.com/pytimer)) +* fix kubelet log flushing issue in azure disk ([#71990](https://github.com/kubernetes/kubernetes/pull/71990), [@andyzhangx](https://github.com/andyzhangx)) +* Disable proxy to loopback and linklocal ([#71980](https://github.com/kubernetes/kubernetes/pull/71980), [@micahhausler](https://github.com/micahhausler)) +* Fix overlapping filenames in diff if multiple resources have the same name. ([#71923](https://github.com/kubernetes/kubernetes/pull/71923), [@apelisse](https://github.com/apelisse)) +* fix issue: vm sku restriction policy does not work in azure disk attach/detach ([#71941](https://github.com/kubernetes/kubernetes/pull/71941), [@andyzhangx](https://github.com/andyzhangx)) +* kubeadm: Create /var/lib/etcd with correct permissions (0700) by default. ([#71885](https://github.com/kubernetes/kubernetes/pull/71885), [@dims](https://github.com/dims)) +* Scheduler only activates unschedulable pods if node's scheduling related properties change. ([#71551](https://github.com/kubernetes/kubernetes/pull/71551), [@mlmhl](https://github.com/mlmhl)) +* kube-proxy in IPVS mode will stop initiating connections to terminating pods for services with sessionAffinity set. ([#71834](https://github.com/kubernetes/kubernetes/pull/71834), [@lbernail](https://github.com/lbernail)) +* kubeadm: improve hostport parsing error messages ([#71258](https://github.com/kubernetes/kubernetes/pull/71258), [@bart0sh](https://github.com/bart0sh)) +* Support graceful termination with IPVS when deleting a service ([#71895](https://github.com/kubernetes/kubernetes/pull/71895), [@lbernail](https://github.com/lbernail)) +* Include CRD for BGPConfigurations, needed for calico 2.x to 3.x upgrade. ([#71868](https://github.com/kubernetes/kubernetes/pull/71868), [@satyasm](https://github.com/satyasm)) +* apply: fix detection of non-dry-run enabled servers ([#71854](https://github.com/kubernetes/kubernetes/pull/71854), [@apelisse](https://github.com/apelisse)) +* Clear UDP conntrack entry on endpoint changes when using nodeport ([#71573](https://github.com/kubernetes/kubernetes/pull/71573), [@JacobTanenbaum](https://github.com/JacobTanenbaum)) +* Add successful and failed history limits to cronjob describe ([#71844](https://github.com/kubernetes/kubernetes/pull/71844), [@soltysh](https://github.com/soltysh)) +* kube-controller-manager: fixed issue display help for the deprecated insecure --port flag ([#71601](https://github.com/kubernetes/kubernetes/pull/71601), [@liggitt](https://github.com/liggitt)) +* kubectl: fixes regression in --sort-by behavior ([#71805](https://github.com/kubernetes/kubernetes/pull/71805), [@liggitt](https://github.com/liggitt)) +* Fixes pod deletion when cleaning old cronjobs ([#71801](https://github.com/kubernetes/kubernetes/pull/71801), [@soltysh](https://github.com/soltysh)) +* kubeadm: use kubeconfig flag instead of kubeconfig-dir on init phase bootstrap-token ([#71803](https://github.com/kubernetes/kubernetes/pull/71803), [@yagonobre](https://github.com/yagonobre)) +* kube-scheduler: restores ability to run without authentication configuration lookup permissions ([#71755](https://github.com/kubernetes/kubernetes/pull/71755), [@liggitt](https://github.com/liggitt)) +* Add aggregator_unavailable_apiservice_{count,gauge} metrics in the kube-aggregator. ([#71380](https://github.com/kubernetes/kubernetes/pull/71380), [@sttts](https://github.com/sttts)) +* Fixes apiserver nil pointer panics when requesting v2beta1 autoscaling object metrics ([#71744](https://github.com/kubernetes/kubernetes/pull/71744), [@yue9944882](https://github.com/yue9944882)) +* Only use the first IP address got from instance metadata. This is because Azure CNI would set up a list of IP addresses in instance metadata, while only the first one is the Node's IP. ([#71736](https://github.com/kubernetes/kubernetes/pull/71736), [@feiskyer](https://github.com/feiskyer)) +* client-go: restores behavior of populating the BearerToken field in rest.Config objects constructed from kubeconfig files containing tokenFile config, or from in-cluster configuration. An additional BearerTokenFile field is now populated to enable constructed clients to periodically refresh tokens. ([#71713](https://github.com/kubernetes/kubernetes/pull/71713), [@liggitt](https://github.com/liggitt)) +* kubeadm: remove deprecated kubeadm config print-defaults command ([#71467](https://github.com/kubernetes/kubernetes/pull/71467), [@rosti](https://github.com/rosti)) +* hack/local-up-cluster.sh now enables kubelet authentication/authorization by default (they can be disabled with KUBELET_AUTHENTICATION_WEBHOOK=false and KUBELET_AUTHORIZATION_WEBHOOK=false ([#71690](https://github.com/kubernetes/kubernetes/pull/71690), [@liggitt](https://github.com/liggitt)) +* Fixes an issue where Azure VMSS instances not existing in Azure were not being deleted by the Cloud Controller Manager. ([#71597](https://github.com/kubernetes/kubernetes/pull/71597), [@marc-sensenich](https://github.com/marc-sensenich)) +* kubeadm reset correcty unmounts mount points inside /var/lib/kubelet ([#71663](https://github.com/kubernetes/kubernetes/pull/71663), [@bart0sh](https://github.com/bart0sh)) +* Upgrade default etcd server to 3.3.10 ([#71615](https://github.com/kubernetes/kubernetes/pull/71615), [@jpbetz](https://github.com/jpbetz)) +* When creating a service with annotation: service.beta.kubernetes.io/load-balancer-source-ranges containing multiple source ranges and service.beta.kubernetes.io/azure-shared-securityrule: "false", the NSG rules will be collapsed. ([#71484](https://github.com/kubernetes/kubernetes/pull/71484), [@ritazh](https://github.com/ritazh)) +* disable node's proxy use of http probe ([#68663](https://github.com/kubernetes/kubernetes/pull/68663), [@WanLinghao](https://github.com/WanLinghao)) +* Bumps version of kubernetes-cni to 0.6.0 ([#71629](https://github.com/kubernetes/kubernetes/pull/71629), [@mauilion](https://github.com/mauilion)) +* On GCI, NPD starts to monitor kubelet, docker, containerd crashlooping, read-only filesystem and corrupt docker overlay2 issues. ([#71522](https://github.com/kubernetes/kubernetes/pull/71522), [@wangzhen127](https://github.com/wangzhen127)) +* When a kubelet is using --bootstrap-kubeconfig and certificate rotation, it no longer waits for bootstrap to succeed before launching static pods. ([#71174](https://github.com/kubernetes/kubernetes/pull/71174), [@smarterclayton](https://github.com/smarterclayton)) +* Add an plugin interfaces for "reserve" and "prebind" extension points of the scheduling framework. ([#70227](https://github.com/kubernetes/kubernetes/pull/70227), [@bsalamat](https://github.com/bsalamat)) +* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#71488](https://github.com/kubernetes/kubernetes/pull/71488), [@bsalamat](https://github.com/bsalamat)) +* Reduce CSI log and event spam. ([#71581](https://github.com/kubernetes/kubernetes/pull/71581), [@saad-ali](https://github.com/saad-ali)) +* Add conntrack as a dependency of kubelet and kubeadm when building rpms and debs. Both require conntrack to handle cleanup of connections. ([#71540](https://github.com/kubernetes/kubernetes/pull/71540), [@mauilion](https://github.com/mauilion)) +* UDP connections now support graceful termination in IPVS mode ([#71515](https://github.com/kubernetes/kubernetes/pull/71515), [@lbernail](https://github.com/lbernail)) +* Log etcd client errors. The verbosity is set with the usual `-v` flag. ([#71318](https://github.com/kubernetes/kubernetes/pull/71318), [@sttts](https://github.com/sttts)) +* The `DefaultFeatureGate` package variable now only exposes readonly feature gate methods. Methods for mutating feature gates have moved into a `MutableFeatureGate` interface and are accessible via the `DefaultMutableFeatureGate` package variable. Only top-level commands and options setup should access `DefaultMutableFeatureGate`. ([#71302](https://github.com/kubernetes/kubernetes/pull/71302), [@liggitt](https://github.com/liggitt)) +* `node.kubernetes.io/pid-pressure` toleration is added for DaemonSet pods, and `node.kubernetes.io/out-of-disk` isn't added any more even if it's a critical pod. ([#67036](https://github.com/kubernetes/kubernetes/pull/67036), [@Huang-Wei](https://github.com/Huang-Wei)) +* Update k8s.io/utils to allow for asynchronous process control ([#71047](https://github.com/kubernetes/kubernetes/pull/71047), [@hoegaarden](https://github.com/hoegaarden)) +* Fixes possible panic during volume detach, if corresponding volume plugin became non-attachable ([#71471](https://github.com/kubernetes/kubernetes/pull/71471), [@mshaverdo](https://github.com/mshaverdo)) +* Fix cloud-controller-manager crash when using AWS provider and PersistentVolume initializing controller ([#70432](https://github.com/kubernetes/kubernetes/pull/70432), [@mvladev](https://github.com/mvladev)) +* Fixes an issue where Portworx volumes cannot be mounted if 9001 port is already in use on the host and users remap 9001 to another port. ([#70392](https://github.com/kubernetes/kubernetes/pull/70392), [@harsh-px](https://github.com/harsh-px)) +* Fix `SubPath` printing of `VolumeMounts`. ([#70127](https://github.com/kubernetes/kubernetes/pull/70127), [@dtaniwaki](https://github.com/dtaniwaki)) +* Fixes incorrect paths (missing first letter) when copying files from pods to ([#69885](https://github.com/kubernetes/kubernetes/pull/69885), [@clickyotomy](https://github.com/clickyotomy)) + * local in `kubectl cp'. +* Fix AWS NLB security group updates where valid security group ports were incorrectly removed ([#68422](https://github.com/kubernetes/kubernetes/pull/68422), [@kellycampbell](https://github.com/kellycampbell)) + * when updating a service or when node changes occur. + diff --git a/vendor/k8s.io/kubernetes/cmd/OWNERS b/vendor/k8s.io/kubernetes/cmd/OWNERS index 82e379f36b1..02130504f9d 100644 --- a/vendor/k8s.io/kubernetes/cmd/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - dchen1107 - lavalamp diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/OWNERS b/vendor/k8s.io/kubernetes/cmd/controller-manager/OWNERS index d6532cf8d8f..9027934ca08 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/OWNERS @@ -1,6 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - cheftako +- stewart-yu - sttts reviewers: - caesarxuchao diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/BUILD b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/BUILD index 4f75ca22f44..f88adc9ef20 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/BUILD @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", @@ -11,8 +11,8 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/util/configz:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/filters:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", @@ -21,6 +21,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -42,3 +43,13 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = ["helper_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/helper.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/helper.go index 8bf1edee52a..7a156567d6f 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/helper.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/helper.go @@ -21,6 +21,7 @@ import ( "net/http" "time" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" "k8s.io/klog" @@ -53,3 +54,26 @@ func WaitForAPIServer(client clientset.Interface, timeout time.Duration) error { return nil } + +// IsControllerEnabled check if a specified controller enabled or not. +func IsControllerEnabled(name string, disabledByDefaultControllers sets.String, controllers []string) bool { + hasStar := false + for _, ctrl := range controllers { + if ctrl == name { + return true + } + if ctrl == "-"+name { + return false + } + if ctrl == "*" { + hasStar = true + } + } + // if we get here, there was no explicit choice + if !hasStar { + // nothing on by default + return false + } + + return !disabledByDefaultControllers.Has(name) +} diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/BUILD b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/BUILD index aa5744e335a..012a046b019 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/BUILD @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", @@ -6,7 +6,6 @@ go_library( "cloudprovider.go", "debugging.go", "generic.go", - "globalflags.go", "kubecloudshared.go", "servicecontroller.go", ], @@ -14,14 +13,10 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/client/leaderelectionconfig:go_default_library", - "//pkg/cloudprovider/providers:go_default_library", "//pkg/controller/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) @@ -39,14 +34,3 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) - -go_test( - name = "go_default_test", - srcs = ["globalflags_test.go"], - embed = [":go_default_library"], - deps = [ - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", - ], -) diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/cloudprovider.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/cloudprovider.go index 2c22d1b3f17..6e74b989c12 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/cloudprovider.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/cloudprovider.go @@ -24,8 +24,7 @@ import ( // CloudProviderOptions holds the cloudprovider options. type CloudProviderOptions struct { - CloudConfigFile string - Name string + *kubectrlmgrconfig.CloudProviderConfiguration } // Validate checks validation of cloudprovider options. diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/debugging.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/debugging.go index e459b6d4525..05aa05f947a 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/debugging.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/debugging.go @@ -19,13 +19,12 @@ package options import ( "github.com/spf13/pflag" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" + componentbaseconfig "k8s.io/component-base/config" ) // DebuggingOptions holds the Debugging options. type DebuggingOptions struct { - EnableProfiling bool - EnableContentionProfiling bool + *componentbaseconfig.DebuggingConfiguration } // AddFlags adds flags related to debugging for controller manager to the specified FlagSet. @@ -41,7 +40,7 @@ func (o *DebuggingOptions) AddFlags(fs *pflag.FlagSet) { } // ApplyTo fills up Debugging config with options. -func (o *DebuggingOptions) ApplyTo(cfg *apiserverconfig.DebuggingConfiguration) error { +func (o *DebuggingOptions) ApplyTo(cfg *componentbaseconfig.DebuggingConfiguration) error { if o == nil { return nil } diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/generic.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/generic.go index 3056038f40d..9491ec0a745 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/generic.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/generic.go @@ -20,47 +20,35 @@ import ( "fmt" "strings" - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" - apiserverflag "k8s.io/apiserver/pkg/util/flag" + cliflag "k8s.io/component-base/cli/flag" + componentbaseconfig "k8s.io/component-base/config" "k8s.io/kubernetes/pkg/client/leaderelectionconfig" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // GenericControllerManagerConfigurationOptions holds the options which are generic. type GenericControllerManagerConfigurationOptions struct { - Port int32 - Address string - MinResyncPeriod metav1.Duration - ClientConnection apimachineryconfig.ClientConnectionConfiguration - ControllerStartInterval metav1.Duration - LeaderElection apiserverconfig.LeaderElectionConfiguration - Debugging *DebuggingOptions - Controllers []string + *kubectrlmgrconfig.GenericControllerManagerConfiguration + Debugging *DebuggingOptions } // NewGenericControllerManagerConfigurationOptions returns generic configuration default values for both // the kube-controller-manager and the cloud-contoller-manager. Any common changes should // be made here. Any individual changes should be made in that controller. -func NewGenericControllerManagerConfigurationOptions(cfg kubectrlmgrconfig.GenericControllerManagerConfiguration) *GenericControllerManagerConfigurationOptions { +func NewGenericControllerManagerConfigurationOptions(cfg *kubectrlmgrconfig.GenericControllerManagerConfiguration) *GenericControllerManagerConfigurationOptions { o := &GenericControllerManagerConfigurationOptions{ - Port: cfg.Port, - Address: cfg.Address, - MinResyncPeriod: cfg.MinResyncPeriod, - ClientConnection: cfg.ClientConnection, - ControllerStartInterval: cfg.ControllerStartInterval, - LeaderElection: cfg.LeaderElection, - Debugging: &DebuggingOptions{}, - Controllers: cfg.Controllers, + GenericControllerManagerConfiguration: cfg, + Debugging: &DebuggingOptions{ + DebuggingConfiguration: &componentbaseconfig.DebuggingConfiguration{}, + }, } return o } // AddFlags adds flags related to generic for controller manager to the specified FlagSet. -func (o *GenericControllerManagerConfigurationOptions) AddFlags(fss *apiserverflag.NamedFlagSets, allControllers, disabledByDefaultControllers []string) { +func (o *GenericControllerManagerConfigurationOptions) AddFlags(fss *cliflag.NamedFlagSets, allControllers, disabledByDefaultControllers []string) { if o == nil { return } @@ -72,7 +60,6 @@ func (o *GenericControllerManagerConfigurationOptions) AddFlags(fss *apiserverfl genericfs.Float32Var(&o.ClientConnection.QPS, "kube-api-qps", o.ClientConnection.QPS, "QPS to use while talking with kubernetes apiserver.") genericfs.Int32Var(&o.ClientConnection.Burst, "kube-api-burst", o.ClientConnection.Burst, "Burst to use while talking with kubernetes apiserver.") genericfs.DurationVar(&o.ControllerStartInterval.Duration, "controller-start-interval", o.ControllerStartInterval.Duration, "Interval between starting controller managers.") - // TODO: complete the work of the cloud-controller-manager (and possibly other consumers of this code) respecting the --controllers flag genericfs.StringSliceVar(&o.Controllers, "controllers", o.Controllers, fmt.Sprintf(""+ "A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller "+ "named 'foo', '-foo' disables the controller named 'foo'.\nAll controllers: %s\nDisabled-by-default controllers: %s", diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/kubecloudshared.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/kubecloudshared.go index 956571892bd..8360ae32dbe 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/kubecloudshared.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/kubecloudshared.go @@ -19,39 +19,25 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // KubeCloudSharedOptions holds the options shared between kube-controller-manager // and cloud-controller-manager. type KubeCloudSharedOptions struct { - CloudProvider *CloudProviderOptions - ExternalCloudVolumePlugin string - UseServiceAccountCredentials bool - AllowUntaggedCloud bool - RouteReconciliationPeriod metav1.Duration - NodeMonitorPeriod metav1.Duration - ClusterName string - ClusterCIDR string - AllocateNodeCIDRs bool - CIDRAllocatorType string - ConfigureCloudRoutes bool - NodeSyncPeriod metav1.Duration + *kubectrlmgrconfig.KubeCloudSharedConfiguration + CloudProvider *CloudProviderOptions } // NewKubeCloudSharedOptions returns common/default configuration values for both // the kube-controller-manager and the cloud-contoller-manager. Any common changes should // be made here. Any individual changes should be made in that controller. -func NewKubeCloudSharedOptions(cfg kubectrlmgrconfig.KubeCloudSharedConfiguration) *KubeCloudSharedOptions { +func NewKubeCloudSharedOptions(cfg *kubectrlmgrconfig.KubeCloudSharedConfiguration) *KubeCloudSharedOptions { o := &KubeCloudSharedOptions{ - CloudProvider: &CloudProviderOptions{}, - ExternalCloudVolumePlugin: cfg.ExternalCloudVolumePlugin, - UseServiceAccountCredentials: cfg.UseServiceAccountCredentials, - RouteReconciliationPeriod: cfg.RouteReconciliationPeriod, - NodeMonitorPeriod: cfg.NodeMonitorPeriod, - ClusterName: cfg.ClusterName, - ConfigureCloudRoutes: cfg.ConfigureCloudRoutes, + KubeCloudSharedConfiguration: cfg, + CloudProvider: &CloudProviderOptions{ + CloudProviderConfiguration: &kubectrlmgrconfig.CloudProviderConfiguration{}, + }, } return o @@ -92,6 +78,7 @@ func (o *KubeCloudSharedOptions) ApplyTo(cfg *kubectrlmgrconfig.KubeCloudSharedC if err := o.CloudProvider.ApplyTo(&cfg.CloudProvider); err != nil { return err } + cfg.ExternalCloudVolumePlugin = o.ExternalCloudVolumePlugin cfg.UseServiceAccountCredentials = o.UseServiceAccountCredentials cfg.AllowUntaggedCloud = o.AllowUntaggedCloud diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/servicecontroller.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/servicecontroller.go index f6b7ab628b2..b5970bc0884 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/servicecontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/options/servicecontroller.go @@ -24,7 +24,7 @@ import ( // ServiceControllerOptions holds the ServiceController options. type ServiceControllerOptions struct { - ConcurrentServiceSyncs int32 + *kubectrlmgrconfig.ServiceControllerConfiguration } // AddFlags adds flags related to ServiceController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/serve.go b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/serve.go index 37fd22199d0..c0e507b7acd 100644 --- a/vendor/k8s.io/kubernetes/cmd/controller-manager/app/serve.go +++ b/vendor/k8s.io/kubernetes/cmd/controller-manager/app/serve.go @@ -21,7 +21,6 @@ import ( "net/http" goruntime "runtime" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" genericapifilters "k8s.io/apiserver/pkg/endpoints/filters" apirequest "k8s.io/apiserver/pkg/endpoints/request" apiserver "k8s.io/apiserver/pkg/server" @@ -29,6 +28,7 @@ import ( "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" + componentbaseconfig "k8s.io/component-base/config" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/util/configz" ) @@ -52,7 +52,7 @@ func BuildHandlerChain(apiHandler http.Handler, authorizationInfo *apiserver.Aut } // NewBaseHandler takes in CompletedConfig and returns a handler. -func NewBaseHandler(c *apiserverconfig.DebuggingConfiguration, checks ...healthz.HealthzChecker) *mux.PathRecorderMux { +func NewBaseHandler(c *componentbaseconfig.DebuggingConfiguration, checks ...healthz.HealthzChecker) *mux.PathRecorderMux { mux := mux.NewPathRecorderMux("controller-manager") healthz.InstallHandler(mux, checks...) if c.EnableProfiling { diff --git a/vendor/k8s.io/kubernetes/cmd/hyperkube/BUILD b/vendor/k8s.io/kubernetes/cmd/hyperkube/BUILD index f77c689e817..369cc94fc3f 100644 --- a/vendor/k8s.io/kubernetes/cmd/hyperkube/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/hyperkube/BUILD @@ -1,10 +1,10 @@ package(default_visibility = ["//visibility:public"]) load( - "@io_bazel_rules_go//go:def.bzl", - "go_binary", - "go_library", + "//build:go.bzl", + go_binary = "go_binary_conditional_pure", ) +load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//pkg/version:def.bzl", "version_x_defs") go_binary( @@ -28,8 +28,8 @@ go_library( "//pkg/kubectl/cmd:go_default_library", "//pkg/version/prometheus:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/cmd/hyperkube/OWNERS b/vendor/k8s.io/kubernetes/cmd/hyperkube/OWNERS index 0c4ba8e2f18..c28de235565 100644 --- a/vendor/k8s.io/kubernetes/cmd/hyperkube/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/hyperkube/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + labels: - sig/release diff --git a/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go b/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go index fccec5f82f8..725542de07e 100644 --- a/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go +++ b/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go @@ -33,8 +33,8 @@ import ( "github.com/spf13/pflag" "k8s.io/apiserver/pkg/server" - utilflag "k8s.io/apiserver/pkg/util/flag" - "k8s.io/apiserver/pkg/util/logs" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/logs" kubeapiserver "k8s.io/kubernetes/cmd/kube-apiserver/app" kubecontrollermanager "k8s.io/kubernetes/cmd/kube-controller-manager/app" kubeproxy "k8s.io/kubernetes/cmd/kube-proxy/app" @@ -51,11 +51,11 @@ func main() { hyperkubeCommand, allCommandFns := NewHyperKubeCommand(server.SetupSignalHandler()) // TODO: once we switch everything over to Cobra commands, we can go back to calling - // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // cliflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the // normalize func and add the go flag set by hand. - pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc) pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) - // utilflag.InitFlags() + // cliflag.InitFlags() logs.InitLogs() defer logs.FlushLogs() @@ -84,7 +84,7 @@ func commandFor(basename string, defaultCommand *cobra.Command, commands []func( // NewHyperKubeCommand is the entry point for hyperkube func NewHyperKubeCommand(stopCh <-chan struct{}) (*cobra.Command, []func() *cobra.Command) { - // these have to be functions since the command is polymorphic. Cobra wants you to be top level + // these have to be functions since the command is polymorphic. Cobra wants you to be top level // command to get executed apiserver := func() *cobra.Command { ret := kubeapiserver.NewAPIServerCommand(stopCh) @@ -139,6 +139,7 @@ func NewHyperKubeCommand(stopCh <-chan struct{}) (*cobra.Command, []func() *cobr } cmd.Flags().BoolVar(&makeSymlinksFlag, "make-symlinks", makeSymlinksFlag, "create a symlink for each server in current directory") cmd.Flags().MarkHidden("make-symlinks") // hide this flag from appearing in servers' usage output + cmd.Flags().MarkDeprecated("make-symlinks", "This feature will be removed in a later release.") for i := range commandFns { cmd.AddCommand(commandFns[i]()) @@ -167,7 +168,7 @@ func makeSymlinks(targetName string, commandFns []func() *cobra.Command) error { } if errs { - return errors.New("Error creating one or more symlinks.") + return errors.New("Error creating one or more symlinks") } return nil } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/BUILD index 5d7baa2632f..32a8f629949 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/BUILD @@ -20,10 +20,10 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kube-apiserver", deps = [ "//cmd/kube-apiserver/app:go_default_library", - "//pkg/client/metrics/prometheus:go_default_library", + "//pkg/util/prometheusclientgo:go_default_library", "//pkg/version/prometheus:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/OWNERS b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/OWNERS index 319b71ce058..8ad6ecf8ff3 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - deads2k @@ -9,6 +11,7 @@ approvers: - sttts reviewers: - lavalamp +- cheftako - smarterclayton - wojtek-t - deads2k diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD index a2098f5b418..9b556419120 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD @@ -39,6 +39,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", @@ -56,14 +57,15 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd3/preflight:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/term:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", @@ -75,7 +77,6 @@ go_library( "//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go index 3f9dd6856c2..0f705b3700a 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go @@ -30,6 +30,7 @@ import ( apiextensionsinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" @@ -41,7 +42,7 @@ import ( kubeexternalinformers "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" @@ -66,17 +67,20 @@ func createAggregatorConfig( // override genericConfig.AdmissionControl with kube-aggregator's scheme, // because aggregator apiserver should use its own scheme to convert its own resources. - commandOptions.Admission.ApplyTo( + err := commandOptions.Admission.ApplyTo( &genericConfig, externalInformers, genericConfig.LoopbackClientConfig, - aggregatorscheme.Scheme, pluginInitializers...) + if err != nil { + return nil, err + } // copy the etcd options so we don't mutate originals. etcdOptions := *commandOptions.Etcd etcdOptions.StorageConfig.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) etcdOptions.StorageConfig.Codec = aggregatorscheme.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion) + etcdOptions.StorageConfig.EncodeVersioner = runtime.NewMultiGroupVersioner(v1beta1.SchemeGroupVersion, schema.GroupKind{Group: v1beta1.GroupName}) genericConfig.RESTOptionsGetter = &genericoptions.SimpleRestOptionsFactory{Options: etcdOptions} // override MergedResourceConfig with aggregator defaults and registry @@ -87,7 +91,6 @@ func createAggregatorConfig( return nil, err } - var err error var certBytes, keyBytes []byte if len(commandOptions.ProxyClientCertFile) > 0 && len(commandOptions.ProxyClientKeyFile) > 0 { certBytes, err = ioutil.ReadFile(commandOptions.ProxyClientCertFile) @@ -129,11 +132,11 @@ func createAggregatorServer(aggregatorConfig *aggregatorapiserver.Config, delega } autoRegistrationController := autoregister.NewAutoRegisterController(aggregatorServer.APIRegistrationInformers.Apiregistration().InternalVersion().APIServices(), apiRegistrationClient) apiServices := apiServicesToRegister(delegateAPIServer, autoRegistrationController) - crdRegistrationController := crdregistration.NewAutoRegistrationController( + crdRegistrationController := crdregistration.NewCRDRegistrationController( apiExtensionInformers.Apiextensions().InternalVersion().CustomResourceDefinitions(), autoRegistrationController) - aggregatorServer.GenericAPIServer.AddPostStartHook("kube-apiserver-autoregistration", func(context genericapiserver.PostStartHookContext) error { + err = aggregatorServer.GenericAPIServer.AddPostStartHook("kube-apiserver-autoregistration", func(context genericapiserver.PostStartHookContext) error { go crdRegistrationController.Run(5, context.StopCh) go func() { // let the CRD controller process the initial set of CRDs before starting the autoregistration controller. @@ -146,14 +149,20 @@ func createAggregatorServer(aggregatorConfig *aggregatorapiserver.Config, delega }() return nil }) + if err != nil { + return nil, err + } - aggregatorServer.GenericAPIServer.AddHealthzChecks( + err = aggregatorServer.GenericAPIServer.AddHealthzChecks( makeAPIServiceAvailableHealthzCheck( "autoregister-completion", apiServices, aggregatorServer.APIRegistrationInformers.Apiregistration().InternalVersion().APIServices(), ), ) + if err != nil { + return nil, err + } return aggregatorServer, nil } @@ -235,38 +244,42 @@ var apiVersionPriorities = map[schema.GroupVersion]priority{ // can reasonably expect seems questionable. {Group: "extensions", Version: "v1beta1"}: {group: 17900, version: 1}, // to my knowledge, nothing below here collides - {Group: "apps", Version: "v1beta1"}: {group: 17800, version: 1}, - {Group: "apps", Version: "v1beta2"}: {group: 17800, version: 9}, - {Group: "apps", Version: "v1"}: {group: 17800, version: 15}, - {Group: "events.k8s.io", Version: "v1beta1"}: {group: 17750, version: 5}, - {Group: "authentication.k8s.io", Version: "v1"}: {group: 17700, version: 15}, - {Group: "authentication.k8s.io", Version: "v1beta1"}: {group: 17700, version: 9}, - {Group: "authorization.k8s.io", Version: "v1"}: {group: 17600, version: 15}, - {Group: "authorization.k8s.io", Version: "v1beta1"}: {group: 17600, version: 9}, - {Group: "autoscaling", Version: "v1"}: {group: 17500, version: 15}, - {Group: "autoscaling", Version: "v2beta1"}: {group: 17500, version: 9}, - {Group: "autoscaling", Version: "v2beta2"}: {group: 17500, version: 1}, - {Group: "batch", Version: "v1"}: {group: 17400, version: 15}, - {Group: "batch", Version: "v1beta1"}: {group: 17400, version: 9}, - {Group: "batch", Version: "v2alpha1"}: {group: 17400, version: 9}, - {Group: "certificates.k8s.io", Version: "v1beta1"}: {group: 17300, version: 9}, - {Group: "networking.k8s.io", Version: "v1"}: {group: 17200, version: 15}, - {Group: "policy", Version: "v1beta1"}: {group: 17100, version: 9}, - {Group: "rbac.authorization.k8s.io", Version: "v1"}: {group: 17000, version: 15}, - {Group: "rbac.authorization.k8s.io", Version: "v1beta1"}: {group: 17000, version: 12}, - {Group: "rbac.authorization.k8s.io", Version: "v1alpha1"}: {group: 17000, version: 9}, - {Group: "settings.k8s.io", Version: "v1alpha1"}: {group: 16900, version: 9}, - {Group: "storage.k8s.io", Version: "v1"}: {group: 16800, version: 15}, - {Group: "storage.k8s.io", Version: "v1beta1"}: {group: 16800, version: 9}, - {Group: "storage.k8s.io", Version: "v1alpha1"}: {group: 16800, version: 1}, - {Group: "apiextensions.k8s.io", Version: "v1beta1"}: {group: 16700, version: 9}, - {Group: "admissionregistration.k8s.io", Version: "v1"}: {group: 16700, version: 15}, - {Group: "admissionregistration.k8s.io", Version: "v1beta1"}: {group: 16700, version: 12}, - {Group: "admissionregistration.k8s.io", Version: "v1alpha1"}: {group: 16700, version: 9}, - {Group: "scheduling.k8s.io", Version: "v1beta1"}: {group: 16600, version: 12}, - {Group: "scheduling.k8s.io", Version: "v1alpha1"}: {group: 16600, version: 9}, - {Group: "coordination.k8s.io", Version: "v1beta1"}: {group: 16500, version: 9}, - {Group: "auditregistration.k8s.io", Version: "v1alpha1"}: {group: 16400, version: 1}, + {Group: "apps", Version: "v1beta1"}: {group: 17800, version: 1}, + {Group: "apps", Version: "v1beta2"}: {group: 17800, version: 9}, + {Group: "apps", Version: "v1"}: {group: 17800, version: 15}, + {Group: "events.k8s.io", Version: "v1beta1"}: {group: 17750, version: 5}, + {Group: "authentication.k8s.io", Version: "v1"}: {group: 17700, version: 15}, + {Group: "authentication.k8s.io", Version: "v1beta1"}: {group: 17700, version: 9}, + {Group: "authorization.k8s.io", Version: "v1"}: {group: 17600, version: 15}, + {Group: "authorization.k8s.io", Version: "v1beta1"}: {group: 17600, version: 9}, + {Group: "autoscaling", Version: "v1"}: {group: 17500, version: 15}, + {Group: "autoscaling", Version: "v2beta1"}: {group: 17500, version: 9}, + {Group: "autoscaling", Version: "v2beta2"}: {group: 17500, version: 1}, + {Group: "batch", Version: "v1"}: {group: 17400, version: 15}, + {Group: "batch", Version: "v1beta1"}: {group: 17400, version: 9}, + {Group: "batch", Version: "v2alpha1"}: {group: 17400, version: 9}, + {Group: "certificates.k8s.io", Version: "v1beta1"}: {group: 17300, version: 9}, + {Group: "networking.k8s.io", Version: "v1"}: {group: 17200, version: 15}, + {Group: "networking.k8s.io", Version: "v1beta1"}: {group: 17200, version: 9}, + {Group: "policy", Version: "v1beta1"}: {group: 17100, version: 9}, + {Group: "rbac.authorization.k8s.io", Version: "v1"}: {group: 17000, version: 15}, + {Group: "rbac.authorization.k8s.io", Version: "v1beta1"}: {group: 17000, version: 12}, + {Group: "rbac.authorization.k8s.io", Version: "v1alpha1"}: {group: 17000, version: 9}, + {Group: "settings.k8s.io", Version: "v1alpha1"}: {group: 16900, version: 9}, + {Group: "storage.k8s.io", Version: "v1"}: {group: 16800, version: 15}, + {Group: "storage.k8s.io", Version: "v1beta1"}: {group: 16800, version: 9}, + {Group: "storage.k8s.io", Version: "v1alpha1"}: {group: 16800, version: 1}, + {Group: "apiextensions.k8s.io", Version: "v1beta1"}: {group: 16700, version: 9}, + {Group: "admissionregistration.k8s.io", Version: "v1"}: {group: 16700, version: 15}, + {Group: "admissionregistration.k8s.io", Version: "v1beta1"}: {group: 16700, version: 12}, + {Group: "scheduling.k8s.io", Version: "v1"}: {group: 16600, version: 15}, + {Group: "scheduling.k8s.io", Version: "v1beta1"}: {group: 16600, version: 12}, + {Group: "scheduling.k8s.io", Version: "v1alpha1"}: {group: 16600, version: 9}, + {Group: "coordination.k8s.io", Version: "v1"}: {group: 16500, version: 15}, + {Group: "coordination.k8s.io", Version: "v1beta1"}: {group: 16500, version: 9}, + {Group: "auditregistration.k8s.io", Version: "v1alpha1"}: {group: 16400, version: 1}, + {Group: "node.k8s.io", Version: "v1alpha1"}: {group: 16300, version: 1}, + {Group: "node.k8s.io", Version: "v1beta1"}: {group: 16300, version: 9}, // Append a new group to the end of the list if unsure. // You can use min(existing group)-100 as the initial value for a group. // Version can be set to 9 (to have space around) for a new group. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/apiextensions.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/apiextensions.go index d179644a250..f2da1ca9898 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/apiextensions.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/apiextensions.go @@ -23,6 +23,8 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" apiextensionsoptions "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/features" genericapiserver "k8s.io/apiserver/pkg/server" @@ -48,17 +50,20 @@ func createAPIExtensionsConfig( // override genericConfig.AdmissionControl with apiextensions' scheme, // because apiextentions apiserver should use its own scheme to convert resources. - commandOptions.Admission.ApplyTo( + err := commandOptions.Admission.ApplyTo( &genericConfig, externalInformers, genericConfig.LoopbackClientConfig, - apiextensionsapiserver.Scheme, pluginInitializers...) + if err != nil { + return nil, err + } // copy the etcd options so we don't mutate originals. etcdOptions := *commandOptions.Etcd etcdOptions.StorageConfig.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) etcdOptions.StorageConfig.Codec = apiextensionsapiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion) + etcdOptions.StorageConfig.EncodeVersioner = runtime.NewMultiGroupVersioner(v1beta1.SchemeGroupVersion, schema.GroupKind{Group: v1beta1.GroupName}) genericConfig.RESTOptionsGetter = &genericoptions.SimpleRestOptionsFactory{Options: etcdOptions} // override MergedResourceConfig with apiextensions defaults and registry diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/BUILD index 0fe1c6159f6..2112ade4780 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/BUILD @@ -30,8 +30,8 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], @@ -45,7 +45,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/kubeapiserver/options:go_default_library", "//pkg/kubelet/client:go_default_library", @@ -53,11 +52,12 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", "//staging/src/k8s.io/apiserver/plugin/pkg/audit/buffered:go_default_library", + "//staging/src/k8s.io/apiserver/plugin/pkg/audit/dynamic:go_default_library", "//staging/src/k8s.io/apiserver/plugin/pkg/audit/truncate:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/globalflags.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/globalflags.go index 0698cde6347..bef513605b5 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/globalflags.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/globalflags.go @@ -19,7 +19,7 @@ package options import ( "github.com/spf13/pflag" - "k8s.io/apiserver/pkg/util/globalflag" + "k8s.io/component-base/cli/globalflag" // ensure libs have a chance to globally register their flags _ "k8s.io/apiserver/pkg/admission" diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go index c4e53f0083f..02d2a291232 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go @@ -25,7 +25,7 @@ import ( utilnet "k8s.io/apimachinery/pkg/util/net" genericoptions "k8s.io/apiserver/pkg/server/options" "k8s.io/apiserver/pkg/storage/storagebackend" - apiserverflag "k8s.io/apiserver/pkg/util/flag" + cliflag "k8s.io/component-base/cli/flag" api "k8s.io/kubernetes/pkg/apis/core" _ "k8s.io/kubernetes/pkg/features" // add the kubernetes feature gates kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options" @@ -47,7 +47,6 @@ type ServerRunOptions struct { Authentication *kubeoptions.BuiltInAuthenticationOptions Authorization *kubeoptions.BuiltInAuthorizationOptions CloudProvider *kubeoptions.CloudProviderOptions - StorageSerialization *kubeoptions.StorageSerializationOptions APIEnablement *genericoptions.APIEnablementOptions AllowPrivileged bool @@ -87,7 +86,6 @@ func NewServerRunOptions() *ServerRunOptions { Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(), Authorization: kubeoptions.NewBuiltInAuthorizationOptions(), CloudProvider: kubeoptions.NewCloudProviderOptions(), - StorageSerialization: kubeoptions.NewStorageSerializationOptions(), APIEnablement: genericoptions.NewAPIEnablementOptions(), EnableLogsHandler: true, @@ -123,7 +121,7 @@ func NewServerRunOptions() *ServerRunOptions { } // Flags returns flags for a specific APIServer by section name -func (s *ServerRunOptions) Flags() (fss apiserverflag.NamedFlagSets) { +func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) { // Add the generic flags. s.GenericServerRunOptions.AddUniversalFlags(fss.FlagSet("generic")) s.Etcd.AddFlags(fss.FlagSet("etcd")) @@ -135,7 +133,6 @@ func (s *ServerRunOptions) Flags() (fss apiserverflag.NamedFlagSets) { s.Authentication.AddFlags(fss.FlagSet("authentication")) s.Authorization.AddFlags(fss.FlagSet("authorization")) s.CloudProvider.AddFlags(fss.FlagSet("cloud provider")) - s.StorageSerialization.AddFlags(fss.FlagSet("storage")) s.APIEnablement.AddFlags(fss.FlagSet("api enablement")) s.Admission.AddFlags(fss.FlagSet("admission")) @@ -212,11 +209,6 @@ func (s *ServerRunOptions) Flags() (fss apiserverflag.NamedFlagSets) { fs.StringVar(&s.KubeletConfig.CAFile, "kubelet-certificate-authority", s.KubeletConfig.CAFile, "Path to a cert file for the certificate authority.") - // TODO: delete this flag in 1.13 - repair := false - fs.BoolVar(&repair, "repair-malformed-updates", false, "deprecated") - fs.MarkDeprecated("repair-malformed-updates", "This flag will be removed in a future version") - fs.StringVar(&s.ProxyClientCertFile, "proxy-client-cert-file", s.ProxyClientCertFile, ""+ "Client certificate used to prove the identity of the aggregator or kube-apiserver "+ "when it must call out during a request. This includes proxying requests to a user "+ diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go index d5eac4d72a1..f4409d2aa55 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go @@ -44,12 +44,13 @@ import ( "k8s.io/apiserver/pkg/server/filters" serveroptions "k8s.io/apiserver/pkg/server/options" serverstorage "k8s.io/apiserver/pkg/server/storage" - apiserverflag "k8s.io/apiserver/pkg/util/flag" - "k8s.io/apiserver/pkg/util/globalflag" + "k8s.io/apiserver/pkg/util/term" "k8s.io/apiserver/pkg/util/webhook" clientgoinformers "k8s.io/client-go/informers" clientgoclientset "k8s.io/client-go/kubernetes" - certutil "k8s.io/client-go/util/cert" + "k8s.io/client-go/util/keyutil" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/cli/globalflag" "k8s.io/klog" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" "k8s.io/kubernetes/cmd/kube-apiserver/app/options" @@ -120,15 +121,15 @@ cluster's shared state through which all other components interact.`, } usageFmt := "Usage:\n %s\n" - cols, _, _ := apiserverflag.TerminalSize(cmd.OutOrStdout()) + cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) cmd.SetUsageFunc(func(cmd *cobra.Command) error { fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) return nil }) cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) }) return cmd @@ -278,9 +279,27 @@ func CreateKubeAPIServerConfig( return } + clientCA, lastErr := readCAorNil(s.Authentication.ClientCert.ClientCA) + if lastErr != nil { + return + } + requestHeaderProxyCA, lastErr := readCAorNil(s.Authentication.RequestHeader.ClientCAFile) + if lastErr != nil { + return + } + config = &master.Config{ GenericConfig: genericConfig, ExtraConfig: master.ExtraConfig{ + ClientCARegistrationHook: master.ClientCARegistrationHook{ + ClientCA: clientCA, + RequestHeaderUsernameHeaders: s.Authentication.RequestHeader.UsernameHeaders, + RequestHeaderGroupHeaders: s.Authentication.RequestHeader.GroupHeaders, + RequestHeaderExtraHeaderPrefixes: s.Authentication.RequestHeader.ExtraHeaderPrefixes, + RequestHeaderCA: requestHeaderProxyCA, + RequestHeaderAllowedNames: s.Authentication.RequestHeader.AllowedNames, + }, + APIResourceConfigSource: storageFactory.APIResourceConfigSource, StorageFactory: storageFactory, EventTTL: s.EventTTL, @@ -355,7 +374,7 @@ func buildGenericConfig( storageFactoryConfig := kubeapiserver.NewStorageFactoryConfig() storageFactoryConfig.ApiResourceConfig = genericConfig.MergedResourceConfig - completedStorageFactoryConfig, err := storageFactoryConfig.Complete(s.Etcd, s.StorageSerialization) + completedStorageFactoryConfig, err := storageFactoryConfig.Complete(s.Etcd) if err != nil { lastErr = err return @@ -430,7 +449,6 @@ func buildGenericConfig( genericConfig, versionedInformers, kubeClientConfig, - legacyscheme.Scheme, pluginInitializers...) if err != nil { lastErr = fmt.Errorf("failed to initialize admission: %v", err) @@ -443,7 +461,12 @@ func buildGenericConfig( func BuildAuthenticator(s *options.ServerRunOptions, extclient clientgoclientset.Interface, versionedInformer clientgoinformers.SharedInformerFactory) (authenticator.Request, error) { authenticatorConfig := s.Authentication.ToAuthenticationConfig() if s.Authentication.ServiceAccounts.Lookup { - authenticatorConfig.ServiceAccountTokenGetter = serviceaccountcontroller.NewGetterFromClient(extclient) + authenticatorConfig.ServiceAccountTokenGetter = serviceaccountcontroller.NewGetterFromClient( + extclient, + versionedInformer.Core().V1().Secrets().Lister(), + versionedInformer.Core().V1().ServiceAccounts().Lister(), + versionedInformer.Core().V1().Pods().Lister(), + ) } return authenticatorConfig.New() @@ -512,7 +535,7 @@ func Complete(s *options.ServerRunOptions) (completedServerRunOptions, error) { } if s.ServiceAccountSigningKeyFile != "" && s.Authentication.ServiceAccounts.Issuer != "" { - sk, err := certutil.PrivateKeyFromFile(s.ServiceAccountSigningKeyFile) + sk, err := keyutil.PrivateKeyFromFile(s.ServiceAccountSigningKeyFile) if err != nil { return options, fmt.Errorf("failed to parse service-account-issuer-key-file: %v", err) } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/BUILD index e21b302681b..6e9b0b68288 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/BUILD @@ -20,11 +20,9 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kube-controller-manager", deps = [ "//cmd/kube-controller-manager/app:go_default_library", - "//pkg/client/metrics/prometheus:go_default_library", - "//pkg/util/reflector/prometheus:go_default_library", - "//pkg/util/workqueue/prometheus:go_default_library", + "//pkg/util/prometheusclientgo:go_default_library", "//pkg/version/prometheus:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/OWNERS b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/OWNERS index e8e10481cd4..bb69b78297e 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - lavalamp @@ -8,6 +10,7 @@ reviewers: - a-robinson - brendandburns - caesarxuchao +- cheftako - cjcullen - dalanlan - david-mcmahon @@ -60,6 +63,7 @@ reviewers: - smarterclayton - soltysh - spiffxp +- stewart-yu - sttts - thockin - timothysc diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/BUILD index f4fdeb6af49..21f09ff99a7 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/BUILD @@ -20,7 +20,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//cmd/controller-manager/app:go_default_library", - "//cmd/controller-manager/app/options:go_default_library", "//cmd/kube-controller-manager/app/config:go_default_library", "//cmd/kube-controller-manager/app/options:go_default_library", "//pkg/apis/apps/install:go_default_library", @@ -46,6 +45,7 @@ go_library( "//pkg/controller/certificates/cleaner:go_default_library", "//pkg/controller/certificates/rootcacertpublisher:go_default_library", "//pkg/controller/certificates/signer:go_default_library", + "//pkg/controller/cloud:go_default_library", "//pkg/controller/clusterroleaggregation:go_default_library", "//pkg/controller/cronjob:go_default_library", "//pkg/controller/daemon:go_default_library", @@ -117,9 +117,9 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/term:go_default_library", "//staging/src/k8s.io/client-go/discovery/cached:go_default_library", + "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", @@ -130,8 +130,10 @@ go_library( "//staging/src/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library", "//staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1:go_default_library", "//staging/src/k8s.io/metrics/pkg/client/custom_metrics:go_default_library", "//staging/src/k8s.io/metrics/pkg/client/external_metrics:go_default_library", @@ -143,11 +145,16 @@ go_library( go_test( name = "go_default_test", - srcs = ["controller_manager_test.go"], + srcs = ["core_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/client-go/discovery:go_default_library", + "//staging/src/k8s.io/client-go/discovery/fake:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go index d13c26dfabe..9f11f850684 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go @@ -39,8 +39,7 @@ import ( "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/mux" - apiserverflag "k8s.io/apiserver/pkg/util/flag" - "k8s.io/apiserver/pkg/util/globalflag" + "k8s.io/apiserver/pkg/util/term" cacheddiscovery "k8s.io/client-go/discovery/cached" "k8s.io/client-go/informers" restclient "k8s.io/client-go/rest" @@ -48,6 +47,9 @@ import ( "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" certutil "k8s.io/client-go/util/cert" + "k8s.io/client-go/util/keyutil" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/cli/globalflag" "k8s.io/klog" genericcontrollermanager "k8s.io/kubernetes/cmd/controller-manager/app" "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" @@ -111,15 +113,15 @@ controller, and serviceaccounts controller.`, fs.AddFlagSet(f) } usageFmt := "Usage:\n %s\n" - cols, _, _ := apiserverflag.TerminalSize(cmd.OutOrStdout()) + cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) cmd.SetUsageFunc(func(cmd *cobra.Command) error { fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) return nil }) cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) }) return cmd @@ -160,7 +162,8 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { if c.SecureServing != nil { unsecuredMux = genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, checks...) handler := genericcontrollermanager.BuildHandlerChain(unsecuredMux, &c.Authorization, &c.Authentication) - if err := c.SecureServing.Serve(handler, 0, stopCh); err != nil { + // TODO: handle stoppedCh returned by c.SecureServing.Serve + if _, err := c.SecureServing.Serve(handler, 0, stopCh); err != nil { return err } } @@ -225,6 +228,7 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { "kube-system", "kube-controller-manager", c.LeaderElectionClient.CoreV1(), + c.LeaderElectionClient.CoordinationV1(), resourcelock.ResourceLockConfig{ Identity: id, EventRecorder: c.EventRecorder, @@ -282,32 +286,7 @@ type ControllerContext struct { } func (c ControllerContext) IsControllerEnabled(name string) bool { - return IsControllerEnabled(name, ControllersDisabledByDefault, c.ComponentConfig.Generic.Controllers...) -} - -func IsControllerEnabled(name string, disabledByDefaultControllers sets.String, controllers ...string) bool { - hasStar := false - for _, ctrl := range controllers { - if ctrl == name { - return true - } - if ctrl == "-"+name { - return false - } - if ctrl == "*" { - hasStar = true - } - } - // if we get here, there was no explicit choice - if !hasStar { - // nothing on by default - return false - } - if disabledByDefaultControllers.Has(name) { - return false - } - - return true + return genericcontrollermanager.IsControllerEnabled(name, ControllersDisabledByDefault, c.ComponentConfig.Generic.Controllers) } // InitFunc is used to launch a particular controller. It may run additional "should I activate checks". @@ -362,7 +341,6 @@ func NewControllerInitializers() map[string]InitFunc { controllers["csrcleaner"] = startCSRCleanerController controllers["ttl"] = startTTLController controllers["nodeipam"] = startNodeIpamController - controllers["service"] = startServiceController controllers["nodelifecycle"] = startNodeLifecycleController controllers["persistentvolume-binder"] = startPersistentVolumeBinderController controllers["attachdetach"] = startAttachDetachController @@ -495,7 +473,7 @@ func (c serviceAccountTokenControllerStarter) startServiceAccountTokenController klog.Warningf("%q is disabled because there is no private key", saTokenControllerName) return nil, false, nil } - privateKey, err := certutil.PrivateKeyFromFile(ctx.ComponentConfig.SAController.ServiceAccountKeyFile) + privateKey, err := keyutil.PrivateKeyFromFile(ctx.ComponentConfig.SAController.ServiceAccountKeyFile) if err != nil { return nil, true, fmt.Errorf("error reading key for service account token controller: %v", err) } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/core.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/core.go index 1878ef36f0f..7e4484b5c9f 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/core.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/core.go @@ -33,10 +33,10 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" utilfeature "k8s.io/apiserver/pkg/util/feature" - cacheddiscovery "k8s.io/client-go/discovery/cached" + cacheddiscovery "k8s.io/client-go/discovery/cached/memory" "k8s.io/client-go/dynamic" clientset "k8s.io/client-go/kubernetes" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" + restclient "k8s.io/client-go/rest" "k8s.io/kubernetes/pkg/controller" endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint" "k8s.io/kubernetes/pkg/controller/garbagecollector" @@ -47,7 +47,6 @@ import ( "k8s.io/kubernetes/pkg/controller/podgc" replicationcontroller "k8s.io/kubernetes/pkg/controller/replication" resourcequotacontroller "k8s.io/kubernetes/pkg/controller/resourcequota" - servicecontroller "k8s.io/kubernetes/pkg/controller/service" serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" ttlcontroller "k8s.io/kubernetes/pkg/controller/ttl" "k8s.io/kubernetes/pkg/controller/volume/attachdetach" @@ -61,25 +60,9 @@ import ( "k8s.io/kubernetes/pkg/util/metrics" ) -func startServiceController(ctx ControllerContext) (http.Handler, bool, error) { - serviceController, err := servicecontroller.New( - ctx.ClientBuilder.ClientOrDie("service-controller"), - ctx.InformerFactory.Core().V1().Services(), - ctx.InformerFactory.Core().V1().Nodes(), - ctx.ComponentConfig.KubeCloudShared.ClusterName, - ) - if err != nil { - // This error shouldn't fail. It lives like this as a legacy. - klog.Errorf("Failed to start service controller: %v", err) - return nil, false, nil - } - go serviceController.Run(ctx.Stop, int(ctx.ComponentConfig.ServiceController.ConcurrentServiceSyncs)) - return nil, true, nil -} - func startNodeIpamController(ctx ControllerContext) (http.Handler, bool, error) { - var clusterCIDR *net.IPNet = nil - var serviceCIDR *net.IPNet = nil + var clusterCIDR *net.IPNet + var serviceCIDR *net.IPNet if !ctx.ComponentConfig.KubeCloudShared.AllocateNodeCIDRs { return nil, false, nil @@ -117,9 +100,11 @@ func startNodeIpamController(ctx ControllerContext) (http.Handler, bool, error) func startNodeLifecycleController(ctx ControllerContext) (http.Handler, bool, error) { lifecycleController, err := lifecyclecontroller.NewNodeLifecycleController( + ctx.InformerFactory.Coordination().V1beta1().Leases(), ctx.InformerFactory.Core().V1().Pods(), ctx.InformerFactory.Core().V1().Nodes(), - ctx.InformerFactory.Extensions().V1beta1().DaemonSets(), + ctx.InformerFactory.Apps().V1().DaemonSets(), + // node lifecycle controller uses existing cluster role from node-controller ctx.ClientBuilder.ClientOrDie("node-controller"), ctx.ComponentConfig.KubeCloudShared.NodeMonitorPeriod.Duration, ctx.ComponentConfig.NodeLifecycleController.NodeStartupGracePeriod.Duration, @@ -163,20 +148,17 @@ func startPersistentVolumeBinderController(ctx ControllerContext) (http.Handler, func startAttachDetachController(ctx ControllerContext) (http.Handler, bool, error) { if ctx.ComponentConfig.AttachDetachController.ReconcilerSyncLoopPeriod.Duration < time.Second { - return nil, true, fmt.Errorf("Duration time must be greater than one second as set via command line option reconcile-sync-loop-period.") + return nil, true, fmt.Errorf("duration time must be greater than one second as set via command line option reconcile-sync-loop-period") } - csiClientConfig := ctx.ClientBuilder.ConfigOrDie("attachdetach-controller") - // csiClient works with CRDs that support json only - csiClientConfig.ContentType = "application/json" attachDetachController, attachDetachControllerErr := attachdetach.NewAttachDetachController( ctx.ClientBuilder.ClientOrDie("attachdetach-controller"), - csiclientset.NewForConfigOrDie(csiClientConfig), ctx.InformerFactory.Core().V1().Pods(), ctx.InformerFactory.Core().V1().Nodes(), ctx.InformerFactory.Core().V1().PersistentVolumeClaims(), ctx.InformerFactory.Core().V1().PersistentVolumes(), + ctx.InformerFactory.Storage().V1beta1().CSINodes(), ProbeAttachableVolumePlugins(), GetDynamicPluginProber(ctx.ComponentConfig.PersistentVolumeBinderController.VolumeConfiguration), ctx.ComponentConfig.AttachDetachController.DisableAttachDetachReconcilerSync, @@ -199,7 +181,7 @@ func startVolumeExpandController(ctx ControllerContext) (http.Handler, bool, err ProbeExpandableVolumePlugins(ctx.ComponentConfig.PersistentVolumeBinderController.VolumeConfiguration)) if expandControllerErr != nil { - return nil, true, fmt.Errorf("Failed to start volume expand controller : %v", expandControllerErr) + return nil, true, fmt.Errorf("failed to start volume expand controller : %v", expandControllerErr) } go expandController.Run(ctx.Stop) return nil, true, nil @@ -279,6 +261,10 @@ func startNamespaceController(ctx ControllerContext) (http.Handler, bool, error) nsKubeconfig.QPS *= 20 nsKubeconfig.Burst *= 100 namespaceKubeClient := clientset.NewForConfigOrDie(nsKubeconfig) + return startModifiedNamespaceController(ctx, namespaceKubeClient, nsKubeconfig) +} + +func startModifiedNamespaceController(ctx ControllerContext, namespaceKubeClient clientset.Interface, nsKubeconfig *restclient.Config) (http.Handler, bool, error) { dynamicClient, err := dynamic.NewForConfig(nsKubeconfig) if err != nil { @@ -351,7 +337,7 @@ func startGarbageCollectorController(ctx ControllerContext) (http.Handler, bool, ctx.InformersStarted, ) if err != nil { - return nil, true, fmt.Errorf("Failed to start the generic garbage collector: %v", err) + return nil, true, fmt.Errorf("failed to start the generic garbage collector: %v", err) } // Start the garbage collector. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/import_known_versions.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/import_known_versions.go index 577e6d5d12d..4a51b2f5a30 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/import_known_versions.go @@ -26,6 +26,7 @@ import ( _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" _ "k8s.io/kubernetes/pkg/apis/certificates/install" + _ "k8s.io/kubernetes/pkg/apis/coordination/install" _ "k8s.io/kubernetes/pkg/apis/core/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/BUILD index 9d14caa78f7..dfcaf0183dc 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/BUILD @@ -34,24 +34,22 @@ go_library( deps = [ "//cmd/controller-manager/app/options:go_default_library", "//cmd/kube-controller-manager/app/config:go_default_library", - "//pkg/api/legacyscheme:go_default_library", "//pkg/controller/apis/config:go_default_library", - "//pkg/controller/apis/config/v1alpha1:go_default_library", + "//pkg/controller/apis/config/scheme:go_default_library", "//pkg/controller/garbagecollector:go_default_library", "//pkg/features:go_default_library", "//pkg/master/ports:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/kube-controller-manager/config/v1alpha1:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -75,15 +73,13 @@ go_test( name = "go_default_test", srcs = ["options_test.go"], embed = [":go_default_library"], - tags = ["automanaged"], deps = [ "//cmd/controller-manager/app/options:go_default_library", "//pkg/controller/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/attachdetachcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/attachdetachcontroller.go index ea0102c5675..bf2b3e6883f 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/attachdetachcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/attachdetachcontroller.go @@ -19,14 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // AttachDetachControllerOptions holds the AttachDetachController options. type AttachDetachControllerOptions struct { - ReconcilerSyncLoopPeriod metav1.Duration - DisableAttachDetachReconcilerSync bool + *kubectrlmgrconfig.AttachDetachControllerConfiguration } // AddFlags adds flags related to AttachDetachController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/csrsigningcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/csrsigningcontroller.go index 3ddb7cd6454..ab3f83c8e23 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/csrsigningcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/csrsigningcontroller.go @@ -19,7 +19,6 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) @@ -35,9 +34,7 @@ const ( // CSRSigningControllerOptions holds the CSRSigningController options. type CSRSigningControllerOptions struct { - ClusterSigningDuration metav1.Duration - ClusterSigningKeyFile string - ClusterSigningCertFile string + *kubectrlmgrconfig.CSRSigningControllerConfiguration } // AddFlags adds flags related to CSRSigningController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/daemonsetcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/daemonsetcontroller.go index c0e3ec0492b..08ca2ae8cd6 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/daemonsetcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/daemonsetcontroller.go @@ -24,7 +24,7 @@ import ( // DaemonSetControllerOptions holds the DaemonSetController options. type DaemonSetControllerOptions struct { - ConcurrentDaemonSetSyncs int32 + *kubectrlmgrconfig.DaemonSetControllerConfiguration } // AddFlags adds flags related to DaemonSetController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deploymentcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deploymentcontroller.go index b497a3e7565..a3f6e09c86f 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deploymentcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deploymentcontroller.go @@ -19,14 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // DeploymentControllerOptions holds the DeploymentController options. type DeploymentControllerOptions struct { - ConcurrentDeploymentSyncs int32 - DeploymentControllerSyncPeriod metav1.Duration + *kubectrlmgrconfig.DeploymentControllerConfiguration } // AddFlags adds flags related to DeploymentController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deprecatedcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deprecatedcontroller.go index 904abac06cd..48ff5dd0d0a 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deprecatedcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/deprecatedcontroller.go @@ -25,9 +25,7 @@ import ( // DeprecatedControllerOptions holds the DeprecatedController options, those option are deprecated. // TODO remove these fields once the deprecated flags are removed. type DeprecatedControllerOptions struct { - DeletingPodsQPS float32 - DeletingPodsBurst int32 - RegisterRetryCount int32 + *kubectrlmgrconfig.DeprecatedControllerConfiguration } // AddFlags adds flags related to DeprecatedController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/endpointcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/endpointcontroller.go index c3b224cecb7..f8258ce910e 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/endpointcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/endpointcontroller.go @@ -24,7 +24,7 @@ import ( // EndpointControllerOptions holds the EndPointController options. type EndpointControllerOptions struct { - ConcurrentEndpointSyncs int32 + *kubectrlmgrconfig.EndpointControllerConfiguration } // AddFlags adds flags related to EndPointController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/garbagecollectorcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/garbagecollectorcontroller.go index 07b63f6f573..9b516c38668 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/garbagecollectorcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/garbagecollectorcontroller.go @@ -24,9 +24,7 @@ import ( // GarbageCollectorControllerOptions holds the GarbageCollectorController options. type GarbageCollectorControllerOptions struct { - ConcurrentGCSyncs int32 - GCIgnoredResources []kubectrlmgrconfig.GroupResource - EnableGarbageCollector bool + *kubectrlmgrconfig.GarbageCollectorControllerConfiguration } // AddFlags adds flags related to GarbageCollectorController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/hpacontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/hpacontroller.go index b1e29f30de5..928f8dcb2be 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/hpacontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/hpacontroller.go @@ -19,20 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // HPAControllerOptions holds the HPAController options. type HPAControllerOptions struct { - HorizontalPodAutoscalerUseRESTClients bool - HorizontalPodAutoscalerTolerance float64 - HorizontalPodAutoscalerDownscaleStabilizationWindow metav1.Duration - HorizontalPodAutoscalerDownscaleForbiddenWindow metav1.Duration - HorizontalPodAutoscalerUpscaleForbiddenWindow metav1.Duration - HorizontalPodAutoscalerSyncPeriod metav1.Duration - HorizontalPodAutoscalerCPUInitializationPeriod metav1.Duration - HorizontalPodAutoscalerInitialReadinessDelay metav1.Duration + *kubectrlmgrconfig.HPAControllerConfiguration } // AddFlags adds flags related to HPAController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/jobcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/jobcontroller.go index d9d715c2ba9..b74f03bec14 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/jobcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/jobcontroller.go @@ -24,7 +24,7 @@ import ( // JobControllerOptions holds the JobController options. type JobControllerOptions struct { - ConcurrentJobSyncs int32 + *kubectrlmgrconfig.JobControllerConfiguration } // AddFlags adds flags related to JobController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/namespacecontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/namespacecontroller.go index 90a771b781b..dadb649e719 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/namespacecontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/namespacecontroller.go @@ -19,14 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // NamespaceControllerOptions holds the NamespaceController options. type NamespaceControllerOptions struct { - NamespaceSyncPeriod metav1.Duration - ConcurrentNamespaceSyncs int32 + *kubectrlmgrconfig.NamespaceControllerConfiguration } // AddFlags adds flags related to NamespaceController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodeipamcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodeipamcontroller.go index 6e2ecb96afb..ac547d3a14c 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodeipamcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodeipamcontroller.go @@ -24,8 +24,7 @@ import ( // NodeIPAMControllerOptions holds the NodeIpamController options. type NodeIPAMControllerOptions struct { - ServiceCIDR string - NodeCIDRMaskSize int32 + *kubectrlmgrconfig.NodeIPAMControllerConfiguration } // AddFlags adds flags related to NodeIpamController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodelifecyclecontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodelifecyclecontroller.go index 956543fe04f..11805be366c 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodelifecyclecontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/nodelifecyclecontroller.go @@ -19,20 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // NodeLifecycleControllerOptions holds the NodeLifecycleController options. type NodeLifecycleControllerOptions struct { - EnableTaintManager bool - NodeEvictionRate float32 - SecondaryNodeEvictionRate float32 - NodeStartupGracePeriod metav1.Duration - NodeMonitorGracePeriod metav1.Duration - PodEvictionTimeout metav1.Duration - LargeClusterSizeThreshold int32 - UnhealthyZoneThreshold float32 + *kubectrlmgrconfig.NodeLifecycleControllerConfiguration } // AddFlags adds flags related to NodeLifecycleController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go index 6b3890f4626..d49f3be568b 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go @@ -22,23 +22,22 @@ import ( "fmt" "net" - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" + v1 "k8s.io/api/core/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" apiserveroptions "k8s.io/apiserver/pkg/server/options" utilfeature "k8s.io/apiserver/pkg/util/feature" - apiserverflag "k8s.io/apiserver/pkg/util/flag" clientset "k8s.io/client-go/kubernetes" + clientgokubescheme "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/record" + cliflag "k8s.io/component-base/cli/flag" kubectrlmgrconfigv1alpha1 "k8s.io/kube-controller-manager/config/v1alpha1" cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options" kubecontrollerconfig "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" - "k8s.io/kubernetes/pkg/api/legacyscheme" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" - kubectrlmgrschemev1alpha1 "k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1" + kubectrlmgrconfigscheme "k8s.io/kubernetes/pkg/controller/apis/config/scheme" "k8s.io/kubernetes/pkg/controller/garbagecollector" "k8s.io/kubernetes/pkg/master/ports" @@ -97,84 +96,67 @@ func NewKubeControllerManagerOptions() (*KubeControllerManagerOptions, error) { } s := KubeControllerManagerOptions{ - Generic: cmoptions.NewGenericControllerManagerConfigurationOptions(componentConfig.Generic), - KubeCloudShared: cmoptions.NewKubeCloudSharedOptions(componentConfig.KubeCloudShared), + Generic: cmoptions.NewGenericControllerManagerConfigurationOptions(&componentConfig.Generic), + KubeCloudShared: cmoptions.NewKubeCloudSharedOptions(&componentConfig.KubeCloudShared), + ServiceController: &cmoptions.ServiceControllerOptions{ + ServiceControllerConfiguration: &componentConfig.ServiceController, + }, AttachDetachController: &AttachDetachControllerOptions{ - ReconcilerSyncLoopPeriod: componentConfig.AttachDetachController.ReconcilerSyncLoopPeriod, + &componentConfig.AttachDetachController, }, CSRSigningController: &CSRSigningControllerOptions{ - ClusterSigningCertFile: componentConfig.CSRSigningController.ClusterSigningCertFile, - ClusterSigningKeyFile: componentConfig.CSRSigningController.ClusterSigningKeyFile, - ClusterSigningDuration: componentConfig.CSRSigningController.ClusterSigningDuration, + &componentConfig.CSRSigningController, }, DaemonSetController: &DaemonSetControllerOptions{ - ConcurrentDaemonSetSyncs: componentConfig.DaemonSetController.ConcurrentDaemonSetSyncs, + &componentConfig.DaemonSetController, }, DeploymentController: &DeploymentControllerOptions{ - ConcurrentDeploymentSyncs: componentConfig.DeploymentController.ConcurrentDeploymentSyncs, - DeploymentControllerSyncPeriod: componentConfig.DeploymentController.DeploymentControllerSyncPeriod, + &componentConfig.DeploymentController, }, DeprecatedFlags: &DeprecatedControllerOptions{ - RegisterRetryCount: componentConfig.DeprecatedController.RegisterRetryCount, + &componentConfig.DeprecatedController, }, EndpointController: &EndpointControllerOptions{ - ConcurrentEndpointSyncs: componentConfig.EndpointController.ConcurrentEndpointSyncs, + &componentConfig.EndpointController, }, GarbageCollectorController: &GarbageCollectorControllerOptions{ - ConcurrentGCSyncs: componentConfig.GarbageCollectorController.ConcurrentGCSyncs, - EnableGarbageCollector: componentConfig.GarbageCollectorController.EnableGarbageCollector, + &componentConfig.GarbageCollectorController, }, HPAController: &HPAControllerOptions{ - HorizontalPodAutoscalerSyncPeriod: componentConfig.HPAController.HorizontalPodAutoscalerSyncPeriod, - HorizontalPodAutoscalerUpscaleForbiddenWindow: componentConfig.HPAController.HorizontalPodAutoscalerUpscaleForbiddenWindow, - HorizontalPodAutoscalerDownscaleForbiddenWindow: componentConfig.HPAController.HorizontalPodAutoscalerDownscaleForbiddenWindow, - HorizontalPodAutoscalerDownscaleStabilizationWindow: componentConfig.HPAController.HorizontalPodAutoscalerDownscaleStabilizationWindow, - HorizontalPodAutoscalerCPUInitializationPeriod: componentConfig.HPAController.HorizontalPodAutoscalerCPUInitializationPeriod, - HorizontalPodAutoscalerInitialReadinessDelay: componentConfig.HPAController.HorizontalPodAutoscalerInitialReadinessDelay, - HorizontalPodAutoscalerTolerance: componentConfig.HPAController.HorizontalPodAutoscalerTolerance, - HorizontalPodAutoscalerUseRESTClients: componentConfig.HPAController.HorizontalPodAutoscalerUseRESTClients, + &componentConfig.HPAController, }, JobController: &JobControllerOptions{ - ConcurrentJobSyncs: componentConfig.JobController.ConcurrentJobSyncs, + &componentConfig.JobController, }, NamespaceController: &NamespaceControllerOptions{ - NamespaceSyncPeriod: componentConfig.NamespaceController.NamespaceSyncPeriod, - ConcurrentNamespaceSyncs: componentConfig.NamespaceController.ConcurrentNamespaceSyncs, + &componentConfig.NamespaceController, }, NodeIPAMController: &NodeIPAMControllerOptions{ - NodeCIDRMaskSize: componentConfig.NodeIPAMController.NodeCIDRMaskSize, + &componentConfig.NodeIPAMController, }, NodeLifecycleController: &NodeLifecycleControllerOptions{ - EnableTaintManager: componentConfig.NodeLifecycleController.EnableTaintManager, - NodeMonitorGracePeriod: componentConfig.NodeLifecycleController.NodeMonitorGracePeriod, - NodeStartupGracePeriod: componentConfig.NodeLifecycleController.NodeStartupGracePeriod, - PodEvictionTimeout: componentConfig.NodeLifecycleController.PodEvictionTimeout, + &componentConfig.NodeLifecycleController, }, PersistentVolumeBinderController: &PersistentVolumeBinderControllerOptions{ - PVClaimBinderSyncPeriod: componentConfig.PersistentVolumeBinderController.PVClaimBinderSyncPeriod, - VolumeConfiguration: componentConfig.PersistentVolumeBinderController.VolumeConfiguration, + &componentConfig.PersistentVolumeBinderController, }, PodGCController: &PodGCControllerOptions{ - TerminatedPodGCThreshold: componentConfig.PodGCController.TerminatedPodGCThreshold, + &componentConfig.PodGCController, }, ReplicaSetController: &ReplicaSetControllerOptions{ - ConcurrentRSSyncs: componentConfig.ReplicaSetController.ConcurrentRSSyncs, + &componentConfig.ReplicaSetController, }, ReplicationController: &ReplicationControllerOptions{ - ConcurrentRCSyncs: componentConfig.ReplicationController.ConcurrentRCSyncs, + &componentConfig.ReplicationController, }, ResourceQuotaController: &ResourceQuotaControllerOptions{ - ResourceQuotaSyncPeriod: componentConfig.ResourceQuotaController.ResourceQuotaSyncPeriod, - ConcurrentResourceQuotaSyncs: componentConfig.ResourceQuotaController.ConcurrentResourceQuotaSyncs, + &componentConfig.ResourceQuotaController, }, SAController: &SAControllerOptions{ - ConcurrentSATokenSyncs: componentConfig.SAController.ConcurrentSATokenSyncs, - }, - ServiceController: &cmoptions.ServiceControllerOptions{ - ConcurrentServiceSyncs: componentConfig.ServiceController.ConcurrentServiceSyncs, + &componentConfig.SAController, }, TTLAfterFinishedController: &TTLAfterFinishedControllerOptions{ - ConcurrentTTLSyncs: componentConfig.TTLAfterFinishedController.ConcurrentTTLSyncs, + &componentConfig.TTLAfterFinishedController, }, SecureServing: apiserveroptions.NewSecureServingOptions().WithLoopback(), InsecureServing: (&apiserveroptions.DeprecatedInsecureServingOptions{ @@ -207,19 +189,11 @@ func NewKubeControllerManagerOptions() (*KubeControllerManagerOptions, error) { // NewDefaultComponentConfig returns kube-controller manager configuration object. func NewDefaultComponentConfig(insecurePort int32) (kubectrlmgrconfig.KubeControllerManagerConfiguration, error) { - scheme := runtime.NewScheme() - if err := kubectrlmgrschemev1alpha1.AddToScheme(scheme); err != nil { - return kubectrlmgrconfig.KubeControllerManagerConfiguration{}, err - } - if err := kubectrlmgrconfig.AddToScheme(scheme); err != nil { - return kubectrlmgrconfig.KubeControllerManagerConfiguration{}, err - } - versioned := kubectrlmgrconfigv1alpha1.KubeControllerManagerConfiguration{} - scheme.Default(&versioned) + kubectrlmgrconfigscheme.Scheme.Default(&versioned) internal := kubectrlmgrconfig.KubeControllerManagerConfiguration{} - if err := scheme.Convert(&versioned, &internal, nil); err != nil { + if err := kubectrlmgrconfigscheme.Scheme.Convert(&versioned, &internal, nil); err != nil { return internal, err } internal.Generic.Port = insecurePort @@ -227,8 +201,8 @@ func NewDefaultComponentConfig(insecurePort int32) (kubectrlmgrconfig.KubeContro } // Flags returns flags for a specific APIServer by section name -func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledByDefaultControllers []string) apiserverflag.NamedFlagSets { - fss := apiserverflag.NamedFlagSets{} +func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledByDefaultControllers []string) cliflag.NamedFlagSets { + fss := cliflag.NamedFlagSets{} s.Generic.AddFlags(&fss, allControllers, disabledByDefaultControllers) s.KubeCloudShared.AddFlags(fss.FlagSet("generic")) s.ServiceController.AddFlags(fss.FlagSet("service controller")) @@ -261,7 +235,7 @@ func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledBy fs := fss.FlagSet("misc") fs.StringVar(&s.Master, "master", s.Master, "The address of the Kubernetes API server (overrides any value in kubeconfig).") fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization and master location information.") - utilfeature.DefaultFeatureGate.AddFlag(fss.FlagSet("generic")) + utilfeature.DefaultMutableFeatureGate.AddFlag(fss.FlagSet("generic")) return fss } @@ -440,6 +414,5 @@ func createRecorder(kubeClient clientset.Interface, userAgent string) record.Eve eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(klog.Infof) eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) - // TODO: remove dependency on the legacyscheme - return eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.EventSource{Component: userAgent}) + return eventBroadcaster.NewRecorder(clientgokubescheme.Scheme, v1.EventSource{Component: userAgent}) } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/persistentvolumebindercontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/persistentvolumebindercontroller.go index 93ba171b078..1f8213ad346 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/persistentvolumebindercontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/persistentvolumebindercontroller.go @@ -19,14 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // PersistentVolumeBinderControllerOptions holds the PersistentVolumeBinderController options. type PersistentVolumeBinderControllerOptions struct { - PVClaimBinderSyncPeriod metav1.Duration - VolumeConfiguration kubectrlmgrconfig.VolumeConfiguration + *kubectrlmgrconfig.PersistentVolumeBinderControllerConfiguration } // AddFlags adds flags related to PersistentVolumeBinderController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/podgccontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/podgccontroller.go index 0d9928aee1b..4711aba8d96 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/podgccontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/podgccontroller.go @@ -24,7 +24,7 @@ import ( // PodGCControllerOptions holds the PodGCController options. type PodGCControllerOptions struct { - TerminatedPodGCThreshold int32 + *kubectrlmgrconfig.PodGCControllerConfiguration } // AddFlags adds flags related to PodGCController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicasetcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicasetcontroller.go index 2a3e206fd15..ed803e4a691 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicasetcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicasetcontroller.go @@ -24,7 +24,7 @@ import ( // ReplicaSetControllerOptions holds the ReplicaSetController options. type ReplicaSetControllerOptions struct { - ConcurrentRSSyncs int32 + *kubectrlmgrconfig.ReplicaSetControllerConfiguration } // AddFlags adds flags related to ReplicaSetController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicationcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicationcontroller.go index 3e24dc5aae7..8c8e624b8ba 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicationcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/replicationcontroller.go @@ -24,7 +24,7 @@ import ( // ReplicationControllerOptions holds the ReplicationController options. type ReplicationControllerOptions struct { - ConcurrentRCSyncs int32 + *kubectrlmgrconfig.ReplicationControllerConfiguration } // AddFlags adds flags related to ReplicationController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/resourcequotacontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/resourcequotacontroller.go index 5bb1f07a52c..447ce258636 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/resourcequotacontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/resourcequotacontroller.go @@ -19,14 +19,12 @@ package options import ( "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" ) // ResourceQuotaControllerOptions holds the ResourceQuotaController options. type ResourceQuotaControllerOptions struct { - ResourceQuotaSyncPeriod metav1.Duration - ConcurrentResourceQuotaSyncs int32 + *kubectrlmgrconfig.ResourceQuotaControllerConfiguration } // AddFlags adds flags related to ResourceQuotaController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/serviceaccountcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/serviceaccountcontroller.go index 88a40b46bd2..a3c8aebc0fc 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/serviceaccountcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/serviceaccountcontroller.go @@ -24,9 +24,7 @@ import ( // SAControllerOptions holds the ServiceAccountController options. type SAControllerOptions struct { - ServiceAccountKeyFile string - ConcurrentSATokenSyncs int32 - RootCAFile string + *kubectrlmgrconfig.SAControllerConfiguration } // AddFlags adds flags related to ServiceAccountController for controller manager to the specified FlagSet diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/ttlafterfinishedcontroller.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/ttlafterfinishedcontroller.go index 2f7fe765eac..c422958de82 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/ttlafterfinishedcontroller.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/ttlafterfinishedcontroller.go @@ -24,7 +24,7 @@ import ( // TTLAfterFinishedControllerOptions holds the TTLAfterFinishedController options. type TTLAfterFinishedControllerOptions struct { - ConcurrentTTLSyncs int32 + *kubectrlmgrconfig.TTLAfterFinishedControllerConfiguration } // AddFlags adds flags related to TTLAfterFinishedController for controller manager to the specified FlagSet. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go index 1512facb67c..39659a8b3ec 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go @@ -119,7 +119,7 @@ func AttemptToLoadRecycler(path string, config *volume.VolumeConfig) error { return err } if err = volume.ValidateRecyclerPodTemplate(recyclerPod); err != nil { - return fmt.Errorf("Pod specification (%v): %v", path, err) + return fmt.Errorf("pod specification (%v): %v", path, err) } config.RecyclerPodTemplate = recyclerPod } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/policy.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/policy.go index d841d8dd144..03c84b6644a 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/policy.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/policy.go @@ -44,9 +44,9 @@ func startDisruptionController(ctx ControllerContext) (http.Handler, bool, error ctx.InformerFactory.Core().V1().Pods(), ctx.InformerFactory.Policy().V1beta1().PodDisruptionBudgets(), ctx.InformerFactory.Core().V1().ReplicationControllers(), - ctx.InformerFactory.Extensions().V1beta1().ReplicaSets(), - ctx.InformerFactory.Extensions().V1beta1().Deployments(), - ctx.InformerFactory.Apps().V1beta1().StatefulSets(), + ctx.InformerFactory.Apps().V1().ReplicaSets(), + ctx.InformerFactory.Apps().V1().Deployments(), + ctx.InformerFactory.Apps().V1().StatefulSets(), ctx.ClientBuilder.ClientOrDie("disruption-controller"), ).Run(ctx.Stop) return nil, true, nil diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-proxy/BUILD index 7fadabd294f..29e5743beb1 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/BUILD @@ -22,8 +22,8 @@ go_library( "//cmd/kube-proxy/app:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", "//pkg/version/prometheus:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/BUILD index b99cf2ca155..05b49da2f49 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/kubelet/qos:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/proxy:go_default_library", + "//pkg/proxy/apis:go_default_library", "//pkg/proxy/apis/config:go_default_library", "//pkg/proxy/apis/config/scheme:go_default_library", "//pkg/proxy/apis/config/validation:go_default_library", @@ -31,6 +32,7 @@ go_library( "//pkg/proxy/ipvs:go_default_library", "//pkg/proxy/userspace:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/filesystem:go_default_library", "//pkg/util/flag:go_default_library", "//pkg/util/ipset:go_default_library", "//pkg/util/iptables:go_default_library", @@ -42,7 +44,7 @@ go_library( "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library", @@ -52,7 +54,6 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", @@ -60,7 +61,11 @@ go_library( "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//staging/src/k8s.io/kube-proxy/config/v1alpha1:go_default_library", + "//vendor/github.com/fsnotify/fsnotify:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", @@ -162,9 +167,9 @@ go_test( "//pkg/apis/core:go_default_library", "//pkg/proxy/apis/config:go_default_library", "//pkg/util/configz:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ] + select({ diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/conntrack.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/conntrack.go index a2012ed427c..70c2f965788 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/conntrack.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/conntrack.go @@ -43,7 +43,7 @@ type Conntracker interface { type realConntracker struct{} -var readOnlySysFSError = errors.New("readOnlySysFS") +var errReadOnlySysFS = errors.New("readOnlySysFS") func (rct realConntracker) SetMax(max int) error { if err := rct.setIntSysCtl("nf_conntrack_max", max); err != nil { @@ -70,14 +70,14 @@ func (rct realConntracker) SetMax(max int) error { // issue (https://github.com/docker/docker/issues/24000). Setting // conntrack will fail when sysfs is readonly. When that happens, we // don't set conntrack hashsize and return a special error - // readOnlySysFSError here. The caller should deal with - // readOnlySysFSError differently. + // errReadOnlySysFS here. The caller should deal with + // errReadOnlySysFS differently. writable, err := isSysFSWritable() if err != nil { return err } if !writable { - return readOnlySysFSError + return errReadOnlySysFS } // TODO: generify this and sysctl to a new sysfs.WriteInt() klog.Infof("Setting conntrack hashsize to %d", max/4) @@ -129,7 +129,7 @@ func isSysFSWritable() (bool, error) { } klog.Errorf("sysfs is not writable: %+v (mount options are %v)", mountPoint, mountPoint.Opts) - return false, readOnlySysFSError + return false, errReadOnlySysFS } return false, errors.New("No sysfs mounted") diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/init_windows.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/init_windows.go index 85cafcda53b..5db0b703f40 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/init_windows.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/init_windows.go @@ -37,4 +37,7 @@ func initForOS(windowsService bool) error { func (o *Options) addOSFlags(fs *pflag.FlagSet) { fs.BoolVar(&o.WindowsService, "windows-service", o.WindowsService, "Enable Windows Service Control Manager API integration") + fs.StringVar(&o.config.Winkernel.SourceVip, "source-vip", o.config.Winkernel.SourceVip, "The IP address of the source VIP for non-DSR.") + fs.StringVar(&o.config.Winkernel.NetworkName, "network-name", o.config.Winkernel.NetworkName, "The name of the cluster network.") + fs.BoolVar(&o.config.Winkernel.EnableDSR, "enable-dsr", o.config.Winkernel.EnableDSR, "If true make kube-proxy apply DSR policies for service VIP") } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server.go index 96f059c982c..8a65a9179df 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server.go @@ -28,8 +28,8 @@ import ( "strings" "time" - "k8s.io/api/core/v1" - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" + v1 "k8s.io/api/core/v1" + v1meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer/json" @@ -39,7 +39,6 @@ import ( "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/apiserver/pkg/util/flag" informers "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" @@ -47,11 +46,14 @@ import ( "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/tools/record" + cliflag "k8s.io/component-base/cli/flag" + componentbaseconfig "k8s.io/component-base/config" "k8s.io/kube-proxy/config/v1alpha1" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/kubelet/qos" "k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/proxy" + "k8s.io/kubernetes/pkg/proxy/apis" kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" "k8s.io/kubernetes/pkg/proxy/apis/config/scheme" "k8s.io/kubernetes/pkg/proxy/apis/config/validation" @@ -61,6 +63,7 @@ import ( "k8s.io/kubernetes/pkg/proxy/ipvs" "k8s.io/kubernetes/pkg/proxy/userspace" "k8s.io/kubernetes/pkg/util/configz" + "k8s.io/kubernetes/pkg/util/filesystem" utilflag "k8s.io/kubernetes/pkg/util/flag" utilipset "k8s.io/kubernetes/pkg/util/ipset" utiliptables "k8s.io/kubernetes/pkg/util/iptables" @@ -72,6 +75,7 @@ import ( "k8s.io/utils/exec" utilpointer "k8s.io/utils/pointer" + "github.com/fsnotify/fsnotify" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -85,6 +89,11 @@ const ( proxyModeKernelspace = "kernelspace" ) +// proxyRun defines the interface to run a specified ProxyServer +type proxyRun interface { + Run() error +} + // Options contains everything necessary to create and run a proxy server. type Options struct { // ConfigFile is the location of the proxy server's configuration file. @@ -100,6 +109,12 @@ type Options struct { WindowsService bool // config is the proxy server's configuration object. config *kubeproxyconfig.KubeProxyConfiguration + // watcher is used to watch on the update change of ConfigFile + watcher filesystem.FSWatcher + // proxyServer is the interface to run the proxy server + proxyServer proxyRun + // errCh is the channel that errors will be sent + errCh chan error // The fields below here are placeholders for flags that can't be directly mapped into // config.KubeProxyConfiguration. @@ -128,7 +143,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { fs.BoolVar(&o.CleanupAndExit, "cleanup-iptables", o.CleanupAndExit, "If true cleanup iptables and ipvs rules and exit.") fs.MarkDeprecated("cleanup-iptables", "This flag is replaced by --cleanup.") fs.BoolVar(&o.CleanupAndExit, "cleanup", o.CleanupAndExit, "If true cleanup iptables and ipvs rules and exit.") - fs.BoolVar(&o.CleanupIPVS, "cleanup-ipvs", o.CleanupIPVS, "If true make kube-proxy cleanup ipvs rules before running. Default is true") + fs.BoolVar(&o.CleanupIPVS, "cleanup-ipvs", o.CleanupIPVS, "If true and --cleanup is specified, kube-proxy will also flush IPVS rules, in addition to normal cleanup.") // All flags below here are deprecated and will eventually be removed. @@ -177,7 +192,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&o.config.IPVS.Scheduler, "ipvs-scheduler", o.config.IPVS.Scheduler, "The ipvs scheduler type when proxy mode is ipvs") fs.StringSliceVar(&o.config.NodePortAddresses, "nodeport-addresses", o.config.NodePortAddresses, "A string slice of values which specify the addresses to use for NodePorts. Values may be valid IP blocks (e.g. 1.2.3.0/24, 1.2.3.4/32). The default empty string slice ([]) means to use all local addresses.") - fs.Var(flag.NewMapStringBool(&o.config.FeatureGates), "feature-gates", "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ + fs.Var(cliflag.NewMapStringBool(&o.config.FeatureGates), "feature-gates", "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ "Options are:\n"+strings.Join(utilfeature.DefaultFeatureGate.KnownFeatures(), "\n")) } @@ -189,6 +204,7 @@ func NewOptions() *Options { scheme: scheme.Scheme, codecs: scheme.Codecs, CleanupIPVS: true, + errCh: make(chan error), } } @@ -207,19 +223,52 @@ func (o *Options) Complete() error { } else { o.config = c } + + if err := o.initWatcher(); err != nil { + return err + } } if err := o.processHostnameOverrideFlag(); err != nil { return err } - if err := utilfeature.DefaultFeatureGate.SetFromMap(o.config.FeatureGates); err != nil { + if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(o.config.FeatureGates); err != nil { return err } - return nil } +// Creates a new filesystem watcher and adds watches for the config file. +func (o *Options) initWatcher() error { + fswatcher := filesystem.NewFsnotifyWatcher() + err := fswatcher.Init(o.eventHandler, o.errorHandler) + if err != nil { + return err + } + err = fswatcher.AddWatch(o.ConfigFile) + if err != nil { + return err + } + o.watcher = fswatcher + return nil +} + +func (o *Options) eventHandler(ent fsnotify.Event) { + eventOpIs := func(Op fsnotify.Op) bool { + return ent.Op&Op == Op + } + if eventOpIs(fsnotify.Write) || eventOpIs(fsnotify.Rename) { + // error out when ConfigFile is updated + o.errCh <- fmt.Errorf("content of the proxy server's configuration file was updated") + } + o.errCh <- nil +} + +func (o *Options) errorHandler(err error) { + o.errCh <- err +} + // processHostnameOverrideFlag processes hostname-override flag func (o *Options) processHostnameOverrideFlag() error { // Check if hostname-override flag is set and use value since configFile always overrides @@ -239,7 +288,6 @@ func (o *Options) Validate(args []string) error { if len(args) != 0 { return errors.New("no arguments are supported") } - if errs := validation.Validate(o.config); len(errs) != 0 { return errs.ToAggregate() } @@ -248,6 +296,7 @@ func (o *Options) Validate(args []string) error { } func (o *Options) Run() error { + defer close(o.errCh) if len(o.WriteConfigTo) > 0 { return o.writeConfigFile() } @@ -256,8 +305,31 @@ func (o *Options) Run() error { if err != nil { return err } + o.proxyServer = proxyServer + return o.runLoop() +} - return proxyServer.Run() +// runLoop will watch on the update change of the proxy server's configuration file. +// Return an error when updated +func (o *Options) runLoop() error { + if o.watcher != nil { + o.watcher.Run() + } + + // run the proxy in goroutine + go func() { + err := o.proxyServer.Run() + o.errCh <- err + }() + + for { + select { + case err := <-o.errCh: + if err != nil { + return err + } + } + } } func (o *Options) writeConfigFile() error { @@ -440,7 +512,7 @@ type ProxyServer struct { // createClients creates a kube client and an event client from the given config and masterOverride. // TODO remove masterOverride when CLI flags are removed. -func createClients(config apimachineryconfig.ClientConnectionConfiguration, masterOverride string) (clientset.Interface, v1core.EventsGetter, error) { +func createClients(config componentbaseconfig.ClientConnectionConfiguration, masterOverride string) (clientset.Interface, v1core.EventsGetter, error) { var kubeConfig *rest.Config var err error @@ -549,17 +621,18 @@ func (s *ProxyServer) Run() error { if max > 0 { err := s.Conntracker.SetMax(max) if err != nil { - if err != readOnlySysFSError { + if err != errReadOnlySysFS { return err } - // readOnlySysFSError is caused by a known docker issue (https://github.com/docker/docker/issues/24000), + // errReadOnlySysFS is caused by a known docker issue (https://github.com/docker/docker/issues/24000), // the only remediation we know is to restart the docker daemon. // Here we'll send an node event with specific reason and message, the // administrator should decide whether and how to handle this issue, - // whether to drain the node and restart docker. + // whether to drain the node and restart docker. Occurs in other container runtimes + // as well. // TODO(random-liu): Remove this when the docker bug is fixed. - const message = "DOCKER RESTART NEEDED (docker issue #24000): /sys is read-only: " + - "cannot modify conntrack limits, problems may arise later." + const message = "CRI error: /sys is read-only: " + + "cannot modify conntrack limits, problems may arise later (If running Docker, see docker issue #24000)" s.Recorder.Eventf(s.NodeRef, api.EventTypeWarning, err.Error(), message) } } @@ -579,7 +652,10 @@ func (s *ProxyServer) Run() error { } } - informerFactory := informers.NewSharedInformerFactory(s.Client, s.ConfigSyncPeriod) + informerFactory := informers.NewSharedInformerFactoryWithOptions(s.Client, s.ConfigSyncPeriod, + informers.WithTweakListOptions(func(options *v1meta.ListOptions) { + options.LabelSelector = "!" + apis.LabelServiceProxyName + })) // Create configs (i.e. Watches for Services and Endpoints) // Note: RegisterHandler() calls need to happen before creation of Sources because sources diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_others.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_others.go index 468b2c725ad..4cec999adc6 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_others.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_others.go @@ -54,13 +54,12 @@ import ( // NewProxyServer returns a new ProxyServer. func NewProxyServer(o *Options) (*ProxyServer, error) { - return newProxyServer(o.config, o.CleanupAndExit, o.CleanupIPVS, o.scheme, o.master) + return newProxyServer(o.config, o.CleanupAndExit, o.scheme, o.master) } func newProxyServer( config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExit bool, - cleanupIPVS bool, scheme *runtime.Scheme, master string) (*ProxyServer, error) { @@ -175,17 +174,6 @@ func newProxyServer( proxier = proxierIPTables serviceEventHandler = proxierIPTables endpointsEventHandler = proxierIPTables - // No turning back. Remove artifacts that might still exist from the userspace Proxier. - klog.V(0).Info("Tearing down inactive rules.") - // TODO this has side effects that should only happen when Run() is invoked. - userspace.CleanupLeftovers(iptInterface) - // IPVS Proxier will generate some iptables rules, need to clean them before switching to other proxy mode. - // Besides, ipvs proxier will create some ipvs rules as well. Because there is no way to tell if a given - // ipvs rule is created by IPVS proxier or not. Users should explicitly specify `--clean-ipvs=true` to flush - // all ipvs rules when kube-proxy start up. Users do this operation should be with caution. - if canUseIPVS { - ipvs.CleanupLeftovers(ipvsInterface, iptInterface, ipsetInterface, cleanupIPVS) - } } else if proxyMode == proxyModeIPVS { klog.V(0).Info("Using ipvs Proxier.") proxierIPVS, err := ipvs.NewProxier( @@ -214,10 +202,6 @@ func newProxyServer( proxier = proxierIPVS serviceEventHandler = proxierIPVS endpointsEventHandler = proxierIPVS - klog.V(0).Info("Tearing down inactive rules.") - // TODO this has side effects that should only happen when Run() is invoked. - userspace.CleanupLeftovers(iptInterface) - iptables.CleanupLeftovers(iptInterface) } else { klog.V(0).Info("Using userspace Proxier.") // This is a proxy.LoadBalancer which NewProxier needs but has methods we don't need for @@ -243,18 +227,6 @@ func newProxyServer( } serviceEventHandler = proxierUserspace proxier = proxierUserspace - - // Remove artifacts from the iptables and ipvs Proxier, if not on Windows. - klog.V(0).Info("Tearing down inactive rules.") - // TODO this has side effects that should only happen when Run() is invoked. - iptables.CleanupLeftovers(iptInterface) - // IPVS Proxier will generate some iptables rules, need to clean them before switching to other proxy mode. - // Besides, ipvs proxier will create some ipvs rules as well. Because there is no way to tell if a given - // ipvs rule is created by IPVS proxier or not. Users should explicitly specify `--clean-ipvs=true` to flush - // all ipvs rules when kube-proxy start up. Users do this operation should be with caution. - if canUseIPVS { - ipvs.CleanupLeftovers(ipvsInterface, iptInterface, ipsetInterface, cleanupIPVS) - } } iptInterface.AddReloadFunc(proxier.Sync) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_windows.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_windows.go index 5ef2ce16182..596796cbbe1 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_windows.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_windows.go @@ -110,6 +110,7 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi utilnode.GetNodeIP(client, hostname), recorder, healthzUpdater, + config.Winkernel, ) if err != nil { return nil, fmt.Errorf("unable to create proxier: %v", err) @@ -143,8 +144,6 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi } proxier = proxierUserspace serviceEventHandler = proxierUserspace - klog.V(0).Info("Tearing down pure-winkernel proxy rules.") - winkernel.CleanupLeftovers() } return &ProxyServer{ diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/BUILD index e0c6965fc58..42aa06ed0f2 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/BUILD @@ -20,10 +20,10 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kube-scheduler", deps = [ "//cmd/kube-scheduler/app:go_default_library", - "//pkg/client/metrics/prometheus:go_default_library", + "//pkg/util/prometheusclientgo:go_default_library", "//pkg/version/prometheus:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/OWNERS b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/OWNERS index fe768eadb54..485eb202d98 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/OWNERS @@ -1,6 +1,8 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-scheduling-maintainers reviewers: - sig-scheduling -labels: +labels: - sig/scheduling diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/BUILD index a3243f96ab4..c1d924b4051 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/BUILD @@ -14,20 +14,14 @@ go_library( "//cmd/kube-scheduler/app/options:go_default_library", "//pkg/api/legacyscheme:go_default_library", "//pkg/controller:go_default_library", - "//pkg/features:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", - "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/api/latest:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/factory:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/flag:go_default_library", "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library", @@ -38,12 +32,11 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library", - "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/term:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/leaderelection:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/BUILD b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/BUILD index 65050784ee0..c681c3e4e91 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/BUILD @@ -21,7 +21,6 @@ go_library( "//pkg/scheduler/apis/config/validation:go_default_library", "//pkg/scheduler/factory:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library", @@ -29,7 +28,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", @@ -39,6 +37,8 @@ go_library( "//staging/src/k8s.io/client-go/tools/leaderelection:go_default_library", "//staging/src/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//staging/src/k8s.io/kube-scheduler/config/v1alpha1:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -70,11 +70,10 @@ go_test( deps = [ "//cmd/kube-scheduler/app/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/insecure_serving.go b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/insecure_serving.go index db3c7351100..6f6f93591d2 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/insecure_serving.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/insecure_serving.go @@ -157,7 +157,7 @@ func (o *CombinedInsecureServingOptions) Validate() []error { } if len(o.BindAddress) > 0 && net.ParseIP(o.BindAddress) == nil { - errors = append(errors, fmt.Errorf("--address has no valid IP address")) + errors = append(errors, fmt.Errorf("--address %v is an invalid IP address", o.BindAddress)) } return errors diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/options.go index b5a647b57e1..4bedc7d5fa6 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/options/options.go @@ -24,12 +24,10 @@ import ( "time" corev1 "k8s.io/api/core/v1" - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/uuid" apiserveroptions "k8s.io/apiserver/pkg/server/options" utilfeature "k8s.io/apiserver/pkg/util/feature" - apiserverflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" @@ -39,6 +37,8 @@ import ( "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/tools/record" + cliflag "k8s.io/component-base/cli/flag" + componentbaseconfig "k8s.io/component-base/config" "k8s.io/klog" kubeschedulerconfigv1alpha1 "k8s.io/kube-scheduler/config/v1alpha1" schedulerappconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config" @@ -140,7 +140,7 @@ func newDefaultComponentConfig() (*kubeschedulerconfig.KubeSchedulerConfiguratio } // Flags returns flags for a specific scheduler by section name -func (o *Options) Flags() (nfs apiserverflag.NamedFlagSets) { +func (o *Options) Flags() (nfs cliflag.NamedFlagSets) { fs := nfs.FlagSet("misc") fs.StringVar(&o.ConfigFile, "config", o.ConfigFile, "The path to the configuration file. Flags override values in this file.") fs.StringVar(&o.WriteConfigTo, "write-config-to", o.WriteConfigTo, "If set, write the configuration values to this file and exit.") @@ -153,7 +153,7 @@ func (o *Options) Flags() (nfs apiserverflag.NamedFlagSets) { o.Deprecated.AddFlags(nfs.FlagSet("deprecated"), &o.ComponentConfig) leaderelectionconfig.BindFlags(&o.ComponentConfig.LeaderElection.LeaderElectionConfiguration, nfs.FlagSet("leader election")) - utilfeature.DefaultFeatureGate.AddFlag(nfs.FlagSet("feature gate")) + utilfeature.DefaultMutableFeatureGate.AddFlag(nfs.FlagSet("feature gate")) return nfs } @@ -274,6 +274,7 @@ func makeLeaderElectionConfig(config kubeschedulerconfig.KubeSchedulerLeaderElec config.LockObjectNamespace, config.LockObjectName, client.CoreV1(), + client.CoordinationV1(), resourcelock.ResourceLockConfig{ Identity: id, EventRecorder: recorder, @@ -294,7 +295,7 @@ func makeLeaderElectionConfig(config kubeschedulerconfig.KubeSchedulerLeaderElec // createClients creates a kube client and an event client from the given config and masterOverride. // TODO remove masterOverride when CLI flags are removed. -func createClients(config apimachineryconfig.ClientConnectionConfiguration, masterOverride string, timeout time.Duration) (clientset.Interface, clientset.Interface, v1core.EventsGetter, error) { +func createClients(config componentbaseconfig.ClientConnectionConfiguration, masterOverride string, timeout time.Duration) (clientset.Interface, clientset.Interface, v1core.EventsGetter, error) { if len(config.Kubeconfig) == 0 && len(masterOverride) == 0 { klog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.") } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go index 096a6b4caeb..48a30d74cae 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go @@ -21,13 +21,10 @@ import ( "context" "fmt" "io" - "io/ioutil" "net/http" "os" goruntime "runtime" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/authentication/authenticator" @@ -38,23 +35,18 @@ import ( "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" - utilfeature "k8s.io/apiserver/pkg/util/feature" - apiserverflag "k8s.io/apiserver/pkg/util/flag" - "k8s.io/apiserver/pkg/util/globalflag" - storageinformers "k8s.io/client-go/informers/storage/v1" + "k8s.io/apiserver/pkg/util/term" v1core "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/leaderelection" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/cli/globalflag" schedulerserverconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config" "k8s.io/kubernetes/cmd/kube-scheduler/app/options" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/controller" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" - schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/factory" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/util/configz" utilflag "k8s.io/kubernetes/pkg/util/flag" @@ -98,15 +90,15 @@ through the API as necessary.`, } usageFmt := "Usage:\n %s\n" - cols, _, _ := apiserverflag.TerminalSize(cmd.OutOrStdout()) + cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) cmd.SetUsageFunc(func(cmd *cobra.Command) error { fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) return nil }) cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine()) - apiserverflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) + cliflag.PrintSections(cmd.OutOrStdout(), namedFlagSets, cols) }) cmd.MarkFlagFilename("config", "yaml", "yml", "json") @@ -165,10 +157,8 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options) error // Run executes the scheduler based on the given configuration. It only return on error or when stopCh is closed. func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error { - var storageClassInformer storageinformers.StorageClassInformer - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - storageClassInformer = cc.InformerFactory.Storage().V1().StorageClasses() - } + // To help debugging, immediately log version + klog.V(1).Infof("Starting Kubernetes Scheduler version %+v", version.Get()) // Create the scheduler. sched, err := scheduler.New(cc.Client, @@ -181,7 +171,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error cc.InformerFactory.Apps().V1().StatefulSets(), cc.InformerFactory.Core().V1().Services(), cc.InformerFactory.Policy().V1beta1().PodDisruptionBudgets(), - storageClassInformer, + cc.InformerFactory.Storage().V1().StorageClasses(), cc.Recorder, cc.ComponentConfig.AlgorithmSource, stopCh, @@ -196,6 +186,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error // Prepare the event broadcaster. if cc.Broadcaster != nil && cc.EventClient != nil { + cc.Broadcaster.StartLogging(klog.V(6).Infof) cc.Broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: cc.EventClient.Events("")}) } @@ -221,9 +212,10 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error } if cc.SecureServing != nil { handler := buildHandlerChain(newHealthzHandler(&cc.ComponentConfig, false, checks...), cc.Authentication.Authenticator, cc.Authorization.Authorizer) - if err := cc.SecureServing.Serve(handler, 0, stopCh); err != nil { + // TODO: handle stoppedCh returned by c.SecureServing.Serve + if _, err := cc.SecureServing.Serve(handler, 0, stopCh); err != nil { // fail early for secure handlers, removing the old error loop from above - return fmt.Errorf("failed to start healthz server: %v", err) + return fmt.Errorf("failed to start secure server: %v", err) } } @@ -315,7 +307,7 @@ func newMetricsHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration) h return pathRecorderMux } -// newHealthzServer creates a healthz server from the config, and will also +// newHealthzHandler creates a healthz server from the config, and will also // embed the metrics handler if the healthz and metrics address configurations // are the same. func newHealthzHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration, separateMetrics bool, checks ...healthz.HealthzChecker) http.Handler { @@ -332,90 +324,3 @@ func newHealthzHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration, s } return pathRecorderMux } - -// NewSchedulerConfig creates the scheduler configuration. This is exposed for use by tests. -func NewSchedulerConfig(s schedulerserverconfig.CompletedConfig) (*factory.Config, error) { - var storageClassInformer storageinformers.StorageClassInformer - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - storageClassInformer = s.InformerFactory.Storage().V1().StorageClasses() - } - - // Set up the configurator which can create schedulers from configs. - configurator := factory.NewConfigFactory(&factory.ConfigFactoryArgs{ - SchedulerName: s.ComponentConfig.SchedulerName, - Client: s.Client, - NodeInformer: s.InformerFactory.Core().V1().Nodes(), - PodInformer: s.PodInformer, - PvInformer: s.InformerFactory.Core().V1().PersistentVolumes(), - PvcInformer: s.InformerFactory.Core().V1().PersistentVolumeClaims(), - ReplicationControllerInformer: s.InformerFactory.Core().V1().ReplicationControllers(), - ReplicaSetInformer: s.InformerFactory.Apps().V1().ReplicaSets(), - StatefulSetInformer: s.InformerFactory.Apps().V1().StatefulSets(), - ServiceInformer: s.InformerFactory.Core().V1().Services(), - PdbInformer: s.InformerFactory.Policy().V1beta1().PodDisruptionBudgets(), - StorageClassInformer: storageClassInformer, - HardPodAffinitySymmetricWeight: s.ComponentConfig.HardPodAffinitySymmetricWeight, - DisablePreemption: s.ComponentConfig.DisablePreemption, - PercentageOfNodesToScore: s.ComponentConfig.PercentageOfNodesToScore, - BindTimeoutSeconds: *s.ComponentConfig.BindTimeoutSeconds, - }) - - source := s.ComponentConfig.AlgorithmSource - var config *factory.Config - switch { - case source.Provider != nil: - // Create the config from a named algorithm provider. - sc, err := configurator.CreateFromProvider(*source.Provider) - if err != nil { - return nil, fmt.Errorf("couldn't create scheduler using provider %q: %v", *source.Provider, err) - } - config = sc - case source.Policy != nil: - // Create the config from a user specified policy source. - policy := &schedulerapi.Policy{} - switch { - case source.Policy.File != nil: - // Use a policy serialized in a file. - policyFile := source.Policy.File.Path - _, err := os.Stat(policyFile) - if err != nil { - return nil, fmt.Errorf("missing policy config file %s", policyFile) - } - data, err := ioutil.ReadFile(policyFile) - if err != nil { - return nil, fmt.Errorf("couldn't read policy config: %v", err) - } - err = runtime.DecodeInto(latestschedulerapi.Codec, []byte(data), policy) - if err != nil { - return nil, fmt.Errorf("invalid policy: %v", err) - } - case source.Policy.ConfigMap != nil: - // Use a policy serialized in a config map value. - policyRef := source.Policy.ConfigMap - policyConfigMap, err := s.Client.CoreV1().ConfigMaps(policyRef.Namespace).Get(policyRef.Name, metav1.GetOptions{}) - if err != nil { - return nil, fmt.Errorf("couldn't get policy config map %s/%s: %v", policyRef.Namespace, policyRef.Name, err) - } - data, found := policyConfigMap.Data[kubeschedulerconfig.SchedulerPolicyConfigMapKey] - if !found { - return nil, fmt.Errorf("missing policy config map value at key %q", kubeschedulerconfig.SchedulerPolicyConfigMapKey) - } - err = runtime.DecodeInto(latestschedulerapi.Codec, []byte(data), policy) - if err != nil { - return nil, fmt.Errorf("invalid policy: %v", err) - } - } - sc, err := configurator.CreateFromConfig(*policy) - if err != nil { - return nil, fmt.Errorf("couldn't create scheduler from policy: %v", err) - } - config = sc - default: - return nil, fmt.Errorf("unsupported algorithm source: %v", source) - } - // Additional tweaks to the config produced by the configurator. - config.Recorder = s.Recorder - - config.DisablePreemption = s.ComponentConfig.DisablePreemption - return config, nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/BUILD b/vendor/k8s.io/kubernetes/cmd/kubelet/BUILD index 82fcb0c721e..b0afbcc7880 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/BUILD @@ -1,10 +1,10 @@ package(default_visibility = ["//visibility:public"]) load( - "@io_bazel_rules_go//go:def.bzl", - "go_binary", - "go_library", + "//build:go.bzl", + go_binary = "go_binary_conditional_pure", ) +load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//pkg/version:def.bzl", "version_x_defs") go_binary( @@ -22,7 +22,7 @@ go_library( "//pkg/client/metrics/prometheus:go_default_library", "//pkg/version/prometheus:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/OWNERS b/vendor/k8s.io/kubernetes/cmd/kubelet/OWNERS index 31df1d8d4ea..0031c93d289 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - dchen1107 - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD index 309d7d07e0b..a837a646d64 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD @@ -8,8 +8,22 @@ load( go_test( name = "go_default_test", - srcs = ["server_test.go"], + srcs = [ + "server_bootstrap_test.go", + "server_test.go", + ], embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//vendor/github.com/cloudflare/cfssl/config:go_default_library", + "//vendor/github.com/cloudflare/cfssl/signer:go_default_library", + "//vendor/github.com/cloudflare/cfssl/signer/local:go_default_library", + ], ) go_library( @@ -54,6 +68,7 @@ go_library( "//pkg/kubelet/kubeletconfig/configfiles:go_default_library", "//pkg/kubelet/server:go_default_library", "//pkg/kubelet/server/streaming:go_default_library", + "//pkg/kubelet/stats/pidlimit:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/filesystem:go_default_library", @@ -61,7 +76,6 @@ go_library( "//pkg/util/flock:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/node:go_default_library", - "//pkg/util/nsenter:go_default_library", "//pkg/util/oom:go_default_library", "//pkg/util/rlimit:go_default_library", "//pkg/version:go_default_library", @@ -94,6 +108,7 @@ go_library( "//pkg/volume/scaleio:go_default_library", "//pkg/volume/secret:go_default_library", "//pkg/volume/storageos:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//pkg/volume/vsphere_volume:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -108,25 +123,26 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/authorization/authorizerfactory:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/client-go/util/certificate:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/kubelet/config/v1beta1:go_default_library", "//vendor/github.com/coreos/go-systemd/daemon:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//vendor/github.com/sigma/go-inotify:go_default_library", diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/OWNERS b/vendor/k8s.io/kubernetes/cmd/kubelet/app/OWNERS old mode 100755 new mode 100644 index 9c8026c51e6..d7211290337 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/OWNERS +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sig-node-reviewers diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/BUILD b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/BUILD index d6e0d70f4a0..e76c2e10898 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/BUILD @@ -36,8 +36,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//staging/src/k8s.io/kubelet/config/v1beta1:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -74,7 +74,7 @@ go_test( embed = [":go_default_library"], deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/globalflags.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/globalflags.go index fe5c70e8d73..9e4b7d14b77 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/globalflags.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/globalflags.go @@ -25,7 +25,7 @@ import ( "github.com/spf13/pflag" // libs that provide registration functions - "k8s.io/apiserver/pkg/util/logs" + "k8s.io/component-base/logs" "k8s.io/kubernetes/pkg/version/verflag" // ensure libs have a chance to globally register their flags diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/options.go index 012b5bce820..8db51382772 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/options/options.go @@ -19,7 +19,7 @@ package options import ( "fmt" - _ "net/http/pprof" + _ "net/http/pprof" // Enable pprof HTTP handlers. "path/filepath" "runtime" "strings" @@ -29,7 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/apiserver/pkg/util/flag" + cliflag "k8s.io/component-base/cli/flag" "k8s.io/klog" "k8s.io/kubelet/config/v1beta1" "k8s.io/kubernetes/pkg/apis/core" @@ -47,10 +47,11 @@ import ( const defaultRootDir = "/var/lib/kubelet" +// KubeletFlags contains configuration flags for the Kubelet. // A configuration field should go in KubeletFlags instead of KubeletConfiguration if any of these are true: -// - its value will never, or cannot safely be changed during the lifetime of a node -// - its value cannot be safely shared between nodes at the same time (e.g. a hostname) -// KubeletConfiguration is intended to be shared between nodes +// - its value will never, or cannot safely be changed during the lifetime of a node, or +// - its value cannot be safely shared between nodes at the same time (e.g. a hostname); +// KubeletConfiguration is intended to be shared between nodes. // In general, please try to avoid adding flags or configuration fields, // we already have a confusingly large amount of them. type KubeletFlags struct { @@ -91,6 +92,14 @@ type KubeletFlags struct { // are provided, this flag will be ignored. CertDirectory string + // cloudProvider is the provider for cloud services. + // +optional + CloudProvider string + + // cloudConfigFile is the path to the cloud provider configuration file. + // +optional + CloudConfigFile string + // rootDirectory is the directory path to place kubelet files (volume // mounts,etc). RootDirectory string @@ -100,7 +109,7 @@ type KubeletFlags struct { // The path may be absolute or relative; relative paths are under the Kubelet's current working directory. // Providing this flag enables dynamic kubelet configuration. // To use this flag, the DynamicKubeletConfig feature gate must be enabled. - DynamicConfigDir flag.StringFlag + DynamicConfigDir cliflag.StringFlag // The Kubelet will load its initial configuration from this file. // The path may be absolute or relative; relative paths are under the Kubelet's current working directory. @@ -137,7 +146,7 @@ type KubeletFlags struct { // and fails the mount operation fails. ExperimentalCheckNodeCapabilitiesBeforeMount bool // This flag, if set, will avoid including `EvictionHard` limits while computing Node Allocatable. - // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md) doc for more information. + // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. ExperimentalNodeAllocatableIgnoreEvictionThreshold bool // Node Labels are the node labels to add when registering the node in the cluster NodeLabels map[string]string @@ -235,6 +244,7 @@ func NewKubeletFlags() *KubeletFlags { } } +// ValidateKubeletFlags validates Kubelet's configuration flags and returns an error if they are invalid. func ValidateKubeletFlags(f *KubeletFlags) error { // ensure that nobody sets DynamicConfigDir if the dynamic config feature gate is turned off if f.DynamicConfigDir.Provided() && !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { @@ -251,9 +261,9 @@ func ValidateKubeletFlags(f *KubeletFlags) error { } } if len(unknownLabels) > 0 { - // TODO(liggitt): in 1.15, return an error + // TODO(liggitt): in 1.16, return an error klog.Warningf("unknown 'kubernetes.io' or 'k8s.io' labels specified with --node-labels: %v", unknownLabels.List()) - klog.Warningf("in 1.15, --node-labels in the 'kubernetes.io' namespace must begin with an allowed prefix (%s) or be in the specifically allowed set (%s)", strings.Join(kubeletapis.KubeletLabelNamespaces(), ", "), strings.Join(kubeletapis.KubeletLabels(), ", ")) + klog.Warningf("in 1.16, --node-labels in the 'kubernetes.io' namespace must begin with an allowed prefix (%s) or be in the specifically allowed set (%s)", strings.Join(kubeletapis.KubeletLabelNamespaces(), ", "), strings.Join(kubeletapis.KubeletLabels(), ", ")) } return nil @@ -326,7 +336,7 @@ func NewKubeletServer() (*KubeletServer, error) { }, nil } -// validateKubeletServer validates configuration of KubeletServer and returns an error if the input configuration is invalid +// ValidateKubeletServer validates configuration of KubeletServer and returns an error if the input configuration is invalid. func ValidateKubeletServer(s *KubeletServer) error { // please add any KubeletConfiguration validation to the kubeletconfigvalidation.ValidateKubeletConfiguration function if err := kubeletconfigvalidation.ValidateKubeletConfiguration(&s.KubeletConfiguration); err != nil { @@ -385,6 +395,9 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { fs.StringVar(&f.CertDirectory, "cert-dir", f.CertDirectory, "The directory where the TLS certs are located. "+ "If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored.") + fs.StringVar(&f.CloudProvider, "cloud-provider", f.CloudProvider, "The provider for cloud services. Specify empty string for running with no cloud provider. If set, the cloud provider determines the name of the node (consult cloud provider documentation to determine if and how the hostname is used).") + fs.StringVar(&f.CloudConfigFile, "cloud-config", f.CloudConfigFile, "The path to the cloud provider configuration file. Empty string for no configuration file.") + fs.StringVar(&f.RootDirectory, "root-dir", f.RootDirectory, "Directory path for managing kubelet files (volume mounts,etc).") fs.Var(&f.DynamicConfigDir, "dynamic-config-dir", "The Kubelet will use this directory for checkpointing downloaded configurations and tracking configuration health. The Kubelet will create this directory if it does not already exist. The path may be absolute or relative; relative paths start at the Kubelet's current working directory. Providing this flag enables dynamic Kubelet configuration. The DynamicKubeletConfig feature gate must be enabled to pass this flag; this gate currently defaults to true because the feature is beta.") @@ -396,11 +409,11 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { fs.StringVar(&f.ExperimentalMounterPath, "experimental-mounter-path", f.ExperimentalMounterPath, "[Experimental] Path of mounter binary. Leave empty to use the default mount.") fs.StringSliceVar(&f.AllowedUnsafeSysctls, "allowed-unsafe-sysctls", f.AllowedUnsafeSysctls, "Comma-separated whitelist of unsafe sysctls or unsafe sysctl patterns (ending in *). Use these at your own risk. Sysctls feature gate is enabled by default.") fs.BoolVar(&f.ExperimentalKernelMemcgNotification, "experimental-kernel-memcg-notification", f.ExperimentalKernelMemcgNotification, "If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling.") - fs.StringVar(&f.RemoteRuntimeEndpoint, "container-runtime-endpoint", f.RemoteRuntimeEndpoint, "[Experimental] The endpoint of remote runtime service. Currently unix socket and tcp endpoints are supported on Linux, while npipe and tcp endpoints are supported on windows. Examples:'unix:///var/run/dockershim.sock', 'npipe:////./pipe/dockershim'") - fs.StringVar(&f.RemoteImageEndpoint, "image-service-endpoint", f.RemoteImageEndpoint, "[Experimental] The endpoint of remote image service. If not specified, it will be the same with container-runtime-endpoint by default. Currently unix socket and tcp endpoints are supported on Linux, while npipe and tcp endpoints are supported on windows. Examples:'unix:///var/run/dockershim.sock', 'npipe:////./pipe/dockershim'") + fs.StringVar(&f.RemoteRuntimeEndpoint, "container-runtime-endpoint", f.RemoteRuntimeEndpoint, "[Experimental] The endpoint of remote runtime service. Currently unix socket endpoint is supported on Linux, while npipe and tcp endpoints are supported on windows. Examples:'unix:///var/run/dockershim.sock', 'npipe:////./pipe/dockershim'") + fs.StringVar(&f.RemoteImageEndpoint, "image-service-endpoint", f.RemoteImageEndpoint, "[Experimental] The endpoint of remote image service. If not specified, it will be the same with container-runtime-endpoint by default. Currently unix socket endpoint is supported on Linux, while npipe and tcp endpoints are supported on windows. Examples:'unix:///var/run/dockershim.sock', 'npipe:////./pipe/dockershim'") fs.BoolVar(&f.ExperimentalCheckNodeCapabilitiesBeforeMount, "experimental-check-node-capabilities-before-mount", f.ExperimentalCheckNodeCapabilitiesBeforeMount, "[Experimental] if set true, the kubelet will check the underlying node for required components (binaries, etc.) before performing the mount") fs.BoolVar(&f.ExperimentalNodeAllocatableIgnoreEvictionThreshold, "experimental-allocatable-ignore-eviction", f.ExperimentalNodeAllocatableIgnoreEvictionThreshold, "When set to 'true', Hard Eviction Thresholds will be ignored while calculating Node Allocatable. See https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/ for more details. [default=false]") - bindableNodeLabels := flag.ConfigurationMap(f.NodeLabels) + bindableNodeLabels := cliflag.ConfigurationMap(f.NodeLabels) fs.Var(&bindableNodeLabels, "node-labels", fmt.Sprintf(" Labels to add when registering the node in the cluster. Labels must be key=value pairs separated by ','. Labels in the 'kubernetes.io' namespace must begin with an allowed prefix (%s) or be in the specifically allowed set (%s)", strings.Join(kubeletapis.KubeletLabelNamespaces(), ", "), strings.Join(kubeletapis.KubeletLabels(), ", "))) fs.StringVar(&f.VolumePluginDir, "volume-plugin-dir", f.VolumePluginDir, "The full path of the directory in which to search for additional third party volume plugins") fs.StringVar(&f.LockFilePath, "lock-file", f.LockFilePath, " The path to file for kubelet to use as a lock file.") @@ -410,6 +423,7 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { fs.Int32Var(&f.NodeStatusMaxImages, "node-status-max-images", f.NodeStatusMaxImages, " The maximum number of images to report in Node.Status.Images. If -1 is specified, no cap will be applied.") // DEPRECATED FLAGS + fs.MarkDeprecated("containerized", "This feature will be removed in a later release.") fs.StringVar(&f.BootstrapKubeconfig, "experimental-bootstrap-kubeconfig", f.BootstrapKubeconfig, "") fs.MarkDeprecated("experimental-bootstrap-kubeconfig", "Use --bootstrap-kubeconfig") fs.DurationVar(&f.MinimumGCAge.Duration, "minimum-container-ttl-duration", f.MinimumGCAge.Duration, "Minimum age for a finished container before it is garbage collected. Examples: '300ms', '10s' or '2h45m'") @@ -449,14 +463,12 @@ func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfig }() fs.BoolVar(&c.FailSwapOn, "fail-swap-on", c.FailSwapOn, "Makes the Kubelet fail to start if swap is enabled on the node. ") - fs.BoolVar(&c.FailSwapOn, "experimental-fail-swap-on", c.FailSwapOn, "DEPRECATED: please use --fail-swap-on instead.") - fs.StringVar(&c.StaticPodPath, "pod-manifest-path", c.StaticPodPath, "Path to the directory containing static pod files to run, or the path to a single static pod file. Files starting with dots will be ignored.") fs.DurationVar(&c.SyncFrequency.Duration, "sync-frequency", c.SyncFrequency.Duration, "Max period between synchronizing running containers and config") fs.DurationVar(&c.FileCheckFrequency.Duration, "file-check-frequency", c.FileCheckFrequency.Duration, "Duration between checking config files for new data") fs.DurationVar(&c.HTTPCheckFrequency.Duration, "http-check-frequency", c.HTTPCheckFrequency.Duration, "Duration between checking http for new data") fs.StringVar(&c.StaticPodURL, "manifest-url", c.StaticPodURL, "URL for accessing additional Pod specifications to run") - fs.Var(flag.NewColonSeparatedMultimapStringString(&c.StaticPodURLHeader), "manifest-url-header", "Comma-separated list of HTTP headers to use when accessing the url provided to --manifest-url. Multiple headers with the same name will be added in the same order provided. This flag can be repeatedly invoked. For example: `--manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful'`") + fs.Var(cliflag.NewColonSeparatedMultimapStringString(&c.StaticPodURLHeader), "manifest-url-header", "Comma-separated list of HTTP headers to use when accessing the url provided to --manifest-url. Multiple headers with the same name will be added in the same order provided. This flag can be repeatedly invoked. For example: `--manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful'`") fs.Var(utilflag.IPVar{Val: &c.Address}, "address", "The IP address for the Kubelet to serve on (set to `0.0.0.0` for all IPv4 interfaces and `::` for all IPv6 interfaces)") fs.Int32Var(&c.Port, "port", c.Port, "The port for the Kubelet to serve on.") fs.Int32Var(&c.ReadOnlyPort, "read-only-port", c.ReadOnlyPort, "The read-only port for the Kubelet to serve on with no authentication/authorization (set to 0 to disable)") @@ -490,12 +502,12 @@ func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfig fs.StringVar(&c.TLSPrivateKeyFile, "tls-private-key-file", c.TLSPrivateKeyFile, "File containing x509 private key matching --tls-cert-file.") fs.BoolVar(&c.ServerTLSBootstrap, "rotate-server-certificates", c.ServerTLSBootstrap, "Auto-request and rotate the kubelet serving certificates by requesting new certificates from the kube-apiserver when the certificate expiration approaches. Requires the RotateKubeletServerCertificate feature gate to be enabled, and approval of the submitted CertificateSigningRequest objects.") - tlsCipherPossibleValues := flag.TLSCipherPossibleValues() + tlsCipherPossibleValues := cliflag.TLSCipherPossibleValues() fs.StringSliceVar(&c.TLSCipherSuites, "tls-cipher-suites", c.TLSCipherSuites, "Comma-separated list of cipher suites for the server. "+ "If omitted, the default Go cipher suites will be used. "+ "Possible values: "+strings.Join(tlsCipherPossibleValues, ",")) - tlsPossibleVersions := flag.TLSPossibleVersions() + tlsPossibleVersions := cliflag.TLSPossibleVersions() fs.StringVar(&c.TLSMinVersion, "tls-min-version", c.TLSMinVersion, "Minimum TLS version supported. "+ "Possible values: "+strings.Join(tlsPossibleVersions, ", ")) @@ -520,7 +532,7 @@ func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfig fs.Int32Var(&c.ImageGCHighThresholdPercent, "image-gc-high-threshold", c.ImageGCHighThresholdPercent, "The percent of disk usage after which image garbage collection is always run. Values must be within the range [0, 100], To disable image garbage collection, set to 100. ") fs.Int32Var(&c.ImageGCLowThresholdPercent, "image-gc-low-threshold", c.ImageGCLowThresholdPercent, "The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Values must be within the range [0, 100] and should not be larger than that of --image-gc-high-threshold.") fs.DurationVar(&c.VolumeStatsAggPeriod.Duration, "volume-stats-agg-period", c.VolumeStatsAggPeriod.Duration, "Specifies interval for kubelet to calculate and cache the volume disk usage for all pods and volumes. To disable volume calculations, set to 0.") - fs.Var(flag.NewMapStringBool(&c.FeatureGates), "feature-gates", "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ + fs.Var(cliflag.NewMapStringBool(&c.FeatureGates), "feature-gates", "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ "Options are:\n"+strings.Join(utilfeature.DefaultFeatureGate.KnownFeatures(), "\n")) fs.StringVar(&c.KubeletCgroups, "kubelet-cgroups", c.KubeletCgroups, "Optional absolute name of cgroups to create and run the Kubelet in.") fs.StringVar(&c.SystemCgroups, "system-cgroups", c.SystemCgroups, "Optional absolute name of cgroups in which to place all non-kernel processes that are not already inside a cgroup under `/`. Empty for no container. Rolling back the flag requires a reboot.") @@ -530,13 +542,13 @@ func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfig fs.StringVar(&c.CgroupRoot, "cgroup-root", c.CgroupRoot, "Optional root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Default: '', which means use the container runtime default.") fs.StringVar(&c.CPUManagerPolicy, "cpu-manager-policy", c.CPUManagerPolicy, "CPU Manager policy to use. Possible values: 'none', 'static'. Default: 'none'") fs.DurationVar(&c.CPUManagerReconcilePeriod.Duration, "cpu-manager-reconcile-period", c.CPUManagerReconcilePeriod.Duration, " CPU Manager reconciliation period. Examples: '10s', or '1m'. If not supplied, defaults to `NodeStatusUpdateFrequency`") - fs.Var(flag.NewMapStringString(&c.QOSReserved), "qos-reserved", " A set of ResourceName=Percentage (e.g. memory=50%) pairs that describe how pod resource requests are reserved at the QoS level. Currently only memory is supported. Requires the QOSReserved feature gate to be enabled.") + fs.Var(cliflag.NewMapStringString(&c.QOSReserved), "qos-reserved", " A set of ResourceName=Percentage (e.g. memory=50%) pairs that describe how pod resource requests are reserved at the QoS level. Currently only memory is supported. Requires the QOSReserved feature gate to be enabled.") fs.DurationVar(&c.RuntimeRequestTimeout.Duration, "runtime-request-timeout", c.RuntimeRequestTimeout.Duration, "Timeout of all runtime requests except long running request - pull, logs, exec and attach. When timeout exceeded, kubelet will cancel the request, throw out an error and retry later.") fs.StringVar(&c.HairpinMode, "hairpin-mode", c.HairpinMode, "How should the kubelet setup hairpin NAT. This allows endpoints of a Service to loadbalance back to themselves if they should try to access their own Service. Valid values are \"promiscuous-bridge\", \"hairpin-veth\" and \"none\".") fs.Int32Var(&c.MaxPods, "max-pods", c.MaxPods, "Number of Pods that can run on this Kubelet.") fs.StringVar(&c.PodCIDR, "pod-cidr", c.PodCIDR, "The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. For IPv6, the maximum number of IP's allocated is 65536") - fs.Int64Var(&c.PodPidsLimit, "pod-max-pids", c.PodPidsLimit, " Set the maximum number of processes per pod.") + fs.Int64Var(&c.PodPidsLimit, "pod-max-pids", c.PodPidsLimit, "Set the maximum number of processes per pod. If -1, the kubelet defaults to the node allocatable pid capacity.") fs.StringVar(&c.ResolverConfig, "resolv-conf", c.ResolverConfig, "Resolver configuration file used as the basis for the container DNS resolution configuration.") fs.BoolVar(&c.CPUCFSQuota, "cpu-cfs-quota", c.CPUCFSQuota, "Enable CPU CFS quota enforcement for containers that specify CPU limits") @@ -556,18 +568,18 @@ func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfig fs.Int32Var(&c.KubeAPIBurst, "kube-api-burst", c.KubeAPIBurst, "Burst to use while talking with kubernetes apiserver") fs.BoolVar(&c.SerializeImagePulls, "serialize-image-pulls", c.SerializeImagePulls, "Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Aufs storage backend. Issue #10959 has more details.") - fs.Var(flag.NewLangleSeparatedMapStringString(&c.EvictionHard), "eviction-hard", "A set of eviction thresholds (e.g. memory.available<1Gi) that if met would trigger a pod eviction.") - fs.Var(flag.NewLangleSeparatedMapStringString(&c.EvictionSoft), "eviction-soft", "A set of eviction thresholds (e.g. memory.available<1.5Gi) that if met over a corresponding grace period would trigger a pod eviction.") - fs.Var(flag.NewMapStringString(&c.EvictionSoftGracePeriod), "eviction-soft-grace-period", "A set of eviction grace periods (e.g. memory.available=1m30s) that correspond to how long a soft eviction threshold must hold before triggering a pod eviction.") + fs.Var(cliflag.NewLangleSeparatedMapStringString(&c.EvictionHard), "eviction-hard", "A set of eviction thresholds (e.g. memory.available<1Gi) that if met would trigger a pod eviction.") + fs.Var(cliflag.NewLangleSeparatedMapStringString(&c.EvictionSoft), "eviction-soft", "A set of eviction thresholds (e.g. memory.available<1.5Gi) that if met over a corresponding grace period would trigger a pod eviction.") + fs.Var(cliflag.NewMapStringString(&c.EvictionSoftGracePeriod), "eviction-soft-grace-period", "A set of eviction grace periods (e.g. memory.available=1m30s) that correspond to how long a soft eviction threshold must hold before triggering a pod eviction.") fs.DurationVar(&c.EvictionPressureTransitionPeriod.Duration, "eviction-pressure-transition-period", c.EvictionPressureTransitionPeriod.Duration, "Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition.") fs.Int32Var(&c.EvictionMaxPodGracePeriod, "eviction-max-pod-grace-period", c.EvictionMaxPodGracePeriod, "Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. If negative, defer to pod specified value.") - fs.Var(flag.NewMapStringString(&c.EvictionMinimumReclaim), "eviction-minimum-reclaim", "A set of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure.") + fs.Var(cliflag.NewMapStringString(&c.EvictionMinimumReclaim), "eviction-minimum-reclaim", "A set of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure.") fs.Int32Var(&c.PodsPerCore, "pods-per-core", c.PodsPerCore, "Number of Pods per core that can run on this Kubelet. The total number of Pods on this Kubelet cannot exceed max-pods, so max-pods will be used if this calculation results in a larger number of Pods allowed on the Kubelet. A value of 0 disables this limit.") fs.BoolVar(&c.ProtectKernelDefaults, "protect-kernel-defaults", c.ProtectKernelDefaults, "Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults.") // Node Allocatable Flags - fs.Var(flag.NewMapStringString(&c.SystemReserved), "system-reserved", "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi) pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. [default=none]") - fs.Var(flag.NewMapStringString(&c.KubeReserved), "kube-reserved", "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi) pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local ephemeral storage for root file system are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. [default=none]") + fs.Var(cliflag.NewMapStringString(&c.SystemReserved), "system-reserved", "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi) pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. [default=none]") + fs.Var(cliflag.NewMapStringString(&c.KubeReserved), "kube-reserved", "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi) pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local ephemeral storage for root file system are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. [default=none]") fs.StringSliceVar(&c.EnforceNodeAllocatable, "enforce-node-allocatable", c.EnforceNodeAllocatable, "A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. Acceptable options are 'none', 'pods', 'system-reserved', and 'kube-reserved'. If the latter two options are specified, '--system-reserved-cgroup' and '--kube-reserved-cgroup' must also be set, respectively. If 'none' is specified, no additional options should be set. See https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/ for more details.") fs.StringVar(&c.SystemReservedCgroup, "system-reserved-cgroup", c.SystemReservedCgroup, "Absolute name of the top level cgroup that is used to manage non-kubernetes components for which compute resources were reserved via '--system-reserved' flag. Ex. '/system-reserved'. [default='']") fs.StringVar(&c.KubeReservedCgroup, "kube-reserved-cgroup", c.KubeReservedCgroup, "Absolute name of the top level cgroup that is used to manage kubernetes components for which compute resources were reserved via '--kube-reserved' flag. Ex. '/kube-reserved'. [default='']") diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go index 3163b33e1bd..edd25b88c13 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go @@ -24,7 +24,6 @@ import ( "math/rand" "net" "net/http" - _ "net/http/pprof" "net/url" "os" "path" @@ -37,7 +36,7 @@ import ( "github.com/spf13/pflag" "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -46,16 +45,16 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/apiserver/pkg/util/flag" - "k8s.io/client-go/dynamic" clientset "k8s.io/client-go/kubernetes" + certificatesclient "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/record" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/certificate" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" + "k8s.io/client-go/util/keyutil" + cliflag "k8s.io/component-base/cli/flag" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api/legacyscheme" @@ -81,6 +80,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/configfiles" "k8s.io/kubernetes/pkg/kubelet/server" "k8s.io/kubernetes/pkg/kubelet/server/streaming" + "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/util/configz" utilfs "k8s.io/kubernetes/pkg/util/filesystem" @@ -92,6 +92,7 @@ import ( "k8s.io/kubernetes/pkg/util/rlimit" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" + "k8s.io/kubernetes/pkg/volume/util/subpath" "k8s.io/utils/exec" ) @@ -103,7 +104,7 @@ const ( // NewKubeletCommand creates a *cobra.Command object with default parameters func NewKubeletCommand(stopCh <-chan struct{}) *cobra.Command { cleanFlagSet := pflag.NewFlagSet(componentKubelet, pflag.ContinueOnError) - cleanFlagSet.SetNormalizeFunc(flag.WordSepNormalizeFunc) + cleanFlagSet.SetNormalizeFunc(cliflag.WordSepNormalizeFunc) kubeletFlags := options.NewKubeletFlags() kubeletConfig, err := options.NewKubeletConfiguration() // programmer error @@ -114,7 +115,10 @@ func NewKubeletCommand(stopCh <-chan struct{}) *cobra.Command { cmd := &cobra.Command{ Use: componentKubelet, Long: `The kubelet is the primary "node agent" that runs on each -node. The kubelet works in terms of a PodSpec. A PodSpec is a YAML or JSON object +node. It can register the node with the apiserver using one of: the hostname; a flag to +override the hostname; or specific logic for a cloud provider. + +The kubelet works in terms of a PodSpec. A PodSpec is a YAML or JSON object that describes a pod. The kubelet takes a set of PodSpecs that are provided through various mechanisms (primarily through the apiserver) and ensures that the containers described in those PodSpecs are running and healthy. The kubelet doesn't manage @@ -166,7 +170,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API utilflag.PrintFlags(cleanFlagSet) // set feature gates from initial flags-based config - if err := utilfeature.DefaultFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { + if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { klog.Fatal(err) } @@ -192,7 +196,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API klog.Fatal(err) } // update feature gates based on new config - if err := utilfeature.DefaultFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { + if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { klog.Fatal(err) } } @@ -223,7 +227,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API kubeletConfig = dynamicKubeletConfig // Note: flag precedence was already enforced in the controller, prior to validation, // by our above transform function. Now we simply update feature gates from the new config. - if err := utilfeature.DefaultFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { + if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { klog.Fatal(err) } } @@ -283,8 +287,8 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API // on it. func newFlagSetWithGlobals() *pflag.FlagSet { fs := pflag.NewFlagSet("", pflag.ExitOnError) - // set the normalize func, similar to k8s.io/apiserver/pkg/util/flag/flags.go:InitFlags - fs.SetNormalizeFunc(flag.WordSepNormalizeFunc) + // set the normalize func, similar to k8s.io/component-base/cli//flags.go:InitFlags + fs.SetNormalizeFunc(cliflag.WordSepNormalizeFunc) // explicitly add flags from libs that register global flags options.AddGlobalFlags(fs) return fs @@ -296,7 +300,7 @@ func newFakeFlagSet(fs *pflag.FlagSet) *pflag.FlagSet { ret := pflag.NewFlagSet("", pflag.ExitOnError) ret.SetNormalizeFunc(fs.GetNormalizeFunc()) fs.VisitAll(func(f *pflag.Flag) { - ret.VarP(flag.NoOp{}, f.Name, f.Shorthand, f.Usage) + ret.VarP(cliflag.NoOp{}, f.Name, f.Shorthand, f.Usage) }) return ret } @@ -356,6 +360,7 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err } mounter := mount.New(s.ExperimentalMounterPath) + subpather := subpath.New(mounter) var pluginRunner = exec.New() var dockerClientConfig *dockershim.ClientConfig @@ -374,9 +379,9 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err DockerClientConfig: dockerClientConfig, KubeClient: nil, HeartbeatClient: nil, - CSIClient: nil, EventClient: nil, Mounter: mounter, + Subpather: subpather, OOMAdjuster: oom.NewOOMAdjuster(), OSInterface: kubecontainer.RealOS{}, VolumePlugins: ProbeVolumePlugins(), @@ -453,7 +458,7 @@ func makeEventRecorder(kubeDeps *kubelet.Dependencies, nodeName types.NodeName) func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan struct{}) (err error) { // Set global feature gates based on the value on the initial KubeletServer - err = utilfeature.DefaultFeatureGate.SetFromMap(s.KubeletConfiguration.FeatureGates) + err = utilfeature.DefaultMutableFeatureGate.SetFromMap(s.KubeletConfiguration.FeatureGates) if err != nil { return err } @@ -508,94 +513,50 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan return err } - if s.BootstrapKubeconfig != "" { - if err := bootstrap.LoadClientCert(s.KubeConfig, s.BootstrapKubeconfig, s.CertDirectory, nodeName); err != nil { - return err - } - } - // if in standalone mode, indicate as much by setting all clients to nil - if standaloneMode { + switch { + case standaloneMode: kubeDeps.KubeClient = nil - kubeDeps.DynamicKubeClient = nil kubeDeps.EventClient = nil kubeDeps.HeartbeatClient = nil klog.Warningf("standalone mode, no API client") - } else if kubeDeps.KubeClient == nil || kubeDeps.EventClient == nil || kubeDeps.HeartbeatClient == nil || kubeDeps.DynamicKubeClient == nil { - // initialize clients if not standalone mode and any of the clients are not provided - var kubeClient clientset.Interface - var eventClient v1core.EventsGetter - var heartbeatClient clientset.Interface - var dynamicKubeClient dynamic.Interface - clientConfig, err := createAPIServerClientConfig(s) - if err != nil { - return fmt.Errorf("invalid kubeconfig: %v", err) - } - - var clientCertificateManager certificate.Manager - if s.RotateCertificates && utilfeature.DefaultFeatureGate.Enabled(features.RotateKubeletClientCertificate) { - clientCertificateManager, err = kubeletcertificate.NewKubeletClientCertificateManager(s.CertDirectory, nodeName, clientConfig.CertData, clientConfig.KeyData, clientConfig.CertFile, clientConfig.KeyFile) - if err != nil { - return err - } - } - // we set exitAfter to five minutes because we use this client configuration to request new certs - if we are unable - // to request new certs, we will be unable to continue normal operation. Exiting the process allows a wrapper - // or the bootstrapping credentials to potentially lay down new initial config. - closeAllConns, err := kubeletcertificate.UpdateTransport(wait.NeverStop, clientConfig, clientCertificateManager, 5*time.Minute) + case kubeDeps.KubeClient == nil, kubeDeps.EventClient == nil, kubeDeps.HeartbeatClient == nil: + clientConfig, closeAllConns, err := buildKubeletClientConfig(s, nodeName) if err != nil { return err } + kubeDeps.OnHeartbeatFailure = closeAllConns - kubeClient, err = clientset.NewForConfig(clientConfig) + kubeDeps.KubeClient, err = clientset.NewForConfig(clientConfig) if err != nil { - klog.Warningf("New kubeClient from clientConfig error: %v", err) - } else if kubeClient.CertificatesV1beta1() != nil && clientCertificateManager != nil { - klog.V(2).Info("Starting client certificate rotation.") - clientCertificateManager.SetCertificateSigningRequestClient(kubeClient.CertificatesV1beta1().CertificateSigningRequests()) - clientCertificateManager.Start() - } - dynamicKubeClient, err = dynamic.NewForConfig(clientConfig) - if err != nil { - klog.Warningf("Failed to initialize dynamic KubeClient: %v", err) + return fmt.Errorf("failed to initialize kubelet client: %v", err) } // make a separate client for events eventClientConfig := *clientConfig eventClientConfig.QPS = float32(s.EventRecordQPS) eventClientConfig.Burst = int(s.EventBurst) - eventClient, err = v1core.NewForConfig(&eventClientConfig) + kubeDeps.EventClient, err = v1core.NewForConfig(&eventClientConfig) if err != nil { - klog.Warningf("Failed to create API Server client for Events: %v", err) + return fmt.Errorf("failed to initialize kubelet event client: %v", err) } // make a separate client for heartbeat with throttling disabled and a timeout attached heartbeatClientConfig := *clientConfig heartbeatClientConfig.Timeout = s.KubeletConfiguration.NodeStatusUpdateFrequency.Duration + // if the NodeLease feature is enabled, the timeout is the minimum of the lease duration and status update frequency + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + leaseTimeout := time.Duration(s.KubeletConfiguration.NodeLeaseDurationSeconds) * time.Second + if heartbeatClientConfig.Timeout > leaseTimeout { + heartbeatClientConfig.Timeout = leaseTimeout + } + } heartbeatClientConfig.QPS = float32(-1) - heartbeatClient, err = clientset.NewForConfig(&heartbeatClientConfig) + kubeDeps.HeartbeatClient, err = clientset.NewForConfig(&heartbeatClientConfig) if err != nil { - klog.Warningf("Failed to create API Server client for heartbeat: %v", err) + return fmt.Errorf("failed to initialize kubelet heartbeat client: %v", err) } - - // csiClient works with CRDs that support json only - clientConfig.ContentType = "application/json" - csiClient, err := csiclientset.NewForConfig(clientConfig) - if err != nil { - klog.Warningf("Failed to create CSI API client: %v", err) - } - - kubeDeps.KubeClient = kubeClient - kubeDeps.DynamicKubeClient = dynamicKubeClient - if heartbeatClient != nil { - kubeDeps.HeartbeatClient = heartbeatClient - kubeDeps.OnHeartbeatFailure = closeAllConns - } - if eventClient != nil { - kubeDeps.EventClient = eventClient - } - kubeDeps.CSIClient = csiClient } // If the kubelet config controller is available, and dynamic config is enabled, start the config and status sync loops @@ -627,7 +588,7 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan if kubeDeps.ContainerManager == nil { if s.CgroupsPerQOS && s.CgroupRoot == "" { - klog.Infof("--cgroups-per-qos enabled, but --cgroup-root was not specified. defaulting to /") + klog.Info("--cgroups-per-qos enabled, but --cgroup-root was not specified. defaulting to /") s.CgroupRoot = "/" } kubeReserved, err := parseResourceList(s.KubeReserved) @@ -735,6 +696,118 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan return nil } +// buildKubeletClientConfig constructs the appropriate client config for the kubelet depending on whether +// bootstrapping is enabled or client certificate rotation is enabled. +func buildKubeletClientConfig(s *options.KubeletServer, nodeName types.NodeName) (*restclient.Config, func(), error) { + if s.RotateCertificates && utilfeature.DefaultFeatureGate.Enabled(features.RotateKubeletClientCertificate) { + // Rules for client rotation and the handling of kube config files: + // + // 1. If the client provides only a kubeconfig file, we must use that as the initial client + // kubeadm needs the initial data in the kubeconfig to be placed into the cert store + // 2. If the client provides only an initial bootstrap kubeconfig file, we must create a + // kubeconfig file at the target location that points to the cert store, but until + // the file is present the client config will have no certs + // 3. If the client provides both and the kubeconfig is valid, we must ignore the bootstrap + // kubeconfig. + // 4. If the client provides both and the kubeconfig is expired or otherwise invalid, we must + // replace the kubeconfig with a new file that points to the cert dir + // + // The desired configuration for bootstrapping is to use a bootstrap kubeconfig and to have + // the kubeconfig file be managed by this process. For backwards compatibility with kubeadm, + // which provides a high powered kubeconfig on the master with cert/key data, we must + // bootstrap the cert manager with the contents of the initial client config. + + klog.Infof("Client rotation is on, will bootstrap in background") + certConfig, clientConfig, err := bootstrap.LoadClientConfig(s.KubeConfig, s.BootstrapKubeconfig, s.CertDirectory) + if err != nil { + return nil, nil, err + } + + clientCertificateManager, err := buildClientCertificateManager(certConfig, clientConfig, s.CertDirectory, nodeName) + if err != nil { + return nil, nil, err + } + + // the rotating transport will use the cert from the cert manager instead of these files + transportConfig := restclient.AnonymousClientConfig(clientConfig) + kubeClientConfigOverrides(s, transportConfig) + + // we set exitAfter to five minutes because we use this client configuration to request new certs - if we are unable + // to request new certs, we will be unable to continue normal operation. Exiting the process allows a wrapper + // or the bootstrapping credentials to potentially lay down new initial config. + closeAllConns, err := kubeletcertificate.UpdateTransport(wait.NeverStop, transportConfig, clientCertificateManager, 5*time.Minute) + if err != nil { + return nil, nil, err + } + + klog.V(2).Info("Starting client certificate rotation.") + clientCertificateManager.Start() + + return transportConfig, closeAllConns, nil + } + + if len(s.BootstrapKubeconfig) > 0 { + if err := bootstrap.LoadClientCert(s.KubeConfig, s.BootstrapKubeconfig, s.CertDirectory, nodeName); err != nil { + return nil, nil, err + } + } + + clientConfig, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( + &clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig}, + &clientcmd.ConfigOverrides{}, + ).ClientConfig() + if err != nil { + return nil, nil, fmt.Errorf("invalid kubeconfig: %v", err) + } + + kubeClientConfigOverrides(s, clientConfig) + + return clientConfig, nil, nil +} + +// buildClientCertificateManager creates a certificate manager that will use certConfig to request a client certificate +// if no certificate is available, or the most recent clientConfig (which is assumed to point to the cert that the manager will +// write out). +func buildClientCertificateManager(certConfig, clientConfig *restclient.Config, certDir string, nodeName types.NodeName) (certificate.Manager, error) { + newClientFn := func(current *tls.Certificate) (certificatesclient.CertificateSigningRequestInterface, error) { + // If we have a valid certificate, use that to fetch CSRs. Otherwise use the bootstrap + // credentials. In the future it would be desirable to change the behavior of bootstrap + // to always fall back to the external bootstrap credentials when such credentials are + // provided by a fundamental trust system like cloud VM identity or an HSM module. + config := certConfig + if current != nil { + config = clientConfig + } + client, err := clientset.NewForConfig(config) + if err != nil { + return nil, err + } + return client.CertificatesV1beta1().CertificateSigningRequests(), nil + } + + return kubeletcertificate.NewKubeletClientCertificateManager( + certDir, + nodeName, + + // this preserves backwards compatibility with kubeadm which passes + // a high powered certificate to the kubelet as --kubeconfig and expects + // it to be rotated out immediately + clientConfig.CertData, + clientConfig.KeyData, + + clientConfig.CertFile, + clientConfig.KeyFile, + newClientFn, + ) +} + +func kubeClientConfigOverrides(s *options.KubeletServer, clientConfig *restclient.Config) { + clientConfig.ContentType = s.ContentType + // Override kubeconfig qps/burst settings from flags + clientConfig.QPS = float32(s.KubeAPIQPS) + clientConfig.Burst = int(s.KubeAPIBurst) +} + // getNodeName returns the node name according to the cloud provider // if cloud provider is specified. Otherwise, returns the hostname of the node. func getNodeName(hostname string) (types.NodeName, error) { @@ -766,7 +839,7 @@ func InitializeTLS(kf *options.KubeletFlags, kc *kubeletconfiginternal.KubeletCo return nil, err } - if err := certutil.WriteKey(kc.TLSPrivateKeyFile, key); err != nil { + if err := keyutil.WriteKey(kc.TLSPrivateKeyFile, key); err != nil { return nil, err } @@ -774,12 +847,12 @@ func InitializeTLS(kf *options.KubeletFlags, kc *kubeletconfiginternal.KubeletCo } } - tlsCipherSuites, err := flag.TLSCipherSuites(kc.TLSCipherSuites) + tlsCipherSuites, err := cliflag.TLSCipherSuites(kc.TLSCipherSuites) if err != nil { return nil, err } - minTLSVersion, err := flag.TLSVersion(kc.TLSMinVersion) + minTLSVersion, err := cliflag.TLSVersion(kc.TLSMinVersion) if err != nil { return nil, err } @@ -807,39 +880,6 @@ func InitializeTLS(kf *options.KubeletFlags, kc *kubeletconfiginternal.KubeletCo return tlsOptions, nil } -func kubeconfigClientConfig(s *options.KubeletServer) (*restclient.Config, error) { - return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( - &clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig}, - &clientcmd.ConfigOverrides{}, - ).ClientConfig() -} - -// createClientConfig creates a client configuration from the command line arguments. -// If --kubeconfig is explicitly set, it will be used. -func createClientConfig(s *options.KubeletServer) (*restclient.Config, error) { - if s.BootstrapKubeconfig != "" || len(s.KubeConfig) > 0 { - return kubeconfigClientConfig(s) - } else { - return nil, fmt.Errorf("createClientConfig called in standalone mode") - } -} - -// createAPIServerClientConfig generates a client.Config from command line flags -// via createClientConfig and then injects chaos into the configuration via addChaosToClientConfig. -func createAPIServerClientConfig(s *options.KubeletServer) (*restclient.Config, error) { - clientConfig, err := createClientConfig(s) - if err != nil { - return nil, err - } - - clientConfig.ContentType = s.ContentType - // Override kubeconfig qps/burst settings from flags - clientConfig.QPS = float32(s.KubeAPIQPS) - clientConfig.Burst = int(s.KubeAPIBurst) - - return clientConfig, nil -} - // RunKubelet is responsible for setting up and running a kubelet. It is used in three different applications: // 1 Integration tests // 2 Kubelet binary @@ -892,7 +932,7 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie kubeDeps.OSInterface = kubecontainer.RealOS{} } - k, err := CreateAndInitKubelet(&kubeServer.KubeletConfiguration, + k, err := createAndInitKubelet(&kubeServer.KubeletConfiguration, kubeDeps, &kubeServer.ContainerRuntimeOptions, kubeServer.ContainerRuntime, @@ -900,6 +940,7 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie kubeServer.HostnameOverride, kubeServer.NodeIP, kubeServer.ProviderID, + kubeServer.CloudProvider, kubeServer.CertDirectory, kubeServer.RootDirectory, kubeServer.RegisterNode, @@ -940,10 +981,10 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie if _, err := k.RunOnce(podCfg.Updates()); err != nil { return fmt.Errorf("runonce failed: %v", err) } - klog.Infof("Started kubelet as runonce") + klog.Info("Started kubelet as runonce") } else { startKubelet(k, podCfg, &kubeServer.KubeletConfiguration, kubeDeps, kubeServer.EnableServer) - klog.Infof("Started kubelet") + klog.Info("Started kubelet") } return nil } @@ -964,7 +1005,7 @@ func startKubelet(k kubelet.Bootstrap, podCfg *config.PodConfig, kubeCfg *kubele } } -func CreateAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, +func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, kubeDeps *kubelet.Dependencies, crOptions *config.ContainerRuntimeOptions, containerRuntime string, @@ -972,6 +1013,7 @@ func CreateAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, hostnameOverride string, nodeIP string, providerID string, + cloudProvider, certDirectory string, rootDirectory string, registerNode bool, @@ -1005,6 +1047,7 @@ func CreateAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, hostnameOverride, nodeIP, providerID, + cloudProvider, certDirectory, rootDirectory, registerNode, @@ -1047,16 +1090,18 @@ func parseResourceList(m map[string]string) (v1.ResourceList, error) { rl := make(v1.ResourceList) for k, v := range m { switch v1.ResourceName(k) { - // CPU, memory and local storage resources are supported. - case v1.ResourceCPU, v1.ResourceMemory, v1.ResourceEphemeralStorage: - q, err := resource.ParseQuantity(v) - if err != nil { - return nil, err + // CPU, memory, local storage, and PID resources are supported. + case v1.ResourceCPU, v1.ResourceMemory, v1.ResourceEphemeralStorage, pidlimit.PIDs: + if v1.ResourceName(k) != pidlimit.PIDs { + q, err := resource.ParseQuantity(v) + if err != nil { + return nil, err + } + if q.Sign() == -1 { + return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v) + } + rl[v1.ResourceName(k)] = q } - if q.Sign() == -1 { - return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v) - } - rl[v1.ResourceName(k)] = q default: return nil, fmt.Errorf("cannot reserve %q resource", k) } diff --git a/vendor/k8s.io/kubernetes/deps.sh b/vendor/k8s.io/kubernetes/deps.sh index ad246d06fb1..264ea11f000 100755 --- a/vendor/k8s.io/kubernetes/deps.sh +++ b/vendor/k8s.io/kubernetes/deps.sh @@ -9,11 +9,13 @@ find -depth -name testing -type d -exec git rm -rf {} \; cat << EOF | sed -E 's!^([^/]+/[^/]+/[^/]+)(/[^ ]+) (.*)!\1 \3!g' | sed -E 's!^((google|[ckv])[^/]+/[^/]+)(/[^ ]+) (.*)!\1 \4!g' > vendor.conf package=k8s.io/kubernetes package=k8s.io/kubernetes/cmd/hyperkube -$(cat ./Godeps/Godeps.json | jq -r '(.Deps | .[] | "\(.ImportPath) \(.Comment) \(.Rev)\n")' | sed 's/null//' | awk '{print $1 " " $2}' | grep -Ev 'github.com/opencontainers/runc|bitbucket.org/ww/goautoneg|github.com/google/cadvisor' | sort -k2,1 | uniq -f1) -bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git -github.com/ibuildthecloud/kvsql c649f12fe5250718e4e024b8b40e7de796ab095e -github.com/google/cadvisor 87e237ff35b9d752ba58860a06e0ebe57816cbb7 https://github.com/ibuildthecloud/cadvisor.git -github.com/opencontainers/runc 96ec2177ae841256168fcf76954f7177af9446eb +$(cat ./Godeps/Godeps.json | jq -r '(.Deps | .[] | "\(.ImportPath) \(.Comment) \(.Rev)\n")' | sed 's/null//' | awk '{print $1 " " $2}' | grep -Ev 'github.com/opencontainers/selinux|github.com/opencontainers/runc|bitbucket.org/ww/goautoneg|github.com/google/cadvisor' | sort -k2,1 | uniq -f1) +bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git +github.com/ibuildthecloud/kvsql 0e798b1475327aadf3b8da5d2d1f99bb93dfd667 +github.com/google/cadvisor v0.33.1-k3s.1 https://github.com/ibuildthecloud/cadvisor.git +github.com/opencontainers/runc 69ae5da6afdcaaf38285a10b36f362e41cb298d6 +github.com/checkpoint-restore/go-criu v3.11 +github.com/opencontainers/selinux v1.2 EOF trash diff --git a/vendor/k8s.io/kubernetes/openapi.json b/vendor/k8s.io/kubernetes/openapi.json index 78f6cffa0b2..446a51083b7 100644 --- a/vendor/k8s.io/kubernetes/openapi.json +++ b/vendor/k8s.io/kubernetes/openapi.json @@ -1,81144 +1 @@ -{ - "swagger": "2.0", - "info": { - "title": "Kubernetes", - "version": "v0.0.0" - }, - "paths": { - "/api/": { - "get": { - "description": "get available API versions", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core" - ], - "operationId": "getCoreAPIVersions", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/api/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "getCoreV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/api/v1/componentstatuses": { - "get": { - "description": "list objects of kind ComponentStatus", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ComponentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentStatusList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ComponentStatus", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/componentstatuses/{name}": { - "get": { - "description": "read the specified ComponentStatus", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1ComponentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentStatus" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ComponentStatus", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ComponentStatus", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/configmaps": { - "get": { - "description": "list or watch objects of kind ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ConfigMapForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/endpoints": { - "get": { - "description": "list or watch objects of kind Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1EndpointsForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointsList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/events": { - "get": { - "description": "list or watch objects of kind Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1EventForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EventList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/limitranges": { - "get": { - "description": "list or watch objects of kind LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1LimitRangeForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/namespaces": { - "get": { - "description": "list or watch objects of kind Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1Namespace", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "post": { - "description": "create a Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/bindings": { - "post": { - "description": "create a Binding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Binding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/configmaps": { - "get": { - "description": "list or watch objects of kind ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "post": { - "description": "create a ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/configmaps/{name}": { - "get": { - "description": "read the specified ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "delete": { - "description": "delete a ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ConfigMap", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ConfigMap", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/endpoints": { - "get": { - "description": "list or watch objects of kind Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointsList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "post": { - "description": "create Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/endpoints/{name}": { - "get": { - "description": "read the specified Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "delete": { - "description": "delete Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Endpoints", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Endpoints", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/events": { - "get": { - "description": "list or watch objects of kind Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EventList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "post": { - "description": "create an Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/events/{name}": { - "get": { - "description": "read the specified Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "delete": { - "description": "delete an Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Event", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Event", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/limitranges": { - "get": { - "description": "list or watch objects of kind LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "post": { - "description": "create a LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/limitranges/{name}": { - "get": { - "description": "read the specified LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "put": { - "description": "replace the specified LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "delete": { - "description": "delete a LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified LimitRange", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the LimitRange", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims": { - "get": { - "description": "list or watch objects of kind PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "post": { - "description": "create a PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}": { - "get": { - "description": "read the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "put": { - "description": "replace the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "delete": { - "description": "delete a PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified PersistentVolumeClaim", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status": { - "get": { - "description": "read status of the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPersistentVolumeClaimStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPersistentVolumeClaimStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified PersistentVolumeClaim", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPersistentVolumeClaimStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods": { - "get": { - "description": "list or watch objects of kind Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "post": { - "description": "create a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}": { - "get": { - "description": "read the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "delete": { - "description": "delete a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Pod", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/attach": { - "get": { - "description": "connect GET requests to attach of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodAttach", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodAttachOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to attach of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodAttach", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodAttachOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The container in which to execute the command. Defaults to only container if there is only one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodAttachOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.", - "name": "stderr", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.", - "name": "stdin", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.", - "name": "stdout", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.", - "name": "tty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/binding": { - "post": { - "description": "create binding of a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPodBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Binding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Binding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/eviction": { - "post": { - "description": "create eviction of a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPodEviction", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.Eviction" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.Eviction" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.Eviction" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.Eviction" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "Eviction", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Eviction", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/exec": { - "get": { - "description": "connect GET requests to exec of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodExec", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodExecOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to exec of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodExec", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodExecOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "Command is the remote command to execute. argv array. Not executed within a shell.", - "name": "command", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Container in which to execute the command. Defaults to only container if there is only one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodExecOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard error stream of the pod for this call. Defaults to true.", - "name": "stderr", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard input stream of the pod for this call. Defaults to false.", - "name": "stdin", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard output stream of the pod for this call. Defaults to true.", - "name": "stdout", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.", - "name": "tty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/log": { - "get": { - "description": "read log of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "text/plain", - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodLog", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The container for which to stream logs. Defaults to only container if there is one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Follow the log stream of the pod. Defaults to false.", - "name": "follow", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", - "name": "limitBytes", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Return previous terminated container logs. Defaults to false.", - "name": "previous", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", - "name": "sinceSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", - "name": "tailLines", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", - "name": "timestamps", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/portforward": { - "get": { - "description": "connect GET requests to portforward of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodPortforward", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodPortForwardOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to portforward of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodPortforward", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodPortForwardOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodPortForwardOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "integer", - "description": "List of ports to forward Required when using WebSockets", - "name": "ports", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to pod.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to pod.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/status": { - "get": { - "description": "read status of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPodStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Pod", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPodStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/podtemplates": { - "get": { - "description": "list or watch objects of kind PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "post": { - "description": "create a PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/podtemplates/{name}": { - "get": { - "description": "read the specified PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "put": { - "description": "replace the specified PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "delete": { - "description": "delete a PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified PodTemplate", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodTemplate", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers": { - "get": { - "description": "list or watch objects of kind ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "post": { - "description": "create a ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}": { - "get": { - "description": "read the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "delete": { - "description": "delete a ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ReplicationController", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale": { - "get": { - "description": "read scale of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedReplicationControllerScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "put": { - "description": "replace scale of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedReplicationControllerScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "patch": { - "description": "partially update scale of the specified ReplicationController", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedReplicationControllerScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status": { - "get": { - "description": "read status of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedReplicationControllerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedReplicationControllerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified ReplicationController", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedReplicationControllerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas": { - "get": { - "description": "list or watch objects of kind ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "post": { - "description": "create a ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas/{name}": { - "get": { - "description": "read the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "delete": { - "description": "delete a ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ResourceQuota", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas/{name}/status": { - "get": { - "description": "read status of the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedResourceQuotaStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedResourceQuotaStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified ResourceQuota", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedResourceQuotaStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/secrets": { - "get": { - "description": "list or watch objects of kind Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.SecretList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "post": { - "description": "create a Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/secrets/{name}": { - "get": { - "description": "read the specified Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "delete": { - "description": "delete a Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Secret", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Secret", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/serviceaccounts": { - "get": { - "description": "list or watch objects of kind ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "post": { - "description": "create a ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/serviceaccounts/{name}": { - "get": { - "description": "read the specified ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "delete": { - "description": "delete a ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ServiceAccount", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceAccount", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services": { - "get": { - "description": "list or watch objects of kind Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "post": { - "description": "create a Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}": { - "get": { - "description": "read the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedService", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "delete": { - "description": "delete a Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Service", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/status": { - "get": { - "description": "read status of the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedServiceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Service", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}": { - "get": { - "description": "read the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1Namespace", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "delete": { - "description": "delete a Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Namespace", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}/finalize": { - "put": { - "description": "replace finalize of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespaceFinalize", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}/status": { - "get": { - "description": "read status of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespaceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespaceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Namespace", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespaceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes": { - "get": { - "description": "list or watch objects of kind Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1Node", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "post": { - "description": "create a Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNode", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}": { - "get": { - "description": "read the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1Node", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "delete": { - "description": "delete a Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Node", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NodeProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to node.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "put": { - "description": "connect PUT requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "post": { - "description": "connect POST requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "NodeProxyOptions", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NodeProxyOptions", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to node.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/status": { - "get": { - "description": "read status of the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NodeStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NodeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Node", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NodeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumeclaims": { - "get": { - "description": "list or watch objects of kind PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PersistentVolumeClaimForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes": { - "get": { - "description": "list or watch objects of kind PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "post": { - "description": "create a PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionPersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes/{name}": { - "get": { - "description": "read the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1PersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "put": { - "description": "replace the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "delete": { - "description": "delete a PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified PersistentVolume", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes/{name}/status": { - "get": { - "description": "read status of the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1PersistentVolumeStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1PersistentVolumeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified PersistentVolume", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1PersistentVolumeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/pods": { - "get": { - "description": "list or watch objects of kind Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PodForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/podtemplates": { - "get": { - "description": "list or watch objects of kind PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PodTemplateForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/replicationcontrollers": { - "get": { - "description": "list or watch objects of kind ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ReplicationControllerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/resourcequotas": { - "get": { - "description": "list or watch objects of kind ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ResourceQuotaForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/secrets": { - "get": { - "description": "list or watch objects of kind Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1SecretForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.SecretList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/serviceaccounts": { - "get": { - "description": "list or watch objects of kind ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ServiceAccountForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/services": { - "get": { - "description": "list or watch objects of kind Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ServiceForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/configmaps": { - "get": { - "description": "watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ConfigMapListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/endpoints": { - "get": { - "description": "watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1EndpointsListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/events": { - "get": { - "description": "watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1EventListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/limitranges": { - "get": { - "description": "watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1LimitRangeListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces": { - "get": { - "description": "watch individual changes to a list of Namespace. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespaceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/configmaps": { - "get": { - "description": "watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedConfigMapList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/configmaps/{name}": { - "get": { - "description": "watch changes to an object of kind ConfigMap. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedConfigMap", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ConfigMap", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/endpoints": { - "get": { - "description": "watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEndpointsList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/endpoints/{name}": { - "get": { - "description": "watch changes to an object of kind Endpoints. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEndpoints", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Endpoints", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/events": { - "get": { - "description": "watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEventList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/events/{name}": { - "get": { - "description": "watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEvent", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Event", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/limitranges": { - "get": { - "description": "watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedLimitRangeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/limitranges/{name}": { - "get": { - "description": "watch changes to an object of kind LimitRange. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedLimitRange", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the LimitRange", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims": { - "get": { - "description": "watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPersistentVolumeClaimList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}": { - "get": { - "description": "watch changes to an object of kind PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPersistentVolumeClaim", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/pods": { - "get": { - "description": "watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/pods/{name}": { - "get": { - "description": "watch changes to an object of kind Pod. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/podtemplates": { - "get": { - "description": "watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodTemplateList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/podtemplates/{name}": { - "get": { - "description": "watch changes to an object of kind PodTemplate. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodTemplate", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodTemplate", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/replicationcontrollers": { - "get": { - "description": "watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedReplicationControllerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicationController. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedReplicationController", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/resourcequotas": { - "get": { - "description": "watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedResourceQuotaList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}": { - "get": { - "description": "watch changes to an object of kind ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedResourceQuota", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/secrets": { - "get": { - "description": "watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedSecretList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/secrets/{name}": { - "get": { - "description": "watch changes to an object of kind Secret. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedSecret", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Secret", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/serviceaccounts": { - "get": { - "description": "watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceAccountList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}": { - "get": { - "description": "watch changes to an object of kind ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceAccount", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceAccount", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/services": { - "get": { - "description": "watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/services/{name}": { - "get": { - "description": "watch changes to an object of kind Service. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{name}": { - "get": { - "description": "watch changes to an object of kind Namespace. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1Namespace", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Namespace", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/nodes": { - "get": { - "description": "watch individual changes to a list of Node. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NodeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/nodes/{name}": { - "get": { - "description": "watch changes to an object of kind Node. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1Node", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Node", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumeclaims": { - "get": { - "description": "watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolumeClaimListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumes": { - "get": { - "description": "watch individual changes to a list of PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolumeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumes/{name}": { - "get": { - "description": "watch changes to an object of kind PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolume", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/pods": { - "get": { - "description": "watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PodListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Pod", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/podtemplates": { - "get": { - "description": "watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PodTemplateListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/replicationcontrollers": { - "get": { - "description": "watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ReplicationControllerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/resourcequotas": { - "get": { - "description": "watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ResourceQuotaListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/secrets": { - "get": { - "description": "watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1SecretListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Secret", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/serviceaccounts": { - "get": { - "description": "watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ServiceAccountListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/services": { - "get": { - "description": "watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ServiceListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Service", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/": { - "get": { - "description": "get available API versions", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apis" - ], - "operationId": "getAPIVersions", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration" - ], - "operationId": "getAdmissionregistrationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "getAdmissionregistrationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations": { - "get": { - "description": "list or watch objects of kind MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "listAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "post": { - "description": "create a MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "createAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "deleteAdmissionregistrationV1beta1CollectionMutatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name}": { - "get": { - "description": "read the specified MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "readAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "replaceAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a MutatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "deleteAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified MutatingWebhookConfiguration", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "patchAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the MutatingWebhookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations": { - "get": { - "description": "list or watch objects of kind ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "listAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "post": { - "description": "create a ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "createAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "deleteAdmissionregistrationV1beta1CollectionValidatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name}": { - "get": { - "description": "read the specified ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "readAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "replaceAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a ValidatingWebhookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "deleteAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified ValidatingWebhookConfiguration", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "patchAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ValidatingWebhookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations": { - "get": { - "description": "watch individual changes to a list of MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "watchAdmissionregistrationV1beta1MutatingWebhookConfigurationList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name}": { - "get": { - "description": "watch changes to an object of kind MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "watchAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the MutatingWebhookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations": { - "get": { - "description": "watch individual changes to a list of ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "watchAdmissionregistrationV1beta1ValidatingWebhookConfigurationList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name}": { - "get": { - "description": "watch changes to an object of kind ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1beta1" - ], - "operationId": "watchAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ValidatingWebhookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiextensions.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions" - ], - "operationId": "getApiextensionsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiextensions.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "getApiextensionsV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions": { - "get": { - "description": "list or watch objects of kind CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "listApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "post": { - "description": "create a CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "createApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "deleteApiextensionsV1beta1CollectionCustomResourceDefinition", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}": { - "get": { - "description": "read the specified CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "readApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "replaceApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "deleteApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified CustomResourceDefinition", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "patchApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CustomResourceDefinition", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status": { - "get": { - "description": "read status of the specified CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "readApiextensionsV1beta1CustomResourceDefinitionStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified CustomResourceDefinition", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "replaceApiextensionsV1beta1CustomResourceDefinitionStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified CustomResourceDefinition", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "patchApiextensionsV1beta1CustomResourceDefinitionStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CustomResourceDefinition", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions": { - "get": { - "description": "watch individual changes to a list of CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "watchApiextensionsV1beta1CustomResourceDefinitionList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions/{name}": { - "get": { - "description": "watch changes to an object of kind CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiextensions_v1beta1" - ], - "operationId": "watchApiextensionsV1beta1CustomResourceDefinition", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CustomResourceDefinition", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration" - ], - "operationId": "getApiregistrationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiregistration.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "getApiregistrationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiregistration.k8s.io/v1/apiservices": { - "get": { - "description": "list or watch objects of kind APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "listApiregistrationV1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "post": { - "description": "create an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "createApiregistrationV1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "deleteApiregistrationV1CollectionAPIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1/apiservices/{name}": { - "get": { - "description": "read the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "readApiregistrationV1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "put": { - "description": "replace the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "replaceApiregistrationV1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "delete": { - "description": "delete an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "deleteApiregistrationV1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified APIService", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "patchApiregistrationV1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1/apiservices/{name}/status": { - "get": { - "description": "read status of the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "readApiregistrationV1APIServiceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "replaceApiregistrationV1APIServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified APIService", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "patchApiregistrationV1APIServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1/watch/apiservices": { - "get": { - "description": "watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "watchApiregistrationV1APIServiceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1/watch/apiservices/{name}": { - "get": { - "description": "watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1" - ], - "operationId": "watchApiregistrationV1APIService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "getApiregistrationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices": { - "get": { - "description": "list or watch objects of kind APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "listApiregistrationV1beta1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "post": { - "description": "create an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "createApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "deleteApiregistrationV1beta1CollectionAPIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}": { - "get": { - "description": "read the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "readApiregistrationV1beta1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "replaceApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "deleteApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified APIService", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "patchApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status": { - "get": { - "description": "read status of the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "readApiregistrationV1beta1APIServiceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "replaceApiregistrationV1beta1APIServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified APIService", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "patchApiregistrationV1beta1APIServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/watch/apiservices": { - "get": { - "description": "watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "watchApiregistrationV1beta1APIServiceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}": { - "get": { - "description": "watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "watchApiregistrationV1beta1APIService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps" - ], - "operationId": "getAppsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "getAppsV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1ControllerRevisionForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1DaemonSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "post": { - "description": "create a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "createAppsV1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1CollectionNamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "read the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "delete": { - "description": "delete a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ControllerRevision", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "post": { - "description": "create a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "createAppsV1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1CollectionNamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "read the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "put": { - "description": "replace the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "delete": { - "description": "delete a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status": { - "get": { - "description": "read status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedDaemonSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "createAppsV1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedDeploymentScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "put": { - "description": "replace scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "patch": { - "description": "partially update scale of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "post": { - "description": "create a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "createAppsV1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1CollectionNamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "read the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "delete": { - "description": "delete a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale": { - "get": { - "description": "read scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedReplicaSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "put": { - "description": "replace scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "patch": { - "description": "partially update scale of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status": { - "get": { - "description": "read status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedReplicaSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "post": { - "description": "create a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "createAppsV1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1CollectionNamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "read the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "put": { - "description": "replace the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "delete": { - "description": "delete a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "deleteAppsV1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale": { - "get": { - "description": "read scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedStatefulSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "put": { - "description": "replace scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "patch": { - "description": "partially update scale of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status": { - "get": { - "description": "read status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "readAppsV1NamespacedStatefulSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "replaceAppsV1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "patchAppsV1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1ReplicaSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "listAppsV1StatefulSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1ControllerRevisionListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1DaemonSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedControllerRevisionList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedControllerRevision", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedDaemonSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedDaemonSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedReplicaSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedReplicaSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedStatefulSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1NamespacedStatefulSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1ReplicaSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1/watch/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1" - ], - "operationId": "watchAppsV1StatefulSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "getAppsV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1beta1/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1ControllerRevisionForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "post": { - "description": "create a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "read the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified ControllerRevision", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback": { - "post": { - "description": "create rollback of a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedDeploymentRollback", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DeploymentRollback", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DeploymentRollback", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedDeploymentScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "put": { - "description": "replace scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update scale of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "post": { - "description": "create a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "read the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale": { - "get": { - "description": "read scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedStatefulSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "put": { - "description": "replace scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update scale of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status": { - "get": { - "description": "read status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedStatefulSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1StatefulSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1ControllerRevisionListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedControllerRevisionList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedControllerRevision", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedStatefulSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedStatefulSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1StatefulSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "getAppsV1beta2APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1beta2/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2ControllerRevisionForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2DaemonSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "post": { - "description": "create a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "createAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete collection of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2CollectionNamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "read the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "put": { - "description": "replace the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update the specified ControllerRevision", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "post": { - "description": "create a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "createAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete collection of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2CollectionNamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "read the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status": { - "get": { - "description": "read status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedDaemonSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update status of the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "createAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedDeploymentScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "put": { - "description": "replace scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update scale of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "post": { - "description": "create a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "createAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete collection of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2CollectionNamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "read the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale": { - "get": { - "description": "read scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedReplicaSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "put": { - "description": "replace scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update scale of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status": { - "get": { - "description": "read status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedReplicaSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update status of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "post": { - "description": "create a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "createAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete collection of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2CollectionNamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "read the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "delete": { - "description": "delete a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "deleteAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale": { - "get": { - "description": "read scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedStatefulSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "put": { - "description": "replace scale of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update scale of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedStatefulSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status": { - "get": { - "description": "read status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "readAppsV1beta2NamespacedStatefulSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "put": { - "description": "replace status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "replaceAppsV1beta2NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "patch": { - "description": "partially update status of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "patchAppsV1beta2NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2ReplicaSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "listAppsV1beta2StatefulSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2ControllerRevisionListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2DaemonSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedControllerRevisionList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedControllerRevision", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedDaemonSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedDaemonSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedReplicaSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedReplicaSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedStatefulSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2NamespacedStatefulSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2ReplicaSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta2/watch/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta2" - ], - "operationId": "watchAppsV1beta2StatefulSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/authentication.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication" - ], - "operationId": "getAuthenticationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authentication.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1" - ], - "operationId": "getAuthenticationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authentication.k8s.io/v1/tokenreviews": { - "post": { - "description": "create a TokenReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1" - ], - "operationId": "createAuthenticationV1TokenReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReview" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReview" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authentication.k8s.io", - "kind": "TokenReview", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization" - ], - "operationId": "getAuthorizationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authorization.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "getAuthorizationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews": { - "post": { - "description": "create a LocalSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1NamespacedLocalSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "kind": "LocalSubjectAccessReview", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1/selfsubjectaccessreviews": { - "post": { - "description": "create a SelfSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1SelfSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "kind": "SelfSubjectAccessReview", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews": { - "post": { - "description": "create a SelfSubjectRulesReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1SelfSubjectRulesReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "kind": "SelfSubjectRulesReview", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1/subjectaccessreviews": { - "post": { - "description": "create a SubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1SubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "kind": "SubjectAccessReview", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling" - ], - "operationId": "getAutoscalingAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "getAutoscalingV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v1/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "listAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "post": { - "description": "create a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "createAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "read the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "readAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "put": { - "description": "replace the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "replaceAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "delete": { - "description": "delete a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "deleteAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "patchAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status": { - "get": { - "description": "read status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1NamespacedHorizontalPodAutoscalerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1NamespacedHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "getAutoscalingV2beta2APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v2beta2/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "listAutoscalingV2beta2HorizontalPodAutoscalerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "listAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "post": { - "description": "create a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "createAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "delete": { - "description": "delete collection of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "deleteAutoscalingV2beta2CollectionNamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "read the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "readAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "put": { - "description": "replace the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "delete": { - "description": "delete a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "deleteAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "patch": { - "description": "partially update the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "patchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status": { - "get": { - "description": "read status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "readAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "put": { - "description": "replace status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "patch": { - "description": "partially update status of the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "patchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/watch/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "watchAutoscalingV2beta2HorizontalPodAutoscalerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "watchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2beta2" - ], - "operationId": "watchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch" - ], - "operationId": "getBatchAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "getBatchV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v1/jobs": { - "get": { - "description": "list or watch objects of kind Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "listBatchV1JobForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.JobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs": { - "get": { - "description": "list or watch objects of kind Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "listBatchV1NamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.JobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "post": { - "description": "create a Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "createBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "deleteBatchV1CollectionNamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs/{name}": { - "get": { - "description": "read the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "readBatchV1NamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "replaceBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "delete": { - "description": "delete a Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "deleteBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Job", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "patchBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status": { - "get": { - "description": "read status of the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "readBatchV1NamespacedJobStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "replaceBatchV1NamespacedJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified Job", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "patchBatchV1NamespacedJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/jobs": { - "get": { - "description": "watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1JobListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/namespaces/{namespace}/jobs": { - "get": { - "description": "watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1NamespacedJobList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}": { - "get": { - "description": "watch changes to an object of kind Job. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1NamespacedJob", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "Job", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "getBatchV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v1beta1/cronjobs": { - "get": { - "description": "list or watch objects of kind CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "listBatchV1beta1CronJobForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/namespaces/{namespace}/cronjobs": { - "get": { - "description": "list or watch objects of kind CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "listBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "post": { - "description": "create a CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "createBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "deleteBatchV1beta1CollectionNamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "description": "read the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "readBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "replaceBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "deleteBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified CronJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "patchBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status": { - "get": { - "description": "read status of the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "readBatchV1beta1NamespacedCronJobStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "replaceBatchV1beta1NamespacedCronJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified CronJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "patchBatchV1beta1NamespacedCronJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/watch/cronjobs": { - "get": { - "description": "watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "watchBatchV1beta1CronJobListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs": { - "get": { - "description": "watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "watchBatchV1beta1NamespacedCronJobList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "description": "watch changes to an object of kind CronJob. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1beta1" - ], - "operationId": "watchBatchV1beta1NamespacedCronJob", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates" - ], - "operationId": "getCertificatesAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/certificates.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "getCertificatesV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests": { - "get": { - "description": "list or watch objects of kind CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "listCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "post": { - "description": "create a CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "createCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "deleteCertificatesV1beta1CollectionCertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}": { - "get": { - "description": "read the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "readCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "deleteCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified CertificateSigningRequest", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "patchCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval": { - "put": { - "description": "replace approval of the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequestApproval", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status": { - "get": { - "description": "read status of the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "readCertificatesV1beta1CertificateSigningRequestStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequestStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified CertificateSigningRequest", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "patchCertificatesV1beta1CertificateSigningRequestStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests": { - "get": { - "description": "watch individual changes to a list of CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "watchCertificatesV1beta1CertificateSigningRequestList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}": { - "get": { - "description": "watch changes to an object of kind CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "watchCertificatesV1beta1CertificateSigningRequest", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions" - ], - "operationId": "getExtensionsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/extensions/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "getExtensionsV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/extensions/v1beta1/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1DaemonSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/ingresses": { - "get": { - "description": "list or watch objects of kind Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1IngressForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "post": { - "description": "create a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "read the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status": { - "get": { - "description": "read status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDaemonSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback": { - "post": { - "description": "create rollback of a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDeploymentRollback", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DeploymentRollback", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If IncludeUninitialized is specified, the object may be returned without completing initialization.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DeploymentRollback", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeploymentScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "put": { - "description": "replace scale of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update scale of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeploymentScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses": { - "get": { - "description": "list or watch objects of kind Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "post": { - "description": "create an Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}": { - "get": { - "description": "read the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete an Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified Ingress", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status": { - "get": { - "description": "read status of the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedIngressStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedIngressStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified Ingress", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedIngressStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "post": { - "description": "create a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "read the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified NetworkPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "post": { - "description": "create a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "read the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale": { - "get": { - "description": "read scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicaSetScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "put": { - "description": "replace scale of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update scale of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicaSetScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status": { - "get": { - "description": "read status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicaSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale": { - "get": { - "description": "read scale of the specified ReplicationControllerDummy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicationControllerDummyScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "put": { - "description": "replace scale of the specified ReplicationControllerDummy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicationControllerDummyScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update scale of the specified ReplicationControllerDummy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicationControllerDummyScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NetworkPolicyForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/podsecuritypolicies": { - "get": { - "description": "list or watch objects of kind PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "post": { - "description": "create a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionPodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/podsecuritypolicies/{name}": { - "get": { - "description": "read the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified PodSecurityPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1ReplicaSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1DaemonSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/ingresses": { - "get": { - "description": "watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1IngressListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDaemonSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDaemonSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses": { - "get": { - "description": "watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedIngressList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}": { - "get": { - "description": "watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedIngress", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedNetworkPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedNetworkPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedReplicaSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedReplicaSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NetworkPolicyListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/podsecuritypolicies": { - "get": { - "description": "watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1PodSecurityPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}": { - "get": { - "description": "watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1PodSecurityPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1ReplicaSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking" - ], - "operationId": "getNetworkingAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/networking.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "getNetworkingV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "listNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "post": { - "description": "create a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "createNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "deleteNetworkingV1CollectionNamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "read the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "readNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "put": { - "description": "replace the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "replaceNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "delete": { - "description": "delete a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "deleteNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified NetworkPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "patchNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "listNetworkingV1NetworkPolicyForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NamespacedNetworkPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NamespacedNetworkPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NetworkPolicyListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy" - ], - "operationId": "getPolicyAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/policy/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "getPolicyV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets": { - "get": { - "description": "list or watch objects of kind PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "listPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "post": { - "description": "create a PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "createPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}": { - "get": { - "description": "read the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "readPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "replacePolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified PodDisruptionBudget", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "patchPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status": { - "get": { - "description": "read status of the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "readPolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "put": { - "description": "replace status of the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update status of the specified PodDisruptionBudget", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "patchPolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/poddisruptionbudgets": { - "get": { - "description": "list or watch objects of kind PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "listPolicyV1beta1PodDisruptionBudgetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/podsecuritypolicies": { - "get": { - "description": "list or watch objects of kind PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "listPolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "post": { - "description": "create a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "createPolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1CollectionPodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/podsecuritypolicies/{name}": { - "get": { - "description": "read the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "readPolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "replacePolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified PodSecurityPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "patchPolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets": { - "get": { - "description": "watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1NamespacedPodDisruptionBudgetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}": { - "get": { - "description": "watch changes to an object of kind PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1NamespacedPodDisruptionBudget", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/poddisruptionbudgets": { - "get": { - "description": "watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/podsecuritypolicies": { - "get": { - "description": "watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1PodSecurityPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/podsecuritypolicies/{name}": { - "get": { - "description": "watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1PodSecurityPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization" - ], - "operationId": "getRbacAuthorizationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "getRbacAuthorizationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1/clusterrolebindings": { - "get": { - "description": "list or watch objects of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1ClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "post": { - "description": "create a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "createRbacAuthorizationV1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1CollectionClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}": { - "get": { - "description": "read the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "readRbacAuthorizationV1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "replaceRbacAuthorizationV1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "delete": { - "description": "delete a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ClusterRoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "patchRbacAuthorizationV1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/clusterroles": { - "get": { - "description": "list or watch objects of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1ClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "post": { - "description": "create a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "createRbacAuthorizationV1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1CollectionClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/clusterroles/{name}": { - "get": { - "description": "read the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "readRbacAuthorizationV1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "put": { - "description": "replace the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "replaceRbacAuthorizationV1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "delete": { - "description": "delete a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified ClusterRole", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "patchRbacAuthorizationV1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1NamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "post": { - "description": "create a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "createRbacAuthorizationV1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1CollectionNamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "read the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "readRbacAuthorizationV1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "put": { - "description": "replace the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "replaceRbacAuthorizationV1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "delete": { - "description": "delete a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified RoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "patchRbacAuthorizationV1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1NamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "post": { - "description": "create a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "createRbacAuthorizationV1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1CollectionNamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "read the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "readRbacAuthorizationV1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "put": { - "description": "replace the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "replaceRbacAuthorizationV1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "delete": { - "description": "delete a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "deleteRbacAuthorizationV1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified Role", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "patchRbacAuthorizationV1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1RoleBindingForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "listRbacAuthorizationV1RoleForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings": { - "get": { - "description": "watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1ClusterRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/clusterroles": { - "get": { - "description": "watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1ClusterRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/clusterroles/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1NamespacedRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles": { - "get": { - "description": "watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1NamespacedRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1RoleBindingListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1/watch/roles": { - "get": { - "description": "watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1" - ], - "operationId": "watchRbacAuthorizationV1RoleListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "getRbacAuthorizationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings": { - "get": { - "description": "list or watch objects of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "post": { - "description": "create a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}": { - "get": { - "description": "read the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified ClusterRoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterroles": { - "get": { - "description": "list or watch objects of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "post": { - "description": "create a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}": { - "get": { - "description": "read the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified ClusterRole", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "post": { - "description": "create a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "read the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified RoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "post": { - "description": "create a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionNamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "read the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified Role", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1RoleBindingForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1RoleForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings": { - "get": { - "description": "watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles": { - "get": { - "description": "watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles": { - "get": { - "description": "watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1RoleBindingListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/roles": { - "get": { - "description": "watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1RoleListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/scheduling.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling" - ], - "operationId": "getSchedulingAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/scheduling.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "getSchedulingV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/scheduling.k8s.io/v1beta1/priorityclasses": { - "get": { - "description": "list or watch objects of kind PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "listSchedulingV1beta1PriorityClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "post": { - "description": "create a PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "createSchedulingV1beta1PriorityClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "deleteSchedulingV1beta1CollectionPriorityClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/scheduling.k8s.io/v1beta1/priorityclasses/{name}": { - "get": { - "description": "read the specified PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "readSchedulingV1beta1PriorityClass", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "replaceSchedulingV1beta1PriorityClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a PriorityClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "deleteSchedulingV1beta1PriorityClass", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified PriorityClass", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "patchSchedulingV1beta1PriorityClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PriorityClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses": { - "get": { - "description": "watch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "watchSchedulingV1beta1PriorityClassList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses/{name}": { - "get": { - "description": "watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "scheduling_v1beta1" - ], - "operationId": "watchSchedulingV1beta1PriorityClass", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PriorityClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage" - ], - "operationId": "getStorageAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "getStorageV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1/storageclasses": { - "get": { - "description": "list or watch objects of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "listStorageV1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClassList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "post": { - "description": "create a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "createStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1CollectionStorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/storageclasses/{name}": { - "get": { - "description": "read the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "readStorageV1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "put": { - "description": "replace the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "replaceStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "delete": { - "description": "delete a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified StorageClass", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "patchStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/volumeattachments": { - "get": { - "description": "list or watch objects of kind VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "listStorageV1VolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachmentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "post": { - "description": "create a VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "createStorageV1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "delete": { - "description": "delete collection of VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1CollectionVolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/volumeattachments/{name}": { - "get": { - "description": "read the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "readStorageV1VolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "put": { - "description": "replace the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "replaceStorageV1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "delete": { - "description": "delete a VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "patch": { - "description": "partially update the specified VolumeAttachment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "patchStorageV1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the VolumeAttachment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/volumeattachments/{name}/status": { - "get": { - "description": "read status of the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "readStorageV1VolumeAttachmentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "put": { - "description": "replace status of the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "replaceStorageV1VolumeAttachmentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "patch": { - "description": "partially update status of the specified VolumeAttachment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "patchStorageV1VolumeAttachmentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the VolumeAttachment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/storageclasses": { - "get": { - "description": "watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1StorageClassList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/storageclasses/{name}": { - "get": { - "description": "watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1StorageClass", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/volumeattachments": { - "get": { - "description": "watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1VolumeAttachmentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/volumeattachments/{name}": { - "get": { - "description": "watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1VolumeAttachment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the VolumeAttachment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "getStorageV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1beta1/storageclasses": { - "get": { - "description": "list or watch objects of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "listStorageV1beta1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClassList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "post": { - "description": "create a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "createStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1CollectionStorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/storageclasses/{name}": { - "get": { - "description": "read the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "readStorageV1beta1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "replaceStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified StorageClass", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "patchStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/volumeattachments": { - "get": { - "description": "list or watch objects of kind VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "listStorageV1beta1VolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "post": { - "description": "create a VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "createStorageV1beta1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete collection of VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1CollectionVolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/volumeattachments/{name}": { - "get": { - "description": "read the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "readStorageV1beta1VolumeAttachment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "put": { - "description": "replace the specified VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "replaceStorageV1beta1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "delete": { - "description": "delete a VolumeAttachment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "202": { - "description": "Accepted", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "patch": { - "description": "partially update the specified VolumeAttachment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "patchStorageV1beta1VolumeAttachment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - }, - { - "uniqueItems": true, - "type": "string", - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "name": "dryRun", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the VolumeAttachment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/storageclasses": { - "get": { - "description": "watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1StorageClassList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}": { - "get": { - "description": "watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1StorageClass", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/volumeattachments": { - "get": { - "description": "watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1VolumeAttachmentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name}": { - "get": { - "description": "watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1VolumeAttachment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "name": "continue", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "name": "limit", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the VolumeAttachment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/logs/": { - "get": { - "schemes": [ - "https" - ], - "tags": [ - "logs" - ], - "operationId": "logFileListHandler", - "responses": { - "401": { - "description": "Unauthorized" - } - } - } - }, - "/logs/{logpath}": { - "get": { - "schemes": [ - "https" - ], - "tags": [ - "logs" - ], - "operationId": "logFileHandler", - "responses": { - "401": { - "description": "Unauthorized" - } - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "path to the log", - "name": "logpath", - "in": "path", - "required": true - } - ] - }, - "/version/": { - "get": { - "description": "get the code version", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "https" - ], - "tags": [ - "version" - ], - "operationId": "getCodeVersion", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.version.Info" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - } - }, - "definitions": { - "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration": { - "description": "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "webhooks": { - "description": "Webhooks is a list of webhooks and the affected resources and operations.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfiguration", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList": { - "description": "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of MutatingWebhookConfiguration.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "kind": "MutatingWebhookConfigurationList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.admissionregistration.v1beta1.RuleWithOperations": { - "description": "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", - "properties": { - "apiGroups": { - "description": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "apiVersions": { - "description": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "operations": { - "description": "Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.admissionregistration.v1beta1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "required": [ - "namespace", - "name" - ], - "properties": { - "name": { - "description": "`name` is the name of the service. Required", - "type": "string" - }, - "namespace": { - "description": "`namespace` is the namespace of the service. Required", - "type": "string" - }, - "path": { - "description": "`path` is an optional URL path which will be sent in any request to this service.", - "type": "string" - } - } - }, - "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration": { - "description": "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "webhooks": { - "description": "Webhooks is a list of webhooks and the affected resources and operations.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfiguration", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList": { - "description": "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ValidatingWebhookConfiguration.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "kind": "ValidatingWebhookConfigurationList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.admissionregistration.v1beta1.Webhook": { - "description": "Webhook describes an admission webhook and the resources and operations it applies to.", - "required": [ - "name", - "clientConfig" - ], - "properties": { - "clientConfig": { - "description": "ClientConfig defines how to communicate with the hook. Required", - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig" - }, - "failurePolicy": { - "description": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", - "type": "string" - }, - "name": { - "description": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", - "type": "string" - }, - "namespaceSelector": { - "description": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "rules": { - "description": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.RuleWithOperations" - } - }, - "sideEffects": { - "description": "SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", - "type": "string" - } - } - }, - "io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig": { - "description": "WebhookClientConfig contains the information to make a TLS connection with the webhook", - "properties": { - "caBundle": { - "description": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", - "type": "string", - "format": "byte" - }, - "service": { - "description": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - "$ref": "#/definitions/io.k8s.api.admissionregistration.v1beta1.ServiceReference" - }, - "url": { - "description": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.ControllerRevision": { - "description": "ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "required": [ - "revision" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data is the serialized representation of the state.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "revision": { - "description": "Revision indicates the revision of the state represented by Data.", - "type": "integer", - "format": "int64" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.ControllerRevisionList": { - "description": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ControllerRevisions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ControllerRevision" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevisionList", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.DaemonSet": { - "description": "DaemonSet represents the configuration of a daemon set.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetSpec" - }, - "status": { - "description": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DaemonSet", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.DaemonSetCondition": { - "description": "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of DaemonSet condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.DaemonSetList": { - "description": "DaemonSetList is a collection of daemon sets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of daemon sets.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DaemonSetList", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.DaemonSetSpec": { - "description": "DaemonSetSpec is the specification of a daemon set.", - "required": [ - "selector", - "template" - ], - "properties": { - "minReadySeconds": { - "description": "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "An update strategy to replace existing DaemonSet pods with new pods.", - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetUpdateStrategy" - } - } - }, - "io.k8s.api.apps.v1.DaemonSetStatus": { - "description": "DaemonSetStatus represents the current status of a daemon set.", - "required": [ - "currentNumberScheduled", - "numberMisscheduled", - "desiredNumberScheduled", - "numberReady" - ], - "properties": { - "collisionCount": { - "description": "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a DaemonSet's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DaemonSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentNumberScheduled": { - "description": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "desiredNumberScheduled": { - "description": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberAvailable": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "numberMisscheduled": { - "description": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberReady": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - "type": "integer", - "format": "int32" - }, - "numberUnavailable": { - "description": "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "The most recent generation observed by the daemon set controller.", - "type": "integer", - "format": "int64" - }, - "updatedNumberScheduled": { - "description": "The total number of nodes that are running updated daemon pod", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1.DaemonSetUpdateStrategy": { - "description": "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if type = \"RollingUpdate\".", - "$ref": "#/definitions/io.k8s.api.apps.v1.RollingUpdateDaemonSet" - }, - "type": { - "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.Deployment": { - "description": "Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "Deployment", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DeploymentList", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "selector", - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "x-kubernetes-patch-strategy": "retainKeys", - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.apps.v1.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.api.apps.v1.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.ReplicaSet": { - "description": "ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSetSpec" - }, - "status": { - "description": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.ReplicaSetCondition": { - "description": "ReplicaSetCondition describes the state of a replica set at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replica set condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.ReplicaSetList": { - "description": "ReplicaSetList is a collection of ReplicaSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ReplicaSetList", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.ReplicaSetSpec": { - "description": "ReplicaSetSpec is the specification of a ReplicaSet.", - "required": [ - "selector" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.apps.v1.ReplicaSetStatus": { - "description": "ReplicaSetStatus represents the current status of a ReplicaSet.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replica set's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.ReplicaSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replicaset.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replica set.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1.RollingUpdateDaemonSet": { - "description": "Spec to control the desired behavior of daemon set rolling update.", - "properties": { - "maxUnavailable": { - "description": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.apps.v1.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy": { - "description": "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - "properties": { - "partition": { - "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1.StatefulSet": { - "description": "StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired identities of pods in this set.", - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetSpec" - }, - "status": { - "description": "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSet", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.StatefulSetCondition": { - "description": "StatefulSetCondition describes the state of a statefulset at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of statefulset condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1.StatefulSetList": { - "description": "StatefulSetList is a collection of StatefulSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSetList", - "version": "v1" - } - ] - }, - "io.k8s.api.apps.v1.StatefulSetSpec": { - "description": "A StatefulSetSpec is the specification of a StatefulSet.", - "required": [ - "selector", - "template", - "serviceName" - ], - "properties": { - "podManagementPolicy": { - "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - "type": "string" - }, - "replicas": { - "description": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "serviceName": { - "description": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - "type": "string" - }, - "template": { - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy" - }, - "volumeClaimTemplates": { - "description": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - } - } - }, - "io.k8s.api.apps.v1.StatefulSetStatus": { - "description": "StatefulSetStatus represents the current state of a StatefulSet.", - "required": [ - "replicas" - ], - "properties": { - "collisionCount": { - "description": "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a statefulset's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentReplicas": { - "description": "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - "type": "integer", - "format": "int32" - }, - "currentRevision": { - "description": "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - "type": "string" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "replicas is the number of Pods created by the StatefulSet controller.", - "type": "integer", - "format": "int32" - }, - "updateRevision": { - "description": "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - "type": "string" - }, - "updatedReplicas": { - "description": "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1.StatefulSetUpdateStrategy": { - "description": "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - "properties": { - "rollingUpdate": { - "description": "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - "$ref": "#/definitions/io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy" - }, - "type": { - "description": "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta1.ControllerRevision": { - "description": "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "required": [ - "revision" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data is the serialized representation of the state.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "revision": { - "description": "Revision indicates the revision of the state represented by Data.", - "type": "integer", - "format": "int64" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.ControllerRevisionList": { - "description": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ControllerRevisions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevisionList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.Deployment": { - "description": "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "Deployment", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta1.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DeploymentList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.DeploymentRollback": { - "description": "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", - "required": [ - "name", - "rollbackTo" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Required: This must match the Name of a deployment.", - "type": "string" - }, - "rollbackTo": { - "description": "The config of this deployment rollback.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig" - }, - "updatedAnnotations": { - "description": "The annotations to be updated to a deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DeploymentRollback", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.", - "type": "integer", - "format": "int32" - }, - "rollbackTo": { - "description": "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "x-kubernetes-patch-strategy": "retainKeys", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.apps.v1beta1.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta1.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta1.RollbackConfig": { - "description": "DEPRECATED.", - "properties": { - "revision": { - "description": "The revision to rollback to. If set to 0, rollback to the last revision.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.apps.v1beta1.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy": { - "description": "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - "properties": { - "partition": { - "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta1.Scale": { - "description": "Scale represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "Scale", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.ScaleSpec": { - "description": "ScaleSpec describes the attributes of a scale subresource", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta1.ScaleStatus": { - "description": "ScaleStatus represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "targetSelector": { - "description": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta1.StatefulSet": { - "description": "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired identities of pods in this set.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec" - }, - "status": { - "description": "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.StatefulSetCondition": { - "description": "StatefulSetCondition describes the state of a statefulset at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of statefulset condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta1.StatefulSetList": { - "description": "StatefulSetList is a collection of StatefulSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSetList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.apps.v1beta1.StatefulSetSpec": { - "description": "A StatefulSetSpec is the specification of a StatefulSet.", - "required": [ - "template", - "serviceName" - ], - "properties": { - "podManagementPolicy": { - "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - "type": "string" - }, - "replicas": { - "description": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "serviceName": { - "description": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - "type": "string" - }, - "template": { - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy" - }, - "volumeClaimTemplates": { - "description": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - } - } - }, - "io.k8s.api.apps.v1beta1.StatefulSetStatus": { - "description": "StatefulSetStatus represents the current state of a StatefulSet.", - "required": [ - "replicas" - ], - "properties": { - "collisionCount": { - "description": "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a statefulset's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentReplicas": { - "description": "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - "type": "integer", - "format": "int32" - }, - "currentRevision": { - "description": "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - "type": "string" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "replicas is the number of Pods created by the StatefulSet controller.", - "type": "integer", - "format": "int32" - }, - "updateRevision": { - "description": "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - "type": "string" - }, - "updatedReplicas": { - "description": "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy": { - "description": "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - "properties": { - "rollingUpdate": { - "description": "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy" - }, - "type": { - "description": "Type indicates the type of the StatefulSetUpdateStrategy.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.ControllerRevision": { - "description": "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "required": [ - "revision" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data is the serialized representation of the state.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "revision": { - "description": "Revision indicates the revision of the state represented by Data.", - "type": "integer", - "format": "int64" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevision", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.ControllerRevisionList": { - "description": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ControllerRevisions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ControllerRevisionList", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.DaemonSet": { - "description": "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetSpec" - }, - "status": { - "description": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DaemonSet", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.DaemonSetCondition": { - "description": "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of DaemonSet condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.DaemonSetList": { - "description": "DaemonSetList is a collection of daemon sets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of daemon sets.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DaemonSetList", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.DaemonSetSpec": { - "description": "DaemonSetSpec is the specification of a daemon set.", - "required": [ - "selector", - "template" - ], - "properties": { - "minReadySeconds": { - "description": "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "An update strategy to replace existing DaemonSet pods with new pods.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy" - } - } - }, - "io.k8s.api.apps.v1beta2.DaemonSetStatus": { - "description": "DaemonSetStatus represents the current status of a daemon set.", - "required": [ - "currentNumberScheduled", - "numberMisscheduled", - "desiredNumberScheduled", - "numberReady" - ], - "properties": { - "collisionCount": { - "description": "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a DaemonSet's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DaemonSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentNumberScheduled": { - "description": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "desiredNumberScheduled": { - "description": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberAvailable": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "numberMisscheduled": { - "description": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberReady": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - "type": "integer", - "format": "int32" - }, - "numberUnavailable": { - "description": "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "The most recent generation observed by the daemon set controller.", - "type": "integer", - "format": "int64" - }, - "updatedNumberScheduled": { - "description": "The total number of nodes that are running updated daemon pod", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy": { - "description": "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if type = \"RollingUpdate\".", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet" - }, - "type": { - "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.Deployment": { - "description": "DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "Deployment", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "DeploymentList", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "selector", - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "x-kubernetes-patch-strategy": "retainKeys", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.apps.v1beta2.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.ReplicaSet": { - "description": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetSpec" - }, - "status": { - "description": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ReplicaSet", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.ReplicaSetCondition": { - "description": "ReplicaSetCondition describes the state of a replica set at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replica set condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.ReplicaSetList": { - "description": "ReplicaSetList is a collection of ReplicaSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "ReplicaSetList", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.ReplicaSetSpec": { - "description": "ReplicaSetSpec is the specification of a ReplicaSet.", - "required": [ - "selector" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.apps.v1beta2.ReplicaSetStatus": { - "description": "ReplicaSetStatus represents the current status of a ReplicaSet.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replica set's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replicaset.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replica set.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet": { - "description": "Spec to control the desired behavior of daemon set rolling update.", - "properties": { - "maxUnavailable": { - "description": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.apps.v1beta2.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy": { - "description": "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - "properties": { - "partition": { - "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.Scale": { - "description": "Scale represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "Scale", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.ScaleSpec": { - "description": "ScaleSpec describes the attributes of a scale subresource", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.ScaleStatus": { - "description": "ScaleStatus represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "targetSelector": { - "description": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.StatefulSet": { - "description": "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired identities of pods in this set.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetSpec" - }, - "status": { - "description": "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSet", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.StatefulSetCondition": { - "description": "StatefulSetCondition describes the state of a statefulset at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of statefulset condition.", - "type": "string" - } - } - }, - "io.k8s.api.apps.v1beta2.StatefulSetList": { - "description": "StatefulSetList is a collection of StatefulSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "kind": "StatefulSetList", - "version": "v1beta2" - } - ] - }, - "io.k8s.api.apps.v1beta2.StatefulSetSpec": { - "description": "A StatefulSetSpec is the specification of a StatefulSet.", - "required": [ - "selector", - "template", - "serviceName" - ], - "properties": { - "podManagementPolicy": { - "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - "type": "string" - }, - "replicas": { - "description": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "serviceName": { - "description": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - "type": "string" - }, - "template": { - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy" - }, - "volumeClaimTemplates": { - "description": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - } - } - }, - "io.k8s.api.apps.v1beta2.StatefulSetStatus": { - "description": "StatefulSetStatus represents the current state of a StatefulSet.", - "required": [ - "replicas" - ], - "properties": { - "collisionCount": { - "description": "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a statefulset's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.StatefulSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentReplicas": { - "description": "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - "type": "integer", - "format": "int32" - }, - "currentRevision": { - "description": "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - "type": "string" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "replicas is the number of Pods created by the StatefulSet controller.", - "type": "integer", - "format": "int32" - }, - "updateRevision": { - "description": "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - "type": "string" - }, - "updatedReplicas": { - "description": "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy": { - "description": "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - "properties": { - "rollingUpdate": { - "description": "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy" - }, - "type": { - "description": "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.authentication.v1.TokenReview": { - "description": "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request can be authenticated.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authentication.k8s.io", - "kind": "TokenReview", - "version": "v1" - } - ] - }, - "io.k8s.api.authentication.v1.TokenReviewSpec": { - "description": "TokenReviewSpec is a description of the token authentication request.", - "properties": { - "audiences": { - "description": "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", - "type": "array", - "items": { - "type": "string" - } - }, - "token": { - "description": "Token is the opaque bearer token.", - "type": "string" - } - } - }, - "io.k8s.api.authentication.v1.TokenReviewStatus": { - "description": "TokenReviewStatus is the result of the token authentication request.", - "properties": { - "audiences": { - "description": "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", - "type": "array", - "items": { - "type": "string" - } - }, - "authenticated": { - "description": "Authenticated indicates that the token was associated with a known user.", - "type": "boolean" - }, - "error": { - "description": "Error indicates that the token couldn't be checked", - "type": "string" - }, - "user": { - "description": "User is the UserInfo associated with the provided token.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.UserInfo" - } - } - }, - "io.k8s.api.authentication.v1.UserInfo": { - "description": "UserInfo holds the information about the user needed to implement the user.Info interface.", - "properties": { - "extra": { - "description": "Any additional information provided by the authenticator.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "The names of groups this user is a part of.", - "type": "array", - "items": { - "type": "string" - } - }, - "uid": { - "description": "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", - "type": "string" - }, - "username": { - "description": "The name that uniquely identifies this user among all active users.", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.LocalSubjectAccessReview": { - "description": "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "kind": "LocalSubjectAccessReview", - "version": "v1" - } - ] - }, - "io.k8s.api.authorization.v1.NonResourceAttributes": { - "description": "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", - "properties": { - "path": { - "description": "Path is the URL path of the request", - "type": "string" - }, - "verb": { - "description": "Verb is the standard HTTP verb", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.NonResourceRule": { - "description": "NonResourceRule holds information that describes a rule for the non-resource", - "required": [ - "verbs" - ], - "properties": { - "nonResourceURLs": { - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.authorization.v1.ResourceAttributes": { - "description": "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", - "properties": { - "group": { - "description": "Group is the API Group of the Resource. \"*\" means all.", - "type": "string" - }, - "name": { - "description": "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", - "type": "string" - }, - "resource": { - "description": "Resource is one of the existing resource types. \"*\" means all.", - "type": "string" - }, - "subresource": { - "description": "Subresource is one of the existing resource types. \"\" means none.", - "type": "string" - }, - "verb": { - "description": "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - "type": "string" - }, - "version": { - "description": "Version is the API Version of the Resource. \"*\" means all.", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.ResourceRule": { - "description": "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - "required": [ - "verbs" - ], - "properties": { - "apiGroups": { - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", - "type": "array", - "items": { - "type": "string" - } - }, - "resourceNames": { - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.authorization.v1.SelfSubjectAccessReview": { - "description": "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. user and groups must be empty", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "kind": "SelfSubjectAccessReview", - "version": "v1" - } - ] - }, - "io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec": { - "description": "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.api.authorization.v1.ResourceAttributes" - } - } - }, - "io.k8s.api.authorization.v1.SelfSubjectRulesReview": { - "description": "SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates the set of actions a user can perform.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectRulesReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "kind": "SelfSubjectRulesReview", - "version": "v1" - } - ] - }, - "io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec": { - "properties": { - "namespace": { - "description": "Namespace to evaluate rules for. Required.", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.SubjectAccessReview": { - "description": "SubjectAccessReview checks whether or not a user or group can perform an action.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "kind": "SubjectAccessReview", - "version": "v1" - } - ] - }, - "io.k8s.api.authorization.v1.SubjectAccessReviewSpec": { - "description": "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "extra": { - "description": "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "Groups is the groups you're testing for.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.api.authorization.v1.ResourceAttributes" - }, - "uid": { - "description": "UID information about the requesting user.", - "type": "string" - }, - "user": { - "description": "User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.SubjectAccessReviewStatus": { - "description": "SubjectAccessReviewStatus", - "required": [ - "allowed" - ], - "properties": { - "allowed": { - "description": "Allowed is required. True if the action would be allowed, false otherwise.", - "type": "boolean" - }, - "denied": { - "description": "Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.", - "type": "boolean" - }, - "evaluationError": { - "description": "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", - "type": "string" - }, - "reason": { - "description": "Reason is optional. It indicates why a request was allowed or denied.", - "type": "string" - } - } - }, - "io.k8s.api.authorization.v1.SubjectRulesReviewStatus": { - "description": "SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.", - "required": [ - "resourceRules", - "nonResourceRules", - "incomplete" - ], - "properties": { - "evaluationError": { - "description": "EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.", - "type": "string" - }, - "incomplete": { - "description": "Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.", - "type": "boolean" - }, - "nonResourceRules": { - "description": "NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.NonResourceRule" - } - }, - "resourceRules": { - "description": "ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.authorization.v1.ResourceRule" - } - } - } - }, - "io.k8s.api.autoscaling.v1.CrossVersionObjectReference": { - "description": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent", - "type": "string" - }, - "kind": { - "description": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - "type": "string" - }, - "name": { - "description": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler": { - "description": "configuration of a horizontal pod autoscaler.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec" - }, - "status": { - "description": "current information about the autoscaler.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v1" - } - ] - }, - "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList": { - "description": "list of horizontal pod autoscaler objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "list of horizontal pod autoscaler objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "kind": "HorizontalPodAutoscalerList", - "version": "v1" - } - ] - }, - "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec": { - "description": "specification of a horizontal pod autoscaler.", - "required": [ - "scaleTargetRef", - "maxReplicas" - ], - "properties": { - "maxReplicas": { - "description": "upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.", - "type": "integer", - "format": "int32" - }, - "minReplicas": { - "description": "lower limit for the number of pods that can be set by the autoscaler, default 1.", - "type": "integer", - "format": "int32" - }, - "scaleTargetRef": { - "description": "reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference" - }, - "targetCPUUtilizationPercentage": { - "description": "target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus": { - "description": "current status of a horizontal pod autoscaler", - "required": [ - "currentReplicas", - "desiredReplicas" - ], - "properties": { - "currentCPUUtilizationPercentage": { - "description": "current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.", - "type": "integer", - "format": "int32" - }, - "currentReplicas": { - "description": "current number of replicas of pods managed by this autoscaler.", - "type": "integer", - "format": "int32" - }, - "desiredReplicas": { - "description": "desired number of replicas of pods managed by this autoscaler.", - "type": "integer", - "format": "int32" - }, - "lastScaleTime": { - "description": "last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "observedGeneration": { - "description": "most recent generation observed by this autoscaler.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.autoscaling.v1.Scale": { - "description": "Scale represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "kind": "Scale", - "version": "v1" - } - ] - }, - "io.k8s.api.autoscaling.v1.ScaleSpec": { - "description": "ScaleSpec describes the attributes of a scale subresource.", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.autoscaling.v1.ScaleStatus": { - "description": "ScaleStatus represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference": { - "description": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent", - "type": "string" - }, - "kind": { - "description": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - "type": "string" - }, - "name": { - "description": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ExternalMetricSource": { - "description": "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - "required": [ - "metric", - "target" - ], - "properties": { - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - }, - "target": { - "description": "target specifies the target value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus": { - "description": "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", - "required": [ - "metric", - "current" - ], - "properties": { - "current": { - "description": "current contains the current value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus" - }, - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler": { - "description": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec" - }, - "status": { - "description": "status is the current information about the autoscaler.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "kind": "HorizontalPodAutoscaler", - "version": "v2beta2" - } - ] - }, - "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerCondition": { - "description": "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "lastTransitionTime is the last time the condition transitioned from one status to another", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "message is a human-readable explanation containing details about the transition", - "type": "string" - }, - "reason": { - "description": "reason is the reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "status is the status of the condition (True, False, Unknown)", - "type": "string" - }, - "type": { - "description": "type describes the current condition", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList": { - "description": "HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of horizontal pod autoscaler objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "metadata is the standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "kind": "HorizontalPodAutoscalerList", - "version": "v2beta2" - } - ] - }, - "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec": { - "description": "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", - "required": [ - "scaleTargetRef", - "maxReplicas" - ], - "properties": { - "maxReplicas": { - "description": "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", - "type": "integer", - "format": "int32" - }, - "metrics": { - "description": "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricSpec" - } - }, - "minReplicas": { - "description": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", - "type": "integer", - "format": "int32" - }, - "scaleTargetRef": { - "description": "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus": { - "description": "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", - "required": [ - "currentReplicas", - "desiredReplicas", - "conditions" - ], - "properties": { - "conditions": { - "description": "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerCondition" - } - }, - "currentMetrics": { - "description": "currentMetrics is the last read state of the metrics used by this autoscaler.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricStatus" - } - }, - "currentReplicas": { - "description": "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", - "type": "integer", - "format": "int32" - }, - "desiredReplicas": { - "description": "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", - "type": "integer", - "format": "int32" - }, - "lastScaleTime": { - "description": "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed by this autoscaler.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.MetricIdentifier": { - "description": "MetricIdentifier defines the name and optionally selector for a metric", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "name is the name of the given metric", - "type": "string" - }, - "selector": { - "description": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.MetricSpec": { - "description": "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", - "required": [ - "type" - ], - "properties": { - "external": { - "description": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricSource" - }, - "object": { - "description": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricSource" - }, - "pods": { - "description": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricSource" - }, - "resource": { - "description": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricSource" - }, - "type": { - "description": "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.MetricStatus": { - "description": "MetricStatus describes the last-read state of a single metric.", - "required": [ - "type" - ], - "properties": { - "external": { - "description": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus" - }, - "object": { - "description": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus" - }, - "pods": { - "description": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricStatus" - }, - "resource": { - "description": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus" - }, - "type": { - "description": "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", - "type": "string" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.MetricTarget": { - "description": "MetricTarget defines the target value, average value, or average utilization of a specific metric", - "required": [ - "type" - ], - "properties": { - "averageUtilization": { - "description": "averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type", - "type": "integer", - "format": "int32" - }, - "averageValue": { - "description": "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "type": { - "description": "type represents whether the metric type is Utilization, Value, or AverageValue", - "type": "string" - }, - "value": { - "description": "value is the target value of the metric (as a quantity).", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.MetricValueStatus": { - "description": "MetricValueStatus holds the current value for a metric", - "properties": { - "averageUtilization": { - "description": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", - "type": "integer", - "format": "int32" - }, - "averageValue": { - "description": "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "value": { - "description": "value is the current value of the metric (as a quantity).", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ObjectMetricSource": { - "description": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "required": [ - "describedObject", - "target", - "metric" - ], - "properties": { - "describedObject": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference" - }, - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - }, - "target": { - "description": "target specifies the target value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus": { - "description": "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "required": [ - "metric", - "current", - "describedObject" - ], - "properties": { - "current": { - "description": "current contains the current value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus" - }, - "describedObject": { - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference" - }, - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.PodsMetricSource": { - "description": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "required": [ - "metric", - "target" - ], - "properties": { - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - }, - "target": { - "description": "target specifies the target value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.PodsMetricStatus": { - "description": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", - "required": [ - "metric", - "current" - ], - "properties": { - "current": { - "description": "current contains the current value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus" - }, - "metric": { - "description": "metric identifies the target metric by name and selector", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ResourceMetricSource": { - "description": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - "required": [ - "name", - "target" - ], - "properties": { - "name": { - "description": "name is the name of the resource in question.", - "type": "string" - }, - "target": { - "description": "target specifies the target value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget" - } - } - }, - "io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus": { - "description": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "required": [ - "name", - "current" - ], - "properties": { - "current": { - "description": "current contains the current value for the given metric", - "$ref": "#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus" - }, - "name": { - "description": "Name is the name of the resource in question.", - "type": "string" - } - } - }, - "io.k8s.api.batch.v1.Job": { - "description": "Job represents the configuration of a single job.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobSpec" - }, - "status": { - "description": "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "kind": "Job", - "version": "v1" - } - ] - }, - "io.k8s.api.batch.v1.JobCondition": { - "description": "JobCondition describes current state of a job.", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Last time the condition was checked.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transit from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "(brief) reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of job condition, Complete or Failed.", - "type": "string" - } - } - }, - "io.k8s.api.batch.v1.JobList": { - "description": "JobList is a collection of jobs.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of Jobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "kind": "JobList", - "version": "v1" - } - ] - }, - "io.k8s.api.batch.v1.JobSpec": { - "description": "JobSpec describes how the job execution will look like.", - "required": [ - "template" - ], - "properties": { - "activeDeadlineSeconds": { - "description": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "type": "integer", - "format": "int64" - }, - "backoffLimit": { - "description": "Specifies the number of retries before marking this job failed. Defaults to 6", - "type": "integer", - "format": "int32" - }, - "completions": { - "description": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "integer", - "format": "int32" - }, - "manualSelector": { - "description": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", - "type": "boolean" - }, - "parallelism": { - "description": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) \u003c .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "ttlSecondsAfterFinished": { - "description": "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.batch.v1.JobStatus": { - "description": "JobStatus represents the current state of a Job.", - "properties": { - "active": { - "description": "The number of actively running pods.", - "type": "integer", - "format": "int32" - }, - "completionTime": { - "description": "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "conditions": { - "description": "The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.batch.v1.JobCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "failed": { - "description": "The number of pods which reached phase Failed.", - "type": "integer", - "format": "int32" - }, - "startTime": { - "description": "Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "succeeded": { - "description": "The number of pods which reached phase Succeeded.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.batch.v1beta1.CronJob": { - "description": "CronJob represents the configuration of a single cron job.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJobSpec" - }, - "status": { - "description": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJobStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "kind": "CronJob", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.batch.v1beta1.CronJobList": { - "description": "CronJobList is a collection of cron jobs.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of CronJobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "kind": "CronJobList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.batch.v1beta1.CronJobSpec": { - "description": "CronJobSpec describes how the job execution will look like and when it will actually run.", - "required": [ - "schedule", - "jobTemplate" - ], - "properties": { - "concurrencyPolicy": { - "description": "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", - "type": "string" - }, - "failedJobsHistoryLimit": { - "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "jobTemplate": { - "description": "Specifies the job that will be created when executing a CronJob.", - "$ref": "#/definitions/io.k8s.api.batch.v1beta1.JobTemplateSpec" - }, - "schedule": { - "description": "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", - "type": "string" - }, - "startingDeadlineSeconds": { - "description": "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", - "type": "integer", - "format": "int64" - }, - "successfulJobsHistoryLimit": { - "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.", - "type": "integer", - "format": "int32" - }, - "suspend": { - "description": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", - "type": "boolean" - } - } - }, - "io.k8s.api.batch.v1beta1.CronJobStatus": { - "description": "CronJobStatus represents the current state of a cron job.", - "properties": { - "active": { - "description": "A list of pointers to currently running jobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - } - }, - "lastScheduleTime": { - "description": "Information when was the last time the job was successfully scheduled.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.api.batch.v1beta1.JobTemplateSpec": { - "description": "JobTemplateSpec describes the data a Job should have when created from a template", - "properties": { - "metadata": { - "description": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobSpec" - } - } - }, - "io.k8s.api.certificates.v1beta1.CertificateSigningRequest": { - "description": "Describes a certificate signing request", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The certificate request itself and any additional information.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec" - }, - "status": { - "description": "Derived information about the request.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequest", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition": { - "required": [ - "type" - ], - "properties": { - "lastUpdateTime": { - "description": "timestamp for the last update to this condition", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "human readable message with details about the request state", - "type": "string" - }, - "reason": { - "description": "brief reason for the request state", - "type": "string" - }, - "type": { - "description": "request approval state, currently Approved or Denied.", - "type": "string" - } - } - }, - "io.k8s.api.certificates.v1beta1.CertificateSigningRequestList": { - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "certificates.k8s.io", - "kind": "CertificateSigningRequestList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec": { - "description": "This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.", - "required": [ - "request" - ], - "properties": { - "extra": { - "description": "Extra information about the requesting user. See user.Info interface for details.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "Group information about the requesting user. See user.Info interface for details.", - "type": "array", - "items": { - "type": "string" - } - }, - "request": { - "description": "Base64-encoded PKCS#10 CSR data", - "type": "string", - "format": "byte" - }, - "uid": { - "description": "UID information about the requesting user. See user.Info interface for details.", - "type": "string" - }, - "usages": { - "description": "allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n https://tools.ietf.org/html/rfc5280#section-4.2.1.12", - "type": "array", - "items": { - "type": "string" - } - }, - "username": { - "description": "Information about the requesting user. See user.Info interface for details.", - "type": "string" - } - } - }, - "io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus": { - "properties": { - "certificate": { - "description": "If request was approved, the controller will place the issued certificate here.", - "type": "string", - "format": "byte" - }, - "conditions": { - "description": "Conditions applied to the request, such as approval or denial.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition" - } - } - } - }, - "io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource": { - "description": "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "string" - }, - "partition": { - "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", - "type": "integer", - "format": "int32" - }, - "readOnly": { - "description": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "boolean" - }, - "volumeID": { - "description": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Affinity": { - "description": "Affinity is a group of affinity scheduling rules.", - "properties": { - "nodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeAffinity" - }, - "podAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinity" - }, - "podAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAntiAffinity" - } - } - }, - "io.k8s.api.core.v1.AttachedVolume": { - "description": "AttachedVolume describes a volume attached to a node", - "required": [ - "name", - "devicePath" - ], - "properties": { - "devicePath": { - "description": "DevicePath represents the device path where the volume should be available", - "type": "string" - }, - "name": { - "description": "Name of the attached volume", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.AzureDiskVolumeSource": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "required": [ - "diskName", - "diskURI" - ], - "properties": { - "cachingMode": { - "description": "Host Caching mode: None, Read Only, Read Write.", - "type": "string" - }, - "diskName": { - "description": "The Name of the data disk in the blob storage", - "type": "string" - }, - "diskURI": { - "description": "The URI the data disk in the blob storage", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "kind": { - "description": "Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.AzureFilePersistentVolumeSource": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "required": [ - "secretName", - "shareName" - ], - "properties": { - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretName": { - "description": "the name of secret that contains Azure Storage Account Name and Key", - "type": "string" - }, - "secretNamespace": { - "description": "the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod", - "type": "string" - }, - "shareName": { - "description": "Share Name", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.AzureFileVolumeSource": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "required": [ - "secretName", - "shareName" - ], - "properties": { - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretName": { - "description": "the name of secret that contains Azure Storage Account Name and Key", - "type": "string" - }, - "shareName": { - "description": "Share Name", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Binding": { - "description": "Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.", - "required": [ - "target" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "target": { - "description": "The target object that you want to bind to the standard object.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Binding", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.CSIPersistentVolumeSource": { - "description": "Represents storage that is managed by an external CSI volume driver (Beta feature)", - "required": [ - "driver", - "volumeHandle" - ], - "properties": { - "controllerPublishSecretRef": { - "description": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "driver": { - "description": "Driver is the name of the driver to use for this volume. Required.", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".", - "type": "string" - }, - "nodePublishSecretRef": { - "description": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "nodeStageSecretRef": { - "description": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "readOnly": { - "description": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).", - "type": "boolean" - }, - "volumeAttributes": { - "description": "Attributes of the volume to publish.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "volumeHandle": { - "description": "VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Capabilities": { - "description": "Adds and removes POSIX capabilities from running containers.", - "properties": { - "add": { - "description": "Added capabilities", - "type": "array", - "items": { - "type": "string" - } - }, - "drop": { - "description": "Removed capabilities", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.CephFSPersistentVolumeSource": { - "description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "monitors" - ], - "properties": { - "monitors": { - "description": "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "path": { - "description": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "boolean" - }, - "secretFile": { - "description": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "user": { - "description": "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.CephFSVolumeSource": { - "description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "monitors" - ], - "properties": { - "monitors": { - "description": "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "path": { - "description": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "boolean" - }, - "secretFile": { - "description": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "user": { - "description": "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.CinderPersistentVolumeSource": { - "description": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "boolean" - }, - "secretRef": { - "description": "Optional: points to a secret object containing parameters used to connect to OpenStack.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "volumeID": { - "description": "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.CinderVolumeSource": { - "description": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "boolean" - }, - "secretRef": { - "description": "Optional: points to a secret object containing parameters used to connect to OpenStack.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "volumeID": { - "description": "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ClientIPConfig": { - "description": "ClientIPConfig represents the configurations of Client IP based session affinity.", - "properties": { - "timeoutSeconds": { - "description": "timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be \u003e0 \u0026\u0026 \u003c=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.core.v1.ComponentCondition": { - "description": "Information about the condition of a component.", - "required": [ - "type", - "status" - ], - "properties": { - "error": { - "description": "Condition error code for a component. For example, a health check error code.", - "type": "string" - }, - "message": { - "description": "Message about the condition for a component. For example, information about a health check.", - "type": "string" - }, - "status": { - "description": "Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".", - "type": "string" - }, - "type": { - "description": "Type of condition for a component. Valid value: \"Healthy\"", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ComponentStatus": { - "description": "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "conditions": { - "description": "List of component conditions observed", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ComponentStatus", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ComponentStatusList": { - "description": "Status of all the conditions for the component as a list of ComponentStatus objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ComponentStatus objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentStatus" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ComponentStatusList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ConfigMap": { - "description": "ConfigMap holds configuration data for pods to consume.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "binaryData": { - "description": "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", - "type": "object", - "additionalProperties": { - "type": "string", - "format": "byte" - } - }, - "data": { - "description": "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ConfigMapEnvSource": { - "description": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.ConfigMapKeySelector": { - "description": "Selects a key from a ConfigMap.", - "required": [ - "key" - ], - "properties": { - "key": { - "description": "The key to select.", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.ConfigMapList": { - "description": "ConfigMapList is a resource containing a list of ConfigMap objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ConfigMaps.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ConfigMapList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ConfigMapNodeConfigSource": { - "description": "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", - "required": [ - "namespace", - "name", - "kubeletConfigKey" - ], - "properties": { - "kubeletConfigKey": { - "description": "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.", - "type": "string" - }, - "name": { - "description": "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.", - "type": "string" - }, - "namespace": { - "description": "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.", - "type": "string" - }, - "resourceVersion": { - "description": "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", - "type": "string" - }, - "uid": { - "description": "UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ConfigMapProjection": { - "description": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.", - "properties": { - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's keys must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.ConfigMapVolumeSource": { - "description": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's keys must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.Container": { - "description": "A single application container that you want to run within a pod.", - "required": [ - "name" - ], - "properties": { - "args": { - "description": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - "type": "array", - "items": { - "type": "string" - } - }, - "command": { - "description": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - "type": "array", - "items": { - "type": "string" - } - }, - "env": { - "description": "List of environment variables to set in the container. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EnvVar" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "envFrom": { - "description": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EnvFromSource" - } - }, - "image": { - "description": "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.", - "type": "string" - }, - "imagePullPolicy": { - "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", - "type": "string" - }, - "lifecycle": { - "description": "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", - "$ref": "#/definitions/io.k8s.api.core.v1.Lifecycle" - }, - "livenessProbe": { - "description": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "$ref": "#/definitions/io.k8s.api.core.v1.Probe" - }, - "name": { - "description": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", - "type": "string" - }, - "ports": { - "description": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerPort" - }, - "x-kubernetes-list-map-keys": [ - "containerPort", - "protocol" - ], - "x-kubernetes-list-type": "map", - "x-kubernetes-patch-merge-key": "containerPort", - "x-kubernetes-patch-strategy": "merge" - }, - "readinessProbe": { - "description": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "$ref": "#/definitions/io.k8s.api.core.v1.Probe" - }, - "resources": { - "description": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements" - }, - "securityContext": { - "description": "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - "$ref": "#/definitions/io.k8s.api.core.v1.SecurityContext" - }, - "stdin": { - "description": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", - "type": "boolean" - }, - "stdinOnce": { - "description": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", - "type": "boolean" - }, - "terminationMessagePath": { - "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", - "type": "string" - }, - "terminationMessagePolicy": { - "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", - "type": "string" - }, - "tty": { - "description": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", - "type": "boolean" - }, - "volumeDevices": { - "description": "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeDevice" - }, - "x-kubernetes-patch-merge-key": "devicePath", - "x-kubernetes-patch-strategy": "merge" - }, - "volumeMounts": { - "description": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeMount" - }, - "x-kubernetes-patch-merge-key": "mountPath", - "x-kubernetes-patch-strategy": "merge" - }, - "workingDir": { - "description": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ContainerImage": { - "description": "Describe a container image", - "required": [ - "names" - ], - "properties": { - "names": { - "description": "Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]", - "type": "array", - "items": { - "type": "string" - } - }, - "sizeBytes": { - "description": "The size of the image in bytes.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.core.v1.ContainerPort": { - "description": "ContainerPort represents a network port in a single container.", - "required": [ - "containerPort" - ], - "properties": { - "containerPort": { - "description": "Number of port to expose on the pod's IP address. This must be a valid port number, 0 \u003c x \u003c 65536.", - "type": "integer", - "format": "int32" - }, - "hostIP": { - "description": "What host IP to bind the external port to.", - "type": "string" - }, - "hostPort": { - "description": "Number of port to expose on the host. If specified, this must be a valid port number, 0 \u003c x \u003c 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", - "type": "string" - }, - "protocol": { - "description": "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ContainerState": { - "description": "ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.", - "properties": { - "running": { - "description": "Details about a running container", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateRunning" - }, - "terminated": { - "description": "Details about a terminated container", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateTerminated" - }, - "waiting": { - "description": "Details about a waiting container", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateWaiting" - } - } - }, - "io.k8s.api.core.v1.ContainerStateRunning": { - "description": "ContainerStateRunning is a running state of a container.", - "properties": { - "startedAt": { - "description": "Time at which the container was last (re-)started", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.api.core.v1.ContainerStateTerminated": { - "description": "ContainerStateTerminated is a terminated state of a container.", - "required": [ - "exitCode" - ], - "properties": { - "containerID": { - "description": "Container's ID in the format 'docker://\u003ccontainer_id\u003e'", - "type": "string" - }, - "exitCode": { - "description": "Exit status from the last termination of the container", - "type": "integer", - "format": "int32" - }, - "finishedAt": { - "description": "Time at which the container last terminated", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Message regarding the last termination of the container", - "type": "string" - }, - "reason": { - "description": "(brief) reason from the last termination of the container", - "type": "string" - }, - "signal": { - "description": "Signal from the last termination of the container", - "type": "integer", - "format": "int32" - }, - "startedAt": { - "description": "Time at which previous execution of the container started", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.api.core.v1.ContainerStateWaiting": { - "description": "ContainerStateWaiting is a waiting state of a container.", - "properties": { - "message": { - "description": "Message regarding why the container is not yet running.", - "type": "string" - }, - "reason": { - "description": "(brief) reason the container is not yet running.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ContainerStatus": { - "description": "ContainerStatus contains details for the current status of this container.", - "required": [ - "name", - "ready", - "restartCount", - "image", - "imageID" - ], - "properties": { - "containerID": { - "description": "Container's ID in the format 'docker://\u003ccontainer_id\u003e'.", - "type": "string" - }, - "image": { - "description": "The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images", - "type": "string" - }, - "imageID": { - "description": "ImageID of the container's image.", - "type": "string" - }, - "lastState": { - "description": "Details about the container's last termination condition.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerState" - }, - "name": { - "description": "This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.", - "type": "string" - }, - "ready": { - "description": "Specifies whether the container has passed its readiness probe.", - "type": "boolean" - }, - "restartCount": { - "description": "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", - "type": "integer", - "format": "int32" - }, - "state": { - "description": "Details about the container's current condition.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerState" - } - } - }, - "io.k8s.api.core.v1.DaemonEndpoint": { - "description": "DaemonEndpoint contains information about a single Daemon endpoint.", - "required": [ - "Port" - ], - "properties": { - "Port": { - "description": "Port number of the given endpoint.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.core.v1.DownwardAPIProjection": { - "description": "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", - "properties": { - "items": { - "description": "Items is a list of DownwardAPIVolume file", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile" - } - } - } - }, - "io.k8s.api.core.v1.DownwardAPIVolumeFile": { - "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", - "required": [ - "path" - ], - "properties": { - "fieldRef": { - "description": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectFieldSelector" - }, - "mode": { - "description": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "path": { - "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", - "type": "string" - }, - "resourceFieldRef": { - "description": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceFieldSelector" - } - } - }, - "io.k8s.api.core.v1.DownwardAPIVolumeSource": { - "description": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "Items is a list of downward API volume file", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile" - } - } - } - }, - "io.k8s.api.core.v1.EmptyDirVolumeSource": { - "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", - "properties": { - "medium": { - "description": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - "type": "string" - }, - "sizeLimit": { - "description": "Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.api.core.v1.EndpointAddress": { - "description": "EndpointAddress is a tuple that describes single IP address.", - "required": [ - "ip" - ], - "properties": { - "hostname": { - "description": "The Hostname of this endpoint", - "type": "string" - }, - "ip": { - "description": "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", - "type": "string" - }, - "nodeName": { - "description": "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", - "type": "string" - }, - "targetRef": { - "description": "Reference to object providing the endpoint.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - } - } - }, - "io.k8s.api.core.v1.EndpointPort": { - "description": "EndpointPort is a tuple that describes a single port.", - "required": [ - "port" - ], - "properties": { - "name": { - "description": "The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.", - "type": "string" - }, - "port": { - "description": "The port number of the endpoint.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "description": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.EndpointSubset": { - "description": "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]", - "properties": { - "addresses": { - "description": "IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointAddress" - } - }, - "notReadyAddresses": { - "description": "IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointAddress" - } - }, - "ports": { - "description": "Port numbers available on the related IP addresses.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointPort" - } - } - } - }, - "io.k8s.api.core.v1.Endpoints": { - "description": "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "subsets": { - "description": "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointSubset" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.EndpointsList": { - "description": "EndpointsList is a list of endpoints.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of endpoints.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "EndpointsList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.EnvFromSource": { - "description": "EnvFromSource represents the source of a set of ConfigMaps", - "properties": { - "configMapRef": { - "description": "The ConfigMap to select from", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource" - }, - "prefix": { - "description": "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.", - "type": "string" - }, - "secretRef": { - "description": "The Secret to select from", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretEnvSource" - } - } - }, - "io.k8s.api.core.v1.EnvVar": { - "description": "EnvVar represents an environment variable present in a Container.", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "Name of the environment variable. Must be a C_IDENTIFIER.", - "type": "string" - }, - "value": { - "description": "Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".", - "type": "string" - }, - "valueFrom": { - "description": "Source for the environment variable's value. Cannot be used if value is not empty.", - "$ref": "#/definitions/io.k8s.api.core.v1.EnvVarSource" - } - } - }, - "io.k8s.api.core.v1.EnvVarSource": { - "description": "EnvVarSource represents a source for the value of an EnvVar.", - "properties": { - "configMapKeyRef": { - "description": "Selects a key of a ConfigMap.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector" - }, - "fieldRef": { - "description": "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectFieldSelector" - }, - "resourceFieldRef": { - "description": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceFieldSelector" - }, - "secretKeyRef": { - "description": "Selects a key of a secret in the pod's namespace", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" - } - } - }, - "io.k8s.api.core.v1.Event": { - "description": "Event is a report of an event somewhere in the cluster.", - "required": [ - "metadata", - "involvedObject" - ], - "properties": { - "action": { - "description": "What action was taken/failed regarding to the Regarding object.", - "type": "string" - }, - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "count": { - "description": "The number of times this event has occurred.", - "type": "integer", - "format": "int32" - }, - "eventTime": { - "description": "Time when this Event was first observed.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" - }, - "firstTimestamp": { - "description": "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "involvedObject": { - "description": "The object that this event is about.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "lastTimestamp": { - "description": "The time at which the most recent occurrence of this event was recorded.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human-readable description of the status of this operation.", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "reason": { - "description": "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", - "type": "string" - }, - "related": { - "description": "Optional secondary object for more complex actions.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "reportingComponent": { - "description": "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.", - "type": "string" - }, - "reportingInstance": { - "description": "ID of the controller instance, e.g. `kubelet-xyzf`.", - "type": "string" - }, - "series": { - "description": "Data about the Event series this event represents or nil if it's a singleton Event.", - "$ref": "#/definitions/io.k8s.api.core.v1.EventSeries" - }, - "source": { - "description": "The component reporting this event. Should be a short machine understandable string.", - "$ref": "#/definitions/io.k8s.api.core.v1.EventSource" - }, - "type": { - "description": "Type of this event (Normal, Warning), new types could be added in the future", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Event", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.EventList": { - "description": "EventList is a list of events.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of events", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "EventList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.EventSeries": { - "description": "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", - "properties": { - "count": { - "description": "Number of occurrences in this series up to the last heartbeat time", - "type": "integer", - "format": "int32" - }, - "lastObservedTime": { - "description": "Time of the last occurrence observed", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" - }, - "state": { - "description": "State of this Series: Ongoing or Finished", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.EventSource": { - "description": "EventSource contains information for an event.", - "properties": { - "component": { - "description": "Component from which the event is generated.", - "type": "string" - }, - "host": { - "description": "Node name on which the event is generated.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ExecAction": { - "description": "ExecAction describes a \"run in container\" action.", - "properties": { - "command": { - "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.FCVolumeSource": { - "description": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "lun": { - "description": "Optional: FC target lun number", - "type": "integer", - "format": "int32" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "targetWWNs": { - "description": "Optional: FC target worldwide names (WWNs)", - "type": "array", - "items": { - "type": "string" - } - }, - "wwids": { - "description": "Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.FlexPersistentVolumeSource": { - "description": "FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.", - "required": [ - "driver" - ], - "properties": { - "driver": { - "description": "Driver is the name of the driver to use for this volume.", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", - "type": "string" - }, - "options": { - "description": "Optional: Extra command options if any.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - } - } - }, - "io.k8s.api.core.v1.FlexVolumeSource": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - "required": [ - "driver" - ], - "properties": { - "driver": { - "description": "Driver is the name of the driver to use for this volume.", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", - "type": "string" - }, - "options": { - "description": "Optional: Extra command options if any.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - } - } - }, - "io.k8s.api.core.v1.FlockerVolumeSource": { - "description": "Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.", - "properties": { - "datasetName": { - "description": "Name of the dataset stored as metadata -\u003e name on the dataset for Flocker should be considered as deprecated", - "type": "string" - }, - "datasetUUID": { - "description": "UUID of the dataset. This is unique identifier of a Flocker dataset", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.GCEPersistentDiskVolumeSource": { - "description": "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", - "required": [ - "pdName" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "string" - }, - "partition": { - "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "integer", - "format": "int32" - }, - "pdName": { - "description": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.GitRepoVolumeSource": { - "description": "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", - "required": [ - "repository" - ], - "properties": { - "directory": { - "description": "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.", - "type": "string" - }, - "repository": { - "description": "Repository URL", - "type": "string" - }, - "revision": { - "description": "Commit hash for the specified revision.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.GlusterfsPersistentVolumeSource": { - "description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "endpoints", - "path" - ], - "properties": { - "endpoints": { - "description": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "endpointsNamespace": { - "description": "EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "path": { - "description": "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.GlusterfsVolumeSource": { - "description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "endpoints", - "path" - ], - "properties": { - "endpoints": { - "description": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "path": { - "description": "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.HTTPGetAction": { - "description": "HTTPGetAction describes an action based on HTTP Get requests.", - "required": [ - "port" - ], - "properties": { - "host": { - "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", - "type": "string" - }, - "httpHeaders": { - "description": "Custom headers to set in the request. HTTP allows repeated headers.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.HTTPHeader" - } - }, - "path": { - "description": "Path to access on the HTTP server.", - "type": "string" - }, - "port": { - "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "scheme": { - "description": "Scheme to use for connecting to the host. Defaults to HTTP.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.HTTPHeader": { - "description": "HTTPHeader describes a custom header to be used in HTTP probes", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "description": "The header field name", - "type": "string" - }, - "value": { - "description": "The header field value", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Handler": { - "description": "Handler defines a specific action that should be taken", - "properties": { - "exec": { - "description": "One and only one of the following should be specified. Exec specifies the action to take.", - "$ref": "#/definitions/io.k8s.api.core.v1.ExecAction" - }, - "httpGet": { - "description": "HTTPGet specifies the http request to perform.", - "$ref": "#/definitions/io.k8s.api.core.v1.HTTPGetAction" - }, - "tcpSocket": { - "description": "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - "$ref": "#/definitions/io.k8s.api.core.v1.TCPSocketAction" - } - } - }, - "io.k8s.api.core.v1.HostAlias": { - "description": "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.", - "properties": { - "hostnames": { - "description": "Hostnames for the above IP address.", - "type": "array", - "items": { - "type": "string" - } - }, - "ip": { - "description": "IP address of the host file entry.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.HostPathVolumeSource": { - "description": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "type": "string" - }, - "type": { - "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ISCSIPersistentVolumeSource": { - "description": "ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", - "required": [ - "targetPortal", - "iqn", - "lun" - ], - "properties": { - "chapAuthDiscovery": { - "description": "whether support iSCSI Discovery CHAP authentication", - "type": "boolean" - }, - "chapAuthSession": { - "description": "whether support iSCSI Session CHAP authentication", - "type": "boolean" - }, - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", - "type": "string" - }, - "initiatorName": { - "description": "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \u003ctarget portal\u003e:\u003cvolume name\u003e will be created for the connection.", - "type": "string" - }, - "iqn": { - "description": "Target iSCSI Qualified Name.", - "type": "string" - }, - "iscsiInterface": { - "description": "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", - "type": "string" - }, - "lun": { - "description": "iSCSI Target Lun number.", - "type": "integer", - "format": "int32" - }, - "portals": { - "description": "iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "array", - "items": { - "type": "string" - } - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", - "type": "boolean" - }, - "secretRef": { - "description": "CHAP Secret for iSCSI target and initiator authentication", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "targetPortal": { - "description": "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ISCSIVolumeSource": { - "description": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", - "required": [ - "targetPortal", - "iqn", - "lun" - ], - "properties": { - "chapAuthDiscovery": { - "description": "whether support iSCSI Discovery CHAP authentication", - "type": "boolean" - }, - "chapAuthSession": { - "description": "whether support iSCSI Session CHAP authentication", - "type": "boolean" - }, - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", - "type": "string" - }, - "initiatorName": { - "description": "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \u003ctarget portal\u003e:\u003cvolume name\u003e will be created for the connection.", - "type": "string" - }, - "iqn": { - "description": "Target iSCSI Qualified Name.", - "type": "string" - }, - "iscsiInterface": { - "description": "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", - "type": "string" - }, - "lun": { - "description": "iSCSI Target Lun number.", - "type": "integer", - "format": "int32" - }, - "portals": { - "description": "iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "array", - "items": { - "type": "string" - } - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", - "type": "boolean" - }, - "secretRef": { - "description": "CHAP Secret for iSCSI target and initiator authentication", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "targetPortal": { - "description": "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.KeyToPath": { - "description": "Maps a string key to a path within a volume.", - "required": [ - "key", - "path" - ], - "properties": { - "key": { - "description": "The key to project.", - "type": "string" - }, - "mode": { - "description": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "path": { - "description": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Lifecycle": { - "description": "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", - "properties": { - "postStart": { - "description": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - "$ref": "#/definitions/io.k8s.api.core.v1.Handler" - }, - "preStop": { - "description": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - "$ref": "#/definitions/io.k8s.api.core.v1.Handler" - } - } - }, - "io.k8s.api.core.v1.LimitRange": { - "description": "LimitRange sets resource usage limits for each kind of resource in a Namespace.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeSpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.LimitRangeItem": { - "description": "LimitRangeItem defines a min/max usage limit for any resource that matches on kind.", - "properties": { - "default": { - "description": "Default resource requirement limit value by resource name if resource limit is omitted.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "defaultRequest": { - "description": "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "max": { - "description": "Max usage constraints on this kind by resource name.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "maxLimitRequestRatio": { - "description": "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "min": { - "description": "Min usage constraints on this kind by resource name.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "type": { - "description": "Type of resource that this limit applies to.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.LimitRangeList": { - "description": "LimitRangeList is a list of LimitRange items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "LimitRangeList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.LimitRangeSpec": { - "description": "LimitRangeSpec defines a min/max usage limit for resources that match on kind.", - "required": [ - "limits" - ], - "properties": { - "limits": { - "description": "Limits is the list of LimitRangeItem objects that are enforced.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeItem" - } - } - } - }, - "io.k8s.api.core.v1.LoadBalancerIngress": { - "description": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", - "properties": { - "hostname": { - "description": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", - "type": "string" - }, - "ip": { - "description": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.LoadBalancerStatus": { - "description": "LoadBalancerStatus represents the status of a load-balancer.", - "properties": { - "ingress": { - "description": "Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.LoadBalancerIngress" - } - } - } - }, - "io.k8s.api.core.v1.LocalObjectReference": { - "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.LocalVolumeSource": { - "description": "Local represents directly-attached storage with node affinity (Beta feature)", - "required": [ - "path" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a fileystem if unspecified.", - "type": "string" - }, - "path": { - "description": "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.NFSVolumeSource": { - "description": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", - "required": [ - "server", - "path" - ], - "properties": { - "path": { - "description": "Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "boolean" - }, - "server": { - "description": "Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Namespace": { - "description": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceSpec" - }, - "status": { - "description": "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Namespace", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.NamespaceList": { - "description": "NamespaceList is a list of Namespaces.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "NamespaceList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.NamespaceSpec": { - "description": "NamespaceSpec describes the attributes on a Namespace.", - "properties": { - "finalizers": { - "description": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.NamespaceStatus": { - "description": "NamespaceStatus is information about the current status of a Namespace.", - "properties": { - "phase": { - "description": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Node": { - "description": "Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSpec" - }, - "status": { - "description": "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Node", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.NodeAddress": { - "description": "NodeAddress contains information for the node's address.", - "required": [ - "type", - "address" - ], - "properties": { - "address": { - "description": "The node address.", - "type": "string" - }, - "type": { - "description": "Node address type, one of Hostname, ExternalIP or InternalIP.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.NodeAffinity": { - "description": "Node affinity is a group of node affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector" - } - } - }, - "io.k8s.api.core.v1.NodeCondition": { - "description": "NodeCondition contains condition information for a node.", - "required": [ - "type", - "status" - ], - "properties": { - "lastHeartbeatTime": { - "description": "Last time we got an update on a given condition.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transit from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "(brief) reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of node condition.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.NodeConfigSource": { - "description": "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", - "properties": { - "configMap": { - "description": "ConfigMap is a reference to a Node's ConfigMap", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource" - } - } - }, - "io.k8s.api.core.v1.NodeConfigStatus": { - "description": "NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.", - "properties": { - "active": { - "description": "Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigSource" - }, - "assigned": { - "description": "Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigSource" - }, - "error": { - "description": "Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.", - "type": "string" - }, - "lastKnownGood": { - "description": "LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigSource" - } - } - }, - "io.k8s.api.core.v1.NodeDaemonEndpoints": { - "description": "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", - "properties": { - "kubeletEndpoint": { - "description": "Endpoint on which Kubelet is listening.", - "$ref": "#/definitions/io.k8s.api.core.v1.DaemonEndpoint" - } - } - }, - "io.k8s.api.core.v1.NodeList": { - "description": "NodeList is the whole list of all Nodes which have been registered with master.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of nodes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "NodeList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.NodeSelector": { - "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorTerm" - } - } - } - }, - "io.k8s.api.core.v1.NodeSelectorRequirement": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.NodeSelectorTerm": { - "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", - "properties": { - "matchExpressions": { - "description": "A list of node selector requirements by node's labels.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement" - } - }, - "matchFields": { - "description": "A list of node selector requirements by node's fields.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement" - } - } - } - }, - "io.k8s.api.core.v1.NodeSpec": { - "description": "NodeSpec describes the attributes that a node is created with.", - "properties": { - "configSource": { - "description": "If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigSource" - }, - "externalID": { - "description": "Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966", - "type": "string" - }, - "podCIDR": { - "description": "PodCIDR represents the pod IP range assigned to the node.", - "type": "string" - }, - "providerID": { - "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e", - "type": "string" - }, - "taints": { - "description": "If specified, the node's taints.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Taint" - } - }, - "unschedulable": { - "description": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.NodeStatus": { - "description": "NodeStatus is information about the current status of a node.", - "properties": { - "addresses": { - "description": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeAddress" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "allocatable": { - "description": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "capacity": { - "description": "Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "conditions": { - "description": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.NodeCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "config": { - "description": "Status of the config assigned to the node via the dynamic Kubelet config feature.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigStatus" - }, - "daemonEndpoints": { - "description": "Endpoints of daemons running on the Node.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints" - }, - "images": { - "description": "List of container images on this node", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerImage" - } - }, - "nodeInfo": { - "description": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSystemInfo" - }, - "phase": { - "description": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", - "type": "string" - }, - "volumesAttached": { - "description": "List of volumes that are attached to the node.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.AttachedVolume" - } - }, - "volumesInUse": { - "description": "List of attachable volumes in use (mounted) by the node.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.NodeSystemInfo": { - "description": "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", - "required": [ - "machineID", - "systemUUID", - "bootID", - "kernelVersion", - "osImage", - "containerRuntimeVersion", - "kubeletVersion", - "kubeProxyVersion", - "operatingSystem", - "architecture" - ], - "properties": { - "architecture": { - "description": "The Architecture reported by the node", - "type": "string" - }, - "bootID": { - "description": "Boot ID reported by the node.", - "type": "string" - }, - "containerRuntimeVersion": { - "description": "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).", - "type": "string" - }, - "kernelVersion": { - "description": "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", - "type": "string" - }, - "kubeProxyVersion": { - "description": "KubeProxy Version reported by the node.", - "type": "string" - }, - "kubeletVersion": { - "description": "Kubelet Version reported by the node.", - "type": "string" - }, - "machineID": { - "description": "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html", - "type": "string" - }, - "operatingSystem": { - "description": "The Operating System reported by the node", - "type": "string" - }, - "osImage": { - "description": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", - "type": "string" - }, - "systemUUID": { - "description": "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ObjectFieldSelector": { - "description": "ObjectFieldSelector selects an APIVersioned field of an object.", - "required": [ - "fieldPath" - ], - "properties": { - "apiVersion": { - "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", - "type": "string" - }, - "fieldPath": { - "description": "Path of the field to select in the specified API version.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ObjectReference": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "properties": { - "apiVersion": { - "description": "API version of the referent.", - "type": "string" - }, - "fieldPath": { - "description": "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", - "type": "string" - }, - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - "type": "string" - }, - "resourceVersion": { - "description": "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "uid": { - "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PersistentVolume": { - "description": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec" - }, - "status": { - "description": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PersistentVolume", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PersistentVolumeClaim": { - "description": "PersistentVolumeClaim is a user's request for and claim to a persistent volume", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec" - }, - "status": { - "description": "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PersistentVolumeClaim", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PersistentVolumeClaimCondition": { - "description": "PersistentVolumeClaimCondition contails details about state of pvc", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Last time we probed the condition.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PersistentVolumeClaimList": { - "description": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PersistentVolumeClaimList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PersistentVolumeClaimSpec": { - "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", - "properties": { - "accessModes": { - "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - "type": "array", - "items": { - "type": "string" - } - }, - "dataSource": { - "description": "This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", - "$ref": "#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference" - }, - "resources": { - "description": "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements" - }, - "selector": { - "description": "A label query over volumes to consider for binding.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "storageClassName": { - "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", - "type": "string" - }, - "volumeMode": { - "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.", - "type": "string" - }, - "volumeName": { - "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PersistentVolumeClaimStatus": { - "description": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", - "properties": { - "accessModes": { - "description": "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - "type": "array", - "items": { - "type": "string" - } - }, - "capacity": { - "description": "Represents the actual resources of the underlying volume.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "conditions": { - "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "phase": { - "description": "Phase represents the current phase of PersistentVolumeClaim.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource": { - "description": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", - "required": [ - "claimName" - ], - "properties": { - "claimName": { - "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "type": "string" - }, - "readOnly": { - "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.PersistentVolumeList": { - "description": "PersistentVolumeList is a list of PersistentVolume items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PersistentVolumeList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PersistentVolumeSpec": { - "description": "PersistentVolumeSpec is the specification of a persistent volume.", - "properties": { - "accessModes": { - "description": "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes", - "type": "array", - "items": { - "type": "string" - } - }, - "awsElasticBlockStore": { - "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "$ref": "#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource" - }, - "azureDisk": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource" - }, - "azureFile": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource" - }, - "capacity": { - "description": "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "cephfs": { - "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource" - }, - "cinder": { - "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.CinderPersistentVolumeSource" - }, - "claimRef": { - "description": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "csi": { - "description": "CSI represents storage that handled by an external CSI driver (Beta feature).", - "$ref": "#/definitions/io.k8s.api.core.v1.CSIPersistentVolumeSource" - }, - "fc": { - "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.FCVolumeSource" - }, - "flexVolume": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - "$ref": "#/definitions/io.k8s.api.core.v1.FlexPersistentVolumeSource" - }, - "flocker": { - "description": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", - "$ref": "#/definitions/io.k8s.api.core.v1.FlockerVolumeSource" - }, - "gcePersistentDisk": { - "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "$ref": "#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource" - }, - "glusterfs": { - "description": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.GlusterfsPersistentVolumeSource" - }, - "hostPath": { - "description": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "$ref": "#/definitions/io.k8s.api.core.v1.HostPathVolumeSource" - }, - "iscsi": { - "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - "$ref": "#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource" - }, - "local": { - "description": "Local represents directly-attached storage with node affinity", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalVolumeSource" - }, - "mountOptions": { - "description": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options", - "type": "array", - "items": { - "type": "string" - } - }, - "nfs": { - "description": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "$ref": "#/definitions/io.k8s.api.core.v1.NFSVolumeSource" - }, - "nodeAffinity": { - "description": "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.", - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity" - }, - "persistentVolumeReclaimPolicy": { - "description": "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", - "type": "string" - }, - "photonPersistentDisk": { - "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource" - }, - "portworxVolume": { - "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.PortworxVolumeSource" - }, - "quobyte": { - "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource" - }, - "rbd": { - "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.RBDPersistentVolumeSource" - }, - "scaleIO": { - "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource" - }, - "storageClassName": { - "description": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", - "type": "string" - }, - "storageos": { - "description": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource" - }, - "volumeMode": { - "description": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.", - "type": "string" - }, - "vsphereVolume": { - "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource" - } - } - }, - "io.k8s.api.core.v1.PersistentVolumeStatus": { - "description": "PersistentVolumeStatus is the current status of a persistent volume.", - "properties": { - "message": { - "description": "A human-readable message indicating details about why the volume is in this state.", - "type": "string" - }, - "phase": { - "description": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", - "type": "string" - }, - "reason": { - "description": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource": { - "description": "Represents a Photon Controller persistent disk resource.", - "required": [ - "pdID" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "pdID": { - "description": "ID that identifies Photon Controller persistent disk", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Pod": { - "description": "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.PodSpec" - }, - "status": { - "description": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.PodStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Pod", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PodAffinity": { - "description": "Pod affinity is a group of inter pod affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinityTerm" - } - } - } - }, - "io.k8s.api.core.v1.PodAffinityTerm": { - "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", - "required": [ - "topologyKey" - ], - "properties": { - "labelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "namespaces": { - "description": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - "type": "array", - "items": { - "type": "string" - } - }, - "topologyKey": { - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PodAntiAffinity": { - "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinityTerm" - } - } - } - }, - "io.k8s.api.core.v1.PodCondition": { - "description": "PodCondition contains details for the current condition of this pod.", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Last time we probed the condition.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PodDNSConfig": { - "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", - "properties": { - "nameservers": { - "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", - "type": "array", - "items": { - "type": "string" - } - }, - "options": { - "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodDNSConfigOption" - } - }, - "searches": { - "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.PodDNSConfigOption": { - "description": "PodDNSConfigOption defines DNS resolver options of a pod.", - "properties": { - "name": { - "description": "Required.", - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PodList": { - "description": "PodList is a list of Pods.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PodList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PodReadinessGate": { - "description": "PodReadinessGate contains the reference to a pod condition", - "required": [ - "conditionType" - ], - "properties": { - "conditionType": { - "description": "ConditionType refers to a condition in the pod's condition list with matching type.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PodSecurityContext": { - "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", - "properties": { - "fsGroup": { - "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.", - "type": "integer", - "format": "int64" - }, - "runAsGroup": { - "description": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "type": "integer", - "format": "int64" - }, - "runAsNonRoot": { - "description": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "boolean" - }, - "runAsUser": { - "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "type": "integer", - "format": "int64" - }, - "seLinuxOptions": { - "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "$ref": "#/definitions/io.k8s.api.core.v1.SELinuxOptions" - }, - "supplementalGroups": { - "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "sysctls": { - "description": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Sysctl" - } - } - } - }, - "io.k8s.api.core.v1.PodSpec": { - "description": "PodSpec is a description of a pod.", - "required": [ - "containers" - ], - "properties": { - "activeDeadlineSeconds": { - "description": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", - "type": "integer", - "format": "int64" - }, - "affinity": { - "description": "If specified, the pod's scheduling constraints", - "$ref": "#/definitions/io.k8s.api.core.v1.Affinity" - }, - "automountServiceAccountToken": { - "description": "AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.", - "type": "boolean" - }, - "containers": { - "description": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Container" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "dnsConfig": { - "description": "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodDNSConfig" - }, - "dnsPolicy": { - "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", - "type": "string" - }, - "enableServiceLinks": { - "description": "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", - "type": "boolean" - }, - "hostAliases": { - "description": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.HostAlias" - }, - "x-kubernetes-patch-merge-key": "ip", - "x-kubernetes-patch-strategy": "merge" - }, - "hostIPC": { - "description": "Use the host's ipc namespace. Optional: Default to false.", - "type": "boolean" - }, - "hostNetwork": { - "description": "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", - "type": "boolean" - }, - "hostPID": { - "description": "Use the host's pid namespace. Optional: Default to false.", - "type": "boolean" - }, - "hostname": { - "description": "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", - "type": "string" - }, - "imagePullSecrets": { - "description": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "initContainers": { - "description": "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Container" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "nodeName": { - "description": "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", - "type": "string" - }, - "nodeSelector": { - "description": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "priority": { - "description": "The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.", - "type": "integer", - "format": "int32" - }, - "priorityClassName": { - "description": "If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.", - "type": "string" - }, - "readinessGates": { - "description": "If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodReadinessGate" - } - }, - "restartPolicy": { - "description": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy", - "type": "string" - }, - "runtimeClassName": { - "description": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md This is an alpha feature and may change in the future.", - "type": "string" - }, - "schedulerName": { - "description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.", - "type": "string" - }, - "securityContext": { - "description": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodSecurityContext" - }, - "serviceAccount": { - "description": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", - "type": "string" - }, - "serviceAccountName": { - "description": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - "type": "string" - }, - "shareProcessNamespace": { - "description": "Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.", - "type": "boolean" - }, - "subdomain": { - "description": "If specified, the fully qualified Pod hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the pod will not have a domainname at all.", - "type": "string" - }, - "terminationGracePeriodSeconds": { - "description": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", - "type": "integer", - "format": "int64" - }, - "tolerations": { - "description": "If specified, the pod's tolerations.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Toleration" - } - }, - "volumes": { - "description": "List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Volume" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge,retainKeys" - } - } - }, - "io.k8s.api.core.v1.PodStatus": { - "description": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.", - "properties": { - "conditions": { - "description": "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "containerStatuses": { - "description": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStatus" - } - }, - "hostIP": { - "description": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", - "type": "string" - }, - "initContainerStatuses": { - "description": "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStatus" - } - }, - "message": { - "description": "A human readable message indicating details about why the pod is in this condition.", - "type": "string" - }, - "nominatedNodeName": { - "description": "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", - "type": "string" - }, - "phase": { - "description": "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", - "type": "string" - }, - "podIP": { - "description": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", - "type": "string" - }, - "qosClass": { - "description": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", - "type": "string" - }, - "reason": { - "description": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'", - "type": "string" - }, - "startTime": { - "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.api.core.v1.PodTemplate": { - "description": "PodTemplate describes a template for creating copies of a predefined pod.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "template": { - "description": "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PodTemplate", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PodTemplateList": { - "description": "PodTemplateList is a list of PodTemplates.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of pod templates", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "PodTemplateList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.PodTemplateSpec": { - "description": "PodTemplateSpec describes the data a pod should have when created from a template", - "properties": { - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.PodSpec" - } - } - }, - "io.k8s.api.core.v1.PortworxVolumeSource": { - "description": "PortworxVolumeSource represents a Portworx volume resource.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "volumeID": { - "description": "VolumeID uniquely identifies a Portworx volume", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.PreferredSchedulingTerm": { - "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - "required": [ - "weight", - "preference" - ], - "properties": { - "preference": { - "description": "A node selector term, associated with the corresponding weight.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorTerm" - }, - "weight": { - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.core.v1.Probe": { - "description": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", - "properties": { - "exec": { - "description": "One and only one of the following should be specified. Exec specifies the action to take.", - "$ref": "#/definitions/io.k8s.api.core.v1.ExecAction" - }, - "failureThreshold": { - "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "httpGet": { - "description": "HTTPGet specifies the http request to perform.", - "$ref": "#/definitions/io.k8s.api.core.v1.HTTPGetAction" - }, - "initialDelaySeconds": { - "description": "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "type": "integer", - "format": "int32" - }, - "periodSeconds": { - "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "successThreshold": { - "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "tcpSocket": { - "description": "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - "$ref": "#/definitions/io.k8s.api.core.v1.TCPSocketAction" - }, - "timeoutSeconds": { - "description": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.core.v1.ProjectedVolumeSource": { - "description": "Represents a projected volume source", - "required": [ - "sources" - ], - "properties": { - "defaultMode": { - "description": "Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "sources": { - "description": "list of volume projections", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeProjection" - } - } - } - }, - "io.k8s.api.core.v1.QuobyteVolumeSource": { - "description": "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", - "required": [ - "registry", - "volume" - ], - "properties": { - "group": { - "description": "Group to map volume access to Default is no group", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", - "type": "boolean" - }, - "registry": { - "description": "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", - "type": "string" - }, - "user": { - "description": "User to map volume access to Defaults to serivceaccount user", - "type": "string" - }, - "volume": { - "description": "Volume is a string that references an already created Quobyte volume by name.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.RBDPersistentVolumeSource": { - "description": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "required": [ - "monitors", - "image" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - "type": "string" - }, - "image": { - "description": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "keyring": { - "description": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "monitors": { - "description": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "pool": { - "description": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "user": { - "description": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.RBDVolumeSource": { - "description": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "required": [ - "monitors", - "image" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - "type": "string" - }, - "image": { - "description": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "keyring": { - "description": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "monitors": { - "description": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "pool": { - "description": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "user": { - "description": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ReplicationController": { - "description": "ReplicationController represents the configuration of a replication controller.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec" - }, - "status": { - "description": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ReplicationController", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ReplicationControllerCondition": { - "description": "ReplicationControllerCondition describes the state of a replication controller at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replication controller condition.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ReplicationControllerList": { - "description": "ReplicationControllerList is a collection of replication controllers.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ReplicationControllerList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ReplicationControllerSpec": { - "description": "ReplicationControllerSpec is the specification of a replication controller.", - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.core.v1.ReplicationControllerStatus": { - "description": "ReplicationControllerStatus represents the current status of a replication controller.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replication controller.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replication controller's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replication controller.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed replication controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replication controller.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.core.v1.ResourceFieldSelector": { - "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", - "required": [ - "resource" - ], - "properties": { - "containerName": { - "description": "Container name: required for volumes, optional for env vars", - "type": "string" - }, - "divisor": { - "description": "Specifies the output format of the exposed resources, defaults to \"1\"", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "resource": { - "description": "Required: resource to select", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ResourceQuota": { - "description": "ResourceQuota sets aggregate quota restrictions enforced per namespace", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec" - }, - "status": { - "description": "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ResourceQuota", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ResourceQuotaList": { - "description": "ResourceQuotaList is a list of ResourceQuota items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ResourceQuotaList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ResourceQuotaSpec": { - "description": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", - "properties": { - "hard": { - "description": "hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "scopeSelector": { - "description": "scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.", - "$ref": "#/definitions/io.k8s.api.core.v1.ScopeSelector" - }, - "scopes": { - "description": "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.ResourceQuotaStatus": { - "description": "ResourceQuotaStatus defines the enforced hard limits and observed use.", - "properties": { - "hard": { - "description": "Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "used": { - "description": "Used is the current observed total usage of the resource in the namespace.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - } - }, - "io.k8s.api.core.v1.ResourceRequirements": { - "description": "ResourceRequirements describes the compute resource requirements.", - "properties": { - "limits": { - "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "requests": { - "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - } - }, - "io.k8s.api.core.v1.SELinuxOptions": { - "description": "SELinuxOptions are the labels to be applied to the container", - "properties": { - "level": { - "description": "Level is SELinux level label that applies to the container.", - "type": "string" - }, - "role": { - "description": "Role is a SELinux role label that applies to the container.", - "type": "string" - }, - "type": { - "description": "Type is a SELinux type label that applies to the container.", - "type": "string" - }, - "user": { - "description": "User is a SELinux user label that applies to the container.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ScaleIOPersistentVolumeSource": { - "description": "ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume", - "required": [ - "gateway", - "system", - "secretRef" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"", - "type": "string" - }, - "gateway": { - "description": "The host address of the ScaleIO API Gateway.", - "type": "string" - }, - "protectionDomain": { - "description": "The name of the ScaleIO Protection Domain for the configured storage.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretReference" - }, - "sslEnabled": { - "description": "Flag to enable/disable SSL communication with Gateway, default false", - "type": "boolean" - }, - "storageMode": { - "description": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", - "type": "string" - }, - "storagePool": { - "description": "The ScaleIO Storage Pool associated with the protection domain.", - "type": "string" - }, - "system": { - "description": "The name of the storage system as configured in ScaleIO.", - "type": "string" - }, - "volumeName": { - "description": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ScaleIOVolumeSource": { - "description": "ScaleIOVolumeSource represents a persistent ScaleIO volume", - "required": [ - "gateway", - "system", - "secretRef" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".", - "type": "string" - }, - "gateway": { - "description": "The host address of the ScaleIO API Gateway.", - "type": "string" - }, - "protectionDomain": { - "description": "The name of the ScaleIO Protection Domain for the configured storage.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "sslEnabled": { - "description": "Flag to enable/disable SSL communication with Gateway, default false", - "type": "boolean" - }, - "storageMode": { - "description": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", - "type": "string" - }, - "storagePool": { - "description": "The ScaleIO Storage Pool associated with the protection domain.", - "type": "string" - }, - "system": { - "description": "The name of the storage system as configured in ScaleIO.", - "type": "string" - }, - "volumeName": { - "description": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ScopeSelector": { - "description": "A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.", - "properties": { - "matchExpressions": { - "description": "A list of scope selector requirements by scope of the resources.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ScopedResourceSelectorRequirement" - } - } - } - }, - "io.k8s.api.core.v1.ScopedResourceSelectorRequirement": { - "description": "A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.", - "required": [ - "scopeName", - "operator" - ], - "properties": { - "operator": { - "description": "Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.", - "type": "string" - }, - "scopeName": { - "description": "The name of the scope that the selector applies to.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.Secret": { - "description": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", - "type": "object", - "additionalProperties": { - "type": "string", - "format": "byte" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "stringData": { - "description": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "type": { - "description": "Used to facilitate programmatic handling of secret data.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Secret", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.SecretEnvSource": { - "description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.SecretKeySelector": { - "description": "SecretKeySelector selects a key of a Secret.", - "required": [ - "key" - ], - "properties": { - "key": { - "description": "The key of the secret to select from. Must be a valid secret key.", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret or it's key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.SecretList": { - "description": "SecretList is a list of Secret.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "SecretList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.SecretProjection": { - "description": "Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.", - "properties": { - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret or its key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.api.core.v1.SecretReference": { - "description": "SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace", - "properties": { - "name": { - "description": "Name is unique within a namespace to reference a secret resource.", - "type": "string" - }, - "namespace": { - "description": "Namespace defines the space within which the secret name must be unique.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.SecretVolumeSource": { - "description": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath" - } - }, - "optional": { - "description": "Specify whether the Secret or it's keys must be defined", - "type": "boolean" - }, - "secretName": { - "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.SecurityContext": { - "description": "SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.", - "properties": { - "allowPrivilegeEscalation": { - "description": "AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN", - "type": "boolean" - }, - "capabilities": { - "description": "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", - "$ref": "#/definitions/io.k8s.api.core.v1.Capabilities" - }, - "privileged": { - "description": "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", - "type": "boolean" - }, - "procMount": { - "description": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.", - "type": "string" - }, - "readOnlyRootFilesystem": { - "description": "Whether this container has a read-only root filesystem. Default is false.", - "type": "boolean" - }, - "runAsGroup": { - "description": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "integer", - "format": "int64" - }, - "runAsNonRoot": { - "description": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "boolean" - }, - "runAsUser": { - "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "integer", - "format": "int64" - }, - "seLinuxOptions": { - "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "$ref": "#/definitions/io.k8s.api.core.v1.SELinuxOptions" - } - } - }, - "io.k8s.api.core.v1.Service": { - "description": "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceSpec" - }, - "status": { - "description": "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Service", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ServiceAccount": { - "description": "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "automountServiceAccountToken": { - "description": "AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.", - "type": "boolean" - }, - "imagePullSecrets": { - "description": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "secrets": { - "description": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ServiceAccount", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ServiceAccountList": { - "description": "ServiceAccountList is a list of ServiceAccount objects", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ServiceAccountList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ServiceAccountTokenProjection": { - "description": "ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).", - "required": [ - "path" - ], - "properties": { - "audience": { - "description": "Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.", - "type": "string" - }, - "expirationSeconds": { - "description": "ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.", - "type": "integer", - "format": "int64" - }, - "path": { - "description": "Path is the path relative to the mount point of the file to project the token into.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ServiceList": { - "description": "ServiceList holds a list of services.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of services", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "ServiceList", - "version": "v1" - } - ] - }, - "io.k8s.api.core.v1.ServicePort": { - "description": "ServicePort contains information on service's port.", - "required": [ - "port" - ], - "properties": { - "name": { - "description": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", - "type": "string" - }, - "nodePort": { - "description": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", - "type": "integer", - "format": "int32" - }, - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "description": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.", - "type": "string" - }, - "targetPort": { - "description": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.core.v1.ServiceSpec": { - "description": "ServiceSpec describes the attributes that a user creates on a service.", - "properties": { - "clusterIP": { - "description": "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "string" - }, - "externalIPs": { - "description": "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.", - "type": "array", - "items": { - "type": "string" - } - }, - "externalName": { - "description": "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.", - "type": "string" - }, - "externalTrafficPolicy": { - "description": "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.", - "type": "string" - }, - "healthCheckNodePort": { - "description": "healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.", - "type": "integer", - "format": "int32" - }, - "loadBalancerIP": { - "description": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", - "type": "string" - }, - "loadBalancerSourceRanges": { - "description": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/", - "type": "array", - "items": { - "type": "string" - } - }, - "ports": { - "description": "The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServicePort" - }, - "x-kubernetes-patch-merge-key": "port", - "x-kubernetes-patch-strategy": "merge" - }, - "publishNotReadyAddresses": { - "description": "publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.", - "type": "boolean" - }, - "selector": { - "description": "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "sessionAffinity": { - "description": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "string" - }, - "sessionAffinityConfig": { - "description": "sessionAffinityConfig contains the configurations of session affinity.", - "$ref": "#/definitions/io.k8s.api.core.v1.SessionAffinityConfig" - }, - "type": { - "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.ServiceStatus": { - "description": "ServiceStatus represents the current status of a service.", - "properties": { - "loadBalancer": { - "description": "LoadBalancer contains the current status of the load-balancer, if one is present.", - "$ref": "#/definitions/io.k8s.api.core.v1.LoadBalancerStatus" - } - } - }, - "io.k8s.api.core.v1.SessionAffinityConfig": { - "description": "SessionAffinityConfig represents the configurations of session affinity.", - "properties": { - "clientIP": { - "description": "clientIP contains the configurations of Client IP based session affinity.", - "$ref": "#/definitions/io.k8s.api.core.v1.ClientIPConfig" - } - } - }, - "io.k8s.api.core.v1.StorageOSPersistentVolumeSource": { - "description": "Represents a StorageOS persistent volume resource.", - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "volumeName": { - "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - "type": "string" - }, - "volumeNamespace": { - "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.StorageOSVolumeSource": { - "description": "Represents a StorageOS persistent volume resource.", - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "volumeName": { - "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - "type": "string" - }, - "volumeNamespace": { - "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Sysctl": { - "description": "Sysctl defines a kernel parameter to be set", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "description": "Name of a property to set", - "type": "string" - }, - "value": { - "description": "Value of a property to set", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.TCPSocketAction": { - "description": "TCPSocketAction describes an action based on opening a socket", - "required": [ - "port" - ], - "properties": { - "host": { - "description": "Optional: Host name to connect to, defaults to the pod IP.", - "type": "string" - }, - "port": { - "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.core.v1.Taint": { - "description": "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.", - "required": [ - "key", - "effect" - ], - "properties": { - "effect": { - "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Required. The taint key to be applied to a node.", - "type": "string" - }, - "timeAdded": { - "description": "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "value": { - "description": "Required. The taint value corresponding to the taint key.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Toleration": { - "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", - "properties": { - "effect": { - "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", - "type": "string" - }, - "operator": { - "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - "type": "string" - }, - "tolerationSeconds": { - "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", - "type": "integer", - "format": "int64" - }, - "value": { - "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.TopologySelectorLabelRequirement": { - "description": "A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.", - "required": [ - "key", - "values" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "values": { - "description": "An array of string values. One value must match the label to be selected. Each entry in Values is ORed.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.core.v1.TopologySelectorTerm": { - "description": "A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.", - "properties": { - "matchLabelExpressions": { - "description": "A list of topology selector requirements by labels.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.TopologySelectorLabelRequirement" - } - } - } - }, - "io.k8s.api.core.v1.TypedLocalObjectReference": { - "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", - "type": "string" - }, - "kind": { - "description": "Kind is the type of resource being referenced", - "type": "string" - }, - "name": { - "description": "Name is the name of resource being referenced", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.Volume": { - "description": "Volume represents a named volume in a pod that may be accessed by any container in the pod.", - "required": [ - "name" - ], - "properties": { - "awsElasticBlockStore": { - "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "$ref": "#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource" - }, - "azureDisk": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource" - }, - "azureFile": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource" - }, - "cephfs": { - "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.api.core.v1.CephFSVolumeSource" - }, - "cinder": { - "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.CinderVolumeSource" - }, - "configMap": { - "description": "ConfigMap represents a configMap that should populate this volume", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource" - }, - "downwardAPI": { - "description": "DownwardAPI represents downward API about the pod that should populate this volume", - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource" - }, - "emptyDir": { - "description": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - "$ref": "#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource" - }, - "fc": { - "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - "$ref": "#/definitions/io.k8s.api.core.v1.FCVolumeSource" - }, - "flexVolume": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - "$ref": "#/definitions/io.k8s.api.core.v1.FlexVolumeSource" - }, - "flocker": { - "description": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", - "$ref": "#/definitions/io.k8s.api.core.v1.FlockerVolumeSource" - }, - "gcePersistentDisk": { - "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "$ref": "#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource" - }, - "gitRepo": { - "description": "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", - "$ref": "#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource" - }, - "glusterfs": { - "description": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource" - }, - "hostPath": { - "description": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "$ref": "#/definitions/io.k8s.api.core.v1.HostPathVolumeSource" - }, - "iscsi": { - "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource" - }, - "name": { - "description": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "nfs": { - "description": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "$ref": "#/definitions/io.k8s.api.core.v1.NFSVolumeSource" - }, - "persistentVolumeClaim": { - "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource" - }, - "photonPersistentDisk": { - "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource" - }, - "portworxVolume": { - "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.PortworxVolumeSource" - }, - "projected": { - "description": "Items for all in one resources secrets, configmaps, and downward API", - "$ref": "#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource" - }, - "quobyte": { - "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource" - }, - "rbd": { - "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - "$ref": "#/definitions/io.k8s.api.core.v1.RBDVolumeSource" - }, - "scaleIO": { - "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource" - }, - "secret": { - "description": "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretVolumeSource" - }, - "storageos": { - "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource" - }, - "vsphereVolume": { - "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource" - } - } - }, - "io.k8s.api.core.v1.VolumeDevice": { - "description": "volumeDevice describes a mapping of a raw block device within a container.", - "required": [ - "name", - "devicePath" - ], - "properties": { - "devicePath": { - "description": "devicePath is the path inside of the container that the device will be mapped to.", - "type": "string" - }, - "name": { - "description": "name must match the name of a persistentVolumeClaim in the pod", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.VolumeMount": { - "description": "VolumeMount describes a mounting of a Volume within a container.", - "required": [ - "name", - "mountPath" - ], - "properties": { - "mountPath": { - "description": "Path within the container at which the volume should be mounted. Must not contain ':'.", - "type": "string" - }, - "mountPropagation": { - "description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.", - "type": "string" - }, - "name": { - "description": "This must match the Name of a Volume.", - "type": "string" - }, - "readOnly": { - "description": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.", - "type": "boolean" - }, - "subPath": { - "description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.VolumeNodeAffinity": { - "description": "VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.", - "properties": { - "required": { - "description": "Required specifies hard node constraints that must be met.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector" - } - } - }, - "io.k8s.api.core.v1.VolumeProjection": { - "description": "Projection that may be projected along with other supported volume types", - "properties": { - "configMap": { - "description": "information about the configMap data to project", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapProjection" - }, - "downwardAPI": { - "description": "information about the downwardAPI data to project", - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIProjection" - }, - "secret": { - "description": "information about the secret data to project", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretProjection" - }, - "serviceAccountToken": { - "description": "information about the serviceAccountToken data to project", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection" - } - } - }, - "io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource": { - "description": "Represents a vSphere volume resource.", - "required": [ - "volumePath" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "storagePolicyID": { - "description": "Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.", - "type": "string" - }, - "storagePolicyName": { - "description": "Storage Policy Based Management (SPBM) profile name.", - "type": "string" - }, - "volumePath": { - "description": "Path that identifies vSphere volume vmdk", - "type": "string" - } - } - }, - "io.k8s.api.core.v1.WeightedPodAffinityTerm": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "required": [ - "weight", - "podAffinityTerm" - ], - "properties": { - "podAffinityTerm": { - "description": "Required. A pod affinity term, associated with the corresponding weight.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.AllowedFlexVolume": { - "description": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.", - "required": [ - "driver" - ], - "properties": { - "driver": { - "description": "driver is the name of the Flexvolume driver.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.AllowedHostPath": { - "description": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.", - "properties": { - "pathPrefix": { - "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", - "type": "string" - }, - "readOnly": { - "description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", - "type": "boolean" - } - } - }, - "io.k8s.api.extensions.v1beta1.DaemonSet": { - "description": "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec" - }, - "status": { - "description": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "DaemonSet", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.DaemonSetCondition": { - "description": "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of DaemonSet condition.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.DaemonSetList": { - "description": "DaemonSetList is a collection of daemon sets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of daemon sets.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "DaemonSetList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.DaemonSetSpec": { - "description": "DaemonSetSpec is the specification of a daemon set.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "templateGeneration": { - "description": "DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.", - "type": "integer", - "format": "int64" - }, - "updateStrategy": { - "description": "An update strategy to replace existing DaemonSet pods with new pods.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy" - } - } - }, - "io.k8s.api.extensions.v1beta1.DaemonSetStatus": { - "description": "DaemonSetStatus represents the current status of a daemon set.", - "required": [ - "currentNumberScheduled", - "numberMisscheduled", - "desiredNumberScheduled", - "numberReady" - ], - "properties": { - "collisionCount": { - "description": "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a DaemonSet's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "currentNumberScheduled": { - "description": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "desiredNumberScheduled": { - "description": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberAvailable": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "numberMisscheduled": { - "description": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberReady": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - "type": "integer", - "format": "int32" - }, - "numberUnavailable": { - "description": "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "The most recent generation observed by the daemon set controller.", - "type": "integer", - "format": "int64" - }, - "updatedNumberScheduled": { - "description": "The total number of nodes that are running updated daemon pod", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy": { - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if type = \"RollingUpdate\".", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet" - }, - "type": { - "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.Deployment": { - "description": "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "Deployment", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "DeploymentList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.DeploymentRollback": { - "description": "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", - "required": [ - "name", - "rollbackTo" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Required: This must match the Name of a deployment.", - "type": "string" - }, - "rollbackTo": { - "description": "The config of this deployment rollback.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig" - }, - "updatedAnnotations": { - "description": "The annotations to be updated to a deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "DeploymentRollback", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused and will not be processed by the deployment controller.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"no deadline\".", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"retaining all old RelicaSets\".", - "type": "integer", - "format": "int32" - }, - "rollbackTo": { - "description": "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "x-kubernetes-patch-strategy": "retainKeys", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.extensions.v1beta1.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions": { - "description": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.", - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.HTTPIngressPath": { - "description": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", - "required": [ - "backend" - ], - "properties": { - "backend": { - "description": "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend" - }, - "path": { - "description": "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue": { - "description": "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\u003chost\u003e/\u003cpath\u003e?\u003csearchpart\u003e -\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", - "required": [ - "paths" - ], - "properties": { - "paths": { - "description": "A collection of paths that map requests to backends.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.HostPortRange": { - "description": "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "max is the end of the range, inclusive.", - "type": "integer", - "format": "int32" - }, - "min": { - "description": "min is the start of the range, inclusive.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.IDRange": { - "description": "IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "max is the end of the range, inclusive.", - "type": "integer", - "format": "int64" - }, - "min": { - "description": "min is the start of the range, inclusive.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.extensions.v1beta1.IPBlock": { - "description": "DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", - "required": [ - "cidr" - ], - "properties": { - "cidr": { - "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", - "type": "string" - }, - "except": { - "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.Ingress": { - "description": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec" - }, - "status": { - "description": "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "Ingress", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.IngressBackend": { - "description": "IngressBackend describes all endpoints for a given service and port.", - "required": [ - "serviceName", - "servicePort" - ], - "properties": { - "serviceName": { - "description": "Specifies the name of the referenced service.", - "type": "string" - }, - "servicePort": { - "description": "Specifies the port of the referenced service.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.extensions.v1beta1.IngressList": { - "description": "IngressList is a collection of Ingress.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Ingress.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "IngressList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.IngressRule": { - "description": "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", - "properties": { - "host": { - "description": "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.", - "type": "string" - }, - "http": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue" - } - } - }, - "io.k8s.api.extensions.v1beta1.IngressSpec": { - "description": "IngressSpec describes the Ingress the user wishes to exist.", - "properties": { - "backend": { - "description": "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend" - }, - "rules": { - "description": "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressRule" - } - }, - "tls": { - "description": "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.IngressStatus": { - "description": "IngressStatus describe the current state of the Ingress.", - "properties": { - "loadBalancer": { - "description": "LoadBalancer contains the current status of the load-balancer.", - "$ref": "#/definitions/io.k8s.api.core.v1.LoadBalancerStatus" - } - } - }, - "io.k8s.api.extensions.v1beta1.IngressTLS": { - "description": "IngressTLS describes the transport layer security associated with an Ingress.", - "properties": { - "hosts": { - "description": "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretName": { - "description": "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicy": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior for this NetworkPolicy.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "NetworkPolicy", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", - "properties": { - "ports": { - "description": "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort" - } - }, - "to": { - "description": "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.", - "properties": { - "from": { - "description": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer" - } - }, - "ports": { - "description": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicyList": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "NetworkPolicyList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicyPeer": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.", - "properties": { - "ipBlock": { - "description": "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IPBlock" - }, - "namespaceSelector": { - "description": "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "podSelector": { - "description": "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicyPort": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", - "properties": { - "port": { - "description": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "protocol": { - "description": "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.NetworkPolicySpec": { - "description": "DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.", - "required": [ - "podSelector" - ], - "properties": { - "egress": { - "description": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule" - } - }, - "ingress": { - "description": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule" - } - }, - "podSelector": { - "description": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "policyTypes": { - "description": "List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.PodSecurityPolicy": { - "description": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "spec defines the policy enforced.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.PodSecurityPolicyList": { - "description": "PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "PodSecurityPolicyList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec": { - "description": "PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.", - "required": [ - "seLinux", - "runAsUser", - "supplementalGroups", - "fsGroup" - ], - "properties": { - "allowPrivilegeEscalation": { - "description": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", - "type": "boolean" - }, - "allowedCapabilities": { - "description": "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", - "type": "array", - "items": { - "type": "string" - } - }, - "allowedFlexVolumes": { - "description": "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.AllowedFlexVolume" - } - }, - "allowedHostPaths": { - "description": "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.AllowedHostPath" - } - }, - "allowedProcMountTypes": { - "description": "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", - "type": "array", - "items": { - "type": "string" - } - }, - "allowedUnsafeSysctls": { - "description": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", - "type": "array", - "items": { - "type": "string" - } - }, - "defaultAddCapabilities": { - "description": "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", - "type": "array", - "items": { - "type": "string" - } - }, - "defaultAllowPrivilegeEscalation": { - "description": "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - "type": "boolean" - }, - "forbiddenSysctls": { - "description": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", - "type": "array", - "items": { - "type": "string" - } - }, - "fsGroup": { - "description": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions" - }, - "hostIPC": { - "description": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - "type": "boolean" - }, - "hostNetwork": { - "description": "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - "type": "boolean" - }, - "hostPID": { - "description": "hostPID determines if the policy allows the use of HostPID in the pod spec.", - "type": "boolean" - }, - "hostPorts": { - "description": "hostPorts determines which host port ranges are allowed to be exposed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange" - } - }, - "privileged": { - "description": "privileged determines if a pod can request to be run as privileged.", - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "description": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - "type": "boolean" - }, - "requiredDropCapabilities": { - "description": "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - "type": "array", - "items": { - "type": "string" - } - }, - "runAsGroup": { - "description": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions" - }, - "runAsUser": { - "description": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions" - }, - "seLinux": { - "description": "seLinux is the strategy that will dictate the allowable labels that may be set.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions" - }, - "supplementalGroups": { - "description": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions" - }, - "volumes": { - "description": "volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.extensions.v1beta1.ReplicaSet": { - "description": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec" - }, - "status": { - "description": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "ReplicaSet", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.ReplicaSetCondition": { - "description": "ReplicaSetCondition describes the state of a replica set at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replica set condition.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.ReplicaSetList": { - "description": "ReplicaSetList is a collection of ReplicaSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "ReplicaSetList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.ReplicaSetSpec": { - "description": "ReplicaSetSpec is the specification of a ReplicaSet.", - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - } - } - }, - "io.k8s.api.extensions.v1beta1.ReplicaSetStatus": { - "description": "ReplicaSetStatus represents the current status of a ReplicaSet.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replica set's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replicaset.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replica set.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.RollbackConfig": { - "description": "DEPRECATED.", - "properties": { - "revision": { - "description": "The revision to rollback to. If set to 0, rollback to the last revision.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet": { - "description": "Spec to control the desired behavior of daemon set rolling update.", - "properties": { - "maxUnavailable": { - "description": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.extensions.v1beta1.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions": { - "description": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.", - "required": [ - "rule" - ], - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions": { - "description": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.", - "required": [ - "rule" - ], - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions": { - "description": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.", - "required": [ - "rule" - ], - "properties": { - "rule": { - "description": "rule is the strategy that will dictate the allowable labels that may be set.", - "type": "string" - }, - "seLinuxOptions": { - "description": "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - "$ref": "#/definitions/io.k8s.api.core.v1.SELinuxOptions" - } - } - }, - "io.k8s.api.extensions.v1beta1.Scale": { - "description": "represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "kind": "Scale", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.extensions.v1beta1.ScaleSpec": { - "description": "describes the attributes of a scale subresource", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.extensions.v1beta1.ScaleStatus": { - "description": "represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "targetSelector": { - "description": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "string" - } - } - }, - "io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions": { - "description": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.", - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.api.networking.v1.IPBlock": { - "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", - "required": [ - "cidr" - ], - "properties": { - "cidr": { - "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", - "type": "string" - }, - "except": { - "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.networking.v1.NetworkPolicy": { - "description": "NetworkPolicy describes what network traffic is allowed for a set of Pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior for this NetworkPolicy.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "networking.k8s.io", - "kind": "NetworkPolicy", - "version": "v1" - } - ] - }, - "io.k8s.api.networking.v1.NetworkPolicyEgressRule": { - "description": "NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", - "properties": { - "ports": { - "description": "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort" - } - }, - "to": { - "description": "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer" - } - } - } - }, - "io.k8s.api.networking.v1.NetworkPolicyIngressRule": { - "description": "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.", - "properties": { - "from": { - "description": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer" - } - }, - "ports": { - "description": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort" - } - } - } - }, - "io.k8s.api.networking.v1.NetworkPolicyList": { - "description": "NetworkPolicyList is a list of NetworkPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "networking.k8s.io", - "kind": "NetworkPolicyList", - "version": "v1" - } - ] - }, - "io.k8s.api.networking.v1.NetworkPolicyPeer": { - "description": "NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed", - "properties": { - "ipBlock": { - "description": "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", - "$ref": "#/definitions/io.k8s.api.networking.v1.IPBlock" - }, - "namespaceSelector": { - "description": "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "podSelector": { - "description": "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.api.networking.v1.NetworkPolicyPort": { - "description": "NetworkPolicyPort describes a port to allow traffic on", - "properties": { - "port": { - "description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "protocol": { - "description": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "type": "string" - } - } - }, - "io.k8s.api.networking.v1.NetworkPolicySpec": { - "description": "NetworkPolicySpec provides the specification of a NetworkPolicy", - "required": [ - "podSelector" - ], - "properties": { - "egress": { - "description": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyEgressRule" - } - }, - "ingress": { - "description": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule" - } - }, - "podSelector": { - "description": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "policyTypes": { - "description": "List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.policy.v1beta1.AllowedFlexVolume": { - "description": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", - "required": [ - "driver" - ], - "properties": { - "driver": { - "description": "driver is the name of the Flexvolume driver.", - "type": "string" - } - } - }, - "io.k8s.api.policy.v1beta1.AllowedHostPath": { - "description": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.", - "properties": { - "pathPrefix": { - "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", - "type": "string" - }, - "readOnly": { - "description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", - "type": "boolean" - } - } - }, - "io.k8s.api.policy.v1beta1.Eviction": { - "description": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/\u003cpod name\u003e/evictions.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "deleteOptions": { - "description": "DeleteOptions may be provided", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta describes the pod that is being evicted.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "kind": "Eviction", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.policy.v1beta1.FSGroupStrategyOptions": { - "description": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.api.policy.v1beta1.HostPortRange": { - "description": "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "max is the end of the range, inclusive.", - "type": "integer", - "format": "int32" - }, - "min": { - "description": "min is the start of the range, inclusive.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.api.policy.v1beta1.IDRange": { - "description": "IDRange provides a min/max of an allowed range of IDs.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "max is the end of the range, inclusive.", - "type": "integer", - "format": "int64" - }, - "min": { - "description": "min is the start of the range, inclusive.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.policy.v1beta1.PodDisruptionBudget": { - "description": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the PodDisruptionBudget.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec" - }, - "status": { - "description": "Most recently observed status of the PodDisruptionBudget.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "kind": "PodDisruptionBudget", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.policy.v1beta1.PodDisruptionBudgetList": { - "description": "PodDisruptionBudgetList is a collection of PodDisruptionBudgets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "kind": "PodDisruptionBudgetList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec": { - "description": "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", - "properties": { - "maxUnavailable": { - "description": "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "minAvailable": { - "description": "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "selector": { - "description": "Label query over pods whose evictions are managed by the disruption budget.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus": { - "description": "PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.", - "required": [ - "disruptionsAllowed", - "currentHealthy", - "desiredHealthy", - "expectedPods" - ], - "properties": { - "currentHealthy": { - "description": "current number of healthy pods", - "type": "integer", - "format": "int32" - }, - "desiredHealthy": { - "description": "minimum desired number of healthy pods", - "type": "integer", - "format": "int32" - }, - "disruptedPods": { - "description": "DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - }, - "disruptionsAllowed": { - "description": "Number of pod disruptions that are currently allowed.", - "type": "integer", - "format": "int32" - }, - "expectedPods": { - "description": "total number of pods counted by this disruption budget", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.api.policy.v1beta1.PodSecurityPolicy": { - "description": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "spec defines the policy enforced.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "kind": "PodSecurityPolicy", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.policy.v1beta1.PodSecurityPolicyList": { - "description": "PodSecurityPolicyList is a list of PodSecurityPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "kind": "PodSecurityPolicyList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.policy.v1beta1.PodSecurityPolicySpec": { - "description": "PodSecurityPolicySpec defines the policy enforced.", - "required": [ - "seLinux", - "runAsUser", - "supplementalGroups", - "fsGroup" - ], - "properties": { - "allowPrivilegeEscalation": { - "description": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", - "type": "boolean" - }, - "allowedCapabilities": { - "description": "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", - "type": "array", - "items": { - "type": "string" - } - }, - "allowedFlexVolumes": { - "description": "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.AllowedFlexVolume" - } - }, - "allowedHostPaths": { - "description": "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.AllowedHostPath" - } - }, - "allowedProcMountTypes": { - "description": "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", - "type": "array", - "items": { - "type": "string" - } - }, - "allowedUnsafeSysctls": { - "description": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", - "type": "array", - "items": { - "type": "string" - } - }, - "defaultAddCapabilities": { - "description": "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", - "type": "array", - "items": { - "type": "string" - } - }, - "defaultAllowPrivilegeEscalation": { - "description": "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - "type": "boolean" - }, - "forbiddenSysctls": { - "description": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", - "type": "array", - "items": { - "type": "string" - } - }, - "fsGroup": { - "description": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.FSGroupStrategyOptions" - }, - "hostIPC": { - "description": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - "type": "boolean" - }, - "hostNetwork": { - "description": "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - "type": "boolean" - }, - "hostPID": { - "description": "hostPID determines if the policy allows the use of HostPID in the pod spec.", - "type": "boolean" - }, - "hostPorts": { - "description": "hostPorts determines which host port ranges are allowed to be exposed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.HostPortRange" - } - }, - "privileged": { - "description": "privileged determines if a pod can request to be run as privileged.", - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "description": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - "type": "boolean" - }, - "requiredDropCapabilities": { - "description": "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - "type": "array", - "items": { - "type": "string" - } - }, - "runAsGroup": { - "description": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions" - }, - "runAsUser": { - "description": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions" - }, - "seLinux": { - "description": "seLinux is the strategy that will dictate the allowable labels that may be set.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.SELinuxStrategyOptions" - }, - "supplementalGroups": { - "description": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions" - }, - "volumes": { - "description": "volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions": { - "description": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.", - "required": [ - "rule" - ], - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", - "type": "string" - } - } - }, - "io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions": { - "description": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", - "required": [ - "rule" - ], - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - "type": "string" - } - } - }, - "io.k8s.api.policy.v1beta1.SELinuxStrategyOptions": { - "description": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.", - "required": [ - "rule" - ], - "properties": { - "rule": { - "description": "rule is the strategy that will dictate the allowable labels that may be set.", - "type": "string" - }, - "seLinuxOptions": { - "description": "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - "$ref": "#/definitions/io.k8s.api.core.v1.SELinuxOptions" - } - } - }, - "io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions": { - "description": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", - "properties": { - "ranges": { - "description": "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.IDRange" - } - }, - "rule": { - "description": "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.api.rbac.v1.AggregationRule": { - "description": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", - "properties": { - "clusterRoleSelectors": { - "description": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - } - }, - "io.k8s.api.rbac.v1.ClusterRole": { - "description": "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - "required": [ - "rules" - ], - "properties": { - "aggregationRule": { - "description": "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", - "$ref": "#/definitions/io.k8s.api.rbac.v1.AggregationRule" - }, - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this ClusterRole", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.ClusterRoleBinding": { - "description": "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - "required": [ - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.ClusterRoleBindingList": { - "description": "ClusterRoleBindingList is a collection of ClusterRoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBindingList", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.ClusterRoleList": { - "description": "ClusterRoleList is a collection of ClusterRoles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.ClusterRole" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleList", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.PolicyRule": { - "description": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - "required": [ - "verbs" - ], - "properties": { - "apiGroups": { - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceURLs": { - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - "type": "array", - "items": { - "type": "string" - } - }, - "resourceNames": { - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.rbac.v1.Role": { - "description": "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this Role", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.RoleBinding": { - "description": "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - "required": [ - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.RoleBindingList": { - "description": "RoleBindingList is a collection of RoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of RoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.RoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBindingList", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.RoleList": { - "description": "RoleList is a collection of Roles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of Roles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1.Role" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleList", - "version": "v1" - } - ] - }, - "io.k8s.api.rbac.v1.RoleRef": { - "description": "RoleRef contains information that points to the role being used", - "required": [ - "apiGroup", - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup is the group for the resource being referenced", - "type": "string" - }, - "kind": { - "description": "Kind is the type of resource being referenced", - "type": "string" - }, - "name": { - "description": "Name is the name of resource being referenced", - "type": "string" - } - } - }, - "io.k8s.api.rbac.v1.Subject": { - "description": "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", - "type": "string" - }, - "kind": { - "description": "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - "type": "string" - }, - "name": { - "description": "Name of the object being referenced.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - "type": "string" - } - } - }, - "io.k8s.api.rbac.v1beta1.AggregationRule": { - "description": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", - "properties": { - "clusterRoleSelectors": { - "description": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - } - }, - "io.k8s.api.rbac.v1beta1.ClusterRole": { - "description": "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - "required": [ - "rules" - ], - "properties": { - "aggregationRule": { - "description": "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.AggregationRule" - }, - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this ClusterRole", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRole", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.ClusterRoleBinding": { - "description": "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - "required": [ - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBinding", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.ClusterRoleBindingList": { - "description": "ClusterRoleBindingList is a collection of ClusterRoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleBindingList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.ClusterRoleList": { - "description": "ClusterRoleList is a collection of ClusterRoles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "ClusterRoleList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.PolicyRule": { - "description": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - "required": [ - "verbs" - ], - "properties": { - "apiGroups": { - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceURLs": { - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - "type": "array", - "items": { - "type": "string" - } - }, - "resourceNames": { - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.api.rbac.v1beta1.Role": { - "description": "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this Role", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "Role", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.RoleBinding": { - "description": "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - "required": [ - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBinding", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.RoleBindingList": { - "description": "RoleBindingList is a collection of RoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of RoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleBindingList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.RoleList": { - "description": "RoleList is a collection of Roles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of Roles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "kind": "RoleList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.rbac.v1beta1.RoleRef": { - "description": "RoleRef contains information that points to the role being used", - "required": [ - "apiGroup", - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup is the group for the resource being referenced", - "type": "string" - }, - "kind": { - "description": "Kind is the type of resource being referenced", - "type": "string" - }, - "name": { - "description": "Name is the name of resource being referenced", - "type": "string" - } - } - }, - "io.k8s.api.rbac.v1beta1.Subject": { - "description": "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", - "type": "string" - }, - "kind": { - "description": "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - "type": "string" - }, - "name": { - "description": "Name of the object being referenced.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - "type": "string" - } - } - }, - "io.k8s.api.scheduling.v1beta1.PriorityClass": { - "description": "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - "required": [ - "value" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "description": { - "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", - "type": "string" - }, - "globalDefault": { - "description": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - "type": "boolean" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "value": { - "description": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - "type": "integer", - "format": "int32" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "scheduling.k8s.io", - "kind": "PriorityClass", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.scheduling.v1beta1.PriorityClassList": { - "description": "PriorityClassList is a collection of priority classes.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of PriorityClasses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "scheduling.k8s.io", - "kind": "PriorityClassList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.storage.v1.StorageClass": { - "description": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "required": [ - "provisioner" - ], - "properties": { - "allowVolumeExpansion": { - "description": "AllowVolumeExpansion shows whether the storage class allow volume expand", - "type": "boolean" - }, - "allowedTopologies": { - "description": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.TopologySelectorTerm" - } - }, - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "mountOptions": { - "description": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", - "type": "array", - "items": { - "type": "string" - } - }, - "parameters": { - "description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "provisioner": { - "description": "Provisioner indicates the type of the provisioner.", - "type": "string" - }, - "reclaimPolicy": { - "description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", - "type": "string" - }, - "volumeBindingMode": { - "description": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1" - } - ] - }, - "io.k8s.api.storage.v1.StorageClassList": { - "description": "StorageClassList is a collection of storage classes.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of StorageClasses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "StorageClassList", - "version": "v1" - } - ] - }, - "io.k8s.api.storage.v1.VolumeAttachment": { - "description": "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSpec" - }, - "status": { - "description": "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachmentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1" - } - ] - }, - "io.k8s.api.storage.v1.VolumeAttachmentList": { - "description": "VolumeAttachmentList is a collection of VolumeAttachment objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of VolumeAttachments", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "VolumeAttachmentList", - "version": "v1" - } - ] - }, - "io.k8s.api.storage.v1.VolumeAttachmentSource": { - "description": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", - "properties": { - "persistentVolumeName": { - "description": "Name of the persistent volume to attach.", - "type": "string" - } - } - }, - "io.k8s.api.storage.v1.VolumeAttachmentSpec": { - "description": "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", - "required": [ - "attacher", - "source", - "nodeName" - ], - "properties": { - "attacher": { - "description": "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", - "type": "string" - }, - "nodeName": { - "description": "The node that the volume should be attached to.", - "type": "string" - }, - "source": { - "description": "Source represents the volume that should be attached.", - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSource" - } - } - }, - "io.k8s.api.storage.v1.VolumeAttachmentStatus": { - "description": "VolumeAttachmentStatus is the status of a VolumeAttachment request.", - "required": [ - "attached" - ], - "properties": { - "attachError": { - "description": "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeError" - }, - "attached": { - "description": "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "type": "boolean" - }, - "attachmentMetadata": { - "description": "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "detachError": { - "description": "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1.VolumeError" - } - } - }, - "io.k8s.api.storage.v1.VolumeError": { - "description": "VolumeError captures an error encountered during a volume operation.", - "properties": { - "message": { - "description": "String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.", - "type": "string" - }, - "time": { - "description": "Time the error was encountered.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.api.storage.v1beta1.StorageClass": { - "description": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "required": [ - "provisioner" - ], - "properties": { - "allowVolumeExpansion": { - "description": "AllowVolumeExpansion shows whether the storage class allow volume expand", - "type": "boolean" - }, - "allowedTopologies": { - "description": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.core.v1.TopologySelectorTerm" - } - }, - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "mountOptions": { - "description": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", - "type": "array", - "items": { - "type": "string" - } - }, - "parameters": { - "description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "provisioner": { - "description": "Provisioner indicates the type of the provisioner.", - "type": "string" - }, - "reclaimPolicy": { - "description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", - "type": "string" - }, - "volumeBindingMode": { - "description": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "StorageClass", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.storage.v1beta1.StorageClassList": { - "description": "StorageClassList is a collection of storage classes.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of StorageClasses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "StorageClassList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.storage.v1beta1.VolumeAttachment": { - "description": "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSpec" - }, - "status": { - "description": "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "VolumeAttachment", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.storage.v1beta1.VolumeAttachmentList": { - "description": "VolumeAttachmentList is a collection of VolumeAttachment objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of VolumeAttachments", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "kind": "VolumeAttachmentList", - "version": "v1beta1" - } - ] - }, - "io.k8s.api.storage.v1beta1.VolumeAttachmentSource": { - "description": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", - "properties": { - "persistentVolumeName": { - "description": "Name of the persistent volume to attach.", - "type": "string" - } - } - }, - "io.k8s.api.storage.v1beta1.VolumeAttachmentSpec": { - "description": "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", - "required": [ - "attacher", - "source", - "nodeName" - ], - "properties": { - "attacher": { - "description": "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", - "type": "string" - }, - "nodeName": { - "description": "The node that the volume should be attached to.", - "type": "string" - }, - "source": { - "description": "Source represents the volume that should be attached.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSource" - } - } - }, - "io.k8s.api.storage.v1beta1.VolumeAttachmentStatus": { - "description": "VolumeAttachmentStatus is the status of a VolumeAttachment request.", - "required": [ - "attached" - ], - "properties": { - "attachError": { - "description": "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeError" - }, - "attached": { - "description": "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "type": "boolean" - }, - "attachmentMetadata": { - "description": "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "detachError": { - "description": "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.VolumeError" - } - } - }, - "io.k8s.api.storage.v1beta1.VolumeError": { - "description": "VolumeError captures an error encountered during a volume operation.", - "properties": { - "message": { - "description": "String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.", - "type": "string" - }, - "time": { - "description": "Time the error was encountered.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition": { - "description": "CustomResourceColumnDefinition specifies a column for server side printing.", - "required": [ - "name", - "type", - "JSONPath" - ], - "properties": { - "JSONPath": { - "description": "JSONPath is a simple JSON path, i.e. with array notation.", - "type": "string" - }, - "description": { - "description": "description is a human readable description of this column.", - "type": "string" - }, - "format": { - "description": "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - "type": "string" - }, - "name": { - "description": "name is a human readable name for the column.", - "type": "string" - }, - "priority": { - "description": "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", - "type": "integer", - "format": "int32" - }, - "type": { - "description": "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion": { - "description": "CustomResourceConversion describes how to convert different versions of a CR.", - "required": [ - "strategy" - ], - "properties": { - "strategy": { - "description": "`strategy` specifies the conversion strategy. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the CR. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information is needed for this option.", - "type": "string" - }, - "webhookClientConfig": { - "description": "`webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition": { - "description": "CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format \u003c.spec.name\u003e.\u003c.spec.group\u003e.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec describes how the user wants the resources to appear", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec" - }, - "status": { - "description": "Status indicates the actual state of the CustomResourceDefinition", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinition", - "version": "v1beta1" - } - ] - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition": { - "description": "CustomResourceDefinitionCondition contains details for the current condition of this pod.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition.", - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList": { - "description": "CustomResourceDefinitionList is a list of CustomResourceDefinition objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items individual CustomResourceDefinitions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiextensions.k8s.io", - "kind": "CustomResourceDefinitionList", - "version": "v1beta1" - } - ] - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames": { - "description": "CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition", - "required": [ - "plural", - "kind" - ], - "properties": { - "categories": { - "description": "Categories is a list of grouped resources custom resources belong to (e.g. 'all')", - "type": "array", - "items": { - "type": "string" - } - }, - "kind": { - "description": "Kind is the serialized kind of the resource. It is normally CamelCase and singular.", - "type": "string" - }, - "listKind": { - "description": "ListKind is the serialized kind of the list for this resource. Defaults to \u003ckind\u003eList.", - "type": "string" - }, - "plural": { - "description": "Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.", - "type": "string" - }, - "shortNames": { - "description": "ShortNames are short names for the resource. It must be all lowercase.", - "type": "array", - "items": { - "type": "string" - } - }, - "singular": { - "description": "Singular is the singular name of the resource. It must be all lowercase Defaults to lowercased \u003ckind\u003e", - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec": { - "description": "CustomResourceDefinitionSpec describes how a user wants their resource to appear", - "required": [ - "group", - "names", - "scope" - ], - "properties": { - "additionalPrinterColumns": { - "description": "AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Optional, the global columns for all versions. Top-level and per-version columns are mutually exclusive.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition" - } - }, - "conversion": { - "description": "`conversion` defines conversion settings for the CRD.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion" - }, - "group": { - "description": "Group is the group this resource belongs in", - "type": "string" - }, - "names": { - "description": "Names are the names used to describe this custom resource", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames" - }, - "scope": { - "description": "Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced", - "type": "string" - }, - "subresources": { - "description": "Subresources describes the subresources for CustomResource Optional, the global subresources for all versions. Top-level and per-version subresources are mutually exclusive.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources" - }, - "validation": { - "description": "Validation describes the validation methods for CustomResources Optional, the global validation schema for all versions. Top-level and per-version schemas are mutually exclusive.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation" - }, - "version": { - "description": "Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.", - "type": "string" - }, - "versions": { - "description": "Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion" - } - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus": { - "description": "CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition", - "required": [ - "conditions", - "acceptedNames", - "storedVersions" - ], - "properties": { - "acceptedNames": { - "description": "AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames" - }, - "conditions": { - "description": "Conditions indicate state for particular aspects of a CustomResourceDefinition", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition" - } - }, - "storedVersions": { - "description": "StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion": { - "description": "CustomResourceDefinitionVersion describes a version for CRD.", - "required": [ - "name", - "served", - "storage" - ], - "properties": { - "additionalPrinterColumns": { - "description": "AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Top-level and per-version columns are mutually exclusive. Per-version columns must not all be set to identical values (top-level columns should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. NOTE: CRDs created prior to 1.13 populated the top-level additionalPrinterColumns field by default. To apply an update that changes to per-version additionalPrinterColumns, the top-level additionalPrinterColumns field must be explicitly set to null", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition" - } - }, - "name": { - "description": "Name is the version name, e.g. “v1â€, “v2beta1â€, etc.", - "type": "string" - }, - "schema": { - "description": "Schema describes the schema for CustomResource used in validation, pruning, and defaulting. Top-level and per-version schemas are mutually exclusive. Per-version schemas must not all be set to identical values (top-level validation schema should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation" - }, - "served": { - "description": "Served is a flag enabling/disabling this version from being served via REST APIs", - "type": "boolean" - }, - "storage": { - "description": "Storage flags the version as storage version. There must be exactly one flagged as storage version.", - "type": "boolean" - }, - "subresources": { - "description": "Subresources describes the subresources for CustomResource Top-level and per-version subresources are mutually exclusive. Per-version subresources must not all be set to identical values (top-level subresources should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale": { - "description": "CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.", - "required": [ - "specReplicasPath", - "statusReplicasPath" - ], - "properties": { - "labelSelectorPath": { - "description": "LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.", - "type": "string" - }, - "specReplicasPath": { - "description": "SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.", - "type": "string" - }, - "statusReplicasPath": { - "description": "StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.", - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus": { - "description": "CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza" - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources": { - "description": "CustomResourceSubresources defines the status and scale subresources for CustomResources.", - "properties": { - "scale": { - "description": "Scale denotes the scale subresource for CustomResources", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale" - }, - "status": { - "description": "Status denotes the status subresource for CustomResources", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation": { - "description": "CustomResourceValidation is a list of validation methods for CustomResources.", - "properties": { - "openAPIV3Schema": { - "description": "OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation": { - "description": "ExternalDocumentation allows referencing an external resource for extended documentation.", - "properties": { - "description": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON": { - "description": "JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil." - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps": { - "description": "JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).", - "properties": { - "$ref": { - "type": "string" - }, - "$schema": { - "type": "string" - }, - "additionalItems": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" - }, - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" - }, - "allOf": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "anyOf": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "default": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" - }, - "definitions": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" - } - }, - "description": { - "type": "string" - }, - "enum": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" - } - }, - "example": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" - }, - "exclusiveMaximum": { - "type": "boolean" - }, - "exclusiveMinimum": { - "type": "boolean" - }, - "externalDocs": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation" - }, - "format": { - "type": "string" - }, - "id": { - "type": "string" - }, - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" - }, - "maxItems": { - "type": "integer", - "format": "int64" - }, - "maxLength": { - "type": "integer", - "format": "int64" - }, - "maxProperties": { - "type": "integer", - "format": "int64" - }, - "maximum": { - "type": "number", - "format": "double" - }, - "minItems": { - "type": "integer", - "format": "int64" - }, - "minLength": { - "type": "integer", - "format": "int64" - }, - "minProperties": { - "type": "integer", - "format": "int64" - }, - "minimum": { - "type": "number", - "format": "double" - }, - "multipleOf": { - "type": "number", - "format": "double" - }, - "not": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - }, - "oneOf": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "pattern": { - "type": "string" - }, - "patternProperties": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "properties": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" - } - }, - "required": { - "type": "array", - "items": { - "type": "string" - } - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "uniqueItems": { - "type": "boolean" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray": { - "description": "JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes." - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool": { - "description": "JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property." - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray": { - "description": "JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array." - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "required": [ - "namespace", - "name" - ], - "properties": { - "name": { - "description": "`name` is the name of the service. Required", - "type": "string" - }, - "namespace": { - "description": "`namespace` is the namespace of the service. Required", - "type": "string" - }, - "path": { - "description": "`path` is an optional URL path which will be sent in any request to this service.", - "type": "string" - } - } - }, - "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig": { - "description": "WebhookClientConfig contains the information to make a TLS connection with the webhook. It has the same field as admissionregistration.v1beta1.WebhookClientConfig.", - "properties": { - "caBundle": { - "description": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", - "type": "string", - "format": "byte" - }, - "service": { - "description": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - "$ref": "#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference" - }, - "url": { - "description": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.api.resource.Quantity": { - "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", - "type": "string" - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup": { - "description": "APIGroup contains the name, the supported versions, and the preferred version of a group.", - "required": [ - "name", - "versions" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "name is the name of the group.", - "type": "string" - }, - "preferredVersion": { - "description": "preferredVersion is the version preferred by the API server, which probably is the storage version.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" - }, - "serverAddressByClientCIDRs": { - "description": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR" - } - }, - "versions": { - "description": "versions are the versions supported in this group.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "APIGroup", - "version": "v1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList": { - "description": "APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.", - "required": [ - "groups" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "groups": { - "description": "groups is a list of APIGroup.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "APIGroupList", - "version": "v1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIResource": { - "description": "APIResource specifies the name of a resource and whether it is namespaced.", - "required": [ - "name", - "singularName", - "namespaced", - "kind", - "verbs" - ], - "properties": { - "categories": { - "description": "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", - "type": "array", - "items": { - "type": "string" - } - }, - "group": { - "description": "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", - "type": "string" - }, - "kind": { - "description": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", - "type": "string" - }, - "name": { - "description": "name is the plural name of the resource.", - "type": "string" - }, - "namespaced": { - "description": "namespaced indicates if a resource is namespaced or not.", - "type": "boolean" - }, - "shortNames": { - "description": "shortNames is a list of suggested short names of the resource.", - "type": "array", - "items": { - "type": "string" - } - }, - "singularName": { - "description": "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", - "type": "string" - }, - "verbs": { - "description": "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", - "type": "array", - "items": { - "type": "string" - } - }, - "version": { - "description": "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList": { - "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", - "required": [ - "groupVersion", - "resources" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "groupVersion": { - "description": "groupVersion is the group and version this APIResourceList is for.", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "resources": { - "description": "resources contains the name of the resources and if they are namespaced.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "APIResourceList", - "version": "v1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions": { - "description": "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.", - "required": [ - "versions", - "serverAddressByClientCIDRs" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "serverAddressByClientCIDRs": { - "description": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR" - } - }, - "versions": { - "description": "versions are the api versions that are available.", - "type": "array", - "items": { - "type": "string" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "APIVersions", - "version": "v1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions": { - "description": "DeleteOptions may be provided when deleting an API object.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "dryRun": { - "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - "type": "array", - "items": { - "type": "string" - } - }, - "gracePeriodSeconds": { - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "type": "integer", - "format": "int64" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "orphanDependents": { - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "type": "boolean" - }, - "preconditions": { - "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" - }, - "propagationPolicy": { - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "admission.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "admissionregistration.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "apiextensions.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "apiregistration.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "apiregistration.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "apps", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "apps", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "apps", - "kind": "DeleteOptions", - "version": "v1beta2" - }, - { - "group": "authentication.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "authorization.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "autoscaling", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "autoscaling", - "kind": "DeleteOptions", - "version": "v2beta2" - }, - { - "group": "batch", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "batch", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "batch", - "kind": "DeleteOptions", - "version": "v2alpha1" - }, - { - "group": "certificates.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "extensions", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "networking.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "policy", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "rbac.authorization.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "rbac.authorization.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "scheduling.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - }, - { - "group": "storage.k8s.io", - "kind": "DeleteOptions", - "version": "v1" - }, - { - "group": "storage.k8s.io", - "kind": "DeleteOptions", - "version": "v1beta1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery": { - "description": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", - "required": [ - "groupVersion", - "version" - ], - "properties": { - "groupVersion": { - "description": "groupVersion specifies the API group and version in the form \"group/version\"", - "type": "string" - }, - "version": { - "description": "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Initializer": { - "description": "Initializer is information about an initializer that has not yet completed.", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "name of the process that is responsible for initializing this object.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Initializers": { - "description": "Initializers tracks the progress of initialization.", - "required": [ - "pending" - ], - "properties": { - "pending": { - "description": "Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializer" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "result": { - "description": "If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector": { - "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement" - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement": { - "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "key is the label key that the selector applies to.", - "type": "string", - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge" - }, - "operator": { - "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", - "type": "string" - }, - "values": { - "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta": { - "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", - "properties": { - "continue": { - "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", - "type": "string" - }, - "resourceVersion": { - "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "selfLink": { - "description": "selfLink is a URL representing this object. Populated by the system. Read-only.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime": { - "description": "MicroTime is version of Time with microsecond level precision.", - "type": "string", - "format": "date-time" - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "properties": { - "annotations": { - "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "clusterName": { - "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", - "type": "string" - }, - "creationTimestamp": { - "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "deletionGracePeriodSeconds": { - "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", - "type": "integer", - "format": "int64" - }, - "deletionTimestamp": { - "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "finalizers": { - "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", - "type": "array", - "items": { - "type": "string" - }, - "x-kubernetes-patch-strategy": "merge" - }, - "generateName": { - "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency", - "type": "string" - }, - "generation": { - "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", - "type": "integer", - "format": "int64" - }, - "initializers": { - "description": "An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers" - }, - "labels": { - "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - }, - "namespace": { - "description": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", - "type": "string" - }, - "ownerReferences": { - "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference" - }, - "x-kubernetes-patch-merge-key": "uid", - "x-kubernetes-patch-strategy": "merge" - }, - "resourceVersion": { - "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "selfLink": { - "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.", - "type": "string" - }, - "uid": { - "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference": { - "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", - "required": [ - "apiVersion", - "kind", - "name", - "uid" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent.", - "type": "string" - }, - "blockOwnerDeletion": { - "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", - "type": "boolean" - }, - "controller": { - "description": "If true, this reference points to the managing controller.", - "type": "boolean" - }, - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - }, - "uid": { - "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Patch": { - "description": "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body." - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions": { - "description": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", - "properties": { - "uid": { - "description": "Specifies the target UID.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR": { - "description": "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", - "required": [ - "clientCIDR", - "serverAddress" - ], - "properties": { - "clientCIDR": { - "description": "The CIDR with which clients can match their IP to figure out the server address that they should use.", - "type": "string" - }, - "serverAddress": { - "description": "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Status": { - "description": "Status is a return value for calls that don't return other objects.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "code": { - "description": "Suggested HTTP return code for this status, 0 if not set.", - "type": "integer", - "format": "int32" - }, - "details": { - "description": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "message": { - "description": "A human-readable description of the status of this operation.", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - }, - "reason": { - "description": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", - "type": "string" - }, - "status": { - "description": "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "Status", - "version": "v1" - } - ] - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause": { - "description": "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", - "properties": { - "field": { - "description": "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", - "type": "string" - }, - "message": { - "description": "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", - "type": "string" - }, - "reason": { - "description": "A machine-readable description of the cause of the error. If this value is empty there is no information available.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails": { - "description": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", - "properties": { - "causes": { - "description": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause" - } - }, - "group": { - "description": "The group attribute of the resource associated with the status StatusReason.", - "type": "string" - }, - "kind": { - "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", - "type": "string" - }, - "retryAfterSeconds": { - "description": "If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Time": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent": { - "description": "Event represents a single event to a watched resource.", - "required": [ - "type", - "object" - ], - "properties": { - "object": { - "description": "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "type": { - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "admission.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "admissionregistration.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "apiextensions.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "apiregistration.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "apiregistration.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "apps", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "apps", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "apps", - "kind": "WatchEvent", - "version": "v1beta2" - }, - { - "group": "authentication.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "authorization.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "autoscaling", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "autoscaling", - "kind": "WatchEvent", - "version": "v2beta2" - }, - { - "group": "batch", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "batch", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "batch", - "kind": "WatchEvent", - "version": "v2alpha1" - }, - { - "group": "certificates.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "extensions", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "networking.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "policy", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "rbac.authorization.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "rbac.authorization.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "scheduling.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - }, - { - "group": "storage.k8s.io", - "kind": "WatchEvent", - "version": "v1" - }, - { - "group": "storage.k8s.io", - "kind": "WatchEvent", - "version": "v1beta1" - } - ] - }, - "io.k8s.apimachinery.pkg.runtime.RawExtension": { - "description": "RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this: {\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)", - "required": [ - "Raw" - ], - "properties": { - "Raw": { - "description": "Raw is the underlying serialization of this object.", - "type": "string", - "format": "byte" - } - } - }, - "io.k8s.apimachinery.pkg.util.intstr.IntOrString": { - "description": "IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.", - "type": "string", - "format": "int-or-string" - }, - "io.k8s.apimachinery.pkg.version.Info": { - "description": "Info contains versioning information. how we'll want to distribute that information.", - "required": [ - "major", - "minor", - "gitVersion", - "gitCommit", - "gitTreeState", - "buildDate", - "goVersion", - "compiler", - "platform" - ], - "properties": { - "buildDate": { - "type": "string" - }, - "compiler": { - "type": "string" - }, - "gitCommit": { - "type": "string" - }, - "gitTreeState": { - "type": "string" - }, - "gitVersion": { - "type": "string" - }, - "goVersion": { - "type": "string" - }, - "major": { - "type": "string" - }, - "minor": { - "type": "string" - }, - "platform": { - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService": { - "description": "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec contains information for locating and communicating with a server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec" - }, - "status": { - "description": "Status contains derived information about an API server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1" - } - ] - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition": { - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition.", - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList": { - "description": "APIServiceList is a list of APIService objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiregistration.k8s.io", - "kind": "APIServiceList", - "version": "v1" - } - ] - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec": { - "description": "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", - "required": [ - "service", - "groupPriorityMinimum", - "versionPriority" - ], - "properties": { - "caBundle": { - "description": "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", - "type": "string", - "format": "byte" - }, - "group": { - "description": "Group is the API group name this server hosts", - "type": "string" - }, - "groupPriorityMinimum": { - "description": "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", - "type": "integer", - "format": "int32" - }, - "insecureSkipTLSVerify": { - "description": "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", - "type": "boolean" - }, - "service": { - "description": "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference" - }, - "version": { - "description": "Version is the API version this server hosts. For example, \"v1\"", - "type": "string" - }, - "versionPriority": { - "description": "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus": { - "description": "APIServiceStatus contains derived information about an API server", - "properties": { - "conditions": { - "description": "Current service state of apiService.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "properties": { - "name": { - "description": "Name is the name of the service", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the service", - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService": { - "description": "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec contains information for locating and communicating with a server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec" - }, - "status": { - "description": "Status contains derived information about an API server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiregistration.k8s.io", - "kind": "APIService", - "version": "v1beta1" - } - ] - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition": { - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition.", - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList": { - "description": "APIServiceList is a list of APIService objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apiregistration.k8s.io", - "kind": "APIServiceList", - "version": "v1beta1" - } - ] - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec": { - "description": "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", - "required": [ - "service", - "groupPriorityMinimum", - "versionPriority" - ], - "properties": { - "caBundle": { - "description": "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", - "type": "string", - "format": "byte" - }, - "group": { - "description": "Group is the API group name this server hosts", - "type": "string" - }, - "groupPriorityMinimum": { - "description": "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", - "type": "integer", - "format": "int32" - }, - "insecureSkipTLSVerify": { - "description": "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", - "type": "boolean" - }, - "service": { - "description": "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference" - }, - "version": { - "description": "Version is the API version this server hosts. For example, \"v1\"", - "type": "string" - }, - "versionPriority": { - "description": "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus": { - "description": "APIServiceStatus contains derived information about an API server", - "properties": { - "conditions": { - "description": "Current service state of apiService.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "properties": { - "name": { - "description": "Name is the name of the service", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the service", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Affinity": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Affinity instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Affinity" - }, - "io.k8s.kubernetes.pkg.api.v1.AttachedVolume": { - "description": "Deprecated. Please use io.k8s.api.core.v1.AttachedVolume instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.AttachedVolume" - }, - "io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.AzureDiskVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.AzureFileVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Binding": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Binding instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Binding" - }, - "io.k8s.kubernetes.pkg.api.v1.Capabilities": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Capabilities instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Capabilities" - }, - "io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.CephFSVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.CephFSVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.CinderVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.CinderVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentCondition": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ComponentCondition instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentCondition" - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ComponentStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentStatusList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ComponentStatusList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ComponentStatusList" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMap": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMap instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMap" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMapEnvSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMapKeySelector instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMapList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapList" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMapProjection instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapProjection" - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ConfigMapVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Container": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Container instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Container" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerImage": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerImage instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerImage" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerPort": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerPort instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerPort" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerState": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerState instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerState" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerStateRunning instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateRunning" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerStateTerminated instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateTerminated" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerStateWaiting instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStateWaiting" - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ContainerStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ContainerStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint": { - "description": "Deprecated. Please use io.k8s.api.core.v1.DaemonEndpoint instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.DaemonEndpoint" - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection": { - "description": "Deprecated. Please use io.k8s.api.core.v1.DownwardAPIProjection instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIProjection" - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile": { - "description": "Deprecated. Please use io.k8s.api.core.v1.DownwardAPIVolumeFile instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile" - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.DownwardAPIVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EmptyDirVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointAddress": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EndpointAddress instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointAddress" - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointPort": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EndpointPort instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointPort" - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointSubset": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EndpointSubset instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointSubset" - }, - "io.k8s.kubernetes.pkg.api.v1.Endpoints": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Endpoints instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Endpoints" - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointsList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EndpointsList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointsList" - }, - "io.k8s.kubernetes.pkg.api.v1.EnvFromSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EnvFromSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EnvFromSource" - }, - "io.k8s.kubernetes.pkg.api.v1.EnvVar": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EnvVar instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EnvVar" - }, - "io.k8s.kubernetes.pkg.api.v1.EnvVarSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EnvVarSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EnvVarSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Event": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Event instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Event" - }, - "io.k8s.kubernetes.pkg.api.v1.EventList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EventList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EventList" - }, - "io.k8s.kubernetes.pkg.api.v1.EventSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.EventSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.EventSource" - }, - "io.k8s.kubernetes.pkg.api.v1.ExecAction": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ExecAction instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ExecAction" - }, - "io.k8s.kubernetes.pkg.api.v1.FCVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.FCVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.FCVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.FlexVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.FlexVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.FlockerVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.FlockerVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.GCEPersistentDiskVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.GitRepoVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.GlusterfsVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.HTTPGetAction": { - "description": "Deprecated. Please use io.k8s.api.core.v1.HTTPGetAction instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.HTTPGetAction" - }, - "io.k8s.kubernetes.pkg.api.v1.HTTPHeader": { - "description": "Deprecated. Please use io.k8s.api.core.v1.HTTPHeader instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.HTTPHeader" - }, - "io.k8s.kubernetes.pkg.api.v1.Handler": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Handler instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Handler" - }, - "io.k8s.kubernetes.pkg.api.v1.HostAlias": { - "description": "Deprecated. Please use io.k8s.api.core.v1.HostAlias instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.HostAlias" - }, - "io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.HostPathVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.HostPathVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ISCSIVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.KeyToPath": { - "description": "Deprecated. Please use io.k8s.api.core.v1.KeyToPath instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath" - }, - "io.k8s.kubernetes.pkg.api.v1.Lifecycle": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Lifecycle instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Lifecycle" - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRange": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LimitRange instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRange" - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeItem": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LimitRangeItem instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeItem" - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LimitRangeList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeList" - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LimitRangeSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LoadBalancerIngress instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LoadBalancerIngress" - }, - "io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LoadBalancerStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LoadBalancerStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.LocalObjectReference": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LocalObjectReference instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference" - }, - "io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.LocalVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.LocalVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NFSVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NFSVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Namespace": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Namespace instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Namespace" - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NamespaceList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceList" - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NamespaceSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NamespaceStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NamespaceStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.Node": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Node instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Node" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeAddress": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeAddress instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeAddress" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeAffinity": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeAffinity instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeAffinity" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeCondition": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeCondition instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeCondition" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeDaemonEndpoints instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeList" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelector": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeSelector instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeSelectorRequirement instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeSelectorTerm instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelectorTerm" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo": { - "description": "Deprecated. Please use io.k8s.api.core.v1.NodeSystemInfo instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.NodeSystemInfo" - }, - "io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ObjectFieldSelector instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectFieldSelector" - }, - "io.k8s.kubernetes.pkg.api.v1.ObjectReference": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ObjectReference instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolume": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolume instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaim instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeList" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Pod": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Pod instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Pod" - }, - "io.k8s.kubernetes.pkg.api.v1.PodAffinity": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodAffinity instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinity" - }, - "io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodAffinityTerm instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAffinityTerm" - }, - "io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodAntiAffinity instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodAntiAffinity" - }, - "io.k8s.kubernetes.pkg.api.v1.PodCondition": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodCondition instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodCondition" - }, - "io.k8s.kubernetes.pkg.api.v1.PodList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodList" - }, - "io.k8s.kubernetes.pkg.api.v1.PodSecurityContext": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodSecurityContext instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodSecurityContext" - }, - "io.k8s.kubernetes.pkg.api.v1.PodSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.PodStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplate": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodTemplate instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplate" - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplateList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodTemplateList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateList" - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PodTemplateSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PortworxVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PortworxVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm": { - "description": "Deprecated. Please use io.k8s.api.core.v1.PreferredSchedulingTerm instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm" - }, - "io.k8s.kubernetes.pkg.api.v1.Probe": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Probe instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Probe" - }, - "io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ProjectedVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.QuobyteVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.RBDVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.RBDVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationController": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ReplicationController instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationController" - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerCondition instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition" - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerList" - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceFieldSelector instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceFieldSelector" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuota": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceQuota instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuota" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaList" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceRequirements": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ResourceRequirements instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements" - }, - "io.k8s.kubernetes.pkg.api.v1.SELinuxOptions": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SELinuxOptions instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SELinuxOptions" - }, - "io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ScaleIOVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.Secret": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Secret instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Secret" - }, - "io.k8s.kubernetes.pkg.api.v1.SecretEnvSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecretEnvSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretEnvSource" - }, - "io.k8s.kubernetes.pkg.api.v1.SecretKeySelector": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecretKeySelector instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" - }, - "io.k8s.kubernetes.pkg.api.v1.SecretList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecretList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretList" - }, - "io.k8s.kubernetes.pkg.api.v1.SecretProjection": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecretProjection instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretProjection" - }, - "io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecretVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecretVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.SecurityContext": { - "description": "Deprecated. Please use io.k8s.api.core.v1.SecurityContext instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.SecurityContext" - }, - "io.k8s.kubernetes.pkg.api.v1.Service": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Service instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Service" - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceAccount": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServiceAccount instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccount" - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceAccountList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServiceAccountList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountList" - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceList": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServiceList instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceList" - }, - "io.k8s.kubernetes.pkg.api.v1.ServicePort": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServicePort instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServicePort" - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceSpec": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServiceSpec instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceSpec" - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceStatus": { - "description": "Deprecated. Please use io.k8s.api.core.v1.ServiceStatus instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceStatus" - }, - "io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.StorageOSPersistentVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.StorageOSVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.TCPSocketAction": { - "description": "Deprecated. Please use io.k8s.api.core.v1.TCPSocketAction instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.TCPSocketAction" - }, - "io.k8s.kubernetes.pkg.api.v1.Taint": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Taint instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Taint" - }, - "io.k8s.kubernetes.pkg.api.v1.Toleration": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Toleration instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Toleration" - }, - "io.k8s.kubernetes.pkg.api.v1.Volume": { - "description": "Deprecated. Please use io.k8s.api.core.v1.Volume instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.Volume" - }, - "io.k8s.kubernetes.pkg.api.v1.VolumeMount": { - "description": "Deprecated. Please use io.k8s.api.core.v1.VolumeMount instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeMount" - }, - "io.k8s.kubernetes.pkg.api.v1.VolumeProjection": { - "description": "Deprecated. Please use io.k8s.api.core.v1.VolumeProjection instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.VolumeProjection" - }, - "io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource": { - "description": "Deprecated. Please use io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource" - }, - "io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm": { - "description": "Deprecated. Please use io.k8s.api.core.v1.WeightedPodAffinityTerm instead.", - "$ref": "#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevision instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevisionList instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.Deployment instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Deployment" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentCondition instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentList instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentList" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentRollback instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentSpec instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStatus instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStrategy instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.RollbackConfig instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateDeployment instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.Scale instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.Scale" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.ScaleSpec instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.ScaleStatus instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSet instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSet" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetList instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetSpec instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetStatus instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus" - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy": { - "description": "Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy instead.", - "$ref": "#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy" - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview": { - "description": "Deprecated. Please use io.k8s.api.authentication.v1.TokenReview instead.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReview" - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec": { - "description": "Deprecated. Please use io.k8s.api.authentication.v1.TokenReviewSpec instead.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec" - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus": { - "description": "Deprecated. Please use io.k8s.api.authentication.v1.TokenReviewStatus instead.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus" - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo": { - "description": "Deprecated. Please use io.k8s.api.authentication.v1.UserInfo instead.", - "$ref": "#/definitions/io.k8s.api.authentication.v1.UserInfo" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.LocalSubjectAccessReview instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.NonResourceAttributes instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.ResourceAttributes instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.ResourceAttributes" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReview instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReview instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewSpec instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec" - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus": { - "description": "Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewStatus instead.", - "$ref": "#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.CrossVersionObjectReference instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.Scale instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.Scale" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.ScaleSpec instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec" - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus": { - "description": "Deprecated. Please use io.k8s.api.autoscaling.v1.ScaleStatus instead.", - "$ref": "#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus" - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.Job": { - "description": "Deprecated. Please use io.k8s.api.batch.v1.Job instead.", - "$ref": "#/definitions/io.k8s.api.batch.v1.Job" - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition": { - "description": "Deprecated. Please use io.k8s.api.batch.v1.JobCondition instead.", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobCondition" - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobList": { - "description": "Deprecated. Please use io.k8s.api.batch.v1.JobList instead.", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobList" - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec": { - "description": "Deprecated. Please use io.k8s.api.batch.v1.JobSpec instead.", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobSpec" - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus": { - "description": "Deprecated. Please use io.k8s.api.batch.v1.JobStatus instead.", - "$ref": "#/definitions/io.k8s.api.batch.v1.JobStatus" - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest": { - "description": "Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequest instead.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest" - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition": { - "description": "Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition instead.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition" - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList": { - "description": "Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestList instead.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList" - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec": { - "description": "Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec instead.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec" - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus": { - "description": "Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus instead.", - "$ref": "#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSet instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetSpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetStatus instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.Deployment instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Deployment" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentCondition instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentRollback instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentSpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStatus instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStrategy instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressPath instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.HostPortRange instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IDRange instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IDRange" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.Ingress instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Ingress" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressBackend instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressRule instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressRule" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressSpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressStatus instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressTLS instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicy instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyPeer instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyPort instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicySpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicy instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicyList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSet instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetCondition instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetCondition" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetList instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetSpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetStatus instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.RollbackConfig instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.RollingUpdateDeployment instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.Scale instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.Scale" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ScaleSpec instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.ScaleStatus instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus" - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions": { - "description": "Deprecated. Please use io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions instead.", - "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicy instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyIngressRule instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyList instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyList" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyPeer instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyPort instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort" - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec": { - "description": "Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicySpec instead.", - "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec" - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction": { - "description": "Deprecated. Please use io.k8s.api.policy.v1beta1.Eviction instead.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.Eviction" - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget": { - "description": "Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudget instead.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget" - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList": { - "description": "Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetList instead.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList" - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec": { - "description": "Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec instead.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec" - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus": { - "description": "Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus instead.", - "$ref": "#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRole instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleBinding instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleBindingList instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleList instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.PolicyRule instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.Role instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Role" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleBinding instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleBindingList instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleList instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleList" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleRef instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.RoleRef" - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject": { - "description": "Deprecated. Please use io.k8s.api.rbac.v1beta1.Subject instead.", - "$ref": "#/definitions/io.k8s.api.rbac.v1beta1.Subject" - }, - "io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass": { - "description": "Deprecated. Please use io.k8s.api.storage.v1.StorageClass instead.", - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClass" - }, - "io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList": { - "description": "Deprecated. Please use io.k8s.api.storage.v1.StorageClassList instead.", - "$ref": "#/definitions/io.k8s.api.storage.v1.StorageClassList" - }, - "io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass": { - "description": "Deprecated. Please use io.k8s.api.storage.v1beta1.StorageClass instead.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClass" - }, - "io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList": { - "description": "Deprecated. Please use io.k8s.api.storage.v1beta1.StorageClassList instead.", - "$ref": "#/definitions/io.k8s.api.storage.v1beta1.StorageClassList" - } - }, - "securityDefinitions": { - "BearerToken": { - "description": "Bearer Token authentication", - "type": "apiKey", - "name": "authorization", - "in": "header" - } - }, - "security": [ - { - "BearerToken": [] - } - ] - } \ No newline at end of file +{"swagger":"2.0","info":{"title":"Kubernetes","version":"v0.0.0"},"paths":{"/api/":{"get":{"description":"get available API versions","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core"],"operationId":"getCoreAPIVersions","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions"}},"401":{"description":"Unauthorized"}}}},"/api/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"getCoreV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/api/v1/componentstatuses":{"get":{"description":"list objects of kind ComponentStatus","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ComponentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ComponentStatusList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ComponentStatus","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/componentstatuses/{name}":{"get":{"description":"read the specified ComponentStatus","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1ComponentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ComponentStatus"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ComponentStatus","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ComponentStatus","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/configmaps":{"get":{"description":"list or watch objects of kind ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ConfigMapForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/endpoints":{"get":{"description":"list or watch objects of kind Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1EndpointsForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointsList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/events":{"get":{"description":"list or watch objects of kind Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1EventForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.EventList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/limitranges":{"get":{"description":"list or watch objects of kind LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1LimitRangeForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRangeList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/namespaces":{"get":{"description":"list or watch objects of kind Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1Namespace","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.NamespaceList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"post":{"description":"create a Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1Namespace","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/bindings":{"post":{"description":"create a Binding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Binding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/configmaps":{"get":{"description":"list or watch objects of kind ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedConfigMap","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"post":{"description":"create a ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedConfigMap","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"delete":{"description":"delete collection of ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedConfigMap","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/configmaps/{name}":{"get":{"description":"read the specified ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedConfigMap","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"put":{"description":"replace the specified ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedConfigMap","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"delete":{"description":"delete a ConfigMap","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedConfigMap","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"patch":{"description":"partially update the specified ConfigMap","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedConfigMap","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ConfigMap","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/endpoints":{"get":{"description":"list or watch objects of kind Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedEndpoints","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointsList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"post":{"description":"create Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedEndpoints","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"delete":{"description":"delete collection of Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedEndpoints","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/endpoints/{name}":{"get":{"description":"read the specified Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedEndpoints","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"put":{"description":"replace the specified Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedEndpoints","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"delete":{"description":"delete Endpoints","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedEndpoints","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"patch":{"description":"partially update the specified Endpoints","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedEndpoints","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Endpoints","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/events":{"get":{"description":"list or watch objects of kind Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedEvent","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.EventList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"post":{"description":"create an Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedEvent","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"delete":{"description":"delete collection of Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedEvent","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/events/{name}":{"get":{"description":"read the specified Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedEvent","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"put":{"description":"replace the specified Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedEvent","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"delete":{"description":"delete an Event","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedEvent","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"patch":{"description":"partially update the specified Event","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedEvent","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Event","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/limitranges":{"get":{"description":"list or watch objects of kind LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedLimitRange","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRangeList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"post":{"description":"create a LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedLimitRange","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"delete":{"description":"delete collection of LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedLimitRange","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/limitranges/{name}":{"get":{"description":"read the specified LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedLimitRange","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"put":{"description":"replace the specified LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedLimitRange","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"delete":{"description":"delete a LimitRange","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedLimitRange","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"patch":{"description":"partially update the specified LimitRange","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedLimitRange","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the LimitRange","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/persistentvolumeclaims":{"get":{"description":"list or watch objects of kind PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedPersistentVolumeClaim","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"post":{"description":"create a PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedPersistentVolumeClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"delete":{"description":"delete collection of PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedPersistentVolumeClaim","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}":{"get":{"description":"read the specified PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPersistentVolumeClaim","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"put":{"description":"replace the specified PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedPersistentVolumeClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"delete":{"description":"delete a PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedPersistentVolumeClaim","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"patch":{"description":"partially update the specified PersistentVolumeClaim","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedPersistentVolumeClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PersistentVolumeClaim","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status":{"get":{"description":"read status of the specified PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPersistentVolumeClaimStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"put":{"description":"replace status of the specified PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedPersistentVolumeClaimStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"patch":{"description":"partially update status of the specified PersistentVolumeClaim","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedPersistentVolumeClaimStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PersistentVolumeClaim","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods":{"get":{"description":"list or watch objects of kind Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedPod","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"post":{"description":"create a Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedPod","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"delete":{"description":"delete collection of Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedPod","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}":{"get":{"description":"read the specified Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPod","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"put":{"description":"replace the specified Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedPod","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"delete":{"description":"delete a Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedPod","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"patch":{"description":"partially update the specified Pod","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedPod","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Pod","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/attach":{"get":{"description":"connect GET requests to attach of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedPodAttach","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodAttachOptions","version":"v1"}},"post":{"description":"connect POST requests to attach of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedPodAttach","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodAttachOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The container in which to execute the command. Defaults to only container if there is only one container in the pod.","name":"container","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodAttachOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"boolean","description":"Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.","name":"stderr","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.","name":"stdin","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.","name":"stdout","in":"query"},{"uniqueItems":true,"type":"boolean","description":"TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.","name":"tty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/binding":{"post":{"description":"create binding of a Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedPodBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Binding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Binding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Binding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/eviction":{"post":{"description":"create eviction of a Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedPodEviction","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.Eviction"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.Eviction"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.Eviction"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.Eviction"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"policy","kind":"Eviction","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Eviction","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/exec":{"get":{"description":"connect GET requests to exec of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedPodExec","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodExecOptions","version":"v1"}},"post":{"description":"connect POST requests to exec of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedPodExec","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodExecOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"Command is the remote command to execute. argv array. Not executed within a shell.","name":"command","in":"query"},{"uniqueItems":true,"type":"string","description":"Container in which to execute the command. Defaults to only container if there is only one container in the pod.","name":"container","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodExecOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"boolean","description":"Redirect the standard error stream of the pod for this call. Defaults to true.","name":"stderr","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Redirect the standard input stream of the pod for this call. Defaults to false.","name":"stdin","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Redirect the standard output stream of the pod for this call. Defaults to true.","name":"stdout","in":"query"},{"uniqueItems":true,"type":"boolean","description":"TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.","name":"tty","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/log":{"get":{"description":"read log of the specified Pod","consumes":["*/*"],"produces":["text/plain","application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPodLog","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The container for which to stream logs. Defaults to only container if there is one container in the pod.","name":"container","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Follow the log stream of the pod. Defaults to false.","name":"follow","in":"query"},{"uniqueItems":true,"type":"integer","description":"If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.","name":"limitBytes","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Pod","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Return previous terminated container logs. Defaults to false.","name":"previous","in":"query"},{"uniqueItems":true,"type":"integer","description":"A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.","name":"sinceSeconds","in":"query"},{"uniqueItems":true,"type":"integer","description":"If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime","name":"tailLines","in":"query"},{"uniqueItems":true,"type":"boolean","description":"If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.","name":"timestamps","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/portforward":{"get":{"description":"connect GET requests to portforward of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedPodPortforward","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodPortForwardOptions","version":"v1"}},"post":{"description":"connect POST requests to portforward of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedPodPortforward","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodPortForwardOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodPortForwardOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"integer","description":"List of ports to forward Required when using WebSockets","name":"ports","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/proxy":{"get":{"description":"connect GET requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNamespacedPodProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the URL path to use for the current proxy request to pod.","name":"path","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}":{"get":{"description":"connect GET requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Pod","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNamespacedPodProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"PodProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"path to the resource","name":"path","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the URL path to use for the current proxy request to pod.","name":"path","in":"query"}]},"/api/v1/namespaces/{namespace}/pods/{name}/status":{"get":{"description":"read status of the specified Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPodStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"put":{"description":"replace status of the specified Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedPodStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"patch":{"description":"partially update status of the specified Pod","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedPodStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Pod","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/podtemplates":{"get":{"description":"list or watch objects of kind PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedPodTemplate","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"post":{"description":"create a PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedPodTemplate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"delete":{"description":"delete collection of PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedPodTemplate","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/podtemplates/{name}":{"get":{"description":"read the specified PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedPodTemplate","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"put":{"description":"replace the specified PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedPodTemplate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"delete":{"description":"delete a PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedPodTemplate","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"patch":{"description":"partially update the specified PodTemplate","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedPodTemplate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodTemplate","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/replicationcontrollers":{"get":{"description":"list or watch objects of kind ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedReplicationController","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationControllerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"post":{"description":"create a ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedReplicationController","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"delete":{"description":"delete collection of ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedReplicationController","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}":{"get":{"description":"read the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedReplicationController","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"put":{"description":"replace the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedReplicationController","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"delete":{"description":"delete a ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedReplicationController","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"patch":{"description":"partially update the specified ReplicationController","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedReplicationController","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicationController","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale":{"get":{"description":"read scale of the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedReplicationControllerScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"put":{"description":"replace scale of the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedReplicationControllerScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"patch":{"description":"partially update scale of the specified ReplicationController","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedReplicationControllerScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status":{"get":{"description":"read status of the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedReplicationControllerStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"put":{"description":"replace status of the specified ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedReplicationControllerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"patch":{"description":"partially update status of the specified ReplicationController","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedReplicationControllerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicationController","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/resourcequotas":{"get":{"description":"list or watch objects of kind ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedResourceQuota","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuotaList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"post":{"description":"create a ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedResourceQuota","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"delete":{"description":"delete collection of ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedResourceQuota","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/resourcequotas/{name}":{"get":{"description":"read the specified ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedResourceQuota","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"put":{"description":"replace the specified ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedResourceQuota","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"delete":{"description":"delete a ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedResourceQuota","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"patch":{"description":"partially update the specified ResourceQuota","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedResourceQuota","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ResourceQuota","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/resourcequotas/{name}/status":{"get":{"description":"read status of the specified ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedResourceQuotaStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"put":{"description":"replace status of the specified ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedResourceQuotaStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"patch":{"description":"partially update status of the specified ResourceQuota","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedResourceQuotaStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ResourceQuota","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/secrets":{"get":{"description":"list or watch objects of kind Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedSecret","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.SecretList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"post":{"description":"create a Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedSecret","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"delete":{"description":"delete collection of Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedSecret","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/secrets/{name}":{"get":{"description":"read the specified Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedSecret","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"put":{"description":"replace the specified Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedSecret","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"delete":{"description":"delete a Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedSecret","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"patch":{"description":"partially update the specified Secret","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedSecret","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Secret","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/serviceaccounts":{"get":{"description":"list or watch objects of kind ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedServiceAccount","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccountList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"post":{"description":"create a ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedServiceAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"delete":{"description":"delete collection of ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNamespacedServiceAccount","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/serviceaccounts/{name}":{"get":{"description":"read the specified ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedServiceAccount","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"put":{"description":"replace the specified ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedServiceAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"delete":{"description":"delete a ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedServiceAccount","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"patch":{"description":"partially update the specified ServiceAccount","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedServiceAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ServiceAccount","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/services":{"get":{"description":"list or watch objects of kind Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1NamespacedService","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"post":{"description":"create a Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1NamespacedService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/services/{name}":{"get":{"description":"read the specified Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedService","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"put":{"description":"replace the specified Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"delete":{"description":"delete a Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1NamespacedService","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"patch":{"description":"partially update the specified Service","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Service","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{namespace}/services/{name}/proxy":{"get":{"description":"connect GET requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNamespacedServiceProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ServiceProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.","name":"path","in":"query"}]},"/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}":{"get":{"description":"connect GET requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Service","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNamespacedServiceProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ServiceProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"path to the resource","name":"path","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.","name":"path","in":"query"}]},"/api/v1/namespaces/{namespace}/services/{name}/status":{"get":{"description":"read status of the specified Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespacedServiceStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"put":{"description":"replace status of the specified Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespacedServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"patch":{"description":"partially update status of the specified Service","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespacedServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Service","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{name}":{"get":{"description":"read the specified Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1Namespace","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"put":{"description":"replace the specified Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1Namespace","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"delete":{"description":"delete a Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1Namespace","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"patch":{"description":"partially update the specified Namespace","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1Namespace","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Namespace","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{name}/finalize":{"put":{"description":"replace finalize of the specified Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespaceFinalize","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Namespace","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/namespaces/{name}/status":{"get":{"description":"read status of the specified Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NamespaceStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"put":{"description":"replace status of the specified Namespace","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NamespaceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"patch":{"description":"partially update status of the specified Namespace","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NamespaceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Namespace","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/nodes":{"get":{"description":"list or watch objects of kind Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1Node","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"post":{"description":"create a Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1Node","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"delete":{"description":"delete collection of Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionNode","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/nodes/{name}":{"get":{"description":"read the specified Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1Node","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"put":{"description":"replace the specified Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1Node","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"delete":{"description":"delete a Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1Node","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"patch":{"description":"partially update the specified Node","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1Node","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Node","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/nodes/{name}/proxy":{"get":{"description":"connect GET requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNodeProxy","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the NodeProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the URL path to use for the current proxy request to node.","name":"path","in":"query"}]},"/api/v1/nodes/{name}/proxy/{path}":{"get":{"description":"connect GET requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1GetNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"put":{"description":"connect PUT requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PutNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"post":{"description":"connect POST requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PostNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"delete":{"description":"connect DELETE requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1DeleteNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"options":{"description":"connect OPTIONS requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1OptionsNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"head":{"description":"connect HEAD requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1HeadNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"patch":{"description":"connect PATCH requests to proxy of Node","consumes":["*/*"],"produces":["*/*"],"schemes":["https"],"tags":["core_v1"],"operationId":"connectCoreV1PatchNodeProxyWithPath","responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"connect","x-kubernetes-group-version-kind":{"group":"","kind":"NodeProxyOptions","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the NodeProxyOptions","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"path to the resource","name":"path","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"Path is the URL path to use for the current proxy request to node.","name":"path","in":"query"}]},"/api/v1/nodes/{name}/status":{"get":{"description":"read status of the specified Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1NodeStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"put":{"description":"replace status of the specified Node","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1NodeStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"patch":{"description":"partially update status of the specified Node","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1NodeStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Node","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/persistentvolumeclaims":{"get":{"description":"list or watch objects of kind PersistentVolumeClaim","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1PersistentVolumeClaimForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/persistentvolumes":{"get":{"description":"list or watch objects of kind PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1PersistentVolume","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"post":{"description":"create a PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"createCoreV1PersistentVolume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"delete":{"description":"delete collection of PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1CollectionPersistentVolume","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/persistentvolumes/{name}":{"get":{"description":"read the specified PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1PersistentVolume","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"put":{"description":"replace the specified PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1PersistentVolume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"delete":{"description":"delete a PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"deleteCoreV1PersistentVolume","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"patch":{"description":"partially update the specified PersistentVolume","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1PersistentVolume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PersistentVolume","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/persistentvolumes/{name}/status":{"get":{"description":"read status of the specified PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"readCoreV1PersistentVolumeStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"put":{"description":"replace status of the specified PersistentVolume","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"replaceCoreV1PersistentVolumeStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"patch":{"description":"partially update status of the specified PersistentVolume","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["core_v1"],"operationId":"patchCoreV1PersistentVolumeStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PersistentVolume","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/api/v1/pods":{"get":{"description":"list or watch objects of kind Pod","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1PodForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/podtemplates":{"get":{"description":"list or watch objects of kind PodTemplate","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1PodTemplateForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/replicationcontrollers":{"get":{"description":"list or watch objects of kind ReplicationController","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ReplicationControllerForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationControllerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/resourcequotas":{"get":{"description":"list or watch objects of kind ResourceQuota","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ResourceQuotaForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuotaList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/secrets":{"get":{"description":"list or watch objects of kind Secret","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1SecretForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.SecretList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/serviceaccounts":{"get":{"description":"list or watch objects of kind ServiceAccount","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ServiceAccountForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccountList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/services":{"get":{"description":"list or watch objects of kind Service","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"listCoreV1ServiceForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/configmaps":{"get":{"description":"watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1ConfigMapListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/endpoints":{"get":{"description":"watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1EndpointsListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/events":{"get":{"description":"watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1EventListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/limitranges":{"get":{"description":"watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1LimitRangeListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces":{"get":{"description":"watch individual changes to a list of Namespace. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespaceList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/configmaps":{"get":{"description":"watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedConfigMapList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/configmaps/{name}":{"get":{"description":"watch changes to an object of kind ConfigMap. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedConfigMap","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"ConfigMap","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ConfigMap","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/endpoints":{"get":{"description":"watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedEndpointsList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/endpoints/{name}":{"get":{"description":"watch changes to an object of kind Endpoints. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedEndpoints","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Endpoints","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Endpoints","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/events":{"get":{"description":"watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedEventList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/events/{name}":{"get":{"description":"watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedEvent","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Event","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Event","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/limitranges":{"get":{"description":"watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedLimitRangeList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/limitranges/{name}":{"get":{"description":"watch changes to an object of kind LimitRange. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedLimitRange","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"LimitRange","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the LimitRange","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims":{"get":{"description":"watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPersistentVolumeClaimList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}":{"get":{"description":"watch changes to an object of kind PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPersistentVolumeClaim","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PersistentVolumeClaim","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/pods":{"get":{"description":"watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPodList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/pods/{name}":{"get":{"description":"watch changes to an object of kind Pod. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPod","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Pod","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/podtemplates":{"get":{"description":"watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPodTemplateList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/podtemplates/{name}":{"get":{"description":"watch changes to an object of kind PodTemplate. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedPodTemplate","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodTemplate","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/replicationcontrollers":{"get":{"description":"watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedReplicationControllerList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}":{"get":{"description":"watch changes to an object of kind ReplicationController. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedReplicationController","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ReplicationController","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/resourcequotas":{"get":{"description":"watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedResourceQuotaList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}":{"get":{"description":"watch changes to an object of kind ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedResourceQuota","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ResourceQuota","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/secrets":{"get":{"description":"watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedSecretList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/secrets/{name}":{"get":{"description":"watch changes to an object of kind Secret. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedSecret","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Secret","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/serviceaccounts":{"get":{"description":"watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedServiceAccountList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}":{"get":{"description":"watch changes to an object of kind ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedServiceAccount","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ServiceAccount","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/services":{"get":{"description":"watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedServiceList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{namespace}/services/{name}":{"get":{"description":"watch changes to an object of kind Service. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NamespacedService","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Service","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/namespaces/{name}":{"get":{"description":"watch changes to an object of kind Namespace. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1Namespace","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Namespace","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Namespace","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/nodes":{"get":{"description":"watch individual changes to a list of Node. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1NodeList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/nodes/{name}":{"get":{"description":"watch changes to an object of kind Node. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1Node","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"Node","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Node","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/persistentvolumeclaims":{"get":{"description":"watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1PersistentVolumeClaimListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolumeClaim","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/persistentvolumes":{"get":{"description":"watch individual changes to a list of PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1PersistentVolumeList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/persistentvolumes/{name}":{"get":{"description":"watch changes to an object of kind PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1PersistentVolume","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"","kind":"PersistentVolume","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PersistentVolume","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/pods":{"get":{"description":"watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1PodListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Pod","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/podtemplates":{"get":{"description":"watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1PodTemplateListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"PodTemplate","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/replicationcontrollers":{"get":{"description":"watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1ReplicationControllerListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ReplicationController","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/resourcequotas":{"get":{"description":"watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1ResourceQuotaListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ResourceQuota","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/secrets":{"get":{"description":"watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1SecretListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Secret","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/serviceaccounts":{"get":{"description":"watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1ServiceAccountListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"ServiceAccount","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/api/v1/watch/services":{"get":{"description":"watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["core_v1"],"operationId":"watchCoreV1ServiceListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"","kind":"Service","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/":{"get":{"description":"get available API versions","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apis"],"operationId":"getAPIVersions","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList"}},"401":{"description":"Unauthorized"}}}},"/apis/admissionregistration.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration"],"operationId":"getAdmissionregistrationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/admissionregistration.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"getAdmissionregistrationV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations":{"get":{"description":"list or watch objects of kind MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"listAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"post":{"description":"create a MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"createAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"delete":{"description":"delete collection of MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"deleteAdmissionregistrationV1beta1CollectionMutatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name}":{"get":{"description":"read the specified MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"readAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"put":{"description":"replace the specified MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"replaceAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"delete":{"description":"delete a MutatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"deleteAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"patch":{"description":"partially update the specified MutatingWebhookConfiguration","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"patchAdmissionregistrationV1beta1MutatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the MutatingWebhookConfiguration","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations":{"get":{"description":"list or watch objects of kind ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"listAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"post":{"description":"create a ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"createAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"delete":{"description":"delete collection of ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"deleteAdmissionregistrationV1beta1CollectionValidatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name}":{"get":{"description":"read the specified ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"readAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"put":{"description":"replace the specified ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"replaceAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"delete":{"description":"delete a ValidatingWebhookConfiguration","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"deleteAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"patch":{"description":"partially update the specified ValidatingWebhookConfiguration","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"patchAdmissionregistrationV1beta1ValidatingWebhookConfiguration","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ValidatingWebhookConfiguration","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations":{"get":{"description":"watch individual changes to a list of MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"watchAdmissionregistrationV1beta1MutatingWebhookConfigurationList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name}":{"get":{"description":"watch changes to an object of kind MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"watchAdmissionregistrationV1beta1MutatingWebhookConfiguration","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the MutatingWebhookConfiguration","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations":{"get":{"description":"watch individual changes to a list of ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"watchAdmissionregistrationV1beta1ValidatingWebhookConfigurationList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name}":{"get":{"description":"watch changes to an object of kind ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["admissionregistration_v1beta1"],"operationId":"watchAdmissionregistrationV1beta1ValidatingWebhookConfiguration","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ValidatingWebhookConfiguration","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiextensions.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions"],"operationId":"getApiextensionsAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/apiextensions.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"getApiextensionsV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions":{"get":{"description":"list or watch objects of kind CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"listApiextensionsV1beta1CustomResourceDefinition","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"post":{"description":"create a CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"createApiextensionsV1beta1CustomResourceDefinition","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"delete":{"description":"delete collection of CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"deleteApiextensionsV1beta1CollectionCustomResourceDefinition","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}":{"get":{"description":"read the specified CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"readApiextensionsV1beta1CustomResourceDefinition","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"put":{"description":"replace the specified CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"replaceApiextensionsV1beta1CustomResourceDefinition","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"delete":{"description":"delete a CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"deleteApiextensionsV1beta1CustomResourceDefinition","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"patch":{"description":"partially update the specified CustomResourceDefinition","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"patchApiextensionsV1beta1CustomResourceDefinition","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CustomResourceDefinition","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status":{"get":{"description":"read status of the specified CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"readApiextensionsV1beta1CustomResourceDefinitionStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"put":{"description":"replace status of the specified CustomResourceDefinition","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"replaceApiextensionsV1beta1CustomResourceDefinitionStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"patch":{"description":"partially update status of the specified CustomResourceDefinition","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"patchApiextensionsV1beta1CustomResourceDefinitionStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CustomResourceDefinition","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions":{"get":{"description":"watch individual changes to a list of CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"watchApiextensionsV1beta1CustomResourceDefinitionList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions/{name}":{"get":{"description":"watch changes to an object of kind CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiextensions_v1beta1"],"operationId":"watchApiextensionsV1beta1CustomResourceDefinition","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CustomResourceDefinition","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiregistration.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration"],"operationId":"getApiregistrationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/apiregistration.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"getApiregistrationV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apiregistration.k8s.io/v1/apiservices":{"get":{"description":"list or watch objects of kind APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"listApiregistrationV1APIService","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"post":{"description":"create an APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"createApiregistrationV1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"delete":{"description":"delete collection of APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"deleteApiregistrationV1CollectionAPIService","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1/apiservices/{name}":{"get":{"description":"read the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"readApiregistrationV1APIService","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"put":{"description":"replace the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"replaceApiregistrationV1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"delete":{"description":"delete an APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"deleteApiregistrationV1APIService","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"patch":{"description":"partially update the specified APIService","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"patchApiregistrationV1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1/apiservices/{name}/status":{"get":{"description":"read status of the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"readApiregistrationV1APIServiceStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"put":{"description":"replace status of the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"replaceApiregistrationV1APIServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"patch":{"description":"partially update status of the specified APIService","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"patchApiregistrationV1APIServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1/watch/apiservices":{"get":{"description":"watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"watchApiregistrationV1APIServiceList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiregistration.k8s.io/v1/watch/apiservices/{name}":{"get":{"description":"watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1"],"operationId":"watchApiregistrationV1APIService","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiregistration.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"getApiregistrationV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apiregistration.k8s.io/v1beta1/apiservices":{"get":{"description":"list or watch objects of kind APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"listApiregistrationV1beta1APIService","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"post":{"description":"create an APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"createApiregistrationV1beta1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"delete":{"description":"delete collection of APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"deleteApiregistrationV1beta1CollectionAPIService","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}":{"get":{"description":"read the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"readApiregistrationV1beta1APIService","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"put":{"description":"replace the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"replaceApiregistrationV1beta1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"delete":{"description":"delete an APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"deleteApiregistrationV1beta1APIService","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"patch":{"description":"partially update the specified APIService","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"patchApiregistrationV1beta1APIService","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status":{"get":{"description":"read status of the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"readApiregistrationV1beta1APIServiceStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"put":{"description":"replace status of the specified APIService","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"replaceApiregistrationV1beta1APIServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"patch":{"description":"partially update status of the specified APIService","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"patchApiregistrationV1beta1APIServiceStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices":{"get":{"description":"watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"watchApiregistrationV1beta1APIServiceList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}":{"get":{"description":"watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apiregistration_v1beta1"],"operationId":"watchApiregistrationV1beta1APIService","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apiregistration.k8s.io","version":"v1beta1","kind":"APIService"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the APIService","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps"],"operationId":"getAppsAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/apps/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"getAppsV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apps/v1/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1ControllerRevisionForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1DaemonSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1DeploymentForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"post":{"description":"create a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"createAppsV1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"delete":{"description":"delete collection of ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1CollectionNamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"read the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"put":{"description":"replace the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"delete":{"description":"delete a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"patch":{"description":"partially update the specified ControllerRevision","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"post":{"description":"create a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"createAppsV1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"delete":{"description":"delete collection of DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1CollectionNamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"read the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"put":{"description":"replace the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"delete":{"description":"delete a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"patch":{"description":"partially update the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status":{"get":{"description":"read status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedDaemonSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"put":{"description":"replace status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"patch":{"description":"partially update status of the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"post":{"description":"create a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"createAppsV1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"delete":{"description":"delete collection of Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1CollectionNamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/deployments/{name}":{"get":{"description":"read the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"put":{"description":"replace the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"delete":{"description":"delete a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1NamespacedDeployment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"patch":{"description":"partially update the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale":{"get":{"description":"read scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedDeploymentScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"put":{"description":"replace scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"patch":{"description":"partially update scale of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/deployments/{name}/status":{"get":{"description":"read status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedDeploymentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"put":{"description":"replace status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"patch":{"description":"partially update status of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"post":{"description":"create a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"createAppsV1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"delete":{"description":"delete collection of ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1CollectionNamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"read the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"put":{"description":"replace the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"delete":{"description":"delete a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"patch":{"description":"partially update the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale":{"get":{"description":"read scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedReplicaSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"put":{"description":"replace scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"patch":{"description":"partially update scale of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status":{"get":{"description":"read status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedReplicaSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"put":{"description":"replace status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"patch":{"description":"partially update status of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"post":{"description":"create a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"createAppsV1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"delete":{"description":"delete collection of StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1CollectionNamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"read the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"put":{"description":"replace the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"delete":{"description":"delete a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"deleteAppsV1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"patch":{"description":"partially update the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale":{"get":{"description":"read scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedStatefulSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"put":{"description":"replace scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"patch":{"description":"partially update scale of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"Scale","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status":{"get":{"description":"read status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"readAppsV1NamespacedStatefulSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"put":{"description":"replace status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"replaceAppsV1NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"patch":{"description":"partially update status of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1"],"operationId":"patchAppsV1NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1ReplicaSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"listAppsV1StatefulSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1ControllerRevisionListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1DaemonSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1DeploymentListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedControllerRevisionList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedControllerRevision","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedDaemonSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedDaemonSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedDeploymentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/deployments/{name}":{"get":{"description":"watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedDeployment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedReplicaSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedReplicaSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedStatefulSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1NamespacedStatefulSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1ReplicaSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1/watch/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1"],"operationId":"watchAppsV1StatefulSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"getAppsV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apps/v1beta1/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1ControllerRevisionForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1DeploymentForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"post":{"description":"create a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"createAppsV1beta1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"delete":{"description":"delete collection of ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1CollectionNamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"read the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"put":{"description":"replace the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"delete":{"description":"delete a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"patch":{"description":"partially update the specified ControllerRevision","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"post":{"description":"create a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"createAppsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"delete":{"description":"delete collection of Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1CollectionNamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}":{"get":{"description":"read the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"put":{"description":"replace the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"delete":{"description":"delete a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"patch":{"description":"partially update the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback":{"post":{"description":"create rollback of a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"createAppsV1beta1NamespacedDeploymentRollback","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"DeploymentRollback","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the DeploymentRollback","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale":{"get":{"description":"read scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedDeploymentScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"put":{"description":"replace scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"patch":{"description":"partially update scale of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status":{"get":{"description":"read status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedDeploymentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"put":{"description":"replace status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"patch":{"description":"partially update status of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"post":{"description":"create a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"createAppsV1beta1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"delete":{"description":"delete collection of StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1CollectionNamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"read the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"put":{"description":"replace the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"delete":{"description":"delete a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"deleteAppsV1beta1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"patch":{"description":"partially update the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale":{"get":{"description":"read scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedStatefulSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"put":{"description":"replace scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"patch":{"description":"partially update scale of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status":{"get":{"description":"read status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"readAppsV1beta1NamespacedStatefulSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"put":{"description":"replace status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"replaceAppsV1beta1NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"patch":{"description":"partially update status of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"patchAppsV1beta1NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta1/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"listAppsV1beta1StatefulSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1ControllerRevisionListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1DeploymentListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedControllerRevisionList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedControllerRevision","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedDeploymentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}":{"get":{"description":"watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedDeployment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedStatefulSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1NamespacedStatefulSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta1/watch/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta1"],"operationId":"watchAppsV1beta1StatefulSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"getAppsV1beta2APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/apps/v1beta2/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2ControllerRevisionForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2DaemonSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2DeploymentForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions":{"get":{"description":"list or watch objects of kind ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"post":{"description":"create a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"createAppsV1beta2NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"delete":{"description":"delete collection of ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2CollectionNamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"read the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedControllerRevision","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"put":{"description":"replace the specified ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"delete":{"description":"delete a ControllerRevision","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2NamespacedControllerRevision","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"patch":{"description":"partially update the specified ControllerRevision","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedControllerRevision","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"post":{"description":"create a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"createAppsV1beta2NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"delete":{"description":"delete collection of DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2CollectionNamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"read the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"put":{"description":"replace the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"delete":{"description":"delete a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2NamespacedDaemonSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"patch":{"description":"partially update the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status":{"get":{"description":"read status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedDaemonSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"put":{"description":"replace status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"patch":{"description":"partially update status of the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"post":{"description":"create a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"createAppsV1beta2NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"delete":{"description":"delete collection of Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2CollectionNamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}":{"get":{"description":"read the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"put":{"description":"replace the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"delete":{"description":"delete a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2NamespacedDeployment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"patch":{"description":"partially update the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale":{"get":{"description":"read scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedDeploymentScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"put":{"description":"replace scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"patch":{"description":"partially update scale of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status":{"get":{"description":"read status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedDeploymentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"put":{"description":"replace status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"patch":{"description":"partially update status of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"post":{"description":"create a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"createAppsV1beta2NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"delete":{"description":"delete collection of ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2CollectionNamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"read the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"put":{"description":"replace the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"delete":{"description":"delete a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2NamespacedReplicaSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"patch":{"description":"partially update the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale":{"get":{"description":"read scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedReplicaSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"put":{"description":"replace scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"patch":{"description":"partially update scale of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status":{"get":{"description":"read status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedReplicaSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"put":{"description":"replace status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"patch":{"description":"partially update status of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"post":{"description":"create a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"createAppsV1beta2NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"delete":{"description":"delete collection of StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2CollectionNamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"read the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedStatefulSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"put":{"description":"replace the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"delete":{"description":"delete a StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"deleteAppsV1beta2NamespacedStatefulSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"patch":{"description":"partially update the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedStatefulSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale":{"get":{"description":"read scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedStatefulSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"put":{"description":"replace scale of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"patch":{"description":"partially update scale of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedStatefulSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Scale","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status":{"get":{"description":"read status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"readAppsV1beta2NamespacedStatefulSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"put":{"description":"replace status of the specified StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"replaceAppsV1beta2NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"patch":{"description":"partially update status of the specified StatefulSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"patchAppsV1beta2NamespacedStatefulSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/apps/v1beta2/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2ReplicaSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/statefulsets":{"get":{"description":"list or watch objects of kind StatefulSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"listAppsV1beta2StatefulSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2ControllerRevisionListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2DaemonSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2DeploymentListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions":{"get":{"description":"watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedControllerRevisionList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name}":{"get":{"description":"watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedControllerRevision","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ControllerRevision","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedDaemonSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedDaemonSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"DaemonSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedDeploymentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name}":{"get":{"description":"watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedDeployment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"Deployment","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedReplicaSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedReplicaSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedStatefulSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets/{name}":{"get":{"description":"watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2NamespacedStatefulSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the StatefulSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2ReplicaSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/apps/v1beta2/watch/statefulsets":{"get":{"description":"watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["apps_v1beta2"],"operationId":"watchAppsV1beta2StatefulSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps","kind":"StatefulSet","version":"v1beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/authentication.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authentication"],"operationId":"getAuthenticationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/authentication.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authentication_v1"],"operationId":"getAuthenticationV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/authentication.k8s.io/v1/tokenreviews":{"post":{"description":"create a TokenReview","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authentication_v1"],"operationId":"createAuthenticationV1TokenReview","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReview"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReview"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReview"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReview"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"authentication.k8s.io","kind":"TokenReview","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/authorization.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization"],"operationId":"getAuthorizationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/authorization.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization_v1"],"operationId":"getAuthorizationV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews":{"post":{"description":"create a LocalSubjectAccessReview","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization_v1"],"operationId":"createAuthorizationV1NamespacedLocalSubjectAccessReview","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"authorization.k8s.io","kind":"LocalSubjectAccessReview","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/authorization.k8s.io/v1/selfsubjectaccessreviews":{"post":{"description":"create a SelfSubjectAccessReview","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization_v1"],"operationId":"createAuthorizationV1SelfSubjectAccessReview","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"authorization.k8s.io","kind":"SelfSubjectAccessReview","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/authorization.k8s.io/v1/selfsubjectrulesreviews":{"post":{"description":"create a SelfSubjectRulesReview","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization_v1"],"operationId":"createAuthorizationV1SelfSubjectRulesReview","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"authorization.k8s.io","kind":"SelfSubjectRulesReview","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/authorization.k8s.io/v1/subjectaccessreviews":{"post":{"description":"create a SubjectAccessReview","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["authorization_v1"],"operationId":"createAuthorizationV1SubjectAccessReview","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"authorization.k8s.io","kind":"SubjectAccessReview","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling"],"operationId":"getAutoscalingAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/autoscaling/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"getAutoscalingV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/autoscaling/v1/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"listAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"post":{"description":"create a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"createAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"delete":{"description":"delete collection of HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"read the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"readAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"put":{"description":"replace the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"replaceAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"delete":{"description":"delete a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"deleteAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"patch":{"description":"partially update the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"patchAutoscalingV1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status":{"get":{"description":"read status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"put":{"description":"replace status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"patch":{"description":"partially update status of the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v1/watch/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"watchAutoscalingV1NamespacedHorizontalPodAutoscalerList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v1"],"operationId":"watchAutoscalingV1NamespacedHorizontalPodAutoscaler","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"getAutoscalingV2beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/autoscaling/v2beta1/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"listAutoscalingV2beta1HorizontalPodAutoscalerForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"listAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"post":{"description":"create a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"createAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"delete":{"description":"delete collection of HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"deleteAutoscalingV2beta1CollectionNamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"read the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"readAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"put":{"description":"replace the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"delete":{"description":"delete a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"deleteAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"patch":{"description":"partially update the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"patchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status":{"get":{"description":"read status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"readAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"put":{"description":"replace status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"patch":{"description":"partially update status of the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"patchAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta1/watch/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"watchAutoscalingV2beta1HorizontalPodAutoscalerListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"watchAutoscalingV2beta1NamespacedHorizontalPodAutoscalerList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta1"],"operationId":"watchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta2/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"getAutoscalingV2beta2APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/autoscaling/v2beta2/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"listAutoscalingV2beta2HorizontalPodAutoscalerForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"list or watch objects of kind HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"listAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"post":{"description":"create a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"createAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"delete":{"description":"delete collection of HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"deleteAutoscalingV2beta2CollectionNamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"read the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"readAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"put":{"description":"replace the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"delete":{"description":"delete a HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"deleteAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"patch":{"description":"partially update the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"patchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status":{"get":{"description":"read status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"readAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"put":{"description":"replace status of the specified HorizontalPodAutoscaler","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"patch":{"description":"partially update status of the specified HorizontalPodAutoscaler","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"patchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/autoscaling/v2beta2/watch/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"watchAutoscalingV2beta2HorizontalPodAutoscalerListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers":{"get":{"description":"watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"watchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}":{"get":{"description":"watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["autoscaling_v2beta2"],"operationId":"watchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the HorizontalPodAutoscaler","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch"],"operationId":"getBatchAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/batch/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"getBatchV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/batch/v1/jobs":{"get":{"description":"list or watch objects of kind Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1"],"operationId":"listBatchV1JobForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.JobList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1/namespaces/{namespace}/jobs":{"get":{"description":"list or watch objects of kind Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1"],"operationId":"listBatchV1NamespacedJob","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.JobList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"post":{"description":"create a Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"createBatchV1NamespacedJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"delete":{"description":"delete collection of Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"deleteBatchV1CollectionNamespacedJob","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1/namespaces/{namespace}/jobs/{name}":{"get":{"description":"read the specified Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"readBatchV1NamespacedJob","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"put":{"description":"replace the specified Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"replaceBatchV1NamespacedJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"delete":{"description":"delete a Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"deleteBatchV1NamespacedJob","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"patch":{"description":"partially update the specified Job","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"patchBatchV1NamespacedJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Job","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status":{"get":{"description":"read status of the specified Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"readBatchV1NamespacedJobStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"put":{"description":"replace status of the specified Job","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"replaceBatchV1NamespacedJobStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"patch":{"description":"partially update status of the specified Job","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1"],"operationId":"patchBatchV1NamespacedJobStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Job","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1/watch/jobs":{"get":{"description":"watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1"],"operationId":"watchBatchV1JobListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1/watch/namespaces/{namespace}/jobs":{"get":{"description":"watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1"],"operationId":"watchBatchV1NamespacedJobList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}":{"get":{"description":"watch changes to an object of kind Job. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1"],"operationId":"watchBatchV1NamespacedJob","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"batch","kind":"Job","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Job","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"getBatchV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/batch/v1beta1/cronjobs":{"get":{"description":"list or watch objects of kind CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"listBatchV1beta1CronJobForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJobList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs":{"get":{"description":"list or watch objects of kind CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"listBatchV1beta1NamespacedCronJob","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJobList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"post":{"description":"create a CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"createBatchV1beta1NamespacedCronJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"delete":{"description":"delete collection of CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"deleteBatchV1beta1CollectionNamespacedCronJob","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}":{"get":{"description":"read the specified CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"readBatchV1beta1NamespacedCronJob","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"put":{"description":"replace the specified CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"replaceBatchV1beta1NamespacedCronJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"delete":{"description":"delete a CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"deleteBatchV1beta1NamespacedCronJob","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"patch":{"description":"partially update the specified CronJob","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"patchBatchV1beta1NamespacedCronJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CronJob","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status":{"get":{"description":"read status of the specified CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"readBatchV1beta1NamespacedCronJobStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"put":{"description":"replace status of the specified CronJob","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"replaceBatchV1beta1NamespacedCronJobStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"patch":{"description":"partially update status of the specified CronJob","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"patchBatchV1beta1NamespacedCronJobStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CronJob","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/batch/v1beta1/watch/cronjobs":{"get":{"description":"watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"watchBatchV1beta1CronJobListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs":{"get":{"description":"watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"watchBatchV1beta1NamespacedCronJobList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs/{name}":{"get":{"description":"watch changes to an object of kind CronJob. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["batch_v1beta1"],"operationId":"watchBatchV1beta1NamespacedCronJob","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"batch","kind":"CronJob","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CronJob","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/certificates.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates"],"operationId":"getCertificatesAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/certificates.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"getCertificatesV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests":{"get":{"description":"list or watch objects of kind CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"listCertificatesV1beta1CertificateSigningRequest","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"post":{"description":"create a CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"createCertificatesV1beta1CertificateSigningRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"delete":{"description":"delete collection of CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"deleteCertificatesV1beta1CollectionCertificateSigningRequest","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}":{"get":{"description":"read the specified CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"readCertificatesV1beta1CertificateSigningRequest","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"put":{"description":"replace the specified CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"replaceCertificatesV1beta1CertificateSigningRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"delete":{"description":"delete a CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"deleteCertificatesV1beta1CertificateSigningRequest","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"patch":{"description":"partially update the specified CertificateSigningRequest","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"patchCertificatesV1beta1CertificateSigningRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CertificateSigningRequest","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval":{"put":{"description":"replace approval of the specified CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"replaceCertificatesV1beta1CertificateSigningRequestApproval","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CertificateSigningRequest","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status":{"get":{"description":"read status of the specified CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"readCertificatesV1beta1CertificateSigningRequestStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"put":{"description":"replace status of the specified CertificateSigningRequest","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"replaceCertificatesV1beta1CertificateSigningRequestStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"patch":{"description":"partially update status of the specified CertificateSigningRequest","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"patchCertificatesV1beta1CertificateSigningRequestStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CertificateSigningRequest","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests":{"get":{"description":"watch individual changes to a list of CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"watchCertificatesV1beta1CertificateSigningRequestList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}":{"get":{"description":"watch changes to an object of kind CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["certificates_v1beta1"],"operationId":"watchCertificatesV1beta1CertificateSigningRequest","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CertificateSigningRequest","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination"],"operationId":"getCoordinationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/coordination.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"getCoordinationV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/coordination.k8s.io/v1/leases":{"get":{"description":"list or watch objects of kind Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"listCoordinationV1LeaseForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.LeaseList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1/namespaces/{namespace}/leases":{"get":{"description":"list or watch objects of kind Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"listCoordinationV1NamespacedLease","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.LeaseList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"post":{"description":"create a Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"createCoordinationV1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"delete":{"description":"delete collection of Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"deleteCoordinationV1CollectionNamespacedLease","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}":{"get":{"description":"read the specified Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"readCoordinationV1NamespacedLease","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"put":{"description":"replace the specified Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"replaceCoordinationV1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"delete":{"description":"delete a Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"deleteCoordinationV1NamespacedLease","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"patch":{"description":"partially update the specified Lease","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"patchCoordinationV1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Lease","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/coordination.k8s.io/v1/watch/leases":{"get":{"description":"watch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"watchCoordinationV1LeaseListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1/watch/namespaces/{namespace}/leases":{"get":{"description":"watch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"watchCoordinationV1NamespacedLeaseList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1/watch/namespaces/{namespace}/leases/{name}":{"get":{"description":"watch changes to an object of kind Lease. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1"],"operationId":"watchCoordinationV1NamespacedLease","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Lease","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"getCoordinationV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/coordination.k8s.io/v1beta1/leases":{"get":{"description":"list or watch objects of kind Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"listCoordinationV1beta1LeaseForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.LeaseList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/namespaces/{namespace}/leases":{"get":{"description":"list or watch objects of kind Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"listCoordinationV1beta1NamespacedLease","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.LeaseList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"post":{"description":"create a Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"createCoordinationV1beta1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"delete":{"description":"delete collection of Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"deleteCoordinationV1beta1CollectionNamespacedLease","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/namespaces/{namespace}/leases/{name}":{"get":{"description":"read the specified Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"readCoordinationV1beta1NamespacedLease","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"put":{"description":"replace the specified Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"replaceCoordinationV1beta1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"delete":{"description":"delete a Lease","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"deleteCoordinationV1beta1NamespacedLease","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"patch":{"description":"partially update the specified Lease","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"patchCoordinationV1beta1NamespacedLease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Lease","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/watch/leases":{"get":{"description":"watch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"watchCoordinationV1beta1LeaseListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/watch/namespaces/{namespace}/leases":{"get":{"description":"watch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"watchCoordinationV1beta1NamespacedLeaseList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/coordination.k8s.io/v1beta1/watch/namespaces/{namespace}/leases/{name}":{"get":{"description":"watch changes to an object of kind Lease. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["coordination_v1beta1"],"operationId":"watchCoordinationV1beta1NamespacedLease","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Lease","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions"],"operationId":"getExtensionsAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/extensions/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"getExtensionsV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/extensions/v1beta1/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1DaemonSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1DeploymentForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/ingresses":{"get":{"description":"list or watch objects of kind Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1IngressForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets":{"get":{"description":"list or watch objects of kind DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"post":{"description":"create a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"delete":{"description":"delete collection of DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionNamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"read the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedDaemonSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"put":{"description":"replace the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"delete":{"description":"delete a DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"patch":{"description":"partially update the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedDaemonSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status":{"get":{"description":"read status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedDaemonSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"put":{"description":"replace status of the specified DaemonSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"patch":{"description":"partially update status of the specified DaemonSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedDaemonSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/deployments":{"get":{"description":"list or watch objects of kind Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"post":{"description":"create a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"delete":{"description":"delete collection of Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionNamespacedDeployment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}":{"get":{"description":"read the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedDeployment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"put":{"description":"replace the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"delete":{"description":"delete a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"patch":{"description":"partially update the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedDeployment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback":{"post":{"description":"create rollback of a Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedDeploymentRollback","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DeploymentRollback","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the DeploymentRollback","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale":{"get":{"description":"read scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedDeploymentScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"put":{"description":"replace scale of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"patch":{"description":"partially update scale of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedDeploymentScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status":{"get":{"description":"read status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedDeploymentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"put":{"description":"replace status of the specified Deployment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"patch":{"description":"partially update status of the specified Deployment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedDeploymentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses":{"get":{"description":"list or watch objects of kind Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NamespacedIngress","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"post":{"description":"create an Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"delete":{"description":"delete collection of Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionNamespacedIngress","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}":{"get":{"description":"read the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedIngress","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"put":{"description":"replace the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"delete":{"description":"delete an Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"patch":{"description":"partially update the specified Ingress","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status":{"get":{"description":"read status of the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedIngressStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"put":{"description":"replace status of the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedIngressStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"patch":{"description":"partially update status of the specified Ingress","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedIngressStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies":{"get":{"description":"list or watch objects of kind NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"post":{"description":"create a NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"delete":{"description":"delete collection of NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionNamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}":{"get":{"description":"read the specified NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"put":{"description":"replace the specified NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"delete":{"description":"delete a NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"patch":{"description":"partially update the specified NetworkPolicy","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the NetworkPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"post":{"description":"create a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"delete":{"description":"delete collection of ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionNamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"read the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedReplicaSet","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"put":{"description":"replace the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"delete":{"description":"delete a ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"patch":{"description":"partially update the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedReplicaSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale":{"get":{"description":"read scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedReplicaSetScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"put":{"description":"replace scale of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"patch":{"description":"partially update scale of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedReplicaSetScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status":{"get":{"description":"read status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedReplicaSetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"put":{"description":"replace status of the specified ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"patch":{"description":"partially update status of the specified ReplicaSet","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedReplicaSetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale":{"get":{"description":"read scale of the specified ReplicationControllerDummy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1NamespacedReplicationControllerDummyScale","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"put":{"description":"replace scale of the specified ReplicationControllerDummy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1NamespacedReplicationControllerDummyScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"patch":{"description":"partially update scale of the specified ReplicationControllerDummy","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1NamespacedReplicationControllerDummyScale","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Scale"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Scale","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Scale","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/networkpolicies":{"get":{"description":"list or watch objects of kind NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1NetworkPolicyForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/podsecuritypolicies":{"get":{"description":"list or watch objects of kind PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1PodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"post":{"description":"create a PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"createExtensionsV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"delete":{"description":"delete collection of PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1CollectionPodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/podsecuritypolicies/{name}":{"get":{"description":"read the specified PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"readExtensionsV1beta1PodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"put":{"description":"replace the specified PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"replaceExtensionsV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"delete":{"description":"delete a PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"deleteExtensionsV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"patch":{"description":"partially update the specified PodSecurityPolicy","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"patchExtensionsV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodSecurityPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/extensions/v1beta1/replicasets":{"get":{"description":"list or watch objects of kind ReplicaSet","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"listExtensionsV1beta1ReplicaSetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1DaemonSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1DeploymentListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/ingresses":{"get":{"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1IngressListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets":{"get":{"description":"watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedDaemonSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}":{"get":{"description":"watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedDaemonSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the DaemonSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments":{"get":{"description":"watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedDeploymentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}":{"get":{"description":"watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedDeployment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Deployment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Deployment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses":{"get":{"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedIngressList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}":{"get":{"description":"watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedIngress","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies":{"get":{"description":"watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedNetworkPolicyList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}":{"get":{"description":"watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedNetworkPolicy","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the NetworkPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedReplicaSetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}":{"get":{"description":"watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NamespacedReplicaSet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ReplicaSet","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/networkpolicies":{"get":{"description":"watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1NetworkPolicyListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/podsecuritypolicies":{"get":{"description":"watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1PodSecurityPolicyList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}":{"get":{"description":"watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1PodSecurityPolicy","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodSecurityPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/extensions/v1beta1/watch/replicasets":{"get":{"description":"watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["extensions_v1beta1"],"operationId":"watchExtensionsV1beta1ReplicaSetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking"],"operationId":"getNetworkingAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/networking.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"getNetworkingV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies":{"get":{"description":"list or watch objects of kind NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1"],"operationId":"listNetworkingV1NamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"post":{"description":"create a NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"createNetworkingV1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"delete":{"description":"delete collection of NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"deleteNetworkingV1CollectionNamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}":{"get":{"description":"read the specified NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"readNetworkingV1NamespacedNetworkPolicy","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"put":{"description":"replace the specified NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"replaceNetworkingV1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"delete":{"description":"delete a NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"deleteNetworkingV1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"patch":{"description":"partially update the specified NetworkPolicy","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1"],"operationId":"patchNetworkingV1NamespacedNetworkPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the NetworkPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/networking.k8s.io/v1/networkpolicies":{"get":{"description":"list or watch objects of kind NetworkPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1"],"operationId":"listNetworkingV1NetworkPolicyForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies":{"get":{"description":"watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1"],"operationId":"watchNetworkingV1NamespacedNetworkPolicyList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}":{"get":{"description":"watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1"],"operationId":"watchNetworkingV1NamespacedNetworkPolicy","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the NetworkPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1/watch/networkpolicies":{"get":{"description":"watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1"],"operationId":"watchNetworkingV1NetworkPolicyListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"getNetworkingV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/networking.k8s.io/v1beta1/ingresses":{"get":{"description":"list or watch objects of kind Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"listNetworkingV1beta1IngressForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses":{"get":{"description":"list or watch objects of kind Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"listNetworkingV1beta1NamespacedIngress","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"post":{"description":"create an Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"createNetworkingV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"delete":{"description":"delete collection of Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"deleteNetworkingV1beta1CollectionNamespacedIngress","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}":{"get":{"description":"read the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"readNetworkingV1beta1NamespacedIngress","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"put":{"description":"replace the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"replaceNetworkingV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"delete":{"description":"delete an Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"deleteNetworkingV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"patch":{"description":"partially update the specified Ingress","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"patchNetworkingV1beta1NamespacedIngress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}/status":{"get":{"description":"read status of the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"readNetworkingV1beta1NamespacedIngressStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"put":{"description":"replace status of the specified Ingress","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"replaceNetworkingV1beta1NamespacedIngressStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"patch":{"description":"partially update status of the specified Ingress","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"patchNetworkingV1beta1NamespacedIngressStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/networking.k8s.io/v1beta1/watch/ingresses":{"get":{"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"watchNetworkingV1beta1IngressListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1beta1/watch/namespaces/{namespace}/ingresses":{"get":{"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"watchNetworkingV1beta1NamespacedIngressList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/networking.k8s.io/v1beta1/watch/namespaces/{namespace}/ingresses/{name}":{"get":{"description":"watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["networking_v1beta1"],"operationId":"watchNetworkingV1beta1NamespacedIngress","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Ingress","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/node.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node"],"operationId":"getNodeAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/node.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"getNodeV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/node.k8s.io/v1beta1/runtimeclasses":{"get":{"description":"list or watch objects of kind RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"listNodeV1beta1RuntimeClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClassList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"post":{"description":"create a RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"createNodeV1beta1RuntimeClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"delete":{"description":"delete collection of RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"deleteNodeV1beta1CollectionRuntimeClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/node.k8s.io/v1beta1/runtimeclasses/{name}":{"get":{"description":"read the specified RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"readNodeV1beta1RuntimeClass","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"put":{"description":"replace the specified RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"replaceNodeV1beta1RuntimeClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"delete":{"description":"delete a RuntimeClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"deleteNodeV1beta1RuntimeClass","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"patch":{"description":"partially update the specified RuntimeClass","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"patchNodeV1beta1RuntimeClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the RuntimeClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/node.k8s.io/v1beta1/watch/runtimeclasses":{"get":{"description":"watch individual changes to a list of RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"watchNodeV1beta1RuntimeClassList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/node.k8s.io/v1beta1/watch/runtimeclasses/{name}":{"get":{"description":"watch changes to an object of kind RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["node_v1beta1"],"operationId":"watchNodeV1beta1RuntimeClass","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the RuntimeClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy"],"operationId":"getPolicyAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/policy/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"getPolicyV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets":{"get":{"description":"list or watch objects of kind PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"listPolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"post":{"description":"create a PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"createPolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"delete":{"description":"delete collection of PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}":{"get":{"description":"read the specified PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"readPolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"put":{"description":"replace the specified PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"replacePolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"delete":{"description":"delete a PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"deletePolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"patch":{"description":"partially update the specified PodDisruptionBudget","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"patchPolicyV1beta1NamespacedPodDisruptionBudget","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodDisruptionBudget","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status":{"get":{"description":"read status of the specified PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"readPolicyV1beta1NamespacedPodDisruptionBudgetStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"put":{"description":"replace status of the specified PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"patch":{"description":"partially update status of the specified PodDisruptionBudget","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"patchPolicyV1beta1NamespacedPodDisruptionBudgetStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodDisruptionBudget","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/policy/v1beta1/poddisruptionbudgets":{"get":{"description":"list or watch objects of kind PodDisruptionBudget","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"listPolicyV1beta1PodDisruptionBudgetForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/v1beta1/podsecuritypolicies":{"get":{"description":"list or watch objects of kind PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"listPolicyV1beta1PodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"post":{"description":"create a PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"createPolicyV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"delete":{"description":"delete collection of PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"deletePolicyV1beta1CollectionPodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/policy/v1beta1/podsecuritypolicies/{name}":{"get":{"description":"read the specified PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"readPolicyV1beta1PodSecurityPolicy","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"put":{"description":"replace the specified PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"replacePolicyV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"delete":{"description":"delete a PodSecurityPolicy","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"deletePolicyV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"patch":{"description":"partially update the specified PodSecurityPolicy","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"patchPolicyV1beta1PodSecurityPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PodSecurityPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets":{"get":{"description":"watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"watchPolicyV1beta1NamespacedPodDisruptionBudgetList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}":{"get":{"description":"watch changes to an object of kind PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"watchPolicyV1beta1NamespacedPodDisruptionBudget","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodDisruptionBudget","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/v1beta1/watch/poddisruptionbudgets":{"get":{"description":"watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/v1beta1/watch/podsecuritypolicies":{"get":{"description":"watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"watchPolicyV1beta1PodSecurityPolicyList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/policy/v1beta1/watch/podsecuritypolicies/{name}":{"get":{"description":"watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["policy_v1beta1"],"operationId":"watchPolicyV1beta1PodSecurityPolicy","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PodSecurityPolicy","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization"],"operationId":"getRbacAuthorizationAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/rbac.authorization.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"getRbacAuthorizationV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/rbac.authorization.k8s.io/v1/clusterrolebindings":{"get":{"description":"list or watch objects of kind ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1ClusterRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"post":{"description":"create a ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"createRbacAuthorizationV1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"delete":{"description":"delete collection of ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1CollectionClusterRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}":{"get":{"description":"read the specified ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"readRbacAuthorizationV1ClusterRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"put":{"description":"replace the specified ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"replaceRbacAuthorizationV1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"delete":{"description":"delete a ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1ClusterRoleBinding","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"patch":{"description":"partially update the specified ClusterRoleBinding","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"patchRbacAuthorizationV1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ClusterRoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/clusterroles":{"get":{"description":"list or watch objects of kind ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1ClusterRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"post":{"description":"create a ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"createRbacAuthorizationV1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"delete":{"description":"delete collection of ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1CollectionClusterRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/clusterroles/{name}":{"get":{"description":"read the specified ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"readRbacAuthorizationV1ClusterRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"put":{"description":"replace the specified ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"replaceRbacAuthorizationV1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"delete":{"description":"delete a ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1ClusterRole","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"patch":{"description":"partially update the specified ClusterRole","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"patchRbacAuthorizationV1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ClusterRole","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings":{"get":{"description":"list or watch objects of kind RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1NamespacedRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"post":{"description":"create a RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"createRbacAuthorizationV1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"delete":{"description":"delete collection of RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1CollectionNamespacedRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}":{"get":{"description":"read the specified RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"readRbacAuthorizationV1NamespacedRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"put":{"description":"replace the specified RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"replaceRbacAuthorizationV1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"delete":{"description":"delete a RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"patch":{"description":"partially update the specified RoleBinding","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"patchRbacAuthorizationV1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the RoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles":{"get":{"description":"list or watch objects of kind Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1NamespacedRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"post":{"description":"create a Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"createRbacAuthorizationV1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"delete":{"description":"delete collection of Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1CollectionNamespacedRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}":{"get":{"description":"read the specified Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"readRbacAuthorizationV1NamespacedRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"put":{"description":"replace the specified Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"replaceRbacAuthorizationV1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"delete":{"description":"delete a Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"deleteRbacAuthorizationV1NamespacedRole","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"patch":{"description":"partially update the specified Role","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"patchRbacAuthorizationV1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Role","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/rolebindings":{"get":{"description":"list or watch objects of kind RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1RoleBindingForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/roles":{"get":{"description":"list or watch objects of kind Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"listRbacAuthorizationV1RoleForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings":{"get":{"description":"watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1ClusterRoleBindingList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings/{name}":{"get":{"description":"watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1ClusterRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ClusterRoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/clusterroles":{"get":{"description":"watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1ClusterRoleList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/clusterroles/{name}":{"get":{"description":"watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1ClusterRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ClusterRole","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings":{"get":{"description":"watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1NamespacedRoleBindingList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings/{name}":{"get":{"description":"watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1NamespacedRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the RoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles":{"get":{"description":"watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1NamespacedRoleList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name}":{"get":{"description":"watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1NamespacedRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Role","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/rolebindings":{"get":{"description":"watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1RoleBindingListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1/watch/roles":{"get":{"description":"watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1"],"operationId":"watchRbacAuthorizationV1RoleListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"getRbacAuthorizationV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings":{"get":{"description":"list or watch objects of kind ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1ClusterRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"post":{"description":"create a ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"createRbacAuthorizationV1beta1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"delete":{"description":"delete collection of ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1CollectionClusterRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}":{"get":{"description":"read the specified ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"readRbacAuthorizationV1beta1ClusterRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"put":{"description":"replace the specified ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"replaceRbacAuthorizationV1beta1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"delete":{"description":"delete a ClusterRoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1ClusterRoleBinding","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"patch":{"description":"partially update the specified ClusterRoleBinding","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"patchRbacAuthorizationV1beta1ClusterRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ClusterRoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles":{"get":{"description":"list or watch objects of kind ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1ClusterRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"post":{"description":"create a ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"createRbacAuthorizationV1beta1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"delete":{"description":"delete collection of ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1CollectionClusterRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}":{"get":{"description":"read the specified ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"readRbacAuthorizationV1beta1ClusterRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"put":{"description":"replace the specified ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"replaceRbacAuthorizationV1beta1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"delete":{"description":"delete a ClusterRole","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1ClusterRole","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"patch":{"description":"partially update the specified ClusterRole","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"patchRbacAuthorizationV1beta1ClusterRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the ClusterRole","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings":{"get":{"description":"list or watch objects of kind RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1NamespacedRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"post":{"description":"create a RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"createRbacAuthorizationV1beta1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"delete":{"description":"delete collection of RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}":{"get":{"description":"read the specified RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"readRbacAuthorizationV1beta1NamespacedRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"put":{"description":"replace the specified RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"replaceRbacAuthorizationV1beta1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"delete":{"description":"delete a RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"patch":{"description":"partially update the specified RoleBinding","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"patchRbacAuthorizationV1beta1NamespacedRoleBinding","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the RoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles":{"get":{"description":"list or watch objects of kind Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1NamespacedRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"post":{"description":"create a Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"createRbacAuthorizationV1beta1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"delete":{"description":"delete collection of Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1CollectionNamespacedRole","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}":{"get":{"description":"read the specified Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"readRbacAuthorizationV1beta1NamespacedRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"put":{"description":"replace the specified Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"replaceRbacAuthorizationV1beta1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"delete":{"description":"delete a Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"deleteRbacAuthorizationV1beta1NamespacedRole","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"patch":{"description":"partially update the specified Role","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"patchRbacAuthorizationV1beta1NamespacedRole","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the Role","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/rolebindings":{"get":{"description":"list or watch objects of kind RoleBinding","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1RoleBindingForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/roles":{"get":{"description":"list or watch objects of kind Role","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"listRbacAuthorizationV1beta1RoleForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings":{"get":{"description":"watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1ClusterRoleBindingList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}":{"get":{"description":"watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1ClusterRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ClusterRoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles":{"get":{"description":"watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1ClusterRoleList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}":{"get":{"description":"watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1ClusterRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the ClusterRole","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings":{"get":{"description":"watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1NamespacedRoleBindingList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}":{"get":{"description":"watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1NamespacedRoleBinding","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the RoleBinding","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles":{"get":{"description":"watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1NamespacedRoleList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}":{"get":{"description":"watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1NamespacedRole","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the Role","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"object name and auth scope, such as for teams and projects","name":"namespace","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings":{"get":{"description":"watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1RoleBindingListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/rbac.authorization.k8s.io/v1beta1/watch/roles":{"get":{"description":"watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["rbacAuthorization_v1beta1"],"operationId":"watchRbacAuthorizationV1beta1RoleListForAllNamespaces","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/scheduling.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling"],"operationId":"getSchedulingAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/scheduling.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"getSchedulingV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/scheduling.k8s.io/v1/priorityclasses":{"get":{"description":"list or watch objects of kind PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"listSchedulingV1PriorityClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClassList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"post":{"description":"create a PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"createSchedulingV1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"delete":{"description":"delete collection of PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"deleteSchedulingV1CollectionPriorityClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/scheduling.k8s.io/v1/priorityclasses/{name}":{"get":{"description":"read the specified PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"readSchedulingV1PriorityClass","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"put":{"description":"replace the specified PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"replaceSchedulingV1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"delete":{"description":"delete a PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"deleteSchedulingV1PriorityClass","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"patch":{"description":"partially update the specified PriorityClass","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"patchSchedulingV1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PriorityClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/scheduling.k8s.io/v1/watch/priorityclasses":{"get":{"description":"watch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"watchSchedulingV1PriorityClassList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/scheduling.k8s.io/v1/watch/priorityclasses/{name}":{"get":{"description":"watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1"],"operationId":"watchSchedulingV1PriorityClass","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PriorityClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/scheduling.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"getSchedulingV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/scheduling.k8s.io/v1beta1/priorityclasses":{"get":{"description":"list or watch objects of kind PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"listSchedulingV1beta1PriorityClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"post":{"description":"create a PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"createSchedulingV1beta1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"delete":{"description":"delete collection of PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"deleteSchedulingV1beta1CollectionPriorityClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/scheduling.k8s.io/v1beta1/priorityclasses/{name}":{"get":{"description":"read the specified PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"readSchedulingV1beta1PriorityClass","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"put":{"description":"replace the specified PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"replaceSchedulingV1beta1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"delete":{"description":"delete a PriorityClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"deleteSchedulingV1beta1PriorityClass","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"patch":{"description":"partially update the specified PriorityClass","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"patchSchedulingV1beta1PriorityClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the PriorityClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses":{"get":{"description":"watch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"watchSchedulingV1beta1PriorityClassList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses/{name}":{"get":{"description":"watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["scheduling_v1beta1"],"operationId":"watchSchedulingV1beta1PriorityClass","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the PriorityClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/":{"get":{"description":"get information of a group","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage"],"operationId":"getStorageAPIGroup","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"401":{"description":"Unauthorized"}}}},"/apis/storage.k8s.io/v1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"getStorageV1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/storage.k8s.io/v1/storageclasses":{"get":{"description":"list or watch objects of kind StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"listStorageV1StorageClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClassList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"post":{"description":"create a StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"createStorageV1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"delete":{"description":"delete collection of StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"deleteStorageV1CollectionStorageClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1/storageclasses/{name}":{"get":{"description":"read the specified StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"readStorageV1StorageClass","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"put":{"description":"replace the specified StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"replaceStorageV1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"delete":{"description":"delete a StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"deleteStorageV1StorageClass","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"patch":{"description":"partially update the specified StorageClass","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"patchStorageV1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StorageClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1/volumeattachments":{"get":{"description":"list or watch objects of kind VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"listStorageV1VolumeAttachment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachmentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"post":{"description":"create a VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"createStorageV1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"delete":{"description":"delete collection of VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"deleteStorageV1CollectionVolumeAttachment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1/volumeattachments/{name}":{"get":{"description":"read the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"readStorageV1VolumeAttachment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"put":{"description":"replace the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"replaceStorageV1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"delete":{"description":"delete a VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"deleteStorageV1VolumeAttachment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"patch":{"description":"partially update the specified VolumeAttachment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"patchStorageV1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the VolumeAttachment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1/volumeattachments/{name}/status":{"get":{"description":"read status of the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"readStorageV1VolumeAttachmentStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"put":{"description":"replace status of the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"replaceStorageV1VolumeAttachmentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"patch":{"description":"partially update status of the specified VolumeAttachment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1"],"operationId":"patchStorageV1VolumeAttachmentStatus","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the VolumeAttachment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1/watch/storageclasses":{"get":{"description":"watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"watchStorageV1StorageClassList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1/watch/storageclasses/{name}":{"get":{"description":"watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"watchStorageV1StorageClass","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the StorageClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1/watch/volumeattachments":{"get":{"description":"watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"watchStorageV1VolumeAttachmentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1/watch/volumeattachments/{name}":{"get":{"description":"watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1"],"operationId":"watchStorageV1VolumeAttachment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the VolumeAttachment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/":{"get":{"description":"get available resources","consumes":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"getStorageV1beta1APIResources","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"401":{"description":"Unauthorized"}}}},"/apis/storage.k8s.io/v1beta1/csidrivers":{"get":{"description":"list or watch objects of kind CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"listStorageV1beta1CSIDriver","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriverList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"post":{"description":"create a CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"createStorageV1beta1CSIDriver","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"delete":{"description":"delete collection of CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CollectionCSIDriver","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/csidrivers/{name}":{"get":{"description":"read the specified CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"readStorageV1beta1CSIDriver","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"put":{"description":"replace the specified CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"replaceStorageV1beta1CSIDriver","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"delete":{"description":"delete a CSIDriver","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CSIDriver","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"patch":{"description":"partially update the specified CSIDriver","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"patchStorageV1beta1CSIDriver","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CSIDriver","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/csinodes":{"get":{"description":"list or watch objects of kind CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"listStorageV1beta1CSINode","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINodeList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"post":{"description":"create a CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"createStorageV1beta1CSINode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"delete":{"description":"delete collection of CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CollectionCSINode","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/csinodes/{name}":{"get":{"description":"read the specified CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"readStorageV1beta1CSINode","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"put":{"description":"replace the specified CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"replaceStorageV1beta1CSINode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"delete":{"description":"delete a CSINode","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CSINode","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"patch":{"description":"partially update the specified CSINode","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"patchStorageV1beta1CSINode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the CSINode","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/storageclasses":{"get":{"description":"list or watch objects of kind StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"listStorageV1beta1StorageClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClassList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"post":{"description":"create a StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"createStorageV1beta1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"delete":{"description":"delete collection of StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CollectionStorageClass","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/storageclasses/{name}":{"get":{"description":"read the specified StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"readStorageV1beta1StorageClass","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"put":{"description":"replace the specified StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"replaceStorageV1beta1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"delete":{"description":"delete a StorageClass","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1StorageClass","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"patch":{"description":"partially update the specified StorageClass","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"patchStorageV1beta1StorageClass","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the StorageClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/volumeattachments":{"get":{"description":"list or watch objects of kind VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"listStorageV1beta1VolumeAttachment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentList"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"post":{"description":"create a VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"createStorageV1beta1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"delete":{"description":"delete collection of VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1CollectionVolumeAttachment","parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"deletecollection","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/volumeattachments/{name}":{"get":{"description":"read the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"readStorageV1beta1VolumeAttachment","parameters":[{"uniqueItems":true,"type":"boolean","description":"Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.","name":"exact","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.","name":"export","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"put":{"description":"replace the specified VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"replaceStorageV1beta1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","name":"fieldManager","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"201":{"description":"Created","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"delete":{"description":"delete a VolumeAttachment","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"deleteStorageV1beta1VolumeAttachment","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"integer","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","name":"gracePeriodSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","name":"orphanDependents","in":"query"},{"uniqueItems":true,"type":"string","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","name":"propagationPolicy","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"patch":{"description":"partially update the specified VolumeAttachment","consumes":["application/json-patch+json","application/merge-patch+json","application/strategic-merge-patch+json"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"patchStorageV1beta1VolumeAttachment","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},{"uniqueItems":true,"type":"string","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","name":"dryRun","in":"query"},{"uniqueItems":true,"type":"string","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","name":"fieldManager","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","name":"force","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"name of the VolumeAttachment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/csidrivers":{"get":{"description":"watch individual changes to a list of CSIDriver. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1CSIDriverList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/csidrivers/{name}":{"get":{"description":"watch changes to an object of kind CSIDriver. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1CSIDriver","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CSIDriver","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/csinodes":{"get":{"description":"watch individual changes to a list of CSINode. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1CSINodeList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/csinodes/{name}":{"get":{"description":"watch changes to an object of kind CSINode. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1CSINode","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the CSINode","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/storageclasses":{"get":{"description":"watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1StorageClassList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}":{"get":{"description":"watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1StorageClass","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the StorageClass","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/volumeattachments":{"get":{"description":"watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1VolumeAttachmentList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name}":{"get":{"description":"watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","consumes":["*/*"],"produces":["application/json","application/yaml","application/vnd.kubernetes.protobuf","application/json;stream=watch","application/vnd.kubernetes.protobuf;stream=watch"],"schemes":["https"],"tags":["storage_v1beta1"],"operationId":"watchStorageV1beta1VolumeAttachment","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"401":{"description":"Unauthorized"}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}},"parameters":[{"uniqueItems":true,"type":"string","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","name":"continue","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","name":"fieldSelector","in":"query"},{"uniqueItems":true,"type":"string","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","name":"labelSelector","in":"query"},{"uniqueItems":true,"type":"integer","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","name":"limit","in":"query"},{"uniqueItems":true,"type":"string","description":"name of the VolumeAttachment","name":"name","in":"path","required":true},{"uniqueItems":true,"type":"string","description":"If 'true', then the output is pretty printed.","name":"pretty","in":"query"},{"uniqueItems":true,"type":"string","description":"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.","name":"resourceVersion","in":"query"},{"uniqueItems":true,"type":"integer","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","name":"timeoutSeconds","in":"query"},{"uniqueItems":true,"type":"boolean","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","name":"watch","in":"query"}]},"/logs/":{"get":{"schemes":["https"],"tags":["logs"],"operationId":"logFileListHandler","responses":{"401":{"description":"Unauthorized"}}}},"/logs/{logpath}":{"get":{"schemes":["https"],"tags":["logs"],"operationId":"logFileHandler","responses":{"401":{"description":"Unauthorized"}}},"parameters":[{"uniqueItems":true,"type":"string","description":"path to the log","name":"logpath","in":"path","required":true}]},"/version/":{"get":{"description":"get the code version","consumes":["application/json"],"produces":["application/json"],"schemes":["https"],"tags":["version"],"operationId":"getCodeVersion","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.version.Info"}},"401":{"description":"Unauthorized"}}}}},"definitions":{"io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration":{"description":"MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"webhooks":{"description":"Webhooks is a list of webhooks and the affected resources and operations.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"}},"x-kubernetes-group-version-kind":[{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfiguration","version":"v1beta1"}]},"io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList":{"description":"MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of MutatingWebhookConfiguration.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"admissionregistration.k8s.io","kind":"MutatingWebhookConfigurationList","version":"v1beta1"}]},"io.k8s.api.admissionregistration.v1beta1.RuleWithOperations":{"description":"RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.","type":"object","properties":{"apiGroups":{"description":"APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.","type":"array","items":{"type":"string"}},"apiVersions":{"description":"APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.","type":"array","items":{"type":"string"}},"operations":{"description":"Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.","type":"array","items":{"type":"string"}},"resources":{"description":"Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.","type":"array","items":{"type":"string"}},"scope":{"description":"scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".","type":"string"}}},"io.k8s.api.admissionregistration.v1beta1.ServiceReference":{"description":"ServiceReference holds a reference to Service.legacy.k8s.io","type":"object","required":["namespace","name"],"properties":{"name":{"description":"`name` is the name of the service. Required","type":"string"},"namespace":{"description":"`namespace` is the namespace of the service. Required","type":"string"},"path":{"description":"`path` is an optional URL path which will be sent in any request to this service.","type":"string"}}},"io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration":{"description":"ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"webhooks":{"description":"Webhooks is a list of webhooks and the affected resources and operations.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"}},"x-kubernetes-group-version-kind":[{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfiguration","version":"v1beta1"}]},"io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList":{"description":"ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ValidatingWebhookConfiguration.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"admissionregistration.k8s.io","kind":"ValidatingWebhookConfigurationList","version":"v1beta1"}]},"io.k8s.api.admissionregistration.v1beta1.Webhook":{"description":"Webhook describes an admission webhook and the resources and operations it applies to.","type":"object","required":["name","clientConfig"],"properties":{"admissionReviewVersions":{"description":"AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.","type":"array","items":{"type":"string"}},"clientConfig":{"description":"ClientConfig defines how to communicate with the hook. Required","$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig"},"failurePolicy":{"description":"FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.","type":"string"},"name":{"description":"The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.","type":"string"},"namespaceSelector":{"description":"NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"rules":{"description":"Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.RuleWithOperations"}},"sideEffects":{"description":"SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.","type":"string"},"timeoutSeconds":{"description":"TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.","type":"integer","format":"int32"}}},"io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig":{"description":"WebhookClientConfig contains the information to make a TLS connection with the webhook","type":"object","properties":{"caBundle":{"description":"`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.","type":"string","format":"byte"},"service":{"description":"`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.","$ref":"#/definitions/io.k8s.api.admissionregistration.v1beta1.ServiceReference"},"url":{"description":"`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.","type":"string"}}},"io.k8s.api.apps.v1.ControllerRevision":{"description":"ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.","type":"object","required":["revision"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"data":{"description":"Data is the serialized representation of the state.","$ref":"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"revision":{"description":"Revision indicates the revision of the state represented by Data.","type":"integer","format":"int64"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevision","version":"v1"}]},"io.k8s.api.apps.v1.ControllerRevisionList":{"description":"ControllerRevisionList is a resource containing a list of ControllerRevision objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of ControllerRevisions","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.ControllerRevision"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevisionList","version":"v1"}]},"io.k8s.api.apps.v1.DaemonSet":{"description":"DaemonSet represents the configuration of a daemon set.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetSpec"},"status":{"description":"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DaemonSet","version":"v1"}]},"io.k8s.api.apps.v1.DaemonSetCondition":{"description":"DaemonSetCondition describes the state of a DaemonSet at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of DaemonSet condition.","type":"string"}}},"io.k8s.api.apps.v1.DaemonSetList":{"description":"DaemonSetList is a collection of daemon sets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"A list of daemon sets.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DaemonSetList","version":"v1"}]},"io.k8s.api.apps.v1.DaemonSetSpec":{"description":"DaemonSetSpec is the specification of a daemon set.","type":"object","required":["selector","template"],"properties":{"minReadySeconds":{"description":"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.","type":"integer","format":"int32"},"selector":{"description":"A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"updateStrategy":{"description":"An update strategy to replace existing DaemonSet pods with new pods.","$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetUpdateStrategy"}}},"io.k8s.api.apps.v1.DaemonSetStatus":{"description":"DaemonSetStatus represents the current status of a daemon set.","type":"object","required":["currentNumberScheduled","numberMisscheduled","desiredNumberScheduled","numberReady"],"properties":{"collisionCount":{"description":"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a DaemonSet's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.DaemonSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentNumberScheduled":{"description":"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"desiredNumberScheduled":{"description":"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberAvailable":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"numberMisscheduled":{"description":"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberReady":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.","type":"integer","format":"int32"},"numberUnavailable":{"description":"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"observedGeneration":{"description":"The most recent generation observed by the daemon set controller.","type":"integer","format":"int64"},"updatedNumberScheduled":{"description":"The total number of nodes that are running updated daemon pod","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1.DaemonSetUpdateStrategy":{"description":"DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if type = \"RollingUpdate\".","$ref":"#/definitions/io.k8s.api.apps.v1.RollingUpdateDaemonSet"},"type":{"description":"Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1.Deployment":{"description":"Deployment enables declarative updates for Pods and ReplicaSets.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentSpec"},"status":{"description":"Most recently observed status of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"Deployment","version":"v1"}]},"io.k8s.api.apps.v1.DeploymentCondition":{"description":"DeploymentCondition describes the state of a deployment at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastUpdateTime":{"description":"The last time this condition was updated.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of deployment condition.","type":"string"}}},"io.k8s.api.apps.v1.DeploymentList":{"description":"DeploymentList is a list of Deployments.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Deployments.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.Deployment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DeploymentList","version":"v1"}]},"io.k8s.api.apps.v1.DeploymentSpec":{"description":"DeploymentSpec is the specification of the desired behavior of the Deployment.","type":"object","required":["selector","template"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"paused":{"description":"Indicates that the deployment is paused.","type":"boolean"},"progressDeadlineSeconds":{"description":"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.","type":"integer","format":"int32"},"replicas":{"description":"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.","type":"integer","format":"int32"},"selector":{"description":"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"strategy":{"description":"The deployment strategy to use to replace existing pods with new ones.","x-kubernetes-patch-strategy":"retainKeys","$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentStrategy"},"template":{"description":"Template describes the pods that will be created.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.apps.v1.DeploymentStatus":{"description":"DeploymentStatus is the most recently observed status of the Deployment.","type":"object","properties":{"availableReplicas":{"description":"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.","type":"integer","format":"int32"},"collisionCount":{"description":"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a deployment's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.DeploymentCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"observedGeneration":{"description":"The generation observed by the deployment controller.","type":"integer","format":"int64"},"readyReplicas":{"description":"Total number of ready pods targeted by this deployment.","type":"integer","format":"int32"},"replicas":{"description":"Total number of non-terminated pods targeted by this deployment (their labels match the selector).","type":"integer","format":"int32"},"unavailableReplicas":{"description":"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.","type":"integer","format":"int32"},"updatedReplicas":{"description":"Total number of non-terminated pods targeted by this deployment that have the desired template spec.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1.DeploymentStrategy":{"description":"DeploymentStrategy describes how to replace existing pods with new ones.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.","$ref":"#/definitions/io.k8s.api.apps.v1.RollingUpdateDeployment"},"type":{"description":"Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1.ReplicaSet":{"description":"ReplicaSet ensures that a specified number of pod replicas are running at any given time.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSetSpec"},"status":{"description":"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ReplicaSet","version":"v1"}]},"io.k8s.api.apps.v1.ReplicaSetCondition":{"description":"ReplicaSetCondition describes the state of a replica set at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"The last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of replica set condition.","type":"string"}}},"io.k8s.api.apps.v1.ReplicaSetList":{"description":"ReplicaSetList is a collection of ReplicaSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ReplicaSetList","version":"v1"}]},"io.k8s.api.apps.v1.ReplicaSetSpec":{"description":"ReplicaSetSpec is the specification of a ReplicaSet.","type":"object","required":["selector"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"},"selector":{"description":"Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.apps.v1.ReplicaSetStatus":{"description":"ReplicaSetStatus represents the current status of a ReplicaSet.","type":"object","required":["replicas"],"properties":{"availableReplicas":{"description":"The number of available replicas (ready for at least minReadySeconds) for this replica set.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a replica set's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.ReplicaSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"fullyLabeledReplicas":{"description":"The number of pods that have labels matching the labels of the pod template of the replicaset.","type":"integer","format":"int32"},"observedGeneration":{"description":"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.","type":"integer","format":"int64"},"readyReplicas":{"description":"The number of ready replicas for this replica set.","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1.RollingUpdateDaemonSet":{"description":"Spec to control the desired behavior of daemon set rolling update.","type":"object","properties":{"maxUnavailable":{"description":"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.apps.v1.RollingUpdateDeployment":{"description":"Spec to control the desired behavior of rolling update.","type":"object","properties":{"maxSurge":{"description":"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"maxUnavailable":{"description":"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy":{"description":"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.","type":"object","properties":{"partition":{"description":"Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1.StatefulSet":{"description":"StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the desired identities of pods in this set.","$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetSpec"},"status":{"description":"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.","$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSet","version":"v1"}]},"io.k8s.api.apps.v1.StatefulSetCondition":{"description":"StatefulSetCondition describes the state of a statefulset at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of statefulset condition.","type":"string"}}},"io.k8s.api.apps.v1.StatefulSetList":{"description":"StatefulSetList is a collection of StatefulSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSetList","version":"v1"}]},"io.k8s.api.apps.v1.StatefulSetSpec":{"description":"A StatefulSetSpec is the specification of a StatefulSet.","type":"object","required":["selector","template","serviceName"],"properties":{"podManagementPolicy":{"description":"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.","type":"string"},"replicas":{"description":"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.","type":"integer","format":"int32"},"selector":{"description":"selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"serviceName":{"description":"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.","type":"string"},"template":{"description":"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"updateStrategy":{"description":"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.","$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy"},"volumeClaimTemplates":{"description":"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}}}},"io.k8s.api.apps.v1.StatefulSetStatus":{"description":"StatefulSetStatus represents the current state of a StatefulSet.","type":"object","required":["replicas"],"properties":{"collisionCount":{"description":"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a statefulset's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1.StatefulSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentReplicas":{"description":"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.","type":"integer","format":"int32"},"currentRevision":{"description":"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).","type":"string"},"observedGeneration":{"description":"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.","type":"integer","format":"int64"},"readyReplicas":{"description":"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.","type":"integer","format":"int32"},"replicas":{"description":"replicas is the number of Pods created by the StatefulSet controller.","type":"integer","format":"int32"},"updateRevision":{"description":"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)","type":"string"},"updatedReplicas":{"description":"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1.StatefulSetUpdateStrategy":{"description":"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.","type":"object","properties":{"rollingUpdate":{"description":"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.","$ref":"#/definitions/io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy"},"type":{"description":"Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1beta1.ControllerRevision":{"description":"DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.","type":"object","required":["revision"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"data":{"description":"Data is the serialized representation of the state.","$ref":"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"revision":{"description":"Revision indicates the revision of the state represented by Data.","type":"integer","format":"int64"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevision","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.ControllerRevisionList":{"description":"ControllerRevisionList is a resource containing a list of ControllerRevision objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of ControllerRevisions","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevisionList","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.Deployment":{"description":"DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec"},"status":{"description":"Most recently observed status of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"Deployment","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.DeploymentCondition":{"description":"DeploymentCondition describes the state of a deployment at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastUpdateTime":{"description":"The last time this condition was updated.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of deployment condition.","type":"string"}}},"io.k8s.api.apps.v1beta1.DeploymentList":{"description":"DeploymentList is a list of Deployments.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Deployments.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.Deployment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DeploymentList","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.DeploymentRollback":{"description":"DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.","type":"object","required":["name","rollbackTo"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Required: This must match the Name of a deployment.","type":"string"},"rollbackTo":{"description":"The config of this deployment rollback.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"},"updatedAnnotations":{"description":"The annotations to be updated to a deployment","type":"object","additionalProperties":{"type":"string"}}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DeploymentRollback","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.DeploymentSpec":{"description":"DeploymentSpec is the specification of the desired behavior of the Deployment.","type":"object","required":["template"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"paused":{"description":"Indicates that the deployment is paused.","type":"boolean"},"progressDeadlineSeconds":{"description":"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.","type":"integer","format":"int32"},"replicas":{"description":"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.","type":"integer","format":"int32"},"rollbackTo":{"description":"DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"},"selector":{"description":"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"strategy":{"description":"The deployment strategy to use to replace existing pods with new ones.","x-kubernetes-patch-strategy":"retainKeys","$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy"},"template":{"description":"Template describes the pods that will be created.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.apps.v1beta1.DeploymentStatus":{"description":"DeploymentStatus is the most recently observed status of the Deployment.","type":"object","properties":{"availableReplicas":{"description":"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.","type":"integer","format":"int32"},"collisionCount":{"description":"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a deployment's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"observedGeneration":{"description":"The generation observed by the deployment controller.","type":"integer","format":"int64"},"readyReplicas":{"description":"Total number of ready pods targeted by this deployment.","type":"integer","format":"int32"},"replicas":{"description":"Total number of non-terminated pods targeted by this deployment (their labels match the selector).","type":"integer","format":"int32"},"unavailableReplicas":{"description":"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.","type":"integer","format":"int32"},"updatedReplicas":{"description":"Total number of non-terminated pods targeted by this deployment that have the desired template spec.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta1.DeploymentStrategy":{"description":"DeploymentStrategy describes how to replace existing pods with new ones.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment"},"type":{"description":"Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1beta1.RollbackConfig":{"description":"DEPRECATED.","type":"object","properties":{"revision":{"description":"The revision to rollback to. If set to 0, rollback to the last revision.","type":"integer","format":"int64"}}},"io.k8s.api.apps.v1beta1.RollingUpdateDeployment":{"description":"Spec to control the desired behavior of rolling update.","type":"object","properties":{"maxSurge":{"description":"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"maxUnavailable":{"description":"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy":{"description":"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.","type":"object","properties":{"partition":{"description":"Partition indicates the ordinal at which the StatefulSet should be partitioned.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta1.Scale":{"description":"Scale represents a scaling request for a resource.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec"},"status":{"description":"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"Scale","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.ScaleSpec":{"description":"ScaleSpec describes the attributes of a scale subresource","type":"object","properties":{"replicas":{"description":"desired number of instances for the scaled object.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta1.ScaleStatus":{"description":"ScaleStatus represents the current status of a scale subresource.","type":"object","required":["replicas"],"properties":{"replicas":{"description":"actual number of observed instances of the scaled object.","type":"integer","format":"int32"},"selector":{"description":"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors","type":"object","additionalProperties":{"type":"string"}},"targetSelector":{"description":"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","type":"string"}}},"io.k8s.api.apps.v1beta1.StatefulSet":{"description":"DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the desired identities of pods in this set.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec"},"status":{"description":"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSet","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.StatefulSetCondition":{"description":"StatefulSetCondition describes the state of a statefulset at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of statefulset condition.","type":"string"}}},"io.k8s.api.apps.v1beta1.StatefulSetList":{"description":"StatefulSetList is a collection of StatefulSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSetList","version":"v1beta1"}]},"io.k8s.api.apps.v1beta1.StatefulSetSpec":{"description":"A StatefulSetSpec is the specification of a StatefulSet.","type":"object","required":["template","serviceName"],"properties":{"podManagementPolicy":{"description":"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.","type":"string"},"replicas":{"description":"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.","type":"integer","format":"int32"},"selector":{"description":"selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"serviceName":{"description":"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.","type":"string"},"template":{"description":"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"updateStrategy":{"description":"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy"},"volumeClaimTemplates":{"description":"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}}}},"io.k8s.api.apps.v1beta1.StatefulSetStatus":{"description":"StatefulSetStatus represents the current state of a StatefulSet.","type":"object","required":["replicas"],"properties":{"collisionCount":{"description":"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a statefulset's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentReplicas":{"description":"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.","type":"integer","format":"int32"},"currentRevision":{"description":"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).","type":"string"},"observedGeneration":{"description":"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.","type":"integer","format":"int64"},"readyReplicas":{"description":"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.","type":"integer","format":"int32"},"replicas":{"description":"replicas is the number of Pods created by the StatefulSet controller.","type":"integer","format":"int32"},"updateRevision":{"description":"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)","type":"string"},"updatedReplicas":{"description":"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy":{"description":"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.","type":"object","properties":{"rollingUpdate":{"description":"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.","$ref":"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy"},"type":{"description":"Type indicates the type of the StatefulSetUpdateStrategy.","type":"string"}}},"io.k8s.api.apps.v1beta2.ControllerRevision":{"description":"DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.","type":"object","required":["revision"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"data":{"description":"Data is the serialized representation of the state.","$ref":"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"revision":{"description":"Revision indicates the revision of the state represented by Data.","type":"integer","format":"int64"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevision","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.ControllerRevisionList":{"description":"ControllerRevisionList is a resource containing a list of ControllerRevision objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of ControllerRevisions","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ControllerRevisionList","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.DaemonSet":{"description":"DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetSpec"},"status":{"description":"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DaemonSet","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.DaemonSetCondition":{"description":"DaemonSetCondition describes the state of a DaemonSet at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of DaemonSet condition.","type":"string"}}},"io.k8s.api.apps.v1beta2.DaemonSetList":{"description":"DaemonSetList is a collection of daemon sets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"A list of daemon sets.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DaemonSetList","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.DaemonSetSpec":{"description":"DaemonSetSpec is the specification of a daemon set.","type":"object","required":["selector","template"],"properties":{"minReadySeconds":{"description":"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.","type":"integer","format":"int32"},"selector":{"description":"A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"updateStrategy":{"description":"An update strategy to replace existing DaemonSet pods with new pods.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy"}}},"io.k8s.api.apps.v1beta2.DaemonSetStatus":{"description":"DaemonSetStatus represents the current status of a daemon set.","type":"object","required":["currentNumberScheduled","numberMisscheduled","desiredNumberScheduled","numberReady"],"properties":{"collisionCount":{"description":"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a DaemonSet's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentNumberScheduled":{"description":"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"desiredNumberScheduled":{"description":"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberAvailable":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"numberMisscheduled":{"description":"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberReady":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.","type":"integer","format":"int32"},"numberUnavailable":{"description":"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"observedGeneration":{"description":"The most recent generation observed by the daemon set controller.","type":"integer","format":"int64"},"updatedNumberScheduled":{"description":"The total number of nodes that are running updated daemon pod","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy":{"description":"DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if type = \"RollingUpdate\".","$ref":"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet"},"type":{"description":"Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1beta2.Deployment":{"description":"DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentSpec"},"status":{"description":"Most recently observed status of the Deployment.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"Deployment","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.DeploymentCondition":{"description":"DeploymentCondition describes the state of a deployment at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastUpdateTime":{"description":"The last time this condition was updated.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of deployment condition.","type":"string"}}},"io.k8s.api.apps.v1beta2.DeploymentList":{"description":"DeploymentList is a list of Deployments.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Deployments.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.Deployment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"DeploymentList","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.DeploymentSpec":{"description":"DeploymentSpec is the specification of the desired behavior of the Deployment.","type":"object","required":["selector","template"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"paused":{"description":"Indicates that the deployment is paused.","type":"boolean"},"progressDeadlineSeconds":{"description":"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.","type":"integer","format":"int32"},"replicas":{"description":"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.","type":"integer","format":"int32"},"selector":{"description":"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"strategy":{"description":"The deployment strategy to use to replace existing pods with new ones.","x-kubernetes-patch-strategy":"retainKeys","$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentStrategy"},"template":{"description":"Template describes the pods that will be created.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.apps.v1beta2.DeploymentStatus":{"description":"DeploymentStatus is the most recently observed status of the Deployment.","type":"object","properties":{"availableReplicas":{"description":"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.","type":"integer","format":"int32"},"collisionCount":{"description":"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a deployment's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.DeploymentCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"observedGeneration":{"description":"The generation observed by the deployment controller.","type":"integer","format":"int64"},"readyReplicas":{"description":"Total number of ready pods targeted by this deployment.","type":"integer","format":"int32"},"replicas":{"description":"Total number of non-terminated pods targeted by this deployment (their labels match the selector).","type":"integer","format":"int32"},"unavailableReplicas":{"description":"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.","type":"integer","format":"int32"},"updatedReplicas":{"description":"Total number of non-terminated pods targeted by this deployment that have the desired template spec.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.DeploymentStrategy":{"description":"DeploymentStrategy describes how to replace existing pods with new ones.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDeployment"},"type":{"description":"Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.apps.v1beta2.ReplicaSet":{"description":"DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetSpec"},"status":{"description":"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ReplicaSet","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.ReplicaSetCondition":{"description":"ReplicaSetCondition describes the state of a replica set at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"The last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of replica set condition.","type":"string"}}},"io.k8s.api.apps.v1beta2.ReplicaSetList":{"description":"ReplicaSetList is a collection of ReplicaSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"ReplicaSetList","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.ReplicaSetSpec":{"description":"ReplicaSetSpec is the specification of a ReplicaSet.","type":"object","required":["selector"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"},"selector":{"description":"Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.apps.v1beta2.ReplicaSetStatus":{"description":"ReplicaSetStatus represents the current status of a ReplicaSet.","type":"object","required":["replicas"],"properties":{"availableReplicas":{"description":"The number of available replicas (ready for at least minReadySeconds) for this replica set.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a replica set's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"fullyLabeledReplicas":{"description":"The number of pods that have labels matching the labels of the pod template of the replicaset.","type":"integer","format":"int32"},"observedGeneration":{"description":"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.","type":"integer","format":"int64"},"readyReplicas":{"description":"The number of ready replicas for this replica set.","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet":{"description":"Spec to control the desired behavior of daemon set rolling update.","type":"object","properties":{"maxUnavailable":{"description":"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.apps.v1beta2.RollingUpdateDeployment":{"description":"Spec to control the desired behavior of rolling update.","type":"object","properties":{"maxSurge":{"description":"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"maxUnavailable":{"description":"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy":{"description":"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.","type":"object","properties":{"partition":{"description":"Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.Scale":{"description":"Scale represents a scaling request for a resource.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.ScaleSpec"},"status":{"description":"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.ScaleStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"Scale","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.ScaleSpec":{"description":"ScaleSpec describes the attributes of a scale subresource","type":"object","properties":{"replicas":{"description":"desired number of instances for the scaled object.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.ScaleStatus":{"description":"ScaleStatus represents the current status of a scale subresource.","type":"object","required":["replicas"],"properties":{"replicas":{"description":"actual number of observed instances of the scaled object.","type":"integer","format":"int32"},"selector":{"description":"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors","type":"object","additionalProperties":{"type":"string"}},"targetSelector":{"description":"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","type":"string"}}},"io.k8s.api.apps.v1beta2.StatefulSet":{"description":"DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the desired identities of pods in this set.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetSpec"},"status":{"description":"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSet","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.StatefulSetCondition":{"description":"StatefulSetCondition describes the state of a statefulset at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of statefulset condition.","type":"string"}}},"io.k8s.api.apps.v1beta2.StatefulSetList":{"description":"StatefulSetList is a collection of StatefulSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apps","kind":"StatefulSetList","version":"v1beta2"}]},"io.k8s.api.apps.v1beta2.StatefulSetSpec":{"description":"A StatefulSetSpec is the specification of a StatefulSet.","type":"object","required":["selector","template","serviceName"],"properties":{"podManagementPolicy":{"description":"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.","type":"string"},"replicas":{"description":"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.","type":"integer","format":"int32"},"selector":{"description":"selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"serviceName":{"description":"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.","type":"string"},"template":{"description":"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"updateStrategy":{"description":"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy"},"volumeClaimTemplates":{"description":"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}}}},"io.k8s.api.apps.v1beta2.StatefulSetStatus":{"description":"StatefulSetStatus represents the current state of a StatefulSet.","type":"object","required":["replicas"],"properties":{"collisionCount":{"description":"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a statefulset's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentReplicas":{"description":"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.","type":"integer","format":"int32"},"currentRevision":{"description":"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).","type":"string"},"observedGeneration":{"description":"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.","type":"integer","format":"int64"},"readyReplicas":{"description":"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.","type":"integer","format":"int32"},"replicas":{"description":"replicas is the number of Pods created by the StatefulSet controller.","type":"integer","format":"int32"},"updateRevision":{"description":"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)","type":"string"},"updatedReplicas":{"description":"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.","type":"integer","format":"int32"}}},"io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy":{"description":"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.","type":"object","properties":{"rollingUpdate":{"description":"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.","$ref":"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy"},"type":{"description":"Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.","type":"string"}}},"io.k8s.api.authentication.v1.TokenReview":{"description":"TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec holds information about the request being evaluated","$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec"},"status":{"description":"Status is filled in by the server and indicates whether the request can be authenticated.","$ref":"#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus"}},"x-kubernetes-group-version-kind":[{"group":"authentication.k8s.io","kind":"TokenReview","version":"v1"}]},"io.k8s.api.authentication.v1.TokenReviewSpec":{"description":"TokenReviewSpec is a description of the token authentication request.","type":"object","properties":{"audiences":{"description":"Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.","type":"array","items":{"type":"string"}},"token":{"description":"Token is the opaque bearer token.","type":"string"}}},"io.k8s.api.authentication.v1.TokenReviewStatus":{"description":"TokenReviewStatus is the result of the token authentication request.","type":"object","properties":{"audiences":{"description":"Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.","type":"array","items":{"type":"string"}},"authenticated":{"description":"Authenticated indicates that the token was associated with a known user.","type":"boolean"},"error":{"description":"Error indicates that the token couldn't be checked","type":"string"},"user":{"description":"User is the UserInfo associated with the provided token.","$ref":"#/definitions/io.k8s.api.authentication.v1.UserInfo"}}},"io.k8s.api.authentication.v1.UserInfo":{"description":"UserInfo holds the information about the user needed to implement the user.Info interface.","type":"object","properties":{"extra":{"description":"Any additional information provided by the authenticator.","type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"groups":{"description":"The names of groups this user is a part of.","type":"array","items":{"type":"string"}},"uid":{"description":"A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.","type":"string"},"username":{"description":"The name that uniquely identifies this user among all active users.","type":"string"}}},"io.k8s.api.authorization.v1.LocalSubjectAccessReview":{"description":"LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"},"status":{"description":"Status is filled in by the server and indicates whether the request is allowed or not","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"}},"x-kubernetes-group-version-kind":[{"group":"authorization.k8s.io","kind":"LocalSubjectAccessReview","version":"v1"}]},"io.k8s.api.authorization.v1.NonResourceAttributes":{"description":"NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface","type":"object","properties":{"path":{"description":"Path is the URL path of the request","type":"string"},"verb":{"description":"Verb is the standard HTTP verb","type":"string"}}},"io.k8s.api.authorization.v1.NonResourceRule":{"description":"NonResourceRule holds information that describes a rule for the non-resource","type":"object","required":["verbs"],"properties":{"nonResourceURLs":{"description":"NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.","type":"array","items":{"type":"string"}},"verbs":{"description":"Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.","type":"array","items":{"type":"string"}}}},"io.k8s.api.authorization.v1.ResourceAttributes":{"description":"ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface","type":"object","properties":{"group":{"description":"Group is the API Group of the Resource. \"*\" means all.","type":"string"},"name":{"description":"Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.","type":"string"},"namespace":{"description":"Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview","type":"string"},"resource":{"description":"Resource is one of the existing resource types. \"*\" means all.","type":"string"},"subresource":{"description":"Subresource is one of the existing resource types. \"\" means none.","type":"string"},"verb":{"description":"Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.","type":"string"},"version":{"description":"Version is the API Version of the Resource. \"*\" means all.","type":"string"}}},"io.k8s.api.authorization.v1.ResourceRule":{"description":"ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.","type":"object","required":["verbs"],"properties":{"apiGroups":{"description":"APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.","type":"array","items":{"type":"string"}},"resourceNames":{"description":"ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.","type":"array","items":{"type":"string"}},"resources":{"description":"Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.","type":"array","items":{"type":"string"}},"verbs":{"description":"Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.","type":"array","items":{"type":"string"}}}},"io.k8s.api.authorization.v1.SelfSubjectAccessReview":{"description":"SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec holds information about the request being evaluated. user and groups must be empty","$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec"},"status":{"description":"Status is filled in by the server and indicates whether the request is allowed or not","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"}},"x-kubernetes-group-version-kind":[{"group":"authorization.k8s.io","kind":"SelfSubjectAccessReview","version":"v1"}]},"io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec":{"description":"SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set","type":"object","properties":{"nonResourceAttributes":{"description":"NonResourceAttributes describes information for a non-resource access request","$ref":"#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"},"resourceAttributes":{"description":"ResourceAuthorizationAttributes describes information for a resource access request","$ref":"#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"}}},"io.k8s.api.authorization.v1.SelfSubjectRulesReview":{"description":"SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec holds information about the request being evaluated.","$ref":"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec"},"status":{"description":"Status is filled in by the server and indicates the set of actions a user can perform.","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectRulesReviewStatus"}},"x-kubernetes-group-version-kind":[{"group":"authorization.k8s.io","kind":"SelfSubjectRulesReview","version":"v1"}]},"io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec":{"type":"object","properties":{"namespace":{"description":"Namespace to evaluate rules for. Required.","type":"string"}}},"io.k8s.api.authorization.v1.SubjectAccessReview":{"description":"SubjectAccessReview checks whether or not a user or group can perform an action.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec holds information about the request being evaluated","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"},"status":{"description":"Status is filled in by the server and indicates whether the request is allowed or not","$ref":"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"}},"x-kubernetes-group-version-kind":[{"group":"authorization.k8s.io","kind":"SubjectAccessReview","version":"v1"}]},"io.k8s.api.authorization.v1.SubjectAccessReviewSpec":{"description":"SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set","type":"object","properties":{"extra":{"description":"Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.","type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"groups":{"description":"Groups is the groups you're testing for.","type":"array","items":{"type":"string"}},"nonResourceAttributes":{"description":"NonResourceAttributes describes information for a non-resource access request","$ref":"#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"},"resourceAttributes":{"description":"ResourceAuthorizationAttributes describes information for a resource access request","$ref":"#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"},"uid":{"description":"UID information about the requesting user.","type":"string"},"user":{"description":"User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups","type":"string"}}},"io.k8s.api.authorization.v1.SubjectAccessReviewStatus":{"description":"SubjectAccessReviewStatus","type":"object","required":["allowed"],"properties":{"allowed":{"description":"Allowed is required. True if the action would be allowed, false otherwise.","type":"boolean"},"denied":{"description":"Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.","type":"boolean"},"evaluationError":{"description":"EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.","type":"string"},"reason":{"description":"Reason is optional. It indicates why a request was allowed or denied.","type":"string"}}},"io.k8s.api.authorization.v1.SubjectRulesReviewStatus":{"description":"SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.","type":"object","required":["resourceRules","nonResourceRules","incomplete"],"properties":{"evaluationError":{"description":"EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.","type":"string"},"incomplete":{"description":"Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.","type":"boolean"},"nonResourceRules":{"description":"NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.authorization.v1.NonResourceRule"}},"resourceRules":{"description":"ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.authorization.v1.ResourceRule"}}}},"io.k8s.api.autoscaling.v1.CrossVersionObjectReference":{"description":"CrossVersionObjectReference contains enough information to let you identify the referred resource.","type":"object","required":["kind","name"],"properties":{"apiVersion":{"description":"API version of the referent","type":"string"},"kind":{"description":"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"","type":"string"},"name":{"description":"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"}}},"io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler":{"description":"configuration of a horizontal pod autoscaler.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec"},"status":{"description":"current information about the autoscaler.","$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v1"}]},"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList":{"description":"list of horizontal pod autoscaler objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"list of horizontal pod autoscaler objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscalerList","version":"v1"}]},"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec":{"description":"specification of a horizontal pod autoscaler.","type":"object","required":["scaleTargetRef","maxReplicas"],"properties":{"maxReplicas":{"description":"upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.","type":"integer","format":"int32"},"minReplicas":{"description":"lower limit for the number of pods that can be set by the autoscaler, default 1.","type":"integer","format":"int32"},"scaleTargetRef":{"description":"reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.","$ref":"#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference"},"targetCPUUtilizationPercentage":{"description":"target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.","type":"integer","format":"int32"}}},"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus":{"description":"current status of a horizontal pod autoscaler","type":"object","required":["currentReplicas","desiredReplicas"],"properties":{"currentCPUUtilizationPercentage":{"description":"current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.","type":"integer","format":"int32"},"currentReplicas":{"description":"current number of replicas of pods managed by this autoscaler.","type":"integer","format":"int32"},"desiredReplicas":{"description":"desired number of replicas of pods managed by this autoscaler.","type":"integer","format":"int32"},"lastScaleTime":{"description":"last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"observedGeneration":{"description":"most recent generation observed by this autoscaler.","type":"integer","format":"int64"}}},"io.k8s.api.autoscaling.v1.Scale":{"description":"Scale represents a scaling request for a resource.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec"},"status":{"description":"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.","$ref":"#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"Scale","version":"v1"}]},"io.k8s.api.autoscaling.v1.ScaleSpec":{"description":"ScaleSpec describes the attributes of a scale subresource.","type":"object","properties":{"replicas":{"description":"desired number of instances for the scaled object.","type":"integer","format":"int32"}}},"io.k8s.api.autoscaling.v1.ScaleStatus":{"description":"ScaleStatus represents the current status of a scale subresource.","type":"object","required":["replicas"],"properties":{"replicas":{"description":"actual number of observed instances of the scaled object.","type":"integer","format":"int32"},"selector":{"description":"label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors","type":"string"}}},"io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference":{"description":"CrossVersionObjectReference contains enough information to let you identify the referred resource.","type":"object","required":["kind","name"],"properties":{"apiVersion":{"description":"API version of the referent","type":"string"},"kind":{"description":"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"","type":"string"},"name":{"description":"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"}}},"io.k8s.api.autoscaling.v2beta1.ExternalMetricSource":{"description":"ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.","type":"object","required":["metricName"],"properties":{"metricName":{"description":"metricName is the name of the metric in question.","type":"string"},"metricSelector":{"description":"metricSelector is used to identify a specific time series within a given metric.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"targetAverageValue":{"description":"targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"targetValue":{"description":"targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta1.ExternalMetricStatus":{"description":"ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.","type":"object","required":["metricName","currentValue"],"properties":{"currentAverageValue":{"description":"currentAverageValue is the current value of metric averaged over autoscaled pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"currentValue":{"description":"currentValue is the current value of the metric (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"metricName":{"description":"metricName is the name of a metric used for autoscaling in metric system.","type":"string"},"metricSelector":{"description":"metricSelector is used to identify a specific time series within a given metric.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler":{"description":"HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec"},"status":{"description":"status is the current information about the autoscaler.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta1"}]},"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerCondition":{"description":"HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"lastTransitionTime is the last time the condition transitioned from one status to another","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"message is a human-readable explanation containing details about the transition","type":"string"},"reason":{"description":"reason is the reason for the condition's last transition.","type":"string"},"status":{"description":"status is the status of the condition (True, False, Unknown)","type":"string"},"type":{"description":"type describes the current condition","type":"string"}}},"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList":{"description":"HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of horizontal pod autoscaler objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"metadata is the standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscalerList","version":"v2beta1"}]},"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec":{"description":"HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.","type":"object","required":["scaleTargetRef","maxReplicas"],"properties":{"maxReplicas":{"description":"maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.","type":"integer","format":"int32"},"metrics":{"description":"metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.MetricSpec"}},"minReplicas":{"description":"minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.","type":"integer","format":"int32"},"scaleTargetRef":{"description":"scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"}}},"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus":{"description":"HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.","type":"object","required":["currentReplicas","desiredReplicas","conditions"],"properties":{"conditions":{"description":"conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerCondition"}},"currentMetrics":{"description":"currentMetrics is the last read state of the metrics used by this autoscaler.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.MetricStatus"}},"currentReplicas":{"description":"currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.","type":"integer","format":"int32"},"desiredReplicas":{"description":"desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.","type":"integer","format":"int32"},"lastScaleTime":{"description":"lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"observedGeneration":{"description":"observedGeneration is the most recent generation observed by this autoscaler.","type":"integer","format":"int64"}}},"io.k8s.api.autoscaling.v2beta1.MetricSpec":{"description":"MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).","type":"object","required":["type"],"properties":{"external":{"description":"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricSource"},"object":{"description":"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricSource"},"pods":{"description":"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricSource"},"resource":{"description":"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricSource"},"type":{"description":"type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.","type":"string"}}},"io.k8s.api.autoscaling.v2beta1.MetricStatus":{"description":"MetricStatus describes the last-read state of a single metric.","type":"object","required":["type"],"properties":{"external":{"description":"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricStatus"},"object":{"description":"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricStatus"},"pods":{"description":"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricStatus"},"resource":{"description":"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus"},"type":{"description":"type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.","type":"string"}}},"io.k8s.api.autoscaling.v2beta1.ObjectMetricSource":{"description":"ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).","type":"object","required":["target","metricName","targetValue"],"properties":{"averageValue":{"description":"averageValue is the target value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"metricName":{"description":"metricName is the name of the metric in question.","type":"string"},"selector":{"description":"selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"target":{"description":"target is the described Kubernetes object.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"},"targetValue":{"description":"targetValue is the target value of the metric (as a quantity).","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta1.ObjectMetricStatus":{"description":"ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).","type":"object","required":["target","metricName","currentValue"],"properties":{"averageValue":{"description":"averageValue is the current value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"currentValue":{"description":"currentValue is the current value of the metric (as a quantity).","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"metricName":{"description":"metricName is the name of the metric in question.","type":"string"},"selector":{"description":"selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"target":{"description":"target is the described Kubernetes object.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"}}},"io.k8s.api.autoscaling.v2beta1.PodsMetricSource":{"description":"PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","type":"object","required":["metricName","targetAverageValue"],"properties":{"metricName":{"description":"metricName is the name of the metric in question","type":"string"},"selector":{"description":"selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"targetAverageValue":{"description":"targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta1.PodsMetricStatus":{"description":"PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).","type":"object","required":["metricName","currentAverageValue"],"properties":{"currentAverageValue":{"description":"currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"metricName":{"description":"metricName is the name of the metric in question","type":"string"},"selector":{"description":"selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.autoscaling.v2beta1.ResourceMetricSource":{"description":"ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.","type":"object","required":["name"],"properties":{"name":{"description":"name is the name of the resource in question.","type":"string"},"targetAverageUtilization":{"description":"targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.","type":"integer","format":"int32"},"targetAverageValue":{"description":"targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus":{"description":"ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","type":"object","required":["name","currentAverageValue"],"properties":{"currentAverageUtilization":{"description":"currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.","type":"integer","format":"int32"},"currentAverageValue":{"description":"currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"name":{"description":"name is the name of the resource in question.","type":"string"}}},"io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference":{"description":"CrossVersionObjectReference contains enough information to let you identify the referred resource.","type":"object","required":["kind","name"],"properties":{"apiVersion":{"description":"API version of the referent","type":"string"},"kind":{"description":"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"","type":"string"},"name":{"description":"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"}}},"io.k8s.api.autoscaling.v2beta2.ExternalMetricSource":{"description":"ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).","type":"object","required":["metric","target"],"properties":{"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"},"target":{"description":"target specifies the target value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"}}},"io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus":{"description":"ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.","type":"object","required":["metric","current"],"properties":{"current":{"description":"current contains the current value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"},"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"}}},"io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler":{"description":"HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec"},"status":{"description":"status is the current information about the autoscaler.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscaler","version":"v2beta2"}]},"io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerCondition":{"description":"HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"lastTransitionTime is the last time the condition transitioned from one status to another","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"message is a human-readable explanation containing details about the transition","type":"string"},"reason":{"description":"reason is the reason for the condition's last transition.","type":"string"},"status":{"description":"status is the status of the condition (True, False, Unknown)","type":"string"},"type":{"description":"type describes the current condition","type":"string"}}},"io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList":{"description":"HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of horizontal pod autoscaler objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"metadata is the standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"autoscaling","kind":"HorizontalPodAutoscalerList","version":"v2beta2"}]},"io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec":{"description":"HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.","type":"object","required":["scaleTargetRef","maxReplicas"],"properties":{"maxReplicas":{"description":"maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.","type":"integer","format":"int32"},"metrics":{"description":"metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricSpec"}},"minReplicas":{"description":"minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.","type":"integer","format":"int32"},"scaleTargetRef":{"description":"scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference"}}},"io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus":{"description":"HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.","type":"object","required":["currentReplicas","desiredReplicas","conditions"],"properties":{"conditions":{"description":"conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerCondition"}},"currentMetrics":{"description":"currentMetrics is the last read state of the metrics used by this autoscaler.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricStatus"}},"currentReplicas":{"description":"currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.","type":"integer","format":"int32"},"desiredReplicas":{"description":"desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.","type":"integer","format":"int32"},"lastScaleTime":{"description":"lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"observedGeneration":{"description":"observedGeneration is the most recent generation observed by this autoscaler.","type":"integer","format":"int64"}}},"io.k8s.api.autoscaling.v2beta2.MetricIdentifier":{"description":"MetricIdentifier defines the name and optionally selector for a metric","type":"object","required":["name"],"properties":{"name":{"description":"name is the name of the given metric","type":"string"},"selector":{"description":"selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.autoscaling.v2beta2.MetricSpec":{"description":"MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).","type":"object","required":["type"],"properties":{"external":{"description":"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricSource"},"object":{"description":"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricSource"},"pods":{"description":"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricSource"},"resource":{"description":"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricSource"},"type":{"description":"type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.","type":"string"}}},"io.k8s.api.autoscaling.v2beta2.MetricStatus":{"description":"MetricStatus describes the last-read state of a single metric.","type":"object","required":["type"],"properties":{"external":{"description":"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus"},"object":{"description":"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus"},"pods":{"description":"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricStatus"},"resource":{"description":"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus"},"type":{"description":"type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.","type":"string"}}},"io.k8s.api.autoscaling.v2beta2.MetricTarget":{"description":"MetricTarget defines the target value, average value, or average utilization of a specific metric","type":"object","required":["type"],"properties":{"averageUtilization":{"description":"averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type","type":"integer","format":"int32"},"averageValue":{"description":"averageValue is the target value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"type":{"description":"type represents whether the metric type is Utilization, Value, or AverageValue","type":"string"},"value":{"description":"value is the target value of the metric (as a quantity).","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta2.MetricValueStatus":{"description":"MetricValueStatus holds the current value for a metric","type":"object","properties":{"averageUtilization":{"description":"currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.","type":"integer","format":"int32"},"averageValue":{"description":"averageValue is the current value of the average of the metric across all relevant pods (as a quantity)","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"value":{"description":"value is the current value of the metric (as a quantity).","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.autoscaling.v2beta2.ObjectMetricSource":{"description":"ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).","type":"object","required":["describedObject","target","metric"],"properties":{"describedObject":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference"},"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"},"target":{"description":"target specifies the target value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"}}},"io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus":{"description":"ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).","type":"object","required":["metric","current","describedObject"],"properties":{"current":{"description":"current contains the current value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"},"describedObject":{"$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference"},"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"}}},"io.k8s.api.autoscaling.v2beta2.PodsMetricSource":{"description":"PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.","type":"object","required":["metric","target"],"properties":{"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"},"target":{"description":"target specifies the target value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"}}},"io.k8s.api.autoscaling.v2beta2.PodsMetricStatus":{"description":"PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).","type":"object","required":["metric","current"],"properties":{"current":{"description":"current contains the current value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"},"metric":{"description":"metric identifies the target metric by name and selector","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"}}},"io.k8s.api.autoscaling.v2beta2.ResourceMetricSource":{"description":"ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.","type":"object","required":["name","target"],"properties":{"name":{"description":"name is the name of the resource in question.","type":"string"},"target":{"description":"target specifies the target value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"}}},"io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus":{"description":"ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.","type":"object","required":["name","current"],"properties":{"current":{"description":"current contains the current value for the given metric","$ref":"#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"},"name":{"description":"Name is the name of the resource in question.","type":"string"}}},"io.k8s.api.batch.v1.Job":{"description":"Job represents the configuration of a single job.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.batch.v1.JobSpec"},"status":{"description":"Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.batch.v1.JobStatus"}},"x-kubernetes-group-version-kind":[{"group":"batch","kind":"Job","version":"v1"}]},"io.k8s.api.batch.v1.JobCondition":{"description":"JobCondition describes current state of a job.","type":"object","required":["type","status"],"properties":{"lastProbeTime":{"description":"Last time the condition was checked.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastTransitionTime":{"description":"Last time the condition transit from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human readable message indicating details about last transition.","type":"string"},"reason":{"description":"(brief) reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of job condition, Complete or Failed.","type":"string"}}},"io.k8s.api.batch.v1.JobList":{"description":"JobList is a collection of jobs.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of Jobs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.batch.v1.Job"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"batch","kind":"JobList","version":"v1"}]},"io.k8s.api.batch.v1.JobSpec":{"description":"JobSpec describes how the job execution will look like.","type":"object","required":["template"],"properties":{"activeDeadlineSeconds":{"description":"Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer","type":"integer","format":"int64"},"backoffLimit":{"description":"Specifies the number of retries before marking this job failed. Defaults to 6","type":"integer","format":"int32"},"completions":{"description":"Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/","type":"integer","format":"int32"},"manualSelector":{"description":"manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector","type":"boolean"},"parallelism":{"description":"Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) \u003c .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/","type":"integer","format":"int32"},"selector":{"description":"A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"ttlSecondsAfterFinished":{"description":"ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.","type":"integer","format":"int32"}}},"io.k8s.api.batch.v1.JobStatus":{"description":"JobStatus represents the current state of a Job.","type":"object","properties":{"active":{"description":"The number of actively running pods.","type":"integer","format":"int32"},"completionTime":{"description":"Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"conditions":{"description":"The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.batch.v1.JobCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"failed":{"description":"The number of pods which reached phase Failed.","type":"integer","format":"int32"},"startTime":{"description":"Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"succeeded":{"description":"The number of pods which reached phase Succeeded.","type":"integer","format":"int32"}}},"io.k8s.api.batch.v1beta1.CronJob":{"description":"CronJob represents the configuration of a single cron job.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJobSpec"},"status":{"description":"Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJobStatus"}},"x-kubernetes-group-version-kind":[{"group":"batch","kind":"CronJob","version":"v1beta1"}]},"io.k8s.api.batch.v1beta1.CronJobList":{"description":"CronJobList is a collection of cron jobs.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of CronJobs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.batch.v1beta1.CronJob"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"batch","kind":"CronJobList","version":"v1beta1"}]},"io.k8s.api.batch.v1beta1.CronJobSpec":{"description":"CronJobSpec describes how the job execution will look like and when it will actually run.","type":"object","required":["schedule","jobTemplate"],"properties":{"concurrencyPolicy":{"description":"Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one","type":"string"},"failedJobsHistoryLimit":{"description":"The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.","type":"integer","format":"int32"},"jobTemplate":{"description":"Specifies the job that will be created when executing a CronJob.","$ref":"#/definitions/io.k8s.api.batch.v1beta1.JobTemplateSpec"},"schedule":{"description":"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.","type":"string"},"startingDeadlineSeconds":{"description":"Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.","type":"integer","format":"int64"},"successfulJobsHistoryLimit":{"description":"The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.","type":"integer","format":"int32"},"suspend":{"description":"This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.","type":"boolean"}}},"io.k8s.api.batch.v1beta1.CronJobStatus":{"description":"CronJobStatus represents the current state of a cron job.","type":"object","properties":{"active":{"description":"A list of pointers to currently running jobs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"}},"lastScheduleTime":{"description":"Information when was the last time the job was successfully scheduled.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.api.batch.v1beta1.JobTemplateSpec":{"description":"JobTemplateSpec describes the data a Job should have when created from a template","type":"object","properties":{"metadata":{"description":"Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.batch.v1.JobSpec"}}},"io.k8s.api.certificates.v1beta1.CertificateSigningRequest":{"description":"Describes a certificate signing request","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"The certificate request itself and any additional information.","$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec"},"status":{"description":"Derived information about the request.","$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus"}},"x-kubernetes-group-version-kind":[{"group":"certificates.k8s.io","kind":"CertificateSigningRequest","version":"v1beta1"}]},"io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition":{"type":"object","required":["type"],"properties":{"lastUpdateTime":{"description":"timestamp for the last update to this condition","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"human readable message with details about the request state","type":"string"},"reason":{"description":"brief reason for the request state","type":"string"},"type":{"description":"request approval state, currently Approved or Denied.","type":"string"}}},"io.k8s.api.certificates.v1beta1.CertificateSigningRequestList":{"type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"certificates.k8s.io","kind":"CertificateSigningRequestList","version":"v1beta1"}]},"io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec":{"description":"This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.","type":"object","required":["request"],"properties":{"extra":{"description":"Extra information about the requesting user. See user.Info interface for details.","type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"groups":{"description":"Group information about the requesting user. See user.Info interface for details.","type":"array","items":{"type":"string"}},"request":{"description":"Base64-encoded PKCS#10 CSR data","type":"string","format":"byte"},"uid":{"description":"UID information about the requesting user. See user.Info interface for details.","type":"string"},"usages":{"description":"allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n https://tools.ietf.org/html/rfc5280#section-4.2.1.12","type":"array","items":{"type":"string"}},"username":{"description":"Information about the requesting user. See user.Info interface for details.","type":"string"}}},"io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus":{"type":"object","properties":{"certificate":{"description":"If request was approved, the controller will place the issued certificate here.","type":"string","format":"byte"},"conditions":{"description":"Conditions applied to the request, such as approval or denial.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition"}}}},"io.k8s.api.coordination.v1.Lease":{"description":"Lease defines a lease concept.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.coordination.v1.LeaseSpec"}},"x-kubernetes-group-version-kind":[{"group":"coordination.k8s.io","kind":"Lease","version":"v1"}]},"io.k8s.api.coordination.v1.LeaseList":{"description":"LeaseList is a list of Lease objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.coordination.v1.Lease"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"coordination.k8s.io","kind":"LeaseList","version":"v1"}]},"io.k8s.api.coordination.v1.LeaseSpec":{"description":"LeaseSpec is a specification of a Lease.","type":"object","properties":{"acquireTime":{"description":"acquireTime is a time when the current lease was acquired.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"},"holderIdentity":{"description":"holderIdentity contains the identity of the holder of a current lease.","type":"string"},"leaseDurationSeconds":{"description":"leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.","type":"integer","format":"int32"},"leaseTransitions":{"description":"leaseTransitions is the number of transitions of a lease between holders.","type":"integer","format":"int32"},"renewTime":{"description":"renewTime is a time when the current holder of a lease has last updated the lease.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"}}},"io.k8s.api.coordination.v1beta1.Lease":{"description":"Lease defines a lease concept.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.coordination.v1beta1.LeaseSpec"}},"x-kubernetes-group-version-kind":[{"group":"coordination.k8s.io","kind":"Lease","version":"v1beta1"}]},"io.k8s.api.coordination.v1beta1.LeaseList":{"description":"LeaseList is a list of Lease objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.coordination.v1beta1.Lease"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"coordination.k8s.io","kind":"LeaseList","version":"v1beta1"}]},"io.k8s.api.coordination.v1beta1.LeaseSpec":{"description":"LeaseSpec is a specification of a Lease.","type":"object","properties":{"acquireTime":{"description":"acquireTime is a time when the current lease was acquired.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"},"holderIdentity":{"description":"holderIdentity contains the identity of the holder of a current lease.","type":"string"},"leaseDurationSeconds":{"description":"leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.","type":"integer","format":"int32"},"leaseTransitions":{"description":"leaseTransitions is the number of transitions of a lease between holders.","type":"integer","format":"int32"},"renewTime":{"description":"renewTime is a time when the current holder of a lease has last updated the lease.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"}}},"io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource":{"description":"Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.","type":"object","required":["volumeID"],"properties":{"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore","type":"string"},"partition":{"description":"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).","type":"integer","format":"int32"},"readOnly":{"description":"Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore","type":"boolean"},"volumeID":{"description":"Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore","type":"string"}}},"io.k8s.api.core.v1.Affinity":{"description":"Affinity is a group of affinity scheduling rules.","type":"object","properties":{"nodeAffinity":{"description":"Describes node affinity scheduling rules for the pod.","$ref":"#/definitions/io.k8s.api.core.v1.NodeAffinity"},"podAffinity":{"description":"Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).","$ref":"#/definitions/io.k8s.api.core.v1.PodAffinity"},"podAntiAffinity":{"description":"Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).","$ref":"#/definitions/io.k8s.api.core.v1.PodAntiAffinity"}}},"io.k8s.api.core.v1.AttachedVolume":{"description":"AttachedVolume describes a volume attached to a node","type":"object","required":["name","devicePath"],"properties":{"devicePath":{"description":"DevicePath represents the device path where the volume should be available","type":"string"},"name":{"description":"Name of the attached volume","type":"string"}}},"io.k8s.api.core.v1.AzureDiskVolumeSource":{"description":"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.","type":"object","required":["diskName","diskURI"],"properties":{"cachingMode":{"description":"Host Caching mode: None, Read Only, Read Write.","type":"string"},"diskName":{"description":"The Name of the data disk in the blob storage","type":"string"},"diskURI":{"description":"The URI the data disk in the blob storage","type":"string"},"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"kind":{"description":"Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"}}},"io.k8s.api.core.v1.AzureFilePersistentVolumeSource":{"description":"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.","type":"object","required":["secretName","shareName"],"properties":{"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretName":{"description":"the name of secret that contains Azure Storage Account Name and Key","type":"string"},"secretNamespace":{"description":"the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod","type":"string"},"shareName":{"description":"Share Name","type":"string"}}},"io.k8s.api.core.v1.AzureFileVolumeSource":{"description":"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.","type":"object","required":["secretName","shareName"],"properties":{"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretName":{"description":"the name of secret that contains Azure Storage Account Name and Key","type":"string"},"shareName":{"description":"Share Name","type":"string"}}},"io.k8s.api.core.v1.Binding":{"description":"Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.","type":"object","required":["target"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"target":{"description":"The target object that you want to bind to the standard object.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Binding","version":"v1"}]},"io.k8s.api.core.v1.CSIPersistentVolumeSource":{"description":"Represents storage that is managed by an external CSI volume driver (Beta feature)","type":"object","required":["driver","volumeHandle"],"properties":{"controllerPublishSecretRef":{"description":"ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"driver":{"description":"Driver is the name of the driver to use for this volume. Required.","type":"string"},"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".","type":"string"},"nodePublishSecretRef":{"description":"NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"nodeStageSecretRef":{"description":"NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"readOnly":{"description":"Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).","type":"boolean"},"volumeAttributes":{"description":"Attributes of the volume to publish.","type":"object","additionalProperties":{"type":"string"}},"volumeHandle":{"description":"VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.","type":"string"}}},"io.k8s.api.core.v1.CSIVolumeSource":{"description":"Represents a source location of a volume to mount, managed by an external CSI driver","type":"object","required":["driver"],"properties":{"driver":{"description":"Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.","type":"string"},"fsType":{"description":"Filesystem type to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.","type":"string"},"nodePublishSecretRef":{"description":"NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"readOnly":{"description":"Specifies a read-only configuration for the volume. Defaults to false (read/write).","type":"boolean"},"volumeAttributes":{"description":"VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.","type":"object","additionalProperties":{"type":"string"}}}},"io.k8s.api.core.v1.Capabilities":{"description":"Adds and removes POSIX capabilities from running containers.","type":"object","properties":{"add":{"description":"Added capabilities","type":"array","items":{"type":"string"}},"drop":{"description":"Removed capabilities","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.CephFSPersistentVolumeSource":{"description":"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.","type":"object","required":["monitors"],"properties":{"monitors":{"description":"Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"array","items":{"type":"string"}},"path":{"description":"Optional: Used as the mounted root, rather than the full Ceph tree, default is /","type":"string"},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"boolean"},"secretFile":{"description":"Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"string"},"secretRef":{"description":"Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"user":{"description":"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"string"}}},"io.k8s.api.core.v1.CephFSVolumeSource":{"description":"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.","type":"object","required":["monitors"],"properties":{"monitors":{"description":"Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"array","items":{"type":"string"}},"path":{"description":"Optional: Used as the mounted root, rather than the full Ceph tree, default is /","type":"string"},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"boolean"},"secretFile":{"description":"Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"string"},"secretRef":{"description":"Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"user":{"description":"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it","type":"string"}}},"io.k8s.api.core.v1.CinderPersistentVolumeSource":{"description":"Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.","type":"object","required":["volumeID"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"string"},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"boolean"},"secretRef":{"description":"Optional: points to a secret object containing parameters used to connect to OpenStack.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"volumeID":{"description":"volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"string"}}},"io.k8s.api.core.v1.CinderVolumeSource":{"description":"Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.","type":"object","required":["volumeID"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"string"},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"boolean"},"secretRef":{"description":"Optional: points to a secret object containing parameters used to connect to OpenStack.","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"volumeID":{"description":"volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","type":"string"}}},"io.k8s.api.core.v1.ClientIPConfig":{"description":"ClientIPConfig represents the configurations of Client IP based session affinity.","type":"object","properties":{"timeoutSeconds":{"description":"timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be \u003e0 \u0026\u0026 \u003c=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).","type":"integer","format":"int32"}}},"io.k8s.api.core.v1.ComponentCondition":{"description":"Information about the condition of a component.","type":"object","required":["type","status"],"properties":{"error":{"description":"Condition error code for a component. For example, a health check error code.","type":"string"},"message":{"description":"Message about the condition for a component. For example, information about a health check.","type":"string"},"status":{"description":"Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".","type":"string"},"type":{"description":"Type of condition for a component. Valid value: \"Healthy\"","type":"string"}}},"io.k8s.api.core.v1.ComponentStatus":{"description":"ComponentStatus (and ComponentStatusList) holds the cluster validation info.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"conditions":{"description":"List of component conditions observed","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ComponentCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ComponentStatus","version":"v1"}]},"io.k8s.api.core.v1.ComponentStatusList":{"description":"Status of all the conditions for the component as a list of ComponentStatus objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ComponentStatus objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ComponentStatus"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ComponentStatusList","version":"v1"}]},"io.k8s.api.core.v1.ConfigMap":{"description":"ConfigMap holds configuration data for pods to consume.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"binaryData":{"description":"BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.","type":"object","additionalProperties":{"type":"string","format":"byte"}},"data":{"description":"Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.","type":"object","additionalProperties":{"type":"string"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ConfigMap","version":"v1"}]},"io.k8s.api.core.v1.ConfigMapEnvSource":{"description":"ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.","type":"object","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the ConfigMap must be defined","type":"boolean"}}},"io.k8s.api.core.v1.ConfigMapKeySelector":{"description":"Selects a key from a ConfigMap.","type":"object","required":["key"],"properties":{"key":{"description":"The key to select.","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the ConfigMap or it's key must be defined","type":"boolean"}}},"io.k8s.api.core.v1.ConfigMapList":{"description":"ConfigMapList is a resource containing a list of ConfigMap objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of ConfigMaps.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ConfigMap"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ConfigMapList","version":"v1"}]},"io.k8s.api.core.v1.ConfigMapNodeConfigSource":{"description":"ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.","type":"object","required":["namespace","name","kubeletConfigKey"],"properties":{"kubeletConfigKey":{"description":"KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.","type":"string"},"name":{"description":"Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.","type":"string"},"namespace":{"description":"Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.","type":"string"},"resourceVersion":{"description":"ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.","type":"string"},"uid":{"description":"UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.","type":"string"}}},"io.k8s.api.core.v1.ConfigMapProjection":{"description":"Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.","type":"object","properties":{"items":{"description":"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.KeyToPath"}},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the ConfigMap or it's keys must be defined","type":"boolean"}}},"io.k8s.api.core.v1.ConfigMapVolumeSource":{"description":"Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.","type":"object","properties":{"defaultMode":{"description":"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"items":{"description":"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.KeyToPath"}},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the ConfigMap or it's keys must be defined","type":"boolean"}}},"io.k8s.api.core.v1.Container":{"description":"A single application container that you want to run within a pod.","type":"object","required":["name"],"properties":{"args":{"description":"Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell","type":"array","items":{"type":"string"}},"command":{"description":"Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell","type":"array","items":{"type":"string"}},"env":{"description":"List of environment variables to set in the container. Cannot be updated.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EnvVar"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"},"envFrom":{"description":"List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EnvFromSource"}},"image":{"description":"Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.","type":"string"},"imagePullPolicy":{"description":"Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images","type":"string"},"lifecycle":{"description":"Actions that the management system should take in response to container lifecycle events. Cannot be updated.","$ref":"#/definitions/io.k8s.api.core.v1.Lifecycle"},"livenessProbe":{"description":"Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","$ref":"#/definitions/io.k8s.api.core.v1.Probe"},"name":{"description":"Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.","type":"string"},"ports":{"description":"List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ContainerPort"},"x-kubernetes-list-map-keys":["containerPort","protocol"],"x-kubernetes-list-type":"map","x-kubernetes-patch-merge-key":"containerPort","x-kubernetes-patch-strategy":"merge"},"readinessProbe":{"description":"Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","$ref":"#/definitions/io.k8s.api.core.v1.Probe"},"resources":{"description":"Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","$ref":"#/definitions/io.k8s.api.core.v1.ResourceRequirements"},"securityContext":{"description":"Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/","$ref":"#/definitions/io.k8s.api.core.v1.SecurityContext"},"stdin":{"description":"Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.","type":"boolean"},"stdinOnce":{"description":"Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false","type":"boolean"},"terminationMessagePath":{"description":"Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.","type":"string"},"terminationMessagePolicy":{"description":"Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.","type":"string"},"tty":{"description":"Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.","type":"boolean"},"volumeDevices":{"description":"volumeDevices is the list of block devices to be used by the container. This is a beta feature.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.VolumeDevice"},"x-kubernetes-patch-merge-key":"devicePath","x-kubernetes-patch-strategy":"merge"},"volumeMounts":{"description":"Pod volumes to mount into the container's filesystem. Cannot be updated.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.VolumeMount"},"x-kubernetes-patch-merge-key":"mountPath","x-kubernetes-patch-strategy":"merge"},"workingDir":{"description":"Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.","type":"string"}}},"io.k8s.api.core.v1.ContainerImage":{"description":"Describe a container image","type":"object","required":["names"],"properties":{"names":{"description":"Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]","type":"array","items":{"type":"string"}},"sizeBytes":{"description":"The size of the image in bytes.","type":"integer","format":"int64"}}},"io.k8s.api.core.v1.ContainerPort":{"description":"ContainerPort represents a network port in a single container.","type":"object","required":["containerPort"],"properties":{"containerPort":{"description":"Number of port to expose on the pod's IP address. This must be a valid port number, 0 \u003c x \u003c 65536.","type":"integer","format":"int32"},"hostIP":{"description":"What host IP to bind the external port to.","type":"string"},"hostPort":{"description":"Number of port to expose on the host. If specified, this must be a valid port number, 0 \u003c x \u003c 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.","type":"integer","format":"int32"},"name":{"description":"If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.","type":"string"},"protocol":{"description":"Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".","type":"string"}}},"io.k8s.api.core.v1.ContainerState":{"description":"ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.","type":"object","properties":{"running":{"description":"Details about a running container","$ref":"#/definitions/io.k8s.api.core.v1.ContainerStateRunning"},"terminated":{"description":"Details about a terminated container","$ref":"#/definitions/io.k8s.api.core.v1.ContainerStateTerminated"},"waiting":{"description":"Details about a waiting container","$ref":"#/definitions/io.k8s.api.core.v1.ContainerStateWaiting"}}},"io.k8s.api.core.v1.ContainerStateRunning":{"description":"ContainerStateRunning is a running state of a container.","type":"object","properties":{"startedAt":{"description":"Time at which the container was last (re-)started","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.api.core.v1.ContainerStateTerminated":{"description":"ContainerStateTerminated is a terminated state of a container.","type":"object","required":["exitCode"],"properties":{"containerID":{"description":"Container's ID in the format 'docker://\u003ccontainer_id\u003e'","type":"string"},"exitCode":{"description":"Exit status from the last termination of the container","type":"integer","format":"int32"},"finishedAt":{"description":"Time at which the container last terminated","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Message regarding the last termination of the container","type":"string"},"reason":{"description":"(brief) reason from the last termination of the container","type":"string"},"signal":{"description":"Signal from the last termination of the container","type":"integer","format":"int32"},"startedAt":{"description":"Time at which previous execution of the container started","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.api.core.v1.ContainerStateWaiting":{"description":"ContainerStateWaiting is a waiting state of a container.","type":"object","properties":{"message":{"description":"Message regarding why the container is not yet running.","type":"string"},"reason":{"description":"(brief) reason the container is not yet running.","type":"string"}}},"io.k8s.api.core.v1.ContainerStatus":{"description":"ContainerStatus contains details for the current status of this container.","type":"object","required":["name","ready","restartCount","image","imageID"],"properties":{"containerID":{"description":"Container's ID in the format 'docker://\u003ccontainer_id\u003e'.","type":"string"},"image":{"description":"The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images","type":"string"},"imageID":{"description":"ImageID of the container's image.","type":"string"},"lastState":{"description":"Details about the container's last termination condition.","$ref":"#/definitions/io.k8s.api.core.v1.ContainerState"},"name":{"description":"This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.","type":"string"},"ready":{"description":"Specifies whether the container has passed its readiness probe.","type":"boolean"},"restartCount":{"description":"The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.","type":"integer","format":"int32"},"state":{"description":"Details about the container's current condition.","$ref":"#/definitions/io.k8s.api.core.v1.ContainerState"}}},"io.k8s.api.core.v1.DaemonEndpoint":{"description":"DaemonEndpoint contains information about a single Daemon endpoint.","type":"object","required":["Port"],"properties":{"Port":{"description":"Port number of the given endpoint.","type":"integer","format":"int32"}}},"io.k8s.api.core.v1.DownwardAPIProjection":{"description":"Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.","type":"object","properties":{"items":{"description":"Items is a list of DownwardAPIVolume file","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile"}}}},"io.k8s.api.core.v1.DownwardAPIVolumeFile":{"description":"DownwardAPIVolumeFile represents information to create the file containing the pod field","type":"object","required":["path"],"properties":{"fieldRef":{"description":"Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector"},"mode":{"description":"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"path":{"description":"Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'","type":"string"},"resourceFieldRef":{"description":"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.","$ref":"#/definitions/io.k8s.api.core.v1.ResourceFieldSelector"}}},"io.k8s.api.core.v1.DownwardAPIVolumeSource":{"description":"DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.","type":"object","properties":{"defaultMode":{"description":"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"items":{"description":"Items is a list of downward API volume file","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile"}}}},"io.k8s.api.core.v1.EmptyDirVolumeSource":{"description":"Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.","type":"object","properties":{"medium":{"description":"What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir","type":"string"},"sizeLimit":{"description":"Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}},"io.k8s.api.core.v1.EndpointAddress":{"description":"EndpointAddress is a tuple that describes single IP address.","type":"object","required":["ip"],"properties":{"hostname":{"description":"The Hostname of this endpoint","type":"string"},"ip":{"description":"The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.","type":"string"},"nodeName":{"description":"Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.","type":"string"},"targetRef":{"description":"Reference to object providing the endpoint.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"}}},"io.k8s.api.core.v1.EndpointPort":{"description":"EndpointPort is a tuple that describes a single port.","type":"object","required":["port"],"properties":{"name":{"description":"The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.","type":"string"},"port":{"description":"The port number of the endpoint.","type":"integer","format":"int32"},"protocol":{"description":"The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.","type":"string"}}},"io.k8s.api.core.v1.EndpointSubset":{"description":"EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]","type":"object","properties":{"addresses":{"description":"IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointAddress"}},"notReadyAddresses":{"description":"IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointAddress"}},"ports":{"description":"Port numbers available on the related IP addresses.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointPort"}}}},"io.k8s.api.core.v1.Endpoints":{"description":"Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"subsets":{"description":"The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.EndpointSubset"}}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Endpoints","version":"v1"}]},"io.k8s.api.core.v1.EndpointsList":{"description":"EndpointsList is a list of endpoints.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of endpoints.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Endpoints"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"EndpointsList","version":"v1"}]},"io.k8s.api.core.v1.EnvFromSource":{"description":"EnvFromSource represents the source of a set of ConfigMaps","type":"object","properties":{"configMapRef":{"description":"The ConfigMap to select from","$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource"},"prefix":{"description":"An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.","type":"string"},"secretRef":{"description":"The Secret to select from","$ref":"#/definitions/io.k8s.api.core.v1.SecretEnvSource"}}},"io.k8s.api.core.v1.EnvVar":{"description":"EnvVar represents an environment variable present in a Container.","type":"object","required":["name"],"properties":{"name":{"description":"Name of the environment variable. Must be a C_IDENTIFIER.","type":"string"},"value":{"description":"Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".","type":"string"},"valueFrom":{"description":"Source for the environment variable's value. Cannot be used if value is not empty.","$ref":"#/definitions/io.k8s.api.core.v1.EnvVarSource"}}},"io.k8s.api.core.v1.EnvVarSource":{"description":"EnvVarSource represents a source for the value of an EnvVar.","type":"object","properties":{"configMapKeyRef":{"description":"Selects a key of a ConfigMap.","$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector"},"fieldRef":{"description":"Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector"},"resourceFieldRef":{"description":"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.","$ref":"#/definitions/io.k8s.api.core.v1.ResourceFieldSelector"},"secretKeyRef":{"description":"Selects a key of a secret in the pod's namespace","$ref":"#/definitions/io.k8s.api.core.v1.SecretKeySelector"}}},"io.k8s.api.core.v1.Event":{"description":"Event is a report of an event somewhere in the cluster.","type":"object","required":["metadata","involvedObject"],"properties":{"action":{"description":"What action was taken/failed regarding to the Regarding object.","type":"string"},"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"count":{"description":"The number of times this event has occurred.","type":"integer","format":"int32"},"eventTime":{"description":"Time when this Event was first observed.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"},"firstTimestamp":{"description":"The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"involvedObject":{"description":"The object that this event is about.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"lastTimestamp":{"description":"The time at which the most recent occurrence of this event was recorded.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human-readable description of the status of this operation.","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"reason":{"description":"This should be a short, machine understandable string that gives the reason for the transition into the object's current status.","type":"string"},"related":{"description":"Optional secondary object for more complex actions.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"},"reportingComponent":{"description":"Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.","type":"string"},"reportingInstance":{"description":"ID of the controller instance, e.g. `kubelet-xyzf`.","type":"string"},"series":{"description":"Data about the Event series this event represents or nil if it's a singleton Event.","$ref":"#/definitions/io.k8s.api.core.v1.EventSeries"},"source":{"description":"The component reporting this event. Should be a short machine understandable string.","$ref":"#/definitions/io.k8s.api.core.v1.EventSource"},"type":{"description":"Type of this event (Normal, Warning), new types could be added in the future","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Event","version":"v1"}]},"io.k8s.api.core.v1.EventList":{"description":"EventList is a list of events.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of events","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Event"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"EventList","version":"v1"}]},"io.k8s.api.core.v1.EventSeries":{"description":"EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.","type":"object","properties":{"count":{"description":"Number of occurrences in this series up to the last heartbeat time","type":"integer","format":"int32"},"lastObservedTime":{"description":"Time of the last occurrence observed","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"},"state":{"description":"State of this Series: Ongoing or Finished","type":"string"}}},"io.k8s.api.core.v1.EventSource":{"description":"EventSource contains information for an event.","type":"object","properties":{"component":{"description":"Component from which the event is generated.","type":"string"},"host":{"description":"Node name on which the event is generated.","type":"string"}}},"io.k8s.api.core.v1.ExecAction":{"description":"ExecAction describes a \"run in container\" action.","type":"object","properties":{"command":{"description":"Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.FCVolumeSource":{"description":"Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.","type":"object","properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"lun":{"description":"Optional: FC target lun number","type":"integer","format":"int32"},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"targetWWNs":{"description":"Optional: FC target worldwide names (WWNs)","type":"array","items":{"type":"string"}},"wwids":{"description":"Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.FlexPersistentVolumeSource":{"description":"FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.","type":"object","required":["driver"],"properties":{"driver":{"description":"Driver is the name of the driver to use for this volume.","type":"string"},"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.","type":"string"},"options":{"description":"Optional: Extra command options if any.","type":"object","additionalProperties":{"type":"string"}},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"}}},"io.k8s.api.core.v1.FlexVolumeSource":{"description":"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.","type":"object","required":["driver"],"properties":{"driver":{"description":"Driver is the name of the driver to use for this volume.","type":"string"},"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.","type":"string"},"options":{"description":"Optional: Extra command options if any.","type":"object","additionalProperties":{"type":"string"}},"readOnly":{"description":"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"}}},"io.k8s.api.core.v1.FlockerVolumeSource":{"description":"Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.","type":"object","properties":{"datasetName":{"description":"Name of the dataset stored as metadata -\u003e name on the dataset for Flocker should be considered as deprecated","type":"string"},"datasetUUID":{"description":"UUID of the dataset. This is unique identifier of a Flocker dataset","type":"string"}}},"io.k8s.api.core.v1.GCEPersistentDiskVolumeSource":{"description":"Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.","type":"object","required":["pdName"],"properties":{"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","type":"string"},"partition":{"description":"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","type":"integer","format":"int32"},"pdName":{"description":"Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","type":"string"},"readOnly":{"description":"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","type":"boolean"}}},"io.k8s.api.core.v1.GitRepoVolumeSource":{"description":"Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.","type":"object","required":["repository"],"properties":{"directory":{"description":"Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.","type":"string"},"repository":{"description":"Repository URL","type":"string"},"revision":{"description":"Commit hash for the specified revision.","type":"string"}}},"io.k8s.api.core.v1.GlusterfsPersistentVolumeSource":{"description":"Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.","type":"object","required":["endpoints","path"],"properties":{"endpoints":{"description":"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"string"},"endpointsNamespace":{"description":"EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"string"},"path":{"description":"Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"string"},"readOnly":{"description":"ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"boolean"}}},"io.k8s.api.core.v1.GlusterfsVolumeSource":{"description":"Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.","type":"object","required":["endpoints","path"],"properties":{"endpoints":{"description":"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"string"},"path":{"description":"Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"string"},"readOnly":{"description":"ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod","type":"boolean"}}},"io.k8s.api.core.v1.HTTPGetAction":{"description":"HTTPGetAction describes an action based on HTTP Get requests.","type":"object","required":["port"],"properties":{"host":{"description":"Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.","type":"string"},"httpHeaders":{"description":"Custom headers to set in the request. HTTP allows repeated headers.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.HTTPHeader"}},"path":{"description":"Path to access on the HTTP server.","type":"string"},"port":{"description":"Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"scheme":{"description":"Scheme to use for connecting to the host. Defaults to HTTP.","type":"string"}}},"io.k8s.api.core.v1.HTTPHeader":{"description":"HTTPHeader describes a custom header to be used in HTTP probes","type":"object","required":["name","value"],"properties":{"name":{"description":"The header field name","type":"string"},"value":{"description":"The header field value","type":"string"}}},"io.k8s.api.core.v1.Handler":{"description":"Handler defines a specific action that should be taken","type":"object","properties":{"exec":{"description":"One and only one of the following should be specified. Exec specifies the action to take.","$ref":"#/definitions/io.k8s.api.core.v1.ExecAction"},"httpGet":{"description":"HTTPGet specifies the http request to perform.","$ref":"#/definitions/io.k8s.api.core.v1.HTTPGetAction"},"tcpSocket":{"description":"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported","$ref":"#/definitions/io.k8s.api.core.v1.TCPSocketAction"}}},"io.k8s.api.core.v1.HostAlias":{"description":"HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.","type":"object","properties":{"hostnames":{"description":"Hostnames for the above IP address.","type":"array","items":{"type":"string"}},"ip":{"description":"IP address of the host file entry.","type":"string"}}},"io.k8s.api.core.v1.HostPathVolumeSource":{"description":"Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.","type":"object","required":["path"],"properties":{"path":{"description":"Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath","type":"string"},"type":{"description":"Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath","type":"string"}}},"io.k8s.api.core.v1.ISCSIPersistentVolumeSource":{"description":"ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.","type":"object","required":["targetPortal","iqn","lun"],"properties":{"chapAuthDiscovery":{"description":"whether support iSCSI Discovery CHAP authentication","type":"boolean"},"chapAuthSession":{"description":"whether support iSCSI Session CHAP authentication","type":"boolean"},"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi","type":"string"},"initiatorName":{"description":"Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \u003ctarget portal\u003e:\u003cvolume name\u003e will be created for the connection.","type":"string"},"iqn":{"description":"Target iSCSI Qualified Name.","type":"string"},"iscsiInterface":{"description":"iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).","type":"string"},"lun":{"description":"iSCSI Target Lun number.","type":"integer","format":"int32"},"portals":{"description":"iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).","type":"array","items":{"type":"string"}},"readOnly":{"description":"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.","type":"boolean"},"secretRef":{"description":"CHAP Secret for iSCSI target and initiator authentication","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"targetPortal":{"description":"iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).","type":"string"}}},"io.k8s.api.core.v1.ISCSIVolumeSource":{"description":"Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.","type":"object","required":["targetPortal","iqn","lun"],"properties":{"chapAuthDiscovery":{"description":"whether support iSCSI Discovery CHAP authentication","type":"boolean"},"chapAuthSession":{"description":"whether support iSCSI Session CHAP authentication","type":"boolean"},"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi","type":"string"},"initiatorName":{"description":"Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \u003ctarget portal\u003e:\u003cvolume name\u003e will be created for the connection.","type":"string"},"iqn":{"description":"Target iSCSI Qualified Name.","type":"string"},"iscsiInterface":{"description":"iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).","type":"string"},"lun":{"description":"iSCSI Target Lun number.","type":"integer","format":"int32"},"portals":{"description":"iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).","type":"array","items":{"type":"string"}},"readOnly":{"description":"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.","type":"boolean"},"secretRef":{"description":"CHAP Secret for iSCSI target and initiator authentication","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"targetPortal":{"description":"iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).","type":"string"}}},"io.k8s.api.core.v1.KeyToPath":{"description":"Maps a string key to a path within a volume.","type":"object","required":["key","path"],"properties":{"key":{"description":"The key to project.","type":"string"},"mode":{"description":"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"path":{"description":"The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.","type":"string"}}},"io.k8s.api.core.v1.Lifecycle":{"description":"Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.","type":"object","properties":{"postStart":{"description":"PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks","$ref":"#/definitions/io.k8s.api.core.v1.Handler"},"preStop":{"description":"PreStop is called immediately before a container is terminated due to an API request or management event such as liveness probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks","$ref":"#/definitions/io.k8s.api.core.v1.Handler"}}},"io.k8s.api.core.v1.LimitRange":{"description":"LimitRange sets resource usage limits for each kind of resource in a Namespace.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.LimitRangeSpec"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"LimitRange","version":"v1"}]},"io.k8s.api.core.v1.LimitRangeItem":{"description":"LimitRangeItem defines a min/max usage limit for any resource that matches on kind.","type":"object","properties":{"default":{"description":"Default resource requirement limit value by resource name if resource limit is omitted.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"defaultRequest":{"description":"DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"max":{"description":"Max usage constraints on this kind by resource name.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"maxLimitRequestRatio":{"description":"MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"min":{"description":"Min usage constraints on this kind by resource name.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"type":{"description":"Type of resource that this limit applies to.","type":"string"}}},"io.k8s.api.core.v1.LimitRangeList":{"description":"LimitRangeList is a list of LimitRange items.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRange"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"LimitRangeList","version":"v1"}]},"io.k8s.api.core.v1.LimitRangeSpec":{"description":"LimitRangeSpec defines a min/max usage limit for resources that match on kind.","type":"object","required":["limits"],"properties":{"limits":{"description":"Limits is the list of LimitRangeItem objects that are enforced.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.LimitRangeItem"}}}},"io.k8s.api.core.v1.LoadBalancerIngress":{"description":"LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.","type":"object","properties":{"hostname":{"description":"Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)","type":"string"},"ip":{"description":"IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)","type":"string"}}},"io.k8s.api.core.v1.LoadBalancerStatus":{"description":"LoadBalancerStatus represents the status of a load-balancer.","type":"object","properties":{"ingress":{"description":"Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.LoadBalancerIngress"}}}},"io.k8s.api.core.v1.LocalObjectReference":{"description":"LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.","type":"object","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"}}},"io.k8s.api.core.v1.LocalVolumeSource":{"description":"Local represents directly-attached storage with node affinity (Beta feature)","type":"object","required":["path"],"properties":{"fsType":{"description":"Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a fileystem if unspecified.","type":"string"},"path":{"description":"The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).","type":"string"}}},"io.k8s.api.core.v1.NFSVolumeSource":{"description":"Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.","type":"object","required":["server","path"],"properties":{"path":{"description":"Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs","type":"string"},"readOnly":{"description":"ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs","type":"boolean"},"server":{"description":"Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs","type":"string"}}},"io.k8s.api.core.v1.Namespace":{"description":"Namespace provides a scope for Names. Use of multiple namespaces is optional.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.NamespaceSpec"},"status":{"description":"Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.NamespaceStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Namespace","version":"v1"}]},"io.k8s.api.core.v1.NamespaceList":{"description":"NamespaceList is a list of Namespaces.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Namespace"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"NamespaceList","version":"v1"}]},"io.k8s.api.core.v1.NamespaceSpec":{"description":"NamespaceSpec describes the attributes on a Namespace.","type":"object","properties":{"finalizers":{"description":"Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.NamespaceStatus":{"description":"NamespaceStatus is information about the current status of a Namespace.","type":"object","properties":{"phase":{"description":"Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/","type":"string"}}},"io.k8s.api.core.v1.Node":{"description":"Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.NodeSpec"},"status":{"description":"Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.NodeStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Node","version":"v1"}]},"io.k8s.api.core.v1.NodeAddress":{"description":"NodeAddress contains information for the node's address.","type":"object","required":["type","address"],"properties":{"address":{"description":"The node address.","type":"string"},"type":{"description":"Node address type, one of Hostname, ExternalIP or InternalIP.","type":"string"}}},"io.k8s.api.core.v1.NodeAffinity":{"description":"Node affinity is a group of node affinity scheduling rules.","type":"object","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm"}},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.","$ref":"#/definitions/io.k8s.api.core.v1.NodeSelector"}}},"io.k8s.api.core.v1.NodeCondition":{"description":"NodeCondition contains condition information for a node.","type":"object","required":["type","status"],"properties":{"lastHeartbeatTime":{"description":"Last time we got an update on a given condition.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastTransitionTime":{"description":"Last time the condition transit from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human readable message indicating details about last transition.","type":"string"},"reason":{"description":"(brief) reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of node condition.","type":"string"}}},"io.k8s.api.core.v1.NodeConfigSource":{"description":"NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.","type":"object","properties":{"configMap":{"description":"ConfigMap is a reference to a Node's ConfigMap","$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource"}}},"io.k8s.api.core.v1.NodeConfigStatus":{"description":"NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.","type":"object","properties":{"active":{"description":"Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.","$ref":"#/definitions/io.k8s.api.core.v1.NodeConfigSource"},"assigned":{"description":"Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.","$ref":"#/definitions/io.k8s.api.core.v1.NodeConfigSource"},"error":{"description":"Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.","type":"string"},"lastKnownGood":{"description":"LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.","$ref":"#/definitions/io.k8s.api.core.v1.NodeConfigSource"}}},"io.k8s.api.core.v1.NodeDaemonEndpoints":{"description":"NodeDaemonEndpoints lists ports opened by daemons running on the Node.","type":"object","properties":{"kubeletEndpoint":{"description":"Endpoint on which Kubelet is listening.","$ref":"#/definitions/io.k8s.api.core.v1.DaemonEndpoint"}}},"io.k8s.api.core.v1.NodeList":{"description":"NodeList is the whole list of all Nodes which have been registered with master.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of nodes","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Node"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"NodeList","version":"v1"}]},"io.k8s.api.core.v1.NodeSelector":{"description":"A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.","type":"object","required":["nodeSelectorTerms"],"properties":{"nodeSelectorTerms":{"description":"Required. A list of node selector terms. The terms are ORed.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"}}}},"io.k8s.api.core.v1.NodeSelectorRequirement":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","type":"object","required":["key","operator"],"properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.NodeSelectorTerm":{"description":"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.","type":"object","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement"}},"matchFields":{"description":"A list of node selector requirements by node's fields.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement"}}}},"io.k8s.api.core.v1.NodeSpec":{"description":"NodeSpec describes the attributes that a node is created with.","type":"object","properties":{"configSource":{"description":"If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field","$ref":"#/definitions/io.k8s.api.core.v1.NodeConfigSource"},"externalID":{"description":"Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966","type":"string"},"podCIDR":{"description":"PodCIDR represents the pod IP range assigned to the node.","type":"string"},"providerID":{"description":"ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e","type":"string"},"taints":{"description":"If specified, the node's taints.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Taint"}},"unschedulable":{"description":"Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration","type":"boolean"}}},"io.k8s.api.core.v1.NodeStatus":{"description":"NodeStatus is information about the current status of a node.","type":"object","properties":{"addresses":{"description":"List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeAddress"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"allocatable":{"description":"Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"capacity":{"description":"Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"conditions":{"description":"Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.NodeCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"config":{"description":"Status of the config assigned to the node via the dynamic Kubelet config feature.","$ref":"#/definitions/io.k8s.api.core.v1.NodeConfigStatus"},"daemonEndpoints":{"description":"Endpoints of daemons running on the Node.","$ref":"#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints"},"images":{"description":"List of container images on this node","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ContainerImage"}},"nodeInfo":{"description":"Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info","$ref":"#/definitions/io.k8s.api.core.v1.NodeSystemInfo"},"phase":{"description":"NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.","type":"string"},"volumesAttached":{"description":"List of volumes that are attached to the node.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.AttachedVolume"}},"volumesInUse":{"description":"List of attachable volumes in use (mounted) by the node.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.NodeSystemInfo":{"description":"NodeSystemInfo is a set of ids/uuids to uniquely identify the node.","type":"object","required":["machineID","systemUUID","bootID","kernelVersion","osImage","containerRuntimeVersion","kubeletVersion","kubeProxyVersion","operatingSystem","architecture"],"properties":{"architecture":{"description":"The Architecture reported by the node","type":"string"},"bootID":{"description":"Boot ID reported by the node.","type":"string"},"containerRuntimeVersion":{"description":"ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).","type":"string"},"kernelVersion":{"description":"Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).","type":"string"},"kubeProxyVersion":{"description":"KubeProxy Version reported by the node.","type":"string"},"kubeletVersion":{"description":"Kubelet Version reported by the node.","type":"string"},"machineID":{"description":"MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html","type":"string"},"operatingSystem":{"description":"The Operating System reported by the node","type":"string"},"osImage":{"description":"OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).","type":"string"},"systemUUID":{"description":"SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html","type":"string"}}},"io.k8s.api.core.v1.ObjectFieldSelector":{"description":"ObjectFieldSelector selects an APIVersioned field of an object.","type":"object","required":["fieldPath"],"properties":{"apiVersion":{"description":"Version of the schema the FieldPath is written in terms of, defaults to \"v1\".","type":"string"},"fieldPath":{"description":"Path of the field to select in the specified API version.","type":"string"}}},"io.k8s.api.core.v1.ObjectReference":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","type":"object","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}}},"io.k8s.api.core.v1.PersistentVolume":{"description":"PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes","$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec"},"status":{"description":"Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes","$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PersistentVolume","version":"v1"}]},"io.k8s.api.core.v1.PersistentVolumeClaim":{"description":"PersistentVolumeClaim is a user's request for and claim to a persistent volume","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec"},"status":{"description":"Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PersistentVolumeClaim","version":"v1"}]},"io.k8s.api.core.v1.PersistentVolumeClaimCondition":{"description":"PersistentVolumeClaimCondition contails details about state of pvc","type":"object","required":["type","status"],"properties":{"lastProbeTime":{"description":"Last time we probed the condition.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.","type":"string"},"status":{"type":"string"},"type":{"type":"string"}}},"io.k8s.api.core.v1.PersistentVolumeClaimList":{"description":"PersistentVolumeClaimList is a list of PersistentVolumeClaim items.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PersistentVolumeClaimList","version":"v1"}]},"io.k8s.api.core.v1.PersistentVolumeClaimSpec":{"description":"PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes","type":"object","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","type":"array","items":{"type":"string"}},"dataSource":{"description":"This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.","$ref":"#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference"},"resources":{"description":"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources","$ref":"#/definitions/io.k8s.api.core.v1.ResourceRequirements"},"selector":{"description":"A label query over volumes to consider for binding.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}}},"io.k8s.api.core.v1.PersistentVolumeClaimStatus":{"description":"PersistentVolumeClaimStatus is the current status of a persistent volume claim.","type":"object","properties":{"accessModes":{"description":"AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","type":"array","items":{"type":"string"}},"capacity":{"description":"Represents the actual resources of the underlying volume.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"conditions":{"description":"Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"phase":{"description":"Phase represents the current phase of PersistentVolumeClaim.","type":"string"}}},"io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource":{"description":"PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).","type":"object","required":["claimName"],"properties":{"claimName":{"description":"ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","type":"string"},"readOnly":{"description":"Will force the ReadOnly setting in VolumeMounts. Default false.","type":"boolean"}}},"io.k8s.api.core.v1.PersistentVolumeList":{"description":"PersistentVolumeList is a list of PersistentVolume items.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolume"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PersistentVolumeList","version":"v1"}]},"io.k8s.api.core.v1.PersistentVolumeSpec":{"description":"PersistentVolumeSpec is the specification of a persistent volume.","type":"object","properties":{"accessModes":{"description":"AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes","type":"array","items":{"type":"string"}},"awsElasticBlockStore":{"description":"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore","$ref":"#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"},"azureDisk":{"description":"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"},"azureFile":{"description":"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource"},"capacity":{"description":"A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"cephfs":{"description":"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime","$ref":"#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource"},"cinder":{"description":"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","$ref":"#/definitions/io.k8s.api.core.v1.CinderPersistentVolumeSource"},"claimRef":{"description":"ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"},"csi":{"description":"CSI represents storage that is handled by an external CSI driver (Beta feature).","$ref":"#/definitions/io.k8s.api.core.v1.CSIPersistentVolumeSource"},"fc":{"description":"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.FCVolumeSource"},"flexVolume":{"description":"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.","$ref":"#/definitions/io.k8s.api.core.v1.FlexPersistentVolumeSource"},"flocker":{"description":"Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running","$ref":"#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"},"gcePersistentDisk":{"description":"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","$ref":"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"},"glusterfs":{"description":"Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md","$ref":"#/definitions/io.k8s.api.core.v1.GlusterfsPersistentVolumeSource"},"hostPath":{"description":"HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath","$ref":"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"},"iscsi":{"description":"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.","$ref":"#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource"},"local":{"description":"Local represents directly-attached storage with node affinity","$ref":"#/definitions/io.k8s.api.core.v1.LocalVolumeSource"},"mountOptions":{"description":"A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options","type":"array","items":{"type":"string"}},"nfs":{"description":"NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs","$ref":"#/definitions/io.k8s.api.core.v1.NFSVolumeSource"},"nodeAffinity":{"description":"NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.","$ref":"#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity"},"persistentVolumeReclaimPolicy":{"description":"What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming","type":"string"},"photonPersistentDisk":{"description":"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"},"portworxVolume":{"description":"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"},"quobyte":{"description":"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime","$ref":"#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"},"rbd":{"description":"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md","$ref":"#/definitions/io.k8s.api.core.v1.RBDPersistentVolumeSource"},"scaleIO":{"description":"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.","$ref":"#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource"},"storageClassName":{"description":"Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.","type":"string"},"storageos":{"description":"StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md","$ref":"#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource"},"volumeMode":{"description":"volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.","type":"string"},"vsphereVolume":{"description":"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"}}},"io.k8s.api.core.v1.PersistentVolumeStatus":{"description":"PersistentVolumeStatus is the current status of a persistent volume.","type":"object","properties":{"message":{"description":"A human-readable message indicating details about why the volume is in this state.","type":"string"},"phase":{"description":"Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase","type":"string"},"reason":{"description":"Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.","type":"string"}}},"io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource":{"description":"Represents a Photon Controller persistent disk resource.","type":"object","required":["pdID"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"pdID":{"description":"ID that identifies Photon Controller persistent disk","type":"string"}}},"io.k8s.api.core.v1.Pod":{"description":"Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"},"status":{"description":"Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.PodStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Pod","version":"v1"}]},"io.k8s.api.core.v1.PodAffinity":{"description":"Pod affinity is a group of inter pod affinity scheduling rules.","type":"object","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm"}},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodAffinityTerm"}}}},"io.k8s.api.core.v1.PodAffinityTerm":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","type":"object","required":["topologyKey"],"properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","type":"array","items":{"type":"string"}},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}}},"io.k8s.api.core.v1.PodAntiAffinity":{"description":"Pod anti affinity is a group of inter pod anti affinity scheduling rules.","type":"object","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm"}},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodAffinityTerm"}}}},"io.k8s.api.core.v1.PodCondition":{"description":"PodCondition contains details for the current condition of this pod.","type":"object","required":["type","status"],"properties":{"lastProbeTime":{"description":"Last time we probed the condition.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, one-word, CamelCase reason for the condition's last transition.","type":"string"},"status":{"description":"Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions","type":"string"},"type":{"description":"Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions","type":"string"}}},"io.k8s.api.core.v1.PodDNSConfig":{"description":"PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.","type":"object","properties":{"nameservers":{"description":"A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.","type":"array","items":{"type":"string"}},"options":{"description":"A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodDNSConfigOption"}},"searches":{"description":"A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.PodDNSConfigOption":{"description":"PodDNSConfigOption defines DNS resolver options of a pod.","type":"object","properties":{"name":{"description":"Required.","type":"string"},"value":{"type":"string"}}},"io.k8s.api.core.v1.PodList":{"description":"PodList is a list of Pods.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Pod"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PodList","version":"v1"}]},"io.k8s.api.core.v1.PodReadinessGate":{"description":"PodReadinessGate contains the reference to a pod condition","type":"object","required":["conditionType"],"properties":{"conditionType":{"description":"ConditionType refers to a condition in the pod's condition list with matching type.","type":"string"}}},"io.k8s.api.core.v1.PodSecurityContext":{"description":"PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.","type":"object","properties":{"fsGroup":{"description":"A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.","type":"integer","format":"int64"},"runAsGroup":{"description":"The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.","type":"integer","format":"int64"},"runAsNonRoot":{"description":"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.","type":"boolean"},"runAsUser":{"description":"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.","type":"integer","format":"int64"},"seLinuxOptions":{"description":"The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.","$ref":"#/definitions/io.k8s.api.core.v1.SELinuxOptions"},"supplementalGroups":{"description":"A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.","type":"array","items":{"type":"integer","format":"int64"}},"sysctls":{"description":"Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Sysctl"}}}},"io.k8s.api.core.v1.PodSpec":{"description":"PodSpec is a description of a pod.","type":"object","required":["containers"],"properties":{"activeDeadlineSeconds":{"description":"Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.","type":"integer","format":"int64"},"affinity":{"description":"If specified, the pod's scheduling constraints","$ref":"#/definitions/io.k8s.api.core.v1.Affinity"},"automountServiceAccountToken":{"description":"AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.","type":"boolean"},"containers":{"description":"List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Container"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"},"dnsConfig":{"description":"Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.","$ref":"#/definitions/io.k8s.api.core.v1.PodDNSConfig"},"dnsPolicy":{"description":"Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.","type":"string"},"enableServiceLinks":{"description":"EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.","type":"boolean"},"hostAliases":{"description":"HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.HostAlias"},"x-kubernetes-patch-merge-key":"ip","x-kubernetes-patch-strategy":"merge"},"hostIPC":{"description":"Use the host's ipc namespace. Optional: Default to false.","type":"boolean"},"hostNetwork":{"description":"Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.","type":"boolean"},"hostPID":{"description":"Use the host's pid namespace. Optional: Default to false.","type":"boolean"},"hostname":{"description":"Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.","type":"string"},"imagePullSecrets":{"description":"ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"},"initContainers":{"description":"List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Container"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"},"nodeName":{"description":"NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.","type":"string"},"nodeSelector":{"description":"NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/","type":"object","additionalProperties":{"type":"string"}},"priority":{"description":"The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.","type":"integer","format":"int32"},"priorityClassName":{"description":"If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.","type":"string"},"readinessGates":{"description":"If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodReadinessGate"}},"restartPolicy":{"description":"Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy","type":"string"},"runtimeClassName":{"description":"RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is an alpha feature and may change in the future.","type":"string"},"schedulerName":{"description":"If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.","type":"string"},"securityContext":{"description":"SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.","$ref":"#/definitions/io.k8s.api.core.v1.PodSecurityContext"},"serviceAccount":{"description":"DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.","type":"string"},"serviceAccountName":{"description":"ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/","type":"string"},"shareProcessNamespace":{"description":"Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.","type":"boolean"},"subdomain":{"description":"If specified, the fully qualified Pod hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the pod will not have a domainname at all.","type":"string"},"terminationGracePeriodSeconds":{"description":"Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.","type":"integer","format":"int64"},"tolerations":{"description":"If specified, the pod's tolerations.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Toleration"}},"volumes":{"description":"List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Volume"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge,retainKeys"}}},"io.k8s.api.core.v1.PodStatus":{"description":"PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.","type":"object","properties":{"conditions":{"description":"Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"containerStatuses":{"description":"The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ContainerStatus"}},"hostIP":{"description":"IP address of the host to which the pod is assigned. Empty if not yet scheduled.","type":"string"},"initContainerStatuses":{"description":"The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ContainerStatus"}},"message":{"description":"A human readable message indicating details about why the pod is in this condition.","type":"string"},"nominatedNodeName":{"description":"nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.","type":"string"},"phase":{"description":"The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase","type":"string"},"podIP":{"description":"IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.","type":"string"},"qosClass":{"description":"The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md","type":"string"},"reason":{"description":"A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'","type":"string"},"startTime":{"description":"RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.api.core.v1.PodTemplate":{"description":"PodTemplate describes a template for creating copies of a predefined pod.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"template":{"description":"Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PodTemplate","version":"v1"}]},"io.k8s.api.core.v1.PodTemplateList":{"description":"PodTemplateList is a list of PodTemplates.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of pod templates","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.PodTemplate"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"PodTemplateList","version":"v1"}]},"io.k8s.api.core.v1.PodTemplateSpec":{"description":"PodTemplateSpec describes the data a pod should have when created from a template","type":"object","properties":{"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"}}},"io.k8s.api.core.v1.PortworxVolumeSource":{"description":"PortworxVolumeSource represents a Portworx volume resource.","type":"object","required":["volumeID"],"properties":{"fsType":{"description":"FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"volumeID":{"description":"VolumeID uniquely identifies a Portworx volume","type":"string"}}},"io.k8s.api.core.v1.PreferredSchedulingTerm":{"description":"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).","type":"object","required":["weight","preference"],"properties":{"preference":{"description":"A node selector term, associated with the corresponding weight.","$ref":"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"},"weight":{"description":"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.","type":"integer","format":"int32"}}},"io.k8s.api.core.v1.Probe":{"description":"Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.","type":"object","properties":{"exec":{"description":"One and only one of the following should be specified. Exec specifies the action to take.","$ref":"#/definitions/io.k8s.api.core.v1.ExecAction"},"failureThreshold":{"description":"Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.","type":"integer","format":"int32"},"httpGet":{"description":"HTTPGet specifies the http request to perform.","$ref":"#/definitions/io.k8s.api.core.v1.HTTPGetAction"},"initialDelaySeconds":{"description":"Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","type":"integer","format":"int32"},"periodSeconds":{"description":"How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.","type":"integer","format":"int32"},"successThreshold":{"description":"Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.","type":"integer","format":"int32"},"tcpSocket":{"description":"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported","$ref":"#/definitions/io.k8s.api.core.v1.TCPSocketAction"},"timeoutSeconds":{"description":"Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","type":"integer","format":"int32"}}},"io.k8s.api.core.v1.ProjectedVolumeSource":{"description":"Represents a projected volume source","type":"object","required":["sources"],"properties":{"defaultMode":{"description":"Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"sources":{"description":"list of volume projections","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.VolumeProjection"}}}},"io.k8s.api.core.v1.QuobyteVolumeSource":{"description":"Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.","type":"object","required":["registry","volume"],"properties":{"group":{"description":"Group to map volume access to Default is no group","type":"string"},"readOnly":{"description":"ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.","type":"boolean"},"registry":{"description":"Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes","type":"string"},"tenant":{"description":"Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin","type":"string"},"user":{"description":"User to map volume access to Defaults to serivceaccount user","type":"string"},"volume":{"description":"Volume is a string that references an already created Quobyte volume by name.","type":"string"}}},"io.k8s.api.core.v1.RBDPersistentVolumeSource":{"description":"Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.","type":"object","required":["monitors","image"],"properties":{"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd","type":"string"},"image":{"description":"The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"keyring":{"description":"Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"monitors":{"description":"A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"array","items":{"type":"string"}},"pool":{"description":"The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"readOnly":{"description":"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"boolean"},"secretRef":{"description":"SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"user":{"description":"The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"}}},"io.k8s.api.core.v1.RBDVolumeSource":{"description":"Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.","type":"object","required":["monitors","image"],"properties":{"fsType":{"description":"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd","type":"string"},"image":{"description":"The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"keyring":{"description":"Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"monitors":{"description":"A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"array","items":{"type":"string"}},"pool":{"description":"The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"},"readOnly":{"description":"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"boolean"},"secretRef":{"description":"SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"user":{"description":"The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it","type":"string"}}},"io.k8s.api.core.v1.ReplicationController":{"description":"ReplicationController represents the configuration of a replication controller.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec"},"status":{"description":"Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ReplicationController","version":"v1"}]},"io.k8s.api.core.v1.ReplicationControllerCondition":{"description":"ReplicationControllerCondition describes the state of a replication controller at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"The last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of replication controller condition.","type":"string"}}},"io.k8s.api.core.v1.ReplicationControllerList":{"description":"ReplicationControllerList is a collection of replication controllers.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationController"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ReplicationControllerList","version":"v1"}]},"io.k8s.api.core.v1.ReplicationControllerSpec":{"description":"ReplicationControllerSpec is the specification of a replication controller.","type":"object","properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller","type":"integer","format":"int32"},"selector":{"description":"Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","type":"object","additionalProperties":{"type":"string"}},"template":{"description":"Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.core.v1.ReplicationControllerStatus":{"description":"ReplicationControllerStatus represents the current status of a replication controller.","type":"object","required":["replicas"],"properties":{"availableReplicas":{"description":"The number of available replicas (ready for at least minReadySeconds) for this replication controller.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a replication controller's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"fullyLabeledReplicas":{"description":"The number of pods that have labels matching the labels of the pod template of the replication controller.","type":"integer","format":"int32"},"observedGeneration":{"description":"ObservedGeneration reflects the generation of the most recently observed replication controller.","type":"integer","format":"int64"},"readyReplicas":{"description":"The number of ready replicas for this replication controller.","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller","type":"integer","format":"int32"}}},"io.k8s.api.core.v1.ResourceFieldSelector":{"description":"ResourceFieldSelector represents container resources (cpu, memory) and their output format","type":"object","required":["resource"],"properties":{"containerName":{"description":"Container name: required for volumes, optional for env vars","type":"string"},"divisor":{"description":"Specifies the output format of the exposed resources, defaults to \"1\"","$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"},"resource":{"description":"Required: resource to select","type":"string"}}},"io.k8s.api.core.v1.ResourceQuota":{"description":"ResourceQuota sets aggregate quota restrictions enforced per namespace","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec"},"status":{"description":"Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ResourceQuota","version":"v1"}]},"io.k8s.api.core.v1.ResourceQuotaList":{"description":"ResourceQuotaList is a list of ResourceQuota items.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ResourceQuota"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ResourceQuotaList","version":"v1"}]},"io.k8s.api.core.v1.ResourceQuotaSpec":{"description":"ResourceQuotaSpec defines the desired hard limits to enforce for Quota.","type":"object","properties":{"hard":{"description":"hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"scopeSelector":{"description":"scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.","$ref":"#/definitions/io.k8s.api.core.v1.ScopeSelector"},"scopes":{"description":"A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.ResourceQuotaStatus":{"description":"ResourceQuotaStatus defines the enforced hard limits and observed use.","type":"object","properties":{"hard":{"description":"Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"used":{"description":"Used is the current observed total usage of the resource in the namespace.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}}},"io.k8s.api.core.v1.ResourceRequirements":{"description":"ResourceRequirements describes the compute resource requirements.","type":"object","properties":{"limits":{"description":"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}},"requests":{"description":"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"}}}},"io.k8s.api.core.v1.SELinuxOptions":{"description":"SELinuxOptions are the labels to be applied to the container","type":"object","properties":{"level":{"description":"Level is SELinux level label that applies to the container.","type":"string"},"role":{"description":"Role is a SELinux role label that applies to the container.","type":"string"},"type":{"description":"Type is a SELinux type label that applies to the container.","type":"string"},"user":{"description":"User is a SELinux user label that applies to the container.","type":"string"}}},"io.k8s.api.core.v1.ScaleIOPersistentVolumeSource":{"description":"ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume","type":"object","required":["gateway","system","secretRef"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"","type":"string"},"gateway":{"description":"The host address of the ScaleIO API Gateway.","type":"string"},"protectionDomain":{"description":"The name of the ScaleIO Protection Domain for the configured storage.","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.","$ref":"#/definitions/io.k8s.api.core.v1.SecretReference"},"sslEnabled":{"description":"Flag to enable/disable SSL communication with Gateway, default false","type":"boolean"},"storageMode":{"description":"Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.","type":"string"},"storagePool":{"description":"The ScaleIO Storage Pool associated with the protection domain.","type":"string"},"system":{"description":"The name of the storage system as configured in ScaleIO.","type":"string"},"volumeName":{"description":"The name of a volume already created in the ScaleIO system that is associated with this volume source.","type":"string"}}},"io.k8s.api.core.v1.ScaleIOVolumeSource":{"description":"ScaleIOVolumeSource represents a persistent ScaleIO volume","type":"object","required":["gateway","system","secretRef"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".","type":"string"},"gateway":{"description":"The host address of the ScaleIO API Gateway.","type":"string"},"protectionDomain":{"description":"The name of the ScaleIO Protection Domain for the configured storage.","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"sslEnabled":{"description":"Flag to enable/disable SSL communication with Gateway, default false","type":"boolean"},"storageMode":{"description":"Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.","type":"string"},"storagePool":{"description":"The ScaleIO Storage Pool associated with the protection domain.","type":"string"},"system":{"description":"The name of the storage system as configured in ScaleIO.","type":"string"},"volumeName":{"description":"The name of a volume already created in the ScaleIO system that is associated with this volume source.","type":"string"}}},"io.k8s.api.core.v1.ScopeSelector":{"description":"A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.","type":"object","properties":{"matchExpressions":{"description":"A list of scope selector requirements by scope of the resources.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ScopedResourceSelectorRequirement"}}}},"io.k8s.api.core.v1.ScopedResourceSelectorRequirement":{"description":"A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.","type":"object","required":["scopeName","operator"],"properties":{"operator":{"description":"Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.","type":"string"},"scopeName":{"description":"The name of the scope that the selector applies to.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.Secret":{"description":"Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"data":{"description":"Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4","type":"object","additionalProperties":{"type":"string","format":"byte"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"stringData":{"description":"stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.","type":"object","additionalProperties":{"type":"string"}},"type":{"description":"Used to facilitate programmatic handling of secret data.","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Secret","version":"v1"}]},"io.k8s.api.core.v1.SecretEnvSource":{"description":"SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.","type":"object","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the Secret must be defined","type":"boolean"}}},"io.k8s.api.core.v1.SecretKeySelector":{"description":"SecretKeySelector selects a key of a Secret.","type":"object","required":["key"],"properties":{"key":{"description":"The key of the secret to select from. Must be a valid secret key.","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the Secret or it's key must be defined","type":"boolean"}}},"io.k8s.api.core.v1.SecretList":{"description":"SecretList is a list of Secret.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Secret"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"SecretList","version":"v1"}]},"io.k8s.api.core.v1.SecretProjection":{"description":"Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.","type":"object","properties":{"items":{"description":"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.KeyToPath"}},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the Secret or its key must be defined","type":"boolean"}}},"io.k8s.api.core.v1.SecretReference":{"description":"SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace","type":"object","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}}},"io.k8s.api.core.v1.SecretVolumeSource":{"description":"Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.","type":"object","properties":{"defaultMode":{"description":"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","type":"integer","format":"int32"},"items":{"description":"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.KeyToPath"}},"optional":{"description":"Specify whether the Secret or it's keys must be defined","type":"boolean"},"secretName":{"description":"Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret","type":"string"}}},"io.k8s.api.core.v1.SecurityContext":{"description":"SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.","type":"object","properties":{"allowPrivilegeEscalation":{"description":"AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN","type":"boolean"},"capabilities":{"description":"The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.","$ref":"#/definitions/io.k8s.api.core.v1.Capabilities"},"privileged":{"description":"Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.","type":"boolean"},"procMount":{"description":"procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.","type":"string"},"readOnlyRootFilesystem":{"description":"Whether this container has a read-only root filesystem. Default is false.","type":"boolean"},"runAsGroup":{"description":"The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.","type":"integer","format":"int64"},"runAsNonRoot":{"description":"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.","type":"boolean"},"runAsUser":{"description":"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.","type":"integer","format":"int64"},"seLinuxOptions":{"description":"The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.","$ref":"#/definitions/io.k8s.api.core.v1.SELinuxOptions"}}},"io.k8s.api.core.v1.Service":{"description":"Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ServiceSpec"},"status":{"description":"Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.core.v1.ServiceStatus"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Service","version":"v1"}]},"io.k8s.api.core.v1.ServiceAccount":{"description":"ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"automountServiceAccountToken":{"description":"AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.","type":"boolean"},"imagePullSecrets":{"description":"ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"secrets":{"description":"Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ServiceAccount","version":"v1"}]},"io.k8s.api.core.v1.ServiceAccountList":{"description":"ServiceAccountList is a list of ServiceAccount objects","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccount"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ServiceAccountList","version":"v1"}]},"io.k8s.api.core.v1.ServiceAccountTokenProjection":{"description":"ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).","type":"object","required":["path"],"properties":{"audience":{"description":"Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.","type":"string"},"expirationSeconds":{"description":"ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.","type":"integer","format":"int64"},"path":{"description":"Path is the path relative to the mount point of the file to project the token into.","type":"string"}}},"io.k8s.api.core.v1.ServiceList":{"description":"ServiceList holds a list of services.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of services","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.Service"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"ServiceList","version":"v1"}]},"io.k8s.api.core.v1.ServicePort":{"description":"ServicePort contains information on service's port.","type":"object","required":["port"],"properties":{"name":{"description":"The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.","type":"string"},"nodePort":{"description":"The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport","type":"integer","format":"int32"},"port":{"description":"The port that will be exposed by this service.","type":"integer","format":"int32"},"protocol":{"description":"The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.","type":"string"},"targetPort":{"description":"Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.core.v1.ServiceSpec":{"description":"ServiceSpec describes the attributes that a user creates on a service.","type":"object","properties":{"clusterIP":{"description":"clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies","type":"string"},"externalIPs":{"description":"externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.","type":"array","items":{"type":"string"}},"externalName":{"description":"externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.","type":"string"},"externalTrafficPolicy":{"description":"externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.","type":"string"},"healthCheckNodePort":{"description":"healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.","type":"integer","format":"int32"},"loadBalancerIP":{"description":"Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.","type":"string"},"loadBalancerSourceRanges":{"description":"If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/","type":"array","items":{"type":"string"}},"ports":{"description":"The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.ServicePort"},"x-kubernetes-list-map-keys":["port","protocol"],"x-kubernetes-list-type":"map","x-kubernetes-patch-merge-key":"port","x-kubernetes-patch-strategy":"merge"},"publishNotReadyAddresses":{"description":"publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.","type":"boolean"},"selector":{"description":"Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/","type":"object","additionalProperties":{"type":"string"}},"sessionAffinity":{"description":"Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies","type":"string"},"sessionAffinityConfig":{"description":"sessionAffinityConfig contains the configurations of session affinity.","$ref":"#/definitions/io.k8s.api.core.v1.SessionAffinityConfig"},"type":{"description":"type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types","type":"string"}}},"io.k8s.api.core.v1.ServiceStatus":{"description":"ServiceStatus represents the current status of a service.","type":"object","properties":{"loadBalancer":{"description":"LoadBalancer contains the current status of the load-balancer, if one is present.","$ref":"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus"}}},"io.k8s.api.core.v1.SessionAffinityConfig":{"description":"SessionAffinityConfig represents the configurations of session affinity.","type":"object","properties":{"clientIP":{"description":"clientIP contains the configurations of Client IP based session affinity.","$ref":"#/definitions/io.k8s.api.core.v1.ClientIPConfig"}}},"io.k8s.api.core.v1.StorageOSPersistentVolumeSource":{"description":"Represents a StorageOS persistent volume resource.","type":"object","properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.","$ref":"#/definitions/io.k8s.api.core.v1.ObjectReference"},"volumeName":{"description":"VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.","type":"string"},"volumeNamespace":{"description":"VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.","type":"string"}}},"io.k8s.api.core.v1.StorageOSVolumeSource":{"description":"Represents a StorageOS persistent volume resource.","type":"object","properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"readOnly":{"description":"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.","type":"boolean"},"secretRef":{"description":"SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.","$ref":"#/definitions/io.k8s.api.core.v1.LocalObjectReference"},"volumeName":{"description":"VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.","type":"string"},"volumeNamespace":{"description":"VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.","type":"string"}}},"io.k8s.api.core.v1.Sysctl":{"description":"Sysctl defines a kernel parameter to be set","type":"object","required":["name","value"],"properties":{"name":{"description":"Name of a property to set","type":"string"},"value":{"description":"Value of a property to set","type":"string"}}},"io.k8s.api.core.v1.TCPSocketAction":{"description":"TCPSocketAction describes an action based on opening a socket","type":"object","required":["port"],"properties":{"host":{"description":"Optional: Host name to connect to, defaults to the pod IP.","type":"string"},"port":{"description":"Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.core.v1.Taint":{"description":"The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.","type":"object","required":["key","effect"],"properties":{"effect":{"description":"Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Required. The taint key to be applied to a node.","type":"string"},"timeAdded":{"description":"TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"value":{"description":"Required. The taint value corresponding to the taint key.","type":"string"}}},"io.k8s.api.core.v1.Toleration":{"description":"The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.","type":"object","properties":{"effect":{"description":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","type":"string"},"operator":{"description":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","type":"string"},"tolerationSeconds":{"description":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","type":"integer","format":"int64"},"value":{"description":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","type":"string"}}},"io.k8s.api.core.v1.TopologySelectorLabelRequirement":{"description":"A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.","type":"object","required":["key","values"],"properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"values":{"description":"An array of string values. One value must match the label to be selected. Each entry in Values is ORed.","type":"array","items":{"type":"string"}}}},"io.k8s.api.core.v1.TopologySelectorTerm":{"description":"A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.","type":"object","properties":{"matchLabelExpressions":{"description":"A list of topology selector requirements by labels.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.TopologySelectorLabelRequirement"}}}},"io.k8s.api.core.v1.TypedLocalObjectReference":{"description":"TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.","type":"object","required":["kind","name"],"properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}}},"io.k8s.api.core.v1.Volume":{"description":"Volume represents a named volume in a pod that may be accessed by any container in the pod.","type":"object","required":["name"],"properties":{"awsElasticBlockStore":{"description":"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore","$ref":"#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"},"azureDisk":{"description":"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"},"azureFile":{"description":"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource"},"cephfs":{"description":"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime","$ref":"#/definitions/io.k8s.api.core.v1.CephFSVolumeSource"},"cinder":{"description":"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md","$ref":"#/definitions/io.k8s.api.core.v1.CinderVolumeSource"},"configMap":{"description":"ConfigMap represents a configMap that should populate this volume","$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource"},"csi":{"description":"CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).","$ref":"#/definitions/io.k8s.api.core.v1.CSIVolumeSource"},"downwardAPI":{"description":"DownwardAPI represents downward API about the pod that should populate this volume","$ref":"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource"},"emptyDir":{"description":"EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir","$ref":"#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource"},"fc":{"description":"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.","$ref":"#/definitions/io.k8s.api.core.v1.FCVolumeSource"},"flexVolume":{"description":"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.","$ref":"#/definitions/io.k8s.api.core.v1.FlexVolumeSource"},"flocker":{"description":"Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running","$ref":"#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"},"gcePersistentDisk":{"description":"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk","$ref":"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"},"gitRepo":{"description":"GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.","$ref":"#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource"},"glusterfs":{"description":"Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md","$ref":"#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource"},"hostPath":{"description":"HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath","$ref":"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"},"iscsi":{"description":"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md","$ref":"#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource"},"name":{"description":"Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"nfs":{"description":"NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs","$ref":"#/definitions/io.k8s.api.core.v1.NFSVolumeSource"},"persistentVolumeClaim":{"description":"PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","$ref":"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource"},"photonPersistentDisk":{"description":"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"},"portworxVolume":{"description":"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"},"projected":{"description":"Items for all in one resources secrets, configmaps, and downward API","$ref":"#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource"},"quobyte":{"description":"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime","$ref":"#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"},"rbd":{"description":"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md","$ref":"#/definitions/io.k8s.api.core.v1.RBDVolumeSource"},"scaleIO":{"description":"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.","$ref":"#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource"},"secret":{"description":"Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret","$ref":"#/definitions/io.k8s.api.core.v1.SecretVolumeSource"},"storageos":{"description":"StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.","$ref":"#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource"},"vsphereVolume":{"description":"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine","$ref":"#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"}}},"io.k8s.api.core.v1.VolumeDevice":{"description":"volumeDevice describes a mapping of a raw block device within a container.","type":"object","required":["name","devicePath"],"properties":{"devicePath":{"description":"devicePath is the path inside of the container that the device will be mapped to.","type":"string"},"name":{"description":"name must match the name of a persistentVolumeClaim in the pod","type":"string"}}},"io.k8s.api.core.v1.VolumeMount":{"description":"VolumeMount describes a mounting of a Volume within a container.","type":"object","required":["name","mountPath"],"properties":{"mountPath":{"description":"Path within the container at which the volume should be mounted. Must not contain ':'.","type":"string"},"mountPropagation":{"description":"mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.","type":"string"},"name":{"description":"This must match the Name of a Volume.","type":"string"},"readOnly":{"description":"Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.","type":"boolean"},"subPath":{"description":"Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).","type":"string"},"subPathExpr":{"description":"Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to \"\" (volume's root). SubPathExpr and SubPath are mutually exclusive. This field is alpha in 1.14.","type":"string"}}},"io.k8s.api.core.v1.VolumeNodeAffinity":{"description":"VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.","type":"object","properties":{"required":{"description":"Required specifies hard node constraints that must be met.","$ref":"#/definitions/io.k8s.api.core.v1.NodeSelector"}}},"io.k8s.api.core.v1.VolumeProjection":{"description":"Projection that may be projected along with other supported volume types","type":"object","properties":{"configMap":{"description":"information about the configMap data to project","$ref":"#/definitions/io.k8s.api.core.v1.ConfigMapProjection"},"downwardAPI":{"description":"information about the downwardAPI data to project","$ref":"#/definitions/io.k8s.api.core.v1.DownwardAPIProjection"},"secret":{"description":"information about the secret data to project","$ref":"#/definitions/io.k8s.api.core.v1.SecretProjection"},"serviceAccountToken":{"description":"information about the serviceAccountToken data to project","$ref":"#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection"}}},"io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource":{"description":"Represents a vSphere volume resource.","type":"object","required":["volumePath"],"properties":{"fsType":{"description":"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.","type":"string"},"storagePolicyID":{"description":"Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.","type":"string"},"storagePolicyName":{"description":"Storage Policy Based Management (SPBM) profile name.","type":"string"},"volumePath":{"description":"Path that identifies vSphere volume vmdk","type":"string"}}},"io.k8s.api.core.v1.WeightedPodAffinityTerm":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","type":"object","required":["weight","podAffinityTerm"],"properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","$ref":"#/definitions/io.k8s.api.core.v1.PodAffinityTerm"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.AllowedCSIDriver":{"description":"AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.","type":"object","required":["name"],"properties":{"name":{"description":"Name is the registered name of the CSI driver","type":"string"}}},"io.k8s.api.extensions.v1beta1.AllowedFlexVolume":{"description":"AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.","type":"object","required":["driver"],"properties":{"driver":{"description":"driver is the name of the Flexvolume driver.","type":"string"}}},"io.k8s.api.extensions.v1beta1.AllowedHostPath":{"description":"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.","type":"object","properties":{"pathPrefix":{"description":"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`","type":"string"},"readOnly":{"description":"when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.","type":"boolean"}}},"io.k8s.api.extensions.v1beta1.DaemonSet":{"description":"DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec"},"status":{"description":"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"DaemonSet","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.DaemonSetCondition":{"description":"DaemonSetCondition describes the state of a DaemonSet at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of DaemonSet condition.","type":"string"}}},"io.k8s.api.extensions.v1beta1.DaemonSetList":{"description":"DaemonSetList is a collection of daemon sets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"A list of daemon sets.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"DaemonSetList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.DaemonSetSpec":{"description":"DaemonSetSpec is the specification of a daemon set.","type":"object","required":["template"],"properties":{"minReadySeconds":{"description":"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.","type":"integer","format":"int32"},"selector":{"description":"A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"},"templateGeneration":{"description":"DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.","type":"integer","format":"int64"},"updateStrategy":{"description":"An update strategy to replace existing DaemonSet pods with new pods.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy"}}},"io.k8s.api.extensions.v1beta1.DaemonSetStatus":{"description":"DaemonSetStatus represents the current status of a daemon set.","type":"object","required":["currentNumberScheduled","numberMisscheduled","desiredNumberScheduled","numberReady"],"properties":{"collisionCount":{"description":"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a DaemonSet's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"currentNumberScheduled":{"description":"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"desiredNumberScheduled":{"description":"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberAvailable":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"numberMisscheduled":{"description":"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/","type":"integer","format":"int32"},"numberReady":{"description":"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.","type":"integer","format":"int32"},"numberUnavailable":{"description":"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)","type":"integer","format":"int32"},"observedGeneration":{"description":"The most recent generation observed by the daemon set controller.","type":"integer","format":"int64"},"updatedNumberScheduled":{"description":"The total number of nodes that are running updated daemon pod","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy":{"type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if type = \"RollingUpdate\".","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet"},"type":{"description":"Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.","type":"string"}}},"io.k8s.api.extensions.v1beta1.Deployment":{"description":"DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the Deployment.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec"},"status":{"description":"Most recently observed status of the Deployment.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"Deployment","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.DeploymentCondition":{"description":"DeploymentCondition describes the state of a deployment at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"lastUpdateTime":{"description":"The last time this condition was updated.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of deployment condition.","type":"string"}}},"io.k8s.api.extensions.v1beta1.DeploymentList":{"description":"DeploymentList is a list of Deployments.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Deployments.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Deployment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"DeploymentList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.DeploymentRollback":{"description":"DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.","type":"object","required":["name","rollbackTo"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Required: This must match the Name of a deployment.","type":"string"},"rollbackTo":{"description":"The config of this deployment rollback.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"},"updatedAnnotations":{"description":"The annotations to be updated to a deployment","type":"object","additionalProperties":{"type":"string"}}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"DeploymentRollback","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.DeploymentSpec":{"description":"DeploymentSpec is the specification of the desired behavior of the Deployment.","type":"object","required":["template"],"properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"paused":{"description":"Indicates that the deployment is paused and will not be processed by the deployment controller.","type":"boolean"},"progressDeadlineSeconds":{"description":"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"no deadline\".","type":"integer","format":"int32"},"replicas":{"description":"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.","type":"integer","format":"int32"},"revisionHistoryLimit":{"description":"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"retaining all old RelicaSets\".","type":"integer","format":"int32"},"rollbackTo":{"description":"DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"},"selector":{"description":"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"strategy":{"description":"The deployment strategy to use to replace existing pods with new ones.","x-kubernetes-patch-strategy":"retainKeys","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy"},"template":{"description":"Template describes the pods that will be created.","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.extensions.v1beta1.DeploymentStatus":{"description":"DeploymentStatus is the most recently observed status of the Deployment.","type":"object","properties":{"availableReplicas":{"description":"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.","type":"integer","format":"int32"},"collisionCount":{"description":"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a deployment's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"observedGeneration":{"description":"The generation observed by the deployment controller.","type":"integer","format":"int64"},"readyReplicas":{"description":"Total number of ready pods targeted by this deployment.","type":"integer","format":"int32"},"replicas":{"description":"Total number of non-terminated pods targeted by this deployment (their labels match the selector).","type":"integer","format":"int32"},"unavailableReplicas":{"description":"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.","type":"integer","format":"int32"},"updatedReplicas":{"description":"Total number of non-terminated pods targeted by this deployment that have the desired template spec.","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.DeploymentStrategy":{"description":"DeploymentStrategy describes how to replace existing pods with new ones.","type":"object","properties":{"rollingUpdate":{"description":"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment"},"type":{"description":"Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.","type":"string"}}},"io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions":{"description":"FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.","type":"object","properties":{"ranges":{"description":"ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate what FSGroup is used in the SecurityContext.","type":"string"}}},"io.k8s.api.extensions.v1beta1.HTTPIngressPath":{"description":"HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.","type":"object","required":["backend"],"properties":{"backend":{"description":"Backend defines the referenced service endpoint to which the traffic will be forwarded to.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"},"path":{"description":"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.","type":"string"}}},"io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue":{"description":"HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\u003chost\u003e/\u003cpath\u003e?\u003csearchpart\u003e -\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.","type":"object","required":["paths"],"properties":{"paths":{"description":"A collection of paths that map requests to backends.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath"}}}},"io.k8s.api.extensions.v1beta1.HostPortRange":{"description":"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.","type":"object","required":["min","max"],"properties":{"max":{"description":"max is the end of the range, inclusive.","type":"integer","format":"int32"},"min":{"description":"min is the start of the range, inclusive.","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.IDRange":{"description":"IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.","type":"object","required":["min","max"],"properties":{"max":{"description":"max is the end of the range, inclusive.","type":"integer","format":"int64"},"min":{"description":"min is the start of the range, inclusive.","type":"integer","format":"int64"}}},"io.k8s.api.extensions.v1beta1.IPBlock":{"description":"DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.","type":"object","required":["cidr"],"properties":{"cidr":{"description":"CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"","type":"string"},"except":{"description":"Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range","type":"array","items":{"type":"string"}}}},"io.k8s.api.extensions.v1beta1.Ingress":{"description":"Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec"},"status":{"description":"Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"Ingress","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.IngressBackend":{"description":"IngressBackend describes all endpoints for a given service and port.","type":"object","required":["serviceName","servicePort"],"properties":{"serviceName":{"description":"Specifies the name of the referenced service.","type":"string"},"servicePort":{"description":"Specifies the port of the referenced service.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.extensions.v1beta1.IngressList":{"description":"IngressList is a collection of Ingress.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Ingress.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.Ingress"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"IngressList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.IngressRule":{"description":"IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.","type":"object","properties":{"host":{"description":"Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.","type":"string"},"http":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue"}}},"io.k8s.api.extensions.v1beta1.IngressSpec":{"description":"IngressSpec describes the Ingress the user wishes to exist.","type":"object","properties":{"backend":{"description":"A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"},"rules":{"description":"A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressRule"}},"tls":{"description":"TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS"}}}},"io.k8s.api.extensions.v1beta1.IngressStatus":{"description":"IngressStatus describe the current state of the Ingress.","type":"object","properties":{"loadBalancer":{"description":"LoadBalancer contains the current status of the load-balancer.","$ref":"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus"}}},"io.k8s.api.extensions.v1beta1.IngressTLS":{"description":"IngressTLS describes the transport layer security associated with an Ingress.","type":"object","properties":{"hosts":{"description":"Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.","type":"array","items":{"type":"string"}},"secretName":{"description":"SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.","type":"string"}}},"io.k8s.api.extensions.v1beta1.NetworkPolicy":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior for this NetworkPolicy.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"NetworkPolicy","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8","type":"object","properties":{"ports":{"description":"List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort"}},"to":{"description":"List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer"}}}},"io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.","type":"object","properties":{"from":{"description":"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer"}},"ports":{"description":"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort"}}}},"io.k8s.api.extensions.v1beta1.NetworkPolicyList":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"NetworkPolicyList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.NetworkPolicyPeer":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.","type":"object","properties":{"ipBlock":{"description":"IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IPBlock"},"namespaceSelector":{"description":"Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"podSelector":{"description":"This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.extensions.v1beta1.NetworkPolicyPort":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.","type":"object","properties":{"port":{"description":"If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"protocol":{"description":"Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.","type":"string"}}},"io.k8s.api.extensions.v1beta1.NetworkPolicySpec":{"description":"DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.","type":"object","required":["podSelector"],"properties":{"egress":{"description":"List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule"}},"ingress":{"description":"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule"}},"podSelector":{"description":"Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"policyTypes":{"description":"List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8","type":"array","items":{"type":"string"}}}},"io.k8s.api.extensions.v1beta1.PodSecurityPolicy":{"description":"PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"spec defines the policy enforced.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"PodSecurityPolicy","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.PodSecurityPolicyList":{"description":"PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"PodSecurityPolicyList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec":{"description":"PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.","type":"object","required":["seLinux","runAsUser","supplementalGroups","fsGroup"],"properties":{"allowPrivilegeEscalation":{"description":"allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.","type":"boolean"},"allowedCSIDrivers":{"description":"AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value means no CSI drivers can run inline within a pod spec.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.AllowedCSIDriver"}},"allowedCapabilities":{"description":"allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.","type":"array","items":{"type":"string"}},"allowedFlexVolumes":{"description":"allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.AllowedFlexVolume"}},"allowedHostPaths":{"description":"allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.AllowedHostPath"}},"allowedProcMountTypes":{"description":"AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.","type":"array","items":{"type":"string"}},"allowedUnsafeSysctls":{"description":"allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.","type":"array","items":{"type":"string"}},"defaultAddCapabilities":{"description":"defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.","type":"array","items":{"type":"string"}},"defaultAllowPrivilegeEscalation":{"description":"defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.","type":"boolean"},"forbiddenSysctls":{"description":"forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.","type":"array","items":{"type":"string"}},"fsGroup":{"description":"fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions"},"hostIPC":{"description":"hostIPC determines if the policy allows the use of HostIPC in the pod spec.","type":"boolean"},"hostNetwork":{"description":"hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.","type":"boolean"},"hostPID":{"description":"hostPID determines if the policy allows the use of HostPID in the pod spec.","type":"boolean"},"hostPorts":{"description":"hostPorts determines which host port ranges are allowed to be exposed.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange"}},"privileged":{"description":"privileged determines if a pod can request to be run as privileged.","type":"boolean"},"readOnlyRootFilesystem":{"description":"readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.","type":"boolean"},"requiredDropCapabilities":{"description":"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.","type":"array","items":{"type":"string"}},"runAsGroup":{"description":"RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions"},"runAsUser":{"description":"runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions"},"seLinux":{"description":"seLinux is the strategy that will dictate the allowable labels that may be set.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions"},"supplementalGroups":{"description":"supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions"},"volumes":{"description":"volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.","type":"array","items":{"type":"string"}}}},"io.k8s.api.extensions.v1beta1.ReplicaSet":{"description":"DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec"},"status":{"description":"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"ReplicaSet","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.ReplicaSetCondition":{"description":"ReplicaSetCondition describes the state of a replica set at a certain point.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"The last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"A human readable message indicating details about the transition.","type":"string"},"reason":{"description":"The reason for the condition's last transition.","type":"string"},"status":{"description":"Status of the condition, one of True, False, Unknown.","type":"string"},"type":{"description":"Type of replica set condition.","type":"string"}}},"io.k8s.api.extensions.v1beta1.ReplicaSetList":{"description":"ReplicaSetList is a collection of ReplicaSets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"ReplicaSetList","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.ReplicaSetSpec":{"description":"ReplicaSetSpec is the specification of a ReplicaSet.","type":"object","properties":{"minReadySeconds":{"description":"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"},"selector":{"description":"Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"template":{"description":"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template","$ref":"#/definitions/io.k8s.api.core.v1.PodTemplateSpec"}}},"io.k8s.api.extensions.v1beta1.ReplicaSetStatus":{"description":"ReplicaSetStatus represents the current status of a ReplicaSet.","type":"object","required":["replicas"],"properties":{"availableReplicas":{"description":"The number of available replicas (ready for at least minReadySeconds) for this replica set.","type":"integer","format":"int32"},"conditions":{"description":"Represents the latest available observations of a replica set's current state.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"fullyLabeledReplicas":{"description":"The number of pods that have labels matching the labels of the pod template of the replicaset.","type":"integer","format":"int32"},"observedGeneration":{"description":"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.","type":"integer","format":"int64"},"readyReplicas":{"description":"The number of ready replicas for this replica set.","type":"integer","format":"int32"},"replicas":{"description":"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.RollbackConfig":{"description":"DEPRECATED.","type":"object","properties":{"revision":{"description":"The revision to rollback to. If set to 0, rollback to the last revision.","type":"integer","format":"int64"}}},"io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet":{"description":"Spec to control the desired behavior of daemon set rolling update.","type":"object","properties":{"maxUnavailable":{"description":"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.extensions.v1beta1.RollingUpdateDeployment":{"description":"Spec to control the desired behavior of rolling update.","type":"object","properties":{"maxSurge":{"description":"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"maxUnavailable":{"description":"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions":{"description":"RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.","type":"object","required":["rule"],"properties":{"ranges":{"description":"ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate the allowable RunAsGroup values that may be set.","type":"string"}}},"io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions":{"description":"RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.","type":"object","required":["rule"],"properties":{"ranges":{"description":"ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate the allowable RunAsUser values that may be set.","type":"string"}}},"io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions":{"description":"SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.","type":"object","required":["rule"],"properties":{"rule":{"description":"rule is the strategy that will dictate the allowable labels that may be set.","type":"string"},"seLinuxOptions":{"description":"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/","$ref":"#/definitions/io.k8s.api.core.v1.SELinuxOptions"}}},"io.k8s.api.extensions.v1beta1.Scale":{"description":"represents a scaling request for a resource.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec"},"status":{"description":"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.","$ref":"#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus"}},"x-kubernetes-group-version-kind":[{"group":"extensions","kind":"Scale","version":"v1beta1"}]},"io.k8s.api.extensions.v1beta1.ScaleSpec":{"description":"describes the attributes of a scale subresource","type":"object","properties":{"replicas":{"description":"desired number of instances for the scaled object.","type":"integer","format":"int32"}}},"io.k8s.api.extensions.v1beta1.ScaleStatus":{"description":"represents the current status of a scale subresource.","type":"object","required":["replicas"],"properties":{"replicas":{"description":"actual number of observed instances of the scaled object.","type":"integer","format":"int32"},"selector":{"description":"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors","type":"object","additionalProperties":{"type":"string"}},"targetSelector":{"description":"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors","type":"string"}}},"io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions":{"description":"SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.","type":"object","properties":{"ranges":{"description":"ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.extensions.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.","type":"string"}}},"io.k8s.api.networking.v1.IPBlock":{"description":"IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.","type":"object","required":["cidr"],"properties":{"cidr":{"description":"CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"","type":"string"},"except":{"description":"Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range","type":"array","items":{"type":"string"}}}},"io.k8s.api.networking.v1.NetworkPolicy":{"description":"NetworkPolicy describes what network traffic is allowed for a set of Pods","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior for this NetworkPolicy.","$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec"}},"x-kubernetes-group-version-kind":[{"group":"networking.k8s.io","kind":"NetworkPolicy","version":"v1"}]},"io.k8s.api.networking.v1.NetworkPolicyEgressRule":{"description":"NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8","type":"object","properties":{"ports":{"description":"List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort"}},"to":{"description":"List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer"}}}},"io.k8s.api.networking.v1.NetworkPolicyIngressRule":{"description":"NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.","type":"object","properties":{"from":{"description":"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer"}},"ports":{"description":"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort"}}}},"io.k8s.api.networking.v1.NetworkPolicyList":{"description":"NetworkPolicyList is a list of NetworkPolicy objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicy"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"networking.k8s.io","kind":"NetworkPolicyList","version":"v1"}]},"io.k8s.api.networking.v1.NetworkPolicyPeer":{"description":"NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed","type":"object","properties":{"ipBlock":{"description":"IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.","$ref":"#/definitions/io.k8s.api.networking.v1.IPBlock"},"namespaceSelector":{"description":"Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"podSelector":{"description":"This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.networking.v1.NetworkPolicyPort":{"description":"NetworkPolicyPort describes a port to allow traffic on","type":"object","properties":{"port":{"description":"The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"protocol":{"description":"The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.","type":"string"}}},"io.k8s.api.networking.v1.NetworkPolicySpec":{"description":"NetworkPolicySpec provides the specification of a NetworkPolicy","type":"object","required":["podSelector"],"properties":{"egress":{"description":"List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyEgressRule"}},"ingress":{"description":"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule"}},"podSelector":{"description":"Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"},"policyTypes":{"description":"List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8","type":"array","items":{"type":"string"}}}},"io.k8s.api.networking.v1beta1.HTTPIngressPath":{"description":"HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.","type":"object","required":["backend"],"properties":{"backend":{"description":"Backend defines the referenced service endpoint to which the traffic will be forwarded to.","$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressBackend"},"path":{"description":"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.","type":"string"}}},"io.k8s.api.networking.v1beta1.HTTPIngressRuleValue":{"description":"HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\u003chost\u003e/\u003cpath\u003e?\u003csearchpart\u003e -\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.","type":"object","required":["paths"],"properties":{"paths":{"description":"A collection of paths that map requests to backends.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.HTTPIngressPath"}}}},"io.k8s.api.networking.v1beta1.Ingress":{"description":"Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressSpec"},"status":{"description":"Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressStatus"}},"x-kubernetes-group-version-kind":[{"group":"networking.k8s.io","kind":"Ingress","version":"v1beta1"}]},"io.k8s.api.networking.v1beta1.IngressBackend":{"description":"IngressBackend describes all endpoints for a given service and port.","type":"object","required":["serviceName","servicePort"],"properties":{"serviceName":{"description":"Specifies the name of the referenced service.","type":"string"},"servicePort":{"description":"Specifies the port of the referenced service.","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}}},"io.k8s.api.networking.v1beta1.IngressList":{"description":"IngressList is a collection of Ingress.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of Ingress.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.Ingress"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"networking.k8s.io","kind":"IngressList","version":"v1beta1"}]},"io.k8s.api.networking.v1beta1.IngressRule":{"description":"IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.","type":"object","properties":{"host":{"description":"Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.","type":"string"},"http":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.HTTPIngressRuleValue"}}},"io.k8s.api.networking.v1beta1.IngressSpec":{"description":"IngressSpec describes the Ingress the user wishes to exist.","type":"object","properties":{"backend":{"description":"A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.","$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressBackend"},"rules":{"description":"A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressRule"}},"tls":{"description":"TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.networking.v1beta1.IngressTLS"}}}},"io.k8s.api.networking.v1beta1.IngressStatus":{"description":"IngressStatus describe the current state of the Ingress.","type":"object","properties":{"loadBalancer":{"description":"LoadBalancer contains the current status of the load-balancer.","$ref":"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus"}}},"io.k8s.api.networking.v1beta1.IngressTLS":{"description":"IngressTLS describes the transport layer security associated with an Ingress.","type":"object","properties":{"hosts":{"description":"Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.","type":"array","items":{"type":"string"}},"secretName":{"description":"SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.","type":"string"}}},"io.k8s.api.node.v1beta1.RuntimeClass":{"description":"RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md","type":"object","required":["handler"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"handler":{"description":"Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node \u0026 CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"node.k8s.io","kind":"RuntimeClass","version":"v1beta1"}]},"io.k8s.api.node.v1beta1.RuntimeClassList":{"description":"RuntimeClassList is a list of RuntimeClass objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.node.v1beta1.RuntimeClass"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"node.k8s.io","kind":"RuntimeClassList","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.AllowedCSIDriver":{"description":"AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.","type":"object","required":["name"],"properties":{"name":{"description":"Name is the registered name of the CSI driver","type":"string"}}},"io.k8s.api.policy.v1beta1.AllowedFlexVolume":{"description":"AllowedFlexVolume represents a single Flexvolume that is allowed to be used.","type":"object","required":["driver"],"properties":{"driver":{"description":"driver is the name of the Flexvolume driver.","type":"string"}}},"io.k8s.api.policy.v1beta1.AllowedHostPath":{"description":"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.","type":"object","properties":{"pathPrefix":{"description":"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`","type":"string"},"readOnly":{"description":"when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.","type":"boolean"}}},"io.k8s.api.policy.v1beta1.Eviction":{"description":"Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/\u003cpod name\u003e/evictions.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"deleteOptions":{"description":"DeleteOptions may be provided","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"ObjectMeta describes the pod that is being evicted.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"policy","kind":"Eviction","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.FSGroupStrategyOptions":{"description":"FSGroupStrategyOptions defines the strategy type and options used to create the strategy.","type":"object","properties":{"ranges":{"description":"ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate what FSGroup is used in the SecurityContext.","type":"string"}}},"io.k8s.api.policy.v1beta1.HostPortRange":{"description":"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.","type":"object","required":["min","max"],"properties":{"max":{"description":"max is the end of the range, inclusive.","type":"integer","format":"int32"},"min":{"description":"min is the start of the range, inclusive.","type":"integer","format":"int32"}}},"io.k8s.api.policy.v1beta1.IDRange":{"description":"IDRange provides a min/max of an allowed range of IDs.","type":"object","required":["min","max"],"properties":{"max":{"description":"max is the end of the range, inclusive.","type":"integer","format":"int64"},"min":{"description":"min is the start of the range, inclusive.","type":"integer","format":"int64"}}},"io.k8s.api.policy.v1beta1.PodDisruptionBudget":{"description":"PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired behavior of the PodDisruptionBudget.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec"},"status":{"description":"Most recently observed status of the PodDisruptionBudget.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus"}},"x-kubernetes-group-version-kind":[{"group":"policy","kind":"PodDisruptionBudget","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.PodDisruptionBudgetList":{"description":"PodDisruptionBudgetList is a collection of PodDisruptionBudgets.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"policy","kind":"PodDisruptionBudgetList","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec":{"description":"PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.","type":"object","properties":{"maxUnavailable":{"description":"An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"minAvailable":{"description":"An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".","$ref":"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"},"selector":{"description":"Label query over pods whose evictions are managed by the disruption budget.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}},"io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus":{"description":"PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.","type":"object","required":["disruptionsAllowed","currentHealthy","desiredHealthy","expectedPods"],"properties":{"currentHealthy":{"description":"current number of healthy pods","type":"integer","format":"int32"},"desiredHealthy":{"description":"minimum desired number of healthy pods","type":"integer","format":"int32"},"disruptedPods":{"description":"DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.","type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}},"disruptionsAllowed":{"description":"Number of pod disruptions that are currently allowed.","type":"integer","format":"int32"},"expectedPods":{"description":"total number of pods counted by this disruption budget","type":"integer","format":"int32"},"observedGeneration":{"description":"Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.","type":"integer","format":"int64"}}},"io.k8s.api.policy.v1beta1.PodSecurityPolicy":{"description":"PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"spec defines the policy enforced.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicySpec"}},"x-kubernetes-group-version-kind":[{"group":"policy","kind":"PodSecurityPolicy","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.PodSecurityPolicyList":{"description":"PodSecurityPolicyList is a list of PodSecurityPolicy objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is a list of schema objects.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"policy","kind":"PodSecurityPolicyList","version":"v1beta1"}]},"io.k8s.api.policy.v1beta1.PodSecurityPolicySpec":{"description":"PodSecurityPolicySpec defines the policy enforced.","type":"object","required":["seLinux","runAsUser","supplementalGroups","fsGroup"],"properties":{"allowPrivilegeEscalation":{"description":"allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.","type":"boolean"},"allowedCSIDrivers":{"description":"AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value means no CSI drivers can run inline within a pod spec.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.AllowedCSIDriver"}},"allowedCapabilities":{"description":"allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.","type":"array","items":{"type":"string"}},"allowedFlexVolumes":{"description":"allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.AllowedFlexVolume"}},"allowedHostPaths":{"description":"allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.AllowedHostPath"}},"allowedProcMountTypes":{"description":"AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.","type":"array","items":{"type":"string"}},"allowedUnsafeSysctls":{"description":"allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.","type":"array","items":{"type":"string"}},"defaultAddCapabilities":{"description":"defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.","type":"array","items":{"type":"string"}},"defaultAllowPrivilegeEscalation":{"description":"defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.","type":"boolean"},"forbiddenSysctls":{"description":"forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.","type":"array","items":{"type":"string"}},"fsGroup":{"description":"fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.FSGroupStrategyOptions"},"hostIPC":{"description":"hostIPC determines if the policy allows the use of HostIPC in the pod spec.","type":"boolean"},"hostNetwork":{"description":"hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.","type":"boolean"},"hostPID":{"description":"hostPID determines if the policy allows the use of HostPID in the pod spec.","type":"boolean"},"hostPorts":{"description":"hostPorts determines which host port ranges are allowed to be exposed.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.HostPortRange"}},"privileged":{"description":"privileged determines if a pod can request to be run as privileged.","type":"boolean"},"readOnlyRootFilesystem":{"description":"readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.","type":"boolean"},"requiredDropCapabilities":{"description":"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.","type":"array","items":{"type":"string"}},"runAsGroup":{"description":"RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions"},"runAsUser":{"description":"runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions"},"seLinux":{"description":"seLinux is the strategy that will dictate the allowable labels that may be set.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.SELinuxStrategyOptions"},"supplementalGroups":{"description":"supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.","$ref":"#/definitions/io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions"},"volumes":{"description":"volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.","type":"array","items":{"type":"string"}}}},"io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions":{"description":"RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.","type":"object","required":["rule"],"properties":{"ranges":{"description":"ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate the allowable RunAsGroup values that may be set.","type":"string"}}},"io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions":{"description":"RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.","type":"object","required":["rule"],"properties":{"ranges":{"description":"ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate the allowable RunAsUser values that may be set.","type":"string"}}},"io.k8s.api.policy.v1beta1.SELinuxStrategyOptions":{"description":"SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.","type":"object","required":["rule"],"properties":{"rule":{"description":"rule is the strategy that will dictate the allowable labels that may be set.","type":"string"},"seLinuxOptions":{"description":"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/","$ref":"#/definitions/io.k8s.api.core.v1.SELinuxOptions"}}},"io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions":{"description":"SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.","type":"object","properties":{"ranges":{"description":"ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.policy.v1beta1.IDRange"}},"rule":{"description":"rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.","type":"string"}}},"io.k8s.api.rbac.v1.AggregationRule":{"description":"AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole","type":"object","properties":{"clusterRoleSelectors":{"description":"ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}}},"io.k8s.api.rbac.v1.ClusterRole":{"description":"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.","type":"object","properties":{"aggregationRule":{"description":"AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.","$ref":"#/definitions/io.k8s.api.rbac.v1.AggregationRule"},"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"rules":{"description":"Rules holds all the PolicyRules for this ClusterRole","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.PolicyRule"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1"}]},"io.k8s.api.rbac.v1.ClusterRoleBinding":{"description":"ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.","type":"object","required":["roleRef"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"roleRef":{"description":"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.","$ref":"#/definitions/io.k8s.api.rbac.v1.RoleRef"},"subjects":{"description":"Subjects holds references to the objects the role applies to.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Subject"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1"}]},"io.k8s.api.rbac.v1.ClusterRoleBindingList":{"description":"ClusterRoleBindingList is a collection of ClusterRoleBindings","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of ClusterRoleBindings","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBindingList","version":"v1"}]},"io.k8s.api.rbac.v1.ClusterRoleList":{"description":"ClusterRoleList is a collection of ClusterRoles","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of ClusterRoles","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.ClusterRole"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleList","version":"v1"}]},"io.k8s.api.rbac.v1.PolicyRule":{"description":"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.","type":"object","required":["verbs"],"properties":{"apiGroups":{"description":"APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.","type":"array","items":{"type":"string"}},"nonResourceURLs":{"description":"NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.","type":"array","items":{"type":"string"}},"resourceNames":{"description":"ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.","type":"array","items":{"type":"string"}},"resources":{"description":"Resources is a list of resources this rule applies to. ResourceAll represents all resources.","type":"array","items":{"type":"string"}},"verbs":{"description":"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.","type":"array","items":{"type":"string"}}}},"io.k8s.api.rbac.v1.Role":{"description":"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"rules":{"description":"Rules holds all the PolicyRules for this Role","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.PolicyRule"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1"}]},"io.k8s.api.rbac.v1.RoleBinding":{"description":"RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.","type":"object","required":["roleRef"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"roleRef":{"description":"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.","$ref":"#/definitions/io.k8s.api.rbac.v1.RoleRef"},"subjects":{"description":"Subjects holds references to the objects the role applies to.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Subject"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1"}]},"io.k8s.api.rbac.v1.RoleBindingList":{"description":"RoleBindingList is a collection of RoleBindings","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of RoleBindings","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.RoleBinding"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleBindingList","version":"v1"}]},"io.k8s.api.rbac.v1.RoleList":{"description":"RoleList is a collection of Roles","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of Roles","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1.Role"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleList","version":"v1"}]},"io.k8s.api.rbac.v1.RoleRef":{"description":"RoleRef contains information that points to the role being used","type":"object","required":["apiGroup","kind","name"],"properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}}},"io.k8s.api.rbac.v1.Subject":{"description":"Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.","type":"object","required":["kind","name"],"properties":{"apiGroup":{"description":"APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.","type":"string"},"kind":{"description":"Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.","type":"string"},"name":{"description":"Name of the object being referenced.","type":"string"},"namespace":{"description":"Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.","type":"string"}}},"io.k8s.api.rbac.v1beta1.AggregationRule":{"description":"AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole","type":"object","properties":{"clusterRoleSelectors":{"description":"ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"}}}},"io.k8s.api.rbac.v1beta1.ClusterRole":{"description":"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.","type":"object","properties":{"aggregationRule":{"description":"AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.","$ref":"#/definitions/io.k8s.api.rbac.v1beta1.AggregationRule"},"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"rules":{"description":"Rules holds all the PolicyRules for this ClusterRole","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRole","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.ClusterRoleBinding":{"description":"ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.","type":"object","required":["roleRef"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"roleRef":{"description":"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.","$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"},"subjects":{"description":"Subjects holds references to the objects the role applies to.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Subject"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBinding","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.ClusterRoleBindingList":{"description":"ClusterRoleBindingList is a collection of ClusterRoleBindings","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of ClusterRoleBindings","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleBindingList","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.ClusterRoleList":{"description":"ClusterRoleList is a collection of ClusterRoles","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of ClusterRoles","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"ClusterRoleList","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.PolicyRule":{"description":"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.","type":"object","required":["verbs"],"properties":{"apiGroups":{"description":"APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.","type":"array","items":{"type":"string"}},"nonResourceURLs":{"description":"NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.","type":"array","items":{"type":"string"}},"resourceNames":{"description":"ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.","type":"array","items":{"type":"string"}},"resources":{"description":"Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.","type":"array","items":{"type":"string"}},"verbs":{"description":"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.","type":"array","items":{"type":"string"}}}},"io.k8s.api.rbac.v1beta1.Role":{"description":"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"rules":{"description":"Rules holds all the PolicyRules for this Role","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"Role","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.RoleBinding":{"description":"RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.","type":"object","required":["roleRef"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"roleRef":{"description":"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.","$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"},"subjects":{"description":"Subjects holds references to the objects the role applies to.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Subject"}}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleBinding","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.RoleBindingList":{"description":"RoleBindingList is a collection of RoleBindings","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of RoleBindings","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleBindingList","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.RoleList":{"description":"RoleList is a collection of Roles","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is a list of Roles","type":"array","items":{"$ref":"#/definitions/io.k8s.api.rbac.v1beta1.Role"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"rbac.authorization.k8s.io","kind":"RoleList","version":"v1beta1"}]},"io.k8s.api.rbac.v1beta1.RoleRef":{"description":"RoleRef contains information that points to the role being used","type":"object","required":["apiGroup","kind","name"],"properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}}},"io.k8s.api.rbac.v1beta1.Subject":{"description":"Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.","type":"object","required":["kind","name"],"properties":{"apiGroup":{"description":"APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.","type":"string"},"kind":{"description":"Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.","type":"string"},"name":{"description":"Name of the object being referenced.","type":"string"},"namespace":{"description":"Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.","type":"string"}}},"io.k8s.api.scheduling.v1.PriorityClass":{"description":"PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.","type":"object","required":["value"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"description":{"description":"description is an arbitrary string that usually provides guidelines on when this priority class should be used.","type":"string"},"globalDefault":{"description":"globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.","type":"boolean"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"value":{"description":"The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.","type":"integer","format":"int32"}},"x-kubernetes-group-version-kind":[{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1"}]},"io.k8s.api.scheduling.v1.PriorityClassList":{"description":"PriorityClassList is a collection of priority classes.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of PriorityClasses","type":"array","items":{"$ref":"#/definitions/io.k8s.api.scheduling.v1.PriorityClass"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"scheduling.k8s.io","kind":"PriorityClassList","version":"v1"}]},"io.k8s.api.scheduling.v1beta1.PriorityClass":{"description":"DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.","type":"object","required":["value"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"description":{"description":"description is an arbitrary string that usually provides guidelines on when this priority class should be used.","type":"string"},"globalDefault":{"description":"globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.","type":"boolean"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"value":{"description":"The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.","type":"integer","format":"int32"}},"x-kubernetes-group-version-kind":[{"group":"scheduling.k8s.io","kind":"PriorityClass","version":"v1beta1"}]},"io.k8s.api.scheduling.v1beta1.PriorityClassList":{"description":"PriorityClassList is a collection of priority classes.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of PriorityClasses","type":"array","items":{"$ref":"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"scheduling.k8s.io","kind":"PriorityClassList","version":"v1beta1"}]},"io.k8s.api.storage.v1.StorageClass":{"description":"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.","type":"object","required":["provisioner"],"properties":{"allowVolumeExpansion":{"description":"AllowVolumeExpansion shows whether the storage class allow volume expand","type":"boolean"},"allowedTopologies":{"description":"Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.TopologySelectorTerm"}},"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"mountOptions":{"description":"Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.","type":"array","items":{"type":"string"}},"parameters":{"description":"Parameters holds the parameters for the provisioner that should create volumes of this storage class.","type":"object","additionalProperties":{"type":"string"}},"provisioner":{"description":"Provisioner indicates the type of the provisioner.","type":"string"},"reclaimPolicy":{"description":"Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.","type":"string"},"volumeBindingMode":{"description":"VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"StorageClass","version":"v1"}]},"io.k8s.api.storage.v1.StorageClassList":{"description":"StorageClassList is a collection of storage classes.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of StorageClasses","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1.StorageClass"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"StorageClassList","version":"v1"}]},"io.k8s.api.storage.v1.VolumeAttachment":{"description":"VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.","$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSpec"},"status":{"description":"Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachmentStatus"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1"}]},"io.k8s.api.storage.v1.VolumeAttachmentList":{"description":"VolumeAttachmentList is a collection of VolumeAttachment objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of VolumeAttachments","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"VolumeAttachmentList","version":"v1"}]},"io.k8s.api.storage.v1.VolumeAttachmentSource":{"description":"VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.","type":"object","properties":{"persistentVolumeName":{"description":"Name of the persistent volume to attach.","type":"string"}}},"io.k8s.api.storage.v1.VolumeAttachmentSpec":{"description":"VolumeAttachmentSpec is the specification of a VolumeAttachment request.","type":"object","required":["attacher","source","nodeName"],"properties":{"attacher":{"description":"Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().","type":"string"},"nodeName":{"description":"The node that the volume should be attached to.","type":"string"},"source":{"description":"Source represents the volume that should be attached.","$ref":"#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSource"}}},"io.k8s.api.storage.v1.VolumeAttachmentStatus":{"description":"VolumeAttachmentStatus is the status of a VolumeAttachment request.","type":"object","required":["attached"],"properties":{"attachError":{"description":"The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1.VolumeError"},"attached":{"description":"Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","type":"boolean"},"attachmentMetadata":{"description":"Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","type":"object","additionalProperties":{"type":"string"}},"detachError":{"description":"The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1.VolumeError"}}},"io.k8s.api.storage.v1.VolumeError":{"description":"VolumeError captures an error encountered during a volume operation.","type":"object","properties":{"message":{"description":"String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.","type":"string"},"time":{"description":"Time the error was encountered.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.api.storage.v1beta1.CSIDriver":{"description":"CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSI drivers do not need to create the CSIDriver object directly. Instead they may use the cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically creates a CSIDriver object representing the driver. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. The driver name must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and alphanumerics between. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the CSI Driver.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriverSpec"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"CSIDriver","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.CSIDriverList":{"description":"CSIDriverList is a collection of CSIDriver objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of CSIDriver","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSIDriver"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"CSIDriverList","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.CSIDriverSpec":{"description":"CSIDriverSpec is the specification of a CSIDriver.","type":"object","properties":{"attachRequired":{"description":"attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.","type":"boolean"},"podInfoOnMount":{"description":"If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID)","type":"boolean"}}},"io.k8s.api.storage.v1beta1.CSINode":{"description":"CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"metadata.name must be the Kubernetes node name.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"spec is the specification of CSINode","$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINodeSpec"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"CSINode","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.CSINodeDriver":{"description":"CSINodeDriver holds information about the specification of one CSI driver installed on a node","type":"object","required":["name","nodeID"],"properties":{"name":{"description":"This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.","type":"string"},"nodeID":{"description":"nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.","type":"string"},"topologyKeys":{"description":"topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.","type":"array","items":{"type":"string"}}}},"io.k8s.api.storage.v1beta1.CSINodeList":{"description":"CSINodeList is a collection of CSINode objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"items is the list of CSINode","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINode"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"CSINodeList","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.CSINodeSpec":{"description":"CSINodeSpec holds information about the specification of all CSI drivers installed on a node","type":"object","required":["drivers"],"properties":{"drivers":{"description":"drivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.CSINodeDriver"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"}}},"io.k8s.api.storage.v1beta1.StorageClass":{"description":"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.","type":"object","required":["provisioner"],"properties":{"allowVolumeExpansion":{"description":"AllowVolumeExpansion shows whether the storage class allow volume expand","type":"boolean"},"allowedTopologies":{"description":"Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.","type":"array","items":{"$ref":"#/definitions/io.k8s.api.core.v1.TopologySelectorTerm"}},"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"mountOptions":{"description":"Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.","type":"array","items":{"type":"string"}},"parameters":{"description":"Parameters holds the parameters for the provisioner that should create volumes of this storage class.","type":"object","additionalProperties":{"type":"string"}},"provisioner":{"description":"Provisioner indicates the type of the provisioner.","type":"string"},"reclaimPolicy":{"description":"Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.","type":"string"},"volumeBindingMode":{"description":"VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"StorageClass","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.StorageClassList":{"description":"StorageClassList is a collection of storage classes.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of StorageClasses","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.StorageClass"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"StorageClassList","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.VolumeAttachment":{"description":"VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSpec"},"status":{"description":"Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentStatus"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"VolumeAttachment","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.VolumeAttachmentList":{"description":"VolumeAttachmentList is a collection of VolumeAttachment objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items is the list of VolumeAttachments","type":"array","items":{"$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"storage.k8s.io","kind":"VolumeAttachmentList","version":"v1beta1"}]},"io.k8s.api.storage.v1beta1.VolumeAttachmentSource":{"description":"VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.","type":"object","properties":{"persistentVolumeName":{"description":"Name of the persistent volume to attach.","type":"string"}}},"io.k8s.api.storage.v1beta1.VolumeAttachmentSpec":{"description":"VolumeAttachmentSpec is the specification of a VolumeAttachment request.","type":"object","required":["attacher","source","nodeName"],"properties":{"attacher":{"description":"Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().","type":"string"},"nodeName":{"description":"The node that the volume should be attached to.","type":"string"},"source":{"description":"Source represents the volume that should be attached.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSource"}}},"io.k8s.api.storage.v1beta1.VolumeAttachmentStatus":{"description":"VolumeAttachmentStatus is the status of a VolumeAttachment request.","type":"object","required":["attached"],"properties":{"attachError":{"description":"The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeError"},"attached":{"description":"Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","type":"boolean"},"attachmentMetadata":{"description":"Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.","type":"object","additionalProperties":{"type":"string"}},"detachError":{"description":"The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.","$ref":"#/definitions/io.k8s.api.storage.v1beta1.VolumeError"}}},"io.k8s.api.storage.v1beta1.VolumeError":{"description":"VolumeError captures an error encountered during a volume operation.","type":"object","properties":{"message":{"description":"String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.","type":"string"},"time":{"description":"Time the error was encountered.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition":{"description":"CustomResourceColumnDefinition specifies a column for server side printing.","type":"object","required":["name","type","JSONPath"],"properties":{"JSONPath":{"description":"JSONPath is a simple JSON path, i.e. with array notation.","type":"string"},"description":{"description":"description is a human readable description of this column.","type":"string"},"format":{"description":"format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.","type":"string"},"name":{"description":"name is a human readable name for the column.","type":"string"},"priority":{"description":"priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.","type":"integer","format":"int32"},"type":{"description":"type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion":{"description":"CustomResourceConversion describes how to convert different versions of a CR.","type":"object","required":["strategy"],"properties":{"conversionReviewVersions":{"description":"ConversionReviewVersions is an ordered list of preferred `ConversionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, conversion will fail for this object. If a persisted Webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail. Default to `['v1beta1']`.","type":"array","items":{"type":"string"}},"strategy":{"description":"`strategy` specifies the conversion strategy. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the CR. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information is needed for this option.","type":"string"},"webhookClientConfig":{"description":"`webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition":{"description":"CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format \u003c.spec.name\u003e.\u003c.spec.group\u003e.","type":"object","required":["spec"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec describes how the user wants the resources to appear","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec"},"status":{"description":"Status indicates the actual state of the CustomResourceDefinition","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus"}},"x-kubernetes-group-version-kind":[{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinition","version":"v1beta1"}]},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition":{"description":"CustomResourceDefinitionCondition contains details for the current condition of this pod.","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, one-word, CamelCase reason for the condition's last transition.","type":"string"},"status":{"description":"Status is the status of the condition. Can be True, False, Unknown.","type":"string"},"type":{"description":"Type is the type of the condition.","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList":{"description":"CustomResourceDefinitionList is a list of CustomResourceDefinition objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"description":"Items individual CustomResourceDefinitions","type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apiextensions.k8s.io","kind":"CustomResourceDefinitionList","version":"v1beta1"}]},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames":{"description":"CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition","type":"object","required":["plural","kind"],"properties":{"categories":{"description":"Categories is a list of grouped resources custom resources belong to (e.g. 'all')","type":"array","items":{"type":"string"}},"kind":{"description":"Kind is the serialized kind of the resource. It is normally CamelCase and singular.","type":"string"},"listKind":{"description":"ListKind is the serialized kind of the list for this resource. Defaults to \u003ckind\u003eList.","type":"string"},"plural":{"description":"Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.","type":"string"},"shortNames":{"description":"ShortNames are short names for the resource. It must be all lowercase.","type":"array","items":{"type":"string"}},"singular":{"description":"Singular is the singular name of the resource. It must be all lowercase Defaults to lowercased \u003ckind\u003e","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec":{"description":"CustomResourceDefinitionSpec describes how a user wants their resource to appear","type":"object","required":["group","names","scope"],"properties":{"additionalPrinterColumns":{"description":"AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Optional, the global columns for all versions. Top-level and per-version columns are mutually exclusive.","type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition"}},"conversion":{"description":"`conversion` defines conversion settings for the CRD.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion"},"group":{"description":"Group is the group this resource belongs in","type":"string"},"names":{"description":"Names are the names used to describe this custom resource","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"},"scope":{"description":"Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced","type":"string"},"subresources":{"description":"Subresources describes the subresources for CustomResource Optional, the global subresources for all versions. Top-level and per-version subresources are mutually exclusive.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources"},"validation":{"description":"Validation describes the validation methods for CustomResources Optional, the global validation schema for all versions. Top-level and per-version schemas are mutually exclusive.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation"},"version":{"description":"Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.","type":"string"},"versions":{"description":"Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.","type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion"}}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus":{"description":"CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition","type":"object","required":["conditions","acceptedNames","storedVersions"],"properties":{"acceptedNames":{"description":"AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"},"conditions":{"description":"Conditions indicate state for particular aspects of a CustomResourceDefinition","type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition"}},"storedVersions":{"description":"StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.","type":"array","items":{"type":"string"}}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion":{"description":"CustomResourceDefinitionVersion describes a version for CRD.","type":"object","required":["name","served","storage"],"properties":{"additionalPrinterColumns":{"description":"AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Top-level and per-version columns are mutually exclusive. Per-version columns must not all be set to identical values (top-level columns should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. NOTE: CRDs created prior to 1.13 populated the top-level additionalPrinterColumns field by default. To apply an update that changes to per-version additionalPrinterColumns, the top-level additionalPrinterColumns field must be explicitly set to null","type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition"}},"name":{"description":"Name is the version name, e.g. “v1â€, “v2beta1â€, etc.","type":"string"},"schema":{"description":"Schema describes the schema for CustomResource used in validation, pruning, and defaulting. Top-level and per-version schemas are mutually exclusive. Per-version schemas must not all be set to identical values (top-level validation schema should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation"},"served":{"description":"Served is a flag enabling/disabling this version from being served via REST APIs","type":"boolean"},"storage":{"description":"Storage flags the version as storage version. There must be exactly one flagged as storage version.","type":"boolean"},"subresources":{"description":"Subresources describes the subresources for CustomResource Top-level and per-version subresources are mutually exclusive. Per-version subresources must not all be set to identical values (top-level subresources should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale":{"description":"CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.","type":"object","required":["specReplicasPath","statusReplicasPath"],"properties":{"labelSelectorPath":{"description":"LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.","type":"string"},"specReplicasPath":{"description":"SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.","type":"string"},"statusReplicasPath":{"description":"StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus":{"description":"CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza","type":"object"},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources":{"description":"CustomResourceSubresources defines the status and scale subresources for CustomResources.","type":"object","properties":{"scale":{"description":"Scale denotes the scale subresource for CustomResources","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale"},"status":{"description":"Status denotes the status subresource for CustomResources","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation":{"description":"CustomResourceValidation is a list of validation methods for CustomResources.","type":"object","properties":{"openAPIV3Schema":{"description":"OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation":{"description":"ExternalDocumentation allows referencing an external resource for extended documentation.","type":"object","properties":{"description":{"type":"string"},"url":{"type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON":{"description":"JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil."},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps":{"description":"JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).","type":"object","properties":{"$ref":{"type":"string"},"$schema":{"type":"string"},"additionalItems":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool"},"additionalProperties":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool"},"allOf":{"type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"anyOf":{"type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"default":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON"},"definitions":{"type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"dependencies":{"type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray"}},"description":{"type":"string"},"enum":{"type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON"}},"example":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON"},"exclusiveMaximum":{"type":"boolean"},"exclusiveMinimum":{"type":"boolean"},"externalDocs":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation"},"format":{"type":"string"},"id":{"type":"string"},"items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray"},"maxItems":{"type":"integer","format":"int64"},"maxLength":{"type":"integer","format":"int64"},"maxProperties":{"type":"integer","format":"int64"},"maximum":{"type":"number","format":"double"},"minItems":{"type":"integer","format":"int64"},"minLength":{"type":"integer","format":"int64"},"minProperties":{"type":"integer","format":"int64"},"minimum":{"type":"number","format":"double"},"multipleOf":{"type":"number","format":"double"},"not":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"},"nullable":{"type":"boolean"},"oneOf":{"type":"array","items":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"pattern":{"type":"string"},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"properties":{"type":"object","additionalProperties":{"$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"}},"required":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"type":{"type":"string"},"uniqueItems":{"type":"boolean"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray":{"description":"JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes."},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool":{"description":"JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property."},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray":{"description":"JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array."},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference":{"description":"ServiceReference holds a reference to Service.legacy.k8s.io","type":"object","required":["namespace","name"],"properties":{"name":{"description":"`name` is the name of the service. Required","type":"string"},"namespace":{"description":"`namespace` is the namespace of the service. Required","type":"string"},"path":{"description":"`path` is an optional URL path which will be sent in any request to this service.","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig":{"description":"WebhookClientConfig contains the information to make a TLS connection with the webhook. It has the same field as admissionregistration.v1beta1.WebhookClientConfig.","type":"object","properties":{"caBundle":{"description":"`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.","type":"string","format":"byte"},"service":{"description":"`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.","$ref":"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference"},"url":{"description":"`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.","type":"string"}}},"io.k8s.apimachinery.pkg.api.resource.Quantity":{"description":"Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.","type":"string"},"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup":{"description":"APIGroup contains the name, the supported versions, and the preferred version of a group.","type":"object","required":["name","versions"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"name is the name of the group.","type":"string"},"preferredVersion":{"description":"preferredVersion is the version preferred by the API server, which probably is the storage version.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery"},"serverAddressByClientCIDRs":{"description":"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR"}},"versions":{"description":"versions are the versions supported in this group.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery"}}},"x-kubernetes-group-version-kind":[{"group":"","kind":"APIGroup","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList":{"description":"APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.","type":"object","required":["groups"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"groups":{"description":"groups is a list of APIGroup.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"APIGroupList","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.APIResource":{"description":"APIResource specifies the name of a resource and whether it is namespaced.","type":"object","required":["name","singularName","namespaced","kind","verbs"],"properties":{"categories":{"description":"categories is a list of the grouped resources this resource belongs to (e.g. 'all')","type":"array","items":{"type":"string"}},"group":{"description":"group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".","type":"string"},"kind":{"description":"kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')","type":"string"},"name":{"description":"name is the plural name of the resource.","type":"string"},"namespaced":{"description":"namespaced indicates if a resource is namespaced or not.","type":"boolean"},"shortNames":{"description":"shortNames is a list of suggested short names of the resource.","type":"array","items":{"type":"string"}},"singularName":{"description":"singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.","type":"string"},"storageVersionHash":{"description":"The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.","type":"string"},"verbs":{"description":"verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)","type":"array","items":{"type":"string"}},"version":{"description":"version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList":{"description":"APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.","type":"object","required":["groupVersion","resources"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"groupVersion":{"description":"groupVersion is the group and version this APIResourceList is for.","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"resources":{"description":"resources contains the name of the resources and if they are namespaced.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource"}}},"x-kubernetes-group-version-kind":[{"group":"","kind":"APIResourceList","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions":{"description":"APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.","type":"object","required":["versions","serverAddressByClientCIDRs"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"serverAddressByClientCIDRs":{"description":"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR"}},"versions":{"description":"versions are the api versions that are available.","type":"array","items":{"type":"string"}}},"x-kubernetes-group-version-kind":[{"group":"","kind":"APIVersions","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions":{"description":"DeleteOptions may be provided when deleting an API object.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"dryRun":{"description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","type":"array","items":{"type":"string"}},"gracePeriodSeconds":{"description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","type":"integer","format":"int64"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"orphanDependents":{"description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","type":"boolean"},"preconditions":{"description":"Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions"},"propagationPolicy":{"description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"DeleteOptions","version":"v1"},{"group":"admission.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"admissionregistration.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"apiextensions.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"apiregistration.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"apiregistration.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"apps","kind":"DeleteOptions","version":"v1"},{"group":"apps","kind":"DeleteOptions","version":"v1beta1"},{"group":"apps","kind":"DeleteOptions","version":"v1beta2"},{"group":"authentication.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"authorization.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"autoscaling","kind":"DeleteOptions","version":"v1"},{"group":"autoscaling","kind":"DeleteOptions","version":"v2beta1"},{"group":"autoscaling","kind":"DeleteOptions","version":"v2beta2"},{"group":"batch","kind":"DeleteOptions","version":"v1"},{"group":"batch","kind":"DeleteOptions","version":"v1beta1"},{"group":"batch","kind":"DeleteOptions","version":"v2alpha1"},{"group":"certificates.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"coordination.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"coordination.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"extensions","kind":"DeleteOptions","version":"v1beta1"},{"group":"networking.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"networking.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"node.k8s.io","kind":"DeleteOptions","version":"v1alpha1"},{"group":"node.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"policy","kind":"DeleteOptions","version":"v1beta1"},{"group":"rbac.authorization.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"rbac.authorization.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"scheduling.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"scheduling.k8s.io","kind":"DeleteOptions","version":"v1beta1"},{"group":"storage.k8s.io","kind":"DeleteOptions","version":"v1"},{"group":"storage.k8s.io","kind":"DeleteOptions","version":"v1beta1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.Fields":{"description":"Fields stores a set of fields in a data structure like a Trie. To understand how this is used, see: https://github.com/kubernetes-sigs/structured-merge-diff","type":"object"},"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery":{"description":"GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.","type":"object","required":["groupVersion","version"],"properties":{"groupVersion":{"description":"groupVersion specifies the API group and version in the form \"group/version\"","type":"string"},"version":{"description":"version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Initializer":{"description":"Initializer is information about an initializer that has not yet completed.","type":"object","required":["name"],"properties":{"name":{"description":"name of the process that is responsible for initializing this object.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Initializers":{"description":"Initializers tracks the progress of initialization.","type":"object","required":["pending"],"properties":{"pending":{"description":"Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializer"},"x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy":"merge"},"result":{"description":"If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector":{"description":"A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.","type":"object","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement"}},"matchLabels":{"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object","additionalProperties":{"type":"string"}}}},"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","type":"object","required":["key","operator"],"properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string","x-kubernetes-patch-merge-key":"key","x-kubernetes-patch-strategy":"merge"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","type":"array","items":{"type":"string"}}}},"io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta":{"description":"ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.","type":"object","properties":{"continue":{"description":"continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.","type":"string"},"resourceVersion":{"description":"String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency","type":"string"},"selfLink":{"description":"selfLink is a URL representing this object. Populated by the system. Read-only.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry":{"description":"ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.","type":"string"},"fields":{"description":"Fields identifies a set of fields.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Fields"},"manager":{"description":"Manager is an identifier of the workflow managing these fields.","type":"string"},"operation":{"description":"Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.","type":"string"},"time":{"description":"Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime":{"description":"MicroTime is version of Time with microsecond level precision.","type":"string","format":"date-time"},"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta":{"description":"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.","type":"object","properties":{"annotations":{"description":"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations","type":"object","additionalProperties":{"type":"string"}},"clusterName":{"description":"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.","type":"string"},"creationTimestamp":{"description":"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"deletionGracePeriodSeconds":{"description":"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.","type":"integer","format":"int64"},"deletionTimestamp":{"description":"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"finalizers":{"description":"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.","type":"array","items":{"type":"string"},"x-kubernetes-patch-strategy":"merge"},"generateName":{"description":"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency","type":"string"},"generation":{"description":"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.","type":"integer","format":"int64"},"initializers":{"description":"An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n\nDEPRECATED - initializers are an alpha field and will be removed in v1.15.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers"},"labels":{"description":"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels","type":"object","additionalProperties":{"type":"string"}},"managedFields":{"description":"ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.\n\nThis field is alpha and can be changed or removed without notice.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry"}},"name":{"description":"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"},"namespace":{"description":"Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces","type":"string"},"ownerReferences":{"description":"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference"},"x-kubernetes-patch-merge-key":"uid","x-kubernetes-patch-strategy":"merge"},"resourceVersion":{"description":"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency","type":"string"},"selfLink":{"description":"SelfLink is a URL representing this object. Populated by the system. Read-only.","type":"string"},"uid":{"description":"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference":{"description":"OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.","type":"object","required":["apiVersion","kind","name","uid"],"properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"blockOwnerDeletion":{"description":"If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.","type":"boolean"},"controller":{"description":"If true, this reference points to the managing controller.","type":"boolean"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"},"uid":{"description":"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Patch":{"description":"Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.","type":"object"},"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions":{"description":"Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.","type":"object","properties":{"resourceVersion":{"description":"Specifies the target ResourceVersion","type":"string"},"uid":{"description":"Specifies the target UID.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR":{"description":"ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.","type":"object","required":["clientCIDR","serverAddress"],"properties":{"clientCIDR":{"description":"The CIDR with which clients can match their IP to figure out the server address that they should use.","type":"string"},"serverAddress":{"description":"Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Status":{"description":"Status is a return value for calls that don't return other objects.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"code":{"description":"Suggested HTTP return code for this status, 0 if not set.","type":"integer","format":"int32"},"details":{"description":"Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"message":{"description":"A human-readable description of the status of this operation.","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"},"reason":{"description":"A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.","type":"string"},"status":{"description":"Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Status","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause":{"description":"StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.","type":"object","properties":{"field":{"description":"The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"","type":"string"},"message":{"description":"A human-readable description of the cause of the error. This field may be presented as-is to a reader.","type":"string"},"reason":{"description":"A machine-readable description of the cause of the error. If this value is empty there is no information available.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails":{"description":"StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.","type":"object","properties":{"causes":{"description":"The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.","type":"array","items":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause"}},"group":{"description":"The group attribute of the resource associated with the status StatusReason.","type":"string"},"kind":{"description":"The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).","type":"string"},"retryAfterSeconds":{"description":"If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.","type":"integer","format":"int32"},"uid":{"description":"UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Time":{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","type":"string","format":"date-time"},"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent":{"description":"Event represents a single event to a watched resource.","type":"object","required":["type","object"],"properties":{"object":{"description":"Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.","$ref":"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"},"type":{"type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"WatchEvent","version":"v1"},{"group":"admission.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"admissionregistration.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"apiextensions.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"apiregistration.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"apiregistration.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"apps","kind":"WatchEvent","version":"v1"},{"group":"apps","kind":"WatchEvent","version":"v1beta1"},{"group":"apps","kind":"WatchEvent","version":"v1beta2"},{"group":"authentication.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"authorization.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"autoscaling","kind":"WatchEvent","version":"v1"},{"group":"autoscaling","kind":"WatchEvent","version":"v2beta1"},{"group":"autoscaling","kind":"WatchEvent","version":"v2beta2"},{"group":"batch","kind":"WatchEvent","version":"v1"},{"group":"batch","kind":"WatchEvent","version":"v1beta1"},{"group":"batch","kind":"WatchEvent","version":"v2alpha1"},{"group":"certificates.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"coordination.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"coordination.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"extensions","kind":"WatchEvent","version":"v1beta1"},{"group":"networking.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"networking.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"node.k8s.io","kind":"WatchEvent","version":"v1alpha1"},{"group":"node.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"policy","kind":"WatchEvent","version":"v1beta1"},{"group":"rbac.authorization.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"rbac.authorization.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"scheduling.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"scheduling.k8s.io","kind":"WatchEvent","version":"v1beta1"},{"group":"storage.k8s.io","kind":"WatchEvent","version":"v1"},{"group":"storage.k8s.io","kind":"WatchEvent","version":"v1beta1"}]},"io.k8s.apimachinery.pkg.runtime.RawExtension":{"description":"RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this: {\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)","type":"object","required":["Raw"],"properties":{"Raw":{"description":"Raw is the underlying serialization of this object.","type":"string","format":"byte"}}},"io.k8s.apimachinery.pkg.util.intstr.IntOrString":{"description":"IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.","type":"string","format":"int-or-string"},"io.k8s.apimachinery.pkg.version.Info":{"description":"Info contains versioning information. how we'll want to distribute that information.","type":"object","required":["major","minor","gitVersion","gitCommit","gitTreeState","buildDate","goVersion","compiler","platform"],"properties":{"buildDate":{"type":"string"},"compiler":{"type":"string"},"gitCommit":{"type":"string"},"gitTreeState":{"type":"string"},"gitVersion":{"type":"string"},"goVersion":{"type":"string"},"major":{"type":"string"},"minor":{"type":"string"},"platform":{"type":"string"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService":{"description":"APIService represents a server for a particular GroupVersion. Name must be \"version.group\".","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec contains information for locating and communicating with a server","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec"},"status":{"description":"Status contains derived information about an API server","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus"}},"x-kubernetes-group-version-kind":[{"group":"apiregistration.k8s.io","kind":"APIService","version":"v1"}]},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition":{"description":"APIServiceCondition describes the state of an APIService at a particular point","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, one-word, CamelCase reason for the condition's last transition.","type":"string"},"status":{"description":"Status is the status of the condition. Can be True, False, Unknown.","type":"string"},"type":{"description":"Type is the type of the condition.","type":"string"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList":{"description":"APIServiceList is a list of APIService objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apiregistration.k8s.io","kind":"APIServiceList","version":"v1"}]},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec":{"description":"APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.","type":"object","required":["service","groupPriorityMinimum","versionPriority"],"properties":{"caBundle":{"description":"CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.","type":"string","format":"byte"},"group":{"description":"Group is the API group name this server hosts","type":"string"},"groupPriorityMinimum":{"description":"GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s","type":"integer","format":"int32"},"insecureSkipTLSVerify":{"description":"InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.","type":"boolean"},"service":{"description":"Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference"},"version":{"description":"Version is the API version this server hosts. For example, \"v1\"","type":"string"},"versionPriority":{"description":"VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.","type":"integer","format":"int32"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus":{"description":"APIServiceStatus contains derived information about an API server","type":"object","properties":{"conditions":{"description":"Current service state of apiService.","type":"array","items":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference":{"description":"ServiceReference holds a reference to Service.legacy.k8s.io","type":"object","properties":{"name":{"description":"Name is the name of the service","type":"string"},"namespace":{"description":"Namespace is the namespace of the service","type":"string"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService":{"description":"APIService represents a server for a particular GroupVersion. Name must be \"version.group\".","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"description":"Spec contains information for locating and communicating with a server","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec"},"status":{"description":"Status contains derived information about an API server","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus"}},"x-kubernetes-group-version-kind":[{"group":"apiregistration.k8s.io","kind":"APIService","version":"v1beta1"}]},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition":{"description":"APIServiceCondition describes the state of an APIService at a particular point","type":"object","required":["type","status"],"properties":{"lastTransitionTime":{"description":"Last time the condition transitioned from one status to another.","$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, one-word, CamelCase reason for the condition's last transition.","type":"string"},"status":{"description":"Status is the status of the condition. Can be True, False, Unknown.","type":"string"},"type":{"description":"Type is the type of the condition.","type":"string"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList":{"description":"APIServiceList is a list of APIService objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}},"x-kubernetes-group-version-kind":[{"group":"apiregistration.k8s.io","kind":"APIServiceList","version":"v1beta1"}]},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec":{"description":"APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.","type":"object","required":["service","groupPriorityMinimum","versionPriority"],"properties":{"caBundle":{"description":"CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.","type":"string","format":"byte"},"group":{"description":"Group is the API group name this server hosts","type":"string"},"groupPriorityMinimum":{"description":"GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s","type":"integer","format":"int32"},"insecureSkipTLSVerify":{"description":"InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.","type":"boolean"},"service":{"description":"Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.","$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference"},"version":{"description":"Version is the API version this server hosts. For example, \"v1\"","type":"string"},"versionPriority":{"description":"VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA \u003e beta \u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.","type":"integer","format":"int32"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus":{"description":"APIServiceStatus contains derived information about an API server","type":"object","properties":{"conditions":{"description":"Current service state of apiService.","type":"array","items":{"$ref":"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition"},"x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"}}},"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference":{"description":"ServiceReference holds a reference to Service.legacy.k8s.io","type":"object","properties":{"name":{"description":"Name is the name of the service","type":"string"},"namespace":{"description":"Namespace is the namespace of the service","type":"string"}}}},"securityDefinitions":{"BearerToken":{"description":"Bearer Token authentication","type":"apiKey","name":"authorization","in":"header"}},"security":[{"BearerToken":[]}]} \ No newline at end of file diff --git a/vendor/k8s.io/kubernetes/openapi.pb b/vendor/k8s.io/kubernetes/openapi.pb index b1a50923ed8..ca1b7d47e12 100644 --- a/vendor/k8s.io/kubernetes/openapi.pb +++ b/vendor/k8s.io/kubernetes/openapi.pb @@ -1,15 +1,244 @@ 2.0 -Kubernetesv0.0.0B ÷vÊ -/api/À½ -coreget available API versions*getCoreAPIVersions2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJl -Q -200J -H -OKB -@ ->#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions +Kubernetesv0.0.0Bò•‹‘ +J/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status‚ +apiextensions_v1beta15read status of the specified CustomResourceDefinition*6readApiextensionsV1beta1CustomResourceDefinitionStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J’ +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +¼ + +apiextensions_v1beta18replace status of the specified CustomResourceDefinition*9replaceApiextensionsV1beta1CustomResourceDefinitionStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bz +x +vbodybody *f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition +| +201u +s +Createdh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jq +x-kubernetes-group-version-kindNLversion: v1beta1 +group: apiextensions.k8s.io +kind: CustomResourceDefinition +Bã +apiextensions_v1beta1Apartially update status of the specified CustomResourceDefinition*7patchApiextensionsV1beta1CustomResourceDefinitionStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J’ +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +JE +CA"?path$name of the CustomResourceDefinition"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string é$ +E/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name}Ÿ$ú +apps_v1¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? +=;"9pathname of the ControllerRevision"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‰ +#/apis/rbac.authorization.k8s.io/v1/áÞ +rbacAuthorization_v1get available resources*"getRbacAuthorizationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps¢# +5/apis/rbac.authorization.k8s.io/v1/watch/rolebindingsè"æ +rbacAuthorization_v1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*7watchRbacAuthorizationV1RoleBindingListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ô# +&/api/v1/watch/persistentvolumes/{name}©#è +core_v1·watch changes to an object of kind PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J= +;9"7pathname of the PersistentVolume"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ô" +-/apis/storage.k8s.io/v1beta1/watch/csidriversÂ"À +storage_v1beta1uwatch individual changes to a list of CSIDriver. deprecated: use the 'watch' parameter with a list operation instead.* watchStorageV1beta1CSIDriverList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ê + /apis/apps/º· +appsget information of a group*getAppsAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup  401  @@ -25,184 +254,21 @@ B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList  401  - UnauthorizedRhttpsà" -/api/v1/componentstatusesÂ"Ç -core_v1$list objects of kind ComponentStatus*listCoreV1ComponentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb + UnauthorizedRhttpsÅ# +0/api/v1/watch/namespaces/{namespace}/limitranges#¬ +core_v1vwatch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.*#watchCoreV1NamespacedLimitRangeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.core.v1.ComponentStatusList +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jQ -x-kubernetes-group-version-kind.,group: "" -kind: ComponentStatus -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¦ - /api/v1/componentstatuses/{name}ï -core_v1"read the specified ComponentStatus*readCoreV1ComponentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.core.v1.ComponentStatus - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jQ -x-kubernetes-group-version-kind.,group: "" -kind: ComponentStatus -version: v1 -J< -:8"6pathname of the ComponentStatus"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ú" -/api/v1/configmapsÃ"È -core_v1'list or watch objects of kind ConfigMap*#listCoreV1ConfigMapForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.ConfigMapList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ù" -/api/v1/endpointsÃ"È -core_v1'list or watch objects of kind Endpoints*#listCoreV1EndpointsForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.EndpointsList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Æ" -/api/v1/events³"¸ -core_v1#list or watch objects of kind Event*listCoreV1EventForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.EventList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ß" -/api/v1/limitrangesÇ"Ì -core_v1(list or watch objects of kind LimitRange*$listCoreV1LimitRangeForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.core.v1.LimitRangeList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist jL x-kubernetes-group-version-kind)'group: "" kind: LimitRange @@ -211,8 +277,81 @@ J ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Õ# +4/api/v1/watch/namespaces/{namespace}/serviceaccountsœ#¸ +core_v1zwatch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.*'watchCoreV1NamespacedServiceAccountList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jP +x-kubernetes-group-version-kind-+group: "" +kind: ServiceAccount +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú" +/api/v1/watch/persistentvolumes¶"´ +core_v1|watch individual changes to a list of PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1PersistentVolumeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -225,14 +364,114 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean «) -/api/v1/namespaces”)æ -core_v1'list or watch objects of kind Namespace*listCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù +/apis/coordination.k8s.io/v1/×Ô +coordination_v1get available resources*getCoordinationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsì +I/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/statusž£ +extensions_v1beta1'read status of the specified ReplicaSet*/readExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetRhttpsj +x-kubernetes-actionget +jY +x-kubernetes-group-version-kind64version: v1beta1 +group: extensions +kind: ReplicaSet +‚ +extensions_v1beta1*replace status of the specified ReplicaSet*2replaceExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J´ + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetRhttpsj +x-kubernetes-actionput +jY +x-kubernetes-group-version-kind64version: v1beta1 +group: extensions +kind: ReplicaSet +B„ +extensions_v1beta13partially update status of the specified ReplicaSet*0patchExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jd + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetRhttpsj +x-kubernetes-actionpatch +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ˆ$ +kind: PriorityClass +version: v1beta1 +group: scheduling.k8s.io +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -240,62 +479,509 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.NamespaceList +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: +86"4pathname of the PriorityClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean + +-/api/v1/namespaces/{namespace}/secrets/{name}Û*§ +core_v1read the specified Secret*readCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JU +: +2003 +1 +OK+ +) +'#/definitions/io.k8s.api.core.v1.Secret + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jH +x-kubernetes-group-version-kind%#group: "" +kind: Secret +version: v1 +– +core_v1replace the specified Secret*replaceCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B= +; +9bodybody *) +'#/definitions/io.k8s.api.core.v1.SecretBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J– +: +2003 +1 +OK+ +) +'#/definitions/io.k8s.api.core.v1.Secret +? +2018 +6 +Created+ +) +'#/definitions/io.k8s.api.core.v1.Secret + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jH +x-kubernetes-group-version-kind%#version: v1 +group: "" +kind: Secret +*ô +core_v1delete a Secret*deleteCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jH +x-kubernetes-group-version-kind%#group: "" +kind: Secret +version: v1 +B¶ +core_v1%partially update the specified Secret*patchCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JU +: +2003 +1 +OK+ +) +'#/definitions/io.k8s.api.core.v1.Secret + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: "" +kind: Secret +version: v1 +j +x-kubernetes-actionpatch +J3 +1/"-pathname of the Secret"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ã! + /api/v1/pods²!° +core_v1!list or watch objects of kind Pod*listCoreV1PodForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JV + +401 + + Unauthorized +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.PodListRhttpsj +x-kubernetes-actionlist +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î! +/apis/apps/v1/replicasetsÐ!Î +apps_v1(list or watch objects of kind ReplicaSet*$listAppsV1ReplicaSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1.ReplicaSetList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -"½ -core_v1create a Namespace*createCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.NamespaceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Já -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Namespace -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.Namespace -C -202< -: -Accepted. -, -*#/definitions/io.k8s.api.core.v1.Namespace +jN +x-kubernetes-group-version-kind+)version: v1 +group: apps +kind: ReplicaSet +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean í# +>/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisionsª#Æ +apps_v1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*+watchAppsV1NamespacedControllerRevisionList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace + UnauthorizedRhttpsjV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision version: v1 -J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string µ -'/api/v1/namespaces/{namespace}/bindings‰ "˜ +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û" +(/apis/extensions/v1beta1/watch/ingressesÎ"Ì +extensions_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*1watchExtensionsV1beta1IngressListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean í$ +H/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name} $ƒ +extensions_v1beta1±watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ê+ +//apis/node.k8s.io/v1beta1/runtimeclasses/{name}¶+Ò + node_v1beta1read the specified RuntimeClass*readNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J` + +401 + + Unauthorized +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClassRhttpsj +x-kubernetes-actionget +j\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +× + node_v1beta1"replace the specified RuntimeClass*replaceNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BH +F +Dbodybody *4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¬ +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass +J +201C +A +Created6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j\ +x-kubernetes-group-version-kind97version: v1beta1 +group: node.k8s.io +kind: RuntimeClass +*” + node_v1beta1delete a RuntimeClass*deleteNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j\ +x-kubernetes-group-version-kind97kind: RuntimeClass +version: v1beta1 +group: node.k8s.io +Bá + node_v1beta1+partially update the specified RuntimeClass*patchNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j\ +x-kubernetes-group-version-kind97version: v1beta1 +group: node.k8s.io +kind: RuntimeClass +J9 +75"3pathname of the RuntimeClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‘, +0/apis/storage.k8s.io/v1/volumeattachments/{name}Ü+Ú + +storage_v1#read the specified VolumeAttachment*readStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j^ +x-kubernetes-group-version-kind;9version: v1 +group: storage.k8s.io +kind: VolumeAttachment +ã + +storage_v1&replace the specified VolumeAttachment* replaceStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J° +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +j +x-kubernetes-actionput +*š + +storage_v1delete a VolumeAttachment*deleteStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9kind: VolumeAttachment +version: v1 +group: storage.k8s.io +j +x-kubernetes-action delete +Bé + +storage_v1/partially update the specified VolumeAttachment*patchStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +j +x-kubernetes-actionpatch +J= +;9"7pathname of the VolumeAttachment"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ´ + +'/api/v1/namespaces/{namespace}/bindingsˆ +"˜ core_v1create a Binding*createCoreV1NamespacedBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> < :bodybody ** @@ -321,2189 +1007,21 @@ A  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -jI + UnauthorizedRhttpsjI x-kubernetes-group-version-kind&$group: "" kind: Binding version: v1 +j +x-kubernetes-actionpost Jž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean J` +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÓJ -)/api/v1/namespaces/{namespace}/configmaps¥Jð -core_v1'list or watch objects of kind ConfigMap*listCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.ConfigMapList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -"Ç -core_v1create a ConfigMap*createCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.ConfigMapBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Já -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap -C -202< -: -Accepted. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -*¹ -core_v1delete collection of ConfigMap*)deleteCoreV1CollectionNamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï# -0/api/v1/namespaces/{namespace}/configmaps/{name}š#Ø -core_v1read the specified ConfigMap*readCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 - -core_v1replace the specified ConfigMap* replaceCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.ConfigMapBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -*ý -core_v1delete a ConfigMap*deleteCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -B¿ -core_v1(partially update the specified ConfigMap*patchCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -J6 -42"0pathname of the ConfigMap"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÐJ -(/api/v1/namespaces/{namespace}/endpoints£Jð -core_v1'list or watch objects of kind Endpoints*listCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.EndpointsList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -"Å -core_v1create Endpoints*createCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.EndpointsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Já -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Endpoints -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.Endpoints -C -202< -: -Accepted. -, -*#/definitions/io.k8s.api.core.v1.Endpoints - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -*¹ -core_v1delete collection of Endpoints*)deleteCoreV1CollectionNamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ì# -//api/v1/namespaces/{namespace}/endpoints/{name}˜#Ø -core_v1read the specified Endpoints*readCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Endpoints - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 - -core_v1replace the specified Endpoints* replaceCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.EndpointsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Endpoints -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.Endpoints - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -*û -core_v1delete Endpoints*deleteCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -B¿ -core_v1(partially update the specified Endpoints*patchCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Endpoints - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -J6 -42"0pathname of the Endpoints"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ˜J -%/api/v1/namespaces/{namespace}/eventsîIà -core_v1#list or watch objects of kind Event*listCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.EventList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -"¬ -core_v1create an Event*createCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B< -: -8bodybody *( -&#/definitions/io.k8s.api.core.v1.EventBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÕ -9 -2002 -0 -OK* -( -&#/definitions/io.k8s.api.core.v1.Event -> -2017 -5 -Created* -( -&#/definitions/io.k8s.api.core.v1.Event -? -2028 -6 -Accepted* -( -&#/definitions/io.k8s.api.core.v1.Event - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -*­ -core_v1delete collection of Event*%deleteCoreV1CollectionNamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string „# -,/api/v1/namespaces/{namespace}/events/{name}Ó"È -core_v1read the specified Event*readCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JT -9 -2002 -0 -OK* -( -&#/definitions/io.k8s.api.core.v1.Event - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -÷ -core_v1replace the specified Event*replaceCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B< -: -8bodybody *( -&#/definitions/io.k8s.api.core.v1.EventBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J” -9 -2002 -0 -OK* -( -&#/definitions/io.k8s.api.core.v1.Event -> -2017 -5 -Created* -( -&#/definitions/io.k8s.api.core.v1.Event - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -*ò -core_v1delete an Event*deleteCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -B¯ -core_v1$partially update the specified Event*patchCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JT -9 -2002 -0 -OK* -( -&#/definitions/io.k8s.api.core.v1.Event - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -J2 -0.",pathname of the Event"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string âJ -*/api/v1/namespaces/{namespace}/limitranges³Jô -core_v1(list or watch objects of kind LimitRange*listCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.core.v1.LimitRangeList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -"Î -core_v1create a LimitRange* createCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.core.v1.LimitRangeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jä -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange -D -202= -; -Accepted/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -*¼ -core_v1delete collection of LimitRange**deleteCoreV1CollectionNamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string â# -1/api/v1/namespaces/{namespace}/limitranges/{name}¬#Ü -core_v1read the specified LimitRange*readCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -• -core_v1 replace the specified LimitRange*!replaceCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.core.v1.LimitRangeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -*€ -core_v1delete a LimitRange* deleteCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -Bà -core_v1)partially update the specified LimitRange*patchCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -J7 -53"1pathname of the LimitRange"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ‡L -5/api/v1/namespaces/{namespace}/persistentvolumeclaimsÍK ! -core_v13list or watch objects of kind PersistentVolumeClaim*)listCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh -M -200F -D -OK> -< -:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -"› -core_v1create a PersistentVolumeClaim*+createCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J… -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -O -202H -F -Accepted: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -*Ý -core_v1*delete collection of PersistentVolumeClaim*5deleteCoreV1CollectionNamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ³% -"<path!name of the PersistentVolumeClaim"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï -C/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status‡¡ -core_v12read status of the specified PersistentVolumeClaim*/readCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -ç -core_v15replace status of the specified PersistentVolumeClaim*2replaceCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -Bÿ -core_v1>partially update status of the specified PersistentVolumeClaim*0patchCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -JB -@>"<path!name of the PersistentVolumeClaim"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ùI -#/api/v1/namespaces/{namespace}/podsÑIØ -core_v1!list or watch objects of kind Pod*listCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.PodList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -" -core_v1 create a Pod*createCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: -8 -6bodybody *& -$#/definitions/io.k8s.api.core.v1.PodBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÏ -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod -< -2015 -3 -Created( -& -$#/definitions/io.k8s.api.core.v1.Pod -= -2026 -4 -Accepted( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -*§ -core_v1delete collection of Pod*#deleteCoreV1CollectionNamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ý" -*/api/v1/namespaces/{namespace}/pods/{name}®"À -core_v1read the specified Pod*readCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JR -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -ë -core_v1replace the specified Pod*replaceCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: -8 -6bodybody *& -$#/definitions/io.k8s.api.core.v1.PodBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod -< -2015 -3 -Created( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -*ë -core_v1 delete a Pod*deleteCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -B§ -core_v1"partially update the specified Pod*patchCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JR -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -J0 -.,"*pathname of the Pod"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ­ -1/api/v1/namespaces/{namespace}/pods/{name}/attach÷ – -core_v1%connect GET requests to attach of Pod*#connectCoreV1GetNamespacedPodAttach2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jR -x-kubernetes-group-version-kind/-group: "" -kind: PodAttachOptions -version: v1 -"˜ -core_v1&connect POST requests to attach of Pod*$connectCoreV1PostNamespacedPodAttach2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jR -x-kubernetes-group-version-kind/-group: "" -kind: PodAttachOptions -version: v1 -Jœ -™–“querytThe container in which to execute the command. Defaults to only container if there is only one container in the pod." container2string J= -;9"7pathname of the PodAttachOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Jƒ -€~|query_Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true."stderr2boolean J -}{query_Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false."stdin2boolean Jƒ -€~|query_Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true."stdout2boolean Jð -íêçqueryÌTTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false."tty2boolean € - -2/api/v1/namespaces/{namespace}/pods/{name}/bindingÉ "¢ -core_v1create binding of a Pod* createCoreV1NamespacedPodBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> -< -:bodybody ** -(#/definitions/io.k8s.api.core.v1.BindingJÛ -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Binding -@ -2019 -7 -Created, -* -(#/definitions/io.k8s.api.core.v1.Binding -A -202: -8 -Accepted, -* -(#/definitions/io.k8s.api.core.v1.Binding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jI -x-kubernetes-group-version-kind&$group: "" -kind: Binding -version: v1 -Jž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean J4 -20".pathname of the Binding"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ® - -3/api/v1/namespaces/{namespace}/pods/{name}/evictionö "Î -core_v1create eviction of a Pod*!createCoreV1NamespacedPodEviction2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.policy.v1beta1.EvictionJó -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.policy.v1beta1.Eviction -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.policy.v1beta1.Eviction -I -202B -@ -Accepted4 -2 -0#/definitions/io.k8s.api.policy.v1beta1.Eviction - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jS -x-kubernetes-group-version-kind0.group: policy -kind: Eviction -version: v1beta1 -Jž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean J5 -31"/pathname of the Eviction"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string á -//api/v1/namespaces/{namespace}/pods/{name}/exec­  -core_v1#connect GET requests to exec of Pod*!connectCoreV1GetNamespacedPodExec2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jP -x-kubernetes-group-version-kind-+group: "" -kind: PodExecOptions -version: v1 -"’ -core_v1$connect POST requests to exec of Pod*"connectCoreV1PostNamespacedPodExec2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jP -x-kubernetes-group-version-kind-+group: "" -kind: PodExecOptions -version: v1 -Ju -sqoqueryRCommand is the remote command to execute. argv array. Not executed within a shell."command2string J˜ -•’querypContainer in which to execute the command. Defaults to only container if there is only one container in the pod." container2string J; -97"5pathname of the PodExecOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Jq -omkqueryNRedirect the standard error stream of the pod for this call. Defaults to true."stderr2boolean Jq -omkqueryORedirect the standard input stream of the pod for this call. Defaults to false."stdin2boolean Jr -pnlqueryORedirect the standard output stream of the pod for this call. Defaults to true."stdout2boolean Jx -vtrqueryXTTY if true indicates that a tty will be allocated for the exec call. Defaults to false."tty2boolean ë -./api/v1/namespaces/{namespace}/pods/{name}/log¸Ä -core_v1read log of the specified Pod*readCoreV1NamespacedPodLog2 -text/plain2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -J -ЇqueryhThe container for which to stream logs. Defaults to only container if there is one container in the pod." container2string JW -USQquery4Follow the log stream of the pod. Defaults to false."follow2boolean J€ -ýú÷queryÕIf set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit." -limitBytes2integer J0 -.,"*pathname of the Pod"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Jb -`^\query=Return previous terminated container logs. Defaults to false."previous2boolean JÍ -ÊÇÄquery A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified." sinceSeconds2integer JÈ -Å¿queryžIf set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime" tailLines2integer J› -˜•’queryqIf true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false." -timestamps2boolean Ž -6/api/v1/namespaces/{namespace}/pods/{name}/portforwardÓ¥ -core_v1*connect GET requests to portforward of Pod*(connectCoreV1GetNamespacedPodPortforward2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jW -x-kubernetes-group-version-kind42group: "" -kind: PodPortForwardOptions -version: v1 -"§ -core_v1+connect POST requests to portforward of Pod*)connectCoreV1PostNamespacedPodPortforward2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jW -x-kubernetes-group-version-kind42group: "" -kind: PodPortForwardOptions -version: v1 -JB -@>"<path!name of the PodPortForwardOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JY -WUSquery7List of ports to forward Required when using WebSockets"ports2integer è -0/api/v1/namespaces/{namespace}/pods/{name}/proxy³“ -core_v1$connect GET requests to proxy of Pod*"connectCoreV1GetNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -“ -core_v1$connect PUT requests to proxy of Pod*"connectCoreV1PutNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -"• -core_v1%connect POST requests to proxy of Pod*#connectCoreV1PostNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -*™ -core_v1'connect DELETE requests to proxy of Pod*%connectCoreV1DeleteNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -2› -core_v1(connect OPTIONS requests to proxy of Pod*&connectCoreV1OptionsNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -:• -core_v1%connect HEAD requests to proxy of Pod*#connectCoreV1HeadNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -B— -core_v1&connect PATCH requests to proxy of Pod*$connectCoreV1PatchNamespacedPodProxy2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -J< -:8"6pathname of the PodProxyOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Ja -_][queryAPath is the URL path to use for the current proxy request to pod."path2string Þ -7/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}¢› -core_v1$connect GET requests to proxy of Pod**connectCoreV1GetNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -› -core_v1$connect PUT requests to proxy of Pod**connectCoreV1PutNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -" -core_v1%connect POST requests to proxy of Pod*+connectCoreV1PostNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -*¡ -core_v1'connect DELETE requests to proxy of Pod*-connectCoreV1DeleteNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -2£ -core_v1(connect OPTIONS requests to proxy of Pod*.connectCoreV1OptionsNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -: -core_v1%connect HEAD requests to proxy of Pod*+connectCoreV1HeadNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -BŸ -core_v1&connect PATCH requests to proxy of Pod*,connectCoreV1PatchNamespacedPodProxyWithPath2*/*:*/*J7 - -200 - -OK - ² -string - -401 - - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jQ -x-kubernetes-group-version-kind.,group: "" -kind: PodProxyOptions -version: v1 -J< -:8"6pathname of the PodProxyOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜J5 -31"/pathpath to the resource"path*string˜Ja -_][queryAPath is the URL path to use for the current proxy request to pod."path2string ¯ -1/api/v1/namespaces/{namespace}/pods/{name}/statusùÙ -core_v1 read status of the specified Pod*readCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JR -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -û -core_v1#replace status of the specified Pod* replaceCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: -8 -6bodybody *& -$#/definitions/io.k8s.api.core.v1.PodBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod -< -2015 -3 -Created( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -B· -core_v1,partially update status of the specified Pod*patchCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JR -7 -2000 -. -OK( -& -$#/definitions/io.k8s.api.core.v1.Pod - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -J0 -.,"*pathname of the Pod"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ñJ -+/api/v1/namespaces/{namespace}/podtemplatesÁJø -core_v1)list or watch objects of kind PodTemplate*listCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.core.v1.PodTemplateList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -"Õ -core_v1create a PodTemplate*!createCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.core.v1.PodTemplateBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jç -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate -E -202> -< -Accepted0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -*¿ -core_v1 delete collection of PodTemplate*+deleteCoreV1CollectionNamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string õ# -2/api/v1/namespaces/{namespace}/podtemplates/{name}¾#à -core_v1read the specified PodTemplate*readCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -› -core_v1!replace the specified PodTemplate*"replaceCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.core.v1.PodTemplateBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J  -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -*ƒ -core_v1delete a PodTemplate*!deleteCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -BÇ -core_v1*partially update the specified PodTemplate* patchCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -J8 -64"2pathname of the PodTemplate"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ‡L -5/api/v1/namespaces/{namespace}/replicationcontrollersÍK ! -core_v13list or watch objects of kind ReplicationController*)listCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh -M -200F -D -OK> -< -:#/definitions/io.k8s.api.core.v1.ReplicationControllerList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -"› -core_v1create a ReplicationController*+createCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.core.v1.ReplicationControllerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J… -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController -O -202H -F -Accepted: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -*Ý -core_v1*delete collection of ReplicationController*5deleteCoreV1CollectionNamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ³% -"<path!name of the ReplicationController"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ö -B/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale¯ -core_v11read scale of the specified ReplicationController*.readCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +MKIquery-If 'true', then the output is pretty printed."pretty2string Õ$ +B/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name}Ž$ñ + apps_v1beta2±watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ" +"/apis/batch/v1beta1/watch/cronjobs¿"½ + batch_v1beta1swatch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.*,watchBatchV1beta1CronJobListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ë$ +I/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}ý#³ +certificates_v1beta1Àwatch changes to an object of kind CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*1watchCertificatesV1beta1CertificateSigningRequest2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jq +x-kubernetes-group-version-kindNLgroup: certificates.k8s.io +kind: CertificateSigningRequest +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JF +DB"@path%name of the CertificateSigningRequest"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ·" +//apis/rbac.authorization.k8s.io/v1/rolebindingsƒ" +rbacAuthorization_v1)list or watch objects of kind RoleBinding*2listRbacAuthorizationV1RoleBindingForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.rbac.v1.RoleBindingList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ’# +5/apis/rbac.authorization.k8s.io/v1/watch/clusterrolesØ"Ö +rbacAuthorization_v1wwatch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.*'watchRbacAuthorizationV1ClusterRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean $ +P/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations¬#ª +admissionregistration_v1beta1Šwatch individual changes to a list of ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.*CwatchAdmissionregistrationV1beta1ValidatingWebhookConfigurationList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÊL +4/apis/apps/v1beta2/namespaces/{namespace}/daemonsets‘L†! + apps_v1beta2'list or watch objects of kind DaemonSet*"listAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +"… + apps_v1beta2create a DaemonSet*$createAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE +C +Abodybody *1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jð +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet +G +201@ +> +Created3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet +H +202A +? +Accepted3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +*Ê + apps_v1beta2delete collection of DaemonSet*.deleteAppsV1beta2CollectionNamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jR +x-kubernetes-group-version-kind/-version: v1beta2 +group: apps +kind: DaemonSet +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ²% +V/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}×$­ +autoscaling_v2beta1¾watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*8watchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¿# +8/apis/autoscaling/v2beta2/watch/horizontalpodautoscalers‚#€ +autoscaling_v2beta2ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*BwatchAutoscalingV2beta2HorizontalPodAutoscalerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean $ +F/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgetsÂ#Þ +policy_v1beta1watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.*3watchPolicyV1beta1NamespacedPodDisruptionBudgetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ù +7/apis/storage.k8s.io/v1/volumeattachments/{name}/status˜ + +storage_v1-read status of the specified VolumeAttachment*#readStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment  401  UnauthorizedRhttpsj x-kubernetes-actionget -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale +j^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment version: v1 -à -core_v14replace scale of the specified ReplicationController*1replaceCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC -A -?bodybody */ --#/definitions/io.k8s.api.autoscaling.v1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¢ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale -E -201> -< -Created1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +ó + +storage_v10replace status of the specified VolumeAttachment*&replaceStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J° + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentRhttpsj^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +j +x-kubernetes-actionput +Bù + +storage_v19partially update status of the specified VolumeAttachment*$patchStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +j +x-kubernetes-actionpatch +J= +;9"7pathname of the VolumeAttachment"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ù- +D/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}-í + apps_v1beta1%read the specified ControllerRevision*+readAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j[ +x-kubernetes-group-version-kind86kind: ControllerRevision +version: v1beta1 +group: apps +þ + apps_v1beta1(replace the specified ControllerRevision*.replaceAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +L +Jbodybody *: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¸ +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision +P +201I +G +Created< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision  401  UnauthorizedRhttpsj x-kubernetes-actionput -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -Bí -core_v1=partially update scale of the specified ReplicationController*/patchCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +*© + apps_v1beta1delete a ControllerRevision*-deleteAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +Bü + apps_v1beta11partially update the specified ControllerRevision*,patchAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -J2 -0.",pathname of the Scale"name*string˜J` +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +J? +=;"9pathname of the ControllerRevision"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï -C/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status‡¡ -core_v12read status of the specified ReplicationController*/readCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController +MKIquery-If 'true', then the output is pretty printed."pretty2string ÞK +%/apis/storage.k8s.io/v1beta1/csinodes´K‡! +storage_v1beta1%list or watch objects of kind CSINode*listStorageV1beta1CSINode2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1beta1.CSINodeList  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -ç -core_v15replace status of the specified ReplicationController*2replaceCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.core.v1.ReplicationControllerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ + UnauthorizedRhttpsj +x-kubernetes-actionlist +jZ +x-kubernetes-group-version-kind75version: v1beta1 +group: storage.k8s.io +kind: CSINode +"‰ +storage_v1beta1create a CSINode*createStorageV1beta1CSINode2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.storage.v1beta1.CSINodeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jó +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.storage.v1beta1.CSINode +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.storage.v1beta1.CSINode I -200B +202B @ -OK: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController +Accepted4 +2 +0#/definitions/io.k8s.api.storage.v1beta1.CSINode + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jZ +x-kubernetes-group-version-kind75kind: CSINode +version: v1beta1 +group: storage.k8s.io +*Ê +storage_v1beta1delete collection of CSINode*%deleteStorageV1beta1CollectionCSINode2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: CSINode +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ­ +1/api/v1/namespaces/{namespace}/pods/{name}/attach÷ – +core_v1%connect GET requests to attach of Pod*#connectCoreV1GetNamespacedPodAttach2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: PodAttachOptions +version: v1 +"˜ +core_v1&connect POST requests to attach of Pod*$connectCoreV1PostNamespacedPodAttach2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: PodAttachOptions +version: v1 +Jœ +™–“querytThe container in which to execute the command. Defaults to only container if there is only one container in the pod." container2string J= +;9"7pathname of the PodAttachOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Jƒ +€~|query_Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true."stderr2boolean J +}{query_Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false."stdin2boolean Jƒ +€~|query_Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true."stdout2boolean Jð +íêçqueryÌTTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false."tty2boolean ò +/apis/apiregistration.k8s.io/ÐÍ +apiregistrationget information of a group*getApiregistrationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi N -201G +200G E -Created: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Bÿ -core_v1>partially update status of the specified ReplicationController*0patchCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN + UnauthorizedRhttpsî" +$/apis/apps/v1beta2/watch/deploymentsÅ"à + apps_v1beta2vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchAppsV1beta2DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsjS +x-kubernetes-group-version-kind0.version: v1beta2 +group: apps +kind: Deployment +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ü +/apis/authorization.k8s.io/v1/ÙÖ +authorization_v1get available resources*getAuthorizationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps¿# +8/apis/autoscaling/v2beta1/watch/horizontalpodautoscalers‚#€ +autoscaling_v2beta1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*BwatchAutoscalingV2beta1HorizontalPodAutoscalerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ýK +(/apis/node.k8s.io/v1beta1/runtimeclassesÐK! + node_v1beta1*list or watch objects of kind RuntimeClass*listNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jd I 200B @ OK: 8 -6#/definitions/io.k8s.api.core.v1.ReplicationController +6#/definitions/io.k8s.api.node.v1beta1.RuntimeClassList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +"— + node_v1beta1create a RuntimeClass*createNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BH +F +Dbodybody *4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jù +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass +J +201C +A +Created6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass +K +202D +B +Accepted6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +j\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +*Ð + node_v1beta1!delete collection of RuntimeClass*'deleteNodeV1beta1CollectionRuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ž% +X/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}Á$£ +rbacAuthorization_v1beta1²watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*2watchRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the RoleBinding"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ñ# +3/api/v1/watch/namespaces/{namespace}/resourcequotas™#µ +core_v1ywatch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.*&watchCoreV1NamespacedResourceQuotaList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jO +x-kubernetes-group-version-kind,*group: "" +kind: ResourceQuota +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean L +1/apis/apps/v1/namespaces/{namespace}/statefulsetsçKú +apps_v1)list or watch objects of kind StatefulSet*listAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1.StatefulSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +"ð +apps_v1create a StatefulSet*!createAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.apps.v1.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jç +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet +E +202> +< +Accepted0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jO +x-kubernetes-group-version-kind,*kind: StatefulSet +version: v1 +group: apps +*Á +apps_v1 delete collection of StatefulSet*+deleteAppsV1CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string á# +;/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments¡#½ + apps_v1beta2vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta2NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú$ +C/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets/{name}’$ô + apps_v1beta2²watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*%watchAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta2 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the StatefulSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean îM +0/apis/apiregistration.k8s.io/v1beta1/apiservices¹MÉ! +apiregistration_v1beta1(list or watch objects of kind APIService*$listApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J‚ + +401 + + Unauthorized +g +200` +^ +OKX +V +T#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceListRhttpsj +x-kubernetes-actionlist +je +x-kubernetes-group-version-kindB@version: v1beta1 +kind: APIService +group: apiregistration.k8s.io +"« + +apiregistration_v1beta1create an APIService*&createApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bf +d +bbodybody *R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÓ +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService +h +201a +_ +CreatedT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService +i +202b +` +AcceptedT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService + +401 + + UnauthorizedRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j +x-kubernetes-actionpost +*ë +apiregistration_v1beta1delete collection of APIService*0deleteApiregistrationV1beta1CollectionAPIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +je +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÙL +5/apis/apps/v1beta2/namespaces/{namespace}/deploymentsŸLŠ! + apps_v1beta2(list or watch objects of kind Deployment*#listAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta2.DeploymentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +"Œ + apps_v1beta2create a Deployment*%createAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.apps.v1beta2.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jó +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment +I +202B +@ +Accepted4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment + +401 + + UnauthorizedRhttpsjS +x-kubernetes-group-version-kind0.kind: Deployment +version: v1beta2 +group: apps +j +x-kubernetes-actionpost +*Í + apps_v1beta2delete collection of Deployment*/deleteAppsV1beta2CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ý# +:/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsetsž#º + apps_v1beta2uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*'watchAppsV1beta2NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-version: v1beta2 +group: apps +kind: DaemonSet +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¾$ +H/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}ñ#® +rbacAuthorization_v1beta1¹watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*/watchRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? +=;"9pathname of the ClusterRoleBinding"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ©$ +Q/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindingsÓ#ï +rbacAuthorization_v1beta1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*6watchRbacAuthorizationV1beta1NamespacedRoleBindingList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ý$ +J/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}®$‰ + apps_v1beta1¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*,watchAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? +=;"9pathname of the ControllerRevision"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean °- +H/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}ã,ä + networking_v1 read the specified NetworkPolicy*'readNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j^ +x-kubernetes-group-version-kind;9version: v1 +group: networking.k8s.io +kind: NetworkPolicy +í + networking_v1#replace the specified NetworkPolicy**replaceNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J° +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j^ +x-kubernetes-group-version-kind;9version: v1 +group: networking.k8s.io +kind: NetworkPolicy +*¤ + networking_v1delete a NetworkPolicy*)deleteNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +Bó + networking_v1,partially update the specified NetworkPolicy*(patchNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy version: v1 -JB -@>"<path!name of the ReplicationController"name*string˜J` +J: +86"4pathname of the NetworkPolicy"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string K --/api/v1/namespaces/{namespace}/resourcequotasÝJ€! +MKIquery-If 'true', then the output is pretty printed."pretty2string Ç +>/apis/apps/v1/namespaces/{namespace}/deployments/{name}/status„÷ +apps_v1'read status of the specified Deployment*$readAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.DeploymentRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +À +apps_v1*replace status of the specified Deployment*'replaceAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +BØ +apps_v13partially update status of the specified Deployment*%patchAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)kind: Deployment +version: v1 +group: apps +J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ò" +%/apis/apps/v1beta1/watch/statefulsetsÈ"Æ + apps_v1beta1wwatch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.*/watchAppsV1beta1StatefulSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta1 +group: apps +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ž$ +J/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalersÏ#ë +autoscaling_v1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*7watchAutoscalingV1NamespacedHorizontalPodAutoscalerList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ +8/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status©ß +batch_v1 read status of the specified Job*readBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +œ +batch_v1#replace status of the specified Job*!replaceBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.batch.v1.JobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J’ +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.batch.v1.Job + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j +x-kubernetes-actionput +BÀ +batch_v1,partially update status of the specified Job*patchBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +J0 +.,"*pathname of the Job"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‹" +#/apis/coordination.k8s.io/v1/leasesã!á +coordination_v1#list or watch objects of kind Lease*'listCoordinationV1LeaseForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.coordination.v1.LeaseList + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53version: v1 +group: coordination.k8s.io +kind: Lease +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean óK +)/api/v1/namespaces/{namespace}/configmapsÅKð +core_v1'list or watch objects of kind ConfigMap*listCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.core.v1.ConfigMapList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +"à +core_v1create a ConfigMap*createCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.ConfigMapBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Já += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap +C +202< +: +Accepted. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +j +x-kubernetes-actionpost +*¹ +core_v1delete collection of ConfigMap*)deleteCoreV1CollectionNamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ŠP +J/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations»Oœ" +admissionregistration_v1beta1listAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J‡ +l +200e +c +OK] +[ +Y#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +"Œ +admissionregistration_v1beta1'create a ValidatingWebhookConfiguration*@createAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bk +i +gbodybody *W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jâ +h +200a +_ +OKY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration +m +201f +d +CreatedY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration +n +202g +e +AcceptedY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +j +x-kubernetes-group-version-kind\Zkind: ValidatingWebhookConfiguration +version: v1beta1 +group: admissionregistration.k8s.io +*¹! +admissionregistration_v1beta13delete collection of ValidatingWebhookConfiguration*JdeleteAdmissionregistrationV1beta1CollectionValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ê$ +I/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions/{name}ü#³ +apiextensions_v1beta1¿watch changes to an object of kind CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*1watchApiextensionsV1beta1CustomResourceDefinition2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JE +CA"?path$name of the CustomResourceDefinition"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ×L +:/apis/coordination.k8s.io/v1/namespaces/{namespace}/leases˜L‰! +coordination_v1#list or watch objects of kind Lease*!listCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J` + +401 + + Unauthorized +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.coordination.v1.LeaseListRhttpsjX +x-kubernetes-group-version-kind53version: v1 +group: coordination.k8s.io +kind: Lease +j +x-kubernetes-actionlist +"… +coordination_v1create a Lease*#createCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD +B +@bodybody *0 +.#/definitions/io.k8s.api.coordination.v1.LeaseBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jí +F +201? += +Created2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease +G +202@ +> +Accepted2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease + +401 + + Unauthorized +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.coordination.v1.LeaseRhttpsj +x-kubernetes-actionpost +jX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +*Î +coordination_v1delete collection of Lease*-deleteCoordinationV1CollectionNamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ™K +#/api/v1/namespaces/{namespace}/podsñJØ +core_v1!list or watch objects of kind Pod*listCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JV +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.PodList + +401 + + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +j +x-kubernetes-actionlist +"¶ +core_v1 create a Pod*createCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: +8 +6bodybody *& +$#/definitions/io.k8s.api.core.v1.PodBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÏ += +2026 +4 +Accepted( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + Unauthorized +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod +< +2015 +3 +Created( +& +$#/definitions/io.k8s.api.core.v1.PodRhttpsj +x-kubernetes-actionpost +jE +x-kubernetes-group-version-kind" kind: Pod +version: v1 +group: "" +*§ +core_v1delete collection of Pod*#deleteCoreV1CollectionNamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" version: v1 +group: "" +kind: Pod +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¯L +-/api/v1/namespaces/{namespace}/resourcequotasýK€! core_v1+list or watch objects of kind ResourceQuota*!listCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -2769,15 +3510,16 @@ E UnauthorizedRhttpsj x-kubernetes-actionlist jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota +x-kubernetes-group-version-kind,*kind: ResourceQuota version: v1 -"ã +group: "" +"ü core_v1create a ResourceQuota*#createCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD B @bodybody *0 .#/definitions/io.k8s.api.core.v1.ResourceQuotaBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jí +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jí A 200: 8 @@ -2838,14 +3580,2855 @@ jO x-kubernetes-group-version-kind,*group: "" kind: ResourceQuota version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ›$ -4/api/v1/namespaces/{namespace}/resourcequotas/{name}â#è -core_v1 read the specified ResourceQuota*!readCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J\ +MKIquery-If 'true', then the output is pretty printed."pretty2string Â" +/api/v1/watch/secrets¨"¦ +core_v1rwatch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.*%watchCoreV1SecretListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jH +x-kubernetes-group-version-kind%#group: "" +kind: Secret +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù# +N/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations¦#¤ +admissionregistration_v1beta1ˆwatch individual changes to a list of MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.*AwatchAdmissionregistrationV1beta1MutatingWebhookConfigurationList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean †# +*/apis/extensions/v1beta1/watch/deployments×"Õ +extensions_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*4watchExtensionsV1beta1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‚ + /apis/networking.k8s.io/v1beta1/ÝÚ +networking_v1beta1get available resources* getNetworkingV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps" +/api/v1/persistentvolumeclaimsú!ø +core_v13list or watch objects of kind PersistentVolumeClaim*/listCoreV1PersistentVolumeClaimForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ³$ +5/api/v1/watch/namespaces/{namespace}/endpoints/{name}ù#Ý +core_v1°watch changes to an object of kind Endpoints. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 +42"0pathname of the Endpoints"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ, +?/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}»,Ù +apps_v1%read the specified ControllerRevision*&readAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevision + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +à +apps_v1(replace the specified ControllerRevision*)replaceAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevisionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevision + +401 + + Unauthorized +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevisionRhttpsj +x-kubernetes-actionput +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +*š +apps_v1delete a ControllerRevision*(deleteAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jV +x-kubernetes-group-version-kind31version: v1 +group: apps +kind: ControllerRevision +Bè +apps_v11partially update the specified ControllerRevision*'patchAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevision + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +J? +=;"9pathname of the ControllerRevision"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ­- +B/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}æ,å +extensions_v1beta1read the specified ReplicaSet*)readExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jY +x-kubernetes-group-version-kind64version: v1beta1 +group: extensions +kind: ReplicaSet +ò +extensions_v1beta1 replace the specified ReplicaSet*,replaceExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J´ +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +*£ +extensions_v1beta1delete a ReplicaSet*+deleteExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +Bô +extensions_v1beta1)partially update the specified ReplicaSet**patchExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet + +401 + + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +j +x-kubernetes-actionpatch +J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¥" +$/apis/extensions/v1beta1/replicasetsü!ú +extensions_v1beta1(list or watch objects of kind ReplicaSet*/listExtensionsV1beta1ReplicaSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ú" +'/apis/apps/v1/watch/controllerrevisionsÎ"Ì +apps_v1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*1watchAppsV1ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean  +6/apis/authorization.k8s.io/v1/selfsubjectaccessreviewsÔ +"Æ +authorization_v1 create a SelfSubjectAccessReview*,createAuthorizationV1SelfSubjectAccessReview2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BW +U +Sbodybody *C +A#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewJ¦ +T +200M +K +OKE +C +A#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview +Y +201R +P +CreatedE +C +A#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview +Z +202S +Q +AcceptedE +C +A#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jk +x-kubernetes-group-version-kindHFgroup: authorization.k8s.io +kind: SelfSubjectAccessReview +version: v1 +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ð" +4/apis/rbac.authorization.k8s.io/v1beta1/rolebindings—"• +rbacAuthorization_v1beta1)list or watch objects of kind RoleBinding*7listRbacAuthorizationV1beta1RoleBindingForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‚ +/logs/{logpath}o8 +logs*logFileHandlerJ + +401 + + UnauthorizedRhttpsJ3 +1/"-pathpath to the log"logpath*string˜µ# +,/api/v1/watch/namespaces/{namespace}/secrets„#  +core_v1rwatch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespacedSecretList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#version: v1 +group: "" +kind: Secret +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ’ +C/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/statusÊ‹ + apps_v1beta2'read status of the specified ReplicaSet*)readAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +Þ + apps_v1beta2*replace status of the specified ReplicaSet*,replaceAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¨ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +Bì + apps_v1beta23partially update status of the specified ReplicaSet**patchAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¥" +$/apis/extensions/v1beta1/deploymentsü!ú +extensions_v1beta1(list or watch objects of kind Deployment*/listExtensionsV1beta1DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ã +/apis/networking.k8s.io/ÆÃ + +networkingget information of a group*getNetworkingAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi + +401 + + Unauthorized +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupRhttpsý" +0/apis/scheduling.k8s.io/v1/watch/priorityclassesÈ"Æ + scheduling_v1ywatch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.*"watchSchedulingV1PriorityClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9kind: PriorityClass +version: v1 +group: scheduling.k8s.io +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean É# +1/api/v1/watch/namespaces/{namespace}/podtemplates“#¯ +core_v1wwatch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.*$watchCoreV1NamespacedPodTemplateList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ë" +2/apis/autoscaling/v2beta2/horizontalpodautoscalers´"² +autoscaling_v2beta25list or watch objects of kind HorizontalPodAutoscaler*=listAutoscalingV2beta2HorizontalPodAutoscalerForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jv + +401 + + Unauthorized +[ +200T +R +OKL +J +H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerListRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ˆ +"/apis/coordination.k8s.io/v1beta1/áÞ +coordination_v1beta1get available resources*"getCoordinationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsô) +F/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}©)þ +rbacAuthorization_v1read the specified Role*%readRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.rbac.v1.Role + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +» +rbacAuthorization_v1replace the specified Role*(replaceRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.rbac.v1.RoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J’ +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.rbac.v1.Role += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.rbac.v1.Role + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +*Ÿ +rbacAuthorization_v1 delete a Role*'deleteRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +Bß +rbacAuthorization_v1#partially update the specified Role*&patchRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.rbac.v1.Role + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +J1 +/-"+pathname of the Role"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ×! +/api/v1/servicesÂ!À +core_v1%list or watch objects of kind Service*!listCoreV1ServiceForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.ServiceList + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean À# +./api/v1/watch/namespaces/{namespace}/endpoints#© +core_v1uwatch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1NamespacedEndpointsList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&kind: Endpoints +version: v1 +group: "" +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean  $ +2/api/v1/watch/namespaces/{namespace}/events/{name}é#Ñ +core_v1¬watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J2 +0.",pathname of the Event"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ò# +;/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims²#Î +core_v1watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.*.watchCoreV1NamespacedPersistentVolumeClaimList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Þ" +/api/v1/watch/resourcequotas½"» +core_v1ywatch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.*,watchCoreV1ResourceQuotaListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*group: "" +kind: ResourceQuota +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean £ ++/apis/admissionregistration.k8s.io/v1beta1/óð +admissionregistration_v1beta1get available resources*+getAdmissionregistrationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsó! +/apis/apps/v1/statefulsetsÔ!Ò +apps_v1)list or watch objects of kind StatefulSet*%listAppsV1StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1.StatefulSetList + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç# +4/apis/storage.k8s.io/v1beta1/watch/csidrivers/{name}®#ô +storage_v1beta1°watch changes to an object of kind CSIDriver. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 +42"0pathname of the CSIDriver"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ý# +2/apis/storage.k8s.io/v1beta1/watch/csinodes/{name}¦#î +storage_v1beta1®watch changes to an object of kind CSINode. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1beta1CSINode2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: CSINode +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 +20".pathname of the CSINode"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¥, +5/api/v1/namespaces/{namespace}/serviceaccounts/{name}ë+Ç +core_v1!read the specified ServiceAccount*"readCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.core.v1.ServiceAccount + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jP +x-kubernetes-group-version-kind-+group: "" +kind: ServiceAccount +version: v1 +Æ +core_v1$replace the specified ServiceAccount*%replaceCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE +C +Abodybody *1 +/#/definitions/io.k8s.api.core.v1.ServiceAccountBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¦ +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.core.v1.ServiceAccount +G +201@ +> +Created3 +1 +/#/definitions/io.k8s.api.core.v1.ServiceAccount + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jP +x-kubernetes-group-version-kind-+kind: ServiceAccount +version: v1 +group: "" +*Œ +core_v1delete a ServiceAccount*$deleteCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jP +x-kubernetes-group-version-kind-+kind: ServiceAccount +version: v1 +group: "" +BÖ +core_v1-partially update the specified ServiceAccount*#patchCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.core.v1.ServiceAccount + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jP +x-kubernetes-group-version-kind-+group: "" +kind: ServiceAccount +version: v1 +J; +97"5pathname of the ServiceAccount"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ö$ +G/apis/coordination.k8s.io/v1/watch/namespaces/{namespace}/leases/{name}Š$ò +coordination_v1¬watch changes to an object of kind Lease. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*"watchCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsjX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J2 +0.",pathname of the Lease"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean „# +1/apis/apiregistration.k8s.io/v1/watch/apiservicesÎ"Ì +apiregistration_v1vwatch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.*$watchApiregistrationV1APIServiceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j` +x-kubernetes-group-version-kind=;version: v1 +kind: APIService +group: apiregistration.k8s.io +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean š# +//apis/policy/v1beta1/watch/poddisruptionbudgetsæ"ä +policy_v1beta1watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.*9watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9version: v1beta1 +group: policy +kind: PodDisruptionBudget +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean óL +4/apis/rbac.authorization.k8s.io/v1beta1/clusterrolesºL³! +rbacAuthorization_v1beta1)list or watch objects of kind ClusterRole*'listRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: ClusterRole +version: v1beta1 +j +x-kubernetes-actionlist +"¸ +rbacAuthorization_v1beta1create a ClusterRole*)createRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jö +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole +J +202C +A +Accepted5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleRhttpsj +x-kubernetes-actionpost +ji +x-kubernetes-group-version-kindFDkind: ClusterRole +version: v1beta1 +group: rbac.authorization.k8s.io +*õ +rbacAuthorization_v1beta1 delete collection of ClusterRole*3deleteRbacAuthorizationV1beta1CollectionClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: ClusterRole +version: v1beta1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string , +1/apis/scheduling.k8s.io/v1/priorityclasses/{name}Ù+Ú + scheduling_v1 read the specified PriorityClass*readSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClass + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9kind: PriorityClass +version: v1 +group: scheduling.k8s.io +j +x-kubernetes-actionget +ã + scheduling_v1#replace the specified PriorityClass* replaceSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J° + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClass +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClassRhttpsj +x-kubernetes-actionput +j^ +x-kubernetes-group-version-kind;9version: v1 +group: scheduling.k8s.io +kind: PriorityClass +*š + scheduling_v1delete a PriorityClass*deleteSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j^ +x-kubernetes-group-version-kind;9group: scheduling.k8s.io +kind: PriorityClass +version: v1 +Bé + scheduling_v1,partially update the specified PriorityClass*patchSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClass + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9kind: PriorityClass +version: v1 +group: scheduling.k8s.io +j +x-kubernetes-actionpatch +J: +86"4pathname of the PriorityClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string È +/apis/½º +apisget available API versions*getAPIVersions2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJm +R +200K +I +OKC +A +?#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList + +401 + + UnauthorizedRhttpsÜ. +K/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}Œ.‰ +autoscaling_v1*read the specified HorizontalPodAutoscaler*2readAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jm +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +j +x-kubernetes-actionget +¨ +autoscaling_v1-replace the specified HorizontalPodAutoscaler*5replaceAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BU +S +Qbodybody *A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÆ + +401 + + Unauthorized +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler +W +201P +N +CreatedC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerRhttpsj +x-kubernetes-actionput +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +*¾ +autoscaling_v1 delete a HorizontalPodAutoscaler*4deleteAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +B˜ +autoscaling_v16partially update the specified HorizontalPodAutoscaler*3patchAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jm +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¿M +F/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindingsôL©! +rbacAuthorization_v1)list or watch objects of kind RoleBinding*,listRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.rbac.v1.RoleBindingList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +"Ÿ +rbacAuthorization_v1create a RoleBinding*.createRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.rbac.v1.RoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jç +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding +E +202> +< +Accepted0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +*ð +rbacAuthorization_v1 delete collection of RoleBinding*8deleteRbacAuthorizationV1CollectionNamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Â" +/apis/batch/v1/watch/jobs¤"¢ +batch_v1owatch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.*#watchBatchV1JobListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ñ# +7/apis/apps/v1/watch/namespaces/{namespace}/statefulsets•#± +apps_v1wwatch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.*$watchAppsV1NamespacedStatefulSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean á# +;/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets¡#½ + apps_v1beta2vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta2NamespacedReplicaSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jS +x-kubernetes-group-version-kind0.version: v1beta2 +group: apps +kind: ReplicaSet +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¸ +H/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scaleë— +extensions_v1beta1&read scale of the specified ReplicaSet*.readExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +j +x-kubernetes-actionget +ì +extensions_v1beta1)replace scale of the specified ReplicaSet*1replaceExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleRhttpsj +x-kubernetes-actionput +jT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +Bø +extensions_v1beta12partially update scale of the specified ReplicaSet*/patchExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +j +x-kubernetes-actionpatch +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string †# +./apis/rbac.authorization.k8s.io/v1/watch/rolesÓ"Ñ +rbacAuthorization_v1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.*0watchRbacAuthorizationV1RoleListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8kind: Role +version: v1 +group: rbac.authorization.k8s.io +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean è +0/api/v1/namespaces/{namespace}/pods/{name}/proxy³“ +core_v1$connect GET requests to proxy of Pod*"connectCoreV1GetNamespacedPodProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,kind: PodProxyOptions +version: v1 +group: "" +“ +core_v1$connect PUT requests to proxy of Pod*"connectCoreV1PutNamespacedPodProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +"• +core_v1%connect POST requests to proxy of Pod*#connectCoreV1PostNamespacedPodProxy2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsjQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +j! +x-kubernetes-action +connect +*™ +core_v1'connect DELETE requests to proxy of Pod*%connectCoreV1DeleteNamespacedPodProxy2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,kind: PodProxyOptions +version: v1 +group: "" +2› +core_v1(connect OPTIONS requests to proxy of Pod*&connectCoreV1OptionsNamespacedPodProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +:• +core_v1%connect HEAD requests to proxy of Pod*#connectCoreV1HeadNamespacedPodProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsjQ +x-kubernetes-group-version-kind.,kind: PodProxyOptions +version: v1 +group: "" +j! +x-kubernetes-action +connect +B— +core_v1&connect PATCH requests to proxy of Pod*$connectCoreV1PatchNamespacedPodProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +J< +:8"6pathname of the PodProxyOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Ja +_][queryAPath is the URL path to use for the current proxy request to pod."path2string ‚" +/apis/apps/v1beta2/daemonsetsà!Þ + apps_v1beta2'list or watch objects of kind DaemonSet*(listAppsV1beta2DaemonSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ºN +D/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalersñMÆ! +autoscaling_v15list or watch objects of kind HorizontalPodAutoscaler*2listAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jq +V +200O +M +OKG +E +C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +"õ +autoscaling_v1 create a HorizontalPodAutoscaler*4createAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BU +S +Qbodybody *A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  +X +202Q +O +AcceptedC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler + +401 + + Unauthorized +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler +W +201P +N +CreatedC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerRhttpsj +x-kubernetes-actionpost +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +*ú +autoscaling_v1,delete collection of HorizontalPodAutoscaler*>deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‚# +)/apis/extensions/v1beta1/watch/daemonsetsÔ"Ò +extensions_v1beta1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*3watchExtensionsV1beta1DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù +/apis/storage.k8s.io/v1beta1/×Ô +storage_v1beta1get available resources*getStorageV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsª+ + /api/v1/persistentvolumes/{name}…+Å +core_v1#read the specified PersistentVolume*readCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +j +x-kubernetes-actionget +È +core_v1&replace the specified PersistentVolume*replaceCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.core.v1.PersistentVolumeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +*ˆ +core_v1delete a PersistentVolume*deleteCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjR +x-kubernetes-group-version-kind/-version: v1 +group: "" +kind: PersistentVolume +j +x-kubernetes-action delete +BÔ +core_v1/partially update the specified PersistentVolume*patchCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +j +x-kubernetes-actionpatch +J= +;9"7pathname of the PersistentVolume"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string õ! +/api/v1/resourcequotasÚ!Ø +core_v1+list or watch objects of kind ResourceQuota*'listCoreV1ResourceQuotaForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.core.v1.ResourceQuotaList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jO +x-kubernetes-group-version-kind,*version: v1 +group: "" +kind: ResourceQuota +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ó0 +Q/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name}0ß +admissionregistration_v1beta11read the specified ValidatingWebhookConfiguration*>readAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jƒ +h +200a +_ +OKY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +© + +admissionregistration_v1beta14replace the specified ValidatingWebhookConfiguration*AreplaceAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bk +i +gbodybody *W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jò +h +200a +_ +OKY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration +m +201f +d +CreatedY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +*ý +admissionregistration_v1beta1'delete a ValidatingWebhookConfiguration*@deleteAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +Bî +admissionregistration_v1beta1=partially update the specified ValidatingWebhookConfiguration*?patchAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jƒ +h +200a +_ +OKY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j +x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +version: v1beta1 +JK +IG"Epath*name of the ValidatingWebhookConfiguration"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‘ +%/apis/apiregistration.k8s.io/v1beta1/çä +apiregistration_v1beta1get available resources*%getApiregistrationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÚ" +/apis/apps/v1/watch/replicasets¶"´ +apps_v1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*)watchAppsV1ReplicaSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª" +*/apis/networking.k8s.io/v1/networkpoliciesû!ù + networking_v1+list or watch objects of kind NetworkPolicy*-listNetworkingV1NetworkPolicyForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyList + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ˜ +(/apis/rbac.authorization.k8s.io/v1beta1/ëè +rbacAuthorization_v1beta1get available resources*'getRbacAuthorizationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÆ+ +0/api/v1/namespaces/{namespace}/configmaps/{name}‘+³ +core_v1read the specified ConfigMap*readCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jK +x-kubernetes-group-version-kind(&version: v1 +group: "" +kind: ConfigMap +¨ +core_v1replace the specified ConfigMap* replaceCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.ConfigMapBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.ConfigMapRhttpsj +x-kubernetes-actionput +jK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +*ý +core_v1delete a ConfigMap*deleteCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +j +x-kubernetes-action delete +B +core_v1(partially update the specified ConfigMap*patchCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +j +x-kubernetes-actionpatch +J6 +42"0pathname of the ConfigMap"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ’, +4/api/v1/namespaces/{namespace}/resourcequotas/{name}Ù+à +core_v1 read the specified ResourceQuota*!readCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J\ A 200: 8 @@ -2861,12 +6444,13 @@ jO x-kubernetes-group-version-kind,*group: "" kind: ResourceQuota version: v1 -§ +À core_v1#replace the specified ResourceQuota*$replaceCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD B @bodybody *0 .#/definitions/io.k8s.api.core.v1.ResourceQuotaBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¤ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¤ A 200: 8 @@ -2882,12 +6466,12 @@ F  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jO + UnauthorizedRhttpsjO x-kubernetes-group-version-kind,*group: "" kind: ResourceQuota version: v1 +j +x-kubernetes-actionput *‰ core_v1delete a ResourceQuota*#deleteCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R @@ -2918,12 +6502,14 @@ jO x-kubernetes-group-version-kind,*group: "" kind: ResourceQuota version: v1 -BÏ +BÒ core_v1,partially update the specified ResourceQuota*"patchCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J\ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J\ A 200: 8 @@ -2942,77 +6528,410 @@ version: v1 J: 86"4pathname of the ResourceQuota"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï -;/api/v1/namespaces/{namespace}/resourcequotas/{name}/status -core_v1*read status of the specified ResourceQuota*'readCoreV1NamespacedResourceQuotaStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.core.v1.ResourceQuota +MKIquery-If 'true', then the output is pretty printed."pretty2string ë! +/api/v1/podtemplatesÒ!Ð +core_v1)list or watch objects of kind PodTemplate*%listCoreV1PodTemplateForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.core.v1.PodTemplateList  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota + UnauthorizedRhttpsj +x-kubernetes-actionlist +jM +x-kubernetes-group-version-kind*(version: v1 +group: "" +kind: PodTemplate +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean µ# +0/apis/batch/v1/watch/namespaces/{namespace}/jobs€#œ +batch_v1owatch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.*watchBatchV1NamespacedJobList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job version: v1 -· -core_v1-replace status of the specified ResourceQuota**replaceCoreV1NamespacedResourceQuotaStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD -B -@bodybody *0 -.#/definitions/io.k8s.api.core.v1.ResourceQuotaBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¤ +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ü" +//apis/storage.k8s.io/v1/watch/volumeattachmentsÈ"Æ + +storage_v1|watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.*"watchStorageV1VolumeAttachmentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean µ" +(/apis/extensions/v1beta1/networkpoliciesˆ"† +extensions_v1beta1+list or watch objects of kind NetworkPolicy*2listExtensionsV1beta1NetworkPolicyForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList + +401 + + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy +version: v1beta1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª$ +C/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings/{name}â#Ÿ +rbacAuthorization_v1¹watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jk +x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? +=;"9pathname of the ClusterRoleBinding"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª* +/api/v1/namespaces“*æ +core_v1'list or watch objects of kind Namespace*listCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ A 200: 8 OK2 0 -.#/definitions/io.k8s.api.core.v1.ResourceQuota -F -201? +.#/definitions/io.k8s.api.core.v1.NamespaceList + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +j +x-kubernetes-actionlist +"Ö +core_v1create a Namespace*createCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.NamespaceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Já = -Created2 +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Namespace +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.Namespace +C +202< +: +Accepted. +, +*#/definitions/io.k8s.api.core.v1.Namespace + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string û* +,/api/v1/namespaces/{namespace}/events/{name}Ê*£ +core_v1read the specified Event*readCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JT +9 +2002 0 -.#/definitions/io.k8s.api.core.v1.ResourceQuota +OK* +( +&#/definitions/io.k8s.api.core.v1.Event + +401 + + UnauthorizedRhttpsjG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +j +x-kubernetes-actionget + +core_v1replace the specified Event*replaceCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B< +: +8bodybody *( +&#/definitions/io.k8s.api.core.v1.EventBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J” +9 +2002 +0 +OK* +( +&#/definitions/io.k8s.api.core.v1.Event +> +2017 +5 +Created* +( +&#/definitions/io.k8s.api.core.v1.Event  401  UnauthorizedRhttpsj x-kubernetes-actionput -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event version: v1 -Bß -core_v16partially update status of the specified ResourceQuota*(patchCoreV1NamespacedResourceQuotaStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +*ò +core_v1delete an Event*deleteCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +B² +core_v1$partially update the specified Event*patchCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J\ -A -200: -8 -OK2 +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JT +9 +2002 0 -.#/definitions/io.k8s.api.core.v1.ResourceQuota +OK* +( +&#/definitions/io.k8s.api.core.v1.Event  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event version: v1 -J: -86"4pathname of the ResourceQuota"name*string˜J` +J2 +0.",pathname of the Event"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¦J -&/api/v1/namespaces/{namespace}/secretsûIä +MKIquery-If 'true', then the output is pretty printed."pretty2string á# +;/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments¡#½ + apps_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta1NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jS +x-kubernetes-group-version-kind0.kind: Deployment +version: v1beta1 +group: apps +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û +/apis/extensions/v1beta1/ÝÚ +extensions_v1beta1get available resources* getExtensionsV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÆK +&/api/v1/namespaces/{namespace}/secrets›Kä core_v1$list or watch objects of kind Secret*listCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -3039,18 +6958,19 @@ The server guarantees that the objects returned when using continue will be iden  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jH + UnauthorizedRhttpsjH x-kubernetes-group-version-kind%#group: "" kind: Secret version: v1 -"² +j +x-kubernetes-actionlist +"Ë core_v1create a Secret*createCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B= ; 9bodybody *) '#/definitions/io.k8s.api.core.v1.SecretBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JØ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JØ : 2003 1 @@ -3111,112 +7031,10 @@ jH x-kubernetes-group-version-kind%#group: "" kind: Secret version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string –# --/api/v1/namespaces/{namespace}/secrets/{name}ä"Ì -core_v1read the specified Secret*readCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JU -: -2003 -1 -OK+ -) -'#/definitions/io.k8s.api.core.v1.Secret - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -ý -core_v1replace the specified Secret*replaceCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B= -; -9bodybody *) -'#/definitions/io.k8s.api.core.v1.SecretBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– -: -2003 -1 -OK+ -) -'#/definitions/io.k8s.api.core.v1.Secret -? -2018 -6 -Created+ -) -'#/definitions/io.k8s.api.core.v1.Secret - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -*ô -core_v1delete a Secret*deleteCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -B³ -core_v1%partially update the specified Secret*patchCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JU -: -2003 -1 -OK+ -) -'#/definitions/io.k8s.api.core.v1.Secret - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -J3 -1/"-pathname of the Secret"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string žK -./api/v1/namespaces/{namespace}/serviceaccountsëJ„! +MKIquery-If 'true', then the output is pretty printed."pretty2string ¾L +./api/v1/namespaces/{namespace}/serviceaccounts‹L„! core_v1,list or watch objects of kind ServiceAccount*"listCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -3249,12 +7067,17 @@ jP x-kubernetes-group-version-kind-+group: "" kind: ServiceAccount version: v1 -"ê +"ƒ core_v1create a ServiceAccount*$createCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE C Abodybody *1 /#/definitions/io.k8s.api.core.v1.ServiceAccountBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jð +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jð + +401 + + Unauthorized B 200; 9 @@ -3272,11 +7095,7 @@ H ? Accepted3 1 -/#/definitions/io.k8s.api.core.v1.ServiceAccount - -401 - - UnauthorizedRhttpsj +/#/definitions/io.k8s.api.core.v1.ServiceAccountRhttpsj x-kubernetes-actionpost jP x-kubernetes-group-version-kind-+group: "" @@ -3309,64 +7128,282 @@ C  401  - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jP -x-kubernetes-group-version-kind-+group: "" + UnauthorizedRhttpsjP +x-kubernetes-group-version-kind-+version: v1 +group: "" kind: ServiceAccount -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +j* +x-kubernetes-actiondeletecollection +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ®$ -5/api/v1/namespaces/{namespace}/serviceaccounts/{name}ô#ì -core_v1!read the specified ServiceAccount*"readCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.core.v1.ServiceAccount +MKIquery-If 'true', then the output is pretty printed."pretty2string ¯" +&/apis/apps/v1beta1/controllerrevisions„"‚ + apps_v1beta10list or watch objects of kind ControllerRevision*1listAppsV1beta1ControllerRevisionForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jj +O +200H +F +OK@ +> +<#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList + +401 + + UnauthorizedRhttpsj[ +x-kubernetes-group-version-kind86version: v1beta1 +group: apps +kind: ControllerRevision +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‡" +/apis/apps/v1beta1/deploymentsä!â + apps_v1beta1(list or watch objects of kind Deployment*)listAppsV1beta1DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta1.DeploymentList + +401 + + UnauthorizedRhttpsjS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ï + +2/apis/authorization.k8s.io/v1/subjectaccessreviews¸ +"ª +authorization_v1create a SubjectAccessReview*(createAuthorizationV1SubjectAccessReview2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BS +Q +Obodybody *? +=#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewJš +P +200I +G +OKA +? +=#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview +U +201N +L +CreatedA +? +=#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview +V +202O +M +AcceptedA +? +=#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jg +x-kubernetes-group-version-kindDBgroup: authorization.k8s.io +kind: SubjectAccessReview +version: v1 +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JO +MKIquery-If 'true', then the output is pretty printed."pretty2string í$ +H/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name} $ƒ +extensions_v1beta1±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64kind: Deployment +version: v1beta1 +group: extensions +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean €$ +G/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies´#Ð + networking_v1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*,watchNetworkingV1NamespacedNetworkPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean É# +B/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions‚#€ +apiextensions_v1beta1„watch individual changes to a list of CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead.*5watchApiextensionsV1beta1CustomResourceDefinitionList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ó- +7/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}·-‹ +apiregistration_v1beta1read the specified APIService*$readApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J~ +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionget -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -­ -core_v1$replace the specified ServiceAccount*%replaceCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE -C -Abodybody *1 -/#/definitions/io.k8s.api.core.v1.ServiceAccountBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¦ -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.core.v1.ServiceAccount -G -201@ -> -Created3 -1 -/#/definitions/io.k8s.api.core.v1.ServiceAccount +je +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +Ì +apiregistration_v1beta1 replace the specified APIService*'replaceApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bf +d +bbodybody *R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jè +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService +h +201a +_ +CreatedT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionput -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -*Œ -core_v1delete a ServiceAccount*$deleteCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +je +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +*° +apiregistration_v1beta1delete an APIService*&deleteApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -3389,39 +7426,77 @@ I  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j x-kubernetes-action delete -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -BÓ -core_v1-partially update the specified ServiceAccount*#patchCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +Bš +apiregistration_v1beta1)partially update the specified APIService*%patchApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.core.v1.ServiceAccount +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J~  401  - UnauthorizedRhttpsj + Unauthorized +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j x-kubernetes-actionpatch -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount +J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string š +N/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviewsÇ "× +authorization_v1!create a LocalSubjectAccessReview*7createAuthorizationV1NamespacedLocalSubjectAccessReview2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BX +V +Tbodybody *D +B#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReviewJ© + +401 + + Unauthorized +U +200N +L +OKF +D +B#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview +Z +201S +Q +CreatedF +D +B#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview +[ +202T +R +AcceptedF +D +B#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReviewRhttpsj +x-kubernetes-actionpost +jl +x-kubernetes-group-version-kindIGgroup: authorization.k8s.io +kind: LocalSubjectAccessReview version: v1 -J; -97"5pathname of the ServiceAccount"name*string˜J` +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string  * -'/api/v1/namespaces/{namespace}/servicesô)è -core_v1%list or watch objects of kind Service*listCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +MKIquery-If 'true', then the output is pretty printed."pretty2string †M +,/apis/extensions/v1beta1/podsecuritypoliciesÕL´! +extensions_v1beta1/list or watch objects of kind PodSecurityPolicy*&listExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -3437,107 +7512,454 @@ limit is a maximum number of responses to return for a list call. If more items The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.ServiceList +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jo  401  - UnauthorizedRhttpsj + Unauthorized +T +200M +K +OKE +C +A#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyListRhttpsj x-kubernetes-actionlist -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -"¹ -core_v1create a Service*createCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> -< -:bodybody ** -(#/definitions/io.k8s.api.core.v1.ServiceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÛ -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service -@ -2019 -7 -Created, -* -(#/definitions/io.k8s.api.core.v1.Service -A -202: -8 -Accepted, -* -(#/definitions/io.k8s.api.core.v1.Service +j` +x-kubernetes-group-version-kind=;version: v1beta1 +group: extensions +kind: PodSecurityPolicy +"Ý +extensions_v1beta1create a PodSecurityPolicy*(createExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BS +Q +Obodybody *? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jš +P +200I +G +OKA +? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy +U +201N +L +CreatedA +? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy +V +202O +M +AcceptedA +? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy  401  UnauthorizedRhttpsj x-kubernetes-actionpost -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service +j` +x-kubernetes-group-version-kind=;group: extensions +kind: PodSecurityPolicy +version: v1beta1 +*ê +extensions_v1beta1&delete collection of PodSecurityPolicy*2deleteExtensionsV1beta1CollectionPodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j` +x-kubernetes-group-version-kind=;kind: PodSecurityPolicy +version: v1beta1 +group: extensions +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‰# +//apis/networking.k8s.io/v1beta1/watch/ingressesÕ"Ó +networking_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*1watchNetworkingV1beta1IngressListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ò# +;/api/v1/watch/namespaces/{namespace}/replicationcontrollers²#Î +core_v1watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.*.watchCoreV1NamespacedReplicationControllerList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController version: v1 -J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean J` +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ©# -./api/v1/namespaces/{namespace}/services/{name}ö"Ð -core_v1read the specified Service*readCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æL +//apis/scheduling.k8s.io/v1beta1/priorityclasses²L«! +scheduling_v1beta1+list or watch objects of kind PriorityClass*"listSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassList  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -ƒ -core_v1replace the specified Service*replaceCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> + UnauthorizedRhttpsj +x-kubernetes-actionlist +jc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +"È +scheduling_v1beta1create a PriorityClass*$createSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO +M +Kbodybody *; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JŽ +L +200E +C +OK= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +Q +201J +H +Created= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +R +202K +I +Accepted= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +*å +scheduling_v1beta1"delete collection of PriorityClass*.deleteSchedulingV1beta1CollectionPriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string §M +5/api/v1/namespaces/{namespace}/persistentvolumeclaimsíL ! +core_v13list or watch objects of kind PersistentVolumeClaim*)listCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh +M +200F +D +OK> < -:bodybody ** -(#/definitions/io.k8s.api.core.v1.ServiceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J˜ -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service -@ -2019 -7 -Created, -* -(#/definitions/io.k8s.api.core.v1.Service +:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service + UnauthorizedRhttpsj +x-kubernetes-actionlist +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim version: v1 -*÷ -core_v1delete a Service*deleteCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +"´ +core_v1create a PersistentVolumeClaim*+createCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J… + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +O +202H +F +Accepted: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimRhttpsj +x-kubernetes-actionpost +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +*Ý +core_v1*delete collection of PersistentVolumeClaim*5deleteCoreV1CollectionNamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ú" +/apis/apps/v1/watch/deployments¶"´ +apps_v1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*)watchAppsV1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¶/ +P/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}á. +autoscaling_v2beta1*read the specified HorizontalPodAutoscaler*7readAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +j +x-kubernetes-actionget +Æ +autoscaling_v2beta1-replace the specified HorizontalPodAutoscaler*:replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÐ +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler + +401 + + Unauthorized +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerRhttpsj +x-kubernetes-actionput +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +*Í +autoscaling_v2beta1 delete a HorizontalPodAutoscaler*9deleteAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -3562,165 +7984,1508 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -B· -core_v1&partially update the specified Service*patchCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +jg +x-kubernetes-group-version-kindDBkind: HorizontalPodAutoscaler +version: v2beta1 +group: autoscaling +B¬ +autoscaling_v2beta16partially update the specified HorizontalPodAutoscaler*8patchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -J4 -20".pathname of the Service"name*string˜J` +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ´ -4/api/v1/namespaces/{namespace}/services/{name}/proxyûŸ -core_v1(connect GET requests to proxy of Service*&connectCoreV1GetNamespacedServiceProxy2*/*:*/*J7 - -200 - -OK - ² -string +MKIquery-If 'true', then the output is pretty printed."pretty2string ù# +A/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets³#Ï +extensions_v1beta1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*.watchExtensionsV1beta1NamespacedReplicaSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk  401  - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jU -x-kubernetes-group-version-kind20group: "" -kind: ServiceProxyOptions -version: v1 -Ÿ -core_v1(connect PUT requests to proxy of Service*&connectCoreV1PutNamespacedServiceProxy2*/*:*/*J7 - -200 - -OK - ² -string + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î" +$/apis/apps/v1beta1/watch/deploymentsÅ"à + apps_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchAppsV1beta1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jU -x-kubernetes-group-version-kind20group: "" -kind: ServiceProxyOptions -version: v1 -"¡ -core_v1)connect POST requests to proxy of Service*'connectCoreV1PostNamespacedServiceProxy2*/*:*/*J7 - -200 - -OK - ² -string + UnauthorizedRhttpsjS +x-kubernetes-group-version-kind0.kind: Deployment +version: v1beta1 +group: apps +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Á, + +<#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +"Ä + apps_v1beta2create a ControllerRevision*-createAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +L +Jbodybody *: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J‹ +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision +P +201I +G +Created< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision +Q +202J +H +Accepted< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision + +401 + + UnauthorizedRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j +x-kubernetes-actionpost +*å + apps_v1beta2'delete collection of ControllerRevision*7deleteAppsV1beta2CollectionNamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Þ +B/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale—ÿ + apps_v1beta2&read scale of the specified Deployment*(readAppsV1beta2NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)version: v1beta2 +group: apps +kind: Scale +È + apps_v1beta2)replace scale of the specified Deployment*+replaceAppsV1beta2NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta2 +Bà + apps_v1beta22partially update scale of the specified Deployment*)patchAppsV1beta2NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleRhttpsjN +x-kubernetes-group-version-kind+)kind: Scale +version: v1beta2 +group: apps +j +x-kubernetes-actionpatch +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string †$ +E/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies¼#Ø +extensions_v1beta1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*1watchExtensionsV1beta1NamespacedNetworkPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +j\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ý$ +L/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}¬$Œ +extensions_v1beta1´watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*-watchExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy +version: v1beta1 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: +86"4pathname of the NetworkPolicy"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Á, +<":pathname of the ServiceProxyOptions"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JÐ -ÍÊÇquery¬Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy."path2string ª +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: +86"4pathname of the NetworkPolicy"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Î" +/api/v1/watch/configmaps±"¯ +core_v1uwatch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.*(watchCoreV1ConfigMapListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jK +x-kubernetes-group-version-kind(&version: v1 +group: "" +kind: ConfigMap +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¥ +>/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/statusâÉ +apiregistration_v1beta1'read status of the specified APIService**readApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J~ + +401 + + Unauthorized +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceRhttpsj +x-kubernetes-actionget +je +x-kubernetes-group-version-kindB@version: v1beta1 +kind: APIService +group: apiregistration.k8s.io +Ü +apiregistration_v1beta1*replace status of the specified APIService*-replaceApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bf +d +bbodybody *R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jè +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService +h +201a +_ +CreatedT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService + +401 + + UnauthorizedRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j +x-kubernetes-actionput +Bª +apiregistration_v1beta13partially update status of the specified APIService*+patchApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J~ +c +200\ +Z +OKT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService + +401 + + UnauthorizedRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j +x-kubernetes-actionpatch +J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Õ$ +B/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}Ž$ñ + apps_v1beta1±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean $ +J/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles¾#Ú +rbacAuthorization_v1beta1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.*/watchRbacAuthorizationV1beta1NamespacedRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ! +/api/v1/limitrangesÎ!Ì +core_v1(list or watch objects of kind LimitRange*$listCoreV1LimitRangeForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.core.v1.LimitRangeList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ò! +/api/v1/secrets¾!¼ +core_v1$list or watch objects of kind Secret* listCoreV1SecretForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.core.v1.SecretList + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#version: v1 +group: "" +kind: Secret +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Í# +6/apis/apps/v1/watch/namespaces/{namespace}/deployments’#® +apps_v1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*#watchAppsV1NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ï +/apis/policy/v1beta1/ÕÒ +policy_v1beta1get available resources*getPolicyV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsË +=/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale‰ù +apps_v1&read scale of the specified ReplicaSet*#readAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +Æ +apps_v1)replace scale of the specified ReplicaSet*&replaceAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC +A +?bodybody */ +-#/definitions/io.k8s.api.autoscaling.v1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¢ + +401 + + Unauthorized +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale +E +201> +< +Created1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.ScaleRhttpsjP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +j +x-kubernetes-actionput +BÚ +apps_v12partially update scale of the specified ReplicaSet*$patchAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jP +x-kubernetes-group-version-kind-+kind: Scale +version: v1 +group: autoscaling +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ý! +/apis/batch/v1beta1/cronjobsÜ!Ú + batch_v1beta1%list or watch objects of kind CronJob*'listBatchV1beta1CronJobForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J` + +401 + + Unauthorized +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.batch.v1beta1.CronJobListRhttpsj +x-kubernetes-actionlist +jQ +x-kubernetes-group-version-kind.,kind: CronJob +version: v1beta1 +group: batch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ê, +//apis/policy/v1beta1/podsecuritypolicies/{name}–,ç +policy_v1beta1$read the specified PodSecurityPolicy*"readPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy + +401 + + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: policy +kind: PodSecurityPolicy +version: v1beta1 +j +x-kubernetes-actionget +ú +policy_v1beta1'replace the specified PodSecurityPolicy*%replacePolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO +M +Kbodybody *; +9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jº +L +200E +C +OK= +; +9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy +Q +201J +H +Created= +; +9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j\ +x-kubernetes-group-version-kind97kind: PodSecurityPolicy +version: v1beta1 +group: policy +*¢ +policy_v1beta1delete a PodSecurityPolicy*$deletePolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j\ +x-kubernetes-group-version-kind97group: policy +kind: PodSecurityPolicy +version: v1beta1 +Bö +policy_v1beta10partially update the specified PodSecurityPolicy*#patchPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j\ +x-kubernetes-group-version-kind97group: policy +kind: PodSecurityPolicy +version: v1beta1 +J> +<:"8pathname of the PodSecurityPolicy"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ª ;/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}ê§ core_v1(connect GET requests to proxy of Service*.connectCoreV1GetNamespacedServiceProxyWithPath2*/*:*/*J7  @@ -3732,25 +9497,25 @@ J@  401  - UnauthorizedRhttpsj! -x-kubernetes-action -connect -jU + UnauthorizedRhttpsjU x-kubernetes-group-version-kind20group: "" kind: ServiceProxyOptions version: v1 +j! +x-kubernetes-action +connect § core_v1(connect PUT requests to proxy of Service*.connectCoreV1PutNamespacedServiceProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized  200  OK ² -string - -401 - - UnauthorizedRhttpsj! +stringRhttpsj! x-kubernetes-action connect jU @@ -3851,86 +9616,199 @@ J@ ><":pathname of the ServiceProxyOptions"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜J5 31"/pathpath to the resource"path*string˜JÐ -ÍÊÇquery¬Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy."path2string ï -5/api/v1/namespaces/{namespace}/services/{name}/statusµé -core_v1$read status of the specified Service*!readCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -“ -core_v1'replace status of the specified Service*$replaceCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> -< -:bodybody ** -(#/definitions/io.k8s.api.core.v1.ServiceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J˜ -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service +ÍÊÇquery¬Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy."path2string ì +I/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/statusž£ +extensions_v1beta1'read status of the specified Deployment*/readExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd +I +200B @ -2019 -7 -Created, -* -(#/definitions/io.k8s.api.core.v1.Service +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +j +x-kubernetes-actionget +‚ +extensions_v1beta1*replace status of the specified Deployment*2replaceExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J´ + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRhttpsj x-kubernetes-actionput -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -BÇ -core_v10partially update status of the specified Service*"patchCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +jY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +B„ +extensions_v1beta13partially update status of the specified Deployment*0patchExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.Service +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment + +401 + + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +j +x-kubernetes-actionpatch +J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string õ# +@/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets°#Ì +extensions_v1beta1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*-watchExtensionsV1beta1NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ß$ +F/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}”$ú +extensions_v1beta1®watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  UnauthorizedRhttpsj -x-kubernetes-actionpatch -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -J4 -20".pathname of the Service"name*string˜J` +x-kubernetes-actionwatch +jV +x-kubernetes-group-version-kind31version: v1beta1 +group: extensions +kind: Ingress +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 +20".pathname of the Ingress"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ®" -/api/v1/namespaces/{name}"Î -core_v1read the specified Namespace*readCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JX +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‘# +5/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses×"Õ +scheduling_v1beta1ywatch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.*'watchSchedulingV1beta1PriorityClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsjc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ã+ +//api/v1/namespaces/{namespace}/endpoints/{name}+³ +core_v1read the specified Endpoints*readCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JX = 2006 4 OK. , -*#/definitions/io.k8s.api.core.v1.Namespace +*#/definitions/io.k8s.api.core.v1.Endpoints  401  @@ -3938,20 +9816,209 @@ rpnqueryQShould this value be exported. Export strips fields that a user c x-kubernetes-actionget jK x-kubernetes-group-version-kind(&group: "" -kind: Namespace +kind: Endpoints version: v1 -… -core_v1replace the specified Namespace*replaceCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +¨ +core_v1replace the specified Endpoints* replaceCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ > <bodybody *, -*#/definitions/io.k8s.api.core.v1.NamespaceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ +*#/definitions/io.k8s.api.core.v1.EndpointsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ + +401 + + Unauthorized = 2006 4 OK. , -*#/definitions/io.k8s.api.core.v1.Namespace +*#/definitions/io.k8s.api.core.v1.Endpoints +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.EndpointsRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +j +x-kubernetes-actionput +*û +core_v1delete Endpoints*deleteCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +jK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +B +core_v1(partially update the specified Endpoints*patchCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Endpoints + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +J6 +42"0pathname of the Endpoints"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ë +./api/v1/namespaces/{namespace}/pods/{name}/log¸Ä +core_v1read log of the specified Pod*readCoreV1NamespacedPodLog2 +text/plain2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +J +ЇqueryhThe container for which to stream logs. Defaults to only container if there is one container in the pod." container2string JW +USQquery4Follow the log stream of the pod. Defaults to false."follow2boolean J€ +ýú÷queryÕIf set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit." +limitBytes2integer J0 +.,"*pathname of the Pod"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Jb +`^\query=Return previous terminated container logs. Defaults to false."previous2boolean JÍ +ÊÇÄquery A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified." sinceSeconds2integer JÈ +Å¿queryžIf set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime" tailLines2integer J› +˜•’queryqIf true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false." +timestamps2boolean þ +/apis/autoscaling/v2beta1/ßÜ +autoscaling_v2beta1get available resources*!getAutoscalingV2beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÖ +L/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval… ¯ +certificates_v1beta1;replace approval of the specified CertificateSigningRequest*;replaceCertificatesV1beta1CertificateSigningRequestApproval2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B] +[ +Ybodybody *I +G#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestJÖ +_ +201X +V +CreatedK +I +G#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest + +401 + + Unauthorized +Z +200S +Q +OKK +I +G#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestRhttpsjq +x-kubernetes-group-version-kindNLgroup: certificates.k8s.io +kind: CertificateSigningRequest +version: v1beta1 +j +x-kubernetes-actionput +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JF +DB"@path%name of the CertificateSigningRequest"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Š% +S/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings/{name}²$” +rbacAuthorization_v1²watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*-watchRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the RoleBinding"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean å +"/api/v1/namespaces/{name}/finalize¾ ø +core_v1+replace finalize of the specified Namespace*replaceCoreV1NamespaceFinalize2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.NamespaceJœ B 201; 9 @@ -3961,14 +10028,1344 @@ B  401  - UnauthorizedRhttpsj + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.NamespaceRhttpsjK +x-kubernetes-group-version-kind(&version: v1 +group: "" +kind: Namespace +j x-kubernetes-actionput +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J6 +42"0pathname of the Namespace"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÅK +/api/v1/persistentvolumes§K‚! +core_v1.list or watch objects of kind PersistentVolume*listCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.core.v1.PersistentVolumeList + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +j +x-kubernetes-actionlist +"‡ +core_v1create a PersistentVolume*createCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.core.v1.PersistentVolumeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jö +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume +J +202C +A +Accepted5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +*Ä +core_v1%delete collection of PersistentVolume*&deleteCoreV1CollectionPersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjR +x-kubernetes-group-version-kind/-version: v1 +group: "" +kind: PersistentVolume +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string é +/apis/certificates.k8s.io/ÊÇ + certificatesget information of a group*getCertificatesAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttps¦# +:/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolesç"å +rbacAuthorization_v1beta1wwatch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.*,watchRbacAuthorizationV1beta1ClusterRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDkind: ClusterRole +version: v1beta1 +group: rbac.authorization.k8s.io +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¾" +/api/v1/watch/events¥"£ +core_v1qwatch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.*$watchCoreV1EventListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ³M +;/apis/extensions/v1beta1/namespaces/{namespace}/replicasetsóL¢! +extensions_v1beta1(list or watch objects of kind ReplicaSet*)listExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +"¶ +extensions_v1beta1create a ReplicaSet*+createExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J… +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet +O +202H +F +Accepted: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +*ß +extensions_v1beta1delete collection of ReplicaSet*5deleteExtensionsV1beta1CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Í# +6/apis/apps/v1/watch/namespaces/{namespace}/replicasets’#® +apps_v1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*#watchAppsV1NamespacedReplicaSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì+ +2/api/v1/namespaces/{namespace}/podtemplates/{name}µ+» +core_v1read the specified PodTemplate*readCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +´ +core_v1!replace the specified PodTemplate*"replaceCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.core.v1.PodTemplateBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate + +401 + + UnauthorizedRhttpsjM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +j +x-kubernetes-actionput +*ƒ +core_v1delete a PodTemplate*!deleteCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +j +x-kubernetes-action delete +BÊ +core_v1*partially update the specified PodTemplate* patchCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JZ + +401 + + Unauthorized +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplateRhttpsjM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +j +x-kubernetes-actionpatch +J8 +64"2pathname of the PodTemplate"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ðK +(/api/v1/namespaces/{namespace}/endpointsÃKð +core_v1'list or watch objects of kind Endpoints*listCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.core.v1.EndpointsList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jK +x-kubernetes-group-version-kind(&version: v1 +group: "" +kind: Endpoints +"Þ +core_v1create Endpoints*createCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.EndpointsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Já +C +202< +: +Accepted. +, +*#/definitions/io.k8s.api.core.v1.Endpoints + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Endpoints +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.EndpointsRhttpsj +x-kubernetes-actionpost jK x-kubernetes-group-version-kind(&group: "" -kind: Namespace +kind: Endpoints version: v1 -*ó -core_v1delete a Namespace*deleteCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +*¹ +core_v1delete collection of Endpoints*)deleteCoreV1CollectionNamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ž +6/api/v1/namespaces/{namespace}/pods/{name}/portforwardÓ¥ +core_v1*connect GET requests to portforward of Pod*(connectCoreV1GetNamespacedPodPortforward2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jW +x-kubernetes-group-version-kind42group: "" +kind: PodPortForwardOptions +version: v1 +"§ +core_v1+connect POST requests to portforward of Pod*)connectCoreV1PostNamespacedPodPortforward2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsjW +x-kubernetes-group-version-kind42group: "" +kind: PodPortForwardOptions +version: v1 +j! +x-kubernetes-action +connect +JB +@>"<path!name of the PodPortForwardOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JY +WUSquery7List of ports to forward Required when using WebSockets"ports2integer ñ +A/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status«ƒ + batch_v1beta1$read status of the specified CronJob*'readBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob + +401 + + UnauthorizedRhttpsjQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +j +x-kubernetes-actionget +Ò + batch_v1beta1'replace status of the specified CronJob**replaceBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD +B +@bodybody *0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¤ +F +201? += +Created2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob + +401 + + Unauthorized +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJobRhttpsjQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +j +x-kubernetes-actionput +Bä + batch_v1beta10partially update status of the specified CronJob*(patchBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jQ +x-kubernetes-group-version-kind.,version: v1beta1 +group: batch +kind: CronJob +J4 +20".pathname of the CronJob"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ½ +G/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/statusñ— +extensions_v1beta1$read status of the specified Ingress*,readExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress + +401 + + UnauthorizedRhttpsjV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +j +x-kubernetes-actionget +ð +extensions_v1beta1'replace status of the specified Ingress*/replaceExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.extensions.v1beta1.IngressBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® + +401 + + Unauthorized +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.IngressRhttpsjV +x-kubernetes-group-version-kind31version: v1beta1 +group: extensions +kind: Ingress +j +x-kubernetes-actionput +Bø +extensions_v1beta10partially update status of the specified Ingress*-patchExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress + +401 + + UnauthorizedRhttpsjV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +j +x-kubernetes-actionpatch +J4 +20".pathname of the Ingress"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¤M +@/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingressesßL! +networking_v1beta1%list or watch objects of kind Ingress*&listNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Je + +401 + + Unauthorized +J +200C +A +OK; +9 +7#/definitions/io.k8s.api.networking.v1beta1.IngressListRhttpsj +x-kubernetes-actionlist +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +"© +networking_v1beta1create an Ingress*(createNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.networking.v1beta1.IngressBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jü +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress +L +202E +C +Accepted7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +*Ý +networking_v1beta1delete collection of Ingress*2deleteNetworkingV1beta1CollectionNamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ç# +@/apis/coordination.k8s.io/v1/watch/namespaces/{namespace}/leases¢#¾ +coordination_v1qwatch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.*&watchCoordinationV1NamespacedLeaseList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jX +x-kubernetes-group-version-kind53kind: Lease +version: v1 +group: coordination.k8s.io +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿK +//apis/apps/v1/namespaces/{namespace}/daemonsetsËKò +apps_v1'list or watch objects of kind DaemonSet*listAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.apps.v1.DaemonSetList + +401 + + UnauthorizedRhttpsjM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +j +x-kubernetes-actionlist +"â +apps_v1create a DaemonSet*createAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.apps.v1.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Já += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet +C +202< +: +Accepted. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +*» +apps_v1delete collection of DaemonSet*)deleteAppsV1CollectionNamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ä +/api/v1/nodes/{name}/status¤Ó +core_v1!read status of the specified Node*readCoreV1NodeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jF +x-kubernetes-group-version-kind#!version: v1 +group: "" +kind: Node + +core_v1$replace status of the specified Node*replaceCoreV1NodeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.core.v1.NodeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J’ +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.Node += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jF +x-kubernetes-group-version-kind#!group: "" +kind: Node +version: v1 +B´ +core_v1-partially update status of the specified Node*patchCoreV1NodeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jF +x-kubernetes-group-version-kind#!group: "" +kind: Node +version: v1 +J1 +/-"+pathname of the Node"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ´K +*/apis/batch/v1/namespaces/{namespace}/jobs…KÞ +batch_v1!list or watch objects of kind Job*listBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JW +< +2005 +3 +OK- ++ +)#/definitions/io.k8s.api.batch.v1.JobList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +"¿ +batch_v1 create a Job*createBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.batch.v1.JobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÒ + +401 + + Unauthorized +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.batch.v1.Job +> +2027 +5 +Accepted) +' +%#/definitions/io.k8s.api.batch.v1.JobRhttpsj +x-kubernetes-actionpost +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +*¬ +batch_v1delete collection of Job*$deleteBatchV1CollectionNamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string š- +A/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}Ô,á +extensions_v1beta1read the specified DaemonSet*(readExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +ì +extensions_v1beta1replace the specified DaemonSet*+replaceExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK +I +Gbodybody *7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J² + +401 + + Unauthorized +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet +M +201F +D +Created9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetRhttpsjX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +j +x-kubernetes-actionput +*  +extensions_v1beta1delete a DaemonSet**deleteExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +jX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +Bð +extensions_v1beta1(partially update the specified DaemonSet*)patchExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +j +x-kubernetes-actionpatch +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ®# + +<bodybody *, +*#/definitions/io.k8s.api.rbac.v1beta1.RoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.rbac.v1beta1.Role +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.rbac.v1beta1.RoleRhttpsjb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +j +x-kubernetes-actionput +*® +rbacAuthorization_v1beta1 delete a Role*,deleteRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -3993,133 +11390,643 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -Bµ -core_v1(partially update the specified Namespace*patchCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +Bó +rbacAuthorization_v1beta1#partially update the specified Role*+patchRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX = 2006 4 OK. , -*#/definitions/io.k8s.api.core.v1.Namespace +*#/definitions/io.k8s.api.rbac.v1beta1.Role  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +j x-kubernetes-actionpatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -J6 -42"0pathname of the Namespace"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ì -"/api/v1/namespaces/{name}/finalize¥ø -core_v1+replace finalize of the specified Namespace*replaceCoreV1NamespaceFinalize2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.NamespaceJœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Namespace -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.Namespace - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -Jž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J6 -42"0pathname of the Namespace"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ø - /api/v1/namespaces/{name}/statusÓç -core_v1&read status of the specified Namespace*readCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Namespace +J1 +/-"+pathname of the Role"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Æ+ +-/apis/storage.k8s.io/v1/storageclasses/{name}”+Ê + +storage_v1read the specified StorageClass*readStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass  401  UnauthorizedRhttpsj x-kubernetes-actionget -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -• -core_v1)replace status of the specified Namespace*replaceCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.core.v1.NamespaceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Namespace -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.core.v1.Namespace +jZ +x-kubernetes-group-version-kind75version: v1 +group: storage.k8s.io +kind: StorageClass +Ë + +storage_v1"replace the specified StorageClass*replaceStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.storage.v1.StorageClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¨ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass  401  UnauthorizedRhttpsj x-kubernetes-actionput -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace +jZ +x-kubernetes-group-version-kind75version: v1 +group: storage.k8s.io +kind: StorageClass +*Ž + +storage_v1delete a StorageClass*deleteStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: StorageClass version: v1 -BÅ -core_v12partially update status of the specified Namespace*patchCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +j +x-kubernetes-action delete +BÙ + +storage_v1+partially update the specified StorageClass*patchStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.core.v1.Namespace +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace +jZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: StorageClass version: v1 -J6 -42"0pathname of the Namespace"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ñH - /api/v1/nodesßHÒ +J9 +75"3pathname of the StorageClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string · +!/api/v1/nodes/{name}/proxy/{path}‘” +core_v1%connect GET requests to proxy of Node*!connectCoreV1GetNodeProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +” +core_v1%connect PUT requests to proxy of Node*!connectCoreV1PutNodeProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +"– +core_v1&connect POST requests to proxy of Node*"connectCoreV1PostNodeProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +*š +core_v1(connect DELETE requests to proxy of Node*$connectCoreV1DeleteNodeProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +2œ +core_v1)connect OPTIONS requests to proxy of Node*%connectCoreV1OptionsNodeProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +j! +x-kubernetes-action +connect +:– +core_v1&connect HEAD requests to proxy of Node*"connectCoreV1HeadNodeProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +j! +x-kubernetes-action +connect +B˜ +core_v1'connect PATCH requests to proxy of Node*#connectCoreV1PatchNodeProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsjR +x-kubernetes-group-version-kind/-group: "" +kind: NodeProxyOptions +version: v1 +j! +x-kubernetes-action +connect +J= +;9"7pathname of the NodeProxyOptions"name*string˜J5 +31"/pathpath to the resource"path*string˜Jb +`^\queryBPath is the URL path to use for the current proxy request to node."path2string Ò" +/api/v1/watch/limitranges´"² +core_v1vwatch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.*)watchCoreV1LimitRangeListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‹ +#/apis/apiextensions.k8s.io/v1beta1/ãà +apiextensions_v1beta1get available resources*#getApiextensionsV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsË +1/api/v1/namespaces/{namespace}/pods/{name}/status•Ù +core_v1 read status of the specified Pod*readCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JR +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jE +x-kubernetes-group-version-kind" version: v1 +group: "" +kind: Pod +” +core_v1#replace status of the specified Pod* replaceCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: +8 +6bodybody *& +$#/definitions/io.k8s.api.core.v1.PodBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod +< +2015 +3 +Created( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +Bº +core_v1,partially update status of the specified Pod*patchCoreV1NamespacedPodStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JR +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +j +x-kubernetes-actionpatch +J0 +.,"*pathname of the Pod"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Þ +B/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale—ÿ + apps_v1beta1&read scale of the specified Deployment*(readAppsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta1 +È + apps_v1beta1)replace scale of the specified Deployment*+replaceAppsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1beta1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1beta1.Scale + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.ScaleRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta1 +j +x-kubernetes-actionput +Bà + apps_v1beta12partially update scale of the specified Deployment*)patchAppsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta1 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Þ +B/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale—ÿ + apps_v1beta2&read scale of the specified ReplicaSet*(readAppsV1beta2NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta2 +j +x-kubernetes-actionget +È + apps_v1beta2)replace scale of the specified ReplicaSet*+replaceAppsV1beta2NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta2 +Bà + apps_v1beta22partially update scale of the specified ReplicaSet*)patchAppsV1beta2NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta2 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string  + +./api/v1/namespaces/{namespace}/services/{name}í*« +core_v1read the specified Service*readCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JV +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Service + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionget +œ +core_v1replace the specified Service*replaceCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> +< +:bodybody ** +(#/definitions/io.k8s.api.core.v1.ServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J˜ +@ +2019 +7 +Created, +* +(#/definitions/io.k8s.api.core.v1.Service + +401 + + Unauthorized +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.ServiceRhttpsj +x-kubernetes-actionput +jI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +*÷ +core_v1delete a Service*deleteCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jI +x-kubernetes-group-version-kind&$kind: Service +version: v1 +group: "" +Bº +core_v1&partially update the specified Service*patchCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JV +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Service + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionpatch +J4 +20".pathname of the Service"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‘J + /api/v1/nodesÿIÒ core_v1"list or watch objects of kind Node*listCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -4152,12 +12059,23 @@ jF x-kubernetes-group-version-kind#!group: "" kind: Node version: v1 -"š +"³ core_v1 create a Node*createCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; 9 7bodybody *' %#/definitions/io.k8s.api.core.v1.NodeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÒ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÒ +> +2027 +5 +Accepted) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + Unauthorized 8 2001 / @@ -4169,17 +12087,7 @@ version: v1 4 Created) ' -%#/definitions/io.k8s.api.core.v1.Node -> -2027 -5 -Accepted) -' -%#/definitions/io.k8s.api.core.v1.Node - -401 - - UnauthorizedRhttpsj +%#/definitions/io.k8s.api.core.v1.NodeRhttpsj x-kubernetes-actionpost jF x-kubernetes-group-version-kind#!group: "" @@ -4212,63 +12120,309 @@ C  401  - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jF + UnauthorizedRhttpsjF x-kubernetes-group-version-kind#!group: "" kind: Node version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï! -/api/v1/nodes/{name}¶!º -core_v1read the specified Node*readCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.core.v1.Node +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string –$ +0/api/v1/watch/namespaces/{namespace}/pods/{name}á#Ë +core_v1ªwatch changes to an object of kind Pod. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jE +x-kubernetes-group-version-kind" version: v1 +group: "" +kind: Pod +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J0 +.,"*pathname of the Pod"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean é +/apis/apps/v1beta2/ÑÎ + apps_v1beta2get available resources*getAppsV1beta2APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps•$ +L/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindingsÄ#à +rbacAuthorization_v1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*1watchRbacAuthorizationV1NamespacedRoleBindingList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û$ +Q/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}¥$Ž +rbacAuthorization_v1beta1«watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*+watchRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J1 +/-"+pathname of the Role"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ©# +)/api/v1/watch/namespaces/{namespace}/podsû"— +core_v1owatch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespacedPodList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ð$ +B/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}©$ +core_v1¼watch changes to an object of kind ReplicationController. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjW +x-kubernetes-group-version-kind42version: v1 +group: "" +kind: ReplicationController +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JB +@>"<path!name of the ReplicationController"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú +/apis/apps/v1/ÇÄ +apps_v1get available resources*getAppsV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp + +401 + + Unauthorized +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceListRhttpsÉ# +5/apis/apps/v1/watch/namespaces/{namespace}/daemonsets#« +apps_v1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*"watchAppsV1NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjM +x-kubernetes-group-version-kind*(version: v1 +group: apps +kind: DaemonSet +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ®, +;/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}î+É + apps_v1beta2read the specified DaemonSet*"readAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet  401  UnauthorizedRhttpsj x-kubernetes-actionget -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node -version: v1 -ç -core_v1replace the specified Node*replaceCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +È + apps_v1beta2replace the specified DaemonSet*%replaceAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE +C +Abodybody *1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¦ +B +200; 9 -7bodybody *' -%#/definitions/io.k8s.api.core.v1.NodeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J’ -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.core.v1.Node -= -2016 -4 -Created) -' -%#/definitions/io.k8s.api.core.v1.Node +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet +G +201@ +> +Created3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-version: v1beta2 +group: apps +kind: DaemonSet +j x-kubernetes-actionput -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node -version: v1 -*ä -core_v1 delete a Node*deleteCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +*Ž + apps_v1beta2delete a DaemonSet*$deleteAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -4293,34 +12447,5619 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node -version: v1 -B¡ -core_v1#partially update the specified Node*patchCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +BØ + apps_v1beta2(partially update the specified DaemonSet*#patchAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.core.v1.Node +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ·+ +B/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}ð*À +rbacAuthorization_v1beta1%read the specified ClusterRoleBinding*.readRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1beta1 +£ +rbacAuthorization_v1beta1(replace the specified ClusterRoleBinding*1replaceRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +L +Jbodybody *: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¸ +K +200D +B +OK< +: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding +P +201I +G +Created< +: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1beta1 +*Î +rbacAuthorization_v1beta1delete a ClusterRoleBinding*0deleteRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1beta1 +B¡ +rbacAuthorization_v1beta11partially update the specified ClusterRoleBinding*/patchRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding + +401 + + UnauthorizedRhttpsjp +x-kubernetes-group-version-kindMKkind: ClusterRoleBinding +version: v1beta1 +group: rbac.authorization.k8s.io +j +x-kubernetes-actionpatch +J? +=;"9pathname of the ClusterRoleBinding"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÿ" +$/api/v1/watch/replicationcontrollersÖ"Ô +core_v1watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.*4watchCoreV1ReplicationControllerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController version: v1 -J1 -/-"+pathname of the Node"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Á +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean å# + +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jS +x-kubernetes-group-version-kind0.version: v1beta2 +group: apps +kind: ReplicaSet +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ï +/apis/authentication.k8s.io/ÎË +authenticationget information of a group*getAuthenticationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttpsË +W/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/statusïÛ +autoscaling_v2beta24read status of the specified HorizontalPodAutoscaler*=readAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +Ö +autoscaling_v2beta27replace status of the specified HorizontalPodAutoscaler*@replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÐ + +401 + + Unauthorized +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionput +B¼ +autoscaling_v2beta2@partially update status of the specified HorizontalPodAutoscaler*>patchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionpatch +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Í + /apis/batch/¼¹ +batchget information of a group*getBatchAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttps²M +A/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpoliciesìL¡! + networking_v1+list or watch objects of kind NetworkPolicy*'listNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jf + +401 + + Unauthorized +K +200D +B +OK< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyListRhttpsj +x-kubernetes-actionlist +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +"¯ + networking_v1create a NetworkPolicy*)createNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jÿ +M +202F +D +Accepted8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicy +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.networking.v1.NetworkPolicyRhttpsj^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +j +x-kubernetes-actionpost +*à + networking_v1"delete collection of NetworkPolicy*3deleteNetworkingV1CollectionNamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Œ" +/apis/apps/v1beta2/statefulsetsè!æ + apps_v1beta2)list or watch objects of kind StatefulSet**listAppsV1beta2StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta2 +group: apps +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean …O +I/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers·NÚ! +autoscaling_v2beta25list or watch objects of kind HorizontalPodAutoscaler*7listAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jv +[ +200T +R +OKL +J +H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionlist +"˜ + +autoscaling_v2beta2 create a HorizontalPodAutoscaler*9createAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¯ + +401 + + Unauthorized +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler +] +202V +T +AcceptedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionpost +*‰! +autoscaling_v2beta2,delete collection of HorizontalPodAutoscaler*CdeleteAutoscalingV2beta2CollectionNamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string •- +F/apis/coordination.k8s.io/v1beta1/namespaces/{namespace}/leases/{name}Ê,à +coordination_v1beta1read the specified Lease*&readCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8kind: Lease +version: v1beta1 +group: coordination.k8s.io +j +x-kubernetes-actionget +ç +coordination_v1beta1replace the specified Lease*)replaceCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.coordination.v1beta1.LeaseBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +j +x-kubernetes-actionput +*¡ +coordination_v1beta1delete a Lease*(deleteCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +Bï +coordination_v1beta1$partially update the specified Lease*'patchCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +J2 +0.",pathname of the Lease"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ó+ +R/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}ü*® +rbacAuthorization_v1beta1read the specified RoleBinding*1readRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingRhttpsj +x-kubernetes-actionget +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +ƒ +rbacAuthorization_v1beta1!replace the specified RoleBinding*4replaceRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +*à +rbacAuthorization_v1beta1delete a RoleBinding*3deleteRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +j +x-kubernetes-action delete +B +rbacAuthorization_v1beta1*partially update the specified RoleBinding*2patchRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDkind: RoleBinding +version: v1beta1 +group: rbac.authorization.k8s.io +j +x-kubernetes-actionpatch +J8 +64"2pathname of the RoleBinding"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string  , +2/apis/storage.k8s.io/v1beta1/storageclasses/{name}é+Þ +storage_v1beta1read the specified StorageClass*readStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +é +storage_v1beta1"replace the specified StorageClass*!replaceStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK +I +Gbodybody *7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J² +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +M +201F +D +Created9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j_ +x-kubernetes-group-version-kind<:kind: StorageClass +version: v1beta1 +group: storage.k8s.io +* +storage_v1beta1delete a StorageClass* deleteStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +Bí +storage_v1beta1+partially update the specified StorageClass*patchStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +J9 +75"3pathname of the StorageClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‚0 +C/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}º/Ä +apiextensions_v1beta1+read the specified CustomResourceDefinition*0readApiextensionsV1beta1CustomResourceDefinition2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J’ +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jq +x-kubernetes-group-version-kindNLversion: v1beta1 +group: apiextensions.k8s.io +kind: CustomResourceDefinition +¬ + +apiextensions_v1beta1.replace the specified CustomResourceDefinition*3replaceApiextensionsV1beta1CustomResourceDefinition2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bz +x +vbodybody *f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition +| +201u +s +Createdh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +*Ó +apiextensions_v1beta1!delete a CustomResourceDefinition*2deleteApiextensionsV1beta1CustomResourceDefinition2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +j +x-kubernetes-action delete +BÓ +apiextensions_v1beta17partially update the specified CustomResourceDefinition*1patchApiextensionsV1beta1CustomResourceDefinition2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J’ +w +200p +n +OKh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jq +x-kubernetes-group-version-kindNLgroup: apiextensions.k8s.io +kind: CustomResourceDefinition +version: v1beta1 +JE +CA"?path$name of the CustomResourceDefinition"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string šL +)/apis/storage.k8s.io/v1/volumeattachmentsìK—! + +storage_v1.list or watch objects of kind VolumeAttachment*listStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.storage.v1.VolumeAttachmentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j^ +x-kubernetes-group-version-kind;9version: v1 +group: storage.k8s.io +kind: VolumeAttachment +"¥ + +storage_v1create a VolumeAttachment*createStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jÿ + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +M +202F +D +Accepted8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentRhttpsj +x-kubernetes-actionpost +j^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +*Ö + +storage_v1%delete collection of VolumeAttachment*)deleteStorageV1CollectionVolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¾$ +8/api/v1/watch/namespaces/{namespace}/podtemplates/{name}$ã +core_v1²watch changes to an object of kind PodTemplate. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.* watchCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the PodTemplate"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¥$ +3/api/v1/watch/namespaces/{namespace}/secrets/{name}í#Ô +core_v1­watch changes to an object of kind Secret. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#kind: Secret +version: v1 +group: "" +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J3 +1/"-pathname of the Secret"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Œ" +/apis/apps/v1beta1/statefulsetsè!æ + apps_v1beta1)list or watch objects of kind StatefulSet**listAppsV1beta1StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc + +401 + + Unauthorized +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetListRhttpsjT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¶/ +P/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}á. +autoscaling_v2beta2*read the specified HorizontalPodAutoscaler*7readAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionget +Æ +autoscaling_v2beta2-replace the specified HorizontalPodAutoscaler*:replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÐ +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +j +x-kubernetes-actionput +*Í +autoscaling_v2beta2 delete a HorizontalPodAutoscaler*9deleteAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta2 +B¬ +autoscaling_v2beta26partially update the specified HorizontalPodAutoscaler*8patchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jg +x-kubernetes-group-version-kindDBkind: HorizontalPodAutoscaler +version: v2beta2 +group: autoscaling +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ²% +V/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}×$­ +autoscaling_v2beta2¾watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*8watchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jg +x-kubernetes-group-version-kindDBkind: HorizontalPodAutoscaler +version: v2beta2 +group: autoscaling +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì" ++/apis/storage.k8s.io/v1beta1/watch/csinodes¼"º +storage_v1beta1swatch individual changes to a list of CSINode. deprecated: use the 'watch' parameter with a list operation instead.*watchStorageV1beta1CSINodeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: CSINode +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¹# +-/api/v1/watch/namespaces/{namespace}/services‡#£ +core_v1swatch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.* watchCoreV1NamespacedServiceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ø# +8/apis/apiregistration.k8s.io/v1/watch/apiservices/{name}»#€ +apiregistration_v1±watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.* watchApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ò" +-/apis/autoscaling/v1/horizontalpodautoscalers "ž +autoscaling_v15list or watch objects of kind HorizontalPodAutoscaler*8listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jq +V +200O +M +OKG +E +C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î! +/apis/apps/v1/deploymentsÐ!Î +apps_v1(list or watch objects of kind Deployment*$listAppsV1DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1.DeploymentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jN +x-kubernetes-group-version-kind+)kind: Deployment +version: v1 +group: apps +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ô+ +6/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}™+µ +apps_v1read the specified DaemonSet*readAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +ª +apps_v1replace the specified DaemonSet* replaceAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.apps.v1.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +*ÿ +apps_v1delete a DaemonSet*deleteAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +BÄ +apps_v1(partially update the specified DaemonSet*patchAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSetRhttpsj +x-kubernetes-actionpatch +jM +x-kubernetes-group-version-kind*(version: v1 +group: apps +kind: DaemonSet +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string å# + +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +° +apps_v1 replace the specified ReplicaSet*!replaceAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +*‚ +apps_v1delete a ReplicaSet* deleteAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +BÈ +apps_v1)partially update the specified ReplicaSet*patchAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ù# +E/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles¯#Ë +rbacAuthorization_v1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.**watchRbacAuthorizationV1NamespacedRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean # +4/apis/storage.k8s.io/v1beta1/watch/volumeattachments×"Õ +storage_v1beta1|watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.*'watchStorageV1beta1VolumeAttachmentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jc +x-kubernetes-group-version-kind@>version: v1beta1 +group: storage.k8s.io +kind: VolumeAttachment +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª- +"<path!name of the PersistentVolumeClaim"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string §M +5/api/v1/namespaces/{namespace}/replicationcontrollersíL ! +core_v13list or watch objects of kind ReplicationController*)listCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.core.v1.ReplicationControllerList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +"´ +core_v1create a ReplicationController*+createCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.core.v1.ReplicationControllerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J… + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController +O +202H +F +Accepted: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationControllerRhttpsjW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +j +x-kubernetes-actionpost +*Ý +core_v1*delete collection of ReplicationController*5deleteCoreV1CollectionNamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¹$ +7/api/v1/watch/namespaces/{namespace}/limitranges/{name}ý#à +core_v1±watch changes to an object of kind LimitRange. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the LimitRange"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì +/apis/apiextensions.k8s.io/ÌÉ + apiextensionsget information of a group*getApiextensionsAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi + +401 + + Unauthorized +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupRhttps‚ +B/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status»‡ + apps_v1beta2&read status of the specified DaemonSet*(readAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +Ø + apps_v1beta2)replace status of the specified DaemonSet*+replaceAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE +C +Abodybody *1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¦ +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet +G +201@ +> +Created3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +Bè + apps_v1beta22partially update status of the specified DaemonSet*)patchAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÙL +5/apis/apps/v1beta2/namespaces/{namespace}/replicasetsŸLŠ! + apps_v1beta2(list or watch objects of kind ReplicaSet*#listAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +"Œ + apps_v1beta2create a ReplicaSet*%createAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jó +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet +I +202B +@ +Accepted4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +*Í + apps_v1beta2delete collection of ReplicaSet*/deleteAppsV1beta2CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Í! +/api/v1/eventsº!¸ +core_v1#list or watch objects of kind Event*listCoreV1EventForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.EventList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean È$ +:/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}‰$é +core_v1´watch changes to an object of kind ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*"watchCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jO +x-kubernetes-group-version-kind,*group: "" +kind: ResourceQuota +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: +86"4pathname of the ResourceQuota"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¶" +/api/v1/watch/podsŸ" +core_v1owatch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1PodListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ŠN +K/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindingsºM½! +rbacAuthorization_v1beta1)list or watch objects of kind RoleBinding*1listRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +ji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: RoleBinding +version: v1beta1 +" +rbacAuthorization_v1beta1create a RoleBinding*3createRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jö +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding +J +202C +A +Accepted5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +ji +x-kubernetes-group-version-kindFDkind: RoleBinding +version: v1beta1 +group: rbac.authorization.k8s.io +*ÿ +rbacAuthorization_v1beta1 delete collection of RoleBinding*=deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDkind: RoleBinding +version: v1beta1 +group: rbac.authorization.k8s.io +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ›L +*/apis/scheduling.k8s.io/v1/priorityclassesìK—! + scheduling_v1+list or watch objects of kind PriorityClass*listSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jf + +401 + + Unauthorized +K +200D +B +OK< +: +8#/definitions/io.k8s.api.scheduling.v1.PriorityClassListRhttpsj^ +x-kubernetes-group-version-kind;9group: scheduling.k8s.io +kind: PriorityClass +version: v1 +j +x-kubernetes-actionlist +"¥ + scheduling_v1create a PriorityClass*createSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ +H +Fbodybody *6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jÿ +L +201E +C +Created8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClass +M +202F +D +Accepted8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClass + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.scheduling.v1.PriorityClassRhttpsj +x-kubernetes-actionpost +j^ +x-kubernetes-group-version-kind;9group: scheduling.k8s.io +kind: PriorityClass +version: v1 +*Ö + scheduling_v1"delete collection of PriorityClass*)deleteSchedulingV1CollectionPriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j^ +x-kubernetes-group-version-kind;9group: scheduling.k8s.io +kind: PriorityClass +version: v1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¢M ++/apis/apiregistration.k8s.io/v1/apiservicesòL´! +apiregistration_v1(list or watch objects of kind APIService*listApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J} +b +200[ +Y +OKS +Q +O#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j` +x-kubernetes-group-version-kind=;kind: APIService +group: apiregistration.k8s.io +version: v1 +"ˆ + +apiregistration_v1create an APIService*!createApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ba +_ +]bodybody *M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÄ +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService +c +201\ +Z +CreatedO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService +d +202] +[ +AcceptedO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService + +401 + + UnauthorizedRhttpsj` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +j +x-kubernetes-actionpost +*Ü +apiregistration_v1delete collection of APIService*+deleteApiregistrationV1CollectionAPIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string é +/apis/coordination.k8s.io/ÊÇ + coordinationget information of a group*getCoordinationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttpsó +/apis/scheduling.k8s.io/v1/ÓÐ + scheduling_v1get available resources*getSchedulingV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsèL +6/apis/apps/v1beta1/namespaces/{namespace}/statefulsets­LŽ! + apps_v1beta1)list or watch objects of kind StatefulSet*$listAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +"“ + apps_v1beta1create a StatefulSet*&createAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jö +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet +J +202C +A +Accepted5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetRhttpsj +x-kubernetes-actionpost +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +*Ð + apps_v1beta1 delete collection of StatefulSet*0deleteAppsV1beta1CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Š% +M/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}¸$’ +policy_v1beta1ºwatch changes to an object of kind PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*/watchPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j^ +x-kubernetes-group-version-kind;9version: v1beta1 +group: policy +kind: PodDisruptionBudget +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J@ +><":pathname of the PodDisruptionBudget"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean š# +3/apis/rbac.authorization.k8s.io/v1beta1/watch/rolesâ"à +rbacAuthorization_v1beta1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.*5watchRbacAuthorizationV1beta1RoleListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean H +/logs/>< +logs*logFileListHandlerJ + +401 + + UnauthorizedRhttpsë +C/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status£¡ +core_v12read status of the specified ReplicationController*/readCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +€ +core_v15replace status of the specified ReplicationController*2replaceCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.core.v1.ReplicationControllerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J´ +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationControllerRhttpsj +x-kubernetes-actionput +jW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +B‚ +core_v1>partially update status of the specified ReplicationController*0patchCoreV1NamespacedReplicationControllerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController + +401 + + UnauthorizedRhttpsjW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +j +x-kubernetes-actionpatch +JB +@>"<path!name of the ReplicationController"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string · +=/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/statusõó +apps_v1&read status of the specified DaemonSet*#readAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jM +x-kubernetes-group-version-kind*(kind: DaemonSet +version: v1 +group: apps +º +apps_v1)replace status of the specified DaemonSet*&replaceAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.apps.v1.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +BÔ +apps_v12partially update status of the specified DaemonSet*$patchAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ð$ +A/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name}Š$î + apps_v1beta2°watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jR +x-kubernetes-group-version-kind/-group: apps +kind: DaemonSet +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Á# +//api/v1/watch/namespaces/{namespace}/configmaps#© +core_v1uwatch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1NamespacedConfigMapList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‘L ++/api/v1/namespaces/{namespace}/podtemplatesáKø +core_v1)list or watch objects of kind PodTemplate*listCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.core.v1.PodTemplateList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jM +x-kubernetes-group-version-kind*(version: v1 +group: "" +kind: PodTemplate +"î +core_v1create a PodTemplate*!createCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.core.v1.PodTemplateBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jç +E +202> +< +Accepted0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate + +401 + + Unauthorized +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplateRhttpsj +x-kubernetes-actionpost +jM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +*¿ +core_v1 delete collection of PodTemplate*+deleteCoreV1CollectionNamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ð$ +B/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}©$ +core_v1¼watch changes to an object of kind PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JB +@>"<path!name of the PersistentVolumeClaim"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Æ$ +>/apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name}ƒ$å +apps_v1²watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.* watchAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*version: v1 +group: apps +kind: StatefulSet +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the StatefulSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¢ +D/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/statusÙ + apps_v1beta1(read status of the specified StatefulSet**readAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +ä + apps_v1beta1+replace status of the specified StatefulSet*-replaceAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta1 +group: apps +Bð + apps_v1beta14partially update status of the specified StatefulSet*+patchAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +J8 +64"2pathname of the StatefulSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‡" +/apis/apps/v1beta2/deploymentsä!â + apps_v1beta2(list or watch objects of kind Deployment*)listAppsV1beta2DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb + +401 + + Unauthorized +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta2.DeploymentListRhttpsjS +x-kubernetes-group-version-kind0.kind: Deployment +version: v1beta2 +group: apps +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ß +/apis/autoscaling/ÈÅ + autoscalingget information of a group*getAutoscalingAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttpsú! +/api/v1/serviceaccountsÞ!Ü +core_v1,list or watch objects of kind ServiceAccount*(listCoreV1ServiceAccountForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Ja + +401 + + Unauthorized +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.core.v1.ServiceAccountListRhttpsj +x-kubernetes-actionlist +jP +x-kubernetes-group-version-kind-+group: "" +kind: ServiceAccount +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ê +/api/À½ +coreget available API versions*getCoreAPIVersions2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJl +Q +200J +H +OKB +@ +>#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions + +401 + + UnauthorizedRhttps„ +'/api/v1/persistentvolumes/{name}/status؃ +core_v1-read status of the specified PersistentVolume* readCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +Ø +core_v10replace status of the specified PersistentVolume*#replaceCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.core.v1.PersistentVolumeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jR +x-kubernetes-group-version-kind/-kind: PersistentVolume +version: v1 +group: "" +Bä +core_v19partially update status of the specified PersistentVolume*!patchCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jR +x-kubernetes-group-version-kind/-group: "" +kind: PersistentVolume +version: v1 +J= +;9"7pathname of the PersistentVolume"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string # +0/apis/networking.k8s.io/v1/watch/networkpoliciesØ"Ö + networking_v1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*2watchNetworkingV1NetworkPolicyListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j^ +x-kubernetes-group-version-kind;9group: networking.k8s.io +kind: NetworkPolicy +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean À +N/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/statusí· +policy_v1beta10read status of the specified PodDisruptionBudget*4readPolicyV1beta1NamespacedPodDisruptionBudgetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ji +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +  +policy_v1beta13replace status of the specified PodDisruptionBudget*7replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ +O +Mbodybody *= +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¾ +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +S +201L +J +Created? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +B˜ +policy_v1beta1<":pathname of the PodDisruptionBudget"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‘M +6/apis/rbac.authorization.k8s.io/v1/clusterrolebindingsÖL»! +rbacAuthorization_v10list or watch objects of kind ClusterRoleBinding*)listRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Je +J +200C +A +OK; +9 +7#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jk +x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1 +"Æ +rbacAuthorization_v1create a ClusterRoleBinding*+createRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jü +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding +L +202E +C +Accepted7 +5 +3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding + +401 + + Unauthorized +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingRhttpsjk +x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1 +j +x-kubernetes-actionpost +*û +rbacAuthorization_v1'delete collection of ClusterRoleBinding*5deleteRbacAuthorizationV1CollectionClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jk +x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string üK +'/apis/storage.k8s.io/v1beta1/csidriversÐK! +storage_v1beta1'list or watch objects of kind CSIDriver*listStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.storage.v1beta1.CSIDriverList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j\ +x-kubernetes-group-version-kind97kind: CSIDriver +version: v1beta1 +group: storage.k8s.io +"— +storage_v1beta1create a CSIDriver*createStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BH +F +Dbodybody *4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriverBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jù +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver +J +201C +A +Created6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver +K +202D +B +Accepted6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +*Ð +storage_v1beta1delete collection of CSIDriver*'deleteStorageV1beta1CollectionCSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string á +//api/v1/namespaces/{namespace}/pods/{name}/exec­  +core_v1#connect GET requests to exec of Pod*!connectCoreV1GetNamespacedPodExec2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jP +x-kubernetes-group-version-kind-+group: "" +kind: PodExecOptions +version: v1 +"’ +core_v1$connect POST requests to exec of Pod*"connectCoreV1PostNamespacedPodExec2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jP +x-kubernetes-group-version-kind-+group: "" +kind: PodExecOptions +version: v1 +Ju +sqoqueryRCommand is the remote command to execute. argv array. Not executed within a shell."command2string J˜ +•’querypContainer in which to execute the command. Defaults to only container if there is only one container in the pod." container2string J; +97"5pathname of the PodExecOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜Jq +omkqueryNRedirect the standard error stream of the pod for this call. Defaults to true."stderr2boolean Jq +omkqueryORedirect the standard input stream of the pod for this call. Defaults to false."stdin2boolean Jr +pnlqueryORedirect the standard output stream of the pod for this call. Defaults to true."stdout2boolean Jx +vtrqueryXTTY if true indicates that a tty will be allocated for the exec call. Defaults to false."tty2boolean ’ +B/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scaleË +core_v11read scale of the specified ReplicationController*.readCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jP +x-kubernetes-group-version-kind-+version: v1 +group: autoscaling +kind: Scale +Ü +core_v14replace scale of the specified ReplicationController*1replaceCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC +A +?bodybody */ +-#/definitions/io.k8s.api.autoscaling.v1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¢ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale +E +201> +< +Created1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jP +x-kubernetes-group-version-kind-+kind: Scale +version: v1 +group: autoscaling +Bð +core_v1=partially update scale of the specified ReplicationController*/patchCoreV1NamespacedReplicationControllerScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‹ +5/api/v1/namespaces/{namespace}/services/{name}/statusÑé +core_v1$read status of the specified Service*!readCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JV + +401 + + Unauthorized +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.ServiceRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionget +¬ +core_v1'replace status of the specified Service*$replaceCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> +< +:bodybody ** +(#/definitions/io.k8s.api.core.v1.ServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J˜ +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Service +@ +2019 +7 +Created, +* +(#/definitions/io.k8s.api.core.v1.Service + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionput +BÊ +core_v10partially update status of the specified Service*"patchCoreV1NamespacedServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JV +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Service + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionpatch +J4 +20".pathname of the Service"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¡M +D/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolesØL¡! +rbacAuthorization_v1beta1"list or watch objects of kind Role**listRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.rbac.v1beta1.RoleList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +"‘ +rbacAuthorization_v1beta1 create a Role*,createRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.rbac.v1beta1.RoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Já + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.rbac.v1beta1.Role +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.rbac.v1beta1.Role +C +202< +: +Accepted. +, +*#/definitions/io.k8s.api.rbac.v1beta1.RoleRhttpsjb +x-kubernetes-group-version-kind?=kind: Role +version: v1beta1 +group: rbac.authorization.k8s.io +j +x-kubernetes-actionpost +*ê +rbacAuthorization_v1beta1delete collection of Role*6deleteRbacAuthorizationV1beta1CollectionNamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ˜# +6/apis/apiregistration.k8s.io/v1beta1/watch/apiservicesÝ"Û +apiregistration_v1beta1vwatch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.*)watchApiregistrationV1beta1APIServiceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +je +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean š, +:/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}Û+Å + batch_v1beta1read the specified CronJob*!readBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 + + batch_v1beta1replace the specified CronJob*$replaceBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD +B +@bodybody *0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¤ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob +F +201? += +Created2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob + +401 + + UnauthorizedRhttpsjQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +j +x-kubernetes-actionput +*‹ + batch_v1beta1delete a CronJob*#deleteBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +BÔ + batch_v1beta1&partially update the specified CronJob*"patchBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J\ + +401 + + Unauthorized +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJobRhttpsj +x-kubernetes-actionpatch +jQ +x-kubernetes-group-version-kind.,kind: CronJob +version: v1beta1 +group: batch +J4 +20".pathname of the CronJob"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string », +A/apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}õ+Ì +coordination_v1read the specified Lease*!readCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +É +coordination_v1replace the specified Lease*$replaceCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD +B +@bodybody *0 +.#/definitions/io.k8s.api.coordination.v1.LeaseBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¤ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease +F +201? += +Created2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +j +x-kubernetes-actionput +*’ +coordination_v1delete a Lease*#deleteCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +BÛ +coordination_v1$partially update the specified Lease*"patchCoordinationV1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J\ + +401 + + Unauthorized +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.coordination.v1.LeaseRhttpsj +x-kubernetes-actionpatch +jX +x-kubernetes-group-version-kind53kind: Lease +version: v1 +group: coordination.k8s.io +J2 +0.",pathname of the Lease"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string # +1/apis/storage.k8s.io/v1beta1/watch/storageclassesË"É +storage_v1beta1xwatch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.*#watchStorageV1beta1StorageClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‚L +*/api/v1/namespaces/{namespace}/limitrangesÓKô +core_v1(list or watch objects of kind LimitRange*listCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.core.v1.LimitRangeList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +"ç +core_v1create a LimitRange* createCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.core.v1.LimitRangeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jä +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange +D +202= +; +Accepted/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange + +401 + + UnauthorizedRhttpsjL +x-kubernetes-group-version-kind)'kind: LimitRange +version: v1 +group: "" +j +x-kubernetes-actionpost +*¼ +core_v1delete collection of LimitRange**deleteCoreV1CollectionNamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ë +C/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status£¡ +core_v12read status of the specified PersistentVolumeClaim*/readCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +€ +core_v15replace status of the specified PersistentVolumeClaim*2replaceCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J´ + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimRhttpsj +x-kubernetes-actionput +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +B‚ +core_v1>partially update status of the specified PersistentVolumeClaim*0patchCoreV1NamespacedPersistentVolumeClaimStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jd + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimRhttpsj +x-kubernetes-actionpatch +jW +x-kubernetes-group-version-kind42group: "" +kind: PersistentVolumeClaim +version: v1 +JB +@>"<path!name of the PersistentVolumeClaim"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string –" +!/apis/apps/v1/controllerrevisionsð!î +apps_v10list or watch objects of kind ControllerRevision*,listAppsV1ControllerRevisionForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Je +J +200C +A +OK; +9 +7#/definitions/io.k8s.api.apps.v1.ControllerRevisionList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jV +x-kubernetes-group-version-kind31group: apps +kind: ControllerRevision +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ž# +,/apis/apps/v1beta1/watch/controllerrevisionsÝ"Û + apps_v1beta1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*6watchAppsV1beta1ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î# +?/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingressesª#Æ +extensions_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*+watchExtensionsV1beta1NamespacedIngressList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean “# +./apis/extensions/v1beta1/watch/networkpoliciesà"Þ +extensions_v1beta1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*7watchExtensionsV1beta1NetworkPolicyListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +j\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ­" +-/apis/rbac.authorization.k8s.io/v1beta1/rolesû!ù +rbacAuthorization_v1beta1"list or watch objects of kind Role*0listRbacAuthorizationV1beta1RoleForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.rbac.v1beta1.RoleList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jb +x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io +kind: Role +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ŽL +0/apis/apps/v1/namespaces/{namespace}/replicasetsÙKö +apps_v1(list or watch objects of kind ReplicaSet*listAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1.ReplicaSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jN +x-kubernetes-group-version-kind+)kind: ReplicaSet +version: v1 +group: apps +"é +apps_v1create a ReplicaSet* createAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jä +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet +D +202= +; +Accepted/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +j +x-kubernetes-actionpost +*¾ +apps_v1delete collection of ReplicaSet**deleteAppsV1CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string í$ +M/apis/networking.k8s.io/v1beta1/watch/namespaces/{namespace}/ingresses/{name}›$ +networking_v1beta1®watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8kind: Ingress +version: v1beta1 +group: networking.k8s.io +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 +20".pathname of the Ingress"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ø) +6/apis/rbac.authorization.k8s.io/v1/clusterroles/{name}) +rbacAuthorization_v1read the specified ClusterRole*"readRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +j +x-kubernetes-actionget +Û +rbacAuthorization_v1!replace the specified ClusterRole*%replaceRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.rbac.v1.ClusterRoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +*ª +rbacAuthorization_v1delete a ClusterRole*$deleteRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?kind: ClusterRole +version: v1 +group: rbac.authorization.k8s.io +j +x-kubernetes-action delete +Bñ +rbacAuthorization_v1*partially update the specified ClusterRole*#patchRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +j +x-kubernetes-actionpatch +J8 +64"2pathname of the ClusterRole"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Œ$ +=/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}Ê# +apiregistration_v1beta1±watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*%watchApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsje +x-kubernetes-group-version-kindB@group: apiregistration.k8s.io +version: v1beta1 +kind: APIService +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean èL +6/apis/apps/v1beta2/namespaces/{namespace}/statefulsets­LŽ! + apps_v1beta2)list or watch objects of kind StatefulSet*$listAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta2 +"“ + apps_v1beta2create a StatefulSet*&createAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.apps.v1beta2.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jö + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet +J +202C +A +Accepted5 +3 +1#/definitions/io.k8s.api.apps.v1beta2.StatefulSetRhttpsj +x-kubernetes-actionpost +jT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta2 +group: apps +*Ð + apps_v1beta2 delete collection of StatefulSet*0deleteAppsV1beta2CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta2 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ô# +7/apis/scheduling.k8s.io/v1/watch/priorityclasses/{name}¸#ú + scheduling_v1´watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchSchedulingV1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9version: v1 +group: scheduling.k8s.io +kind: PriorityClass +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: +86"4pathname of the PriorityClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¸K +%/api/v1/namespaces/{namespace}/eventsŽKà +core_v1#list or watch objects of kind Event*listCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JX + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.EventListRhttpsj +x-kubernetes-actionlist +jG +x-kubernetes-group-version-kind$"version: v1 +group: "" +kind: Event +"Å +core_v1create an Event*createCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B< +: +8bodybody *( +&#/definitions/io.k8s.api.core.v1.EventBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÕ +9 +2002 +0 +OK* +( +&#/definitions/io.k8s.api.core.v1.Event +> +2017 +5 +Created* +( +&#/definitions/io.k8s.api.core.v1.Event +? +2028 +6 +Accepted* +( +&#/definitions/io.k8s.api.core.v1.Event + +401 + + UnauthorizedRhttpsjG +x-kubernetes-group-version-kind$"kind: Event +version: v1 +group: "" +j +x-kubernetes-actionpost +*­ +core_v1delete collection of Event*%deleteCoreV1CollectionNamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jG +x-kubernetes-group-version-kind$"group: "" +kind: Event +version: v1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¼$ + -< -:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +jM +x-kubernetes-group-version-kind*(group: "" +kind: PodTemplate version: v1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -4683,9 +18224,160 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¥J -/api/v1/persistentvolumes‡J‚! -core_v1.list or watch objects of kind PersistentVolume*listCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¯" +&/apis/apps/v1beta2/controllerrevisions„"‚ + apps_v1beta20list or watch objects of kind ControllerRevision*1listAppsV1beta2ControllerRevisionForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jj +O +200H +F +OK@ +> +<#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Á, + +<:"8pathname of the PodSecurityPolicy"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ßK +&/apis/storage.k8s.io/v1/storageclasses´K‡! + +storage_v1*list or watch objects of kind StorageClass*listStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb +G +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.storage.v1.StorageClassList + +401 + + UnauthorizedRhttpsjZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: StorageClass version: v1 -*Ä -core_v1%delete collection of PersistentVolume*&deleteCoreV1CollectionPersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +j +x-kubernetes-actionlist +"‰ + +storage_v1create a StorageClass*createStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.storage.v1.StorageClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jó +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass +I +202B +@ +Accepted4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass + +401 + + Unauthorized +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClassRhttpsj +x-kubernetes-actionpost +jZ +x-kubernetes-group-version-kind75version: v1 +group: storage.k8s.io +kind: StorageClass +*Ê + +storage_v1!delete collection of StorageClass*%deleteStorageV1CollectionStorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -4777,63 +18695,229 @@ C  401  - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume + UnauthorizedRhttpsjZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: StorageClass version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ³# - /api/v1/persistentvolumes/{name}Ž#ê -core_v1#read the specified PersistentVolume*readCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string à! +/api/v1/endpointsÊ!È +core_v1'list or watch objects of kind Endpoints*#listCoreV1EndpointsForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.core.v1.EndpointsList  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume + UnauthorizedRhttpsj +x-kubernetes-actionlist +jK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints version: v1 -¯ -core_v1&replace the specified PersistentVolume*replaceCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.core.v1.PersistentVolumeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Þ +7/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}¢› +core_v1$connect GET requests to proxy of Pod**connectCoreV1GetNamespacedPodProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +› +core_v1$connect PUT requests to proxy of Pod**connectCoreV1PutNamespacedPodProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +" +core_v1%connect POST requests to proxy of Pod*+connectCoreV1PostNamespacedPodProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsjQ +x-kubernetes-group-version-kind.,group: "" +kind: PodProxyOptions +version: v1 +j! +x-kubernetes-action +connect +*¡ +core_v1'connect DELETE requests to proxy of Pod*-connectCoreV1DeleteNamespacedPodProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,kind: PodProxyOptions +version: v1 +group: "" +2£ +core_v1(connect OPTIONS requests to proxy of Pod*.connectCoreV1OptionsNamespacedPodProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,version: v1 +group: "" +kind: PodProxyOptions +: +core_v1%connect HEAD requests to proxy of Pod*+connectCoreV1HeadNamespacedPodProxyWithPath2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsj! +x-kubernetes-action +connect +jQ +x-kubernetes-group-version-kind.,kind: PodProxyOptions +version: v1 +group: "" +BŸ +core_v1&connect PATCH requests to proxy of Pod*,connectCoreV1PatchNamespacedPodProxyWithPath2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsjQ +x-kubernetes-group-version-kind.,version: v1 +group: "" +kind: PodProxyOptions +j! +x-kubernetes-action +connect +J< +:8"6pathname of the PodProxyOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜J5 +31"/pathpath to the resource"path*string˜Ja +_][queryAPath is the URL path to use for the current proxy request to pod."path2string ô* +1/apis/batch/v1/namespaces/{namespace}/jobs/{name}¾*¡ +batch_v1read the specified Job*readBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j +x-kubernetes-actionget +Œ +batch_v1replace the specified Job*replaceBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.batch.v1.JobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J’ +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.batch.v1.Job  401  UnauthorizedRhttpsj x-kubernetes-actionput -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job version: v1 -*ˆ -core_v1delete a PersistentVolume*deleteCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +*ð +batch_v1 delete a Job*deleteBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -4858,1563 +18942,141 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job version: v1 -BÑ -core_v1/partially update the specified PersistentVolume*patchCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +B° +batch_v1"partially update the specified Job*patchBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.batch.v1.Job  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j x-kubernetes-actionpatch -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -J= -;9"7pathname of the PersistentVolume"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string è -'/api/v1/persistentvolumes/{name}/status¼ƒ -core_v1-read status of the specified PersistentVolume* readCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -¿ -core_v10replace status of the specified PersistentVolume*#replaceCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.core.v1.PersistentVolumeBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -Bá -core_v19partially update status of the specified PersistentVolume*!patchCoreV1PersistentVolumeStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +J0 +.,"*pathname of the Job"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string é, +6/apis/scheduling.k8s.io/v1beta1/priorityclasses/{name}®,î +scheduling_v1beta1 read the specified PriorityClass*"readSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jg L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.core.v1.PersistentVolume - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -J= -;9"7pathname of the PersistentVolume"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¼" - /api/v1/pods«"° -core_v1!list or watch objects of kind Pod*listCoreV1PodForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JV -; -2004 -2 -OK, -* -(#/definitions/io.k8s.api.core.v1.PodList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ä" -/api/v1/podtemplatesË"Ð -core_v1)list or watch objects of kind PodTemplate*%listCoreV1PodTemplateForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ +200E C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.core.v1.PodTemplateList +OK= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean –# -/api/v1/replicationcontrollersó"ø -core_v13list or watch objects of kind ReplicationController*/listCoreV1ReplicationControllerForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh + UnauthorizedRhttpsjc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +j +x-kubernetes-actionget + +scheduling_v1beta1#replace the specified PriorityClass*%replaceSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO M -200F -D -OK> -< -:#/definitions/io.k8s.api.core.v1.ReplicationControllerList +Kbodybody *; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jº  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î" -/api/v1/resourcequotasÓ"Ø -core_v1+list or watch objects of kind ResourceQuota*'listCoreV1ResourceQuotaForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J` -E -200> -< -OK6 -4 -2#/definitions/io.k8s.api.core.v1.ResourceQuotaList + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +Q +201J +H +Created= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassRhttpsjc +x-kubernetes-group-version-kind@>version: v1beta1 +group: scheduling.k8s.io +kind: PriorityClass +j +x-kubernetes-actionput +*© +scheduling_v1beta1delete a PriorityClass*$deleteSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ë" -/api/v1/secrets·"¼ -core_v1$list or watch objects of kind Secret* listCoreV1SecretForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.core.v1.SecretList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ó" -/api/v1/serviceaccounts×"Ü -core_v1,list or watch objects of kind ServiceAccount*(listCoreV1ServiceAccountForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.core.v1.ServiceAccountList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ð" -/api/v1/services»"À -core_v1%list or watch objects of kind Service*!listCoreV1ServiceForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.core.v1.ServiceList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ç# -/api/v1/watch/configmapsª#¯ -core_v1uwatch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.*(watchCoreV1ConfigMapListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Æ# -/api/v1/watch/endpointsª#¯ -core_v1uwatch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.*(watchCoreV1EndpointsListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ·# -/api/v1/watch/eventsž#£ -core_v1qwatch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.*$watchCoreV1EventListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ë# -/api/v1/watch/limitranges­#² -core_v1vwatch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.*)watchCoreV1LimitRangeListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ·# -/api/v1/watch/namespacesš#Ÿ -core_v1uwatch individual changes to a list of Namespace. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespaceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean º$ -//api/v1/watch/namespaces/{namespace}/configmaps†$© -core_v1uwatch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1NamespacedConfigMapList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ­% -6/api/v1/watch/namespaces/{namespace}/configmaps/{name}ò$Ý -core_v1°watch changes to an object of kind ConfigMap. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + UnauthorizedRhttpsj +x-kubernetes-action delete +jc +x-kubernetes-group-version-kind@>version: v1beta1 +group: scheduling.k8s.io +kind: PriorityClass +Bý +scheduling_v1beta1,partially update the specified PriorityClass*#patchSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass  401  UnauthorizedRhttpsj -x-kubernetes-actionwatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: ConfigMap -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 -42"0pathname of the ConfigMap"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¹$ -./api/v1/watch/namespaces/{namespace}/endpoints†$© -core_v1uwatch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1NamespacedEndpointsList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¬% -5/api/v1/watch/namespaces/{namespace}/endpoints/{name}ò$Ý -core_v1°watch changes to an object of kind Endpoints. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedEndpoints2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: Endpoints -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 -42"0pathname of the Endpoints"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª$ -+/api/v1/watch/namespaces/{namespace}/eventsú# -core_v1qwatch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespacedEventList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ™% -2/api/v1/watch/namespaces/{namespace}/events/{name}â$Ñ -core_v1¬watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedEvent2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jG -x-kubernetes-group-version-kind$"group: "" -kind: Event -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J2 -0.",pathname of the Event"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¾$ -0/api/v1/watch/namespaces/{namespace}/limitranges‰$¬ -core_v1vwatch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.*#watchCoreV1NamespacedLimitRangeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ²% -7/api/v1/watch/namespaces/{namespace}/limitranges/{name}ö$à -core_v1±watch changes to an object of kind LimitRange. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jL -x-kubernetes-group-version-kind)'group: "" -kind: LimitRange -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the LimitRange"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ë$ -;/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims«$Î -core_v1watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.*.watchCoreV1NamespacedPersistentVolumeClaimList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean é% -B/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}¢% -core_v1¼watch changes to an object of kind PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchCoreV1NamespacedPersistentVolumeClaim2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jW -x-kubernetes-group-version-kind42group: "" -kind: PersistentVolumeClaim -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JB -@>"<path!name of the PersistentVolumeClaim"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¢$ -)/api/v1/watch/namespaces/{namespace}/podsô#— -core_v1owatch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespacedPodList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean % -0/api/v1/watch/namespaces/{namespace}/pods/{name}Ú$Ë -core_v1ªwatch changes to an object of kind Pod. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J0 -.,"*pathname of the Pod"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Â$ -1/api/v1/watch/namespaces/{namespace}/podtemplatesŒ$¯ -core_v1wwatch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.*$watchCoreV1NamespacedPodTemplateList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ·% -8/api/v1/watch/namespaces/{namespace}/podtemplates/{name}ú$ã -core_v1²watch changes to an object of kind PodTemplate. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.* watchCoreV1NamespacedPodTemplate2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 -64"2pathname of the PodTemplate"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ë$ -;/api/v1/watch/namespaces/{namespace}/replicationcontrollers«$Î -core_v1watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.*.watchCoreV1NamespacedReplicationControllerList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean é% -B/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}¢% -core_v1¼watch changes to an object of kind ReplicationController. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchCoreV1NamespacedReplicationController2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JB -@>"<path!name of the ReplicationController"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ê$ -3/api/v1/watch/namespaces/{namespace}/resourcequotas’$µ -core_v1ywatch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.*&watchCoreV1NamespacedResourceQuotaList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Á% -:/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}‚%é -core_v1´watch changes to an object of kind ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*"watchCoreV1NamespacedResourceQuota2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: -86"4pathname of the ResourceQuota"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ®$ -,/api/v1/watch/namespaces/{namespace}/secretsý#  -core_v1rwatch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespacedSecretList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ž% -3/api/v1/watch/namespaces/{namespace}/secrets/{name}æ$Ô -core_v1­watch changes to an object of kind Secret. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedSecret2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J3 -1/"-pathname of the Secret"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Î$ -4/api/v1/watch/namespaces/{namespace}/serviceaccounts•$¸ -core_v1zwatch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.*'watchCoreV1NamespacedServiceAccountList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Æ% -;/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}†%ì -core_v1µwatch changes to an object of kind ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchCoreV1NamespacedServiceAccount2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J; -97"5pathname of the ServiceAccount"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ²$ --/api/v1/watch/namespaces/{namespace}/services€$£ -core_v1swatch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.* watchCoreV1NamespacedServiceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean £% -4/api/v1/watch/namespaces/{namespace}/services/{name}ê$× -core_v1®watch changes to an object of kind Service. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 -20".pathname of the Service"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª$ -/api/v1/watch/namespaces/{name}†$Ó -core_v1°watch changes to an object of kind Namespace. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jK -x-kubernetes-group-version-kind(&group: "" -kind: Namespace -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 -42"0pathname of the Namespace"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean £# -/api/v1/watch/nodes‹# -core_v1pwatch individual changes to a list of Node. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NodeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‘$ -/api/v1/watch/nodes/{name}ò#Ä -core_v1«watch changes to an object of kind Node. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jF -x-kubernetes-group-version-kind#!group: "" -kind: Node -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J1 -/-"+pathname of the Node"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ø# -$/api/v1/watch/persistentvolumeclaimsÏ#Ô +x-kubernetes-actionpatch +jc +x-kubernetes-group-version-kind@>group: scheduling.k8s.io +kind: PriorityClass +version: v1beta1 +J: +86"4pathname of the PriorityClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÿ" +$/api/v1/watch/persistentvolumeclaimsÖ"Ô core_v1watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.*4watchCoreV1PersistentVolumeClaimListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I @@ -6436,8 +19098,7 @@ J ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -6450,378 +19111,9 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ó# -/api/v1/watch/persistentvolumes¯#´ -core_v1|watch individual changes to a list of PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1PersistentVolumeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Í$ -&/api/v1/watch/persistentvolumes/{name}¢$è -core_v1·watch changes to an object of kind PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1PersistentVolume2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jR -x-kubernetes-group-version-kind/-group: "" -kind: PersistentVolume -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J= -;9"7pathname of the PersistentVolume"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¯# -/api/v1/watch/pods˜# -core_v1owatch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.*"watchCoreV1PodListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jE -x-kubernetes-group-version-kind" group: "" -kind: Pod -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ï# -/api/v1/watch/podtemplates°#µ -core_v1wwatch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.**watchCoreV1PodTemplateListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jM -x-kubernetes-group-version-kind*(group: "" -kind: PodTemplate -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ø# -$/api/v1/watch/replicationcontrollersÏ#Ô -core_v1watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.*4watchCoreV1ReplicationControllerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jW -x-kubernetes-group-version-kind42group: "" -kind: ReplicationController -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ×# -/api/v1/watch/resourcequotas¶#» -core_v1ywatch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.*,watchCoreV1ResourceQuotaListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jO -x-kubernetes-group-version-kind,*group: "" -kind: ResourceQuota -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean »# -/api/v1/watch/secrets¡#¦ -core_v1rwatch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.*%watchCoreV1SecretListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jH -x-kubernetes-group-version-kind%#group: "" -kind: Secret -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Û# -/api/v1/watch/serviceaccounts¹#¾ -core_v1zwatch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.*-watchCoreV1ServiceAccountListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jP -x-kubernetes-group-version-kind-+group: "" -kind: ServiceAccount -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¿# -/api/v1/watch/services¤#© -core_v1swatch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.*&watchCoreV1ServiceListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jI -x-kubernetes-group-version-kind&$group: "" -kind: Service -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean È -/apis/½º -apisget available API versions*getAPIVersions2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJm -R -200K -I -OKC -A -?#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList - -401 - - UnauthorizedRhttps„ -#/apis/admissionregistration.k8s.io/ÜÙ -admissionregistrationget information of a group* getAdmissionregistrationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttps£ -+/apis/admissionregistration.k8s.io/v1beta1/óð -admissionregistration_v1beta1get available resources*+getAdmissionregistrationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttpsÌN -H/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurationsÿM”" -admissionregistration_v1beta1:list or watch objects of kind MutatingWebhookConfiguration* +OK8 +6 +4#/definitions/io.k8s.api.apps.v1beta1.DeploymentList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment version: v1beta1 -"å -admissionregistration_v1beta1%create a MutatingWebhookConfiguration*>createAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bi -g -ebodybody *U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÜ -f -200_ -] -OKW -U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration -k -201d -b -CreatedW -U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration -l -202e -c -AcceptedW -U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration +"Œ + apps_v1beta1create a Deployment*%createAppsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.apps.v1beta1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jó +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta1.Deployment +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.apps.v1beta1.Deployment +I +202B +@ +Accepted4 +2 +0#/definitions/io.k8s.api.apps.v1beta1.Deployment  401  UnauthorizedRhttpsj x-kubernetes-actionpost -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration -version: v1beta1 -*³! -admissionregistration_v1beta11delete collection of MutatingWebhookConfiguration*HdeleteAdmissionregistrationV1beta1CollectionMutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +jS +x-kubernetes-group-version-kind0.version: v1beta1 +group: apps +kind: Deployment +*Í + apps_v1beta1delete collection of Deployment*/deleteAppsV1beta1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -6915,1602 +19208,35 @@ C  UnauthorizedRhttpsj* x-kubernetes-actiondeletecollection -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ö( -O/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name}‚(ü -admissionregistration_v1beta1/read the specified MutatingWebhookConfiguration*deleteAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration -version: v1beta1 -Bã -admissionregistration_v1beta1;partially update the specified MutatingWebhookConfiguration*=patchAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J -f -200_ -] -OKW -U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration -version: v1beta1 -JI -GE"Cpath(name of the MutatingWebhookConfiguration"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string êN -J/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations›Nœ" -admissionregistration_v1beta1listAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J‡ -l -200e -c -OK] -[ -Y#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -"ó -admissionregistration_v1beta1'create a ValidatingWebhookConfiguration*@createAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bk -i -gbodybody *W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jâ -h -200a -_ -OKY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration -m -201f -d -CreatedY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration -n -202g -e -AcceptedY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -*¹! -admissionregistration_v1beta13delete collection of ValidatingWebhookConfiguration*JdeleteAdmissionregistrationV1beta1CollectionValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ü( -Q/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name}¦(„ -admissionregistration_v1beta11read the specified ValidatingWebhookConfiguration*>readAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jƒ -h -200a -_ -OKY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 - -admissionregistration_v1beta14replace the specified ValidatingWebhookConfiguration*AreplaceAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bk -i -gbodybody *W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jò -h -200a -_ -OKY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration -m -201f -d -CreatedY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -*ý -admissionregistration_v1beta1'delete a ValidatingWebhookConfiguration*@deleteAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -Bë -admissionregistration_v1beta1=partially update the specified ValidatingWebhookConfiguration*?patchAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jƒ -h -200a -_ -OKY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -JK -IG"Epath*name of the ValidatingWebhookConfiguration"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ò$ -N/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurationsŸ$¤ -admissionregistration_v1beta1ˆwatch individual changes to a list of MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.*AwatchAdmissionregistrationV1beta1MutatingWebhookConfigurationList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÷% -U/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name}%× -admissionregistration_v1beta1Ãwatch changes to an object of kind MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*=watchAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j} -x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io -kind: MutatingWebhookConfiguration -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JI -GE"Cpath(name of the MutatingWebhookConfiguration"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ú$ -P/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations¥$ª -admissionregistration_v1beta1Šwatch individual changes to a list of ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.*CwatchAdmissionregistrationV1beta1ValidatingWebhookConfigurationList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean & -W/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name}¥%Ý -admissionregistration_v1beta1Åwatch changes to an object of kind ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*?watchAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j -x-kubernetes-group-version-kind\Zgroup: admissionregistration.k8s.io -kind: ValidatingWebhookConfiguration -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JK -IG"Epath*name of the ValidatingWebhookConfiguration"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì -/apis/apiextensions.k8s.io/ÌÉ - apiextensionsget information of a group*getApiextensionsAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttps‹ -#/apis/apiextensions.k8s.io/v1beta1/ãà -apiextensions_v1beta1get available resources*#getApiextensionsV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps©N -/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/statusÆÉ -apiregistration_v1beta1'read status of the specified APIService**readApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J~ -c -200\ -Z -OKT -R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -je -x-kubernetes-group-version-kindB@group: apiregistration.k8s.io -kind: APIService -version: v1beta1 -à -apiregistration_v1beta1*replace status of the specified APIService*-replaceApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bf -d -bbodybody *R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jè -c -200\ -Z -OKT -R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService -h -201a -_ -CreatedT -R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -je -x-kubernetes-group-version-kindB@group: apiregistration.k8s.io -kind: APIService -version: v1beta1 -B§ -apiregistration_v1beta13partially update status of the specified APIService*+patchApiregistrationV1beta1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J~ -c -200\ -Z -OKT -R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -je -x-kubernetes-group-version-kindB@group: apiregistration.k8s.io -kind: APIService -version: v1beta1 -J7 -53"1pathname of the APIService"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ‘$ -6/apis/apiregistration.k8s.io/v1beta1/watch/apiservicesÖ#Û -apiregistration_v1beta1vwatch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.*)watchApiregistrationV1beta1APIServiceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -je -x-kubernetes-group-version-kindB@group: apiregistration.k8s.io -kind: APIService -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean …% -=/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}Ã$ -apiregistration_v1beta1±watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*%watchApiregistrationV1beta1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -je -x-kubernetes-group-version-kindB@group: apiregistration.k8s.io -kind: APIService -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the APIService"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ê - /apis/apps/º· -appsget information of a group*getAppsAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsÚ -/apis/apps/v1/ÇÄ -apps_v1get available resources*getAppsV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps# -!/apis/apps/v1/controllerrevisionsé"î -apps_v10list or watch objects of kind ControllerRevision*,listAppsV1ControllerRevisionForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Je + Unauthorized J 200C A OK; 9 -7#/definitions/io.k8s.api.apps.v1.ControllerRevisionList - -401 - - UnauthorizedRhttpsj +7#/definitions/io.k8s.api.extensions.v1beta1.IngressListRhttpsj x-kubernetes-actionlist jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -8523,31 +19249,643 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean â" -/apis/apps/v1/daemonsetsÅ"Ê -apps_v1'list or watch objects of kind DaemonSet*#listAppsV1DaemonSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ­ +3/api/v1/namespaces/{namespace}/pods/{name}/evictionõ +"Î +core_v1create eviction of a Pod*!createCoreV1NamespacedPodEviction2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.policy.v1beta1.EvictionJó + +401 + + Unauthorized +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.policy.v1beta1.Eviction +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.policy.v1beta1.Eviction +I +202B +@ +Accepted4 +2 +0#/definitions/io.k8s.api.policy.v1beta1.EvictionRhttpsjS +x-kubernetes-group-version-kind0.group: policy +kind: Eviction +version: v1beta1 +j +x-kubernetes-actionpost +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J5 +31"/pathname of the Eviction"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ˆ# +./apis/coordination.k8s.io/v1beta1/watch/leasesÕ"Ó +coordination_v1beta1qwatch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.*1watchCoordinationV1beta1LeaseListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean þM +@/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets¹M¶! +policy_v1beta11list or watch objects of kind PodDisruptionBudget*.listPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jm +R +200K +I +OKC +A +?#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +"Ù +policy_v1beta1create a PodDisruptionBudget*0createPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ +O +Mbodybody *= +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J” +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +S +201L +J +Created? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +T +202M +K +Accepted? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +*î +policy_v1beta1(delete collection of PodDisruptionBudget*:deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string . +G/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}Ä-ù +policy_v1beta1&read the specified PodDisruptionBudget*.readPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Ji +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 + +policy_v1beta1)replace the specified PodDisruptionBudget*1replacePolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ +O +Mbodybody *= +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¾ +S +201L +J +Created? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + Unauthorized +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetRhttpsj +x-kubernetes-actionput +j^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +*² +policy_v1beta1delete a PodDisruptionBudget*0deletePolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj^ +x-kubernetes-group-version-kind;9group: policy +kind: PodDisruptionBudget +version: v1beta1 +j +x-kubernetes-action delete +Bˆ +policy_v1beta12partially update the specified PodDisruptionBudget*/patchPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ji +N +200G +E +OK? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j^ +x-kubernetes-group-version-kind;9version: v1beta1 +group: policy +kind: PodDisruptionBudget +J@ +><":pathname of the PodDisruptionBudget"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ”" +(/apis/rbac.authorization.k8s.io/v1/rolesç!å +rbacAuthorization_v1"list or watch objects of kind Role*+listRbacAuthorizationV1RoleForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JW +< +2005 +3 +OK- ++ +)#/definitions/io.k8s.api.rbac.v1.RoleList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç$ +L/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name}–$ÿ +rbacAuthorization_v1«watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*&watchRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j] +x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io +kind: Role +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J1 +/-"+pathname of the Role"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ™- +G/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}Í,à +networking_v1beta1read the specified Ingress*&readNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +ç +networking_v1beta1replace the specified Ingress*)replaceNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.networking.v1beta1.IngressBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +*¢ +networking_v1beta1delete an Ingress*(deleteNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j] +x-kubernetes-group-version-kind:8kind: Ingress +version: v1beta1 +group: networking.k8s.io +Bï +networking_v1beta1&partially update the specified Ingress*'patchNetworkingV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +J4 +20".pathname of the Ingress"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ù+ +1/api/v1/namespaces/{namespace}/limitranges/{name}£+· +core_v1read the specified LimitRange*readCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +® +core_v1 replace the specified LimitRange*!replaceCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.core.v1.LimitRangeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.core.v1.LimitRangeRhttpsj +x-kubernetes-actionput +jL +x-kubernetes-group-version-kind)'kind: LimitRange +version: v1 +group: "" +*€ +core_v1delete a LimitRange* deleteCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjL +x-kubernetes-group-version-kind)'group: "" +kind: LimitRange +version: v1 +j +x-kubernetes-action delete +BÆ +core_v1)partially update the specified LimitRange*patchCoreV1NamespacedLimitRange2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange + +401 + + UnauthorizedRhttpsjL +x-kubernetes-group-version-kind)'version: v1 +group: "" +kind: LimitRange +j +x-kubernetes-actionpatch +J7 +53"1pathname of the LimitRange"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string »L +3/apis/batch/v1beta1/namespaces/{namespace}/cronjobsƒL‚! + batch_v1beta1%list or watch objects of kind CronJob*!listBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.batch.v1beta1.CronJobList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jQ +x-kubernetes-group-version-kind.,kind: CronJob +version: v1beta1 +group: batch +"þ + batch_v1beta1create a CronJob*#createBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD +B +@bodybody *0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jí A 200: 8 OK2 0 -.#/definitions/io.k8s.api.apps.v1.DaemonSetList +.#/definitions/io.k8s.api.batch.v1beta1.CronJob +F +201? += +Created2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob +G +202@ +> +Accepted2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob  401  UnauthorizedRhttpsj -x-kubernetes-actionlist -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -Jï +x-kubernetes-actionpost +jQ +x-kubernetes-group-version-kind.,version: v1beta1 +group: batch +kind: CronJob +*Ç + batch_v1beta1delete collection of CronJob*-deleteBatchV1beta1CollectionNamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú ÷ ô @@ -8555,48 +19893,365 @@ usqqueryFIf true, partially initialized resources are included in the respo queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç" -/apis/apps/v1/deploymentsÉ"Î -apps_v1(list or watch objects of kind Deployment*$listAppsV1DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjQ +x-kubernetes-group-version-kind.,kind: CronJob +version: v1beta1 +group: batch +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ´ +4/api/v1/namespaces/{namespace}/services/{name}/proxyûŸ +core_v1(connect GET requests to proxy of Service*&connectCoreV1GetNamespacedServiceProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20kind: ServiceProxyOptions +version: v1 +group: "" +Ÿ +core_v1(connect PUT requests to proxy of Service*&connectCoreV1PutNamespacedServiceProxy2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20kind: ServiceProxyOptions +version: v1 +group: "" +"¡ +core_v1)connect POST requests to proxy of Service*'connectCoreV1PostNamespacedServiceProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20kind: ServiceProxyOptions +version: v1 +group: "" +*¥ +core_v1+connect DELETE requests to proxy of Service*)connectCoreV1DeleteNamespacedServiceProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20version: v1 +group: "" +kind: ServiceProxyOptions +2§ +core_v1,connect OPTIONS requests to proxy of Service**connectCoreV1OptionsNamespacedServiceProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20group: "" +kind: ServiceProxyOptions +version: v1 +:¡ +core_v1)connect HEAD requests to proxy of Service*'connectCoreV1HeadNamespacedServiceProxy2*/*:*/*J7 + +200 + +OK + ² +string + +401 + + UnauthorizedRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20version: v1 +group: "" +kind: ServiceProxyOptions +B£ +core_v1*connect PATCH requests to proxy of Service*(connectCoreV1PatchNamespacedServiceProxy2*/*:*/*J7 + +401 + + Unauthorized + +200 + +OK + ² +stringRhttpsj! +x-kubernetes-action +connect +jU +x-kubernetes-group-version-kind20group: "" +kind: ServiceProxyOptions +version: v1 +J@ +><":pathname of the ServiceProxyOptions"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JÐ +ÍÊÇquery¬Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy."path2string ¨L +//apis/rbac.authorization.k8s.io/v1/clusterrolesôKŸ! +rbacAuthorization_v1)list or watch objects of kind ClusterRole*"listRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ + +401 + + Unauthorized +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.rbac.v1.ClusterRoleListRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +j +x-kubernetes-actionlist +"• +rbacAuthorization_v1create a ClusterRole*$createRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.rbac.v1.ClusterRoleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jç + +401 + + Unauthorized +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRole +E +202> +< +Accepted0 +. +,#/definitions/io.k8s.api.rbac.v1.ClusterRoleRhttpsj +x-kubernetes-actionpost +jd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +*æ +rbacAuthorization_v1 delete collection of ClusterRole*.deleteRbacAuthorizationV1CollectionClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: ClusterRole +version: v1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ö, +@/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}±,Ù +extensions_v1beta1read the specified Ingress*&readExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jV +x-kubernetes-group-version-kind31kind: Ingress +version: v1beta1 +group: extensions +à +extensions_v1beta1replace the specified Ingress*)replaceExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.extensions.v1beta1.IngressBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +K +201D B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1.DeploymentList +Created7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æK -8/apis/apps/v1/namespaces/{namespace}/controllerrevisions©K–! + UnauthorizedRhttpsj +x-kubernetes-actionput +jV +x-kubernetes-group-version-kind31version: v1beta1 +group: extensions +kind: Ingress +*› +extensions_v1beta1delete an Ingress*(deleteExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +Bè +extensions_v1beta1&partially update the specified Ingress*'patchExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja + +401 + + Unauthorized +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.IngressRhttpsj +x-kubernetes-actionpatch +jV +x-kubernetes-group-version-kind31group: extensions +kind: Ingress +version: v1beta1 +J4 +20".pathname of the Ingress"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string †M +8/apis/apps/v1/namespaces/{namespace}/controllerrevisionsÉL–! apps_v10list or watch objects of kind ControllerRevision*&listAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -8623,18 +20278,19 @@ A  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -jV -x-kubernetes-group-version-kind31group: apps + UnauthorizedRhttpsjV +x-kubernetes-group-version-kind31version: v1 +group: apps kind: ControllerRevision -version: v1 -"ˆ +j +x-kubernetes-actionlist +"¡ apps_v1create a ControllerRevision*(createAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI G Ebodybody *5 3#/definitions/io.k8s.api.apps.v1.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jü +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jü F 200? = @@ -8692,121 +20348,120 @@ C UnauthorizedRhttpsj* x-kubernetes-actiondeletecollection jV -x-kubernetes-group-version-kind31group: apps +x-kubernetes-group-version-kind31version: v1 +group: apps kind: ControllerRevision -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ˆ% -?/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}Ä$þ -apps_v1%read the specified ControllerRevision*&readAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Ja +MKIquery-If 'true', then the output is pretty printed."pretty2string ï +/apis/autoscaling/v1/ÕÒ +autoscaling_v1get available resources*getAutoscalingV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsË +W/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/statusïÛ +autoscaling_v2beta14read status of the specified HorizontalPodAutoscaler*=readAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jr +W +200P +N +OKH F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.apps.v1.ControllerRevision +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler  401  UnauthorizedRhttpsj x-kubernetes-actionget -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -Ç -apps_v1(replace the specified ControllerRevision*)replaceAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +Ö +autoscaling_v2beta17replace status of the specified HorizontalPodAutoscaler*@replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÐ +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +j +x-kubernetes-actionput +B¼ +autoscaling_v2beta1@partially update status of the specified HorizontalPodAutoscaler*>patchAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jr +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +j +x-kubernetes-actionpatch +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ù# +9/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs›#· + batch_v1beta1swatch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.*&watchBatchV1beta1NamespacedCronJobList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I G -Ebodybody *5 -3#/definitions/io.k8s.api.apps.v1.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J® -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.apps.v1.ControllerRevision -K -201D -B -Created7 -5 -3#/definitions/io.k8s.api.apps.v1.ControllerRevision +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -*š -apps_v1delete a ControllerRevision*(deleteAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -Bå -apps_v11partially update the specified ControllerRevision*'patchAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.apps.v1.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ßJ -//apis/apps/v1/namespaces/{namespace}/daemonsets«Jò -apps_v1'list or watch objects of kind DaemonSet*listAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jQ +x-kubernetes-group-version-kind.,group: batch +kind: CronJob +version: v1beta1 +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -8814,65 +20469,71 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ô" +)/apis/coordination.k8s.io/v1/watch/leasesÆ"Ä +coordination_v1qwatch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.*,watchCoordinationV1LeaseListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jX +x-kubernetes-group-version-kind53group: coordination.k8s.io +kind: Lease +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¤" +(/apis/coordination.k8s.io/v1beta1/leases÷!õ +coordination_v1beta1#list or watch objects of kind Lease*,listCoordinationV1beta1LeaseForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Je +J +200C A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.apps.v1.DaemonSetList +OK; +9 +7#/definitions/io.k8s.api.coordination.v1beta1.LeaseList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -"É -apps_v1create a DaemonSet*createAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.apps.v1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Já -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet -C -202< -: -Accepted. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -*» -apps_v1delete collection of DaemonSet*)deleteAppsV1CollectionNamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -8880,548 +20541,48 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ý# -6/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}¢#Ú -apps_v1read the specified DaemonSet*readAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -‘ -apps_v1replace the specified DaemonSet* replaceAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.apps.v1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -*ÿ -apps_v1delete a DaemonSet*deleteAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -BÁ -apps_v1(partially update the specified DaemonSet*patchAppsV1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string › -=/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/statusÙó -apps_v1&read status of the specified DaemonSet*#readAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -¡ -apps_v1)replace status of the specified DaemonSet*&replaceAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.apps.v1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -BÑ -apps_v12partially update status of the specified DaemonSet*$patchAppsV1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.apps.v1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string îJ -0/apis/apps/v1/namespaces/{namespace}/deployments¹Jö -apps_v1(list or watch objects of kind Deployment*listAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ü +/apis/extensions/ÆÃ -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -"Ð -apps_v1create a Deployment* createAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jä -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment -D -202= -; -Accepted/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -*¾ -apps_v1delete collection of Deployment**deleteAppsV1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ð# -7/apis/apps/v1/namespaces/{namespace}/deployments/{name}´#Þ -apps_v1read the specified Deployment*readAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -— -apps_v1 replace the specified Deployment*!replaceAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -*‚ -apps_v1delete a Deployment* deleteAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -BÅ -apps_v1)partially update the specified Deployment*patchAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¯ -=/apis/apps/v1/namespaces/{namespace}/deployments/{name}/scaleíù -apps_v1&read scale of the specified Deployment*#readAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -­ -apps_v1)replace scale of the specified Deployment*&replaceAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC -A -?bodybody */ --#/definitions/io.k8s.api.autoscaling.v1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¢ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +extensionsget information of a group*getExtensionsAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G E -201> -< -Created1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -B× -apps_v12partially update scale of the specified Deployment*$patchAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string « ->/apis/apps/v1/namespaces/{namespace}/deployments/{name}/statusè÷ -apps_v1'read status of the specified Deployment*$readAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -§ -apps_v1*replace status of the specified Deployment*'replaceAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA + UnauthorizedRhttps“# +2/apis/extensions/v1beta1/watch/podsecuritypoliciesÜ"Ú +extensions_v1beta1}watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.*+watchExtensionsV1beta1PodSecurityPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA ? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -BÕ -apps_v13partially update status of the specified Deployment*%patchAppsV1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string îJ -0/apis/apps/v1/namespaces/{namespace}/replicasets¹Jö -apps_v1(list or watch objects of kind ReplicaSet*listAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï + UnauthorizedRhttpsj` +x-kubernetes-group-version-kind=;version: v1beta1 +group: extensions +kind: PodSecurityPolicy +j# +x-kubernetes-action  +watchlist +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -9429,441 +20590,27 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1.ReplicaSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -"Ð -apps_v1create a ReplicaSet* createAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jä -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet -D -202= -; -Accepted/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -*¾ -apps_v1delete collection of ReplicaSet**deleteAppsV1CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ð# -7/apis/apps/v1/namespaces/{namespace}/replicasets/{name}´#Þ -apps_v1read the specified ReplicaSet*readAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -— -apps_v1 replace the specified ReplicaSet*!replaceAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -*‚ -apps_v1delete a ReplicaSet* deleteAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -BÅ -apps_v1)partially update the specified ReplicaSet*patchAppsV1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¯ -=/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scaleíù -apps_v1&read scale of the specified ReplicaSet*#readAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -­ -apps_v1)replace scale of the specified ReplicaSet*&replaceAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC -A -?bodybody */ --#/definitions/io.k8s.api.autoscaling.v1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¢ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ð + /apis/policy/¾» +policyget information of a group*getPolicyAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G E -201> -< -Created1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -B× -apps_v12partially update scale of the specified ReplicaSet*$patchAppsV1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J[ -@ -2009 -7 -OK1 -/ --#/definitions/io.k8s.api.autoscaling.v1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale -version: v1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string « ->/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/statusè÷ -apps_v1'read status of the specified ReplicaSet*$readAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -§ -apps_v1*replace status of the specified ReplicaSet*'replaceAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -BÕ -apps_v13partially update status of the specified ReplicaSet*%patchAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ýJ -1/apis/apps/v1/namespaces/{namespace}/statefulsetsÇJú -apps_v1)list or watch objects of kind StatefulSet*listAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1.StatefulSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -"× -apps_v1create a StatefulSet*!createAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.apps.v1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jç -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet -E -202> -< -Accepted0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -*Á -apps_v1 delete collection of StatefulSet*+deleteAppsV1CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ƒ$ -8/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}Æ#â -apps_v1read the specified StatefulSet*readAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JZ + UnauthorizedRhttpsú+ +8/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}½+½ +apps_v1read the specified StatefulSet*readAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JZ ? 2008 6 @@ -9879,12 +20626,17 @@ jO x-kubernetes-group-version-kind,*group: apps kind: StatefulSet version: v1 - +¶ apps_v1!replace the specified StatefulSet*"replaceAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB @ >bodybody *. ,#/definitions/io.k8s.api.apps.v1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J  +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  + +401 + + Unauthorized ? 2008 6 @@ -9896,16 +20648,12 @@ D ; Created0 . -,#/definitions/io.k8s.api.apps.v1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jO +,#/definitions/io.k8s.api.apps.v1.StatefulSetRhttpsjO x-kubernetes-group-version-kind,*group: apps kind: StatefulSet version: v1 +j +x-kubernetes-actionput *… apps_v1delete a StatefulSet*!deleteAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R @@ -9930,18 +20678,20 @@ I  401  - UnauthorizedRhttpsj -x-kubernetes-action delete -jO -x-kubernetes-group-version-kind,*group: apps + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*version: v1 +group: apps kind: StatefulSet -version: v1 -BÉ +j +x-kubernetes-action delete +BÌ apps_v1*partially update the specified StatefulSet* patchAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JZ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JZ ? 2008 6 @@ -9951,17 +20701,17 @@ Jbodybody *:  401  - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jO + UnauthorizedRhttpsjO x-kubernetes-group-version-kind,*group: apps kind: StatefulSet version: v1 +j +x-kubernetes-actionpatch J8 64"2pathname of the StatefulSet"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¶ ->/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scaleóû +MKIquery-If 'true', then the output is pretty printed."pretty2string Ò +>/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scaleû apps_v1'read scale of the specified StatefulSet*$readAppsV1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ @ 2009 @@ -9972,18 +20722,19 @@ MKIquery-If 'true', then the output is pretty printed."pretty2string  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jP -x-kubernetes-group-version-kind-+group: autoscaling + UnauthorizedRhttpsjP +x-kubernetes-group-version-kind-+version: v1 +group: autoscaling kind: Scale -version: v1 -¯ +j +x-kubernetes-actionget +È apps_v1*replace scale of the specified StatefulSet*'replaceAppsV1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC A ?bodybody */ -#/definitions/io.k8s.api.autoscaling.v1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¢ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¢ @ 2009 7 @@ -9999,18 +20750,20 @@ E  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jP -x-kubernetes-group-version-kind-+group: autoscaling -kind: Scale + UnauthorizedRhttpsjP +x-kubernetes-group-version-kind-+kind: Scale version: v1 -BÙ +group: autoscaling +j +x-kubernetes-actionput +BÜ apps_v13partially update scale of the specified StatefulSet*%patchAppsV1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J[ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J[ @ 2009 7 @@ -10029,99 +20782,132 @@ version: v1 J2 0.",pathname of the Scale"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string » -?/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status÷û -apps_v1(read status of the specified StatefulSet*%readAppsV1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JZ +MKIquery-If 'true', then the output is pretty printed."pretty2string ’- +3/apis/extensions/v1beta1/podsecuritypolicies/{name}Ú,÷ +extensions_v1beta1$read the specified PodSecurityPolicy*&readExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jk +P +200I +G +OKA ? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy  401  UnauthorizedRhttpsj x-kubernetes-actionget -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -­ -apps_v1+replace status of the specified StatefulSet*(replaceAppsV1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.apps.v1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J  +j` +x-kubernetes-group-version-kind=;group: extensions +kind: PodSecurityPolicy +version: v1beta1 +’ +extensions_v1beta1'replace the specified PodSecurityPolicy*)replaceExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BS +Q +Obodybody *? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J +P +200I +G +OKA ? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy +U +201N +L +CreatedA +? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsj` +x-kubernetes-group-version-kind=;kind: PodSecurityPolicy +version: v1beta1 +group: extensions +j x-kubernetes-actionput -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -BÙ -apps_v14partially update status of the specified StatefulSet*&patchAppsV1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +*® +extensions_v1beta1delete a PodSecurityPolicy*(deleteExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j` +x-kubernetes-group-version-kind=;group: extensions +kind: PodSecurityPolicy +version: v1beta1 +B† +extensions_v1beta10partially update the specified PodSecurityPolicy*'patchExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JZ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jk +P +200I +G +OKA ? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ç" -/apis/apps/v1/replicasetsÉ"Î -apps_v1(list or watch objects of kind ReplicaSet*$listAppsV1ReplicaSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J] -B -200; +j` +x-kubernetes-group-version-kind=;group: extensions +kind: PodSecurityPolicy +version: v1beta1 +J> +<:"8pathname of the PodSecurityPolicy"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ¥" +)/apis/networking.k8s.io/v1beta1/ingresses÷!õ +networking_v1beta1%list or watch objects of kind Ingress*,listNetworkingV1beta1IngressForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Je +J +200C +A +OK; 9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1.ReplicaSetList +7#/definitions/io.k8s.api.networking.v1beta1.IngressList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 +j] +x-kubernetes-group-version-kind:8kind: Ingress +version: v1beta1 +group: networking.k8s.io Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -10134,30 +20920,29 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì" -/apis/apps/v1/statefulsetsÍ"Ò -apps_v1)list or watch objects of kind StatefulSet*%listAppsV1StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1.StatefulSetList +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean " +/api/v1/replicationcontrollersú!ø +core_v13list or watch objects of kind ReplicationController*/listCoreV1ReplicationControllerForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.core.v1.ReplicationControllerList  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjW +x-kubernetes-group-version-kind42group: "" +kind: ReplicationController +version: v1 +j x-kubernetes-actionlist -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -10170,309 +20955,8 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ó# -'/apis/apps/v1/watch/controllerrevisionsÇ#Ì -apps_v1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*1watchAppsV1ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ï# -/apis/apps/v1/watch/daemonsets¬#± -apps_v1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ó# -/apis/apps/v1/watch/deployments¯#´ -apps_v1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*)watchAppsV1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: Deployment -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ$ ->/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions£$Æ -apps_v1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*+watchAppsV1NamespacedControllerRevisionList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean â% -E/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name}˜%ú -apps_v1¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchAppsV1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jV -x-kubernetes-group-version-kind31group: apps -kind: ControllerRevision -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Â$ -5/apis/apps/v1/watch/namespaces/{namespace}/daemonsetsˆ$« -apps_v1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*"watchAppsV1NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jM -x-kubernetes-group-version-kind*(group: apps -kind: DaemonSet -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean µ% -/apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name}ü$å -apps_v1²watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.* watchAppsV1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ó# -/apis/apps/v1/watch/replicasets¯#´ -apps_v1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*)watchAppsV1ReplicaSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jN -x-kubernetes-group-version-kind+)group: apps -kind: ReplicaSet -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ×# - /apis/apps/v1/watch/statefulsets²#· -apps_v1wwatch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.**watchAppsV1StatefulSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jO -x-kubernetes-group-version-kind,*group: apps -kind: StatefulSet -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean é -/apis/apps/v1beta1/ÑÎ - apps_v1beta1get available resources*getAppsV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps¨# -&/apis/apps/v1beta1/controllerrevisionsý"‚ - apps_v1beta10list or watch objects of kind ControllerRevision*1listAppsV1beta1ControllerRevisionForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jj -O -200H -F -OK@ -> -<#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean €# -/apis/apps/v1beta1/deploymentsÝ"â - apps_v1beta1(list or watch objects of kind Deployment*)listAppsV1beta1DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta1.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ±L -=/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisionsïKª! - apps_v1beta10list or watch objects of kind ControllerRevision*+listAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jj -O -200H -F -OK@ -> -<#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -"« - apps_v1beta1create a ControllerRevision*-createAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN -L -Jbodybody *: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J‹ -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision -P -201I -G -Created< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision -Q -202J -H -Accepted< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -*å - apps_v1beta1'delete collection of ControllerRevision*7deleteAppsV1beta1CollectionNamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string â% -D/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}™%’ - apps_v1beta1%read the specified ControllerRevision*+readAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -å - apps_v1beta1(replace the specified ControllerRevision*.replaceAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN -L -Jbodybody *: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¸ -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision -P -201I -G -Created< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -*© - apps_v1beta1delete a ControllerRevision*-deleteAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -Bù - apps_v1beta11partially update the specified ControllerRevision*,patchAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¹K -5/apis/apps/v1beta1/namespaces/{namespace}/deploymentsÿJŠ! - apps_v1beta1(list or watch objects of kind Deployment*#listAppsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta1.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -"ó - apps_v1beta1create a Deployment*%createAppsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.apps.v1beta1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jó -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta1.Deployment -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.apps.v1beta1.Deployment -I -202B -@ -Accepted4 -2 -0#/definitions/io.k8s.api.apps.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -*Í - apps_v1beta1delete collection of Deployment*/deleteAppsV1beta1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ê$ - -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -¯ - apps_v1beta1)replace scale of the specified Deployment*+replaceAppsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1beta1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -BÝ - apps_v1beta12partially update scale of the specified Deployment*)patchAppsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ö -C/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status®‹ +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ’ +C/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/statusÊ‹ apps_v1beta1'read status of the specified Deployment*)readAppsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ C 200< @@ -11347,18 +21004,19 @@ C  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment + UnauthorizedRhttpsjS +x-kubernetes-group-version-kind0.kind: Deployment version: v1beta1 -Å +group: apps +j +x-kubernetes-actionget +Þ apps_v1beta1*replace status of the specified Deployment*,replaceAppsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF D Bbodybody *2 0#/definitions/io.k8s.api.apps.v1beta1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¨ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¨ C 200< : @@ -11374,18 +21032,20 @@ H  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jS -x-kubernetes-group-version-kind0.group: apps + UnauthorizedRhttpsjS +x-kubernetes-group-version-kind0.version: v1beta1 +group: apps kind: Deployment -version: v1beta1 -Bé +j +x-kubernetes-actionput +Bì apps_v1beta13partially update status of the specified Deployment**patchAppsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J^ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J^ C 200< : @@ -11395,492 +21055,39 @@ C  401  - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jS + UnauthorizedRhttpsjS x-kubernetes-group-version-kind0.group: apps kind: Deployment version: v1beta1 +j +x-kubernetes-actionpatch J7 53"1pathname of the Deployment"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÈK -6/apis/apps/v1beta1/namespaces/{namespace}/statefulsetsKŽ! - apps_v1beta1)list or watch objects of kind StatefulSet*$listAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -"ú - apps_v1beta1create a StatefulSet*&createAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jö -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet -J -202C -A -Accepted5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -*Ð - apps_v1beta1 delete collection of StatefulSet*0deleteAppsV1beta1CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ý$ -=/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}›$ö - apps_v1beta1read the specified StatefulSet*$readAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -» - apps_v1beta1!replace the specified StatefulSet*'replaceAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -*” - apps_v1beta1delete a StatefulSet*&deleteAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -BÝ - apps_v1beta1*partially update the specified StatefulSet*%patchAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string É -C/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale - apps_v1beta1'read scale of the specified StatefulSet*)readAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -± - apps_v1beta1*replace scale of the specified StatefulSet*,replaceAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1beta1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -Bß - apps_v1beta13partially update scale of the specified StatefulSet**patchAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string † -D/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status½ - apps_v1beta1(read status of the specified StatefulSet**readAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -Ë - apps_v1beta1+replace status of the specified StatefulSet*-replaceAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -Bí - apps_v1beta14partially update status of the specified StatefulSet*+patchAppsV1beta1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string …# -/apis/apps/v1beta1/statefulsetsá"æ - apps_v1beta1)list or watch objects of kind StatefulSet**listAppsV1beta1StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‡$ -,/apis/apps/v1beta1/watch/controllerrevisionsÖ#Û - apps_v1beta1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*6watchAppsV1beta1ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç# -$/apis/apps/v1beta1/watch/deployments¾#à - apps_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchAppsV1beta1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ú$ -C/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions²$Õ +MKIquery-If 'true', then the output is pretty printed."pretty2string $ +C/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions¹#Õ apps_v1beta1~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*0watchAppsV1beta1NamespacedControllerRevisionList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized P 200I G OKA ? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# x-kubernetes-action  watchlist j[ -x-kubernetes-group-version-kind86group: apps +x-kubernetes-group-version-kind86version: v1beta1 +group: apps kind: ControllerRevision -version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -11894,9 +21101,9 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ö% -J/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}§%‰ - apps_v1beta1¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*,watchAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ƒ# +./apis/policy/v1beta1/watch/podsecuritypoliciesÐ"Î +policy_v1beta1}watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.*'watchPolicyV1beta1PodSecurityPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -11906,209 +21113,18 @@ G  401  - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú$ -;/apis/apps/v1beta1/watch/namespaces/{namespace}/deploymentsš$½ - apps_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta1NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97version: v1beta1 +group: policy +kind: PodSecurityPolicy +j# x-kubernetes-action  watchlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Î% -B/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}‡%ñ - apps_v1beta1±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Þ$ - -<#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û" -/apis/apps/v1beta2/daemonsetsÙ"Þ - apps_v1beta2'list or watch objects of kind DaemonSet*(listAppsV1beta2DaemonSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean €# -/apis/apps/v1beta2/deploymentsÝ"â - apps_v1beta2(list or watch objects of kind Deployment*)listAppsV1beta2DeploymentForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta2.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ±L -=/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisionsïKª! - apps_v1beta20list or watch objects of kind ControllerRevision*+listAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jj -O -200H -F -OK@ -> -<#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -"« - apps_v1beta2create a ControllerRevision*-createAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN -L -Jbodybody *: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J‹ -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision -P -201I -G -Created< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision -Q -202J -H -Accepted< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -*å - apps_v1beta2'delete collection of ControllerRevision*7deleteAppsV1beta2CollectionNamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string â% -D/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name}™%’ - apps_v1beta2%read the specified ControllerRevision*+readAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -å - apps_v1beta2(replace the specified ControllerRevision*.replaceAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN -L -Jbodybody *: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¸ -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision -P -201I -G -Created< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -*© - apps_v1beta2delete a ControllerRevision*-deleteAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Bù - apps_v1beta21partially update the specified ControllerRevision*,patchAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ªK -4/apis/apps/v1beta2/namespaces/{namespace}/daemonsetsñJ†! - apps_v1beta2'list or watch objects of kind DaemonSet*"listAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -"ì - apps_v1beta2create a DaemonSet*$createAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE -C -Abodybody *1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jð -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet -G -201@ -> -Created3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet -H -202A -? -Accepted3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -*Ê - apps_v1beta2delete collection of DaemonSet*.deleteAppsV1beta2CollectionNamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ·$ -;/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}÷#î - apps_v1beta2read the specified DaemonSet*"readAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -¯ - apps_v1beta2replace the specified DaemonSet*%replaceAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE -C -Abodybody *1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¦ -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet -G -201@ -> -Created3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -*Ž - apps_v1beta2delete a DaemonSet*$deleteAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -BÕ - apps_v1beta2(partially update the specified DaemonSet*#patchAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string æ -B/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/statusŸ‡ - apps_v1beta2&read status of the specified DaemonSet*(readAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -¿ - apps_v1beta2)replace status of the specified DaemonSet*+replaceAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BE -C -Abodybody *1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¦ -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet -G -201@ -> -Created3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Bå - apps_v1beta22partially update status of the specified DaemonSet*)patchAppsV1beta2NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J] -B -200; -9 -OK3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¹K -5/apis/apps/v1beta2/namespaces/{namespace}/deploymentsÿJŠ! - apps_v1beta2(list or watch objects of kind Deployment*#listAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta2.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -"ó - apps_v1beta2create a Deployment*%createAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.apps.v1beta2.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jó -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment -I -202B -@ -Accepted4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -*Í - apps_v1beta2delete collection of Deployment*/deleteAppsV1beta2CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ê$ - -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -¯ - apps_v1beta2)replace scale of the specified Deployment*+replaceAppsV1beta2NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1beta2.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -BÝ - apps_v1beta22partially update scale of the specified Deployment*)patchAppsV1beta2NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ö -C/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status®‹ - apps_v1beta2'read status of the specified Deployment*)readAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Å - apps_v1beta2*replace status of the specified Deployment*,replaceAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.apps.v1beta2.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¨ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Bé - apps_v1beta23partially update status of the specified Deployment**patchAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¹K -5/apis/apps/v1beta2/namespaces/{namespace}/replicasetsÿJŠ! - apps_v1beta2(list or watch objects of kind ReplicaSet*#listAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -"ó - apps_v1beta2create a ReplicaSet*%createAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jó -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet -I -202B -@ -Accepted4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -*Í - apps_v1beta2delete collection of ReplicaSet*/deleteAppsV1beta2CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ê$ - -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -¯ - apps_v1beta2)replace scale of the specified ReplicaSet*+replaceAppsV1beta2NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1beta2.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -BÝ - apps_v1beta22partially update scale of the specified ReplicaSet*)patchAppsV1beta2NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ö -C/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status®‹ - apps_v1beta2'read status of the specified ReplicaSet*)readAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Å - apps_v1beta2*replace status of the specified ReplicaSet*,replaceAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¨ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Bé - apps_v1beta23partially update status of the specified ReplicaSet**patchAppsV1beta2NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÈK -6/apis/apps/v1beta2/namespaces/{namespace}/statefulsetsKŽ! - apps_v1beta2)list or watch objects of kind StatefulSet*$listAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -"ú - apps_v1beta2create a StatefulSet*&createAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jö -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet -J -202C -A -Accepted5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -*Ð - apps_v1beta2 delete collection of StatefulSet*0deleteAppsV1beta2CollectionNamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ý$ -=/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}›$ö - apps_v1beta2read the specified StatefulSet*$readAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -» - apps_v1beta2!replace the specified StatefulSet*'replaceAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -*” - apps_v1beta2delete a StatefulSet*&deleteAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -BÝ - apps_v1beta2*partially update the specified StatefulSet*%patchAppsV1beta2NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string É -C/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale - apps_v1beta2'read scale of the specified StatefulSet*)readAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -± - apps_v1beta2*replace scale of the specified StatefulSet*,replaceAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA -? -=bodybody *- -+#/definitions/io.k8s.api.apps.v1beta2.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jž -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale -C -201< -: -Created/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -Bß - apps_v1beta23partially update scale of the specified StatefulSet**patchAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JY -> -2007 -5 -OK/ -- -+#/definitions/io.k8s.api.apps.v1beta2.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jN -x-kubernetes-group-version-kind+)group: apps -kind: Scale -version: v1beta2 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string † -D/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status½ - apps_v1beta2(read status of the specified StatefulSet**readAppsV1beta2NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -Ë - apps_v1beta2+replace status of the specified StatefulSet*-replaceAppsV1beta2NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -Bí - apps_v1beta24partially update status of the specified StatefulSet*+patchAppsV1beta2NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -J8 -64"2pathname of the StatefulSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string €# -/apis/apps/v1beta2/replicasetsÝ"â - apps_v1beta2(list or watch objects of kind ReplicaSet*)listAppsV1beta2ReplicaSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean …# -/apis/apps/v1beta2/statefulsetsá"æ - apps_v1beta2)list or watch objects of kind StatefulSet**listAppsV1beta2StatefulSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jT -x-kubernetes-group-version-kind1/group: apps -kind: StatefulSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‡$ -,/apis/apps/v1beta2/watch/controllerrevisionsÖ#Û - apps_v1beta2~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*6watchAppsV1beta2ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ã# -#/apis/apps/v1beta2/watch/daemonsets»#À - apps_v1beta2uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*-watchAppsV1beta2DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç# -$/apis/apps/v1beta2/watch/deployments¾#à - apps_v1beta2vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchAppsV1beta2DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ú$ -C/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions²$Õ - apps_v1beta2~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*0watchAppsV1beta2NamespacedControllerRevisionList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ö% -J/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name}§%‰ - apps_v1beta2¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*,watchAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j[ -x-kubernetes-group-version-kind86group: apps -kind: ControllerRevision -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? -=;"9pathname of the ControllerRevision"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ö$ -:/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets—$º - apps_v1beta2uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*'watchAppsV1beta2NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean É% -A/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name}ƒ%î - apps_v1beta2°watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchAppsV1beta2NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jR -x-kubernetes-group-version-kind/-group: apps -kind: DaemonSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú$ -;/apis/apps/v1beta2/watch/namespaces/{namespace}/deploymentsš$½ - apps_v1beta2vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta2NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Î% -B/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name}‡%ñ - apps_v1beta2±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jS -x-kubernetes-group-version-kind0.group: apps -kind: Deployment -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú$ -;/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasetsš$½ - apps_v1beta2vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1beta2NamespacedReplicaSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Î% -B/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name}‡%ñ - apps_v1beta2±watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta2NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jS -x-kubernetes-group-version-kind0.group: apps -kind: ReplicaSet -version: v1beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Þ$ -deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string å& -K/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}•&® -autoscaling_v1*read the specified HorizontalPodAutoscaler*2readAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jm -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 - -autoscaling_v1-replace the specified HorizontalPodAutoscaler*5replaceAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BU -S -Qbodybody *A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÆ -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler -W -201P -N -CreatedC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -*¾ -autoscaling_v1 delete a HorizontalPodAutoscaler*4deleteAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -B• -autoscaling_v16partially update the specified HorizontalPodAutoscaler*3patchAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jm -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -JD -B@">path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ä -R/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/statusÇ -autoscaling_v14read status of the specified HorizontalPodAutoscaler*8readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jm -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -Ÿ -autoscaling_v17replace status of the specified HorizontalPodAutoscaler*;replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BU -S -Qbodybody *A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÆ -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler -W -201P -N -CreatedC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -B¥ -autoscaling_v1@partially update status of the specified HorizontalPodAutoscaler*9patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jm -R -200K -I -OKC -A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -JD -B@">path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¤$ -3/apis/autoscaling/v1/watch/horizontalpodautoscalersì#ñ -autoscaling_v1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*=watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean —% -J/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalersÈ$ë -autoscaling_v1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*7watchAutoscalingV1NamespacedHorizontalPodAutoscalerList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean —& -Q/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}Á%ž -autoscaling_v1¾watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*3watchAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jb -x-kubernetes-group-version-kind?=group: autoscaling -kind: HorizontalPodAutoscaler -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JD -B@">path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean þ -/apis/autoscaling/v2beta2/ßÜ -autoscaling_v2beta2get available resources*!getAutoscalingV2beta2APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttpsä# -2/apis/autoscaling/v2beta2/horizontalpodautoscalers­#² -autoscaling_v2beta25list or watch objects of kind HorizontalPodAutoscaler*=listAutoscalingV2beta2HorizontalPodAutoscalerForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jv -[ -200T -R -OKL -J -H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean åM -I/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers—MÚ! -autoscaling_v2beta25list or watch objects of kind HorizontalPodAutoscaler*7listAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jv -[ -200T -R -OKL -J -H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -"ÿ -autoscaling_v2beta2 create a HorizontalPodAutoscaler*9createAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ -X -Vbodybody *F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¯ -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler -\ -201U -S -CreatedH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler -] -202V -T -AcceptedH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -*‰! -autoscaling_v2beta2,delete collection of HorizontalPodAutoscaler*CdeleteAutoscalingV2beta2CollectionNamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¿' -P/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}ê& -autoscaling_v2beta2*read the specified HorizontalPodAutoscaler*7readAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jr -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -­ -autoscaling_v2beta2-replace the specified HorizontalPodAutoscaler*:replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ -X -Vbodybody *F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÐ -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler -\ -201U -S -CreatedH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -*Í -autoscaling_v2beta2 delete a HorizontalPodAutoscaler*9deleteAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -B© -autoscaling_v2beta26partially update the specified HorizontalPodAutoscaler*8patchAutoscalingV2beta2NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jr -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -JD -B@">path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¯ -W/apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/statusÓÛ -autoscaling_v2beta24read status of the specified HorizontalPodAutoscaler*=readAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jr -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -½ -autoscaling_v2beta27replace status of the specified HorizontalPodAutoscaler*@replaceAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ -X -Vbodybody *F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÐ -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler -\ -201U -S -CreatedH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -B¹ -autoscaling_v2beta2@partially update status of the specified HorizontalPodAutoscaler*>patchAutoscalingV2beta2NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jr -W -200P -N -OKH -F -D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -JD -B@">path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¸$ -8/apis/autoscaling/v2beta2/watch/horizontalpodautoscalersû#€ -autoscaling_v2beta2ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*BwatchAutoscalingV2beta2HorizontalPodAutoscalerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jg -x-kubernetes-group-version-kindDBgroup: autoscaling -kind: HorizontalPodAutoscaler -version: v2beta2 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean «% -O/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers×$ú -autoscaling_v2beta2ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*path#name of the HorizontalPodAutoscaler"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Í - /apis/batch/¼¹ -batchget information of a group*getBatchAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsÝ -/apis/batch/v1/ÉÆ -batch_v1get available resources*getBatchV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttpsÉ" -/apis/batch/v1/jobs±"¶ -batch_v1!list or watch objects of kind Job*listBatchV1JobForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JW -< -2005 -3 -OK- -+ -)#/definitions/io.k8s.api.batch.v1.JobList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ”J -*/apis/batch/v1/namespaces/{namespace}/jobsåIÞ -batch_v1!list or watch objects of kind Job*listBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JW -< -2005 -3 -OK- -+ -)#/definitions/io.k8s.api.batch.v1.JobList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -"¦ -batch_v1 create a Job*createBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; -9 -7bodybody *' -%#/definitions/io.k8s.api.batch.v1.JobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÒ -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job -= -2016 -4 -Created) -' -%#/definitions/io.k8s.api.batch.v1.Job -> -2027 -5 -Accepted) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -*¬ -batch_v1delete collection of Job*$deleteBatchV1CollectionNamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ý" -1/apis/batch/v1/namespaces/{namespace}/jobs/{name}Ç"Æ -batch_v1read the specified Job*readBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -ó -batch_v1replace the specified Job*replaceBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; -9 -7bodybody *' -%#/definitions/io.k8s.api.batch.v1.JobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J’ -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job -= -2016 -4 -Created) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -*ð -batch_v1 delete a Job*deleteBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -B­ -batch_v1"partially update the specified Job*patchBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -J0 -.,"*pathname of the Job"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ê -8/apis/batch/v1/namespaces/{namespace}/jobs/{name}/statusß -batch_v1 read status of the specified Job*readBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -ƒ -batch_v1#replace status of the specified Job*!replaceBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; -9 -7bodybody *' -%#/definitions/io.k8s.api.batch.v1.JobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J’ -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job -= -2016 -4 -Created) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -B½ -batch_v1,partially update status of the specified Job*patchBatchV1NamespacedJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.batch.v1.Job - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -J0 -.,"*pathname of the Job"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string »# -/apis/batch/v1/watch/jobs#¢ -batch_v1owatch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.*#watchBatchV1JobListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ®$ -0/apis/batch/v1/watch/namespaces/{namespace}/jobsù#œ -batch_v1owatch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.*watchBatchV1NamespacedJobList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ›% -7/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}ß$Ð -batch_v1ªwatch changes to an object of kind Job. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jH -x-kubernetes-group-version-kind%#group: batch -kind: Job -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J0 -.,"*pathname of the Job"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ì -/apis/batch/v1beta1/ÓÐ - batch_v1beta1get available resources*getBatchV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttpsö" -/apis/batch/v1beta1/cronjobsÕ"Ú - batch_v1beta1%list or watch objects of kind CronJob*'listBatchV1beta1CronJobForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J` -E -200> -< -OK6 -4 -2#/definitions/io.k8s.api.batch.v1beta1.CronJobList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ›K -3/apis/batch/v1beta1/namespaces/{namespace}/cronjobsãJ‚! - batch_v1beta1%list or watch objects of kind CronJob*!listBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J` -E -200> -< -OK6 -4 -2#/definitions/io.k8s.api.batch.v1beta1.CronJobList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -"å - batch_v1beta1create a CronJob*#createBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD -B -@bodybody *0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jí -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob -F -201? -= -Created2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob -G -202@ -> -Accepted2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -*Ç - batch_v1beta1delete collection of CronJob*-deleteBatchV1beta1CollectionNamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string £$ -:/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}ä#ê - batch_v1beta1read the specified CronJob*!readBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -© - batch_v1beta1replace the specified CronJob*$replaceBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD -B -@bodybody *0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¤ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob -F -201? -= -Created2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -*‹ - batch_v1beta1delete a CronJob*#deleteBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -BÑ - batch_v1beta1&partially update the specified CronJob*"patchBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -J4 -20".pathname of the CronJob"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Õ -A/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/statusƒ - batch_v1beta1$read status of the specified CronJob*'readBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -¹ - batch_v1beta1'replace status of the specified CronJob**replaceBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BD -B -@bodybody *0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJobBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¤ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob -F -201? -= -Created2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Bá - batch_v1beta10partially update status of the specified CronJob*(patchBatchV1beta1NamespacedCronJobStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -J4 -20".pathname of the CronJob"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ß# -"/apis/batch/v1beta1/watch/cronjobs¸#½ - batch_v1beta1swatch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.*,watchBatchV1beta1CronJobListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ò$ -9/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs”$· - batch_v1beta1swatch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.*&watchBatchV1beta1NamespacedCronJobList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ã% -@/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs/{name}þ$ë - batch_v1beta1®watch changes to an object of kind CronJob. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*"watchBatchV1beta1NamespacedCronJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jQ -x-kubernetes-group-version-kind.,group: batch -kind: CronJob -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 -20".pathname of the CronJob"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean é -/apis/certificates.k8s.io/ÊÇ - certificatesget information of a group*getCertificatesAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsˆ -"/apis/certificates.k8s.io/v1beta1/áÞ -certificates_v1beta1get available resources*"getCertificatesV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps—M - -< -:#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean # -"/apis/extensions/v1beta1/ingressesé"î -extensions_v1beta1%list or watch objects of kind Ingress*,listExtensionsV1beta1IngressForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Je -J -200C -A -OK; -9 -7#/definitions/io.k8s.api.extensions.v1beta1.IngressList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean „L -:/apis/extensions/v1beta1/namespaces/{namespace}/daemonsetsÅKž! -extensions_v1beta1'list or watch objects of kind DaemonSet*(listExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -"– -extensions_v1beta1create a DaemonSet**createExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK -I -Gbodybody *7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J‚ -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet -M -201F -D -Created9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet -N -202G -E -Accepted9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -*Ü -extensions_v1beta1delete collection of DaemonSet*4deleteExtensionsV1beta1CollectionNamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string £% -A/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}Ý$† -extensions_v1beta1read the specified DaemonSet*(readExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Ó -extensions_v1beta1replace the specified DaemonSet*+replaceExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK -I -Gbodybody *7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J² -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet -M -201F -D -Created9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -*  -extensions_v1beta1delete a DaemonSet**deleteExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Bí -extensions_v1beta1(partially update the specified DaemonSet*)patchExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string À -H/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/statusóŸ -extensions_v1beta1&read status of the specified DaemonSet*.readExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -ã -extensions_v1beta1)replace status of the specified DaemonSet*1replaceExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK -I -Gbodybody *7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J² -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet -M -201F -D -Created9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Bý -extensions_v1beta12partially update status of the specified DaemonSet*/patchExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string “L -;/apis/extensions/v1beta1/namespaces/{namespace}/deploymentsÓK¢! -extensions_v1beta1(list or watch objects of kind Deployment*)listExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh -M -200F -D -OK> -< -:#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -" -extensions_v1beta1create a Deployment*+createExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J… -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment -O -202H -F -Accepted: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -*ß -extensions_v1beta1delete collection of Deployment*5deleteExtensionsV1beta1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¶% -B/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}ï$Š -extensions_v1beta1read the specified Deployment*)readExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Ù -extensions_v1beta1 replace the specified Deployment*,replaceExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -*£ -extensions_v1beta1delete a Deployment*+deleteExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Bñ -extensions_v1beta1)partially update the specified Deployment**patchExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string « -K/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollbackÛ -"© +MKIquery-If 'true', then the output is pretty printed."pretty2string ª +K/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollbackÚ "© extensions_v1beta1create rollback of a Deployment*3createExtensionsV1beta1NamespacedDeploymentRollback2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody *@ @@ -17416,300 +21274,426 @@ ja kind: DeploymentRollback version: v1beta1 Jž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J— -”‘ŽquerycIf IncludeUninitialized is specified, the object may be returned without completing initialization."includeUninitialized2boolean J? +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J? =;"9pathname of the DeploymentRollback"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string œ -H/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scaleÏ— -extensions_v1beta1&read scale of the specified Deployment*.readExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -Ó -extensions_v1beta1)replace scale of the specified Deployment*1replaceExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -Bõ -extensions_v1beta12partially update scale of the specified Deployment*/patchExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +MKIquery-If 'true', then the output is pretty printed."pretty2string ç- +F/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}œ-ñ +extensions_v1beta1 read the specified NetworkPolicy*,readExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jg L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ð -I/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status‚£ -extensions_v1beta1'read status of the specified Deployment*/readExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -é -extensions_v1beta1*replace status of the specified Deployment*2replaceExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -B -extensions_v1beta13partially update status of the specified Deployment*0patchExtensionsV1beta1NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string èK -9/apis/extensions/v1beta1/namespaces/{namespace}/ingressesªK–! -extensions_v1beta1%list or watch objects of kind Ingress*&listExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Je -J -200C -A -OK; -9 -7#/definitions/io.k8s.api.extensions.v1beta1.IngressList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -"‰ -extensions_v1beta1create an Ingress*(createExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI -G -Ebodybody *5 -3#/definitions/io.k8s.api.extensions.v1beta1.IngressBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jü -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress -K -201D -B -Created7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress -L -202E +200E C -Accepted7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +OK= +; +9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress + UnauthorizedRhttpsj +x-kubernetes-actionget +j\ +x-kubernetes-group-version-kind97version: v1beta1 +group: extensions +kind: NetworkPolicy +„ +extensions_v1beta1#replace the specified NetworkPolicy*/replaceExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO +M +Kbodybody *; +9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jº +L +200E +C +OK= +; +9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy +Q +201J +H +Created= +; +9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +j\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy version: v1beta1 -*Ö -extensions_v1beta1delete collection of Ingress*2deleteExtensionsV1beta1CollectionNamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +*¬ +extensions_v1beta1delete a NetworkPolicy*.deleteExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» L 200E C OK= ; 9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status  401  - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: extensions +kind: NetworkPolicy version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +j +x-kubernetes-action delete +B€ +extensions_v1beta1,partially update the specified NetworkPolicy*-patchExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j\ +x-kubernetes-group-version-kind97version: v1beta1 +group: extensions +kind: NetworkPolicy +J: +86"4pathname of the NetworkPolicy"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÿ$ -@/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}º$þ -extensions_v1beta1read the specified Ingress*&readExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +MKIquery-If 'true', then the output is pretty printed."pretty2string é! +/apis/apps/v1/daemonsetsÌ!Ê +apps_v1'list or watch objects of kind DaemonSet*#listAppsV1DaemonSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ +A +200: +8 +OK2 +0 +.#/definitions/io.k8s.api.apps.v1.DaemonSetList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jM +x-kubernetes-group-version-kind*(group: apps +kind: DaemonSet +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ë# +5/apis/node.k8s.io/v1beta1/watch/runtimeclasses/{name}±#ô + node_v1beta1³watch changes to an object of kind RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchNodeV1beta1RuntimeClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +j\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J9 +75"3pathname of the RuntimeClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean € +R/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status©Ç +autoscaling_v14read status of the specified HorizontalPodAutoscaler*8readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jm +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler  401  UnauthorizedRhttpsj x-kubernetes-actionget -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Ç -extensions_v1beta1replace the specified Ingress*)replaceExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +¸ +autoscaling_v17replace status of the specified HorizontalPodAutoscaler*;replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BU +S +Qbodybody *A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÆ +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler +W +201P +N +CreatedC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsjb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +j +x-kubernetes-actionput +B¨ +autoscaling_v1@partially update status of the specified HorizontalPodAutoscaler*9patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jm +R +200K +I +OKC +A +?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jb +x-kubernetes-group-version-kind?=kind: HorizontalPodAutoscaler +version: v1 +group: autoscaling +JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ó +/apis/networking.k8s.io/v1/ÓÐ + networking_v1get available resources*getNetworkingV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps²$ +O/apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalersÞ#ú +autoscaling_v2beta2ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*deleteAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj +x-kubernetes-action delete +j} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration +version: v1beta1 +Bæ +admissionregistration_v1beta1;partially update the specified MutatingWebhookConfiguration*=patchAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J +f +200_ +] +OKW +U +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress +j} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration version: v1beta1 -J4 -20".pathname of the Ingress"name*string˜J` +JI +GE"Cpath(name of the MutatingWebhookConfiguration"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ù# +A/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments³#Ï +extensions_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchExtensionsV1beta1NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¡ -G/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/statusÕ— -extensions_v1beta1$read status of the specified Ingress*,readExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ja -F -200? +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ›$ +A/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}Õ#™ +rbacAuthorization_v1beta1²watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*(watchRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsji +x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io +kind: ClusterRole +version: v1beta1 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 +64"2pathname of the ClusterRole"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Š$ +;/apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name}Ê#‰ +storage_v1beta1·watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjc +x-kubernetes-group-version-kind@>version: v1beta1 +group: storage.k8s.io +kind: VolumeAttachment +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J= +;9"7pathname of the VolumeAttachment"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¥* +/api/v1/namespaces/{name}‡*© +core_v1read the specified Namespace*readCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JX = -OK7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Namespace  401  UnauthorizedRhttpsj x-kubernetes-actionget -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -× -extensions_v1beta1'replace status of the specified Ingress*/replaceExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI -G -Ebodybody *5 -3#/definitions/io.k8s.api.extensions.v1beta1.IngressBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J® -F -200? +jK +x-kubernetes-group-version-kind(&kind: Namespace +version: v1 +group: "" +ž +core_v1replace the specified Namespace*replaceCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.NamespaceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ = -OK7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress -K -201D +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Namespace B -Created7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.Namespace  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +j x-kubernetes-actionput -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Bõ -extensions_v1beta10partially update status of the specified Ingress*-patchExtensionsV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +*ó +core_v1delete a Namespace*deleteCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +j +x-kubernetes-action delete +B¸ +core_v1(partially update the specified Namespace*patchCoreV1Namespace2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Ja -F -200? +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX = -OK7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Namespace  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress +jK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +J6 +42"0pathname of the Namespace"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string þ$ +U/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name}¤$× +admissionregistration_v1beta1Ãwatch changes to an object of kind MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*=watchAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration version: v1beta1 -J4 -20".pathname of the Ingress"name*string˜J` +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JI +GE"Cpath(name of the MutatingWebhookConfiguration"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean å +C/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale + apps_v1beta2'read scale of the specified StatefulSet*)readAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)kind: Scale +version: v1beta2 +group: apps +Ê + apps_v1beta2*replace scale of the specified StatefulSet*,replaceAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1beta2.Scale + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta2 +Bâ + apps_v1beta23partially update scale of the specified StatefulSet**patchAppsV1beta2NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta2.ScaleRhttpsjN +x-kubernetes-group-version-kind+)kind: Scale +version: v1beta2 +group: apps +j +x-kubernetes-actionpatch +J2 +0.",pathname of the Scale"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÁL -?/apis/extensions/v1beta1/namespaces/{namespace}/networkpoliciesýK®! +MKIquery-If 'true', then the output is pretty printed."pretty2string î" +$/apis/apps/v1beta2/watch/replicasetsÅ"à + apps_v1beta2vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*.watchAppsV1beta2ReplicaSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jS +x-kubernetes-group-version-kind0.group: apps +kind: ReplicaSet +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ +/apis/authentication.k8s.io/v1/ÛØ +authentication_v1get available resources*getAuthenticationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttps÷# +8/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}º#ý +storage_v1beta1³watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J9 +75"3pathname of the StorageClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ž% +Q/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}È$ž +autoscaling_v1¾watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*3watchAutoscalingV1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jb +x-kubernetes-group-version-kind?=group: autoscaling +kind: HorizontalPodAutoscaler +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JD +B@">path#name of the HorizontalPodAutoscaler"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ã# +3/apis/storage.k8s.io/v1/watch/storageclasses/{name}«#î + +storage_v1³watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jZ +x-kubernetes-group-version-kind75group: storage.k8s.io +kind: StorageClass +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J9 +75"3pathname of the StorageClass"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ý$ +J/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name}®$‰ + apps_v1beta2¹watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*,watchAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? +=;"9pathname of the ControllerRevision"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean áM +?/apis/extensions/v1beta1/namespaces/{namespace}/networkpoliciesM®! extensions_v1beta1+list or watch objects of kind NetworkPolicy*,listExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -17865,12 +22400,13 @@ j\ x-kubernetes-group-version-kind97group: extensions kind: NetworkPolicy version: v1beta1 -"² +"Ë extensions_v1beta1create a NetworkPolicy*.createExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO M Kbodybody *; 9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JŽ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JŽ L 200E C @@ -17931,58 +22467,442 @@ j\ x-kubernetes-group-version-kind97group: extensions kind: NetworkPolicy version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ð% -F/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}¥%– -extensions_v1beta1 read the specified NetworkPolicy*,readExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jg +MKIquery-If 'true', then the output is pretty printed."pretty2string õ" +./apis/node.k8s.io/v1beta1/watch/runtimeclassesÂ"À + node_v1beta1xwatch individual changes to a list of RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead.* watchNodeV1beta1RuntimeClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj\ +x-kubernetes-group-version-kind97group: node.k8s.io +kind: RuntimeClass +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Æ) +/api/v1/nodes/{name}­)• +core_v1read the specified Node*readCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + UnauthorizedRhttpsjF +x-kubernetes-group-version-kind#!version: v1 +group: "" +kind: Node +j +x-kubernetes-actionget +€ +core_v1replace the specified Node*replaceCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; +9 +7bodybody *' +%#/definitions/io.k8s.api.core.v1.NodeBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J’ += +2016 +4 +Created) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + Unauthorized +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.NodeRhttpsj +x-kubernetes-actionput +jF +x-kubernetes-group-version-kind#!group: "" +kind: Node +version: v1 +*ä +core_v1 delete a Node*deleteCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» L 200E C OK= ; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +jF +x-kubernetes-group-version-kind#!group: "" +kind: Node +version: v1 +B¤ +core_v1#partially update the specified Node*patchCoreV1Node2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JS +8 +2001 +/ +OK) +' +%#/definitions/io.k8s.api.core.v1.Node + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jF +x-kubernetes-group-version-kind#!kind: Node +version: v1 +group: "" +J1 +/-"+pathname of the Node"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ù- +D/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name}-í + apps_v1beta2%read the specified ControllerRevision*+readAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jf + +401 + + Unauthorized +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j +x-kubernetes-actionget +þ + apps_v1beta2(replace the specified ControllerRevision*.replaceAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +L +Jbodybody *: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¸ +P +201I +G +Created< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision + +401 + + Unauthorized +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j +x-kubernetes-actionput +*© + apps_v1beta2delete a ControllerRevision*-deleteAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +Bü + apps_v1beta21partially update the specified ControllerRevision*,patchAppsV1beta2NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jf +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision + +401 + + UnauthorizedRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +j +x-kubernetes-actionpatch +J? +=;"9pathname of the ControllerRevision"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string …O +I/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers·NÚ! +autoscaling_v2beta15list or watch objects of kind HorizontalPodAutoscaler*7listAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jv + +401 + + Unauthorized +[ +200T +R +OKL +J +H#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerListRhttpsjg +x-kubernetes-group-version-kindDBkind: HorizontalPodAutoscaler +version: v2beta1 +group: autoscaling +j +x-kubernetes-actionlist +"˜ + +autoscaling_v2beta1 create a HorizontalPodAutoscaler*9createAutoscalingV2beta1NamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BZ +X +Vbodybody *F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¯ +W +200P +N +OKH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler +\ +201U +S +CreatedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler +] +202V +T +AcceptedH +F +D#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpost +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +*‰! +autoscaling_v2beta1,delete collection of HorizontalPodAutoscaler*CdeleteAutoscalingV2beta1CollectionNamespacedHorizontalPodAutoscaler2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jg +x-kubernetes-group-version-kindDBgroup: autoscaling +kind: HorizontalPodAutoscaler +version: v2beta1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ²$ +O/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalersÞ#ú +autoscaling_v2beta1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*group: storage.k8s.io +kind: VolumeAttachment version: v1beta1 -ë -extensions_v1beta1#replace the specified NetworkPolicy*/replaceExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO + +storage_v1beta1&replace the specified VolumeAttachment*%replaceStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO M Kbodybody *; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jº +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jº L 200E C OK= ; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment Q 201J H Created= ; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment  401  UnauthorizedRhttpsj x-kubernetes-actionput -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy +jc +x-kubernetes-group-version-kind@>group: storage.k8s.io +kind: VolumeAttachment version: v1beta1 -*¬ -extensions_v1beta1delete a NetworkPolicy*.deleteExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +*© +storage_v1beta1delete a VolumeAttachment*$deleteStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -18007,37 +22927,38 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy +jc +x-kubernetes-group-version-kind@>group: storage.k8s.io +kind: VolumeAttachment version: v1beta1 -Bý -extensions_v1beta1,partially update the specified NetworkPolicy*-patchExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +Bý +storage_v1beta1/partially update the specified VolumeAttachment*#patchStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jg +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jg L 200E C OK= ; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy +jc +x-kubernetes-group-version-kind@>kind: VolumeAttachment version: v1beta1 -J: -86"4pathname of the NetworkPolicy"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string “L -;/apis/extensions/v1beta1/namespaces/{namespace}/replicasetsÓK¢! -extensions_v1beta1(list or watch objects of kind ReplicaSet*)listExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +group: storage.k8s.io +J= +;9"7pathname of the VolumeAttachment"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ÿ+ +'/api/v1/namespaces/{namespace}/servicesó*è +core_v1%list or watch objects of kind Service*listCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -18053,1866 +22974,108 @@ limit is a maximum number of responses to return for a list call. If more items The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh -M -200F -D -OK> +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.core.v1.ServiceList + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$kind: Service +version: v1 +group: "" +j +x-kubernetes-actionlist +"Ò +core_v1create a Service*createCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> < -:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -" -extensions_v1beta1create a ReplicaSet*+createExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J… -I -200B +:bodybody ** +(#/definitions/io.k8s.api.core.v1.ServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÛ +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Service @ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet -O -202H -F -Accepted: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -*ß -extensions_v1beta1delete collection of ReplicaSet*5deleteExtensionsV1beta1CollectionNamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¶% -B/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}ï$Š -extensions_v1beta1read the specified ReplicaSet*)readExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Ù -extensions_v1beta1 replace the specified ReplicaSet*,replaceExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -*£ -extensions_v1beta1delete a ReplicaSet*+deleteExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Bñ -extensions_v1beta1)partially update the specified ReplicaSet**patchExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string œ -H/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scaleÏ— -extensions_v1beta1&read scale of the specified ReplicaSet*.readExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -Ó -extensions_v1beta1)replace scale of the specified ReplicaSet*1replaceExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -Bõ -extensions_v1beta12partially update scale of the specified ReplicaSet*/patchExtensionsV1beta1NamespacedReplicaSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ð -I/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status‚£ -extensions_v1beta1'read status of the specified ReplicaSet*/readExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -é -extensions_v1beta1*replace status of the specified ReplicaSet*2replaceExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL -J -Hbodybody *8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J´ -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet -N -201G -E -Created: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -B -extensions_v1beta13partially update status of the specified ReplicaSet*0patchExtensionsV1beta1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jd -I -200B -@ -OK: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ‡ -S/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale¯· -extensions_v1beta16read scale of the specified ReplicationControllerDummy*>readExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -ó -extensions_v1beta19replace scale of the specified ReplicationControllerDummy*AreplaceExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -B• -extensions_v1beta1Bpartially update scale of the specified ReplicationControllerDummy*?patchExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.extensions.v1beta1.Scale - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jT -x-kubernetes-group-version-kind1/group: extensions -kind: Scale -version: v1beta1 -J2 -0.",pathname of the Scale"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ®# -(/apis/extensions/v1beta1/networkpolicies#† -extensions_v1beta1+list or watch objects of kind NetworkPolicy*2listExtensionsV1beta1NetworkPolicyForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æK -,/apis/extensions/v1beta1/podsecuritypoliciesµK´! -extensions_v1beta1/list or watch objects of kind PodSecurityPolicy*&listExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jo -T -200M -K -OKE -C -A#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -"Ä -extensions_v1beta1create a PodSecurityPolicy*(createExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BS -Q -Obodybody *? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jš -P -200I -G -OKA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy -U -201N -L -CreatedA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy -V -202O -M -AcceptedA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -*ê -extensions_v1beta1&delete collection of PodSecurityPolicy*2deleteExtensionsV1beta1CollectionPodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ›% -3/apis/extensions/v1beta1/podsecuritypolicies/{name}ã$œ -extensions_v1beta1$read the specified PodSecurityPolicy*&readExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -ù -extensions_v1beta1'replace the specified PodSecurityPolicy*)replaceExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BS -Q -Obodybody *? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J -P -200I -G -OKA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy -U -201N -L -CreatedA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -*® -extensions_v1beta1delete a PodSecurityPolicy*(deleteExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -Bƒ -extensions_v1beta10partially update the specified PodSecurityPolicy*'patchExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -J> -<:"8pathname of the PodSecurityPolicy"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ž# -$/apis/extensions/v1beta1/replicasetsõ"ú -extensions_v1beta1(list or watch objects of kind ReplicaSet*/listExtensionsV1beta1ReplicaSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jh -M -200F -D -OK> -< -:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û# -)/apis/extensions/v1beta1/watch/daemonsetsÍ#Ò -extensions_v1beta1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*3watchExtensionsV1beta1DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ# -*/apis/extensions/v1beta1/watch/deploymentsÐ#Õ -extensions_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*4watchExtensionsV1beta1DeploymentListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ô# -(/apis/extensions/v1beta1/watch/ingressesÇ#Ì -extensions_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*1watchExtensionsV1beta1IngressListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean î$ -@/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets©$Ì -extensions_v1beta1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*-watchExtensionsV1beta1NamespacedDaemonSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean á% -G/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}•%€ -extensions_v1beta1°watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*)watchExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jX -x-kubernetes-group-version-kind53group: extensions -kind: DaemonSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 -42"0pathname of the DaemonSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ò$ -A/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments¬$Ï -extensions_v1beta1vwatch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.*.watchExtensionsV1beta1NamespacedDeploymentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ% -H/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}™%ƒ -extensions_v1beta1±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: Deployment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the Deployment"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç$ -?/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses£$Æ -extensions_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*+watchExtensionsV1beta1NamespacedIngressList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ø% -F/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}%ú -extensions_v1beta1®watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchExtensionsV1beta1NamespacedIngress2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jV -x-kubernetes-group-version-kind31group: extensions -kind: Ingress -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 -20".pathname of the Ingress"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ$ -E/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpoliciesµ$Ø -extensions_v1beta1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*1watchExtensionsV1beta1NamespacedNetworkPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ö% -L/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}¥%Œ -extensions_v1beta1´watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*-watchExtensionsV1beta1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: -86"4pathname of the NetworkPolicy"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ò$ -A/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets¬$Ï -extensions_v1beta1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*.watchExtensionsV1beta1NamespacedReplicaSetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean æ% -H/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}™%ƒ -extensions_v1beta1±watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.**watchExtensionsV1beta1NamespacedReplicaSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 -53"1pathname of the ReplicaSet"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Œ$ -./apis/extensions/v1beta1/watch/networkpoliciesÙ#Þ -extensions_v1beta1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*7watchExtensionsV1beta1NetworkPolicyListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j\ -x-kubernetes-group-version-kind97group: extensions -kind: NetworkPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Œ$ -2/apis/extensions/v1beta1/watch/podsecuritypoliciesÕ#Ú -extensions_v1beta1}watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.*+watchExtensionsV1beta1PodSecurityPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‡% -9/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}É$Ž -extensions_v1beta1¸watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchExtensionsV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j` -x-kubernetes-group-version-kind=;group: extensions -kind: PodSecurityPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J> -<:"8pathname of the PodSecurityPolicy"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ# -*/apis/extensions/v1beta1/watch/replicasetsÐ#Õ -extensions_v1beta1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*4watchExtensionsV1beta1ReplicaSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jY -x-kubernetes-group-version-kind64group: extensions -kind: ReplicaSet -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ã -/apis/networking.k8s.io/ÆÃ - -networkingget information of a group*getNetworkingAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsó -/apis/networking.k8s.io/v1/ÓÐ - networking_v1get available resources*getNetworkingV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps’L -A/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpoliciesÌK¡! - networking_v1+list or watch objects of kind NetworkPolicy*'listNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -"– - networking_v1create a NetworkPolicy*)createNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ -H -Fbodybody *6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jÿ -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy -L -201E -C -Created8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy -M -202F -D -Accepted8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -*à - networking_v1"delete collection of NetworkPolicy*3deleteNetworkingV1CollectionNamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¹% -H/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}ì$‰ - networking_v1 read the specified NetworkPolicy*'readNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Ô - networking_v1#replace the specified NetworkPolicy**replaceNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ -H -Fbodybody *6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J° -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy -L -201E -C -Created8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -*¤ - networking_v1delete a NetworkPolicy*)deleteNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Bð - networking_v1,partially update the specified NetworkPolicy*(patchNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -J: -86"4pathname of the NetworkPolicy"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string £# -*/apis/networking.k8s.io/v1/networkpoliciesô"ù - networking_v1+list or watch objects of kind NetworkPolicy*-listNetworkingV1NetworkPolicyForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù$ -G/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies­$Ð - networking_v1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*,watchNetworkingV1NamespacedNetworkPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ð% -N/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}%„ - networking_v1´watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*(watchNetworkingV1NamespacedNetworkPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: -86"4pathname of the NetworkPolicy"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean †$ -0/apis/networking.k8s.io/v1/watch/networkpoliciesÑ#Ö - networking_v1ywatch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.*2watchNetworkingV1NetworkPolicyListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j^ -x-kubernetes-group-version-kind;9group: networking.k8s.io -kind: NetworkPolicy -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ð - /apis/policy/¾» -policyget information of a group*getPolicyAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsï -/apis/policy/v1beta1/ÕÒ -policy_v1beta1get available resources*getPolicyV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttpsÞL -@/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets™L¶! -policy_v1beta11list or watch objects of kind PodDisruptionBudget*.listPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jm -R -200K -I -OKC +2019 +7 +Created, +* +(#/definitions/io.k8s.api.core.v1.Service A -?#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -"À -policy_v1beta1create a PodDisruptionBudget*0createPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ -O -Mbodybody *= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J” -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget -S -201L -J -Created? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget -T -202M -K -Accepted? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +202: +8 +Accepted, +* +(#/definitions/io.k8s.api.core.v1.Service  401  UnauthorizedRhttpsj x-kubernetes-actionpost -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -*î -policy_v1beta1(delete collection of PodDisruptionBudget*:deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +jI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ™& -G/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}Í%ž -policy_v1beta1&read the specified PodDisruptionBudget*.readPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Ji -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +MKIquery-If 'true', then the output is pretty printed."pretty2string ™- +2/apis/apiregistration.k8s.io/v1/apiservices/{name}â,÷ +apiregistration_v1read the specified APIService*readApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean Jy +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionget -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -÷ -policy_v1beta1)replace the specified PodDisruptionBudget*1replacePolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ -O -Mbodybody *= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¾ -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget -S -201L -J -Created? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +® +apiregistration_v1 replace the specified APIService*"replaceApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ba +_ +]bodybody *M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÞ +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService +c +201\ +Z +CreatedO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionput -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -*² -policy_v1beta1delete a PodDisruptionBudget*0deletePolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +*¡ +apiregistration_v1delete an APIService*!deleteApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -19937,127 +23100,59 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -B… -policy_v1beta12partially update the specified PodDisruptionBudget*/patchPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +B† +apiregistration_v1)partially update the specified APIService* patchApiregistrationV1APIService2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Ji -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jy +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -J@ -><":pathname of the PodDisruptionBudget"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¤ -N/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/statusÑ· -policy_v1beta10read status of the specified PodDisruptionBudget*4readPolicyV1beta1NamespacedPodDisruptionBudgetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ji -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ö" +/apis/apps/v1/watch/daemonsets³"± +apps_v1uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*(watchAppsV1DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionget -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -‡ -policy_v1beta13replace status of the specified PodDisruptionBudget*7replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BQ -O -Mbodybody *= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¾ -N -200G -E -OK? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget -S -201L -J -Created? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -B• -policy_v1beta1<":pathname of the PodDisruptionBudget"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ·# -)/apis/policy/v1beta1/poddisruptionbudgets‰#Ž -policy_v1beta11list or watch objects of kind PodDisruptionBudget*4listPolicyV1beta1PodDisruptionBudgetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jm -R -200K -I -OKC -A -?#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jM +x-kubernetes-group-version-kind*(kind: DaemonSet +version: v1 +group: apps Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -20070,8 +23165,8 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ªK -(/apis/policy/v1beta1/podsecuritypoliciesýJ¤! +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÊL +(/apis/policy/v1beta1/podsecuritypoliciesL¤! policy_v1beta1/list or watch objects of kind PodSecurityPolicy*"listPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -20098,18 +23193,19 @@ G  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -j\ -x-kubernetes-group-version-kind97group: policy + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97version: v1beta1 +group: policy kind: PodSecurityPolicy -version: v1beta1 -"¨ +j +x-kubernetes-actionlist +"Á policy_v1beta1create a PodSecurityPolicy*$createPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO M Kbodybody *; 9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JŽ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JŽ L 200E C @@ -20131,12 +23227,12 @@ I  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -j\ + UnauthorizedRhttpsj\ x-kubernetes-group-version-kind97group: policy kind: PodSecurityPolicy version: v1beta1 +j +x-kubernetes-actionpost *Þ policy_v1beta1&delete collection of PodSecurityPolicy*.deletePolicyV1beta1CollectionPodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -20167,212 +23263,33 @@ C UnauthorizedRhttpsj* x-kubernetes-actiondeletecollection j\ -x-kubernetes-group-version-kind97group: policy +x-kubernetes-group-version-kind97version: v1beta1 +group: policy kind: PodSecurityPolicy -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ó$ -//apis/policy/v1beta1/podsecuritypolicies/{name}Ÿ$Œ -policy_v1beta1$read the specified PodSecurityPolicy*"readPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -á -policy_v1beta1'replace the specified PodSecurityPolicy*%replacePolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO -M -Kbodybody *; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jº -L -200E -C -OK= -; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy -Q -201J -H -Created= -; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -*¢ -policy_v1beta1delete a PodSecurityPolicy*$deletePolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -Bó -policy_v1beta10partially update the specified PodSecurityPolicy*#patchPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -J> -<:"8pathname of the PodSecurityPolicy"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string †% -F/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets»$Þ -policy_v1beta1watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.*3watchPolicyV1beta1NamespacedPodDisruptionBudgetList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ç! +/api/v1/componentstatusesÉ!Ç +core_v1$list objects of kind ComponentStatus*listCoreV1ComponentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jb G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent +200@ +> +OK8 +6 +4#/definitions/io.k8s.api.core.v1.ComponentStatusList  401  - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 + UnauthorizedRhttpsj +x-kubernetes-actionlist +jQ +x-kubernetes-group-version-kind.,group: "" +kind: ComponentStatus +version: v1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ƒ& -M/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}±%’ -policy_v1beta1ºwatch changes to an object of kind PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*/watchPolicyV1beta1NamespacedPodDisruptionBudget2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J@ -><":pathname of the PodDisruptionBudget"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean “$ -//apis/policy/v1beta1/watch/poddisruptionbudgetsß#ä -policy_v1beta1watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.*9watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j^ -x-kubernetes-group-version-kind;9group: policy -kind: PodDisruptionBudget -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -20385,95 +23302,9 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ü# -./apis/policy/v1beta1/watch/podsecuritypoliciesÉ#Î -policy_v1beta1}watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.*'watchPolicyV1beta1PodSecurityPolicyList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÷$ -5/apis/policy/v1beta1/watch/podsecuritypolicies/{name}½$‚ -policy_v1beta1¸watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j\ -x-kubernetes-group-version-kind97group: policy -kind: PodSecurityPolicy -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J> -<:"8pathname of the PodSecurityPolicy"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù - /apis/rbac.authorization.k8s.io/ÔÑ -rbacAuthorizationget information of a group*getRbacAuthorizationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttps‰ -#/apis/rbac.authorization.k8s.io/v1/áÞ -rbacAuthorization_v1get available resources*"getRbacAuthorizationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‚ + /apis/apiregistration.k8s.io/v1/ÝÚ +apiregistration_v1get available resources* getApiregistrationV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp U 200N L @@ -20483,80 +23314,30 @@ B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList  401  - UnauthorizedRhttpsñK -6/apis/rbac.authorization.k8s.io/v1/clusterrolebindings¶K»! -rbacAuthorization_v10list or watch objects of kind ClusterRoleBinding*)listRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Je -J -200C -A -OK; -9 -7#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -"­ -rbacAuthorization_v1create a ClusterRoleBinding*+createRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI + UnauthorizedRhttps¢$ +7/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}æ#Ð +batch_v1ªwatch changes to an object of kind Job. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchBatchV1NamespacedJob2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I G -Ebodybody *5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jü -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding -K -201D -B -Created7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding -L -202E -C -Accepted7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding + UnauthorizedRhttpsj +x-kubernetes-actionwatch +jH +x-kubernetes-group-version-kind%#group: batch +kind: Job version: v1 -*û -rbacAuthorization_v1'delete collection of ClusterRoleBinding*5deleteRbacAuthorizationV1CollectionClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -20564,133 +23345,36 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Á# -=/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}ÿ"¬ -rbacAuthorization_v1%read the specified ClusterRoleBinding*)readRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -ì -rbacAuthorization_v1(replace the specified ClusterRoleBinding*,replaceRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J0 +.,"*pathname of the Job"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ê$ +L/apis/coordination.k8s.io/v1beta1/watch/namespaces/{namespace}/leases/{name}™$ +coordination_v1beta1¬watch changes to an object of kind Lease. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*'watchCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I G -Ebodybody *5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J® -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding -K -201D -B -Created7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -*¿ -rbacAuthorization_v1delete a ClusterRoleBinding*+deleteRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -BŠ -rbacAuthorization_v11partially update the specified ClusterRoleBinding**patchRbacAuthorizationV1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Ja -F -200? -= -OK7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent  401  UnauthorizedRhttpsj -x-kubernetes-actionpatch -jk -x-kubernetes-group-version-kindHFgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1 -J? -=;"9pathname of the ClusterRoleBinding"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ˆK -//apis/rbac.authorization.k8s.io/v1/clusterrolesÔJŸ! -rbacAuthorization_v1)list or watch objects of kind ClusterRole*"listRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +x-kubernetes-actionwatch +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ ô @@ -20698,341 +23382,62 @@ This field is not supported when watch is true. Clients may start a watch from t queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.rbac.v1.ClusterRoleList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -"ü -rbacAuthorization_v1create a ClusterRole*$createRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.rbac.v1.ClusterRoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jç -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole -E -202> -< -Accepted0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -*æ -rbacAuthorization_v1 delete collection of ClusterRole*.deleteRbacAuthorizationV1CollectionClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¼" -6/apis/rbac.authorization.k8s.io/v1/clusterroles/{name}" -rbacAuthorization_v1read the specified ClusterRole*"readRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 - -rbacAuthorization_v1!replace the specified ClusterRole*%replaceRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.rbac.v1.ClusterRoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J  -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -*ª -rbacAuthorization_v1delete a ClusterRole*$deleteRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -Bî -rbacAuthorization_v1*partially update the specified ClusterRole*#patchRbacAuthorizationV1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: ClusterRole -version: v1 -J8 -64"2pathname of the ClusterRole"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ŸL -F/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindingsÔK©! -rbacAuthorization_v1)list or watch objects of kind RoleBinding*,listRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.rbac.v1.RoleBindingList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding -version: v1 -"† -rbacAuthorization_v1create a RoleBinding*.createRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.rbac.v1.RoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jç -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding -E -202> -< -Accepted0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding -version: v1 -*ð -rbacAuthorization_v1 delete collection of RoleBinding*8deleteRbacAuthorizationV1CollectionNamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J2 +0.",pathname of the Lease"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ý# -M/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}‹#š -rbacAuthorization_v1read the specified RoleBinding*,readRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ç+ +7/apis/apps/v1/namespaces/{namespace}/deployments/{name}«+¹ +apps_v1read the specified Deployment*readAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JY  401  - UnauthorizedRhttpsj + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.DeploymentRhttpsj x-kubernetes-actionget -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment version: v1 -Ì -rbacAuthorization_v1!replace the specified RoleBinding*/replaceRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB -@ ->bodybody *. -,#/definitions/io.k8s.api.rbac.v1.RoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J  +° +apps_v1 replace the specified Deployment*!replaceAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA ? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding -D -201= -; -Created0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment  401  UnauthorizedRhttpsj x-kubernetes-actionput -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding +jN +x-kubernetes-group-version-kind+)kind: Deployment version: v1 -*´ -rbacAuthorization_v1delete a RoleBinding*.deleteRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +group: apps +*‚ +apps_v1delete a Deployment* deleteAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -21057,36 +23462,99 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment version: v1 -Bø -rbacAuthorization_v1*partially update the specified RoleBinding*-patchRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +BÈ +apps_v1)partially update the specified Deployment*patchAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JZ -? -2008 -6 -OK0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment version: v1 -J8 -64"2pathname of the RoleBinding"name*string˜J` +J7 +53"1pathname of the Deployment"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ¶K -?/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolesòJ! +MKIquery-If 'true', then the output is pretty printed."pretty2string é +/apis/apps/v1beta1/ÑÎ + apps_v1beta1get available resources*getAppsV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÕ$ +B/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name}Ž$ñ + apps_v1beta2±watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*$watchAppsV1beta2NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj +x-kubernetes-actionwatch +jS +x-kubernetes-group-version-kind0.version: v1beta2 +group: apps +kind: Deployment +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ð +/apis/node.k8s.io/v1beta1/ÑÎ + node_v1beta1get available resources*getNodeV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N +L +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList + +401 + + UnauthorizedRhttpsÖL +?/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles’L! rbacAuthorization_v1"list or watch objects of kind Role*%listRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -21119,12 +23587,13 @@ j] x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io kind: Role version: v1 -"Õ +"î rbacAuthorization_v1 create a Role*'createRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; 9 7bodybody *' %#/definitions/io.k8s.api.rbac.v1.RoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JÒ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÒ 8 2001 / @@ -21149,9 +23618,9 @@ version: v1 UnauthorizedRhttpsj x-kubernetes-actionpost j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role +x-kubernetes-group-version-kind:8kind: Role version: v1 +group: rbac.authorization.k8s.io *Û rbacAuthorization_v1delete collection of Role*1deleteRbacAuthorizationV1CollectionNamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -21185,56 +23654,604 @@ j] x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io kind: Role version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` +J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ø" -F/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}"þ -rbacAuthorization_v1read the specified Role*%readRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JS +MKIquery-If 'true', then the output is pretty printed."pretty2string á! +/api/v1/configmapsÊ!È +core_v1'list or watch objects of kind ConfigMap*#listCoreV1ConfigMapForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ + +401 + + Unauthorized +A +200: 8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.rbac.v1.Role +OK2 +0 +.#/definitions/io.k8s.api.core.v1.ConfigMapListRhttpsj +x-kubernetes-actionlist +jK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ” + /api/v1/namespaces/{name}/statusïç +core_v1&read status of the specified Namespace*readCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JX + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.NamespaceRhttpsj +x-kubernetes-actionget +jK +x-kubernetes-group-version-kind(&kind: Namespace +version: v1 +group: "" +® +core_v1)replace status of the specified Namespace*replaceCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ +> +<bodybody *, +*#/definitions/io.k8s.api.core.v1.NamespaceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jœ + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.Namespace +B +201; +9 +Created. +, +*#/definitions/io.k8s.api.core.v1.NamespaceRhttpsj +x-kubernetes-actionput +jK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +BÈ +core_v12partially update status of the specified Namespace*patchCoreV1NamespaceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JX + +401 + + Unauthorized += +2006 +4 +OK. +, +*#/definitions/io.k8s.api.core.v1.NamespaceRhttpsj +x-kubernetes-actionpatch +jK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace +version: v1 +J6 +42"0pathname of the Namespace"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ´$ +6/api/v1/watch/namespaces/{namespace}/configmaps/{name}ù#Ý +core_v1°watch changes to an object of kind ConfigMap. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedConfigMap2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: ConfigMap +version: v1 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 +42"0pathname of the ConfigMap"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú +9/apis/apiregistration.k8s.io/v1/apiservices/{name}/statusœµ +apiregistration_v1'read status of the specified APIService*%readApiregistrationV1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jy +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService  401  UnauthorizedRhttpsj x-kubernetes-actionget -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role +j` +x-kubernetes-group-version-kind=;kind: APIService +group: apiregistration.k8s.io version: v1 -¢ -rbacAuthorization_v1replace the specified Role*(replaceRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B; -9 -7bodybody *' -%#/definitions/io.k8s.api.rbac.v1.RoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J’ -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.rbac.v1.Role -= -2016 -4 -Created) -' -%#/definitions/io.k8s.api.rbac.v1.Role +¾ +apiregistration_v1*replace status of the specified APIService*(replaceApiregistrationV1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ba +_ +]bodybody *M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÞ +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService +c +201\ +Z +CreatedO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService + +401 + + UnauthorizedRhttpsj` +x-kubernetes-group-version-kind=;version: v1 +kind: APIService +group: apiregistration.k8s.io +j +x-kubernetes-actionput +B– +apiregistration_v13partially update status of the specified APIService*&patchApiregistrationV1APIServiceStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jy +^ +200W +U +OKO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j` +x-kubernetes-group-version-kind=;group: apiregistration.k8s.io +version: v1 +kind: APIService +J7 +53"1pathname of the APIService"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ç +>/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status„÷ +apps_v1'read status of the specified ReplicaSet*$readAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +À +apps_v1*replace status of the specified ReplicaSet*'replaceAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.ReplicaSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet  401  UnauthorizedRhttpsj x-kubernetes-actionput -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet version: v1 -*Ÿ -rbacAuthorization_v1 delete a Role*'deleteRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +BØ +apps_v13partially update status of the specified ReplicaSet*%patchAppsV1NamespacedReplicaSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)group: apps +kind: ReplicaSet +version: v1 +J7 +53"1pathname of the ReplicaSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string «# +3/apis/autoscaling/v1/watch/horizontalpodautoscalersó"ñ +autoscaling_v1ƒwatch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.*=watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jb +x-kubernetes-group-version-kind?=version: v1 +group: autoscaling +kind: HorizontalPodAutoscaler +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ü +H/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/statusŸ +extensions_v1beta1&read status of the specified DaemonSet*.readExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +j +x-kubernetes-actionget +ü +extensions_v1beta1)replace status of the specified DaemonSet*1replaceExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK +I +Gbodybody *7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J² +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet +M +201F +D +Created9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet + +401 + + UnauthorizedRhttpsjX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 +j +x-kubernetes-actionput +B€ +extensions_v1beta12partially update status of the specified DaemonSet*/patchExtensionsV1beta1NamespacedDaemonSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Jc +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jX +x-kubernetes-group-version-kind53version: v1beta1 +group: extensions +kind: DaemonSet +J6 +42"0pathname of the DaemonSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ã +/apis/scheduling.k8s.io/ÆÃ + +schedulingget information of a group*getSchedulingAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttpsåL +./apis/storage.k8s.io/v1beta1/volumeattachments²L«! +storage_v1beta1.list or watch objects of kind VolumeAttachment*"listStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jc +x-kubernetes-group-version-kind@>group: storage.k8s.io +kind: VolumeAttachment +version: v1beta1 +"È +storage_v1beta1create a VolumeAttachment*$createStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO +M +Kbodybody *; +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JŽ +Q +201J +H +Created= +; +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment +R +202K +I +Accepted= +; +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentRhttpsj +x-kubernetes-actionpost +jc +x-kubernetes-group-version-kind@>group: storage.k8s.io +kind: VolumeAttachment +version: v1beta1 +*å +storage_v1beta1%delete collection of VolumeAttachment*.deleteStorageV1beta1CollectionVolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjc +x-kubernetes-group-version-kind@>group: storage.k8s.io +kind: VolumeAttachment +version: v1beta1 +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ü# +F/apis/networking.k8s.io/v1beta1/watch/namespaces/{namespace}/ingresses±#Í +networking_v1beta1swatch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.*+watchNetworkingV1beta1NamespacedIngressList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ô* +*/api/v1/namespaces/{namespace}/pods/{name}¥*› +core_v1read the specified Pod*readCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean JR +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +„ +core_v1replace the specified Pod*replaceCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B: +8 +6bodybody *& +$#/definitions/io.k8s.api.core.v1.PodBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J +< +2015 +3 +Created( +& +$#/definitions/io.k8s.api.core.v1.Pod + +401 + + Unauthorized +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.PodRhttpsj +x-kubernetes-actionput +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +*ë +core_v1 delete a Pod*deleteCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT R Pbodybody*B @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž @@ -21259,109 +24276,39 @@ I  UnauthorizedRhttpsj x-kubernetes-action delete -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role +jE +x-kubernetes-group-version-kind" group: "" +kind: Pod version: v1 -BÜ -rbacAuthorization_v1#partially update the specified Role*&patchRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +Bª +core_v1"partially update the specified Pod*patchCoreV1NamespacedPod2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JS -8 -2001 -/ -OK) -' -%#/definitions/io.k8s.api.rbac.v1.Role +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JR +7 +2000 +. +OK( +& +$#/definitions/io.k8s.api.core.v1.Pod  401  - UnauthorizedRhttpsj + UnauthorizedRhttpsjE +x-kubernetes-group-version-kind" group: "" +kind: Pod +version: v1 +j x-kubernetes-actionpatch -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role -version: v1 -J1 -/-"+pathname of the Role"name*string˜J` +J0 +.,"*pathname of the Pod"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string °# -//apis/rbac.authorization.k8s.io/v1/rolebindingsü" -rbacAuthorization_v1)list or watch objects of kind RoleBinding*2listRbacAuthorizationV1RoleBindingForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.rbac.v1.RoleBindingList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean # -(/apis/rbac.authorization.k8s.io/v1/rolesà"å -rbacAuthorization_v1"list or watch objects of kind Role*+listRbacAuthorizationV1RoleForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JW -< -2005 -3 -OK- -+ -)#/definitions/io.k8s.api.rbac.v1.RoleList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean §$ -readExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jT +x-kubernetes-group-version-kind1/kind: Scale +version: v1beta1 +group: extensions +Œ +extensions_v1beta19replace scale of the specified ReplicationControllerDummy*AreplaceExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleRhttpsj +x-kubernetes-actionput +jT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +B˜ +extensions_v1beta1Bpartially update scale of the specified ReplicationControllerDummy*?patchExtensionsV1beta1NamespacedReplicationControllerDummyScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +j +x-kubernetes-actionpatch +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Í" +/api/v1/watch/endpoints±"¯ +core_v1uwatch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.*(watchCoreV1EndpointsListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjK +x-kubernetes-group-version-kind(&group: "" +kind: Endpoints +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª" +/api/v1/watch/nodes’" +core_v1pwatch individual changes to a list of Node. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NodeList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jF +x-kubernetes-group-version-kind#!group: "" +kind: Node +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ö# +6/apis/storage.k8s.io/v1/watch/volumeattachments/{name}»#ú + +storage_v1·watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j^ +x-kubernetes-group-version-kind;9group: storage.k8s.io +kind: VolumeAttachment +version: v1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J= +;9"7pathname of the VolumeAttachment"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean û# +E/apis/coordination.k8s.io/v1beta1/watch/namespaces/{namespace}/leases±#Í +coordination_v1beta1qwatch individual changes to a list of Lease. deprecated: use the 'watch' parameter with a list operation instead.*+watchCoordinationV1beta1NamespacedLeaseList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¶# +:/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings÷"õ +rbacAuthorization_v1beta1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*bodybody *. +,#/definitions/io.k8s.api.apps.v1.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +j +x-kubernetes-actionput +BÜ +apps_v14partially update status of the specified StatefulSet*&patchAppsV1NamespacedStatefulSetStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JZ +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.apps.v1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +J8 +64"2pathname of the StatefulSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ú$ +C/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}’$ô + apps_v1beta1²watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*%watchAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -21559,16 +25119,15 @@ G  UnauthorizedRhttpsj x-kubernetes-actionwatch -jd -x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io -kind: RoleBinding -version: v1 +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -21578,52 +25137,14 @@ usqqueryFIf true, partially initialized resources are included in the respo limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 -64"2pathname of the RoleBinding"name*string˜J` +64"2pathname of the StatefulSet"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ò$ -E/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles¨$Ë -rbacAuthorization_v1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.**watchRbacAuthorizationV1NamespacedRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role -version: v1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean à% -L/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name}%ÿ -rbacAuthorization_v1«watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*&watchRbacAuthorizationV1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean è$ +G/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}œ$€ +extensions_v1beta1°watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*)watchExtensionsV1beta1NamespacedDaemonSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -21635,16 +25156,15 @@ G  UnauthorizedRhttpsj x-kubernetes-actionwatch -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role -version: v1 +jX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet +version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -21653,15 +25173,15 @@ usqqueryFIf true, partially initialized resources are included in the respo queryÔ limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J1 -/-"+pathname of the Role"name*string˜J` +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J6 +42"0pathname of the DaemonSet"name*string˜J` ^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ›$ -5/apis/rbac.authorization.k8s.io/v1/watch/rolebindingsá#æ -rbacAuthorization_v1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*7watchRbacAuthorizationV1RoleBindingListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean †# +*/apis/extensions/v1beta1/watch/replicasets×"Õ +extensions_v1beta1vwatch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.*4watchExtensionsV1beta1ReplicaSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -21674,16 +25194,365 @@ G UnauthorizedRhttpsj# x-kubernetes-action  watchlist +jY +x-kubernetes-group-version-kind64group: extensions +kind: ReplicaSet +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean þ# +5/apis/policy/v1beta1/watch/podsecuritypolicies/{name}Ä#‚ +policy_v1beta1¸watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchPolicyV1beta1PodSecurityPolicy2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j\ +x-kubernetes-group-version-kind97version: v1beta1 +group: policy +kind: PodSecurityPolicy +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J> +<:"8pathname of the PodSecurityPolicy"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ù* +M/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}§*š +rbacAuthorization_v1read the specified RoleBinding*,readRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JZ + +401 + + Unauthorized +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBindingRhttpsjd +x-kubernetes-group-version-kindA?kind: RoleBinding +version: v1 +group: rbac.authorization.k8s.io +j +x-kubernetes-actionget +å +rbacAuthorization_v1!replace the specified RoleBinding*/replaceRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BB +@ +>bodybody *. +,#/definitions/io.k8s.api.rbac.v1.RoleBindingBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J  +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding +D +201= +; +Created0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding + +401 + + UnauthorizedRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +j +x-kubernetes-actionput +*´ +rbacAuthorization_v1delete a RoleBinding*.deleteRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj +x-kubernetes-action delete jd x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io kind: RoleBinding version: v1 +Bû +rbacAuthorization_v1*partially update the specified RoleBinding*-patchRbacAuthorizationV1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JZ + +401 + + Unauthorized +? +2008 +6 +OK0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBindingRhttpsjd +x-kubernetes-group-version-kindA?group: rbac.authorization.k8s.io +kind: RoleBinding +version: v1 +j +x-kubernetes-actionpatch +J8 +64"2pathname of the RoleBinding"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ô, +=/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}’,Ñ + apps_v1beta1read the specified StatefulSet*$readAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta1 +group: apps +j +x-kubernetes-actionget +Ô + apps_v1beta1!replace the specified StatefulSet*'replaceAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSetBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta1 +group: apps +*” + apps_v1beta1delete a StatefulSet*&deleteAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsjT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +j +x-kubernetes-action delete +Bà + apps_v1beta1*partially update the specified StatefulSet*%patchAppsV1beta1NamespacedStatefulSet2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jT +x-kubernetes-group-version-kind1/group: apps +kind: StatefulSet +version: v1beta1 +J8 +64"2pathname of the StatefulSet"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string å +C/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale + apps_v1beta1'read scale of the specified StatefulSet*)readAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.ScaleRhttpsj +x-kubernetes-actionget +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta1 +Ê + apps_v1beta1*replace scale of the specified StatefulSet*,replaceAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1beta1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jž +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.Scale +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jN +x-kubernetes-group-version-kind+)version: v1beta1 +group: apps +kind: Scale +Bâ + apps_v1beta13partially update scale of the specified StatefulSet**patchAppsV1beta1NamespacedStatefulSetScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean JY + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1beta1.ScaleRhttpsj +x-kubernetes-actionpatch +jN +x-kubernetes-group-version-kind+)group: apps +kind: Scale +version: v1beta1 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ê" +#/apis/apps/v1beta2/watch/daemonsetsÂ"À + apps_v1beta2uwatch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.*-watchAppsV1beta2DaemonSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjR +x-kubernetes-group-version-kind/-version: v1beta2 +group: apps +kind: DaemonSet +j# +x-kubernetes-action  +watchlist Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -21696,9 +25565,9 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ# -./apis/rbac.authorization.k8s.io/v1/watch/rolesÌ#Ñ -rbacAuthorization_v1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.*0watchRbacAuthorizationV1RoleListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¾" +/api/v1/watch/namespaces¡"Ÿ +core_v1uwatch individual changes to a list of Namespace. deprecated: use the 'watch' parameter with a list operation instead.*watchCoreV1NamespaceList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -21711,16 +25580,15 @@ G UnauthorizedRhttpsj# x-kubernetes-action  watchlist -j] -x-kubernetes-group-version-kind:8group: rbac.authorization.k8s.io -kind: Role +jK +x-kubernetes-group-version-kind(&group: "" +kind: Namespace version: v1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -21733,9 +25601,500 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ˜ -(/apis/rbac.authorization.k8s.io/v1beta1/ëè -rbacAuthorization_v1beta1get available resources*'getRbacAuthorizationV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ª$ +4/api/v1/watch/namespaces/{namespace}/services/{name}ñ#× +core_v1®watch changes to an object of kind Service. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchCoreV1NamespacedService2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j +x-kubernetes-actionwatch +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J4 +20".pathname of the Service"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ŽL +0/apis/apps/v1/namespaces/{namespace}/deploymentsÙKö +apps_v1(list or watch objects of kind Deployment*listAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J] +B +200; +9 +OK3 +1 +/#/definitions/io.k8s.api.apps.v1.DeploymentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +"é +apps_v1create a Deployment* createAppsV1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BA +? +=bodybody *- ++#/definitions/io.k8s.api.apps.v1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jä + +401 + + Unauthorized +> +2007 +5 +OK/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment +C +201< +: +Created/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment +D +202= +; +Accepted/ +- ++#/definitions/io.k8s.api.apps.v1.DeploymentRhttpsj +x-kubernetes-actionpost +jN +x-kubernetes-group-version-kind+)group: apps +kind: Deployment +version: v1 +*¾ +apps_v1delete collection of Deployment**deleteAppsV1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsjN +x-kubernetes-group-version-kind+)version: v1 +group: apps +kind: Deployment +j* +x-kubernetes-actiondeletecollection +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ’ +C/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/statusÊ‹ + apps_v1beta2'read status of the specified Deployment*)readAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J^ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +Þ + apps_v1beta2*replace status of the specified Deployment*,replaceAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF +D +Bbodybody *2 +0#/definitions/io.k8s.api.apps.v1beta2.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¨ +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment +H +201A +? +Created4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.Deployment + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +Bì + apps_v1beta23partially update status of the specified Deployment**patchAppsV1beta2NamespacedDeploymentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J^ + +401 + + Unauthorized +C +200< +: +OK4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.DeploymentRhttpsj +x-kubernetes-actionpatch +jS +x-kubernetes-group-version-kind0.group: apps +kind: Deployment +version: v1beta2 +J7 +53"1pathname of the Deployment"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‡ +5/apis/authorization.k8s.io/v1/selfsubjectrulesreviewsÍ +"¿ +authorization_v1create a SelfSubjectRulesReview*+createAuthorizationV1SelfSubjectRulesReview2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BV +T +Rbodybody *B +@#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewJ£ +S +200L +J +OKD +B +@#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview +X +201Q +O +CreatedD +B +@#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview +Y +202R +P +AcceptedD +B +@#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview + +401 + + UnauthorizedRhttpsjj +x-kubernetes-group-version-kindGEgroup: authorization.k8s.io +kind: SelfSubjectRulesReview +version: v1 +j +x-kubernetes-actionpost +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ³M +;/apis/extensions/v1beta1/namespaces/{namespace}/deploymentsóL¢! +extensions_v1beta1(list or watch objects of kind Deployment*)listExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jh +M +200F +D +OK> +< +:#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +jY +x-kubernetes-group-version-kind64version: v1beta1 +group: extensions +kind: Deployment +"¶ +extensions_v1beta1create a Deployment*+createExtensionsV1beta1NamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J… +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment +O +202H +F +Accepted: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment + +401 + + Unauthorized +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRhttpsj +x-kubernetes-actionpost +jY +x-kubernetes-group-version-kind64group: extensions +kind: Deployment +version: v1beta1 +*ß +extensions_v1beta1delete collection of Deployment*5deleteExtensionsV1beta1CollectionNamespacedDeployment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +jY +x-kubernetes-group-version-kind64kind: Deployment +version: v1beta1 +group: extensions +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ÑM +=/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisionsMª! + apps_v1beta10list or watch objects of kind ControllerRevision*+listAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jj +O +200H +F +OK@ +> +<#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionlist +j[ +x-kubernetes-group-version-kind86version: v1beta1 +group: apps +kind: ControllerRevision +"Ä + apps_v1beta1create a ControllerRevision*-createAppsV1beta1NamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +L +Jbodybody *: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J‹ + +401 + + Unauthorized +K +200D +B +OK< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision +P +201I +G +Created< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision +Q +202J +H +Accepted< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionRhttpsj +x-kubernetes-actionpost +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +*å + apps_v1beta1'delete collection of ControllerRevision*7deleteAppsV1beta1CollectionNamespacedControllerRevision2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status + +401 + + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ž# +,/apis/apps/v1beta2/watch/controllerrevisionsÝ"Û + apps_v1beta2~watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.*6watchAppsV1beta2ControllerRevisionListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsj# +x-kubernetes-action  +watchlist +j[ +x-kubernetes-group-version-kind86group: apps +kind: ControllerRevision +version: v1beta2 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ˆ +"/apis/certificates.k8s.io/v1beta1/áÞ +certificates_v1beta1get available resources*"getCertificatesV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp U 200N L @@ -21745,8 +26104,80 @@ B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList  401  - UnauthorizedRhttps¼L -;/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindingsüKÏ! + UnauthorizedRhttpsÞ" + /apis/apps/v1/watch/statefulsets¹"· +apps_v1wwatch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.**watchAppsV1StatefulSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjO +x-kubernetes-group-version-kind,*group: apps +kind: StatefulSet +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean É# +B/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests‚#€ +certificates_v1beta1…watch individual changes to a list of CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead.*5watchCertificatesV1beta1CertificateSigningRequestList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj# +x-kubernetes-action  +watchlist +jq +x-kubernetes-group-version-kindNLgroup: certificates.k8s.io +kind: CertificateSigningRequest +version: v1beta1 +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÜM +;/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindingsœMÏ! rbacAuthorization_v1beta10list or watch objects of kind ClusterRoleBinding*.listRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". @@ -21776,15 +26207,16 @@ F UnauthorizedRhttpsj x-kubernetes-actionlist jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +x-kubernetes-group-version-kindMKversion: v1beta1 +group: rbac.authorization.k8s.io kind: ClusterRoleBinding -version: v1beta1 -"Ð +"é rbacAuthorization_v1beta1create a ClusterRoleBinding*0createRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN L Jbodybody *: 8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J‹ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J‹ K 200D B @@ -21839,115 +26271,41 @@ C  401  - UnauthorizedRhttpsj* + UnauthorizedRhttpsjp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding +version: v1beta1 +j* x-kubernetes-actiondeletecollection -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ›$ -B/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}Ô#À -rbacAuthorization_v1beta1%read the specified ClusterRoleBinding*.readRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -Š -rbacAuthorization_v1beta1(replace the specified ClusterRoleBinding*1replaceRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ‚ + /apis/scheduling.k8s.io/v1beta1/ÝÚ +scheduling_v1beta1get available resources* getSchedulingV1beta1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N L -Jbodybody *: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¸ -K -200D -B -OK< -: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding -P -201I -G -Created< -: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList  401  - UnauthorizedRhttpsj -x-kubernetes-actionput -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -*Î -rbacAuthorization_v1beta1delete a ClusterRoleBinding*0deleteRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + UnauthorizedRhttpsê +/apis/storage.k8s.io/v1/ÍÊ + +storage_v1get available resources*getStorageV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp +U +200N L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +OKF +D +B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList  401  - UnauthorizedRhttpsj -x-kubernetes-action delete -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -Bž -rbacAuthorization_v1beta11partially update the specified ClusterRoleBinding*/patchRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jf -K -200D -B -OK< -: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -J? -=;"9pathname of the ClusterRoleBinding"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÓK -4/apis/rbac.authorization.k8s.io/v1beta1/clusterrolesšK³! -rbacAuthorization_v1beta1)list or watch objects of kind ClusterRole*'listRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï + UnauthorizedRhttps¢M +?/apis/coordination.k8s.io/v1beta1/namespaces/{namespace}/leasesÞL! +coordination_v1beta1#list or watch objects of kind Lease*&listCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -21963,57 +26321,527 @@ limit is a maximum number of responses to return for a list call. If more items The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Je +J +200C +A +OK; +9 +7#/definitions/io.k8s.api.coordination.v1beta1.LeaseList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: ClusterRole +j] +x-kubernetes-group-version-kind:8kind: Lease version: v1beta1 -"Ÿ -rbacAuthorization_v1beta1create a ClusterRole*)createRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jö -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole -J -202C -A -Accepted5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole +group: coordination.k8s.io +"¨ +coordination_v1beta1create a Lease*(createCoordinationV1beta1NamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.coordination.v1beta1.LeaseBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jü +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease +K +201D +B +Created7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease +L +202E +C +Accepted7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Lease  401  UnauthorizedRhttpsj x-kubernetes-actionpost -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: ClusterRole +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease version: v1beta1 -*õ -rbacAuthorization_v1beta1 delete collection of ClusterRole*3deleteRbacAuthorizationV1beta1CollectionClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +*Ý +coordination_v1beta1delete collection of Lease*2deleteCoordinationV1beta1CollectionNamespacedLease2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj* +x-kubernetes-actiondeletecollection +j] +x-kubernetes-group-version-kind:8group: coordination.k8s.io +kind: Lease +version: v1beta1 +J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ú +/apis/storage.k8s.io/À½ +storageget information of a group*getStorageAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi +N +200G +E +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttpsæ+ +./apis/storage.k8s.io/v1beta1/csidrivers/{name}³+Ò +storage_v1beta1read the specified CSIDriver*readStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B¬ +©¦£query†Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18."exact2boolean B  +š—queryzShould this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18."export2boolean J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +× +storage_v1beta1replace the specified CSIDriver*replaceStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BH +F +Dbodybody *4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriverBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¬ +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver +J +201C +A +Created6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver + +401 + + UnauthorizedRhttpsj\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +j +x-kubernetes-actionput +*” +storage_v1beta1delete a CSIDriver*deleteStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT +R +Pbodybody*B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä +áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ +ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ +…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» + +401 + + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status +R +202K +I +Accepted= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +j +x-kubernetes-action delete +Bá +storage_v1beta1(partially update the specified CSIDriver*patchStorageV1beta1CSIDriver2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J` +E +200> +< +OK6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +j\ +x-kubernetes-group-version-kind97group: storage.k8s.io +kind: CSIDriver +version: v1beta1 +J6 +42"0pathname of the CSIDriver"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Æ" +/api/v1/watch/services«"© +core_v1swatch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.*&watchCoreV1ServiceListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk + +401 + + Unauthorized +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEventRhttpsjI +x-kubernetes-group-version-kind&$group: "" +kind: Service +version: v1 +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ˆ% +W/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name}¬$Ý +admissionregistration_v1beta1Åwatch changes to an object of kind ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*?watchAdmissionregistrationV1beta1ValidatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionwatch +j +x-kubernetes-group-version-kind\Zversion: v1beta1 +group: admissionregistration.k8s.io +kind: ValidatingWebhookConfiguration +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JK +IG"Epath*name of the ValidatingWebhookConfiguration"name*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ë +=/apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale‰ù +apps_v1&read scale of the specified Deployment*#readAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsjP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +j +x-kubernetes-actionget +Æ +apps_v1)replace scale of the specified Deployment*&replaceAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BC +A +?bodybody */ +-#/definitions/io.k8s.api.autoscaling.v1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J¢ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale +E +201> +< +Created1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +BÚ +apps_v12partially update scale of the specified Deployment*$patchAppsV1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J[ +@ +2009 +7 +OK1 +/ +-#/definitions/io.k8s.api.autoscaling.v1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionpatch +jP +x-kubernetes-group-version-kind-+group: autoscaling +kind: Scale +version: v1 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ð! +/apis/batch/v1/jobs¸!¶ +batch_v1!list or watch objects of kind Job*listBatchV1JobForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*JW +< +2005 +3 +OK- ++ +)#/definitions/io.k8s.api.batch.v1.JobList + +401 + + UnauthorizedRhttpsjH +x-kubernetes-group-version-kind%#group: batch +kind: Job +version: v1 +j +x-kubernetes-actionlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¸ +H/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scaleë— +extensions_v1beta1&read scale of the specified Deployment*.readExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionget +jT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +ì +extensions_v1beta1)replace scale of the specified Deployment*1replaceExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +E +Cbodybody *3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale +I +201B +@ +Created5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.Scale + +401 + + UnauthorizedRhttpsj +x-kubernetes-actionput +jT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +Bø +extensions_v1beta12partially update scale of the specified Deployment*/patchExtensionsV1beta1NamespacedDeploymentScale2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +L +Jbodybody *: +8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ + +401 + + Unauthorized +D +200= +; +OK5 +3 +1#/definitions/io.k8s.api.extensions.v1beta1.ScaleRhttpsj +x-kubernetes-actionpatch +jT +x-kubernetes-group-version-kind1/group: extensions +kind: Scale +version: v1beta1 +J2 +0.",pathname of the Scale"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ªL ++/apis/storage.k8s.io/v1beta1/storageclassesúK›! +storage_v1beta1*list or watch objects of kind StorageClass*listStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +L +200E +C +OK= +; +9#/definitions/io.k8s.api.storage.v1beta1.StorageClassList + +401 + + UnauthorizedRhttpsj_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass +version: v1beta1 +j +x-kubernetes-actionlist +"¬ +storage_v1beta1create a StorageClass* createStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK +I +Gbodybody *7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClassBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J‚ +H +200A +? +OK9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +M +201F +D +Created9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +N +202G +E +Accepted9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass + +401 + + UnauthorizedRhttpsj_ +x-kubernetes-group-version-kind<:version: v1beta1 +group: storage.k8s.io +kind: StorageClass +j +x-kubernetes-actionpost +*Ù +storage_v1beta1!delete collection of StorageClass**deleteStorageV1beta1CollectionStorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -22039,16 +26867,51 @@ C  401  - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: ClusterRole + UnauthorizedRhttpsj_ +x-kubernetes-group-version-kind<:group: storage.k8s.io +kind: StorageClass version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string –# -;/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}Ö"¤ +j* +x-kubernetes-actiondeletecollection +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ò" +%/apis/apps/v1beta2/watch/statefulsetsÈ"Æ + apps_v1beta2wwatch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.*/watchAppsV1beta2StatefulSetListForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +P +200I +G +OKA +? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent + +401 + + UnauthorizedRhttpsjT +x-kubernetes-group-version-kind1/kind: StatefulSet +version: v1beta2 +group: apps +j# +x-kubernetes-action  +watchlist +Jï +ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". + +This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ +„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú + +÷ +ô +ñ +queryÔ +limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. + +The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO +MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ +ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž +›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ²* +;/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}ò)¤ rbacAuthorization_v1beta1read the specified ClusterRole*'readRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ D 200= @@ -22065,12 +26928,13 @@ ji x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io kind: ClusterRole version: v1beta1 -à +ù rbacAuthorization_v1beta1!replace the specified ClusterRole**replaceRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG E Cbodybody *3 1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string Jª D 200= ; @@ -22101,12 +26965,6 @@ Pbodybody*B áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ …‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status R 202K I @@ -22116,18 +26974,26 @@ I  401  - UnauthorizedRhttpsj + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj x-kubernetes-action delete ji x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io kind: ClusterRole version: v1beta1 -B‚ +B… rbacAuthorization_v1beta1*partially update the specified ClusterRole*(patchRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean J_ D 200= ; @@ -22145,1673 +27011,130 @@ kind: ClusterRole version: v1beta1 J8 64"2pathname of the ClusterRole"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string êL -K/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindingsšL½! -rbacAuthorization_v1beta1)list or watch objects of kind RoleBinding*1listRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -"© -rbacAuthorization_v1beta1create a RoleBinding*3createRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG +MKIquery-If 'true', then the output is pretty printed."pretty2string Í + /version/¿¼ +versionget the code version*getCodeVersion2application/json:application/jsonJ` E -Cbodybody *3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jö -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding -J -202C -A -Accepted5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding +200> +< +OK6 +4 +2#/definitions/io.k8s.apimachinery.pkg.version.Info  401  - UnauthorizedRhttpsj -x-kubernetes-actionpost -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -*ÿ -rbacAuthorization_v1beta1 delete collection of RoleBinding*=deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ·$ -R/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}à#® -rbacAuthorization_v1beta1read the specified RoleBinding*1readRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -ê -rbacAuthorization_v1beta1!replace the specified RoleBinding*4replaceRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BG -E -Cbodybody *3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jª -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding -I -201B -@ -Created5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -*à -rbacAuthorization_v1beta1delete a RoleBinding*3deleteRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -BŒ -rbacAuthorization_v1beta1*partially update the specified RoleBinding*2patchRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN + UnauthorizedRhttpsŒ +E/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback "‘ + apps_v1beta1create rollback of a Deployment*-createAppsV1beta1NamespacedDeploymentRollback2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BN L Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J_ -D -200= -; -OK5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -J8 -64"2pathname of the RoleBinding"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string L -D/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles¸K¡! -rbacAuthorization_v1beta1"list or watch objects of kind Role**listRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.rbac.v1beta1.RoleList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -"ø -rbacAuthorization_v1beta1 create a Role*,createRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.rbac.v1beta1.RoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Já -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role -C -202< -: -Accepted. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -*ê -rbacAuthorization_v1beta1delete collection of Role*6deleteRbacAuthorizationV1beta1CollectionNamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ²# -K/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}â"’ -rbacAuthorization_v1beta1read the specified Role**readRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -À -rbacAuthorization_v1beta1replace the specified Role*-replaceRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B@ -> -<bodybody *, -*#/definitions/io.k8s.api.rbac.v1beta1.RoleBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jœ -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role -B -201; -9 -Created. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -*® -rbacAuthorization_v1beta1 delete a Role*,deleteRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -Bð -rbacAuthorization_v1beta1#partially update the specified Role*+patchRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JX -= -2006 -4 -OK. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -J1 -/-"+pathname of the Role"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string É# -4/apis/rbac.authorization.k8s.io/v1beta1/rolebindings#• -rbacAuthorization_v1beta1)list or watch objects of kind RoleBinding*7listRbacAuthorizationV1beta1RoleBindingForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¦# --/apis/rbac.authorization.k8s.io/v1beta1/rolesô"ù -rbacAuthorization_v1beta1"list or watch objects of kind Role*0listRbacAuthorizationV1beta1RoleForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*J\ -A -200: -8 -OK2 -0 -.#/definitions/io.k8s.api.rbac.v1beta1.RoleList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean »$ -A/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindingsõ#ú -rbacAuthorization_v1beta1~watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*3watchRbacAuthorizationV1beta1ClusterRoleBindingList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ·% -H/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}ê$® -rbacAuthorization_v1beta1¹watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*/watchRbacAuthorizationV1beta1ClusterRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jp -x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io -kind: ClusterRoleBinding -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J? -=;"9pathname of the ClusterRoleBinding"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ÿ$ -:/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolesà#å -rbacAuthorization_v1beta1wwatch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.*,watchRbacAuthorizationV1beta1ClusterRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: ClusterRole -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ”% -A/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}Î$™ -rbacAuthorization_v1beta1²watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*(watchRbacAuthorizationV1beta1ClusterRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: ClusterRole -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 -64"2pathname of the ClusterRole"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¢% -Q/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindingsÌ$ï -rbacAuthorization_v1beta1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*6watchRbacAuthorizationV1beta1NamespacedRoleBindingList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean —& -X/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}º%£ -rbacAuthorization_v1beta1²watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*2watchRbacAuthorizationV1beta1NamespacedRoleBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -ji -x-kubernetes-group-version-kindFDgroup: rbac.authorization.k8s.io -kind: RoleBinding -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J8 -64"2pathname of the RoleBinding"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean †% -J/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles·$Ú -rbacAuthorization_v1beta1pwatch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.*/watchRbacAuthorizationV1beta1NamespacedRoleList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ô% -Q/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}ž%Ž -rbacAuthorization_v1beta1«watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*+watchRbacAuthorizationV1beta1NamespacedRole2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jb -x-kubernetes-group-version-kind?=group: rbac.authorization.k8s.io -kind: Role -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J1 -/-"+pathname of the Role"name*string˜J` -^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ¯$ -:/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindingsð#õ -rbacAuthorization_v1beta1wwatch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -"¯ -scheduling_v1beta1create a PriorityClass*$createSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO -M -Kbodybody *; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JŽ -L -200E -C -OK= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +8#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollbackJŽ Q 201J H Created= ; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status R 202K I Accepted= ; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status  401  - UnauthorizedRhttpsj + Unauthorized +L +200E +C +OK= +; +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusRhttpsj[ +x-kubernetes-group-version-kind86group: apps +kind: DeploymentRollback +version: v1beta1 +j x-kubernetes-actionpost -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -*å -scheduling_v1beta1"delete collection of PriorityClass*.deleteSchedulingV1beta1CollectionPriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ò$ -6/apis/scheduling.k8s.io/v1beta1/priorityclasses/{name}·$“ -scheduling_v1beta1 read the specified PriorityClass*"readSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -è -scheduling_v1beta1#replace the specified PriorityClass*%replaceSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO -M -Kbodybody *; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jº -L -200E -C -OK= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass -Q -201J -H -Created= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -*© -scheduling_v1beta1delete a PriorityClass*$deleteSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -Bú -scheduling_v1beta1,partially update the specified PriorityClass*#patchSchedulingV1beta1PriorityClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -J: -86"4pathname of the PriorityClass"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Š$ -5/apis/scheduling.k8s.io/v1beta1/watch/priorityclassesÐ#Õ -scheduling_v1beta1ywatch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.*'watchSchedulingV1beta1PriorityClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -jc -x-kubernetes-group-version-kind@>group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean % -group: scheduling.k8s.io -kind: PriorityClass -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J: -86"4pathname of the PriorityClass"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ú -/apis/storage.k8s.io/À½ -storageget information of a group*getStorageAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi -N -200G -E -OK? +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J? +=;"9pathname of the DeploymentRollback"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string Ù +N/apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}/status†ž +networking_v1beta1$read status of the specified Ingress*,readNetworkingV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Ja +F +200? = -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup - -401 - - UnauthorizedRhttpsê -/apis/storage.k8s.io/v1/ÍÊ - -storage_v1get available resources*getStorageV1APIResources2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJp -U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList - -401 - - UnauthorizedRhttps¿J -&/apis/storage.k8s.io/v1/storageclasses”J‡! - -storage_v1*list or watch objects of kind StorageClass*listStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.StorageClassList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -"ð - -storage_v1create a StorageClass*createStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.storage.v1.StorageClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jó -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass -I -202B -@ -Accepted4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -*Ê - -storage_v1!delete collection of StorageClass*%deleteStorageV1CollectionStorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string Ï# --/apis/storage.k8s.io/v1/storageclasses/{name}#ï - -storage_v1read the specified StorageClass*readStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress  401  UnauthorizedRhttpsj x-kubernetes-actionget -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -² - -storage_v1"replace the specified StorageClass*replaceStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BF -D -Bbodybody *2 -0#/definitions/io.k8s.api.storage.v1.StorageClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J¨ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass -H -201A -? -Created4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -*Ž - -storage_v1delete a StorageClass*deleteStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -BÖ - -storage_v1+partially update the specified StorageClass*patchStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J^ -C -200< -: -OK4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -J9 -75"3pathname of the StorageClass"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string úJ -)/apis/storage.k8s.io/v1/volumeattachmentsÌJ—! - -storage_v1.list or watch objects of kind VolumeAttachment*listStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jf +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +÷ +networking_v1beta1'replace status of the specified Ingress*/replaceNetworkingV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BI +G +Ebodybody *5 +3#/definitions/io.k8s.api.networking.v1beta1.IngressBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J® +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress K -200D +201D B -OK< -: -8#/definitions/io.k8s.api.storage.v1.VolumeAttachmentList - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionlist -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -"Œ - -storage_v1create a VolumeAttachment*createStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ -H -Fbodybody *6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jÿ -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment -L -201E -C -Created8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment -M -202F -D -Accepted8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -*Ö - -storage_v1%delete collection of VolumeAttachment*)deleteStorageV1CollectionVolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string š$ -0/apis/storage.k8s.io/v1/volumeattachments/{name}å#ÿ - -storage_v1#read the specified VolumeAttachment*readStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -Ê - -storage_v1&replace the specified VolumeAttachment* replaceStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ -H -Fbodybody *6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J° -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment -L -201E -C -Created8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +Created7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress  401  UnauthorizedRhttpsj x-kubernetes-actionput -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -*š - -storage_v1delete a VolumeAttachment*deleteStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -Bæ - -storage_v1/partially update the specified VolumeAttachment*patchStorageV1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +Bÿ +networking_v1beta10partially update status of the specified Ingress*-patchNetworkingV1beta1NamespacedIngressStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN L Jbodybody *: 8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B¯ +¬©¦queryƒfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch)." fieldManager2string BÎ +ËÈÅquery¨Force is going to "force" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests."force2boolean Ja +F +200? += +OK7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress  401  UnauthorizedRhttpsj x-kubernetes-actionpatch -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -J= -;9"7pathname of the VolumeAttachment"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ½ -7/apis/storage.k8s.io/v1/volumeattachments/{name}/status˜ - -storage_v1-read status of the specified VolumeAttachment*#readStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -Ú - -storage_v10replace status of the specified VolumeAttachment*&replaceStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BJ -H -Fbodybody *6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachmentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J° -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment -L -201E -C -Created8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -Bö - -storage_v19partially update status of the specified VolumeAttachment*$patchStorageV1VolumeAttachmentStatus2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jb -G -200@ -> -OK8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j^ -x-kubernetes-group-version-kind;9group: storage.k8s.io -kind: VolumeAttachment -version: v1 -J= -;9"7pathname of the VolumeAttachment"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string æ# -,/apis/storage.k8s.io/v1/watch/storageclassesµ#º +j] +x-kubernetes-group-version-kind:8group: networking.k8s.io +kind: Ingress +version: v1beta1 +J4 +20".pathname of the Ingress"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string í" +,/apis/storage.k8s.io/v1/watch/storageclasses¼"º storage_v1xwatch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.*watchStorageV1StorageClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P @@ -23834,8 +27157,7 @@ J ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -23848,32 +27170,14 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Ü$ -3/apis/storage.k8s.io/v1/watch/storageclasses/{name}¤$î - -storage_v1³watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jZ -x-kubernetes-group-version-kind75group: storage.k8s.io -kind: StorageClass -version: v1 -Jï +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ìO +H/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurationsŸO”" +admissionregistration_v1beta1:list or watch objects of kind MutatingWebhookConfiguration*createAdmissionregistrationV1beta1MutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bi +g +ebodybody *U +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationBž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string B– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JÜ +l +202e +c +AcceptedW U -200N -L -OKF -D -B#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration  401  - UnauthorizedRhttpsŠK -+/apis/storage.k8s.io/v1beta1/storageclassesÚJ›! -storage_v1beta1*list or watch objects of kind StorageClass*listStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï + Unauthorized +f +200_ +] +OKW +U +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration +k +201d +b +CreatedW +U +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationRhttpsj} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration +version: v1beta1 +j +x-kubernetes-actionpost +*³! +admissionregistration_v1beta11delete collection of MutatingWebhookConfiguration*HdeleteAdmissionregistrationV1beta1CollectionMutatingWebhookConfiguration2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ @@ -23998,411 +27262,90 @@ L C OK= ; -9#/definitions/io.k8s.api.storage.v1beta1.StorageClassList +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status  401  - UnauthorizedRhttpsj -x-kubernetes-actionlist -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass + UnauthorizedRhttpsj* +x-kubernetes-actiondeletecollection +j} +x-kubernetes-group-version-kindZXgroup: admissionregistration.k8s.io +kind: MutatingWebhookConfiguration version: v1beta1 -"“ -storage_v1beta1create a StorageClass* createStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK -I -Gbodybody *7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J‚ -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass -M -201F -D -Created9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +JO +MKIquery-If 'true', then the output is pretty printed."pretty2string ù + /apis/rbac.authorization.k8s.io/ÔÑ +rbacAuthorizationget information of a group*getRbacAuthorizationAPIGroup2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json:application/yaml:#application/vnd.kubernetes.protobufJi N -202G +200G E -Accepted9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +OK? += +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup + +401 + + UnauthorizedRhttps· + ++/apis/authentication.k8s.io/v1/tokenreviews‡ +"ù +authentication_v1create a TokenReview*!createAuthenticationV1TokenReview2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BL +J +Hbodybody *8 +6#/definitions/io.k8s.api.authentication.v1.TokenReviewJ… +I +200B +@ +OK: +8 +6#/definitions/io.k8s.api.authentication.v1.TokenReview +N +201G +E +Created: +8 +6#/definitions/io.k8s.api.authentication.v1.TokenReview +O +202H +F +Accepted: +8 +6#/definitions/io.k8s.api.authentication.v1.TokenReview  401  UnauthorizedRhttpsj x-kubernetes-actionpost -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -*Ù -storage_v1beta1!delete collection of StorageClass**deleteStorageV1beta1CollectionStorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg +j` +x-kubernetes-group-version-kind=;group: authentication.k8s.io +kind: TokenReview +version: v1 +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string JO +MKIquery-If 'true', then the output is pretty printed."pretty2string  " +#/apis/extensions/v1beta1/daemonsetsø!ö +extensions_v1beta1'list or watch objects of kind DaemonSet*.listExtensionsV1beta1DaemonSetForAllNamespaces2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jg L 200E C OK= ; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ©$ -2/apis/storage.k8s.io/v1beta1/storageclasses/{name}ò#ƒ -storage_v1beta1read the specified StorageClass*readStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -Ð -storage_v1beta1"replace the specified StorageClass*!replaceStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BK -I -Gbodybody *7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClassBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J² -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass -M -201F -D -Created9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -* -storage_v1beta1delete a StorageClass* deleteStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -Bê -storage_v1beta1+partially update the specified StorageClass*patchStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jc -H -200A -? -OK9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass -version: v1beta1 -J9 -75"3pathname of the StorageClass"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ÅK -./apis/storage.k8s.io/v1beta1/volumeattachments’K«! -storage_v1beta1.list or watch objects of kind VolumeAttachment*"listStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentList +9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList  401  UnauthorizedRhttpsj x-kubernetes-actionlist -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -"¯ -storage_v1beta1create a VolumeAttachment*$createStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO -M -Kbodybody *; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string JŽ -L -200E -C -OK= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment -Q -201J -H -Created= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment -R -202K -I -Accepted= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpost -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -*å -storage_v1beta1%delete collection of VolumeAttachment*.deleteStorageV1beta1CollectionVolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*Bï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string B‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string B‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Bú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer BÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Bž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer B± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj* -x-kubernetes-actiondeletecollection -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ô$ -5/apis/storage.k8s.io/v1beta1/volumeattachments/{name}º$“ -storage_v1beta1#read the specified VolumeAttachment*"readStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B -}{yquery]Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'."exact2boolean Bt -rpnqueryQShould this value be exported. Export strips fields that a user can not specify."export2boolean Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionget -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -è -storage_v1beta1&replace the specified VolumeAttachment*%replaceStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BO -M -Kbodybody *; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jº -L -200E -C -OK= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment -Q -201J -H -Created= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionput -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -*© -storage_v1beta1delete a VolumeAttachment*$deleteStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*BT -R -Pbodybody*B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Bä -áÞÛquery±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately."gracePeriodSeconds2integer BÑ -ÎËÈquery Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both."orphanDependents2boolean Bˆ -…‚ÿquery×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground."propagationPolicy2string J» -L -200E -C -OK= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status -R -202K -I -Accepted= -; -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status - -401 - - UnauthorizedRhttpsj -x-kubernetes-action delete -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -Bú -storage_v1beta1/partially update the specified VolumeAttachment*#patchStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf:application/json-patch+json:application/merge-patch+json:&application/strategic-merge-patch+jsonBN -L -Jbodybody *: -8#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.PatchBž -›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string Jg -L -200E -C -OK= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionpatch -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -J= -;9"7pathname of the VolumeAttachment"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string ú# -1/apis/storage.k8s.io/v1beta1/watch/storageclassesÄ#É -storage_v1beta1xwatch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.*#watchStorageV1beta1StorageClassList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# -x-kubernetes-action  -watchlist -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass +jX +x-kubernetes-group-version-kind53group: extensions +kind: DaemonSet version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -24415,9 +27358,9 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ð$ -8/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}³$ý -storage_v1beta1³watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*watchStorageV1beta1StorageClass2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean Â# +A/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindingsü"ú +rbacAuthorization_v1beta1~watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.*3watchRbacAuthorizationV1beta1ClusterRoleBindingList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk P 200I G @@ -24427,56 +27370,18 @@ G  401  - UnauthorizedRhttpsj -x-kubernetes-actionwatch -j_ -x-kubernetes-group-version-kind<:group: storage.k8s.io -kind: StorageClass + UnauthorizedRhttpsjp +x-kubernetes-group-version-kindMKgroup: rbac.authorization.k8s.io +kind: ClusterRoleBinding version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". - -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J9 -75"3pathname of the StorageClass"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ‰$ -4/apis/storage.k8s.io/v1beta1/watch/volumeattachmentsÐ#Õ -storage_v1beta1|watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.*'watchStorageV1beta1VolumeAttachmentList2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj# +j# x-kubernetes-action  watchlist -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 Jï ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ +„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string J‡ „query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú ÷ @@ -24489,73 +27394,105 @@ The server guarantees that the objects returned when using continue will be iden MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž ›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ƒ% -;/apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name}Ã$‰ -storage_v1beta1·watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.*#watchStorageV1beta1VolumeAttachment2application/json2application/yaml2#application/vnd.kubernetes.protobuf2application/json;stream=watch20application/vnd.kubernetes.protobuf;stream=watch:*/*Jk -P -200I -G -OKA -? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent - -401 - - UnauthorizedRhttpsj -x-kubernetes-actionwatch -jc -x-kubernetes-group-version-kind@>group: storage.k8s.io -kind: VolumeAttachment -version: v1beta1 -Jï -ì é æ queryÇ The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". +®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean ÿ -This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications."continue2string J‡ -„query\A selector to restrict the list of returned objects by their fields. Defaults to everything." fieldSelector2string Jw -usqqueryFIf true, partially initialized resources are included in the response."includeUninitialized2boolean J‡ -„query\A selector to restrict the list of returned objects by their labels. Defaults to everything." labelSelector2string Jú - -÷ -ô -ñ -queryÔ -limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. - -The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned."limit2integer J= -;9"7pathname of the VolumeAttachment"name*string˜JO -MKIquery-If 'true', then the output is pretty printed."pretty2string JÓ -ÐÍÊquery¤When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv."resourceVersion2string Jž -›˜•querypTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity."timeoutSeconds2integer J± -®«¨query‹Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion."watch2boolean H -/logs/>< -logs*logFileListHandlerJ - -401 - - UnauthorizedRhttps‚ -/logs/{logpath}o8 -logs*logFileHandlerJ - -401 - - UnauthorizedRhttpsJ3 -1/"-pathpath to the log"logpath*string˜Í - /version/¿¼ -versionget the code version*getCodeVersion2application/json:application/jsonJ` -E -200> +2/api/v1/namespaces/{namespace}/pods/{name}/bindingÈ +"¢ +core_v1create binding of a Pod* createCoreV1NamespacedPodBinding2application/json2application/yaml2#application/vnd.kubernetes.protobuf:*/*B> < -OK6 -4 -2#/definitions/io.k8s.apimachinery.pkg.version.Info +:bodybody ** +(#/definitions/io.k8s.api.core.v1.BindingJÛ  401  - UnauthorizedRhttpsJøÎ% -õ + Unauthorized +; +2004 +2 +OK, +* +(#/definitions/io.k8s.api.core.v1.Binding +@ +2019 +7 +Created, +* +(#/definitions/io.k8s.api.core.v1.Binding +A +202: +8 +Accepted, +* +(#/definitions/io.k8s.api.core.v1.BindingRhttpsjI +x-kubernetes-group-version-kind&$version: v1 +group: "" +kind: Binding +j +x-kubernetes-actionpost +Jž +›˜•queryøWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed"dryRun2string J– +“queryêfieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint." fieldManager2string J4 +20".pathname of the Binding"name*string˜J` +^\"Zpath:object name and auth scope, such as for teams and projects" namespace*string˜JO +MKIquery-If 'true', then the output is pretty printed."pretty2string J²«& +Ð +%io.k8s.api.core.v1.CinderVolumeSource¦"ëRepresents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.švolumeID² +objectÊž +‘ +fsType†"øFilesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +string +Ï +readOnlyÂ"³Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +boolean +ž + secretRef +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"WOptional: points to a secret object containing parameters used to connect to OpenStack. +” +volumeID‡"zvolume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +string +° +.io.k8s.api.core.v1.ReplicationControllerStatusý"VReplicationControllerStatus represents the current status of a replication controller.šreplicas² +objectÊ‹ +× +replicasÊint32"´Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller² +integer + +availableReplicas{int32"fThe number of available replicas (ready for at least minReadySeconds) for this replication controller.² +integer +Ž -Eio.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration« -"‚MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.Ê› +conditionsÿ"YRepresents the latest available observations of a replication controller's current state.² +arrayºC +A +?#/definitions/io.k8s.api.core.v1.ReplicationControllerConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +— +fullyLabeledReplicasint32"jThe number of pods that have labels matching the labels of the pod template of the replication controller.² +integer +‹ +observedGenerationuint64"`ObservedGeneration reflects the generation of the most recently observed replication controller.² +integer +c + readyReplicasRint32"=The number of ready replicas for this replication controller.² +integer +ñ +Sio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation™"YExternalDocumentation allows referencing an external resource for extended documentation.² +objectÊ0 + + description ² +string + +url ² +string +Ê +io.k8s.api.core.v1.Binding« "¡Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.štarget² +objectÊ +} +targets +0#/definitions/io.k8s.api.core.v1.ObjectReference"?The target object that you want to bind to the standard object. ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -24563,24 +27500,5318 @@ apiVersion ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -¿ -metadata² -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. -û -webhooksî"IWebhooks is a list of webhooks and the affected resources and operations.² +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúO +x-kubernetes-group-version-kind,*- group: "" + kind: Binding + version: v1 + +Ý +'io.k8s.api.apps.v1beta2.StatefulSetSpec±"8A StatefulSetSpec is the specification of a StatefulSet.šselectorštemplateš serviceName² +objectÊÄ +¹ +podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² +string + +replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² +integer +­ +revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² +integer +¨ +selector› +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Öselector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +û + serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² +string +¬ +templateŸ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. +ê +updateStrategy× +?#/definitions/io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. +þ +volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +ô +4io.k8s.api.authorization.v1.LocalSubjectAccessReview» "çLocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.šspec² +objectÊÆ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +ñ +specè +A#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"¢Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted. +§ +statusœ +C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or notúr +x-kubernetes-group-version-kindOM- group: authorization.k8s.io + kind: LocalSubjectAccessReview + version: v1 + +ƒ +!io.k8s.api.core.v1.EndpointSubsetÝ"³EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given: + { + Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], + Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] + } +The resulting set of endpoints can be viewed as: + a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], + b: [ 10.10.1.1:309, 10.10.2.2:309 ]² +objectʘ +| +portss"3Port numbers available on the related IP addresses.² +arrayº1 +/ +-#/definitions/io.k8s.api.core.v1.EndpointPort +ë + addressesÝ"™IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.EndpointAddress +© +notReadyAddresses“"ÏIP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.EndpointAddress +ð +Vio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation•"MCustomResourceValidation is a list of validation methods for CustomResources.² +objectÊ· +´ +openAPIV3Schema  +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps"AOpenAPIV3Schema is the OpenAPI v3 schema to be validated against. +´ +/io.k8s.api.apps.v1beta1.RollingUpdateDeployment€ "7Spec to control the desired behavior of rolling update.² +objectʸ +Í +maxUnavailableº +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. +å +maxSurgeØ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"–The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods. +â +&io.k8s.api.core.v1.QuobyteVolumeSource·"‡Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.šregistryšvolume² +objectÊŠ +œ +tenant‘"ƒTenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin² +string +Q +userI""1Group to map volume access to Default is no group² +string +‚ +readOnlyv"hReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.² +boolean +á +registryÔ"ÆRegistry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes² +string +‚ +*io.k8s.api.core.v1.PreferredSchedulingTermÓ"®An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).šweightš +preference² +objectÊý +‚ + +preferencet +1#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"?A node selector term, associated with the corresponding weight. +v +weightlint32"WWeight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.² +integer +ó +1io.k8s.api.storage.v1beta1.VolumeAttachmentSource½"ÝVolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.² +objectÊO +M +persistentVolumeName5"(Name of the persistent volume to attach.² +string + ++io.k8s.api.networking.v1beta1.IngressStatusÑ"8IngressStatus describe the current state of the Ingress.² +objectʈ +… + loadBalanceru +3#/definitions/io.k8s.api.core.v1.LoadBalancerStatus">LoadBalancer contains the current status of the load-balancer. +˜ +Vio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition½ +"”CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format <.spec.name>.<.spec.group>.šspec² +objectÊ– +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +® +spec¥ +h#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec"9Spec describes how the user wants the resources to appear +º +status¯ +j#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus"AStatus indicates the actual state of the CustomResourceDefinitionúw +x-kubernetes-group-version-kindTR- group: apiextensions.k8s.io + kind: CustomResourceDefinition + version: v1beta1 + +ç ++io.k8s.apimachinery.pkg.apis.meta.v1.Status·"CStatus is a return value for calls that don't return other objects.² +objectÊ’ +V +codeNint32"9Suggested HTTP return code for this status, 0 if not set.² +integer +¬ +details  +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails"ÛExtended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +U +messageJ"=A human-readable description of the status of this operation.² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +ä +reasonÙ"ËA machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.² +string +¯ +status¤"–Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status² +string +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúN +x-kubernetes-group-version-kind+)- kind: Status + version: v1 + group: "" + +ò +)io.k8s.apimachinery.pkg.apis.meta.v1.TimeÄ date-time"«Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.² +string +¦ ++io.k8s.api.core.v1.ContainerStateTerminatedö">ContainerStateTerminated is a terminated state of a container.šexitCode² +objectÊœ + + startedAtt +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"9Time at which previous execution of the container started +R + containerIDC"6Container's ID in the format 'docker://'² +string +W +exitCodeKint32"6Exit status from the last termination of the container² +integer +t + +finishedAtf +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"+Time at which the container last terminated +O +messageD"7Message regarding the last termination of the container² +string +P +reasonF"9(brief) reason from the last termination of the container² +string +P +signalFint32"1Signal from the last termination of the container² +integer +ë +!io.k8s.api.apps.v1.DeploymentListÅ"(DeploymentList is a list of Deployments.šitems² +objectÊ© +b +metadataV +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +h +items_"!Items is the list of Deployments.² +arrayº/ +- ++#/definitions/io.k8s.api.apps.v1.Deployment +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúX +x-kubernetes-group-version-kind53- version: v1 + group: apps + kind: DeploymentList + +Ù +1io.k8s.api.autoscaling.v2beta2.ObjectMetricSource£"‰ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).šdescribedObjectštargetšmetric² +objectÊä +] +describedObjectJ +H#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector +} +targets +9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric +à +)io.k8s.api.core.v1.PersistentVolumeStatus•"DPersistentVolumeStatus is the current status of a persistent volume.² +objectÊÀ +j +message_"RA human-readable message indicating details about why the volume is in this state.² +string +» +phase±"£Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase² +string +“ +reasonˆ"{Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.² +string +• +Hio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatusÈ"AAPIServiceStatus contains derived information about an API server² +objectÊö +ó + +conditionsä"$Current service state of apiService.² +arrayº] +[ +Y#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +ü +Kio.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList¬ "OValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.šitems² +objectÊ· +™ +items"'List of ValidatingWebhookConfiguration.² +arrayºY +W +U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringú‰ +x-kubernetes-group-version-kindfd- group: admissionregistration.k8s.io + kind: ValidatingWebhookConfigurationList + version: v1beta1 + +› +'io.k8s.api.rbac.v1beta1.RoleBindingListï"/RoleBindingList is a collection of RoleBindingsšitems² +objectʱ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc"Items is a list of RoleBindings² +arrayº5 +3 +1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.ús +x-kubernetes-group-version-kindPN- group: rbac.authorization.k8s.io + kind: RoleBindingList + version: v1beta1 + +Û +&io.k8s.api.storage.v1beta1.CSINodeList°"/CSINodeList is a collection of CSINode objects.šitems² +objectÊ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +h +items_"items is the list of CSINode² +arrayº4 +2 +0#/definitions/io.k8s.api.storage.v1beta1.CSINode +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúd +x-kubernetes-group-version-kindA?- version: v1beta1 + group: storage.k8s.io + kind: CSINodeList + +¨ +*io.k8s.api.core.v1.DownwardAPIVolumeSourceù"“DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.² +objectÊÔ +Ò + defaultModeÂint32"¬Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² +integer +} +itemst"+Items is a list of downward API volume file² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile +´ +/io.k8s.api.apps.v1beta2.RollingUpdateDeployment€ "7Spec to control the desired behavior of rolling update.² +objectʸ +å +maxSurgeØ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"–The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods. +Í +maxUnavailableº +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. +à +?io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerConditionÿ"eHorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.štypešstatus² +objectÊù +P +reasonF"9reason is the reason for the condition's last transition.² +string +S +statusI"int32")min is the start of the range, inclusive.² +integer +É +$io.k8s.api.node.v1beta1.RuntimeClass "ØRuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.mdšhandler² +objectÊÇ + + +handler¶"¨Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called "runc" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¤ +metadata— +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúb +x-kubernetes-group-version-kind?=- group: node.k8s.io + kind: RuntimeClass + version: v1beta1 + +î +"io.k8s.api.rbac.v1beta1.PolicyRuleÇ "¡PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.šverbs² +objectÊŒ + +¨ + resourceNames–"zResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.² +arrayº + ² +string +ò + resourcesä"ÇResources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.² +arrayº + ² +string +´ +verbsª"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.² +arrayº + ² +string +ó + apiGroupså"ÈAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.² +arrayº + ² +string +¼ +nonResourceURLs¨"‹NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.² +arrayº + ² +string +Ö +&io.k8s.api.apps.v1.ReplicaSetCondition«"LReplicaSetCondition describes the state of a replica set at a certain point.štypešstatus² +objectʾ +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +3 +type+"Type of replica set condition.² +string +• +lastTransitionTime +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +µ ++io.k8s.api.policy.v1beta1.PodSecurityPolicy… "„PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.² +objectÊŠ +j +specb +=#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicySpec"!spec defines the policy enforced. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúb +x-kubernetes-group-version-kind?=- kind: PodSecurityPolicy + version: v1beta1 + group: policy + + +1io.k8s.api.core.v1.PersistentVolumeClaimConditionÙ"BPersistentVolumeClaimCondition contails details about state of pvcštypešstatus² +objectÊö + +status ² +string + +type ² +string +n + lastProbeTime] +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time""Last time we probed the condition. +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +X +messageM"@Human-readable message indicating details about last transition.² +string +é +reasonÞ"ÐUnique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized.² +string +Ô +(io.k8s.api.apps.v1beta2.ReplicaSetStatus§"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicas² +objectÊÌ +Ø +replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² +integer +… +availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² +integer +ý + +conditionsî"NRepresents the latest available observations of a replica set's current state.² +arrayº= +; +9#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +‹ +fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² +integer + +observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² +integer +X + readyReplicasGint32"2The number of ready replicas for this replica set.² +integer +ª +2io.k8s.api.authorization.v1.SelfSubjectRulesReviewó "ˆSelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.šspec² +objectÊß +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +Š +spec +D#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec"9Spec holds information about the request being evaluated. +§ +statusœ +B#/definitions/io.k8s.api.authorization.v1.SubjectRulesReviewStatus"VStatus is filled in by the server and indicates the set of actions a user can perform.úp +x-kubernetes-group-version-kindMK- kind: SelfSubjectRulesReview + version: v1 + group: authorization.k8s.io + +™ ++io.k8s.api.autoscaling.v2beta1.MetricStatusé ">MetricStatus describes the last-read state of a single metric.štype² +objectÊ“ + +object· +?#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricStatus"tobject refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). +• +podsŒ +=#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricStatus"Êpods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. +™ +resourceŒ +A#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus"Æresource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. +  +type—"‰type is the type of metric source. It will be one of "Object", "Pods" or "Resource", each corresponds to a matching field in the object.² +string +ô +externalç +A#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricStatus"¡external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). +Ý + +&io.k8s.api.core.v1.ScaleIOVolumeSource² +":ScaleIOVolumeSource represents a persistent ScaleIO volumešgatewayšsystemš secretRef² +objectÊÈ +f +protectionDomainR"EThe name of the ScaleIO Protection Domain for the configured storage.² +string +Ð + secretRef +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"ˆSecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. +’ + storageMode‚"uIndicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.² +string +[ + storagePoolL"?The ScaleIO Storage Pool associated with the protection domain.² +string +D +gateway9",The host address of the ScaleIO API Gateway.² +string +x +readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +` + +sslEnabledR"DFlag to enable/disable SSL communication with Gateway, default false² +boolean +O +systemE"8The name of the storage system as configured in ScaleIO.² +string + + +volumeNames"fThe name of a volume already created in the ScaleIO system that is associated with this volume source.² +string +¡ +fsType–"ˆFilesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs".² +string +» + io.k8s.api.apps.v1.DaemonSetList–"-DaemonSetList is a collection of daemon sets.šitems² +objectÊö +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +\ +itemsS"A list of daemon sets.² +arrayº. +, +*#/definitions/io.k8s.api.apps.v1.DaemonSet +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúW +x-kubernetes-group-version-kind42- group: apps + kind: DaemonSetList + version: v1 + + +"io.k8s.api.storage.v1.StorageClassé"ãStorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. + +StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.š provisioner² +objectʃ +‘ + +parameters‚"eParameters holds the parameters for the provisioner that should create volumes of this storage class.ª + ² +string² +object +N + provisioner?"2Provisioner indicates the type of the provisioner.² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ì + mountOptionsÛ"¾Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.² +arrayº + ² +string +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +— + reclaimPolicy…"xDynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.² +string +ø +volumeBindingModeâ"ÔVolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.² +string +n +allowVolumeExpansionV"HAllowVolumeExpansion shows whether the storage class allow volume expand² +boolean +Š +allowedTopologiesô"«Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.² +arrayº9 +7 +5#/definitions/io.k8s.api.core.v1.TopologySelectorTermú` +x-kubernetes-group-version-kind=;- kind: StorageClass + version: v1 + group: storage.k8s.io + +¶ +\io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatusÕ"RCustomResourceDefinitionStatus indicates the state of the CustomResourceDefinitionš +conditionsš acceptedNamesšstoredVersions² +objectÊÄ +ø + acceptedNamesæ +i#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"yAcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec. +Ý + +conditionsÎ"NConditions indicate state for particular aspects of a CustomResourceDefinition² +arrayºq +o +m#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition +æ +storedVersionsÓ"¶StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.² +arrayº + ² +string +æ ++io.k8s.api.autoscaling.v2beta2.MetricTarget¶"aMetricTarget defines the target value, average value, or average utilization of a specific metricštype² +objectʽ +¶ + averageValue¥ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"faverageValue is the target value of the average of the metric across all relevant pods (as a quantity) +c +type["Ntype represents whether the metric type is Utilization, Value, or AverageValue² +string +€ +valuew +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"8value is the target value of the metric (as a quantity). +™ +averageUtilization‚int32"ìaverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type² +integer +¢ +'io.k8s.api.core.v1.EmptyDirVolumeSourceö"uRepresents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.² +objectÊð +… +mediumú"ìWhat type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir² +string +å + sizeLimit× +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"—Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir +ü +(io.k8s.api.extensions.v1beta1.ReplicaSetÏ"ÝDEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.² +objectÊþ +È +metadata» +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ùIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +€ +spec÷ +:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec"¸Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +Ò +statusÇ +<#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus"†Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringú_ +x-kubernetes-group-version-kind<:- version: v1beta1 + group: extensions + kind: ReplicaSet + +ª +#io.k8s.api.extensions.v1beta1.Scale‚ ",represents a scaling request for a resource.² +objectÊè +Ñ +metadataÄ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"‚Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. +Õ +specÌ +5#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec"’defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. +Þ +statusÓ +7#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus"—current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúZ +x-kubernetes-group-version-kind75- group: extensions + kind: Scale + version: v1beta1 + +Ù +io.k8s.api.core.v1.Affinity¹"1Affinity is a group of affinity scheduling rules.² +objectÊ÷ +´ + podAffinity¤ +,#/definitions/io.k8s.api.core.v1.PodAffinity"tDescribes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). +Å +podAntiAffinity± +0#/definitions/io.k8s.api.core.v1.PodAntiAffinity"}Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). +v + nodeAffinityf +-#/definitions/io.k8s.api.core.v1.NodeAffinity"5Describes node affinity scheduling rules for the pod. +œ +%io.k8s.api.extensions.v1beta1.Ingressò "‹Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.² +objectÊö +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +Ý +specÔ +7#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec"˜Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +ã +statusØ +9#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus"šStatus is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-statusú\ +x-kubernetes-group-version-kind97- kind: Ingress + version: v1beta1 + group: extensions + +Ê +*io.k8s.api.networking.v1.NetworkPolicySpec›"?NetworkPolicySpec provides the specification of a NetworkPolicyš podSelector² +objectʽ +Û + podSelectorË +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"†Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. +¤ + policyTypes”"÷List of rule types that the NetworkPolicy relates to. Valid options are "Ingress", "Egress", or "Ingress,Egress". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8² +arrayº + ² +string +Ï +egressÄ"òList of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8² arrayºB @ ->#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhookú' +>#/definitions/io.k8s.api.networking.v1.NetworkPolicyEgressRule +ã +ingress×"„List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)² +arrayºC +A +?#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule +ð +]io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersionŽ" matches that of any node on which a pod of the set of pods is runningš topologyKey² +objectʾ +± + +namespaces¢"…namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace"² +arrayº + ² +string +ö + topologyKeyæ"ØThis pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.² +string +Ž + labelSelector} +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"9A label query over a set of resources, in this case pods. +Œ0 +io.k8s.api.core.v1.Volumeî/"[Volume represents a named volume in a pod that may be accessed by any container in the pod.šname² +objectÊû. +û +iscsiñ +2#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource"ºISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md +‹ + projected~ +6#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource"DItems for all in one resources secrets, configmaps, and downward API +É +gitRepo½ +4#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource"„GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container. +Å +secretº +3#/definitions/io.k8s.api.core.v1.SecretVolumeSource"‚Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret +Ÿ + azureFile‘ +6#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod. +Œ +cephfs +3#/definitions/io.k8s.api.core.v1.CephFSVolumeSource"JCephFS represents a Ceph FS mount on the host that shares a pod's lifetime +Ö +emptyDirÉ +5#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource"EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir +” +hostPath‡ +5#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"ÍHostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath +¬ + vsphereVolumeš +?#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"WVsphereVolume represents a vSphere volume attached and mounted on kubelets host machine +Ý +cinderÒ +3#/definitions/io.k8s.api.core.v1.CinderVolumeSource"šCinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md +« +csi£ +0#/definitions/io.k8s.api.core.v1.CSIVolumeSource"oCSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). +¬ +persistentVolumeClaim’ +B#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource"ËPersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims +ž + downwardAPIŽ +8#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource"RDownwardAPI represents downward API about the pod that should populate this volume +¬ + +flexVolume +1#/definitions/io.k8s.api.core.v1.FlexVolumeSource"hFlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. +× +rbdÏ +0#/definitions/io.k8s.api.core.v1.RBDVolumeSource"šRBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md +œ + azureDiskŽ +6#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"TAzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +® +name¥"—Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +ˆ + configMap{ +6#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource"AConfigMap represents a configMap that should populate this volume +œ +scaleIO +4#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource"XScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. +æ + glusterfsØ +6#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource"Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md +Ä +nfs¼ +0#/definitions/io.k8s.api.core.v1.NFSVolumeSource"‡NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs +¥ +portworxVolume’ +5#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"YPortworxVolume represents a portworx volume attached and mounted on kubelets host machine +™ + storageos‹ +6#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource"QStorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. +± +awsElasticBlockStore˜ +A#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"ÒAWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore +ª +fc£ +/#/definitions/io.k8s.api.core.v1.FCVolumeSource"pFC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. +Î +photonPersistentDiskµ +A#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"pPhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine + +quobyteƒ +4#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"KQuobyte represents a Quobyte mount on the host that shares a pod's lifetime +È +flocker¼ +4#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"ƒFlocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running +¤ +gcePersistentDiskŽ +>#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"ËGCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk +‘ +%io.k8s.api.core.v1.VolumeNodeAffinityç"^VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.² +objectÊy +w +requiredk +-#/definitions/io.k8s.api.core.v1.NodeSelector":Required specifies hard node constraints that must be met. +… +!io.k8s.api.policy.v1beta1.IDRangeß"6IDRange provides a min/max of an allowed range of IDs.šminšmax² +objectÊŒ +C +max<int64"'max is the end of the range, inclusive.² +integer +E +min>int64")min is the start of the range, inclusive.² +integer +° + io.k8s.api.core.v1.EndpointsList‹"%EndpointsList is a list of endpoints.šitems² +objectÊõ +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +X +itemsO"List of endpoints.² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.Endpoints +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúU +x-kubernetes-group-version-kind20- version: v1 + group: "" + kind: EndpointsList + +Î +%io.k8s.api.core.v1.ConfigMapEnvSource¤"ÂConfigMapEnvSource selects a ConfigMap to populate the environment variables with. + +The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.² +objectÊÐ +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +G +optional;"-Specify whether the ConfigMap must be defined² +boolean +å +2io.k8s.api.core.v1.StorageOSPersistentVolumeSource® "2Represents a StorageOS persistent volume resource.² +objectÊë +x +readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +Ê + secretRef¼ +0#/definitions/io.k8s.api.core.v1.ObjectReference"‡SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. +‹ + +volumeName}"pVolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.² +string +Ð +volumeNamespace¼"®VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.² +string +À +fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² +string +¶ +)io.k8s.api.rbac.v1.ClusterRoleBindingListˆ"=ClusterRoleBindingList is a collection of ClusterRoleBindingsšitems² +objectʺ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +u +itemsl"&Items is a list of ClusterRoleBindings² +arrayº7 +5 +3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úu +x-kubernetes-group-version-kindRP- group: rbac.authorization.k8s.io + kind: ClusterRoleBindingList + version: v1 + +ó +0io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions¾ "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.šversionsšserverAddressByClientCIDRs² +objectÊ¡ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +è +serverAddressByClientCIDRsÉ"éa map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.² +arrayºP +N +L#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR +Y +versionsM"1versions are the api versions that are available.² +arrayº + ² +stringúS +x-kubernetes-group-version-kind0.- group: "" + kind: APIVersions + version: v1 + +© +0io.k8s.api.autoscaling.v2beta2.MetricValueStatusô"6MetricValueStatus holds the current value for a metric² +objectÊ­ +· + averageValue¦ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"gaverageValue is the current value of the average of the metric across all relevant pods (as a quantity) + +valuex +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"9value is the current value of the metric (as a quantity). +ì +averageUtilizationÕint32"¿currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.² +integer +Ú +*io.k8s.api.core.v1.WeightedPodAffinityTerm«"vThe weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)šweightšpodAffinityTerm² +objectʉ + +podAffinityTerm| +0#/definitions/io.k8s.api.core.v1.PodAffinityTerm"HRequired. A pod affinity term, associated with the corresponding weight. +u +weightkint32"Vweight associated with matching the corresponding podAffinityTerm, in the range 1-100.² +integer +ç +,io.k8s.api.core.v1.PersistentVolumeClaimList¶ "CPersistentVolumeClaimList is a list of PersistentVolumeClaim items.šitems² +objectÊö +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Ø +itemsÎ"„A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúa +x-kubernetes-group-version-kind><- group: "" + kind: PersistentVolumeClaimList + version: v1 + +Ë + +/io.k8s.api.core.v1.CephFSPersistentVolumeSource— +"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.šmonitors² +objectÊí +e +path]"POptional: Used as the mounted root, rather than the full Ceph tree, default is /² +string +Ü +readOnlyÏ"ÀOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +boolean +Ì + +secretFile½"¯Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +string +ô + secretRefæ +0#/definitions/io.k8s.api.core.v1.SecretReference"±Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it +¦ +user"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +string +µ +monitors¨"‹Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +arrayº + ² +string +Í +"io.k8s.api.core.v1.ComponentStatus¦ "LComponentStatus (and ComponentStatusList) holds the cluster validation info.² +objectÊï +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Î + +conditions¿"%List of component conditions observed² +arrayº7 +5 +3#/definitions/io.k8s.api.core.v1.ComponentConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúW +x-kubernetes-group-version-kind42- group: "" + kind: ComponentStatus + version: v1 + +à +"io.k8s.api.core.v1.SecretReference¹"lSecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace² +objectʼ +V +nameN"AName is unique within a namespace to reference a secret resource.² +string +b + namespaceU"HNamespace defines the space within which the secret name must be unique.² +string +¬ +%io.k8s.api.extensions.v1beta1.IPBlock‚"ªDEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.šcidr² +objectÊ¿ +c +cidr["NCIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"² +string +× +exceptÌ"¯Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range² +arrayº + ² +string +† +0io.k8s.apimachinery.pkg.apis.meta.v1.StatusCauseÑ"xStatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.² +objectÊÈ +¶ +field¬"žThe field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional. + +Examples: + "name" - the field "name" on the current resource + "items[0].name" - the field "name" on the first array entry in "items"² +string + +messaget"gA human-readable description of the cause of the error. This field may be presented as-is to a reader.² +string +‹ +reason€"sA machine-readable description of the cause of the error. If this value is empty there is no information available.² +string +Ž +6io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpecT² +objectÊF +D + namespace7"*Namespace to evaluate rules for. Required.² +string +Ú + +io.k8s.api.core.v1.Toleration¸ +"The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .² +objectÊ™ +¸ +effect­"ŸEffect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.² +string +Ó +keyË"½Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.² +string +ö +operatoré"ÛOperator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.² +string +ç +tolerationSecondsÑint64"»TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.² +integer +¢ +value˜"ŠValue is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.² +string +ÿ +&io.k8s.api.core.v1.ComponentStatusListÔ"TStatus of all the conditions for the component as a list of ComponentStatus objects.šitems² +objectʉ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc" List of ComponentStatus objects.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.ComponentStatus +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsú[ +x-kubernetes-group-version-kind86- kind: ComponentStatusList + version: v1 + group: "" + + ++io.k8s.api.extensions.v1beta1.IngressStatusÑ"8IngressStatus describe the current state of the Ingress.² +objectʈ +… + loadBalanceru +3#/definitions/io.k8s.api.core.v1.LoadBalancerStatus">LoadBalancer contains the current status of the load-balancer. +ø +)io.k8s.api.apps.v1.ControllerRevisionListÊ"UControllerRevisionList is a resource containing a list of ControllerRevision objects.šitems² +objectÊù +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +w +itemsn"(Items is the list of ControllerRevisions² +arrayº7 +5 +3#/definitions/io.k8s.api.apps.v1.ControllerRevision +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¢ +metadata• +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú` +x-kubernetes-group-version-kind=;- group: apps + kind: ControllerRevisionList + version: v1 + +¼ +(io.k8s.api.authorization.v1.ResourceRule"¬ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.šverbs² +objectÊÉ +ƒ + apiGroupsõ"ØAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "*" means all.² +arrayº + ² +string +¹ + resourceNames§"ŠResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all.² +arrayº + ² +string +ä + resourcesÖ"¹Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. + "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups.² +arrayº + ² +string + +verbs“"wVerb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. "*" means all.² +arrayº + ² +string +€ +5io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpecÆ"-specification of a horizontal pod autoscaler.šscaleTargetRefš maxReplicas² +objectÊé + + maxReplicas~int32"iupper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.² +integer +t + minReplicaseint32"Plower limit for the number of pods that can be set by the autoscaler, default 1.² +integer +† +scaleTargetRefó +C#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference"«reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource. +× +targetCPUUtilizationPercentage´int32"žtarget average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.² +integer +Ò +3io.k8s.api.autoscaling.v2beta1.ExternalMetricSourceš"ùExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one "target" type should be set.š +metricName² +objectÊ‚ +L + +metricName>"1metricName is the name of the metric in question.² +string +§ +metricSelector” +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"PmetricSelector is used to identify a specific time series within a given metric. +Ë +targetAverageValue´ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"utargetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue. +¹ + targetValue© +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"jtargetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue. +¦ +io.k8s.api.batch.v1.JobStatus„ "0JobStatus represents the current state of a Job.² +objectÊà +C +active9int32"$The number of actively running pods.² +integer +þ +completionTimeë +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"¯Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. +Á + +conditions²"œThe latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² +arrayº2 +0 +.#/definitions/io.k8s.api.batch.v1.JobConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +M +failedCint32".The number of pods which reached phase Failed.² +integer +’ + startTime„ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"ÈRepresents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. +S + succeededFint32"1The number of pods which reached phase Succeeded.² +integer +ä +"io.k8s.api.core.v1.CSIVolumeSource½ "TRepresents a source location of a volume to mount, managed by an external CSI driveršdriver² +objectÊÏ + +volumeAttributes­"VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.ª + ² +string² +object +¢ +driver—"‰Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.² +string +Ë +fsTypeÀ"²Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.² +string +¥ +nodePublishSecretRefŒ +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"ÒNodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed. +m +readOnlya"SSpecifies a read-only configuration for the volume. Defaults to false (read/write).² +boolean +Æ +io.k8s.api.core.v1.NodeList¦"ONodeList is the whole list of all Nodes which have been registered with master.šitems² +objectÊë +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +N +itemsE" List of nodes² +arrayº) +' +%#/definitions/io.k8s.api.core.v1.Node +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúP +x-kubernetes-group-version-kind-+- group: "" + kind: NodeList + version: v1 + +ò +!io.k8s.api.core.v1.ServiceAccountÌ"ºServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets² +objectʧ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +× +automountServiceAccountToken¶"§AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.² +boolean +å +imagePullSecretsÐ"‡ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod² +arrayº9 +7 +5#/definitions/io.k8s.api.core.v1.LocalObjectReference +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Ä +secrets¸" Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.ObjectReferenceú' x-kubernetes-patch-merge-keyname ú' x-kubernetes-patch-strategymerge -úƒ -x-kubernetes-group-version-kind`^- group: admissionregistration.k8s.io - kind: MutatingWebhookConfiguration +úV +x-kubernetes-group-version-kind31- group: "" + kind: ServiceAccount + version: v1 + +° +1io.k8s.api.authorization.v1.NonResourceAttributesú"{NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface² +objectÊo +8 +path0"#Path is the URL path of the request² +string +3 +verb+"Verb is the standard HTTP verb² +string +õ +0io.k8s.api.core.v1.ServiceAccountTokenProjectionÀ"ìServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).špath² +objectÊ» +’ +audience…"÷Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.² +string +¹ +expirationSeconds£int64"ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.² +integer +h +path`"SPath is the path relative to the mount point of the file to project the token into.² +string +â +io.k8s.api.rbac.v1.RoleRefÃ"?RoleRef contains information that points to the role being usedšapiGroupškindšname² +objectÊÚ +B +kind:"-Kind is the type of resource being referenced² +string +B +name:"-Name is the name of resource being referenced² +string +P +apiGroupD"7APIGroup is the group for the resource being referenced² +string +‹ +Cio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatusÃ"AAPIServiceStatus contains derived information about an API server² +objectÊñ +î + +conditionsß"$Current service state of apiService.² +arrayºX +V +T#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +º +3io.k8s.api.authorization.v1.SelfSubjectAccessReview‚ "öSelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means "in all namespaces". Self is a special case, because users should always be able to check whether they can perform an actionšspec² +objectÊÿ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +ª +spec¡ +E#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec"XSpec holds information about the request being evaluated. user and groups must be empty +§ +statusœ +C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or notúq +x-kubernetes-group-version-kindNL- group: authorization.k8s.io + kind: SelfSubjectAccessReview + version: v1 + +þ +=io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService¼ "[APIService represents a server for a particular GroupVersion. Name must be "version.group".² +objectÊç +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +¢ +spec™ +O#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec"FSpec contains information for locating and communicating with a server +— +statusŒ +Q#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus"7Status contains derived information about an API serverúf +x-kubernetes-group-version-kindCA- group: apiregistration.k8s.io + kind: APIService + version: v1 + +é +io.k8s.api.core.v1.VolumeMountÆ"@VolumeMount describes a mounting of a Volume within a container.šnameš mountPath² +objectÊâ +q + mountPathd"WPath within the container at which the volume should be mounted. Must not contain ':'.² +string +Õ +mountPropagationÀ"²mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.² +string +: +name2"%This must match the Name of a Volume.² +string +t +readOnlyh"ZMounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.² +boolean +ƒ +subPathx"kPath within the volume from which the container's volume should be mounted. Defaults to "" (volume's root).² +string +Ü + subPathExprÌ"¾Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. This field is alpha in 1.14.² +string +ú +io.k8s.api.core.v1.PodStatusÙ"¶PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.² +objectÊ‘ +v +reasonl"_A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'² +string +g +hostIP]"PIP address of the host to which the pod is assigned. Empty if not yet scheduled.² +string +Í +nominatedNodeName·"©nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.² +string +Æ +phase¼ "® The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values: + +Pending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. + +More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase² +string +x +podIPo"bIP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.² +string +ƒ +qosClassö"èThe Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md² +string +› + +conditionsŒ"xCurrent service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² +arrayº1 +/ +-#/definitions/io.k8s.api.core.v1.PodConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +¬ +containerStatuses–"ÒThe list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.ContainerStatus +ü +initContainerStatusesâ"žThe list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.ContainerStatus +k +message`"SA human readable message indicating details about why the pod is in this condition.² +string +Û + startTimeÍ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‘RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod. +Ô +'io.k8s.api.apps.v1.StatefulSetCondition¨"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatus² +objectʺ +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +3 +type+"Type of statefulset condition.² +string +ú +&io.k8s.api.apps.v1beta1.DeploymentListÏ"(DeploymentList is a list of Deployments.šitems² +objectÊ® +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +b +metadataV +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +m +itemsd"!Items is the list of Deployments.² +arrayº4 +2 +0#/definitions/io.k8s.api.apps.v1beta1.Deploymentú] +x-kubernetes-group-version-kind:8- group: apps + kind: DeploymentList version: v1beta1 -å -Iio.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList— "KMutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.šitemsʳ +ÿ + + io.k8s.api.core.v1.ResourceQuotaÚ +"FResourceQuota sets aggregate quota restrictions enforced per namespace² +objectÊ« +± +spec¨ +2#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec"rSpec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +Ö +statusË +4#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus"’Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúU +x-kubernetes-group-version-kind20- version: v1 + group: "" + kind: ResourceQuota + +æ +*io.k8s.api.networking.v1.NetworkPolicyPort·"6NetworkPolicyPort describes a port to allow traffic on² +objectÊð +é +portà +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"žThe port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. + +protocolu"hThe protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.² +string +¦ +#io.k8s.api.rbac.v1beta1.RoleBindingþ "·RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.šroleRef² +objectʹ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +å +roleRefÙ +-#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"§RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. +‰ +subjects}"=Subjects holds references to the objects the role applies to.² +arrayº1 +/ +-#/definitions/io.k8s.api.rbac.v1beta1.Subject +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúo +x-kubernetes-group-version-kindLJ- group: rbac.authorization.k8s.io + kind: RoleBinding + version: v1beta1 + +Ô +%io.k8s.api.apps.v1.ControllerRevisionª"±ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.šrevision² +objectÊý +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +b +revisionVint64"ARevision indicates the revision of the state represented by Data.² +integer +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +y +dataq +:#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"3Data is the serialized representation of the state. +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringú\ +x-kubernetes-group-version-kind97- group: apps + kind: ControllerRevision + version: v1 + +¢ +)io.k8s.api.apps.v1beta1.StatefulSetStatusô "@StatefulSetStatus represents the current state of a StatefulSet.šreplicas² +objectʘ +f +replicasZint32"Ereplicas is the number of Pods created by the StatefulSet controller.² +integer +± +updateRevisionž"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)² +string +þ +collisionCountëint32"ÕcollisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² +integer +° +currentReplicasœint32"†currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.² +integer +Ü +observedGenerationÅint64"¯observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.² +integer +Œ + readyReplicas{int32"freadyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.² +integer +¯ +updatedReplicas›int32"…updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.² +integer +þ + +conditionsï"NRepresents the latest available observations of a statefulset's current state.² +arrayº> +< +:#/definitions/io.k8s.api.apps.v1beta1.StatefulSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +¤ +currentRevision"‚currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).² +string +€ +/io.k8s.api.autoscaling.v2beta2.PodsMetricStatusÌ"šPodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).šmetricšcurrent² +objectÊ +„ +currenty +>#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector +ë +io.k8s.api.core.v1.EventSourceÈ".EventSource contains information for an event.² +objectʉ +F + component9",Component from which the event is generated.² +string +? +host7"*Node name on which the event is generated.² +string +• +$io.k8s.api.core.v1.LocalVolumeSourceì"LLocal represents directly-attached storage with node affinity (Beta feature)špath² +objectʈ +€ +fsTypeõ"çFilesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified.² +string +‚ +pathz"mThe full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).² +string +ª +$io.k8s.api.core.v1.ResourceQuotaList "3ResourceQuotaList is a list of ResourceQuota items.šitems² +objectÊÙ +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +» +items±"pItems is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/² +arrayº2 +0 +.#/definitions/io.k8s.api.core.v1.ResourceQuota +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúY +x-kubernetes-group-version-kind64- group: "" + kind: ResourceQuotaList + version: v1 + +ž +)io.k8s.api.extensions.v1beta1.IngressRuleð"ìIngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.² +objectÊò +£ +hostš"ŒHost is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + IP in the Spec of the parent Ingress. +2. The `:` delimiter is not respected because ports are not allowed. + Currently the port of an Ingress is implicitly :80 for http and + :443 for https. +Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.² +string +J +httpB +@#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue +ñ + io.k8s.api.rbac.v1beta1.RoleListÌ"!RoleList is a collection of Rolesšitems² +objectÊ£ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +^ +itemsU"Items is a list of Roles² +arrayº. +, +*#/definitions/io.k8s.api.rbac.v1beta1.Role +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úl +x-kubernetes-group-version-kindIG- group: rbac.authorization.k8s.io + kind: RoleList + version: v1beta1 + +Œ + +"io.k8s.api.apps.v1beta1.Deploymentå "ÄDEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.² +objectʳ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. +x +specp +4#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec"8Specification of the desired behavior of the Deployment. +t +statusj +6#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus"0Most recently observed status of the Deployment.úY +x-kubernetes-group-version-kind64- kind: Deployment + version: v1beta1 + group: apps + +÷ +io.k8s.api.core.v1.EnvVarSourceÓ"<- version: v1beta1 + group: apps + kind: ControllerRevision + +µ +"io.k8s.api.core.v1.ContainerStatusŽ "JContainerStatus contains details for the current status of this container.šnamešreadyš restartCountšimagešimageID² +objectʃ +¿ + restartCount®int32"˜The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.² +integer +l +statec +/#/definitions/io.k8s.api.core.v1.ContainerState"0Details about the container's current condition. +S + containerIDD"7Container's ID in the format 'docker://'.² +string +z +imageq"dThe image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images² +string +9 +imageID."!ImageID of the container's image.² +string +y + lastStatel +/#/definitions/io.k8s.api.core.v1.ContainerState"9Details about the container's last termination condition. +r +namej"]This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.² +string +V +readyM"?Specifies whether the container has passed its readiness probe.² +boolean +â +)io.k8s.api.networking.v1beta1.IngressList´"'IngressList is a collection of Ingress.šitems² +objectÊŠ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc"Items is the list of Ingress.² +arrayº7 +5 +3#/definitions/io.k8s.api.networking.v1beta1.Ingress +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¾ +metadata± +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúg +x-kubernetes-group-version-kindDB- kind: IngressList + version: v1beta1 + group: networking.k8s.io + +¼ +3io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy„"kRollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.² +objectʈ +… + partitionxint32"cPartition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.² +integer +Î +!io.k8s.api.core.v1.LimitRangeItem¨ "SLimitRangeItem defines a min/max usage limit for any resource that matches on kind.² +objectÊÄ +² +default¦"WDefault resource requirement limit value by resource name if resource limit is omitted.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +Ó +defaultRequestÀ"qDefaultRequest is the default resource requirement request value by resource name if resource request is omitted.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +‹ +maxƒ"4Max usage constraints on this kind by resource name.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +× +maxLimitRequestRatio¾"îMaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +‹ +minƒ"4Min usage constraints on this kind by resource name.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +A +type9",Type of resource that this limit applies to.² +string +Ö +io.k8s.api.core.v1.VolumeDevice²"JvolumeDevice describes a mapping of a raw block device within a container.šnameš +devicePath² +objectÊà +l + +devicePath^"QdevicePath is the path inside of the container that the device will be mapped to.² +string +S +nameK">name must match the name of a persistentVolumeClaim in the pod² +string +Å +.io.k8s.api.rbac.v1beta1.ClusterRoleBindingList’"=ClusterRoleBindingList is a collection of ClusterRoleBindingsšitems² +objectÊ¿ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +z +itemsq"&Items is a list of ClusterRoleBindings² +arrayº< +: +8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úz +x-kubernetes-group-version-kindWU- group: rbac.authorization.k8s.io + kind: ClusterRoleBindingList + version: v1beta1 + +š +0io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceå"JAPIResource specifies the name of a resource and whether it is namespaced.šnameš singularNameš +namespacedškindšverbs² +objectÊØ +} + +categorieso"Scategories is a list of the grouped resources this resource belongs to (e.g. 'all')² +arrayº + ² +string +Ç +group½"¯group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".² +string += +name5"(name is the plural name of the resource.² +string +h + +shortNamesZ">shortNames is a list of suggested short names of the resource.² +arrayº + ² +string +Ì +storageVersionHashµ"§The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.² +string +« +verbs¡"„verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)² +arrayº + ² +string +‰ +versioný"ïversion is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)".² +string +d +kind\"Okind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')² +string +T + +namespacedF"8namespaced indicates if a resource is namespaced or not.² +boolean +ž + singularName"ÿsingularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.² +string +· +1io.k8s.apimachinery.pkg.apis.meta.v1.Initializers"3Initializers tracks the progress of initialization.špending² +objectʳ +Ì +pendingÀ"šPending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.² +arrayºB +@ +>#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializerú' +x-kubernetes-patch-strategymerge +ú' +x-kubernetes-patch-merge-keyname + +á +resultÖ +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"˜If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. +î +#io.k8s.api.core.v1.FlexVolumeSourceÆ"hFlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.šdriver² +objectÊÄ +Ó + secretRefÅ +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"‹Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. +O +driverE"8Driver is the name of the driver to use for this volume.² +string +Ä +fsType¹"«Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.² +string +O +optionsD"'Optional: Extra command options if any.ª + ² +string² +object +‚ +readOnlyv"hOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +— +"io.k8s.api.core.v1.TCPSocketActionð"=TCPSocketAction describes an action based on opening a socketšport² +objectÊ› +O +hostG":Optional: Host name to connect to, defaults to the pod IP.² +string +Ç +port¾ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. +‡ +io.k8s.api.core.v1.Taintê"`The node this Taint is attached to has the "effect" on any pod that does not tolerate the Taint.škeyšeffect² +objectÊê +  +effect•"‡Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.² +string +D +key="0Required. The taint key to be applied to a node.² +string +­ + timeAddedŸ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"dTimeAdded represents the time at which the taint was added. It is only written for NoExecute taints. +O +valueF"9Required. The taint value corresponding to the taint key.² +string +ó +'io.k8s.api.core.v1.TopologySelectorTermÇ"‘A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.² +objectʤ +¡ +matchLabelExpressions‡"3A list of topology selector requirements by labels.² +arrayºE +C +A#/definitions/io.k8s.api.core.v1.TopologySelectorLabelRequirement +‡ +#io.k8s.api.core.v1.PersistentVolumeß "±PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes² +objectÊÁ + +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Š +spec +5#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec"ÇSpec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes +“ +statusˆ +7#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus"ÌStatus represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúX +x-kubernetes-group-version-kind53- group: "" + kind: PersistentVolume + version: v1 + +ð +(io.k8s.api.core.v1.ContainerStateRunningÃ"8ContainerStateRunning is a running state of a container.² +objectÊ{ +y + startedAtl +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"1Time at which the container was last (re-)started +© +,io.k8s.api.core.v1.PersistentVolumeClaimSpecø "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes² +objectÊå +ƒ +selectorw +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"3A label query over volumes to consider for binding. +¤ +storageClassName"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1² +string +µ + +volumeMode¦"˜volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.² +string +j + +volumeName\"OVolumeName is the binding reference to the PersistentVolume backing this claim.² +string +Ë + accessModes»"žAccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1² +arrayº + ² +string +â + +dataSourceÓ +:#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference"”This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change. +Þ + resourcesÐ +5#/definitions/io.k8s.api.core.v1.ResourceRequirements"–Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources +® +'io.k8s.api.core.v1.PersistentVolumeList‚ "9PersistentVolumeList is a list of PersistentVolume items.šitems² +objectÊÑ +³ +items©"eList of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes² +arrayº5 +3 +1#/definitions/io.k8s.api.core.v1.PersistentVolume +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringú\ +x-kubernetes-group-version-kind97- group: "" + kind: PersistentVolumeList + version: v1 + +” + +/io.k8s.api.extensions.v1beta1.PodSecurityPolicyà "ÅPodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.² +objectÊ  +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +n +specf +A#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec"!spec defines the policy enforced.úf +x-kubernetes-group-version-kindCA- version: v1beta1 + group: extensions + kind: PodSecurityPolicy + +• +/io.k8s.api.storage.v1beta1.VolumeAttachmentSpecá"HVolumeAttachmentSpec is the specification of a VolumeAttachment request.šattacheršsourcešnodeName² +objectÊé +— +attacherŠ"}Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().² +string +H +nodeName<"/The node that the volume should be attached to.² +string +‚ +sourcex +?#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSource"5Source represents the volume that should be attached. +÷ +Aio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec±"£APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.šservicešgroupPriorityMinimumšversionPriority² +objectÊÉ +X +versionM"@Version is the API version this server hosts. For example, "v1"² +string +ä +versionPriorityÐint32"ºVersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² +integer +Æ +caBundle¹byte"¥CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.² +string +C +group:"-Group is the API group name this server hosts² +string +± +groupPriorityMinimum˜int32"‚GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s² +integer +Í +insecureSkipTLSVerify³"¤InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.² +boolean +ó +serviceç +Q#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference"‘Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. +ß +"io.k8s.api.apps.v1beta2.ReplicaSet¸"ØDEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.² +objectÊò +È +metadata» +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ùIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +ú +specñ +4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetSpec"¸Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +Ì +statusÁ +6#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetStatus"†Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúY +x-kubernetes-group-version-kind64- group: apps + kind: ReplicaSet + version: v1beta2 + +ë +1io.k8s.api.storage.v1beta1.VolumeAttachmentStatusµ"CVolumeAttachmentStatus is the status of a VolumeAttachment request.šattached² +objectÊÖ +ë + attachErrorÛ +4#/definitions/io.k8s.api.storage.v1beta1.VolumeError"¢The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher. +± +attached¤"•Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.² +boolean +à +attachmentMetadata¬"ŽUpon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.ª + ² +string² +object +ë + detachErrorÛ +4#/definitions/io.k8s.api.storage.v1beta1.VolumeError"¢The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher. +Ë +$io.k8s.api.batch.v1beta1.CronJobList¢")CronJobList is a collection of cron jobs.šitems² +objectÊ‚ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +h +items_"items is the list of CronJobs.² +arrayº2 +0 +.#/definitions/io.k8s.api.batch.v1beta1.CronJob +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú[ +x-kubernetes-group-version-kind86- group: batch + kind: CronJobList + version: v1beta1 + +À +!io.k8s.api.core.v1.ContainerImageš"Describe a container imagešnames² +objectÊç +¡ +names—"{Names by which this image is known. e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]² +arrayº + ² +string +A + sizeBytes4int64"The size of the image in bytes.² +integer +æ +'io.k8s.api.policy.v1beta1.HostPortRangeº"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.šminšmax² +objectÊŒ +C +max<int32"'max is the end of the range, inclusive.² +integer +E +min>int32")min is the start of the range, inclusive.² +integer +Ì +4io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList“ "¦APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.š groupVersionš resources² +objectÊæ +§ + resources™"Hresources contains the name of the resources and if they are namespaced.² +arrayºB +@ +>#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +_ + groupVersionO"BgroupVersion is the group and version this APIResourceList is for.² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúW +x-kubernetes-group-version-kind42- group: "" + kind: APIResourceList + version: v1 + +˜ +io.k8s.api.apps.v1.ReplicaSetö "YReplicaSet ensures that a specified number of pod replicas are running at any given time.² +objectʵ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +· +metadataª +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"èIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ä +specÛ +/#/definitions/io.k8s.api.apps.v1.ReplicaSetSpec"§Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +¶ +status« +1#/definitions/io.k8s.api.apps.v1.ReplicaSetStatus"õStatus is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúT +x-kubernetes-group-version-kind1/- group: apps + kind: ReplicaSet + version: v1 + +‡ +.io.k8s.api.apps.v1beta1.ControllerRevisionListÔ"UControllerRevisionList is a resource containing a list of ControllerRevision objects.šitems² +objectÊþ +| +itemss"(Items is the list of ControllerRevisions² +arrayº< +: +8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¢ +metadata• +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúe +x-kubernetes-group-version-kindB@- group: apps + kind: ControllerRevisionList + version: v1beta1 + +×8 +io.k8s.api.core.v1.Container¶8"AA single application container that you want to run within a pod.šname² +objectÊÝ7 +¨ + lifecycleš +*#/definitions/io.k8s.api.core.v1.Lifecycle"lActions that the management system should take in response to container lifecycle events. Cannot be updated. +• +nameŒ"Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.² +string +” +portsŠ"ŠList of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.² +arrayº2 +0 +.#/definitions/io.k8s.api.core.v1.ContainerPortú; +x-kubernetes-list-map-keys- containerPort +- protocol +ú +x-kubernetes-list-typemap +ú0 +x-kubernetes-patch-merge-keycontainerPort +ú' +x-kubernetes-patch-strategymerge + +¡ +readinessProbeŽ +&#/definitions/io.k8s.api.core.v1.Probe"ãPeriodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + +securityContextü +0#/definitions/io.k8s.api.core.v1.SecurityContext"ÇSecurity options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +ß +argsÖ"¹Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell² +arrayº + ² +string +é + resourcesÛ +5#/definitions/io.k8s.api.core.v1.ResourceRequirements"¡Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ +Ï +stdinÅ"¶Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.² +boolean +À + +workingDir±"£Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.² +string +‚ + livenessProbeð +&#/definitions/io.k8s.api.core.v1.Probe"ÅPeriodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + +imageƒ"õDocker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.² +string +‡ +imagePullPolicyó"åImage pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images² +string +æ +terminationMessagePolicyÉ"»Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.² +string + +ttyz"lWhether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.² +boolean +‹ + volumeDevicesù"_volumeDevices is the list of block devices to be used by the container. This is a beta feature.² +arrayº1 +/ +-#/definitions/io.k8s.api.core.v1.VolumeDeviceú- +x-kubernetes-patch-merge-key  devicePath +ú' +x-kubernetes-patch-strategymerge + +Ö +envFromÊ"ˆList of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.² +arrayº2 +0 +.#/definitions/io.k8s.api.core.v1.EnvFromSource +ß +env×"IList of environment variables to set in the container. Cannot be updated.² +arrayº+ +) +'#/definitions/io.k8s.api.core.v1.EnvVarú' +x-kubernetes-patch-merge-keyname +ú' +x-kubernetes-patch-strategymerge + +× + stdinOnceÉ"ºWhether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false² +boolean +Å +terminationMessagePathª"œOptional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.² +string +ñ + volumeMountsà"HPod volumes to mount into the container's filesystem. Cannot be updated.² +arrayº0 +. +,#/definitions/io.k8s.api.core.v1.VolumeMountú, +x-kubernetes-patch-merge-key  +mountPath +ú' +x-kubernetes-patch-strategymerge + +û +commandï"ÒEntrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell² +arrayº + ² +string +Á +2io.k8s.api.core.v1.GlusterfsPersistentVolumeSourceŠ"‹Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.š endpointsšpath² +objectÊÚ +¹ + endpoints«"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² +string +£ +endpointsNamespaceŒ"þEndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² +string +’ +path‰"|Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² +string +à +readOnlyÓ"ÄReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² +boolean +ž +.io.k8s.api.core.v1.PersistentVolumeClaimStatusë"OPersistentVolumeClaimStatus is the current status of a persistent volume claim.² +objectÊ‹ +Ò + accessModesÂ"¥AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1² +arrayº + ² +string +• +capacityˆ"9Represents the actual resources of the underlying volume.ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +Ç + +conditions¸"‘Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.² +arrayºC +A +?#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +R +phaseI"io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDRâ"ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.š +clientCIDRš serverAddress² +objectʦ +€ + +clientCIDRr"eThe CIDR with which clients can match their IP to figure out the server address that they should use.² +string +  + serverAddressŽ"€Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.² +string +ç +%io.k8s.api.authentication.v1.UserInfo½"ZUserInfo holds the information about the user needed to implement the user.Info interface.² +objectÊÒ +Q +groupsG"+The names of groups this user is a part of.² +arrayº + ² +string +® +uid¦"˜A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.² +string +\ +usernameP"CThe name that uniquely identifies this user among all active users.² +string +n +extrae"9Any additional information provided by the authenticator.ª +² +arrayº + ² +string² +object +Œ +,io.k8s.api.extensions.v1beta1.DeploymentListÛ"(DeploymentList is a list of Deployments.šitems² +objectÊ´ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +s +itemsj"!Items is the list of Deployments.² +arrayº: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.Deployment +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +b +metadataV +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.úc +x-kubernetes-group-version-kind@>- group: extensions + kind: DeploymentList + version: v1beta1 + +ä +%io.k8s.api.networking.v1beta1.Ingressº "€Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.² +objectÊ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Ì +specà +7#/definitions/io.k8s.api.networking.v1beta1.IngressSpec"‡Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +Ò +statusÇ +9#/definitions/io.k8s.api.networking.v1beta1.IngressStatus"‰Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúc +x-kubernetes-group-version-kind@>- version: v1beta1 + group: networking.k8s.io + kind: Ingress + +Õ +5io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy›² +objectÊŒ + + rollingUpdate‹ +B#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". +j +typeb"UType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete.² +string +« +1io.k8s.api.networking.v1.NetworkPolicyIngressRuleõ"´NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.² +objectʯ +Ø +fromÏ"ƒList of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.² +arrayº< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer +Ñ +portsÇ"ûList of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² +arrayº< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort +¯ +io.k8s.api.rbac.v1.Subject"ÆSubject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.škindšname² +objectʪ +à +apiGroup¶"¨APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects.² +string +à +kind×"ÉKind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.² +string +9 +name1"$Name of the object being referenced.² +string +à + namespaceµ"§Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.² +string +’ +1io.k8s.api.autoscaling.v2beta1.ObjectMetricStatusÜ"ŽObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).štargetš +metricNameš currentValue² +objectÊ— +· + averageValue¦ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"gaverageValue is the current value of the average of the metric across all relevant pods (as a quantity) + + currentValue +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"@currentValue is the current value of the metric (as a quantity). +L + +metricName>"1metricName is the name of the metric in question.² +string +÷ +selectorê +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"¥selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics. +€ +targetv +H#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"*target is the described Kubernetes object. +â +,io.k8s.api.core.v1.RBDPersistentVolumeSource± "ˆRepresents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.šmonitorsšimage² +objectÊ„ +‘ +userˆ"{The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +string +³ +fsType¨"šFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd² +string +€ +imagew"jThe rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +string +¹ +keyring­"ŸKeyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +string +œ +monitors"sA collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +arrayº + ² +string + +pool†"yThe rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +string + +readOnlyµ"¦ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it² +boolean +‚ + secretRefô +0#/definitions/io.k8s.api.core.v1.SecretReference"¿SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it +¯ +Xio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourcesÒ"YCustomResourceSubresources defines the status and scale subresources for CustomResources.² +objectÊè +¯ +scale¥ +j#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale"7Scale denotes the scale subresource for CustomResources +³ +status¨ +k#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus"9Status denotes the status subresource for CustomResources +õ +#io.k8s.api.core.v1.PodReadinessGateÍ":PodReadinessGate contains the reference to a pod conditionš conditionType² +objectÊs +q + conditionType`"SConditionType refers to a condition in the pod's condition list with matching type.² +string +¨ +#io.k8s.api.core.v1.NodeConfigSource€"uNodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.² +objectÊ{ +y + configMapl +:#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource".ConfigMap is a reference to a Node's ConfigMap +  +"io.k8s.api.core.v1.ObjectReferenceù "]ObjectReference contains enough information to let you inspect or modify the referred object.² +objectÊ‹ +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +Ž + namespace€"sNamespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/² +string +Õ +resourceVersionÁ"³Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² +string + +uidz"mUID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids² +string +7 + +apiVersion)"API version of the referent.² +string +Ô + fieldPathÆ"¸If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.² +string +„ +kind|"oKind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +ì +,io.k8s.api.extensions.v1beta1.IngressBackend»"DIngressBackend describes all endpoints for a given service and port.š serviceNameš servicePort² +objectÊÊ +I + serviceName:"-Specifies the name of the referenced service.² +string +} + servicePortn +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"-Specifies the port of the referenced service. + +(io.k8s.api.extensions.v1beta1.IngressTLSâ"MIngressTLS describes the transport layer security associated with an Ingress.² +objectÊ„ +š +hosts"óHosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.² +arrayº + ² +string +ä + +secretNameÕ"ÇSecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.² +string + +1io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategyŒ"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.² +objectÊ« +h +type`"SType indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.² +string +¾ + rollingUpdate¬ +F#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. +ÿ +*io.k8s.api.apps.v1beta2.ControllerRevisionÐ"ÀDEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.šrevision² +objectÊ +y +dataq +:#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"3Data is the serialized representation of the state. +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +b +revisionVint64"ARevision indicates the revision of the state represented by Data.² +integer +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúa +x-kubernetes-group-version-kind><- group: apps + kind: ControllerRevision + version: v1beta2 + +É +.io.k8s.api.authentication.v1.TokenReviewStatus–"DTokenReviewStatus is the result of the token authentication request.² +objectÊÁ +’ + audiences„"çAudiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is "true", the token is valid against the audience of the Kubernetes API server.² +arrayº + ² +string +g + authenticatedV"HAuthenticated indicates that the token was associated with a known user.² +boolean +H +error?"2Error indicates that the token couldn't be checked² +string +w +usero +3#/definitions/io.k8s.api.authentication.v1.UserInfo"8User is the UserInfo associated with the provided token. +û +io.k8s.api.core.v1.HandlerÜ"6Handler defines a specific action that should be taken² +objectÊ• +‘ +execˆ ++#/definitions/io.k8s.api.core.v1.ExecAction"YOne and only one of the following should be specified. Exec specifies the action to take. +k +httpGet` +.#/definitions/io.k8s.api.core.v1.HTTPGetAction".HTTPGet specifies the http request to perform. +‘ + tcpSocketƒ +0#/definitions/io.k8s.api.core.v1.TCPSocketAction"OTCPSocket specifies an action involving a TCP port. TCP hooks not yet supported +Ò +4io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions™"ŸFSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.² +objectÊè +û +rangesð"©ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.² +arrayº7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.IDRange +h +rule`"Srule is the strategy that will dictate what FSGroup is used in the SecurityContext.² +string +± +4io.k8s.api.extensions.v1beta1.SELinuxStrategyOptionsø"£SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.šrule² +objectʼ +a +ruleY"Lrule is the strategy that will dictate the allowable labels that may be set.² +string +Ö +seLinuxOptionsà +/#/definitions/io.k8s.api.core.v1.SELinuxOptions"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +Ü +'io.k8s.api.apps.v1beta1.StatefulSetSpec°"8A StatefulSetSpec is the specification of a StatefulSet.štemplateš serviceName² +objectÊÎ +ê +updateStrategy× +?#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. +þ +volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +¹ +podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² +string + +replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² +integer +­ +revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² +integer +² +selector¥ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"àselector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +û + serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² +string +¬ +templateŸ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. +Ù +%io.k8s.api.core.v1.LoadBalancerStatus¯"DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReady² +objectʨ +l +observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² +integer +l +updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² +integer +õ + +conditionsæ"LRepresents the latest available observations of a DaemonSet's current state.² +arrayº7 +5 +3#/definitions/io.k8s.api.apps.v1.DaemonSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +ô +desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +Ê +numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² +integer +Å +numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² +integer +ä +collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² +integer +ã +currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +Ý +numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +˜ + numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² +integer +µ +9io.k8s.api.certificates.v1beta1.CertificateSigningRequest÷"'Describes a certificate signing request² +objectÊÅ +– +spec +K#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec">The certificate request itself and any additional information. + +statusw +M#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus"&Derived information about the request. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaúw +x-kubernetes-group-version-kindTR- version: v1beta1 + group: certificates.k8s.io + kind: CertificateSigningRequest + +æ +'io.k8s.api.core.v1.ConfigMapKeySelectorº"Selects a key from a ConfigMap.škey² +objectÊ„ +& +key"The key to select.² +string +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +S +optionalG"9Specify whether the ConfigMap or it's key must be defined² +boolean +¡ + io.k8s.api.core.v1.EnvFromSourceü":EnvFromSource represents the source of a set of ConfigMaps² +objectʱ +c + configMapRefS +3#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource"The ConfigMap to select from +n +prefixd"WAn optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.² +string +Z + secretRefM +0#/definitions/io.k8s.api.core.v1.SecretEnvSource"The Secret to select from +ç +(io.k8s.api.core.v1.ReplicationControllerº "OReplicationController represents the configuration of a replication controller.² +objectÊú +û +specò +:#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec"³Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +Í +status +<#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus"Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Î +metadataÁ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ÿIf the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú] +x-kubernetes-group-version-kind:8- group: "" + kind: ReplicationController + version: v1 + + +Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec¶"£APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.šservicešgroupPriorityMinimumšversionPriority² +objectÊÎ +X +versionM"@Version is the API version this server hosts. For example, "v1"² +string +ä +versionPriorityÐint32"ºVersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² +integer +Æ +caBundle¹byte"¥CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.² +string +C +group:"-Group is the API group name this server hosts² +string +± +groupPriorityMinimum˜int32"‚GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s² +integer +Í +insecureSkipTLSVerify³"¤InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.² +boolean +ø +serviceì +V#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference"‘Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. +£ +io.k8s.api.batch.v1.JobListƒ" JobList is a collection of jobs.šitems² +objectÊõ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +[ +itemsR"items is the list of Jobs.² +arrayº) +' +%#/definitions/io.k8s.api.batch.v1.Job +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúR +x-kubernetes-group-version-kind/-- group: batch + kind: JobList + version: v1 + +á +io.k8s.api.core.v1.Capabilities½"- group: extensions + kind: ReplicaSetList + version: v1beta1 + +ô +3io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference¼"ÇOwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.š +apiVersionškindšnamešuid² +objectÊ +V + +controllerH":If true, this reference points to the managing controller.² +boolean +„ +kind|"oKind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +l +named"WName of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names² +string +i +uidb"UUID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids² +string +7 + +apiVersion)"API version of the referent.² +string +Î +blockOwnerDeletion·"¨If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.² +boolean +Ò +$io.k8s.api.coordination.v1.LeaseList©"%LeaseList is a list of Lease objects.šitems² +objectʆ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc""Items is a list of schema objects.² +arrayº2 +0 +.#/definitions/io.k8s.api.coordination.v1.Lease +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúb +x-kubernetes-group-version-kind?=- group: coordination.k8s.io + kind: LeaseList + version: v1 + +ý +'io.k8s.api.apps.v1beta2.DaemonSetStatusÑ">DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReady² +objectÊ­ +ú + +conditionsë"LRepresents the latest available observations of a DaemonSet's current state.² +arrayº< +: +8#/definitions/io.k8s.api.apps.v1beta2.DaemonSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +ã +currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +l +observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² +integer +Ý +numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +˜ + numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² +integer +Å +numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² +integer +l +updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² +integer +ä +collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² +integer +ô +desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +Ê +numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² +integer +¦ +Mio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsÔ"[JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).² +objectÊè + + uniqueItems ² +boolean +] +exampleR +P#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON + + maxLengthint64² +integer + +maximumdouble² +number + +minimumdouble² +number +u +oneOfl² +arrayº_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps +] +defaultR +P#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON +| + definitionsmª_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps² +object +s + externalDocsc +a#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation + +title ² +string +u +allOfl² +arrayº_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps + +exclusiveMinimum ² +boolean +m +itemsd +b#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray +$ + maxPropertiesint64² +integer +! + +multipleOfdouble² +number +v +additionalItemsc +a#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool + +maxItemsint64² +integer +{ +additionalPropertiesc +a#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool + + minLengthint64² +integer +d +not] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps + +nullable ² +boolean +& +required² +arrayº + ² +string + +$ref ² +string +Š + dependencieszªl +j +h#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray² +object + + description ² +string + +exclusiveMaximum ² +boolean +{ + +propertiesmª_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps² +object +$ + minPropertiesint64² +integer + +type ² +string + +minItemsint64² +integer + +pattern ² +string +‚ +patternPropertiesmª_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps² +object + +$schema ² +string +u +anyOfl² +arrayº_ +] +[#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps +i +enuma² +arrayºT +R +P#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON + +format ² +string + +id ² +string +è +=io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery¦"wGroupVersion contains the "group/version" and "version" string of a version. It is made a struct to keep extensibility.š groupVersionšversion² +objectÊ… +i + groupVersionY"LgroupVersion specifies the API group and version in the form "group/version"² +string +— +version‹"~version specifies the version in the form of "version". This is to save the clients the trouble of splitting the GroupVersion.² +string +û +7io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry¿"sManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.² +objectÊ» +i +fields_ +9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Fields""Fields identifies a set of fields. +W +managerL"?Manager is an identifier of the workflow managing these fields.² +string +² + operation¤"–Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.² +string +¦ +time +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"bTime is timestamp of when these fields were set. It should always be empty if Operation is 'Apply' +– + +apiVersion‡"ùAPIVersion defines the version of this resource that this field set applies to. The format is "group/version" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.² +string +Ì +%io.k8s.api.apps.v1.DaemonSetCondition¢"IDaemonSetCondition describes the state of a DaemonSet at a certain point.štypešstatus² +objectʸ +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +1 +type)"Type of DaemonSet condition.² +string +, +io.k8s.api.core.v1.ServiceSpecú+"FServiceSpec describes the attributes that a user creates on a service.² +objectÊ£+ +Á +externalTrafficPolicy§"™externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.² +string +ú +healthCheckNodePortâint32"ÌhealthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.² +integer +¥ +sessionAffinity‘"ƒSupports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies² +string +ù +typeð"âtype determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ExternalName" maps to the specified externalName. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types² +string +“ + clusterIP…"÷clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are "None", empty string (""), or a valid IP address. "None" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies² +string +ò + externalIPsâ"ÅexternalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.² +arrayº + ² +string +œ + externalName‹"ýexternalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.² +string +ã +loadBalancerIPÐ"ÂOnly applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.² +string +“ +loadBalancerSourceRangesö"ÙIf specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/² +arrayº + ² +string +• +ports‹"ŸThe list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies² +arrayº0 +. +,#/definitions/io.k8s.api.core.v1.ServicePortú2 +x-kubernetes-list-map-keys- port +- protocol +ú +x-kubernetes-list-typemap +ú' +x-kubernetes-patch-merge-keyport +ú' +x-kubernetes-patch-strategymerge + +² +publishNotReadyAddresses•"†publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.² +boolean +« +selectorž"€Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ª + ² +string² +object +š +sessionAffinityConfig€ +6#/definitions/io.k8s.api.core.v1.SessionAffinityConfig"FsessionAffinityConfig contains the configurations of session affinity. +˜ +io.k8s.api.rbac.v1.ClusterRoleõ +"ˆClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.² +objectÊî +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +{ +rulesr"4Rules holds all the PolicyRules for this ClusterRole² +arrayº/ +- ++#/definitions/io.k8s.api.rbac.v1.PolicyRule +© +aggregationRule• +0#/definitions/io.k8s.api.rbac.v1.AggregationRule"àAggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúj +x-kubernetes-group-version-kindGE- group: rbac.authorization.k8s.io + kind: ClusterRole + version: v1 + +’ +/io.k8s.api.storage.v1beta1.VolumeAttachmentListÞ"AVolumeAttachmentList is a collection of VolumeAttachment objects.šitems² +objectÊ” +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +{ +itemsr"&Items is the list of VolumeAttachments² +arrayº= +; +9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúm +x-kubernetes-group-version-kindJH- group: storage.k8s.io + kind: VolumeAttachmentList + version: v1beta1 + +‰ +&io.k8s.api.apps.v1beta1.DeploymentSpecÞ"NDeploymentSpec is the specification of the desired behavior of the Deployment.štemplate² +objectÊô +ƒ +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² +integer +  +progressDeadlineSeconds„int32"îThe maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.² +integer +’ +replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² +integer +Ì +selector¿ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"{Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. +@ +paused6"(Indicates that the deployment is paused.² +boolean + +revisionHistoryLimit©int32"“The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.² +integer +© + +rollbackToš +4#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"bDEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done. +¾ +strategy± +8#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, +x-kubernetes-patch-strategy  retainKeys + +q +templatee +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. +˜ +io.k8s.api.apps.v1beta2.Scaleö +"2Scale represents a scaling request for a resource.² +objectÊÜ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ñ +metadataÄ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"‚Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. +Ï +specÆ +/#/definitions/io.k8s.api.apps.v1beta2.ScaleSpec"’defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. +Ø +statusÍ +1#/definitions/io.k8s.api.apps.v1beta2.ScaleStatus"—current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.úT +x-kubernetes-group-version-kind1/- group: apps + kind: Scale + version: v1beta2 + +­ +/io.k8s.api.autoscaling.v2beta2.MetricIdentifierù"FMetricIdentifier defines the name and optionally selector for a metricšname² +objectÊ› +9 +name1"$name is the name of the given metric² +string +Ý +selectorÐ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"‹selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics. +Ÿ +(io.k8s.api.core.v1.AzureDiskVolumeSourceò"TAzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.šdiskNamešdiskURI² +objectÊø +à +kind×"ÉExpected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared² +string +x +readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +K + cachingMode<"/Host Caching mode: None, Read Only, Read Write.² +string +F +diskName:"-The Name of the data disk in the blob storage² +string +A +diskURI6")The URI the data disk in the blob storage² +string +À +fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² +string +› +)io.k8s.api.extensions.v1beta1.IngressSpecí";IngressSpec describes the Ingress the user wishes to exist.² +objectÊ¡ +º +backend® +:#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"ïA default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default. +Ø +rulesÎ"ƒA list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.² +arrayº; +9 +7#/definitions/io.k8s.api.extensions.v1beta1.IngressRule +† +tlsþ"´TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.² +arrayº: +8 +6#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS +“ +*io.k8s.apimachinery.pkg.apis.meta.v1.Patche"XPatch is provided to give a concrete name and type to the Kubernetes PATCH request body.² +object +¯ +*io.k8s.api.apps.v1.RollingUpdateDeployment€ "7Spec to control the desired behavior of rolling update.² +objectʸ +å +maxSurgeØ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"–The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods. +Í +maxUnavailableº +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. + +io.k8s.api.core.v1.EventSeriesŸ"qEventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.² +objectÊ +` +countWint32"BNumber of occurrences in this series up to the last heartbeat time² +integer +x +lastObservedTimed +<#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"$Time of the last occurrence observed +? +state6")State of this Series: Ongoing or Finished² +string +ê + +%io.k8s.api.rbac.v1.ClusterRoleBindingÀ +"ŸClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.šroleRef² +objectÊ‘ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. + +roleRef¶ +(#/definitions/io.k8s.api.rbac.v1.RoleRef"‰RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. +„ +subjectsx"=Subjects holds references to the objects the role applies to.² +arrayº, +* +(#/definitions/io.k8s.api.rbac.v1.Subjectúq +x-kubernetes-group-version-kindNL- group: rbac.authorization.k8s.io + kind: ClusterRoleBinding + version: v1 + +Ø +(io.k8s.api.storage.v1beta1.CSINodeDriver« "]CSINodeDriver holds information about the specification of one CSI driver installed on a nodešnamešnodeID² +objectÊ­ + + topologyKeys±"”topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. "company.com/zone", "company.com/region"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.² +arrayº + ² +string +ª +name¡"“This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.² +string +¸ +nodeID­"ŸnodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as "node1", but the storage system may refer to the same node as "nodeA". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. "nodeA" instead of "node1". This field is required.² +string +™ ++io.k8s.api.autoscaling.v2beta2.MetricStatusé ">MetricStatus describes the last-read state of a single metric.štype² +objectÊ“ +ô +externalç +A#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus"¡external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). + +object· +?#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus"tobject refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). +• +podsŒ +=#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricStatus"Êpods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. +™ +resourceŒ +A#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus"Æresource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. +  +type—"‰type is the type of metric source. It will be one of "Object", "Pods" or "Resource", each corresponds to a matching field in the object.² +string +× +0io.k8s.api.extensions.v1beta1.DaemonSetCondition¢"IDaemonSetCondition describes the state of a DaemonSet at a certain point.štypešstatus² +objectʸ +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +1 +type)"Type of DaemonSet condition.² +string +¥ +0io.k8s.api.networking.v1.NetworkPolicyEgressRuleð"ÐNetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8² +objectÊŽ +¯ +ports¥"ÙList of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² +arrayº< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort +Ù +toÒ"†List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.² +arrayº< +: +8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer +Í ++io.k8s.api.apps.v1beta1.DeploymentCondition"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatus² +objectʱ +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +v +lastUpdateTimed +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +2 +type*"Type of deployment condition.² +string +õ +!io.k8s.api.core.v1.FCVolumeSourceÏ"«Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.² +objectÊ’ +‚ +readOnlyv"hOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +T + +targetWWNsF"*Optional: FC target worldwide names (WWNs)² +arrayº + ² +string +µ +wwids«"ŽOptional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.² +arrayº + ² +string +À +fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² +string +: +lun3int32"Optional: FC target lun number² +integer +« + +5io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRuleñ "ÇDEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8² +objectʘ +´ +portsª"ÙList of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² +arrayºA +? +=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort +Þ +to×"†List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.² +arrayºA +? +=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer +– +/io.k8s.api.scheduling.v1beta1.PriorityClassListâ"6PriorityClassList is a collection of priority classes.šitems² +objectÊ£ +Ê +metadata½ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"~Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +y +itemsp"$items is the list of PriorityClasses² +arrayº= +; +9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúm +x-kubernetes-group-version-kindJH- group: scheduling.k8s.io + kind: PriorityClassList + version: v1beta1 + +– +2io.k8s.apimachinery.pkg.apis.meta.v1.Preconditionsß"ZPreconditions must be fulfilled before an operation (update, delete, etc.) is carried out.² +objectÊu +- +uid&"Specifies the target UID.² +string +D +resourceVersion1"$Specifies the target ResourceVersion² +string +ˆ +Aio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceListÂ"/APIServiceList is a list of APIService objects.šitems² +objectÊ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +e +items\² +arrayºO +M +K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +I +metadata= +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúj +x-kubernetes-group-version-kindGE- group: apiregistration.k8s.io + kind: APIServiceList + version: v1 + +í +io.k8s.api.core.v1.EventÐ"7Event is a report of an event somewhere in the cluster.šmetadatašinvolvedObject² +objectÊœ +• + lastTimestampƒ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"HThe time at which the most recent occurrence of this event was recorded. +™ +reasonŽ"€This should be a short, machine understandable string that gives the reason for the transition into the object's current status.² +string +U +reportingInstance@"3ID of the controller instance, e.g. `kubelet-xyzf`.² +string + +source„ +,#/definitions/io.k8s.api.core.v1.EventSource"TThe component reporting this event. Should be a short machine understandable string. +a +typeY"LType of this event (Normal, Warning), new types could be added in the future² +string +J +countAint32",The number of times this event has occurred.² +integer +Ž +seriesƒ +,#/definitions/io.k8s.api.core.v1.EventSeries"SData about the Event series this event represents or nil if it's a singleton Event. +¦ +firstTimestamp“ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"XThe time at which the event was first recorded. (Time of server receipt is in TypeMeta.) +j +involvedObjectX +0#/definitions/io.k8s.api.core.v1.ObjectReference"$The object that this event is about. +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +U +messageJ"=A human-readable description of the status of this operation.² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +p +reportingComponentZ"MName of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.² +string +V +actionL"?What action was taken/failed regarding to the Regarding object.² +string +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +u + eventTimeh +<#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"(Time when this Event was first observed. +r +relatedg +0#/definitions/io.k8s.api.core.v1.ObjectReference"3Optional secondary object for more complex actions.úM +x-kubernetes-group-version-kind*(- group: "" + kind: Event + version: v1 + +¦ +io.k8s.api.core.v1.HostAlias…"oHostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.² +objectÊ… +L + hostnames?"#Hostnames for the above IP address.² +arrayº + ² +string +5 +ip/""IP address of the host file entry.² +string +õ +#io.k8s.api.core.v1.VolumeProjectionÍ"HProjection that may be projected along with other supported volume types² +objectÊô +t + configMapg +4#/definitions/io.k8s.api.core.v1.ConfigMapProjection"/information about the configMap data to project +z + downwardAPIk +6#/definitions/io.k8s.api.core.v1.DownwardAPIProjection"1information about the downwardAPI data to project +k +secreta +1#/definitions/io.k8s.api.core.v1.SecretProjection",information about the secret data to project +’ +serviceAccountToken{ +>#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection"9information about the serviceAccountToken data to project +Ù +&io.k8s.api.storage.v1beta1.CSINodeSpec®"\CSINodeSpec holds information about the specification of all CSI drivers installed on a nodešdrivers² +objectÊ· +´ +drivers¨"Šdrivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.² +arrayº: +8 +6#/definitions/io.k8s.api.storage.v1beta1.CSINodeDriverú' +x-kubernetes-patch-merge-keyname +ú' +x-kubernetes-patch-strategymerge + +Á +!io.k8s.api.core.v1.DaemonEndpoint›"CDaemonEndpoint contains information about a single Daemon endpoint.šPort² +objectÊA +? +Port7int32""Port number of the given endpoint.² +integer +ç +io.k8s.api.rbac.v1beta1.RoleRefÃ"?RoleRef contains information that points to the role being usedšapiGroupškindšname² +objectÊÚ +P +apiGroupD"7APIGroup is the group for the resource being referenced² +string +B +kind:"-Kind is the type of resource being referenced² +string +B +name:"-Name is the name of resource being referenced² +string +È +&io.k8s.api.apps.v1.DeploymentCondition"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatus² +objectʱ +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +2 +type*"Type of deployment condition.² +string +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +v +lastUpdateTimed +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. +Ÿ +3io.k8s.api.autoscaling.v2beta1.ExternalMetricStatusç"nExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.š +metricNameš currentValue² +objectÊÌ +d + +metricNameV"ImetricName is the name of a metric used for autoscaling in metric system.² +string +§ +metricSelector” +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"PmetricSelector is used to identify a specific time series within a given metric. +¨ +currentAverageValue +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"QcurrentAverageValue is the current value of metric averaged over autoscaled pods. +Ž + currentValue~ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"?currentValue is the current value of the metric (as a quantity) +€ +,io.k8s.api.extensions.v1beta1.DeploymentSpecÏ"NDeploymentSpec is the specification of the desired behavior of the Deployment.štemplate² +objectÊå +’ +replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² +integer +Ì +selector¿ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"{Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. +q +templatee +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. +ƒ +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² +integer +w +pausedm"_Indicates that the deployment is paused and will not be processed by the deployment controller.² +boolean +í +progressDeadlineSecondsÑint32"»The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means "no deadline".² +integer +£ +revisionHistoryLimitŠint32"ôThe number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means "retaining all old RelicaSets".² +integer +¯ + +rollbackTo  +:#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"bDEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done. +Ä +strategy· +>#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, +x-kubernetes-patch-strategy  retainKeys + +¡, +3io.k8s.api.extensions.v1beta1.PodSecurityPolicySpecé+"wPodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.šseLinuxš runAsUseršsupplementalGroupsšfsGroup² +objectʬ* +Ö +supplementalGroups¿ +M#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions"nsupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. +  +allowedCSIDriversŠ"ºAllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value means no CSI drivers can run inline within a pod spec.² +arrayº@ +> +<#/definitions/io.k8s.api.extensions.v1beta1.AllowedCSIDriver +Ë +allowedHostPaths¶"hallowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.² +arrayº? += +;#/definitions/io.k8s.api.extensions.v1beta1.AllowedHostPath +’ +defaultAddCapabilities÷"ÚdefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.² +arrayº + ² +string +Ç +requiredDropCapabilitiesª"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.² +arrayº + ² +string +² +allowedCapabilitiesš"ýallowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.² +arrayº + ² +string +¡ +seLinux• +B#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions"OseLinux is the strategy that will dictate the allowable labels that may be set. + +forbiddenSysctlsø"ÛforbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. + +Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.² +arrayº + ² +string +© +fsGroup +B#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions"WfsGroup is the strategy that will dictate what fs group is used by the SecurityContext. +_ + +privilegedQ"Cprivileged determines if a pod can request to be run as privileged.² +boolean +ö +readOnlyRootFilesystemÛ"ÌreadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.² +boolean +· +defaultAllowPrivilegeEscalation“"„defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.² +boolean +d +hostIPCY"KhostIPC determines if the policy allows the use of HostIPC in the pod spec.² +boolean +p + hostNetworka"ShostNetwork determines if the policy allows the use of HostNetwork in the pod spec.² +boolean +d +hostPIDY"KhostPID determines if the policy allows the use of HostPID in the pod spec.² +boolean +¤ +allowPrivilegeEscalation‡"yallowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.² +boolean + +allowedFlexVolumes«"ÚallowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.² +arrayºA +? +=#/definitions/io.k8s.api.extensions.v1beta1.AllowedFlexVolume +ù +allowedProcMountTypesß"ÂAllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.² +arrayº + ² +string +î +allowedUnsafeSysctlsÕ"¸allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. + +Examples: e.g. "foo/*" allows "foo/bar", "foo/baz", etc. e.g. "foo.*" allows "foo.bar", "foo.baz", etc.² +arrayº + ² +string +  + hostPorts’"FhostPorts determines which host port ranges are allowed to be exposed.² +arrayº= +; +9#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange +¸ + +runAsGroup© +E#/definitions/io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions"ßRunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled. +± + runAsUser£ +D#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions"[runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. +® +volumes¢"…volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.² +arrayº + ² +string +® +Qio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfigØ"£WebhookClientConfig contains the information to make a TLS connection with the webhook. It has the same field as admissionregistration.v1beta1.WebhookClientConfig.² +objectÊ£ +á +serviceÕ +\#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference"ô`service` is a reference to the service for this webhook. Either `service` or `url` must be specified. + +If the webhook is running within the cluster, then you should use `service`. + +Port 443 will be used if it is open, otherwise it is an error. +ô +urlì"Þ`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified. + +The `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address. + +Please note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster. + +The scheme must be "https"; the URL must begin with "https://". + +A path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier. + +Attempting to use a user or basic auth e.g. "user:password@" is not allowed. Fragments ("#...") and query parameters ("?...") are not allowed, either.² +string +Å +caBundle¸byte"¤`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.² +string +Ó +"io.k8s.api.apps.v1.StatefulSetSpec¬"8A StatefulSetSpec is the specification of a StatefulSet.šselectorštemplateš serviceName² +objectÊ¿ + +replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² +integer +­ +revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² +integer +¨ +selector› +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Öselector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +û + serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² +string +¬ +templateŸ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. +å +updateStrategyÒ +:#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. +þ +volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim +¹ +podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² +string +¶ +,io.k8s.api.authentication.v1.TokenReviewSpec…"ETokenReviewSpec is a description of the token authentication request.² +objectʯ +ó + audienceså"ÈAudiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.² +arrayº + ² +string +7 +token."!Token is the opaque bearer token.² +string +Ï + +-io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta +"£ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.² +objectÊè +” +resourceVersion€"òString that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² +string +h +selfLink\"OselfLink is a URL representing this object. Populated by the system. Read-only.² +string +ä +continue×"Écontinue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.² +string +¢ +)io.k8s.api.apps.v1beta2.StatefulSetStatusô "@StatefulSetStatus represents the current state of a StatefulSet.šreplicas² +objectʘ +þ +collisionCountëint32"ÕcollisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² +integer +¤ +currentRevision"‚currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).² +string +f +replicasZint32"Ereplicas is the number of Pods created by the StatefulSet controller.² +integer +± +updateRevisionž"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)² +string +¯ +updatedReplicas›int32"…updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.² +integer +þ + +conditionsï"NRepresents the latest available observations of a statefulset's current state.² +arrayº> +< +:#/definitions/io.k8s.api.apps.v1beta2.StatefulSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +° +currentReplicasœint32"†currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.² +integer +Ü +observedGenerationÅint64"¯observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.² +integer +Œ + readyReplicas{int32"freadyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.² +integer +® +io.k8s.api.core.v1.Service "çService is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.² +objectÊÄ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +³ +specª +,#/definitions/io.k8s.api.core.v1.ServiceSpec"zSpec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +í +statusâ +.#/definitions/io.k8s.api.core.v1.ServiceStatus"¯Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúO +x-kubernetes-group-version-kind,*- group: "" + kind: Service + version: v1 + +÷ +1io.k8s.api.policy.v1beta1.PodDisruptionBudgetListÁ"@PodDisruptionBudgetList is a collection of PodDisruptionBudgets.šitems² +objectÊý +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +U +itemsL² +arrayº? += +;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +I +metadata= +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúh +x-kubernetes-group-version-kindEC- group: policy + kind: PodDisruptionBudgetList + version: v1beta1 + +Š +*io.k8s.api.storage.v1.VolumeAttachmentSpecÛ"HVolumeAttachmentSpec is the specification of a VolumeAttachment request.šattacheršsourcešnodeName² +objectÊã +— +attacherŠ"}Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().² +string +H +nodeName<"/The node that the volume should be attached to.² +string +} +sources +:#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSource"5Source represents the volume that should be attached. +µ +]io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatusÓ"ÅCustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza² +object +’ + +Bio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceË "[APIService represents a server for a particular GroupVersion. Name must be "version.group".² +objectÊñ +§ +specž +T#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec"FSpec contains information for locating and communicating with a server +œ +status‘ +V#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus"7Status contains derived information about an API server +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaúk +x-kubernetes-group-version-kindHF- group: apiregistration.k8s.io + kind: APIService + version: v1beta1 + +É +'io.k8s.api.apps.v1beta2.StatefulSetList"0StatefulSetList is a collection of StatefulSets.šitems² +objectÊó +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +K +itemsB² +arrayº5 +3 +1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +I +metadata= +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaú^ +x-kubernetes-group-version-kind;9- version: v1beta2 + group: apps + kind: StatefulSetList + +· +$io.k8s.api.coordination.v1.LeaseSpecŽ"(LeaseSpec is a specification of a Lease.² +objectÊÕ +r +leaseTransitions^int32"IleaseTransitions is the number of transitions of a lease between holders.² +integer +  + renewTime’ +<#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime"RrenewTime is a time when the current holder of a lease has last updated the lease. +‰ + acquireTimez +<#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime":acquireTime is a time when the current lease was acquired. +e +holderIdentityS"FholderIdentity contains the identity of the holder of a current lease.² +string +È +leaseDurationSeconds¯int32"™leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.² +integer +à +.io.k8s.api.extensions.v1beta1.AllowedCSIDriver­"RAllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.šname² +objectÊD +B +name:"-Name is the registered name of the CSI driver² +string +á +1io.k8s.api.extensions.v1beta1.ReplicaSetCondition«"LReplicaSetCondition describes the state of a replica set at a certain point.štypešstatus² +objectʾ +• +lastTransitionTime +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +3 +type+"Type of replica set condition.² +string +Ü +*io.k8s.api.policy.v1beta1.AllowedCSIDriver­"RAllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.šname² +objectÊD +B +name:"-Name is the registered name of the CSI driver² +string +— +)io.k8s.api.apps.v1.RollingUpdateDaemonSeté"BSpec to control the desired behavior of daemon set rolling update.² +objectÊ– +“ +maxUnavailable€ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. +³ +!io.k8s.api.core.v1.LimitRangeList "-LimitRangeList is a list of LimitRange items.šitems² +objectÊî +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Ð +itemsÆ"‡Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/² +arrayº/ +- ++#/definitions/io.k8s.api.core.v1.LimitRange +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúV +x-kubernetes-group-version-kind31- group: "" + kind: LimitRangeList + version: v1 + +ð +Iio.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList¢ "KMutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.šitems² +objectʳ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -24589,20 +32820,889 @@ apiVersion items‹"%List of MutatingWebhookConfiguration.² arrayºW U -S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsú‡ +S#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationú‡ x-kubernetes-group-version-kinddb- group: admissionregistration.k8s.io kind: MutatingWebhookConfigurationList version: v1beta1 -¯ +Þ + io.k8s.api.core.v1.ContainerPort¹">ContainerPort represents a network port in a single container.š containerPort² +objectÊÚ +å +hostPortØint32"ÂNumber of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.² +integer +Æ +name½"¯If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.² +string +Y +protocolM"@Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".² +string +ˆ + containerPortwint32"bNumber of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.² +integer +A +hostIP7"*What host IP to bind the external port to.² +string +„ -;io.k8s.api.admissionregistration.v1beta1.RuleWithOperationsï "‚RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.Êæ +io.k8s.api.core.v1.NodeAffinityà ";Node affinity is a group of node affinity scheduling rules.² +objectÊ” +Þ +/preferredDuringSchedulingIgnoredDuringExecutionª"ÞThe scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.² +arrayº< +: +8#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm +° +.requiredDuringSchedulingIgnoredDuringExecutioný +-#/definitions/io.k8s.api.core.v1.NodeSelector"ËIf the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. +ä +io.k8s.api.core.v1.PodDNSConfigÀ"_PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.² +objectÊÐ +Ä + nameservers´"—A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.² +arrayº + ² +string +µ +options©"âA list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.² +arrayº7 +5 +3#/definitions/io.k8s.api.core.v1.PodDNSConfigOption +Î +searchesÁ"¤A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.² +arrayº + ² +string +Õ +-io.k8s.api.policy.v1beta1.PodDisruptionBudget£ "hPodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods² +objectÊà +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta + +spec„ +?#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec"ASpecification of the desired behavior of the PodDisruptionBudget. +ˆ +status~ +A#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus"9Most recently observed status of the PodDisruptionBudget.úd +x-kubernetes-group-version-kindA?- group: policy + kind: PodDisruptionBudget + version: v1beta1 + +• +Zio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList¶"KCustomResourceDefinitionList is a list of CustomResourceDefinition objects.šitems² +objectÊÔ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +« +items¡"*Items individual CustomResourceDefinitions² +arrayºh +f +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +I +metadata= +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaú{ +x-kubernetes-group-version-kindXV- version: v1beta1 + group: apiextensions.k8s.io + kind: CustomResourceDefinitionList + +ø +3io.k8s.api.autoscaling.v2beta1.ResourceMetricSourceÀ"ÊResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. Only one "target" type should be set.šname² +objectÊÝ +B +name:"-name is the name of the resource in question.² +string +ð +targetAverageUtilizationÓint32"½targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.² +integer +£ +targetAverageValueŒ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"ÌtargetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. +Æ + +%io.k8s.api.core.v1.CephFSVolumeSourceœ +"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.šmonitors² +objectÊò +µ +monitors¨"‹Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +arrayº + ² +string +e +path]"POptional: Used as the mounted root, rather than the full Ceph tree, default is /² +string +Ü +readOnlyÏ"ÀOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +boolean +Ì + +secretFile½"¯Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +string +ù + secretRefë +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"±Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it +¦ +user"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +string +ž +!io.k8s.api.core.v1.ContainerStateø"¥ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.² +objectÊÁ +f +running[ +6#/definitions/io.k8s.api.core.v1.ContainerStateRunning"!Details about a running container +o + +terminateda +9#/definitions/io.k8s.api.core.v1.ContainerStateTerminated"$Details about a terminated container +f +waiting[ +6#/definitions/io.k8s.api.core.v1.ContainerStateWaiting"!Details about a waiting container +· +%io.k8s.api.core.v1.ServiceAccountList "6ServiceAccountList is a list of ServiceAccount objectsšitems² +objectÊá +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +à +items¹"wList of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/² +arrayº3 +1 +/#/definitions/io.k8s.api.core.v1.ServiceAccount +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúZ +x-kubernetes-group-version-kind75- group: "" + kind: ServiceAccountList + version: v1 + +º +5io.k8s.api.extensions.v1beta1.RollingUpdateDeployment€ "7Spec to control the desired behavior of rolling update.² +objectʸ +æ +maxSurgeÙ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"—The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods. +Ì +maxUnavailable¹ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"÷The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. + +%io.k8s.api.coordination.v1beta1.Lease×"Lease defines a lease concept.² +objectÊ +¤ +metadata— +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +½ +spec´ +7#/definitions/io.k8s.api.coordination.v1beta1.LeaseSpec"ySpecification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúc +x-kubernetes-group-version-kind@>- group: coordination.k8s.io + kind: Lease + version: v1beta1 + +ž +3io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptionsæ"`RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.šrule² +objectÊî +ý +rangesò"¯ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.² +arrayº3 +1 +/#/definitions/io.k8s.api.policy.v1beta1.IDRange +l +ruled"Wrule is the strategy that will dictate the allowable RunAsGroup values that may be set.² +string +¹ +;io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptionsù"dSupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.² +objectÊ„ +‹ +ranges€"½ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.² +arrayº3 +1 +/#/definitions/io.k8s.api.policy.v1beta1.IDRange +t +rulel"_rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.² +string + +2io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorÙ"ËA label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.² +objectÊü +É +matchExpressions´"VmatchExpressions is a list of label selector requirements. The requirements are ANDed.² +arrayºO +M +K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement +­ + matchLabels"ÿmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.ª + ² +string² +object +’ +)io.k8s.api.extensions.v1beta1.ScaleStatusä"5represents the current status of a scale subresource.šreplicas² +objectÊ“ +Z +replicasNint32"9actual number of observed instances of the scaled object.² +integer +­ +selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª + ² +string² +object +„ +targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² +string +Á +6io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler† "ÎHorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.² +objectʶ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ï +metadata +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"€metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ó +specê +H#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + +status… +J#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus"7status is the current information about the autoscaler. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúm +x-kubernetes-group-version-kindJH- group: autoscaling + kind: HorizontalPodAutoscaler + version: v2beta1 + +— +io.k8s.api.core.v1.PodConditionó"DPodCondition contains details for the current condition of this pod.štypešstatus² +objectÊŽ +n + lastProbeTime] +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time""Last time we probed the condition. +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +X +messageM"@Human-readable message indicating details about last transition.² +string +^ +reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² +string +· +status¬"žStatus is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² +string +“ +typeŠ"}Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² +string +Ž +%io.k8s.api.core.v1.SecretVolumeSourceä +"íAdapts a Secret into a volume. + +The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.² +objectÊå +Q +optionalE"7Specify whether the Secret or it's keys must be defined² +boolean +“ + +secretName„"wName of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret² +string +Ò + defaultModeÂint32"¬Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² +integer +¤ +itemsš"ÜIf unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.KeyToPath +ç +&io.k8s.api.storage.v1.StorageClassList¼"4StorageClassList is a collection of storage classes.šitems² +objectʈ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +o +itemsf"#Items is the list of StorageClasses² +arrayº4 +2 +0#/definitions/io.k8s.api.storage.v1.StorageClass +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúd +x-kubernetes-group-version-kindA?- group: storage.k8s.io + kind: StorageClassList + version: v1 + +ä + +io.k8s.api.apps.v1beta1.Scale +"2Scale represents a scaling request for a resource.² +objectʨ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¿ +metadata² +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. +¾ +specµ +/#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. +Ç +status¼ +1#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúT +x-kubernetes-group-version-kind1/- group: apps + kind: Scale + version: v1beta1 + +º + +...svc.". If not specified, the pod will not have a domainname at all.² +string +¶ +io.k8s.api.rbac.v1.Roleš"hRole is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.² +objectÊ» +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +t +rulesk"-Rules holds all the PolicyRules for this Role² +arrayº/ +- ++#/definitions/io.k8s.api.rbac.v1.PolicyRuleúc +x-kubernetes-group-version-kind@>- group: rbac.authorization.k8s.io + kind: Role + version: v1 + +ì ++io.k8s.api.storage.v1beta1.VolumeAttachment¼ "—VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node. + +VolumeAttachment objects are non-namespaced.šspec² +objectÊ  +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¾ +metadata± +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +© +spec  +=#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSpec"_Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system. +Õ +statusÊ +?#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentStatus"†Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.úi +x-kubernetes-group-version-kindFD- group: storage.k8s.io + kind: VolumeAttachment + version: v1beta1 + +­ +Nio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReferenceÚ";ServiceReference holds a reference to Service.legacy.k8s.ioš namespacešname² +objectÊû +@ +name8"+`name` is the name of the service. Required² +string +O + namespaceB"5`namespace` is the namespace of the service. Required² +string +f +path^"Q`path` is an optional URL path which will be sent in any request to this service.² +string +¹ +"io.k8s.api.policy.v1beta1.Eviction’ "ÒEviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.² +objectÊÒ +r + deleteOptionsa +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"DeleteOptions may be provided +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +€ +metadatat +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"3ObjectMeta describes the pod that is being evicted. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúY +x-kubernetes-group-version-kind64- kind: Eviction + version: v1beta1 + group: policy + +Ô +(io.k8s.api.core.v1.DownwardAPIProjection§"™Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.² +objectÊ} +{ +itemsr")Items is a list of DownwardAPIVolume file² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile +» +"io.k8s.api.core.v1.EndpointAddress”"#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhookú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge -ú… -x-kubernetes-group-version-kindb`- group: admissionregistration.k8s.io - kind: ValidatingWebhookConfiguration - version: v1beta1 +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúK +x-kubernetes-group-version-kind(&- group: "" + kind: Pod + version: v1 -ñ -Kio.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList¡ "OValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.šitemsÊ· +à +"io.k8s.api.core.v1.PodAntiAffinity¹ "IPod anti affinity is a group of inter pod anti affinity scheduling rules.² +objectÊß + +ö +/preferredDuringSchedulingIgnoredDuringExecutionÂ"öThe scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.² +arrayº< +: +8#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm +ã +.requiredDuringSchedulingIgnoredDuringExecution°"ìIf the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.PodAffinityTerm + +(io.k8s.api.networking.v1beta1.IngressTLSâ"MIngressTLS describes the transport layer security associated with an Ingress.² +objectÊ„ +š +hosts"óHosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.² +arrayº + ² +string +ä + +secretNameÕ"ÇSecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.² +string +– + io.k8s.api.batch.v1beta1.CronJobñ +":CronJob represents the configuration of a single cron job.² +objectÊÌ +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ê +specá +2#/definitions/io.k8s.api.batch.v1beta1.CronJobSpec"ªSpecification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +¾ +status³ +4#/definitions/io.k8s.api.batch.v1beta1.CronJobStatus"{Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúW +x-kubernetes-group-version-kind42- group: batch + kind: CronJob + version: v1beta1 + +´ +4io.k8s.api.core.v1.PersistentVolumeClaimVolumeSourceû"žPersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).š claimName² +objectÊ¿ +á + claimNameÓ"ÅClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims² +string +Y +readOnlyM"?Will force the ReadOnly setting in VolumeMounts. Default false.² +boolean +ç +3io.k8s.api.extensions.v1beta1.PodSecurityPolicyList¯ "‚PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.šitems² +objectʦ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ë +metadata¾ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +{ +itemsr""items is a list of schema objects.² +arrayºA +? +=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyúj +x-kubernetes-group-version-kindGE- kind: PodSecurityPolicyList + version: v1beta1 + group: extensions + +Ä +(io.k8s.api.storage.v1beta1.CSIDriverSpec— "2CSIDriverSpec is the specification of a CSIDriver.² +objectÊÔ +¯ +attachRequiredœ"attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.² +boolean +Ÿ +podInfoOnMountŒ"ýIf set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. "csi.storage.k8s.io/pod.name": pod.Name "csi.storage.k8s.io/pod.namespace": pod.Namespace "csi.storage.k8s.io/pod.uid": string(pod.UID)² +boolean +ò +Tio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray™"–JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes. +˜ +*io.k8s.api.core.v1.NodeSelectorRequirementé"wA node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.škeyšoperator² +objectÊÐ +? +key8"+The label key that the selector applies to.² +string +Ž +operator"tRepresents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.² +string +û +valuesð"ÓAn array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.² +arrayº + ² +string + +=io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpecÎ"¾This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.šrequest² +objectÊô += +request2byte"Base64-encoded PKCS#10 CSR data² +string +c +uid\"OUID information about the requesting user. See user.Info interface for details.² +string +å +usagesÚ"½allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 + https://tools.ietf.org/html/rfc5280#section-4.2.1.12² +arrayº + ² +string +d +usernameX"KInformation about the requesting user. See user.Info interface for details.² +string +† +extra}"QExtra information about the requesting user. See user.Info interface for details.ª +² +arrayº + ² +string² +object +w +groupsm"QGroup information about the requesting user. See user.Info interface for details.² +arrayº + ² +string +È +io.k8s.api.core.v1.ConfigMap§ "7ConfigMap holds configuration data for pods to consume.² +objectÊ‹ +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +˜ + +binaryData‰"åBinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.ª +byte² +string² +object +Ï +dataÆ"¨Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.ª + ² +string² +object +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúQ +x-kubernetes-group-version-kind.,- version: v1 + group: "" + kind: ConfigMap + +ž +)io.k8s.api.networking.v1beta1.IngressRuleð"ìIngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.² +objectÊò +£ +hostš"ŒHost is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + IP in the Spec of the parent Ingress. +2. The `:` delimiter is not respected because ports are not allowed. + Currently the port of an Ingress is implicitly :80 for http and + :443 for https. +Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.² +string +J +httpB +@#/definitions/io.k8s.api.networking.v1beta1.HTTPIngressRuleValue +æ +0io.k8s.api.policy.v1beta1.SELinuxStrategyOptions±"]SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.šrule² +objectʼ +a +ruleY"Lrule is the strategy that will dictate the allowable labels that may be set.² +string +Ö +seLinuxOptionsà +/#/definitions/io.k8s.api.core.v1.SELinuxOptions"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +º +"io.k8s.api.rbac.v1.AggregationRule“"VAggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole² +objectʬ +© +clusterRoleSelectors"¼ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added² +arrayºD +B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector +ç +(io.k8s.api.storage.v1beta1.CSIDriverListº"3CSIDriverList is a collection of CSIDriver objects.šitems² +objectÊ… +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc"items is the list of CSIDriver² +arrayº6 +4 +2#/definitions/io.k8s.api.storage.v1beta1.CSIDriver +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúf +x-kubernetes-group-version-kindCA- kind: CSIDriverList + version: v1beta1 + group: storage.k8s.io + +æ +-io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup´"YAPIGroup contains the name, the supported versions, and the preferred version of a group.šnamešversions² +objectÊå +3 +name+"name is the name of the group.² +string +Ç +preferredVersion² +K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery"cpreferredVersion is the version preferred by the API server, which probably is the storage version. +è +serverAddressByClientCIDRsÉ"éa map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.² +arrayºP +N +L#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR + +versions"2versions are the versions supported in this group.² +arrayºO +M +K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúP +x-kubernetes-group-version-kind-+- group: "" + kind: APIGroup + version: v1 + +ž +*io.k8s.api.apps.v1.DaemonSetUpdateStrategyï"XDaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.² +objectʆ +’ + rollingUpdate€ +7#/definitions/io.k8s.api.apps.v1.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". +o +typeg"ZType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.² +string +Ï +$io.k8s.api.batch.v1beta1.CronJobSpec¦ "YCronJobSpec describes how the job execution will look like and when it will actually run.šscheduleš jobTemplate² +objectÊ£ + +Ì +concurrencyPolicy¶"¨Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace": cancels currently running job and replaces it with a new one² +string +· +failedJobsHistoryLimitœint32"†The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² +integer +‰ + jobTemplatez +6#/definitions/io.k8s.api.batch.v1beta1.JobTemplateSpec"@Specifies the job that will be created when executing a CronJob. +] +scheduleQ"DThe schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.² +string +Ç +startingDeadlineSeconds«int64"•Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.² +integer +¿ +successfulJobsHistoryLimit int32"ŠThe number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.² +integer +  +suspend”"…This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.² +boolean +Æ +$io.k8s.api.core.v1.ISCSIVolumeSource "’Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.š targetPortalšiqnšlun² +objectÊÞ +³ +portals§"ŠiSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² +arrayº + ² +string +k +readOnly_"QReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.² +boolean +¤ + targetPortal“"…iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² +string +V +chapAuthDiscoveryA"3whether support iSCSI Discovery CHAP authentication² +boolean +4 +lun-int32"iSCSI Target Lun number.² +integer +Ô + initiatorNameÂ"´Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.² +string +0 +iqn)"Target iSCSI Qualified Name.² +string +n +iscsiInterface\"OiSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).² +string + + secretRefr +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"9CHAP Secret for iSCSI target and initiator authentication +R +chapAuthSession?"1whether support iSCSI Session CHAP authentication² +boolean +µ +fsTypeª"œFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi² +string +Æ +&io.k8s.api.core.v1.ObjectFieldSelector›"?ObjectFieldSelector selects an APIVersioned field of an object.š fieldPath² +objectÊ¿ +h + +apiVersionZ"MVersion of the schema the FieldPath is written in terms of, defaults to "v1".² +string +S + fieldPathF"9Path of the field to select in the specified API version.² +string +› +2io.k8s.api.policy.v1beta1.RunAsUserStrategyOptionsä"_RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.šrule² +objectÊí +ý +rangesò"¯ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.² +arrayº3 +1 +/#/definitions/io.k8s.api.policy.v1beta1.IDRange +k +rulec"Vrule is the strategy that will dictate the allowable RunAsUser values that may be set.² +string +— +-io.k8s.apimachinery.pkg.api.resource.Quantityå"×Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors. + +The serialization format is: + + ::= + (Note that may be empty, from the "" case in .) + ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= "+" | "-" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei + (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html) + ::= m | "" | k | M | G | T | P | E + (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) + ::= "e" | "E" + +No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities. + +When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized. + +Before serializing, Quantity will be put in "canonical form". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that: + a. No precision is lost + b. No fractional digits will be emitted + c. The exponent (or suffix) is as large as possible. +The sign will be omitted unless the number is negative. + +Examples: + 1.5 will be serialized as "1500m" + 1.5Gi will be serialized as "1536Mi" + +Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise. + +Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.) + +This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.² +string +× +3io.k8s.api.autoscaling.v2beta2.ExternalMetricStatusŸ"nExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.šmetricšcurrent² +objectÊ +„ +currenty +>#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector + +-io.k8s.api.core.v1.FlexPersistentVolumeSourceÝ"ƒFlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.šdriver² +objectÊ¿ +O +driverE"8Driver is the name of the driver to use for this volume.² +string +Ä +fsType¹"«Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.² +string +O +optionsD"'Optional: Extra command options if any.ª + ² +string² +object +‚ +readOnlyv"hOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +Î + secretRefÀ +0#/definitions/io.k8s.api.core.v1.SecretReference"‹Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. +ý + +io.k8s.api.rbac.v1.PolicyRuleÛ +"¡PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.šverbs² +objectÊ  +¨ + resourceNames–"zResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.² +arrayº + ² +string +† + resourcesy"]Resources is a list of resources this rule applies to. ResourceAll represents all resources.² +arrayº + ² +string +´ +verbsª"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.² +arrayº + ² +string +ó + apiGroupså"ÈAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.² +arrayº + ² +string +¼ +nonResourceURLs¨"‹NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.² +arrayº + ² +string +Ø +&io.k8s.api.storage.v1.VolumeAttachment­ "—VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node. + +VolumeAttachment objects are non-namespaced.šspec² +objectÊ– +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¾ +metadata± +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +¤ +spec› +8#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSpec"_Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system. +Ð +statusÅ +:#/definitions/io.k8s.api.storage.v1.VolumeAttachmentStatus"†Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.úd +x-kubernetes-group-version-kindA?- version: v1 + group: storage.k8s.io + kind: VolumeAttachment + +Ð +,io.k8s.apimachinery.pkg.runtime.RawExtensionŸ "¹ +RawExtension is used to hold extensions in external versions. + +To use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types. + +// Internal package: type MyAPIObject struct { + runtime.TypeMeta `json:",inline"` + MyPlugin runtime.Object `json:"myPlugin"` +} type PluginA struct { + AOption string `json:"aOption"` +} + +// External package: type MyAPIObject struct { + runtime.TypeMeta `json:",inline"` + MyPlugin runtime.RawExtension `json:"myPlugin"` +} type PluginA struct { + AOption string `json:"aOption"` +} + +// On the wire, the JSON will look something like this: { + "kind":"MyAPIObject", + "apiVersion":"v1", + "myPlugin": { + "kind":"PluginA", + "aOption":"foo", + }, +} + +So what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)šRaw² +objectÊO +M +RawFbyte"3Raw is the underlying serialization of this object.² +string +˜ +.io.k8s.api.apps.v1beta2.ControllerRevisionListå"UControllerRevisionList is a resource containing a list of ControllerRevision objects.šitems² +objectÊ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +| +itemss"(Items is the list of ControllerRevisions² +arrayº< +: +8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +³ +metadata¦ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"gMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadataúe +x-kubernetes-group-version-kindB@- group: apps + kind: ControllerRevisionList + version: v1beta2 + +… +)io.k8s.api.policy.v1beta1.AllowedHostPath×"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.² +objectʶ +­ + +pathPrefixž"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path. + +Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`² +string +ƒ +readOnlyw"iwhen set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.² +boolean +Ô +2io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails "éStatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.² +objectÊ¢ +ü +kindó"åThe kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +— +nameŽ"€The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).² +string +— +retryAfterSecondsint32"ëIf specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.² +integer +¥ +uid"UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids² +string +à +causesÕ"ƒThe Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.² +arrayºB +@ +>#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause +b +groupY"LThe group attribute of the resource associated with the status StatusReason.² +string +¾ +io.k8s.api.core.v1.PodAffinity› "?Pod affinity is a group of inter pod affinity scheduling rules.² +objectÊË + +ì +/preferredDuringSchedulingIgnoredDuringExecution¸"ìThe scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.² +arrayº< +: +8#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm +Ù +.requiredDuringSchedulingIgnoredDuringExecution¦"âIf the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.PodAffinityTerm +˜ +.io.k8s.api.authorization.v1.ResourceAttributeså"tResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface² +objectÊà +ô + namespaceæ"ØNamespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview² +string +X +resourceL"?Resource is one of the existing resource types. "*" means all.² +string +^ + subresourceO"BSubresource is one of the existing resource types. "" means none.² +string +ƒ +verb{"nVerb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all.² +string +S +versionH";Version is the API Version of the Resource. "*" means all.² +string +M +groupD"7Group is the API Group of the Resource. "*" means all.² +string +‚ +namez"mName is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.² +string +˜ +5io.k8s.api.authorization.v1.SubjectAccessReviewStatusÞ"SubjectAccessReviewStatusšallowed² +objectʪ +c +allowedX"JAllowed is required. True if the action would be allowed, false otherwise.² +boolean +‚ +denied÷"èDenied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.² +boolean +Þ +evaluationErrorÊ"¼EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.² +string +] +reasonS"FReason is optional. It indicates why a request was allowed or denied.² +string +à + +1io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler +"-configuration of a horizontal pod autoscaler.² +objectÊä +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¾ +metadata± +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Ç +spec¾ +C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec"wbehaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. +| +statusr +E#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus")current information about the autoscaler. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúh +x-kubernetes-group-version-kindEC- group: autoscaling + kind: HorizontalPodAutoscaler + version: v1 + +© +0io.k8s.api.extensions.v1beta1.DeploymentStrategyô"HDeploymentStrategy describes how to replace existing pods with new ones.² +objectÊ› +® + rollingUpdateœ +C#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. +h +type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² +string +í +)io.k8s.api.extensions.v1beta1.IngressList¿"'IngressList is a collection of Ingress.šitems² +objectÊœ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +l +itemsc"Items is the list of Ingress.² +arrayº7 +5 +3#/definitions/io.k8s.api.extensions.v1beta1.Ingress +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ð +metadataà +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadataú` +x-kubernetes-group-version-kind=;- group: extensions + kind: IngressList + version: v1beta1 + +Ñ +*io.k8s.api.apps.v1beta2.DaemonSetCondition¢"IDaemonSetCondition describes the state of a DaemonSet at a certain point.štypešstatus² +objectʸ +1 +type)"Type of DaemonSet condition.² +string +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +Š ++io.k8s.api.extensions.v1beta1.DaemonSetSpecÚ "3DaemonSetSpec is the specification of a daemon set.štemplate² +objectÊ‹ +’ +minReadySecondsþint32"èThe minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).² +integer +¿ +revisionHistoryLimit¦int32"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² +integer +Ç +selectorº +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"õA label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +„ +template÷ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÂAn object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template +¿ +templateGeneration¨int64"’DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.² +integer +ž +updateStrategy‹ +C#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy"DAn update strategy to replace existing DaemonSet pods with new pods. +ƒ +2io.k8s.api.networking.v1beta1.HTTPIngressRuleValueÌ"£HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.špaths² +objectÊ +Œ +paths‚"4A collection of paths that map requests to backends.² +arrayº? += +;#/definitions/io.k8s.api.networking.v1beta1.HTTPIngressPath +À +%io.k8s.api.extensions.v1beta1.IDRange–"mIDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.šminšmax² +objectÊŒ +C +max<int64"'max is the end of the range, inclusive.² +integer +E +min>int64")min is the start of the range, inclusive.² +integer + +:io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerListÂ"KHorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.šitems² +objectÊê +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +˜ +itemsŽ"7items is the list of horizontal pod autoscaler objects.² +arrayºH +F +D#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +r +metadataf +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"'metadata is the standard list metadata.úq +x-kubernetes-group-version-kindNL- group: autoscaling + kind: HorizontalPodAutoscalerList + version: v2beta2 + +† +3io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSourceÎ +"¡Represents a Persistent Disk resource in AWS. + +An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.švolumeID² +objectÊ +Ä +fsType¹"«Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² +string +¨ + partitionšint32"„The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).² +integer +ä +readOnly×"ÈSpecify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² +boolean +´ +volumeID§"™Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² +string +Æ +2io.k8s.api.core.v1.AzureFilePersistentVolumeSource"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod.š +secretNameš shareName² +objectÊŽ +x +readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² +boolean +^ + +secretNameP"Cthe name of secret that contains Azure Storage Account Name and Key² +string +‹ +secretNamespacex"kthe namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod² +string +$ + shareName" +Share Name² +string +Ó +io.k8s.api.core.v1.Endpoints²"ýEndpoints is a collection of endpoints that implement the actual service. Example: + Name: "mysvc", + Subsets: [ + { + Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], + Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] + }, + { + Addresses: [{"ip": "10.10.3.3"}], + Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] + }, + ]² +objectÊÏ + +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +® +subsets¢"ßThe set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.² +arrayº3 +1 +/#/definitions/io.k8s.api.core.v1.EndpointSubset +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúQ +x-kubernetes-group-version-kind.,- group: "" + kind: Endpoints + version: v1 + + +-io.k8s.api.extensions.v1beta1.HTTPIngressPathÞ"uHTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.šbackend² +objectÊÎ +¤ +backend˜ +:#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"ZBackend defines the referenced service endpoint to which the traffic will be forwarded to. +¤ +path›"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.² +string +¹ +%io.k8s.api.autoscaling.v1.ScaleStatus"AScaleStatus represents the current status of a scale subresource.šreplicas² +objectʲ +Z +replicasNint32"9actual number of observed instances of the scaled object.² +integer +Ó +selectorÆ"¸label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors² +string +ƒ +3io.k8s.api.autoscaling.v2beta2.ResourceMetricStatusË"ÝResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.šnamešcurrent² +objectÊË +„ +currenty +>#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric +B +name:"-Name is the name of the resource in question.² +string +ä +io.k8s.api.batch.v1.JobSpecÄ"7JobSpec describes how the job execution will look like.štemplate² +objectÊñ +Ð + completionsÀint32"ªSpecifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² +integer +¹ +manualSelector¦"—manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector² +boolean +¦ + parallelism–int32"€Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² +integer + +selector +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ËA label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +Û +templateÎ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"™Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ +ó +ttlSecondsAfterFinished×int32"ÁttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.² +integer +Î +activeDeadlineSeconds´int64"žSpecifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer² +integer +r + backoffLimitbint32"MSpecifies the number of retries before marking this job failed. Defaults to 6² +integer +› +"io.k8s.api.core.v1.NamespaceStatusô"GNamespaceStatus is information about the current status of a Namespace.² +objectÊœ ™ -items"'List of ValidatingWebhookConfiguration.² -arrayºY -W -U#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration +phase"Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/² +string + +io.k8s.api.core.v1.Node "iNode is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).² +objectʸ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ +spec¤ +)#/definitions/io.k8s.api.core.v1.NodeSpec"wSpec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +ç +statusÜ ++#/definitions/io.k8s.api.core.v1.NodeStatus"¬Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúL +x-kubernetes-group-version-kind)'- kind: Node + version: v1 + group: "" + +˜ +0io.k8s.api.extensions.v1beta1.DeploymentRollbackã"XDEPRECATED. DeploymentRollback stores the information required to rollback a deployment.šnameš +rollbackTo² +objectÊü +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +H +name@"3Required: This must match the Name of a deployment.² +string +s + +rollbackToe +:#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"'The config of this deployment rollback. +` +updatedAnnotationsJ"-The annotations to be updated to a deploymentª + ² +string² +objectúg +x-kubernetes-group-version-kindDB- kind: DeploymentRollback + version: v1beta1 + group: extensions + +â +io.k8s.api.rbac.v1.RoleListÂ"!RoleList is a collection of Rolesšitems² +objectÊž +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Y +itemsP"Items is a list of Roles² +arrayº) +' +%#/definitions/io.k8s.api.rbac.v1.Role +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úg +x-kubernetes-group-version-kindDB- group: rbac.authorization.k8s.io + kind: RoleList + version: v1 + +“ +%io.k8s.api.apps.v1.DeploymentStrategyé"HDeploymentStrategy describes how to replace existing pods with new ones.² +objectÊ +£ + rollingUpdate‘ +8#/definitions/io.k8s.api.apps.v1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. +h +type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² +string +¾ +&io.k8s.api.apps.v1beta2.ReplicaSetList“ ".ReplicaSetList is a collection of ReplicaSets.šitems² +objectÊì +¼ +items²"oList of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² +arrayº4 +2 +0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ï +metadata +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"‚Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringú] +x-kubernetes-group-version-kind:8- group: apps + kind: ReplicaSetList + version: v1beta2 + +Á + io.k8s.api.core.v1.ConfigMapListœ"CConfigMapList is a resource containing a list of ConfigMap objects.šitems² +objectÊè +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +f +items]" Items is the list of ConfigMaps.² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.ConfigMap +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¢ +metadata• +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúU +x-kubernetes-group-version-kind20- group: "" + kind: ConfigMapList + version: v1 + +ì +,io.k8s.api.networking.v1beta1.IngressBackend»"DIngressBackend describes all endpoints for a given service and port.š serviceNameš servicePort² +objectÊÊ +} + servicePortn +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"-Specifies the port of the referenced service. +I + serviceName:"-Specifies the name of the referenced service.² +string +ƒ +#io.k8s.api.apps.v1.DeploymentStatusÛ "HDeploymentStatus is the most recently observed status of the Deployment.² +objectÊ‚ +Š +availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² +integer +Þ +collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² +integer +÷ + +conditionsè"MRepresents the latest available observations of a deployment's current state.² +arrayº8 +6 +4#/definitions/io.k8s.api.apps.v1.DeploymentConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +` +observedGenerationJint64"5The generation observed by the deployment controller.² +integer +] + readyReplicasLint32"7Total number of ready pods targeted by this deployment.² +integer +ƒ +replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² +integer +Á +unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² +integer +Œ +updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² +integer +î +:io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference¯"bCrossVersionObjectReference contains enough information to let you identify the referred resource.škindšname² +objectÊ® +6 + +apiVersion("API version of the referent² +string +… +kind}"pKind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"² +string +l +named"WName of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names² +string +Ž +(io.k8s.api.core.v1.PersistentVolumeClaimá "NPersistentVolumeClaim is a user's request for and claim to a persistent volume² +objectÊ¢ + +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ø +specï +:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec"°Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims +† +statusû +<#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus"ºStatus represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaimsú] +x-kubernetes-group-version-kind:8- group: "" + kind: PersistentVolumeClaim + version: v1 + +ó +io.k8s.api.core.v1.SecretÕ "‚Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.² +objectÊð +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +¯ + +stringData "‚stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.ª + ² +string² +object +M +typeE"8Used to facilitate programmatic handling of secret data.² +string +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Î +dataÅ"¡Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4ª +byte² +string² +object +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúN +x-kubernetes-group-version-kind+)- group: "" + kind: Secret + version: v1 + + +(io.k8s.api.apps.v1beta1.DeploymentStatusà "HDeploymentStatus is the most recently observed status of the Deployment.² +objectʇ +Þ +collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² +integer +ü + +conditionsí"MRepresents the latest available observations of a deployment's current state.² +arrayº= +; +9#/definitions/io.k8s.api.apps.v1beta1.DeploymentConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +` +observedGenerationJint64"5The generation observed by the deployment controller.² +integer +] + readyReplicasLint32"7Total number of ready pods targeted by this deployment.² +integer +ƒ +replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² +integer +Á +unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² +integer +Œ +updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² +integer +Š +availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² +integer +  +/io.k8s.api.extensions.v1beta1.AllowedFlexVolumeì"AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.šdriver² +objectÊE +C +driver9",driver is the name of the Flexvolume driver.² +string +Œ + ++io.k8s.api.extensions.v1beta1.NetworkPolicyÜ "¬DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods² +objectʹ +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +† +spec~ +=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec"=Specification of the desired behavior for this NetworkPolicy. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúb +x-kubernetes-group-version-kind?=- group: extensions + kind: NetworkPolicy + version: v1beta1 + +á +)io.k8s.api.coordination.v1beta1.LeaseList³"%LeaseList is a list of Lease objects.šitems² +objectÊ‹ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +q +itemsh""Items is a list of schema objects.² +arrayº7 +5 +3#/definitions/io.k8s.api.coordination.v1beta1.Leaseúg +x-kubernetes-group-version-kindDB- group: coordination.k8s.io + kind: LeaseList + version: v1beta1 + +Ó +)io.k8s.api.autoscaling.v2beta2.MetricSpec¥ "|MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).štype² +objectÊ‘ +ô +externalç +A#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricSource"¡external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). + +object· +?#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricSource"tobject refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). +• +podsŒ +=#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricSource"Êpods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. +™ +resourceŒ +A#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricSource"Æresource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. +ž +type•"‡type is the type of metric source. It should be one of "Object", "Pods" or "Resource", each mapping to a matching field in the object.² +string +ä +$io.k8s.api.core.v1.ResourceQuotaSpec»"GResourceQuotaSpec defines the desired hard limits to enforce for Quota.² +objectÊã +ß +hardÖ"†hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +Ü + scopeSelectorÊ +.#/definitions/io.k8s.api.core.v1.ScopeSelector"—scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched. +Ÿ +scopes”"xA collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.² +arrayº + ² +string +¢ +4io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSeté"BSpec to control the desired behavior of daemon set rolling update.² +objectÊ– +“ +maxUnavailable€ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. +­ +#io.k8s.api.rbac.v1beta1.ClusterRole… "ˆClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.² +objectÊù +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +€ +rulesw"4Rules holds all the PolicyRules for this ClusterRole² +arrayº4 +2 +0#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule +® +aggregationRuleš +5#/definitions/io.k8s.api.rbac.v1beta1.AggregationRule"àAggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúo +x-kubernetes-group-version-kindLJ- group: rbac.authorization.k8s.io + kind: ClusterRole + version: v1beta1 + +“ +&io.k8s.api.apps.v1beta2.DeploymentSpecè "NDeploymentSpec is the specification of the desired behavior of the Deployment.šselectorštemplate² +objectÊó +  +progressDeadlineSeconds„int32"îThe maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.² +integer +’ +replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² +integer +à +revisionHistoryLimitªint32"”The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² +integer +ö +selectoré +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"¤Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels. +¾ +strategy± +8#/definitions/io.k8s.api.apps.v1beta2.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, +x-kubernetes-patch-strategy  retainKeys + +q +templatee +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. +ƒ +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² +integer +@ +paused6"(Indicates that the deployment is paused.² +boolean +Î +7io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec’"¦SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set² +objectÊÚ +ª +nonResourceAttributes +?#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"MNonResourceAttributes describes information for a non-resource access request +ª +resourceAttributes“ +<#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"SResourceAuthorizationAttributes describes information for a resource access request +ð +!io.k8s.api.core.v1.ClientIPConfigÊ"QClientIPConfig represents the configurations of Client IP based session affinity.² +objectÊè +å +timeoutSecondsÒint32"¼timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours).² +integer + +!io.k8s.api.core.v1.LimitRangeSpec÷"NLimitRangeSpec defines a min/max usage limit for resources that match on kind.šlimits² +objectÊ +Œ +limits"?Limits is the list of LimitRangeItem objects that are enforced.² +arrayº3 +1 +/#/definitions/io.k8s.api.core.v1.LimitRangeItem +Ú ++io.k8s.api.policy.v1beta1.AllowedFlexVolumeª"LAllowedFlexVolume represents a single Flexvolume that is allowed to be used.šdriver² +objectÊE +C +driver9",driver is the name of the Flexvolume driver.² +string +» + +&io.k8s.api.apps.v1beta2.ReplicaSetSpec +"4ReplicaSetSpec is the specification of a ReplicaSet.šselector² +objectÊÀ +ƒ +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² +integer +¡ +replicas”int32"þReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² +integer +ý +selectorð +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"«Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +“ +template† +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÑTemplate is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template +î +io.k8s.api.core.v1.LifecycleÍ "ªLifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.² +objectÊ‘ + + postStartó +(#/definitions/io.k8s.api.core.v1.Handler"ÆPostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks +Š +preStopþ +(#/definitions/io.k8s.api.core.v1.Handler"ÑPreStop is called immediately before a container is terminated due to an API request or management event such as liveness probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks +Õ +/io.k8s.api.core.v1.CinderPersistentVolumeSource¡"ëRepresents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.švolumeID² +objectÊ™ +‘ +fsType†"øFilesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +string +Ï +readOnlyÂ"³Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +boolean +™ + secretRef‹ +0#/definitions/io.k8s.api.core.v1.SecretReference"WOptional: points to a secret object containing parameters used to connect to OpenStack. +” +volumeID‡"zvolume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +string +® + io.k8s.api.core.v1.NamespaceList‰ "&NamespaceList is a list of Namespaces.šitems² +objectÊò +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Ô +itemsÊ"ŒItems is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.Namespace ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string ½ metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsú‰ -x-kubernetes-group-version-kindfd- group: admissionregistration.k8s.io - kind: ValidatingWebhookConfigurationList +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúU +x-kubernetes-group-version-kind20- group: "" + kind: NamespaceList + version: v1 + +ì +#io.k8s.api.core.v1.NodeConfigStatusÄ"WNodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.² +objectÊÜ +  +error–"ˆError describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.² +string +ö + lastKnownGoodä +1#/definitions/io.k8s.api.core.v1.NodeConfigSource"®LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future. +Á +active¶ +1#/definitions/io.k8s.api.core.v1.NodeConfigSource"€Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error. +ù +assignedì +1#/definitions/io.k8s.api.core.v1.NodeConfigSource"¶Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned. +ü +io.k8s.api.core.v1.Probeß "€Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.² +objectÊÍ + + +successThreshold­int32"—Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.² +integer +‘ + tcpSocketƒ +0#/definitions/io.k8s.api.core.v1.TCPSocketAction"OTCPSocket specifies an action involving a TCP port. TCP hooks not yet supported +â +timeoutSecondsÏint32"¹Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes² +integer +‘ +execˆ ++#/definitions/io.k8s.api.core.v1.ExecAction"YOne and only one of the following should be specified. Exec specifies the action to take. +§ +failureThreshold’int32"}Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.² +integer +k +httpGet` +.#/definitions/io.k8s.api.core.v1.HTTPGetAction".HTTPGet specifies the http request to perform. +â +initialDelaySecondsÊint32"´Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes² +integer +} + periodSecondslint32"WHow often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.² +integer + +'io.k8s.api.core.v1.ResourceRequirementsä"AResourceRequirements describes the compute resource requirements.² +objectÊ’ +ý +limitsò"¢Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object + +requests‚"²Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +Ò +4io.k8s.api.core.v1.ScopedResourceSelectorRequirement™"A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.š scopeNamešoperator² +objectÊà +ƒ +operatorw"jRepresents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.² +string +M + scopeName@"3The name of the scope that the selector applies to.² +string +ˆ +valuesý"àAn array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.² +arrayº + ² +string +¬ +Zio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArrayN"LJSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array. +í +1io.k8s.api.autoscaling.v2beta1.ObjectMetricSource·"‰ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).štargetš +metricNameš targetValue² +objectÊø +¶ + averageValue¥ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"faverageValue is the target value of the average of the metric across all relevant pods (as a quantity) +L + +metricName>"1metricName is the name of the metric in question.² +string +Ü +selectorÏ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Šselector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics. +€ +targetv +H#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"*target is the described Kubernetes object. +Œ + targetValue} +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity">targetValue is the target value of the metric (as a quantity). +¨ +1io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategyò"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.² +objectÊ‘ +¾ + rollingUpdate¬ +F#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. +N +typeF"9Type indicates the type of the StatefulSetUpdateStrategy.² +string + +*io.k8s.api.apps.v1beta1.DeploymentStrategyî"HDeploymentStrategy describes how to replace existing pods with new ones.² +objectÊ• +¨ + rollingUpdate– +=#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. +h +type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² +string +ß +,io.k8s.api.core.v1.ReplicationControllerList® "EReplicationControllerList is a collection of replication controllers.šitems² +objectÊì +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +Î +itemsÄ"{List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² +arrayº: +8 +6#/definitions/io.k8s.api.core.v1.ReplicationController +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúa +x-kubernetes-group-version-kind><- group: "" + kind: ReplicationControllerList + version: v1 + +¦ +&io.k8s.api.scheduling.v1.PriorityClassû "{PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.švalue² +objectÊ€ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +‹ + description|"odescription is an arbitrary string that usually provides guidelines on when this priority class should be used.² +string +¦ + globalDefault”"…globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.² +boolean +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +¨ +valuežint32"ˆThe value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.² +integerúd +x-kubernetes-group-version-kindA?- group: scheduling.k8s.io + kind: PriorityClass + version: v1 + + +!io.k8s.api.storage.v1.VolumeErrorê"DVolumeError captures an error encountered during a volume operation.² +objectÊ• +® +message¢"”String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.² +string +b +timeZ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Time the error was encountered. +Á +_io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionConditionÝ"YCustomResourceDefinitionCondition contains details for the current condition of this pod.štypešstatus² +objectÊã +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +X +messageM"@Human-readable message indicating details about last transition.² +string +^ +reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² +string +Z +statusP"CStatus is the status of the condition. Can be True, False, Unknown.² +string +7 +type/""Type is the type of the condition.² +string +Í +3io.k8s.api.authorization.v1.SubjectAccessReviewSpec•"¢SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set² +objectÊá +Æ +extra¼"Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.ª +² +arrayº + ² +string² +object +N +groupsD"(Groups is the groups you're testing for.² +arrayº + ² +string +ª +nonResourceAttributes +?#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"MNonResourceAttributes describes information for a non-resource access request +ª +resourceAttributes“ +<#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"SResourceAuthorizationAttributes describes information for a resource access request +> +uid7"*UID information about the requesting user.² +string +« +user¢"”User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups² +string +‚ +1io.k8s.api.core.v1.ReplicationControllerConditionÌ"bReplicationControllerCondition describes the state of a replication controller at a certain point.štypešstatus² +objectÊÉ +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +> +type6")Type of replication controller condition.² +string +• +lastTransitionTime +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +à +.io.k8s.api.extensions.v1beta1.ReplicaSetStatus­"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicas² +objectÊÒ +ƒ + +conditionsô"NRepresents the latest available observations of a replica set's current state.² +arrayºC +A +?#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +‹ +fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² +integer + +observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² +integer +X + readyReplicasGint32"2The number of ready replicas for this replica set.² +integer +Ø +replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² +integer +… +availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² +integer +þ + +*io.k8s.api.rbac.v1beta1.ClusterRoleBindingÏ +"ŸClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.šroleRef² +objectÊ› +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +Ç +roleRef» +-#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"‰RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. +‰ +subjects}"=Subjects holds references to the objects the role applies to.² +arrayº1 +/ +-#/definitions/io.k8s.api.rbac.v1beta1.Subject +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúv +x-kubernetes-group-version-kindSQ- group: rbac.authorization.k8s.io + kind: ClusterRoleBinding version: v1beta1 -‘ -0io.k8s.api.admissionregistration.v1beta1.WebhookÜ"VWebhook describes an admission webhook and the resources and operations it applies to.šnameš clientConfigÊê +ö ++io.k8s.api.storage.v1beta1.StorageClassListÆ"4StorageClassList is a collection of storage classes.šitems² +objectÊ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +t +itemsk"#Items is the list of StorageClasses² +arrayº9 +7 +5#/definitions/io.k8s.api.storage.v1beta1.StorageClass +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúi +x-kubernetes-group-version-kindFD- group: storage.k8s.io + kind: StorageClassList + version: v1beta1 + +ˆ +.io.k8s.apimachinery.pkg.apis.meta.v1.MicroTimeV date-time">MicroTime is version of Time with microsecond level precision.² +string +‘ +#io.k8s.api.apps.v1beta2.StatefulSeté " DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as: + - Network: A single stable DNS and hostname. + - Storage: As many VolumeClaims as requested. +The StatefulSet guarantees that a given network identity will always map to the same storage identity.² +objectÊÚ +y +specq +5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetSpec"8Spec defines the desired identities of pods in this set. +´ +status© +7#/definitions/io.k8s.api.apps.v1beta2.StatefulSetStatus"nStatus is the current status of Pods in this StatefulSet. This data may be out of date by some window of time. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaúZ +x-kubernetes-group-version-kind75- version: v1beta2 + group: apps + kind: StatefulSet + + +io.k8s.api.apps.v1.DaemonSet¡ "7DaemonSet represents the configuration of a daemon set.² +objectʃ + +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + +spec¹ +.#/definitions/io.k8s.api.apps.v1.DaemonSetSpec"†The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + +status’ +0#/definitions/io.k8s.api.apps.v1.DaemonSetStatus"ÝThe current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúS +x-kubernetes-group-version-kind0.- group: apps + kind: DaemonSet + version: v1 + +Ä +!io.k8s.api.apps.v1beta1.ScaleSpecž"9ScaleSpec describes the attributes of a scale subresource² +objectÊU +S +replicasGint32"2desired number of instances for the scaled object.² +integer +· +'io.k8s.api.core.v1.LocalObjectReference‹"sLocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.² +objectʇ +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +± +,io.k8s.api.core.v1.ReplicationControllerSpec€ "KReplicationControllerSpec is the specification of a replication controller.² +objectʤ + +ƒ +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² +integer +  +replicas“int32"ýReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller² +integer +¸ +selector«"Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectorsª + ² +string² +object +½ +template° +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ûTemplate is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template +³ +,io.k8s.api.core.v1.TypedLocalObjectReference‚"~TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.škindšname² +objectÊå +Ú +apiGroupÍ"¿APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.² +string +B +kind:"-Kind is the type of resource being referenced² +string +B +name:"-Name is the name of resource being referenced² +string +¶ +current number of replicas of pods managed by this autoscaler.² +integer +f +desiredReplicasSint32">desired number of replicas of pods managed by this autoscaler.² +integer +Ù + lastScaleTimeÇ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‹last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed. +^ +observedGenerationHint64"3most recent generation observed by this autoscaler.² +integer +Ÿ +io.k8s.api.core.v1.NodeSelectorû"¼A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.šnodeSelectorTerms² +objectÊ™ +– +nodeSelectorTerms€"<- group: apps + kind: DeploymentRollback + version: v1beta1 + +Ó +)io.k8s.api.autoscaling.v2beta1.MetricSpec¥ "|MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).štype² +objectÊ‘ +ô +externalç +A#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricSource"¡external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). + +object· +?#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricSource"tobject refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). +• +podsŒ +=#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricSource"Êpods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. +™ +resourceŒ +A#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricSource"Æresource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. ž - clientConfig -J#/definitions/io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig"?ClientConfig defines how to communicate with the hook. Required +type•"‡type is the type of metric source. It should be one of "Object", "Pods" or "Resource", each mapping to a matching field in the object.² +string +¦ +:io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpecç +"_HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.šscaleTargetRefš maxReplicas² +objectÊØ +© + maxReplicas™int32"ƒmaxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.² +integer + +metricsõ"ªmetrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.² +arrayº; +9 +7#/definitions/io.k8s.api.autoscaling.v2beta2.MetricSpec +œ + minReplicasŒint32"wminReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.² +integer +† +scaleTargetRefó +H#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference"¦scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count. +û +io.k8s.api.core.v1.NodeAddressØ"8NodeAddress contains information for the node's address.štypešaddress² +objectÊ +) +address"The node address.² +string +R +typeJ"=Node address type, one of Hostname, ExternalIP or InternalIP.² +string +¼ +!io.k8s.api.core.v1.SELinuxOptions–"#/definitions/io.k8s.api.policy.v1beta1.SELinuxStrategyOptions"OseLinux is the strategy that will dictate the allowable labels that may be set. +Ç +requiredDropCapabilitiesª"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.² +arrayº + ² +string ® - failurePolicyœ"ŽFailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.² +volumes¢"…volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.² +arrayº + ² string -ç -nameÞ"ÐThe name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where "imagepolicy" is the name of the webhook, and kubernetes.io is the name of the organization. Required.² +¾ +allowedFlexVolumes§"ÚallowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.² +arrayº= +; +9#/definitions/io.k8s.api.policy.v1beta1.AllowedFlexVolume + +forbiddenSysctlsø"ÛforbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. + +Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.² +arrayº + ² string +¥ +fsGroup™ +>#/definitions/io.k8s.api.policy.v1beta1.FSGroupStrategyOptions"WfsGroup is the strategy that will dictate what fs group is used by the SecurityContext. +ö +readOnlyRootFilesystemÛ"ÌreadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.² +boolean +Á +Zio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpecâ"PCustomResourceDefinitionSpec describes how a user wants their resource to appearšgroupšnamesšscope² +objectÊé +© + subresources˜ +f#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources"­Subresources describes the subresources for CustomResource Optional, the global subresources for all versions. Top-level and per-version subresources are mutually exclusive. +A +group8"+Group is the group this resource belongs in² +string +¬ + +conversion +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion"5`conversion` defines conversion settings for the CRD. +° +names¦ +i#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"9Names are the names used to describe this custom resource +r +scopei"\Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced² +string +ª + +validation› +d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation"²Validation describes the validation methods for CustomResources Optional, the global validation schema for all versions. Top-level and per-version schemas are mutually exclusive. +æ +versionÚ"ÌVersion is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.² +string +Œ +versionsÿ"€Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² +arrayºo +m +k#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion +ü +additionalPrinterColumnsß"áAdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Optional, the global columns for all versions. Top-level and per-version columns are mutually exclusive.² +arrayºn +l +j#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition +î +0io.k8s.api.admissionregistration.v1beta1.Webhook¹"VWebhook describes an admission webhook and the resources and operations it applies to.šnameš clientConfig² +objectʼ Ý namespaceSelectorÇ @#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"‚ NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook. @@ -24740,265 +36069,29 @@ I#/definitions/io.k8s.api.admissionregistration.v1beta1.RuleWithOperations Ú sideEffectsÊ"¼SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.² string -« -DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReadyʨ -ä -collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -õ - -conditionsæ"LRepresents the latest available observations of a DaemonSet's current state.² -arrayº7 -5 -3#/definitions/io.k8s.api.apps.v1.DaemonSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -ã -currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -ô -desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -Ê -numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -Ý -numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -˜ - numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² -integer -Å -numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -l -observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² -integer -l -updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² -integer -“ -*io.k8s.api.apps.v1.DaemonSetUpdateStrategyä"XDaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.ʆ -’ - rollingUpdate€ -7#/definitions/io.k8s.api.apps.v1.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". -o -typeg"ZType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.² +° +admissionReviewVersions”"÷AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.² +arrayº + ² string -è -io.k8s.api.apps.v1.DeploymentÆ"@Deployment enables declarative updates for Pods and ReplicaSets.Ê© -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +ž + clientConfig +J#/definitions/io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig"?ClientConfig defines how to communicate with the hook. Required +® + failurePolicyœ"ŽFailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.² string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +ç +nameÞ"ÐThe name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where "imagepolicy" is the name of the webhook, and kubernetes.io is the name of the organization. Required.² string -f -metadataZ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. -s -speck -/#/definitions/io.k8s.api.apps.v1.DeploymentSpec"8Specification of the desired behavior of the Deployment. -o -statuse -1#/definitions/io.k8s.api.apps.v1.DeploymentStatus"0Most recently observed status of the Deployment.úT -x-kubernetes-group-version-kind1/- group: apps - kind: Deployment - version: v1 - -½ -&io.k8s.api.apps.v1.DeploymentCondition’"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatusʱ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -v -lastUpdateTimed -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -2 -type*"Type of deployment condition.² -string -à -!io.k8s.api.apps.v1.DeploymentListº"(DeploymentList is a list of Deployments.šitemsÊ© -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -h -items_"!Items is the list of Deployments.² -arrayº/ -- -+#/definitions/io.k8s.api.apps.v1.Deployment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -b -metadataV -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.úX -x-kubernetes-group-version-kind53- group: apps - kind: DeploymentList - version: v1 - -þ -!io.k8s.api.apps.v1.DeploymentSpecØ "NDeploymentSpec is the specification of the desired behavior of the Deployment.šselectorštemplateÊî +‰ +!io.k8s.api.apps.v1.DeploymentSpecã "NDeploymentSpec is the specification of the desired behavior of the Deployment.šselectorštemplate² +objectÊî +q +templatee +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. ƒ minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² integer @@ -25022,52 +36115,9 @@ b 3#/definitions/io.k8s.api.apps.v1.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, x-kubernetes-patch-strategy  retainKeys -q -templatee -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. -ø -#io.k8s.api.apps.v1.DeploymentStatusÐ "HDeploymentStatus is the most recently observed status of the Deployment.Ê‚ -Š -availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² -integer -Þ -collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² -integer -÷ - -conditionsè"MRepresents the latest available observations of a deployment's current state.² -arrayº8 -6 -4#/definitions/io.k8s.api.apps.v1.DeploymentConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -` -observedGenerationJint64"5The generation observed by the deployment controller.² -integer -] - readyReplicasLint32"7Total number of ready pods targeted by this deployment.² -integer -ƒ -replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² -integer -Á -unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² -integer -Œ -updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² -integer -ˆ -%io.k8s.api.apps.v1.DeploymentStrategyÞ"HDeploymentStrategy describes how to replace existing pods with new ones.Ê -£ - rollingUpdate‘ -8#/definitions/io.k8s.api.apps.v1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. -h -type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² -string - -io.k8s.api.apps.v1.ReplicaSetë "YReplicaSet ensures that a specified number of pod replicas are running at any given time.ʵ +Á +6io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler† "ÎHorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.² +objectʶ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -25075,444 +36125,340 @@ apiVersion ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -· -metadataª -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"èIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ä -specÛ -/#/definitions/io.k8s.api.apps.v1.ReplicaSetSpec"§Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -¶ -status« -1#/definitions/io.k8s.api.apps.v1.ReplicaSetStatus"õStatus is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúT -x-kubernetes-group-version-kind1/- group: apps - kind: ReplicaSet - version: v1 +Ï +metadata +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"€metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +ó +specê +H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + +status… +J#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus"7status is the current information about the autoscaler.úm +x-kubernetes-group-version-kindJH- group: autoscaling + kind: HorizontalPodAutoscaler + version: v2beta2 -Ë -&io.k8s.api.apps.v1.ReplicaSetCondition "LReplicaSetCondition describes the state of a replica set at a certain point.štypešstatusʾ -• -lastTransitionTime -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string +Ô +/io.k8s.api.extensions.v1beta1.NetworkPolicySpec "jDEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.š podSelector² +objectÊ— +Ô +egressÉ"òList of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8² +arrayºG +E +C#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule +¶ +ingressª"ÒList of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).² +arrayºH F -reason<"/The reason for the condition's last transition.² +D#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule +Ý + podSelectorÍ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ˆSelects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. +¤ + policyTypes”"÷List of rule types that the NetworkPolicy relates to. Valid options are "Ingress", "Egress", or "Ingress,Egress". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8² +arrayº + ² string -L -statusB"5Status of the condition, one of True, False, Unknown.² +Ü +,io.k8s.api.storage.v1.VolumeAttachmentStatus«"CVolumeAttachmentStatus is the status of a VolumeAttachment request.šattached² +objectÊÌ +± +attached¤"•Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.² +boolean +à +attachmentMetadata¬"ŽUpon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.ª + ² +string² +object +æ + detachErrorÖ +/#/definitions/io.k8s.api.storage.v1.VolumeError"¢The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher. +æ + attachErrorÖ +/#/definitions/io.k8s.api.storage.v1.VolumeError"¢The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher. +š +'io.k8s.api.storage.v1beta1.StorageClassî"ãStorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. + +StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.š provisioner² +objectʃ +‘ + +parameters‚"eParameters holds the parameters for the provisioner that should create volumes of this storage class.ª + ² +string² +object +ø +volumeBindingModeâ"ÔVolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.² string -3 -type+"Type of replica set condition.² +Š +allowedTopologiesô"«Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.² +arrayº9 +7 +5#/definitions/io.k8s.api.core.v1.TopologySelectorTerm +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -’ -!io.k8s.api.apps.v1.ReplicaSetListì".ReplicaSetList is a collection of ReplicaSets.šitemsÊÕ +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +N + provisioner?"2Provisioner indicates the type of the provisioner.² +string +— + reclaimPolicy…"xDynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.² +string +n +allowVolumeExpansionV"HAllowVolumeExpansion shows whether the storage class allow volume expand² +boolean ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -· -items­"oList of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² -arrayº/ -- -+#/definitions/io.k8s.api.apps.v1.ReplicaSet +ì + mountOptionsÛ"¾Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.² +arrayº + ² +stringúe +x-kubernetes-group-version-kindB@- group: storage.k8s.io + kind: StorageClass + version: v1beta1 + +˜ +9io.k8s.api.admissionregistration.v1beta1.ServiceReferenceÚ";ServiceReference holds a reference to Service.legacy.k8s.ioš namespacešname² +objectÊû +@ +name8"+`name` is the name of the service. Required² +string +O + namespaceB"5`namespace` is the namespace of the service. Required² +string +f +path^"Q`path` is an optional URL path which will be sent in any request to this service.² +string +Þ +"io.k8s.api.core.v1.SecurityContext·"ÜSecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.² +objectÊÉ +ô +seLinuxOptionsá +/#/definitions/io.k8s.api.core.v1.SELinuxOptions"­The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. +¥ + +privileged–"‡Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.² +boolean +Š + procMountü"îprocMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.² +string +q +readOnlyRootFilesystemW"IWhether this container has a read-only root filesystem. Default is false.² +boolean +½ + runAsNonRoot¬"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.² +boolean +Õ +allowPrivilegeEscalation¸"©AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN² +boolean +Æ + capabilitiesµ +-#/definitions/io.k8s.api.core.v1.Capabilities"ƒThe capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. +“ + +runAsGroup„int64"îThe GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.² +integer +° + runAsUser¢int64"ŒThe UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.² +integer +Æ +#io.k8s.api.core.v1.SecretProjectionž"Adapts a secret into a projected volume. + +The contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.² +objectÊÿ +¤ +itemsš"ÜIf unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.KeyToPath +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +O +optionalC"5Specify whether the Secret or its key must be defined² +boolean +ò + io.k8s.api.coordination.v1.LeaseÍ"Lease defines a lease concept.² +objectʽ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¤ +metadata— +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +¸ +spec¯ +2#/definitions/io.k8s.api.coordination.v1.LeaseSpec"ySpecification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusú^ +x-kubernetes-group-version-kind;9- group: coordination.k8s.io + kind: Lease + version: v1 + +° +"io.k8s.api.storage.v1beta1.CSINode‰ "ÎCSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.šspec² +objectÊ¿ +| +metadatap +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"/metadata.name must be the Kubernetes node name. +d +spec\ +4#/definitions/io.k8s.api.storage.v1beta1.CSINodeSpec"$spec is the specification of CSINode +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringú` +x-kubernetes-group-version-kind=;- group: storage.k8s.io + kind: CSINode + version: v1beta1 + +ç +3io.k8s.api.autoscaling.v2beta2.ResourceMetricSource¯"ÊResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. Only one "target" type should be set.šnameštarget² +objectÊà +B +name:"-name is the name of the resource in question.² +string +} +targets +9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric +– + +/io.k8s.api.extensions.v1beta1.NetworkPolicyPeerâ "jDEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.² +objectÊç +Ô + podSelectorÄ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿThis is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods. + +If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace. +° +ipBlock¤ +3#/definitions/io.k8s.api.extensions.v1beta1.IPBlock"mIPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be. +Ú +namespaceSelectorÄ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿSelects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces. + +If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector. +™ +io.k8s.api.core.v1.EventListø"EventList is a list of events.šitems² +objectÊí +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +P +itemsG"List of events² +arrayº* +( +&#/definitions/io.k8s.api.core.v1.Event ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string ½ metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúX -x-kubernetes-group-version-kind53- group: apps - kind: ReplicaSetList +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúQ +x-kubernetes-group-version-kind.,- group: "" + kind: EventList version: v1 -« - -!io.k8s.api.apps.v1.ReplicaSetSpec… -"4ReplicaSetSpec is the specification of a ReplicaSet.šselectorÊÀ -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -¡ -replicas”int32"þReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -ý -selectorð -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"«Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -“ -template† -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÑTemplate is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -¿ -#io.k8s.api.apps.v1.ReplicaSetStatus—"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicasÊÇ -… -availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² -integer -ø - -conditionsé"NRepresents the latest available observations of a replica set's current state.² -arrayº8 -6 -4#/definitions/io.k8s.api.apps.v1.ReplicaSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -‹ -fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² -integer - -observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² -integer -X - readyReplicasGint32"2The number of ready replicas for this replica set.² -integer -Ø -replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -Œ -)io.k8s.api.apps.v1.RollingUpdateDaemonSetÞ"BSpec to control the desired behavior of daemon set rolling update.Ê– -“ -maxUnavailable€ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. -¤ -*io.k8s.api.apps.v1.RollingUpdateDeploymentõ "7Spec to control the desired behavior of rolling update.ʸ -å -maxSurgeØ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"–The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods. -Í -maxUnavailableº -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. -± -3io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategyù"kRollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.ʈ -… - partitionxint32"cPartition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.² -integer -ñ - -io.k8s.api.apps.v1.StatefulSetÎ -"ŸStatefulSet represents a set of pods with consistent identities. Identities are defined as: - - Network: A single stable DNS and hostname. - - Storage: As many VolumeClaims as requested. -The StatefulSet guarantees that a given network identity will always map to the same storage identity.ÊÐ +È +(io.k8s.api.core.v1.ResourceFieldSelector›"ZResourceFieldSelector represents container resources (cpu, memory) and their output formatšresource² +objectÊ¥ +5 +resource)"Required: resource to select² +string +Y + containerNameH";Container name: required for volumes, optional for env vars² +string + +divisor„ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"ESpecifies the output format of the exposed resources, defaults to "1" +© ++io.k8s.api.scheduling.v1beta1.PriorityClassù"áDEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.švalue² +objectÊ’ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string +‹ + description|"odescription is an arbitrary string that usually provides guidelines on when this priority class should be used.² +string +¦ + globalDefault”"…globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.² +boolean ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -t -specl -0#/definitions/io.k8s.api.apps.v1.StatefulSetSpec"8Spec defines the desired identities of pods in this set. -¯ -status¤ -2#/definitions/io.k8s.api.apps.v1.StatefulSetStatus"nStatus is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.úU -x-kubernetes-group-version-kind20- group: apps - kind: StatefulSet - version: v1 +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +¨ +valuežint32"ˆThe value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.² +integerúi +x-kubernetes-group-version-kindFD- group: scheduling.k8s.io + kind: PriorityClass + version: v1beta1 -É -'io.k8s.api.apps.v1.StatefulSetCondition"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatusʺ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -3 -type+"Type of statefulset condition.² -string -¯ -"io.k8s.api.apps.v1.StatefulSetListˆ"0StatefulSetList is a collection of StatefulSets.šitemsÊî +— +Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceListÌ"/APIServiceList is a list of APIService objects.šitems² +objectÊ’ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -F -items=² -arrayº0 -. -,#/definitions/io.k8s.api.apps.v1.StatefulSet +j +itemsa² +arrayºT +R +P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string I metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúY -x-kubernetes-group-version-kind64- group: apps - kind: StatefulSetList - version: v1 +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúo +x-kubernetes-group-version-kindLJ- group: apiregistration.k8s.io + kind: APIServiceList + version: v1beta1 -È -"io.k8s.api.apps.v1.StatefulSetSpec¡"8A StatefulSetSpec is the specification of a StatefulSet.šselectorštemplateš serviceNameÊ¿ -¹ -podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² -string - -replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² -integer -­ -revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² -integer -¨ -selector› -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Öselector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -û - serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² -string -¬ -templateŸ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. -å -updateStrategyÒ -:#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. -þ -volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim - -$io.k8s.api.apps.v1.StatefulSetStatusä "@StatefulSetStatus represents the current state of a StatefulSet.šreplicasÊ“ -þ -collisionCountëint32"ÕcollisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -ù +Ç -conditionsê"NRepresents the latest available observations of a statefulset's current state.² -arrayº9 -7 -5#/definitions/io.k8s.api.apps.v1.StatefulSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -° -currentReplicasœint32"†currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.² -integer -¤ -currentRevision"‚currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).² -string -Ü -observedGenerationÅint64"¯observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.² -integer -Œ - readyReplicas{int32"freadyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.² -integer -f -replicasZint32"Ereplicas is the number of Pods created by the StatefulSet controller.² -integer -± -updateRevisionž"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)² -string -¯ -updatedReplicas›int32"…updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.² -integer -­ -,io.k8s.api.apps.v1.StatefulSetUpdateStrategyü"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.ʦ -¹ - rollingUpdate§ -A#/definitions/io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. -h -type`"SType indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.² -string -ç -*io.k8s.api.apps.v1beta1.ControllerRevision¸"ÅDEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.šrevisionÊý -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -y -dataq -:#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"3Data is the serialized representation of the state. +io.k8s.api.batch.v1.Job« +"1Job represents the configuration of a single job.² +objectʘ ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string À metadata³ =#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -b -revisionVint64"ARevision indicates the revision of the state represented by Data.² -integerúa -x-kubernetes-group-version-kind><- group: apps - kind: ControllerRevision - version: v1beta1 - -ü -.io.k8s.api.apps.v1beta1.ControllerRevisionListÉ"UControllerRevisionList is a resource containing a list of ControllerRevision objects.šitemsÊþ +Ä +spec» +)#/definitions/io.k8s.api.batch.v1.JobSpec"Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +° +status¥ ++#/definitions/io.k8s.api.batch.v1.JobStatus"vCurrent status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -| -itemss"(Items is the list of ControllerRevisions² -arrayº< -: -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¢ -metadata• -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúe -x-kubernetes-group-version-kindB@- group: apps - kind: ControllerRevisionList - version: v1beta1 +stringúN +x-kubernetes-group-version-kind+)- kind: Job + version: v1 + group: batch - - -"io.k8s.api.apps.v1beta1.DeploymentÚ "ÄDEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.ʳ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. -x -specp -4#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec"8Specification of the desired behavior of the Deployment. -t -statusj -6#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus"0Most recently observed status of the Deployment.úY -x-kubernetes-group-version-kind64- group: apps - kind: Deployment - version: v1beta1 - - -+io.k8s.api.apps.v1beta1.DeploymentCondition’"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatusʱ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -v -lastUpdateTimed -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -2 -type*"Type of deployment condition.² -string -ï -&io.k8s.api.apps.v1beta1.DeploymentListÄ"(DeploymentList is a list of Deployments.šitemsÊ® -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -m -itemsd"!Items is the list of Deployments.² -arrayº4 -2 -0#/definitions/io.k8s.api.apps.v1beta1.Deployment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -b -metadataV -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.ú] -x-kubernetes-group-version-kind:8- group: apps - kind: DeploymentList - version: v1beta1 - -û -*io.k8s.api.apps.v1beta1.DeploymentRollbackÌ"XDEPRECATED. DeploymentRollback stores the information required to rollback a deployment.šnameš -rollbackToÊö -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -H -name@"3Required: This must match the Name of a deployment.² -string -m - -rollbackTo_ -4#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"'The config of this deployment rollback. -` -updatedAnnotationsJ"-The annotations to be updated to a deploymentª - ² -string² -objectúa -x-kubernetes-group-version-kind><- group: apps - kind: DeploymentRollback - version: v1beta1 - -þ -&io.k8s.api.apps.v1beta1.DeploymentSpecÓ"NDeploymentSpec is the specification of the desired behavior of the Deployment.štemplateÊô -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -@ -paused6"(Indicates that the deployment is paused.² -boolean -  -progressDeadlineSeconds„int32"îThe maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.² -integer -’ -replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² -integer - -revisionHistoryLimit©int32"“The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.² -integer -© - -rollbackToš -4#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"bDEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done. -Ì -selector¿ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"{Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. -¾ -strategy± -8#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, -x-kubernetes-patch-strategy  retainKeys - -q -templatee -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. -‚ -(io.k8s.api.apps.v1beta1.DeploymentStatusÕ "HDeploymentStatus is the most recently observed status of the Deployment.ʇ -Š -availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² -integer -Þ -collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² -integer -ü - -conditionsí"MRepresents the latest available observations of a deployment's current state.² -arrayº= -; -9#/definitions/io.k8s.api.apps.v1beta1.DeploymentConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -` -observedGenerationJint64"5The generation observed by the deployment controller.² -integer -] - readyReplicasLint32"7Total number of ready pods targeted by this deployment.² -integer + +(io.k8s.api.apps.v1beta2.DeploymentStatusà "HDeploymentStatus is the most recently observed status of the Deployment.² +objectʇ ƒ replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² integer @@ -25522,471 +36468,6 @@ conditions Œ updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² integer -’ -*io.k8s.api.apps.v1beta1.DeploymentStrategyã"HDeploymentStrategy describes how to replace existing pods with new ones.Ê• -¨ - rollingUpdate– -=#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. -h -type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² -string -¥ -&io.k8s.api.apps.v1beta1.RollbackConfig{" DEPRECATED.Êk -i -revision]int64"HThe revision to rollback to. If set to 0, rollback to the last revision.² -integer -¨ -/io.k8s.api.apps.v1beta1.RollingUpdateDeploymentô "7Spec to control the desired behavior of rolling update.Ê· -ä -maxSurge× -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"•The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. -Í -maxUnavailableº -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. -  -8io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategyã"kRollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.Ês -q - partitiondint32"OPartition indicates the ordinal at which the StatefulSet should be partitioned.² -integer -Ù - -io.k8s.api.apps.v1beta1.Scale· -"2Scale represents a scaling request for a resource.ʨ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¿ -metadata² -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. -¾ -specµ -/#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. -Ç -status¼ -1#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.úT -x-kubernetes-group-version-kind1/- group: apps - kind: Scale - version: v1beta1 - -¹ -!io.k8s.api.apps.v1beta1.ScaleSpec“"9ScaleSpec describes the attributes of a scale subresourceÊU -S -replicasGint32"2desired number of instances for the scaled object.² -integer - -#io.k8s.api.apps.v1beta1.ScaleStatuså"AScaleStatus represents the current status of a scale subresource.šreplicasÊ“ -Z -replicasNint32"9actual number of observed instances of the scaled object.² -integer -­ -selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª - ² -string² -object -„ -targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² -string -‹ -#io.k8s.api.apps.v1beta1.StatefulSetã "¥DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as: - - Network: A single stable DNS and hostname. - - Storage: As many VolumeClaims as requested. -The StatefulSet guarantees that a given network identity will always map to the same storage identity.ÊÚ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -y -specq -5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec"8Spec defines the desired identities of pods in this set. -´ -status© -7#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus"nStatus is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.úZ -x-kubernetes-group-version-kind75- group: apps - kind: StatefulSet - version: v1beta1 - -Î -,io.k8s.api.apps.v1beta1.StatefulSetCondition"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatusʺ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -3 -type+"Type of statefulset condition.² -string -¾ -'io.k8s.api.apps.v1beta1.StatefulSetList’"0StatefulSetList is a collection of StatefulSets.šitemsÊó -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -K -itemsB² -arrayº5 -3 -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaú^ -x-kubernetes-group-version-kind;9- group: apps - kind: StatefulSetList - version: v1beta1 - -Ñ -'io.k8s.api.apps.v1beta1.StatefulSetSpec¥"8A StatefulSetSpec is the specification of a StatefulSet.štemplateš serviceNameÊÎ -¹ -podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² -string - -replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² -integer -­ -revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² -integer -² -selector¥ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"àselector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -û - serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² -string -¬ -templateŸ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. -ê -updateStrategy× -?#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. -þ -volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -— -)io.k8s.api.apps.v1beta1.StatefulSetStatusé "@StatefulSetStatus represents the current state of a StatefulSet.šreplicasʘ -þ -collisionCountëint32"ÕcollisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -þ - -conditionsï"NRepresents the latest available observations of a statefulset's current state.² -arrayº> -< -:#/definitions/io.k8s.api.apps.v1beta1.StatefulSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -° -currentReplicasœint32"†currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.² -integer -¤ -currentRevision"‚currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).² -string -Ü -observedGenerationÅint64"¯observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.² -integer -Œ - readyReplicas{int32"freadyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.² -integer -f -replicasZint32"Ereplicas is the number of Pods created by the StatefulSet controller.² -integer -± -updateRevisionž"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)² -string -¯ -updatedReplicas›int32"…updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.² -integer - -1io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategyç"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.Ê‘ -¾ - rollingUpdate¬ -F#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. -N -typeF"9Type indicates the type of the StatefulSetUpdateStrategy.² -string -â -*io.k8s.api.apps.v1beta2.ControllerRevision³"ÀDEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.šrevisionÊý -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -y -dataq -:#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"3Data is the serialized representation of the state. -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -b -revisionVint64"ARevision indicates the revision of the state represented by Data.² -integerúa -x-kubernetes-group-version-kind><- group: apps - kind: ControllerRevision - version: v1beta2 - -ü -.io.k8s.api.apps.v1beta2.ControllerRevisionListÉ"UControllerRevisionList is a resource containing a list of ControllerRevision objects.šitemsÊþ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -| -itemss"(Items is the list of ControllerRevisions² -arrayº< -: -8#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¢ -metadata• -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúe -x-kubernetes-group-version-kindB@- group: apps - kind: ControllerRevisionList - version: v1beta2 - -É -!io.k8s.api.apps.v1beta2.DaemonSet£ "´DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.Ê - -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Ç -spec¾ -3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetSpec"†The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -¢ -status— -5#/definitions/io.k8s.api.apps.v1beta2.DaemonSetStatus"ÝThe current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúX -x-kubernetes-group-version-kind53- group: apps - kind: DaemonSet - version: v1beta2 - -Æ -*io.k8s.api.apps.v1beta2.DaemonSetCondition—"IDaemonSetCondition describes the state of a DaemonSet at a certain point.štypešstatusʸ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -1 -type)"Type of DaemonSet condition.² -string -¿ -%io.k8s.api.apps.v1beta2.DaemonSetList•"-DaemonSetList is a collection of daemon sets.šitemsÊû -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -a -itemsX"A list of daemon sets.² -arrayº3 -1 -/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú\ -x-kubernetes-group-version-kind97- group: apps - kind: DaemonSetList - version: v1beta2 - -¶ -%io.k8s.api.apps.v1beta2.DaemonSetSpecŒ "3DaemonSetSpec is the specification of a daemon set.šselectorštemplateʽ - -’ -minReadySecondsþint32"èThe minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).² -integer -¿ -revisionHistoryLimit¦int32"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² -integer -Á -selector´ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ïA label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -„ -template÷ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÂAn object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -˜ -updateStrategy… -=#/definitions/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy"DAn update strategy to replace existing DaemonSet pods with new pods. -ò -'io.k8s.api.apps.v1beta2.DaemonSetStatusÆ">DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReadyÊ­ -ä -collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -ú - -conditionsë"LRepresents the latest available observations of a DaemonSet's current state.² -arrayº< -: -8#/definitions/io.k8s.api.apps.v1beta2.DaemonSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -ã -currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -ô -desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -Ê -numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -Ý -numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -˜ - numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² -integer -Å -numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -l -observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² -integer -l -updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² -integer - -/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategyé"XDaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.Ê‹ -— - rollingUpdate… -<#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". -o -typeg"ZType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.² -string -ü -"io.k8s.api.apps.v1beta2.DeploymentÕ "¿DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.ʳ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. -x -specp -4#/definitions/io.k8s.api.apps.v1beta2.DeploymentSpec"8Specification of the desired behavior of the Deployment. -t -statusj -6#/definitions/io.k8s.api.apps.v1beta2.DeploymentStatus"0Most recently observed status of the Deployment.úY -x-kubernetes-group-version-kind64- group: apps - kind: Deployment - version: v1beta2 - - -+io.k8s.api.apps.v1beta2.DeploymentCondition’"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatusʱ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -v -lastUpdateTimed -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -2 -type*"Type of deployment condition.² -string -ï -&io.k8s.api.apps.v1beta2.DeploymentListÄ"(DeploymentList is a list of Deployments.šitemsÊ® -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -m -itemsd"!Items is the list of Deployments.² -arrayº4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.Deployment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -b -metadataV -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.ú] -x-kubernetes-group-version-kind:8- group: apps - kind: DeploymentList - version: v1beta2 - -ˆ -&io.k8s.api.apps.v1beta2.DeploymentSpecÝ "NDeploymentSpec is the specification of the desired behavior of the Deployment.šselectorštemplateÊó -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -@ -paused6"(Indicates that the deployment is paused.² -boolean -  -progressDeadlineSeconds„int32"îThe maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.² -integer -’ -replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² -integer -à -revisionHistoryLimitªint32"”The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² -integer -ö -selectoré -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"¤Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels. -¾ -strategy± -8#/definitions/io.k8s.api.apps.v1beta2.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, -x-kubernetes-patch-strategy  retainKeys - -q -templatee -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. -‚ -(io.k8s.api.apps.v1beta2.DeploymentStatusÕ "HDeploymentStatus is the most recently observed status of the Deployment.ʇ Š availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² integer @@ -26009,422 +36490,9 @@ conditions ] readyReplicasLint32"7Total number of ready pods targeted by this deployment.² integer -ƒ -replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² -integer -Á -unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² -integer -Œ -updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² -integer -’ -*io.k8s.api.apps.v1beta2.DeploymentStrategyã"HDeploymentStrategy describes how to replace existing pods with new ones.Ê• -¨ - rollingUpdate– -=#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. -h -type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² -string -¡ -"io.k8s.api.apps.v1beta2.ReplicaSetú "ØDEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.Ê¿ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -· -metadataª -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"èIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -é -specà -4#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetSpec"§Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -» -status° -6#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetStatus"õStatus is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúY -x-kubernetes-group-version-kind64- group: apps - kind: ReplicaSet - version: v1beta2 - -Ð -+io.k8s.api.apps.v1beta2.ReplicaSetCondition "LReplicaSetCondition describes the state of a replica set at a certain point.štypešstatusʾ -• -lastTransitionTime -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -3 -type+"Type of replica set condition.² -string -¡ -&io.k8s.api.apps.v1beta2.ReplicaSetListö".ReplicaSetList is a collection of ReplicaSets.šitemsÊÚ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¼ -items²"oList of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² -arrayº4 -2 -0#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsú] -x-kubernetes-group-version-kind:8- group: apps - kind: ReplicaSetList - version: v1beta2 - -° - -&io.k8s.api.apps.v1beta2.ReplicaSetSpec… -"4ReplicaSetSpec is the specification of a ReplicaSet.šselectorÊÀ -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -¡ -replicas”int32"þReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -ý -selectorð -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"«Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -“ -template† -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÑTemplate is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -É -(io.k8s.api.apps.v1beta2.ReplicaSetStatusœ"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicasÊÌ -… -availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² -integer -ý - -conditionsî"NRepresents the latest available observations of a replica set's current state.² -arrayº= -; -9#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -‹ -fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² -integer - -observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² -integer -X - readyReplicasGint32"2The number of ready replicas for this replica set.² -integer -Ø -replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -‘ -.io.k8s.api.apps.v1beta2.RollingUpdateDaemonSetÞ"BSpec to control the desired behavior of daemon set rolling update.Ê– -“ -maxUnavailable€ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. -¨ -/io.k8s.api.apps.v1beta2.RollingUpdateDeploymentô "7Spec to control the desired behavior of rolling update.Ê· -ä -maxSurge× -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"•The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. -Í -maxUnavailableº -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"øThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. -¶ -8io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategyù"kRollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.ʈ -… - partitionxint32"cPartition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.² -integer -Ù - -io.k8s.api.apps.v1beta2.Scale· -"2Scale represents a scaling request for a resource.ʨ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¿ -metadata² -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. -¾ -specµ -/#/definitions/io.k8s.api.apps.v1beta2.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. -Ç -status¼ -1#/definitions/io.k8s.api.apps.v1beta2.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.úT -x-kubernetes-group-version-kind1/- group: apps - kind: Scale - version: v1beta2 - -¹ -!io.k8s.api.apps.v1beta2.ScaleSpec“"9ScaleSpec describes the attributes of a scale subresourceÊU -S -replicasGint32"2desired number of instances for the scaled object.² -integer - -#io.k8s.api.apps.v1beta2.ScaleStatuså"AScaleStatus represents the current status of a scale subresource.šreplicasÊ“ -Z -replicasNint32"9actual number of observed instances of the scaled object.² -integer -­ -selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª - ² -string² -object „ -targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² -string -† -#io.k8s.api.apps.v1beta2.StatefulSetÞ " DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as: - - Network: A single stable DNS and hostname. - - Storage: As many VolumeClaims as requested. -The StatefulSet guarantees that a given network identity will always map to the same storage identity.ÊÚ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -y -specq -5#/definitions/io.k8s.api.apps.v1beta2.StatefulSetSpec"8Spec defines the desired identities of pods in this set. -´ -status© -7#/definitions/io.k8s.api.apps.v1beta2.StatefulSetStatus"nStatus is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.úZ -x-kubernetes-group-version-kind75- group: apps - kind: StatefulSet - version: v1beta2 - -Î -,io.k8s.api.apps.v1beta2.StatefulSetCondition"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatusʺ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -3 -type+"Type of statefulset condition.² -string -¾ -'io.k8s.api.apps.v1beta2.StatefulSetList’"0StatefulSetList is a collection of StatefulSets.šitemsÊó -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -K -itemsB² -arrayº5 -3 -1#/definitions/io.k8s.api.apps.v1beta2.StatefulSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaú^ -x-kubernetes-group-version-kind;9- group: apps - kind: StatefulSetList - version: v1beta2 - -Ò -'io.k8s.api.apps.v1beta2.StatefulSetSpec¦"8A StatefulSetSpec is the specification of a StatefulSet.šselectorštemplateš serviceNameÊÄ -¹ -podManagementPolicy¡"“podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.² -string - -replicas‚int32"ìreplicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.² -integer -­ -revisionHistoryLimit”int32"þrevisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.² -integer -¨ -selector› -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Öselector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -û - serviceNameë"ÝserviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.² -string -¬ -templateŸ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"êtemplate is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. -ê -updateStrategy× -?#/definitions/io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy"“updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. -þ -volumeClaimTemplateså"›volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -— -)io.k8s.api.apps.v1beta2.StatefulSetStatusé "@StatefulSetStatus represents the current state of a StatefulSet.šreplicasʘ -þ -collisionCountëint32"ÕcollisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -þ - -conditionsï"NRepresents the latest available observations of a statefulset's current state.² -arrayº> -< -:#/definitions/io.k8s.api.apps.v1beta2.StatefulSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -° -currentReplicasœint32"†currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.² -integer -¤ -currentRevision"‚currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).² -string -Ü -observedGenerationÅint64"¯observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.² -integer -Œ - readyReplicas{int32"freadyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.² -integer -f -replicasZint32"Ereplicas is the number of Pods created by the StatefulSet controller.² -integer -± -updateRevisionž"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)² -string -¯ -updatedReplicas›int32"…updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.² -integer -· -1io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.Ê« -¾ - rollingUpdate¬ -F#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. -h -type`"SType indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.² -string -š - -(io.k8s.api.authentication.v1.TokenReviewí "§TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.šspecÊÏ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -~ -specv -:#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec"8Spec holds information about the request being evaluated -¤ -status™ -<#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus"YStatus is filled in by the server and indicates whether the request can be authenticated.úf -x-kubernetes-group-version-kindCA- group: authentication.k8s.io - kind: TokenReview - version: v1 - -« -,io.k8s.api.authentication.v1.TokenReviewSpecú"ETokenReviewSpec is a description of the token authentication request.ʯ -ó - audienceså"ÈAudiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.² -arrayº - ² -string -7 -token."!Token is the opaque bearer token.² -string -¾ -.io.k8s.api.authentication.v1.TokenReviewStatus‹"DTokenReviewStatus is the result of the token authentication request.ÊÁ -’ - audiences„"çAudiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is "true", the token is valid against the audience of the Kubernetes API server.² -arrayº - ² -string -g - authenticatedV"HAuthenticated indicates that the token was associated with a known user.² -boolean -H -error?"2Error indicates that the token couldn't be checked² -string -w -usero -3#/definitions/io.k8s.api.authentication.v1.UserInfo"8User is the UserInfo associated with the provided token. -Ü -%io.k8s.api.authentication.v1.UserInfo²"ZUserInfo holds the information about the user needed to implement the user.Info interface.ÊÒ -n -extrae"9Any additional information provided by the authenticator.ª -² -arrayº - ² -string² -object -Q -groupsG"+The names of groups this user is a part of.² -arrayº - ² -string -® -uid¦"˜A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.² -string -\ -usernameP"CThe name that uniquely identifies this user among all active users.² -string -é -4io.k8s.api.authorization.v1.LocalSubjectAccessReview° "çLocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.šspecÊÆ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -ñ -specè -A#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"¢Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted. -§ -statusœ -C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or notúr -x-kubernetes-group-version-kindOM- group: authorization.k8s.io - kind: LocalSubjectAccessReview - version: v1 - -¥ -1io.k8s.api.authorization.v1.NonResourceAttributesï"{NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interfaceÊo -8 -path0"#Path is the URL path of the request² -string -3 -verb+"Verb is the standard HTTP verb² -string -ù -+io.k8s.api.authorization.v1.NonResourceRuleÉ"LNonResourceRule holds information that describes a rule for the non-resourcešverbsÊï ++io.k8s.api.authorization.v1.NonResourceRuleÔ"LNonResourceRule holds information that describes a rule for the non-resourcešverbs² +objectÊï Ë nonResourceURLs·"šNonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. "*" means all.² arrayº @@ -26435,208 +36503,127 @@ C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is arrayº ² string - -.io.k8s.api.authorization.v1.ResourceAttributesÚ"tResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interfaceÊà -M -groupD"7Group is the API Group of the Resource. "*" means all.² -string -‚ -namez"mName is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.² -string -ô - namespaceæ"ØNamespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview² -string -X -resourceL"?Resource is one of the existing resource types. "*" means all.² -string -^ - subresourceO"BSubresource is one of the existing resource types. "" means none.² -string -ƒ -verb{"nVerb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all.² -string -S -versionH";Version is the API Version of the Resource. "*" means all.² -string -± -(io.k8s.api.authorization.v1.ResourceRule„"¬ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.šverbsÊÉ -ƒ - apiGroupsõ"ØAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "*" means all.² -arrayº - ² -string -¹ - resourceNames§"ŠResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all.² -arrayº - ² -string -ä - resourcesÖ"¹Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. - "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups.² -arrayº - ² -string - -verbs“"wVerb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. "*" means all.² -arrayº - ² -string -¯ -3io.k8s.api.authorization.v1.SelfSubjectAccessReview÷ -"öSelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means "in all namespaces". Self is a special case, because users should always be able to check whether they can perform an actionšspecÊÿ -­ +ã +(io.k8s.api.core.v1.ConfigMapVolumeSource¶ "ÅAdapts a ConfigMap into a volume. -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.² +objectÊß +Ò + defaultModeÂint32"¬Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² +integer +ª +items "âIf unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.² +arrayº. +, +*#/definitions/io.k8s.api.core.v1.KeyToPath +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -ª -spec¡ -E#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec"XSpec holds information about the request being evaluated. user and groups must be empty -§ -statusœ -C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or notúq -x-kubernetes-group-version-kindNL- group: authorization.k8s.io - kind: SelfSubjectAccessReview - version: v1 - -à -7io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec‡"¦SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be setÊÚ -ª -nonResourceAttributes -?#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"MNonResourceAttributes describes information for a non-resource access request -ª -resourceAttributes“ -<#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"SResourceAuthorizationAttributes describes information for a resource access request -Ÿ -2io.k8s.api.authorization.v1.SelfSubjectRulesReviewè "ˆSelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.šspecÊß -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -Š -spec -D#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec"9Spec holds information about the request being evaluated. -§ -statusœ -B#/definitions/io.k8s.api.authorization.v1.SubjectRulesReviewStatus"VStatus is filled in by the server and indicates the set of actions a user can perform.úp -x-kubernetes-group-version-kindMK- group: authorization.k8s.io - kind: SelfSubjectRulesReview - version: v1 - -ƒ -6io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpecIÊF -D - namespace7"*Namespace to evaluate rules for. Required.² -string -Û -/io.k8s.api.authorization.v1.SubjectAccessReview§ "PSubjectAccessReview checks whether or not a user or group can perform an action.šspecÊÚ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -… -spec} -A#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"8Spec holds information about the request being evaluated -§ -statusœ -C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or notúm -x-kubernetes-group-version-kindJH- group: authorization.k8s.io - kind: SubjectAccessReview - version: v1 - - -3io.k8s.api.authorization.v1.SubjectAccessReviewSpecŠ"¢SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be setÊá -Æ -extra¼"Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.ª -² -arrayº - ² -string² -object -N -groupsD"(Groups is the groups you're testing for.² -arrayº - ² -string -ª -nonResourceAttributes -?#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"MNonResourceAttributes describes information for a non-resource access request -ª -resourceAttributes“ -<#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"SResourceAuthorizationAttributes describes information for a resource access request -> -uid7"*UID information about the requesting user.² -string -« -user¢"”User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups² -string - -5io.k8s.api.authorization.v1.SubjectAccessReviewStatusÓ"SubjectAccessReviewStatusšallowedʪ -c -allowedX"JAllowed is required. True if the action would be allowed, false otherwise.² +T +optionalH":Specify whether the ConfigMap or it's keys must be defined² boolean -‚ -denied÷"èDenied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.² -boolean -Þ -evaluationErrorÊ"¼EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.² + +(io.k8s.api.core.v1.ContainerStateWaitingã"8ContainerStateWaiting is a waiting state of a container.² +objectÊš +O +messageD"7Message regarding why the container is not yet running.² +string +G +reason="0(brief) reason the container is not yet running.² +string +Ê + io.k8s.api.core.v1.NamespaceSpec¥"6NamespaceSpec describes the attributes on a Namespace.² +objectÊÞ +Û + +finalizersÌ"¯Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/² +arrayº + ² +string +Ï +io.k8s.api.core.v1.PodTemplate¬ "IPodTemplate describes a template for creating copies of a predefined pod.² +objectÊü +À +metadata³ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Û +templateÎ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"™Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúS +x-kubernetes-group-version-kind0.- group: "" + kind: PodTemplate + version: v1 + +¾ +"io.k8s.api.core.v1.PodTemplateList—"*PodTemplateList is a list of PodTemplates.šitems² +objectÊú +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string ] -reasonS"FReason is optional. It indicates why a request was allowed or denied.² -string -ë -4io.k8s.api.authorization.v1.SubjectRulesReviewStatus² "çSubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.š resourceRulesšnonResourceRulesš -incompleteÊ” -Œ -evaluationErrorø"êEvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.² -string -Ý +itemsT"List of pod templates² +arrayº0 +. +,#/definitions/io.k8s.api.core.v1.PodTemplate +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúW +x-kubernetes-group-version-kind42- group: "" + kind: PodTemplateList + version: v1 -incompleteÎ"¿Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.² -boolean -– -nonResourceRules"´NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.² -arrayº= -; -9#/definitions/io.k8s.api.authorization.v1.NonResourceRule -‰ - resourceRules÷"­ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.² -arrayº: -8 -6#/definitions/io.k8s.api.authorization.v1.ResourceRule -Þ -5io.k8s.api.autoscaling.v1.CrossVersionObjectReference¤"bCrossVersionObjectReference contains enough information to let you identify the referred resource.škindšnameÊ® -6 + +!io.k8s.api.apps.v1.ReplicaSetList÷".ReplicaSetList is a collection of ReplicaSets.šitems² +objectÊÕ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ -apiVersion("API version of the referent² +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -… -kind}"pKind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"² -string -l -named"WName of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names² -string -¸ +· +items­"oList of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² +arrayº/ +- ++#/definitions/io.k8s.api.apps.v1.ReplicaSetúX +x-kubernetes-group-version-kind53- group: apps + kind: ReplicaSetList + version: v1 + +ç + +Vio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversionŒ +"MCustomResourceConversion describes how to convert different versions of a CR.šstrategy² +objectÊ£ +Ž +conversionReviewVersionsñ"ÔConversionReviewVersions is an ordered list of preferred `ConversionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, conversion will fail for this object. If a persisted Webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail. Default to `['v1beta1']`.² +arrayº + ² +string +¿ +strategy²"¤`strategy` specifies the conversion strategy. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the CR. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information is needed for this option.² +string +Í +webhookClientConfigµ +_#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig"Ñ`webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. +ˆ +!io.k8s.api.apps.v1beta2.DaemonSetâ "´DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.² +objectÊÁ -1io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler‚ -"-configuration of a horizontal pod autoscaler.Êä ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -26644,603 +36631,151 @@ apiVersion ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -¾ -metadata± -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Ç -spec¾ -C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec"wbehaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. -| -statusr -E#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus")current information about the autoscaler.úh -x-kubernetes-group-version-kindEC- group: autoscaling - kind: HorizontalPodAutoscaler - version: v1 +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +Ø +specÏ +3#/definitions/io.k8s.api.apps.v1beta2.DaemonSetSpec"—The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +³ +status¨ +5#/definitions/io.k8s.api.apps.v1beta2.DaemonSetStatus"îThe current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-statusúX +x-kubernetes-group-version-kind53- group: apps + kind: DaemonSet + version: v1beta2 -¨ -5io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerListî"*list of horizontal pod autoscaler objects.šitemsÊÇ +ì +(io.k8s.api.node.v1beta1.RuntimeClassList¿"3RuntimeClassList is a list of RuntimeClass objects.šitems² +objectÊŠ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -… -items|"*list of horizontal pod autoscaler objects.² +p +itemsg""Items is a list of schema objects.² +arrayº6 +4 +2#/definitions/io.k8s.api.node.v1beta1.RuntimeClass +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +º +metadata­ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúf +x-kubernetes-group-version-kindCA- group: node.k8s.io + kind: RuntimeClassList + version: v1beta1 + +× +Bio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON"JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil. +¸ +,io.k8s.api.apps.v1.StatefulSetUpdateStrategy‡"ÏStatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.² +objectʦ +¹ + rollingUpdate§ +A#/definitions/io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy"bRollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. +h +type`"SType indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.² +string +™ +.io.k8s.api.extensions.v1beta1.DeploymentStatusæ "HDeploymentStatus is the most recently observed status of the Deployment.² +objectÊ +ƒ +replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² +integer +Á +unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² +integer +Œ +updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² +integer +Š +availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² +integer +Þ +collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² +integer +‚ + +conditionsó"MRepresents the latest available observations of a deployment's current state.² arrayºC A -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -b -metadataV -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.úl -x-kubernetes-group-version-kindIG- group: autoscaling - kind: HorizontalPodAutoscalerList - version: v1 +?#/definitions/io.k8s.api.extensions.v1beta1.DeploymentConditionú' +x-kubernetes-patch-strategymerge +ú' +x-kubernetes-patch-merge-keytype -õ -5io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec»"-specification of a horizontal pod autoscaler.šscaleTargetRefš maxReplicasÊé +` +observedGenerationJint64"5The generation observed by the deployment controller.² +integer +] + readyReplicasLint32"7Total number of ready pods targeted by this deployment.² +integer +ˆ +/io.k8s.api.extensions.v1beta1.NetworkPolicyPortÔ"jDEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.² +objectÊÙ +Æ +port½ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"ûIf specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.  - maxReplicas~int32"iupper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.² -integer -t - minReplicaseint32"Plower limit for the number of pods that can be set by the autoscaler, default 1.² -integer -† -scaleTargetRefó -C#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference"«reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource. -× -targetCPUUtilizationPercentage´int32"žtarget average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.² -integer - -7io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatusÅ"-current status of a horizontal pod autoscaleršcurrentReplicasšdesiredReplicasÊî -ß -currentCPUUtilizationPercentage»int32"¥current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.² -integer -f -currentReplicasSint32">current number of replicas of pods managed by this autoscaler.² -integer -f -desiredReplicasSint32">desired number of replicas of pods managed by this autoscaler.² -integer -Ù - lastScaleTimeÇ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‹last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed. +protocol€"sOptional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.² +string + +Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceConditionÒ"NAPIServiceCondition describes the state of an APIService at a particular pointštypešstatus² +objectÊã +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +X +messageM"@Human-readable message indicating details about last transition.² +string ^ -observedGenerationHint64"3most recent generation observed by this autoscaler.² -integer -á - -io.k8s.api.autoscaling.v1.Scale½ -"2Scale represents a scaling request for a resource.ʬ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¿ -metadata² -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. -À -spec· -1#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. -É -status¾ -3#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.úV -x-kubernetes-group-version-kind31- group: autoscaling - kind: Scale - version: v1 - -¼ -#io.k8s.api.autoscaling.v1.ScaleSpec”":ScaleSpec describes the attributes of a scale subresource.ÊU -S -replicasGint32"2desired number of instances for the scaled object.² -integer -® -%io.k8s.api.autoscaling.v1.ScaleStatus„"AScaleStatus represents the current status of a scale subresource.šreplicasʲ Z -replicasNint32"9actual number of observed instances of the scaled object.² -integer -Ó -selectorÆ"¸label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors² +statusP"CStatus is the status of the condition. Can be True, False, Unknown.² string -ã -:io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference¤"bCrossVersionObjectReference contains enough information to let you identify the referred resource.škindšnameÊ® -6 +7 +type/""Type is the type of the condition.² +string +Ó +1io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"%Represents a vSphere volume resource.š +volumePath² +objectÊÚ +C -apiVersion("API version of the referent² +volumePath5"(Path that identifies vSphere volume vmdk² string -… -kind}"pKind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"² +À +fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² string -l -named"WName of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names² -string -¦ -3io.k8s.api.autoscaling.v2beta2.ExternalMetricSourceî"ÐExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).šmetricštargetÊ… -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -} -targets -9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric -Ì -3io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus”"nExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.šmetricšcurrentÊ -„ -currenty ->#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -¶ -6io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerû "ÎHorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.ʶ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -Ï -metadata -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"€metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ó -specê -H#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - -status… -J#/definitions/io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus"7status is the current information about the autoscaler.úm -x-kubernetes-group-version-kindJH- group: autoscaling - kind: HorizontalPodAutoscaler - version: v2beta2 - -¸ -?io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerConditionô"eHorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.štypešstatusÊù -« -lastTransitionTime” -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"YlastTransitionTime is the last time the condition transitioned from one status to another -g -message\"Omessage is a human-readable explanation containing details about the transition² -string -P -reasonF"9reason is the reason for the condition's last transition.² -string -S -statusI"MetricStatus describes the last-read state of a single metric.štypeÊ“ -ô -externalç -A#/definitions/io.k8s.api.autoscaling.v2beta2.ExternalMetricStatus"¡external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). - -object· -?#/definitions/io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus"tobject refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). -• -podsŒ -=#/definitions/io.k8s.api.autoscaling.v2beta2.PodsMetricStatus"Êpods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. -™ -resourceŒ -A#/definitions/io.k8s.api.autoscaling.v2beta2.ResourceMetricStatus"Æresource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. -  -type—"‰type is the type of metric source. It will be one of "Object", "Pods" or "Resource", each corresponds to a matching field in the object.² -string -Û -+io.k8s.api.autoscaling.v2beta2.MetricTarget«"aMetricTarget defines the target value, average value, or average utilization of a specific metricštypeʽ -™ -averageUtilization‚int32"ìaverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type² +Ø +3io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus  "ÝResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.šnamešcurrentAverageValue² +objectÊ” +× +currentAverageUtilization¹int32"£currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.² integer -¶ - averageValue¥ -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"faverageValue is the target value of the average of the metric across all relevant pods (as a quantity) -c -type["Ntype represents whether the metric type is Utilization, Value, or AverageValue² -string -€ -valuew -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"8value is the target value of the metric (as a quantity). -ž -0io.k8s.api.autoscaling.v2beta2.MetricValueStatusé"6MetricValueStatus holds the current value for a metricÊ­ -ì -averageUtilizationÕint32"¿currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.² -integer -· - averageValue¦ -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"gaverageValue is the current value of the average of the metric across all relevant pods (as a quantity) - -valuex -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"9value is the current value of the metric (as a quantity). -Î -1io.k8s.api.autoscaling.v2beta2.ObjectMetricSource˜"‰ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).šdescribedObjectštargetšmetricÊä -] -describedObjectJ -H#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -} -targets -9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric -Ü -1io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus¦"ŽObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).šmetricšcurrentšdescribedObjectÊì -„ -currenty ->#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric -] -describedObjectJ -H#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -· -/io.k8s.api.autoscaling.v2beta2.PodsMetricSourceƒ"åPodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.šmetricštargetÊ… -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -} -targets -9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric -õ -/io.k8s.api.autoscaling.v2beta2.PodsMetricStatusÁ"šPodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).šmetricšcurrentÊ -„ -currenty ->#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric -ƒ -metricy -=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector -Ü -3io.k8s.api.autoscaling.v2beta2.ResourceMetricSource¤"ÊResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. Only one "target" type should be set.šnameštargetÊà +ó +currentAverageValueÛ +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"›currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. It will always be set, regardless of the corresponding metric specification. B name:"-name is the name of the resource in question.² string -} -targets -9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric -ø -3io.k8s.api.autoscaling.v2beta2.ResourceMetricStatusÀ"ÝResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.šnamešcurrentÊË -„ -currenty ->#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric -B -name:"-Name is the name of the resource in question.² -string -¼ - -io.k8s.api.batch.v1.Job  -"1Job represents the configuration of a single job.ʘ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Ä -spec» -)#/definitions/io.k8s.api.batch.v1.JobSpec"Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -° -status¥ -+#/definitions/io.k8s.api.batch.v1.JobStatus"vCurrent status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúN -x-kubernetes-group-version-kind+)- group: batch - kind: Job - version: v1 - -Ÿ - io.k8s.api.batch.v1.JobConditionú".JobCondition describes current state of a job.štypešstatusʶ -p - lastProbeTime_ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"$Last time the condition was checked. -Œ -lastTransitionTimev -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time";Last time the condition transit from one status to another. -X -messageM"@Human readable message indicating details about last transition.² -string -J -reason@"3(brief) reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -? -type7"*Type of job condition, Complete or Failed.² -string -˜ -io.k8s.api.batch.v1.JobListø" JobList is a collection of jobs.šitemsÊõ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -[ -itemsR"items is the list of Jobs.² -arrayº) -' -%#/definitions/io.k8s.api.batch.v1.Job -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúR -x-kubernetes-group-version-kind/-- group: batch - kind: JobList - version: v1 - -Ù -io.k8s.api.batch.v1.JobSpec¹"7JobSpec describes how the job execution will look like.štemplateÊñ -Î -activeDeadlineSeconds´int64"žSpecifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer² -integer -r - backoffLimitbint32"MSpecifies the number of retries before marking this job failed. Defaults to 6² -integer -Ð - completionsÀint32"ªSpecifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² -integer -¹ -manualSelector¦"—manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector² -boolean -¦ - parallelism–int32"€Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² -integer - -selector -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ËA label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -Û -templateÎ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"™Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ -ó -ttlSecondsAfterFinished×int32"ÁttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.² -integer -› -io.k8s.api.batch.v1.JobStatusù"0JobStatus represents the current state of a Job.Êà -C -active9int32"$The number of actively running pods.² -integer -þ -completionTimeë -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"¯Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. -Á - -conditions²"œThe latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/² -arrayº2 -0 -.#/definitions/io.k8s.api.batch.v1.JobConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -M -failedCint32".The number of pods which reached phase Failed.² -integer -’ - startTime„ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"ÈRepresents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. -S - succeededFint32"1The number of pods which reached phase Succeeded.² -integer -‹ - io.k8s.api.batch.v1beta1.CronJobæ -":CronJob represents the configuration of a single cron job.ÊÌ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ê -specá -2#/definitions/io.k8s.api.batch.v1beta1.CronJobSpec"ªSpecification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -¾ -status³ -4#/definitions/io.k8s.api.batch.v1beta1.CronJobStatus"{Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúW -x-kubernetes-group-version-kind42- group: batch - kind: CronJob - version: v1beta1 - -À -$io.k8s.api.batch.v1beta1.CronJobList—")CronJobList is a collection of cron jobs.šitemsÊ‚ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -h -items_"items is the list of CronJobs.² -arrayº2 -0 -.#/definitions/io.k8s.api.batch.v1beta1.CronJob -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú[ -x-kubernetes-group-version-kind86- group: batch - kind: CronJobList - version: v1beta1 - -Ä -$io.k8s.api.batch.v1beta1.CronJobSpec› "YCronJobSpec describes how the job execution will look like and when it will actually run.šscheduleš jobTemplateÊ£ - -Ì -concurrencyPolicy¶"¨Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace": cancels currently running job and replaces it with a new one² -string -· -failedJobsHistoryLimitœint32"†The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² -integer -‰ - jobTemplatez -6#/definitions/io.k8s.api.batch.v1beta1.JobTemplateSpec"@Specifies the job that will be created when executing a CronJob. -] -scheduleQ"DThe schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.² -string -Ç -startingDeadlineSeconds«int64"•Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.² -integer -¿ -successfulJobsHistoryLimit int32"ŠThe number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.² -integer -  -suspend”"…This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.² -boolean -ÿ -&io.k8s.api.batch.v1beta1.CronJobStatusÔ"9CronJobStatus represents the current state of a cron job.Ê• -z -activep"-A list of pointers to currently running jobs.² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.ObjectReference -– -lastScheduleTime -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"FInformation when was the last time the job was successfully scheduled. -¸ -(io.k8s.api.batch.v1beta1.JobTemplateSpec‹"QJobTemplateSpec describes the data a Job should have when created from a templateÊ´ -è -metadataÛ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"™Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Æ -spec½ -)#/definitions/io.k8s.api.batch.v1.JobSpec"Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -ª -9io.k8s.api.certificates.v1beta1.CertificateSigningRequestì"'Describes a certificate signing requestÊÅ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -– -spec -K#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec">The certificate request itself and any additional information. - -statusw -M#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus"&Derived information about the request.úw -x-kubernetes-group-version-kindTR- group: certificates.k8s.io - kind: CertificateSigningRequest - version: v1beta1 - -¬ -Bio.k8s.api.certificates.v1beta1.CertificateSigningRequestConditionåštypeÊÚ -| -lastUpdateTimej -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"/timestamp for the last update to this condition -S -messageH";human readable message with details about the request state² -string -9 -reason/""brief reason for the request state² -string -J -typeB"5request approval state, currently Approved or Denied.² -string -Õ -=io.k8s.api.certificates.v1beta1.CertificateSigningRequestList“šitemsʉ +à +=io.k8s.api.certificates.v1beta1.CertificateSigningRequestListžšitems² +objectʉ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -27260,37 +36795,181 @@ I kind: CertificateSigningRequestList version: v1beta1 -… -=io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpecÃ"¾This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.šrequestÊô -† -extra}"QExtra information about the requesting user. See user.Info interface for details.ª -² +ì +&io.k8s.api.core.v1.FlockerVolumeSourceÁ"ÃRepresents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.² +objectÊì +ˆ + datasetNamey"lName of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated² +string +_ + datasetUUIDP"CUUID of the dataset. This is unique identifier of a Flocker dataset² +string +€ +Eio.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration¶ +"‚MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.² +objectÊ› +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¿ +metadata² +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. +û +webhooksî"IWebhooks is a list of webhooks and the affected resources and operations.² +arrayºB +@ +>#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhookú' +x-kubernetes-patch-merge-keyname +ú' +x-kubernetes-patch-strategymerge + +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúƒ +x-kubernetes-group-version-kind`^- version: v1beta1 + group: admissionregistration.k8s.io + kind: MutatingWebhookConfiguration + +Ù +,io.k8s.api.apps.v1beta2.StatefulSetCondition¨"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatus² +objectʺ +Y +messageN"AA human readable message indicating details about the transition.² +string +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +3 +type+"Type of statefulset condition.² +string +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +ö +4io.k8s.api.authorization.v1.SubjectRulesReviewStatus½ "çSubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.š resourceRulesšnonResourceRulesš +incomplete² +objectÊ” +Œ +evaluationErrorø"êEvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.² +string +Ý + +incompleteÎ"¿Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.² +boolean +– +nonResourceRules"´NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.² +arrayº= +; +9#/definitions/io.k8s.api.authorization.v1.NonResourceRule +‰ + resourceRules÷"­ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.² +arrayº: +8 +6#/definitions/io.k8s.api.authorization.v1.ResourceRule +ä + io.k8s.api.core.v1.HTTPGetAction¿"=HTTPGetAction describes an action based on HTTP Get requests.šport² +objectÊê +} +hostu"hHost name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.² +string +‘ + httpHeaders"CCustom headers to set in the request. HTTP allows repeated headers.² +arrayº/ +- ++#/definitions/io.k8s.api.core.v1.HTTPHeader +7 +path/""Path to access on the HTTP server.² +string +Ç +port¾ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. +R +schemeH";Scheme to use for connecting to the host. Defaults to HTTP.² +string + +$io.k8s.api.core.v1.SecretKeySelectorô",SecretKeySelector selects a key of a Secret.škey² +objectʱ +P +optionalD"6Specify whether the Secret or it's key must be defined² +boolean +V +keyO"BThe key of the secret to select from. Must be a valid secret key.² +string +„ +name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +string +¥ +'io.k8s.api.extensions.v1beta1.DaemonSetù "¹DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.² +objectÊÍ + +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +Ò +metadataÅ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"ƒStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata +Þ +specÕ +9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec"—The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +¹ +status® +;#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus"îThe current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringú^ +x-kubernetes-group-version-kind;9- version: v1beta1 + group: extensions + kind: DaemonSet + +Ÿ +=io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirementÝ"xA label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.škeyšoperator² +objectÊà +š +key’"2key is the label key that the selector applies to.² +stringú& +x-kubernetes-patch-merge-keykey +ú' +x-kubernetes-patch-strategymerge + +Ž +operator"toperator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.² +string +’ +values‡"êvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.² arrayº ² +string +Ž +Cio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReferenceÆ";ServiceReference holds a reference to Service.legacy.k8s.io² +objectÊ{ +4 +name,"Name is the name of the service² +string +C + namespace6")Namespace is the namespace of the service² +string +˜ +#io.k8s.api.apps.v1beta2.ScaleStatusð"AScaleStatus represents the current status of a scale subresource.šreplicas² +objectÊ“ +Z +replicasNint32"9actual number of observed instances of the scaled object.² +integer +­ +selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª + ² string² object -w -groupsm"QGroup information about the requesting user. See user.Info interface for details.² -arrayº - ² +„ +targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² string -= -request2byte"Base64-encoded PKCS#10 CSR data² -string -c -uid\"OUID information about the requesting user. See user.Info interface for details.² -string -å -usagesÚ"½allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 - https://tools.ietf.org/html/rfc5280#section-4.2.1.12² -arrayº - ² -string -d -usernameX"KInformation about the requesting user. See user.Info interface for details.² -string -î -?io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatusªÊ¦ +ù +?io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatusµ² +objectʦ q certificatebbyte"OIf request was approved, the controller will place the issued certificate here.² string @@ -27300,98 +36979,52 @@ conditions arrayºT R P#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition -û - -3io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSourceà -"¡Represents a Persistent Disk resource in AWS. - -An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.švolumeIDÊ -Ä -fsType¹"«Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² +ì +io.k8s.api.core.v1.KeyToPathË",Maps a string key to a path within a volume.škeyšpath² +objectÊ +' +key "The key to project.² string -¨ - partitionšint32"„The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).² +£ +modešint32"„Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² integer -ä -readOnly×"ÈSpecify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² -boolean -´ -volumeID§"™Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore² +¯ +path¦"˜The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.² +string +· +,io.k8s.api.extensions.v1beta1.RollbackConfig†" DEPRECATED.² +objectÊk +i +revision]int64"HThe revision to rollback to. If set to 0, rollback to the last revision.² +integer +ƒ +*io.k8s.api.storage.v1.VolumeAttachmentListÔ"AVolumeAttachmentList is a collection of VolumeAttachment objects.šitems² +objectÊ +¹ +metadata¬ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -Î -io.k8s.api.core.v1.Affinity®"1Affinity is a group of affinity scheduling rules.Ê÷ v - nodeAffinityf --#/definitions/io.k8s.api.core.v1.NodeAffinity"5Describes node affinity scheduling rules for the pod. -´ - podAffinity¤ -,#/definitions/io.k8s.api.core.v1.PodAffinity"tDescribes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). -Å -podAntiAffinity± -0#/definitions/io.k8s.api.core.v1.PodAntiAffinity"}Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - -!io.k8s.api.core.v1.AttachedVolumeç"4AttachedVolume describes a volume attached to a nodešnameš -devicePathÊ™ -e +itemsm"&Items is the list of VolumeAttachments² +arrayº8 +6 +4#/definitions/io.k8s.api.storage.v1.VolumeAttachment +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringúh +x-kubernetes-group-version-kindEC- version: v1 + group: storage.k8s.io + kind: VolumeAttachmentList -devicePathW"JDevicePath represents the device path where the volume should be available² -string -0 -name("Name of the attached volume² -string -” -(io.k8s.api.core.v1.AzureDiskVolumeSourceç"TAzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.šdiskNamešdiskURIÊø -K - cachingMode<"/Host Caching mode: None, Read Only, Read Write.² -string -F -diskName:"-The Name of the data disk in the blob storage² -string -A -diskURI6")The URI the data disk in the blob storage² -string -À -fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² -string -à -kind×"ÉExpected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared² -string -x -readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² -boolean -» -2io.k8s.api.core.v1.AzureFilePersistentVolumeSource„"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod.š -secretNameš shareNameÊŽ -x -readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² -boolean -^ - -secretNameP"Cthe name of secret that contains Azure Storage Account Name and Key² -string -‹ -secretNamespacex"kthe namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod² -string -$ - shareName" -Share Name² -string -£ -(io.k8s.api.core.v1.AzureFileVolumeSourceö"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod.š -secretNameš shareNameÊ€ -x -readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² -boolean -^ - -secretNameP"Cthe name of secret that contains Azure Storage Account Name and Key² -string -$ - shareName" -Share Name² -string -¿ -io.k8s.api.core.v1.Binding  "¡Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.štargetÊ +– +#io.k8s.api.apps.v1beta1.StatefulSetî "¥DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as: + - Network: A single stable DNS and hostname. + - Storage: As many VolumeClaims as requested. +The StatefulSet guarantees that a given network identity will always map to the same storage identity.² +objectÊÚ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -27399,24 +37032,117 @@ apiVersion ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -} -targets -0#/definitions/io.k8s.api.core.v1.ObjectReference"?The target object that you want to bind to the standard object.úO -x-kubernetes-group-version-kind,*- group: "" - kind: Binding +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +y +specq +5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec"8Spec defines the desired identities of pods in this set. +´ +status© +7#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus"nStatus is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.úZ +x-kubernetes-group-version-kind75- group: apps + kind: StatefulSet + version: v1beta1 + +ç +1io.k8s.api.autoscaling.v2beta2.ObjectMetricStatus±"ŽObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).šmetricšcurrentšdescribedObject² +objectÊì +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector +„ +currenty +>#/definitions/io.k8s.api.autoscaling.v2beta2.MetricValueStatus"7current contains the current value for the given metric +] +describedObjectJ +H#/definitions/io.k8s.api.autoscaling.v2beta2.CrossVersionObjectReference +ç +.io.k8s.api.core.v1.ISCSIPersistentVolumeSource´ "®ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.š targetPortalšiqnšlun² +objectÊÙ +R +chapAuthSession?"1whether support iSCSI Session CHAP authentication² +boolean +Ô + initiatorNameÂ"´Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.² +string +0 +iqn)"Target iSCSI Qualified Name.² +string +n +iscsiInterface\"OiSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).² +string +4 +lun-int32"iSCSI Target Lun number.² +integer +V +chapAuthDiscoveryA"3whether support iSCSI Discovery CHAP authentication² +boolean +µ +fsTypeª"œFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi² +string +³ +portals§"ŠiSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² +arrayº + ² +string +k +readOnly_"QReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.² +boolean +z + secretRefm +0#/definitions/io.k8s.api.core.v1.SecretReference"9CHAP Secret for iSCSI target and initiator authentication +¤ + targetPortal“"…iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² +string +Œ +"io.k8s.api.rbac.v1.RoleBindingListå"/RoleBindingList is a collection of RoleBindingsšitems² +objectʬ +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +g +items^"Items is a list of RoleBindings² +arrayº0 +. +,#/definitions/io.k8s.api.rbac.v1.RoleBinding +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +stringún +x-kubernetes-group-version-kindKI- group: rbac.authorization.k8s.io + kind: RoleBindingList version: v1 -ÿ -,io.k8s.api.core.v1.CSIPersistentVolumeSourceÎ"RRepresents storage that is managed by an external CSI volume driver (Beta feature)šdriverš volumeHandleÊÞ -­ -controllerPublishSecretRefŽ -0#/definitions/io.k8s.api.core.v1.SecretReference"ÙControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed. -Y -driverO"BDriver is the name of the driver to use for this volume. Required.² +æ +/io.k8s.api.authorization.v1.SubjectAccessReview² "PSubjectAccessReview checks whether or not a user or group can perform an action.šspec² +objectÊÚ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta +… +spec} +A#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"8Spec holds information about the request being evaluated +§ +statusœ +C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UStatus is filled in by the server and indicates whether the request is allowed or not +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +stringúm +x-kubernetes-group-version-kindJH- version: v1 + group: authorization.k8s.io + kind: SubjectAccessReview + +Š +,io.k8s.api.core.v1.CSIPersistentVolumeSourceÙ"RRepresents storage that is managed by an external CSI volume driver (Beta feature)šdriverš volumeHandle² +objectÊÞ Ž fsTypeƒ"vFilesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs".² string @@ -27437,103 +37163,489 @@ U ² volumeHandle¡"“VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.² string -Ö -io.k8s.api.core.v1.Capabilities²"HTTPHeader describes a custom header to be used in HTTP probesšnamešvalue² +objectÊZ +* +name""The header field name² string -À +, +value#"The header field value² +string +ø -/io.k8s.api.core.v1.CephFSPersistentVolumeSourceŒ -"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.šmonitorsÊí -µ -monitors¨"‹Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² -arrayº - ² +\io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale— +"^CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.šspecReplicasPathšstatusReplicasPath² +objectÊ€ +§ +labelSelectorPath‘"ƒLabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.² string +Û +specReplicasPathÆ"¸SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.² +string +õ +statusReplicasPathÞ"ÐStatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.² +string +˜ +!io.k8s.api.core.v1.AttachedVolumeò"4AttachedVolume describes a volume attached to a nodešnameš +devicePath² +objectÊ™ e -path]"POptional: Used as the mounted root, rather than the full Ceph tree, default is /² + +devicePathW"JDevicePath represents the device path where the volume should be available² string -Ü -readOnlyÏ"ÀOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +0 +name("Name of the attached volume² +string +à +(io.k8s.api.core.v1.StorageOSVolumeSource³ "2Represents a StorageOS persistent volume resource.² +objectÊð +À +fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² +string +x +readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² boolean -Ì +Ï + secretRefÁ +5#/definitions/io.k8s.api.core.v1.LocalObjectReference"‡SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. +‹ -secretFile½"¯Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +volumeName}"pVolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.² string -ô - secretRefæ -0#/definitions/io.k8s.api.core.v1.SecretReference"±Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it -¦ -user"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +Ð +volumeNamespace¼"®VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.² string -» - -%io.k8s.api.core.v1.CephFSVolumeSource‘ -"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.šmonitorsÊò -µ -monitors¨"‹Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +¨ +3io.k8s.api.core.v1.TopologySelectorLabelRequirementð"~A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.škeyšvalues² +objectÊÒ +? +key8"+The label key that the selector applies to.² +string +Ž +valuesƒ"gAn array of string values. One value must match the label to be selected. Each entry in Values is ORed.² arrayº ² string -e -path]"POptional: Used as the mounted root, rather than the full Ceph tree, default is /² -string -Ü -readOnlyÏ"ÀOptional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² -boolean -Ì +Û +%io.k8s.api.apps.v1beta2.DaemonSetList±"-DaemonSetList is a collection of daemon sets.šitems² +objectÊŒ +­ -secretFile½"¯Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -ù - secretRefë -5#/definitions/io.k8s.api.core.v1.LocalObjectReference"±Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it -¦ -user"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it² +a +itemsX"A list of daemon sets.² +arrayº3 +1 +/#/definitions/io.k8s.api.apps.v1beta2.DaemonSet +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -Ê -/io.k8s.api.core.v1.CinderPersistentVolumeSource–"ëRepresents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.švolumeIDÊ™ -‘ -fsType†"øFilesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +Ë +metadata¾ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadataú\ +x-kubernetes-group-version-kind97- group: apps + kind: DaemonSetList + version: v1beta2 + +Ñ + io.k8s.api.core.v1.ScopeSelector¬"nA scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.² +objectÊ­ +ª +matchExpressions•"@A list of scope selector requirements by scope of the resources.² +arrayºF +D +B#/definitions/io.k8s.api.core.v1.ScopedResourceSelectorRequirement +’ +io.k8s.api.rbac.v1.RoleBindingï "·RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.šroleRef² +objectʯ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -Ï -readOnlyÂ"³Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² -boolean -™ - secretRef‹ -0#/definitions/io.k8s.api.core.v1.SecretReference"WOptional: points to a secret object containing parameters used to connect to OpenStack. -” -volumeID‡"zvolume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -Å -%io.k8s.api.core.v1.CinderVolumeSource›"ëRepresents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.švolumeIDÊž -‘ -fsType†"øFilesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +h +metadata\ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. +à +roleRefÔ +(#/definitions/io.k8s.api.rbac.v1.RoleRef"§RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. +„ +subjectsx"=Subjects holds references to the objects the role applies to.² +arrayº, +* +(#/definitions/io.k8s.api.rbac.v1.Subjectúj +x-kubernetes-group-version-kindGE- group: rbac.authorization.k8s.io + kind: RoleBinding + version: v1 + +ð +&io.k8s.api.core.v1.NodeDaemonEndpointsÅ"FNodeDaemonEndpoints lists ports opened by daemons running on the Node.² +objectÊo +m +kubeletEndpointZ +/#/definitions/io.k8s.api.core.v1.DaemonEndpoint"'Endpoint on which Kubelet is listening. +Ù +,io.k8s.api.apps.v1beta1.StatefulSetCondition¨"MStatefulSetCondition describes the state of a statefulset at a certain point.štypešstatus² +objectʺ +3 +type+"Type of statefulset condition.² string -Ï -readOnlyÂ"³Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² -boolean -ž - secretRef -5#/definitions/io.k8s.api.core.v1.LocalObjectReference"WOptional: points to a secret object containing parameters used to connect to OpenStack. -” -volumeID‡"zvolume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md² +‘ +lastTransitionTime{ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. +Y +messageN"AA human readable message indicating details about the transition.² string -å -!io.k8s.api.core.v1.ClientIPConfig¿"QClientIPConfig represents the configurations of Client IP based session affinity.Êè -å -timeoutSecondsÒint32"¼timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours).² +F +reason<"/The reason for the condition's last transition.² +string +L +statusB"5Status of the condition, one of True, False, Unknown.² +string +œ +.io.k8s.api.apps.v1beta2.RollingUpdateDaemonSeté"BSpec to control the desired behavior of daemon set rolling update.² +objectÊ– +“ +maxUnavailable€ +=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. +¥ + +(io.k8s.api.authentication.v1.TokenReviewø "§TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.šspec² +objectÊÏ +~ +specv +:#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec"8Spec holds information about the request being evaluated +¤ +status™ +<#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus"YStatus is filled in by the server and indicates whether the request can be authenticated. +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +K +metadata? +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaúf +x-kubernetes-group-version-kindCA- group: authentication.k8s.io + kind: TokenReview + version: v1 + +± +3io.k8s.api.autoscaling.v2beta2.ExternalMetricSourceù"ÐExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).šmetricštarget² +objectÊ… +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector +} +targets +9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric +Š +&io.k8s.api.batch.v1beta1.CronJobStatusß"9CronJobStatus represents the current state of a cron job.² +objectÊ• +z +activep"-A list of pointers to currently running jobs.² +arrayº4 +2 +0#/definitions/io.k8s.api.core.v1.ObjectReference +– +lastScheduleTime +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"FInformation when was the last time the job was successfully scheduled. +‰ +-io.k8s.api.extensions.v1beta1.DaemonSetStatus×">DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReady² +objectʳ +Å +numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² integer -• -%io.k8s.api.core.v1.ComponentConditionë"/Information about the condition of a component.štypešstatusʦ +l +observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² +integer +l +updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² +integer +ä +collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² +integer +ã +currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +˜ + numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² +integer +Ý +numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +€ + +conditionsñ"LRepresents the latest available observations of a DaemonSet's current state.² +arrayºB +@ +>#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetConditionú' +x-kubernetes-patch-merge-keytype +ú' +x-kubernetes-patch-strategymerge + +ô +desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² +integer +Ê +numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² +integer + A +/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaì@"lObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.² +objectÊï? + + clusterName"ÿThe name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.² +string +ð +deletionGracePeriodSecondsÑint64"»Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.² +integer +’ + +generationƒint64"nA sequence number representing a specific generation of the desired state. Populated by the system. Read-only.² +integer +‚ +labels÷"ÙMap of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labelsª + ² +string² +object +õ +nameì"ÞName must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names² +string +ø +ownerReferencesä"¼List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.² +arrayºE +C +A#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReferenceú& +x-kubernetes-patch-merge-keyuid +ú' +x-kubernetes-patch-strategymerge + +h +selfLink\"OSelfLink is a URL representing this object. Populated by the system. Read-only.² +string +³ +uid«"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. + +Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids² +string +À + annotations°"’Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotationsª + ² +string² +object +Ý +creationTimestampÇ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‹CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC. + +Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +Ô + +finalizersÅ"þMust be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.² +arrayº + ² +stringú' +x-kubernetes-patch-strategymerge + +‰ + initializersø +?#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers"´An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. + +When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. + +DEPRECATED - initializers are an alpha field and will be removed in v1.15. +Æ + managedFields´"ÛManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like "ci-cd". The set of fields is always in the version that the workflow used when modifying the object. + +This field is alpha and can be changed or removed without notice.² +arrayºI +G +E#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry +œ + namespaceŽ"€Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. + +Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces² +string +“ +deletionTimestampý + +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Á +DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested. + +Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata +¥ + generateName”"†GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. + +If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). + +Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency² +string +€ +resourceVersionì"ÞAn opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. + +Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² +string +˜ +#io.k8s.api.apps.v1beta1.ScaleStatusð"AScaleStatus represents the current status of a scale subresource.šreplicas² +objectÊ“ +Z +replicasNint32"9actual number of observed instances of the scaled object.² +integer +­ +selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª + ² +string² +object +„ +targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² +string +Ø +$io.k8s.apimachinery.pkg.version.Info¯"TInfo contains versioning information. how we'll want to distribute that information.šmajoršminorš +gitVersionš gitCommitš gitTreeStateš buildDateš goVersionšcompileršplatform² +objectÊä + + gitTreeState ² +string + +major ² +string + +platform ² +string + + buildDate ² +string + + gitCommit ² +string + + +gitVersion ² +string + + goVersion ² +string + +minor ² +string + +compiler ² +string +Ç +#io.k8s.api.autoscaling.v1.ScaleSpecŸ":ScaleSpec describes the attributes of a scale subresource.² +objectÊU +S +replicasGint32"2desired number of instances for the scaled object.² +integer + +/io.k8s.api.autoscaling.v2beta2.PodsMetricSourceŽ"åPodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.šmetricštarget² +objectÊ… +ƒ +metricy +=#/definitions/io.k8s.api.autoscaling.v2beta2.MetricIdentifier"8metric identifies the target metric by name and selector +} +targets +9#/definitions/io.k8s.api.autoscaling.v2beta2.MetricTarget"6target specifies the target value for the given metric +¿ +'io.k8s.api.rbac.v1beta1.AggregationRule“"VAggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole² +objectʬ +© +clusterRoleSelectors"¼ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added² +arrayºD +B +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector +‹ +Gio.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration¿ +"‰ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.² +objectÊ› +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +¿ +metadata² +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. +û +webhooksî"IWebhooks is a list of webhooks and the affected resources and operations.² +arrayºB +@ +>#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhookú' +x-kubernetes-patch-merge-keyname +ú' +x-kubernetes-patch-strategymerge +ú… +x-kubernetes-group-version-kindb`- version: v1beta1 + group: admissionregistration.k8s.io + kind: ValidatingWebhookConfiguration + +‡ + +"io.k8s.api.apps.v1beta2.Deploymentà "¿DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.² +objectʳ +­ + +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +f +metadataZ +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. +x +specp +4#/definitions/io.k8s.api.apps.v1beta2.DeploymentSpec"8Specification of the desired behavior of the Deployment. +t +statusj +6#/definitions/io.k8s.api.apps.v1beta2.DeploymentStatus"0Most recently observed status of the Deployment.úY +x-kubernetes-group-version-kind64- kind: Deployment + version: v1beta2 + group: apps + +é +5io.k8s.api.autoscaling.v1.CrossVersionObjectReference¯"bCrossVersionObjectReference contains enough information to let you identify the referred resource.škindšname² +objectÊ® +… +kind}"pKind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"² +string +l +named"WName of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names² +string +6 + +apiVersion("API version of the referent² +string +¾ +/io.k8s.api.autoscaling.v2beta1.PodsMetricSourceŠ"åPodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.š +metricNameštargetAverageValue² +objectÊñ +K + +metricName="0metricName is the name of the metric in question² +string +Ü +selectorÏ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"Šselector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics. + +targetAverageValue« +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"ltargetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity) +  +%io.k8s.api.core.v1.ComponentConditionö"/Information about the condition of a component.štypešstatus² +objectʦ c errorZ"MCondition error code for a component. For example, a health check error code.² string @@ -27546,939 +37658,214 @@ z N typeF"9Type of condition for a component. Valid value: "Healthy"² string - -"io.k8s.api.core.v1.ComponentStatus› "LComponentStatus (and ComponentStatusList) holds the cluster validation info.Êï -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +Ç +&io.k8s.api.core.v1.LoadBalancerIngressœ"LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.² +objectÊú +{ +hostnameo"bHostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)² string -Î +{ +ipu"hIP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)² +string +Ê +io.k8s.api.core.v1.Sysctl¬"+Sysctl defines a kernel parameter to be setšnamešvalue² +objectÊb +. +name&"Name of a property to set² +string +0 +value'"Value of a property to set² +string +Ê +#io.k8s.api.apps.v1.ReplicaSetStatus¢"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicas² +objectÊÇ +‹ +fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² +integer + +observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² +integer +X + readyReplicasGint32"2The number of ready replicas for this replica set.² +integer +Ø +replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² +integer +… +availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² +integer +ø -conditions¿"%List of component conditions observed² -arrayº7 -5 -3#/definitions/io.k8s.api.core.v1.ComponentConditionú' +conditionsé"NRepresents the latest available observations of a replica set's current state.² +arrayº8 +6 +4#/definitions/io.k8s.api.apps.v1.ReplicaSetConditionú' x-kubernetes-patch-merge-keytype ú' x-kubernetes-patch-strategymerge -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúW -x-kubernetes-group-version-kind42- group: "" - kind: ComponentStatus - version: v1 +Á +%io.k8s.api.apps.v1beta2.DaemonSetSpec— "3DaemonSetSpec is the specification of a daemon set.šselectorštemplate² +objectʽ -ô -&io.k8s.api.core.v1.ComponentStatusListÉ"TStatus of all the conditions for the component as a list of ComponentStatus objects.šitemsʉ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -l -itemsc" List of ComponentStatus objects.² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.ComponentStatus -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsú[ -x-kubernetes-group-version-kind86- group: "" - kind: ComponentStatusList - version: v1 - -½ -io.k8s.api.core.v1.ConfigMapœ "7ConfigMap holds configuration data for pods to consume.Ê‹ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -˜ - -binaryData‰"åBinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.ª -byte² -string² -object -Ï -dataÆ"¨Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.ª - ² -string² -object -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúQ -x-kubernetes-group-version-kind.,- group: "" - kind: ConfigMap - version: v1 - -à -%io.k8s.api.core.v1.ConfigMapEnvSource™"ÂConfigMapEnvSource selects a ConfigMap to populate the environment variables with. - -The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.ÊÐ -„ -name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² -string -G -optional;"-Specify whether the ConfigMap must be defined² -boolean -Û -'io.k8s.api.core.v1.ConfigMapKeySelector¯"Selects a key from a ConfigMap.škeyÊ„ -& -key"The key to select.² -string -„ -name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² -string -S -optionalG"9Specify whether the ConfigMap or it's key must be defined² -boolean -¶ - io.k8s.api.core.v1.ConfigMapList‘"CConfigMapList is a resource containing a list of ConfigMap objects.šitemsÊè -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -f -items]" Items is the list of ConfigMaps.² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.ConfigMap -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¢ -metadata• -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"VMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúU -x-kubernetes-group-version-kind20- group: "" - kind: ConfigMapList - version: v1 - -» -,io.k8s.api.core.v1.ConfigMapNodeConfigSourceŠ"lConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.š namespacešnameškubeletConfigKeyÊò -¹ -kubeletConfigKey¤"–KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.² -string -p -nameh"[Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.² -string - - namespacer"eNamespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.² -string -± -resourceVersion"ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.² -string -Œ -uid„"wUID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.² -string -¡ -&io.k8s.api.core.v1.ConfigMapProjectionö"åAdapts a ConfigMap into a projected volume. - -The contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.ÊŠ -ª -items "âIf unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.KeyToPath -„ -name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² -string -T -optionalH":Specify whether the ConfigMap or it's keys must be defined² -boolean -Ø -(io.k8s.api.core.v1.ConfigMapVolumeSource« "ÅAdapts a ConfigMap into a volume. - -The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.Êß -Ò - defaultModeÂint32"¬Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² +’ +minReadySecondsþint32"èThe minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).² integer -ª -items "âIf unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.KeyToPath -„ -name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² +¿ +revisionHistoryLimit¦int32"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² +integer +Á +selector´ +@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ïA label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors +„ +template÷ +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÂAn object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template +˜ +updateStrategy… +=#/definitions/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy"DAn update strategy to replace existing DaemonSet pods with new pods. +¨ +%io.k8s.api.core.v1.PodDNSConfigOption"9PodDNSConfigOption defines DNS resolver options of a pod.² +objectÊ6 + +name" Required.² string -T -optionalH":Specify whether the ConfigMap or it's keys must be defined² -boolean -Ì8 -io.k8s.api.core.v1.Container«8"AA single application container that you want to run within a pod.šnameÊÝ7 -ß -argsÖ"¹Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell² -arrayº - ² + +value ² string -û -commandï"ÒEntrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell² -arrayº - ² +• +&io.k8s.api.storage.v1beta1.VolumeErrorê"DVolumeError captures an error encountered during a volume operation.² +objectÊ• +® +message¢"”String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.² +string +b +timeZ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Time the error was encountered. +± +&io.k8s.api.apps.v1beta1.RollbackConfig†" DEPRECATED.² +objectÊk +i +revision]int64"HThe revision to rollback to. If set to 0, rollback to the last revision.² +integer +Û + +:io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpecœ +"_HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.šscaleTargetRefš maxReplicas² +objectÊ +† +scaleTargetRefó +H#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference"¦scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count. +© + maxReplicas™int32"ƒmaxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.² +integer +¶ +metricsª"ßmetrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.² +arrayº; +9 +7#/definitions/io.k8s.api.autoscaling.v2beta1.MetricSpec +œ + minReplicasŒint32"wminReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.² +integer +Ë +!io.k8s.api.core.v1.NodeSystemInfo¥ "CNodeSystemInfo is a set of ids/uuids to uniquely identify the node.š machineIDš +systemUUIDšbootIDš kernelVersionšosImagešcontainerRuntimeVersionškubeletVersionškubeProxyVersionšoperatingSystemš architecture² +objectʶ +n +osImagec"VOS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).² +string +’ + +systemUUIDƒ"õSystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html² +string +‡ +containerRuntimeVersionl"_ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).² +string +H +kubeProxyVersion4"'KubeProxy Version reported by the node.² +string +n + kernelVersion]"PKernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).² +string +D +kubeletVersion2"%Kubelet Version reported by the node.² string ß -env×"IList of environment variables to set in the container. Cannot be updated.² -arrayº+ -) -'#/definitions/io.k8s.api.core.v1.EnvVarú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge + machineIDÑ"ÃMachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html² +string +I +operatingSystem6")The Operating System reported by the node² +string +B + architecture2"%The Architecture reported by the node² +string +4 +bootID*"Boot ID reported by the node.² +string +¨ +io.k8s.api.core.v1.ServiceList…"%ServiceList holds a list of services.šitems² +objectÊñ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +string +½ +metadata° +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds +­ -Ö -envFromÊ"ˆList of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.² -arrayº2 -0 -.#/definitions/io.k8s.api.core.v1.EnvFromSource - -imageƒ"õDocker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.² +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -‡ -imagePullPolicyó"åImage pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images² -string -¨ - lifecycleš -*#/definitions/io.k8s.api.core.v1.Lifecycle"lActions that the management system should take in response to container lifecycle events. Cannot be updated. -‚ - livenessProbeð -&#/definitions/io.k8s.api.core.v1.Probe"ÅPeriodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes -• -nameŒ"Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.² -string -” -portsŠ"ŠList of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.² -arrayº2 -0 -.#/definitions/io.k8s.api.core.v1.ContainerPortú; -x-kubernetes-list-map-keys- containerPort -- protocol -ú -x-kubernetes-list-typemap -ú0 -x-kubernetes-patch-merge-keycontainerPort -ú' -x-kubernetes-patch-strategymerge +T +itemsK"List of services² +arrayº, +* +(#/definitions/io.k8s.api.core.v1.ServiceúS +x-kubernetes-group-version-kind0.- group: "" + kind: ServiceList + version: v1 -¡ -readinessProbeŽ -&#/definitions/io.k8s.api.core.v1.Probe"ãPeriodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes -é - resourcesÛ -5#/definitions/io.k8s.api.core.v1.ResourceRequirements"¡Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - -securityContextü -0#/definitions/io.k8s.api.core.v1.SecurityContext"ÇSecurity options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ -Ï -stdinÅ"¶Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.² -boolean -× - stdinOnceÉ"ºWhether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false² -boolean -Å -terminationMessagePathª"œOptional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.² +Œ +"io.k8s.api.rbac.v1.ClusterRoleListå"/ClusterRoleList is a collection of ClusterRolesšitems² +objectʬ +¨ +kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -æ -terminationMessagePolicyÉ"»Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.² -string - -ttyz"lWhether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.² -boolean -‹ - volumeDevicesù"_volumeDevices is the list of block devices to be used by the container. This is a beta feature.² -arrayº1 -/ --#/definitions/io.k8s.api.core.v1.VolumeDeviceú- -x-kubernetes-patch-merge-key  devicePath -ú' -x-kubernetes-patch-strategymerge +f +metadataZ +;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata. +­ -ñ - volumeMountsà"HPod volumes to mount into the container's filesystem. Cannot be updated.² +apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² +string +g +items^"Items is a list of ClusterRoles² arrayº0 . -,#/definitions/io.k8s.api.core.v1.VolumeMountú, -x-kubernetes-patch-merge-key  -mountPath -ú' -x-kubernetes-patch-strategymerge +,#/definitions/io.k8s.api.rbac.v1.ClusterRoleún +x-kubernetes-group-version-kindKI- group: rbac.authorization.k8s.io + kind: ClusterRoleList + version: v1 -À - -workingDir±"£Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.² +“ +Hio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReferenceÆ";ServiceReference holds a reference to Service.legacy.k8s.io² +objectÊ{ +C + namespace6")Namespace is the namespace of the service² string -µ -!io.k8s.api.core.v1.ContainerImage"Describe a container imagešnamesÊç -¡ -names—"{Names by which this image is known. e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]² -arrayº - ² +4 +name,"Name is the name of the service² string -A - sizeBytes4int64"The size of the image in bytes.² -integer -Ó - io.k8s.api.core.v1.ContainerPort®">ContainerPort represents a network port in a single container.š containerPortÊÚ -ˆ - containerPortwint32"bNumber of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.² -integer -A -hostIP7"*What host IP to bind the external port to.² -string -å -hostPortØint32"ÂNumber of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.² -integer -Æ -name½"¯If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.² -string -Y -protocolM"@Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".² -string -“ -!io.k8s.api.core.v1.ContainerStateí"¥ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.ÊÁ -f -running[ -6#/definitions/io.k8s.api.core.v1.ContainerStateRunning"!Details about a running container +¨ +/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategyô"XDaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.² +objectÊ‹ +— + rollingUpdate… +<#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". o - -terminateda -9#/definitions/io.k8s.api.core.v1.ContainerStateTerminated"$Details about a terminated container -f -waiting[ -6#/definitions/io.k8s.api.core.v1.ContainerStateWaiting"!Details about a waiting container -å -(io.k8s.api.core.v1.ContainerStateRunning¸"8ContainerStateRunning is a running state of a container.Ê{ -y - startedAtl -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"1Time at which the container was last (re-)started -› -+io.k8s.api.core.v1.ContainerStateTerminatedë">ContainerStateTerminated is a terminated state of a container.šexitCodeÊœ -R - containerIDC"6Container's ID in the format 'docker://'² +typeg"ZType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.² string -W -exitCodeKint32"6Exit status from the last termination of the container² -integer -t - -finishedAtf -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"+Time at which the container last terminated -O -messageD"7Message regarding the last termination of the container² -string -P -reasonF"9(brief) reason from the last termination of the container² -string -P -signalFint32"1Signal from the last termination of the container² -integer - - startedAtt -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"9Time at which previous execution of the container started -… -(io.k8s.api.core.v1.ContainerStateWaitingØ"8ContainerStateWaiting is a waiting state of a container.Êš -O -messageD"7Message regarding why the container is not yet running.² -string -G -reason="0(brief) reason the container is not yet running.² -string -ª -"io.k8s.api.core.v1.ContainerStatusƒ "JContainerStatus contains details for the current status of this container.šnamešreadyš restartCountšimagešimageIDʃ -S - containerIDD"7Container's ID in the format 'docker://'.² -string -z -imageq"dThe image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images² -string -9 -imageID."!ImageID of the container's image.² -string -y - lastStatel -/#/definitions/io.k8s.api.core.v1.ContainerState"9Details about the container's last termination condition. -r -namej"]This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.² -string -V -readyM"?Specifies whether the container has passed its readiness probe.² -boolean -¿ - restartCount®int32"˜The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.² -integer -l -statec -/#/definitions/io.k8s.api.core.v1.ContainerState"0Details about the container's current condition. -¶ -!io.k8s.api.core.v1.DaemonEndpoint"CDaemonEndpoint contains information about a single Daemon endpoint.šPortÊA -? -Port7int32""Port number of the given endpoint.² -integer -É -(io.k8s.api.core.v1.DownwardAPIProjectionœ"™Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.Ê} -{ -itemsr")Items is a list of DownwardAPIVolume file² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile -³ -(io.k8s.api.core.v1.DownwardAPIVolumeFile†"XDownwardAPIVolumeFile represents information to create the file containing the pod fieldšpathÊ¡ -¦ -fieldRef™ -4#/definitions/io.k8s.api.core.v1.ObjectFieldSelector"aRequired: Selects a field of the pod: only annotations, labels, name and namespace are supported. -£ -modešint32"„Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² -integer -Þ -pathÕ"ÇRequired: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'² -string -î -resourceFieldRefÙ -6#/definitions/io.k8s.api.core.v1.ResourceFieldSelector"žSelects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - -*io.k8s.api.core.v1.DownwardAPIVolumeSourceî"“DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.ÊÔ -Ò - defaultModeÂint32"¬Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² -integer -} -itemst"+Items is a list of downward API volume file² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile -— -'io.k8s.api.core.v1.EmptyDirVolumeSourceë"uRepresents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.Êð -… -mediumú"ìWhat type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir² -string -å - sizeLimit× -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"—Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir -° -"io.k8s.api.core.v1.EndpointAddress‰" name on the dataset for Flocker should be considered as deprecated² -string -_ - datasetUUIDP"CUUID of the dataset. This is unique identifier of a Flocker dataset² -string -¼ -0io.k8s.api.core.v1.GCEPersistentDiskVolumeSource‡ "ÁRepresents a Persistent Disk resource in Google Compute Engine. - -A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.špdNameʶ -Á -fsType¶"¨Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk² -string -ù - partitionëint32"ÕThe partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk² -integer -² -pdName§"™Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk² -string -¾ -readOnly±"¢ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk² -boolean -± -&io.k8s.api.core.v1.GitRepoVolumeSource†"÷Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling. - -DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.š -repositoryÊû -‹ - directoryý"ïTarget directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.² -string -) - -repository"Repository URL² -string -@ -revision4"'Commit hash for the specified revision.² -string -¶ -2io.k8s.api.core.v1.GlusterfsPersistentVolumeSourceÿ"‹Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.š endpointsšpathÊÚ -¹ - endpoints«"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -string -£ -endpointsNamespaceŒ"þEndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -string -’ -path‰"|Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -string -à -readOnlyÓ"ÄReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -boolean -† -(io.k8s.api.core.v1.GlusterfsVolumeSourceÙ"‹Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.š endpointsšpathÊ´ -¹ - endpoints«"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -string -’ -path‰"|Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -string -à -readOnlyÓ"ÄReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod² -boolean -Ù - io.k8s.api.core.v1.HTTPGetAction´"=HTTPGetAction describes an action based on HTTP Get requests.športÊê -} -hostu"hHost name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.² -string -‘ - httpHeaders"CCustom headers to set in the request. HTTP allows repeated headers.² -arrayº/ -- -+#/definitions/io.k8s.api.core.v1.HTTPHeader -7 -path/""Path to access on the HTTP server.² -string -Ç -port¾ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"}Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. -R -schemeH";Scheme to use for connecting to the host. Defaults to HTTP.² -string -Î -io.k8s.api.core.v1.HTTPHeader¬">HTTPHeader describes a custom header to be used in HTTP probesšnamešvalueÊZ -* -name""The header field name² -string -, -value#"The header field value² -string -ð -io.k8s.api.core.v1.HandlerÑ"6Handler defines a specific action that should be takenÊ• -‘ -execˆ -+#/definitions/io.k8s.api.core.v1.ExecAction"YOne and only one of the following should be specified. Exec specifies the action to take. -k -httpGet` -.#/definitions/io.k8s.api.core.v1.HTTPGetAction".HTTPGet specifies the http request to perform. -‘ - tcpSocketƒ -0#/definitions/io.k8s.api.core.v1.TCPSocketAction"OTCPSocket specifies an action involving a TCP port. TCP hooks not yet supported -› -io.k8s.api.core.v1.HostAliasú"oHostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.Ê… -L - hostnames?"#Hostnames for the above IP address.² -arrayº - ² -string -5 -ip/""IP address of the host file entry.² -string -þ -'io.k8s.api.core.v1.HostPathVolumeSourceÒ"vRepresents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.špathÊÏ -Å -path¼"®Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath² -string -„ -type|"oType for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath² -string -Ü -.io.k8s.api.core.v1.ISCSIPersistentVolumeSource© "®ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.š targetPortalšiqnšlunÊÙ -V -chapAuthDiscoveryA"3whether support iSCSI Discovery CHAP authentication² -boolean -R -chapAuthSession?"1whether support iSCSI Session CHAP authentication² -boolean -µ -fsTypeª"œFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi² -string -Ô - initiatorNameÂ"´Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.² -string -0 -iqn)"Target iSCSI Qualified Name.² -string -n -iscsiInterface\"OiSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).² -string -4 -lun-int32"iSCSI Target Lun number.² -integer -³ -portals§"ŠiSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² -arrayº - ² -string -k -readOnly_"QReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.² -boolean -z - secretRefm -0#/definitions/io.k8s.api.core.v1.SecretReference"9CHAP Secret for iSCSI target and initiator authentication -¤ - targetPortal“"…iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² -string -» -$io.k8s.api.core.v1.ISCSIVolumeSource’ "’Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.š targetPortalšiqnšlunÊÞ -V -chapAuthDiscoveryA"3whether support iSCSI Discovery CHAP authentication² -boolean -R -chapAuthSession?"1whether support iSCSI Session CHAP authentication² -boolean -µ -fsTypeª"œFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi² -string -Ô - initiatorNameÂ"´Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.² -string -0 -iqn)"Target iSCSI Qualified Name.² -string -n -iscsiInterface\"OiSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).² -string -4 -lun-int32"iSCSI Target Lun number.² -integer -³ -portals§"ŠiSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² -arrayº - ² -string -k -readOnly_"QReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.² -boolean - - secretRefr -5#/definitions/io.k8s.api.core.v1.LocalObjectReference"9CHAP Secret for iSCSI target and initiator authentication -¤ - targetPortal“"…iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).² -string -á -io.k8s.api.core.v1.KeyToPathÀ",Maps a string key to a path within a volume.škeyšpathÊ -' -key "The key to project.² -string -£ -modešint32"„Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² -integer -¯ -path¦"˜The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.² -string -¹ -io.k8s.api.core.v1.Lifecycle˜ "ªLifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.Êç - - postStartó -(#/definitions/io.k8s.api.core.v1.Handler"ÆPostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks -à -preStopÔ -(#/definitions/io.k8s.api.core.v1.Handler"§PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks -¨ -io.k8s.api.core.v1.LimitRange† "OLimitRange sets resource usage limits for each kind of resource in a Namespace.ÊÜ +³ +io.k8s.api.core.v1.LimitRange‘ "OLimitRange sets resource usage limits for each kind of resource in a Namespace.² +objectÊÜ ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² @@ -28496,307 +37883,237 @@ apiVersion kind: LimitRange version: v1 -à -!io.k8s.api.core.v1.LimitRangeItem "SLimitRangeItem defines a min/max usage limit for any resource that matches on kind.ÊÄ -² -default¦"WDefault resource requirement limit value by resource name if resource limit is omitted.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -Ó -defaultRequestÀ"qDefaultRequest is the default resource requirement request value by resource name if resource request is omitted.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -‹ -maxƒ"4Max usage constraints on this kind by resource name.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -× -maxLimitRequestRatio¾"îMaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -‹ -minƒ"4Min usage constraints on this kind by resource name.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -A -type9",Type of resource that this limit applies to.² -string -¨ -!io.k8s.api.core.v1.LimitRangeList‚ "-LimitRangeList is a list of LimitRange items.šitemsÊî -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -Ð -itemsÆ"‡Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/² -arrayº/ -- -+#/definitions/io.k8s.api.core.v1.LimitRange -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúV -x-kubernetes-group-version-kind31- group: "" - kind: LimitRangeList - version: v1 - -’ -!io.k8s.api.core.v1.LimitRangeSpecì"NLimitRangeSpec defines a min/max usage limit for resources that match on kind.šlimitsÊ -Œ -limits"?Limits is the list of LimitRangeItem objects that are enforced.² -arrayº3 -1 -/#/definitions/io.k8s.api.core.v1.LimitRangeItem -¼ -&io.k8s.api.core.v1.LoadBalancerIngress‘"LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.Êú -{ -hostnameo"bHostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)² -string -{ -ipu"hIP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)² -string -Î -%io.k8s.api.core.v1.LoadBalancerStatus¤"#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource"XScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. +© + azureFile› +@#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod. ð -io.k8s.api.core.v1.NodeAddressÍ"8NodeAddress contains information for the node's address.štypešaddressÊ -) -address"The node address.² +capacityã"“A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacityª? += +;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² +object +ª +fc£ +/#/definitions/io.k8s.api.core.v1.FCVolumeSource"pFC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. +¶ + +flexVolume§ +;#/definitions/io.k8s.api.core.v1.FlexPersistentVolumeSource"hFlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. +õ +hostPathè +5#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"®HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath +Î +photonPersistentDiskµ +A#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"pPhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine + + storageos +@#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource"¼StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md +Ö +claimRefÉ +0#/definitions/io.k8s.api.core.v1.ObjectReference"”ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding +ä + nodeAffinityÓ +3#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity"›NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume. +¼ +persistentVolumeReclaimPolicyš"ŒWhat happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming² string -R -typeJ"=Node address type, one of Hostname, ExternalIP or InternalIP.² +¥ +portworxVolume’ +5#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"YPortworxVolume represents a portworx volume attached and mounted on kubelets host machine +í +flockerá +4#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"¨Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running +Õ +iscsiË +<#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource"ŠISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. +î + mountOptionsÝ"ÀA list of mount options, e.g. ["ro", "soft"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options² +arrayº + ² string -ù -io.k8s.api.core.v1.NodeAffinityÕ ";Node affinity is a group of node affinity scheduling rules.Ê” -Þ -/preferredDuringSchedulingIgnoredDuringExecutionª"ÞThe scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.² -arrayº< -: -8#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm -° -.requiredDuringSchedulingIgnoredDuringExecutioný --#/definitions/io.k8s.api.core.v1.NodeSelector"ËIf the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. -§ - io.k8s.api.core.v1.NodeCondition‚"8NodeCondition contains condition information for a node.štypešstatusÊ´ -€ -lastHeartbeatTimek -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"0Last time we got an update on a given condition. +¬ + vsphereVolumeš +?#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"WVsphereVolume represents a vSphere volume attached and mounted on kubelets host machine +± +awsElasticBlockStore˜ +A#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"ÒAWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore +– +cephfs‹ +=#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource"JCephFS represents a Ceph FS mount on the host that shares a pod's lifetime +Á +nfs¹ +0#/definitions/io.k8s.api.core.v1.NFSVolumeSource"„NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs +½ +gcePersistentDisk§ +>#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"äGCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk +“ + glusterfs… +@#/definitions/io.k8s.api.core.v1.GlusterfsPersistentVolumeSource"ÀGlusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md +| +locals +2#/definitions/io.k8s.api.core.v1.LocalVolumeSource"=Local represents directly-attached storage with node affinity +¨ +storageClassName“"…Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.² +string +á + +volumeModeÒ"ÄvolumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.² +string +‹ + io.k8s.api.core.v1.ServiceStatusæ"9ServiceStatus represents the current status of a service.² +objectÊœ +™ + loadBalancerˆ +3#/definitions/io.k8s.api.core.v1.LoadBalancerStatus"QLoadBalancer contains the current status of the load-balancer, if one is present. +ƒ +2io.k8s.api.extensions.v1beta1.HTTPIngressRuleValueÌ"£HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.špaths² +objectÊ Œ -lastTransitionTimev -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time";Last time the condition transit from one status to another. -X -messageM"@Human readable message indicating details about last transition.² +paths‚"4A collection of paths that map requests to backends.² +arrayº? += +;#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath +í +[io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"XCustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinitionšpluralškind² +objectÊ” +€ +singulart"gSingular is the singular name of the resource. It must be all lowercase Defaults to lowercased ² string -J -reason@"3(brief) reason for the condition's last transition.² +{ + +categoriesm"QCategories is a list of grouped resources custom resources belong to (e.g. 'all')² +arrayº + ² string -L -statusB"5Status of the condition, one of True, False, Unknown.² +i +kinda"TKind is the serialized kind of the resource. It is normally CamelCase and singular.² string -, -type$"Type of node condition.² +p +listKindd"WListKind is the serialized kind of the list for this resource. Defaults to List.² string - -#io.k8s.api.core.v1.NodeConfigSourceõ"uNodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.Ê{ -y - configMapl -:#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource".ConfigMap is a reference to a Node's ConfigMap -á -#io.k8s.api.core.v1.NodeConfigStatus¹"WNodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.ÊÜ -Á -active¶ -1#/definitions/io.k8s.api.core.v1.NodeConfigSource"€Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error. -ù -assignedì -1#/definitions/io.k8s.api.core.v1.NodeConfigSource"¶Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned. -  -error–"ˆError describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.² +Á +plural¶"¨Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.² string -ö - lastKnownGoodä -1#/definitions/io.k8s.api.core.v1.NodeConfigSource"®LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future. -å -&io.k8s.api.core.v1.NodeDaemonEndpointsº"FNodeDaemonEndpoints lists ports opened by daemons running on the Node.Êo -m -kubeletEndpointZ -/#/definitions/io.k8s.api.core.v1.DaemonEndpoint"'Endpoint on which Kubelet is listening. -» -io.k8s.api.core.v1.NodeList›"ONodeList is the whole list of all Nodes which have been registered with master.šitemsÊë +q + +shortNamesc"GShortNames are short names for the resource. It must be all lowercase.² +arrayº + ² +string +ì + +io.k8s.api.autoscaling.v1.ScaleÈ +"2Scale represents a scaling request for a resource.² +objectʬ +É +status¾ +3#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. ­ apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² string -N -itemsE" List of nodes² -arrayº) -' -%#/definitions/io.k8s.api.core.v1.Node ¨ kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúP -x-kubernetes-group-version-kind-+- group: "" - kind: NodeList +¿ +metadata² +=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. +À +spec· +1#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.úV +x-kubernetes-group-version-kind31- group: autoscaling + kind: Scale version: v1 -” -io.k8s.api.core.v1.NodeSelectorð"¼A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.šnodeSelectorTermsÊ™ -– -nodeSelectorTerms€"NodeSpec describes the attributes that a node is created with.Êð -Ö - configSourceÅ -1#/definitions/io.k8s.api.core.v1.NodeConfigSource"If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field -† - -externalIDx"kDeprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966² +9 +type1"$type describes the current condition² string +  +io.k8s.api.core.v1.EndpointPortü"5EndpointPort is a tuple that describes a single port.šport² +objectʯ +‰ +name€"sThe name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.² +string += +port5int32" The port number of the endpoint.² +integer +b +protocolV"IThe IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.² +string +‰ +'io.k8s.api.core.v1.HostPathVolumeSourceÝ"vRepresents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.špath² +objectÊÏ +Å +path¼"®Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath² +string +„ +type|"oType for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath² +string +› +)io.k8s.api.networking.v1beta1.IngressSpecí";IngressSpec describes the Ingress the user wishes to exist.² +objectÊ¡ +Ø +rulesÎ"ƒA list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.² +arrayº; +9 +7#/definitions/io.k8s.api.networking.v1beta1.IngressRule +† +tlsþ"´TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.² +arrayº: +8 +6#/definitions/io.k8s.api.networking.v1beta1.IngressTLS +º +backend® +:#/definitions/io.k8s.api.networking.v1beta1.IngressBackend"ïA default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default. +Ä +!io.k8s.api.apps.v1beta2.ScaleSpecž"9ScaleSpec describes the attributes of a scale subresource² +objectÊU +S +replicasGint32"2desired number of instances for the scaled object.² +integer +ß +io.k8s.api.core.v1.NodeSpec¿">NodeSpec describes the attributes that a node is created with.² +objectÊð Q podCIDRF"9PodCIDR represents the pod IP range assigned to the node.² string @@ -28812,17 +38129,16 @@ c Ï unschedulable½"®Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration² boolean -ã -io.k8s.api.core.v1.NodeStatusÁ"=NodeStatus is information about the current status of a node.Êþ -º - addresses¬"˜List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses² -arrayº0 -. -,#/definitions/io.k8s.api.core.v1.NodeAddressú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge +Ö + configSourceÅ +1#/definitions/io.k8s.api.core.v1.NodeConfigSource"If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field +† +externalIDx"kDeprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966² +string +î +io.k8s.api.core.v1.NodeStatusÌ"=NodeStatus is information about the current status of a node.² +objectÊþ Æ allocatable¶"gAllocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.ª? = @@ -28843,20 +38159,34 @@ conditions ú' x-kubernetes-patch-strategymerge -‘ -config† -1#/definitions/io.k8s.api.core.v1.NodeConfigStatus"QStatus of the config assigned to the node via the dynamic Kubelet config feature. t daemonEndpointsa 4#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints")Endpoints of daemons running on the Node. +¯ +nodeInfo¢ +/#/definitions/io.k8s.api.core.v1.NodeSystemInfo"oSet of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info +d + volumesInUseT"8List of attachable volumes in use (mounted) by the node.² +arrayº + ² +string +º + addresses¬"˜List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses² +arrayº0 +. +,#/definitions/io.k8s.api.core.v1.NodeAddressú' +x-kubernetes-patch-strategymerge +ú' +x-kubernetes-patch-merge-keytype + +‘ +config† +1#/definitions/io.k8s.api.core.v1.NodeConfigStatus"QStatus of the config assigned to the node via the dynamic Kubelet config feature. q imagesg"%List of container images on this node² arrayº3 1 /#/definitions/io.k8s.api.core.v1.ContainerImage -¯ -nodeInfo¢ -/#/definitions/io.k8s.api.core.v1.NodeSystemInfo"oSet of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info Í phaseÃ"µNodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.² string @@ -28865,867 +38195,92 @@ q arrayº3 1 /#/definitions/io.k8s.api.core.v1.AttachedVolume -d - volumesInUseT"8List of attachable volumes in use (mounted) by the node.² -arrayº - ² -string -À -!io.k8s.api.core.v1.NodeSystemInfoš "CNodeSystemInfo is a set of ids/uuids to uniquely identify the node.š machineIDš -systemUUIDšbootIDš kernelVersionšosImagešcontainerRuntimeVersionškubeletVersionškubeProxyVersionšoperatingSystemš architectureʶ -B - architecture2"%The Architecture reported by the node² -string -4 -bootID*"Boot ID reported by the node.² -string -‡ -containerRuntimeVersionl"_ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).² -string -n - kernelVersion]"PKernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).² -string -H -kubeProxyVersion4"'KubeProxy Version reported by the node.² -string -D -kubeletVersion2"%Kubelet Version reported by the node.² -string -ß - machineIDÑ"ÃMachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html² -string -I -operatingSystem6")The Operating System reported by the node² -string -n -osImagec"VOS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).² -string -’ - -systemUUIDƒ"õSystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html² -string -» -&io.k8s.api.core.v1.ObjectFieldSelector"?ObjectFieldSelector selects an APIVersioned field of an object.š fieldPathÊ¿ +ƒ +0io.k8s.api.policy.v1beta1.FSGroupStrategyOptionsÎ"YFSGroupStrategyOptions defines the strategy type and options used to create the strategy.² +objectÊä +÷ +rangesì"©ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.² +arrayº3 +1 +/#/definitions/io.k8s.api.policy.v1beta1.IDRange h - -apiVersionZ"MVersion of the schema the FieldPath is written in terms of, defaults to "v1".² +rule`"Srule is the strategy that will dictate what FSGroup is used in the SecurityContext.² string -S - fieldPathF"9Path of the field to select in the specified API version.² +² + io.k8s.api.core.v1.NodeCondition"8NodeCondition contains condition information for a node.štypešstatus² +objectÊ´ +€ +lastHeartbeatTimek +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"0Last time we got an update on a given condition. +Œ +lastTransitionTimev +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time";Last time the condition transit from one status to another. +X +messageM"@Human readable message indicating details about last transition.² string -• -"io.k8s.api.core.v1.ObjectReferenceî "]ObjectReference contains enough information to let you inspect or modify the referred object.Ê‹ -7 - -apiVersion)"API version of the referent.² +J +reason@"3(brief) reason for the condition's last transition.² string -Ô - fieldPathÆ"¸If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.² +L +statusB"5Status of the condition, one of True, False, Unknown.² string -„ -kind|"oKind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +, +type$"Type of node condition.² string -„ -name|"oName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² -string -Ž - namespace€"sNamespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/² -string -Õ -resourceVersionÁ"³Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² -string - -uidz"mUID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids² -string -ü -#io.k8s.api.core.v1.PersistentVolumeÔ "±PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumesÊÁ - -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Š -spec -5#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec"ÇSpec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes -“ -statusˆ -7#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus"ÌStatus represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumesúX -x-kubernetes-group-version-kind53- group: "" - kind: PersistentVolume - version: v1 - -ƒ -(io.k8s.api.core.v1.PersistentVolumeClaimÖ "NPersistentVolumeClaim is a user's request for and claim to a persistent volumeÊ¢ - -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ø -specï -:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec"°Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims -† -statusû -<#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus"ºStatus represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaimsú] -x-kubernetes-group-version-kind:8- group: "" - kind: PersistentVolumeClaim - version: v1 - -„ -1io.k8s.api.core.v1.PersistentVolumeClaimConditionÎ"BPersistentVolumeClaimCondition contails details about state of pvcštypešstatusÊö -n - lastProbeTime] -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time""Last time we probed the condition. +Í ++io.k8s.api.apps.v1beta2.DeploymentCondition"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatus² +objectʱ ‘ lastTransitionTime{ 7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -X -messageM"@Human-readable message indicating details about last transition.² -string -é -reasonÞ"ÐUnique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized.² -string - -status ² -string - -type ² -string -Ü -,io.k8s.api.core.v1.PersistentVolumeClaimList« "CPersistentVolumeClaimList is a list of PersistentVolumeClaim items.šitemsÊö -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -Ø -itemsÎ"„A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúa -x-kubernetes-group-version-kind><- group: "" - kind: PersistentVolumeClaimList - version: v1 - -ž -,io.k8s.api.core.v1.PersistentVolumeClaimSpecí "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributesÊå -Ë - accessModes»"žAccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1² -arrayº - ² -string -â - -dataSourceÓ -:#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference"”This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change. -Þ - resourcesÐ -5#/definitions/io.k8s.api.core.v1.ResourceRequirements"–Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources -ƒ -selectorw -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"3A label query over volumes to consider for binding. -¤ -storageClassName"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1² -string -µ - -volumeMode¦"˜volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.² -string -j - -volumeName\"OVolumeName is the binding reference to the PersistentVolume backing this claim.² -string -“ -.io.k8s.api.core.v1.PersistentVolumeClaimStatusà"OPersistentVolumeClaimStatus is the current status of a persistent volume claim.Ê‹ -Ò - accessModesÂ"¥AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1² -arrayº - ² -string -• -capacityˆ"9Represents the actual resources of the underlying volume.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -Ç - -conditions¸"‘Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.² -arrayºC -A -?#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -R -phaseI"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"äGCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk -“ - glusterfs… -@#/definitions/io.k8s.api.core.v1.GlusterfsPersistentVolumeSource"ÀGlusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md -õ -hostPathè -5#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"®HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath -Õ -iscsiË -<#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource"ŠISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. -| -locals -2#/definitions/io.k8s.api.core.v1.LocalVolumeSource"=Local represents directly-attached storage with node affinity -î - mountOptionsÝ"ÀA list of mount options, e.g. ["ro", "soft"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options² -arrayº - ² +2 +type*"Type of deployment condition.² string -Á -nfs¹ -0#/definitions/io.k8s.api.core.v1.NFSVolumeSource"„NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs -ä - nodeAffinityÓ -3#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity"›NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume. -¼ -persistentVolumeReclaimPolicyš"ŒWhat happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming² +ª + io.k8s.api.batch.v1.JobCondition…".JobCondition describes current state of a job.štypešstatus² +objectʶ +X +messageM"@Human readable message indicating details about last transition.² string -Î -photonPersistentDiskµ -A#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"pPhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine -¥ -portworxVolume’ -5#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"YPortworxVolume represents a portworx volume attached and mounted on kubelets host machine - -quobyteƒ -4#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"KQuobyte represents a Quobyte mount on the host that shares a pod's lifetime -á -rbdÙ -:#/definitions/io.k8s.api.core.v1.RBDPersistentVolumeSource"šRBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md -¦ -scaleIOš ->#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource"XScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. -¨ -storageClassName“"…Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.² +J +reason@"3(brief) reason for the condition's last transition.² string - - storageos -@#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource"¼StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md -á - -volumeModeÒ"ÄvolumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.² +L +statusB"5Status of the condition, one of True, False, Unknown.² string -¬ - vsphereVolumeš -?#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"WVsphereVolume represents a vSphere volume attached and mounted on kubelets host machine -¸ -)io.k8s.api.core.v1.PersistentVolumeStatusŠ"DPersistentVolumeStatus is the current status of a persistent volume.ÊÀ -j -message_"RA human-readable message indicating details about why the volume is in this state.² +? +type7"*Type of job condition, Complete or Failed.² string -» -phase±"£Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase² -string -“ -reasonˆ"{Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.² -string -‹ -3io.k8s.api.core.v1.PhotonPersistentDiskVolumeSourceÓ"8Represents a Photon Controller persistent disk resource.špdIDÊŽ +p + lastProbeTime_ +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"$Last time the condition was checked. +Œ +lastTransitionTimev +7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time";Last time the condition transit from one status to another. +– +3io.k8s.api.core.v1.PhotonPersistentDiskVolumeSourceÞ"8Represents a Photon Controller persistent disk resource.špdID² +objectÊŽ À fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² string I pdIDA"4ID that identifies Photon Controller persistent disk² string -Õ -io.k8s.api.core.v1.Podº "wPod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.Êï -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Å -spec¼ -(#/definitions/io.k8s.api.core.v1.PodSpec"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -† -statusû -*#/definitions/io.k8s.api.core.v1.PodStatus"ÌMost recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúK -x-kubernetes-group-version-kind(&- group: "" - kind: Pod - version: v1 - -³ -io.k8s.api.core.v1.PodAffinity "?Pod affinity is a group of inter pod affinity scheduling rules.ÊË - -ì -/preferredDuringSchedulingIgnoredDuringExecution¸"ìThe scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.² -arrayº< -: -8#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm -Ù -.requiredDuringSchedulingIgnoredDuringExecution¦"âIf the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.PodAffinityTerm -Ù -"io.k8s.api.core.v1.PodAffinityTerm²"ßDefines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is runningš topologyKeyʾ -Ž - labelSelector} -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"9A label query over a set of resources, in this case pods. -± - -namespaces¢"…namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace"² -arrayº - ² -string -ö - topologyKeyæ"ØThis pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.² -string -Õ -"io.k8s.api.core.v1.PodAntiAffinity® "IPod anti affinity is a group of inter pod anti affinity scheduling rules.Êß - -ö -/preferredDuringSchedulingIgnoredDuringExecutionÂ"öThe scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.² -arrayº< -: -8#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm -ã -.requiredDuringSchedulingIgnoredDuringExecution°"ìIf the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.PodAffinityTerm -Œ -io.k8s.api.core.v1.PodConditionè"DPodCondition contains details for the current condition of this pod.štypešstatusÊŽ -n - lastProbeTime] -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time""Last time we probed the condition. -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -X -messageM"@Human-readable message indicating details about last transition.² -string -^ -reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² -string -· -status¬"žStatus is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² -string -“ -typeŠ"}Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² -string -Ù -io.k8s.api.core.v1.PodDNSConfigµ"_PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.ÊÐ -Ä - nameservers´"—A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.² -arrayº - ² -string -µ -options©"âA list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.² -arrayº7 -5 -3#/definitions/io.k8s.api.core.v1.PodDNSConfigOption -Î -searchesÁ"¤A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.² -arrayº - ² -string - -%io.k8s.api.core.v1.PodDNSConfigOptiont"9PodDNSConfigOption defines DNS resolver options of a pod.Ê6 - -name" Required.² -string - -value ² -string -Ó -io.k8s.api.core.v1.PodList´"PodList is a list of Pods.šitemsʺ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -œ -items’"[List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md² -arrayº( -& -$#/definitions/io.k8s.api.core.v1.Pod -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúO -x-kubernetes-group-version-kind,*- group: "" - kind: PodList - version: v1 - -ê -#io.k8s.api.core.v1.PodReadinessGateÂ":PodReadinessGate contains the reference to a pod conditionš conditionTypeÊs -q - conditionType`"SConditionType refers to a condition in the pod's condition list with matching type.² -string -Ü -%io.k8s.api.core.v1.PodSecurityContext²"ôPodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.Ê· -È -fsGroup¼int64"¦A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - -1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - -If unset, the Kubelet will not modify the ownership and permissions of any volume.² -integer -£ - -runAsGroup”int64"þThe GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.² -integer -º - runAsNonRoot©"šIndicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.² -boolean -À - runAsUser²int64"œThe UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.² -integer -… -seLinuxOptionsò -/#/definitions/io.k8s.api.core.v1.SELinuxOptions"¾The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. -ç -supplementalGroupsÐ"«A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.² -arrayº -int64² -integer -Ñ -sysctlsÅ"ŠSysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.² -arrayº+ -) -'#/definitions/io.k8s.api.core.v1.Sysctl -´F -io.k8s.api.core.v1.PodSpec•F""PodSpec is a description of a pod.š -containersÊàE -ü -activeDeadlineSecondsâint64"ÌOptional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.² -integer -g -affinity[ -)#/definitions/io.k8s.api.core.v1.Affinity".If specified, the pod's scheduling constraints -• -automountServiceAccountTokenu"gAutomountServiceAccountToken indicates whether a service account token should be automatically mounted.² -boolean -¼ - -containers­"›List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.Containerú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge - -Æ - dnsConfig¸ --#/definitions/io.k8s.api.core.v1.PodDNSConfig"†Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy. -ö - dnsPolicyè"ÚSet DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.² -string -Û -enableServiceLinksÄ"µEnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.² -boolean -» - hostAliases«"›HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.HostAliasú% -x-kubernetes-patch-merge-keyip -ú' -x-kubernetes-patch-strategymerge - -R -hostIPCG"9Use the host's ipc namespace. Optional: Default to false.² -boolean -À - hostNetwork°"¡Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.² -boolean -R -hostPIDG"9Use the host's pid namespace. Optional: Default to false.² -boolean -† -hostnamez"mSpecifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.² -string -× -imagePullSecretsÂ"¥ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod² -arrayº9 -7 -5#/definitions/io.k8s.api.core.v1.LocalObjectReferenceú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge - -ù -initContainersæ"ÔList of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/² -arrayº. -, -*#/definitions/io.k8s.api.core.v1.Containerú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge - -Ô -nodeNameÇ"¹NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.² -string -œ - nodeSelector‹"íNodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ª - ² -string² -object -Ï -priorityÂint32"¬The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.² -integer -” -priorityClassNameþ"ðIf specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.² -string -‡ -readinessGatesô"¯If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to "True" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md² -arrayº5 -3 -1#/definitions/io.k8s.api.core.v1.PodReadinessGate -á - restartPolicyÏ"ÁRestart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy² -string -’ -runtimeClassNameý"ïRuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md This is an alpha feature and may change in the future.² -string -£ - schedulerName‘"ƒIf specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.² -string -ó -securityContextß -3#/definitions/io.k8s.api.core.v1.PodSecurityContext"§SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. -“ -serviceAccount€"sDeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.² -string -Ð -serviceAccountName¹"«ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/² -string -Ì -shareProcessNamespace²"£Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.² -boolean -Î - subdomainÀ"²If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all.² -string -Í -terminationGracePeriodSeconds«int64"•Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.² -integer -q - tolerationsb"$If specified, the pod's tolerations.² -arrayº/ -- -+#/definitions/io.k8s.api.core.v1.Toleration -¬ -volumes "†List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes² -arrayº+ -) -'#/definitions/io.k8s.api.core.v1.Volumeú' -x-kubernetes-patch-merge-keyname -ú2 -x-kubernetes-patch-strategymerge,retainKeys - -ï -io.k8s.api.core.v1.PodStatusÎ"¶PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.Ê‘ -› - -conditionsŒ"xCurrent service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions² -arrayº1 -/ --#/definitions/io.k8s.api.core.v1.PodConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -¬ -containerStatuses–"ÒThe list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.ContainerStatus -g -hostIP]"PIP address of the host to which the pod is assigned. Empty if not yet scheduled.² -string -ü -initContainerStatusesâ"žThe list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status² -arrayº4 -2 -0#/definitions/io.k8s.api.core.v1.ContainerStatus -k -message`"SA human readable message indicating details about why the pod is in this condition.² -string -Í -nominatedNodeName·"©nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.² -string -Æ -phase¼ "® The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values: - -Pending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. - -More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase² -string -x -podIPo"bIP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.² -string -ƒ -qosClassö"èThe Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md² -string -v -reasonl"_A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'² -string -Û - startTimeÍ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‘RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod. -Ä -io.k8s.api.core.v1.PodTemplate¡ "IPodTemplate describes a template for creating copies of a predefined pod.Êü -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Û -templateÎ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"™Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúS -x-kubernetes-group-version-kind0.- group: "" - kind: PodTemplate - version: v1 - -³ -"io.k8s.api.core.v1.PodTemplateListŒ"*PodTemplateList is a list of PodTemplates.šitemsÊú -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -] -itemsT"List of pod templates² -arrayº0 -. -,#/definitions/io.k8s.api.core.v1.PodTemplate -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúW -x-kubernetes-group-version-kind42- group: "" - kind: PodTemplateList - version: v1 - -‰ -"io.k8s.api.core.v1.PodTemplateSpecâ"QPodTemplateSpec describes the data a pod should have when created from a templateÊ‹ -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Å -spec¼ -(#/definitions/io.k8s.api.core.v1.PodSpec"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -‹ -'io.k8s.api.core.v1.PortworxVolumeSourceß";PortworxVolumeSource represents a Portworx volume resource.švolumeIDÊ“ -Í -fsTypeÂ"´FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.² -string -x -readOnlyl"^Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.² -boolean -G -volumeID;".VolumeID uniquely identifies a Portworx volume² -string -÷ -*io.k8s.api.core.v1.PreferredSchedulingTermÈ"®An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).šweightš -preferenceÊý -‚ - -preferencet -1#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"?A node selector term, associated with the corresponding weight. -v -weightlint32"WWeight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.² -integer -ñ -io.k8s.api.core.v1.ProbeÔ "€Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.ÊÍ - -‘ -execˆ -+#/definitions/io.k8s.api.core.v1.ExecAction"YOne and only one of the following should be specified. Exec specifies the action to take. -§ -failureThreshold’int32"}Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.² -integer -k -httpGet` -.#/definitions/io.k8s.api.core.v1.HTTPGetAction".HTTPGet specifies the http request to perform. -â -initialDelaySecondsÊint32"´Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes² -integer -} - periodSecondslint32"WHow often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.² -integer - -successThreshold­int32"—Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.² -integer -‘ - tcpSocketƒ -0#/definitions/io.k8s.api.core.v1.TCPSocketAction"OTCPSocket specifies an action involving a TCP port. TCP hooks not yet supported -â -timeoutSecondsÏint32"¹Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes² -integer -… -(io.k8s.api.core.v1.ProjectedVolumeSourceØ"$Represents a projected volume sourcešsourcesʤ -¶ - defaultMode¦int32"Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.² -integer -i -sources^"list of volume projections² -arrayº5 -3 -1#/definitions/io.k8s.api.core.v1.VolumeProjection -¸ -&io.k8s.api.core.v1.QuobyteVolumeSource"‡Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.šregistryšvolumeÊë -G -group>"1Group to map volume access to Default is no group² -string -‚ -readOnlyv"hReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.² -boolean -á -registryÔ"ÆRegistry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes² -string -Q -userI" -type6")Type of replication controller condition.² -string -Ô -,io.k8s.api.core.v1.ReplicationControllerList£ "EReplicationControllerList is a collection of replication controllers.šitemsÊì -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -Î -itemsÄ"{List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² -arrayº: -8 -6#/definitions/io.k8s.api.core.v1.ReplicationController -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² +³ +fsType¨"šFilesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd² string +÷ +io.k8s.api.core.v1.SecretListÕ"SecretList is a list of Secret.šitems² +objectÊÈ ½ metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúa -x-kubernetes-group-version-kind><- group: "" - kind: ReplicationControllerList - version: v1 - -¦ -,io.k8s.api.core.v1.ReplicationControllerSpecõ -"KReplicationControllerSpec is the specification of a replication controller.ʤ - -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -  -replicas“int32"ýReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller² -integer -¸ -selector«"Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectorsª - ² -string² -object -½ -template° -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ûTemplate is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -¥ -.io.k8s.api.core.v1.ReplicationControllerStatusò"VReplicationControllerStatus represents the current status of a replication controller.šreplicasÊ‹ - -availableReplicas{int32"fThe number of available replicas (ready for at least minReadySeconds) for this replication controller.² -integer -Ž - -conditionsÿ"YRepresents the latest available observations of a replication controller's current state.² -arrayºC -A -?#/definitions/io.k8s.api.core.v1.ReplicationControllerConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -— -fullyLabeledReplicasint32"jThe number of pods that have labels matching the labels of the pod template of the replication controller.² -integer -‹ -observedGenerationuint64"`ObservedGeneration reflects the generation of the most recently observed replication controller.² -integer -c - readyReplicasRint32"=The number of ready replicas for this replication controller.² -integer -× -replicasÊint32"´Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller² -integer -½ -(io.k8s.api.core.v1.ResourceFieldSelector"ZResourceFieldSelector represents container resources (cpu, memory) and their output formatšresourceÊ¥ -Y - containerNameH";Container name: required for volumes, optional for env vars² -string - -divisor„ -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"ESpecifies the output format of the exposed resources, defaults to "1" -5 -resource)"Required: resource to select² -string -ô - - io.k8s.api.core.v1.ResourceQuotaÏ -"FResourceQuota sets aggregate quota restrictions enforced per namespaceÊ« -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -± -spec¨ -2#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec"rSpec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -Ö -statusË -4#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus"’Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusúU -x-kubernetes-group-version-kind20- group: "" - kind: ResourceQuota - version: v1 - -Ÿ -$io.k8s.api.core.v1.ResourceQuotaListö"3ResourceQuotaList is a list of ResourceQuota items.šitemsÊÙ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -» -items±"pItems is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/² -arrayº2 -0 -.#/definitions/io.k8s.api.core.v1.ResourceQuota -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúY -x-kubernetes-group-version-kind64- group: "" - kind: ResourceQuotaList - version: v1 - -Ù -$io.k8s.api.core.v1.ResourceQuotaSpec°"GResourceQuotaSpec defines the desired hard limits to enforce for Quota.Êã -ß -hardÖ"†hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -Ü - scopeSelectorÊ -.#/definitions/io.k8s.api.core.v1.ScopeSelector"—scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched. -Ÿ -scopes”"xA collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.² -arrayº - ² -string -ÿ -&io.k8s.api.core.v1.ResourceQuotaStatusÔ"FResourceQuotaStatus defines the enforced hard limits and observed use.ʈ -à -hard×"‡Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -¢ -used™"JUsed is the current observed total usage of the resource in the namespace.ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -… -'io.k8s.api.core.v1.ResourceRequirementsÙ"AResourceRequirements describes the compute resource requirements.Ê’ -ý -limitsò"¢Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object - -requests‚"²Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ª? -= -;#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity² -object -± -!io.k8s.api.core.v1.SELinuxOptions‹" using the matching operator .Ê™ -¸ -effect­"ŸEffect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.² -string -Ó -keyË"½Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.² -string -ö -operatoré"ÛOperator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.² -string -ç -tolerationSecondsÑint64"»TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.² -integer -¢ -value˜"ŠValue is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.² -string - -3io.k8s.api.core.v1.TopologySelectorLabelRequirementå"~A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.škeyšvaluesÊÒ -? -key8"+The label key that the selector applies to.² -string -Ž -valuesƒ"gAn array of string values. One value must match the label to be selected. Each entry in Values is ORed.² -arrayº - ² -string -è -'io.k8s.api.core.v1.TopologySelectorTerm¼"‘A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.ʤ -¡ -matchLabelExpressions‡"3A list of topology selector requirements by labels.² -arrayºE -C -A#/definitions/io.k8s.api.core.v1.TopologySelectorLabelRequirement -¨ -,io.k8s.api.core.v1.TypedLocalObjectReference÷"~TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.škindšnameÊå -Ú -apiGroupÍ"¿APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.² -string -B -kind:"-Kind is the type of resource being referenced² -string -B -name:"-Name is the name of resource being referenced² -string -Ó. -io.k8s.api.core.v1.Volumeµ."[Volume represents a named volume in a pod that may be accessed by any container in the pod.šnameÊÍ- -± -awsElasticBlockStore˜ -A#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"ÒAWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore -œ - azureDiskŽ -6#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"TAzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. -Ÿ - azureFile‘ -6#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource"WAzureFile represents an Azure File Service mount on the host and bind mount to the pod. -Œ -cephfs -3#/definitions/io.k8s.api.core.v1.CephFSVolumeSource"JCephFS represents a Ceph FS mount on the host that shares a pod's lifetime -Ý -cinderÒ -3#/definitions/io.k8s.api.core.v1.CinderVolumeSource"šCinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md -ˆ - configMap{ -6#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource"AConfigMap represents a configMap that should populate this volume -ž - downwardAPIŽ -8#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource"RDownwardAPI represents downward API about the pod that should populate this volume -Ö -emptyDirÉ -5#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource"EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir -ª -fc£ -/#/definitions/io.k8s.api.core.v1.FCVolumeSource"pFC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. -¬ - -flexVolume -1#/definitions/io.k8s.api.core.v1.FlexVolumeSource"hFlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. -È -flocker¼ -4#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"ƒFlocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running -¤ -gcePersistentDiskŽ ->#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"ËGCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk -É -gitRepo½ -4#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource"„GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container. -æ - glusterfsØ -6#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource"Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md -” -hostPath‡ -5#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"ÍHostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath -û -iscsiñ -2#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource"ºISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md -® -name¥"—Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names² -string -Ä -nfs¼ -0#/definitions/io.k8s.api.core.v1.NFSVolumeSource"‡NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs -¬ -persistentVolumeClaim’ -B#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource"ËPersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims -Î -photonPersistentDiskµ -A#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"pPhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine -¥ -portworxVolume’ -5#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"YPortworxVolume represents a portworx volume attached and mounted on kubelets host machine -‹ - projected~ -6#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource"DItems for all in one resources secrets, configmaps, and downward API - -quobyteƒ -4#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"KQuobyte represents a Quobyte mount on the host that shares a pod's lifetime -× -rbdÏ -0#/definitions/io.k8s.api.core.v1.RBDVolumeSource"šRBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md -œ -scaleIO -4#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource"XScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. -Å -secretº -3#/definitions/io.k8s.api.core.v1.SecretVolumeSource"‚Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret -™ - storageos‹ -6#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource"QStorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. -¬ - vsphereVolumeš -?#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"WVsphereVolume represents a vSphere volume attached and mounted on kubelets host machine -Ë -io.k8s.api.core.v1.VolumeDevice§"JvolumeDevice describes a mapping of a raw block device within a container.šnameš -devicePathÊà -l - -devicePath^"QdevicePath is the path inside of the container that the device will be mapped to.² -string -S -nameK">name must match the name of a persistentVolumeClaim in the pod² -string -ÿ -io.k8s.api.core.v1.VolumeMountÜ"@VolumeMount describes a mounting of a Volume within a container.šnameš mountPathʃ -q - mountPathd"WPath within the container at which the volume should be mounted. Must not contain ':'.² -string -Õ -mountPropagationÀ"²mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.² -string -: -name2"%This must match the Name of a Volume.² -string -t -readOnlyh"ZMounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.² -boolean -ƒ -subPathx"kPath within the volume from which the container's volume should be mounted. Defaults to "" (volume's root).² -string -† -%io.k8s.api.core.v1.VolumeNodeAffinityÜ"^VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.Êy -w -requiredk --#/definitions/io.k8s.api.core.v1.NodeSelector":Required specifies hard node constraints that must be met. -ê -#io.k8s.api.core.v1.VolumeProjectionÂ"HProjection that may be projected along with other supported volume typesÊô -t - configMapg -4#/definitions/io.k8s.api.core.v1.ConfigMapProjection"/information about the configMap data to project -z - downwardAPIk -6#/definitions/io.k8s.api.core.v1.DownwardAPIProjection"1information about the downwardAPI data to project -k -secreta -1#/definitions/io.k8s.api.core.v1.SecretProjection",information about the secret data to project -’ -serviceAccountToken{ ->#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection"9information about the serviceAccountToken data to project -È -1io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource’"%Represents a vSphere volume resource.š -volumePathÊÚ -À -fsTypeµ"§Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.² -string -x -storagePolicyIDe"XStorage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.² -string -V -storagePolicyNameA"4Storage Policy Based Management (SPBM) profile name.² -string -C - -volumePath5"(Path that identifies vSphere volume vmdk² -string -Ï -*io.k8s.api.core.v1.WeightedPodAffinityTerm "vThe weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)šweightšpodAffinityTermʉ - -podAffinityTerm| -0#/definitions/io.k8s.api.core.v1.PodAffinityTerm"HRequired. A pod affinity term, associated with the corresponding weight. -u -weightkint32"Vweight associated with matching the corresponding podAffinityTerm, in the range 1-100.² -integer -• -/io.k8s.api.extensions.v1beta1.AllowedFlexVolumeá"AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.šdriverÊE -C -driver9",driver is the name of the Flexvolume driver.² -string -½ --io.k8s.api.extensions.v1beta1.AllowedHostPath‹"ÎAllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.ʶ -­ - -pathPrefixž"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path. - -Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`² -string -ƒ -readOnlyw"iwhen set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.² -boolean -æ -'io.k8s.api.extensions.v1beta1.DaemonSetº "¹DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.Ê™ - -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Í -specÄ -9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec"†The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -¨ -status -;#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus"ÝThe current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusú^ -x-kubernetes-group-version-kind;9- group: extensions - kind: DaemonSet - version: v1beta1 - -Ì -0io.k8s.api.extensions.v1beta1.DaemonSetCondition—"IDaemonSetCondition describes the state of a DaemonSet at a certain point.štypešstatusʸ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -1 -type)"Type of DaemonSet condition.² -string -Ñ -+io.k8s.api.extensions.v1beta1.DaemonSetList¡"-DaemonSetList is a collection of daemon sets.šitemsÊ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -g -items^"A list of daemon sets.² -arrayº9 -7 -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúb -x-kubernetes-group-version-kind?=- group: extensions - kind: DaemonSetList - version: v1beta1 - -ÿ -+io.k8s.api.extensions.v1beta1.DaemonSetSpecÏ "3DaemonSetSpec is the specification of a daemon set.štemplateÊ‹ -’ -minReadySecondsþint32"èThe minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).² -integer -¿ -revisionHistoryLimit¦int32"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.² -integer -Ç -selectorº -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"õA label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -„ -template÷ -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÂAn object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -¿ -templateGeneration¨int64"’DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.² -integer -ž -updateStrategy‹ -C#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy"DAn update strategy to replace existing DaemonSet pods with new pods. -þ --io.k8s.api.extensions.v1beta1.DaemonSetStatusÌ">DaemonSetStatus represents the current status of a daemon set.šcurrentNumberScheduledšnumberMisscheduledšdesiredNumberScheduledš numberReadyʳ -ä -collisionCountÑint32"»Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.² -integer -€ - -conditionsñ"LRepresents the latest available observations of a DaemonSet's current state.² -arrayºB -@ ->#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -ã -currentNumberScheduledÈint32"²The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -ô -desiredNumberScheduledÙint32"ÃThe total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -Ê -numberAvailable¶int32" The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -Ý -numberMisscheduledÆint32"°The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/² -integer -˜ - numberReadyˆint32"sThe number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.² -integer -Å -numberUnavailable¯int32"™The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)² -integer -l -observedGenerationVint64"AThe most recent generation observed by the daemon set controller.² -integer -l -updatedNumberScheduledRint32"=The total number of nodes that are running updated daemon pod² -integer -Ê -5io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategyÊŒ - - rollingUpdate‹ -B#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet"ERolling update config params. Present only if type = "RollingUpdate". -j -typeb"UType of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete.² -string -™ - -(io.k8s.api.extensions.v1beta1.Deploymentì "ÄDEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.Ê¿ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object metadata. -~ -specv -:#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec"8Specification of the desired behavior of the Deployment. -z -statusp -<#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus"0Most recently observed status of the Deployment.ú_ -x-kubernetes-group-version-kind<:- group: extensions - kind: Deployment - version: v1beta1 - -È -1io.k8s.api.extensions.v1beta1.DeploymentCondition’"KDeploymentCondition describes the state of a deployment at a certain point.štypešstatusʱ -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -v -lastUpdateTimed -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time")The last time this condition was updated. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -2 -type*"Type of deployment condition.² -string - -,io.k8s.api.extensions.v1beta1.DeploymentListÐ"(DeploymentList is a list of Deployments.šitemsÊ´ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -s -itemsj"!Items is the list of Deployments.² -arrayº: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -b -metadataV -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard list metadata.úc -x-kubernetes-group-version-kind@>- group: extensions - kind: DeploymentList - version: v1beta1 - - -0io.k8s.api.extensions.v1beta1.DeploymentRollbackØ"XDEPRECATED. DeploymentRollback stores the information required to rollback a deployment.šnameš -rollbackToÊü -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -H -name@"3Required: This must match the Name of a deployment.² -string -s - -rollbackToe -:#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"'The config of this deployment rollback. -` -updatedAnnotationsJ"-The annotations to be updated to a deploymentª - ² -string² -objectúg -x-kubernetes-group-version-kindDB- group: extensions - kind: DeploymentRollback - version: v1beta1 - -õ -,io.k8s.api.extensions.v1beta1.DeploymentSpecÄ"NDeploymentSpec is the specification of the desired behavior of the Deployment.štemplateÊå -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -w -pausedm"_Indicates that the deployment is paused and will not be processed by the deployment controller.² -boolean -í -progressDeadlineSecondsÑint32"»The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means "no deadline".² -integer -’ -replicas…int32"pNumber of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.² -integer -£ -revisionHistoryLimitŠint32"ôThe number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means "retaining all old RelicaSets".² -integer -¯ - -rollbackTo  -:#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig"bDEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done. -Ì -selector¿ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"{Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. -Ä -strategy· ->#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy"FThe deployment strategy to use to replace existing pods with new ones.ú, -x-kubernetes-patch-strategy  retainKeys - -q -templatee -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"1Template describes the pods that will be created. -Ž -.io.k8s.api.extensions.v1beta1.DeploymentStatusÛ "HDeploymentStatus is the most recently observed status of the Deployment.Ê -Š -availableReplicasuint32"`Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.² -integer -Þ -collisionCountËint32"µCount of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.² -integer -‚ - -conditionsó"MRepresents the latest available observations of a deployment's current state.² -arrayºC -A -?#/definitions/io.k8s.api.extensions.v1beta1.DeploymentConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -` -observedGenerationJint64"5The generation observed by the deployment controller.² -integer -] - readyReplicasLint32"7Total number of ready pods targeted by this deployment.² -integer -ƒ -replicaswint32"bTotal number of non-terminated pods targeted by this deployment (their labels match the selector).² -integer -Á -unavailableReplicas©int32"“Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.² -integer -Œ -updatedReplicasyint32"dTotal number of non-terminated pods targeted by this deployment that have the desired template spec.² -integer -ž -0io.k8s.api.extensions.v1beta1.DeploymentStrategyé"HDeploymentStrategy describes how to replace existing pods with new ones.Ê› -® - rollingUpdateœ -C#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment"URolling update config params. Present only if DeploymentStrategyType = RollingUpdate. -h -type`"SType of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.² -string -Ç -4io.k8s.api.extensions.v1beta1.FSGroupStrategyOptionsŽ"ŸFSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.Êè -û -rangesð"©ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.² -arrayº7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.IDRange -h -rule`"Srule is the strategy that will dictate what FSGroup is used in the SecurityContext.² -string -… --io.k8s.api.extensions.v1beta1.HTTPIngressPathÓ"uHTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.šbackendÊÎ -¤ -backend˜ -:#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"ZBackend defines the referenced service endpoint to which the traffic will be forwarded to. -¤ -path›"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.² -string -ø -2io.k8s.api.extensions.v1beta1.HTTPIngressRuleValueÁ"£HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.špathsÊ -Œ -paths‚"4A collection of paths that map requests to backends.² -arrayº? -= -;#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath -œ -+io.k8s.api.extensions.v1beta1.HostPortRangeì"ÍHostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.šminšmaxÊŒ -C -max<int32"'max is the end of the range, inclusive.² -integer -E -min>int32")min is the start of the range, inclusive.² -integer -µ -%io.k8s.api.extensions.v1beta1.IDRange‹"mIDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.šminšmaxÊŒ -C -max<int64"'max is the end of the range, inclusive.² -integer -E -min>int64")min is the start of the range, inclusive.² -integer -¡ -%io.k8s.api.extensions.v1beta1.IPBlock÷"ªDEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.šcidrÊ¿ -c -cidr["NCIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"² -string -× -exceptÌ"¯Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range² -arrayº - ² -string -Ò -%io.k8s.api.extensions.v1beta1.Ingress¨ "€Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.Ê -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Ì -specà -7#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec"‡Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -Ò -statusÇ -9#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus"‰Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusú\ -x-kubernetes-group-version-kind97- group: extensions - kind: Ingress - version: v1beta1 - -á -,io.k8s.api.extensions.v1beta1.IngressBackend°"DIngressBackend describes all endpoints for a given service and port.š serviceNameš servicePortÊÊ -I - serviceName:"-Specifies the name of the referenced service.² -string -} - servicePortn -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"-Specifies the port of the referenced service. -Ð -)io.k8s.api.extensions.v1beta1.IngressList¢"'IngressList is a collection of Ingress.šitemsÊŠ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -l -itemsc"Items is the list of Ingress.² -arrayº7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¾ -metadata± -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataú` -x-kubernetes-group-version-kind=;- group: extensions - kind: IngressList - version: v1beta1 - -“ -)io.k8s.api.extensions.v1beta1.IngressRuleå"ìIngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.Êò -£ -hostš"ŒHost is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the - IP in the Spec of the parent Ingress. -2. The `:` delimiter is not respected because ports are not allowed. - Currently the port of an Ingress is implicitly :80 for http and - :443 for https. -Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.² -string -J -httpB -@#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue - -)io.k8s.api.extensions.v1beta1.IngressSpecâ";IngressSpec describes the Ingress the user wishes to exist.Ê¡ -º -backend® -:#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend"ïA default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default. -Ø -rulesÎ"ƒA list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.² -arrayº; -9 -7#/definitions/io.k8s.api.extensions.v1beta1.IngressRule -† -tlsþ"´TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.² -arrayº: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS -ö -+io.k8s.api.extensions.v1beta1.IngressStatusÆ"8IngressStatus describe the current state of the Ingress.ʈ -… - loadBalanceru -3#/definitions/io.k8s.api.core.v1.LoadBalancerStatus">LoadBalancer contains the current status of the load-balancer. -„ -(io.k8s.api.extensions.v1beta1.IngressTLS×"MIngressTLS describes the transport layer security associated with an Ingress.Ê„ -š -hosts"óHosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.² -arrayº - ² -string -ä - -secretNameÕ"ÇSecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.² -string -ï -+io.k8s.api.extensions.v1beta1.NetworkPolicy¿ "¬DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Podsʧ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -† -spec~ -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec"=Specification of the desired behavior for this NetworkPolicy.úb -x-kubernetes-group-version-kind?=- group: extensions - kind: NetworkPolicy - version: v1beta1 - -  - -5io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRuleæ "ÇDEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8ʘ -´ -portsª"ÙList of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort -Þ -to×"†List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer -Ù -6io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRulež "ÞDEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.ʹ -Ý -fromÔ"ƒList of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer -Ö -portsÌ"ûList of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort -ß -/io.k8s.api.extensions.v1beta1.NetworkPolicyList« "¢DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.šitemsÊ‘ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -w -itemsn""Items is a list of schema objects.² -arrayº= -; -9#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúf -x-kubernetes-group-version-kindCA- group: extensions - kind: NetworkPolicyList - version: v1beta1 - -‹ - -/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer× "jDEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.Êç -° -ipBlock¤ -3#/definitions/io.k8s.api.extensions.v1beta1.IPBlock"mIPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be. -Ú -namespaceSelectorÄ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿSelects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces. - -If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector. -Ô - podSelectorÄ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿThis is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods. - -If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace. -ý -/io.k8s.api.extensions.v1beta1.NetworkPolicyPortÉ"jDEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.ÊÙ -Æ -port½ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"ûIf specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched. - -protocol€"sOptional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.² -string -à -/io.k8s.api.extensions.v1beta1.NetworkPolicySpec"jDEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.š podSelectorÊ‘ -Ô -egressÉ"òList of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8² -arrayºG -E -C#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule -¶ -ingressª"ÒList of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).² -arrayºH -F -D#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule -Ý - podSelectorÍ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ˆSelects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. -ž - policyTypesŽ"ñList of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8² -arrayº - ² -string -÷ -/io.k8s.api.extensions.v1beta1.PodSecurityPolicyà "ÅPodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.ÊŽ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -n -specf -A#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec"!spec defines the policy enforced.úf -x-kubernetes-group-version-kindCA- group: extensions - kind: PodSecurityPolicy - version: v1beta1 - -Ë -3io.k8s.api.extensions.v1beta1.PodSecurityPolicyList“ "‚PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.šitemsÊ• -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -{ -itemsr""items is a list of schema objects.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúj -x-kubernetes-group-version-kindGE- group: extensions - kind: PodSecurityPolicyList - version: v1beta1 - -ó) -3io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec»)"wPodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.šseLinuxš runAsUseršsupplementalGroupsšfsGroupʉ( -¤ -allowPrivilegeEscalation‡"yallowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.² -boolean -² -allowedCapabilitiesš"ýallowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.² -arrayº - ² -string - -allowedFlexVolumes«"ÚallowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.² -arrayºA -? -=#/definitions/io.k8s.api.extensions.v1beta1.AllowedFlexVolume -Ë -allowedHostPaths¶"hallowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.² -arrayº? -= -;#/definitions/io.k8s.api.extensions.v1beta1.AllowedHostPath -ù -allowedProcMountTypesß"ÂAllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.² -arrayº - ² -string -î -allowedUnsafeSysctlsÕ"¸allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. - -Examples: e.g. "foo/*" allows "foo/bar", "foo/baz", etc. e.g. "foo.*" allows "foo.bar", "foo.baz", etc.² -arrayº - ² -string -’ -defaultAddCapabilities÷"ÚdefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.² -arrayº - ² -string -· -defaultAllowPrivilegeEscalation“"„defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.² -boolean - -forbiddenSysctlsø"ÛforbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - -Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.² -arrayº - ² -string -© -fsGroup -B#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions"WfsGroup is the strategy that will dictate what fs group is used by the SecurityContext. -d -hostIPCY"KhostIPC determines if the policy allows the use of HostIPC in the pod spec.² -boolean -p - hostNetworka"ShostNetwork determines if the policy allows the use of HostNetwork in the pod spec.² -boolean -d -hostPIDY"KhostPID determines if the policy allows the use of HostPID in the pod spec.² -boolean -  - hostPorts’"FhostPorts determines which host port ranges are allowed to be exposed.² -arrayº= -; -9#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange -_ - -privilegedQ"Cprivileged determines if a pod can request to be run as privileged.² -boolean -ö -readOnlyRootFilesystemÛ"ÌreadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.² -boolean -Ç -requiredDropCapabilitiesª"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.² -arrayº - ² -string -¸ - -runAsGroup© -E#/definitions/io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions"ßRunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled. -± - runAsUser£ -D#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions"[runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. -¡ -seLinux• -B#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions"OseLinux is the strategy that will dictate the allowable labels that may be set. -Ö -supplementalGroups¿ -M#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions"nsupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. -® -volumes¢"…volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.² -arrayº - ² -string -¾ -(io.k8s.api.extensions.v1beta1.ReplicaSet‘"ÝDEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.ÊË -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -· -metadataª -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"èIf the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ï -specæ -:#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec"§Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status -Á -status¶ -<#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus"õStatus is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-statusú_ -x-kubernetes-group-version-kind<:- group: extensions - kind: ReplicaSet - version: v1beta1 - -Ö -1io.k8s.api.extensions.v1beta1.ReplicaSetCondition "LReplicaSetCondition describes the state of a replica set at a certain point.štypešstatusʾ -• -lastTransitionTime -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"DThe last time the condition transitioned from one status to another. -Y -messageN"AA human readable message indicating details about the transition.² -string -F -reason<"/The reason for the condition's last transition.² -string -L -statusB"5Status of the condition, one of True, False, Unknown.² -string -3 -type+"Type of replica set condition.² -string -³ -,io.k8s.api.extensions.v1beta1.ReplicaSetList‚ ".ReplicaSetList is a collection of ReplicaSets.šitemsÊà -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string - -items¸"oList of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller² -arrayº: -8 -6#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kindsúc -x-kubernetes-group-version-kind@>- group: extensions - kind: ReplicaSetList - version: v1beta1 - -× - -,io.k8s.api.extensions.v1beta1.ReplicaSetSpec¦ -"4ReplicaSetSpec is the specification of a ReplicaSet.Êì -ƒ -minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² -integer -¡ -replicas”int32"þReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -© -selectorœ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"×Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors -“ -template† -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÑTemplate is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template -Õ -.io.k8s.api.extensions.v1beta1.ReplicaSetStatus¢"?ReplicaSetStatus represents the current status of a ReplicaSet.šreplicasÊÒ -… -availableReplicaspint32"[The number of available replicas (ready for at least minReadySeconds) for this replica set.² -integer -ƒ - -conditionsô"NRepresents the latest available observations of a replica set's current state.² -arrayºC -A -?#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -‹ -fullyLabeledReplicassint32"^The number of pods that have labels matching the labels of the pod template of the replicaset.² -integer - -observedGenerationiint64"TObservedGeneration reflects the generation of the most recently observed ReplicaSet.² -integer -X - readyReplicasGint32"2The number of ready replicas for this replica set.² -integer -Ø -replicasËint32"µReplicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² -integer -« -,io.k8s.api.extensions.v1beta1.RollbackConfig{" DEPRECATED.Êk -i -revision]int64"HThe revision to rollback to. If set to 0, rollback to the last revision.² -integer -— -4io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSetÞ"BSpec to control the desired behavior of daemon set rolling update.Ê– -“ -maxUnavailable€ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"¾The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. -® -5io.k8s.api.extensions.v1beta1.RollingUpdateDeploymentô "7Spec to control the desired behavior of rolling update.Ê· -å -maxSurgeØ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"–The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. -Ì -maxUnavailable¹ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"÷The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. -å -7io.k8s.api.extensions.v1beta1.RunAsGroupStrategyOptions©"©RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.šruleÊò - -rangesö"¯ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.² -arrayº7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.IDRange -l -ruled"Wrule is the strategy that will dictate the allowable RunAsGroup values that may be set.² -string -á -6io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions¦"§RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.šruleÊñ - -rangesö"¯ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.² -arrayº7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.IDRange -k -rulec"Vrule is the strategy that will dictate the allowable RunAsUser values that may be set.² -string -¦ -4io.k8s.api.extensions.v1beta1.SELinuxStrategyOptionsí"£SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.šruleʼ -a -ruleY"Lrule is the strategy that will dictate the allowable labels that may be set.² -string -Ö -seLinuxOptionsà -/#/definitions/io.k8s.api.core.v1.SELinuxOptions"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ -ë - -#io.k8s.api.extensions.v1beta1.Scaleà -",represents a scaling request for a resource.Ê´ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¿ -metadata² -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"qStandard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. -Ä -spec» -5#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. -Í -status -7#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus"†current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.úZ -x-kubernetes-group-version-kind75- group: extensions - kind: Scale - version: v1beta1 - -µ -'io.k8s.api.extensions.v1beta1.ScaleSpec‰"/describes the attributes of a scale subresourceÊU -S -replicasGint32"2desired number of instances for the scaled object.² -integer -‡ -)io.k8s.api.extensions.v1beta1.ScaleStatusÙ"5represents the current status of a scale subresource.šreplicasÊ“ -Z -replicasNint32"9actual number of observed instances of the scaled object.² -integer -­ -selector "‚label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectorsª - ² -string² -object -„ -targetSelectorñ"ãlabel selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors² -string -ˆ -?io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptionsÄ"µSupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.ʈ - -ranges„"½ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.² -arrayº7 -5 -3#/definitions/io.k8s.api.extensions.v1beta1.IDRange -t -rulel"_rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.² -string -Å - io.k8s.api.networking.v1.IPBlock "ÓIPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.šcidrÊ¿ -c -cidr["NCIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"² -string -× -exceptÌ"¯Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range² -arrayº - ² -string -ƒ -&io.k8s.api.networking.v1.NetworkPolicyØ"INetworkPolicy describes what network traffic is allowed for a set of PodsÊ¢ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - -specy -8#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec"=Specification of the desired behavior for this NetworkPolicy.úd -x-kubernetes-group-version-kindA?- group: networking.k8s.io - kind: NetworkPolicy - version: v1 - -š -0io.k8s.api.networking.v1.NetworkPolicyEgressRuleå"ÐNetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8ÊŽ -¯ -ports¥"ÙList of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² -arrayº< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort -Ù -toÒ"†List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.² -arrayº< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer -  -1io.k8s.api.networking.v1.NetworkPolicyIngressRuleê"´NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.ʯ -Ø -fromÏ"ƒList of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.² -arrayº< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer -Ñ -portsÇ"ûList of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.² -arrayº< -: -8#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort -é -*io.k8s.api.networking.v1.NetworkPolicyListº"5NetworkPolicyList is a list of NetworkPolicy objects.šitemsÊŒ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -r -itemsi""Items is a list of schema objects.² -arrayº8 -6 -4#/definitions/io.k8s.api.networking.v1.NetworkPolicy -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúh -x-kubernetes-group-version-kindEC- group: networking.k8s.io - kind: NetworkPolicyList - version: v1 - -€ - -*io.k8s.api.networking.v1.NetworkPolicyPeerÑ "iNetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowedÊâ -« -ipBlockŸ -.#/definitions/io.k8s.api.networking.v1.IPBlock"mIPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be. -Ú -namespaceSelectorÄ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿSelects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces. - -If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector. -Ô - podSelectorÄ -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"ÿThis is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods. - -If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace. -Û -*io.k8s.api.networking.v1.NetworkPolicyPort¬"6NetworkPolicyPort describes a port to allow traffic onÊð -é -portà -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"žThe port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. - -protocolu"hThe protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.² -string -¹ -*io.k8s.api.networking.v1.NetworkPolicySpecŠ"?NetworkPolicySpec provides the specification of a NetworkPolicyš podSelectorÊ· -Ï -egressÄ"òList of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8² -arrayºB -@ ->#/definitions/io.k8s.api.networking.v1.NetworkPolicyEgressRule -ã -ingress×"„List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)² -arrayºC -A -?#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule -Û - podSelectorË -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"†Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. -ž - policyTypesŽ"ñList of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8² -arrayº - ² -string -Ï -+io.k8s.api.policy.v1beta1.AllowedFlexVolumeŸ"LAllowedFlexVolume represents a single Flexvolume that is allowed to be used.šdriverÊE -C -driver9",driver is the name of the Flexvolume driver.² -string -ú -)io.k8s.api.policy.v1beta1.AllowedHostPathÌ"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.ʶ -­ - -pathPrefixž"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path. - -Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`² -string -ƒ -readOnlyw"iwhen set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.² -boolean -® -"io.k8s.api.policy.v1beta1.Eviction‡ "ÒEviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.ÊÒ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -r - deleteOptionsa -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"DeleteOptions may be provided -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -€ -metadatat -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"3ObjectMeta describes the pod that is being evicted.úY -x-kubernetes-group-version-kind64- group: policy - kind: Eviction - version: v1beta1 - -ø -0io.k8s.api.policy.v1beta1.FSGroupStrategyOptionsÃ"YFSGroupStrategyOptions defines the strategy type and options used to create the strategy.Êä -÷ -rangesì"©ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.² -arrayº3 -1 -/#/definitions/io.k8s.api.policy.v1beta1.IDRange -h -rule`"Srule is the strategy that will dictate what FSGroup is used in the SecurityContext.² -string -Û -'io.k8s.api.policy.v1beta1.HostPortRange¯"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.šminšmaxÊŒ -C -max<int32"'max is the end of the range, inclusive.² -integer -E -min>int32")min is the start of the range, inclusive.² -integer -ú -!io.k8s.api.policy.v1beta1.IDRangeÔ"6IDRange provides a min/max of an allowed range of IDs.šminšmaxÊŒ -C -max<int64"'max is the end of the range, inclusive.² -integer -E -min>int64")min is the start of the range, inclusive.² -integer -Ê --io.k8s.api.policy.v1beta1.PodDisruptionBudget˜ "hPodDisruptionBudget is an object to define the max disruption that can be caused to a collection of podsÊà -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta - -spec„ -?#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec"ASpecification of the desired behavior of the PodDisruptionBudget. -ˆ -status~ -A#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus"9Most recently observed status of the PodDisruptionBudget.úd -x-kubernetes-group-version-kindA?- group: policy - kind: PodDisruptionBudget - version: v1beta1 - -ì -1io.k8s.api.policy.v1beta1.PodDisruptionBudgetList¶"@PodDisruptionBudgetList is a collection of PodDisruptionBudgets.šitemsÊý -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -U -itemsL² -arrayº? -= -;#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúh -x-kubernetes-group-version-kindEC- group: policy - kind: PodDisruptionBudgetList - version: v1beta1 - -Ú -1io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec¤"BPodDisruptionBudgetSpec is a description of a PodDisruptionBudget.ÊÜ -ð -maxUnavailableÝ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"›An eviction is allowed if at most "maxUnavailable" pods selected by "selector" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with "minAvailable". -Ç - minAvailable¶ -=#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString"ôAn eviction is allowed if at least "minAvailable" pods selected by "selector" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying "100%". -œ -selector -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector"KLabel query over pods whose evictions are managed by the disruption budget. -Û -3io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus£ "ŠPodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.šdisruptionsAllowedšcurrentHealthyšdesiredHealthyš expectedPodsÊÌ -E -currentHealthy3int32"current number of healthy pods² -integer -M -desiredHealthy;int32"&minimum desired number of healthy pods² -integer +æ +3io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus® "ŠPodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.šdisruptionsAllowedšcurrentHealthyšdesiredHealthyš expectedPods² +objectÊÌ  disruptedPodsû"¯DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.ª; 9 @@ -31812,3117 +38346,32 @@ M ä observedGenerationÍint64"·Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.² integer -ª -+io.k8s.api.policy.v1beta1.PodSecurityPolicyú"„PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.ÊŠ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -j -specb -=#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicySpec"!spec defines the policy enforced.úb -x-kubernetes-group-version-kind?=- group: policy - kind: PodSecurityPolicy - version: v1beta1 - -ù -/io.k8s.api.policy.v1beta1.PodSecurityPolicyListÅ"=PodSecurityPolicyList is a list of PodSecurityPolicy objects.šitemsÊ‘ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -w -itemsn""items is a list of schema objects.² -arrayº= -; -9#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -º -metadata­ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"nStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúf -x-kubernetes-group-version-kindCA- group: policy - kind: PodSecurityPolicyList - version: v1beta1 - -Š) -/io.k8s.api.policy.v1beta1.PodSecurityPolicySpecÖ("2PodSecurityPolicySpec defines the policy enforced.šseLinuxš runAsUseršsupplementalGroupsšfsGroupÊé' -¤ -allowPrivilegeEscalation‡"yallowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.² -boolean -² -allowedCapabilitiesš"ýallowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.² -arrayº - ² -string -¾ -allowedFlexVolumes§"ÚallowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.² -arrayº= -; -9#/definitions/io.k8s.api.policy.v1beta1.AllowedFlexVolume -Ç -allowedHostPaths²"hallowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.² -arrayº; -9 -7#/definitions/io.k8s.api.policy.v1beta1.AllowedHostPath -ù -allowedProcMountTypesß"ÂAllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.² -arrayº - ² -string -î -allowedUnsafeSysctlsÕ"¸allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. - -Examples: e.g. "foo/*" allows "foo/bar", "foo/baz", etc. e.g. "foo.*" allows "foo.bar", "foo.baz", etc.² -arrayº - ² -string -’ -defaultAddCapabilities÷"ÚdefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.² -arrayº - ² -string -· -defaultAllowPrivilegeEscalation“"„defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.² -boolean - -forbiddenSysctlsø"ÛforbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - -Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.² -arrayº - ² -string -¥ -fsGroup™ ->#/definitions/io.k8s.api.policy.v1beta1.FSGroupStrategyOptions"WfsGroup is the strategy that will dictate what fs group is used by the SecurityContext. -d -hostIPCY"KhostIPC determines if the policy allows the use of HostIPC in the pod spec.² -boolean -p - hostNetworka"ShostNetwork determines if the policy allows the use of HostNetwork in the pod spec.² -boolean -d -hostPIDY"KhostPID determines if the policy allows the use of HostPID in the pod spec.² -boolean -œ - hostPortsŽ"FhostPorts determines which host port ranges are allowed to be exposed.² -arrayº9 -7 -5#/definitions/io.k8s.api.policy.v1beta1.HostPortRange -_ - -privilegedQ"Cprivileged determines if a pod can request to be run as privileged.² -boolean -ö -readOnlyRootFilesystemÛ"ÌreadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.² -boolean -Ç -requiredDropCapabilitiesª"requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.² -arrayº - ² -string -´ - -runAsGroup¥ -A#/definitions/io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions"ßRunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled. -­ - runAsUserŸ -@#/definitions/io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions"[runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - -seLinux‘ ->#/definitions/io.k8s.api.policy.v1beta1.SELinuxStrategyOptions"OseLinux is the strategy that will dictate the allowable labels that may be set. -Ò -supplementalGroups» -I#/definitions/io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions"nsupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. -® -volumes¢"…volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.² -arrayº - ² -string -“ -3io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptionsÛ"`RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.šruleÊî -ý -rangesò"¯ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.² -arrayº3 -1 -/#/definitions/io.k8s.api.policy.v1beta1.IDRange -l -ruled"Wrule is the strategy that will dictate the allowable RunAsGroup values that may be set.² -string - -2io.k8s.api.policy.v1beta1.RunAsUserStrategyOptionsÙ"_RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.šruleÊí -ý -rangesò"¯ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.² -arrayº3 -1 -/#/definitions/io.k8s.api.policy.v1beta1.IDRange -k -rulec"Vrule is the strategy that will dictate the allowable RunAsUser values that may be set.² -string -Û -0io.k8s.api.policy.v1beta1.SELinuxStrategyOptions¦"]SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.šruleʼ -a -ruleY"Lrule is the strategy that will dictate the allowable labels that may be set.² -string -Ö -seLinuxOptionsà -/#/definitions/io.k8s.api.core.v1.SELinuxOptions"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ -® -;io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptionsî"dSupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.Ê„ -‹ -ranges€"½ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.² -arrayº3 -1 -/#/definitions/io.k8s.api.policy.v1beta1.IDRange -t -rulel"_rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.² -string -¯ -"io.k8s.api.rbac.v1.AggregationRuleˆ"VAggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRoleʬ -© -clusterRoleSelectors"¼ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added² -arrayºD -B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector -• -io.k8s.api.rbac.v1.ClusterRoleò -"ˆClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.šrulesÊî -© -aggregationRule• -0#/definitions/io.k8s.api.rbac.v1.AggregationRule"àAggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller. -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -{ -rulesr"4Rules holds all the PolicyRules for this ClusterRole² -arrayº/ -- -+#/definitions/io.k8s.api.rbac.v1.PolicyRuleúj -x-kubernetes-group-version-kindGE- group: rbac.authorization.k8s.io - kind: ClusterRole - version: v1 - -ß - -%io.k8s.api.rbac.v1.ClusterRoleBindingµ -"ŸClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.šroleRefÊ‘ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. - -roleRef¶ -(#/definitions/io.k8s.api.rbac.v1.RoleRef"‰RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. -„ -subjectsx"=Subjects holds references to the objects the role applies to.² -arrayº, -* -(#/definitions/io.k8s.api.rbac.v1.Subjectúq -x-kubernetes-group-version-kindNL- group: rbac.authorization.k8s.io - kind: ClusterRoleBinding - version: v1 - -« -)io.k8s.api.rbac.v1.ClusterRoleBindingListý"=ClusterRoleBindingList is a collection of ClusterRoleBindingsšitemsʺ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -u -itemsl"&Items is a list of ClusterRoleBindings² -arrayº7 -5 -3#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úu -x-kubernetes-group-version-kindRP- group: rbac.authorization.k8s.io - kind: ClusterRoleBindingList - version: v1 - - -"io.k8s.api.rbac.v1.ClusterRoleListÚ"/ClusterRoleList is a collection of ClusterRolesšitemsʬ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -g -items^"Items is a list of ClusterRoles² -arrayº0 -. -,#/definitions/io.k8s.api.rbac.v1.ClusterRole -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.ún -x-kubernetes-group-version-kindKI- group: rbac.authorization.k8s.io - kind: ClusterRoleList - version: v1 - -ò - -io.k8s.api.rbac.v1.PolicyRuleÐ -"¡PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.šverbsÊ  -ó - apiGroupså"ÈAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.² -arrayº - ² -string -¼ -nonResourceURLs¨"‹NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.² -arrayº - ² -string -¨ - resourceNames–"zResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.² -arrayº - ² -string -† - resourcesy"]Resources is a list of resources this rule applies to. ResourceAll represents all resources.² -arrayº - ² -string -´ -verbsª"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.² -arrayº - ² -string -³ -io.k8s.api.rbac.v1.Role—"hRole is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.šrulesÊ» -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -t -rulesk"-Rules holds all the PolicyRules for this Role² -arrayº/ -- -+#/definitions/io.k8s.api.rbac.v1.PolicyRuleúc -x-kubernetes-group-version-kind@>- group: rbac.authorization.k8s.io - kind: Role - version: v1 - -‡ -io.k8s.api.rbac.v1.RoleBindingä "·RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.šroleRefʯ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -à -roleRefÔ -(#/definitions/io.k8s.api.rbac.v1.RoleRef"§RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. -„ -subjectsx"=Subjects holds references to the objects the role applies to.² -arrayº, -* -(#/definitions/io.k8s.api.rbac.v1.Subjectúj -x-kubernetes-group-version-kindGE- group: rbac.authorization.k8s.io - kind: RoleBinding - version: v1 - - -"io.k8s.api.rbac.v1.RoleBindingListÚ"/RoleBindingList is a collection of RoleBindingsšitemsʬ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -g -items^"Items is a list of RoleBindings² -arrayº0 -. -,#/definitions/io.k8s.api.rbac.v1.RoleBinding -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.ún -x-kubernetes-group-version-kindKI- group: rbac.authorization.k8s.io - kind: RoleBindingList - version: v1 - -× -io.k8s.api.rbac.v1.RoleList·"!RoleList is a collection of RolesšitemsÊž -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -Y -itemsP"Items is a list of Roles² -arrayº) -' -%#/definitions/io.k8s.api.rbac.v1.Role -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úg -x-kubernetes-group-version-kindDB- group: rbac.authorization.k8s.io - kind: RoleList - version: v1 - -× -io.k8s.api.rbac.v1.RoleRef¸"?RoleRef contains information that points to the role being usedšapiGroupškindšnameÊÚ -P -apiGroupD"7APIGroup is the group for the resource being referenced² -string -B -kind:"-Kind is the type of resource being referenced² -string -B -name:"-Name is the name of resource being referenced² -string -¤ -io.k8s.api.rbac.v1.Subject…"ÆSubject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.škindšnameʪ -à -apiGroup¶"¨APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects.² -string -à -kind×"ÉKind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.² -string -9 -name1"$Name of the object being referenced.² -string -à - namespaceµ"§Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.² -string -´ -'io.k8s.api.rbac.v1beta1.AggregationRuleˆ"VAggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRoleʬ -© -clusterRoleSelectors"¼ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added² -arrayºD -B -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector -ª -#io.k8s.api.rbac.v1beta1.ClusterRole‚ "ˆClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.šrulesÊù -® -aggregationRuleš -5#/definitions/io.k8s.api.rbac.v1beta1.AggregationRule"àAggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller. -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -€ -rulesw"4Rules holds all the PolicyRules for this ClusterRole² -arrayº4 -2 -0#/definitions/io.k8s.api.rbac.v1beta1.PolicyRuleúo -x-kubernetes-group-version-kindLJ- group: rbac.authorization.k8s.io - kind: ClusterRole - version: v1beta1 - -ó - -*io.k8s.api.rbac.v1beta1.ClusterRoleBindingÄ -"ŸClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.šroleRefÊ› -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -Ç -roleRef» --#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"‰RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. -‰ -subjects}"=Subjects holds references to the objects the role applies to.² -arrayº1 -/ --#/definitions/io.k8s.api.rbac.v1beta1.Subjectúv -x-kubernetes-group-version-kindSQ- group: rbac.authorization.k8s.io - kind: ClusterRoleBinding - version: v1beta1 - -º -.io.k8s.api.rbac.v1beta1.ClusterRoleBindingList‡"=ClusterRoleBindingList is a collection of ClusterRoleBindingsšitemsÊ¿ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -z -itemsq"&Items is a list of ClusterRoleBindings² -arrayº< -: -8#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úz -x-kubernetes-group-version-kindWU- group: rbac.authorization.k8s.io - kind: ClusterRoleBindingList - version: v1beta1 - - -'io.k8s.api.rbac.v1beta1.ClusterRoleListä"/ClusterRoleList is a collection of ClusterRolesšitemsʱ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -l -itemsc"Items is a list of ClusterRoles² -arrayº5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.ús -x-kubernetes-group-version-kindPN- group: rbac.authorization.k8s.io - kind: ClusterRoleList - version: v1beta1 - -ã -"io.k8s.api.rbac.v1beta1.PolicyRule¼ "¡PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.šverbsÊŒ - -ó - apiGroupså"ÈAPIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.² -arrayº - ² -string -¼ -nonResourceURLs¨"‹NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.² -arrayº - ² -string -¨ - resourceNames–"zResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.² -arrayº - ² -string -ò - resourcesä"ÇResources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.² -arrayº - ² -string -´ -verbsª"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.² -arrayº - ² -string - -io.k8s.api.rbac.v1beta1.Role¡"hRole is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.šrulesÊÀ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -y -rulesp"-Rules holds all the PolicyRules for this Role² -arrayº4 -2 -0#/definitions/io.k8s.api.rbac.v1beta1.PolicyRuleúh -x-kubernetes-group-version-kindEC- group: rbac.authorization.k8s.io - kind: Role - version: v1beta1 - -› -#io.k8s.api.rbac.v1beta1.RoleBindingó "·RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.šroleRefʹ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -h -metadata\ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"Standard object's metadata. -å -roleRefÙ --#/definitions/io.k8s.api.rbac.v1beta1.RoleRef"§RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. -‰ -subjects}"=Subjects holds references to the objects the role applies to.² -arrayº1 -/ --#/definitions/io.k8s.api.rbac.v1beta1.Subjectúo -x-kubernetes-group-version-kindLJ- group: rbac.authorization.k8s.io - kind: RoleBinding - version: v1beta1 - - -'io.k8s.api.rbac.v1beta1.RoleBindingListä"/RoleBindingList is a collection of RoleBindingsšitemsʱ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -l -itemsc"Items is a list of RoleBindings² -arrayº5 -3 -1#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.ús -x-kubernetes-group-version-kindPN- group: rbac.authorization.k8s.io - kind: RoleBindingList - version: v1beta1 - -æ - io.k8s.api.rbac.v1beta1.RoleListÁ"!RoleList is a collection of RolesšitemsÊ£ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -^ -itemsU"Items is a list of Roles² -arrayº. -, -*#/definitions/io.k8s.api.rbac.v1beta1.Role -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -f -metadataZ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"Standard object's metadata.úl -x-kubernetes-group-version-kindIG- group: rbac.authorization.k8s.io - kind: RoleList - version: v1beta1 - -Ü -io.k8s.api.rbac.v1beta1.RoleRef¸"?RoleRef contains information that points to the role being usedšapiGroupškindšnameÊÚ -P -apiGroupD"7APIGroup is the group for the resource being referenced² -string -B -kind:"-Kind is the type of resource being referenced² -string -B -name:"-Name is the name of resource being referenced² -string -© -io.k8s.api.rbac.v1beta1.Subject…"ÆSubject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.škindšnameʪ -à -apiGroup¶"¨APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects.² -string -à -kind×"ÉKind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.² -string -9 -name1"$Name of the object being referenced.² -string -à - namespaceµ"§Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.² -string -¥ -+io.k8s.api.scheduling.v1beta1.PriorityClassõ "{PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.švalueÊ€ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -‹ - description|"odescription is an arbitrary string that usually provides guidelines on when this priority class should be used.² -string -¦ - globalDefault”"…globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.² -boolean -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -¨ -valuežint32"ˆThe value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.² -integerúi -x-kubernetes-group-version-kindFD- group: scheduling.k8s.io - kind: PriorityClass - version: v1beta1 - -ú -/io.k8s.api.scheduling.v1beta1.PriorityClassListÆ"6PriorityClassList is a collection of priority classes.šitemsÊ’ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -y -itemsp"$items is the list of PriorityClasses² -arrayº= -; -9#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¹ -metadata¬ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúm -x-kubernetes-group-version-kindJH- group: scheduling.k8s.io - kind: PriorityClassList - version: v1beta1 - -… -"io.k8s.api.storage.v1.StorageClassÞ"ãStorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. - -StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.š provisionerʃ -n -allowVolumeExpansionV"HAllowVolumeExpansion shows whether the storage class allow volume expand² -boolean -Š -allowedTopologiesô"«Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.² -arrayº9 -7 -5#/definitions/io.k8s.api.core.v1.TopologySelectorTerm -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ì - mountOptionsÛ"¾Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.² -arrayº - ² -string -‘ - -parameters‚"eParameters holds the parameters for the provisioner that should create volumes of this storage class.ª - ² -string² -object -N - provisioner?"2Provisioner indicates the type of the provisioner.² -string -— - reclaimPolicy…"xDynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.² -string -ø -volumeBindingModeâ"ÔVolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.² -stringú` -x-kubernetes-group-version-kind=;- group: storage.k8s.io - kind: StorageClass - version: v1 - -Ü -&io.k8s.api.storage.v1.StorageClassList±"4StorageClassList is a collection of storage classes.šitemsʈ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -o -itemsf"#Items is the list of StorageClasses² -arrayº4 -2 -0#/definitions/io.k8s.api.storage.v1.StorageClass -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¹ -metadata¬ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúd -x-kubernetes-group-version-kindA?- group: storage.k8s.io - kind: StorageClassList - version: v1 - -Í -&io.k8s.api.storage.v1.VolumeAttachment¢ "—VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node. - -VolumeAttachment objects are non-namespaced.šspecÊ– -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¾ -metadata± -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -¤ -spec› -8#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSpec"_Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system. -Ð -statusÅ -:#/definitions/io.k8s.api.storage.v1.VolumeAttachmentStatus"†Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.úd -x-kubernetes-group-version-kindA?- group: storage.k8s.io - kind: VolumeAttachment - version: v1 - -ø -*io.k8s.api.storage.v1.VolumeAttachmentListÉ"AVolumeAttachmentList is a collection of VolumeAttachment objects.šitemsÊ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -v -itemsm"&Items is the list of VolumeAttachments² -arrayº8 -6 -4#/definitions/io.k8s.api.storage.v1.VolumeAttachment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¹ -metadata¬ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúh -x-kubernetes-group-version-kindEC- group: storage.k8s.io - kind: VolumeAttachmentList - version: v1 - -ã -,io.k8s.api.storage.v1.VolumeAttachmentSource²"ÝVolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.ÊO +E +currentHealthy3int32"current number of healthy pods² +integer M -persistentVolumeName5"(Name of the persistent volume to attach.² -string -ÿ -*io.k8s.api.storage.v1.VolumeAttachmentSpecÐ"HVolumeAttachmentSpec is the specification of a VolumeAttachment request.šattacheršsourcešnodeNameÊã -— -attacherŠ"}Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().² -string -H -nodeName<"/The node that the volume should be attached to.² -string -} -sources -:#/definitions/io.k8s.api.storage.v1.VolumeAttachmentSource"5Source represents the volume that should be attached. -Ñ -,io.k8s.api.storage.v1.VolumeAttachmentStatus "CVolumeAttachmentStatus is the status of a VolumeAttachment request.šattachedÊÌ -æ - attachErrorÖ -/#/definitions/io.k8s.api.storage.v1.VolumeError"¢The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher. -± -attached¤"•Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.² -boolean -à -attachmentMetadata¬"ŽUpon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.ª - ² -string² +desiredHealthy;int32"&minimum desired number of healthy pods² +integer +Ú ++io.k8s.apimachinery.pkg.apis.meta.v1.Fieldsª"œFields stores a set of fields in a data structure like a Trie. To understand how this is used, see: https://github.com/kubernetes-sigs/structured-merge-diff² object -æ - detachErrorÖ -/#/definitions/io.k8s.api.storage.v1.VolumeError"¢The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher. -„ -!io.k8s.api.storage.v1.VolumeErrorÞ"DVolumeError captures an error encountered during a volume operation.Ê” -­ -message¡"“String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.² -string -b -timeZ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Time the error was encountered. - -'io.k8s.api.storage.v1beta1.StorageClassã"ãStorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. - -StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.š provisionerʃ -n -allowVolumeExpansionV"HAllowVolumeExpansion shows whether the storage class allow volume expand² -boolean -Š -allowedTopologiesô"«Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.² -arrayº9 -7 -5#/definitions/io.k8s.api.core.v1.TopologySelectorTerm -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -À -metadata³ -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"rStandard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ì - mountOptionsÛ"¾Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.² -arrayº - ² -string -‘ - -parameters‚"eParameters holds the parameters for the provisioner that should create volumes of this storage class.ª - ² -string² -object -N - provisioner?"2Provisioner indicates the type of the provisioner.² -string -— - reclaimPolicy…"xDynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.² -string -ø -volumeBindingModeâ"ÔVolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.² -stringúe -x-kubernetes-group-version-kindB@- group: storage.k8s.io - kind: StorageClass - version: v1beta1 - -ë -+io.k8s.api.storage.v1beta1.StorageClassList»"4StorageClassList is a collection of storage classes.šitemsÊ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -t -itemsk"#Items is the list of StorageClasses² -arrayº9 -7 -5#/definitions/io.k8s.api.storage.v1beta1.StorageClass -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¹ -metadata¬ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúi -x-kubernetes-group-version-kindFD- group: storage.k8s.io - kind: StorageClassList - version: v1beta1 - -á -+io.k8s.api.storage.v1beta1.VolumeAttachment± "—VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node. - -VolumeAttachment objects are non-namespaced.šspecÊ  -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¾ -metadata± -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"pStandard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -© -spec  -=#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSpec"_Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system. -Õ -statusÊ -?#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentStatus"†Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.úi -x-kubernetes-group-version-kindFD- group: storage.k8s.io - kind: VolumeAttachment - version: v1beta1 - -‡ -/io.k8s.api.storage.v1beta1.VolumeAttachmentListÓ"AVolumeAttachmentList is a collection of VolumeAttachment objects.šitemsÊ” -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -{ -itemsr"&Items is the list of VolumeAttachments² -arrayº= -; -9#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -¹ -metadata¬ -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"mStandard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadataúm -x-kubernetes-group-version-kindJH- group: storage.k8s.io - kind: VolumeAttachmentList - version: v1beta1 - -è -1io.k8s.api.storage.v1beta1.VolumeAttachmentSource²"ÝVolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.ÊO -M -persistentVolumeName5"(Name of the persistent volume to attach.² -string -Š -/io.k8s.api.storage.v1beta1.VolumeAttachmentSpecÖ"HVolumeAttachmentSpec is the specification of a VolumeAttachment request.šattacheršsourcešnodeNameÊé -— -attacherŠ"}Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().² -string -H -nodeName<"/The node that the volume should be attached to.² -string -‚ -sourcex -?#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSource"5Source represents the volume that should be attached. -à -1io.k8s.api.storage.v1beta1.VolumeAttachmentStatusª"CVolumeAttachmentStatus is the status of a VolumeAttachment request.šattachedÊÖ -ë - attachErrorÛ -4#/definitions/io.k8s.api.storage.v1beta1.VolumeError"¢The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher. -± -attached¤"•Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.² -boolean -à -attachmentMetadata¬"ŽUpon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.ª - ² -string² -object -ë - detachErrorÛ -4#/definitions/io.k8s.api.storage.v1beta1.VolumeError"¢The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher. -‰ -&io.k8s.api.storage.v1beta1.VolumeErrorÞ"DVolumeError captures an error encountered during a volume operation.Ê” -­ -message¡"“String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.² -string -b -timeZ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Time the error was encountered. -« -\io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinitionÊ"KCustomResourceColumnDefinition specifies a column for server side printing.šnameštypešJSONPathÊà -R -JSONPathF"9JSONPath is a simple JSON path, i.e. with array notation.² -string -W - descriptionH";description is a human readable description of this column.² -string -µ -formatª"œformat is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.² -string -B -name:"-name is a human readable name for the column.² -string -… -priorityøint32"âpriority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.² -integer -¬ -type£"•type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.² -string -Ë -Vio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversionð"MCustomResourceConversion describes how to convert different versions of a CR.šstrategyÊ’ -¿ -strategy²"¤`strategy` specifies the conversion strategy. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the CR. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information is needed for this option.² -string -Í -webhookClientConfigµ -_#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.WebhookClientConfig"Ñ`webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. - -Vio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition² -"”CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format <.spec.name>.<.spec.group>.šspecÊ– -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -® -spec¥ -h#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec"9Spec describes how the user wants the resources to appear -º -status¯ -j#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus"AStatus indicates the actual state of the CustomResourceDefinitionúw -x-kubernetes-group-version-kindTR- group: apiextensions.k8s.io - kind: CustomResourceDefinition - version: v1beta1 - -¶ -_io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionConditionÒ"YCustomResourceDefinitionCondition contains details for the current condition of this pod.štypešstatusÊã -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -X -messageM"@Human-readable message indicating details about last transition.² -string -^ -reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² -string -Z -statusP"CStatus is the status of the condition. Can be True, False, Unknown.² -string -7 -type/""Type is the type of the condition.² -string -Š -Zio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList«"KCustomResourceDefinitionList is a list of CustomResourceDefinition objects.šitemsÊÔ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -« -items¡"*Items individual CustomResourceDefinitions² -arrayºh -f -d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaú{ -x-kubernetes-group-version-kindXV- group: apiextensions.k8s.io - kind: CustomResourceDefinitionList - version: v1beta1 - -â -[io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames‚"XCustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinitionšpluralškindÊ” -{ - -categoriesm"QCategories is a list of grouped resources custom resources belong to (e.g. 'all')² -arrayº - ² -string -i -kinda"TKind is the serialized kind of the resource. It is normally CamelCase and singular.² -string -p -listKindd"WListKind is the serialized kind of the list for this resource. Defaults to List.² -string -Á -plural¶"¨Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.² -string -q - -shortNamesc"GShortNames are short names for the resource. It must be all lowercase.² -arrayº - ² -string -€ -singulart"gSingular is the singular name of the resource. It must be all lowercase Defaults to lowercased ² -string -¶ -Zio.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec×"PCustomResourceDefinitionSpec describes how a user wants their resource to appearšgroupšnamesšscopeÊé -ü -additionalPrinterColumnsß"áAdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Optional, the global columns for all versions. Top-level and per-version columns are mutually exclusive.² -arrayºn -l -j#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition -¬ - -conversion -d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceConversion"5`conversion` defines conversion settings for the CRD. -A -group8"+Group is the group this resource belongs in² -string -° -names¦ -i#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"9Names are the names used to describe this custom resource -r -scopei"\Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced² -string -© - subresources˜ -f#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources"­Subresources describes the subresources for CustomResource Optional, the global subresources for all versions. Top-level and per-version subresources are mutually exclusive. -ª - -validation› -d#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation"²Validation describes the validation methods for CustomResources Optional, the global validation schema for all versions. Top-level and per-version schemas are mutually exclusive. -æ -versionÚ"ÌVersion is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.² -string -Œ -versionsÿ"€Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² -arrayºo -m -k#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion -« -\io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatusÊ"RCustomResourceDefinitionStatus indicates the state of the CustomResourceDefinitionš -conditionsš acceptedNamesšstoredVersionsÊÄ -ø - acceptedNamesæ -i#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames"yAcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec. -Ý - -conditionsÎ"NConditions indicate state for particular aspects of a CustomResourceDefinition² -arrayºq -o -m#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition -æ -storedVersionsÓ"¶StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.² -arrayº - ² -string -å -]io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersionƒ" ::= - (Note that may be empty, from the "" case in .) - ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= "+" | "-" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei - (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html) - ::= m | "" | k | M | G | T | P | E - (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) - ::= "e" | "E" - -No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities. - -When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized. - -Before serializing, Quantity will be put in "canonical form". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that: - a. No precision is lost - b. No fractional digits will be emitted - c. The exponent (or suffix) is as large as possible. -The sign will be omitted unless the number is negative. - -Examples: - 1.5 will be serialized as "1500m" - 1.5Gi will be serialized as "1536Mi" - -Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise. - -Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.) - -This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.² -string -Û --io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup©"YAPIGroup contains the name, the supported versions, and the preferred version of a group.šnamešversionsÊå -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -3 -name+"name is the name of the group.² -string -Ç -preferredVersion² -K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery"cpreferredVersion is the version preferred by the API server, which probably is the storage version. -è -serverAddressByClientCIDRsÉ"éa map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.² -arrayºP -N -L#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR - -versions"2versions are the versions supported in this group.² -arrayºO -M -K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscoveryúP -x-kubernetes-group-version-kind-+- group: "" - kind: APIGroup - version: v1 - -À -1io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupListŠ"RAPIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.šgroupsÊÒ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -u -groupsk"groups is a list of APIGroup.² -arrayº? -= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -stringúT -x-kubernetes-group-version-kind1/- group: "" - kind: APIGroupList - version: v1 - -À -0io.k8s.apimachinery.pkg.apis.meta.v1.APIResource‹ "JAPIResource specifies the name of a resource and whether it is namespaced.šnameš singularNameš -namespacedškindšverbsʉ -} - -categorieso"Scategories is a list of the grouped resources this resource belongs to (e.g. 'all')² -arrayº - ² -string -Ç -group½"¯group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".² -string -d -kind\"Okind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')² -string -= -name5"(name is the plural name of the resource.² -string -T - -namespacedF"8namespaced indicates if a resource is namespaced or not.² -boolean -h - -shortNamesZ">shortNames is a list of suggested short names of the resource.² -arrayº - ² -string -ž - singularName"ÿsingularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.² -string -« -verbs¡"„verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)² -arrayº - ² -string -‰ -versioný"ïversion is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)".² -string -Á -4io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceListˆ "¦APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.š groupVersionš resourcesÊæ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -_ - groupVersionO"BgroupVersion is the group and version this APIResourceList is for.² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -§ - resources™"Hresources contains the name of the resources and if they are namespaced.² -arrayºB -@ ->#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceúW -x-kubernetes-group-version-kind42- group: "" - kind: APIResourceList - version: v1 - -è -0io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions³ "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.šversionsšserverAddressByClientCIDRsÊ¡ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -è -serverAddressByClientCIDRsÉ"éa map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.² -arrayºP -N -L#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR -Y -versionsM"1versions are the api versions that are available.² -arrayº - ² -stringúS -x-kubernetes-group-version-kind0.- group: "" - kind: APIVersions - version: v1 - -° -2io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptionsù":DeleteOptions may be provided when deleting an API object.Êé -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -  -dryRun•"øWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed² -arrayº - ² -string -Þ -gracePeriodSecondsÇint64"±The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.² -integer -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -Ä -orphanDependents¯" Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.² -boolean - - preconditions° -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions"lMust be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned. -û -propagationPolicyå"×Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.² -stringúÌ -x-kubernetes-group-version-kind¨ ¥ - group: "" - kind: DeleteOptions - version: v1 -- group: admission.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: admissionregistration.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: apiextensions.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: apiregistration.k8s.io - kind: DeleteOptions - version: v1 -- group: apiregistration.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: apps - kind: DeleteOptions - version: v1 -- group: apps - kind: DeleteOptions - version: v1beta1 -- group: apps - kind: DeleteOptions - version: v1beta2 -- group: authentication.k8s.io - kind: DeleteOptions - version: v1 -- group: authorization.k8s.io - kind: DeleteOptions - version: v1 -- group: autoscaling - kind: DeleteOptions - version: v1 -- group: autoscaling - kind: DeleteOptions - version: v2beta2 -- group: batch - kind: DeleteOptions - version: v1 -- group: batch - kind: DeleteOptions - version: v1beta1 -- group: batch - kind: DeleteOptions - version: v2alpha1 -- group: certificates.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: extensions - kind: DeleteOptions - version: v1beta1 -- group: networking.k8s.io - kind: DeleteOptions - version: v1 -- group: policy - kind: DeleteOptions - version: v1beta1 -- group: rbac.authorization.k8s.io - kind: DeleteOptions - version: v1 -- group: rbac.authorization.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: scheduling.k8s.io - kind: DeleteOptions - version: v1beta1 -- group: storage.k8s.io - kind: DeleteOptions - version: v1 -- group: storage.k8s.io - kind: DeleteOptions - version: v1beta1 - -Ý -=io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery›"wGroupVersion contains the "group/version" and "version" string of a version. It is made a struct to keep extensibility.š groupVersionšversionÊ… -i - groupVersionY"LgroupVersion specifies the API group and version in the form "group/version"² -string -— -version‹"~version specifies the version in the form of "version". This is to save the clients the trouble of splitting the GroupVersion.² -string -è -0io.k8s.apimachinery.pkg.apis.meta.v1.Initializer³"KInitializer is information about an initializer that has not yet completed.šnameÊ\ -Z -nameR"Ename of the process that is responsible for initializing this object.² -string -¬ -1io.k8s.apimachinery.pkg.apis.meta.v1.Initializersö"3Initializers tracks the progress of initialization.špendingʳ -Ì -pendingÀ"šPending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.² -arrayºB -@ ->#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializerú' -x-kubernetes-patch-merge-keyname -ú' -x-kubernetes-patch-strategymerge - -á -resultÖ -9#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"˜If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. -… -2io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorÎ"ËA label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.Êü -É -matchExpressions´"VmatchExpressions is a list of label selector requirements. The requirements are ANDed.² -arrayºO -M -K#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement -­ - matchLabels"ÿmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.ª - ² -string² -object -” -=io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirementÒ"xA label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.škeyšoperatorÊà -š -key’"2key is the label key that the selector applies to.² -stringú& -x-kubernetes-patch-merge-keykey -ú' -x-kubernetes-patch-strategymerge - -Ž -operator"toperator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.² -string -’ -values‡"êvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.² -arrayº - ² -string -Ä - --io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta’ -"£ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.Êè -ä -continue×"Écontinue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.² -string -” -resourceVersion€"òString that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² -string -h -selfLink\"OselfLink is a URL representing this object. Populated by the system. Read-only.² -string -ˆ -.io.k8s.apimachinery.pkg.apis.meta.v1.MicroTimeV date-time">MicroTime is version of Time with microsecond level precision.² -string -€< -/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMetaÌ;"lObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.ÊÚ: -À - annotations°"’Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotationsª - ² -string² -object - - clusterName"ÿThe name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.² -string -Ý -creationTimestampÇ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"‹CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC. - -Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -ð -deletionGracePeriodSecondsÑint64"»Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.² -integer -“ -deletionTimestampý - -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"Á -DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested. - -Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata -Ô - -finalizersÅ"þMust be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.² -arrayº - ² -stringú' -x-kubernetes-patch-strategymerge - -¥ - generateName”"†GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - -If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - -Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency² -string -’ - -generationƒint64"nA sequence number representing a specific generation of the desired state. Populated by the system. Read-only.² -integer -½ - initializers¬ -?#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers"èAn initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - -When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. -‚ -labels÷"ÙMap of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labelsª - ² -string² -object -õ -nameì"ÞName must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names² -string -œ - namespaceŽ"€Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - -Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces² -string -ø -ownerReferencesä"¼List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.² -arrayºE -C -A#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReferenceú& -x-kubernetes-patch-merge-keyuid -ú' -x-kubernetes-patch-strategymerge - -€ -resourceVersionì"ÞAn opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. - -Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency² -string -h -selfLink\"OSelfLink is a URL representing this object. Populated by the system. Read-only.² -string -³ -uid«"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. - -Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids² -string -é -3io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference±"ÇOwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.š -apiVersionškindšnamešuidÊ -7 - -apiVersion)"API version of the referent.² -string -Î -blockOwnerDeletion·"¨If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.² -boolean -V - -controllerH":If true, this reference points to the managing controller.² -boolean -„ -kind|"oKind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -l -named"WName of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names² -string -i -uidb"UUID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids² -string -ˆ -*io.k8s.apimachinery.pkg.apis.meta.v1.PatchZ"XPatch is provided to give a concrete name and type to the Kubernetes PATCH request body. -Å -2io.k8s.apimachinery.pkg.apis.meta.v1.PreconditionsŽ"ZPreconditions must be fulfilled before an operation (update, delete, etc.) is carried out.Ê/ -- -uid&"Specifies the target UID.² -string -š ->io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR×"ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.š -clientCIDRš serverAddressʦ -€ - -clientCIDRr"eThe CIDR with which clients can match their IP to figure out the server address that they should use.² -string -  - serverAddressŽ"€Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.² -string -Ü -+io.k8s.apimachinery.pkg.apis.meta.v1.Status¬"CStatus is a return value for calls that don't return other objects.Ê’ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -V -codeNint32"9Suggested HTTP return code for this status, 0 if not set.² -integer -¬ -details  -@#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails"ÛExtended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -U -messageJ"=A human-readable description of the status of this operation.² -string -½ -metadata° -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"qStandard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds -ä -reasonÙ"ËA machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.² -string -¯ -status¤"–Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status² -stringúN -x-kubernetes-group-version-kind+)- group: "" - kind: Status - version: v1 - -û -0io.k8s.apimachinery.pkg.apis.meta.v1.StatusCauseÆ"xStatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.ÊÈ -¶ -field¬"žThe field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional. - -Examples: - "name" - the field "name" on the current resource - "items[0].name" - the field "name" on the first array entry in "items"² -string - -messaget"gA human-readable description of the cause of the error. This field may be presented as-is to a reader.² -string -‹ -reason€"sA machine-readable description of the cause of the error. If this value is empty there is no information available.² -string -É -2io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails’ "éStatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.Ê¢ -à -causesÕ"ƒThe Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.² -arrayºB -@ ->#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause -b -groupY"LThe group attribute of the resource associated with the status StatusReason.² -string -ü -kindó"åThe kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -— -nameŽ"€The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).² -string -— -retryAfterSecondsint32"ëIf specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.² -integer -¥ -uid"UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids² -string -ò -)io.k8s.apimachinery.pkg.apis.meta.v1.TimeÄ date-time"«Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.² -string -Ü -/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent¨"6Event represents a single event to a watched resource.štypešobjectÊ× -¿ -object´ -:#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension"õObject is: - * If Type is Added or Modified: the new state of the object. - * If Type is Deleted: the state of the object immediately before deletion. - * If Type is Error: *Status is recommended; other types may make sense - depending on context. - -type ² -stringú -x-kubernetes-group-version-kindÝ Ú - group: "" - kind: WatchEvent - version: v1 -- group: admission.k8s.io - kind: WatchEvent - version: v1beta1 -- group: admissionregistration.k8s.io - kind: WatchEvent - version: v1beta1 -- group: apiextensions.k8s.io - kind: WatchEvent - version: v1beta1 -- group: apiregistration.k8s.io - kind: WatchEvent - version: v1 -- group: apiregistration.k8s.io - kind: WatchEvent - version: v1beta1 -- group: apps - kind: WatchEvent - version: v1 -- group: apps - kind: WatchEvent - version: v1beta1 -- group: apps - kind: WatchEvent - version: v1beta2 -- group: authentication.k8s.io - kind: WatchEvent - version: v1 -- group: authorization.k8s.io - kind: WatchEvent - version: v1 -- group: autoscaling - kind: WatchEvent - version: v1 -- group: autoscaling - kind: WatchEvent - version: v2beta2 -- group: batch - kind: WatchEvent - version: v1 -- group: batch - kind: WatchEvent - version: v1beta1 -- group: batch - kind: WatchEvent - version: v2alpha1 -- group: certificates.k8s.io - kind: WatchEvent - version: v1beta1 -- group: extensions - kind: WatchEvent - version: v1beta1 -- group: networking.k8s.io - kind: WatchEvent - version: v1 -- group: policy - kind: WatchEvent - version: v1beta1 -- group: rbac.authorization.k8s.io - kind: WatchEvent - version: v1 -- group: rbac.authorization.k8s.io - kind: WatchEvent - version: v1beta1 -- group: scheduling.k8s.io - kind: WatchEvent - version: v1beta1 -- group: storage.k8s.io - kind: WatchEvent - version: v1 -- group: storage.k8s.io - kind: WatchEvent - version: v1beta1 - -Å -,io.k8s.apimachinery.pkg.runtime.RawExtension” "¹ -RawExtension is used to hold extensions in external versions. - -To use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types. - -// Internal package: type MyAPIObject struct { - runtime.TypeMeta `json:",inline"` - MyPlugin runtime.Object `json:"myPlugin"` -} type PluginA struct { - AOption string `json:"aOption"` -} - -// External package: type MyAPIObject struct { - runtime.TypeMeta `json:",inline"` - MyPlugin runtime.RawExtension `json:"myPlugin"` -} type PluginA struct { - AOption string `json:"aOption"` -} - -// On the wire, the JSON will look something like this: { - "kind":"MyAPIObject", - "apiVersion":"v1", - "myPlugin": { - "kind":"PluginA", - "aOption":"foo", - }, -} - -So what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)šRawÊO -M -RawFbyte"3Raw is the underlying serialization of this object.² -string - -/io.k8s.apimachinery.pkg.util.intstr.IntOrStringŽ int-or-string"ñIntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.² -string -Í -$io.k8s.apimachinery.pkg.version.Info¤"TInfo contains versioning information. how we'll want to distribute that information.šmajoršminorš -gitVersionš gitCommitš gitTreeStateš buildDateš goVersionšcompileršplatformÊä - - buildDate ² -string - -compiler ² -string - - gitCommit ² -string - - gitTreeState ² -string - - -gitVersion ² -string - - goVersion ² -string - -major ² -string - -minor ² -string - -platform ² -string -ó -=io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService± "[APIService represents a server for a particular GroupVersion. Name must be "version.group".Êç -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -¢ -spec™ -O#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec"FSpec contains information for locating and communicating with a server -— -statusŒ -Q#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus"7Status contains derived information about an API serverúf -x-kubernetes-group-version-kindCA- group: apiregistration.k8s.io - kind: APIService - version: v1 - - -Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition÷štypešstatusÊã -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -X -messageM"@Human-readable message indicating details about last transition.² -string -^ -reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² -string -Z -statusP"CStatus is the status of the condition. Can be True, False, Unknown.² -string -7 -type/""Type is the type of the condition.² -string -ý -Aio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList·"/APIServiceList is a list of APIService objects.šitemsÊ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -e -items\² -arrayºO -M -K#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúj -x-kubernetes-group-version-kindGE- group: apiregistration.k8s.io - kind: APIServiceList - version: v1 - -ì -Aio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec¦"£APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.šservicešgroupPriorityMinimumšversionPriorityÊÉ -Æ -caBundle¹byte"¥CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.² -string -C -group:"-Group is the API group name this server hosts² -string -± -groupPriorityMinimum˜int32"‚GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s² -integer -Í -insecureSkipTLSVerify³"¤InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.² -boolean -ó -serviceç -Q#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference"‘Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. -X -versionM"@Version is the API version this server hosts. For example, "v1"² -string -ä -versionPriorityÐint32"ºVersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² -integer -€ -Cio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus¸"AAPIServiceStatus contains derived information about an API serverÊñ -î - -conditionsß"$Current service state of apiService.² -arrayºX -V -T#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - +¶ + +!io.k8s.api.apps.v1.ReplicaSetSpec +"4ReplicaSetSpec is the specification of a ReplicaSet.šselector² +objectÊÀ +“ +template† +0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"ÑTemplate is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template ƒ -Cio.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference»";ServiceReference holds a reference to Service.legacy.k8s.ioÊ{ -4 -name,"Name is the name of the service² -string -C - namespace6")Namespace is the namespace of the service² -string -‡ - -Bio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceÀ "[APIService represents a server for a particular GroupVersion. Name must be "version.group".Êñ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -K -metadata? -=#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta -§ -specž -T#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec"FSpec contains information for locating and communicating with a server -œ -status‘ -V#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus"7Status contains derived information about an API serverúk -x-kubernetes-group-version-kindHF- group: apiregistration.k8s.io - kind: APIService - version: v1beta1 - -Ç -Kio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition÷štypešstatusÊã -‘ -lastTransitionTime{ -7#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"@Last time the condition transitioned from one status to another. -X -messageM"@Human-readable message indicating details about last transition.² -string -^ -reasonT"GUnique, one-word, CamelCase reason for the condition's last transition.² -string -Z -statusP"CStatus is the status of the condition. Can be True, False, Unknown.² -string -7 -type/""Type is the type of the condition.² -string -Œ -Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceListÁ"/APIServiceList is a list of APIService objects.šitemsÊ’ -­ - -apiVersionž"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources² -string -j -itemsa² -arrayºT -R -P#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService -¨ -kindŸ"‘Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds² -string -I -metadata= -;#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMetaúo -x-kubernetes-group-version-kindLJ- group: apiregistration.k8s.io - kind: APIServiceList - version: v1beta1 - -ö -Fio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec«"£APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.šservicešgroupPriorityMinimumšversionPriorityÊÎ -Æ -caBundle¹byte"¥CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.² -string -C -group:"-Group is the API group name this server hosts² -string -± -groupPriorityMinimum˜int32"‚GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s² +minReadySecondsïint32"ÙMinimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)² integer -Í -insecureSkipTLSVerify³"¤InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.² -boolean -ø -serviceì -V#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference"‘Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. -X -versionM"@Version is the API version this server hosts. For example, "v1"² -string -ä -versionPriorityÐint32"ºVersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.² +¡ +replicas”int32"þReplicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller² integer -Š -Hio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus½"AAPIServiceStatus contains derived information about an API serverÊö -ó - -conditionsä"$Current service state of apiService.² -arrayº] -[ -Y#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceConditionú' -x-kubernetes-patch-merge-keytype -ú' -x-kubernetes-patch-strategymerge - -ˆ -Hio.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference»";ServiceReference holds a reference to Service.legacy.k8s.ioÊ{ -4 -name,"Name is the name of the service² -string -C - namespace6")Namespace is the namespace of the service² -string -Ú -=io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource˜ -A#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"SDeprecated. Please use io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource instead. -‘ -%io.k8s.kubernetes.pkg.api.v1.Affinityh -)#/definitions/io.k8s.api.core.v1.Affinity";Deprecated. Please use io.k8s.api.core.v1.Affinity instead. -£ -+io.k8s.kubernetes.pkg.api.v1.AttachedVolumet -/#/definitions/io.k8s.api.core.v1.AttachedVolume"ADeprecated. Please use io.k8s.api.core.v1.AttachedVolume instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource‚ -6#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"HDeprecated. Please use io.k8s.api.core.v1.AzureDiskVolumeSource instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource‚ -6#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource"HDeprecated. Please use io.k8s.api.core.v1.AzureFileVolumeSource instead. -Ž -$io.k8s.kubernetes.pkg.api.v1.Bindingf -(#/definitions/io.k8s.api.core.v1.Binding":Deprecated. Please use io.k8s.api.core.v1.Binding instead. - -)io.k8s.kubernetes.pkg.api.v1.Capabilitiesp --#/definitions/io.k8s.api.core.v1.Capabilities"?Deprecated. Please use io.k8s.api.core.v1.Capabilities instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource| -3#/definitions/io.k8s.api.core.v1.CephFSVolumeSource"EDeprecated. Please use io.k8s.api.core.v1.CephFSVolumeSource instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource| -3#/definitions/io.k8s.api.core.v1.CinderVolumeSource"EDeprecated. Please use io.k8s.api.core.v1.CinderVolumeSource instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.ComponentCondition| -3#/definitions/io.k8s.api.core.v1.ComponentCondition"EDeprecated. Please use io.k8s.api.core.v1.ComponentCondition instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.ComponentStatusv -0#/definitions/io.k8s.api.core.v1.ComponentStatus"BDeprecated. Please use io.k8s.api.core.v1.ComponentStatus instead. -² -0io.k8s.kubernetes.pkg.api.v1.ComponentStatusList~ -4#/definitions/io.k8s.api.core.v1.ComponentStatusList"FDeprecated. Please use io.k8s.api.core.v1.ComponentStatusList instead. -” -&io.k8s.kubernetes.pkg.api.v1.ConfigMapj -*#/definitions/io.k8s.api.core.v1.ConfigMap"Deprecated. Please use io.k8s.api.core.v1.EventSource instead. -— -'io.k8s.kubernetes.pkg.api.v1.ExecActionl -+#/definitions/io.k8s.api.core.v1.ExecAction"=Deprecated. Please use io.k8s.api.core.v1.ExecAction instead. -£ -+io.k8s.kubernetes.pkg.api.v1.FCVolumeSourcet -/#/definitions/io.k8s.api.core.v1.FCVolumeSource"ADeprecated. Please use io.k8s.api.core.v1.FCVolumeSource instead. -© --io.k8s.kubernetes.pkg.api.v1.FlexVolumeSourcex -1#/definitions/io.k8s.api.core.v1.FlexVolumeSource"CDeprecated. Please use io.k8s.api.core.v1.FlexVolumeSource instead. -² -0io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource~ -4#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"FDeprecated. Please use io.k8s.api.core.v1.FlockerVolumeSource instead. -Ñ -:io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource’ ->#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"PDeprecated. Please use io.k8s.api.core.v1.GCEPersistentDiskVolumeSource instead. -² -0io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource~ -4#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource"FDeprecated. Please use io.k8s.api.core.v1.GitRepoVolumeSource instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource‚ -6#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource"HDeprecated. Please use io.k8s.api.core.v1.GlusterfsVolumeSource instead. -  -*io.k8s.kubernetes.pkg.api.v1.HTTPGetActionr -.#/definitions/io.k8s.api.core.v1.HTTPGetAction"@Deprecated. Please use io.k8s.api.core.v1.HTTPGetAction instead. -— -'io.k8s.kubernetes.pkg.api.v1.HTTPHeaderl -+#/definitions/io.k8s.api.core.v1.HTTPHeader"=Deprecated. Please use io.k8s.api.core.v1.HTTPHeader instead. -Ž -$io.k8s.kubernetes.pkg.api.v1.Handlerf -(#/definitions/io.k8s.api.core.v1.Handler":Deprecated. Please use io.k8s.api.core.v1.Handler instead. -” -&io.k8s.kubernetes.pkg.api.v1.HostAliasj -*#/definitions/io.k8s.api.core.v1.HostAlias"Deprecated. Please use io.k8s.api.core.v1.NodeAddress instead. - -)io.k8s.kubernetes.pkg.api.v1.NodeAffinityp --#/definitions/io.k8s.api.core.v1.NodeAffinity"?Deprecated. Please use io.k8s.api.core.v1.NodeAffinity instead. -  -*io.k8s.kubernetes.pkg.api.v1.NodeConditionr -.#/definitions/io.k8s.api.core.v1.NodeCondition"@Deprecated. Please use io.k8s.api.core.v1.NodeCondition instead. -² -0io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints~ -4#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints"FDeprecated. Please use io.k8s.api.core.v1.NodeDaemonEndpoints instead. -‘ -%io.k8s.kubernetes.pkg.api.v1.NodeListh -)#/definitions/io.k8s.api.core.v1.NodeList";Deprecated. Please use io.k8s.api.core.v1.NodeList instead. - -)io.k8s.kubernetes.pkg.api.v1.NodeSelectorp --#/definitions/io.k8s.api.core.v1.NodeSelector"?Deprecated. Please use io.k8s.api.core.v1.NodeSelector instead. -¿ -4io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement† -8#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement"JDeprecated. Please use io.k8s.api.core.v1.NodeSelectorRequirement instead. -© --io.k8s.kubernetes.pkg.api.v1.NodeSelectorTermx -1#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"CDeprecated. Please use io.k8s.api.core.v1.NodeSelectorTerm instead. -‘ -%io.k8s.kubernetes.pkg.api.v1.NodeSpech -)#/definitions/io.k8s.api.core.v1.NodeSpec";Deprecated. Please use io.k8s.api.core.v1.NodeSpec instead. -— -'io.k8s.kubernetes.pkg.api.v1.NodeStatusl -+#/definitions/io.k8s.api.core.v1.NodeStatus"=Deprecated. Please use io.k8s.api.core.v1.NodeStatus instead. -£ -+io.k8s.kubernetes.pkg.api.v1.NodeSystemInfot -/#/definitions/io.k8s.api.core.v1.NodeSystemInfo"ADeprecated. Please use io.k8s.api.core.v1.NodeSystemInfo instead. -² -0io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector~ -4#/definitions/io.k8s.api.core.v1.ObjectFieldSelector"FDeprecated. Please use io.k8s.api.core.v1.ObjectFieldSelector instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.ObjectReferencev -0#/definitions/io.k8s.api.core.v1.ObjectReference"BDeprecated. Please use io.k8s.api.core.v1.ObjectReference instead. -© --io.k8s.kubernetes.pkg.api.v1.PersistentVolumex -1#/definitions/io.k8s.api.core.v1.PersistentVolume"CDeprecated. Please use io.k8s.api.core.v1.PersistentVolume instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim‚ -6#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"HDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaim instead. -Å -6io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimListŠ -:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList"LDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimList instead. -Å -6io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpecŠ -:#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec"LDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimSpec instead. -Ë -8io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatusŽ -<#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus"NDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimStatus instead. -Ý ->io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSourceš -B#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource"TDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource instead. -¶ -1io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList€ -5#/definitions/io.k8s.api.core.v1.PersistentVolumeList"GDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeList instead. -¶ -1io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec€ -5#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec"GDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeSpec instead. -¼ -3io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus„ -7#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus"IDeprecated. Please use io.k8s.api.core.v1.PersistentVolumeStatus instead. -Ú -=io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource˜ -A#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"SDeprecated. Please use io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource instead. -‚ - io.k8s.kubernetes.pkg.api.v1.Pod^ -$#/definitions/io.k8s.api.core.v1.Pod"6Deprecated. Please use io.k8s.api.core.v1.Pod instead. -š -(io.k8s.kubernetes.pkg.api.v1.PodAffinityn -,#/definitions/io.k8s.api.core.v1.PodAffinity">Deprecated. Please use io.k8s.api.core.v1.PodAffinity instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.PodAffinityTermv -0#/definitions/io.k8s.api.core.v1.PodAffinityTerm"BDeprecated. Please use io.k8s.api.core.v1.PodAffinityTerm instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.PodAntiAffinityv -0#/definitions/io.k8s.api.core.v1.PodAntiAffinity"BDeprecated. Please use io.k8s.api.core.v1.PodAntiAffinity instead. - -)io.k8s.kubernetes.pkg.api.v1.PodConditionp --#/definitions/io.k8s.api.core.v1.PodCondition"?Deprecated. Please use io.k8s.api.core.v1.PodCondition instead. -Ž -$io.k8s.kubernetes.pkg.api.v1.PodListf -(#/definitions/io.k8s.api.core.v1.PodList":Deprecated. Please use io.k8s.api.core.v1.PodList instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.PodSecurityContext| -3#/definitions/io.k8s.api.core.v1.PodSecurityContext"EDeprecated. Please use io.k8s.api.core.v1.PodSecurityContext instead. -Ž -$io.k8s.kubernetes.pkg.api.v1.PodSpecf -(#/definitions/io.k8s.api.core.v1.PodSpec":Deprecated. Please use io.k8s.api.core.v1.PodSpec instead. -” -&io.k8s.kubernetes.pkg.api.v1.PodStatusj -*#/definitions/io.k8s.api.core.v1.PodStatus"Deprecated. Please use io.k8s.api.core.v1.PodTemplate instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.PodTemplateListv -0#/definitions/io.k8s.api.core.v1.PodTemplateList"BDeprecated. Please use io.k8s.api.core.v1.PodTemplateList instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.PodTemplateSpecv -0#/definitions/io.k8s.api.core.v1.PodTemplateSpec"BDeprecated. Please use io.k8s.api.core.v1.PodTemplateSpec instead. -¶ -1io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource€ -5#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"GDeprecated. Please use io.k8s.api.core.v1.PortworxVolumeSource instead. -¿ -4io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm† -8#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm"JDeprecated. Please use io.k8s.api.core.v1.PreferredSchedulingTerm instead. -ˆ -"io.k8s.kubernetes.pkg.api.v1.Probeb -&#/definitions/io.k8s.api.core.v1.Probe"8Deprecated. Please use io.k8s.api.core.v1.Probe instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource‚ -6#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource"HDeprecated. Please use io.k8s.api.core.v1.ProjectedVolumeSource instead. -² -0io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource~ -4#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"FDeprecated. Please use io.k8s.api.core.v1.QuobyteVolumeSource instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.RBDVolumeSourcev -0#/definitions/io.k8s.api.core.v1.RBDVolumeSource"BDeprecated. Please use io.k8s.api.core.v1.RBDVolumeSource instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.ReplicationController‚ -6#/definitions/io.k8s.api.core.v1.ReplicationController"HDeprecated. Please use io.k8s.api.core.v1.ReplicationController instead. -Ô -;io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition” -?#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition"QDeprecated. Please use io.k8s.api.core.v1.ReplicationControllerCondition instead. -Å -6io.k8s.kubernetes.pkg.api.v1.ReplicationControllerListŠ -:#/definitions/io.k8s.api.core.v1.ReplicationControllerList"LDeprecated. Please use io.k8s.api.core.v1.ReplicationControllerList instead. -Å -6io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpecŠ -:#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec"LDeprecated. Please use io.k8s.api.core.v1.ReplicationControllerSpec instead. -Ë -8io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatusŽ -<#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus"NDeprecated. Please use io.k8s.api.core.v1.ReplicationControllerStatus instead. -¹ -2io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector‚ -6#/definitions/io.k8s.api.core.v1.ResourceFieldSelector"HDeprecated. Please use io.k8s.api.core.v1.ResourceFieldSelector instead. -  -*io.k8s.kubernetes.pkg.api.v1.ResourceQuotar -.#/definitions/io.k8s.api.core.v1.ResourceQuota"@Deprecated. Please use io.k8s.api.core.v1.ResourceQuota instead. -¬ -.io.k8s.kubernetes.pkg.api.v1.ResourceQuotaListz -2#/definitions/io.k8s.api.core.v1.ResourceQuotaList"DDeprecated. Please use io.k8s.api.core.v1.ResourceQuotaList instead. -¬ -.io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpecz -2#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec"DDeprecated. Please use io.k8s.api.core.v1.ResourceQuotaSpec instead. -² -0io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus~ -4#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus"FDeprecated. Please use io.k8s.api.core.v1.ResourceQuotaStatus instead. -¶ -1io.k8s.kubernetes.pkg.api.v1.ResourceRequirements€ -5#/definitions/io.k8s.api.core.v1.ResourceRequirements"GDeprecated. Please use io.k8s.api.core.v1.ResourceRequirements instead. -£ -+io.k8s.kubernetes.pkg.api.v1.SELinuxOptionst -/#/definitions/io.k8s.api.core.v1.SELinuxOptions"ADeprecated. Please use io.k8s.api.core.v1.SELinuxOptions instead. -² -0io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource~ -4#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource"FDeprecated. Please use io.k8s.api.core.v1.ScaleIOVolumeSource instead. -‹ -#io.k8s.kubernetes.pkg.api.v1.Secretd -'#/definitions/io.k8s.api.core.v1.Secret"9Deprecated. Please use io.k8s.api.core.v1.Secret instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.SecretEnvSourcev -0#/definitions/io.k8s.api.core.v1.SecretEnvSource"BDeprecated. Please use io.k8s.api.core.v1.SecretEnvSource instead. -¬ -.io.k8s.kubernetes.pkg.api.v1.SecretKeySelectorz -2#/definitions/io.k8s.api.core.v1.SecretKeySelector"DDeprecated. Please use io.k8s.api.core.v1.SecretKeySelector instead. -— -'io.k8s.kubernetes.pkg.api.v1.SecretListl -+#/definitions/io.k8s.api.core.v1.SecretList"=Deprecated. Please use io.k8s.api.core.v1.SecretList instead. -© --io.k8s.kubernetes.pkg.api.v1.SecretProjectionx -1#/definitions/io.k8s.api.core.v1.SecretProjection"CDeprecated. Please use io.k8s.api.core.v1.SecretProjection instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource| -3#/definitions/io.k8s.api.core.v1.SecretVolumeSource"EDeprecated. Please use io.k8s.api.core.v1.SecretVolumeSource instead. -¦ -,io.k8s.kubernetes.pkg.api.v1.SecurityContextv -0#/definitions/io.k8s.api.core.v1.SecurityContext"BDeprecated. Please use io.k8s.api.core.v1.SecurityContext instead. -Ž -$io.k8s.kubernetes.pkg.api.v1.Servicef -(#/definitions/io.k8s.api.core.v1.Service":Deprecated. Please use io.k8s.api.core.v1.Service instead. -£ -+io.k8s.kubernetes.pkg.api.v1.ServiceAccountt -/#/definitions/io.k8s.api.core.v1.ServiceAccount"ADeprecated. Please use io.k8s.api.core.v1.ServiceAccount instead. -¯ -/io.k8s.kubernetes.pkg.api.v1.ServiceAccountList| -3#/definitions/io.k8s.api.core.v1.ServiceAccountList"EDeprecated. Please use io.k8s.api.core.v1.ServiceAccountList instead. -š -(io.k8s.kubernetes.pkg.api.v1.ServiceListn -,#/definitions/io.k8s.api.core.v1.ServiceList">Deprecated. Please use io.k8s.api.core.v1.ServiceList instead. -š -(io.k8s.kubernetes.pkg.api.v1.ServicePortn -,#/definitions/io.k8s.api.core.v1.ServicePort">Deprecated. Please use io.k8s.api.core.v1.ServicePort instead. -š -(io.k8s.kubernetes.pkg.api.v1.ServiceSpecn -,#/definitions/io.k8s.api.core.v1.ServiceSpec">Deprecated. Please use io.k8s.api.core.v1.ServiceSpec instead. -  -*io.k8s.kubernetes.pkg.api.v1.ServiceStatusr -.#/definitions/io.k8s.api.core.v1.ServiceStatus"@Deprecated. Please use io.k8s.api.core.v1.ServiceStatus instead. -× -Deprecated. Please use io.k8s.api.core.v1.VolumeMount instead. -© --io.k8s.kubernetes.pkg.api.v1.VolumeProjectionx -1#/definitions/io.k8s.api.core.v1.VolumeProjection"CDeprecated. Please use io.k8s.api.core.v1.VolumeProjection instead. -Ô -;io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource” -?#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"QDeprecated. Please use io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource instead. -¿ -4io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm† -8#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm"JDeprecated. Please use io.k8s.api.core.v1.WeightedPodAffinityTerm instead. -Å -:io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision† -8#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision"JDeprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevision instead. -Ñ ->io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionListŽ -<#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList"NDeprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevisionList instead. -¬ -2io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deploymentv -0#/definitions/io.k8s.api.apps.v1beta1.Deployment"BDeprecated. Please use io.k8s.api.apps.v1beta1.Deployment instead. -È -;io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentConditionˆ -9#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition"KDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentCondition instead. -¸ -6io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList~ -4#/definitions/io.k8s.api.apps.v1beta1.DeploymentList"FDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentList instead. -Å -:io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback† -8#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback"JDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentRollback instead. -¸ -6io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec~ -4#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec"FDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentSpec instead. -¿ -8io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus‚ -6#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus"HDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStatus instead. -Å -:io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy† -8#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy"JDeprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStrategy instead. -¸ -6io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig~ -4#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig"FDeprecated. Please use io.k8s.api.apps.v1beta1.RollbackConfig instead. -Ô -?io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment -=#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment"ODeprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateDeployment instead. -ï -Hio.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy¢ -F#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy"XDeprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy instead. - --io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scalel -+#/definitions/io.k8s.api.apps.v1beta1.Scale"=Deprecated. Please use io.k8s.api.apps.v1beta1.Scale instead. -© -1io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpect -/#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec"ADeprecated. Please use io.k8s.api.apps.v1beta1.ScaleSpec instead. -¯ -3io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatusx -1#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus"CDeprecated. Please use io.k8s.api.apps.v1beta1.ScaleStatus instead. -¯ -3io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetx -1#/definitions/io.k8s.api.apps.v1beta1.StatefulSet"CDeprecated. Please use io.k8s.api.apps.v1beta1.StatefulSet instead. -¼ -7io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList€ -5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList"GDeprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetList instead. -¼ -7io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec€ -5#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec"GDeprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetSpec instead. - -9io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus„ -7#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus"IDeprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetStatus instead. -Ú -Aio.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy” -?#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy"QDeprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy instead. -¿ -8io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview‚ -6#/definitions/io.k8s.api.authentication.v1.TokenReview"HDeprecated. Please use io.k8s.api.authentication.v1.TokenReview instead. -Ë -io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatusŽ -<#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus"NDeprecated. Please use io.k8s.api.authentication.v1.TokenReviewStatus instead. -µ -5io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo| -3#/definitions/io.k8s.api.authentication.v1.UserInfo"EDeprecated. Please use io.k8s.api.authentication.v1.UserInfo instead. -ã -Dio.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReviewš -B#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview"TDeprecated. Please use io.k8s.api.authorization.v1.LocalSubjectAccessReview instead. -Ú -Aio.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes” -?#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes"QDeprecated. Please use io.k8s.api.authorization.v1.NonResourceAttributes instead. -Ñ ->io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributesŽ -<#/definitions/io.k8s.api.authorization.v1.ResourceAttributes"NDeprecated. Please use io.k8s.api.authorization.v1.ResourceAttributes instead. -à -Cio.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview˜ -A#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview"SDeprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReview instead. -ì -Gio.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec  -E#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec"WDeprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec instead. -Ô -?io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview -=#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview"ODeprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReview instead. -à -Cio.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec˜ -A#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec"SDeprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewSpec instead. -æ -Eio.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatusœ -C#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus"UDeprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewStatus instead. -æ -Eio.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReferenceœ -C#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference"UDeprecated. Please use io.k8s.api.autoscaling.v1.CrossVersionObjectReference instead. -Ú -Aio.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler” -?#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"QDeprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler instead. -æ -Eio.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerListœ -C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList"UDeprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList instead. -æ -Eio.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpecœ -C#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec"UDeprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec instead. -ì -Gio.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus  -E#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus"WDeprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus instead. -£ -/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scalep --#/definitions/io.k8s.api.autoscaling.v1.Scale"?Deprecated. Please use io.k8s.api.autoscaling.v1.Scale instead. -¯ -3io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpecx -1#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec"CDeprecated. Please use io.k8s.api.autoscaling.v1.ScaleSpec instead. -µ -5io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus| -3#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus"EDeprecated. Please use io.k8s.api.autoscaling.v1.ScaleStatus instead. -‹ -'io.k8s.kubernetes.pkg.apis.batch.v1.Job` -%#/definitions/io.k8s.api.batch.v1.Job"7Deprecated. Please use io.k8s.api.batch.v1.Job instead. -¦ -0io.k8s.kubernetes.pkg.apis.batch.v1.JobConditionr -.#/definitions/io.k8s.api.batch.v1.JobCondition"@Deprecated. Please use io.k8s.api.batch.v1.JobCondition instead. -— -+io.k8s.kubernetes.pkg.apis.batch.v1.JobListh -)#/definitions/io.k8s.api.batch.v1.JobList";Deprecated. Please use io.k8s.api.batch.v1.JobList instead. -— -+io.k8s.kubernetes.pkg.apis.batch.v1.JobSpech -)#/definitions/io.k8s.api.batch.v1.JobSpec";Deprecated. Please use io.k8s.api.batch.v1.JobSpec instead. - --io.k8s.kubernetes.pkg.apis.batch.v1.JobStatusl -+#/definitions/io.k8s.api.batch.v1.JobStatus"=Deprecated. Please use io.k8s.api.batch.v1.JobStatus instead. -ò -Iio.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest¤ -G#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest"YDeprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequest instead. - -Rio.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition¶ -P#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition"bDeprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition instead. -þ -Mio.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList¬ -K#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList"]Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestList instead. -þ -Mio.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec¬ -K#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec"]Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec instead. -„ -Oio.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus° -M#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus"_Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus instead. -¼ -7io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet€ -5#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet"GDeprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSet instead. -È -;io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetListˆ -9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList"KDeprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetList instead. -È -;io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpecˆ -9#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec"KDeprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetSpec instead. -Î -=io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatusŒ -;#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus"MDeprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetStatus instead. -æ -Eio.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategyœ -C#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy"UDeprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy instead. -¿ -8io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment‚ -6#/definitions/io.k8s.api.extensions.v1beta1.Deployment"HDeprecated. Please use io.k8s.api.extensions.v1beta1.Deployment instead. -Ú -Aio.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition” -?#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition"QDeprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentCondition instead. -Ë -#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback"PDeprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentRollback instead. -Ë -io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatusŽ -<#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus"NDeprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStatus instead. -× -@io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy’ ->#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy"PDeprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStrategy instead. -ã -Dio.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptionsš -B#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions"TDeprecated. Please use io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions instead. -Î -=io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPathŒ -;#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath"MDeprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressPath instead. -Ý -Bio.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue– -@#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue"RDeprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue instead. -È -;io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRangeˆ -9#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange"KDeprecated. Please use io.k8s.api.extensions.v1beta1.HostPortRange instead. -µ -5io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange| -3#/definitions/io.k8s.api.extensions.v1beta1.IDRange"EDeprecated. Please use io.k8s.api.extensions.v1beta1.IDRange instead. -µ -5io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress| -3#/definitions/io.k8s.api.extensions.v1beta1.Ingress"EDeprecated. Please use io.k8s.api.extensions.v1beta1.Ingress instead. -Ë -io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatusŽ -<#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus"NDeprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetStatus instead. -Ë -io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingListŽ -<#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList"NDeprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleBindingList instead. -¼ -7io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList€ -5#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList"GDeprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleList instead. -¬ -2io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRulev -0#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule"BDeprecated. Please use io.k8s.api.rbac.v1beta1.PolicyRule instead. -š -,io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Rolej -*#/definitions/io.k8s.api.rbac.v1beta1.Role" 0 { + return true + } + } + } + for i := range podSpec.InitContainers { + for j := range podSpec.InitContainers[i].VolumeMounts { + if len(podSpec.InitContainers[i].VolumeMounts[j].SubPath) > 0 { + return true + } + } + } + return false +} + +// runtimeClassInUse returns true if the pod spec is non-nil and has a RuntimeClassName set +func runtimeClassInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + if podSpec.RuntimeClassName != nil { + return true + } + return false +} + +// procMountInUse returns true if the pod spec is non-nil and has a SecurityContext's ProcMount field set +func procMountInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for i := range podSpec.Containers { + if podSpec.Containers[i].SecurityContext != nil { + if podSpec.Containers[i].SecurityContext.ProcMount != nil { + if *podSpec.Containers[i].SecurityContext.ProcMount != api.DefaultProcMount { + return true + } + } + } + } + for i := range podSpec.InitContainers { + if podSpec.InitContainers[i].SecurityContext != nil { + if podSpec.InitContainers[i].SecurityContext.ProcMount != nil { + if *podSpec.InitContainers[i].SecurityContext.ProcMount != api.DefaultProcMount { + return true + } + } + } + } + return false +} + +// appArmorInUse returns true if the pod has apparmor related information +func appArmorInUse(podAnnotations map[string]string) bool { + for k := range podAnnotations { + if strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + return true + } + } + return false +} + +func shareProcessNamespaceInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + if podSpec.SecurityContext != nil && podSpec.SecurityContext.ShareProcessNamespace != nil { + return true + } + return false +} + +func tokenRequestProjectionInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for _, v := range podSpec.Volumes { + if v.Projected == nil { + continue + } + for _, s := range v.Projected.Sources { + if s.ServiceAccountToken != nil { + return true + } + } + } + return false +} + +// podPriorityInUse returns true if the pod spec is non-nil and has Priority or PriorityClassName set. +func podPriorityInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + if podSpec.Priority != nil || podSpec.PriorityClassName != "" { + return true + } + return false +} + +func sysctlsInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + if podSpec.SecurityContext != nil && podSpec.SecurityContext.Sysctls != nil { + return true + } + return false +} + +// emptyDirSizeLimitInUse returns true if any pod's EptyDir volumes use SizeLimit. +func emptyDirSizeLimitInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for i := range podSpec.Volumes { + if podSpec.Volumes[i].EmptyDir != nil { + if podSpec.Volumes[i].EmptyDir.SizeLimit != nil { + return true + } + } + } + return false +} + +// volumeDevicesInUse returns true if the pod spec is non-nil and has VolumeDevices set. +func volumeDevicesInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for i := range podSpec.Containers { + if podSpec.Containers[i].VolumeDevices != nil { + return true + } + } + for i := range podSpec.InitContainers { + if podSpec.InitContainers[i].VolumeDevices != nil { + return true + } + } + return false +} + +// runAsGroupInUse returns true if the pod spec is non-nil and has a SecurityContext's RunAsGroup field set +func runAsGroupInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + + if podSpec.SecurityContext != nil && podSpec.SecurityContext.RunAsGroup != nil { + return true + } + for i := range podSpec.Containers { + if podSpec.Containers[i].SecurityContext != nil && podSpec.Containers[i].SecurityContext.RunAsGroup != nil { + return true + } + } + for i := range podSpec.InitContainers { + if podSpec.InitContainers[i].SecurityContext != nil && podSpec.InitContainers[i].SecurityContext.RunAsGroup != nil { + return true + } + } + return false +} + +// subpathExprInUse returns true if the pod spec is non-nil and has a volume mount that makes use of the subPathExpr feature +func subpathExprInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for i := range podSpec.Containers { + for j := range podSpec.Containers[i].VolumeMounts { + if len(podSpec.Containers[i].VolumeMounts[j].SubPathExpr) > 0 { + return true + } + } + } + for i := range podSpec.InitContainers { + for j := range podSpec.InitContainers[i].VolumeMounts { + if len(podSpec.InitContainers[i].VolumeMounts[j].SubPathExpr) > 0 { + return true + } + } + } + return false +} + +// csiInUse returns true if any pod's spec include inline CSI volumes. +func csiInUse(podSpec *api.PodSpec) bool { + if podSpec == nil { + return false + } + for i := range podSpec.Volumes { + if podSpec.Volumes[i].CSI != nil { + return true + } + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/BUILD b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/BUILD index 4d566715fb7..0219cfc6b9f 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/BUILD @@ -32,15 +32,13 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "util_test.go", - ], + srcs = ["util_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/OWNERS b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/OWNERS old mode 100755 new mode 100644 index 652fc4cefab..cb59b2cfa31 --- a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - jessfraz diff --git a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/util.go b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/util.go index 56358fb965a..cd8d6cf0c67 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/podsecuritypolicy/util.go @@ -22,11 +22,41 @@ import ( "k8s.io/kubernetes/pkg/features" ) -// DropDisabledAlphaFields removes disabled fields from the pod security policy spec. +// DropDisabledFields removes disabled fields from the pod security policy spec. // This should be called from PrepareForCreate/PrepareForUpdate for all resources containing a od security policy spec. -func DropDisabledAlphaFields(pspSpec *policy.PodSecurityPolicySpec) { - pspSpec.AllowedProcMountTypes = nil - if !utilfeature.DefaultFeatureGate.Enabled(features.RunAsGroup) { +func DropDisabledFields(pspSpec, oldPSPSpec *policy.PodSecurityPolicySpec) { + if !allowedProcMountTypesInUse(oldPSPSpec) { + pspSpec.AllowedProcMountTypes = nil + } + if !utilfeature.DefaultFeatureGate.Enabled(features.RunAsGroup) && (oldPSPSpec == nil || oldPSPSpec.RunAsGroup == nil) { pspSpec.RunAsGroup = nil } + if !utilfeature.DefaultFeatureGate.Enabled(features.Sysctls) && !sysctlsInUse(oldPSPSpec) { + pspSpec.AllowedUnsafeSysctls = nil + pspSpec.ForbiddenSysctls = nil + } + pspSpec.AllowedCSIDrivers = nil +} + +func allowedProcMountTypesInUse(oldPSPSpec *policy.PodSecurityPolicySpec) bool { + if oldPSPSpec == nil { + return false + } + + if oldPSPSpec.AllowedProcMountTypes != nil { + return true + } + + return false + +} + +func sysctlsInUse(oldPSPSpec *policy.PodSecurityPolicySpec) bool { + if oldPSPSpec == nil { + return false + } + if oldPSPSpec.AllowedUnsafeSysctls != nil || oldPSPSpec.ForbiddenSysctls != nil { + return true + } + return false } diff --git a/vendor/k8s.io/kubernetes/pkg/api/resourcequota/BUILD b/vendor/k8s.io/kubernetes/pkg/api/resourcequota/BUILD new file mode 100644 index 00000000000..04e56ae5011 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/resourcequota/BUILD @@ -0,0 +1,40 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["util.go"], + importpath = "k8s.io/kubernetes/pkg/api/resourcequota", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["util_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/api/resourcequota/util.go b/vendor/k8s.io/kubernetes/pkg/api/resourcequota/util.go new file mode 100644 index 00000000000..322472011f3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/resourcequota/util.go @@ -0,0 +1,41 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourcequota + +import ( + utilfeature "k8s.io/apiserver/pkg/util/feature" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/features" +) + +// DropDisabledFields removes disabled fields from the ResourceQuota spec. +// This should be called from PrepareForCreate/PrepareForUpdate for all resources containing a ResourceQuota spec. +func DropDisabledFields(resSpec *api.ResourceQuotaSpec, oldResSpec *api.ResourceQuotaSpec) { + if !utilfeature.DefaultFeatureGate.Enabled(features.ResourceQuotaScopeSelectors) && !resourceQuotaScopeSelectorInUse(oldResSpec) { + resSpec.ScopeSelector = nil + } +} + +func resourceQuotaScopeSelectorInUse(oldResSpec *api.ResourceQuotaSpec) bool { + if oldResSpec == nil { + return false + } + if oldResSpec.ScopeSelector != nil { + return true + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/service/BUILD b/vendor/k8s.io/kubernetes/pkg/api/service/BUILD index e66d9bbc175..d28572faf1d 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/service/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/api/service/BUILD @@ -12,7 +12,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/api/service", deps = [ "//pkg/apis/core:go_default_library", - "//pkg/util/net/sets:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) @@ -22,7 +22,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/util/net/sets:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/api/service/OWNERS b/vendor/k8s.io/kubernetes/pkg/api/service/OWNERS old mode 100755 new mode 100644 index f9627e5f732..6c0aa0e1831 --- a/vendor/k8s.io/kubernetes/pkg/api/service/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/api/service/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - justinsb - freehan diff --git a/vendor/k8s.io/kubernetes/pkg/api/service/util.go b/vendor/k8s.io/kubernetes/pkg/api/service/util.go index 5de5f276574..a4262edad24 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/service/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/service/util.go @@ -18,17 +18,18 @@ package service import ( "fmt" - api "k8s.io/kubernetes/pkg/apis/core" - netsets "k8s.io/kubernetes/pkg/util/net/sets" "strings" + + api "k8s.io/kubernetes/pkg/apis/core" + utilnet "k8s.io/utils/net" ) const ( defaultLoadBalancerSourceRanges = "0.0.0.0/0" ) -// IsAllowAll checks whether the netsets.IPNet allows traffic from 0.0.0.0/0 -func IsAllowAll(ipnets netsets.IPNet) bool { +// IsAllowAll checks whether the utilnet.IPNet allows traffic from 0.0.0.0/0 +func IsAllowAll(ipnets utilnet.IPNetSet) bool { for _, s := range ipnets.StringSlice() { if s == "0.0.0.0/0" { return true @@ -40,13 +41,13 @@ func IsAllowAll(ipnets netsets.IPNet) bool { // GetLoadBalancerSourceRanges first try to parse and verify LoadBalancerSourceRanges field from a service. // If the field is not specified, turn to parse and verify the AnnotationLoadBalancerSourceRangesKey annotation from a service, // extracting the source ranges to allow, and if not present returns a default (allow-all) value. -func GetLoadBalancerSourceRanges(service *api.Service) (netsets.IPNet, error) { - var ipnets netsets.IPNet +func GetLoadBalancerSourceRanges(service *api.Service) (utilnet.IPNetSet, error) { + var ipnets utilnet.IPNetSet var err error // if SourceRange field is specified, ignore sourceRange annotation if len(service.Spec.LoadBalancerSourceRanges) > 0 { specs := service.Spec.LoadBalancerSourceRanges - ipnets, err = netsets.ParseIPNets(specs...) + ipnets, err = utilnet.ParseIPNets(specs...) if err != nil { return nil, fmt.Errorf("service.Spec.LoadBalancerSourceRanges: %v is not valid. Expecting a list of IP ranges. For example, 10.0.0.0/24. Error msg: %v", specs, err) @@ -58,7 +59,7 @@ func GetLoadBalancerSourceRanges(service *api.Service) (netsets.IPNet, error) { val = defaultLoadBalancerSourceRanges } specs := strings.Split(val, ",") - ipnets, err = netsets.ParseIPNets(specs...) + ipnets, err = utilnet.ParseIPNets(specs...) if err != nil { return nil, fmt.Errorf("%s: %s is not valid. Expecting a comma-separated list of source IP ranges. For example, 10.0.0.0/24,192.168.2.0/24", api.AnnotationLoadBalancerSourceRangesKey, val) } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/OWNERS b/vendor/k8s.io/kubernetes/pkg/api/v1/OWNERS old mode 100755 new mode 100644 index ba0d083cedc..a3c68b33064 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/node/BUILD b/vendor/k8s.io/kubernetes/pkg/api/v1/node/BUILD deleted file mode 100644 index de080f93ee2..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/node/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["util.go"], - importpath = "k8s.io/kubernetes/pkg/api/v1/node", - deps = ["//staging/src/k8s.io/api/core/v1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/node/util.go b/vendor/k8s.io/kubernetes/pkg/api/v1/node/util.go deleted file mode 100644 index c82ac87e51f..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/node/util.go +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// TODO: merge with pkg/util/node - -package node - -import ( - "k8s.io/api/core/v1" -) - -// GetNodeCondition extracts the provided condition from the given status and returns that. -// Returns nil and -1 if the condition is not present, and the index of the located condition. -func GetNodeCondition(status *v1.NodeStatus, conditionType v1.NodeConditionType) (int, *v1.NodeCondition) { - if status == nil { - return -1, nil - } - for i := range status.Conditions { - if status.Conditions[i].Type == conditionType { - return i, &status.Conditions[i] - } - } - return -1, nil -} - -// IsNodeReady returns true if a node is ready; false otherwise. -func IsNodeReady(node *v1.Node) bool { - for _, c := range node.Status.Conditions { - if c.Type == v1.NodeReady { - return c.Status == v1.ConditionTrue - } - } - return false -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/pod/util.go b/vendor/k8s.io/kubernetes/pkg/api/v1/pod/util.go index 558e8a48c1a..590bca8eb05 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/pod/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/pod/util.go @@ -120,6 +120,10 @@ func VisitPodSecretNames(pod *v1.Pod, visitor Visitor) bool { if source.StorageOS.SecretRef != nil && !visitor(source.StorageOS.SecretRef.Name) { return false } + case source.CSI != nil: + if source.CSI.NodePublishSecretRef != nil && !visitor(source.CSI.NodePublishSecretRef.Name) { + return false + } } } return true diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/service/BUILD b/vendor/k8s.io/kubernetes/pkg/api/v1/service/BUILD index a324d7cc823..5a16fca24d2 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/service/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/service/BUILD @@ -11,8 +11,8 @@ go_library( srcs = ["util.go"], importpath = "k8s.io/kubernetes/pkg/api/v1/service", deps = [ - "//pkg/util/net/sets:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) @@ -21,8 +21,8 @@ go_test( srcs = ["util_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/util/net/sets:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go b/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go index 4cb453cf3eb..d1c6713888e 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go @@ -21,15 +21,15 @@ import ( "strings" "k8s.io/api/core/v1" - netsets "k8s.io/kubernetes/pkg/util/net/sets" + utilnet "k8s.io/utils/net" ) const ( defaultLoadBalancerSourceRanges = "0.0.0.0/0" ) -// IsAllowAll checks whether the netsets.IPNet allows traffic from 0.0.0.0/0 -func IsAllowAll(ipnets netsets.IPNet) bool { +// IsAllowAll checks whether the utilnet.IPNet allows traffic from 0.0.0.0/0 +func IsAllowAll(ipnets utilnet.IPNetSet) bool { for _, s := range ipnets.StringSlice() { if s == "0.0.0.0/0" { return true @@ -41,13 +41,13 @@ func IsAllowAll(ipnets netsets.IPNet) bool { // GetLoadBalancerSourceRanges first try to parse and verify LoadBalancerSourceRanges field from a service. // If the field is not specified, turn to parse and verify the AnnotationLoadBalancerSourceRangesKey annotation from a service, // extracting the source ranges to allow, and if not present returns a default (allow-all) value. -func GetLoadBalancerSourceRanges(service *v1.Service) (netsets.IPNet, error) { - var ipnets netsets.IPNet +func GetLoadBalancerSourceRanges(service *v1.Service) (utilnet.IPNetSet, error) { + var ipnets utilnet.IPNetSet var err error // if SourceRange field is specified, ignore sourceRange annotation if len(service.Spec.LoadBalancerSourceRanges) > 0 { specs := service.Spec.LoadBalancerSourceRanges - ipnets, err = netsets.ParseIPNets(specs...) + ipnets, err = utilnet.ParseIPNets(specs...) if err != nil { return nil, fmt.Errorf("service.Spec.LoadBalancerSourceRanges: %v is not valid. Expecting a list of IP ranges. For example, 10.0.0.0/24. Error msg: %v", specs, err) @@ -59,7 +59,7 @@ func GetLoadBalancerSourceRanges(service *v1.Service) (netsets.IPNet, error) { val = defaultLoadBalancerSourceRanges } specs := strings.Split(val, ",") - ipnets, err = netsets.ParseIPNets(specs...) + ipnets, err = utilnet.ParseIPNets(specs...) if err != nil { return nil, fmt.Errorf("%s: %s is not valid. Expecting a comma-separated list of source IP ranges. For example, 10.0.0.0/24,192.168.2.0/24", v1.AnnotationLoadBalancerSourceRangesKey, val) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admission/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/admission/v1beta1/register.go index 8b3eea5d517..703c294559d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admission/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admission/v1beta1/register.go @@ -34,7 +34,8 @@ func Resource(resource string) schema.GroupResource { var ( localSchemeBuilder = &admissionv1beta1.SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme ) func init() { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/BUILD index d227c45a64a..ea2601a239a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/BUILD @@ -34,7 +34,6 @@ filegroup( ":package-srcs", "//pkg/apis/admissionregistration/fuzzer:all-srcs", "//pkg/apis/admissionregistration/install:all-srcs", - "//pkg/apis/admissionregistration/v1alpha1:all-srcs", "//pkg/apis/admissionregistration/v1beta1:all-srcs", "//pkg/apis/admissionregistration/validation:all-srcs", ], diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/doc.go index 8c2f04230ad..a81502498bc 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/doc.go @@ -19,6 +19,6 @@ limitations under the License. // Package admissionregistration is the internal version of the API. // AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration -// InitializerConfiguration, ValidatingWebhookConfiguration, and MutatingWebhookConfiguration are for the +// ValidatingWebhookConfiguration, and MutatingWebhookConfiguration are for the // new dynamic admission controller configuration. package admissionregistration // import "k8s.io/kubernetes/pkg/apis/admissionregistration" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/install/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/install/BUILD index cbe1b9da564..a0a5899a1b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/install/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/install/BUILD @@ -12,7 +12,6 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/admissionregistration:go_default_library", - "//pkg/apis/admissionregistration/v1alpha1:go_default_library", "//pkg/apis/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/register.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/register.go index 941259ce628..861a45653a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/register.go @@ -44,8 +44,6 @@ var ( // Adds the list of known types to scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, - &InitializerConfiguration{}, - &InitializerConfigurationList{}, &ValidatingWebhookConfiguration{}, &ValidatingWebhookConfigurationList{}, &MutatingWebhookConfiguration{}, diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/types.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/types.go index e8880c49c64..09a5df61137 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/types.go @@ -20,58 +20,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InitializerConfiguration describes the configuration of initializers. -type InitializerConfiguration struct { - metav1.TypeMeta - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - // +optional - metav1.ObjectMeta - - // Initializers is a list of resources and their default initializers - // Order-sensitive. - // When merging multiple InitializerConfigurations, we sort the initializers - // from different InitializerConfigurations by the name of the - // InitializerConfigurations; the order of the initializers from the same - // InitializerConfiguration is preserved. - // +optional - Initializers []Initializer -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InitializerConfigurationList is a list of InitializerConfiguration. -type InitializerConfigurationList struct { - metav1.TypeMeta - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - // +optional - metav1.ListMeta - - // List of InitializerConfiguration. - Items []InitializerConfiguration -} - -// Initializer describes the name and the failure policy of an initializer, and -// what resources it applies to. -type Initializer struct { - // Name is the identifier of the initializer. It will be added to the - // object that needs to be initialized. - // Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where - // "alwayspullimages" is the name of the webhook, and kubernetes.io is the name - // of the organization. - // Required - Name string - - // Rules describes what resources/subresources the initializer cares about. - // The initializer cares about an operation if it matches _any_ Rule. - // Rule.Resources must not include subresources. - Rules []Rule -} - // Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended // to make sure that all the tuple expansions are valid. type Rule struct { @@ -101,8 +49,32 @@ type Rule struct { // Depending on the enclosing object, subresources might not be allowed. // Required. Resources []string + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + Scope *ScopeType } +type ScopeType string + +const ( + // ClusterScope means that scope is limited to cluster-scoped objects. + // Namespace objects are cluster-scoped. + ClusterScope ScopeType = "Cluster" + // NamespacedScope means that scope is limited to namespaced objects. + NamespacedScope ScopeType = "Namespaced" + // AllScopes means that all scopes are included. + AllScopes ScopeType = "*" +) + type FailurePolicyType string const ( @@ -260,6 +232,22 @@ type Webhook struct { // sideEffects == Unknown or Some. Defaults to Unknown. // +optional SideEffects *SideEffectClass + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // +optional + TimeoutSeconds *int32 + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If the webhook configuration has already been persisted with a version apiserver + // does not understand, calls to the webhook will fail and be subject to the failure policy. + // +optional + AdmissionReviewVersions []string } // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/defaults.go index fa35267624d..a5da0bfbc8b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/defaults.go @@ -40,4 +40,19 @@ func SetDefaults_Webhook(obj *admissionregistrationv1beta1.Webhook) { unknown := admissionregistrationv1beta1.SideEffectClassUnknown obj.SideEffects = &unknown } + if obj.TimeoutSeconds == nil { + obj.TimeoutSeconds = new(int32) + *obj.TimeoutSeconds = 30 + } + + if len(obj.AdmissionReviewVersions) == 0 { + obj.AdmissionReviewVersions = []string{admissionregistrationv1beta1.SchemeGroupVersion.Version} + } +} + +func SetDefaults_Rule(obj *admissionregistrationv1beta1.Rule) { + if obj.Scope == nil { + s := admissionregistrationv1beta1.AllScopes + obj.Scope = &s + } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/doc.go index 873110d12dd..df5d2c03b54 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/doc.go @@ -22,6 +22,6 @@ limitations under the License. // Package v1beta1 is the v1beta1 version of the API. // AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration -// InitializerConfiguration, ValidatingWebhookConfiguration, and MutatingWebhookConfiguration are for the +// ValidatingWebhookConfiguration, and MutatingWebhookConfiguration are for the // new dynamic admission controller configuration. package v1beta1 // import "k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.conversion.go index 3d1d1be7177..baa15792f88 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.conversion.go @@ -178,6 +178,7 @@ func autoConvert_v1beta1_Rule_To_admissionregistration_Rule(in *v1beta1.Rule, ou out.APIGroups = *(*[]string)(unsafe.Pointer(&in.APIGroups)) out.APIVersions = *(*[]string)(unsafe.Pointer(&in.APIVersions)) out.Resources = *(*[]string)(unsafe.Pointer(&in.Resources)) + out.Scope = (*admissionregistration.ScopeType)(unsafe.Pointer(in.Scope)) return nil } @@ -190,6 +191,7 @@ func autoConvert_admissionregistration_Rule_To_v1beta1_Rule(in *admissionregistr out.APIGroups = *(*[]string)(unsafe.Pointer(&in.APIGroups)) out.APIVersions = *(*[]string)(unsafe.Pointer(&in.APIVersions)) out.Resources = *(*[]string)(unsafe.Pointer(&in.Resources)) + out.Scope = (*v1beta1.ScopeType)(unsafe.Pointer(in.Scope)) return nil } @@ -301,6 +303,8 @@ func autoConvert_v1beta1_Webhook_To_admissionregistration_Webhook(in *v1beta1.We out.FailurePolicy = (*admissionregistration.FailurePolicyType)(unsafe.Pointer(in.FailurePolicy)) out.NamespaceSelector = (*v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) out.SideEffects = (*admissionregistration.SideEffectClass)(unsafe.Pointer(in.SideEffects)) + out.TimeoutSeconds = (*int32)(unsafe.Pointer(in.TimeoutSeconds)) + out.AdmissionReviewVersions = *(*[]string)(unsafe.Pointer(&in.AdmissionReviewVersions)) return nil } @@ -318,6 +322,8 @@ func autoConvert_admissionregistration_Webhook_To_v1beta1_Webhook(in *admissionr out.FailurePolicy = (*v1beta1.FailurePolicyType)(unsafe.Pointer(in.FailurePolicy)) out.NamespaceSelector = (*v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) out.SideEffects = (*v1beta1.SideEffectClass)(unsafe.Pointer(in.SideEffects)) + out.TimeoutSeconds = (*int32)(unsafe.Pointer(in.TimeoutSeconds)) + out.AdmissionReviewVersions = *(*[]string)(unsafe.Pointer(&in.AdmissionReviewVersions)) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.defaults.go index bf559d6ab9e..e85916f0ea7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1/zz_generated.defaults.go @@ -48,6 +48,10 @@ func SetObjectDefaults_MutatingWebhookConfiguration(in *v1beta1.MutatingWebhookC for i := range in.Webhooks { a := &in.Webhooks[i] SetDefaults_Webhook(a) + for j := range a.Rules { + b := &a.Rules[j] + SetDefaults_Rule(&b.Rule) + } } } @@ -62,6 +66,10 @@ func SetObjectDefaults_ValidatingWebhookConfiguration(in *v1beta1.ValidatingWebh for i := range in.Webhooks { a := &in.Webhooks[i] SetDefaults_Webhook(a) + for j := range a.Rules { + b := &a.Rules[j] + SetDefaults_Rule(&b.Rule) + } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/BUILD index 7efababb33d..910647572d2 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/BUILD @@ -22,6 +22,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/apis/admissionregistration/validation", deps = [ "//pkg/apis/admissionregistration:go_default_library", + "//pkg/apis/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/validation.go index 4f0fe60b2f0..9cf318a2c79 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/validation/validation.go @@ -24,31 +24,13 @@ import ( metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" + utilvalidation "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/util/webhook" "k8s.io/kubernetes/pkg/apis/admissionregistration" + "k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1" ) -func ValidateInitializerConfiguration(ic *admissionregistration.InitializerConfiguration) field.ErrorList { - allErrors := genericvalidation.ValidateObjectMeta(&ic.ObjectMeta, false, genericvalidation.NameIsDNSSubdomain, field.NewPath("metadata")) - for i, initializer := range ic.Initializers { - allErrors = append(allErrors, validateInitializer(&initializer, field.NewPath("initializers").Index(i))...) - } - return allErrors -} - -func validateInitializer(initializer *admissionregistration.Initializer, fldPath *field.Path) field.ErrorList { - var allErrors field.ErrorList - // initlializer.Name must be fully qualified - allErrors = append(allErrors, validation.IsFullyQualifiedName(fldPath.Child("name"), initializer.Name)...) - - for i, rule := range initializer.Rules { - notAllowSubresources := false - allErrors = append(allErrors, validateRule(&rule, fldPath.Child("rules").Index(i), notAllowSubresources)...) - } - return allErrors -} - func hasWildcard(slice []string) bool { for _, s := range slice { if s == "*" { @@ -67,7 +49,7 @@ func validateResources(resources []string, fldPath *field.Path) field.ErrorList // */x resourcesWithWildcardSubresoures := sets.String{} // x/* - subResoucesWithWildcardResource := sets.String{} + subResourcesWithWildcardResource := sets.String{} // */* hasDoubleWildcard := false // * @@ -95,14 +77,14 @@ func validateResources(resources []string, fldPath *field.Path) field.ErrorList if _, ok := resourcesWithWildcardSubresoures[res]; ok { allErrors = append(allErrors, field.Invalid(fldPath.Index(i), resSub, fmt.Sprintf("if '%s/*' is present, must not specify %s", res, resSub))) } - if _, ok := subResoucesWithWildcardResource[sub]; ok { + if _, ok := subResourcesWithWildcardResource[sub]; ok { allErrors = append(allErrors, field.Invalid(fldPath.Index(i), resSub, fmt.Sprintf("if '*/%s' is present, must not specify %s", sub, resSub))) } if sub == "*" { resourcesWithWildcardSubresoures[res] = struct{}{} } if res == "*" { - subResoucesWithWildcardResource[sub] = struct{}{} + subResourcesWithWildcardResource[sub] = struct{}{} } } if len(resources) > 1 && hasDoubleWildcard { @@ -133,6 +115,12 @@ func validateResourcesNoSubResources(resources []string, fldPath *field.Path) fi return allErrors } +var validScopes = sets.NewString( + string(admissionregistration.ClusterScope), + string(admissionregistration.NamespacedScope), + string(admissionregistration.AllScopes), +) + func validateRule(rule *admissionregistration.Rule, fldPath *field.Path, allowSubResource bool) field.ErrorList { var allErrors field.ErrorList if len(rule.APIGroups) == 0 { @@ -158,25 +146,77 @@ func validateRule(rule *admissionregistration.Rule, fldPath *field.Path, allowSu } else { allErrors = append(allErrors, validateResourcesNoSubResources(rule.Resources, fldPath.Child("resources"))...) } + if rule.Scope != nil && !validScopes.Has(string(*rule.Scope)) { + allErrors = append(allErrors, field.NotSupported(fldPath.Child("scope"), *rule.Scope, validScopes.List())) + } return allErrors } -func ValidateInitializerConfigurationUpdate(newIC, oldIC *admissionregistration.InitializerConfiguration) field.ErrorList { - return ValidateInitializerConfiguration(newIC) +var AcceptedAdmissionReviewVersions = []string{v1beta1.SchemeGroupVersion.Version} + +func isAcceptedAdmissionReviewVersion(v string) bool { + for _, version := range AcceptedAdmissionReviewVersions { + if v == version { + return true + } + } + return false +} + +func validateAdmissionReviewVersions(versions []string, requireRecognizedVersion bool, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + + // Currently only v1beta1 accepted in AdmissionReviewVersions + if len(versions) < 1 { + allErrors = append(allErrors, field.Required(fldPath, "")) + } else { + seen := map[string]bool{} + hasAcceptedVersion := false + for i, v := range versions { + if seen[v] { + allErrors = append(allErrors, field.Invalid(fldPath.Index(i), v, "duplicate version")) + continue + } + seen[v] = true + for _, errString := range utilvalidation.IsDNS1035Label(v) { + allErrors = append(allErrors, field.Invalid(fldPath.Index(i), v, errString)) + } + if isAcceptedAdmissionReviewVersion(v) { + hasAcceptedVersion = true + } + } + if requireRecognizedVersion && !hasAcceptedVersion { + allErrors = append(allErrors, field.Invalid( + fldPath, versions, + fmt.Sprintf("none of the versions accepted by this server. accepted version(s) are %v", + strings.Join(AcceptedAdmissionReviewVersions, ", ")))) + } + } + return allErrors } func ValidateValidatingWebhookConfiguration(e *admissionregistration.ValidatingWebhookConfiguration) field.ErrorList { + return validateValidatingWebhookConfiguration(e, true) +} + +func validateValidatingWebhookConfiguration(e *admissionregistration.ValidatingWebhookConfiguration, requireRecognizedVersion bool) field.ErrorList { allErrors := genericvalidation.ValidateObjectMeta(&e.ObjectMeta, false, genericvalidation.NameIsDNSSubdomain, field.NewPath("metadata")) for i, hook := range e.Webhooks { allErrors = append(allErrors, validateWebhook(&hook, field.NewPath("webhooks").Index(i))...) + allErrors = append(allErrors, validateAdmissionReviewVersions(hook.AdmissionReviewVersions, requireRecognizedVersion, field.NewPath("webhooks").Index(i).Child("admissionReviewVersions"))...) } return allErrors } func ValidateMutatingWebhookConfiguration(e *admissionregistration.MutatingWebhookConfiguration) field.ErrorList { + return validateMutatingWebhookConfiguration(e, true) +} + +func validateMutatingWebhookConfiguration(e *admissionregistration.MutatingWebhookConfiguration, requireRecognizedVersion bool) field.ErrorList { allErrors := genericvalidation.ValidateObjectMeta(&e.ObjectMeta, false, genericvalidation.NameIsDNSSubdomain, field.NewPath("metadata")) for i, hook := range e.Webhooks { allErrors = append(allErrors, validateWebhook(&hook, field.NewPath("webhooks").Index(i))...) + allErrors = append(allErrors, validateAdmissionReviewVersions(hook.AdmissionReviewVersions, requireRecognizedVersion, field.NewPath("webhooks").Index(i).Child("admissionReviewVersions"))...) } return allErrors } @@ -195,6 +235,9 @@ func validateWebhook(hook *admissionregistration.Webhook, fldPath *field.Path) f if hook.SideEffects != nil && !supportedSideEffectClasses.Has(string(*hook.SideEffects)) { allErrors = append(allErrors, field.NotSupported(fldPath.Child("sideEffects"), *hook.SideEffects, supportedSideEffectClasses.List())) } + if hook.TimeoutSeconds != nil && (*hook.TimeoutSeconds > 30 || *hook.TimeoutSeconds < 1) { + allErrors = append(allErrors, field.Invalid(fldPath.Child("timeoutSeconds"), *hook.TimeoutSeconds, "the timeout value must be between 1 and 30 seconds")) + } if hook.NamespaceSelector != nil { allErrors = append(allErrors, metav1validation.ValidateLabelSelector(hook.NamespaceSelector, fldPath.Child("namespaceSelector"))...) @@ -259,10 +302,28 @@ func validateRuleWithOperations(ruleWithOperations *admissionregistration.RuleWi return allErrors } +// hasAcceptedAdmissionReviewVersions returns true if all webhooks have at least one +// admission review version this apiserver accepts. +func hasAcceptedAdmissionReviewVersions(webhooks []admissionregistration.Webhook) bool { + for _, hook := range webhooks { + hasRecognizedVersion := false + for _, version := range hook.AdmissionReviewVersions { + if isAcceptedAdmissionReviewVersion(version) { + hasRecognizedVersion = true + break + } + } + if !hasRecognizedVersion && len(hook.AdmissionReviewVersions) > 0 { + return false + } + } + return true +} + func ValidateValidatingWebhookConfigurationUpdate(newC, oldC *admissionregistration.ValidatingWebhookConfiguration) field.ErrorList { - return ValidateValidatingWebhookConfiguration(newC) + return validateValidatingWebhookConfiguration(newC, hasAcceptedAdmissionReviewVersions(oldC.Webhooks)) } func ValidateMutatingWebhookConfigurationUpdate(newC, oldC *admissionregistration.MutatingWebhookConfiguration) field.ErrorList { - return ValidateMutatingWebhookConfiguration(newC) + return validateMutatingWebhookConfiguration(newC, hasAcceptedAdmissionReviewVersions(oldC.Webhooks)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/zz_generated.deepcopy.go index 4d86d15899d..b91317c7958 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/admissionregistration/zz_generated.deepcopy.go @@ -25,95 +25,6 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Initializer) DeepCopyInto(out *Initializer) { - *out = *in - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]Rule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Initializer. -func (in *Initializer) DeepCopy() *Initializer { - if in == nil { - return nil - } - out := new(Initializer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InitializerConfiguration) DeepCopyInto(out *InitializerConfiguration) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Initializers != nil { - in, out := &in.Initializers, &out.Initializers - *out = make([]Initializer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitializerConfiguration. -func (in *InitializerConfiguration) DeepCopy() *InitializerConfiguration { - if in == nil { - return nil - } - out := new(InitializerConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InitializerConfiguration) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InitializerConfigurationList) DeepCopyInto(out *InitializerConfigurationList) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]InitializerConfiguration, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitializerConfigurationList. -func (in *InitializerConfigurationList) DeepCopy() *InitializerConfigurationList { - if in == nil { - return nil - } - out := new(InitializerConfigurationList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InitializerConfigurationList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MutatingWebhookConfiguration) DeepCopyInto(out *MutatingWebhookConfiguration) { *out = *in @@ -198,6 +109,11 @@ func (in *Rule) DeepCopyInto(out *Rule) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(ScopeType) + **out = **in + } return } @@ -346,6 +262,16 @@ func (in *Webhook) DeepCopyInto(out *Webhook) { *out = new(SideEffectClass) **out = **in } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/apps/OWNERS old mode 100755 new mode 100644 index 9fc48015cc3..1ed2b1cd1d6 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go index c15927d45ec..8e40891b852 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go @@ -59,7 +59,7 @@ const ( // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -376,14 +376,14 @@ type DeploymentStrategy struct { type DeploymentStrategyType string const ( - // Kill all existing pods before creating new ones. + // RecreateDeploymentStrategyType - kill all existing pods before creating new ones. RecreateDeploymentStrategyType DeploymentStrategyType = "Recreate" - // Replace the old RCs by new one using rolling update i.e gradually scale down the old RCs and scale up the new one. + // RollingUpdateDeploymentStrategyType - Replace the old RCs by new one using rolling update i.e gradually scale down the old RCs and scale up the new one. RollingUpdateDeploymentStrategyType DeploymentStrategyType = "RollingUpdate" ) -// Spec to control the desired behavior of rolling update. +// RollingUpdateDeployment is the spec to control the desired behavior of rolling update. type RollingUpdateDeployment struct { // The maximum number of pods that can be unavailable during the update. // Value can be an absolute number (ex: 5) or a percentage of total pods at the start of update (ex: 10%). @@ -407,7 +407,7 @@ type RollingUpdateDeployment struct { // Example: when this is set to 30%, the new RC can be scaled up by 30% // immediately when the rolling update starts. Once old pods have been killed, // new RC can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of original pods. + // at any time during the update is at most 130% of original pods. // +optional MaxSurge intstr.IntOrString } @@ -511,14 +511,14 @@ type DaemonSetUpdateStrategy struct { type DaemonSetUpdateStrategyType string const ( - // Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other. + // RollingUpdateDaemonSetStrategyType - Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other. RollingUpdateDaemonSetStrategyType DaemonSetUpdateStrategyType = "RollingUpdate" - // Replace the old daemons only when it's killed + // OnDeleteDaemonSetStrategyType - Replace the old daemons only when it's killed OnDeleteDaemonSetStrategyType DaemonSetUpdateStrategyType = "OnDelete" ) -// Spec to control the desired behavior of daemon set rolling update. +// RollingUpdateDaemonSet is the spec to control the desired behavior of daemon set rolling update. type RollingUpdateDaemonSet struct { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1/zz_generated.defaults.go index 4b541a3b15a..1c63c1917c4 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1/zz_generated.defaults.go @@ -136,6 +136,9 @@ func SetObjectDefaults_DaemonSet(in *v1.DaemonSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -178,6 +181,9 @@ func SetObjectDefaults_DaemonSet(in *v1.DaemonSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -283,6 +289,9 @@ func SetObjectDefaults_Deployment(in *v1.Deployment) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -325,6 +334,9 @@ func SetObjectDefaults_Deployment(in *v1.Deployment) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -430,6 +442,9 @@ func SetObjectDefaults_ReplicaSet(in *v1.ReplicaSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -472,6 +487,9 @@ func SetObjectDefaults_ReplicaSet(in *v1.ReplicaSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -577,6 +595,9 @@ func SetObjectDefaults_StatefulSet(in *v1.StatefulSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -619,6 +640,9 @@ func SetObjectDefaults_StatefulSet(in *v1.StatefulSet) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.VolumeClaimTemplates { a := &in.Spec.VolumeClaimTemplates[i] diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta1/zz_generated.defaults.go index 656f61edc99..4a31e2e1699 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta1/zz_generated.defaults.go @@ -132,6 +132,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -174,6 +177,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -279,6 +285,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta1.StatefulSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -321,6 +330,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta1.StatefulSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.VolumeClaimTemplates { a := &in.Spec.VolumeClaimTemplates[i] diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta2/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta2/zz_generated.defaults.go index 713bcaa7819..847a56b0d08 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta2/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1beta2/zz_generated.defaults.go @@ -136,6 +136,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta2.DaemonSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -178,6 +181,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta2.DaemonSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -283,6 +289,9 @@ func SetObjectDefaults_Deployment(in *v1beta2.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -325,6 +334,9 @@ func SetObjectDefaults_Deployment(in *v1beta2.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -430,6 +442,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta2.ReplicaSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -472,6 +487,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta2.ReplicaSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -577,6 +595,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta2.StatefulSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -619,6 +640,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta2.StatefulSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.VolumeClaimTemplates { a := &in.Spec.VolumeClaimTemplates[i] diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/validation/validation.go index 7cdf4c2dc27..9a954f13b4b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/validation/validation.go @@ -43,7 +43,7 @@ func ValidateStatefulSetName(name string, prefix bool) []string { return apimachineryvalidation.NameIsDNSSubdomain(name, prefix) } -// Validates the given template and ensures that it is in accordance with the desired selector. +// ValidatePodTemplateSpecForStatefulSet validates the given template and ensures that it is in accordance with the desired selector. func ValidatePodTemplateSpecForStatefulSet(template *api.PodTemplateSpec, selector labels.Selector, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if template == nil { @@ -127,7 +127,7 @@ func ValidateStatefulSetSpec(spec *apps.StatefulSetSpec, fldPath *field.Path) fi allErrs = append(allErrs, field.NotSupported(fldPath.Child("template", "spec", "restartPolicy"), spec.Template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)})) } if spec.Template.Spec.ActiveDeadlineSeconds != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "spec", "activeDeadlineSeconds"), spec.Template.Spec.ActiveDeadlineSeconds, "must not be specified")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("template", "spec", "activeDeadlineSeconds"), "activeDeadlineSeconds in StatefulSet is not Supported")) } return allErrs @@ -291,7 +291,7 @@ func validateDaemonSetStatus(status *apps.DaemonSetStatus, fldPath *field.Path) return allErrs } -// ValidateDaemonSetStatus validates tests if required fields in the DaemonSet Status section +// ValidateDaemonSetStatusUpdate validates tests if required fields in the DaemonSet Status section func ValidateDaemonSetStatusUpdate(ds, oldDS *apps.DaemonSet) field.ErrorList { allErrs := apivalidation.ValidateObjectMetaUpdate(&ds.ObjectMeta, &oldDS.ObjectMeta, field.NewPath("metadata")) allErrs = append(allErrs, validateDaemonSetStatus(&ds.Status, field.NewPath("status"))...) @@ -327,7 +327,7 @@ func ValidateDaemonSetSpec(spec *apps.DaemonSetSpec, fldPath *field.Path) field. allErrs = append(allErrs, field.NotSupported(fldPath.Child("template", "spec", "restartPolicy"), spec.Template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)})) } if spec.Template.Spec.ActiveDeadlineSeconds != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "spec", "activeDeadlineSeconds"), spec.Template.Spec.ActiveDeadlineSeconds, "must not be specified")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("template", "spec", "activeDeadlineSeconds"), "activeDeadlineSeconds in DaemonSet is not Supported")) } allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.TemplateGeneration), fldPath.Child("templateGeneration"))...) @@ -375,7 +375,7 @@ func ValidateDaemonSetUpdateStrategy(strategy *apps.DaemonSetUpdateStrategy, fld // trailing dashes are allowed. var ValidateDaemonSetName = apimachineryvalidation.NameIsDNSSubdomain -// Validates that the given name can be used as a deployment name. +// ValidateDeploymentName validates that the given name can be used as a deployment name. var ValidateDeploymentName = apimachineryvalidation.NameIsDNSSubdomain func ValidatePositiveIntOrPercent(intOrPercent intstr.IntOrString, fldPath *field.Path) field.ErrorList { @@ -463,7 +463,7 @@ func ValidateRollback(rollback *apps.RollbackConfig, fldPath *field.Path) field. return allErrs } -// Validates given deployment spec. +// ValidateDeploymentSpec validates given deployment spec. func ValidateDeploymentSpec(spec *apps.DeploymentSpec, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas"))...) @@ -502,7 +502,7 @@ func ValidateDeploymentSpec(spec *apps.DeploymentSpec, fldPath *field.Path) fiel return allErrs } -// Validates given deployment status. +// ValidateDeploymentStatus validates given deployment status. func ValidateDeploymentStatus(status *apps.DeploymentStatus, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(status.ObservedGeneration, fldPath.Child("observedGeneration"))...) @@ -642,7 +642,7 @@ func ValidateReplicaSetSpec(spec *apps.ReplicaSetSpec, fldPath *field.Path) fiel return allErrs } -// Validates the given template and ensures that it is in accordance with the desired selector and replicas. +// ValidatePodTemplateSpecForReplicaSet validates the given template and ensures that it is in accordance with the desired selector and replicas. func ValidatePodTemplateSpecForReplicaSet(template *api.PodTemplateSpec, selector labels.Selector, replicas int32, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if template == nil { @@ -664,7 +664,7 @@ func ValidatePodTemplateSpecForReplicaSet(template *api.PodTemplateSpec, selecto allErrs = append(allErrs, field.NotSupported(fldPath.Child("spec", "restartPolicy"), template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)})) } if template.Spec.ActiveDeadlineSeconds != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("spec", "activeDeadlineSeconds"), template.Spec.ActiveDeadlineSeconds, "must not be specified")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("spec", "activeDeadlineSeconds"), "activeDeadlineSeconds in ReplicaSet is not Supported")) } } return allErrs diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/authentication/OWNERS old mode 100755 new mode 100644 index 3b7ea1b131f..e0ec62deb2b --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-authenticators-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go index 203bf22bb34..77aaa472e1d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go @@ -135,7 +135,10 @@ type TokenRequestSpec struct { ExpirationSeconds int64 // BoundObjectRef is a reference to an object that the token will be bound to. - // The token will only be valid for as long as the bound objet exists. + // The token will only be valid for as long as the bound object exists. + // NOTE: The API server's TokenReview endpoint will validate the + // BoundObjectRef, but other audiences may not. Keep ExpirationSeconds + // small if you want prompt revocation. BoundObjectRef *BoundObjectReference } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/authorization/OWNERS old mode 100755 new mode 100644 index ff4a7f4bf9a..dbc9a28c6f2 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-authorizers-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/validation/validation.go index 512c383078c..4179b8274b6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/validation/validation.go @@ -56,7 +56,9 @@ func ValidateSelfSubjectRulesReview(review *authorizationapi.SelfSubjectRulesRev func ValidateSubjectAccessReview(sar *authorizationapi.SubjectAccessReview) field.ErrorList { allErrs := ValidateSubjectAccessReviewSpec(sar.Spec, field.NewPath("spec")) - if !apiequality.Semantic.DeepEqual(metav1.ObjectMeta{}, sar.ObjectMeta) { + objectMetaShallowCopy := sar.ObjectMeta + objectMetaShallowCopy.ManagedFields = nil + if !apiequality.Semantic.DeepEqual(metav1.ObjectMeta{}, objectMetaShallowCopy) { allErrs = append(allErrs, field.Invalid(field.NewPath("metadata"), sar.ObjectMeta, `must be empty`)) } return allErrs @@ -64,7 +66,9 @@ func ValidateSubjectAccessReview(sar *authorizationapi.SubjectAccessReview) fiel func ValidateSelfSubjectAccessReview(sar *authorizationapi.SelfSubjectAccessReview) field.ErrorList { allErrs := ValidateSelfSubjectAccessReviewSpec(sar.Spec, field.NewPath("spec")) - if !apiequality.Semantic.DeepEqual(metav1.ObjectMeta{}, sar.ObjectMeta) { + objectMetaShallowCopy := sar.ObjectMeta + objectMetaShallowCopy.ManagedFields = nil + if !apiequality.Semantic.DeepEqual(metav1.ObjectMeta{}, objectMetaShallowCopy) { allErrs = append(allErrs, field.Invalid(field.NewPath("metadata"), sar.ObjectMeta, `must be empty`)) } return allErrs @@ -75,6 +79,7 @@ func ValidateLocalSubjectAccessReview(sar *authorizationapi.LocalSubjectAccessRe objectMetaShallowCopy := sar.ObjectMeta objectMetaShallowCopy.Namespace = "" + objectMetaShallowCopy.ManagedFields = nil if !apiequality.Semantic.DeepEqual(metav1.ObjectMeta{}, objectMetaShallowCopy) { allErrs = append(allErrs, field.Invalid(field.NewPath("metadata"), sar.ObjectMeta, `must be empty except for namespace`)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/OWNERS old mode 100755 new mode 100644 index 4a495ec2532..dbc1e02356f --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go index 932e0fed61d..b2c52ed7cc0 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/autoscaling/v1" + "k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1" "k8s.io/kubernetes/pkg/apis/autoscaling/v2beta2" ) @@ -35,6 +36,7 @@ func init() { func Install(scheme *runtime.Scheme) { utilruntime.Must(autoscaling.AddToScheme(scheme)) utilruntime.Must(v2beta2.AddToScheme(scheme)) + utilruntime.Must(v2beta1.AddToScheme(scheme)) utilruntime.Must(v1.AddToScheme(scheme)) - utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion)) + utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion, v2beta1.SchemeGroupVersion, v2beta2.SchemeGroupVersion)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion.go index 3f85e75ba28..f68ac8c286b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion.go @@ -25,8 +25,7 @@ import ( "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/apis/autoscaling" - api "k8s.io/kubernetes/pkg/apis/core" - core "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/core" ) func addConversionFuncs(scheme *runtime.Scheme) error { @@ -298,7 +297,7 @@ func Convert_autoscaling_HorizontalPodAutoscaler_To_v1_HorizontalPodAutoscaler(i otherMetrics := make([]autoscalingv1.MetricSpec, 0, len(in.Spec.Metrics)) for _, metric := range in.Spec.Metrics { - if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == api.ResourceCPU && metric.Resource.Target.AverageUtilization != nil { + if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == core.ResourceCPU && metric.Resource.Target.AverageUtilization != nil { continue } @@ -411,7 +410,7 @@ func Convert_v1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(i { Type: autoscaling.ResourceMetricSourceType, Resource: &autoscaling.ResourceMetricSource{ - Name: api.ResourceCPU, + Name: core.ResourceCPU, Target: autoscaling.MetricTarget{ Type: autoscaling.UtilizationMetricType, }, @@ -449,7 +448,7 @@ func Convert_autoscaling_HorizontalPodAutoscalerSpec_To_v1_HorizontalPodAutoscal out.MaxReplicas = in.MaxReplicas for _, metric := range in.Metrics { - if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == api.ResourceCPU { + if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == core.ResourceCPU { if metric.Resource.Target.AverageUtilization != nil { out.TargetCPUUtilizationPercentage = new(int32) *out.TargetCPUUtilizationPercentage = *metric.Resource.Target.AverageUtilization @@ -474,7 +473,7 @@ func Convert_v1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscal { Type: autoscaling.ResourceMetricSourceType, Resource: &autoscaling.ResourceMetricSource{ - Name: api.ResourceCPU, + Name: core.ResourceCPU, Target: autoscaling.MetricTarget{ Type: autoscaling.UtilizationMetricType, }, @@ -496,7 +495,7 @@ func Convert_autoscaling_HorizontalPodAutoscalerStatus_To_v1_HorizontalPodAutosc out.DesiredReplicas = in.DesiredReplicas for _, metric := range in.CurrentMetrics { - if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == api.ResourceCPU { + if metric.Type == autoscaling.ResourceMetricSourceType && metric.Resource != nil && metric.Resource.Name == core.ResourceCPU { if metric.Resource.Current.AverageUtilization != nil { out.CurrentCPUUtilizationPercentage = new(int32) @@ -519,7 +518,7 @@ func Convert_v1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutosc { Type: autoscaling.ResourceMetricSourceType, Resource: &autoscaling.ResourceMetricStatus{ - Name: api.ResourceCPU, + Name: core.ResourceCPU, }, }, } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/BUILD new file mode 100644 index 00000000000..5fbc372b458 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/BUILD @@ -0,0 +1,60 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "conversion.go", + "defaults.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/autoscaling:go_default_library", + "//pkg/apis/core:go_default_library", + "//staging/src/k8s.io/api/autoscaling/v2beta1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "conversion_test.go", + "defaults_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/autoscaling:go_default_library", + "//pkg/apis/autoscaling/install:go_default_library", + "//pkg/apis/core/install:go_default_library", + "//staging/src/k8s.io/api/autoscaling/v2beta1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/conversion.go new file mode 100644 index 00000000000..142cf726493 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/conversion.go @@ -0,0 +1,294 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +import ( + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/apis/autoscaling" + core "k8s.io/kubernetes/pkg/apis/core" +) + +func addConversionFuncs(scheme *runtime.Scheme) error { + // Add non-generated conversion functions + err := scheme.AddConversionFuncs( + Convert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource, + Convert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource, + Convert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource, + Convert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource, + Convert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource, + Convert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource, + Convert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus, + Convert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus, + Convert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus, + Convert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus, + Convert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus, + Convert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus, + Convert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource, + Convert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource, + Convert_autoscaling_MetricTarget_To_v2beta1_CrossVersionObjectReference, + Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_MetricTarget, + Convert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus, + Convert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus, + Convert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler, + Convert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler, + ) + if err != nil { + return err + } + + return nil +} + +func Convert_autoscaling_MetricTarget_To_v2beta1_CrossVersionObjectReference(in *autoscaling.MetricTarget, out *autoscalingv2beta1.CrossVersionObjectReference, s conversion.Scope) error { + return nil +} + +func Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_MetricTarget(in *autoscalingv2beta1.CrossVersionObjectReference, out *autoscaling.MetricTarget, s conversion.Scope) error { + return nil +} + +func Convert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus(in *autoscalingv2beta1.ResourceMetricStatus, out *autoscaling.ResourceMetricStatus, s conversion.Scope) error { + out.Name = core.ResourceName(in.Name) + utilization := in.CurrentAverageUtilization + averageValue := in.CurrentAverageValue + out.Current = autoscaling.MetricValueStatus{ + AverageValue: &averageValue, + AverageUtilization: utilization, + } + return nil +} + +func Convert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus(in *autoscaling.ResourceMetricStatus, out *autoscalingv2beta1.ResourceMetricStatus, s conversion.Scope) error { + out.Name = v1.ResourceName(in.Name) + out.CurrentAverageUtilization = in.Current.AverageUtilization + if in.Current.AverageValue != nil { + out.CurrentAverageValue = *in.Current.AverageValue + } + return nil +} + +func Convert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource(in *autoscalingv2beta1.ResourceMetricSource, out *autoscaling.ResourceMetricSource, s conversion.Scope) error { + out.Name = core.ResourceName(in.Name) + utilization := in.TargetAverageUtilization + averageValue := in.TargetAverageValue + + var metricType autoscaling.MetricTargetType + if utilization == nil { + metricType = autoscaling.AverageValueMetricType + } else { + metricType = autoscaling.UtilizationMetricType + } + out.Target = autoscaling.MetricTarget{ + Type: metricType, + AverageValue: averageValue, + AverageUtilization: utilization, + } + return nil +} + +func Convert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource(in *autoscaling.ResourceMetricSource, out *autoscalingv2beta1.ResourceMetricSource, s conversion.Scope) error { + out.Name = v1.ResourceName(in.Name) + out.TargetAverageUtilization = in.Target.AverageUtilization + out.TargetAverageValue = in.Target.AverageValue + return nil +} + +func Convert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource(in *autoscaling.ExternalMetricSource, out *autoscalingv2beta1.ExternalMetricSource, s conversion.Scope) error { + out.MetricName = in.Metric.Name + out.TargetValue = in.Target.Value + out.TargetAverageValue = in.Target.AverageValue + out.MetricSelector = in.Metric.Selector + return nil +} + +func Convert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource(in *autoscalingv2beta1.ExternalMetricSource, out *autoscaling.ExternalMetricSource, s conversion.Scope) error { + value := in.TargetValue + averageValue := in.TargetAverageValue + + var metricType autoscaling.MetricTargetType + if value == nil { + metricType = autoscaling.AverageValueMetricType + } else { + metricType = autoscaling.ValueMetricType + } + + out.Target = autoscaling.MetricTarget{ + Type: metricType, + Value: value, + AverageValue: averageValue, + } + + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.MetricSelector, + } + return nil +} + +func Convert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource(in *autoscaling.ObjectMetricSource, out *autoscalingv2beta1.ObjectMetricSource, s conversion.Scope) error { + if in.Target.Value != nil { + out.TargetValue = *in.Target.Value + } + out.AverageValue = in.Target.AverageValue + + out.Target = autoscalingv2beta1.CrossVersionObjectReference{ + Kind: in.DescribedObject.Kind, + Name: in.DescribedObject.Name, + APIVersion: in.DescribedObject.APIVersion, + } + out.MetricName = in.Metric.Name + out.Selector = in.Metric.Selector + + return nil +} + +func Convert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource(in *autoscalingv2beta1.ObjectMetricSource, out *autoscaling.ObjectMetricSource, s conversion.Scope) error { + var metricType autoscaling.MetricTargetType + if in.AverageValue == nil { + metricType = autoscaling.ValueMetricType + } else { + metricType = autoscaling.AverageValueMetricType + } + out.Target = autoscaling.MetricTarget{ + Type: metricType, + Value: &in.TargetValue, + AverageValue: in.AverageValue, + } + out.DescribedObject = autoscaling.CrossVersionObjectReference{ + Kind: in.Target.Kind, + Name: in.Target.Name, + APIVersion: in.Target.APIVersion, + } + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.Selector, + } + return nil +} + +func Convert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource(in *autoscaling.PodsMetricSource, out *autoscalingv2beta1.PodsMetricSource, s conversion.Scope) error { + if in.Target.AverageValue != nil { + targetAverageValue := *in.Target.AverageValue + out.TargetAverageValue = targetAverageValue + } + + out.MetricName = in.Metric.Name + out.Selector = in.Metric.Selector + + return nil +} + +func Convert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource(in *autoscalingv2beta1.PodsMetricSource, out *autoscaling.PodsMetricSource, s conversion.Scope) error { + targetAverageValue := &in.TargetAverageValue + var metricType autoscaling.MetricTargetType + metricType = autoscaling.AverageValueMetricType + + out.Target = autoscaling.MetricTarget{ + Type: metricType, + AverageValue: targetAverageValue, + } + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.Selector, + } + return nil +} + +func Convert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus(in *autoscaling.ExternalMetricStatus, out *autoscalingv2beta1.ExternalMetricStatus, s conversion.Scope) error { + if &in.Current.AverageValue != nil { + out.CurrentAverageValue = in.Current.AverageValue + } + out.MetricName = in.Metric.Name + if in.Current.Value != nil { + out.CurrentValue = *in.Current.Value + } + out.MetricSelector = in.Metric.Selector + return nil +} + +func Convert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus(in *autoscalingv2beta1.ExternalMetricStatus, out *autoscaling.ExternalMetricStatus, s conversion.Scope) error { + value := in.CurrentValue + averageValue := in.CurrentAverageValue + out.Current = autoscaling.MetricValueStatus{ + Value: &value, + AverageValue: averageValue, + } + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.MetricSelector, + } + return nil +} + +func Convert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus(in *autoscaling.ObjectMetricStatus, out *autoscalingv2beta1.ObjectMetricStatus, s conversion.Scope) error { + if in.Current.Value != nil { + out.CurrentValue = *in.Current.Value + } + out.Target = autoscalingv2beta1.CrossVersionObjectReference{ + Kind: in.DescribedObject.Kind, + Name: in.DescribedObject.Name, + APIVersion: in.DescribedObject.APIVersion, + } + out.MetricName = in.Metric.Name + out.Selector = in.Metric.Selector + if in.Current.AverageValue != nil { + currentAverageValue := *in.Current.AverageValue + out.AverageValue = ¤tAverageValue + } + return nil +} + +func Convert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus(in *autoscalingv2beta1.ObjectMetricStatus, out *autoscaling.ObjectMetricStatus, s conversion.Scope) error { + out.Current = autoscaling.MetricValueStatus{ + Value: &in.CurrentValue, + AverageValue: in.AverageValue, + } + out.DescribedObject = autoscaling.CrossVersionObjectReference{ + Kind: in.Target.Kind, + Name: in.Target.Name, + APIVersion: in.Target.APIVersion, + } + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.Selector, + } + return nil +} + +func Convert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus(in *autoscaling.PodsMetricStatus, out *autoscalingv2beta1.PodsMetricStatus, s conversion.Scope) error { + if in.Current.AverageValue != nil { + out.CurrentAverageValue = *in.Current.AverageValue + } + out.MetricName = in.Metric.Name + out.Selector = in.Metric.Selector + return nil +} + +func Convert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus(in *autoscalingv2beta1.PodsMetricStatus, out *autoscaling.PodsMetricStatus, s conversion.Scope) error { + out.Current = autoscaling.MetricValueStatus{ + AverageValue: &in.CurrentAverageValue, + } + out.Metric = autoscaling.MetricIdentifier{ + Name: in.MetricName, + Selector: in.Selector, + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/defaults.go new file mode 100644 index 00000000000..5fdf8e7122c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/defaults.go @@ -0,0 +1,48 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +import ( + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/apis/autoscaling" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return RegisterDefaults(scheme) +} + +func SetDefaults_HorizontalPodAutoscaler(obj *autoscalingv2beta1.HorizontalPodAutoscaler) { + if obj.Spec.MinReplicas == nil { + minReplicas := int32(1) + obj.Spec.MinReplicas = &minReplicas + } + + if len(obj.Spec.Metrics) == 0 { + utilizationDefaultVal := int32(autoscaling.DefaultCPUUtilization) + obj.Spec.Metrics = []autoscalingv2beta1.MetricSpec{ + { + Type: autoscalingv2beta1.ResourceMetricSourceType, + Resource: &autoscalingv2beta1.ResourceMetricSource{ + Name: v1.ResourceCPU, + TargetAverageUtilization: &utilizationDefaultVal, + }, + }, + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/doc.go new file mode 100644 index 00000000000..411ef58dcf7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/autoscaling +// +k8s:conversion-gen-external-types=k8s.io/api/autoscaling/v2beta1 +// +k8s:defaulter-gen=TypeMeta +// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/autoscaling/v2beta1 + +package v2beta1 // import "k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/register.go new file mode 100644 index 00000000000..da80b2bef79 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/register.go @@ -0,0 +1,45 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta1 + +import ( + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "autoscaling" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v2beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &autoscalingv2beta1.SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addDefaultingFuncs, addConversionFuncs) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..8c98b810e5d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.conversion.go @@ -0,0 +1,819 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v2beta1 + +import ( + unsafe "unsafe" + + v2beta1 "k8s.io/api/autoscaling/v2beta1" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling" + core "k8s.io/kubernetes/pkg/apis/core" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v2beta1.CrossVersionObjectReference)(nil), (*autoscaling.CrossVersionObjectReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(a.(*v2beta1.CrossVersionObjectReference), b.(*autoscaling.CrossVersionObjectReference), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.CrossVersionObjectReference)(nil), (*v2beta1.CrossVersionObjectReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference(a.(*autoscaling.CrossVersionObjectReference), b.(*v2beta1.CrossVersionObjectReference), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ExternalMetricSource)(nil), (*autoscaling.ExternalMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource(a.(*v2beta1.ExternalMetricSource), b.(*autoscaling.ExternalMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ExternalMetricSource)(nil), (*v2beta1.ExternalMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource(a.(*autoscaling.ExternalMetricSource), b.(*v2beta1.ExternalMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ExternalMetricStatus)(nil), (*autoscaling.ExternalMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus(a.(*v2beta1.ExternalMetricStatus), b.(*autoscaling.ExternalMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ExternalMetricStatus)(nil), (*v2beta1.ExternalMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus(a.(*autoscaling.ExternalMetricStatus), b.(*v2beta1.ExternalMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.HorizontalPodAutoscaler)(nil), (*autoscaling.HorizontalPodAutoscaler)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(a.(*v2beta1.HorizontalPodAutoscaler), b.(*autoscaling.HorizontalPodAutoscaler), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.HorizontalPodAutoscaler)(nil), (*v2beta1.HorizontalPodAutoscaler)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler(a.(*autoscaling.HorizontalPodAutoscaler), b.(*v2beta1.HorizontalPodAutoscaler), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.HorizontalPodAutoscalerCondition)(nil), (*autoscaling.HorizontalPodAutoscalerCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_HorizontalPodAutoscalerCondition_To_autoscaling_HorizontalPodAutoscalerCondition(a.(*v2beta1.HorizontalPodAutoscalerCondition), b.(*autoscaling.HorizontalPodAutoscalerCondition), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.HorizontalPodAutoscalerCondition)(nil), (*v2beta1.HorizontalPodAutoscalerCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_HorizontalPodAutoscalerCondition_To_v2beta1_HorizontalPodAutoscalerCondition(a.(*autoscaling.HorizontalPodAutoscalerCondition), b.(*v2beta1.HorizontalPodAutoscalerCondition), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.HorizontalPodAutoscalerList)(nil), (*autoscaling.HorizontalPodAutoscalerList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_HorizontalPodAutoscalerList_To_autoscaling_HorizontalPodAutoscalerList(a.(*v2beta1.HorizontalPodAutoscalerList), b.(*autoscaling.HorizontalPodAutoscalerList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.HorizontalPodAutoscalerList)(nil), (*v2beta1.HorizontalPodAutoscalerList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_HorizontalPodAutoscalerList_To_v2beta1_HorizontalPodAutoscalerList(a.(*autoscaling.HorizontalPodAutoscalerList), b.(*v2beta1.HorizontalPodAutoscalerList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.HorizontalPodAutoscalerSpec)(nil), (*autoscaling.HorizontalPodAutoscalerSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec(a.(*v2beta1.HorizontalPodAutoscalerSpec), b.(*autoscaling.HorizontalPodAutoscalerSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.HorizontalPodAutoscalerSpec)(nil), (*v2beta1.HorizontalPodAutoscalerSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec(a.(*autoscaling.HorizontalPodAutoscalerSpec), b.(*v2beta1.HorizontalPodAutoscalerSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.HorizontalPodAutoscalerStatus)(nil), (*autoscaling.HorizontalPodAutoscalerStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus(a.(*v2beta1.HorizontalPodAutoscalerStatus), b.(*autoscaling.HorizontalPodAutoscalerStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.HorizontalPodAutoscalerStatus)(nil), (*v2beta1.HorizontalPodAutoscalerStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus(a.(*autoscaling.HorizontalPodAutoscalerStatus), b.(*v2beta1.HorizontalPodAutoscalerStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.MetricSpec)(nil), (*autoscaling.MetricSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_MetricSpec_To_autoscaling_MetricSpec(a.(*v2beta1.MetricSpec), b.(*autoscaling.MetricSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.MetricSpec)(nil), (*v2beta1.MetricSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_MetricSpec_To_v2beta1_MetricSpec(a.(*autoscaling.MetricSpec), b.(*v2beta1.MetricSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.MetricStatus)(nil), (*autoscaling.MetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_MetricStatus_To_autoscaling_MetricStatus(a.(*v2beta1.MetricStatus), b.(*autoscaling.MetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.MetricStatus)(nil), (*v2beta1.MetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_MetricStatus_To_v2beta1_MetricStatus(a.(*autoscaling.MetricStatus), b.(*v2beta1.MetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ObjectMetricSource)(nil), (*autoscaling.ObjectMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource(a.(*v2beta1.ObjectMetricSource), b.(*autoscaling.ObjectMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ObjectMetricSource)(nil), (*v2beta1.ObjectMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource(a.(*autoscaling.ObjectMetricSource), b.(*v2beta1.ObjectMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ObjectMetricStatus)(nil), (*autoscaling.ObjectMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus(a.(*v2beta1.ObjectMetricStatus), b.(*autoscaling.ObjectMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ObjectMetricStatus)(nil), (*v2beta1.ObjectMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus(a.(*autoscaling.ObjectMetricStatus), b.(*v2beta1.ObjectMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.PodsMetricSource)(nil), (*autoscaling.PodsMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource(a.(*v2beta1.PodsMetricSource), b.(*autoscaling.PodsMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.PodsMetricSource)(nil), (*v2beta1.PodsMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource(a.(*autoscaling.PodsMetricSource), b.(*v2beta1.PodsMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.PodsMetricStatus)(nil), (*autoscaling.PodsMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus(a.(*v2beta1.PodsMetricStatus), b.(*autoscaling.PodsMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.PodsMetricStatus)(nil), (*v2beta1.PodsMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus(a.(*autoscaling.PodsMetricStatus), b.(*v2beta1.PodsMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ResourceMetricSource)(nil), (*autoscaling.ResourceMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource(a.(*v2beta1.ResourceMetricSource), b.(*autoscaling.ResourceMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ResourceMetricSource)(nil), (*v2beta1.ResourceMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource(a.(*autoscaling.ResourceMetricSource), b.(*v2beta1.ResourceMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v2beta1.ResourceMetricStatus)(nil), (*autoscaling.ResourceMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus(a.(*v2beta1.ResourceMetricStatus), b.(*autoscaling.ResourceMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*autoscaling.ResourceMetricStatus)(nil), (*v2beta1.ResourceMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus(a.(*autoscaling.ResourceMetricStatus), b.(*v2beta1.ResourceMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ExternalMetricSource)(nil), (*v2beta1.ExternalMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource(a.(*autoscaling.ExternalMetricSource), b.(*v2beta1.ExternalMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ExternalMetricStatus)(nil), (*v2beta1.ExternalMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus(a.(*autoscaling.ExternalMetricStatus), b.(*v2beta1.ExternalMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.MetricTarget)(nil), (*v2beta1.CrossVersionObjectReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_MetricTarget_To_v2beta1_CrossVersionObjectReference(a.(*autoscaling.MetricTarget), b.(*v2beta1.CrossVersionObjectReference), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ObjectMetricSource)(nil), (*v2beta1.ObjectMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource(a.(*autoscaling.ObjectMetricSource), b.(*v2beta1.ObjectMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ObjectMetricStatus)(nil), (*v2beta1.ObjectMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus(a.(*autoscaling.ObjectMetricStatus), b.(*v2beta1.ObjectMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.PodsMetricSource)(nil), (*v2beta1.PodsMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource(a.(*autoscaling.PodsMetricSource), b.(*v2beta1.PodsMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.PodsMetricStatus)(nil), (*v2beta1.PodsMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus(a.(*autoscaling.PodsMetricStatus), b.(*v2beta1.PodsMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ResourceMetricSource)(nil), (*v2beta1.ResourceMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource(a.(*autoscaling.ResourceMetricSource), b.(*v2beta1.ResourceMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*autoscaling.ResourceMetricStatus)(nil), (*v2beta1.ResourceMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus(a.(*autoscaling.ResourceMetricStatus), b.(*v2beta1.ResourceMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.CrossVersionObjectReference)(nil), (*autoscaling.MetricTarget)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_MetricTarget(a.(*v2beta1.CrossVersionObjectReference), b.(*autoscaling.MetricTarget), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ExternalMetricSource)(nil), (*autoscaling.ExternalMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource(a.(*v2beta1.ExternalMetricSource), b.(*autoscaling.ExternalMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ExternalMetricStatus)(nil), (*autoscaling.ExternalMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus(a.(*v2beta1.ExternalMetricStatus), b.(*autoscaling.ExternalMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ObjectMetricSource)(nil), (*autoscaling.ObjectMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource(a.(*v2beta1.ObjectMetricSource), b.(*autoscaling.ObjectMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ObjectMetricStatus)(nil), (*autoscaling.ObjectMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus(a.(*v2beta1.ObjectMetricStatus), b.(*autoscaling.ObjectMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.PodsMetricSource)(nil), (*autoscaling.PodsMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource(a.(*v2beta1.PodsMetricSource), b.(*autoscaling.PodsMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.PodsMetricStatus)(nil), (*autoscaling.PodsMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus(a.(*v2beta1.PodsMetricStatus), b.(*autoscaling.PodsMetricStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ResourceMetricSource)(nil), (*autoscaling.ResourceMetricSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource(a.(*v2beta1.ResourceMetricSource), b.(*autoscaling.ResourceMetricSource), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v2beta1.ResourceMetricStatus)(nil), (*autoscaling.ResourceMetricStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus(a.(*v2beta1.ResourceMetricStatus), b.(*autoscaling.ResourceMetricStatus), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(in *v2beta1.CrossVersionObjectReference, out *autoscaling.CrossVersionObjectReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + return nil +} + +// Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference is an autogenerated conversion function. +func Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(in *v2beta1.CrossVersionObjectReference, out *autoscaling.CrossVersionObjectReference, s conversion.Scope) error { + return autoConvert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(in, out, s) +} + +func autoConvert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference(in *autoscaling.CrossVersionObjectReference, out *v2beta1.CrossVersionObjectReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + return nil +} + +// Convert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference is an autogenerated conversion function. +func Convert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference(in *autoscaling.CrossVersionObjectReference, out *v2beta1.CrossVersionObjectReference, s conversion.Scope) error { + return autoConvert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference(in, out, s) +} + +func autoConvert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource(in *v2beta1.ExternalMetricSource, out *autoscaling.ExternalMetricSource, s conversion.Scope) error { + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.MetricSelector requires manual conversion: does not exist in peer-type + // WARNING: in.TargetValue requires manual conversion: does not exist in peer-type + // WARNING: in.TargetAverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource(in *autoscaling.ExternalMetricSource, out *v2beta1.ExternalMetricSource, s conversion.Scope) error { + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + // WARNING: in.Target requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus(in *v2beta1.ExternalMetricStatus, out *autoscaling.ExternalMetricStatus, s conversion.Scope) error { + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.MetricSelector requires manual conversion: does not exist in peer-type + // WARNING: in.CurrentValue requires manual conversion: does not exist in peer-type + // WARNING: in.CurrentAverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus(in *autoscaling.ExternalMetricStatus, out *v2beta1.ExternalMetricStatus, s conversion.Scope) error { + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + // WARNING: in.Current requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(in *v2beta1.HorizontalPodAutoscaler, out *autoscaling.HorizontalPodAutoscaler, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler is an autogenerated conversion function. +func Convert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(in *v2beta1.HorizontalPodAutoscaler, out *autoscaling.HorizontalPodAutoscaler, s conversion.Scope) error { + return autoConvert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(in, out, s) +} + +func autoConvert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler(in *autoscaling.HorizontalPodAutoscaler, out *v2beta1.HorizontalPodAutoscaler, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler is an autogenerated conversion function. +func Convert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler(in *autoscaling.HorizontalPodAutoscaler, out *v2beta1.HorizontalPodAutoscaler, s conversion.Scope) error { + return autoConvert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler(in, out, s) +} + +func autoConvert_v2beta1_HorizontalPodAutoscalerCondition_To_autoscaling_HorizontalPodAutoscalerCondition(in *v2beta1.HorizontalPodAutoscalerCondition, out *autoscaling.HorizontalPodAutoscalerCondition, s conversion.Scope) error { + out.Type = autoscaling.HorizontalPodAutoscalerConditionType(in.Type) + out.Status = autoscaling.ConditionStatus(in.Status) + out.LastTransitionTime = in.LastTransitionTime + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +// Convert_v2beta1_HorizontalPodAutoscalerCondition_To_autoscaling_HorizontalPodAutoscalerCondition is an autogenerated conversion function. +func Convert_v2beta1_HorizontalPodAutoscalerCondition_To_autoscaling_HorizontalPodAutoscalerCondition(in *v2beta1.HorizontalPodAutoscalerCondition, out *autoscaling.HorizontalPodAutoscalerCondition, s conversion.Scope) error { + return autoConvert_v2beta1_HorizontalPodAutoscalerCondition_To_autoscaling_HorizontalPodAutoscalerCondition(in, out, s) +} + +func autoConvert_autoscaling_HorizontalPodAutoscalerCondition_To_v2beta1_HorizontalPodAutoscalerCondition(in *autoscaling.HorizontalPodAutoscalerCondition, out *v2beta1.HorizontalPodAutoscalerCondition, s conversion.Scope) error { + out.Type = v2beta1.HorizontalPodAutoscalerConditionType(in.Type) + out.Status = v1.ConditionStatus(in.Status) + out.LastTransitionTime = in.LastTransitionTime + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +// Convert_autoscaling_HorizontalPodAutoscalerCondition_To_v2beta1_HorizontalPodAutoscalerCondition is an autogenerated conversion function. +func Convert_autoscaling_HorizontalPodAutoscalerCondition_To_v2beta1_HorizontalPodAutoscalerCondition(in *autoscaling.HorizontalPodAutoscalerCondition, out *v2beta1.HorizontalPodAutoscalerCondition, s conversion.Scope) error { + return autoConvert_autoscaling_HorizontalPodAutoscalerCondition_To_v2beta1_HorizontalPodAutoscalerCondition(in, out, s) +} + +func autoConvert_v2beta1_HorizontalPodAutoscalerList_To_autoscaling_HorizontalPodAutoscalerList(in *v2beta1.HorizontalPodAutoscalerList, out *autoscaling.HorizontalPodAutoscalerList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]autoscaling.HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := Convert_v2beta1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +// Convert_v2beta1_HorizontalPodAutoscalerList_To_autoscaling_HorizontalPodAutoscalerList is an autogenerated conversion function. +func Convert_v2beta1_HorizontalPodAutoscalerList_To_autoscaling_HorizontalPodAutoscalerList(in *v2beta1.HorizontalPodAutoscalerList, out *autoscaling.HorizontalPodAutoscalerList, s conversion.Scope) error { + return autoConvert_v2beta1_HorizontalPodAutoscalerList_To_autoscaling_HorizontalPodAutoscalerList(in, out, s) +} + +func autoConvert_autoscaling_HorizontalPodAutoscalerList_To_v2beta1_HorizontalPodAutoscalerList(in *autoscaling.HorizontalPodAutoscalerList, out *v2beta1.HorizontalPodAutoscalerList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]v2beta1.HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := Convert_autoscaling_HorizontalPodAutoscaler_To_v2beta1_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +// Convert_autoscaling_HorizontalPodAutoscalerList_To_v2beta1_HorizontalPodAutoscalerList is an autogenerated conversion function. +func Convert_autoscaling_HorizontalPodAutoscalerList_To_v2beta1_HorizontalPodAutoscalerList(in *autoscaling.HorizontalPodAutoscalerList, out *v2beta1.HorizontalPodAutoscalerList, s conversion.Scope) error { + return autoConvert_autoscaling_HorizontalPodAutoscalerList_To_v2beta1_HorizontalPodAutoscalerList(in, out, s) +} + +func autoConvert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec(in *v2beta1.HorizontalPodAutoscalerSpec, out *autoscaling.HorizontalPodAutoscalerSpec, s conversion.Scope) error { + if err := Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(&in.ScaleTargetRef, &out.ScaleTargetRef, s); err != nil { + return err + } + out.MinReplicas = (*int32)(unsafe.Pointer(in.MinReplicas)) + out.MaxReplicas = in.MaxReplicas + if in.Metrics != nil { + in, out := &in.Metrics, &out.Metrics + *out = make([]autoscaling.MetricSpec, len(*in)) + for i := range *in { + if err := Convert_v2beta1_MetricSpec_To_autoscaling_MetricSpec(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Metrics = nil + } + return nil +} + +// Convert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec is an autogenerated conversion function. +func Convert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec(in *v2beta1.HorizontalPodAutoscalerSpec, out *autoscaling.HorizontalPodAutoscalerSpec, s conversion.Scope) error { + return autoConvert_v2beta1_HorizontalPodAutoscalerSpec_To_autoscaling_HorizontalPodAutoscalerSpec(in, out, s) +} + +func autoConvert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec(in *autoscaling.HorizontalPodAutoscalerSpec, out *v2beta1.HorizontalPodAutoscalerSpec, s conversion.Scope) error { + if err := Convert_autoscaling_CrossVersionObjectReference_To_v2beta1_CrossVersionObjectReference(&in.ScaleTargetRef, &out.ScaleTargetRef, s); err != nil { + return err + } + out.MinReplicas = (*int32)(unsafe.Pointer(in.MinReplicas)) + out.MaxReplicas = in.MaxReplicas + if in.Metrics != nil { + in, out := &in.Metrics, &out.Metrics + *out = make([]v2beta1.MetricSpec, len(*in)) + for i := range *in { + if err := Convert_autoscaling_MetricSpec_To_v2beta1_MetricSpec(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Metrics = nil + } + return nil +} + +// Convert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec is an autogenerated conversion function. +func Convert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec(in *autoscaling.HorizontalPodAutoscalerSpec, out *v2beta1.HorizontalPodAutoscalerSpec, s conversion.Scope) error { + return autoConvert_autoscaling_HorizontalPodAutoscalerSpec_To_v2beta1_HorizontalPodAutoscalerSpec(in, out, s) +} + +func autoConvert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus(in *v2beta1.HorizontalPodAutoscalerStatus, out *autoscaling.HorizontalPodAutoscalerStatus, s conversion.Scope) error { + out.ObservedGeneration = (*int64)(unsafe.Pointer(in.ObservedGeneration)) + out.LastScaleTime = (*metav1.Time)(unsafe.Pointer(in.LastScaleTime)) + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentMetrics != nil { + in, out := &in.CurrentMetrics, &out.CurrentMetrics + *out = make([]autoscaling.MetricStatus, len(*in)) + for i := range *in { + if err := Convert_v2beta1_MetricStatus_To_autoscaling_MetricStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.CurrentMetrics = nil + } + out.Conditions = *(*[]autoscaling.HorizontalPodAutoscalerCondition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus is an autogenerated conversion function. +func Convert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus(in *v2beta1.HorizontalPodAutoscalerStatus, out *autoscaling.HorizontalPodAutoscalerStatus, s conversion.Scope) error { + return autoConvert_v2beta1_HorizontalPodAutoscalerStatus_To_autoscaling_HorizontalPodAutoscalerStatus(in, out, s) +} + +func autoConvert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus(in *autoscaling.HorizontalPodAutoscalerStatus, out *v2beta1.HorizontalPodAutoscalerStatus, s conversion.Scope) error { + out.ObservedGeneration = (*int64)(unsafe.Pointer(in.ObservedGeneration)) + out.LastScaleTime = (*metav1.Time)(unsafe.Pointer(in.LastScaleTime)) + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentMetrics != nil { + in, out := &in.CurrentMetrics, &out.CurrentMetrics + *out = make([]v2beta1.MetricStatus, len(*in)) + for i := range *in { + if err := Convert_autoscaling_MetricStatus_To_v2beta1_MetricStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.CurrentMetrics = nil + } + out.Conditions = *(*[]v2beta1.HorizontalPodAutoscalerCondition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus is an autogenerated conversion function. +func Convert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus(in *autoscaling.HorizontalPodAutoscalerStatus, out *v2beta1.HorizontalPodAutoscalerStatus, s conversion.Scope) error { + return autoConvert_autoscaling_HorizontalPodAutoscalerStatus_To_v2beta1_HorizontalPodAutoscalerStatus(in, out, s) +} + +func autoConvert_v2beta1_MetricSpec_To_autoscaling_MetricSpec(in *v2beta1.MetricSpec, out *autoscaling.MetricSpec, s conversion.Scope) error { + out.Type = autoscaling.MetricSourceType(in.Type) + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(autoscaling.ObjectMetricSource) + if err := Convert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Object = nil + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(autoscaling.PodsMetricSource) + if err := Convert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Pods = nil + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(autoscaling.ResourceMetricSource) + if err := Convert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Resource = nil + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(autoscaling.ExternalMetricSource) + if err := Convert_v2beta1_ExternalMetricSource_To_autoscaling_ExternalMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } + return nil +} + +// Convert_v2beta1_MetricSpec_To_autoscaling_MetricSpec is an autogenerated conversion function. +func Convert_v2beta1_MetricSpec_To_autoscaling_MetricSpec(in *v2beta1.MetricSpec, out *autoscaling.MetricSpec, s conversion.Scope) error { + return autoConvert_v2beta1_MetricSpec_To_autoscaling_MetricSpec(in, out, s) +} + +func autoConvert_autoscaling_MetricSpec_To_v2beta1_MetricSpec(in *autoscaling.MetricSpec, out *v2beta1.MetricSpec, s conversion.Scope) error { + out.Type = v2beta1.MetricSourceType(in.Type) + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(v2beta1.ObjectMetricSource) + if err := Convert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Object = nil + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(v2beta1.PodsMetricSource) + if err := Convert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Pods = nil + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(v2beta1.ResourceMetricSource) + if err := Convert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.Resource = nil + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(v2beta1.ExternalMetricSource) + if err := Convert_autoscaling_ExternalMetricSource_To_v2beta1_ExternalMetricSource(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } + return nil +} + +// Convert_autoscaling_MetricSpec_To_v2beta1_MetricSpec is an autogenerated conversion function. +func Convert_autoscaling_MetricSpec_To_v2beta1_MetricSpec(in *autoscaling.MetricSpec, out *v2beta1.MetricSpec, s conversion.Scope) error { + return autoConvert_autoscaling_MetricSpec_To_v2beta1_MetricSpec(in, out, s) +} + +func autoConvert_v2beta1_MetricStatus_To_autoscaling_MetricStatus(in *v2beta1.MetricStatus, out *autoscaling.MetricStatus, s conversion.Scope) error { + out.Type = autoscaling.MetricSourceType(in.Type) + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(autoscaling.ObjectMetricStatus) + if err := Convert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Object = nil + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(autoscaling.PodsMetricStatus) + if err := Convert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Pods = nil + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(autoscaling.ResourceMetricStatus) + if err := Convert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Resource = nil + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(autoscaling.ExternalMetricStatus) + if err := Convert_v2beta1_ExternalMetricStatus_To_autoscaling_ExternalMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } + return nil +} + +// Convert_v2beta1_MetricStatus_To_autoscaling_MetricStatus is an autogenerated conversion function. +func Convert_v2beta1_MetricStatus_To_autoscaling_MetricStatus(in *v2beta1.MetricStatus, out *autoscaling.MetricStatus, s conversion.Scope) error { + return autoConvert_v2beta1_MetricStatus_To_autoscaling_MetricStatus(in, out, s) +} + +func autoConvert_autoscaling_MetricStatus_To_v2beta1_MetricStatus(in *autoscaling.MetricStatus, out *v2beta1.MetricStatus, s conversion.Scope) error { + out.Type = v2beta1.MetricSourceType(in.Type) + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(v2beta1.ObjectMetricStatus) + if err := Convert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Object = nil + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(v2beta1.PodsMetricStatus) + if err := Convert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Pods = nil + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(v2beta1.ResourceMetricStatus) + if err := Convert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.Resource = nil + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(v2beta1.ExternalMetricStatus) + if err := Convert_autoscaling_ExternalMetricStatus_To_v2beta1_ExternalMetricStatus(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } + return nil +} + +// Convert_autoscaling_MetricStatus_To_v2beta1_MetricStatus is an autogenerated conversion function. +func Convert_autoscaling_MetricStatus_To_v2beta1_MetricStatus(in *autoscaling.MetricStatus, out *v2beta1.MetricStatus, s conversion.Scope) error { + return autoConvert_autoscaling_MetricStatus_To_v2beta1_MetricStatus(in, out, s) +} + +func autoConvert_v2beta1_ObjectMetricSource_To_autoscaling_ObjectMetricSource(in *v2beta1.ObjectMetricSource, out *autoscaling.ObjectMetricSource, s conversion.Scope) error { + if err := Convert_v2beta1_CrossVersionObjectReference_To_autoscaling_MetricTarget(&in.Target, &out.Target, s); err != nil { + return err + } + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.TargetValue requires manual conversion: does not exist in peer-type + // WARNING: in.Selector requires manual conversion: does not exist in peer-type + // WARNING: in.AverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ObjectMetricSource_To_v2beta1_ObjectMetricSource(in *autoscaling.ObjectMetricSource, out *v2beta1.ObjectMetricSource, s conversion.Scope) error { + // WARNING: in.DescribedObject requires manual conversion: does not exist in peer-type + if err := Convert_autoscaling_MetricTarget_To_v2beta1_CrossVersionObjectReference(&in.Target, &out.Target, s); err != nil { + return err + } + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_ObjectMetricStatus_To_autoscaling_ObjectMetricStatus(in *v2beta1.ObjectMetricStatus, out *autoscaling.ObjectMetricStatus, s conversion.Scope) error { + // WARNING: in.Target requires manual conversion: does not exist in peer-type + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.CurrentValue requires manual conversion: does not exist in peer-type + // WARNING: in.Selector requires manual conversion: does not exist in peer-type + // WARNING: in.AverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ObjectMetricStatus_To_v2beta1_ObjectMetricStatus(in *autoscaling.ObjectMetricStatus, out *v2beta1.ObjectMetricStatus, s conversion.Scope) error { + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + // WARNING: in.Current requires manual conversion: does not exist in peer-type + // WARNING: in.DescribedObject requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_PodsMetricSource_To_autoscaling_PodsMetricSource(in *v2beta1.PodsMetricSource, out *autoscaling.PodsMetricSource, s conversion.Scope) error { + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.TargetAverageValue requires manual conversion: does not exist in peer-type + // WARNING: in.Selector requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_PodsMetricSource_To_v2beta1_PodsMetricSource(in *autoscaling.PodsMetricSource, out *v2beta1.PodsMetricSource, s conversion.Scope) error { + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + // WARNING: in.Target requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_PodsMetricStatus_To_autoscaling_PodsMetricStatus(in *v2beta1.PodsMetricStatus, out *autoscaling.PodsMetricStatus, s conversion.Scope) error { + // WARNING: in.MetricName requires manual conversion: does not exist in peer-type + // WARNING: in.CurrentAverageValue requires manual conversion: does not exist in peer-type + // WARNING: in.Selector requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_PodsMetricStatus_To_v2beta1_PodsMetricStatus(in *autoscaling.PodsMetricStatus, out *v2beta1.PodsMetricStatus, s conversion.Scope) error { + // WARNING: in.Metric requires manual conversion: does not exist in peer-type + // WARNING: in.Current requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_ResourceMetricSource_To_autoscaling_ResourceMetricSource(in *v2beta1.ResourceMetricSource, out *autoscaling.ResourceMetricSource, s conversion.Scope) error { + out.Name = core.ResourceName(in.Name) + // WARNING: in.TargetAverageUtilization requires manual conversion: does not exist in peer-type + // WARNING: in.TargetAverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ResourceMetricSource_To_v2beta1_ResourceMetricSource(in *autoscaling.ResourceMetricSource, out *v2beta1.ResourceMetricSource, s conversion.Scope) error { + out.Name = v1.ResourceName(in.Name) + // WARNING: in.Target requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v2beta1_ResourceMetricStatus_To_autoscaling_ResourceMetricStatus(in *v2beta1.ResourceMetricStatus, out *autoscaling.ResourceMetricStatus, s conversion.Scope) error { + out.Name = core.ResourceName(in.Name) + // WARNING: in.CurrentAverageUtilization requires manual conversion: does not exist in peer-type + // WARNING: in.CurrentAverageValue requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_autoscaling_ResourceMetricStatus_To_v2beta1_ResourceMetricStatus(in *autoscaling.ResourceMetricStatus, out *v2beta1.ResourceMetricStatus, s conversion.Scope) error { + out.Name = v1.ResourceName(in.Name) + // WARNING: in.Current requires manual conversion: does not exist in peer-type + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.defaults.go new file mode 100644 index 00000000000..dd7c9b2fa62 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/zz_generated.defaults.go @@ -0,0 +1,50 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v2beta1 + +import ( + v2beta1 "k8s.io/api/autoscaling/v2beta1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&v2beta1.HorizontalPodAutoscaler{}, func(obj interface{}) { + SetObjectDefaults_HorizontalPodAutoscaler(obj.(*v2beta1.HorizontalPodAutoscaler)) + }) + scheme.AddTypeDefaultingFunc(&v2beta1.HorizontalPodAutoscalerList{}, func(obj interface{}) { + SetObjectDefaults_HorizontalPodAutoscalerList(obj.(*v2beta1.HorizontalPodAutoscalerList)) + }) + return nil +} + +func SetObjectDefaults_HorizontalPodAutoscaler(in *v2beta1.HorizontalPodAutoscaler) { + SetDefaults_HorizontalPodAutoscaler(in) +} + +func SetObjectDefaults_HorizontalPodAutoscalerList(in *v2beta1.HorizontalPodAutoscalerList) { + for i := range in.Items { + a := &in.Items[i] + SetObjectDefaults_HorizontalPodAutoscaler(a) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/batch/OWNERS old mode 100755 new mode 100644 index 8a500cb9e0e..badef1377a0 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.defaults.go index 201e3b22852..8c0f02b469c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.defaults.go @@ -130,6 +130,9 @@ func SetObjectDefaults_Job(in *v1.Job) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -172,6 +175,9 @@ func SetObjectDefaults_Job(in *v1.Job) { } } } + if a.SecurityContext != nil { + corev1.SetDefaults_SecurityContext(a.SecurityContext) + } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1beta1/zz_generated.defaults.go index d90031c32aa..a9a1a5d0675 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1beta1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1beta1/zz_generated.defaults.go @@ -131,6 +131,9 @@ func SetObjectDefaults_CronJob(in *v1beta1.CronJob) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.JobTemplate.Spec.Template.Spec.Containers { a := &in.Spec.JobTemplate.Spec.Template.Spec.Containers[i] @@ -173,6 +176,9 @@ func SetObjectDefaults_CronJob(in *v1beta1.CronJob) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -277,6 +283,9 @@ func SetObjectDefaults_JobTemplate(in *v1beta1.JobTemplate) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Template.Spec.Template.Spec.Containers { a := &in.Template.Spec.Template.Spec.Containers[i] @@ -319,5 +328,8 @@ func SetObjectDefaults_JobTemplate(in *v1beta1.JobTemplate) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.defaults.go index 367c56b15ed..8156eaac3f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.defaults.go @@ -131,6 +131,9 @@ func SetObjectDefaults_CronJob(in *v2alpha1.CronJob) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.JobTemplate.Spec.Template.Spec.Containers { a := &in.Spec.JobTemplate.Spec.Template.Spec.Containers[i] @@ -173,6 +176,9 @@ func SetObjectDefaults_CronJob(in *v2alpha1.CronJob) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -277,6 +283,9 @@ func SetObjectDefaults_JobTemplate(in *v2alpha1.JobTemplate) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Template.Spec.Template.Spec.Containers { a := &in.Template.Spec.Template.Spec.Containers[i] @@ -319,5 +328,8 @@ func SetObjectDefaults_JobTemplate(in *v2alpha1.JobTemplate) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/BUILD index 4a29be29ae2..0d8df02ba1a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/BUILD @@ -14,23 +14,18 @@ go_library( "//pkg/apis/batch:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/github.com/robfig/cron:go_default_library", ], ) go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "validation_test.go", - ], + srcs = ["validation_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/batch:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/validation.go index 1e98c838785..1907ac9079e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/validation/validation.go @@ -118,7 +118,7 @@ func validateJobSpec(spec *batch.JobSpec, fldPath *field.Path) field.ErrorList { allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(*spec.BackoffLimit), fldPath.Child("backoffLimit"))...) } if spec.TTLSecondsAfterFinished != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("ttlSecondsAfterFinished"), "disabled by feature-gate")) + allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(*spec.TTLSecondsAfterFinished), fldPath.Child("ttlSecondsAfterFinished"))...) } allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpec(&spec.Template, fldPath.Child("template"))...) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/certificates/OWNERS old mode 100755 new mode 100644 index 796d862bd9c..9e866a52dcc --- a/vendor/k8s.io/kubernetes/pkg/apis/certificates/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-certificates-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/coordination/BUILD new file mode 100644 index 00000000000..1057f03da57 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/BUILD @@ -0,0 +1,38 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "types.go", + "zz_generated.deepcopy.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/coordination", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/apis/coordination/install:all-srcs", + "//pkg/apis/coordination/v1:all-srcs", + "//pkg/apis/coordination/v1beta1:all-srcs", + "//pkg/apis/coordination/validation:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/doc.go new file mode 100644 index 00000000000..8cce2eda252 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package + +// +groupName=coordination.k8s.io + +package coordination // import "k8s.io/kubernetes/pkg/apis/coordination" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/BUILD new file mode 100644 index 00000000000..c33d0b010d0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/BUILD @@ -0,0 +1,30 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["install.go"], + importpath = "k8s.io/kubernetes/pkg/apis/coordination/install", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//pkg/apis/coordination/v1:go_default_library", + "//pkg/apis/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/install.go new file mode 100644 index 00000000000..5ef66bddd07 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/install/install.go @@ -0,0 +1,40 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package install installs the coordination API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/coordination" + "k8s.io/kubernetes/pkg/apis/coordination/v1" + "k8s.io/kubernetes/pkg/apis/coordination/v1beta1" +) + +func init() { + Install(legacyscheme.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(scheme *runtime.Scheme) { + utilruntime.Must(coordination.AddToScheme(scheme)) + utilruntime.Must(v1beta1.AddToScheme(scheme)) + utilruntime.Must(v1.AddToScheme(scheme)) + utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion)) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/register.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/register.go new file mode 100644 index 00000000000..9780ad16e88 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/register.go @@ -0,0 +1,53 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package coordination + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + // TODO this gets cleaned up when the types are fixed + scheme.AddKnownTypes(SchemeGroupVersion, + &Lease{}, + &LeaseList{}, + ) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/types.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/types.go new file mode 100644 index 00000000000..1d494e59d81 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/types.go @@ -0,0 +1,70 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package coordination + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Lease defines a lease concept. +type Lease struct { + metav1.TypeMeta + // +optional + metav1.ObjectMeta + + // Specification of the Lease. + // +optional + Spec LeaseSpec +} + +// LeaseSpec is a specification of a Lease. +type LeaseSpec struct { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + HolderIdentity *string + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + LeaseDurationSeconds *int32 + // acquireTime is a time when the current lease was acquired. + // +optional + AcquireTime *metav1.MicroTime + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + RenewTime *metav1.MicroTime + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + LeaseTransitions *int32 +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LeaseList is a list of Lease objects. +type LeaseList struct { + metav1.TypeMeta + // +optional + metav1.ListMeta + + // Items is a list of schema objects. + Items []Lease +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/BUILD new file mode 100644 index 00000000000..849c112322b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/coordination/v1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/coordination:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/doc.go new file mode 100644 index 00000000000..afbf128a102 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/coordination +// +k8s:conversion-gen-external-types=k8s.io/api/coordination/v1 +// +k8s:defaulter-gen=TypeMeta +// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/coordination/v1 + +// +groupName=coordination.k8s.io + +package v1 // import "k8s.io/kubernetes/pkg/apis/coordination/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/register.go new file mode 100644 index 00000000000..5670e9f5191 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/register.go @@ -0,0 +1,46 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + coordinationv1 "k8s.io/api/coordination/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &coordinationv1.SchemeBuilder + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(RegisterDefaults) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.conversion.go new file mode 100644 index 00000000000..c74d3d7f1ce --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.conversion.go @@ -0,0 +1,147 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + v1 "k8s.io/api/coordination/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + coordination "k8s.io/kubernetes/pkg/apis/coordination" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1.Lease)(nil), (*coordination.Lease)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_Lease_To_coordination_Lease(a.(*v1.Lease), b.(*coordination.Lease), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.Lease)(nil), (*v1.Lease)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_Lease_To_v1_Lease(a.(*coordination.Lease), b.(*v1.Lease), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1.LeaseList)(nil), (*coordination.LeaseList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_LeaseList_To_coordination_LeaseList(a.(*v1.LeaseList), b.(*coordination.LeaseList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.LeaseList)(nil), (*v1.LeaseList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_LeaseList_To_v1_LeaseList(a.(*coordination.LeaseList), b.(*v1.LeaseList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1.LeaseSpec)(nil), (*coordination.LeaseSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_LeaseSpec_To_coordination_LeaseSpec(a.(*v1.LeaseSpec), b.(*coordination.LeaseSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.LeaseSpec)(nil), (*v1.LeaseSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_LeaseSpec_To_v1_LeaseSpec(a.(*coordination.LeaseSpec), b.(*v1.LeaseSpec), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_Lease_To_coordination_Lease(in *v1.Lease, out *coordination.Lease, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1_LeaseSpec_To_coordination_LeaseSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1_Lease_To_coordination_Lease is an autogenerated conversion function. +func Convert_v1_Lease_To_coordination_Lease(in *v1.Lease, out *coordination.Lease, s conversion.Scope) error { + return autoConvert_v1_Lease_To_coordination_Lease(in, out, s) +} + +func autoConvert_coordination_Lease_To_v1_Lease(in *coordination.Lease, out *v1.Lease, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_coordination_LeaseSpec_To_v1_LeaseSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_coordination_Lease_To_v1_Lease is an autogenerated conversion function. +func Convert_coordination_Lease_To_v1_Lease(in *coordination.Lease, out *v1.Lease, s conversion.Scope) error { + return autoConvert_coordination_Lease_To_v1_Lease(in, out, s) +} + +func autoConvert_v1_LeaseList_To_coordination_LeaseList(in *v1.LeaseList, out *coordination.LeaseList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]coordination.Lease)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1_LeaseList_To_coordination_LeaseList is an autogenerated conversion function. +func Convert_v1_LeaseList_To_coordination_LeaseList(in *v1.LeaseList, out *coordination.LeaseList, s conversion.Scope) error { + return autoConvert_v1_LeaseList_To_coordination_LeaseList(in, out, s) +} + +func autoConvert_coordination_LeaseList_To_v1_LeaseList(in *coordination.LeaseList, out *v1.LeaseList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1.Lease)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_coordination_LeaseList_To_v1_LeaseList is an autogenerated conversion function. +func Convert_coordination_LeaseList_To_v1_LeaseList(in *coordination.LeaseList, out *v1.LeaseList, s conversion.Scope) error { + return autoConvert_coordination_LeaseList_To_v1_LeaseList(in, out, s) +} + +func autoConvert_v1_LeaseSpec_To_coordination_LeaseSpec(in *v1.LeaseSpec, out *coordination.LeaseSpec, s conversion.Scope) error { + out.HolderIdentity = (*string)(unsafe.Pointer(in.HolderIdentity)) + out.LeaseDurationSeconds = (*int32)(unsafe.Pointer(in.LeaseDurationSeconds)) + out.AcquireTime = (*metav1.MicroTime)(unsafe.Pointer(in.AcquireTime)) + out.RenewTime = (*metav1.MicroTime)(unsafe.Pointer(in.RenewTime)) + out.LeaseTransitions = (*int32)(unsafe.Pointer(in.LeaseTransitions)) + return nil +} + +// Convert_v1_LeaseSpec_To_coordination_LeaseSpec is an autogenerated conversion function. +func Convert_v1_LeaseSpec_To_coordination_LeaseSpec(in *v1.LeaseSpec, out *coordination.LeaseSpec, s conversion.Scope) error { + return autoConvert_v1_LeaseSpec_To_coordination_LeaseSpec(in, out, s) +} + +func autoConvert_coordination_LeaseSpec_To_v1_LeaseSpec(in *coordination.LeaseSpec, out *v1.LeaseSpec, s conversion.Scope) error { + out.HolderIdentity = (*string)(unsafe.Pointer(in.HolderIdentity)) + out.LeaseDurationSeconds = (*int32)(unsafe.Pointer(in.LeaseDurationSeconds)) + out.AcquireTime = (*metav1.MicroTime)(unsafe.Pointer(in.AcquireTime)) + out.RenewTime = (*metav1.MicroTime)(unsafe.Pointer(in.RenewTime)) + out.LeaseTransitions = (*int32)(unsafe.Pointer(in.LeaseTransitions)) + return nil +} + +// Convert_coordination_LeaseSpec_To_v1_LeaseSpec is an autogenerated conversion function. +func Convert_coordination_LeaseSpec_To_v1_LeaseSpec(in *coordination.LeaseSpec, out *v1.LeaseSpec, s conversion.Scope) error { + return autoConvert_coordination_LeaseSpec_To_v1_LeaseSpec(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.defaults.go new file mode 100644 index 00000000000..cce2e603a69 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1/zz_generated.defaults.go @@ -0,0 +1,32 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/BUILD new file mode 100644 index 00000000000..41943830bfe --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/coordination/v1beta1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/coordination:go_default_library", + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/doc.go new file mode 100644 index 00000000000..da30f7fc2be --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/coordination +// +k8s:conversion-gen-external-types=k8s.io/api/coordination/v1beta1 +// +k8s:defaulter-gen=TypeMeta +// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/coordination/v1beta1 + +// +groupName=coordination.k8s.io + +package v1beta1 // import "k8s.io/kubernetes/pkg/apis/coordination/v1beta1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/register.go new file mode 100644 index 00000000000..c57a2f7d7df --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/register.go @@ -0,0 +1,46 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &coordinationv1beta1.SchemeBuilder + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(RegisterDefaults) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..aee7bb49f07 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.conversion.go @@ -0,0 +1,147 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1beta1 + +import ( + unsafe "unsafe" + + v1beta1 "k8s.io/api/coordination/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + coordination "k8s.io/kubernetes/pkg/apis/coordination" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.Lease)(nil), (*coordination.Lease)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Lease_To_coordination_Lease(a.(*v1beta1.Lease), b.(*coordination.Lease), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.Lease)(nil), (*v1beta1.Lease)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_Lease_To_v1beta1_Lease(a.(*coordination.Lease), b.(*v1beta1.Lease), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.LeaseList)(nil), (*coordination.LeaseList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_LeaseList_To_coordination_LeaseList(a.(*v1beta1.LeaseList), b.(*coordination.LeaseList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.LeaseList)(nil), (*v1beta1.LeaseList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_LeaseList_To_v1beta1_LeaseList(a.(*coordination.LeaseList), b.(*v1beta1.LeaseList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.LeaseSpec)(nil), (*coordination.LeaseSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_LeaseSpec_To_coordination_LeaseSpec(a.(*v1beta1.LeaseSpec), b.(*coordination.LeaseSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*coordination.LeaseSpec)(nil), (*v1beta1.LeaseSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_coordination_LeaseSpec_To_v1beta1_LeaseSpec(a.(*coordination.LeaseSpec), b.(*v1beta1.LeaseSpec), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1beta1_Lease_To_coordination_Lease(in *v1beta1.Lease, out *coordination.Lease, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_LeaseSpec_To_coordination_LeaseSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_Lease_To_coordination_Lease is an autogenerated conversion function. +func Convert_v1beta1_Lease_To_coordination_Lease(in *v1beta1.Lease, out *coordination.Lease, s conversion.Scope) error { + return autoConvert_v1beta1_Lease_To_coordination_Lease(in, out, s) +} + +func autoConvert_coordination_Lease_To_v1beta1_Lease(in *coordination.Lease, out *v1beta1.Lease, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_coordination_LeaseSpec_To_v1beta1_LeaseSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_coordination_Lease_To_v1beta1_Lease is an autogenerated conversion function. +func Convert_coordination_Lease_To_v1beta1_Lease(in *coordination.Lease, out *v1beta1.Lease, s conversion.Scope) error { + return autoConvert_coordination_Lease_To_v1beta1_Lease(in, out, s) +} + +func autoConvert_v1beta1_LeaseList_To_coordination_LeaseList(in *v1beta1.LeaseList, out *coordination.LeaseList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]coordination.Lease)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_LeaseList_To_coordination_LeaseList is an autogenerated conversion function. +func Convert_v1beta1_LeaseList_To_coordination_LeaseList(in *v1beta1.LeaseList, out *coordination.LeaseList, s conversion.Scope) error { + return autoConvert_v1beta1_LeaseList_To_coordination_LeaseList(in, out, s) +} + +func autoConvert_coordination_LeaseList_To_v1beta1_LeaseList(in *coordination.LeaseList, out *v1beta1.LeaseList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.Lease)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_coordination_LeaseList_To_v1beta1_LeaseList is an autogenerated conversion function. +func Convert_coordination_LeaseList_To_v1beta1_LeaseList(in *coordination.LeaseList, out *v1beta1.LeaseList, s conversion.Scope) error { + return autoConvert_coordination_LeaseList_To_v1beta1_LeaseList(in, out, s) +} + +func autoConvert_v1beta1_LeaseSpec_To_coordination_LeaseSpec(in *v1beta1.LeaseSpec, out *coordination.LeaseSpec, s conversion.Scope) error { + out.HolderIdentity = (*string)(unsafe.Pointer(in.HolderIdentity)) + out.LeaseDurationSeconds = (*int32)(unsafe.Pointer(in.LeaseDurationSeconds)) + out.AcquireTime = (*v1.MicroTime)(unsafe.Pointer(in.AcquireTime)) + out.RenewTime = (*v1.MicroTime)(unsafe.Pointer(in.RenewTime)) + out.LeaseTransitions = (*int32)(unsafe.Pointer(in.LeaseTransitions)) + return nil +} + +// Convert_v1beta1_LeaseSpec_To_coordination_LeaseSpec is an autogenerated conversion function. +func Convert_v1beta1_LeaseSpec_To_coordination_LeaseSpec(in *v1beta1.LeaseSpec, out *coordination.LeaseSpec, s conversion.Scope) error { + return autoConvert_v1beta1_LeaseSpec_To_coordination_LeaseSpec(in, out, s) +} + +func autoConvert_coordination_LeaseSpec_To_v1beta1_LeaseSpec(in *coordination.LeaseSpec, out *v1beta1.LeaseSpec, s conversion.Scope) error { + out.HolderIdentity = (*string)(unsafe.Pointer(in.HolderIdentity)) + out.LeaseDurationSeconds = (*int32)(unsafe.Pointer(in.LeaseDurationSeconds)) + out.AcquireTime = (*v1.MicroTime)(unsafe.Pointer(in.AcquireTime)) + out.RenewTime = (*v1.MicroTime)(unsafe.Pointer(in.RenewTime)) + out.LeaseTransitions = (*int32)(unsafe.Pointer(in.LeaseTransitions)) + return nil +} + +// Convert_coordination_LeaseSpec_To_v1beta1_LeaseSpec is an autogenerated conversion function. +func Convert_coordination_LeaseSpec_To_v1beta1_LeaseSpec(in *coordination.LeaseSpec, out *v1beta1.LeaseSpec, s conversion.Scope) error { + return autoConvert_coordination_LeaseSpec_To_v1beta1_LeaseSpec(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.defaults.go new file mode 100644 index 00000000000..73e63fc114d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/v1beta1/zz_generated.defaults.go @@ -0,0 +1,32 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + return nil +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/BUILD similarity index 69% rename from vendor/k8s.io/apimachinery/pkg/apis/config/validation/BUILD rename to vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/BUILD index f84ca744980..666da2f783e 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/BUILD @@ -3,11 +3,11 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = ["validation.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/config/validation", - importpath = "k8s.io/apimachinery/pkg/apis/config/validation", + importpath = "k8s.io/kubernetes/pkg/apis/coordination/validation", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) @@ -17,7 +17,8 @@ go_test( srcs = ["validation_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/validation.go new file mode 100644 index 00000000000..e3eedcf5a83 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/validation/validation.go @@ -0,0 +1,52 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/coordination" +) + +// ValidateLease validates a Lease. +func ValidateLease(lease *coordination.Lease) field.ErrorList { + allErrs := validation.ValidateObjectMeta(&lease.ObjectMeta, true, validation.NameIsDNSSubdomain, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateLeaseSpec(&lease.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateLeaseUpdate validates an update of Lease object. +func ValidateLeaseUpdate(lease, oldLease *coordination.Lease) field.ErrorList { + allErrs := validation.ValidateObjectMetaUpdate(&lease.ObjectMeta, &oldLease.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateLeaseSpec(&lease.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateLeaseSpec validates spec of Lease. +func ValidateLeaseSpec(spec *coordination.LeaseSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if spec.LeaseDurationSeconds != nil && *spec.LeaseDurationSeconds <= 0 { + fld := fldPath.Child("leaseDurationSeconds") + allErrs = append(allErrs, field.Invalid(fld, spec.LeaseDurationSeconds, "must be greater than 0")) + } + if spec.LeaseTransitions != nil && *spec.LeaseTransitions < 0 { + fld := fldPath.Child("leaseTransitions") + allErrs = append(allErrs, field.Invalid(fld, spec.LeaseTransitions, "must to greater or equal than 0")) + } + return allErrs +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/coordination/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/coordination/zz_generated.deepcopy.go new file mode 100644 index 00000000000..11d2adccf50 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/coordination/zz_generated.deepcopy.go @@ -0,0 +1,124 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package coordination + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Lease) DeepCopyInto(out *Lease) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lease. +func (in *Lease) DeepCopy() *Lease { + if in == nil { + return nil + } + out := new(Lease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Lease) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseList) DeepCopyInto(out *LeaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Lease, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseList. +func (in *LeaseList) DeepCopy() *LeaseList { + if in == nil { + return nil + } + out := new(LeaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LeaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseSpec) DeepCopyInto(out *LeaseSpec) { + *out = *in + if in.HolderIdentity != nil { + in, out := &in.HolderIdentity, &out.HolderIdentity + *out = new(string) + **out = **in + } + if in.LeaseDurationSeconds != nil { + in, out := &in.LeaseDurationSeconds, &out.LeaseDurationSeconds + *out = new(int32) + **out = **in + } + if in.AcquireTime != nil { + in, out := &in.AcquireTime, &out.AcquireTime + *out = (*in).DeepCopy() + } + if in.RenewTime != nil { + in, out := &in.RenewTime, &out.RenewTime + *out = (*in).DeepCopy() + } + if in.LeaseTransitions != nil { + in, out := &in.LeaseTransitions, &out.LeaseTransitions + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseSpec. +func (in *LeaseSpec) DeepCopy() *LeaseSpec { + if in == nil { + return nil + } + out := new(LeaseSpec) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/core/OWNERS index 7e195eca389..f062ebd6b89 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - erictune - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go b/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go index bef73c0db0b..688287611e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go @@ -101,4 +101,10 @@ const ( // This annotation will be used to compute the in-cluster network programming latency SLI, see // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md EndpointsLastChangeTriggerTime = "endpoints.kubernetes.io/last-change-trigger-time" + + // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated + // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode. + // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or + // CSI Backend for a volume plugin on a specific node. + MigratedPluginsAnnotationKey = "storage.alpha.kubernetes.io/migrated-plugins" ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/helper/helpers.go b/vendor/k8s.io/kubernetes/pkg/apis/core/helper/helpers.go index 10c33f66bd1..f16611d6cba 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/helper/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/helper/helpers.go @@ -264,7 +264,7 @@ func IsIntegerResourceName(str string) bool { return integerResources.Has(str) || IsExtendedResourceName(core.ResourceName(str)) } -// this function aims to check if the service's ClusterIP is set or not +// IsServiceIPSet aims to check if the service's ClusterIP is set or not // the objective is not to perform validation here func IsServiceIPSet(service *core.Service) bool { return service.Spec.ClusterIP != core.ClusterIPNone && service.Spec.ClusterIP != "" @@ -280,23 +280,6 @@ func IsStandardFinalizerName(str string) bool { return standardFinalizers.Has(str) } -// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice, -// only if they do not already exist -func AddToNodeAddresses(addresses *[]core.NodeAddress, addAddresses ...core.NodeAddress) { - for _, add := range addAddresses { - exists := false - for _, existing := range *addresses { - if existing.Address == add.Address && existing.Type == add.Type { - exists = true - break - } - } - if !exists { - *addresses = append(*addresses, add) - } - } -} - // TODO: make method on LoadBalancerStatus? func LoadBalancerStatusEqual(l, r *core.LoadBalancerStatus) bool { return ingressSliceEqual(l.Ingress, r.Ingress) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/install/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/core/install/OWNERS old mode 100755 new mode 100644 index 46b9cbbd3fe..c06f07bdcc9 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/install/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/install/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - lavalamp - smarterclayton diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go b/vendor/k8s.io/kubernetes/pkg/apis/core/types.go index 251547f601b..157d38ced5f 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/types.go @@ -154,6 +154,9 @@ type VolumeSource struct { // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod // +optional StorageOS *StorageOSVolumeSource + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). + // +optional + CSI *CSIVolumeSource } // Similar to VolumeSource but meant for the administrator who creates PVs. @@ -229,7 +232,7 @@ type PersistentVolumeSource struct { // More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md // +optional StorageOS *StorageOSPersistentVolumeSource - // CSI (Container Storage Interface) represents storage that handled by an external CSI driver. + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver. // +optional CSI *CSIPersistentVolumeSource } @@ -918,6 +921,11 @@ type QuobyteVolumeSource struct { // Default is no group // +optional Group string + + // Tenant owning the given Quobyte volume in the Backend + // Used with dynamically provisioned Quobyte volumes, value is set by the plugin + // +optional + Tenant string } // Represents a Glusterfs mount that lasts the lifetime of a pod. @@ -1598,6 +1606,38 @@ type CSIPersistentVolumeSource struct { NodePublishSecretRef *SecretReference } +// Represents a source location of a volume to mount, managed by an external CSI driver +type CSIVolumeSource struct { + // Driver is the name of the CSI driver that handles this volume. + // Consult with your admin for the correct name as registered in the cluster. + // Required. + Driver string + + // Specifies a read-only configuration for the volume. + // Defaults to false (read/write). + // +optional + ReadOnly *bool + + // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". + // If not provided, the empty value is passed to the associated CSI driver + // which will determine the default filesystem to apply. + // +optional + FSType *string + + // VolumeAttributes stores driver-specific properties that are passed to the CSI + // driver. Consult your driver's documentation for supported values. + // +optional + VolumeAttributes map[string]string + + // NodePublishSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // NodePublishVolume and NodeUnpublishVolume calls. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secret references are passed. + // +optional + NodePublishSecretRef *LocalObjectReference +} + // ContainerPort represents a network port in a single container type ContainerPort struct { // Optional: If specified, this must be an IANA_SVC_NAME Each named port @@ -1639,6 +1679,13 @@ type VolumeMount struct { // This field is beta in 1.10. // +optional MountPropagation *MountPropagationMode + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + // This field is alpha in 1.14. + // +optional + SubPathExpr string } // MountPropagationMode describes mount propagation. @@ -2023,8 +2070,15 @@ type Lifecycle struct { // is terminated and restarted. // +optional PostStart *Handler - // PreStop is called immediately before a container is terminated. The reason for termination is - // passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. + // PreStop is called immediately before a container is terminated due to an + // API request or management event such as liveness probe failure, + // preemption, resource contention, etc. The handler is not called if the + // container crashes or exits. The reason for termination is passed to the + // handler. The Pod's termination grace period countdown begins before the + // PreStop hooked is executed. Regardless of the outcome of the handler, the + // container will eventually terminate within the Pod's termination grace + // period. Other management of the container blocks until the hook completes + // or until the termination grace period is reached. // +optional PreStop *Handler } @@ -2610,14 +2664,14 @@ type PodSpec struct { // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md + // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional ReadinessGates []PodReadinessGate // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an // empty definition that uses the default runtime handler. - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md + // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md // This is an alpha feature and may change in the future. // +optional RuntimeClassName *string diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/BUILD index b7e881dd95c..7226462bbed 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/BUILD @@ -15,7 +15,6 @@ go_library( deps = [ "//pkg/apis/apps:go_default_library", "//pkg/apis/core:go_default_library", - "//pkg/features:go_default_library", "//pkg/util/parsers:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -26,7 +25,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) @@ -36,7 +34,6 @@ go_test( srcs = [ "conversion_test.go", "defaults_test.go", - "main_test.go", ], embed = [":go_default_library"], deps = [ @@ -45,7 +42,6 @@ go_test( "//pkg/apis/apps:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/fuzzer:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/fuzzer:go_default_library", @@ -56,8 +52,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/OWNERS old mode 100755 new mode 100644 index ba0d083cedc..a3c68b33064 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go index 172d3797bf5..d06356a89dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go @@ -22,8 +22,6 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/util/parsers" utilpointer "k8s.io/utils/pointer" ) @@ -247,7 +245,7 @@ func SetDefaults_PersistentVolume(obj *v1.PersistentVolume) { if obj.Spec.PersistentVolumeReclaimPolicy == "" { obj.Spec.PersistentVolumeReclaimPolicy = v1.PersistentVolumeReclaimRetain } - if obj.Spec.VolumeMode == nil && utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { + if obj.Spec.VolumeMode == nil { obj.Spec.VolumeMode = new(v1.PersistentVolumeMode) *obj.Spec.VolumeMode = v1.PersistentVolumeFilesystem } @@ -256,7 +254,7 @@ func SetDefaults_PersistentVolumeClaim(obj *v1.PersistentVolumeClaim) { if obj.Status.Phase == "" { obj.Status.Phase = v1.ClaimPending } - if obj.Spec.VolumeMode == nil && utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { + if obj.Spec.VolumeMode == nil { obj.Spec.VolumeMode = new(v1.PersistentVolumeMode) *obj.Spec.VolumeMode = v1.PersistentVolumeFilesystem } @@ -423,3 +421,10 @@ func SetDefaults_HostPathVolumeSource(obj *v1.HostPathVolumeSource) { obj.Type = &typeVol } } + +func SetDefaults_SecurityContext(obj *v1.SecurityContext) { + if obj.ProcMount == nil { + defProcMount := v1.DefaultProcMount + obj.ProcMount = &defProcMount + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/helpers.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/helpers.go index fa11a6b36a9..e1dff4fdcf3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/helpers.go @@ -108,23 +108,6 @@ func IsServiceIPSet(service *v1.Service) bool { return service.Spec.ClusterIP != v1.ClusterIPNone && service.Spec.ClusterIP != "" } -// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice, -// only if they do not already exist -func AddToNodeAddresses(addresses *[]v1.NodeAddress, addAddresses ...v1.NodeAddress) { - for _, add := range addAddresses { - exists := false - for _, existing := range *addresses { - if existing.Address == add.Address && existing.Type == add.Type { - exists = true - break - } - } - if !exists { - *addresses = append(*addresses, add) - } - } -} - // TODO: make method on LoadBalancerStatus? func LoadBalancerStatusEqual(l, r *v1.LoadBalancerStatus) bool { return ingressSliceEqual(l.Ingress, r.Ingress) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go index 43940142556..b3960b2a9e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go @@ -130,6 +130,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.CSIVolumeSource)(nil), (*core.CSIVolumeSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_CSIVolumeSource_To_core_CSIVolumeSource(a.(*v1.CSIVolumeSource), b.(*core.CSIVolumeSource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.CSIVolumeSource)(nil), (*v1.CSIVolumeSource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_CSIVolumeSource_To_v1_CSIVolumeSource(a.(*core.CSIVolumeSource), b.(*v1.CSIVolumeSource), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.Capabilities)(nil), (*core.Capabilities)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_Capabilities_To_core_Capabilities(a.(*v1.Capabilities), b.(*core.Capabilities), scope) }); err != nil { @@ -2330,6 +2340,34 @@ func Convert_core_CSIPersistentVolumeSource_To_v1_CSIPersistentVolumeSource(in * return autoConvert_core_CSIPersistentVolumeSource_To_v1_CSIPersistentVolumeSource(in, out, s) } +func autoConvert_v1_CSIVolumeSource_To_core_CSIVolumeSource(in *v1.CSIVolumeSource, out *core.CSIVolumeSource, s conversion.Scope) error { + out.Driver = in.Driver + out.ReadOnly = (*bool)(unsafe.Pointer(in.ReadOnly)) + out.FSType = (*string)(unsafe.Pointer(in.FSType)) + out.VolumeAttributes = *(*map[string]string)(unsafe.Pointer(&in.VolumeAttributes)) + out.NodePublishSecretRef = (*core.LocalObjectReference)(unsafe.Pointer(in.NodePublishSecretRef)) + return nil +} + +// Convert_v1_CSIVolumeSource_To_core_CSIVolumeSource is an autogenerated conversion function. +func Convert_v1_CSIVolumeSource_To_core_CSIVolumeSource(in *v1.CSIVolumeSource, out *core.CSIVolumeSource, s conversion.Scope) error { + return autoConvert_v1_CSIVolumeSource_To_core_CSIVolumeSource(in, out, s) +} + +func autoConvert_core_CSIVolumeSource_To_v1_CSIVolumeSource(in *core.CSIVolumeSource, out *v1.CSIVolumeSource, s conversion.Scope) error { + out.Driver = in.Driver + out.ReadOnly = (*bool)(unsafe.Pointer(in.ReadOnly)) + out.FSType = (*string)(unsafe.Pointer(in.FSType)) + out.VolumeAttributes = *(*map[string]string)(unsafe.Pointer(&in.VolumeAttributes)) + out.NodePublishSecretRef = (*v1.LocalObjectReference)(unsafe.Pointer(in.NodePublishSecretRef)) + return nil +} + +// Convert_core_CSIVolumeSource_To_v1_CSIVolumeSource is an autogenerated conversion function. +func Convert_core_CSIVolumeSource_To_v1_CSIVolumeSource(in *core.CSIVolumeSource, out *v1.CSIVolumeSource, s conversion.Scope) error { + return autoConvert_core_CSIVolumeSource_To_v1_CSIVolumeSource(in, out, s) +} + func autoConvert_v1_Capabilities_To_core_Capabilities(in *v1.Capabilities, out *core.Capabilities, s conversion.Scope) error { out.Add = *(*[]core.Capability)(unsafe.Pointer(&in.Add)) out.Drop = *(*[]core.Capability)(unsafe.Pointer(&in.Drop)) @@ -5989,6 +6027,7 @@ func autoConvert_v1_QuobyteVolumeSource_To_core_QuobyteVolumeSource(in *v1.Quoby out.ReadOnly = in.ReadOnly out.User = in.User out.Group = in.Group + out.Tenant = in.Tenant return nil } @@ -6003,6 +6042,7 @@ func autoConvert_core_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *core.Quo out.ReadOnly = in.ReadOnly out.User = in.User out.Group = in.Group + out.Tenant = in.Tenant return nil } @@ -7370,6 +7410,7 @@ func autoConvert_v1_VolumeMount_To_core_VolumeMount(in *v1.VolumeMount, out *cor out.MountPath = in.MountPath out.SubPath = in.SubPath out.MountPropagation = (*core.MountPropagationMode)(unsafe.Pointer(in.MountPropagation)) + out.SubPathExpr = in.SubPathExpr return nil } @@ -7384,6 +7425,7 @@ func autoConvert_core_VolumeMount_To_v1_VolumeMount(in *core.VolumeMount, out *v out.MountPath = in.MountPath out.SubPath = in.SubPath out.MountPropagation = (*v1.MountPropagationMode)(unsafe.Pointer(in.MountPropagation)) + out.SubPathExpr = in.SubPathExpr return nil } @@ -7490,6 +7532,7 @@ func autoConvert_v1_VolumeSource_To_core_VolumeSource(in *v1.VolumeSource, out * out.PortworxVolume = (*core.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) out.ScaleIO = (*core.ScaleIOVolumeSource)(unsafe.Pointer(in.ScaleIO)) out.StorageOS = (*core.StorageOSVolumeSource)(unsafe.Pointer(in.StorageOS)) + out.CSI = (*core.CSIVolumeSource)(unsafe.Pointer(in.CSI)) return nil } @@ -7534,6 +7577,7 @@ func autoConvert_core_VolumeSource_To_v1_VolumeSource(in *core.VolumeSource, out out.PortworxVolume = (*v1.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) out.ScaleIO = (*v1.ScaleIOVolumeSource)(unsafe.Pointer(in.ScaleIO)) out.StorageOS = (*v1.StorageOSVolumeSource)(unsafe.Pointer(in.StorageOS)) + out.CSI = (*v1.CSIVolumeSource)(unsafe.Pointer(in.CSI)) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.defaults.go index 00e0b384aa8..0ea5e0fae05 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.defaults.go @@ -263,6 +263,9 @@ func SetObjectDefaults_Pod(in *v1.Pod) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Containers { a := &in.Spec.Containers[i] @@ -305,6 +308,9 @@ func SetObjectDefaults_Pod(in *v1.Pod) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -409,6 +415,9 @@ func SetObjectDefaults_PodTemplate(in *v1.PodTemplate) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Template.Spec.Containers { a := &in.Template.Spec.Containers[i] @@ -451,6 +460,9 @@ func SetObjectDefaults_PodTemplate(in *v1.PodTemplate) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -557,6 +569,9 @@ func SetObjectDefaults_ReplicationController(in *v1.ReplicationController) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -599,6 +614,9 @@ func SetObjectDefaults_ReplicationController(in *v1.ReplicationController) { } } } + if a.SecurityContext != nil { + SetDefaults_SecurityContext(a.SecurityContext) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/BUILD index a815e5b0ac7..bbdd8b7a32d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/BUILD @@ -7,6 +7,7 @@ load( go_library( name = "go_default_library", srcs = [ + "conditional_validation.go", "doc.go", "events.go", "validation.go", @@ -46,8 +47,8 @@ go_library( go_test( name = "go_default_test", srcs = [ + "conditional_validation_test.go", "events_test.go", - "main_test.go", "validation_test.go", ], embed = [":go_default_library"], @@ -60,6 +61,7 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/OWNERS old mode 100755 new mode 100644 index e87de15ad0b..d3b431ea27d --- a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/conditional_validation.go b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/conditional_validation.go new file mode 100644 index 00000000000..ad907289e12 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/conditional_validation.go @@ -0,0 +1,146 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// ValidateConditionalService validates conditionally valid fields. +func ValidateConditionalService(service, oldService *api.Service) field.ErrorList { + var errs field.ErrorList + // If the SCTPSupport feature is disabled, and the old object isn't using the SCTP feature, prevent the new object from using it + if len(serviceSCTPFields(oldService)) == 0 { + for _, f := range serviceSCTPFields(service) { + errs = append(errs, field.NotSupported(f, api.ProtocolSCTP, []string{string(api.ProtocolTCP), string(api.ProtocolUDP)})) + } + } + return errs +} + +func serviceSCTPFields(service *api.Service) []*field.Path { + if service == nil { + return nil + } + fields := []*field.Path{} + for pIndex, p := range service.Spec.Ports { + if p.Protocol == api.ProtocolSCTP { + fields = append(fields, field.NewPath("spec.ports").Index(pIndex).Child("protocol")) + } + } + return fields +} + +// ValidateConditionalEndpoints validates conditionally valid fields. +func ValidateConditionalEndpoints(endpoints, oldEndpoints *api.Endpoints) field.ErrorList { + var errs field.ErrorList + // If the SCTPSupport feature is disabled, and the old object isn't using the SCTP feature, prevent the new object from using it + if len(endpointsSCTPFields(oldEndpoints)) == 0 { + for _, f := range endpointsSCTPFields(endpoints) { + errs = append(errs, field.NotSupported(f, api.ProtocolSCTP, []string{string(api.ProtocolTCP), string(api.ProtocolUDP)})) + } + } + return errs +} + +func endpointsSCTPFields(endpoints *api.Endpoints) []*field.Path { + if endpoints == nil { + return nil + } + fields := []*field.Path{} + for sIndex, s := range endpoints.Subsets { + for pIndex, p := range s.Ports { + if p.Protocol == api.ProtocolSCTP { + fields = append(fields, field.NewPath("subsets").Index(sIndex).Child("ports").Index(pIndex).Child("protocol")) + } + } + } + return fields +} + +// ValidateConditionalPodTemplate validates conditionally valid fields. +// This should be called from Validate/ValidateUpdate for all resources containing a PodTemplateSpec +func ValidateConditionalPodTemplate(podTemplate, oldPodTemplate *api.PodTemplateSpec, fldPath *field.Path) field.ErrorList { + var ( + podSpec *api.PodSpec + oldPodSpec *api.PodSpec + ) + if podTemplate != nil { + podSpec = &podTemplate.Spec + } + if oldPodTemplate != nil { + oldPodSpec = &oldPodTemplate.Spec + } + return validateConditionalPodSpec(podSpec, oldPodSpec, fldPath.Child("spec")) +} + +// ValidateConditionalPod validates conditionally valid fields. +// This should be called from Validate/ValidateUpdate for all resources containing a Pod +func ValidateConditionalPod(pod, oldPod *api.Pod, fldPath *field.Path) field.ErrorList { + var ( + podSpec *api.PodSpec + oldPodSpec *api.PodSpec + ) + if pod != nil { + podSpec = &pod.Spec + } + if oldPod != nil { + oldPodSpec = &oldPod.Spec + } + return validateConditionalPodSpec(podSpec, oldPodSpec, fldPath.Child("spec")) +} + +func validateConditionalPodSpec(podSpec, oldPodSpec *api.PodSpec, fldPath *field.Path) field.ErrorList { + // Always make sure we have a non-nil current pod spec + if podSpec == nil { + podSpec = &api.PodSpec{} + } + + errs := field.ErrorList{} + + // If the SCTPSupport feature is disabled, and the old object isn't using the SCTP feature, prevent the new object from using it + if len(podSCTPFields(oldPodSpec, nil)) == 0 { + for _, f := range podSCTPFields(podSpec, fldPath) { + errs = append(errs, field.NotSupported(f, api.ProtocolSCTP, []string{string(api.ProtocolTCP), string(api.ProtocolUDP)})) + } + } + + return errs +} + +func podSCTPFields(podSpec *api.PodSpec, fldPath *field.Path) []*field.Path { + if podSpec == nil { + return nil + } + fields := []*field.Path{} + for cIndex, c := range podSpec.InitContainers { + for pIndex, p := range c.Ports { + if p.Protocol == api.ProtocolSCTP { + fields = append(fields, fldPath.Child("initContainers").Index(cIndex).Child("ports").Index(pIndex).Child("protocol")) + } + } + } + for cIndex, c := range podSpec.Containers { + for pIndex, p := range c.Ports { + if p.Protocol == api.ProtocolSCTP { + fields = append(fields, fldPath.Child("containers").Index(cIndex).Child("ports").Index(pIndex).Child("protocol")) + } + } + } + return fields +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go index 1e8ef65604c..2e9fa2b4b3c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go @@ -29,7 +29,7 @@ import ( "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" @@ -61,8 +61,6 @@ const isInvalidQuotaResource string = `must be a standard resource for quota` const fieldImmutableErrorMsg string = apimachineryvalidation.FieldImmutableErrorMsg const isNotIntegerErrorMsg string = `must be an integer` const isNotPositiveErrorMsg string = `must be greater than zero` -const csiDriverNameRexpErrMsg string = "must consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character" -const csiDriverNameRexpFmt string = `^[a-zA-Z0-9][-a-zA-Z0-9_.]{0,61}[a-zA-Z-0-9]$` var pdPartitionErrorMsg string = validation.InclusiveRangeError(1, 255) var fileModeErrorMsg string = "must be a number between 0 and 0777 (octal), both inclusive" @@ -74,8 +72,6 @@ var iscsiInitiatorIqnRegex = regexp.MustCompile(`iqn\.\d{4}-\d{2}\.([[:alnum:]-. var iscsiInitiatorEuiRegex = regexp.MustCompile(`^eui.[[:alnum:]]{16}$`) var iscsiInitiatorNaaRegex = regexp.MustCompile(`^naa.[[:alnum:]]{32}$`) -var csiDriverNameRexp = regexp.MustCompile(csiDriverNameRexpFmt) - // ValidateHasLabel requires that metav1.ObjectMeta has a Label with key and expectedValue func ValidateHasLabel(meta metav1.ObjectMeta, fldPath *field.Path, key, expectedValue string) field.ErrorList { allErrs := field.ErrorList{} @@ -412,17 +408,8 @@ func validateVolumeSource(source *core.VolumeSource, fldPath *field.Path, volNam allErrs := field.ErrorList{} if source.EmptyDir != nil { numVolumes++ - if !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - if source.EmptyDir.SizeLimit != nil && source.EmptyDir.SizeLimit.Cmp(resource.Quantity{}) != 0 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("sizeLimit"), "SizeLimit field disabled by feature-gate for EmptyDir volumes")) - } - } else { - if source.EmptyDir.SizeLimit != nil && source.EmptyDir.SizeLimit.Cmp(resource.Quantity{}) < 0 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("sizeLimit"), "SizeLimit field must be a valid resource quantity")) - } - } - if !utilfeature.DefaultFeatureGate.Enabled(features.HugePages) && source.EmptyDir.Medium == core.StorageMediumHugePages { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("medium"), "HugePages medium is disabled by feature-gate for EmptyDir volumes")) + if source.EmptyDir.SizeLimit != nil && source.EmptyDir.SizeLimit.Cmp(resource.Quantity{}) < 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("sizeLimit"), "SizeLimit field must be a valid resource quantity")) } } if source.HostPath != nil { @@ -639,6 +626,14 @@ func validateVolumeSource(source *core.VolumeSource, fldPath *field.Path, volNam allErrs = append(allErrs, validateScaleIOVolumeSource(source.ScaleIO, fldPath.Child("scaleIO"))...) } } + if source.CSI != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("csi"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateCSIVolumeSource(source.CSI, fldPath.Child("csi"))...) + } + } if numVolumes == 0 { allErrs = append(allErrs, field.Required(fldPath, "must specify a volume type")) @@ -879,6 +874,10 @@ func validateQuobyteVolumeSource(quobyte *core.QuobyteVolumeSource, fldPath *fie allErrs := field.ErrorList{} if len(quobyte.Registry) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("registry"), "must be a host:port pair or multiple pairs separated by commas")) + } else if len(quobyte.Tenant) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("tenant"), "must be a UUID provided by the configuration and may not be omitted ")) + } else if len(quobyte.Tenant) >= 65 { + allErrs = append(allErrs, field.Required(fldPath.Child("tenant"), "must be a UUID and may not exceed a length of 64 characters")) } else { for _, hostPortPair := range strings.Split(quobyte.Registry, ",") { if _, _, err := net.SplitHostPort(hostPortPair); err != nil { @@ -1045,9 +1044,6 @@ func validateProjectionSources(projection *core.ProjectedVolumeSource, projectio } if projPath := srcPath.Child("serviceAccountToken"); source.ServiceAccountToken != nil { numSources++ - if !utilfeature.DefaultFeatureGate.Enabled(features.TokenRequestProjection) { - allErrs = append(allErrs, field.Forbidden(projPath, "TokenRequestProjection feature is not enabled")) - } if source.ServiceAccountToken.ExpirationSeconds < 10*60 { allErrs = append(allErrs, field.Invalid(projPath.Child("expirationSeconds"), source.ServiceAccountToken.ExpirationSeconds, "may not specify a duration less than 10 minutes")) } @@ -1454,9 +1450,10 @@ func ValidateCSIDriverName(driverName string, fldPath *field.Path) field.ErrorLi allErrs = append(allErrs, field.TooLong(fldPath, driverName, 63)) } - if !csiDriverNameRexp.MatchString(driverName) { - allErrs = append(allErrs, field.Invalid(fldPath, driverName, validation.RegexError(csiDriverNameRexpErrMsg, csiDriverNameRexpFmt, "csi-hostpath"))) + for _, msg := range validation.IsDNS1123Subdomain(strings.ToLower(driverName)) { + allErrs = append(allErrs, field.Invalid(fldPath, driverName, msg)) } + return allErrs } @@ -1495,16 +1492,20 @@ func validateCSIPersistentVolumeSource(csi *core.CSIPersistentVolumeSource, fldP } } - if csi.NodeStageSecretRef != nil { - if len(csi.NodeStageSecretRef.Name) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("nodeStageSecretRef", "name"), "")) + return allErrs +} + +func validateCSIVolumeSource(csi *core.CSIVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, ValidateCSIDriverName(csi.Driver, fldPath.Child("driver"))...) + + if csi.NodePublishSecretRef != nil { + if len(csi.NodePublishSecretRef.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("nodePublishSecretRef ", "name"), "")) } else { - allErrs = append(allErrs, ValidateDNS1123Label(csi.NodeStageSecretRef.Name, fldPath.Child("name"))...) - } - if len(csi.NodeStageSecretRef.Namespace) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("nodeStageSecretRef", "namespace"), "")) - } else { - allErrs = append(allErrs, ValidateDNS1123Label(csi.NodeStageSecretRef.Namespace, fldPath.Child("namespace"))...) + for _, msg := range ValidateSecretName(csi.NodePublishSecretRef.Name, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), csi.NodePublishSecretRef.Name, msg)) + } } } @@ -1720,9 +1721,6 @@ func ValidatePersistentVolume(pv *core.PersistentVolume) field.ErrorList { allErrs = append(allErrs, field.Forbidden(specPath.Child("local"), "may not specify more than 1 volume type")) } else { numVolumes++ - if !utilfeature.DefaultFeatureGate.Enabled(features.PersistentLocalVolumes) { - allErrs = append(allErrs, field.Forbidden(specPath.Child("local"), "Local volumes are disabled by feature-gate")) - } allErrs = append(allErrs, validateLocalVolumeSource(pv.Spec.Local, specPath.Child("local"))...) // NodeAffinity is required @@ -1763,9 +1761,7 @@ func ValidatePersistentVolume(pv *core.PersistentVolume) field.ErrorList { allErrs = append(allErrs, field.Invalid(specPath.Child("storageClassName"), pv.Spec.StorageClassName, msg)) } } - if pv.Spec.VolumeMode != nil && !utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { - allErrs = append(allErrs, field.Forbidden(specPath.Child("volumeMode"), "PersistentVolume volumeMode is disabled by feature-gate")) - } else if pv.Spec.VolumeMode != nil && !supportedVolumeModes.Has(string(*pv.Spec.VolumeMode)) { + if pv.Spec.VolumeMode != nil && !supportedVolumeModes.Has(string(*pv.Spec.VolumeMode)) { allErrs = append(allErrs, field.NotSupported(specPath.Child("volumeMode"), *pv.Spec.VolumeMode, supportedVolumeModes.List())) } return allErrs @@ -1781,18 +1777,13 @@ func ValidatePersistentVolumeUpdate(newPv, oldPv *core.PersistentVolume) field.E if !apiequality.Semantic.DeepEqual(newPv.Spec.PersistentVolumeSource, oldPv.Spec.PersistentVolumeSource) { allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "persistentvolumesource"), "is immutable after creation")) } - newPv.Status = oldPv.Status - if utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { - allErrs = append(allErrs, ValidateImmutableField(newPv.Spec.VolumeMode, oldPv.Spec.VolumeMode, field.NewPath("volumeMode"))...) - } + allErrs = append(allErrs, ValidateImmutableField(newPv.Spec.VolumeMode, oldPv.Spec.VolumeMode, field.NewPath("volumeMode"))...) - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // Allow setting NodeAffinity if oldPv NodeAffinity was not set - if oldPv.Spec.NodeAffinity != nil { - allErrs = append(allErrs, ValidateImmutableField(newPv.Spec.NodeAffinity, oldPv.Spec.NodeAffinity, field.NewPath("nodeAffinity"))...) - } + // Allow setting NodeAffinity if oldPv NodeAffinity was not set + if oldPv.Spec.NodeAffinity != nil { + allErrs = append(allErrs, ValidateImmutableField(newPv.Spec.NodeAffinity, oldPv.Spec.NodeAffinity, field.NewPath("nodeAffinity"))...) } return allErrs @@ -1843,15 +1834,11 @@ func ValidatePersistentVolumeClaimSpec(spec *core.PersistentVolumeClaimSpec, fld allErrs = append(allErrs, field.Invalid(fldPath.Child("storageClassName"), *spec.StorageClassName, msg)) } } - if spec.VolumeMode != nil && !utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("volumeMode"), "PersistentVolumeClaim volumeMode is disabled by feature-gate")) - } else if spec.VolumeMode != nil && !supportedVolumeModes.Has(string(*spec.VolumeMode)) { + if spec.VolumeMode != nil && !supportedVolumeModes.Has(string(*spec.VolumeMode)) { allErrs = append(allErrs, field.NotSupported(fldPath.Child("volumeMode"), *spec.VolumeMode, supportedVolumeModes.List())) } if spec.DataSource != nil { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("dataSource"), "VolumeSnapshotDataSource is disabled by feature-gate")) - } else if spec.DataSource != nil { if len(spec.DataSource.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("dataSource", "name"), "")) } @@ -1920,9 +1907,8 @@ func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *core.PersistentVolumeCl } } - if utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { - allErrs = append(allErrs, ValidateImmutableField(newPvc.Spec.VolumeMode, oldPvc.Spec.VolumeMode, field.NewPath("volumeMode"))...) - } + allErrs = append(allErrs, ValidateImmutableField(newPvc.Spec.VolumeMode, oldPvc.Spec.VolumeMode, field.NewPath("volumeMode"))...) + return allErrs } @@ -1951,10 +1937,6 @@ func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *core.PersistentVo if len(newPvc.Spec.AccessModes) == 0 { allErrs = append(allErrs, field.Required(field.NewPath("Spec", "accessModes"), "")) } - if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) && len(newPvc.Status.Conditions) > 0 { - conditionPath := field.NewPath("status", "conditions") - allErrs = append(allErrs, field.Forbidden(conditionPath, "invalid field")) - } capPath := field.NewPath("status", "capacity") for r, qty := range newPvc.Status.Capacity { allErrs = append(allErrs, validateBasicResource(qty, capPath.Key(string(r)))...) @@ -1996,8 +1978,6 @@ func validateContainerPorts(ports []core.ContainerPort, fldPath *field.Path) fie } if len(port.Protocol) == 0 { allErrs = append(allErrs, field.Required(idxPath.Child("protocol"), "")) - } else if port.Protocol == core.ProtocolSCTP { - allErrs = append(allErrs, field.NotSupported(idxPath.Child("protocol"), port.Protocol, []string{string(core.ProtocolTCP), string(core.ProtocolUDP)})) } else if !supportedPortProtocols.Has(string(port.Protocol)) { allErrs = append(allErrs, field.NotSupported(idxPath.Child("protocol"), port.Protocol, supportedPortProtocols.List())) } @@ -2111,13 +2091,6 @@ func validateObjectFieldSelector(fs *core.ObjectFieldSelector, expressions *sets return allErrs } -func fsResourceIsEphemeralStorage(resource string) bool { - if resource == "limits.ephemeral-storage" || resource == "requests.ephemeral-storage" { - return true - } - return false -} - func validateContainerResourceFieldSelector(fs *core.ResourceFieldSelector, expressions *sets.String, fldPath *field.Path, volume bool) field.ErrorList { allErrs := field.ErrorList{} @@ -2127,8 +2100,6 @@ func validateContainerResourceFieldSelector(fs *core.ResourceFieldSelector, expr allErrs = append(allErrs, field.Required(fldPath.Child("resource"), "")) } else if !expressions.Has(fs.Resource) { allErrs = append(allErrs, field.NotSupported(fldPath.Child("resource"), fs.Resource, expressions.List())) - } else if fsResourceIsEphemeralStorage(fs.Resource) && !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - allErrs = append(allErrs, field.Forbidden(fldPath, "Containers' ephemeral storage requests/limits disabled by feature-gate for Downward API")) } allErrs = append(allErrs, validateContainerResourceDivisor(fs.Resource, fs.Divisor, fldPath)...) return allErrs @@ -2299,11 +2270,15 @@ func ValidateVolumeMounts(mounts []core.VolumeMount, voldevices map[string]strin } if len(mnt.SubPath) > 0 { - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeSubpath) { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("subPath"), "subPath is disabled by feature-gate")) - } else { - allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPath, fldPath.Child("subPath"))...) + allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPath, fldPath.Child("subPath"))...) + } + + if len(mnt.SubPathExpr) > 0 { + if len(mnt.SubPath) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("subPathExpr"), mnt.SubPathExpr, "subPathExpr and subPath are mutually exclusive")) } + + allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPathExpr, fldPath.Child("subPathExpr"))...) } if mnt.MountPropagation != nil { @@ -2318,10 +2293,6 @@ func ValidateVolumeDevices(devices []core.VolumeDevice, volmounts map[string]str devicepath := sets.NewString() devicename := sets.NewString() - if devices != nil && !utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("volumeDevices"), "Container volumeDevices is disabled by feature-gate")) - return allErrs - } if devices != nil { for i, dev := range devices { idxPath := fldPath.Index(i) @@ -2670,18 +2641,11 @@ func validateRestartPolicy(restartPolicy *core.RestartPolicy, fldPath *field.Pat func validateDNSPolicy(dnsPolicy *core.DNSPolicy, fldPath *field.Path) field.ErrorList { allErrors := field.ErrorList{} switch *dnsPolicy { - case core.DNSClusterFirstWithHostNet, core.DNSClusterFirst, core.DNSDefault: - case core.DNSNone: - if !utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) { - allErrors = append(allErrors, field.Invalid(fldPath, dnsPolicy, "DNSPolicy: can not use 'None', custom pod DNS is disabled by feature gate")) - } + case core.DNSClusterFirstWithHostNet, core.DNSClusterFirst, core.DNSDefault, core.DNSNone: case "": allErrors = append(allErrors, field.Required(fldPath, "")) default: - validValues := []string{string(core.DNSClusterFirstWithHostNet), string(core.DNSClusterFirst), string(core.DNSDefault)} - if utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) { - validValues = append(validValues, string(core.DNSNone)) - } + validValues := []string{string(core.DNSClusterFirstWithHostNet), string(core.DNSClusterFirst), string(core.DNSDefault), string(core.DNSNone)} allErrors = append(allErrors, field.NotSupported(fldPath, dnsPolicy, validValues)) } return allErrors @@ -2700,9 +2664,6 @@ const ( func validateReadinessGates(readinessGates []core.PodReadinessGate, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if !utilfeature.DefaultFeatureGate.Enabled(features.PodReadinessGates) && len(readinessGates) > 0 { - return append(allErrs, field.Forbidden(fldPath, "PodReadinessGates is disabled by feature gate")) - } for i, value := range readinessGates { for _, msg := range validation.IsQualifiedName(string(value.ConditionType)) { allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("conditionType"), string(value.ConditionType), msg)) @@ -2715,7 +2676,7 @@ func validatePodDNSConfig(dnsConfig *core.PodDNSConfig, dnsPolicy *core.DNSPolic allErrs := field.ErrorList{} // Validate DNSNone case. Must provide at least one DNS name server. - if utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) && dnsPolicy != nil && *dnsPolicy == core.DNSNone { + if dnsPolicy != nil && *dnsPolicy == core.DNSNone { if dnsConfig == nil { return append(allErrs, field.Required(fldPath, fmt.Sprintf("must provide `dnsConfig` when `dnsPolicy` is %s", core.DNSNone))) } @@ -2725,10 +2686,6 @@ func validatePodDNSConfig(dnsConfig *core.PodDNSConfig, dnsPolicy *core.DNSPolic } if dnsConfig != nil { - if !utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) { - return append(allErrs, field.Forbidden(fldPath, "DNSConfig: custom pod DNS is disabled by feature gate")) - } - // Validate nameservers. if len(dnsConfig.Nameservers) > MaxDNSNameservers { allErrs = append(allErrs, field.Invalid(fldPath.Child("nameservers"), dnsConfig.Nameservers, fmt.Sprintf("must not have more than %v nameservers", MaxDNSNameservers))) @@ -2977,19 +2934,17 @@ func ValidatePod(pod *core.Pod) field.ErrorList { allErrs = append(allErrs, validateContainersOnlyForPod(pod.Spec.Containers, specPath.Child("containers"))...) allErrs = append(allErrs, validateContainersOnlyForPod(pod.Spec.InitContainers, specPath.Child("initContainers"))...) - if utilfeature.DefaultFeatureGate.Enabled(features.HugePages) { - hugePageResources := sets.NewString() - for i := range pod.Spec.Containers { - resourceSet := toContainerResourcesSet(&pod.Spec.Containers[i]) - for resourceStr := range resourceSet { - if v1helper.IsHugePageResourceName(v1.ResourceName(resourceStr)) { - hugePageResources.Insert(resourceStr) - } + hugePageResources := sets.NewString() + for i := range pod.Spec.Containers { + resourceSet := toContainerResourcesSet(&pod.Spec.Containers[i]) + for resourceStr := range resourceSet { + if v1helper.IsHugePageResourceName(v1.ResourceName(resourceStr)) { + hugePageResources.Insert(resourceStr) } } - if len(hugePageResources) > 1 { - allErrs = append(allErrs, field.Invalid(specPath, hugePageResources, "must use a single hugepage size in a pod spec")) - } + } + if len(hugePageResources) > 1 { + allErrs = append(allErrs, field.Invalid(specPath, hugePageResources, "must use a single hugepage size in a pod spec")) } return allErrs @@ -3050,13 +3005,15 @@ func ValidatePodSpec(spec *core.PodSpec, fldPath *field.Path) field.ErrorList { } if len(spec.PriorityClassName) > 0 { - if utilfeature.DefaultFeatureGate.Enabled(features.PodPriority) { - for _, msg := range ValidatePriorityClassName(spec.PriorityClassName, false) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("priorityClassName"), spec.PriorityClassName, msg)) - } + for _, msg := range ValidatePriorityClassName(spec.PriorityClassName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("priorityClassName"), spec.PriorityClassName, msg)) } } + if spec.RuntimeClassName != nil { + allErrs = append(allErrs, ValidateRuntimeClassName(*spec.RuntimeClassName, fldPath.Child("runtimeClassName"))...) + } + return allErrs } @@ -3178,22 +3135,17 @@ func ValidateTopologySelectorTerm(term core.TopologySelectorTerm, fldPath *field exprMap := make(map[string]sets.String) exprPath := fldPath.Child("matchLabelExpressions") - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // Allow empty MatchLabelExpressions, in case this field becomes optional in the future. + // Allow empty MatchLabelExpressions, in case this field becomes optional in the future. + for i, req := range term.MatchLabelExpressions { + idxPath := exprPath.Index(i) + valueSet, exprErrs := validateTopologySelectorLabelRequirement(req, idxPath) + allErrs = append(allErrs, exprErrs...) - for i, req := range term.MatchLabelExpressions { - idxPath := exprPath.Index(i) - valueSet, exprErrs := validateTopologySelectorLabelRequirement(req, idxPath) - allErrs = append(allErrs, exprErrs...) - - // Validate no duplicate keys exist. - if _, exists := exprMap[req.Key]; exists { - allErrs = append(allErrs, field.Duplicate(idxPath.Child("key"), req.Key)) - } - exprMap[req.Key] = valueSet + // Validate no duplicate keys exist. + if _, exists := exprMap[req.Key]; exists { + allErrs = append(allErrs, field.Duplicate(idxPath.Child("key"), req.Key)) } - } else if len(term.MatchLabelExpressions) != 0 { - allErrs = append(allErrs, field.Forbidden(fldPath, "field is disabled by feature-gate VolumeScheduling")) + exprMap[req.Key] = valueSet } return exprMap, allErrs @@ -3377,11 +3329,6 @@ func ValidateAppArmorPodAnnotations(annotations map[string]string, spec *core.Po if !strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { continue } - // TODO: this belongs to admission, not general pod validation: - if !utilfeature.DefaultFeatureGate.Enabled(features.AppArmor) { - allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "AppArmor is disabled by feature-gate")) - continue - } containerName := strings.TrimPrefix(k, apparmor.ContainerAnnotationKeyPrefix) if !podSpecHasContainer(spec, containerName) { allErrs = append(allErrs, field.Invalid(fldPath.Key(k), containerName, "container not found")) @@ -3468,26 +3415,17 @@ func ValidatePodSecurityContext(securityContext *core.PodSecurityContext, spec * allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsGroup"), *(securityContext.RunAsGroup), msg)) } } - for g, gid := range securityContext.SupplementalGroups { for _, msg := range validation.IsValidGroupID(gid) { allErrs = append(allErrs, field.Invalid(fldPath.Child("supplementalGroups").Index(g), gid, msg)) } } - if securityContext.ShareProcessNamespace != nil { - if !utilfeature.DefaultFeatureGate.Enabled(features.PodShareProcessNamespace) { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("shareProcessNamespace"), "Process Namespace Sharing is disabled by PodShareProcessNamespace feature-gate")) - } else if securityContext.HostPID && *securityContext.ShareProcessNamespace { - allErrs = append(allErrs, field.Invalid(fldPath.Child("shareProcessNamespace"), *securityContext.ShareProcessNamespace, "ShareProcessNamespace and HostPID cannot both be enabled")) - } + if securityContext.ShareProcessNamespace != nil && securityContext.HostPID && *securityContext.ShareProcessNamespace { + allErrs = append(allErrs, field.Invalid(fldPath.Child("shareProcessNamespace"), *securityContext.ShareProcessNamespace, "ShareProcessNamespace and HostPID cannot both be enabled")) } if len(securityContext.Sysctls) != 0 { - if utilfeature.DefaultFeatureGate.Enabled(features.Sysctls) { - allErrs = append(allErrs, validateSysctls(securityContext.Sysctls, fldPath.Child("sysctls"))...) - } else { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("sysctls"), "Sysctls are disabled by Sysctls feature-gate")) - } + allErrs = append(allErrs, validateSysctls(securityContext.Sysctls, fldPath.Child("sysctls"))...) } } @@ -3794,9 +3732,7 @@ func ValidateService(service *core.Service) field.ErrorList { includeProtocols := sets.NewString() for i := range service.Spec.Ports { portPath := portsPath.Index(i) - if service.Spec.Ports[i].Protocol == core.ProtocolSCTP { - allErrs = append(allErrs, field.NotSupported(portPath.Child("protocol"), service.Spec.Ports[i].Protocol, []string{string(core.ProtocolTCP), string(core.ProtocolUDP)})) - } else if !supportedPortProtocols.Has(string(service.Spec.Ports[i].Protocol)) { + if !supportedPortProtocols.Has(string(service.Spec.Ports[i].Protocol)) { allErrs = append(allErrs, field.Invalid(portPath.Child("protocol"), service.Spec.Ports[i].Protocol, "cannot create an external load balancer with non-TCP/UDP/SCTP ports")) } else { includeProtocols.Insert(string(service.Spec.Ports[i].Protocol)) @@ -3895,8 +3831,6 @@ func validateServicePort(sp *core.ServicePort, requireName, isHeadlessService bo if len(sp.Protocol) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("protocol"), "")) - } else if sp.Protocol == core.ProtocolSCTP { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), sp.Protocol, []string{string(core.ProtocolTCP), string(core.ProtocolUDP)})) } else if !supportedPortProtocols.Has(string(sp.Protocol)) { allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), sp.Protocol, supportedPortProtocols.List())) } @@ -4058,7 +3992,7 @@ func ValidatePodTemplateSpecForRC(template *core.PodTemplateSpec, selectorMap ma allErrs = append(allErrs, field.NotSupported(fldPath.Child("spec", "restartPolicy"), template.Spec.RestartPolicy, []string{string(core.RestartPolicyAlways)})) } if template.Spec.ActiveDeadlineSeconds != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("spec", "activeDeadlineSeconds"), template.Spec.ActiveDeadlineSeconds, "must not be specified")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("spec", "activeDeadlineSeconds"), "activeDeadlineSeconds in ReplicationController is not Supported")) } } return allErrs @@ -4090,7 +4024,7 @@ func ValidateReadOnlyPersistentDisks(volumes []core.Volume, fldPath *field.Path) vol := &volumes[i] idxPath := fldPath.Index(i) if vol.GCEPersistentDisk != nil { - if vol.GCEPersistentDisk.ReadOnly == false { + if !vol.GCEPersistentDisk.ReadOnly { allErrs = append(allErrs, field.Invalid(idxPath.Child("gcePersistentDisk", "readOnly"), false, "must be true for replicated pods > 1; GCE PD can only be mounted on multiple machines if it is read-only")) } } @@ -4177,16 +4111,6 @@ func ValidateNode(node *core.Node) field.ErrorList { // That said, if specified, we need to ensure they are valid. allErrs = append(allErrs, ValidateNodeResources(node)...) - // Only allow Spec.ConfigSource and Status.Config to be set if the DynamicKubeletConfig feature gate is enabled - if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { - if node.Spec.ConfigSource != nil { - allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "configSource"), "configSource may only be set if the DynamicKubeletConfig feature gate is enabled)")) - } - if node.Status.Config != nil { - allErrs = append(allErrs, field.Forbidden(field.NewPath("status", "config"), "config may only be set if the DynamicKubeletConfig feature gate is enabled)")) - } - } - if len(node.Spec.PodCIDR) != 0 { _, err := ValidateCIDR(node.Spec.PodCIDR) if err != nil { @@ -4269,17 +4193,14 @@ func ValidateNodeUpdate(node, oldNode *core.Node) field.ErrorList { } } - // Allow and validate updates to Node.Spec.ConfigSource and Node.Status.Config if DynamicKubeletConfig feature gate is enabled - if utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { - if node.Spec.ConfigSource != nil { - allErrs = append(allErrs, validateNodeConfigSourceSpec(node.Spec.ConfigSource, field.NewPath("spec", "configSource"))...) - } - oldNode.Spec.ConfigSource = node.Spec.ConfigSource - if node.Status.Config != nil { - allErrs = append(allErrs, validateNodeConfigStatus(node.Status.Config, field.NewPath("status", "config"))...) - } - oldNode.Status.Config = node.Status.Config + if node.Spec.ConfigSource != nil { + allErrs = append(allErrs, validateNodeConfigSourceSpec(node.Spec.ConfigSource, field.NewPath("spec", "configSource"))...) } + oldNode.Spec.ConfigSource = node.Spec.ConfigSource + if node.Status.Config != nil { + allErrs = append(allErrs, validateNodeConfigStatus(node.Status.Config, field.NewPath("status", "config"))...) + } + oldNode.Status.Config = node.Status.Config // TODO: move reset function to its own location // Ignore metadata changes now that they have been tested @@ -4449,22 +4370,11 @@ func validateContainerResourceName(value string, fldPath *field.Path) field.Erro return allErrs } -// isLocalStorageResource checks whether the resource is local ephemeral storage -func isLocalStorageResource(name string) bool { - if name == string(core.ResourceEphemeralStorage) || name == string(core.ResourceRequestsEphemeralStorage) || - name == string(core.ResourceLimitsEphemeralStorage) { - return true - } - return false -} - // Validate resource names that can go in a resource quota // Refer to docs/design/resources.md for more details. func ValidateResourceQuotaResourceName(value string, fldPath *field.Path) field.ErrorList { allErrs := validateResourceName(value, fldPath) - if isLocalStorageResource(value) && !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - return append(allErrs, field.Forbidden(fldPath, "ResourceEphemeralStorage field disabled by feature-gate for ResourceQuota")) - } + if len(strings.Split(value, "/")) == 1 { if !helper.IsStandardQuotaResourceName(value) { return append(allErrs, field.Invalid(fldPath, value, isInvalidQuotaResource)) @@ -4495,10 +4405,6 @@ func validateLimitRangeTypeName(value string, fldPath *field.Path) field.ErrorLi // Validate limit range resource name // limit types (other than Pod/Container) could contain storage not just cpu or memory func validateLimitRangeResourceName(limitType core.LimitType, value string, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if value == string(core.ResourceEphemeralStorage) && !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - return append(allErrs, field.Forbidden(fldPath, "ResourceEphemeralStorage field disabled by feature-gate for Resource LimitRange")) - } switch limitType { case core.LimitTypePod, core.LimitTypeContainer: return validateContainerResourceName(value, fldPath) @@ -4813,15 +4719,8 @@ func ValidateResourceRequirements(requirements *core.ResourceRequirements, fldPa // Validate resource quantity. allErrs = append(allErrs, ValidateResourceQuantityValue(string(resourceName), quantity, fldPath)...) - if resourceName == core.ResourceEphemeralStorage && !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - allErrs = append(allErrs, field.Forbidden(limPath, "ResourceEphemeralStorage field disabled by feature-gate for ResourceRequirements")) - } if helper.IsHugePageResourceName(resourceName) { - if !utilfeature.DefaultFeatureGate.Enabled(features.HugePages) { - allErrs = append(allErrs, field.Forbidden(limPath, fmt.Sprintf("%s field disabled by feature-gate for ResourceRequirements", resourceName))) - } else { - limContainsHugePages = true - } + limContainsHugePages = true } if supportedQoSComputeResources.Has(string(resourceName)) { @@ -4958,9 +4857,6 @@ func validateScopeSelector(resourceQuotaSpec *core.ResourceQuotaSpec, fld *field if resourceQuotaSpec.ScopeSelector == nil { return allErrs } - if !utilfeature.DefaultFeatureGate.Enabled(features.ResourceQuotaScopeSelectors) && resourceQuotaSpec.ScopeSelector != nil { - allErrs = append(allErrs, field.Forbidden(fld.Child("scopeSelector"), "ResourceQuotaScopeSelectors feature-gate is disabled")) - } allErrs = append(allErrs, validateScopedResourceSelectorRequirement(resourceQuotaSpec, fld.Child("scopeSelector"))...) return allErrs } @@ -5080,10 +4976,7 @@ func ValidateNamespace(namespace *core.Namespace) field.ErrorList { // Validate finalizer names func validateFinalizerName(stringValue string, fldPath *field.Path) field.ErrorList { allErrs := apimachineryvalidation.ValidateFinalizerName(stringValue, fldPath) - for _, err := range validateKubeFinalizerName(stringValue, fldPath) { - allErrs = append(allErrs, err) - } - + allErrs = append(allErrs, validateKubeFinalizerName(stringValue, fldPath)...) return allErrs } @@ -5228,8 +5121,6 @@ func validateEndpointPort(port *core.EndpointPort, requireName bool, fldPath *fi } if len(port.Protocol) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("protocol"), "")) - } else if port.Protocol == core.ProtocolSCTP { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), port.Protocol, []string{string(core.ProtocolTCP), string(core.ProtocolUDP)})) } else if !supportedPortProtocols.Has(string(port.Protocol)) { allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), port.Protocol, supportedPortProtocols.List())) } @@ -5272,6 +5163,12 @@ func ValidateSecurityContext(sc *core.SecurityContext, fldPath *field.Path) fiel } } + if sc.ProcMount != nil { + if err := ValidateProcMountType(fldPath.Child("procMount"), *sc.ProcMount); err != nil { + allErrs = append(allErrs, err) + } + } + if sc.AllowPrivilegeEscalation != nil && !*sc.AllowPrivilegeEscalation { if sc.Privileged != nil && *sc.Privileged { allErrs = append(allErrs, field.Invalid(fldPath, sc, "cannot set `allowPrivilegeEscalation` to false and `privileged` to true")) @@ -5341,10 +5238,6 @@ func validateVolumeNodeAffinity(nodeAffinity *core.VolumeNodeAffinity, fldPath * return false, allErrs } - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - allErrs = append(allErrs, field.Forbidden(fldPath, "Volume node affinity is disabled by feature-gate")) - } - if nodeAffinity.Required != nil { allErrs = append(allErrs, ValidateNodeSelector(nodeAffinity.Required, fldPath.Child("required"))...) } else { @@ -5372,3 +5265,13 @@ func IsDecremented(update, old *int32) bool { } return *update < *old } + +// ValidateProcMountType tests that the argument is a valid ProcMountType. +func ValidateProcMountType(fldPath *field.Path, procMountType core.ProcMountType) *field.Error { + switch procMountType { + case core.DefaultProcMount, core.UnmaskedProcMount: + return nil + default: + return field.NotSupported(fldPath, procMountType, []string{string(core.DefaultProcMount), string(core.UnmaskedProcMount)}) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go index a4801c2e313..07347542b6b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go @@ -250,6 +250,44 @@ func (in *CSIPersistentVolumeSource) DeepCopy() *CSIPersistentVolumeSource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIVolumeSource) DeepCopyInto(out *CSIVolumeSource) { + *out = *in + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } + if in.VolumeAttributes != nil { + in, out := &in.VolumeAttributes, &out.VolumeAttributes + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.NodePublishSecretRef != nil { + in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef + *out = new(LocalObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIVolumeSource. +func (in *CSIVolumeSource) DeepCopy() *CSIVolumeSource { + if in == nil { + return nil + } + out := new(CSIVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Capabilities) DeepCopyInto(out *Capabilities) { *out = *in @@ -5368,6 +5406,11 @@ func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = new(StorageOSVolumeSource) (*in).DeepCopyInto(*out) } + if in.CSI != nil { + in, out := &in.CSI, &out.CSI + *out = new(CSIVolumeSource) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/extensions/BUILD index d1d43ed5a1b..ee1f99ae342 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/BUILD @@ -17,13 +17,11 @@ go_library( deps = [ "//pkg/apis/apps:go_default_library", "//pkg/apis/autoscaling:go_default_library", - "//pkg/apis/core:go_default_library", "//pkg/apis/networking:go_default_library", "//pkg/apis/policy:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/extensions/OWNERS old mode 100755 new mode 100644 index fc2bfc6f10f..165db06c75a --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go index d4644ffaee3..14f59753071 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go @@ -56,8 +56,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ReplicationControllerDummy{}, &apps.DaemonSetList{}, &apps.DaemonSet{}, - &Ingress{}, - &IngressList{}, + &networking.Ingress{}, + &networking.IngressList{}, &apps.ReplicaSet{}, &apps.ReplicaSetList{}, &policy.PodSecurityPolicy{}, diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go index 20637e74e46..472ed99dabc 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go @@ -30,8 +30,6 @@ package extensions import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" - api "k8s.io/kubernetes/pkg/apis/core" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -40,172 +38,3 @@ import ( type ReplicationControllerDummy struct { metav1.TypeMeta } - -// +genclient -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Ingress is a collection of rules that allow inbound connections to reach the -// endpoints defined by a backend. An Ingress can be configured to give services -// externally-reachable urls, load balance traffic, terminate SSL, offer name -// based virtual hosting etc. -type Ingress struct { - metav1.TypeMeta - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - metav1.ObjectMeta - - // Spec is the desired state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - // +optional - Spec IngressSpec - - // Status is the current state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - // +optional - Status IngressStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// IngressList is a collection of Ingress. -type IngressList struct { - metav1.TypeMeta - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - metav1.ListMeta - - // Items is the list of Ingress. - Items []Ingress -} - -// IngressSpec describes the Ingress the user wishes to exist. -type IngressSpec struct { - // A default backend capable of servicing requests that don't match any - // rule. At least one of 'backend' or 'rules' must be specified. This field - // is optional to allow the loadbalancer controller or defaulting logic to - // specify a global default. - // +optional - Backend *IngressBackend - - // TLS configuration. Currently the Ingress only supports a single TLS - // port, 443. If multiple members of this list specify different hosts, they - // will be multiplexed on the same port according to the hostname specified - // through the SNI TLS extension, if the ingress controller fulfilling the - // ingress supports SNI. - // +optional - TLS []IngressTLS - - // A list of host rules used to configure the Ingress. If unspecified, or - // no rule matches, all traffic is sent to the default backend. - // +optional - Rules []IngressRule - // TODO: Add the ability to specify load-balancer IP through claims -} - -// IngressTLS describes the transport layer security associated with an Ingress. -type IngressTLS struct { - // Hosts are a list of hosts included in the TLS certificate. The values in - // this list must match the name/s used in the tlsSecret. Defaults to the - // wildcard host setting for the loadbalancer controller fulfilling this - // Ingress, if left unspecified. - // +optional - Hosts []string - // SecretName is the name of the secret used to terminate SSL traffic on 443. - // Field is left optional to allow SSL routing based on SNI hostname alone. - // If the SNI host in a listener conflicts with the "Host" header field used - // by an IngressRule, the SNI host is used for termination and value of the - // Host header is used for routing. - // +optional - SecretName string - // TODO: Consider specifying different modes of termination, protocols etc. -} - -// IngressStatus describe the current state of the Ingress. -type IngressStatus struct { - // LoadBalancer contains the current status of the load-balancer. - // +optional - LoadBalancer api.LoadBalancerStatus -} - -// IngressRule represents the rules mapping the paths under a specified host to -// the related backend services. Incoming requests are first evaluated for a host -// match, then routed to the backend associated with the matching IngressRuleValue. -type IngressRule struct { - // Host is the fully qualified domain name of a network host, as defined - // by RFC 3986. Note the following deviations from the "host" part of the - // URI as defined in the RFC: - // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the - // IP in the Spec of the parent Ingress. - // 2. The `:` delimiter is not respected because ports are not allowed. - // Currently the port of an Ingress is implicitly :80 for http and - // :443 for https. - // Both these may change in the future. - // Incoming requests are matched against the host before the IngressRuleValue. - // If the host is unspecified, the Ingress routes all traffic based on the - // specified IngressRuleValue. - // +optional - Host string - // IngressRuleValue represents a rule to route requests for this IngressRule. - // If unspecified, the rule defaults to a http catch-all. Whether that sends - // just traffic matching the host to the default backend or all traffic to the - // default backend, is left to the controller fulfilling the Ingress. Http is - // currently the only supported IngressRuleValue. - // +optional - IngressRuleValue -} - -// IngressRuleValue represents a rule to apply against incoming requests. If the -// rule is satisfied, the request is routed to the specified backend. Currently -// mixing different types of rules in a single Ingress is disallowed, so exactly -// one of the following must be set. -type IngressRuleValue struct { - //TODO: - // 1. Consider renaming this resource and the associated rules so they - // aren't tied to Ingress. They can be used to route intra-cluster traffic. - // 2. Consider adding fields for ingress-type specific global options - // usable by a loadbalancer, like http keep-alive. - - // +optional - HTTP *HTTPIngressRuleValue -} - -// HTTPIngressRuleValue is a list of http selectors pointing to backends. -// In the example: http:///? -> backend where -// where parts of the url correspond to RFC 3986, this resource will be used -// to match against everything after the last '/' and before the first '?' -// or '#'. -type HTTPIngressRuleValue struct { - // A collection of paths that map requests to backends. - Paths []HTTPIngressPath - // TODO: Consider adding fields for ingress-type specific global - // options usable by a loadbalancer, like http keep-alive. -} - -// HTTPIngressPath associates a path regex with a backend. Incoming urls matching -// the path are forwarded to the backend. -type HTTPIngressPath struct { - // Path is an extended POSIX regex as defined by IEEE Std 1003.1, - // (i.e this follows the egrep/unix syntax, not the perl syntax) - // matched against the path of an incoming request. Currently it can - // contain characters disallowed from the conventional "path" - // part of a URL as defined by RFC 3986. Paths must begin with - // a '/'. If unspecified, the path defaults to a catch all sending - // traffic to the backend. - // +optional - Path string - - // Backend defines the referenced service endpoint to which the traffic - // will be forwarded to. - Backend IngressBackend -} - -// IngressBackend describes all endpoints for a given service and port. -type IngressBackend struct { - // Specifies the name of the referenced service. - ServiceName string - - // Specifies the port of the referenced service. - ServicePort intstr.IntOrString -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go index 463bceb1a9a..b21d59ab40f 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go @@ -16,6 +16,7 @@ limitations under the License. // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/apps // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/policy +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/networking // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/extensions // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/autoscaling // +k8s:conversion-gen-external-types=k8s.io/api/extensions/v1beta1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index 3159bdc69e9..d1d7bf58ce0 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -28,6 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" apps "k8s.io/kubernetes/pkg/apis/apps" autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling" core "k8s.io/kubernetes/pkg/apis/core" @@ -44,6 +45,16 @@ func init() { // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.AllowedCSIDriver)(nil), (*policy.AllowedCSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(a.(*v1beta1.AllowedCSIDriver), b.(*policy.AllowedCSIDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*policy.AllowedCSIDriver)(nil), (*v1beta1.AllowedCSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(a.(*policy.AllowedCSIDriver), b.(*v1beta1.AllowedCSIDriver), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta1.AllowedFlexVolume)(nil), (*policy.AllowedFlexVolume)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_AllowedFlexVolume_To_policy_AllowedFlexVolume(a.(*v1beta1.AllowedFlexVolume), b.(*policy.AllowedFlexVolume), scope) }); err != nil { @@ -204,23 +215,23 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressPath)(nil), (*extensions.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath(a.(*v1beta1.HTTPIngressPath), b.(*extensions.HTTPIngressPath), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressPath)(nil), (*networking.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(a.(*v1beta1.HTTPIngressPath), b.(*networking.HTTPIngressPath), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.HTTPIngressPath)(nil), (*v1beta1.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_HTTPIngressPath_To_v1beta1_HTTPIngressPath(a.(*extensions.HTTPIngressPath), b.(*v1beta1.HTTPIngressPath), scope) + if err := s.AddGeneratedConversionFunc((*networking.HTTPIngressPath)(nil), (*v1beta1.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(a.(*networking.HTTPIngressPath), b.(*v1beta1.HTTPIngressPath), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressRuleValue)(nil), (*extensions.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_HTTPIngressRuleValue_To_extensions_HTTPIngressRuleValue(a.(*v1beta1.HTTPIngressRuleValue), b.(*extensions.HTTPIngressRuleValue), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressRuleValue)(nil), (*networking.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(a.(*v1beta1.HTTPIngressRuleValue), b.(*networking.HTTPIngressRuleValue), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.HTTPIngressRuleValue)(nil), (*v1beta1.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(a.(*extensions.HTTPIngressRuleValue), b.(*v1beta1.HTTPIngressRuleValue), scope) + if err := s.AddGeneratedConversionFunc((*networking.HTTPIngressRuleValue)(nil), (*v1beta1.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(a.(*networking.HTTPIngressRuleValue), b.(*v1beta1.HTTPIngressRuleValue), scope) }); err != nil { return err } @@ -244,83 +255,163 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.Ingress)(nil), (*extensions.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_Ingress_To_extensions_Ingress(a.(*v1beta1.Ingress), b.(*extensions.Ingress), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IPBlock)(nil), (*networking.IPBlock)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IPBlock_To_networking_IPBlock(a.(*v1beta1.IPBlock), b.(*networking.IPBlock), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.Ingress)(nil), (*v1beta1.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_Ingress_To_v1beta1_Ingress(a.(*extensions.Ingress), b.(*v1beta1.Ingress), scope) + if err := s.AddGeneratedConversionFunc((*networking.IPBlock)(nil), (*v1beta1.IPBlock)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IPBlock_To_v1beta1_IPBlock(a.(*networking.IPBlock), b.(*v1beta1.IPBlock), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressBackend)(nil), (*extensions.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressBackend_To_extensions_IngressBackend(a.(*v1beta1.IngressBackend), b.(*extensions.IngressBackend), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.Ingress)(nil), (*networking.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Ingress_To_networking_Ingress(a.(*v1beta1.Ingress), b.(*networking.Ingress), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressBackend)(nil), (*v1beta1.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressBackend_To_v1beta1_IngressBackend(a.(*extensions.IngressBackend), b.(*v1beta1.IngressBackend), scope) + if err := s.AddGeneratedConversionFunc((*networking.Ingress)(nil), (*v1beta1.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_Ingress_To_v1beta1_Ingress(a.(*networking.Ingress), b.(*v1beta1.Ingress), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressList)(nil), (*extensions.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressList_To_extensions_IngressList(a.(*v1beta1.IngressList), b.(*extensions.IngressList), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressBackend)(nil), (*networking.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressBackend_To_networking_IngressBackend(a.(*v1beta1.IngressBackend), b.(*networking.IngressBackend), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressList)(nil), (*v1beta1.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressList_To_v1beta1_IngressList(a.(*extensions.IngressList), b.(*v1beta1.IngressList), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressBackend)(nil), (*v1beta1.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressBackend_To_v1beta1_IngressBackend(a.(*networking.IngressBackend), b.(*v1beta1.IngressBackend), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRule)(nil), (*extensions.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressRule_To_extensions_IngressRule(a.(*v1beta1.IngressRule), b.(*extensions.IngressRule), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressList)(nil), (*networking.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressList_To_networking_IngressList(a.(*v1beta1.IngressList), b.(*networking.IngressList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressRule)(nil), (*v1beta1.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressRule_To_v1beta1_IngressRule(a.(*extensions.IngressRule), b.(*v1beta1.IngressRule), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressList)(nil), (*v1beta1.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressList_To_v1beta1_IngressList(a.(*networking.IngressList), b.(*v1beta1.IngressList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRuleValue)(nil), (*extensions.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue(a.(*v1beta1.IngressRuleValue), b.(*extensions.IngressRuleValue), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRule)(nil), (*networking.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressRule_To_networking_IngressRule(a.(*v1beta1.IngressRule), b.(*networking.IngressRule), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressRuleValue)(nil), (*v1beta1.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue(a.(*extensions.IngressRuleValue), b.(*v1beta1.IngressRuleValue), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressRule)(nil), (*v1beta1.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressRule_To_v1beta1_IngressRule(a.(*networking.IngressRule), b.(*v1beta1.IngressRule), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressSpec)(nil), (*extensions.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressSpec_To_extensions_IngressSpec(a.(*v1beta1.IngressSpec), b.(*extensions.IngressSpec), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRuleValue)(nil), (*networking.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(a.(*v1beta1.IngressRuleValue), b.(*networking.IngressRuleValue), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressSpec)(nil), (*v1beta1.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressSpec_To_v1beta1_IngressSpec(a.(*extensions.IngressSpec), b.(*v1beta1.IngressSpec), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressRuleValue)(nil), (*v1beta1.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(a.(*networking.IngressRuleValue), b.(*v1beta1.IngressRuleValue), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressStatus)(nil), (*extensions.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressStatus_To_extensions_IngressStatus(a.(*v1beta1.IngressStatus), b.(*extensions.IngressStatus), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressSpec)(nil), (*networking.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressSpec_To_networking_IngressSpec(a.(*v1beta1.IngressSpec), b.(*networking.IngressSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressStatus)(nil), (*v1beta1.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressStatus_To_v1beta1_IngressStatus(a.(*extensions.IngressStatus), b.(*v1beta1.IngressStatus), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressSpec)(nil), (*v1beta1.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressSpec_To_v1beta1_IngressSpec(a.(*networking.IngressSpec), b.(*v1beta1.IngressSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.IngressTLS)(nil), (*extensions.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_IngressTLS_To_extensions_IngressTLS(a.(*v1beta1.IngressTLS), b.(*extensions.IngressTLS), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressStatus)(nil), (*networking.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressStatus_To_networking_IngressStatus(a.(*v1beta1.IngressStatus), b.(*networking.IngressStatus), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*extensions.IngressTLS)(nil), (*v1beta1.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_extensions_IngressTLS_To_v1beta1_IngressTLS(a.(*extensions.IngressTLS), b.(*v1beta1.IngressTLS), scope) + if err := s.AddGeneratedConversionFunc((*networking.IngressStatus)(nil), (*v1beta1.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressStatus_To_v1beta1_IngressStatus(a.(*networking.IngressStatus), b.(*v1beta1.IngressStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressTLS)(nil), (*networking.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressTLS_To_networking_IngressTLS(a.(*v1beta1.IngressTLS), b.(*networking.IngressTLS), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressTLS)(nil), (*v1beta1.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressTLS_To_v1beta1_IngressTLS(a.(*networking.IngressTLS), b.(*v1beta1.IngressTLS), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicy)(nil), (*networking.NetworkPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicy_To_networking_NetworkPolicy(a.(*v1beta1.NetworkPolicy), b.(*networking.NetworkPolicy), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicy)(nil), (*v1beta1.NetworkPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicy_To_v1beta1_NetworkPolicy(a.(*networking.NetworkPolicy), b.(*v1beta1.NetworkPolicy), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyEgressRule)(nil), (*networking.NetworkPolicyEgressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyEgressRule_To_networking_NetworkPolicyEgressRule(a.(*v1beta1.NetworkPolicyEgressRule), b.(*networking.NetworkPolicyEgressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyEgressRule)(nil), (*v1beta1.NetworkPolicyEgressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyEgressRule_To_v1beta1_NetworkPolicyEgressRule(a.(*networking.NetworkPolicyEgressRule), b.(*v1beta1.NetworkPolicyEgressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyIngressRule)(nil), (*networking.NetworkPolicyIngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyIngressRule_To_networking_NetworkPolicyIngressRule(a.(*v1beta1.NetworkPolicyIngressRule), b.(*networking.NetworkPolicyIngressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyIngressRule)(nil), (*v1beta1.NetworkPolicyIngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyIngressRule_To_v1beta1_NetworkPolicyIngressRule(a.(*networking.NetworkPolicyIngressRule), b.(*v1beta1.NetworkPolicyIngressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyList)(nil), (*networking.NetworkPolicyList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyList_To_networking_NetworkPolicyList(a.(*v1beta1.NetworkPolicyList), b.(*networking.NetworkPolicyList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyList)(nil), (*v1beta1.NetworkPolicyList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyList_To_v1beta1_NetworkPolicyList(a.(*networking.NetworkPolicyList), b.(*v1beta1.NetworkPolicyList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyPeer)(nil), (*networking.NetworkPolicyPeer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(a.(*v1beta1.NetworkPolicyPeer), b.(*networking.NetworkPolicyPeer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyPeer)(nil), (*v1beta1.NetworkPolicyPeer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(a.(*networking.NetworkPolicyPeer), b.(*v1beta1.NetworkPolicyPeer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyPort)(nil), (*networking.NetworkPolicyPort)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(a.(*v1beta1.NetworkPolicyPort), b.(*networking.NetworkPolicyPort), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyPort)(nil), (*v1beta1.NetworkPolicyPort)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(a.(*networking.NetworkPolicyPort), b.(*v1beta1.NetworkPolicyPort), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicySpec)(nil), (*networking.NetworkPolicySpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicySpec_To_networking_NetworkPolicySpec(a.(*v1beta1.NetworkPolicySpec), b.(*networking.NetworkPolicySpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicySpec)(nil), (*v1beta1.NetworkPolicySpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec(a.(*networking.NetworkPolicySpec), b.(*v1beta1.NetworkPolicySpec), scope) }); err != nil { return err } @@ -657,6 +748,26 @@ func RegisterConversions(s *runtime.Scheme) error { return nil } +func autoConvert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in *v1beta1.AllowedCSIDriver, out *policy.AllowedCSIDriver, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +// Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver is an autogenerated conversion function. +func Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in *v1beta1.AllowedCSIDriver, out *policy.AllowedCSIDriver, s conversion.Scope) error { + return autoConvert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in, out, s) +} + +func autoConvert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in *policy.AllowedCSIDriver, out *v1beta1.AllowedCSIDriver, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +// Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver is an autogenerated conversion function. +func Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in *policy.AllowedCSIDriver, out *v1beta1.AllowedCSIDriver, s conversion.Scope) error { + return autoConvert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in, out, s) +} + func autoConvert_v1beta1_AllowedFlexVolume_To_policy_AllowedFlexVolume(in *v1beta1.AllowedFlexVolume, out *policy.AllowedFlexVolume, s conversion.Scope) error { out.Driver = in.Driver return nil @@ -1169,50 +1280,50 @@ func Convert_policy_FSGroupStrategyOptions_To_v1beta1_FSGroupStrategyOptions(in return autoConvert_policy_FSGroupStrategyOptions_To_v1beta1_FSGroupStrategyOptions(in, out, s) } -func autoConvert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *extensions.HTTPIngressPath, s conversion.Scope) error { +func autoConvert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *networking.HTTPIngressPath, s conversion.Scope) error { out.Path = in.Path - if err := Convert_v1beta1_IngressBackend_To_extensions_IngressBackend(&in.Backend, &out.Backend, s); err != nil { + if err := Convert_v1beta1_IngressBackend_To_networking_IngressBackend(&in.Backend, &out.Backend, s); err != nil { return err } return nil } -// Convert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath is an autogenerated conversion function. -func Convert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *extensions.HTTPIngressPath, s conversion.Scope) error { - return autoConvert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath(in, out, s) +// Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath is an autogenerated conversion function. +func Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *networking.HTTPIngressPath, s conversion.Scope) error { + return autoConvert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in, out, s) } -func autoConvert_extensions_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *extensions.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { +func autoConvert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *networking.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { out.Path = in.Path - if err := Convert_extensions_IngressBackend_To_v1beta1_IngressBackend(&in.Backend, &out.Backend, s); err != nil { + if err := Convert_networking_IngressBackend_To_v1beta1_IngressBackend(&in.Backend, &out.Backend, s); err != nil { return err } return nil } -// Convert_extensions_HTTPIngressPath_To_v1beta1_HTTPIngressPath is an autogenerated conversion function. -func Convert_extensions_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *extensions.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { - return autoConvert_extensions_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in, out, s) +// Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath is an autogenerated conversion function. +func Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *networking.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { + return autoConvert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in, out, s) } -func autoConvert_v1beta1_HTTPIngressRuleValue_To_extensions_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *extensions.HTTPIngressRuleValue, s conversion.Scope) error { - out.Paths = *(*[]extensions.HTTPIngressPath)(unsafe.Pointer(&in.Paths)) +func autoConvert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *networking.HTTPIngressRuleValue, s conversion.Scope) error { + out.Paths = *(*[]networking.HTTPIngressPath)(unsafe.Pointer(&in.Paths)) return nil } -// Convert_v1beta1_HTTPIngressRuleValue_To_extensions_HTTPIngressRuleValue is an autogenerated conversion function. -func Convert_v1beta1_HTTPIngressRuleValue_To_extensions_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *extensions.HTTPIngressRuleValue, s conversion.Scope) error { - return autoConvert_v1beta1_HTTPIngressRuleValue_To_extensions_HTTPIngressRuleValue(in, out, s) +// Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue is an autogenerated conversion function. +func Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *networking.HTTPIngressRuleValue, s conversion.Scope) error { + return autoConvert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in, out, s) } -func autoConvert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *extensions.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { +func autoConvert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *networking.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { out.Paths = *(*[]v1beta1.HTTPIngressPath)(unsafe.Pointer(&in.Paths)) return nil } -// Convert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue is an autogenerated conversion function. -func Convert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *extensions.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { - return autoConvert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in, out, s) +// Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue is an autogenerated conversion function. +func Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *networking.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { + return autoConvert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in, out, s) } func autoConvert_v1beta1_HostPortRange_To_policy_HostPortRange(in *v1beta1.HostPortRange, out *policy.HostPortRange, s conversion.Scope) error { @@ -1259,153 +1370,165 @@ func Convert_policy_IDRange_To_v1beta1_IDRange(in *policy.IDRange, out *v1beta1. return autoConvert_policy_IDRange_To_v1beta1_IDRange(in, out, s) } -func autoConvert_v1beta1_Ingress_To_extensions_Ingress(in *v1beta1.Ingress, out *extensions.Ingress, s conversion.Scope) error { +func autoConvert_v1beta1_IPBlock_To_networking_IPBlock(in *v1beta1.IPBlock, out *networking.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + out.Except = *(*[]string)(unsafe.Pointer(&in.Except)) + return nil +} + +func autoConvert_networking_IPBlock_To_v1beta1_IPBlock(in *networking.IPBlock, out *v1beta1.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + out.Except = *(*[]string)(unsafe.Pointer(&in.Except)) + return nil +} + +func autoConvert_v1beta1_Ingress_To_networking_Ingress(in *v1beta1.Ingress, out *networking.Ingress, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1beta1_IngressSpec_To_extensions_IngressSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1beta1_IngressSpec_To_networking_IngressSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_v1beta1_IngressStatus_To_extensions_IngressStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_v1beta1_IngressStatus_To_networking_IngressStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_v1beta1_Ingress_To_extensions_Ingress is an autogenerated conversion function. -func Convert_v1beta1_Ingress_To_extensions_Ingress(in *v1beta1.Ingress, out *extensions.Ingress, s conversion.Scope) error { - return autoConvert_v1beta1_Ingress_To_extensions_Ingress(in, out, s) +// Convert_v1beta1_Ingress_To_networking_Ingress is an autogenerated conversion function. +func Convert_v1beta1_Ingress_To_networking_Ingress(in *v1beta1.Ingress, out *networking.Ingress, s conversion.Scope) error { + return autoConvert_v1beta1_Ingress_To_networking_Ingress(in, out, s) } -func autoConvert_extensions_Ingress_To_v1beta1_Ingress(in *extensions.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { +func autoConvert_networking_Ingress_To_v1beta1_Ingress(in *networking.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_extensions_IngressSpec_To_v1beta1_IngressSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_networking_IngressSpec_To_v1beta1_IngressSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_extensions_IngressStatus_To_v1beta1_IngressStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_networking_IngressStatus_To_v1beta1_IngressStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_extensions_Ingress_To_v1beta1_Ingress is an autogenerated conversion function. -func Convert_extensions_Ingress_To_v1beta1_Ingress(in *extensions.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { - return autoConvert_extensions_Ingress_To_v1beta1_Ingress(in, out, s) +// Convert_networking_Ingress_To_v1beta1_Ingress is an autogenerated conversion function. +func Convert_networking_Ingress_To_v1beta1_Ingress(in *networking.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { + return autoConvert_networking_Ingress_To_v1beta1_Ingress(in, out, s) } -func autoConvert_v1beta1_IngressBackend_To_extensions_IngressBackend(in *v1beta1.IngressBackend, out *extensions.IngressBackend, s conversion.Scope) error { +func autoConvert_v1beta1_IngressBackend_To_networking_IngressBackend(in *v1beta1.IngressBackend, out *networking.IngressBackend, s conversion.Scope) error { out.ServiceName = in.ServiceName out.ServicePort = in.ServicePort return nil } -// Convert_v1beta1_IngressBackend_To_extensions_IngressBackend is an autogenerated conversion function. -func Convert_v1beta1_IngressBackend_To_extensions_IngressBackend(in *v1beta1.IngressBackend, out *extensions.IngressBackend, s conversion.Scope) error { - return autoConvert_v1beta1_IngressBackend_To_extensions_IngressBackend(in, out, s) +// Convert_v1beta1_IngressBackend_To_networking_IngressBackend is an autogenerated conversion function. +func Convert_v1beta1_IngressBackend_To_networking_IngressBackend(in *v1beta1.IngressBackend, out *networking.IngressBackend, s conversion.Scope) error { + return autoConvert_v1beta1_IngressBackend_To_networking_IngressBackend(in, out, s) } -func autoConvert_extensions_IngressBackend_To_v1beta1_IngressBackend(in *extensions.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { +func autoConvert_networking_IngressBackend_To_v1beta1_IngressBackend(in *networking.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { out.ServiceName = in.ServiceName out.ServicePort = in.ServicePort return nil } -// Convert_extensions_IngressBackend_To_v1beta1_IngressBackend is an autogenerated conversion function. -func Convert_extensions_IngressBackend_To_v1beta1_IngressBackend(in *extensions.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { - return autoConvert_extensions_IngressBackend_To_v1beta1_IngressBackend(in, out, s) +// Convert_networking_IngressBackend_To_v1beta1_IngressBackend is an autogenerated conversion function. +func Convert_networking_IngressBackend_To_v1beta1_IngressBackend(in *networking.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { + return autoConvert_networking_IngressBackend_To_v1beta1_IngressBackend(in, out, s) } -func autoConvert_v1beta1_IngressList_To_extensions_IngressList(in *v1beta1.IngressList, out *extensions.IngressList, s conversion.Scope) error { +func autoConvert_v1beta1_IngressList_To_networking_IngressList(in *v1beta1.IngressList, out *networking.IngressList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]extensions.Ingress)(unsafe.Pointer(&in.Items)) + out.Items = *(*[]networking.Ingress)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1beta1_IngressList_To_extensions_IngressList is an autogenerated conversion function. -func Convert_v1beta1_IngressList_To_extensions_IngressList(in *v1beta1.IngressList, out *extensions.IngressList, s conversion.Scope) error { - return autoConvert_v1beta1_IngressList_To_extensions_IngressList(in, out, s) +// Convert_v1beta1_IngressList_To_networking_IngressList is an autogenerated conversion function. +func Convert_v1beta1_IngressList_To_networking_IngressList(in *v1beta1.IngressList, out *networking.IngressList, s conversion.Scope) error { + return autoConvert_v1beta1_IngressList_To_networking_IngressList(in, out, s) } -func autoConvert_extensions_IngressList_To_v1beta1_IngressList(in *extensions.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { +func autoConvert_networking_IngressList_To_v1beta1_IngressList(in *networking.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { out.ListMeta = in.ListMeta out.Items = *(*[]v1beta1.Ingress)(unsafe.Pointer(&in.Items)) return nil } -// Convert_extensions_IngressList_To_v1beta1_IngressList is an autogenerated conversion function. -func Convert_extensions_IngressList_To_v1beta1_IngressList(in *extensions.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { - return autoConvert_extensions_IngressList_To_v1beta1_IngressList(in, out, s) +// Convert_networking_IngressList_To_v1beta1_IngressList is an autogenerated conversion function. +func Convert_networking_IngressList_To_v1beta1_IngressList(in *networking.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { + return autoConvert_networking_IngressList_To_v1beta1_IngressList(in, out, s) } -func autoConvert_v1beta1_IngressRule_To_extensions_IngressRule(in *v1beta1.IngressRule, out *extensions.IngressRule, s conversion.Scope) error { +func autoConvert_v1beta1_IngressRule_To_networking_IngressRule(in *v1beta1.IngressRule, out *networking.IngressRule, s conversion.Scope) error { out.Host = in.Host - if err := Convert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { + if err := Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { return err } return nil } -// Convert_v1beta1_IngressRule_To_extensions_IngressRule is an autogenerated conversion function. -func Convert_v1beta1_IngressRule_To_extensions_IngressRule(in *v1beta1.IngressRule, out *extensions.IngressRule, s conversion.Scope) error { - return autoConvert_v1beta1_IngressRule_To_extensions_IngressRule(in, out, s) +// Convert_v1beta1_IngressRule_To_networking_IngressRule is an autogenerated conversion function. +func Convert_v1beta1_IngressRule_To_networking_IngressRule(in *v1beta1.IngressRule, out *networking.IngressRule, s conversion.Scope) error { + return autoConvert_v1beta1_IngressRule_To_networking_IngressRule(in, out, s) } -func autoConvert_extensions_IngressRule_To_v1beta1_IngressRule(in *extensions.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { +func autoConvert_networking_IngressRule_To_v1beta1_IngressRule(in *networking.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { out.Host = in.Host - if err := Convert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { + if err := Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { return err } return nil } -// Convert_extensions_IngressRule_To_v1beta1_IngressRule is an autogenerated conversion function. -func Convert_extensions_IngressRule_To_v1beta1_IngressRule(in *extensions.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { - return autoConvert_extensions_IngressRule_To_v1beta1_IngressRule(in, out, s) +// Convert_networking_IngressRule_To_v1beta1_IngressRule is an autogenerated conversion function. +func Convert_networking_IngressRule_To_v1beta1_IngressRule(in *networking.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { + return autoConvert_networking_IngressRule_To_v1beta1_IngressRule(in, out, s) } -func autoConvert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue(in *v1beta1.IngressRuleValue, out *extensions.IngressRuleValue, s conversion.Scope) error { - out.HTTP = (*extensions.HTTPIngressRuleValue)(unsafe.Pointer(in.HTTP)) +func autoConvert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in *v1beta1.IngressRuleValue, out *networking.IngressRuleValue, s conversion.Scope) error { + out.HTTP = (*networking.HTTPIngressRuleValue)(unsafe.Pointer(in.HTTP)) return nil } -// Convert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue is an autogenerated conversion function. -func Convert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue(in *v1beta1.IngressRuleValue, out *extensions.IngressRuleValue, s conversion.Scope) error { - return autoConvert_v1beta1_IngressRuleValue_To_extensions_IngressRuleValue(in, out, s) +// Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue is an autogenerated conversion function. +func Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in *v1beta1.IngressRuleValue, out *networking.IngressRuleValue, s conversion.Scope) error { + return autoConvert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in, out, s) } -func autoConvert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue(in *extensions.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { +func autoConvert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in *networking.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { out.HTTP = (*v1beta1.HTTPIngressRuleValue)(unsafe.Pointer(in.HTTP)) return nil } -// Convert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue is an autogenerated conversion function. -func Convert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue(in *extensions.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { - return autoConvert_extensions_IngressRuleValue_To_v1beta1_IngressRuleValue(in, out, s) +// Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue is an autogenerated conversion function. +func Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in *networking.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { + return autoConvert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in, out, s) } -func autoConvert_v1beta1_IngressSpec_To_extensions_IngressSpec(in *v1beta1.IngressSpec, out *extensions.IngressSpec, s conversion.Scope) error { - out.Backend = (*extensions.IngressBackend)(unsafe.Pointer(in.Backend)) - out.TLS = *(*[]extensions.IngressTLS)(unsafe.Pointer(&in.TLS)) - out.Rules = *(*[]extensions.IngressRule)(unsafe.Pointer(&in.Rules)) +func autoConvert_v1beta1_IngressSpec_To_networking_IngressSpec(in *v1beta1.IngressSpec, out *networking.IngressSpec, s conversion.Scope) error { + out.Backend = (*networking.IngressBackend)(unsafe.Pointer(in.Backend)) + out.TLS = *(*[]networking.IngressTLS)(unsafe.Pointer(&in.TLS)) + out.Rules = *(*[]networking.IngressRule)(unsafe.Pointer(&in.Rules)) return nil } -// Convert_v1beta1_IngressSpec_To_extensions_IngressSpec is an autogenerated conversion function. -func Convert_v1beta1_IngressSpec_To_extensions_IngressSpec(in *v1beta1.IngressSpec, out *extensions.IngressSpec, s conversion.Scope) error { - return autoConvert_v1beta1_IngressSpec_To_extensions_IngressSpec(in, out, s) +// Convert_v1beta1_IngressSpec_To_networking_IngressSpec is an autogenerated conversion function. +func Convert_v1beta1_IngressSpec_To_networking_IngressSpec(in *v1beta1.IngressSpec, out *networking.IngressSpec, s conversion.Scope) error { + return autoConvert_v1beta1_IngressSpec_To_networking_IngressSpec(in, out, s) } -func autoConvert_extensions_IngressSpec_To_v1beta1_IngressSpec(in *extensions.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { +func autoConvert_networking_IngressSpec_To_v1beta1_IngressSpec(in *networking.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { out.Backend = (*v1beta1.IngressBackend)(unsafe.Pointer(in.Backend)) out.TLS = *(*[]v1beta1.IngressTLS)(unsafe.Pointer(&in.TLS)) out.Rules = *(*[]v1beta1.IngressRule)(unsafe.Pointer(&in.Rules)) return nil } -// Convert_extensions_IngressSpec_To_v1beta1_IngressSpec is an autogenerated conversion function. -func Convert_extensions_IngressSpec_To_v1beta1_IngressSpec(in *extensions.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { - return autoConvert_extensions_IngressSpec_To_v1beta1_IngressSpec(in, out, s) +// Convert_networking_IngressSpec_To_v1beta1_IngressSpec is an autogenerated conversion function. +func Convert_networking_IngressSpec_To_v1beta1_IngressSpec(in *networking.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { + return autoConvert_networking_IngressSpec_To_v1beta1_IngressSpec(in, out, s) } -func autoConvert_v1beta1_IngressStatus_To_extensions_IngressStatus(in *v1beta1.IngressStatus, out *extensions.IngressStatus, s conversion.Scope) error { +func autoConvert_v1beta1_IngressStatus_To_networking_IngressStatus(in *v1beta1.IngressStatus, out *networking.IngressStatus, s conversion.Scope) error { // TODO: Inefficient conversion - can we improve it? if err := s.Convert(&in.LoadBalancer, &out.LoadBalancer, 0); err != nil { return err @@ -1413,12 +1536,12 @@ func autoConvert_v1beta1_IngressStatus_To_extensions_IngressStatus(in *v1beta1.I return nil } -// Convert_v1beta1_IngressStatus_To_extensions_IngressStatus is an autogenerated conversion function. -func Convert_v1beta1_IngressStatus_To_extensions_IngressStatus(in *v1beta1.IngressStatus, out *extensions.IngressStatus, s conversion.Scope) error { - return autoConvert_v1beta1_IngressStatus_To_extensions_IngressStatus(in, out, s) +// Convert_v1beta1_IngressStatus_To_networking_IngressStatus is an autogenerated conversion function. +func Convert_v1beta1_IngressStatus_To_networking_IngressStatus(in *v1beta1.IngressStatus, out *networking.IngressStatus, s conversion.Scope) error { + return autoConvert_v1beta1_IngressStatus_To_networking_IngressStatus(in, out, s) } -func autoConvert_extensions_IngressStatus_To_v1beta1_IngressStatus(in *extensions.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { +func autoConvert_networking_IngressStatus_To_v1beta1_IngressStatus(in *networking.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { // TODO: Inefficient conversion - can we improve it? if err := s.Convert(&in.LoadBalancer, &out.LoadBalancer, 0); err != nil { return err @@ -1426,31 +1549,281 @@ func autoConvert_extensions_IngressStatus_To_v1beta1_IngressStatus(in *extension return nil } -// Convert_extensions_IngressStatus_To_v1beta1_IngressStatus is an autogenerated conversion function. -func Convert_extensions_IngressStatus_To_v1beta1_IngressStatus(in *extensions.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { - return autoConvert_extensions_IngressStatus_To_v1beta1_IngressStatus(in, out, s) +// Convert_networking_IngressStatus_To_v1beta1_IngressStatus is an autogenerated conversion function. +func Convert_networking_IngressStatus_To_v1beta1_IngressStatus(in *networking.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { + return autoConvert_networking_IngressStatus_To_v1beta1_IngressStatus(in, out, s) } -func autoConvert_v1beta1_IngressTLS_To_extensions_IngressTLS(in *v1beta1.IngressTLS, out *extensions.IngressTLS, s conversion.Scope) error { +func autoConvert_v1beta1_IngressTLS_To_networking_IngressTLS(in *v1beta1.IngressTLS, out *networking.IngressTLS, s conversion.Scope) error { out.Hosts = *(*[]string)(unsafe.Pointer(&in.Hosts)) out.SecretName = in.SecretName return nil } -// Convert_v1beta1_IngressTLS_To_extensions_IngressTLS is an autogenerated conversion function. -func Convert_v1beta1_IngressTLS_To_extensions_IngressTLS(in *v1beta1.IngressTLS, out *extensions.IngressTLS, s conversion.Scope) error { - return autoConvert_v1beta1_IngressTLS_To_extensions_IngressTLS(in, out, s) +// Convert_v1beta1_IngressTLS_To_networking_IngressTLS is an autogenerated conversion function. +func Convert_v1beta1_IngressTLS_To_networking_IngressTLS(in *v1beta1.IngressTLS, out *networking.IngressTLS, s conversion.Scope) error { + return autoConvert_v1beta1_IngressTLS_To_networking_IngressTLS(in, out, s) } -func autoConvert_extensions_IngressTLS_To_v1beta1_IngressTLS(in *extensions.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { +func autoConvert_networking_IngressTLS_To_v1beta1_IngressTLS(in *networking.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { out.Hosts = *(*[]string)(unsafe.Pointer(&in.Hosts)) out.SecretName = in.SecretName return nil } -// Convert_extensions_IngressTLS_To_v1beta1_IngressTLS is an autogenerated conversion function. -func Convert_extensions_IngressTLS_To_v1beta1_IngressTLS(in *extensions.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { - return autoConvert_extensions_IngressTLS_To_v1beta1_IngressTLS(in, out, s) +// Convert_networking_IngressTLS_To_v1beta1_IngressTLS is an autogenerated conversion function. +func Convert_networking_IngressTLS_To_v1beta1_IngressTLS(in *networking.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { + return autoConvert_networking_IngressTLS_To_v1beta1_IngressTLS(in, out, s) +} + +func autoConvert_v1beta1_NetworkPolicy_To_networking_NetworkPolicy(in *v1beta1.NetworkPolicy, out *networking.NetworkPolicy, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_NetworkPolicySpec_To_networking_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func autoConvert_networking_NetworkPolicy_To_v1beta1_NetworkPolicy(in *networking.NetworkPolicy, out *v1beta1.NetworkPolicy, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func autoConvert_v1beta1_NetworkPolicyEgressRule_To_networking_NetworkPolicyEgressRule(in *v1beta1.NetworkPolicyEgressRule, out *networking.NetworkPolicyEgressRule, s conversion.Scope) error { + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]networking.NetworkPolicyPort, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.To != nil { + in, out := &in.To, &out.To + *out = make([]networking.NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.To = nil + } + return nil +} + +func autoConvert_networking_NetworkPolicyEgressRule_To_v1beta1_NetworkPolicyEgressRule(in *networking.NetworkPolicyEgressRule, out *v1beta1.NetworkPolicyEgressRule, s conversion.Scope) error { + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]v1beta1.NetworkPolicyPort, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.To != nil { + in, out := &in.To, &out.To + *out = make([]v1beta1.NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.To = nil + } + return nil +} + +func autoConvert_v1beta1_NetworkPolicyIngressRule_To_networking_NetworkPolicyIngressRule(in *v1beta1.NetworkPolicyIngressRule, out *networking.NetworkPolicyIngressRule, s conversion.Scope) error { + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]networking.NetworkPolicyPort, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = make([]networking.NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.From = nil + } + return nil +} + +func autoConvert_networking_NetworkPolicyIngressRule_To_v1beta1_NetworkPolicyIngressRule(in *networking.NetworkPolicyIngressRule, out *v1beta1.NetworkPolicyIngressRule, s conversion.Scope) error { + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]v1beta1.NetworkPolicyPort, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = make([]v1beta1.NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.From = nil + } + return nil +} + +func autoConvert_v1beta1_NetworkPolicyList_To_networking_NetworkPolicyList(in *v1beta1.NetworkPolicyList, out *networking.NetworkPolicyList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]networking.NetworkPolicy, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicy_To_networking_NetworkPolicy(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func autoConvert_networking_NetworkPolicyList_To_v1beta1_NetworkPolicyList(in *networking.NetworkPolicyList, out *v1beta1.NetworkPolicyList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]v1beta1.NetworkPolicy, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicy_To_v1beta1_NetworkPolicy(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func autoConvert_v1beta1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(in *v1beta1.NetworkPolicyPeer, out *networking.NetworkPolicyPeer, s conversion.Scope) error { + out.PodSelector = (*metav1.LabelSelector)(unsafe.Pointer(in.PodSelector)) + out.NamespaceSelector = (*metav1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) + if in.IPBlock != nil { + in, out := &in.IPBlock, &out.IPBlock + *out = new(networking.IPBlock) + if err := Convert_v1beta1_IPBlock_To_networking_IPBlock(*in, *out, s); err != nil { + return err + } + } else { + out.IPBlock = nil + } + return nil +} + +func autoConvert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(in *networking.NetworkPolicyPeer, out *v1beta1.NetworkPolicyPeer, s conversion.Scope) error { + out.PodSelector = (*metav1.LabelSelector)(unsafe.Pointer(in.PodSelector)) + out.NamespaceSelector = (*metav1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) + if in.IPBlock != nil { + in, out := &in.IPBlock, &out.IPBlock + *out = new(v1beta1.IPBlock) + if err := Convert_networking_IPBlock_To_v1beta1_IPBlock(*in, *out, s); err != nil { + return err + } + } else { + out.IPBlock = nil + } + return nil +} + +func autoConvert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1beta1.NetworkPolicyPort, out *networking.NetworkPolicyPort, s conversion.Scope) error { + out.Protocol = (*core.Protocol)(unsafe.Pointer(in.Protocol)) + out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + return nil +} + +func autoConvert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(in *networking.NetworkPolicyPort, out *v1beta1.NetworkPolicyPort, s conversion.Scope) error { + out.Protocol = (*v1.Protocol)(unsafe.Pointer(in.Protocol)) + out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + return nil +} + +func autoConvert_v1beta1_NetworkPolicySpec_To_networking_NetworkPolicySpec(in *v1beta1.NetworkPolicySpec, out *networking.NetworkPolicySpec, s conversion.Scope) error { + out.PodSelector = in.PodSelector + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]networking.NetworkPolicyIngressRule, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyIngressRule_To_networking_NetworkPolicyIngressRule(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + if in.Egress != nil { + in, out := &in.Egress, &out.Egress + *out = make([]networking.NetworkPolicyEgressRule, len(*in)) + for i := range *in { + if err := Convert_v1beta1_NetworkPolicyEgressRule_To_networking_NetworkPolicyEgressRule(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Egress = nil + } + out.PolicyTypes = *(*[]networking.PolicyType)(unsafe.Pointer(&in.PolicyTypes)) + return nil +} + +func autoConvert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec(in *networking.NetworkPolicySpec, out *v1beta1.NetworkPolicySpec, s conversion.Scope) error { + out.PodSelector = in.PodSelector + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]v1beta1.NetworkPolicyIngressRule, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyIngressRule_To_v1beta1_NetworkPolicyIngressRule(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + if in.Egress != nil { + in, out := &in.Egress, &out.Egress + *out = make([]v1beta1.NetworkPolicyEgressRule, len(*in)) + for i := range *in { + if err := Convert_networking_NetworkPolicyEgressRule_To_v1beta1_NetworkPolicyEgressRule(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Egress = nil + } + out.PolicyTypes = *(*[]v1beta1.PolicyType)(unsafe.Pointer(&in.PolicyTypes)) + return nil } func autoConvert_v1beta1_PodSecurityPolicy_To_policy_PodSecurityPolicy(in *v1beta1.PodSecurityPolicy, out *policy.PodSecurityPolicy, s conversion.Scope) error { @@ -1551,6 +1924,7 @@ func autoConvert_v1beta1_PodSecurityPolicySpec_To_policy_PodSecurityPolicySpec(i } out.AllowedHostPaths = *(*[]policy.AllowedHostPath)(unsafe.Pointer(&in.AllowedHostPaths)) out.AllowedFlexVolumes = *(*[]policy.AllowedFlexVolume)(unsafe.Pointer(&in.AllowedFlexVolumes)) + out.AllowedCSIDrivers = *(*[]policy.AllowedCSIDriver)(unsafe.Pointer(&in.AllowedCSIDrivers)) out.AllowedUnsafeSysctls = *(*[]string)(unsafe.Pointer(&in.AllowedUnsafeSysctls)) out.ForbiddenSysctls = *(*[]string)(unsafe.Pointer(&in.ForbiddenSysctls)) out.AllowedProcMountTypes = *(*[]core.ProcMountType)(unsafe.Pointer(&in.AllowedProcMountTypes)) @@ -1592,6 +1966,7 @@ func autoConvert_policy_PodSecurityPolicySpec_To_v1beta1_PodSecurityPolicySpec(i } out.AllowedHostPaths = *(*[]v1beta1.AllowedHostPath)(unsafe.Pointer(&in.AllowedHostPaths)) out.AllowedFlexVolumes = *(*[]v1beta1.AllowedFlexVolume)(unsafe.Pointer(&in.AllowedFlexVolumes)) + out.AllowedCSIDrivers = *(*[]v1beta1.AllowedCSIDriver)(unsafe.Pointer(&in.AllowedCSIDrivers)) out.AllowedUnsafeSysctls = *(*[]string)(unsafe.Pointer(&in.AllowedUnsafeSysctls)) out.ForbiddenSysctls = *(*[]string)(unsafe.Pointer(&in.ForbiddenSysctls)) out.AllowedProcMountTypes = *(*[]v1.ProcMountType)(unsafe.Pointer(&in.AllowedProcMountTypes)) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.defaults.go index 0fa4c321c29..ce23c6b801c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.defaults.go @@ -138,6 +138,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta1.DaemonSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -180,6 +183,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta1.DaemonSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -285,6 +291,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -327,6 +336,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } @@ -454,6 +466,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta1.ReplicaSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } for i := range in.Spec.Template.Spec.Containers { a := &in.Spec.Template.Spec.Containers[i] @@ -496,6 +511,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta1.ReplicaSet) { } } } + if a.SecurityContext != nil { + v1.SetDefaults_SecurityContext(a.SecurityContext) + } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go deleted file mode 100644 index 0ada34ce606..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go +++ /dev/null @@ -1,172 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package validation - -import ( - "net" - "regexp" - "strings" - - apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" - "k8s.io/kubernetes/pkg/apis/extensions" -) - -// ValidateIngress tests if required fields in the Ingress are set. -func ValidateIngress(ingress *extensions.Ingress) field.ErrorList { - allErrs := apivalidation.ValidateObjectMeta(&ingress.ObjectMeta, true, ValidateIngressName, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateIngressSpec(&ingress.Spec, field.NewPath("spec"))...) - return allErrs -} - -// ValidateIngressName validates that the given name can be used as an Ingress name. -var ValidateIngressName = apimachineryvalidation.NameIsDNSSubdomain - -func validateIngressTLS(spec *extensions.IngressSpec, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - // TODO: Perform a more thorough validation of spec.TLS.Hosts that takes - // the wildcard spec from RFC 6125 into account. - for _, itls := range spec.TLS { - for i, host := range itls.Hosts { - if strings.Contains(host, "*") { - for _, msg := range validation.IsWildcardDNS1123Subdomain(host) { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) - } - continue - } - for _, msg := range validation.IsDNS1123Subdomain(host) { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) - } - } - } - - return allErrs -} - -// ValidateIngressSpec tests if required fields in the IngressSpec are set. -func ValidateIngressSpec(spec *extensions.IngressSpec, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - // TODO: Is a default backend mandatory? - if spec.Backend != nil { - allErrs = append(allErrs, validateIngressBackend(spec.Backend, fldPath.Child("backend"))...) - } else if len(spec.Rules) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath, spec.Rules, "either `backend` or `rules` must be specified")) - } - if len(spec.Rules) > 0 { - allErrs = append(allErrs, validateIngressRules(spec.Rules, fldPath.Child("rules"))...) - } - if len(spec.TLS) > 0 { - allErrs = append(allErrs, validateIngressTLS(spec, fldPath.Child("tls"))...) - } - return allErrs -} - -// ValidateIngressUpdate tests if required fields in the Ingress are set. -func ValidateIngressUpdate(ingress, oldIngress *extensions.Ingress) field.ErrorList { - allErrs := apivalidation.ValidateObjectMetaUpdate(&ingress.ObjectMeta, &oldIngress.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateIngressSpec(&ingress.Spec, field.NewPath("spec"))...) - return allErrs -} - -// ValidateIngressStatusUpdate tests if required fields in the Ingress are set when updating status. -func ValidateIngressStatusUpdate(ingress, oldIngress *extensions.Ingress) field.ErrorList { - allErrs := apivalidation.ValidateObjectMetaUpdate(&ingress.ObjectMeta, &oldIngress.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, apivalidation.ValidateLoadBalancerStatus(&ingress.Status.LoadBalancer, field.NewPath("status", "loadBalancer"))...) - return allErrs -} - -func validateIngressRules(ingressRules []extensions.IngressRule, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if len(ingressRules) == 0 { - return append(allErrs, field.Required(fldPath, "")) - } - for i, ih := range ingressRules { - if len(ih.Host) > 0 { - if isIP := (net.ParseIP(ih.Host) != nil); isIP { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, "must be a DNS name, not an IP address")) - } - // TODO: Ports and ips are allowed in the host part of a url - // according to RFC 3986, consider allowing them. - if strings.Contains(ih.Host, "*") { - for _, msg := range validation.IsWildcardDNS1123Subdomain(ih.Host) { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) - } - continue - } - for _, msg := range validation.IsDNS1123Subdomain(ih.Host) { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) - } - } - allErrs = append(allErrs, validateIngressRuleValue(&ih.IngressRuleValue, fldPath.Index(0))...) - } - return allErrs -} - -func validateIngressRuleValue(ingressRule *extensions.IngressRuleValue, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if ingressRule.HTTP != nil { - allErrs = append(allErrs, validateHTTPIngressRuleValue(ingressRule.HTTP, fldPath.Child("http"))...) - } - return allErrs -} - -func validateHTTPIngressRuleValue(httpIngressRuleValue *extensions.HTTPIngressRuleValue, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if len(httpIngressRuleValue.Paths) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("paths"), "")) - } - for i, rule := range httpIngressRuleValue.Paths { - if len(rule.Path) > 0 { - if !strings.HasPrefix(rule.Path, "/") { - allErrs = append(allErrs, field.Invalid(fldPath.Child("paths").Index(i).Child("path"), rule.Path, "must be an absolute path")) - } - // TODO: More draconian path regex validation. - // Path must be a valid regex. This is the basic requirement. - // In addition to this any characters not allowed in a path per - // RFC 3986 section-3.3 cannot appear as a literal in the regex. - // Consider the example: http://host/valid?#bar, everything after - // the last '/' is a valid regex that matches valid#bar, which - // isn't a valid path, because the path terminates at the first ? - // or #. A more sophisticated form of validation would detect that - // the user is confusing url regexes with path regexes. - _, err := regexp.CompilePOSIX(rule.Path) - if err != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("paths").Index(i).Child("path"), rule.Path, "must be a valid regex")) - } - } - allErrs = append(allErrs, validateIngressBackend(&rule.Backend, fldPath.Child("backend"))...) - } - return allErrs -} - -// validateIngressBackend tests if a given backend is valid. -func validateIngressBackend(backend *extensions.IngressBackend, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - // All backends must reference a single local service by name, and a single service port by name or number. - if len(backend.ServiceName) == 0 { - return append(allErrs, field.Required(fldPath.Child("serviceName"), "")) - } else { - for _, msg := range apivalidation.ValidateServiceName(backend.ServiceName, false) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("serviceName"), backend.ServiceName, msg)) - } - } - allErrs = append(allErrs, apivalidation.ValidatePortNumOrName(backend.ServicePort, fldPath.Child("servicePort"))...) - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go index 390f4328079..56c73e957d6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go @@ -24,233 +24,6 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HTTPIngressPath) DeepCopyInto(out *HTTPIngressPath) { - *out = *in - out.Backend = in.Backend - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressPath. -func (in *HTTPIngressPath) DeepCopy() *HTTPIngressPath { - if in == nil { - return nil - } - out := new(HTTPIngressPath) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HTTPIngressRuleValue) DeepCopyInto(out *HTTPIngressRuleValue) { - *out = *in - if in.Paths != nil { - in, out := &in.Paths, &out.Paths - *out = make([]HTTPIngressPath, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressRuleValue. -func (in *HTTPIngressRuleValue) DeepCopy() *HTTPIngressRuleValue { - if in == nil { - return nil - } - out := new(HTTPIngressRuleValue) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Ingress) DeepCopyInto(out *Ingress) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. -func (in *Ingress) DeepCopy() *Ingress { - if in == nil { - return nil - } - out := new(Ingress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Ingress) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressBackend) DeepCopyInto(out *IngressBackend) { - *out = *in - out.ServicePort = in.ServicePort - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressBackend. -func (in *IngressBackend) DeepCopy() *IngressBackend { - if in == nil { - return nil - } - out := new(IngressBackend) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressList) DeepCopyInto(out *IngressList) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Ingress, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressList. -func (in *IngressList) DeepCopy() *IngressList { - if in == nil { - return nil - } - out := new(IngressList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IngressList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressRule) DeepCopyInto(out *IngressRule) { - *out = *in - in.IngressRuleValue.DeepCopyInto(&out.IngressRuleValue) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRule. -func (in *IngressRule) DeepCopy() *IngressRule { - if in == nil { - return nil - } - out := new(IngressRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressRuleValue) DeepCopyInto(out *IngressRuleValue) { - *out = *in - if in.HTTP != nil { - in, out := &in.HTTP, &out.HTTP - *out = new(HTTPIngressRuleValue) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRuleValue. -func (in *IngressRuleValue) DeepCopy() *IngressRuleValue { - if in == nil { - return nil - } - out := new(IngressRuleValue) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressSpec) DeepCopyInto(out *IngressSpec) { - *out = *in - if in.Backend != nil { - in, out := &in.Backend, &out.Backend - *out = new(IngressBackend) - **out = **in - } - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = make([]IngressTLS, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]IngressRule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec. -func (in *IngressSpec) DeepCopy() *IngressSpec { - if in == nil { - return nil - } - out := new(IngressSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressStatus) DeepCopyInto(out *IngressStatus) { - *out = *in - in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressStatus. -func (in *IngressStatus) DeepCopy() *IngressStatus { - if in == nil { - return nil - } - out := new(IngressStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressTLS) DeepCopyInto(out *IngressTLS) { - *out = *in - if in.Hosts != nil { - in, out := &in.Hosts, &out.Hosts - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressTLS. -func (in *IngressTLS) DeepCopy() *IngressTLS { - if in == nil { - return nil - } - out := new(IngressTLS) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ReplicationControllerDummy) DeepCopyInto(out *ReplicationControllerDummy) { *out = *in diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/networking/BUILD index 6aff9d449f3..6f54a370091 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/BUILD @@ -37,6 +37,7 @@ filegroup( "//pkg/apis/networking/fuzzer:all-srcs", "//pkg/apis/networking/install:all-srcs", "//pkg/apis/networking/v1:all-srcs", + "//pkg/apis/networking/v1beta1:all-srcs", "//pkg/apis/networking/validation:all-srcs", ], tags = ["automanaged"], diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/networking/OWNERS old mode 100755 new mode 100644 index 0e696c0fbb4..13df36db12e --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/OWNERS @@ -1,5 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - caseydavenport - cmluciano - danwinship - thockin +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/install/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/networking/install/BUILD index a98f3a258d6..1a28edd925d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/install/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/install/BUILD @@ -13,6 +13,7 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/networking:go_default_library", "//pkg/apis/networking/v1:go_default_library", + "//pkg/apis/networking/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/install/install.go index 4cef1acaffc..6863a7f7af6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/install/install.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/apis/networking/v1" + "k8s.io/kubernetes/pkg/apis/networking/v1beta1" ) func init() { @@ -34,5 +35,6 @@ func init() { func Install(scheme *runtime.Scheme) { utilruntime.Must(networking.AddToScheme(scheme)) utilruntime.Must(v1.AddToScheme(scheme)) - utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion)) + utilruntime.Must(v1beta1.AddToScheme(scheme)) + utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion, v1beta1.SchemeGroupVersion)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/register.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/register.go index 4d58a210da2..54b6b0488d6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/register.go @@ -46,6 +46,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &NetworkPolicy{}, &NetworkPolicyList{}, + &Ingress{}, + &IngressList{}, ) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/types.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/types.go index 541b884b58c..43233039d84 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/types.go @@ -78,7 +78,7 @@ type NetworkPolicySpec struct { Egress []NetworkPolicyEgressRule // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -195,3 +195,172 @@ type NetworkPolicyList struct { Items []NetworkPolicy } + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +type Ingress struct { + metav1.TypeMeta + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta + + // Spec is the desired state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Spec IngressSpec + + // Status is the current state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Status IngressStatus +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IngressList is a collection of Ingress. +type IngressList struct { + metav1.TypeMeta + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta + + // Items is the list of Ingress. + Items []Ingress +} + +// IngressSpec describes the Ingress the user wishes to exist. +type IngressSpec struct { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + // +optional + Backend *IngressBackend + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + // +optional + TLS []IngressTLS + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + // +optional + Rules []IngressRule + // TODO: Add the ability to specify load-balancer IP through claims +} + +// IngressTLS describes the transport layer security associated with an Ingress. +type IngressTLS struct { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + // +optional + Hosts []string + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + // +optional + SecretName string + // TODO: Consider specifying different modes of termination, protocols etc. +} + +// IngressStatus describe the current state of the Ingress. +type IngressStatus struct { + // LoadBalancer contains the current status of the load-balancer. + // +optional + LoadBalancer api.LoadBalancerStatus +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +type IngressRule struct { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + // +optional + Host string + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + // +optional + IngressRuleValue +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +type IngressRuleValue struct { + //TODO: + // 1. Consider renaming this resource and the associated rules so they + // aren't tied to Ingress. They can be used to route intra-cluster traffic. + // 2. Consider adding fields for ingress-type specific global options + // usable by a loadbalancer, like http keep-alive. + + // +optional + HTTP *HTTPIngressRuleValue +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +type HTTPIngressRuleValue struct { + // A collection of paths that map requests to backends. + Paths []HTTPIngressPath + // TODO: Consider adding fields for ingress-type specific global + // options usable by a loadbalancer, like http keep-alive. +} + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +type HTTPIngressPath struct { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + // +optional + Path string + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + Backend IngressBackend +} + +// IngressBackend describes all endpoints for a given service and port. +type IngressBackend struct { + // Specifies the name of the referenced service. + ServiceName string + + // Specifies the port of the referenced service. + ServicePort intstr.IntOrString +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/BUILD new file mode 100644 index 00000000000..26162e31ceb --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/BUILD @@ -0,0 +1,35 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "defaults.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/networking/v1beta1", + deps = [ + "//pkg/apis/networking:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/defaults.go new file mode 100644 index 00000000000..e2ef92ce7eb --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/defaults.go @@ -0,0 +1,25 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return RegisterDefaults(scheme) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/doc.go new file mode 100644 index 00000000000..75de95210c3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/networking +// +k8s:conversion-gen-external-types=k8s.io/api/networking/v1beta1 +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/extensions +// +k8s:defaulter-gen=TypeMeta +// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/networking/v1beta1 +// +groupName=networking.k8s.io + +package v1beta1 // import "k8s.io/kubernetes/pkg/apis/networking/v1beta1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/register.go new file mode 100644 index 00000000000..24f55f4ca20 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/register.go @@ -0,0 +1,47 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + networkingv1beta1 "k8s.io/api/networking/v1beta1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "networking.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &networkingv1beta1.SchemeBuilder + + // AddToScheme adds the types of this group into the given scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addDefaultingFuncs) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..11332b39aba --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.conversion.go @@ -0,0 +1,380 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1beta1 + +import ( + unsafe "unsafe" + + v1beta1 "k8s.io/api/networking/v1beta1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + networking "k8s.io/kubernetes/pkg/apis/networking" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressPath)(nil), (*networking.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(a.(*v1beta1.HTTPIngressPath), b.(*networking.HTTPIngressPath), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.HTTPIngressPath)(nil), (*v1beta1.HTTPIngressPath)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(a.(*networking.HTTPIngressPath), b.(*v1beta1.HTTPIngressPath), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.HTTPIngressRuleValue)(nil), (*networking.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(a.(*v1beta1.HTTPIngressRuleValue), b.(*networking.HTTPIngressRuleValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.HTTPIngressRuleValue)(nil), (*v1beta1.HTTPIngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(a.(*networking.HTTPIngressRuleValue), b.(*v1beta1.HTTPIngressRuleValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.Ingress)(nil), (*networking.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Ingress_To_networking_Ingress(a.(*v1beta1.Ingress), b.(*networking.Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.Ingress)(nil), (*v1beta1.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_Ingress_To_v1beta1_Ingress(a.(*networking.Ingress), b.(*v1beta1.Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressBackend)(nil), (*networking.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressBackend_To_networking_IngressBackend(a.(*v1beta1.IngressBackend), b.(*networking.IngressBackend), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressBackend)(nil), (*v1beta1.IngressBackend)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressBackend_To_v1beta1_IngressBackend(a.(*networking.IngressBackend), b.(*v1beta1.IngressBackend), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressList)(nil), (*networking.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressList_To_networking_IngressList(a.(*v1beta1.IngressList), b.(*networking.IngressList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressList)(nil), (*v1beta1.IngressList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressList_To_v1beta1_IngressList(a.(*networking.IngressList), b.(*v1beta1.IngressList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRule)(nil), (*networking.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressRule_To_networking_IngressRule(a.(*v1beta1.IngressRule), b.(*networking.IngressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressRule)(nil), (*v1beta1.IngressRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressRule_To_v1beta1_IngressRule(a.(*networking.IngressRule), b.(*v1beta1.IngressRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressRuleValue)(nil), (*networking.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(a.(*v1beta1.IngressRuleValue), b.(*networking.IngressRuleValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressRuleValue)(nil), (*v1beta1.IngressRuleValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(a.(*networking.IngressRuleValue), b.(*v1beta1.IngressRuleValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressSpec)(nil), (*networking.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressSpec_To_networking_IngressSpec(a.(*v1beta1.IngressSpec), b.(*networking.IngressSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressSpec)(nil), (*v1beta1.IngressSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressSpec_To_v1beta1_IngressSpec(a.(*networking.IngressSpec), b.(*v1beta1.IngressSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressStatus)(nil), (*networking.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressStatus_To_networking_IngressStatus(a.(*v1beta1.IngressStatus), b.(*networking.IngressStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressStatus)(nil), (*v1beta1.IngressStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressStatus_To_v1beta1_IngressStatus(a.(*networking.IngressStatus), b.(*v1beta1.IngressStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.IngressTLS)(nil), (*networking.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressTLS_To_networking_IngressTLS(a.(*v1beta1.IngressTLS), b.(*networking.IngressTLS), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.IngressTLS)(nil), (*v1beta1.IngressTLS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_IngressTLS_To_v1beta1_IngressTLS(a.(*networking.IngressTLS), b.(*v1beta1.IngressTLS), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *networking.HTTPIngressPath, s conversion.Scope) error { + out.Path = in.Path + if err := Convert_v1beta1_IngressBackend_To_networking_IngressBackend(&in.Backend, &out.Backend, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath is an autogenerated conversion function. +func Convert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in *v1beta1.HTTPIngressPath, out *networking.HTTPIngressPath, s conversion.Scope) error { + return autoConvert_v1beta1_HTTPIngressPath_To_networking_HTTPIngressPath(in, out, s) +} + +func autoConvert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *networking.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { + out.Path = in.Path + if err := Convert_networking_IngressBackend_To_v1beta1_IngressBackend(&in.Backend, &out.Backend, s); err != nil { + return err + } + return nil +} + +// Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath is an autogenerated conversion function. +func Convert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in *networking.HTTPIngressPath, out *v1beta1.HTTPIngressPath, s conversion.Scope) error { + return autoConvert_networking_HTTPIngressPath_To_v1beta1_HTTPIngressPath(in, out, s) +} + +func autoConvert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *networking.HTTPIngressRuleValue, s conversion.Scope) error { + out.Paths = *(*[]networking.HTTPIngressPath)(unsafe.Pointer(&in.Paths)) + return nil +} + +// Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue is an autogenerated conversion function. +func Convert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in *v1beta1.HTTPIngressRuleValue, out *networking.HTTPIngressRuleValue, s conversion.Scope) error { + return autoConvert_v1beta1_HTTPIngressRuleValue_To_networking_HTTPIngressRuleValue(in, out, s) +} + +func autoConvert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *networking.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { + out.Paths = *(*[]v1beta1.HTTPIngressPath)(unsafe.Pointer(&in.Paths)) + return nil +} + +// Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue is an autogenerated conversion function. +func Convert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in *networking.HTTPIngressRuleValue, out *v1beta1.HTTPIngressRuleValue, s conversion.Scope) error { + return autoConvert_networking_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue(in, out, s) +} + +func autoConvert_v1beta1_Ingress_To_networking_Ingress(in *v1beta1.Ingress, out *networking.Ingress, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_IngressSpec_To_networking_IngressSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_IngressStatus_To_networking_IngressStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_Ingress_To_networking_Ingress is an autogenerated conversion function. +func Convert_v1beta1_Ingress_To_networking_Ingress(in *v1beta1.Ingress, out *networking.Ingress, s conversion.Scope) error { + return autoConvert_v1beta1_Ingress_To_networking_Ingress(in, out, s) +} + +func autoConvert_networking_Ingress_To_v1beta1_Ingress(in *networking.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_networking_IngressSpec_To_v1beta1_IngressSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_networking_IngressStatus_To_v1beta1_IngressStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_networking_Ingress_To_v1beta1_Ingress is an autogenerated conversion function. +func Convert_networking_Ingress_To_v1beta1_Ingress(in *networking.Ingress, out *v1beta1.Ingress, s conversion.Scope) error { + return autoConvert_networking_Ingress_To_v1beta1_Ingress(in, out, s) +} + +func autoConvert_v1beta1_IngressBackend_To_networking_IngressBackend(in *v1beta1.IngressBackend, out *networking.IngressBackend, s conversion.Scope) error { + out.ServiceName = in.ServiceName + out.ServicePort = in.ServicePort + return nil +} + +// Convert_v1beta1_IngressBackend_To_networking_IngressBackend is an autogenerated conversion function. +func Convert_v1beta1_IngressBackend_To_networking_IngressBackend(in *v1beta1.IngressBackend, out *networking.IngressBackend, s conversion.Scope) error { + return autoConvert_v1beta1_IngressBackend_To_networking_IngressBackend(in, out, s) +} + +func autoConvert_networking_IngressBackend_To_v1beta1_IngressBackend(in *networking.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { + out.ServiceName = in.ServiceName + out.ServicePort = in.ServicePort + return nil +} + +// Convert_networking_IngressBackend_To_v1beta1_IngressBackend is an autogenerated conversion function. +func Convert_networking_IngressBackend_To_v1beta1_IngressBackend(in *networking.IngressBackend, out *v1beta1.IngressBackend, s conversion.Scope) error { + return autoConvert_networking_IngressBackend_To_v1beta1_IngressBackend(in, out, s) +} + +func autoConvert_v1beta1_IngressList_To_networking_IngressList(in *v1beta1.IngressList, out *networking.IngressList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]networking.Ingress)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_IngressList_To_networking_IngressList is an autogenerated conversion function. +func Convert_v1beta1_IngressList_To_networking_IngressList(in *v1beta1.IngressList, out *networking.IngressList, s conversion.Scope) error { + return autoConvert_v1beta1_IngressList_To_networking_IngressList(in, out, s) +} + +func autoConvert_networking_IngressList_To_v1beta1_IngressList(in *networking.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.Ingress)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_networking_IngressList_To_v1beta1_IngressList is an autogenerated conversion function. +func Convert_networking_IngressList_To_v1beta1_IngressList(in *networking.IngressList, out *v1beta1.IngressList, s conversion.Scope) error { + return autoConvert_networking_IngressList_To_v1beta1_IngressList(in, out, s) +} + +func autoConvert_v1beta1_IngressRule_To_networking_IngressRule(in *v1beta1.IngressRule, out *networking.IngressRule, s conversion.Scope) error { + out.Host = in.Host + if err := Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_IngressRule_To_networking_IngressRule is an autogenerated conversion function. +func Convert_v1beta1_IngressRule_To_networking_IngressRule(in *v1beta1.IngressRule, out *networking.IngressRule, s conversion.Scope) error { + return autoConvert_v1beta1_IngressRule_To_networking_IngressRule(in, out, s) +} + +func autoConvert_networking_IngressRule_To_v1beta1_IngressRule(in *networking.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { + out.Host = in.Host + if err := Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, s); err != nil { + return err + } + return nil +} + +// Convert_networking_IngressRule_To_v1beta1_IngressRule is an autogenerated conversion function. +func Convert_networking_IngressRule_To_v1beta1_IngressRule(in *networking.IngressRule, out *v1beta1.IngressRule, s conversion.Scope) error { + return autoConvert_networking_IngressRule_To_v1beta1_IngressRule(in, out, s) +} + +func autoConvert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in *v1beta1.IngressRuleValue, out *networking.IngressRuleValue, s conversion.Scope) error { + out.HTTP = (*networking.HTTPIngressRuleValue)(unsafe.Pointer(in.HTTP)) + return nil +} + +// Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue is an autogenerated conversion function. +func Convert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in *v1beta1.IngressRuleValue, out *networking.IngressRuleValue, s conversion.Scope) error { + return autoConvert_v1beta1_IngressRuleValue_To_networking_IngressRuleValue(in, out, s) +} + +func autoConvert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in *networking.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { + out.HTTP = (*v1beta1.HTTPIngressRuleValue)(unsafe.Pointer(in.HTTP)) + return nil +} + +// Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue is an autogenerated conversion function. +func Convert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in *networking.IngressRuleValue, out *v1beta1.IngressRuleValue, s conversion.Scope) error { + return autoConvert_networking_IngressRuleValue_To_v1beta1_IngressRuleValue(in, out, s) +} + +func autoConvert_v1beta1_IngressSpec_To_networking_IngressSpec(in *v1beta1.IngressSpec, out *networking.IngressSpec, s conversion.Scope) error { + out.Backend = (*networking.IngressBackend)(unsafe.Pointer(in.Backend)) + out.TLS = *(*[]networking.IngressTLS)(unsafe.Pointer(&in.TLS)) + out.Rules = *(*[]networking.IngressRule)(unsafe.Pointer(&in.Rules)) + return nil +} + +// Convert_v1beta1_IngressSpec_To_networking_IngressSpec is an autogenerated conversion function. +func Convert_v1beta1_IngressSpec_To_networking_IngressSpec(in *v1beta1.IngressSpec, out *networking.IngressSpec, s conversion.Scope) error { + return autoConvert_v1beta1_IngressSpec_To_networking_IngressSpec(in, out, s) +} + +func autoConvert_networking_IngressSpec_To_v1beta1_IngressSpec(in *networking.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { + out.Backend = (*v1beta1.IngressBackend)(unsafe.Pointer(in.Backend)) + out.TLS = *(*[]v1beta1.IngressTLS)(unsafe.Pointer(&in.TLS)) + out.Rules = *(*[]v1beta1.IngressRule)(unsafe.Pointer(&in.Rules)) + return nil +} + +// Convert_networking_IngressSpec_To_v1beta1_IngressSpec is an autogenerated conversion function. +func Convert_networking_IngressSpec_To_v1beta1_IngressSpec(in *networking.IngressSpec, out *v1beta1.IngressSpec, s conversion.Scope) error { + return autoConvert_networking_IngressSpec_To_v1beta1_IngressSpec(in, out, s) +} + +func autoConvert_v1beta1_IngressStatus_To_networking_IngressStatus(in *v1beta1.IngressStatus, out *networking.IngressStatus, s conversion.Scope) error { + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.LoadBalancer, &out.LoadBalancer, 0); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_IngressStatus_To_networking_IngressStatus is an autogenerated conversion function. +func Convert_v1beta1_IngressStatus_To_networking_IngressStatus(in *v1beta1.IngressStatus, out *networking.IngressStatus, s conversion.Scope) error { + return autoConvert_v1beta1_IngressStatus_To_networking_IngressStatus(in, out, s) +} + +func autoConvert_networking_IngressStatus_To_v1beta1_IngressStatus(in *networking.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.LoadBalancer, &out.LoadBalancer, 0); err != nil { + return err + } + return nil +} + +// Convert_networking_IngressStatus_To_v1beta1_IngressStatus is an autogenerated conversion function. +func Convert_networking_IngressStatus_To_v1beta1_IngressStatus(in *networking.IngressStatus, out *v1beta1.IngressStatus, s conversion.Scope) error { + return autoConvert_networking_IngressStatus_To_v1beta1_IngressStatus(in, out, s) +} + +func autoConvert_v1beta1_IngressTLS_To_networking_IngressTLS(in *v1beta1.IngressTLS, out *networking.IngressTLS, s conversion.Scope) error { + out.Hosts = *(*[]string)(unsafe.Pointer(&in.Hosts)) + out.SecretName = in.SecretName + return nil +} + +// Convert_v1beta1_IngressTLS_To_networking_IngressTLS is an autogenerated conversion function. +func Convert_v1beta1_IngressTLS_To_networking_IngressTLS(in *v1beta1.IngressTLS, out *networking.IngressTLS, s conversion.Scope) error { + return autoConvert_v1beta1_IngressTLS_To_networking_IngressTLS(in, out, s) +} + +func autoConvert_networking_IngressTLS_To_v1beta1_IngressTLS(in *networking.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { + out.Hosts = *(*[]string)(unsafe.Pointer(&in.Hosts)) + out.SecretName = in.SecretName + return nil +} + +// Convert_networking_IngressTLS_To_v1beta1_IngressTLS is an autogenerated conversion function. +func Convert_networking_IngressTLS_To_v1beta1_IngressTLS(in *networking.IngressTLS, out *v1beta1.IngressTLS, s conversion.Scope) error { + return autoConvert_networking_IngressTLS_To_v1beta1_IngressTLS(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.defaults.go new file mode 100644 index 00000000000..73e63fc114d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/v1beta1/zz_generated.defaults.go @@ -0,0 +1,32 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/BUILD index 42021b70aca..babded2052a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/BUILD @@ -8,13 +8,17 @@ load( go_test( name = "go_default_test", - srcs = ["validation_test.go"], + srcs = [ + "conditional_validation_test.go", + "validation_test.go", + ], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/networking:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", @@ -23,7 +27,10 @@ go_test( go_library( name = "go_default_library", - srcs = ["validation.go"], + srcs = [ + "conditional_validation.go", + "validation.go", + ], importpath = "k8s.io/kubernetes/pkg/apis/networking/validation", deps = [ "//pkg/apis/core:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/conditional_validation.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/conditional_validation.go new file mode 100644 index 00000000000..87f6bf54d93 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/conditional_validation.go @@ -0,0 +1,57 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/networking" +) + +// ValidateConditionalNetworkPolicy validates conditionally valid fields. +func ValidateConditionalNetworkPolicy(np, oldNP *networking.NetworkPolicy) field.ErrorList { + var errs field.ErrorList + // If the SCTPSupport feature is disabled, and the old object isn't using the SCTP feature, prevent the new object from using it + if len(sctpFields(oldNP)) == 0 { + for _, f := range sctpFields(np) { + errs = append(errs, field.NotSupported(f, api.ProtocolSCTP, []string{string(api.ProtocolTCP), string(api.ProtocolUDP)})) + } + } + return errs +} + +func sctpFields(np *networking.NetworkPolicy) []*field.Path { + if np == nil { + return nil + } + fields := []*field.Path{} + for iIndex, e := range np.Spec.Ingress { + for pIndex, p := range e.Ports { + if p.Protocol != nil && *p.Protocol == api.ProtocolSCTP { + fields = append(fields, field.NewPath("spec.ingress").Index(iIndex).Child("ports").Index(pIndex).Child("protocol")) + } + } + } + for eIndex, e := range np.Spec.Egress { + for pIndex, p := range e.Ports { + if p.Protocol != nil && *p.Protocol == api.ProtocolSCTP { + fields = append(fields, field.NewPath("spec.egress").Index(eIndex).Child("ports").Index(pIndex).Child("protocol")) + } + } + } + return fields +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/validation.go index 241f1615a50..6f62f66fe89 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/validation/validation.go @@ -17,6 +17,10 @@ limitations under the License. package validation import ( + "net" + "regexp" + "strings" + apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/util/intstr" @@ -37,8 +41,8 @@ func ValidateNetworkPolicyName(name string, prefix bool) []string { // ValidateNetworkPolicyPort validates a NetworkPolicyPort func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if port.Protocol != nil && *port.Protocol != api.ProtocolTCP && *port.Protocol != api.ProtocolUDP { - allErrs = append(allErrs, field.NotSupported(portPath.Child("protocol"), *port.Protocol, []string{string(api.ProtocolTCP), string(api.ProtocolUDP)})) + if port.Protocol != nil && *port.Protocol != api.ProtocolTCP && *port.Protocol != api.ProtocolUDP && *port.Protocol != api.ProtocolSCTP { + allErrs = append(allErrs, field.NotSupported(portPath.Child("protocol"), *port.Protocol, []string{string(api.ProtocolTCP), string(api.ProtocolUDP), string(api.ProtocolSCTP)})) } if port.Port != nil { if port.Port.Type == intstr.Int { @@ -169,3 +173,145 @@ func ValidateIPBlock(ipb *networking.IPBlock, fldPath *field.Path) field.ErrorLi } return allErrs } + +// ValidateIngress tests if required fields in the Ingress are set. +func ValidateIngress(ingress *networking.Ingress) field.ErrorList { + allErrs := apivalidation.ValidateObjectMeta(&ingress.ObjectMeta, true, ValidateIngressName, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateIngressSpec(&ingress.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateIngressName validates that the given name can be used as an Ingress name. +var ValidateIngressName = apimachineryvalidation.NameIsDNSSubdomain + +func validateIngressTLS(spec *networking.IngressSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO: Perform a more thorough validation of spec.TLS.Hosts that takes + // the wildcard spec from RFC 6125 into account. + for _, itls := range spec.TLS { + for i, host := range itls.Hosts { + if strings.Contains(host, "*") { + for _, msg := range validation.IsWildcardDNS1123Subdomain(host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) + } + continue + } + for _, msg := range validation.IsDNS1123Subdomain(host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) + } + } + } + + return allErrs +} + +// ValidateIngressSpec tests if required fields in the IngressSpec are set. +func ValidateIngressSpec(spec *networking.IngressSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO: Is a default backend mandatory? + if spec.Backend != nil { + allErrs = append(allErrs, validateIngressBackend(spec.Backend, fldPath.Child("backend"))...) + } else if len(spec.Rules) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath, spec.Rules, "either `backend` or `rules` must be specified")) + } + if len(spec.Rules) > 0 { + allErrs = append(allErrs, validateIngressRules(spec.Rules, fldPath.Child("rules"))...) + } + if len(spec.TLS) > 0 { + allErrs = append(allErrs, validateIngressTLS(spec, fldPath.Child("tls"))...) + } + return allErrs +} + +// ValidateIngressUpdate tests if required fields in the Ingress are set. +func ValidateIngressUpdate(ingress, oldIngress *networking.Ingress) field.ErrorList { + allErrs := apivalidation.ValidateObjectMetaUpdate(&ingress.ObjectMeta, &oldIngress.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateIngressSpec(&ingress.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateIngressStatusUpdate tests if required fields in the Ingress are set when updating status. +func ValidateIngressStatusUpdate(ingress, oldIngress *networking.Ingress) field.ErrorList { + allErrs := apivalidation.ValidateObjectMetaUpdate(&ingress.ObjectMeta, &oldIngress.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, apivalidation.ValidateLoadBalancerStatus(&ingress.Status.LoadBalancer, field.NewPath("status", "loadBalancer"))...) + return allErrs +} + +func validateIngressRules(ingressRules []networking.IngressRule, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(ingressRules) == 0 { + return append(allErrs, field.Required(fldPath, "")) + } + for i, ih := range ingressRules { + if len(ih.Host) > 0 { + if isIP := (net.ParseIP(ih.Host) != nil); isIP { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, "must be a DNS name, not an IP address")) + } + // TODO: Ports and ips are allowed in the host part of a url + // according to RFC 3986, consider allowing them. + if strings.Contains(ih.Host, "*") { + for _, msg := range validation.IsWildcardDNS1123Subdomain(ih.Host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) + } + continue + } + for _, msg := range validation.IsDNS1123Subdomain(ih.Host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) + } + } + allErrs = append(allErrs, validateIngressRuleValue(&ih.IngressRuleValue, fldPath.Index(0))...) + } + return allErrs +} + +func validateIngressRuleValue(ingressRule *networking.IngressRuleValue, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if ingressRule.HTTP != nil { + allErrs = append(allErrs, validateHTTPIngressRuleValue(ingressRule.HTTP, fldPath.Child("http"))...) + } + return allErrs +} + +func validateHTTPIngressRuleValue(httpIngressRuleValue *networking.HTTPIngressRuleValue, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(httpIngressRuleValue.Paths) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("paths"), "")) + } + for i, rule := range httpIngressRuleValue.Paths { + if len(rule.Path) > 0 { + if !strings.HasPrefix(rule.Path, "/") { + allErrs = append(allErrs, field.Invalid(fldPath.Child("paths").Index(i).Child("path"), rule.Path, "must be an absolute path")) + } + // TODO: More draconian path regex validation. + // Path must be a valid regex. This is the basic requirement. + // In addition to this any characters not allowed in a path per + // RFC 3986 section-3.3 cannot appear as a literal in the regex. + // Consider the example: http://host/valid?#bar, everything after + // the last '/' is a valid regex that matches valid#bar, which + // isn't a valid path, because the path terminates at the first ? + // or #. A more sophisticated form of validation would detect that + // the user is confusing url regexes with path regexes. + _, err := regexp.CompilePOSIX(rule.Path) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("paths").Index(i).Child("path"), rule.Path, "must be a valid regex")) + } + } + allErrs = append(allErrs, validateIngressBackend(&rule.Backend, fldPath.Child("backend"))...) + } + return allErrs +} + +// validateIngressBackend tests if a given backend is valid. +func validateIngressBackend(backend *networking.IngressBackend, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + // All backends must reference a single local service by name, and a single service port by name or number. + if len(backend.ServiceName) == 0 { + return append(allErrs, field.Required(fldPath.Child("serviceName"), "")) + } + for _, msg := range apivalidation.ValidateServiceName(backend.ServiceName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("serviceName"), backend.ServiceName, msg)) + } + allErrs = append(allErrs, apivalidation.ValidatePortNumOrName(backend.ServicePort, fldPath.Child("servicePort"))...) + return allErrs +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/networking/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/networking/zz_generated.deepcopy.go index 5a0959e9cb1..9f36287c270 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/networking/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/networking/zz_generated.deepcopy.go @@ -27,6 +27,44 @@ import ( core "k8s.io/kubernetes/pkg/apis/core" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPIngressPath) DeepCopyInto(out *HTTPIngressPath) { + *out = *in + out.Backend = in.Backend + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressPath. +func (in *HTTPIngressPath) DeepCopy() *HTTPIngressPath { + if in == nil { + return nil + } + out := new(HTTPIngressPath) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPIngressRuleValue) DeepCopyInto(out *HTTPIngressRuleValue) { + *out = *in + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressRuleValue. +func (in *HTTPIngressRuleValue) DeepCopy() *HTTPIngressRuleValue { + if in == nil { + return nil + } + out := new(HTTPIngressRuleValue) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IPBlock) DeepCopyInto(out *IPBlock) { *out = *in @@ -48,6 +86,195 @@ func (in *IPBlock) DeepCopy() *IPBlock { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Ingress) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressBackend) DeepCopyInto(out *IngressBackend) { + *out = *in + out.ServicePort = in.ServicePort + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressBackend. +func (in *IngressBackend) DeepCopy() *IngressBackend { + if in == nil { + return nil + } + out := new(IngressBackend) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressList) DeepCopyInto(out *IngressList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressList. +func (in *IngressList) DeepCopy() *IngressList { + if in == nil { + return nil + } + out := new(IngressList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressRule) DeepCopyInto(out *IngressRule) { + *out = *in + in.IngressRuleValue.DeepCopyInto(&out.IngressRuleValue) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRule. +func (in *IngressRule) DeepCopy() *IngressRule { + if in == nil { + return nil + } + out := new(IngressRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressRuleValue) DeepCopyInto(out *IngressRuleValue) { + *out = *in + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRuleValue. +func (in *IngressRuleValue) DeepCopy() *IngressRuleValue { + if in == nil { + return nil + } + out := new(IngressRuleValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressSpec) DeepCopyInto(out *IngressSpec) { + *out = *in + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec. +func (in *IngressSpec) DeepCopy() *IngressSpec { + if in == nil { + return nil + } + out := new(IngressSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressStatus) DeepCopyInto(out *IngressStatus) { + *out = *in + in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressStatus. +func (in *IngressStatus) DeepCopy() *IngressStatus { + if in == nil { + return nil + } + out := new(IngressStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressTLS) DeepCopyInto(out *IngressTLS) { + *out = *in + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressTLS. +func (in *IngressTLS) DeepCopy() *IngressTLS { + if in == nil { + return nil + } + out := new(IngressTLS) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { *out = *in diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/node/BUILD new file mode 100644 index 00000000000..c5f4063c128 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/BUILD @@ -0,0 +1,38 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "types.go", + "zz_generated.deepcopy.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/node", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/apis/node/install:all-srcs", + "//pkg/apis/node/v1alpha1:all-srcs", + "//pkg/apis/node/v1beta1:all-srcs", + "//pkg/apis/node/validation:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/node/doc.go new file mode 100644 index 00000000000..639d61262a6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +groupName=node.k8s.io + +package node // import "k8s.io/kubernetes/pkg/apis/node" diff --git a/vendor/k8s.io/apimachinery/pkg/util/initialization/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/node/install/BUILD similarity index 59% rename from vendor/k8s.io/apimachinery/pkg/util/initialization/BUILD rename to vendor/k8s.io/kubernetes/pkg/apis/node/install/BUILD index b1ad2dba0f0..3d2048b5f9b 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/initialization/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/install/BUILD @@ -2,14 +2,16 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["initialization.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/initialization", - importpath = "k8s.io/apimachinery/pkg/util/initialization", + srcs = ["install.go"], + importpath = "k8s.io/kubernetes/pkg/apis/node/install", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/node:go_default_library", + "//pkg/apis/node/v1alpha1:go_default_library", + "//pkg/apis/node/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/node/install/install.go new file mode 100644 index 00000000000..c794c8ec794 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/install/install.go @@ -0,0 +1,40 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package install adds the node API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/node" + "k8s.io/kubernetes/pkg/apis/node/v1alpha1" + "k8s.io/kubernetes/pkg/apis/node/v1beta1" +) + +func init() { + Install(legacyscheme.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(scheme *runtime.Scheme) { + utilruntime.Must(node.AddToScheme(scheme)) + utilruntime.Must(v1alpha1.AddToScheme(scheme)) + utilruntime.Must(v1beta1.AddToScheme(scheme)) + utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion)) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/register.go b/vendor/k8s.io/kubernetes/pkg/apis/node/register.go new file mode 100644 index 00000000000..062ad1e0e80 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/register.go @@ -0,0 +1,54 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package node + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder for node api registration. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme for node api registration. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &RuntimeClass{}, + &RuntimeClassList{}, + ) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/types.go b/vendor/k8s.io/kubernetes/pkg/apis/node/types.go new file mode 100644 index 00000000000..a10648f384a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/types.go @@ -0,0 +1,60 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package node + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +type RuntimeClass struct { + metav1.TypeMeta + // +optional + metav1.ObjectMeta + + // Handler specifies the underlying runtime and configuration that the CRI + // implementation will use to handle pods of this class. The possible values + // are specific to the node & CRI configuration. It is assumed that all + // handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The Handler must conform to the DNS Label (RFC 1123) requirements, and is + // immutable. + Handler string +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClassList is a list of RuntimeClass objects. +type RuntimeClassList struct { + metav1.TypeMeta + // +optional + metav1.ListMeta + + // Items is a list of schema objects. + Items []RuntimeClass +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/BUILD new file mode 100644 index 00000000000..3e817dcbc8d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/BUILD @@ -0,0 +1,47 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "conversion.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/node/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/node:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["conversion_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/node:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/conversion.go new file mode 100644 index 00000000000..f1e96ea31ae --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/conversion.go @@ -0,0 +1,43 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/node/v1alpha1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + node "k8s.io/kubernetes/pkg/apis/node" +) + +func addConversionFuncs(s *runtime.Scheme) error { + return s.AddConversionFuncs( + Convert_v1alpha1_RuntimeClass_To_node_RuntimeClass, + Convert_node_RuntimeClass_To_v1alpha1_RuntimeClass, + ) +} + +func Convert_v1alpha1_RuntimeClass_To_node_RuntimeClass(in *v1alpha1.RuntimeClass, out *node.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Handler = in.Spec.RuntimeHandler + return nil +} + +func Convert_node_RuntimeClass_To_v1alpha1_RuntimeClass(in *node.RuntimeClass, out *v1alpha1.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Spec.RuntimeHandler = in.Handler + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/doc.go new file mode 100644 index 00000000000..1c2e1431952 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/node +// +k8s:conversion-gen-external-types=k8s.io/api/node/v1alpha1 + +// +groupName=node.k8s.io + +package v1alpha1 // import "k8s.io/kubernetes/pkg/apis/node/v1alpha1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/register.go new file mode 100644 index 00000000000..b48efda70ac --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/register.go @@ -0,0 +1,46 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + nodev1alpha1 "k8s.io/api/node/v1alpha1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName for node API +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &nodev1alpha1.SchemeBuilder + // AddToScheme node API registration + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addConversionFuncs) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/zz_generated.conversion.go new file mode 100644 index 00000000000..dcb097f842e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1alpha1/zz_generated.conversion.go @@ -0,0 +1,122 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/node/v1alpha1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + node "k8s.io/kubernetes/pkg/apis/node" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1alpha1.RuntimeClass)(nil), (*node.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_RuntimeClass_To_node_RuntimeClass(a.(*v1alpha1.RuntimeClass), b.(*node.RuntimeClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*node.RuntimeClass)(nil), (*v1alpha1.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_node_RuntimeClass_To_v1alpha1_RuntimeClass(a.(*node.RuntimeClass), b.(*v1alpha1.RuntimeClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1alpha1.RuntimeClassList)(nil), (*node.RuntimeClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_RuntimeClassList_To_node_RuntimeClassList(a.(*v1alpha1.RuntimeClassList), b.(*node.RuntimeClassList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*node.RuntimeClassList)(nil), (*v1alpha1.RuntimeClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_node_RuntimeClassList_To_v1alpha1_RuntimeClassList(a.(*node.RuntimeClassList), b.(*v1alpha1.RuntimeClassList), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*node.RuntimeClass)(nil), (*v1alpha1.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_node_RuntimeClass_To_v1alpha1_RuntimeClass(a.(*node.RuntimeClass), b.(*v1alpha1.RuntimeClass), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v1alpha1.RuntimeClass)(nil), (*node.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_RuntimeClass_To_node_RuntimeClass(a.(*v1alpha1.RuntimeClass), b.(*node.RuntimeClass), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1alpha1_RuntimeClass_To_node_RuntimeClass(in *v1alpha1.RuntimeClass, out *node.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + // WARNING: in.Spec requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_node_RuntimeClass_To_v1alpha1_RuntimeClass(in *node.RuntimeClass, out *v1alpha1.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + // WARNING: in.Handler requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_v1alpha1_RuntimeClassList_To_node_RuntimeClassList(in *v1alpha1.RuntimeClassList, out *node.RuntimeClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]node.RuntimeClass, len(*in)) + for i := range *in { + if err := Convert_v1alpha1_RuntimeClass_To_node_RuntimeClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +// Convert_v1alpha1_RuntimeClassList_To_node_RuntimeClassList is an autogenerated conversion function. +func Convert_v1alpha1_RuntimeClassList_To_node_RuntimeClassList(in *v1alpha1.RuntimeClassList, out *node.RuntimeClassList, s conversion.Scope) error { + return autoConvert_v1alpha1_RuntimeClassList_To_node_RuntimeClassList(in, out, s) +} + +func autoConvert_node_RuntimeClassList_To_v1alpha1_RuntimeClassList(in *node.RuntimeClassList, out *v1alpha1.RuntimeClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]v1alpha1.RuntimeClass, len(*in)) + for i := range *in { + if err := Convert_node_RuntimeClass_To_v1alpha1_RuntimeClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +// Convert_node_RuntimeClassList_To_v1alpha1_RuntimeClassList is an autogenerated conversion function. +func Convert_node_RuntimeClassList_To_v1alpha1_RuntimeClassList(in *node.RuntimeClassList, out *v1alpha1.RuntimeClassList, s conversion.Scope) error { + return autoConvert_node_RuntimeClassList_To_v1alpha1_RuntimeClassList(in, out, s) +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/BUILD similarity index 67% rename from vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/BUILD rename to vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/BUILD index 576f861b276..692be926ae4 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/BUILD @@ -3,21 +3,18 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = [ - "conversion.go", - "defaults.go", "doc.go", "register.go", - "types.go", "zz_generated.conversion.go", - "zz_generated.deepcopy.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/config/v1alpha1", - importpath = "k8s.io/apimachinery/pkg/apis/config/v1alpha1", + importpath = "k8s.io/kubernetes/pkg/apis/node/v1beta1", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", + "//pkg/apis/node:go_default_library", + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/doc.go new file mode 100644 index 00000000000..5883bc50503 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/node +// +k8s:conversion-gen-external-types=k8s.io/api/node/v1beta1 + +// +groupName=node.k8s.io + +package v1beta1 // import "k8s.io/kubernetes/pkg/apis/node/v1beta1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/register.go new file mode 100644 index 00000000000..e018e3b70e4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/register.go @@ -0,0 +1,39 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + nodev1beta1 "k8s.io/api/node/v1beta1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName for node API +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &nodev1beta1.SchemeBuilder + // AddToScheme node API registration + AddToScheme = localSchemeBuilder.AddToScheme +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..ebe97f937c4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/v1beta1/zz_generated.conversion.go @@ -0,0 +1,104 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1beta1 + +import ( + unsafe "unsafe" + + v1beta1 "k8s.io/api/node/v1beta1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + node "k8s.io/kubernetes/pkg/apis/node" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.RuntimeClass)(nil), (*node.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_RuntimeClass_To_node_RuntimeClass(a.(*v1beta1.RuntimeClass), b.(*node.RuntimeClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*node.RuntimeClass)(nil), (*v1beta1.RuntimeClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_node_RuntimeClass_To_v1beta1_RuntimeClass(a.(*node.RuntimeClass), b.(*v1beta1.RuntimeClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.RuntimeClassList)(nil), (*node.RuntimeClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_RuntimeClassList_To_node_RuntimeClassList(a.(*v1beta1.RuntimeClassList), b.(*node.RuntimeClassList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*node.RuntimeClassList)(nil), (*v1beta1.RuntimeClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_node_RuntimeClassList_To_v1beta1_RuntimeClassList(a.(*node.RuntimeClassList), b.(*v1beta1.RuntimeClassList), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1beta1_RuntimeClass_To_node_RuntimeClass(in *v1beta1.RuntimeClass, out *node.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Handler = in.Handler + return nil +} + +// Convert_v1beta1_RuntimeClass_To_node_RuntimeClass is an autogenerated conversion function. +func Convert_v1beta1_RuntimeClass_To_node_RuntimeClass(in *v1beta1.RuntimeClass, out *node.RuntimeClass, s conversion.Scope) error { + return autoConvert_v1beta1_RuntimeClass_To_node_RuntimeClass(in, out, s) +} + +func autoConvert_node_RuntimeClass_To_v1beta1_RuntimeClass(in *node.RuntimeClass, out *v1beta1.RuntimeClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Handler = in.Handler + return nil +} + +// Convert_node_RuntimeClass_To_v1beta1_RuntimeClass is an autogenerated conversion function. +func Convert_node_RuntimeClass_To_v1beta1_RuntimeClass(in *node.RuntimeClass, out *v1beta1.RuntimeClass, s conversion.Scope) error { + return autoConvert_node_RuntimeClass_To_v1beta1_RuntimeClass(in, out, s) +} + +func autoConvert_v1beta1_RuntimeClassList_To_node_RuntimeClassList(in *v1beta1.RuntimeClassList, out *node.RuntimeClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]node.RuntimeClass)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_RuntimeClassList_To_node_RuntimeClassList is an autogenerated conversion function. +func Convert_v1beta1_RuntimeClassList_To_node_RuntimeClassList(in *v1beta1.RuntimeClassList, out *node.RuntimeClassList, s conversion.Scope) error { + return autoConvert_v1beta1_RuntimeClassList_To_node_RuntimeClassList(in, out, s) +} + +func autoConvert_node_RuntimeClassList_To_v1beta1_RuntimeClassList(in *node.RuntimeClassList, out *v1beta1.RuntimeClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.RuntimeClass)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_node_RuntimeClassList_To_v1beta1_RuntimeClassList is an autogenerated conversion function. +func Convert_node_RuntimeClassList_To_v1beta1_RuntimeClassList(in *node.RuntimeClassList, out *v1beta1.RuntimeClassList, s conversion.Scope) error { + return autoConvert_node_RuntimeClassList_To_v1beta1_RuntimeClassList(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/node/validation/BUILD similarity index 55% rename from vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/BUILD rename to vendor/k8s.io/kubernetes/pkg/apis/node/validation/BUILD index f734bdefe4e..7d7345099df 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/validation/BUILD @@ -1,20 +1,13 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = ["validation.go"], - importpath = "k8s.io/kubernetes/pkg/apis/extensions/validation", + importpath = "k8s.io/kubernetes/pkg/apis/node/validation", + visibility = ["//visibility:public"], deps = [ - "//pkg/apis/core/validation:go_default_library", - "//pkg/apis/extensions:go_default_library", + "//pkg/apis/node:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/validation:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) @@ -24,10 +17,9 @@ go_test( srcs = ["validation_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/apis/core:go_default_library", - "//pkg/apis/extensions:go_default_library", + "//pkg/apis/node:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", ], ) @@ -42,4 +34,5 @@ filegroup( name = "all-srcs", srcs = [":package-srcs"], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/node/validation/validation.go new file mode 100644 index 00000000000..b89a01ff58d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/validation/validation.go @@ -0,0 +1,43 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + apivalidation "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/node" +) + +// ValidateRuntimeClass validates the RuntimeClass +func ValidateRuntimeClass(rc *node.RuntimeClass) field.ErrorList { + allErrs := apivalidation.ValidateObjectMeta(&rc.ObjectMeta, false, apivalidation.NameIsDNSSubdomain, field.NewPath("metadata")) + + for _, msg := range apivalidation.NameIsDNSLabel(rc.Handler, false) { + allErrs = append(allErrs, field.Invalid(field.NewPath("handler"), rc.Handler, msg)) + } + + return allErrs +} + +// ValidateRuntimeClassUpdate validates an update to the object +func ValidateRuntimeClassUpdate(new, old *node.RuntimeClass) field.ErrorList { + allErrs := apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata")) + + allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Handler, old.Handler, field.NewPath("handler"))...) + + return allErrs +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/node/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/node/zz_generated.deepcopy.go new file mode 100644 index 00000000000..eb27effc899 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/node/zz_generated.deepcopy.go @@ -0,0 +1,84 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package node + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClass. +func (in *RuntimeClass) DeepCopy() *RuntimeClass { + if in == nil { + return nil + } + out := new(RuntimeClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassList) DeepCopyInto(out *RuntimeClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RuntimeClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassList. +func (in *RuntimeClassList) DeepCopy() *RuntimeClassList { + if in == nil { + return nil + } + out := new(RuntimeClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/policy/OWNERS old mode 100755 new mode 100644 index 5780104890d..31a0a7358d6 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-apps-api-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go index a94711bdb36..f51079a34a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go @@ -213,6 +213,10 @@ type PodSecurityPolicySpec struct { // is allowed in the "Volumes" field. // +optional AllowedFlexVolumes []AllowedFlexVolume + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value means no CSI drivers can run inline within a pod spec. + // +optional + AllowedCSIDrivers []AllowedCSIDriver // AllowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -308,6 +312,12 @@ type AllowedFlexVolume struct { Driver string } +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +type AllowedCSIDriver struct { + // Name is the registered name of the CSI driver + Name string +} + // SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. type SELinuxStrategyOptions struct { // Rule is the strategy that will dictate the allowable labels that may be set. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1beta1/zz_generated.conversion.go index 356cb47f3a4..29c07c78b99 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1beta1/zz_generated.conversion.go @@ -40,6 +40,16 @@ func init() { // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.AllowedCSIDriver)(nil), (*policy.AllowedCSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(a.(*v1beta1.AllowedCSIDriver), b.(*policy.AllowedCSIDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*policy.AllowedCSIDriver)(nil), (*v1beta1.AllowedCSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(a.(*policy.AllowedCSIDriver), b.(*v1beta1.AllowedCSIDriver), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta1.AllowedFlexVolume)(nil), (*policy.AllowedFlexVolume)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_AllowedFlexVolume_To_policy_AllowedFlexVolume(a.(*v1beta1.AllowedFlexVolume), b.(*policy.AllowedFlexVolume), scope) }); err != nil { @@ -213,6 +223,26 @@ func RegisterConversions(s *runtime.Scheme) error { return nil } +func autoConvert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in *v1beta1.AllowedCSIDriver, out *policy.AllowedCSIDriver, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +// Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver is an autogenerated conversion function. +func Convert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in *v1beta1.AllowedCSIDriver, out *policy.AllowedCSIDriver, s conversion.Scope) error { + return autoConvert_v1beta1_AllowedCSIDriver_To_policy_AllowedCSIDriver(in, out, s) +} + +func autoConvert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in *policy.AllowedCSIDriver, out *v1beta1.AllowedCSIDriver, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +// Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver is an autogenerated conversion function. +func Convert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in *policy.AllowedCSIDriver, out *v1beta1.AllowedCSIDriver, s conversion.Scope) error { + return autoConvert_policy_AllowedCSIDriver_To_v1beta1_AllowedCSIDriver(in, out, s) +} + func autoConvert_v1beta1_AllowedFlexVolume_To_policy_AllowedFlexVolume(in *v1beta1.AllowedFlexVolume, out *policy.AllowedFlexVolume, s conversion.Scope) error { out.Driver = in.Driver return nil @@ -549,6 +579,7 @@ func autoConvert_v1beta1_PodSecurityPolicySpec_To_policy_PodSecurityPolicySpec(i } out.AllowedHostPaths = *(*[]policy.AllowedHostPath)(unsafe.Pointer(&in.AllowedHostPaths)) out.AllowedFlexVolumes = *(*[]policy.AllowedFlexVolume)(unsafe.Pointer(&in.AllowedFlexVolumes)) + out.AllowedCSIDrivers = *(*[]policy.AllowedCSIDriver)(unsafe.Pointer(&in.AllowedCSIDrivers)) out.AllowedUnsafeSysctls = *(*[]string)(unsafe.Pointer(&in.AllowedUnsafeSysctls)) out.ForbiddenSysctls = *(*[]string)(unsafe.Pointer(&in.ForbiddenSysctls)) out.AllowedProcMountTypes = *(*[]core.ProcMountType)(unsafe.Pointer(&in.AllowedProcMountTypes)) @@ -590,6 +621,7 @@ func autoConvert_policy_PodSecurityPolicySpec_To_v1beta1_PodSecurityPolicySpec(i } out.AllowedHostPaths = *(*[]v1beta1.AllowedHostPath)(unsafe.Pointer(&in.AllowedHostPaths)) out.AllowedFlexVolumes = *(*[]v1beta1.AllowedFlexVolume)(unsafe.Pointer(&in.AllowedFlexVolumes)) + out.AllowedCSIDrivers = *(*[]v1beta1.AllowedCSIDriver)(unsafe.Pointer(&in.AllowedCSIDrivers)) out.AllowedUnsafeSysctls = *(*[]string)(unsafe.Pointer(&in.AllowedUnsafeSysctls)) out.ForbiddenSysctls = *(*[]string)(unsafe.Pointer(&in.ForbiddenSysctls)) out.AllowedProcMountTypes = *(*[]corev1.ProcMountType)(unsafe.Pointer(&in.AllowedProcMountTypes)) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/BUILD index a32bc3f9ca4..0b60688425e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/BUILD @@ -15,7 +15,6 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", "//pkg/apis/policy:go_default_library", - "//pkg/features:go_default_library", "//pkg/security/apparmor:go_default_library", "//pkg/security/podsecuritypolicy/seccomp:go_default_library", "//pkg/security/podsecuritypolicy/util:go_default_library", @@ -23,7 +22,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go index fa1af17afa7..9b88c21a574 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go @@ -31,12 +31,9 @@ import ( core "k8s.io/kubernetes/pkg/apis/core" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/apis/policy" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/security/apparmor" "k8s.io/kubernetes/pkg/security/podsecuritypolicy/seccomp" psputil "k8s.io/kubernetes/pkg/security/podsecuritypolicy/util" - - utilfeature "k8s.io/apiserver/pkg/util/feature" ) func ValidatePodDisruptionBudget(pdb *policy.PodDisruptionBudget) field.ErrorList { @@ -121,8 +118,10 @@ func ValidatePodSecurityPolicySpec(spec *policy.PodSecurityPolicySpec, fldPath * allErrs = append(allErrs, validatePSPCapsAgainstDrops(spec.RequiredDropCapabilities, spec.DefaultAddCapabilities, field.NewPath("defaultAddCapabilities"))...) allErrs = append(allErrs, validatePSPCapsAgainstDrops(spec.RequiredDropCapabilities, spec.AllowedCapabilities, field.NewPath("allowedCapabilities"))...) allErrs = append(allErrs, validatePSPDefaultAllowPrivilegeEscalation(fldPath.Child("defaultAllowPrivilegeEscalation"), spec.DefaultAllowPrivilegeEscalation, spec.AllowPrivilegeEscalation)...) + allErrs = append(allErrs, validatePSPAllowedProcMountTypes(fldPath.Child("allowedProcMountTypes"), spec.AllowedProcMountTypes)...) allErrs = append(allErrs, validatePSPAllowedHostPaths(fldPath.Child("allowedHostPaths"), spec.AllowedHostPaths)...) allErrs = append(allErrs, validatePSPAllowedFlexVolumes(fldPath.Child("allowedFlexVolumes"), spec.AllowedFlexVolumes)...) + allErrs = append(allErrs, validatePSPAllowedCSIDrivers(fldPath.Child("allowedCSIDrivers"), spec.AllowedCSIDrivers)...) allErrs = append(allErrs, validatePodSecurityPolicySysctls(fldPath.Child("allowedUnsafeSysctls"), spec.AllowedUnsafeSysctls)...) allErrs = append(allErrs, validatePodSecurityPolicySysctls(fldPath.Child("forbiddenSysctls"), spec.ForbiddenSysctls)...) allErrs = append(allErrs, validatePodSecurityPolicySysctlListsDoNotOverlap(fldPath.Child("allowedUnsafeSysctls"), fldPath.Child("forbiddenSysctls"), spec.AllowedUnsafeSysctls, spec.ForbiddenSysctls)...) @@ -196,6 +195,17 @@ func validatePSPAllowedFlexVolumes(fldPath *field.Path, flexVolumes []policy.All return allErrs } +func validatePSPAllowedCSIDrivers(fldPath *field.Path, csiDrivers []policy.AllowedCSIDriver) field.ErrorList { + allErrs := field.ErrorList{} + if len(csiDrivers) > 0 { + for idx, csiDriver := range csiDrivers { + fieldPath := fldPath.Child("allowedCSIDriver").Index(idx).Child("name") + allErrs = append(allErrs, apivalidation.ValidateCSIDriverName(csiDriver.Name, fieldPath)...) + } + } + return allErrs +} + // validatePSPSELinux validates the SELinux fields of PodSecurityPolicy. func validatePSPSELinux(fldPath *field.Path, seLinux *policy.SELinuxStrategyOptions) field.ErrorList { allErrs := field.ErrorList{} @@ -328,6 +338,17 @@ func validatePSPDefaultAllowPrivilegeEscalation(fldPath *field.Path, defaultAllo return allErrs } +// validatePSPAllowedProcMountTypes validates the DefaultAllowPrivilegeEscalation field against the AllowPrivilegeEscalation field of a PodSecurityPolicy. +func validatePSPAllowedProcMountTypes(fldPath *field.Path, allowedProcMountTypes []core.ProcMountType) field.ErrorList { + allErrs := field.ErrorList{} + for i, procMountType := range allowedProcMountTypes { + if err := apivalidation.ValidateProcMountType(fldPath.Index(i), procMountType); err != nil { + allErrs = append(allErrs, err) + } + } + return allErrs +} + const sysctlPatternSegmentFmt string = "([a-z0-9][-_a-z0-9]*)?[a-z0-9*]" const SysctlPatternFmt string = "(" + apivalidation.SysctlSegmentFmt + "\\.)*" + sysctlPatternSegmentFmt @@ -389,10 +410,6 @@ func validatePodSecurityPolicySysctls(fldPath *field.Path, sysctls []string) fie return allErrs } - if !utilfeature.DefaultFeatureGate.Enabled(features.Sysctls) { - return append(allErrs, field.Forbidden(fldPath, "Sysctls are disabled by Sysctls feature-gate")) - } - coversAll := false for i, s := range sysctls { if len(s) == 0 { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go index 4b5eb457946..fcdc5d4433a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go @@ -27,6 +27,22 @@ import ( core "k8s.io/kubernetes/pkg/apis/core" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. +func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { + if in == nil { + return nil + } + out := new(AllowedCSIDriver) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { *out = *in @@ -370,6 +386,11 @@ func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { *out = make([]AllowedFlexVolume, len(*in)) copy(*out, *in) } + if in.AllowedCSIDrivers != nil { + in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers + *out = make([]AllowedCSIDriver, len(*in)) + copy(*out, *in) + } if in.AllowedUnsafeSysctls != nil { in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls *out = make([]string, len(*in)) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/rbac/OWNERS old mode 100755 new mode 100644 index ff4a7f4bf9a..dbc9a28c6f2 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # approval on api packages bubbles to api-approvers reviewers: - sig-auth-authorizers-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/BUILD index 3d6e6cbadf5..10cb5065e5d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/BUILD @@ -36,6 +36,7 @@ filegroup( ":package-srcs", "//pkg/apis/scheduling/fuzzer:all-srcs", "//pkg/apis/scheduling/install:all-srcs", + "//pkg/apis/scheduling/v1:all-srcs", "//pkg/apis/scheduling/v1alpha1:all-srcs", "//pkg/apis/scheduling/v1beta1:all-srcs", "//pkg/apis/scheduling/validation:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/BUILD index 7aec4144b1d..0e211c58ff9 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/BUILD @@ -12,6 +12,7 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/scheduling:go_default_library", + "//pkg/apis/scheduling/v1:go_default_library", "//pkg/apis/scheduling/v1alpha1:go_default_library", "//pkg/apis/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/install.go index dae58eb8fc4..887e9429d33 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/install/install.go @@ -23,6 +23,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/scheduling" + v1 "k8s.io/kubernetes/pkg/apis/scheduling/v1" "k8s.io/kubernetes/pkg/apis/scheduling/v1beta1" ) @@ -33,6 +34,8 @@ func init() { // Install registers the API group and adds types to a scheme func Install(scheme *runtime.Scheme) { utilruntime.Must(scheduling.AddToScheme(scheme)) + utilruntime.Must(v1.AddToScheme(scheme)) utilruntime.Must(v1beta1.AddToScheme(scheme)) - utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion)) + // TODO(bsalamat): update this in 1.15 to use v1 API. + utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/BUILD new file mode 100644 index 00000000000..1d041607036 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/BUILD @@ -0,0 +1,34 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/kubernetes/pkg/apis/scheduling/v1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/scheduling:go_default_library", + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/doc.go new file mode 100644 index 00000000000..52ac95f0216 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/scheduling +// +k8s:conversion-gen-external-types=k8s.io/api/scheduling/v1 +// +groupName=scheduling.k8s.io +// +k8s:defaulter-gen=TypeMeta +// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/scheduling/v1 + +package v1 // import "k8s.io/kubernetes/pkg/apis/scheduling/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/register.go new file mode 100644 index 00000000000..8a165407586 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/register.go @@ -0,0 +1,46 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + schedulingv1 "k8s.io/api/scheduling/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "scheduling.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &schedulingv1.SchemeBuilder + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(RegisterDefaults) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.conversion.go new file mode 100644 index 00000000000..a7d90b7ffe2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.conversion.go @@ -0,0 +1,108 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + v1 "k8s.io/api/scheduling/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + scheduling "k8s.io/kubernetes/pkg/apis/scheduling" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1.PriorityClass)(nil), (*scheduling.PriorityClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_PriorityClass_To_scheduling_PriorityClass(a.(*v1.PriorityClass), b.(*scheduling.PriorityClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*scheduling.PriorityClass)(nil), (*v1.PriorityClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_scheduling_PriorityClass_To_v1_PriorityClass(a.(*scheduling.PriorityClass), b.(*v1.PriorityClass), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1.PriorityClassList)(nil), (*scheduling.PriorityClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_PriorityClassList_To_scheduling_PriorityClassList(a.(*v1.PriorityClassList), b.(*scheduling.PriorityClassList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*scheduling.PriorityClassList)(nil), (*v1.PriorityClassList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_scheduling_PriorityClassList_To_v1_PriorityClassList(a.(*scheduling.PriorityClassList), b.(*v1.PriorityClassList), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_PriorityClass_To_scheduling_PriorityClass(in *v1.PriorityClass, out *scheduling.PriorityClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Value = in.Value + out.GlobalDefault = in.GlobalDefault + out.Description = in.Description + return nil +} + +// Convert_v1_PriorityClass_To_scheduling_PriorityClass is an autogenerated conversion function. +func Convert_v1_PriorityClass_To_scheduling_PriorityClass(in *v1.PriorityClass, out *scheduling.PriorityClass, s conversion.Scope) error { + return autoConvert_v1_PriorityClass_To_scheduling_PriorityClass(in, out, s) +} + +func autoConvert_scheduling_PriorityClass_To_v1_PriorityClass(in *scheduling.PriorityClass, out *v1.PriorityClass, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Value = in.Value + out.GlobalDefault = in.GlobalDefault + out.Description = in.Description + return nil +} + +// Convert_scheduling_PriorityClass_To_v1_PriorityClass is an autogenerated conversion function. +func Convert_scheduling_PriorityClass_To_v1_PriorityClass(in *scheduling.PriorityClass, out *v1.PriorityClass, s conversion.Scope) error { + return autoConvert_scheduling_PriorityClass_To_v1_PriorityClass(in, out, s) +} + +func autoConvert_v1_PriorityClassList_To_scheduling_PriorityClassList(in *v1.PriorityClassList, out *scheduling.PriorityClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]scheduling.PriorityClass)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1_PriorityClassList_To_scheduling_PriorityClassList is an autogenerated conversion function. +func Convert_v1_PriorityClassList_To_scheduling_PriorityClassList(in *v1.PriorityClassList, out *scheduling.PriorityClassList, s conversion.Scope) error { + return autoConvert_v1_PriorityClassList_To_scheduling_PriorityClassList(in, out, s) +} + +func autoConvert_scheduling_PriorityClassList_To_v1_PriorityClassList(in *scheduling.PriorityClassList, out *v1.PriorityClassList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1.PriorityClass)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_scheduling_PriorityClassList_To_v1_PriorityClassList is an autogenerated conversion function. +func Convert_scheduling_PriorityClassList_To_v1_PriorityClassList(in *scheduling.PriorityClassList, out *v1.PriorityClassList, s conversion.Scope) error { + return autoConvert_scheduling_PriorityClassList_To_v1_PriorityClassList(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.defaults.go new file mode 100644 index 00000000000..cce2e603a69 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1/zz_generated.defaults.go @@ -0,0 +1,32 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1beta1/register.go index 45eae937cc0..114e084cbe6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/scheduling/v1beta1/register.go @@ -34,7 +34,8 @@ func Resource(resource string) schema.GroupResource { var ( localSchemeBuilder = &schedulingv1beta1.SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = localSchemeBuilder.AddToScheme ) func init() { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/OWNERS b/vendor/k8s.io/kubernetes/pkg/apis/storage/OWNERS old mode 100755 new mode 100644 index d59ed6e1d8a..7562f04b86a --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - mbohlool diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go index 7ae2f3efe18..fffba5fc5a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go @@ -48,6 +48,10 @@ func addKnownTypes(scheme *runtime.Scheme) error { &StorageClassList{}, &VolumeAttachment{}, &VolumeAttachmentList{}, + &CSINode{}, + &CSINodeList{}, + &CSIDriver{}, + &CSIDriverList{}, ) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go index 7dedc666e18..daf23d61139 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go @@ -195,7 +195,7 @@ type VolumeError struct { Time metav1.Time // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional Message string @@ -215,3 +215,160 @@ const ( // binding will occur during Pod scheduing. VolumeBindingWaitForFirstConsumer VolumeBindingMode = "WaitForFirstConsumer" ) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriver captures information about a Container Storage Interface (CSI) +// volume driver deployed on the cluster. +// CSI drivers do not need to create the CSIDriver object directly. Instead they may use the +// cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically +// creates a CSIDriver object representing the driver. +// Kubernetes attach detach controller uses this object to determine whether attach is required. +// Kubelet uses this object to determine whether pod information needs to be passed on mount. +// CSIDriver objects are non-namespaced. +type CSIDriver struct { + metav1.TypeMeta + + // Standard object metadata. + // metadata.Name indicates the name of the CSI driver that this object + // refers to; it MUST be the same name returned by the CSI GetPluginName() + // call for that driver. + // The driver name must be 63 characters or less, beginning and ending with + // an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + metav1.ObjectMeta + + // Specification of the CSI Driver. + Spec CSIDriverSpec +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriverList is a collection of CSIDriver objects. +type CSIDriverList struct { + metav1.TypeMeta + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta + + // items is the list of CSIDriver + Items []CSIDriver +} + +// CSIDriverSpec is the specification of a CSIDriver. +type CSIDriverSpec struct { + // attachRequired indicates this CSI volume driver requires an attach + // operation (because it implements the CSI ControllerPublishVolume() + // method), and that the Kubernetes attach detach controller should call + // the attach volume interface which checks the volumeattachment status + // and waits until the volume is attached before proceeding to mounting. + // The CSI external-attacher coordinates with CSI volume driver and updates + // the volumeattachment status when the attach operation is complete. + // If the CSIDriverRegistry feature gate is enabled and the value is + // specified to false, the attach operation will be skipped. + // Otherwise the attach operation will be called. + // +optional + AttachRequired *bool + + // If set to true, podInfoOnMount indicates this CSI volume driver + // requires additional pod information (like podName, podUID, etc.) during + // mount operations. + // If set to false, pod information will not be passed on mount. + // Default is false. + // The CSI driver specifies podInfoOnMount as part of driver deployment. + // If true, Kubelet will pass pod information as VolumeContext in the CSI + // NodePublishVolume() calls. + // The CSI driver is responsible for parsing and validating the information + // passed in as VolumeContext. + // The following VolumeConext will be passed if podInfoOnMount is set to true. + // This list might grow, but the prefix will be used. + // "csi.storage.k8s.io/pod.name": pod.Name + // "csi.storage.k8s.io/pod.namespace": pod.Namespace + // "csi.storage.k8s.io/pod.uid": string(pod.UID) + // +optional + PodInfoOnMount *bool +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINode holds information about all CSI drivers installed on a node. +// CSI drivers do not need to create the CSINode object directly. As long as +// they use the node-driver-registrar sidecar container, the kubelet will +// automatically populate the CSINode object for the CSI driver as part of +// kubelet plugin registration. +// CSINode has the same name as a node. If the object is missing, it means either +// there are no CSI Drivers available on the node, or the Kubelet version is low +// enough that it doesn't create this object. +// CSINode has an OwnerReference that points to the corresponding node object. +type CSINode struct { + metav1.TypeMeta + + // metadata.name must be the Kubernetes node name. + metav1.ObjectMeta + + // spec is the specification of CSINode + Spec CSINodeSpec +} + +// CSINodeSpec holds information about the specification of all CSI drivers installed on a node +type CSINodeSpec struct { + // drivers is a list of information of all CSI Drivers existing on a node. + // If all drivers in the list are uninstalled, this can become empty. + // +patchMergeKey=name + // +patchStrategy=merge + Drivers []CSINodeDriver +} + +// CSINodeDriver holds information about the specification of one CSI driver installed on a node +type CSINodeDriver struct { + // This is the name of the CSI driver that this object refers to. + // This MUST be the same name returned by the CSI GetPluginName() call for + // that driver. + Name string + + // nodeID of the node from the driver point of view. + // This field enables Kubernetes to communicate with storage systems that do + // not share the same nomenclature for nodes. For example, Kubernetes may + // refer to a given node as "node1", but the storage system may refer to + // the same node as "nodeA". When Kubernetes issues a command to the storage + // system to attach a volume to a specific node, it can use this field to + // refer to the node name using the ID that the storage system will + // understand, e.g. "nodeA" instead of "node1". This field is required. + NodeID string + + // topologyKeys is the list of keys supported by the driver. + // When a driver is initialized on a cluster, it provides a set of topology + // keys that it understands (e.g. "company.com/zone", "company.com/region"). + // When a driver is initialized on a node, it provides the same topology keys + // along with values. Kubelet will expose these topology keys as labels + // on its own node object. + // When Kubernetes does topology aware provisioning, it can use this list to + // determine which labels it should retrieve from the node object and pass + // back to the driver. + // It is possible for different nodes to use different topology keys. + // This can be empty if driver does not support topology. + // +optional + TopologyKeys []string +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINodeList is a collection of CSINode objects. +type CSINodeList struct { + metav1.TypeMeta + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta + + // items is the list of CSINode + Items []CSINode +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/util/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/storage/util/BUILD index 0cddfad64b4..c8d8964d98a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/util/BUILD @@ -36,15 +36,12 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "util_test.go", - ], + srcs = ["util_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/apis/core:go_default_library", "//pkg/apis/storage:go_default_library", "//pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/util/util.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/util/util.go index 382802d9641..135c548125d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/util/util.go @@ -22,10 +22,19 @@ import ( "k8s.io/kubernetes/pkg/features" ) -// DropDisabledAlphaFields removes disabled fields from the StorageClass object. -func DropDisabledAlphaFields(class *storage.StorageClass) { - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - class.VolumeBindingMode = nil - class.AllowedTopologies = nil +// DropDisabledFields removes disabled fields from the StorageClass object. +func DropDisabledFields(class, oldClass *storage.StorageClass) { + if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) && !allowVolumeExpansionInUse(oldClass) { + class.AllowVolumeExpansion = nil } } + +func allowVolumeExpansionInUse(oldClass *storage.StorageClass) bool { + if oldClass == nil { + return false + } + if oldClass.AllowVolumeExpansion != nil { + return true + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/BUILD index 11449ae5f12..622bbecf28d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/BUILD @@ -19,13 +19,11 @@ go_library( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/storage:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) @@ -47,18 +45,12 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "defaults_test.go", - "main_test.go", - ], + srcs = ["defaults_test.go"], embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/storage/install:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/defaults.go index 6f574f4867c..e50475a8000 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1/defaults.go @@ -20,8 +20,6 @@ import ( "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/runtime" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/kubernetes/pkg/features" ) func addDefaultingFuncs(scheme *runtime.Scheme) error { @@ -34,7 +32,7 @@ func SetDefaults_StorageClass(obj *storagev1.StorageClass) { *obj.ReclaimPolicy = v1.PersistentVolumeReclaimDelete } - if obj.VolumeBindingMode == nil && utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { + if obj.VolumeBindingMode == nil { obj.VolumeBindingMode = new(storagev1.VolumeBindingMode) *obj.VolumeBindingMode = storagev1.VolumeBindingImmediate } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/BUILD index 4695a2ddb21..65c7b40975f 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/BUILD @@ -19,13 +19,11 @@ go_library( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/storage:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) @@ -47,18 +45,12 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "defaults_test.go", - "main_test.go", - ], + srcs = ["defaults_test.go"], embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/storage/install:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/defaults.go index 97dbff2f378..30803281659 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/defaults.go @@ -20,8 +20,6 @@ import ( "k8s.io/api/core/v1" storagev1beta1 "k8s.io/api/storage/v1beta1" "k8s.io/apimachinery/pkg/runtime" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/kubernetes/pkg/features" ) func addDefaultingFuncs(scheme *runtime.Scheme) error { @@ -34,8 +32,19 @@ func SetDefaults_StorageClass(obj *storagev1beta1.StorageClass) { *obj.ReclaimPolicy = v1.PersistentVolumeReclaimDelete } - if obj.VolumeBindingMode == nil && utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { + if obj.VolumeBindingMode == nil { obj.VolumeBindingMode = new(storagev1beta1.VolumeBindingMode) *obj.VolumeBindingMode = storagev1beta1.VolumeBindingImmediate } } + +func SetDefaults_CSIDriver(obj *storagev1beta1.CSIDriver) { + if obj.Spec.AttachRequired == nil { + obj.Spec.AttachRequired = new(bool) + *(obj.Spec.AttachRequired) = true + } + if obj.Spec.PodInfoOnMount == nil { + obj.Spec.PodInfoOnMount = new(bool) + *(obj.Spec.PodInfoOnMount) = false + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go index be21c4e184c..e8d4471fb8e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go @@ -38,6 +38,76 @@ func init() { // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1beta1.CSIDriver)(nil), (*storage.CSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSIDriver_To_storage_CSIDriver(a.(*v1beta1.CSIDriver), b.(*storage.CSIDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSIDriver)(nil), (*v1beta1.CSIDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSIDriver_To_v1beta1_CSIDriver(a.(*storage.CSIDriver), b.(*v1beta1.CSIDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSIDriverList)(nil), (*storage.CSIDriverList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSIDriverList_To_storage_CSIDriverList(a.(*v1beta1.CSIDriverList), b.(*storage.CSIDriverList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSIDriverList)(nil), (*v1beta1.CSIDriverList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSIDriverList_To_v1beta1_CSIDriverList(a.(*storage.CSIDriverList), b.(*v1beta1.CSIDriverList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSIDriverSpec)(nil), (*storage.CSIDriverSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec(a.(*v1beta1.CSIDriverSpec), b.(*storage.CSIDriverSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSIDriverSpec)(nil), (*v1beta1.CSIDriverSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec(a.(*storage.CSIDriverSpec), b.(*v1beta1.CSIDriverSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSINode)(nil), (*storage.CSINode)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSINode_To_storage_CSINode(a.(*v1beta1.CSINode), b.(*storage.CSINode), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSINode)(nil), (*v1beta1.CSINode)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSINode_To_v1beta1_CSINode(a.(*storage.CSINode), b.(*v1beta1.CSINode), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSINodeDriver)(nil), (*storage.CSINodeDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSINodeDriver_To_storage_CSINodeDriver(a.(*v1beta1.CSINodeDriver), b.(*storage.CSINodeDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSINodeDriver)(nil), (*v1beta1.CSINodeDriver)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSINodeDriver_To_v1beta1_CSINodeDriver(a.(*storage.CSINodeDriver), b.(*v1beta1.CSINodeDriver), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSINodeList)(nil), (*storage.CSINodeList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSINodeList_To_storage_CSINodeList(a.(*v1beta1.CSINodeList), b.(*storage.CSINodeList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSINodeList)(nil), (*v1beta1.CSINodeList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSINodeList_To_v1beta1_CSINodeList(a.(*storage.CSINodeList), b.(*v1beta1.CSINodeList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CSINodeSpec)(nil), (*storage.CSINodeSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec(a.(*v1beta1.CSINodeSpec), b.(*storage.CSINodeSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*storage.CSINodeSpec)(nil), (*v1beta1.CSINodeSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec(a.(*storage.CSINodeSpec), b.(*v1beta1.CSINodeSpec), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta1.StorageClass)(nil), (*storage.StorageClass)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_StorageClass_To_storage_StorageClass(a.(*v1beta1.StorageClass), b.(*storage.StorageClass), scope) }); err != nil { @@ -121,6 +191,168 @@ func RegisterConversions(s *runtime.Scheme) error { return nil } +func autoConvert_v1beta1_CSIDriver_To_storage_CSIDriver(in *v1beta1.CSIDriver, out *storage.CSIDriver, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_CSIDriver_To_storage_CSIDriver is an autogenerated conversion function. +func Convert_v1beta1_CSIDriver_To_storage_CSIDriver(in *v1beta1.CSIDriver, out *storage.CSIDriver, s conversion.Scope) error { + return autoConvert_v1beta1_CSIDriver_To_storage_CSIDriver(in, out, s) +} + +func autoConvert_storage_CSIDriver_To_v1beta1_CSIDriver(in *storage.CSIDriver, out *v1beta1.CSIDriver, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_storage_CSIDriver_To_v1beta1_CSIDriver is an autogenerated conversion function. +func Convert_storage_CSIDriver_To_v1beta1_CSIDriver(in *storage.CSIDriver, out *v1beta1.CSIDriver, s conversion.Scope) error { + return autoConvert_storage_CSIDriver_To_v1beta1_CSIDriver(in, out, s) +} + +func autoConvert_v1beta1_CSIDriverList_To_storage_CSIDriverList(in *v1beta1.CSIDriverList, out *storage.CSIDriverList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]storage.CSIDriver)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_CSIDriverList_To_storage_CSIDriverList is an autogenerated conversion function. +func Convert_v1beta1_CSIDriverList_To_storage_CSIDriverList(in *v1beta1.CSIDriverList, out *storage.CSIDriverList, s conversion.Scope) error { + return autoConvert_v1beta1_CSIDriverList_To_storage_CSIDriverList(in, out, s) +} + +func autoConvert_storage_CSIDriverList_To_v1beta1_CSIDriverList(in *storage.CSIDriverList, out *v1beta1.CSIDriverList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.CSIDriver)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_storage_CSIDriverList_To_v1beta1_CSIDriverList is an autogenerated conversion function. +func Convert_storage_CSIDriverList_To_v1beta1_CSIDriverList(in *storage.CSIDriverList, out *v1beta1.CSIDriverList, s conversion.Scope) error { + return autoConvert_storage_CSIDriverList_To_v1beta1_CSIDriverList(in, out, s) +} + +func autoConvert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec(in *v1beta1.CSIDriverSpec, out *storage.CSIDriverSpec, s conversion.Scope) error { + out.AttachRequired = (*bool)(unsafe.Pointer(in.AttachRequired)) + out.PodInfoOnMount = (*bool)(unsafe.Pointer(in.PodInfoOnMount)) + return nil +} + +// Convert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec is an autogenerated conversion function. +func Convert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec(in *v1beta1.CSIDriverSpec, out *storage.CSIDriverSpec, s conversion.Scope) error { + return autoConvert_v1beta1_CSIDriverSpec_To_storage_CSIDriverSpec(in, out, s) +} + +func autoConvert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec(in *storage.CSIDriverSpec, out *v1beta1.CSIDriverSpec, s conversion.Scope) error { + out.AttachRequired = (*bool)(unsafe.Pointer(in.AttachRequired)) + out.PodInfoOnMount = (*bool)(unsafe.Pointer(in.PodInfoOnMount)) + return nil +} + +// Convert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec is an autogenerated conversion function. +func Convert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec(in *storage.CSIDriverSpec, out *v1beta1.CSIDriverSpec, s conversion.Scope) error { + return autoConvert_storage_CSIDriverSpec_To_v1beta1_CSIDriverSpec(in, out, s) +} + +func autoConvert_v1beta1_CSINode_To_storage_CSINode(in *v1beta1.CSINode, out *storage.CSINode, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_CSINode_To_storage_CSINode is an autogenerated conversion function. +func Convert_v1beta1_CSINode_To_storage_CSINode(in *v1beta1.CSINode, out *storage.CSINode, s conversion.Scope) error { + return autoConvert_v1beta1_CSINode_To_storage_CSINode(in, out, s) +} + +func autoConvert_storage_CSINode_To_v1beta1_CSINode(in *storage.CSINode, out *v1beta1.CSINode, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_storage_CSINode_To_v1beta1_CSINode is an autogenerated conversion function. +func Convert_storage_CSINode_To_v1beta1_CSINode(in *storage.CSINode, out *v1beta1.CSINode, s conversion.Scope) error { + return autoConvert_storage_CSINode_To_v1beta1_CSINode(in, out, s) +} + +func autoConvert_v1beta1_CSINodeDriver_To_storage_CSINodeDriver(in *v1beta1.CSINodeDriver, out *storage.CSINodeDriver, s conversion.Scope) error { + out.Name = in.Name + out.NodeID = in.NodeID + out.TopologyKeys = *(*[]string)(unsafe.Pointer(&in.TopologyKeys)) + return nil +} + +// Convert_v1beta1_CSINodeDriver_To_storage_CSINodeDriver is an autogenerated conversion function. +func Convert_v1beta1_CSINodeDriver_To_storage_CSINodeDriver(in *v1beta1.CSINodeDriver, out *storage.CSINodeDriver, s conversion.Scope) error { + return autoConvert_v1beta1_CSINodeDriver_To_storage_CSINodeDriver(in, out, s) +} + +func autoConvert_storage_CSINodeDriver_To_v1beta1_CSINodeDriver(in *storage.CSINodeDriver, out *v1beta1.CSINodeDriver, s conversion.Scope) error { + out.Name = in.Name + out.NodeID = in.NodeID + out.TopologyKeys = *(*[]string)(unsafe.Pointer(&in.TopologyKeys)) + return nil +} + +// Convert_storage_CSINodeDriver_To_v1beta1_CSINodeDriver is an autogenerated conversion function. +func Convert_storage_CSINodeDriver_To_v1beta1_CSINodeDriver(in *storage.CSINodeDriver, out *v1beta1.CSINodeDriver, s conversion.Scope) error { + return autoConvert_storage_CSINodeDriver_To_v1beta1_CSINodeDriver(in, out, s) +} + +func autoConvert_v1beta1_CSINodeList_To_storage_CSINodeList(in *v1beta1.CSINodeList, out *storage.CSINodeList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]storage.CSINode)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_CSINodeList_To_storage_CSINodeList is an autogenerated conversion function. +func Convert_v1beta1_CSINodeList_To_storage_CSINodeList(in *v1beta1.CSINodeList, out *storage.CSINodeList, s conversion.Scope) error { + return autoConvert_v1beta1_CSINodeList_To_storage_CSINodeList(in, out, s) +} + +func autoConvert_storage_CSINodeList_To_v1beta1_CSINodeList(in *storage.CSINodeList, out *v1beta1.CSINodeList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.CSINode)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_storage_CSINodeList_To_v1beta1_CSINodeList is an autogenerated conversion function. +func Convert_storage_CSINodeList_To_v1beta1_CSINodeList(in *storage.CSINodeList, out *v1beta1.CSINodeList, s conversion.Scope) error { + return autoConvert_storage_CSINodeList_To_v1beta1_CSINodeList(in, out, s) +} + +func autoConvert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec(in *v1beta1.CSINodeSpec, out *storage.CSINodeSpec, s conversion.Scope) error { + out.Drivers = *(*[]storage.CSINodeDriver)(unsafe.Pointer(&in.Drivers)) + return nil +} + +// Convert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec is an autogenerated conversion function. +func Convert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec(in *v1beta1.CSINodeSpec, out *storage.CSINodeSpec, s conversion.Scope) error { + return autoConvert_v1beta1_CSINodeSpec_To_storage_CSINodeSpec(in, out, s) +} + +func autoConvert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec(in *storage.CSINodeSpec, out *v1beta1.CSINodeSpec, s conversion.Scope) error { + out.Drivers = *(*[]v1beta1.CSINodeDriver)(unsafe.Pointer(&in.Drivers)) + return nil +} + +// Convert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec is an autogenerated conversion function. +func Convert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec(in *storage.CSINodeSpec, out *v1beta1.CSINodeSpec, s conversion.Scope) error { + return autoConvert_storage_CSINodeSpec_To_v1beta1_CSINodeSpec(in, out, s) +} + func autoConvert_v1beta1_StorageClass_To_storage_StorageClass(in *v1beta1.StorageClass, out *storage.StorageClass, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta out.Provisioner = in.Provisioner diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.defaults.go index 80830c4db2d..5b674dbc7ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.defaults.go @@ -29,11 +29,24 @@ import ( // Public to allow building arbitrary schemes. // All generated defaulters are covering - they call all nested defaulters. func RegisterDefaults(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&v1beta1.CSIDriver{}, func(obj interface{}) { SetObjectDefaults_CSIDriver(obj.(*v1beta1.CSIDriver)) }) + scheme.AddTypeDefaultingFunc(&v1beta1.CSIDriverList{}, func(obj interface{}) { SetObjectDefaults_CSIDriverList(obj.(*v1beta1.CSIDriverList)) }) scheme.AddTypeDefaultingFunc(&v1beta1.StorageClass{}, func(obj interface{}) { SetObjectDefaults_StorageClass(obj.(*v1beta1.StorageClass)) }) scheme.AddTypeDefaultingFunc(&v1beta1.StorageClassList{}, func(obj interface{}) { SetObjectDefaults_StorageClassList(obj.(*v1beta1.StorageClassList)) }) return nil } +func SetObjectDefaults_CSIDriver(in *v1beta1.CSIDriver) { + SetDefaults_CSIDriver(in) +} + +func SetObjectDefaults_CSIDriverList(in *v1beta1.CSIDriverList) { + for i := range in.Items { + a := &in.Items[i] + SetObjectDefaults_CSIDriver(a) + } +} + func SetObjectDefaults_StorageClass(in *v1beta1.StorageClass) { SetDefaults_StorageClass(in) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/BUILD index fec90d3adcb..8051af18fbb 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/BUILD @@ -15,29 +15,21 @@ go_library( "//pkg/apis/core/helper:go_default_library", "//pkg/apis/core/validation:go_default_library", "//pkg/apis/storage:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "validation_test.go", - ], + srcs = ["validation_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/storage:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/validation.go index 48d9ecde476..518e04a9de3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/validation/validation.go @@ -17,6 +17,7 @@ limitations under the License. package validation import ( + "fmt" "reflect" "strings" @@ -24,12 +25,10 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" - utilfeature "k8s.io/apiserver/pkg/util/feature" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/apis/storage" - "k8s.io/kubernetes/pkg/features" ) const ( @@ -38,6 +37,8 @@ const ( maxAttachedVolumeMetadataSize = 256 * (1 << 10) // 256 kB maxVolumeErrorMessageSize = 1024 + + csiNodeIDMaxLength = 128 ) // ValidateStorageClass validates a StorageClass. @@ -46,7 +47,6 @@ func ValidateStorageClass(storageClass *storage.StorageClass) field.ErrorList { allErrs = append(allErrs, validateProvisioner(storageClass.Provisioner, field.NewPath("provisioner"))...) allErrs = append(allErrs, validateParameters(storageClass.Parameters, field.NewPath("parameters"))...) allErrs = append(allErrs, validateReclaimPolicy(storageClass.ReclaimPolicy, field.NewPath("reclaimPolicy"))...) - allErrs = append(allErrs, validateAllowVolumeExpansion(storageClass.AllowVolumeExpansion, field.NewPath("allowVolumeExpansion"))...) allErrs = append(allErrs, validateVolumeBindingMode(storageClass.VolumeBindingMode, field.NewPath("volumeBindingMode"))...) allErrs = append(allErrs, validateAllowedTopologies(storageClass.AllowedTopologies, field.NewPath("allowedTopologies"))...) @@ -123,16 +123,6 @@ func validateReclaimPolicy(reclaimPolicy *api.PersistentVolumeReclaimPolicy, fld return allErrs } -// validateAllowVolumeExpansion tests that if ExpandPersistentVolumes feature gate is disabled, whether the AllowVolumeExpansion filed -// of storage class is set -func validateAllowVolumeExpansion(allowExpand *bool, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if allowExpand != nil && !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) { - allErrs = append(allErrs, field.Forbidden(fldPath, "field is disabled by feature-gate ExpandPersistentVolumes")) - } - return allErrs -} - // ValidateVolumeAttachment validates a VolumeAttachment. This function is common for v1 and v1beta1 objects, func ValidateVolumeAttachment(volumeAttachment *storage.VolumeAttachment) field.ErrorList { allErrs := apivalidation.ValidateObjectMeta(&volumeAttachment.ObjectMeta, false, apivalidation.ValidateClassName, field.NewPath("metadata")) @@ -244,14 +234,10 @@ var supportedVolumeBindingModes = sets.NewString(string(storage.VolumeBindingImm // validateVolumeBindingMode tests that VolumeBindingMode specifies valid values. func validateVolumeBindingMode(mode *storage.VolumeBindingMode, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - if mode == nil { - allErrs = append(allErrs, field.Required(fldPath, "")) - } else if !supportedVolumeBindingModes.Has(string(*mode)) { - allErrs = append(allErrs, field.NotSupported(fldPath, mode, supportedVolumeBindingModes.List())) - } - } else if mode != nil { - allErrs = append(allErrs, field.Forbidden(fldPath, "field is disabled by feature-gate VolumeScheduling")) + if mode == nil { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else if !supportedVolumeBindingModes.Has(string(*mode)) { + allErrs = append(allErrs, field.NotSupported(fldPath, mode, supportedVolumeBindingModes.List())) } return allErrs @@ -265,10 +251,6 @@ func validateAllowedTopologies(topologies []api.TopologySelectorTerm, fldPath *f return allErrs } - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - allErrs = append(allErrs, field.Forbidden(fldPath, "field is disabled by feature-gate VolumeScheduling")) - } - rawTopologies := make([]map[string]sets.String, len(topologies)) for i, term := range topologies { idxPath := fldPath.Index(i) @@ -287,3 +269,144 @@ func validateAllowedTopologies(topologies []api.TopologySelectorTerm, fldPath *f return allErrs } + +// ValidateCSINode validates a CSINode. +func ValidateCSINode(csiNode *storage.CSINode) field.ErrorList { + allErrs := apivalidation.ValidateObjectMeta(&csiNode.ObjectMeta, false, apivalidation.ValidateNodeName, field.NewPath("metadata")) + allErrs = append(allErrs, validateCSINodeSpec(&csiNode.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateCSINodeUpdate validates a CSINode. +func ValidateCSINodeUpdate(new, old *storage.CSINode) field.ErrorList { + allErrs := ValidateCSINode(new) + + // Validate modifying fields inside an existing CSINodeDriver entry is not allowed + for _, oldDriver := range old.Spec.Drivers { + for _, newDriver := range new.Spec.Drivers { + if oldDriver.Name == newDriver.Name { + if !apiequality.Semantic.DeepEqual(oldDriver, newDriver) { + allErrs = append(allErrs, field.Invalid(field.NewPath("CSINodeDriver"), newDriver, "field is immutable")) + } + } + } + } + + return allErrs +} + +// ValidateCSINodeSpec tests that the specified CSINodeSpec has valid data. +func validateCSINodeSpec( + spec *storage.CSINodeSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, validateCSINodeDrivers(spec.Drivers, fldPath.Child("drivers"))...) + return allErrs +} + +// ValidateCSINodeDrivers tests that the specified CSINodeDrivers have valid data. +func validateCSINodeDrivers(drivers []storage.CSINodeDriver, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + driverNamesInSpecs := make(sets.String) + for i, driver := range drivers { + idxPath := fldPath.Index(i) + allErrs = append(allErrs, validateCSINodeDriver(driver, driverNamesInSpecs, idxPath)...) + } + + return allErrs +} + +// validateCSINodeDriverNodeID tests if Name in CSINodeDriver is a valid node id. +func validateCSINodeDriverNodeID(nodeID string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + // nodeID is always required + if len(nodeID) == 0 { + allErrs = append(allErrs, field.Required(fldPath, nodeID)) + } + if len(nodeID) > csiNodeIDMaxLength { + allErrs = append(allErrs, field.Invalid(fldPath, nodeID, fmt.Sprintf("must be %d characters or less", csiNodeIDMaxLength))) + } + return allErrs +} + +// validateCSINodeDriver tests if CSINodeDriver has valid entries +func validateCSINodeDriver(driver storage.CSINodeDriver, driverNamesInSpecs sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + allErrs = append(allErrs, apivalidation.ValidateCSIDriverName(driver.Name, fldPath.Child("name"))...) + allErrs = append(allErrs, validateCSINodeDriverNodeID(driver.NodeID, fldPath.Child("nodeID"))...) + + // check for duplicate entries for the same driver in specs + if driverNamesInSpecs.Has(driver.Name) { + allErrs = append(allErrs, field.Duplicate(fldPath.Child("name"), driver.Name)) + } + driverNamesInSpecs.Insert(driver.Name) + topoKeys := make(sets.String) + for _, key := range driver.TopologyKeys { + if len(key) == 0 { + allErrs = append(allErrs, field.Required(fldPath, key)) + } + + if topoKeys.Has(key) { + allErrs = append(allErrs, field.Duplicate(fldPath, key)) + } + topoKeys.Insert(key) + + for _, msg := range validation.IsQualifiedName(key) { + allErrs = append(allErrs, field.Invalid(fldPath, driver.TopologyKeys, msg)) + } + } + + return allErrs +} + +// ValidateCSIDriver validates a CSIDriver. +func ValidateCSIDriver(csiDriver *storage.CSIDriver) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, apivalidation.ValidateCSIDriverName(csiDriver.Name, field.NewPath("name"))...) + + allErrs = append(allErrs, validateCSIDriverSpec(&csiDriver.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateCSIDriverUpdate validates a CSIDriver. +func ValidateCSIDriverUpdate(new, old *storage.CSIDriver) field.ErrorList { + allErrs := ValidateCSIDriver(new) + + // Spec is read-only + // If this ever relaxes in the future, make sure to increment the Generation number in PrepareForUpdate + if !apiequality.Semantic.DeepEqual(old.Spec, new.Spec) { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec"), new.Spec, "field is immutable")) + } + return allErrs +} + +// ValidateCSIDriverSpec tests that the specified CSIDriverSpec +// has valid data. +func validateCSIDriverSpec( + spec *storage.CSIDriverSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, validateAttachRequired(spec.AttachRequired, fldPath.Child("attachedRequired"))...) + allErrs = append(allErrs, validatePodInfoOnMount(spec.PodInfoOnMount, fldPath.Child("podInfoOnMount"))...) + return allErrs +} + +// validateAttachRequired tests if attachRequired is set for CSIDriver. +func validateAttachRequired(attachRequired *bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if attachRequired == nil { + allErrs = append(allErrs, field.Required(fldPath, "")) + } + + return allErrs +} + +// validatePodInfoOnMount tests if podInfoOnMount is set for CSIDriver. +func validatePodInfoOnMount(podInfoOnMount *bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if podInfoOnMount == nil { + allErrs = append(allErrs, field.Required(fldPath, "")) + } + + return allErrs +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go index f1391c98a2b..69d40d6eb2a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go @@ -25,6 +25,196 @@ import ( core "k8s.io/kubernetes/pkg/apis/core" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriver) DeepCopyInto(out *CSIDriver) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriver. +func (in *CSIDriver) DeepCopy() *CSIDriver { + if in == nil { + return nil + } + out := new(CSIDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriver) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverList) DeepCopyInto(out *CSIDriverList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSIDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverList. +func (in *CSIDriverList) DeepCopy() *CSIDriverList { + if in == nil { + return nil + } + out := new(CSIDriverList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriverList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverSpec) DeepCopyInto(out *CSIDriverSpec) { + *out = *in + if in.AttachRequired != nil { + in, out := &in.AttachRequired, &out.AttachRequired + *out = new(bool) + **out = **in + } + if in.PodInfoOnMount != nil { + in, out := &in.PodInfoOnMount, &out.PodInfoOnMount + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverSpec. +func (in *CSIDriverSpec) DeepCopy() *CSIDriverSpec { + if in == nil { + return nil + } + out := new(CSIDriverSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINode) DeepCopyInto(out *CSINode) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINode. +func (in *CSINode) DeepCopy() *CSINode { + if in == nil { + return nil + } + out := new(CSINode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINode) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeDriver) DeepCopyInto(out *CSINodeDriver) { + *out = *in + if in.TopologyKeys != nil { + in, out := &in.TopologyKeys, &out.TopologyKeys + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeDriver. +func (in *CSINodeDriver) DeepCopy() *CSINodeDriver { + if in == nil { + return nil + } + out := new(CSINodeDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeList) DeepCopyInto(out *CSINodeList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSINode, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeList. +func (in *CSINodeList) DeepCopy() *CSINodeList { + if in == nil { + return nil + } + out := new(CSINodeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINodeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeSpec) DeepCopyInto(out *CSINodeSpec) { + *out = *in + if in.Drivers != nil { + in, out := &in.Drivers, &out.Drivers + *out = make([]CSINodeDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeSpec. +func (in *CSINodeSpec) DeepCopy() *CSINodeSpec { + if in == nil { + return nil + } + out := new(CSINodeSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StorageClass) DeepCopyInto(out *StorageClass) { *out = *in diff --git a/vendor/k8s.io/kubernetes/pkg/auth/OWNERS b/vendor/k8s.io/kubernetes/pkg/auth/OWNERS index a6d8763e5a7..3574e453dda 100644 --- a/vendor/k8s.io/kubernetes/pkg/auth/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/auth/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - erictune - liggitt diff --git a/vendor/k8s.io/kubernetes/pkg/client/OWNERS b/vendor/k8s.io/kubernetes/pkg/client/OWNERS index 996779d7475..0ecc092a750 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/client/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - deads2k diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/.import-restrictions b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/.import-restrictions index 89c2cc64e2d..d3a3fedea37 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/.import-restrictions +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/.import-restrictions @@ -3,7 +3,6 @@ { "SelectorRegexp": "k8s[.]io/kubernetes/pkg/client/unversioned", "AllowedPrefixes": [ - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ] } ] diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/BUILD index 09144c4c39a..72b70c039e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/client/clientset_generated/internalclientset/typed/events/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/networking/internalversion:go_default_library", + "//pkg/client/clientset_generated/internalclientset/typed/node/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/policy/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion:go_default_library", @@ -63,6 +64,7 @@ filegroup( "//pkg/client/clientset_generated/internalclientset/typed/events/internalversion:all-srcs", "//pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion:all-srcs", "//pkg/client/clientset_generated/internalclientset/typed/networking/internalversion:all-srcs", + "//pkg/client/clientset_generated/internalclientset/typed/node/internalversion:all-srcs", "//pkg/client/clientset_generated/internalclientset/typed/policy/internalversion:all-srcs", "//pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion:all-srcs", "//pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go index 7ea13e9b633..7a6bffeb462 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go @@ -29,9 +29,11 @@ import ( autoscalinginternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/internalversion" batchinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/internalversion" certificatesinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/internalversion" + coordinationinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion" coreinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" extensionsinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion" networkinginternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion" + nodeinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion" policyinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion" rbacinternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion" schedulinginternalversion "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion" @@ -48,8 +50,10 @@ type Interface interface { Autoscaling() autoscalinginternalversion.AutoscalingInterface Batch() batchinternalversion.BatchInterface Certificates() certificatesinternalversion.CertificatesInterface + Coordination() coordinationinternalversion.CoordinationInterface Extensions() extensionsinternalversion.ExtensionsInterface Networking() networkinginternalversion.NetworkingInterface + Node() nodeinternalversion.NodeInterface Policy() policyinternalversion.PolicyInterface Rbac() rbacinternalversion.RbacInterface Scheduling() schedulinginternalversion.SchedulingInterface @@ -68,8 +72,10 @@ type Clientset struct { autoscaling *autoscalinginternalversion.AutoscalingClient batch *batchinternalversion.BatchClient certificates *certificatesinternalversion.CertificatesClient + coordination *coordinationinternalversion.CoordinationClient extensions *extensionsinternalversion.ExtensionsClient networking *networkinginternalversion.NetworkingClient + node *nodeinternalversion.NodeClient policy *policyinternalversion.PolicyClient rbac *rbacinternalversion.RbacClient scheduling *schedulinginternalversion.SchedulingClient @@ -116,6 +122,11 @@ func (c *Clientset) Certificates() certificatesinternalversion.CertificatesInter return c.certificates } +// Coordination retrieves the CoordinationClient +func (c *Clientset) Coordination() coordinationinternalversion.CoordinationInterface { + return c.coordination +} + // Extensions retrieves the ExtensionsClient func (c *Clientset) Extensions() extensionsinternalversion.ExtensionsInterface { return c.extensions @@ -126,6 +137,11 @@ func (c *Clientset) Networking() networkinginternalversion.NetworkingInterface { return c.networking } +// Node retrieves the NodeClient +func (c *Clientset) Node() nodeinternalversion.NodeInterface { + return c.node +} + // Policy retrieves the PolicyClient func (c *Clientset) Policy() policyinternalversion.PolicyInterface { return c.policy @@ -194,6 +210,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.coordination, err = coordinationinternalversion.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.extensions, err = extensionsinternalversion.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -202,6 +222,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.node, err = nodeinternalversion.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.policy, err = policyinternalversion.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -238,8 +262,10 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { cs.autoscaling = autoscalinginternalversion.NewForConfigOrDie(c) cs.batch = batchinternalversion.NewForConfigOrDie(c) cs.certificates = certificatesinternalversion.NewForConfigOrDie(c) + cs.coordination = coordinationinternalversion.NewForConfigOrDie(c) cs.extensions = extensionsinternalversion.NewForConfigOrDie(c) cs.networking = networkinginternalversion.NewForConfigOrDie(c) + cs.node = nodeinternalversion.NewForConfigOrDie(c) cs.policy = policyinternalversion.NewForConfigOrDie(c) cs.rbac = rbacinternalversion.NewForConfigOrDie(c) cs.scheduling = schedulinginternalversion.NewForConfigOrDie(c) @@ -260,8 +286,10 @@ func New(c rest.Interface) *Clientset { cs.autoscaling = autoscalinginternalversion.New(c) cs.batch = batchinternalversion.New(c) cs.certificates = certificatesinternalversion.New(c) + cs.coordination = coordinationinternalversion.New(c) cs.extensions = extensionsinternalversion.New(c) cs.networking = networkinginternalversion.New(c) + cs.node = nodeinternalversion.New(c) cs.policy = policyinternalversion.New(c) cs.rbac = rbacinternalversion.New(c) cs.scheduling = schedulinginternalversion.New(c) diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/BUILD index 86f91055b34..f5075035ab1 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/apis/events/install:go_default_library", "//pkg/apis/extensions/install:go_default_library", "//pkg/apis/networking/install:go_default_library", + "//pkg/apis/node/install:go_default_library", "//pkg/apis/policy/install:go_default_library", "//pkg/apis/rbac/install:go_default_library", "//pkg/apis/scheduling/install:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/register.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/register.go index 81fdefcbf26..d304b182c21 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/register.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme/register.go @@ -30,9 +30,11 @@ import ( autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling/install" batch "k8s.io/kubernetes/pkg/apis/batch/install" certificates "k8s.io/kubernetes/pkg/apis/certificates/install" + coordination "k8s.io/kubernetes/pkg/apis/coordination/install" core "k8s.io/kubernetes/pkg/apis/core/install" extensions "k8s.io/kubernetes/pkg/apis/extensions/install" networking "k8s.io/kubernetes/pkg/apis/networking/install" + node "k8s.io/kubernetes/pkg/apis/node/install" policy "k8s.io/kubernetes/pkg/apis/policy/install" rbac "k8s.io/kubernetes/pkg/apis/rbac/install" scheduling "k8s.io/kubernetes/pkg/apis/scheduling/install" @@ -58,8 +60,10 @@ func Install(scheme *runtime.Scheme) { autoscaling.Install(scheme) batch.Install(scheme) certificates.Install(scheme) + coordination.Install(scheme) extensions.Install(scheme) networking.Install(scheme) + node.Install(scheme) policy.Install(scheme) rbac.Install(scheme) scheduling.Install(scheme) diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/BUILD index f52baa4f645..3943a53c91e 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/BUILD @@ -11,7 +11,6 @@ go_library( "admissionregistration_client.go", "doc.go", "generated_expansion.go", - "initializerconfiguration.go", "mutatingwebhookconfiguration.go", "validatingwebhookconfiguration.go", ], diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/admissionregistration_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/admissionregistration_client.go index 9ecefad4c96..db4bc4f46c4 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/admissionregistration_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/admissionregistration_client.go @@ -25,7 +25,6 @@ import ( type AdmissionregistrationInterface interface { RESTClient() rest.Interface - InitializerConfigurationsGetter MutatingWebhookConfigurationsGetter ValidatingWebhookConfigurationsGetter } @@ -35,10 +34,6 @@ type AdmissionregistrationClient struct { restClient rest.Interface } -func (c *AdmissionregistrationClient) InitializerConfigurations() InitializerConfigurationInterface { - return newInitializerConfigurations(c) -} - func (c *AdmissionregistrationClient) MutatingWebhookConfigurations() MutatingWebhookConfigurationInterface { return newMutatingWebhookConfigurations(c) } diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/generated_expansion.go index 4cc8f66b772..f27ec5c64ce 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/generated_expansion.go @@ -18,8 +18,6 @@ limitations under the License. package internalversion -type InitializerConfigurationExpansion interface{} - type MutatingWebhookConfigurationExpansion interface{} type ValidatingWebhookConfigurationExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/initializerconfiguration.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/initializerconfiguration.go deleted file mode 100644 index 3cae439c4a3..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion/initializerconfiguration.go +++ /dev/null @@ -1,164 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package internalversion - -import ( - "time" - - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" - admissionregistration "k8s.io/kubernetes/pkg/apis/admissionregistration" - scheme "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" -) - -// InitializerConfigurationsGetter has a method to return a InitializerConfigurationInterface. -// A group's client should implement this interface. -type InitializerConfigurationsGetter interface { - InitializerConfigurations() InitializerConfigurationInterface -} - -// InitializerConfigurationInterface has methods to work with InitializerConfiguration resources. -type InitializerConfigurationInterface interface { - Create(*admissionregistration.InitializerConfiguration) (*admissionregistration.InitializerConfiguration, error) - Update(*admissionregistration.InitializerConfiguration) (*admissionregistration.InitializerConfiguration, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*admissionregistration.InitializerConfiguration, error) - List(opts v1.ListOptions) (*admissionregistration.InitializerConfigurationList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *admissionregistration.InitializerConfiguration, err error) - InitializerConfigurationExpansion -} - -// initializerConfigurations implements InitializerConfigurationInterface -type initializerConfigurations struct { - client rest.Interface -} - -// newInitializerConfigurations returns a InitializerConfigurations -func newInitializerConfigurations(c *AdmissionregistrationClient) *initializerConfigurations { - return &initializerConfigurations{ - client: c.RESTClient(), - } -} - -// Get takes name of the initializerConfiguration, and returns the corresponding initializerConfiguration object, and an error if there is any. -func (c *initializerConfigurations) Get(name string, options v1.GetOptions) (result *admissionregistration.InitializerConfiguration, err error) { - result = &admissionregistration.InitializerConfiguration{} - err = c.client.Get(). - Resource("initializerconfigurations"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of InitializerConfigurations that match those selectors. -func (c *initializerConfigurations) List(opts v1.ListOptions) (result *admissionregistration.InitializerConfigurationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &admissionregistration.InitializerConfigurationList{} - err = c.client.Get(). - Resource("initializerconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested initializerConfigurations. -func (c *initializerConfigurations) Watch(opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("initializerconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch() -} - -// Create takes the representation of a initializerConfiguration and creates it. Returns the server's representation of the initializerConfiguration, and an error, if there is any. -func (c *initializerConfigurations) Create(initializerConfiguration *admissionregistration.InitializerConfiguration) (result *admissionregistration.InitializerConfiguration, err error) { - result = &admissionregistration.InitializerConfiguration{} - err = c.client.Post(). - Resource("initializerconfigurations"). - Body(initializerConfiguration). - Do(). - Into(result) - return -} - -// Update takes the representation of a initializerConfiguration and updates it. Returns the server's representation of the initializerConfiguration, and an error, if there is any. -func (c *initializerConfigurations) Update(initializerConfiguration *admissionregistration.InitializerConfiguration) (result *admissionregistration.InitializerConfiguration, err error) { - result = &admissionregistration.InitializerConfiguration{} - err = c.client.Put(). - Resource("initializerconfigurations"). - Name(initializerConfiguration.Name). - Body(initializerConfiguration). - Do(). - Into(result) - return -} - -// Delete takes name of the initializerConfiguration and deletes it. Returns an error if one occurs. -func (c *initializerConfigurations) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Resource("initializerconfigurations"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *initializerConfigurations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("initializerconfigurations"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Timeout(timeout). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched initializerConfiguration. -func (c *initializerConfigurations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *admissionregistration.InitializerConfiguration, err error) { - result = &admissionregistration.InitializerConfiguration{} - err = c.client.Patch(pt). - Resource("initializerconfigurations"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/BUILD new file mode 100644 index 00000000000..abf2f9c479d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/BUILD @@ -0,0 +1,38 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "coordination_client.go", + "doc.go", + "generated_expansion.go", + "lease.go", + ], + importpath = "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/coordination:go_default_library", + "//pkg/client/clientset_generated/internalclientset/scheme:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/coordination_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/coordination_client.go new file mode 100644 index 00000000000..af5307b7602 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/coordination_client.go @@ -0,0 +1,96 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + rest "k8s.io/client-go/rest" + "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" +) + +type CoordinationInterface interface { + RESTClient() rest.Interface + LeasesGetter +} + +// CoordinationClient is used to interact with features provided by the coordination.k8s.io group. +type CoordinationClient struct { + restClient rest.Interface +} + +func (c *CoordinationClient) Leases(namespace string) LeaseInterface { + return newLeases(c, namespace) +} + +// NewForConfig creates a new CoordinationClient for the given config. +func NewForConfig(c *rest.Config) (*CoordinationClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CoordinationClient{client}, nil +} + +// NewForConfigOrDie creates a new CoordinationClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *CoordinationClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CoordinationClient for the given RESTClient. +func New(c rest.Interface) *CoordinationClient { + return &CoordinationClient{c} +} + +func setConfigDefaults(config *rest.Config) error { + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("coordination.k8s.io")[0].Group { + gv := scheme.Scheme.PrioritizedVersionsForGroup("coordination.k8s.io")[0] + config.GroupVersion = &gv + } + config.NegotiatedSerializer = scheme.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CoordinationClient) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/doc.go new file mode 100644 index 00000000000..86602442bab --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package internalversion diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/generated_expansion.go new file mode 100644 index 00000000000..852379fbd9f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +type LeaseExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/lease.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/lease.go new file mode 100644 index 00000000000..fd4987e4897 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/coordination/internalversion/lease.go @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" + coordination "k8s.io/kubernetes/pkg/apis/coordination" + scheme "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" +) + +// LeasesGetter has a method to return a LeaseInterface. +// A group's client should implement this interface. +type LeasesGetter interface { + Leases(namespace string) LeaseInterface +} + +// LeaseInterface has methods to work with Lease resources. +type LeaseInterface interface { + Create(*coordination.Lease) (*coordination.Lease, error) + Update(*coordination.Lease) (*coordination.Lease, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*coordination.Lease, error) + List(opts v1.ListOptions) (*coordination.LeaseList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *coordination.Lease, err error) + LeaseExpansion +} + +// leases implements LeaseInterface +type leases struct { + client rest.Interface + ns string +} + +// newLeases returns a Leases +func newLeases(c *CoordinationClient, namespace string) *leases { + return &leases{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the lease, and returns the corresponding lease object, and an error if there is any. +func (c *leases) Get(name string, options v1.GetOptions) (result *coordination.Lease, err error) { + result = &coordination.Lease{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Leases that match those selectors. +func (c *leases) List(opts v1.ListOptions) (result *coordination.LeaseList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &coordination.LeaseList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested leases. +func (c *leases) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a lease and creates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Create(lease *coordination.Lease) (result *coordination.Lease, err error) { + result = &coordination.Lease{} + err = c.client.Post(). + Namespace(c.ns). + Resource("leases"). + Body(lease). + Do(). + Into(result) + return +} + +// Update takes the representation of a lease and updates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Update(lease *coordination.Lease) (result *coordination.Lease, err error) { + result = &coordination.Lease{} + err = c.client.Put(). + Namespace(c.ns). + Resource("leases"). + Name(lease.Name). + Body(lease). + Do(). + Into(result) + return +} + +// Delete takes name of the lease and deletes it. Returns an error if one occurs. +func (c *leases) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *leases) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched lease. +func (c *leases) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *coordination.Lease, err error) { + result = &coordination.Lease{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("leases"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/BUILD index 6fb0ee1557e..b8183a36d95 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/BUILD @@ -11,15 +11,10 @@ go_library( "doc.go", "extensions_client.go", "generated_expansion.go", - "ingress.go", ], importpath = "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion", deps = [ - "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset/scheme:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/extensions_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/extensions_client.go index b7a7df1b96c..44e27ced7ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/extensions_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/extensions_client.go @@ -25,7 +25,6 @@ import ( type ExtensionsInterface interface { RESTClient() rest.Interface - IngressesGetter } // ExtensionsClient is used to interact with features provided by the extensions group. @@ -33,10 +32,6 @@ type ExtensionsClient struct { restClient rest.Interface } -func (c *ExtensionsClient) Ingresses(namespace string) IngressInterface { - return newIngresses(c, namespace) -} - // NewForConfig creates a new ExtensionsClient for the given config. func NewForConfig(c *rest.Config) (*ExtensionsClient, error) { config := *c diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/generated_expansion.go index 3c1593ccf5e..1b59c8431ce 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/generated_expansion.go @@ -17,5 +17,3 @@ limitations under the License. // Code generated by client-gen. DO NOT EDIT. package internalversion - -type IngressExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/BUILD index aa720eb4415..3c861d7b8cc 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/BUILD @@ -10,6 +10,7 @@ go_library( srcs = [ "doc.go", "generated_expansion.go", + "ingress.go", "networking_client.go", "networkpolicy.go", ], diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/generated_expansion.go index 8406486f4d0..d7e2a55283a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/generated_expansion.go @@ -18,4 +18,6 @@ limitations under the License. package internalversion +type IngressExpansion interface{} + type NetworkPolicyExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/ingress.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/ingress.go similarity index 80% rename from vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/ingress.go rename to vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/ingress.go index 2b8f27e39aa..89fbe0538b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion/ingress.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/ingress.go @@ -25,7 +25,7 @@ import ( types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" rest "k8s.io/client-go/rest" - extensions "k8s.io/kubernetes/pkg/apis/extensions" + networking "k8s.io/kubernetes/pkg/apis/networking" scheme "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" ) @@ -37,15 +37,15 @@ type IngressesGetter interface { // IngressInterface has methods to work with Ingress resources. type IngressInterface interface { - Create(*extensions.Ingress) (*extensions.Ingress, error) - Update(*extensions.Ingress) (*extensions.Ingress, error) - UpdateStatus(*extensions.Ingress) (*extensions.Ingress, error) + Create(*networking.Ingress) (*networking.Ingress, error) + Update(*networking.Ingress) (*networking.Ingress, error) + UpdateStatus(*networking.Ingress) (*networking.Ingress, error) Delete(name string, options *v1.DeleteOptions) error DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*extensions.Ingress, error) - List(opts v1.ListOptions) (*extensions.IngressList, error) + Get(name string, options v1.GetOptions) (*networking.Ingress, error) + List(opts v1.ListOptions) (*networking.IngressList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *networking.Ingress, err error) IngressExpansion } @@ -56,7 +56,7 @@ type ingresses struct { } // newIngresses returns a Ingresses -func newIngresses(c *ExtensionsClient, namespace string) *ingresses { +func newIngresses(c *NetworkingClient, namespace string) *ingresses { return &ingresses{ client: c.RESTClient(), ns: namespace, @@ -64,8 +64,8 @@ func newIngresses(c *ExtensionsClient, namespace string) *ingresses { } // Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. -func (c *ingresses) Get(name string, options v1.GetOptions) (result *extensions.Ingress, err error) { - result = &extensions.Ingress{} +func (c *ingresses) Get(name string, options v1.GetOptions) (result *networking.Ingress, err error) { + result = &networking.Ingress{} err = c.client.Get(). Namespace(c.ns). Resource("ingresses"). @@ -77,12 +77,12 @@ func (c *ingresses) Get(name string, options v1.GetOptions) (result *extensions. } // List takes label and field selectors, and returns the list of Ingresses that match those selectors. -func (c *ingresses) List(opts v1.ListOptions) (result *extensions.IngressList, err error) { +func (c *ingresses) List(opts v1.ListOptions) (result *networking.IngressList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second } - result = &extensions.IngressList{} + result = &networking.IngressList{} err = c.client.Get(). Namespace(c.ns). Resource("ingresses"). @@ -109,8 +109,8 @@ func (c *ingresses) Watch(opts v1.ListOptions) (watch.Interface, error) { } // Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. -func (c *ingresses) Create(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { - result = &extensions.Ingress{} +func (c *ingresses) Create(ingress *networking.Ingress) (result *networking.Ingress, err error) { + result = &networking.Ingress{} err = c.client.Post(). Namespace(c.ns). Resource("ingresses"). @@ -121,8 +121,8 @@ func (c *ingresses) Create(ingress *extensions.Ingress) (result *extensions.Ingr } // Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. -func (c *ingresses) Update(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { - result = &extensions.Ingress{} +func (c *ingresses) Update(ingress *networking.Ingress) (result *networking.Ingress, err error) { + result = &networking.Ingress{} err = c.client.Put(). Namespace(c.ns). Resource("ingresses"). @@ -136,8 +136,8 @@ func (c *ingresses) Update(ingress *extensions.Ingress) (result *extensions.Ingr // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *ingresses) UpdateStatus(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { - result = &extensions.Ingress{} +func (c *ingresses) UpdateStatus(ingress *networking.Ingress) (result *networking.Ingress, err error) { + result = &networking.Ingress{} err = c.client.Put(). Namespace(c.ns). Resource("ingresses"). @@ -177,8 +177,8 @@ func (c *ingresses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.L } // Patch applies the patch and returns the patched ingress. -func (c *ingresses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) { - result = &extensions.Ingress{} +func (c *ingresses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *networking.Ingress, err error) { + result = &networking.Ingress{} err = c.client.Patch(pt). Namespace(c.ns). Resource("ingresses"). diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/networking_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/networking_client.go index 1d2f9ab0eaf..0a875a16e1b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/networking_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion/networking_client.go @@ -25,6 +25,7 @@ import ( type NetworkingInterface interface { RESTClient() rest.Interface + IngressesGetter NetworkPoliciesGetter } @@ -33,6 +34,10 @@ type NetworkingClient struct { restClient rest.Interface } +func (c *NetworkingClient) Ingresses(namespace string) IngressInterface { + return newIngresses(c, namespace) +} + func (c *NetworkingClient) NetworkPolicies(namespace string) NetworkPolicyInterface { return newNetworkPolicies(c, namespace) } diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/BUILD new file mode 100644 index 00000000000..9412b076abe --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "generated_expansion.go", + "node_client.go", + ], + importpath = "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion", + visibility = ["//visibility:public"], + deps = [ + "//pkg/client/clientset_generated/internalclientset/scheme:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/client/clientset_generated/internalclientset/typed/node/internalversion/fake:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/doc.go new file mode 100644 index 00000000000..86602442bab --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package internalversion diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/generated_expansion.go new file mode 100644 index 00000000000..1b59c8431ce --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/generated_expansion.go @@ -0,0 +1,19 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/node_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/node_client.go new file mode 100644 index 00000000000..103f942b1b5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/node/internalversion/node_client.go @@ -0,0 +1,91 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + rest "k8s.io/client-go/rest" + "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" +) + +type NodeInterface interface { + RESTClient() rest.Interface +} + +// NodeClient is used to interact with features provided by the node.k8s.io group. +type NodeClient struct { + restClient rest.Interface +} + +// NewForConfig creates a new NodeClient for the given config. +func NewForConfig(c *rest.Config) (*NodeClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NodeClient{client}, nil +} + +// NewForConfigOrDie creates a new NodeClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NodeClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NodeClient for the given RESTClient. +func New(c rest.Interface) *NodeClient { + return &NodeClient{c} +} + +func setConfigDefaults(config *rest.Config) error { + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("node.k8s.io")[0].Group { + gv := scheme.Scheme.PrioritizedVersionsForGroup("node.k8s.io")[0] + config.GroupVersion = &gv + } + config.NegotiatedSerializer = scheme.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NodeClient) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/BUILD index 240a6baa84f..56402f0e3dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/BUILD @@ -8,6 +8,8 @@ load( go_library( name = "go_default_library", srcs = [ + "csidriver.go", + "csinode.go", "doc.go", "generated_expansion.go", "storage_client.go", diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csidriver.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csidriver.go new file mode 100644 index 00000000000..438969207f9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csidriver.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" + storage "k8s.io/kubernetes/pkg/apis/storage" + scheme "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" +) + +// CSIDriversGetter has a method to return a CSIDriverInterface. +// A group's client should implement this interface. +type CSIDriversGetter interface { + CSIDrivers() CSIDriverInterface +} + +// CSIDriverInterface has methods to work with CSIDriver resources. +type CSIDriverInterface interface { + Create(*storage.CSIDriver) (*storage.CSIDriver, error) + Update(*storage.CSIDriver) (*storage.CSIDriver, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*storage.CSIDriver, error) + List(opts v1.ListOptions) (*storage.CSIDriverList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *storage.CSIDriver, err error) + CSIDriverExpansion +} + +// cSIDrivers implements CSIDriverInterface +type cSIDrivers struct { + client rest.Interface +} + +// newCSIDrivers returns a CSIDrivers +func newCSIDrivers(c *StorageClient) *cSIDrivers { + return &cSIDrivers{ + client: c.RESTClient(), + } +} + +// Get takes name of the cSIDriver, and returns the corresponding cSIDriver object, and an error if there is any. +func (c *cSIDrivers) Get(name string, options v1.GetOptions) (result *storage.CSIDriver, err error) { + result = &storage.CSIDriver{} + err = c.client.Get(). + Resource("csidrivers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CSIDrivers that match those selectors. +func (c *cSIDrivers) List(opts v1.ListOptions) (result *storage.CSIDriverList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &storage.CSIDriverList{} + err = c.client.Get(). + Resource("csidrivers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cSIDrivers. +func (c *cSIDrivers) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("csidrivers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cSIDriver and creates it. Returns the server's representation of the cSIDriver, and an error, if there is any. +func (c *cSIDrivers) Create(cSIDriver *storage.CSIDriver) (result *storage.CSIDriver, err error) { + result = &storage.CSIDriver{} + err = c.client.Post(). + Resource("csidrivers"). + Body(cSIDriver). + Do(). + Into(result) + return +} + +// Update takes the representation of a cSIDriver and updates it. Returns the server's representation of the cSIDriver, and an error, if there is any. +func (c *cSIDrivers) Update(cSIDriver *storage.CSIDriver) (result *storage.CSIDriver, err error) { + result = &storage.CSIDriver{} + err = c.client.Put(). + Resource("csidrivers"). + Name(cSIDriver.Name). + Body(cSIDriver). + Do(). + Into(result) + return +} + +// Delete takes name of the cSIDriver and deletes it. Returns an error if one occurs. +func (c *cSIDrivers) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("csidrivers"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cSIDrivers) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("csidrivers"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cSIDriver. +func (c *cSIDrivers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *storage.CSIDriver, err error) { + result = &storage.CSIDriver{} + err = c.client.Patch(pt). + Resource("csidrivers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csinode.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csinode.go new file mode 100644 index 00000000000..b1d926fcdf9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/csinode.go @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" + storage "k8s.io/kubernetes/pkg/apis/storage" + scheme "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme" +) + +// CSINodesGetter has a method to return a CSINodeInterface. +// A group's client should implement this interface. +type CSINodesGetter interface { + CSINodes() CSINodeInterface +} + +// CSINodeInterface has methods to work with CSINode resources. +type CSINodeInterface interface { + Create(*storage.CSINode) (*storage.CSINode, error) + Update(*storage.CSINode) (*storage.CSINode, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*storage.CSINode, error) + List(opts v1.ListOptions) (*storage.CSINodeList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *storage.CSINode, err error) + CSINodeExpansion +} + +// cSINodes implements CSINodeInterface +type cSINodes struct { + client rest.Interface +} + +// newCSINodes returns a CSINodes +func newCSINodes(c *StorageClient) *cSINodes { + return &cSINodes{ + client: c.RESTClient(), + } +} + +// Get takes name of the cSINode, and returns the corresponding cSINode object, and an error if there is any. +func (c *cSINodes) Get(name string, options v1.GetOptions) (result *storage.CSINode, err error) { + result = &storage.CSINode{} + err = c.client.Get(). + Resource("csinodes"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CSINodes that match those selectors. +func (c *cSINodes) List(opts v1.ListOptions) (result *storage.CSINodeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &storage.CSINodeList{} + err = c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cSINodes. +func (c *cSINodes) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cSINode and creates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Create(cSINode *storage.CSINode) (result *storage.CSINode, err error) { + result = &storage.CSINode{} + err = c.client.Post(). + Resource("csinodes"). + Body(cSINode). + Do(). + Into(result) + return +} + +// Update takes the representation of a cSINode and updates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Update(cSINode *storage.CSINode) (result *storage.CSINode, err error) { + result = &storage.CSINode{} + err = c.client.Put(). + Resource("csinodes"). + Name(cSINode.Name). + Body(cSINode). + Do(). + Into(result) + return +} + +// Delete takes name of the cSINode and deletes it. Returns an error if one occurs. +func (c *cSINodes) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("csinodes"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cSINodes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("csinodes"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cSINode. +func (c *cSINodes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *storage.CSINode, err error) { + result = &storage.CSINode{} + err = c.client.Patch(pt). + Resource("csinodes"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/generated_expansion.go index d74dc56fe97..873439a3a28 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/generated_expansion.go @@ -18,6 +18,10 @@ limitations under the License. package internalversion +type CSIDriverExpansion interface{} + +type CSINodeExpansion interface{} + type StorageClassExpansion interface{} type VolumeAttachmentExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/storage_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/storage_client.go index 9272e2b9c5e..823bfe82fa3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/storage_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion/storage_client.go @@ -25,6 +25,8 @@ import ( type StorageInterface interface { RESTClient() rest.Interface + CSIDriversGetter + CSINodesGetter StorageClassesGetter VolumeAttachmentsGetter } @@ -34,6 +36,14 @@ type StorageClient struct { restClient rest.Interface } +func (c *StorageClient) CSIDrivers() CSIDriverInterface { + return newCSIDrivers(c) +} + +func (c *StorageClient) CSINodes() CSINodeInterface { + return newCSINodes(c) +} + func (c *StorageClient) StorageClasses() StorageClassInterface { return newStorageClasses(c) } diff --git a/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/BUILD b/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/BUILD index e5e7ec9b6ba..a5d29965c3b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/BUILD @@ -10,7 +10,7 @@ go_library( srcs = ["config.go"], importpath = "k8s.io/kubernetes/pkg/client/leaderelectionconfig", deps = [ - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/config.go b/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/config.go index cc9ae7efac9..7be3d5aa598 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/config.go +++ b/vendor/k8s.io/kubernetes/pkg/client/leaderelectionconfig/config.go @@ -20,16 +20,17 @@ import ( "time" "github.com/spf13/pflag" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" + componentbaseconfig "k8s.io/component-base/config" ) const ( // DefaultLeaseDuration defines a default duration of lease. + // TODO: This constant should move to the k8s.io/component-base/config package DefaultLeaseDuration = 15 * time.Second ) // BindFlags binds the LeaderElectionConfiguration struct fields to a flagset -func BindFlags(l *apiserverconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { +func BindFlags(l *componentbaseconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+ "Start a leader election client and gain leadership before "+ "executing the main loop. Enable this when running replicated "+ diff --git a/vendor/k8s.io/kubernetes/pkg/client/metrics/OWNERS b/vendor/k8s.io/kubernetes/pkg/client/metrics/OWNERS old mode 100755 new mode 100644 index ff517980719..f150be53699 --- a/vendor/k8s.io/kubernetes/pkg/client/metrics/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/client/metrics/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - eparis diff --git a/vendor/k8s.io/kubernetes/pkg/client/metrics/prometheus/prometheus.go b/vendor/k8s.io/kubernetes/pkg/client/metrics/prometheus/prometheus.go index 45a08f6500e..c7804dfc2c1 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/metrics/prometheus/prometheus.go +++ b/vendor/k8s.io/kubernetes/pkg/client/metrics/prometheus/prometheus.go @@ -32,13 +32,23 @@ var ( // "verb" and "url" labels. It is used for the rest client latency metrics. requestLatency = prometheus.NewHistogramVec( prometheus.HistogramOpts{ - Name: "rest_client_request_latency_seconds", + Name: "rest_client_request_duration_seconds", Help: "Request latency in seconds. Broken down by verb and URL.", Buckets: prometheus.ExponentialBuckets(0.001, 2, 10), }, []string{"verb", "url"}, ) + // deprecatedRequestLatency is deprecated, please use requestLatency. + deprecatedRequestLatency = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "rest_client_request_latency_seconds", + Help: "(Deprecated) Request latency in seconds. Broken down by verb and URL.", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 10), + }, + []string{"verb", "url"}, + ) + requestResult = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "rest_client_requests_total", @@ -50,16 +60,19 @@ var ( func init() { prometheus.MustRegister(requestLatency) + prometheus.MustRegister(deprecatedRequestLatency) prometheus.MustRegister(requestResult) - metrics.Register(&latencyAdapter{requestLatency}, &resultAdapter{requestResult}) + metrics.Register(&latencyAdapter{m: requestLatency, dm: deprecatedRequestLatency}, &resultAdapter{requestResult}) } type latencyAdapter struct { - m *prometheus.HistogramVec + m *prometheus.HistogramVec + dm *prometheus.HistogramVec } func (l *latencyAdapter) Observe(verb string, u url.URL, latency time.Duration) { l.m.WithLabelValues(verb, u.String()).Observe(latency.Seconds()) + l.dm.WithLabelValues(verb, u.String()).Observe(latency.Seconds()) } type resultAdapter struct { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/.import-restrictions b/vendor/k8s.io/kubernetes/pkg/controller/.import-restrictions index 31aa4d0b504..79dbe90178f 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/.import-restrictions +++ b/vendor/k8s.io/kubernetes/pkg/controller/.import-restrictions @@ -31,16 +31,10 @@ "k8s.io/api/policy/v1beta1", "k8s.io/api/rbac/v1", "k8s.io/api/storage/v1", - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1", - "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset", - "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake", "k8s.io/apimachinery/pkg/api/equality", "k8s.io/apimachinery/pkg/api/errors", "k8s.io/apimachinery/pkg/api/meta", - "k8s.io/apimachinery/pkg/api/meta/testrestmapper", "k8s.io/apimachinery/pkg/api/resource", - "k8s.io/apimachinery/pkg/apis/config", - "k8s.io/apimachinery/pkg/apis/config/v1alpha1", "k8s.io/apimachinery/pkg/apis/meta/v1", "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", "k8s.io/apimachinery/pkg/conversion", @@ -63,8 +57,6 @@ "k8s.io/apimachinery/pkg/util/wait", "k8s.io/apimachinery/pkg/util/version", "k8s.io/apimachinery/pkg/watch", - "k8s.io/apiserver/pkg/apis/config", - "k8s.io/apiserver/pkg/apis/config/v1alpha1", "k8s.io/apiserver/pkg/authentication/serviceaccount", "k8s.io/apiserver/pkg/storage/names", "k8s.io/apiserver/pkg/util/feature", @@ -84,34 +76,38 @@ "k8s.io/apiserver/pkg/storage", "k8s.io/api/batch/v2alpha1", "k8s.io/apiserver/pkg/registry/rest", - "k8s.io/apimachinery/pkg/util/initialization", "k8s.io/api/scheduling/v1alpha1", "k8s.io/api/admissionregistration/v1beta1", "k8s.io/api/authorization/v1", "k8s.io/api/settings/v1alpha1", "k8s.io/api/admission/v1beta1", "k8s.io/api/networking/v1", - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/component-base/config", + "k8s.io/component-base/config/v1alpha1" ] }, { "SelectorRegexp": "github[.]com/", "AllowedPrefixes": [ - "github.com/Azure/go-autorest/autorest/to", "github.com/cloudflare/cfssl/config", "github.com/cloudflare/cfssl/helpers", "github.com/cloudflare/cfssl/signer", "github.com/cloudflare/cfssl/signer/local", "github.com/davecgh/go-spew/spew", + "github.com/docker/distribution/reference", "github.com/evanphx/json-patch", "github.com/golang/groupcache/lru", + "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud", + "github.com/google/gofuzz", "github.com/prometheus/client_golang/prometheus", "github.com/robfig/cron", "github.com/spf13/pflag", "github.com/stretchr/testify/assert", "github.com/stretchr/testify/require", - "github.com/docker/distribution/reference", - "github.com/google/gofuzz" + "github.com/google/gofuzz", + "github.com/golang/protobuf/ptypes/wrappers", + "github.com/golang/protobuf/proto", + "github.com/container-storage-interface/spec/lib/go/csi" ] }, { @@ -151,21 +147,19 @@ "k8s.io/client-go/listers/policy/v1beta1", "k8s.io/client-go/listers/rbac/v1", "k8s.io/client-go/listers/storage/v1", + "k8s.io/client-go/pkg/version", "k8s.io/client-go/rest", "k8s.io/client-go/scale", - "k8s.io/client-go/scale/fake", "k8s.io/client-go/testing", - "k8s.io/client-go/tools/bootstrap/token/api", "k8s.io/client-go/tools/cache", "k8s.io/client-go/tools/leaderelection/resourcelock", + "k8s.io/client-go/tools/pager", "k8s.io/client-go/tools/record", "k8s.io/client-go/tools/reference", "k8s.io/client-go/tools/watch", "k8s.io/client-go/util/cert", "k8s.io/client-go/util/flowcontrol", - "k8s.io/client-go/util/integer", "k8s.io/client-go/util/retry", - "k8s.io/client-go/util/testing", "k8s.io/client-go/util/workqueue" ] }, @@ -173,18 +167,11 @@ "SelectorRegexp": "k8s[.]io/kubernetes/pkg", "AllowedPrefixes": [ "k8s.io/kubernetes/pkg/api/legacyscheme", - "k8s.io/kubernetes/pkg/api/testapi", "k8s.io/kubernetes/pkg/api/v1/endpoints", "k8s.io/kubernetes/pkg/api/v1/node", "k8s.io/kubernetes/pkg/api/v1/pod", - "k8s.io/kubernetes/pkg/apis/apps/install", "k8s.io/kubernetes/pkg/apis/apps/v1", - "k8s.io/kubernetes/pkg/apis/authentication/install", - "k8s.io/kubernetes/pkg/apis/authorization/install", "k8s.io/kubernetes/pkg/apis/autoscaling", - "k8s.io/kubernetes/pkg/apis/autoscaling/install", - "k8s.io/kubernetes/pkg/apis/batch/install", - "k8s.io/kubernetes/pkg/apis/certificates/install", "k8s.io/kubernetes/pkg/apis/certificates/v1beta1", "k8s.io/kubernetes/pkg/apis/core", "k8s.io/kubernetes/pkg/apis/core/helper", @@ -192,35 +179,16 @@ "k8s.io/kubernetes/pkg/apis/core/v1", "k8s.io/kubernetes/pkg/apis/core/v1/helper", "k8s.io/kubernetes/pkg/apis/core/validation", - "k8s.io/kubernetes/pkg/apis/extensions", - "k8s.io/kubernetes/pkg/apis/extensions/install", - "k8s.io/kubernetes/pkg/apis/policy/install", - "k8s.io/kubernetes/pkg/apis/rbac/install", - "k8s.io/kubernetes/pkg/apis/settings/install", - "k8s.io/kubernetes/pkg/apis/storage/install", - "k8s.io/kubernetes/pkg/client/unversioned", - "k8s.io/kubernetes/pkg/client/unversioned/testclient", "k8s.io/kubernetes/pkg/cloudprovider", - "k8s.io/kubernetes/pkg/cloudprovider/providers/fake", "k8s.io/kubernetes/pkg/cloudprovider/providers/gce", "k8s.io/kubernetes/pkg/controller", "k8s.io/kubernetes/pkg/controller/apis/config", - "k8s.io/kubernetes/pkg/controller/apis/config/scheme", "k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1", - "k8s.io/kubernetes/pkg/controller/bootstrap", "k8s.io/kubernetes/pkg/controller/certificates", - "k8s.io/kubernetes/pkg/controller/certificates/approver", - "k8s.io/kubernetes/pkg/controller/certificates/cleaner", - "k8s.io/kubernetes/pkg/controller/certificates/signer", - "k8s.io/kubernetes/pkg/controller/cloud", - "k8s.io/kubernetes/pkg/controller/clusterroleaggregation", - "k8s.io/kubernetes/pkg/controller/cronjob", "k8s.io/kubernetes/pkg/controller/daemon", "k8s.io/kubernetes/pkg/controller/daemon/util", "k8s.io/kubernetes/pkg/controller/deployment", "k8s.io/kubernetes/pkg/controller/deployment/util", - "k8s.io/kubernetes/pkg/controller/disruption", - "k8s.io/kubernetes/pkg/controller/endpoint", "k8s.io/kubernetes/pkg/controller/garbagecollector", "k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly", "k8s.io/kubernetes/pkg/controller/history", @@ -231,23 +199,11 @@ "k8s.io/kubernetes/pkg/controller/nodeipam/ipam", "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/cidrset", "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/sync", - "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/test", "k8s.io/kubernetes/pkg/controller/nodelifecycle", "k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler", "k8s.io/kubernetes/pkg/controller/podautoscaler", "k8s.io/kubernetes/pkg/controller/podautoscaler/metrics", - "k8s.io/kubernetes/pkg/controller/podgc", "k8s.io/kubernetes/pkg/controller/replicaset", - "k8s.io/kubernetes/pkg/controller/replicaset/options", - "k8s.io/kubernetes/pkg/controller/replication", - "k8s.io/kubernetes/pkg/controller/resourcequota", - "k8s.io/kubernetes/pkg/controller/route", - "k8s.io/kubernetes/pkg/controller/service", - "k8s.io/kubernetes/pkg/controller/serviceaccount", - "k8s.io/kubernetes/pkg/controller/statefulset", - "k8s.io/kubernetes/pkg/controller/testutil", - "k8s.io/kubernetes/pkg/controller/ttl", - "k8s.io/kubernetes/pkg/controller/ttlafterfinished", "k8s.io/kubernetes/pkg/controller/util/node", "k8s.io/kubernetes/pkg/controller/volume/attachdetach", "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache", @@ -255,16 +211,12 @@ "k8s.io/kubernetes/pkg/controller/volume/attachdetach/populator", "k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler", "k8s.io/kubernetes/pkg/controller/volume/attachdetach/statusupdater", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/testing", "k8s.io/kubernetes/pkg/controller/volume/attachdetach/util", "k8s.io/kubernetes/pkg/controller/volume/events", "k8s.io/kubernetes/pkg/controller/volume/expand", "k8s.io/kubernetes/pkg/controller/volume/expand/cache", "k8s.io/kubernetes/pkg/controller/volume/persistentvolume", "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/metrics", - "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/options", - "k8s.io/kubernetes/pkg/controller/volume/pvcprotection", - "k8s.io/kubernetes/pkg/controller/volume/pvprotection", "k8s.io/kubernetes/pkg/features", "k8s.io/kubernetes/pkg/kubectl/scheme", "k8s.io/kubernetes/pkg/kubelet/apis", @@ -272,14 +224,10 @@ "k8s.io/kubernetes/pkg/kubelet/types", "k8s.io/kubernetes/pkg/kubelet/util/format", "k8s.io/kubernetes/pkg/quota", - "k8s.io/kubernetes/pkg/quota/evaluator/core", - "k8s.io/kubernetes/pkg/quota/generic", - "k8s.io/kubernetes/pkg/quota/install", "k8s.io/kubernetes/pkg/registry/core/secret", "k8s.io/kubernetes/pkg/scheduler/algorithm", "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates", - "k8s.io/kubernetes/pkg/scheduler/cache", - "k8s.io/kubernetes/pkg/securitycontext", + "k8s.io/kubernetes/pkg/scheduler/nodeinfo", "k8s.io/kubernetes/pkg/serviceaccount", "k8s.io/kubernetes/pkg/util/goroutinemap", "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff", @@ -288,42 +236,28 @@ "k8s.io/kubernetes/pkg/util/metrics", "k8s.io/kubernetes/pkg/util/mount", "k8s.io/kubernetes/pkg/util/node", - "k8s.io/kubernetes/pkg/util/reflector/prometheus", "k8s.io/kubernetes/pkg/util/slice", - "k8s.io/kubernetes/pkg/util/strings", "k8s.io/kubernetes/pkg/util/system", "k8s.io/kubernetes/pkg/util/taints", - "k8s.io/kubernetes/pkg/util/workqueue/prometheus", "k8s.io/kubernetes/pkg/volume", - "k8s.io/kubernetes/pkg/volume/testing", "k8s.io/kubernetes/pkg/volume/util", "k8s.io/kubernetes/pkg/volume/util/operationexecutor", "k8s.io/kubernetes/pkg/volume/util/recyclerclient", + "k8s.io/kubernetes/pkg/volume/util/subpath", "k8s.io/kubernetes/pkg/volume/util/types", "k8s.io/kubernetes/pkg/volume/util/volumepathhandler", "k8s.io/kubernetes/pkg/api/service", - "k8s.io/kubernetes/pkg/api/v1/service", - "k8s.io/kubernetes/pkg/apis/networking", - "k8s.io/kubernetes/pkg/apis/policy", "k8s.io/kubernetes/pkg/apis/scheduling", "k8s.io/kubernetes/pkg/capabilities", "k8s.io/kubernetes/pkg/master/ports", "k8s.io/kubernetes/pkg/scheduler/api", "k8s.io/kubernetes/pkg/scheduler/util", "k8s.io/kubernetes/pkg/security/apparmor", - "k8s.io/kubernetes/pkg/util/file", - "k8s.io/kubernetes/pkg/util/net/sets", "k8s.io/kubernetes/pkg/util/parsers", "k8s.io/kubernetes/pkg/fieldpath", - "k8s.io/kubernetes/pkg/kubeapiserver/admission/util", "k8s.io/kubernetes/pkg/scheduler/volumebinder", - "k8s.io/kubernetes/pkg/scheduler/internal/cache", - "k8s.io/kubernetes/pkg/util/nsenter", "k8s.io/kubernetes/pkg/util/resizefs", - "k8s.io/kubernetes/pkg/util/version", - "k8s.io/kubernetes/pkg/apis/apps", - "k8s.io/kubernetes/pkg/version", - "k8s.io/kubernetes/pkg/util/io" + "k8s.io/kubernetes/pkg/apis/apps" ] }, { @@ -331,21 +265,27 @@ "AllowedPrefixes": [ "k8s.io/csi-api/pkg/apis/csi/v1alpha1", "k8s.io/csi-api/pkg/client/clientset/versioned", + "k8s.io/csi-api/pkg/client/listers/csi/v1alpha1", + "k8s.io/csi-api/pkg/client/informers/externalversions", + "k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1", "k8s.io/heapster/metrics/api/v1/types", "k8s.io/kube-controller-manager/config/v1alpha1", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2", "k8s.io/metrics/pkg/apis/external_metrics/v1beta1", "k8s.io/metrics/pkg/apis/metrics/v1alpha1", "k8s.io/metrics/pkg/apis/metrics/v1beta1", - "k8s.io/metrics/pkg/client/clientset/versioned/fake", "k8s.io/metrics/pkg/client/clientset/versioned/scheme", "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1", "k8s.io/metrics/pkg/client/custom_metrics", - "k8s.io/metrics/pkg/client/custom_metrics/fake", "k8s.io/metrics/pkg/client/external_metrics", - "k8s.io/metrics/pkg/client/external_metrics/fake", + "k8s.io/utils/nsenter", + "k8s.io/utils/integer", + "k8s.io/utils/io", + "k8s.io/utils/path", "k8s.io/utils/pointer", - "k8s.io/utils/exec" + "k8s.io/utils/exec", + "k8s.io/utils/strings", + "k8s.io/utils/net" ] }, { @@ -354,12 +294,15 @@ "golang.org/x/time/rate", "golang.org/x/sys/unix", "golang.org/x/oauth2", + "golang.org/x/net/context", "google.golang.org/api/compute/v1", "google.golang.org/api/googleapi", "google.golang.org/api/compute/v0.alpha", "google.golang.org/api/container/v1", "google.golang.org/api/compute/v0.beta", - "google.golang.org/api/tpu/v1" + "google.golang.org/api/tpu/v1", + "golang.org/x/net/context", + "google.golang.org/grpc" ] } ] diff --git a/vendor/k8s.io/kubernetes/pkg/controller/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/BUILD index b4915ac5365..00e7f8efa30 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/BUILD @@ -55,7 +55,6 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/apis/core/install:go_default_library", "//pkg/apis/core/validation:go_default_library", - "//pkg/scheduler/api:go_default_library", "//pkg/serviceaccount:go_default_library", "//pkg/util/hash:go_default_library", "//pkg/util/taints:go_default_library", @@ -86,10 +85,10 @@ go_library( "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/retry:go_default_library", "//vendor/github.com/golang/groupcache/lru:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/OWNERS index 6b09a34b804..b1147466aa3 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - derekwaynecarr @@ -5,3 +7,6 @@ approvers: - janetkuo reviewers: - deads2k +- cheftako +labels: +- sig/apps diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/BUILD index 57c9f74fb15..835040c4793 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/BUILD @@ -11,11 +11,10 @@ go_library( importpath = "k8s.io/kubernetes/pkg/controller/apis/config", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/OWNERS index e3149dc3c06..5381816e41e 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - api-approvers - deads2k diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/BUILD new file mode 100644 index 00000000000..e39163350ab --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/BUILD @@ -0,0 +1,39 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["scheme.go"], + importpath = "k8s.io/kubernetes/pkg/controller/apis/config/scheme", + visibility = ["//visibility:public"], + deps = [ + "//pkg/controller/apis/config:go_default_library", + "//pkg/controller/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["scheme_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/controller/apis/config/fuzzer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/scheme.go b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/scheme.go new file mode 100644 index 00000000000..b1bfc739215 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/scheme/scheme.go @@ -0,0 +1,44 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package scheme + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/kubernetes/pkg/controller/apis/config" + "k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1" +) + +var ( + // Scheme defines methods for serializing and deserializing API objects. + Scheme = runtime.NewScheme() + // Codecs provides methods for retrieving codecs and serializers for specific + // versions and content types. + Codecs = serializer.NewCodecFactory(Scheme) +) + +func init() { + AddToScheme(Scheme) +} + +// AddToScheme registers the API group and adds types to a scheme +func AddToScheme(scheme *runtime.Scheme) { + utilruntime.Must(config.AddToScheme(scheme)) + utilruntime.Must(v1alpha1.AddToScheme(scheme)) + utilruntime.Must(scheme.SetVersionPriority(v1alpha1.SchemeGroupVersion)) +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/types.go b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/types.go index c04a1b3552d..c7a3190ddf1 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/types.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/types.go @@ -17,9 +17,8 @@ limitations under the License. package config import ( - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" + componentbaseconfig "k8s.io/component-base/config" ) // GroupResource describes an group resource. @@ -112,11 +111,11 @@ type GenericControllerManagerConfiguration struct { MinResyncPeriod metav1.Duration // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection apimachineryconfig.ClientConnectionConfiguration + ClientConnection componentbaseconfig.ClientConnectionConfiguration // How long to wait between starting controller managers ControllerStartInterval metav1.Duration // leaderElection defines the configuration of leader election client. - LeaderElection apiserverconfig.LeaderElectionConfiguration + LeaderElection componentbaseconfig.LeaderElectionConfiguration // Controllers is the list of controllers to enable or disable // '*' means "all enabled by default controllers" // 'foo' means "enable 'foo'" @@ -124,7 +123,7 @@ type GenericControllerManagerConfiguration struct { // first item for a particular name wins Controllers []string // DebuggingConfiguration holds configuration for Debugging related features. - Debugging apiserverconfig.DebuggingConfiguration + Debugging componentbaseconfig.DebuggingConfiguration } // KubeCloudSharedConfiguration contains elements shared by both kube-controller manager diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/BUILD index 9eeef54bd84..77afbe4c4e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/BUILD @@ -15,12 +15,11 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/controller/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", "//staging/src/k8s.io/kube-controller-manager/config/v1alpha1:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/defaults.go b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/defaults.go index af965725660..ccefd0a9550 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/defaults.go @@ -19,10 +19,9 @@ package v1alpha1 import ( "time" - apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kruntime "k8s.io/apimachinery/pkg/runtime" - apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" kubectrlmgrconfigv1alpha1 "k8s.io/kube-controller-manager/config/v1alpha1" utilpointer "k8s.io/utils/pointer" ) @@ -52,7 +51,7 @@ func SetDefaults_KubeControllerManagerConfiguration(obj *kubectrlmgrconfigv1alph obj.TTLAfterFinishedController.ConcurrentTTLSyncs = 5 } - // These defaults override the recommended defaults from the apimachineryconfigv1alpha1 package that are applied automatically + // These defaults override the recommended defaults from the componentbaseconfigv1alpha1 package that are applied automatically // These client-connection defaults are specific to the kube-controller-manager if obj.Generic.ClientConnection.QPS == 0.0 { obj.Generic.ClientConnection.QPS = 20.0 @@ -81,8 +80,8 @@ func RecommendedDefaultGenericControllerManagerConfiguration(obj *kubectrlmgrcon } // Use the default ClientConnectionConfiguration and LeaderElectionConfiguration options - apimachineryconfigv1alpha1.RecommendedDefaultClientConnectionConfiguration(&obj.ClientConnection) - apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) + componentbaseconfigv1alpha1.RecommendedDefaultClientConnectionConfiguration(&obj.ClientConnection) + componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) } func SetDefaults_KubeCloudSharedConfiguration(obj *kubectrlmgrconfigv1alpha1.KubeCloudSharedConfiguration) { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go index 1e7718d084c..57cd312283c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go @@ -23,11 +23,10 @@ package v1alpha1 import ( unsafe "unsafe" - apisconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" - pkgapisconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" v1alpha1 "k8s.io/kube-controller-manager/config/v1alpha1" config "k8s.io/kubernetes/pkg/controller/apis/config" ) @@ -528,15 +527,15 @@ func autoConvert_v1alpha1_GenericControllerManagerConfiguration_To_config_Generi out.Port = in.Port out.Address = in.Address out.MinResyncPeriod = in.MinResyncPeriod - if err := apisconfigv1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { return err } out.ControllerStartInterval = in.ControllerStartInterval - if err := pkgapisconfigv1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { return err } out.Controllers = *(*[]string)(unsafe.Pointer(&in.Controllers)) - if err := pkgapisconfigv1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.Debugging, &out.Debugging, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.Debugging, &out.Debugging, s); err != nil { return err } return nil @@ -546,15 +545,15 @@ func autoConvert_config_GenericControllerManagerConfiguration_To_v1alpha1_Generi out.Port = in.Port out.Address = in.Address out.MinResyncPeriod = in.MinResyncPeriod - if err := apisconfigv1alpha1.Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { return err } out.ControllerStartInterval = in.ControllerStartInterval - if err := pkgapisconfigv1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { return err } out.Controllers = *(*[]string)(unsafe.Pointer(&in.Controllers)) - if err := pkgapisconfigv1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.Debugging, &out.Debugging, s); err != nil { + if err := componentbaseconfigv1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.Debugging, &out.Debugging, s); err != nil { return err } return nil diff --git a/vendor/k8s.io/kubernetes/pkg/controller/certificates/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/certificates/OWNERS old mode 100755 new mode 100644 index 470b7a1c92d..3cf03643835 --- a/vendor/k8s.io/kubernetes/pkg/controller/certificates/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/certificates/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/controller/certificates/signer/cfssl_signer.go b/vendor/k8s.io/kubernetes/pkg/controller/certificates/signer/cfssl_signer.go index dd57d68a0dc..3c704f86d92 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/certificates/signer/cfssl_signer.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/certificates/signer/cfssl_signer.go @@ -59,6 +59,9 @@ type cfsslSigner struct { sigAlgo x509.SignatureAlgorithm client clientset.Interface certificateDuration time.Duration + + // nowFn returns the current time. We have here for unit testing + nowFn func() time.Time } func newCFSSLSigner(caFile, caKeyFile string, client clientset.Interface, certificateDuration time.Duration) (*cfsslSigner, error) { @@ -92,6 +95,7 @@ func newCFSSLSigner(caFile, caKeyFile string, client clientset.Interface, certif sigAlgo: signer.DefaultSigAlgo(priv), client: client, certificateDuration: certificateDuration, + nowFn: time.Now, }, nil } @@ -115,11 +119,21 @@ func (s *cfsslSigner) sign(csr *capi.CertificateSigningRequest) (*capi.Certifica for _, usage := range csr.Spec.Usages { usages = append(usages, string(usage)) } + + certExpiryDuration := s.certificateDuration + durationUntilExpiry := s.ca.NotAfter.Sub(s.nowFn()) + if durationUntilExpiry <= 0 { + return nil, fmt.Errorf("the signer has expired: %v", s.ca.NotAfter) + } + if durationUntilExpiry < certExpiryDuration { + certExpiryDuration = durationUntilExpiry + } + policy := &config.Signing{ Default: &config.SigningProfile{ Usage: usages, - Expiry: s.certificateDuration, - ExpiryString: s.certificateDuration.String(), + Expiry: certExpiryDuration, + ExpiryString: certExpiryDuration.String(), }, } cfs, err := local.NewSigner(s.priv, s.ca, s.sigAlgo, policy) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go b/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go index caac5649d2f..500a51ac391 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "context" "fmt" "time" @@ -34,11 +35,10 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch" + "k8s.io/klog" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/serviceaccount" - - "k8s.io/klog" ) // ControllerClientBuilder allows you to get clients and configs for controllers @@ -114,18 +114,22 @@ func (b SAControllerClientBuilder) Config(name string) (*restclient.Config, erro } var clientConfig *restclient.Config - + fieldSelector := fields.SelectorFromSet(map[string]string{ + api.SecretTypeField: string(v1.SecretTypeServiceAccountToken), + }).String() lw := &cache.ListWatch{ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - options.FieldSelector = fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(v1.SecretTypeServiceAccountToken)}).String() + options.FieldSelector = fieldSelector return b.CoreClient.Secrets(b.Namespace).List(options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - options.FieldSelector = fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(v1.SecretTypeServiceAccountToken)}).String() + options.FieldSelector = fieldSelector return b.CoreClient.Secrets(b.Namespace).Watch(options) }, } - _, err = watchtools.ListWatchUntil(30*time.Second, lw, + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + _, err = watchtools.UntilWithSync(ctx, lw, &v1.Secret{}, nil, func(event watch.Event) (bool, error) { switch event.Type { case watch.Deleted: @@ -146,15 +150,15 @@ func (b SAControllerClientBuilder) Config(name string) (*restclient.Config, erro } validConfig, valid, err := b.getAuthenticatedConfig(sa, string(secret.Data[v1.ServiceAccountTokenKey])) if err != nil { - klog.Warningf("error validating API token for %s/%s in secret %s: %v", sa.Name, sa.Namespace, secret.Name, err) + klog.Warningf("error validating API token for %s/%s in secret %s: %v", sa.Namespace, sa.Name, secret.Name, err) // continue watching for good tokens return false, nil } if !valid { - klog.Warningf("secret %s contained an invalid API token for %s/%s", secret.Name, sa.Name, sa.Namespace) + klog.Warningf("secret %s contained an invalid API token for %s/%s", secret.Name, sa.Namespace, sa.Name) // try to delete the secret containing the invalid token if err := b.CoreClient.Secrets(secret.Namespace).Delete(secret.Name, &metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) { - klog.Warningf("error deleting secret %s containing invalid API token for %s/%s: %v", secret.Name, sa.Name, sa.Namespace, err) + klog.Warningf("error deleting secret %s containing invalid API token for %s/%s: %v", secret.Name, sa.Namespace, sa.Name, err) } // continue watching for good tokens return false, nil @@ -208,14 +212,14 @@ func (b SAControllerClientBuilder) getAuthenticatedConfig(sa *v1.ServiceAccount, tokenReview := &v1authenticationapi.TokenReview{Spec: v1authenticationapi.TokenReviewSpec{Token: token}} if tokenResult, err := b.AuthenticationClient.TokenReviews().Create(tokenReview); err == nil { if !tokenResult.Status.Authenticated { - klog.Warningf("Token for %s/%s did not authenticate correctly", sa.Name, sa.Namespace) + klog.Warningf("Token for %s/%s did not authenticate correctly", sa.Namespace, sa.Name) return nil, false, nil } if tokenResult.Status.User.Username != username { - klog.Warningf("Token for %s/%s authenticated as unexpected username: %s", sa.Name, sa.Namespace, tokenResult.Status.User.Username) + klog.Warningf("Token for %s/%s authenticated as unexpected username: %s", sa.Namespace, sa.Name, tokenResult.Status.User.Username) return nil, false, nil } - klog.V(4).Infof("Verified credential for %s/%s", sa.Name, sa.Namespace) + klog.V(4).Infof("Verified credential for %s/%s", sa.Namespace, sa.Name) return clientConfig, true, nil } @@ -229,7 +233,7 @@ func (b SAControllerClientBuilder) getAuthenticatedConfig(sa *v1.ServiceAccount, } err = client.Get().AbsPath("/apis").Do().Error() if apierrors.IsUnauthorized(err) { - klog.Warningf("Token for %s/%s did not authenticate correctly: %v", sa.Name, sa.Namespace, err) + klog.Warningf("Token for %s/%s did not authenticate correctly: %v", sa.Namespace, sa.Name, err) return nil, false, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go index 6ccc32aed0f..ecae8d7e87a 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go @@ -42,14 +42,13 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/integer" clientretry "k8s.io/client-go/util/retry" podutil "k8s.io/kubernetes/pkg/api/v1/pod" _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/apis/core/validation" - schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" hashutil "k8s.io/kubernetes/pkg/util/hash" taintutils "k8s.io/kubernetes/pkg/util/taints" + "k8s.io/utils/integer" "k8s.io/klog" ) @@ -89,9 +88,10 @@ var UpdateTaintBackoff = wait.Backoff{ Jitter: 1.0, } -var ShutdownTaint = &v1.Taint{ - Key: schedulerapi.TaintNodeShutdown, - Effect: v1.TaintEffectNoSchedule, +var UpdateLabelBackoff = wait.Backoff{ + Steps: 5, + Duration: 100 * time.Millisecond, + Jitter: 1.0, } var ( @@ -132,7 +132,7 @@ var ExpKeyFunc = func(obj interface{}) (string, error) { if e, ok := obj.(*ControlleeExpectations); ok { return e.key, nil } - return "", fmt.Errorf("Could not find key for obj %#v", obj) + return "", fmt.Errorf("could not find key for obj %#v", obj) } // ControllerExpectationsInterface is an interface that allows users to set and wait on expectations. @@ -297,7 +297,7 @@ var UIDSetKeyFunc = func(obj interface{}) (string, error) { if u, ok := obj.(*UIDSet); ok { return u.key, nil } - return "", fmt.Errorf("Could not find key for obj %#v", obj) + return "", fmt.Errorf("could not find key for obj %#v", obj) } // UIDSet holds a key and a set of UIDs. Used by the @@ -418,7 +418,7 @@ type RealRSControl struct { var _ RSControlInterface = &RealRSControl{} func (r RealRSControl) PatchReplicaSet(namespace, name string, data []byte) error { - _, err := r.KubeClient.ExtensionsV1beta1().ReplicaSets(namespace).Patch(name, types.StrategicMergePatchType, data) + _, err := r.KubeClient.AppsV1().ReplicaSets(namespace).Patch(name, types.StrategicMergePatchType, data) return err } @@ -438,7 +438,7 @@ type RealControllerRevisionControl struct { var _ ControllerRevisionControlInterface = &RealControllerRevisionControl{} func (r RealControllerRevisionControl) PatchControllerRevision(namespace, name string, data []byte) error { - _, err := r.KubeClient.AppsV1beta1().ControllerRevisions(namespace).Patch(name, types.StrategicMergePatchType, data) + _, err := r.KubeClient.AppsV1().ControllerRevisions(namespace).Patch(name, types.StrategicMergePatchType, data) return err } @@ -599,9 +599,9 @@ func (r RealPodControl) DeletePod(namespace string, podID string, object runtime if err := r.KubeClient.CoreV1().Pods(namespace).Delete(podID, nil); err != nil && !apierrors.IsNotFound(err) { r.Recorder.Eventf(object, v1.EventTypeWarning, FailedDeletePodReason, "Error deleting: %v", err) return fmt.Errorf("unable to delete pods: %v", err) - } else { - r.Recorder.Eventf(object, v1.EventTypeNormal, SuccessfulDeletePodReason, "Deleted pod: %v", podID) } + r.Recorder.Eventf(object, v1.EventTypeNormal, SuccessfulDeletePodReason, "Deleted pod: %v", podID) + return nil } @@ -633,7 +633,7 @@ func (f *FakePodControl) CreatePods(namespace string, spec *v1.PodTemplateSpec, defer f.Unlock() f.CreateCallCount++ if f.CreateLimit != 0 && f.CreateCallCount > f.CreateLimit { - return fmt.Errorf("Not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) + return fmt.Errorf("not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) } f.Templates = append(f.Templates, *spec) if f.Err != nil { @@ -647,7 +647,7 @@ func (f *FakePodControl) CreatePodsWithControllerRef(namespace string, spec *v1. defer f.Unlock() f.CreateCallCount++ if f.CreateLimit != 0 && f.CreateCallCount > f.CreateLimit { - return fmt.Errorf("Not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) + return fmt.Errorf("not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) } f.Templates = append(f.Templates, *spec) f.ControllerRefs = append(f.ControllerRefs, *controllerRef) @@ -662,7 +662,7 @@ func (f *FakePodControl) CreatePodsOnNode(nodeName, namespace string, template * defer f.Unlock() f.CreateCallCount++ if f.CreateLimit != 0 && f.CreateCallCount > f.CreateLimit { - return fmt.Errorf("Not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) + return fmt.Errorf("not creating pod, limit %d already reached (create call %d)", f.CreateLimit, f.CreateCallCount) } f.Templates = append(f.Templates, *template) f.ControllerRefs = append(f.ControllerRefs, *controllerRef) @@ -926,7 +926,7 @@ func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taints ...*v for _, taint := range taints { curNewNode, ok, err := taintutils.AddOrUpdateTaint(oldNodeCopy, taint) if err != nil { - return fmt.Errorf("Failed to update taint of node!") + return fmt.Errorf("failed to update taint of node") } updated = updated || ok newNode = curNewNode @@ -983,7 +983,7 @@ func RemoveTaintOffNode(c clientset.Interface, nodeName string, node *v1.Node, t for _, taint := range taints { curNewNode, ok, err := taintutils.RemoveTaint(oldNodeCopy, taint) if err != nil { - return fmt.Errorf("Failed to remove taint of node!") + return fmt.Errorf("failed to remove taint of node") } updated = updated || ok newNode = curNewNode @@ -1027,7 +1027,7 @@ func WaitForCacheSync(controllerName string, stopCh <-chan struct{}, cacheSyncs klog.Infof("Waiting for caches to sync for %s controller", controllerName) if !cache.WaitForCacheSync(stopCh, cacheSyncs...) { - utilruntime.HandleError(fmt.Errorf("Unable to sync caches for %s controller", controllerName)) + utilruntime.HandleError(fmt.Errorf("unable to sync caches for %s controller", controllerName)) return false } @@ -1051,3 +1051,48 @@ func ComputeHash(template *v1.PodTemplateSpec, collisionCount *int32) string { return rand.SafeEncodeString(fmt.Sprint(podTemplateSpecHasher.Sum32())) } + +func AddOrUpdateLabelsOnNode(kubeClient clientset.Interface, nodeName string, labelsToUpdate map[string]string) error { + firstTry := true + return clientretry.RetryOnConflict(UpdateLabelBackoff, func() error { + var err error + var node *v1.Node + // First we try getting node from the API server cache, as it's cheaper. If it fails + // we get it from etcd to be sure to have fresh data. + if firstTry { + node, err = kubeClient.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{ResourceVersion: "0"}) + firstTry = false + } else { + node, err = kubeClient.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) + } + if err != nil { + return err + } + + // Make a copy of the node and update the labels. + newNode := node.DeepCopy() + if newNode.Labels == nil { + newNode.Labels = make(map[string]string) + } + for key, value := range labelsToUpdate { + newNode.Labels[key] = value + } + + oldData, err := json.Marshal(node) + if err != nil { + return fmt.Errorf("failed to marshal the existing node %#v: %v", node, err) + } + newData, err := json.Marshal(newNode) + if err != nil { + return fmt.Errorf("failed to marshal the new node %#v: %v", newNode, err) + } + patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, &v1.Node{}) + if err != nil { + return fmt.Errorf("failed to create a two-way merge patch: %v", err) + } + if _, err := kubeClient.CoreV1().Nodes().Patch(node.Name, types.StrategicMergePatchType, patchBytes); err != nil { + return fmt.Errorf("failed to patch the node: %v", err) + } + return nil + }) +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/BUILD index 15b4f652d45..f91982bacf8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/BUILD @@ -30,6 +30,7 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/pager:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/tools/reference:go_default_library", "//vendor/github.com/robfig/cron:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/OWNERS old mode 100755 new mode 100644 index 44285bec824..2941b561f02 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - erictune - janetkuo diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controller.go index 8e797b41714..e2cb7d9ae36 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controller.go @@ -29,6 +29,7 @@ Just periodically list jobs and SJs, and then reconcile them. */ import ( + "context" "fmt" "sort" "time" @@ -46,6 +47,7 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/tools/pager" "k8s.io/client-go/tools/record" ref "k8s.io/client-go/tools/reference" "k8s.io/kubernetes/pkg/util/metrics" @@ -102,19 +104,35 @@ func (jm *CronJobController) syncAll() { // This guarantees that if we see any Job that got orphaned by the GC orphan finalizer, // we must also see that the parent CronJob has non-nil DeletionTimestamp (see #42639). // Note that this only works because we are NOT using any caches here. - jl, err := jm.kubeClient.BatchV1().Jobs(metav1.NamespaceAll).List(metav1.ListOptions{}) + jobListFunc := func(opts metav1.ListOptions) (runtime.Object, error) { + return jm.kubeClient.BatchV1().Jobs(metav1.NamespaceAll).List(opts) + } + jlTmp, err := pager.New(pager.SimplePageFunc(jobListFunc)).List(context.Background(), metav1.ListOptions{}) if err != nil { utilruntime.HandleError(fmt.Errorf("can't list Jobs: %v", err)) return } + jl, ok := jlTmp.(*batchv1.JobList) + if !ok { + utilruntime.HandleError(fmt.Errorf("expected type *batchv1.JobList, got type %T", jlTmp)) + return + } js := jl.Items klog.V(4).Infof("Found %d jobs", len(js)) - sjl, err := jm.kubeClient.BatchV1beta1().CronJobs(metav1.NamespaceAll).List(metav1.ListOptions{}) + cronJobListFunc := func(opts metav1.ListOptions) (runtime.Object, error) { + return jm.kubeClient.BatchV1beta1().CronJobs(metav1.NamespaceAll).List(opts) + } + sjlTmp, err := pager.New(pager.SimplePageFunc(cronJobListFunc)).List(context.Background(), metav1.ListOptions{}) if err != nil { utilruntime.HandleError(fmt.Errorf("can't list CronJobs: %v", err)) return } + sjl, ok := sjlTmp.(*batchv1beta1.CronJobList) + if !ok { + utilruntime.HandleError(fmt.Errorf("expected type *batchv1beta1.CronJobList, got type %T", sjlTmp)) + return + } sjs := sjl.Items klog.V(4).Infof("Found %d cronjobs", len(sjs)) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go index 19fb91c4baa..d1044a61462 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go @@ -195,13 +195,14 @@ func (o byJobStartTime) Len() int { return len(o) } func (o byJobStartTime) Swap(i, j int) { o[i], o[j] = o[j], o[i] } func (o byJobStartTime) Less(i, j int) bool { - if o[j].Status.StartTime == nil { - return o[i].Status.StartTime != nil + if o[i].Status.StartTime == nil && o[j].Status.StartTime != nil { + return false + } + if o[i].Status.StartTime != nil && o[j].Status.StartTime == nil { + return true } - if o[i].Status.StartTime.Equal(o[j].Status.StartTime) { return o[i].Name < o[j].Name } - return o[i].Status.StartTime.Before(o[j].Status.StartTime) } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/daemon/BUILD index 34eba68811e..b1d3548ed8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/BUILD @@ -20,9 +20,8 @@ go_library( "//pkg/controller/daemon/util:go_default_library", "//pkg/features:go_default_library", "//pkg/kubelet/types:go_default_library", - "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/util/labels:go_default_library", "//pkg/util/metrics:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", @@ -32,7 +31,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", @@ -51,9 +49,9 @@ go_library( "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) @@ -61,7 +59,6 @@ go_test( name = "go_default_test", srcs = [ "daemon_controller_test.go", - "main_test.go", "update_test.go", ], embed = [":go_default_library"], diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/daemon/OWNERS old mode 100755 new mode 100644 index 4e4296cf452..8ec6466c0dc --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/OWNERS @@ -1,6 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - mikedanese - janetkuo +- k82cn reviewers: - janetkuo - lukaszo diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go index 56ab1de2b2c..e70fa087d36 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go @@ -31,7 +31,6 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" @@ -48,17 +47,16 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" - "k8s.io/client-go/util/integer" "k8s.io/client-go/util/workqueue" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/daemon/util" "k8s.io/kubernetes/pkg/features" kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/kubernetes/pkg/util/metrics" + "k8s.io/utils/integer" ) const ( @@ -1017,7 +1015,7 @@ func (dsc *DaemonSetsController) syncNodes(ds *apps.DaemonSet, podsToDelete, nod if err != nil { generation = nil } - template := util.CreatePodTemplate(ds.Namespace, ds.Spec.Template, generation, hash) + template := util.CreatePodTemplate(ds.Spec.Template, generation, hash) // Batch the pod creates. Batch sizes start at SlowStartInitialBatchSize // and double with each successful iteration in a kind of "slow start". // This handles attempts to start large numbers of pods that would @@ -1035,10 +1033,8 @@ func (dsc *DaemonSetsController) syncNodes(ds *apps.DaemonSet, podsToDelete, nod defer createWait.Done() var err error - podTemplate := &template - + podTemplate := template.DeepCopy() if utilfeature.DefaultFeatureGate.Enabled(features.ScheduleDaemonSetPods) { - podTemplate = template.DeepCopy() // The pod's NodeAffinity will be updated to make sure the Pod is bound // to the target node by default scheduler. It is safe to do so because there // should be no conflicting node affinity with the target node. @@ -1048,6 +1044,9 @@ func (dsc *DaemonSetsController) syncNodes(ds *apps.DaemonSet, podsToDelete, nod err = dsc.podControl.CreatePodsWithControllerRef(ds.Namespace, podTemplate, ds, metav1.NewControllerRef(ds, controllerKind)) } else { + // If pod is scheduled by DaemonSetController, set its '.spec.scheduleName'. + podTemplate.Spec.SchedulerName = "kubernetes.io/daemonset-controller" + err = dsc.podControl.CreatePodsOnNode(nodesNeedingDaemonPods[ix], ds.Namespace, podTemplate, ds, metav1.NewControllerRef(ds, controllerKind)) } @@ -1294,23 +1293,22 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error { return dsc.updateDaemonSetStatus(ds, hash, true) } -func (dsc *DaemonSetsController) simulate(newPod *v1.Pod, node *v1.Node, ds *apps.DaemonSet) ([]algorithm.PredicateFailureReason, *schedulercache.NodeInfo, error) { +func (dsc *DaemonSetsController) simulate(newPod *v1.Pod, node *v1.Node, ds *apps.DaemonSet) ([]predicates.PredicateFailureReason, *schedulernodeinfo.NodeInfo, error) { objects, err := dsc.podNodeIndex.ByIndex("nodeName", node.Name) if err != nil { return nil, nil, err } - nodeInfo := schedulercache.NewNodeInfo() + nodeInfo := schedulernodeinfo.NewNodeInfo() nodeInfo.SetNode(node) for _, obj := range objects { // Ignore pods that belong to the daemonset when taking into account whether a daemonset should bind to a node. - // TODO: replace this with metav1.IsControlledBy() in 1.12 pod, ok := obj.(*v1.Pod) if !ok { continue } - if isControlledByDaemonSet(pod, ds.GetUID()) { + if metav1.IsControlledBy(pod, ds) { continue } nodeInfo.AddPod(pod) @@ -1426,7 +1424,7 @@ func NewPod(ds *apps.DaemonSet, nodeName string) *v1.Pod { newPod.Spec.NodeName = nodeName // Added default tolerations for DaemonSet pods. - util.AddOrUpdateDaemonPodTolerations(&newPod.Spec, kubelettypes.IsCriticalPod(newPod)) + util.AddOrUpdateDaemonPodTolerations(&newPod.Spec) return newPod } @@ -1436,8 +1434,8 @@ func NewPod(ds *apps.DaemonSet, nodeName string) *v1.Pod { // - PodFitsHost: checks pod's NodeName against node // - PodMatchNodeSelector: checks pod's NodeSelector and NodeAffinity against node // - PodToleratesNodeTaints: exclude tainted node unless pod has specific toleration -func checkNodeFitness(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - var predicateFails []algorithm.PredicateFailureReason +func checkNodeFitness(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) { + var predicateFails []predicates.PredicateFailureReason fit, reasons, err := predicates.PodFitsHost(pod, meta, nodeInfo) if err != nil { return false, predicateFails, err @@ -1466,8 +1464,8 @@ func checkNodeFitness(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *s // Predicates checks if a DaemonSet's pod can be scheduled on a node using GeneralPredicates // and PodToleratesNodeTaints predicate -func Predicates(pod *v1.Pod, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - var predicateFails []algorithm.PredicateFailureReason +func Predicates(pod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) { + var predicateFails []predicates.PredicateFailureReason // If ScheduleDaemonSetPods is enabled, only check nodeSelector, nodeAffinity and toleration/taint match. if utilfeature.DefaultFeatureGate.Enabled(features.ScheduleDaemonSetPods) { @@ -1529,15 +1527,6 @@ func (o podByCreationTimestampAndPhase) Less(i, j int) bool { return o[i].CreationTimestamp.Before(&o[j].CreationTimestamp) } -func isControlledByDaemonSet(p *v1.Pod, uuid types.UID) bool { - for _, ref := range p.OwnerReferences { - if ref.Controller != nil && *ref.Controller && ref.UID == uuid { - return true - } - } - return false -} - func failedPodsBackoffKey(ds *apps.DaemonSet, nodeName string) string { return fmt.Sprintf("%s/%d/%s", ds.UID, ds.Status.ObservedGeneration, nodeName) } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go index ac13b32fb27..6f1967d6e31 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go @@ -178,7 +178,7 @@ func (dsc *DaemonSetsController) cleanupHistory(ds *apps.DaemonSet, old []*apps. continue } // Clean up - err := dsc.kubeClient.AppsV1beta1().ControllerRevisions(ds.Namespace).Delete(history.Name, nil) + err := dsc.kubeClient.AppsV1().ControllerRevisions(ds.Namespace).Delete(history.Name, nil) if err != nil { return err } @@ -234,7 +234,7 @@ func (dsc *DaemonSetsController) dedupCurHistories(ds *apps.DaemonSet, curHistor } } // Remove duplicates - err = dsc.kubeClient.AppsV1beta1().ControllerRevisions(ds.Namespace).Delete(cur.Name, nil) + err = dsc.kubeClient.AppsV1().ControllerRevisions(ds.Namespace).Delete(cur.Name, nil) if err != nil { return nil, err } @@ -261,7 +261,7 @@ func (dsc *DaemonSetsController) controlledHistories(ds *apps.DaemonSet) ([]*app // If any adoptions are attempted, we should first recheck for deletion with // an uncached quorum read sometime after listing Pods (see #42639). canAdoptFunc := controller.RecheckDeletionTimestamp(func() (metav1.Object, error) { - fresh, err := dsc.kubeClient.ExtensionsV1beta1().DaemonSets(ds.Namespace).Get(ds.Name, metav1.GetOptions{}) + fresh, err := dsc.kubeClient.AppsV1().DaemonSets(ds.Namespace).Get(ds.Name, metav1.GetOptions{}) if err != nil { return nil, err } @@ -348,7 +348,7 @@ func (dsc *DaemonSetsController) snapshot(ds *apps.DaemonSet, revision int64) (* // Handle name collisions between different history // Get the latest DaemonSet from the API server to make sure collision count is only increased when necessary - currDS, getErr := dsc.kubeClient.ExtensionsV1beta1().DaemonSets(ds.Namespace).Get(ds.Name, metav1.GetOptions{}) + currDS, getErr := dsc.kubeClient.AppsV1().DaemonSets(ds.Namespace).Get(ds.Name, metav1.GetOptions{}) if getErr != nil { return nil, getErr } @@ -360,7 +360,7 @@ func (dsc *DaemonSetsController) snapshot(ds *apps.DaemonSet, revision int64) (* currDS.Status.CollisionCount = new(int32) } *currDS.Status.CollisionCount++ - _, updateErr := dsc.kubeClient.ExtensionsV1beta1().DaemonSets(ds.Namespace).UpdateStatus(currDS) + _, updateErr := dsc.kubeClient.AppsV1().DaemonSets(ds.Namespace).UpdateStatus(currDS) if updateErr != nil { return nil, updateErr } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/BUILD index 0292ffce296..d8b01615dd2 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/BUILD @@ -13,14 +13,11 @@ go_library( deps = [ "//pkg/api/v1/pod:go_default_library", "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/features:go_default_library", - "//pkg/kubelet/types:go_default_library", "//pkg/scheduler/api:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) @@ -39,15 +36,10 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "daemonset_util_test.go", - "main_test.go", - ], + srcs = ["daemonset_util_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/api:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/daemonset_util.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/daemonset_util.go index 1d1ba548fd7..2b3f9eb9bc4 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/daemonset_util.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/util/daemonset_util.go @@ -21,7 +21,7 @@ import ( "strconv" apps "k8s.io/api/apps/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" podutil "k8s.io/kubernetes/pkg/api/v1/pod" @@ -46,7 +46,7 @@ func GetTemplateGeneration(ds *apps.DaemonSet) (*int64, error) { } // AddOrUpdateDaemonPodTolerations apply necessary tolerations to DeamonSet Pods, e.g. node.kubernetes.io/not-ready:NoExecute. -func AddOrUpdateDaemonPodTolerations(spec *v1.PodSpec, isCritical bool) { +func AddOrUpdateDaemonPodTolerations(spec *v1.PodSpec) { // DaemonSet pods shouldn't be deleted by NodeController in case of node problems. // Add infinite toleration for taint notReady:NoExecute here // to survive taint-based eviction enforced by NodeController @@ -68,8 +68,7 @@ func AddOrUpdateDaemonPodTolerations(spec *v1.PodSpec, isCritical bool) { }) // According to TaintNodesByCondition feature, all DaemonSet pods should tolerate - // MemoryPressure, DisPressure, Unschedulable and NetworkUnavailable taints, - // and the critical pods should tolerate OutOfDisk taint. + // MemoryPressure, DiskPressure, PIDPressure, Unschedulable and NetworkUnavailable taints. v1helper.AddOrUpdateTolerationInPodSpec(spec, &v1.Toleration{ Key: schedulerapi.TaintNodeDiskPressure, Operator: v1.TolerationOpExists, @@ -82,6 +81,12 @@ func AddOrUpdateDaemonPodTolerations(spec *v1.PodSpec, isCritical bool) { Effect: v1.TaintEffectNoSchedule, }) + v1helper.AddOrUpdateTolerationInPodSpec(spec, &v1.Toleration{ + Key: schedulerapi.TaintNodePIDPressure, + Operator: v1.TolerationOpExists, + Effect: v1.TaintEffectNoSchedule, + }) + v1helper.AddOrUpdateTolerationInPodSpec(spec, &v1.Toleration{ Key: schedulerapi.TaintNodeUnschedulable, Operator: v1.TolerationOpExists, @@ -95,29 +100,15 @@ func AddOrUpdateDaemonPodTolerations(spec *v1.PodSpec, isCritical bool) { Effect: v1.TaintEffectNoSchedule, }) } - - // TODO(#48843) OutOfDisk taints will be removed in 1.10 - if isCritical { - v1helper.AddOrUpdateTolerationInPodSpec(spec, &v1.Toleration{ - Key: schedulerapi.TaintNodeOutOfDisk, - Operator: v1.TolerationOpExists, - Effect: v1.TaintEffectNoExecute, - }) - v1helper.AddOrUpdateTolerationInPodSpec(spec, &v1.Toleration{ - Key: schedulerapi.TaintNodeOutOfDisk, - Operator: v1.TolerationOpExists, - Effect: v1.TaintEffectNoSchedule, - }) - } } // CreatePodTemplate returns copy of provided template with additional // label which contains templateGeneration (for backward compatibility), // hash of provided template and sets default daemon tolerations. -func CreatePodTemplate(ns string, template v1.PodTemplateSpec, generation *int64, hash string) v1.PodTemplateSpec { +func CreatePodTemplate(template v1.PodTemplateSpec, generation *int64, hash string) v1.PodTemplateSpec { newTemplate := *template.DeepCopy() - AddOrUpdateDaemonPodTolerations(&newTemplate.Spec, false) + AddOrUpdateDaemonPodTolerations(&newTemplate.Spec) if newTemplate.ObjectMeta.Labels == nil { newTemplate.ObjectMeta.Labels = make(map[string]string) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/deployment/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/deployment/BUILD index 7f1964a4f7e..53865847a37 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/deployment/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/BUILD @@ -40,9 +40,9 @@ go_library( "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/deployment/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/deployment/OWNERS old mode 100755 new mode 100644 index 985da0553b9..cfda9340c32 --- a/vendor/k8s.io/kubernetes/pkg/controller/deployment/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - janetkuo - nikhiljindal diff --git a/vendor/k8s.io/kubernetes/pkg/controller/deployment/rolling.go b/vendor/k8s.io/kubernetes/pkg/controller/deployment/rolling.go index 6950c3e6798..7cc40bbc53e 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/deployment/rolling.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/rolling.go @@ -21,10 +21,10 @@ import ( "sort" apps "k8s.io/api/apps/v1" - "k8s.io/client-go/util/integer" "k8s.io/klog" "k8s.io/kubernetes/pkg/controller" deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" + "k8s.io/utils/integer" ) // rolloutRolling implements the logic for rolling a new replica set. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/BUILD index 2b563e00ae2..3d9f752248b 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/BUILD @@ -23,8 +23,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go index 00e5c4c36e6..a731cc7bb5e 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go @@ -27,7 +27,7 @@ import ( "k8s.io/klog" apps "k8s.io/api/apps/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -36,9 +36,9 @@ import ( intstrutil "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/wait" appsclient "k8s.io/client-go/kubernetes/typed/apps/v1" - "k8s.io/client-go/util/integer" "k8s.io/kubernetes/pkg/controller" labelsutil "k8s.io/kubernetes/pkg/util/labels" + "k8s.io/utils/integer" ) const ( @@ -61,10 +61,11 @@ const ( RollbackTemplateUnchanged = "DeploymentRollbackTemplateUnchanged" // RollbackDone is the done rollback event reason RollbackDone = "DeploymentRollback" + // Reasons for deployment conditions // // Progressing: - // + // ReplicaSetUpdatedReason is added in a deployment when one of its replica sets is updated as part // of the rollout process. ReplicaSetUpdatedReason = "ReplicaSetUpdated" @@ -89,7 +90,7 @@ const ( ResumedDeployReason = "DeploymentResumed" // // Available: - // + // MinimumReplicasAvailable is added in a deployment when it has its minimum replicas required available. MinimumReplicasAvailable = "MinimumReplicasAvailable" // MinimumReplicasUnavailable is added in a deployment when it doesn't have the minimum required replicas @@ -401,7 +402,7 @@ func SetReplicasAnnotations(rs *apps.ReplicaSet, desiredReplicas, maxReplicas in return updated } -// AnnotationsNeedUpdate return true if ReplicasAnnotations need to be updated +// ReplicasAnnotationsNeedUpdate return true if ReplicasAnnotations need to be updated func ReplicasAnnotationsNeedUpdate(rs *apps.ReplicaSet, desiredReplicas, maxReplicas int32) bool { if rs.Annotations == nil { return true @@ -544,8 +545,12 @@ func RsListFromClient(c appsclient.AppsV1Interface) RsListFunc { } } -// TODO: switch this to full namespacers +// TODO: switch RsListFunc and podListFunc to full namespacers + +// RsListFunc returns the ReplicaSet from the ReplicaSet namespace and the List metav1.ListOptions. type RsListFunc func(string, metav1.ListOptions) ([]*apps.ReplicaSet, error) + +// podListFunc returns the PodList from the Pod namespace and the List metav1.ListOptions. type podListFunc func(string, metav1.ListOptions) (*v1.PodList, error) // ListReplicaSets returns a slice of RSes the given deployment targets. @@ -883,9 +888,16 @@ func ResolveFenceposts(maxSurge, maxUnavailable *intstrutil.IntOrString, desired return int32(surge), int32(unavailable), nil } +// HasProgressDeadline checks if the Deployment d is expected to surface the reason +// "ProgressDeadlineExceeded" when the Deployment progress takes longer than expected time. func HasProgressDeadline(d *apps.Deployment) bool { return d.Spec.ProgressDeadlineSeconds != nil && *d.Spec.ProgressDeadlineSeconds != math.MaxInt32 } + +// HasRevisionHistoryLimit checks if the Deployment d is expected to keep a specified number of +// old replicaSets. These replicaSets are mainly kept with the purpose of rollback. +// The RevisionHistoryLimit can start from 0 (no retained replicasSet). When set to math.MaxInt32, +// the Deployment will keep all revisions. func HasRevisionHistoryLimit(d *apps.Deployment) bool { return d.Spec.RevisionHistoryLimit != nil && *d.Spec.RevisionHistoryLimit != math.MaxInt32 } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/disruption/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/disruption/BUILD index 440966beca9..1e837373291 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/disruption/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/disruption/BUILD @@ -23,17 +23,15 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/client-go/informers/apps/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/informers/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1:go_default_library", - "//staging/src/k8s.io/client-go/listers/apps/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", @@ -49,9 +47,8 @@ go_test( deps = [ "//pkg/apis/core/install:go_default_library", "//pkg/controller:go_default_library", - "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", + "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/disruption/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/disruption/OWNERS old mode 100755 new mode 100644 index 175b5751b27..53e9977950f --- a/vendor/k8s.io/kubernetes/pkg/controller/disruption/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/disruption/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - sig-apps-reviewers labels: diff --git a/vendor/k8s.io/kubernetes/pkg/controller/disruption/disruption.go b/vendor/k8s.io/kubernetes/pkg/controller/disruption/disruption.go index 8c45cc06011..1658d515602 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/disruption/disruption.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/disruption/disruption.go @@ -31,17 +31,15 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - appsinformers "k8s.io/client-go/informers/apps/v1beta1" + appsv1informers "k8s.io/client-go/informers/apps/v1" coreinformers "k8s.io/client-go/informers/core/v1" - extensionsinformers "k8s.io/client-go/informers/extensions/v1beta1" policyinformers "k8s.io/client-go/informers/policy/v1beta1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" policyclientset "k8s.io/client-go/kubernetes/typed/policy/v1beta1" - appslisters "k8s.io/client-go/listers/apps/v1beta1" + appsv1listers "k8s.io/client-go/listers/apps/v1" corelisters "k8s.io/client-go/listers/core/v1" - extensionslisters "k8s.io/client-go/listers/extensions/v1beta1" policylisters "k8s.io/client-go/listers/policy/v1beta1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" @@ -79,13 +77,13 @@ type DisruptionController struct { rcLister corelisters.ReplicationControllerLister rcListerSynced cache.InformerSynced - rsLister extensionslisters.ReplicaSetLister + rsLister appsv1listers.ReplicaSetLister rsListerSynced cache.InformerSynced - dLister extensionslisters.DeploymentLister + dLister appsv1listers.DeploymentLister dListerSynced cache.InformerSynced - ssLister appslisters.StatefulSetLister + ssLister appsv1listers.StatefulSetLister ssListerSynced cache.InformerSynced // PodDisruptionBudget keys that need to be synced. @@ -113,15 +111,15 @@ func NewDisruptionController( podInformer coreinformers.PodInformer, pdbInformer policyinformers.PodDisruptionBudgetInformer, rcInformer coreinformers.ReplicationControllerInformer, - rsInformer extensionsinformers.ReplicaSetInformer, - dInformer extensionsinformers.DeploymentInformer, - ssInformer appsinformers.StatefulSetInformer, + rsInformer appsv1informers.ReplicaSetInformer, + dInformer appsv1informers.DeploymentInformer, + ssInformer appsv1informers.StatefulSetInformer, kubeClient clientset.Interface, ) *DisruptionController { dc := &DisruptionController{ kubeClient: kubeClient, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "disruption"), - recheckQueue: workqueue.NewNamedDelayingQueue("disruption-recheck"), + recheckQueue: workqueue.NewNamedDelayingQueue("disruption_recheck"), broadcaster: record.NewBroadcaster(), } dc.recorder = dc.broadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "controllermanager"}) @@ -722,9 +720,9 @@ func refresh(pdbClient policyclientset.PodDisruptionBudgetInterface, pdb *policy newPdb, err := pdbClient.Get(pdb.Name, metav1.GetOptions{}) if err == nil { return newPdb - } else { - return pdb } + return pdb + } func (dc *DisruptionController) writePdbStatus(pdb *policy.PodDisruptionBudget) error { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/BUILD index 4c4646b5a2b..e8222fa0ef0 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/BUILD @@ -11,6 +11,7 @@ go_library( srcs = [ "doc.go", "endpoints_controller.go", + "trigger_time_tracker.go", ], importpath = "k8s.io/kubernetes/pkg/controller/endpoint", deps = [ @@ -42,7 +43,10 @@ go_library( go_test( name = "go_default_test", - srcs = ["endpoints_controller_test.go"], + srcs = [ + "endpoints_controller_test.go", + "trigger_time_tracker_test.go", + ], embed = [":go_default_library"], deps = [ "//pkg/api/testapi:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/OWNERS old mode 100755 new mode 100644 index 14351bb3ac0..11633581acf --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - bowei - MrHohn @@ -8,3 +10,5 @@ reviewers: - MrHohn - thockin - matchstick +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/doc.go index b3d86af747a..dbd3d1045d3 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/doc.go @@ -14,6 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package service provides EndpointController implementation +// Package endpoint provides EndpointController implementation // to manage and sync service endpoints. package endpoint // import "k8s.io/kubernetes/pkg/controller/endpoint" diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go index 865404b1a8e..799dba10335 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go @@ -108,8 +108,10 @@ func NewEndpointController(podInformer coreinformers.PodInformer, serviceInforme e.endpointsLister = endpointsInformer.Lister() e.endpointsSynced = endpointsInformer.Informer().HasSynced + e.triggerTimeTracker = NewTriggerTimeTracker() e.eventBroadcaster = broadcaster e.eventRecorder = recorder + return e } @@ -149,6 +151,10 @@ type EndpointController struct { // workerLoopPeriod is the time between worker runs. The workers process the queue of service and pod changes. workerLoopPeriod time.Duration + + // triggerTimeTracker is an util used to compute and export the EndpointsLastChangeTriggerTime + // annotation. + triggerTimeTracker *TriggerTimeTracker } // Run will not return until stopCh is closed. workers determines how many @@ -410,6 +416,7 @@ func (e *EndpointController) syncService(key string) error { if err != nil && !errors.IsNotFound(err) { return err } + e.triggerTimeTracker.DeleteEndpoints(namespace, name) return nil } @@ -438,9 +445,15 @@ func (e *EndpointController) syncService(key string) error { } } + // We call ComputeEndpointsLastChangeTriggerTime here to make sure that the state of the trigger + // time tracker gets updated even if the sync turns out to be no-op and we don't update the + // endpoints object. + endpointsLastChangeTriggerTime := e.triggerTimeTracker. + ComputeEndpointsLastChangeTriggerTime(namespace, name, service, pods) + subsets := []v1.EndpointSubset{} - var totalReadyEps int = 0 - var totalNotReadyEps int = 0 + var totalReadyEps int + var totalNotReadyEps int for _, pod := range pods { if len(pod.Status.PodIP) == 0 { @@ -517,6 +530,13 @@ func (e *EndpointController) syncService(key string) error { newEndpoints.Annotations = make(map[string]string) } + if !endpointsLastChangeTriggerTime.IsZero() { + newEndpoints.Annotations[v1.EndpointsLastChangeTriggerTime] = + endpointsLastChangeTriggerTime.Format(time.RFC3339Nano) + } else { // No new trigger time, clear the annotation. + delete(newEndpoints.Annotations, v1.EndpointsLastChangeTriggerTime) + } + klog.V(4).Infof("Update endpoints for %v/%v, ready: %d not ready: %d", service.Namespace, service.Name, totalReadyEps, totalNotReadyEps) if createEndpoints { // No previous endpoints, create them @@ -577,8 +597,8 @@ func (e *EndpointController) checkLeftoverEndpoints() { func addEndpointSubset(subsets []v1.EndpointSubset, pod *v1.Pod, epa v1.EndpointAddress, epp *v1.EndpointPort, tolerateUnreadyEndpoints bool) ([]v1.EndpointSubset, int, int) { - var readyEps int = 0 - var notReadyEps int = 0 + var readyEps int + var notReadyEps int ports := []v1.EndpointPort{} if epp != nil { ports = append(ports, *epp) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/trigger_time_tracker.go b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/trigger_time_tracker.go new file mode 100644 index 00000000000..0b2c72a9b7b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/trigger_time_tracker.go @@ -0,0 +1,163 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package endpoint + +import ( + "sync" + "time" + + "k8s.io/api/core/v1" + podutil "k8s.io/kubernetes/pkg/api/v1/pod" +) + +// TriggerTimeTracker is a util used to compute the EndpointsLastChangeTriggerTime annotation which +// is exported in the endpoints controller's sync function. +// See the documentation of the EndpointsLastChangeTriggerTime annotation for more details. +// +// Please note that this util may compute a wrong EndpointsLastChangeTriggerTime if a same object +// changes multiple times between two consecutive syncs. We're aware of this limitation but we +// decided to accept it, as fixing it would require a major rewrite of the endpoints controller and +// Informer framework. Such situations, i.e. frequent updates of the same object in a single sync +// period, should be relatively rare and therefore this util should provide a good approximation of +// the EndpointsLastChangeTriggerTime. +// TODO(mm4tt): Implement a more robust mechanism that is not subject to the above limitations. +type TriggerTimeTracker struct { + // endpointsStates is a map, indexed by Endpoints object key, storing the last known Endpoints + // object state observed during the most recent call of the ComputeEndpointsLastChangeTriggerTime + // function. + endpointsStates map[endpointsKey]endpointsState + + // mutex guarding the endpointsStates map. + mutex sync.Mutex +} + +// NewTriggerTimeTracker creates a new instance of the TriggerTimeTracker. +func NewTriggerTimeTracker() *TriggerTimeTracker { + return &TriggerTimeTracker{ + endpointsStates: make(map[endpointsKey]endpointsState), + } +} + +// endpointsKey is a key uniquely identifying an Endpoints object. +type endpointsKey struct { + // namespace, name composing a namespaced name - an unique identifier of every Endpoints object. + namespace, name string +} + +// endpointsState represents a state of an Endpoints object that is known to this util. +type endpointsState struct { + // lastServiceTriggerTime is a service trigger time observed most recently. + lastServiceTriggerTime time.Time + // lastPodTriggerTimes is a map (Pod name -> time) storing the pod trigger times that were + // observed during the most recent call of the ComputeEndpointsLastChangeTriggerTime function. + lastPodTriggerTimes map[string]time.Time +} + +// ComputeEndpointsLastChangeTriggerTime updates the state of the Endpoints object being synced +// and returns the time that should be exported as the EndpointsLastChangeTriggerTime annotation. +// +// If the method returns a 'zero' time the EndpointsLastChangeTriggerTime annotation shouldn't be +// exported. +// +// Please note that this function may compute a wrong EndpointsLastChangeTriggerTime value if the +// same object (pod/service) changes multiple times between two consecutive syncs. +// +// Important: This method is go-routing safe but only when called for different keys. The method +// shouldn't be called concurrently for the same key! This contract is fulfilled in the current +// implementation of the endpoints controller. +func (t *TriggerTimeTracker) ComputeEndpointsLastChangeTriggerTime( + namespace, name string, service *v1.Service, pods []*v1.Pod) time.Time { + + key := endpointsKey{namespace: namespace, name: name} + // As there won't be any concurrent calls for the same key, we need to guard access only to the + // endpointsStates map. + t.mutex.Lock() + state, wasKnown := t.endpointsStates[key] + t.mutex.Unlock() + + // Update the state before returning. + defer func() { + t.mutex.Lock() + t.endpointsStates[key] = state + t.mutex.Unlock() + }() + + // minChangedTriggerTime is the min trigger time of all trigger times that have changed since the + // last sync. + var minChangedTriggerTime time.Time + // TODO(mm4tt): If memory allocation / GC performance impact of recreating map in every call + // turns out to be too expensive, we should consider rewriting this to reuse the existing map. + podTriggerTimes := make(map[string]time.Time) + for _, pod := range pods { + if podTriggerTime := getPodTriggerTime(pod); !podTriggerTime.IsZero() { + podTriggerTimes[pod.Name] = podTriggerTime + if podTriggerTime.After(state.lastPodTriggerTimes[pod.Name]) { + // Pod trigger time has changed since the last sync, update minChangedTriggerTime. + minChangedTriggerTime = min(minChangedTriggerTime, podTriggerTime) + } + } + } + serviceTriggerTime := getServiceTriggerTime(service) + if serviceTriggerTime.After(state.lastServiceTriggerTime) { + // Service trigger time has changed since the last sync, update minChangedTriggerTime. + minChangedTriggerTime = min(minChangedTriggerTime, serviceTriggerTime) + } + + state.lastPodTriggerTimes = podTriggerTimes + state.lastServiceTriggerTime = serviceTriggerTime + + if !wasKnown { + // New Endpoints object / new Service, use Service creationTimestamp. + return service.CreationTimestamp.Time + } else { + // Regular update of the Endpoints object, return min of changed trigger times. + return minChangedTriggerTime + } +} + +// DeleteEndpoints deletes endpoints state stored in this util. +func (t *TriggerTimeTracker) DeleteEndpoints(namespace, name string) { + key := endpointsKey{namespace: namespace, name: name} + t.mutex.Lock() + defer t.mutex.Unlock() + delete(t.endpointsStates, key) +} + +// getPodTriggerTime returns the time of the pod change (trigger) that resulted or will result in +// the endpoints object change. +func getPodTriggerTime(pod *v1.Pod) (triggerTime time.Time) { + if readyCondition := podutil.GetPodReadyCondition(pod.Status); readyCondition != nil { + triggerTime = readyCondition.LastTransitionTime.Time + } + // TODO(mm4tt): Implement missing cases: deletionTime set, pod label change + return triggerTime +} + +// getServiceTriggerTime returns the time of the service change (trigger) that resulted or will +// result in the endpoints object change. +func getServiceTriggerTime(service *v1.Service) (triggerTime time.Time) { + // TODO(mm4tt): Ideally we should look at service.LastUpdateTime, but such thing doesn't exist. + return service.CreationTimestamp.Time +} + +// min returns minimum of the currentMin and newValue or newValue if the currentMin is not set. +func min(currentMin, newValue time.Time) time.Time { + if currentMin.IsZero() || newValue.Before(currentMin) { + return newValue + } + return currentMin +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/BUILD index c1c7f93abb0..0b48d847283 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/BUILD @@ -22,8 +22,6 @@ go_library( deps = [ "//pkg/controller:go_default_library", "//pkg/controller/garbagecollector/metaonly:go_default_library", - "//pkg/util/reflector/prometheus:go_default_library", - "//pkg/util/workqueue/prometheus:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/OWNERS old mode 100755 new mode 100644 index 53def544e49..4126598370e --- a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector.go b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector.go index e090a84fb57..710aa4d6f36 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector.go @@ -39,9 +39,6 @@ import ( "k8s.io/client-go/informers" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/controller" - _ "k8s.io/kubernetes/pkg/util/reflector/prometheus" // for reflector metric registration - // install the prometheus plugin - _ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // import known versions _ "k8s.io/client-go/kubernetes" ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/operations.go b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/operations.go index a6cf9dd5140..93dd771984c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/operations.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/operations.go @@ -19,8 +19,6 @@ package garbagecollector import ( "fmt" - "k8s.io/klog" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -28,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/util/retry" + "k8s.io/klog" ) // cluster scoped resources don't have namespaces. Default to the item's namespace, but clear it for cluster scoped resources @@ -81,7 +80,7 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt t if err != nil { return nil, err } - return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.UpdateOptions{}) + return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.PatchOptions{}) } // TODO: Using Patch when strategicmerge supports deleting an entry from a @@ -93,11 +92,11 @@ func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) return nil } if err != nil { - return fmt.Errorf("cannot finalize owner %s, because cannot get it: %v. The garbage collector will retry later.", owner.identity, err) + return fmt.Errorf("cannot finalize owner %s, because cannot get it: %v. The garbage collector will retry later", owner.identity, err) } accessor, err := meta.Accessor(ownerObject) if err != nil { - return fmt.Errorf("cannot access the owner object %v: %v. The garbage collector will retry later.", ownerObject, err) + return fmt.Errorf("cannot access the owner object %v: %v. The garbage collector will retry later", ownerObject, err) } finalizers := accessor.GetFinalizers() var newFinalizers []string @@ -119,7 +118,7 @@ func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) return err }) if errors.IsConflict(err) { - return fmt.Errorf("updateMaxRetries(%d) has reached. The garbage collector will retry later for owner %v.", retry.DefaultBackoff.Steps, owner.identity) + return fmt.Errorf("updateMaxRetries(%d) has reached. The garbage collector will retry later for owner %v", retry.DefaultBackoff.Steps, owner.identity) } return err } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/history/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/history/OWNERS old mode 100755 new mode 100644 index 1b97b567cad..f0156c7d4c7 --- a/vendor/k8s.io/kubernetes/pkg/controller/history/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/history/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - enisoc - foxish diff --git a/vendor/k8s.io/kubernetes/pkg/controller/history/controller_history.go b/vendor/k8s.io/kubernetes/pkg/controller/history/controller_history.go index cc7fc433ce7..262652e36d2 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/history/controller_history.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/history/controller_history.go @@ -70,21 +70,10 @@ func NewControllerRevision(parent metav1.Object, for k, v := range templateLabels { labelMap[k] = v } - blockOwnerDeletion := true - isController := true cr := &apps.ControllerRevision{ ObjectMeta: metav1.ObjectMeta{ - Labels: labelMap, - OwnerReferences: []metav1.OwnerReference{ - { - APIVersion: parentKind.GroupVersion().String(), - Kind: parentKind.Kind, - Name: parent.GetName(), - UID: parent.GetUID(), - BlockOwnerDeletion: &blockOwnerDeletion, - Controller: &isController, - }, - }, + Labels: labelMap, + OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(parent, parentKind)}, }, Data: data, Revision: revision, @@ -113,7 +102,7 @@ func HashControllerRevision(revision *apps.ControllerRevision, probe *int32) str // SortControllerRevisions sorts revisions by their Revision. func SortControllerRevisions(revisions []*apps.ControllerRevision) { - sort.Sort(byRevision(revisions)) + sort.Stable(byRevision(revisions)) } // EqualRevision returns true if lhs and rhs are either both nil, or both point to non-nil ControllerRevisions that @@ -162,7 +151,14 @@ func (br byRevision) Len() int { return len(br) } +// Less breaks ties first by creation timestamp, then by name func (br byRevision) Less(i, j int) bool { + if br[i].Revision == br[j].Revision { + if br[j].CreationTimestamp.Equal(&br[i].CreationTimestamp) { + return br[i].Name < br[j].Name + } + return br[j].CreationTimestamp.After(br[i].CreationTimestamp.Time) + } return br[i].Revision < br[j].Revision } @@ -410,8 +406,6 @@ func (fh *fakeHistory) UpdateControllerRevision(revision *apps.ControllerRevisio } func (fh *fakeHistory) AdoptControllerRevision(parent metav1.Object, parentKind schema.GroupVersionKind, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) { - blockOwnerDeletion := true - isController := true if owner := metav1.GetControllerOf(revision); owner != nil { return nil, fmt.Errorf("attempt to adopt revision owned by %v", owner) } @@ -427,16 +421,8 @@ func (fh *fakeHistory) AdoptControllerRevision(parent metav1.Object, parentKind return nil, errors.NewNotFound(apps.Resource("controllerrevisions"), revision.Name) } clone := revision.DeepCopy() - clone.OwnerReferences = append(clone.OwnerReferences, metav1.OwnerReference{ - APIVersion: parentKind.GroupVersion().String(), - Kind: parentKind.Kind, - Name: parent.GetName(), - UID: parent.GetUID(), - BlockOwnerDeletion: &blockOwnerDeletion, - Controller: &isController, - }) + clone.OwnerReferences = append(clone.OwnerReferences, *metav1.NewControllerRef(parent, parentKind)) return clone, fh.indexer.Update(clone) - } func (fh *fakeHistory) ReleaseControllerRevision(parent metav1.Object, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/job/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/job/BUILD index cb12dbe575b..2cdbcd4986f 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/job/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/job/BUILD @@ -33,9 +33,9 @@ go_library( "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/job/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/job/OWNERS old mode 100755 new mode 100644 index 44285bec824..2941b561f02 --- a/vendor/k8s.io/kubernetes/pkg/controller/job/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/job/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - erictune - janetkuo diff --git a/vendor/k8s.io/kubernetes/pkg/controller/job/job_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/job/job_controller.go index ebdcd7e2640..e3cecd9fc2d 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/job/job_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/job/job_controller.go @@ -40,10 +40,10 @@ import ( corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/integer" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/metrics" + "k8s.io/utils/integer" "k8s.io/klog" ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/namespace/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/namespace/OWNERS old mode 100755 new mode 100644 index b4a3c10782e..417fa9e8002 --- a/vendor/k8s.io/kubernetes/pkg/controller/namespace/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/namespace/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - derekwaynecarr - smarterclayton diff --git a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go index 7e28a4e9963..379a8219cb7 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go @@ -378,7 +378,7 @@ func (d *namespacedResourcesDeleter) listCollection(gvr schema.GroupVersionResou return nil, false, nil } - unstructuredList, err := d.dynamicClient.Resource(gvr).Namespace(namespace).List(metav1.ListOptions{IncludeUninitialized: true}) + unstructuredList, err := d.dynamicClient.Resource(gvr).Namespace(namespace).List(metav1.ListOptions{}) if err == nil { return unstructuredList, true, nil } @@ -479,19 +479,22 @@ func (d *namespacedResourcesDeleter) deleteAllContentForGroupVersionResource( // It returns an estimate of the time remaining before the remaining resources are deleted. // If estimate > 0, not all resources are guaranteed to be gone. func (d *namespacedResourcesDeleter) deleteAllContent(namespace string, namespaceDeletedAt metav1.Time) (int64, error) { + var errs []error estimate := int64(0) klog.V(4).Infof("namespace controller - deleteAllContent - namespace: %s", namespace) + resources, err := d.discoverResourcesFn() if err != nil { - return estimate, err + // discovery errors are not fatal. We often have some set of resources we can operate against even if we don't have a complete list + errs = append(errs, err) } // TODO(sttts): get rid of opCache and pass the verbs (especially "deletecollection") down into the deleter deletableResources := discovery.FilteredBy(discovery.SupportsAllVerbs{Verbs: []string{"delete"}}, resources) groupVersionResources, err := discovery.GroupVersionResources(deletableResources) if err != nil { - return estimate, err + // discovery errors are not fatal. We often have some set of resources we can operate against even if we don't have a complete list + errs = append(errs, err) } - var errs []error for gvr := range groupVersionResources { gvrEstimate, err := d.deleteAllContentForGroupVersionResource(gvr, namespace, namespaceDeletedAt) if err != nil { @@ -540,7 +543,7 @@ func (d *namespacedResourcesDeleter) estimateGracefulTerminationForPods(ns strin if podsGetter == nil || reflect.ValueOf(podsGetter).IsNil() { return estimate, fmt.Errorf("unexpected: podsGetter is nil. Cannot estimate grace period seconds for pods") } - items, err := podsGetter.Pods(ns).List(metav1.ListOptions{IncludeUninitialized: true}) + items, err := podsGetter.Pods(ns).List(metav1.ListOptions{}) if err != nil { return estimate, err } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/namespace/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/namespace/doc.go index f58f816c051..82885aa8c54 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/namespace/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/namespace/doc.go @@ -14,5 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// namespace contains a controller that handles namespace lifecycle +// Package namespace contains a controller that handles namespace lifecycle package namespace // import "k8s.io/kubernetes/pkg/controller/namespace" diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/OWNERS old mode 100755 new mode 100644 index 99dd2eda0e1..0a59082f424 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - gmarek - bowei @@ -7,3 +9,5 @@ reviewers: - ingvagabund - aveshagarwal - k82cn +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/BUILD index e95fd1f7c91..d7dd6e6e1e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/BUILD @@ -42,7 +42,6 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/controller/nodeipam/ipam", deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/cloudprovider/providers/gce:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/nodeipam/ipam/cidrset:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/OWNERS old mode 100755 new mode 100644 index 8164b49a07a..1020d67b6bb --- a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/ipam/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - bowei - dnardo diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/node_ipam_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/node_ipam_controller.go index fd17bbb238e..75294d4c4ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/node_ipam_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodeipam/node_ipam_controller.go @@ -18,6 +18,7 @@ package nodeipam import ( "net" + "time" "k8s.io/klog" @@ -41,6 +42,18 @@ func init() { Register() } +const ( + // ipamResyncInterval is the amount of time between when the cloud and node + // CIDR range assignments are synchronized. + ipamResyncInterval = 30 * time.Second + // ipamMaxBackoff is the maximum backoff for retrying synchronization of a + // given in the error state. + ipamMaxBackoff = 10 * time.Second + // ipamInitialRetry is the initial retry interval for retrying synchronization of a + // given in the error state. + ipamInitialBackoff = 250 * time.Millisecond +) + // Controller is the controller that manages node ipam state. type Controller struct { allocatorType ipam.CIDRAllocatorType @@ -89,12 +102,11 @@ func NewNodeIpamController( metrics.RegisterMetricAndTrackRateLimiterUsage("node_ipam_controller", kubeClient.CoreV1().RESTClient().GetRateLimiter()) } + // Cloud CIDR allocator does not rely on clusterCIDR or nodeCIDRMaskSize for allocation. if clusterCIDR == nil { klog.Fatal("Controller: Must specify --cluster-cidr if --allocate-node-cidrs is set") } - mask := clusterCIDR.Mask - // Cloud CIDR allocator does not rely on clusterCIDR or nodeCIDRMaskSize for allocation. - if maskSize, _ := mask.Size(); maskSize > nodeCIDRMaskSize { + if maskSize, _ := clusterCIDR.Mask.Size(); maskSize > nodeCIDRMaskSize { klog.Fatal("Controller: Invalid --cluster-cidr, mask size of cluster CIDR must be less than --node-cidr-mask-size") } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/BUILD index 74eb860fa2a..61622ba1969 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/BUILD @@ -9,11 +9,11 @@ go_library( importpath = "k8s.io/kubernetes/pkg/controller/nodelifecycle", visibility = ["//visibility:public"], deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/nodelifecycle/scheduler:go_default_library", "//pkg/controller/util/node:go_default_library", "//pkg/features:go_default_library", + "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/util/metrics:go_default_library", "//pkg/util/node:go_default_library", @@ -25,24 +25,22 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/informers/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", - "//staging/src/k8s.io/cloud-provider:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -70,7 +68,6 @@ go_test( srcs = ["node_lifecycle_controller_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/cloudprovider/providers/fake:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/nodelifecycle/scheduler:go_default_library", "//pkg/controller/testutil:go_default_library", @@ -80,25 +77,22 @@ go_test( "//pkg/scheduler/api:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/taints:go_default_library", + "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/informers/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", - "//staging/src/k8s.io/cloud-provider:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/OWNERS old mode 100755 new mode 100644 index 274351a0ed1..b1dae75b5c6 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - gmarek - bowei diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/node_lifecycle_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/node_lifecycle_controller.go index 7e8a86c427d..510210881e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/node_lifecycle_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/node_lifecycle_controller.go @@ -23,11 +23,14 @@ package nodelifecycle import ( "fmt" + "hash/fnv" + "io" "sync" "time" "k8s.io/klog" + coordv1beta1 "k8s.io/api/coordination/v1beta1" "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -35,21 +38,25 @@ import ( "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + utilfeature "k8s.io/apiserver/pkg/util/feature" + appsv1informers "k8s.io/client-go/informers/apps/v1" + coordinformers "k8s.io/client-go/informers/coordination/v1beta1" coreinformers "k8s.io/client-go/informers/core/v1" - extensionsinformers "k8s.io/client-go/informers/extensions/v1beta1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" + appsv1listers "k8s.io/client-go/listers/apps/v1" + coordlisters "k8s.io/client-go/listers/coordination/v1beta1" corelisters "k8s.io/client-go/listers/core/v1" - extensionslisters "k8s.io/client-go/listers/extensions/v1beta1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/workqueue" - v1node "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler" nodeutil "k8s.io/kubernetes/pkg/controller/util/node" + "k8s.io/kubernetes/pkg/features" + kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/util/metrics" utilnode "k8s.io/kubernetes/pkg/util/node" @@ -88,9 +95,6 @@ var ( v1.NodeMemoryPressure: { v1.ConditionTrue: schedulerapi.TaintNodeMemoryPressure, }, - v1.NodeOutOfDisk: { - v1.ConditionTrue: schedulerapi.TaintNodeOutOfDisk, - }, v1.NodeDiskPressure: { v1.ConditionTrue: schedulerapi.TaintNodeDiskPressure, }, @@ -107,7 +111,6 @@ var ( schedulerapi.TaintNodeUnreachable: v1.NodeReady, schedulerapi.TaintNodeNetworkUnavailable: v1.NodeNetworkUnavailable, schedulerapi.TaintNodeMemoryPressure: v1.NodeMemoryPressure, - schedulerapi.TaintNodeOutOfDisk: v1.NodeOutOfDisk, schedulerapi.TaintNodeDiskPressure: v1.NodeDiskPressure, schedulerapi.TaintNodePIDPressure: v1.NodePIDPressure, } @@ -128,10 +131,42 @@ const ( retrySleepTime = 20 * time.Millisecond ) +// labelReconcileInfo lists Node labels to reconcile, and how to reconcile them. +// primaryKey and secondaryKey are keys of labels to reconcile. +// - If both keys exist, but their values don't match. Use the value from the +// primaryKey as the source of truth to reconcile. +// - If ensureSecondaryExists is true, and the secondaryKey does not +// exist, secondaryKey will be added with the value of the primaryKey. +var labelReconcileInfo = []struct { + primaryKey string + secondaryKey string + ensureSecondaryExists bool +}{ + { + // Reconcile the beta and the stable OS label using the beta label as + // the source of truth. + // TODO(#73084): switch to using the stable label as the source of + // truth in v1.18. + primaryKey: kubeletapis.LabelOS, + secondaryKey: v1.LabelOSStable, + ensureSecondaryExists: true, + }, + { + // Reconcile the beta and the stable arch label using the beta label as + // the source of truth. + // TODO(#73084): switch to using the stable label as the source of + // truth in v1.18. + primaryKey: kubeletapis.LabelArch, + secondaryKey: v1.LabelArchStable, + ensureSecondaryExists: true, + }, +} + type nodeHealthData struct { probeTimestamp metav1.Time readyTransitionTimestamp metav1.Time status *v1.NodeStatus + lease *coordv1beta1.Lease } // Controller is the controller that manages node's life cycle. @@ -142,7 +177,7 @@ type Controller struct { kubeClient clientset.Interface // This timestamp is to be used instead of LastProbeTime stored in Condition. We do this - // to aviod the problem with time skew across the cluster. + // to avoid the problem with time skew across the cluster. now func() metav1.Time enterPartialDisruptionFunc func(nodeNum int) float32 @@ -164,11 +199,13 @@ type Controller struct { zoneStates map[string]ZoneState - daemonSetStore extensionslisters.DaemonSetLister + daemonSetStore appsv1listers.DaemonSetLister daemonSetInformerSynced cache.InformerSynced - nodeLister corelisters.NodeLister - nodeInformerSynced cache.InformerSynced + leaseLister coordlisters.LeaseLister + leaseInformerSynced cache.InformerSynced + nodeLister corelisters.NodeLister + nodeInformerSynced cache.InformerSynced recorder record.EventRecorder @@ -219,7 +256,7 @@ type Controller struct { useTaintBasedEvictions bool // if set to true, NodeController will taint Nodes based on its condition for 'NetworkUnavailable', - // 'MemoryPressure', 'OutOfDisk' and 'DiskPressure'. + // 'MemoryPressure', 'PIDPressure' and 'DiskPressure'. taintNodeByCondition bool nodeUpdateQueue workqueue.Interface @@ -227,9 +264,10 @@ type Controller struct { // NewNodeLifecycleController returns a new taint controller. func NewNodeLifecycleController( + leaseInformer coordinformers.LeaseInformer, podInformer coreinformers.PodInformer, nodeInformer coreinformers.NodeInformer, - daemonSetInformer extensionsinformers.DaemonSetInformer, + daemonSetInformer appsv1informers.DaemonSetInformer, kubeClient clientset.Interface, nodeMonitorPeriod time.Duration, nodeStartupGracePeriod time.Duration, @@ -262,10 +300,10 @@ func NewNodeLifecycleController( } nc := &Controller{ - kubeClient: kubeClient, - now: metav1.Now, - knownNodeSet: make(map[string]*v1.Node), - nodeHealthMap: make(map[string]*nodeHealthData), + kubeClient: kubeClient, + now: metav1.Now, + knownNodeSet: make(map[string]*v1.Node), + nodeHealthMap: make(map[string]*nodeHealthData), recorder: recorder, nodeMonitorPeriod: nodeMonitorPeriod, nodeStartupGracePeriod: nodeStartupGracePeriod, @@ -281,7 +319,7 @@ func NewNodeLifecycleController( runTaintManager: runTaintManager, useTaintBasedEvictions: useTaintBasedEvictions && runTaintManager, taintNodeByCondition: taintNodeByCondition, - nodeUpdateQueue: workqueue.New(), + nodeUpdateQueue: workqueue.NewNamed("node_lifecycle_controller"), } if useTaintBasedEvictions { klog.Infof("Controller is using taint based evictions.") @@ -349,31 +387,30 @@ func NewNodeLifecycleController( }) } - if nc.taintNodeByCondition { - klog.Infof("Controller will taint node by condition.") - nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: nodeutil.CreateAddNodeHandler(func(node *v1.Node) error { - nc.nodeUpdateQueue.Add(node.Name) - return nil - }), - UpdateFunc: nodeutil.CreateUpdateNodeHandler(func(_, newNode *v1.Node) error { - nc.nodeUpdateQueue.Add(newNode.Name) - return nil - }), - }) - } - - // NOTE(resouer): nodeInformer to substitute deprecated taint key (notReady -> not-ready). - // Remove this logic when we don't need this backwards compatibility + klog.Infof("Controller will reconcile labels.") nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: nodeutil.CreateAddNodeHandler(func(node *v1.Node) error { - return nc.doFixDeprecatedTaintKeyPass(node) + nc.nodeUpdateQueue.Add(node.Name) + return nil }), UpdateFunc: nodeutil.CreateUpdateNodeHandler(func(_, newNode *v1.Node) error { - return nc.doFixDeprecatedTaintKeyPass(newNode) + nc.nodeUpdateQueue.Add(newNode.Name) + return nil }), }) + if nc.taintNodeByCondition { + klog.Infof("Controller will taint node by condition.") + } + + nc.leaseLister = leaseInformer.Lister() + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + nc.leaseInformerSynced = leaseInformer.Informer().HasSynced + } else { + // Always indicate that lease is synced to prevent syncing lease. + nc.leaseInformerSynced = func() bool { return true } + } + nc.nodeLister = nodeInformer.Lister() nc.nodeInformerSynced = nodeInformer.Informer().HasSynced @@ -390,7 +427,7 @@ func (nc *Controller) Run(stopCh <-chan struct{}) { klog.Infof("Starting node controller") defer klog.Infof("Shutting down node controller") - if !controller.WaitForCacheSync("taint", stopCh, nc.nodeInformerSynced, nc.podInformerSynced, nc.daemonSetInformerSynced) { + if !controller.WaitForCacheSync("taint", stopCh, nc.leaseInformerSynced, nc.nodeInformerSynced, nc.podInformerSynced, nc.daemonSetInformerSynced) { return } @@ -398,18 +435,16 @@ func (nc *Controller) Run(stopCh <-chan struct{}) { go nc.taintManager.Run(stopCh) } - if nc.taintNodeByCondition { - // Close node update queue to cleanup go routine. - defer nc.nodeUpdateQueue.ShutDown() + // Close node update queue to cleanup go routine. + defer nc.nodeUpdateQueue.ShutDown() - // Start workers to update NoSchedule taint for nodes. - for i := 0; i < scheduler.UpdateWorkerSize; i++ { - // Thanks to "workqueue", each worker just need to get item from queue, because - // the item is flagged when got from queue: if new event come, the new item will - // be re-queued until "Done", so no more than one worker handle the same item and - // no event missed. - go wait.Until(nc.doNoScheduleTaintingPassWorker, time.Second, stopCh) - } + // Start workers to reconcile labels and/or update NoSchedule taint for nodes. + for i := 0; i < scheduler.UpdateWorkerSize; i++ { + // Thanks to "workqueue", each worker just need to get item from queue, because + // the item is flagged when got from queue: if new event come, the new item will + // be re-queued until "Done", so no more than one worker handle the same item and + // no event missed. + go wait.Until(nc.doNodeProcessingPassWorker, time.Second, stopCh) } if nc.useTaintBasedEvictions { @@ -433,45 +468,7 @@ func (nc *Controller) Run(stopCh <-chan struct{}) { <-stopCh } -// doFixDeprecatedTaintKeyPass checks and replaces deprecated taint key with proper key name if needed. -func (nc *Controller) doFixDeprecatedTaintKeyPass(node *v1.Node) error { - taintsToAdd := []*v1.Taint{} - taintsToDel := []*v1.Taint{} - - for _, taint := range node.Spec.Taints { - if taint.Key == schedulerapi.DeprecatedTaintNodeNotReady { - tDel := taint - taintsToDel = append(taintsToDel, &tDel) - - tAdd := taint - tAdd.Key = schedulerapi.TaintNodeNotReady - taintsToAdd = append(taintsToAdd, &tAdd) - } - - if taint.Key == schedulerapi.DeprecatedTaintNodeUnreachable { - tDel := taint - taintsToDel = append(taintsToDel, &tDel) - - tAdd := taint - tAdd.Key = schedulerapi.TaintNodeUnreachable - taintsToAdd = append(taintsToAdd, &tAdd) - } - } - - if len(taintsToAdd) == 0 && len(taintsToDel) == 0 { - return nil - } - - klog.Warningf("Detected deprecated taint keys: %v on node: %v, will substitute them with %v", - taintsToDel, node.GetName(), taintsToAdd) - - if !nodeutil.SwapNodeControllerTaint(nc.kubeClient, taintsToAdd, taintsToDel, node) { - return fmt.Errorf("failed to swap taints of node %+v", node) - } - return nil -} - -func (nc *Controller) doNoScheduleTaintingPassWorker() { +func (nc *Controller) doNodeProcessingPassWorker() { for { obj, shutdown := nc.nodeUpdateQueue.Get() // "nodeUpdateQueue" will be shutdown when "stopCh" closed; @@ -480,10 +477,17 @@ func (nc *Controller) doNoScheduleTaintingPassWorker() { return } nodeName := obj.(string) - - if err := nc.doNoScheduleTaintingPass(nodeName); err != nil { - // TODO (k82cn): Add nodeName back to the queue. - klog.Errorf("Failed to taint NoSchedule on node <%s>, requeue it: %v", nodeName, err) + if nc.taintNodeByCondition { + if err := nc.doNoScheduleTaintingPass(nodeName); err != nil { + klog.Errorf("Failed to taint NoSchedule on node <%s>, requeue it: %v", nodeName, err) + // TODO(k82cn): Add nodeName back to the queue + } + } + // TODO: re-evaluate whether there are any labels that need to be + // reconcile in 1.19. Remove this function if it's no longer necessary. + if err := nc.reconcileNodeLabels(nodeName); err != nil { + klog.Errorf("Failed to reconcile labels for node <%s>, requeue it: %v", nodeName, err) + // TODO(yujuhong): Add nodeName back to the queue } nc.nodeUpdateQueue.Done(nodeName) } @@ -558,11 +562,8 @@ func (nc *Controller) doNoExecuteTaintingPass() { klog.Warningf("Failed to get Node %v from the nodeLister: %v", value.Value, err) // retry in 50 millisecond return false, 50 * time.Millisecond - } else { - zone := utilnode.GetZoneKey(node) - evictionsNumber.WithLabelValues(zone).Inc() } - _, condition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, condition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) // Because we want to mimic NodeStatus.Condition["Ready"] we make "unreachable" and "not ready" taints mutually exclusive. taintToAdd := v1.Taint{} oppositeTaint := v1.Taint{} @@ -578,7 +579,14 @@ func (nc *Controller) doNoExecuteTaintingPass() { return true, 0 } - return nodeutil.SwapNodeControllerTaint(nc.kubeClient, []*v1.Taint{&taintToAdd}, []*v1.Taint{&oppositeTaint}, node), 0 + result := nodeutil.SwapNodeControllerTaint(nc.kubeClient, []*v1.Taint{&taintToAdd}, []*v1.Taint{&oppositeTaint}, node) + if result { + //count the evictionsNumber + zone := utilnode.GetZoneKey(node) + evictionsNumber.WithLabelValues(zone).Inc() + } + + return result, 0 }) } } @@ -594,9 +602,6 @@ func (nc *Controller) doEvictionPass() { klog.Warningf("Node %v no longer present in nodeLister!", value.Value) } else if err != nil { klog.Warningf("Failed to get Node %v from the nodeLister: %v", value.Value, err) - } else { - zone := utilnode.GetZoneKey(node) - evictionsNumber.WithLabelValues(zone).Inc() } nodeUID, _ := value.UID.(string) remaining, err := nodeutil.DeletePods(nc.kubeClient, nc.recorder, value.Value, nodeUID, nc.daemonSetStore) @@ -607,6 +612,13 @@ func (nc *Controller) doEvictionPass() { if remaining { klog.Infof("Pods awaiting deletion due to Controller eviction") } + + //count the evictionsNumber + if node != nil { + zone := utilnode.GetZoneKey(node) + evictionsNumber.WithLabelValues(zone).Inc() + } + return true, 0 }) } @@ -746,11 +758,6 @@ func (nc *Controller) monitorNodeHealth() error { klog.V(2).Infof("Node %s is ready again, cancelled pod eviction", node.Name) } } - // remove shutdown taint this is needed always depending do we use taintbased or not - err := nc.markNodeAsNotShutdown(node) - if err != nil { - klog.Errorf("Failed to remove taints from node %v. Will retry in next iteration.", node.Name) - } } // Report node event. @@ -773,7 +780,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node var err error var gracePeriod time.Duration var observedReadyCondition v1.NodeCondition - _, currentReadyCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, currentReadyCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if currentReadyCondition == nil { // If ready condition is nil, then kubelet (or nodecontroller) never posted node status. // A fake ready condition is created, where LastHeartbeatTime and LastTransitionTime is set @@ -816,10 +823,12 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node // - currently only correct Ready State transition outside of Node Controller is marking it ready by Kubelet, we don't check // if that's the case, but it does not seem necessary. var savedCondition *v1.NodeCondition + var savedLease *coordv1beta1.Lease if found { - _, savedCondition = v1node.GetNodeCondition(savedNodeHealth.status, v1.NodeReady) + _, savedCondition = nodeutil.GetNodeCondition(savedNodeHealth.status, v1.NodeReady) + savedLease = savedNodeHealth.lease } - _, observedCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, observedCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if !found { klog.Warningf("Missing timestamp for Node %s. Assuming now as a timestamp.", node.Name) savedNodeHealth = &nodeHealthData{ @@ -863,6 +872,18 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node readyTransitionTimestamp: transitionTime, } } + var observedLease *coordv1beta1.Lease + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + // Always update the probe time if node lease is renewed. + // Note: If kubelet never posted the node status, but continues renewing the + // heartbeat leases, the node controller will assume the node is healthy and + // take no action. + observedLease, _ = nc.leaseLister.Leases(v1.NamespaceNodeLease).Get(node.Name) + if observedLease != nil && (savedLease == nil || savedLease.Spec.RenewTime.Before(observedLease.Spec.RenewTime)) { + savedNodeHealth.lease = observedLease + savedNodeHealth.probeTimestamp = nc.now() + } + } nc.nodeHealthMap[node.Name] = savedNodeHealth if nc.now().After(savedNodeHealth.probeTimestamp.Add(gracePeriod)) { @@ -893,7 +914,6 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node // remaining node conditions should also be set to Unknown remainingNodeConditionTypes := []v1.NodeConditionType{ - v1.NodeOutOfDisk, v1.NodeMemoryPressure, v1.NodeDiskPressure, v1.NodePIDPressure, @@ -903,7 +923,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node nowTimestamp := nc.now() for _, nodeConditionType := range remainingNodeConditionTypes { - _, currentCondition := v1node.GetNodeCondition(&node.Status, nodeConditionType) + _, currentCondition := nodeutil.GetNodeCondition(&node.Status, nodeConditionType) if currentCondition == nil { klog.V(2).Infof("Condition %v of node %v was never updated by kubelet", nodeConditionType, node.Name) node.Status.Conditions = append(node.Status.Conditions, v1.NodeCondition{ @@ -926,7 +946,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node } } - _, currentCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, currentCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if !apiequality.Semantic.DeepEqual(currentCondition, &observedReadyCondition) { if _, err = nc.kubeClient.CoreV1().Nodes().UpdateStatus(node); err != nil { klog.Errorf("Error updating node %s: %v", node.Name, err) @@ -936,6 +956,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node status: &node.Status, probeTimestamp: nc.nodeHealthMap[node.Name].probeTimestamp, readyTransitionTimestamp: nc.now(), + lease: observedLease, } return gracePeriod, observedReadyCondition, currentReadyCondition, nil } @@ -1184,17 +1205,6 @@ func (nc *Controller) markNodeAsReachable(node *v1.Node) (bool, error) { return nc.zoneNoExecuteTainter[utilnode.GetZoneKey(node)].Remove(node.Name), nil } -func (nc *Controller) markNodeAsNotShutdown(node *v1.Node) error { - nc.evictorLock.Lock() - defer nc.evictorLock.Unlock() - err := controller.RemoveTaintOffNode(nc.kubeClient, node.Name, node, controller.ShutdownTaint) - if err != nil { - klog.Errorf("Failed to remove taint from node %v: %v", node.Name, err) - return err - } - return nil -} - // ComputeZoneState returns a slice of NodeReadyConditions for all Nodes in a given zone. // The zone is considered: // - fullyDisrupted if there're no Ready Nodes, @@ -1219,3 +1229,56 @@ func (nc *Controller) ComputeZoneState(nodeReadyConditions []*v1.NodeCondition) return notReadyNodes, stateNormal } } + +// reconcileNodeLabels reconciles node labels. +func (nc *Controller) reconcileNodeLabels(nodeName string) error { + node, err := nc.nodeLister.Get(nodeName) + if err != nil { + // If node not found, just ignore it. + if apierrors.IsNotFound(err) { + return nil + } + return err + } + + if node.Labels == nil { + // Nothing to reconcile. + return nil + } + + labelsToUpdate := map[string]string{} + for _, r := range labelReconcileInfo { + primaryValue, primaryExists := node.Labels[r.primaryKey] + secondaryValue, secondaryExists := node.Labels[r.secondaryKey] + + if !primaryExists { + // The primary label key does not exist. This should not happen + // within our supported version skew range, when no external + // components/factors modifying the node object. Ignore this case. + continue + } + if secondaryExists && primaryValue != secondaryValue { + // Secondary label exists, but not consistent with the primary + // label. Need to reconcile. + labelsToUpdate[r.secondaryKey] = primaryValue + + } else if !secondaryExists && r.ensureSecondaryExists { + // Apply secondary label based on primary label. + labelsToUpdate[r.secondaryKey] = primaryValue + } + } + + if len(labelsToUpdate) == 0 { + return nil + } + if !nodeutil.AddOrUpdateLabelsOnNode(nc.kubeClient, labelsToUpdate, node) { + return fmt.Errorf("failed update labels for node %+v", node) + } + return nil +} + +func hash(val string, max int) int { + hasher := fnv.New32a() + io.WriteString(hasher, val) + return int(hasher.Sum32()) % max +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler/taint_manager.go b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler/taint_manager.go index fbf683077f1..6d32bedfad8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler/taint_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler/taint_manager.go @@ -185,8 +185,8 @@ func NewNoExecuteTaintManager(c clientset.Interface, getPod GetPodFunc, getNode getNode: getNode, taintedNodes: make(map[string][]v1.Taint), - nodeUpdateQueue: workqueue.New(), - podUpdateQueue: workqueue.New(), + nodeUpdateQueue: workqueue.NewNamed("noexec_taint_node"), + podUpdateQueue: workqueue.NewNamed("noexec_taint_pod"), } tm.taintEvictionQueue = CreateWorkerQueue(deletePodHandler(c, tm.emitPodDeletionEvent)) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/BUILD index 7ff398dea32..fc0c55bc7c9 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/BUILD @@ -5,7 +5,7 @@ go_library( srcs = [ "doc.go", "horizontal.go", - "rate_limitters.go", + "rate_limiters.go", "replica_calculator.go", ], importpath = "k8s.io/kubernetes/pkg/controller/podautoscaler", @@ -55,10 +55,10 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/apps/install:go_default_library", "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/autoscaling/install:go_default_library", "//pkg/apis/core/install:go_default_library", - "//pkg/apis/extensions/install:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/podautoscaler/metrics:go_default_library", "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/OWNERS old mode 100755 new mode 100644 index 48a53f474c7..ad61a1564ff --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - DirectXMan12 - mwielgus diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go index db4ce6749c6..c6a31532f19 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go @@ -179,7 +179,9 @@ func (a *HorizontalController) enqueueHPA(obj interface{}) { return } - // always add rate-limitted so we don't fetch metrics more that once per resync interval + // Requests are always added to queue with resyncPeriod delay. If there's already + // request for the HPA in the queue then a new request is always dropped. Requests spend resync + // interval in queue so HPAs are processed every resync interval. a.queue.AddRateLimited(key) } @@ -211,10 +213,15 @@ func (a *HorizontalController) processNextWorkItem() bool { if err != nil { utilruntime.HandleError(err) } - // Add request processing HPA after resync interval just in case last resync didn't insert - // request into the queue. Request is not inserted into queue by resync if previous one wasn't processed yet. - // This happens quite often because requests from previous resync are removed from the queue at the same moment - // as next resync inserts new requests. + // Add request processing HPA to queue with resyncPeriod delay. + // Requests are always added to queue with resyncPeriod delay. If there's already request + // for the HPA in the queue then a new request is always dropped. Requests spend resyncPeriod + // in queue so HPAs are processed every resyncPeriod. + // Request is added here just in case last resync didn't insert request into the queue. This + // happens quite often because there is race condition between adding request after resyncPeriod + // and removing them from queue. Request can be added by resync before previous request is + // removed from queue. If we didn't add request here then in this case one request would be dropped + // and HPA would processed after 2 x resyncPeriod. if !deleted { a.queue.AddRateLimited(key) } @@ -320,26 +327,52 @@ func (a *HorizontalController) reconcileKey(key string) (deleted bool, err error // computeStatusForObjectMetric computes the desired number of replicas for the specified metric of type ObjectMetricSourceType. func (a *HorizontalController) computeStatusForObjectMetric(currentReplicas int32, metricSpec autoscalingv2.MetricSpec, hpa *autoscalingv2.HorizontalPodAutoscaler, selector labels.Selector, status *autoscalingv2.MetricStatus, metricSelector labels.Selector) (int32, time.Time, string, error) { - replicaCountProposal, utilizationProposal, timestampProposal, err := a.replicaCalc.GetObjectMetricReplicas(currentReplicas, metricSpec.Object.Target.Value.MilliValue(), metricSpec.Object.Metric.Name, hpa.Namespace, &metricSpec.Object.DescribedObject, selector, metricSelector) - if err != nil { - a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetObjectMetric", err.Error()) - setCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionFalse, "FailedGetObjectMetric", "the HPA was unable to compute the replica count: %v", err) - return 0, timestampProposal, "", err - } - *status = autoscalingv2.MetricStatus{ - Type: autoscalingv2.ObjectMetricSourceType, - Object: &autoscalingv2.ObjectMetricStatus{ - DescribedObject: metricSpec.Object.DescribedObject, - Metric: autoscalingv2.MetricIdentifier{ - Name: metricSpec.Object.Metric.Name, - Selector: metricSpec.Object.Metric.Selector, + if metricSpec.Object.Target.Type == autoscalingv2.ValueMetricType { + replicaCountProposal, utilizationProposal, timestampProposal, err := a.replicaCalc.GetObjectMetricReplicas(currentReplicas, metricSpec.Object.Target.Value.MilliValue(), metricSpec.Object.Metric.Name, hpa.Namespace, &metricSpec.Object.DescribedObject, selector, metricSelector) + if err != nil { + a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetObjectMetric", err.Error()) + setCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionFalse, "FailedGetObjectMetric", "the HPA was unable to compute the replica count: %v", err) + return 0, timestampProposal, "", err + } + *status = autoscalingv2.MetricStatus{ + Type: autoscalingv2.ObjectMetricSourceType, + Object: &autoscalingv2.ObjectMetricStatus{ + DescribedObject: metricSpec.Object.DescribedObject, + Metric: autoscalingv2.MetricIdentifier{ + Name: metricSpec.Object.Metric.Name, + Selector: metricSpec.Object.Metric.Selector, + }, + Current: autoscalingv2.MetricValueStatus{ + Value: resource.NewMilliQuantity(utilizationProposal, resource.DecimalSI), + }, }, - Current: autoscalingv2.MetricValueStatus{ - Value: resource.NewMilliQuantity(utilizationProposal, resource.DecimalSI), + } + return replicaCountProposal, timestampProposal, fmt.Sprintf("%s metric %s", metricSpec.Object.DescribedObject.Kind, metricSpec.Object.Metric.Name), nil + } else if metricSpec.Object.Target.Type == autoscalingv2.AverageValueMetricType { + replicaCountProposal, utilizationProposal, timestampProposal, err := a.replicaCalc.GetObjectPerPodMetricReplicas(currentReplicas, metricSpec.Object.Target.AverageValue.MilliValue(), metricSpec.Object.Metric.Name, hpa.Namespace, &metricSpec.Object.DescribedObject, metricSelector) + if err != nil { + a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetObjectMetric", err.Error()) + setCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionFalse, "FailedGetObjectMetric", "the HPA was unable to compute the replica count: %v", err) + return 0, time.Time{}, "", fmt.Errorf("failed to get %s object metric: %v", metricSpec.Object.Metric.Name, err) + } + *status = autoscalingv2.MetricStatus{ + Type: autoscalingv2.ObjectMetricSourceType, + Object: &autoscalingv2.ObjectMetricStatus{ + Metric: autoscalingv2.MetricIdentifier{ + Name: metricSpec.Object.Metric.Name, + Selector: metricSpec.Object.Metric.Selector, + }, + Current: autoscalingv2.MetricValueStatus{ + AverageValue: resource.NewMilliQuantity(utilizationProposal, resource.DecimalSI), + }, }, - }, + } + return replicaCountProposal, timestampProposal, fmt.Sprintf("external metric %s(%+v)", metricSpec.Object.Metric.Name, metricSpec.Object.Metric.Selector), nil } - return replicaCountProposal, timestampProposal, fmt.Sprintf("%s metric %s", metricSpec.Object.DescribedObject.Kind, metricSpec.Object.Metric.Name), nil + errMsg := "invalid object metric source: neither a value target nor an average value target was set" + a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetObjectMetric", errMsg) + setCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionFalse, "FailedGetObjectMetric", "the HPA was unable to compute the replica count: %s", errMsg) + return 0, time.Time{}, "", fmt.Errorf(errMsg) } // computeStatusForPodsMetric computes the desired number of replicas for the specified metric of type PodsMetricSourceType. @@ -377,7 +410,7 @@ func (a *HorizontalController) computeStatusForResourceMetric(currentReplicas in return 0, time.Time{}, "", fmt.Errorf("failed to get %s utilization: %v", metricSpec.Resource.Name, err) } metricNameProposal := fmt.Sprintf("%s resource", metricSpec.Resource.Name) - status = &autoscalingv2.MetricStatus{ + *status = autoscalingv2.MetricStatus{ Type: autoscalingv2.ResourceMetricSourceType, Resource: &autoscalingv2.ResourceMetricStatus{ Name: metricSpec.Resource.Name, diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/metrics/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/metrics/BUILD index 673b2859f83..a4ef29adeae 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/metrics/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/metrics/BUILD @@ -38,7 +38,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/apis/extensions/install:go_default_library", + "//pkg/apis/apps/install:go_default_library", "//staging/src/k8s.io/api/autoscaling/v2beta2:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta/testrestmapper:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limitters.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limiters.go similarity index 94% rename from vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limitters.go rename to vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limiters.go index 06e36ec40a8..915cd5c151c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limitters.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/rate_limiters.go @@ -46,7 +46,7 @@ func (r *FixedItemIntervalRateLimiter) NumRequeues(item interface{}) int { func (r *FixedItemIntervalRateLimiter) Forget(item interface{}) { } -// NewDefaultHPARateLimiter creates a rate limitter which limits overall (as per the +// NewDefaultHPARateLimiter creates a rate limiter which limits overall (as per the // default controller rate limiter), as well as per the resync interval func NewDefaultHPARateLimiter(interval time.Duration) workqueue.RateLimiter { return NewFixedItemIntervalRateLimiter(interval) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/replica_calculator.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/replica_calculator.go index a1eb82794f8..ace9803bdf3 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/replica_calculator.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/replica_calculator.go @@ -257,6 +257,23 @@ func (c *ReplicaCalculator) GetObjectMetricReplicas(currentReplicas int32, targe return replicaCount, utilization, timestamp, nil } +// GetObjectPerPodMetricReplicas calculates the desired replica count based on a target metric utilization (as a milli-value) +// for the given object in the given namespace, and the current replica count. +func (c *ReplicaCalculator) GetObjectPerPodMetricReplicas(currentReplicas int32, targetAverageUtilization int64, metricName string, namespace string, objectRef *autoscaling.CrossVersionObjectReference, metricSelector labels.Selector) (replicaCount int32, utilization int64, timestamp time.Time, err error) { + utilization, timestamp, err = c.metricsClient.GetObjectMetric(metricName, namespace, objectRef, metricSelector) + if err != nil { + return 0, 0, time.Time{}, fmt.Errorf("unable to get metric %s: %v on %s %s/%s", metricName, objectRef.Kind, namespace, objectRef.Name, err) + } + + usageRatio := float64(utilization) / (float64(targetAverageUtilization) * float64(replicaCount)) + if math.Abs(1.0-usageRatio) > c.tolerance { + // update number of replicas if change is large enough + replicaCount = int32(math.Ceil(float64(utilization) / float64(targetAverageUtilization))) + } + utilization = int64(math.Ceil(float64(utilization) / float64(currentReplicas))) + return replicaCount, utilization, timestamp, nil +} + // @TODO(mattjmcnaughton) Many different functions in this module use variations // of this function. Make this function generic, so we don't repeat the same // logic in multiple places. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podgc/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/podgc/OWNERS old mode 100755 new mode 100644 index bdc466903eb..f2c85258423 --- a/vendor/k8s.io/kubernetes/pkg/controller/podgc/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/podgc/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - foxish - gmarek diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/BUILD index e833fdf6e37..df8300c9fe1 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/BUILD @@ -36,9 +36,9 @@ go_library( "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/OWNERS old mode 100755 new mode 100644 index b1947058a4b..b8444207c7a --- a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/replica_set.go b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/replica_set.go index 03edbe1365c..169fa85485c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/replicaset/replica_set.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/replicaset/replica_set.go @@ -52,12 +52,12 @@ import ( corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/integer" "k8s.io/client-go/util/workqueue" "k8s.io/klog" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/metrics" + "k8s.io/utils/integer" ) const ( @@ -484,16 +484,7 @@ func (rsc *ReplicaSetController) manageReplicas(filteredPods []*v1.Pod, rs *apps // after one of its pods fails. Conveniently, this also prevents the // event spam that those failures would generate. successfulCreations, err := slowStartBatch(diff, controller.SlowStartInitialBatchSize, func() error { - boolPtr := func(b bool) *bool { return &b } - controllerRef := &metav1.OwnerReference{ - APIVersion: rsc.GroupVersion().String(), - Kind: rsc.Kind, - Name: rs.Name, - UID: rs.UID, - BlockOwnerDeletion: boolPtr(true), - Controller: boolPtr(true), - } - err := rsc.podControl.CreatePodsWithControllerRef(rs.Namespace, &rs.Spec.Template, rs, controllerRef) + err := rsc.podControl.CreatePodsWithControllerRef(rs.Namespace, &rs.Spec.Template, rs, metav1.NewControllerRef(rs, rsc.GroupVersionKind)) if err != nil && errors.IsTimeout(err) { // Pod is created but its initialization has timed out. // If the initialization is successful eventually, the @@ -604,12 +595,7 @@ func (rsc *ReplicaSetController) syncReplicaSet(key string) error { return err } // Ignore inactive pods. - var filteredPods []*v1.Pod - for _, pod := range allPods { - if controller.IsPodActive(pod) { - filteredPods = append(filteredPods, pod) - } - } + filteredPods := controller.FilterActivePods(allPods) // NOTE: filteredPods are pointing to objects from cache - if you need to // modify them, you need to copy it first. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/replication/BUILD index 344101c42b4..a016f6baf59 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/replication/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/controller:go_default_library", "//pkg/controller/replicaset:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", + "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/replication/OWNERS old mode 100755 new mode 100644 index b1947058a4b..b8444207c7a --- a/vendor/k8s.io/kubernetes/pkg/controller/replication/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - caesarxuchao - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/conversion.go b/vendor/k8s.io/kubernetes/pkg/controller/replication/conversion.go index 1c9ddb0ba16..3bb1df30a96 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/replication/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/conversion.go @@ -27,6 +27,7 @@ import ( "time" apps "k8s.io/api/apps/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -239,6 +240,16 @@ func (c conversionClient) Patch(name string, pt types.PatchType, data []byte, su return nil, errors.New("Patch() is not implemented for conversionClient") } +func (c conversionClient) GetScale(name string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { + // This is not used by RSC. + return nil, errors.New("GetScale() is not implemented for conversionClient") +} + +func (c conversionClient) UpdateScale(name string, scale *autoscalingv1.Scale) (result *autoscalingv1.Scale, err error) { + // This is not used by RSC. + return nil, errors.New("UpdateScale() is not implemented for conversionClient") +} + func convertSlice(rcList []*v1.ReplicationController) ([]*apps.ReplicaSet, error) { rsList := make([]*apps.ReplicaSet, 0, len(rcList)) for _, rc := range rcList { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/OWNERS old mode 100755 new mode 100644 index 054bbcdd186..75928576a4e --- a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - derekwaynecarr - deads2k diff --git a/vendor/k8s.io/kubernetes/pkg/controller/service/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/service/BUILD deleted file mode 100644 index 70bc4cdb49f..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/service/BUILD +++ /dev/null @@ -1,71 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "service_controller.go", - ], - importpath = "k8s.io/kubernetes/pkg/controller/service", - deps = [ - "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/controller:go_default_library", - "//pkg/features:go_default_library", - "//pkg/util/metrics:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", - "//staging/src/k8s.io/cloud-provider:go_default_library", - "//vendor/k8s.io/klog:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = ["service_controller_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/api/testapi:go_default_library", - "//pkg/cloudprovider/providers/fake:go_default_library", - "//pkg/controller:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/client-go/informers:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", - "//staging/src/k8s.io/client-go/testing:go_default_library", - "//staging/src/k8s.io/client-go/tools/record:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/service/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/service/OWNERS deleted file mode 100644 index 229e90d56e4..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/service/OWNERS +++ /dev/null @@ -1,14 +0,0 @@ -reviewers: -- bowei -- MrHohn -- thockin -- matchstick -- andrewsykim -- cheftako -approvers: -- bowei -- MrHohn -- thockin -- matchstick -- andrewsykim -- cheftako diff --git a/vendor/k8s.io/kubernetes/pkg/controller/service/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/service/doc.go deleted file mode 100644 index 1c4e0558d78..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/service/doc.go +++ /dev/null @@ -1,19 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package service contains code for syncing cloud load balancers -// with the service registry. -package service // import "k8s.io/kubernetes/pkg/controller/service" diff --git a/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go deleted file mode 100644 index 011506d8048..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go +++ /dev/null @@ -1,695 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package service - -import ( - "fmt" - "sync" - "time" - - "reflect" - - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/wait" - coreinformers "k8s.io/client-go/informers/core/v1" - clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/scheme" - v1core "k8s.io/client-go/kubernetes/typed/core/v1" - corelisters "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/tools/cache" - "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/workqueue" - "k8s.io/klog" - v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - "k8s.io/kubernetes/pkg/controller" - "k8s.io/kubernetes/pkg/util/metrics" -) - -const ( - // Interval of synchronizing service status from apiserver - serviceSyncPeriod = 30 * time.Second - // Interval of synchronizing node status from apiserver - nodeSyncPeriod = 100 * time.Second - - // How long to wait before retrying the processing of a service change. - // If this changes, the sleep in hack/jenkins/e2e.sh before downing a cluster - // should be changed appropriately. - minRetryDelay = 5 * time.Second - maxRetryDelay = 300 * time.Second - - clientRetryCount = 5 - clientRetryInterval = 5 * time.Second - - // LabelNodeRoleMaster specifies that a node is a master - // It's copied over to kubeadm until it's merged in core: https://github.com/kubernetes/kubernetes/pull/39112 - LabelNodeRoleMaster = "node-role.kubernetes.io/master" -) - -type cachedService struct { - // The cached state of the service - state *v1.Service -} - -type serviceCache struct { - mu sync.Mutex // protects serviceMap - serviceMap map[string]*cachedService -} - -// ServiceController keeps cloud provider service resources -// (like load balancers) in sync with the registry. -type ServiceController struct { - knownHosts []*v1.Node - servicesToUpdate []*v1.Service - kubeClient clientset.Interface - clusterName string - cache *serviceCache - serviceLister corelisters.ServiceLister - serviceListerSynced cache.InformerSynced - eventBroadcaster record.EventBroadcaster - eventRecorder record.EventRecorder - nodeLister corelisters.NodeLister - nodeListerSynced cache.InformerSynced - // services that need to be synced - queue workqueue.RateLimitingInterface -} - -// New returns a new service controller to keep cloud provider service resources -// (like load balancers) in sync with the registry. -func New( - kubeClient clientset.Interface, - serviceInformer coreinformers.ServiceInformer, - nodeInformer coreinformers.NodeInformer, - clusterName string, -) (*ServiceController, error) { - broadcaster := record.NewBroadcaster() - broadcaster.StartLogging(klog.Infof) - broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) - recorder := broadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "service-controller"}) - - if kubeClient != nil && kubeClient.CoreV1().RESTClient().GetRateLimiter() != nil { - if err := metrics.RegisterMetricAndTrackRateLimiterUsage("service_controller", kubeClient.CoreV1().RESTClient().GetRateLimiter()); err != nil { - return nil, err - } - } - - s := &ServiceController{ - knownHosts: []*v1.Node{}, - kubeClient: kubeClient, - clusterName: clusterName, - cache: &serviceCache{serviceMap: make(map[string]*cachedService)}, - eventBroadcaster: broadcaster, - eventRecorder: recorder, - nodeLister: nodeInformer.Lister(), - nodeListerSynced: nodeInformer.Informer().HasSynced, - queue: workqueue.NewNamedRateLimitingQueue(workqueue.NewItemExponentialFailureRateLimiter(minRetryDelay, maxRetryDelay), "service"), - } - - serviceInformer.Informer().AddEventHandlerWithResyncPeriod( - cache.ResourceEventHandlerFuncs{ - AddFunc: s.enqueueService, - UpdateFunc: func(old, cur interface{}) { - oldSvc, ok1 := old.(*v1.Service) - curSvc, ok2 := cur.(*v1.Service) - if ok1 && ok2 && s.needsUpdate(oldSvc, curSvc) { - s.enqueueService(cur) - } - }, - DeleteFunc: s.enqueueService, - }, - serviceSyncPeriod, - ) - s.serviceLister = serviceInformer.Lister() - s.serviceListerSynced = serviceInformer.Informer().HasSynced - - if err := s.init(); err != nil { - return nil, err - } - return s, nil -} - -// obj could be an *v1.Service, or a DeletionFinalStateUnknown marker item. -func (s *ServiceController) enqueueService(obj interface{}) { - key, err := controller.KeyFunc(obj) - if err != nil { - klog.Errorf("Couldn't get key for object %#v: %v", obj, err) - return - } - s.queue.Add(key) -} - -// Run starts a background goroutine that watches for changes to services that -// have (or had) LoadBalancers=true and ensures that they have -// load balancers created and deleted appropriately. -// serviceSyncPeriod controls how often we check the cluster's services to -// ensure that the correct load balancers exist. -// nodeSyncPeriod controls how often we check the cluster's nodes to determine -// if load balancers need to be updated to point to a new set. -// -// It's an error to call Run() more than once for a given ServiceController -// object. -func (s *ServiceController) Run(stopCh <-chan struct{}, workers int) { - defer runtime.HandleCrash() - defer s.queue.ShutDown() - - klog.Info("Starting service controller") - defer klog.Info("Shutting down service controller") - - if !controller.WaitForCacheSync("service", stopCh, s.serviceListerSynced, s.nodeListerSynced) { - return - } - - for i := 0; i < workers; i++ { - go wait.Until(s.worker, time.Second, stopCh) - } - - go wait.Until(s.nodeSyncLoop, nodeSyncPeriod, stopCh) - - <-stopCh -} - -// worker runs a worker thread that just dequeues items, processes them, and marks them done. -// It enforces that the syncHandler is never invoked concurrently with the same key. -func (s *ServiceController) worker() { - for s.processNextWorkItem() { - } -} - -func (s *ServiceController) processNextWorkItem() bool { - key, quit := s.queue.Get() - if quit { - return false - } - defer s.queue.Done(key) - - err := s.syncService(key.(string)) - if err == nil { - s.queue.Forget(key) - return true - } - - runtime.HandleError(fmt.Errorf("error processing service %v (will retry): %v", key, err)) - s.queue.AddRateLimited(key) - return true -} - -func (s *ServiceController) init() error { - return nil -} - -// processServiceUpdate operates loadbalancers for the incoming service accordingly. -// Returns an error if processing the service update failed. -func (s *ServiceController) processServiceUpdate(cachedService *cachedService, service *v1.Service, key string) error { - if cachedService.state != nil { - if cachedService.state.UID != service.UID { - err := s.processLoadBalancerDelete(cachedService, key) - if err != nil { - return err - } - } - } - // cache the service, we need the info for service deletion - cachedService.state = service - err := s.createLoadBalancerIfNeeded(key, service) - if err != nil { - eventType := "CreatingLoadBalancerFailed" - message := "Error creating load balancer (will retry): " - if !wantsLoadBalancer(service) { - eventType = "CleanupLoadBalancerFailed" - message = "Error cleaning up load balancer (will retry): " - } - message += err.Error() - s.eventRecorder.Event(service, v1.EventTypeWarning, eventType, message) - return err - } - // Always update the cache upon success. - // NOTE: Since we update the cached service if and only if we successfully - // processed it, a cached service being nil implies that it hasn't yet - // been successfully processed. - s.cache.set(key, cachedService) - - return nil -} - -// createLoadBalancerIfNeeded ensures that service's status is synced up with loadbalancer -// i.e. creates loadbalancer for service if requested and deletes loadbalancer if the service -// doesn't want a loadbalancer no more. Returns whatever error occurred. -func (s *ServiceController) createLoadBalancerIfNeeded(key string, service *v1.Service) error { - // Note: It is safe to just call EnsureLoadBalancer. But, on some clouds that requires a delete & create, - // which may involve service interruption. Also, we would like user-friendly events. - - // Save the state so we can avoid a write if it doesn't change - previousState := v1helper.LoadBalancerStatusDeepCopy(&service.Status.LoadBalancer) - var newState *v1.LoadBalancerStatus - var err error - - if !wantsLoadBalancer(service) { - newState = &v1.LoadBalancerStatus{} - } else { - klog.V(2).Infof("Ensuring LB for service %s", key) - - // TODO: We could do a dry-run here if wanted to avoid the spurious cloud-calls & events when we restart - - s.eventRecorder.Event(service, v1.EventTypeNormal, "EnsuringLoadBalancer", "Ensuring load balancer") - newState, err = s.ensureLoadBalancer(service) - if err != nil { - return fmt.Errorf("failed to ensure load balancer for service %s: %v", key, err) - } - s.eventRecorder.Event(service, v1.EventTypeNormal, "EnsuredLoadBalancer", "Ensured load balancer") - } - - // Write the state if changed - // TODO: Be careful here ... what if there were other changes to the service? - if !v1helper.LoadBalancerStatusEqual(previousState, newState) { - // Make a copy so we don't mutate the shared informer cache - service = service.DeepCopy() - - // Update the status on the copy - service.Status.LoadBalancer = *newState - - if err := s.persistUpdate(service); err != nil { - // TODO: This logic needs to be revisited. We might want to retry on all the errors, not just conflicts. - if errors.IsConflict(err) { - return fmt.Errorf("not persisting update to service '%s/%s' that has been changed since we received it: %v", service.Namespace, service.Name, err) - } - runtime.HandleError(fmt.Errorf("failed to persist service %q updated status to apiserver, even after retries. Giving up: %v", key, err)) - return nil - } - } else { - klog.V(2).Infof("Not persisting unchanged LoadBalancerStatus for service %s to registry.", key) - } - - return nil -} - -func (s *ServiceController) persistUpdate(service *v1.Service) error { - var err error - for i := 0; i < clientRetryCount; i++ { - _, err = s.kubeClient.CoreV1().Services(service.Namespace).UpdateStatus(service) - if err == nil { - return nil - } - // If the object no longer exists, we don't want to recreate it. Just bail - // out so that we can process the delete, which we should soon be receiving - // if we haven't already. - if errors.IsNotFound(err) { - klog.Infof("Not persisting update to service '%s/%s' that no longer exists: %v", - service.Namespace, service.Name, err) - return nil - } - // TODO: Try to resolve the conflict if the change was unrelated to load - // balancer status. For now, just pass it up the stack. - if errors.IsConflict(err) { - return err - } - klog.Warningf("Failed to persist updated LoadBalancerStatus to service '%s/%s' after creating its load balancer: %v", - service.Namespace, service.Name, err) - time.Sleep(clientRetryInterval) - } - return err -} - -func (s *ServiceController) ensureLoadBalancer(service *v1.Service) (*v1.LoadBalancerStatus, error) { - nodes, err := s.nodeLister.ListWithPredicate(getNodeConditionPredicate()) - if err != nil { - return nil, err - } - - // If there are no available nodes for LoadBalancer service, make a EventTypeWarning event for it. - if len(nodes) == 0 { - s.eventRecorder.Eventf(service, v1.EventTypeWarning, "UnAvailableLoadBalancer", "There are no available nodes for LoadBalancer service %s/%s", service.Namespace, service.Name) - } - - // - Only one protocol supported per service - // - Not all cloud providers support all protocols and the next step is expected to return - // an error for unsupported protocols - return &v1.LoadBalancerStatus{}, nil -} - -// ListKeys implements the interface required by DeltaFIFO to list the keys we -// already know about. -func (s *serviceCache) ListKeys() []string { - s.mu.Lock() - defer s.mu.Unlock() - keys := make([]string, 0, len(s.serviceMap)) - for k := range s.serviceMap { - keys = append(keys, k) - } - return keys -} - -// GetByKey returns the value stored in the serviceMap under the given key -func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) { - s.mu.Lock() - defer s.mu.Unlock() - if v, ok := s.serviceMap[key]; ok { - return v, true, nil - } - return nil, false, nil -} - -// ListKeys implements the interface required by DeltaFIFO to list the keys we -// already know about. -func (s *serviceCache) allServices() []*v1.Service { - s.mu.Lock() - defer s.mu.Unlock() - services := make([]*v1.Service, 0, len(s.serviceMap)) - for _, v := range s.serviceMap { - services = append(services, v.state) - } - return services -} - -func (s *serviceCache) get(serviceName string) (*cachedService, bool) { - s.mu.Lock() - defer s.mu.Unlock() - service, ok := s.serviceMap[serviceName] - return service, ok -} - -func (s *serviceCache) getOrCreate(serviceName string) *cachedService { - s.mu.Lock() - defer s.mu.Unlock() - service, ok := s.serviceMap[serviceName] - if !ok { - service = &cachedService{} - s.serviceMap[serviceName] = service - } - return service -} - -func (s *serviceCache) set(serviceName string, service *cachedService) { - s.mu.Lock() - defer s.mu.Unlock() - s.serviceMap[serviceName] = service -} - -func (s *serviceCache) delete(serviceName string) { - s.mu.Lock() - defer s.mu.Unlock() - delete(s.serviceMap, serviceName) -} - -func (s *ServiceController) needsUpdate(oldService *v1.Service, newService *v1.Service) bool { - if !wantsLoadBalancer(oldService) && !wantsLoadBalancer(newService) { - return false - } - if wantsLoadBalancer(oldService) != wantsLoadBalancer(newService) { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "Type", "%v -> %v", - oldService.Spec.Type, newService.Spec.Type) - return true - } - - if wantsLoadBalancer(newService) && !reflect.DeepEqual(oldService.Spec.LoadBalancerSourceRanges, newService.Spec.LoadBalancerSourceRanges) { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "LoadBalancerSourceRanges", "%v -> %v", - oldService.Spec.LoadBalancerSourceRanges, newService.Spec.LoadBalancerSourceRanges) - return true - } - - if !portsEqualForLB(oldService, newService) || oldService.Spec.SessionAffinity != newService.Spec.SessionAffinity { - return true - } - if !loadBalancerIPsAreEqual(oldService, newService) { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "LoadbalancerIP", "%v -> %v", - oldService.Spec.LoadBalancerIP, newService.Spec.LoadBalancerIP) - return true - } - if len(oldService.Spec.ExternalIPs) != len(newService.Spec.ExternalIPs) { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "ExternalIP", "Count: %v -> %v", - len(oldService.Spec.ExternalIPs), len(newService.Spec.ExternalIPs)) - return true - } - for i := range oldService.Spec.ExternalIPs { - if oldService.Spec.ExternalIPs[i] != newService.Spec.ExternalIPs[i] { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "ExternalIP", "Added: %v", - newService.Spec.ExternalIPs[i]) - return true - } - } - if !reflect.DeepEqual(oldService.Annotations, newService.Annotations) { - return true - } - if oldService.UID != newService.UID { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "UID", "%v -> %v", - oldService.UID, newService.UID) - return true - } - if oldService.Spec.ExternalTrafficPolicy != newService.Spec.ExternalTrafficPolicy { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "ExternalTrafficPolicy", "%v -> %v", - oldService.Spec.ExternalTrafficPolicy, newService.Spec.ExternalTrafficPolicy) - return true - } - if oldService.Spec.HealthCheckNodePort != newService.Spec.HealthCheckNodePort { - s.eventRecorder.Eventf(newService, v1.EventTypeNormal, "HealthCheckNodePort", "%v -> %v", - oldService.Spec.HealthCheckNodePort, newService.Spec.HealthCheckNodePort) - return true - } - - return false -} - -func (s *ServiceController) loadBalancerName(service *v1.Service) string { - return "" -} - -func getPortsForLB(service *v1.Service) ([]*v1.ServicePort, error) { - var protocol v1.Protocol - - ports := []*v1.ServicePort{} - for i := range service.Spec.Ports { - sp := &service.Spec.Ports[i] - // The check on protocol was removed here. The cloud provider itself is now responsible for all protocol validation - ports = append(ports, sp) - if protocol == "" { - protocol = sp.Protocol - } else if protocol != sp.Protocol && wantsLoadBalancer(service) { - // TODO: Convert error messages to use event recorder - return nil, fmt.Errorf("mixed protocol external load balancers are not supported") - } - } - return ports, nil -} - -func portsEqualForLB(x, y *v1.Service) bool { - xPorts, err := getPortsForLB(x) - if err != nil { - return false - } - yPorts, err := getPortsForLB(y) - if err != nil { - return false - } - return portSlicesEqualForLB(xPorts, yPorts) -} - -func portSlicesEqualForLB(x, y []*v1.ServicePort) bool { - if len(x) != len(y) { - return false - } - - for i := range x { - if !portEqualForLB(x[i], y[i]) { - return false - } - } - return true -} - -func portEqualForLB(x, y *v1.ServicePort) bool { - // TODO: Should we check name? (In theory, an LB could expose it) - if x.Name != y.Name { - return false - } - - if x.Protocol != y.Protocol { - return false - } - - if x.Port != y.Port { - return false - } - - if x.NodePort != y.NodePort { - return false - } - - // We don't check TargetPort; that is not relevant for load balancing - // TODO: Should we blank it out? Or just check it anyway? - - return true -} - -func nodeNames(nodes []*v1.Node) sets.String { - ret := sets.NewString() - for _, node := range nodes { - ret.Insert(node.Name) - } - return ret -} - -func nodeSlicesEqualForLB(x, y []*v1.Node) bool { - if len(x) != len(y) { - return false - } - return nodeNames(x).Equal(nodeNames(y)) -} - -func getNodeConditionPredicate() corelisters.NodeConditionPredicate { - return func(node *v1.Node) bool { - // We add the master to the node list, but its unschedulable. So we use this to filter - // the master. - if node.Spec.Unschedulable { - return false - } - - // As of 1.6, we will taint the master, but not necessarily mark it unschedulable. - // Recognize nodes labeled as master, and filter them also, as we were doing previously. - if _, hasMasterRoleLabel := node.Labels[LabelNodeRoleMaster]; hasMasterRoleLabel { - return false - } - - // If we have no info, don't accept - if len(node.Status.Conditions) == 0 { - return false - } - for _, cond := range node.Status.Conditions { - // We consider the node for load balancing only when its NodeReady condition status - // is ConditionTrue - if cond.Type == v1.NodeReady && cond.Status != v1.ConditionTrue { - klog.V(4).Infof("Ignoring node %v with %v condition status %v", node.Name, cond.Type, cond.Status) - return false - } - } - return true - } -} - -// nodeSyncLoop handles updating the hosts pointed to by all load -// balancers whenever the set of nodes in the cluster changes. -func (s *ServiceController) nodeSyncLoop() { - newHosts, err := s.nodeLister.ListWithPredicate(getNodeConditionPredicate()) - if err != nil { - klog.Errorf("Failed to retrieve current set of nodes from node lister: %v", err) - return - } - if nodeSlicesEqualForLB(newHosts, s.knownHosts) { - // The set of nodes in the cluster hasn't changed, but we can retry - // updating any services that we failed to update last time around. - s.servicesToUpdate = s.updateLoadBalancerHosts(s.servicesToUpdate, newHosts) - return - } - - klog.Infof("Detected change in list of current cluster nodes. New node set: %v", - nodeNames(newHosts)) - - // Try updating all services, and save the ones that fail to try again next - // round. - s.servicesToUpdate = s.cache.allServices() - numServices := len(s.servicesToUpdate) - s.servicesToUpdate = s.updateLoadBalancerHosts(s.servicesToUpdate, newHosts) - klog.Infof("Successfully updated %d out of %d load balancers to direct traffic to the updated set of nodes", - numServices-len(s.servicesToUpdate), numServices) - - s.knownHosts = newHosts -} - -// updateLoadBalancerHosts updates all existing load balancers so that -// they will match the list of hosts provided. -// Returns the list of services that couldn't be updated. -func (s *ServiceController) updateLoadBalancerHosts(services []*v1.Service, hosts []*v1.Node) (servicesToRetry []*v1.Service) { - for _, service := range services { - func() { - if service == nil { - return - } - if err := s.lockedUpdateLoadBalancerHosts(service, hosts); err != nil { - klog.Errorf("External error while updating load balancer: %v.", err) - servicesToRetry = append(servicesToRetry, service) - } - }() - } - return servicesToRetry -} - -// Updates the load balancer of a service, assuming we hold the mutex -// associated with the service. -func (s *ServiceController) lockedUpdateLoadBalancerHosts(service *v1.Service, hosts []*v1.Node) error { - if !wantsLoadBalancer(service) { - return nil - } - - // It's only an actual error if the load balancer still exists. - return nil -} - -func wantsLoadBalancer(service *v1.Service) bool { - return service.Spec.Type == v1.ServiceTypeLoadBalancer -} - -func loadBalancerIPsAreEqual(oldService, newService *v1.Service) bool { - return oldService.Spec.LoadBalancerIP == newService.Spec.LoadBalancerIP -} - -// syncService will sync the Service with the given key if it has had its expectations fulfilled, -// meaning it did not expect to see any more of its pods created or deleted. This function is not meant to be -// invoked concurrently with the same key. -func (s *ServiceController) syncService(key string) error { - startTime := time.Now() - var cachedService *cachedService - defer func() { - klog.V(4).Infof("Finished syncing service %q (%v)", key, time.Since(startTime)) - }() - - namespace, name, err := cache.SplitMetaNamespaceKey(key) - if err != nil { - return err - } - - // service holds the latest service info from apiserver - service, err := s.serviceLister.Services(namespace).Get(name) - switch { - case errors.IsNotFound(err): - // service absence in store means watcher caught the deletion, ensure LB info is cleaned - klog.Infof("Service has been deleted %v. Attempting to cleanup load balancer resources", key) - err = s.processServiceDeletion(key) - case err != nil: - klog.Infof("Unable to retrieve service %v from store: %v", key, err) - default: - cachedService = s.cache.getOrCreate(key) - err = s.processServiceUpdate(cachedService, service, key) - } - - return err -} - -// Returns an error if processing the service deletion failed, along with a time.Duration -// indicating whether processing should be retried; zero means no-retry; otherwise -// we should retry after that Duration. -func (s *ServiceController) processServiceDeletion(key string) error { - cachedService, ok := s.cache.get(key) - if !ok { - klog.Errorf("service %s not in cache even though the watcher thought it was. Ignoring the deletion", key) - return nil - } - return s.processLoadBalancerDelete(cachedService, key) -} - -func (s *ServiceController) processLoadBalancerDelete(cachedService *cachedService, key string) error { - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/OWNERS old mode 100755 new mode 100644 index d914c0d7195..c6c376de4e1 --- a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-serviceaccounts-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokengetter.go b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokengetter.go index ed86489639f..25baf01d8d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokengetter.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokengetter.go @@ -20,30 +20,43 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" + v1listers "k8s.io/client-go/listers/core/v1" "k8s.io/kubernetes/pkg/serviceaccount" ) // clientGetter implements ServiceAccountTokenGetter using a clientset.Interface type clientGetter struct { - client clientset.Interface + client clientset.Interface + secretLister v1listers.SecretLister + serviceAccountLister v1listers.ServiceAccountLister + podLister v1listers.PodLister } // NewGetterFromClient returns a ServiceAccountTokenGetter that // uses the specified client to retrieve service accounts and secrets. // The client should NOT authenticate using a service account token // the returned getter will be used to retrieve, or recursion will result. -func NewGetterFromClient(c clientset.Interface) serviceaccount.ServiceAccountTokenGetter { - return clientGetter{c} +func NewGetterFromClient(c clientset.Interface, secretLister v1listers.SecretLister, serviceAccountLister v1listers.ServiceAccountLister, podLister v1listers.PodLister) serviceaccount.ServiceAccountTokenGetter { + return clientGetter{c, secretLister, serviceAccountLister, podLister} } func (c clientGetter) GetServiceAccount(namespace, name string) (*v1.ServiceAccount, error) { + if serviceAccount, err := c.serviceAccountLister.ServiceAccounts(namespace).Get(name); err == nil { + return serviceAccount, nil + } return c.client.CoreV1().ServiceAccounts(namespace).Get(name, metav1.GetOptions{}) } func (c clientGetter) GetPod(namespace, name string) (*v1.Pod, error) { + if pod, err := c.podLister.Pods(namespace).Get(name); err == nil { + return pod, nil + } return c.client.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{}) } func (c clientGetter) GetSecret(namespace, name string) (*v1.Secret, error) { + if secret, err := c.secretLister.Secrets(namespace).Get(name); err == nil { + return secret, nil + } return c.client.CoreV1().Secrets(namespace).Get(name, metav1.GetOptions{}) } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/statefulset/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/statefulset/OWNERS old mode 100755 new mode 100644 index 1b97b567cad..f0156c7d4c7 --- a/vendor/k8s.io/kubernetes/pkg/controller/statefulset/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/statefulset/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - enisoc - foxish diff --git a/vendor/k8s.io/kubernetes/pkg/controller/util/node/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/util/node/BUILD index 2dc7c49166d..4b860e68ffc 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/util/node/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/util/node/BUILD @@ -18,10 +18,9 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/listers/extensions/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/cloud-provider:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/util/node/controller_utils.go b/vendor/k8s.io/kubernetes/pkg/controller/util/node/controller_utils.go index 7f699d9ebe1..d919e7177a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/util/node/controller_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/util/node/controller_utils.go @@ -17,7 +17,6 @@ limitations under the License. package node import ( - "errors" "fmt" "strings" @@ -32,7 +31,7 @@ import ( "k8s.io/api/core/v1" clientset "k8s.io/client-go/kubernetes" - extensionslisters "k8s.io/client-go/listers/extensions/v1beta1" + appsv1listers "k8s.io/client-go/listers/apps/v1" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/kubelet/util/format" @@ -41,16 +40,10 @@ import ( "k8s.io/klog" ) -var ( - // ErrCloudInstance occurs when the cloud provider does not support - // the Instances API. - ErrCloudInstance = errors.New("cloud provider doesn't support instances") -) - // DeletePods will delete all pods from master running on given node, // and return true if any pods were deleted, or were found pending // deletion. -func DeletePods(kubeClient clientset.Interface, recorder record.EventRecorder, nodeName, nodeUID string, daemonStore extensionslisters.DaemonSetLister) (bool, error) { +func DeletePods(kubeClient clientset.Interface, recorder record.EventRecorder, nodeName, nodeUID string, daemonStore appsv1listers.DaemonSetLister) (bool, error) { remaining := false selector := fields.OneTermEqualSelector(api.PodHostField, nodeName).String() options := metav1.ListOptions{FieldSelector: selector} @@ -123,15 +116,6 @@ func SetPodTerminationReason(kubeClient clientset.Interface, pod *v1.Pod, nodeNa return updatedPod, nil } -// ForcefullyDeleteNode deletes the node immediately. The pods on the -// node are cleaned up by the podGC. -func ForcefullyDeleteNode(kubeClient clientset.Interface, nodeName string) error { - if err := kubeClient.CoreV1().Nodes().Delete(nodeName, nil); err != nil { - return fmt.Errorf("unable to delete node %q: %v", nodeName, err) - } - return nil -} - // MarkAllPodsNotReady updates ready status of all pods running on // given node from master return true if success func MarkAllPodsNotReady(kubeClient clientset.Interface, node *v1.Node) error { @@ -230,6 +214,23 @@ func SwapNodeControllerTaint(kubeClient clientset.Interface, taintsToAdd, taints return true } +// AddOrUpdateLabelsOnNode updates the labels on the node and returns true on +// success and false on failure. +func AddOrUpdateLabelsOnNode(kubeClient clientset.Interface, labelsToUpdate map[string]string, node *v1.Node) bool { + err := controller.AddOrUpdateLabelsOnNode(kubeClient, node.Name, labelsToUpdate) + if err != nil { + utilruntime.HandleError( + fmt.Errorf( + "unable to update labels %+v for Node %q: %v", + labelsToUpdate, + node.Name, + err)) + return false + } + klog.V(4).Infof("Updated labels %+v to Node %v", labelsToUpdate, node.Name) + return true +} + // CreateAddNodeHandler creates an add node handler. func CreateAddNodeHandler(f func(node *v1.Node) error) func(obj interface{}) { return func(originalObj interface{}) { @@ -276,3 +277,17 @@ func CreateDeleteNodeHandler(f func(node *v1.Node) error) func(obj interface{}) } } } + +// GetNodeCondition extracts the provided condition from the given status and returns that. +// Returns nil and -1 if the condition is not present, and the index of the located condition. +func GetNodeCondition(status *v1.NodeStatus, conditionType v1.NodeConditionType) (int, *v1.NodeCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/volume/OWNERS old mode 100755 new mode 100644 index f77dc41828f..49fd329dea9 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/OWNERS @@ -1,7 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - childsb - jsafrane - saad-ali +- msau42 reviewers: - childsb - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/BUILD index f68704cfff1..cc1c9ce6c6c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/BUILD @@ -18,10 +18,12 @@ go_library( "//pkg/controller/volume/attachdetach/reconciler:go_default_library", "//pkg/controller/volume/attachdetach/statusupdater:go_default_library", "//pkg/controller/volume/attachdetach/util:go_default_library", + "//pkg/features:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/operationexecutor:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//pkg/volume/util/volumepathhandler:go_default_library", "//staging/src/k8s.io/api/authentication/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -30,16 +32,18 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/informers/storage/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/listers/storage/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/OWNERS index 43cf273b1ff..301737d5399 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali - gnufied diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/attach_detach_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/attach_detach_controller.go index a1aec3db83a..fc94dd4e53f 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/attach_detach_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/attach_detach_controller.go @@ -31,14 +31,15 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" coreinformers "k8s.io/client-go/informers/core/v1" + storageinformers "k8s.io/client-go/informers/storage/v1beta1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" corelisters "k8s.io/client-go/listers/core/v1" + storagelisters "k8s.io/client-go/listers/storage/v1beta1" kcache "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" - csiclient "k8s.io/csi-api/pkg/client/clientset/versioned" "k8s.io/klog" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache" @@ -51,6 +52,7 @@ import ( "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/operationexecutor" + "k8s.io/kubernetes/pkg/volume/util/subpath" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" ) @@ -96,11 +98,11 @@ type AttachDetachController interface { // NewAttachDetachController returns a new instance of AttachDetachController. func NewAttachDetachController( kubeClient clientset.Interface, - csiClient csiclient.Interface, podInformer coreinformers.PodInformer, nodeInformer coreinformers.NodeInformer, pvcInformer coreinformers.PersistentVolumeClaimInformer, pvInformer coreinformers.PersistentVolumeInformer, + csiNodeInformer storageinformers.CSINodeInformer, plugins []volume.VolumePlugin, prober volume.DynamicPluginProber, disableReconciliationSync bool, @@ -122,7 +124,6 @@ func NewAttachDetachController( // deleted (probably can't do this with sharedInformer), etc. adc := &attachDetachController{ kubeClient: kubeClient, - csiClient: csiClient, pvcLister: pvcInformer.Lister(), pvcsSynced: pvcInformer.Informer().HasSynced, pvLister: pvInformer.Lister(), @@ -237,10 +238,6 @@ type attachDetachController struct { // the API server. kubeClient clientset.Interface - // csiClient is the csi.storage.k8s.io API client used by volumehost to communicate with - // the API server. - csiClient csiclient.Interface - // pvcLister is the shared PVC lister used to fetch and store PVC // objects from the API server. It is shared with other controllers and // therefore the PVC objects in its store should be treated as immutable. @@ -260,6 +257,9 @@ type attachDetachController struct { nodeLister corelisters.NodeLister nodesSynced kcache.InformerSynced + csiNodeLister storagelisters.CSINodeLister + csiNodeSynced kcache.InformerSynced + // volumePluginMgr used to initialize and fetch volume plugins volumePluginMgr volume.VolumePluginMgr @@ -309,7 +309,12 @@ func (adc *attachDetachController) Run(stopCh <-chan struct{}) { klog.Infof("Starting attach detach controller") defer klog.Infof("Shutting down attach detach controller") - if !controller.WaitForCacheSync("attach detach", stopCh, adc.podsSynced, adc.nodesSynced, adc.pvcsSynced, adc.pvsSynced) { + synced := []kcache.InformerSynced{adc.podsSynced, adc.nodesSynced, adc.pvcsSynced, adc.pvsSynced} + if adc.csiNodeSynced != nil { + synced = append(synced, adc.csiNodeSynced) + } + + if !controller.WaitForCacheSync("attach detach", stopCh, synced...) { return } @@ -429,7 +434,7 @@ func (adc *attachDetachController) populateDesiredStateOfWorld() error { err) continue } - if adc.actualStateOfWorld.VolumeNodeExists(volumeName, nodeName) { + if adc.actualStateOfWorld.IsVolumeAttachedToNode(volumeName, nodeName) { devicePath, err := adc.getNodeVolumeDevicePath(volumeName, nodeName) if err != nil { klog.Errorf("Failed to find device path: %v", err) @@ -643,6 +648,17 @@ func (adc *attachDetachController) processVolumesInUse( } } +var _ volume.VolumeHost = &attachDetachController{} +var _ volume.AttachDetachVolumeHost = &attachDetachController{} + +func (adc *attachDetachController) CSINodeLister() storagelisters.CSINodeLister { + return adc.csiNodeLister +} + +func (adc *attachDetachController) IsAttachDetachController() bool { + return true +} + // VolumeHost implementation // This is an unfortunate requirement of the current factoring of volume plugin // initializing code. It requires kubelet specific methods used by the mounting @@ -755,6 +771,7 @@ func (adc *attachDetachController) GetEventRecorder() record.EventRecorder { return adc.recorder } -func (adc *attachDetachController) GetCSIClient() csiclient.Interface { - return adc.csiClient +func (adc *attachDetachController) GetSubpather() subpath.Interface { + // Subpaths not needed in attachdetach controller + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/BUILD index a2890223e0a..9b86e8711ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/BUILD @@ -34,6 +34,7 @@ go_test( deps = [ "//pkg/controller/volume/attachdetach/testing:go_default_library", "//pkg/volume/testing:go_default_library", + "//pkg/volume/util:go_default_library", "//pkg/volume/util/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go index f25fb008816..4322f15a60d 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go @@ -47,8 +47,10 @@ type ActualStateOfWorld interface { // operationexecutor to interact with it. operationexecutor.ActualStateOfWorldAttacherUpdater - // AddVolumeNode adds the given volume and node to the underlying store - // indicating the specified volume is attached to the specified node. + // AddVolumeNode adds the given volume and node to the underlying store. + // If attached is set to true, it indicates the specified volume is already + // attached to the specified node. If attached set to false, it means that + // the volume is not confirmed to be attached to the node yet. // A unique volume name is generated from the volumeSpec and returned on // success. // If volumeSpec is not an attachable volume plugin, an error is returned. @@ -56,7 +58,7 @@ type ActualStateOfWorld interface { // added. // If no node with the name nodeName exists in list of attached nodes for // the specified volume, the node is added. - AddVolumeNode(uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string) (v1.UniqueVolumeName, error) + AddVolumeNode(uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string, attached bool) (v1.UniqueVolumeName, error) // SetVolumeMountedByNode sets the MountedByNode value for the given volume // and node. When set to true the mounted parameter indicates the volume @@ -94,25 +96,32 @@ type ActualStateOfWorld interface { // nodes, the volume is also deleted. DeleteVolumeNode(volumeName v1.UniqueVolumeName, nodeName types.NodeName) - // VolumeNodeExists returns true if the specified volume/node combo exists + // IsVolumeAttachedToNode returns true if the specified volume/node combo exists // in the underlying store indicating the specified volume is attached to // the specified node. - VolumeNodeExists(volumeName v1.UniqueVolumeName, nodeName types.NodeName) bool + IsVolumeAttachedToNode(volumeName v1.UniqueVolumeName, nodeName types.NodeName) bool // GetAttachedVolumes generates and returns a list of volumes/node pairs - // reflecting which volumes are attached to which nodes based on the - // current actual state of the world. + // reflecting which volumes might attached to which nodes based on the + // current actual state of the world. This list includes all the volumes which return successful + // attach and also the volumes which return errors during attach. GetAttachedVolumes() []AttachedVolume - // GetAttachedVolumes generates and returns a list of volumes attached to - // the specified node reflecting which volumes are attached to that node - // based on the current actual state of the world. + // GetAttachedVolumesForNode generates and returns a list of volumes that added to + // the specified node reflecting which volumes are/or might be attached to that node + // based on the current actual state of the world. This function is currently used by + // attach_detach_controller to process VolumeInUse GetAttachedVolumesForNode(nodeName types.NodeName) []AttachedVolume + // GetAttachedVolumesPerNode generates and returns a map of nodes and volumes that added to + // the specified node reflecting which volumes are attached to that node + // based on the current actual state of the world. This function is currently used by + // reconciler to verify whether the volume is still attached to the node. GetAttachedVolumesPerNode() map[types.NodeName][]operationexecutor.AttachedVolume - // GetNodesForVolume returns the nodes on which the volume is attached - GetNodesForVolume(volumeName v1.UniqueVolumeName) []types.NodeName + // GetNodesForAttachedVolume returns the nodes on which the volume is attached. + // This function is used by reconciler for mutli-attach check. + GetNodesForAttachedVolume(volumeName v1.UniqueVolumeName) []types.NodeName // GetVolumesToReportAttached returns a map containing the set of nodes for // which the VolumesAttached Status field in the Node API object should be @@ -185,7 +194,7 @@ type attachedVolume struct { spec *volume.Spec // nodesAttachedTo is a map containing the set of nodes this volume has - // successfully been attached to. The key in this map is the name of the + // been attached to. The key in this map is the name of the // node and the value is a node object containing more information about // the node. nodesAttachedTo map[types.NodeName]nodeAttachedTo @@ -194,7 +203,8 @@ type attachedVolume struct { devicePath string } -// The nodeAttachedTo object represents a node that has volumes attached to it. +// The nodeAttachedTo object represents a node that has volumes attached to it +// or trying to attach to it. type nodeAttachedTo struct { // nodeName contains the name of this node. nodeName types.NodeName @@ -203,11 +213,9 @@ type nodeAttachedTo struct { // node and is unsafe to detach mountedByNode bool - // number of times SetVolumeMountedByNode has been called to set the value - // of mountedByNode to true. This is used to prevent mountedByNode from - // being reset during the period between attach and mount when volumesInUse - // status for the node may not be set. - mountedByNodeSetCount uint + // attachConfirmed indicates that the storage system verified the volume has been attached to this node. + // This value is set to false when an attach operation fails and the volume may be attached or not. + attachedConfirmed bool // detachRequestedTime used to capture the desire to detach this volume detachRequestedTime time.Time @@ -235,9 +243,16 @@ type nodeToUpdateStatusFor struct { volumesToReportAsAttached map[v1.UniqueVolumeName]v1.UniqueVolumeName } +func (asw *actualStateOfWorld) MarkVolumeAsUncertain( + uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName) error { + + _, err := asw.AddVolumeNode(uniqueName, volumeSpec, nodeName, "", false /* isAttached */) + return err +} + func (asw *actualStateOfWorld) MarkVolumeAsAttached( uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string) error { - _, err := asw.AddVolumeNode(uniqueName, volumeSpec, nodeName, devicePath) + _, err := asw.AddVolumeNode(uniqueName, volumeSpec, nodeName, devicePath, true) return err } @@ -261,12 +276,15 @@ func (asw *actualStateOfWorld) AddVolumeToReportAsAttached( } func (asw *actualStateOfWorld) AddVolumeNode( - uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string) (v1.UniqueVolumeName, error) { + uniqueName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string, isAttached bool) (v1.UniqueVolumeName, error) { asw.Lock() defer asw.Unlock() - var volumeName v1.UniqueVolumeName - if volumeSpec != nil { + volumeName := uniqueName + if volumeName == "" { + if volumeSpec == nil { + return volumeName, fmt.Errorf("volumeSpec cannot be nil if volumeName is empty") + } attachableVolumePlugin, err := asw.volumePluginMgr.FindAttachablePluginBySpec(volumeSpec) if err != nil || attachableVolumePlugin == nil { return "", fmt.Errorf( @@ -283,12 +301,6 @@ func (asw *actualStateOfWorld) AddVolumeNode( volumeSpec.Name(), err) } - } else { - // volumeSpec is nil - // This happens only on controller startup when reading the volumes from node - // status; if the pods using the volume have been removed and are unreachable - // the volumes should be detached immediately and the spec is not needed - volumeName = uniqueName } volumeObj, volumeExists := asw.attachedVolumes[volumeName] @@ -309,24 +321,29 @@ func (asw *actualStateOfWorld) AddVolumeNode( nodeName, devicePath) } - asw.attachedVolumes[volumeName] = volumeObj - - _, nodeExists := volumeObj.nodesAttachedTo[nodeName] + node, nodeExists := volumeObj.nodesAttachedTo[nodeName] if !nodeExists { // Create object if it doesn't exist. - volumeObj.nodesAttachedTo[nodeName] = nodeAttachedTo{ - nodeName: nodeName, - mountedByNode: true, // Assume mounted, until proven otherwise - mountedByNodeSetCount: 0, - detachRequestedTime: time.Time{}, + node = nodeAttachedTo{ + nodeName: nodeName, + mountedByNode: true, // Assume mounted, until proven otherwise + attachedConfirmed: isAttached, + detachRequestedTime: time.Time{}, } } else { - klog.V(5).Infof("Volume %q is already added to attachedVolume list to the node %q", + node.attachedConfirmed = isAttached + klog.V(5).Infof("Volume %q is already added to attachedVolume list to the node %q, the current attach state is %t", volumeName, - nodeName) + nodeName, + isAttached) } - asw.addVolumeToReportAsAttached(volumeName, nodeName) + volumeObj.nodesAttachedTo[nodeName] = node + asw.attachedVolumes[volumeName] = volumeObj + + if isAttached { + asw.addVolumeToReportAsAttached(volumeName, nodeName) + } return volumeName, nil } @@ -340,11 +357,6 @@ func (asw *actualStateOfWorld) SetVolumeMountedByNode( return fmt.Errorf("Failed to SetVolumeMountedByNode with error: %v", err) } - if mounted { - // Increment set count - nodeObj.mountedByNodeSetCount = nodeObj.mountedByNodeSetCount + 1 - } - nodeObj.mountedByNode = mounted volumeObj.nodesAttachedTo[nodeName] = nodeObj klog.V(4).Infof("SetVolumeMountedByNode volume %v to the node %q mounted %t", @@ -515,15 +527,15 @@ func (asw *actualStateOfWorld) DeleteVolumeNode( asw.removeVolumeFromReportAsAttached(volumeName, nodeName) } -func (asw *actualStateOfWorld) VolumeNodeExists( +func (asw *actualStateOfWorld) IsVolumeAttachedToNode( volumeName v1.UniqueVolumeName, nodeName types.NodeName) bool { asw.RLock() defer asw.RUnlock() volumeObj, volumeExists := asw.attachedVolumes[volumeName] if volumeExists { - if _, nodeExists := volumeObj.nodesAttachedTo[nodeName]; nodeExists { - return true + if node, nodeExists := volumeObj.nodesAttachedTo[nodeName]; nodeExists { + return node.attachedConfirmed } } @@ -574,16 +586,18 @@ func (asw *actualStateOfWorld) GetAttachedVolumesPerNode() map[types.NodeName][] attachedVolumesPerNode := make(map[types.NodeName][]operationexecutor.AttachedVolume) for _, volumeObj := range asw.attachedVolumes { for nodeName, nodeObj := range volumeObj.nodesAttachedTo { - volumes := attachedVolumesPerNode[nodeName] - volumes = append(volumes, getAttachedVolume(&volumeObj, &nodeObj).AttachedVolume) - attachedVolumesPerNode[nodeName] = volumes + if nodeObj.attachedConfirmed { + volumes := attachedVolumesPerNode[nodeName] + volumes = append(volumes, getAttachedVolume(&volumeObj, &nodeObj).AttachedVolume) + attachedVolumesPerNode[nodeName] = volumes + } } } return attachedVolumesPerNode } -func (asw *actualStateOfWorld) GetNodesForVolume(volumeName v1.UniqueVolumeName) []types.NodeName { +func (asw *actualStateOfWorld) GetNodesForAttachedVolume(volumeName v1.UniqueVolumeName) []types.NodeName { asw.RLock() defer asw.RUnlock() @@ -593,8 +607,10 @@ func (asw *actualStateOfWorld) GetNodesForVolume(volumeName v1.UniqueVolumeName) } nodes := []types.NodeName{} - for k := range volumeObj.nodesAttachedTo { - nodes = append(nodes, k) + for k, nodesAttached := range volumeObj.nodesAttachedTo { + if nodesAttached.attachedConfirmed { + nodes = append(nodes, k) + } } return nodes } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/BUILD index b09344c04fd..cb047fc9366 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/BUILD @@ -35,7 +35,6 @@ go_test( "//pkg/controller/volume/attachdetach/cache:go_default_library", "//pkg/controller/volume/attachdetach/statusupdater:go_default_library", "//pkg/controller/volume/attachdetach/testing:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume/testing:go_default_library", "//pkg/volume/util/operationexecutor:go_default_library", "//pkg/volume/util/types:go_default_library", @@ -44,6 +43,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go index deb257e00f4..24c4e802a96 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go @@ -178,7 +178,6 @@ func (rc *reconciler) reconcile() { for _, attachedVolume := range rc.actualStateOfWorld.GetAttachedVolumes() { if !rc.desiredStateOfWorld.VolumeExists( attachedVolume.VolumeName, attachedVolume.NodeName) { - // Don't even try to start an operation if there is already one running // This check must be done before we do any other checks, as otherwise the other checks // may pass while at the same time the volume leaves the pending state, resulting in @@ -198,7 +197,7 @@ func (rc *reconciler) reconcile() { timeout := elapsedTime > rc.maxWaitForUnmountDuration // Check whether volume is still mounted. Skip detach if it is still mounted unless timeout if attachedVolume.MountedByNode && !timeout { - klog.V(12).Infof(attachedVolume.GenerateMsgDetailed("Cannot detach volume because it is still mounted", "")) + klog.V(5).Infof(attachedVolume.GenerateMsgDetailed("Cannot detach volume because it is still mounted", "")) continue } @@ -253,7 +252,7 @@ func (rc *reconciler) reconcile() { func (rc *reconciler) attachDesiredVolumes() { // Ensure volumes that should be attached are attached. for _, volumeToAttach := range rc.desiredStateOfWorld.GetVolumesToAttach() { - if rc.actualStateOfWorld.VolumeNodeExists(volumeToAttach.VolumeName, volumeToAttach.NodeName) { + if rc.actualStateOfWorld.IsVolumeAttachedToNode(volumeToAttach.VolumeName, volumeToAttach.NodeName) { // Volume/Node exists, touch it to reset detachRequestedTime if klog.V(5) { klog.Infof(volumeToAttach.GenerateMsgDetailed("Volume attached--touching", "")) @@ -270,7 +269,7 @@ func (rc *reconciler) attachDesiredVolumes() { } if rc.isMultiAttachForbidden(volumeToAttach.VolumeSpec) { - nodes := rc.actualStateOfWorld.GetNodesForVolume(volumeToAttach.VolumeName) + nodes := rc.actualStateOfWorld.GetNodesForAttachedVolume(volumeToAttach.VolumeName) if len(nodes) > 0 { if !volumeToAttach.MultiAttachErrorReported { rc.reportMultiAttachError(volumeToAttach, nodes) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/BUILD index c633196b325..c8e3e62f273 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/operationexecutor:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//pkg/volume/util/volumepathhandler:go_default_library", "//staging/src/k8s.io/api/authentication/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -35,7 +36,6 @@ go_library( "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/OWNERS index f9e1482748f..38bd2c83c7c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali - jsafrane diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/cache/volume_resize_map.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/cache/volume_resize_map.go index 76d85ec4d92..3c86c21cffc 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/cache/volume_resize_map.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/cache/volume_resize_map.go @@ -185,7 +185,7 @@ func (resizeMap *volumeResizeMap) UpdatePVSize(pvcr *PVCWithResizeRequest, newSi oldData, err := json.Marshal(pvClone) if err != nil { - return fmt.Errorf("Unexpected error marshaling PV : %q with error %v", pvClone.Name, err) + return fmt.Errorf("Unexpected error marshaling old PV %q with error : %v", pvClone.Name, err) } pvClone.Spec.Capacity[v1.ResourceStorage] = newSize @@ -193,13 +193,13 @@ func (resizeMap *volumeResizeMap) UpdatePVSize(pvcr *PVCWithResizeRequest, newSi newData, err := json.Marshal(pvClone) if err != nil { - return fmt.Errorf("Unexpected error marshaling PV : %q with error %v", pvClone.Name, err) + return fmt.Errorf("Unexpected error marshaling new PV %q with error : %v", pvClone.Name, err) } patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, pvClone) if err != nil { - return fmt.Errorf("Error Creating two way merge patch for PV : %q with error %v", pvClone.Name, err) + return fmt.Errorf("Error Creating two way merge patch for PV %q with error : %v", pvClone.Name, err) } _, updateErr := resizeMap.kubeClient.CoreV1().PersistentVolumes().Patch(pvClone.Name, commontypes.StrategicMergePatchType, patchBytes) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/expand_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/expand_controller.go index eaf9bb5e521..efa1b12d7f8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/expand_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/expand_controller.go @@ -37,7 +37,6 @@ import ( corelisters "k8s.io/client-go/listers/core/v1" kcache "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/volume/events" "k8s.io/kubernetes/pkg/controller/volume/expand/cache" @@ -45,6 +44,7 @@ import ( "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/operationexecutor" + "k8s.io/kubernetes/pkg/volume/util/subpath" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" ) @@ -325,7 +325,7 @@ func (expc *expandController) GetEventRecorder() record.EventRecorder { return expc.recorder } -func (expc *expandController) GetCSIClient() csiclientset.Interface { - // No volume plugin in expand controller needs csi.storage.k8s.io +func (expc *expandController) GetSubpather() subpath.Interface { + // not needed for expand controller return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/sync_volume_resize.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/sync_volume_resize.go index c355a967472..b59ff845ec4 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/sync_volume_resize.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/expand/sync_volume_resize.go @@ -64,6 +64,11 @@ func (rc *syncResize) Sync() { // Resize PVCs that require resize for _, pvcWithResizeRequest := range rc.resizeMap.GetPVCsWithResizeRequest() { uniqueVolumeKey := v1.UniqueVolumeName(pvcWithResizeRequest.UniquePVCKey()) + if rc.opsExecutor.IsOperationPending(uniqueVolumeKey, "") { + klog.V(10).Infof("Operation for PVC %s is already pending", pvcWithResizeRequest.QualifiedName()) + continue + } + updatedClaim, err := markPVCResizeInProgress(pvcWithResizeRequest, rc.kubeClient) if err != nil { klog.V(5).Infof("Error setting PVC %s in progress with error : %v", pvcWithResizeRequest.QualifiedName(), err) @@ -73,10 +78,6 @@ func (rc *syncResize) Sync() { pvcWithResizeRequest.PVC = updatedClaim } - if rc.opsExecutor.IsOperationPending(uniqueVolumeKey, "") { - klog.V(10).Infof("Operation for PVC %v is already pending", pvcWithResizeRequest.QualifiedName()) - continue - } growFuncError := rc.opsExecutor.ExpandVolume(pvcWithResizeRequest, rc.resizeMap) if growFuncError != nil && !exponentialbackoff.IsExponentialBackoff(growFuncError) { klog.Errorf("Error growing pvc %s with %v", pvcWithResizeRequest.QualifiedName(), growFuncError) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/BUILD index ae16c23f113..041545ddfc3 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/BUILD @@ -17,6 +17,7 @@ go_library( "scheduler_binder.go", "scheduler_binder_cache.go", "scheduler_binder_fake.go", + "util.go", "volume_host.go", ], importpath = "k8s.io/kubernetes/pkg/controller/volume/persistentvolume", @@ -32,6 +33,7 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/recyclerclient:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//staging/src/k8s.io/api/authentication/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", @@ -44,6 +46,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/etcd:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", @@ -57,7 +60,8 @@ go_library( "//staging/src/k8s.io/client-go/tools/reference:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", + "//staging/src/k8s.io/cloud-provider/volume/errors:go_default_library", + "//staging/src/k8s.io/csi-translation-lib:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -70,7 +74,6 @@ go_test( "delete_test.go", "framework_test.go", "index_test.go", - "main_test.go", "provision_test.go", "pv_controller_test.go", "recycle_test.go", @@ -93,6 +96,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", @@ -100,6 +104,7 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/OWNERS b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/OWNERS index a0e86666b17..33657172abe 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - jsafrane - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/index.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/index.go index 19195e81523..175b0e174e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/index.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/index.go @@ -185,7 +185,7 @@ func findMatchingVolume( } } - if isVolumeBoundToClaim(volume, claim) { + if IsVolumeBoundToClaim(volume, claim) { // this claim and volume are pre-bound; return // the volume if the size request is satisfied, // otherwise continue searching for a match diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller.go index 97e3450fc25..6712b2111f0 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller.go @@ -37,6 +37,8 @@ import ( "k8s.io/client-go/tools/record" ref "k8s.io/client-go/tools/reference" "k8s.io/client-go/util/workqueue" + volerr "k8s.io/cloud-provider/volume/errors" + csitranslation "k8s.io/csi-translation-lib" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/controller/volume/events" "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/metrics" @@ -55,28 +57,28 @@ import ( // KEEP THE SPACE SHUTTLE FLYING. // ================================================================== // -// This controller is intentionally written in a very verbose style. You will +// This controller is intentionally written in a very verbose style. You will // notice: // -// 1. Every 'if' statement has a matching 'else' (exception: simple error -// checks for a client API call) -// 2. Things that may seem obvious are commented explicitly +// 1. Every 'if' statement has a matching 'else' (exception: simple error +// checks for a client API call) +// 2. Things that may seem obvious are commented explicitly // -// We call this style 'space shuttle style'. Space shuttle style is meant to +// We call this style 'space shuttle style'. Space shuttle style is meant to // ensure that every branch and condition is considered and accounted for - // the same way code is written at NASA for applications like the space // shuttle. // // Originally, the work of this controller was split amongst three -// controllers. This controller is the result a large effort to simplify the -// PV subsystem. During that effort, it became clear that we needed to ensure +// controllers. This controller is the result a large effort to simplify the +// PV subsystem. During that effort, it became clear that we needed to ensure // that every single condition was handled and accounted for in the code, even // if it resulted in no-op code branches. // // As a result, the controller code may seem overly verbose, commented, and -// 'branchy'. However, a large amount of business knowledge and context is +// 'branchy'. However, a large amount of business knowledge and context is // recorded here in order to ensure that future maintainers can correctly -// reason through the complexities of the binding behavior. For that reason, +// reason through the complexities of the binding behavior. For that reason, // changes to this file should preserve and add to the space shuttle style. // // ================================================================== @@ -91,7 +93,7 @@ import ( // represented here as pvc.Spec.VolumeName and pv.Spec.ClaimRef. The bi- // directionality is complicated to manage in a transactionless system, but // without it we can't ensure sane behavior in the face of different forms of -// trouble. For example, a rogue HA controller instance could end up racing +// trouble. For example, a rogue HA controller instance could end up racing // and making multiple bindings that are indistinguishable, resulting in // potential data loss. // @@ -118,8 +120,8 @@ import ( // annotation does not matter. const annBindCompleted = "pv.kubernetes.io/bind-completed" -// annBoundByController annotation applies to PVs and PVCs. It indicates that -// the binding (PV->PVC or PVC->PV) was installed by the controller. The +// annBoundByController annotation applies to PVs and PVCs. It indicates that +// the binding (PV->PVC or PVC->PV) was installed by the controller. The // absence of this annotation means the binding was done by the user (i.e. // pre-bound). Value of this annotation does not matter. // External PV binders must bind PV the same way as PV controller, otherwise PV @@ -227,6 +229,10 @@ type PersistentVolumeController struct { createProvisionedPVRetryCount int createProvisionedPVInterval time.Duration + + // For testing only: hook to intercept CSI driver name <=> Intree plugin name mapping + // Not used when set to nil + csiNameFromIntreeNameHook func(pluginName string) (string, error) } // syncClaim is the main controller method to decide what to do with a claim. @@ -245,7 +251,7 @@ func (ctrl *PersistentVolumeController) syncClaim(claim *v1.PersistentVolumeClai } } -//checkVolumeSatisfyClaim checks if the volume requested by the claim satisfies the requirements of the claim +// checkVolumeSatisfyClaim checks if the volume requested by the claim satisfies the requirements of the claim func checkVolumeSatisfyClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) error { requestedQty := claim.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] requestedSize := requestedQty.Value() @@ -283,34 +289,25 @@ func checkVolumeSatisfyClaim(volume *v1.PersistentVolume, claim *v1.PersistentVo return nil } -func (ctrl *PersistentVolumeController) shouldDelayBinding(claim *v1.PersistentVolumeClaim) (bool, error) { - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - return false, nil - } - +func (ctrl *PersistentVolumeController) isDelayBindingProvisioning(claim *v1.PersistentVolumeClaim) bool { // When feature VolumeScheduling enabled, // Scheduler signal to the PV controller to start dynamic // provisioning by setting the "annSelectedNode" annotation // in the PVC - if _, ok := claim.Annotations[annSelectedNode]; ok { + _, ok := claim.Annotations[annSelectedNode] + return ok +} + +// shouldDelayBinding returns true if binding of claim should be delayed, false otherwise. +// If binding of claim should be delayed, only claims pbound by scheduler +func (ctrl *PersistentVolumeController) shouldDelayBinding(claim *v1.PersistentVolumeClaim) (bool, error) { + // If claim has already been assigned a node by scheduler for dynamic provisioning. + if ctrl.isDelayBindingProvisioning(claim) { return false, nil } - className := v1helper.GetPersistentVolumeClaimClass(claim) - if className == "" { - return false, nil - } - - class, err := ctrl.classLister.Get(className) - if err != nil { - return false, nil - } - - if class.VolumeBindingMode == nil { - return false, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", className) - } - - return *class.VolumeBindingMode == storage.VolumeBindingWaitForFirstConsumer, nil + // If claim is in delay binding mode. + return IsDelayBindingMode(claim, ctrl.classLister) } // syncUnboundClaim is the main controller method to decide what to do with an @@ -394,10 +391,10 @@ func (ctrl *PersistentVolumeController) syncUnboundClaim(claim *v1.PersistentVol klog.V(4).Infof("synchronizing unbound PersistentVolumeClaim[%s]: volume is unbound, binding", claimToClaimKey(claim)) if err = checkVolumeSatisfyClaim(volume, claim); err != nil { klog.V(4).Infof("Can't bind the claim to volume %q: %v", volume.Name, err) - //send an event + // send an event msg := fmt.Sprintf("Cannot bind to requested volume %q: %s", volume.Name, err) ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.VolumeMismatch, msg) - //volume does not satisfy the requirements of the claim + // volume does not satisfy the requirements of the claim if _, err = ctrl.updateClaimStatus(claim, v1.ClaimPending, nil); err != nil { return err } @@ -408,7 +405,7 @@ func (ctrl *PersistentVolumeController) syncUnboundClaim(claim *v1.PersistentVol } // OBSERVATION: pvc is "Bound", pv is "Bound" return nil - } else if isVolumeBoundToClaim(volume, claim) { + } else if IsVolumeBoundToClaim(volume, claim) { // User asked for a PV that is claimed by this PVC // OBSERVATION: pvc is "Pending", pv is "Bound" klog.V(4).Infof("synchronizing unbound PersistentVolumeClaim[%s]: volume already bound, finishing the binding", claimToClaimKey(claim)) @@ -551,7 +548,7 @@ func (ctrl *PersistentVolumeController) syncVolume(volume *v1.PersistentVolume) // 2) apiserver if not found in informer cache // to make sure we will not reclaim a PV wrongly. // Note that only non-released and non-failed volumes will be - // updated to Released state when PVC does not eixst. + // updated to Released state when PVC does not exist. if volume.Status.Phase != v1.VolumeReleased && volume.Status.Phase != v1.VolumeFailed { obj, err = ctrl.claimLister.PersistentVolumeClaims(volume.Spec.ClaimRef.Namespace).Get(volume.Spec.ClaimRef.Name) if err != nil && !apierrs.IsNotFound(err) { @@ -852,7 +849,7 @@ func (ctrl *PersistentVolumeController) updateVolumePhaseWithEvent(volume *v1.Pe func (ctrl *PersistentVolumeController) bindVolumeToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) (*v1.PersistentVolume, error) { klog.V(4).Infof("updating PersistentVolume[%s]: binding to %q", volume.Name, claimToClaimKey(claim)) - volumeClone, dirty, err := ctrl.getBindVolumeToClaim(volume, claim) + volumeClone, dirty, err := GetBindVolumeToClaim(volume, claim) if err != nil { return nil, err } @@ -886,43 +883,6 @@ func (ctrl *PersistentVolumeController) updateBindVolumeToClaim(volumeClone *v1. return newVol, nil } -// Get new PV object only, no API or cache update -func (ctrl *PersistentVolumeController) getBindVolumeToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) (*v1.PersistentVolume, bool, error) { - dirty := false - - // Check if the volume was already bound (either by user or by controller) - shouldSetBoundByController := false - if !isVolumeBoundToClaim(volume, claim) { - shouldSetBoundByController = true - } - - // The volume from method args can be pointing to watcher cache. We must not - // modify these, therefore create a copy. - volumeClone := volume.DeepCopy() - - // Bind the volume to the claim if it is not bound yet - if volume.Spec.ClaimRef == nil || - volume.Spec.ClaimRef.Name != claim.Name || - volume.Spec.ClaimRef.Namespace != claim.Namespace || - volume.Spec.ClaimRef.UID != claim.UID { - - claimRef, err := ref.GetReference(scheme.Scheme, claim) - if err != nil { - return nil, false, fmt.Errorf("Unexpected error getting claim reference: %v", err) - } - volumeClone.Spec.ClaimRef = claimRef - dirty = true - } - - // Set annBoundByController if it is not set yet - if shouldSetBoundByController && !metav1.HasAnnotation(volumeClone.ObjectMeta, annBoundByController) { - metav1.SetMetaDataAnnotation(&volumeClone.ObjectMeta, annBoundByController, "yes") - dirty = true - } - - return volumeClone, dirty, nil -} - // bindClaimToVolume modifies the given claim to be bound to a volume and // saves it to API server. The volume is not modified in this method! func (ctrl *PersistentVolumeController) bindClaimToVolume(claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume) (*v1.PersistentVolumeClaim, error) { @@ -1098,8 +1058,8 @@ func (ctrl *PersistentVolumeController) reclaimVolume(volume *v1.PersistentVolum return nil } -// doRerecycleVolumeOperationcycleVolume recycles a volume. This method is -// running in standalone goroutine and already has all necessary locks. +// recycleVolumeOperation recycles a volume. This method is running in +// standalone goroutine and already has all necessary locks. func (ctrl *PersistentVolumeController) recycleVolumeOperation(volume *v1.PersistentVolume) { klog.V(4).Infof("recycleVolumeOperation [%s] started", volume.Name) @@ -1221,7 +1181,7 @@ func (ctrl *PersistentVolumeController) deleteVolumeOperation(volume *v1.Persist if err != nil { // Delete failed, update the volume and emit an event. klog.V(3).Infof("deletion of volume %q failed: %v", volume.Name, err) - if vol.IsDeletedVolumeInUse(err) { + if volerr.IsDeletedVolumeInUse(err) { // The plugin needs more time, don't mark the volume as Failed // and send Normal event only ctrl.eventRecorder.Event(volume, v1.EventTypeNormal, events.VolumeDelete, err.Error()) @@ -1333,7 +1293,7 @@ func (ctrl *PersistentVolumeController) isVolumeUsed(pv *v1.PersistentVolume) ([ // doDeleteVolume finds appropriate delete plugin and deletes given volume, returning // the volume plugin name. Also, it returns 'true', when the volume was deleted and -// 'false' when the volume cannot be deleted because of the deleter is external. No +// 'false' when the volume cannot be deleted because the deleter is external. No // error should be reported in this case. func (ctrl *PersistentVolumeController) doDeleteVolume(volume *v1.PersistentVolume) (string, bool, error) { klog.V(4).Infof("doDeleteVolume [%s]", volume.Name) @@ -1389,6 +1349,13 @@ func (ctrl *PersistentVolumeController) provisionClaim(claim *v1.PersistentVolum return nil } +func (ctrl *PersistentVolumeController) getCSINameFromIntreeName(pluginName string) (string, error) { + if ctrl.csiNameFromIntreeNameHook != nil { + return ctrl.csiNameFromIntreeNameHook(pluginName) + } + return csitranslation.GetCSINameFromInTreeName(pluginName) +} + // provisionClaimOperation provisions a volume. This method is running in // standalone goroutine and already has all necessary locks. func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.PersistentVolumeClaim) (string, error) { @@ -1405,12 +1372,26 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.Persis } var pluginName string + provisionerName := storageClass.Provisioner if plugin != nil { - pluginName = plugin.GetPluginName() + if plugin.IsMigratedToCSI() { + // pluginName is not set here to align with existing behavior + // of not setting pluginName for external provisioners (including CSI) + // Set provisionerName to CSI plugin name for setClaimProvisioner + provisionerName, err = ctrl.getCSINameFromIntreeName(storageClass.Provisioner) + if err != nil { + strerr := fmt.Sprintf("error getting CSI name for In tree plugin %s: %v", storageClass.Provisioner, err) + klog.V(2).Infof("%s", strerr) + ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, strerr) + return "", err + } + } else { + pluginName = plugin.GetPluginName() + } } // Add provisioner annotation so external provisioners know when to start - newClaim, err := ctrl.setClaimProvisioner(claim, storageClass) + newClaim, err := ctrl.setClaimProvisioner(claim, provisionerName) if err != nil { // Save failed, the controller will retry in the next sync klog.V(2).Infof("error saving claim %s: %v", claimToClaimKey(claim), err) @@ -1418,7 +1399,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.Persis } claim = newClaim - if plugin == nil { + if plugin == nil || plugin.IsMigratedToCSI() { // findProvisionablePlugin returned no error nor plugin. // This means that an unknown provisioner is requested. Report an event // and wait for the external provisioner diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller_base.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller_base.go index b68343011fe..9039de548d8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller_base.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/pv_controller_base.go @@ -22,7 +22,6 @@ import ( "time" "k8s.io/api/core/v1" - storage "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -425,8 +424,8 @@ func (ctrl *PersistentVolumeController) resync() { // setClaimProvisioner saves // claim.Annotations[annStorageProvisioner] = class.Provisioner -func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.PersistentVolumeClaim, class *storage.StorageClass) (*v1.PersistentVolumeClaim, error) { - if val, ok := claim.Annotations[annStorageProvisioner]; ok && val == class.Provisioner { +func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.PersistentVolumeClaim, provisionerName string) (*v1.PersistentVolumeClaim, error) { + if val, ok := claim.Annotations[annStorageProvisioner]; ok && val == provisionerName { // annotation is already set, nothing to do return claim, nil } @@ -434,7 +433,7 @@ func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.Persistent // The volume from method args can be pointing to watcher cache. We must not // modify these, therefore create a copy. claimClone := claim.DeepCopy() - metav1.SetMetaDataAnnotation(&claimClone.ObjectMeta, annStorageProvisioner, class.Provisioner) + metav1.SetMetaDataAnnotation(&claimClone.ObjectMeta, annStorageProvisioner, provisionerName) newClaim, err := ctrl.kubeClient.CoreV1().PersistentVolumeClaims(claim.Namespace).Update(claimClone) if err != nil { return newClaim, err @@ -464,22 +463,6 @@ func getVolumeStatusForLogging(volume *v1.PersistentVolume) string { return fmt.Sprintf("phase: %s, bound to: %q, boundByController: %v", volume.Status.Phase, claimName, boundByController) } -// isVolumeBoundToClaim returns true, if given volume is pre-bound or bound -// to specific claim. Both claim.Name and claim.Namespace must be equal. -// If claim.UID is present in volume.Spec.ClaimRef, it must be equal too. -func isVolumeBoundToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) bool { - if volume.Spec.ClaimRef == nil { - return false - } - if claim.Name != volume.Spec.ClaimRef.Name || claim.Namespace != volume.Spec.ClaimRef.Namespace { - return false - } - if volume.Spec.ClaimRef.UID != "" && claim.UID != volume.Spec.ClaimRef.UID { - return false - } - return true -} - // storeObjectUpdate updates given cache with a new object version from Informer // callback (i.e. with events from etcd) or with an object modified by the // controller itself. Returns "true", if the cache was updated, false if the diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_assume_cache.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_assume_cache.go index 292ee8f6ff2..cd4bc88d7ca 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_assume_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_assume_cache.go @@ -42,6 +42,9 @@ type AssumeCache interface { // Get the object by name Get(objName string) (interface{}, error) + // Get the API object by name + GetAPIObj(objName string) (interface{}, error) + // List all the objects in the cache List(indexObj interface{}) []interface{} } @@ -250,6 +253,17 @@ func (c *assumeCache) Get(objName string) (interface{}, error) { return objInfo.latestObj, nil } +func (c *assumeCache) GetAPIObj(objName string) (interface{}, error) { + c.rwMutex.RLock() + defer c.rwMutex.RUnlock() + + objInfo, err := c.getObjInfo(objName) + if err != nil { + return nil, err + } + return objInfo.apiObj, nil +} + func (c *assumeCache) List(indexObj interface{}) []interface{} { c.rwMutex.RLock() defer c.rwMutex.RUnlock() @@ -297,7 +311,7 @@ func (c *assumeCache) Assume(obj interface{}) error { } if newVersion < storedVersion { - return fmt.Errorf("%v %q is out of sync", c.description, name) + return fmt.Errorf("%v %q is out of sync (stored: %d, assume: %d)", c.description, name, storedVersion, newVersion) } // Only update the cached object @@ -325,6 +339,7 @@ type PVAssumeCache interface { AssumeCache GetPV(pvName string) (*v1.PersistentVolume, error) + GetAPIPV(pvName string) (*v1.PersistentVolume, error) ListPVs(storageClassName string) []*v1.PersistentVolume } @@ -356,6 +371,18 @@ func (c *pvAssumeCache) GetPV(pvName string) (*v1.PersistentVolume, error) { return pv, nil } +func (c *pvAssumeCache) GetAPIPV(pvName string) (*v1.PersistentVolume, error) { + obj, err := c.GetAPIObj(pvName) + if err != nil { + return nil, err + } + pv, ok := obj.(*v1.PersistentVolume) + if !ok { + return nil, &errWrongType{"v1.PersistentVolume", obj} + } + return pv, nil +} + func (c *pvAssumeCache) ListPVs(storageClassName string) []*v1.PersistentVolume { objs := c.List(&v1.PersistentVolume{ Spec: v1.PersistentVolumeSpec{ @@ -377,10 +404,10 @@ func (c *pvAssumeCache) ListPVs(storageClassName string) []*v1.PersistentVolume type PVCAssumeCache interface { AssumeCache - // GetPVC returns the PVC from the cache with the same - // namespace and the same name of the specified pod. + // GetPVC returns the PVC from the cache with given pvcKey. // pvcKey is the result of MetaNamespaceKeyFunc on PVC obj GetPVC(pvcKey string) (*v1.PersistentVolumeClaim, error) + GetAPIPVC(pvcKey string) (*v1.PersistentVolumeClaim, error) } type pvcAssumeCache struct { @@ -403,3 +430,15 @@ func (c *pvcAssumeCache) GetPVC(pvcKey string) (*v1.PersistentVolumeClaim, error } return pvc, nil } + +func (c *pvcAssumeCache) GetAPIPVC(pvcKey string) (*v1.PersistentVolumeClaim, error) { + obj, err := c.GetAPIObj(pvcKey) + if err != nil { + return nil, err + } + pvc, ok := obj.(*v1.PersistentVolumeClaim) + if !ok { + return nil, &errWrongType{"v1.PersistentVolumeClaim", obj} + } + return pvc, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder.go index 85fd71cf4eb..20c7af62adb 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder.go @@ -21,15 +21,16 @@ import ( "sort" "time" - "k8s.io/klog" - - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apiserver/pkg/storage/etcd" coreinformers "k8s.io/client-go/informers/core/v1" storageinformers "k8s.io/client-go/informers/storage/v1" clientset "k8s.io/client-go/kubernetes" + storagelisters "k8s.io/client-go/listers/storage/v1" + "k8s.io/klog" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" volumeutil "k8s.io/kubernetes/pkg/volume/util" ) @@ -97,10 +98,12 @@ type SchedulerVolumeBinder interface { } type volumeBinder struct { - ctrl *PersistentVolumeController + kubeClient clientset.Interface + classLister storagelisters.StorageClassLister - pvcCache PVCAssumeCache - pvCache PVAssumeCache + nodeInformer coreinformers.NodeInformer + pvcCache PVCAssumeCache + pvCache PVAssumeCache // Stores binding decisions that were made in FindPodVolumes for use in AssumePodVolumes. // AssumePodVolumes modifies the bindings again for use in BindPodVolumes. @@ -113,19 +116,16 @@ type volumeBinder struct { // NewVolumeBinder sets up all the caches needed for the scheduler to make volume binding decisions. func NewVolumeBinder( kubeClient clientset.Interface, + nodeInformer coreinformers.NodeInformer, pvcInformer coreinformers.PersistentVolumeClaimInformer, pvInformer coreinformers.PersistentVolumeInformer, storageClassInformer storageinformers.StorageClassInformer, bindTimeout time.Duration) SchedulerVolumeBinder { - // TODO: find better way... - ctrl := &PersistentVolumeController{ - kubeClient: kubeClient, - classLister: storageClassInformer.Lister(), - } - b := &volumeBinder{ - ctrl: ctrl, + kubeClient: kubeClient, + classLister: storageClassInformer.Lister(), + nodeInformer: nodeInformer, pvcCache: NewPVCAssumeCache(pvcInformer.Informer()), pvCache: NewPVAssumeCache(pvInformer.Informer()), podBindingCache: NewPodBindingCache(), @@ -139,7 +139,18 @@ func (b *volumeBinder) GetBindingsCache() PodBindingCache { return b.podBindingCache } -// FindPodVolumes caches the matching PVs and PVCs to provision per node in podBindingCache +func podHasClaims(pod *v1.Pod) bool { + for _, vol := range pod.Spec.Volumes { + if vol.PersistentVolumeClaim != nil { + return true + } + } + return false +} + +// FindPodVolumes caches the matching PVs and PVCs to provision per node in podBindingCache. +// This method intentionally takes in a *v1.Node object instead of using volumebinder.nodeInformer. +// That's necessary because some operations will need to pass in to the predicate fake node objects. func (b *volumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVolumesSatisfied, boundVolumesSatisfied bool, err error) { podName := getPodName(pod) @@ -157,6 +168,34 @@ func (b *volumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVolume } }() + if !podHasClaims(pod) { + // Fast path + return unboundVolumesSatisfied, boundVolumesSatisfied, nil + } + + var ( + matchedClaims []*bindingInfo + provisionedClaims []*v1.PersistentVolumeClaim + ) + defer func() { + // We recreate bindings for each new schedule loop. + if len(matchedClaims) == 0 && len(provisionedClaims) == 0 { + // Clear cache if no claims to bind or provision for this node. + b.podBindingCache.ClearBindings(pod, node.Name) + return + } + // Although we do not distinguish nil from empty in this function, for + // easier testing, we normalize empty to nil. + if len(matchedClaims) == 0 { + matchedClaims = nil + } + if len(provisionedClaims) == 0 { + provisionedClaims = nil + } + // Mark cache with all matched and provisioned claims for this node + b.podBindingCache.UpdateBindings(pod, node.Name, matchedClaims, provisionedClaims) + }() + // The pod's volumes need to be processed in one call to avoid the race condition where // volumes can get bound/provisioned in between calls. boundClaims, claimsToBind, unboundClaimsImmediate, err := b.getPodVolumes(pod) @@ -177,16 +216,39 @@ func (b *volumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVolume } } + // Find matching volumes and node for unbound claims if len(claimsToBind) > 0 { - var claimsToProvision []*v1.PersistentVolumeClaim - unboundVolumesSatisfied, claimsToProvision, err = b.findMatchingVolumes(pod, claimsToBind, node) - if err != nil { - return false, false, err + var ( + claimsToFindMatching []*v1.PersistentVolumeClaim + claimsToProvision []*v1.PersistentVolumeClaim + ) + + // Filter out claims to provision + for _, claim := range claimsToBind { + if selectedNode, ok := claim.Annotations[annSelectedNode]; ok { + if selectedNode != node.Name { + // Fast path, skip unmatched node + return false, boundVolumesSatisfied, nil + } + claimsToProvision = append(claimsToProvision, claim) + } else { + claimsToFindMatching = append(claimsToFindMatching, claim) + } } - // Try to provision for unbound volumes - if !unboundVolumesSatisfied { - unboundVolumesSatisfied, err = b.checkVolumeProvisions(pod, claimsToProvision, node) + // Find matching volumes + if len(claimsToFindMatching) > 0 { + var unboundClaims []*v1.PersistentVolumeClaim + unboundVolumesSatisfied, matchedClaims, unboundClaims, err = b.findMatchingVolumes(pod, claimsToFindMatching, node) + if err != nil { + return false, false, err + } + claimsToProvision = append(claimsToProvision, unboundClaims...) + } + + // Check for claims to provision + if len(claimsToProvision) > 0 { + unboundVolumesSatisfied, provisionedClaims, err = b.checkVolumeProvisions(pod, claimsToProvision, node) if err != nil { return false, false, err } @@ -226,8 +288,8 @@ func (b *volumeBinder) AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (al // Assume PV newBindings := []*bindingInfo{} for _, binding := range claimsToBind { - newPV, dirty, err := b.ctrl.getBindVolumeToClaim(binding.pv, binding.pvc) - klog.V(5).Infof("AssumePodVolumes: getBindVolumeToClaim for pod %q, PV %q, PVC %q. newPV %p, dirty %v, err: %v", + newPV, dirty, err := GetBindVolumeToClaim(binding.pv, binding.pvc) + klog.V(5).Infof("AssumePodVolumes: GetBindVolumeToClaim for pod %q, PV %q, PVC %q. newPV %p, dirty %v, err: %v", podName, binding.pv.Name, binding.pvc.Name, @@ -269,8 +331,7 @@ func (b *volumeBinder) AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (al // Update cache with the assumed pvcs and pvs // Even if length is zero, update the cache with an empty slice to indicate that no // operations are needed - b.podBindingCache.UpdateBindings(assumedPod, nodeName, newBindings) - b.podBindingCache.UpdateProvisionedPVCs(assumedPod, nodeName, newProvisionedPVCs) + b.podBindingCache.UpdateBindings(assumedPod, nodeName, newBindings, newProvisionedPVCs) return } @@ -300,10 +361,8 @@ func (b *volumeBinder) BindPodVolumes(assumedPod *v1.Pod) (err error) { } return wait.Poll(time.Second, b.bindTimeout, func() (bool, error) { - // Get cached values every time in case the pod gets deleted - bindings = b.podBindingCache.GetBindings(assumedPod, assumedPod.Spec.NodeName) - claimsToProvision = b.podBindingCache.GetProvisionedPVCs(assumedPod, assumedPod.Spec.NodeName) - return b.checkBindings(assumedPod, bindings, claimsToProvision) + b, err := b.checkBindings(assumedPod, bindings, claimsToProvision) + return b, err }) } @@ -340,6 +399,7 @@ func (b *volumeBinder) bindAPIUpdate(podName string, bindings []*bindingInfo, cl var ( binding *bindingInfo + i int claim *v1.PersistentVolumeClaim ) @@ -348,18 +408,28 @@ func (b *volumeBinder) bindAPIUpdate(podName string, bindings []*bindingInfo, cl for _, binding = range bindings { klog.V(5).Infof("bindAPIUpdate: Pod %q, binding PV %q to PVC %q", podName, binding.pv.Name, binding.pvc.Name) // TODO: does it hurt if we make an api call and nothing needs to be updated? - if _, err := b.ctrl.updateBindVolumeToClaim(binding.pv, binding.pvc, false); err != nil { + claimKey := claimToClaimKey(binding.pvc) + klog.V(2).Infof("claim %q bound to volume %q", claimKey, binding.pv.Name) + if newPV, err := b.kubeClient.CoreV1().PersistentVolumes().Update(binding.pv); err != nil { + klog.V(4).Infof("updating PersistentVolume[%s]: binding to %q failed: %v", binding.pv.Name, claimKey, err) return err + } else { + klog.V(4).Infof("updating PersistentVolume[%s]: bound to %q", binding.pv.Name, claimKey) + // Save updated object from apiserver for later checking. + binding.pv = newPV } lastProcessedBinding++ } // Update claims objects to trigger volume provisioning. Let the PV controller take care of the rest // PV controller is expect to signal back by removing related annotations if actual provisioning fails - for _, claim = range claimsToProvision { + for i, claim = range claimsToProvision { klog.V(5).Infof("bindAPIUpdate: Pod %q, PVC %q", podName, getPVCName(claim)) - if _, err := b.ctrl.kubeClient.CoreV1().PersistentVolumeClaims(claim.Namespace).Update(claim); err != nil { + if newClaim, err := b.kubeClient.CoreV1().PersistentVolumeClaims(claim.Namespace).Update(claim); err != nil { return err + } else { + // Save updated object from apiserver for later checking. + claimsToProvision[i] = newClaim } lastProcessedProvisioning++ } @@ -367,12 +437,20 @@ func (b *volumeBinder) bindAPIUpdate(podName string, bindings []*bindingInfo, cl return nil } +var ( + versioner = etcd.APIObjectVersioner{} +) + // checkBindings runs through all the PVCs in the Pod and checks: // * if the PVC is fully bound // * if there are any conditions that require binding to fail and be retried // // It returns true when all of the Pod's PVCs are fully bound, and error if // binding (and scheduling) needs to be retried +// Note that it checks on API objects not PV/PVC cache, this is because +// PV/PVC cache can be assumed again in main scheduler loop, we must check +// latest state in API server which are shared with PV controller and +// provisioners func (b *volumeBinder) checkBindings(pod *v1.Pod, bindings []*bindingInfo, claimsToProvision []*v1.PersistentVolumeClaim) (bool, error) { podName := getPodName(pod) if bindings == nil { @@ -382,13 +460,42 @@ func (b *volumeBinder) checkBindings(pod *v1.Pod, bindings []*bindingInfo, claim return false, fmt.Errorf("failed to get cached claims to provision for pod %q", podName) } - for _, binding := range bindings { - // Check for any conditions that might require scheduling retry + node, err := b.nodeInformer.Lister().Get(pod.Spec.NodeName) + if err != nil { + return false, fmt.Errorf("failed to get node %q: %v", pod.Spec.NodeName, err) + } - // Check if pv still exists - pv, err := b.pvCache.GetPV(binding.pv.Name) - if err != nil || pv == nil { - return false, fmt.Errorf("failed to check pv binding: %v", err) + // Check for any conditions that might require scheduling retry + + // When pod is removed from scheduling queue because of deletion or any + // other reasons, binding operation should be cancelled. There is no need + // to check PV/PVC bindings any more. + // We check pod binding cache here which will be cleared when pod is + // removed from scheduling queue. + if b.podBindingCache.GetDecisions(pod) == nil { + return false, fmt.Errorf("pod %q does not exist any more", podName) + } + + for _, binding := range bindings { + pv, err := b.pvCache.GetAPIPV(binding.pv.Name) + if err != nil { + return false, fmt.Errorf("failed to check binding: %v", err) + } + + pvc, err := b.pvcCache.GetAPIPVC(getPVCName(binding.pvc)) + if err != nil { + return false, fmt.Errorf("failed to check binding: %v", err) + } + + // Because we updated PV in apiserver, skip if API object is older + // and wait for new API object propagated from apiserver. + if versioner.CompareResourceVersion(binding.pv, pv) > 0 { + return false, nil + } + + // Check PV's node affinity (the node might not have the proper label) + if err := volumeutil.CheckNodeAffinity(pv, node.Labels); err != nil { + return false, fmt.Errorf("pv %q node affinity doesn't match node %q: %v", pv.Name, node.Name, err) } // Check if pv.ClaimRef got dropped by unbindVolume() @@ -397,18 +504,21 @@ func (b *volumeBinder) checkBindings(pod *v1.Pod, bindings []*bindingInfo, claim } // Check if pvc is fully bound - if isBound, _, err := b.isPVCBound(binding.pvc.Namespace, binding.pvc.Name); !isBound || err != nil { - return false, err + if !b.isPVCFullyBound(pvc) { + return false, nil } - - // TODO; what if pvc is bound to the wrong pv? It means our assume cache should be reverted. - // Or will pv controller cleanup the pv.ClaimRef? } for _, claim := range claimsToProvision { - bound, pvc, err := b.isPVCBound(claim.Namespace, claim.Name) - if err != nil || pvc == nil { - return false, fmt.Errorf("failed to check pvc binding: %v", err) + pvc, err := b.pvcCache.GetAPIPVC(getPVCName(claim)) + if err != nil { + return false, fmt.Errorf("failed to check provisioning pvc: %v", err) + } + + // Because we updated PVC in apiserver, skip if API object is older + // and wait for new API object propagated from apiserver. + if versioner.CompareResourceVersion(claim, pvc) > 0 { + return false, nil } // Check if selectedNode annotation is still set @@ -420,7 +530,27 @@ func (b *volumeBinder) checkBindings(pod *v1.Pod, bindings []*bindingInfo, claim return false, fmt.Errorf("selectedNode annotation value %q not set to scheduled node %q", selectedNode, pod.Spec.NodeName) } - if !bound { + // If the PVC is bound to a PV, check its node affinity + if pvc.Spec.VolumeName != "" { + pv, err := b.pvCache.GetAPIPV(pvc.Spec.VolumeName) + if err != nil { + if _, ok := err.(*errNotFound); ok { + // We tolerate NotFound error here, because PV is possibly + // not found because of API delay, we can check next time. + // And if PV does not exist because it's deleted, PVC will + // be unbound eventually. + return false, nil + } else { + return false, fmt.Errorf("failed to get pv %q from cache: %v", pvc.Spec.VolumeName, err) + } + } + if err := volumeutil.CheckNodeAffinity(pv, node.Labels); err != nil { + return false, fmt.Errorf("pv %q node affinity doesn't match node %q: %v", pv.Name, node.Name, err) + } + } + + // Check if pvc is fully bound + if !b.isPVCFullyBound(pvc) { return false, nil } } @@ -452,19 +582,21 @@ func (b *volumeBinder) isPVCBound(namespace, pvcName string) (bool, *v1.Persiste return false, nil, fmt.Errorf("error getting PVC %q: %v", pvcKey, err) } - pvName := pvc.Spec.VolumeName - if pvName != "" { - if metav1.HasAnnotation(pvc.ObjectMeta, annBindCompleted) { - klog.V(5).Infof("PVC %q is fully bound to PV %q", pvcKey, pvName) - return true, pvc, nil + fullyBound := b.isPVCFullyBound(pvc) + if fullyBound { + klog.V(5).Infof("PVC %q is fully bound to PV %q", pvcKey, pvc.Spec.VolumeName) + } else { + if pvc.Spec.VolumeName != "" { + klog.V(5).Infof("PVC %q is not fully bound to PV %q", pvcKey, pvc.Spec.VolumeName) } else { - klog.V(5).Infof("PVC %q is not fully bound to PV %q", pvcKey, pvName) - return false, pvc, nil + klog.V(5).Infof("PVC %q is not bound", pvcKey) } } + return fullyBound, pvc, nil +} - klog.V(5).Infof("PVC %q is not bound", pvcKey) - return false, pvc, nil +func (b *volumeBinder) isPVCFullyBound(pvc *v1.PersistentVolumeClaim) bool { + return pvc.Spec.VolumeName != "" && metav1.HasAnnotation(pvc.ObjectMeta, annBindCompleted) } // arePodVolumesBound returns true if all volumes are fully bound @@ -478,12 +610,12 @@ func (b *volumeBinder) arePodVolumesBound(pod *v1.Pod) bool { return true } -// getPodVolumes returns a pod's PVCs separated into bound (including prebound), unbound with delayed binding, -// and unbound with immediate binding -func (b *volumeBinder) getPodVolumes(pod *v1.Pod) (boundClaims []*v1.PersistentVolumeClaim, unboundClaims []*bindingInfo, unboundClaimsImmediate []*v1.PersistentVolumeClaim, err error) { +// getPodVolumes returns a pod's PVCs separated into bound, unbound with delayed binding (including provisioning) +// and unbound with immediate binding (including prebound) +func (b *volumeBinder) getPodVolumes(pod *v1.Pod) (boundClaims []*v1.PersistentVolumeClaim, unboundClaims []*v1.PersistentVolumeClaim, unboundClaimsImmediate []*v1.PersistentVolumeClaim, err error) { boundClaims = []*v1.PersistentVolumeClaim{} unboundClaimsImmediate = []*v1.PersistentVolumeClaim{} - unboundClaims = []*bindingInfo{} + unboundClaims = []*v1.PersistentVolumeClaim{} for _, vol := range pod.Spec.Volumes { volumeBound, pvc, err := b.isVolumeBound(pod.Namespace, &vol) @@ -496,15 +628,16 @@ func (b *volumeBinder) getPodVolumes(pod *v1.Pod) (boundClaims []*v1.PersistentV if volumeBound { boundClaims = append(boundClaims, pvc) } else { - delayBinding, err := b.ctrl.shouldDelayBinding(pvc) + delayBindingMode, err := IsDelayBindingMode(pvc, b.classLister) if err != nil { return nil, nil, nil, err } // Prebound PVCs are treated as unbound immediate binding - if delayBinding && pvc.Spec.VolumeName == "" { + if delayBindingMode && pvc.Spec.VolumeName == "" { // Scheduler path - unboundClaims = append(unboundClaims, &bindingInfo{pvc: pvc}) + unboundClaims = append(unboundClaims, pvc) } else { + // !delayBindingMode || pvc.Spec.VolumeName != "" // Immediate binding should have already been bound unboundClaimsImmediate = append(unboundClaimsImmediate, pvc) } @@ -535,7 +668,7 @@ func (b *volumeBinder) checkBoundClaims(claims []*v1.PersistentVolumeClaim, node // findMatchingVolumes tries to find matching volumes for given claims, // and return unbound claims for further provision. -func (b *volumeBinder) findMatchingVolumes(pod *v1.Pod, claimsToBind []*bindingInfo, node *v1.Node) (foundMatches bool, unboundClaims []*v1.PersistentVolumeClaim, err error) { +func (b *volumeBinder) findMatchingVolumes(pod *v1.Pod, claimsToBind []*v1.PersistentVolumeClaim, node *v1.Node) (foundMatches bool, matchedClaims []*bindingInfo, unboundClaims []*v1.PersistentVolumeClaim, err error) { podName := getPodName(pod) // Sort all the claims by increasing size request to get the smallest fits sort.Sort(byPVCSize(claimsToBind)) @@ -543,39 +676,34 @@ func (b *volumeBinder) findMatchingVolumes(pod *v1.Pod, claimsToBind []*bindingI chosenPVs := map[string]*v1.PersistentVolume{} foundMatches = true - matchedClaims := []*bindingInfo{} + matchedClaims = []*bindingInfo{} - for _, bindingInfo := range claimsToBind { + for _, pvc := range claimsToBind { // Get storage class name from each PVC storageClassName := "" - storageClass := bindingInfo.pvc.Spec.StorageClassName + storageClass := pvc.Spec.StorageClassName if storageClass != nil { storageClassName = *storageClass } allPVs := b.pvCache.ListPVs(storageClassName) - pvcName := getPVCName(bindingInfo.pvc) + pvcName := getPVCName(pvc) // Find a matching PV - bindingInfo.pv, err = findMatchingVolume(bindingInfo.pvc, allPVs, node, chosenPVs, true) + pv, err := findMatchingVolume(pvc, allPVs, node, chosenPVs, true) if err != nil { - return false, nil, err + return false, nil, nil, err } - if bindingInfo.pv == nil { + if pv == nil { klog.V(4).Infof("No matching volumes for Pod %q, PVC %q on node %q", podName, pvcName, node.Name) - unboundClaims = append(unboundClaims, bindingInfo.pvc) + unboundClaims = append(unboundClaims, pvc) foundMatches = false continue } // matching PV needs to be excluded so we don't select it again - chosenPVs[bindingInfo.pv.Name] = bindingInfo.pv - matchedClaims = append(matchedClaims, bindingInfo) - klog.V(5).Infof("Found matching PV %q for PVC %q on node %q for pod %q", bindingInfo.pv.Name, pvcName, node.Name, podName) - } - - // Mark cache with all the matches for each PVC for this node - if len(matchedClaims) > 0 { - b.podBindingCache.UpdateBindings(pod, node.Name, matchedClaims) + chosenPVs[pv.Name] = pv + matchedClaims = append(matchedClaims, &bindingInfo{pv: pv, pvc: pvc}) + klog.V(5).Infof("Found matching PV %q for PVC %q on node %q for pod %q", pv.Name, pvcName, node.Name, podName) } if foundMatches { @@ -588,31 +716,31 @@ func (b *volumeBinder) findMatchingVolumes(pod *v1.Pod, claimsToBind []*bindingI // checkVolumeProvisions checks given unbound claims (the claims have gone through func // findMatchingVolumes, and do not have matching volumes for binding), and return true // if all of the claims are eligible for dynamic provision. -func (b *volumeBinder) checkVolumeProvisions(pod *v1.Pod, claimsToProvision []*v1.PersistentVolumeClaim, node *v1.Node) (provisionSatisfied bool, err error) { +func (b *volumeBinder) checkVolumeProvisions(pod *v1.Pod, claimsToProvision []*v1.PersistentVolumeClaim, node *v1.Node) (provisionSatisfied bool, provisionedClaims []*v1.PersistentVolumeClaim, err error) { podName := getPodName(pod) - provisionedClaims := []*v1.PersistentVolumeClaim{} + provisionedClaims = []*v1.PersistentVolumeClaim{} for _, claim := range claimsToProvision { pvcName := getPVCName(claim) className := v1helper.GetPersistentVolumeClaimClass(claim) if className == "" { - return false, fmt.Errorf("no class for claim %q", pvcName) + return false, nil, fmt.Errorf("no class for claim %q", pvcName) } - class, err := b.ctrl.classLister.Get(className) + class, err := b.classLister.Get(className) if err != nil { - return false, fmt.Errorf("failed to find storage class %q", className) + return false, nil, fmt.Errorf("failed to find storage class %q", className) } provisioner := class.Provisioner if provisioner == "" || provisioner == notSupportedProvisioner { klog.V(4).Infof("storage class %q of claim %q does not support dynamic provisioning", className, pvcName) - return false, nil + return false, nil, nil } // Check if the node can satisfy the topology requirement in the class if !v1helper.MatchTopologySelectorTerms(class.AllowedTopologies, labels.Set(node.Labels)) { klog.V(4).Infof("Node %q cannot satisfy provisioning topology requirements of claim %q", node.Name, pvcName) - return false, nil + return false, nil, nil } // TODO: Check if capacity of the node domain in the storage class @@ -623,10 +751,7 @@ func (b *volumeBinder) checkVolumeProvisions(pod *v1.Pod, claimsToProvision []*v } klog.V(4).Infof("Provisioning for claims of pod %q that has no matching volumes on node %q ...", podName, node.Name) - // Mark cache with all the PVCs that need provisioning for this node - b.podBindingCache.UpdateProvisionedPVCs(pod, node.Name, provisionedClaims) - - return true, nil + return true, provisionedClaims, nil } func (b *volumeBinder) revertAssumedPVs(bindings []*bindingInfo) { @@ -649,7 +774,7 @@ type bindingInfo struct { pv *v1.PersistentVolume } -type byPVCSize []*bindingInfo +type byPVCSize []*v1.PersistentVolumeClaim func (a byPVCSize) Len() int { return len(a) @@ -660,8 +785,8 @@ func (a byPVCSize) Swap(i, j int) { } func (a byPVCSize) Less(i, j int) bool { - iSize := a[i].pvc.Spec.Resources.Requests[v1.ResourceStorage] - jSize := a[j].pvc.Spec.Resources.Requests[v1.ResourceStorage] + iSize := a[i].Spec.Resources.Requests[v1.ResourceStorage] + jSize := a[j].Spec.Resources.Requests[v1.ResourceStorage] // return true if iSize is less than jSize return iSize.Cmp(jSize) == -1 } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder_cache.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder_cache.go index b95538304ad..96b573afa24 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/scheduler_binder_cache.go @@ -28,22 +28,23 @@ import ( type PodBindingCache interface { // UpdateBindings will update the cache with the given bindings for the // pod and node. - UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo) + UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo, provisionings []*v1.PersistentVolumeClaim) + + // ClearBindings will clear the cached bindings for the given pod and node. + ClearBindings(pod *v1.Pod, node string) // GetBindings will return the cached bindings for the given pod and node. // A nil return value means that the entry was not found. An empty slice // means that no binding operations are needed. GetBindings(pod *v1.Pod, node string) []*bindingInfo - // UpdateProvisionedPVCs will update the cache with the given provisioning decisions - // for the pod and node. - UpdateProvisionedPVCs(pod *v1.Pod, node string, provisionings []*v1.PersistentVolumeClaim) - - // GetProvisionedPVCs will return the cached provisioning decisions for the given pod and node. // A nil return value means that the entry was not found. An empty slice // means that no provisioning operations are needed. GetProvisionedPVCs(pod *v1.Pod, node string) []*v1.PersistentVolumeClaim + // GetDecisions will return all cached decisions for the given pod. + GetDecisions(pod *v1.Pod) nodeDecisions + // DeleteBindings will remove all cached bindings and provisionings for the given pod. // TODO: separate the func if it is needed to delete bindings/provisionings individually DeleteBindings(pod *v1.Pod) @@ -72,6 +73,17 @@ func NewPodBindingCache() PodBindingCache { return &podBindingCache{bindingDecisions: map[string]nodeDecisions{}} } +func (c *podBindingCache) GetDecisions(pod *v1.Pod) nodeDecisions { + c.rwMutex.RLock() + defer c.rwMutex.RUnlock() + podName := getPodName(pod) + decisions, ok := c.bindingDecisions[podName] + if !ok { + return nil + } + return decisions +} + func (c *podBindingCache) DeleteBindings(pod *v1.Pod) { c.rwMutex.Lock() defer c.rwMutex.Unlock() @@ -84,7 +96,7 @@ func (c *podBindingCache) DeleteBindings(pod *v1.Pod) { } } -func (c *podBindingCache) UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo) { +func (c *podBindingCache) UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo, pvcs []*v1.PersistentVolumeClaim) { c.rwMutex.Lock() defer c.rwMutex.Unlock() @@ -97,11 +109,13 @@ func (c *podBindingCache) UpdateBindings(pod *v1.Pod, node string, bindings []*b decision, ok := decisions[node] if !ok { decision = nodeDecision{ - bindings: bindings, + bindings: bindings, + provisionings: pvcs, } VolumeBindingRequestSchedulerBinderCache.WithLabelValues("add").Inc() } else { decision.bindings = bindings + decision.provisionings = pvcs } decisions[node] = decision } @@ -122,27 +136,6 @@ func (c *podBindingCache) GetBindings(pod *v1.Pod, node string) []*bindingInfo { return decision.bindings } -func (c *podBindingCache) UpdateProvisionedPVCs(pod *v1.Pod, node string, pvcs []*v1.PersistentVolumeClaim) { - c.rwMutex.Lock() - defer c.rwMutex.Unlock() - - podName := getPodName(pod) - decisions, ok := c.bindingDecisions[podName] - if !ok { - decisions = nodeDecisions{} - c.bindingDecisions[podName] = decisions - } - decision, ok := decisions[node] - if !ok { - decision = nodeDecision{ - provisionings: pvcs, - } - } else { - decision.provisionings = pvcs - } - decisions[node] = decision -} - func (c *podBindingCache) GetProvisionedPVCs(pod *v1.Pod, node string) []*v1.PersistentVolumeClaim { c.rwMutex.RLock() defer c.rwMutex.RUnlock() @@ -158,3 +151,15 @@ func (c *podBindingCache) GetProvisionedPVCs(pod *v1.Pod, node string) []*v1.Per } return decision.provisionings } + +func (c *podBindingCache) ClearBindings(pod *v1.Pod, node string) { + c.rwMutex.Lock() + defer c.rwMutex.Unlock() + + podName := getPodName(pod) + decisions, ok := c.bindingDecisions[podName] + if !ok { + return + } + delete(decisions, node) +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util.go new file mode 100644 index 00000000000..47e27ab6478 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util.go @@ -0,0 +1,103 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package persistentvolume + +import ( + "fmt" + + "k8s.io/api/core/v1" + storage "k8s.io/api/storage/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/scheme" + storagelisters "k8s.io/client-go/listers/storage/v1" + "k8s.io/client-go/tools/reference" + v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" +) + +// IsDelayBindingMode checks if claim is in delay binding mode. +func IsDelayBindingMode(claim *v1.PersistentVolumeClaim, classLister storagelisters.StorageClassLister) (bool, error) { + className := v1helper.GetPersistentVolumeClaimClass(claim) + if className == "" { + return false, nil + } + + class, err := classLister.Get(className) + if err != nil { + return false, nil + } + + if class.VolumeBindingMode == nil { + return false, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", className) + } + + return *class.VolumeBindingMode == storage.VolumeBindingWaitForFirstConsumer, nil +} + +// GetBindVolumeToClaim returns a new volume which is bound to given claim. In +// addition, it returns a bool which indicates whether we made modification on +// original volume. +func GetBindVolumeToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) (*v1.PersistentVolume, bool, error) { + dirty := false + + // Check if the volume was already bound (either by user or by controller) + shouldSetBoundByController := false + if !IsVolumeBoundToClaim(volume, claim) { + shouldSetBoundByController = true + } + + // The volume from method args can be pointing to watcher cache. We must not + // modify these, therefore create a copy. + volumeClone := volume.DeepCopy() + + // Bind the volume to the claim if it is not bound yet + if volume.Spec.ClaimRef == nil || + volume.Spec.ClaimRef.Name != claim.Name || + volume.Spec.ClaimRef.Namespace != claim.Namespace || + volume.Spec.ClaimRef.UID != claim.UID { + + claimRef, err := reference.GetReference(scheme.Scheme, claim) + if err != nil { + return nil, false, fmt.Errorf("Unexpected error getting claim reference: %v", err) + } + volumeClone.Spec.ClaimRef = claimRef + dirty = true + } + + // Set annBoundByController if it is not set yet + if shouldSetBoundByController && !metav1.HasAnnotation(volumeClone.ObjectMeta, annBoundByController) { + metav1.SetMetaDataAnnotation(&volumeClone.ObjectMeta, annBoundByController, "yes") + dirty = true + } + + return volumeClone, dirty, nil +} + +// IsVolumeBoundToClaim returns true, if given volume is pre-bound or bound +// to specific claim. Both claim.Name and claim.Namespace must be equal. +// If claim.UID is present in volume.Spec.ClaimRef, it must be equal too. +func IsVolumeBoundToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) bool { + if volume.Spec.ClaimRef == nil { + return false + } + if claim.Name != volume.Spec.ClaimRef.Name || claim.Namespace != volume.Spec.ClaimRef.Namespace { + return false + } + if volume.Spec.ClaimRef.UID != "" && claim.UID != volume.Spec.ClaimRef.UID { + return false + } + return true +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/volume_host.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/volume_host.go index 20664724194..5c41ea662ca 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/volume_host.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/persistentvolume/volume_host.go @@ -25,10 +25,10 @@ import ( "k8s.io/apimachinery/pkg/types" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" vol "k8s.io/kubernetes/pkg/volume" + "k8s.io/kubernetes/pkg/volume/util/subpath" ) // VolumeHost interface implementation for PersistentVolumeController. @@ -127,7 +127,7 @@ func (ctrl *PersistentVolumeController) GetEventRecorder() record.EventRecorder return ctrl.eventRecorder } -func (ctrl *PersistentVolumeController) GetCSIClient() csiclientset.Interface { - // No volume plugin needs csi.storage.k8s.io client in PV controller. +func (ctrl *PersistentVolumeController) GetSubpather() subpath.Interface { + // No volume plugin needs Subpaths in PV controller. return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/OWNERS b/vendor/k8s.io/kubernetes/pkg/credentialprovider/OWNERS index 2e8f8a1c050..2ad314139c3 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - erictune diff --git a/vendor/k8s.io/kubernetes/pkg/customers.yaml b/vendor/k8s.io/kubernetes/pkg/customers.yaml deleted file mode 100644 index 98111a0c856..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/customers.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - annotations: - name: standard-rdi-hdd-pool -parameters: - adminId: sam - adminSecretName: ceph-sec-admin-rdi - adminSecretNamespace: sam-system - monitors: 10.253.101.170:6789,10.253.101.154:6789,10.253.101.186:6789 - pool: sam - userId: sam - userSecretName: ceph-sec-user-rdi -provisioner: kubernetes.io/rbd -reclaimPolicy: Retain -volumeBindingMode: Immediate diff --git a/vendor/k8s.io/kubernetes/pkg/features/BUILD b/vendor/k8s.io/kubernetes/pkg/features/BUILD index b0c1c85443c..f652b7d3ce0 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/features/BUILD @@ -13,6 +13,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/cloud-provider/features:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/features/OWNERS b/vendor/k8s.io/kubernetes/pkg/features/OWNERS index fe7b0144e0c..05b08249aed 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/features/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - feature-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index c6baa4e648c..4511bf23064 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -77,6 +77,8 @@ const ( // owner: @msau42 // alpha: v1.7 + // beta: v1.10 + // ga: v1.14 // // A new volume type that supports local disks on a node. PersistentLocalVolumes utilfeature.Feature = "PersistentLocalVolumes" @@ -100,6 +102,8 @@ const ( // owner: @bsalamat // alpha: v1.8 + // beta: v1.11 + // GA: v1.14 // // Add priority to pods. Priority affects scheduling and preemption of pods. PodPriority utilfeature.Feature = "PodPriority" @@ -108,24 +112,19 @@ const ( // beta: v1.12 // // Taint nodes based on their condition status for 'NetworkUnavailable', - // 'MemoryPressure', 'OutOfDisk' and 'DiskPressure'. + // 'MemoryPressure', 'PIDPressure' and 'DiskPressure'. TaintNodesByCondition utilfeature.Feature = "TaintNodesByCondition" - // owner: @jsafrane - // GA: v1.12 - // - // Note: This feature gate is unconditionally enabled in v1.13 and will be removed in v1.14. - // Enable mount propagation of volumes. - MountPropagation utilfeature.Feature = "MountPropagation" - // owner: @ConnorDoyle // alpha: v1.8 + // beta: v1.10 // // Alternative container-level CPU affinity policies. CPUManager utilfeature.Feature = "CPUManager" // owner: @derekwaynecarr // beta: v1.10 + // GA: v1.14 // // Enable pods to consume pre-allocated huge pages of varying page sizes HugePages utilfeature.Feature = "HugePages" @@ -148,8 +147,20 @@ const ( // Enable mount/attachment of Container Storage Interface (CSI) backed PVs CSIPersistentVolume utilfeature.Feature = "CSIPersistentVolume" + // owner: @saad-ali + // alpha: v1.12 + // beta: v1.14 + // Enable all logic related to the CSIDriver API object in storage.k8s.io + CSIDriverRegistry utilfeature.Feature = "CSIDriverRegistry" + + // owner: @verult + // alpha: v1.12 + // beta: v1.14 + // Enable all logic related to the CSINode API object in storage.k8s.io + CSINodeInfo utilfeature.Feature = "CSINodeInfo" + // owner @MrHohn - // beta: v1.10 + // GA: v1.14 // // Support configurable pod DNS parameters. CustomPodDNS utilfeature.Feature = "CustomPodDNS" @@ -173,6 +184,13 @@ const ( // Implement IPVS-based in-cluster service load balancing SupportIPVSProxyMode utilfeature.Feature = "SupportIPVSProxyMode" + // owner: @dims, @derekwaynecarr + // alpha: v1.10 + // beta: v1.14 + // + // Implement support for limiting pids in pods + SupportPodPidsLimit utilfeature.Feature = "SupportPodPidsLimit" + // owner: @k82cn // beta: v1.12 // @@ -197,14 +215,8 @@ const ( // Enable container log rotation for cri container runtime CRIContainerLogRotation utilfeature.Feature = "CRIContainerLogRotation" - // owner: @verult - // GA: v1.13 - // - // Enables the regional PD feature on GCE. - GCERegionalPersistentDisk utilfeature.Feature = "GCERegionalPersistentDisk" - // owner: @krmayankk - // alpha: v1.10 + // beta: v1.14 // // Enables control over the primary group ID of containers' init processes. RunAsGroup utilfeature.Feature = "RunAsGroup" @@ -224,9 +236,9 @@ const ( AttachVolumeLimit utilfeature.Feature = "AttachVolumeLimit" // owner @freehan - // beta: v1.11 + // GA: v1.14 // - // Support Pod Ready++ + // Allow user to specify additional conditions to be evaluated for Pod readiness. PodReadinessGates utilfeature.Feature = "PodReadinessGates" // owner: @vikaschoudhary16 @@ -242,62 +254,88 @@ const ( // // Enable resource quota scope selectors ResourceQuotaScopeSelectors utilfeature.Feature = "ResourceQuotaScopeSelectors" + + // owner: @vladimirvivien + // alpha: v1.11 + // beta: v1.14 + // + // Enables CSI to use raw block storage volumes + CSIBlockVolume utilfeature.Feature = "CSIBlockVolume" + + // owner: @tallclair + // alpha: v1.12 + // beta: v1.14 + // + // Enables RuntimeClass, for selecting between multiple runtimes to run a pod. + RuntimeClass utilfeature.Feature = "RuntimeClass" + + // owner: @mtaufen + // alpha: v1.12 + // + // Kubelet uses the new Lease API to report node heartbeats, + // (Kube) Node Lifecycle Controller uses these heartbeats as a node health signal. + NodeLease utilfeature.Feature = "NodeLease" ) func init() { - utilfeature.DefaultFeatureGate.Add(defaultKubernetesFeatureGates) + utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) } // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. // To add a new feature, define a key for it above and add it here. The features will be // available throughout Kubernetes binaries. var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ - AppArmor: {Default: true, PreRelease: utilfeature.Beta}, - DynamicKubeletConfig: {Default: true, PreRelease: utilfeature.Beta}, + AppArmor: {Default: true, PreRelease: utilfeature.Beta}, + DynamicKubeletConfig: {Default: true, PreRelease: utilfeature.Beta}, ExperimentalHostUserNamespaceDefaultingGate: {Default: false, PreRelease: utilfeature.Beta}, - DevicePlugins: {Default: true, PreRelease: utilfeature.Beta}, - TaintBasedEvictions: {Default: true, PreRelease: utilfeature.Beta}, - RotateKubeletServerCertificate: {Default: true, PreRelease: utilfeature.Beta}, - RotateKubeletClientCertificate: {Default: true, PreRelease: utilfeature.Beta}, - PersistentLocalVolumes: {Default: true, PreRelease: utilfeature.Beta}, - LocalStorageCapacityIsolation: {Default: true, PreRelease: utilfeature.Beta}, - HugePages: {Default: true, PreRelease: utilfeature.Beta}, - Sysctls: {Default: true, PreRelease: utilfeature.Beta}, - PodShareProcessNamespace: {Default: true, PreRelease: utilfeature.Beta}, - PodPriority: {Default: true, PreRelease: utilfeature.Beta}, - TaintNodesByCondition: {Default: true, PreRelease: utilfeature.Beta}, - MountPropagation: {Default: true, PreRelease: utilfeature.GA}, - ExpandPersistentVolumes: {Default: true, PreRelease: utilfeature.Beta}, - AttachVolumeLimit: {Default: true, PreRelease: utilfeature.Beta}, - CPUManager: {Default: true, PreRelease: utilfeature.Beta}, - VolumeScheduling: {Default: true, PreRelease: utilfeature.GA}, - CSIPersistentVolume: {Default: true, PreRelease: utilfeature.GA}, - CustomPodDNS: {Default: true, PreRelease: utilfeature.Beta}, - BlockVolume: {Default: true, PreRelease: utilfeature.Beta}, - StorageObjectInUseProtection: {Default: true, PreRelease: utilfeature.GA}, - SupportIPVSProxyMode: {Default: true, PreRelease: utilfeature.GA}, - ScheduleDaemonSetPods: {Default: true, PreRelease: utilfeature.Beta}, - TokenRequest: {Default: true, PreRelease: utilfeature.Beta}, - TokenRequestProjection: {Default: true, PreRelease: utilfeature.Beta}, - CRIContainerLogRotation: {Default: true, PreRelease: utilfeature.Beta}, - GCERegionalPersistentDisk: {Default: true, PreRelease: utilfeature.GA}, - RunAsGroup: {Default: true, PreRelease: utilfeature.Beta}, - VolumeSubpath: {Default: true, PreRelease: utilfeature.GA}, - PodReadinessGates: {Default: true, PreRelease: utilfeature.Beta}, - KubeletPluginsWatcher: {Default: true, PreRelease: utilfeature.GA}, - ResourceQuotaScopeSelectors: {Default: true, PreRelease: utilfeature.Beta}, + DevicePlugins: {Default: true, PreRelease: utilfeature.Beta}, + TaintBasedEvictions: {Default: true, PreRelease: utilfeature.Beta}, + RotateKubeletServerCertificate: {Default: true, PreRelease: utilfeature.Beta}, + RotateKubeletClientCertificate: {Default: true, PreRelease: utilfeature.Beta}, + PersistentLocalVolumes: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.17 + LocalStorageCapacityIsolation: {Default: true, PreRelease: utilfeature.Beta}, + HugePages: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + Sysctls: {Default: true, PreRelease: utilfeature.Beta}, + PodShareProcessNamespace: {Default: true, PreRelease: utilfeature.Beta}, + PodPriority: {Default: true, PreRelease: utilfeature.GA}, + TaintNodesByCondition: {Default: true, PreRelease: utilfeature.Beta}, + ExpandPersistentVolumes: {Default: true, PreRelease: utilfeature.Beta}, + AttachVolumeLimit: {Default: true, PreRelease: utilfeature.Beta}, + CPUManager: {Default: true, PreRelease: utilfeature.Beta}, + VolumeScheduling: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + CSIPersistentVolume: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + CSIDriverRegistry: {Default: true, PreRelease: utilfeature.Beta}, + CSINodeInfo: {Default: true, PreRelease: utilfeature.Beta}, + CustomPodDNS: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + BlockVolume: {Default: true, PreRelease: utilfeature.Beta}, + StorageObjectInUseProtection: {Default: true, PreRelease: utilfeature.GA}, + SupportIPVSProxyMode: {Default: true, PreRelease: utilfeature.GA}, + SupportPodPidsLimit: {Default: true, PreRelease: utilfeature.Beta}, + ScheduleDaemonSetPods: {Default: true, PreRelease: utilfeature.Beta}, + TokenRequest: {Default: true, PreRelease: utilfeature.Beta}, + TokenRequestProjection: {Default: true, PreRelease: utilfeature.Beta}, + CRIContainerLogRotation: {Default: true, PreRelease: utilfeature.Beta}, + RunAsGroup: {Default: true, PreRelease: utilfeature.Beta}, + VolumeSubpath: {Default: true, PreRelease: utilfeature.GA}, + PodReadinessGates: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + KubeletPluginsWatcher: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.16 + ResourceQuotaScopeSelectors: {Default: true, PreRelease: utilfeature.Beta}, + CSIBlockVolume: {Default: true, PreRelease: utilfeature.Beta}, + RuntimeClass: {Default: true, PreRelease: utilfeature.Beta}, + NodeLease: {Default: true, PreRelease: utilfeature.Beta}, // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: genericfeatures.StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, + genericfeatures.ValidateProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, genericfeatures.AdvancedAuditing: {Default: true, PreRelease: utilfeature.GA}, genericfeatures.APIListChunking: {Default: true, PreRelease: utilfeature.Beta}, genericfeatures.DryRun: {Default: true, PreRelease: utilfeature.Beta}, // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: - apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, - apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, + apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, + apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, // features that enable backwards compatibility but are scheduled to be removed // ... diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/BUILD b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/BUILD index ef4c4b1e22d..b66f74d9ae1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/BUILD @@ -14,7 +14,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubeapiserver", deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/apis/admissionregistration:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/core:go_default_library", @@ -23,7 +22,7 @@ go_library( "//pkg/apis/networking:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/apis/storage:go_default_library", - "//pkg/kubeapiserver/options:go_default_library", + "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", @@ -31,6 +30,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/resourceconfig:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/OWNERS index 3196f46afd9..13d15cab5f3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - lavalamp @@ -8,6 +10,7 @@ reviewers: - lavalamp - liggitt - sttts +- cheftako labels: - sig/api-machinery - area/apiserver diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/BUILD b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/BUILD index abe660e7177..ba6185120e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/BUILD @@ -19,7 +19,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library", - "//staging/src/k8s.io/client-go/discovery/cached:go_default_library", + "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/restmapper:go_default_library", @@ -43,10 +43,7 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/kubeapiserver/admission/util:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go index a47e4559377..52788434eab 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go @@ -29,7 +29,7 @@ import ( "k8s.io/apiserver/pkg/server" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/util/webhook" - cacheddiscovery "k8s.io/client-go/discovery/cached" + cacheddiscovery "k8s.io/client-go/discovery/cached/memory" externalinformers "k8s.io/client-go/informers" "k8s.io/client-go/rest" "k8s.io/client-go/restmapper" diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/BUILD b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/BUILD deleted file mode 100644 index 3d24fc3e0da..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["initializer.go"], - importpath = "k8s.io/kubernetes/pkg/kubeapiserver/admission/util", - deps = [ - "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/initialization:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/initializer.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/initializer.go deleted file mode 100644 index d20ba439c5a..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/util/initializer.go +++ /dev/null @@ -1,79 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package util - -import ( - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/util/initialization" - "k8s.io/apiserver/pkg/admission" -) - -// IsUpdatingInitializedObject returns true if the operation is trying to update -// an already initialized object. -func IsUpdatingInitializedObject(a admission.Attributes) (bool, error) { - if a.GetOperation() != admission.Update { - return false, nil - } - oldObj := a.GetOldObject() - accessor, err := meta.Accessor(oldObj) - if err != nil { - return false, err - } - if initialization.IsInitialized(accessor.GetInitializers()) { - return true, nil - } - return false, nil -} - -// IsUpdatingUninitializedObject returns true if the operation is trying to -// update an object that is not initialized yet. -func IsUpdatingUninitializedObject(a admission.Attributes) (bool, error) { - if a.GetOperation() != admission.Update { - return false, nil - } - oldObj := a.GetOldObject() - accessor, err := meta.Accessor(oldObj) - if err != nil { - return false, err - } - if initialization.IsInitialized(accessor.GetInitializers()) { - return false, nil - } - return true, nil -} - -// IsInitializationCompletion returns true if the operation removes all pending -// initializers. -func IsInitializationCompletion(a admission.Attributes) (bool, error) { - if a.GetOperation() != admission.Update { - return false, nil - } - oldObj := a.GetOldObject() - oldInitialized, err := initialization.IsObjectInitialized(oldObj) - if err != nil { - return false, err - } - if oldInitialized { - return false, nil - } - newObj := a.GetObject() - newInitialized, err := initialization.IsObjectInitialized(newObj) - if err != nil { - return false, err - } - return newInitialized, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/BUILD b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/BUILD index 399657c211f..d9140ba9c0e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/BUILD @@ -31,6 +31,7 @@ go_library( "//staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook:go_default_library", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/OWNERS index c607d2aa8c5..3e05d309be5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go index 58e2022da52..03742eae93e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go @@ -20,8 +20,10 @@ import ( "time" "k8s.io/apiserver/pkg/authentication/authenticator" + "k8s.io/apiserver/pkg/authentication/authenticatorfactory" "k8s.io/apiserver/pkg/authentication/group" "k8s.io/apiserver/pkg/authentication/request/bearertoken" + "k8s.io/apiserver/pkg/authentication/request/headerrequest" "k8s.io/apiserver/pkg/authentication/request/union" "k8s.io/apiserver/pkg/authentication/request/websocket" "k8s.io/apiserver/pkg/authentication/request/x509" @@ -32,8 +34,10 @@ import ( "k8s.io/apiserver/plugin/pkg/authenticator/password/passwordfile" "k8s.io/apiserver/plugin/pkg/authenticator/request/basicauth" "k8s.io/apiserver/plugin/pkg/authenticator/token/webhook" + // Initialize all known client auth plugins. certutil "k8s.io/client-go/util/cert" + "k8s.io/client-go/util/keyutil" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/serviceaccount" ) @@ -53,6 +57,8 @@ type Config struct { TokenSuccessCacheTTL time.Duration TokenFailureCacheTTL time.Duration + RequestHeaderConfig *authenticatorfactory.RequestHeaderConfig + // TODO, this is the only non-serializable part of the entire config. Factor it out into a clientconfig ServiceAccountTokenGetter serviceaccount.ServiceAccountTokenGetter } @@ -63,6 +69,22 @@ func (config Config) New() (authenticator.Request, error) { var authenticators []authenticator.Request var tokenAuthenticators []authenticator.Token + // front-proxy, BasicAuth methods, local first, then remote + // Add the front proxy authenticator if requested + if config.RequestHeaderConfig != nil { + requestHeaderAuthenticator, err := headerrequest.NewSecure( + config.RequestHeaderConfig.ClientCA, + config.RequestHeaderConfig.AllowedClientNames, + config.RequestHeaderConfig.UsernameHeaders, + config.RequestHeaderConfig.GroupHeaders, + config.RequestHeaderConfig.ExtraHeaderPrefixes, + ) + if err != nil { + return nil, err + } + authenticators = append(authenticators, authenticator.WrapAudienceAgnosticRequest(config.APIAudiences, requestHeaderAuthenticator)) + } + // basic auth if len(config.BasicAuthFile) > 0 { basicAuth, err := newAuthenticatorFromBasicAuthFile(config.BasicAuthFile) @@ -134,7 +156,7 @@ func (config Config) New() (authenticator.Request, error) { // IsValidServiceAccountKeyFile returns true if a valid public RSA key can be read from the given file func IsValidServiceAccountKeyFile(file string) bool { - _, err := certutil.PublicKeysFromFile(file) + _, err := keyutil.PublicKeysFromFile(file) return err == nil } @@ -162,7 +184,7 @@ func newAuthenticatorFromTokenFile(tokenAuthFile string) (authenticator.Token, e func newLegacyServiceAccountAuthenticator(keyfiles []string, lookup bool, apiAudiences authenticator.Audiences, serviceAccountGetter serviceaccount.ServiceAccountTokenGetter) (authenticator.Token, error) { allPublicKeys := []interface{}{} for _, keyfile := range keyfiles { - publicKeys, err := certutil.PublicKeysFromFile(keyfile) + publicKeys, err := keyutil.PublicKeysFromFile(keyfile) if err != nil { return nil, err } @@ -177,7 +199,7 @@ func newLegacyServiceAccountAuthenticator(keyfiles []string, lookup bool, apiAud func newServiceAccountAuthenticator(iss string, keyfiles []string, apiAudiences authenticator.Audiences, serviceAccountGetter serviceaccount.ServiceAccountTokenGetter) (authenticator.Token, error) { allPublicKeys := []interface{}{} for _, keyfile := range keyfiles { - publicKeys, err := certutil.PublicKeysFromFile(keyfile) + publicKeys, err := keyutil.PublicKeysFromFile(keyfile) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/config.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/config.go index c8ec9838cdc..ee6c0892174 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authorizer/config.go @@ -72,7 +72,7 @@ func (config Config) New() (authorizer.Authorizer, authorizer.RuleResolver, erro config.VersionedInformerFactory.Core().V1().Nodes(), config.VersionedInformerFactory.Core().V1().Pods(), config.VersionedInformerFactory.Core().V1().PersistentVolumes(), - config.VersionedInformerFactory.Storage().V1beta1().VolumeAttachments(), + config.VersionedInformerFactory.Storage().V1().VolumeAttachments(), ) nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), bootstrappolicy.NodeRules()) authorizers = append(authorizers, nodeAuthorizer) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/default_storage_factory_builder.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/default_storage_factory_builder.go index 22acde6a1c5..0ab27fbd851 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/default_storage_factory_builder.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/default_storage_factory_builder.go @@ -19,7 +19,6 @@ package kubeapiserver import ( "strings" - "fmt" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" serveroptions "k8s.io/apiserver/pkg/server/options" @@ -27,15 +26,15 @@ import ( "k8s.io/apiserver/pkg/server/resourceconfig" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/apiserver/pkg/storage/storagebackend" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/admissionregistration" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/apis/policy" apisstorage "k8s.io/kubernetes/pkg/apis/storage" - kubeapiserveroptions "k8s.io/kubernetes/pkg/kubeapiserver/options" + "k8s.io/kubernetes/pkg/features" ) // SpecialDefaultResourcePrefixes are prefixes compiled into Kubernetes. @@ -50,14 +49,23 @@ var SpecialDefaultResourcePrefixes = map[schema.GroupResource]string{ } func NewStorageFactoryConfig() *StorageFactoryConfig { + + resources := []schema.GroupVersionResource{ + batch.Resource("cronjobs").WithVersion("v1beta1"), + } + // add csinodes if CSINodeInfo feature gate is enabled + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + resources = append(resources, apisstorage.Resource("csinodes").WithVersion("v1beta1")) + } + // add csidrivers if CSIDriverRegistry feature gate is enabled + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + resources = append(resources, apisstorage.Resource("csidrivers").WithVersion("v1beta1")) + } + return &StorageFactoryConfig{ - Serializer: legacyscheme.Codecs, - DefaultResourceEncoding: serverstorage.NewDefaultResourceEncodingConfig(legacyscheme.Scheme), - ResourceEncodingOverrides: []schema.GroupVersionResource{ - batch.Resource("cronjobs").WithVersion("v1beta1"), - apisstorage.Resource("volumeattachments").WithVersion("v1beta1"), - admissionregistration.Resource("initializerconfigurations").WithVersion("v1alpha1"), - }, + Serializer: legacyscheme.Codecs, + DefaultResourceEncoding: serverstorage.NewDefaultResourceEncodingConfig(legacyscheme.Scheme), + ResourceEncodingOverrides: resources, } } @@ -67,18 +75,12 @@ type StorageFactoryConfig struct { DefaultResourceEncoding *serverstorage.DefaultResourceEncodingConfig DefaultStorageMediaType string Serializer runtime.StorageSerializer - StorageEncodingOverrides map[string]schema.GroupVersion ResourceEncodingOverrides []schema.GroupVersionResource EtcdServersOverrides []string EncryptionProviderConfigFilepath string } -func (c *StorageFactoryConfig) Complete(etcdOptions *serveroptions.EtcdOptions, serializationOptions *kubeapiserveroptions.StorageSerializationOptions) (*completedStorageFactoryConfig, error) { - storageGroupsToEncodingVersion, err := serializationOptions.StorageGroupsToEncodingVersion() - if err != nil { - return nil, fmt.Errorf("error generating storage version map: %s", err) - } - c.StorageEncodingOverrides = storageGroupsToEncodingVersion +func (c *StorageFactoryConfig) Complete(etcdOptions *serveroptions.EtcdOptions) (*completedStorageFactoryConfig, error) { c.StorageConfig = etcdOptions.StorageConfig c.DefaultStorageMediaType = etcdOptions.DefaultStorageMediaType c.EtcdServersOverrides = etcdOptions.EtcdServersOverrides @@ -91,8 +93,7 @@ type completedStorageFactoryConfig struct { } func (c *completedStorageFactoryConfig) New() (*serverstorage.DefaultStorageFactory, error) { - resourceEncodingConfig := resourceconfig.MergeGroupEncodingConfigs(c.DefaultResourceEncoding, c.StorageEncodingOverrides) - resourceEncodingConfig = resourceconfig.MergeResourceEncodingConfigs(resourceEncodingConfig, c.ResourceEncodingOverrides) + resourceEncodingConfig := resourceconfig.MergeResourceEncodingConfigs(c.DefaultResourceEncoding, c.ResourceEncodingOverrides) storageFactory := serverstorage.NewDefaultStorageFactory( c.StorageConfig, c.DefaultStorageMediaType, @@ -106,6 +107,7 @@ func (c *completedStorageFactoryConfig) New() (*serverstorage.DefaultStorageFact storageFactory.AddCohabitatingResources(apps.Resource("daemonsets"), extensions.Resource("daemonsets")) storageFactory.AddCohabitatingResources(apps.Resource("replicasets"), extensions.Resource("replicasets")) storageFactory.AddCohabitatingResources(policy.Resource("podsecuritypolicies"), extensions.Resource("podsecuritypolicies")) + storageFactory.AddCohabitatingResources(extensions.Resource("ingresses"), networking.Resource("ingresses")) for _, override := range c.EtcdServersOverrides { tokens := strings.Split(override, "#") diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/doc.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/doc.go index aa18901607b..fefb1cc6ebe 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// The kubapiserver package holds code that is common to both the kube-apiserver +// The kubeapiserver package holds code that is common to both the kube-apiserver // and the federation-apiserver, but isn't part of a generic API server. // For instance, the non-delegated authorization options are used by those two // servers, but no generic API server is likely to use them. diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD index 11d52acbf27..37b8328b53d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD @@ -16,12 +16,9 @@ go_library( "options.go", "plugins.go", "serving.go", - "storage_versions.go", ], importpath = "k8s.io/kubernetes/pkg/kubeapiserver/options", deps = [ - "//pkg/api/legacyscheme:go_default_library", - "//pkg/cloudprovider/providers:go_default_library", "//pkg/features:go_default_library", "//pkg/kubeapiserver/authenticator:go_default_library", "//pkg/kubeapiserver/authorizer:go_default_library", @@ -53,12 +50,9 @@ go_library( "//plugin/pkg/admission/storage/persistentvolume/resize:go_default_library", "//plugin/pkg/admission/storage/storageclass/setdefault:go_default_library", "//plugin/pkg/admission/storage/storageobjectinuseprotection:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/admission/plugin/initialization:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating:go_default_library", @@ -66,9 +60,9 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -93,13 +87,11 @@ go_test( "admission_test.go", "authentication_test.go", "authorization_test.go", - "storage_versions_test.go", ], embed = [":go_default_library"], deps = [ "//pkg/kubeapiserver/authenticator:go_default_library", "//pkg/kubeapiserver/authorizer/modes:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/admission.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/admission.go index 15f5d954921..dfad5aa0bcb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/admission.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/admission.go @@ -22,7 +22,6 @@ import ( "github.com/spf13/pflag" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/server" @@ -108,7 +107,6 @@ func (a *AdmissionOptions) ApplyTo( c *server.Config, informers informers.SharedInformerFactory, kubeAPIServerClientConfig *rest.Config, - scheme *runtime.Scheme, pluginInitializers ...admission.PluginInitializer, ) error { if a == nil { @@ -120,7 +118,7 @@ func (a *AdmissionOptions) ApplyTo( a.GenericAdmission.EnablePlugins, a.GenericAdmission.DisablePlugins = computePluginNames(a.PluginNames, a.GenericAdmission.RecommendedPluginOrder) } - return a.GenericAdmission.ApplyTo(c, informers, kubeAPIServerClientConfig, scheme, pluginInitializers...) + return a.GenericAdmission.ApplyTo(c, informers, kubeAPIServerClientConfig, pluginInitializers...) } // explicitly disable all plugins that are not in the enabled list diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/authentication.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/authentication.go index 3f305ea47bc..3b6d003752e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/authentication.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/authentication.go @@ -27,12 +27,15 @@ import ( "k8s.io/apiserver/pkg/authentication/authenticator" genericapiserver "k8s.io/apiserver/pkg/server" + genericoptions "k8s.io/apiserver/pkg/server/options" kubeauthenticator "k8s.io/kubernetes/pkg/kubeapiserver/authenticator" ) type BuiltInAuthenticationOptions struct { APIAudiences []string + ClientCert *genericoptions.ClientCertAuthenticationOptions PasswordFile *PasswordFileAuthenticationOptions + RequestHeader *genericoptions.RequestHeaderAuthenticationOptions ServiceAccounts *ServiceAccountAuthenticationOptions TokenFile *TokenFileAuthenticationOptions WebHook *WebHookAuthenticationOptions @@ -70,17 +73,29 @@ func NewBuiltInAuthenticationOptions() *BuiltInAuthenticationOptions { func (s *BuiltInAuthenticationOptions) WithAll() *BuiltInAuthenticationOptions { return s. + WithClientCert(). WithPasswordFile(). + WithRequestHeader(). WithServiceAccounts(). WithTokenFile(). WithWebHook() } +func (s *BuiltInAuthenticationOptions) WithClientCert() *BuiltInAuthenticationOptions { + s.ClientCert = &genericoptions.ClientCertAuthenticationOptions{} + return s +} + func (s *BuiltInAuthenticationOptions) WithPasswordFile() *BuiltInAuthenticationOptions { s.PasswordFile = &PasswordFileAuthenticationOptions{} return s } +func (s *BuiltInAuthenticationOptions) WithRequestHeader() *BuiltInAuthenticationOptions { + s.RequestHeader = &genericoptions.RequestHeaderAuthenticationOptions{} + return s +} + func (s *BuiltInAuthenticationOptions) WithServiceAccounts() *BuiltInAuthenticationOptions { s.ServiceAccounts = &ServiceAccountAuthenticationOptions{Lookup: true} return s @@ -118,12 +133,20 @@ func (s *BuiltInAuthenticationOptions) AddFlags(fs *pflag.FlagSet) { "--service-account-issuer flag is configured and this flag is not, this field "+ "defaults to a single element list containing the issuer URL .") + if s.ClientCert != nil { + s.ClientCert.AddFlags(fs) + } + if s.PasswordFile != nil { fs.StringVar(&s.PasswordFile.BasicAuthFile, "basic-auth-file", s.PasswordFile.BasicAuthFile, ""+ "If set, the file that will be used to admit requests to the secure port of the API server "+ "via http basic authentication.") } + if s.RequestHeader != nil { + s.RequestHeader.AddFlags(fs) + } + if s.ServiceAccounts != nil { fs.StringArrayVar(&s.ServiceAccounts.KeyFiles, "service-account-key-file", s.ServiceAccounts.KeyFiles, ""+ "File containing PEM-encoded x509 RSA or ECDSA private or public keys, used to verify "+ @@ -172,12 +195,19 @@ func (s *BuiltInAuthenticationOptions) ToAuthenticationConfig() kubeauthenticato TokenFailureCacheTTL: s.TokenFailureCacheTTL, } + if s.ClientCert != nil { + ret.ClientCAFile = s.ClientCert.ClientCA + } + if s.PasswordFile != nil { ret.BasicAuthFile = s.PasswordFile.BasicAuthFile } - ret.APIAudiences = s.APIAudiences + if s.RequestHeader != nil { + ret.RequestHeaderConfig = s.RequestHeader.ToAuthenticationRequestHeaderConfig() + } + ret.APIAudiences = s.APIAudiences if s.ServiceAccounts != nil { if s.ServiceAccounts.Issuer != "" && len(s.APIAudiences) == 0 { ret.APIAudiences = authenticator.Audiences{s.ServiceAccounts.Issuer} @@ -213,6 +243,18 @@ func (o *BuiltInAuthenticationOptions) ApplyTo(c *genericapiserver.Config) error return nil } + var err error + if o.ClientCert != nil { + if err = c.Authentication.ApplyClientCert(o.ClientCert.ClientCA, c.SecureServing); err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + } + if o.RequestHeader != nil { + if err = c.Authentication.ApplyClientCert(o.RequestHeader.ClientCAFile, c.SecureServing); err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + } + c.Authentication.SupportsBasicAuth = o.PasswordFile != nil && len(o.PasswordFile.BasicAuthFile) > 0 c.Authentication.APIAudiences = o.APIAudiences diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/options.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/options.go index f7e6eedaf71..e38bd99996d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/options.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/options.go @@ -27,3 +27,5 @@ var DefaultServiceNodePortRange = utilnet.PortRange{Base: 30000, Size: 2768} // DefaultServiceIPCIDR is a CIDR notation of IP range from which to allocate service cluster IPs var DefaultServiceIPCIDR net.IPNet = net.IPNet{IP: net.ParseIP("10.0.0.0"), Mask: net.CIDRMask(24, 32)} + +const DefaultEtcdPathPrefix = "/registry" diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/plugins.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/plugins.go index cc0407dd734..100045bd38d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/plugins.go @@ -23,6 +23,7 @@ import ( // Admission policies "k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds" "k8s.io/kubernetes/plugin/pkg/admission/limitranger" + "k8s.io/kubernetes/plugin/pkg/admission/noderestriction" "k8s.io/kubernetes/plugin/pkg/admission/nodetaint" podpriority "k8s.io/kubernetes/plugin/pkg/admission/priority" "k8s.io/kubernetes/plugin/pkg/admission/resourcequota" @@ -41,17 +42,18 @@ import ( // AllOrderedPlugins is the list of all the plugins in order. var AllOrderedPlugins = []string{ - lifecycle.PluginName, // NamespaceLifecycle - limitranger.PluginName, // LimitRanger - serviceaccount.PluginName, // ServiceAccount - nodetaint.PluginName, // TaintNodesByCondition - podpriority.PluginName, // Priority - defaulttolerationseconds.PluginName, // DefaultTolerationSeconds - setdefault.PluginName, // DefaultStorageClass - resize.PluginName, // PersistentVolumeClaimResize - mutatingwebhook.PluginName, // MutatingAdmissionWebhook - validatingwebhook.PluginName, // ValidatingAdmissionWebhook - resourcequota.PluginName, // ResourceQuota + lifecycle.PluginName, // NamespaceLifecycle + limitranger.PluginName, // LimitRanger + serviceaccount.PluginName, // ServiceAccount + noderestriction.PluginName, // NodeRestriction + nodetaint.PluginName, // TaintNodesByCondition + podpriority.PluginName, // Priority + defaulttolerationseconds.PluginName, // DefaultTolerationSeconds + setdefault.PluginName, // DefaultStorageClass + resize.PluginName, // PersistentVolumeClaimResize + mutatingwebhook.PluginName, // MutatingAdmissionWebhook + validatingwebhook.PluginName, // ValidatingAdmissionWebhook + resourcequota.PluginName, // ResourceQuota } // RegisterAllAdmissionPlugins registers all admission plugins and @@ -59,6 +61,7 @@ var AllOrderedPlugins = []string{ func RegisterAllAdmissionPlugins(plugins *admission.Plugins) { defaulttolerationseconds.Register(plugins) limitranger.Register(plugins) + noderestriction.Register(plugins) nodetaint.Register(plugins) resourcequota.Register(plugins) podpriority.Register(plugins) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/storage_versions.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/storage_versions.go deleted file mode 100644 index 67950bb715a..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/storage_versions.go +++ /dev/null @@ -1,124 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package options - -import ( - "sort" - "strings" - - "github.com/spf13/pflag" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kubernetes/pkg/api/legacyscheme" -) - -const ( - DefaultEtcdPathPrefix = "/registry" -) - -// StorageSerializationOptions contains the options for encoding resources. -type StorageSerializationOptions struct { - StorageVersions string - // The default values for StorageVersions. StorageVersions overrides - // these; you can change this if you want to change the defaults (e.g., - // for testing). This is not actually exposed as a flag. - DefaultStorageVersions string -} - -func NewStorageSerializationOptions() *StorageSerializationOptions { - return &StorageSerializationOptions{ - DefaultStorageVersions: ToPreferredVersionString(legacyscheme.Scheme.PreferredVersionAllGroups()), - StorageVersions: ToPreferredVersionString(legacyscheme.Scheme.PreferredVersionAllGroups()), - } -} - -// StorageGroupsToEncodingVersion returns a map from group name to group version, -// computed from s.StorageVersions flag. -func (s *StorageSerializationOptions) StorageGroupsToEncodingVersion() (map[string]schema.GroupVersion, error) { - storageVersionMap := map[string]schema.GroupVersion{} - - // First, get the defaults. - if err := mergeGroupVersionIntoMap(s.DefaultStorageVersions, storageVersionMap); err != nil { - return nil, err - } - // Override any defaults with the user settings. - if err := mergeGroupVersionIntoMap(s.StorageVersions, storageVersionMap); err != nil { - return nil, err - } - - return storageVersionMap, nil -} - -// dest must be a map of group to groupVersion. -func mergeGroupVersionIntoMap(gvList string, dest map[string]schema.GroupVersion) error { - for _, gvString := range strings.Split(gvList, ",") { - if gvString == "" { - continue - } - // We accept two formats. "group/version" OR - // "group=group/version". The latter is used when types - // move between groups. - if !strings.Contains(gvString, "=") { - gv, err := schema.ParseGroupVersion(gvString) - if err != nil { - return err - } - dest[gv.Group] = gv - - } else { - parts := strings.SplitN(gvString, "=", 2) - gv, err := schema.ParseGroupVersion(parts[1]) - if err != nil { - return err - } - dest[parts[0]] = gv - } - } - - return nil -} - -// AddFlags adds flags for a specific APIServer to the specified FlagSet -func (s *StorageSerializationOptions) AddFlags(fs *pflag.FlagSet) { - // Note: the weird ""+ in below lines seems to be the only way to get gofmt to - // arrange these text blocks sensibly. Grrr. - fs.StringVar(&s.StorageVersions, "storage-versions", s.StorageVersions, ""+ - "The per-group version to store resources in. "+ - "Specified in the format \"group1/version1,group2/version2,...\". "+ - "In the case where objects are moved from one group to the other, "+ - "you may specify the format \"group1=group2/v1beta1,group3/v1beta1,...\". "+ - "You only need to pass the groups you wish to change from the defaults. "+ - "It defaults to a list of preferred versions of all known groups.") - - fs.MarkDeprecated("storage-versions", ""+ - "Please omit this flag to ensure the default storage versions are used ."+ - "Otherwise the cluster is not safe to upgrade to a version newer than 1.12. "+ - "This flag will be removed in 1.13.") - -} - -// ToPreferredVersionString returns the preferred versions of all registered -// groups in the form of "group1/version1,group2/version2,...". This is compatible -// with the flag format -func ToPreferredVersionString(versions []schema.GroupVersion) string { - var defaults []string - for _, version := range versions { - defaults = append(defaults, version.String()) - } - // sorting provides stable output for help. - sort.Strings(defaults) - return strings.Join(defaults, ",") -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/.import-restrictions b/vendor/k8s.io/kubernetes/pkg/kubectl/.import-restrictions index 6cc204640d3..cd0644cc109 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/.import-restrictions +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/.import-restrictions @@ -3,17 +3,7 @@ "SelectorRegexp": "k8s[.]io/kubernetes/pkg", "AllowedPrefixes": [ "k8s.io/kubernetes/pkg/api", - "k8s.io/kubernetes/pkg/api/events", "k8s.io/kubernetes/pkg/api/legacyscheme", - "k8s.io/kubernetes/pkg/api/pod", - "k8s.io/kubernetes/pkg/api/ref", - "k8s.io/kubernetes/pkg/api/resource", - "k8s.io/kubernetes/pkg/api/service", - "k8s.io/kubernetes/pkg/api/v1/pod", - "k8s.io/kubernetes/pkg/api/v1/service", - "k8s.io/kubernetes/pkg/apis/admissionregistration", - "k8s.io/kubernetes/pkg/apis/admissionregistration/install", - "k8s.io/kubernetes/pkg/apis/admissionregistration/v1alpha1", "k8s.io/kubernetes/pkg/apis/apps", "k8s.io/kubernetes/pkg/apis/apps/install", "k8s.io/kubernetes/pkg/apis/apps/v1", @@ -39,23 +29,14 @@ "k8s.io/kubernetes/pkg/apis/certificates", "k8s.io/kubernetes/pkg/apis/certificates/install", "k8s.io/kubernetes/pkg/apis/certificates/v1beta1", - "k8s.io/kubernetes/pkg/apis/componentconfig", - "k8s.io/kubernetes/pkg/apis/componentconfig/install", - "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1", "k8s.io/kubernetes/pkg/apis/core", "k8s.io/kubernetes/pkg/apis/core/helper", - "k8s.io/kubernetes/pkg/apis/core/helper/qos", "k8s.io/kubernetes/pkg/apis/core/install", "k8s.io/kubernetes/pkg/apis/core/v1", - "k8s.io/kubernetes/pkg/apis/core/v1/helper", - "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos", - "k8s.io/kubernetes/pkg/apis/core/validation", "k8s.io/kubernetes/pkg/apis/extensions", "k8s.io/kubernetes/pkg/apis/extensions/install", "k8s.io/kubernetes/pkg/apis/extensions/v1beta1", "k8s.io/kubernetes/pkg/apis/networking", - "k8s.io/kubernetes/pkg/apis/networking/install", - "k8s.io/kubernetes/pkg/apis/networking/v1", "k8s.io/kubernetes/pkg/apis/policy", "k8s.io/kubernetes/pkg/apis/policy/install", "k8s.io/kubernetes/pkg/apis/policy/v1beta1", @@ -75,76 +56,16 @@ "k8s.io/kubernetes/pkg/apis/storage/util", "k8s.io/kubernetes/pkg/apis/storage/v1", "k8s.io/kubernetes/pkg/apis/storage/v1beta1", - "k8s.io/kubernetes/pkg/capabilities", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/apps/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/settings/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion", - "k8s.io/kubernetes/pkg/client/metrics/prometheus", - "k8s.io/kubernetes/pkg/client/unversioned", - "k8s.io/kubernetes/pkg/cloudprovider", - "k8s.io/kubernetes/pkg/cloudprovider/providers/aws", - "k8s.io/kubernetes/pkg/controller", - "k8s.io/kubernetes/pkg/controller/daemon", - "k8s.io/kubernetes/pkg/controller/daemon/util", - "k8s.io/kubernetes/pkg/controller/deployment/util", - "k8s.io/kubernetes/pkg/controller/history", - "k8s.io/kubernetes/pkg/controller/statefulset", - "k8s.io/kubernetes/pkg/credentialprovider", - "k8s.io/kubernetes/pkg/credentialprovider/aws", "k8s.io/kubernetes/pkg/features", - "k8s.io/kubernetes/pkg/fieldpath", - "k8s.io/kubernetes/pkg/generated", "k8s.io/kubernetes/pkg/kubectl", - "k8s.io/kubernetes/pkg/kubelet/apis", - "k8s.io/kubernetes/pkg/kubelet/qos", - "k8s.io/kubernetes/pkg/kubelet/types", - "k8s.io/kubernetes/pkg/master/ports", "k8s.io/kubernetes/pkg/printers", "k8s.io/kubernetes/pkg/printers/internalversion", "k8s.io/kubernetes/pkg/registry/rbac/reconciliation", "k8s.io/kubernetes/pkg/registry/rbac/validation", - "k8s.io/kubernetes/pkg/scheduler/algorithm", - "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates", - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util", - "k8s.io/kubernetes/pkg/scheduler/api", - "k8s.io/kubernetes/pkg/scheduler/cache", - "k8s.io/kubernetes/pkg/scheduler/internal/cache", - "k8s.io/kubernetes/pkg/scheduler/util", - "k8s.io/kubernetes/pkg/scheduler/volumebinder", - "k8s.io/kubernetes/pkg/security/apparmor", - "k8s.io/kubernetes/pkg/serviceaccount", - "k8s.io/kubernetes/pkg/util/file", - "k8s.io/kubernetes/pkg/util/goroutinemap", - "k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/interrupt", - "k8s.io/kubernetes/pkg/util/io", - "k8s.io/kubernetes/pkg/util/labels", - "k8s.io/kubernetes/pkg/util/metrics", - "k8s.io/kubernetes/pkg/util/mount", - "k8s.io/kubernetes/pkg/util/net/sets", "k8s.io/kubernetes/pkg/util/node", - "k8s.io/kubernetes/pkg/util/nsenter", "k8s.io/kubernetes/pkg/util/parsers", - "k8s.io/kubernetes/pkg/util/slice", - "k8s.io/kubernetes/pkg/util/taints", "k8s.io/kubernetes/pkg/version", - "k8s.io/kubernetes/pkg/version/prometheus", - "k8s.io/kubernetes/pkg/volume", - "k8s.io/kubernetes/pkg/volume/util", "k8s.io/utils/pointer" ], "ForbiddenPrefixes": [] diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/BUILD index cfb06a76450..e86c59c4596 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/BUILD @@ -87,8 +87,8 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/scale:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/retry:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) @@ -107,6 +107,7 @@ filegroup( "//pkg/kubectl/apps:all-srcs", "//pkg/kubectl/cmd:all-srcs", "//pkg/kubectl/describe:all-srcs", + "//pkg/kubectl/drain:all-srcs", "//pkg/kubectl/explain:all-srcs", "//pkg/kubectl/generate:all-srcs", "//pkg/kubectl/generated:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS index 4ac9429057e..a1f6b7eee30 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-cli-maintainers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/BUILD index 3672fe88d02..979699b6e18 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/BUILD @@ -38,6 +38,7 @@ go_library( "//pkg/kubectl/cmd/explain:go_default_library", "//pkg/kubectl/cmd/expose:go_default_library", "//pkg/kubectl/cmd/get:go_default_library", + "//pkg/kubectl/cmd/kustomize:go_default_library", "//pkg/kubectl/cmd/label:go_default_library", "//pkg/kubectl/cmd/logs:go_default_library", "//pkg/kubectl/cmd/options:go_default_library", @@ -58,9 +59,9 @@ go_library( "//pkg/kubectl/cmd/wait:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/templates:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], @@ -70,7 +71,7 @@ go_test( name = "go_default_test", srcs = ["cmd_test.go"], data = [ - "//api/openapi-spec:swagger-spec", + "//api/openapi-spec", "//pkg/kubectl/cmd/plugin:testdata", "//test/e2e/testing-manifests:all-srcs", "//test/fixtures", @@ -116,6 +117,7 @@ filegroup( "//pkg/kubectl/cmd/expose:all-srcs", "//pkg/kubectl/cmd/get:all-srcs", "//pkg/kubectl/cmd/help:all-srcs", + "//pkg/kubectl/cmd/kustomize:all-srcs", "//pkg/kubectl/cmd/label:all-srcs", "//pkg/kubectl/cmd/logs:all-srcs", "//pkg/kubectl/cmd/options:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/BUILD index 728e940743f..e554ac40b0f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/BUILD @@ -17,8 +17,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -40,7 +40,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/annotate.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/annotate.go index 56fe5603fb4..63b77060dd1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/annotate.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/annotate/annotate.go @@ -32,8 +32,8 @@ import ( "k8s.io/apimachinery/pkg/util/json" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -69,7 +69,6 @@ type AnnotateOptions struct { enforceNamespace bool builder *resource.Builder unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) - includeUninitialized bool genericclioptions.IOStreams } @@ -109,6 +108,7 @@ var ( kubectl annotate pods foo description-`)) ) +// NewAnnotateOptions creates the options for annotate func NewAnnotateOptions(ioStreams genericclioptions.IOStreams) *AnnotateOptions { return &AnnotateOptions{ PrintFlags: genericclioptions.NewPrintFlags("annotated").WithTypeSetter(scheme.Scheme), @@ -119,6 +119,7 @@ func NewAnnotateOptions(ioStreams genericclioptions.IOStreams) *AnnotateOptions } } +// NewCmdAnnotate creates the `annotate` command func NewCmdAnnotate(parent string, f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewAnnotateOptions(ioStreams) @@ -126,7 +127,7 @@ func NewCmdAnnotate(parent string, f cmdutil.Factory, ioStreams genericclioption Use: "annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]", DisableFlagsInUseLine: true, Short: i18n.T("Update the annotations on a resource"), - Long: annotateLong + "\n\n" + cmdutil.SuggestApiResources(parent), + Long: annotateLong + "\n\n" + cmdutil.SuggestAPIResources(parent), Example: annotateExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) @@ -181,7 +182,6 @@ func (o *AnnotateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ if err != nil { return err } - o.includeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, false) o.builder = f.NewBuilder() o.unstructuredClientForMapping = f.UnstructuredClientForMapping @@ -208,7 +208,7 @@ func (o AnnotateOptions) Validate() error { if o.all && len(o.fieldSelector) > 0 { return fmt.Errorf("cannot set --all and --field-selector at the same time") } - if len(o.resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("one or more resources must be specified as or /") } if len(o.newAnnotations) < 1 && len(o.removeAnnotations) < 1 { @@ -225,7 +225,6 @@ func (o AnnotateOptions) RunAnnotate() error { ContinueOnError(). NamespaceParam(o.namespace).DefaultNamespace(). FilenameParam(o.enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(o.includeUninitialized). Flatten() if !o.local { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/BUILD index b44343d2feb..1e7ab15cf53 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/BUILD @@ -15,6 +15,7 @@ go_library( "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiresources.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiresources.go index 2e3d90bf239..e5b3eeafe59 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiresources.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiresources.go @@ -26,6 +26,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/cli-runtime/pkg/genericclioptions" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -51,9 +52,9 @@ var ( kubectl api-resources --api-group=extensions`) ) -// ApiResourcesOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of -// referencing the cmd.Flags() -type ApiResourcesOptions struct { +// APIResourceOptions is the start of the data required to perform the operation. +// As new fields are added, add them here instead of referencing the cmd.Flags() +type APIResourceOptions struct { Output string APIGroup string Namespaced bool @@ -70,8 +71,9 @@ type groupResource struct { APIResource metav1.APIResource } -func NewAPIResourceOptions(ioStreams genericclioptions.IOStreams) *ApiResourcesOptions { - return &ApiResourcesOptions{ +// NewAPIResourceOptions creates the options for APIResource +func NewAPIResourceOptions(ioStreams genericclioptions.IOStreams) *APIResourceOptions { + return &APIResourceOptions{ IOStreams: ioStreams, Namespaced: true, } @@ -89,7 +91,7 @@ func NewCmdAPIResources(f cmdutil.Factory, ioStreams genericclioptions.IOStreams Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(cmd, args)) cmdutil.CheckErr(o.Validate()) - cmdutil.CheckErr(o.RunApiResources(cmd, f)) + cmdutil.CheckErr(o.RunAPIResources(cmd, f)) }, } @@ -103,7 +105,8 @@ func NewCmdAPIResources(f cmdutil.Factory, ioStreams genericclioptions.IOStreams return cmd } -func (o *ApiResourcesOptions) Validate() error { +// Validate checks to the APIResourceOptions to see if there is sufficient information run the command +func (o *APIResourceOptions) Validate() error { supportedOutputTypes := sets.NewString("", "wide", "name") if !supportedOutputTypes.Has(o.Output) { return fmt.Errorf("--output %v is not available", o.Output) @@ -111,14 +114,16 @@ func (o *ApiResourcesOptions) Validate() error { return nil } -func (o *ApiResourcesOptions) Complete(cmd *cobra.Command, args []string) error { +// Complete adapts from the command line args and validates them +func (o *APIResourceOptions) Complete(cmd *cobra.Command, args []string) error { if len(args) != 0 { return cmdutil.UsageErrorf(cmd, "unexpected arguments: %v", args) } return nil } -func (o *ApiResourcesOptions) RunApiResources(cmd *cobra.Command, f cmdutil.Factory) error { +// RunAPIResources does the work +func (o *APIResourceOptions) RunAPIResources(cmd *cobra.Command, f cmdutil.Factory) error { w := printers.GetNewTabWriter(o.Out) defer w.Flush() @@ -132,9 +137,10 @@ func (o *ApiResourcesOptions) RunApiResources(cmd *cobra.Command, f cmdutil.Fact discoveryclient.Invalidate() } + errs := []error{} lists, err := discoveryclient.ServerPreferredResources() if err != nil { - return err + errs = append(errs, err) } resources := []groupResource{} @@ -188,7 +194,7 @@ func (o *ApiResourcesOptions) RunApiResources(cmd *cobra.Command, f cmdutil.Fact name += "." + r.APIGroup } if _, err := fmt.Fprintf(w, "%s\n", name); err != nil { - return err + errs = append(errs, err) } case "wide": if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%v\t%s\t%v\n", @@ -198,7 +204,7 @@ func (o *ApiResourcesOptions) RunApiResources(cmd *cobra.Command, f cmdutil.Fact r.APIResource.Namespaced, r.APIResource.Kind, r.APIResource.Verbs); err != nil { - return err + errs = append(errs, err) } case "": if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%v\t%s\n", @@ -207,10 +213,14 @@ func (o *ApiResourcesOptions) RunApiResources(cmd *cobra.Command, f cmdutil.Fact r.APIGroup, r.APIResource.Namespaced, r.APIResource.Kind); err != nil { - return err + errs = append(errs, err) } } } + + if len(errs) > 0 { + return errors.NewAggregate(errs) + } return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiversions.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiversions.go index 738aa51b6b4..e12897c444c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiversions.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apiresources/apiversions.go @@ -36,21 +36,23 @@ var ( kubectl api-versions`)) ) -type ApiVersionsOptions struct { +// APIVersionsOptions have the data required for API versions +type APIVersionsOptions struct { discoveryClient discovery.CachedDiscoveryInterface genericclioptions.IOStreams } -func NewApiVersionsOptions(ioStreams genericclioptions.IOStreams) *ApiVersionsOptions { - return &ApiVersionsOptions{ +// NewAPIVersionsOptions creates the options for APIVersions +func NewAPIVersionsOptions(ioStreams genericclioptions.IOStreams) *APIVersionsOptions { + return &APIVersionsOptions{ IOStreams: ioStreams, } } // NewCmdAPIVersions creates the `api-versions` command func NewCmdAPIVersions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - o := NewApiVersionsOptions(ioStreams) + o := NewAPIVersionsOptions(ioStreams) cmd := &cobra.Command{ Use: "api-versions", Short: "Print the supported API versions on the server, in the form of \"group/version\"", @@ -58,13 +60,14 @@ func NewCmdAPIVersions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) Example: apiversionsExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) - cmdutil.CheckErr(o.RunApiVersions()) + cmdutil.CheckErr(o.RunAPIVersions()) }, } return cmd } -func (o *ApiVersionsOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { +// Complete adapts from the command line args and factory to the data required +func (o *APIVersionsOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { if len(args) != 0 { return cmdutil.UsageErrorf(cmd, "unexpected arguments: %v", args) } @@ -76,13 +79,14 @@ func (o *ApiVersionsOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg return nil } -func (o *ApiVersionsOptions) RunApiVersions() error { +// RunAPIVersions does the work +func (o *APIVersionsOptions) RunAPIVersions() error { // Always request fresh data from the server o.discoveryClient.Invalidate() groupList, err := o.discoveryClient.ServerGroups() if err != nil { - return fmt.Errorf("Couldn't get available api versions from server: %v\n", err) + return fmt.Errorf("couldn't get available api versions from server: %v", err) } apiVersions := metav1.ExtractGroupVersions(groupList) sort.Strings(apiVersions) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/BUILD index 8f954982581..7ca32d743d8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/BUILD @@ -34,8 +34,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//vendor/github.com/jonboulle/clockwork:go_default_library", @@ -50,7 +50,7 @@ go_test( name = "go_default_test", srcs = ["apply_test.go"], data = [ - "//api/openapi-spec:swagger-spec", + "//api/openapi-spec", "//test/fixtures", ], embed = [":go_default_library"], @@ -59,8 +59,8 @@ go_test( "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/scheme:go_default_library", + "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", @@ -68,7 +68,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch/testing:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic/fake:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply.go index a81d68a89d4..079918edf05 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply.go @@ -20,6 +20,7 @@ import ( "encoding/json" "fmt" "io" + "net/http" "strings" "time" @@ -39,8 +40,8 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/klog" @@ -63,16 +64,16 @@ type ApplyOptions struct { DeleteFlags *delete.DeleteFlags DeleteOptions *delete.DeleteOptions - Selector string - DryRun bool - ServerDryRun bool - Prune bool - PruneResources []pruneResource - cmdBaseName string - All bool - Overwrite bool - PruneWhitelist []string - ShouldIncludeUninitialized bool + Selector string + DryRun bool + ServerDryRun bool + Prune bool + PruneResources []pruneResource + cmdBaseName string + All bool + Overwrite bool + OpenAPIPatch bool + PruneWhitelist []string Validator validation.Schema Builder *resource.Builder @@ -89,7 +90,7 @@ type ApplyOptions struct { const ( // maxPatchRetry is the maximum number of conflicts retry for during a patch operation before returning failure maxPatchRetry = 5 - // backOffPeriod is the period to back off when apply patch resutls in error. + // backOffPeriod is the period to back off when apply patch results in error. backOffPeriod = 1 * time.Second // how many times we can retry before back off triesBeforeBackOff = 1 @@ -109,6 +110,9 @@ var ( # Apply the configuration in pod.json to a pod. kubectl apply -f ./pod.json + # Apply resources from a directory containing kustomization.yaml - e.g. dir/kustomization.yaml. + kubectl apply -k dir/ + # Apply the JSON passed into stdin to a pod. cat pod.json | kubectl apply -f - @@ -128,7 +132,7 @@ func NewApplyOptions(ioStreams genericclioptions.IOStreams) *ApplyOptions { DeleteFlags: delete.NewDeleteFlags("that contains the configuration to apply"), PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), - Overwrite: true, + Overwrite: true, Recorder: genericclioptions.NoopRecorder{}, @@ -136,6 +140,7 @@ func NewApplyOptions(ioStreams genericclioptions.IOStreams) *ApplyOptions { } } +// NewCmdApply creates the `apply` command func NewCmdApply(baseName string, f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewApplyOptions(ioStreams) @@ -144,7 +149,7 @@ func NewCmdApply(baseName string, f cmdutil.Factory, ioStreams genericclioptions o.cmdBaseName = baseName cmd := &cobra.Command{ - Use: "apply -f FILENAME", + Use: "apply (-f FILENAME | -k DIRECTORY)", DisableFlagsInUseLine: true, Short: i18n.T("Apply a configuration to a resource by filename or stdin"), Long: applyLong, @@ -162,7 +167,6 @@ func NewCmdApply(baseName string, f cmdutil.Factory, ioStreams genericclioptions o.RecordFlags.AddFlags(cmd) o.PrintFlags.AddFlags(cmd) - cmd.MarkFlagRequired("filename") cmd.Flags().BoolVar(&o.Overwrite, "overwrite", o.Overwrite, "Automatically resolve conflicts between the modified and live configuration by using values from the modified configuration") cmd.Flags().BoolVar(&o.Prune, "prune", o.Prune, "Automatically delete resource objects, including the uninitialized ones, that do not appear in the configs and are created by either apply or create --save-config. Should be used with either -l or --all.") cmdutil.AddValidateFlags(cmd) @@ -170,7 +174,7 @@ func NewCmdApply(baseName string, f cmdutil.Factory, ioStreams genericclioptions cmd.Flags().BoolVar(&o.All, "all", o.All, "Select all resources in the namespace of the specified resource types.") cmd.Flags().StringArrayVar(&o.PruneWhitelist, "prune-whitelist", o.PruneWhitelist, "Overwrite the default whitelist with for --prune") cmd.Flags().BoolVar(&o.ServerDryRun, "server-dry-run", o.ServerDryRun, "If true, request will be sent to server with dry-run flag, which means the modifications won't be persisted. This is an alpha feature and flag.") - cmdutil.AddDryRunFlag(cmd) + cmd.Flags().Bool("dry-run", false, "If true, only print the object that would be sent, without sending it. Warning: --dry-run cannot accurately output the result of merging the local manifest and the server-side data. Use --server-dry-run to get the merged result instead.") cmdutil.AddIncludeUninitializedFlag(cmd) // apply subcommands @@ -217,7 +221,10 @@ func (o *ApplyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { return err } o.DeleteOptions = o.DeleteFlags.ToOptions(dynamicClient, o.IOStreams) - o.ShouldIncludeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, o.Prune) + err = o.DeleteOptions.FilenameOptions.RequireFilenameOrKustomize() + if err != nil { + return err + } o.Validator, err = f.Validator(cmdutil.GetFlagBool(cmd, "validate")) o.Builder = f.NewBuilder() @@ -251,7 +258,7 @@ func validatePruneAll(prune, all bool, selector string) error { return fmt.Errorf("cannot set --all and --selector at the same time") } if prune && !all && selector == "" { - return fmt.Errorf("all resources selected for prune without explicitly passing --all. To prune all resources, pass the --all flag. If you did not mean to prune all resources, specify a label selector.") + return fmt.Errorf("all resources selected for prune without explicitly passing --all. To prune all resources, pass the --all flag. If you did not mean to prune all resources, specify a label selector") } return nil } @@ -287,9 +294,19 @@ func parsePruneResources(mapper meta.RESTMapper, gvks []string) ([]pruneResource return pruneResources, nil } +func isIncompatibleServerError(err error) bool { + // 415: Unsupported media type means we're talking to a server which doesn't + // support server-side apply. + if _, ok := err.(*errors.StatusError); !ok { + // Non-StatusError means the error isn't because the server is incompatible. + return false + } + return err.(*errors.StatusError).Status().Code == http.StatusUnsupportedMediaType +} + func (o *ApplyOptions) Run() error { dryRunVerifier := &DryRunVerifier{ - Finder: cmdutil.NewCRDFinder(cmdutil.CRDFromDynamic(o.DynamicClient)), + Finder: cmdutil.NewCRDFinder(cmdutil.CRDFromDynamic(o.DynamicClient)), } // include the uninitialized objects by default if --prune is true @@ -301,7 +318,6 @@ func (o *ApplyOptions) Run() error { NamespaceParam(o.Namespace).DefaultNamespace(). FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions). LabelSelectorParam(o.Selector). - IncludeUninitialized(o.ShouldIncludeUninitialized). Flatten(). Do() if err := r.Err(); err != nil { @@ -520,13 +536,13 @@ func (o *ApplyOptions) Run() error { for n := range visitedNamespaces { for _, m := range namespacedRESTMappings { - if err := p.prune(n, m, o.ShouldIncludeUninitialized); err != nil { + if err := p.prune(n, m); err != nil { return fmt.Errorf("error pruning namespaced object %v: %v", m.GroupVersionKind, err) } } } for _, m := range nonNamespacedRESTMappings { - if err := p.prune(metav1.NamespaceNone, m, o.ShouldIncludeUninitialized); err != nil { + if err := p.prune(metav1.NamespaceNone, m); err != nil { return fmt.Errorf("error pruning nonNamespaced object %v: %v", m.GroupVersionKind, err) } } @@ -561,12 +577,11 @@ func getRESTMappings(mapper meta.RESTMapper, pruneResources *[]pruneResource) (n {"", "v1", "Service", true}, {"batch", "v1", "Job", true}, {"batch", "v1beta1", "CronJob", true}, - {"extensions", "v1beta1", "DaemonSet", true}, - {"extensions", "v1beta1", "Deployment", true}, {"extensions", "v1beta1", "Ingress", true}, - {"extensions", "v1beta1", "ReplicaSet", true}, - {"apps", "v1beta1", "StatefulSet", true}, - {"apps", "v1beta1", "Deployment", true}, + {"apps", "v1", "DaemonSet", true}, + {"apps", "v1", "Deployment", true}, + {"apps", "v1", "ReplicaSet", true}, + {"apps", "v1", "StatefulSet", true}, } } @@ -603,13 +618,12 @@ type pruner struct { out io.Writer } -func (p *pruner) prune(namespace string, mapping *meta.RESTMapping, includeUninitialized bool) error { +func (p *pruner) prune(namespace string, mapping *meta.RESTMapping) error { objList, err := p.dynamicClient.Resource(mapping.Resource). Namespace(namespace). List(metav1.ListOptions{ - LabelSelector: p.labelSelector, - FieldSelector: p.fieldSelector, - IncludeUninitialized: includeUninitialized, + LabelSelector: p.labelSelector, + FieldSelector: p.fieldSelector, }) if err != nil { return err @@ -705,7 +719,7 @@ type Patcher struct { // delay the check for CRDs as much as possible though, since it // requires an extra round-trip to the server. type DryRunVerifier struct { - Finder cmdutil.CRDFinder + Finder cmdutil.CRDFinder } // HasSupport verifies if the given gvk supports DryRun. An error is @@ -800,7 +814,7 @@ func (p *Patcher) patchSimple(obj runtime.Object, modified []byte, source, names } } - options := metav1.UpdateOptions{} + options := metav1.PatchOptions{} if p.ServerDryRun { options.DryRun = []string{metav1.DryRunAll} } @@ -858,7 +872,7 @@ func (p *Patcher) deleteAndCreate(original runtime.Object, modified []byte, name // but still propagate and advertise error to user recreated, recreateErr := p.Helper.Create(namespace, true, original, &options) if recreateErr != nil { - err = fmt.Errorf("An error occurred force-replacing the existing object with the newly provided one:\n\n%v.\n\nAdditionally, an error occurred attempting to restore the original object:\n\n%v\n", err, recreateErr) + err = fmt.Errorf("An error occurred force-replacing the existing object with the newly provided one:\n\n%v.\n\nAdditionally, an error occurred attempting to restore the original object:\n\n%v", err, recreateErr) } else { createdObject = recreated } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_set_last_applied.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_set_last_applied.go index 23699f407fc..47b5b5fcd90 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_set_last_applied.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_set_last_applied.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" @@ -162,9 +162,8 @@ func (o *SetLastAppliedOptions) Validate() error { if err := info.Get(); err != nil { if errors.IsNotFound(err) { return err - } else { - return cmdutil.AddSourceToErr(fmt.Sprintf("retrieving current configuration of:\n%s\nfrom server for:", info.String()), info.Source, err) } + return cmdutil.AddSourceToErr(fmt.Sprintf("retrieving current configuration of:\n%s\nfrom server for:", info.String()), info.Source, err) } originalBuf, err := kubectl.GetOriginalConfiguration(info.Object) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_view_last_applied.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_view_last_applied.go index e35b0c434cb..60a084912d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_view_last_applied.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/apply/apply_view_last_applied.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/BUILD index ae86f8d5bfd..ed12130ba97 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/BUILD @@ -15,7 +15,7 @@ go_library( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/attach.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/attach.go index c0bfd783163..1b56761fb54 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/attach.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/attach/attach.go @@ -28,7 +28,7 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/kubectl/cmd/exec" @@ -76,7 +76,7 @@ type AttachOptions struct { AttachFunc func(*AttachOptions, *corev1.Container, bool, remotecommand.TerminalSizeQueue) func() error Resources []string Builder func() *resource.Builder - AttachablePodFn polymorphichelpers.AttachableLogsForObjectFunc + AttachablePodFn polymorphichelpers.AttachablePodForObjectFunc restClientGetter genericclioptions.RESTClientGetter Attach RemoteAttach diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/BUILD index 9be5ff830ac..8824bf0f2f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/BUILD @@ -17,7 +17,10 @@ go_library( ], deps = [ "//pkg/kubectl/cmd/util:go_default_library", + "//pkg/kubectl/describe/versioned:go_default_library", "//pkg/kubectl/scheme:go_default_library", + "//pkg/kubectl/util/printers:go_default_library", + "//pkg/kubectl/util/rbac:go_default_library", "//pkg/kubectl/util/templates:go_default_library", "//pkg/registry/rbac/reconciliation:go_default_library", "//staging/src/k8s.io/api/authorization/v1:go_default_library", @@ -25,10 +28,12 @@ go_library( "//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1:go_default_library", @@ -59,7 +64,10 @@ go_test( deps = [ "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/scheme:go_default_library", + "//staging/src/k8s.io/api/authorization/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/auth.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/auth.go index 3f1e5943d73..d53b30af6ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/auth.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/auth.go @@ -23,6 +23,7 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) +// NewCmdAuth returns an initialized Command instance for 'auth' sub command func NewCmdAuth(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { // Parent command to which all subcommands are added. cmds := &cobra.Command{ diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/cani.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/cani.go index 31ce080dd1a..4aa28c18c45 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/cani.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/cani.go @@ -19,18 +19,25 @@ package auth import ( "errors" "fmt" + "io" "io/ioutil" "os" + "sort" "strings" "github.com/spf13/cobra" authorizationv1 "k8s.io/api/authorization/v1" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime/schema" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" authorizationv1client "k8s.io/client-go/kubernetes/typed/authorization/v1" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + describeutil "k8s.io/kubernetes/pkg/kubectl/describe/versioned" + "k8s.io/kubernetes/pkg/kubectl/util/printers" + rbacutil "k8s.io/kubernetes/pkg/kubectl/util/rbac" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) @@ -39,14 +46,16 @@ import ( type CanIOptions struct { AllNamespaces bool Quiet bool + NoHeaders bool Namespace string - SelfSARClient authorizationv1client.SelfSubjectAccessReviewsGetter + AuthClient authorizationv1client.AuthorizationV1Interface Verb string Resource schema.GroupVersionResource NonResourceURL string Subresource string ResourceName string + List bool genericclioptions.IOStreams } @@ -77,9 +86,13 @@ var ( kubectl auth can-i get pods --subresource=log # Check to see if I can access the URL /logs/ - kubectl auth can-i get /logs/`) + kubectl auth can-i get /logs/ + + # List all allowed actions in namespace "foo" + kubectl auth can-i --list --namespace=foo`) ) +// NewCmdCanI returns an initialized Command for 'auth can-i' sub command func NewCmdCanI(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := &CanIOptions{ IOStreams: streams, @@ -94,47 +107,60 @@ func NewCmdCanI(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.C Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, args)) cmdutil.CheckErr(o.Validate()) - - allowed, err := o.RunAccessCheck() - if err == nil { - if !allowed { - os.Exit(1) + var err error + if o.List { + err = o.RunAccessList() + } else { + var allowed bool + allowed, err = o.RunAccessCheck() + if err == nil { + if !allowed { + os.Exit(1) + } } } - cmdutil.CheckErr(err) }, } - cmd.Flags().BoolVar(&o.AllNamespaces, "all-namespaces", o.AllNamespaces, "If true, check the specified action in all namespaces.") + cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If true, check the specified action in all namespaces.") cmd.Flags().BoolVarP(&o.Quiet, "quiet", "q", o.Quiet, "If true, suppress output and just return the exit code.") cmd.Flags().StringVar(&o.Subresource, "subresource", o.Subresource, "SubResource such as pod/log or deployment/scale") + cmd.Flags().BoolVar(&o.List, "list", o.List, "If true, prints all allowed actions.") + cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If true, prints allowed actions without headers") return cmd } +// Complete completes all the required options func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error { - if o.Quiet { - o.Out = ioutil.Discard - } + if o.List { + if len(args) != 0 { + return errors.New("list option must be specified with no arguments") + } + } else { + if o.Quiet { + o.Out = ioutil.Discard + } - switch len(args) { - case 2: - o.Verb = args[0] - if strings.HasPrefix(args[1], "/") { - o.NonResourceURL = args[1] - break + switch len(args) { + case 2: + o.Verb = args[0] + if strings.HasPrefix(args[1], "/") { + o.NonResourceURL = args[1] + break + } + resourceTokens := strings.SplitN(args[1], "/", 2) + restMapper, err := f.ToRESTMapper() + if err != nil { + return err + } + o.Resource = o.resourceFor(restMapper, resourceTokens[0]) + if len(resourceTokens) > 1 { + o.ResourceName = resourceTokens[1] + } + default: + return errors.New("you must specify two or three arguments: verb, resource, and optional resourceName") } - resourceTokens := strings.SplitN(args[1], "/", 2) - restMapper, err := f.ToRESTMapper() - if err != nil { - return err - } - o.Resource = o.resourceFor(restMapper, resourceTokens[0]) - if len(resourceTokens) > 1 { - o.ResourceName = resourceTokens[1] - } - default: - return errors.New("you must specify two or three arguments: verb, resource, and optional resourceName") } var err error @@ -142,8 +168,7 @@ func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error { if err != nil { return err } - o.SelfSARClient = client.AuthorizationV1() - + o.AuthClient = client.AuthorizationV1() o.Namespace = "" if !o.AllNamespaces { o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() @@ -155,7 +180,15 @@ func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error { return nil } +// Validate makes sure provided values for CanIOptions are valid func (o *CanIOptions) Validate() error { + if o.List { + if o.Quiet || o.AllNamespaces || o.Subresource != "" { + return errors.New("list option can't be specified with neither quiet, all-namespaces nor subresource options") + } + return nil + } + if o.NonResourceURL != "" { if o.Subresource != "" { return fmt.Errorf("--subresource can not be used with NonResourceURL") @@ -164,9 +197,29 @@ func (o *CanIOptions) Validate() error { return fmt.Errorf("NonResourceURL and ResourceName can not specified together") } } + + if o.NoHeaders { + return fmt.Errorf("--no-headers cannot be set without --list specified") + } return nil } +// RunAccessList lists all the access current user has +func (o *CanIOptions) RunAccessList() error { + sar := &authorizationv1.SelfSubjectRulesReview{ + Spec: authorizationv1.SelfSubjectRulesReviewSpec{ + Namespace: o.Namespace, + }, + } + response, err := o.AuthClient.SelfSubjectRulesReviews().Create(sar) + if err != nil { + return err + } + + return o.printStatus(response.Status) +} + +// RunAccessCheck checks if user has access to a certain resource or non resource URL func (o *CanIOptions) RunAccessCheck() (bool, error) { var sar *authorizationv1.SelfSubjectAccessReview if o.NonResourceURL == "" { @@ -191,10 +244,9 @@ func (o *CanIOptions) RunAccessCheck() (bool, error) { }, }, } - } - response, err := o.SelfSARClient.SelfSubjectAccessReviews().Create(sar) + response, err := o.AuthClient.SelfSubjectAccessReviews().Create(sar) if err != nil { return false, err } @@ -240,3 +292,71 @@ func (o *CanIOptions) resourceFor(mapper meta.RESTMapper, resourceArg string) sc return gvr } + +func (o *CanIOptions) printStatus(status authorizationv1.SubjectRulesReviewStatus) error { + if status.Incomplete { + fmt.Fprintf(o.ErrOut, "warning: the list may be incomplete: %v\n", status.EvaluationError) + } + + breakdownRules := []rbacv1.PolicyRule{} + for _, rule := range convertToPolicyRule(status) { + breakdownRules = append(breakdownRules, rbacutil.BreakdownRule(rule)...) + } + + compactRules, err := rbacutil.CompactRules(breakdownRules) + if err != nil { + return err + } + sort.Stable(rbacutil.SortableRuleSlice(compactRules)) + + w := printers.GetNewTabWriter(o.Out) + defer w.Flush() + + allErrs := []error{} + if !o.NoHeaders { + if err := printAccessHeaders(w); err != nil { + allErrs = append(allErrs, err) + } + } + + if err := printAccess(w, compactRules); err != nil { + allErrs = append(allErrs, err) + } + return utilerrors.NewAggregate(allErrs) +} + +func convertToPolicyRule(status authorizationv1.SubjectRulesReviewStatus) []rbacv1.PolicyRule { + ret := []rbacv1.PolicyRule{} + for _, resource := range status.ResourceRules { + ret = append(ret, rbacv1.PolicyRule{ + Verbs: resource.Verbs, + APIGroups: resource.APIGroups, + Resources: resource.Resources, + ResourceNames: resource.ResourceNames, + }) + } + + for _, nonResource := range status.NonResourceRules { + ret = append(ret, rbacv1.PolicyRule{ + Verbs: nonResource.Verbs, + NonResourceURLs: nonResource.NonResourceURLs, + }) + } + + return ret +} + +func printAccessHeaders(out io.Writer) error { + columnNames := []string{"Resources", "Non-Resource URLs", "Resource Names", "Verbs"} + _, err := fmt.Fprintf(out, "%s\n", strings.Join(columnNames, "\t")) + return err +} + +func printAccess(out io.Writer, rules []rbacv1.PolicyRule) error { + for _, r := range rules { + if _, err := fmt.Fprintf(out, "%s\t%v\t%v\t%v\n", describeutil.CombineResourceGroup(r.Resources, r.APIGroups), r.NonResourceURLs, r.ResourceNames, r.Verbs); err != nil { + return err + } + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/reconcile.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/reconcile.go index 77c5cebfc06..21d7a3cb882 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/reconcile.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/auth/reconcile.go @@ -21,13 +21,14 @@ import ( "fmt" "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/klog" rbacv1 "k8s.io/api/rbac/v1" rbacv1beta1 "k8s.io/api/rbac/v1beta1" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" rbacv1client "k8s.io/client-go/kubernetes/typed/rbac/v1" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -58,13 +59,22 @@ var ( reconcileLong = templates.LongDesc(` Reconciles rules for RBAC Role, RoleBinding, ClusterRole, and ClusterRole binding objects. - This is preferred to 'apply' for RBAC resources so that proper rule coverage checks are done.`) + Missing objects are created, and the containing namespace is created for namespaced objects, if required. + + Existing roles are updated to include the permissions in the input objects, + and remove extra permissions if --remove-extra-permissions is specified. + + Existing bindings are updated to include the subjects in the input objects, + and remove extra subjects if --remove-extra-subjects is specified. + + This is preferred to 'apply' for RBAC resources so that semantically-aware merging of rules and subjects is done.`) reconcileExample = templates.Examples(` # Reconcile rbac resources from a file kubectl auth reconcile -f my-rbac-rules.yaml`) ) +// NewReconcileOptions returns a new ReconcileOptions instance func NewReconcileOptions(ioStreams genericclioptions.IOStreams) *ReconcileOptions { return &ReconcileOptions{ FilenameOptions: &resource.FilenameOptions{}, @@ -73,6 +83,7 @@ func NewReconcileOptions(ioStreams genericclioptions.IOStreams) *ReconcileOption } } +// NewCmdReconcile holds the options for 'auth reconcile' sub command func NewCmdReconcile(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewReconcileOptions(streams) @@ -95,12 +106,16 @@ func NewCmdReconcile(f cmdutil.Factory, streams genericclioptions.IOStreams) *co cmd.Flags().BoolVar(&o.DryRun, "dry-run", o.DryRun, "If true, display results but do not submit changes") cmd.Flags().BoolVar(&o.RemoveExtraPermissions, "remove-extra-permissions", o.RemoveExtraPermissions, "If true, removes extra permissions added to roles") cmd.Flags().BoolVar(&o.RemoveExtraSubjects, "remove-extra-subjects", o.RemoveExtraSubjects, "If true, removes extra subjects added to rolebindings") - cmd.MarkFlagRequired("filename") return cmd } +// Complete completes all the required options func (o *ReconcileOptions) Complete(cmd *cobra.Command, f cmdutil.Factory, args []string) error { + if err := o.FilenameOptions.RequireFilenameOrKustomize(); err != nil { + return err + } + if len(args) > 0 { return errors.New("no arguments are allowed") } @@ -148,6 +163,7 @@ func (o *ReconcileOptions) Complete(cmd *cobra.Command, f cmdutil.Factory, args return nil } +// Validate makes sure provided values for ReconcileOptions are valid func (o *ReconcileOptions) Validate() error { if o.Visitor == nil { return errors.New("ReconcileOptions.Visitor must be set") @@ -170,6 +186,7 @@ func (o *ReconcileOptions) Validate() error { return nil } +// RunReconcile performs the execution func (o *ReconcileOptions) RunReconcile() error { return o.Visitor.Visit(func(info *resource.Info, err error) error { if err != nil { @@ -191,7 +208,7 @@ func (o *ReconcileOptions) RunReconcile() error { if err != nil { return err } - o.PrintObject(result.Role.GetObject(), o.Out) + o.printResults(result.Role.GetObject(), nil, nil, result.MissingRules, result.ExtraRules, result.Operation, result.Protected) case *rbacv1.ClusterRole: reconcileOptions := reconciliation.ReconcileRoleOptions{ @@ -206,7 +223,7 @@ func (o *ReconcileOptions) RunReconcile() error { if err != nil { return err } - o.PrintObject(result.Role.GetObject(), o.Out) + o.printResults(result.Role.GetObject(), nil, nil, result.MissingRules, result.ExtraRules, result.Operation, result.Protected) case *rbacv1.RoleBinding: reconcileOptions := reconciliation.ReconcileRoleBindingOptions{ @@ -222,7 +239,7 @@ func (o *ReconcileOptions) RunReconcile() error { if err != nil { return err } - o.PrintObject(result.RoleBinding.GetObject(), o.Out) + o.printResults(result.RoleBinding.GetObject(), result.MissingSubjects, result.ExtraSubjects, nil, nil, result.Operation, result.Protected) case *rbacv1.ClusterRoleBinding: reconcileOptions := reconciliation.ReconcileRoleBindingOptions{ @@ -237,7 +254,7 @@ func (o *ReconcileOptions) RunReconcile() error { if err != nil { return err } - o.PrintObject(result.RoleBinding.GetObject(), o.Out) + o.printResults(result.RoleBinding.GetObject(), result.MissingSubjects, result.ExtraSubjects, nil, nil, result.Operation, result.Protected) case *rbacv1beta1.Role, *rbacv1beta1.RoleBinding, @@ -253,3 +270,56 @@ func (o *ReconcileOptions) RunReconcile() error { return nil }) } + +func (o *ReconcileOptions) printResults(object runtime.Object, + missingSubjects, extraSubjects []rbacv1.Subject, + missingRules, extraRules []rbacv1.PolicyRule, + operation reconciliation.ReconcileOperation, + protected bool) { + + o.PrintObject(object, o.Out) + + caveat := "" + if protected { + caveat = ", but object opted out (rbac.authorization.kubernetes.io/autoupdate: false)" + } + switch operation { + case reconciliation.ReconcileNone: + return + case reconciliation.ReconcileCreate: + fmt.Fprintf(o.ErrOut, "\treconciliation required create%s\n", caveat) + case reconciliation.ReconcileUpdate: + fmt.Fprintf(o.ErrOut, "\treconciliation required update%s\n", caveat) + case reconciliation.ReconcileRecreate: + fmt.Fprintf(o.ErrOut, "\treconciliation required recreate%s\n", caveat) + } + + if len(missingSubjects) > 0 { + fmt.Fprintf(o.ErrOut, "\tmissing subjects added:\n") + for _, s := range missingSubjects { + fmt.Fprintf(o.ErrOut, "\t\t%+v\n", s) + } + } + if o.RemoveExtraSubjects { + if len(extraSubjects) > 0 { + fmt.Fprintf(o.ErrOut, "\textra subjects removed:\n") + for _, s := range extraSubjects { + fmt.Fprintf(o.ErrOut, "\t\t%+v\n", s) + } + } + } + if len(missingRules) > 0 { + fmt.Fprintf(o.ErrOut, "\tmissing rules added:\n") + for _, r := range missingRules { + fmt.Fprintf(o.ErrOut, "\t\t%+v\n", r) + } + } + if o.RemoveExtraPermissions { + if len(extraRules) > 0 { + fmt.Fprintf(o.ErrOut, "\textra rules removed:\n") + for _, r := range extraRules { + fmt.Fprintf(o.ErrOut, "\t\t%+v\n", r) + } + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/BUILD index fdb1dce6c24..0d6bbda96f5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/BUILD @@ -10,16 +10,16 @@ go_library( "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/generate:go_default_library", "//pkg/kubectl/generate/versioned:go_default_library", - "//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1:go_default_library", + "//staging/src/k8s.io/client-go/scale:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/autoscale.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/autoscale.go index 9f59e7bbd82..42d4d081a34 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/autoscale.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/autoscale/autoscale.go @@ -25,14 +25,14 @@ import ( autoscalingv1 "k8s.io/api/autoscaling/v1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" autoscalingv1client "k8s.io/client-go/kubernetes/typed/autoscaling/v1" + "k8s.io/client-go/scale" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/generate" generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned" - "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -66,7 +66,7 @@ type AutoscaleOptions struct { Generator string Min int32 Max int32 - CpuPercent int32 + CPUPercent int32 createAnnotation bool args []string @@ -74,10 +74,10 @@ type AutoscaleOptions struct { namespace string dryRun bool builder *resource.Builder - canBeAutoscaled polymorphichelpers.CanBeAutoscaledFunc generatorFunc func(string, *meta.RESTMapping) (generate.StructuredGenerator, error) - HPAClient autoscalingv1client.HorizontalPodAutoscalersGetter + HPAClient autoscalingv1client.HorizontalPodAutoscalersGetter + scaleKindResolver scale.ScaleKindResolver genericclioptions.IOStreams } @@ -120,7 +120,7 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) * cmd.Flags().Int32Var(&o.Min, "min", -1, "The lower limit for the number of pods that can be set by the autoscaler. If it's not specified or negative, the server will apply a default value.") cmd.Flags().Int32Var(&o.Max, "max", -1, "The upper limit for the number of pods that can be set by the autoscaler. Required.") cmd.MarkFlagRequired("max") - cmd.Flags().Int32Var(&o.CpuPercent, "cpu-percent", -1, fmt.Sprintf("The target average CPU utilization (represented as a percent of requested CPU) over all the pods. If it's not specified or negative, a default autoscaling policy will be used.")) + cmd.Flags().Int32Var(&o.CPUPercent, "cpu-percent", -1, fmt.Sprintf("The target average CPU utilization (represented as a percent of requested CPU) over all the pods. If it's not specified or negative, a default autoscaling policy will be used.")) cmd.Flags().StringVar(&o.Name, "name", "", i18n.T("The name for the newly created object. If not specified, the name of the input resource will be used.")) cmdutil.AddDryRunFlag(cmd) cmdutil.AddFilenameOptionFlags(cmd, o.FilenameOptions, "identifying the resource to autoscale.") @@ -133,7 +133,11 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args o.dryRun = cmdutil.GetFlagBool(cmd, "dry-run") o.createAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag) o.builder = f.NewBuilder() - o.canBeAutoscaled = polymorphichelpers.CanBeAutoscaledFn + discoveryClient, err := f.ToDiscoveryClient() + if err != nil { + return err + } + o.scaleKindResolver = scale.NewDiscoveryScaleKindResolver(discoveryClient) o.args = args o.RecordFlags.Complete(cmd) @@ -156,7 +160,7 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args Name: name, MinReplicas: o.Min, MaxReplicas: o.Max, - CPUPercent: o.CpuPercent, + CPUPercent: o.CPUPercent, ScaleRefName: name, ScaleRefKind: mapping.GroupVersionKind.Kind, ScaleRefAPIVersion: mapping.GroupVersionKind.GroupVersion().String(), @@ -196,7 +200,7 @@ func (o *AutoscaleOptions) Validate() error { func (o *AutoscaleOptions) Run() error { r := o.builder. - WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). + Unstructured(). ContinueOnError(). NamespaceParam(o.namespace).DefaultNamespace(). FilenameParam(o.enforceNamespace, o.FilenameOptions). @@ -214,8 +218,9 @@ func (o *AutoscaleOptions) Run() error { } mapping := info.ResourceMapping() - if err := o.canBeAutoscaled(mapping.GroupVersionKind.GroupKind()); err != nil { - return err + gvr := mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource.Resource) + if _, err := o.scaleKindResolver.ScaleForResource(gvr); err != nil { + return fmt.Errorf("cannot autoscale a %v: %v", mapping.GroupVersionKind.Kind, err) } generator, err := o.generatorFunc(info.Name, mapping) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/BUILD index 75c6f694fb2..dc5bd147745 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/BUILD @@ -15,8 +15,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/certificates.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/certificates.go index fabc8d60da7..b407b040cf3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/certificates.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/certificates/certificates.go @@ -27,8 +27,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" certificatesv1beta1client "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -68,6 +68,14 @@ type CertificateOptions struct { genericclioptions.IOStreams } +// NewCertificateOptions creates the options for certificate +func NewCertificateOptions(ioStreams genericclioptions.IOStreams) *CertificateOptions { + return &CertificateOptions{ + PrintFlags: genericclioptions.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme), + IOStreams: ioStreams, + } +} + func (o *CertificateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.csrNames = args o.outputStyle = cmdutil.GetFlagString(cmd, "output") @@ -96,17 +104,15 @@ func (o *CertificateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg } func (o *CertificateOptions) Validate() error { - if len(o.csrNames) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.csrNames) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("one or more CSRs must be specified as or -f ") } return nil } func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := CertificateOptions{ - PrintFlags: genericclioptions.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme), - IOStreams: ioStreams, - } + o := NewCertificateOptions(ioStreams) + cmd := &cobra.Command{ Use: "approve (-f FILENAME | NAME)", DisableFlagsInUseLine: true, @@ -124,16 +130,16 @@ func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOS signed certificate can do. `), Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.Validate()) - cmdutil.CheckErr(options.RunCertificateApprove(cmdutil.GetFlagBool(cmd, "force"))) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.Validate()) + cmdutil.CheckErr(o.RunCertificateApprove(cmdutil.GetFlagBool(cmd, "force"))) }, } - options.PrintFlags.AddFlags(cmd) + o.PrintFlags.AddFlags(cmd) cmd.Flags().Bool("force", false, "Update the CSR even if it is already approved.") - cmdutil.AddFilenameOptionFlags(cmd, &options.FilenameOptions, "identifying the resource to update") + cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "identifying the resource to update") return cmd } @@ -160,10 +166,8 @@ func (o *CertificateOptions) RunCertificateApprove(force bool) error { } func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := CertificateOptions{ - PrintFlags: genericclioptions.NewPrintFlags("denied").WithTypeSetter(scheme.Scheme), - IOStreams: ioStreams, - } + o := NewCertificateOptions(ioStreams) + cmd := &cobra.Command{ Use: "deny (-f FILENAME | NAME)", DisableFlagsInUseLine: true, @@ -176,16 +180,16 @@ func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStre not to issue a certificate to the requestor. `), Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.Validate()) - cmdutil.CheckErr(options.RunCertificateDeny(cmdutil.GetFlagBool(cmd, "force"))) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.Validate()) + cmdutil.CheckErr(o.RunCertificateDeny(cmdutil.GetFlagBool(cmd, "force"))) }, } - options.PrintFlags.AddFlags(cmd) + o.PrintFlags.AddFlags(cmd) cmd.Flags().Bool("force", false, "Update the CSR even if it is already denied.") - cmdutil.AddFilenameOptionFlags(cmd, &options.FilenameOptions, "identifying the resource to update") + cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "identifying the resource to update") return cmd } @@ -211,13 +215,13 @@ func (o *CertificateOptions) RunCertificateDeny(force bool) error { }) } -func (options *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet certificatesv1beta1client.CertificatesV1beta1Interface, force bool, modify func(csr *certificatesv1beta1.CertificateSigningRequest) (*certificatesv1beta1.CertificateSigningRequest, bool)) error { +func (o *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet certificatesv1beta1client.CertificatesV1beta1Interface, force bool, modify func(csr *certificatesv1beta1.CertificateSigningRequest) (*certificatesv1beta1.CertificateSigningRequest, bool)) error { var found int r := builder. WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). ContinueOnError(). - FilenameParam(false, &options.FilenameOptions). - ResourceNames("certificatesigningrequest", options.csrNames...). + FilenameParam(false, &o.FilenameOptions). + ResourceNames("certificatesigningrequest", o.csrNames...). RequireObject(true). Flatten(). Latest(). @@ -245,10 +249,10 @@ func (options *CertificateOptions) modifyCertificateCondition(builder *resource. } found++ - return options.PrintObj(info.Object, options.Out) + return o.PrintObj(info.Object, o.Out) }) if found == 0 { - fmt.Fprintf(options.Out, "No resources found\n") + fmt.Fprintf(o.Out, "No resources found\n") } return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/BUILD index 0c5fe588f20..91f9e953be4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/BUILD @@ -18,8 +18,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo.go index 833c81936ca..6800039fe19 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo.go @@ -25,7 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" restclient "k8s.io/client-go/rest" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo_dump.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo_dump.go index c79e2a972f8..c002cc3ee42 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo_dump.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo/clusterinfo_dump.go @@ -28,7 +28,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" appsv1client "k8s.io/client-go/kubernetes/typed/apps/v1" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -61,7 +61,6 @@ type ClusterInfoDumpOptions struct { genericclioptions.IOStreams } -// NewCmdCreateSecret groups subcommands to create various types of secrets func NewCmdClusterInfoDump(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := &ClusterInfoDumpOptions{ PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme).WithDefaultOutput("json"), @@ -84,7 +83,7 @@ func NewCmdClusterInfoDump(f cmdutil.Factory, ioStreams genericclioptions.IOStre cmd.Flags().StringVar(&o.OutputDir, "output-directory", o.OutputDir, i18n.T("Where to output the files. If empty or '-' uses stdout, otherwise creates a directory hierarchy in that directory")) cmd.Flags().StringSliceVar(&o.Namespaces, "namespaces", o.Namespaces, "A comma separated list of namespaces to dump.") - cmd.Flags().BoolVar(&o.AllNamespaces, "all-namespaces", o.AllNamespaces, "If true, dump all namespaces. If true, --namespaces is ignored.") + cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If true, dump all namespaces. If true, --namespaces is ignored.") cmdutil.AddPodRunningTimeoutFlag(cmd, defaultPodLogsTimeout) return cmd } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cmd.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cmd.go index aa2879c961b..f844dda4061 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cmd.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cmd.go @@ -22,14 +22,13 @@ import ( "io" "os" "os/exec" - "runtime" "strings" "syscall" "github.com/spf13/cobra" - utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" + cliflag "k8s.io/component-base/cli/flag" "k8s.io/kubernetes/pkg/kubectl/cmd/annotate" "k8s.io/kubernetes/pkg/kubectl/cmd/apiresources" "k8s.io/kubernetes/pkg/kubectl/cmd/apply" @@ -246,11 +245,11 @@ __custom_func() { __kubectl_get_resource return ;; - kubectl_logs | kubectl_attach) + kubectl_logs) __kubectl_require_pod_and_container return ;; - kubectl_exec | kubectl_port-forward | kubectl_top_pod) + kubectl_exec | kubectl_port-forward | kubectl_top_pod | kubectl_attach) __kubectl_get_resource_pod return ;; @@ -292,7 +291,7 @@ var ( // NewDefaultKubectlCommand creates the `kubectl` command with default arguments func NewDefaultKubectlCommand() *cobra.Command { - return NewDefaultKubectlCommandWithArgs(&defaultPluginHandler{}, os.Args, os.Stdin, os.Stdout, os.Stderr) + return NewDefaultKubectlCommandWithArgs(NewDefaultPluginHandler(plugin.ValidPluginFilenamePrefixes), os.Args, os.Stdin, os.Stdout, os.Stderr) } // NewDefaultKubectlCommandWithArgs creates the `kubectl` command with arguments @@ -309,7 +308,7 @@ func NewDefaultKubectlCommandWithArgs(pluginHandler PluginHandler, args []string // only look for suitable extension executables if // the specified command does not already exist if _, _, err := cmd.Find(cmdPathPieces); err != nil { - if err := handleEndpointExtensions(pluginHandler, cmdPathPieces); err != nil { + if err := HandlePluginCommand(pluginHandler, cmdPathPieces); err != nil { fmt.Fprintf(errout, "%v\n", err) os.Exit(1) } @@ -323,35 +322,51 @@ func NewDefaultKubectlCommandWithArgs(pluginHandler PluginHandler, args []string // and performing executable filename lookups to search // for valid plugin files, and execute found plugins. type PluginHandler interface { - // Lookup receives a potential filename and returns - // a full or relative path to an executable, if one - // exists at the given filename, or an error. - Lookup(filename string) (string, error) + // exists at the given filename, or a boolean false. + // Lookup will iterate over a list of given prefixes + // in order to recognize valid plugin filenames. + // The first filepath to match a prefix is returned. + Lookup(filename string) (string, bool) // Execute receives an executable's filepath, a slice // of arguments, and a slice of environment variables // to relay to the executable. Execute(executablePath string, cmdArgs, environment []string) error } -type defaultPluginHandler struct{} +// DefaultPluginHandler implements PluginHandler +type DefaultPluginHandler struct { + ValidPrefixes []string +} + +// NewDefaultPluginHandler instantiates the DefaultPluginHandler with a list of +// given filename prefixes used to identify valid plugin filenames. +func NewDefaultPluginHandler(validPrefixes []string) *DefaultPluginHandler { + return &DefaultPluginHandler{ + ValidPrefixes: validPrefixes, + } +} // Lookup implements PluginHandler -func (h *defaultPluginHandler) Lookup(filename string) (string, error) { - // if on Windows, append the "exe" extension - // to the filename that we are looking up. - if runtime.GOOS == "windows" { - filename = filename + ".exe" +func (h *DefaultPluginHandler) Lookup(filename string) (string, bool) { + for _, prefix := range h.ValidPrefixes { + path, err := exec.LookPath(fmt.Sprintf("%s-%s", prefix, filename)) + if err != nil || len(path) == 0 { + continue + } + return path, true } - return exec.LookPath(filename) + return "", false } // Execute implements PluginHandler -func (h *defaultPluginHandler) Execute(executablePath string, cmdArgs, environment []string) error { +func (h *DefaultPluginHandler) Execute(executablePath string, cmdArgs, environment []string) error { return syscall.Exec(executablePath, cmdArgs, environment) } -func handleEndpointExtensions(pluginHandler PluginHandler, cmdArgs []string) error { +// HandlePluginCommand receives a pluginHandler and command-line arguments and attempts to find +// a plugin executable on the PATH that satisfies the given arguments. +func HandlePluginCommand(pluginHandler PluginHandler, cmdArgs []string) error { remainingArgs := []string{} // all "non-flag" arguments for idx := range cmdArgs { @@ -365,8 +380,8 @@ func handleEndpointExtensions(pluginHandler PluginHandler, cmdArgs []string) err // attempt to find binary, starting at longest possible name with given cmdArgs for len(remainingArgs) > 0 { - path, err := pluginHandler.Lookup(fmt.Sprintf("kubectl-%s", strings.Join(remainingArgs, "-"))) - if err != nil || len(path) == 0 { + path, found := pluginHandler.Lookup(strings.Join(remainingArgs, "-")) + if !found { remainingArgs = remainingArgs[:len(remainingArgs)-1] continue } @@ -413,15 +428,15 @@ func NewKubectlCommand(in io.Reader, out, err io.Writer) *cobra.Command { } flags := cmds.PersistentFlags() - flags.SetNormalizeFunc(utilflag.WarnWordSepNormalizeFunc) // Warn for "_" flags + flags.SetNormalizeFunc(cliflag.WarnWordSepNormalizeFunc) // Warn for "_" flags // Normalize all flags that are coming from other packages or pre-configurations // a.k.a. change all "_" to "-". e.g. glog package - flags.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + flags.SetNormalizeFunc(cliflag.WordSepNormalizeFunc) addProfilingFlags(flags) - kubeConfigFlags := genericclioptions.NewConfigFlags().WithDeprecatedPasswordFlag() + kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag() kubeConfigFlags.AddFlags(flags) matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags) matchVersionKubeConfigFlags.AddFlags(cmds.PersistentFlags()) @@ -438,7 +453,7 @@ func NewKubectlCommand(in io.Reader, out, err io.Writer) *cobra.Command { i18n.LoadTranslations("kubectl", nil) // From this point and forward we get warnings on flags that contain "_" separators - cmds.SetGlobalNormalizationFunc(utilflag.WarnWordSepNormalizeFunc) + cmds.SetGlobalNormalizationFunc(cliflag.WarnWordSepNormalizeFunc) ioStreams := genericclioptions.IOStreams{In: in, Out: out, ErrOut: err} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/completion/completion.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/completion/completion.go index cd8fd36e0f1..db31689dfc3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/completion/completion.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/completion/completion.go @@ -44,7 +44,7 @@ const defaultBoilerPlate = ` ` var ( - completion_long = templates.LongDesc(i18n.T(` + completionLong = templates.LongDesc(i18n.T(` Output shell completion code for the specified shell (bash or zsh). The shell code must be evaluated to provide interactive completion of kubectl commands. This can be done by sourcing it from @@ -55,7 +55,7 @@ var ( Note for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2`)) - completion_example = templates.Examples(i18n.T(` + completionExample = templates.Examples(i18n.T(` # Installing bash completion on macOS using homebrew ## If running Bash 3.2 included with macOS brew install bash-completion @@ -86,15 +86,16 @@ var ( ) var ( - completion_shells = map[string]func(out io.Writer, boilerPlate string, cmd *cobra.Command) error{ + completionShells = map[string]func(out io.Writer, boilerPlate string, cmd *cobra.Command) error{ "bash": runCompletionBash, "zsh": runCompletionZsh, } ) +// NewCmdCompletion creates the `completion` command func NewCmdCompletion(out io.Writer, boilerPlate string) *cobra.Command { shells := []string{} - for s := range completion_shells { + for s := range completionShells { shells = append(shells, s) } @@ -102,8 +103,8 @@ func NewCmdCompletion(out io.Writer, boilerPlate string) *cobra.Command { Use: "completion SHELL", DisableFlagsInUseLine: true, Short: i18n.T("Output shell completion code for the specified shell (bash or zsh)"), - Long: completion_long, - Example: completion_example, + Long: completionLong, + Example: completionExample, Run: func(cmd *cobra.Command, args []string) { err := RunCompletion(out, boilerPlate, cmd, args) cmdutil.CheckErr(err) @@ -114,6 +115,7 @@ func NewCmdCompletion(out io.Writer, boilerPlate string) *cobra.Command { return cmd } +// RunCompletion checks given arguments and executes command func RunCompletion(out io.Writer, boilerPlate string, cmd *cobra.Command, args []string) error { if len(args) == 0 { return cmdutil.UsageErrorf(cmd, "Shell not specified.") @@ -121,7 +123,7 @@ func RunCompletion(out io.Writer, boilerPlate string, cmd *cobra.Command, args [ if len(args) > 1 { return cmdutil.UsageErrorf(cmd, "Too many arguments. Expected only the shell type.") } - run, found := completion_shells[args[0]] + run, found := completionShells[args[0]] if !found { return cmdutil.UsageErrorf(cmd, "Unsupported shell type %q.", args[0]) } @@ -141,9 +143,9 @@ func runCompletionBash(out io.Writer, boilerPlate string, kubectl *cobra.Command } func runCompletionZsh(out io.Writer, boilerPlate string, kubectl *cobra.Command) error { - zsh_head := "#compdef kubectl\n" + zshHead := "#compdef kubectl\n" - out.Write([]byte(zsh_head)) + out.Write([]byte(zshHead)) if len(boilerPlate) == 0 { boilerPlate = defaultBoilerPlate @@ -152,7 +154,7 @@ func runCompletionZsh(out io.Writer, boilerPlate string, kubectl *cobra.Command) return err } - zsh_initialization := ` + zshInitialization := ` __kubectl_bash_source() { alias shopt=':' alias _expand=_bash_expand @@ -294,19 +296,19 @@ __kubectl_convert_bash_to_zsh() { -e "s/\\\$(type${RWORD}/\$(__kubectl_type/g" \ <<'BASH_COMPLETION_EOF' ` - out.Write([]byte(zsh_initialization)) + out.Write([]byte(zshInitialization)) buf := new(bytes.Buffer) kubectl.GenBashCompletion(buf) out.Write(buf.Bytes()) - zsh_tail := ` + zshTail := ` BASH_COMPLETION_EOF } __kubectl_bash_source <(__kubectl_convert_bash_to_zsh) _complete kubectl 2>/dev/null ` - out.Write([]byte(zsh_tail)) + out.Write([]byte(zshTail)) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/BUILD index 14396a12857..384bd2015c0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/BUILD @@ -35,12 +35,13 @@ go_library( "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api/latest:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) @@ -69,10 +70,10 @@ go_test( "//pkg/kubectl/cmd/util:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/config.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/config.go index 4e1b63e623f..7a977dfd84b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/config.go @@ -46,7 +46,7 @@ func NewCmdConfig(f cmdutil.Factory, pathOptions *clientcmd.PathOptions, streams The loading order follows these rules: 1. If the --` + pathOptions.ExplicitFileFlag + ` flag is set, then only that file is loaded. The flag may only be set once and no merging takes place. - 2. If $` + pathOptions.EnvVar + ` environment variable is set, then it is used as a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list. + 2. If $` + pathOptions.EnvVar + ` environment variable is set, then it is used as a list of paths (normal path delimiting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list. 3. Otherwise, ` + path.Join("${HOME}", pathOptions.GlobalFileSubpath) + ` is used and no merging takes place.`), Run: cmdutil.DefaultSubCommandRun(streams.ErrOut), } @@ -88,5 +88,5 @@ func toBool(propertyValue string) (bool, error) { func helpErrorf(cmd *cobra.Command, format string, args ...interface{}) error { cmd.Help() msg := fmt.Sprintf(format, args...) - return fmt.Errorf("%s\n", msg) + return fmt.Errorf("%s", msg) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_authinfo.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_authinfo.go index 0dca066c1fd..475684b9247 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_authinfo.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_authinfo.go @@ -26,9 +26,9 @@ import ( "github.com/spf13/cobra" - "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -37,14 +37,14 @@ import ( type createAuthInfoOptions struct { configAccess clientcmd.ConfigAccess name string - authPath flag.StringFlag - clientCertificate flag.StringFlag - clientKey flag.StringFlag - token flag.StringFlag - username flag.StringFlag - password flag.StringFlag - embedCertData flag.Tristate - authProvider flag.StringFlag + authPath cliflag.StringFlag + clientCertificate cliflag.StringFlag + clientKey cliflag.StringFlag + token cliflag.StringFlag + username cliflag.StringFlag + password cliflag.StringFlag + embedCertData cliflag.Tristate + authProvider cliflag.StringFlag authProviderArgs map[string]string authProviderArgsToRemove []string @@ -56,7 +56,7 @@ const ( ) var ( - create_authinfo_long = fmt.Sprintf(templates.LongDesc(` + createAuthInfoLong = fmt.Sprintf(templates.LongDesc(` Sets a user entry in kubeconfig Specifying a name that already exists will merge new fields on top of existing values. @@ -72,7 +72,7 @@ var ( Bearer token and basic auth are mutually exclusive.`), clientcmd.FlagCertFile, clientcmd.FlagKeyFile, clientcmd.FlagBearerToken, clientcmd.FlagUsername, clientcmd.FlagPassword) - create_authinfo_example = templates.Examples(` + createAuthInfoExample = templates.Examples(` # Set only the "client-key" field on the "cluster-admin" # entry, without touching other values: kubectl config set-credentials cluster-admin --client-key=~/.kube/admin.key @@ -93,6 +93,7 @@ var ( kubectl config set-credentials cluster-admin --auth-provider=oidc --auth-provider-arg=client-secret-`) ) +// NewCmdConfigSetAuthInfo returns an Command option instance for 'config set-credentials' sub command func NewCmdConfigSetAuthInfo(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &createAuthInfoOptions{configAccess: configAccess} return newCmdConfigSetAuthInfo(out, options) @@ -103,8 +104,8 @@ func newCmdConfigSetAuthInfo(out io.Writer, options *createAuthInfoOptions) *cob Use: fmt.Sprintf("set-credentials NAME [--%v=path/to/certfile] [--%v=path/to/keyfile] [--%v=bearer_token] [--%v=basic_user] [--%v=basic_password] [--%v=provider_name] [--%v=key=value]", clientcmd.FlagCertFile, clientcmd.FlagKeyFile, clientcmd.FlagBearerToken, clientcmd.FlagUsername, clientcmd.FlagPassword, flagAuthProvider, flagAuthProviderArg), DisableFlagsInUseLine: true, Short: i18n.T("Sets a user entry in kubeconfig"), - Long: create_authinfo_long, - Example: create_authinfo_example, + Long: createAuthInfoLong, + Example: createAuthInfoExample, Run: func(cmd *cobra.Command, args []string) { err := options.complete(cmd, out) if err != nil { @@ -247,13 +248,13 @@ func (o *createAuthInfoOptions) complete(cmd *cobra.Command, out io.Writer) erro authProviderArgs, err := cmd.Flags().GetStringSlice(flagAuthProviderArg) if err != nil { - return fmt.Errorf("Error: %s\n", err) + return fmt.Errorf("Error: %s", err) } if len(authProviderArgs) > 0 { newPairs, removePairs, err := cmdutil.ParsePairs(authProviderArgs, flagAuthProviderArg, true) if err != nil { - return fmt.Errorf("Error: %s\n", err) + return fmt.Errorf("Error: %s", err) } o.authProviderArgs = newPairs o.authProviderArgsToRemove = removePairs diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_cluster.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_cluster.go index a07dfd6c772..e2f084c22b8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_cluster.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_cluster.go @@ -25,9 +25,9 @@ import ( "github.com/spf13/cobra" - "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -36,19 +36,19 @@ import ( type createClusterOptions struct { configAccess clientcmd.ConfigAccess name string - server flag.StringFlag - insecureSkipTLSVerify flag.Tristate - certificateAuthority flag.StringFlag - embedCAData flag.Tristate + server cliflag.StringFlag + insecureSkipTLSVerify cliflag.Tristate + certificateAuthority cliflag.StringFlag + embedCAData cliflag.Tristate } var ( - create_cluster_long = templates.LongDesc(` + createClusterLong = templates.LongDesc(` Sets a cluster entry in kubeconfig. Specifying a name that already exists will merge new fields on top of existing values for those fields.`) - create_cluster_example = templates.Examples(` + createClusterExample = templates.Examples(` # Set only the server field on the e2e cluster entry without touching other values. kubectl config set-cluster e2e --server=https://1.2.3.4 @@ -59,6 +59,7 @@ var ( kubectl config set-cluster e2e --insecure-skip-tls-verify=true`) ) +// NewCmdConfigSetCluster returns a Command instance for 'config set-cluster' sub command func NewCmdConfigSetCluster(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &createClusterOptions{configAccess: configAccess} @@ -66,8 +67,8 @@ func NewCmdConfigSetCluster(out io.Writer, configAccess clientcmd.ConfigAccess) Use: fmt.Sprintf("set-cluster NAME [--%v=server] [--%v=path/to/certificate/authority] [--%v=true]", clientcmd.FlagAPIServer, clientcmd.FlagCAFile, clientcmd.FlagInsecure), DisableFlagsInUseLine: true, Short: i18n.T("Sets a cluster entry in kubeconfig"), - Long: create_cluster_long, - Example: create_cluster_example, + Long: createClusterLong, + Example: createClusterExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(options.complete(cmd)) cmdutil.CheckErr(options.run()) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_context.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_context.go index 50b965cc629..7453151d095 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_context.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/create_context.go @@ -23,9 +23,9 @@ import ( "github.com/spf13/cobra" - "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -35,22 +35,23 @@ type createContextOptions struct { configAccess clientcmd.ConfigAccess name string currContext bool - cluster flag.StringFlag - authInfo flag.StringFlag - namespace flag.StringFlag + cluster cliflag.StringFlag + authInfo cliflag.StringFlag + namespace cliflag.StringFlag } var ( - create_context_long = templates.LongDesc(` + createContextLong = templates.LongDesc(` Sets a context entry in kubeconfig Specifying a name that already exists will merge new fields on top of existing values for those fields.`) - create_context_example = templates.Examples(` + createContextExample = templates.Examples(` # Set the user field on the gce context entry without touching other values kubectl config set-context gce --user=cluster-admin`) ) +// NewCmdConfigSetContext returns a Command instance for 'config set-context' sub command func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &createContextOptions{configAccess: configAccess} @@ -58,8 +59,8 @@ func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess) Use: fmt.Sprintf("set-context [NAME | --current] [--%v=cluster_nickname] [--%v=user_nickname] [--%v=namespace]", clientcmd.FlagClusterName, clientcmd.FlagAuthInfoName, clientcmd.FlagNamespace), DisableFlagsInUseLine: true, Short: i18n.T("Sets a context entry in kubeconfig"), - Long: create_context_long, - Example: create_context_example, + Long: createContextLong, + Example: createContextExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(options.complete(cmd)) name, exists, err := options.run() diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/current_context.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/current_context.go index 3751d8b25c9..eb2bb82606b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/current_context.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/current_context.go @@ -28,36 +28,38 @@ import ( "k8s.io/kubernetes/pkg/kubectl/util/templates" ) +// CurrentContextOptions holds the command-line options for 'config current-context' sub command type CurrentContextOptions struct { ConfigAccess clientcmd.ConfigAccess } var ( - current_context_long = templates.LongDesc(` + currentContextLong = templates.LongDesc(` Displays the current-context`) - current_context_example = templates.Examples(` + currentContextExample = templates.Examples(` # Display the current-context kubectl config current-context`) ) +// NewCmdConfigCurrentContext returns a Command instance for 'config current-context' sub command func NewCmdConfigCurrentContext(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &CurrentContextOptions{ConfigAccess: configAccess} cmd := &cobra.Command{ Use: "current-context", Short: i18n.T("Displays the current-context"), - Long: current_context_long, - Example: current_context_example, + Long: currentContextLong, + Example: currentContextExample, Run: func(cmd *cobra.Command, args []string) { - err := RunCurrentContext(out, options) - cmdutil.CheckErr(err) + cmdutil.CheckErr(RunCurrentContext(out, options)) }, } return cmd } +// RunCurrentContext performs the execution of 'config current-context' sub command func RunCurrentContext(out io.Writer, options *CurrentContextOptions) error { config, err := options.ConfigAccess.GetStartingConfig() if err != nil { @@ -65,7 +67,7 @@ func RunCurrentContext(out io.Writer, options *CurrentContextOptions) error { } if config.CurrentContext == "" { - err = fmt.Errorf("current-context is not set\n") + err = fmt.Errorf("current-context is not set") return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_cluster.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_cluster.go index 9ae52e87c11..797fe11b8be 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_cluster.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_cluster.go @@ -28,21 +28,21 @@ import ( ) var ( - delete_cluster_example = templates.Examples(` + deleteClusterExample = templates.Examples(` # Delete the minikube cluster kubectl config delete-cluster minikube`) ) +// NewCmdConfigDeleteCluster returns a Command instance for 'config delete-cluster' sub command func NewCmdConfigDeleteCluster(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { cmd := &cobra.Command{ Use: "delete-cluster NAME", DisableFlagsInUseLine: true, Short: i18n.T("Delete the specified cluster from the kubeconfig"), Long: "Delete the specified cluster from the kubeconfig", - Example: delete_cluster_example, + Example: deleteClusterExample, Run: func(cmd *cobra.Command, args []string) { - err := runDeleteCluster(out, configAccess, cmd) - cmdutil.CheckErr(err) + cmdutil.CheckErr(runDeleteCluster(out, configAccess, cmd)) }, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_context.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_context.go index 76ae529fd7e..b9c6fefd7b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_context.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/delete_context.go @@ -28,21 +28,21 @@ import ( ) var ( - delete_context_example = templates.Examples(` + deleteContextExample = templates.Examples(` # Delete the context for the minikube cluster kubectl config delete-context minikube`) ) +// NewCmdConfigDeleteContext returns a Command instance for 'config delete-context' sub command func NewCmdConfigDeleteContext(out, errOut io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { cmd := &cobra.Command{ Use: "delete-context NAME", DisableFlagsInUseLine: true, Short: i18n.T("Delete the specified context from the kubeconfig"), Long: "Delete the specified context from the kubeconfig", - Example: delete_context_example, + Example: deleteContextExample, Run: func(cmd *cobra.Command, args []string) { - err := runDeleteContext(out, errOut, configAccess, cmd) - cmdutil.CheckErr(err) + cmdutil.CheckErr(runDeleteContext(out, errOut, configAccess, cmd)) }, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_clusters.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_clusters.go index bbaebf9e7a7..d8d36d916a9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_clusters.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_clusters.go @@ -28,7 +28,7 @@ import ( ) var ( - get_clusters_example = templates.Examples(` + getClustersExample = templates.Examples(` # List the clusters kubectl knows about kubectl config get-clusters`) ) @@ -40,10 +40,9 @@ func NewCmdConfigGetClusters(out io.Writer, configAccess clientcmd.ConfigAccess) Use: "get-clusters", Short: i18n.T("Display clusters defined in the kubeconfig"), Long: "Display clusters defined in the kubeconfig.", - Example: get_clusters_example, + Example: getClustersExample, Run: func(cmd *cobra.Command, args []string) { - err := runGetClusters(out, configAccess) - cmdutil.CheckErr(err) + cmdutil.CheckErr(runGetClusters(out, configAccess)) }, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_contexts.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_contexts.go index 30f53db7945..0e59ac3fc73 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_contexts.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/get_contexts.go @@ -21,8 +21,8 @@ import ( "io" "sort" "strings" - "text/tabwriter" + "github.com/liggitt/tabwriter" "github.com/spf13/cobra" utilerrors "k8s.io/apimachinery/pkg/util/errors" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/rename_context.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/rename_context.go index 535a811102e..519b12456bc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/rename_context.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/rename_context.go @@ -48,7 +48,7 @@ var ( CONTEXT_NAME is the context name that you wish change. NEW_NAME is the new name you wish to set. - + Note: In case the context being renamed is the 'current-context', this field will also be updated.`) renameContextExample = templates.Examples(` @@ -67,15 +67,9 @@ func NewCmdConfigRenameContext(out io.Writer, configAccess clientcmd.ConfigAcces Long: renameContextLong, Example: renameContextExample, Run: func(cmd *cobra.Command, args []string) { - if err := options.Complete(cmd, args, out); err != nil { - cmdutil.CheckErr(err) - } - if err := options.Validate(); err != nil { - cmdutil.CheckErr(cmdutil.UsageErrorf(cmd, err.Error())) - } - if err := options.RunRenameContext(out); err != nil { - cmdutil.CheckErr(err) - } + cmdutil.CheckErr(options.Complete(cmd, args, out)) + cmdutil.CheckErr(options.Validate()) + cmdutil.CheckErr(options.RunRenameContext(out)) }, } return cmd @@ -92,6 +86,7 @@ func (o *RenameContextOptions) Complete(cmd *cobra.Command, args []string, out i return nil } +// Validate makes sure that provided values for command-line options are valid func (o RenameContextOptions) Validate() error { if len(o.newName) == 0 { return errors.New("You must specify a new non-empty context name") @@ -99,6 +94,7 @@ func (o RenameContextOptions) Validate() error { return nil } +// RunRenameContext performs the execution for 'config rename-context' sub command func (o RenameContextOptions) RunRenameContext(out io.Writer) error { config, err := o.configAccess.GetStartingConfig() if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/set.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/set.go index 9117402bba1..4f728b40bf1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/set.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/set.go @@ -26,8 +26,8 @@ import ( "github.com/spf13/cobra" - "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -37,16 +37,34 @@ type setOptions struct { configAccess clientcmd.ConfigAccess propertyName string propertyValue string - setRawBytes flag.Tristate + setRawBytes cliflag.Tristate } -var set_long = templates.LongDesc(` +var ( + setLong = templates.LongDesc(` Sets an individual value in a kubeconfig file PROPERTY_NAME is a dot delimited name where each token represents either an attribute name or a map key. Map keys may not contain dots. - PROPERTY_VALUE is the new value you wish to set. Binary fields such as 'certificate-authority-data' expect a base64 encoded string unless the --set-raw-bytes flag is used.`) + PROPERTY_VALUE is the new value you wish to set. Binary fields such as 'certificate-authority-data' expect a base64 encoded string unless the --set-raw-bytes flag is used. + Specifying a attribute name that already exists will merge new fields on top of existing values.`) + + setExample = templates.Examples(` + # Set server field on the my-cluster cluster to https://1.2.3.4 + kubectl config set clusters.my-cluster.server https://1.2.3.4 + + # Set certificate-authority-data field on the my-cluster cluster. + kubectl config set clusters.my-cluster.certificate-authority-data $(echo "cert_data_here" | base64 -i -) + + # Set cluster field in the my-context context to my-cluster. + kubectl config set contexts.my-context.cluster my-cluster + + # Set client-key-data field in the cluster-admin user using --set-raw-bytes option. + kubectl config set users.cluster-admin.client-key-data cert_data_here --set-raw-bytes=true`) +) + +// NewCmdConfigSet returns a Command instance for 'config set' sub command func NewCmdConfigSet(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &setOptions{configAccess: configAccess} @@ -54,7 +72,8 @@ func NewCmdConfigSet(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra. Use: "set PROPERTY_NAME PROPERTY_VALUE", DisableFlagsInUseLine: true, Short: i18n.T("Sets an individual value in a kubeconfig file"), - Long: set_long, + Long: setLong, + Example: setExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(options.complete(cmd)) cmdutil.CheckErr(options.run()) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/unset.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/unset.go index 02a519cb42c..838957831c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/unset.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/unset.go @@ -49,6 +49,7 @@ var ( kubectl config unset contexts.foo.namespace`) ) +// NewCmdConfigUnset returns a Command instance for 'config unset' sub command func NewCmdConfigUnset(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &unsetOptions{configAccess: configAccess} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/use_context.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/use_context.go index b22251af261..0ff5a8e2536 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/use_context.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/use_context.go @@ -31,7 +31,7 @@ import ( ) var ( - use_context_example = templates.Examples(` + useContextExample = templates.Examples(` # Use the context for the minikube cluster kubectl config use-context minikube`) ) @@ -41,6 +41,7 @@ type useContextOptions struct { contextName string } +// NewCmdConfigUseContext returns a Command instance for 'config use-context' sub command func NewCmdConfigUseContext(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { options := &useContextOptions{configAccess: configAccess} @@ -50,7 +51,7 @@ func NewCmdConfigUseContext(out io.Writer, configAccess clientcmd.ConfigAccess) Short: i18n.T("Sets the current-context in a kubeconfig file"), Aliases: []string{"use"}, Long: `Sets the current-context in a kubeconfig file`, - Example: use_context_example, + Example: useContextExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(options.complete(cmd)) cmdutil.CheckErr(options.run()) @@ -98,5 +99,5 @@ func (o useContextOptions) validate(config *clientcmdapi.Config) error { } } - return fmt.Errorf("no context exists with the name: %q.", o.contextName) + return fmt.Errorf("no context exists with the name: %q", o.contextName) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/view.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/view.go index 7017cb6a9cf..be5072e7f25 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/view.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/config/view.go @@ -21,24 +21,25 @@ import ( "github.com/spf13/cobra" - "k8s.io/apiserver/pkg/util/flag" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/tools/clientcmd/api/latest" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) +// ViewOptions holds the command-line options for 'config view' sub command type ViewOptions struct { PrintFlags *genericclioptions.PrintFlags PrintObject printers.ResourcePrinterFunc ConfigAccess clientcmd.ConfigAccess - Merge flag.Tristate + Merge cliflag.Tristate Flatten bool Minify bool RawByteData bool @@ -50,12 +51,12 @@ type ViewOptions struct { } var ( - view_long = templates.LongDesc(` + viewLong = templates.LongDesc(` Display merged kubeconfig settings or a specified kubeconfig file. You can use --output jsonpath={...} to extract specific values using a jsonpath expression.`) - view_example = templates.Examples(` + viewExample = templates.Examples(` # Show merged kubeconfig settings. kubectl config view @@ -68,6 +69,7 @@ var ( defaultOutputFormat = "yaml" ) +// NewCmdConfigView returns a Command instance for 'config view' sub command func NewCmdConfigView(f cmdutil.Factory, streams genericclioptions.IOStreams, ConfigAccess clientcmd.ConfigAccess) *cobra.Command { o := &ViewOptions{ PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme).WithDefaultOutput("yaml"), @@ -79,8 +81,8 @@ func NewCmdConfigView(f cmdutil.Factory, streams genericclioptions.IOStreams, Co cmd := &cobra.Command{ Use: "view", Short: i18n.T("Display merged kubeconfig settings or a specified kubeconfig file"), - Long: view_long, - Example: view_example, + Long: viewLong, + Example: viewExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -99,6 +101,7 @@ func NewCmdConfigView(f cmdutil.Factory, streams genericclioptions.IOStreams, Co return cmd } +// Complete completes the required command-line options func (o *ViewOptions) Complete(cmd *cobra.Command, args []string) error { if len(args) != 0 { return cmdutil.UsageErrorf(cmd, "unexpected arguments: %v", args) @@ -119,6 +122,7 @@ func (o *ViewOptions) Complete(cmd *cobra.Command, args []string) error { return nil } +// Validate makes sure that provided values for command-line options are valid func (o ViewOptions) Validate() error { if !o.Merge.Value() && !o.ConfigAccess.IsExplicitFile() { return errors.New("if merge==false a precise file must to specified") @@ -127,6 +131,7 @@ func (o ViewOptions) Validate() error { return nil } +// Run performs the execution of 'config view' sub command func (o ViewOptions) Run() error { config, err := o.loadConfig() if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/BUILD index 930c177c9ce..53bd5293022 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/BUILD @@ -34,8 +34,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go index a233b8cd1cb..873d8e6005e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go @@ -26,8 +26,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" scheme "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -37,7 +37,7 @@ import ( ) var ( - convert_long = templates.LongDesc(i18n.T(` + convertLong = templates.LongDesc(i18n.T(` Convert config files between different API versions. Both YAML and JSON formats are accepted. @@ -48,7 +48,7 @@ var ( The default output will be printed to stdout in YAML format. One can use -o option to change to output destination.`)) - convert_example = templates.Examples(i18n.T(` + convertExample = templates.Examples(i18n.T(` # Convert 'pod.yaml' to latest version and print to stdout. kubectl convert -f pod.yaml @@ -93,8 +93,8 @@ func NewCmdConvert(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *co Use: "convert -f FILENAME", DisableFlagsInUseLine: true, Short: i18n.T("Convert config files between different API versions"), - Long: convert_long, - Example: convert_example, + Long: convertLong, + Example: convertExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd)) cmdutil.CheckErr(o.RunConvert()) @@ -107,12 +107,15 @@ func NewCmdConvert(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *co cmdutil.AddValidateFlags(cmd) cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "to need to get converted.") - cmd.MarkFlagRequired("filename") return cmd } // Complete collects information required to run Convert command from command line. func (o *ConvertOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) (err error) { + err = o.FilenameOptions.RequireFilenameOrKustomize() + if err != nil { + return err + } o.builder = f.NewBuilder o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/import_known_versions.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/import_known_versions.go index 0dca9c55ab9..26914951ccf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/import_known_versions.go @@ -25,6 +25,7 @@ import ( _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" _ "k8s.io/kubernetes/pkg/apis/certificates/install" + _ "k8s.io/kubernetes/pkg/apis/coordination/install" _ "k8s.io/kubernetes/pkg/apis/core/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD index b20c5ace5fd..160688835ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD @@ -13,7 +13,7 @@ go_library( "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", - "//vendor/github.com/renstrom/dedent:go_default_library", + "//vendor/github.com/lithammer/dedent:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go index 78e9f050662..e0a624a290b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go @@ -37,7 +37,7 @@ import ( "bytes" - "github.com/renstrom/dedent" + "github.com/lithammer/dedent" "github.com/spf13/cobra" ) @@ -66,6 +66,7 @@ var ( /file/path for a local file`) ) +// CopyOptions have the data required to perform the copy operation type CopyOptions struct { Container string Namespace string @@ -77,6 +78,7 @@ type CopyOptions struct { genericclioptions.IOStreams } +// NewCopyOptions creates the options for copy func NewCopyOptions(ioStreams genericclioptions.IOStreams) *CopyOptions { return &CopyOptions{ IOStreams: ioStreams, @@ -140,6 +142,7 @@ func extractFileSpec(arg string) (fileSpec, error) { return fileSpec{}, errFileSpecDoesntMatchFormat } +// Complete completes all the required options func (o *CopyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { var err error o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() @@ -159,6 +162,7 @@ func (o *CopyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { return nil } +// Validate makes sure provided values for CopyOptions are valid func (o *CopyOptions) Validate(cmd *cobra.Command, args []string) error { if len(args) != 2 { return cmdutil.UsageErrorf(cmd, cpUsageStr) @@ -166,6 +170,7 @@ func (o *CopyOptions) Validate(cmd *cobra.Command, args []string) error { return nil } +// Run performs the execution func (o *CopyOptions) Run(args []string) error { if len(args) < 2 { return fmt.Errorf("source and destination are required") @@ -315,8 +320,8 @@ func stripPathShortcuts(p string) string { trimmed = strings.TrimPrefix(newPath, "../") } - // trim leftover ".." - if newPath == ".." { + // trim leftover {".", ".."} + if newPath == "." || newPath == ".." { newPath = "" } @@ -338,65 +343,71 @@ func makeTar(srcPath, destPath string, writer io.Writer) error { } func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) error { - filepath := path.Join(srcBase, srcFile) - stat, err := os.Lstat(filepath) + srcPath := path.Join(srcBase, srcFile) + matchedPaths, err := filepath.Glob(srcPath) if err != nil { return err } - if stat.IsDir() { - files, err := ioutil.ReadDir(filepath) + for _, fpath := range matchedPaths { + stat, err := os.Lstat(fpath) if err != nil { return err } - if len(files) == 0 { - //case empty directory - hdr, _ := tar.FileInfoHeader(stat, filepath) + if stat.IsDir() { + files, err := ioutil.ReadDir(fpath) + if err != nil { + return err + } + if len(files) == 0 { + //case empty directory + hdr, _ := tar.FileInfoHeader(stat, fpath) + hdr.Name = destFile + if err := tw.WriteHeader(hdr); err != nil { + return err + } + } + for _, f := range files { + if err := recursiveTar(srcBase, path.Join(srcFile, f.Name()), destBase, path.Join(destFile, f.Name()), tw); err != nil { + return err + } + } + return nil + } else if stat.Mode()&os.ModeSymlink != 0 { + //case soft link + hdr, _ := tar.FileInfoHeader(stat, fpath) + target, err := os.Readlink(fpath) + if err != nil { + return err + } + + hdr.Linkname = target hdr.Name = destFile if err := tw.WriteHeader(hdr); err != nil { return err } - } - for _, f := range files { - if err := recursiveTar(srcBase, path.Join(srcFile, f.Name()), destBase, path.Join(destFile, f.Name()), tw); err != nil { + } else { + //case regular file or other file type like pipe + hdr, err := tar.FileInfoHeader(stat, fpath) + if err != nil { return err } - } - return nil - } else if stat.Mode()&os.ModeSymlink != 0 { - //case soft link - hdr, _ := tar.FileInfoHeader(stat, filepath) - target, err := os.Readlink(filepath) - if err != nil { - return err - } + hdr.Name = destFile - hdr.Linkname = target - hdr.Name = destFile - if err := tw.WriteHeader(hdr); err != nil { - return err - } - } else { - //case regular file or other file type like pipe - hdr, err := tar.FileInfoHeader(stat, filepath) - if err != nil { - return err - } - hdr.Name = destFile + if err := tw.WriteHeader(hdr); err != nil { + return err + } - if err := tw.WriteHeader(hdr); err != nil { - return err - } + f, err := os.Open(fpath) + if err != nil { + return err + } + defer f.Close() - f, err := os.Open(filepath) - if err != nil { - return err + if _, err := io.Copy(tw, f); err != nil { + return err + } + return f.Close() } - defer f.Close() - - if _, err := io.Copy(tw, f); err != nil { - return err - } - return f.Close() } return nil } @@ -502,7 +513,7 @@ func (o *CopyOptions) execute(options *exec.ExecOptions) error { } options.Config = o.ClientConfig - options.PodClient = o.Clientset.Core() + options.PodClient = o.Clientset.CoreV1() if err := options.Validate(); err != nil { return err diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/BUILD index 49ce594021e..c953ef12bc7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/BUILD @@ -7,6 +7,7 @@ go_library( "create_clusterrole.go", "create_clusterrolebinding.go", "create_configmap.go", + "create_cronjob.go", "create_deployment.go", "create_job.go", "create_namespace.go", @@ -40,13 +41,14 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v1:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1:go_default_library", + "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -58,6 +60,7 @@ go_test( "create_clusterrole_test.go", "create_clusterrolebinding_test.go", "create_configmap_test.go", + "create_cronjob_test.go", "create_deployment_test.go", "create_job_test.go", "create_namespace_test.go", @@ -90,7 +93,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create.go index 1a426bae616..098a6439281 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create.go @@ -33,8 +33,8 @@ import ( kruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -45,6 +45,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl/util/templates" ) +// CreateOptions is the commandline options for 'create' sub command type CreateOptions struct { PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags @@ -79,6 +80,7 @@ var ( kubectl create -f docker-registry.yaml --edit -o json`)) ) +// NewCreateOptions returns an initialized CreateOptions instance func NewCreateOptions(ioStreams genericclioptions.IOStreams) *CreateOptions { return &CreateOptions{ PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), @@ -90,6 +92,7 @@ func NewCreateOptions(ioStreams genericclioptions.IOStreams) *CreateOptions { } } +// NewCmdCreate returns new initialized instance of create sub command func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewCreateOptions(ioStreams) @@ -100,7 +103,8 @@ func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cob Long: createLong, Example: createExample, Run: func(cmd *cobra.Command, args []string) { - if cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames) { + if cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, "") { + ioStreams.ErrOut.Write([]byte("Error: must specify -f\n\n")) defaultRunFunc := cmdutil.DefaultSubCommandRun(ioStreams.ErrOut) defaultRunFunc(cmd, args) return @@ -116,7 +120,6 @@ func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cob usage := "to use to create the resource" cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, usage) - cmd.MarkFlagRequired("filename") cmdutil.AddValidateFlags(cmd) cmd.Flags().BoolVar(&o.EditBeforeCreate, "edit", o.EditBeforeCreate, "Edit the API resource before creating") cmd.Flags().Bool("windows-line-endings", runtime.GOOS == "windows", @@ -143,9 +146,11 @@ func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cob cmd.AddCommand(NewCmdCreatePodDisruptionBudget(f, ioStreams)) cmd.AddCommand(NewCmdCreatePriorityClass(f, ioStreams)) cmd.AddCommand(NewCmdCreateJob(f, ioStreams)) + cmd.AddCommand(NewCmdCreateCronJob(f, ioStreams)) return cmd } +// ValidateArgs makes sure there is no discrepency in command options func (o *CreateOptions) ValidateArgs(cmd *cobra.Command, args []string) error { if len(args) != 0 { return cmdutil.UsageErrorf(cmd, "Unexpected args: %v", args) @@ -177,9 +182,9 @@ func (o *CreateOptions) ValidateArgs(cmd *cobra.Command, args []string) error { return nil } +// Complete completes all the required options func (o *CreateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { var err error - o.RecordFlags.Complete(cmd) o.Recorder, err = o.RecordFlags.ToRecorder() if err != nil { @@ -203,6 +208,7 @@ func (o *CreateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { return nil } +// RunCreate performs the creation func (o *CreateOptions) RunCreate(f cmdutil.Factory, cmd *cobra.Command) error { // raw only makes sense for a single file resource multiple objects aren't likely to do what you want. // the validator enforces this, so @@ -300,6 +306,7 @@ func (o *CreateOptions) raw(f cmdutil.Factory) error { return nil } +// RunEditOnCreate performs edit on creation func RunEditOnCreate(f cmdutil.Factory, printFlags *genericclioptions.PrintFlags, recordFlags *genericclioptions.RecordFlags, ioStreams genericclioptions.IOStreams, cmd *cobra.Command, options *resource.FilenameOptions) error { editOptions := editor.NewEditOptions(editor.EditBeforeCreateMode, ioStreams) editOptions.FilenameOptions = *options @@ -363,6 +370,7 @@ type CreateSubcommandOptions struct { genericclioptions.IOStreams } +// NewCreateSubcommandOptions returns initialized CreateSubcommandOptions func NewCreateSubcommandOptions(ioStreams genericclioptions.IOStreams) *CreateSubcommandOptions { return &CreateSubcommandOptions{ PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), @@ -370,6 +378,7 @@ func NewCreateSubcommandOptions(ioStreams genericclioptions.IOStreams) *CreateSu } } +// Complete completes all the required options func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, generator generate.StructuredGenerator) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -411,7 +420,7 @@ func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command return nil } -// RunCreateSubcommand executes a create subcommand using the specified options +// Run executes a create subcommand using the specified options func (o *CreateSubcommandOptions) Run() error { obj, err := o.StructuredGenerator.StructuredGenerate() if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrole.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrole.go index ce170028275..d22bc82f9e2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrole.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrole.go @@ -24,8 +24,8 @@ import ( rbacv1 "k8s.io/api/rbac/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/cli-runtime/pkg/genericclioptions" + cliflag "k8s.io/component-base/cli/flag" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -58,13 +58,14 @@ var ( validNonResourceVerbs = []string{"*", "get", "post", "put", "delete", "patch", "head", "options"} ) +// CreateClusterRoleOptions is returned by NewCmdCreateClusterRole type CreateClusterRoleOptions struct { *CreateRoleOptions NonResourceURLs []string AggregationRule map[string]string } -// ClusterRole is a command to ease creating ClusterRoles. +// NewCmdCreateClusterRole initializes and returns new ClusterRoles command func NewCmdCreateClusterRole(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { c := &CreateClusterRoleOptions{ CreateRoleOptions: NewCreateRoleOptions(ioStreams), @@ -92,11 +93,12 @@ func NewCmdCreateClusterRole(f cmdutil.Factory, ioStreams genericclioptions.IOSt cmd.Flags().StringSliceVar(&c.NonResourceURLs, "non-resource-url", c.NonResourceURLs, "A partial url that user should have access to.") cmd.Flags().StringSlice("resource", []string{}, "Resource that the rule applies to") cmd.Flags().StringArrayVar(&c.ResourceNames, "resource-name", c.ResourceNames, "Resource in the white list that the rule applies to, repeat this flag for multiple items") - cmd.Flags().Var(utilflag.NewMapStringString(&c.AggregationRule), "aggregation-rule", "An aggregation label selector for combining ClusterRoles.") + cmd.Flags().Var(cliflag.NewMapStringString(&c.AggregationRule), "aggregation-rule", "An aggregation label selector for combining ClusterRoles.") return cmd } +// Complete completes all the required options func (c *CreateClusterRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { // Remove duplicate nonResourceURLs nonResourceURLs := []string{} @@ -110,6 +112,7 @@ func (c *CreateClusterRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman return c.CreateRoleOptions.Complete(f, cmd, args) } +// Validate makes sure there is no discrepency in CreateClusterRoleOptions func (c *CreateClusterRoleOptions) Validate() error { if c.Name == "" { return fmt.Errorf("name must be specified") @@ -170,6 +173,7 @@ func (c *CreateClusterRoleOptions) Validate() error { } +// RunCreateRole creates a new clusterRole func (c *CreateClusterRoleOptions) RunCreateRole() error { clusterRole := &rbacv1.ClusterRole{ // this is ok because we know exactly how we want to be serialized diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrolebinding.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrolebinding.go index 882da888cc3..acff50b6eff 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrolebinding.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_clusterrolebinding.go @@ -36,13 +36,14 @@ var ( kubectl create clusterrolebinding cluster-admin --clusterrole=cluster-admin --user=user1 --user=user2 --group=group1`)) ) +// ClusterRoleBindingOpts is returned by NewCmdCreateClusterRoleBinding type ClusterRoleBindingOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } -// ClusterRoleBinding is a command to ease creating ClusterRoleBindings. +// NewCmdCreateClusterRoleBinding returns an initialized command instance of ClusterRoleBinding func NewCmdCreateClusterRoleBinding(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := &ClusterRoleBindingOpts{ + o := &ClusterRoleBindingOpts{ CreateSubcommandOptions: NewCreateSubcommandOptions(ioStreams), } @@ -53,12 +54,12 @@ func NewCmdCreateClusterRoleBinding(f cmdutil.Factory, ioStreams genericclioptio Long: clusterRoleBindingLong, Example: clusterRoleBindingExample, Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.Run()) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.Run()) }, } - options.CreateSubcommandOptions.PrintFlags.AddFlags(cmd) + o.CreateSubcommandOptions.PrintFlags.AddFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddValidateFlags(cmd) @@ -71,6 +72,7 @@ func NewCmdCreateClusterRoleBinding(f cmdutil.Factory, ioStreams genericclioptio return cmd } +// Complete completes all the required options func (o *ClusterRoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -94,7 +96,7 @@ func (o *ClusterRoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateClusterRoleBinding is the implementation of the create clusterrolebinding command. +// Run calls the CreateSubcommandOptions.Run in ClusterRoleBindingOpts instance func (o *ClusterRoleBindingOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_configmap.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_configmap.go index 4837d658f9e..63ea712300c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_configmap.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_configmap.go @@ -57,11 +57,12 @@ var ( kubectl create configmap my-config --from-env-file=path/to/bar.env`)) ) +// ConfigMapOpts holds properties for create configmap sub-command type ConfigMapOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } -// ConfigMap is a command to ease creating ConfigMaps. +// NewCmdCreateConfigMap initializes and returns ConfigMapOpts func NewCmdCreateConfigMap(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { options := &ConfigMapOpts{ CreateSubcommandOptions: NewCreateSubcommandOptions(ioStreams), @@ -92,6 +93,7 @@ func NewCmdCreateConfigMap(f cmdutil.Factory, ioStreams genericclioptions.IOStre return cmd } +// Complete completes all the required options func (o *ConfigMapOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -115,7 +117,7 @@ func (o *ConfigMapOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateConfigMap is the implementation of the create configmap command. +// Run performs the execution of 'create' sub command options func (o *ConfigMapOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_cronjob.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_cronjob.go new file mode 100644 index 00000000000..eb548c28962 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_cronjob.go @@ -0,0 +1,205 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package create + +import ( + "fmt" + + "github.com/spf13/cobra" + + batchv1 "k8s.io/api/batch/v1" + batchv1beta1 "k8s.io/api/batch/v1beta1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/cli-runtime/pkg/resource" + batchv1beta1client "k8s.io/client-go/kubernetes/typed/batch/v1beta1" + cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" + "k8s.io/kubernetes/pkg/kubectl/util/templates" +) + +var ( + cronjobLong = templates.LongDesc(` + Create a cronjob with the specified name.`) + + cronjobExample = templates.Examples(` + # Create a cronjob + kubectl create cronjob my-job --image=busybox + + # Create a cronjob with command + kubectl create cronjob my-job --image=busybox -- date + + # Create a cronjob with schedule + kubectl create cronjob test-job --image=busybox --schedule="*/1 * * * *"`) +) + +type CreateCronJobOptions struct { + PrintFlags *genericclioptions.PrintFlags + + PrintObj func(obj runtime.Object) error + + Name string + Image string + Schedule string + Command []string + Restart string + + Namespace string + Client batchv1beta1client.BatchV1beta1Interface + DryRun bool + Builder *resource.Builder + Cmd *cobra.Command + + genericclioptions.IOStreams +} + +func NewCreateCronJobOptions(ioStreams genericclioptions.IOStreams) *CreateCronJobOptions { + return &CreateCronJobOptions{ + PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), + IOStreams: ioStreams, + } +} + +// NewCmdCreateCronJob is a command to to create CronJobs. +func NewCmdCreateCronJob(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + o := NewCreateCronJobOptions(ioStreams) + cmd := &cobra.Command{ + Use: "cronjob NAME --image=image --schedule='0/5 * * * ?' -- [COMMAND] [args...]", + Aliases: []string{"cj"}, + Short: cronjobLong, + Long: cronjobLong, + Example: cronjobExample, + Run: func(cmd *cobra.Command, args []string) { + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.Validate()) + cmdutil.CheckErr(o.Run()) + }, + } + + o.PrintFlags.AddFlags(cmd) + + cmdutil.AddApplyAnnotationFlags(cmd) + cmdutil.AddValidateFlags(cmd) + cmdutil.AddDryRunFlag(cmd) + cmd.Flags().StringVar(&o.Image, "image", o.Image, "Image name to run.") + cmd.Flags().StringVar(&o.Schedule, "schedule", o.Schedule, "A schedule in the Cron format the job should be run with.") + cmd.Flags().StringVar(&o.Restart, "restart", o.Restart, "job's restart policy. supported values: OnFailure, Never") + + return cmd +} + +func (o *CreateCronJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { + name, err := NameFromCommandArgs(cmd, args) + if err != nil { + return err + } + o.Name = name + if len(args) > 1 { + o.Command = args[1:] + } + if len(o.Restart) == 0 { + o.Restart = "OnFailure" + } + + clientConfig, err := f.ToRESTConfig() + if err != nil { + return err + } + o.Client, err = batchv1beta1client.NewForConfig(clientConfig) + if err != nil { + return err + } + + o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() + if err != nil { + return err + } + o.Builder = f.NewBuilder() + o.Cmd = cmd + + o.DryRun = cmdutil.GetDryRunFlag(cmd) + if o.DryRun { + o.PrintFlags.Complete("%s (dry run)") + } + printer, err := o.PrintFlags.ToPrinter() + if err != nil { + return err + } + o.PrintObj = func(obj runtime.Object) error { + return printer.PrintObj(obj, o.Out) + } + + return nil +} + +func (o *CreateCronJobOptions) Validate() error { + if len(o.Image) == 0 { + return fmt.Errorf("--image must be specified") + } + if len(o.Schedule) == 0 { + return fmt.Errorf("--schedule must be specified") + } + return nil +} + +func (o *CreateCronJobOptions) Run() error { + var cronjob *batchv1beta1.CronJob + cronjob = o.createCronJob() + + if !o.DryRun { + var err error + cronjob, err = o.Client.CronJobs(o.Namespace).Create(cronjob) + if err != nil { + return fmt.Errorf("failed to create cronjob: %v", err) + } + } + + return o.PrintObj(cronjob) +} + +func (o *CreateCronJobOptions) createCronJob() *batchv1beta1.CronJob { + return &batchv1beta1.CronJob{ + TypeMeta: metav1.TypeMeta{APIVersion: batchv1beta1.SchemeGroupVersion.String(), Kind: "CronJob"}, + ObjectMeta: metav1.ObjectMeta{ + Name: o.Name, + }, + Spec: batchv1beta1.CronJobSpec{ + Schedule: o.Schedule, + JobTemplate: batchv1beta1.JobTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Name: o.Name, + }, + Spec: batchv1.JobSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: o.Name, + Image: o.Image, + Command: o.Command, + }, + }, + RestartPolicy: corev1.RestartPolicy(o.Restart), + }, + }, + }, + }, + }, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_deployment.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_deployment.go index 1a069f73ff2..ed98b790d03 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_deployment.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_deployment.go @@ -36,6 +36,7 @@ var ( kubectl create deployment my-dep --image=busybox`)) ) +// DeploymentOpts is returned by NewCmdCreateDeployment type DeploymentOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -112,6 +113,7 @@ func generatorFromName( return nil, false } +// Complete completes all the options func (o *DeploymentOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -147,10 +149,7 @@ func (o *DeploymentOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// createDeployment -// 1. Reads user config values from Cobra. -// 2. Sets up the correct Generator object. -// 3. Calls RunCreateSubcommand. +// Run performs the execution of 'create deployment' sub command func (o *DeploymentOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_job.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_job.go index a82348e1b8c..c1ca95fc4fb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_job.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_job.go @@ -27,7 +27,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" batchv1client "k8s.io/client-go/kubernetes/typed/batch/v1" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -50,6 +50,7 @@ var ( kubectl create job test-job --from=cronjob/a-cronjob`)) ) +// CreateJobOptions is the command line options for 'create job' type CreateJobOptions struct { PrintFlags *genericclioptions.PrintFlags @@ -69,6 +70,7 @@ type CreateJobOptions struct { genericclioptions.IOStreams } +// NewCreateJobOptions initializes and returns new CreateJobOptions instance func NewCreateJobOptions(ioStreams genericclioptions.IOStreams) *CreateJobOptions { return &CreateJobOptions{ PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), @@ -80,7 +82,7 @@ func NewCreateJobOptions(ioStreams genericclioptions.IOStreams) *CreateJobOption func NewCmdCreateJob(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewCreateJobOptions(ioStreams) cmd := &cobra.Command{ - Use: "job NAME [--image=image --from=cronjob/name] -- [COMMAND] [args...]", + Use: "job NAME --image=image [--from=cronjob/name] -- [COMMAND] [args...]", Short: jobLong, Long: jobLong, Example: jobExample, @@ -102,6 +104,7 @@ func NewCmdCreateJob(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) * return cmd } +// Complete completes all the required options func (o *CreateJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -143,6 +146,7 @@ func (o *CreateJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args return nil } +// Validate makes sure provided values and valid Job options func (o *CreateJobOptions) Validate() error { if (len(o.Image) == 0 && len(o.From) == 0) || (len(o.Image) != 0 && len(o.From) != 0) { return fmt.Errorf("either --image or --from must be specified") @@ -153,6 +157,7 @@ func (o *CreateJobOptions) Validate() error { return nil } +// Run performs the execution of 'create job' sub command func (o *CreateJobOptions) Run() error { var job *batchv1.Job if len(o.Image) > 0 { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_namespace.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_namespace.go index 04ea190cf8a..1a329efd163 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_namespace.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_namespace.go @@ -36,6 +36,7 @@ var ( kubectl create namespace my-namespace`)) ) +// NamespaceOpts is the options for 'create namespare' sub command type NamespaceOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -68,6 +69,7 @@ func NewCmdCreateNamespace(f cmdutil.Factory, ioStreams genericclioptions.IOStre return cmd } +// Complete completes all the required options func (o *NamespaceOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -85,7 +87,7 @@ func (o *NamespaceOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateNamespace implements the behavior to run the create namespace command +// Run calls the CreateSubcommandOptions.Run in NamespaceOpts instance func (o *NamespaceOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_pdb.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_pdb.go index 7a0f5b91af5..b085509bbc4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_pdb.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_pdb.go @@ -41,6 +41,7 @@ var ( kubectl create pdb my-pdb --selector=app=nginx --min-available=50%`)) ) +// PodDisruptionBudgetOpts holds the command-line options for poddisruptionbudget sub command type PodDisruptionBudgetOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -76,6 +77,7 @@ func NewCmdCreatePodDisruptionBudget(f cmdutil.Factory, ioStreams genericcliopti return cmd } +// Complete completes all the required options func (o *PodDisruptionBudgetOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -104,7 +106,7 @@ func (o *PodDisruptionBudgetOpts) Complete(f cmdutil.Factory, cmd *cobra.Command return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreatePodDisruptionBudget implements the behavior to run the create pdb command. +// Run calls the CreateSubcommandOptions.Run in PodDisruptionBudgetOpts instance func (o *PodDisruptionBudgetOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_priorityclass.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_priorityclass.go index 5cf7f529204..7555593763c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_priorityclass.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_priorityclass.go @@ -39,6 +39,7 @@ var ( kubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"`)) ) +// PriorityClassOpts holds the options for 'create priorityclass' sub command type PriorityClassOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -74,6 +75,7 @@ func NewCmdCreatePriorityClass(f cmdutil.Factory, ioStreams genericclioptions.IO return cmd } +// Complete completes all the required options func (o *PriorityClassOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -96,7 +98,7 @@ func (o *PriorityClassOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreatePriorityClass implements the behavior to run the create priorityClass command. +// Run calls the CreateSubcommandOptions.Run in the PriorityClassOpts instance func (o *PriorityClassOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_quota.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_quota.go index 95676a18303..31c83c72f16 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_quota.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_quota.go @@ -39,6 +39,7 @@ var ( kubectl create quota best-effort --hard=pods=100 --scopes=BestEffort`)) ) +// QuotaOpts holds the command-line options for 'create quota' sub command type QuotaOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -72,6 +73,7 @@ func NewCmdCreateQuota(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) return cmd } +// Complete completes all the required options func (o *QuotaOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -93,7 +95,7 @@ func (o *QuotaOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []strin return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateQuota implements the behavior to run the create quota command +// Run calls the CreateSubcommandOptions.Run in QuotaOpts instance func (o *QuotaOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_role.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_role.go index 7124c509e80..bb183438d94 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_role.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_role.go @@ -105,12 +105,14 @@ var ( } ) +// ResourceOptions holds the related options for '--resource' option type ResourceOptions struct { Group string Resource string SubResource string } +// CreateRoleOptions holds the options for 'create role' sub command type CreateRoleOptions struct { PrintFlags *genericclioptions.PrintFlags @@ -129,6 +131,7 @@ type CreateRoleOptions struct { genericclioptions.IOStreams } +// NewCreateRoleOptions returns an initialized CreateRoleOptions instance func NewCreateRoleOptions(ioStreams genericclioptions.IOStreams) *CreateRoleOptions { return &CreateRoleOptions{ PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), @@ -137,7 +140,7 @@ func NewCreateRoleOptions(ioStreams genericclioptions.IOStreams) *CreateRoleOpti } } -// Role is a command to ease creating Roles. +// NewCmdCreateRole returnns an initialized Command instance for 'create role' sub command func NewCmdCreateRole(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewCreateRoleOptions(ioStreams) @@ -166,6 +169,7 @@ func NewCmdCreateRole(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) return cmd } +// Complete completes all the required options func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -255,6 +259,7 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args return nil } +// Validate makes sure there is no discrepency in provided option values func (o *CreateRoleOptions) Validate() error { if o.Name == "" { return fmt.Errorf("name must be specified") @@ -317,6 +322,7 @@ func (o *CreateRoleOptions) validateResource() error { return nil } +// RunCreateRole performs the execution of 'create role' sub command func (o *CreateRoleOptions) RunCreateRole() error { role := &rbacv1.Role{ // this is ok because we know exactly how we want to be serialized diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_rolebinding.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_rolebinding.go index 4b8f2b28ed6..605909d14c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_rolebinding.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_rolebinding.go @@ -36,13 +36,14 @@ var ( kubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1`)) ) +// RoleBindingOpts holds the options for 'create rolebinding' sub command type RoleBindingOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } -// RoleBinding is a command to ease creating RoleBindings. +// NewCmdCreateRoleBinding returns an initialized Command instance for 'create rolebinding' sub command func NewCmdCreateRoleBinding(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := &RoleBindingOpts{ + o := &RoleBindingOpts{ CreateSubcommandOptions: NewCreateSubcommandOptions(ioStreams), } @@ -53,12 +54,12 @@ func NewCmdCreateRoleBinding(f cmdutil.Factory, ioStreams genericclioptions.IOSt Long: roleBindingLong, Example: roleBindingExample, Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.Run()) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.Run()) }, } - options.CreateSubcommandOptions.PrintFlags.AddFlags(cmd) + o.CreateSubcommandOptions.PrintFlags.AddFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddValidateFlags(cmd) @@ -71,6 +72,7 @@ func NewCmdCreateRoleBinding(f cmdutil.Factory, ioStreams genericclioptions.IOSt return cmd } +// Complete completes all the required options func (o *RoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -95,6 +97,7 @@ func (o *RoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } +// Run calls the CreateSubcommandOptions.Run in RoleBindingOpts instance func (o *RoleBindingOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go index 4512dffbda8..8ba703c2830 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go @@ -73,6 +73,7 @@ var ( kubectl create secret generic my-secret --from-env-file=path/to/bar.env`)) ) +// SecretGenericOpts holds the options for 'create secret' sub command type SecretGenericOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -108,6 +109,7 @@ func NewCmdCreateSecretGeneric(f cmdutil.Factory, ioStreams genericclioptions.IO return cmd } +// Complete completes all the required options func (o *SecretGenericOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -132,7 +134,7 @@ func (o *SecretGenericOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateSecretGeneric is the implementation of the create secret generic command +// Run calls the CreateSubcommandOptions.Run in SecretGenericOpts instance func (o *SecretGenericOpts) Run() error { return o.CreateSubcommandOptions.Run() } @@ -158,6 +160,7 @@ var ( kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL`)) ) +// SecretDockerRegistryOpts holds the options for 'create secret docker-registry' sub command type SecretDockerRegistryOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -197,6 +200,7 @@ func NewCmdCreateSecretDockerRegistry(f cmdutil.Factory, ioStreams genericcliopt return cmd } +// Complete completes all the required options func (o *SecretDockerRegistryOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -232,7 +236,7 @@ func (o *SecretDockerRegistryOpts) Complete(f cmdutil.Factory, cmd *cobra.Comman return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateSecretDockerRegistry is the implementation of the create secret docker-registry command +// Run calls CreateSubcommandOptions.Run in SecretDockerRegistryOpts instance func (o *SecretDockerRegistryOpts) Run() error { return o.CreateSubcommandOptions.Run() } @@ -249,6 +253,7 @@ var ( kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key`)) ) +// SecretTLSOpts holds the options for 'create secret tls' sub command type SecretTLSOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -282,6 +287,7 @@ func NewCmdCreateSecretTLS(f cmdutil.Factory, ioStreams genericclioptions.IOStre return cmd } +// Complete completes all the required options func (o *SecretTLSOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -310,7 +316,7 @@ func (o *SecretTLSOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateSecretTLS is the implementation of the create secret tls command +// Run calls CreateSubcommandOptions.Run in the SecretTLSOpts instance func (o *SecretTLSOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_service.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_service.go index ee34f1814f7..f36fca9b482 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_service.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_service.go @@ -61,6 +61,7 @@ func addPortFlags(cmd *cobra.Command) { cmd.Flags().StringSlice("tcp", []string{}, "Port pairs can be specified as ':'.") } +// ServiceClusterIPOpts holds the options for 'create service clusterip' sub command type ServiceClusterIPOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -97,6 +98,7 @@ func errUnsupportedGenerator(cmd *cobra.Command, generatorName string) error { return cmdutil.UsageErrorf(cmd, "Generator %s not supported. ", generatorName) } +// Complete completes all the required options func (o *ServiceClusterIPOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -119,7 +121,7 @@ func (o *ServiceClusterIPOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, a return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateServiceClusterIP is the implementation of the create service clusterip command +// Run calls the CreateSubcommandOptions.Run in ServiceClusterIPOpts instance func (o *ServiceClusterIPOpts) Run() error { return o.CreateSubcommandOptions.Run() } @@ -133,6 +135,7 @@ var ( kubectl create service nodeport my-ns --tcp=5678:8080`)) ) +// ServiceNodePortOpts holds the options for 'create service nodeport' sub command type ServiceNodePortOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -165,6 +168,7 @@ func NewCmdCreateServiceNodePort(f cmdutil.Factory, ioStreams genericclioptions. return cmd } +// Complete completes all the required options func (o *ServiceNodePortOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -188,7 +192,7 @@ func (o *ServiceNodePortOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, ar return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateServiceNodePort is the implementation of the create service nodeport command +// Run calls the CreateSubcommandOptions.Run in ServiceNodePortOpts instance func (o *ServiceNodePortOpts) Run() error { return o.CreateSubcommandOptions.Run() } @@ -202,6 +206,7 @@ var ( kubectl create service loadbalancer my-lbs --tcp=5678:8080`)) ) +// ServiceLoadBalancerOpts holds the options for 'create service loadbalancer' sub command type ServiceLoadBalancerOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -233,6 +238,7 @@ func NewCmdCreateServiceLoadBalancer(f cmdutil.Factory, ioStreams genericcliopti return cmd } +// Complete completes all the required options func (o *ServiceLoadBalancerOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -255,7 +261,7 @@ func (o *ServiceLoadBalancerOpts) Complete(f cmdutil.Factory, cmd *cobra.Command return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateServiceLoadBalancer is the implementation of the create service loadbalancer command +// Run calls the CreateSubcommandOptions.Run in ServiceLoadBalancerOpts instance func (o *ServiceLoadBalancerOpts) Run() error { return o.CreateSubcommandOptions.Run() } @@ -273,6 +279,7 @@ var ( kubectl create service externalname my-ns --external-name bar.com`)) ) +// ServiceExternalNameOpts holds the options for 'create service externalname' sub command type ServiceExternalNameOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -306,6 +313,7 @@ func NewCmdCreateServiceExternalName(f cmdutil.Factory, ioStreams genericcliopti return cmd } +// Complete completes all the required options func (o *ServiceExternalNameOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -328,7 +336,7 @@ func (o *ServiceExternalNameOpts) Complete(f cmdutil.Factory, cmd *cobra.Command return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateExternalNameService is the implementation of the create service externalname command +// Run calls the CreateSubcommandOptions.Run in ServiceExternalNameOpts instance func (o *ServiceExternalNameOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_serviceaccount.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_serviceaccount.go index 69090356106..bbf9eb98fb7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_serviceaccount.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_serviceaccount.go @@ -36,6 +36,7 @@ var ( kubectl create serviceaccount my-service-account`)) ) +// ServiceAccountOpts holds the options for 'create serviceaccount' sub command type ServiceAccountOpts struct { CreateSubcommandOptions *CreateSubcommandOptions } @@ -67,6 +68,7 @@ func NewCmdCreateServiceAccount(f cmdutil.Factory, ioStreams genericclioptions.I return cmd } +// Complete completes all the required options func (o *ServiceAccountOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { name, err := NameFromCommandArgs(cmd, args) if err != nil { @@ -84,7 +86,7 @@ func (o *ServiceAccountOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, arg return o.CreateSubcommandOptions.Complete(f, cmd, args, generator) } -// CreateServiceAccount implements the behavior to run the create service account command +// Run calls the CreateSubcommandOptions.Run in ServiceAccountOpts instance func (o *ServiceAccountOpts) Run() error { return o.CreateSubcommandOptions.Run() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/BUILD index f1b922a72d6..f0b2e5a2ae1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/BUILD @@ -18,8 +18,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -40,7 +40,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete.go index 84b6db50bfe..78bd5076010 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete.go @@ -29,17 +29,17 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" - kubectlwait "k8s.io/kubernetes/pkg/kubectl/cmd/wait" + cmdwait "k8s.io/kubernetes/pkg/kubectl/cmd/wait" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) var ( - delete_long = templates.LongDesc(i18n.T(` + deleteLong = templates.LongDesc(i18n.T(` Delete resources by filenames, stdin, resources and names, or by resources and label selector. JSON and YAML formats are accepted. Only one type of the arguments may be specified: filenames, @@ -67,10 +67,13 @@ var ( update to a resource right when you submit a delete, their update will be lost along with the rest of the resource.`)) - delete_example = templates.Examples(i18n.T(` + deleteExample = templates.Examples(i18n.T(` # Delete a pod using the type and name specified in pod.json. kubectl delete -f ./pod.json + # Delete resources from a directory containing kustomization.yaml - e.g. dir/kustomization.yaml. + kubectl delete -k dir + # Delete a pod based on the type and name in the JSON passed into stdin. cat pod.json | kubectl delete -f - @@ -93,14 +96,16 @@ var ( type DeleteOptions struct { resource.FilenameOptions - LabelSelector string - FieldSelector string - DeleteAll bool - IgnoreNotFound bool - Cascade bool - DeleteNow bool - ForceDeletion bool - WaitForDeletion bool + LabelSelector string + FieldSelector string + DeleteAll bool + DeleteAllNamespaces bool + IgnoreNotFound bool + Cascade bool + DeleteNow bool + ForceDeletion bool + WaitForDeletion bool + Quiet bool GracePeriod int Timeout time.Duration @@ -118,11 +123,11 @@ func NewCmdDelete(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra deleteFlags := NewDeleteCommandFlags("containing the resource to delete.") cmd := &cobra.Command{ - Use: "delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])", + Use: "delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)])", DisableFlagsInUseLine: true, Short: i18n.T("Delete resources by filenames, stdin, resources and names, or by resources and label selector"), - Long: delete_long, - Example: delete_example, + Long: deleteLong, + Example: deleteExample, Run: func(cmd *cobra.Command, args []string) { o := deleteFlags.ToOptions(nil, streams) cmdutil.CheckErr(o.Complete(f, args, cmd)) @@ -162,7 +167,6 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co o.GracePeriod = 1 } - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) r := f.NewBuilder(). Unstructured(). ContinueOnError(). @@ -170,8 +174,8 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co FilenameParam(enforceNamespace, &o.FilenameOptions). LabelSelectorParam(o.LabelSelector). FieldSelectorParam(o.FieldSelector). - IncludeUninitialized(includeUninitialized). SelectAllParam(o.DeleteAll). + AllNamespaces(o.DeleteAllNamespaces). ResourceTypeOrNameArgs(false, args...).RequireObject(false). Flatten(). Do() @@ -196,7 +200,7 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co func (o *DeleteOptions) Validate() error { if o.Output != "" && o.Output != "name" { - return fmt.Errorf("unexpected -o output mode: %v. We only support '-o name'.", o.Output) + return fmt.Errorf("unexpected -o output mode: %v. We only support '-o name'", o.Output) } if o.DeleteAll && len(o.LabelSelector) > 0 { @@ -225,7 +229,7 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error { r = r.IgnoreErrors(errors.IsNotFound) } deletedInfos := []*resource.Info{} - uidMap := kubectlwait.UIDMap{} + uidMap := cmdwait.UIDMap{} err := r.Visit(func(info *resource.Info, err error) error { if err != nil { return err @@ -247,7 +251,7 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error { if err != nil { return err } - resourceLocation := kubectlwait.ResourceLocation{ + resourceLocation := cmdwait.ResourceLocation{ GroupResource: info.Mapping.Resource.GroupResource(), Namespace: info.Namespace, Name: info.Name, @@ -287,14 +291,14 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error { // if we requested to wait forever, set it to a week. effectiveTimeout = 168 * time.Hour } - waitOptions := kubectlwait.WaitOptions{ + waitOptions := cmdwait.WaitOptions{ ResourceFinder: genericclioptions.ResourceFinderForResult(resource.InfoListVisitor(deletedInfos)), UIDMap: uidMap, DynamicClient: o.DynamicClient, Timeout: effectiveTimeout, Printer: printers.NewDiscardingPrinter(), - ConditionFn: kubectlwait.IsDeleted, + ConditionFn: cmdwait.IsDeleted, IOStreams: o.IOStreams, } err = waitOptions.RunWait() @@ -313,11 +317,13 @@ func (o *DeleteOptions) deleteResource(info *resource.Info, deleteOptions *metav return nil, cmdutil.AddSourceToErr("deleting", info.Source, err) } - o.PrintObj(info) + if !o.Quiet { + o.PrintObj(info) + } return deleteResponse, nil } -// deletion printing is special because we do not have an object to print. +// PrintObj for deleted objects is special because we do not have an object to print. // This mirrors name printer behavior func (o *DeleteOptions) PrintObj(info *resource.Info) { operation := "deleted" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete_flags.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete_flags.go index f6dcc74d95f..83740868109 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete_flags.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/delete/delete_flags.go @@ -25,7 +25,7 @@ import ( "k8s.io/client-go/dynamic" ) -// PrintFlags composes common printer flag structs +// DeleteFlags composes common printer flag structs // used for commands requiring deletion logic. type DeleteFlags struct { FileNameFlags *genericclioptions.FileNameFlags @@ -33,6 +33,7 @@ type DeleteFlags struct { FieldSelector *string All *bool + AllNamespaces *bool Cascade *bool Force *bool GracePeriod *int @@ -68,6 +69,9 @@ func (f *DeleteFlags) ToOptions(dynamicClient dynamic.Interface, streams generic if f.All != nil { options.DeleteAll = *f.All } + if f.AllNamespaces != nil { + options.DeleteAllNamespaces = *f.AllNamespaces + } if f.Cascade != nil { options.Cascade = *f.Cascade } @@ -104,6 +108,9 @@ func (f *DeleteFlags) AddFlags(cmd *cobra.Command) { if f.All != nil { cmd.Flags().BoolVar(f.All, "all", *f.All, "Delete all resources, including uninitialized ones, in the namespace of the specified resource types.") } + if f.AllNamespaces != nil { + cmd.Flags().BoolVarP(f.AllNamespaces, "all-namespaces", "A", *f.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") + } if f.Force != nil { cmd.Flags().BoolVar(f.Force, "force", *f.Force, "Only used when grace-period=0. If true, immediately remove resources from API and bypass graceful deletion. Note that immediate deletion of some resources may result in inconsistency or data loss and requires confirmation.") } @@ -137,6 +144,7 @@ func NewDeleteCommandFlags(usage string) *DeleteFlags { // setup command defaults all := false + allNamespaces := false force := false ignoreNotFound := false now := false @@ -150,6 +158,7 @@ func NewDeleteCommandFlags(usage string) *DeleteFlags { recursive := false return &DeleteFlags{ + // Not using helpers.go since it provides function to add '-k' for FileNameOptions, but not FileNameFlags FileNameFlags: &genericclioptions.FileNameFlags{Usage: usage, Filenames: &filenames, Recursive: &recursive}, LabelSelector: &labelSelector, FieldSelector: &fieldSelector, @@ -158,6 +167,7 @@ func NewDeleteCommandFlags(usage string) *DeleteFlags { GracePeriod: &gracePeriod, All: &all, + AllNamespaces: &allNamespaces, Force: &force, IgnoreNotFound: &ignoreNotFound, Now: &now, diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/BUILD index 036e46df9c3..52652509c59 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/BUILD @@ -16,7 +16,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) @@ -35,7 +35,7 @@ go_test( "//pkg/kubectl/scheme:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/describe.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/describe.go index c1c84cd1717..5fabd27ef47 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/describe.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/describe/describe.go @@ -27,7 +27,7 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/describe" describeversioned "k8s.io/kubernetes/pkg/kubectl/describe/versioned" @@ -79,9 +79,8 @@ type DescribeOptions struct { BuilderArgs []string - EnforceNamespace bool - AllNamespaces bool - IncludeUninitialized bool + EnforceNamespace bool + AllNamespaces bool DescriberSettings *describe.DescriberSettings FilenameOptions *resource.FilenameOptions @@ -105,7 +104,7 @@ func NewCmdDescribe(parent string, f cmdutil.Factory, streams genericclioptions. Use: "describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)", DisableFlagsInUseLine: true, Short: i18n.T("Show details of a specific resource or group of resources"), - Long: describeLong + "\n\n" + cmdutil.SuggestApiResources(parent), + Long: describeLong + "\n\n" + cmdutil.SuggestAPIResources(parent), Example: describeExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) @@ -115,7 +114,7 @@ func NewCmdDescribe(parent string, f cmdutil.Factory, streams genericclioptions. usage := "containing the resource to describe" cmdutil.AddFilenameOptionFlags(cmd, o.FilenameOptions, usage) cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)") - cmd.Flags().BoolVar(&o.AllNamespaces, "all-namespaces", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") + cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") cmd.Flags().BoolVar(&o.DescriberSettings.ShowEvents, "show-events", o.DescriberSettings.ShowEvents, "If true, display events related to the described object.") cmdutil.AddIncludeUninitializedFlag(cmd) return cmd @@ -132,8 +131,8 @@ func (o *DescribeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.EnforceNamespace = false } - if len(args) == 0 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames) { - return fmt.Errorf("You must specify the type of resource to describe. %s\n", cmdutil.SuggestApiResources(o.CmdParent)) + if len(args) == 0 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, "") { + return fmt.Errorf("You must specify the type of resource to describe. %s\n", cmdutil.SuggestAPIResources(o.CmdParent)) } o.BuilderArgs = args @@ -144,9 +143,6 @@ func (o *DescribeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.NewBuilder = f.NewBuilder - // include the uninitialized objects by default - // unless user explicitly set --include-uninitialized=false - o.IncludeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, true) return nil } @@ -161,7 +157,6 @@ func (o *DescribeOptions) Run() error { NamespaceParam(o.Namespace).DefaultNamespace().AllNamespaces(o.AllNamespaces). FilenameParam(o.EnforceNamespace, o.FilenameOptions). LabelSelectorParam(o.Selector). - IncludeUninitialized(o.IncludeUninitialized). ResourceTypeOrNameArgs(true, o.BuilderArgs...). Flatten(). Do() diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/BUILD index d90246eb875..315c59b3c2e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/BUILD @@ -7,27 +7,21 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/kubectl/cmd/util:go_default_library", + "//pkg/kubectl/drain:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) @@ -39,10 +33,11 @@ go_test( deps = [ "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", + "//pkg/kubectl/drain:go_default_library", "//pkg/kubectl/scheme:go_default_library", + "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -52,7 +47,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/drain.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/drain.go index d24ab8ac6bb..47e5e779312 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/drain.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/drain/drain.go @@ -20,147 +20,103 @@ import ( "errors" "fmt" "math" - "strings" "time" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" - policyv1beta1 "k8s.io/api/policy/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/types" - utilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/apimachinery/pkg/util/json" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/strategicpatch" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/kubernetes" - restclient "k8s.io/client-go/rest" - "k8s.io/apimachinery/pkg/runtime/schema" + utilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/drain" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) -type DrainOptions struct { +type DrainCmdOptions struct { PrintFlags *genericclioptions.PrintFlags ToPrinter func(string) (printers.ResourcePrinterFunc, error) - Namespace string - client kubernetes.Interface - restClient *restclient.RESTClient - Force bool - DryRun bool - GracePeriodSeconds int - IgnoreDaemonsets bool - Timeout time.Duration - DeleteLocalData bool - Selector string - PodSelector string - nodeInfos []*resource.Info + Namespace string + + drainer *drain.Helper + nodeInfos []*resource.Info genericclioptions.IOStreams } -// Takes a pod and returns a bool indicating whether or not to operate on the -// pod, an optional warning message, and an optional fatal error. -type podFilter func(corev1.Pod) (include bool, w *warning, f *fatal) -type warning struct { - string -} -type fatal struct { - string -} - -const ( - EvictionKind = "Eviction" - EvictionSubresource = "pods/eviction" - - kDaemonsetFatal = "DaemonSet-managed pods (use --ignore-daemonsets to ignore)" - kDaemonsetWarning = "Ignoring DaemonSet-managed pods" - kLocalStorageFatal = "pods with local storage (use --delete-local-data to override)" - kLocalStorageWarning = "Deleting pods with local storage" - kUnmanagedFatal = "pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override)" - kUnmanagedWarning = "Deleting pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet" -) - var ( - cordon_long = templates.LongDesc(i18n.T(` + cordonLong = templates.LongDesc(i18n.T(` Mark node as unschedulable.`)) - cordon_example = templates.Examples(i18n.T(` + cordonExample = templates.Examples(i18n.T(` # Mark node "foo" as unschedulable. kubectl cordon foo`)) ) func NewCmdCordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := &DrainOptions{ - PrintFlags: genericclioptions.NewPrintFlags("cordoned").WithTypeSetter(scheme.Scheme), - - IOStreams: ioStreams, - } + o := NewDrainCmdOptions(f, ioStreams) cmd := &cobra.Command{ Use: "cordon NODE", DisableFlagsInUseLine: true, Short: i18n.T("Mark node as unschedulable"), - Long: cordon_long, - Example: cordon_example, + Long: cordonLong, + Example: cordonExample, Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.RunCordonOrUncordon(true)) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.RunCordonOrUncordon(true)) }, } - cmd.Flags().StringVarP(&options.Selector, "selector", "l", options.Selector, "Selector (label query) to filter on") + cmd.Flags().StringVarP(&o.drainer.Selector, "selector", "l", o.drainer.Selector, "Selector (label query) to filter on") cmdutil.AddDryRunFlag(cmd) return cmd } var ( - uncordon_long = templates.LongDesc(i18n.T(` + uncordonLong = templates.LongDesc(i18n.T(` Mark node as schedulable.`)) - uncordon_example = templates.Examples(i18n.T(` + uncordonExample = templates.Examples(i18n.T(` # Mark node "foo" as schedulable. $ kubectl uncordon foo`)) ) func NewCmdUncordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := &DrainOptions{ - PrintFlags: genericclioptions.NewPrintFlags("uncordoned").WithTypeSetter(scheme.Scheme), - IOStreams: ioStreams, - } + o := NewDrainCmdOptions(f, ioStreams) cmd := &cobra.Command{ Use: "uncordon NODE", DisableFlagsInUseLine: true, Short: i18n.T("Mark node as schedulable"), - Long: uncordon_long, - Example: uncordon_example, + Long: uncordonLong, + Example: uncordonExample, Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.RunCordonOrUncordon(false)) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.RunCordonOrUncordon(false)) }, } - cmd.Flags().StringVarP(&options.Selector, "selector", "l", options.Selector, "Selector (label query) to filter on") + cmd.Flags().StringVarP(&o.drainer.Selector, "selector", "l", o.drainer.Selector, "Selector (label query) to filter on") cmdutil.AddDryRunFlag(cmd) return cmd } var ( - drain_long = templates.LongDesc(i18n.T(` + drainLong = templates.LongDesc(i18n.T(` Drain node in preparation for maintenance. The given node will be marked unschedulable to prevent new pods from arriving. - 'drain' evicts the pods if the APIServer supports + 'drain' evicts the pods if the APIServer supports [eviction](http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE to delete the pods. The 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through @@ -181,7 +137,7 @@ var ( ![Workflow](http://kubernetes.io/images/docs/kubectl_drain.svg)`)) - drain_example = templates.Examples(i18n.T(` + drainExample = templates.Examples(i18n.T(` # Drain node "foo", even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it. $ kubectl drain foo --force @@ -189,36 +145,38 @@ var ( $ kubectl drain foo --grace-period=900`)) ) -func NewDrainOptions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *DrainOptions { - return &DrainOptions{ +func NewDrainCmdOptions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *DrainCmdOptions { + return &DrainCmdOptions{ PrintFlags: genericclioptions.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), - - IOStreams: ioStreams, - GracePeriodSeconds: -1, + IOStreams: ioStreams, + drainer: &drain.Helper{ + GracePeriodSeconds: -1, + ErrOut: ioStreams.ErrOut, + }, } } func NewCmdDrain(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - options := NewDrainOptions(f, ioStreams) + o := NewDrainCmdOptions(f, ioStreams) cmd := &cobra.Command{ Use: "drain NODE", DisableFlagsInUseLine: true, Short: i18n.T("Drain node in preparation for maintenance"), - Long: drain_long, - Example: drain_example, + Long: drainLong, + Example: drainExample, Run: func(cmd *cobra.Command, args []string) { - cmdutil.CheckErr(options.Complete(f, cmd, args)) - cmdutil.CheckErr(options.RunDrain()) + cmdutil.CheckErr(o.Complete(f, cmd, args)) + cmdutil.CheckErr(o.RunDrain()) }, } - cmd.Flags().BoolVar(&options.Force, "force", options.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.") - cmd.Flags().BoolVar(&options.IgnoreDaemonsets, "ignore-daemonsets", options.IgnoreDaemonsets, "Ignore DaemonSet-managed pods.") - cmd.Flags().BoolVar(&options.DeleteLocalData, "delete-local-data", options.DeleteLocalData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).") - cmd.Flags().IntVar(&options.GracePeriodSeconds, "grace-period", options.GracePeriodSeconds, "Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used.") - cmd.Flags().DurationVar(&options.Timeout, "timeout", options.Timeout, "The length of time to wait before giving up, zero means infinite") - cmd.Flags().StringVarP(&options.Selector, "selector", "l", options.Selector, "Selector (label query) to filter on") - cmd.Flags().StringVarP(&options.PodSelector, "pod-selector", "", options.PodSelector, "Label selector to filter pods on the node") + cmd.Flags().BoolVar(&o.drainer.Force, "force", o.drainer.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.") + cmd.Flags().BoolVar(&o.drainer.IgnoreAllDaemonSets, "ignore-daemonsets", o.drainer.IgnoreAllDaemonSets, "Ignore DaemonSet-managed pods.") + cmd.Flags().BoolVar(&o.drainer.DeleteLocalData, "delete-local-data", o.drainer.DeleteLocalData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).") + cmd.Flags().IntVar(&o.drainer.GracePeriodSeconds, "grace-period", o.drainer.GracePeriodSeconds, "Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used.") + cmd.Flags().DurationVar(&o.drainer.Timeout, "timeout", o.drainer.Timeout, "The length of time to wait before giving up, zero means infinite") + cmd.Flags().StringVarP(&o.drainer.Selector, "selector", "l", o.drainer.Selector, "Selector (label query) to filter on") + cmd.Flags().StringVarP(&o.drainer.PodSelector, "pod-selector", "", o.drainer.PodSelector, "Label selector to filter pods on the node") cmdutil.AddDryRunFlag(cmd) return cmd @@ -226,33 +184,28 @@ func NewCmdDrain(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobr // Complete populates some fields from the factory, grabs command line // arguments and looks up the node using Builder -func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { +func (o *DrainCmdOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { var err error if len(args) == 0 && !cmd.Flags().Changed("selector") { return cmdutil.UsageErrorf(cmd, fmt.Sprintf("USAGE: %s [flags]", cmd.Use)) } - if len(args) > 0 && len(o.Selector) > 0 { + if len(args) > 0 && len(o.drainer.Selector) > 0 { return cmdutil.UsageErrorf(cmd, "error: cannot specify both a node name and a --selector option") } - o.DryRun = cmdutil.GetDryRunFlag(cmd) + o.drainer.DryRun = cmdutil.GetDryRunFlag(cmd) - if o.client, err = f.KubernetesClientSet(); err != nil { + if o.drainer.Client, err = f.KubernetesClientSet(); err != nil { return err } - if len(o.PodSelector) > 0 { - if _, err := labels.Parse(o.PodSelector); err != nil { + if len(o.drainer.PodSelector) > 0 { + if _, err := labels.Parse(o.drainer.PodSelector); err != nil { return errors.New("--pod-selector= must be a valid label selector") } } - o.restClient, err = f.RESTClient() - if err != nil { - return err - } - o.nodeInfos = []*resource.Info{} o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() @@ -262,7 +215,7 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.PrintFlags.NamePrintFlags.Operation = operation - if o.DryRun { + if o.drainer.DryRun { o.PrintFlags.Complete("%s (dry run)") } @@ -281,8 +234,8 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st SingleResourceType(). Flatten() - if len(o.Selector) > 0 { - builder = builder.LabelSelectorParam(o.Selector). + if len(o.drainer.Selector) > 0 { + builder = builder.LabelSelectorParam(o.drainer.Selector). ResourceTypes("nodes") } @@ -306,7 +259,7 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st } // RunDrain runs the 'drain' command -func (o *DrainOptions) RunDrain() error { +func (o *DrainCmdOptions) RunDrain() error { if err := o.RunCordonOrUncordon(true); err != nil { return err } @@ -321,10 +274,10 @@ func (o *DrainOptions) RunDrain() error { for _, info := range o.nodeInfos { var err error - if !o.DryRun { + if !o.drainer.DryRun { err = o.deleteOrEvictPodsSimple(info) } - if err == nil || o.DryRun { + if err == nil || o.drainer.DryRun { drainedNodes.Insert(info.Name) printObj(info.Object, o.Out) } else { @@ -351,218 +304,43 @@ func (o *DrainOptions) RunDrain() error { return fatal } -func (o *DrainOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error { - pods, err := o.getPodsForDeletion(nodeInfo) - if err != nil { - return err +func (o *DrainCmdOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error { + list, errs := o.drainer.GetPodsForDeletion(nodeInfo.Name) + if errs != nil { + return utilerrors.NewAggregate(errs) + } + if warnings := list.Warnings(); warnings != "" { + fmt.Fprintf(o.ErrOut, "WARNING: %s\n", warnings) } - err = o.deleteOrEvictPods(pods) - if err != nil { - pendingPods, newErr := o.getPodsForDeletion(nodeInfo) - if newErr != nil { - return newErr - } + if err := o.deleteOrEvictPods(list.Pods()); err != nil { + pendingList, newErrs := o.drainer.GetPodsForDeletion(nodeInfo.Name) + fmt.Fprintf(o.ErrOut, "There are pending pods in node %q when an error occurred: %v\n", nodeInfo.Name, err) - for _, pendingPod := range pendingPods { + for _, pendingPod := range pendingList.Pods() { fmt.Fprintf(o.ErrOut, "%s/%s\n", "pod", pendingPod.Name) } - } - return err -} - -func (o *DrainOptions) getPodController(pod corev1.Pod) *metav1.OwnerReference { - return metav1.GetControllerOf(&pod) -} - -func (o *DrainOptions) unreplicatedFilter(pod corev1.Pod) (bool, *warning, *fatal) { - // any finished pod can be removed - if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { - return true, nil, nil - } - - controllerRef := o.getPodController(pod) - if controllerRef != nil { - return true, nil, nil - } - if o.Force { - return true, &warning{kUnmanagedWarning}, nil - } - - return false, nil, &fatal{kUnmanagedFatal} -} - -func (o *DrainOptions) daemonsetFilter(pod corev1.Pod) (bool, *warning, *fatal) { - // Note that we return false in cases where the pod is DaemonSet managed, - // regardless of flags. - // - // The exception is for pods that are orphaned (the referencing - // management resource - including DaemonSet - is not found). - // Such pods will be deleted if --force is used. - controllerRef := o.getPodController(pod) - if controllerRef == nil || controllerRef.Kind != "DaemonSet" { - return true, nil, nil - } - // Any finished pod can be removed. - if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { - return true, nil, nil - } - - if _, err := o.client.ExtensionsV1beta1().DaemonSets(pod.Namespace).Get(controllerRef.Name, metav1.GetOptions{}); err != nil { - // remove orphaned pods with a warning if --force is used - if apierrors.IsNotFound(err) && o.Force { - return true, &warning{err.Error()}, nil + if newErrs != nil { + fmt.Fprintf(o.ErrOut, "following errors also occurred:\n%s", utilerrors.NewAggregate(newErrs)) } - - return false, nil, &fatal{err.Error()} + return err } - - if !o.IgnoreDaemonsets { - return false, nil, &fatal{kDaemonsetFatal} - } - - return false, &warning{kDaemonsetWarning}, nil -} - -func mirrorPodFilter(pod corev1.Pod) (bool, *warning, *fatal) { - if _, found := pod.ObjectMeta.Annotations[corev1.MirrorPodAnnotationKey]; found { - return false, nil, nil - } - return true, nil, nil -} - -func hasLocalStorage(pod corev1.Pod) bool { - for _, volume := range pod.Spec.Volumes { - if volume.EmptyDir != nil { - return true - } - } - - return false -} - -func (o *DrainOptions) localStorageFilter(pod corev1.Pod) (bool, *warning, *fatal) { - if !hasLocalStorage(pod) { - return true, nil, nil - } - // Any finished pod can be removed. - if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { - return true, nil, nil - } - if !o.DeleteLocalData { - return false, nil, &fatal{kLocalStorageFatal} - } - - return true, &warning{kLocalStorageWarning}, nil -} - -// Map of status message to a list of pod names having that status. -type podStatuses map[string][]string - -func (ps podStatuses) Message() string { - msgs := []string{} - - for key, pods := range ps { - msgs = append(msgs, fmt.Sprintf("%s: %s", key, strings.Join(pods, ", "))) - } - return strings.Join(msgs, "; ") -} - -// getPodsForDeletion receives resource info for a node, and returns all the pods from the given node that we -// are planning on deleting. If there are any pods preventing us from deleting, we return that list in an error. -func (o *DrainOptions) getPodsForDeletion(nodeInfo *resource.Info) (pods []corev1.Pod, err error) { - labelSelector, err := labels.Parse(o.PodSelector) - if err != nil { - return pods, err - } - - podList, err := o.client.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{ - LabelSelector: labelSelector.String(), - FieldSelector: fields.SelectorFromSet(fields.Set{"spec.nodeName": nodeInfo.Name}).String()}) - if err != nil { - return pods, err - } - - ws := podStatuses{} - fs := podStatuses{} - - for _, pod := range podList.Items { - podOk := true - for _, filt := range []podFilter{o.daemonsetFilter, mirrorPodFilter, o.localStorageFilter, o.unreplicatedFilter} { - filterOk, w, f := filt(pod) - - podOk = podOk && filterOk - if w != nil { - ws[w.string] = append(ws[w.string], pod.Name) - } - if f != nil { - fs[f.string] = append(fs[f.string], pod.Name) - } - - // short-circuit as soon as pod not ok - // at that point, there is no reason to run pod - // through any additional filters - if !podOk { - break - } - } - if podOk { - pods = append(pods, pod) - } - } - - if len(fs) > 0 { - return []corev1.Pod{}, errors.New(fs.Message()) - } - if len(ws) > 0 { - fmt.Fprintf(o.ErrOut, "WARNING: %s\n", ws.Message()) - } - return pods, nil -} - -func (o *DrainOptions) deletePod(pod corev1.Pod) error { - deleteOptions := &metav1.DeleteOptions{} - if o.GracePeriodSeconds >= 0 { - gracePeriodSeconds := int64(o.GracePeriodSeconds) - deleteOptions.GracePeriodSeconds = &gracePeriodSeconds - } - return o.client.CoreV1().Pods(pod.Namespace).Delete(pod.Name, deleteOptions) -} - -func (o *DrainOptions) evictPod(pod corev1.Pod, policyGroupVersion string) error { - deleteOptions := &metav1.DeleteOptions{} - if o.GracePeriodSeconds >= 0 { - gracePeriodSeconds := int64(o.GracePeriodSeconds) - deleteOptions.GracePeriodSeconds = &gracePeriodSeconds - } - eviction := &policyv1beta1.Eviction{ - TypeMeta: metav1.TypeMeta{ - APIVersion: policyGroupVersion, - Kind: EvictionKind, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: pod.Name, - Namespace: pod.Namespace, - }, - DeleteOptions: deleteOptions, - } - // Remember to change change the URL manipulation func when Evction's version change - return o.client.PolicyV1beta1().Evictions(eviction.Namespace).Evict(eviction) + return nil } // deleteOrEvictPods deletes or evicts the pods on the api server -func (o *DrainOptions) deleteOrEvictPods(pods []corev1.Pod) error { +func (o *DrainCmdOptions) deleteOrEvictPods(pods []corev1.Pod) error { if len(pods) == 0 { return nil } - policyGroupVersion, err := SupportEviction(o.client) + policyGroupVersion, err := drain.CheckEvictionSupport(o.drainer.Client) if err != nil { return err } getPodFn := func(namespace, name string) (*corev1.Pod, error) { - return o.client.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{}) + return o.drainer.Client.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{}) } if len(policyGroupVersion) > 0 { @@ -572,14 +350,14 @@ func (o *DrainOptions) deleteOrEvictPods(pods []corev1.Pod) error { } } -func (o *DrainOptions) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodFn func(namespace, name string) (*corev1.Pod, error)) error { +func (o *DrainCmdOptions) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodFn func(namespace, name string) (*corev1.Pod, error)) error { returnCh := make(chan error, 1) for _, pod := range pods { go func(pod corev1.Pod, returnCh chan error) { - var err error for { - err = o.evictPod(pod, policyGroupVersion) + fmt.Fprintf(o.Out, "evicting pod %q\n", pod.Name) + err := o.drainer.EvictPod(pod, policyGroupVersion) if err == nil { break } else if apierrors.IsNotFound(err) { @@ -593,8 +371,7 @@ func (o *DrainOptions) evictPods(pods []corev1.Pod, policyGroupVersion string, g return } } - podArray := []corev1.Pod{pod} - _, err = o.waitForDelete(podArray, 1*time.Second, time.Duration(math.MaxInt64), true, getPodFn) + _, err := o.waitForDelete([]corev1.Pod{pod}, 1*time.Second, time.Duration(math.MaxInt64), true, getPodFn) if err == nil { returnCh <- nil } else { @@ -608,10 +385,10 @@ func (o *DrainOptions) evictPods(pods []corev1.Pod, policyGroupVersion string, g // 0 timeout means infinite, we use MaxInt64 to represent it. var globalTimeout time.Duration - if o.Timeout == 0 { + if o.drainer.Timeout == 0 { globalTimeout = time.Duration(math.MaxInt64) } else { - globalTimeout = o.Timeout + globalTimeout = o.drainer.Timeout } globalTimeoutCh := time.After(globalTimeout) numPods := len(pods) @@ -623,22 +400,22 @@ func (o *DrainOptions) evictPods(pods []corev1.Pod, policyGroupVersion string, g errors = append(errors, err) } case <-globalTimeoutCh: - return fmt.Errorf("Drain did not complete within %v", globalTimeout) + return fmt.Errorf("drain did not complete within %v", globalTimeout) } } return utilerrors.NewAggregate(errors) } -func (o *DrainOptions) deletePods(pods []corev1.Pod, getPodFn func(namespace, name string) (*corev1.Pod, error)) error { +func (o *DrainCmdOptions) deletePods(pods []corev1.Pod, getPodFn func(namespace, name string) (*corev1.Pod, error)) error { // 0 timeout means infinite, we use MaxInt64 to represent it. var globalTimeout time.Duration - if o.Timeout == 0 { + if o.drainer.Timeout == 0 { globalTimeout = time.Duration(math.MaxInt64) } else { - globalTimeout = o.Timeout + globalTimeout = o.drainer.Timeout } for _, pod := range pods { - err := o.deletePod(pod) + err := o.drainer.DeletePod(pod) if err != nil && !apierrors.IsNotFound(err) { return err } @@ -647,7 +424,7 @@ func (o *DrainOptions) deletePods(pods []corev1.Pod, getPodFn func(namespace, na return err } -func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.Duration, usingEviction bool, getPodFn func(string, string) (*corev1.Pod, error)) ([]corev1.Pod, error) { +func (o *DrainCmdOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.Duration, usingEviction bool, getPodFn func(string, string) (*corev1.Pod, error)) ([]corev1.Pod, error) { var verbStr string if usingEviction { verbStr = "evicted" @@ -681,65 +458,29 @@ func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.D return pods, err } -// SupportEviction uses Discovery API to find out if the server support eviction subresource -// If support, it will return its groupVersion; Otherwise, it will return "" -func SupportEviction(clientset kubernetes.Interface) (string, error) { - discoveryClient := clientset.Discovery() - groupList, err := discoveryClient.ServerGroups() - if err != nil { - return "", err - } - foundPolicyGroup := false - var policyGroupVersion string - for _, group := range groupList.Groups { - if group.Name == "policy" { - foundPolicyGroup = true - policyGroupVersion = group.PreferredVersion.GroupVersion - break - } - } - if !foundPolicyGroup { - return "", nil - } - resourceList, err := discoveryClient.ServerResourcesForGroupVersion("v1") - if err != nil { - return "", err - } - for _, resource := range resourceList.APIResources { - if resource.Name == EvictionSubresource && resource.Kind == EvictionKind { - return policyGroupVersion, nil - } - } - return "", nil -} - // RunCordonOrUncordon runs either Cordon or Uncordon. The desired value for // "Unschedulable" is passed as the first arg. -func (o *DrainOptions) RunCordonOrUncordon(desired bool) error { +func (o *DrainCmdOptions) RunCordonOrUncordon(desired bool) error { cordonOrUncordon := "cordon" if !desired { cordonOrUncordon = "un" + cordonOrUncordon } for _, nodeInfo := range o.nodeInfos { - if nodeInfo.Mapping.GroupVersionKind.Kind == "Node" { - obj, err := scheme.Scheme.ConvertToVersion(nodeInfo.Object, nodeInfo.Mapping.GroupVersionKind.GroupVersion()) + + printError := func(err error) { + fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) + } + + gvk := nodeInfo.ResourceMapping().GroupVersionKind + if gvk.Kind == "Node" { + c, err := drain.NewCordonHelperFromRuntimeObject(nodeInfo.Object, scheme.Scheme, gvk) if err != nil { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) + printError(err) continue } - oldData, err := json.Marshal(obj) - if err != nil { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) - continue - } - node, ok := obj.(*corev1.Node) - if !ok { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: unexpected Type%T, expected Node\n", cordonOrUncordon, nodeInfo.Name, obj) - continue - } - unsched := node.Spec.Unschedulable - if unsched == desired { + + if updateRequired := c.UpdateIfRequired(desired); !updateRequired { printObj, err := o.ToPrinter(already(desired)) if err != nil { fmt.Fprintf(o.ErrOut, "error: %v\n", err) @@ -747,22 +488,13 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error { } printObj(nodeInfo.Object, o.Out) } else { - if !o.DryRun { - helper := resource.NewHelper(o.restClient, nodeInfo.Mapping) - node.Spec.Unschedulable = desired - newData, err := json.Marshal(obj) - if err != nil { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) - continue + if !o.drainer.DryRun { + err, patchErr := c.PatchOrReplace(o.drainer.Client) + if patchErr != nil { + printError(patchErr) } - patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, obj) if err != nil { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) - continue - } - _, err = helper.Patch(o.Namespace, nodeInfo.Name, types.StrategicMergePatchType, patchBytes, nil) - if err != nil { - fmt.Fprintf(o.ErrOut, "error: unable to %s node %q: %v\n", cordonOrUncordon, nodeInfo.Name, err) + printError(err) continue } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/BUILD index 424e441d540..385ac41c9ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/BUILD @@ -31,7 +31,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/gopkg.in/yaml.v2:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/edit.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/edit.go index ab121f41ed5..94fcc4fd292 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/edit.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/edit/edit.go @@ -67,6 +67,7 @@ var ( kubectl edit deployment/mydeployment -o yaml --save-config`)) ) +// NewCmdEdit creates the `edit` command func NewCmdEdit(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := editor.NewEditOptions(editor.NormalEditMode, ioStreams) o.ValidateOptions = cmdutil.ValidateOptions{EnableValidation: true} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/exec/exec.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/exec/exec.go index 2cf2aa57bb6..e7f40e3f71a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/exec/exec.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/exec/exec.go @@ -39,7 +39,7 @@ import ( ) var ( - exec_example = templates.Examples(i18n.T(` + execExample = templates.Examples(i18n.T(` # Get output from running 'date' from pod 123456-7890, using the first container by default kubectl exec 123456-7890 date @@ -76,7 +76,7 @@ func NewCmdExec(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.C DisableFlagsInUseLine: true, Short: i18n.T("Execute a command in a container"), Long: "Execute a command in a container.", - Example: exec_example, + Example: execExample, Run: func(cmd *cobra.Command, args []string) { argsLenAtDash := cmd.ArgsLenAtDash() cmdutil.CheckErr(options.Complete(f, cmd, args, argsLenAtDash)) @@ -311,8 +311,7 @@ func (p *ExecOptions) Run() error { Resource("pods"). Name(pod.Name). Namespace(pod.Namespace). - SubResource("exec"). - Param("container", containerName) + SubResource("exec") req.VersionedParams(&corev1.PodExecOptions{ Container: containerName, Command: p.Command, diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/BUILD index bd71a3589e9..ddb9382111f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/BUILD @@ -21,8 +21,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/expose.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/expose.go index 2727e61c1bf..706e3f29441 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/expose.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/expose/expose.go @@ -30,8 +30,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -74,7 +74,7 @@ var ( kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https # Create a service for a replicated streaming application on port 4100 balancing UDP traffic and named 'video-stream'. - kubectl expose rc streamer --port=4100 --protocol=udp --name=video-stream + kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream # Create a service for a replicated nginx using replica set, which serves on port 80 and connects to the containers on port 8000. kubectl expose rs nginx --port=80 --target-port=8000 @@ -314,7 +314,8 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro } if inline := cmdutil.GetFlagString(cmd, "overrides"); len(inline) > 0 { - object, err = cmdutil.Merge(scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...), object, inline) + codec := runtime.NewCodec(scheme.DefaultJSONEncoder(), scheme.Codecs.UniversalDecoder(scheme.Scheme.PrioritizedVersionsAllGroups()...)) + object, err = cmdutil.Merge(codec, object, inline) if err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/BUILD index c63ccad3fd1..609c3c329fa 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/BUILD @@ -49,14 +49,15 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/jsonpath:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", "//vendor/vbom.ml/util/sortorder:go_default_library", ], ) @@ -71,7 +72,7 @@ go_test( "sorter_test.go", ], data = [ - "//api/openapi-spec:swagger-spec", + "//api/openapi-spec", "//test/e2e/testing-manifests:all-srcs", "//test/fixtures", ], @@ -100,7 +101,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//staging/src/k8s.io/client-go/rest/watch:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn.go index 576d4995af4..28825d90c38 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn.go @@ -24,11 +24,12 @@ import ( "reflect" "regexp" "strings" - "text/tabwriter" + + "github.com/liggitt/tabwriter" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" "k8s.io/client-go/util/jsonpath" utilprinters "k8s.io/kubernetes/pkg/kubectl/util/printers" ) @@ -74,7 +75,7 @@ func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder, noHea parts := strings.Split(spec, ",") columns := make([]Column, len(parts)) for ix := range parts { - colSpec := strings.Split(parts[ix], ":") + colSpec := strings.SplitN(parts[ix], ":", 2) if len(colSpec) != 2 { return nil, fmt.Errorf("unexpected custom-columns spec: %s, expected
:", parts[ix]) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn_flags.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn_flags.go index b8f2f4002b2..832b0519462 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn_flags.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/customcolumn_flags.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" "k8s.io/kubernetes/pkg/kubectl/scheme" ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get.go index 3e90d537b72..2c424c00caa 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get.go @@ -38,8 +38,8 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/rest" watchtools "k8s.io/client-go/tools/watch" "k8s.io/kubernetes/pkg/api/legacyscheme" @@ -78,8 +78,6 @@ type GetOptions struct { IgnoreNotFound bool Export bool - IncludeUninitialized bool - genericclioptions.IOStreams } @@ -116,9 +114,15 @@ var ( # List a pod identified by type and name specified in "pod.yaml" in JSON output format. kubectl get -f pod.yaml -o json + # List resources from a directory with kustomization.yaml - e.g. dir/kustomization.yaml. + kubectl get -k dir/ + # Return only the phase value of the specified pod. kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}} + # List resource information in custom columns. + kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image + # List all replication controllers and services together in ps output format. kubectl get rc,services @@ -152,7 +156,7 @@ func NewCmdGet(parent string, f cmdutil.Factory, streams genericclioptions.IOStr Use: "get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]", DisableFlagsInUseLine: true, Short: i18n.T("Display one or many resources"), - Long: getLong + "\n\n" + cmdutil.SuggestApiResources(parent), + Long: getLong + "\n\n" + cmdutil.SuggestAPIResources(parent), Example: getExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) @@ -171,11 +175,12 @@ func NewCmdGet(parent string, f cmdutil.Factory, streams genericclioptions.IOStr cmd.Flags().BoolVar(&o.IgnoreNotFound, "ignore-not-found", o.IgnoreNotFound, "If the requested object does not exist the command will return exit code 0.") cmd.Flags().StringVarP(&o.LabelSelector, "selector", "l", o.LabelSelector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)") cmd.Flags().StringVar(&o.FieldSelector, "field-selector", o.FieldSelector, "Selector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.") - cmd.Flags().BoolVar(&o.AllNamespaces, "all-namespaces", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") + cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") cmdutil.AddIncludeUninitializedFlag(cmd) addOpenAPIPrintColumnFlags(cmd, o) addServerPrintColumnFlags(cmd, o) cmd.Flags().BoolVar(&o.Export, "export", o.Export, "If true, use 'export' for the resources. Exported resources are stripped of cluster-specific information.") + cmd.Flags().MarkDeprecated("export", "This flag is deprecated and will be removed in future.") cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "identifying the resource to get from a server.") return cmd } @@ -223,8 +228,6 @@ func (o *GetOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri o.IsHumanReadablePrinter = true } - o.IncludeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, false) - o.ToPrinter = func(mapping *meta.RESTMapping, withNamespace bool, withKind bool) (printers.ResourcePrinterFunc, error) { // make a new copy of current flags / opts before mutating printFlags := o.PrintFlags.Copy() @@ -250,12 +253,9 @@ func (o *GetOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri switch { case o.Watch || o.WatchOnly: - // include uninitialized objects when watching on a single object - // unless explicitly set --include-uninitialized=false - o.IncludeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, len(args) == 2) default: - if len(args) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { - fmt.Fprintf(o.ErrOut, "You must specify the type of resource to get. %s\n\n", cmdutil.SuggestApiResources(o.CmdParent)) + if len(args) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { + fmt.Fprintf(o.ErrOut, "You must specify the type of resource to get. %s\n\n", cmdutil.SuggestAPIResources(o.CmdParent)) fullCmdName := cmd.Parent().CommandPath() usageString := "Required resource not specified." if len(fullCmdName) > 0 && cmdutil.IsSiblingCommandExists(cmd, "explain") { @@ -290,16 +290,20 @@ func (o *GetOptions) Validate(cmd *cobra.Command) error { return nil } +// OriginalPositioner and NopPositioner is required for swap/sort operations of data in table format type OriginalPositioner interface { OriginalPosition(int) int } +// NopPositioner and OriginalPositioner is required for swap/sort operations of data in table format type NopPositioner struct{} +// OriginalPosition returns the original position from NopPositioner object func (t *NopPositioner) OriginalPosition(ix int) int { return ix } +// RuntimeSorter holds the required objects to perform sorting of runtime objects type RuntimeSorter struct { field string decoder runtime.Decoder @@ -307,6 +311,7 @@ type RuntimeSorter struct { positioner OriginalPositioner } +// Sort performs the sorting of runtime objects func (r *RuntimeSorter) Sort() error { // a list is only considered "sorted" if there are 0 or 1 items in it // AND (if 1 item) the item is not a Table object @@ -359,6 +364,7 @@ func (r *RuntimeSorter) Sort() error { return nil } +// OriginalPosition returns the original position of a runtime object func (r *RuntimeSorter) OriginalPosition(ix int) int { if r.positioner == nil { return 0 @@ -366,12 +372,13 @@ func (r *RuntimeSorter) OriginalPosition(ix int) int { return r.positioner.OriginalPosition(ix) } -// allows custom decoder to be set for testing +// WithDecoder allows custom decoder to be set for testing func (r *RuntimeSorter) WithDecoder(decoder runtime.Decoder) *RuntimeSorter { r.decoder = decoder return r } +// NewRuntimeSorter returns a new instance of RuntimeSorter func NewRuntimeSorter(objects []runtime.Object, sortBy string) *RuntimeSorter { parsedField, err := RelaxedJSONPathExpression(sortBy) if err != nil { @@ -410,7 +417,6 @@ func (o *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e FieldSelectorParam(o.FieldSelector). ExportParam(o.Export). RequestChunksOf(chunkSize). - IncludeUninitialized(o.IncludeUninitialized). ResourceTypeOrNameArgs(true, args...). ContinueOnError(). Latest(). @@ -516,6 +522,7 @@ func (o *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e if shouldGetNewPrinterForMapping(printer, lastMapping, mapping) { w.Flush() + w.SetRememberedWidths(nil) // TODO: this doesn't belong here // add linebreak between resource groups (if there is more than one) @@ -584,7 +591,6 @@ func (o *GetOptions) watch(f cmdutil.Factory, cmd *cobra.Command, args []string) FieldSelectorParam(o.FieldSelector). ExportParam(o.Export). RequestChunksOf(o.ChunkSize). - IncludeUninitialized(o.IncludeUninitialized). ResourceTypeOrNameArgs(true, args...). SingleResourceType(). Latest(). @@ -626,10 +632,11 @@ func (o *GetOptions) watch(f cmdutil.Factory, cmd *cobra.Command, args []string) } } + writer := utilprinters.GetNewTabWriter(o.Out) + // print the current object if !o.WatchOnly { var objsToPrint []runtime.Object - writer := utilprinters.GetNewTabWriter(o.Out) if isList { objsToPrint, _ = meta.ExtractList(obj) @@ -674,9 +681,10 @@ func (o *GetOptions) watch(f cmdutil.Factory, cmd *cobra.Command, args []string) internalGV := mapping.GroupVersionKind.GroupKind().WithVersion(runtime.APIVersionInternal).GroupVersion() objToPrint = attemptToConvertToInternal(e.Object, legacyscheme.Scheme, internalGV) } - if err := printer.PrintObj(objToPrint, o.Out); err != nil { + if err := printer.PrintObj(objToPrint, writer); err != nil { return false, err } + writer.Flush() return false, nil }) return err diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get_flags.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get_flags.go index c1d29e93529..cae916ca6b1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get_flags.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/get_flags.go @@ -21,7 +21,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" + "k8s.io/cli-runtime/pkg/printers" ) // PrintFlags composes common printer flag structs @@ -60,6 +60,7 @@ func (f *PrintFlags) Copy() PrintFlags { return printFlags } +// AllowedFormats is the list of formats in which data can be displayed func (f *PrintFlags) AllowedFormats() []string { formats := f.JSONYamlPrintFlags.AllowedFormats() formats = append(formats, f.NamePrintFlags.AllowedFormats()...) @@ -69,7 +70,6 @@ func (f *PrintFlags) AllowedFormats() []string { return formats } - // ToPrinter attempts to find a composed set of PrintFlags suitable for // returning a printer based on current flag values. func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) { @@ -132,10 +132,6 @@ func (f *PrintFlags) AddFlags(cmd *cobra.Command) { if f.NoHeaders != nil { cmd.Flags().BoolVar(f.NoHeaders, "no-headers", *f.NoHeaders, "When using the default or custom-column output format, don't print headers (default print headers).") } - - // TODO(juanvallejo): This is deprecated - remove - cmd.Flags().BoolP("show-all", "a", true, "When printing, show all resources (default show all pods including terminated one.)") - cmd.Flags().MarkDeprecated("show-all", "will be removed in an upcoming release") } // NewGetPrintFlags returns flags associated with humanreadable, diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/humanreadable_flags.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/humanreadable_flags.go index fa7bbca883a..efd597c4598 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/humanreadable_flags.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/humanreadable_flags.go @@ -61,6 +61,7 @@ func (f *HumanPrintFlags) EnsureWithNamespace() error { return nil } +// AllowedFormats returns more customized formating options func (f *HumanPrintFlags) AllowedFormats() []string { return []string{"wide"} } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/sorter.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/sorter.go index d806decd19a..a5f9d04a188 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/sorter.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/get/sorter.go @@ -30,9 +30,9 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/client-go/util/integer" + "k8s.io/cli-runtime/pkg/printers" "k8s.io/client-go/util/jsonpath" + "k8s.io/utils/integer" "vbom.ml/util/sortorder" ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/BUILD index 549899a7661..6453a8efdcd 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/BUILD @@ -19,8 +19,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -41,7 +41,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/label.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/label.go index 11251a278d2..b912ffd1666 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/label.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/label/label.go @@ -35,8 +35,8 @@ import ( "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -72,7 +72,6 @@ type LabelOptions struct { namespace string enforceNamespace bool - includeUninitialized bool builder *resource.Builder unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) @@ -192,7 +191,6 @@ func (o *LabelOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } - o.includeUninitialized = cmdutil.ShouldIncludeUninitialized(cmd, false) o.builder = f.NewBuilder() o.unstructuredClientForMapping = f.UnstructuredClientForMapping @@ -207,7 +205,7 @@ func (o *LabelOptions) Validate() error { if o.all && len(o.fieldSelector) > 0 { return fmt.Errorf("cannot set --all and --field-selector at the same time") } - if len(o.resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames) { + if len(o.resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, "") { return fmt.Errorf("one or more resources must be specified as or /") } if len(o.newLabels) < 1 && len(o.removeLabels) < 1 && !o.list { @@ -224,7 +222,6 @@ func (o *LabelOptions) RunLabel() error { ContinueOnError(). NamespaceParam(o.namespace).DefaultNamespace(). FilenameParam(o.enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(o.includeUninitialized). Flatten() if !o.local { @@ -344,8 +341,7 @@ func (o *LabelOptions) RunLabel() error { if err != nil { return err } - printer.PrintObj(info.Object, o.Out) - return nil + return printer.PrintObj(info.Object, o.Out) }) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/logs/logs.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/logs/logs.go index 5f8f3162b19..82565e3f9ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/logs/logs.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/logs/logs.go @@ -17,10 +17,12 @@ limitations under the License. package logs import ( + "bufio" "errors" "fmt" "io" "os" + "sync" "time" "github.com/spf13/cobra" @@ -59,6 +61,9 @@ var ( # Begin streaming the logs of the ruby container in pod web-1 kubectl logs -f -c ruby web-1 + # Begin streaming the logs from all containers in pods defined by label app=nginx + kubectl logs -f -lapp=nginx --all-containers=true + # Display only the most recent 20 lines of output in pod nginx kubectl logs --tail=20 nginx @@ -86,7 +91,7 @@ type LogsOptions struct { Options runtime.Object Resources []string - ConsumeRequestFn func(*rest.Request, io.Writer) error + ConsumeRequestFn func(rest.ResponseWrapper, io.Writer) error // PodLogOptions SinceTime string @@ -101,6 +106,7 @@ type LogsOptions struct { // whether or not a container name was given via --container ContainerNameSpecified bool Selector string + MaxFollowConcurency int Object runtime.Object GetPodTimeout time.Duration @@ -112,9 +118,10 @@ type LogsOptions struct { func NewLogsOptions(streams genericclioptions.IOStreams, allContainers bool) *LogsOptions { return &LogsOptions{ - IOStreams: streams, - AllContainers: allContainers, - Tail: -1, + IOStreams: streams, + AllContainers: allContainers, + Tail: -1, + MaxFollowConcurency: 5, } } @@ -151,6 +158,7 @@ func NewCmdLogs(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.C cmd.Flags().StringVarP(&o.Container, "container", "c", o.Container, "Print the logs of this container") cmdutil.AddPodRunningTimeoutFlag(cmd, defaultPodLogsTimeout) cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on.") + cmd.Flags().IntVar(&o.MaxFollowConcurency, "max-log-requests", o.MaxFollowConcurency, "Specify maximum number of concurrent logs to follow when using by a selector. Defaults to 5.") return cmd } @@ -256,10 +264,6 @@ func (o *LogsOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []str } func (o LogsOptions) Validate() error { - if o.Follow && len(o.Selector) > 0 { - return fmt.Errorf("only one of follow (-f) or selector (-l) is allowed") - } - if len(o.SinceTime) > 0 && o.SinceSeconds != 0 { return fmt.Errorf("at most one of `sinceTime` or `sinceSeconds` may be specified") } @@ -298,6 +302,47 @@ func (o LogsOptions) RunLogs() error { return err } + if o.Follow && len(requests) > 1 { + if len(requests) > o.MaxFollowConcurency { + return fmt.Errorf( + "you are attempting to follow %d log streams, but maximum allowed concurency is %d, use --max-log-requests to increase the limit", + len(requests), o.MaxFollowConcurency, + ) + } + + return o.parallelConsumeRequest(requests) + } + + return o.sequentialConsumeRequest(requests) +} + +func (o LogsOptions) parallelConsumeRequest(requests []rest.ResponseWrapper) error { + reader, writer := io.Pipe() + wg := &sync.WaitGroup{} + wg.Add(len(requests)) + for _, request := range requests { + go func(request rest.ResponseWrapper) { + if err := o.ConsumeRequestFn(request, writer); err != nil { + writer.CloseWithError(err) + + // It's important to return here to propagate the error via the pipe + return + } + + wg.Done() + }(request) + } + + go func() { + wg.Wait() + writer.Close() + }() + + _, err := io.Copy(o.Out, reader) + return err +} + +func (o LogsOptions) sequentialConsumeRequest(requests []rest.ResponseWrapper) error { for _, request := range requests { if err := o.ConsumeRequestFn(request, o.Out); err != nil { return err @@ -307,13 +352,33 @@ func (o LogsOptions) RunLogs() error { return nil } -func DefaultConsumeRequest(request *rest.Request, out io.Writer) error { +// DefaultConsumeRequest reads the data from request and writes into +// the out writer. It buffers data from requests until the newline or io.EOF +// occurs in the data, so it doesn't interleave logs sub-line +// when running concurrently. +// +// A successful read returns err == nil, not err == io.EOF. +// Because the function is defined to read from request until io.EOF, it does +// not treat an io.EOF as an error to be reported. +func DefaultConsumeRequest(request rest.ResponseWrapper, out io.Writer) error { readCloser, err := request.Stream() if err != nil { return err } defer readCloser.Close() - _, err = io.Copy(out, readCloser) - return err + r := bufio.NewReader(readCloser) + for { + bytes, err := r.ReadBytes('\n') + if _, err := out.Write(bytes); err != nil { + return err + } + + if err != nil { + if err != io.EOF { + return err + } + return nil + } + } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/BUILD index 683b0abef23..09462c35589 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/BUILD @@ -19,8 +19,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -38,7 +38,7 @@ go_test( "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/patch.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/patch.go index cb8eb0c8c0b..8ede91516ec 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/patch.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/patch/patch.go @@ -34,8 +34,8 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -73,9 +73,7 @@ var ( patchLong = templates.LongDesc(i18n.T(` Update field(s) of a resource using strategic merge patch, a JSON merge patch, or a JSON patch. - JSON and YAML formats are accepted. - - Please refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.`)) + JSON and YAML formats are accepted.`)) patchExample = templates.Examples(i18n.T(` # Partially update a node using a strategic merge patch. Specify the patch as JSON. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD index fb6091de395..6541bc9fcb9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", @@ -11,6 +11,7 @@ go_library( "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) @@ -33,3 +34,11 @@ filegroup( data = glob(["testdata/**"]), visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = ["plugin_test.go"], + data = glob(["testdata/**"]), + embed = [":go_default_library"], + deps = ["//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go index 528ede0e70c..ebe1f09525e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go @@ -28,19 +28,20 @@ import ( "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/klog" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) var ( - plugin_long = templates.LongDesc(` + pluginLong = templates.LongDesc(` Provides utilities for interacting with plugins. Plugins provide extended functionality that is not part of the major command-line distribution. Please refer to the documentation and examples for more information about how write your own plugins.`) - plugin_list_long = templates.LongDesc(` + pluginListLong = templates.LongDesc(` List all available plugin files on a user's PATH. Available plugin files are those that are: @@ -48,6 +49,8 @@ var ( - anywhere on the user's PATH - begin with "kubectl-" `) + + ValidPluginFilenamePrefixes = []string{"kubectl"} ) func NewCmdPlugin(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { @@ -55,7 +58,7 @@ func NewCmdPlugin(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra Use: "plugin [flags]", DisableFlagsInUseLine: true, Short: i18n.T("Provides utilities for interacting with plugins."), - Long: plugin_long, + Long: pluginLong, Run: func(cmd *cobra.Command, args []string) { cmdutil.DefaultSubCommandRun(streams.ErrOut)(cmd, args) }, @@ -69,6 +72,8 @@ type PluginListOptions struct { Verifier PathVerifier NameOnly bool + PluginPaths []string + genericclioptions.IOStreams } @@ -81,7 +86,7 @@ func NewCmdPluginList(f cmdutil.Factory, streams genericclioptions.IOStreams) *c cmd := &cobra.Command{ Use: "list", Short: "list all visible plugin executables on a user's PATH", - Long: plugin_list_long, + Long: pluginListLong, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(cmd)) cmdutil.CheckErr(o.Run()) @@ -97,22 +102,25 @@ func (o *PluginListOptions) Complete(cmd *cobra.Command) error { root: cmd.Root(), seenPlugins: make(map[string]string, 0), } + + o.PluginPaths = filepath.SplitList(os.Getenv("PATH")) return nil } func (o *PluginListOptions) Run() error { - path := "PATH" - if runtime.GOOS == "windows" { - path = "path" - } - pluginsFound := false isFirstFile := true pluginErrors := []error{} pluginWarnings := 0 - for _, dir := range filepath.SplitList(os.Getenv(path)) { + + for _, dir := range uniquePathsList(o.PluginPaths) { files, err := ioutil.ReadDir(dir) if err != nil { + if _, ok := err.(*os.PathError); ok && strings.Contains(err.Error(), "no such file") { + klog.V(3).Infof("unable to find directory %q in your PATH. Skipping...", dir) + continue + } + pluginErrors = append(pluginErrors, fmt.Errorf("error: unable to read directory %q in your PATH: %v", dir, err)) continue } @@ -121,12 +129,12 @@ func (o *PluginListOptions) Run() error { if f.IsDir() { continue } - if !strings.HasPrefix(f.Name(), "kubectl-") { + if !hasValidPrefix(f.Name(), ValidPluginFilenamePrefixes) { continue } if isFirstFile { - fmt.Fprintf(o.ErrOut, "The following kubectl-compatible plugins are available:\n\n") + fmt.Fprintf(o.ErrOut, "The following compatible plugins are available:\n\n") pluginsFound = true isFirstFile = false } @@ -226,7 +234,10 @@ func isExecutable(fullPath string) (bool, error) { } if runtime.GOOS == "windows" { - if strings.HasSuffix(info.Name(), ".exe") { + fileExt := strings.ToLower(filepath.Ext(fullPath)) + + switch fileExt { + case ".bat", ".cmd", ".com", ".exe", ".ps1": return true, nil } return false, nil @@ -238,3 +249,28 @@ func isExecutable(fullPath string) (bool, error) { return false, nil } + +// uniquePathsList deduplicates a given slice of strings without +// sorting or otherwise altering its order in any way. +func uniquePathsList(paths []string) []string { + seen := map[string]bool{} + newPaths := []string{} + for _, p := range paths { + if seen[p] { + continue + } + seen[p] = true + newPaths = append(newPaths, p) + } + return newPaths +} + +func hasValidPrefix(filepath string, validPrefixes []string) bool { + for _, prefix := range validPrefixes { + if !strings.HasPrefix(filepath, prefix+"-") { + continue + } + return true + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/portforward/portforward.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/portforward/portforward.go index 4194f4f336b..d31a0193488 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/portforward/portforward.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/portforward/portforward.go @@ -59,7 +59,7 @@ type PortForwardOptions struct { var ( portforwardLong = templates.LongDesc(i18n.T(` - Forward one or more local ports to a pod. + Forward one or more local ports to a pod. This command requires the node to have 'socat' installed. Use resource type/name such as deployment/mydeployment to select a pod. Resource type defaults to 'pod' if omitted. @@ -120,7 +120,7 @@ func NewCmdPortForward(f cmdutil.Factory, streams genericclioptions.IOStreams) * }, } cmdutil.AddPodRunningTimeoutFlag(cmd, defaultPodPortForwardWaitTimeout) - cmd.Flags().StringSliceVar(&opts.Address, "address", []string{"localhost"}, "Addresses to listen on (comma separated)") + cmd.Flags().StringSliceVar(&opts.Address, "address", []string{"localhost"}, "Addresses to listen on (comma separated). Only accepts IP addresses or localhost as a value. When localhost is supplied, kubectl will try to bind on both 127.0.0.1 and ::1 and will fail if neither of these addresses are available to bind.") // TODO support UID return cmd } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/BUILD index 864f5a34747..f65ddb38ca9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/BUILD @@ -17,7 +17,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -35,7 +35,7 @@ go_test( "//pkg/kubectl/scheme:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/replace.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/replace.go index dcc8ddcb878..194794a25c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/replace.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/replace/replace.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/delete" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -48,9 +48,7 @@ var ( JSON and YAML formats are accepted. If replacing an existing resource, the complete resource spec must be provided. This can be obtained by - $ kubectl get TYPE NAME -o yaml - - Please refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.`)) + $ kubectl get TYPE NAME -o yaml`)) replaceExample = templates.Examples(i18n.T(` # Replace a pod using the data in pod.json. @@ -119,7 +117,6 @@ func NewCmdReplace(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobr o.DeleteFlags.AddFlags(cmd) o.RecordFlags.AddFlags(cmd) - cmd.MarkFlagRequired("filename") cmdutil.AddValidateFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd) @@ -165,6 +162,11 @@ func (o *ReplaceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] } o.DeleteOptions = deleteOpts + err = o.DeleteOptions.FilenameOptions.RequireFilenameOrKustomize() + if err != nil { + return err + } + schema, err := f.Validator(o.validate) if err != nil { return err @@ -191,7 +193,7 @@ func (o *ReplaceOptions) Validate(cmd *cobra.Command) error { return fmt.Errorf("--timeout must have --force specified") } - if cmdutil.IsFilenameSliceEmpty(o.DeleteOptions.FilenameOptions.Filenames) { + if cmdutil.IsFilenameSliceEmpty(o.DeleteOptions.FilenameOptions.Filenames, "") { return cmdutil.UsageErrorf(cmd, "Must specify --filename to replace") } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/BUILD index cd16b37319b..2abbdae01a6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/BUILD @@ -19,8 +19,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/scale:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/rollingupdate.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/rollingupdate.go index b39ad2049f6..b2e0e3ef881 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/rollingupdate.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate/rollingupdate.go @@ -31,8 +31,8 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/kubernetes" scaleclient "k8s.io/client-go/scale" "k8s.io/kubernetes/pkg/kubectl" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/BUILD index 8f7c389c0d9..9d56043dfbb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/BUILD @@ -37,12 +37,12 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library", - "//vendor/github.com/renstrom/dedent:go_default_library", + "//vendor/github.com/lithammer/dedent:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout.go index 38b2c529753..f5d172a404d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout.go @@ -17,7 +17,7 @@ limitations under the License. package rollout import ( - "github.com/renstrom/dedent" + "github.com/lithammer/dedent" "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" @@ -27,17 +27,17 @@ import ( ) var ( - rollout_long = templates.LongDesc(` - Manage the rollout of a resource.` + rollout_valid_resources) + rolloutLong = templates.LongDesc(` + Manage the rollout of a resource.` + rolloutValidResources) - rollout_example = templates.Examples(` + rolloutExample = templates.Examples(` # Rollback to the previous deployment kubectl rollout undo deployment/abc - + # Check the rollout status of a daemonset kubectl rollout status daemonset/foo`) - rollout_valid_resources = dedent.Dedent(` + rolloutValidResources = dedent.Dedent(` Valid resource types include: * deployments @@ -46,13 +46,14 @@ var ( `) ) +// NewCmdRollout returns a Command instance for 'rollout' sub command func NewCmdRollout(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { cmd := &cobra.Command{ Use: "rollout SUBCOMMAND", DisableFlagsInUseLine: true, Short: i18n.T("Manage the rollout of a resource"), - Long: rollout_long, - Example: rollout_example, + Long: rolloutLong, + Example: rolloutExample, Run: cmdutil.DefaultSubCommandRun(streams.Out), } // subcommands diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_history.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_history.go index 009c8d76ca4..709edde319b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_history.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_history.go @@ -22,8 +22,8 @@ import ( "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -32,10 +32,10 @@ import ( ) var ( - history_long = templates.LongDesc(` + historyLong = templates.LongDesc(` View previous rollout revisions and configurations.`) - history_example = templates.Examples(` + historyExample = templates.Examples(` # View the rollout history of a deployment kubectl rollout history deployment/abc @@ -43,6 +43,7 @@ var ( kubectl rollout history daemonset/abc --revision=3`) ) +// RolloutHistoryOptions holds the options for 'rollout history' sub command type RolloutHistoryOptions struct { PrintFlags *genericclioptions.PrintFlags ToPrinter func(string) (printers.ResourcePrinter, error) @@ -61,6 +62,7 @@ type RolloutHistoryOptions struct { genericclioptions.IOStreams } +// NewRolloutHistoryOptions returns an initialized RolloutHistoryOptions instance func NewRolloutHistoryOptions(streams genericclioptions.IOStreams) *RolloutHistoryOptions { return &RolloutHistoryOptions{ PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme), @@ -68,6 +70,7 @@ func NewRolloutHistoryOptions(streams genericclioptions.IOStreams) *RolloutHisto } } +// NewCmdRolloutHistory returns a Command instance for RolloutHistory sub command func NewCmdRolloutHistory(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewRolloutHistoryOptions(streams) @@ -77,8 +80,8 @@ func NewCmdRolloutHistory(f cmdutil.Factory, streams genericclioptions.IOStreams Use: "history (TYPE NAME | TYPE/NAME) [flags]", DisableFlagsInUseLine: true, Short: i18n.T("View rollout history"), - Long: history_long, - Example: history_example, + Long: historyLong, + Example: historyExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -97,6 +100,7 @@ func NewCmdRolloutHistory(f cmdutil.Factory, streams genericclioptions.IOStreams return cmd } +// Complete completes al the required options func (o *RolloutHistoryOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.Resources = args @@ -117,8 +121,9 @@ func (o *RolloutHistoryOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, return nil } +// Validate makes sure all the provided values for command-line options are valid func (o *RolloutHistoryOptions) Validate() error { - if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("required resource not specified") } if o.Revision < 0 { @@ -128,6 +133,7 @@ func (o *RolloutHistoryOptions) Validate() error { return nil } +// Run performs the execution of 'rollout history' sub command func (o *RolloutHistoryOptions) Run() error { r := o.Builder(). diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_pause.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_pause.go index 70c5af4a698..dcb8415aff4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_pause.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_pause.go @@ -24,8 +24,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl/cmd/set" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" @@ -51,20 +51,21 @@ type PauseOptions struct { } var ( - pause_long = templates.LongDesc(` + pauseLong = templates.LongDesc(` Mark the provided resource as paused Paused resources will not be reconciled by a controller. Use "kubectl rollout resume" to resume a paused resource. Currently only deployments support being paused.`) - pause_example = templates.Examples(` + pauseExample = templates.Examples(` # Mark the nginx deployment as paused. Any current state of # the deployment will continue its function, new updates to the deployment will not # have an effect as long as the deployment is paused. kubectl rollout pause deployment/nginx`) ) +// NewCmdRolloutPause returns a Command instance for 'rollout pause' sub command func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := &PauseOptions{ PrintFlags: genericclioptions.NewPrintFlags("paused").WithTypeSetter(scheme.Scheme), @@ -77,8 +78,8 @@ func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) Use: "pause RESOURCE", DisableFlagsInUseLine: true, Short: i18n.T("Mark the provided resource as paused"), - Long: pause_long, - Example: pause_example, + Long: pauseLong, + Example: pauseExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -94,6 +95,7 @@ func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) return cmd } +// Complete completes all the required options func (o *PauseOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.Pauser = polymorphichelpers.ObjectPauserFn @@ -115,13 +117,14 @@ func (o *PauseOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st } func (o *PauseOptions) Validate() error { - if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("required resource not specified") } return nil } -func (o PauseOptions) RunPause() error { +// RunPause performs the execution of 'rollout pause' sub command +func (o *PauseOptions) RunPause() error { r := o.Builder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). NamespaceParam(o.Namespace).DefaultNamespace(). diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_resume.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_resume.go index e97c807173c..c68bc3a7994 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_resume.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_resume.go @@ -24,8 +24,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl/cmd/set" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" @@ -52,18 +52,19 @@ type ResumeOptions struct { } var ( - resume_long = templates.LongDesc(` + resumeLong = templates.LongDesc(` Resume a paused resource Paused resources will not be reconciled by a controller. By resuming a resource, we allow it to be reconciled again. Currently only deployments support being resumed.`) - resume_example = templates.Examples(` + resumeExample = templates.Examples(` # Resume an already paused deployment kubectl rollout resume deployment/nginx`) ) +// NewRolloutResumeOptions returns an initialized ResumeOptions instance func NewRolloutResumeOptions(streams genericclioptions.IOStreams) *ResumeOptions { return &ResumeOptions{ PrintFlags: genericclioptions.NewPrintFlags("resumed").WithTypeSetter(scheme.Scheme), @@ -71,6 +72,7 @@ func NewRolloutResumeOptions(streams genericclioptions.IOStreams) *ResumeOptions } } +// NewCmdRolloutResume returns a Command instance for 'rollout resume' sub command func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewRolloutResumeOptions(streams) @@ -80,8 +82,8 @@ func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) Use: "resume RESOURCE", DisableFlagsInUseLine: true, Short: i18n.T("Resume a paused resource"), - Long: resume_long, - Example: resume_example, + Long: resumeLong, + Example: resumeExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -96,6 +98,7 @@ func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) return cmd } +// Complete completes all the required options func (o *ResumeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.Resources = args @@ -118,12 +121,13 @@ func (o *ResumeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s } func (o *ResumeOptions) Validate() error { - if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("required resource not specified") } return nil } +// RunResume performs the execution of 'rollout resume' sub command func (o ResumeOptions) RunResume() error { r := o.Builder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_status.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_status.go index 311c9c88d90..c00117fee2d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_status.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_status.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch" @@ -45,7 +45,7 @@ import ( ) var ( - status_long = templates.LongDesc(` + statusLong = templates.LongDesc(` Show the status of the rollout. By default 'rollout status' will watch the status of the latest rollout @@ -55,11 +55,12 @@ var ( pin to a specific revision and abort if it is rolled over by another revision, use --revision=N where N is the revision you need to watch for.`) - status_example = templates.Examples(` + statusExample = templates.Examples(` # Watch the rollout status of a deployment kubectl rollout status deployment/nginx`) ) +// RolloutStatusOptions holds the command-line options for 'rollout status' sub command type RolloutStatusOptions struct { PrintFlags *genericclioptions.PrintFlags @@ -79,6 +80,7 @@ type RolloutStatusOptions struct { genericclioptions.IOStreams } +// NewRolloutStatusOptions returns an initialized RolloutStatusOptions instance func NewRolloutStatusOptions(streams genericclioptions.IOStreams) *RolloutStatusOptions { return &RolloutStatusOptions{ PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme), @@ -89,6 +91,7 @@ func NewRolloutStatusOptions(streams genericclioptions.IOStreams) *RolloutStatus } } +// NewCmdRolloutStatus returns a Command instance for the 'rollout status' sub command func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewRolloutStatusOptions(streams) @@ -98,8 +101,8 @@ func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) Use: "status (TYPE NAME | TYPE/NAME) [flags]", DisableFlagsInUseLine: true, Short: i18n.T("Show the status of the rollout"), - Long: status_long, - Example: status_example, + Long: statusLong, + Example: statusExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, args)) cmdutil.CheckErr(o.Validate()) @@ -117,6 +120,7 @@ func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) return cmd } +// Complete completes all the required options func (o *RolloutStatusOptions) Complete(f cmdutil.Factory, args []string) error { o.Builder = f.NewBuilder @@ -142,8 +146,9 @@ func (o *RolloutStatusOptions) Complete(f cmdutil.Factory, args []string) error return nil } +// Validate makes sure all the provided values for command-line options are valid func (o *RolloutStatusOptions) Validate() error { - if len(o.BuilderArgs) == 0 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames) { + if len(o.BuilderArgs) == 0 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, "") { return fmt.Errorf("required resource not specified") } @@ -154,6 +159,7 @@ func (o *RolloutStatusOptions) Validate() error { return nil } +// Run performs the execution of 'rollout status' sub command func (o *RolloutStatusOptions) Run() error { r := o.Builder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_undo.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_undo.go index 2ab7a028871..408b96c4bc6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_undo.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/rollout/rollout_undo.go @@ -23,8 +23,8 @@ import ( "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -50,10 +50,10 @@ type UndoOptions struct { } var ( - undo_long = templates.LongDesc(` + undoLong = templates.LongDesc(` Rollback to a previous rollout.`) - undo_example = templates.Examples(` + undoExample = templates.Examples(` # Rollback to the previous deployment kubectl rollout undo deployment/abc @@ -64,6 +64,7 @@ var ( kubectl rollout undo --dry-run=true deployment/abc`) ) +// NewRolloutUndoOptions returns an initialized UndoOptions instance func NewRolloutUndoOptions(streams genericclioptions.IOStreams) *UndoOptions { return &UndoOptions{ PrintFlags: genericclioptions.NewPrintFlags("rolled back").WithTypeSetter(scheme.Scheme), @@ -72,6 +73,7 @@ func NewRolloutUndoOptions(streams genericclioptions.IOStreams) *UndoOptions { } } +// NewCmdRolloutUndo returns a Command instance for the 'rollout undo' sub command func NewCmdRolloutUndo(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewRolloutUndoOptions(streams) @@ -81,8 +83,8 @@ func NewCmdRolloutUndo(f cmdutil.Factory, streams genericclioptions.IOStreams) * Use: "undo (TYPE NAME | TYPE/NAME) [flags]", DisableFlagsInUseLine: true, Short: i18n.T("Undo a previous rollout"), - Long: undo_long, - Example: undo_example, + Long: undoLong, + Example: undoExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -99,6 +101,7 @@ func NewCmdRolloutUndo(f cmdutil.Factory, streams genericclioptions.IOStreams) * return cmd } +// Complete completes al the required options func (o *UndoOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.Resources = args o.DryRun = cmdutil.GetDryRunFlag(cmd) @@ -123,12 +126,13 @@ func (o *UndoOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []str } func (o *UndoOptions) Validate() error { - if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.Resources) == 0 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { return fmt.Errorf("required resource not specified") } return nil } +// RunUndo performs the execution of 'rollout undo' sub command func (o *UndoOptions) RunUndo() error { r := o.Builder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/BUILD index 180ba1b6e2c..1fb98519b97 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/BUILD @@ -23,14 +23,16 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library", "//vendor/github.com/docker/distribution/reference:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go index fdd47b287a8..c89457b4cde 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go @@ -29,14 +29,16 @@ import ( "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/attach" @@ -241,6 +243,7 @@ func (o *RunOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { deleteOpts.IgnoreNotFound = true deleteOpts.WaitForDeletion = false deleteOpts.GracePeriod = -1 + deleteOpts.Quiet = o.Quiet o.DeleteOptions = deleteOpts @@ -360,9 +363,9 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e runObject, err := o.createGeneratedObject(f, cmd, generator, names, params, cmdutil.GetFlagString(cmd, "overrides"), namespace) if err != nil { return err - } else { - createdObjects = append(createdObjects, runObject) } + createdObjects = append(createdObjects, runObject) + allErrs := []error{} if o.Expose { serviceGenerator := cmdutil.GetFlagString(cmd, "service-generator") @@ -489,18 +492,41 @@ func (o *RunOptions) removeCreatedObjects(f cmdutil.Factory, createdObjects []*R // waitForPod watches the given pod until the exitCondition is true func waitForPod(podClient corev1client.PodsGetter, ns, name string, exitCondition watchtools.ConditionFunc) (*corev1.Pod, error) { - w, err := podClient.Pods(ns).Watch(metav1.SingleObject(metav1.ObjectMeta{Name: name})) - if err != nil { - return nil, err - } - // TODO: expose the timeout ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), 0*time.Second) defer cancel() + + preconditionFunc := func(store cache.Store) (bool, error) { + _, exists, err := store.Get(&metav1.ObjectMeta{Namespace: ns, Name: name}) + if err != nil { + return true, err + } + if !exists { + // We need to make sure we see the object in the cache before we start waiting for events + // or we would be waiting for the timeout if such object didn't exist. + // (e.g. it was deleted before we started informers so they wouldn't even see the delete event) + return true, errors.NewNotFound(corev1.Resource("pods"), name) + } + + return false, nil + } + + fieldSelector := fields.OneTermEqualSelector("metadata.name", name).String() + lw := &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + options.FieldSelector = fieldSelector + return podClient.Pods(ns).List(options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + options.FieldSelector = fieldSelector + return podClient.Pods(ns).Watch(options) + }, + } + intr := interrupt.New(nil, cancel) var result *corev1.Pod - err = intr.Run(func() error { - ev, err := watchtools.UntilWithoutRetry(ctx, w, func(ev watch.Event) (bool, error) { + err := intr.Run(func() error { + ev, err := watchtools.UntilWithSync(ctx, lw, &corev1.Pod{}, preconditionFunc, func(ev watch.Event) (bool, error) { return exitCondition(ev) }) if ev != nil { @@ -509,11 +535,6 @@ func waitForPod(podClient corev1client.PodsGetter, ns, name string, exitConditio return err }) - // Fix generic not found error. - if err != nil && errors.IsNotFound(err) { - err = errors.NewNotFound(corev1.Resource("pods"), name) - } - return result, err } @@ -567,9 +588,8 @@ func getRestartPolicy(cmd *cobra.Command, interactive bool) (corev1.RestartPolic if len(restart) == 0 { if interactive { return corev1.RestartPolicyOnFailure, nil - } else { - return corev1.RestartPolicyAlways, nil } + return corev1.RestartPolicyAlways, nil } switch corev1.RestartPolicy(restart) { case corev1.RestartPolicyAlways: @@ -655,7 +675,7 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command if err != nil { return nil, err } - // run has compiled knowledge of the thing is is creating + // run has compiled knowledge of the thing is creating gvks, _, err := scheme.Scheme.ObjectKinds(obj) if err != nil { return nil, err diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/BUILD index 5c76a02f140..1d2d63e23a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/BUILD @@ -21,8 +21,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/batch/v1:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/scale.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/scale.go index 997d37cefbb..a8ee56c870f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/scale.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/scale/scale.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/kubernetes" batchclient "k8s.io/client-go/kubernetes/typed/batch/v1" "k8s.io/kubernetes/pkg/kubectl" @@ -228,7 +228,7 @@ func (o *ScaleOptions) RunScale() error { // go down the legacy jobs path. This can be removed in 3.14 For now, contain it. fmt.Fprintf(o.ErrOut, "%s scale job is DEPRECATED and will be removed in a future version.\n", o.parent) - if err := ScaleJob(info, o.clientSet.Batch(), uint(o.Replicas), precondition, retry, waitForReplicas); err != nil { + if err := ScaleJob(info, o.clientSet.BatchV1(), uint(o.Replicas), precondition, retry, waitForReplicas); err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/BUILD index aa428c673c2..2d18cdfe408 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/BUILD @@ -38,8 +38,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -78,8 +78,8 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/helper.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/helper.go index 58775611e03..b2e578f607b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/helper.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/strategicpatch" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set.go index a50b7f95374..0617f88caec 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set.go @@ -25,18 +25,19 @@ import ( ) var ( - set_long = templates.LongDesc(` + setLong = templates.LongDesc(` Configure application resources These commands help you make changes to existing application resources.`) ) +// NewCmdSet returns an initialized Command instance for 'set' sub command func NewCmdSet(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { cmd := &cobra.Command{ Use: "set SUBCOMMAND", DisableFlagsInUseLine: true, Short: i18n.T("Set specific features on objects"), - Long: set_long, + Long: setLong, Run: cmdutil.DefaultSubCommandRun(streams.ErrOut), } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_env.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_env.go index 62aed433dfe..a7dfbe792a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_env.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_env.go @@ -31,8 +31,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/kubernetes" envutil "k8s.io/kubernetes/pkg/kubectl/cmd/set/env" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -97,6 +97,7 @@ var ( env | grep RAILS_ | kubectl set env -e - deployment/registry`) ) +// EnvOptions holds values for 'set env' command-lone options type EnvOptions struct { PrintFlags *genericclioptions.PrintFlags resource.FilenameOptions @@ -202,6 +203,7 @@ func contains(key string, keyList []string) bool { return false } +// Complete completes all required options func (o *EnvOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { if o.All && len(o.Selector) > 0 { return fmt.Errorf("cannot set --all and --selector at the same time") @@ -242,6 +244,7 @@ func (o *EnvOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri return nil } +// Validate makes sure provided values for EnvOptions are valid func (o *EnvOptions) Validate() error { if len(o.Filenames) == 0 && len(o.resources) < 1 { return fmt.Errorf("one or more resources must be specified as or /") @@ -471,7 +474,8 @@ func (o *EnvOptions) RunEnv() error { for _, patch := range patches { info := patch.Info if patch.Err != nil { - allErrs = append(allErrs, fmt.Errorf("error: %s/%s %v\n", info.Mapping.Resource, info.Name, patch.Err)) + name := info.ObjectName() + allErrs = append(allErrs, fmt.Errorf("error: %s %v\n", name, patch.Err)) continue } @@ -489,7 +493,7 @@ func (o *EnvOptions) RunEnv() error { actual, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch, nil) if err != nil { - allErrs = append(allErrs, fmt.Errorf("failed to patch env update to pod template: %v\n", err)) + allErrs = append(allErrs, fmt.Errorf("failed to patch env update to pod template: %v", err)) continue } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go index 38677a803f0..1e26b2382e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -63,16 +63,16 @@ type SetImageOptions struct { } var ( - image_resources = ` + imageResources = ` pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), replicaset (rs)` - image_long = templates.LongDesc(` + imageLong = templates.LongDesc(` Update existing container image(s) of resources. Possible resources include (case insensitive): - ` + image_resources) + ` + imageResources) - image_example = templates.Examples(` + imageExample = templates.Examples(` # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'. kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1 @@ -86,6 +86,7 @@ var ( kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml`) ) +// NewImageOptions returns an initialized SetImageOptions instance func NewImageOptions(streams genericclioptions.IOStreams) *SetImageOptions { return &SetImageOptions{ PrintFlags: genericclioptions.NewPrintFlags("image updated").WithTypeSetter(scheme.Scheme), @@ -97,6 +98,7 @@ func NewImageOptions(streams genericclioptions.IOStreams) *SetImageOptions { } } +// NewCmdImage returns an initialized Command instance for the 'set image' sub command func NewCmdImage(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewImageOptions(streams) @@ -104,8 +106,8 @@ func NewCmdImage(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra. Use: "image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N", DisableFlagsInUseLine: true, Short: i18n.T("Update image of a pod template"), - Long: image_long, - Example: image_example, + Long: imageLong, + Example: imageExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -126,6 +128,7 @@ func NewCmdImage(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra. return cmd } +// Complete completes all required options func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { var err error @@ -160,14 +163,12 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ return err } - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) builder := f.NewBuilder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). LocalParam(o.Local). ContinueOnError(). NamespaceParam(cmdNamespace).DefaultNamespace(). FilenameParam(enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(includeUninitialized). Flatten() if !o.Local { @@ -191,12 +192,13 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ return nil } +// Validate makes sure provided values in SetImageOptions are valid func (o *SetImageOptions) Validate() error { errors := []error{} if o.All && len(o.Selector) > 0 { errors = append(errors, fmt.Errorf("cannot set --all and --selector at the same time")) } - if len(o.Resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames) { + if len(o.Resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.Filenames, "") { errors = append(errors, fmt.Errorf("one or more resources must be specified as or /")) } if len(o.ContainerImages) < 1 { @@ -207,42 +209,25 @@ func (o *SetImageOptions) Validate() error { return utilerrors.NewAggregate(errors) } +// Run performs the execution of 'set image' sub command func (o *SetImageOptions) Run() error { allErrs := []error{} patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(obj runtime.Object) ([]byte, error) { - transformed := false _, err := o.UpdatePodSpecForObject(obj, func(spec *v1.PodSpec) error { for name, image := range o.ContainerImages { - var ( - containerFound bool - err error - resolved string - ) - // Find the container to update, and update its image - for i, c := range spec.Containers { - if c.Name == name || name == "*" { - containerFound = true - if len(resolved) == 0 { - if resolved, err = o.ResolveImage(image); err != nil { - allErrs = append(allErrs, fmt.Errorf("error: unable to resolve image %q for container %q: %v", image, name, err)) - // Do not loop again if the image resolving failed for wildcard case as we - // will report the same error again for the next container. - if name == "*" { - break - } - continue - } - } - if spec.Containers[i].Image != resolved { - spec.Containers[i].Image = resolved - // Perform updates - transformed = true - } + resolvedImageName, err := o.ResolveImage(image) + if err != nil { + allErrs = append(allErrs, fmt.Errorf("error: unable to resolve image %q for container %q: %v", image, name, err)) + if name == "*" { + break } + continue } - // Add a new container if not found - if !containerFound { + + initContainerFound := setImage(spec.InitContainers, name, resolvedImageName) + containerFound := setImage(spec.Containers, name, resolvedImageName) + if !containerFound && !initContainerFound { allErrs = append(allErrs, fmt.Errorf("error: unable to find container named %q", name)) } } @@ -251,9 +236,6 @@ func (o *SetImageOptions) Run() error { if err != nil { return nil, err } - if !transformed { - return nil, nil - } // record this change (for rollout history) if err := o.Recorder.Record(obj); err != nil { klog.V(4).Infof("error recording current command: %v", err) @@ -265,7 +247,8 @@ func (o *SetImageOptions) Run() error { for _, patch := range patches { info := patch.Info if patch.Err != nil { - allErrs = append(allErrs, fmt.Errorf("error: %s/%s %v\n", info.Mapping.Resource, info.Name, patch.Err)) + name := info.ObjectName() + allErrs = append(allErrs, fmt.Errorf("error: %s %v\n", name, patch.Err)) continue } @@ -284,7 +267,7 @@ func (o *SetImageOptions) Run() error { // patch the change actual, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch, nil) if err != nil { - allErrs = append(allErrs, fmt.Errorf("failed to patch image update to pod template: %v\n", err)) + allErrs = append(allErrs, fmt.Errorf("failed to patch image update to pod template: %v", err)) continue } @@ -295,6 +278,18 @@ func (o *SetImageOptions) Run() error { return utilerrors.NewAggregate(allErrs) } +func setImage(containers []v1.Container, containerName string, image string) bool { + containerFound := false + // Find the container to update, and update its image + for i, c := range containers { + if c.Name == containerName || containerName == "*" { + containerFound = true + containers[i].Image = image + } + } + return containerFound +} + // getResourcesAndImages retrieves resources and container name:images pair from given args func getResourcesAndImages(args []string) (resources []string, containerImages map[string]string, err error) { pairType := "image" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_resources.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_resources.go index b7328a0cb45..8ad5bd4d4a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_resources.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_resources.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" @@ -38,14 +38,14 @@ import ( ) var ( - resources_long = templates.LongDesc(` + resourcesLong = templates.LongDesc(` Specify compute resource requirements (cpu, memory) for any resource that defines a pod template. If a pod is successfully scheduled, it is guaranteed the amount of resource requested, but may burst up to its specified limits. for each compute resource, if a limit is specified and a request is omitted, the request will default to the limit. Possible resources include (case insensitive): %s.`) - resources_example = templates.Examples(` + resourcesExample = templates.Examples(` # Set a deployments nginx container cpu limits to "200m" and memory to "512Mi" kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi @@ -59,7 +59,7 @@ var ( kubectl set resources -f path/to/file.yaml --limits=cpu=200m,memory=512Mi --local -o yaml`) ) -// ResourcesOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of +// SetResourcesOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags type SetResourcesOptions struct { resource.FilenameOptions @@ -104,6 +104,7 @@ func NewResourcesOptions(streams genericclioptions.IOStreams) *SetResourcesOptio } } +// NewCmdResources returns initialized Command instance for the 'set resources' sub command func NewCmdResources(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewResourcesOptions(streams) @@ -111,8 +112,8 @@ func NewCmdResources(f cmdutil.Factory, streams genericclioptions.IOStreams) *co Use: "resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]", DisableFlagsInUseLine: true, Short: i18n.T("Update resource requests/limits on objects with pod templates"), - Long: fmt.Sprintf(resources_long, cmdutil.SuggestApiResources("kubectl")), - Example: resources_example, + Long: fmt.Sprintf(resourcesLong, cmdutil.SuggestAPIResources("kubectl")), + Example: resourcesExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -138,6 +139,7 @@ func NewCmdResources(f cmdutil.Factory, streams genericclioptions.IOStreams) *co return cmd } +// Complete completes all required options func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { var err error @@ -165,14 +167,12 @@ func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar return err } - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) builder := f.NewBuilder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). LocalParam(o.Local). ContinueOnError(). NamespaceParam(cmdNamespace).DefaultNamespace(). FilenameParam(enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(includeUninitialized). Flatten() if !o.Local { @@ -197,6 +197,7 @@ func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar return nil } +// Validate makes sure that provided values in ResourcesOptions are valid func (o *SetResourcesOptions) Validate() error { var err error if o.All && len(o.Selector) > 0 { @@ -214,6 +215,7 @@ func (o *SetResourcesOptions) Validate() error { return nil } +// Run performs the execution of 'set resources' sub command func (o *SetResourcesOptions) Run() error { allErrs := []error{} patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(obj runtime.Object) ([]byte, error) { @@ -258,14 +260,15 @@ func (o *SetResourcesOptions) Run() error { for _, patch := range patches { info := patch.Info + name := info.ObjectName() if patch.Err != nil { - allErrs = append(allErrs, fmt.Errorf("error: %s/%s %v\n", info.Mapping.Resource, info.Name, patch.Err)) + allErrs = append(allErrs, fmt.Errorf("error: %s %v\n", name, patch.Err)) continue } //no changes if string(patch.Patch) == "{}" || len(patch.Patch) == 0 { - allErrs = append(allErrs, fmt.Errorf("info: %s %q was not changed\n", info.Mapping.Resource, info.Name)) + allErrs = append(allErrs, fmt.Errorf("info: %s was not changed\n", name)) continue } @@ -278,7 +281,7 @@ func (o *SetResourcesOptions) Run() error { actual, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch, nil) if err != nil { - allErrs = append(allErrs, fmt.Errorf("failed to patch limit update to pod template %v\n", err)) + allErrs = append(allErrs, fmt.Errorf("failed to patch limit update to pod template %v", err)) continue } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_selector.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_selector.go index 167ae747170..06c5e796d2b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_selector.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_selector.go @@ -28,15 +28,15 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" ) -// SelectorOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of +// SetSelectorOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags() type SetSelectorOptions struct { // Bound @@ -73,13 +73,13 @@ var ( kubectl create deployment my-dep -o yaml --dry-run | kubectl label --local -f - environment=qa -o yaml | kubectl create -f -`) ) +// NewSelectorOptions returns an initialized SelectorOptions instance func NewSelectorOptions(streams genericclioptions.IOStreams) *SetSelectorOptions { return &SetSelectorOptions{ ResourceBuilderFlags: genericclioptions.NewResourceBuilderFlags(). WithScheme(scheme.Scheme). WithAll(false). WithLocal(false). - WithUninitialized(false). WithLatest(), PrintFlags: genericclioptions.NewPrintFlags("selector updated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_serviceaccount.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_serviceaccount.go index eced76f7e9c..ed748814963 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_serviceaccount.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_serviceaccount.go @@ -28,8 +28,8 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -56,7 +56,7 @@ var ( `)) ) -// serviceAccountConfig encapsulates the data required to perform the operation. +// SetServiceAccountOptions encapsulates the data required to perform the operation. type SetServiceAccountOptions struct { PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags @@ -77,6 +77,7 @@ type SetServiceAccountOptions struct { genericclioptions.IOStreams } +// NewSetServiceAccountOptions returns an initialized SetServiceAccountOptions instance func NewSetServiceAccountOptions(streams genericclioptions.IOStreams) *SetServiceAccountOptions { return &SetServiceAccountOptions{ PrintFlags: genericclioptions.NewPrintFlags("serviceaccount updated").WithTypeSetter(scheme.Scheme), @@ -150,14 +151,12 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman } o.serviceAccountName = args[len(args)-1] resources := args[:len(args)-1] - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) builder := f.NewBuilder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). LocalParam(o.local). ContinueOnError(). NamespaceParam(cmdNamespace).DefaultNamespace(). FilenameParam(enforceNamespace, &o.fileNameOptions). - IncludeUninitialized(includeUninitialized). Flatten() if !o.local { builder.ResourceTypeOrNameArgs(o.all, resources...). @@ -192,8 +191,9 @@ func (o *SetServiceAccountOptions) Run() error { patches := CalculatePatches(o.infos, scheme.DefaultJSONEncoder(), patchFn) for _, patch := range patches { info := patch.Info + name := info.ObjectName() if patch.Err != nil { - patchErrs = append(patchErrs, fmt.Errorf("error: %s/%s %v\n", info.Mapping.Resource, info.Name, patch.Err)) + patchErrs = append(patchErrs, fmt.Errorf("error: %s %v\n", name, patch.Err)) continue } if o.local || o.dryRun { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_subject.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_subject.go index a4a245e2855..c88be4b4a9a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_subject.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_subject.go @@ -28,8 +28,8 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -37,10 +37,10 @@ import ( ) var ( - subject_long = templates.LongDesc(` + subjectLong = templates.LongDesc(` Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding.`) - subject_example = templates.Examples(` + subjectExample = templates.Examples(` # Update a ClusterRoleBinding for serviceaccount1 kubectl set subject clusterrolebinding admin --serviceaccount=namespace:serviceaccount1 @@ -79,6 +79,7 @@ type SubjectOptions struct { genericclioptions.IOStreams } +// NewSubjectOptions returns an initialized SubjectOptions instance func NewSubjectOptions(streams genericclioptions.IOStreams) *SubjectOptions { return &SubjectOptions{ PrintFlags: genericclioptions.NewPrintFlags("subjects updated").WithTypeSetter(scheme.Scheme), @@ -87,14 +88,15 @@ func NewSubjectOptions(streams genericclioptions.IOStreams) *SubjectOptions { } } +// NewCmdSubject returns the "new subject" sub command func NewCmdSubject(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewSubjectOptions(streams) cmd := &cobra.Command{ Use: "subject (-f FILENAME | TYPE NAME) [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run]", DisableFlagsInUseLine: true, Short: i18n.T("Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding"), - Long: subject_long, - Example: subject_example, + Long: subjectLong, + Example: subjectExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(o.Complete(f, cmd, args)) cmdutil.CheckErr(o.Validate()) @@ -116,6 +118,7 @@ func NewCmdSubject(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobr return cmd } +// Complete completes all required options func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.Output = cmdutil.GetFlagString(cmd, "output") o.DryRun = cmdutil.GetDryRunFlag(cmd) @@ -135,14 +138,12 @@ func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] return err } - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) builder := f.NewBuilder(). WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). LocalParam(o.Local). ContinueOnError(). NamespaceParam(o.namespace).DefaultNamespace(). FilenameParam(enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(includeUninitialized). Flatten() if o.Local { @@ -167,6 +168,7 @@ func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] return nil } +// Validate makes sure provided values in SubjectOptions are valid func (o *SubjectOptions) Validate() error { if o.All && len(o.Selector) > 0 { return fmt.Errorf("cannot set --all and --selector at the same time") @@ -192,6 +194,7 @@ func (o *SubjectOptions) Validate() error { return nil } +// Run performs the execution of "set subject" sub command func (o *SubjectOptions) Run(fn updateSubjects) error { patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(obj runtime.Object) ([]byte, error) { subjects := []rbacv1.Subject{} @@ -237,14 +240,15 @@ func (o *SubjectOptions) Run(fn updateSubjects) error { allErrs := []error{} for _, patch := range patches { info := patch.Info + name := info.ObjectName() if patch.Err != nil { - allErrs = append(allErrs, fmt.Errorf("error: %s/%s %v\n", info.Mapping.Resource, info.Name, patch.Err)) + allErrs = append(allErrs, fmt.Errorf("error: %s %v\n", name, patch.Err)) continue } //no changes if string(patch.Patch) == "{}" || len(patch.Patch) == 0 { - allErrs = append(allErrs, fmt.Errorf("info: %s %q was not changed\n", info.Mapping.Resource, info.Name)) + allErrs = append(allErrs, fmt.Errorf("info: %s was not changed\n", name)) continue } @@ -257,7 +261,7 @@ func (o *SubjectOptions) Run(fn updateSubjects) error { actual, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch, nil) if err != nil { - allErrs = append(allErrs, fmt.Errorf("failed to patch subjects to rolebinding: %v\n", err)) + allErrs = append(allErrs, fmt.Errorf("failed to patch subjects to rolebinding: %v", err)) continue } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/BUILD index e5e42effbb9..bce91daea9a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/BUILD @@ -22,8 +22,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/taint.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/taint.go index 02f56513079..1bf875b136b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/taint.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/taint/taint.go @@ -31,8 +31,8 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_node.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_node.go index 48e7f48e0c7..073b2ccdc0c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_node.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_node.go @@ -219,7 +219,7 @@ func (o TopNodeOptions) RunTopNode() error { func getNodeMetricsFromMetricsAPI(metricsClient metricsclientset.Interface, resourceName string, selector labels.Selector) (*metricsapi.NodeMetricsList, error) { var err error versionedMetrics := &metricsV1beta1api.NodeMetricsList{} - mc := metricsClient.Metrics() + mc := metricsClient.MetricsV1beta1() nm := mc.NodeMetricses() if resourceName != "" { m, err := nm.Get(resourceName, metav1.GetOptions{}) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_pod.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_pod.go index 5c9a3712761..63938cab376 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_pod.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/top/top_pod.go @@ -103,7 +103,7 @@ func NewCmdTopPod(f cmdutil.Factory, o *TopPodOptions, streams genericclioptions } cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)") cmd.Flags().BoolVar(&o.PrintContainers, "containers", o.PrintContainers, "If present, print usage of containers within a pod.") - cmd.Flags().BoolVar(&o.AllNamespaces, "all-namespaces", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") + cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers.") o.HeapsterOptions.Bind(cmd.Flags()) return cmd @@ -205,13 +205,13 @@ func getMetricsFromMetricsAPI(metricsClient metricsclientset.Interface, namespac } versionedMetrics := &metricsv1beta1api.PodMetricsList{} if resourceName != "" { - m, err := metricsClient.Metrics().PodMetricses(ns).Get(resourceName, metav1.GetOptions{}) + m, err := metricsClient.MetricsV1beta1().PodMetricses(ns).Get(resourceName, metav1.GetOptions{}) if err != nil { return nil, err } versionedMetrics.Items = []metricsv1beta1api.PodMetrics{*m} } else { - versionedMetrics, err = metricsClient.Metrics().PodMetricses(ns).List(metav1.ListOptions{LabelSelector: selector.String()}) + versionedMetrics, err = metricsClient.MetricsV1beta1().PodMetricses(ns).List(metav1.ListOptions{LabelSelector: selector.String()}) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/BUILD index 91f282405b5..09f9c698651 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/BUILD @@ -31,7 +31,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/BUILD index ac104a73023..2d6fda07139 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/BUILD @@ -32,8 +32,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go index 2b2add45859..f9b869eb694 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go @@ -44,8 +44,8 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/crlf" @@ -81,6 +81,7 @@ type EditOptions struct { updatedResultGetter func(data []byte) *resource.Result } +// NewEditOptions returns an initialized EditOptions instance func NewEditOptions(editMode EditMode, ioStreams genericclioptions.IOStreams) *EditOptions { return &EditOptions{ RecordFlags: genericclioptions.NewRecordFlags(), @@ -176,10 +177,8 @@ func (o *EditOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Comm // when do normal edit or apply edit we need to always retrieve the latest resource from server b = b.ResourceTypeOrNameArgs(true, args...).Latest() } - includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false) r := b.NamespaceParam(cmdNamespace).DefaultNamespace(). FilenameParam(enforceNamespace, &o.FilenameOptions). - IncludeUninitialized(includeUninitialized). ContinueOnError(). Flatten(). Do() @@ -194,7 +193,6 @@ func (o *EditOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Comm return f.NewBuilder(). Unstructured(). Stream(bytes.NewReader(data), "edited-file"). - IncludeUninitialized(includeUninitialized). ContinueOnError(). Flatten(). Do() @@ -216,6 +214,7 @@ func (o *EditOptions) Validate() error { return nil } +// Run performs the execution func (o *EditOptions) Run() error { edit := NewDefaultEditor(editorEnvs()) // editFn is invoked for each edit session (once with a list for normal edit, once for each individual resource in a edit-on-create invocation) @@ -399,7 +398,7 @@ func (o *EditOptions) Run() error { return err } if len(infos) == 0 { - return errors.New("edit cancelled, no objects found.") + return errors.New("edit cancelled, no objects found") } return editFn(infos) case ApplyEditMode: @@ -459,12 +458,12 @@ func (o *EditOptions) visitToApplyEditPatch(originalInfos []*resource.Info, patc return fmt.Errorf("no original object found for %#v", info.Object) } - originalJS, err := encodeToJson(originalInfo.Object.(runtime.Unstructured)) + originalJS, err := encodeToJSON(originalInfo.Object.(runtime.Unstructured)) if err != nil { return err } - editedJS, err := encodeToJson(info.Object.(runtime.Unstructured)) + editedJS, err := encodeToJSON(info.Object.(runtime.Unstructured)) if err != nil { return err } @@ -474,21 +473,18 @@ func (o *EditOptions) visitToApplyEditPatch(originalInfos []*resource.Info, patc if err != nil { return err } - printer.PrintObj(info.Object, o.Out) - return nil - } else { - err := o.annotationPatch(info) - if err != nil { - return err - } - - printer, err := o.ToPrinter("edited") - if err != nil { - return err - } - printer.PrintObj(info.Object, o.Out) - return nil + return printer.PrintObj(info.Object, o.Out) } + err = o.annotationPatch(info) + if err != nil { + return err + } + + printer, err := o.ToPrinter("edited") + if err != nil { + return err + } + return printer.PrintObj(info.Object, o.Out) }) return err } @@ -511,8 +507,9 @@ func (o *EditOptions) annotationPatch(update *resource.Info) error { return nil } +// GetApplyPatch is used to get and apply patches func GetApplyPatch(obj runtime.Unstructured) ([]byte, []byte, types.PatchType, error) { - beforeJSON, err := encodeToJson(obj) + beforeJSON, err := encodeToJSON(obj) if err != nil { return nil, []byte(""), types.MergePatchType, err } @@ -527,7 +524,7 @@ func GetApplyPatch(obj runtime.Unstructured) ([]byte, []byte, types.PatchType, e } annotations[corev1.LastAppliedConfigAnnotation] = string(beforeJSON) accessor.SetAnnotations(objCopy, annotations) - afterJSON, err := encodeToJson(objCopy.(runtime.Unstructured)) + afterJSON, err := encodeToJSON(objCopy.(runtime.Unstructured)) if err != nil { return nil, beforeJSON, types.MergePatchType, err } @@ -535,7 +532,7 @@ func GetApplyPatch(obj runtime.Unstructured) ([]byte, []byte, types.PatchType, e return patch, beforeJSON, types.MergePatchType, err } -func encodeToJson(obj runtime.Unstructured) ([]byte, error) { +func encodeToJSON(obj runtime.Unstructured) ([]byte, error) { serialization, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj) if err != nil { return nil, err @@ -569,12 +566,12 @@ func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor return fmt.Errorf("no original object found for %#v", info.Object) } - originalJS, err := encodeToJson(originalInfo.Object.(runtime.Unstructured)) + originalJS, err := encodeToJSON(originalInfo.Object.(runtime.Unstructured)) if err != nil { return err } - editedJS, err := encodeToJson(info.Object.(runtime.Unstructured)) + editedJS, err := encodeToJSON(info.Object.(runtime.Unstructured)) if err != nil { return err } @@ -585,8 +582,7 @@ func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor if err != nil { return err } - printer.PrintObj(info.Object, o.Out) - return nil + return printer.PrintObj(info.Object, o.Out) } preconditions := []mergepatch.PreconditionFunc{ @@ -643,8 +639,7 @@ func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor if err != nil { return err } - printer.PrintObj(info.Object, o.Out) - return nil + return printer.PrintObj(info.Object, o.Out) }) return err } @@ -658,8 +653,7 @@ func (o *EditOptions) visitToCreate(createVisitor resource.Visitor) error { if err != nil { return err } - printer.PrintObj(info.Object, o.Out) - return nil + return printer.PrintObj(info.Object, o.Out) }) return err } @@ -683,12 +677,18 @@ func (o *EditOptions) visitAnnotation(annotationVisitor resource.Visitor) error return err } +// EditMode can be either NormalEditMode, EditBeforeCreateMode or ApplyEditMode type EditMode string const ( - NormalEditMode EditMode = "normal_mode" + // NormalEditMode is an edit mode + NormalEditMode EditMode = "normal_mode" + + // EditBeforeCreateMode is an edit mode EditBeforeCreateMode EditMode = "edit_before_create_mode" - ApplyEditMode EditMode = "edit_last_applied_mode" + + // ApplyEditMode is an edit mode + ApplyEditMode EditMode = "edit_last_applied_mode" ) // editReason preserves a message about the reason this file must be edited again diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editor.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editor.go index e7229870ec7..ef7831ca110 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editor.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editor.go @@ -43,6 +43,7 @@ const ( windowsShell = "cmd" ) +// Editor holds the command-line args to fire up the editor type Editor struct { Args []string Shell bool diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go index e6a48daf46f..448f9644160 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go @@ -19,7 +19,7 @@ package util import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory_client_access.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory_client_access.go index d73b235d7f8..2e71269962b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory_client_access.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory_client_access.go @@ -22,7 +22,7 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go index 9a392cde59b..fce9a9a7798 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go @@ -29,8 +29,6 @@ import ( "github.com/evanphx/json-patch" "github.com/spf13/cobra" "github.com/spf13/pflag" - "k8s.io/klog" - kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -39,18 +37,18 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" "k8s.io/client-go/scale" "k8s.io/client-go/tools/clientcmd" + "k8s.io/klog" utilexec "k8s.io/utils/exec" ) const ( - ApplyAnnotationsFlag = "save-config" - DefaultErrorExitCode = 1 - IncludeUninitializedFlag = "include-uninitialized" + ApplyAnnotationsFlag = "save-config" + DefaultErrorExitCode = 1 ) type debugError interface { @@ -290,11 +288,11 @@ func messageForError(err error) string { func UsageErrorf(cmd *cobra.Command, format string, args ...interface{}) error { msg := fmt.Sprintf(format, args...) - return fmt.Errorf("%s\nSee '%s -h' for help and examples.", msg, cmd.CommandPath()) + return fmt.Errorf("%s\nSee '%s -h' for help and examples", msg, cmd.CommandPath()) } -func IsFilenameSliceEmpty(filenames []string) bool { - return len(filenames) == 0 +func IsFilenameSliceEmpty(filenames []string, directory string) bool { + return len(filenames) == 0 && directory == "" } func GetFlagString(cmd *cobra.Command, flag string) string { @@ -402,7 +400,8 @@ func AddDryRunFlag(cmd *cobra.Command) { } func AddIncludeUninitializedFlag(cmd *cobra.Command) { - cmd.Flags().Bool(IncludeUninitializedFlag, false, `If true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.`) + cmd.Flags().Bool("include-uninitialized", false, `If true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.`) + cmd.Flags().MarkDeprecated("include-uninitialized", "The Initializers feature has been removed. This flag is now a no-op, and will be removed in v1.15") } func AddPodRunningTimeoutFlag(cmd *cobra.Command, defaultTimeout time.Duration) { @@ -594,28 +593,6 @@ func ManualStrip(file []byte) []byte { return stripped } -// ShouldIncludeUninitialized identifies whether to include uninitialized objects. -// includeUninitialized is the default value. -// Assume we can parse `all` and `selector` from cmd. -func ShouldIncludeUninitialized(cmd *cobra.Command, includeUninitialized bool) bool { - shouldIncludeUninitialized := includeUninitialized - if cmd.Flags().Lookup("all") != nil && GetFlagBool(cmd, "all") { - // include the uninitialized objects by default - // unless explicitly set --include-uninitialized=false - shouldIncludeUninitialized = true - } - if cmd.Flags().Lookup("selector") != nil && GetFlagString(cmd, "selector") != "" { - // does not include the uninitialized objects by default - // unless explicitly set --include-uninitialized=true - shouldIncludeUninitialized = false - } - if cmd.Flags().Changed(IncludeUninitializedFlag) { - // get explicit value - shouldIncludeUninitialized = GetFlagBool(cmd, IncludeUninitializedFlag) - } - return shouldIncludeUninitialized -} - // ScaleClientFunc provides a ScalesGetter type ScaleClientFunc func(genericclioptions.RESTClientGetter) (scale.ScalesGetter, error) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/kubectl_match_version.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/kubectl_match_version.go index 99ba2baeec6..675f8e1d91d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/kubectl_match_version.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/kubectl_match_version.go @@ -92,7 +92,7 @@ func (f *MatchVersionFlags) ToDiscoveryClient() (discovery.CachedDiscoveryInterf return f.Delegate.ToDiscoveryClient() } -// RESTMapper returns a mapper. +// ToRESTMapper returns a mapper. func (f *MatchVersionFlags) ToRESTMapper() (meta.RESTMapper, error) { if err := f.checkMatchingServerVersion(); err != nil { return nil, err diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go index 75b73c62048..f093940d8a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go @@ -22,8 +22,8 @@ import ( "k8s.io/kubernetes/pkg/kubectl/util/templates" ) -// SuggestApiResources returns a suggestion to use the "api-resources" command +// SuggestAPIResources returns a suggestion to use the "api-resources" command // to retrieve a supported list of resources -func SuggestApiResources(parent string) string { +func SuggestAPIResources(parent string) string { return templates.LongDesc(fmt.Sprintf("Use \"%s api-resources\" for a complete list of supported resources.", parent)) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/BUILD index 08ddcfc6fea..976f968a950 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/BUILD @@ -18,8 +18,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", @@ -51,11 +51,10 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library", "//staging/src/k8s.io/client-go/dynamic/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//vendor/github.com/davecgh/go-spew/spew:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/wait.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/wait.go index 3868bae5a26..e32951fddc7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/wait.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/wait/wait.go @@ -36,8 +36,8 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/printers" - "k8s.io/cli-runtime/pkg/genericclioptions/resource" + "k8s.io/cli-runtime/pkg/printers" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" watchtools "k8s.io/client-go/tools/watch" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -45,7 +45,7 @@ import ( ) var ( - wait_long = templates.LongDesc(` + waitLong = templates.LongDesc(` Experimental: Wait for a specific condition on one or many resources. The command takes multiple resources and waits until the specified condition @@ -57,7 +57,7 @@ var ( A successful message will be printed to stdout indicating when the specified condition has been met. One can use -o option to change to output destination.`) - wait_example = templates.Examples(` + waitExample = templates.Examples(` # Wait for the pod "busybox1" to contain the status condition of type "Ready". kubectl wait --for=condition=Ready pod/busybox1 @@ -90,7 +90,10 @@ func NewWaitFlags(restClientGetter genericclioptions.RESTClientGetter, streams g PrintFlags: genericclioptions.NewPrintFlags("condition met"), ResourceBuilderFlags: genericclioptions.NewResourceBuilderFlags(). WithLabelSelector(""). + WithFieldSelector(""). + WithAll(false). WithAllNamespaces(false). + WithAll(false). WithLatest(), Timeout: 30 * time.Second, @@ -104,11 +107,12 @@ func NewCmdWait(restClientGetter genericclioptions.RESTClientGetter, streams gen flags := NewWaitFlags(restClientGetter, streams) cmd := &cobra.Command{ - Use: "wait resource.group/name [--for=delete|--for condition=available]", + Use: "wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available]", + Short: "Experimental: Wait for a specific condition on one or many resources.", + Long: waitLong, + Example: waitExample, + DisableFlagsInUseLine: true, - Short: "Experimental: Wait for a specific condition on one or many resources.", - Long: wait_long, - Example: wait_example, Run: func(cmd *cobra.Command, args []string) { o, err := flags.ToOptions(args) cmdutil.CheckErr(err) @@ -192,12 +196,14 @@ func conditionFuncFor(condition string, errOut io.Writer) (ConditionFunc, error) return nil, fmt.Errorf("unrecognized condition: %q", condition) } +// ResourceLocation holds the location of a resource type ResourceLocation struct { GroupResource schema.GroupResource Namespace string Name string } +// UIDMap maps ResourceLocation with UID type UIDMap map[ResourceLocation]types.UID // WaitOptions is a set of options that allows you to wait. This is the object reflects the runtime needs of a wait @@ -289,9 +295,10 @@ func IsDeleted(info *resource.Info, o *WaitOptions) (runtime.Object, bool, error } timeout := endTime.Sub(time.Now()) + errWaitTimeoutWithName := extendErrWaitTimeout(wait.ErrWaitTimeout, info) if timeout < 0 { // we're out of time - return gottenObj, false, wait.ErrWaitTimeout + return gottenObj, false, errWaitTimeoutWithName } ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), o.Timeout) @@ -304,9 +311,9 @@ func IsDeleted(info *resource.Info, o *WaitOptions) (runtime.Object, bool, error continue case err == wait.ErrWaitTimeout: if watchEvent != nil { - return watchEvent.Object, false, wait.ErrWaitTimeout + return watchEvent.Object, false, errWaitTimeoutWithName } - return gottenObj, false, wait.ErrWaitTimeout + return gottenObj, false, errWaitTimeoutWithName default: return gottenObj, false, err } @@ -383,9 +390,10 @@ func (w ConditionalWait) IsConditionMet(info *resource.Info, o *WaitOptions) (ru } timeout := endTime.Sub(time.Now()) + errWaitTimeoutWithName := extendErrWaitTimeout(wait.ErrWaitTimeout, info) if timeout < 0 { // we're out of time - return gottenObj, false, wait.ErrWaitTimeout + return gottenObj, false, errWaitTimeoutWithName } ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), o.Timeout) @@ -398,9 +406,9 @@ func (w ConditionalWait) IsConditionMet(info *resource.Info, o *WaitOptions) (ru continue case err == wait.ErrWaitTimeout: if watchEvent != nil { - return watchEvent.Object, false, wait.ErrWaitTimeout + return watchEvent.Object, false, errWaitTimeoutWithName } - return gottenObj, false, wait.ErrWaitTimeout + return gottenObj, false, errWaitTimeoutWithName default: return gottenObj, false, err } @@ -446,3 +454,7 @@ func (w ConditionalWait) isConditionMet(event watch.Event) (bool, error) { obj := event.Object.(*unstructured.Unstructured) return w.checkCondition(obj) } + +func extendErrWaitTimeout(err error, info *resource.Info) error { + return fmt.Errorf("%s on %s/%s", err.Error(), info.Mapping.Resource.Resource, info.Name) +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/BUILD index 21c1a0b78c7..950c7120184 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/BUILD @@ -25,6 +25,7 @@ go_library( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/networking/v1:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go index 6f6dba6f0bc..5579521047b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go @@ -40,6 +40,7 @@ import ( corev1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" networkingv1 "k8s.io/api/networking/v1" + networkingv1beta1 "k8s.io/api/networking/v1beta1" policyv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" @@ -173,6 +174,7 @@ func describerMap(clientConfig *rest.Config) (map[schema.GroupKind]describe.Desc {Group: extensionsv1beta1.GroupName, Kind: "DaemonSet"}: &DaemonSetDescriber{c}, {Group: extensionsv1beta1.GroupName, Kind: "Deployment"}: &DeploymentDescriber{c}, {Group: extensionsv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c}, + {Group: networkingv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c}, {Group: batchv1.GroupName, Kind: "Job"}: &JobDescriber{c}, {Group: batchv1.GroupName, Kind: "CronJob"}: &CronJobDescriber{c}, {Group: appsv1.GroupName, Kind: "StatefulSet"}: &StatefulSetDescriber{c}, @@ -220,7 +222,7 @@ func GenericDescriberFor(mapping *meta.RESTMapping, clientConfig *rest.Config) ( if err != nil { return nil, false } - eventsClient := clientSet.Core() + eventsClient := clientSet.CoreV1() return &genericDescriber{mapping, dynamicClient, eventsClient}, true } @@ -347,11 +349,11 @@ type NamespaceDescriber struct { } func (d *NamespaceDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - ns, err := d.Core().Namespaces().Get(name, metav1.GetOptions{}) + ns, err := d.CoreV1().Namespaces().Get(name, metav1.GetOptions{}) if err != nil { return "", err } - resourceQuotaList, err := d.Core().ResourceQuotas(name).List(metav1.ListOptions{}) + resourceQuotaList, err := d.CoreV1().ResourceQuotas(name).List(metav1.ListOptions{}) if err != nil { if errors.IsNotFound(err) { // Server does not support resource quotas. @@ -361,7 +363,7 @@ func (d *NamespaceDescriber) Describe(namespace, name string, describerSettings return "", err } } - limitRangeList, err := d.Core().LimitRanges(name).List(metav1.ListOptions{}) + limitRangeList, err := d.CoreV1().LimitRanges(name).List(metav1.ListOptions{}) if err != nil { if errors.IsNotFound(err) { // Server does not support limit ranges. @@ -520,7 +522,7 @@ type LimitRangeDescriber struct { } func (d *LimitRangeDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - lr := d.Core().LimitRanges(namespace) + lr := d.CoreV1().LimitRanges(namespace) limitRange, err := lr.Get(name, metav1.GetOptions{}) if err != nil { @@ -547,7 +549,7 @@ type ResourceQuotaDescriber struct { } func (d *ResourceQuotaDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - rq := d.Core().ResourceQuotas(namespace) + rq := d.CoreV1().ResourceQuotas(namespace) resourceQuota, err := rq.Get(name, metav1.GetOptions{}) if err != nil { @@ -617,10 +619,10 @@ type PodDescriber struct { } func (d *PodDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - pod, err := d.Core().Pods(namespace).Get(name, metav1.GetOptions{}) + pod, err := d.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{}) if err != nil { if describerSettings.ShowEvents { - eventsInterface := d.Core().Events(namespace) + eventsInterface := d.CoreV1().Events(namespace) selector := eventsInterface.GetFieldSelector(&name, &namespace, nil, nil) options := metav1.ListOptions{FieldSelector: selector.String()} events, err2 := eventsInterface.List(options) @@ -642,7 +644,10 @@ func (d *PodDescriber) Describe(namespace, name string, describerSettings descri klog.Errorf("Unable to construct reference to '%#v': %v", pod, err) } else { ref.Kind = "" - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, ref) + if _, isMirrorPod := pod.Annotations[corev1.MirrorPodAnnotationKey]; isMirrorPod { + ref.UID = types.UID(pod.Annotations[corev1.MirrorPodAnnotationKey]) + } + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, ref) } } @@ -669,7 +674,7 @@ func describePod(pod *corev1.Pod, events *corev1.EventList) (string, error) { printLabelsMultiline(w, "Labels", pod.Labels) printAnnotationsMultiline(w, "Annotations", pod.Annotations) if pod.DeletionTimestamp != nil { - w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampUntil(*pod.DeletionTimestamp)) + w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampSince(*pod.DeletionTimestamp)) w.Write(LEVEL_0, "Termination Grace Period:\t%ds\n", *pod.DeletionGracePeriodSeconds) } else { w.Write(LEVEL_0, "Status:\t%s\n", string(pod.Status.Phase)) @@ -822,8 +827,16 @@ func printHostPathVolumeSource(hostPath *corev1.HostPathVolumeSource, w PrefixWr } func printEmptyDirVolumeSource(emptyDir *corev1.EmptyDirVolumeSource, w PrefixWriter) { + var sizeLimit string + if emptyDir.SizeLimit != nil && emptyDir.SizeLimit.Cmp(resource.Quantity{}) > 0 { + sizeLimit = fmt.Sprintf("%v", emptyDir.SizeLimit) + } else { + sizeLimit = "" + } w.Write(LEVEL_2, "Type:\tEmptyDir (a temporary directory that shares a pod's lifetime)\n"+ - " Medium:\t%v\n", emptyDir.Medium) + " Medium:\t%v\n"+ + " SizeLimit:\t%v\n", + emptyDir.Medium, sizeLimit) } func printGCEPersistentDiskVolumeSource(gce *corev1.GCEPersistentDiskVolumeSource, w PrefixWriter) { @@ -881,8 +894,8 @@ func printProjectedVolumeSource(projected *corev1.ProjectedVolumeSource, w Prefi " ConfigMapOptional:\t%v\n", source.ConfigMap.Name, source.ConfigMap.Optional) } else if source.ServiceAccountToken != nil { - w.Write(LEVEL_2, "TokenExpirationSeconds:\t%v\n", - source.ServiceAccountToken.ExpirationSeconds) + w.Write(LEVEL_2, "TokenExpirationSeconds:\t%d\n", + *source.ServiceAccountToken.ExpirationSeconds) } } } @@ -1041,18 +1054,18 @@ func printCinderVolumeSource(cinder *corev1.CinderVolumeSource, w PrefixWriter) w.Write(LEVEL_2, "Type:\tCinder (a Persistent Disk resource in OpenStack)\n"+ " VolumeID:\t%v\n"+ " FSType:\t%v\n"+ - " ReadOnly:\t%v\n", - " SecretRef:\t%v\n"+ - cinder.VolumeID, cinder.FSType, cinder.ReadOnly, cinder.SecretRef) + " ReadOnly:\t%v\n"+ + " SecretRef:\t%v\n", + cinder.VolumeID, cinder.FSType, cinder.ReadOnly, cinder.SecretRef) } func printCinderPersistentVolumeSource(cinder *corev1.CinderPersistentVolumeSource, w PrefixWriter) { w.Write(LEVEL_2, "Type:\tCinder (a Persistent Disk resource in OpenStack)\n"+ " VolumeID:\t%v\n"+ " FSType:\t%v\n"+ - " ReadOnly:\t%v\n", - " SecretRef:\t%v\n"+ - cinder.VolumeID, cinder.SecretRef, cinder.FSType, cinder.ReadOnly, cinder.SecretRef) + " ReadOnly:\t%v\n"+ + " SecretRef:\t%v\n", + cinder.VolumeID, cinder.FSType, cinder.ReadOnly, cinder.SecretRef) } func printScaleIOVolumeSource(sio *corev1.ScaleIOVolumeSource, w PrefixWriter) { @@ -1250,7 +1263,7 @@ type PersistentVolumeDescriber struct { } func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().PersistentVolumes() + c := d.CoreV1().PersistentVolumes() pv, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -1259,7 +1272,7 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, pv) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, pv) } return describePersistentVolume(pv, events) @@ -1316,7 +1329,7 @@ func describePersistentVolume(pv *corev1.PersistentVolume, events *corev1.EventL w.Write(LEVEL_0, "Finalizers:\t%v\n", pv.ObjectMeta.Finalizers) w.Write(LEVEL_0, "StorageClass:\t%s\n", storageutil.GetPersistentVolumeClass(pv)) if pv.ObjectMeta.DeletionTimestamp != nil { - w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampUntil(*pv.ObjectMeta.DeletionTimestamp)) + w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampSince(*pv.ObjectMeta.DeletionTimestamp)) } else { w.Write(LEVEL_0, "Status:\t%v\n", pv.Status.Phase) } @@ -1398,21 +1411,21 @@ type PersistentVolumeClaimDescriber struct { } func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().PersistentVolumeClaims(namespace) + c := d.CoreV1().PersistentVolumeClaims(namespace) pvc, err := c.Get(name, metav1.GetOptions{}) if err != nil { return "", err } - pc := d.Core().Pods(namespace) + pc := d.CoreV1().Pods(namespace) mountPods, err := getMountPods(pc, pvc.Name) if err != nil { return "", err } - events, _ := d.Core().Events(namespace).Search(scheme.Scheme, pvc) + events, _ := d.CoreV1().Events(namespace).Search(scheme.Scheme, pvc) return describePersistentVolumeClaim(pvc, events, mountPods) } @@ -1457,7 +1470,7 @@ func describePersistentVolumeClaim(pvc *corev1.PersistentVolumeClaim, events *co w.Write(LEVEL_0, "Namespace:\t%s\n", pvc.Namespace) w.Write(LEVEL_0, "StorageClass:\t%s\n", storageutil.GetPersistentVolumeClaimClass(pvc)) if pvc.ObjectMeta.DeletionTimestamp != nil { - w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampUntil(*pvc.ObjectMeta.DeletionTimestamp)) + w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", translateTimestampSince(*pvc.ObjectMeta.DeletionTimestamp)) } else { w.Write(LEVEL_0, "Status:\t%v\n", pvc.Status.Phase) } @@ -1647,12 +1660,12 @@ func describeContainerVolumes(container corev1.Container, w PrefixWriter) { sort.Sort(SortableVolumeMounts(container.VolumeMounts)) for _, mount := range container.VolumeMounts { flags := []string{} - switch { - case mount.ReadOnly: + if mount.ReadOnly { flags = append(flags, "ro") - case !mount.ReadOnly: + } else { flags = append(flags, "rw") - case len(mount.SubPath) > 0: + } + if len(mount.SubPath) > 0 { flags = append(flags, fmt.Sprintf("path=%q", mount.SubPath)) } w.Write(LEVEL_3, "%s from %s (%s)\n", mount.MountPath, mount.Name, strings.Join(flags, ",")) @@ -1859,8 +1872,8 @@ type ReplicationControllerDescriber struct { } func (d *ReplicationControllerDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - rc := d.Core().ReplicationControllers(namespace) - pc := d.Core().Pods(namespace) + rc := d.CoreV1().ReplicationControllers(namespace) + pc := d.CoreV1().Pods(namespace) controller, err := rc.Get(name, metav1.GetOptions{}) if err != nil { @@ -1874,7 +1887,7 @@ func (d *ReplicationControllerDescriber) Describe(namespace, name string, descri var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, controller) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, controller) } return describeReplicationController(controller, events, running, waiting, succeeded, failed) @@ -1931,8 +1944,8 @@ type ReplicaSetDescriber struct { } func (d *ReplicaSetDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - rsc := d.Apps().ReplicaSets(namespace) - pc := d.Core().Pods(namespace) + rsc := d.AppsV1().ReplicaSets(namespace) + pc := d.CoreV1().Pods(namespace) rs, err := rsc.Get(name, metav1.GetOptions{}) if err != nil { @@ -1948,7 +1961,7 @@ func (d *ReplicaSetDescriber) Describe(namespace, name string, describerSettings var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, rs) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, rs) } return describeReplicaSet(rs, events, running, waiting, succeeded, failed, getPodErr) @@ -1993,14 +2006,14 @@ type JobDescriber struct { } func (d *JobDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - job, err := d.Batch().Jobs(namespace).Get(name, metav1.GetOptions{}) + job, err := d.BatchV1().Jobs(namespace).Get(name, metav1.GetOptions{}) if err != nil { return "", err } var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, job) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, job) } return describeJob(job, events) @@ -2073,6 +2086,16 @@ func describeCronJob(cronJob *batchv1beta1.CronJob, events *corev1.EventList) (s w.Write(LEVEL_0, "Schedule:\t%s\n", cronJob.Spec.Schedule) w.Write(LEVEL_0, "Concurrency Policy:\t%s\n", cronJob.Spec.ConcurrencyPolicy) w.Write(LEVEL_0, "Suspend:\t%s\n", printBoolPtr(cronJob.Spec.Suspend)) + if cronJob.Spec.SuccessfulJobsHistoryLimit != nil { + w.Write(LEVEL_0, "Successful Job History Limit:\t%d\n", cronJob.Spec.SuccessfulJobsHistoryLimit) + } else { + w.Write(LEVEL_0, "Successful Job History Limit:\t\n") + } + if cronJob.Spec.FailedJobsHistoryLimit != nil { + w.Write(LEVEL_0, "Failed Job History Limit:\t%d\n", *cronJob.Spec.FailedJobsHistoryLimit) + } else { + w.Write(LEVEL_0, "Failed Job History Limit:\t\n") + } if cronJob.Spec.StartingDeadlineSeconds != nil { w.Write(LEVEL_0, "Starting Deadline Seconds:\t%ds\n", *cronJob.Spec.StartingDeadlineSeconds) } else { @@ -2137,8 +2160,8 @@ type DaemonSetDescriber struct { } func (d *DaemonSetDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - dc := d.Apps().DaemonSets(namespace) - pc := d.Core().Pods(namespace) + dc := d.AppsV1().DaemonSets(namespace) + pc := d.CoreV1().Pods(namespace) daemon, err := dc.Get(name, metav1.GetOptions{}) if err != nil { @@ -2156,7 +2179,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string, describerSettings var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, daemon) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, daemon) } return describeDaemonSet(daemon, events, running, waiting, succeeded, failed) @@ -2195,7 +2218,7 @@ type SecretDescriber struct { } func (d *SecretDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().Secrets(namespace) + c := d.CoreV1().Secrets(namespace) secret, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -2235,7 +2258,7 @@ type IngressDescriber struct { } func (i *IngressDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := i.Extensions().Ingresses(namespace) + c := i.ExtensionsV1beta1().Ingresses(namespace) ing, err := c.Get(name, metav1.GetOptions{}) if err != nil { return "", err @@ -2244,8 +2267,8 @@ func (i *IngressDescriber) Describe(namespace, name string, describerSettings de } func (i *IngressDescriber) describeBackend(ns string, backend *extensionsv1beta1.IngressBackend) string { - endpoints, _ := i.Core().Endpoints(ns).Get(backend.ServiceName, metav1.GetOptions{}) - service, _ := i.Core().Services(ns).Get(backend.ServiceName, metav1.GetOptions{}) + endpoints, _ := i.CoreV1().Endpoints(ns).Get(backend.ServiceName, metav1.GetOptions{}) + service, _ := i.CoreV1().Services(ns).Get(backend.ServiceName, metav1.GetOptions{}) spName := "" for i := range service.Spec.Ports { sp := &service.Spec.Ports[i] @@ -2298,7 +2321,7 @@ func (i *IngressDescriber) describeIngress(ing *extensionsv1beta1.Ingress, descr } w.Write(LEVEL_1, "%s\t\n", host) for _, path := range rules.HTTP.Paths { - w.Write(LEVEL_2, "\t%s \t%s (%s)\n", path.Path, backendStringer(&path.Backend), i.describeBackend(ns, &path.Backend)) + w.Write(LEVEL_2, "\t%s \t%s (%s)\n", path.Path, backendStringer(&path.Backend), i.describeBackend(ing.Namespace, &path.Backend)) } } if count == 0 { @@ -2307,7 +2330,7 @@ func (i *IngressDescriber) describeIngress(ing *extensionsv1beta1.Ingress, descr describeIngressAnnotations(w, ing.Annotations) if describerSettings.ShowEvents { - events, _ := i.Core().Events(ing.Namespace).Search(scheme.Scheme, ing) + events, _ := i.CoreV1().Events(ing.Namespace).Search(scheme.Scheme, ing) if events != nil { DescribeEvents(events, w) } @@ -2343,17 +2366,17 @@ type ServiceDescriber struct { } func (d *ServiceDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().Services(namespace) + c := d.CoreV1().Services(namespace) service, err := c.Get(name, metav1.GetOptions{}) if err != nil { return "", err } - endpoints, _ := d.Core().Endpoints(namespace).Get(name, metav1.GetOptions{}) + endpoints, _ := d.CoreV1().Endpoints(namespace).Get(name, metav1.GetOptions{}) var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, service) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, service) } return describeService(service, endpoints, events) } @@ -2441,7 +2464,7 @@ type EndpointsDescriber struct { } func (d *EndpointsDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().Endpoints(namespace) + c := d.CoreV1().Endpoints(namespace) ep, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -2450,7 +2473,7 @@ func (d *EndpointsDescriber) Describe(namespace, name string, describerSettings var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, ep) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, ep) } return describeEndpoints(ep, events) @@ -2516,7 +2539,7 @@ type ServiceAccountDescriber struct { } func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().ServiceAccounts(namespace) + c := d.CoreV1().ServiceAccounts(namespace) serviceAccount, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -2528,7 +2551,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett // missingSecrets is the set of all secrets present in the // serviceAccount but not present in the set of existing secrets. missingSecrets := sets.NewString() - secrets, err := d.Core().Secrets(namespace).List(metav1.ListOptions{}) + secrets, err := d.CoreV1().Secrets(namespace).List(metav1.ListOptions{}) // errors are tolerated here in order to describe the serviceAccount with all // of the secrets that it references, even if those secrets cannot be fetched. @@ -2562,7 +2585,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheme.Scheme, serviceAccount) + events, _ = d.CoreV1().Events(namespace).Search(scheme.Scheme, serviceAccount) } return describeServiceAccount(serviceAccount, tokens, missingSecrets, events) @@ -2633,7 +2656,7 @@ type RoleDescriber struct { } func (d *RoleDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - role, err := d.Rbac().Roles(namespace).Get(name, metav1.GetOptions{}) + role, err := d.RbacV1().Roles(namespace).Get(name, metav1.GetOptions{}) if err != nil { return "", err } @@ -2659,7 +2682,7 @@ func (d *RoleDescriber) Describe(namespace, name string, describerSettings descr w.Write(LEVEL_1, "Resources\tNon-Resource URLs\tResource Names\tVerbs\n") w.Write(LEVEL_1, "---------\t-----------------\t--------------\t-----\n") for _, r := range compactRules { - w.Write(LEVEL_1, "%s\t%v\t%v\t%v\n", combineResourceGroup(r.Resources, r.APIGroups), r.NonResourceURLs, r.ResourceNames, r.Verbs) + w.Write(LEVEL_1, "%s\t%v\t%v\t%v\n", CombineResourceGroup(r.Resources, r.APIGroups), r.NonResourceURLs, r.ResourceNames, r.Verbs) } return nil @@ -2672,7 +2695,7 @@ type ClusterRoleDescriber struct { } func (d *ClusterRoleDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - role, err := d.Rbac().ClusterRoles().Get(name, metav1.GetOptions{}) + role, err := d.RbacV1().ClusterRoles().Get(name, metav1.GetOptions{}) if err != nil { return "", err } @@ -2698,14 +2721,14 @@ func (d *ClusterRoleDescriber) Describe(namespace, name string, describerSetting w.Write(LEVEL_1, "Resources\tNon-Resource URLs\tResource Names\tVerbs\n") w.Write(LEVEL_1, "---------\t-----------------\t--------------\t-----\n") for _, r := range compactRules { - w.Write(LEVEL_1, "%s\t%v\t%v\t%v\n", combineResourceGroup(r.Resources, r.APIGroups), r.NonResourceURLs, r.ResourceNames, r.Verbs) + w.Write(LEVEL_1, "%s\t%v\t%v\t%v\n", CombineResourceGroup(r.Resources, r.APIGroups), r.NonResourceURLs, r.ResourceNames, r.Verbs) } return nil }) } -func combineResourceGroup(resource, group []string) string { +func CombineResourceGroup(resource, group []string) string { if len(resource) == 0 { return "" } @@ -2728,7 +2751,7 @@ type RoleBindingDescriber struct { } func (d *RoleBindingDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - binding, err := d.Rbac().RoleBindings(namespace).Get(name, metav1.GetOptions{}) + binding, err := d.RbacV1().RoleBindings(namespace).Get(name, metav1.GetOptions{}) if err != nil { return "", err } @@ -2760,7 +2783,7 @@ type ClusterRoleBindingDescriber struct { } func (d *ClusterRoleBindingDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - binding, err := d.Rbac().ClusterRoleBindings().Get(name, metav1.GetOptions{}) + binding, err := d.RbacV1().ClusterRoleBindings().Get(name, metav1.GetOptions{}) if err != nil { return "", err } @@ -2792,7 +2815,7 @@ type NodeDescriber struct { } func (d *NodeDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - mc := d.Core().Nodes() + mc := d.CoreV1().Nodes() node, err := mc.Get(name, metav1.GetOptions{}) if err != nil { return "", err @@ -2805,7 +2828,7 @@ func (d *NodeDescriber) Describe(namespace, name string, describerSettings descr // in a policy aware setting, users may have access to a node, but not all pods // in that case, we note that the user does not have access to the pods canViewPods := true - nodeNonTerminatedPodsList, err := d.Core().Pods(namespace).List(metav1.ListOptions{FieldSelector: fieldSelector.String()}) + nodeNonTerminatedPodsList, err := d.CoreV1().Pods(namespace).List(metav1.ListOptions{FieldSelector: fieldSelector.String()}) if err != nil { if !errors.IsForbidden(err) { return "", err @@ -2820,7 +2843,7 @@ func (d *NodeDescriber) Describe(namespace, name string, describerSettings descr } else { // TODO: We haven't decided the namespace for Node object yet. ref.UID = types.UID(ref.Name) - events, _ = d.Core().Events("").Search(scheme.Scheme, ref) + events, _ = d.CoreV1().Events("").Search(scheme.Scheme, ref) } } @@ -2916,11 +2939,11 @@ type StatefulSetDescriber struct { } func (p *StatefulSetDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - ps, err := p.client.Apps().StatefulSets(namespace).Get(name, metav1.GetOptions{}) + ps, err := p.client.AppsV1().StatefulSets(namespace).Get(name, metav1.GetOptions{}) if err != nil { return "", err } - pc := p.client.Core().Pods(namespace) + pc := p.client.CoreV1().Pods(namespace) selector, err := metav1.LabelSelectorAsSelector(ps.Spec.Selector) if err != nil { @@ -2934,7 +2957,7 @@ func (p *StatefulSetDescriber) Describe(namespace, name string, describerSetting var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = p.client.Core().Events(namespace).Search(scheme.Scheme, ps) + events, _ = p.client.CoreV1().Events(namespace).Search(scheme.Scheme, ps) } return describeStatefulSet(ps, selector, events, running, waiting, succeeded, failed) @@ -2949,7 +2972,7 @@ func describeStatefulSet(ps *appsv1.StatefulSet, selector labels.Selector, event w.Write(LEVEL_0, "Selector:\t%s\n", selector) printLabelsMultiline(w, "Labels", ps.Labels) printAnnotationsMultiline(w, "Annotations", ps.Annotations) - w.Write(LEVEL_0, "Replicas:\t%d desired | %d total\n", ps.Spec.Replicas, ps.Status.Replicas) + w.Write(LEVEL_0, "Replicas:\t%d desired | %d total\n", *ps.Spec.Replicas, ps.Status.Replicas) w.Write(LEVEL_0, "Update Strategy:\t%s\n", ps.Spec.UpdateStrategy.Type) if ps.Spec.UpdateStrategy.RollingUpdate != nil { ru := ps.Spec.UpdateStrategy.RollingUpdate @@ -2974,7 +2997,7 @@ type CertificateSigningRequestDescriber struct { } func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - csr, err := p.client.Certificates().CertificateSigningRequests().Get(name, metav1.GetOptions{}) + csr, err := p.client.CertificatesV1beta1().CertificateSigningRequests().Get(name, metav1.GetOptions{}) if err != nil { return "", err } @@ -2990,7 +3013,7 @@ func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, de var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = p.client.Core().Events(namespace).Search(scheme.Scheme, csr) + events, _ = p.client.CoreV1().Events(namespace).Search(scheme.Scheme, csr) } return describeCertificateSigningRequest(csr, cr, status, events) @@ -3058,7 +3081,7 @@ func (d *HorizontalPodAutoscalerDescriber) Describe(namespace, name string, desc var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = d.client.Core().Events(namespace).Search(scheme.Scheme, hpa) + events, _ = d.client.CoreV1().Events(namespace).Search(scheme.Scheme, hpa) } return describeHorizontalPodAutoscaler(hpa, events, d) @@ -3101,11 +3124,20 @@ func describeHorizontalPodAutoscaler(hpa *autoscalingv2beta2.HorizontalPodAutosc } w.Write(LEVEL_1, "%q on pods:\t%s / %s\n", metric.Pods.Metric.Name, current, metric.Pods.Target.AverageValue.String()) case autoscalingv2beta2.ObjectMetricSourceType: - current := "" - if len(hpa.Status.CurrentMetrics) > i && hpa.Status.CurrentMetrics[i].Object != nil { - current = hpa.Status.CurrentMetrics[i].Object.Current.Value.String() + w.Write(LEVEL_1, "\"%s\" on %s/%s ", metric.Object.Metric.Name, metric.Object.DescribedObject.Kind, metric.Object.DescribedObject.Name) + if metric.Object.Target.Type == autoscalingv2beta2.AverageValueMetricType { + current := "" + if len(hpa.Status.CurrentMetrics) > i && hpa.Status.CurrentMetrics[i].Object != nil { + current = hpa.Status.CurrentMetrics[i].Object.Current.AverageValue.String() + } + w.Write(LEVEL_0, "(target average value):\t%s / %s\n", current, metric.Object.Target.AverageValue.String()) + } else { + current := "" + if len(hpa.Status.CurrentMetrics) > i && hpa.Status.CurrentMetrics[i].Object != nil { + current = hpa.Status.CurrentMetrics[i].Object.Current.Value.String() + } + w.Write(LEVEL_0, "(target value):\t%s / %s\n", current, metric.Object.Target.Value.String()) } - w.Write(LEVEL_1, "%q on %s/%s:\t%s / %s\n", metric.Object.Metric.Name, metric.Object.DescribedObject.Kind, metric.Object.DescribedObject.Name, current, metric.Object.Target.Value.String()) case autoscalingv2beta2.ResourceMetricSourceType: w.Write(LEVEL_1, "resource %s on pods", string(metric.Resource.Name)) if metric.Resource.Target.AverageValue != nil { @@ -3379,7 +3411,7 @@ type ConfigMapDescriber struct { } func (d *ConfigMapDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Core().ConfigMaps(namespace) + c := d.CoreV1().ConfigMaps(namespace) configMap, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -3399,7 +3431,7 @@ func (d *ConfigMapDescriber) Describe(namespace, name string, describerSettings w.Write(LEVEL_0, "%s\n", string(v)) } if describerSettings.ShowEvents { - events, err := d.Core().Events(namespace).Search(scheme.Scheme, configMap) + events, err := d.CoreV1().Events(namespace).Search(scheme.Scheme, configMap) if err != nil { return err } @@ -3417,7 +3449,7 @@ type NetworkPolicyDescriber struct { } func (d *NetworkPolicyDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - c := d.Networking().NetworkPolicies(namespace) + c := d.NetworkingV1().NetworkPolicies(namespace) networkPolicy, err := c.Get(name, metav1.GetOptions{}) if err != nil { @@ -3548,14 +3580,14 @@ type StorageClassDescriber struct { } func (s *StorageClassDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - sc, err := s.Storage().StorageClasses().Get(name, metav1.GetOptions{}) + sc, err := s.StorageV1().StorageClasses().Get(name, metav1.GetOptions{}) if err != nil { return "", err } var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = s.Core().Events(namespace).Search(scheme.Scheme, sc) + events, _ = s.CoreV1().Events(namespace).Search(scheme.Scheme, sc) } return describeStorageClass(sc, events) @@ -3632,14 +3664,14 @@ type PodDisruptionBudgetDescriber struct { } func (p *PodDisruptionBudgetDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - pdb, err := p.Policy().PodDisruptionBudgets(namespace).Get(name, metav1.GetOptions{}) + pdb, err := p.PolicyV1beta1().PodDisruptionBudgets(namespace).Get(name, metav1.GetOptions{}) if err != nil { return "", err } var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = p.Core().Events(namespace).Search(scheme.Scheme, pdb) + events, _ = p.CoreV1().Events(namespace).Search(scheme.Scheme, pdb) } return describePodDisruptionBudget(pdb, events) @@ -3681,14 +3713,14 @@ type PriorityClassDescriber struct { } func (s *PriorityClassDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - pc, err := s.Scheduling().PriorityClasses().Get(name, metav1.GetOptions{}) + pc, err := s.SchedulingV1beta1().PriorityClasses().Get(name, metav1.GetOptions{}) if err != nil { return "", err } var events *corev1.EventList if describerSettings.ShowEvents { - events, _ = s.Core().Events(namespace).Search(scheme.Scheme, pc) + events, _ = s.CoreV1().Events(namespace).Search(scheme.Scheme, pc) } return describePriorityClass(pc, events) @@ -3717,7 +3749,7 @@ type PodSecurityPolicyDescriber struct { } func (d *PodSecurityPolicyDescriber) Describe(namespace, name string, describerSettings describe.DescriberSettings) (string, error) { - psp, err := d.Policy().PodSecurityPolicies().Get(name, metav1.GetOptions{}) + psp, err := d.PolicyV1beta1().PodSecurityPolicies().Get(name, metav1.GetOptions{}) if err != nil { return "", err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/drain/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/BUILD new file mode 100644 index 00000000000..aea03e06dcb --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/BUILD @@ -0,0 +1,41 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "cordon.go", + "drain.go", + "filters.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubectl/drain", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/apps/v1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/drain/cordon.go b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/cordon.go new file mode 100644 index 00000000000..fc33975266e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/cordon.go @@ -0,0 +1,97 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package drain + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/json" + "k8s.io/apimachinery/pkg/util/strategicpatch" + "k8s.io/client-go/kubernetes" +) + +// CordonHelper wraps functionality to cordon/uncordon nodes +type CordonHelper struct { + node *corev1.Node + desired bool +} + +// NewCordonHelper returns a new CordonHelper +func NewCordonHelper(node *corev1.Node) *CordonHelper { + return &CordonHelper{ + node: node, + } +} + +// NewCordonHelperFromRuntimeObject returns a new CordonHelper, or an error if given object is not a +// node or cannot be encoded as JSON +func NewCordonHelperFromRuntimeObject(nodeObject runtime.Object, scheme *runtime.Scheme, gvk schema.GroupVersionKind) (*CordonHelper, error) { + nodeObject, err := scheme.ConvertToVersion(nodeObject, gvk.GroupVersion()) + if err != nil { + return nil, err + } + + node, ok := nodeObject.(*corev1.Node) + if !ok { + return nil, fmt.Errorf("unexpected type %T", nodeObject) + } + + return NewCordonHelper(node), nil +} + +// UpdateIfRequired returns true if c.node.Spec.Unschedulable isn't already set, +// or false when no change is needed +func (c *CordonHelper) UpdateIfRequired(desired bool) bool { + c.desired = desired + if c.node.Spec.Unschedulable == c.desired { + return false + } + return true +} + +// PatchOrReplace uses given clientset to update the node status, either by patching or +// updating the given node object; it may return error if the object cannot be encoded as +// JSON, or if either patch or update calls fail; it will also return a second error +// whenever creating a patch has failed +func (c *CordonHelper) PatchOrReplace(clientset kubernetes.Interface) (error, error) { + client := clientset.CoreV1().Nodes() + + oldData, err := json.Marshal(c.node) + if err != nil { + return err, nil + } + + c.node.Spec.Unschedulable = c.desired + + newData, err := json.Marshal(c.node) + if err != nil { + return err, nil + } + + patchBytes, patchErr := strategicpatch.CreateTwoWayMergePatch(oldData, newData, c.node) + if patchErr == nil { + _, err = client.Patch(c.node.Name, types.StrategicMergePatchType, patchBytes) + } else { + _, err = client.Update(c.node) + } + return err, patchErr +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/drain/drain.go b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/drain.go new file mode 100644 index 00000000000..22069ee66d5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/drain.go @@ -0,0 +1,159 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package drain + +import ( + "io" + "time" + + corev1 "k8s.io/api/core/v1" + policyv1beta1 "k8s.io/api/policy/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/kubernetes" +) + +const ( + // EvictionKind represents the kind of evictions object + EvictionKind = "Eviction" + // EvictionSubresource represents the kind of evictions object as pod's subresource + EvictionSubresource = "pods/eviction" +) + +// Helper contains the parameters to control the behaviour of drainer +type Helper struct { + Client kubernetes.Interface + Force bool + DryRun bool + GracePeriodSeconds int + IgnoreAllDaemonSets bool + Timeout time.Duration + DeleteLocalData bool + Selector string + PodSelector string + ErrOut io.Writer +} + +// CheckEvictionSupport uses Discovery API to find out if the server support +// eviction subresource If support, it will return its groupVersion; Otherwise, +// it will return an empty string +func CheckEvictionSupport(clientset kubernetes.Interface) (string, error) { + discoveryClient := clientset.Discovery() + groupList, err := discoveryClient.ServerGroups() + if err != nil { + return "", err + } + foundPolicyGroup := false + var policyGroupVersion string + for _, group := range groupList.Groups { + if group.Name == "policy" { + foundPolicyGroup = true + policyGroupVersion = group.PreferredVersion.GroupVersion + break + } + } + if !foundPolicyGroup { + return "", nil + } + resourceList, err := discoveryClient.ServerResourcesForGroupVersion("v1") + if err != nil { + return "", err + } + for _, resource := range resourceList.APIResources { + if resource.Name == EvictionSubresource && resource.Kind == EvictionKind { + return policyGroupVersion, nil + } + } + return "", nil +} + +func (d *Helper) makeDeleteOptions() *metav1.DeleteOptions { + deleteOptions := &metav1.DeleteOptions{} + if d.GracePeriodSeconds >= 0 { + gracePeriodSeconds := int64(d.GracePeriodSeconds) + deleteOptions.GracePeriodSeconds = &gracePeriodSeconds + } + return deleteOptions +} + +// DeletePod will delete the given pod, or return an error if it couldn't +func (d *Helper) DeletePod(pod corev1.Pod) error { + return d.Client.CoreV1().Pods(pod.Namespace).Delete(pod.Name, d.makeDeleteOptions()) +} + +// EvictPod will evict the give pod, or return an error if it couldn't +func (d *Helper) EvictPod(pod corev1.Pod, policyGroupVersion string) error { + eviction := &policyv1beta1.Eviction{ + TypeMeta: metav1.TypeMeta{ + APIVersion: policyGroupVersion, + Kind: EvictionKind, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: pod.Name, + Namespace: pod.Namespace, + }, + DeleteOptions: d.makeDeleteOptions(), + } + // Remember to change change the URL manipulation func when Eviction's version change + return d.Client.PolicyV1beta1().Evictions(eviction.Namespace).Evict(eviction) +} + +// GetPodsForDeletion receives resource info for a node, and returns those pods as PodDeleteList, +// or error if it cannot list pods. All pods that are ready to be deleted can be obtained with .Pods(), +// and string with all warning can be obtained with .Warnings(), and .Errors() for all errors that +// occurred during deletion. +func (d *Helper) GetPodsForDeletion(nodeName string) (*podDeleteList, []error) { + labelSelector, err := labels.Parse(d.PodSelector) + if err != nil { + return nil, []error{err} + } + + podList, err := d.Client.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{ + LabelSelector: labelSelector.String(), + FieldSelector: fields.SelectorFromSet(fields.Set{"spec.nodeName": nodeName}).String()}) + if err != nil { + return nil, []error{err} + } + + pods := []podDelete{} + + for _, pod := range podList.Items { + var status podDeleteStatus + for _, filter := range d.makeFilters() { + status = filter(pod) + if !status.delete { + // short-circuit as soon as pod is filtered out + // at that point, there is no reason to run pod + // through any additional filters + break + } + } + pods = append(pods, podDelete{ + pod: pod, + status: status, + }) + } + + list := &podDeleteList{items: pods} + + if errs := list.errors(); len(errs) > 0 { + return list, errs + } + + return list, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/drain/filters.go b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/filters.go new file mode 100644 index 00000000000..2cbba24563a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/drain/filters.go @@ -0,0 +1,223 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package drain + +import ( + "fmt" + "strings" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +const ( + daemonSetFatal = "DaemonSet-managed Pods (use --ignore-daemonsets to ignore)" + daemonSetWarning = "ignoring DaemonSet-managed Pods" + localStorageFatal = "Pods with local storage (use --delete-local-data to override)" + localStorageWarning = "deleting Pods with local storage" + unmanagedFatal = "Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override)" + unmanagedWarning = "deleting Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet" +) + +type podDelete struct { + pod corev1.Pod + status podDeleteStatus +} + +type podDeleteList struct { + items []podDelete +} + +func (l *podDeleteList) Pods() []corev1.Pod { + pods := []corev1.Pod{} + for _, i := range l.items { + if i.status.delete { + pods = append(pods, i.pod) + } + } + return pods +} + +func (l *podDeleteList) Warnings() string { + ps := make(map[string][]string) + for _, i := range l.items { + if i.status.reason == podDeleteStatusTypeWarning { + ps[i.status.message] = append(ps[i.status.message], fmt.Sprintf("%s/%s", i.pod.Namespace, i.pod.Name)) + } + } + + msgs := []string{} + for key, pods := range ps { + msgs = append(msgs, fmt.Sprintf("%s: %s", key, strings.Join(pods, ", "))) + } + return strings.Join(msgs, "; ") +} + +func (l *podDeleteList) errors() []error { + failedPods := make(map[string][]string) + for _, i := range l.items { + if i.status.reason == podDeleteStatusTypeError { + msg := i.status.message + if msg == "" { + msg = "unexpected error" + } + failedPods[msg] = append(failedPods[msg], fmt.Sprintf("%s/%s", i.pod.Namespace, i.pod.Name)) + } + } + errs := make([]error, 0) + for msg, pods := range failedPods { + errs = append(errs, fmt.Errorf("cannot delete %s: %s", msg, strings.Join(pods, ", "))) + } + return errs +} + +type podDeleteStatus struct { + delete bool + reason string + message string +} + +// Takes a pod and returns a PodDeleteStatus +type podFilter func(corev1.Pod) podDeleteStatus + +const ( + podDeleteStatusTypeOkay = "Okay" + podDeleteStatusTypeSkip = "Skip" + podDeleteStatusTypeWarning = "Warning" + podDeleteStatusTypeError = "Error" +) + +func makePodDeleteStatusOkay() podDeleteStatus { + return podDeleteStatus{ + delete: true, + reason: podDeleteStatusTypeOkay, + } +} + +func makePodDeleteStatusSkip() podDeleteStatus { + return podDeleteStatus{ + delete: false, + reason: podDeleteStatusTypeSkip, + } +} + +func makePodDeleteStatusWithWarning(delete bool, message string) podDeleteStatus { + return podDeleteStatus{ + delete: delete, + reason: podDeleteStatusTypeWarning, + message: message, + } +} + +func makePodDeleteStatusWithError(message string) podDeleteStatus { + return podDeleteStatus{ + delete: false, + reason: podDeleteStatusTypeError, + message: message, + } +} + +func (d *Helper) makeFilters() []podFilter { + return []podFilter{ + d.daemonSetFilter, + d.mirrorPodFilter, + d.localStorageFilter, + d.unreplicatedFilter, + } +} + +func hasLocalStorage(pod corev1.Pod) bool { + for _, volume := range pod.Spec.Volumes { + if volume.EmptyDir != nil { + return true + } + } + + return false +} + +func (d *Helper) daemonSetFilter(pod corev1.Pod) podDeleteStatus { + // Note that we return false in cases where the pod is DaemonSet managed, + // regardless of flags. + // + // The exception is for pods that are orphaned (the referencing + // management resource - including DaemonSet - is not found). + // Such pods will be deleted if --force is used. + controllerRef := metav1.GetControllerOf(&pod) + if controllerRef == nil || controllerRef.Kind != appsv1.SchemeGroupVersion.WithKind("DaemonSet").Kind { + return makePodDeleteStatusOkay() + } + // Any finished pod can be removed. + if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { + return makePodDeleteStatusOkay() + } + + if _, err := d.Client.AppsV1().DaemonSets(pod.Namespace).Get(controllerRef.Name, metav1.GetOptions{}); err != nil { + // remove orphaned pods with a warning if --force is used + if apierrors.IsNotFound(err) && d.Force { + return makePodDeleteStatusWithWarning(true, err.Error()) + } + + return makePodDeleteStatusWithError(err.Error()) + } + + if !d.IgnoreAllDaemonSets { + return makePodDeleteStatusWithError(daemonSetFatal) + } + + return makePodDeleteStatusWithWarning(false, daemonSetWarning) +} + +func (d *Helper) mirrorPodFilter(pod corev1.Pod) podDeleteStatus { + if _, found := pod.ObjectMeta.Annotations[corev1.MirrorPodAnnotationKey]; found { + return makePodDeleteStatusSkip() + } + return makePodDeleteStatusOkay() +} + +func (d *Helper) localStorageFilter(pod corev1.Pod) podDeleteStatus { + if !hasLocalStorage(pod) { + return makePodDeleteStatusOkay() + } + // Any finished pod can be removed. + if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { + return makePodDeleteStatusOkay() + } + if !d.DeleteLocalData { + return makePodDeleteStatusWithError(localStorageFatal) + } + + return makePodDeleteStatusWithWarning(true, localStorageWarning) +} + +func (d *Helper) unreplicatedFilter(pod corev1.Pod) podDeleteStatus { + // any finished pod can be removed + if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { + return makePodDeleteStatusOkay() + } + + controllerRef := metav1.GetControllerOf(&pod) + if controllerRef != nil { + return makePodDeleteStatusOkay() + } + if d.Force { + return makePodDeleteStatusWithWarning(true, unmanagedWarning) + } + return makePodDeleteStatusWithError(unmanagedFatal) +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/generated/bindata.go b/vendor/k8s.io/kubernetes/pkg/kubectl/generated/bindata.go index d0dd200e9b6..63c56b5920d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/generated/bindata.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/generated/bindata.go @@ -70,7 +70,9 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _translationsOwners = []byte(`reviewers: +var _translationsOwners = []byte(`# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: - brendandburns approvers: - brendandburns @@ -213,7 +215,9 @@ func translationsExtractPy() (*asset, error) { return a, nil } -var _translationsKubectlOwners = []byte(`approvers: +var _translationsKubectlOwners = []byte(`# See the OWNERS docs at https://go.k8s.io/owners + +approvers: - sig-cli-maintainers reviewers: - sig-cli @@ -13898,7 +13902,7 @@ func translationsKubectlIt_itLc_messagesK8sPo() (*asset, error) { return a, nil } -var _translationsKubectlJa_jpLc_messagesK8sMo = []byte("\xde\x12\x04\x95\x00\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x00\x00\xa4\x00\x00\x00\x17\x00\x00\x00,\x01\x00\x00\x00\x00\x00\x00\x88\x01\x00\x008\x00\x00\x00\x89\x01\x00\x000\x00\x00\x00\xc2\x01\x00\x000\x00\x00\x00\xf3\x01\x00\x00\x1d\x00\x00\x00$\x02\x00\x00*\x00\x00\x00B\x02\x00\x00A\x00\x00\x00m\x02\x00\x00\x1c\x00\x00\x00\xaf\x02\x00\x00\x17\x00\x00\x00\xcc\x02\x00\x00\"\x00\x00\x00\xe4\x02\x00\x00\"\x00\x00\x00\a\x03\x00\x00\x1f\x00\x00\x00*\x03\x00\x00-\x00\x00\x00J\x03\x00\x00-\x00\x00\x00x\x03\x00\x00/\x00\x00\x00\xa6\x03\x00\x00$\x00\x00\x00\xd6\x03\x00\x00\xc5\x00\x00\x00\xfb\x03\x00\x00\xa6\x01\x00\x00\xc1\x04\x00\x00c\x00\x00\x00h\x06\x00\x00:\x00\x00\x00\xcc\x06\x00\x00=\x00\x00\x00\a\a\x00\x007\x00\x00\x00E\a\x00\x00:\x00\x00\x00}\a\x00\x00b\x00\x00\x00\xb8\a\x00\x00-\x00\x00\x00\x1b\b\x00\x00%\x00\x00\x00I\b\x00\x007\x00\x00\x00o\b\x00\x00:\x00\x00\x00\xa7\b\x00\x004\x00\x00\x00\xe2\b\x00\x00:\x00\x00\x00\x17\t\x00\x00:\x00\x00\x00R\t\x00\x00:\x00\x00\x00\x8d\t\x00\x003\x00\x00\x00\xc8\t\x00\x00\x1d\x01\x00\x00\xfc\t\x00\x00\x01\x00\x00\x00\n\x00\x00\x00\v\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\t\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\a\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\f\x00\x00\x00\x05\x00\x00\x00\r\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00Apply a configuration to a resource by filename or stdin\x00Delete the specified cluster from the kubeconfig\x00Delete the specified context from the kubeconfig\x00Describe one or many contexts\x00Display clusters defined in the kubeconfig\x00Display merged kubeconfig settings or a specified kubeconfig file\x00Displays the current-context\x00Modify kubeconfig files\x00Sets a cluster entry in kubeconfig\x00Sets a context entry in kubeconfig\x00Sets a user entry in kubeconfig\x00Sets an individual value in a kubeconfig file\x00Sets the current-context in a kubeconfig file\x00Unsets an individual value in a kubeconfig file\x00Update the annotations on a resource\x00watch is only supported on individual resources and resource collections - %d resources were found\x00watch is only supported on individual resources and resource collections - %d resources were found\x00Project-Id-Version: gettext-go-examples-hello\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: 2013-12-12 20:03+0000\nPO-Revision-Date: 2017-01-29 22:54-0800\nLast-Translator: Giri Kuncoro \nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Generator: Poedit 1.6.10\nX-Poedit-SourceCharset: UTF-8\nLanguage-Team: \nPlural-Forms: nplurals=2; plural=(n > 1);\nLanguage: ja\n\x00\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u307e\u305f\u306f\u6a19\u6e96\u5165\u529b\u7d4c\u7531\u3067\u30ea\u30bd\u30fc\u30b9\u306b\u30b3\u30f3\u30d5\u30a3\u30b0\u3092\u9069\u7528\u3059\u308b\x00kubeconfig\u304b\u3089\u6307\u5b9a\u3057\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u524a\u9664\u3059\u308b\x00kubeconfig\u304b\u3089\u6307\u5b9a\u3057\u305f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u524a\u9664\u3059\u308b\x001\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a18\u8ff0\u3059\u308b\x00kubeconfig\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8868\u793a\u3059\u308b\x00\u30de\u30fc\u30b8\u3055\u308c\u305fkubeconfig\u306e\u8a2d\u5b9a\u307e\u305f\u306f\u6307\u5b9a\u3055\u308c\u305fkubeconfig\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3059\u308b\x00\u30ab\u30ec\u30f3\u30c8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3059\u308b\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b\x00kubeconfig\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30e6\u30fc\u30b6\u30fc\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5909\u6570\u3092\u500b\u5225\u306b\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30ab\u30ec\u30f3\u30c8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u5909\u6570\u3092\u500b\u5225\u306b\u524a\u9664\u3059\u308b\x00\u30ea\u30bd\u30fc\u30b9\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\x00watch\u306f\u5358\u4e00\u30ea\u30bd\u30fc\u30b9\u53ca\u3073\u30ea\u30bd\u30fc\u30b9\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059 - %d\u500b\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\x00watch\u306f\u5358\u4e00\u30ea\u30bd\u30fc\u30b9\u53ca\u3073\u30ea\u30bd\u30fc\u30b9\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059 - %d\u500b\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\x00") +var _translationsKubectlJa_jpLc_messagesK8sMo = []byte("\xde\x12\x04\x95\x00\x00\x00\x00\xeb\x00\x00\x00\x1c\x00\x00\x00t\a\x00\x009\x01\x00\x00\xcc\x0e\x00\x00\x00\x00\x00\x00\xb0\x13\x00\x00\xdc\x00\x00\x00\xb1\x13\x00\x00\xb6\x00\x00\x00\x8e\x14\x00\x00\v\x02\x00\x00E\x15\x00\x00\x1f\x01\x00\x00Q\x17\x00\x00z\x00\x00\x00q\x18\x00\x00_\x02\x00\x00\xec\x18\x00\x00\u007f\x01\x00\x00L\x1b\x00\x00\x8f\x01\x00\x00\xcc\x1c\x00\x00k\x01\x00\x00\\\x1e\x00\x00k\x01\x00\x00\xc8\x1f\x00\x00>\x01\x00\x004!\x00\x00\x03\x02\x00\x00s\"\x00\x00o\x01\x00\x00w$\x00\x00H\x05\x00\x00\xe7%\x00\x00g\x02\x00\x000+\x00\x00\x1b\x02\x00\x00\x98-\x00\x00q\x01\x00\x00\xb4/\x00\x00\xa8\x01\x00\x00&1\x00\x00\xd4\x01\x00\x00\xcf2\x00\x00\x02\x02\x00\x00\xa44\x00\x00\xb4\x00\x00\x00\xa76\x00\x00\xb7\x02\x00\x00\\7\x00\x00\x92\x03\x00\x00\x14:\x00\x00\xbf\x01\x00\x00\xa7=\x00\x00=\x00\x00\x00g?\x00\x00;\x00\x00\x00\xa5?\x00\x00\xcd\x02\x00\x00\xe1?\x00\x00<\x00\x00\x00\xafB\x00\x00P\x00\x00\x00\xecB\x00\x00S\x00\x00\x00=C\x00\x00<\x00\x00\x00\x91C\x00\x00\xac\x01\x00\x00\xceC\x00\x00\x13\x03\x00\x00{E\x00\x00\xea\x01\x00\x00\x8fH\x00\x00\xfa\x01\x00\x00zJ\x00\x00\xda\x01\x00\x00uL\x00\x00c\x01\x00\x00PN\x00\x00T\x01\x00\x00\xb4O\x00\x00\xba\x06\x00\x00\tQ\x00\x00\xf9\x01\x00\x00\xc4W\x00\x00\xe0\x02\x00\x00\xbeY\x00\x00\x02\x03\x00\x00\x9f\\\x00\x00\xfb\x00\x00\x00\xa2_\x00\x00\xa5\x01\x00\x00\x9e`\x00\x00\xb4\x01\x00\x00Db\x00\x00\x18\x00\x00\x00\xf9c\x00\x00<\x00\x00\x00\x12d\x00\x00=\x00\x00\x00Od\x00\x00\xc6\x00\x00\x00\x8dd\x00\x00g\x02\x00\x00Te\x00\x00.\x00\x00\x00\xbcg\x00\x001\x03\x00\x00\xebg\x00\x00g\x00\x00\x00\x1dk\x00\x00Q\x00\x00\x00\x85k\x00\x00R\x00\x00\x00\xd7k\x00\x00\"\x00\x00\x00*l\x00\x00X\x02\x00\x00Ml\x00\x004\x00\x00\x00\xa6n\x00\x00}\x00\x00\x00\xdbn\x00\x00k\x01\x00\x00Yo\x00\x00\x81\a\x00\x00\xc5p\x00\x00f\x01\x00\x00Gx\x00\x00\x85\x00\x00\x00\xaey\x00\x00\xea\x00\x00\x004z\x00\x00\xd9\x00\x00\x00\x1f{\x00\x00\n\x05\x00\x00\xf9{\x00\x00\x10\x05\x00\x00\x04\x81\x00\x00\x1c\x00\x00\x00\x15\x86\x00\x00\x1e\x00\x00\x002\x86\x00\x00\x98\x02\x00\x00Q\x86\x00\x00\xbc\x01\x00\x00\xea\x88\x00\x00\x9c\x01\x00\x00\xa7\x8a\x00\x00q\x01\x00\x00D\x8c\x00\x00\x05\x01\x00\x00\xb6\x8d\x00\x00\xdf\x01\x00\x00\xbc\x8e\x00\x00\x1c\x01\x00\x00\x9c\x90\x00\x00\xc1\x01\x00\x00\xb9\x91\x00\x00\x1b\x02\x00\x00{\x93\x00\x00\xc0\x00\x00\x00\x97\x95\x00\x00\xd5\x02\x00\x00X\x96\x00\x00\x9d\x00\x00\x00.\x99\x00\x00X\x00\x00\x00\u0319\x00\x00%\x02\x00\x00%\x9a\x00\x00o\x00\x00\x00K\x9c\x00\x00u\x00\x00\x00\xbb\x9c\x00\x00\x01\x01\x00\x001\x9d\x00\x00v\x00\x00\x003\x9e\x00\x00t\x00\x00\x00\xaa\x9e\x00\x00\xef\x00\x00\x00\x1f\x9f\x00\x00}\x00\x00\x00\x0f\xa0\x00\x00j\x00\x00\x00\x8d\xa0\x00\x00\xc4\x01\x00\x00\xf8\xa0\x00\x00\xf7\x03\x00\x00\xbd\xa2\x00\x00;\x00\x00\x00\xb5\xa6\x00\x008\x00\x00\x00\xf1\xa6\x00\x001\x00\x00\x00*\xa7\x00\x007\x00\x00\x00\\\xa7\x00\x00u\x02\x00\x00\x94\xa7\x00\x00\xb0\x00\x00\x00\n\xaa\x00\x00[\x00\x00\x00\xbb\xaa\x00\x00J\x00\x00\x00\x17\xab\x00\x00a\x00\x00\x00b\xab\x00\x00\xbd\x00\x00\x00\u012b\x00\x009\x00\x00\x00\x82\xac\x00\x00\xc5\x00\x00\x00\xbc\xac\x00\x00\xae\x00\x00\x00\x82\xad\x00\x00\xd6\x00\x00\x001\xae\x00\x008\x00\x00\x00\b\xaf\x00\x00%\x00\x00\x00A\xaf\x00\x00W\x00\x00\x00g\xaf\x00\x00\x1d\x00\x00\x00\xbf\xaf\x00\x00=\x00\x00\x00\u076f\x00\x00u\x00\x00\x00\x1b\xb0\x00\x004\x00\x00\x00\x91\xb0\x00\x00-\x00\x00\x00\u01b0\x00\x00\xa3\x00\x00\x00\xf4\xb0\x00\x003\x00\x00\x00\x98\xb1\x00\x002\x00\x00\x00\u0331\x00\x008\x00\x00\x00\xff\xb1\x00\x00\x1e\x00\x00\x008\xb2\x00\x00\x1a\x00\x00\x00W\xb2\x00\x009\x00\x00\x00r\xb2\x00\x00\x13\x00\x00\x00\xac\xb2\x00\x00\x1b\x00\x00\x00\xc0\xb2\x00\x00@\x00\x00\x00\u0732\x00\x00,\x00\x00\x00\x1d\xb3\x00\x00*\x00\x00\x00J\xb3\x00\x007\x00\x00\x00u\xb3\x00\x00'\x00\x00\x00\xad\xb3\x00\x00&\x00\x00\x00\u0573\x00\x00.\x00\x00\x00\xfc\xb3\x00\x00=\x00\x00\x00+\xb4\x00\x00*\x00\x00\x00i\xb4\x00\x000\x00\x00\x00\x94\xb4\x00\x00,\x00\x00\x00\u0174\x00\x00\x1f\x00\x00\x00\xf2\xb4\x00\x00]\x00\x00\x00\x12\xb5\x00\x000\x00\x00\x00p\xb5\x00\x000\x00\x00\x00\xa1\xb5\x00\x00\"\x00\x00\x00\u04b5\x00\x00?\x00\x00\x00\xf5\xb5\x00\x00\x1d\x00\x00\x005\xb6\x00\x00,\x00\x00\x00S\xb6\x00\x00+\x00\x00\x00\x80\xb6\x00\x00$\x00\x00\x00\xac\xb6\x00\x00\x14\x00\x00\x00\u0476\x00\x00*\x00\x00\x00\xe6\xb6\x00\x00A\x00\x00\x00\x11\xb7\x00\x00\x1d\x00\x00\x00S\xb7\x00\x00\x1c\x00\x00\x00q\xb7\x00\x00\x1a\x00\x00\x00\x8e\xb7\x00\x00)\x00\x00\x00\xa9\xb7\x00\x006\x00\x00\x00\u04f7\x00\x00\x1d\x00\x00\x00\n\xb8\x00\x00\x19\x00\x00\x00(\xb8\x00\x00 \x00\x00\x00B\xb8\x00\x00v\x00\x00\x00c\xb8\x00\x00(\x00\x00\x00\u06b8\x00\x00\x16\x00\x00\x00\x03\xb9\x00\x00p\x00\x00\x00\x1a\xb9\x00\x00`\x00\x00\x00\x8b\xb9\x00\x00\x9b\x00\x00\x00\xec\xb9\x00\x00\x97\x00\x00\x00\x88\xba\x00\x00\xa8\x00\x00\x00 \xbb\x00\x00\x1b\x00\x00\x00\u027b\x00\x00\x18\x00\x00\x00\xe5\xbb\x00\x00\x1a\x00\x00\x00\xfe\xbb\x00\x00$\x00\x00\x00\x19\xbc\x00\x00\x1d\x00\x00\x00>\xbc\x00\x00\x17\x00\x00\x00\\\xbc\x00\x00a\x00\x00\x00t\xbc\x00\x00s\x00\x00\x00\u05bc\x00\x00B\x00\x00\x00J\xbd\x00\x00Y\x00\x00\x00\x8d\xbd\x00\x00+\x00\x00\x00\xe7\xbd\x00\x00+\x00\x00\x00\x13\xbe\x00\x006\x00\x00\x00?\xbe\x00\x00;\x00\x00\x00v\xbe\x00\x00q\x00\x00\x00\xb2\xbe\x00\x00/\x00\x00\x00$\xbf\x00\x001\x00\x00\x00T\xbf\x00\x00'\x00\x00\x00\x86\xbf\x00\x00'\x00\x00\x00\xae\xbf\x00\x00\x18\x00\x00\x00\u05bf\x00\x00&\x00\x00\x00\xef\xbf\x00\x00%\x00\x00\x00\x16\xc0\x00\x00(\x00\x00\x00<\xc0\x00\x00#\x00\x00\x00e\xc0\x00\x00K\x00\x00\x00\x89\xc0\x00\x00 \x00\x00\x00\xd5\xc0\x00\x00_\x00\x00\x00\xf6\xc0\x00\x00\x1e\x00\x00\x00V\xc1\x00\x00\"\x00\x00\x00u\xc1\x00\x00\"\x00\x00\x00\x98\xc1\x00\x00\x1f\x00\x00\x00\xbb\xc1\x00\x00-\x00\x00\x00\xdb\xc1\x00\x00-\x00\x00\x00\t\xc2\x00\x009\x00\x00\x007\xc2\x00\x00\x1e\x00\x00\x00q\xc2\x00\x00\x19\x00\x00\x00\x90\xc2\x00\x00c\x00\x00\x00\xaa\xc2\x00\x00#\x00\x00\x00\x0e\xc3\x00\x00\x82\x00\x00\x002\xc3\x00\x00\x94\x00\x00\x00\xb5\xc3\x00\x00H\x00\x00\x00J\xc4\x00\x00&\x00\x00\x00\x93\xc4\x00\x00e\x00\x00\x00\xba\xc4\x00\x00z\x00\x00\x00 \xc5\x00\x00J\x00\x00\x00\x9b\xc5\x00\x00\xe5\x00\x00\x00\xe6\xc5\x00\x00W\x00\x00\x00\xcc\xc6\x00\x00E\x00\x00\x00$\xc7\x00\x00a\x00\x00\x00j\xc7\x00\x00v\x00\x00\x00\xcc\xc7\x00\x00\xcb\x00\x00\x00C\xc8\x00\x00\xcf\x00\x00\x00\x0f\xc9\x00\x00\x1e\x01\x00\x00\xdf\xc9\x00\x00\x1c\x00\x00\x00\xfe\xca\x00\x00T\x00\x00\x00\x1b\xcb\x00\x00\x17\x00\x00\x00p\xcb\x00\x00/\x00\x00\x00\x88\xcb\x00\x009\x00\x00\x00\xb8\xcb\x00\x00\x1e\x00\x00\x00\xf2\xcb\x00\x00=\x00\x00\x00\x11\xcc\x00\x00$\x00\x00\x00O\xcc\x00\x00\x1f\x00\x00\x00t\xcc\x00\x00&\x00\x00\x00\x94\xcc\x00\x00+\x00\x00\x00\xbb\xcc\x00\x00G\x00\x00\x00\xe7\xcc\x00\x00\x14\x00\x00\x00/\xcd\x00\x00r\x00\x00\x00D\xcd\x00\x00\x13\x00\x00\x00\xb7\xcd\x00\x00\x18\x00\x00\x00\xcb\xcd\x00\x00/\x00\x00\x00\xe4\xcd\x00\x00\xaa\x01\x00\x00\x14\xce\x00\x00\xe0\x00\x00\x00\xbf\xcf\x00\x00\xba\x00\x00\x00\xa0\xd0\x00\x00\x10\x02\x00\x00[\xd1\x00\x00%\x01\x00\x00l\xd3\x00\x00z\x00\x00\x00\x92\xd4\x00\x00d\x02\x00\x00\r\xd5\x00\x00\x8b\x01\x00\x00r\xd7\x00\x00\x98\x01\x00\x00\xfe\xd8\x00\x00\x84\x01\x00\x00\x97\xda\x00\x00\x88\x01\x00\x00\x1c\xdc\x00\x00A\x01\x00\x00\xa5\xdd\x00\x00\a\x02\x00\x00\xe7\xde\x00\x00q\x01\x00\x00\xef\xe0\x00\x00\\\x05\x00\x00a\xe2\x00\x00s\x02\x00\x00\xbe\xe7\x00\x00#\x02\x00\x002\xea\x00\x00w\x01\x00\x00V\xec\x00\x00\xb9\x01\x00\x00\xce\xed\x00\x00\xe5\x01\x00\x00\x88\xef\x00\x00\n\x02\x00\x00n\xf1\x00\x00\xb4\x00\x00\x00y\xf3\x00\x00\xbf\x02\x00\x00.\xf4\x00\x00\x97\x03\x00\x00\xee\xf6\x00\x00\xbf\x01\x00\x00\x86\xfa\x00\x00A\x00\x00\x00F\xfc\x00\x00?\x00\x00\x00\x88\xfc\x00\x00,\x03\x00\x00\xc8\xfc\x00\x00<\x00\x00\x00\xf5\xff\x00\x00P\x00\x00\x002\x00\x01\x00S\x00\x00\x00\x83\x00\x01\x00<\x00\x00\x00\xd7\x00\x01\x00\xb3\x01\x00\x00\x14\x01\x01\x00\x15\x03\x00\x00\xc8\x02\x01\x00\xee\x01\x00\x00\xde\x05\x01\x00\x0e\x02\x00\x00\xcd\a\x01\x00\xdb\x01\x00\x00\xdc\t\x01\x00e\x01\x00\x00\xb8\v\x01\x00T\x01\x00\x00\x1e\r\x01\x00\xd4\x06\x00\x00s\x0e\x01\x00\x1d\x02\x00\x00H\x15\x01\x00\f\x03\x00\x00f\x17\x01\x00\x05\x03\x00\x00s\x1a\x01\x00\xfb\x00\x00\x00y\x1d\x01\x00\xb5\x01\x00\x00u\x1e\x01\x00\xb5\x01\x00\x00+ \x01\x00\x18\x00\x00\x00\xe1!\x01\x00<\x00\x00\x00\xfa!\x01\x00=\x00\x00\x007\"\x01\x00\xc6\x00\x00\x00u\"\x01\x00g\x02\x00\x00<#\x01\x00.\x00\x00\x00\xa4%\x01\x00>\x03\x00\x00\xd3%\x01\x00g\x00\x00\x00\x12)\x01\x00Q\x00\x00\x00z)\x01\x00R\x00\x00\x00\xcc)\x01\x00\"\x00\x00\x00\x1f*\x01\x00X\x02\x00\x00B*\x01\x004\x00\x00\x00\x9b,\x01\x00}\x00\x00\x00\xd0,\x01\x00k\x01\x00\x00N-\x01\x00\x83\a\x00\x00\xba.\x01\x00k\x01\x00\x00>6\x01\x00\x85\x00\x00\x00\xaa7\x01\x00\xee\x00\x00\x0008\x01\x00\xd9\x00\x00\x00\x1f9\x01\x00\x10\x05\x00\x00\xf99\x01\x00\x15\x05\x00\x00\n?\x01\x00\x1c\x00\x00\x00 D\x01\x00\x1e\x00\x00\x00=D\x01\x00\x99\x02\x00\x00\\D\x01\x00\xbc\x01\x00\x00\xf6F\x01\x00\x9c\x01\x00\x00\xb3H\x01\x00s\x01\x00\x00PJ\x01\x00\t\x01\x00\x00\xc4K\x01\x00\xec\x01\x00\x00\xceL\x01\x00\x1c\x01\x00\x00\xbbN\x01\x00\xc3\x01\x00\x00\xd8O\x01\x00\x1b\x02\x00\x00\x9cQ\x01\x00\xc0\x00\x00\x00\xb8S\x01\x00\xe1\x02\x00\x00yT\x01\x00\x9f\x00\x00\x00[W\x01\x00X\x00\x00\x00\xfbW\x01\x00*\x02\x00\x00TX\x01\x00o\x00\x00\x00\u007fZ\x01\x00v\x00\x00\x00\xefZ\x01\x00\x01\x01\x00\x00f[\x01\x00v\x00\x00\x00h\\\x01\x00u\x00\x00\x00\xdf\\\x01\x00\xf5\x00\x00\x00U]\x01\x00~\x00\x00\x00K^\x01\x00k\x00\x00\x00\xca^\x01\x00\xc8\x01\x00\x006_\x01\x00#\x04\x00\x00\xff`\x01\x00;\x00\x00\x00#e\x01\x008\x00\x00\x00_e\x01\x001\x00\x00\x00\x98e\x01\x007\x00\x00\x00\xcae\x01\x00|\x02\x00\x00\x02f\x01\x00\xb4\x00\x00\x00\u007fh\x01\x00[\x00\x00\x004i\x01\x00J\x00\x00\x00\x90i\x01\x00a\x00\x00\x00\xdbi\x01\x00\xbd\x00\x00\x00=j\x01\x009\x00\x00\x00\xfbj\x01\x00\xc5\x00\x00\x005k\x01\x00\xae\x00\x00\x00\xfbk\x01\x00\xd7\x00\x00\x00\xaal\x01\x00c\x00\x00\x00\x82m\x01\x00%\x00\x00\x00\xe6m\x01\x00_\x00\x00\x00\fn\x01\x00\x1d\x00\x00\x00ln\x01\x00=\x00\x00\x00\x8an\x01\x00y\x00\x00\x00\xc8n\x01\x004\x00\x00\x00Bo\x01\x00-\x00\x00\x00wo\x01\x00\xa5\x00\x00\x00\xa5o\x01\x003\x00\x00\x00Kp\x01\x002\x00\x00\x00\u007fp\x01\x008\x00\x00\x00\xb2p\x01\x00\x1e\x00\x00\x00\xebp\x01\x00\x1a\x00\x00\x00\nq\x01\x009\x00\x00\x00%q\x01\x00\x13\x00\x00\x00_q\x01\x00\x1b\x00\x00\x00sq\x01\x00@\x00\x00\x00\x8fq\x01\x00,\x00\x00\x00\xd0q\x01\x00*\x00\x00\x00\xfdq\x01\x007\x00\x00\x00(r\x01\x00'\x00\x00\x00`r\x01\x00Q\x00\x00\x00\x88r\x01\x00.\x00\x00\x00\xdar\x01\x00=\x00\x00\x00\ts\x01\x00*\x00\x00\x00Gs\x01\x000\x00\x00\x00rs\x01\x00,\x00\x00\x00\xa3s\x01\x00\x1f\x00\x00\x00\xd0s\x01\x00]\x00\x00\x00\xf0s\x01\x00:\x00\x00\x00Nt\x01\x00=\x00\x00\x00\x89t\x01\x00\"\x00\x00\x00\xc7t\x01\x00?\x00\x00\x00\xeat\x01\x007\x00\x00\x00*u\x01\x00,\x00\x00\x00bu\x01\x00+\x00\x00\x00\x8fu\x01\x00$\x00\x00\x00\xbbu\x01\x00'\x00\x00\x00\xe0u\x01\x00:\x00\x00\x00\bv\x01\x00b\x00\x00\x00Cv\x01\x001\x00\x00\x00\xa6v\x01\x00-\x00\x00\x00\xd8v\x01\x00$\x00\x00\x00\x06w\x01\x00)\x00\x00\x00+w\x01\x006\x00\x00\x00Uw\x01\x00\x1d\x00\x00\x00\x8cw\x01\x00\x19\x00\x00\x00\xaaw\x01\x00 \x00\x00\x00\xc4w\x01\x00w\x00\x00\x00\xe5w\x01\x00(\x00\x00\x00]x\x01\x00\x16\x00\x00\x00\x86x\x01\x00p\x00\x00\x00\x9dx\x01\x00h\x00\x00\x00\x0ey\x01\x00\x9b\x00\x00\x00wy\x01\x00\x97\x00\x00\x00\x13z\x01\x00\xa9\x00\x00\x00\xabz\x01\x00\x1b\x00\x00\x00U{\x01\x00\x18\x00\x00\x00q{\x01\x00\x1a\x00\x00\x00\x8a{\x01\x00$\x00\x00\x00\xa5{\x01\x00\x1d\x00\x00\x00\xca{\x01\x00%\x00\x00\x00\xe8{\x01\x00a\x00\x00\x00\x0e|\x01\x00s\x00\x00\x00p|\x01\x00B\x00\x00\x00\xe4|\x01\x00]\x00\x00\x00'}\x01\x00+\x00\x00\x00\x85}\x01\x00+\x00\x00\x00\xb1}\x01\x006\x00\x00\x00\xdd}\x01\x00;\x00\x00\x00\x14~\x01\x00q\x00\x00\x00P~\x01\x00/\x00\x00\x00\xc2~\x01\x001\x00\x00\x00\xf2~\x01\x00'\x00\x00\x00$\u007f\x01\x00'\x00\x00\x00L\u007f\x01\x00\x18\x00\x00\x00t\u007f\x01\x00&\x00\x00\x00\x8d\u007f\x01\x00%\x00\x00\x00\xb4\u007f\x01\x00(\x00\x00\x00\xda\u007f\x01\x00#\x00\x00\x00\x03\x80\x01\x00K\x00\x00\x00'\x80\x01\x00 \x00\x00\x00s\x80\x01\x00_\x00\x00\x00\x94\x80\x01\x00-\x00\x00\x00\xf4\x80\x01\x007\x00\x00\x00\"\x81\x01\x00:\x00\x00\x00Z\x81\x01\x004\x00\x00\x00\x95\x81\x01\x00:\x00\x00\x00\u0281\x01\x00:\x00\x00\x00\x05\x82\x01\x009\x00\x00\x00@\x82\x01\x00\x1e\x00\x00\x00z\x82\x01\x00\x1a\x00\x00\x00\x99\x82\x01\x00c\x00\x00\x00\xb4\x82\x01\x00#\x00\x00\x00\x18\x83\x01\x00\x82\x00\x00\x00<\x83\x01\x00\x99\x00\x00\x00\xbf\x83\x01\x00H\x00\x00\x00Y\x84\x01\x00&\x00\x00\x00\xa2\x84\x01\x00e\x00\x00\x00\u0244\x01\x00z\x00\x00\x00/\x85\x01\x00J\x00\x00\x00\xaa\x85\x01\x00\xf5\x00\x00\x00\xf5\x85\x01\x00X\x00\x00\x00\xeb\x86\x01\x00I\x00\x00\x00D\x87\x01\x00a\x00\x00\x00\x8e\x87\x01\x00w\x00\x00\x00\xf0\x87\x01\x00\xcf\x00\x00\x00h\x88\x01\x00\xd3\x00\x00\x008\x89\x01\x00/\x01\x00\x00\f\x8a\x01\x00\x1c\x00\x00\x00<\x8b\x01\x00X\x00\x00\x00Y\x8b\x01\x00*\x00\x00\x00\xb2\x8b\x01\x00:\x00\x00\x00\u074b\x01\x009\x00\x00\x00\x18\x8c\x01\x00\x1e\x00\x00\x00R\x8c\x01\x00=\x00\x00\x00q\x8c\x01\x003\x00\x00\x00\xaf\x8c\x01\x00'\x00\x00\x00\xe3\x8c\x01\x00&\x00\x00\x00\v\x8d\x01\x00+\x00\x00\x002\x8d\x01\x00G\x00\x00\x00^\x8d\x01\x00*\x00\x00\x00\xa6\x8d\x01\x00v\x00\x00\x00\u044d\x01\x00\x13\x00\x00\x00H\x8e\x01\x00\x18\x00\x00\x00\\\x8e\x01\x00/\x00\x00\x00u\x8e\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00^\x00\x00\x00\\\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x00\x00\xc4\x00\x00\x00\x0f\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\xeb\x00\x00\x00c\x00\x00\x00\x00\x00\x00\x001\x00\x00\x00o\x00\x00\x00}\x00\x00\x00\x00\x00\x00\x00J\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x98\x00\x00\x00U\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x17\x00\x00\x00u\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\xb7\x00\x00\x00\xd7\x00\x00\x00*\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x84\x00\x00\x00\x9c\x00\x00\x00\xe6\x00\x00\x00\x9d\x00\x00\x00\xc5\x00\x00\x00\xd9\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\xcd\x00\x00\x00\xcb\x00\x00\x00y\x00\x00\x00\x97\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00C\x00\x00\x00\x93\x00\x00\x00\xad\x00\x00\x00\xe1\x00\x00\x00\xa6\x00\x00\x00\xd0\x00\x00\x00r\x00\x00\x00+\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00h\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xde\x00\x00\x00;\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00z\x00\x00\x00/\x00\x00\x00V\x00\x00\x00\x8d\x00\x00\x00\xe3\x00\x00\x00!\x00\x00\x00~\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x88\x00\x00\x00l\x00\x00\x00s\x00\x00\x00g\x00\x00\x00\x05\x00\x00\x00\xc6\x00\x00\x00#\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x13\x00\x00\x00S\x00\x00\x00G\x00\x00\x00$\x00\x00\x00\xc1\x00\x00\x00\xb5\x00\x00\x00X\x00\x00\x00m\x00\x00\x00\t\x00\x00\x00x\x00\x00\x00\xb8\x00\x00\x00\xbd\x00\x00\x00k\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00<\x00\x00\x00E\x00\x00\x00\xbf\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00:\x00\x00\x00\x82\x00\x00\x00\x81\x00\x00\x00&\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00I\x00\x00\x00e\x00\x00\x00\x04\x00\x00\x00>\x00\x00\x00\b\x00\x00\x00\x94\x00\x00\x00\x8f\x00\x00\x00\xce\x00\x00\x00?\x00\x00\x00Y\x00\x00\x00\xda\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00'\x00\x00\x004\x00\x00\x00\xcc\x00\x00\x00\f\x00\x00\x005\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00O\x00\x00\x00 \x00\x00\x00)\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00Z\x00\x00\x00\"\x00\x00\x00\x00\x00\x00\x00v\x00\x00\x00]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00a\x00\x00\x00j\x00\x00\x008\x00\x00\x00\xa3\x00\x00\x00q\x00\x00\x00t\x00\x00\x00_\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\v\x00\x00\x00@\x00\x00\x00\xd2\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x95\x00\x00\x00\x06\x00\x00\x00\xa8\x00\x00\x00\xae\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x0e\x00\x00\x00{\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00i\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00L\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00w\x00\x00\x00\x12\x00\x00\x00=\x00\x00\x00\xaf\x00\x00\x00\a\x00\x00\x00\xdf\x00\x00\x00\xc0\x00\x00\x00N\x00\x00\x00%\x00\x00\x009\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00\u007f\x00\x00\x00\xbe\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00P\x00\x00\x00\xb3\x00\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x00\x00\x00D\x00\x00\x00B\x00\x00\x00n\x00\x00\x00\x00\x00\x00\x00\xd6\x00\x00\x00\x83\x00\x00\x00\n\x00\x00\x00W\x00\x00\x00\x14\x00\x00\x00Q\x00\x00\x00\xd4\x00\x00\x00d\x00\x00\x00\xac\x00\x00\x00\x16\x00\x00\x00\x96\x00\x00\x00K\x00\x00\x002\x00\x00\x00\x1a\x00\x00\x00\xb4\x00\x00\x00f\x00\x00\x00\xa2\x00\x00\x00\xe8\x00\x00\x00\x02\x00\x00\x00A\x00\x00\x00\xe4\x00\x00\x00\x8c\x00\x00\x00\x9a\x00\x00\x00`\x00\x00\x00\xab\x00\x00\x00M\x00\x00\x007\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x8e\x00\x00\x00\xca\x00\x00\x00H\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00|\x00\x00\x003\x00\x00\x00T\x00\x00\x00\x87\x00\x00\x00b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\xaa\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\xc7\x00\x00\x00\x8b\x00\x00\x00\x00\n\t\t # Create a ClusterRoleBinding for user1, user2, and group1 using the cluster-admin ClusterRole\n\t\t kubectl create clusterrolebinding cluster-admin --clusterrole=cluster-admin --user=user1 --user=user2 --group=group1\x00\n\t\t # Create a RoleBinding for user1, user2, and group1 using the admin ClusterRole\n\t\t kubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1\x00\n\t\t # Create a new configmap named my-config based on folder bar\n\t\t kubectl create configmap my-config --from-file=path/to/bar\n\n\t\t # Create a new configmap named my-config with specified keys instead of file basenames on disk\n\t\t kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt\n\n\t\t # Create a new configmap named my-config with key1=config1 and key2=config2\n\t\t kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2\x00\n\t\t # If you don't already have a .dockercfg file, you can create a dockercfg secret directly by using:\n\t\t kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL\x00\n\t\t # Show metrics for all nodes\n\t\t kubectl top node\n\n\t\t # Show metrics for a given node\n\t\t kubectl top node NODE_NAME\x00\n\t\t# Apply the configuration in pod.json to a pod.\n\t\tkubectl apply -f ./pod.json\n\n\t\t# Apply the JSON passed into stdin to a pod.\n\t\tcat pod.json | kubectl apply -f -\n\n\t\t# Note: --prune is still in Alpha\n\t\t# Apply the configuration in manifest.yaml that matches label app=nginx and delete all the other resources that are not in the file and match label app=nginx.\n\t\tkubectl apply --prune -f manifest.yaml -l app=nginx\n\n\t\t# Apply the configuration in manifest.yaml and delete all the other configmaps that are not in the file.\n\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/ConfigMap\x00\n\t\t# Auto scale a deployment \"foo\", with the number of pods between 2 and 10, no target CPU utilization specified so a default autoscaling policy will be used:\n\t\tkubectl autoscale deployment foo --min=2 --max=10\n\n\t\t# Auto scale a replication controller \"foo\", with the number of pods between 1 and 5, target CPU utilization at 80%:\n\t\tkubectl autoscale rc foo --max=5 --cpu-percent=80\x00\n\t\t# Convert 'pod.yaml' to latest version and print to stdout.\n\t\tkubectl convert -f pod.yaml\n\n\t\t# Convert the live state of the resource specified by 'pod.yaml' to the latest version\n\t\t# and print to stdout in json format.\n\t\tkubectl convert -f pod.yaml --local -o json\n\n\t\t# Convert all files under current directory to latest version and create them all.\n\t\tkubectl convert -f . | kubectl create -f -\x00\n\t\t# Create a ClusterRole named \"pod-reader\" that allows user to perform \"get\", \"watch\" and \"list\" on pods\n\t\tkubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods\n\n\t\t# Create a ClusterRole named \"pod-reader\" with ResourceName specified\n\t\tkubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods --resource-name=readablepod\x00\n\t\t# Create a Role named \"pod-reader\" that allows user to perform \"get\", \"watch\" and \"list\" on pods\n\t\tkubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods\n\n\t\t# Create a Role named \"pod-reader\" with ResourceName specified\n\t\tkubectl create role pod-reader --verb=get --verg=list --verb=watch --resource=pods --resource-name=readablepod\x00\n\t\t# Create a new resourcequota named my-quota\n\t\tkubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10\n\n\t\t# Create a new resourcequota named best-effort\n\t\tkubectl create quota best-effort --hard=pods=100 --scopes=BestEffort\x00\n\t\t# Create a pod disruption budget named my-pdb that will select all pods with the app=rails label\n\t\t# and require at least one of them being available at any point in time.\n\t\tkubectl create poddisruptionbudget my-pdb --selector=app=rails --min-available=1\n\n\t\t# Create a pod disruption budget named my-pdb that will select all pods with the app=nginx label\n\t\t# and require at least half of the pods selected to be available at any point in time.\n\t\tkubectl create pdb my-pdb --selector=app=nginx --min-available=50%\x00\n\t\t# Create a pod using the data in pod.json.\n\t\tkubectl create -f ./pod.json\n\n\t\t# Create a pod based on the JSON passed into stdin.\n\t\tcat pod.json | kubectl create -f -\n\n\t\t# Edit the data in docker-registry.yaml in JSON using the v1 API format then create the resource using the edited data.\n\t\tkubectl create -f docker-registry.yaml --edit --output-version=v1 -o json\x00\n\t\t# Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose rc nginx --port=80 --target-port=8000\n\n\t\t# Create a service for a replication controller identified by type and name specified in \"nginx-controller.yaml\", which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose -f nginx-controller.yaml --port=80 --target-port=8000\n\n\t\t# Create a service for a pod valid-pod, which serves on port 444 with the name \"frontend\"\n\t\tkubectl expose pod valid-pod --port=444 --name=frontend\n\n\t\t# Create a second service based on the above service, exposing the container port 8443 as port 443 with the name \"nginx-https\"\n\t\tkubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https\n\n\t\t# Create a service for a replicated streaming application on port 4100 balancing UDP traffic and named 'video-stream'.\n\t\tkubectl expose rc streamer --port=4100 --protocol=udp --name=video-stream\n\n\t\t# Create a service for a replicated nginx using replica set, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose rs nginx --port=80 --target-port=8000\n\n\t\t# Create a service for an nginx deployment, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose deployment nginx --port=80 --target-port=8000\x00\n\t\t# Delete a pod using the type and name specified in pod.json.\n\t\tkubectl delete -f ./pod.json\n\n\t\t# Delete a pod based on the type and name in the JSON passed into stdin.\n\t\tcat pod.json | kubectl delete -f -\n\n\t\t# Delete pods and services with same names \"baz\" and \"foo\"\n\t\tkubectl delete pod,service baz foo\n\n\t\t# Delete pods and services with label name=myLabel.\n\t\tkubectl delete pods,services -l name=myLabel\n\n\t\t# Delete a pod with minimal delay\n\t\tkubectl delete pod foo --now\n\n\t\t# Force delete a pod on a dead node\n\t\tkubectl delete pod foo --grace-period=0 --force\n\n\t\t# Delete all pods\n\t\tkubectl delete pods --all\x00\n\t\t# Describe a node\n\t\tkubectl describe nodes kubernetes-node-emt8.c.myproject.internal\n\n\t\t# Describe a pod\n\t\tkubectl describe pods/nginx\n\n\t\t# Describe a pod identified by type and name in \"pod.json\"\n\t\tkubectl describe -f pod.json\n\n\t\t# Describe all pods\n\t\tkubectl describe pods\n\n\t\t# Describe pods by label name=myLabel\n\t\tkubectl describe po -l name=myLabel\n\n\t\t# Describe all pods managed by the 'frontend' replication controller (rc-created pods\n\t\t# get the name of the rc as a prefix in the pod the name).\n\t\tkubectl describe pods frontend\x00\n\t\t# Drain node \"foo\", even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it.\n\t\t$ kubectl drain foo --force\n\n\t\t# As above, but abort if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet, and use a grace period of 15 minutes.\n\t\t$ kubectl drain foo --grace-period=900\x00\n\t\t# Edit the service named 'docker-registry':\n\t\tkubectl edit svc/docker-registry\n\n\t\t# Use an alternative editor\n\t\tKUBE_EDITOR=\"nano\" kubectl edit svc/docker-registry\n\n\t\t# Edit the job 'myjob' in JSON using the v1 API format:\n\t\tkubectl edit job.v1.batch/myjob -o json\n\n\t\t# Edit the deployment 'mydeployment' in YAML and save the modified config in its annotation:\n\t\tkubectl edit deployment/mydeployment -o yaml --save-config\x00\n\t\t# Get output from running 'date' from pod 123456-7890, using the first container by default\n\t\tkubectl exec 123456-7890 date\n\n\t\t# Get output from running 'date' in ruby-container from pod 123456-7890\n\t\tkubectl exec 123456-7890 -c ruby-container date\n\n\t\t# Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod 123456-7890\n\t\t# and sends stdout/stderr from 'bash' back to the client\n\t\tkubectl exec 123456-7890 -c ruby-container -i -t -- bash -il\x00\n\t\t# Get output from running pod 123456-7890, using the first container by default\n\t\tkubectl attach 123456-7890\n\n\t\t# Get output from ruby-container from pod 123456-7890\n\t\tkubectl attach 123456-7890 -c ruby-container\n\n\t\t# Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod 123456-7890\n\t\t# and sends stdout/stderr from 'bash' back to the client\n\t\tkubectl attach 123456-7890 -c ruby-container -i -t\n\n\t\t# Get output from the first pod of a ReplicaSet named nginx\n\t\tkubectl attach rs/nginx\n\t\t\x00\n\t\t# Get the documentation of the resource and its fields\n\t\tkubectl explain pods\n\n\t\t# Get the documentation of a specific field of a resource\n\t\tkubectl explain pods.spec.containers\x00\n\t\t# Install bash completion on a Mac using homebrew\n\t\tbrew install bash-completion\n\t\tprintf \"\n# Bash completion support\nsource $(brew --prefix)/etc/bash_completion\n\" >> $HOME/.bash_profile\n\t\tsource $HOME/.bash_profile\n\n\t\t# Load the kubectl completion code for bash into the current shell\n\t\tsource <(kubectl completion bash)\n\n\t\t# Write bash completion code to a file and source if from .bash_profile\n\t\tkubectl completion bash > ~/.kube/completion.bash.inc\n\t\tprintf \"\n# Kubectl shell completion\nsource '$HOME/.kube/completion.bash.inc'\n\" >> $HOME/.bash_profile\n\t\tsource $HOME/.bash_profile\n\n\t\t# Load the kubectl completion code for zsh[1] into the current shell\n\t\tsource <(kubectl completion zsh)\x00\n\t\t# List all pods in ps output format.\n\t\tkubectl get pods\n\n\t\t# List all pods in ps output format with more information (such as node name).\n\t\tkubectl get pods -o wide\n\n\t\t# List a single replication controller with specified NAME in ps output format.\n\t\tkubectl get replicationcontroller web\n\n\t\t# List a single pod in JSON output format.\n\t\tkubectl get -o json pod web-pod-13je7\n\n\t\t# List a pod identified by type and name specified in \"pod.yaml\" in JSON output format.\n\t\tkubectl get -f pod.yaml -o json\n\n\t\t# Return only the phase value of the specified pod.\n\t\tkubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}\n\n\t\t# List all replication controllers and services together in ps output format.\n\t\tkubectl get rc,services\n\n\t\t# List one or more resources by their type and names.\n\t\tkubectl get rc/web service/frontend pods/web-pod-13je7\n\n\t\t# List all resources with different types.\n\t\tkubectl get all\x00\n\t\t# Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod\n\t\tkubectl port-forward mypod 5000 6000\n\n\t\t# Listen on port 8888 locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod 8888:5000\n\n\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod :5000\n\n\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod 0:5000\x00\n\t\t# Mark node \"foo\" as schedulable.\n\t\t$ kubectl uncordon foo\x00\n\t\t# Mark node \"foo\" as unschedulable.\n\t\tkubectl cordon foo\x00\n\t\t# Partially update a node using strategic merge patch\n\t\tkubectl patch node k8s-node-1 -p '{\"spec\":{\"unschedulable\":true}}'\n\n\t\t# Partially update a node identified by the type and name specified in \"node.json\" using strategic merge patch\n\t\tkubectl patch -f node.json -p '{\"spec\":{\"unschedulable\":true}}'\n\n\t\t# Update a container's image; spec.containers[*].name is required because it's a merge key\n\t\tkubectl patch pod valid-pod -p '{\"spec\":{\"containers\":[{\"name\":\"kubernetes-serve-hostname\",\"image\":\"new image\"}]}}'\n\n\t\t# Update a container's image using a json patch with positional arrays\n\t\tkubectl patch pod valid-pod --type='json' -p='[{\"op\": \"replace\", \"path\": \"/spec/containers/0/image\", \"value\":\"new image\"}]'\x00\n\t\t# Print flags inherited by all commands\n\t\tkubectl options\x00\n\t\t# Print the address of the master and cluster services\n\t\tkubectl cluster-info\x00\n\t\t# Print the client and server versions for the current context\n\t\tkubectl version\x00\n\t\t# Print the supported API versions\n\t\tkubectl api-versions\x00\n\t\t# Replace a pod using the data in pod.json.\n\t\tkubectl replace -f ./pod.json\n\n\t\t# Replace a pod based on the JSON passed into stdin.\n\t\tcat pod.json | kubectl replace -f -\n\n\t\t# Update a single-container pod's image version (tag) to v4\n\t\tkubectl get pod mypod -o yaml | sed 's/\\(image: myimage\\):.*$/\x01:v4/' | kubectl replace -f -\n\n\t\t# Force replace, delete and then re-create the resource\n\t\tkubectl replace --force -f ./pod.json\x00\n\t\t# Return snapshot logs from pod nginx with only one container\n\t\tkubectl logs nginx\n\n\t\t# Return snapshot logs for the pods defined by label app=nginx\n\t\tkubectl logs -lapp=nginx\n\n\t\t# Return snapshot of previous terminated ruby container logs from pod web-1\n\t\tkubectl logs -p -c ruby web-1\n\n\t\t# Begin streaming the logs of the ruby container in pod web-1\n\t\tkubectl logs -f -c ruby web-1\n\n\t\t# Display only the most recent 20 lines of output in pod nginx\n\t\tkubectl logs --tail=20 nginx\n\n\t\t# Show all logs from pod nginx written in the last hour\n\t\tkubectl logs --since=1h nginx\n\n\t\t# Return snapshot logs from first container of a job named hello\n\t\tkubectl logs job/hello\n\n\t\t# Return snapshot logs from container nginx-1 of a deployment named nginx\n\t\tkubectl logs deployment/nginx -c nginx-1\x00\n\t\t# Run a proxy to kubernetes apiserver on port 8011, serving static content from ./local/www/\n\t\tkubectl proxy --port=8011 --www=./local/www/\n\n\t\t# Run a proxy to kubernetes apiserver on an arbitrary local port.\n\t\t# The chosen port for the server will be output to stdout.\n\t\tkubectl proxy --port=0\n\n\t\t# Run a proxy to kubernetes apiserver, changing the api prefix to k8s-api\n\t\t# This makes e.g. the pods api available at localhost:8001/k8s-api/v1/pods/\n\t\tkubectl proxy --api-prefix=/k8s-api\x00\n\t\t# Scale a replicaset named 'foo' to 3.\n\t\tkubectl scale --replicas=3 rs/foo\n\n\t\t# Scale a resource identified by type and name specified in \"foo.yaml\" to 3.\n\t\tkubectl scale --replicas=3 -f foo.yaml\n\n\t\t# If the deployment named mysql's current size is 2, scale mysql to 3.\n\t\tkubectl scale --current-replicas=2 --replicas=3 deployment/mysql\n\n\t\t# Scale multiple replication controllers.\n\t\tkubectl scale --replicas=5 rc/foo rc/bar rc/baz\n\n\t\t# Scale job named 'cron' to 3.\n\t\tkubectl scale --replicas=3 job/cron\x00\n\t\t# Set the last-applied-configuration of a resource to match the contents of a file.\n\t\tkubectl apply set-last-applied -f deploy.yaml\n\n\t\t# Execute set-last-applied against each configuration file in a directory.\n\t\tkubectl apply set-last-applied -f path/\n\n\t\t# Set the last-applied-configuration of a resource to match the contents of a file, will create the annotation if it does not already exist.\n\t\tkubectl apply set-last-applied -f deploy.yaml --create-annotation=true\n\t\t\x00\n\t\t# Show metrics for all pods in the default namespace\n\t\tkubectl top pod\n\n\t\t# Show metrics for all pods in the given namespace\n\t\tkubectl top pod --namespace=NAMESPACE\n\n\t\t# Show metrics for a given pod and its containers\n\t\tkubectl top pod POD_NAME --containers\n\n\t\t# Show metrics for the pods defined by label name=myLabel\n\t\tkubectl top pod -l name=myLabel\x00\n\t\t# Shut down foo.\n\t\tkubectl stop replicationcontroller foo\n\n\t\t# Stop pods and services with label name=myLabel.\n\t\tkubectl stop pods,services -l name=myLabel\n\n\t\t# Shut down the service defined in service.json\n\t\tkubectl stop -f service.json\n\n\t\t# Shut down all resources in the path/to/resources directory\n\t\tkubectl stop -f path/to/resources\x00\n\t\t# Start a single instance of nginx.\n\t\tkubectl run nginx --image=nginx\n\n\t\t# Start a single instance of hazelcast and let the container expose port 5701 .\n\t\tkubectl run hazelcast --image=hazelcast --port=5701\n\n\t\t# Start a single instance of hazelcast and set environment variables \"DNS_DOMAIN=cluster\" and \"POD_NAMESPACE=default\" in the container.\n\t\tkubectl run hazelcast --image=hazelcast --env=\"DNS_DOMAIN=cluster\" --env=\"POD_NAMESPACE=default\"\n\n\t\t# Start a replicated instance of nginx.\n\t\tkubectl run nginx --image=nginx --replicas=5\n\n\t\t# Dry run. Print the corresponding API objects without creating them.\n\t\tkubectl run nginx --image=nginx --dry-run\n\n\t\t# Start a single instance of nginx, but overload the spec of the deployment with a partial set of values parsed from JSON.\n\t\tkubectl run nginx --image=nginx --overrides='{ \"apiVersion\": \"v1\", \"spec\": { ... } }'\n\n\t\t# Start a pod of busybox and keep it in the foreground, don't restart it if it exits.\n\t\tkubectl run -i -t busybox --image=busybox --restart=Never\n\n\t\t# Start the nginx container using the default command, but use custom arguments (arg1 .. argN) for that command.\n\t\tkubectl run nginx --image=nginx -- ... \n\n\t\t# Start the nginx container using a different command and custom arguments.\n\t\tkubectl run nginx --image=nginx --command -- ... \n\n\t\t# Start the perl container to compute \u03c0 to 2000 places and print it out.\n\t\tkubectl run pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'\n\n\t\t# Start the cron job to compute \u03c0 to 2000 places and print it out every 5 minutes.\n\t\tkubectl run pi --schedule=\"0/5 * * * ?\" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'\x00\n\t\t# Update node 'foo' with a taint with key 'dedicated' and value 'special-user' and effect 'NoSchedule'.\n\t\t# If a taint with that key and effect already exists, its value is replaced as specified.\n\t\tkubectl taint nodes foo dedicated=special-user:NoSchedule\n\n\t\t# Remove from node 'foo' the taint with key 'dedicated' and effect 'NoSchedule' if one exists.\n\t\tkubectl taint nodes foo dedicated:NoSchedule-\n\n\t\t# Remove from node 'foo' all the taints with key 'dedicated'\n\t\tkubectl taint nodes foo dedicated-\x00\n\t\t# Update pod 'foo' with the label 'unhealthy' and the value 'true'.\n\t\tkubectl label pods foo unhealthy=true\n\n\t\t# Update pod 'foo' with the label 'status' and the value 'unhealthy', overwriting any existing value.\n\t\tkubectl label --overwrite pods foo status=unhealthy\n\n\t\t# Update all pods in the namespace\n\t\tkubectl label pods --all status=unhealthy\n\n\t\t# Update a pod identified by the type and name in \"pod.json\"\n\t\tkubectl label -f pod.json status=unhealthy\n\n\t\t# Update pod 'foo' only if the resource is unchanged from version 1.\n\t\tkubectl label pods foo status=unhealthy --resource-version=1\n\n\t\t# Update pod 'foo' by removing a label named 'bar' if it exists.\n\t\t# Does not require the --overwrite flag.\n\t\tkubectl label pods foo bar-\x00\n\t\t# Update pods of frontend-v1 using new replication controller data in frontend-v2.json.\n\t\tkubectl rolling-update frontend-v1 -f frontend-v2.json\n\n\t\t# Update pods of frontend-v1 using JSON data passed into stdin.\n\t\tcat frontend-v2.json | kubectl rolling-update frontend-v1 -f -\n\n\t\t# Update the pods of frontend-v1 to frontend-v2 by just changing the image, and switching the\n\t\t# name of the replication controller.\n\t\tkubectl rolling-update frontend-v1 frontend-v2 --image=image:v2\n\n\t\t# Update the pods of frontend by just changing the image, and keeping the old name.\n\t\tkubectl rolling-update frontend --image=image:v2\n\n\t\t# Abort and reverse an existing rollout in progress (from frontend-v1 to frontend-v2).\n\t\tkubectl rolling-update frontend-v1 frontend-v2 --rollback\x00\n\t\t# View the last-applied-configuration annotations by type/name in YAML.\n\t\tkubectl apply view-last-applied deployment/nginx\n\n\t\t# View the last-applied-configuration annotations by file in JSON\n\t\tkubectl apply view-last-applied -f deploy.yaml -o json\x00\n\t\tApply a configuration to a resource by filename or stdin.\n\t\tThis resource will be created if it doesn't exist yet.\n\t\tTo use 'apply', always create the resource initially with either 'apply' or 'create --save-config'.\n\n\t\tJSON and YAML formats are accepted.\n\n\t\tAlpha Disclaimer: the --prune functionality is not yet complete. Do not use unless you are aware of what the current state is. See https://issues.k8s.io/34274.\x00\n\t\tConvert config files between different API versions. Both YAML\n\t\tand JSON formats are accepted.\n\n\t\tThe command takes filename, directory, or URL as input, and convert it into format\n\t\tof version specified by --output-version flag. If target version is not specified or\n\t\tnot supported, convert to latest version.\n\n\t\tThe default output will be printed to stdout in YAML format. One can use -o option\n\t\tto change to output destination.\x00\n\t\tCreate a ClusterRole.\x00\n\t\tCreate a ClusterRoleBinding for a particular ClusterRole.\x00\n\t\tCreate a RoleBinding for a particular Role or ClusterRole.\x00\n\t\tCreate a TLS secret from the given public/private key pair.\n\n\t\tThe public/private key pair must exist before hand. The public key certificate must be .PEM encoded and match the given private key.\x00\n\t\tCreate a configmap based on a file, directory, or specified literal value.\n\n\t\tA single configmap may package one or more key/value pairs.\n\n\t\tWhen creating a configmap based on a file, the key will default to the basename of the file, and the value will\n\t\tdefault to the file content. If the basename is an invalid key, you may specify an alternate key.\n\n\t\tWhen creating a configmap based on a directory, each file whose basename is a valid key in the directory will be\n\t\tpackaged into the configmap. Any directory entries except regular files are ignored (e.g. subdirectories,\n\t\tsymlinks, devices, pipes, etc).\x00\n\t\tCreate a namespace with the specified name.\x00\n\t\tCreate a new secret for use with Docker registries.\n\n\t\tDockercfg secrets are used to authenticate against Docker registries.\n\n\t\tWhen using the Docker command line to push images, you can authenticate to a given registry by running\n\n\t\t $ docker login DOCKER_REGISTRY_SERVER --username=DOCKER_USER --password=DOCKER_PASSWORD --email=DOCKER_EMAIL'.\n\n That produces a ~/.dockercfg file that is used by subsequent 'docker push' and 'docker pull' commands to\n\t\tauthenticate to the registry. The email address is optional.\n\n\t\tWhen creating applications, you may have a Docker registry that requires authentication. In order for the\n\t\tnodes to pull images on your behalf, they have to have the credentials. You can provide this information\n\t\tby creating a dockercfg secret and attaching it to your service account.\x00\n\t\tCreate a pod disruption budget with the specified name, selector, and desired minimum available pods\x00\n\t\tCreate a resource by filename or stdin.\n\n\t\tJSON and YAML formats are accepted.\x00\n\t\tCreate a resourcequota with the specified name, hard limits and optional scopes\x00\n\t\tCreate a role with single rule.\x00\n\t\tCreate a secret based on a file, directory, or specified literal value.\n\n\t\tA single secret may package one or more key/value pairs.\n\n\t\tWhen creating a secret based on a file, the key will default to the basename of the file, and the value will\n\t\tdefault to the file content. If the basename is an invalid key, you may specify an alternate key.\n\n\t\tWhen creating a secret based on a directory, each file whose basename is a valid key in the directory will be\n\t\tpackaged into the secret. Any directory entries except regular files are ignored (e.g. subdirectories,\n\t\tsymlinks, devices, pipes, etc).\x00\n\t\tCreate a service account with the specified name.\x00\n\t\tCreate and run a particular image, possibly replicated.\n\n\t\tCreates a deployment or job to manage the created container(s).\x00\n\t\tCreates an autoscaler that automatically chooses and sets the number of pods that run in a kubernetes cluster.\n\n\t\tLooks up a Deployment, ReplicaSet, or ReplicationController by name and creates an autoscaler that uses the given resource as a reference.\n\t\tAn autoscaler can automatically increase or decrease number of pods deployed within the system as needed.\x00\n\t\tDelete resources by filenames, stdin, resources and names, or by resources and label selector.\n\n\t\tJSON and YAML formats are accepted. Only one type of the arguments may be specified: filenames,\n\t\tresources and names, or resources and label selector.\n\n\t\tSome resources, such as pods, support graceful deletion. These resources define a default period\n\t\tbefore they are forcibly terminated (the grace period) but you may override that value with\n\t\tthe --grace-period flag, or pass --now to set a grace-period of 1. Because these resources often\n\t\trepresent entities in the cluster, deletion may not be acknowledged immediately. If the node\n\t\thosting a pod is down or cannot reach the API server, termination may take significantly longer\n\t\tthan the grace period. To force delete a resource,\tyou must pass a grace\tperiod of 0 and specify\n\t\tthe --force flag.\n\n\t\tIMPORTANT: Force deleting pods does not wait for confirmation that the pod's processes have been\n\t\tterminated, which can leave those processes running until the node detects the deletion and\n\t\tcompletes graceful deletion. If your processes use shared storage or talk to a remote API and\n\t\tdepend on the name of the pod to identify themselves, force deleting those pods may result in\n\t\tmultiple processes running on different machines using the same identification which may lead\n\t\tto data corruption or inconsistency. Only force delete pods when you are sure the pod is\n\t\tterminated, or if your application can tolerate multiple copies of the same pod running at once.\n\t\tAlso, if you force delete pods the scheduler may place new pods on those nodes before the node\n\t\thas released those resources and causing those pods to be evicted immediately.\n\n\t\tNote that the delete command does NOT do resource version checks, so if someone\n\t\tsubmits an update to a resource right when you submit a delete, their update\n\t\twill be lost along with the rest of the resource.\x00\n\t\tDeprecated: Gracefully shut down a resource by name or filename.\n\n\t\tThe stop command is deprecated, all its functionalities are covered by delete command.\n\t\tSee 'kubectl delete --help' for more details.\n\n\t\tAttempts to shut down and delete a resource that supports graceful termination.\n\t\tIf the resource is scalable it will be scaled to 0 before deletion.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage of nodes.\n\n\t\tThe top-node command allows you to see the resource consumption of nodes.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage of pods.\n\n\t\tThe 'top pod' command allows you to see the resource consumption of pods.\n\n\t\tDue to the metrics pipeline delay, they may be unavailable for a few minutes\n\t\tsince pod creation.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage.\n\n\t\tThe top command allows you to see the resource consumption for nodes or pods.\n\n\t\tThis command requires Heapster to be correctly configured and working on the server. \x00\n\t\tDrain node in preparation for maintenance.\n\n\t\tThe given node will be marked unschedulable to prevent new pods from arriving.\n\t\t'drain' evicts the pods if the APIServer supports eviction\n\t\t(http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE\n\t\tto delete the pods.\n\t\tThe 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through\n\t\tthe API server). If there are DaemonSet-managed pods, drain will not proceed\n\t\twithout --ignore-daemonsets, and regardless it will not delete any\n\t\tDaemonSet-managed pods, because those pods would be immediately replaced by the\n\t\tDaemonSet controller, which ignores unschedulable markings. If there are any\n\t\tpods that are neither mirror pods nor managed by ReplicationController,\n\t\tReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete any pods unless you\n\t\tuse --force. --force will also allow deletion to proceed if the managing resource of one\n\t\tor more pods is missing.\n\n\t\t'drain' waits for graceful termination. You should not operate on the machine until\n\t\tthe command completes.\n\n\t\tWhen you are ready to put the node back into service, use kubectl uncordon, which\n\t\twill make the node schedulable again.\n\n\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_drain.svg)\x00\n\t\tEdit a resource from the default editor.\n\n\t\tThe edit command allows you to directly edit any API resource you can retrieve via the\n\t\tcommand line tools. It will open the editor defined by your KUBE_EDITOR, or EDITOR\n\t\tenvironment variables, or fall back to 'vi' for Linux or 'notepad' for Windows.\n\t\tYou can edit multiple objects, although changes are applied one at a time. The command\n\t\taccepts filenames as well as command line arguments, although the files you point to must\n\t\tbe previously saved versions of resources.\n\n\t\tEditing is done with the API version used to fetch the resource.\n\t\tTo edit using a specific API version, fully-qualify the resource, version, and group.\n\n\t\tThe default format is YAML. To edit in JSON, specify \"-o json\".\n\n\t\tThe flag --windows-line-endings can be used to force Windows line endings,\n\t\totherwise the default for your operating system will be used.\n\n\t\tIn the event an error occurs while updating, a temporary file will be created on disk\n\t\tthat contains your unapplied changes. The most common error when updating a resource\n\t\tis another editor changing the resource on the server. When this occurs, you will have\n\t\tto apply your changes to the newer version of the resource, or update your temporary\n\t\tsaved copy to include the latest resource version.\x00\n\t\tMark node as schedulable.\x00\n\t\tMark node as unschedulable.\x00\n\t\tOutput shell completion code for the specified shell (bash or zsh).\n\t\tThe shell code must be evaluated to provide interactive\n\t\tcompletion of kubectl commands. This can be done by sourcing it from\n\t\tthe .bash_profile.\n\n\t\tNote: this requires the bash-completion framework, which is not installed\n\t\tby default on Mac. This can be installed by using homebrew:\n\n\t\t $ brew install bash-completion\n\n\t\tOnce installed, bash_completion must be evaluated. This can be done by adding the\n\t\tfollowing line to the .bash_profile\n\n\t\t $ source $(brew --prefix)/etc/bash_completion\n\n\t\tNote for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2\x00\n\t\tPerform a rolling update of the given ReplicationController.\n\n\t\tReplaces the specified replication controller with a new replication controller by updating one pod at a time to use the\n\t\tnew PodTemplate. The new-controller.json must specify the same namespace as the\n\t\texisting replication controller and overwrite at least one (common) label in its replicaSelector.\n\n\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_rollingupdate.svg)\x00\n\t\tReplace a resource by filename or stdin.\n\n\t\tJSON and YAML formats are accepted. If replacing an existing resource, the\n\t\tcomplete resource spec must be provided. This can be obtained by\n\n\t\t $ kubectl get TYPE NAME -o yaml\n\n\t\tPlease refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.\x00\n\t\tSet a new size for a Deployment, ReplicaSet, Replication Controller, or Job.\n\n\t\tScale also allows users to specify one or more preconditions for the scale action.\n\n\t\tIf --current-replicas or --resource-version is specified, it is validated before the\n\t\tscale is attempted, and it is guaranteed that the precondition holds true when the\n\t\tscale is sent to the server.\x00\n\t\tSet the latest last-applied-configuration annotations by setting it to match the contents of a file.\n\t\tThis results in the last-applied-configuration being updated as though 'kubectl apply -f ' was run,\n\t\twithout updating any other parts of the object.\x00\n\t\tTo proxy all of the kubernetes api and nothing else, use:\n\n\t\t $ kubectl proxy --api-prefix=/\n\n\t\tTo proxy only part of the kubernetes api and also some static files:\n\n\t\t $ kubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/api/\n\n\t\tThe above lets you 'curl localhost:8001/api/v1/pods'.\n\n\t\tTo proxy the entire kubernetes api at a different root, use:\n\n\t\t $ kubectl proxy --api-prefix=/custom/\n\n\t\tThe above lets you 'curl localhost:8001/custom/api/v1/pods'\x00\n\t\tUpdate field(s) of a resource using strategic merge patch\n\n\t\tJSON and YAML formats are accepted.\n\n\t\tPlease refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.\x00\n\t\tUpdate the labels on a resource.\n\n\t\t* A label must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[1]d characters.\n\t\t* If --overwrite is true, then existing labels can be overwritten, otherwise attempting to overwrite a label will result in an error.\n\t\t* If --resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used.\x00\n\t\tUpdate the taints on one or more nodes.\n\n\t\t* A taint consists of a key, value, and effect. As an argument here, it is expressed as key=value:effect.\n\t\t* The key must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[1]d characters.\n\t\t* The value must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[2]d characters.\n\t\t* The effect must be NoSchedule, PreferNoSchedule or NoExecute.\n\t\t* Currently taint can only apply to node.\x00\n\t\tView the latest last-applied-configuration annotations by type/name or file.\n\n\t\tThe default output will be printed to stdout in YAML format. One can use -o option\n\t\tto change output format.\x00\n\t # !!!Important Note!!!\n\t # Requires that the 'tar' binary is present in your container\n\t # image. If 'tar' is not present, 'kubectl cp' will fail.\n\n\t # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace\n\t\tkubectl cp /tmp/foo_dir :/tmp/bar_dir\n\n # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container\n\t\tkubectl cp /tmp/foo :/tmp/bar -c \n\n\t\t# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace \n\t\tkubectl cp /tmp/foo /:/tmp/bar\n\n\t\t# Copy /tmp/foo from a remote pod to /tmp/bar locally\n\t\tkubectl cp /:/tmp/foo /tmp/bar\x00\n\t # Create a new TLS secret named tls-secret with the given key pair:\n\t kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key\x00\n\t # Create a new namespace named my-namespace\n\t kubectl create namespace my-namespace\x00\n\t # Create a new secret named my-secret with keys for each file in folder bar\n\t kubectl create secret generic my-secret --from-file=path/to/bar\n\n\t # Create a new secret named my-secret with specified keys instead of names on disk\n\t kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub\n\n\t # Create a new secret named my-secret with key1=supersecret and key2=topsecret\n\t kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret\x00\n\t # Create a new service account named my-service-account\n\t kubectl create serviceaccount my-service-account\x00\n\t# Create a new ExternalName service named my-ns \n\tkubectl create service externalname my-ns --external-name bar.com\x00\n\tCreate an ExternalName service with the specified name.\n\n\tExternalName service references to an external DNS address instead of\n\tonly pods, which will allow application authors to reference services\n\tthat exist off platform, on other clusters, or locally.\x00\n\tHelp provides help for any command in the application.\n\tSimply type kubectl help [path to command] for full details.\x00\n # Create a new LoadBalancer service named my-lbs\n kubectl create service loadbalancer my-lbs --tcp=5678:8080\x00\n # Create a new clusterIP service named my-cs\n kubectl create service clusterip my-cs --tcp=5678:8080\n\n # Create a new clusterIP service named my-cs (in headless mode)\n kubectl create service clusterip my-cs --clusterip=\"None\"\x00\n # Create a new deployment named my-dep that runs the busybox image.\n kubectl create deployment my-dep --image=busybox\x00\n # Create a new nodeport service named my-ns\n kubectl create service nodeport my-ns --tcp=5678:8080\x00\n # Dump current cluster state to stdout\n kubectl cluster-info dump\n\n # Dump current cluster state to /path/to/cluster-state\n kubectl cluster-info dump --output-directory=/path/to/cluster-state\n\n # Dump all namespaces to stdout\n kubectl cluster-info dump --all-namespaces\n\n # Dump a set of namespaces to /path/to/cluster-state\n kubectl cluster-info dump --namespaces default,kube-system --output-directory=/path/to/cluster-state\x00\n # Update pod 'foo' with the annotation 'description' and the value 'my frontend'.\n # If the same annotation is set multiple times, only the last value will be applied\n kubectl annotate pods foo description='my frontend'\n\n # Update a pod identified by type and name in \"pod.json\"\n kubectl annotate -f pod.json description='my frontend'\n\n # Update pod 'foo' with the annotation 'description' and the value 'my frontend running nginx', overwriting any existing value.\n kubectl annotate --overwrite pods foo description='my frontend running nginx'\n\n # Update all pods in the namespace\n kubectl annotate pods --all description='my frontend running nginx'\n\n # Update pod 'foo' only if the resource is unchanged from version 1.\n kubectl annotate pods foo description='my frontend running nginx' --resource-version=1\n\n # Update pod 'foo' by removing an annotation named 'description' if it exists.\n # Does not require the --overwrite flag.\n kubectl annotate pods foo description-\x00\n Create a LoadBalancer service with the specified name.\x00\n Create a clusterIP service with the specified name.\x00\n Create a deployment with the specified name.\x00\n Create a nodeport service with the specified name.\x00\n Dumps cluster info out suitable for debugging and diagnosing cluster problems. By default, dumps everything to\n stdout. You can optionally specify a directory with --output-directory. If you specify a directory, kubernetes will\n build a set of files in that directory. By default only dumps things in the 'kube-system' namespace, but you can\n switch to a different namespace with the --namespaces flag, or specify --all-namespaces to dump all namespaces.\n\n The command also dumps the logs of all of the pods in the cluster, these logs are dumped into different directories\n based on namespace and pod name.\x00\n Display addresses of the master and services with label kubernetes.io/cluster-service=true\n To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.\x00A comma-delimited set of quota scopes that must all match each object tracked by the quota.\x00A comma-delimited set of resource=quantity pairs that define a hard limit.\x00A label selector to use for this budget. Only equality-based selector requirements are supported.\x00A label selector to use for this service. Only equality-based selector requirements are supported. If empty (the default) infer the selector from the replication controller or replica set.)\x00A schedule in the Cron format the job should be run with.\x00Additional external IP address (not managed by Kubernetes) to accept for the service. If this IP is routed to a node, the service can be accessed by this IP in addition to its generated service IP.\x00An inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.\x00An inline JSON override for the generated service object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field. Only used if --expose is true.\x00Apply a configuration to a resource by filename or stdin\x00Approve a certificate signing request\x00Assign your own ClusterIP or set to 'None' for a 'headless' service (no loadbalancing).\x00Attach to a running container\x00Auto-scale a Deployment, ReplicaSet, or ReplicationController\x00ClusterIP to be assigned to the service. Leave empty to auto-allocate, or set to 'None' to create a headless service.\x00ClusterRole this ClusterRoleBinding should reference\x00ClusterRole this RoleBinding should reference\x00Container name which will have its image upgraded. Only relevant when --image is specified, ignored otherwise. Required when using --image on a multi-container pod\x00Convert config files between different API versions\x00Copy files and directories to and from containers.\x00Create a ClusterRoleBinding for a particular ClusterRole\x00Create a LoadBalancer service.\x00Create a NodePort service.\x00Create a RoleBinding for a particular Role or ClusterRole\x00Create a TLS secret\x00Create a clusterIP service.\x00Create a configmap from a local file, directory or literal value\x00Create a deployment with the specified name.\x00Create a namespace with the specified name\x00Create a pod disruption budget with the specified name.\x00Create a quota with the specified name.\x00Create a resource by filename or stdin\x00Create a secret for use with a Docker registry\x00Create a secret from a local file, directory or literal value\x00Create a secret using specified subcommand\x00Create a service account with the specified name\x00Create a service using specified subcommand.\x00Create an ExternalName service.\x00Delete resources by filenames, stdin, resources and names, or by resources and label selector\x00Delete the specified cluster from the kubeconfig\x00Delete the specified context from the kubeconfig\x00Deny a certificate signing request\x00Deprecated: Gracefully shut down a resource by name or filename\x00Describe one or many contexts\x00Display Resource (CPU/Memory) usage of nodes\x00Display Resource (CPU/Memory) usage of pods\x00Display Resource (CPU/Memory) usage.\x00Display cluster info\x00Display clusters defined in the kubeconfig\x00Display merged kubeconfig settings or a specified kubeconfig file\x00Display one or many resources\x00Displays the current-context\x00Documentation of resources\x00Drain node in preparation for maintenance\x00Dump lots of relevant info for debugging and diagnosis\x00Edit a resource on the server\x00Email for Docker registry\x00Execute a command in a container\x00Explicit policy for when to pull container images. Required when --image is same as existing image, ignored otherwise.\x00Forward one or more local ports to a pod\x00Help about any command\x00IP to assign to the Load Balancer. If empty, an ephemeral IP will be created and used (cloud-provider specific).\x00If non-empty, set the session affinity for the service to this; legal values: 'None', 'ClientIP'\x00If non-empty, the annotation update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.\x00If non-empty, the labels update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.\x00Image to use for upgrading the replication controller. Must be distinct from the existing image (either new image or new image tag). Can not be used with --filename/-f\x00Manage a deployment rollout\x00Mark node as schedulable\x00Mark node as unschedulable\x00Mark the provided resource as paused\x00Modify certificate resources.\x00Modify kubeconfig files\x00Name or number for the port on the container that the service should direct traffic to. Optional.\x00Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.\x00Output shell completion code for the specified shell (bash or zsh)\x00Output the formatted object with the given group version (for ex: 'extensions/v1beta1').)\x00Password for Docker registry authentication\x00Path to PEM encoded public key certificate.\x00Path to private key associated with given certificate.\x00Perform a rolling update of the given ReplicationController\x00Precondition for resource version. Requires that the current resource version match this value in order to scale.\x00Print the client and server version information\x00Print the list of flags inherited by all commands\x00Print the logs for a container in a pod\x00Replace a resource by filename or stdin\x00Resume a paused resource\x00Role this RoleBinding should reference\x00Run a particular image on the cluster\x00Run a proxy to the Kubernetes API server\x00Server location for Docker registry\x00Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job\x00Set specific features on objects\x00Set the last-applied-configuration annotation on a live object to match the contents of a file.\x00Set the selector on a resource\x00Sets a cluster entry in kubeconfig\x00Sets a context entry in kubeconfig\x00Sets a user entry in kubeconfig\x00Sets an individual value in a kubeconfig file\x00Sets the current-context in a kubeconfig file\x00Show details of a specific resource or group of resources\x00Show the status of the rollout\x00Synonym for --target-port\x00Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service\x00The image for the container to run.\x00The image pull policy for the container. If left empty, this value will not be specified by the client and defaulted by the server\x00The key to use to differentiate between two different controllers, default 'deployment'. Only relevant when --image is specified, ignored otherwise\x00The minimum number or percentage of available pods this budget requires.\x00The name for the newly created object.\x00The name for the newly created object. If not specified, the name of the input resource will be used.\x00The name of the API generator to use, see http://kubernetes.io/docs/user-guide/kubectl-conventions/#generators for a list.\x00The name of the API generator to use. Currently there is only 1 generator.\x00The name of the API generator to use. There are 2 generators: 'service/v1' and 'service/v2'. The only difference between them is that service port in v1 is named 'default', while it is left unnamed in v2. Default is 'service/v2'.\x00The name of the generator to use for creating a service. Only used if --expose is true\x00The network protocol for the service to be created. Default is 'TCP'.\x00The port that the service should serve on. Copied from the resource being exposed, if unspecified\x00The port that this container exposes. If --expose is true, this is also the port used by the service that is created.\x00The resource requirement limits for this container. For example, 'cpu=200m,memory=512Mi'. Note that server side components may assign limits depending on the server configuration, such as limit ranges.\x00The resource requirement requests for this container. For example, 'cpu=100m,memory=256Mi'. Note that server side components may assign requests depending on the server configuration, such as limit ranges.\x00The restart policy for this Pod. Legal values [Always, OnFailure, Never]. If set to 'Always' a deployment is created, if set to 'OnFailure' a job is created, if set to 'Never', a regular pod is created. For the latter two --replicas must be 1. Default 'Always', for CronJobs `Never`.\x00The type of secret to create\x00Type for this service: ClusterIP, NodePort, or LoadBalancer. Default is 'ClusterIP'.\x00Undo a previous rollout\x00Unsets an individual value in a kubeconfig file\x00Update field(s) of a resource using strategic merge patch\x00Update image of a pod template\x00Update resource requests/limits on objects with pod templates\x00Update the annotations on a resource\x00Update the labels on a resource\x00Update the taints on one or more nodes\x00Username for Docker registry authentication\x00View latest last-applied-configuration annotations of a resource/object\x00View rollout history\x00Where to output the files. If empty or '-' uses stdout, otherwise creates a directory hierarchy in that directory\x00dummy restart flag)\x00external name of service\x00kubectl controls the Kubernetes cluster manager\x00Project-Id-Version: gettext-go-examples-hello\nReport-Msgid-Bugs-To: EMAIL\nPOT-Creation-Date: 2017-03-14 21:32-0700\nPO-Revision-Date: 2019-02-14 10:33+0900\nLast-Translator: Giri Kuncoro \nLanguage-Team: \nLanguage: ja\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Generator: Poedit 2.1.1\nX-Poedit-SourceCharset: UTF-8\nPlural-Forms: nplurals=2; plural=(n > 1);\n\x00\n\t\t # Create a ClusterRoleBinding for user1, user2, and group1 using the cluster-admin ClusterRole\n\t\t kubectl create clusterrolebinding cluster-admin \u2014clusterrole=cluster-admin \u2014user=user1 \u2014user=user2 \u2014group=group1\x00\n\t\t # Create a RoleBinding for user1, user2, and group1 using the admin ClusterRole\n\t\t kubectl create rolebinding admin \u2014clusterrole=admin \u2014user=user1 \u2014user=user2 \u2014group=group1\x00\n\t\t # Create a new configmap named my-config based on folder bar\n\t\t kubectl create configmap my-config \u2014from-file=path/to/bar\n\n\t\t # Create a new configmap named my-config with specified keys instead of file basenames on disk\n\t\t kubectl create configmap my-config \u2014from-file=key1=/path/to/bar/file1.txt \u2014from-file=key2=/path/to/bar/file2.txt\n\n\t\t # Create a new configmap named my-config with key1=config1 and key2=config2\n\t\t kubectl create configmap my-config \u2014from-literal=key1=config1 \u2014from-literal=key2=config2\x00\n\t\t # If you don\u2019t already have a .dockercfg file, you can create a dockercfg secret directly by using:\n\t\t kubectl create secret docker-registry my-secret \u2014docker-server=DOCKER_REGISTRY_SERVER \u2014docker-username=DOCKER_USER \u2014docker-password=DOCKER_PASSWORD \u2014docker-email=DOCKER_EMAIL\x00\n\t\t # Show metrics for all nodes\n\t\t kubectl top node\n\n\t\t # Show metrics for a given node\n\t\t kubectl top node NODE_NAME\x00\n\t\t# Apply the configuration in pod.json to a pod.\n\t\tkubectl apply -f ./pod.json\n\n\t\t# Apply the JSON passed into stdin to a pod.\n\t\tcat pod.json | kubectl apply -f -\n\n\t\t# Note: \u2014prune is still in Alpha\n\t\t# Apply the configuration in manifest.yaml that matches label app=nginx and delete all the other resources that are not in the file and match label app=nginx.\n\t\tkubectl apply \u2014prune -f manifest.yaml -l app=nginx\n\n\t\t# Apply the configuration in manifest.yaml and delete all the other configmaps that are not in the file.\n\t\tkubectl apply \u2014prune -f manifest.yaml \u2014all \u2014prune-whitelist=core/v1/ConfigMap\x00\n\t\t# Auto scale a deployment \u201cfoo\u201d, with the number of pods between 2 and 10, no target CPU utilization specified so a default autoscaling policy will be used:\n\t\tkubectl autoscale deployment foo \u2014min=2 \u2014max=10\n\n\t\t# Auto scale a replication controller \u201cfoo\u201d, with the number of pods between 1 and 5, target CPU utilization at 80%:\n\t\tkubectl autoscale rc foo \u2014max=5 \u2014cpu-percent=80\x00\n\t\t# Convert \u2018pod.yaml\u2019 to latest version and print to stdout.\n\t\tkubectl convert -f pod.yaml\n\n\t\t# Convert the live state of the resource specified by \u2018pod.yaml\u2019 to the latest version\n\t\t# and print to stdout in json format.\n\t\tkubectl convert -f pod.yaml \u2014local -o json\n\n\t\t# Convert all files under current directory to latest version and create them all.\n\t\tkubectl convert -f . | kubectl create -f -\x00\n\t\t# Create a ClusterRole named \u201cpod-reader\u201d that allows user to perform \u201cget\u201d, \u201cwatch\u201d and \u201clist\u201d on pods\n\t\tkubectl create clusterrole pod-reader \u2014verb=get,list,watch \u2014resource=pods\n\n\t\t# Create a ClusterRole named \u201cpod-reader\u201d with ResourceName specified\n\t\tkubectl create clusterrole pod-reader \u2014verb=get,list,watch \u2014resource=pods \u2014resource-name=readablepod\x00\n\t\t# Create a Role named \u201cpod-reader\u201d that allows user to perform \u201cget\u201d, \u201cwatch\u201d and \u201clist\u201d on pods\n\t\tkubectl create role pod-reader \u2014verb=get \u2014verb=list \u2014verb=watch \u2014resource=pods\n\n\t\t# Create a Role named \u201cpod-reader\u201d with ResourceName specified\n\t\tkubectl create role pod-reader \u2014verb=get \u2014verg=list \u2014verb=watch \u2014resource=pods \u2014resource-name=readablepod\x00\n\t\t# Create a new resourcequota named my-quota\n\t\tkubectl create quota my-quota \u2014hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10\n\n\t\t# Create a new resourcequota named best-effort\n\t\tkubectl create quota best-effort \u2014hard=pods=100 \u2014scopes=BestEffort\x00\n\t\t# Create a pod disruption budget named my-pdb that will select all pods with the app=rails label\n\t\t# and require at least one of them being available at any point in time.\n\t\tkubectl create poddisruptionbudget my-pdb \u2014selector=app=rails \u2014min-available=1\n\n\t\t# Create a pod disruption budget named my-pdb that will select all pods with the app=nginx label\n\t\t# and require at least half of the pods selected to be available at any point in time.\n\t\tkubectl create pdb my-pdb \u2014selector=app=nginx \u2014min-available=50%\x00\n\t\t# Create a pod using the data in pod.json.\n\t\tkubectl create -f ./pod.json\n\n\t\t# Create a pod based on the JSON passed into stdin.\n\t\tcat pod.json | kubectl create -f -\n\n\t\t# Edit the data in docker-registry.yaml in JSON using the v1 API format then create the resource using the edited data.\n\t\tkubectl create -f docker-registry.yaml \u2014edit \u2014output-version=v1 -o json\x00\n\t\t# Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose rc nginx --port=80 --target-port=8000\n\n\t\t# Create a service for a replication controller identified by type and name specified in \"nginx-controller.yaml\", which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose -f nginx-controller.yaml --port=80 --target-port=8000\n\n\t\t# Create a service for a pod valid-pod, which serves on port 444 with the name \"frontend\"\n\t\tkubectl expose pod valid-pod \u2014port=444 \u2014name=frontend\n\n\t\t# Create a second service based on the above service, exposing the container port 8443 as port 443 with the name \u201cnginx-https\u201d\n\t\tkubectl expose service nginx \u2014port=443 \u2014target-port=8443 \u2014name=nginx-https\n\n\t\t# Create a service for a replicated streaming application on port 4100 balancing UDP traffic and named \u2018video-stream\u2019.\n\t\tkubectl expose rc streamer \u2014port=4100 \u2014protocol=udp \u2014name=video-stream\n\n\t\t# Create a service for a replicated nginx using replica set, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose rs nginx \u2014port=80 \u2014target-port=8000\n\n\t\t# Create a service for an nginx deployment, which serves on port 80 and connects to the containers on port 8000.\n\t\tkubectl expose deployment nginx \u2014port=80 \u2014target-port=8000\x00\n\t\t# Delete a pod using the type and name specified in pod.json.\n\t\tkubectl delete -f ./pod.json\n\n\t\t# Delete a pod based on the type and name in the JSON passed into stdin.\n\t\tcat pod.json | kubectl delete -f -\n\n\t\t# Delete pods and services with same names \u201cbaz\u201d and \u201cfoo\u201d\n\t\tkubectl delete pod,service baz foo\n\n\t\t# Delete pods and services with label name=myLabel.\n\t\tkubectl delete pods,services -l name=myLabel\n\n\t\t# Delete a pod with minimal delay\n\t\tkubectl delete pod foo \u2014now\n\n\t\t# Force delete a pod on a dead node\n\t\tkubectl delete pod foo \u2014grace-period=0 \u2014force\n\n\t\t# Delete all pods\n\t\tkubectl delete pods \u2014all\x00\n\t\t# Describe a node\n\t\tkubectl describe nodes kubernetes-node-emt8.c.myproject.internal\n\n\t\t# Describe a pod\n\t\tkubectl describe pods/nginx\n\n\t\t# Describe a pod identified by type and name in \u201cpod.json\u201d\n\t\tkubectl describe -f pod.json\n\n\t\t# Describe all pods\n\t\tkubectl describe pods\n\n\t\t# Describe pods by label name=myLabel\n\t\tkubectl describe po -l name=myLabel\n\n\t\t# Describe all pods managed by the \u2018frontend\u2019 replication controller (rc-created pods\n\t\t# get the name of the rc as a prefix in the pod the name).\n\t\tkubectl describe pods frontend\x00\n\t\t# Drain node \u201cfoo\u201d, even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it.\n\t\t$ kubectl drain foo \u2014force\n\n\t\t# As above, but abort if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet, and use a grace period of 15 minutes.\n\t\t$ kubectl drain foo \u2014grace-period=900\x00\n\t\t# Edit the service named \u2018docker-registry\u2019:\n\t\tkubectl edit svc/docker-registry\n\n\t\t# Use an alternative editor\n\t\tKUBE_EDITOR=\u201cnano\u201d kubectl edit svc/docker-registry\n\n\t\t# Edit the job \u2018myjob\u2019 in JSON using the v1 API format:\n\t\tkubectl edit job.v1.batch/myjob -o json\n\n\t\t# Edit the deployment \u2018mydeployment\u2019 in YAML and save the modified config in its annotation:\n\t\tkubectl edit deployment/mydeployment -o yaml \u2014save-config\x00\n\t\t# Get output from running \u2018date\u2019 from pod 123456-7890, using the first container by default\n\t\tkubectl exec 123456-7890 date\n\n\t\t# Get output from running \u2018date\u2019 in ruby-container from pod 123456-7890\n\t\tkubectl exec 123456-7890 -c ruby-container date\n\n\t\t# Switch to raw terminal mode, sends stdin to \u2018bash\u2019 in ruby-container from pod 123456-7890\n\t\t# and sends stdout/stderr from \u2018bash\u2019 back to the client\n\t\tkubectl exec 123456-7890 -c ruby-container -i -t \u2014 bash -il\x00\n\t\t# Get output from running pod 123456-7890, using the first container by default\n\t\tkubectl attach 123456-7890\n\n\t\t# Get output from ruby-container from pod 123456-7890\n\t\tkubectl attach 123456-7890 -c ruby-container\n\n\t\t# Switch to raw terminal mode, sends stdin to \u2018bash\u2019 in ruby-container from pod 123456-7890\n\t\t# and sends stdout/stderr from \u2018bash\u2019 back to the client\n\t\tkubectl attach 123456-7890 -c ruby-container -i -t\n\n\t\t# Get output from the first pod of a ReplicaSet named nginx\n\t\tkubectl attach rs/nginx\n\t\t\x00\n\t\t# Get the documentation of the resource and its fields\n\t\tkubectl explain pods\n\n\t\t# Get the documentation of a specific field of a resource\n\t\tkubectl explain pods.spec.containers\x00\n\t\t# Install bash completion on a Mac using homebrew\n\t\tbrew install bash-completion\n\t\tprintf \"\n# Bash completion support\nsource $(brew --prefix)/etc/bash_completion\n\" >> $HOME/.bash_profile\n\t\tsource $HOME/.bash_profile\n\n\t\t# Load the kubectl completion code for bash into the current shell\n\t\tsource <(kubectl completion bash)\n\n\t\t# Write bash completion code to a file and source if from .bash_profile\n\t\tkubectl completion bash > ~/.kube/completion.bash.inc\n\t\tprintf \u201c\n# Kubectl shell completion\nsource \u2018$HOME/.kube/completion.bash.inc\u2019\n\u201c >> $HOME/.bash_profile\n\t\tsource $HOME/.bash_profile\n\n\t\t# Load the kubectl completion code for zsh[1] into the current shell\n\t\tsource <(kubectl completion zsh)\x00\n\t\t# List all pods in ps output format.\n\t\tkubectl get pods\n\n\t\t# List all pods in ps output format with more information (such as node name).\n\t\tkubectl get pods -o wide\n\n\t\t# List a single replication controller with specified NAME in ps output format.\n\t\tkubectl get replicationcontroller web\n\n\t\t# List a single pod in JSON output format.\n\t\tkubectl get -o json pod web-pod-13je7\n\n\t\t# List a pod identified by type and name specified in \u201cpod.yaml\u201d in JSON output format.\n\t\tkubectl get -f pod.yaml -o json\n\n\t\t# Return only the phase value of the specified pod.\n\t\tkubectl get -o template pod/web-pod-13je7 \u2014template={{.status.phase}}\n\n\t\t# List all replication controllers and services together in ps output format.\n\t\tkubectl get rc,services\n\n\t\t# List one or more resources by their type and names.\n\t\tkubectl get rc/web service/frontend pods/web-pod-13je7\n\n\t\t# List all resources with different types.\n\t\tkubectl get all\x00\n\t\t# Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod\n\t\tkubectl port-forward mypod 5000 6000\n\n\t\t# Listen on port 8888 locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod 8888:5000\n\n\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod :5000\n\n\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n\t\tkubectl port-forward mypod 0:5000\x00\n\t\t# Mark node \u201cfoo\u201d as schedulable.\n\t\t$ kubectl uncordon foo\x00\n\t\t# Mark node \u201cfoo\u201d as unschedulable.\n\t\tkubectl cordon foo\x00\n\t\t# Partially update a node using strategic merge patch\n\t\tkubectl patch node k8s-node-1 -p \u2018{\u201cspec\u201d:{\u201cunschedulable\u201d:true}}\u2019\n\n\t\t# Partially update a node identified by the type and name specified in \u201cnode.json\u201d using strategic merge patch\n\t\tkubectl patch -f node.json -p \u2018{\u201cspec\u201d:{\u201cunschedulable\u201d:true}}\u2019\n\n\t\t# Update a container\u2019s image; spec.containers[*].name is required because it\u2019s a merge key\n\t\tkubectl patch pod valid-pod -p \u2018{\u201cspec\u201d:{\u201ccontainers\u201d:[{\u201cname\u201d:\u201dkubernetes-serve-hostname\u201d,\u201dimage\u201d:\u201dnew image\u201d}]}}\u2019\n\n\t\t# Update a container\u2019s image using a json patch with positional arrays\n\t\tkubectl patch pod valid-pod \u2014type=\u2018json\u2019 -p=\u2018[{\u201cop\u201d: \u201creplace\u201d, \u201cpath\u201d: \u201c/spec/containers/0/image\u201d, \u201cvalue\u201d:\u201dnew image\u201d}]\u2019\x00\n\t\t# Print flags inherited by all commands\n\t\tkubectl options\x00\n\t\t# Print the address of the master and cluster services\n\t\tkubectl cluster-info\x00\n\t\t# Print the client and server versions for the current context\n\t\tkubectl version\x00\n\t\t# Print the supported API versions\n\t\tkubectl api-versions\x00\n\t\t# Replace a pod using the data in pod.json.\n\t\tkubectl replace -f ./pod.json\n\n\t\t# Replace a pod based on the JSON passed into stdin.\n\t\tcat pod.json | kubectl replace -f -\n\n\t\t# Update a single-container pod\u2019s image version (tag) to v4\n\t\tkubectl get pod mypod -o yaml | sed \u2019s/\\(image: myimage\\):.*$/\x01:v4/\u2018 | kubectl replace -f -\n\n\t\t# Force replace, delete and then re-create the resource\n\t\tkubectl replace \u2014force -f ./pod.json\x00\n\t\t# Return snapshot logs from pod nginx with only one container\n\t\tkubectl logs nginx\n\n\t\t# Return snapshot logs for the pods defined by label app=nginx\n\t\tkubectl logs -lapp=nginx\n\n\t\t# Return snapshot of previous terminated ruby container logs from pod web-1\n\t\tkubectl logs -p -c ruby web-1\n\n\t\t# Begin streaming the logs of the ruby container in pod web-1\n\t\tkubectl logs -f -c ruby web-1\n\n\t\t# Display only the most recent 20 lines of output in pod nginx\n\t\tkubectl logs \u2014tail=20 nginx\n\n\t\t# Show all logs from pod nginx written in the last hour\n\t\tkubectl logs \u2014since=1h nginx\n\n\t\t# Return snapshot logs from first container of a job named hello\n\t\tkubectl logs job/hello\n\n\t\t# Return snapshot logs from container nginx-1 of a deployment named nginx\n\t\tkubectl logs deployment/nginx -c nginx-1\x00\n\t\t# Run a proxy to kubernetes apiserver on port 8011, serving static content from ./local/www/\n\t\tkubectl proxy \u2014port=8011 \u2014www=./local/www/\n\n\t\t# Run a proxy to kubernetes apiserver on an arbitrary local port.\n\t\t# The chosen port for the server will be output to stdout.\n\t\tkubectl proxy \u2014port=0\n\n\t\t# Run a proxy to kubernetes apiserver, changing the api prefix to k8s-api\n\t\t# This makes e.g. the pods api available at localhost:8001/k8s-api/v1/pods/\n\t\tkubectl proxy \u2014api-prefix=/k8s-api\x00\n\t\t# Scale a replicaset named \u2018foo\u2019 to 3.\n\t\tkubectl scale \u2014replicas=3 rs/foo\n\n\t\t# Scale a resource identified by type and name specified in \u201cfoo.yaml\u201d to 3.\n\t\tkubectl scale \u2014replicas=3 -f foo.yaml\n\n\t\t# If the deployment named mysql\u2019s current size is 2, scale mysql to 3.\n\t\tkubectl scale \u2014current-replicas=2 \u2014replicas=3 deployment/mysql\n\n\t\t# Scale multiple replication controllers.\n\t\tkubectl scale \u2014replicas=5 rc/foo rc/bar rc/baz\n\n\t\t# Scale job named \u2018cron\u2019 to 3.\n\t\tkubectl scale \u2014replicas=3 job/cron\x00\n\t\t# Set the last-applied-configuration of a resource to match the contents of a file.\n\t\tkubectl apply set-last-applied -f deploy.yaml\n\n\t\t# Execute set-last-applied against each configuration file in a directory.\n\t\tkubectl apply set-last-applied -f path/\n\n\t\t# Set the last-applied-configuration of a resource to match the contents of a file, will create the annotation if it does not already exist.\n\t\tkubectl apply set-last-applied -f deploy.yaml \u2014create-annotation=true\n\t\t\x00\n\t\t# Show metrics for all pods in the default namespace\n\t\tkubectl top pod\n\n\t\t# Show metrics for all pods in the given namespace\n\t\tkubectl top pod \u2014namespace=NAMESPACE\n\n\t\t# Show metrics for a given pod and its containers\n\t\tkubectl top pod POD_NAME \u2014containers\n\n\t\t# Show metrics for the pods defined by label name=myLabel\n\t\tkubectl top pod -l name=myLabel\x00\n\t\t# Shut down foo.\n\t\tkubectl stop replicationcontroller foo\n\n\t\t# Stop pods and services with label name=myLabel.\n\t\tkubectl stop pods,services -l name=myLabel\n\n\t\t# Shut down the service defined in service.json\n\t\tkubectl stop -f service.json\n\n\t\t# Shut down all resources in the path/to/resources directory\n\t\tkubectl stop -f path/to/resources\x00\n\t\t# Start a single instance of nginx.\n\t\tkubectl run nginx --image=nginx\n\n\t\t# Start a single instance of hazelcast and let the container expose port 5701 .\n\t\tkubectl run hazelcast --image=hazelcast --port=5701\n\n\t\t# Start a single instance of hazelcast and set environment variables \"DNS_DOMAIN=cluster\" and \"POD_NAMESPACE=default\" in the container.\n\t\tkubectl run hazelcast --image=hazelcast --env=\"DNS_DOMAIN=cluster\" --env=\"POD_NAMESPACE=default\"\n\n\t\t# Start a replicated instance of nginx.\n\t\tkubectl run nginx --image=nginx --replicas=5\n\n\t\t# Dry run. Print the corresponding API objects without creating them.\n\t\tkubectl run nginx --image=nginx --dry-run\n\n\t\t# Start a single instance of nginx, but overload the spec of the deployment with a partial set of values parsed from JSON.\n\t\tkubectl run nginx --image=nginx --overrides='{ \"apiVersion\": \"v1\", \"spec\": { ... } }'\n\n\t\t# Start a pod of busybox and keep it in the foreground, don't restart it if it exits.\n\t\tkubectl run -i -t busybox \u2014image=busybox \u2014restart=Never\n\n\t\t# Start the nginx container using the default command, but use custom arguments (arg1 .. argN) for that command.\n\t\tkubectl run nginx \u2014image=nginx \u2014 \u2026 \n\n\t\t# Start the nginx container using a different command and custom arguments.\n\t\tkubectl run nginx \u2014image=nginx \u2014command \u2014 \u2026 \n\n\t\t# Start the perl container to compute \u03c0 to 2000 places and print it out.\n\t\tkubectl run pi \u2014image=perl \u2014restart=OnFailure \u2014 perl -Mbignum=bpi -wle \u2018print bpi(2000)\u2019\n\n\t\t# Start the cron job to compute \u03c0 to 2000 places and print it out every 5 minutes.\n\t\tkubectl run pi \u2014schedule=\u201c0/5 * * * ?\u201d \u2014image=perl \u2014restart=OnFailure \u2014 perl -Mbignum=bpi -wle \u2018print bpi(2000)\u2019\x00\n\t\t# Update node \u2018foo\u2019 with a taint with key \u2018dedicated\u2019 and value \u2018special-user\u2019 and effect \u2018NoSchedule\u2019.\n\t\t# If a taint with that key and effect already exists, its value is replaced as specified.\n\t\tkubectl taint nodes foo dedicated=special-user:NoSchedule\n\n\t\t# Remove from node \u2018foo\u2019 the taint with key \u2018dedicated\u2019 and effect \u2018NoSchedule\u2019 if one exists.\n\t\tkubectl taint nodes foo dedicated:NoSchedule-\n\n\t\t# Remove from node \u2018foo\u2019 all the taints with key \u2018dedicated\u2019\n\t\tkubectl taint nodes foo dedicated-\x00\n\t\t# Update pod \u2018foo\u2019 with the label \u2018unhealthy\u2019 and the value \u2018true\u2019.\n\t\tkubectl label pods foo unhealthy=true\n\n\t\t# Update pod \u2018foo\u2019 with the label \u2018status\u2019 and the value \u2018unhealthy\u2019, overwriting any existing value.\n\t\tkubectl label \u2014overwrite pods foo status=unhealthy\n\n\t\t# Update all pods in the namespace\n\t\tkubectl label pods \u2014all status=unhealthy\n\n\t\t# Update a pod identified by the type and name in \u201cpod.json\u201d\n\t\tkubectl label -f pod.json status=unhealthy\n\n\t\t# Update pod \u2018foo\u2019 only if the resource is unchanged from version 1.\n\t\tkubectl label pods foo status=unhealthy \u2014resource-version=1\n\n\t\t# Update pod \u2018foo\u2019 by removing a label named \u2018bar\u2019 if it exists.\n\t\t# Does not require the \u2014overwrite flag.\n\t\tkubectl label pods foo bar-\x00\n\t\t# Update pods of frontend-v1 using new replication controller data in frontend-v2.json.\n\t\tkubectl rolling-update frontend-v1 -f frontend-v2.json\n\n\t\t# Update pods of frontend-v1 using JSON data passed into stdin.\n\t\tcat frontend-v2.json | kubectl rolling-update frontend-v1 -f -\n\n\t\t# Update the pods of frontend-v1 to frontend-v2 by just changing the image, and switching the\n\t\t# name of the replication controller.\n\t\tkubectl rolling-update frontend-v1 frontend-v2 \u2014image=image:v2\n\n\t\t# Update the pods of frontend by just changing the image, and keeping the old name.\n\t\tkubectl rolling-update frontend \u2014image=image:v2\n\n\t\t# Abort and reverse an existing rollout in progress (from frontend-v1 to frontend-v2).\n\t\tkubectl rolling-update frontend-v1 frontend-v2 \u2014rollback\x00\n\t\t# View the last-applied-configuration annotations by type/name in YAML.\n\t\tkubectl apply view-last-applied deployment/nginx\n\n\t\t# View the last-applied-configuration annotations by file in JSON\n\t\tkubectl apply view-last-applied -f deploy.yaml -o json\x00\n\t\tApply a configuration to a resource by filename or stdin.\n\t\tThis resource will be created if it doesn\u2019t exist yet.\n\t\tTo use \u2018apply\u2019, always create the resource initially with either \u2018apply\u2019 or \u2018create \u2014save-config\u2019.\n\n\t\tJSON and YAML formats are accepted.\n\n\t\tAlpha Disclaimer: the \u2014prune functionality is not yet complete. Do not use unless you are aware of what the current state is. See https://issues.k8s.io/34274.\x00\n\t\tConvert config files between different API versions. Both YAML\n\t\tand JSON formats are accepted.\n\n\t\tThe command takes filename, directory, or URL as input, and convert it into format\n\t\tof version specified by \u2014output-version flag. If target version is not specified or\n\t\tnot supported, convert to latest version.\n\n\t\tThe default output will be printed to stdout in YAML format. One can use -o option\n\t\tto change to output destination.\x00\n\t\tCreate a ClusterRole.\x00\n\t\tCreate a ClusterRoleBinding for a particular ClusterRole.\x00\n\t\tCreate a RoleBinding for a particular Role or ClusterRole.\x00\n\t\tCreate a TLS secret from the given public/private key pair.\n\n\t\tThe public/private key pair must exist before hand. The public key certificate must be .PEM encoded and match the given private key.\x00\n\t\tCreate a configmap based on a file, directory, or specified literal value.\n\n\t\tA single configmap may package one or more key/value pairs.\n\n\t\tWhen creating a configmap based on a file, the key will default to the basename of the file, and the value will\n\t\tdefault to the file content. If the basename is an invalid key, you may specify an alternate key.\n\n\t\tWhen creating a configmap based on a directory, each file whose basename is a valid key in the directory will be\n\t\tpackaged into the configmap. Any directory entries except regular files are ignored (e.g. subdirectories,\n\t\tsymlinks, devices, pipes, etc).\x00\n\t\tCreate a namespace with the specified name.\x00\n\t\tCreate a new secret for use with Docker registries.\n\n\t\tDockercfg secrets are used to authenticate against Docker registries.\n\n\t\tWhen using the Docker command line to push images, you can authenticate to a given registry by running\n\n\t\t $ docker login DOCKER_REGISTRY_SERVER \u2014username=DOCKER_USER \u2014password=DOCKER_PASSWORD \u2014email=DOCKER_EMAIL\u2019.\n\n That produces a ~/.dockercfg file that is used by subsequent \u2018docker push\u2019 and \u2018docker pull\u2019 commands to\n\t\tauthenticate to the registry. The email address is optional.\n\n\t\tWhen creating applications, you may have a Docker registry that requires authentication. In order for the\n\t\tnodes to pull images on your behalf, they have to have the credentials. You can provide this information\n\t\tby creating a dockercfg secret and attaching it to your service account.\x00\n\t\tCreate a pod disruption budget with the specified name, selector, and desired minimum available pods\x00\n\t\tCreate a resource by filename or stdin.\n\n\t\tJSON and YAML formats are accepted.\x00\n\t\tCreate a resourcequota with the specified name, hard limits and optional scopes\x00\n\t\tCreate a role with single rule.\x00\n\t\tCreate a secret based on a file, directory, or specified literal value.\n\n\t\tA single secret may package one or more key/value pairs.\n\n\t\tWhen creating a secret based on a file, the key will default to the basename of the file, and the value will\n\t\tdefault to the file content. If the basename is an invalid key, you may specify an alternate key.\n\n\t\tWhen creating a secret based on a directory, each file whose basename is a valid key in the directory will be\n\t\tpackaged into the secret. Any directory entries except regular files are ignored (e.g. subdirectories,\n\t\tsymlinks, devices, pipes, etc).\x00\n\t\tCreate a service account with the specified name.\x00\n\t\tCreate and run a particular image, possibly replicated.\n\n\t\tCreates a deployment or job to manage the created container(s).\x00\n\t\tCreates an autoscaler that automatically chooses and sets the number of pods that run in a kubernetes cluster.\n\n\t\tLooks up a Deployment, ReplicaSet, or ReplicationController by name and creates an autoscaler that uses the given resource as a reference.\n\t\tAn autoscaler can automatically increase or decrease number of pods deployed within the system as needed.\x00\n\t\tDelete resources by filenames, stdin, resources and names, or by resources and label selector.\n\n\t\tJSON and YAML formats are accepted. Only one type of the arguments may be specified: filenames,\n\t\tresources and names, or resources and label selector.\n\n\t\tSome resources, such as pods, support graceful deletion. These resources define a default period\n\t\tbefore they are forcibly terminated (the grace period) but you may override that value with\n\t\tthe --grace-period flag, or pass --now to set a grace-period of 1. Because these resources often\n\t\trepresent entities in the cluster, deletion may not be acknowledged immediately. If the node\n\t\thosting a pod is down or cannot reach the API server, termination may take significantly longer\n\t\tthan the grace period. To force delete a resource,\tyou must pass a grace\tperiod of 0 and specify\n\t\tthe --force flag.\n\n\t\tIMPORTANT: Force deleting pods does not wait for confirmation that the pod\u2019s processes have been\n\t\tterminated, which can leave those processes running until the node detects the deletion and\n\t\tcompletes graceful deletion. If your processes use shared storage or talk to a remote API and\n\t\tdepend on the name of the pod to identify themselves, force deleting those pods may result in\n\t\tmultiple processes running on different machines using the same identification which may lead\n\t\tto data corruption or inconsistency. Only force delete pods when you are sure the pod is\n\t\tterminated, or if your application can tolerate multiple copies of the same pod running at once.\n\t\tAlso, if you force delete pods the scheduler may place new pods on those nodes before the node\n\t\thas released those resources and causing those pods to be evicted immediately.\n\n\t\tNote that the delete command does NOT do resource version checks, so if someone\n\t\tsubmits an update to a resource right when you submit a delete, their update\n\t\twill be lost along with the rest of the resource.\x00\n\t\tDeprecated: Gracefully shut down a resource by name or filename.\n\n\t\tThe stop command is deprecated, all its functionalities are covered by delete command.\n\t\tSee \u2018kubectl delete \u2014help\u2019 for more details.\n\n\t\tAttempts to shut down and delete a resource that supports graceful termination.\n\t\tIf the resource is scalable it will be scaled to 0 before deletion.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage of nodes.\n\n\t\tThe top-node command allows you to see the resource consumption of nodes.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage of pods.\n\n\t\tThe \u2018top pod\u2019 command allows you to see the resource consumption of pods.\n\n\t\tDue to the metrics pipeline delay, they may be unavailable for a few minutes\n\t\tsince pod creation.\x00\n\t\tDisplay Resource (CPU/Memory/Storage) usage.\n\n\t\tThe top command allows you to see the resource consumption for nodes or pods.\n\n\t\tThis command requires Heapster to be correctly configured and working on the server. \x00\n\t\tDrain node in preparation for maintenance.\n\n\t\tThe given node will be marked unschedulable to prevent new pods from arriving.\n\t\t'drain' evicts the pods if the APIServer supports eviction\n\t\t(http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE\n\t\tto delete the pods.\n\t\tThe 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through\n\t\tthe API server). If there are DaemonSet-managed pods, drain will not proceed\n\t\twithout --ignore-daemonsets, and regardless it will not delete any\n\t\tDaemonSet-managed pods, because those pods would be immediately replaced by the\n\t\tDaemonSet controller, which ignores unschedulable markings. If there are any\n\t\tpods that are neither mirror pods nor managed by ReplicationController,\n\t\tReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete any pods unless you\n\t\tuse \u2014force. \u2014force will also allow deletion to proceed if the managing resource of one\n\t\tor more pods is missing.\n\n\t\t\u2019drain\u2019 waits for graceful termination. You should not operate on the machine until\n\t\tthe command completes.\n\n\t\tWhen you are ready to put the node back into service, use kubectl uncordon, which\n\t\twill make the node schedulable again.\n\n\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_drain.svg)\x00\n\t\tEdit a resource from the default editor.\n\n\t\tThe edit command allows you to directly edit any API resource you can retrieve via the\n\t\tcommand line tools. It will open the editor defined by your KUBE_EDITOR, or EDITOR\n\t\tenvironment variables, or fall back to 'vi' for Linux or 'notepad' for Windows.\n\t\tYou can edit multiple objects, although changes are applied one at a time. The command\n\t\taccepts filenames as well as command line arguments, although the files you point to must\n\t\tbe previously saved versions of resources.\n\n\t\tEditing is done with the API version used to fetch the resource.\n\t\tTo edit using a specific API version, fully-qualify the resource, version, and group.\n\n\t\tThe default format is YAML. To edit in JSON, specify \u201c-o json\u201d.\n\n\t\tThe flag \u2014windows-line-endings can be used to force Windows line endings,\n\t\totherwise the default for your operating system will be used.\n\n\t\tIn the event an error occurs while updating, a temporary file will be created on disk\n\t\tthat contains your unapplied changes. The most common error when updating a resource\n\t\tis another editor changing the resource on the server. When this occurs, you will have\n\t\tto apply your changes to the newer version of the resource, or update your temporary\n\t\tsaved copy to include the latest resource version.\x00\n\t\tMark node as schedulable.\x00\n\t\tMark node as unschedulable.\x00\n\t\tOutput shell completion code for the specified shell (bash or zsh).\n\t\tThe shell code must be evaluated to provide interactive\n\t\tcompletion of kubectl commands. This can be done by sourcing it from\n\t\tthe .bash_profile.\n\n\t\tNote: this requires the bash-completion framework, which is not installed\n\t\tby default on Mac. This can be installed by using homebrew:\n\n\t\t $ brew install bash-completion\n\n\t\tOnce installed, bash_completion must be evaluated. This can be done by adding the\n\t\tfollowing line to the .bash_profile\n\n\t\t $ source $(brew \u2014prefix)/etc/bash_completion\n\n\t\tNote for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2\x00\n\t\tPerform a rolling update of the given ReplicationController.\n\n\t\tReplaces the specified replication controller with a new replication controller by updating one pod at a time to use the\n\t\tnew PodTemplate. The new-controller.json must specify the same namespace as the\n\t\texisting replication controller and overwrite at least one (common) label in its replicaSelector.\n\n\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_rollingupdate.svg)\x00\n\t\tReplace a resource by filename or stdin.\n\n\t\tJSON and YAML formats are accepted. If replacing an existing resource, the\n\t\tcomplete resource spec must be provided. This can be obtained by\n\n\t\t $ kubectl get TYPE NAME -o yaml\n\n\t\tPlease refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.\x00\n\t\tSet a new size for a Deployment, ReplicaSet, Replication Controller, or Job.\n\n\t\tScale also allows users to specify one or more preconditions for the scale action.\n\n\t\tIf \u2014current-replicas or \u2014resource-version is specified, it is validated before the\n\t\tscale is attempted, and it is guaranteed that the precondition holds true when the\n\t\tscale is sent to the server.\x00\n\t\tSet the latest last-applied-configuration annotations by setting it to match the contents of a file.\n\t\tThis results in the last-applied-configuration being updated as though \u2018kubectl apply -f \u2019 was run,\n\t\twithout updating any other parts of the object.\x00\n\t\tTo proxy all of the kubernetes api and nothing else, use:\n\n\t\t $ kubectl proxy \u2014api-prefix=/\n\n\t\tTo proxy only part of the kubernetes api and also some static files:\n\n\t\t $ kubectl proxy \u2014www=/my/files \u2014www-prefix=/static/ \u2014api-prefix=/api/\n\n\t\tThe above lets you \u2018curl localhost:8001/api/v1/pods\u2019.\n\n\t\tTo proxy the entire kubernetes api at a different root, use:\n\n\t\t $ kubectl proxy \u2014api-prefix=/custom/\n\n\t\tThe above lets you \u2018curl localhost:8001/custom/api/v1/pods\u2019\x00\n\t\tUpdate field(s) of a resource using strategic merge patch\n\n\t\tJSON and YAML formats are accepted.\n\n\t\tPlease refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.\x00\n\t\tUpdate the labels on a resource.\n\n\t\t* A label must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[1]d characters.\n\t\t* If \u2014overwrite is true, then existing labels can be overwritten, otherwise attempting to overwrite a label will result in an error.\n\t\t* If \u2014resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used.\x00\n\t\tUpdate the taints on one or more nodes.\n\n\t\t* A taint consists of a key, value, and effect. As an argument here, it is expressed as key=value:effect.\n\t\t* The key must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[1]d characters.\n\t\t* The value must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to %[2]d characters.\n\t\t* The effect must be NoSchedule, PreferNoSchedule or NoExecute.\n\t\t* Currently taint can only apply to node.\x00\n\t\tView the latest last-applied-configuration annotations by type/name or file.\n\n\t\tThe default output will be printed to stdout in YAML format. One can use -o option\n\t\tto change output format.\x00\n\t # !!!Important Note!!!\n\t # Requires that the \u2018tar\u2019 binary is present in your container\n\t # image. If \u2018tar\u2019 is not present, \u2018kubectl cp\u2019 will fail.\n\n\t # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace\n\t\tkubectl cp /tmp/foo_dir :/tmp/bar_dir\n\n # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container\n\t\tkubectl cp /tmp/foo :/tmp/bar -c \n\n\t\t# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace \n\t\tkubectl cp /tmp/foo /:/tmp/bar\n\n\t\t# Copy /tmp/foo from a remote pod to /tmp/bar locally\n\t\tkubectl cp /:/tmp/foo /tmp/bar\x00\n\t # Create a new TLS secret named tls-secret with the given key pair:\n\t kubectl create secret tls tls-secret \u2014cert=path/to/tls.cert \u2014key=path/to/tls.key\x00\n\t # Create a new namespace named my-namespace\n\t kubectl create namespace my-namespace\x00\n\t # Create a new secret named my-secret with keys for each file in folder bar\n\t kubectl create secret generic my-secret \u2014from-file=path/to/bar\n\n\t # Create a new secret named my-secret with specified keys instead of names on disk\n\t kubectl create secret generic my-secret \u2014from-file=ssh-privatekey=~/.ssh/id_rsa \u2014from-file=ssh-publickey=~/.ssh/id_rsa.pub\n\n\t # Create a new secret named my-secret with key1=supersecret and key2=topsecret\n\t kubectl create secret generic my-secret \u2014from-literal=key1=supersecret \u2014from-literal=key2=topsecret\x00\n\t # Create a new service account named my-service-account\n\t kubectl create serviceaccount my-service-account\x00\n\t# Create a new ExternalName service named my-ns \n\tkubectl create service externalname my-ns \u2014external-name bar.com\x00\n\tCreate an ExternalName service with the specified name.\n\n\tExternalName service references to an external DNS address instead of\n\tonly pods, which will allow application authors to reference services\n\tthat exist off platform, on other clusters, or locally.\x00\n\tHelp provides help for any command in the application.\n\tSimply type kubectl help [path to command] for full details.\x00\n # Create a new LoadBalancer service named my-lbs\n kubectl create service loadbalancer my-lbs \u2014tcp=5678:8080\x00\n # Create a new clusterIP service named my-cs\n kubectl create service clusterip my-cs \u2014tcp=5678:8080\n\n # Create a new clusterIP service named my-cs (in headless mode)\n kubectl create service clusterip my-cs \u2014clusterip=\u201cNone\u201d\x00\n # Create a new deployment named my-dep that runs the busybox image.\n kubectl create deployment my-dep \u2014image=busybox\x00\n # Create a new nodeport service named my-ns\n kubectl create service nodeport my-ns \u2014tcp=5678:8080\x00\n # Dump current cluster state to stdout\n kubectl cluster-info dump\n\n # Dump current cluster state to /path/to/cluster-state\n kubectl cluster-info dump \u2014output-directory=/path/to/cluster-state\n\n # Dump all namespaces to stdout\n kubectl cluster-info dump \u2014all-namespaces\n\n # Dump a set of namespaces to /path/to/cluster-state\n kubectl cluster-info dump \u2014namespaces default,kube-system \u2014output-directory=/path/to/cluster-state\x00\n # Update pod 'foo' with the annotation 'description' and the value 'my frontend'.\n # If the same annotation is set multiple times, only the last value will be applied\n kubectl annotate pods foo description='my frontend'\n\n # Update a pod identified by type and name in \"pod.json\"\n kubectl annotate -f pod.json description=\u2018my frontend\u2019\n\n # Update pod \u2018foo\u2019 with the annotation \u2018description\u2019 and the value \u2018my frontend running nginx\u2019, overwriting any existing value.\n kubectl annotate \u2014overwrite pods foo description=\u2018my frontend running nginx\u2019\n\n # Update all pods in the namespace\n kubectl annotate pods \u2014all description=\u2018my frontend running nginx\u2019\n\n # Update pod \u2018foo\u2019 only if the resource is unchanged from version 1.\n kubectl annotate pods foo description=\u2018my frontend running nginx\u2019 \u2014resource-version=1\n\n # Update pod \u2018foo\u2019 by removing an annotation named \u2018description\u2019 if it exists.\n # Does not require the \u2014overwrite flag.\n kubectl annotate pods foo description-\x00\n Create a LoadBalancer service with the specified name.\x00\n Create a clusterIP service with the specified name.\x00\n Create a deployment with the specified name.\x00\n Create a nodeport service with the specified name.\x00\n Dumps cluster info out suitable for debugging and diagnosing cluster problems. By default, dumps everything to\n stdout. You can optionally specify a directory with \u2014output-directory. If you specify a directory, kubernetes will\n build a set of files in that directory. By default only dumps things in the \u2018kube-system\u2019 namespace, but you can\n switch to a different namespace with the \u2014namespaces flag, or specify \u2014all-namespaces to dump all namespaces.\n\n The command also dumps the logs of all of the pods in the cluster, these logs are dumped into different directories\n based on namespace and pod name.\x00\n Display addresses of the master and services with label kubernetes.io/cluster-service=true\n To further debug and diagnose cluster problems, use \u2018kubectl cluster-info dump\u2019.\x00A comma-delimited set of quota scopes that must all match each object tracked by the quota.\x00A comma-delimited set of resource=quantity pairs that define a hard limit.\x00A label selector to use for this budget. Only equality-based selector requirements are supported.\x00A label selector to use for this service. Only equality-based selector requirements are supported. If empty (the default) infer the selector from the replication controller or replica set.)\x00A schedule in the Cron format the job should be run with.\x00Additional external IP address (not managed by Kubernetes) to accept for the service. If this IP is routed to a node, the service can be accessed by this IP in addition to its generated service IP.\x00An inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.\x00An inline JSON override for the generated service object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field. Only used if \u2014expose is true.\x00\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u307e\u305f\u306f\u6a19\u6e96\u5165\u529b\u7d4c\u7531\u3067\u30ea\u30bd\u30fc\u30b9\u306b\u30b3\u30f3\u30d5\u30a3\u30b0\u3092\u9069\u7528\u3059\u308b\x00Approve a certificate signing request\x00Assign your own ClusterIP or set to \u2018None\u2019 for a \u2018headless\u2019 service (no loadbalancing).\x00Attach to a running container\x00Auto-scale a Deployment, ReplicaSet, or ReplicationController\x00ClusterIP to be assigned to the service. Leave empty to auto-allocate, or set to \u2018None\u2019 to create a headless service.\x00ClusterRole this ClusterRoleBinding should reference\x00ClusterRole this RoleBinding should reference\x00Container name which will have its image upgraded. Only relevant when \u2014image is specified, ignored otherwise. Required when using \u2014image on a multi-container pod\x00Convert config files between different API versions\x00Copy files and directories to and from containers.\x00Create a ClusterRoleBinding for a particular ClusterRole\x00Create a LoadBalancer service.\x00Create a NodePort service.\x00Create a RoleBinding for a particular Role or ClusterRole\x00Create a TLS secret\x00Create a clusterIP service.\x00Create a configmap from a local file, directory or literal value\x00Create a deployment with the specified name.\x00Create a namespace with the specified name\x00Create a pod disruption budget with the specified name.\x00Create a quota with the specified name.\x00\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u307e\u305f\u306f\u6a19\u6e96\u5165\u529b\u7d4c\u7531\u3067\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b\x00Create a secret for use with a Docker registry\x00Create a secret from a local file, directory or literal value\x00Create a secret using specified subcommand\x00Create a service account with the specified name\x00Create a service using specified subcommand.\x00Create an ExternalName service.\x00Delete resources by filenames, stdin, resources and names, or by resources and label selector\x00kubeconfig\u304b\u3089\u6307\u5b9a\u3057\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u524a\u9664\u3059\u308b\x00kubeconfig\u304b\u3089\u6307\u5b9a\u3057\u305f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u524a\u9664\u3059\u308b\x00Deny a certificate signing request\x00Deprecated: Gracefully shut down a resource by name or filename\x001\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a18\u8ff0\u3059\u308b\x00Display Resource (CPU/Memory) usage of nodes\x00Display Resource (CPU/Memory) usage of pods\x00Display Resource (CPU/Memory) usage.\x00\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\x00kubeconfig\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8868\u793a\u3059\u308b\x00\u30de\u30fc\u30b8\u3055\u308c\u305fkubeconfig\u306e\u8a2d\u5b9a\u307e\u305f\u306f\u6307\u5b9a\u3055\u308c\u305fkubeconfig\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3059\u308b\x001\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u8868\u793a\u3059\u308b\x00\u30ab\u30ec\u30f3\u30c8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3059\u308b\x00\u30ea\u30bd\u30fc\u30b9\u306e\u8aac\u660e\u3092\u8868\u793a\u3059\u308b\x00Drain node in preparation for maintenance\x00Dump lots of relevant info for debugging and diagnosis\x00Edit a resource on the server\x00Email for Docker registry\x00Execute a command in a container\x00Explicit policy for when to pull container images. Required when \u2014image is same as existing image, ignored otherwise.\x00Forward one or more local ports to a pod\x00Help about any command\x00IP to assign to the Load Balancer. If empty, an ephemeral IP will be created and used (cloud-provider specific).\x00If non-empty, set the session affinity for the service to this; legal values: \u2018None\u2019, \u2018ClientIP\u2019\x00If non-empty, the annotation update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.\x00If non-empty, the labels update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.\x00Image to use for upgrading the replication controller. Must be distinct from the existing image (either new image or new image tag). Can not be used with \u2014filename/-f\x00Manage a deployment rollout\x00Mark node as schedulable\x00Mark node as unschedulable\x00Mark the provided resource as paused\x00Modify certificate resources.\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b\x00Name or number for the port on the container that the service should direct traffic to. Optional.\x00Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.\x00Output shell completion code for the specified shell (bash or zsh)\x00Output the formatted object with the given group version (for ex: \u2018extensions/v1beta1\u2019).)\x00Password for Docker registry authentication\x00Path to PEM encoded public key certificate.\x00Path to private key associated with given certificate.\x00Perform a rolling update of the given ReplicationController\x00Precondition for resource version. Requires that the current resource version match this value in order to scale.\x00Print the client and server version information\x00Print the list of flags inherited by all commands\x00Print the logs for a container in a pod\x00Replace a resource by filename or stdin\x00Resume a paused resource\x00Role this RoleBinding should reference\x00Run a particular image on the cluster\x00Run a proxy to the Kubernetes API server\x00Server location for Docker registry\x00Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job\x00Set specific features on objects\x00Set the last-applied-configuration annotation on a live object to match the contents of a file.\x00\u30ea\u30bd\u30fc\u30b9\u306e\u30bb\u30ec\u30af\u30bf\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30e6\u30fc\u30b6\u30fc\u30a8\u30f3\u30c8\u30ea\u3092\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5909\u6570\u3092\u500b\u5225\u306b\u8a2d\u5b9a\u3059\u308b\x00kubeconfig\u306b\u30ab\u30ec\u30f3\u30c8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\x00Show details of a specific resource or group of resources\x00Show the status of the rollout\x00Synonym for \u2014target-port\x00Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service\x00The image for the container to run.\x00The image pull policy for the container. If left empty, this value will not be specified by the client and defaulted by the server\x00The key to use to differentiate between two different controllers, default \u2018deployment\u2019. Only relevant when \u2014image is specified, ignored otherwise\x00The minimum number or percentage of available pods this budget requires.\x00The name for the newly created object.\x00The name for the newly created object. If not specified, the name of the input resource will be used.\x00The name of the API generator to use, see http://kubernetes.io/docs/user-guide/kubectl-conventions/#generators for a list.\x00The name of the API generator to use. Currently there is only 1 generator.\x00The name of the API generator to use. There are 2 generators: \u2018service/v1\u2019 and \u2018service/v2\u2019. The only difference between them is that service port in v1 is named \u2018default\u2019, while it is left unnamed in v2. Default is \u2018service/v2\u2019.\x00The name of the generator to use for creating a service. Only used if \u2014expose is true\x00The network protocol for the service to be created. Default is \u2018TCP\u2019.\x00The port that the service should serve on. Copied from the resource being exposed, if unspecified\x00The port that this container exposes. If \u2014expose is true, this is also the port used by the service that is created.\x00The resource requirement limits for this container. For example, \u2018cpu=200m,memory=512Mi\u2019. Note that server side components may assign limits depending on the server configuration, such as limit ranges.\x00The resource requirement requests for this container. For example, \u2018cpu=100m,memory=256Mi\u2019. Note that server side components may assign requests depending on the server configuration, such as limit ranges.\x00The restart policy for this Pod. Legal values [Always, OnFailure, Never]. If set to \u2018Always\u2019 a deployment is created, if set to \u2018OnFailure\u2019 a job is created, if set to \u2018Never\u2019, a regular pod is created. For the latter two \u2014replicas must be 1. Default \u2018Always\u2019, for CronJobs `Never`.\x00The type of secret to create\x00Type for this service: ClusterIP, NodePort, or LoadBalancer. Default is \u2018ClusterIP\u2019.\x00\u73fe\u5728\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3092\u53d6\u308a\u6d88\u3059\x00kubeconfig\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u5909\u6570\u3092\u500b\u5225\u306b\u524a\u9664\u3059\u308b\x00Update field(s) of a resource using strategic merge patch\x00Update image of a pod template\x00Update resource requests/limits on objects with pod templates\x00\u30ea\u30bd\u30fc\u30b9\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\x00\u30ea\u30bd\u30fc\u30b9\u306e\u30e9\u30d9\u30eb\u3092\u66f4\u65b0\u3059\u308b\x00Update the taints on one or more nodes\x00Username for Docker registry authentication\x00View latest last-applied-configuration annotations of a resource/object\x00\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u5c65\u6b74\u3092\u8868\u793a\u3059\u308b\x00Where to output the files. If empty or \u2018-\u2018 uses stdout, otherwise creates a directory hierarchy in that directory\x00dummy restart flag)\x00external name of service\x00kubectl controls the Kubernetes cluster manager\x00") func translationsKubectlJa_jpLc_messagesK8sMoBytes() ([]byte, error) { return _translationsKubectlJa_jpLc_messagesK8sMo, nil @@ -13923,90 +13927,3311 @@ var _translationsKubectlJa_jpLc_messagesK8sPo = []byte(`# Test translations for msgid "" msgstr "" "Project-Id-Version: gettext-go-examples-hello\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-12 20:03+0000\n" -"PO-Revision-Date: 2017-01-29 22:54-0800\n" +"Report-Msgid-Bugs-To: EMAIL\n" +"POT-Creation-Date: 2017-03-14 21:32-0700\n" +"PO-Revision-Date: 2019-02-14 10:33+0900\n" "Last-Translator: Giri Kuncoro \n" +"Language-Team: \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 2.1.1\n" "X-Poedit-SourceCharset: UTF-8\n" -"Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: ja\n" + +#: pkg/kubectl/cmd/create_clusterrolebinding.go:35 +msgid "" +"\n" +"\t\t # Create a ClusterRoleBinding for user1, user2, and group1 using the " +"cluster-admin ClusterRole\n" +"\t\t kubectl create clusterrolebinding cluster-admin --clusterrole=cluster-" +"admin --user=user1 --user=user2 --group=group1" +msgstr "" +"\n" +"\t\t # Create a ClusterRoleBinding for user1, user2, and group1 using the " +"cluster-admin ClusterRole\n" +"\t\t kubectl create clusterrolebinding cluster-admin —clusterrole=cluster-" +"admin —user=user1 —user=user2 —group=group1" + +#: pkg/kubectl/cmd/create_rolebinding.go:35 +msgid "" +"\n" +"\t\t # Create a RoleBinding for user1, user2, and group1 using the admin " +"ClusterRole\n" +"\t\t kubectl create rolebinding admin --clusterrole=admin --user=user1 --" +"user=user2 --group=group1" +msgstr "" +"\n" +"\t\t # Create a RoleBinding for user1, user2, and group1 using the admin " +"ClusterRole\n" +"\t\t kubectl create rolebinding admin —clusterrole=admin —user=user1 —" +"user=user2 —group=group1" + +#: pkg/kubectl/cmd/create_configmap.go:44 +msgid "" +"\n" +"\t\t # Create a new configmap named my-config based on folder bar\n" +"\t\t kubectl create configmap my-config --from-file=path/to/bar\n" +"\n" +"\t\t # Create a new configmap named my-config with specified keys instead " +"of file basenames on disk\n" +"\t\t kubectl create configmap my-config --from-file=key1=/path/to/bar/file1." +"txt --from-file=key2=/path/to/bar/file2.txt\n" +"\n" +"\t\t # Create a new configmap named my-config with key1=config1 and " +"key2=config2\n" +"\t\t kubectl create configmap my-config --from-literal=key1=config1 --from-" +"literal=key2=config2" +msgstr "" +"\n" +"\t\t # Create a new configmap named my-config based on folder bar\n" +"\t\t kubectl create configmap my-config —from-file=path/to/bar\n" +"\n" +"\t\t # Create a new configmap named my-config with specified keys instead " +"of file basenames on disk\n" +"\t\t kubectl create configmap my-config —from-file=key1=/path/to/bar/file1." +"txt —from-file=key2=/path/to/bar/file2.txt\n" +"\n" +"\t\t # Create a new configmap named my-config with key1=config1 and " +"key2=config2\n" +"\t\t kubectl create configmap my-config —from-literal=key1=config1 —from-" +"literal=key2=config2" + +#: pkg/kubectl/cmd/create_secret.go:135 +msgid "" +"\n" +"\t\t # If you don't already have a .dockercfg file, you can create a " +"dockercfg secret directly by using:\n" +"\t\t kubectl create secret docker-registry my-secret --docker-" +"server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-" +"password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL" +msgstr "" +"\n" +"\t\t # If you don’t already have a .dockercfg file, you can create a " +"dockercfg secret directly by using:\n" +"\t\t kubectl create secret docker-registry my-secret —docker-" +"server=DOCKER_REGISTRY_SERVER —docker-username=DOCKER_USER —docker-" +"password=DOCKER_PASSWORD —docker-email=DOCKER_EMAIL" + +#: pkg/kubectl/cmd/top_node.go:65 +msgid "" +"\n" +"\t\t # Show metrics for all nodes\n" +"\t\t kubectl top node\n" +"\n" +"\t\t # Show metrics for a given node\n" +"\t\t kubectl top node NODE_NAME" +msgstr "" +"\n" +"\t\t # Show metrics for all nodes\n" +"\t\t kubectl top node\n" +"\n" +"\t\t # Show metrics for a given node\n" +"\t\t kubectl top node NODE_NAME" + +#: pkg/kubectl/cmd/apply.go:84 +msgid "" +"\n" +"\t\t# Apply the configuration in pod.json to a pod.\n" +"\t\tkubectl apply -f ./pod.json\n" +"\n" +"\t\t# Apply the JSON passed into stdin to a pod.\n" +"\t\tcat pod.json | kubectl apply -f -\n" +"\n" +"\t\t# Note: --prune is still in Alpha\n" +"\t\t# Apply the configuration in manifest.yaml that matches label app=nginx " +"and delete all the other resources that are not in the file and match label " +"app=nginx.\n" +"\t\tkubectl apply --prune -f manifest.yaml -l app=nginx\n" +"\n" +"\t\t# Apply the configuration in manifest.yaml and delete all the other " +"configmaps that are not in the file.\n" +"\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +"ConfigMap" +msgstr "" +"\n" +"\t\t# Apply the configuration in pod.json to a pod.\n" +"\t\tkubectl apply -f ./pod.json\n" +"\n" +"\t\t# Apply the JSON passed into stdin to a pod.\n" +"\t\tcat pod.json | kubectl apply -f -\n" +"\n" +"\t\t# Note: —prune is still in Alpha\n" +"\t\t# Apply the configuration in manifest.yaml that matches label app=nginx " +"and delete all the other resources that are not in the file and match label " +"app=nginx.\n" +"\t\tkubectl apply —prune -f manifest.yaml -l app=nginx\n" +"\n" +"\t\t# Apply the configuration in manifest.yaml and delete all the other " +"configmaps that are not in the file.\n" +"\t\tkubectl apply —prune -f manifest.yaml —all —prune-whitelist=core/v1/" +"ConfigMap" + +#: pkg/kubectl/cmd/autoscale.go:40 +#, c-format +msgid "" +"\n" +"\t\t# Auto scale a deployment \"foo\", with the number of pods between 2 and " +"10, no target CPU utilization specified so a default autoscaling policy will " +"be used:\n" +"\t\tkubectl autoscale deployment foo --min=2 --max=10\n" +"\n" +"\t\t# Auto scale a replication controller \"foo\", with the number of pods " +"between 1 and 5, target CPU utilization at 80%:\n" +"\t\tkubectl autoscale rc foo --max=5 --cpu-percent=80" +msgstr "" +"\n" +"\t\t# Auto scale a deployment “fooâ€, with the number of pods between 2 and " +"10, no target CPU utilization specified so a default autoscaling policy will " +"be used:\n" +"\t\tkubectl autoscale deployment foo —min=2 —max=10\n" +"\n" +"\t\t# Auto scale a replication controller “fooâ€, with the number of pods " +"between 1 and 5, target CPU utilization at 80%:\n" +"\t\tkubectl autoscale rc foo —max=5 —cpu-percent=80" + +#: pkg/kubectl/cmd/convert.go:49 +msgid "" +"\n" +"\t\t# Convert 'pod.yaml' to latest version and print to stdout.\n" +"\t\tkubectl convert -f pod.yaml\n" +"\n" +"\t\t# Convert the live state of the resource specified by 'pod.yaml' to the " +"latest version\n" +"\t\t# and print to stdout in json format.\n" +"\t\tkubectl convert -f pod.yaml --local -o json\n" +"\n" +"\t\t# Convert all files under current directory to latest version and create " +"them all.\n" +"\t\tkubectl convert -f . | kubectl create -f -" +msgstr "" +"\n" +"\t\t# Convert ‘pod.yaml’ to latest version and print to stdout.\n" +"\t\tkubectl convert -f pod.yaml\n" +"\n" +"\t\t# Convert the live state of the resource specified by ‘pod.yaml’ to the " +"latest version\n" +"\t\t# and print to stdout in json format.\n" +"\t\tkubectl convert -f pod.yaml —local -o json\n" +"\n" +"\t\t# Convert all files under current directory to latest version and create " +"them all.\n" +"\t\tkubectl convert -f . | kubectl create -f -" + +#: pkg/kubectl/cmd/create_clusterrole.go:34 +msgid "" +"\n" +"\t\t# Create a ClusterRole named \"pod-reader\" that allows user to perform " +"\"get\", \"watch\" and \"list\" on pods\n" +"\t\tkubectl create clusterrole pod-reader --verb=get,list,watch --" +"resource=pods\n" +"\n" +"\t\t# Create a ClusterRole named \"pod-reader\" with ResourceName specified\n" +"\t\tkubectl create clusterrole pod-reader --verb=get,list,watch --" +"resource=pods --resource-name=readablepod" +msgstr "" +"\n" +"\t\t# Create a ClusterRole named “pod-reader†that allows user to perform " +"“getâ€, “watch†and “list†on pods\n" +"\t\tkubectl create clusterrole pod-reader —verb=get,list,watch —" +"resource=pods\n" +"\n" +"\t\t# Create a ClusterRole named “pod-reader†with ResourceName specified\n" +"\t\tkubectl create clusterrole pod-reader —verb=get,list,watch —" +"resource=pods —resource-name=readablepod" + +#: pkg/kubectl/cmd/create_role.go:41 +msgid "" +"\n" +"\t\t# Create a Role named \"pod-reader\" that allows user to perform \"get" +"\", \"watch\" and \"list\" on pods\n" +"\t\tkubectl create role pod-reader --verb=get --verb=list --verb=watch --" +"resource=pods\n" +"\n" +"\t\t# Create a Role named \"pod-reader\" with ResourceName specified\n" +"\t\tkubectl create role pod-reader --verb=get --verg=list --verb=watch --" +"resource=pods --resource-name=readablepod" +msgstr "" +"\n" +"\t\t# Create a Role named “pod-reader†that allows user to perform “getâ€, " +"“watch†and “list†on pods\n" +"\t\tkubectl create role pod-reader —verb=get —verb=list —verb=watch —" +"resource=pods\n" +"\n" +"\t\t# Create a Role named “pod-reader†with ResourceName specified\n" +"\t\tkubectl create role pod-reader —verb=get —verg=list —verb=watch —" +"resource=pods —resource-name=readablepod" + +#: pkg/kubectl/cmd/create_quota.go:35 +msgid "" +"\n" +"\t\t# Create a new resourcequota named my-quota\n" +"\t\tkubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3," +"replicationcontrollers=2,resourcequotas=1,secrets=5," +"persistentvolumeclaims=10\n" +"\n" +"\t\t# Create a new resourcequota named best-effort\n" +"\t\tkubectl create quota best-effort --hard=pods=100 --scopes=BestEffort" +msgstr "" +"\n" +"\t\t# Create a new resourcequota named my-quota\n" +"\t\tkubectl create quota my-quota —hard=cpu=1,memory=1G,pods=2,services=3," +"replicationcontrollers=2,resourcequotas=1,secrets=5," +"persistentvolumeclaims=10\n" +"\n" +"\t\t# Create a new resourcequota named best-effort\n" +"\t\tkubectl create quota best-effort —hard=pods=100 —scopes=BestEffort" + +#: pkg/kubectl/cmd/create_pdb.go:35 +#, c-format +msgid "" +"\n" +"\t\t# Create a pod disruption budget named my-pdb that will select all pods " +"with the app=rails label\n" +"\t\t# and require at least one of them being available at any point in " +"time.\n" +"\t\tkubectl create poddisruptionbudget my-pdb --selector=app=rails --min-" +"available=1\n" +"\n" +"\t\t# Create a pod disruption budget named my-pdb that will select all pods " +"with the app=nginx label\n" +"\t\t# and require at least half of the pods selected to be available at any " +"point in time.\n" +"\t\tkubectl create pdb my-pdb --selector=app=nginx --min-available=50%" +msgstr "" +"\n" +"\t\t# Create a pod disruption budget named my-pdb that will select all pods " +"with the app=rails label\n" +"\t\t# and require at least one of them being available at any point in " +"time.\n" +"\t\tkubectl create poddisruptionbudget my-pdb —selector=app=rails —min-" +"available=1\n" +"\n" +"\t\t# Create a pod disruption budget named my-pdb that will select all pods " +"with the app=nginx label\n" +"\t\t# and require at least half of the pods selected to be available at any " +"point in time.\n" +"\t\tkubectl create pdb my-pdb —selector=app=nginx —min-available=50%" + +#: pkg/kubectl/cmd/create.go:47 +msgid "" +"\n" +"\t\t# Create a pod using the data in pod.json.\n" +"\t\tkubectl create -f ./pod.json\n" +"\n" +"\t\t# Create a pod based on the JSON passed into stdin.\n" +"\t\tcat pod.json | kubectl create -f -\n" +"\n" +"\t\t# Edit the data in docker-registry.yaml in JSON using the v1 API format " +"then create the resource using the edited data.\n" +"\t\tkubectl create -f docker-registry.yaml --edit --output-version=v1 -o json" +msgstr "" +"\n" +"\t\t# Create a pod using the data in pod.json.\n" +"\t\tkubectl create -f ./pod.json\n" +"\n" +"\t\t# Create a pod based on the JSON passed into stdin.\n" +"\t\tcat pod.json | kubectl create -f -\n" +"\n" +"\t\t# Edit the data in docker-registry.yaml in JSON using the v1 API format " +"then create the resource using the edited data.\n" +"\t\tkubectl create -f docker-registry.yaml —edit —output-version=v1 -o json" + +#: pkg/kubectl/cmd/expose.go:53 +msgid "" +"\n" +"\t\t# Create a service for a replicated nginx, which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose rc nginx --port=80 --target-port=8000\n" +"\n" +"\t\t# Create a service for a replication controller identified by type and " +"name specified in \"nginx-controller.yaml\", which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose -f nginx-controller.yaml --port=80 --target-port=8000\n" +"\n" +"\t\t# Create a service for a pod valid-pod, which serves on port 444 with " +"the name \"frontend\"\n" +"\t\tkubectl expose pod valid-pod --port=444 --name=frontend\n" +"\n" +"\t\t# Create a second service based on the above service, exposing the " +"container port 8443 as port 443 with the name \"nginx-https\"\n" +"\t\tkubectl expose service nginx --port=443 --target-port=8443 --name=nginx-" +"https\n" +"\n" +"\t\t# Create a service for a replicated streaming application on port 4100 " +"balancing UDP traffic and named 'video-stream'.\n" +"\t\tkubectl expose rc streamer --port=4100 --protocol=udp --name=video-" +"stream\n" +"\n" +"\t\t# Create a service for a replicated nginx using replica set, which " +"serves on port 80 and connects to the containers on port 8000.\n" +"\t\tkubectl expose rs nginx --port=80 --target-port=8000\n" +"\n" +"\t\t# Create a service for an nginx deployment, which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose deployment nginx --port=80 --target-port=8000" +msgstr "" +"\n" +"\t\t# Create a service for a replicated nginx, which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose rc nginx --port=80 --target-port=8000\n" +"\n" +"\t\t# Create a service for a replication controller identified by type and " +"name specified in \"nginx-controller.yaml\", which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose -f nginx-controller.yaml --port=80 --target-port=8000\n" +"\n" +"\t\t# Create a service for a pod valid-pod, which serves on port 444 with " +"the name \"frontend\"\n" +"\t\tkubectl expose pod valid-pod —port=444 —name=frontend\n" +"\n" +"\t\t# Create a second service based on the above service, exposing the " +"container port 8443 as port 443 with the name “nginx-httpsâ€\n" +"\t\tkubectl expose service nginx —port=443 —target-port=8443 —name=nginx-" +"https\n" +"\n" +"\t\t# Create a service for a replicated streaming application on port 4100 " +"balancing UDP traffic and named ‘video-stream’.\n" +"\t\tkubectl expose rc streamer —port=4100 —protocol=udp —name=video-stream\n" +"\n" +"\t\t# Create a service for a replicated nginx using replica set, which " +"serves on port 80 and connects to the containers on port 8000.\n" +"\t\tkubectl expose rs nginx —port=80 —target-port=8000\n" +"\n" +"\t\t# Create a service for an nginx deployment, which serves on port 80 and " +"connects to the containers on port 8000.\n" +"\t\tkubectl expose deployment nginx —port=80 —target-port=8000" + +#: pkg/kubectl/cmd/delete.go:68 +msgid "" +"\n" +"\t\t# Delete a pod using the type and name specified in pod.json.\n" +"\t\tkubectl delete -f ./pod.json\n" +"\n" +"\t\t# Delete a pod based on the type and name in the JSON passed into " +"stdin.\n" +"\t\tcat pod.json | kubectl delete -f -\n" +"\n" +"\t\t# Delete pods and services with same names \"baz\" and \"foo\"\n" +"\t\tkubectl delete pod,service baz foo\n" +"\n" +"\t\t# Delete pods and services with label name=myLabel.\n" +"\t\tkubectl delete pods,services -l name=myLabel\n" +"\n" +"\t\t# Delete a pod with minimal delay\n" +"\t\tkubectl delete pod foo --now\n" +"\n" +"\t\t# Force delete a pod on a dead node\n" +"\t\tkubectl delete pod foo --grace-period=0 --force\n" +"\n" +"\t\t# Delete all pods\n" +"\t\tkubectl delete pods --all" +msgstr "" +"\n" +"\t\t# Delete a pod using the type and name specified in pod.json.\n" +"\t\tkubectl delete -f ./pod.json\n" +"\n" +"\t\t# Delete a pod based on the type and name in the JSON passed into " +"stdin.\n" +"\t\tcat pod.json | kubectl delete -f -\n" +"\n" +"\t\t# Delete pods and services with same names “baz†and “fooâ€\n" +"\t\tkubectl delete pod,service baz foo\n" +"\n" +"\t\t# Delete pods and services with label name=myLabel.\n" +"\t\tkubectl delete pods,services -l name=myLabel\n" +"\n" +"\t\t# Delete a pod with minimal delay\n" +"\t\tkubectl delete pod foo —now\n" +"\n" +"\t\t# Force delete a pod on a dead node\n" +"\t\tkubectl delete pod foo —grace-period=0 —force\n" +"\n" +"\t\t# Delete all pods\n" +"\t\tkubectl delete pods —all" + +#: pkg/kubectl/cmd/describe.go:54 +msgid "" +"\n" +"\t\t# Describe a node\n" +"\t\tkubectl describe nodes kubernetes-node-emt8.c.myproject.internal\n" +"\n" +"\t\t# Describe a pod\n" +"\t\tkubectl describe pods/nginx\n" +"\n" +"\t\t# Describe a pod identified by type and name in \"pod.json\"\n" +"\t\tkubectl describe -f pod.json\n" +"\n" +"\t\t# Describe all pods\n" +"\t\tkubectl describe pods\n" +"\n" +"\t\t# Describe pods by label name=myLabel\n" +"\t\tkubectl describe po -l name=myLabel\n" +"\n" +"\t\t# Describe all pods managed by the 'frontend' replication controller (rc-" +"created pods\n" +"\t\t# get the name of the rc as a prefix in the pod the name).\n" +"\t\tkubectl describe pods frontend" +msgstr "" +"\n" +"\t\t# Describe a node\n" +"\t\tkubectl describe nodes kubernetes-node-emt8.c.myproject.internal\n" +"\n" +"\t\t# Describe a pod\n" +"\t\tkubectl describe pods/nginx\n" +"\n" +"\t\t# Describe a pod identified by type and name in “pod.jsonâ€\n" +"\t\tkubectl describe -f pod.json\n" +"\n" +"\t\t# Describe all pods\n" +"\t\tkubectl describe pods\n" +"\n" +"\t\t# Describe pods by label name=myLabel\n" +"\t\tkubectl describe po -l name=myLabel\n" +"\n" +"\t\t# Describe all pods managed by the ‘frontend’ replication controller (rc-" +"created pods\n" +"\t\t# get the name of the rc as a prefix in the pod the name).\n" +"\t\tkubectl describe pods frontend" + +#: pkg/kubectl/cmd/drain.go:165 +msgid "" +"\n" +"\t\t# Drain node \"foo\", even if there are pods not managed by a " +"ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it.\n" +"\t\t$ kubectl drain foo --force\n" +"\n" +"\t\t# As above, but abort if there are pods not managed by a " +"ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet, and use a " +"grace period of 15 minutes.\n" +"\t\t$ kubectl drain foo --grace-period=900" +msgstr "" +"\n" +"\t\t# Drain node “fooâ€, even if there are pods not managed by a " +"ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it.\n" +"\t\t$ kubectl drain foo —force\n" +"\n" +"\t\t# As above, but abort if there are pods not managed by a " +"ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet, and use a " +"grace period of 15 minutes.\n" +"\t\t$ kubectl drain foo —grace-period=900" + +#: pkg/kubectl/cmd/edit.go:80 +msgid "" +"\n" +"\t\t# Edit the service named 'docker-registry':\n" +"\t\tkubectl edit svc/docker-registry\n" +"\n" +"\t\t# Use an alternative editor\n" +"\t\tKUBE_EDITOR=\"nano\" kubectl edit svc/docker-registry\n" +"\n" +"\t\t# Edit the job 'myjob' in JSON using the v1 API format:\n" +"\t\tkubectl edit job.v1.batch/myjob -o json\n" +"\n" +"\t\t# Edit the deployment 'mydeployment' in YAML and save the modified " +"config in its annotation:\n" +"\t\tkubectl edit deployment/mydeployment -o yaml --save-config" +msgstr "" +"\n" +"\t\t# Edit the service named ‘docker-registry’:\n" +"\t\tkubectl edit svc/docker-registry\n" +"\n" +"\t\t# Use an alternative editor\n" +"\t\tKUBE_EDITOR=“nano†kubectl edit svc/docker-registry\n" +"\n" +"\t\t# Edit the job ‘myjob’ in JSON using the v1 API format:\n" +"\t\tkubectl edit job.v1.batch/myjob -o json\n" +"\n" +"\t\t# Edit the deployment ‘mydeployment’ in YAML and save the modified " +"config in its annotation:\n" +"\t\tkubectl edit deployment/mydeployment -o yaml —save-config" + +#: pkg/kubectl/cmd/exec.go:41 +msgid "" +"\n" +"\t\t# Get output from running 'date' from pod 123456-7890, using the first " +"container by default\n" +"\t\tkubectl exec 123456-7890 date\n" +"\n" +"\t\t# Get output from running 'date' in ruby-container from pod 123456-7890\n" +"\t\tkubectl exec 123456-7890 -c ruby-container date\n" +"\n" +"\t\t# Switch to raw terminal mode, sends stdin to 'bash' in ruby-container " +"from pod 123456-7890\n" +"\t\t# and sends stdout/stderr from 'bash' back to the client\n" +"\t\tkubectl exec 123456-7890 -c ruby-container -i -t -- bash -il" +msgstr "" +"\n" +"\t\t# Get output from running ‘date’ from pod 123456-7890, using the first " +"container by default\n" +"\t\tkubectl exec 123456-7890 date\n" +"\n" +"\t\t# Get output from running ‘date’ in ruby-container from pod 123456-7890\n" +"\t\tkubectl exec 123456-7890 -c ruby-container date\n" +"\n" +"\t\t# Switch to raw terminal mode, sends stdin to ‘bash’ in ruby-container " +"from pod 123456-7890\n" +"\t\t# and sends stdout/stderr from ‘bash’ back to the client\n" +"\t\tkubectl exec 123456-7890 -c ruby-container -i -t — bash -il" + +#: pkg/kubectl/cmd/attach.go:42 +msgid "" +"\n" +"\t\t# Get output from running pod 123456-7890, using the first container by " +"default\n" +"\t\tkubectl attach 123456-7890\n" +"\n" +"\t\t# Get output from ruby-container from pod 123456-7890\n" +"\t\tkubectl attach 123456-7890 -c ruby-container\n" +"\n" +"\t\t# Switch to raw terminal mode, sends stdin to 'bash' in ruby-container " +"from pod 123456-7890\n" +"\t\t# and sends stdout/stderr from 'bash' back to the client\n" +"\t\tkubectl attach 123456-7890 -c ruby-container -i -t\n" +"\n" +"\t\t# Get output from the first pod of a ReplicaSet named nginx\n" +"\t\tkubectl attach rs/nginx\n" +"\t\t" +msgstr "" +"\n" +"\t\t# Get output from running pod 123456-7890, using the first container by " +"default\n" +"\t\tkubectl attach 123456-7890\n" +"\n" +"\t\t# Get output from ruby-container from pod 123456-7890\n" +"\t\tkubectl attach 123456-7890 -c ruby-container\n" +"\n" +"\t\t# Switch to raw terminal mode, sends stdin to ‘bash’ in ruby-container " +"from pod 123456-7890\n" +"\t\t# and sends stdout/stderr from ‘bash’ back to the client\n" +"\t\tkubectl attach 123456-7890 -c ruby-container -i -t\n" +"\n" +"\t\t# Get output from the first pod of a ReplicaSet named nginx\n" +"\t\tkubectl attach rs/nginx\n" +"\t\t" + +#: pkg/kubectl/cmd/explain.go:39 +msgid "" +"\n" +"\t\t# Get the documentation of the resource and its fields\n" +"\t\tkubectl explain pods\n" +"\n" +"\t\t# Get the documentation of a specific field of a resource\n" +"\t\tkubectl explain pods.spec.containers" +msgstr "" +"\n" +"\t\t# Get the documentation of the resource and its fields\n" +"\t\tkubectl explain pods\n" +"\n" +"\t\t# Get the documentation of a specific field of a resource\n" +"\t\tkubectl explain pods.spec.containers" + +#: pkg/kubectl/cmd/completion.go:65 +msgid "" +"\n" +"\t\t# Install bash completion on a Mac using homebrew\n" +"\t\tbrew install bash-completion\n" +"\t\tprintf \"\n" +"# Bash completion support\n" +"source $(brew --prefix)/etc/bash_completion\n" +"\" >> $HOME/.bash_profile\n" +"\t\tsource $HOME/.bash_profile\n" +"\n" +"\t\t# Load the kubectl completion code for bash into the current shell\n" +"\t\tsource <(kubectl completion bash)\n" +"\n" +"\t\t# Write bash completion code to a file and source if from .bash_profile\n" +"\t\tkubectl completion bash > ~/.kube/completion.bash.inc\n" +"\t\tprintf \"\n" +"# Kubectl shell completion\n" +"source '$HOME/.kube/completion.bash.inc'\n" +"\" >> $HOME/.bash_profile\n" +"\t\tsource $HOME/.bash_profile\n" +"\n" +"\t\t# Load the kubectl completion code for zsh[1] into the current shell\n" +"\t\tsource <(kubectl completion zsh)" +msgstr "" +"\n" +"\t\t# Install bash completion on a Mac using homebrew\n" +"\t\tbrew install bash-completion\n" +"\t\tprintf \"\n" +"# Bash completion support\n" +"source $(brew --prefix)/etc/bash_completion\n" +"\" >> $HOME/.bash_profile\n" +"\t\tsource $HOME/.bash_profile\n" +"\n" +"\t\t# Load the kubectl completion code for bash into the current shell\n" +"\t\tsource <(kubectl completion bash)\n" +"\n" +"\t\t# Write bash completion code to a file and source if from .bash_profile\n" +"\t\tkubectl completion bash > ~/.kube/completion.bash.inc\n" +"\t\tprintf “\n" +"# Kubectl shell completion\n" +"source ‘$HOME/.kube/completion.bash.inc’\n" +"“ >> $HOME/.bash_profile\n" +"\t\tsource $HOME/.bash_profile\n" +"\n" +"\t\t# Load the kubectl completion code for zsh[1] into the current shell\n" +"\t\tsource <(kubectl completion zsh)" + +#: pkg/kubectl/cmd/get.go:64 +msgid "" +"\n" +"\t\t# List all pods in ps output format.\n" +"\t\tkubectl get pods\n" +"\n" +"\t\t# List all pods in ps output format with more information (such as node " +"name).\n" +"\t\tkubectl get pods -o wide\n" +"\n" +"\t\t# List a single replication controller with specified NAME in ps output " +"format.\n" +"\t\tkubectl get replicationcontroller web\n" +"\n" +"\t\t# List a single pod in JSON output format.\n" +"\t\tkubectl get -o json pod web-pod-13je7\n" +"\n" +"\t\t# List a pod identified by type and name specified in \"pod.yaml\" in " +"JSON output format.\n" +"\t\tkubectl get -f pod.yaml -o json\n" +"\n" +"\t\t# Return only the phase value of the specified pod.\n" +"\t\tkubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}\n" +"\n" +"\t\t# List all replication controllers and services together in ps output " +"format.\n" +"\t\tkubectl get rc,services\n" +"\n" +"\t\t# List one or more resources by their type and names.\n" +"\t\tkubectl get rc/web service/frontend pods/web-pod-13je7\n" +"\n" +"\t\t# List all resources with different types.\n" +"\t\tkubectl get all" +msgstr "" +"\n" +"\t\t# List all pods in ps output format.\n" +"\t\tkubectl get pods\n" +"\n" +"\t\t# List all pods in ps output format with more information (such as node " +"name).\n" +"\t\tkubectl get pods -o wide\n" +"\n" +"\t\t# List a single replication controller with specified NAME in ps output " +"format.\n" +"\t\tkubectl get replicationcontroller web\n" +"\n" +"\t\t# List a single pod in JSON output format.\n" +"\t\tkubectl get -o json pod web-pod-13je7\n" +"\n" +"\t\t# List a pod identified by type and name specified in “pod.yaml†in JSON " +"output format.\n" +"\t\tkubectl get -f pod.yaml -o json\n" +"\n" +"\t\t# Return only the phase value of the specified pod.\n" +"\t\tkubectl get -o template pod/web-pod-13je7 —template={{.status.phase}}\n" +"\n" +"\t\t# List all replication controllers and services together in ps output " +"format.\n" +"\t\tkubectl get rc,services\n" +"\n" +"\t\t# List one or more resources by their type and names.\n" +"\t\tkubectl get rc/web service/frontend pods/web-pod-13je7\n" +"\n" +"\t\t# List all resources with different types.\n" +"\t\tkubectl get all" + +#: pkg/kubectl/cmd/portforward.go:53 +msgid "" +"\n" +"\t\t# Listen on ports 5000 and 6000 locally, forwarding data to/from ports " +"5000 and 6000 in the pod\n" +"\t\tkubectl port-forward mypod 5000 6000\n" +"\n" +"\t\t# Listen on port 8888 locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod 8888:5000\n" +"\n" +"\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod :5000\n" +"\n" +"\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod 0:5000" +msgstr "" +"\n" +"\t\t# Listen on ports 5000 and 6000 locally, forwarding data to/from ports " +"5000 and 6000 in the pod\n" +"\t\tkubectl port-forward mypod 5000 6000\n" +"\n" +"\t\t# Listen on port 8888 locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod 8888:5000\n" +"\n" +"\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod :5000\n" +"\n" +"\t\t# Listen on a random port locally, forwarding to 5000 in the pod\n" +"\t\tkubectl port-forward mypod 0:5000" + +#: pkg/kubectl/cmd/drain.go:118 +msgid "" +"\n" +"\t\t# Mark node \"foo\" as schedulable.\n" +"\t\t$ kubectl uncordon foo" +msgstr "" +"\n" +"\t\t# Mark node “foo†as schedulable.\n" +"\t\t$ kubectl uncordon foo" + +#: pkg/kubectl/cmd/drain.go:93 +msgid "" +"\n" +"\t\t# Mark node \"foo\" as unschedulable.\n" +"\t\tkubectl cordon foo" +msgstr "" +"\n" +"\t\t# Mark node “foo†as unschedulable.\n" +"\t\tkubectl cordon foo" + +#: pkg/kubectl/cmd/patch.go:66 +msgid "" +"\n" +"\t\t# Partially update a node using strategic merge patch\n" +"\t\tkubectl patch node k8s-node-1 -p '{\"spec\":{\"unschedulable\":true}}'\n" +"\n" +"\t\t# Partially update a node identified by the type and name specified in " +"\"node.json\" using strategic merge patch\n" +"\t\tkubectl patch -f node.json -p '{\"spec\":{\"unschedulable\":true}}'\n" +"\n" +"\t\t# Update a container's image; spec.containers[*].name is required " +"because it's a merge key\n" +"\t\tkubectl patch pod valid-pod -p '{\"spec\":{\"containers\":[{\"name\":" +"\"kubernetes-serve-hostname\",\"image\":\"new image\"}]}}'\n" +"\n" +"\t\t# Update a container's image using a json patch with positional arrays\n" +"\t\tkubectl patch pod valid-pod --type='json' -p='[{\"op\": \"replace\", " +"\"path\": \"/spec/containers/0/image\", \"value\":\"new image\"}]'" +msgstr "" +"\n" +"\t\t# Partially update a node using strategic merge patch\n" +"\t\tkubectl patch node k8s-node-1 -p ‘{“specâ€:{“unschedulableâ€:true}}’\n" +"\n" +"\t\t# Partially update a node identified by the type and name specified in " +"“node.json†using strategic merge patch\n" +"\t\tkubectl patch -f node.json -p ‘{“specâ€:{“unschedulableâ€:true}}’\n" +"\n" +"\t\t# Update a container’s image; spec.containers[*].name is required " +"because it’s a merge key\n" +"\t\tkubectl patch pod valid-pod -p ‘{“specâ€:{“containersâ€:" +"[{“nameâ€:â€kubernetes-serve-hostnameâ€,â€imageâ€:â€new imageâ€}]}}’\n" +"\n" +"\t\t# Update a container’s image using a json patch with positional arrays\n" +"\t\tkubectl patch pod valid-pod —type=‘json’ -p=‘[{“opâ€: “replaceâ€, “pathâ€: " +"“/spec/containers/0/imageâ€, “valueâ€:â€new imageâ€}]’" + +#: pkg/kubectl/cmd/options.go:29 +msgid "" +"\n" +"\t\t# Print flags inherited by all commands\n" +"\t\tkubectl options" +msgstr "" +"\n" +"\t\t# Print flags inherited by all commands\n" +"\t\tkubectl options" + +#: pkg/kubectl/cmd/clusterinfo.go:41 +msgid "" +"\n" +"\t\t# Print the address of the master and cluster services\n" +"\t\tkubectl cluster-info" +msgstr "" +"\n" +"\t\t# Print the address of the master and cluster services\n" +"\t\tkubectl cluster-info" + +#: pkg/kubectl/cmd/version.go:32 +msgid "" +"\n" +"\t\t# Print the client and server versions for the current context\n" +"\t\tkubectl version" +msgstr "" +"\n" +"\t\t# Print the client and server versions for the current context\n" +"\t\tkubectl version" + +#: pkg/kubectl/cmd/apiversions.go:34 +msgid "" +"\n" +"\t\t# Print the supported API versions\n" +"\t\tkubectl api-versions" +msgstr "" +"\n" +"\t\t# Print the supported API versions\n" +"\t\tkubectl api-versions" + +#: pkg/kubectl/cmd/replace.go:50 +msgid "" +"\n" +"\t\t# Replace a pod using the data in pod.json.\n" +"\t\tkubectl replace -f ./pod.json\n" +"\n" +"\t\t# Replace a pod based on the JSON passed into stdin.\n" +"\t\tcat pod.json | kubectl replace -f -\n" +"\n" +"\t\t# Update a single-container pod's image version (tag) to v4\n" +"\t\tkubectl get pod mypod -o yaml | sed 's/\\(image: myimage\\):.*$/:v4/' | " +"kubectl replace -f -\n" +"\n" +"\t\t# Force replace, delete and then re-create the resource\n" +"\t\tkubectl replace --force -f ./pod.json" +msgstr "" +"\n" +"\t\t# Replace a pod using the data in pod.json.\n" +"\t\tkubectl replace -f ./pod.json\n" +"\n" +"\t\t# Replace a pod based on the JSON passed into stdin.\n" +"\t\tcat pod.json | kubectl replace -f -\n" +"\n" +"\t\t# Update a single-container pod’s image version (tag) to v4\n" +"\t\tkubectl get pod mypod -o yaml | sed ’s/\\(image: myimage\\):.*$/:v4/‘ | " +"kubectl replace -f -\n" +"\n" +"\t\t# Force replace, delete and then re-create the resource\n" +"\t\tkubectl replace —force -f ./pod.json" + +#: pkg/kubectl/cmd/logs.go:40 +msgid "" +"\n" +"\t\t# Return snapshot logs from pod nginx with only one container\n" +"\t\tkubectl logs nginx\n" +"\n" +"\t\t# Return snapshot logs for the pods defined by label app=nginx\n" +"\t\tkubectl logs -lapp=nginx\n" +"\n" +"\t\t# Return snapshot of previous terminated ruby container logs from pod " +"web-1\n" +"\t\tkubectl logs -p -c ruby web-1\n" +"\n" +"\t\t# Begin streaming the logs of the ruby container in pod web-1\n" +"\t\tkubectl logs -f -c ruby web-1\n" +"\n" +"\t\t# Display only the most recent 20 lines of output in pod nginx\n" +"\t\tkubectl logs --tail=20 nginx\n" +"\n" +"\t\t# Show all logs from pod nginx written in the last hour\n" +"\t\tkubectl logs --since=1h nginx\n" +"\n" +"\t\t# Return snapshot logs from first container of a job named hello\n" +"\t\tkubectl logs job/hello\n" +"\n" +"\t\t# Return snapshot logs from container nginx-1 of a deployment named " +"nginx\n" +"\t\tkubectl logs deployment/nginx -c nginx-1" +msgstr "" +"\n" +"\t\t# Return snapshot logs from pod nginx with only one container\n" +"\t\tkubectl logs nginx\n" +"\n" +"\t\t# Return snapshot logs for the pods defined by label app=nginx\n" +"\t\tkubectl logs -lapp=nginx\n" +"\n" +"\t\t# Return snapshot of previous terminated ruby container logs from pod " +"web-1\n" +"\t\tkubectl logs -p -c ruby web-1\n" +"\n" +"\t\t# Begin streaming the logs of the ruby container in pod web-1\n" +"\t\tkubectl logs -f -c ruby web-1\n" +"\n" +"\t\t# Display only the most recent 20 lines of output in pod nginx\n" +"\t\tkubectl logs —tail=20 nginx\n" +"\n" +"\t\t# Show all logs from pod nginx written in the last hour\n" +"\t\tkubectl logs —since=1h nginx\n" +"\n" +"\t\t# Return snapshot logs from first container of a job named hello\n" +"\t\tkubectl logs job/hello\n" +"\n" +"\t\t# Return snapshot logs from container nginx-1 of a deployment named " +"nginx\n" +"\t\tkubectl logs deployment/nginx -c nginx-1" + +#: pkg/kubectl/cmd/proxy.go:53 +msgid "" +"\n" +"\t\t# Run a proxy to kubernetes apiserver on port 8011, serving static " +"content from ./local/www/\n" +"\t\tkubectl proxy --port=8011 --www=./local/www/\n" +"\n" +"\t\t# Run a proxy to kubernetes apiserver on an arbitrary local port.\n" +"\t\t# The chosen port for the server will be output to stdout.\n" +"\t\tkubectl proxy --port=0\n" +"\n" +"\t\t# Run a proxy to kubernetes apiserver, changing the api prefix to k8s-" +"api\n" +"\t\t# This makes e.g. the pods api available at localhost:8001/k8s-api/v1/" +"pods/\n" +"\t\tkubectl proxy --api-prefix=/k8s-api" +msgstr "" +"\n" +"\t\t# Run a proxy to kubernetes apiserver on port 8011, serving static " +"content from ./local/www/\n" +"\t\tkubectl proxy —port=8011 —www=./local/www/\n" +"\n" +"\t\t# Run a proxy to kubernetes apiserver on an arbitrary local port.\n" +"\t\t# The chosen port for the server will be output to stdout.\n" +"\t\tkubectl proxy —port=0\n" +"\n" +"\t\t# Run a proxy to kubernetes apiserver, changing the api prefix to k8s-" +"api\n" +"\t\t# This makes e.g. the pods api available at localhost:8001/k8s-api/v1/" +"pods/\n" +"\t\tkubectl proxy —api-prefix=/k8s-api" + +#: pkg/kubectl/cmd/scale.go:43 +msgid "" +"\n" +"\t\t# Scale a replicaset named 'foo' to 3.\n" +"\t\tkubectl scale --replicas=3 rs/foo\n" +"\n" +"\t\t# Scale a resource identified by type and name specified in \"foo.yaml\" " +"to 3.\n" +"\t\tkubectl scale --replicas=3 -f foo.yaml\n" +"\n" +"\t\t# If the deployment named mysql's current size is 2, scale mysql to 3.\n" +"\t\tkubectl scale --current-replicas=2 --replicas=3 deployment/mysql\n" +"\n" +"\t\t# Scale multiple replication controllers.\n" +"\t\tkubectl scale --replicas=5 rc/foo rc/bar rc/baz\n" +"\n" +"\t\t# Scale job named 'cron' to 3.\n" +"\t\tkubectl scale --replicas=3 job/cron" +msgstr "" +"\n" +"\t\t# Scale a replicaset named ‘foo’ to 3.\n" +"\t\tkubectl scale —replicas=3 rs/foo\n" +"\n" +"\t\t# Scale a resource identified by type and name specified in “foo.yaml†" +"to 3.\n" +"\t\tkubectl scale —replicas=3 -f foo.yaml\n" +"\n" +"\t\t# If the deployment named mysql’s current size is 2, scale mysql to 3.\n" +"\t\tkubectl scale —current-replicas=2 —replicas=3 deployment/mysql\n" +"\n" +"\t\t# Scale multiple replication controllers.\n" +"\t\tkubectl scale —replicas=5 rc/foo rc/bar rc/baz\n" +"\n" +"\t\t# Scale job named ‘cron’ to 3.\n" +"\t\tkubectl scale —replicas=3 job/cron" + +#: pkg/kubectl/cmd/apply_set_last_applied.go:67 +msgid "" +"\n" +"\t\t# Set the last-applied-configuration of a resource to match the contents " +"of a file.\n" +"\t\tkubectl apply set-last-applied -f deploy.yaml\n" +"\n" +"\t\t# Execute set-last-applied against each configuration file in a " +"directory.\n" +"\t\tkubectl apply set-last-applied -f path/\n" +"\n" +"\t\t# Set the last-applied-configuration of a resource to match the contents " +"of a file, will create the annotation if it does not already exist.\n" +"\t\tkubectl apply set-last-applied -f deploy.yaml --create-annotation=true\n" +"\t\t" +msgstr "" +"\n" +"\t\t# Set the last-applied-configuration of a resource to match the contents " +"of a file.\n" +"\t\tkubectl apply set-last-applied -f deploy.yaml\n" +"\n" +"\t\t# Execute set-last-applied against each configuration file in a " +"directory.\n" +"\t\tkubectl apply set-last-applied -f path/\n" +"\n" +"\t\t# Set the last-applied-configuration of a resource to match the contents " +"of a file, will create the annotation if it does not already exist.\n" +"\t\tkubectl apply set-last-applied -f deploy.yaml —create-annotation=true\n" +"\t\t" + +#: pkg/kubectl/cmd/top_pod.go:61 +msgid "" +"\n" +"\t\t# Show metrics for all pods in the default namespace\n" +"\t\tkubectl top pod\n" +"\n" +"\t\t# Show metrics for all pods in the given namespace\n" +"\t\tkubectl top pod --namespace=NAMESPACE\n" +"\n" +"\t\t# Show metrics for a given pod and its containers\n" +"\t\tkubectl top pod POD_NAME --containers\n" +"\n" +"\t\t# Show metrics for the pods defined by label name=myLabel\n" +"\t\tkubectl top pod -l name=myLabel" +msgstr "" +"\n" +"\t\t# Show metrics for all pods in the default namespace\n" +"\t\tkubectl top pod\n" +"\n" +"\t\t# Show metrics for all pods in the given namespace\n" +"\t\tkubectl top pod —namespace=NAMESPACE\n" +"\n" +"\t\t# Show metrics for a given pod and its containers\n" +"\t\tkubectl top pod POD_NAME —containers\n" +"\n" +"\t\t# Show metrics for the pods defined by label name=myLabel\n" +"\t\tkubectl top pod -l name=myLabel" + +#: pkg/kubectl/cmd/stop.go:40 +msgid "" +"\n" +"\t\t# Shut down foo.\n" +"\t\tkubectl stop replicationcontroller foo\n" +"\n" +"\t\t# Stop pods and services with label name=myLabel.\n" +"\t\tkubectl stop pods,services -l name=myLabel\n" +"\n" +"\t\t# Shut down the service defined in service.json\n" +"\t\tkubectl stop -f service.json\n" +"\n" +"\t\t# Shut down all resources in the path/to/resources directory\n" +"\t\tkubectl stop -f path/to/resources" +msgstr "" +"\n" +"\t\t# Shut down foo.\n" +"\t\tkubectl stop replicationcontroller foo\n" +"\n" +"\t\t# Stop pods and services with label name=myLabel.\n" +"\t\tkubectl stop pods,services -l name=myLabel\n" +"\n" +"\t\t# Shut down the service defined in service.json\n" +"\t\tkubectl stop -f service.json\n" +"\n" +"\t\t# Shut down all resources in the path/to/resources directory\n" +"\t\tkubectl stop -f path/to/resources" + +#: pkg/kubectl/cmd/run.go:57 +msgid "" +"\n" +"\t\t# Start a single instance of nginx.\n" +"\t\tkubectl run nginx --image=nginx\n" +"\n" +"\t\t# Start a single instance of hazelcast and let the container expose port " +"5701 .\n" +"\t\tkubectl run hazelcast --image=hazelcast --port=5701\n" +"\n" +"\t\t# Start a single instance of hazelcast and set environment variables " +"\"DNS_DOMAIN=cluster\" and \"POD_NAMESPACE=default\" in the container.\n" +"\t\tkubectl run hazelcast --image=hazelcast --env=\"DNS_DOMAIN=cluster\" --" +"env=\"POD_NAMESPACE=default\"\n" +"\n" +"\t\t# Start a replicated instance of nginx.\n" +"\t\tkubectl run nginx --image=nginx --replicas=5\n" +"\n" +"\t\t# Dry run. Print the corresponding API objects without creating them.\n" +"\t\tkubectl run nginx --image=nginx --dry-run\n" +"\n" +"\t\t# Start a single instance of nginx, but overload the spec of the " +"deployment with a partial set of values parsed from JSON.\n" +"\t\tkubectl run nginx --image=nginx --overrides='{ \"apiVersion\": \"v1\", " +"\"spec\": { ... } }'\n" +"\n" +"\t\t# Start a pod of busybox and keep it in the foreground, don't restart it " +"if it exits.\n" +"\t\tkubectl run -i -t busybox --image=busybox --restart=Never\n" +"\n" +"\t\t# Start the nginx container using the default command, but use custom " +"arguments (arg1 .. argN) for that command.\n" +"\t\tkubectl run nginx --image=nginx -- ... \n" +"\n" +"\t\t# Start the nginx container using a different command and custom " +"arguments.\n" +"\t\tkubectl run nginx --image=nginx --command -- ... \n" +"\n" +"\t\t# Start the perl container to compute Ï€ to 2000 places and print it " +"out.\n" +"\t\tkubectl run pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -" +"wle 'print bpi(2000)'\n" +"\n" +"\t\t# Start the cron job to compute Ï€ to 2000 places and print it out every " +"5 minutes.\n" +"\t\tkubectl run pi --schedule=\"0/5 * * * ?\" --image=perl --" +"restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'" +msgstr "" +"\n" +"\t\t# Start a single instance of nginx.\n" +"\t\tkubectl run nginx --image=nginx\n" +"\n" +"\t\t# Start a single instance of hazelcast and let the container expose port " +"5701 .\n" +"\t\tkubectl run hazelcast --image=hazelcast --port=5701\n" +"\n" +"\t\t# Start a single instance of hazelcast and set environment variables " +"\"DNS_DOMAIN=cluster\" and \"POD_NAMESPACE=default\" in the container.\n" +"\t\tkubectl run hazelcast --image=hazelcast --env=\"DNS_DOMAIN=cluster\" --" +"env=\"POD_NAMESPACE=default\"\n" +"\n" +"\t\t# Start a replicated instance of nginx.\n" +"\t\tkubectl run nginx --image=nginx --replicas=5\n" +"\n" +"\t\t# Dry run. Print the corresponding API objects without creating them.\n" +"\t\tkubectl run nginx --image=nginx --dry-run\n" +"\n" +"\t\t# Start a single instance of nginx, but overload the spec of the " +"deployment with a partial set of values parsed from JSON.\n" +"\t\tkubectl run nginx --image=nginx --overrides='{ \"apiVersion\": \"v1\", " +"\"spec\": { ... } }'\n" +"\n" +"\t\t# Start a pod of busybox and keep it in the foreground, don't restart it " +"if it exits.\n" +"\t\tkubectl run -i -t busybox —image=busybox —restart=Never\n" +"\n" +"\t\t# Start the nginx container using the default command, but use custom " +"arguments (arg1 .. argN) for that command.\n" +"\t\tkubectl run nginx —image=nginx — … \n" +"\n" +"\t\t# Start the nginx container using a different command and custom " +"arguments.\n" +"\t\tkubectl run nginx —image=nginx —command — … \n" +"\n" +"\t\t# Start the perl container to compute Ï€ to 2000 places and print it " +"out.\n" +"\t\tkubectl run pi —image=perl —restart=OnFailure — perl -Mbignum=bpi -wle " +"‘print bpi(2000)’\n" +"\n" +"\t\t# Start the cron job to compute Ï€ to 2000 places and print it out every " +"5 minutes.\n" +"\t\tkubectl run pi —schedule=“0/5 * * * ?†—image=perl —restart=OnFailure — " +"perl -Mbignum=bpi -wle ‘print bpi(2000)’" + +#: pkg/kubectl/cmd/taint.go:67 +msgid "" +"\n" +"\t\t# Update node 'foo' with a taint with key 'dedicated' and value 'special-" +"user' and effect 'NoSchedule'.\n" +"\t\t# If a taint with that key and effect already exists, its value is " +"replaced as specified.\n" +"\t\tkubectl taint nodes foo dedicated=special-user:NoSchedule\n" +"\n" +"\t\t# Remove from node 'foo' the taint with key 'dedicated' and effect " +"'NoSchedule' if one exists.\n" +"\t\tkubectl taint nodes foo dedicated:NoSchedule-\n" +"\n" +"\t\t# Remove from node 'foo' all the taints with key 'dedicated'\n" +"\t\tkubectl taint nodes foo dedicated-" +msgstr "" +"\n" +"\t\t# Update node ‘foo’ with a taint with key ‘dedicated’ and value ‘special-" +"user’ and effect ‘NoSchedule’.\n" +"\t\t# If a taint with that key and effect already exists, its value is " +"replaced as specified.\n" +"\t\tkubectl taint nodes foo dedicated=special-user:NoSchedule\n" +"\n" +"\t\t# Remove from node ‘foo’ the taint with key ‘dedicated’ and effect " +"‘NoSchedule’ if one exists.\n" +"\t\tkubectl taint nodes foo dedicated:NoSchedule-\n" +"\n" +"\t\t# Remove from node ‘foo’ all the taints with key ‘dedicated’\n" +"\t\tkubectl taint nodes foo dedicated-" + +#: pkg/kubectl/cmd/label.go:77 +msgid "" +"\n" +"\t\t# Update pod 'foo' with the label 'unhealthy' and the value 'true'.\n" +"\t\tkubectl label pods foo unhealthy=true\n" +"\n" +"\t\t# Update pod 'foo' with the label 'status' and the value 'unhealthy', " +"overwriting any existing value.\n" +"\t\tkubectl label --overwrite pods foo status=unhealthy\n" +"\n" +"\t\t# Update all pods in the namespace\n" +"\t\tkubectl label pods --all status=unhealthy\n" +"\n" +"\t\t# Update a pod identified by the type and name in \"pod.json\"\n" +"\t\tkubectl label -f pod.json status=unhealthy\n" +"\n" +"\t\t# Update pod 'foo' only if the resource is unchanged from version 1.\n" +"\t\tkubectl label pods foo status=unhealthy --resource-version=1\n" +"\n" +"\t\t# Update pod 'foo' by removing a label named 'bar' if it exists.\n" +"\t\t# Does not require the --overwrite flag.\n" +"\t\tkubectl label pods foo bar-" +msgstr "" +"\n" +"\t\t# Update pod ‘foo’ with the label ‘unhealthy’ and the value ‘true’.\n" +"\t\tkubectl label pods foo unhealthy=true\n" +"\n" +"\t\t# Update pod ‘foo’ with the label ‘status’ and the value ‘unhealthy’, " +"overwriting any existing value.\n" +"\t\tkubectl label —overwrite pods foo status=unhealthy\n" +"\n" +"\t\t# Update all pods in the namespace\n" +"\t\tkubectl label pods —all status=unhealthy\n" +"\n" +"\t\t# Update a pod identified by the type and name in “pod.jsonâ€\n" +"\t\tkubectl label -f pod.json status=unhealthy\n" +"\n" +"\t\t# Update pod ‘foo’ only if the resource is unchanged from version 1.\n" +"\t\tkubectl label pods foo status=unhealthy —resource-version=1\n" +"\n" +"\t\t# Update pod ‘foo’ by removing a label named ‘bar’ if it exists.\n" +"\t\t# Does not require the —overwrite flag.\n" +"\t\tkubectl label pods foo bar-" + +#: pkg/kubectl/cmd/rollingupdate.go:54 +msgid "" +"\n" +"\t\t# Update pods of frontend-v1 using new replication controller data in " +"frontend-v2.json.\n" +"\t\tkubectl rolling-update frontend-v1 -f frontend-v2.json\n" +"\n" +"\t\t# Update pods of frontend-v1 using JSON data passed into stdin.\n" +"\t\tcat frontend-v2.json | kubectl rolling-update frontend-v1 -f -\n" +"\n" +"\t\t# Update the pods of frontend-v1 to frontend-v2 by just changing the " +"image, and switching the\n" +"\t\t# name of the replication controller.\n" +"\t\tkubectl rolling-update frontend-v1 frontend-v2 --image=image:v2\n" +"\n" +"\t\t# Update the pods of frontend by just changing the image, and keeping " +"the old name.\n" +"\t\tkubectl rolling-update frontend --image=image:v2\n" +"\n" +"\t\t# Abort and reverse an existing rollout in progress (from frontend-v1 to " +"frontend-v2).\n" +"\t\tkubectl rolling-update frontend-v1 frontend-v2 --rollback" +msgstr "" +"\n" +"\t\t# Update pods of frontend-v1 using new replication controller data in " +"frontend-v2.json.\n" +"\t\tkubectl rolling-update frontend-v1 -f frontend-v2.json\n" +"\n" +"\t\t# Update pods of frontend-v1 using JSON data passed into stdin.\n" +"\t\tcat frontend-v2.json | kubectl rolling-update frontend-v1 -f -\n" +"\n" +"\t\t# Update the pods of frontend-v1 to frontend-v2 by just changing the " +"image, and switching the\n" +"\t\t# name of the replication controller.\n" +"\t\tkubectl rolling-update frontend-v1 frontend-v2 —image=image:v2\n" +"\n" +"\t\t# Update the pods of frontend by just changing the image, and keeping " +"the old name.\n" +"\t\tkubectl rolling-update frontend —image=image:v2\n" +"\n" +"\t\t# Abort and reverse an existing rollout in progress (from frontend-v1 to " +"frontend-v2).\n" +"\t\tkubectl rolling-update frontend-v1 frontend-v2 —rollback" + +#: pkg/kubectl/cmd/apply_view_last_applied.go:52 +msgid "" +"\n" +"\t\t# View the last-applied-configuration annotations by type/name in YAML.\n" +"\t\tkubectl apply view-last-applied deployment/nginx\n" +"\n" +"\t\t# View the last-applied-configuration annotations by file in JSON\n" +"\t\tkubectl apply view-last-applied -f deploy.yaml -o json" +msgstr "" +"\n" +"\t\t# View the last-applied-configuration annotations by type/name in YAML.\n" +"\t\tkubectl apply view-last-applied deployment/nginx\n" +"\n" +"\t\t# View the last-applied-configuration annotations by file in JSON\n" +"\t\tkubectl apply view-last-applied -f deploy.yaml -o json" + +#: pkg/kubectl/cmd/apply.go:75 +msgid "" +"\n" +"\t\tApply a configuration to a resource by filename or stdin.\n" +"\t\tThis resource will be created if it doesn't exist yet.\n" +"\t\tTo use 'apply', always create the resource initially with either 'apply' " +"or 'create --save-config'.\n" +"\n" +"\t\tJSON and YAML formats are accepted.\n" +"\n" +"\t\tAlpha Disclaimer: the --prune functionality is not yet complete. Do not " +"use unless you are aware of what the current state is. See https://issues." +"k8s.io/34274." +msgstr "" +"\n" +"\t\tApply a configuration to a resource by filename or stdin.\n" +"\t\tThis resource will be created if it doesn’t exist yet.\n" +"\t\tTo use ‘apply’, always create the resource initially with either ‘apply’ " +"or ‘create —save-config’.\n" +"\n" +"\t\tJSON and YAML formats are accepted.\n" +"\n" +"\t\tAlpha Disclaimer: the —prune functionality is not yet complete. Do not " +"use unless you are aware of what the current state is. See https://issues." +"k8s.io/34274." + +#: pkg/kubectl/cmd/convert.go:38 +msgid "" +"\n" +"\t\tConvert config files between different API versions. Both YAML\n" +"\t\tand JSON formats are accepted.\n" +"\n" +"\t\tThe command takes filename, directory, or URL as input, and convert it " +"into format\n" +"\t\tof version specified by --output-version flag. If target version is not " +"specified or\n" +"\t\tnot supported, convert to latest version.\n" +"\n" +"\t\tThe default output will be printed to stdout in YAML format. One can use " +"-o option\n" +"\t\tto change to output destination." +msgstr "" +"\n" +"\t\tConvert config files between different API versions. Both YAML\n" +"\t\tand JSON formats are accepted.\n" +"\n" +"\t\tThe command takes filename, directory, or URL as input, and convert it " +"into format\n" +"\t\tof version specified by —output-version flag. If target version is not " +"specified or\n" +"\t\tnot supported, convert to latest version.\n" +"\n" +"\t\tThe default output will be printed to stdout in YAML format. One can use " +"-o option\n" +"\t\tto change to output destination." + +#: pkg/kubectl/cmd/create_clusterrole.go:31 +msgid "" +"\n" +"\t\tCreate a ClusterRole." +msgstr "" +"\n" +"\t\tCreate a ClusterRole." + +#: pkg/kubectl/cmd/create_clusterrolebinding.go:32 +msgid "" +"\n" +"\t\tCreate a ClusterRoleBinding for a particular ClusterRole." +msgstr "" +"\n" +"\t\tCreate a ClusterRoleBinding for a particular ClusterRole." + +#: pkg/kubectl/cmd/create_rolebinding.go:32 +msgid "" +"\n" +"\t\tCreate a RoleBinding for a particular Role or ClusterRole." +msgstr "" +"\n" +"\t\tCreate a RoleBinding for a particular Role or ClusterRole." + +#: pkg/kubectl/cmd/create_secret.go:200 +msgid "" +"\n" +"\t\tCreate a TLS secret from the given public/private key pair.\n" +"\n" +"\t\tThe public/private key pair must exist before hand. The public key " +"certificate must be .PEM encoded and match the given private key." +msgstr "" +"\n" +"\t\tCreate a TLS secret from the given public/private key pair.\n" +"\n" +"\t\tThe public/private key pair must exist before hand. The public key " +"certificate must be .PEM encoded and match the given private key." + +#: pkg/kubectl/cmd/create_configmap.go:32 +msgid "" +"\n" +"\t\tCreate a configmap based on a file, directory, or specified literal " +"value.\n" +"\n" +"\t\tA single configmap may package one or more key/value pairs.\n" +"\n" +"\t\tWhen creating a configmap based on a file, the key will default to the " +"basename of the file, and the value will\n" +"\t\tdefault to the file content. If the basename is an invalid key, you may " +"specify an alternate key.\n" +"\n" +"\t\tWhen creating a configmap based on a directory, each file whose basename " +"is a valid key in the directory will be\n" +"\t\tpackaged into the configmap. Any directory entries except regular files " +"are ignored (e.g. subdirectories,\n" +"\t\tsymlinks, devices, pipes, etc)." +msgstr "" +"\n" +"\t\tCreate a configmap based on a file, directory, or specified literal " +"value.\n" +"\n" +"\t\tA single configmap may package one or more key/value pairs.\n" +"\n" +"\t\tWhen creating a configmap based on a file, the key will default to the " +"basename of the file, and the value will\n" +"\t\tdefault to the file content. If the basename is an invalid key, you may " +"specify an alternate key.\n" +"\n" +"\t\tWhen creating a configmap based on a directory, each file whose basename " +"is a valid key in the directory will be\n" +"\t\tpackaged into the configmap. Any directory entries except regular files " +"are ignored (e.g. subdirectories,\n" +"\t\tsymlinks, devices, pipes, etc)." + +#: pkg/kubectl/cmd/create_namespace.go:32 +msgid "" +"\n" +"\t\tCreate a namespace with the specified name." +msgstr "" +"\n" +"\t\tCreate a namespace with the specified name." + +#: pkg/kubectl/cmd/create_secret.go:119 +msgid "" +"\n" +"\t\tCreate a new secret for use with Docker registries.\n" +"\n" +"\t\tDockercfg secrets are used to authenticate against Docker registries.\n" +"\n" +"\t\tWhen using the Docker command line to push images, you can authenticate " +"to a given registry by running\n" +"\n" +"\t\t $ docker login DOCKER_REGISTRY_SERVER --username=DOCKER_USER --" +"password=DOCKER_PASSWORD --email=DOCKER_EMAIL'.\n" +"\n" +" That produces a ~/.dockercfg file that is used by subsequent 'docker " +"push' and 'docker pull' commands to\n" +"\t\tauthenticate to the registry. The email address is optional.\n" +"\n" +"\t\tWhen creating applications, you may have a Docker registry that requires " +"authentication. In order for the\n" +"\t\tnodes to pull images on your behalf, they have to have the credentials. " +"You can provide this information\n" +"\t\tby creating a dockercfg secret and attaching it to your service account." +msgstr "" +"\n" +"\t\tCreate a new secret for use with Docker registries.\n" +"\n" +"\t\tDockercfg secrets are used to authenticate against Docker registries.\n" +"\n" +"\t\tWhen using the Docker command line to push images, you can authenticate " +"to a given registry by running\n" +"\n" +"\t\t $ docker login DOCKER_REGISTRY_SERVER —username=DOCKER_USER —" +"password=DOCKER_PASSWORD —email=DOCKER_EMAIL’.\n" +"\n" +" That produces a ~/.dockercfg file that is used by subsequent ‘docker " +"push’ and ‘docker pull’ commands to\n" +"\t\tauthenticate to the registry. The email address is optional.\n" +"\n" +"\t\tWhen creating applications, you may have a Docker registry that requires " +"authentication. In order for the\n" +"\t\tnodes to pull images on your behalf, they have to have the credentials. " +"You can provide this information\n" +"\t\tby creating a dockercfg secret and attaching it to your service account." + +#: pkg/kubectl/cmd/create_pdb.go:32 +msgid "" +"\n" +"\t\tCreate a pod disruption budget with the specified name, selector, and " +"desired minimum available pods" +msgstr "" +"\n" +"\t\tCreate a pod disruption budget with the specified name, selector, and " +"desired minimum available pods" + +#: pkg/kubectl/cmd/create.go:42 +msgid "" +"\n" +"\t\tCreate a resource by filename or stdin.\n" +"\n" +"\t\tJSON and YAML formats are accepted." +msgstr "" +"\n" +"\t\tCreate a resource by filename or stdin.\n" +"\n" +"\t\tJSON and YAML formats are accepted." + +#: pkg/kubectl/cmd/create_quota.go:32 +msgid "" +"\n" +"\t\tCreate a resourcequota with the specified name, hard limits and optional " +"scopes" +msgstr "" +"\n" +"\t\tCreate a resourcequota with the specified name, hard limits and optional " +"scopes" + +#: pkg/kubectl/cmd/create_role.go:38 +msgid "" +"\n" +"\t\tCreate a role with single rule." +msgstr "" +"\n" +"\t\tCreate a role with single rule." + +#: pkg/kubectl/cmd/create_secret.go:47 +msgid "" +"\n" +"\t\tCreate a secret based on a file, directory, or specified literal value.\n" +"\n" +"\t\tA single secret may package one or more key/value pairs.\n" +"\n" +"\t\tWhen creating a secret based on a file, the key will default to the " +"basename of the file, and the value will\n" +"\t\tdefault to the file content. If the basename is an invalid key, you may " +"specify an alternate key.\n" +"\n" +"\t\tWhen creating a secret based on a directory, each file whose basename is " +"a valid key in the directory will be\n" +"\t\tpackaged into the secret. Any directory entries except regular files " +"are ignored (e.g. subdirectories,\n" +"\t\tsymlinks, devices, pipes, etc)." +msgstr "" +"\n" +"\t\tCreate a secret based on a file, directory, or specified literal value.\n" +"\n" +"\t\tA single secret may package one or more key/value pairs.\n" +"\n" +"\t\tWhen creating a secret based on a file, the key will default to the " +"basename of the file, and the value will\n" +"\t\tdefault to the file content. If the basename is an invalid key, you may " +"specify an alternate key.\n" +"\n" +"\t\tWhen creating a secret based on a directory, each file whose basename is " +"a valid key in the directory will be\n" +"\t\tpackaged into the secret. Any directory entries except regular files " +"are ignored (e.g. subdirectories,\n" +"\t\tsymlinks, devices, pipes, etc)." + +#: pkg/kubectl/cmd/create_serviceaccount.go:32 +msgid "" +"\n" +"\t\tCreate a service account with the specified name." +msgstr "" +"\n" +"\t\tCreate a service account with the specified name." + +#: pkg/kubectl/cmd/run.go:52 +msgid "" +"\n" +"\t\tCreate and run a particular image, possibly replicated.\n" +"\n" +"\t\tCreates a deployment or job to manage the created container(s)." +msgstr "" +"\n" +"\t\tCreate and run a particular image, possibly replicated.\n" +"\n" +"\t\tCreates a deployment or job to manage the created container(s)." + +#: pkg/kubectl/cmd/autoscale.go:34 +msgid "" +"\n" +"\t\tCreates an autoscaler that automatically chooses and sets the number of " +"pods that run in a kubernetes cluster.\n" +"\n" +"\t\tLooks up a Deployment, ReplicaSet, or ReplicationController by name and " +"creates an autoscaler that uses the given resource as a reference.\n" +"\t\tAn autoscaler can automatically increase or decrease number of pods " +"deployed within the system as needed." +msgstr "" +"\n" +"\t\tCreates an autoscaler that automatically chooses and sets the number of " +"pods that run in a kubernetes cluster.\n" +"\n" +"\t\tLooks up a Deployment, ReplicaSet, or ReplicationController by name and " +"creates an autoscaler that uses the given resource as a reference.\n" +"\t\tAn autoscaler can automatically increase or decrease number of pods " +"deployed within the system as needed." + +#: pkg/kubectl/cmd/delete.go:40 +msgid "" +"\n" +"\t\tDelete resources by filenames, stdin, resources and names, or by " +"resources and label selector.\n" +"\n" +"\t\tJSON and YAML formats are accepted. Only one type of the arguments may " +"be specified: filenames,\n" +"\t\tresources and names, or resources and label selector.\n" +"\n" +"\t\tSome resources, such as pods, support graceful deletion. These resources " +"define a default period\n" +"\t\tbefore they are forcibly terminated (the grace period) but you may " +"override that value with\n" +"\t\tthe --grace-period flag, or pass --now to set a grace-period of 1. " +"Because these resources often\n" +"\t\trepresent entities in the cluster, deletion may not be acknowledged " +"immediately. If the node\n" +"\t\thosting a pod is down or cannot reach the API server, termination may " +"take significantly longer\n" +"\t\tthan the grace period. To force delete a resource,\tyou must pass a grace" +"\tperiod of 0 and specify\n" +"\t\tthe --force flag.\n" +"\n" +"\t\tIMPORTANT: Force deleting pods does not wait for confirmation that the " +"pod's processes have been\n" +"\t\tterminated, which can leave those processes running until the node " +"detects the deletion and\n" +"\t\tcompletes graceful deletion. If your processes use shared storage or " +"talk to a remote API and\n" +"\t\tdepend on the name of the pod to identify themselves, force deleting " +"those pods may result in\n" +"\t\tmultiple processes running on different machines using the same " +"identification which may lead\n" +"\t\tto data corruption or inconsistency. Only force delete pods when you are " +"sure the pod is\n" +"\t\tterminated, or if your application can tolerate multiple copies of the " +"same pod running at once.\n" +"\t\tAlso, if you force delete pods the scheduler may place new pods on those " +"nodes before the node\n" +"\t\thas released those resources and causing those pods to be evicted " +"immediately.\n" +"\n" +"\t\tNote that the delete command does NOT do resource version checks, so if " +"someone\n" +"\t\tsubmits an update to a resource right when you submit a delete, their " +"update\n" +"\t\twill be lost along with the rest of the resource." +msgstr "" +"\n" +"\t\tDelete resources by filenames, stdin, resources and names, or by " +"resources and label selector.\n" +"\n" +"\t\tJSON and YAML formats are accepted. Only one type of the arguments may " +"be specified: filenames,\n" +"\t\tresources and names, or resources and label selector.\n" +"\n" +"\t\tSome resources, such as pods, support graceful deletion. These resources " +"define a default period\n" +"\t\tbefore they are forcibly terminated (the grace period) but you may " +"override that value with\n" +"\t\tthe --grace-period flag, or pass --now to set a grace-period of 1. " +"Because these resources often\n" +"\t\trepresent entities in the cluster, deletion may not be acknowledged " +"immediately. If the node\n" +"\t\thosting a pod is down or cannot reach the API server, termination may " +"take significantly longer\n" +"\t\tthan the grace period. To force delete a resource,\tyou must pass a grace" +"\tperiod of 0 and specify\n" +"\t\tthe --force flag.\n" +"\n" +"\t\tIMPORTANT: Force deleting pods does not wait for confirmation that the " +"pod’s processes have been\n" +"\t\tterminated, which can leave those processes running until the node " +"detects the deletion and\n" +"\t\tcompletes graceful deletion. If your processes use shared storage or " +"talk to a remote API and\n" +"\t\tdepend on the name of the pod to identify themselves, force deleting " +"those pods may result in\n" +"\t\tmultiple processes running on different machines using the same " +"identification which may lead\n" +"\t\tto data corruption or inconsistency. Only force delete pods when you are " +"sure the pod is\n" +"\t\tterminated, or if your application can tolerate multiple copies of the " +"same pod running at once.\n" +"\t\tAlso, if you force delete pods the scheduler may place new pods on those " +"nodes before the node\n" +"\t\thas released those resources and causing those pods to be evicted " +"immediately.\n" +"\n" +"\t\tNote that the delete command does NOT do resource version checks, so if " +"someone\n" +"\t\tsubmits an update to a resource right when you submit a delete, their " +"update\n" +"\t\twill be lost along with the rest of the resource." + +#: pkg/kubectl/cmd/stop.go:31 +msgid "" +"\n" +"\t\tDeprecated: Gracefully shut down a resource by name or filename.\n" +"\n" +"\t\tThe stop command is deprecated, all its functionalities are covered by " +"delete command.\n" +"\t\tSee 'kubectl delete --help' for more details.\n" +"\n" +"\t\tAttempts to shut down and delete a resource that supports graceful " +"termination.\n" +"\t\tIf the resource is scalable it will be scaled to 0 before deletion." +msgstr "" +"\n" +"\t\tDeprecated: Gracefully shut down a resource by name or filename.\n" +"\n" +"\t\tThe stop command is deprecated, all its functionalities are covered by " +"delete command.\n" +"\t\tSee ‘kubectl delete —help’ for more details.\n" +"\n" +"\t\tAttempts to shut down and delete a resource that supports graceful " +"termination.\n" +"\t\tIf the resource is scalable it will be scaled to 0 before deletion." + +#: pkg/kubectl/cmd/top_node.go:60 +msgid "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage of nodes.\n" +"\n" +"\t\tThe top-node command allows you to see the resource consumption of nodes." +msgstr "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage of nodes.\n" +"\n" +"\t\tThe top-node command allows you to see the resource consumption of nodes." + +#: pkg/kubectl/cmd/top_pod.go:53 +msgid "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage of pods.\n" +"\n" +"\t\tThe 'top pod' command allows you to see the resource consumption of " +"pods.\n" +"\n" +"\t\tDue to the metrics pipeline delay, they may be unavailable for a few " +"minutes\n" +"\t\tsince pod creation." +msgstr "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage of pods.\n" +"\n" +"\t\tThe ‘top pod’ command allows you to see the resource consumption of " +"pods.\n" +"\n" +"\t\tDue to the metrics pipeline delay, they may be unavailable for a few " +"minutes\n" +"\t\tsince pod creation." + +#: pkg/kubectl/cmd/top.go:33 +msgid "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage.\n" +"\n" +"\t\tThe top command allows you to see the resource consumption for nodes or " +"pods.\n" +"\n" +"\t\tThis command requires Heapster to be correctly configured and working on " +"the server. " +msgstr "" +"\n" +"\t\tDisplay Resource (CPU/Memory/Storage) usage.\n" +"\n" +"\t\tThe top command allows you to see the resource consumption for nodes or " +"pods.\n" +"\n" +"\t\tThis command requires Heapster to be correctly configured and working on " +"the server. " + +#: pkg/kubectl/cmd/drain.go:140 +msgid "" +"\n" +"\t\tDrain node in preparation for maintenance.\n" +"\n" +"\t\tThe given node will be marked unschedulable to prevent new pods from " +"arriving.\n" +"\t\t'drain' evicts the pods if the APIServer supports eviction\n" +"\t\t(http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use " +"normal DELETE\n" +"\t\tto delete the pods.\n" +"\t\tThe 'drain' evicts or deletes all pods except mirror pods (which cannot " +"be deleted through\n" +"\t\tthe API server). If there are DaemonSet-managed pods, drain will not " +"proceed\n" +"\t\twithout --ignore-daemonsets, and regardless it will not delete any\n" +"\t\tDaemonSet-managed pods, because those pods would be immediately replaced " +"by the\n" +"\t\tDaemonSet controller, which ignores unschedulable markings. If there " +"are any\n" +"\t\tpods that are neither mirror pods nor managed by ReplicationController,\n" +"\t\tReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete " +"any pods unless you\n" +"\t\tuse --force. --force will also allow deletion to proceed if the " +"managing resource of one\n" +"\t\tor more pods is missing.\n" +"\n" +"\t\t'drain' waits for graceful termination. You should not operate on the " +"machine until\n" +"\t\tthe command completes.\n" +"\n" +"\t\tWhen you are ready to put the node back into service, use kubectl " +"uncordon, which\n" +"\t\twill make the node schedulable again.\n" +"\n" +"\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_drain.svg)" +msgstr "" +"\n" +"\t\tDrain node in preparation for maintenance.\n" +"\n" +"\t\tThe given node will be marked unschedulable to prevent new pods from " +"arriving.\n" +"\t\t'drain' evicts the pods if the APIServer supports eviction\n" +"\t\t(http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use " +"normal DELETE\n" +"\t\tto delete the pods.\n" +"\t\tThe 'drain' evicts or deletes all pods except mirror pods (which cannot " +"be deleted through\n" +"\t\tthe API server). If there are DaemonSet-managed pods, drain will not " +"proceed\n" +"\t\twithout --ignore-daemonsets, and regardless it will not delete any\n" +"\t\tDaemonSet-managed pods, because those pods would be immediately replaced " +"by the\n" +"\t\tDaemonSet controller, which ignores unschedulable markings. If there " +"are any\n" +"\t\tpods that are neither mirror pods nor managed by ReplicationController,\n" +"\t\tReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete " +"any pods unless you\n" +"\t\tuse —force. —force will also allow deletion to proceed if the managing " +"resource of one\n" +"\t\tor more pods is missing.\n" +"\n" +"\t\t’drain’ waits for graceful termination. You should not operate on the " +"machine until\n" +"\t\tthe command completes.\n" +"\n" +"\t\tWhen you are ready to put the node back into service, use kubectl " +"uncordon, which\n" +"\t\twill make the node schedulable again.\n" +"\n" +"\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_drain.svg)" + +#: pkg/kubectl/cmd/edit.go:56 +msgid "" +"\n" +"\t\tEdit a resource from the default editor.\n" +"\n" +"\t\tThe edit command allows you to directly edit any API resource you can " +"retrieve via the\n" +"\t\tcommand line tools. It will open the editor defined by your KUBE_EDITOR, " +"or EDITOR\n" +"\t\tenvironment variables, or fall back to 'vi' for Linux or 'notepad' for " +"Windows.\n" +"\t\tYou can edit multiple objects, although changes are applied one at a " +"time. The command\n" +"\t\taccepts filenames as well as command line arguments, although the files " +"you point to must\n" +"\t\tbe previously saved versions of resources.\n" +"\n" +"\t\tEditing is done with the API version used to fetch the resource.\n" +"\t\tTo edit using a specific API version, fully-qualify the resource, " +"version, and group.\n" +"\n" +"\t\tThe default format is YAML. To edit in JSON, specify \"-o json\".\n" +"\n" +"\t\tThe flag --windows-line-endings can be used to force Windows line " +"endings,\n" +"\t\totherwise the default for your operating system will be used.\n" +"\n" +"\t\tIn the event an error occurs while updating, a temporary file will be " +"created on disk\n" +"\t\tthat contains your unapplied changes. The most common error when " +"updating a resource\n" +"\t\tis another editor changing the resource on the server. When this occurs, " +"you will have\n" +"\t\tto apply your changes to the newer version of the resource, or update " +"your temporary\n" +"\t\tsaved copy to include the latest resource version." +msgstr "" +"\n" +"\t\tEdit a resource from the default editor.\n" +"\n" +"\t\tThe edit command allows you to directly edit any API resource you can " +"retrieve via the\n" +"\t\tcommand line tools. It will open the editor defined by your KUBE_EDITOR, " +"or EDITOR\n" +"\t\tenvironment variables, or fall back to 'vi' for Linux or 'notepad' for " +"Windows.\n" +"\t\tYou can edit multiple objects, although changes are applied one at a " +"time. The command\n" +"\t\taccepts filenames as well as command line arguments, although the files " +"you point to must\n" +"\t\tbe previously saved versions of resources.\n" +"\n" +"\t\tEditing is done with the API version used to fetch the resource.\n" +"\t\tTo edit using a specific API version, fully-qualify the resource, " +"version, and group.\n" +"\n" +"\t\tThe default format is YAML. To edit in JSON, specify “-o jsonâ€.\n" +"\n" +"\t\tThe flag —windows-line-endings can be used to force Windows line " +"endings,\n" +"\t\totherwise the default for your operating system will be used.\n" +"\n" +"\t\tIn the event an error occurs while updating, a temporary file will be " +"created on disk\n" +"\t\tthat contains your unapplied changes. The most common error when " +"updating a resource\n" +"\t\tis another editor changing the resource on the server. When this occurs, " +"you will have\n" +"\t\tto apply your changes to the newer version of the resource, or update " +"your temporary\n" +"\t\tsaved copy to include the latest resource version." + +#: pkg/kubectl/cmd/drain.go:115 +msgid "" +"\n" +"\t\tMark node as schedulable." +msgstr "" +"\n" +"\t\tMark node as schedulable." + +#: pkg/kubectl/cmd/drain.go:90 +msgid "" +"\n" +"\t\tMark node as unschedulable." +msgstr "" +"\n" +"\t\tMark node as unschedulable." + +#: pkg/kubectl/cmd/completion.go:47 +msgid "" +"\n" +"\t\tOutput shell completion code for the specified shell (bash or zsh).\n" +"\t\tThe shell code must be evaluated to provide interactive\n" +"\t\tcompletion of kubectl commands. This can be done by sourcing it from\n" +"\t\tthe .bash_profile.\n" +"\n" +"\t\tNote: this requires the bash-completion framework, which is not " +"installed\n" +"\t\tby default on Mac. This can be installed by using homebrew:\n" +"\n" +"\t\t $ brew install bash-completion\n" +"\n" +"\t\tOnce installed, bash_completion must be evaluated. This can be done by " +"adding the\n" +"\t\tfollowing line to the .bash_profile\n" +"\n" +"\t\t $ source $(brew --prefix)/etc/bash_completion\n" +"\n" +"\t\tNote for zsh users: [1] zsh completions are only supported in versions " +"of zsh >= 5.2" +msgstr "" +"\n" +"\t\tOutput shell completion code for the specified shell (bash or zsh).\n" +"\t\tThe shell code must be evaluated to provide interactive\n" +"\t\tcompletion of kubectl commands. This can be done by sourcing it from\n" +"\t\tthe .bash_profile.\n" +"\n" +"\t\tNote: this requires the bash-completion framework, which is not " +"installed\n" +"\t\tby default on Mac. This can be installed by using homebrew:\n" +"\n" +"\t\t $ brew install bash-completion\n" +"\n" +"\t\tOnce installed, bash_completion must be evaluated. This can be done by " +"adding the\n" +"\t\tfollowing line to the .bash_profile\n" +"\n" +"\t\t $ source $(brew —prefix)/etc/bash_completion\n" +"\n" +"\t\tNote for zsh users: [1] zsh completions are only supported in versions " +"of zsh >= 5.2" + +#: pkg/kubectl/cmd/rollingupdate.go:45 +msgid "" +"\n" +"\t\tPerform a rolling update of the given ReplicationController.\n" +"\n" +"\t\tReplaces the specified replication controller with a new replication " +"controller by updating one pod at a time to use the\n" +"\t\tnew PodTemplate. The new-controller.json must specify the same namespace " +"as the\n" +"\t\texisting replication controller and overwrite at least one (common) " +"label in its replicaSelector.\n" +"\n" +"\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_rollingupdate.svg)" +msgstr "" +"\n" +"\t\tPerform a rolling update of the given ReplicationController.\n" +"\n" +"\t\tReplaces the specified replication controller with a new replication " +"controller by updating one pod at a time to use the\n" +"\t\tnew PodTemplate. The new-controller.json must specify the same namespace " +"as the\n" +"\t\texisting replication controller and overwrite at least one (common) " +"label in its replicaSelector.\n" +"\n" +"\t\t![Workflow](http://kubernetes.io/images/docs/kubectl_rollingupdate.svg)" + +#: pkg/kubectl/cmd/replace.go:40 +msgid "" +"\n" +"\t\tReplace a resource by filename or stdin.\n" +"\n" +"\t\tJSON and YAML formats are accepted. If replacing an existing resource, " +"the\n" +"\t\tcomplete resource spec must be provided. This can be obtained by\n" +"\n" +"\t\t $ kubectl get TYPE NAME -o yaml\n" +"\n" +"\t\tPlease refer to the models in https://htmlpreview.github.io/?https://" +"github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions." +"html to find if a field is mutable." +msgstr "" +"\n" +"\t\tReplace a resource by filename or stdin.\n" +"\n" +"\t\tJSON and YAML formats are accepted. If replacing an existing resource, " +"the\n" +"\t\tcomplete resource spec must be provided. This can be obtained by\n" +"\n" +"\t\t $ kubectl get TYPE NAME -o yaml\n" +"\n" +"\t\tPlease refer to the models in https://htmlpreview.github.io/?https://" +"github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions." +"html to find if a field is mutable." + +#: pkg/kubectl/cmd/scale.go:34 +msgid "" +"\n" +"\t\tSet a new size for a Deployment, ReplicaSet, Replication Controller, or " +"Job.\n" +"\n" +"\t\tScale also allows users to specify one or more preconditions for the " +"scale action.\n" +"\n" +"\t\tIf --current-replicas or --resource-version is specified, it is " +"validated before the\n" +"\t\tscale is attempted, and it is guaranteed that the precondition holds " +"true when the\n" +"\t\tscale is sent to the server." +msgstr "" +"\n" +"\t\tSet a new size for a Deployment, ReplicaSet, Replication Controller, or " +"Job.\n" +"\n" +"\t\tScale also allows users to specify one or more preconditions for the " +"scale action.\n" +"\n" +"\t\tIf —current-replicas or —resource-version is specified, it is validated " +"before the\n" +"\t\tscale is attempted, and it is guaranteed that the precondition holds " +"true when the\n" +"\t\tscale is sent to the server." + +#: pkg/kubectl/cmd/apply_set_last_applied.go:62 +msgid "" +"\n" +"\t\tSet the latest last-applied-configuration annotations by setting it to " +"match the contents of a file.\n" +"\t\tThis results in the last-applied-configuration being updated as though " +"'kubectl apply -f ' was run,\n" +"\t\twithout updating any other parts of the object." +msgstr "" +"\n" +"\t\tSet the latest last-applied-configuration annotations by setting it to " +"match the contents of a file.\n" +"\t\tThis results in the last-applied-configuration being updated as though " +"‘kubectl apply -f ’ was run,\n" +"\t\twithout updating any other parts of the object." + +#: pkg/kubectl/cmd/proxy.go:36 +msgid "" +"\n" +"\t\tTo proxy all of the kubernetes api and nothing else, use:\n" +"\n" +"\t\t $ kubectl proxy --api-prefix=/\n" +"\n" +"\t\tTo proxy only part of the kubernetes api and also some static files:\n" +"\n" +"\t\t $ kubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/" +"api/\n" +"\n" +"\t\tThe above lets you 'curl localhost:8001/api/v1/pods'.\n" +"\n" +"\t\tTo proxy the entire kubernetes api at a different root, use:\n" +"\n" +"\t\t $ kubectl proxy --api-prefix=/custom/\n" +"\n" +"\t\tThe above lets you 'curl localhost:8001/custom/api/v1/pods'" +msgstr "" +"\n" +"\t\tTo proxy all of the kubernetes api and nothing else, use:\n" +"\n" +"\t\t $ kubectl proxy —api-prefix=/\n" +"\n" +"\t\tTo proxy only part of the kubernetes api and also some static files:\n" +"\n" +"\t\t $ kubectl proxy —www=/my/files —www-prefix=/static/ —api-prefix=/" +"api/\n" +"\n" +"\t\tThe above lets you ‘curl localhost:8001/api/v1/pods’.\n" +"\n" +"\t\tTo proxy the entire kubernetes api at a different root, use:\n" +"\n" +"\t\t $ kubectl proxy —api-prefix=/custom/\n" +"\n" +"\t\tThe above lets you ‘curl localhost:8001/custom/api/v1/pods’" + +#: pkg/kubectl/cmd/patch.go:59 +msgid "" +"\n" +"\t\tUpdate field(s) of a resource using strategic merge patch\n" +"\n" +"\t\tJSON and YAML formats are accepted.\n" +"\n" +"\t\tPlease refer to the models in https://htmlpreview.github.io/?https://" +"github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions." +"html to find if a field is mutable." +msgstr "" +"\n" +"\t\tUpdate field(s) of a resource using strategic merge patch\n" +"\n" +"\t\tJSON and YAML formats are accepted.\n" +"\n" +"\t\tPlease refer to the models in https://htmlpreview.github.io/?https://" +"github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions." +"html to find if a field is mutable." + +#: pkg/kubectl/cmd/label.go:70 +#, c-format +msgid "" +"\n" +"\t\tUpdate the labels on a resource.\n" +"\n" +"\t\t* A label must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[1]d characters.\n" +"\t\t* If --overwrite is true, then existing labels can be overwritten, " +"otherwise attempting to overwrite a label will result in an error.\n" +"\t\t* If --resource-version is specified, then updates will use this " +"resource version, otherwise the existing resource-version will be used." +msgstr "" +"\n" +"\t\tUpdate the labels on a resource.\n" +"\n" +"\t\t* A label must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[1]d characters.\n" +"\t\t* If —overwrite is true, then existing labels can be overwritten, " +"otherwise attempting to overwrite a label will result in an error.\n" +"\t\t* If —resource-version is specified, then updates will use this resource " +"version, otherwise the existing resource-version will be used." + +#: pkg/kubectl/cmd/taint.go:58 +#, c-format +msgid "" +"\n" +"\t\tUpdate the taints on one or more nodes.\n" +"\n" +"\t\t* A taint consists of a key, value, and effect. As an argument here, it " +"is expressed as key=value:effect.\n" +"\t\t* The key must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[1]d characters.\n" +"\t\t* The value must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[2]d characters.\n" +"\t\t* The effect must be NoSchedule, PreferNoSchedule or NoExecute.\n" +"\t\t* Currently taint can only apply to node." +msgstr "" +"\n" +"\t\tUpdate the taints on one or more nodes.\n" +"\n" +"\t\t* A taint consists of a key, value, and effect. As an argument here, it " +"is expressed as key=value:effect.\n" +"\t\t* The key must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[1]d characters.\n" +"\t\t* The value must begin with a letter or number, and may contain letters, " +"numbers, hyphens, dots, and underscores, up to %[2]d characters.\n" +"\t\t* The effect must be NoSchedule, PreferNoSchedule or NoExecute.\n" +"\t\t* Currently taint can only apply to node." + +#: pkg/kubectl/cmd/apply_view_last_applied.go:46 +msgid "" +"\n" +"\t\tView the latest last-applied-configuration annotations by type/name or " +"file.\n" +"\n" +"\t\tThe default output will be printed to stdout in YAML format. One can use " +"-o option\n" +"\t\tto change output format." +msgstr "" +"\n" +"\t\tView the latest last-applied-configuration annotations by type/name or " +"file.\n" +"\n" +"\t\tThe default output will be printed to stdout in YAML format. One can use " +"-o option\n" +"\t\tto change output format." + +#: pkg/kubectl/cmd/cp.go:37 +msgid "" +"\n" +"\t # !!!Important Note!!!\n" +"\t # Requires that the 'tar' binary is present in your container\n" +"\t # image. If 'tar' is not present, 'kubectl cp' will fail.\n" +"\n" +"\t # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in " +"the default namespace\n" +"\t\tkubectl cp /tmp/foo_dir :/tmp/bar_dir\n" +"\n" +" # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific " +"container\n" +"\t\tkubectl cp /tmp/foo :/tmp/bar -c \n" +"\n" +"\t\t# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace " +"\n" +"\t\tkubectl cp /tmp/foo /:/tmp/bar\n" +"\n" +"\t\t# Copy /tmp/foo from a remote pod to /tmp/bar locally\n" +"\t\tkubectl cp /:/tmp/foo /tmp/bar" +msgstr "" +"\n" +"\t # !!!Important Note!!!\n" +"\t # Requires that the ‘tar’ binary is present in your container\n" +"\t # image. If ‘tar’ is not present, ‘kubectl cp’ will fail.\n" +"\n" +"\t # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in " +"the default namespace\n" +"\t\tkubectl cp /tmp/foo_dir :/tmp/bar_dir\n" +"\n" +" # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific " +"container\n" +"\t\tkubectl cp /tmp/foo :/tmp/bar -c \n" +"\n" +"\t\t# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace " +"\n" +"\t\tkubectl cp /tmp/foo /:/tmp/bar\n" +"\n" +"\t\t# Copy /tmp/foo from a remote pod to /tmp/bar locally\n" +"\t\tkubectl cp /:/tmp/foo /tmp/bar" + +#: pkg/kubectl/cmd/create_secret.go:205 +msgid "" +"\n" +"\t # Create a new TLS secret named tls-secret with the given key pair:\n" +"\t kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/" +"to/tls.key" +msgstr "" +"\n" +"\t # Create a new TLS secret named tls-secret with the given key pair:\n" +"\t kubectl create secret tls tls-secret —cert=path/to/tls.cert —key=path/to/" +"tls.key" + +#: pkg/kubectl/cmd/create_namespace.go:35 +msgid "" +"\n" +"\t # Create a new namespace named my-namespace\n" +"\t kubectl create namespace my-namespace" +msgstr "" +"\n" +"\t # Create a new namespace named my-namespace\n" +"\t kubectl create namespace my-namespace" + +#: pkg/kubectl/cmd/create_secret.go:59 +msgid "" +"\n" +"\t # Create a new secret named my-secret with keys for each file in folder " +"bar\n" +"\t kubectl create secret generic my-secret --from-file=path/to/bar\n" +"\n" +"\t # Create a new secret named my-secret with specified keys instead of " +"names on disk\n" +"\t kubectl create secret generic my-secret --from-file=ssh-privatekey=~/." +"ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub\n" +"\n" +"\t # Create a new secret named my-secret with key1=supersecret and " +"key2=topsecret\n" +"\t kubectl create secret generic my-secret --from-literal=key1=supersecret " +"--from-literal=key2=topsecret" +msgstr "" +"\n" +"\t # Create a new secret named my-secret with keys for each file in folder " +"bar\n" +"\t kubectl create secret generic my-secret —from-file=path/to/bar\n" +"\n" +"\t # Create a new secret named my-secret with specified keys instead of " +"names on disk\n" +"\t kubectl create secret generic my-secret —from-file=ssh-privatekey=~/.ssh/" +"id_rsa —from-file=ssh-publickey=~/.ssh/id_rsa.pub\n" +"\n" +"\t # Create a new secret named my-secret with key1=supersecret and " +"key2=topsecret\n" +"\t kubectl create secret generic my-secret —from-literal=key1=supersecret —" +"from-literal=key2=topsecret" + +#: pkg/kubectl/cmd/create_serviceaccount.go:35 +msgid "" +"\n" +"\t # Create a new service account named my-service-account\n" +"\t kubectl create serviceaccount my-service-account" +msgstr "" +"\n" +"\t # Create a new service account named my-service-account\n" +"\t kubectl create serviceaccount my-service-account" + +#: pkg/kubectl/cmd/create_service.go:232 +msgid "" +"\n" +"\t# Create a new ExternalName service named my-ns \n" +"\tkubectl create service externalname my-ns --external-name bar.com" +msgstr "" +"\n" +"\t# Create a new ExternalName service named my-ns \n" +"\tkubectl create service externalname my-ns —external-name bar.com" + +#: pkg/kubectl/cmd/create_service.go:225 +msgid "" +"\n" +"\tCreate an ExternalName service with the specified name.\n" +"\n" +"\tExternalName service references to an external DNS address instead of\n" +"\tonly pods, which will allow application authors to reference services\n" +"\tthat exist off platform, on other clusters, or locally." +msgstr "" +"\n" +"\tCreate an ExternalName service with the specified name.\n" +"\n" +"\tExternalName service references to an external DNS address instead of\n" +"\tonly pods, which will allow application authors to reference services\n" +"\tthat exist off platform, on other clusters, or locally." + +#: pkg/kubectl/cmd/help.go:30 +msgid "" +"\n" +"\tHelp provides help for any command in the application.\n" +"\tSimply type kubectl help [path to command] for full details." +msgstr "" +"\n" +"\tHelp provides help for any command in the application.\n" +"\tSimply type kubectl help [path to command] for full details." + +#: pkg/kubectl/cmd/create_service.go:173 +msgid "" +"\n" +" # Create a new LoadBalancer service named my-lbs\n" +" kubectl create service loadbalancer my-lbs --tcp=5678:8080" +msgstr "" +"\n" +" # Create a new LoadBalancer service named my-lbs\n" +" kubectl create service loadbalancer my-lbs —tcp=5678:8080" + +#: pkg/kubectl/cmd/create_service.go:53 +msgid "" +"\n" +" # Create a new clusterIP service named my-cs\n" +" kubectl create service clusterip my-cs --tcp=5678:8080\n" +"\n" +" # Create a new clusterIP service named my-cs (in headless mode)\n" +" kubectl create service clusterip my-cs --clusterip=\"None\"" +msgstr "" +"\n" +" # Create a new clusterIP service named my-cs\n" +" kubectl create service clusterip my-cs —tcp=5678:8080\n" +"\n" +" # Create a new clusterIP service named my-cs (in headless mode)\n" +" kubectl create service clusterip my-cs —clusterip=“Noneâ€" + +#: pkg/kubectl/cmd/create_deployment.go:36 +msgid "" +"\n" +" # Create a new deployment named my-dep that runs the busybox image.\n" +" kubectl create deployment my-dep --image=busybox" +msgstr "" +"\n" +" # Create a new deployment named my-dep that runs the busybox image.\n" +" kubectl create deployment my-dep —image=busybox" + +#: pkg/kubectl/cmd/create_service.go:116 +msgid "" +"\n" +" # Create a new nodeport service named my-ns\n" +" kubectl create service nodeport my-ns --tcp=5678:8080" +msgstr "" +"\n" +" # Create a new nodeport service named my-ns\n" +" kubectl create service nodeport my-ns —tcp=5678:8080" + +#: pkg/kubectl/cmd/clusterinfo_dump.go:62 +msgid "" +"\n" +" # Dump current cluster state to stdout\n" +" kubectl cluster-info dump\n" +"\n" +" # Dump current cluster state to /path/to/cluster-state\n" +" kubectl cluster-info dump --output-directory=/path/to/cluster-state\n" +"\n" +" # Dump all namespaces to stdout\n" +" kubectl cluster-info dump --all-namespaces\n" +"\n" +" # Dump a set of namespaces to /path/to/cluster-state\n" +" kubectl cluster-info dump --namespaces default,kube-system --output-" +"directory=/path/to/cluster-state" +msgstr "" +"\n" +" # Dump current cluster state to stdout\n" +" kubectl cluster-info dump\n" +"\n" +" # Dump current cluster state to /path/to/cluster-state\n" +" kubectl cluster-info dump —output-directory=/path/to/cluster-state\n" +"\n" +" # Dump all namespaces to stdout\n" +" kubectl cluster-info dump —all-namespaces\n" +"\n" +" # Dump a set of namespaces to /path/to/cluster-state\n" +" kubectl cluster-info dump —namespaces default,kube-system —output-" +"directory=/path/to/cluster-state" + +#: pkg/kubectl/cmd/annotate.go:78 +msgid "" +"\n" +" # Update pod 'foo' with the annotation 'description' and the value 'my " +"frontend'.\n" +" # If the same annotation is set multiple times, only the last value will " +"be applied\n" +" kubectl annotate pods foo description='my frontend'\n" +"\n" +" # Update a pod identified by type and name in \"pod.json\"\n" +" kubectl annotate -f pod.json description='my frontend'\n" +"\n" +" # Update pod 'foo' with the annotation 'description' and the value 'my " +"frontend running nginx', overwriting any existing value.\n" +" kubectl annotate --overwrite pods foo description='my frontend running " +"nginx'\n" +"\n" +" # Update all pods in the namespace\n" +" kubectl annotate pods --all description='my frontend running nginx'\n" +"\n" +" # Update pod 'foo' only if the resource is unchanged from version 1.\n" +" kubectl annotate pods foo description='my frontend running nginx' --" +"resource-version=1\n" +"\n" +" # Update pod 'foo' by removing an annotation named 'description' if it " +"exists.\n" +" # Does not require the --overwrite flag.\n" +" kubectl annotate pods foo description-" +msgstr "" +"\n" +" # Update pod 'foo' with the annotation 'description' and the value 'my " +"frontend'.\n" +" # If the same annotation is set multiple times, only the last value will " +"be applied\n" +" kubectl annotate pods foo description='my frontend'\n" +"\n" +" # Update a pod identified by type and name in \"pod.json\"\n" +" kubectl annotate -f pod.json description=‘my frontend’\n" +"\n" +" # Update pod ‘foo’ with the annotation ‘description’ and the value ‘my " +"frontend running nginx’, overwriting any existing value.\n" +" kubectl annotate —overwrite pods foo description=‘my frontend running " +"nginx’\n" +"\n" +" # Update all pods in the namespace\n" +" kubectl annotate pods —all description=‘my frontend running nginx’\n" +"\n" +" # Update pod ‘foo’ only if the resource is unchanged from version 1.\n" +" kubectl annotate pods foo description=‘my frontend running nginx’ —" +"resource-version=1\n" +"\n" +" # Update pod ‘foo’ by removing an annotation named ‘description’ if it " +"exists.\n" +" # Does not require the —overwrite flag.\n" +" kubectl annotate pods foo description-" + +#: pkg/kubectl/cmd/create_service.go:170 +msgid "" +"\n" +" Create a LoadBalancer service with the specified name." +msgstr "" +"\n" +" Create a LoadBalancer service with the specified name." + +#: pkg/kubectl/cmd/create_service.go:50 +msgid "" +"\n" +" Create a clusterIP service with the specified name." +msgstr "" +"\n" +" Create a clusterIP service with the specified name." + +#: pkg/kubectl/cmd/create_deployment.go:33 +msgid "" +"\n" +" Create a deployment with the specified name." +msgstr "" +"\n" +" Create a deployment with the specified name." + +#: pkg/kubectl/cmd/create_service.go:113 +msgid "" +"\n" +" Create a nodeport service with the specified name." +msgstr "" +"\n" +" Create a nodeport service with the specified name." + +#: pkg/kubectl/cmd/clusterinfo_dump.go:53 +msgid "" +"\n" +" Dumps cluster info out suitable for debugging and diagnosing cluster " +"problems. By default, dumps everything to\n" +" stdout. You can optionally specify a directory with --output-directory. " +"If you specify a directory, kubernetes will\n" +" build a set of files in that directory. By default only dumps things in " +"the 'kube-system' namespace, but you can\n" +" switch to a different namespace with the --namespaces flag, or specify --" +"all-namespaces to dump all namespaces.\n" +"\n" +" The command also dumps the logs of all of the pods in the cluster, these " +"logs are dumped into different directories\n" +" based on namespace and pod name." +msgstr "" +"\n" +" Dumps cluster info out suitable for debugging and diagnosing cluster " +"problems. By default, dumps everything to\n" +" stdout. You can optionally specify a directory with —output-directory. " +"If you specify a directory, kubernetes will\n" +" build a set of files in that directory. By default only dumps things in " +"the ‘kube-system’ namespace, but you can\n" +" switch to a different namespace with the —namespaces flag, or specify —" +"all-namespaces to dump all namespaces.\n" +"\n" +" The command also dumps the logs of all of the pods in the cluster, these " +"logs are dumped into different directories\n" +" based on namespace and pod name." + +#: pkg/kubectl/cmd/clusterinfo.go:37 +msgid "" +"\n" +" Display addresses of the master and services with label kubernetes.io/" +"cluster-service=true\n" +" To further debug and diagnose cluster problems, use 'kubectl cluster-info " +"dump'." +msgstr "" +"\n" +" Display addresses of the master and services with label kubernetes.io/" +"cluster-service=true\n" +" To further debug and diagnose cluster problems, use ‘kubectl cluster-info " +"dump’." + +#: pkg/kubectl/cmd/create_quota.go:62 +msgid "" +"A comma-delimited set of quota scopes that must all match each object " +"tracked by the quota." +msgstr "" +"A comma-delimited set of quota scopes that must all match each object " +"tracked by the quota." + +#: pkg/kubectl/cmd/create_quota.go:61 +msgid "" +"A comma-delimited set of resource=quantity pairs that define a hard limit." +msgstr "" +"A comma-delimited set of resource=quantity pairs that define a hard limit." + +#: pkg/kubectl/cmd/create_pdb.go:64 +msgid "" +"A label selector to use for this budget. Only equality-based selector " +"requirements are supported." +msgstr "" +"A label selector to use for this budget. Only equality-based selector " +"requirements are supported." + +#: pkg/kubectl/cmd/expose.go:104 +msgid "" +"A label selector to use for this service. Only equality-based selector " +"requirements are supported. If empty (the default) infer the selector from " +"the replication controller or replica set.)" +msgstr "" +"A label selector to use for this service. Only equality-based selector " +"requirements are supported. If empty (the default) infer the selector from " +"the replication controller or replica set.)" + +#: pkg/kubectl/cmd/run.go:139 +msgid "A schedule in the Cron format the job should be run with." +msgstr "A schedule in the Cron format the job should be run with." + +#: pkg/kubectl/cmd/expose.go:109 +msgid "" +"Additional external IP address (not managed by Kubernetes) to accept for the " +"service. If this IP is routed to a node, the service can be accessed by this " +"IP in addition to its generated service IP." +msgstr "" +"Additional external IP address (not managed by Kubernetes) to accept for the " +"service. If this IP is routed to a node, the service can be accessed by this " +"IP in addition to its generated service IP." + +#: pkg/kubectl/cmd/expose.go:110 pkg/kubectl/cmd/run.go:122 +msgid "" +"An inline JSON override for the generated object. If this is non-empty, it " +"is used to override the generated object. Requires that the object supply a " +"valid apiVersion field." +msgstr "" +"An inline JSON override for the generated object. If this is non-empty, it " +"is used to override the generated object. Requires that the object supply a " +"valid apiVersion field." + +#: pkg/kubectl/cmd/run.go:137 +msgid "" +"An inline JSON override for the generated service object. If this is non-" +"empty, it is used to override the generated object. Requires that the object " +"supply a valid apiVersion field. Only used if --expose is true." +msgstr "" +"An inline JSON override for the generated service object. If this is non-" +"empty, it is used to override the generated object. Requires that the object " +"supply a valid apiVersion field. Only used if —expose is true." # https://github.com/kubernetes/kubernetes/blob/masterpkg/kubectl/cmd/apply.go#L98 +#: pkg/kubectl/cmd/apply.go:104 msgid "Apply a configuration to a resource by filename or stdin" msgstr "ファイルåを指定ã¾ãŸã¯æ¨™æº–入力経由ã§ãƒªã‚½ãƒ¼ã‚¹ã«ã‚³ãƒ³ãƒ•ィグをé©ç”¨ã™ã‚‹" +#: pkg/kubectl/cmd/certificates.go:72 +msgid "Approve a certificate signing request" +msgstr "Approve a certificate signing request" + +#: pkg/kubectl/cmd/create_service.go:82 +msgid "" +"Assign your own ClusterIP or set to 'None' for a 'headless' service (no " +"loadbalancing)." +msgstr "" +"Assign your own ClusterIP or set to ‘None’ for a ‘headless’ service (no " +"loadbalancing)." + +#: pkg/kubectl/cmd/attach.go:70 +msgid "Attach to a running container" +msgstr "Attach to a running container" + +#: pkg/kubectl/cmd/autoscale.go:56 +msgid "Auto-scale a Deployment, ReplicaSet, or ReplicationController" +msgstr "Auto-scale a Deployment, ReplicaSet, or ReplicationController" + +#: pkg/kubectl/cmd/expose.go:113 +msgid "" +"ClusterIP to be assigned to the service. Leave empty to auto-allocate, or " +"set to 'None' to create a headless service." +msgstr "" +"ClusterIP to be assigned to the service. Leave empty to auto-allocate, or " +"set to ‘None’ to create a headless service." + +#: pkg/kubectl/cmd/create_clusterrolebinding.go:56 +msgid "ClusterRole this ClusterRoleBinding should reference" +msgstr "ClusterRole this ClusterRoleBinding should reference" + +#: pkg/kubectl/cmd/create_rolebinding.go:56 +msgid "ClusterRole this RoleBinding should reference" +msgstr "ClusterRole this RoleBinding should reference" + +#: pkg/kubectl/cmd/rollingupdate.go:102 +msgid "" +"Container name which will have its image upgraded. Only relevant when --" +"image is specified, ignored otherwise. Required when using --image on a " +"multi-container pod" +msgstr "" +"Container name which will have its image upgraded. Only relevant when —image " +"is specified, ignored otherwise. Required when using —image on a multi-" +"container pod" + +#: pkg/kubectl/cmd/convert.go:68 +msgid "Convert config files between different API versions" +msgstr "Convert config files between different API versions" + +#: pkg/kubectl/cmd/cp.go:65 +msgid "Copy files and directories to and from containers." +msgstr "Copy files and directories to and from containers." + +#: pkg/kubectl/cmd/create_clusterrolebinding.go:44 +msgid "Create a ClusterRoleBinding for a particular ClusterRole" +msgstr "Create a ClusterRoleBinding for a particular ClusterRole" + +#: pkg/kubectl/cmd/create_service.go:182 +msgid "Create a LoadBalancer service." +msgstr "Create a LoadBalancer service." + +#: pkg/kubectl/cmd/create_service.go:125 +msgid "Create a NodePort service." +msgstr "Create a NodePort service." + +#: pkg/kubectl/cmd/create_rolebinding.go:44 +msgid "Create a RoleBinding for a particular Role or ClusterRole" +msgstr "Create a RoleBinding for a particular Role or ClusterRole" + +#: pkg/kubectl/cmd/create_secret.go:214 +msgid "Create a TLS secret" +msgstr "Create a TLS secret" + +#: pkg/kubectl/cmd/create_service.go:69 +msgid "Create a clusterIP service." +msgstr "Create a clusterIP service." + +#: pkg/kubectl/cmd/create_configmap.go:60 +msgid "Create a configmap from a local file, directory or literal value" +msgstr "Create a configmap from a local file, directory or literal value" + +#: pkg/kubectl/cmd/create_deployment.go:46 +msgid "Create a deployment with the specified name." +msgstr "Create a deployment with the specified name." + +#: pkg/kubectl/cmd/create_namespace.go:45 +msgid "Create a namespace with the specified name" +msgstr "Create a namespace with the specified name" + +#: pkg/kubectl/cmd/create_pdb.go:50 +msgid "Create a pod disruption budget with the specified name." +msgstr "Create a pod disruption budget with the specified name." + +#: pkg/kubectl/cmd/create_quota.go:48 +msgid "Create a quota with the specified name." +msgstr "Create a quota with the specified name." + +# https://github.com/kubernetes/kubernetes/blob/masterpkg/kubectl/cmd/apply.go#L98 +#: pkg/kubectl/cmd/create.go:63 +msgid "Create a resource by filename or stdin" +msgstr "ファイルåを指定ã¾ãŸã¯æ¨™æº–入力経由ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹" + +#: pkg/kubectl/cmd/create_secret.go:144 +msgid "Create a secret for use with a Docker registry" +msgstr "Create a secret for use with a Docker registry" + +#: pkg/kubectl/cmd/create_secret.go:74 +msgid "Create a secret from a local file, directory or literal value" +msgstr "Create a secret from a local file, directory or literal value" + +#: pkg/kubectl/cmd/create_secret.go:35 +msgid "Create a secret using specified subcommand" +msgstr "Create a secret using specified subcommand" + +#: pkg/kubectl/cmd/create_serviceaccount.go:45 +msgid "Create a service account with the specified name" +msgstr "Create a service account with the specified name" + +#: pkg/kubectl/cmd/create_service.go:37 +msgid "Create a service using specified subcommand." +msgstr "Create a service using specified subcommand." + +#: pkg/kubectl/cmd/create_service.go:241 +msgid "Create an ExternalName service." +msgstr "Create an ExternalName service." + +#: pkg/kubectl/cmd/delete.go:132 +msgid "" +"Delete resources by filenames, stdin, resources and names, or by resources " +"and label selector" +msgstr "" +"Delete resources by filenames, stdin, resources and names, or by resources " +"and label selector" + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_cluster.go#L38 +#: pkg/kubectl/cmd/config/delete_cluster.go:39 msgid "Delete the specified cluster from the kubeconfig" msgstr "kubeconfigã‹ã‚‰æŒ‡å®šã—ãŸã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’削除ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_context.go#L38 +#: pkg/kubectl/cmd/config/delete_context.go:39 msgid "Delete the specified context from the kubeconfig" msgstr "kubeconfigã‹ã‚‰æŒ‡å®šã—ãŸã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’削除ã™ã‚‹" +#: pkg/kubectl/cmd/certificates.go:122 +msgid "Deny a certificate signing request" +msgstr "Deny a certificate signing request" + +#: pkg/kubectl/cmd/stop.go:59 +msgid "Deprecated: Gracefully shut down a resource by name or filename" +msgstr "Deprecated: Gracefully shut down a resource by name or filename" + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/get_contexts.go#L62 +#: pkg/kubectl/cmd/config/get_contexts.go:64 msgid "Describe one or many contexts" msgstr "1ã¤ã¾ãŸã¯è¤‡æ•°ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’記述ã™ã‚‹" +#: pkg/kubectl/cmd/top_node.go:78 +msgid "Display Resource (CPU/Memory) usage of nodes" +msgstr "Display Resource (CPU/Memory) usage of nodes" + +#: pkg/kubectl/cmd/top_pod.go:80 +msgid "Display Resource (CPU/Memory) usage of pods" +msgstr "Display Resource (CPU/Memory) usage of pods" + +#: pkg/kubectl/cmd/top.go:44 +msgid "Display Resource (CPU/Memory) usage." +msgstr "Display Resource (CPU/Memory) usage." + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/get_clusters.go#L40 +#: pkg/kubectl/cmd/clusterinfo.go:51 +#| msgid "Display clusters defined in the kubeconfig" +msgid "Display cluster info" +msgstr "ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®æƒ…報を表示ã™ã‚‹" + +# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/get_clusters.go#L40 +#: pkg/kubectl/cmd/config/get_clusters.go:41 msgid "Display clusters defined in the kubeconfig" msgstr "kubeconfigã§å®šç¾©ã•れãŸã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’表示ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/view.go#L64 +#: pkg/kubectl/cmd/config/view.go:67 msgid "Display merged kubeconfig settings or a specified kubeconfig file" -msgstr "マージã•れãŸkubeconfigã®è¨­å®šã¾ãŸã¯æŒ‡å®šã•れãŸkubeconfigファイルを表示ã™ã‚‹" +msgstr "" +"マージã•れãŸkubeconfigã®è¨­å®šã¾ãŸã¯æŒ‡å®šã•れãŸkubeconfigファイルを表示ã™ã‚‹" + +# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/get_contexts.go#L62 +#: pkg/kubectl/cmd/get.go:111 +msgid "Display one or many resources" +msgstr "1ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’表示ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/current_context.go#L48 +#: pkg/kubectl/cmd/config/current_context.go:49 msgid "Displays the current-context" msgstr "カレントコンテキストを表示ã™ã‚‹" +#: pkg/kubectl/cmd/explain.go:51 +msgid "Documentation of resources" +msgstr "リソースã®èª¬æ˜Žã‚’表示ã™ã‚‹" + +#: pkg/kubectl/cmd/drain.go:178 +msgid "Drain node in preparation for maintenance" +msgstr "Drain node in preparation for maintenance" + +#: pkg/kubectl/cmd/clusterinfo_dump.go:39 +msgid "Dump lots of relevant info for debugging and diagnosis" +msgstr "Dump lots of relevant info for debugging and diagnosis" + +#: pkg/kubectl/cmd/edit.go:110 +msgid "Edit a resource on the server" +msgstr "Edit a resource on the server" + +#: pkg/kubectl/cmd/create_secret.go:160 +msgid "Email for Docker registry" +msgstr "Email for Docker registry" + +#: pkg/kubectl/cmd/exec.go:69 +msgid "Execute a command in a container" +msgstr "Execute a command in a container" + +#: pkg/kubectl/cmd/rollingupdate.go:103 +msgid "" +"Explicit policy for when to pull container images. Required when --image is " +"same as existing image, ignored otherwise." +msgstr "" +"Explicit policy for when to pull container images. Required when —image is " +"same as existing image, ignored otherwise." + +#: pkg/kubectl/cmd/portforward.go:76 +msgid "Forward one or more local ports to a pod" +msgstr "Forward one or more local ports to a pod" + +#: pkg/kubectl/cmd/help.go:37 +msgid "Help about any command" +msgstr "Help about any command" + +#: pkg/kubectl/cmd/expose.go:103 +msgid "" +"IP to assign to the Load Balancer. If empty, an ephemeral IP will be created " +"and used (cloud-provider specific)." +msgstr "" +"IP to assign to the Load Balancer. If empty, an ephemeral IP will be created " +"and used (cloud-provider specific)." + +#: pkg/kubectl/cmd/expose.go:112 +msgid "" +"If non-empty, set the session affinity for the service to this; legal " +"values: 'None', 'ClientIP'" +msgstr "" +"If non-empty, set the session affinity for the service to this; legal " +"values: ‘None’, ‘ClientIP’" + +#: pkg/kubectl/cmd/annotate.go:136 +msgid "" +"If non-empty, the annotation update will only succeed if this is the current " +"resource-version for the object. Only valid when specifying a single " +"resource." +msgstr "" +"If non-empty, the annotation update will only succeed if this is the current " +"resource-version for the object. Only valid when specifying a single " +"resource." + +#: pkg/kubectl/cmd/label.go:134 +msgid "" +"If non-empty, the labels update will only succeed if this is the current " +"resource-version for the object. Only valid when specifying a single " +"resource." +msgstr "" +"If non-empty, the labels update will only succeed if this is the current " +"resource-version for the object. Only valid when specifying a single " +"resource." + +#: pkg/kubectl/cmd/rollingupdate.go:99 +msgid "" +"Image to use for upgrading the replication controller. Must be distinct from " +"the existing image (either new image or new image tag). Can not be used " +"with --filename/-f" +msgstr "" +"Image to use for upgrading the replication controller. Must be distinct from " +"the existing image (either new image or new image tag). Can not be used " +"with —filename/-f" + +#: pkg/kubectl/cmd/rollout/rollout.go:47 +msgid "Manage a deployment rollout" +msgstr "Manage a deployment rollout" + +#: pkg/kubectl/cmd/drain.go:128 +msgid "Mark node as schedulable" +msgstr "Mark node as schedulable" + +#: pkg/kubectl/cmd/drain.go:103 +msgid "Mark node as unschedulable" +msgstr "Mark node as unschedulable" + +#: pkg/kubectl/cmd/rollout/rollout_pause.go:74 +msgid "Mark the provided resource as paused" +msgstr "Mark the provided resource as paused" + +#: pkg/kubectl/cmd/certificates.go:36 +msgid "Modify certificate resources." +msgstr "Modify certificate resources." + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/config.go#L39 +#: pkg/kubectl/cmd/config/config.go:40 msgid "Modify kubeconfig files" msgstr "kubeconfigファイルを変更ã™ã‚‹" +#: pkg/kubectl/cmd/expose.go:108 +msgid "" +"Name or number for the port on the container that the service should direct " +"traffic to. Optional." +msgstr "" +"Name or number for the port on the container that the service should direct " +"traffic to. Optional." + +#: pkg/kubectl/cmd/logs.go:113 +msgid "" +"Only return logs after a specific date (RFC3339). Defaults to all logs. Only " +"one of since-time / since may be used." +msgstr "" +"Only return logs after a specific date (RFC3339). Defaults to all logs. Only " +"one of since-time / since may be used." + +#: pkg/kubectl/cmd/completion.go:104 +msgid "Output shell completion code for the specified shell (bash or zsh)" +msgstr "Output shell completion code for the specified shell (bash or zsh)" + +#: pkg/kubectl/cmd/convert.go:85 +msgid "" +"Output the formatted object with the given group version (for ex: " +"'extensions/v1beta1').)" +msgstr "" +"Output the formatted object with the given group version (for ex: " +"‘extensions/v1beta1’).)" + +#: pkg/kubectl/cmd/create_secret.go:158 +msgid "Password for Docker registry authentication" +msgstr "Password for Docker registry authentication" + +#: pkg/kubectl/cmd/create_secret.go:226 +msgid "Path to PEM encoded public key certificate." +msgstr "Path to PEM encoded public key certificate." + +#: pkg/kubectl/cmd/create_secret.go:227 +msgid "Path to private key associated with given certificate." +msgstr "Path to private key associated with given certificate." + +#: pkg/kubectl/cmd/rollingupdate.go:85 +msgid "Perform a rolling update of the given ReplicationController" +msgstr "Perform a rolling update of the given ReplicationController" + +#: pkg/kubectl/cmd/scale.go:83 +msgid "" +"Precondition for resource version. Requires that the current resource " +"version match this value in order to scale." +msgstr "" +"Precondition for resource version. Requires that the current resource " +"version match this value in order to scale." + +#: pkg/kubectl/cmd/version.go:40 +msgid "Print the client and server version information" +msgstr "Print the client and server version information" + +#: pkg/kubectl/cmd/options.go:38 +msgid "Print the list of flags inherited by all commands" +msgstr "Print the list of flags inherited by all commands" + +#: pkg/kubectl/cmd/logs.go:93 +msgid "Print the logs for a container in a pod" +msgstr "Print the logs for a container in a pod" + +# https://github.com/kubernetes/kubernetes/blob/masterpkg/kubectl/cmd/apply.go#L98 +#: pkg/kubectl/cmd/replace.go:71 +msgid "Replace a resource by filename or stdin" +msgstr "Replace a resource by filename or stdin" + +#: pkg/kubectl/cmd/rollout/rollout_resume.go:72 +msgid "Resume a paused resource" +msgstr "Resume a paused resource" + +#: pkg/kubectl/cmd/create_rolebinding.go:57 +msgid "Role this RoleBinding should reference" +msgstr "Role this RoleBinding should reference" + +#: pkg/kubectl/cmd/run.go:97 +msgid "Run a particular image on the cluster" +msgstr "Run a particular image on the cluster" + +#: pkg/kubectl/cmd/proxy.go:69 +msgid "Run a proxy to the Kubernetes API server" +msgstr "Run a proxy to the Kubernetes API server" + +#: pkg/kubectl/cmd/create_secret.go:161 +msgid "Server location for Docker registry" +msgstr "Server location for Docker registry" + +#: pkg/kubectl/cmd/scale.go:71 +msgid "" +"Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job" +msgstr "" +"Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job" + +#: pkg/kubectl/cmd/set/set.go:38 +msgid "Set specific features on objects" +msgstr "Set specific features on objects" + +#: pkg/kubectl/cmd/apply_set_last_applied.go:83 +msgid "" +"Set the last-applied-configuration annotation on a live object to match the " +"contents of a file." +msgstr "" +"Set the last-applied-configuration annotation on a live object to match the " +"contents of a file." + +#: pkg/kubectl/cmd/set/set_selector.go:82 +msgid "Set the selector on a resource" +msgstr "リソースã®ã‚»ãƒ¬ã‚¯ã‚¿ãƒ¼ã‚’設定ã™ã‚‹" + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_cluster.go#L67 +#: pkg/kubectl/cmd/config/create_cluster.go:68 msgid "Sets a cluster entry in kubeconfig" msgstr "kubeconfigã«ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚¨ãƒ³ãƒˆãƒªã‚’設定ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_context.go#L57 +#: pkg/kubectl/cmd/config/create_context.go:58 msgid "Sets a context entry in kubeconfig" msgstr "kubeconfigã«ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ³ãƒˆãƒªã‚’設定ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_authinfo.go#L103 +#: pkg/kubectl/cmd/config/create_authinfo.go:104 msgid "Sets a user entry in kubeconfig" msgstr "kubeconfigã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ãƒ³ãƒˆãƒªã‚’設定ã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/set.go#L59 +#: pkg/kubectl/cmd/config/set.go:60 msgid "Sets an individual value in a kubeconfig file" msgstr "kubeconfigファイル内ã®å¤‰æ•°ã‚’個別ã«è¨­å®šã™ã‚‹" # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/use_context.go#L48 +#: pkg/kubectl/cmd/config/use_context.go:49 msgid "Sets the current-context in a kubeconfig file" msgstr "kubeconfigã«ã‚«ãƒ¬ãƒ³ãƒˆã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’設定ã™ã‚‹" +#: pkg/kubectl/cmd/describe.go:86 +msgid "Show details of a specific resource or group of resources" +msgstr "Show details of a specific resource or group of resources" + +#: pkg/kubectl/cmd/rollout/rollout_status.go:58 +msgid "Show the status of the rollout" +msgstr "Show the status of the rollout" + +#: pkg/kubectl/cmd/expose.go:106 +msgid "Synonym for --target-port" +msgstr "Synonym for —target-port" + +#: pkg/kubectl/cmd/expose.go:88 +msgid "" +"Take a replication controller, service, deployment or pod and expose it as a " +"new Kubernetes Service" +msgstr "" +"Take a replication controller, service, deployment or pod and expose it as a " +"new Kubernetes Service" + +#: pkg/kubectl/cmd/run.go:117 +msgid "The image for the container to run." +msgstr "The image for the container to run." + +#: pkg/kubectl/cmd/run.go:119 +msgid "" +"The image pull policy for the container. If left empty, this value will not " +"be specified by the client and defaulted by the server" +msgstr "" +"The image pull policy for the container. If left empty, this value will not " +"be specified by the client and defaulted by the server" + +#: pkg/kubectl/cmd/rollingupdate.go:101 +msgid "" +"The key to use to differentiate between two different controllers, default " +"'deployment'. Only relevant when --image is specified, ignored otherwise" +msgstr "" +"The key to use to differentiate between two different controllers, default " +"‘deployment’. Only relevant when —image is specified, ignored otherwise" + +#: pkg/kubectl/cmd/create_pdb.go:63 +msgid "" +"The minimum number or percentage of available pods this budget requires." +msgstr "" +"The minimum number or percentage of available pods this budget requires." + +#: pkg/kubectl/cmd/expose.go:111 +msgid "The name for the newly created object." +msgstr "The name for the newly created object." + +#: pkg/kubectl/cmd/autoscale.go:72 +msgid "" +"The name for the newly created object. If not specified, the name of the " +"input resource will be used." +msgstr "" +"The name for the newly created object. If not specified, the name of the " +"input resource will be used." + +#: pkg/kubectl/cmd/run.go:116 +msgid "" +"The name of the API generator to use, see http://kubernetes.io/docs/user-" +"guide/kubectl-conventions/#generators for a list." +msgstr "" +"The name of the API generator to use, see http://kubernetes.io/docs/user-" +"guide/kubectl-conventions/#generators for a list." + +#: pkg/kubectl/cmd/autoscale.go:67 +msgid "" +"The name of the API generator to use. Currently there is only 1 generator." +msgstr "" +"The name of the API generator to use. Currently there is only 1 generator." + +#: pkg/kubectl/cmd/expose.go:99 +msgid "" +"The name of the API generator to use. There are 2 generators: 'service/v1' " +"and 'service/v2'. The only difference between them is that service port in " +"v1 is named 'default', while it is left unnamed in v2. Default is 'service/" +"v2'." +msgstr "" +"The name of the API generator to use. There are 2 generators: ‘service/v1’ " +"and ‘service/v2’. The only difference between them is that service port in " +"v1 is named ‘default’, while it is left unnamed in v2. Default is ‘service/" +"v2’." + +#: pkg/kubectl/cmd/run.go:136 +msgid "" +"The name of the generator to use for creating a service. Only used if --" +"expose is true" +msgstr "" +"The name of the generator to use for creating a service. Only used if —" +"expose is true" + +#: pkg/kubectl/cmd/expose.go:100 +msgid "The network protocol for the service to be created. Default is 'TCP'." +msgstr "The network protocol for the service to be created. Default is ‘TCP’." + +#: pkg/kubectl/cmd/expose.go:101 +msgid "" +"The port that the service should serve on. Copied from the resource being " +"exposed, if unspecified" +msgstr "" +"The port that the service should serve on. Copied from the resource being " +"exposed, if unspecified" + +#: pkg/kubectl/cmd/run.go:124 +msgid "" +"The port that this container exposes. If --expose is true, this is also the " +"port used by the service that is created." +msgstr "" +"The port that this container exposes. If —expose is true, this is also the " +"port used by the service that is created." + +#: pkg/kubectl/cmd/run.go:134 +msgid "" +"The resource requirement limits for this container. For example, 'cpu=200m," +"memory=512Mi'. Note that server side components may assign limits depending " +"on the server configuration, such as limit ranges." +msgstr "" +"The resource requirement limits for this container. For example, ‘cpu=200m," +"memory=512Mi’. Note that server side components may assign limits depending " +"on the server configuration, such as limit ranges." + +#: pkg/kubectl/cmd/run.go:133 +msgid "" +"The resource requirement requests for this container. For example, " +"'cpu=100m,memory=256Mi'. Note that server side components may assign " +"requests depending on the server configuration, such as limit ranges." +msgstr "" +"The resource requirement requests for this container. For example, " +"‘cpu=100m,memory=256Mi’. Note that server side components may assign " +"requests depending on the server configuration, such as limit ranges." + +#: pkg/kubectl/cmd/run.go:131 +msgid "" +"The restart policy for this Pod. Legal values [Always, OnFailure, Never]. " +"If set to 'Always' a deployment is created, if set to 'OnFailure' a job is " +"created, if set to 'Never', a regular pod is created. For the latter two --" +"replicas must be 1. Default 'Always', for CronJobs ` + "`" + `Never` + "`" + `." +msgstr "" +"The restart policy for this Pod. Legal values [Always, OnFailure, Never]. " +"If set to ‘Always’ a deployment is created, if set to ‘OnFailure’ a job is " +"created, if set to ‘Never’, a regular pod is created. For the latter two —" +"replicas must be 1. Default ‘Always’, for CronJobs ` + "`" + `Never` + "`" + `." + +#: pkg/kubectl/cmd/create_secret.go:88 +msgid "The type of secret to create" +msgstr "The type of secret to create" + +#: pkg/kubectl/cmd/expose.go:102 +msgid "" +"Type for this service: ClusterIP, NodePort, or LoadBalancer. Default is " +"'ClusterIP'." +msgstr "" +"Type for this service: ClusterIP, NodePort, or LoadBalancer. Default is " +"‘ClusterIP’." + +#: pkg/kubectl/cmd/rollout/rollout_undo.go:72 +msgid "Undo a previous rollout" +msgstr "ç¾åœ¨ã®ãƒ­ãƒ¼ãƒ«ã‚¢ã‚¦ãƒˆã‚’å–り消ã™" + # https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/unset.go#L47 +#: pkg/kubectl/cmd/config/unset.go:48 msgid "Unsets an individual value in a kubeconfig file" msgstr "kubeconfigファイルã‹ã‚‰å¤‰æ•°ã‚’個別ã«å‰Šé™¤ã™ã‚‹" +#: pkg/kubectl/cmd/patch.go:96 +msgid "Update field(s) of a resource using strategic merge patch" +msgstr "Update field(s) of a resource using strategic merge patch" + +#: pkg/kubectl/cmd/set/set_image.go:95 +msgid "Update image of a pod template" +msgstr "Update image of a pod template" + +#: pkg/kubectl/cmd/set/set_resources.go:102 +msgid "Update resource requests/limits on objects with pod templates" +msgstr "Update resource requests/limits on objects with pod templates" + +#: pkg/kubectl/cmd/annotate.go:116 msgid "Update the annotations on a resource" msgstr "リソースã®ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã™ã‚‹" +#: pkg/kubectl/cmd/label.go:114 +msgid "Update the labels on a resource" +msgstr "リソースã®ãƒ©ãƒ™ãƒ«ã‚’æ›´æ–°ã™ã‚‹" + +#: pkg/kubectl/cmd/taint.go:87 +msgid "Update the taints on one or more nodes" +msgstr "Update the taints on one or more nodes" + +#: pkg/kubectl/cmd/create_secret.go:156 +msgid "Username for Docker registry authentication" +msgstr "Username for Docker registry authentication" + +#: pkg/kubectl/cmd/apply_view_last_applied.go:64 +msgid "View latest last-applied-configuration annotations of a resource/object" +msgstr "" +"View latest last-applied-configuration annotations of a resource/object" + +#: pkg/kubectl/cmd/rollout/rollout_history.go:52 +msgid "View rollout history" +msgstr "ロールアウトã®å±¥æ­´ã‚’表示ã™ã‚‹" + +#: pkg/kubectl/cmd/clusterinfo_dump.go:46 msgid "" -"watch is only supported on individual resources and resource collections - " -"%d resources were found" -msgid_plural "" -"watch is only supported on individual resources and resource collections - " -"%d resources were found" -msgstr[0] "" -"watchã¯å˜ä¸€ãƒªã‚½ãƒ¼ã‚¹åŠã³ãƒªã‚½ãƒ¼ã‚¹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ - " -"%d個ã®ãƒªã‚½ãƒ¼ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ" -msgstr[1] "" -"watchã¯å˜ä¸€ãƒªã‚½ãƒ¼ã‚¹åŠã³ãƒªã‚½ãƒ¼ã‚¹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ - " -"%d個ã®ãƒªã‚½ãƒ¼ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ" +"Where to output the files. If empty or '-' uses stdout, otherwise creates a " +"directory hierarchy in that directory" +msgstr "" +"Where to output the files. If empty or ‘-‘ uses stdout, otherwise creates a " +"directory hierarchy in that directory" + +#: pkg/kubectl/cmd/run_test.go:85 +msgid "dummy restart flag)" +msgstr "dummy restart flag)" + +#: pkg/kubectl/cmd/create_service.go:254 +msgid "external name of service" +msgstr "external name of service" + +#: pkg/kubectl/cmd/cmd.go:227 +msgid "kubectl controls the Kubernetes cluster manager" +msgstr "kubectl controls the Kubernetes cluster manager" + +#~ msgid "" +#~ "watch is only supported on individual resources and resource collections " +#~ "- %d resources were found" +#~ msgid_plural "" +#~ "watch is only supported on individual resources and resource collections " +#~ "- %d resources were found" +#~ msgstr[0] "" +#~ "watchã¯å˜ä¸€ãƒªã‚½ãƒ¼ã‚¹åŠã³ãƒªã‚½ãƒ¼ã‚¹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ - %d個ã®" +#~ "リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ" +#~ msgstr[1] "" +#~ "watchã¯å˜ä¸€ãƒªã‚½ãƒ¼ã‚¹åŠã³ãƒªã‚½ãƒ¼ã‚¹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ - %d個ã®" +#~ "リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ" `) func translationsKubectlJa_jpLc_messagesK8sPoBytes() ([]byte, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/BUILD index 235416ff41f..cbf43e685c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/BUILD @@ -4,7 +4,6 @@ go_library( name = "go_default_library", srcs = [ "attachablepodforobject.go", - "canbeautoscaled.go", "canbeexposed.go", "helpers.go", "historyviewer.go", @@ -51,7 +50,6 @@ go_library( go_test( name = "go_default_test", srcs = [ - "canbeautoscaled_test.go", "canbeexposed_test.go", "helpers_test.go", "logsforobject_test.go", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/canbeautoscaled.go b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/canbeautoscaled.go deleted file mode 100644 index c91e816f7d2..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/canbeautoscaled.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package polymorphichelpers - -import ( - "fmt" - - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -func canBeAutoscaled(kind schema.GroupKind) error { - switch kind { - case - corev1.SchemeGroupVersion.WithKind("ReplicationController").GroupKind(), - appsv1.SchemeGroupVersion.WithKind("Deployment").GroupKind(), - appsv1.SchemeGroupVersion.WithKind("ReplicaSet").GroupKind(), - appsv1.SchemeGroupVersion.WithKind("StatefulSet").GroupKind(), - extensionsv1beta1.SchemeGroupVersion.WithKind("Deployment").GroupKind(), - extensionsv1beta1.SchemeGroupVersion.WithKind("ReplicaSet").GroupKind(): - // nothing to do here - default: - return fmt.Errorf("cannot autoscale a %v", kind) - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/interface.go b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/interface.go index 816bf91427c..46f3b5a15a5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/interface.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/interface.go @@ -29,16 +29,16 @@ import ( ) // LogsForObjectFunc is a function type that can tell you how to get logs for a runtime.object -type LogsForObjectFunc func(restClientGetter genericclioptions.RESTClientGetter, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]*rest.Request, error) +type LogsForObjectFunc func(restClientGetter genericclioptions.RESTClientGetter, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]rest.ResponseWrapper, error) // LogsForObjectFn gives a way to easily override the function for unit testing if needed. var LogsForObjectFn LogsForObjectFunc = logsForObject -// AttachableLogsForObjectFunc is a function type that can tell you how to get the pod for which to attach a given object -type AttachableLogsForObjectFunc func(restClientGetter genericclioptions.RESTClientGetter, object runtime.Object, timeout time.Duration) (*v1.Pod, error) +// AttachablePodForObjectFunc is a function type that can tell you how to get the pod for which to attach a given object +type AttachablePodForObjectFunc func(restClientGetter genericclioptions.RESTClientGetter, object runtime.Object, timeout time.Duration) (*v1.Pod, error) // AttachablePodForObjectFn gives a way to easily override the function for unit testing if needed. -var AttachablePodForObjectFn AttachableLogsForObjectFunc = attachablePodForObject +var AttachablePodForObjectFn AttachablePodForObjectFunc = attachablePodForObject // HistoryViewerFunc is a function type that can tell you how to view change history type HistoryViewerFunc func(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) @@ -79,12 +79,6 @@ type PortsForObjectFunc func(object runtime.Object) ([]string, error) // PortsForObjectFn gives a way to easily override the function for unit testing if needed var PortsForObjectFn PortsForObjectFunc = portsForObject -// CanBeAutoscaledFunc checks whether the kind of resources could be autoscaled -type CanBeAutoscaledFunc func(kind schema.GroupKind) error - -// CanBeAutoscaledFn gives a way to easily override the function for unit testing if needed -var CanBeAutoscaledFn CanBeAutoscaledFunc = canBeAutoscaled - // CanBeExposedFunc is a function type that can tell you whether a given GroupKind is capable of being exposed type CanBeExposedFunc func(kind schema.GroupKind) error diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/logsforobject.go b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/logsforobject.go index 85472a135ee..e8f3cddf243 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/logsforobject.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/polymorphichelpers/logsforobject.go @@ -32,7 +32,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl/util/podutils" ) -func logsForObject(restClientGetter genericclioptions.RESTClientGetter, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]*rest.Request, error) { +func logsForObject(restClientGetter genericclioptions.RESTClientGetter, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]rest.ResponseWrapper, error) { clientConfig, err := restClientGetter.ToRESTConfig() if err != nil { return nil, err @@ -47,7 +47,7 @@ func logsForObject(restClientGetter genericclioptions.RESTClientGetter, object, // TODO: remove internal clientset once all callers use external versions // this is split for easy test-ability -func logsForObjectWithClient(clientset corev1client.CoreV1Interface, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]*rest.Request, error) { +func logsForObjectWithClient(clientset corev1client.CoreV1Interface, object, options runtime.Object, timeout time.Duration, allContainers bool) ([]rest.ResponseWrapper, error) { opts, ok := options.(*corev1.PodLogOptions) if !ok { return nil, errors.New("provided options object is not a PodLogOptions") @@ -55,7 +55,7 @@ func logsForObjectWithClient(clientset corev1client.CoreV1Interface, object, opt switch t := object.(type) { case *corev1.PodList: - ret := []*rest.Request{} + ret := []rest.ResponseWrapper{} for i := range t.Items { currRet, err := logsForObjectWithClient(clientset, &t.Items[i], options, timeout, allContainers) if err != nil { @@ -68,10 +68,10 @@ func logsForObjectWithClient(clientset corev1client.CoreV1Interface, object, opt case *corev1.Pod: // if allContainers is true, then we're going to locate all containers and then iterate through them. At that point, "allContainers" is false if !allContainers { - return []*rest.Request{clientset.Pods(t.Namespace).GetLogs(t.Name, opts)}, nil + return []rest.ResponseWrapper{clientset.Pods(t.Namespace).GetLogs(t.Name, opts)}, nil } - ret := []*rest.Request{} + ret := []rest.ResponseWrapper{} for _, c := range t.Spec.InitContainers { currOpts := opts.DeepCopy() currOpts.Container = c.Name diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go b/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go index 8851d574105..bd7e2c7c855 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go @@ -293,7 +293,7 @@ func (r *DaemonSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations ma } // Restore revision - if _, err = r.c.ExtensionsV1beta1().DaemonSets(accessor.GetNamespace()).Patch(accessor.GetName(), types.StrategicMergePatchType, toHistory.Data.Raw); err != nil { + if _, err = r.c.AppsV1().DaemonSets(accessor.GetNamespace()).Patch(accessor.GetName(), types.StrategicMergePatchType, toHistory.Data.Raw); err != nil { return "", fmt.Errorf("failed restoring revision %d: %v", toRevision, err) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go b/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go index b6df08c4120..0601efc1db4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go @@ -33,11 +33,11 @@ import ( "k8s.io/apimachinery/pkg/util/wait" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" scaleclient "k8s.io/client-go/scale" - "k8s.io/client-go/util/integer" "k8s.io/client-go/util/retry" "k8s.io/kubernetes/pkg/kubectl/util" deploymentutil "k8s.io/kubernetes/pkg/kubectl/util/deployment" "k8s.io/kubernetes/pkg/kubectl/util/podutils" + "k8s.io/utils/integer" ) func newInt32Ptr(val int) *int32 { @@ -101,7 +101,7 @@ type RollingUpdaterConfig struct { // when the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, new RC can be scaled up // further, ensuring that total number of pods running at any time during - // the update is atmost 130% of desired pods. + // the update is at most 130% of desired pods. MaxSurge intstr.IntOrString // OnProgress is invoked if set during each scale cycle, to allow the caller to perform additional logic or // abort the scale. If an error is returned the cleanup method will not be invoked. The percentage value diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go b/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go index 54f96fd2c34..d553a864d2a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go @@ -29,8 +29,6 @@ import ( scaleclient "k8s.io/client-go/scale" ) -// TODO: Figure out if we should be waiting on initializers in the Scale() functions below. - // Scaler provides an interface for resources that can be scaled. type Scaler interface { // Scale scales the named resource after checking preconditions. It optionally diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/BUILD index 67b59354c50..0f84a7bd7bd 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/BUILD @@ -10,7 +10,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/admission/v1beta1:go_default_library", - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/install.go b/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/install.go index 549dc614002..014c1684f8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/install.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/scheme/install.go @@ -25,6 +25,7 @@ import ( authenticationv1 "k8s.io/api/authentication/v1" authorizationv1 "k8s.io/api/authorization/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" batchv2alpha1 "k8s.io/api/batch/v2alpha1" @@ -57,7 +58,7 @@ func init() { utilruntime.Must(Scheme.SetVersionPriority(appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(authenticationv1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(authorizationv1.SchemeGroupVersion)) - utilruntime.Must(Scheme.SetVersionPriority(autoscalingv1.SchemeGroupVersion)) + utilruntime.Must(Scheme.SetVersionPriority(autoscalingv1.SchemeGroupVersion, autoscalingv2beta1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(batchv1.SchemeGroupVersion, batchv1beta1.SchemeGroupVersion, batchv2alpha1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(certificatesv1beta1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(extensionsv1beta1.SchemeGroupVersion)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/BUILD index 51522abecab..ec4c53d899d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/BUILD @@ -8,7 +8,7 @@ go_library( deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/podutils.go b/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/podutils.go index 2da66ef9c3f..142b8879651 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/podutils.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/podutils/podutils.go @@ -21,7 +21,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/util/integer" + "k8s.io/utils/integer" ) // IsPodAvailable returns true if a pod is available; false otherwise. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/BUILD index 80a8c446ee1..1687a952eaf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/BUILD @@ -5,6 +5,7 @@ go_library( srcs = ["tabwriter.go"], importpath = "k8s.io/kubernetes/pkg/kubectl/util/printers", visibility = ["//visibility:public"], + deps = ["//vendor/github.com/liggitt/tabwriter:go_default_library"], ) filegroup( diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/tabwriter.go b/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/tabwriter.go index aadb888b7ef..f0ebb5dda08 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/tabwriter.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/printers/tabwriter.go @@ -18,7 +18,8 @@ package printers import ( "io" - "text/tabwriter" + + "github.com/liggitt/tabwriter" ) const ( @@ -26,7 +27,7 @@ const ( tabwriterWidth = 4 tabwriterPadding = 3 tabwriterPadChar = ' ' - tabwriterFlags = 0 + tabwriterFlags = tabwriter.RememberWidths ) // GetNewTabWriter returns a tabwriter that translates tabbed columns in input into properly aligned text. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/markdown.go b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/markdown.go index 1a19f89fd4c..65ee886d10a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/markdown.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/markdown.go @@ -46,8 +46,10 @@ func (r *ASCIIRenderer) NormalText(out *bytes.Buffer, text []byte) { lines := strings.Split(raw, linebreak) for _, line := range lines { trimmed := strings.Trim(line, " \n\t") + if len(trimmed) > 0 && trimmed[0] != '_' { + out.WriteString(" ") + } out.WriteString(trimmed) - out.WriteString(" ") } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/normalizers.go b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/normalizers.go index db7b17a7d6d..f90412058a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/normalizers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/normalizers.go @@ -70,7 +70,7 @@ type normalizer struct { func (s normalizer) markdown() normalizer { bytes := []byte(s.string) - formatted := blackfriday.Markdown(bytes, &ASCIIRenderer{Indentation: Indentation}, 0) + formatted := blackfriday.Markdown(bytes, &ASCIIRenderer{Indentation: Indentation}, blackfriday.EXTENSION_NO_INTRA_EMPHASIS) s.string = string(formatted) return s } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/templates.go b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/templates.go index c40908f9f60..9f3b75b57ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/templates.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/util/templates/templates.go @@ -49,7 +49,8 @@ const ( // SectionFlags is the help template section that displays the command's flags. SectionFlags = `{{ if or $visibleFlags.HasFlags $explicitlyExposedFlags.HasFlags}}Options: -{{ if $visibleFlags.HasFlags}}{{trimRight (flagsUsages $visibleFlags)}}{{end}}{{ if $explicitlyExposedFlags.HasFlags}}{{trimRight (flagsUsages $explicitlyExposedFlags)}}{{end}} +{{ if $visibleFlags.HasFlags}}{{trimRight (flagsUsages $visibleFlags)}}{{end}}{{ if $explicitlyExposedFlags.HasFlags}}{{ if $visibleFlags.HasFlags}} +{{end}}{{trimRight (flagsUsages $explicitlyExposedFlags)}}{{end}} {{end}}` diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/BUILD index cdd40d9a99a..586cb24c0b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/BUILD @@ -103,7 +103,6 @@ go_library( "//pkg/security/podsecuritypolicy/sysctl:go_default_library", "//pkg/securitycontext:go_default_library", "//pkg/util/dbus:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/node:go_default_library", @@ -113,6 +112,7 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/csi:go_default_library", "//pkg/volume/util:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//pkg/volume/util/types:go_default_library", "//pkg/volume/util/volumepathhandler:go_default_library", "//pkg/volume/validation:go_default_library", @@ -132,7 +132,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", @@ -140,16 +139,17 @@ go_library( "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/util/certificate:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", - "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", "//third_party/forked/golang/expansion:go_default_library", "//vendor/github.com/golang/groupcache/lru:go_default_library", "//vendor/github.com/google/cadvisor/events:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/integer:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) @@ -167,7 +167,6 @@ go_test( "kubelet_test.go", "kubelet_volumes_linux_test.go", "kubelet_volumes_test.go", - "main_test.go", "oom_watcher_test.go", "pod_container_deletor_test.go", "pod_workers_test.go", @@ -210,7 +209,7 @@ go_test( "//pkg/kubelet/util/sliceutils:go_default_library", "//pkg/kubelet/volumemanager:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/taints:go_default_library", "//pkg/version:go_default_library", @@ -221,6 +220,7 @@ go_test( "//pkg/volume/host_path:go_default_library", "//pkg/volume/testing:go_default_library", "//pkg/volume/util:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/OWNERS index 6d98243a138..8de8ee816c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - Random-Liu - dchen1107 diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/BUILD index 926c8add6ca..526638c1025 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/BUILD @@ -14,6 +14,7 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/kubelet/apis", deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:windows": [ @@ -43,6 +44,7 @@ filegroup( "//pkg/kubelet/apis/pluginregistration/v1alpha1:all-srcs", "//pkg/kubelet/apis/pluginregistration/v1beta1:all-srcs", "//pkg/kubelet/apis/podresources:all-srcs", + "//pkg/kubelet/apis/resourcemetrics/v1alpha1:all-srcs", "//pkg/kubelet/apis/stats/v1alpha1:all-srcs", ], tags = ["automanaged"], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/OWNERS index 7eed1121edd..b8b2acd3b66 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - mtaufen reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/types.go index 941d8374866..079cb192534 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/types.go @@ -218,7 +218,7 @@ type KubeletConfiguration struct { // The CIDR to use for pod IP addresses, only used in standalone mode. // In cluster mode, this is obtained from the master. PodCIDR string - // PodPidsLimit is the maximum number of pids in any pod. + // The maximum number of processes per pod. If -1, the kubelet defaults to the node allocatable pid capacity. PodPidsLimit int64 // ResolverConfig is the resolver configuration file used as the basis // for the container DNS resolution configuration. @@ -291,12 +291,12 @@ type KubeletConfiguration struct { /* the following fields are meant for Node Allocatable */ - // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G,pids=100) pairs // that describe resources reserved for non-kubernetes components. // Currently only cpu and memory are supported. // See http://kubernetes.io/docs/user-guide/compute-resources for more detail. SystemReserved map[string]string - // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G,pids=100) pairs // that describe resources reserved for kubernetes system components. // Currently cpu, memory and local ephemeral storage for root file system are supported. // See http://kubernetes.io/docs/user-guide/compute-resources for more detail. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go index f623038a874..8c1568e91e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go @@ -158,7 +158,8 @@ func SetDefaults_KubeletConfiguration(obj *kubeletconfigv1beta1.KubeletConfigura if obj.MaxPods == 0 { obj.MaxPods = 110 } - if obj.PodPidsLimit == nil { + // default nil or negative value to -1 (implies node allocatable pid limit) + if obj.PodPidsLimit == nil || *obj.PodPidsLimit < int64(0) { temp := int64(-1) obj.PodPidsLimit = &temp } @@ -214,7 +215,7 @@ func SetDefaults_KubeletConfiguration(obj *kubeletconfigv1beta1.KubeletConfigura obj.ContainerLogMaxFiles = utilpointer.Int32Ptr(5) } if obj.ConfigMapAndSecretChangeDetectionStrategy == "" { - obj.ConfigMapAndSecretChangeDetectionStrategy = kubeletconfigv1beta1.TTLCacheChangeDetectionStrategy + obj.ConfigMapAndSecretChangeDetectionStrategy = kubeletconfigv1beta1.WatchChangeDetectionStrategy } if obj.EnforceNodeAllocatable == nil { obj.EnforceNodeAllocatable = DefaultNodeAllocatableEnforcement diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go index d65bf34d2e1..f93bf5c6803 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go @@ -736,7 +736,8 @@ type PodSandboxConfig struct { // operation. The runtime may also use this information to improve UX, such // as by constructing a readable name. Metadata *PodSandboxMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"` - // Hostname of the sandbox. + // Hostname of the sandbox. Hostname could only be empty when the pod + // network namespace is NODE. Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` // Path to the directory on the host in which container log files are // stored. @@ -848,7 +849,7 @@ type RunPodSandboxRequest struct { // If the runtime handler is unknown, this request should be rejected. An // empty string should select the default handler, equivalent to the // behavior before this feature was added. - // See https://git.k8s.io/community/keps/sig-node/0014-runtime-class.md + // See https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md RuntimeHandler string `protobuf:"bytes,2,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` } @@ -1029,6 +1030,8 @@ type PodSandboxStatus struct { // MUST be identical to that of the corresponding PodSandboxConfig used to // instantiate the pod sandbox this status represents. Annotations map[string]string `protobuf:"bytes,8,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // runtime configuration used for this PodSandbox. + RuntimeHandler string `protobuf:"bytes,9,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` } func (m *PodSandboxStatus) Reset() { *m = PodSandboxStatus{} } @@ -1091,6 +1094,13 @@ func (m *PodSandboxStatus) GetAnnotations() map[string]string { return nil } +func (m *PodSandboxStatus) GetRuntimeHandler() string { + if m != nil { + return m.RuntimeHandler + } + return "" +} + type PodSandboxStatusResponse struct { // Status of the PodSandbox. Status *PodSandboxStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` @@ -1207,6 +1217,8 @@ type PodSandbox struct { // MUST be identical to that of the corresponding PodSandboxConfig used to // instantiate this PodSandbox. Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // runtime configuration used for this PodSandbox. + RuntimeHandler string `protobuf:"bytes,7,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` } func (m *PodSandbox) Reset() { *m = PodSandbox{} } @@ -1255,6 +1267,13 @@ func (m *PodSandbox) GetAnnotations() map[string]string { return nil } +func (m *PodSandbox) GetRuntimeHandler() string { + if m != nil { + return m.RuntimeHandler + } + return "" +} + type ListPodSandboxResponse struct { // List of PodSandboxes. Items []*PodSandbox `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` @@ -3550,7 +3569,7 @@ type ContainerStats struct { Cpu *CpuUsage `protobuf:"bytes,2,opt,name=cpu" json:"cpu,omitempty"` // Memory usage gathered from the container. Memory *MemoryUsage `protobuf:"bytes,3,opt,name=memory" json:"memory,omitempty"` - // Usage of the writeable layer. + // Usage of the writable layer. WritableLayer *FilesystemUsage `protobuf:"bytes,4,opt,name=writable_layer,json=writableLayer" json:"writable_layer,omitempty"` } @@ -5774,6 +5793,12 @@ func (m *PodSandboxStatus) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], v) } } + if len(m.RuntimeHandler) > 0 { + dAtA[i] = 0x4a + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeHandler))) + i += copy(dAtA[i:], m.RuntimeHandler) + } return i, nil } @@ -5999,6 +6024,12 @@ func (m *PodSandbox) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], v) } } + if len(m.RuntimeHandler) > 0 { + dAtA[i] = 0x3a + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeHandler))) + i += copy(dAtA[i:], m.RuntimeHandler) + } return i, nil } @@ -9446,6 +9477,10 @@ func (m *PodSandboxStatus) Size() (n int) { n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) } } + l = len(m.RuntimeHandler) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -9541,6 +9576,10 @@ func (m *PodSandbox) Size() (n int) { n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) } } + l = len(m.RuntimeHandler) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -11127,6 +11166,7 @@ func (this *PodSandboxStatus) String() string { `Linux:` + strings.Replace(fmt.Sprintf("%v", this.Linux), "LinuxPodSandboxStatus", "LinuxPodSandboxStatus", 1) + `,`, `Labels:` + mapStringForLabels + `,`, `Annotations:` + mapStringForAnnotations + `,`, + `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, `}`, }, "") return s @@ -11225,6 +11265,7 @@ func (this *PodSandbox) String() string { `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, `Labels:` + mapStringForLabels + `,`, `Annotations:` + mapStringForAnnotations + `,`, + `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, `}`, }, "") return s @@ -15490,6 +15531,35 @@ func (m *PodSandboxStatus) Unmarshal(dAtA []byte) error { } m.Annotations[mapkey] = mapvalue iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -16459,6 +16529,35 @@ func (m *PodSandbox) Unmarshal(dAtA []byte) error { } m.Annotations[mapkey] = mapvalue iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -26861,300 +26960,300 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 4708 bytes of a gzipped FileDescriptorProto + // 4720 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xcd, 0x6f, 0x1b, 0x49, 0x76, 0x57, 0x93, 0xfa, 0x20, 0x1f, 0x45, 0x89, 0x2a, 0xcb, 0x16, 0x4d, 0x8f, 0x35, 0x56, 0xcf, - 0xf8, 0x73, 0x66, 0xe4, 0xb1, 0x66, 0xd7, 0x13, 0xdb, 0xb3, 0xb6, 0x69, 0x49, 0xb6, 0x99, 0xb5, - 0x29, 0xa6, 0x29, 0xcd, 0xc7, 0xce, 0x00, 0xbd, 0x2d, 0x76, 0x89, 0xea, 0x35, 0xd9, 0xd5, 0xd3, - 0xdd, 0xb4, 0xad, 0x04, 0x08, 0x16, 0x08, 0xb2, 0x87, 0x00, 0x01, 0x72, 0xce, 0x71, 0x73, 0xc8, - 0x21, 0xb7, 0x00, 0x41, 0x0e, 0x39, 0x6d, 0xb0, 0x87, 0xbd, 0x04, 0xc8, 0x69, 0x91, 0x8f, 0x4b, - 0x66, 0x92, 0x5c, 0x72, 0x08, 0xf2, 0x07, 0xe4, 0x10, 0xd4, 0x57, 0xb3, 0x3f, 0xf9, 0xe1, 0xf1, - 0xee, 0x4c, 0x4e, 0xea, 0x7a, 0xfd, 0xde, 0xab, 0x57, 0xaf, 0x5e, 0xbf, 0x7a, 0xf5, 0xab, 0xa2, - 0xa0, 0x68, 0x38, 0xd6, 0xa6, 0xe3, 0x12, 0x9f, 0xa0, 0x8a, 0x3b, 0xb0, 0x7d, 0xab, 0x8f, 0x37, - 0x9f, 0xdf, 0x30, 0x7a, 0xce, 0xb1, 0xb1, 0x55, 0x7b, 0xaf, 0x6b, 0xf9, 0xc7, 0x83, 0xc3, 0xcd, - 0x0e, 0xe9, 0x5f, 0xef, 0x92, 0x2e, 0xb9, 0xce, 0x18, 0x0f, 0x07, 0x47, 0xac, 0xc5, 0x1a, 0xec, - 0x89, 0x2b, 0x50, 0xaf, 0xc1, 0xd2, 0xc7, 0xd8, 0xf5, 0x2c, 0x62, 0x6b, 0xf8, 0xcb, 0x01, 0xf6, - 0x7c, 0x54, 0x85, 0x85, 0xe7, 0x9c, 0x52, 0x55, 0x2e, 0x28, 0x57, 0x8a, 0x9a, 0x6c, 0xaa, 0x7f, - 0xa9, 0xc0, 0x72, 0xc0, 0xec, 0x39, 0xc4, 0xf6, 0x70, 0x36, 0x37, 0xda, 0x80, 0x45, 0x61, 0x9c, - 0x6e, 0x1b, 0x7d, 0x5c, 0xcd, 0xb1, 0xd7, 0x25, 0x41, 0x6b, 0x1a, 0x7d, 0x8c, 0x2e, 0xc3, 0xb2, - 0x64, 0x91, 0x4a, 0xf2, 0x8c, 0x6b, 0x49, 0x90, 0x45, 0x6f, 0x68, 0x13, 0x4e, 0x49, 0x46, 0xc3, - 0xb1, 0x02, 0xe6, 0x59, 0xc6, 0xbc, 0x22, 0x5e, 0xd5, 0x1d, 0x4b, 0xf0, 0xab, 0x9f, 0x43, 0x71, - 0xa7, 0xd9, 0xde, 0x26, 0xf6, 0x91, 0xd5, 0xa5, 0x26, 0x7a, 0xd8, 0xa5, 0x32, 0x55, 0xe5, 0x42, - 0x9e, 0x9a, 0x28, 0x9a, 0xa8, 0x06, 0x05, 0x0f, 0x1b, 0x6e, 0xe7, 0x18, 0x7b, 0xd5, 0x1c, 0x7b, - 0x15, 0xb4, 0xa9, 0x14, 0x71, 0x7c, 0x8b, 0xd8, 0x5e, 0x35, 0xcf, 0xa5, 0x44, 0x53, 0xfd, 0xb9, - 0x02, 0xa5, 0x16, 0x71, 0xfd, 0xa7, 0x86, 0xe3, 0x58, 0x76, 0x17, 0xdd, 0x84, 0x02, 0xf3, 0x65, - 0x87, 0xf4, 0x98, 0x0f, 0x96, 0xb6, 0x6a, 0x9b, 0xf1, 0x69, 0xd9, 0x6c, 0x09, 0x0e, 0x2d, 0xe0, - 0x45, 0x17, 0x61, 0xa9, 0x43, 0x6c, 0xdf, 0xb0, 0x6c, 0xec, 0xea, 0x0e, 0x71, 0x7d, 0xe6, 0xa2, - 0x39, 0xad, 0x1c, 0x50, 0x69, 0x2f, 0xe8, 0x1c, 0x14, 0x8f, 0x89, 0xe7, 0x73, 0x8e, 0x3c, 0xe3, - 0x28, 0x50, 0x02, 0x7b, 0xb9, 0x06, 0x0b, 0xec, 0xa5, 0xe5, 0x08, 0x67, 0xcc, 0xd3, 0x66, 0xc3, - 0x51, 0x7f, 0xad, 0xc0, 0xdc, 0x53, 0x32, 0xb0, 0xfd, 0x58, 0x37, 0x86, 0x7f, 0x2c, 0x26, 0x2a, - 0xd4, 0x8d, 0xe1, 0x1f, 0x0f, 0xbb, 0xa1, 0x1c, 0x7c, 0xae, 0x78, 0x37, 0xf4, 0x65, 0x0d, 0x0a, - 0x2e, 0x36, 0x4c, 0x62, 0xf7, 0x4e, 0x98, 0x09, 0x05, 0x2d, 0x68, 0xd3, 0x49, 0xf4, 0x70, 0xcf, - 0xb2, 0x07, 0x2f, 0x75, 0x17, 0xf7, 0x8c, 0x43, 0xdc, 0x63, 0xa6, 0x14, 0xb4, 0x25, 0x41, 0xd6, - 0x38, 0x15, 0xed, 0x40, 0xc9, 0x71, 0x89, 0x63, 0x74, 0x0d, 0xea, 0xc7, 0xea, 0x1c, 0x73, 0x95, - 0x9a, 0x74, 0x15, 0x33, 0xbb, 0x35, 0xe4, 0xd4, 0xc2, 0x62, 0xea, 0x5f, 0x2b, 0xb0, 0x4c, 0x83, - 0xc7, 0x73, 0x8c, 0x0e, 0xde, 0x63, 0x53, 0x82, 0x6e, 0xc1, 0x82, 0x8d, 0xfd, 0x17, 0xc4, 0x7d, - 0x26, 0x26, 0xe0, 0xcd, 0xa4, 0xd6, 0x40, 0xe6, 0x29, 0x31, 0xb1, 0x26, 0xf9, 0xd1, 0x0d, 0xc8, - 0x3b, 0x96, 0xc9, 0x06, 0x3c, 0x81, 0x18, 0xe5, 0xa5, 0x22, 0x96, 0xd3, 0x61, 0x7e, 0x98, 0x44, - 0xc4, 0x72, 0x3a, 0xaa, 0x0a, 0xd0, 0xb0, 0xfd, 0x9b, 0xdf, 0xfb, 0xd8, 0xe8, 0x0d, 0x30, 0x5a, - 0x85, 0xb9, 0xe7, 0xf4, 0x81, 0x19, 0x9b, 0xd7, 0x78, 0x43, 0xfd, 0x2a, 0x0f, 0xe7, 0x9e, 0x50, - 0x7f, 0xb5, 0x0d, 0xdb, 0x3c, 0x24, 0x2f, 0xdb, 0xb8, 0x33, 0x70, 0x2d, 0xff, 0x64, 0x9b, 0xd8, - 0x3e, 0x7e, 0xe9, 0xa3, 0x26, 0xac, 0xd8, 0x52, 0xb3, 0x2e, 0x43, 0x93, 0x6a, 0x28, 0x6d, 0x6d, - 0x8c, 0x30, 0x82, 0xbb, 0x48, 0xab, 0xd8, 0x51, 0x82, 0x87, 0x1e, 0x0f, 0xe7, 0x4d, 0x6a, 0xcb, - 0x31, 0x6d, 0x29, 0x43, 0x6a, 0xef, 0x32, 0xcb, 0x84, 0x2e, 0x39, 0xb1, 0x52, 0xd3, 0x47, 0x40, - 0xbf, 0x6a, 0xdd, 0xf0, 0xf4, 0x81, 0x87, 0x5d, 0xe6, 0x98, 0xd2, 0xd6, 0x1b, 0x49, 0x2d, 0x43, - 0x17, 0x68, 0x45, 0x77, 0x60, 0xd7, 0xbd, 0x03, 0x0f, 0xbb, 0x2c, 0x09, 0x88, 0x58, 0xd2, 0x5d, - 0x42, 0xfc, 0x23, 0x4f, 0xc6, 0x8f, 0x24, 0x6b, 0x8c, 0x8a, 0xae, 0xc3, 0x29, 0x6f, 0xe0, 0x38, - 0x3d, 0xdc, 0xc7, 0xb6, 0x6f, 0xf4, 0xf4, 0xae, 0x4b, 0x06, 0x8e, 0x57, 0x9d, 0xbb, 0x90, 0xbf, - 0x92, 0xd7, 0x50, 0xf8, 0xd5, 0x23, 0xf6, 0x06, 0xad, 0x03, 0x38, 0xae, 0xf5, 0xdc, 0xea, 0xe1, - 0x2e, 0x36, 0xab, 0xf3, 0x4c, 0x69, 0x88, 0x82, 0xde, 0x87, 0x55, 0x0f, 0x77, 0x3a, 0xa4, 0xef, - 0xe8, 0x8e, 0x4b, 0x8e, 0xac, 0x1e, 0xe6, 0xd1, 0xbf, 0xc0, 0xa2, 0x1f, 0x89, 0x77, 0x2d, 0xfe, - 0x8a, 0x7d, 0x07, 0x77, 0x59, 0x4e, 0xa3, 0x23, 0x65, 0x9d, 0x57, 0x0b, 0x13, 0x0c, 0x15, 0xd8, - 0x50, 0x99, 0x49, 0xea, 0xcf, 0x73, 0x70, 0x9a, 0x79, 0xb2, 0x45, 0x4c, 0x31, 0xcd, 0x22, 0x49, - 0xbd, 0x05, 0xe5, 0x0e, 0xd3, 0xa9, 0x3b, 0x86, 0x8b, 0x6d, 0x5f, 0x7c, 0xa4, 0x8b, 0x9c, 0xd8, - 0x62, 0x34, 0xf4, 0x29, 0x54, 0x3c, 0x11, 0x15, 0x7a, 0x87, 0x87, 0x85, 0x98, 0xb3, 0xf7, 0x92, - 0x26, 0x8c, 0x88, 0x25, 0x6d, 0xd9, 0x4b, 0x04, 0xd7, 0x82, 0x77, 0xe2, 0x75, 0xfc, 0x1e, 0xcf, - 0x76, 0xa5, 0xad, 0xef, 0x65, 0x28, 0x8c, 0x1b, 0xbe, 0xd9, 0xe6, 0x62, 0xbb, 0xb6, 0xef, 0x9e, - 0x68, 0x52, 0x49, 0xed, 0x36, 0x2c, 0x86, 0x5f, 0xa0, 0x0a, 0xe4, 0x9f, 0xe1, 0x13, 0x31, 0x28, - 0xfa, 0x38, 0xfc, 0x08, 0x78, 0xae, 0xe1, 0x8d, 0xdb, 0xb9, 0xdf, 0x51, 0x54, 0x17, 0xd0, 0xb0, - 0x97, 0xa7, 0xd8, 0x37, 0x4c, 0xc3, 0x37, 0x10, 0x82, 0x59, 0xb6, 0x8c, 0x70, 0x15, 0xec, 0x99, - 0x6a, 0x1d, 0x88, 0x8f, 0xb7, 0xa8, 0xd1, 0x47, 0xf4, 0x06, 0x14, 0x83, 0x40, 0x17, 0x6b, 0xc9, - 0x90, 0x40, 0x73, 0xba, 0xe1, 0xfb, 0xb8, 0xef, 0xf8, 0x2c, 0xc4, 0xca, 0x9a, 0x6c, 0xaa, 0xff, - 0x3d, 0x0b, 0x95, 0xc4, 0x9c, 0xdc, 0x87, 0x42, 0x5f, 0x74, 0x2f, 0x3e, 0xb4, 0xb7, 0x53, 0x12, - 0x7b, 0xc2, 0x54, 0x2d, 0x90, 0xa2, 0x79, 0x93, 0xe6, 0xd0, 0xd0, 0xfa, 0x17, 0xb4, 0xe9, 0x8c, - 0xf7, 0x48, 0x57, 0x37, 0x2d, 0x17, 0x77, 0x7c, 0xe2, 0x9e, 0x08, 0x73, 0x17, 0x7b, 0xa4, 0xbb, - 0x23, 0x69, 0xe8, 0x36, 0x80, 0x69, 0x7b, 0x74, 0xb2, 0x8f, 0xac, 0x2e, 0x33, 0xba, 0xb4, 0x75, - 0x2e, 0x69, 0x44, 0xb0, 0xd8, 0x69, 0x45, 0xd3, 0xf6, 0x84, 0xf9, 0x0f, 0xa0, 0x4c, 0xd7, 0x0c, - 0xbd, 0xcf, 0xd7, 0x29, 0xfe, 0xa5, 0x94, 0xb6, 0xce, 0xa7, 0x8d, 0x21, 0x58, 0xcd, 0xb4, 0x45, - 0x67, 0xd8, 0xf0, 0xd0, 0x43, 0x98, 0x67, 0xc9, 0xdb, 0xab, 0xce, 0x33, 0xe1, 0xcd, 0x51, 0x0e, - 0x10, 0x11, 0xf1, 0x84, 0x09, 0xf0, 0x80, 0x10, 0xd2, 0xe8, 0x00, 0x4a, 0x86, 0x6d, 0x13, 0xdf, - 0xe0, 0x89, 0x66, 0x81, 0x29, 0xfb, 0x60, 0x02, 0x65, 0xf5, 0xa1, 0x14, 0xd7, 0x18, 0xd6, 0x83, - 0x7e, 0x00, 0x73, 0x2c, 0x13, 0x89, 0x0f, 0xf1, 0xf2, 0x84, 0x41, 0xab, 0x71, 0xa9, 0xda, 0x2d, - 0x28, 0x85, 0x8c, 0x9d, 0x26, 0x48, 0x6b, 0x77, 0xa1, 0x12, 0x37, 0x6d, 0xaa, 0x20, 0xff, 0x03, - 0x58, 0xd5, 0x06, 0xf6, 0xd0, 0x30, 0x59, 0x7d, 0xdd, 0x86, 0x79, 0x31, 0xd9, 0x3c, 0xe2, 0xd4, - 0xf1, 0x3e, 0xd2, 0x84, 0x44, 0xb8, 0x9c, 0x3a, 0x36, 0x6c, 0xb3, 0x87, 0x5d, 0xd1, 0xaf, 0x2c, - 0xa7, 0x1e, 0x73, 0xaa, 0xfa, 0x03, 0x38, 0x1d, 0xeb, 0x5c, 0x54, 0x73, 0x6f, 0xc3, 0x92, 0x43, - 0x4c, 0xdd, 0xe3, 0x64, 0xdd, 0x32, 0x65, 0x1a, 0x72, 0x02, 0xde, 0x86, 0x49, 0xc5, 0xdb, 0x3e, - 0x71, 0x92, 0xc6, 0x4f, 0x26, 0x5e, 0x85, 0x33, 0x71, 0x71, 0xde, 0xbd, 0x7a, 0x0f, 0xd6, 0x34, - 0xdc, 0x27, 0xcf, 0xf1, 0xab, 0xaa, 0xae, 0x41, 0x35, 0xa9, 0x40, 0x28, 0xff, 0x0c, 0xd6, 0x86, - 0xd4, 0xb6, 0x6f, 0xf8, 0x03, 0x6f, 0x2a, 0xe5, 0xa2, 0xd4, 0x3d, 0x24, 0x1e, 0x9f, 0xce, 0x82, - 0x26, 0x9b, 0xea, 0xd5, 0xb0, 0xea, 0x26, 0xaf, 0x2c, 0x78, 0x0f, 0x68, 0x09, 0x72, 0x96, 0x23, - 0xd4, 0xe5, 0x2c, 0x47, 0x7d, 0x0c, 0xc5, 0x60, 0x69, 0x46, 0x77, 0x86, 0x35, 0x66, 0x6e, 0xd2, - 0x85, 0x3c, 0x28, 0x43, 0xf7, 0x13, 0x4b, 0x89, 0xe8, 0xf2, 0x0e, 0x40, 0x90, 0xf2, 0x64, 0x85, - 0x70, 0x6e, 0x84, 0x62, 0x2d, 0xc4, 0xae, 0xfe, 0x4b, 0x24, 0x11, 0x86, 0x06, 0x61, 0x06, 0x83, - 0x30, 0x23, 0x89, 0x31, 0xf7, 0x4a, 0x89, 0xf1, 0x43, 0x98, 0xf3, 0x7c, 0xc3, 0xc7, 0xa2, 0x8a, - 0xda, 0x18, 0x25, 0x4e, 0x8d, 0xc0, 0x1a, 0xe7, 0x47, 0xe7, 0x01, 0x3a, 0x2e, 0x36, 0x7c, 0x6c, - 0xea, 0x06, 0xcf, 0xe2, 0x79, 0xad, 0x28, 0x28, 0x75, 0x1f, 0x6d, 0x0f, 0x2b, 0xc1, 0x39, 0x66, - 0xd8, 0xd5, 0x51, 0x9a, 0x23, 0x53, 0x35, 0xac, 0x09, 0x83, 0xac, 0x32, 0x3f, 0x61, 0x56, 0x11, - 0x0a, 0xb8, 0x54, 0x28, 0x67, 0x2e, 0x8c, 0xcf, 0x99, 0x5c, 0x74, 0x92, 0x9c, 0x59, 0x18, 0x9f, - 0x33, 0x85, 0xb2, 0x91, 0x39, 0xf3, 0xdb, 0x4c, 0x7a, 0xff, 0xac, 0x40, 0x35, 0xf9, 0x0d, 0x8a, - 0xdc, 0x73, 0x1b, 0xe6, 0x3d, 0x46, 0x99, 0x24, 0xf3, 0x09, 0x59, 0x21, 0x81, 0x1e, 0xc3, 0xac, - 0x65, 0x1f, 0x11, 0xb6, 0x89, 0x4b, 0xad, 0x5d, 0xb2, 0x7a, 0xdd, 0x6c, 0xd8, 0x47, 0x84, 0x3b, - 0x89, 0x69, 0xa8, 0x7d, 0x08, 0xc5, 0x80, 0x34, 0xd5, 0xd8, 0xf6, 0x60, 0x35, 0x16, 0xb2, 0xbc, - 0xd8, 0x0f, 0x22, 0x5d, 0x99, 0x2e, 0xd2, 0xd5, 0x9f, 0xe6, 0xc2, 0x5f, 0xe2, 0x43, 0xab, 0xe7, - 0x63, 0x37, 0xf1, 0x25, 0x7e, 0x24, 0xb5, 0xf3, 0xcf, 0xf0, 0xd2, 0x58, 0xed, 0xbc, 0x26, 0x15, - 0x1f, 0xd3, 0x17, 0xb0, 0xc4, 0x62, 0x4d, 0xf7, 0x70, 0x8f, 0x15, 0x1c, 0xa2, 0xf8, 0xfb, 0xfe, - 0x28, 0x35, 0xdc, 0x12, 0x1e, 0xb1, 0x6d, 0x21, 0xc7, 0x3d, 0x58, 0xee, 0x85, 0x69, 0xb5, 0xfb, - 0x80, 0x92, 0x4c, 0x53, 0xf9, 0xb4, 0x4d, 0x53, 0x1c, 0xdd, 0xe9, 0xa6, 0xac, 0x92, 0x47, 0xcc, - 0x8c, 0x49, 0x62, 0x85, 0x1b, 0xac, 0x09, 0x09, 0xf5, 0x97, 0x79, 0x80, 0xe1, 0xcb, 0xff, 0x47, - 0xb9, 0xed, 0x7e, 0x90, 0x57, 0x78, 0x21, 0x77, 0x65, 0x94, 0xe2, 0xd4, 0x8c, 0xb2, 0x17, 0xcd, - 0x28, 0xbc, 0xa4, 0x7b, 0x6f, 0xa4, 0x9a, 0xef, 0x6c, 0x2e, 0x79, 0x02, 0x67, 0xe2, 0xb1, 0x21, - 0x12, 0xc9, 0x16, 0xcc, 0x59, 0x3e, 0xee, 0x73, 0xb4, 0x27, 0x75, 0x77, 0x16, 0x12, 0xe2, 0xac, - 0xea, 0x06, 0x14, 0x1b, 0x7d, 0xa3, 0x8b, 0xdb, 0x0e, 0xee, 0xd0, 0x4e, 0x2d, 0xda, 0x10, 0x86, - 0xf0, 0x86, 0xba, 0x05, 0x85, 0x1f, 0xe2, 0x13, 0xfe, 0x51, 0x4f, 0x68, 0xa8, 0xfa, 0xa7, 0x39, - 0x58, 0x63, 0x6b, 0xc5, 0xb6, 0xc4, 0x5a, 0x34, 0xec, 0x91, 0x81, 0xdb, 0xc1, 0x1e, 0x9b, 0x6d, - 0x67, 0xa0, 0x3b, 0xd8, 0xb5, 0x88, 0x29, 0xa0, 0x80, 0x62, 0xc7, 0x19, 0xb4, 0x18, 0x01, 0x9d, - 0x03, 0xda, 0xd0, 0xbf, 0x1c, 0x10, 0x11, 0x88, 0x79, 0xad, 0xd0, 0x71, 0x06, 0xbf, 0x47, 0xdb, - 0x52, 0xd6, 0x3b, 0x36, 0x5c, 0xec, 0xb1, 0x38, 0xe3, 0xb2, 0x6d, 0x46, 0x40, 0x37, 0xe0, 0x74, - 0x1f, 0xf7, 0x89, 0x7b, 0xa2, 0xf7, 0xac, 0xbe, 0xe5, 0xeb, 0x96, 0xad, 0x1f, 0x9e, 0xf8, 0xd8, - 0x13, 0x31, 0x85, 0xf8, 0xcb, 0x27, 0xf4, 0x5d, 0xc3, 0x7e, 0x40, 0xdf, 0x20, 0x15, 0xca, 0x84, - 0xf4, 0x75, 0xaf, 0x43, 0x5c, 0xac, 0x1b, 0xe6, 0x4f, 0xd8, 0xf2, 0x99, 0xd7, 0x4a, 0x84, 0xf4, - 0xdb, 0x94, 0x56, 0x37, 0x7f, 0x82, 0xde, 0x84, 0x52, 0xc7, 0x19, 0x78, 0xd8, 0xd7, 0xe9, 0x1f, - 0xb6, 0x3a, 0x16, 0x35, 0xe0, 0xa4, 0x6d, 0x67, 0xe0, 0x85, 0x18, 0xfa, 0xd4, 0xff, 0x0b, 0x61, - 0x86, 0xa7, 0xd4, 0xcd, 0x06, 0x94, 0x23, 0x50, 0x02, 0xdd, 0xd5, 0x31, 0xcc, 0x40, 0xec, 0xea, - 0xe8, 0x33, 0xa5, 0xb9, 0xa4, 0x27, 0x3d, 0xc9, 0x9e, 0x29, 0xcd, 0x3f, 0x71, 0xe4, 0x96, 0x8e, - 0x3d, 0x53, 0x97, 0xf7, 0xf0, 0x73, 0x01, 0x37, 0x15, 0x35, 0xde, 0x50, 0x4d, 0x80, 0x6d, 0xc3, - 0x31, 0x0e, 0xad, 0x9e, 0xe5, 0x9f, 0xa0, 0xab, 0x50, 0x31, 0x4c, 0x53, 0xef, 0x48, 0x8a, 0x85, - 0x25, 0x08, 0xb8, 0x6c, 0x98, 0xe6, 0x76, 0x88, 0x8c, 0xde, 0x81, 0x15, 0xd3, 0x25, 0x4e, 0x94, - 0x97, 0xa3, 0x82, 0x15, 0xfa, 0x22, 0xcc, 0xac, 0xfe, 0xc7, 0x1c, 0x9c, 0x8f, 0x4e, 0x6c, 0x1c, - 0xae, 0xb9, 0x0f, 0x8b, 0xb1, 0x5e, 0x33, 0xa0, 0x82, 0xa1, 0xb5, 0x5a, 0x44, 0x22, 0x06, 0x5f, - 0xe4, 0x12, 0xf0, 0x45, 0x2a, 0x20, 0x94, 0x7f, 0xad, 0x80, 0xd0, 0xec, 0x6b, 0x01, 0x84, 0xe6, - 0xa6, 0x03, 0x84, 0x2e, 0xb1, 0x6d, 0x8c, 0x94, 0x66, 0x7b, 0x67, 0x1e, 0x6a, 0xe5, 0x80, 0xc7, - 0x96, 0xe8, 0x71, 0x0c, 0x38, 0x5a, 0x98, 0x06, 0x38, 0x2a, 0x64, 0x02, 0x47, 0x34, 0x6a, 0x1c, - 0xc7, 0x70, 0xfb, 0xc4, 0x95, 0xc8, 0x50, 0xb5, 0xc8, 0x4c, 0x58, 0x96, 0x74, 0x81, 0x0a, 0x65, - 0x62, 0x48, 0x90, 0x89, 0x21, 0x5d, 0x80, 0x45, 0x9b, 0xe8, 0x36, 0x7e, 0xa1, 0xd3, 0xb9, 0xf4, - 0xaa, 0x25, 0x3e, 0xb1, 0x36, 0x69, 0xe2, 0x17, 0x2d, 0x4a, 0x49, 0xa0, 0x4c, 0x8b, 0xd3, 0xa1, - 0x4c, 0x68, 0x03, 0x16, 0xfb, 0x86, 0xf7, 0x0c, 0x9b, 0xcc, 0x14, 0xaf, 0x5a, 0x66, 0x41, 0x5c, - 0xe2, 0x34, 0x6a, 0x83, 0x87, 0x2e, 0x42, 0xe0, 0x24, 0xc1, 0xb4, 0xc4, 0x98, 0xca, 0x92, 0xca, - 0xd8, 0xd4, 0xbf, 0x53, 0x60, 0x35, 0x1a, 0xe6, 0x02, 0x5b, 0x78, 0x04, 0x45, 0x57, 0x66, 0x32, - 0x11, 0xda, 0x57, 0x33, 0xca, 0xe4, 0x64, 0xea, 0xd3, 0x86, 0xb2, 0xe8, 0x47, 0x99, 0x90, 0xd6, - 0xf5, 0x71, 0xfa, 0xc6, 0x81, 0x5a, 0x6a, 0x03, 0xde, 0xfc, 0xc4, 0xb2, 0x4d, 0xf2, 0xc2, 0xcb, - 0xfc, 0x4a, 0x53, 0x62, 0x4d, 0x49, 0x89, 0x35, 0xf5, 0x17, 0x0a, 0x9c, 0x89, 0xeb, 0x12, 0xae, - 0x68, 0x24, 0x5d, 0xf1, 0x4e, 0xd2, 0xf4, 0xb8, 0x70, 0xaa, 0x33, 0xbe, 0xc8, 0x74, 0xc6, 0x8d, - 0xf1, 0x1a, 0xc7, 0xba, 0xe3, 0xaf, 0x14, 0x38, 0x9b, 0x69, 0x46, 0x6c, 0x49, 0x51, 0xe2, 0x4b, - 0x8a, 0x58, 0x8e, 0x3a, 0x64, 0x60, 0xfb, 0xa1, 0xe5, 0x68, 0x9b, 0x1d, 0x31, 0xf0, 0xbc, 0xaf, - 0xf7, 0x8d, 0x97, 0x56, 0x7f, 0xd0, 0x17, 0xeb, 0x11, 0x55, 0xf7, 0x94, 0x53, 0x5e, 0x61, 0x41, - 0x52, 0xeb, 0xb0, 0x12, 0x58, 0x39, 0x12, 0x04, 0x0c, 0x81, 0x7a, 0xb9, 0x28, 0xa8, 0x67, 0xc3, - 0xfc, 0x0e, 0x7e, 0x6e, 0x75, 0xf0, 0x6b, 0x39, 0x03, 0xb9, 0x00, 0x25, 0x07, 0xbb, 0x7d, 0xcb, - 0xf3, 0x82, 0x44, 0x5b, 0xd4, 0xc2, 0x24, 0xf5, 0x3f, 0xe7, 0x61, 0x39, 0x1e, 0x1d, 0xf7, 0x12, - 0x18, 0xe2, 0x5b, 0x29, 0x4b, 0x40, 0x7c, 0xa0, 0xa1, 0x6a, 0xf2, 0x86, 0x2c, 0x46, 0x72, 0x59, - 0x1b, 0xf9, 0xa0, 0x70, 0x11, 0x95, 0x0a, 0xf5, 0x48, 0x87, 0xf4, 0xfb, 0x86, 0x6d, 0xca, 0xa3, - 0x2b, 0xd1, 0xa4, 0xfe, 0x33, 0xdc, 0x2e, 0x75, 0x3b, 0x25, 0xb3, 0x67, 0x3a, 0x79, 0x74, 0xd7, - 0x6b, 0xd9, 0x0c, 0x8b, 0x64, 0xc9, 0xba, 0xa8, 0x81, 0x20, 0xed, 0x58, 0x2e, 0xda, 0x84, 0x59, - 0x6c, 0x3f, 0x97, 0xe5, 0x62, 0xca, 0xd9, 0x96, 0x2c, 0x8b, 0x34, 0xc6, 0x87, 0xae, 0xc3, 0x7c, - 0x9f, 0x86, 0x85, 0xdc, 0xff, 0xae, 0x65, 0x1c, 0xf1, 0x68, 0x82, 0x0d, 0x6d, 0xc1, 0x82, 0xc9, - 0xe6, 0x49, 0x6e, 0x72, 0xab, 0x29, 0x08, 0x27, 0x63, 0xd0, 0x24, 0x23, 0xda, 0x0d, 0x8a, 0xe1, - 0x62, 0x56, 0x15, 0x1b, 0x9b, 0x8a, 0xd4, 0x8a, 0x78, 0x3f, 0x5a, 0x11, 0x03, 0xd3, 0xb5, 0x35, - 0x5e, 0xd7, 0x68, 0x58, 0xf2, 0x2c, 0x14, 0x7a, 0xa4, 0xcb, 0xc3, 0xa8, 0xc4, 0x4f, 0x45, 0x7b, - 0xa4, 0xcb, 0xa2, 0x68, 0x95, 0x6e, 0x0e, 0x4c, 0xcb, 0x66, 0x49, 0xbd, 0xa0, 0xf1, 0x06, 0xfd, - 0xf8, 0xd8, 0x83, 0x4e, 0xec, 0x0e, 0xae, 0x96, 0xd9, 0xab, 0x22, 0xa3, 0xec, 0xd9, 0x1d, 0x56, - 0x6e, 0xfa, 0xfe, 0x49, 0x75, 0x89, 0xd1, 0xe9, 0x23, 0xdd, 0xf7, 0x71, 0x88, 0x62, 0x39, 0x6b, - 0xdf, 0x97, 0x96, 0xb6, 0x25, 0x42, 0xf1, 0x00, 0x16, 0x5e, 0xf0, 0x44, 0x50, 0xad, 0x30, 0xf9, - 0x2b, 0xe3, 0xd3, 0x8b, 0xd0, 0x20, 0x05, 0xbf, 0xcd, 0xd2, 0xff, 0x97, 0x0a, 0x9c, 0xd9, 0x66, - 0xdb, 0xa2, 0x50, 0x1e, 0x9b, 0x06, 0xc9, 0xbb, 0x15, 0x80, 0xac, 0x99, 0xb0, 0x5b, 0x7c, 0xdc, - 0x12, 0x63, 0x6d, 0xc0, 0x92, 0x54, 0x2e, 0x54, 0xe4, 0x27, 0xc6, 0x69, 0xcb, 0x5e, 0xb8, 0xa9, - 0x7e, 0x04, 0x6b, 0x89, 0x51, 0x88, 0x2d, 0xcc, 0x06, 0x2c, 0x0e, 0xf3, 0x55, 0x30, 0x88, 0x52, - 0x40, 0x6b, 0x98, 0xea, 0x6d, 0x38, 0xdd, 0xf6, 0x0d, 0xd7, 0x4f, 0xb8, 0x60, 0x02, 0x59, 0x86, - 0xc0, 0x46, 0x65, 0x05, 0x48, 0xda, 0x86, 0xd5, 0xb6, 0x4f, 0x9c, 0x57, 0x50, 0x4a, 0xb3, 0x0e, - 0x1d, 0x3f, 0x19, 0xc8, 0xf5, 0x41, 0x36, 0xd5, 0x35, 0x8e, 0x17, 0x27, 0x7b, 0xbb, 0x03, 0x67, - 0x38, 0x5c, 0xfb, 0x2a, 0x83, 0x38, 0x2b, 0xc1, 0xe2, 0xa4, 0xde, 0xa7, 0x70, 0x6a, 0xb8, 0x2c, - 0x0e, 0xa1, 0x98, 0x9b, 0x51, 0x28, 0xe6, 0xc2, 0x88, 0x59, 0x8f, 0x20, 0x31, 0x7f, 0x91, 0x0b, - 0xe5, 0xf5, 0x0c, 0x20, 0xe6, 0x4e, 0x14, 0x88, 0xb9, 0x38, 0x4e, 0x77, 0x04, 0x87, 0x49, 0x46, - 0x6d, 0x3e, 0x25, 0x6a, 0x3f, 0x4f, 0xa0, 0x35, 0xb3, 0x59, 0x70, 0x57, 0xcc, 0xda, 0xdf, 0x0a, - 0x58, 0xa3, 0x71, 0xb0, 0x26, 0xe8, 0x3a, 0x40, 0xd7, 0x6f, 0xc5, 0xc0, 0x9a, 0x8d, 0xb1, 0xf6, - 0x06, 0x58, 0xcd, 0xdf, 0xcc, 0x42, 0x31, 0x78, 0x97, 0xf0, 0x79, 0xd2, 0x6d, 0xb9, 0x14, 0xb7, - 0x85, 0x57, 0xe0, 0xfc, 0x37, 0x5a, 0x81, 0x67, 0x27, 0x5e, 0x81, 0xcf, 0x41, 0x91, 0x3d, 0xe8, - 0x2e, 0x3e, 0x12, 0x2b, 0x6a, 0x81, 0x11, 0x34, 0x7c, 0x34, 0x0c, 0xc3, 0xf9, 0xa9, 0xc2, 0x30, - 0x06, 0x0f, 0x2d, 0xc4, 0xe1, 0xa1, 0x7b, 0xc1, 0x8a, 0xc8, 0x17, 0xd1, 0xcb, 0x23, 0xf4, 0xa6, - 0xae, 0x85, 0xcd, 0xe8, 0x5a, 0xc8, 0xd7, 0xd5, 0x77, 0x47, 0x69, 0xf9, 0xce, 0x82, 0x43, 0x07, - 0x1c, 0x1c, 0x0a, 0xc7, 0xa2, 0xc8, 0xac, 0x77, 0x00, 0x82, 0x24, 0x22, 0x11, 0xa2, 0x73, 0x23, - 0xc6, 0xa8, 0x85, 0xd8, 0xa9, 0xda, 0xc8, 0xd4, 0x0c, 0x4f, 0x90, 0x26, 0xcb, 0x8f, 0x19, 0xc7, - 0x47, 0xff, 0x3b, 0x17, 0xca, 0x2f, 0x19, 0x47, 0x2e, 0xf7, 0x12, 0xb0, 0xe4, 0x94, 0x51, 0x7c, - 0x33, 0x8a, 0x4a, 0xbe, 0x62, 0xd4, 0x25, 0x40, 0x49, 0x56, 0xb9, 0x18, 0xae, 0x78, 0xcd, 0x41, - 0xa3, 0xa2, 0xa0, 0xd4, 0xd9, 0xce, 0xe0, 0xc8, 0xb2, 0x2d, 0xef, 0x98, 0xbf, 0x9f, 0xe7, 0x3b, - 0x03, 0x49, 0xaa, 0xb3, 0xdb, 0x4d, 0xf8, 0xa5, 0xe5, 0xeb, 0x1d, 0x62, 0x62, 0x16, 0xd3, 0x73, - 0x5a, 0x81, 0x12, 0xb6, 0x89, 0x89, 0x87, 0x5f, 0x5e, 0xe1, 0xd5, 0xbe, 0xbc, 0x62, 0xec, 0xcb, - 0x3b, 0x03, 0xf3, 0x2e, 0x36, 0x3c, 0x62, 0x8b, 0xed, 0xb9, 0x68, 0xd1, 0xa9, 0xe9, 0x63, 0xcf, - 0xa3, 0x3d, 0x89, 0x72, 0x4d, 0x34, 0x43, 0x65, 0xe6, 0xe2, 0xd8, 0x32, 0x73, 0xc4, 0x51, 0x4e, - 0xac, 0xcc, 0x2c, 0x8f, 0x2d, 0x33, 0x27, 0x39, 0xc9, 0x09, 0x15, 0xda, 0x4b, 0x93, 0x15, 0xda, - 0xe1, 0xba, 0x74, 0x39, 0x52, 0x97, 0x7e, 0x9b, 0x1f, 0xeb, 0xaf, 0x15, 0x58, 0x4b, 0x7c, 0x56, - 0xe2, 0x73, 0xbd, 0x15, 0x3b, 0x14, 0xda, 0x18, 0xeb, 0xb3, 0xe0, 0x4c, 0xe8, 0x51, 0xe4, 0x4c, - 0xe8, 0x83, 0xf1, 0x82, 0xaf, 0xfd, 0x48, 0xe8, 0x8f, 0x15, 0x78, 0xf3, 0xc0, 0x31, 0x63, 0x15, - 0x9e, 0xd8, 0xf6, 0x4f, 0x9e, 0x38, 0xee, 0xc9, 0x5a, 0x3f, 0x37, 0x2d, 0xce, 0xc2, 0xe5, 0x54, - 0x15, 0x2e, 0x64, 0x9b, 0x21, 0x4a, 0xa6, 0x1f, 0xc3, 0xf2, 0xee, 0x4b, 0xdc, 0x69, 0x9f, 0xd8, - 0x9d, 0x29, 0x4c, 0xab, 0x40, 0xbe, 0xd3, 0x37, 0x05, 0x4a, 0x4a, 0x1f, 0xc3, 0x55, 0x60, 0x3e, - 0x5a, 0x05, 0xea, 0x50, 0x19, 0xf6, 0x20, 0xa6, 0xf7, 0x0c, 0x9d, 0x5e, 0x93, 0x32, 0x53, 0xe5, - 0x8b, 0x9a, 0x68, 0x09, 0x3a, 0x76, 0xf9, 0x05, 0x06, 0x4e, 0xc7, 0xae, 0x1b, 0xcd, 0x16, 0xf9, - 0x68, 0xb6, 0x50, 0xff, 0x5c, 0x81, 0x12, 0xed, 0xe1, 0x1b, 0xd9, 0x2f, 0xb6, 0x5a, 0xf9, 0xe1, - 0x56, 0x2b, 0xd8, 0xb1, 0xcd, 0x86, 0x77, 0x6c, 0x43, 0xcb, 0xe7, 0x18, 0x39, 0x69, 0xf9, 0x7c, - 0x40, 0xc7, 0xae, 0xab, 0x5e, 0x80, 0x45, 0x6e, 0x9b, 0x18, 0x79, 0x05, 0xf2, 0x03, 0xb7, 0x27, - 0xe3, 0x68, 0xe0, 0xf6, 0xd4, 0x3f, 0x51, 0xa0, 0x5c, 0xf7, 0x7d, 0xa3, 0x73, 0x3c, 0xc5, 0x00, - 0x02, 0xe3, 0x72, 0x61, 0xe3, 0x92, 0x83, 0x18, 0x9a, 0x3b, 0x9b, 0x61, 0xee, 0x5c, 0xc4, 0x5c, - 0x15, 0x96, 0xa4, 0x2d, 0x99, 0x06, 0x37, 0x01, 0xb5, 0x88, 0xeb, 0x3f, 0x24, 0xee, 0x0b, 0xc3, - 0x35, 0xa7, 0xdb, 0x81, 0x21, 0x98, 0x15, 0x37, 0x5e, 0xf3, 0x57, 0xe6, 0x34, 0xf6, 0xac, 0x5e, - 0x86, 0x53, 0x11, 0x7d, 0x99, 0x1d, 0xdf, 0x87, 0x12, 0xcb, 0xfb, 0xa2, 0x14, 0xbf, 0x11, 0x3e, - 0xae, 0x99, 0x68, 0x95, 0x50, 0x7f, 0x17, 0x56, 0x68, 0x7d, 0xc0, 0xe8, 0xc1, 0xa7, 0xf8, 0xfd, - 0x58, 0x9d, 0x7a, 0x3e, 0x43, 0x51, 0xac, 0x46, 0xfd, 0x5b, 0x05, 0xe6, 0x18, 0x3d, 0xb1, 0x66, - 0x9f, 0x83, 0xa2, 0x8b, 0x1d, 0xa2, 0xfb, 0x46, 0x37, 0xb8, 0x5f, 0x4c, 0x09, 0xfb, 0x46, 0xd7, - 0x63, 0xd7, 0xa3, 0xe9, 0x4b, 0xd3, 0xea, 0x62, 0xcf, 0x97, 0x97, 0x8c, 0x4b, 0x94, 0xb6, 0xc3, - 0x49, 0xd4, 0x49, 0x9e, 0xf5, 0xfb, 0xbc, 0xee, 0x9c, 0xd5, 0xd8, 0x33, 0xda, 0xe4, 0x57, 0xde, - 0x26, 0x81, 0xd4, 0xd9, 0x85, 0xb8, 0x1a, 0x14, 0x62, 0x28, 0x7a, 0xd0, 0x56, 0x77, 0x01, 0x85, - 0xbd, 0x20, 0xfc, 0x7d, 0x1d, 0xe6, 0x99, 0x93, 0x64, 0x75, 0xb4, 0x96, 0xe1, 0x06, 0x4d, 0xb0, - 0xa9, 0x06, 0x20, 0xee, 0xe0, 0x48, 0x45, 0x34, 0xfd, 0xac, 0x8c, 0xa8, 0x90, 0xfe, 0x5e, 0x81, - 0x53, 0x91, 0x3e, 0x84, 0xad, 0xef, 0x45, 0x3b, 0xc9, 0x34, 0x55, 0x74, 0xb0, 0x1d, 0x59, 0x12, - 0xae, 0x67, 0x99, 0xf4, 0x1b, 0x5a, 0x0e, 0xfe, 0x41, 0x01, 0xa8, 0x0f, 0xfc, 0x63, 0x81, 0x0c, - 0x86, 0x67, 0x46, 0x89, 0xce, 0x0c, 0x7d, 0xe7, 0x18, 0x9e, 0xf7, 0x82, 0xb8, 0x72, 0x4f, 0x13, - 0xb4, 0x19, 0x86, 0x37, 0xf0, 0x8f, 0xe5, 0x51, 0x18, 0x7d, 0x46, 0x17, 0x61, 0x89, 0xdf, 0x69, - 0xd7, 0x0d, 0xd3, 0x74, 0xb1, 0xe7, 0x89, 0x33, 0xb1, 0x32, 0xa7, 0xd6, 0x39, 0x91, 0xb2, 0x59, - 0x26, 0xb6, 0x7d, 0xcb, 0x3f, 0xd1, 0x7d, 0xf2, 0x0c, 0xdb, 0x62, 0x6f, 0x52, 0x96, 0xd4, 0x7d, - 0x4a, 0xe4, 0x87, 0x03, 0x5d, 0xcb, 0xf3, 0x5d, 0xc9, 0x26, 0xcf, 0x5f, 0x04, 0x95, 0xb1, 0xd1, - 0x49, 0xa9, 0xb4, 0x06, 0xbd, 0x1e, 0x77, 0xf1, 0xab, 0x4f, 0xfb, 0xfb, 0x62, 0x40, 0xb9, 0xac, - 0x98, 0x1e, 0x3a, 0x4d, 0x0c, 0xf7, 0x35, 0x82, 0x30, 0xef, 0xc3, 0x4a, 0x68, 0x0c, 0x22, 0xac, - 0x22, 0x45, 0xa4, 0x12, 0x2d, 0x22, 0xd5, 0x47, 0x80, 0x38, 0xee, 0xf0, 0x0d, 0xc7, 0xad, 0x9e, - 0x86, 0x53, 0x11, 0x45, 0x62, 0x25, 0xbe, 0x06, 0x65, 0x71, 0x2f, 0x49, 0x04, 0xca, 0x59, 0x28, - 0xd0, 0x8c, 0xda, 0xb1, 0x4c, 0x79, 0x4e, 0xba, 0xe0, 0x10, 0x73, 0xdb, 0x32, 0x5d, 0xf5, 0x13, - 0x28, 0x6b, 0xbc, 0x1f, 0xc1, 0xfb, 0x10, 0x96, 0xc4, 0x2d, 0x26, 0x3d, 0x72, 0x8d, 0x30, 0xed, - 0x9a, 0x7a, 0xb8, 0x13, 0xad, 0x6c, 0x87, 0x9b, 0xaa, 0x09, 0x35, 0x5e, 0x32, 0x44, 0xd4, 0xcb, - 0xc1, 0x3e, 0x04, 0x79, 0xa3, 0x70, 0x6c, 0x2f, 0x51, 0xf9, 0xb2, 0x1b, 0x6e, 0xaa, 0xe7, 0xe1, - 0x5c, 0x6a, 0x2f, 0xc2, 0x13, 0x0e, 0x54, 0x86, 0x2f, 0x4c, 0x4b, 0x1e, 0x18, 0xb3, 0x83, 0x60, - 0x25, 0x74, 0x10, 0x7c, 0x26, 0x28, 0x12, 0x73, 0x72, 0x11, 0x63, 0x15, 0xe0, 0xb0, 0xdc, 0xcf, - 0x67, 0x95, 0xfb, 0xb3, 0x91, 0x72, 0x5f, 0x6d, 0x07, 0xfe, 0x14, 0xdb, 0xb0, 0x07, 0x6c, 0xbb, - 0xc8, 0xfb, 0x96, 0x09, 0x51, 0x1d, 0x35, 0x4a, 0xce, 0xaa, 0x85, 0xa4, 0xd4, 0xab, 0x50, 0x8e, - 0xa6, 0xc6, 0x50, 0x9e, 0x53, 0x12, 0x79, 0x6e, 0x29, 0x96, 0xe2, 0x3e, 0x8c, 0x55, 0xc0, 0xd9, - 0x3e, 0x8e, 0xd5, 0xbf, 0x77, 0x23, 0xc9, 0xee, 0x5a, 0xca, 0x19, 0xee, 0x6f, 0x28, 0xcf, 0xad, - 0x8a, 0xf5, 0xe0, 0xa1, 0x47, 0xe5, 0xc5, 0xa0, 0xd5, 0xb7, 0xa0, 0x74, 0x90, 0xf5, 0x1b, 0x88, - 0x59, 0x79, 0x5f, 0xe2, 0x26, 0xac, 0x3e, 0xb4, 0x7a, 0xd8, 0x3b, 0xf1, 0x7c, 0xdc, 0x6f, 0xb0, - 0xa4, 0x74, 0x64, 0x61, 0x17, 0xad, 0x03, 0xb0, 0x2d, 0x8c, 0x43, 0xac, 0xe0, 0x6a, 0x7c, 0x88, - 0xa2, 0xfe, 0x97, 0x02, 0xcb, 0x43, 0xc1, 0x03, 0xb6, 0x75, 0x7b, 0x03, 0x8a, 0x74, 0xbc, 0x9e, - 0x6f, 0xf4, 0x1d, 0x79, 0x9e, 0x15, 0x10, 0xd0, 0x1d, 0x98, 0x3b, 0xf2, 0x24, 0x64, 0x94, 0x0a, - 0xa0, 0xa7, 0x19, 0xa2, 0xcd, 0x1e, 0x79, 0x0d, 0x13, 0x7d, 0x04, 0x30, 0xf0, 0xb0, 0x29, 0xce, - 0xb0, 0xf2, 0x59, 0xd5, 0xc2, 0x41, 0xf8, 0x7c, 0x9b, 0x0a, 0xf0, 0xab, 0x16, 0x77, 0xa1, 0x64, - 0xd9, 0xc4, 0xc4, 0xec, 0xcc, 0xd1, 0x14, 0xa8, 0xd2, 0x18, 0x71, 0xe0, 0x12, 0x07, 0x1e, 0x36, - 0x55, 0x2c, 0xd6, 0x42, 0xe9, 0x5f, 0x11, 0x28, 0x4d, 0x58, 0xe1, 0x49, 0xeb, 0x28, 0x30, 0x5c, - 0x46, 0xec, 0xc6, 0xa8, 0xd1, 0x31, 0x6f, 0x69, 0x15, 0x4b, 0x94, 0x36, 0x52, 0x54, 0xbd, 0x0d, - 0xa7, 0x23, 0x3b, 0xa4, 0x29, 0xb6, 0x2c, 0x6a, 0x2b, 0x06, 0x94, 0x0c, 0xc3, 0x59, 0xc0, 0x10, - 0x32, 0x9a, 0xc7, 0xc1, 0x10, 0x1e, 0x87, 0x21, 0x3c, 0xf5, 0x73, 0x38, 0x1b, 0x41, 0x74, 0x22, - 0x16, 0xdd, 0x8d, 0x55, 0x6e, 0x97, 0xc6, 0x69, 0x8d, 0x95, 0x70, 0xff, 0xa3, 0xc0, 0x6a, 0x1a, - 0xc3, 0x2b, 0x22, 0x8e, 0x3f, 0xce, 0xb8, 0x56, 0x77, 0x6b, 0x32, 0xb3, 0x7e, 0x2b, 0x68, 0xed, - 0x3e, 0xd4, 0xd2, 0xfc, 0x99, 0x9c, 0xa5, 0xfc, 0x34, 0xb3, 0xf4, 0xb3, 0x7c, 0x08, 0x79, 0xaf, - 0xfb, 0xbe, 0x6b, 0x1d, 0x0e, 0x68, 0xc8, 0xbf, 0x76, 0x34, 0xab, 0x11, 0xe0, 0x32, 0xdc, 0xb5, - 0x37, 0x46, 0x88, 0x0f, 0xed, 0x48, 0xc5, 0x66, 0x3e, 0x8d, 0x62, 0x33, 0x1c, 0x53, 0xbf, 0x39, - 0x99, 0xbe, 0xef, 0x2c, 0x00, 0xfa, 0xb3, 0x1c, 0x2c, 0x45, 0xa7, 0x08, 0xed, 0x02, 0x18, 0x81, - 0xe5, 0xe2, 0x43, 0xb9, 0x38, 0xd1, 0x30, 0xb5, 0x90, 0x20, 0x7a, 0x17, 0xf2, 0x1d, 0x67, 0x20, - 0x66, 0x2d, 0xe5, 0x30, 0x78, 0xdb, 0x19, 0xf0, 0x8c, 0x42, 0xd9, 0xe8, 0x9e, 0x8a, 0x9f, 0xed, - 0x67, 0x67, 0xc9, 0xa7, 0xec, 0x3d, 0x97, 0x11, 0xcc, 0xe8, 0x31, 0x2c, 0xbd, 0x70, 0x2d, 0xdf, - 0x38, 0xec, 0x61, 0xbd, 0x67, 0x9c, 0x60, 0x57, 0x64, 0xc9, 0x09, 0x12, 0x59, 0x59, 0x0a, 0x3e, - 0xa1, 0x72, 0xea, 0x1f, 0x42, 0x41, 0x5a, 0x34, 0x66, 0x45, 0xd8, 0x87, 0xb5, 0x01, 0x65, 0xd3, - 0xd9, 0x15, 0x38, 0xdb, 0xb0, 0x89, 0xee, 0x61, 0xba, 0x8c, 0xcb, 0xcb, 0xf9, 0x63, 0x52, 0xf4, - 0x2a, 0x93, 0xde, 0x26, 0x2e, 0x6e, 0x1a, 0x36, 0x69, 0x73, 0x51, 0xf5, 0x39, 0x94, 0x42, 0x03, - 0x1c, 0x63, 0x42, 0x03, 0x56, 0xe4, 0x51, 0xbc, 0x87, 0x7d, 0xb1, 0xbc, 0x4c, 0xd4, 0xf9, 0xb2, - 0x90, 0x6b, 0x63, 0x9f, 0x5f, 0x9f, 0xb8, 0x0b, 0x67, 0x35, 0x4c, 0x1c, 0x6c, 0x07, 0xf3, 0xf9, - 0x84, 0x74, 0xa7, 0xc8, 0xe0, 0x6f, 0x40, 0x2d, 0x4d, 0x9e, 0xe7, 0x87, 0x6b, 0x97, 0xa0, 0x20, - 0x7f, 0xd0, 0x8a, 0x16, 0x20, 0xbf, 0xbf, 0xdd, 0xaa, 0xcc, 0xd0, 0x87, 0x83, 0x9d, 0x56, 0x45, - 0x41, 0x05, 0x98, 0x6d, 0x6f, 0xef, 0xb7, 0x2a, 0xb9, 0x6b, 0x7d, 0xa8, 0xc4, 0x7f, 0xcd, 0x89, - 0xd6, 0xe0, 0x54, 0x4b, 0xdb, 0x6b, 0xd5, 0x1f, 0xd5, 0xf7, 0x1b, 0x7b, 0x4d, 0xbd, 0xa5, 0x35, - 0x3e, 0xae, 0xef, 0xef, 0x56, 0x66, 0xd0, 0x06, 0x9c, 0x0f, 0xbf, 0x78, 0xbc, 0xd7, 0xde, 0xd7, - 0xf7, 0xf7, 0xf4, 0xed, 0xbd, 0xe6, 0x7e, 0xbd, 0xd1, 0xdc, 0xd5, 0x2a, 0x0a, 0x3a, 0x0f, 0x67, - 0xc3, 0x2c, 0x0f, 0x1a, 0x3b, 0x0d, 0x6d, 0x77, 0x9b, 0x3e, 0xd7, 0x9f, 0x54, 0x72, 0xd7, 0x6e, - 0x40, 0x39, 0xf2, 0xe3, 0x4b, 0x6a, 0x52, 0x6b, 0x6f, 0xa7, 0x32, 0x83, 0xca, 0x50, 0x0c, 0xeb, - 0x29, 0xc0, 0x6c, 0x73, 0x6f, 0x67, 0xb7, 0x92, 0xbb, 0x76, 0x1b, 0x96, 0x63, 0xb7, 0x71, 0xd1, - 0x0a, 0x94, 0xdb, 0xf5, 0xe6, 0xce, 0x83, 0xbd, 0x4f, 0x75, 0x6d, 0xb7, 0xbe, 0xf3, 0x59, 0x65, - 0x06, 0xad, 0x42, 0x45, 0x92, 0x9a, 0x7b, 0xfb, 0x9c, 0xaa, 0x5c, 0x7b, 0x16, 0xfb, 0xc6, 0x30, - 0x3a, 0x0d, 0x2b, 0x41, 0x37, 0xfa, 0xb6, 0xb6, 0x5b, 0xdf, 0xdf, 0xa5, 0xbd, 0x47, 0xc8, 0xda, - 0x41, 0xb3, 0xd9, 0x68, 0x3e, 0xaa, 0x28, 0x54, 0xeb, 0x90, 0xbc, 0xfb, 0x69, 0x83, 0x32, 0xe7, - 0xa2, 0xcc, 0x07, 0xcd, 0x1f, 0x36, 0xf7, 0x3e, 0x69, 0x56, 0xf2, 0x5b, 0xbf, 0x58, 0x81, 0x25, - 0x59, 0xe8, 0x61, 0x97, 0xdd, 0x6a, 0x69, 0xc1, 0x82, 0xfc, 0x81, 0x74, 0x4a, 0x86, 0x8e, 0xfe, - 0xac, 0xbb, 0xb6, 0x31, 0x82, 0x43, 0xd4, 0xdb, 0x33, 0xe8, 0x90, 0xd5, 0xbf, 0xa1, 0xdb, 0xd1, - 0x97, 0x52, 0xab, 0xcd, 0xc4, 0x85, 0xec, 0xda, 0xe5, 0xb1, 0x7c, 0x41, 0x1f, 0x98, 0x96, 0xb8, - 0xe1, 0x9f, 0xff, 0xa0, 0xcb, 0x69, 0xb5, 0x69, 0xca, 0xef, 0x8b, 0x6a, 0x57, 0xc6, 0x33, 0x06, - 0xdd, 0x3c, 0x83, 0x4a, 0xfc, 0xa7, 0x40, 0x28, 0x05, 0x3a, 0xcd, 0xf8, 0xbd, 0x51, 0xed, 0xda, - 0x24, 0xac, 0xe1, 0xce, 0x12, 0x3f, 0x9a, 0xb9, 0x3a, 0xc9, 0xaf, 0x10, 0x32, 0x3b, 0xcb, 0xfa, - 0xc1, 0x02, 0x77, 0x60, 0xf4, 0xe6, 0x33, 0x4a, 0xfd, 0x85, 0x4a, 0xca, 0xbd, 0xf9, 0x34, 0x07, - 0xa6, 0x5f, 0xa2, 0x56, 0x67, 0xd0, 0x31, 0x2c, 0xc7, 0xae, 0x27, 0xa0, 0x14, 0xf1, 0xf4, 0x7b, - 0x18, 0xb5, 0xab, 0x13, 0x70, 0x46, 0x23, 0x22, 0x7c, 0x1d, 0x21, 0x3d, 0x22, 0x52, 0x2e, 0x3b, - 0xa4, 0x47, 0x44, 0xea, 0xcd, 0x06, 0x16, 0xdc, 0x91, 0x6b, 0x08, 0x69, 0xc1, 0x9d, 0x76, 0xf9, - 0xa1, 0x76, 0x79, 0x2c, 0x5f, 0xd8, 0x69, 0xb1, 0x4b, 0x09, 0x69, 0x4e, 0x4b, 0xbf, 0xf4, 0x50, - 0xbb, 0x3a, 0x01, 0x67, 0x3c, 0x0a, 0x86, 0x47, 0x9c, 0x59, 0x51, 0x90, 0x38, 0x90, 0xcf, 0x8a, - 0x82, 0xe4, 0x69, 0xa9, 0x88, 0x82, 0xd8, 0xd1, 0xe4, 0x95, 0x09, 0x8e, 0x52, 0xb2, 0xa3, 0x20, - 0xfd, 0xd0, 0x45, 0x9d, 0x41, 0x7f, 0xa4, 0x40, 0x35, 0xeb, 0x98, 0x02, 0xa5, 0xd4, 0x77, 0x63, - 0x4e, 0x56, 0x6a, 0x5b, 0xd3, 0x88, 0x04, 0x56, 0x7c, 0x09, 0x28, 0xb9, 0xee, 0xa1, 0x77, 0xd2, - 0x66, 0x26, 0x63, 0x75, 0xad, 0xbd, 0x3b, 0x19, 0x73, 0xd0, 0x65, 0x1b, 0x0a, 0xf2, 0x60, 0x04, - 0xa5, 0x64, 0xe9, 0xd8, 0xb1, 0x4c, 0x4d, 0x1d, 0xc5, 0x12, 0x28, 0x7d, 0x04, 0xb3, 0x94, 0x8a, - 0xce, 0xa7, 0x73, 0x4b, 0x65, 0xeb, 0x59, 0xaf, 0x03, 0x45, 0x4f, 0x61, 0x9e, 0x9f, 0x04, 0xa0, - 0x14, 0xe4, 0x21, 0x72, 0x5e, 0x51, 0xbb, 0x90, 0xcd, 0x10, 0xa8, 0xfb, 0x82, 0xff, 0xef, 0x0c, - 0x01, 0xf2, 0xa3, 0xb7, 0xd3, 0x7f, 0x8c, 0x1c, 0x3d, 0x53, 0xa8, 0x5d, 0x1c, 0xc3, 0x15, 0xfe, - 0x28, 0x62, 0x55, 0xef, 0xe5, 0xb1, 0x5b, 0x97, 0xec, 0x8f, 0x22, 0x7d, 0x73, 0xc4, 0x83, 0x24, - 0xb9, 0x79, 0x4a, 0x0b, 0x92, 0xcc, 0x2d, 0x6b, 0x5a, 0x90, 0x64, 0xef, 0xc7, 0xd4, 0x19, 0xe4, - 0xc3, 0xa9, 0x14, 0xa8, 0x0c, 0xbd, 0x9b, 0x15, 0xe4, 0x69, 0xb8, 0x5d, 0xed, 0xbd, 0x09, 0xb9, - 0xc3, 0x93, 0x2f, 0x3e, 0xfa, 0x37, 0xb3, 0xf1, 0xa3, 0xcc, 0xc9, 0x8f, 0x7f, 0xe2, 0x5b, 0xff, - 0x9a, 0x87, 0x45, 0x0e, 0x83, 0x8a, 0x0a, 0xe6, 0x33, 0x80, 0xe1, 0x09, 0x04, 0x7a, 0x2b, 0xdd, - 0x27, 0x91, 0x53, 0x9a, 0xda, 0xdb, 0xa3, 0x99, 0xc2, 0x81, 0x16, 0x42, 0xf3, 0xd3, 0x02, 0x2d, - 0x79, 0x68, 0x91, 0x16, 0x68, 0x29, 0x47, 0x02, 0xea, 0x0c, 0xfa, 0x18, 0x8a, 0x01, 0x6c, 0x8c, - 0xd2, 0x60, 0xe7, 0x18, 0x2e, 0x5e, 0x7b, 0x6b, 0x24, 0x4f, 0xd8, 0xea, 0x10, 0x26, 0x9c, 0x66, - 0x75, 0x12, 0x7b, 0x4e, 0xb3, 0x3a, 0x0d, 0x58, 0x1e, 0xfa, 0x84, 0x23, 0x47, 0x99, 0x3e, 0x89, - 0x00, 0x77, 0x99, 0x3e, 0x89, 0xc2, 0x4f, 0xea, 0xcc, 0x83, 0x4b, 0xbf, 0xfa, 0x6a, 0x5d, 0xf9, - 0xa7, 0xaf, 0xd6, 0x67, 0x7e, 0xfa, 0xf5, 0xba, 0xf2, 0xab, 0xaf, 0xd7, 0x95, 0x7f, 0xfc, 0x7a, - 0x5d, 0xf9, 0xb7, 0xaf, 0xd7, 0x95, 0x3f, 0xfb, 0xf7, 0xf5, 0x99, 0x1f, 0x15, 0xa4, 0xf4, 0xe1, - 0x3c, 0xfb, 0x0f, 0x38, 0x1f, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x15, 0x30, 0x49, 0xcc, - 0xc7, 0x48, 0x00, 0x00, + 0xf8, 0x73, 0xc7, 0xf2, 0x58, 0xb3, 0xeb, 0x89, 0xed, 0x59, 0xdb, 0xb4, 0x24, 0xdb, 0xcc, 0xda, + 0x14, 0xd3, 0x94, 0xe6, 0x63, 0x67, 0x80, 0xde, 0x16, 0xbb, 0x44, 0xf5, 0x9a, 0xec, 0xea, 0xe9, + 0x6e, 0xda, 0x56, 0x02, 0x04, 0x0b, 0x2c, 0xb2, 0x87, 0x00, 0x01, 0x72, 0xce, 0x71, 0x73, 0xc8, + 0x21, 0xb7, 0x00, 0x41, 0x0e, 0x39, 0x6d, 0x90, 0xc3, 0x5e, 0x02, 0xe4, 0xb4, 0x48, 0x90, 0x4b, + 0x66, 0x92, 0x5c, 0x02, 0x24, 0xc8, 0x1f, 0x90, 0x43, 0x50, 0x5f, 0xcd, 0xfe, 0xe4, 0x87, 0xc7, + 0xbb, 0xb3, 0x39, 0xa9, 0xfb, 0xf5, 0x7b, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0xd5, 0xaf, 0x8a, + 0x82, 0xa2, 0xe1, 0x58, 0x9b, 0x8e, 0x4b, 0x7c, 0x82, 0x2a, 0xee, 0xc0, 0xf6, 0xad, 0x3e, 0xde, + 0x7c, 0x71, 0xd3, 0xe8, 0x39, 0xc7, 0xc6, 0x56, 0xed, 0x7a, 0xd7, 0xf2, 0x8f, 0x07, 0x87, 0x9b, + 0x1d, 0xd2, 0xbf, 0xd1, 0x25, 0x5d, 0x72, 0x83, 0x31, 0x1e, 0x0e, 0x8e, 0xd8, 0x1b, 0x7b, 0x61, + 0x4f, 0x5c, 0x81, 0x7a, 0x0d, 0x96, 0x3e, 0xc6, 0xae, 0x67, 0x11, 0x5b, 0xc3, 0x5f, 0x0e, 0xb0, + 0xe7, 0xa3, 0x2a, 0x2c, 0xbc, 0xe0, 0x94, 0xaa, 0x72, 0x41, 0xb9, 0x52, 0xd4, 0xe4, 0xab, 0xfa, + 0x17, 0x0a, 0x2c, 0x07, 0xcc, 0x9e, 0x43, 0x6c, 0x0f, 0x67, 0x73, 0xa3, 0x0d, 0x58, 0x14, 0xc6, + 0xe9, 0xb6, 0xd1, 0xc7, 0xd5, 0x1c, 0xfb, 0x5c, 0x12, 0xb4, 0xa6, 0xd1, 0xc7, 0xe8, 0x32, 0x2c, + 0x4b, 0x16, 0xa9, 0x24, 0xcf, 0xb8, 0x96, 0x04, 0x59, 0xb4, 0x86, 0x36, 0xe1, 0x94, 0x64, 0x34, + 0x1c, 0x2b, 0x60, 0x9e, 0x65, 0xcc, 0x2b, 0xe2, 0x53, 0xdd, 0xb1, 0x04, 0xbf, 0xfa, 0x39, 0x14, + 0x77, 0x9a, 0xed, 0x6d, 0x62, 0x1f, 0x59, 0x5d, 0x6a, 0xa2, 0x87, 0x5d, 0x2a, 0x53, 0x55, 0x2e, + 0xe4, 0xa9, 0x89, 0xe2, 0x15, 0xd5, 0xa0, 0xe0, 0x61, 0xc3, 0xed, 0x1c, 0x63, 0xaf, 0x9a, 0x63, + 0x9f, 0x82, 0x77, 0x2a, 0x45, 0x1c, 0xdf, 0x22, 0xb6, 0x57, 0xcd, 0x73, 0x29, 0xf1, 0xaa, 0xfe, + 0x5c, 0x81, 0x52, 0x8b, 0xb8, 0xfe, 0x33, 0xc3, 0x71, 0x2c, 0xbb, 0x8b, 0x6e, 0x41, 0x81, 0xf9, + 0xb2, 0x43, 0x7a, 0xcc, 0x07, 0x4b, 0x5b, 0xb5, 0xcd, 0xf8, 0xb0, 0x6c, 0xb6, 0x04, 0x87, 0x16, + 0xf0, 0xa2, 0x8b, 0xb0, 0xd4, 0x21, 0xb6, 0x6f, 0x58, 0x36, 0x76, 0x75, 0x87, 0xb8, 0x3e, 0x73, + 0xd1, 0x9c, 0x56, 0x0e, 0xa8, 0xb4, 0x15, 0x74, 0x0e, 0x8a, 0xc7, 0xc4, 0xf3, 0x39, 0x47, 0x9e, + 0x71, 0x14, 0x28, 0x81, 0x7d, 0x5c, 0x83, 0x05, 0xf6, 0xd1, 0x72, 0x84, 0x33, 0xe6, 0xe9, 0x6b, + 0xc3, 0x51, 0x7f, 0xa5, 0xc0, 0xdc, 0x33, 0x32, 0xb0, 0xfd, 0x58, 0x33, 0x86, 0x7f, 0x2c, 0x06, + 0x2a, 0xd4, 0x8c, 0xe1, 0x1f, 0x0f, 0x9b, 0xa1, 0x1c, 0x7c, 0xac, 0x78, 0x33, 0xf4, 0x63, 0x0d, + 0x0a, 0x2e, 0x36, 0x4c, 0x62, 0xf7, 0x4e, 0x98, 0x09, 0x05, 0x2d, 0x78, 0xa7, 0x83, 0xe8, 0xe1, + 0x9e, 0x65, 0x0f, 0x5e, 0xe9, 0x2e, 0xee, 0x19, 0x87, 0xb8, 0xc7, 0x4c, 0x29, 0x68, 0x4b, 0x82, + 0xac, 0x71, 0x2a, 0xda, 0x81, 0x92, 0xe3, 0x12, 0xc7, 0xe8, 0x1a, 0xd4, 0x8f, 0xd5, 0x39, 0xe6, + 0x2a, 0x35, 0xe9, 0x2a, 0x66, 0x76, 0x6b, 0xc8, 0xa9, 0x85, 0xc5, 0xd4, 0xbf, 0x52, 0x60, 0x99, + 0x06, 0x8f, 0xe7, 0x18, 0x1d, 0xbc, 0xc7, 0x86, 0x04, 0xdd, 0x86, 0x05, 0x1b, 0xfb, 0x2f, 0x89, + 0xfb, 0x5c, 0x0c, 0xc0, 0xdb, 0x49, 0xad, 0x81, 0xcc, 0x33, 0x62, 0x62, 0x4d, 0xf2, 0xa3, 0x9b, + 0x90, 0x77, 0x2c, 0x93, 0x75, 0x78, 0x02, 0x31, 0xca, 0x4b, 0x45, 0x2c, 0xa7, 0xc3, 0xfc, 0x30, + 0x89, 0x88, 0xe5, 0x74, 0x54, 0x15, 0xa0, 0x61, 0xfb, 0xb7, 0xbe, 0xfb, 0xb1, 0xd1, 0x1b, 0x60, + 0xb4, 0x0a, 0x73, 0x2f, 0xe8, 0x03, 0x33, 0x36, 0xaf, 0xf1, 0x17, 0xf5, 0xab, 0x3c, 0x9c, 0x7b, + 0x4a, 0xfd, 0xd5, 0x36, 0x6c, 0xf3, 0x90, 0xbc, 0x6a, 0xe3, 0xce, 0xc0, 0xb5, 0xfc, 0x93, 0x6d, + 0x62, 0xfb, 0xf8, 0x95, 0x8f, 0x9a, 0xb0, 0x62, 0x4b, 0xcd, 0xba, 0x0c, 0x4d, 0xaa, 0xa1, 0xb4, + 0xb5, 0x31, 0xc2, 0x08, 0xee, 0x22, 0xad, 0x62, 0x47, 0x09, 0x1e, 0x7a, 0x32, 0x1c, 0x37, 0xa9, + 0x2d, 0xc7, 0xb4, 0xa5, 0x74, 0xa9, 0xbd, 0xcb, 0x2c, 0x13, 0xba, 0xe4, 0xc0, 0x4a, 0x4d, 0x1f, + 0x01, 0x9d, 0xd5, 0xba, 0xe1, 0xe9, 0x03, 0x0f, 0xbb, 0xcc, 0x31, 0xa5, 0xad, 0xb7, 0x92, 0x5a, + 0x86, 0x2e, 0xd0, 0x8a, 0xee, 0xc0, 0xae, 0x7b, 0x07, 0x1e, 0x76, 0x59, 0x12, 0x10, 0xb1, 0xa4, + 0xbb, 0x84, 0xf8, 0x47, 0x9e, 0x8c, 0x1f, 0x49, 0xd6, 0x18, 0x15, 0xdd, 0x80, 0x53, 0xde, 0xc0, + 0x71, 0x7a, 0xb8, 0x8f, 0x6d, 0xdf, 0xe8, 0xe9, 0x5d, 0x97, 0x0c, 0x1c, 0xaf, 0x3a, 0x77, 0x21, + 0x7f, 0x25, 0xaf, 0xa1, 0xf0, 0xa7, 0xc7, 0xec, 0x0b, 0x5a, 0x07, 0x70, 0x5c, 0xeb, 0x85, 0xd5, + 0xc3, 0x5d, 0x6c, 0x56, 0xe7, 0x99, 0xd2, 0x10, 0x05, 0xbd, 0x0f, 0xab, 0x1e, 0xee, 0x74, 0x48, + 0xdf, 0xd1, 0x1d, 0x97, 0x1c, 0x59, 0x3d, 0xcc, 0xa3, 0x7f, 0x81, 0x45, 0x3f, 0x12, 0xdf, 0x5a, + 0xfc, 0x13, 0x9b, 0x07, 0xf7, 0x58, 0x4e, 0xa3, 0x3d, 0x65, 0x8d, 0x57, 0x0b, 0x13, 0x74, 0x15, + 0x58, 0x57, 0x99, 0x49, 0xea, 0xcf, 0x73, 0x70, 0x9a, 0x79, 0xb2, 0x45, 0x4c, 0x31, 0xcc, 0x22, + 0x49, 0xbd, 0x03, 0xe5, 0x0e, 0xd3, 0xa9, 0x3b, 0x86, 0x8b, 0x6d, 0x5f, 0x4c, 0xd2, 0x45, 0x4e, + 0x6c, 0x31, 0x1a, 0xfa, 0x14, 0x2a, 0x9e, 0x88, 0x0a, 0xbd, 0xc3, 0xc3, 0x42, 0x8c, 0xd9, 0xf5, + 0xa4, 0x09, 0x23, 0x62, 0x49, 0x5b, 0xf6, 0x12, 0xc1, 0xb5, 0xe0, 0x9d, 0x78, 0x1d, 0xbf, 0xc7, + 0xb3, 0x5d, 0x69, 0xeb, 0xbb, 0x19, 0x0a, 0xe3, 0x86, 0x6f, 0xb6, 0xb9, 0xd8, 0xae, 0xed, 0xbb, + 0x27, 0x9a, 0x54, 0x52, 0xbb, 0x03, 0x8b, 0xe1, 0x0f, 0xa8, 0x02, 0xf9, 0xe7, 0xf8, 0x44, 0x74, + 0x8a, 0x3e, 0x0e, 0x27, 0x01, 0xcf, 0x35, 0xfc, 0xe5, 0x4e, 0xee, 0x77, 0x14, 0xd5, 0x05, 0x34, + 0x6c, 0xe5, 0x19, 0xf6, 0x0d, 0xd3, 0xf0, 0x0d, 0x84, 0x60, 0x96, 0x2d, 0x23, 0x5c, 0x05, 0x7b, + 0xa6, 0x5a, 0x07, 0x62, 0xf2, 0x16, 0x35, 0xfa, 0x88, 0xde, 0x82, 0x62, 0x10, 0xe8, 0x62, 0x2d, + 0x19, 0x12, 0x68, 0x4e, 0x37, 0x7c, 0x1f, 0xf7, 0x1d, 0x9f, 0x85, 0x58, 0x59, 0x93, 0xaf, 0xea, + 0x7f, 0xcf, 0x42, 0x25, 0x31, 0x26, 0x0f, 0xa0, 0xd0, 0x17, 0xcd, 0x8b, 0x89, 0xf6, 0x6e, 0x4a, + 0x62, 0x4f, 0x98, 0xaa, 0x05, 0x52, 0x34, 0x6f, 0xd2, 0x1c, 0x1a, 0x5a, 0xff, 0x82, 0x77, 0x3a, + 0xe2, 0x3d, 0xd2, 0xd5, 0x4d, 0xcb, 0xc5, 0x1d, 0x9f, 0xb8, 0x27, 0xc2, 0xdc, 0xc5, 0x1e, 0xe9, + 0xee, 0x48, 0x1a, 0xba, 0x03, 0x60, 0xda, 0x1e, 0x1d, 0xec, 0x23, 0xab, 0xcb, 0x8c, 0x2e, 0x6d, + 0x9d, 0x4b, 0x1a, 0x11, 0x2c, 0x76, 0x5a, 0xd1, 0xb4, 0x3d, 0x61, 0xfe, 0x43, 0x28, 0xd3, 0x35, + 0x43, 0xef, 0xf3, 0x75, 0x8a, 0xcf, 0x94, 0xd2, 0xd6, 0xf9, 0xb4, 0x3e, 0x04, 0xab, 0x99, 0xb6, + 0xe8, 0x0c, 0x5f, 0x3c, 0xf4, 0x08, 0xe6, 0x59, 0xf2, 0xf6, 0xaa, 0xf3, 0x4c, 0x78, 0x73, 0x94, + 0x03, 0x44, 0x44, 0x3c, 0x65, 0x02, 0x3c, 0x20, 0x84, 0x34, 0x3a, 0x80, 0x92, 0x61, 0xdb, 0xc4, + 0x37, 0x78, 0xa2, 0x59, 0x60, 0xca, 0x3e, 0x98, 0x40, 0x59, 0x7d, 0x28, 0xc5, 0x35, 0x86, 0xf5, + 0xa0, 0xef, 0xc3, 0x1c, 0xcb, 0x44, 0x62, 0x22, 0x5e, 0x9e, 0x30, 0x68, 0x35, 0x2e, 0x55, 0xbb, + 0x0d, 0xa5, 0x90, 0xb1, 0xd3, 0x04, 0x69, 0xed, 0x1e, 0x54, 0xe2, 0xa6, 0x4d, 0x15, 0xe4, 0x7f, + 0x00, 0xab, 0xda, 0xc0, 0x1e, 0x1a, 0x26, 0xab, 0xaf, 0x3b, 0x30, 0x2f, 0x06, 0x9b, 0x47, 0x9c, + 0x3a, 0xde, 0x47, 0x9a, 0x90, 0x08, 0x97, 0x53, 0xc7, 0x86, 0x6d, 0xf6, 0xb0, 0x2b, 0xda, 0x95, + 0xe5, 0xd4, 0x13, 0x4e, 0x55, 0xbf, 0x0f, 0xa7, 0x63, 0x8d, 0x8b, 0x6a, 0xee, 0x5d, 0x58, 0x72, + 0x88, 0xa9, 0x7b, 0x9c, 0xac, 0x5b, 0xa6, 0x4c, 0x43, 0x4e, 0xc0, 0xdb, 0x30, 0xa9, 0x78, 0xdb, + 0x27, 0x4e, 0xd2, 0xf8, 0xc9, 0xc4, 0xab, 0x70, 0x26, 0x2e, 0xce, 0x9b, 0x57, 0xef, 0xc3, 0x9a, + 0x86, 0xfb, 0xe4, 0x05, 0x7e, 0x5d, 0xd5, 0x35, 0xa8, 0x26, 0x15, 0x08, 0xe5, 0x9f, 0xc1, 0xda, + 0x90, 0xda, 0xf6, 0x0d, 0x7f, 0xe0, 0x4d, 0xa5, 0x5c, 0x94, 0xba, 0x87, 0xc4, 0xe3, 0xc3, 0x59, + 0xd0, 0xe4, 0xab, 0x7a, 0x35, 0xac, 0xba, 0xc9, 0x2b, 0x0b, 0xde, 0x02, 0x5a, 0x82, 0x9c, 0xe5, + 0x08, 0x75, 0x39, 0xcb, 0x51, 0x9f, 0x40, 0x31, 0x58, 0x9a, 0xd1, 0xdd, 0x61, 0x8d, 0x99, 0x9b, + 0x74, 0x21, 0x0f, 0xca, 0xd0, 0xfd, 0xc4, 0x52, 0x22, 0x9a, 0xbc, 0x0b, 0x10, 0xa4, 0x3c, 0x59, + 0x21, 0x9c, 0x1b, 0xa1, 0x58, 0x0b, 0xb1, 0xab, 0x3f, 0x9d, 0x0b, 0x27, 0xc2, 0x50, 0x27, 0xcc, + 0xa0, 0x13, 0x66, 0x24, 0x31, 0xe6, 0x5e, 0x2b, 0x31, 0x7e, 0x08, 0x73, 0x9e, 0x6f, 0xf8, 0x58, + 0x54, 0x51, 0x1b, 0xa3, 0xc4, 0xa9, 0x11, 0x58, 0xe3, 0xfc, 0xe8, 0x3c, 0x40, 0xc7, 0xc5, 0x86, + 0x8f, 0x4d, 0xdd, 0xe0, 0x59, 0x3c, 0xaf, 0x15, 0x05, 0xa5, 0xee, 0xa3, 0xed, 0x61, 0x25, 0x38, + 0xc7, 0x0c, 0xbb, 0x3a, 0x4a, 0x73, 0x64, 0xa8, 0x86, 0x35, 0x61, 0x90, 0x55, 0xe6, 0x27, 0xcc, + 0x2a, 0x42, 0x01, 0x97, 0x0a, 0xe5, 0xcc, 0x85, 0xf1, 0x39, 0x93, 0x8b, 0x4e, 0x92, 0x33, 0x0b, + 0xe3, 0x73, 0xa6, 0x50, 0x36, 0x3a, 0x67, 0xa6, 0x64, 0x89, 0x62, 0x5a, 0x96, 0xf8, 0x36, 0xb3, + 0xe3, 0x3f, 0x2b, 0x50, 0x4d, 0x4e, 0x56, 0x91, 0xa4, 0xee, 0xc0, 0xbc, 0xc7, 0x28, 0x93, 0xa4, + 0x48, 0x21, 0x2b, 0x24, 0xd0, 0x13, 0x98, 0xb5, 0xec, 0x23, 0xc2, 0x76, 0x7b, 0xa9, 0x45, 0x4e, + 0x56, 0xab, 0x9b, 0x0d, 0xfb, 0x88, 0x70, 0x6f, 0x32, 0x0d, 0xb5, 0x0f, 0xa1, 0x18, 0x90, 0xa6, + 0xea, 0xdb, 0x1e, 0xac, 0xc6, 0x62, 0x9b, 0xef, 0x0a, 0x82, 0x29, 0xa1, 0x4c, 0x37, 0x25, 0xd4, + 0x9f, 0xe4, 0xc2, 0x53, 0xf6, 0x91, 0xd5, 0xf3, 0xb1, 0x9b, 0x98, 0xb2, 0x1f, 0x49, 0xed, 0x7c, + 0xbe, 0x5e, 0x1a, 0xab, 0x9d, 0x17, 0xaf, 0x62, 0xd6, 0x7d, 0x01, 0x4b, 0x2c, 0x28, 0x75, 0x0f, + 0xf7, 0x58, 0x65, 0x22, 0xaa, 0xc4, 0xef, 0x8d, 0x52, 0xc3, 0x2d, 0xe1, 0xa1, 0xdd, 0x16, 0x72, + 0xdc, 0x83, 0xe5, 0x5e, 0x98, 0x56, 0x7b, 0x00, 0x28, 0xc9, 0x34, 0x95, 0x4f, 0xdb, 0x34, 0x17, + 0xd2, 0x2d, 0x71, 0xca, 0x72, 0x7a, 0xc4, 0xcc, 0x98, 0x24, 0x56, 0xb8, 0xc1, 0x9a, 0x90, 0x50, + 0xff, 0x2b, 0x0f, 0x30, 0xfc, 0xf8, 0xff, 0x28, 0x09, 0x3e, 0x08, 0x12, 0x10, 0xaf, 0xf8, 0xae, + 0x8c, 0x52, 0x9c, 0x9a, 0x7a, 0xf6, 0xa2, 0xa9, 0x87, 0xd7, 0x7e, 0xd7, 0x47, 0xaa, 0x99, 0x3a, + 0xe9, 0x2c, 0xfc, 0xb6, 0x25, 0x9d, 0xa7, 0x70, 0x26, 0x1e, 0x44, 0x22, 0xe3, 0x6c, 0xc1, 0x9c, + 0xe5, 0xe3, 0x3e, 0xc7, 0x8f, 0x52, 0xf7, 0x7b, 0x21, 0x21, 0xce, 0xaa, 0x6e, 0x40, 0xb1, 0xd1, + 0x37, 0xba, 0xb8, 0xed, 0xe0, 0x0e, 0x6d, 0xd4, 0xa2, 0x2f, 0xc2, 0x10, 0xfe, 0xa2, 0x6e, 0x41, + 0xe1, 0x07, 0xf8, 0x84, 0xcf, 0xfe, 0x09, 0x0d, 0x55, 0xff, 0x24, 0x07, 0x6b, 0x6c, 0xf5, 0xd9, + 0x96, 0xe8, 0x8d, 0x86, 0x3d, 0x32, 0x70, 0x3b, 0xd8, 0x63, 0x61, 0xe1, 0x0c, 0x74, 0x07, 0xbb, + 0x16, 0x31, 0x05, 0xb8, 0x50, 0xec, 0x38, 0x83, 0x16, 0x23, 0xa0, 0x73, 0x40, 0x5f, 0xf4, 0x2f, + 0x07, 0x44, 0x44, 0x6c, 0x5e, 0x2b, 0x74, 0x9c, 0xc1, 0xef, 0xd1, 0x77, 0x29, 0xeb, 0x1d, 0x1b, + 0x2e, 0xf6, 0x58, 0x40, 0x72, 0xd9, 0x36, 0x23, 0xa0, 0x9b, 0x70, 0xba, 0x8f, 0xfb, 0xc4, 0x3d, + 0xd1, 0x7b, 0x56, 0xdf, 0xf2, 0x75, 0xcb, 0xd6, 0x0f, 0x4f, 0x7c, 0xec, 0x89, 0xe0, 0x43, 0xfc, + 0xe3, 0x53, 0xfa, 0xad, 0x61, 0x3f, 0xa4, 0x5f, 0x90, 0x0a, 0x65, 0x42, 0xfa, 0xba, 0xd7, 0x21, + 0x2e, 0xd6, 0x0d, 0xf3, 0xc7, 0x6c, 0x41, 0xce, 0x6b, 0x25, 0x42, 0xfa, 0x6d, 0x4a, 0xab, 0x9b, + 0x3f, 0x46, 0x6f, 0x43, 0xa9, 0xe3, 0x0c, 0x3c, 0xec, 0xeb, 0xf4, 0x0f, 0x5b, 0x6f, 0x8b, 0x1a, + 0x70, 0xd2, 0xb6, 0x33, 0xf0, 0x42, 0x0c, 0x7d, 0xea, 0xff, 0x85, 0x30, 0xc3, 0x33, 0xea, 0x66, + 0x03, 0xca, 0x11, 0x70, 0x82, 0xee, 0x13, 0x19, 0x0a, 0x21, 0xf6, 0x89, 0xf4, 0x99, 0xd2, 0x5c, + 0xd2, 0x93, 0x9e, 0x64, 0xcf, 0x94, 0xe6, 0x9f, 0x38, 0x72, 0x93, 0xc8, 0x9e, 0xa9, 0xcb, 0x7b, + 0xf8, 0x85, 0x00, 0xb0, 0x8a, 0x1a, 0x7f, 0x51, 0x4d, 0x80, 0x6d, 0xc3, 0x31, 0x0e, 0xad, 0x9e, + 0xe5, 0x9f, 0xa0, 0xab, 0x50, 0x31, 0x4c, 0x53, 0xef, 0x48, 0x8a, 0x85, 0x25, 0xac, 0xb8, 0x6c, + 0x98, 0xe6, 0x76, 0x88, 0x8c, 0xbe, 0x03, 0x2b, 0xa6, 0x4b, 0x9c, 0x28, 0x2f, 0xc7, 0x19, 0x2b, + 0xf4, 0x43, 0x98, 0x59, 0xfd, 0xf7, 0x39, 0x38, 0x1f, 0x1d, 0xd8, 0x38, 0x00, 0xf4, 0x00, 0x16, + 0x63, 0xad, 0x66, 0x80, 0x0f, 0x43, 0x6b, 0xb5, 0x88, 0x44, 0x0c, 0x10, 0xc9, 0x25, 0x00, 0x91, + 0x54, 0x88, 0x29, 0xff, 0x46, 0x21, 0xa6, 0xd9, 0x37, 0x02, 0x31, 0xcd, 0x4d, 0x07, 0x31, 0x5d, + 0x62, 0xd9, 0x47, 0x4a, 0xb3, 0xdd, 0x38, 0x0f, 0xb5, 0x72, 0xc0, 0x63, 0x4b, 0x3c, 0x3a, 0x06, + 0x45, 0x2d, 0x4c, 0x03, 0x45, 0x15, 0x32, 0xa1, 0x28, 0x1a, 0x35, 0x8e, 0x63, 0xb8, 0x7d, 0xe2, + 0x4a, 0xac, 0x49, 0x54, 0x5d, 0xcb, 0x92, 0x2e, 0x70, 0xa6, 0x4c, 0x54, 0x0a, 0x32, 0x51, 0xa9, + 0x0b, 0xb0, 0x68, 0x13, 0xdd, 0xc6, 0x2f, 0x75, 0x3a, 0x96, 0x5e, 0xb5, 0xc4, 0x07, 0xd6, 0x26, + 0x4d, 0xfc, 0xb2, 0x45, 0x29, 0x09, 0xdc, 0x6a, 0x71, 0x3a, 0xdc, 0x0a, 0x6d, 0xc0, 0x62, 0xdf, + 0xf0, 0x9e, 0x63, 0x93, 0x99, 0xe2, 0x55, 0xcb, 0x2c, 0x88, 0x4b, 0x9c, 0x46, 0x6d, 0xf0, 0xd0, + 0x45, 0x08, 0x9c, 0x24, 0x98, 0x96, 0x18, 0x53, 0x59, 0x52, 0x19, 0x9b, 0xfa, 0xb7, 0x0a, 0xac, + 0x46, 0xc3, 0x5c, 0xa0, 0x15, 0x8f, 0xa1, 0xe8, 0xca, 0x4c, 0x26, 0x42, 0xfb, 0x6a, 0x46, 0xe1, + 0x9d, 0x4c, 0x7d, 0xda, 0x50, 0x16, 0xfd, 0x30, 0x13, 0x24, 0xbb, 0x31, 0x4e, 0xdf, 0x38, 0x98, + 0x4c, 0x6d, 0xc0, 0xdb, 0x9f, 0x58, 0xb6, 0x49, 0x5e, 0x7a, 0x99, 0xb3, 0x34, 0x25, 0xd6, 0x94, + 0x94, 0x58, 0x53, 0x7f, 0xa1, 0xc0, 0x99, 0xb8, 0x2e, 0xe1, 0x8a, 0x46, 0xd2, 0x15, 0xdf, 0x49, + 0x9a, 0x1e, 0x17, 0x4e, 0x75, 0xc6, 0x17, 0x99, 0xce, 0xb8, 0x39, 0x5e, 0xe3, 0x58, 0x77, 0xfc, + 0xa5, 0x02, 0x67, 0x33, 0xcd, 0x88, 0x2d, 0x29, 0x4a, 0x7c, 0x49, 0x11, 0xcb, 0x51, 0x87, 0x0c, + 0x6c, 0x3f, 0xb4, 0x1c, 0x6d, 0xb3, 0x43, 0x0b, 0x9e, 0xf7, 0xf5, 0xbe, 0xf1, 0xca, 0xea, 0x0f, + 0xfa, 0x62, 0x3d, 0xa2, 0xea, 0x9e, 0x71, 0xca, 0x6b, 0x2c, 0x48, 0x6a, 0x1d, 0x56, 0x02, 0x2b, + 0x47, 0xc2, 0x8a, 0x21, 0x98, 0x30, 0x17, 0x85, 0x09, 0x6d, 0x98, 0xdf, 0xc1, 0x2f, 0xac, 0x0e, + 0x7e, 0x23, 0xa7, 0x2a, 0x17, 0xa0, 0xe4, 0x60, 0xb7, 0x6f, 0x79, 0x5e, 0x90, 0x68, 0x8b, 0x5a, + 0x98, 0xa4, 0xfe, 0xc7, 0x3c, 0x2c, 0xc7, 0xa3, 0xe3, 0x7e, 0x02, 0x95, 0x7c, 0x27, 0x65, 0x09, + 0x88, 0x77, 0x34, 0x54, 0x76, 0xde, 0x94, 0xc5, 0x48, 0x2e, 0x0b, 0x1a, 0x08, 0x0a, 0x17, 0x51, + 0xa9, 0x50, 0x8f, 0x74, 0x48, 0xbf, 0x6f, 0xd8, 0xa6, 0x3c, 0x0c, 0x13, 0xaf, 0xd4, 0x7f, 0x86, + 0xdb, 0xa5, 0x6e, 0xa7, 0x64, 0xf6, 0x4c, 0x07, 0x8f, 0xee, 0xa3, 0x2d, 0x9b, 0xa1, 0x9b, 0x2c, + 0x59, 0x17, 0x35, 0x10, 0xa4, 0x1d, 0xcb, 0x45, 0x9b, 0x30, 0x8b, 0xed, 0x17, 0xb2, 0xae, 0x4c, + 0x39, 0x2d, 0x93, 0x65, 0x91, 0xc6, 0xf8, 0xd0, 0x0d, 0x98, 0xef, 0xd3, 0xb0, 0x90, 0x3b, 0xea, + 0xb5, 0x8c, 0x43, 0x23, 0x4d, 0xb0, 0xa1, 0x2d, 0x58, 0x30, 0xd9, 0x38, 0xc9, 0x6d, 0x73, 0x35, + 0x05, 0x33, 0x65, 0x0c, 0x9a, 0x64, 0x44, 0xbb, 0x41, 0xd5, 0x5c, 0xcc, 0x2a, 0x77, 0x63, 0x43, + 0x91, 0x5a, 0x3a, 0xef, 0x47, 0x4b, 0x67, 0x60, 0xba, 0xb6, 0xc6, 0xeb, 0x1a, 0x5d, 0x3f, 0x9f, + 0x85, 0x42, 0x8f, 0x74, 0x79, 0x18, 0x95, 0xf8, 0x39, 0x6b, 0x8f, 0x74, 0x59, 0x14, 0xad, 0xd2, + 0x5d, 0x84, 0x69, 0xd9, 0x2c, 0xa9, 0x17, 0x34, 0xfe, 0x42, 0x27, 0x1f, 0x7b, 0xd0, 0x89, 0xdd, + 0xc1, 0xd5, 0x32, 0xfb, 0x54, 0x64, 0x94, 0x3d, 0xbb, 0xc3, 0xca, 0x4d, 0xdf, 0x3f, 0xa9, 0x2e, + 0x31, 0x3a, 0x7d, 0xa4, 0x1b, 0x44, 0x0e, 0x7a, 0x2c, 0x67, 0x6d, 0x10, 0xd3, 0xd2, 0xb6, 0xc4, + 0x3c, 0x1e, 0xc2, 0xc2, 0x4b, 0x9e, 0x08, 0xaa, 0x15, 0x26, 0x7f, 0x65, 0x7c, 0x7a, 0x11, 0x1a, + 0xa4, 0xe0, 0xb7, 0x59, 0xfa, 0xff, 0xbd, 0x02, 0x67, 0xb6, 0xd9, 0xfe, 0x29, 0x94, 0xc7, 0xa6, + 0xc1, 0x06, 0x6f, 0x07, 0xb0, 0x6d, 0x26, 0x90, 0x17, 0xef, 0xb7, 0x44, 0x6d, 0x1b, 0xb0, 0x24, + 0x95, 0x0b, 0x15, 0xf9, 0x89, 0x91, 0xdf, 0xb2, 0x17, 0x7e, 0x55, 0x3f, 0x82, 0xb5, 0x44, 0x2f, + 0xc4, 0x16, 0x66, 0x03, 0x16, 0x87, 0xf9, 0x2a, 0xe8, 0x44, 0x29, 0xa0, 0x35, 0x4c, 0xf5, 0x0e, + 0x9c, 0x6e, 0xfb, 0x86, 0xeb, 0x27, 0x5c, 0x30, 0x81, 0x2c, 0xc3, 0x74, 0xa3, 0xb2, 0x02, 0x76, + 0x6d, 0xc3, 0x6a, 0xdb, 0x27, 0xce, 0x6b, 0x28, 0xa5, 0x59, 0x87, 0xf6, 0x9f, 0x0c, 0xe4, 0xfa, + 0x20, 0x5f, 0xd5, 0x35, 0x8e, 0x40, 0x27, 0x5b, 0xbb, 0x0b, 0x67, 0x38, 0x00, 0xfc, 0x3a, 0x9d, + 0x38, 0x2b, 0xe1, 0xe7, 0xa4, 0xde, 0x67, 0x70, 0x6a, 0xb8, 0x2c, 0x0e, 0x31, 0x9b, 0x5b, 0x51, + 0xcc, 0xe6, 0xc2, 0x88, 0x51, 0x8f, 0x40, 0x36, 0x7f, 0x9e, 0x0b, 0xe5, 0xf5, 0x0c, 0xc4, 0xe6, + 0x6e, 0x14, 0xb1, 0xb9, 0x38, 0x4e, 0x77, 0x04, 0xb0, 0x49, 0x46, 0x6d, 0x3e, 0x25, 0x6a, 0x3f, + 0x4f, 0xc0, 0x3a, 0xb3, 0x59, 0xb8, 0x58, 0xcc, 0xda, 0xdf, 0x08, 0xaa, 0xa3, 0x71, 0x54, 0x27, + 0x68, 0x3a, 0xc0, 0xeb, 0x6f, 0xc7, 0x50, 0x9d, 0x8d, 0xb1, 0xf6, 0x06, 0xa0, 0xce, 0x5f, 0xcf, + 0x42, 0x31, 0xf8, 0x96, 0xf0, 0x79, 0xd2, 0x6d, 0xb9, 0x14, 0xb7, 0x85, 0x57, 0xe0, 0xfc, 0x37, + 0x5a, 0x81, 0x67, 0x27, 0x5e, 0x81, 0xcf, 0x41, 0x91, 0x3d, 0xe8, 0x2e, 0x3e, 0x12, 0x2b, 0x6a, + 0x81, 0x11, 0x34, 0x7c, 0x34, 0x0c, 0xc3, 0xf9, 0xa9, 0xc2, 0x30, 0x86, 0x23, 0x2d, 0xc4, 0x71, + 0xa4, 0xfb, 0xc1, 0x8a, 0xc8, 0x17, 0xd1, 0xcb, 0x23, 0xf4, 0xa6, 0xae, 0x85, 0xcd, 0xe8, 0x5a, + 0xc8, 0xd7, 0xd5, 0xf7, 0x46, 0x69, 0x19, 0xb9, 0x0a, 0x7e, 0x9b, 0x2b, 0xc4, 0x01, 0x07, 0x87, + 0xc2, 0xb1, 0x28, 0x32, 0xeb, 0x5d, 0x80, 0x20, 0x89, 0x48, 0x84, 0xe8, 0xdc, 0x88, 0x3e, 0x6a, + 0x21, 0x76, 0xaa, 0x36, 0x32, 0x34, 0xc3, 0x33, 0xa9, 0xc9, 0xf2, 0x63, 0xc6, 0x81, 0xd4, 0xff, + 0xce, 0x85, 0xf2, 0x4b, 0xc6, 0x21, 0xce, 0xfd, 0x04, 0x7e, 0x39, 0x65, 0x14, 0xdf, 0x8a, 0xc2, + 0x97, 0xaf, 0x19, 0x75, 0x09, 0xf4, 0x92, 0x55, 0x2e, 0x86, 0x2b, 0x3e, 0x73, 0xd0, 0xa8, 0x28, + 0x28, 0x75, 0xb6, 0x33, 0x38, 0xb2, 0x6c, 0xcb, 0x3b, 0xe6, 0xdf, 0xe7, 0xf9, 0xce, 0x40, 0x92, + 0xea, 0xec, 0xbe, 0x14, 0x7e, 0x65, 0xf9, 0x7a, 0x87, 0x98, 0x98, 0xc5, 0xf4, 0x9c, 0x56, 0xa0, + 0x84, 0x6d, 0x62, 0xe2, 0xe1, 0xcc, 0x2b, 0xbc, 0xde, 0xcc, 0x2b, 0xc6, 0x66, 0xde, 0x19, 0x98, + 0x77, 0xb1, 0xe1, 0x11, 0x5b, 0x6c, 0xcf, 0xc5, 0x1b, 0x1d, 0x9a, 0x3e, 0xf6, 0x3c, 0xda, 0x92, + 0x28, 0xd7, 0xc4, 0x6b, 0xa8, 0xcc, 0x5c, 0x1c, 0x5b, 0x66, 0x8e, 0x38, 0x1c, 0x8a, 0x95, 0x99, + 0xe5, 0xb1, 0x65, 0xe6, 0x44, 0x67, 0x43, 0xc3, 0x42, 0x7b, 0x69, 0xb2, 0x42, 0x3b, 0x5c, 0x97, + 0x2e, 0x47, 0xea, 0xd2, 0x6f, 0x73, 0xb2, 0xfe, 0x4a, 0x81, 0xb5, 0xc4, 0xb4, 0x12, 0xd3, 0xf5, + 0x76, 0xec, 0xf4, 0x68, 0x63, 0xac, 0xcf, 0x82, 0xc3, 0xa3, 0xc7, 0x91, 0xc3, 0xa3, 0x0f, 0xc6, + 0x0b, 0xbe, 0xf1, 0xb3, 0xa3, 0x3f, 0x52, 0xe0, 0xed, 0x03, 0xc7, 0x8c, 0x55, 0x78, 0x62, 0xdb, + 0x3f, 0x79, 0xe2, 0xb8, 0x2f, 0x6b, 0xfd, 0xdc, 0xb4, 0x38, 0x0b, 0x97, 0x53, 0x55, 0xb8, 0x90, + 0x6d, 0x86, 0x28, 0x99, 0x7e, 0x04, 0xcb, 0xbb, 0xaf, 0x70, 0xa7, 0x7d, 0x62, 0x77, 0xa6, 0x30, + 0xad, 0x02, 0xf9, 0x4e, 0xdf, 0x14, 0x28, 0x29, 0x7d, 0x0c, 0x57, 0x81, 0xf9, 0x68, 0x15, 0xa8, + 0x43, 0x65, 0xd8, 0x82, 0x18, 0xde, 0x33, 0x74, 0x78, 0x4d, 0xca, 0x4c, 0x95, 0x2f, 0x6a, 0xe2, + 0x4d, 0xd0, 0xb1, 0xcb, 0xaf, 0x44, 0x70, 0x3a, 0x76, 0xdd, 0x68, 0xb6, 0xc8, 0x47, 0xb3, 0x85, + 0xfa, 0x67, 0x0a, 0x94, 0x68, 0x0b, 0xdf, 0xc8, 0x7e, 0xb1, 0xd5, 0xca, 0x0f, 0xb7, 0x5a, 0xc1, + 0x8e, 0x6d, 0x36, 0xbc, 0x63, 0x1b, 0x5a, 0x3e, 0xc7, 0xc8, 0x49, 0xcb, 0xe7, 0x03, 0x3a, 0x76, + 0x5d, 0xf5, 0x02, 0x2c, 0x72, 0xdb, 0x44, 0xcf, 0x2b, 0x90, 0x1f, 0xb8, 0x3d, 0x19, 0x47, 0x03, + 0xb7, 0xa7, 0xfe, 0xb1, 0x02, 0xe5, 0xba, 0xef, 0x1b, 0x9d, 0xe3, 0x29, 0x3a, 0x10, 0x18, 0x97, + 0x0b, 0x1b, 0x97, 0xec, 0xc4, 0xd0, 0xdc, 0xd9, 0x0c, 0x73, 0xe7, 0x22, 0xe6, 0xaa, 0xb0, 0x24, + 0x6d, 0xc9, 0x34, 0xb8, 0x09, 0xa8, 0x45, 0x5c, 0xff, 0x11, 0x71, 0x5f, 0x1a, 0xae, 0x39, 0xdd, + 0x0e, 0x0c, 0xc1, 0xac, 0xb8, 0x43, 0x9b, 0xbf, 0x32, 0xa7, 0xb1, 0x67, 0xf5, 0x32, 0x9c, 0x8a, + 0xe8, 0xcb, 0x6c, 0xf8, 0x01, 0x94, 0x58, 0xde, 0x17, 0xa5, 0xf8, 0xcd, 0xf0, 0x71, 0xcd, 0x44, + 0xab, 0x84, 0xfa, 0xbb, 0xb0, 0x42, 0xeb, 0x03, 0x46, 0x0f, 0xa6, 0xe2, 0xf7, 0x62, 0x75, 0xea, + 0xf9, 0x0c, 0x45, 0xb1, 0x1a, 0xf5, 0x6f, 0x14, 0x98, 0x63, 0xf4, 0xc4, 0x9a, 0x7d, 0x0e, 0x8a, + 0x2e, 0x76, 0x88, 0xee, 0x1b, 0xdd, 0xe0, 0xc6, 0x32, 0x25, 0xec, 0x1b, 0x5d, 0x8f, 0x5d, 0xb8, + 0xa6, 0x1f, 0x4d, 0xab, 0x8b, 0x3d, 0x5f, 0x5e, 0x5b, 0x2e, 0x51, 0xda, 0x0e, 0x27, 0x51, 0x27, + 0x79, 0xd6, 0xef, 0xf3, 0xba, 0x73, 0x56, 0x63, 0xcf, 0x68, 0x93, 0x5f, 0xa2, 0x9b, 0x04, 0x52, + 0x67, 0x57, 0xec, 0x6a, 0x50, 0x88, 0xa1, 0xe8, 0xc1, 0xbb, 0xba, 0x0b, 0x28, 0xec, 0x05, 0xe1, + 0xef, 0x1b, 0x30, 0xcf, 0x9c, 0x24, 0xab, 0xa3, 0xb5, 0x0c, 0x37, 0x68, 0x82, 0x4d, 0x35, 0x00, + 0x71, 0x07, 0x47, 0x2a, 0xa2, 0xe9, 0x47, 0x65, 0x44, 0x85, 0xf4, 0x77, 0x0a, 0x9c, 0x8a, 0xb4, + 0x21, 0x6c, 0xbd, 0x1e, 0x6d, 0x24, 0xd3, 0x54, 0xd1, 0xc0, 0x76, 0x64, 0x49, 0xb8, 0x91, 0x65, + 0xd2, 0xaf, 0x69, 0x39, 0xf8, 0x07, 0x05, 0xa0, 0x3e, 0xf0, 0x8f, 0x05, 0x32, 0x18, 0x1e, 0x19, + 0x25, 0x3a, 0x32, 0xf4, 0x9b, 0x63, 0x78, 0xde, 0x4b, 0xe2, 0xca, 0x3d, 0x4d, 0xf0, 0xce, 0x30, + 0xbc, 0x81, 0x7f, 0x2c, 0x8f, 0xc2, 0xe8, 0x33, 0xba, 0x08, 0x4b, 0xfc, 0x96, 0xbc, 0x6e, 0x98, + 0xa6, 0x8b, 0x3d, 0x4f, 0x9c, 0x89, 0x95, 0x39, 0xb5, 0xce, 0x89, 0x94, 0xcd, 0x32, 0xb1, 0xed, + 0x5b, 0xfe, 0x89, 0xee, 0x93, 0xe7, 0xd8, 0x16, 0x7b, 0x93, 0xb2, 0xa4, 0xee, 0x53, 0x22, 0x3f, + 0x1c, 0xe8, 0x5a, 0x9e, 0xef, 0x4a, 0x36, 0x79, 0xfe, 0x22, 0xa8, 0x8c, 0x8d, 0x0e, 0x4a, 0xa5, + 0x35, 0xe8, 0xf5, 0xb8, 0x8b, 0x5f, 0x7f, 0xd8, 0xdf, 0x17, 0x1d, 0xca, 0x65, 0xc5, 0xf4, 0xd0, + 0x69, 0xa2, 0xbb, 0x6f, 0x10, 0x84, 0x79, 0x1f, 0x56, 0x42, 0x7d, 0x10, 0x61, 0x15, 0x29, 0x22, + 0x95, 0x68, 0x11, 0xa9, 0x3e, 0x06, 0xc4, 0x71, 0x87, 0x6f, 0xd8, 0x6f, 0xf5, 0x34, 0x9c, 0x8a, + 0x28, 0x12, 0x2b, 0xf1, 0x35, 0x28, 0x8b, 0x9b, 0x4e, 0x22, 0x50, 0xce, 0x42, 0x81, 0x66, 0xd4, + 0x8e, 0x65, 0xca, 0x73, 0xd2, 0x05, 0x87, 0x98, 0xdb, 0x96, 0xe9, 0xaa, 0x9f, 0x40, 0x59, 0xe3, + 0xed, 0x08, 0xde, 0x47, 0xb0, 0x24, 0xee, 0x45, 0xe9, 0x91, 0x8b, 0x89, 0x69, 0x17, 0xdf, 0xc3, + 0x8d, 0x68, 0x65, 0x3b, 0xfc, 0xaa, 0x9a, 0x50, 0xe3, 0x25, 0x43, 0x44, 0xbd, 0xec, 0xec, 0x23, + 0x90, 0x17, 0x01, 0xc6, 0xb6, 0x12, 0x95, 0x2f, 0xbb, 0xe1, 0x57, 0xf5, 0x3c, 0x9c, 0x4b, 0x6d, + 0x45, 0x78, 0xc2, 0x81, 0xca, 0xf0, 0x83, 0x69, 0xc9, 0x03, 0x63, 0x76, 0x10, 0xac, 0x84, 0x0e, + 0x82, 0xcf, 0x04, 0x45, 0x62, 0x4e, 0x2e, 0x62, 0xac, 0x02, 0x1c, 0x96, 0xfb, 0xf9, 0xac, 0x72, + 0x7f, 0x36, 0x52, 0xee, 0xab, 0xed, 0xc0, 0x9f, 0x62, 0x1b, 0xf6, 0x90, 0x6d, 0x17, 0x79, 0xdb, + 0x32, 0x21, 0xaa, 0xa3, 0x7a, 0xc9, 0x59, 0xb5, 0x90, 0x94, 0x7a, 0x15, 0xca, 0xd1, 0xd4, 0x18, + 0xca, 0x73, 0x4a, 0x22, 0xcf, 0x2d, 0xc5, 0x52, 0xdc, 0x87, 0xb1, 0x0a, 0x38, 0xdb, 0xc7, 0xb1, + 0xfa, 0xf7, 0x5e, 0x24, 0xd9, 0x5d, 0x4b, 0x39, 0xc3, 0xfd, 0x35, 0xe5, 0xb9, 0x55, 0xb1, 0x1e, + 0x3c, 0xf2, 0xa8, 0xbc, 0xe8, 0xb4, 0xfa, 0x0e, 0x94, 0x0e, 0xb2, 0x7e, 0x55, 0x31, 0x2b, 0xef, + 0x4b, 0xdc, 0x82, 0xd5, 0x47, 0x56, 0x0f, 0x7b, 0x27, 0x9e, 0x8f, 0xfb, 0x0d, 0x96, 0x94, 0x8e, + 0x2c, 0xec, 0xa2, 0x75, 0x00, 0xb6, 0x85, 0x71, 0x88, 0x15, 0x5c, 0xb6, 0x0f, 0x51, 0xd4, 0xff, + 0x54, 0x60, 0x79, 0x28, 0x78, 0xc0, 0xb6, 0x6e, 0x6f, 0x41, 0x91, 0xf6, 0xd7, 0xf3, 0x8d, 0xbe, + 0x23, 0xcf, 0xb3, 0x02, 0x02, 0xba, 0x0b, 0x73, 0x47, 0x9e, 0x84, 0x8c, 0x52, 0x01, 0xf4, 0x34, + 0x43, 0xb4, 0xd9, 0x23, 0xaf, 0x61, 0xa2, 0x8f, 0x00, 0x06, 0x1e, 0x36, 0xc5, 0x19, 0x56, 0x3e, + 0xab, 0x5a, 0x38, 0x08, 0x9f, 0x6f, 0x53, 0x01, 0x7e, 0xd5, 0xe2, 0x1e, 0x94, 0x2c, 0x9b, 0x98, + 0x98, 0x9d, 0x39, 0x9a, 0x02, 0x55, 0x1a, 0x23, 0x0e, 0x5c, 0xe2, 0xc0, 0xc3, 0xa6, 0x8a, 0xc5, + 0x5a, 0x28, 0xfd, 0x2b, 0x02, 0xa5, 0x09, 0x2b, 0x3c, 0x69, 0x1d, 0x05, 0x86, 0xcb, 0x88, 0xdd, + 0x18, 0xd5, 0x3b, 0xe6, 0x2d, 0xad, 0x62, 0x89, 0xd2, 0x46, 0x8a, 0xaa, 0x77, 0xe0, 0x74, 0x64, + 0x87, 0x34, 0xc5, 0x96, 0x45, 0x6d, 0xc5, 0x80, 0x92, 0x61, 0x38, 0x0b, 0x18, 0x42, 0x46, 0xf3, + 0x38, 0x18, 0xc2, 0xe3, 0x30, 0x84, 0xa7, 0x7e, 0x0e, 0x67, 0x23, 0x88, 0x4e, 0xc4, 0xa2, 0x7b, + 0xb1, 0xca, 0xed, 0xd2, 0x38, 0xad, 0xb1, 0x12, 0xee, 0x7f, 0x14, 0x58, 0x4d, 0x63, 0x78, 0x4d, + 0xc4, 0xf1, 0x47, 0x19, 0xf7, 0xef, 0x6e, 0x4f, 0x66, 0xd6, 0x6f, 0x04, 0xad, 0xdd, 0x87, 0x5a, + 0x9a, 0x3f, 0x93, 0xa3, 0x94, 0x9f, 0x66, 0x94, 0x7e, 0x96, 0x0f, 0x21, 0xef, 0x75, 0xdf, 0x77, + 0xad, 0xc3, 0x01, 0x0d, 0xf9, 0x37, 0x8e, 0x66, 0x35, 0x02, 0x5c, 0x86, 0xbb, 0xf6, 0xe6, 0x08, + 0xf1, 0xa1, 0x1d, 0xa9, 0xd8, 0xcc, 0xa7, 0x51, 0x6c, 0x86, 0x63, 0xea, 0xb7, 0x26, 0xd3, 0xf7, + 0x5b, 0x0b, 0x80, 0xfe, 0x2c, 0x07, 0x4b, 0xd1, 0x21, 0x42, 0xbb, 0x00, 0x46, 0x60, 0xb9, 0x98, + 0x28, 0x17, 0x27, 0xea, 0xa6, 0x16, 0x12, 0x44, 0xef, 0x41, 0xbe, 0xe3, 0x0c, 0xc4, 0xa8, 0xa5, + 0x1c, 0x06, 0x6f, 0x3b, 0x03, 0x9e, 0x51, 0x28, 0x1b, 0xdd, 0x53, 0xf1, 0xb3, 0xfd, 0xec, 0x2c, + 0xf9, 0x8c, 0x7d, 0xe7, 0x32, 0x82, 0x19, 0x3d, 0x81, 0xa5, 0x97, 0xae, 0xe5, 0x1b, 0x87, 0x3d, + 0xac, 0xf7, 0x8c, 0x13, 0xec, 0x8a, 0x2c, 0x39, 0x41, 0x22, 0x2b, 0x4b, 0xc1, 0xa7, 0x54, 0x4e, + 0xfd, 0x43, 0x28, 0x48, 0x8b, 0xc6, 0xac, 0x08, 0xfb, 0xb0, 0x36, 0xa0, 0x6c, 0x3a, 0xbb, 0x02, + 0x67, 0x1b, 0x36, 0xd1, 0x3d, 0x4c, 0x97, 0x71, 0x79, 0xdd, 0x7f, 0x4c, 0x8a, 0x5e, 0x65, 0xd2, + 0xdb, 0xc4, 0xc5, 0x4d, 0xc3, 0x26, 0x6d, 0x2e, 0xaa, 0xbe, 0x80, 0x52, 0xa8, 0x83, 0x63, 0x4c, + 0x68, 0xc0, 0x8a, 0x3c, 0x8a, 0xf7, 0xb0, 0x2f, 0x96, 0x97, 0x89, 0x1a, 0x5f, 0x16, 0x72, 0x6d, + 0xec, 0xf3, 0xeb, 0x13, 0xf7, 0xe0, 0xac, 0x86, 0x89, 0x83, 0xed, 0x60, 0x3c, 0x9f, 0x92, 0xee, + 0x14, 0x19, 0xfc, 0x2d, 0xa8, 0xa5, 0xc9, 0xf3, 0xfc, 0x70, 0xed, 0x12, 0x14, 0xe4, 0x4f, 0x64, + 0xd1, 0x02, 0xe4, 0xf7, 0xb7, 0x5b, 0x95, 0x19, 0xfa, 0x70, 0xb0, 0xd3, 0xaa, 0x28, 0xa8, 0x00, + 0xb3, 0xed, 0xed, 0xfd, 0x56, 0x25, 0x77, 0xad, 0x0f, 0x95, 0xf8, 0xef, 0x43, 0xd1, 0x1a, 0x9c, + 0x6a, 0x69, 0x7b, 0xad, 0xfa, 0xe3, 0xfa, 0x7e, 0x63, 0xaf, 0xa9, 0xb7, 0xb4, 0xc6, 0xc7, 0xf5, + 0xfd, 0xdd, 0xca, 0x0c, 0xda, 0x80, 0xf3, 0xe1, 0x0f, 0x4f, 0xf6, 0xda, 0xfb, 0xfa, 0xfe, 0x9e, + 0xbe, 0xbd, 0xd7, 0xdc, 0xaf, 0x37, 0x9a, 0xbb, 0x5a, 0x45, 0x41, 0xe7, 0xe1, 0x6c, 0x98, 0xe5, + 0x61, 0x63, 0xa7, 0xa1, 0xed, 0x6e, 0xd3, 0xe7, 0xfa, 0xd3, 0x4a, 0xee, 0xda, 0x4d, 0x28, 0x47, + 0x7e, 0xce, 0x49, 0x4d, 0x6a, 0xed, 0xed, 0x54, 0x66, 0x50, 0x19, 0x8a, 0x61, 0x3d, 0x05, 0x98, + 0x6d, 0xee, 0xed, 0xec, 0x56, 0x72, 0xd7, 0xee, 0xc0, 0x72, 0xec, 0xda, 0x2e, 0x5a, 0x81, 0x72, + 0xbb, 0xde, 0xdc, 0x79, 0xb8, 0xf7, 0xa9, 0xae, 0xed, 0xd6, 0x77, 0x3e, 0xab, 0xcc, 0xa0, 0x55, + 0xa8, 0x48, 0x52, 0x73, 0x6f, 0x9f, 0x53, 0x95, 0x6b, 0xcf, 0x63, 0x73, 0x0c, 0xa3, 0xd3, 0xb0, + 0x12, 0x34, 0xa3, 0x6f, 0x6b, 0xbb, 0xf5, 0xfd, 0x5d, 0xda, 0x7a, 0x84, 0xac, 0x1d, 0x34, 0x9b, + 0x8d, 0xe6, 0xe3, 0x8a, 0x42, 0xb5, 0x0e, 0xc9, 0xbb, 0x9f, 0x36, 0x28, 0x73, 0x2e, 0xca, 0x7c, + 0xd0, 0xfc, 0x41, 0x73, 0xef, 0x93, 0x66, 0x25, 0xbf, 0xf5, 0x8b, 0x15, 0x58, 0x92, 0x85, 0x1e, + 0x76, 0xd9, 0xad, 0x96, 0x16, 0x2c, 0xc8, 0x9f, 0x5c, 0xa7, 0x64, 0xe8, 0xe8, 0x0f, 0xc5, 0x6b, + 0x1b, 0x23, 0x38, 0x44, 0xbd, 0x3d, 0x83, 0x0e, 0x59, 0xfd, 0x1b, 0xba, 0x46, 0x7d, 0x29, 0xb5, + 0xda, 0x4c, 0xdc, 0xdc, 0xae, 0x5d, 0x1e, 0xcb, 0x17, 0xb4, 0x81, 0x69, 0x89, 0x1b, 0xfe, 0x41, + 0x11, 0xba, 0x9c, 0x56, 0x9b, 0xa6, 0xfc, 0x62, 0xa9, 0x76, 0x65, 0x3c, 0x63, 0xd0, 0xcc, 0x73, + 0xa8, 0xc4, 0x7f, 0x5c, 0x84, 0x52, 0xa0, 0xd3, 0x8c, 0x5f, 0x30, 0xd5, 0xae, 0x4d, 0xc2, 0x1a, + 0x6e, 0x2c, 0xf1, 0x33, 0x9c, 0xab, 0x93, 0xfc, 0x5c, 0x21, 0xb3, 0xb1, 0xac, 0x5f, 0x36, 0x70, + 0x07, 0x46, 0x6f, 0x3e, 0xa3, 0xd4, 0xdf, 0xbc, 0xa4, 0x5c, 0xb0, 0x4f, 0x73, 0x60, 0xfa, 0x25, + 0x6a, 0x75, 0x06, 0x1d, 0xc3, 0x72, 0xec, 0x7a, 0x02, 0x4a, 0x11, 0x4f, 0xbf, 0x87, 0x51, 0xbb, + 0x3a, 0x01, 0x67, 0x34, 0x22, 0xc2, 0xd7, 0x11, 0xd2, 0x23, 0x22, 0xe5, 0xb2, 0x43, 0x7a, 0x44, + 0xa4, 0xde, 0x6c, 0x60, 0xc1, 0x1d, 0xb9, 0x86, 0x90, 0x16, 0xdc, 0x69, 0x97, 0x1f, 0x6a, 0x97, + 0xc7, 0xf2, 0x85, 0x9d, 0x16, 0xbb, 0x94, 0x90, 0xe6, 0xb4, 0xf4, 0x4b, 0x0f, 0xb5, 0xab, 0x13, + 0x70, 0xc6, 0xa3, 0x60, 0x78, 0xc4, 0x99, 0x15, 0x05, 0x89, 0x03, 0xf9, 0xac, 0x28, 0x48, 0x9e, + 0x96, 0x8a, 0x28, 0x88, 0x1d, 0x4d, 0x5e, 0x99, 0xe0, 0x28, 0x25, 0x3b, 0x0a, 0xd2, 0x0f, 0x5d, + 0xd4, 0x19, 0xf4, 0x53, 0x05, 0xaa, 0x59, 0xc7, 0x14, 0x28, 0xa5, 0xbe, 0x1b, 0x73, 0xb2, 0x52, + 0xdb, 0x9a, 0x46, 0x24, 0xb0, 0xe2, 0x4b, 0x40, 0xc9, 0x75, 0x0f, 0x7d, 0x27, 0x6d, 0x64, 0x32, + 0x56, 0xd7, 0xda, 0x7b, 0x93, 0x31, 0x07, 0x4d, 0xb6, 0xa1, 0x20, 0x0f, 0x46, 0x50, 0x4a, 0x96, + 0x8e, 0x1d, 0xcb, 0xd4, 0xd4, 0x51, 0x2c, 0x81, 0xd2, 0xc7, 0x30, 0x4b, 0xa9, 0xe8, 0x7c, 0x3a, + 0xb7, 0x54, 0xb6, 0x9e, 0xf5, 0x39, 0x50, 0xf4, 0x0c, 0xe6, 0xf9, 0x49, 0x00, 0x4a, 0x41, 0x1e, + 0x22, 0xe7, 0x15, 0xb5, 0x0b, 0xd9, 0x0c, 0x81, 0xba, 0x2f, 0xf8, 0x7f, 0xe3, 0x10, 0x20, 0x3f, + 0x7a, 0x37, 0xfd, 0xe7, 0xcd, 0xd1, 0x33, 0x85, 0xda, 0xc5, 0x31, 0x5c, 0xe1, 0x49, 0x11, 0xab, + 0x7a, 0x2f, 0x8f, 0xdd, 0xba, 0x64, 0x4f, 0x8a, 0xf4, 0xcd, 0x11, 0x0f, 0x92, 0xe4, 0xe6, 0x29, + 0x2d, 0x48, 0x32, 0xb7, 0xac, 0x69, 0x41, 0x92, 0xbd, 0x1f, 0x53, 0x67, 0x90, 0x0f, 0xa7, 0x52, + 0xa0, 0x32, 0xf4, 0x5e, 0x56, 0x90, 0xa7, 0xe1, 0x76, 0xb5, 0xeb, 0x13, 0x72, 0x87, 0x07, 0x5f, + 0x4c, 0xfa, 0xb7, 0xb3, 0xf1, 0xa3, 0xcc, 0xc1, 0x8f, 0x4f, 0xf1, 0xad, 0x7f, 0xc9, 0xc3, 0x22, + 0x87, 0x41, 0x45, 0x05, 0xf3, 0x19, 0xc0, 0xf0, 0x04, 0x02, 0xbd, 0x93, 0xee, 0x93, 0xc8, 0x29, + 0x4d, 0xed, 0xdd, 0xd1, 0x4c, 0xe1, 0x40, 0x0b, 0xa1, 0xf9, 0x69, 0x81, 0x96, 0x3c, 0xb4, 0x48, + 0x0b, 0xb4, 0x94, 0x23, 0x01, 0x75, 0x06, 0x7d, 0x0c, 0xc5, 0x00, 0x36, 0x46, 0x69, 0xb0, 0x73, + 0x0c, 0x17, 0xaf, 0xbd, 0x33, 0x92, 0x27, 0x6c, 0x75, 0x08, 0x13, 0x4e, 0xb3, 0x3a, 0x89, 0x3d, + 0xa7, 0x59, 0x9d, 0x06, 0x2c, 0x0f, 0x7d, 0xc2, 0x91, 0xa3, 0x4c, 0x9f, 0x44, 0x80, 0xbb, 0x4c, + 0x9f, 0x44, 0xe1, 0x27, 0x75, 0xe6, 0xe1, 0xa5, 0x5f, 0x7e, 0xb5, 0xae, 0xfc, 0xd3, 0x57, 0xeb, + 0x33, 0x3f, 0xf9, 0x7a, 0x5d, 0xf9, 0xe5, 0xd7, 0xeb, 0xca, 0x3f, 0x7e, 0xbd, 0xae, 0xfc, 0xeb, + 0xd7, 0xeb, 0xca, 0x9f, 0xfe, 0xdb, 0xfa, 0xcc, 0x0f, 0x0b, 0x52, 0xfa, 0x70, 0x9e, 0xfd, 0x4f, + 0x9d, 0x0f, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x11, 0x3f, 0x6e, 0x39, 0x19, 0x49, 0x00, 0x00, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto index 8819607692d..c2df37b8045 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto @@ -1,3 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + // To regenerate api.pb.go run hack/update-generated-runtime.sh syntax = 'proto3'; @@ -297,7 +313,8 @@ message PodSandboxConfig { // operation. The runtime may also use this information to improve UX, such // as by constructing a readable name. PodSandboxMetadata metadata = 1; - // Hostname of the sandbox. + // Hostname of the sandbox. Hostname could only be empty when the pod + // network namespace is NODE. string hostname = 2; // Path to the directory on the host in which container log files are // stored. @@ -349,7 +366,7 @@ message RunPodSandboxRequest { // If the runtime handler is unknown, this request should be rejected. An // empty string should select the default handler, equivalent to the // behavior before this feature was added. - // See https://git.k8s.io/community/keps/sig-node/0014-runtime-class.md + // See https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md string runtime_handler = 2; } @@ -423,6 +440,8 @@ message PodSandboxStatus { // MUST be identical to that of the corresponding PodSandboxConfig used to // instantiate the pod sandbox this status represents. map annotations = 8; + // runtime configuration used for this PodSandbox. + string runtime_handler = 9; } message PodSandboxStatusResponse { @@ -477,6 +496,8 @@ message PodSandbox { // MUST be identical to that of the corresponding PodSandboxConfig used to // instantiate this PodSandbox. map annotations = 6; + // runtime configuration used for this PodSandbox. + string runtime_handler = 7; } message ListPodSandboxResponse { @@ -1221,7 +1242,7 @@ message ContainerStats { CpuUsage cpu = 2; // Memory usage gathered from the container. MemoryUsage memory = 3; - // Usage of the writeable layer. + // Usage of the writable layer. FilesystemUsage writable_layer = 4; } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/services.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/services.go index ae245df0b40..e4886a9ec06 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/services.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/services.go @@ -111,7 +111,7 @@ type ImageManagerService interface { // ImageStatus returns the status of the image. ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi.Image, error) // PullImage pulls an image with the authentication config. - PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) + PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) // RemoveImage removes the image. RemoveImage(image *runtimeapi.ImageSpec) error // ImageFsInfo returns information of the filesystem that is used to store images. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/OWNERS index f16238fc928..e83bdf7b44b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - jiayingz - mindprince diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.pb.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.pb.go index 839a37b0d56..42de871f6d3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.pb.go @@ -135,7 +135,7 @@ func (*Empty) ProtoMessage() {} func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{2} } // ListAndWatch returns a stream of List of Devices -// Whenever a Device state change or a Device disapears, ListAndWatch +// Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list type ListAndWatchResponse struct { Devices []*Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"` @@ -482,7 +482,7 @@ type DevicePluginClient interface { // Manager GetDevicePluginOptions(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DevicePluginOptions, error) // ListAndWatch returns a stream of List of Devices - // Whenever a Device state change or a Device disapears, ListAndWatch + // Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list ListAndWatch(ctx context.Context, in *Empty, opts ...grpc.CallOption) (DevicePlugin_ListAndWatchClient, error) // Allocate is called during container creation so that the Device @@ -569,7 +569,7 @@ type DevicePluginServer interface { // Manager GetDevicePluginOptions(context.Context, *Empty) (*DevicePluginOptions, error) // ListAndWatch returns a stream of List of Devices - // Whenever a Device state change or a Device disapears, ListAndWatch + // Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list ListAndWatch(*Empty, DevicePlugin_ListAndWatchServer) error // Allocate is called during container creation so that the Device diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.proto index efbd72c133c..758da317fe4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.proto +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1/api.proto @@ -51,7 +51,7 @@ service DevicePlugin { rpc GetDevicePluginOptions(Empty) returns (DevicePluginOptions) {} // ListAndWatch returns a stream of List of Devices - // Whenever a Device state change or a Device disapears, ListAndWatch + // Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {} @@ -67,7 +67,7 @@ service DevicePlugin { } // ListAndWatch returns a stream of List of Devices -// Whenever a Device state change or a Device disapears, ListAndWatch +// Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list message ListAndWatchResponse { repeated Device devices = 1; diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/BUILD new file mode 100644 index 00000000000..3addd5c1877 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/BUILD @@ -0,0 +1,26 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["config.go"], + importpath = "k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + "//pkg/kubelet/server/stats:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/config.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/config.go new file mode 100644 index 00000000000..b0697dec261 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1/config.go @@ -0,0 +1,81 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "time" + + summary "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" + "k8s.io/kubernetes/pkg/kubelet/server/stats" +) + +// Version is the string representation of the version of this configuration +const Version = "v1alpha1" + +// Config is the v1alpha1 resource metrics definition +func Config() stats.ResourceMetricsConfig { + return stats.ResourceMetricsConfig{ + NodeMetrics: []stats.NodeResourceMetric{ + { + Name: "node_cpu_usage_seconds_total", + Description: "Cumulative cpu time consumed by the node in core-seconds", + ValueFn: func(s summary.NodeStats) (*float64, time.Time) { + if s.CPU == nil { + return nil, time.Time{} + } + v := float64(*s.CPU.UsageCoreNanoSeconds) / float64(time.Second) + return &v, s.CPU.Time.Time + }, + }, + { + Name: "node_memory_working_set_bytes", + Description: "Current working set of the node in bytes", + ValueFn: func(s summary.NodeStats) (*float64, time.Time) { + if s.Memory == nil { + return nil, time.Time{} + } + v := float64(*s.Memory.WorkingSetBytes) + return &v, s.Memory.Time.Time + }, + }, + }, + ContainerMetrics: []stats.ContainerResourceMetric{ + { + Name: "container_cpu_usage_seconds_total", + Description: "Cumulative cpu time consumed by the container in core-seconds", + ValueFn: func(s summary.ContainerStats) (*float64, time.Time) { + if s.CPU == nil { + return nil, time.Time{} + } + v := float64(*s.CPU.UsageCoreNanoSeconds) / float64(time.Second) + return &v, s.CPU.Time.Time + }, + }, + { + Name: "container_memory_working_set_bytes", + Description: "Current working set of the container in bytes", + ValueFn: func(s summary.ContainerStats) (*float64, time.Time) { + if s.Memory == nil { + return nil, time.Time{} + } + v := float64(*s.Memory.WorkingSetBytes) + return &v, s.Memory.Time.Time + }, + }, + }, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go index ecffb8bc344..1a09fe4ffcc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go @@ -324,7 +324,7 @@ type UserDefinedMetricDescriptor struct { Labels map[string]string `json:"labels,omitempty"` } -// UserDefinedMetric represents a metric defined and generate by users. +// UserDefinedMetric represents a metric defined and generated by users. type UserDefinedMetric struct { UserDefinedMetricDescriptor `json:",inline"` // The time at which these stats were updated. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/well_known_labels.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/well_known_labels.go index 869952556dd..ada371c6b83 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/well_known_labels.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/well_known_labels.go @@ -19,17 +19,14 @@ package apis import ( "strings" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" ) const ( - LabelHostname = "kubernetes.io/hostname" - LabelZoneFailureDomain = "failure-domain.beta.kubernetes.io/zone" - LabelMultiZoneDelimiter = "__" - LabelZoneRegion = "failure-domain.beta.kubernetes.io/region" - - LabelInstanceType = "beta.kubernetes.io/instance-type" - + // The OS/Arch labels are promoted to GA in 1.14. kubelet applies both beta + // and GA labels to ensure backward compatibility. + // TODO: stop applying the beta OS/Arch labels in Kubernetes 1.18. LabelOS = "beta.kubernetes.io/os" LabelArch = "beta.kubernetes.io/arch" @@ -38,40 +35,27 @@ const ( labelZoneFailureDomainGA = "failure-domain.kubernetes.io/zone" labelZoneRegionGA = "failure-domain.kubernetes.io/region" labelInstanceTypeGA = "kubernetes.io/instance-type" - labelOSGA = "kubernetes.io/os" - labelArchGA = "kubernetes.io/arch" - - // LabelNamespaceSuffixKubelet is an allowed label namespace suffix kubelets can self-set ([*.]kubelet.kubernetes.io/*) - LabelNamespaceSuffixKubelet = "kubelet.kubernetes.io" - // LabelNamespaceSuffixNode is an allowed label namespace suffix kubelets can self-set ([*.]node.kubernetes.io/*) - LabelNamespaceSuffixNode = "node.kubernetes.io" - - // LabelNamespaceNodeRestriction is a forbidden label namespace that kubelets may not self-set when the NodeRestriction admission plugin is enabled - LabelNamespaceNodeRestriction = "node-restriction.kubernetes.io" ) -// When the --failure-domains scheduler flag is not specified, -// DefaultFailureDomains defines the set of label keys used when TopologyKey is empty in PreferredDuringScheduling anti-affinity. -var DefaultFailureDomains string = LabelHostname + "," + LabelZoneFailureDomain + "," + LabelZoneRegion - var kubeletLabels = sets.NewString( - LabelHostname, - LabelZoneFailureDomain, - LabelZoneRegion, - LabelInstanceType, + v1.LabelHostname, + v1.LabelZoneFailureDomain, + v1.LabelZoneRegion, + v1.LabelInstanceType, + v1.LabelOSStable, + v1.LabelArchStable, + LabelOS, LabelArch, labelZoneFailureDomainGA, labelZoneRegionGA, labelInstanceTypeGA, - labelOSGA, - labelArchGA, ) var kubeletLabelNamespaces = sets.NewString( - LabelNamespaceSuffixKubelet, - LabelNamespaceSuffixNode, + v1.LabelNamespaceSuffixKubelet, + v1.LabelNamespaceSuffixNode, ) // KubeletLabels returns the list of label keys kubelets are allowed to set on their own Node objects diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD index d3370f13cc8..12bb3b42c67 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD @@ -21,11 +21,9 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubelet/cadvisor", deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/kubelet/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/github.com/google/cadvisor/events:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", @@ -35,7 +33,6 @@ go_library( "//vendor/github.com/google/cadvisor/container:go_default_library", "//vendor/github.com/google/cadvisor/fs:go_default_library", "//vendor/github.com/google/cadvisor/manager:go_default_library", - "//vendor/github.com/google/cadvisor/metrics:go_default_library", "//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -48,23 +45,14 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "cadvisor_linux_test.go", - "main_test.go", - "util_test.go", - ], + srcs = ["util_test.go"], embed = [":go_default_library"], - deps = [ - "//pkg/features:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", - ] + select({ + deps = select({ "@io_bazel_rules_go//go/platform:linux": [ - "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/kubelet/types:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//vendor/github.com/google/cadvisor/container/crio:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/metrics:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", ], "//conditions:default": [], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go index d15907fe869..41d057c42e0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -32,10 +32,8 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" "github.com/google/cadvisor/manager" - "github.com/google/cadvisor/metrics" "github.com/google/cadvisor/utils/sysfs" "k8s.io/klog" - "k8s.io/kubernetes/pkg/kubelet/types" ) type cadvisorClient struct { @@ -72,35 +70,6 @@ func init() { } } -func containerLabels(c *cadvisorapi.ContainerInfo) map[string]string { - // Prometheus requires that all metrics in the same family have the same labels, - // so we arrange to supply blank strings for missing labels - var name, image, podName, namespace, containerName string - if len(c.Aliases) > 0 { - name = c.Aliases[0] - } - image = c.Spec.Image - if v, ok := c.Spec.Labels[types.KubernetesPodNameLabel]; ok { - podName = v - } - if v, ok := c.Spec.Labels[types.KubernetesPodNamespaceLabel]; ok { - namespace = v - } - if v, ok := c.Spec.Labels[types.KubernetesContainerNameLabel]; ok { - containerName = v - } - set := map[string]string{ - metrics.LabelID: c.Name, - metrics.LabelName: name, - metrics.LabelImage: image, - "pod_name": podName, - "namespace": namespace, - "container_name": containerName, - } - return set -} - -// New creates a cAdvisor and exports its API on the specified port if port > 0. func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) { sysFs := sysfs.NewRealSysFs() diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go index dba38022d25..ae69406b7a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go @@ -42,7 +42,7 @@ func (i *imageFsInfoProvider) ImageFsInfoLabel() (string, error) { // This is a temporary workaround to get stats for cri-o from cadvisor // and should be removed. // Related to https://github.com/kubernetes/kubernetes/issues/51798 - if i.runtimeEndpoint == CrioSocket { + if i.runtimeEndpoint == CrioSocket || i.runtimeEndpoint == "unix://"+CrioSocket { return cadvisorfs.LabelCrioImages, nil } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go index 9a7e8746436..49e35fb5d08 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go @@ -23,9 +23,7 @@ import ( cadvisorapi2 "github.com/google/cadvisor/info/v2" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" - utilfeature "k8s.io/apiserver/pkg/util/feature" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - "k8s.io/kubernetes/pkg/features" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) @@ -46,13 +44,11 @@ func CapacityFromMachineInfo(info *cadvisorapi.MachineInfo) v1.ResourceList { } // if huge pages are enabled, we report them as a schedulable resource on the node - if utilfeature.DefaultFeatureGate.Enabled(features.HugePages) { - for _, hugepagesInfo := range info.HugePages { - pageSizeBytes := int64(hugepagesInfo.PageSize * 1024) - hugePagesBytes := pageSizeBytes * int64(hugepagesInfo.NumPages) - pageSizeQuantity := resource.NewQuantity(pageSizeBytes, resource.BinarySI) - c[v1helper.HugePageResourceName(*pageSizeQuantity)] = *resource.NewQuantity(hugePagesBytes, resource.BinarySI) - } + for _, hugepagesInfo := range info.HugePages { + pageSizeBytes := int64(hugepagesInfo.PageSize * 1024) + hugePagesBytes := pageSizeBytes * int64(hugepagesInfo.NumPages) + pageSizeQuantity := resource.NewQuantity(pageSizeBytes, resource.BinarySI) + c[v1helper.HugePageResourceName(*pageSizeQuantity)] = *resource.NewQuantity(hugePagesBytes, resource.BinarySI) } return c diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/OWNERS index 470b7a1c92d..3cf03643835 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/BUILD index 257ec672e18..229696a2c3a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/BUILD @@ -17,7 +17,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", ], ) @@ -40,6 +40,7 @@ go_library( "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/client-go/util/certificate:go_default_library", "//staging/src/k8s.io/client-go/util/certificate/csr:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/bootstrap.go b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/bootstrap.go index efe34ef1510..0453165e1eb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/bootstrap.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap/bootstrap.go @@ -43,17 +43,70 @@ import ( certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/certificate" "k8s.io/client-go/util/certificate/csr" + "k8s.io/client-go/util/keyutil" ) const tmpPrivateKeyFile = "kubelet-client.key.tmp" +// LoadClientConfig tries to load the appropriate client config for retrieving certs and for use by users. +// If bootstrapPath is empty, only kubeconfigPath is checked. If bootstrap path is set and the contents +// of kubeconfigPath are valid, both certConfig and userConfig will point to that file. Otherwise the +// kubeconfigPath on disk is populated based on bootstrapPath but pointing to the location of the client cert +// in certDir. This preserves the historical behavior of bootstrapping where on subsequent restarts the +// most recent client cert is used to request new client certs instead of the initial token. +func LoadClientConfig(kubeconfigPath, bootstrapPath, certDir string) (certConfig, userConfig *restclient.Config, err error) { + if len(bootstrapPath) == 0 { + clientConfig, err := loadRESTClientConfig(kubeconfigPath) + if err != nil { + return nil, nil, fmt.Errorf("unable to load kubeconfig: %v", err) + } + klog.V(2).Infof("No bootstrapping requested, will use kubeconfig") + return clientConfig, restclient.CopyConfig(clientConfig), nil + } + + store, err := certificate.NewFileStore("kubelet-client", certDir, certDir, "", "") + if err != nil { + return nil, nil, fmt.Errorf("unable to build bootstrap cert store") + } + + ok, err := isClientConfigStillValid(kubeconfigPath) + if err != nil { + return nil, nil, err + } + + // use the current client config + if ok { + clientConfig, err := loadRESTClientConfig(kubeconfigPath) + if err != nil { + return nil, nil, fmt.Errorf("unable to load kubeconfig: %v", err) + } + klog.V(2).Infof("Current kubeconfig file contents are still valid, no bootstrap necessary") + return clientConfig, restclient.CopyConfig(clientConfig), nil + } + + bootstrapClientConfig, err := loadRESTClientConfig(bootstrapPath) + if err != nil { + return nil, nil, fmt.Errorf("unable to load bootstrap kubeconfig: %v", err) + } + + clientConfig := restclient.AnonymousClientConfig(bootstrapClientConfig) + pemPath := store.CurrentPath() + clientConfig.KeyFile = pemPath + clientConfig.CertFile = pemPath + if err := writeKubeconfigFromBootstrapping(clientConfig, kubeconfigPath, pemPath); err != nil { + return nil, nil, err + } + klog.V(2).Infof("Use the bootstrap credentials to request a cert, and set kubeconfig to point to the certificate dir") + return bootstrapClientConfig, clientConfig, nil +} + // LoadClientCert requests a client cert for kubelet if the kubeconfigPath file does not exist. // The kubeconfig at bootstrapPath is used to request a client certificate from the API server. // On success, a kubeconfig file referencing the generated key and obtained certificate is written to kubeconfigPath. // The certificate and key file are stored in certDir. -func LoadClientCert(kubeconfigPath string, bootstrapPath string, certDir string, nodeName types.NodeName) error { +func LoadClientCert(kubeconfigPath, bootstrapPath, certDir string, nodeName types.NodeName) error { // Short-circuit if the kubeconfig file exists and is valid. - ok, err := verifyBootstrapClientConfig(kubeconfigPath) + ok, err := isClientConfigStillValid(kubeconfigPath) if err != nil { return err } @@ -82,7 +135,7 @@ func LoadClientCert(kubeconfigPath string, bootstrapPath string, certDir string, var keyData []byte if cert, err := store.Current(); err == nil { if cert.PrivateKey != nil { - keyData, err = certutil.MarshalPrivateKeyToPEM(cert.PrivateKey) + keyData, err = keyutil.MarshalPrivateKeyToPEM(cert.PrivateKey) if err != nil { keyData = nil } @@ -96,7 +149,7 @@ func LoadClientCert(kubeconfigPath string, bootstrapPath string, certDir string, klog.V(2).Infof("No valid private key and/or certificate found, reusing existing private key or creating a new one") // Note: always call LoadOrGenerateKeyFile so that private key is // reused on next startup if CSR request fails. - keyData, _, err = certutil.LoadOrGenerateKeyFile(privKeyPath) + keyData, _, err = keyutil.LoadOrGenerateKeyFile(privKeyPath) if err != nil { return err } @@ -117,8 +170,10 @@ func LoadClientCert(kubeconfigPath string, bootstrapPath string, certDir string, klog.V(2).Infof("failed cleaning up private key file %q: %v", privKeyPath, err) } - pemPath := store.CurrentPath() + return writeKubeconfigFromBootstrapping(bootstrapClientConfig, kubeconfigPath, store.CurrentPath()) +} +func writeKubeconfigFromBootstrapping(bootstrapClientConfig *restclient.Config, kubeconfigPath, pemPath string) error { // Get the CA data from the bootstrap client config. caFile, caData := bootstrapClientConfig.CAFile, []byte{} if len(caFile) == 0 { @@ -168,10 +223,10 @@ func loadRESTClientConfig(kubeconfig string) (*restclient.Config, error) { ).ClientConfig() } -// verifyBootstrapClientConfig checks the provided kubeconfig to see if it has a valid +// isClientConfigStillValid checks the provided kubeconfig to see if it has a valid // client certificate. It returns true if the kubeconfig is valid, or an error if bootstrapping // should stop immediately. -func verifyBootstrapClientConfig(kubeconfigPath string) (bool, error) { +func isClientConfigStillValid(kubeconfigPath string) (bool, error) { _, err := os.Stat(kubeconfigPath) if os.IsNotExist(err) { return false, nil @@ -218,7 +273,7 @@ func verifyKeyData(data []byte) bool { if len(data) == 0 { return false } - _, err := certutil.ParsePrivateKeyPEM(data) + _, err := keyutil.ParsePrivateKeyPEM(data) return err == nil } @@ -262,7 +317,7 @@ func requestNodeCertificate(client certificatesv1beta1.CertificateSigningRequest CommonName: "system:node:" + string(nodeName), } - privateKey, err := certutil.ParsePrivateKeyPEM(privateKeyData) + privateKey, err := keyutil.ParsePrivateKeyPEM(privateKeyData) if err != nil { return nil, fmt.Errorf("invalid private key for certificate request: %v", err) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/kubelet.go b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/kubelet.go index e55594f8e84..cf106c84e10 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/kubelet.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/certificate/kubelet.go @@ -17,6 +17,7 @@ limitations under the License. package certificate import ( + "crypto/tls" "crypto/x509" "crypto/x509/pkix" "fmt" @@ -29,7 +30,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" clientset "k8s.io/client-go/kubernetes" - clientcertificates "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" + certificatesclient "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" "k8s.io/client-go/util/certificate" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/metrics" @@ -38,7 +39,7 @@ import ( // NewKubeletServerCertificateManager creates a certificate manager for the kubelet when retrieving a server certificate // or returns an error. func NewKubeletServerCertificateManager(kubeClient clientset.Interface, kubeCfg *kubeletconfig.KubeletConfiguration, nodeName types.NodeName, getAddresses func() []v1.NodeAddress, certDirectory string) (certificate.Manager, error) { - var certSigningRequestClient clientcertificates.CertificateSigningRequestInterface + var certSigningRequestClient certificatesclient.CertificateSigningRequestInterface if kubeClient != nil && kubeClient.CertificatesV1beta1() != nil { certSigningRequestClient = kubeClient.CertificatesV1beta1().CertificateSigningRequests() } @@ -78,8 +79,10 @@ func NewKubeletServerCertificateManager(kubeClient clientset.Interface, kubeCfg } m, err := certificate.NewManager(&certificate.Config{ - CertificateSigningRequestClient: certSigningRequestClient, - GetTemplate: getTemplate, + ClientFn: func(current *tls.Certificate) (certificatesclient.CertificateSigningRequestInterface, error) { + return certSigningRequestClient, nil + }, + GetTemplate: getTemplate, Usages: []certificates.KeyUsage{ // https://tools.ietf.org/html/rfc5280#section-4.2.1.3 // @@ -142,10 +145,18 @@ func addressesToHostnamesAndIPs(addresses []v1.NodeAddress) (dnsNames []string, } // NewKubeletClientCertificateManager sets up a certificate manager without a -// client that can be used to sign new certificates (or rotate). It answers with -// whatever certificate it is initialized with. If a CSR client is set later, it -// may begin rotating/renewing the client cert -func NewKubeletClientCertificateManager(certDirectory string, nodeName types.NodeName, certData []byte, keyData []byte, certFile string, keyFile string) (certificate.Manager, error) { +// client that can be used to sign new certificates (or rotate). If a CSR +// client is set later, it may begin rotating/renewing the client cert. +func NewKubeletClientCertificateManager( + certDirectory string, + nodeName types.NodeName, + bootstrapCertData []byte, + bootstrapKeyData []byte, + certFile string, + keyFile string, + clientFn certificate.CSRClientFunc, +) (certificate.Manager, error) { + certificateStore, err := certificate.NewFileStore( "kubelet-client", certDirectory, @@ -163,9 +174,10 @@ func NewKubeletClientCertificateManager(certDirectory string, nodeName types.Nod Help: "Gauge of the lifetime of a certificate. The value is the date the certificate will expire in seconds since January 1, 1970 UTC.", }, ) - prometheus.MustRegister(certificateExpiration) + prometheus.Register(certificateExpiration) m, err := certificate.NewManager(&certificate.Config{ + ClientFn: clientFn, Template: &x509.CertificateRequest{ Subject: pkix.Name{ CommonName: fmt.Sprintf("system:node:%s", nodeName), @@ -187,10 +199,16 @@ func NewKubeletClientCertificateManager(certDirectory string, nodeName types.Nod // authenticate itself to the TLS server. certificates.UsageClientAuth, }, - CertificateStore: certificateStore, - BootstrapCertificatePEM: certData, - BootstrapKeyPEM: keyData, - CertificateExpiration: certificateExpiration, + + // For backwards compatibility, the kubelet supports the ability to + // provide a higher privileged certificate as initial data that will + // then be rotated immediately. This code path is used by kubeadm on + // the masters. + BootstrapCertificatePEM: bootstrapCertData, + BootstrapKeyPEM: bootstrapKeyData, + + CertificateStore: certificateStore, + CertificateExpiration: certificateExpiration, }) if err != nil { return nil, fmt.Errorf("failed to initialize client certificate manager: %v", err) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/BUILD index 6ead9ea8c3d..9d2aab332f8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/BUILD @@ -35,7 +35,7 @@ go_library( "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/status:go_default_library", "//pkg/kubelet/util/pluginwatcher:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -73,8 +73,8 @@ go_library( "//pkg/kubelet/events:go_default_library", "//pkg/kubelet/metrics:go_default_library", "//pkg/kubelet/qos:go_default_library", + "//pkg/kubelet/stats/pidlimit:go_default_library", "//pkg/kubelet/types:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/oom:go_default_library", "//pkg/util/procfs:go_default_library", @@ -88,6 +88,8 @@ go_library( "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ "//pkg/kubelet/cadvisor:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/OWNERS index 307f9436c00..e9a3fecb9c5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - Random-Liu - dchen1107 diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cgroup_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cgroup_manager_linux.go index 3fe9d93d3b2..c5df81de8dd 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cgroup_manager_linux.go @@ -174,7 +174,9 @@ func (m *cgroupManagerImpl) Exists(name CgroupName) bool { // in https://github.com/opencontainers/runc/issues/1440 // once resolved, we can remove this code. whitelistControllers := sets.NewString("cpu", "cpuacct", "cpuset", "memory", "systemd") - + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) { + whitelistControllers.Insert("pids") + } var missingPaths []string // If even one cgroup path doesn't exist, then the cgroup doesn't exist. for controller, path := range cgroupPaths { @@ -199,7 +201,8 @@ func (m *cgroupManagerImpl) Exists(name CgroupName) bool { func (m *cgroupManagerImpl) Destroy(cgroupConfig *CgroupConfig) error { start := time.Now() defer func() { - metrics.CgroupManagerLatency.WithLabelValues("destroy").Observe(metrics.SinceInMicroseconds(start)) + metrics.CgroupManagerDuration.WithLabelValues("destroy").Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedCgroupManagerLatency.WithLabelValues("destroy").Observe(metrics.SinceInMicroseconds(start)) }() cgroupPaths := m.buildCgroupPaths(cgroupConfig.Name) @@ -236,10 +239,12 @@ func getSupportedSubsystems() map[subsystem]bool { supportedSubsystems := map[subsystem]bool{ &cgroupfs.MemoryGroup{}: true, &cgroupfs.CpuGroup{}: true, + &cgroupfs.PidsGroup{}: true, } // not all hosts support hugetlb cgroup, and in the absent of hugetlb, we will fail silently by reporting no capacity. - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.HugePages) { - supportedSubsystems[&cgroupfs.HugetlbGroup{}] = false + supportedSubsystems[&cgroupfs.HugetlbGroup{}] = false + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) { + supportedSubsystems[&cgroupfs.PidsGroup{}] = true } return supportedSubsystems } @@ -287,29 +292,31 @@ func (m *cgroupManagerImpl) toResources(resourceConfig *ResourceConfig) *libcont if resourceConfig.CpuPeriod != nil { resources.CpuPeriod = *resourceConfig.CpuPeriod } - + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) { + if resourceConfig.PidsLimit != nil { + resources.PidsLimit = *resourceConfig.PidsLimit + } + } // if huge pages are enabled, we set them in libcontainer - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.HugePages) { - // for each page size enumerated, set that value - pageSizes := sets.NewString() - for pageSize, limit := range resourceConfig.HugePageLimit { - sizeString := units.CustomSize("%g%s", float64(pageSize), 1024.0, hugePageSizeList) - resources.HugetlbLimit = append(resources.HugetlbLimit, &libcontainerconfigs.HugepageLimit{ - Pagesize: sizeString, - Limit: uint64(limit), - }) - pageSizes.Insert(sizeString) - } - // for each page size omitted, limit to 0 - for _, pageSize := range cgroupfs.HugePageSizes { - if pageSizes.Has(pageSize) { - continue - } - resources.HugetlbLimit = append(resources.HugetlbLimit, &libcontainerconfigs.HugepageLimit{ - Pagesize: pageSize, - Limit: uint64(0), - }) + // for each page size enumerated, set that value + pageSizes := sets.NewString() + for pageSize, limit := range resourceConfig.HugePageLimit { + sizeString := units.CustomSize("%g%s", float64(pageSize), 1024.0, hugePageSizeList) + resources.HugetlbLimit = append(resources.HugetlbLimit, &libcontainerconfigs.HugepageLimit{ + Pagesize: sizeString, + Limit: uint64(limit), + }) + pageSizes.Insert(sizeString) + } + // for each page size omitted, limit to 0 + for _, pageSize := range cgroupfs.HugePageSizes { + if pageSizes.Has(pageSize) { + continue } + resources.HugetlbLimit = append(resources.HugetlbLimit, &libcontainerconfigs.HugepageLimit{ + Pagesize: pageSize, + Limit: uint64(0), + }) } return resources } @@ -318,7 +325,8 @@ func (m *cgroupManagerImpl) toResources(resourceConfig *ResourceConfig) *libcont func (m *cgroupManagerImpl) Update(cgroupConfig *CgroupConfig) error { start := time.Now() defer func() { - metrics.CgroupManagerLatency.WithLabelValues("update").Observe(metrics.SinceInMicroseconds(start)) + metrics.CgroupManagerDuration.WithLabelValues("update").Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedCgroupManagerLatency.WithLabelValues("update").Observe(metrics.SinceInMicroseconds(start)) }() // Extract the cgroup resource parameters @@ -335,6 +343,10 @@ func (m *cgroupManagerImpl) Update(cgroupConfig *CgroupConfig) error { // depending on the cgroup driver in use, so we need this conditional here. libcontainerCgroupConfig.Path = cgroupConfig.Name.ToCgroupfs() + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil { + libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit + } + if err := setSupportedSubsystems(libcontainerCgroupConfig); err != nil { return fmt.Errorf("failed to set supported cgroup subsystems for cgroup %v: %v", cgroupConfig.Name, err) } @@ -345,7 +357,8 @@ func (m *cgroupManagerImpl) Update(cgroupConfig *CgroupConfig) error { func (m *cgroupManagerImpl) Create(cgroupConfig *CgroupConfig) error { start := time.Now() defer func() { - metrics.CgroupManagerLatency.WithLabelValues("create").Observe(metrics.SinceInMicroseconds(start)) + metrics.CgroupManagerDuration.WithLabelValues("create").Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedCgroupManagerLatency.WithLabelValues("create").Observe(metrics.SinceInMicroseconds(start)) }() resources := m.toResources(cgroupConfig.ResourceParameters) @@ -357,6 +370,10 @@ func (m *cgroupManagerImpl) Create(cgroupConfig *CgroupConfig) error { // depending on the cgroup driver in use, so we need this conditional here. libcontainerCgroupConfig.Path = cgroupConfig.Name.ToCgroupfs() + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil { + libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit + } + // get the manager with the specified cgroup configuration manager, err := m.adapter.newManager(libcontainerCgroupConfig, nil) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go index 64728a7d6b1..7c62ce5ef41 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go @@ -29,7 +29,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "fmt" "strconv" @@ -89,7 +89,7 @@ type ContainerManager interface { // Otherwise, it updates allocatableResource in nodeInfo if necessary, // to make sure it is at least equal to the pod's requested capacity for // any registered device plugin resource - UpdatePluginResources(*schedulercache.NodeInfo, *lifecycle.PodAdmitAttributes) error + UpdatePluginResources(*schedulernodeinfo.NodeInfo, *lifecycle.PodAdmitAttributes) error InternalContainerLifecycle() InternalContainerLifecycle diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go index a3f4f95537e..d5c566ce0c3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go @@ -53,14 +53,15 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/qos" + "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit" "k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" - utilfile "k8s.io/kubernetes/pkg/util/file" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/util/procfs" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" + utilpath "k8s.io/utils/path" ) const ( @@ -123,6 +124,8 @@ type containerManagerImpl struct { cgroupManager CgroupManager // Capacity of this node. capacity v1.ResourceList + // Capacity of this node, including internal resources. + internalCapacity v1.ResourceList // Absolute cgroupfs path to a cgroup that Kubelet needs to place all pods under. // This path include a top level container for enforcing Node Allocatable. cgroupRoot CgroupName @@ -179,11 +182,11 @@ func validateSystemRequirements(mountUtil mount.Interface) (features, error) { // Check if cpu quota is available. // CPU cgroup is required and so it expected to be mounted at this point. - periodExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_period_us")) + periodExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_period_us")) if err != nil { klog.Errorf("failed to detect if CPU cgroup cpu.cfs_period_us is available - %v", err) } - quotaExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_quota_us")) + quotaExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_quota_us")) if err != nil { klog.Errorf("failed to detect if CPU cgroup cpu.cfs_quota_us is available - %v", err) } @@ -219,6 +222,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I } var capacity = v1.ResourceList{} + var internalCapacity = v1.ResourceList{} // It is safe to invoke `MachineInfo` on cAdvisor before logically initializing cAdvisor here because // machine info is computed and cached once as part of cAdvisor object creation. // But `RootFsInfo` and `ImagesFsInfo` are not available at this moment so they will be called later during manager starts @@ -227,6 +231,15 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I return nil, err } capacity = cadvisor.CapacityFromMachineInfo(machineInfo) + for k, v := range capacity { + internalCapacity[k] = v + } + pidlimits, err := pidlimit.Stats() + if err == nil && pidlimits != nil && pidlimits.MaxPID != nil { + internalCapacity[pidlimit.PIDs] = *resource.NewQuantity( + int64(*pidlimits.MaxPID), + resource.DecimalSI) + } // Turn CgroupRoot from a string (in cgroupfs path format) to internal CgroupName cgroupRoot := ParseCgroupfsToCgroupName(nodeConfig.CgroupRoot) @@ -264,6 +277,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I subsystems: subsystems, cgroupManager: cgroupManager, capacity: capacity, + internalCapacity: internalCapacity, cgroupRoot: cgroupRoot, recorder: recorder, qosContainerManager: qosContainerManager, @@ -639,7 +653,7 @@ func (cm *containerManagerImpl) GetResources(pod *v1.Pod, container *v1.Containe return opts, nil } -func (cm *containerManagerImpl) UpdatePluginResources(node *schedulercache.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { +func (cm *containerManagerImpl) UpdatePluginResources(node *schedulernodeinfo.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { return cm.deviceManager.Allocate(node, attrs) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go index 47fdd617bf0..a56e2e67e46 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) type containerManagerStub struct{} @@ -93,7 +93,7 @@ func (cm *containerManagerStub) GetResources(pod *v1.Pod, container *v1.Containe return &kubecontainer.RunContainerOptions{}, nil } -func (cm *containerManagerStub) UpdatePluginResources(*schedulercache.NodeInfo, *lifecycle.PodAdmitAttributes) error { +func (cm *containerManagerStub) UpdatePluginResources(*schedulernodeinfo.NodeInfo, *lifecycle.PodAdmitAttributes) error { return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_windows.go index a8a84d5f22d..48ec1ce076b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_windows.go @@ -39,7 +39,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/kubernetes/pkg/util/mount" ) @@ -156,7 +156,7 @@ func (cm *containerManagerImpl) GetResources(pod *v1.Pod, container *v1.Containe return &kubecontainer.RunContainerOptions{}, nil } -func (cm *containerManagerImpl) UpdatePluginResources(*schedulercache.NodeInfo, *lifecycle.PodAdmitAttributes) error { +func (cm *containerManagerImpl) UpdatePluginResources(*schedulernodeinfo.NodeInfo, *lifecycle.PodAdmitAttributes) error { return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/OWNERS index 152ded29de0..77f30f6d64b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - derekwaynecarr - vishh diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/cpu_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/cpu_manager.go index 4ccddd554da..53d5e6c2a01 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/cpu_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/cpu_manager.go @@ -44,7 +44,7 @@ type runtimeService interface { type policyName string -// cpuManagerStateFileName is the name file name where cpu manager stores it's state +// cpuManagerStateFileName is the file name where cpu manager stores its state const cpuManagerStateFileName = "cpu_manager_state" // Manager interface provides methods for Kubelet to manage pod cpus. @@ -220,6 +220,8 @@ func (m *manager) reconcileState() (success []reconciledContainer, failure []rec success = []reconciledContainer{} failure = []reconciledContainer{} + activeContainers := make(map[string]*v1.Pod) + for _, pod := range m.activePods() { allContainers := pod.Spec.InitContainers allContainers = append(allContainers, pod.Spec.Containers...) @@ -258,6 +260,8 @@ func (m *manager) reconcileState() (success []reconciledContainer, failure []rec } } + activeContainers[containerID] = pod + cset := m.state.GetCPUSetOrDefault(containerID) if cset.IsEmpty() { // NOTE: This should not happen outside of tests. @@ -276,6 +280,16 @@ func (m *manager) reconcileState() (success []reconciledContainer, failure []rec success = append(success, reconciledContainer{pod.Name, container.Name, containerID}) } } + + for containerID := range m.state.GetCPUAssignments() { + if pod, ok := activeContainers[containerID]; !ok { + err := m.RemoveContainer(containerID) + if err != nil { + klog.Errorf("[cpumanager] reconcileState: failed to remove container (pod: %s, container id: %s, error: %v)", pod.Name, containerID, err) + failure = append(failure, reconciledContainer{pod.Name, "", containerID}) + } + } + } return success, failure } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology/topology.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology/topology.go index adb0aa7fc70..f19acac5fcb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology/topology.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology/topology.go @@ -18,7 +18,6 @@ package topology import ( "fmt" - "sort" cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/klog" @@ -141,36 +140,33 @@ func (d CPUDetails) CPUsInCore(id int) cpuset.CPUSet { // Discover returns CPUTopology based on cadvisor node info func Discover(machineInfo *cadvisorapi.MachineInfo) (*CPUTopology, error) { - if machineInfo.NumCores == 0 { return nil, fmt.Errorf("could not detect number of cpus") } CPUDetails := CPUDetails{} - numCPUs := machineInfo.NumCores numPhysicalCores := 0 - var coreID int - var err error for _, socket := range machineInfo.Topology { numPhysicalCores += len(socket.Cores) for _, core := range socket.Cores { - if coreID, err = getUniqueCoreID(core.Threads); err != nil { + if coreID, err := getUniqueCoreID(core.Threads); err == nil { + for _, cpu := range core.Threads { + CPUDetails[cpu] = CPUInfo{ + CoreID: coreID, + SocketID: socket.Id, + } + } + } else { klog.Errorf("could not get unique coreID for socket: %d core %d threads: %v", socket.Id, core.Id, core.Threads) return nil, err } - for _, cpu := range core.Threads { - CPUDetails[cpu] = CPUInfo{ - CoreID: coreID, - SocketID: socket.Id, - } - } } } return &CPUTopology{ - NumCPUs: numCPUs, + NumCPUs: machineInfo.NumCores, NumSockets: len(machineInfo.Topology), NumCores: numPhysicalCores, CPUDetails: CPUDetails, @@ -181,7 +177,6 @@ func Discover(machineInfo *cadvisorapi.MachineInfo) (*CPUTopology, error) { // for a given Threads []int slice. This will assure that coreID's are // platform unique (opposite to what cAdvisor reports - socket unique) func getUniqueCoreID(threads []int) (coreID int, err error) { - err = nil if len(threads) == 0 { return 0, fmt.Errorf("no cpus provided") } @@ -190,8 +185,12 @@ func getUniqueCoreID(threads []int) (coreID int, err error) { return 0, fmt.Errorf("cpus provided are not unique") } - tmpThreads := make([]int, len(threads)) - copy(tmpThreads, threads) - sort.Ints(tmpThreads) - return tmpThreads[0], err + min := threads[0] + for _, thread := range threads[1:] { + if thread < min { + min = thread + } + } + + return min, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpuset/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpuset/OWNERS index 02f72bf6cc1..e6f9bfdad6a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpuset/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/cpuset/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - derekwaynecarr - vishh diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/BUILD index 885f783db79..f45f3fc9897 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/BUILD @@ -25,7 +25,7 @@ go_library( "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/metrics:go_default_library", "//pkg/kubelet/util/pluginwatcher:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", @@ -47,7 +47,7 @@ go_test( "//pkg/kubelet/checkpointmanager:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/util/pluginwatcher:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/OWNERS index a374cd52454..d081f9a626d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - jiayingz - vishh diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go index 9f8cac139cd..441eebd6684 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go @@ -23,11 +23,13 @@ import ( "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/checksum" ) +// DeviceManagerCheckpoint defines the operations to retrieve pod devices type DeviceManagerCheckpoint interface { checkpointmanager.Checkpoint GetData() ([]PodDevicesEntry, map[string][]string) } +// PodDevicesEntry connects pod information to devices type PodDevicesEntry struct { PodUID string ContainerName string @@ -44,12 +46,13 @@ type checkpointData struct { RegisteredDevices map[string][]string } +// Data holds checkpoint data and its checksum type Data struct { Data checkpointData Checksum checksum.Checksum } -// NewDeviceManagerCheckpoint returns an instance of Checkpoint +// New returns an instance of Checkpoint func New(devEntries []PodDevicesEntry, devices map[string][]string) DeviceManagerCheckpoint { return &Data{ @@ -76,6 +79,7 @@ func (cp *Data) VerifyChecksum() error { return cp.Checksum.Verify(cp.Data) } +// GetData returns device entries and registered devices func (cp *Data) GetData() ([]PodDevicesEntry, map[string][]string) { return cp.Data.PodDeviceEntries, cp.Data.RegisteredDevices } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/endpoint.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/endpoint.go index 624643e5efb..ff8ba061d5d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/endpoint.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/endpoint.go @@ -54,7 +54,7 @@ type endpointImpl struct { cb monitorCallback } -// newEndpoint creates a new endpoint for the given resourceName. +// newEndpointImpl creates a new endpoint for the given resourceName. // This is to be used during normal device plugin registration. func newEndpointImpl(socketPath, resourceName string, callback monitorCallback) (*endpointImpl, error) { client, c, err := dial(socketPath) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go index e42191f8993..56f1984d75b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go @@ -40,7 +40,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/metrics" watcher "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // ActivePodsFunc is a function that returns a list of pods to reconcile. @@ -124,7 +124,7 @@ func newManagerImpl(socketPath string) (*ManagerImpl, error) { } manager.callback = manager.genericDeviceUpdateCallback - // The following structs are populated with real implementations in manager.Start() + // The following structures are populated with real implementations in manager.Start() // Before that, initializes them to perform no-op operations. manager.activePods = func() []*v1.Pod { return []*v1.Pod{} } manager.sourcesReady = &sourcesReadyStub{} @@ -188,8 +188,8 @@ func (m *ManagerImpl) checkpointFile() string { return filepath.Join(m.socketdir, kubeletDeviceManagerCheckpoint) } -// Start starts the Device Plugin Manager amd start initialization of -// podDevices and allocatedDevices information from checkpoint-ed state and +// Start starts the Device Plugin Manager and start initialization of +// podDevices and allocatedDevices information from checkpointed state and // starts device plugin registration service. func (m *ManagerImpl) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error { klog.V(2).Infof("Starting Device Plugin manager") @@ -329,7 +329,7 @@ func (m *ManagerImpl) allocatePodResources(pod *v1.Pod) error { // Allocate is the call that you can use to allocate a set of devices // from the registered device plugins. -func (m *ManagerImpl) Allocate(node *schedulercache.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { +func (m *ManagerImpl) Allocate(node *schedulernodeinfo.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { pod := attrs.Pod err := m.allocatePodResources(pod) if err != nil { @@ -353,6 +353,7 @@ func (m *ManagerImpl) Allocate(node *schedulercache.NodeInfo, attrs *lifecycle.P func (m *ManagerImpl) Register(ctx context.Context, r *pluginapi.RegisterRequest) (*pluginapi.Empty, error) { klog.Infof("Got registration request from device plugin with resource name %q", r.ResourceName) metrics.DevicePluginRegistrationCount.WithLabelValues(r.ResourceName).Inc() + metrics.DeprecatedDevicePluginRegistrationCount.WithLabelValues(r.ResourceName).Inc() var versionCompatible bool for _, v := range pluginapi.SupportedVersions { if r.Version == v { @@ -620,7 +621,7 @@ func (m *ManagerImpl) devicesToAllocate(podUID, contName, resource string, requi devicesInUse := m.allocatedDevices[resource] // Gets a list of available devices. available := m.healthyDevices[resource].Difference(devicesInUse) - if int(available.Len()) < needed { + if available.Len() < needed { return nil, fmt.Errorf("requested number of devices unavailable for %s. Requested: %d, Available: %d", resource, needed, available.Len()) } allocated := available.UnsortedList()[:needed] @@ -677,7 +678,7 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont // and container2 both require X resource A and Y resource B. Both allocation // requests may fail if we serve them in mixed order. // TODO: may revisit this part later if we see inefficient resource allocation - // in real use as the result of this. Should also consider to parallize device + // in real use as the result of this. Should also consider to parallelize device // plugin Allocate grpc calls if it becomes common that a container may require // resources from multiple device plugins. m.mutex.Lock() @@ -695,7 +696,8 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont // in a passed in AllocateRequest pointer, and issues a single Allocate call per pod. klog.V(3).Infof("Making allocation request for devices %v for device plugin %s", devs, resource) resp, err := eI.e.allocate(devs) - metrics.DevicePluginAllocationLatency.WithLabelValues(resource).Observe(metrics.SinceInMicroseconds(startRPCTime)) + metrics.DevicePluginAllocationDuration.WithLabelValues(resource).Observe(metrics.SinceInSeconds(startRPCTime)) + metrics.DeprecatedDevicePluginAllocationLatency.WithLabelValues(resource).Observe(metrics.SinceInMicroseconds(startRPCTime)) if err != nil { // In case of allocation failure, we want to restore m.allocatedDevices // to the actual allocated state from m.podDevices. @@ -788,8 +790,8 @@ func (m *ManagerImpl) callPreStartContainerIfNeeded(podUID, contName, resource s // and if necessary, updates allocatableResource in nodeInfo to at least equal to // the allocated capacity. This allows pods that have already been scheduled on // the node to pass GeneralPredicates admission checking even upon device plugin failure. -func (m *ManagerImpl) sanitizeNodeAllocatable(node *schedulercache.NodeInfo) { - var newAllocatableResource *schedulercache.Resource +func (m *ManagerImpl) sanitizeNodeAllocatable(node *schedulernodeinfo.NodeInfo) { + var newAllocatableResource *schedulernodeinfo.Resource allocatableResource := node.AllocatableResource() if allocatableResource.ScalarResources == nil { allocatableResource.ScalarResources = make(map[v1.ResourceName]int64) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go index 1008daca3b7..a9604ae048d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go @@ -21,7 +21,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // ManagerStub provides a simple stub implementation for the Device Manager. @@ -43,7 +43,7 @@ func (h *ManagerStub) Stop() error { } // Allocate simply returns nil. -func (h *ManagerStub) Allocate(node *schedulercache.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { +func (h *ManagerStub) Allocate(node *schedulernodeinfo.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go index 35923b00d12..a36b32cb64a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go @@ -24,7 +24,7 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/lifecycle" watcher "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // Manager manages all the Device Plugins running on a node. @@ -40,7 +40,7 @@ type Manager interface { // variables, mount points and device files). The node object is provided // for the device manager to update the node capacity to reflect the // currently available devices. - Allocate(node *schedulercache.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error + Allocate(node *schedulernodeinfo.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error // Stop stops the manager. Stop() error diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/node_container_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/node_container_manager_linux.go index 8d7f16f1d19..821fee6f0f4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/node_container_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/node_container_manager_linux.go @@ -26,10 +26,9 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" - kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/events" + "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) @@ -42,7 +41,7 @@ func (cm *containerManagerImpl) createNodeAllocatableCgroups() error { cgroupConfig := &CgroupConfig{ Name: cm.cgroupRoot, // The default limits for cpu shares can be very low which can lead to CPU starvation for pods. - ResourceParameters: getCgroupConfig(cm.capacity), + ResourceParameters: getCgroupConfig(cm.internalCapacity), } if cm.cgroupManager.Exists(cgroupConfig.Name) { return nil @@ -60,10 +59,10 @@ func (cm *containerManagerImpl) enforceNodeAllocatableCgroups() error { // We need to update limits on node allocatable cgroup no matter what because // default cpu shares on cgroups are low and can cause cpu starvation. - nodeAllocatable := cm.capacity + nodeAllocatable := cm.internalCapacity // Use Node Allocatable limits instead of capacity if the user requested enforcing node allocatable. if cm.CgroupsPerQOS && nc.EnforceNodeAllocatable.Has(kubetypes.NodeAllocatableEnforcementKey) { - nodeAllocatable = cm.getNodeAllocatableAbsolute() + nodeAllocatable = cm.getNodeAllocatableInternalAbsolute() } klog.V(4).Infof("Attempting to enforce Node Allocatable with config: %+v", nc) @@ -132,7 +131,7 @@ func enforceExistingCgroup(cgroupManager CgroupManager, cName CgroupName, rl v1. if cgroupConfig.ResourceParameters == nil { return fmt.Errorf("%q cgroup is not config properly", cgroupConfig.Name) } - klog.V(4).Infof("Enforcing limits on cgroup %q with %d cpu shares and %d bytes of memory", cName, cgroupConfig.ResourceParameters.CpuShares, cgroupConfig.ResourceParameters.Memory) + klog.V(4).Infof("Enforcing limits on cgroup %q with %d cpu shares, %d bytes of memory, and %d processes", cName, cgroupConfig.ResourceParameters.CpuShares, cgroupConfig.ResourceParameters.Memory, cgroupConfig.ResourceParameters.PidsLimit) if !cgroupManager.Exists(cgroupConfig.Name) { return fmt.Errorf("%q cgroup does not exist", cgroupConfig.Name) } @@ -159,9 +158,11 @@ func getCgroupConfig(rl v1.ResourceList) *ResourceConfig { val := MilliCPUToShares(q.MilliValue()) rc.CpuShares = &val } - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.HugePages) { - rc.HugePageLimit = HugePageLimits(rl) + if q, exists := rl[pidlimit.PIDs]; exists { + val := q.Value() + rc.PidsLimit = &val } + rc.HugePageLimit = HugePageLimits(rl) return &rc } @@ -170,8 +171,12 @@ func getCgroupConfig(rl v1.ResourceList) *ResourceConfig { // Note that not all resources that are available on the node are included in the returned list of resources. // Returns a ResourceList. func (cm *containerManagerImpl) getNodeAllocatableAbsolute() v1.ResourceList { + return cm.getNodeAllocatableAbsoluteImpl(cm.capacity) +} + +func (cm *containerManagerImpl) getNodeAllocatableAbsoluteImpl(capacity v1.ResourceList) v1.ResourceList { result := make(v1.ResourceList) - for k, v := range cm.capacity { + for k, v := range capacity { value := *(v.Copy()) if cm.NodeConfig.SystemReserved != nil { value.Sub(cm.NodeConfig.SystemReserved[k]) @@ -186,7 +191,13 @@ func (cm *containerManagerImpl) getNodeAllocatableAbsolute() v1.ResourceList { result[k] = value } return result +} +// getNodeAllocatableInternalAbsolute is similar to getNodeAllocatableAbsolute except that +// it also includes internal resources (currently process IDs). It is intended for setting +// up top level cgroups only. +func (cm *containerManagerImpl) getNodeAllocatableInternalAbsolute() v1.ResourceList { + return cm.getNodeAllocatableAbsoluteImpl(cm.internalCapacity) } // GetNodeAllocatableReservation returns amount of compute or storage resource that have to be reserved on this node from scheduling. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/pod_container_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/pod_container_manager_linux.go index 7f04b9bd86d..f0bf4df880b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/pod_container_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/pod_container_manager_linux.go @@ -26,8 +26,10 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" + kubefeatures "k8s.io/kubernetes/pkg/features" ) const ( @@ -84,6 +86,9 @@ func (m *podContainerManagerImpl) EnsureExists(pod *v1.Pod) error { Name: podContainerName, ResourceParameters: ResourceConfigForPod(pod, m.enforceCPULimits, m.cpuCFSQuotaPeriod), } + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && m.podPidsLimit > 0 { + containerConfig.ResourceParameters.PidsLimit = &m.podPidsLimit + } if err := m.cgroupManager.Create(containerConfig); err != nil { return fmt.Errorf("failed to create container for %v : %v", podContainerName, err) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/qos_container_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/qos_container_manager_linux.go index 249825f47e2..e5389dfd6d5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/qos_container_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/qos_container_manager_linux.go @@ -26,14 +26,12 @@ import ( "k8s.io/apimachinery/pkg/util/wait" - units "github.com/docker/go-units" + "github.com/docker/go-units" cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs" rsystem "github.com/opencontainers/runc/libcontainer/system" - "k8s.io/api/core/v1" - utilfeature "k8s.io/apiserver/pkg/util/feature" + v1 "k8s.io/api/core/v1" "k8s.io/kubernetes/pkg/api/v1/resource" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" - kubefeatures "k8s.io/kubernetes/pkg/features" ) const ( @@ -111,9 +109,7 @@ func (m *qosContainerManagerImpl) Start(getNodeAllocatable func() v1.ResourceLis } // for each enumerated huge page size, the qos tiers are unbounded - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.HugePages) { - m.setHugePagesUnbounded(containerConfig) - } + m.setHugePagesUnbounded(containerConfig) // check if it exists if !cm.Exists(containerName) { @@ -123,11 +119,7 @@ func (m *qosContainerManagerImpl) Start(getNodeAllocatable func() v1.ResourceLis } else { // to ensure we actually have the right state, we update the config on startup if err := cm.Update(containerConfig); err != nil { - if rsystem.RunningInUserNS() { - klog.Errorf("failed to update top level %v QOS cgroup : %v", qosClass, err) - } else { - return fmt.Errorf("failed to update top level %v QOS cgroup : %v", qosClass, err) - } + return fmt.Errorf("failed to update top level %v QOS cgroup : %v", qosClass, err) } } } @@ -297,10 +289,8 @@ func (m *qosContainerManagerImpl) UpdateCgroups() error { } // update the qos level cgroup settings for huge pages (ensure they remain unbounded) - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.HugePages) { - if err := m.setHugePagesConfig(qosConfigs); err != nil { - return err - } + if err := m.setHugePagesConfig(qosConfigs); err != nil { + return err } updateSuccess := true diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/types.go index 2e60d8a8fde..e6011797443 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/types.go @@ -34,7 +34,7 @@ type ResourceConfig struct { // HugePageLimit map from page size (in bytes) to limit (in bytes) HugePageLimit map[int64]int64 // Maximum number of pids - PodPidsLimit *int64 + PidsLimit *int64 } // CgroupName is the abstract name of a cgroup prior to any driver specific conversion. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_linux.go index 6e87f014a13..ceeada7aa9f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_linux.go @@ -23,6 +23,7 @@ import ( libcontainerutils "github.com/opencontainers/runc/libcontainer/utils" ) +// GetPids gets pids of the desired cgroup // Forked from opencontainers/runc/libcontainer/cgroup/fs.Manager.GetPids() func GetPids(cgroupPath string) ([]int, error) { dir, err := getCgroupPath(cgroupPath) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_unsupported.go index 371b597932c..870299d8b4b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/util/cgroups_unsupported.go @@ -18,6 +18,7 @@ limitations under the License. package util +// GetPids gets pids of the desired cgroup func GetPids(cgroupPath string) ([]int, error) { return nil, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/config/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/config/BUILD index 5e89141c02a..815b654b287 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/config/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/config/BUILD @@ -48,7 +48,7 @@ go_library( ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", - "//vendor/github.com/sigma/go-inotify:go_default_library", + "//vendor/github.com/fsnotify/fsnotify:go_default_library", ], "//conditions:default": [], }), diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/config/file_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/config/file_linux.go index 85ed2456900..b7d8712e325 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/config/file_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/config/file_linux.go @@ -26,7 +26,7 @@ import ( "strings" "time" - "github.com/sigma/go-inotify" + "github.com/fsnotify/fsnotify" "k8s.io/klog" "k8s.io/api/core/v1" @@ -77,30 +77,30 @@ func (s *sourceFile) doWatch() error { return &retryableError{"path does not exist, ignoring"} } - w, err := inotify.NewWatcher() + w, err := fsnotify.NewWatcher() if err != nil { return fmt.Errorf("unable to create inotify: %v", err) } defer w.Close() - err = w.AddWatch(s.path, inotify.IN_DELETE_SELF|inotify.IN_CREATE|inotify.IN_MOVED_TO|inotify.IN_MODIFY|inotify.IN_MOVED_FROM|inotify.IN_DELETE|inotify.IN_ATTRIB) + err = w.Add(s.path) if err != nil { return fmt.Errorf("unable to create inotify for path %q: %v", s.path, err) } for { select { - case event := <-w.Event: - if err = s.produceWatchEvent(event); err != nil { + case event := <-w.Events: + if err = s.produceWatchEvent(&event); err != nil { return fmt.Errorf("error while processing inotify event (%+v): %v", event, err) } - case err = <-w.Error: + case err = <-w.Errors: return fmt.Errorf("error while watching %q: %v", s.path, err) } } } -func (s *sourceFile) produceWatchEvent(e *inotify.Event) error { +func (s *sourceFile) produceWatchEvent(e *fsnotify.Event) error { // Ignore file start with dots if strings.HasPrefix(filepath.Base(e.Name), ".") { klog.V(4).Infof("Ignored pod manifest: %s, because it starts with dots", e.Name) @@ -108,23 +108,16 @@ func (s *sourceFile) produceWatchEvent(e *inotify.Event) error { } var eventType podEventType switch { - case (e.Mask & inotify.IN_ISDIR) > 0: - klog.Errorf("Not recursing into manifest path %q", s.path) - return nil - case (e.Mask & inotify.IN_CREATE) > 0: + case (e.Op & fsnotify.Create) > 0: eventType = podAdd - case (e.Mask & inotify.IN_MOVED_TO) > 0: - eventType = podAdd - case (e.Mask & inotify.IN_MODIFY) > 0: + case (e.Op & fsnotify.Write) > 0: eventType = podModify - case (e.Mask & inotify.IN_ATTRIB) > 0: + case (e.Op & fsnotify.Chmod) > 0: eventType = podModify - case (e.Mask & inotify.IN_DELETE) > 0: + case (e.Op & fsnotify.Remove) > 0: eventType = podDelete - case (e.Mask & inotify.IN_MOVED_FROM) > 0: + case (e.Op & fsnotify.Rename) > 0: eventType = podDelete - case (e.Mask & inotify.IN_DELETE_SELF) > 0: - return fmt.Errorf("the watched path is deleted") default: // Ignore rest events return nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD index 3995b79805a..dfb9cdd2591 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD @@ -29,6 +29,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/client-go/tools/reference:go_default_library", "//staging/src/k8s.io/client-go/tools/remotecommand:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go index 109e580365d..1821b9fa54c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go @@ -23,7 +23,7 @@ import ( "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go index 2d9fcd33fd9..cebd987858c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go @@ -88,7 +88,7 @@ type Runtime interface { // TODO: Revisit this method and make it cleaner. GarbageCollect(gcPolicy ContainerGCPolicy, allSourcesReady bool, evictNonDeletedPods bool) error // Syncs the running pod into the desired pod. - SyncPod(pod *v1.Pod, apiPodStatus v1.PodStatus, podStatus *PodStatus, pullSecrets []v1.Secret, backOff *flowcontrol.Backoff) PodSyncResult + SyncPod(pod *v1.Pod, podStatus *PodStatus, pullSecrets []v1.Secret, backOff *flowcontrol.Backoff) PodSyncResult // KillPod kills all the containers of a pod. Pod may be nil, running pod must not be. // TODO(random-liu): Return PodSyncResult in KillPod. // gracePeriodOverride if specified allows the caller to override the pod default grace period. @@ -98,17 +98,6 @@ type Runtime interface { // GetPodStatus retrieves the status of the pod, including the // information of all containers in the pod that are visible in Runtime. GetPodStatus(uid types.UID, name, namespace string) (*PodStatus, error) - // Returns the filesystem path of the pod's network namespace; if the - // runtime does not handle namespace creation itself, or cannot return - // the network namespace path, it should return an error. - // TODO: Change ContainerID to a Pod ID since the namespace is shared - // by all containers in the pod. - GetNetNS(containerID ContainerID) (string, error) - // Returns the container ID that represents the Pod, as passed to network - // plugins. For example, if the runtime uses an infra container, returns - // the infra container's ContainerID. - // TODO: Change ContainerID to a Pod ID, see GetNetNS() - GetPodContainerID(*Pod) (ContainerID, error) // TODO(vmarmol): Unify pod and containerID args. // GetContainerLogs returns logs of a specific container. By // default, it returns a snapshot of the container log. Set 'follow' to true to @@ -137,7 +126,7 @@ type StreamingRuntime interface { type ImageService interface { // PullImage pulls an image from the network to local storage using the supplied // secrets if necessary. It returns a reference (digest or ID) to the pulled image. - PullImage(image ImageSpec, pullSecrets []v1.Secret) (string, error) + PullImage(image ImageSpec, pullSecrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) // GetImageRef gets the reference (digest or ID) of the image which has already been in // the local storage. It returns ("", nil) if the image isn't in the local storage. GetImageRef(image ImageSpec) (string, error) @@ -155,7 +144,7 @@ type ContainerAttacher interface { type ContainerCommandRunner interface { // RunInContainer synchronously executes the command in the container, and returns the output. - // If the command completes with a non-0 exit code, a pkg/util/exec.ExitError will be returned. + // If the command completes with a non-0 exit code, a k8s.io/utils/exec.ExitError will be returned. RunInContainer(id ContainerID, cmd []string, timeout time.Duration) ([]byte, error) } @@ -254,13 +243,6 @@ const ( ContainerStateUnknown ContainerState = "unknown" ) -type ContainerType string - -const ( - ContainerTypeInit ContainerType = "INIT" - ContainerTypeRegular ContainerType = "REGULAR" -) - // Container provides the runtime information for a container, such as ID, hash, // state of the container. type Container struct { @@ -289,7 +271,7 @@ type PodStatus struct { ID types.UID // Name of the pod. Name string - // Namspace of the pod. + // Namespace of the pod. Namespace string // IP of the pod. IP string diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/BUILD index 5915ed02124..608bf6a6b3e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/BUILD @@ -7,6 +7,8 @@ go_library( "doc.go", "docker_checkpoint.go", "docker_container.go", + "docker_container_unsupported.go", + "docker_container_windows.go", "docker_image.go", "docker_image_linux.go", "docker_image_unsupported.go", @@ -68,11 +70,13 @@ go_library( "//vendor/github.com/docker/docker/pkg/jsonmessage:go_default_library", "//vendor/github.com/docker/go-connections/nat:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:windows": [ "//pkg/kubelet/apis:go_default_library", "//pkg/kubelet/winstats:go_default_library", + "//vendor/golang.org/x/sys/windows/registry:go_default_library", ], "//conditions:default": [], }), @@ -84,6 +88,7 @@ go_test( "convert_test.go", "docker_checkpoint_test.go", "docker_container_test.go", + "docker_container_windows_test.go", "docker_image_test.go", "docker_sandbox_test.go", "docker_service_test.go", @@ -118,6 +123,9 @@ go_test( "@io_bazel_rules_go//go/platform:linux": [ "//staging/src/k8s.io/api/core/v1:go_default_library", ], + "@io_bazel_rules_go//go/platform:windows": [ + "//vendor/golang.org/x/sys/windows/registry:go_default_library", + ], "//conditions:default": [], }), ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/cm/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/cm/BUILD index 80736ce2410..3bf72c18c93 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/cm/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/cm/BUILD @@ -36,6 +36,7 @@ go_library( "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ "//pkg/kubelet/dockershim/libdocker:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_checkpoint.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_checkpoint.go index e44f0bd62f2..24769dd69d6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_checkpoint.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_checkpoint.go @@ -47,6 +47,8 @@ type PortMapping struct { ContainerPort *int32 `json:"container_port,omitempty"` // Port number on the host. HostPort *int32 `json:"host_port,omitempty"` + // Host ip to expose. + HostIP string `json:"host_ip,omitempty"` } // CheckpointData contains all types of data that can be stored in the checkpoint. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container.go index 3c6b9b48497..4c87970f4dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container.go @@ -114,8 +114,9 @@ func (ds *dockerService) CreateContainer(_ context.Context, r *runtimeapi.Create if iSpec := config.GetImage(); iSpec != nil { image = iSpec.Image } + containerName := makeContainerName(sandboxConfig, config) createConfig := dockertypes.ContainerCreateConfig{ - Name: makeContainerName(sandboxConfig, config), + Name: containerName, Config: &dockercontainer.Config{ // TODO: set User. Entrypoint: dockerstrslice.StrSlice(config.Command), @@ -136,6 +137,9 @@ func (ds *dockerService) CreateContainer(_ context.Context, r *runtimeapi.Create }, HostConfig: &dockercontainer.HostConfig{ Binds: generateMountBindings(config.GetMounts()), + RestartPolicy: dockercontainer.RestartPolicy{ + Name: "no", + }, }, } @@ -162,15 +166,33 @@ func (ds *dockerService) CreateContainer(_ context.Context, r *runtimeapi.Create hc.SecurityOpt = append(hc.SecurityOpt, securityOpts...) - createResp, err := ds.client.CreateContainer(createConfig) + cleanupInfo, err := ds.applyPlatformSpecificDockerConfig(r, &createConfig) if err != nil { - createResp, err = recoverFromCreationConflictIfNeeded(ds.client, createConfig, err) + return nil, err + } + + createResp, createErr := ds.client.CreateContainer(createConfig) + if createErr != nil { + createResp, createErr = recoverFromCreationConflictIfNeeded(ds.client, createConfig, createErr) } if createResp != nil { - return &runtimeapi.CreateContainerResponse{ContainerId: createResp.ID}, nil + containerID := createResp.ID + + if cleanupInfo != nil { + // we don't perform the clean up just yet at that could destroy information + // needed for the container to start (e.g. Windows credentials stored in + // registry keys); instead, we'll clean up after the container successfully + // starts or gets removed + ds.containerCleanupInfos[containerID] = cleanupInfo + } + return &runtimeapi.CreateContainerResponse{ContainerId: containerID}, nil } - return nil, err + + // the creation failed, let's clean up right away + ds.performPlatformSpecificContainerCleanupAndLogErrors(containerName, cleanupInfo) + + return nil, createErr } // getContainerLogPath returns the container log path specified by kubelet and the real @@ -256,6 +278,8 @@ func (ds *dockerService) StartContainer(_ context.Context, r *runtimeapi.StartCo return nil, fmt.Errorf("failed to start container %q: %v", r.ContainerId, err) } + ds.performPlatformSpecificContainerForContainer(r.ContainerId) + return &runtimeapi.StartContainerResponse{}, nil } @@ -270,6 +294,8 @@ func (ds *dockerService) StopContainer(_ context.Context, r *runtimeapi.StopCont // RemoveContainer removes the container. func (ds *dockerService) RemoveContainer(_ context.Context, r *runtimeapi.RemoveContainerRequest) (*runtimeapi.RemoveContainerResponse, error) { + ds.performPlatformSpecificContainerForContainer(r.ContainerId) + // Ideally, log lifecycle should be independent of container lifecycle. // However, docker will remove container log after container is removed, // we can't prevent that now, so we also clean up the symlink here. @@ -427,3 +453,20 @@ func (ds *dockerService) UpdateContainerResources(_ context.Context, r *runtimea } return &runtimeapi.UpdateContainerResourcesResponse{}, nil } + +func (ds *dockerService) performPlatformSpecificContainerForContainer(containerID string) { + if cleanupInfo, present := ds.containerCleanupInfos[containerID]; present { + ds.performPlatformSpecificContainerCleanupAndLogErrors(containerID, cleanupInfo) + delete(ds.containerCleanupInfos, containerID) + } +} + +func (ds *dockerService) performPlatformSpecificContainerCleanupAndLogErrors(containerNameOrID string, cleanupInfo *containerCleanupInfo) { + if cleanupInfo == nil { + return + } + + for _, err := range ds.performPlatformSpecificContainerCleanup(cleanupInfo) { + klog.Warningf("error when cleaning up after container %q: %v", containerNameOrID, err) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_unsupported.go new file mode 100644 index 00000000000..1e0ce8c71fa --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_unsupported.go @@ -0,0 +1,57 @@ +// +build !windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dockershim + +import ( + dockertypes "github.com/docker/docker/api/types" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" +) + +type containerCleanupInfo struct{} + +// applyPlatformSpecificDockerConfig applies platform-specific configurations to a dockertypes.ContainerCreateConfig struct. +// The containerCleanupInfo struct it returns will be passed as is to performPlatformSpecificContainerCleanup +// after either: +// * the container creation has failed +// * the container has been successfully started +// * the container has been removed +// whichever happens first. +func (ds *dockerService) applyPlatformSpecificDockerConfig(*runtimeapi.CreateContainerRequest, *dockertypes.ContainerCreateConfig) (*containerCleanupInfo, error) { + return nil, nil +} + +// performPlatformSpecificContainerCleanup is responsible for doing any platform-specific cleanup +// after either: +// * the container creation has failed +// * the container has been successfully started +// * the container has been removed +// whichever happens first. +// Any errors it returns are simply logged, but do not prevent the container from being started or +// removed. +func (ds *dockerService) performPlatformSpecificContainerCleanup(cleanupInfo *containerCleanupInfo) (errors []error) { + return +} + +// platformSpecificContainerInitCleanup is called when dockershim +// is starting, and is meant to clean up any cruft left by previous runs +// creating containers. +// Errors are simply logged, but don't prevent dockershim from starting. +func (ds *dockerService) platformSpecificContainerInitCleanup() (errors []error) { + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_windows.go new file mode 100644 index 00000000000..993c3ab9de4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_container_windows.go @@ -0,0 +1,225 @@ +// +build windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dockershim + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "regexp" + + "golang.org/x/sys/windows/registry" + + dockertypes "github.com/docker/docker/api/types" + dockercontainer "github.com/docker/docker/api/types/container" + + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" + "k8s.io/kubernetes/pkg/kubelet/kuberuntime" +) + +type containerCleanupInfo struct { + gMSARegistryValueName string +} + +// applyPlatformSpecificDockerConfig applies platform-specific configurations to a dockertypes.ContainerCreateConfig struct. +// The containerCleanupInfo struct it returns will be passed as is to performPlatformSpecificContainerCleanup +// after either: +// * the container creation has failed +// * the container has been successfully started +// * the container has been removed +// whichever happens first. +func (ds *dockerService) applyPlatformSpecificDockerConfig(request *runtimeapi.CreateContainerRequest, createConfig *dockertypes.ContainerCreateConfig) (*containerCleanupInfo, error) { + cleanupInfo := &containerCleanupInfo{} + + if err := applyGMSAConfig(request.GetConfig(), createConfig, cleanupInfo); err != nil { + return nil, err + } + + return cleanupInfo, nil +} + +// applyGMSAConfig looks at the kuberuntime.GMSASpecContainerAnnotationKey container annotation; if present, +// it copies its contents to a unique registry value, and sets a SecurityOpt on the config pointing to that registry value. +// We use registry values instead of files since their location cannot change - as opposed to credential spec files, +// whose location could potentially change down the line, or even be unknown (eg if docker is not installed on the +// C: drive) +// When docker supports passing a credential spec's contents directly, we should switch to using that +// as it will avoid cluttering the registry - there is a moby PR out for this: +// https://github.com/moby/moby/pull/38777 +func applyGMSAConfig(config *runtimeapi.ContainerConfig, createConfig *dockertypes.ContainerCreateConfig, cleanupInfo *containerCleanupInfo) error { + credSpec := config.Annotations[kuberuntime.GMSASpecContainerAnnotationKey] + if credSpec == "" { + return nil + } + + valueName, err := copyGMSACredSpecToRegistryValue(credSpec) + if err != nil { + return err + } + + if createConfig.HostConfig == nil { + createConfig.HostConfig = &dockercontainer.HostConfig{} + } + + createConfig.HostConfig.SecurityOpt = append(createConfig.HostConfig.SecurityOpt, "credentialspec=registry://"+valueName) + cleanupInfo.gMSARegistryValueName = valueName + + return nil +} + +const ( + // same as https://github.com/moby/moby/blob/93d994e29c9cc8d81f1b0477e28d705fa7e2cd72/daemon/oci_windows.go#L23 + credentialSpecRegistryLocation = `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + // the prefix for the registry values we write GMSA cred specs to + gMSARegistryValueNamePrefix = "k8s-cred-spec-" + // the number of random bytes to generate suffixes for registry value names + gMSARegistryValueNameSuffixRandomBytes = 40 +) + +// registryKey is an interface wrapper around `registry.Key`, +// listing only the methods we care about here. +// It's mainly useful to easily allow mocking the registry in tests. +type registryKey interface { + SetStringValue(name, value string) error + DeleteValue(name string) error + ReadValueNames(n int) ([]string, error) + Close() error +} + +var registryCreateKeyFunc = func(baseKey registry.Key, path string, access uint32) (registryKey, bool, error) { + return registry.CreateKey(baseKey, path, access) +} + +// randomReader is only meant to ever be overridden for testing purposes, +// same idea as for `registryKey` above +var randomReader = rand.Reader + +// gMSARegistryValueNamesRegex is the regex used to detect gMSA cred spec +// registry values in `removeAllGMSARegistryValues` below. +var gMSARegistryValueNamesRegex = regexp.MustCompile(fmt.Sprintf("^%s[0-9a-f]{%d}$", gMSARegistryValueNamePrefix, 2*gMSARegistryValueNameSuffixRandomBytes)) + +// copyGMSACredSpecToRegistryKey copies the credential specs to a unique registry value, and returns its name. +func copyGMSACredSpecToRegistryValue(credSpec string) (string, error) { + valueName, err := gMSARegistryValueName() + if err != nil { + return "", err + } + + // write to the registry + key, _, err := registryCreateKeyFunc(registry.LOCAL_MACHINE, credentialSpecRegistryLocation, registry.SET_VALUE) + if err != nil { + return "", fmt.Errorf("unable to open registry key %q: %v", credentialSpecRegistryLocation, err) + } + defer key.Close() + if err = key.SetStringValue(valueName, credSpec); err != nil { + return "", fmt.Errorf("unable to write into registry value %q/%q: %v", credentialSpecRegistryLocation, valueName, err) + } + + return valueName, nil +} + +// gMSARegistryValueName computes the name of the registry value where to store the GMSA cred spec contents. +// The value's name is a purely random suffix appended to `gMSARegistryValueNamePrefix`. +func gMSARegistryValueName() (string, error) { + randomSuffix, err := randomString(gMSARegistryValueNameSuffixRandomBytes) + + if err != nil { + return "", fmt.Errorf("error when generating gMSA registry value name: %v", err) + } + + return gMSARegistryValueNamePrefix + randomSuffix, nil +} + +// randomString returns a random hex string. +func randomString(length int) (string, error) { + randBytes := make([]byte, length) + + if n, err := randomReader.Read(randBytes); err != nil || n != length { + if err == nil { + err = fmt.Errorf("only got %v random bytes, expected %v", n, length) + } + return "", fmt.Errorf("unable to generate random string: %v", err) + } + + return hex.EncodeToString(randBytes), nil +} + +// performPlatformSpecificContainerCleanup is responsible for doing any platform-specific cleanup +// after either: +// * the container creation has failed +// * the container has been successfully started +// * the container has been removed +// whichever happens first. +// Any errors it returns are simply logged, but do not prevent the container from being started or +// removed. +func (ds *dockerService) performPlatformSpecificContainerCleanup(cleanupInfo *containerCleanupInfo) (errors []error) { + if err := removeGMSARegistryValue(cleanupInfo); err != nil { + errors = append(errors, err) + } + + return +} + +func removeGMSARegistryValue(cleanupInfo *containerCleanupInfo) error { + if cleanupInfo == nil || cleanupInfo.gMSARegistryValueName == "" { + return nil + } + + key, _, err := registryCreateKeyFunc(registry.LOCAL_MACHINE, credentialSpecRegistryLocation, registry.SET_VALUE) + if err != nil { + return fmt.Errorf("unable to open registry key %q: %v", credentialSpecRegistryLocation, err) + } + defer key.Close() + if err = key.DeleteValue(cleanupInfo.gMSARegistryValueName); err != nil { + return fmt.Errorf("unable to remove registry value %q/%q: %v", credentialSpecRegistryLocation, cleanupInfo.gMSARegistryValueName, err) + } + + return nil +} + +// platformSpecificContainerInitCleanup is called when dockershim +// is starting, and is meant to clean up any cruft left by previous runs +// creating containers. +// Errors are simply logged, but don't prevent dockershim from starting. +func (ds *dockerService) platformSpecificContainerInitCleanup() (errors []error) { + return removeAllGMSARegistryValues() +} + +func removeAllGMSARegistryValues() (errors []error) { + key, _, err := registryCreateKeyFunc(registry.LOCAL_MACHINE, credentialSpecRegistryLocation, registry.SET_VALUE) + if err != nil { + return []error{fmt.Errorf("unable to open registry key %q: %v", credentialSpecRegistryLocation, err)} + } + defer key.Close() + + valueNames, err := key.ReadValueNames(0) + if err != nil { + return []error{fmt.Errorf("unable to list values under registry key %q: %v", credentialSpecRegistryLocation, err)} + } + + for _, valueName := range valueNames { + if gMSARegistryValueNamesRegex.MatchString(valueName) { + if err = key.DeleteValue(valueName); err != nil { + errors = append(errors, fmt.Errorf("unable to remove registry value %q/%q: %v", credentialSpecRegistryLocation, valueName, err)) + } + } + } + + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image.go index c1089a037a3..b28472f19c3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image.go @@ -120,24 +120,32 @@ func (ds *dockerService) RemoveImage(_ context.Context, r *runtimeapi.RemoveImag // TODO: We assume image.Image is image ID here, which is true in the current implementation // of kubelet, but we should still clarify this in CRI. imageInspect, err := ds.client.InspectImageByID(image.Image) - if err == nil && imageInspect != nil && len(imageInspect.RepoTags) > 1 { - for _, tag := range imageInspect.RepoTags { - if _, err := ds.client.RemoveImage(tag, dockertypes.ImageRemoveOptions{PruneChildren: true}); err != nil && !libdocker.IsImageNotFoundError(err) { - return nil, err - } - } - return &runtimeapi.RemoveImageResponse{}, nil - } + // dockerclient.InspectImageByID doesn't work with digest and repoTags, // it is safe to continue removing it since there is another check below. if err != nil && !libdocker.IsImageNotFoundError(err) { return nil, err } - _, err = ds.client.RemoveImage(image.Image, dockertypes.ImageRemoveOptions{PruneChildren: true}) - if err != nil && !libdocker.IsImageNotFoundError(err) { - return nil, err + if imageInspect == nil { + // image is nil, assuming it doesn't exist. + return &runtimeapi.RemoveImageResponse{}, nil } + + // An image can have different numbers of RepoTags and RepoDigests. + // Iterating over both of them plus the image ID ensures the image really got removed. + // It also prevents images from being deleted, which actually are deletable using this approach. + var images []string + images = append(images, imageInspect.RepoTags...) + images = append(images, imageInspect.RepoDigests...) + images = append(images, image.Image) + + for _, image := range images { + if _, err := ds.client.RemoveImage(image, dockertypes.ImageRemoveOptions{PruneChildren: true}); err != nil && !libdocker.IsImageNotFoundError(err) { + return nil, err + } + } + return &runtimeapi.RemoveImageResponse{}, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_sandbox.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_sandbox.go index ec18905cdf1..c0c5484656a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_sandbox.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_sandbox.go @@ -597,7 +597,9 @@ func (ds *dockerService) makeSandboxDockerConfig(c *runtimeapi.PodSandboxConfig, // TODO(random-liu): Deprecate this label once container metrics is directly got from CRI. labels[types.KubernetesContainerNameLabel] = sandboxContainerName - hc := &dockercontainer.HostConfig{} + hc := &dockercontainer.HostConfig{ + IpcMode: dockercontainer.IpcMode("shareable"), + } createConfig := &dockertypes.ContainerCreateConfig{ Name: makeSandboxName(c), Config: &dockercontainer.Config{ @@ -674,6 +676,7 @@ func constructPodSandboxCheckpoint(config *runtimeapi.PodSandboxConfig) checkpoi HostPort: &pm.HostPort, ContainerPort: &pm.ContainerPort, Protocol: &proto, + HostIP: pm.HostIp, }) } if config.GetLinux().GetSecurityContext().GetNamespaceOptions().GetNetwork() == runtimeapi.NamespaceMode_NODE { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go index 97f6543c4bb..1a9534ba225 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go @@ -155,7 +155,7 @@ type dockerNetworkHost struct { *portMappingGetter } -var internalLabelKeys []string = []string{containerTypeLabelKey, containerLogPathLabelKey, sandboxIDLabelKey} +var internalLabelKeys = []string{containerTypeLabelKey, containerLogPathLabelKey, sandboxIDLabelKey} // ClientConfig is parameters used to initialize docker client type ClientConfig struct { @@ -186,6 +186,7 @@ func NewDockerClientFromConfig(config *ClientConfig) libdocker.Interface { return nil } +// NewDockerService creates a new `DockerService` struct. // NOTE: Anything passed to DockerService should be eventually handled in another way when we switch to running the shim as a different process. func NewDockerService(config *ClientConfig, podSandboxImage string, streamingConfig *streaming.Config, pluginSettings *NetworkPluginSettings, cgroupsName string, kubeCgroupDriver string, dockershimRootDir string, startLocalStreamingServer bool) (DockerService, error) { @@ -211,6 +212,7 @@ func NewDockerService(config *ClientConfig, podSandboxImage string, streamingCon checkpointManager: checkpointManager, startLocalStreamingServer: startLocalStreamingServer, networkReady: make(map[string]bool), + containerCleanupInfos: make(map[string]*containerCleanupInfo), } // check docker version compatibility. @@ -305,6 +307,12 @@ type dockerService struct { // startLocalStreamingServer indicates whether dockershim should start a // streaming server on localhost. startLocalStreamingServer bool + + // containerCleanupInfos maps container IDs to the `containerCleanupInfo` structs + // needed to clean up after containers have been started or removed. + // (see `applyPlatformSpecificDockerConfig` and `performPlatformSpecificContainerCleanup` + // methods for more info). + containerCleanupInfos map[string]*containerCleanupInfo } // TODO: handle context. @@ -387,6 +395,7 @@ func (ds *dockerService) GetPodPortMappings(podSandboxID string) ([]*hostport.Po HostPort: *pm.HostPort, ContainerPort: *pm.ContainerPort, Protocol: proto, + HostIP: pm.HostIP, }) } return portMappings, nil @@ -394,6 +403,8 @@ func (ds *dockerService) GetPodPortMappings(podSandboxID string) ([]*hostport.Po // Start initializes and starts components in dockerService. func (ds *dockerService) Start() error { + ds.initCleanup() + // Initialize the legacy cleanup flag. if ds.startLocalStreamingServer { go func() { @@ -405,6 +416,16 @@ func (ds *dockerService) Start() error { return ds.containerManager.Start() } +// initCleanup is responsible for cleaning up any crufts left by previous +// runs. If there are any errros, it simply logs them. +func (ds *dockerService) initCleanup() { + errors := ds.platformSpecificContainerInitCleanup() + + for _, err := range errors { + klog.Warningf("initialization error: %v", err) + } +} + // Status returns the status of the runtime. func (ds *dockerService) Status(_ context.Context, r *runtimeapi.StatusRequest) (*runtimeapi.StatusResponse, error) { runtimeReady := &runtimeapi.RuntimeCondition{ diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_streaming.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_streaming.go index 1c4dc813b08..bc767d063ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_streaming.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_streaming.go @@ -107,7 +107,7 @@ func (ds *dockerService) ExecSync(_ context.Context, req *runtimeapi.ExecSyncReq // Exec prepares a streaming endpoint to execute a command in the container, and returns the address. func (ds *dockerService) Exec(_ context.Context, req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) { if ds.streamingServer == nil { - return nil, streaming.ErrorStreamingDisabled("exec") + return nil, streaming.NewErrorStreamingDisabled("exec") } _, err := checkContainerStatus(ds.client, req.ContainerId) if err != nil { @@ -119,7 +119,7 @@ func (ds *dockerService) Exec(_ context.Context, req *runtimeapi.ExecRequest) (* // Attach prepares a streaming endpoint to attach to a running container, and returns the address. func (ds *dockerService) Attach(_ context.Context, req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) { if ds.streamingServer == nil { - return nil, streaming.ErrorStreamingDisabled("attach") + return nil, streaming.NewErrorStreamingDisabled("attach") } _, err := checkContainerStatus(ds.client, req.ContainerId) if err != nil { @@ -131,7 +131,7 @@ func (ds *dockerService) Attach(_ context.Context, req *runtimeapi.AttachRequest // PortForward prepares a streaming endpoint to forward ports from a PodSandbox, and returns the address. func (ds *dockerService) PortForward(_ context.Context, req *runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) { if ds.streamingServer == nil { - return nil, streaming.ErrorStreamingDisabled("port forward") + return nil, streaming.NewErrorStreamingDisabled("port forward") } _, err := checkContainerStatus(ds.client, req.PodSandboxId) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/client.go index d43da1bd22e..db0b6a80001 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/client.go @@ -28,8 +28,8 @@ import ( const ( // https://docs.docker.com/engine/reference/api/docker_remote_api/ - // docker version should be at least 1.11.x - MinimumDockerAPIVersion = "1.23.0" + // docker version should be at least 1.13.1 + MinimumDockerAPIVersion = "1.26.0" // Status of a container returned by ListContainers. StatusRunningPrefix = "Up" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go index 54dafcaf767..3f58211380b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go @@ -37,14 +37,14 @@ import ( "k8s.io/apimachinery/pkg/util/clock" ) -type calledDetail struct { +type CalledDetail struct { name string arguments []interface{} } // NewCalledDetail create a new call detail item. -func NewCalledDetail(name string, arguments []interface{}) calledDetail { - return calledDetail{name: name, arguments: arguments} +func NewCalledDetail(name string, arguments []interface{}) CalledDetail { + return CalledDetail{name: name, arguments: arguments} } // FakeDockerClient is a simple fake docker client, so that kubelet can be run for testing without requiring a real docker setup. @@ -58,7 +58,7 @@ type FakeDockerClient struct { Images []dockertypes.ImageSummary ImageIDsNeedingAuth map[string]dockertypes.AuthConfig Errors map[string]error - called []calledDetail + called []CalledDetail pulled []string EnableTrace bool RandGenerator *rand.Rand @@ -81,7 +81,7 @@ type FakeDockerClient struct { const ( // Notice that if someday we also have minimum docker version requirement, this should also be updated. - fakeDockerVersion = "1.11.2" + fakeDockerVersion = "1.13.1" fakeImageSize = 1024 @@ -132,7 +132,7 @@ func (f *FakeDockerClient) WithRandSource(source rand.Source) *FakeDockerClient return f } -func (f *FakeDockerClient) appendCalled(callDetail calledDetail) { +func (f *FakeDockerClient) appendCalled(callDetail CalledDetail) { if f.EnableTrace { f.called = append(f.called, callDetail) } @@ -183,7 +183,7 @@ func (f *FakeDockerClient) ClearErrors() { func (f *FakeDockerClient) ClearCalls() { f.Lock() defer f.Unlock() - f.called = []calledDetail{} + f.called = []CalledDetail{} f.pulled = []string{} f.Created = []string{} f.Started = []string{} @@ -286,7 +286,7 @@ func (f *FakeDockerClient) AssertCalls(calls []string) (err error) { return } -func (f *FakeDockerClient) AssertCallDetails(calls ...calledDetail) (err error) { +func (f *FakeDockerClient) AssertCallDetails(calls ...CalledDetail) (err error) { f.Lock() defer f.Unlock() @@ -390,7 +390,7 @@ func (f *FakeDockerClient) popError(op string) error { func (f *FakeDockerClient) ListContainers(options dockertypes.ContainerListOptions) ([]dockertypes.Container, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "list"}) + f.appendCalled(CalledDetail{name: "list"}) err := f.popError("list") containerList := append([]dockertypes.Container{}, f.RunningContainerList...) if options.All { @@ -470,7 +470,7 @@ func toDockerContainerStatus(state string) string { func (f *FakeDockerClient) InspectContainer(id string) (*dockertypes.ContainerJSON, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "inspect_container"}) + f.appendCalled(CalledDetail{name: "inspect_container"}) err := f.popError("inspect_container") if container, ok := f.ContainerMap[id]; ok { return container, err @@ -487,7 +487,7 @@ func (f *FakeDockerClient) InspectContainer(id string) (*dockertypes.ContainerJS func (f *FakeDockerClient) InspectContainerWithSize(id string) (*dockertypes.ContainerJSON, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "inspect_container_withsize"}) + f.appendCalled(CalledDetail{name: "inspect_container_withsize"}) err := f.popError("inspect_container_withsize") if container, ok := f.ContainerMap[id]; ok { return container, err @@ -504,7 +504,7 @@ func (f *FakeDockerClient) InspectContainerWithSize(id string) (*dockertypes.Con func (f *FakeDockerClient) InspectImageByRef(name string) (*dockertypes.ImageInspect, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "inspect_image"}) + f.appendCalled(CalledDetail{name: "inspect_image"}) if err := f.popError("inspect_image"); err != nil { return nil, err } @@ -519,7 +519,7 @@ func (f *FakeDockerClient) InspectImageByRef(name string) (*dockertypes.ImageIns func (f *FakeDockerClient) InspectImageByID(name string) (*dockertypes.ImageInspect, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "inspect_image"}) + f.appendCalled(CalledDetail{name: "inspect_image"}) if err := f.popError("inspect_image"); err != nil { return nil, err } @@ -555,7 +555,7 @@ func GetFakeContainerID(name string) string { func (f *FakeDockerClient) CreateContainer(c dockertypes.ContainerCreateConfig) (*dockercontainer.ContainerCreateCreatedBody, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "create"}) + f.appendCalled(CalledDetail{name: "create"}) if err := f.popError("create"); err != nil { return nil, err } @@ -581,7 +581,7 @@ func (f *FakeDockerClient) CreateContainer(c dockertypes.ContainerCreateConfig) func (f *FakeDockerClient) StartContainer(id string) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "start"}) + f.appendCalled(CalledDetail{name: "start"}) if err := f.popError("start"); err != nil { return err } @@ -619,7 +619,7 @@ func (f *FakeDockerClient) StartContainer(id string) error { func (f *FakeDockerClient) StopContainer(id string, timeout time.Duration) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "stop"}) + f.appendCalled(CalledDetail{name: "stop"}) if err := f.popError("stop"); err != nil { return err } @@ -657,7 +657,7 @@ func (f *FakeDockerClient) StopContainer(id string, timeout time.Duration) error func (f *FakeDockerClient) RemoveContainer(id string, opts dockertypes.ContainerRemoveOptions) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "remove"}) + f.appendCalled(CalledDetail{name: "remove"}) err := f.popError("remove") if err != nil { return err @@ -693,7 +693,7 @@ func (f *FakeDockerClient) UpdateContainerResources(id string, updateConfig dock func (f *FakeDockerClient) Logs(id string, opts dockertypes.ContainerLogsOptions, sopts StreamOptions) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "logs"}) + f.appendCalled(CalledDetail{name: "logs"}) return f.popError("logs") } @@ -710,7 +710,7 @@ func (f *FakeDockerClient) isAuthorizedForImage(image string, auth dockertypes.A func (f *FakeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "pull"}) + f.appendCalled(CalledDetail{name: "pull"}) err := f.popError("pull") if err == nil { if !f.isAuthorizedForImage(image, auth) { @@ -742,21 +742,21 @@ func (f *FakeDockerClient) CreateExec(id string, opts dockertypes.ExecConfig) (* f.Lock() defer f.Unlock() f.execCmd = opts.Cmd - f.appendCalled(calledDetail{name: "create_exec"}) + f.appendCalled(CalledDetail{name: "create_exec"}) return &dockertypes.IDResponse{ID: "12345678"}, nil } func (f *FakeDockerClient) StartExec(startExec string, opts dockertypes.ExecStartCheck, sopts StreamOptions) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "start_exec"}) + f.appendCalled(CalledDetail{name: "start_exec"}) return nil } func (f *FakeDockerClient) AttachToContainer(id string, opts dockertypes.ContainerAttachOptions, sopts StreamOptions) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "attach"}) + f.appendCalled(CalledDetail{name: "attach"}) return nil } @@ -767,7 +767,7 @@ func (f *FakeDockerClient) InspectExec(id string) (*dockertypes.ContainerExecIns func (f *FakeDockerClient) ListImages(opts dockertypes.ImageListOptions) ([]dockertypes.ImageSummary, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "list_images"}) + f.appendCalled(CalledDetail{name: "list_images"}) err := f.popError("list_images") return f.Images, err } @@ -775,7 +775,7 @@ func (f *FakeDockerClient) ListImages(opts dockertypes.ImageListOptions) ([]dock func (f *FakeDockerClient) RemoveImage(image string, opts dockertypes.ImageRemoveOptions) ([]dockertypes.ImageDeleteResponseItem, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "remove_image", arguments: []interface{}{image, opts}}) + f.appendCalled(CalledDetail{name: "remove_image", arguments: []interface{}{image, opts}}) err := f.popError("remove_image") if err == nil { for i := range f.Images { @@ -833,14 +833,14 @@ func (f *FakeDockerClient) updateContainerStatus(id, status string) { func (f *FakeDockerClient) ResizeExecTTY(id string, height, width uint) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "resize_exec"}) + f.appendCalled(CalledDetail{name: "resize_exec"}) return nil } func (f *FakeDockerClient) ResizeContainerTTY(id string, height, width uint) error { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "resize_container"}) + f.appendCalled(CalledDetail{name: "resize_container"}) return nil } @@ -884,7 +884,7 @@ func dockerTimestampToString(t time.Time) string { func (f *FakeDockerClient) ImageHistory(id string) ([]dockerimagetypes.HistoryResponseItem, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "image_history"}) + f.appendCalled(CalledDetail{name: "image_history"}) history := f.ImageHistoryMap[id] return history, nil } @@ -916,6 +916,6 @@ func (f *FakeDockerPuller) GetImageRef(image string) (string, error) { func (f *FakeDockerClient) GetContainerStats(id string) (*dockertypes.StatsJSON, error) { f.Lock() defer f.Unlock() - f.appendCalled(calledDetail{name: "getContainerStats"}) + f.appendCalled(CalledDetail{name: "getContainerStats"}) return nil, fmt.Errorf("not implemented") } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/instrumented_client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/instrumented_client.go index 78a0d696481..29c0f9e6b86 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/instrumented_client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/instrumented_client.go @@ -42,7 +42,9 @@ func NewInstrumentedInterface(dockerClient Interface) Interface { // recordOperation records the duration of the operation. func recordOperation(operation string, start time.Time) { metrics.DockerOperations.WithLabelValues(operation).Inc() - metrics.DockerOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) + metrics.DeprecatedDockerOperations.WithLabelValues(operation).Inc() + metrics.DockerOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedDockerOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) } // recordError records error for metric if an error occurred. @@ -50,9 +52,11 @@ func recordError(operation string, err error) { if err != nil { if _, ok := err.(operationTimeout); ok { metrics.DockerOperationsTimeout.WithLabelValues(operation).Inc() + metrics.DeprecatedDockerOperationsTimeout.WithLabelValues(operation).Inc() } // Docker operation timeout error is also a docker error, so we don't add else here. metrics.DockerOperationsErrors.WithLabelValues(operation).Inc() + metrics.DeprecatedDockerOperationsErrors.WithLabelValues(operation).Inc() } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/metrics/metrics.go index 907647970d5..fb6433daa8b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/metrics/metrics.go @@ -25,13 +25,22 @@ import ( const ( // DockerOperationsKey is the key for docker operation metrics. - DockerOperationsKey = "docker_operations" + DockerOperationsKey = "docker_operations_total" // DockerOperationsLatencyKey is the key for the operation latency metrics. - DockerOperationsLatencyKey = "docker_operations_latency_microseconds" + DockerOperationsLatencyKey = "docker_operations_duration_seconds" // DockerOperationsErrorsKey is the key for the operation error metrics. - DockerOperationsErrorsKey = "docker_operations_errors" + DockerOperationsErrorsKey = "docker_operations_errors_total" // DockerOperationsTimeoutKey is the key for the operation timeout metrics. - DockerOperationsTimeoutKey = "docker_operations_timeout" + DockerOperationsTimeoutKey = "docker_operations_timeout_total" + + // DeprecatedDockerOperationsKey is the deprecated key for docker operation metrics. + DeprecatedDockerOperationsKey = "docker_operations" + // DeprecatedDockerOperationsLatencyKey is the deprecated key for the operation latency metrics. + DeprecatedDockerOperationsLatencyKey = "docker_operations_latency_microseconds" + // DeprecatedDockerOperationsErrorsKey is the deprecated key for the operation error metrics. + DeprecatedDockerOperationsErrorsKey = "docker_operations_errors" + // DeprecatedDockerOperationsTimeoutKey is the deprecated key for the operation timeout metrics. + DeprecatedDockerOperationsTimeoutKey = "docker_operations_timeout" // Keep the "kubelet" subsystem for backward compatibility. kubeletSubsystem = "kubelet" @@ -40,11 +49,12 @@ const ( var ( // DockerOperationsLatency collects operation latency numbers by operation // type. - DockerOperationsLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + DockerOperationsLatency = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: kubeletSubsystem, Name: DockerOperationsLatencyKey, - Help: "Latency in microseconds of Docker operations. Broken down by operation type.", + Help: "Latency in seconds of Docker operations. Broken down by operation type.", + Buckets: prometheus.DefBuckets, }, []string{"operation_type"}, ) @@ -76,6 +86,45 @@ var ( }, []string{"operation_type"}, ) + + // DeprecatedDockerOperationsLatency collects operation latency numbers by operation + // type. + DeprecatedDockerOperationsLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: kubeletSubsystem, + Name: DeprecatedDockerOperationsLatencyKey, + Help: "(Deprecated) Latency in microseconds of Docker operations. Broken down by operation type.", + }, + []string{"operation_type"}, + ) + // DeprecatedDockerOperations collects operation counts by operation type. + DeprecatedDockerOperations = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: kubeletSubsystem, + Name: DeprecatedDockerOperationsKey, + Help: "(Deprecated) Cumulative number of Docker operations by operation type.", + }, + []string{"operation_type"}, + ) + // DeprecatedDockerOperationsErrors collects operation errors by operation + // type. + DeprecatedDockerOperationsErrors = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: kubeletSubsystem, + Name: DeprecatedDockerOperationsErrorsKey, + Help: "(Deprecated) Cumulative number of Docker operation errors by operation type.", + }, + []string{"operation_type"}, + ) + // DeprecatedDockerOperationsTimeout collects operation timeouts by operation type. + DeprecatedDockerOperationsTimeout = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: kubeletSubsystem, + Name: DeprecatedDockerOperationsTimeoutKey, + Help: "(Deprecated) Cumulative number of Docker operation timeout by operation type.", + }, + []string{"operation_type"}, + ) ) var registerMetrics sync.Once @@ -87,6 +136,10 @@ func Register() { prometheus.MustRegister(DockerOperations) prometheus.MustRegister(DockerOperationsErrors) prometheus.MustRegister(DockerOperationsTimeout) + prometheus.MustRegister(DeprecatedDockerOperationsLatency) + prometheus.MustRegister(DeprecatedDockerOperations) + prometheus.MustRegister(DeprecatedDockerOperationsErrors) + prometheus.MustRegister(DeprecatedDockerOperationsTimeout) }) } @@ -94,3 +147,8 @@ func Register() { func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } + +// SinceInSeconds gets the time since the specified start in seconds. +func SinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/OWNERS index 73c2c95f9a3..358b5e2b627 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - thockin - dchen1107 @@ -6,4 +8,5 @@ approvers: - dcbw reviewers: - sig-network-reviewers - +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/BUILD index 8691c7344f2..8813215ff86 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/dockershim/network:go_default_library", "//pkg/util/bandwidth:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/github.com/containernetworking/cni/libcni:go_default_library", "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/cni.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/cni.go index 77546a0974c..af5bb74defe 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/cni.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni/cni.go @@ -24,9 +24,11 @@ import ( "sort" "strings" "sync" + "time" "github.com/containernetworking/cni/libcni" cnitypes "github.com/containernetworking/cni/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" @@ -38,6 +40,10 @@ import ( const ( CNIPluginName = "cni" + + // defaultSyncConfigPeriod is the default period to sync CNI config + // TODO: consider making this value configurable or to be a more appropriate value. + defaultSyncConfigPeriod = time.Second * 5 ) type cniNetworkPlugin struct { @@ -194,6 +200,10 @@ func (plugin *cniNetworkPlugin) Init(host network.Host, hairpinMode kubeletconfi plugin.host = host plugin.syncNetworkConfig() + + // start a goroutine to sync network config from confDir periodically to detect network config updates in every 5 seconds + go wait.Forever(plugin.syncNetworkConfig, defaultSyncConfigPeriod) + return nil } @@ -264,9 +274,6 @@ func (plugin *cniNetworkPlugin) Name() string { } func (plugin *cniNetworkPlugin) Status() error { - // sync network config from confDir periodically to detect network config updates - plugin.syncNetworkConfig() - // Can't set up pods if we don't have any CNI network configs yet return plugin.checkInitialized() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/BUILD index cceadb121ae..86afb9b03cd 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/BUILD @@ -19,12 +19,12 @@ go_library( "//pkg/proxy/iptables:go_default_library", "//pkg/util/conntrack:go_default_library", "//pkg/util/iptables:go_default_library", - "//pkg/util/net:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/hostport_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/hostport_manager.go index ce5108fd318..f210ab5da20 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/hostport_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport/hostport_manager.go @@ -31,8 +31,8 @@ import ( iptablesproxy "k8s.io/kubernetes/pkg/proxy/iptables" "k8s.io/kubernetes/pkg/util/conntrack" utiliptables "k8s.io/kubernetes/pkg/util/iptables" - utilnet "k8s.io/kubernetes/pkg/util/net" "k8s.io/utils/exec" + utilnet "k8s.io/utils/net" ) // HostPortManager is an interface for adding and removing hostport for a given pod sandbox. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/metrics/metrics.go index 9e4ff185517..3e2247ba144 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/metrics/metrics.go @@ -27,7 +27,9 @@ const ( // NetworkPluginOperationsKey is the key for operation count metrics. NetworkPluginOperationsKey = "network_plugin_operations" // NetworkPluginOperationsLatencyKey is the key for the operation latency metrics. - NetworkPluginOperationsLatencyKey = "network_plugin_operations_latency_microseconds" + NetworkPluginOperationsLatencyKey = "network_plugin_operations_duration_seconds" + // DeprecatedNetworkPluginOperationsLatencyKey is the deprecated key for the operation latency metrics. + DeprecatedNetworkPluginOperationsLatencyKey = "network_plugin_operations_latency_microseconds" // Keep the "kubelet" subsystem for backward compatibility. kubeletSubsystem = "kubelet" @@ -36,11 +38,23 @@ const ( var ( // NetworkPluginOperationsLatency collects operation latency numbers by operation // type. - NetworkPluginOperationsLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + NetworkPluginOperationsLatency = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: kubeletSubsystem, Name: NetworkPluginOperationsLatencyKey, - Help: "Latency in microseconds of network plugin operations. Broken down by operation type.", + Help: "Latency in seconds of network plugin operations. Broken down by operation type.", + Buckets: prometheus.DefBuckets, + }, + []string{"operation_type"}, + ) + + // DeprecatedNetworkPluginOperationsLatency collects operation latency numbers by operation + // type. + DeprecatedNetworkPluginOperationsLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: kubeletSubsystem, + Name: DeprecatedNetworkPluginOperationsLatencyKey, + Help: "(Deprecated) Latency in microseconds of network plugin operations. Broken down by operation type.", }, []string{"operation_type"}, ) @@ -52,6 +66,7 @@ var registerMetrics sync.Once func Register() { registerMetrics.Do(func() { prometheus.MustRegister(NetworkPluginOperationsLatency) + prometheus.MustRegister(DeprecatedNetworkPluginOperationsLatency) }) } @@ -59,3 +74,8 @@ func Register() { func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } + +// SinceInSeconds gets the time since the specified start in seconds. +func SinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/plugins.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/plugins.go index c67c1a355b6..bc1173b3ff2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/network/plugins.go @@ -351,7 +351,8 @@ func (pm *PluginManager) podUnlock(fullPodName string) { // recordOperation records operation and duration func recordOperation(operation string, start time.Time) { - metrics.NetworkPluginOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) + metrics.NetworkPluginOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedNetworkPluginOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) } func (pm *PluginManager) GetPodNetworkStatus(podNamespace, podName string, id kubecontainer.ContainerID) (*PodNetworkStatus, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/errors.go b/vendor/k8s.io/kubernetes/pkg/kubelet/errors.go index eae36e5ee59..ec3f5db79a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/errors.go @@ -16,6 +16,12 @@ limitations under the License. package kubelet +import "errors" + const ( NetworkNotReadyErrorMsg = "network is not ready" ) + +var ( + ErrNetworkUnknown = errors.New("network state unknown") +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/events/event.go b/vendor/k8s.io/kubernetes/pkg/kubelet/events/event.go index f6f468ee7dd..b948edbda18 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/events/event.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/events/event.go @@ -82,7 +82,8 @@ const ( FreeDiskSpaceFailed = "FreeDiskSpaceFailed" // Probe event reason list - ContainerUnhealthy = "Unhealthy" + ContainerUnhealthy = "Unhealthy" + ContainerProbeWarning = "ProbeWarning" // Pod worker event reason list FailedSync = "FailedSync" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD index 65968751a8d..cf6b99ae6cc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD @@ -11,7 +11,6 @@ go_test( srcs = [ "eviction_manager_test.go", "helpers_test.go", - "main_test.go", "memory_threshold_notifier_test.go", "mock_threshold_notifier_test.go", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/OWNERS index a63babacba3..44027eec1b6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - derekwaynecarr - vishh diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/api/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/api/types.go index d32ba9b30f0..cab5b4fbb3c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/api/types.go @@ -34,7 +34,7 @@ const ( SignalNodeFsInodesFree Signal = "nodefs.inodesFree" // SignalImageFsAvailable is amount of storage available on filesystem that container runtime uses for storing images and container writable layers. SignalImageFsAvailable Signal = "imagefs.available" - // SignalImageFsInodesFree is amount of inodes available on filesystem that container runtime uses for storing images and container writeable layers. + // SignalImageFsInodesFree is amount of inodes available on filesystem that container runtime uses for storing images and container writable layers. SignalImageFsInodesFree Signal = "imagefs.inodesFree" // SignalAllocatableMemoryAvailable is amount of memory available for pod allocation (i.e. allocatable - workingSet (of pods), in bytes. SignalAllocatableMemoryAvailable Signal = "allocatableMemory.available" @@ -63,6 +63,7 @@ var OpForSignal = map[Signal]ThresholdOperator{ SignalNodeFsInodesFree: OpLessThan, SignalImageFsAvailable: OpLessThan, SignalImageFsInodesFree: OpLessThan, + SignalPIDAvailable: OpLessThan, } // ThresholdValue is a value holder that abstracts literal versus percentage based quantity diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go index a16ab7306bb..a1ab99869ab 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go @@ -161,7 +161,7 @@ func (m *managerImpl) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAd return lifecycle.PodAdmitResult{ Admit: false, Reason: Reason, - Message: fmt.Sprintf(nodeLowMessageFmt, m.nodeConditions), + Message: fmt.Sprintf(nodeConditionMessageFmt, m.nodeConditions), } } @@ -365,7 +365,8 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act for _, t := range thresholds { timeObserved := observations[t.Signal].time if !timeObserved.IsZero() { - metrics.EvictionStatsAge.WithLabelValues(string(t.Signal)).Observe(metrics.SinceInMicroseconds(timeObserved.Time)) + metrics.EvictionStatsAge.WithLabelValues(string(t.Signal)).Observe(metrics.SinceInSeconds(timeObserved.Time)) + metrics.DeprecatedEvictionStatsAge.WithLabelValues(string(t.Signal)).Observe(metrics.SinceInMicroseconds(timeObserved.Time)) } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/helpers.go index ef34b97a0ba..e7c2ddcb19a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/helpers.go @@ -40,6 +40,8 @@ const ( Reason = "Evicted" // nodeLowMessageFmt is the message for evictions due to resource pressure. nodeLowMessageFmt = "The node was low on resource: %v. " + // nodeConditionMessageFmt is the message for evictions due to resource pressure. + nodeConditionMessageFmt = "The node had condition: %v. " // containerMessageFmt provides additional information for containers exceeding requests containerMessageFmt = "Container %s was using %s, which exceeds its request of %s. " // containerEphemeralStorageMessageFmt provides additional information for containers which have exceeded their ES limit @@ -50,6 +52,8 @@ const ( emptyDirMessageFmt = "Usage of EmptyDir volume %q exceeds the limit %q. " // inodes, number. internal to this module, used to account for local disk inode consumption. resourceInodes v1.ResourceName = "inodes" + // resourcePids, number. internal to this module, used to account for local pid consumption. + resourcePids v1.ResourceName = "pids" // OffendingContainersKey is the key in eviction event annotations for the list of container names which exceeded their requests OffendingContainersKey = "offending_containers" // OffendingContainersUsageKey is the key in eviction event annotations for the list of usage of containers which exceeded their requests @@ -84,6 +88,7 @@ func init() { signalToResource[evictionapi.SignalImageFsInodesFree] = resourceInodes signalToResource[evictionapi.SignalNodeFsAvailable] = v1.ResourceEphemeralStorage signalToResource[evictionapi.SignalNodeFsInodesFree] = resourceInodes + signalToResource[evictionapi.SignalPIDAvailable] = resourcePids } // validSignal returns true if the signal is supported. @@ -390,16 +395,6 @@ func podDiskUsage(podStats statsapi.PodStats, pod *v1.Pod, statsToMeasure []fsSt }, nil } -// podMemoryUsage aggregates pod memory usage. -func podMemoryUsage(podStats statsapi.PodStats) (v1.ResourceList, error) { - memory := resource.Quantity{Format: resource.BinarySI} - for _, container := range podStats.Containers { - // memory usage (if known) - memory.Add(*memoryUsage(container.Memory)) - } - return v1.ResourceList{v1.ResourceMemory: memory}, nil -} - // localEphemeralVolumeNames returns the set of ephemeral volumes for the pod that are local func localEphemeralVolumeNames(pod *v1.Pod) []string { result := []string{} @@ -544,15 +539,8 @@ func exceedMemoryRequests(stats statsFunc) cmpFunc { return cmpBool(!p1Found, !p2Found) } - p1Usage, p1Err := podMemoryUsage(p1Stats) - p2Usage, p2Err := podMemoryUsage(p2Stats) - if p1Err != nil || p2Err != nil { - // prioritize evicting the pod which had an error getting stats - return cmpBool(p1Err != nil, p2Err != nil) - } - - p1Memory := p1Usage[v1.ResourceMemory] - p2Memory := p2Usage[v1.ResourceMemory] + p1Memory := memoryUsage(p1Stats.Memory) + p2Memory := memoryUsage(p2Stats.Memory) p1ExceedsRequests := p1Memory.Cmp(podRequest(p1, v1.ResourceMemory)) == 1 p2ExceedsRequests := p2Memory.Cmp(podRequest(p2, v1.ResourceMemory)) == 1 // prioritize evicting the pod which exceeds its requests @@ -570,24 +558,17 @@ func memory(stats statsFunc) cmpFunc { return cmpBool(!p1Found, !p2Found) } - p1Usage, p1Err := podMemoryUsage(p1Stats) - p2Usage, p2Err := podMemoryUsage(p2Stats) - if p1Err != nil || p2Err != nil { - // prioritize evicting the pod which had an error getting stats - return cmpBool(p1Err != nil, p2Err != nil) - } - // adjust p1, p2 usage relative to the request (if any) - p1Memory := p1Usage[v1.ResourceMemory] + p1Memory := memoryUsage(p1Stats.Memory) p1Request := podRequest(p1, v1.ResourceMemory) p1Memory.Sub(p1Request) - p2Memory := p2Usage[v1.ResourceMemory] + p2Memory := memoryUsage(p2Stats.Memory) p2Request := podRequest(p2, v1.ResourceMemory) p2Memory.Sub(p2Request) // prioritize evicting the pod which has the larger consumption of memory - return p2Memory.Cmp(p1Memory) + return p2Memory.Cmp(*p1Memory) } } @@ -698,6 +679,11 @@ func rankMemoryPressure(pods []*v1.Pod, stats statsFunc) { orderedBy(exceedMemoryRequests(stats), priority, memory(stats)).Sort(pods) } +// rankPIDPressure orders the input pods by priority in response to PID pressure. +func rankPIDPressure(pods []*v1.Pod, stats statsFunc) { + orderedBy(priority).Sort(pods) +} + // rankDiskPressureFunc returns a rankFunc that measures the specified fs stats. func rankDiskPressureFunc(fsStatsToMeasure []fsStatsType, diskResource v1.ResourceName) rankFunc { return func(pods []*v1.Pod, stats statsFunc) { @@ -1011,6 +997,7 @@ func buildSignalToRankFunc(withImageFs bool) map[evictionapi.Signal]rankFunc { signalToRankFunc := map[evictionapi.Signal]rankFunc{ evictionapi.SignalMemoryAvailable: rankMemoryPressure, evictionapi.SignalAllocatableMemoryAvailable: rankMemoryPressure, + evictionapi.SignalPIDAvailable: rankPIDPressure, } // usage of an imagefs is optional if withImageFs { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/images/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/images/BUILD index cbb23f945e1..c35e141f703 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/images/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/images/BUILD @@ -18,6 +18,7 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/kubelet/images", deps = [ + "//pkg/kubelet/apis/cri/runtime/v1alpha2:go_default_library", "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/images/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/images/helpers.go index 231ba730ddf..a537acb449a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/images/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/images/helpers.go @@ -21,6 +21,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/client-go/util/flowcontrol" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" ) @@ -42,9 +43,9 @@ type throttledImageService struct { limiter flowcontrol.RateLimiter } -func (ts throttledImageService) PullImage(image kubecontainer.ImageSpec, secrets []v1.Secret) (string, error) { +func (ts throttledImageService) PullImage(image kubecontainer.ImageSpec, secrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) { if ts.limiter.TryAccept() { - return ts.ImageService.PullImage(image, secrets) + return ts.ImageService.PullImage(image, secrets, podSandboxConfig) } return "", fmt.Errorf("pull QPS exceeded") } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_manager.go index 36b36a9e991..dc2f24c6154 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_manager.go @@ -20,10 +20,12 @@ import ( "fmt" dockerref "github.com/docker/distribution/reference" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog" + + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/util/parsers" @@ -84,7 +86,7 @@ func (m *imageManager) logIt(ref *v1.ObjectReference, eventtype, event, prefix, // EnsureImageExists pulls the image for the specified pod and container, and returns // (imageRef, error message, error). -func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, pullSecrets []v1.Secret) (string, string, error) { +func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, pullSecrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, string, error) { logPrefix := fmt.Sprintf("%s/%s", pod.Name, container.Image) ref, err := kubecontainer.GenerateContainerRef(pod, container) if err != nil { @@ -125,9 +127,9 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p m.logIt(ref, v1.EventTypeNormal, events.BackOffPullImage, logPrefix, msg, klog.Info) return "", msg, ErrImagePullBackOff } - m.logIt(ref, v1.EventTypeNormal, events.PullingImage, logPrefix, fmt.Sprintf("pulling image %q", container.Image), klog.Info) + m.logIt(ref, v1.EventTypeNormal, events.PullingImage, logPrefix, fmt.Sprintf("Pulling image %q", container.Image), klog.Info) pullChan := make(chan pullResult) - m.puller.pullImage(spec, pullSecrets, pullChan) + m.puller.pullImage(spec, pullSecrets, pullChan, podSandboxConfig) imagePullResult := <-pullChan if imagePullResult.err != nil { m.logIt(ref, v1.EventTypeWarning, events.FailedToPullImage, logPrefix, fmt.Sprintf("Failed to pull image %q: %v", container.Image, imagePullResult.err), klog.Warning) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/images/puller.go b/vendor/k8s.io/kubernetes/pkg/kubelet/images/puller.go index ce6b7e881ed..6b46f1a38a7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/images/puller.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/images/puller.go @@ -21,6 +21,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/wait" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" ) @@ -30,7 +31,7 @@ type pullResult struct { } type imagePuller interface { - pullImage(kubecontainer.ImageSpec, []v1.Secret, chan<- pullResult) + pullImage(kubecontainer.ImageSpec, []v1.Secret, chan<- pullResult, *runtimeapi.PodSandboxConfig) } var _, _ imagePuller = ¶llelImagePuller{}, &serialImagePuller{} @@ -43,9 +44,9 @@ func newParallelImagePuller(imageService kubecontainer.ImageService) imagePuller return ¶llelImagePuller{imageService} } -func (pip *parallelImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult) { +func (pip *parallelImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult, podSandboxConfig *runtimeapi.PodSandboxConfig) { go func() { - imageRef, err := pip.imageService.PullImage(spec, pullSecrets) + imageRef, err := pip.imageService.PullImage(spec, pullSecrets, podSandboxConfig) pullChan <- pullResult{ imageRef: imageRef, err: err, @@ -68,22 +69,24 @@ func newSerialImagePuller(imageService kubecontainer.ImageService) imagePuller { } type imagePullRequest struct { - spec kubecontainer.ImageSpec - pullSecrets []v1.Secret - pullChan chan<- pullResult + spec kubecontainer.ImageSpec + pullSecrets []v1.Secret + pullChan chan<- pullResult + podSandboxConfig *runtimeapi.PodSandboxConfig } -func (sip *serialImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult) { +func (sip *serialImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult, podSandboxConfig *runtimeapi.PodSandboxConfig) { sip.pullRequests <- &imagePullRequest{ - spec: spec, - pullSecrets: pullSecrets, - pullChan: pullChan, + spec: spec, + pullSecrets: pullSecrets, + pullChan: pullChan, + podSandboxConfig: podSandboxConfig, } } func (sip *serialImagePuller) processImagePullRequests() { for pullRequest := range sip.pullRequests { - imageRef, err := sip.imageService.PullImage(pullRequest.spec, pullRequest.pullSecrets) + imageRef, err := sip.imageService.PullImage(pullRequest.spec, pullRequest.pullSecrets, pullRequest.podSandboxConfig) pullRequest.pullChan <- pullResult{ imageRef: imageRef, err: err, diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/images/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/images/types.go index 897655c66f1..fe81d00f7c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/images/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/images/types.go @@ -20,6 +20,7 @@ import ( "errors" "k8s.io/api/core/v1" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) var ( @@ -49,7 +50,7 @@ var ( // Implementations are expected to be thread safe. type ImageManager interface { // EnsureImageExists ensures that image specified in `container` exists. - EnsureImageExists(pod *v1.Pod, container *v1.Container, pullSecrets []v1.Secret) (string, string, error) + EnsureImageExists(pod *v1.Pod, container *v1.Container, pullSecrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, string, error) // TODO(ronl): consolidating image managing and deleting operation in this interface } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go index b02cd553262..2d9b810a3cb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go @@ -33,7 +33,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" rsystem "github.com/opencontainers/runc/libcontainer/system" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -43,7 +43,6 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/client-go/dynamic" clientset "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" corelisters "k8s.io/client-go/listers/core/v1" @@ -51,8 +50,7 @@ import ( "k8s.io/client-go/tools/record" "k8s.io/client-go/util/certificate" "k8s.io/client-go/util/flowcontrol" - "k8s.io/client-go/util/integer" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" + cloudprovider "k8s.io/cloud-provider" "k8s.io/klog" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/features" @@ -78,12 +76,14 @@ import ( "k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/metrics/collectors" "k8s.io/kubernetes/pkg/kubelet/network/dns" + "k8s.io/kubernetes/pkg/kubelet/nodelease" "k8s.io/kubernetes/pkg/kubelet/pleg" kubepod "k8s.io/kubernetes/pkg/kubelet/pod" "k8s.io/kubernetes/pkg/kubelet/preemption" "k8s.io/kubernetes/pkg/kubelet/prober" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" "k8s.io/kubernetes/pkg/kubelet/remote" + "k8s.io/kubernetes/pkg/kubelet/runtimeclass" "k8s.io/kubernetes/pkg/kubelet/secret" "k8s.io/kubernetes/pkg/kubelet/server" serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats" @@ -109,7 +109,9 @@ import ( "k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/csi" + "k8s.io/kubernetes/pkg/volume/util/subpath" utilexec "k8s.io/utils/exec" + "k8s.io/utils/integer" ) const ( @@ -240,13 +242,12 @@ type Dependencies struct { HeartbeatClient clientset.Interface OnHeartbeatFailure func() KubeClient clientset.Interface - CSIClient csiclientset.Interface - DynamicKubeClient dynamic.Interface Mounter mount.Interface OOMAdjuster *oom.OOMAdjuster OSInterface kubecontainer.OSInterface PodConfig *config.PodConfig Recorder record.EventRecorder + Subpather subpath.Interface VolumePlugins []volume.VolumePlugin DynamicPluginProber volume.DynamicPluginProber TLSOptions *server.TLSOptions @@ -326,6 +327,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, hostnameOverride string, nodeIP string, providerID string, + cloudProvider string, certDirectory string, rootDirectory string, registerNode bool, @@ -468,7 +470,6 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, hostnameOverridden: len(hostnameOverride) > 0, nodeName: nodeName, kubeClient: kubeDeps.KubeClient, - csiClient: kubeDeps.CSIClient, heartbeatClient: kubeDeps.HeartbeatClient, onRepeatedHeartbeatFailure: kubeDeps.OnHeartbeatFailure, rootDirectory: rootDirectory, @@ -484,6 +485,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, streamingConnectionIdleTimeout: kubeCfg.StreamingConnectionIdleTimeout.Duration, recorder: kubeDeps.Recorder, cadvisor: kubeDeps.CAdvisorInterface, + externalCloudProvider: cloudprovider.IsExternal(cloudProvider), providerID: providerID, nodeRef: nodeRef, nodeLabels: nodeLabels, @@ -494,6 +496,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, cgroupsPerQOS: kubeCfg.CgroupsPerQOS, cgroupRoot: kubeCfg.CgroupRoot, mounter: kubeDeps.Mounter, + subpather: kubeDeps.Subpather, maxPods: int(kubeCfg.MaxPods), podsPerCore: int(kubeCfg.PodsPerCore), syncLoopMonitor: atomic.Value{}, @@ -561,6 +564,8 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, // podManager is also responsible for keeping secretManager and configMapManager contents up-to-date. klet.podManager = kubepod.NewBasicPodManager(kubepod.NewBasicMirrorClient(klet.kubeClient), secretManager, configMapManager, checkpointManager) + klet.statusManager = status.NewManager(klet.kubeClient, klet.podManager, klet) + if remoteRuntimeEndpoint != "" { // remoteImageEndpoint is same as remoteRuntimeEndpoint if not explicitly specified if remoteImageEndpoint == "" { @@ -580,10 +585,6 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.resourceAnalyzer = serverstats.NewResourceAnalyzer(klet, kubeCfg.VolumeStatsAggPeriod.Duration) - if containerRuntime == "rkt" { - klog.Fatalln("rktnetes has been deprecated in favor of rktlet. Please see https://github.com/kubernetes-incubator/rktlet for more information.") - } - // if left at nil, that means it is unneeded var legacyLogProvider kuberuntime.LegacyLogProvider @@ -631,6 +632,10 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, } klet.runtimeService = runtimeService + if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) { + klet.runtimeClassManager = runtimeclass.NewManager(kubeDeps.KubeClient) + } + runtime, err := kuberuntime.NewKubeGenericRuntimeManager( kubecontainer.FilterEventRecorder(kubeDeps.Recorder), klet.livenessManager, @@ -651,6 +656,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, imageService, kubeDeps.ContainerManager.InternalContainerLifecycle(), legacyLogProvider, + klet.runtimeClassManager, ) if err != nil { return nil, err @@ -671,7 +677,8 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.resourceAnalyzer, klet.podManager, klet.runtimeCache, - klet.containerRuntime) + klet.containerRuntime, + klet.statusManager) } else { klet.StatsProvider = stats.NewCRIStatsProvider( klet.cadvisor, @@ -680,7 +687,8 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.runtimeCache, runtimeService, imageService, - stats.NewLogMetricsService()) + stats.NewLogMetricsService(), + kubecontainer.RealOS{}) } klet.pleg = pleg.NewGenericPLEG(klet.containerRuntime, plegChannelCapacity, plegRelistPeriod, klet.podCache, clock.RealClock{}) @@ -720,8 +728,6 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.containerLogManager = logs.NewStubContainerLogManager() } - klet.statusManager = status.NewManager(klet.kubeClient, klet.podManager, klet) - if kubeCfg.ServerTLSBootstrap && kubeDeps.TLSOptions != nil && utilfeature.DefaultFeatureGate.Enabled(features.RotateKubeletServerCertificate) { klet.serverCertificateManager, err = kubeletcertificate.NewKubeletServerCertificateManager(klet.kubeClient, kubeCfg, klet.nodeName, klet.getLastObservedNodeAddresses, certDirectory) if err != nil { @@ -745,10 +751,9 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, tokenManager := token.NewManager(kubeDeps.KubeClient) - if !utilfeature.DefaultFeatureGate.Enabled(features.MountPropagation) { - return nil, fmt.Errorf("mount propagation feature gate has been deprecated and will be removed in 1.14") - } - + // NewInitializedVolumePluginMgr intializes some storageErrors on the Kubelet runtimeState (in csi_plugin.go init) + // which affects node ready status. This function must be called before Kubelet is initialized so that the Node + // ReadyState is accurate with the storage state. klet.volumePluginMgr, err = NewInitializedVolumePluginMgr(klet, secretManager, configMapManager, tokenManager, kubeDeps.VolumePlugins, kubeDeps.DynamicPluginProber) if err != nil { @@ -834,6 +839,11 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.appArmorValidator = apparmor.NewValidator(containerRuntime) klet.softAdmitHandlers.AddPodAdmitHandler(lifecycle.NewAppArmorAdmitHandler(klet.appArmorValidator)) klet.softAdmitHandlers.AddPodAdmitHandler(lifecycle.NewNoNewPrivsAdmitHandler(klet.containerRuntime)) + + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + klet.nodeLeaseController = nodelease.NewController(klet.clock, klet.heartbeatClient, string(klet.nodeName), kubeCfg.NodeLeaseDurationSeconds, klet.onRepeatedHeartbeatFailure) + } + klet.softAdmitHandlers.AddPodAdmitHandler(lifecycle.NewProcMountAdmitHandler(klet.containerRuntime)) // Finally, put the most recent version of the config on the Kubelet, so @@ -863,7 +873,6 @@ type Kubelet struct { nodeName types.NodeName runtimeCache kubecontainer.RuntimeCache kubeClient clientset.Interface - csiClient csiclientset.Interface heartbeatClient clientset.Interface iptClient utilipt.Interface rootDirectory string @@ -972,6 +981,8 @@ type Kubelet struct { // scheduled on this node and makes it so. volumeManager volumemanager.VolumeManager + // Indicates that the node initialization happens in an external cloud controller + externalCloudProvider bool // Reference to this node. nodeRef *v1.ObjectReference @@ -1018,17 +1029,20 @@ type Kubelet struct { lastStatusReportTime time.Time // syncNodeStatusMux is a lock on updating the node status, because this path is not thread-safe. - // This lock is used by Kublet.syncNodeStatus function and shouldn't be used anywhere else. + // This lock is used by Kubelet.syncNodeStatus function and shouldn't be used anywhere else. syncNodeStatusMux sync.Mutex // updatePodCIDRMux is a lock on updating pod CIDR, because this path is not thread-safe. - // This lock is used by Kublet.syncNodeStatus function and shouldn't be used anywhere else. + // This lock is used by Kubelet.syncNodeStatus function and shouldn't be used anywhere else. updatePodCIDRMux sync.Mutex // updateRuntimeMux is a lock on updating runtime, because this path is not thread-safe. - // This lock is used by Kublet.updateRuntimeUp function and shouldn't be used anywhere else. + // This lock is used by Kubelet.updateRuntimeUp function and shouldn't be used anywhere else. updateRuntimeMux sync.Mutex + // nodeLeaseController claims and renews the node lease for this Kubelet + nodeLeaseController nodelease.Controller + // Generates pod events. pleg pleg.PodLifecycleEventGenerator @@ -1053,6 +1067,9 @@ type Kubelet struct { // Mounter to use for volumes. mounter mount.Interface + // subpather to execute subpath actions + subpather subpath.Interface + // Manager of non-Runtime containers. containerManager cm.ContainerManager @@ -1167,6 +1184,9 @@ type Kubelet struct { // This flag indicates that kubelet should start plugin watcher utility server for discovering Kubelet plugins enablePluginsWatcher bool + + // Handles RuntimeClass objects for the Kubelet. + runtimeClassManager *runtimeclass.Manager } // setupDataDirs creates: @@ -1251,6 +1271,7 @@ func (kl *Kubelet) initializeModules() error { collectors.NewVolumeStatsCollector(kl), collectors.NewLogMetricsCollector(kl.StatsProvider.ListPodStats), ) + metrics.SetNodeName(kl.nodeName) // Setup filesystem directories. if err := kl.setupDataDirs(); err != nil { @@ -1346,6 +1367,11 @@ func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) { // Start syncing node status immediately, this may set up things the runtime needs to run. go wait.Until(kl.syncNodeStatus, kl.nodeStatusUpdateFrequency, wait.NeverStop) go kl.fastStatusUpdateOnce() + + // start syncing lease + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + go kl.nodeLeaseController.Run(wait.NeverStop) + } } go wait.Until(kl.updateRuntimeUp, 5*time.Second, wait.NeverStop) @@ -1362,6 +1388,11 @@ func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) { kl.statusManager.Start() kl.probeManager.Start() + // Start syncing RuntimeClasses if enabled. + if kl.runtimeClassManager != nil { + kl.runtimeClassManager.Start(wait.NeverStop) + } + // Start the pod lifecycle event generator. kl.pleg.Start() kl.syncLoop(updates, kl) @@ -1432,7 +1463,8 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { if !firstSeenTime.IsZero() { // This is the first time we are syncing the pod. Record the latency // since kubelet first saw the pod if firstSeenTime is set. - metrics.PodWorkerStartLatency.Observe(metrics.SinceInMicroseconds(firstSeenTime)) + metrics.PodWorkerStartDuration.Observe(metrics.SinceInSeconds(firstSeenTime)) + metrics.DeprecatedPodWorkerStartLatency.Observe(metrics.SinceInMicroseconds(firstSeenTime)) } else { klog.V(3).Infof("First seen time not recorded for pod %q", pod.UID) } @@ -1449,7 +1481,8 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { existingStatus, ok := kl.statusManager.GetPodStatus(pod.UID) if !ok || existingStatus.Phase == v1.PodPending && apiPodStatus.Phase == v1.PodRunning && !firstSeenTime.IsZero() { - metrics.PodStartLatency.Observe(metrics.SinceInMicroseconds(firstSeenTime)) + metrics.PodStartDuration.Observe(metrics.SinceInSeconds(firstSeenTime)) + metrics.DeprecatedPodStartLatency.Observe(metrics.SinceInMicroseconds(firstSeenTime)) } runnable := kl.canRunPod(pod) @@ -1492,9 +1525,9 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { } // If the network plugin is not ready, only start the pod if it uses the host network - if rs := kl.runtimeState.networkErrors(); len(rs) != 0 && !kubecontainer.IsHostNetworkPod(pod) { - kl.recorder.Eventf(pod, v1.EventTypeWarning, events.NetworkNotReady, "%s: %v", NetworkNotReadyErrorMsg, rs) - return fmt.Errorf("%s: %v", NetworkNotReadyErrorMsg, rs) + if err := kl.runtimeState.networkErrors(); err != nil && !kubecontainer.IsHostNetworkPod(pod) { + kl.recorder.Eventf(pod, v1.EventTypeWarning, events.NetworkNotReady, "%s: %v", NetworkNotReadyErrorMsg, err) + return fmt.Errorf("%s: %v", NetworkNotReadyErrorMsg, err) } // Create Cgroups for the pod and apply resource parameters @@ -1598,7 +1631,7 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { pullSecrets := kl.getPullSecretsForPod(pod) // Call the container runtime's SyncPod callback - result := kl.containerRuntime.SyncPod(pod, apiPodStatus, podStatus, pullSecrets, kl.backOff) + result := kl.containerRuntime.SyncPod(pod, podStatus, pullSecrets, kl.backOff) kl.reasonCache.Update(pod.UID, result) if err := result.Error(); err != nil { // Do not return error if the only failures were pods in backoff @@ -1754,8 +1787,8 @@ func (kl *Kubelet) syncLoop(updates <-chan kubetypes.PodUpdate, handler SyncHand ) duration := base for { - if rs := kl.runtimeState.runtimeErrors(); len(rs) != 0 { - klog.Infof("skipping pod synchronization - %v", rs) + if err := kl.runtimeState.runtimeErrors(); err != nil { + klog.Infof("skipping pod synchronization - %v", err) // exponential backoff time.Sleep(duration) duration = time.Duration(math.Min(float64(max), factor*float64(duration))) @@ -1933,7 +1966,8 @@ func (kl *Kubelet) dispatchWork(pod *v1.Pod, syncType kubetypes.SyncPodType, mir UpdateType: syncType, OnCompleteFunc: func(err error) { if err != nil { - metrics.PodWorkerLatency.WithLabelValues(syncType.String()).Observe(metrics.SinceInMicroseconds(start)) + metrics.PodWorkerDuration.WithLabelValues(syncType.String()).Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedPodWorkerLatency.WithLabelValues(syncType.String()).Observe(metrics.SinceInMicroseconds(start)) } }, }) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_getters.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_getters.go index 3d840b970a6..7dba3c18149 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_getters.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_getters.go @@ -25,14 +25,14 @@ import ( cadvisorapiv1 "github.com/google/cadvisor/info/v1" "k8s.io/klog" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - utilfile "k8s.io/kubernetes/pkg/util/file" + "k8s.io/kubernetes/pkg/util/mount" utilnode "k8s.io/kubernetes/pkg/util/node" - volumeutil "k8s.io/kubernetes/pkg/volume/util" + utilpath "k8s.io/utils/path" ) // getRootDir returns the full path to the directory under which kubelet can @@ -273,7 +273,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err volumes := []string{} podVolDir := kl.getPodVolumesDir(podUID) - if pathExists, pathErr := volumeutil.PathExists(podVolDir); pathErr != nil { + if pathExists, pathErr := mount.PathExists(podVolDir); pathErr != nil { return volumes, fmt.Errorf("Error checking if path %q exists: %v", podVolDir, pathErr) } else if !pathExists { klog.Warningf("Path %q does not exist", podVolDir) @@ -288,7 +288,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err for _, volumePluginDir := range volumePluginDirs { volumePluginName := volumePluginDir.Name() volumePluginPath := filepath.Join(podVolDir, volumePluginName) - volumeDirs, err := utilfile.ReadDirNoStat(volumePluginPath) + volumeDirs, err := utilpath.ReadDirNoStat(volumePluginPath) if err != nil { return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err) } @@ -322,7 +322,7 @@ func (kl *Kubelet) getMountedVolumePathListFromDisk(podUID types.UID) ([]string, func (kl *Kubelet) podVolumeSubpathsDirExists(podUID types.UID) (bool, error) { podVolDir := kl.getPodVolumeSubpathsDir(podUID) - if pathExists, pathErr := volumeutil.PathExists(podVolDir); pathErr != nil { + if pathExists, pathErr := mount.PathExists(podVolDir); pathErr != nil { return true, fmt.Errorf("Error checking if path %q exists: %v", podVolDir, pathErr) } else if !pathExists { return false, nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go index 5ba1592d353..6c5b81105f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go @@ -144,10 +144,12 @@ func (kl *Kubelet) reconcileExtendedResource(initialNode, node *v1.Node) bool { // updateDefaultLabels will set the default labels on the node func (kl *Kubelet) updateDefaultLabels(initialNode, existingNode *v1.Node) bool { defaultLabels := []string{ - kubeletapis.LabelHostname, - kubeletapis.LabelZoneFailureDomain, - kubeletapis.LabelZoneRegion, - kubeletapis.LabelInstanceType, + v1.LabelHostname, + v1.LabelZoneFailureDomain, + v1.LabelZoneRegion, + v1.LabelInstanceType, + v1.LabelOSStable, + v1.LabelArchStable, kubeletapis.LabelOS, kubeletapis.LabelArch, } @@ -212,9 +214,11 @@ func (kl *Kubelet) initialNode() (*v1.Node, error) { ObjectMeta: metav1.ObjectMeta{ Name: string(kl.nodeName), Labels: map[string]string{ - kubeletapis.LabelHostname: kl.hostname, - kubeletapis.LabelOS: goruntime.GOOS, - kubeletapis.LabelArch: goruntime.GOARCH, + v1.LabelHostname: kl.hostname, + v1.LabelOSStable: goruntime.GOOS, + v1.LabelArchStable: goruntime.GOARCH, + kubeletapis.LabelOS: goruntime.GOOS, + kubeletapis.LabelArch: goruntime.GOARCH, }, }, Spec: v1.NodeSpec{ @@ -246,6 +250,15 @@ func (kl *Kubelet) initialNode() (*v1.Node, error) { } } + if kl.externalCloudProvider { + taint := v1.Taint{ + Key: schedulerapi.TaintExternalCloudProvider, + Value: "true", + Effect: v1.TaintEffectNoSchedule, + } + + nodeTaints = append(nodeTaints, taint) + } if len(nodeTaints) > 0 { node.Spec.Taints = nodeTaints } @@ -355,11 +368,12 @@ func (kl *Kubelet) tryUpdateNodeStatus(tryNumber int) error { return fmt.Errorf("nil %q node object", kl.nodeName) } + podCIDRChanged := false if node.Spec.PodCIDR != "" { // Pod CIDR could have been updated before, so we cannot rely on // node.Spec.PodCIDR being non-empty. We also need to know if pod CIDR is // actually changed. - if _, err = kl.updatePodCIDR(node.Spec.PodCIDR); err != nil { + if podCIDRChanged, err = kl.updatePodCIDR(node.Spec.PodCIDR); err != nil { klog.Errorf(err.Error()) } } @@ -367,6 +381,28 @@ func (kl *Kubelet) tryUpdateNodeStatus(tryNumber int) error { kl.setNodeStatus(node) now := kl.clock.Now() + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) && now.Before(kl.lastStatusReportTime.Add(kl.nodeStatusReportFrequency)) { + if !podCIDRChanged && !nodeStatusHasChanged(&originalNode.Status, &node.Status) { + // We must mark the volumes as ReportedInUse in volume manager's dsw even + // if no changes were made to the node status (no volumes were added or removed + // from the VolumesInUse list). + // + // The reason is that on a kubelet restart, the volume manager's dsw is + // repopulated and the volume ReportedInUse is initialized to false, while the + // VolumesInUse list from the Node object still contains the state from the + // previous kubelet instantiation. + // + // Once the volumes are added to the dsw, the ReportedInUse field needs to be + // synced from the VolumesInUse list in the Node.Status. + // + // The MarkVolumesAsReportedInUse() call cannot be performed in dsw directly + // because it does not have access to the Node object. + // This also cannot be populated on node status manager init because the volume + // may not have been added to dsw at that time. + kl.volumeManager.MarkVolumesAsReportedInUse(node.Status.VolumesInUse) + return nil + } + } // Patch the current status on the API server updatedNode, _, err := nodeutil.PatchNodeStatus(kl.heartbeatClient.CoreV1(), types.NodeName(kl.nodeName), originalNode, node) @@ -438,13 +474,14 @@ func (kl *Kubelet) getLastObservedNodeAddresses() []v1.NodeAddress { // setNodeStatus funcs func (kl *Kubelet) defaultNodeStatusFuncs() []func(*v1.Node) error { // if cloud is not nil, we expect the cloud resource sync manager to exist + var nodeAddressesFunc func() ([]v1.NodeAddress, error) var validateHostFunc func() error if kl.appArmorValidator != nil { validateHostFunc = kl.appArmorValidator.ValidateHost } var setters []func(n *v1.Node) error setters = append(setters, - nodestatus.NodeAddress(kl.nodeIP, kl.nodeIPValidator, kl.hostname), + nodestatus.NodeAddress(kl.nodeIP, kl.nodeIPValidator, kl.hostname, kl.hostnameOverridden, kl.externalCloudProvider, nodeAddressesFunc), nodestatus.MachineInfo(string(kl.nodeName), kl.maxPods, kl.podsPerCore, kl.GetCachedMachineInfo, kl.containerManager.GetCapacity, kl.containerManager.GetDevicePluginResourceCapacity, kl.containerManager.GetNodeAllocatableReservation, kl.recordEvent), nodestatus.VersionInfo(kl.cadvisor.VersionInfo, kl.containerRuntime.Type, kl.containerRuntime.Version), @@ -459,7 +496,7 @@ func (kl *Kubelet) defaultNodeStatusFuncs() []func(*v1.Node) error { nodestatus.MemoryPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderMemoryPressure, kl.recordNodeStatusEvent), nodestatus.DiskPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderDiskPressure, kl.recordNodeStatusEvent), nodestatus.PIDPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderPIDPressure, kl.recordNodeStatusEvent), - nodestatus.ReadyCondition(kl.clock.Now, kl.runtimeState.runtimeErrors, kl.runtimeState.networkErrors, validateHostFunc, kl.containerManager.Status, kl.recordNodeStatusEvent), + nodestatus.ReadyCondition(kl.clock.Now, kl.runtimeState.runtimeErrors, kl.runtimeState.networkErrors, kl.runtimeState.storageErrors, validateHostFunc, kl.containerManager.Status, kl.recordNodeStatusEvent), nodestatus.VolumesInUse(kl.volumeManager.ReconcilerStatesHasBeenSynced, kl.volumeManager.GetVolumesInUse), nodestatus.RemoveOutOfDiskCondition(), // TODO(mtaufen): I decided not to move this setter for now, since all it does is send an event diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go index 357c142766a..efc4274b845 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go @@ -32,7 +32,7 @@ import ( "strings" "sync" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -61,6 +61,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/util/format" mountutil "k8s.io/kubernetes/pkg/util/mount" volumeutil "k8s.io/kubernetes/pkg/volume/util" + "k8s.io/kubernetes/pkg/volume/util/subpath" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" volumevalidation "k8s.io/kubernetes/pkg/volume/validation" "k8s.io/kubernetes/third_party/forked/golang/expansion" @@ -127,7 +128,7 @@ func (kl *Kubelet) makeBlockVolumes(pod *v1.Pod, container *v1.Container, podVol } // makeMounts determines the mount points for the given container. -func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, hostDomain, podIP string, podVolumes kubecontainer.VolumeMap, mounter mountutil.Interface, expandEnvs []kubecontainer.EnvVar) ([]kubecontainer.Mount, func(), error) { +func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, hostDomain, podIP string, podVolumes kubecontainer.VolumeMap, mounter mountutil.Interface, subpather subpath.Interface, expandEnvs []kubecontainer.EnvVar) ([]kubecontainer.Mount, func(), error) { // Kubernetes only mounts on /etc/hosts if: // - container is not an infrastructure (pause) container // - container is not already mounting on /etc/hosts @@ -159,22 +160,32 @@ func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, h if err != nil { return nil, cleanupAction, err } - if mount.SubPath != "" { + + subPath := mount.SubPath + if mount.SubPathExpr != "" { if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeSubpath) { return nil, cleanupAction, fmt.Errorf("volume subpaths are disabled") } - if filepath.IsAbs(mount.SubPath) { - return nil, cleanupAction, fmt.Errorf("error SubPath `%s` must not be an absolute path", mount.SubPath) + return nil, cleanupAction, fmt.Errorf("volume subpath expansion is disabled") + } + + if subPath != "" { + if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeSubpath) { + return nil, cleanupAction, fmt.Errorf("volume subpaths are disabled") } - err = volumevalidation.ValidatePathNoBacksteps(mount.SubPath) + if filepath.IsAbs(subPath) { + return nil, cleanupAction, fmt.Errorf("error SubPath `%s` must not be an absolute path", subPath) + } + + err = volumevalidation.ValidatePathNoBacksteps(subPath) if err != nil { - return nil, cleanupAction, fmt.Errorf("unable to provision SubPath `%s`: %v", mount.SubPath, err) + return nil, cleanupAction, fmt.Errorf("unable to provision SubPath `%s`: %v", subPath, err) } volumePath := hostPath - hostPath = filepath.Join(volumePath, mount.SubPath) + hostPath = filepath.Join(volumePath, subPath) if subPathExists, err := mounter.ExistsPath(hostPath); err != nil { klog.Errorf("Could not determine if subPath %s exists; will not attempt to change its permissions", hostPath) @@ -188,13 +199,13 @@ func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, h if err != nil { return nil, cleanupAction, err } - if err := mounter.SafeMakeDir(mount.SubPath, volumePath, perm); err != nil { + if err := subpather.SafeMakeDir(subPath, volumePath, perm); err != nil { // Don't pass detailed error back to the user because it could give information about host filesystem klog.Errorf("failed to create subPath directory for volumeMount %q of container %q: %v", mount.Name, container.Name, err) return nil, cleanupAction, fmt.Errorf("failed to create subPath directory for volumeMount %q of container %q", mount.Name, container.Name) } } - hostPath, cleanupAction, err = mounter.PrepareSafeSubpath(mountutil.Subpath{ + hostPath, cleanupAction, err = subpather.PrepareSafeSubpath(subpath.Subpath{ VolumeMountIndex: i, Path: hostPath, VolumeName: vol.InnerVolumeSpecName, @@ -379,7 +390,6 @@ func truncatePodHostnameIfNeeded(podName, hostname string) (string, error) { // GeneratePodHostNameAndDomain creates a hostname and domain name for a pod, // given that pod's spec and annotations or returns an error. func (kl *Kubelet) GeneratePodHostNameAndDomain(pod *v1.Pod) (string, string, error) { - // TODO(vmarmol): Handle better. clusterDomain := kl.dnsConfigurer.ClusterDomain hostname := pod.Name @@ -447,7 +457,7 @@ func (kl *Kubelet) GenerateRunContainerOptions(pod *v1.Pod, container *v1.Contai } opts.Envs = append(opts.Envs, envs...) - mounts, cleanupAction, err := makeMounts(pod, kl.getPodDir(pod.UID), container, hostname, hostDomainName, podIP, volumes, kl.mounter, opts.Envs) + mounts, cleanupAction, err := makeMounts(pod, kl.getPodDir(pod.UID), container, hostname, hostDomainName, podIP, volumes, kl.mounter, kl.subpather, opts.Envs) if err != nil { return nil, cleanupAction, err } @@ -528,6 +538,10 @@ func (kl *Kubelet) getServiceEnvVarMap(ns string, enableServiceLinks bool) (map[ // Make the environment variables for a pod in the given namespace. func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container, podIP string) ([]kubecontainer.EnvVar, error) { + if pod.Spec.EnableServiceLinks == nil { + return nil, fmt.Errorf("nil pod.spec.enableServiceLinks encountered, cannot construct envvars") + } + var result []kubecontainer.EnvVar // Note: These are added to the docker Config, but are not included in the checksum computed // by kubecontainer.HashContainer(...). That way, we can still determine whether an @@ -847,7 +861,7 @@ func (kl *Kubelet) podIsTerminated(pod *v1.Pod) bool { return status.Phase == v1.PodFailed || status.Phase == v1.PodSucceeded || (pod.DeletionTimestamp != nil && notRunning(status.ContainerStatuses)) } -// IsPodTerminated returns trus if the pod with the provided UID is in a terminated state ("Failed" or "Succeeded") +// IsPodTerminated returns true if the pod with the provided UID is in a terminated state ("Failed" or "Succeeded") // or if the pod has been deleted or removed func (kl *Kubelet) IsPodTerminated(uid types.UID) bool { pod, podFound := kl.podManager.GetPodByUID(uid) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/OWNERS index 99d321aac10..22935e94052 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - mtaufen - dchen1107 diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go index 382f04b5379..26c48d06f26 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go @@ -95,7 +95,7 @@ func (s *fsStore) Exists(source checkpoint.RemoteConfigSource) (bool, error) { func (s *fsStore) Save(payload checkpoint.Payload) error { // Note: Payload interface guarantees UID() and ResourceVersion() to be non-empty path := s.checkpointPath(payload.UID(), payload.ResourceVersion()) - // ensure the parent dir (checkpoints/uid) exists, since ReplaceDir requires the parent of the replacee + // ensure the parent dir (checkpoints/uid) exists, since ReplaceDir requires the parent of the replace // to exist, and we checkpoint as checkpoints/uid/resourceVersion/files-from-configmap if err := utilfiles.EnsureDir(s.fs, filepath.Dir(path)); err != nil { return err diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/BUILD index 361c3487115..c7eec262375 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/BUILD @@ -89,13 +89,13 @@ go_test( "instrumented_services_test.go", "kuberuntime_container_linux_test.go", "kuberuntime_container_test.go", + "kuberuntime_container_windows_test.go", "kuberuntime_gc_test.go", "kuberuntime_image_test.go", "kuberuntime_manager_test.go", "kuberuntime_sandbox_test.go", "labels_test.go", "legacy_test.go", - "main_test.go", "security_context_test.go", ], embed = [":go_default_library"], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers.go index ccabf8d004a..1f766581e2d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers.go @@ -163,24 +163,31 @@ func getStableKey(pod *v1.Pod, container *v1.Container) string { return fmt.Sprintf("%s_%s_%s_%s_%s", pod.Name, pod.Namespace, string(pod.UID), container.Name, hash) } +// logPathDelimiter is the delimiter used in the log path. +const logPathDelimiter = "_" + // buildContainerLogsPath builds log path for container relative to pod logs directory. func buildContainerLogsPath(containerName string, restartCount int) string { return filepath.Join(containerName, fmt.Sprintf("%d.log", restartCount)) } -// buildFullContainerLogsPath builds absolute log path for container. -func buildFullContainerLogsPath(podUID types.UID, containerName string, restartCount int) string { - return filepath.Join(buildPodLogsDirectory(podUID), buildContainerLogsPath(containerName, restartCount)) -} - // BuildContainerLogsDirectory builds absolute log directory path for a container in pod. -func BuildContainerLogsDirectory(podUID types.UID, containerName string) string { - return filepath.Join(buildPodLogsDirectory(podUID), containerName) +func BuildContainerLogsDirectory(podNamespace, podName string, podUID types.UID, containerName string) string { + return filepath.Join(BuildPodLogsDirectory(podNamespace, podName, podUID), containerName) } -// buildPodLogsDirectory builds absolute log directory path for a pod sandbox. -func buildPodLogsDirectory(podUID types.UID) string { - return filepath.Join(podLogsRootDirectory, string(podUID)) +// BuildPodLogsDirectory builds absolute log directory path for a pod sandbox. +func BuildPodLogsDirectory(podNamespace, podName string, podUID types.UID) string { + return filepath.Join(podLogsRootDirectory, strings.Join([]string{podNamespace, podName, + string(podUID)}, logPathDelimiter)) +} + +// parsePodUIDFromLogsDirectory parses pod logs directory name and returns the pod UID. +// It supports both the old pod log directory /var/log/pods/UID, and the new pod log +// directory /var/log/pods/NAMESPACE_NAME_UID. +func parsePodUIDFromLogsDirectory(name string) types.UID { + parts := strings.Split(name, logPathDelimiter) + return types.UID(parts[len(parts)-1]) } // toKubeRuntimeStatus converts the runtimeapi.RuntimeStatus to kubecontainer.RuntimeStatus. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers_linux.go index 9335b5f6e16..204bc4e9ffb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/helpers_linux.go @@ -54,7 +54,6 @@ func milliCPUToQuota(milliCPU int64, period int64) (quota int64) { if milliCPU == 0 { return } - period = quotaPeriod // we then convert your milliCPU to a value normalized over a period quota = (milliCPU * period) / milliCPUToCPU diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/instrumented_services.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/instrumented_services.go index 5fe011d0557..b12cb5ab89a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/instrumented_services.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/instrumented_services.go @@ -49,13 +49,16 @@ func newInstrumentedImageManagerService(service internalapi.ImageManagerService) // recordOperation records the duration of the operation. func recordOperation(operation string, start time.Time) { metrics.RuntimeOperations.WithLabelValues(operation).Inc() - metrics.RuntimeOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) + metrics.DeprecatedRuntimeOperations.WithLabelValues(operation).Inc() + metrics.RuntimeOperationsDuration.WithLabelValues(operation).Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedRuntimeOperationsLatency.WithLabelValues(operation).Observe(metrics.SinceInMicroseconds(start)) } // recordError records error for metric if an error occurred. func recordError(operation string, err error) { if err != nil { metrics.RuntimeOperationsErrors.WithLabelValues(operation).Inc() + metrics.DeprecatedRuntimeOperationsErrors.WithLabelValues(operation).Inc() } } @@ -178,10 +181,15 @@ func (in instrumentedRuntimeService) Attach(req *runtimeapi.AttachRequest) (*run func (in instrumentedRuntimeService) RunPodSandbox(config *runtimeapi.PodSandboxConfig, runtimeHandler string) (string, error) { const operation = "run_podsandbox" - defer recordOperation(operation, time.Now()) + startTime := time.Now() + defer recordOperation(operation, startTime) + defer metrics.RunPodSandboxDuration.WithLabelValues(runtimeHandler).Observe(metrics.SinceInSeconds(startTime)) out, err := in.service.RunPodSandbox(config, runtimeHandler) recordError(operation, err) + if err != nil { + metrics.RunPodSandboxErrors.WithLabelValues(runtimeHandler).Inc() + } return out, err } @@ -275,11 +283,11 @@ func (in instrumentedImageManagerService) ImageStatus(image *runtimeapi.ImageSpe return out, err } -func (in instrumentedImageManagerService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) { +func (in instrumentedImageManagerService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) { const operation = "pull_image" defer recordOperation(operation, time.Now()) - imageRef, err := in.service.PullImage(image, auth) + imageRef, err := in.service.PullImage(image, auth, podSandboxConfig) recordError(operation, err) return imageRef, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go index 0a5f1e3e723..5e5733e5597 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -35,7 +35,7 @@ import ( "github.com/armon/circbuf" "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubetypes "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -90,9 +90,9 @@ func (m *kubeGenericRuntimeManager) recordContainerEvent(pod *v1.Pod, container // * create the container // * start the container // * run the post start lifecycle hooks (if applicable) -func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandboxConfig *runtimeapi.PodSandboxConfig, container *v1.Container, pod *v1.Pod, podStatus *kubecontainer.PodStatus, pullSecrets []v1.Secret, podIP string, containerType kubecontainer.ContainerType) (string, error) { +func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandboxConfig *runtimeapi.PodSandboxConfig, container *v1.Container, pod *v1.Pod, podStatus *kubecontainer.PodStatus, pullSecrets []v1.Secret, podIP string) (string, error) { // Step 1: pull the image. - imageRef, msg, err := m.imagePuller.EnsureImageExists(pod, container, pullSecrets) + imageRef, msg, err := m.imagePuller.EnsureImageExists(pod, container, pullSecrets, podSandboxConfig) if err != nil { m.recordContainerEvent(pod, container, "", v1.EventTypeWarning, events.FailedToCreateContainer, "Error: %v", grpc.ErrorDesc(err)) return msg, err @@ -112,7 +112,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb restartCount = containerStatus.RestartCount + 1 } - containerConfig, cleanupAction, err := m.generateContainerConfig(container, pod, restartCount, podIP, imageRef, containerType) + containerConfig, cleanupAction, err := m.generateContainerConfig(container, pod, restartCount, podIP, imageRef) if cleanupAction != nil { defer cleanupAction() } @@ -131,7 +131,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb m.recordContainerEvent(pod, container, containerID, v1.EventTypeWarning, events.FailedToStartContainer, "Internal PreStartContainer hook failed: %v", grpc.ErrorDesc(err)) return grpc.ErrorDesc(err), ErrPreStartHook } - m.recordContainerEvent(pod, container, containerID, v1.EventTypeNormal, events.CreatedContainer, "Created container") + m.recordContainerEvent(pod, container, containerID, v1.EventTypeNormal, events.CreatedContainer, fmt.Sprintf("Created container %s", container.Name)) if ref != nil { m.containerRefManager.SetRef(kubecontainer.ContainerID{ @@ -146,7 +146,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb m.recordContainerEvent(pod, container, containerID, v1.EventTypeWarning, events.FailedToStartContainer, "Error: %v", grpc.ErrorDesc(err)) return grpc.ErrorDesc(err), kubecontainer.ErrRunContainer } - m.recordContainerEvent(pod, container, containerID, v1.EventTypeNormal, events.StartedContainer, "Started container") + m.recordContainerEvent(pod, container, containerID, v1.EventTypeNormal, events.StartedContainer, fmt.Sprintf("Started container %s", container.Name)) // Symlink container logs to the legacy container log location for cluster logging // support. @@ -188,7 +188,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb } // generateContainerConfig generates container config for kubelet runtime v1. -func (m *kubeGenericRuntimeManager) generateContainerConfig(container *v1.Container, pod *v1.Pod, restartCount int, podIP, imageRef string, containerType kubecontainer.ContainerType) (*runtimeapi.ContainerConfig, func(), error) { +func (m *kubeGenericRuntimeManager) generateContainerConfig(container *v1.Container, pod *v1.Pod, restartCount int, podIP, imageRef string) (*runtimeapi.ContainerConfig, func(), error) { opts, cleanupAction, err := m.runtimeHelper.GenerateRunContainerOptions(pod, container, podIP) if err != nil { return nil, nil, err @@ -205,7 +205,7 @@ func (m *kubeGenericRuntimeManager) generateContainerConfig(container *v1.Contai } command, args := kubecontainer.ExpandContainerCommandAndArgs(container, opts.Envs) - logDir := BuildContainerLogsDirectory(kubetypes.UID(pod.UID), container.Name) + logDir := BuildContainerLogsDirectory(pod.Namespace, pod.Name, pod.UID, container.Name) err = m.osInterface.MkdirAll(logDir, 0755) if err != nil { return nil, cleanupAction, fmt.Errorf("create container log directory for container %s failed: %v", container.Name, err) @@ -221,7 +221,7 @@ func (m *kubeGenericRuntimeManager) generateContainerConfig(container *v1.Contai Command: command, Args: args, WorkingDir: container.WorkingDir, - Labels: newContainerLabels(container, pod, containerType), + Labels: newContainerLabels(container, pod), Annotations: newContainerAnnotations(container, pod, restartCount, opts), Devices: makeDevices(opts), Mounts: m.makeMounts(opts, container), @@ -394,14 +394,14 @@ func (m *kubeGenericRuntimeManager) getPodContainerStatuses(uid kubetypes.UID, n for i, c := range containers { status, err := m.runtimeService.ContainerStatus(c.Id) if err != nil { - klog.Errorf("ContainerStatus for %s error: %v", c.Id, err) + // Merely log this here; GetPodStatus will actually report the error out. + klog.V(4).Infof("ContainerStatus for %s error: %v", c.Id, err) return nil, err } cStatus := toKubeContainerStatus(status, m.runtimeName) if status.State == runtimeapi.ContainerState_CONTAINER_EXITED { // Populate the termination message if needed. annotatedInfo := getContainerInfoFromAnnotations(status.Annotations) - labeledInfo := getContainerInfoFromLabels(status.Labels) fallbackToLogs := annotatedInfo.TerminationMessagePolicy == v1.TerminationMessageFallbackToLogsOnError && cStatus.ExitCode != 0 tMessage, checkLogs := getTerminationMessage(status, annotatedInfo.TerminationMessagePath, fallbackToLogs) if checkLogs { @@ -412,8 +412,7 @@ func (m *kubeGenericRuntimeManager) getPodContainerStatuses(uid kubetypes.UID, n tMessage = fmt.Sprintf("Error reading termination message from logs: %v", err) } } else { - path := buildFullContainerLogsPath(uid, labeledInfo.ContainerName, annotatedInfo.RestartCount) - tMessage = m.readLastStringFromContainerLogs(path) + tMessage = m.readLastStringFromContainerLogs(status.GetLogPath()) } } // Use the termination message written by the application is not empty @@ -531,12 +530,12 @@ func (m *kubeGenericRuntimeManager) restoreSpecsFromContainerLabels(containerID // killContainer kills a container through the following steps: // * Run the pre-stop lifecycle hooks (if applicable). // * Stop the container. -func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubecontainer.ContainerID, containerName string, reason string, gracePeriodOverride *int64) error { +func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubecontainer.ContainerID, containerName string, message string, gracePeriodOverride *int64) error { var containerSpec *v1.Container if pod != nil { if containerSpec = kubecontainer.GetContainerSpec(pod, containerName); containerSpec == nil { return fmt.Errorf("failed to get containerSpec %q(id=%q) in pod %q when killing container for reason %q", - containerName, containerID.String(), format.Pod(pod), reason) + containerName, containerID.String(), format.Pod(pod), message) } } else { // Restore necessary information if one of the specs is nil. @@ -556,7 +555,10 @@ func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubec gracePeriod = *pod.Spec.TerminationGracePeriodSeconds } - klog.V(2).Infof("Killing container %q with %d second grace period", containerID.String(), gracePeriod) + if len(message) == 0 { + message = fmt.Sprintf("Stopping container %s", containerSpec.Name) + } + m.recordContainerEvent(pod, containerSpec, containerID.ID, v1.EventTypeNormal, events.KillingContainer, message) // Run internal pre-stop lifecycle hook if err := m.internalLifecycle.PreStopContainer(containerID.ID); err != nil { @@ -576,6 +578,8 @@ func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubec klog.V(3).Infof("Killing container %q, but using %d second grace period override", containerID, gracePeriod) } + klog.V(2).Infof("Killing container %q with %d second grace period", containerID.String(), gracePeriod) + err := m.runtimeService.StopContainer(containerID.ID, gracePeriod) if err != nil { klog.Errorf("Container %q termination failed with gracePeriod %d: %v", containerID.String(), gracePeriod, err) @@ -583,11 +587,6 @@ func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubec klog.V(3).Infof("Container %q exited normally", containerID.String()) } - message := fmt.Sprintf("Killing container with id %s", containerID.String()) - if reason != "" { - message = fmt.Sprint(message, ":", reason) - } - m.recordContainerEvent(pod, containerSpec, containerID.ID, v1.EventTypeNormal, events.KillingContainer, message) m.containerRefManager.ClearRef(containerID) return err @@ -605,7 +604,7 @@ func (m *kubeGenericRuntimeManager) killContainersWithSyncResult(pod *v1.Pod, ru defer wg.Done() killContainerResult := kubecontainer.NewSyncResult(kubecontainer.KillContainer, container.Name) - if err := m.killContainer(pod, container.ID, container.Name, "Need to kill Pod", gracePeriodOverride); err != nil { + if err := m.killContainer(pod, container.ID, container.Name, "", gracePeriodOverride); err != nil { killContainerResult.Fail(kubecontainer.ErrKillContainer, err.Error()) } containerResults <- killContainerResult @@ -699,10 +698,9 @@ func (m *kubeGenericRuntimeManager) purgeInitContainers(pod *v1.Pod, podStatus * // index of next init container to start, or done if there are no further init containers. // Status is only returned if an init container is failed, in which case next will // point to the current container. -// next < 0 if no init container to run. -func findNextInitContainerToRun(pod *v1.Pod, podStatus *kubecontainer.PodStatus) (status *kubecontainer.ContainerStatus, next int, done bool) { +func findNextInitContainerToRun(pod *v1.Pod, podStatus *kubecontainer.PodStatus) (status *kubecontainer.ContainerStatus, next *v1.Container, done bool) { if len(pod.Spec.InitContainers) == 0 { - return nil, -1, true + return nil, nil, true } // If there are failed containers, return the status of the last failed one. @@ -710,7 +708,7 @@ func findNextInitContainerToRun(pod *v1.Pod, podStatus *kubecontainer.PodStatus) container := &pod.Spec.InitContainers[i] status := podStatus.FindContainerStatusByName(container.Name) if status != nil && isInitContainerFailed(status) { - return status, i, false + return status, container, false } } @@ -724,21 +722,21 @@ func findNextInitContainerToRun(pod *v1.Pod, podStatus *kubecontainer.PodStatus) // container is still running, return not done. if status.State == kubecontainer.ContainerStateRunning { - return nil, -1, false + return nil, nil, false } if status.State == kubecontainer.ContainerStateExited { // all init containers successful if i == (len(pod.Spec.InitContainers) - 1) { - return nil, -1, true + return nil, nil, true } // all containers up to i successful, go to i+1 - return nil, i + 1, false + return nil, &pod.Spec.InitContainers[i+1], false } } - return nil, 0, false + return nil, &pod.Spec.InitContainers[0], false } // GetContainerLogs returns logs of a specific container. @@ -824,8 +822,7 @@ func (m *kubeGenericRuntimeManager) removeContainerLog(containerID string) error return fmt.Errorf("failed to get container status %q: %v", containerID, err) } labeledInfo := getContainerInfoFromLabels(status.Labels) - annotatedInfo := getContainerInfoFromAnnotations(status.Annotations) - path := buildFullContainerLogsPath(labeledInfo.PodUID, labeledInfo.ContainerName, annotatedInfo.RestartCount) + path := status.GetLogPath() if err := m.osInterface.Remove(path); err != nil && !os.IsNotExist(err) { return fmt.Errorf("failed to remove container %q log %q: %v", containerID, path, err) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go index c5da7e3171d..de91b3cf249 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go @@ -19,9 +19,7 @@ limitations under the License. package kuberuntime import ( - "time" - - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" "k8s.io/kubernetes/pkg/kubelet/qos" ) @@ -67,7 +65,7 @@ func (m *kubeGenericRuntimeManager) generateLinuxContainerConfig(container *v1.C if m.cpuCFSQuota { // if cpuLimit.Amount is nil, then the appropriate default value is returned // to allow full usage of cpu resource. - cpuPeriod := int64(m.cpuCFSQuotaPeriod.Duration / time.Microsecond) + cpuPeriod := int64(quotaPeriod) cpuQuota := milliCPUToQuota(cpuLimit.MilliValue(), cpuPeriod) lc.Resources.CpuQuota = cpuQuota lc.Resources.CpuPeriod = cpuPeriod diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go index 77165e81b21..da606c3cfbf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go @@ -23,6 +23,8 @@ import ( "github.com/docker/docker/pkg/sysinfo" "k8s.io/api/core/v1" + utilfeature "k8s.io/apiserver/pkg/util/feature" + kubefeatures "k8s.io/kubernetes/pkg/features" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" "k8s.io/kubernetes/pkg/securitycontext" @@ -35,6 +37,10 @@ func (m *kubeGenericRuntimeManager) applyPlatformSpecificContainerConfig(config return err } + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.WindowsGMSA) { + determineEffectiveSecurityContext(config, container, pod) + } + config.Windows = windowsConfig return nil } @@ -97,3 +103,40 @@ func (m *kubeGenericRuntimeManager) generateWindowsContainerConfig(container *v1 return wc, nil } + +const ( + // GMSASpecContainerAnnotationKey is the container annotation where we store the contents of the GMSA credential spec to use. + GMSASpecContainerAnnotationKey = "container.alpha.windows.kubernetes.io/gmsa-credential-spec" + // gMSAContainerSpecPodAnnotationKeySuffix is the suffix of the pod annotation where the GMSA webhook admission controller + // stores the contents of the GMSA credential spec for a given container (the full annotation being the container's name + // with this suffix appended). + gMSAContainerSpecPodAnnotationKeySuffix = "." + GMSASpecContainerAnnotationKey + // gMSAPodSpecPodAnnotationKey is the pod annotation where the GMSA webhook admission controller stores the contents of the GMSA + // credential spec to use for containers that do not have their own specific GMSA cred spec set via a + // gMSAContainerSpecPodAnnotationKeySuffix annotation as explained above + gMSAPodSpecPodAnnotationKey = "pod.alpha.windows.kubernetes.io/gmsa-credential-spec" +) + +// determineEffectiveSecurityContext determines the effective GMSA credential spec and, if any, copies it to the container's +// GMSASpecContainerAnnotationKey annotation. +func determineEffectiveSecurityContext(config *runtimeapi.ContainerConfig, container *v1.Container, pod *v1.Pod) { + var containerCredSpec string + + containerGMSAPodAnnotation := container.Name + gMSAContainerSpecPodAnnotationKeySuffix + if pod.Annotations[containerGMSAPodAnnotation] != "" { + containerCredSpec = pod.Annotations[containerGMSAPodAnnotation] + } else if pod.Annotations[gMSAPodSpecPodAnnotationKey] != "" { + containerCredSpec = pod.Annotations[gMSAPodSpecPodAnnotationKey] + } + + if containerCredSpec != "" { + if config.Annotations == nil { + config.Annotations = make(map[string]string) + } + config.Annotations[GMSASpecContainerAnnotationKey] = containerCredSpec + } else { + // the annotation shouldn't be present, but let's err on the side of caution: + // it should only be set here and nowhere else + delete(config.Annotations, GMSASpecContainerAnnotationKey) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_gc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_gc.go index 1bc77c1739c..97bd3fff24d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_gc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_gc.go @@ -339,7 +339,7 @@ func (cgc *containerGC) evictPodLogsDirectories(allSourcesReady bool) error { } for _, dir := range dirs { name := dir.Name() - podUID := types.UID(name) + podUID := parsePodUIDFromLogsDirectory(name) if !cgc.podStateProvider.IsPodDeleted(podUID) { continue } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go index 60fc6201c01..0823088bd8a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go @@ -29,7 +29,7 @@ import ( // PullImage pulls an image from the network to local storage using the supplied // secrets if necessary. -func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secret) (string, error) { +func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) { img := image.Image repoToPull, _, _, err := parsers.ParseImageName(img) if err != nil { @@ -46,7 +46,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul if !withCredentials { klog.V(3).Infof("Pulling image %q without credentials", img) - imageRef, err := m.imageService.PullImage(imgSpec, nil) + imageRef, err := m.imageService.PullImage(imgSpec, nil, podSandboxConfig) if err != nil { klog.Errorf("Pull image %q failed: %v", img, err) return "", err @@ -67,7 +67,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul RegistryToken: authConfig.RegistryToken, } - imageRef, err := m.imageService.PullImage(imgSpec, auth) + imageRef, err := m.imageService.PullImage(imgSpec, auth, podSandboxConfig) // If there was no error, return success if err == nil { return imageRef, nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go index a915afc0c0c..b6313fb8bdf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -20,12 +20,13 @@ import ( "errors" "fmt" "os" + "sync" "time" cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubetypes "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -43,6 +44,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/images" "k8s.io/kubernetes/pkg/kubelet/lifecycle" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" + "k8s.io/kubernetes/pkg/kubelet/runtimeclass" "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/cache" "k8s.io/kubernetes/pkg/kubelet/util/format" @@ -58,6 +60,8 @@ const ( // The expiration time of version cache. versionCacheTTL = 60 * time.Second + // How frequently to report identical errors + identicalErrorDelay = 1 * time.Minute ) var ( @@ -119,6 +123,16 @@ type kubeGenericRuntimeManager struct { // A shim to legacy functions for backward compatibility. legacyLogProvider LegacyLogProvider + + // Manage RuntimeClass resources. + runtimeClassManager *runtimeclass.Manager + + // Cache last per-container error message to reduce log spam + lastError map[string]string + + // Time last per-container error message was printed + errorPrinted map[string]time.Time + errorMapLock sync.Mutex } // KubeGenericRuntime is a interface contains interfaces for container runtime and command. @@ -155,6 +169,7 @@ func NewKubeGenericRuntimeManager( imageService internalapi.ImageManagerService, internalLifecycle cm.InternalContainerLifecycle, legacyLogProvider LegacyLogProvider, + runtimeClassManager *runtimeclass.Manager, ) (KubeGenericRuntime, error) { kubeRuntimeManager := &kubeGenericRuntimeManager{ recorder: recorder, @@ -171,6 +186,9 @@ func NewKubeGenericRuntimeManager( keyring: credentialprovider.NewDockerKeyring(), internalLifecycle: internalLifecycle, legacyLogProvider: legacyLogProvider, + runtimeClassManager: runtimeClassManager, + lastError: make(map[string]string), + errorPrinted: make(map[string]time.Time), } typedVersion, err := kubeRuntimeManager.runtimeService.Version(kubeRuntimeAPIVersion) @@ -486,8 +504,7 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku // Check initialization progress. initLastStatus, next, done := findNextInitContainerToRun(pod, podStatus) if !done { - if next >= 0 { - container := pod.Spec.InitContainers[next] + if next != nil { initFailed := initLastStatus != nil && isInitContainerFailed(initLastStatus) if initFailed && !shouldRestartOnFailure(pod) { changes.KillPod = true @@ -495,13 +512,13 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku // Always try to stop containers in unknown state first. if initLastStatus != nil && initLastStatus.State == kubecontainer.ContainerStateUnknown { changes.ContainersToKill[initLastStatus.ID] = containerToKillInfo{ - name: container.Name, - container: &container, + name: next.Name, + container: next, message: fmt.Sprintf("Init container is in %q state, try killing it before restart", initLastStatus.State), } } - changes.NextInitContainerToStart = &container + changes.NextInitContainerToStart = next } } // Initialization failed or still in progress. Skip inspecting non-init @@ -547,16 +564,16 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku continue } // The container is running, but kill the container if any of the following condition is met. - reason := "" + var message string restart := shouldRestartOnFailure(pod) - if expectedHash, actualHash, changed := containerChanged(&container, containerStatus); changed { - reason = fmt.Sprintf("Container spec hash changed (%d vs %d).", actualHash, expectedHash) + if _, _, changed := containerChanged(&container, containerStatus); changed { + message = fmt.Sprintf("Container %s definition changed", container.Name) // Restart regardless of the restart policy because the container // spec changed. restart = true } else if liveness, found := m.livenessManager.Get(containerStatus.ID); found && liveness == proberesults.Failure { // If the container failed the liveness probe, we should kill it. - reason = "Container failed liveness probe." + message = fmt.Sprintf("Container %s failed liveness probe", container.Name) } else { // Keep the container. keepCount++ @@ -566,9 +583,8 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku // We need to kill the container, but if we also want to restart the // container afterwards, make the intent clear in the message. Also do // not kill the entire pod since we expect container to be running eventually. - message := reason if restart { - message = fmt.Sprintf("%s. Container will be killed and recreated.", message) + message = fmt.Sprintf("%s, will be restarted", message) changes.ContainersToStart = append(changes.ContainersToStart, idx) } @@ -595,7 +611,7 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku // 4. Create sandbox if necessary. // 5. Create init containers. // 6. Create normal containers. -func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, _ v1.PodStatus, podStatus *kubecontainer.PodStatus, pullSecrets []v1.Secret, backOff *flowcontrol.Backoff) (result kubecontainer.PodSyncResult) { +func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, podStatus *kubecontainer.PodStatus, pullSecrets []v1.Secret, backOff *flowcontrol.Backoff) (result kubecontainer.PodSyncResult) { // Step 1: Compute sandbox and container changes. podContainerChanges := m.computePodActions(pod, podStatus) klog.V(3).Infof("computePodActions got %+v for pod %q", podContainerChanges, format.Pod(pod)) @@ -613,10 +629,10 @@ func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, _ v1.PodStatus, podStat // Step 2: Kill the pod if the sandbox has changed. if podContainerChanges.KillPod { - if !podContainerChanges.CreateSandbox { - klog.V(4).Infof("Stopping PodSandbox for %q because all other containers are dead.", format.Pod(pod)) - } else { + if podContainerChanges.CreateSandbox { klog.V(4).Infof("Stopping PodSandbox for %q, will start new one", format.Pod(pod)) + } else { + klog.V(4).Infof("Stopping PodSandbox for %q because all other containers are dead.", format.Pod(pod)) } killResult := m.killPodWithSyncResult(pod, kubecontainer.ConvertPodStatusToRunningPod(m.runtimeName, podStatus), nil) @@ -729,7 +745,7 @@ func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, _ v1.PodStatus, podStat } klog.V(4).Infof("Creating init container %+v in pod %v", container, format.Pod(pod)) - if msg, err := m.startContainer(podSandboxID, podSandboxConfig, container, pod, podStatus, pullSecrets, podIP, kubecontainer.ContainerTypeInit); err != nil { + if msg, err := m.startContainer(podSandboxID, podSandboxConfig, container, pod, podStatus, pullSecrets, podIP); err != nil { startContainerResult.Fail(err, msg) utilruntime.HandleError(fmt.Errorf("init container start failed: %v: %s", err, msg)) return @@ -753,7 +769,7 @@ func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, _ v1.PodStatus, podStat } klog.V(4).Infof("Creating container %+v in pod %v", container, format.Pod(pod)) - if msg, err := m.startContainer(podSandboxID, podSandboxConfig, container, pod, podStatus, pullSecrets, podIP, kubecontainer.ContainerTypeRegular); err != nil { + if msg, err := m.startContainer(podSandboxID, podSandboxConfig, container, pod, podStatus, pullSecrets, podIP); err != nil { startContainerResult.Fail(err, msg) // known errors that are logged in other places are logged at higher levels here to avoid // repetitive log spam @@ -834,6 +850,17 @@ func (m *kubeGenericRuntimeManager) killPodWithSyncResult(pod *v1.Pod, runningPo return } +func (m *kubeGenericRuntimeManager) cleanupErrorTimeouts() { + m.errorMapLock.Lock() + defer m.errorMapLock.Unlock() + for name, timeout := range m.errorPrinted { + if time.Now().Sub(timeout) >= identicalErrorDelay { + delete(m.errorPrinted, name) + delete(m.lastError, name) + } + } +} + // GetPodStatus retrieves the status of the pod, including the // information of all containers in the pod that are visible in Runtime. func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namespace string) (*kubecontainer.PodStatus, error) { @@ -882,10 +909,19 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp // Get statuses of all containers visible in the pod. containerStatuses, err := m.getPodContainerStatuses(uid, name, namespace) + m.errorMapLock.Lock() + defer m.errorMapLock.Unlock() if err != nil { - klog.Errorf("getPodContainerStatuses for pod %q failed: %v", podFullName, err) + lastMsg, ok := m.lastError[podFullName] + if !ok || err.Error() != lastMsg || time.Now().Sub(m.errorPrinted[podFullName]) >= identicalErrorDelay { + klog.Errorf("getPodContainerStatuses for pod %q failed: %v", podFullName, err) + m.errorPrinted[podFullName] = time.Now() + m.lastError[podFullName] = err.Error() + } return nil, err } + delete(m.errorPrinted, podFullName) + delete(m.lastError, podFullName) return &kubecontainer.PodStatus{ ID: uid, @@ -897,31 +933,11 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp }, nil } -// Returns the filesystem path of the pod's network namespace. -// -// For CRI, container network is handled by the runtime completely and this -// function should never be called. -func (m *kubeGenericRuntimeManager) GetNetNS(_ kubecontainer.ContainerID) (string, error) { - return "", fmt.Errorf("not supported") -} - // GarbageCollect removes dead containers using the specified container gc policy. func (m *kubeGenericRuntimeManager) GarbageCollect(gcPolicy kubecontainer.ContainerGCPolicy, allSourcesReady bool, evictNonDeletedPods bool) error { return m.containerGC.GarbageCollect(gcPolicy, allSourcesReady, evictNonDeletedPods) } -// GetPodContainerID gets pod sandbox ID -func (m *kubeGenericRuntimeManager) GetPodContainerID(pod *kubecontainer.Pod) (kubecontainer.ContainerID, error) { - formattedPod := kubecontainer.FormatPod(pod) - if len(pod.Sandboxes) == 0 { - klog.Errorf("No sandboxes are found for pod %q", formattedPod) - return kubecontainer.ContainerID{}, fmt.Errorf("sandboxes for pod %q not found", formattedPod) - } - - // return sandboxID of the first sandbox since it is the latest one - return pod.Sandboxes[0].ID, nil -} - // UpdatePodCIDR is just a passthrough method to update the runtimeConfig of the shim // with the podCIDR supplied by the kubelet. func (m *kubeGenericRuntimeManager) UpdatePodCIDR(podCIDR string) error { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go index 9ce03ee0da3..5a0a00e2411 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go @@ -51,6 +51,16 @@ func (m *kubeGenericRuntimeManager) createPodSandbox(pod *v1.Pod, attempt uint32 } runtimeHandler := "" + if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) && m.runtimeClassManager != nil { + runtimeHandler, err = m.runtimeClassManager.LookupRuntimeHandler(pod.Spec.RuntimeClassName) + if err != nil { + message := fmt.Sprintf("CreatePodSandbox for pod %q failed: %v", format.Pod(pod), err) + return "", message, err + } + if runtimeHandler != "" { + klog.V(2).Infof("Running pod %s with RuntimeHandler %q", format.Pod(pod), runtimeHandler) + } + } podSandBoxID, err := m.runtimeService.RunPodSandbox(podSandboxConfig, runtimeHandler) if err != nil { @@ -93,7 +103,7 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxConfig(pod *v1.Pod, attemp podSandboxConfig.Hostname = hostname } - logDir := buildPodLogsDirectory(pod.UID) + logDir := BuildPodLogsDirectory(pod.Namespace, pod.Name, pod.UID) podSandboxConfig.LogDirectory = logDir portMappings := []*runtimeapi.PortMapping{} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go index b06aeef7174..5e9c6492df5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go @@ -20,7 +20,7 @@ import ( "encoding/json" "strconv" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" kubetypes "k8s.io/apimachinery/pkg/types" "k8s.io/klog" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -56,7 +56,6 @@ type annotatedPodSandboxInfo struct { type labeledContainerInfo struct { ContainerName string - ContainerType kubecontainer.ContainerType PodName string PodNamespace string PodUID kubetypes.UID @@ -95,7 +94,7 @@ func newPodAnnotations(pod *v1.Pod) map[string]string { } // newContainerLabels creates container labels from v1.Container and v1.Pod. -func newContainerLabels(container *v1.Container, pod *v1.Pod, containerType kubecontainer.ContainerType) map[string]string { +func newContainerLabels(container *v1.Container, pod *v1.Pod) map[string]string { labels := map[string]string{} labels[types.KubernetesPodNameLabel] = pod.Name labels[types.KubernetesPodNamespaceLabel] = pod.Namespace @@ -176,13 +175,11 @@ func getPodSandboxInfoFromAnnotations(annotations map[string]string) *annotatedP // getContainerInfoFromLabels gets labeledContainerInfo from labels. func getContainerInfoFromLabels(labels map[string]string) *labeledContainerInfo { - var containerType kubecontainer.ContainerType return &labeledContainerInfo{ PodName: getStringValueFromLabel(labels, types.KubernetesPodNameLabel), PodNamespace: getStringValueFromLabel(labels, types.KubernetesPodNamespaceLabel), PodUID: kubetypes.UID(getStringValueFromLabel(labels, types.KubernetesPodUIDLabel)), ContainerName: getStringValueFromLabel(labels, types.KubernetesContainerNameLabel), - ContainerType: containerType, } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/BUILD index ff518ddfdf1..427370b17f0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/BUILD @@ -21,9 +21,8 @@ go_library( "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/format:go_default_library", - "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/security/apparmor:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -42,7 +41,7 @@ go_test( deps = [ "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/util/format:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/admission_failure_handler_stub.go b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/admission_failure_handler_stub.go index 7184392ead9..0fedf8c5c3b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/admission_failure_handler_stub.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/admission_failure_handler_stub.go @@ -18,7 +18,7 @@ package lifecycle import ( "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" + "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" ) // AdmissionFailureHandlerStub is an AdmissionFailureHandler that does not perform any handling of admission failure. @@ -31,6 +31,6 @@ func NewAdmissionFailureHandlerStub() *AdmissionFailureHandlerStub { return &AdmissionFailureHandlerStub{} } -func (n *AdmissionFailureHandlerStub) HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []algorithm.PredicateFailureReason) (bool, []algorithm.PredicateFailureReason, error) { +func (n *AdmissionFailureHandlerStub) HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []predicates.PredicateFailureReason) (bool, []predicates.PredicateFailureReason, error) { return false, failureReasons, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/predicate.go b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/predicate.go index 67fa7a796cf..b55f2cd2622 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/predicate.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/lifecycle/predicate.go @@ -25,19 +25,18 @@ import ( "k8s.io/api/core/v1" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/kubelet/util/format" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) type getNodeAnyWayFuncType func() (*v1.Node, error) -type pluginResourceUpdateFuncType func(*schedulercache.NodeInfo, *PodAdmitAttributes) error +type pluginResourceUpdateFuncType func(*schedulernodeinfo.NodeInfo, *PodAdmitAttributes) error // AdmissionFailureHandler is an interface which defines how to deal with a failure to admit a pod. // This allows for the graceful handling of pod admission failure. type AdmissionFailureHandler interface { - HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []algorithm.PredicateFailureReason) (bool, []algorithm.PredicateFailureReason, error) + HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []predicates.PredicateFailureReason) (bool, []predicates.PredicateFailureReason, error) } type predicateAdmitHandler struct { @@ -81,7 +80,7 @@ func (w *predicateAdmitHandler) admit(attrs *PodAdmitAttributes) PodAdmitResult } admitPod := attrs.Pod pods := attrs.OtherPods - nodeInfo := schedulercache.NewNodeInfo(pods...) + nodeInfo := schedulernodeinfo.NewNodeInfo(pods...) nodeInfo.SetNode(node) // ensure the node has enough plugin resources for that required in pods if err = w.pluginResourceUpdateFunc(nodeInfo, attrs); err != nil { @@ -169,7 +168,7 @@ func (w *predicateAdmitHandler) admit(attrs *PodAdmitAttributes) PodAdmitResult } } -func removeMissingExtendedResources(pod *v1.Pod, nodeInfo *schedulercache.NodeInfo) *v1.Pod { +func removeMissingExtendedResources(pod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) *v1.Pod { podCopy := pod.DeepCopy() for i, c := range pod.Spec.Containers { // We only handle requests in Requests but not Limits because the diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/BUILD index e104574eba8..2c6224cbde5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/BUILD @@ -13,6 +13,7 @@ go_library( "//pkg/features:go_default_library", "//pkg/kubelet/container:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/BUILD index 64022f36676..d98893388cb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/BUILD @@ -21,7 +21,6 @@ go_library( go_test( name = "go_default_test", srcs = [ - "helper_test.go", "log_metrics_test.go", "volume_stats_test.go", ], @@ -31,8 +30,7 @@ go_test( "//pkg/kubelet/server/stats/testing:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus/testutil:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/volume_stats.go b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/volume_stats.go index c281aaea57f..78e047527c1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/volume_stats.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/volume_stats.go @@ -59,11 +59,11 @@ var ( ) type volumeStatsCollector struct { - statsProvider serverstats.StatsProvider + statsProvider serverstats.Provider } // NewVolumeStatsCollector creates a volume stats prometheus collector. -func NewVolumeStatsCollector(statsProvider serverstats.StatsProvider) prometheus.Collector { +func NewVolumeStatsCollector(statsProvider serverstats.Provider) prometheus.Collector { return &volumeStatsCollector{statsProvider: statsProvider} } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go index ec1a7166c30..4a6b8617d05 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go @@ -23,6 +23,7 @@ import ( "github.com/prometheus/client_golang/prometheus" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/types" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" @@ -30,27 +31,42 @@ import ( ) const ( - KubeletSubsystem = "kubelet" - PodWorkerLatencyKey = "pod_worker_latency_microseconds" - PodStartLatencyKey = "pod_start_latency_microseconds" - CgroupManagerOperationsKey = "cgroup_manager_latency_microseconds" - PodWorkerStartLatencyKey = "pod_worker_start_latency_microseconds" - PLEGRelistLatencyKey = "pleg_relist_latency_microseconds" - PLEGRelistIntervalKey = "pleg_relist_interval_microseconds" - EvictionStatsAgeKey = "eviction_stats_age_microseconds" - VolumeStatsCapacityBytesKey = "volume_stats_capacity_bytes" - VolumeStatsAvailableBytesKey = "volume_stats_available_bytes" - VolumeStatsUsedBytesKey = "volume_stats_used_bytes" - VolumeStatsInodesKey = "volume_stats_inodes" - VolumeStatsInodesFreeKey = "volume_stats_inodes_free" - VolumeStatsInodesUsedKey = "volume_stats_inodes_used" + KubeletSubsystem = "kubelet" + NodeNameKey = "node_name" + NodeLabelKey = "node" + PodWorkerDurationKey = "pod_worker_duration_seconds" + PodStartDurationKey = "pod_start_duration_seconds" + CgroupManagerOperationsKey = "cgroup_manager_duration_seconds" + PodWorkerStartDurationKey = "pod_worker_start_duration_seconds" + PLEGRelistDurationKey = "pleg_relist_duration_seconds" + PLEGDiscardEventsKey = "pleg_discard_events" + PLEGRelistIntervalKey = "pleg_relist_interval_seconds" + EvictionStatsAgeKey = "eviction_stats_age_seconds" + DeprecatedPodWorkerLatencyKey = "pod_worker_latency_microseconds" + DeprecatedPodStartLatencyKey = "pod_start_latency_microseconds" + DeprecatedCgroupManagerOperationsKey = "cgroup_manager_latency_microseconds" + DeprecatedPodWorkerStartLatencyKey = "pod_worker_start_latency_microseconds" + DeprecatedPLEGRelistLatencyKey = "pleg_relist_latency_microseconds" + DeprecatedPLEGRelistIntervalKey = "pleg_relist_interval_microseconds" + DeprecatedEvictionStatsAgeKey = "eviction_stats_age_microseconds" + VolumeStatsCapacityBytesKey = "volume_stats_capacity_bytes" + VolumeStatsAvailableBytesKey = "volume_stats_available_bytes" + VolumeStatsUsedBytesKey = "volume_stats_used_bytes" + VolumeStatsInodesKey = "volume_stats_inodes" + VolumeStatsInodesFreeKey = "volume_stats_inodes_free" + VolumeStatsInodesUsedKey = "volume_stats_inodes_used" // Metrics keys of remote runtime operations - RuntimeOperationsKey = "runtime_operations" - RuntimeOperationsLatencyKey = "runtime_operations_latency_microseconds" - RuntimeOperationsErrorsKey = "runtime_operations_errors" + RuntimeOperationsKey = "runtime_operations_total" + RuntimeOperationsDurationKey = "runtime_operations_duration_seconds" + RuntimeOperationsErrorsKey = "runtime_operations_errors_total" + DeprecatedRuntimeOperationsKey = "runtime_operations" + DeprecatedRuntimeOperationsLatencyKey = "runtime_operations_latency_microseconds" + DeprecatedRuntimeOperationsErrorsKey = "runtime_operations_errors" // Metrics keys of device plugin operations - DevicePluginRegistrationCountKey = "device_plugin_registration_count" - DevicePluginAllocationLatencyKey = "device_plugin_alloc_latency_microseconds" + DevicePluginRegistrationCountKey = "device_plugin_registration_total" + DevicePluginAllocationDurationKey = "device_plugin_alloc_duration_seconds" + DeprecatedDevicePluginRegistrationCountKey = "device_plugin_registration_count" + DeprecatedDevicePluginAllocationLatencyKey = "device_plugin_alloc_latency_microseconds" // Metric keys for node config AssignedConfigKey = "node_config_assigned" @@ -62,58 +78,85 @@ const ( ConfigUIDLabelKey = "node_config_uid" ConfigResourceVersionLabelKey = "node_config_resource_version" KubeletConfigKeyLabelKey = "node_config_kubelet_key" + + // Metrics keys for RuntimeClass + RunPodSandboxDurationKey = "run_podsandbox_duration_seconds" + RunPodSandboxErrorsKey = "run_podsandbox_errors_total" ) var ( - ContainersPerPodCount = prometheus.NewSummary( - prometheus.SummaryOpts{ + NodeName = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeNameKey, + Help: "The node's name. The count is always 1.", + }, + []string{NodeLabelKey}, + ) + ContainersPerPodCount = prometheus.NewHistogram( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, Name: "containers_per_pod_count", Help: "The number of containers per pod.", + Buckets: prometheus.DefBuckets, }, ) - PodWorkerLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + PodWorkerDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, - Name: PodWorkerLatencyKey, - Help: "Latency in microseconds to sync a single pod. Broken down by operation type: create, update, or sync", + Name: PodWorkerDurationKey, + Help: "Duration in seconds to sync a single pod. Broken down by operation type: create, update, or sync", + Buckets: prometheus.DefBuckets, }, []string{"operation_type"}, ) - PodStartLatency = prometheus.NewSummary( - prometheus.SummaryOpts{ + PodStartDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, - Name: PodStartLatencyKey, - Help: "Latency in microseconds for a single pod to go from pending to running.", + Name: PodStartDurationKey, + Help: "Duration in seconds for a single pod to go from pending to running.", + Buckets: prometheus.DefBuckets, }, ) - CgroupManagerLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + CgroupManagerDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, Name: CgroupManagerOperationsKey, - Help: "Latency in microseconds for cgroup manager operations. Broken down by method.", + Help: "Duration in seconds for cgroup manager operations. Broken down by method.", + Buckets: prometheus.DefBuckets, }, []string{"operation_type"}, ) - PodWorkerStartLatency = prometheus.NewSummary( - prometheus.SummaryOpts{ + PodWorkerStartDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, - Name: PodWorkerStartLatencyKey, - Help: "Latency in microseconds from seeing a pod to starting a worker.", + Name: PodWorkerStartDurationKey, + Help: "Duration in seconds from seeing a pod to starting a worker.", + Buckets: prometheus.DefBuckets, }, ) - PLEGRelistLatency = prometheus.NewSummary( - prometheus.SummaryOpts{ + PLEGRelistDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, - Name: PLEGRelistLatencyKey, - Help: "Latency in microseconds for relisting pods in PLEG.", + Name: PLEGRelistDurationKey, + Help: "Duration in seconds for relisting pods in PLEG.", + Buckets: prometheus.DefBuckets, }, ) - PLEGRelistInterval = prometheus.NewSummary( - prometheus.SummaryOpts{ + PLEGDiscardEvents = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: KubeletSubsystem, + Name: PLEGDiscardEventsKey, + Help: "The number of discard events in PLEG.", + }, + []string{}, + ) + PLEGRelistInterval = prometheus.NewHistogram( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, Name: PLEGRelistIntervalKey, - Help: "Interval in microseconds between relisting in PLEG.", + Help: "Interval in seconds between relisting in PLEG.", + Buckets: prometheus.DefBuckets, }, ) // Metrics of remote runtime operations. @@ -125,11 +168,12 @@ var ( }, []string{"operation_type"}, ) - RuntimeOperationsLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + RuntimeOperationsDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, - Name: RuntimeOperationsLatencyKey, - Help: "Latency in microseconds of runtime operations. Broken down by operation type.", + Name: RuntimeOperationsDurationKey, + Help: "Duration in seconds of runtime operations. Broken down by operation type.", + Buckets: prometheus.DefBuckets, }, []string{"operation_type"}, ) @@ -141,11 +185,12 @@ var ( }, []string{"operation_type"}, ) - EvictionStatsAge = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ + EvictionStatsAge = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ Subsystem: KubeletSubsystem, Name: EvictionStatsAgeKey, Help: "Time between when stats are collected, and when pod is evicted based on those stats by eviction signal", + Buckets: prometheus.DefBuckets, }, []string{"eviction_signal"}, ) @@ -157,11 +202,105 @@ var ( }, []string{"resource_name"}, ) - DevicePluginAllocationLatency = prometheus.NewSummaryVec( + DevicePluginAllocationDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Subsystem: KubeletSubsystem, + Name: DevicePluginAllocationDurationKey, + Help: "Duration in seconds to serve a device plugin Allocation request. Broken down by resource name.", + Buckets: prometheus.DefBuckets, + }, + []string{"resource_name"}, + ) + + DeprecatedPodWorkerLatency = prometheus.NewSummaryVec( prometheus.SummaryOpts{ Subsystem: KubeletSubsystem, - Name: DevicePluginAllocationLatencyKey, - Help: "Latency in microseconds to serve a device plugin Allocation request. Broken down by resource name.", + Name: DeprecatedPodWorkerLatencyKey, + Help: "(Deprecated) Latency in microseconds to sync a single pod. Broken down by operation type: create, update, or sync", + }, + []string{"operation_type"}, + ) + DeprecatedPodStartLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedPodStartLatencyKey, + Help: "(Deprecated) Latency in microseconds for a single pod to go from pending to running.", + }, + ) + DeprecatedCgroupManagerLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedCgroupManagerOperationsKey, + Help: "(Deprecated) Latency in microseconds for cgroup manager operations. Broken down by method.", + }, + []string{"operation_type"}, + ) + DeprecatedPodWorkerStartLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedPodWorkerStartLatencyKey, + Help: "(Deprecated) Latency in microseconds from seeing a pod to starting a worker.", + }, + ) + DeprecatedPLEGRelistLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedPLEGRelistLatencyKey, + Help: "(Deprecated) Latency in microseconds for relisting pods in PLEG.", + }, + ) + DeprecatedPLEGRelistInterval = prometheus.NewSummary( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedPLEGRelistIntervalKey, + Help: "(Deprecated) Interval in microseconds between relisting in PLEG.", + }, + ) + DeprecatedRuntimeOperations = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedRuntimeOperationsKey, + Help: "(Deprecated) Cumulative number of runtime operations by operation type.", + }, + []string{"operation_type"}, + ) + DeprecatedRuntimeOperationsLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedRuntimeOperationsLatencyKey, + Help: "(Deprecated) Latency in microseconds of runtime operations. Broken down by operation type.", + }, + []string{"operation_type"}, + ) + DeprecatedRuntimeOperationsErrors = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedRuntimeOperationsErrorsKey, + Help: "(Deprecated) Cumulative number of runtime operation errors by operation type.", + }, + []string{"operation_type"}, + ) + DeprecatedEvictionStatsAge = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedEvictionStatsAgeKey, + Help: "(Deprecated) Time between when stats are collected, and when pod is evicted based on those stats by eviction signal", + }, + []string{"eviction_signal"}, + ) + DeprecatedDevicePluginRegistrationCount = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedDevicePluginRegistrationCountKey, + Help: "(Deprecated) Cumulative number of device plugin registrations. Broken down by resource name.", + }, + []string{"resource_name"}, + ) + DeprecatedDevicePluginAllocationLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: KubeletSubsystem, + Name: DeprecatedDevicePluginAllocationLatencyKey, + Help: "(Deprecated) Latency in microseconds to serve a device plugin Allocation request. Broken down by resource name.", }, []string{"resource_name"}, ) @@ -199,6 +338,24 @@ var ( Help: "This metric is true (1) if the node is experiencing a configuration-related error, false (0) otherwise.", }, ) + RunPodSandboxDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Subsystem: KubeletSubsystem, + Name: RunPodSandboxDurationKey, + Help: "Duration in seconds of the run_podsandbox operations. Broken down by RuntimeClass.", + // Use DefBuckets for now, will customize the buckets if necessary. + Buckets: prometheus.DefBuckets, + }, + []string{"runtime_handler"}, + ) + RunPodSandboxErrors = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Subsystem: KubeletSubsystem, + Name: RunPodSandboxErrorsKey, + Help: "Cumulative number of the run_podsandbox operation errors by RuntimeClass.", + }, + []string{"runtime_handler"}, + ) ) var registerMetrics sync.Once @@ -207,20 +364,34 @@ var registerMetrics sync.Once func Register(containerCache kubecontainer.RuntimeCache, collectors ...prometheus.Collector) { // Register the metrics. registerMetrics.Do(func() { - prometheus.MustRegister(PodWorkerLatency) - prometheus.MustRegister(PodStartLatency) - prometheus.MustRegister(CgroupManagerLatency) - prometheus.MustRegister(PodWorkerStartLatency) + prometheus.MustRegister(NodeName) + prometheus.MustRegister(PodWorkerDuration) + prometheus.MustRegister(PodStartDuration) + prometheus.MustRegister(CgroupManagerDuration) + prometheus.MustRegister(PodWorkerStartDuration) prometheus.MustRegister(ContainersPerPodCount) prometheus.MustRegister(newPodAndContainerCollector(containerCache)) - prometheus.MustRegister(PLEGRelistLatency) + prometheus.MustRegister(PLEGRelistDuration) + prometheus.MustRegister(PLEGDiscardEvents) prometheus.MustRegister(PLEGRelistInterval) prometheus.MustRegister(RuntimeOperations) - prometheus.MustRegister(RuntimeOperationsLatency) + prometheus.MustRegister(RuntimeOperationsDuration) prometheus.MustRegister(RuntimeOperationsErrors) prometheus.MustRegister(EvictionStatsAge) prometheus.MustRegister(DevicePluginRegistrationCount) - prometheus.MustRegister(DevicePluginAllocationLatency) + prometheus.MustRegister(DevicePluginAllocationDuration) + prometheus.MustRegister(DeprecatedPodWorkerLatency) + prometheus.MustRegister(DeprecatedPodStartLatency) + prometheus.MustRegister(DeprecatedCgroupManagerLatency) + prometheus.MustRegister(DeprecatedPodWorkerStartLatency) + prometheus.MustRegister(DeprecatedPLEGRelistLatency) + prometheus.MustRegister(DeprecatedPLEGRelistInterval) + prometheus.MustRegister(DeprecatedRuntimeOperations) + prometheus.MustRegister(DeprecatedRuntimeOperationsLatency) + prometheus.MustRegister(DeprecatedRuntimeOperationsErrors) + prometheus.MustRegister(DeprecatedEvictionStatsAge) + prometheus.MustRegister(DeprecatedDevicePluginRegistrationCount) + prometheus.MustRegister(DeprecatedDevicePluginAllocationLatency) if utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { prometheus.MustRegister(AssignedConfig) prometheus.MustRegister(ActiveConfig) @@ -238,6 +409,11 @@ func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } +// SinceInSeconds gets the time since the specified start in seconds. +func SinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() +} + func newPodAndContainerCollector(containerCache kubecontainer.RuntimeCache) *podAndContainerCollector { return &podAndContainerCollector{ containerCache: containerCache, @@ -372,3 +548,7 @@ func SetConfigError(err bool) { ConfigError.Set(0) } } + +func SetNodeName(name types.NodeName) { + NodeName.WithLabelValues(string(name)).Set(1) +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/network/OWNERS index 2e520645d70..2424e6272dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - thockin - dchen1107 diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/BUILD index f7d550391f3..10806b859cb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/BUILD @@ -7,13 +7,11 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/validation:go_default_library", - "//pkg/features:go_default_library", "//pkg/kubelet/apis/cri/runtime/v1alpha2:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/util/format:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -21,20 +19,14 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "dns_test.go", - "main_test.go", - ], + srcs = ["dns_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/features:go_default_library", "//pkg/kubelet/apis/cri/runtime/v1alpha2:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/OWNERS index b5c11e8c5ad..a055e4d7024 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-network-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/dns.go b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/dns.go index aa3a8e01a5f..a39994ffcbf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/dns.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/dns/dns.go @@ -27,10 +27,8 @@ import ( "k8s.io/api/core/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/apis/core/validation" - "k8s.io/kubernetes/pkg/features" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/util/format" @@ -192,7 +190,7 @@ func (c *Configurer) CheckLimitsForResolvConf() { return } -// parseResolveConf reads a resolv.conf file from the given reader, and parses +// parseResolvConf reads a resolv.conf file from the given reader, and parses // it into nameservers, searches and options, possibly returning an error. func parseResolvConf(reader io.Reader) (nameservers []string, searches []string, options []string, err error) { file, err := ioutil.ReadAll(reader) @@ -265,12 +263,7 @@ func getPodDNSType(pod *v1.Pod) (podDNSType, error) { dnsPolicy := pod.Spec.DNSPolicy switch dnsPolicy { case v1.DNSNone: - if utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) { - return podDNSNone, nil - } - // This should not happen as kube-apiserver should have rejected - // setting dnsPolicy to DNSNone when feature gate is disabled. - return podDNSCluster, fmt.Errorf(fmt.Sprintf("invalid DNSPolicy=%v: custom pod DNS is disabled", dnsPolicy)) + return podDNSNone, nil case v1.DNSClusterFirstWithHostNet: return podDNSCluster, nil case v1.DNSClusterFirst: @@ -287,7 +280,7 @@ func getPodDNSType(pod *v1.Pod) (podDNSType, error) { return podDNSCluster, fmt.Errorf(fmt.Sprintf("invalid DNSPolicy=%v", dnsPolicy)) } -// Merge DNS options. If duplicated, entries given by PodDNSConfigOption will +// mergeDNSOptions merges DNS options. If duplicated, entries given by PodDNSConfigOption will // overwrite the existing ones. func mergeDNSOptions(existingDNSConfigOptions []string, dnsConfigOptions []v1.PodDNSConfigOption) []string { optionsMap := make(map[string]string) @@ -383,7 +376,7 @@ func (c *Configurer) GetPodDNS(pod *v1.Pod) (*runtimeapi.DNSConfig, error) { } } - if utilfeature.DefaultFeatureGate.Enabled(features.CustomPodDNS) && pod.Spec.DNSConfig != nil { + if pod.Spec.DNSConfig != nil { dnsConfig = appendDNSConfig(dnsConfig, pod.Spec.DNSConfig) } return c.formDNSConfigFitsLimits(dnsConfig, pod), nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/BUILD new file mode 100644 index 00000000000..579a2ddbf60 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/BUILD @@ -0,0 +1,51 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["controller.go"], + importpath = "k8s.io/kubernetes/pkg/kubelet/nodelease", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["controller_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/controller.go b/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/controller.go new file mode 100644 index 00000000000..c614368517b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodelease/controller.go @@ -0,0 +1,206 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package nodelease + +import ( + "time" + + coordv1beta1 "k8s.io/api/coordination/v1beta1" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/apimachinery/pkg/util/wait" + clientset "k8s.io/client-go/kubernetes" + coordclientset "k8s.io/client-go/kubernetes/typed/coordination/v1beta1" + "k8s.io/utils/pointer" + + "k8s.io/klog" +) + +const ( + // renewInterval is the interval at which the lease is renewed + // TODO(mtaufen): 10s was the decision in the KEP, to keep the behavior as close to the + // current default behavior as possible. In the future, we should determine a reasonable + // fraction of the lease duration at which to renew, and use that instead. + renewInterval = 10 * time.Second + // maxUpdateRetries is the number of immediate, successive retries the Kubelet will attempt + // when renewing the lease before it waits for the renewal interval before trying again, + // similar to what we do for node status retries + maxUpdateRetries = 5 + // maxBackoff is the maximum sleep time during backoff (e.g. in backoffEnsureLease) + maxBackoff = 7 * time.Second +) + +// Controller manages creating and renewing the lease for this Kubelet +type Controller interface { + Run(stopCh <-chan struct{}) +} + +type controller struct { + client clientset.Interface + leaseClient coordclientset.LeaseInterface + holderIdentity string + leaseDurationSeconds int32 + renewInterval time.Duration + clock clock.Clock + onRepeatedHeartbeatFailure func() +} + +// NewController constructs and returns a controller +func NewController(clock clock.Clock, client clientset.Interface, holderIdentity string, leaseDurationSeconds int32, onRepeatedHeartbeatFailure func()) Controller { + var leaseClient coordclientset.LeaseInterface + if client != nil { + leaseClient = client.CoordinationV1beta1().Leases(corev1.NamespaceNodeLease) + } + return &controller{ + client: client, + leaseClient: leaseClient, + holderIdentity: holderIdentity, + leaseDurationSeconds: leaseDurationSeconds, + renewInterval: renewInterval, + clock: clock, + onRepeatedHeartbeatFailure: onRepeatedHeartbeatFailure, + } +} + +// Run runs the controller +func (c *controller) Run(stopCh <-chan struct{}) { + if c.leaseClient == nil { + klog.Infof("node lease controller has nil lease client, will not claim or renew leases") + return + } + wait.Until(c.sync, c.renewInterval, stopCh) +} + +func (c *controller) sync() { + lease, created := c.backoffEnsureLease() + // we don't need to update the lease if we just created it + if !created { + c.retryUpdateLease(lease) + } +} + +// backoffEnsureLease attempts to create the lease if it does not exist, +// and uses exponentially increasing waits to prevent overloading the API server +// with retries. Returns the lease, and true if this call created the lease, +// false otherwise. +func (c *controller) backoffEnsureLease() (*coordv1beta1.Lease, bool) { + var ( + lease *coordv1beta1.Lease + created bool + err error + ) + sleep := 100 * time.Millisecond + for { + lease, created, err = c.ensureLease() + if err == nil { + break + } + sleep = minDuration(2*sleep, maxBackoff) + klog.Errorf("failed to ensure node lease exists, will retry in %v, error: %v", sleep, err) + // backoff wait + c.clock.Sleep(sleep) + } + return lease, created +} + +// ensureLease creates the lease if it does not exist. Returns the lease and +// a bool (true if this call created the lease), or any error that occurs. +func (c *controller) ensureLease() (*coordv1beta1.Lease, bool, error) { + lease, err := c.leaseClient.Get(c.holderIdentity, metav1.GetOptions{}) + if apierrors.IsNotFound(err) { + // lease does not exist, create it + lease, err := c.leaseClient.Create(c.newLease(nil)) + if err != nil { + return nil, false, err + } + return lease, true, nil + } else if err != nil { + // unexpected error getting lease + return nil, false, err + } + // lease already existed + return lease, false, nil +} + +// retryUpdateLease attempts to update the lease for maxUpdateRetries, +// call this once you're sure the lease has been created +func (c *controller) retryUpdateLease(base *coordv1beta1.Lease) { + for i := 0; i < maxUpdateRetries; i++ { + _, err := c.leaseClient.Update(c.newLease(base)) + if err == nil { + return + } + klog.Errorf("failed to update node lease, error: %v", err) + if i > 0 && c.onRepeatedHeartbeatFailure != nil { + c.onRepeatedHeartbeatFailure() + } + } + klog.Errorf("failed %d attempts to update node lease, will retry after %v", maxUpdateRetries, c.renewInterval) +} + +// newLease constructs a new lease if base is nil, or returns a copy of base +// with desired state asserted on the copy. +func (c *controller) newLease(base *coordv1beta1.Lease) *coordv1beta1.Lease { + // Use the bare minimum set of fields; other fields exist for debugging/legacy, + // but we don't need to make node heartbeats more complicated by using them. + var lease *coordv1beta1.Lease + if base == nil { + lease = &coordv1beta1.Lease{ + ObjectMeta: metav1.ObjectMeta{ + Name: c.holderIdentity, + Namespace: corev1.NamespaceNodeLease, + }, + Spec: coordv1beta1.LeaseSpec{ + HolderIdentity: pointer.StringPtr(c.holderIdentity), + LeaseDurationSeconds: pointer.Int32Ptr(c.leaseDurationSeconds), + }, + } + } else { + lease = base.DeepCopy() + } + lease.Spec.RenewTime = &metav1.MicroTime{Time: c.clock.Now()} + + // Setting owner reference needs node's UID. Note that it is different from + // kubelet.nodeRef.UID. When lease is initially created, it is possible that + // the connection between master and node is not ready yet. So try to set + // owner reference every time when renewing the lease, until successful. + if lease.OwnerReferences == nil || len(lease.OwnerReferences) == 0 { + if node, err := c.client.CoreV1().Nodes().Get(c.holderIdentity, metav1.GetOptions{}); err == nil { + lease.OwnerReferences = []metav1.OwnerReference{ + { + APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version, + Kind: corev1.SchemeGroupVersion.WithKind("Node").Kind, + Name: c.holderIdentity, + UID: node.UID, + }, + } + } else { + klog.Errorf("failed to get node %q when trying to set owner ref to the node lease: %v", c.holderIdentity, err) + } + } + + return lease +} + +func minDuration(a, b time.Duration) time.Duration { + if a < b { + return a + } + return b +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/BUILD index a626ce19866..a82737108f8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/BUILD @@ -18,6 +18,7 @@ go_library( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters.go b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters.go index d70af91dd73..2633bea154d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters.go @@ -29,10 +29,12 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/errors" utilnet "k8s.io/apimachinery/pkg/util/net" utilfeature "k8s.io/apiserver/pkg/util/feature" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/features" + kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -57,6 +59,9 @@ type Setter func(node *v1.Node) error func NodeAddress(nodeIP net.IP, // typically Kubelet.nodeIP validateNodeIPFunc func(net.IP) error, // typically Kubelet.nodeIPValidator hostname string, // typically Kubelet.hostname + hostnameOverridden bool, // was the hostname force set? + externalCloudProvider bool, // typically Kubelet.externalCloudProvider + nodeAddressesFunc func() ([]v1.NodeAddress, error), // typically Kubelet.cloudResourceSyncManager.NodeAddresses ) Setter { return func(node *v1.Node) error { if nodeIP != nil { @@ -66,52 +71,78 @@ func NodeAddress(nodeIP net.IP, // typically Kubelet.nodeIP klog.V(2).Infof("Using node IP: %q", nodeIP.String()) } - { - var ipAddr net.IP - var err error - - // 1) Use nodeIP if set - // 2) If the user has specified an IP to HostnameOverride, use it - // 3) Lookup the IP from node name by DNS and use the first valid IPv4 address. - // If the node does not have a valid IPv4 address, use the first valid IPv6 address. - // 4) Try to get the IP from the network interface used as default gateway + if externalCloudProvider { if nodeIP != nil { - ipAddr = nodeIP - } else if addr := net.ParseIP(hostname); addr != nil { - ipAddr = addr - } else { - var addrs []net.IP - addrs, _ = net.LookupIP(node.Name) - for _, addr := range addrs { - if err = validateNodeIPFunc(addr); err == nil { - if addr.To4() != nil { - ipAddr = addr - break - } - if addr.To16() != nil && ipAddr == nil { - ipAddr = addr - } - } + if node.ObjectMeta.Annotations == nil { + node.ObjectMeta.Annotations = make(map[string]string) } + node.ObjectMeta.Annotations[kubeletapis.AnnotationProvidedIPAddr] = nodeIP.String() + } + // We rely on the external cloud provider to supply the addresses. + return nil + } - if ipAddr == nil { - ipAddr, err = utilnet.ChooseHostInterface() + var ipAddr net.IP + var err error + + // 1) Use nodeIP if set + // 2) If the user has specified an IP to HostnameOverride, use it + // 3) Lookup the IP from node name by DNS and use the first valid IPv4 address. + // If the node does not have a valid IPv4 address, use the first valid IPv6 address. + // 4) Try to get the IP from the network interface used as default gateway + if nodeIP != nil { + ipAddr = nodeIP + } else if addr := net.ParseIP(hostname); addr != nil { + ipAddr = addr + } else { + var addrs []net.IP + addrs, _ = net.LookupIP(node.Name) + for _, addr := range addrs { + if err = validateNodeIPFunc(addr); err == nil { + if addr.To4() != nil { + ipAddr = addr + break + } + if addr.To16() != nil && ipAddr == nil { + ipAddr = addr + } } } if ipAddr == nil { - // We tried everything we could, but the IP address wasn't fetchable; error out - return fmt.Errorf("can't get ip address of node %s. error: %v", node.Name, err) - } - node.Status.Addresses = []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: ipAddr.String()}, - {Type: v1.NodeHostName, Address: hostname}, + ipAddr, err = utilnet.ChooseHostInterface() } } + + if ipAddr == nil { + // We tried everything we could, but the IP address wasn't fetchable; error out + return fmt.Errorf("can't get ip address of node %s. error: %v", node.Name, err) + } + node.Status.Addresses = []v1.NodeAddress{ + {Type: v1.NodeInternalIP, Address: ipAddr.String()}, + {Type: v1.NodeHostName, Address: hostname}, + } return nil } } +func hasAddressType(addresses []v1.NodeAddress, addressType v1.NodeAddressType) bool { + for _, address := range addresses { + if address.Type == addressType { + return true + } + } + return false +} +func hasAddressValue(addresses []v1.NodeAddress, addressValue string) bool { + for _, address := range addresses { + if address.Address == addressValue { + return true + } + } + return false +} + // MachineInfo returns a Setter that updates machine-related information on the node. func MachineInfo(nodeName string, maxPods int, @@ -173,7 +204,9 @@ func MachineInfo(nodeName string, // capacity for every node status request initialCapacity := capacityFunc() if initialCapacity != nil { - node.Status.Capacity[v1.ResourceEphemeralStorage] = initialCapacity[v1.ResourceEphemeralStorage] + if v, exists := initialCapacity[v1.ResourceEphemeralStorage]; exists { + node.Status.Capacity[v1.ResourceEphemeralStorage] = v + } } } @@ -339,8 +372,9 @@ func GoRuntime() Setter { // ReadyCondition returns a Setter that updates the v1.NodeReady condition on the node. func ReadyCondition( nowFunc func() time.Time, // typically Kubelet.clock.Now - runtimeErrorsFunc func() []string, // typically Kubelet.runtimeState.runtimeErrors - networkErrorsFunc func() []string, // typically Kubelet.runtimeState.networkErrors + runtimeErrorsFunc func() error, // typically Kubelet.runtimeState.runtimeErrors + networkErrorsFunc func() error, // typically Kubelet.runtimeState.networkErrors + storageErrorsFunc func() error, // typically Kubelet.runtimeState.storageErrors appArmorValidateHostFunc func() error, // typically Kubelet.appArmorValidator.ValidateHost, might be nil depending on whether there was an appArmorValidator cmStatusFunc func() cm.Status, // typically Kubelet.containerManager.Status recordEventFunc func(eventType, event string), // typically Kubelet.recordNodeStatusEvent @@ -357,7 +391,7 @@ func ReadyCondition( Message: "kubelet is posting ready status", LastHeartbeatTime: currentTime, } - rs := append(runtimeErrorsFunc(), networkErrorsFunc()...) + errs := []error{runtimeErrorsFunc(), networkErrorsFunc(), storageErrorsFunc()} requiredCapacities := []v1.ResourceName{v1.ResourceCPU, v1.ResourceMemory, v1.ResourcePods} if utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { requiredCapacities = append(requiredCapacities, v1.ResourceEphemeralStorage) @@ -369,14 +403,14 @@ func ReadyCondition( } } if len(missingCapacities) > 0 { - rs = append(rs, fmt.Sprintf("Missing node capacity for resources: %s", strings.Join(missingCapacities, ", "))) + errs = append(errs, fmt.Errorf("Missing node capacity for resources: %s", strings.Join(missingCapacities, ", "))) } - if len(rs) > 0 { + if aggregatedErr := errors.NewAggregate(errs); aggregatedErr != nil { newNodeReadyCondition = v1.NodeCondition{ Type: v1.NodeReady, Status: v1.ConditionFalse, Reason: "KubeletNotReady", - Message: strings.Join(rs, ","), + Message: aggregatedErr.Error(), LastHeartbeatTime: currentTime, } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go index 4de9c721130..64bf43a1ef4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go @@ -189,12 +189,14 @@ func (g *GenericPLEG) relist() { klog.V(5).Infof("GenericPLEG: Relisting") if lastRelistTime := g.getRelistTime(); !lastRelistTime.IsZero() { - metrics.PLEGRelistInterval.Observe(metrics.SinceInMicroseconds(lastRelistTime)) + metrics.PLEGRelistInterval.Observe(metrics.SinceInSeconds(lastRelistTime)) + metrics.DeprecatedPLEGRelistInterval.Observe(metrics.SinceInMicroseconds(lastRelistTime)) } timestamp := g.clock.Now() defer func() { - metrics.PLEGRelistLatency.Observe(metrics.SinceInMicroseconds(timestamp)) + metrics.PLEGRelistDuration.Observe(metrics.SinceInSeconds(timestamp)) + metrics.DeprecatedPLEGRelistLatency.Observe(metrics.SinceInMicroseconds(timestamp)) }() // Get all the pods. @@ -244,7 +246,8 @@ func (g *GenericPLEG) relist() { // serially may take a while. We should be aware of this and // parallelize if needed. if err := g.updateCache(pod, pid); err != nil { - klog.Errorf("PLEG: Ignoring events for pod %s/%s: %v", pod.Name, pod.Namespace, err) + // Rely on updateCache calling GetPodStatus to log the actual error. + klog.V(4).Infof("PLEG: Ignoring events for pod %s/%s: %v", pod.Name, pod.Namespace, err) // make sure we try to reinspect the pod during the next relisting needsReinspection[pid] = pod @@ -264,7 +267,12 @@ func (g *GenericPLEG) relist() { if events[i].Type == ContainerChanged { continue } - g.eventChannel <- events[i] + select { + case g.eventChannel <- events[i]: + default: + metrics.PLEGDiscardEvents.WithLabelValues().Inc() + klog.Error("event channel is full, discard this relist() cycle event") + } } } @@ -274,7 +282,8 @@ func (g *GenericPLEG) relist() { klog.V(5).Infof("GenericPLEG: Reinspecting pods that previously failed inspection") for pid, pod := range g.podsToReinspect { if err := g.updateCache(pod, pid); err != nil { - klog.Errorf("PLEG: pod %s/%s failed reinspection: %v", pod.Name, pod.Namespace, err) + // Rely on updateCache calling GetPodStatus to log the actual error. + klog.V(5).Infof("PLEG: pod %s/%s failed reinspection: %v", pod.Name, pod.Namespace, err) needsReinspection[pid] = pod } } @@ -335,7 +344,7 @@ func (g *GenericPLEG) cacheEnabled() bool { return g.cache != nil } -// Preserve an older cached status' pod IP if the new status has no pod IP +// getPodIP preserves an older cached status' pod IP if the new status has no pod IP // and its sandboxes have exited func (g *GenericPLEG) getPodIP(pid types.UID, status *kubecontainer.PodStatus) string { if status.IP != "" { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go index ce5c1c30c62..17f54184b16 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go @@ -168,20 +168,40 @@ func (pm *basicManager) UpdatePod(pod *v1.Pod) { } } +func isPodInTerminatedState(pod *v1.Pod) bool { + return pod.Status.Phase == v1.PodFailed || pod.Status.Phase == v1.PodSucceeded +} + // updatePodsInternal replaces the given pods in the current state of the // manager, updating the various indices. The caller is assumed to hold the // lock. func (pm *basicManager) updatePodsInternal(pods ...*v1.Pod) { for _, pod := range pods { if pm.secretManager != nil { - // TODO: Consider detecting only status update and in such case do - // not register pod, as it doesn't really matter. - pm.secretManager.RegisterPod(pod) + if isPodInTerminatedState(pod) { + // Pods that are in terminated state and no longer running can be + // ignored as they no longer require access to secrets. + // It is especially important in watch-based manager, to avoid + // unnecessary watches for terminated pods waiting for GC. + pm.secretManager.UnregisterPod(pod) + } else { + // TODO: Consider detecting only status update and in such case do + // not register pod, as it doesn't really matter. + pm.secretManager.RegisterPod(pod) + } } if pm.configMapManager != nil { - // TODO: Consider detecting only status update and in such case do - // not register pod, as it doesn't really matter. - pm.configMapManager.RegisterPod(pod) + if isPodInTerminatedState(pod) { + // Pods that are in terminated state and no longer running can be + // ignored as they no longer require access to configmaps. + // It is especially important in watch-based manager, to avoid + // unnecessary watches for terminated pods waiting for GC. + pm.configMapManager.UnregisterPod(pod) + } else { + // TODO: Consider detecting only status update and in such case do + // not register pod, as it doesn't really matter. + pm.configMapManager.RegisterPod(pod) + } } podFullName := kubecontainer.GetPodFullName(pod) // This logic relies on a static pod and its mirror to have the same name. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/BUILD index d1a06818df3..08f24ee0f2b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/BUILD @@ -18,7 +18,6 @@ go_library( "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/format:go_default_library", - "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", @@ -41,10 +40,7 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "preemption_test.go", - ], + srcs = ["preemption_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/preemption.go b/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/preemption.go index 94a3afad6b5..751fcc246c9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/preemption.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/preemption/preemption.go @@ -30,7 +30,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/lifecycle" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" ) @@ -61,13 +60,13 @@ func NewCriticalPodAdmissionHandler(getPodsFunc eviction.ActivePodsFunc, killPod // HandleAdmissionFailure gracefully handles admission rejection, and, in some cases, // to allow admission of the pod despite its previous failure. -func (c *CriticalPodAdmissionHandler) HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []algorithm.PredicateFailureReason) (bool, []algorithm.PredicateFailureReason, error) { +func (c *CriticalPodAdmissionHandler) HandleAdmissionFailure(admitPod *v1.Pod, failureReasons []predicates.PredicateFailureReason) (bool, []predicates.PredicateFailureReason, error) { if !kubetypes.IsCriticalPod(admitPod) { return false, failureReasons, nil } // InsufficientResourceError is not a reason to reject a critical pod. // Instead of rejecting, we free up resources to admit it, if no other reasons for rejection exist. - nonResourceReasons := []algorithm.PredicateFailureReason{} + nonResourceReasons := []predicates.PredicateFailureReason{} resourceReasons := []*admissionRequirement{} for _, reason := range failureReasons { if r, ok := reason.(*predicates.InsufficientResourceError); ok { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober.go b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober.go index efec60c98d2..c489bcc9b72 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober.go @@ -66,10 +66,11 @@ func newProber( refManager *kubecontainer.RefManager, recorder record.EventRecorder) *prober { + const followNonLocalRedirects = false return &prober{ exec: execprobe.New(), - readinessHttp: httprobe.New(), - livenessHttp: httprobe.New(), + readinessHttp: httprobe.New(followNonLocalRedirects), + livenessHttp: httprobe.New(followNonLocalRedirects), tcp: tcprobe.New(), runner: runner, refManager: refManager, @@ -96,7 +97,7 @@ func (pb *prober) probe(probeType probeType, pod *v1.Pod, status v1.PodStatus, c } result, output, err := pb.runProbeWithRetries(probeType, probeSpec, pod, status, container, containerID, maxProbeRetries) - if err != nil || result != probe.Success { + if err != nil || (result != probe.Success && result != probe.Warning) { // Probe failed in one way or another. ref, hasRef := pb.refManager.GetRef(containerID) if !hasRef { @@ -115,7 +116,14 @@ func (pb *prober) probe(probeType probeType, pod *v1.Pod, status v1.PodStatus, c } return results.Failure, err } - klog.V(3).Infof("%s probe for %q succeeded", probeType, ctrName) + if result == probe.Warning { + if ref, hasRef := pb.refManager.GetRef(containerID); hasRef { + pb.recorder.Eventf(ref, v1.EventTypeWarning, events.ContainerProbeWarning, "%s probe warning: %s", probeType, output) + } + klog.V(3).Infof("%s probe for %q succeeded with a warning: %s", probeType, ctrName, output) + } else { + klog.V(3).Infof("%s probe for %q succeeded", probeType, ctrName) + } return results.Success, nil } @@ -274,6 +282,26 @@ func (eic execInContainer) SetStderr(out io.Writer) { //unimplemented } +func (eic execInContainer) SetEnv(env []string) { + //unimplemented +} + func (eic execInContainer) Stop() { //unimplemented } + +func (eic execInContainer) Start() error { + return fmt.Errorf("unimplemented") +} + +func (eic execInContainer) Wait() error { + return fmt.Errorf("unimplemented") +} + +func (eic execInContainer) StdoutPipe() (io.ReadCloser, error) { + return nil, fmt.Errorf("unimplemented") +} + +func (eic execInContainer) StderrPipe() (io.ReadCloser, error) { + return nil, fmt.Errorf("unimplemented") +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober_manager.go index a913598ef69..62106b95dba 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/prober_manager.go @@ -39,7 +39,13 @@ var ProberResults = prometheus.NewGaugeVec( Name: "probe_result", Help: "The result of a liveness or readiness probe for a container.", }, - []string{"probe_type", "container_name", "pod_name", "namespace", "pod_uid"}, + []string{"probe_type", + "container_name", + "container", + "pod_name", + "pod", + "namespace", + "pod_uid"}, ) // Manager manages pod probing. It creates a probe "worker" for every container that specifies a diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go index 0602419d7b6..295f7c40173 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go @@ -101,7 +101,9 @@ func newWorker( w.proberResultsMetricLabels = prometheus.Labels{ "probe_type": w.probeType.String(), "container_name": w.container.Name, + "container": w.container.Name, "pod_name": w.pod.Name, + "pod": w.pod.Name, "namespace": w.pod.Namespace, "pod_uid": string(w.pod.UID), } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/BUILD index 634175a6e93..e068804aabe 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/BUILD @@ -11,6 +11,7 @@ go_test( srcs = ["policy_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/apis/scheduling:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", ], @@ -25,6 +26,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubelet/qos", deps = [ "//pkg/apis/core/v1/helper/qos:go_default_library", + "//pkg/kubelet/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go index b7177d2a4fd..344b0d99ce9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go @@ -17,8 +17,9 @@ limitations under the License. package qos import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" + "k8s.io/kubernetes/pkg/kubelet/types" ) const ( @@ -41,6 +42,11 @@ const ( // and 1000. Containers with higher OOM scores are killed if the system runs out of memory. // See https://lwn.net/Articles/391222/ for more information. func GetContainerOOMScoreAdjust(pod *v1.Pod, container *v1.Container, memoryCapacity int64) int { + if types.IsCriticalPod(pod) { + // Critical pods should be the last to get killed. + return guaranteedOOMScoreAdj + } + switch v1qos.GetPodQOS(pod) { case v1.PodQOSGuaranteed: // Guaranteed containers should be the last to get killed. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/BUILD index cf19206ce2b..e0f0ebb213e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/BUILD @@ -45,7 +45,6 @@ go_test( name = "go_default_test", srcs = ["remote_runtime_test.go"], embed = [":go_default_library"], - tags = ["automanaged"], deps = [ "//pkg/kubelet/apis/cri:go_default_library", "//pkg/kubelet/apis/cri/testing:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/OWNERS index 30afd24444a..b1e7523c7fc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - feiskyer diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go index 17b90574dc0..93846f6d4a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go @@ -100,13 +100,14 @@ func (r *RemoteImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimea } // PullImage pulls an image with authentication config. -func (r *RemoteImageService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) { +func (r *RemoteImageService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error) { ctx, cancel := getContextWithCancel() defer cancel() resp, err := r.imageClient.PullImage(ctx, &runtimeapi.PullImageRequest{ - Image: image, - Auth: auth, + Image: image, + Auth: auth, + SandboxConfig: podSandboxConfig, }) if err != nil { klog.Errorf("PullImage %q from image service failed: %v", image.Image, err) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go index 16e16daff84..88b9bce9530 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "strings" + "sync" "time" "google.golang.org/grpc" @@ -36,8 +37,18 @@ import ( type RemoteRuntimeService struct { timeout time.Duration runtimeClient runtimeapi.RuntimeServiceClient + // Cache last per-container error message to reduce log spam + lastError map[string]string + // Time last per-container error message was printed + errorPrinted map[string]time.Time + errorMapLock sync.Mutex } +const ( + // How frequently to report identical errors + identicalErrorDelay = 1 * time.Minute +) + // NewRemoteRuntimeService creates a new internalapi.RuntimeService. func NewRemoteRuntimeService(endpoint string, connectionTimeout time.Duration) (internalapi.RuntimeService, error) { klog.V(3).Infof("Connecting to runtime service %s", endpoint) @@ -57,6 +68,8 @@ func NewRemoteRuntimeService(endpoint string, connectionTimeout time.Duration) ( return &RemoteRuntimeService{ timeout: connectionTimeout, runtimeClient: runtimeapi.NewRuntimeServiceClient(conn), + lastError: make(map[string]string), + errorPrinted: make(map[string]time.Time), }, nil } @@ -225,6 +238,10 @@ func (r *RemoteRuntimeService) StopContainer(containerID string, timeout int64) ctx, cancel := getContextWithTimeout(t) defer cancel() + r.errorMapLock.Lock() + delete(r.lastError, containerID) + delete(r.errorPrinted, containerID) + r.errorMapLock.Unlock() _, err := r.runtimeClient.StopContainer(ctx, &runtimeapi.StopContainerRequest{ ContainerId: containerID, Timeout: timeout, @@ -243,6 +260,10 @@ func (r *RemoteRuntimeService) RemoveContainer(containerID string) error { ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() + r.errorMapLock.Lock() + delete(r.lastError, containerID) + delete(r.errorPrinted, containerID) + r.errorMapLock.Unlock() _, err := r.runtimeClient.RemoveContainer(ctx, &runtimeapi.RemoveContainerRequest{ ContainerId: containerID, }) @@ -270,6 +291,18 @@ func (r *RemoteRuntimeService) ListContainers(filter *runtimeapi.ContainerFilter return resp.Containers, nil } +// Clean up any expired last-error timers +func (r *RemoteRuntimeService) cleanupErrorTimeouts() { + r.errorMapLock.Lock() + defer r.errorMapLock.Unlock() + for ID, timeout := range r.errorPrinted { + if time.Now().Sub(timeout) >= identicalErrorDelay { + delete(r.lastError, ID) + delete(r.errorPrinted, ID) + } + } +} + // ContainerStatus returns the container status. func (r *RemoteRuntimeService) ContainerStatus(containerID string) (*runtimeapi.ContainerStatus, error) { ctx, cancel := getContextWithTimeout(r.timeout) @@ -278,10 +311,21 @@ func (r *RemoteRuntimeService) ContainerStatus(containerID string) (*runtimeapi. resp, err := r.runtimeClient.ContainerStatus(ctx, &runtimeapi.ContainerStatusRequest{ ContainerId: containerID, }) + r.cleanupErrorTimeouts() + r.errorMapLock.Lock() + defer r.errorMapLock.Unlock() if err != nil { - klog.Errorf("ContainerStatus %q from runtime service failed: %v", containerID, err) + // Don't spam the log with endless messages about the same failure. + lastMsg, ok := r.lastError[containerID] + if !ok || err.Error() != lastMsg || time.Now().Sub(r.errorPrinted[containerID]) >= identicalErrorDelay { + klog.Errorf("ContainerStatus %q from runtime service failed: %v", containerID, err) + r.errorPrinted[containerID] = time.Now() + r.lastError[containerID] = err.Error() + } return nil, err } + delete(r.lastError, containerID) + delete(r.errorPrinted, containerID) if resp.Status != nil { if err := verifyContainerStatus(resp.Status); err != nil { @@ -456,10 +500,20 @@ func (r *RemoteRuntimeService) ContainerStats(containerID string) (*runtimeapi.C resp, err := r.runtimeClient.ContainerStats(ctx, &runtimeapi.ContainerStatsRequest{ ContainerId: containerID, }) + r.cleanupErrorTimeouts() + r.errorMapLock.Lock() + defer r.errorMapLock.Unlock() if err != nil { - klog.Errorf("ContainerStatus %q from runtime service failed: %v", containerID, err) + lastMsg, ok := r.lastError[containerID] + if !ok || err.Error() != lastMsg || time.Now().Sub(r.errorPrinted[containerID]) >= identicalErrorDelay { + klog.Errorf("ContainerStatus %q from runtime service failed: %v", containerID, err) + r.errorPrinted[containerID] = time.Now() + r.lastError[containerID] = err.Error() + } return nil, err } + delete(r.lastError, containerID) + delete(r.errorPrinted, containerID) return resp.GetStats(), nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/runtime.go index 7a739460be0..d51b3b5b296 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/runtime.go @@ -17,9 +17,12 @@ limitations under the License. package kubelet import ( + "errors" "fmt" "sync" "time" + + utilerrors "k8s.io/apimachinery/pkg/util/errors" ) type runtimeState struct { @@ -27,6 +30,7 @@ type runtimeState struct { lastBaseRuntimeSync time.Time baseRuntimeSyncThreshold time.Duration networkError error + storageError error cidr string healthChecks []*healthCheck } @@ -58,6 +62,12 @@ func (s *runtimeState) setNetworkState(err error) { s.networkError = err } +func (s *runtimeState) setStorageState(err error) { + s.Lock() + defer s.Unlock() + s.storageError = err +} + func (s *runtimeState) setPodCIDR(cidr string) { s.Lock() defer s.Unlock() @@ -70,32 +80,42 @@ func (s *runtimeState) podCIDR() string { return s.cidr } -func (s *runtimeState) runtimeErrors() []string { +func (s *runtimeState) runtimeErrors() error { s.RLock() defer s.RUnlock() - var ret []string + errs := []error{} if s.lastBaseRuntimeSync.IsZero() { - ret = append(ret, "container runtime status check may not have completed yet") + errs = append(errs, errors.New("container runtime status check may not have completed yet.")) } else if !s.lastBaseRuntimeSync.Add(s.baseRuntimeSyncThreshold).After(time.Now()) { - ret = append(ret, "container runtime is down") + errs = append(errs, errors.New("container runtime is down.")) } for _, hc := range s.healthChecks { if ok, err := hc.fn(); !ok { - ret = append(ret, fmt.Sprintf("%s is not healthy: %v", hc.name, err)) + errs = append(errs, fmt.Errorf("%s is not healthy: %v.", hc.name, err)) } } - return ret + return utilerrors.NewAggregate(errs) } -func (s *runtimeState) networkErrors() []string { +func (s *runtimeState) networkErrors() error { s.RLock() defer s.RUnlock() - var ret []string + errs := []error{} if s.networkError != nil { - ret = append(ret, s.networkError.Error()) + errs = append(errs, s.networkError) } - return ret + return utilerrors.NewAggregate(errs) +} + +func (s *runtimeState) storageErrors() error { + s.RLock() + defer s.RUnlock() + errs := []error{} + if s.storageError != nil { + errs = append(errs, s.storageError) + } + return utilerrors.NewAggregate(errs) } func newRuntimeState( @@ -104,6 +124,6 @@ func newRuntimeState( return &runtimeState{ lastBaseRuntimeSync: time.Time{}, baseRuntimeSyncThreshold: runtimeSyncThreshold, - networkError: fmt.Errorf("network state unknown"), + networkError: ErrNetworkUnknown, } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/BUILD new file mode 100644 index 00000000000..6cf04d3e8a0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/BUILD @@ -0,0 +1,42 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["runtimeclass_manager.go"], + importpath = "k8s.io/kubernetes/pkg/kubelet/runtimeclass", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/node/v1beta1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/kubelet/runtimeclass/testing:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["runtimeclass_manager_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/kubelet/runtimeclass/testing:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/runtimeclass_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/runtimeclass_manager.go new file mode 100644 index 00000000000..020275dcfaf --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/runtimeclass/runtimeclass_manager.go @@ -0,0 +1,78 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtimeclass + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/client-go/informers" + clientset "k8s.io/client-go/kubernetes" + nodev1beta1 "k8s.io/client-go/listers/node/v1beta1" +) + +// Manager caches RuntimeClass API objects, and provides accessors to the Kubelet. +type Manager struct { + informerFactory informers.SharedInformerFactory + lister nodev1beta1.RuntimeClassLister +} + +// NewManager returns a new RuntimeClass Manager. Run must be called before the manager can be used. +func NewManager(client clientset.Interface) *Manager { + const resyncPeriod = 0 + + factory := informers.NewSharedInformerFactory(client, resyncPeriod) + lister := factory.Node().V1beta1().RuntimeClasses().Lister() + + return &Manager{ + informerFactory: factory, + lister: lister, + } +} + +// Start starts syncing the RuntimeClass cache with the apiserver. +func (m *Manager) Start(stopCh <-chan struct{}) { + m.informerFactory.Start(stopCh) +} + +// WaitForCacheSync exposes the WaitForCacheSync method on the informer factory for testing +// purposes. +func (m *Manager) WaitForCacheSync(stopCh <-chan struct{}) { + m.informerFactory.WaitForCacheSync(stopCh) +} + +// LookupRuntimeHandler returns the RuntimeHandler string associated with the given RuntimeClass +// name (or the default of "" for nil). If the RuntimeClass is not found, it returns an +// errors.NotFound error. +func (m *Manager) LookupRuntimeHandler(runtimeClassName *string) (string, error) { + if runtimeClassName == nil || *runtimeClassName == "" { + // The default RuntimeClass always resolves to the empty runtime handler. + return "", nil + } + + name := *runtimeClassName + + rc, err := m.lister.Get(name) + if err != nil { + if errors.IsNotFound(err) { + return "", err + } + return "", fmt.Errorf("Failed to lookup RuntimeClass %s: %v", name, err) + } + + return rc.Handler, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/server/BUILD index 595bca6af35..81e921cae8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/core/v1/validation:go_default_library", "//pkg/kubelet/apis/podresources:go_default_library", "//pkg/kubelet/apis/podresources/v1alpha1:go_default_library", + "//pkg/kubelet/apis/resourcemetrics/v1alpha1:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/prober:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", @@ -43,7 +44,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/httplog:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/flushwriter:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library", + "//staging/src/k8s.io/component-base/logs:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/github.com/google/cadvisor/container:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/auth.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/auth.go index 8b8805cf5cf..285c3c4c195 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/auth.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/auth.go @@ -42,6 +42,7 @@ func NewKubeletAuth(authenticator authenticator.Request, authorizerAttributeGett return &KubeletAuth{authenticator, authorizerAttributeGetter, authorizer} } +// NewNodeAuthorizerAttributesGetter creates a new authorizer.RequestAttributesGetter for the node. func NewNodeAuthorizerAttributesGetter(nodeName types.NodeName) authorizer.RequestAttributesGetter { return nodeAuthorizerAttributesGetter{nodeName: nodeName} } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go index e7ccd58ae29..62b14f2051a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go @@ -14,10 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -// package portforward contains server-side logic for handling port forwarding requests. +// Package portforward contains server-side logic for handling port forwarding requests. package portforward -// The subprotocol "portforward.k8s.io" is used for port forwarding. +// ProtocolV1Name is the name of the subprotocol used for port forwarding. const ProtocolV1Name = "portforward.k8s.io" +// SupportedProtocols are the supported port forwarding protocols. var SupportedProtocols = []string{ProtocolV1Name} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go index 43393bd57ae..df122ee9368 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go @@ -33,7 +33,7 @@ import ( "k8s.io/klog" ) -func handleHttpStreams(req *http.Request, w http.ResponseWriter, portForwarder PortForwarder, podName string, uid types.UID, supportedPortForwardProtocols []string, idleTimeout, streamCreationTimeout time.Duration) error { +func handleHTTPStreams(req *http.Request, w http.ResponseWriter, portForwarder PortForwarder, podName string, uid types.UID, supportedPortForwardProtocols []string, idleTimeout, streamCreationTimeout time.Duration) error { _, err := httpstream.Handshake(req, w, supportedPortForwardProtocols) // negotiated protocol isn't currently used server side, but could be in the future if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go index 60a96e51a23..905fc8a7822 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go @@ -43,7 +43,7 @@ func ServePortForward(w http.ResponseWriter, req *http.Request, portForwarder Po if wsstream.IsWebSocketRequest(req) { err = handleWebSocketStreams(req, w, portForwarder, podName, uid, portForwardOptions, supportedProtocols, idleTimeout, streamCreationTimeout) } else { - err = handleHttpStreams(req, w, portForwarder, podName, uid, supportedProtocols, idleTimeout, streamCreationTimeout) + err = handleHTTPStreams(req, w, portForwarder, podName, uid, supportedProtocols, idleTimeout, streamCreationTimeout) } if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go index 1b23d74b519..e344f210dbb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go @@ -43,15 +43,15 @@ const ( v4Base64WebsocketProtocol = "v4." + wsstream.Base64ChannelWebSocketProtocol ) -// options contains details about which streams are required for -// port forwarding. +// V4Options contains details about which streams are required for port +// forwarding. // All fields included in V4Options need to be expressed explicitly in the // CRI (pkg/kubelet/apis/cri/{version}/api.proto) PortForwardRequest. type V4Options struct { Ports []int32 } -// newOptions creates a new options from the Request. +// NewV4Options creates a new options from the Request. func NewV4Options(req *http.Request) (*V4Options, error) { if !wsstream.IsWebSocketRequest(req) { return &V4Options{}, nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go index 24f9393abfb..a78404cb8bb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go @@ -14,5 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// package remotecommand contains functions related to executing commands in and attaching to pods. +// Package remotecommand contains functions related to executing commands in and attaching to pods. package remotecommand // import "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go index 8bff323ec7a..df5c8eee36d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go @@ -108,7 +108,7 @@ func createStreams(req *http.Request, w http.ResponseWriter, opts *Options, supp if wsstream.IsWebSocketRequest(req) { ctx, ok = createWebSocketStreams(req, w, opts, idleTimeout) } else { - ctx, ok = createHttpStreamStreams(req, w, opts, supportedStreamProtocols, idleTimeout, streamCreationTimeout) + ctx, ok = createHTTPStreamStreams(req, w, opts, supportedStreamProtocols, idleTimeout, streamCreationTimeout) } if !ok { return nil, false @@ -122,7 +122,7 @@ func createStreams(req *http.Request, w http.ResponseWriter, opts *Options, supp return ctx, true } -func createHttpStreamStreams(req *http.Request, w http.ResponseWriter, opts *Options, supportedStreamProtocols []string, idleTimeout, streamCreationTimeout time.Duration) (*context, bool) { +func createHTTPStreamStreams(req *http.Request, w http.ResponseWriter, opts *Options, supportedStreamProtocols []string, idleTimeout, streamCreationTimeout time.Duration) (*context, bool) { protocol, err := httpstream.Handshake(req, w, supportedStreamProtocols) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go index 141ed74cbfa..a9ba8435d14 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go @@ -25,13 +25,14 @@ import ( "net/http" "net/http/pprof" "net/url" + "path" "reflect" goruntime "runtime" "strconv" "strings" "time" - "github.com/emicklei/go-restful" + restful "github.com/emicklei/go-restful" cadvisormetrics "github.com/google/cadvisor/container" cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/google/cadvisor/metrics" @@ -39,7 +40,7 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -52,10 +53,11 @@ import ( "k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/server/routes" "k8s.io/apiserver/pkg/util/flushwriter" - "k8s.io/apiserver/pkg/util/logs" + "k8s.io/component-base/logs" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/v1/validation" + "k8s.io/kubernetes/pkg/kubelet/apis/resourcemetrics/v1alpha1" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/prober" "k8s.io/kubernetes/pkg/kubelet/server/portforward" @@ -67,12 +69,13 @@ import ( ) const ( - metricsPath = "/metrics" - cadvisorMetricsPath = "/metrics/cadvisor" - proberMetricsPath = "/metrics/probes" - specPath = "/spec/" - statsPath = "/stats/" - logsPath = "/logs/" + metricsPath = "/metrics" + cadvisorMetricsPath = "/metrics/cadvisor" + resourceMetricsPathPrefix = "/metrics/resource" + proberMetricsPath = "/metrics/probes" + specPath = "/spec/" + statsPath = "/stats/" + logsPath = "/logs/" ) // Server is a http.Handler which exposes kubelet functionality over HTTP. @@ -84,6 +87,7 @@ type Server struct { redirectContainerStreaming bool } +// TLSOptions holds the TLS options. type TLSOptions struct { Config *tls.Config CertFile string @@ -171,7 +175,7 @@ type AuthInterface interface { // HostInterface contains all the kubelet methods required by the server. // For testability. type HostInterface interface { - stats.StatsProvider + stats.Provider GetVersionInfo() (*cadvisorapi.VersionInfo, error) GetCachedMachineInfo() (*cadvisorapi.MachineInfo, error) GetRunningPods() ([]*v1.Pod, error) @@ -293,6 +297,12 @@ func (s *Server) InstallDefaultHandlers() { promhttp.HandlerFor(r, promhttp.HandlerOpts{ErrorHandling: promhttp.ContinueOnError}), ) + v1alpha1ResourceRegistry := prometheus.NewRegistry() + v1alpha1ResourceRegistry.MustRegister(stats.NewPrometheusResourceMetricCollector(s.resourceAnalyzer, v1alpha1.Config())) + s.restfulCont.Handle(path.Join(resourceMetricsPathPrefix, v1alpha1.Version), + promhttp.HandlerFor(v1alpha1ResourceRegistry, promhttp.HandlerOpts{ErrorHandling: promhttp.ContinueOnError}), + ) + // prober metrics are exposed under a different endpoint p := prometheus.NewRegistry() p.MustRegister(prober.ProberResults) @@ -518,7 +528,7 @@ func (s *Server) getContainerLogs(request *restful.Request, response *restful.Re pod, ok := s.host.GetPodByName(podNamespace, podID) if !ok { - response.WriteError(http.StatusNotFound, fmt.Errorf("pod %q does not exist\n", podID)) + response.WriteError(http.StatusNotFound, fmt.Errorf("pod %q does not exist", podID)) return } // Check if containerName is valid. @@ -538,12 +548,12 @@ func (s *Server) getContainerLogs(request *restful.Request, response *restful.Re } } if !containerExists { - response.WriteError(http.StatusNotFound, fmt.Errorf("container %q not found in pod %q\n", containerName, podID)) + response.WriteError(http.StatusNotFound, fmt.Errorf("container %q not found in pod %q", containerName, podID)) return } if _, ok := response.ResponseWriter.(http.Flusher); !ok { - response.WriteError(http.StatusInternalServerError, fmt.Errorf("unable to convert %v into http.Flusher, cannot show logs\n", reflect.TypeOf(response))) + response.WriteError(http.StatusInternalServerError, fmt.Errorf("unable to convert %v into http.Flusher, cannot show logs", reflect.TypeOf(response))) return } fw := flushwriter.Wrap(response.ResponseWriter) @@ -576,7 +586,7 @@ func (s *Server) getPods(request *restful.Request, response *restful.Response) { response.WriteError(http.StatusInternalServerError, err) return } - writeJsonResponse(response, data) + writeJSONResponse(response, data) } // getRunningPods returns a list of pods running on Kubelet. The list is @@ -593,7 +603,7 @@ func (s *Server) getRunningPods(request *restful.Request, response *restful.Resp response.WriteError(http.StatusInternalServerError, err) return } - writeJsonResponse(response, data) + writeJSONResponse(response, data) } // getLogs handles logs requests against the Kubelet. @@ -732,11 +742,11 @@ func (s *Server) getRun(request *restful.Request, response *restful.Response) { response.WriteError(http.StatusInternalServerError, err) return } - writeJsonResponse(response, data) + writeJSONResponse(response, data) } // Derived from go-restful writeJSON. -func writeJsonResponse(response *restful.Response, data []byte) { +func writeJSONResponse(response *restful.Response, data []byte) { if data == nil { response.WriteHeader(http.StatusOK) // do not write a nil representation @@ -819,7 +829,7 @@ func (a prometheusHostAdapter) GetMachineInfo() (*cadvisorapi.MachineInfo, error return a.host.GetCachedMachineInfo() } -func containerPrometheusLabelsFunc(s stats.StatsProvider) metrics.ContainerLabelsFunc { +func containerPrometheusLabelsFunc(s stats.Provider) metrics.ContainerLabelsFunc { // containerPrometheusLabels maps cAdvisor labels to prometheus labels. return func(c *cadvisorapi.ContainerInfo) map[string]string { // Prometheus requires that all metrics in the same family have the same labels, @@ -850,8 +860,10 @@ func containerPrometheusLabelsFunc(s stats.StatsProvider) metrics.ContainerLabel metrics.LabelName: name, metrics.LabelImage: image, "pod_name": podName, + "pod": podName, "namespace": namespace, "container_name": containerName, + "container": containerName, } return set } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/BUILD index dde9b3cbc7d..ebed2ee104a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/BUILD @@ -6,6 +6,7 @@ go_library( "doc.go", "fs_resource_analyzer.go", "handler.go", + "prometheus_resource_metrics.go", "resource_analyzer.go", "summary.go", "summary_sys_containers.go", @@ -27,13 +28,16 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", ], ) go_test( name = "go_default_test", srcs = [ + "prometheus_resource_metrics_test.go", "summary_test.go", "summary_windows_test.go", "volume_stat_calculator_test.go", @@ -46,7 +50,10 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", + "//vendor/github.com/prometheus/client_model/go:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/github.com/stretchr/testify/mock:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:android": [ "//pkg/kubelet/cm:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/fs_resource_analyzer.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/fs_resource_analyzer.go index 331a0b27ba6..b09eafc1bb3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/fs_resource_analyzer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/fs_resource_analyzer.go @@ -27,9 +27,7 @@ import ( "k8s.io/klog" ) -// Map to PodVolumeStats pointers since the addresses for map values are not constant and can cause pain -// if we need ever to get a pointer to one of the values (e.g. you can't) -type Cache map[types.UID]*volumeStatCalculator +type statCache map[types.UID]*volumeStatCalculator // fsResourceAnalyzerInterface is for embedding fs functions into ResourceAnalyzer type fsResourceAnalyzerInterface interface { @@ -38,7 +36,7 @@ type fsResourceAnalyzerInterface interface { // fsResourceAnalyzer provides stats about fs resource usage type fsResourceAnalyzer struct { - statsProvider StatsProvider + statsProvider Provider calcPeriod time.Duration cachedVolumeStats atomic.Value startOnce sync.Once @@ -47,12 +45,12 @@ type fsResourceAnalyzer struct { var _ fsResourceAnalyzerInterface = &fsResourceAnalyzer{} // newFsResourceAnalyzer returns a new fsResourceAnalyzer implementation -func newFsResourceAnalyzer(statsProvider StatsProvider, calcVolumePeriod time.Duration) *fsResourceAnalyzer { +func newFsResourceAnalyzer(statsProvider Provider, calcVolumePeriod time.Duration) *fsResourceAnalyzer { r := &fsResourceAnalyzer{ statsProvider: statsProvider, calcPeriod: calcVolumePeriod, } - r.cachedVolumeStats.Store(make(Cache)) + r.cachedVolumeStats.Store(make(statCache)) return r } @@ -70,8 +68,8 @@ func (s *fsResourceAnalyzer) Start() { // updateCachedPodVolumeStats calculates and caches the PodVolumeStats for every Pod known to the kubelet. func (s *fsResourceAnalyzer) updateCachedPodVolumeStats() { - oldCache := s.cachedVolumeStats.Load().(Cache) - newCache := make(Cache) + oldCache := s.cachedVolumeStats.Load().(statCache) + newCache := make(statCache) // Copy existing entries to new map, creating/starting new entries for pods missing from the cache for _, pod := range s.statsProvider.GetPods() { @@ -96,12 +94,12 @@ func (s *fsResourceAnalyzer) updateCachedPodVolumeStats() { // GetPodVolumeStats returns the PodVolumeStats for a given pod. Results are looked up from a cache that // is eagerly populated in the background, and never calculated on the fly. func (s *fsResourceAnalyzer) GetPodVolumeStats(uid types.UID) (PodVolumeStats, bool) { - cache := s.cachedVolumeStats.Load().(Cache) - if statCalc, found := cache[uid]; !found { + cache := s.cachedVolumeStats.Load().(statCache) + statCalc, found := cache[uid] + if !found { // TODO: Differentiate between stats being empty // See issue #20679 return PodVolumeStats{}, false - } else { - return statCalc.GetLatest() } + return statCalc.GetLatest() } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/handler.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/handler.go index f87e5c820c5..a5b9b4e5d8e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/handler.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/handler.go @@ -37,14 +37,21 @@ import ( "k8s.io/kubernetes/pkg/volume" ) -// Host methods required by stats handlers. -type StatsProvider interface { +// Provider hosts methods required by stats handlers. +type Provider interface { // The following stats are provided by either CRI or cAdvisor. // // ListPodStats returns the stats of all the containers managed by pods. ListPodStats() ([]statsapi.PodStats, error) - // ListPodCPUAndMemoryStats returns the CPU and memory stats of all the containers managed by pods. + // ListPodStatsAndUpdateCPUNanoCoreUsage updates the cpu nano core usage for + // the containers and returns the stats for all the pod-managed containers. ListPodCPUAndMemoryStats() ([]statsapi.PodStats, error) + // ListPodStatsAndUpdateCPUNanoCoreUsage returns the stats of all the + // containers managed by pods and force update the cpu usageNanoCores. + // This is a workaround for CRI runtimes that do not integrate with + // cadvisor. See https://github.com/kubernetes/kubernetes/issues/72788 + // for more details. + ListPodStatsAndUpdateCPUNanoCoreUsage() ([]statsapi.PodStats, error) // ImageFsStats returns the stats of the image filesystem. ImageFsStats() (*statsapi.FsStats, error) @@ -96,11 +103,12 @@ type StatsProvider interface { } type handler struct { - provider StatsProvider + provider Provider summaryProvider SummaryProvider } -func CreateHandlers(rootPath string, provider StatsProvider, summaryProvider SummaryProvider) *restful.WebService { +// CreateHandlers creates the REST handlers for the stats. +func CreateHandlers(rootPath string, provider Provider, summaryProvider SummaryProvider) *restful.WebService { h := &handler{provider, summaryProvider} ws := &restful.WebService{} @@ -130,7 +138,7 @@ func CreateHandlers(rootPath string, provider StatsProvider, summaryProvider Sum return ws } -type StatsRequest struct { +type statsRequest struct { // The name of the container for which to request stats. // Default: / // +optional @@ -158,7 +166,7 @@ type StatsRequest struct { Subcontainers bool `json:"subcontainers,omitempty"` } -func (r *StatsRequest) cadvisorRequest() *cadvisorapi.ContainerInfoRequest { +func (r *statsRequest) cadvisorRequest() *cadvisorapi.ContainerInfoRequest { return &cadvisorapi.ContainerInfoRequest{ NumStats: r.NumStats, Start: r.Start, @@ -166,9 +174,9 @@ func (r *StatsRequest) cadvisorRequest() *cadvisorapi.ContainerInfoRequest { } } -func parseStatsRequest(request *restful.Request) (StatsRequest, error) { +func parseStatsRequest(request *restful.Request) (statsRequest, error) { // Default request. - query := StatsRequest{ + query := statsRequest{ NumStats: 60, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/prometheus_resource_metrics.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/prometheus_resource_metrics.go new file mode 100644 index 00000000000..050bc20a73c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/prometheus_resource_metrics.go @@ -0,0 +1,118 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package stats + +import ( + "time" + + "k8s.io/klog" + stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" + + "github.com/prometheus/client_golang/prometheus" +) + +// NodeResourceMetric describes a metric for the node +type NodeResourceMetric struct { + Name string + Description string + ValueFn func(stats.NodeStats) (*float64, time.Time) +} + +func (n *NodeResourceMetric) desc() *prometheus.Desc { + return prometheus.NewDesc(n.Name, n.Description, []string{}, nil) +} + +// ContainerResourceMetric describes a metric for containers +type ContainerResourceMetric struct { + Name string + Description string + ValueFn func(stats.ContainerStats) (*float64, time.Time) +} + +func (n *ContainerResourceMetric) desc() *prometheus.Desc { + return prometheus.NewDesc(n.Name, n.Description, []string{"container", "pod", "namespace"}, nil) +} + +// ResourceMetricsConfig specifies which metrics to collect and export +type ResourceMetricsConfig struct { + NodeMetrics []NodeResourceMetric + ContainerMetrics []ContainerResourceMetric +} + +// NewPrometheusResourceMetricCollector returns a prometheus.Collector which exports resource metrics +func NewPrometheusResourceMetricCollector(provider SummaryProvider, config ResourceMetricsConfig) prometheus.Collector { + return &resourceMetricCollector{ + provider: provider, + config: config, + errors: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "scrape_error", + Help: "1 if there was an error while getting container metrics, 0 otherwise", + }), + } +} + +type resourceMetricCollector struct { + provider SummaryProvider + config ResourceMetricsConfig + errors prometheus.Gauge +} + +var _ prometheus.Collector = &resourceMetricCollector{} + +// Describe implements prometheus.Collector +func (rc *resourceMetricCollector) Describe(ch chan<- *prometheus.Desc) { + rc.errors.Describe(ch) + for _, metric := range rc.config.NodeMetrics { + ch <- metric.desc() + } + for _, metric := range rc.config.ContainerMetrics { + ch <- metric.desc() + } +} + +// Collect implements prometheus.Collector +// Since new containers are frequently created and removed, using the prometheus.Gauge Collector would +// leak metric collectors for containers or pods that no longer exist. Instead, implement +// prometheus.Collector in a way that only collects metrics for active containers. +func (rc *resourceMetricCollector) Collect(ch chan<- prometheus.Metric) { + rc.errors.Set(0) + defer rc.errors.Collect(ch) + summary, err := rc.provider.GetCPUAndMemoryStats() + if err != nil { + rc.errors.Set(1) + klog.Warningf("Error getting summary for resourceMetric prometheus endpoint: %v", err) + return + } + + for _, metric := range rc.config.NodeMetrics { + if value, timestamp := metric.ValueFn(summary.Node); value != nil { + ch <- prometheus.NewMetricWithTimestamp(timestamp, + prometheus.MustNewConstMetric(metric.desc(), prometheus.GaugeValue, *value)) + } + } + + for _, pod := range summary.Pods { + for _, container := range pod.Containers { + for _, metric := range rc.config.ContainerMetrics { + if value, timestamp := metric.ValueFn(container); value != nil { + ch <- prometheus.NewMetricWithTimestamp(timestamp, + prometheus.MustNewConstMetric(metric.desc(), prometheus.GaugeValue, *value, container.Name, pod.PodRef.Name, pod.PodRef.Namespace)) + } + } + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/resource_analyzer.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/resource_analyzer.go index 5def6ba714d..bcddff0b3c4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/resource_analyzer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/resource_analyzer.go @@ -37,7 +37,7 @@ type resourceAnalyzer struct { var _ ResourceAnalyzer = &resourceAnalyzer{} // NewResourceAnalyzer returns a new ResourceAnalyzer -func NewResourceAnalyzer(statsProvider StatsProvider, calVolumeFrequency time.Duration) ResourceAnalyzer { +func NewResourceAnalyzer(statsProvider Provider, calVolumeFrequency time.Duration) ResourceAnalyzer { fsAnalyzer := newFsResourceAnalyzer(statsProvider, calVolumeFrequency) summaryProvider := NewSummaryProvider(statsProvider) return &resourceAnalyzer{fsAnalyzer, summaryProvider} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/summary.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/summary.go index f8900249b67..44823b68d13 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/summary.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/summary.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/util" ) +// SummaryProvider provides summaries of the stats from Kubelet. type SummaryProvider interface { // Get provides a new Summary with the stats from Kubelet, // and will update some stats if updateStats is true @@ -43,14 +44,14 @@ type summaryProviderImpl struct { // systemBootTime is the time at which the system was started systemBootTime metav1.Time - provider StatsProvider + provider Provider } var _ SummaryProvider = &summaryProviderImpl{} // NewSummaryProvider returns a SummaryProvider using the stats provided by the // specified statsProvider. -func NewSummaryProvider(statsProvider StatsProvider) SummaryProvider { +func NewSummaryProvider(statsProvider Provider) SummaryProvider { kubeletCreationTime := metav1.Now() bootTime, err := util.GetBootTime() if err != nil { @@ -91,10 +92,16 @@ func (sp *summaryProviderImpl) Get(updateStats bool) (*statsapi.Summary, error) if err != nil { return nil, fmt.Errorf("failed to get imageFs stats: %v", err) } - podStats, err := sp.provider.ListPodStats() + var podStats []statsapi.PodStats + if updateStats { + podStats, err = sp.provider.ListPodStatsAndUpdateCPUNanoCoreUsage() + } else { + podStats, err = sp.provider.ListPodStats() + } if err != nil { return nil, fmt.Errorf("failed to list pod stats: %v", err) } + rlimit, err := sp.provider.RlimitStats() if err != nil { return nil, fmt.Errorf("failed to get rlimit stats: %v", err) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go index 220d8785f53..cd8ffdf8df8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go @@ -32,7 +32,7 @@ import ( // volumeStatCalculator calculates volume metrics for a given pod periodically in the background and caches the result type volumeStatCalculator struct { - statsProvider StatsProvider + statsProvider Provider jitterPeriod time.Duration pod *v1.Pod stopChannel chan struct{} @@ -49,7 +49,7 @@ type PodVolumeStats struct { } // newVolumeStatCalculator creates a new VolumeStatCalculator -func newVolumeStatCalculator(statsProvider StatsProvider, jitterPeriod time.Duration, pod *v1.Pod) *volumeStatCalculator { +func newVolumeStatCalculator(statsProvider Provider, jitterPeriod time.Duration, pod *v1.Pod) *volumeStatCalculator { return &volumeStatCalculator{ statsProvider: statsProvider, jitterPeriod: jitterPeriod, @@ -79,11 +79,11 @@ func (s *volumeStatCalculator) StopOnce() *volumeStatCalculator { // getLatest returns the most recent PodVolumeStats from the cache func (s *volumeStatCalculator) GetLatest() (PodVolumeStats, bool) { - if result := s.latest.Load(); result == nil { + result := s.latest.Load() + if result == nil { return PodVolumeStats{}, false - } else { - return result.(PodVolumeStats), true } + return result.(PodVolumeStats), true } // calcAndStoreStats calculates PodVolumeStats for a given pod and writes the result to the s.latest cache. @@ -102,8 +102,8 @@ func (s *volumeStatCalculator) calcAndStoreStats() { } // Call GetMetrics on each Volume and copy the result to a new VolumeStats.FsStats - ephemeralStats := []stats.VolumeStats{} - persistentStats := []stats.VolumeStats{} + var ephemeralStats []stats.VolumeStats + var persistentStats []stats.VolumeStats for name, v := range volumes { metric, err := v.GetMetrics() if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go index 62bcef79000..bc56f43fc8c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go @@ -17,7 +17,6 @@ limitations under the License. package streaming import ( - "fmt" "net/http" "strconv" @@ -26,16 +25,17 @@ import ( "google.golang.org/grpc/status" ) -func ErrorStreamingDisabled(method string) error { - return status.Errorf(codes.NotFound, fmt.Sprintf("streaming method %s disabled", method)) +// NewErrorStreamingDisabled creates an error for disabled streaming method. +func NewErrorStreamingDisabled(method string) error { + return status.Errorf(codes.NotFound, "streaming method %s disabled", method) } -// The error returned when the maximum number of in-flight requests is exceeded. -func ErrorTooManyInFlight() error { - return status.Errorf(codes.ResourceExhausted, "maximum number of in-flight requests exceeded") +// NewErrorTooManyInFlight creates an error for exceeding the maximum number of in-flight requests. +func NewErrorTooManyInFlight() error { + return status.Error(codes.ResourceExhausted, "maximum number of in-flight requests exceeded") } -// Translates a CRI streaming error into an appropriate HTTP response. +// WriteError translates a CRI streaming error into an appropriate HTTP response. func WriteError(err error, w http.ResponseWriter) error { var status int switch grpc.Code(err) { @@ -43,9 +43,9 @@ func WriteError(err error, w http.ResponseWriter) error { status = http.StatusNotFound case codes.ResourceExhausted: // We only expect to hit this if there is a DoS, so we just wait the full TTL. - // If this is ever hit in steady-state operations, consider increasing the MaxInFlight requests, + // If this is ever hit in steady-state operations, consider increasing the maxInFlight requests, // or plumbing through the time to next expiration. - w.Header().Set("Retry-After", strconv.Itoa(int(CacheTTL.Seconds()))) + w.Header().Set("Retry-After", strconv.Itoa(int(cacheTTL.Seconds()))) status = http.StatusTooManyRequests default: status = http.StatusInternalServerError diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go index f68f640be0b..32f9bf58fd6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go @@ -29,12 +29,12 @@ import ( ) var ( - // Timeout after which tokens become invalid. - CacheTTL = 1 * time.Minute - // The maximum number of in-flight requests to allow. - MaxInFlight = 1000 - // Length of the random base64 encoded token identifying the request. - TokenLen = 8 + // cacheTTL is the timeout after which tokens become invalid. + cacheTTL = 1 * time.Minute + // maxInFlight is the maximum number of in-flight requests to allow. + maxInFlight = 1000 + // tokenLen is the length of the random base64 encoded token identifying the request. + tokenLen = 8 ) // requestCache caches streaming (exec/attach/port-forward) requests and generates a single-use @@ -77,14 +77,14 @@ func (c *requestCache) Insert(req request) (token string, err error) { // Remove expired entries. c.gc() // If the cache is full, reject the request. - if c.ll.Len() == MaxInFlight { - return "", ErrorTooManyInFlight() + if c.ll.Len() == maxInFlight { + return "", NewErrorTooManyInFlight() } token, err = c.uniqueToken() if err != nil { return "", err } - ele := c.ll.PushFront(&cacheEntry{token, req, c.clock.Now().Add(CacheTTL)}) + ele := c.ll.PushFront(&cacheEntry{token, req, c.clock.Now().Add(cacheTTL)}) c.tokens[token] = ele return token, nil @@ -112,15 +112,15 @@ func (c *requestCache) Consume(token string) (req request, found bool) { // uniqueToken generates a random URL-safe token and ensures uniqueness. func (c *requestCache) uniqueToken() (string, error) { const maxTries = 10 - // Number of bytes to be TokenLen when base64 encoded. - tokenSize := math.Ceil(float64(TokenLen) * 6 / 8) + // Number of bytes to be tokenLen when base64 encoded. + tokenSize := math.Ceil(float64(tokenLen) * 6 / 8) rawToken := make([]byte, int(tokenSize)) for i := 0; i < maxTries; i++ { if _, err := rand.Read(rawToken); err != nil { return "", err } encoded := base64.RawURLEncoding.EncodeToString(rawToken) - token := encoded[:TokenLen] + token := encoded[:tokenLen] // If it's unique, return it. Otherwise retry. if _, exists := c.tokens[encoded]; !exists { return token, nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go index 0f80d44017d..382caed7889 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go @@ -39,7 +39,7 @@ import ( remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" ) -// The library interface to serve the stream requests. +// Server is the library interface to serve the stream requests. type Server interface { http.Handler @@ -59,7 +59,7 @@ type Server interface { Stop() error } -// The interface to execute the commands and provide the streams. +// Runtime is the interface to execute the commands and provide the streams. type Runtime interface { Exec(containerID string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) error Attach(containerID string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) error @@ -103,6 +103,7 @@ var DefaultConfig = Config{ SupportedPortForwardProtocols: portforward.SupportedProtocols, } +// NewServer creates a new Server for stream requests. // TODO(tallclair): Add auth(n/z) interface & handling. func NewServer(config Config, runtime Runtime) (Server, error) { s := &server{ @@ -245,9 +246,8 @@ func (s *server) Start(stayUp bool) error { } if s.config.TLSConfig != nil { return s.server.ServeTLS(listener, "", "") // Use certs from TLSConfig. - } else { - return s.server.Serve(listener) } + return s.server.Serve(listener) } func (s *server) Stop() error { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD index 07ca1b54540..7d24ec8cdf4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD @@ -5,11 +5,11 @@ go_library( srcs = [ "cadvisor_stats_provider.go", "cri_stats_provider.go", + "cri_stats_provider_others.go", + "cri_stats_provider_windows.go", "helper.go", "log_metrics_provider.go", "stats_provider.go", - "stats_provider_linux.go", - "stats_provider_unsupported.go", ], importpath = "k8s.io/kubernetes/pkg/kubelet/stats", visibility = ["//visibility:public"], @@ -24,6 +24,8 @@ go_library( "//pkg/kubelet/leaky:go_default_library", "//pkg/kubelet/pod:go_default_library", "//pkg/kubelet/server/stats:go_default_library", + "//pkg/kubelet/stats/pidlimit:go_default_library", + "//pkg/kubelet/status:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/volume:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -32,7 +34,13 @@ go_library( "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", "//vendor/k8s.io/klog:go_default_library", - ], + ] + select({ + "@io_bazel_rules_go//go/platform:windows": [ + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//vendor/github.com/Microsoft/hcsshim:go_default_library", + ], + "//conditions:default": [], + }), ) filegroup( @@ -44,7 +52,10 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//pkg/kubelet/stats/pidlimit:all-srcs", + ], tags = ["automanaged"], visibility = ["//visibility:public"], ) @@ -71,11 +82,14 @@ go_test( "//pkg/kubelet/leaky:go_default_library", "//pkg/kubelet/pod/testing:go_default_library", "//pkg/kubelet/server/stats:go_default_library", + "//pkg/kubelet/status/testing:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/volume:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/google/cadvisor/fs:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go index 9c0e612bde5..a916c2b68f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go @@ -33,6 +33,7 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/leaky" "k8s.io/kubernetes/pkg/kubelet/server/stats" + "k8s.io/kubernetes/pkg/kubelet/status" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) @@ -47,6 +48,8 @@ type cadvisorStatsProvider struct { resourceAnalyzer stats.ResourceAnalyzer // imageService is used to get the stats of the image filesystem. imageService kubecontainer.ImageService + // statusProvider is used to get pod metadata + statusProvider status.PodStatusProvider } // newCadvisorStatsProvider returns a containerStatsProvider that provides @@ -55,11 +58,13 @@ func newCadvisorStatsProvider( cadvisor cadvisor.Interface, resourceAnalyzer stats.ResourceAnalyzer, imageService kubecontainer.ImageService, + statusProvider status.PodStatusProvider, ) containerStatsProvider { return &cadvisorStatsProvider{ cadvisor: cadvisor, resourceAnalyzer: resourceAnalyzer, imageService: imageService, + statusProvider: statusProvider, } } @@ -114,7 +119,6 @@ func (p *cadvisorStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { // Special case for infrastructure container which is hidden from // the user and has network stats. podStats.Network = cadvisorInfoToNetworkStats("pod:"+ref.Namespace+"_"+ref.Name, &cinfo) - podStats.StartTime = metav1.NewTime(cinfo.Spec.CreationTime) } else { podStats.Containers = append(podStats.Containers, *cadvisorInfoToContainerStats(containerName, &cinfo, &rootFsInfo, &imageFsInfo)) } @@ -131,7 +135,7 @@ func (p *cadvisorStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { copy(ephemeralStats, vstats.EphemeralVolumes) podStats.VolumeStats = append(vstats.EphemeralVolumes, vstats.PersistentVolumes...) } - podStats.EphemeralStorage = calcEphemeralStorage(podStats.Containers, ephemeralStats, &rootFsInfo) + podStats.EphemeralStorage = calcEphemeralStorage(podStats.Containers, ephemeralStats, &rootFsInfo, nil, false) // Lookup the pod-level cgroup's CPU and memory stats podInfo := getCadvisorPodInfoFromPodUID(podUID, allInfos) if podInfo != nil { @@ -139,12 +143,26 @@ func (p *cadvisorStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { podStats.CPU = cpu podStats.Memory = memory } - result = append(result, *podStats) + + status, found := p.statusProvider.GetPodStatus(podUID) + if found && status.StartTime != nil && !status.StartTime.IsZero() { + podStats.StartTime = *status.StartTime + // only append stats if we were able to get the start time of the pod + result = append(result, *podStats) + } } return result, nil } +// ListPodStatsAndUpdateCPUNanoCoreUsage updates the cpu nano core usage for +// the containers and returns the stats for all the pod-managed containers. +// For cadvisor, cpu nano core usages are pre-computed and cached, so this +// function simply calls ListPodStats. +func (p *cadvisorStatsProvider) ListPodStatsAndUpdateCPUNanoCoreUsage() ([]statsapi.PodStats, error) { + return p.ListPodStats() +} + // ListPodCPUAndMemoryStats returns the cpu and memory stats of all the pod-managed containers. func (p *cadvisorStatsProvider) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, error) { infos, err := getCadvisorContainerInfo(p.cadvisor) @@ -207,53 +225,6 @@ func (p *cadvisorStatsProvider) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, return result, nil } -func calcEphemeralStorage(containers []statsapi.ContainerStats, volumes []statsapi.VolumeStats, rootFsInfo *cadvisorapiv2.FsInfo) *statsapi.FsStats { - result := &statsapi.FsStats{ - Time: metav1.NewTime(rootFsInfo.Timestamp), - AvailableBytes: &rootFsInfo.Available, - CapacityBytes: &rootFsInfo.Capacity, - InodesFree: rootFsInfo.InodesFree, - Inodes: rootFsInfo.Inodes, - } - for _, container := range containers { - addContainerUsage(result, &container) - } - for _, volume := range volumes { - result.UsedBytes = addUsage(result.UsedBytes, volume.FsStats.UsedBytes) - result.InodesUsed = addUsage(result.InodesUsed, volume.InodesUsed) - result.Time = maxUpdateTime(&result.Time, &volume.FsStats.Time) - } - return result -} - -func addContainerUsage(stat *statsapi.FsStats, container *statsapi.ContainerStats) { - if rootFs := container.Rootfs; rootFs != nil { - stat.Time = maxUpdateTime(&stat.Time, &rootFs.Time) - stat.InodesUsed = addUsage(stat.InodesUsed, rootFs.InodesUsed) - stat.UsedBytes = addUsage(stat.UsedBytes, rootFs.UsedBytes) - if logs := container.Logs; logs != nil { - stat.UsedBytes = addUsage(stat.UsedBytes, logs.UsedBytes) - stat.Time = maxUpdateTime(&stat.Time, &logs.Time) - } - } -} - -func maxUpdateTime(first, second *metav1.Time) metav1.Time { - if first.Before(second) { - return *second - } - return *first -} -func addUsage(first, second *uint64) *uint64 { - if first == nil { - return second - } else if second == nil { - return first - } - total := *first + *second - return &total -} - // ImageFsStats returns the stats of the filesystem for storing images. func (p *cadvisorStatsProvider) ImageFsStats() (*statsapi.FsStats, error) { imageFsInfo, err := p.cadvisor.ImagesFsInfo() diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go index b6d78b87404..f55c02b8d20 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go @@ -20,25 +20,38 @@ import ( "errors" "fmt" "path" + "path/filepath" "sort" "strings" + "sync" "time" cadvisorfs "github.com/google/cadvisor/fs" - "k8s.io/klog" - cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/klog" internalapi "k8s.io/kubernetes/pkg/kubelet/apis/cri" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/cadvisor" + kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/kuberuntime" "k8s.io/kubernetes/pkg/kubelet/server/stats" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) +var ( + // defaultCachePeriod is the default cache period for each cpuUsage. + defaultCachePeriod = 10 * time.Minute +) + +// cpuUsageRecord holds the cpu usage stats and the calculated usageNanoCores. +type cpuUsageRecord struct { + stats *runtimeapi.CpuUsage + usageNanoCores *uint64 +} + // criStatsProvider implements the containerStatsProvider interface by getting // the container stats from CRI. type criStatsProvider struct { @@ -55,6 +68,12 @@ type criStatsProvider struct { imageService internalapi.ImageManagerService // logMetrics provides the metrics for container logs logMetricsService LogMetricsService + // osInterface is the interface for syscalls. + osInterface kubecontainer.OSInterface + + // cpuUsageCache caches the cpu usage for containers. + cpuUsageCache map[string]*cpuUsageRecord + mutex sync.RWMutex } // newCRIStatsProvider returns a containerStatsProvider implementation that @@ -65,6 +84,7 @@ func newCRIStatsProvider( runtimeService internalapi.RuntimeService, imageService internalapi.ImageManagerService, logMetricsService LogMetricsService, + osInterface kubecontainer.OSInterface, ) containerStatsProvider { return &criStatsProvider{ cadvisor: cadvisor, @@ -72,11 +92,33 @@ func newCRIStatsProvider( runtimeService: runtimeService, imageService: imageService, logMetricsService: logMetricsService, + osInterface: osInterface, + cpuUsageCache: make(map[string]*cpuUsageRecord), } } // ListPodStats returns the stats of all the pod-managed containers. func (p *criStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { + // Don't update CPU nano core usage. + return p.listPodStats(false) +} + +// ListPodStatsAndUpdateCPUNanoCoreUsage updates the cpu nano core usage for +// the containers and returns the stats for all the pod-managed containers. +// This is a workaround because CRI runtimes do not supply nano core usages, +// so this function calculate the difference between the current and the last +// (cached) cpu stats to calculate this metrics. The implementation assumes a +// single caller to periodically invoke this function to update the metrics. If +// there exist multiple callers, the period used to compute the cpu usage may +// vary and the usage could be incoherent (e.g., spiky). If no caller calls +// this function, the cpu usage will stay nil. Right now, eviction manager is +// the only caller, and it calls this function every 10s. +func (p *criStatsProvider) ListPodStatsAndUpdateCPUNanoCoreUsage() ([]statsapi.PodStats, error) { + // Update CPU nano core usage. + return p.listPodStats(true) +} + +func (p *criStatsProvider) listPodStats(updateCPUNanoCoreUsage bool) ([]statsapi.PodStats, error) { // Gets node root filesystem information, which will be used to populate // the available and capacity bytes/inodes in container stats. rootFsInfo, err := p.cadvisor.RootFsInfo() @@ -124,6 +166,13 @@ func (p *criStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { } caInfos := getCRICadvisorStats(allInfos) + // get network stats for containers. + // This is only used on Windows. For other platforms, (nil, nil) should be returned. + containerNetworkStats, err := p.listContainerNetworkStats() + if err != nil { + return nil, fmt.Errorf("failed to list container network stats: %v", err) + } + for _, stats := range resp { containerID := stats.Attributes.Id container, found := containerMap[containerID] @@ -146,20 +195,22 @@ func (p *criStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { } // Fill available stats for full set of required pod stats - cs := p.makeContainerStats(stats, container, &rootFsInfo, fsIDtoInfo, podSandbox.GetMetadata().GetUid()) - p.addPodNetworkStats(ps, podSandboxID, caInfos, cs) + cs := p.makeContainerStats(stats, container, &rootFsInfo, fsIDtoInfo, podSandbox.GetMetadata(), updateCPUNanoCoreUsage) + p.addPodNetworkStats(ps, podSandboxID, caInfos, cs, containerNetworkStats[podSandboxID]) p.addPodCPUMemoryStats(ps, types.UID(podSandbox.Metadata.Uid), allInfos, cs) // If cadvisor stats is available for the container, use it to populate // container stats caStats, caFound := caInfos[containerID] if !caFound { - klog.V(4).Infof("Unable to find cadvisor stats for %q", containerID) + klog.V(5).Infof("Unable to find cadvisor stats for %q", containerID) } else { p.addCadvisorContainerStats(cs, &caStats) } ps.Containers = append(ps.Containers, *cs) } + // cleanup outdated caches. + p.cleanupOutdatedCaches() result := make([]statsapi.PodStats, 0, len(sandboxIDToPodStats)) for _, s := range sandboxIDToPodStats { @@ -242,6 +293,8 @@ func (p *criStatsProvider) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, erro } ps.Containers = append(ps.Containers, *cs) } + // cleanup outdated caches. + p.cleanupOutdatedCaches() result := make([]statsapi.PodStats, 0, len(sandboxIDToPodStats)) for _, s := range sandboxIDToPodStats { @@ -337,15 +390,27 @@ func buildPodStats(podSandbox *runtimeapi.PodSandbox) *statsapi.PodStats { } } -func (p *criStatsProvider) makePodStorageStats(s *statsapi.PodStats, rootFsInfo *cadvisorapiv2.FsInfo) *statsapi.PodStats { +func (p *criStatsProvider) makePodStorageStats(s *statsapi.PodStats, rootFsInfo *cadvisorapiv2.FsInfo) { + podNs := s.PodRef.Namespace + podName := s.PodRef.Name podUID := types.UID(s.PodRef.UID) - if vstats, found := p.resourceAnalyzer.GetPodVolumeStats(podUID); found { - ephemeralStats := make([]statsapi.VolumeStats, len(vstats.EphemeralVolumes)) - copy(ephemeralStats, vstats.EphemeralVolumes) - s.VolumeStats = append(vstats.EphemeralVolumes, vstats.PersistentVolumes...) - s.EphemeralStorage = calcEphemeralStorage(s.Containers, ephemeralStats, rootFsInfo) + vstats, found := p.resourceAnalyzer.GetPodVolumeStats(podUID) + if !found { + return } - return s + podLogDir := kuberuntime.BuildPodLogsDirectory(podNs, podName, podUID) + logStats, err := p.getPodLogStats(podLogDir, rootFsInfo) + if err != nil { + klog.Errorf("Unable to fetch pod log stats for path %s: %v ", podLogDir, err) + // If people do in-place upgrade, there might be pods still using + // the old log path. For those pods, no pod log stats is returned. + // We should continue generating other stats in that case. + // calcEphemeralStorage tolerants logStats == nil. + } + ephemeralStats := make([]statsapi.VolumeStats, len(vstats.EphemeralVolumes)) + copy(ephemeralStats, vstats.EphemeralVolumes) + s.VolumeStats = append(vstats.EphemeralVolumes, vstats.PersistentVolumes...) + s.EphemeralStorage = calcEphemeralStorage(s.Containers, ephemeralStats, rootFsInfo, logStats, true) } func (p *criStatsProvider) addPodNetworkStats( @@ -353,16 +418,26 @@ func (p *criStatsProvider) addPodNetworkStats( podSandboxID string, caInfos map[string]cadvisorapiv2.ContainerInfo, cs *statsapi.ContainerStats, + netStats *statsapi.NetworkStats, ) { caPodSandbox, found := caInfos[podSandboxID] // try get network stats from cadvisor first. if found { - ps.Network = cadvisorInfoToNetworkStats(ps.PodRef.Name, &caPodSandbox) + networkStats := cadvisorInfoToNetworkStats(ps.PodRef.Name, &caPodSandbox) + if networkStats != nil { + ps.Network = networkStats + return + } + } + + // Not found from cadvisor, get from netStats. + if netStats != nil { + ps.Network = netStats return } // TODO: sum Pod network stats from container stats. - klog.V(4).Infof("Unable to find cadvisor stats for sandbox %q", podSandboxID) + klog.V(4).Infof("Unable to find network stats for sandbox %q", podSandboxID) } func (p *criStatsProvider) addPodCPUMemoryStats( @@ -419,7 +494,8 @@ func (p *criStatsProvider) makeContainerStats( container *runtimeapi.Container, rootFsInfo *cadvisorapiv2.FsInfo, fsIDtoInfo map[runtimeapi.FilesystemIdentifier]*cadvisorapiv2.FsInfo, - uid string, + meta *runtimeapi.PodSandboxMetadata, + updateCPUNanoCoreUsage bool, ) *statsapi.ContainerStats { result := &statsapi.ContainerStats{ Name: stats.Attributes.Metadata.Name, @@ -435,9 +511,19 @@ func (p *criStatsProvider) makeContainerStats( if stats.Cpu.UsageCoreNanoSeconds != nil { result.CPU.UsageCoreNanoSeconds = &stats.Cpu.UsageCoreNanoSeconds.Value } + var usageNanoCores *uint64 + if updateCPUNanoCoreUsage { + usageNanoCores = p.getAndUpdateContainerUsageNanoCores(stats) + } else { + usageNanoCores = p.getContainerUsageNanoCores(stats) + } + if usageNanoCores != nil { + result.CPU.UsageNanoCores = usageNanoCores + } } else { result.CPU.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) - result.CPU.UsageCoreNanoSeconds = Uint64Ptr(0) + result.CPU.UsageCoreNanoSeconds = uint64Ptr(0) + result.CPU.UsageNanoCores = uint64Ptr(0) } if stats.Memory != nil { result.Memory.Time = metav1.NewTime(time.Unix(0, stats.Memory.Timestamp)) @@ -446,7 +532,7 @@ func (p *criStatsProvider) makeContainerStats( } } else { result.Memory.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) - result.Memory.WorkingSetBytes = Uint64Ptr(0) + result.Memory.WorkingSetBytes = uint64Ptr(0) } if stats.WritableLayer != nil { result.Rootfs.Time = metav1.NewTime(time.Unix(0, stats.WritableLayer.Timestamp)) @@ -475,8 +561,18 @@ func (p *criStatsProvider) makeContainerStats( result.Rootfs.Inodes = imageFsInfo.Inodes } } - containerLogPath := kuberuntime.BuildContainerLogsDirectory(types.UID(uid), container.GetMetadata().GetName()) - result.Logs = p.getContainerLogStats(containerLogPath, rootFsInfo) + // NOTE: This doesn't support the old pod log path, `/var/log/pods/UID`. For containers + // using old log path, empty log stats are returned. This is fine, because we don't + // officially support in-place upgrade anyway. + var ( + containerLogPath = kuberuntime.BuildContainerLogsDirectory(meta.GetNamespace(), + meta.GetName(), types.UID(meta.GetUid()), container.GetMetadata().GetName()) + err error + ) + result.Logs, err = p.getPathFsStats(containerLogPath, rootFsInfo) + if err != nil { + klog.Errorf("Unable to fetch container log stats for path %s: %v ", containerLogPath, err) + } return result } @@ -497,9 +593,15 @@ func (p *criStatsProvider) makeContainerCPUAndMemoryStats( if stats.Cpu.UsageCoreNanoSeconds != nil { result.CPU.UsageCoreNanoSeconds = &stats.Cpu.UsageCoreNanoSeconds.Value } + + usageNanoCores := p.getContainerUsageNanoCores(stats) + if usageNanoCores != nil { + result.CPU.UsageNanoCores = usageNanoCores + } } else { result.CPU.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) - result.CPU.UsageCoreNanoSeconds = Uint64Ptr(0) + result.CPU.UsageCoreNanoSeconds = uint64Ptr(0) + result.CPU.UsageNanoCores = uint64Ptr(0) } if stats.Memory != nil { result.Memory.Time = metav1.NewTime(time.Unix(0, stats.Memory.Timestamp)) @@ -508,12 +610,86 @@ func (p *criStatsProvider) makeContainerCPUAndMemoryStats( } } else { result.Memory.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) - result.Memory.WorkingSetBytes = Uint64Ptr(0) + result.Memory.WorkingSetBytes = uint64Ptr(0) } return result } +// getContainerUsageNanoCores gets the cached usageNanoCores. +func (p *criStatsProvider) getContainerUsageNanoCores(stats *runtimeapi.ContainerStats) *uint64 { + if stats == nil || stats.Attributes == nil { + return nil + } + + p.mutex.RLock() + defer p.mutex.RUnlock() + + cached, ok := p.cpuUsageCache[stats.Attributes.Id] + if !ok || cached.usageNanoCores == nil { + return nil + } + // return a copy of the usage + latestUsage := *cached.usageNanoCores + return &latestUsage +} + +// getContainerUsageNanoCores computes usageNanoCores based on the given and +// the cached usageCoreNanoSeconds, updates the cache with the computed +// usageNanoCores, and returns the usageNanoCores. +func (p *criStatsProvider) getAndUpdateContainerUsageNanoCores(stats *runtimeapi.ContainerStats) *uint64 { + if stats == nil || stats.Attributes == nil || stats.Cpu == nil || stats.Cpu.UsageCoreNanoSeconds == nil { + return nil + } + id := stats.Attributes.Id + usage, err := func() (*uint64, error) { + p.mutex.Lock() + defer p.mutex.Unlock() + + cached, ok := p.cpuUsageCache[id] + if !ok || cached.stats.UsageCoreNanoSeconds == nil { + // Cannot compute the usage now, but update the cached stats anyway + p.cpuUsageCache[id] = &cpuUsageRecord{stats: stats.Cpu, usageNanoCores: nil} + return nil, nil + } + + newStats := stats.Cpu + cachedStats := cached.stats + nanoSeconds := newStats.Timestamp - cachedStats.Timestamp + if nanoSeconds <= 0 { + return nil, fmt.Errorf("zero or negative interval (%v - %v)", newStats.Timestamp, cachedStats.Timestamp) + } + usageNanoCores := (newStats.UsageCoreNanoSeconds.Value - cachedStats.UsageCoreNanoSeconds.Value) * uint64(time.Second/time.Nanosecond) / uint64(nanoSeconds) + + // Update cache with new value. + usageToUpdate := usageNanoCores + p.cpuUsageCache[id] = &cpuUsageRecord{stats: newStats, usageNanoCores: &usageToUpdate} + + return &usageNanoCores, nil + }() + + if err != nil { + // This should not happen. Log now to raise visiblity + klog.Errorf("failed updating cpu usage nano core: %v", err) + } + return usage +} + +func (p *criStatsProvider) cleanupOutdatedCaches() { + p.mutex.Lock() + defer p.mutex.Unlock() + + for k, v := range p.cpuUsageCache { + if v == nil { + delete(p.cpuUsageCache, k) + } + + if time.Since(time.Unix(0, v.stats.Timestamp)) > defaultCachePeriod { + delete(p.cpuUsageCache, k) + } + } +} + // removeTerminatedContainer returns the specified container but with // the stats of the terminated containers removed. func removeTerminatedContainer(containers []*runtimeapi.Container) []*runtimeapi.Container { @@ -587,13 +763,11 @@ func getCRICadvisorStats(infos map[string]cadvisorapiv2.ContainerInfo) map[strin return stats } -// TODO Cache the metrics in container log manager -func (p *criStatsProvider) getContainerLogStats(path string, rootFsInfo *cadvisorapiv2.FsInfo) *statsapi.FsStats { +func (p *criStatsProvider) getPathFsStats(path string, rootFsInfo *cadvisorapiv2.FsInfo) (*statsapi.FsStats, error) { m := p.logMetricsService.createLogMetricsProvider(path) logMetrics, err := m.GetMetrics() if err != nil { - klog.Errorf("Unable to fetch container log stats for path %s: %v ", path, err) - return nil + return nil, err } result := &statsapi.FsStats{ Time: metav1.NewTime(rootFsInfo.Timestamp), @@ -606,5 +780,40 @@ func (p *criStatsProvider) getContainerLogStats(path string, rootFsInfo *cadviso result.UsedBytes = &usedbytes inodesUsed := uint64(logMetrics.InodesUsed.Value()) result.InodesUsed = &inodesUsed - return result + result.Time = maxUpdateTime(&result.Time, &logMetrics.Time) + return result, nil +} + +// getPodLogStats gets stats for logs under the pod log directory. Container logs usually exist +// under the container log directory. However, for some container runtimes, e.g. kata, gvisor, +// they may want to keep some pod level logs, in that case they can put those logs directly under +// the pod log directory. And kubelet will take those logs into account as part of pod ephemeral +// storage. +func (p *criStatsProvider) getPodLogStats(path string, rootFsInfo *cadvisorapiv2.FsInfo) (*statsapi.FsStats, error) { + files, err := p.osInterface.ReadDir(path) + if err != nil { + return nil, err + } + result := &statsapi.FsStats{ + Time: metav1.NewTime(rootFsInfo.Timestamp), + AvailableBytes: &rootFsInfo.Available, + CapacityBytes: &rootFsInfo.Capacity, + InodesFree: rootFsInfo.InodesFree, + Inodes: rootFsInfo.Inodes, + } + for _, f := range files { + if f.IsDir() { + continue + } + // Only include *files* under pod log directory. + fpath := filepath.Join(path, f.Name()) + fstats, err := p.getPathFsStats(fpath, rootFsInfo) + if err != nil { + return nil, fmt.Errorf("failed to get fsstats for %q: %v", fpath, err) + } + result.UsedBytes = addUsage(result.UsedBytes, fstats.UsedBytes) + result.InodesUsed = addUsage(result.InodesUsed, fstats.InodesUsed) + result.Time = maxUpdateTime(&result.Time, &fstats.Time) + } + return result, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_others.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_others.go new file mode 100644 index 00000000000..78a2c2befff --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_others.go @@ -0,0 +1,29 @@ +// +build !windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package stats + +import ( + statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" +) + +// listContainerNetworkStats returns the network stats of all the running containers. +// It should return (nil, nil) for platforms other than Windows. +func (p *criStatsProvider) listContainerNetworkStats() (map[string]*statsapi.NetworkStats, error) { + return nil, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_windows.go new file mode 100644 index 00000000000..cc9934e7827 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_windows.go @@ -0,0 +1,107 @@ +// +build windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package stats + +import ( + "time" + + "github.com/Microsoft/hcsshim" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/klog" + statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" +) + +// listContainerNetworkStats returns the network stats of all the running containers. +func (p *criStatsProvider) listContainerNetworkStats() (map[string]*statsapi.NetworkStats, error) { + containers, err := hcsshim.GetContainers(hcsshim.ComputeSystemQuery{ + Types: []string{"Container"}, + }) + if err != nil { + return nil, err + } + + stats := make(map[string]*statsapi.NetworkStats) + for _, c := range containers { + container, err := hcsshim.OpenContainer(c.ID) + if err != nil { + klog.V(4).Infof("Failed to open container %q with error '%v', continue to get stats for other containers", c.ID, err) + continue + } + + cstats, err := container.Statistics() + if err != nil { + klog.V(4).Infof("Failed to get statistics for container %q with error '%v', continue to get stats for other containers", c.ID, err) + continue + } + + if len(cstats.Network) > 0 { + stats[c.ID] = hcsStatsToNetworkStats(cstats.Timestamp, cstats.Network) + } + } + + return stats, nil +} + +// hcsStatsToNetworkStats converts hcsshim.Statistics.Network to statsapi.NetworkStats +func hcsStatsToNetworkStats(timestamp time.Time, hcsStats []hcsshim.NetworkStats) *statsapi.NetworkStats { + result := &statsapi.NetworkStats{ + Time: metav1.NewTime(timestamp), + Interfaces: make([]statsapi.InterfaceStats, 0), + } + + adapters := sets.NewString() + for _, stat := range hcsStats { + iStat, err := hcsStatsToInterfaceStats(stat) + if err != nil { + klog.Warningf("Failed to get HNS endpoint %q with error '%v', continue to get stats for other endpoints", stat.EndpointId, err) + continue + } + + // Only count each adapter once. + if adapters.Has(iStat.Name) { + continue + } + + result.Interfaces = append(result.Interfaces, *iStat) + adapters.Insert(iStat.Name) + } + + // TODO(feiskyer): add support of multiple interfaces for getting default interface. + if len(result.Interfaces) > 0 { + result.InterfaceStats = result.Interfaces[0] + } + + return result +} + +// hcsStatsToInterfaceStats converts hcsshim.NetworkStats to statsapi.InterfaceStats. +func hcsStatsToInterfaceStats(stat hcsshim.NetworkStats) (*statsapi.InterfaceStats, error) { + endpoint, err := hcsshim.GetHNSEndpointByID(stat.EndpointId) + if err != nil { + return nil, err + } + + return &statsapi.InterfaceStats{ + Name: endpoint.Name, + RxBytes: &stat.BytesReceived, + TxBytes: &stat.BytesSent, + }, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/helper.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/helper.go index a26790a5ec2..273205338bc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/helper.go @@ -20,11 +20,10 @@ import ( "fmt" "time" - "k8s.io/klog" - cadvisorapiv1 "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/klog" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/cadvisor" ) @@ -158,6 +157,10 @@ func cadvisorInfoToNetworkStats(name string, info *cadvisorapiv2.ContainerInfo) return nil } + if cstat.Network == nil { + return nil + } + iStats := statsapi.NetworkStats{ Time: metav1.NewTime(cstat.Timestamp), } @@ -327,6 +330,64 @@ func getUint64Value(value *uint64) uint64 { return *value } -func Uint64Ptr(i uint64) *uint64 { +func uint64Ptr(i uint64) *uint64 { return &i } + +func calcEphemeralStorage(containers []statsapi.ContainerStats, volumes []statsapi.VolumeStats, rootFsInfo *cadvisorapiv2.FsInfo, + podLogStats *statsapi.FsStats, isCRIStatsProvider bool) *statsapi.FsStats { + result := &statsapi.FsStats{ + Time: metav1.NewTime(rootFsInfo.Timestamp), + AvailableBytes: &rootFsInfo.Available, + CapacityBytes: &rootFsInfo.Capacity, + InodesFree: rootFsInfo.InodesFree, + Inodes: rootFsInfo.Inodes, + } + for _, container := range containers { + addContainerUsage(result, &container, isCRIStatsProvider) + } + for _, volume := range volumes { + result.UsedBytes = addUsage(result.UsedBytes, volume.FsStats.UsedBytes) + result.InodesUsed = addUsage(result.InodesUsed, volume.InodesUsed) + result.Time = maxUpdateTime(&result.Time, &volume.FsStats.Time) + } + if podLogStats != nil { + result.UsedBytes = addUsage(result.UsedBytes, podLogStats.UsedBytes) + result.InodesUsed = addUsage(result.InodesUsed, podLogStats.InodesUsed) + result.Time = maxUpdateTime(&result.Time, &podLogStats.Time) + } + return result +} + +func addContainerUsage(stat *statsapi.FsStats, container *statsapi.ContainerStats, isCRIStatsProvider bool) { + if rootFs := container.Rootfs; rootFs != nil { + stat.Time = maxUpdateTime(&stat.Time, &rootFs.Time) + stat.InodesUsed = addUsage(stat.InodesUsed, rootFs.InodesUsed) + stat.UsedBytes = addUsage(stat.UsedBytes, rootFs.UsedBytes) + if logs := container.Logs; logs != nil { + stat.UsedBytes = addUsage(stat.UsedBytes, logs.UsedBytes) + // We have accurate container log inode usage for CRI stats provider. + if isCRIStatsProvider { + stat.InodesUsed = addUsage(stat.InodesUsed, logs.InodesUsed) + } + stat.Time = maxUpdateTime(&stat.Time, &logs.Time) + } + } +} + +func maxUpdateTime(first, second *metav1.Time) metav1.Time { + if first.Before(second) { + return *second + } + return *first +} + +func addUsage(first, second *uint64) *uint64 { + if first == nil { + return second + } else if second == nil { + return first + } + total := *first + *second + return &total +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/BUILD new file mode 100644 index 00000000000..d88396b7d6a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/BUILD @@ -0,0 +1,65 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "pidlimit.go", + "pidlimit_linux.go", + "pidlimit_unsupported.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + ] + select({ + "@io_bazel_rules_go//go/platform:android": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:darwin": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:dragonfly": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:freebsd": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:nacl": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:netbsd": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:openbsd": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:plan9": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:solaris": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "@io_bazel_rules_go//go/platform:windows": [ + "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", + ], + "//conditions:default": [], + }), +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit.go new file mode 100644 index 00000000000..7356fa9c416 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit.go @@ -0,0 +1,26 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pidlimit + +import ( + "k8s.io/api/core/v1" +) + +const ( + // PIDs is the (internal) name for this resource + PIDs v1.ResourceName = "pid" +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_linux.go similarity index 89% rename from vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_linux.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_linux.go index f36890fc26c..d537f48f8b2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_linux.go @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package stats +package pidlimit import ( "io/ioutil" @@ -28,7 +28,8 @@ import ( statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" ) -func (p *StatsProvider) RlimitStats() (*statsapi.RlimitStats, error) { +// Stats provides basic information about max and current process count +func Stats() (*statsapi.RlimitStats, error) { rlimit := &statsapi.RlimitStats{} if content, err := ioutil.ReadFile("/proc/sys/kernel/pid_max"); err == nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_unsupported.go similarity index 83% rename from vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_unsupported.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_unsupported.go index a7b00d9db02..825c7852200 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/pidlimit/pidlimit_unsupported.go @@ -16,12 +16,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -package stats +package pidlimit import ( statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" ) -func (p *StatsProvider) RlimitStats() (*statsapi.RlimitStats, error) { +// Stats provides basic information about max and current process count +func Stats() (*statsapi.RlimitStats, error) { return nil, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider.go index 903f8678a64..761ca4ecc37 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/stats_provider.go @@ -28,6 +28,8 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubepod "k8s.io/kubernetes/pkg/kubelet/pod" "k8s.io/kubernetes/pkg/kubelet/server/stats" + "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit" + "k8s.io/kubernetes/pkg/kubelet/status" ) // NewCRIStatsProvider returns a StatsProvider that provides the node stats @@ -40,8 +42,10 @@ func NewCRIStatsProvider( runtimeService internalapi.RuntimeService, imageService internalapi.ImageManagerService, logMetricsService LogMetricsService, + osInterface kubecontainer.OSInterface, ) *StatsProvider { - return newStatsProvider(cadvisor, podManager, runtimeCache, newCRIStatsProvider(cadvisor, resourceAnalyzer, runtimeService, imageService, logMetricsService)) + return newStatsProvider(cadvisor, podManager, runtimeCache, newCRIStatsProvider(cadvisor, resourceAnalyzer, + runtimeService, imageService, logMetricsService, osInterface)) } // NewCadvisorStatsProvider returns a containerStatsProvider that provides both @@ -52,8 +56,9 @@ func NewCadvisorStatsProvider( podManager kubepod.Manager, runtimeCache kubecontainer.RuntimeCache, imageService kubecontainer.ImageService, + statusProvider status.PodStatusProvider, ) *StatsProvider { - return newStatsProvider(cadvisor, podManager, runtimeCache, newCadvisorStatsProvider(cadvisor, resourceAnalyzer, imageService)) + return newStatsProvider(cadvisor, podManager, runtimeCache, newCadvisorStatsProvider(cadvisor, resourceAnalyzer, imageService, statusProvider)) } // newStatsProvider returns a new StatsProvider that provides node stats from @@ -85,6 +90,7 @@ type StatsProvider struct { // containers managed by pods. type containerStatsProvider interface { ListPodStats() ([]statsapi.PodStats, error) + ListPodStatsAndUpdateCPUNanoCoreUsage() ([]statsapi.PodStats, error) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, error) ImageFsStats() (*statsapi.FsStats, error) ImageFsDevice() (string, error) @@ -94,6 +100,11 @@ type rlimitStatsProvider interface { RlimitStats() (*statsapi.RlimitStats, error) } +// RlimitStats returns base information about process count +func (p *StatsProvider) RlimitStats() (*statsapi.RlimitStats, error) { + return pidlimit.Stats() +} + // GetCgroupStats returns the stats of the cgroup with the cgroupName. Note that // this function doesn't generate filesystem stats. func (p *StatsProvider) GetCgroupStats(cgroupName string, updateStats bool) (*statsapi.ContainerStats, *statsapi.NetworkStats, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go index 37d5bfa0354..9697c986f26 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go @@ -131,7 +131,7 @@ func isPodStatusByKubeletEqual(oldStatus, status *v1.PodStatus) bool { for _, c := range status.Conditions { if kubetypes.PodConditionByKubelet(c.Type) { _, oc := podutil.GetPodCondition(oldCopy, c.Type) - if oc == nil || oc.Status != c.Status { + if oc == nil || oc.Status != c.Status || oc.Message != c.Message || oc.Reason != c.Reason { return false } } @@ -375,7 +375,7 @@ func (m *manager) updateStatusInternal(pod *v1.Pod, status v1.PodStatus, forceUp select { case m.podStatusChannel <- podStatusSyncRequest{pod.UID, newStatus}: - klog.V(5).Infof("Status Manager: adding pod: %q, with status: (%q, %v) to podStatusChannel", + klog.V(5).Infof("Status Manager: adding pod: %q, with status: (%d, %v) to podStatusChannel", pod.UID, newStatus.version, newStatus.status) return true default: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/token/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/token/OWNERS index d914c0d7195..c6c376de4e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/token/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/token/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-serviceaccounts-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/types/BUILD index b0fceedbbbd..cd0d4d8f448 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/types/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/BUILD @@ -32,7 +32,6 @@ go_test( name = "go_default_test", srcs = [ "labels_test.go", - "main_test.go", "pod_status_test.go", "pod_update_test.go", "types_test.go", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/cache/object_cache.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/cache/object_cache.go index 56d06908c32..98dbe40534a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/cache/object_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/cache/object_cache.go @@ -75,6 +75,7 @@ func (c *ObjectCache) Get(key string) (interface{}, error) { return value.(objectEntry).obj, nil } +// Add adds objectEntry by using a unique string as the key. func (c *ObjectCache) Add(key string, obj interface{}) error { err := c.cache.Add(objectEntry{key: key, obj: obj}) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go index f8c1100f47b..12f2a9c04db 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go @@ -259,7 +259,7 @@ func (c *cacheBasedManager) UnregisterPod(pod *v1.Pod) { // necessary for registered pods. // It implements the following logic: // - whenever a pod is created or updated, the cached versions of all objects -// is is referencing are invalidated +// is referencing are invalidated // - every GetObject() call tries to fetch the value from local cache; if it is // not there, invalidated or too old, we fetch it from apiserver and refresh the // value in cache; otherwise it is just fetched from cache diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/manager.go index 4d4b958d0a6..2c983d35d22 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/manager.go @@ -32,10 +32,14 @@ type Manager interface { // i.e. should not block on network operations. // RegisterPod registers all objects referenced from a given pod. + // + // NOTE: All implementations of RegisterPod should be idempotent. RegisterPod(pod *v1.Pod) // UnregisterPod unregisters objects referenced from a given pod that are not // used by any other registered pod. + // + // NOTE: All implementations of UnregisterPod should be idempotent. UnregisterPod(pod *v1.Pod) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/README.md b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/README.md index 1b68c9c5079..300615f84c7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/README.md +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/README.md @@ -44,7 +44,7 @@ Here are the general rules that Kubelet plugin developers should follow: - The socket path needs to be unique within one directory, in normal case, each plugin type has its own sub directory, but the design does support socket file under any sub directory of PluginSockDir. - + - A plugin should clean up its own socket upon exiting or when a new instance comes up. A plugin should NOT remove any sockets belonging to other plugins. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta1/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta1/api.proto index 14aa7df2c4d..7f6cf218354 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta1/api.proto +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta1/api.proto @@ -1,3 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + syntax = 'proto3'; package v1beta1; diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta2/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta2/api.proto index e34697f3a66..62760647cd6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta2/api.proto +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta2/api.proto @@ -1,3 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + syntax = 'proto3'; package v1beta2; diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/queue/work_queue.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/queue/work_queue.go index 4075562f05c..5c66968c7f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/queue/work_queue.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/queue/work_queue.go @@ -41,6 +41,7 @@ type basicWorkQueue struct { var _ WorkQueue = &basicWorkQueue{} +// NewBasicWorkQueue returns a new basic WorkQueue with the provided clock func NewBasicWorkQueue(clock clock.Clock) WorkQueue { queue := make(map[types.UID]time.Time) return &basicWorkQueue{queue: queue, clock: clock} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/sliceutils/sliceutils.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/sliceutils/sliceutils.go index ff9fb56031f..359272eb401 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/sliceutils/sliceutils.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/sliceutils/sliceutils.go @@ -21,6 +21,7 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" ) +// StringInSlice returns true if s is in list func StringInSlice(s string, list []string) bool { for _, v := range list { if v == s { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volume_host.go b/vendor/k8s.io/kubernetes/pkg/kubelet/volume_host.go index 8837cf0b4ff..047a1a4b25d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volume_host.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volume_host.go @@ -24,11 +24,10 @@ import ( "k8s.io/klog" authenticationv1 "k8s.io/api/authentication/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" "k8s.io/kubernetes/pkg/kubelet/configmap" "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/secret" @@ -36,6 +35,7 @@ import ( "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" + "k8s.io/kubernetes/pkg/volume/util/subpath" ) // NewInitializedVolumePluginMgr returns a new instance of @@ -71,6 +71,7 @@ func NewInitializedVolumePluginMgr( // Compile-time check to ensure kubeletVolumeHost implements the VolumeHost interface var _ volume.VolumeHost = &kubeletVolumeHost{} +var _ volume.KubeletVolumeHost = &kubeletVolumeHost{} func (kvh *kubeletVolumeHost) GetPluginDir(pluginName string) string { return kvh.kubelet.getPluginDir(pluginName) @@ -84,6 +85,10 @@ type kubeletVolumeHost struct { configMapManager configmap.Manager } +func (kvh *kubeletVolumeHost) SetKubeletError(err error) { + kvh.kubelet.runtimeState.setStorageState(err) +} + func (kvh *kubeletVolumeHost) GetVolumeDevicePluginDir(pluginName string) string { return kvh.kubelet.getVolumeDevicePluginDir(pluginName) } @@ -112,8 +117,8 @@ func (kvh *kubeletVolumeHost) GetKubeClient() clientset.Interface { return kvh.kubelet.kubeClient } -func (kvh *kubeletVolumeHost) GetCSIClient() csiclientset.Interface { - return kvh.kubelet.csiClient +func (kvh *kubeletVolumeHost) GetSubpather() subpath.Interface { + return kvh.kubelet.subpather } func (kvh *kubeletVolumeHost) NewWrapperMounter( diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/BUILD index 269eb189192..f967754b53f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/BUILD @@ -8,7 +8,10 @@ load( go_library( name = "go_default_library", - srcs = ["volume_manager.go"], + srcs = [ + "volume_manager.go", + "volume_manager_fake.go", + ], importpath = "k8s.io/kubernetes/pkg/kubelet/volumemanager", deps = [ "//pkg/kubelet/config:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/OWNERS index 0f0dc72d717..ca99990f73d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/cache/actual_state_of_world.go b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/cache/actual_state_of_world.go index 3f7ddcf484f..d20ca706147 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/cache/actual_state_of_world.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/cache/actual_state_of_world.go @@ -311,6 +311,11 @@ func (asw *actualStateOfWorld) MarkVolumeAsAttached( return asw.addVolume(volumeName, volumeSpec, devicePath) } +func (asw *actualStateOfWorld) MarkVolumeAsUncertain( + volumeName v1.UniqueVolumeName, volumeSpec *volume.Spec, _ types.NodeName) error { + return nil +} + func (asw *actualStateOfWorld) MarkVolumeAsDetached( volumeName v1.UniqueVolumeName, nodeName types.NodeName) { asw.DeleteVolume(volumeName) @@ -535,7 +540,7 @@ func (asw *actualStateOfWorld) MarkFSResizeRequired( } volumePlugin, err := - asw.volumePluginMgr.FindExpandablePluginBySpec(podObj.volumeSpec) + asw.volumePluginMgr.FindNodeExpandablePluginBySpec(podObj.volumeSpec) if err != nil || volumePlugin == nil { // Log and continue processing klog.Errorf( diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/BUILD index a41a69e0cf5..f038b0d32e6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/BUILD @@ -47,10 +47,7 @@ filegroup( go_test( name = "go_default_test", - srcs = [ - "desired_state_of_world_populator_test.go", - "main_test.go", - ], + srcs = ["desired_state_of_world_populator_test.go"], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go index 940357a4a50..e84058c4368 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go @@ -442,7 +442,7 @@ func (dswp *desiredStateOfWorldPopulator) markPodProcessed( dswp.pods.processedPods[podName] = true } -// markPodProcessed removes the specified pod from processedPods +// deleteProcessedPod removes the specified pod from processedPods func (dswp *desiredStateOfWorldPopulator) deleteProcessedPod( podName volumetypes.UniquePodName) { dswp.pods.Lock() diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/BUILD index 53508804484..4d2a960c7b5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/BUILD @@ -14,10 +14,8 @@ go_library( "//pkg/features:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/volumemanager/cache:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/nestedpendingoperations:go_default_library", @@ -30,15 +28,14 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "reconciler_test.go", - ], + srcs = ["reconciler_test.go"], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconciler.go b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconciler.go index b1d7bc3bf12..0bba0ae7b09 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconciler.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconciler.go @@ -36,15 +36,15 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" volumepkg "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations" "k8s.io/kubernetes/pkg/volume/util/operationexecutor" volumetypes "k8s.io/kubernetes/pkg/volume/util/types" + utilpath "k8s.io/utils/path" + utilstrings "k8s.io/utils/strings" ) // Reconciler runs a periodic loop to reconcile the desired state of the world @@ -89,7 +89,7 @@ type Reconciler interface { // safely (prevents more than one operation from being triggered on the same // volume) // mounter - mounter passed in from kubelet, passed down unmount path -// volumePluginMrg - volume plugin manager passed from kubelet +// volumePluginMgr - volume plugin manager passed from kubelet func NewReconciler( kubeClient clientset.Interface, controllerAttachDetachEnabled bool, @@ -658,12 +658,12 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { for _, volumeDir := range volumesDirInfo { pluginName := volumeDir.Name() volumePluginPath := path.Join(volumesDir, pluginName) - volumePluginDirs, err := utilfile.ReadDirNoStat(volumePluginPath) + volumePluginDirs, err := utilpath.ReadDirNoStat(volumePluginPath) if err != nil { klog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err) continue } - unescapePluginName := utilstrings.UnescapeQualifiedNameForDisk(pluginName) + unescapePluginName := utilstrings.UnescapeQualifiedName(pluginName) for _, volumeName := range volumePluginDirs { volumePath := path.Join(volumePluginPath, volumeName) klog.V(5).Infof("podName: %v, volume path from volume plugin directory: %v, ", podName, volumePath) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager_fake.go b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager_fake.go new file mode 100644 index 00000000000..b21d34a14ce --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager_fake.go @@ -0,0 +1,99 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package volumemanager + +import ( + "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/container" + "k8s.io/kubernetes/pkg/volume/util/types" +) + +// FakeVolumeManager is a test implementation that just tracks calls +type FakeVolumeManager struct { + volumes map[v1.UniqueVolumeName]bool + reportedInUse map[v1.UniqueVolumeName]bool +} + +// NewFakeVolumeManager creates a new VolumeManager test instance +func NewFakeVolumeManager(initialVolumes []v1.UniqueVolumeName) *FakeVolumeManager { + volumes := map[v1.UniqueVolumeName]bool{} + for _, v := range initialVolumes { + volumes[v] = true + } + return &FakeVolumeManager{ + volumes: volumes, + reportedInUse: map[v1.UniqueVolumeName]bool{}, + } +} + +// Run is not implemented +func (f *FakeVolumeManager) Run(sourcesReady config.SourcesReady, stopCh <-chan struct{}) { +} + +// WaitForAttachAndMount is not implemented +func (f *FakeVolumeManager) WaitForAttachAndMount(pod *v1.Pod) error { + return nil +} + +// GetMountedVolumesForPod is not implemented +func (f *FakeVolumeManager) GetMountedVolumesForPod(podName types.UniquePodName) container.VolumeMap { + return nil +} + +// GetExtraSupplementalGroupsForPod is not implemented +func (f *FakeVolumeManager) GetExtraSupplementalGroupsForPod(pod *v1.Pod) []int64 { + return nil +} + +// GetVolumesInUse returns a list of the initial volumes +func (f *FakeVolumeManager) GetVolumesInUse() []v1.UniqueVolumeName { + inuse := []v1.UniqueVolumeName{} + for v := range f.volumes { + inuse = append(inuse, v) + } + return inuse +} + +// ReconcilerStatesHasBeenSynced is not implemented +func (f *FakeVolumeManager) ReconcilerStatesHasBeenSynced() bool { + return true +} + +// VolumeIsAttached is not implemented +func (f *FakeVolumeManager) VolumeIsAttached(volumeName v1.UniqueVolumeName) bool { + return false +} + +// MarkVolumesAsReportedInUse adds the given volumes to the reportedInUse map +func (f *FakeVolumeManager) MarkVolumesAsReportedInUse(volumesReportedAsInUse []v1.UniqueVolumeName) { + for _, reportedVolume := range volumesReportedAsInUse { + if _, ok := f.volumes[reportedVolume]; ok { + f.reportedInUse[reportedVolume] = true + } + } +} + +// GetVolumesReportedInUse is a test function only that returns a list of volumes +// from the reportedInUse map +func (f *FakeVolumeManager) GetVolumesReportedInUse() []v1.UniqueVolumeName { + inuse := []v1.UniqueVolumeName{} + for reportedVolume := range f.reportedInUse { + inuse = append(inuse, reportedVolume) + } + return inuse +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/BUILD index 25afdd4cfc0..b3a1150d791 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/BUILD @@ -4,6 +4,7 @@ go_library( name = "go_default_library", srcs = [ "doc.go", + "network_stats.go", "perfcounter_nodestats.go", "perfcounters.go", "version.go", @@ -13,6 +14,7 @@ go_library( visibility = ["//visibility:public"], deps = select({ "@io_bazel_rules_go//go/platform:windows": [ + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/github.com/JeffAshton/win_pdh:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/network_stats.go b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/network_stats.go new file mode 100644 index 00000000000..5ff1d2a7be4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/network_stats.go @@ -0,0 +1,312 @@ +// +build windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package winstats + +import ( + "sync" + + cadvisorapi "github.com/google/cadvisor/info/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/klog" +) + +const ( + packetsReceivedPerSecondQuery = "\\Network Adapter(*)\\Packets Received/sec" + packetsSentPerSecondQuery = "\\Network Adapter(*)\\Packets Sent/sec" + bytesReceivedPerSecondQuery = "\\Network Adapter(*)\\Bytes Received/sec" + bytesSentPerSecondQuery = "\\Network Adapter(*)\\Bytes Sent/sec" + packetsReceivedDiscardedQuery = "\\Network Adapter(*)\\Packets Received Discarded" + packetsReceivedErrorsQuery = "\\Network Adapter(*)\\Packets Received Errors" + packetsOutboundDiscardedQuery = "\\Network Adapter(*)\\Packets Outbound Discarded" + packetsOutboundErrorsQuery = "\\Network Adapter(*)\\Packets Outbound Errors" +) + +// networkCounter contains the counters for network adapters. +type networkCounter struct { + packetsReceivedPerSecondCounter *perfCounter + packetsSentPerSecondCounter *perfCounter + bytesReceivedPerSecondCounter *perfCounter + bytesSentPerSecondCounter *perfCounter + packetsReceivedDiscardedCounter *perfCounter + packetsReceivedErrorsCounter *perfCounter + packetsOutboundDiscardedCounter *perfCounter + packetsOutboundErrorsCounter *perfCounter + + mu sync.RWMutex + adapterStats map[string]cadvisorapi.InterfaceStats +} + +func newNetworkCounters() (*networkCounter, error) { + packetsReceivedPerSecondCounter, err := newPerfCounter(packetsReceivedPerSecondQuery) + if err != nil { + return nil, err + } + + packetsSentPerSecondCounter, err := newPerfCounter(packetsSentPerSecondQuery) + if err != nil { + return nil, err + } + + bytesReceivedPerSecondCounter, err := newPerfCounter(bytesReceivedPerSecondQuery) + if err != nil { + return nil, err + } + + bytesSentPerSecondCounter, err := newPerfCounter(bytesSentPerSecondQuery) + if err != nil { + return nil, err + } + + packetsReceivedDiscardedCounter, err := newPerfCounter(packetsReceivedDiscardedQuery) + if err != nil { + return nil, err + } + + packetsReceivedErrorsCounter, err := newPerfCounter(packetsReceivedErrorsQuery) + if err != nil { + return nil, err + } + + packetsOutboundDiscardedCounter, err := newPerfCounter(packetsOutboundDiscardedQuery) + if err != nil { + return nil, err + } + + packetsOutboundErrorsCounter, err := newPerfCounter(packetsOutboundErrorsQuery) + if err != nil { + return nil, err + } + + return &networkCounter{ + packetsReceivedPerSecondCounter: packetsReceivedPerSecondCounter, + packetsSentPerSecondCounter: packetsSentPerSecondCounter, + bytesReceivedPerSecondCounter: bytesReceivedPerSecondCounter, + bytesSentPerSecondCounter: bytesSentPerSecondCounter, + packetsReceivedDiscardedCounter: packetsReceivedDiscardedCounter, + packetsReceivedErrorsCounter: packetsReceivedErrorsCounter, + packetsOutboundDiscardedCounter: packetsOutboundDiscardedCounter, + packetsOutboundErrorsCounter: packetsOutboundErrorsCounter, + adapterStats: map[string]cadvisorapi.InterfaceStats{}, + }, nil +} + +func (n *networkCounter) getData() ([]cadvisorapi.InterfaceStats, error) { + packetsReceivedPerSecondData, err := n.packetsReceivedPerSecondCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsReceivedPerSecond perf counter data; err: %v", err) + return nil, err + } + + packetsSentPerSecondData, err := n.packetsSentPerSecondCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsSentPerSecond perf counter data; err: %v", err) + return nil, err + } + + bytesReceivedPerSecondData, err := n.bytesReceivedPerSecondCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get bytesReceivedPerSecond perf counter data; err: %v", err) + return nil, err + } + + bytesSentPerSecondData, err := n.bytesSentPerSecondCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get bytesSentPerSecond perf counter data; err: %v", err) + return nil, err + } + + packetsReceivedDiscardedData, err := n.packetsReceivedDiscardedCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsReceivedDiscarded perf counter data; err: %v", err) + return nil, err + } + + packetsReceivedErrorsData, err := n.packetsReceivedErrorsCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsReceivedErrors perf counter data; err: %v", err) + return nil, err + } + + packetsOutboundDiscardedData, err := n.packetsOutboundDiscardedCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsOutboundDiscarded perf counter data; err: %v", err) + return nil, err + } + + packetsOutboundErrorsData, err := n.packetsOutboundErrorsCounter.getDataList() + if err != nil { + klog.Errorf("Unable to get packetsOutboundErrors perf counter data; err: %v", err) + return nil, err + } + + n.mu.Lock() + defer n.mu.Unlock() + n.mergeCollectedData( + packetsReceivedPerSecondData, + packetsSentPerSecondData, + bytesReceivedPerSecondData, + bytesSentPerSecondData, + packetsReceivedDiscardedData, + packetsReceivedErrorsData, + packetsOutboundDiscardedData, + packetsOutboundErrorsData, + ) + return n.listInterfaceStats(), nil +} + +// mergeCollectedData merges the collected data into cache. It should be invoked under lock protected. +func (n *networkCounter) mergeCollectedData(packetsReceivedPerSecondData, + packetsSentPerSecondData, + bytesReceivedPerSecondData, + bytesSentPerSecondData, + packetsReceivedDiscardedData, + packetsReceivedErrorsData, + packetsOutboundDiscardedData, + packetsOutboundErrorsData map[string]uint64) { + adapters := sets.NewString() + + // merge the collected data and list of adapters. + adapters.Insert(n.mergePacketsReceivedPerSecondData(packetsReceivedPerSecondData)...) + adapters.Insert(n.mergePacketsSentPerSecondData(packetsSentPerSecondData)...) + adapters.Insert(n.mergeBytesReceivedPerSecondData(bytesReceivedPerSecondData)...) + adapters.Insert(n.mergeBytesSentPerSecondData(bytesSentPerSecondData)...) + adapters.Insert(n.mergePacketsReceivedDiscardedData(packetsReceivedDiscardedData)...) + adapters.Insert(n.mergePacketsReceivedErrorsData(packetsReceivedErrorsData)...) + adapters.Insert(n.mergePacketsOutboundDiscardedData(packetsOutboundDiscardedData)...) + adapters.Insert(n.mergePacketsOutboundErrorsData(packetsOutboundErrorsData)...) + + // delete the cache for non-existing adapters. + for adapter := range n.adapterStats { + if !adapters.Has(adapter) { + delete(n.adapterStats, adapter) + } + } +} + +func (n *networkCounter) mergePacketsReceivedPerSecondData(packetsReceivedPerSecondData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsReceivedPerSecondData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.RxPackets = newStat.RxPackets + value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergePacketsSentPerSecondData(packetsSentPerSecondData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsSentPerSecondData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.TxPackets = newStat.TxPackets + value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergeBytesReceivedPerSecondData(bytesReceivedPerSecondData map[string]uint64) []string { + var adapters []string + for adapterName, value := range bytesReceivedPerSecondData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.RxBytes = newStat.RxBytes + value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergeBytesSentPerSecondData(bytesSentPerSecondData map[string]uint64) []string { + var adapters []string + for adapterName, value := range bytesSentPerSecondData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.TxBytes = newStat.TxBytes + value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergePacketsReceivedDiscardedData(packetsReceivedDiscardedData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsReceivedDiscardedData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.RxDropped = value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergePacketsReceivedErrorsData(packetsReceivedErrorsData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsReceivedErrorsData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.RxErrors = value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergePacketsOutboundDiscardedData(packetsOutboundDiscardedData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsOutboundDiscardedData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.TxDropped = value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) mergePacketsOutboundErrorsData(packetsOutboundErrorsData map[string]uint64) []string { + var adapters []string + for adapterName, value := range packetsOutboundErrorsData { + adapters = append(adapters, adapterName) + newStat := n.adapterStats[adapterName] + newStat.Name = adapterName + newStat.TxErrors = value + n.adapterStats[adapterName] = newStat + } + + return adapters +} + +func (n *networkCounter) listInterfaceStats() []cadvisorapi.InterfaceStats { + stats := make([]cadvisorapi.InterfaceStats, 0, len(n.adapterStats)) + for _, stat := range n.adapterStats { + stats = append(stats, stat) + } + return stats +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounter_nodestats.go b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounter_nodestats.go index 51fb15ae93d..578f6358813 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounter_nodestats.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounter_nodestats.go @@ -101,8 +101,13 @@ func (p *perfCounterNodeStatsClient) startMonitoring() error { return err } + networkAdapterCounter, err := newNetworkCounters() + if err != nil { + return err + } + go wait.Forever(func() { - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter) + p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) }, perfCounterUpdatePeriod) return nil @@ -138,7 +143,7 @@ func (p *perfCounterNodeStatsClient) getNodeInfo() nodeInfo { return p.nodeInfo } -func (p *perfCounterNodeStatsClient) collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter *perfCounter) { +func (p *perfCounterNodeStatsClient) collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter *perfCounter, networkAdapterCounter *networkCounter) { cpuValue, err := cpuCounter.getData() if err != nil { klog.Errorf("Unable to get cpu perf counter data; err: %v", err) @@ -157,12 +162,19 @@ func (p *perfCounterNodeStatsClient) collectMetricsData(cpuCounter, memWorkingSe return } + networkAdapterStats, err := networkAdapterCounter.getData() + if err != nil { + klog.Errorf("Unable to get network adapter perf counter data; err: %v", err) + return + } + p.mu.Lock() defer p.mu.Unlock() p.nodeMetrics = nodeMetrics{ cpuUsageCoreNanoSeconds: p.convertCPUValue(cpuValue), memoryPrivWorkingSetBytes: memWorkingSetValue, memoryCommittedBytes: memCommittedBytesValue, + interfaceStats: networkAdapterStats, timeStamp: time.Now(), } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounters.go b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounters.go index e5ed450b78e..91d91a5f80c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounters.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/perfcounters.go @@ -71,6 +71,7 @@ func newPerfCounter(counter string) (*perfCounter, error) { }, nil } +// getData is used for getting data without * in counter name. func (p *perfCounter) getData() (uint64, error) { ret := win_pdh.PdhCollectQueryData(p.queryHandle) if ret != win_pdh.ERROR_SUCCESS { @@ -100,3 +101,36 @@ func (p *perfCounter) getData() (uint64, error) { return data, nil } + +// getData is used for getting data with * in counter name. +func (p *perfCounter) getDataList() (map[string]uint64, error) { + ret := win_pdh.PdhCollectQueryData(p.queryHandle) + if ret != win_pdh.ERROR_SUCCESS { + return nil, fmt.Errorf("unable to collect data from counter. Error code is %x", ret) + } + + var bufSize, bufCount uint32 + var size = uint32(unsafe.Sizeof(win_pdh.PDH_FMT_COUNTERVALUE_ITEM_DOUBLE{})) + var emptyBuf [1]win_pdh.PDH_FMT_COUNTERVALUE_ITEM_DOUBLE // need at least 1 addressable null ptr. + data := map[string]uint64{} + + ret = win_pdh.PdhGetFormattedCounterArrayDouble(p.counterHandle, &bufSize, &bufCount, &emptyBuf[0]) + if ret != win_pdh.PDH_MORE_DATA { + return nil, fmt.Errorf("unable to collect data from counter. Error code is %x", ret) + } + + filledBuf := make([]win_pdh.PDH_FMT_COUNTERVALUE_ITEM_DOUBLE, bufCount*size) + ret = win_pdh.PdhGetFormattedCounterArrayDouble(p.counterHandle, &bufSize, &bufCount, &filledBuf[0]) + if ret != win_pdh.ERROR_SUCCESS { + return nil, fmt.Errorf("unable to collect data from counter. Error code is %x", ret) + } + + for i := 0; i < int(bufCount); i++ { + c := filledBuf[i] + value := uint64(c.FmtValue.DoubleValue) + name := win_pdh.UTF16PtrToString(c.SzName) + data[name] = value + } + + return data, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/version.go b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/version.go index fae2f777850..8020b297368 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/version.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/version.go @@ -101,7 +101,7 @@ func getKernelVersion() (string, error) { return "", err } - return fmt.Sprintf("%d.%d.%s.%d\n", majorVersionNumber[0], minorVersionNumber[0], buildNumber, revision), nil + return fmt.Sprintf("%d.%d.%s.%d", majorVersionNumber[0], minorVersionNumber[0], buildNumber, revision), nil } // getOSImageVersion gets the osImage name and version. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/winstats.go b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/winstats.go index 2c483f8967e..055ba846750 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/winstats.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/winstats/winstats.go @@ -58,6 +58,7 @@ type nodeMetrics struct { memoryPrivWorkingSetBytes uint64 memoryCommittedBytes uint64 timeStamp time.Time + interfaceStats []cadvisorapi.InterfaceStats } type nodeInfo struct { @@ -109,12 +110,11 @@ func (c *StatsClient) WinVersionInfo() (*cadvisorapi.VersionInfo, error) { func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, error) { nodeMetrics, err := c.client.getNodeMetrics() - if err != nil { return nil, err } - var stats []*cadvisorapiv2.ContainerStats + var stats []*cadvisorapiv2.ContainerStats stats = append(stats, &cadvisorapiv2.ContainerStats{ Timestamp: nodeMetrics.timeStamp, Cpu: &cadvisorapi.CpuStats{ @@ -126,6 +126,9 @@ func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, e WorkingSet: nodeMetrics.memoryPrivWorkingSetBytes, Usage: nodeMetrics.memoryCommittedBytes, }, + Network: &cadvisorapiv2.NetworkStats{ + Interfaces: nodeMetrics.interfaceStats, + }, }) nodeInfo := c.client.getNodeInfo() @@ -134,6 +137,7 @@ func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, e CreationTime: nodeInfo.startTime, HasCpu: true, HasMemory: true, + HasNetwork: true, Memory: cadvisorapiv2.MemorySpec{ Limit: nodeInfo.memoryPhysicalCapacityBytes, }, diff --git a/vendor/k8s.io/kubernetes/pkg/master/BUILD b/vendor/k8s.io/kubernetes/pkg/master/BUILD index 6c0ef9e50cf..0bec722bf3f 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/master/BUILD @@ -30,6 +30,7 @@ go_library( "//pkg/apis/extensions/install:go_default_library", "//pkg/apis/imagepolicy/install:go_default_library", "//pkg/apis/networking/install:go_default_library", + "//pkg/apis/node/install:go_default_library", "//pkg/apis/policy/install:go_default_library", "//pkg/apis/rbac/install:go_default_library", "//pkg/apis/scheduling/install:go_default_library", @@ -57,6 +58,7 @@ go_library( "//pkg/registry/events/rest:go_default_library", "//pkg/registry/extensions/rest:go_default_library", "//pkg/registry/networking/rest:go_default_library", + "//pkg/registry/node/rest:go_default_library", "//pkg/registry/policy/rest:go_default_library", "//pkg/registry/rbac/rest:go_default_library", "//pkg/registry/scheduling/rest:go_default_library", @@ -66,7 +68,6 @@ go_library( "//pkg/serviceaccount:go_default_library", "//pkg/util/async:go_default_library", "//pkg/util/node:go_default_library", - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", @@ -83,15 +84,20 @@ go_library( "//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/events/v1beta1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/networking/v1:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library", "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", + "//staging/src/k8s.io/api/scheduling/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1alpha1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", "//staging/src/k8s.io/api/settings/v1alpha1:go_default_library", @@ -113,6 +119,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -134,23 +141,20 @@ go_test( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/api/testapi:go_default_library", - "//pkg/apis/apps:go_default_library", - "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/batch:go_default_library", - "//pkg/apis/certificates:go_default_library", "//pkg/apis/core:go_default_library", - "//pkg/apis/extensions:go_default_library", - "//pkg/apis/rbac:go_default_library", "//pkg/apis/storage:go_default_library", "//pkg/generated/openapi:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/master/reconcilers:go_default_library", + "//pkg/master/storageversionhashdata:go_default_library", "//pkg/registry/certificates/rest:go_default_library", "//pkg/registry/core/rest:go_default_library", "//pkg/registry/registrytest:go_default_library", "//pkg/version:go_default_library", "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/naming:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", @@ -159,11 +163,17 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/authorization/authorizerfactory:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/openapi:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server/resourceconfig:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", + "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", @@ -191,6 +201,7 @@ filegroup( "//pkg/master/controller/crdregistration:all-srcs", "//pkg/master/ports:all-srcs", "//pkg/master/reconcilers:all-srcs", + "//pkg/master/storageversionhashdata:all-srcs", "//pkg/master/tunneler:all-srcs", ], tags = ["automanaged"], diff --git a/vendor/k8s.io/kubernetes/pkg/master/OWNERS b/vendor/k8s.io/kubernetes/pkg/master/OWNERS index 1ce00cdfa1b..d73190c1f46 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/master/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/pkg/master/client_ca_hook.go b/vendor/k8s.io/kubernetes/pkg/master/client_ca_hook.go new file mode 100644 index 00000000000..e8a52dd9951 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/master/client_ca_hook.go @@ -0,0 +1,140 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package master + +import ( + "encoding/json" + "fmt" + "reflect" + "time" + + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + genericapiserver "k8s.io/apiserver/pkg/server" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" +) + +type ClientCARegistrationHook struct { + ClientCA []byte + + RequestHeaderUsernameHeaders []string + RequestHeaderGroupHeaders []string + RequestHeaderExtraHeaderPrefixes []string + RequestHeaderCA []byte + RequestHeaderAllowedNames []string +} + +func (h ClientCARegistrationHook) PostStartHook(hookContext genericapiserver.PostStartHookContext) error { + // initializing CAs is important so that aggregated API servers can come up with "normal" config. + // We've seen lagging etcd before, so we want to retry this a few times before we decide to crashloop + // the API server on it. + err := wait.Poll(1*time.Second, 30*time.Second, func() (done bool, err error) { + // retry building the config since sometimes the server can be in an in-between state which caused + // some kind of auto detection failure as I recall from other post start hooks. + // TODO see if this is still true and fix the RBAC one too if it isn't. + client, err := corev1client.NewForConfig(hookContext.LoopbackClientConfig) + if err != nil { + utilruntime.HandleError(err) + return false, nil + } + + return h.tryToWriteClientCAs(client) + }) + + // if we're never able to make it through initialization, kill the API server + if err != nil { + return fmt.Errorf("unable to initialize client CA configmap: %v", err) + } + + return nil +} + +// tryToWriteClientCAs is here for unit testing with a fake client. This is a wait.ConditionFunc so the bool +// indicates if the condition was met. True when its finished, false when it should retry. +func (h ClientCARegistrationHook) tryToWriteClientCAs(client corev1client.CoreV1Interface) (bool, error) { + if err := createNamespaceIfNeeded(client, metav1.NamespaceSystem); err != nil { + utilruntime.HandleError(err) + return false, nil + } + + data := map[string]string{} + if len(h.ClientCA) > 0 { + data["client-ca-file"] = string(h.ClientCA) + } + + if len(h.RequestHeaderCA) > 0 { + var err error + + // encoding errors aren't going to get better, so just fail on them. + data["requestheader-username-headers"], err = jsonSerializeStringSlice(h.RequestHeaderUsernameHeaders) + if err != nil { + return false, err + } + data["requestheader-group-headers"], err = jsonSerializeStringSlice(h.RequestHeaderGroupHeaders) + if err != nil { + return false, err + } + data["requestheader-extra-headers-prefix"], err = jsonSerializeStringSlice(h.RequestHeaderExtraHeaderPrefixes) + if err != nil { + return false, err + } + data["requestheader-client-ca-file"] = string(h.RequestHeaderCA) + data["requestheader-allowed-names"], err = jsonSerializeStringSlice(h.RequestHeaderAllowedNames) + if err != nil { + return false, err + } + } + + // write errors may work next time if we retry, so queue for retry + if err := writeConfigMap(client, "extension-apiserver-authentication", data); err != nil { + utilruntime.HandleError(err) + return false, nil + } + + return true, nil +} + +func jsonSerializeStringSlice(in []string) (string, error) { + out, err := json.Marshal(in) + if err != nil { + return "", err + } + return string(out), err +} + +func writeConfigMap(client corev1client.ConfigMapsGetter, name string, data map[string]string) error { + existing, err := client.ConfigMaps(metav1.NamespaceSystem).Get(name, metav1.GetOptions{}) + if apierrors.IsNotFound(err) { + _, err := client.ConfigMaps(metav1.NamespaceSystem).Create(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceSystem, Name: name}, + Data: data, + }) + return err + } + if err != nil { + return err + } + + if !reflect.DeepEqual(existing.Data, data) { + existing.Data = data + _, err = client.ConfigMaps(metav1.NamespaceSystem).Update(existing) + } + return err +} diff --git a/vendor/k8s.io/kubernetes/pkg/master/controller.go b/vendor/k8s.io/kubernetes/pkg/master/controller.go index 82bb1b358d8..3e90b84f692 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/controller.go +++ b/vendor/k8s.io/kubernetes/pkg/master/controller.go @@ -19,6 +19,7 @@ package master import ( "fmt" "net" + "net/http" "time" corev1 "k8s.io/api/core/v1" @@ -29,8 +30,11 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" genericapiserver "k8s.io/apiserver/pkg/server" + utilfeature "k8s.io/apiserver/pkg/util/feature" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/rest" "k8s.io/klog" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/master/reconcilers" "k8s.io/kubernetes/pkg/registry/core/rangeallocation" corerest "k8s.io/kubernetes/pkg/registry/core/rest" @@ -49,6 +53,7 @@ type Controller struct { ServiceClient corev1client.ServicesGetter NamespaceClient corev1client.NamespacesGetter EventClient corev1client.EventsGetter + healthClient rest.Interface ServiceClusterIPRegistry rangeallocation.RangeRegistry ServiceClusterIPInterval time.Duration @@ -78,18 +83,22 @@ type Controller struct { } // NewBootstrapController returns a controller for watching the core capabilities of the master -func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage, serviceClient corev1client.ServicesGetter, nsClient corev1client.NamespacesGetter, eventClient corev1client.EventsGetter) *Controller { +func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage, serviceClient corev1client.ServicesGetter, nsClient corev1client.NamespacesGetter, eventClient corev1client.EventsGetter, healthClient rest.Interface) *Controller { _, publicServicePort, err := c.GenericConfig.SecureServing.HostPort() if err != nil { klog.Fatalf("failed to get listener address: %v", err) } systemNamespaces := []string{metav1.NamespaceSystem, metav1.NamespacePublic} + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + systemNamespaces = append(systemNamespaces, corev1.NamespaceNodeLease) + } return &Controller{ ServiceClient: serviceClient, NamespaceClient: nsClient, EventClient: eventClient, + healthClient: healthClient, EndpointReconciler: c.ExtraConfig.EndpointReconcilerConfig.Reconciler, EndpointInterval: c.ExtraConfig.EndpointReconcilerConfig.Interval, @@ -133,6 +142,12 @@ func (c *Controller) Start() { return } + // Reconcile during first run removing itself until server is ready. + endpointPorts := createEndpointPortSpec(c.PublicServicePort, "https", c.ExtraEndpointPorts) + if err := c.EndpointReconciler.RemoveEndpoints(kubernetesServiceName, c.PublicIP, endpointPorts); err != nil { + klog.Errorf("Unable to remove old endpoints from kubernetes service: %v", err) + } + repairClusterIPs := servicecontroller.NewRepair(c.ServiceClusterIPInterval, c.ServiceClient, c.EventClient, &c.ServiceClusterIPRange, c.ServiceClusterIPRegistry) repairNodePorts := portallocatorcontroller.NewRepair(c.ServiceNodePortInterval, c.ServiceClient, c.EventClient, c.ServiceNodePortRange, c.ServiceNodePortRegistry) @@ -145,10 +160,6 @@ func (c *Controller) Start() { // If we fail to repair node ports apiserver is useless. We should restart and retry. klog.Fatalf("Unable to perform initial service nodePort check: %v", err) } - // Service definition is reconciled during first run to correct port and type per expectations. - if err := c.UpdateKubernetesService(true); err != nil { - klog.Errorf("Unable to perform initial Kubernetes service initialization: %v", err) - } c.runner = async.NewRunner(c.RunKubernetesNamespaces, c.RunKubernetesService, repairClusterIPs.RunUntil, repairNodePorts.RunUntil) c.runner.Start() @@ -163,7 +174,8 @@ func (c *Controller) Stop() { go func() { defer close(finishedReconciling) klog.Infof("Shutting down kubernetes service endpoint reconciler") - if err := c.EndpointReconciler.StopReconciling("kubernetes", c.PublicIP, endpointPorts); err != nil { + c.EndpointReconciler.StopReconciling() + if err := c.EndpointReconciler.RemoveEndpoints(kubernetesServiceName, c.PublicIP, endpointPorts); err != nil { klog.Error(err) } }() @@ -173,7 +185,7 @@ func (c *Controller) Stop() { // done case <-time.After(2 * c.EndpointInterval): // don't block server shutdown forever if we can't reach etcd to remove ourselves - klog.Warning("StopReconciling() timed out") + klog.Warning("RemoveEndpoints() timed out") } } @@ -191,7 +203,14 @@ func (c *Controller) RunKubernetesNamespaces(ch chan struct{}) { // RunKubernetesService periodically updates the kubernetes service func (c *Controller) RunKubernetesService(ch chan struct{}) { - wait.Until(func() { + // wait until process is ready + wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { + var code int + c.healthClient.Get().AbsPath("/healthz").Do().StatusCode(&code) + return code == http.StatusOK, nil + }, ch) + + wait.NonSlidingUntil(func() { // Service definition is not reconciled after first // run, ports and type will be corrected only during // start. diff --git a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go b/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go index 1670a5b0780..69ad61dbb1f 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -60,15 +60,15 @@ type crdRegistrationController struct { queue workqueue.RateLimitingInterface } -// NewAutoRegistrationController returns a controller which will register CRD GroupVersions with the auto APIService registration +// NewCRDRegistrationController returns a controller which will register CRD GroupVersions with the auto APIService registration // controller so they automatically stay in sync. -func NewAutoRegistrationController(crdinformer crdinformers.CustomResourceDefinitionInformer, apiServiceRegistration AutoAPIServiceRegistration) *crdRegistrationController { +func NewCRDRegistrationController(crdinformer crdinformers.CustomResourceDefinitionInformer, apiServiceRegistration AutoAPIServiceRegistration) *crdRegistrationController { c := &crdRegistrationController{ crdLister: crdinformer.Lister(), crdSynced: crdinformer.Informer().HasSynced, apiServiceRegistration: apiServiceRegistration, syncedInitialSet: make(chan struct{}), - queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "crd-autoregister"), + queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "crd_autoregistration_controller"), } c.syncHandler = c.handleVersionUpdate diff --git a/vendor/k8s.io/kubernetes/pkg/master/import_known_versions.go b/vendor/k8s.io/kubernetes/pkg/master/import_known_versions.go index 0c20b528db9..9d0d6cd8cd8 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/pkg/master/import_known_versions.go @@ -26,9 +26,11 @@ import ( _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" _ "k8s.io/kubernetes/pkg/apis/certificates/install" + _ "k8s.io/kubernetes/pkg/apis/coordination/install" _ "k8s.io/kubernetes/pkg/apis/core/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/networking/install" + _ "k8s.io/kubernetes/pkg/apis/node/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" _ "k8s.io/kubernetes/pkg/apis/rbac/install" _ "k8s.io/kubernetes/pkg/apis/scheduling/install" diff --git a/vendor/k8s.io/kubernetes/pkg/master/master.go b/vendor/k8s.io/kubernetes/pkg/master/master.go index 3bb59dff95a..5a07c537cb7 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/master.go +++ b/vendor/k8s.io/kubernetes/pkg/master/master.go @@ -31,17 +31,24 @@ import ( authenticationv1 "k8s.io/api/authentication/v1" authorizationapiv1 "k8s.io/api/authorization/v1" autoscalingapiv1 "k8s.io/api/autoscaling/v1" + autoscalingapiv2beta1 "k8s.io/api/autoscaling/v2beta1" autoscalingapiv2beta2 "k8s.io/api/autoscaling/v2beta2" batchapiv1 "k8s.io/api/batch/v1" batchapiv1beta1 "k8s.io/api/batch/v1beta1" batchapiv2alpha1 "k8s.io/api/batch/v2alpha1" certificatesapiv1beta1 "k8s.io/api/certificates/v1beta1" + coordinationapiv1 "k8s.io/api/coordination/v1" + coordinationapiv1beta1 "k8s.io/api/coordination/v1beta1" apiv1 "k8s.io/api/core/v1" extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1" networkingapiv1 "k8s.io/api/networking/v1" + networkingapiv1beta1 "k8s.io/api/networking/v1beta1" + nodev1alpha1 "k8s.io/api/node/v1alpha1" + nodev1beta1 "k8s.io/api/node/v1beta1" policyapiv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" rbacv1beta1 "k8s.io/api/rbac/v1beta1" + schedulingapiv1 "k8s.io/api/scheduling/v1" schedulingapiv1beta1 "k8s.io/api/scheduling/v1beta1" storageapiv1 "k8s.io/api/storage/v1" storageapiv1beta1 "k8s.io/api/storage/v1beta1" @@ -72,9 +79,11 @@ import ( autoscalingrest "k8s.io/kubernetes/pkg/registry/autoscaling/rest" batchrest "k8s.io/kubernetes/pkg/registry/batch/rest" certificatesrest "k8s.io/kubernetes/pkg/registry/certificates/rest" + coordinationrest "k8s.io/kubernetes/pkg/registry/coordination/rest" corerest "k8s.io/kubernetes/pkg/registry/core/rest" extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest" networkingrest "k8s.io/kubernetes/pkg/registry/networking/rest" + noderest "k8s.io/kubernetes/pkg/registry/node/rest" policyrest "k8s.io/kubernetes/pkg/registry/policy/rest" rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest" schedulingrest "k8s.io/kubernetes/pkg/registry/scheduling/rest" @@ -90,6 +99,8 @@ const ( ) type ExtraConfig struct { + ClientCARegistrationHook ClientCARegistrationHook + APIResourceConfigSource serverstorage.APIResourceConfigSource StorageFactory serverstorage.StorageFactory EndpointReconcilerConfig EndpointReconcilerConfig @@ -174,6 +185,8 @@ type EndpointReconcilerConfig struct { // Master contains state for a Kubernetes cluster master/api server. type Master struct { GenericAPIServer *genericapiserver.GenericAPIServer + + ClientCARegistrationHook ClientCARegistrationHook } func (c *Config) createMasterCountReconciler() reconcilers.EndpointReconciler { @@ -315,8 +328,10 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) autoscalingrest.RESTStorageProvider{}, batchrest.RESTStorageProvider{}, certificatesrest.RESTStorageProvider{}, + coordinationrest.RESTStorageProvider{}, extensionsrest.RESTStorageProvider{}, networkingrest.RESTStorageProvider{}, + noderest.RESTStorageProvider{}, policyrest.RESTStorageProvider{}, rbacrest.RESTStorageProvider{Authorizer: c.GenericConfig.Authorization.Authorizer}, schedulingrest.RESTStorageProvider{}, @@ -328,6 +343,8 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) } m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...) + m.GenericAPIServer.AddPostStartHookOrDie("ca-registration", c.ExtraConfig.ClientCARegistrationHook.PostStartHook) + return m, nil } @@ -339,7 +356,7 @@ func (m *Master) InstallLegacyAPI(c *completedConfig, restOptionsGetter generic. controllerName := "bootstrap-controller" coreClient := corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig) - bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient, coreClient) + bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient, coreClient, coreClient.RESTClient()) m.GenericAPIServer.AddPostStartHookOrDie(controllerName, bootstrapController.PostStartHook) m.GenericAPIServer.AddPreShutdownHookOrDie(controllerName, bootstrapController.PreShutdownHook) @@ -356,7 +373,7 @@ type RESTStorageProvider interface { // InstallAPIs will install the APIs for the restStorageProviders if they are enabled. func (m *Master) InstallAPIs(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter, restStorageProviders ...RESTStorageProvider) { - apiGroupsInfo := []genericapiserver.APIGroupInfo{} + apiGroupsInfo := []*genericapiserver.APIGroupInfo{} for _, restStorageBuilder := range restStorageProviders { groupName := restStorageBuilder.GroupName() @@ -379,13 +396,11 @@ func (m *Master) InstallAPIs(apiResourceConfigSource serverstorage.APIResourceCo m.GenericAPIServer.AddPostStartHookOrDie(name, hook) } - apiGroupsInfo = append(apiGroupsInfo, apiGroupInfo) + apiGroupsInfo = append(apiGroupsInfo, &apiGroupInfo) } - for i := range apiGroupsInfo { - if err := m.GenericAPIServer.InstallAPIGroup(&apiGroupsInfo[i]); err != nil { - klog.Fatalf("Error in registering group versions: %v", err) - } + if err := m.GenericAPIServer.InstallAPIGroups(apiGroupsInfo...); err != nil { + klog.Fatalf("Error in registering group versions: %v", err) } } @@ -401,15 +416,26 @@ func (n nodeAddressProvider) externalAddresses() ([]string, error) { if err != nil { return nil, err } + var matchErr error addrs := []string{} for ix := range nodes.Items { node := &nodes.Items[ix] addr, err := nodeutil.GetPreferredNodeAddress(node, preferredAddressTypes) if err != nil { + if _, ok := err.(*nodeutil.NoMatchError); ok { + matchErr = err + continue + } return nil, err } addrs = append(addrs, addr) } + if len(addrs) == 0 && matchErr != nil { + // We only return an error if we have items. + // Currently we return empty list/no error if Items is empty. + // We do this for backward compatibility reasons. + return nil, matchErr + } return addrs, nil } @@ -419,28 +445,51 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret.EnableVersions( admissionregistrationv1beta1.SchemeGroupVersion, apiv1.SchemeGroupVersion, - appsv1beta1.SchemeGroupVersion, - appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion, authenticationv1.SchemeGroupVersion, authorizationapiv1.SchemeGroupVersion, autoscalingapiv1.SchemeGroupVersion, + autoscalingapiv2beta1.SchemeGroupVersion, autoscalingapiv2beta2.SchemeGroupVersion, batchapiv1.SchemeGroupVersion, batchapiv1beta1.SchemeGroupVersion, certificatesapiv1beta1.SchemeGroupVersion, + coordinationapiv1.SchemeGroupVersion, + coordinationapiv1beta1.SchemeGroupVersion, extensionsapiv1beta1.SchemeGroupVersion, networkingapiv1.SchemeGroupVersion, + networkingapiv1beta1.SchemeGroupVersion, + nodev1beta1.SchemeGroupVersion, policyapiv1beta1.SchemeGroupVersion, rbacv1.SchemeGroupVersion, rbacv1beta1.SchemeGroupVersion, storageapiv1.SchemeGroupVersion, storageapiv1beta1.SchemeGroupVersion, schedulingapiv1beta1.SchemeGroupVersion, + schedulingapiv1.SchemeGroupVersion, + ) + // enable non-deprecated beta resources in extensions/v1beta1 explicitly so we have a full list of what's possible to serve + ret.EnableResources( + extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"), + ) + // enable deprecated beta resources in extensions/v1beta1 explicitly so we have a full list of what's possible to serve + ret.EnableResources( + extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"), + extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"), + extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies"), + extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"), + extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"), + extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicationcontrollers"), + ) + // enable deprecated beta versions explicitly so we have a full list of what's possible to serve + ret.EnableVersions( + appsv1beta1.SchemeGroupVersion, + appsv1beta2.SchemeGroupVersion, ) // disable alpha versions explicitly so we have a full list of what's possible to serve ret.DisableVersions( batchapiv2alpha1.SchemeGroupVersion, + nodev1alpha1.SchemeGroupVersion, ) return ret diff --git a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/lease.go b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/lease.go index d7ea00b0096..7a0d54080c7 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/lease.go +++ b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/lease.go @@ -283,14 +283,16 @@ func checkEndpointSubsetFormatWithLease(e *corev1.Endpoints, expectedIPs []strin return true, ipsCorrect, portsCorrect } -func (r *leaseEndpointReconciler) StopReconciling(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { - r.reconcilingLock.Lock() - defer r.reconcilingLock.Unlock() - r.stopReconcilingCalled = true - +func (r *leaseEndpointReconciler) RemoveEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { if err := r.masterLeases.RemoveLease(ip.String()); err != nil { return err } return r.doReconcile(serviceName, endpointPorts, true) } + +func (r *leaseEndpointReconciler) StopReconciling() { + r.reconcilingLock.Lock() + defer r.reconcilingLock.Unlock() + r.stopReconcilingCalled = true +} diff --git a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/mastercount.go b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/mastercount.go index 18a635b6a74..4699e90c172 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/mastercount.go +++ b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/mastercount.go @@ -137,10 +137,9 @@ func (r *masterCountEndpointReconciler) ReconcileEndpoints(serviceName string, i return err } -func (r *masterCountEndpointReconciler) StopReconciling(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { +func (r *masterCountEndpointReconciler) RemoveEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { r.reconcilingLock.Lock() defer r.reconcilingLock.Unlock() - r.stopReconcilingCalled = true e, err := r.endpointClient.Endpoints(metav1.NamespaceDefault).Get(serviceName, metav1.GetOptions{}) if err != nil { @@ -167,6 +166,12 @@ func (r *masterCountEndpointReconciler) StopReconciling(serviceName string, ip n return err } +func (r *masterCountEndpointReconciler) StopReconciling() { + r.reconcilingLock.Lock() + defer r.reconcilingLock.Unlock() + r.stopReconcilingCalled = true +} + // Determine if the endpoint is in the format ReconcileEndpoints expects. // // Return values: diff --git a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/none.go b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/none.go index 9bd4ee5ad7f..2eb49741bbd 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/none.go +++ b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/none.go @@ -18,8 +18,9 @@ limitations under the License. package reconcilers import ( - corev1 "k8s.io/api/core/v1" "net" + + corev1 "k8s.io/api/core/v1" ) // NoneEndpointReconciler allows for the endpoint reconciler to be disabled @@ -36,7 +37,10 @@ func (r *noneEndpointReconciler) ReconcileEndpoints(serviceName string, ip net.I return nil } -// StopReconciling noop reconcile -func (r *noneEndpointReconciler) StopReconciling(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { +// RemoveEndpoints noop reconcile +func (r *noneEndpointReconciler) RemoveEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error { return nil } + +func (r *noneEndpointReconciler) StopReconciling() { +} diff --git a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/reconcilers.go b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/reconcilers.go index 0cfb9a0aaf8..8f280038765 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/reconcilers/reconcilers.go +++ b/vendor/k8s.io/kubernetes/pkg/master/reconcilers/reconcilers.go @@ -18,8 +18,9 @@ limitations under the License. package reconcilers import ( - corev1 "k8s.io/api/core/v1" "net" + + corev1 "k8s.io/api/core/v1" ) // EndpointReconciler knows how to reconcile the endpoints for the apiserver service. @@ -35,7 +36,10 @@ type EndpointReconciler interface { // endpoints for their {rw, ro} services. // * ReconcileEndpoints is called periodically from all apiservers. ReconcileEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort, reconcilePorts bool) error - StopReconciling(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error + // RemoveEndpoints removes this apiserver's lease. + RemoveEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error + // StopReconciling turns any later ReconcileEndpoints call into a noop. + StopReconciling() } // Type the reconciler type diff --git a/vendor/k8s.io/kubernetes/pkg/printers/BUILD b/vendor/k8s.io/kubernetes/pkg/printers/BUILD index 4c9f9e647ab..3f1134b1b08 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/printers/BUILD @@ -23,6 +23,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/printers/OWNERS b/vendor/k8s.io/kubernetes/pkg/printers/OWNERS index a8ab5736b88..a26581944e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/printers/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - smarterclayton - sig-cli-maintainers diff --git a/vendor/k8s.io/kubernetes/pkg/printers/humanreadable.go b/vendor/k8s.io/kubernetes/pkg/printers/humanreadable.go index bf4a761a4fb..5e51fb335c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/humanreadable.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/humanreadable.go @@ -22,7 +22,8 @@ import ( "io" "reflect" "strings" - "text/tabwriter" + + "github.com/liggitt/tabwriter" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/printers/interface.go b/vendor/k8s.io/kubernetes/pkg/printers/interface.go index 6e14f61c5be..6d40b9c0e23 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/interface.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/interface.go @@ -46,7 +46,6 @@ type PrintOptions struct { WithNamespace bool WithKind bool Wide bool - ShowAll bool ShowLabels bool AbsoluteTimestamps bool Kind schema.GroupKind diff --git a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/BUILD b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/BUILD index 147e1e197b1..bf4572605d3 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/BUILD @@ -21,7 +21,8 @@ go_test( "//pkg/apis/batch:go_default_library", "//pkg/apis/coordination:go_default_library", "//pkg/apis/core:go_default_library", - "//pkg/apis/extensions:go_default_library", + "//pkg/apis/networking:go_default_library", + "//pkg/apis/node:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/apis/scheduling:go_default_library", "//pkg/apis/storage:go_default_library", @@ -38,7 +39,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", - "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions/printers:go_default_library", + "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library", "//vendor/sigs.k8s.io/yaml:go_default_library", ], ) @@ -67,9 +68,9 @@ go_library( "//pkg/apis/core/helper:go_default_library", "//pkg/apis/core/install:go_default_library", "//pkg/apis/events/install:go_default_library", - "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/install:go_default_library", "//pkg/apis/networking:go_default_library", + "//pkg/apis/node:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/apis/policy/install:go_default_library", "//pkg/apis/rbac:go_default_library", @@ -87,7 +88,7 @@ go_library( "//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/certificates/v1beta1:go_default_library", - "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/import_known_versions.go b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/import_known_versions.go index 4358521a2c8..aa04b10f49d 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/import_known_versions.go @@ -25,6 +25,7 @@ import ( _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" _ "k8s.io/kubernetes/pkg/apis/certificates/install" + _ "k8s.io/kubernetes/pkg/apis/coordination/install" _ "k8s.io/kubernetes/pkg/apis/core/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" diff --git a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go index 3559c17cd2a..817976ed195 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go @@ -37,10 +37,11 @@ import ( "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/certificates" + "k8s.io/kubernetes/pkg/apis/coordination" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/networking" + nodeapi "k8s.io/kubernetes/pkg/apis/node" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/scheduling" @@ -226,10 +227,10 @@ func AddHandlers(h printers.PrintHandler) { {Name: "Last Seen", Type: "string", Description: ""}, {Name: "Type", Type: "string", Description: ""}, {Name: "Reason", Type: "string", Description: ""}, - {Name: "Kind", Type: "string", Description: ""}, + {Name: "Object", Type: "string", Description: ""}, + {Name: "Subobject", Type: "string", Priority: 1, Description: ""}, {Name: "Source", Type: "string", Priority: 1, Description: ""}, {Name: "Message", Type: "string", Description: ""}, - {Name: "Subobject", Type: "string", Priority: 1, Description: ""}, {Name: "First Seen", Type: "string", Priority: 1, Description: ""}, {Name: "Count", Type: "string", Priority: 1, Description: ""}, {Name: "Name", Type: "string", Priority: 1, Format: "name", Description: ""}, @@ -357,7 +358,7 @@ func AddHandlers(h printers.PrintHandler) { {Name: "Age", Type: "string", Description: ""}, {Name: "Role", Type: "string", Priority: 1, Description: ""}, {Name: "Users", Type: "string", Priority: 1, Description: "Users in the roleBinding"}, - {Name: "Groups", Type: "string", Priority: 1, Description: "Gruops in the roleBinding"}, + {Name: "Groups", Type: "string", Priority: 1, Description: "Groups in the roleBinding"}, {Name: "ServiceAccounts", Type: "string", Priority: 1, Description: "ServiceAccounts in the roleBinding"}, } h.TableHandler(roleBindingsColumnDefinitions, printRoleBinding) @@ -367,9 +368,9 @@ func AddHandlers(h printers.PrintHandler) { {Name: "Name", Type: "string", Format: "name", Description: ""}, {Name: "Age", Type: "string", Description: ""}, {Name: "Role", Type: "string", Priority: 1, Description: ""}, - {Name: "Users", Type: "string", Priority: 1, Description: "Users in the roleBinding"}, - {Name: "Groups", Type: "string", Priority: 1, Description: "Gruops in the roleBinding"}, - {Name: "ServiceAccounts", Type: "string", Priority: 1, Description: "ServiceAccounts in the roleBinding"}, + {Name: "Users", Type: "string", Priority: 1, Description: ""}, + {Name: "Groups", Type: "string", Priority: 1, Description: ""}, + {Name: "ServiceAccounts", Type: "string", Priority: 1, Description: ""}, } h.TableHandler(clusterRoleBindingsColumnDefinitions, printClusterRoleBinding) h.TableHandler(clusterRoleBindingsColumnDefinitions, printClusterRoleBindingList) @@ -378,11 +379,19 @@ func AddHandlers(h printers.PrintHandler) { {Name: "Name", Type: "string", Format: "name", Description: ""}, {Name: "Age", Type: "string", Description: ""}, {Name: "Requestor", Type: "string", Description: ""}, - {Name: "Condition", Type: "string", Description:""}, + {Name: "Condition", Type: "string", Description: ""}, } h.TableHandler(certificateSigningRequestColumnDefinitions, printCertificateSigningRequest) h.TableHandler(certificateSigningRequestColumnDefinitions, printCertificateSigningRequestList) + leaseColumnDefinitions := []metav1beta1.TableColumnDefinition{ + {Name: "Name", Type: "string", Format: "name", Description: ""}, + {Name: "Holder", Type: "string", Description: ""}, + {Name: "Age", Type: "string", Description: ""}, + } + h.TableHandler(leaseColumnDefinitions, printLease) + h.TableHandler(leaseColumnDefinitions, printLeaseList) + storageClassColumnDefinitions := []metav1beta1.TableColumnDefinition{ {Name: "Name", Type: "string", Format: "name", Description: ""}, {Name: "Provisioner", Type: "string", Description: ""}, @@ -427,6 +436,14 @@ func AddHandlers(h printers.PrintHandler) { h.TableHandler(priorityClassColumnDefinitions, printPriorityClass) h.TableHandler(priorityClassColumnDefinitions, printPriorityClassList) + runtimeClassColumnDefinitions := []metav1beta1.TableColumnDefinition{ + {Name: "Name", Type: "string", Format: "name", Description: ""}, + {Name: "Handler", Type: "string", Description: ""}, + {Name: "Age", Type: "string", Description: ""}, + } + h.TableHandler(runtimeClassColumnDefinitions, printRuntimeClass) + h.TableHandler(runtimeClassColumnDefinitions, printRuntimeClassList) + AddDefaultHandlers(h) } @@ -971,14 +988,14 @@ func printServiceList(list *api.ServiceList, options printers.PrintOptions) ([]m } // backendStringer behaves just like a string interface and converts the given backend to a string. -func backendStringer(backend *extensions.IngressBackend) string { +func backendStringer(backend *networking.IngressBackend) string { if backend == nil { return "" } return fmt.Sprintf("%v:%v", backend.ServiceName, backend.ServicePort.String()) } -func formatHosts(rules []extensions.IngressRule) string { +func formatHosts(rules []networking.IngressRule) string { list := []string{} max := 3 more := false @@ -1000,14 +1017,14 @@ func formatHosts(rules []extensions.IngressRule) string { return ret } -func formatPorts(tls []extensions.IngressTLS) string { +func formatPorts(tls []networking.IngressTLS) string { if len(tls) != 0 { return "80, 443" } return "80" } -func printIngress(obj *extensions.Ingress, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { +func printIngress(obj *networking.Ingress, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { row := metav1beta1.TableRow{ Object: runtime.RawExtension{Object: obj}, } @@ -1019,7 +1036,7 @@ func printIngress(obj *extensions.Ingress, options printers.PrintOptions) ([]met return []metav1beta1.TableRow{row}, nil } -func printIngressList(list *extensions.IngressList, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { +func printIngressList(list *networking.IngressList, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { rows := make([]metav1beta1.TableRow, 0, len(list.Items)) for i := range list.Items { r, err := printIngress(&list.Items[i], options) @@ -1364,15 +1381,21 @@ func printEvent(obj *api.Event, options printers.PrintOptions) ([]metav1beta1.Ta firstTimestamp = translateTimestampSince(obj.FirstTimestamp) lastTimestamp = translateTimestampSince(obj.LastTimestamp) } + var target string + if len(obj.InvolvedObject.Name) > 0 { + target = fmt.Sprintf("%s/%s", strings.ToLower(obj.InvolvedObject.Kind), obj.InvolvedObject.Name) + } else { + target = strings.ToLower(obj.InvolvedObject.Kind) + } if options.Wide { row.Cells = append(row.Cells, lastTimestamp, obj.Type, obj.Reason, - obj.InvolvedObject.Kind, + target, + obj.InvolvedObject.FieldPath, formatEventSource(obj.Source), strings.TrimSpace(obj.Message), - obj.InvolvedObject.FieldPath, firstTimestamp, int64(obj.Count), obj.Name, @@ -1382,7 +1405,7 @@ func printEvent(obj *api.Event, options printers.PrintOptions) ([]metav1beta1.Ta lastTimestamp, obj.Type, obj.Reason, - obj.InvolvedObject.Kind, + target, strings.TrimSpace(obj.Message), ) } @@ -1783,6 +1806,31 @@ func printStorageClassList(list *storage.StorageClassList, options printers.Prin return rows, nil } +func printLease(obj *coordination.Lease, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + row := metav1beta1.TableRow{ + Object: runtime.RawExtension{Object: obj}, + } + + var holderIdentity string + if obj.Spec.HolderIdentity != nil { + holderIdentity = *obj.Spec.HolderIdentity + } + row.Cells = append(row.Cells, obj.Name, holderIdentity, translateTimestampSince(obj.CreationTimestamp)) + return []metav1beta1.TableRow{row}, nil +} + +func printLeaseList(list *coordination.LeaseList, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + rows := make([]metav1beta1.TableRow, 0, len(list.Items)) + for i := range list.Items { + r, err := printLease(&list.Items[i], options) + if err != nil { + return nil, err + } + rows = append(rows, r...) + } + return rows, nil +} + func printStatus(obj *metav1.Status, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { row := metav1beta1.TableRow{ Object: runtime.RawExtension{Object: obj}, @@ -1920,6 +1968,30 @@ func printPriorityClassList(list *scheduling.PriorityClassList, options printers return rows, nil } +func printRuntimeClass(obj *nodeapi.RuntimeClass, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + row := metav1beta1.TableRow{ + Object: runtime.RawExtension{Object: obj}, + } + + name := obj.Name + handler := obj.Handler + row.Cells = append(row.Cells, name, handler, translateTimestampSince(obj.CreationTimestamp)) + + return []metav1beta1.TableRow{row}, nil +} + +func printRuntimeClassList(list *nodeapi.RuntimeClassList, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + rows := make([]metav1beta1.TableRow, 0, len(list.Items)) + for i := range list.Items { + r, err := printRuntimeClass(&list.Items[i], options) + if err != nil { + return nil, err + } + rows = append(rows, r...) + } + return rows, nil +} + func printBoolPtr(value *bool) string { if value != nil { return printBool(*value) diff --git a/vendor/k8s.io/kubernetes/pkg/printers/tabwriter.go b/vendor/k8s.io/kubernetes/pkg/printers/tabwriter.go index d1d4cb53fc5..21d60e1c413 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/tabwriter.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/tabwriter.go @@ -18,7 +18,8 @@ package printers import ( "io" - "text/tabwriter" + + "github.com/liggitt/tabwriter" ) const ( @@ -26,7 +27,7 @@ const ( tabwriterWidth = 4 tabwriterPadding = 3 tabwriterPadChar = ' ' - tabwriterFlags = 0 + tabwriterFlags = tabwriter.RememberWidths ) // GetNewTabWriter returns a tabwriter that translates tabbed columns in input into properly aligned text. diff --git a/vendor/k8s.io/kubernetes/pkg/probe/OWNERS b/vendor/k8s.io/kubernetes/pkg/probe/OWNERS index 1d2bef03480..997fa9156da 100644 --- a/vendor/k8s.io/kubernetes/pkg/probe/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/probe/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - Random-Liu - dchen1107 diff --git a/vendor/k8s.io/kubernetes/pkg/probe/http/BUILD b/vendor/k8s.io/kubernetes/pkg/probe/http/BUILD index 98387df305b..a789305c896 100644 --- a/vendor/k8s.io/kubernetes/pkg/probe/http/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/probe/http/BUILD @@ -22,7 +22,12 @@ go_test( name = "go_default_test", srcs = ["http_test.go"], embed = [":go_default_library"], - deps = ["//pkg/probe:go_default_library"], + deps = [ + "//pkg/probe:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", + ], ) filegroup( diff --git a/vendor/k8s.io/kubernetes/pkg/probe/http/http.go b/vendor/k8s.io/kubernetes/pkg/probe/http/http.go index e9bcc0f3e1b..0d777b949ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/probe/http/http.go +++ b/vendor/k8s.io/kubernetes/pkg/probe/http/http.go @@ -18,6 +18,7 @@ package http import ( "crypto/tls" + "errors" "fmt" "io/ioutil" "net/http" @@ -32,15 +33,25 @@ import ( ) // New creates Prober that will skip TLS verification while probing. -func New() Prober { +// followNonLocalRedirects configures whether the prober should follow redirects to a different hostname. +// If disabled, redirects to other hosts will trigger a warning result. +func New(followNonLocalRedirects bool) Prober { tlsConfig := &tls.Config{InsecureSkipVerify: true} - return NewWithTLSConfig(tlsConfig) + return NewWithTLSConfig(tlsConfig, followNonLocalRedirects) } // NewWithTLSConfig takes tls config as parameter. -func NewWithTLSConfig(config *tls.Config) Prober { - transport := utilnet.SetTransportDefaults(&http.Transport{TLSClientConfig: config, DisableKeepAlives: true}) - return httpProber{transport} +// followNonLocalRedirects configures whether the prober should follow redirects to a different hostname. +// If disabled, redirects to other hosts will trigger a warning result. +func NewWithTLSConfig(config *tls.Config, followNonLocalRedirects bool) Prober { + // We do not want the probe use node's local proxy set. + transport := utilnet.SetTransportDefaults( + &http.Transport{ + TLSClientConfig: config, + DisableKeepAlives: true, + Proxy: http.ProxyURL(nil), + }) + return httpProber{transport, followNonLocalRedirects} } // Prober is an interface that defines the Probe function for doing HTTP readiness/liveness checks. @@ -49,12 +60,18 @@ type Prober interface { } type httpProber struct { - transport *http.Transport + transport *http.Transport + followNonLocalRedirects bool } // Probe returns a ProbeRunner capable of running an HTTP check. func (pr httpProber) Probe(url *url.URL, headers http.Header, timeout time.Duration) (probe.Result, string, error) { - return DoHTTPProbe(url, headers, &http.Client{Timeout: timeout, Transport: pr.transport}) + client := &http.Client{ + Timeout: timeout, + Transport: pr.transport, + CheckRedirect: redirectChecker(pr.followNonLocalRedirects), + } + return DoHTTPProbe(url, headers, client) } // GetHTTPInterface is an interface for making HTTP requests, that returns a response and error. @@ -96,9 +113,30 @@ func DoHTTPProbe(url *url.URL, headers http.Header, client GetHTTPInterface) (pr } body := string(b) if res.StatusCode >= http.StatusOK && res.StatusCode < http.StatusBadRequest { + if res.StatusCode >= http.StatusMultipleChoices { // Redirect + klog.V(4).Infof("Probe terminated redirects for %s, Response: %v", url.String(), *res) + return probe.Warning, body, nil + } klog.V(4).Infof("Probe succeeded for %s, Response: %v", url.String(), *res) return probe.Success, body, nil } klog.V(4).Infof("Probe failed for %s with request headers %v, response body: %v", url.String(), headers, body) return probe.Failure, fmt.Sprintf("HTTP probe failed with statuscode: %d", res.StatusCode), nil } + +func redirectChecker(followNonLocalRedirects bool) func(*http.Request, []*http.Request) error { + if followNonLocalRedirects { + return nil // Use the default http client checker. + } + + return func(req *http.Request, via []*http.Request) error { + if req.URL.Hostname() != via[0].URL.Hostname() { + return http.ErrUseLastResponse + } + // Default behavior: stop after 10 redirects. + if len(via) >= 10 { + return errors.New("stopped after 10 redirects") + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/probe/probe.go b/vendor/k8s.io/kubernetes/pkg/probe/probe.go index d57bf43874e..b204885e7b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/probe/probe.go +++ b/vendor/k8s.io/kubernetes/pkg/probe/probe.go @@ -22,6 +22,8 @@ type Result string const ( // Success Result Success Result = "success" + // Warning Result. Logically success, but with additional debugging information attached. + Warning Result = "warning" // Failure Result Failure Result = "failure" // Unknown Result diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/BUILD index bb290126fea..a7969c25c86 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/BUILD @@ -18,12 +18,12 @@ go_library( deps = [ "//pkg/api/v1/service:go_default_library", "//pkg/proxy/util:go_default_library", - "//pkg/util/net:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) @@ -38,7 +38,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/proxy/apis/config:all-srcs", + "//pkg/proxy/apis:all-srcs", "//pkg/proxy/config:all-srcs", "//pkg/proxy/healthcheck:all-srcs", "//pkg/proxy/iptables:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/OWNERS index 8282182880a..22480e625aa 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - thockin - matchstick diff --git a/vendor/k8s.io/kubernetes/pkg/util/io/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/apis/BUILD similarity index 67% rename from vendor/k8s.io/kubernetes/pkg/util/io/BUILD rename to vendor/k8s.io/kubernetes/pkg/proxy/apis/BUILD index 92e8f2ae785..e75326ca83e 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/io/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/BUILD @@ -7,8 +7,8 @@ load( go_library( name = "go_default_library", - srcs = ["consistentread.go"], - importpath = "k8s.io/kubernetes/pkg/util/io", + srcs = ["well_known_labels.go"], + importpath = "k8s.io/kubernetes/pkg/proxy/apis", ) filegroup( @@ -20,6 +20,9 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//pkg/proxy/apis/config:all-srcs", + ], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/BUILD index 475d4233b4f..bc94d8d0620 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/BUILD @@ -15,10 +15,10 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/proxy/apis/config", deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/OWNERS index 34823356d22..8b0c7feef3f 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/OWNERS @@ -1,4 +1,8 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - thockin reviewers: - sig-network-reviewers +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/types.go b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/types.go index dacee32bb3a..a9d0b88493c 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/types.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/types.go @@ -21,8 +21,8 @@ import ( "sort" "strings" - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + componentbaseconfig "k8s.io/component-base/config" ) // KubeProxyIPTablesConfiguration contains iptables-related configuration @@ -78,6 +78,20 @@ type KubeProxyConntrackConfiguration struct { TCPCloseWaitTimeout *metav1.Duration } +// KubeProxyWinkernelConfiguration contains Windows/HNS settings for +// the Kubernetes proxy server. +type KubeProxyWinkernelConfiguration struct { + // networkName is the name of the network kube-proxy will use + // to create endpoints and policies + NetworkName string + // sourceVip is the IP address of the source VIP endoint used for + // NAT when loadbalancing + SourceVip string + // enableDSR tells kube-proxy whether HNS policies should be created + // with DSR + EnableDSR bool +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // KubeProxyConfiguration contains everything necessary to configure the @@ -108,7 +122,7 @@ type KubeProxyConfiguration struct { HostnameOverride string // clientConnection specifies the kubeconfig file and client connection settings for the proxy // server to use when communicating with the apiserver. - ClientConnection apimachineryconfig.ClientConnectionConfiguration + ClientConnection componentbaseconfig.ClientConnectionConfiguration // iptables contains iptables-related configuration options. IPTables KubeProxyIPTablesConfiguration // ipvs contains ipvs-related configuration options. @@ -140,6 +154,8 @@ type KubeProxyConfiguration struct { // If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node. // An empty string slice is meant to select all network interfaces. NodePortAddresses []string + // winkernel contains winkernel-related configuration options. + Winkernel KubeProxyWinkernelConfiguration } // Currently, three modes of proxy are available in Linux platform: 'userspace' (older, going to be EOL), 'iptables' diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/BUILD index 864bbddcbc1..aed068d8458 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/BUILD @@ -20,11 +20,11 @@ go_library( "//pkg/kubelet/qos:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/proxy/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", "//staging/src/k8s.io/kube-proxy/config/v1alpha1:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/zz_generated.conversion.go index 0cf098cbecb..c360ab20af0 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/zz_generated.conversion.go @@ -23,10 +23,10 @@ package v1alpha1 import ( unsafe "unsafe" - configv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" + configv1alpha1 "k8s.io/component-base/config/v1alpha1" v1alpha1 "k8s.io/kube-proxy/config/v1alpha1" config "k8s.io/kubernetes/pkg/proxy/apis/config" ) @@ -78,6 +78,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1alpha1.KubeProxyWinkernelConfiguration)(nil), (*config.KubeProxyWinkernelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration(a.(*v1alpha1.KubeProxyWinkernelConfiguration), b.(*config.KubeProxyWinkernelConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*config.KubeProxyWinkernelConfiguration)(nil), (*v1alpha1.KubeProxyWinkernelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration(a.(*config.KubeProxyWinkernelConfiguration), b.(*v1alpha1.KubeProxyWinkernelConfiguration), scope) + }); err != nil { + return err + } return nil } @@ -108,6 +118,9 @@ func autoConvert_v1alpha1_KubeProxyConfiguration_To_config_KubeProxyConfiguratio } out.ConfigSyncPeriod = in.ConfigSyncPeriod out.NodePortAddresses = *(*[]string)(unsafe.Pointer(&in.NodePortAddresses)) + if err := Convert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration(&in.Winkernel, &out.Winkernel, s); err != nil { + return err + } return nil } @@ -143,6 +156,9 @@ func autoConvert_config_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguratio } out.ConfigSyncPeriod = in.ConfigSyncPeriod out.NodePortAddresses = *(*[]string)(unsafe.Pointer(&in.NodePortAddresses)) + if err := Convert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration(&in.Winkernel, &out.Winkernel, s); err != nil { + return err + } return nil } @@ -230,3 +246,27 @@ func autoConvert_config_KubeProxyIPVSConfiguration_To_v1alpha1_KubeProxyIPVSConf func Convert_config_KubeProxyIPVSConfiguration_To_v1alpha1_KubeProxyIPVSConfiguration(in *config.KubeProxyIPVSConfiguration, out *v1alpha1.KubeProxyIPVSConfiguration, s conversion.Scope) error { return autoConvert_config_KubeProxyIPVSConfiguration_To_v1alpha1_KubeProxyIPVSConfiguration(in, out, s) } + +func autoConvert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration(in *v1alpha1.KubeProxyWinkernelConfiguration, out *config.KubeProxyWinkernelConfiguration, s conversion.Scope) error { + out.NetworkName = in.NetworkName + out.SourceVip = in.SourceVip + out.EnableDSR = in.EnableDSR + return nil +} + +// Convert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration(in *v1alpha1.KubeProxyWinkernelConfiguration, out *config.KubeProxyWinkernelConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeProxyWinkernelConfiguration_To_config_KubeProxyWinkernelConfiguration(in, out, s) +} + +func autoConvert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration(in *config.KubeProxyWinkernelConfiguration, out *v1alpha1.KubeProxyWinkernelConfiguration, s conversion.Scope) error { + out.NetworkName = in.NetworkName + out.SourceVip = in.SourceVip + out.EnableDSR = in.EnableDSR + return nil +} + +// Convert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration is an autogenerated conversion function. +func Convert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration(in *config.KubeProxyWinkernelConfiguration, out *v1alpha1.KubeProxyWinkernelConfiguration, s conversion.Scope) error { + return autoConvert_config_KubeProxyWinkernelConfiguration_To_v1alpha1_KubeProxyWinkernelConfiguration(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/BUILD index c99aca30195..063de35c5c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/BUILD @@ -13,10 +13,10 @@ go_library( deps = [ "//pkg/apis/core/validation:go_default_library", "//pkg/proxy/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) @@ -39,9 +39,9 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/proxy/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/validation.go index 04d9e5ed9e6..26371965304 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/validation/validation.go @@ -23,10 +23,10 @@ import ( "strconv" "strings" - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" + componentbaseconfig "k8s.io/component-base/config" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" ) @@ -187,7 +187,7 @@ func validateProxyModeWindows(mode kubeproxyconfig.ProxyMode, fldPath *field.Pat return field.ErrorList{field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg)} } -func validateClientConnectionConfiguration(config apimachineryconfig.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList { +func validateClientConnectionConfiguration(config componentbaseconfig.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(config.Burst), fldPath.Child("Burst"))...) return allErrs diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/zz_generated.deepcopy.go index 983b5113b70..04a5dbfe7a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/config/zz_generated.deepcopy.go @@ -74,6 +74,7 @@ func (in *KubeProxyConfiguration) DeepCopyInto(out *KubeProxyConfiguration) { *out = make([]string, len(*in)) copy(*out, *in) } + out.Winkernel = in.Winkernel return } @@ -181,3 +182,19 @@ func (in *KubeProxyIPVSConfiguration) DeepCopy() *KubeProxyIPVSConfiguration { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeProxyWinkernelConfiguration) DeepCopyInto(out *KubeProxyWinkernelConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeProxyWinkernelConfiguration. +func (in *KubeProxyWinkernelConfiguration) DeepCopy() *KubeProxyWinkernelConfiguration { + if in == nil { + return nil + } + out := new(KubeProxyWinkernelConfiguration) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/apis/well_known_labels.go b/vendor/k8s.io/kubernetes/pkg/proxy/apis/well_known_labels.go new file mode 100644 index 00000000000..84c4b9fa158 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/proxy/apis/well_known_labels.go @@ -0,0 +1,23 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apis + +const ( + // LabelServiceProxyName indicates that an alternative service + // proxy will implement this Service. + LabelServiceProxyName = "service.kubernetes.io/service-proxy-name" +) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/config/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/config/OWNERS old mode 100755 new mode 100644 index d9bd05962a3..c7e36e636c8 --- a/vendor/k8s.io/kubernetes/pkg/proxy/config/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/config/OWNERS @@ -1,6 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp - smarterclayton - brendandburns - freehan +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go b/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go index 067be71d79b..21f10cdcbf4 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go @@ -21,6 +21,7 @@ import ( "reflect" "strconv" "sync" + "time" "k8s.io/klog" @@ -29,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" utilproxy "k8s.io/kubernetes/pkg/proxy/util" - utilnet "k8s.io/kubernetes/pkg/util/net" + utilnet "k8s.io/utils/net" ) // BaseEndpointInfo contains base information that defines an endpoint. @@ -92,16 +93,20 @@ type EndpointChangeTracker struct { // isIPv6Mode indicates if change tracker is under IPv6/IPv4 mode. Nil means not applicable. isIPv6Mode *bool recorder record.EventRecorder + // Map from the Endpoints namespaced-name to the times of the triggers that caused the endpoints + // object to change. Used to calculate the network-programming-latency. + lastChangeTriggerTimes map[types.NamespacedName][]time.Time } // NewEndpointChangeTracker initializes an EndpointsChangeMap func NewEndpointChangeTracker(hostname string, makeEndpointInfo makeEndpointFunc, isIPv6Mode *bool, recorder record.EventRecorder) *EndpointChangeTracker { return &EndpointChangeTracker{ - hostname: hostname, - items: make(map[types.NamespacedName]*endpointsChange), - makeEndpointInfo: makeEndpointInfo, - isIPv6Mode: isIPv6Mode, - recorder: recorder, + hostname: hostname, + items: make(map[types.NamespacedName]*endpointsChange), + makeEndpointInfo: makeEndpointInfo, + isIPv6Mode: isIPv6Mode, + recorder: recorder, + lastChangeTriggerTimes: make(map[types.NamespacedName][]time.Time), } } @@ -133,14 +138,43 @@ func (ect *EndpointChangeTracker) Update(previous, current *v1.Endpoints) bool { change.previous = ect.endpointsToEndpointsMap(previous) ect.items[namespacedName] = change } + if t := getLastChangeTriggerTime(endpoints); !t.IsZero() { + ect.lastChangeTriggerTimes[namespacedName] = + append(ect.lastChangeTriggerTimes[namespacedName], t) + } change.current = ect.endpointsToEndpointsMap(current) // if change.previous equal to change.current, it means no change if reflect.DeepEqual(change.previous, change.current) { delete(ect.items, namespacedName) + // Reset the lastChangeTriggerTimes for the Endpoints object. Given that the network programming + // SLI is defined as the duration between a time of an event and a time when the network was + // programmed to incorporate that event, if there are events that happened between two + // consecutive syncs and that canceled each other out, e.g. pod A added -> pod A deleted, + // there will be no network programming for them and thus no network programming latency metric + // should be exported. + delete(ect.lastChangeTriggerTimes, namespacedName) } return len(ect.items) > 0 } +// getLastChangeTriggerTime returns the time.Time value of the EndpointsLastChangeTriggerTime +// annotation stored in the given endpoints object or the "zero" time if the annotation wasn't set +// or was set incorrectly. +func getLastChangeTriggerTime(endpoints *v1.Endpoints) time.Time { + if _, ok := endpoints.Annotations[v1.EndpointsLastChangeTriggerTime]; !ok { + // It's possible that the Endpoints object won't have the EndpointsLastChangeTriggerTime + // annotation set. In that case return the 'zero value', which is ignored in the upstream code. + return time.Time{} + } + val, err := time.Parse(time.RFC3339Nano, endpoints.Annotations[v1.EndpointsLastChangeTriggerTime]) + if err != nil { + klog.Warningf("Error while parsing EndpointsLastChangeTriggerTimeAnnotation: '%s'. Error is %v", + endpoints.Annotations[v1.EndpointsLastChangeTriggerTime], err) + // In case of error val = time.Zero, which is ignored in the upstream code. + } + return val +} + // endpointsChange contains all changes to endpoints that happened since proxy rules were synced. For a single object, // changes are accumulated, i.e. previous is state from before applying the changes, // current is state after applying the changes. @@ -157,14 +191,19 @@ type UpdateEndpointMapResult struct { StaleEndpoints []ServiceEndpoint // StaleServiceNames identifies if a service is stale. StaleServiceNames []ServicePortName + // List of the trigger times for all endpoints objects that changed. It's used to export the + // network programming latency. + LastChangeTriggerTimes []time.Time } // UpdateEndpointsMap updates endpointsMap base on the given changes. func UpdateEndpointsMap(endpointsMap EndpointsMap, changes *EndpointChangeTracker) (result UpdateEndpointMapResult) { result.StaleEndpoints = make([]ServiceEndpoint, 0) result.StaleServiceNames = make([]ServicePortName, 0) + result.LastChangeTriggerTimes = make([]time.Time, 0) - endpointsMap.apply(changes, &result.StaleEndpoints, &result.StaleServiceNames) + endpointsMap.apply( + changes, &result.StaleEndpoints, &result.StaleServiceNames, &result.LastChangeTriggerTimes) // TODO: If this will appear to be computationally expensive, consider // computing this incrementally similarly to endpointsMap. @@ -241,7 +280,10 @@ func (ect *EndpointChangeTracker) endpointsToEndpointsMap(endpoints *v1.Endpoint // apply the changes to EndpointsMap and updates stale endpoints and service-endpoints pair. The `staleEndpoints` argument // is passed in to store the stale udp endpoints and `staleServiceNames` argument is passed in to store the stale udp service. // The changes map is cleared after applying them. -func (endpointsMap EndpointsMap) apply(changes *EndpointChangeTracker, staleEndpoints *[]ServiceEndpoint, staleServiceNames *[]ServicePortName) { +// In addition it returns (via argument) and resets the lastChangeTriggerTimes for all endpoints +// that were changed and will result in syncing the proxy rules. +func (endpointsMap EndpointsMap) apply(changes *EndpointChangeTracker, staleEndpoints *[]ServiceEndpoint, + staleServiceNames *[]ServicePortName, lastChangeTriggerTimes *[]time.Time) { if changes == nil { return } @@ -253,6 +295,10 @@ func (endpointsMap EndpointsMap) apply(changes *EndpointChangeTracker, staleEndp detectStaleConnections(change.previous, change.current, staleEndpoints, staleServiceNames) } changes.items = make(map[types.NamespacedName]*endpointsChange) + for _, lastChangeTriggerTime := range changes.lastChangeTriggerTimes { + *lastChangeTriggerTimes = append(*lastChangeTriggerTimes, lastChangeTriggerTime...) + } + changes.lastChangeTriggerTimes = make(map[types.NamespacedName][]time.Time) } // Merge ensures that the current EndpointsMap contains all pairs from the EndpointsMap passed in. diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/BUILD index f94de593ce0..d136039b211 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/BUILD @@ -20,7 +20,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//vendor/github.com/renstrom/dedent:go_default_library", + "//vendor/github.com/lithammer/dedent:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/OWNERS old mode 100755 new mode 100644 index 0e4b22dce61..6e357e0e915 --- a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - m1093782566 diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/healthcheck.go b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/healthcheck.go index 5dc3f009ecb..2c0a8c369c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/healthcheck.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/healthcheck/healthcheck.go @@ -25,7 +25,7 @@ import ( "sync/atomic" "time" - "github.com/renstrom/dedent" + "github.com/lithammer/dedent" "k8s.io/klog" "k8s.io/api/core/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/BUILD index 2d1794529cd..c69ff558926 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/BUILD @@ -18,7 +18,6 @@ go_library( "//pkg/util/async:go_default_library", "//pkg/util/conntrack:go_default_library", "//pkg/util/iptables:go_default_library", - "//pkg/util/net:go_default_library", "//pkg/util/sysctl:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -27,6 +26,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/OWNERS old mode 100755 new mode 100644 index b6d1d616c8d..ce99e97466e --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton @@ -5,3 +7,5 @@ reviewers: - freehan - dcbw - danwinship +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go index 1fb994be32f..1a19eab5a9e 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go @@ -46,9 +46,9 @@ import ( "k8s.io/kubernetes/pkg/util/async" "k8s.io/kubernetes/pkg/util/conntrack" utiliptables "k8s.io/kubernetes/pkg/util/iptables" - utilnet "k8s.io/kubernetes/pkg/util/net" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" utilexec "k8s.io/utils/exec" + utilnet "k8s.io/utils/net" ) const ( @@ -317,7 +317,7 @@ func NewProxier(ipt utiliptables.Interface, if len(clusterCIDR) == 0 { klog.Warning("clusterCIDR not specified, unable to distinguish between internal and external traffic") - } else if utilnet.IsIPv6CIDR(clusterCIDR) != ipt.IsIpv6() { + } else if utilnet.IsIPv6CIDRString(clusterCIDR) != ipt.IsIpv6() { return nil, fmt.Errorf("clusterCIDR %s has incorrect IP version: expect isIPv6=%t", clusterCIDR, ipt.IsIpv6()) } @@ -358,39 +358,36 @@ func NewProxier(ipt utiliptables.Interface, } type iptablesJumpChain struct { - table utiliptables.Table - chain utiliptables.Chain - sourceChain utiliptables.Chain - comment string - extraArgs []string + table utiliptables.Table + dstChain utiliptables.Chain + srcChain utiliptables.Chain + comment string + extraArgs []string } var iptablesJumpChains = []iptablesJumpChain{ {utiliptables.TableFilter, kubeExternalServicesChain, utiliptables.ChainInput, "kubernetes externally-visible service portals", []string{"-m", "conntrack", "--ctstate", "NEW"}}, + {utiliptables.TableFilter, kubeServicesChain, utiliptables.ChainForward, "kubernetes service portals", []string{"-m", "conntrack", "--ctstate", "NEW"}}, {utiliptables.TableFilter, kubeServicesChain, utiliptables.ChainOutput, "kubernetes service portals", []string{"-m", "conntrack", "--ctstate", "NEW"}}, + {utiliptables.TableFilter, kubeServicesChain, utiliptables.ChainInput, "kubernetes service portals", []string{"-m", "conntrack", "--ctstate", "NEW"}}, + {utiliptables.TableFilter, kubeForwardChain, utiliptables.ChainForward, "kubernetes forwarding rules", nil}, {utiliptables.TableNAT, kubeServicesChain, utiliptables.ChainOutput, "kubernetes service portals", nil}, {utiliptables.TableNAT, kubeServicesChain, utiliptables.ChainPrerouting, "kubernetes service portals", nil}, {utiliptables.TableNAT, kubePostroutingChain, utiliptables.ChainPostrouting, "kubernetes postrouting rules", nil}, - {utiliptables.TableFilter, kubeForwardChain, utiliptables.ChainForward, "kubernetes forwarding rules", nil}, } -var iptablesCleanupOnlyChains = []iptablesJumpChain{ - // Present in kube 1.6 - 1.9. Removed by #56164 in favor of kubeExternalServicesChain - {utiliptables.TableFilter, kubeServicesChain, utiliptables.ChainInput, "kubernetes service portals", nil}, - // Present in kube <= 1.9. Removed by #60306 in favor of rule with extraArgs - {utiliptables.TableFilter, kubeServicesChain, utiliptables.ChainOutput, "kubernetes service portals", nil}, -} +var iptablesCleanupOnlyChains = []iptablesJumpChain{} // CleanupLeftovers removes all iptables rules and chains created by the Proxier // It returns true if an error was encountered. Errors are logged. func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { // Unlink our chains - for _, chain := range append(iptablesJumpChains, iptablesCleanupOnlyChains...) { - args := append(chain.extraArgs, - "-m", "comment", "--comment", chain.comment, - "-j", string(chain.chain), + for _, jump := range append(iptablesJumpChains, iptablesCleanupOnlyChains...) { + args := append(jump.extraArgs, + "-m", "comment", "--comment", jump.comment, + "-j", string(jump.dstChain), ) - if err := ipt.DeleteRule(chain.table, chain.sourceChain, args...); err != nil { + if err := ipt.DeleteRule(jump.table, jump.srcChain, args...); err != nil { if !utiliptables.IsNotFoundError(err) { klog.Errorf("Error removing pure-iptables proxy rule: %v", err) encounteredError = true @@ -607,10 +604,28 @@ func (proxier *Proxier) deleteEndpointConnections(connectionMap []proxy.ServiceE for _, epSvcPair := range connectionMap { if svcInfo, ok := proxier.serviceMap[epSvcPair.ServicePortName]; ok && svcInfo.GetProtocol() == v1.ProtocolUDP { endpointIP := utilproxy.IPPart(epSvcPair.Endpoint) - err := conntrack.ClearEntriesForNAT(proxier.exec, svcInfo.ClusterIPString(), endpointIP, v1.ProtocolUDP) + nodePort := svcInfo.GetNodePort() + var err error + if nodePort != 0 { + err = conntrack.ClearEntriesForPortNAT(proxier.exec, endpointIP, nodePort, v1.ProtocolUDP) + } else { + err = conntrack.ClearEntriesForNAT(proxier.exec, svcInfo.ClusterIPString(), endpointIP, v1.ProtocolUDP) + } if err != nil { klog.Errorf("Failed to delete %s endpoint connections, error: %v", epSvcPair.ServicePortName.String(), err) } + for _, extIP := range svcInfo.ExternalIPStrings() { + err := conntrack.ClearEntriesForNAT(proxier.exec, extIP, endpointIP, v1.ProtocolUDP) + if err != nil { + klog.Errorf("Failed to delete %s endpoint connections for externalIP %s, error: %v", epSvcPair.ServicePortName.String(), extIP, err) + } + } + for _, lbIP := range svcInfo.LoadBalancerIPStrings() { + err := conntrack.ClearEntriesForNAT(proxier.exec, lbIP, endpointIP, v1.ProtocolUDP) + if err != nil { + klog.Errorf("Failed to delete %s endpoint connections for LoabBalancerIP %s, error: %v", epSvcPair.ServicePortName.String(), lbIP, err) + } + } } } } @@ -637,7 +652,8 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { - metrics.SyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedSyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) klog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints @@ -658,23 +674,26 @@ func (proxier *Proxier) syncProxyRules() { if svcInfo, ok := proxier.serviceMap[svcPortName]; ok && svcInfo != nil && svcInfo.GetProtocol() == v1.ProtocolUDP { klog.V(2).Infof("Stale udp service %v -> %s", svcPortName, svcInfo.ClusterIPString()) staleServices.Insert(svcInfo.ClusterIPString()) + for _, extIP := range svcInfo.ExternalIPStrings() { + staleServices.Insert(extIP) + } } } klog.V(3).Info("Syncing iptables rules") // Create and link the kube chains. - for _, chain := range iptablesJumpChains { - if _, err := proxier.iptables.EnsureChain(chain.table, chain.chain); err != nil { - klog.Errorf("Failed to ensure that %s chain %s exists: %v", chain.table, kubeServicesChain, err) + for _, jump := range iptablesJumpChains { + if _, err := proxier.iptables.EnsureChain(jump.table, jump.dstChain); err != nil { + klog.Errorf("Failed to ensure that %s chain %s exists: %v", jump.table, jump.dstChain, err) return } - args := append(chain.extraArgs, - "-m", "comment", "--comment", chain.comment, - "-j", string(chain.chain), + args := append(jump.extraArgs, + "-m", "comment", "--comment", jump.comment, + "-j", string(jump.dstChain), ) - if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, chain.table, chain.sourceChain, args...); err != nil { - klog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", chain.table, chain.sourceChain, chain.chain, err) + if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, jump.table, jump.srcChain, args...); err != nil { + klog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", jump.table, jump.srcChain, jump.dstChain, err) return } } @@ -832,6 +851,7 @@ func (proxier *Proxier) syncProxyRules() { } writeLine(proxier.natRules, append(args, "-j", string(svcChain))...) } else { + // No endpoints. writeLine(proxier.filterRules, "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), @@ -902,6 +922,7 @@ func (proxier *Proxier) syncProxyRules() { // This covers cases like GCE load-balancers which get added to the local routing table. writeLine(proxier.natRules, append(dstLocalOnlyArgs, "-j", string(svcChain))...) } else { + // No endpoints. writeLine(proxier.filterRules, "-A", string(kubeExternalServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), @@ -914,10 +935,10 @@ func (proxier *Proxier) syncProxyRules() { } // Capture load-balancer ingress. - if hasEndpoints { - fwChain := svcInfo.serviceFirewallChainName - for _, ingress := range svcInfo.LoadBalancerStatus.Ingress { - if ingress.IP != "" { + fwChain := svcInfo.serviceFirewallChainName + for _, ingress := range svcInfo.LoadBalancerStatus.Ingress { + if ingress.IP != "" { + if hasEndpoints { // create service firewall chain if chain, ok := existingNATChains[fwChain]; ok { writeBytesLine(proxier.natChains, chain) @@ -978,10 +999,19 @@ func (proxier *Proxier) syncProxyRules() { // If the packet was able to reach the end of firewall chain, then it did not get DNATed. // It means the packet cannot go thru the firewall, then mark it for DROP writeLine(proxier.natRules, append(args, "-j", string(KubeMarkDropChain))...) + } else { + // No endpoints. + writeLine(proxier.filterRules, + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), + "-m", protocol, "-p", protocol, + "-d", utilproxy.ToCIDR(net.ParseIP(ingress.IP)), + "--dport", strconv.Itoa(svcInfo.Port), + "-j", "REJECT", + ) } } } - // FIXME: do we need REJECT rules for load-balancer ingress if !hasEndpoints? // Capture nodeports. If we had more than 2 rules it might be // worthwhile to make a new per-service chain for nodeport rules, but @@ -1063,6 +1093,7 @@ func (proxier *Proxier) syncProxyRules() { writeLine(proxier.natRules, append(args, "-j", string(svcXlbChain))...) } } else { + // No endpoints. writeLine(proxier.filterRules, "-A", string(kubeExternalServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), @@ -1338,6 +1369,11 @@ func (proxier *Proxier) syncProxyRules() { utilproxy.RevertPorts(replacementPortsMap, proxier.portsMap) return } + for _, lastChangeTriggerTime := range endpointUpdateResult.LastChangeTriggerTimes { + latency := metrics.SinceInSeconds(lastChangeTriggerTime) + metrics.NetworkProgrammingLatency.Observe(latency) + klog.V(4).Infof("Network programming took %f seconds", latency) + } // Close old local ports and save new ones. for k, v := range proxier.portsMap { diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/BUILD index 002b616f3f8..667eacea905 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/BUILD @@ -55,7 +55,6 @@ go_library( "//pkg/util/ipset:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/ipvs:go_default_library", - "//pkg/util/net:go_default_library", "//pkg/util/sysctl:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -65,6 +64,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//vendor/github.com/vishvananda/netlink:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/OWNERS index bccd989d475..c49cd694eba 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - brendandburns @@ -7,3 +9,5 @@ approvers: - thockin - brendandburns - m1093782566 +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/README.md b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/README.md index eb0f456f690..7395a6c990f 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/README.md +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/README.md @@ -1,8 +1,8 @@ - [IPVS](#ipvs) - [What is IPVS](#what-is-ipvs) - [IPVS vs. IPTABLES](#ipvs-vs-iptables) - - [When ipvs falls back to iptables](#when-ipvs-falls-back-to-iptables) - - [Run kube-proxy in ipvs mode](#run-kube-proxy-in-ipvs-mode) + - [When IPVS falls back to IPTABLES](#when-ipvs-falls-back-to-iptables) + - [Run kube-proxy in IPVS mode](#run-kube-proxy-in-ipvs-mode) - [Prerequisite](#prerequisite) - [Local UP Cluster](#local-up-cluster) - [GCE Cluster](#gce-cluster) @@ -16,7 +16,7 @@ This document intends to show users - what is IPVS - difference between IPVS and IPTABLES -- how to run kube-proxy in ipvs mode and info on debugging +- how to run kube-proxy in IPVS mode and info on debugging ## What is IPVS @@ -32,16 +32,16 @@ Differences between IPVS mode and IPTABLES mode are as follows: 1. IPVS provides better scalability and performance for large clusters. -2. IPVS supports more sophisticated load balancing algorithms than iptables (least load, least connections, locality, weighted, etc.). +2. IPVS supports more sophisticated load balancing algorithms than IPTABLES (least load, least connections, locality, weighted, etc.). 3. IPVS supports server health checking and connection retries, etc. -### When ipvs falls back to iptables -IPVS proxier will employ iptables in doing packet filtering, SNAT or masquerade. -Specifically, ipvs proxier will use ipset to store source or destination address of traffics that need DROP or do masquerade, to make sure the number of iptables rules be constant, no metter how many services we have. +### When IPVS falls back to IPTABLES +IPVS proxier will employ IPTABLES in doing packet filtering, SNAT or masquerade. +Specifically, IPVS proxier will use ipset to store source or destination address of traffics that need DROP or do masquerade, to make sure the number of IPTABLES rules be constant, no metter how many services we have. -Here is the table of ipset sets that ipvs proxier used. +Here is the table of ipset sets that IPVS proxier used. | set name | members | usage | | :----------------------------- | ---------------------------------------- | ---------------------------------------- | @@ -58,11 +58,11 @@ Here is the table of ipset sets that ipvs proxier used. | KUBE-NODE-PORT-LOCAL-UDP | nodeport type service UDP port with `externalTrafficPolicy=local` | accept packages to nodeport service with `externalTrafficPolicy=local` | -IPVS proxier will fall back on iptables in the following scenarios. +IPVS proxier will fall back on IPTABLES in the following scenarios. **1. kube-proxy starts with --masquerade-all=true** -If kube-proxy starts with `--masquerade-all=true`, ipvs proxier will masquerade all traffic accessing service Cluster IP, which behaves the same as what iptables proxier. Suppose kube-proxy have flag `--masquerade-all=true` specified, then the iptables installed by ipvs proxier should be like what is shown below. +If kube-proxy starts with `--masquerade-all=true`, IPVS proxier will masquerade all traffic accessing service Cluster IP, which behaves the same as what IPTABLES proxier. Suppose kube-proxy have flag `--masquerade-all=true` specified, then the IPTABLES installed by IPVS proxier should be like what is shown below. ```shell # iptables -t nat -nL @@ -96,7 +96,7 @@ ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUBE-CLU **2. Specify cluster CIDR in kube-proxy startup** -If kube-proxy starts with `--cluster-cidr=`, ipvs proxier will masquerade off-cluster traffic accessing service Cluster IP, which behaves the same as what iptables proxier. Suppose kube-proxy is provided with the cluster cidr `10.244.16.0/24`, then the iptables installed by ipvs proxier should be like what is shown below. +If kube-proxy starts with `--cluster-cidr=`, IPVS proxier will masquerade off-cluster traffic accessing service Cluster IP, which behaves the same as what IPTABLES proxier. Suppose kube-proxy is provided with the cluster cidr `10.244.16.0/24`, then the IPTABLES installed by IPVS proxier should be like what is shown below. ```shell # iptables -t nat -nL @@ -130,10 +130,10 @@ ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUBE-CLU **3. Load Balancer type service** -For loadBalancer type service, ipvs proxier will install iptables with match of ipset `KUBE-LOAD-BALANCER`. +For loadBalancer type service, IPVS proxier will install IPTABLES with match of ipset `KUBE-LOAD-BALANCER`. Specially when service's `LoadBalancerSourceRanges` is specified or specified `externalTrafficPolicy=local`, -ipvs proxier will create ipset sets `KUBE-LOAD-BALANCER-LOCAL`/`KUBE-LOAD-BALANCER-FW`/`KUBE-LOAD-BALANCER-SOURCE-CIDR` -and install iptables accordingly, which should looks like what is shown below. +IPVS proxier will create ipset sets `KUBE-LOAD-BALANCER-LOCAL`/`KUBE-LOAD-BALANCER-FW`/`KUBE-LOAD-BALANCER-SOURCE-CIDR` +and install IPTABLES accordingly, which should looks like what is shown below. ```shell # iptables -t nat -nL @@ -182,9 +182,9 @@ ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUBE-LOA **4. NodePort type service** -For NodePort type service, ipvs proxier will install iptables with match of ipset `KUBE-NODE-PORT-TCP/KUBE-NODE-PORT-UDP`. -When specified `externalTrafficPolicy=local`,ipvs proxier will create ipset sets `KUBE-NODE-PORT-LOCAL-TC/KUBE-NODE-PORT-LOCAL-UDP` -and install iptables accordingly, which should looks like what is shown below. +For NodePort type service, IPVS proxier will install IPTABLES with match of ipset `KUBE-NODE-PORT-TCP/KUBE-NODE-PORT-UDP`. +When specified `externalTrafficPolicy=local`,IPVS proxier will create ipset sets `KUBE-NODE-PORT-LOCAL-TC/KUBE-NODE-PORT-LOCAL-UDP` +and install IPTABLES accordingly, which should looks like what is shown below. Suppose service with TCP type nodePort. @@ -222,8 +222,8 @@ KUBE-NODE-PORT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUB **5. Service with externalIPs specified** -For service with `externalIPs` specified, ipvs proxier will install iptables with match of ipset `KUBE-EXTERNAL-IP`, -Suppose we have service with `externalIPs` specified, iptables rules should looks like what is shown below. +For service with `externalIPs` specified, IPVS proxier will install IPTABLES with match of ipset `KUBE-EXTERNAL-IP`, +Suppose we have service with `externalIPs` specified, IPTABLES rules should looks like what is shown below. ```shell Chain PREROUTING (policy ACCEPT) @@ -254,7 +254,7 @@ ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUBE-EXT ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set KUBE-EXTERNAL-IP dst,dst ADDRTYPE match dst-type LOCAL ``` -## Run kube-proxy in ipvs mode +## Run kube-proxy in IPVS mode Currently, local-up scripts, GCE scripts and kubeadm support switching IPVS proxy mode via exporting environment variables or specifying flags. @@ -313,9 +313,9 @@ Kube-proxy will fall back to IPTABLES mode if those requirements are not met. ### Local UP Cluster -Kube-proxy will run in iptables mode by default in a [local-up cluster](https://github.com/kubernetes/community/blob/master/contributors/devel/running-locally.md). +Kube-proxy will run in IPTABLES mode by default in a [local-up cluster](https://github.com/kubernetes/community/blob/master/contributors/devel/running-locally.md). -To use IPVS mode, users should export the env `KUBE_PROXY_MODE=ipvs` to specify the ipvs mode before [starting the cluster](https://github.com/kubernetes/community/blob/master/contributors/devel/running-locally.md#starting-the-cluster): +To use IPVS mode, users should export the env `KUBE_PROXY_MODE=ipvs` to specify the IPVS mode before [starting the cluster](https://github.com/kubernetes/community/blob/master/contributors/devel/running-locally.md#starting-the-cluster): ```shell # before running `hack/local-up-cluster.sh` export KUBE_PROXY_MODE=ipvs @@ -323,7 +323,7 @@ export KUBE_PROXY_MODE=ipvs ### GCE Cluster -Similar to local-up cluster, kube-proxy in [clusters running on GCE](https://kubernetes.io/docs/getting-started-guides/gce/) run in iptables mode by default. Users need to export the env `KUBE_PROXY_MODE=ipvs` before [starting a cluster](https://kubernetes.io/docs/getting-started-guides/gce/#starting-a-cluster): +Similar to local-up cluster, kube-proxy in [clusters running on GCE](https://kubernetes.io/docs/getting-started-guides/gce/) run in IPTABLES mode by default. Users need to export the env `KUBE_PROXY_MODE=ipvs` before [starting a cluster](https://kubernetes.io/docs/getting-started-guides/gce/#starting-a-cluster): ```shell #before running one of the commands chosen to start a cluster: # curl -sS https://get.k8s.io | bash @@ -336,7 +336,7 @@ export KUBE_PROXY_MODE=ipvs If you are using kubeadm with a [configuration file](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file), you have to add `mode: ipvs` and also add `SupportIPVSProxyMode: true` below the `kubeProxy` field as part of the kubeadm configuration. -```json +```yaml ... kubeProxy: config: @@ -360,7 +360,7 @@ kubeadm init --feature-gates=SupportIPVSProxyMode=true to specify the ipvs mode before deploying the cluster. **Notes** -If ipvs mode is successfully on, you should see ipvs proxy rules (use `ipvsadm`) like +If ipvs mode is successfully on, you should see IPVS proxy rules (use `ipvsadm`) like ```shell # ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) @@ -374,7 +374,7 @@ or similar logs occur in kube-proxy logs (for example, `/tmp/kube-proxy.log` for Using ipvs Proxier. ``` -While there is no ipvs proxy rules or the following logs ocuurs indicate that the kube-proxy fails to use ipvs mode: +While there is no IPVS proxy rules or the following logs ocuurs indicate that the kube-proxy fails to use IPVS mode: ``` Can't use ipvs proxier, trying iptables proxier Using iptables Proxier. @@ -422,4 +422,4 @@ Check whether the kube-proxy mode has been set to `ipvs`. **3. Install required kernel modules and packages** -Check whether the ipvs required kernel modules have been compiled into the kernel and packages installed. (see Prerequisite) +Check whether the IPVS required kernel modules have been compiled into the kernel and packages installed. (see Prerequisite) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/graceful_termination.go b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/graceful_termination.go index 4d53d4ee7b9..4fad4ba1d21 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/graceful_termination.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/graceful_termination.go @@ -204,21 +204,5 @@ func (m *GracefulTerminationManager) MoveRSOutofGracefulDeleteList(uniqueRS stri // Run start a goroutine to try to delete rs in the graceful delete rsList with an interval 1 minute func (m *GracefulTerminationManager) Run() { - // before start, add leftover in delete rs to graceful delete rsList - vss, err := m.ipvs.GetVirtualServers() - if err != nil { - klog.Errorf("IPVS graceful delete manager failed to get IPVS virtualserver") - } - for _, vs := range vss { - rss, err := m.ipvs.GetRealServers(vs) - if err != nil { - klog.Errorf("IPVS graceful delete manager failed to get %v realserver", vs) - continue - } - for _, rs := range rss { - m.GracefulDeleteRS(vs, rs) - } - } - go wait.Until(m.tryDeleteRs, rsCheckDeleteInterval, wait.NeverStop) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_linux.go b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_linux.go index 0c671200f03..f99d34f558c 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_linux.go @@ -30,11 +30,12 @@ import ( type netlinkHandle struct { netlink.Handle + isIPv6 bool } -// NewNetLinkHandle will crate a new NetLinkHandle -func NewNetLinkHandle() NetLinkHandle { - return &netlinkHandle{netlink.Handle{}} +// NewNetLinkHandle will create a new NetLinkHandle +func NewNetLinkHandle(isIPv6 bool) NetLinkHandle { + return &netlinkHandle{netlink.Handle{}, isIPv6} } // EnsureAddressBind checks if address is bound to the interface and, if not, binds it. If the address is already bound, return true. @@ -181,7 +182,11 @@ func (h *netlinkHandle) GetLocalAddresses(dev, filterDev string) (sets.String, e if route.LinkIndex == filterLinkIndex { continue } - if route.Src != nil { + if h.isIPv6 { + if route.Dst.IP.To4() == nil && !route.Dst.IP.IsLinkLocalUnicast() { + res.Insert(route.Dst.IP.String()) + } + } else if route.Src != nil { res.Insert(route.Src.String()) } } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_unsupported.go b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_unsupported.go index a83081f1fdb..1c709cd2b60 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/netlink_unsupported.go @@ -28,7 +28,7 @@ type emptyHandle struct { } // NewNetLinkHandle will create an EmptyHandle -func NewNetLinkHandle() NetLinkHandle { +func NewNetLinkHandle(ipv6 bool) NetLinkHandle { return &emptyHandle{} } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go index 020cec3c080..aa42fa73b8b 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go @@ -44,9 +44,9 @@ import ( utilipset "k8s.io/kubernetes/pkg/util/ipset" utiliptables "k8s.io/kubernetes/pkg/util/iptables" utilipvs "k8s.io/kubernetes/pkg/util/ipvs" - utilnet "k8s.io/kubernetes/pkg/util/net" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" utilexec "k8s.io/utils/exec" + utilnet "k8s.io/utils/net" ) const ( @@ -373,7 +373,7 @@ func NewProxier(ipt utiliptables.Interface, if len(clusterCIDR) == 0 { klog.Warningf("clusterCIDR not specified, unable to distinguish between internal and external traffic") - } else if utilnet.IsIPv6CIDR(clusterCIDR) != isIPv6 { + } else if utilnet.IsIPv6CIDRString(clusterCIDR) != isIPv6 { return nil, fmt.Errorf("clusterCIDR %s has incorrect IP version: expect isIPv6=%t", clusterCIDR, isIPv6) } @@ -406,14 +406,14 @@ func NewProxier(ipt utiliptables.Interface, healthzServer: healthzServer, ipvs: ipvs, ipvsScheduler: scheduler, - ipGetter: &realIPGetter{nl: NewNetLinkHandle()}, + ipGetter: &realIPGetter{nl: NewNetLinkHandle(isIPv6)}, iptablesData: bytes.NewBuffer(nil), filterChainsData: bytes.NewBuffer(nil), natChains: bytes.NewBuffer(nil), natRules: bytes.NewBuffer(nil), filterChains: bytes.NewBuffer(nil), filterRules: bytes.NewBuffer(nil), - netlinkHandle: NewNetLinkHandle(), + netlinkHandle: NewNetLinkHandle(isIPv6), ipset: ipset, nodePortAddresses: nodePortAddresses, networkInterfacer: utilproxy.RealNetwork{}, @@ -604,7 +604,7 @@ func CleanupLeftovers(ipvs utilipvs.Interface, ipt utiliptables.Interface, ipset } } // Delete dummy interface created by ipvs Proxier. - nl := NewNetLinkHandle() + nl := NewNetLinkHandle(false) err := nl.DeleteDummyDevice(DefaultDummyDevice) if err != nil { klog.Errorf("Error deleting dummy device %s created by IPVS proxier: %v", DefaultDummyDevice, err) @@ -669,7 +669,7 @@ func (proxier *Proxier) OnServiceDelete(service *v1.Service) { proxier.OnServiceUpdate(service, nil) } -// OnServiceSynced is called once all the initial even handlers were called and the state is fully propagated to local cache. +// OnServiceSynced is called once all the initial event handlers were called and the state is fully propagated to local cache. func (proxier *Proxier) OnServiceSynced() { proxier.mu.Lock() proxier.servicesSynced = true @@ -719,7 +719,8 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { - metrics.SyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedSyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) klog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints @@ -740,6 +741,9 @@ func (proxier *Proxier) syncProxyRules() { if svcInfo, ok := proxier.serviceMap[svcPortName]; ok && svcInfo != nil && svcInfo.GetProtocol() == v1.ProtocolUDP { klog.V(2).Infof("Stale udp service %v -> %s", svcPortName, svcInfo.ClusterIPString()) staleServices.Insert(svcInfo.ClusterIPString()) + for _, extIP := range svcInfo.ExternalIPStrings() { + staleServices.Insert(extIP) + } } } @@ -1028,11 +1032,9 @@ func (proxier *Proxier) syncProxyRules() { serv.Timeout = uint32(svcInfo.StickyMaxAgeSeconds) } if err := proxier.syncService(svcNameString, serv, true); err == nil { - // check if service need skip endpoints that not in same host as kube-proxy - onlyLocal := svcInfo.SessionAffinityType == v1.ServiceAffinityClientIP && svcInfo.OnlyNodeLocalEndpoints activeIPVSServices[serv.String()] = true activeBindAddrs[serv.Address.String()] = true - if err := proxier.syncEndpoint(svcName, onlyLocal, serv); err != nil { + if err := proxier.syncEndpoint(svcName, svcInfo.OnlyNodeLocalEndpoints, serv); err != nil { klog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err) } } else { @@ -1201,6 +1203,11 @@ func (proxier *Proxier) syncProxyRules() { utilproxy.RevertPorts(replacementPortsMap, proxier.portsMap) return } + for _, lastChangeTriggerTime := range endpointUpdateResult.LastChangeTriggerTimes { + latency := metrics.SinceInSeconds(lastChangeTriggerTime) + metrics.NetworkProgrammingLatency.Observe(latency) + klog.V(4).Infof("Network programming took %f seconds", latency) + } // Close old local ports and save new ones. for k, v := range proxier.portsMap { @@ -1495,6 +1502,18 @@ func (proxier *Proxier) deleteEndpointConnections(connectionMap []proxy.ServiceE if err != nil { klog.Errorf("Failed to delete %s endpoint connections, error: %v", epSvcPair.ServicePortName.String(), err) } + for _, extIP := range svcInfo.ExternalIPStrings() { + err := conntrack.ClearEntriesForNAT(proxier.exec, extIP, endpointIP, v1.ProtocolUDP) + if err != nil { + klog.Errorf("Failed to delete %s endpoint connections for externalIP %s, error: %v", epSvcPair.ServicePortName.String(), extIP, err) + } + } + for _, lbIP := range svcInfo.LoadBalancerIPStrings() { + err := conntrack.ClearEntriesForNAT(proxier.exec, lbIP, endpointIP, v1.ProtocolUDP) + if err != nil { + klog.Errorf("Failed to delete %s endpoint connections for LoabBalancerIP %s, error: %v", epSvcPair.ServicePortName.String(), lbIP, err) + } + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go index d442f2da320..38924387ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go @@ -28,21 +28,51 @@ const kubeProxySubsystem = "kubeproxy" var ( // SyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. SyncProxyRulesLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_duration_seconds", + Help: "SyncProxyRules latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + + // DeprecatedSyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. + DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: kubeProxySubsystem, Name: "sync_proxy_rules_latency_microseconds", - Help: "SyncProxyRules latency", + Help: "(Deprecated) SyncProxyRules latency in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) + + // NetworkProgrammingLatency is defined as the time it took to program the network - from the time + // the service or pod has changed to the time the change was propagated and the proper kube-proxy + // rules were synced. Exported for each endpoints object that were part of the rules sync. + // See https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md + // Note that the metrics is partially based on the time exported by the endpoints controller on + // the master machine. The measurement may be inaccurate if there is a clock drift between the + // node and master machine. + NetworkProgrammingLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "network_programming_duration_seconds", + Help: "In Cluster Network Programming Latency in seconds", + // TODO(mm4tt): Reevaluate buckets before 1.14 release. + // The last bucket will be [0.001s*2^20 ~= 17min, +inf) + Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), + }, + ) ) var registerMetricsOnce sync.Once -// RegisterMetrics registers sync proxy rules latency metrics +// RegisterMetrics registers kube-proxy metrics. func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) + prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) + prometheus.MustRegister(NetworkProgrammingLatency) }) } @@ -50,3 +80,8 @@ func RegisterMetrics() { func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } + +// SinceInSeconds gets the time since the specified start in seconds. +func SinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/service.go b/vendor/k8s.io/kubernetes/pkg/proxy/service.go index 8386e62c0e2..2d5bd352f53 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/service.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/service.go @@ -31,7 +31,7 @@ import ( "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/v1/service" utilproxy "k8s.io/kubernetes/pkg/proxy/util" - utilnet "k8s.io/kubernetes/pkg/util/net" + utilnet "k8s.io/utils/net" ) // BaseServiceInfo contains base information that defines a service. @@ -74,6 +74,25 @@ func (info *BaseServiceInfo) GetHealthCheckNodePort() int { return info.HealthCheckNodePort } +// GetNodePort is part of the ServicePort interface. +func (info *BaseServiceInfo) GetNodePort() int { + return info.NodePort +} + +// ExternalIPStrings is part of ServicePort interface. +func (info *BaseServiceInfo) ExternalIPStrings() []string { + return info.ExternalIPs +} + +// LoadBalancerIPStrings is part of ServicePort interface. +func (info *BaseServiceInfo) LoadBalancerIPStrings() []string { + var ips []string + for _, ing := range info.LoadBalancerStatus.Ingress { + ips = append(ips, ing.IP) + } + return ips +} + func (sct *ServiceChangeTracker) newBaseServiceInfo(port *v1.ServicePort, service *v1.Service) *BaseServiceInfo { onlyNodeLocalEndpoints := false if apiservice.RequestsOnlyLocalTraffic(service) { @@ -106,11 +125,11 @@ func (sct *ServiceChangeTracker) newBaseServiceInfo(port *v1.ServicePort, servic // If ExternalIPs and LoadBalancerSourceRanges on service contains incorrect IP versions, // only filter out the incorrect ones. var incorrectIPs []string - info.ExternalIPs, incorrectIPs = utilnet.FilterIncorrectIPVersion(service.Spec.ExternalIPs, *sct.isIPv6Mode) + info.ExternalIPs, incorrectIPs = utilproxy.FilterIncorrectIPVersion(service.Spec.ExternalIPs, *sct.isIPv6Mode) if len(incorrectIPs) > 0 { utilproxy.LogAndEmitIncorrectIPVersionEvent(sct.recorder, "externalIPs", strings.Join(incorrectIPs, ","), service.Namespace, service.Name, service.UID) } - info.LoadBalancerSourceRanges, incorrectIPs = utilnet.FilterIncorrectCIDRVersion(service.Spec.LoadBalancerSourceRanges, *sct.isIPv6Mode) + info.LoadBalancerSourceRanges, incorrectIPs = utilproxy.FilterIncorrectCIDRVersion(service.Spec.LoadBalancerSourceRanges, *sct.isIPv6Mode) if len(incorrectIPs) > 0 { utilproxy.LogAndEmitIncorrectIPVersionEvent(sct.recorder, "loadBalancerSourceRanges", strings.Join(incorrectIPs, ","), service.Namespace, service.Name, service.UID) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/types.go b/vendor/k8s.io/kubernetes/pkg/proxy/types.go index f38937068c8..b7d8b1654a9 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/types.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/types.go @@ -50,10 +50,16 @@ type ServicePort interface { String() string // ClusterIPString returns service cluster IP in string format. ClusterIPString() string + // ExternalIPStrings returns service ExternalIPs as a string array. + ExternalIPStrings() []string + // LoadBalancerIPStrings returns service LoadBalancerIPs as a string array. + LoadBalancerIPStrings() []string // GetProtocol returns service protocol. GetProtocol() v1.Protocol // GetHealthCheckNodePort returns service health check node port if present. If return 0, it means not present. GetHealthCheckNodePort() int + // GetNodePort returns a service Node port if present. If return 0, it means not present. + GetNodePort() int } // Endpoint in an interface which abstracts information about an endpoint. diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/userspace/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/userspace/BUILD index b7887c85b5d..17a7be8ebbd 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/userspace/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/userspace/BUILD @@ -33,6 +33,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:android": [ diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/userspace/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/userspace/OWNERS old mode 100755 new mode 100644 index 4988f45c4dd..c0db3231681 --- a/vendor/k8s.io/kubernetes/pkg/proxy/userspace/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/userspace/OWNERS @@ -1,5 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp - smarterclayton - freehan +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/util/BUILD index fbbb01b18e7..f53b3a1cbbd 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/BUILD @@ -12,12 +12,12 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/util/net:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go b/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go index 35924e05e87..2706f067fde 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go @@ -43,7 +43,7 @@ func (lp *LocalPort) String() string { return fmt.Sprintf("%q (%s/%s)", lp.Description, ipPort, lp.Protocol) } -// Closeable is an interface around closing an port. +// Closeable is an interface around closing a port. type Closeable interface { Close() error } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go b/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go index 9c776cf4956..6f98d0ddc73 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - utilnet "k8s.io/kubernetes/pkg/util/net" + utilnet "k8s.io/utils/net" "k8s.io/klog" ) @@ -197,3 +197,25 @@ func LogAndEmitIncorrectIPVersionEvent(recorder record.EventRecorder, fieldName, }, v1.EventTypeWarning, "KubeProxyIncorrectIPVersion", errMsg) } } + +// FilterIncorrectIPVersion filters out the incorrect IP version case from a slice of IP strings. +func FilterIncorrectIPVersion(ipStrings []string, isIPv6Mode bool) ([]string, []string) { + return filterWithCondition(ipStrings, isIPv6Mode, utilnet.IsIPv6String) +} + +// FilterIncorrectCIDRVersion filters out the incorrect IP version case from a slice of CIDR strings. +func FilterIncorrectCIDRVersion(ipStrings []string, isIPv6Mode bool) ([]string, []string) { + return filterWithCondition(ipStrings, isIPv6Mode, utilnet.IsIPv6CIDRString) +} + +func filterWithCondition(strs []string, expectedCondition bool, conditionFunc func(string) bool) ([]string, []string) { + var corrects, incorrects []string + for _, str := range strs { + if conditionFunc(str) != expectedCondition { + incorrects = append(incorrects, str) + } else { + corrects = append(corrects, str) + } + } + return corrects, incorrects +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/BUILD index 4d6b5e0f881..c91644282e7 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/BUILD @@ -1,8 +1,10 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ + "hnsV1.go", + "hnsV2.go", "metrics.go", "proxier.go", ], @@ -15,14 +17,18 @@ go_library( "//pkg/api/v1/service:go_default_library", "//pkg/apis/core/v1/helper:go_default_library", "//pkg/proxy:go_default_library", + "//pkg/proxy/apis/config:go_default_library", "//pkg/proxy/healthcheck:go_default_library", "//pkg/util/async:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/github.com/Microsoft/hcsshim:go_default_library", + "//vendor/github.com/Microsoft/hcsshim/hcn:go_default_library", "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -43,3 +49,22 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = [ + "hns_test.go", + "proxier_test.go", + ], + embed = [":go_default_library"], + deps = select({ + "@io_bazel_rules_go//go/platform:windows": [ + "//pkg/proxy:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/github.com/Microsoft/hcsshim/hcn:go_default_library", + ], + "//conditions:default": [], + }), +) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/OWNERS b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/OWNERS index 557cda002be..845248af5f1 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - dineshgovindasamy - madhanrm @@ -6,3 +8,5 @@ reviewers: - dineshgovindasamy - madhanrm - feiskyer +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV1.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV1.go new file mode 100644 index 00000000000..19aa4ecd0b7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV1.go @@ -0,0 +1,225 @@ +// +build windows + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package winkernel + +import ( + "encoding/json" + "fmt" + "github.com/Microsoft/hcsshim" + "k8s.io/klog" + "net" + "strings" +) + +type HostNetworkService interface { + getNetworkByName(name string) (*hnsNetworkInfo, error) + getEndpointByID(id string) (*endpointsInfo, error) + getEndpointByIpAddress(ip string, networkName string) (*endpointsInfo, error) + createEndpoint(ep *endpointsInfo, networkName string) (*endpointsInfo, error) + deleteEndpoint(hnsID string) error + getLoadBalancer(endpoints []endpointsInfo, isILB bool, isDSR bool, sourceVip string, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*loadBalancerInfo, error) + deleteLoadBalancer(hnsID string) error +} + +// V1 HNS API +type hnsV1 struct{} + +func (hns hnsV1) getNetworkByName(name string) (*hnsNetworkInfo, error) { + hnsnetwork, err := hcsshim.GetHNSNetworkByName(name) + if err != nil { + klog.Errorf("%v", err) + return nil, err + } + + return &hnsNetworkInfo{ + id: hnsnetwork.Id, + name: hnsnetwork.Name, + networkType: hnsnetwork.Type, + }, nil +} +func (hns hnsV1) getEndpointByID(id string) (*endpointsInfo, error) { + hnsendpoint, err := hcsshim.GetHNSEndpointByID(id) + if err != nil { + klog.Errorf("%v", err) + return nil, err + } + return &endpointsInfo{ + ip: hnsendpoint.IPAddress.String(), + isLocal: !hnsendpoint.IsRemoteEndpoint, //TODO: Change isLocal to isRemote + macAddress: hnsendpoint.MacAddress, + hnsID: hnsendpoint.Id, + hns: hns, + }, nil +} +func (hns hnsV1) getEndpointByIpAddress(ip string, networkName string) (*endpointsInfo, error) { + hnsnetwork, err := hcsshim.GetHNSNetworkByName(networkName) + if err != nil { + klog.Errorf("%v", err) + return nil, err + } + + endpoints, err := hcsshim.HNSListEndpointRequest() + for _, endpoint := range endpoints { + equal := false + if endpoint.IPAddress != nil { + equal = endpoint.IPAddress.String() == ip + } + if equal && strings.EqualFold(endpoint.VirtualNetwork, hnsnetwork.Id) { + return &endpointsInfo{ + ip: endpoint.IPAddress.String(), + isLocal: !endpoint.IsRemoteEndpoint, + macAddress: endpoint.MacAddress, + hnsID: endpoint.Id, + hns: hns, + }, nil + } + } + + return nil, fmt.Errorf("Endpoint %v not found on network %s", ip, networkName) +} +func (hns hnsV1) createEndpoint(ep *endpointsInfo, networkName string) (*endpointsInfo, error) { + hnsNetwork, err := hcsshim.GetHNSNetworkByName(networkName) + if err != nil { + return nil, fmt.Errorf("Could not find network %s: %v", networkName, err) + } + hnsEndpoint := &hcsshim.HNSEndpoint{ + MacAddress: ep.macAddress, + IPAddress: net.ParseIP(ep.ip), + } + + var createdEndpoint *hcsshim.HNSEndpoint + if !ep.isLocal { + if len(ep.providerAddress) != 0 { + paPolicy := hcsshim.PaPolicy{ + Type: hcsshim.PA, + PA: ep.providerAddress, + } + paPolicyJson, err := json.Marshal(paPolicy) + if err != nil { + return nil, fmt.Errorf("PA Policy creation failed: %v", err) + } + hnsEndpoint.Policies = append(hnsEndpoint.Policies, paPolicyJson) + } + createdEndpoint, err = hnsNetwork.CreateRemoteEndpoint(hnsEndpoint) + if err != nil { + return nil, fmt.Errorf("Remote endpoint creation failed: %v", err) + } + + } else { + createdEndpoint, err = hnsNetwork.CreateEndpoint(hnsEndpoint) + if err != nil { + return nil, fmt.Errorf("Local endpoint creation failed: %v", err) + } + } + return &endpointsInfo{ + ip: createdEndpoint.IPAddress.String(), + isLocal: createdEndpoint.IsRemoteEndpoint, + macAddress: createdEndpoint.MacAddress, + hnsID: createdEndpoint.Id, + providerAddress: ep.providerAddress, //TODO get from createdEndpoint + hns: hns, + }, nil +} +func (hns hnsV1) deleteEndpoint(hnsID string) error { + hnsendpoint, err := hcsshim.GetHNSEndpointByID(hnsID) + if err != nil { + return err + } + _, err = hnsendpoint.Delete() + if err == nil { + klog.V(3).Infof("Remote endpoint resource deleted id %s", hnsID) + } + return err +} + +func (hns hnsV1) getLoadBalancer(endpoints []endpointsInfo, isILB bool, isDSR bool, sourceVip string, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*loadBalancerInfo, error) { + plists, err := hcsshim.HNSListPolicyListRequest() + if err != nil { + return nil, err + } + + if isDSR { + klog.V(3).Info("DSR is not supported in V1. Using non DSR instead") + } + + for _, plist := range plists { + if len(plist.EndpointReferences) != len(endpoints) { + continue + } + // Validate if input meets any of the policy lists + elbPolicy := hcsshim.ELBPolicy{} + if err = json.Unmarshal(plist.Policies[0], &elbPolicy); err != nil { + continue + } + if elbPolicy.Protocol == protocol && elbPolicy.InternalPort == internalPort && elbPolicy.ExternalPort == externalPort && elbPolicy.ILB == isILB { + if len(vip) > 0 { + if len(elbPolicy.VIPs) == 0 || elbPolicy.VIPs[0] != vip { + continue + } + } + LogJson(plist, "Found existing Hns loadbalancer policy resource", 1) + return &loadBalancerInfo{ + hnsID: plist.ID, + }, nil + } + } + + var hnsEndpoints []hcsshim.HNSEndpoint + for _, ep := range endpoints { + endpoint, err := hcsshim.GetHNSEndpointByID(ep.hnsID) + if err != nil { + return nil, err + } + hnsEndpoints = append(hnsEndpoints, *endpoint) + } + lb, err := hcsshim.AddLoadBalancer( + hnsEndpoints, + isILB, + sourceVip, + vip, + protocol, + internalPort, + externalPort, + ) + + if err == nil { + LogJson(lb, "Hns loadbalancer policy resource", 1) + } else { + return nil, err + } + return &loadBalancerInfo{ + hnsID: lb.ID, + }, err +} +func (hns hnsV1) deleteLoadBalancer(hnsID string) error { + if len(hnsID) == 0 { + // Return silently + return nil + } + + // Cleanup HNS policies + hnsloadBalancer, err := hcsshim.GetPolicyListByID(hnsID) + if err != nil { + return err + } + LogJson(hnsloadBalancer, "Removing Policy", 2) + + _, err = hnsloadBalancer.Delete() + return err +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV2.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV2.go new file mode 100644 index 00000000000..43872095d29 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/hnsV2.go @@ -0,0 +1,239 @@ +// +build windows + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package winkernel + +import ( + "encoding/json" + "fmt" + + "github.com/Microsoft/hcsshim/hcn" + "k8s.io/klog" + + "strings" +) + +type hnsV2 struct{} + +func (hns hnsV2) getNetworkByName(name string) (*hnsNetworkInfo, error) { + hnsnetwork, err := hcn.GetNetworkByName(name) + if err != nil { + klog.Errorf("%v", err) + return nil, err + } + + var remoteSubnets []*remoteSubnetInfo + for _, policy := range hnsnetwork.Policies { + if policy.Type == hcn.RemoteSubnetRoute { + policySettings := hcn.RemoteSubnetRoutePolicySetting{} + err = json.Unmarshal(policy.Settings, &policySettings) + if err != nil { + return nil, fmt.Errorf("Failed to unmarshal Remote Subnet policy settings") + } + rs := &remoteSubnetInfo{ + destinationPrefix: policySettings.DestinationPrefix, + isolationId: policySettings.IsolationId, + providerAddress: policySettings.ProviderAddress, + drMacAddress: policySettings.DistributedRouterMacAddress, + } + remoteSubnets = append(remoteSubnets, rs) + } + } + + return &hnsNetworkInfo{ + id: hnsnetwork.Id, + name: hnsnetwork.Name, + networkType: string(hnsnetwork.Type), + remoteSubnets: remoteSubnets, + }, nil +} +func (hns hnsV2) getEndpointByID(id string) (*endpointsInfo, error) { + hnsendpoint, err := hcn.GetEndpointByID(id) + if err != nil { + return nil, err + } + return &endpointsInfo{ //TODO: fill out PA + ip: hnsendpoint.IpConfigurations[0].IpAddress, + isLocal: uint32(hnsendpoint.Flags&hcn.EndpointFlagsRemoteEndpoint) == 0, //TODO: Change isLocal to isRemote + macAddress: hnsendpoint.MacAddress, + hnsID: hnsendpoint.Id, + hns: hns, + }, nil +} +func (hns hnsV2) getEndpointByIpAddress(ip string, networkName string) (*endpointsInfo, error) { + hnsnetwork, err := hcn.GetNetworkByName(networkName) + if err != nil { + klog.Errorf("%v", err) + return nil, err + } + + endpoints, err := hcn.ListEndpoints() + for _, endpoint := range endpoints { + equal := false + if endpoint.IpConfigurations != nil && len(endpoint.IpConfigurations) > 0 { + equal = endpoint.IpConfigurations[0].IpAddress == ip + } + if equal && strings.EqualFold(endpoint.HostComputeNetwork, hnsnetwork.Id) { + return &endpointsInfo{ + ip: endpoint.IpConfigurations[0].IpAddress, + isLocal: uint32(endpoint.Flags&hcn.EndpointFlagsRemoteEndpoint) == 0, //TODO: Change isLocal to isRemote + macAddress: endpoint.MacAddress, + hnsID: endpoint.Id, + hns: hns, + }, nil + } + } + + return nil, fmt.Errorf("Endpoint %v not found on network %s", ip, networkName) +} +func (hns hnsV2) createEndpoint(ep *endpointsInfo, networkName string) (*endpointsInfo, error) { + hnsNetwork, err := hcn.GetNetworkByName(networkName) + if err != nil { + return nil, fmt.Errorf("Could not find network %s: %v", networkName, err) + } + var flags hcn.EndpointFlags + if !ep.isLocal { + flags |= hcn.EndpointFlagsRemoteEndpoint + } + ipConfig := &hcn.IpConfig{ + IpAddress: ep.ip, + } + hnsEndpoint := &hcn.HostComputeEndpoint{ + IpConfigurations: []hcn.IpConfig{*ipConfig}, + MacAddress: ep.macAddress, + Flags: flags, + SchemaVersion: hcn.SchemaVersion{ + Major: 2, + Minor: 0, + }, + } + + var createdEndpoint *hcn.HostComputeEndpoint + if !ep.isLocal { + if len(ep.providerAddress) != 0 { + policySettings := hcn.ProviderAddressEndpointPolicySetting{ + ProviderAddress: ep.providerAddress, + } + policySettingsJson, err := json.Marshal(policySettings) + if err != nil { + return nil, fmt.Errorf("PA Policy creation failed: %v", err) + } + paPolicy := hcn.EndpointPolicy{ + Type: hcn.NetworkProviderAddress, + Settings: policySettingsJson, + } + hnsEndpoint.Policies = append(hnsEndpoint.Policies, paPolicy) + } + createdEndpoint, err = hnsNetwork.CreateRemoteEndpoint(hnsEndpoint) + if err != nil { + return nil, fmt.Errorf("Remote endpoint creation failed: %v", err) + } + } else { + createdEndpoint, err = hnsNetwork.CreateEndpoint(hnsEndpoint) + if err != nil { + return nil, fmt.Errorf("Local endpoint creation failed: %v", err) + } + } + return &endpointsInfo{ + ip: createdEndpoint.IpConfigurations[0].IpAddress, + isLocal: uint32(createdEndpoint.Flags&hcn.EndpointFlagsRemoteEndpoint) == 0, + macAddress: createdEndpoint.MacAddress, + hnsID: createdEndpoint.Id, + providerAddress: ep.providerAddress, //TODO get from createdEndpoint + hns: hns, + }, nil +} +func (hns hnsV2) deleteEndpoint(hnsID string) error { + hnsendpoint, err := hcn.GetEndpointByID(hnsID) + if err != nil { + return err + } + err = hnsendpoint.Delete() + if err == nil { + klog.V(3).Infof("Remote endpoint resource deleted id %s", hnsID) + } + return err +} +func (hns hnsV2) getLoadBalancer(endpoints []endpointsInfo, isILB bool, isDSR bool, sourceVip string, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*loadBalancerInfo, error) { + plists, err := hcn.ListLoadBalancers() + if err != nil { + return nil, err + } + + for _, plist := range plists { + if len(plist.HostComputeEndpoints) != len(endpoints) { + continue + } + // Validate if input meets any of the policy lists + lbPortMapping := plist.PortMappings[0] + if lbPortMapping.Protocol == uint32(protocol) && lbPortMapping.InternalPort == internalPort && lbPortMapping.ExternalPort == externalPort && (lbPortMapping.Flags&1 != 0) == isILB { + if len(vip) > 0 { + if len(plist.FrontendVIPs) == 0 || plist.FrontendVIPs[0] != vip { + continue + } + } + LogJson(plist, "Found existing Hns loadbalancer policy resource", 1) + return &loadBalancerInfo{ + hnsID: plist.Id, + }, nil + } + } + + var hnsEndpoints []hcn.HostComputeEndpoint + for _, ep := range endpoints { + endpoint, err := hcn.GetEndpointByID(ep.hnsID) + if err != nil { + return nil, err + } + hnsEndpoints = append(hnsEndpoints, *endpoint) + } + + vips := []string{} + if len(vip) > 0 { + vips = append(vips, vip) + } + lb, err := hcn.AddLoadBalancer( + hnsEndpoints, + isILB, + isDSR, + sourceVip, + vips, + protocol, + internalPort, + externalPort, + ) + if err != nil { + return nil, err + } + + LogJson(lb, "Hns loadbalancer policy resource", 1) + + return &loadBalancerInfo{ + hnsID: lb.Id, + }, err +} +func (hns hnsV2) deleteLoadBalancer(hnsID string) error { + lb, err := hcn.GetLoadBalancerByID(hnsID) + if err != nil { + // Return silently + return nil + } + + err = lb.Delete() + return err +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go index 100b6abba87..61cf962ee0e 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go @@ -27,10 +27,19 @@ const kubeProxySubsystem = "kubeproxy" var ( SyncProxyRulesLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_duration_seconds", + Help: "SyncProxyRules latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + + DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: kubeProxySubsystem, Name: "sync_proxy_rules_latency_microseconds", - Help: "SyncProxyRules latency", + Help: "(Deprecated) SyncProxyRules latency in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) @@ -41,6 +50,7 @@ var registerMetricsOnce sync.Once func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) + prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) }) } @@ -48,3 +58,8 @@ func RegisterMetrics() { func sinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } + +// Gets the time since the specified start in seconds. +func sinceInSeconds(start time.Time) float64 { + return time.Since(start).Seconds() +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go index b0289ffe4d7..7f6eec06cf9 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go @@ -29,6 +29,8 @@ import ( "time" "github.com/Microsoft/hcsshim" + "github.com/Microsoft/hcsshim/hcn" + "github.com/davecgh/go-spew/spew" "k8s.io/klog" @@ -36,10 +38,13 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + genericfeatures "k8s.io/apiserver/pkg/features" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/v1/service" "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/proxy" + "k8s.io/kubernetes/pkg/proxy/apis/config" "k8s.io/kubernetes/pkg/proxy/healthcheck" "k8s.io/kubernetes/pkg/util/async" ) @@ -82,6 +87,10 @@ type loadBalancerIngressInfo struct { hnsID string } +type loadBalancerInfo struct { + hnsID string +} + // internal struct for string service information type serviceInfo struct { clusterIP net.IP @@ -100,11 +109,22 @@ type serviceInfo struct { hnsID string nodePorthnsID string policyApplied bool + remoteEndpoint *endpointsInfo + hns HostNetworkService } type hnsNetworkInfo struct { - name string - id string + name string + id string + networkType string + remoteSubnets []*remoteSubnetInfo +} + +type remoteSubnetInfo struct { + destinationPrefix string + isolationId uint16 + providerAddress string + drMacAddress string } func Log(v interface{}, message string, level klog.Level) { @@ -120,12 +140,14 @@ func LogJson(v interface{}, message string, level klog.Level) { // internal struct for endpoints information type endpointsInfo struct { - ip string - port uint16 - isLocal bool - macAddress string - hnsID string - refCount uint16 + ip string + port uint16 + isLocal bool + macAddress string + hnsID string + refCount uint16 + providerAddress string + hns HostNetworkService } //Uses mac prefix and IPv4 address to return a mac address @@ -139,7 +161,7 @@ func conjureMac(macPrefix string, ip net.IP) string { return "02-11-22-33-44-55" } -func newEndpointInfo(ip string, port uint16, isLocal bool) *endpointsInfo { +func newEndpointInfo(ip string, port uint16, isLocal bool, hns HostNetworkService) *endpointsInfo { info := &endpointsInfo{ ip: ip, port: port, @@ -147,6 +169,7 @@ func newEndpointInfo(ip string, port uint16, isLocal bool) *endpointsInfo { macAddress: conjureMac("02-11", net.ParseIP(ip)), refCount: 0, hnsID: "", + hns: hns, } return info @@ -160,14 +183,17 @@ func (ep *endpointsInfo) Cleanup() { // Remove only remote endpoints created by this service if ep.refCount <= 0 && !ep.isLocal { klog.V(4).Infof("Removing endpoints for %v, since no one is referencing it", ep) - deleteHnsEndpoint(ep.hnsID) - ep.hnsID = "" + err := ep.hns.deleteEndpoint(ep.hnsID) + if err == nil { + ep.hnsID = "" + } else { + klog.Errorf("Endpoint deletion failed for %v: %v", ep.ip, err) + } } - } // returns a new serviceInfo struct -func newServiceInfo(svcPortName proxy.ServicePortName, port *v1.ServicePort, service *v1.Service) *serviceInfo { +func newServiceInfo(svcPortName proxy.ServicePortName, port *v1.ServicePort, service *v1.Service, hns HostNetworkService) *serviceInfo { onlyNodeLocalEndpoints := false if apiservice.RequestsOnlyLocalTraffic(service) { onlyNodeLocalEndpoints = true @@ -175,8 +201,7 @@ func newServiceInfo(svcPortName proxy.ServicePortName, port *v1.ServicePort, ser // set default session sticky max age 180min=10800s stickyMaxAgeSeconds := 10800 - if service.Spec.SessionAffinity == v1.ServiceAffinityClientIP { - // Kube-apiserver side guarantees SessionAffinityConfig won't be nil when session affinity type is ClientIP + if service.Spec.SessionAffinity == v1.ServiceAffinityClientIP && service.Spec.SessionAffinityConfig != nil { stickyMaxAgeSeconds = int(*service.Spec.SessionAffinityConfig.ClientIP.TimeoutSeconds) } info := &serviceInfo{ @@ -193,6 +218,7 @@ func newServiceInfo(svcPortName proxy.ServicePortName, port *v1.ServicePort, ser stickyMaxAgeSeconds: stickyMaxAgeSeconds, loadBalancerSourceRanges: make([]string, len(service.Spec.LoadBalancerSourceRanges)), onlyNodeLocalEndpoints: onlyNodeLocalEndpoints, + hns: hns, } copy(info.loadBalancerSourceRanges, service.Spec.LoadBalancerSourceRanges) @@ -256,17 +282,17 @@ func newEndpointsChangeMap(hostname string) endpointsChangeMap { } } -func (ecm *endpointsChangeMap) update(namespacedName *types.NamespacedName, previous, current *v1.Endpoints) bool { +func (ecm *endpointsChangeMap) update(namespacedName *types.NamespacedName, previous, current *v1.Endpoints, hns HostNetworkService) bool { ecm.lock.Lock() defer ecm.lock.Unlock() change, exists := ecm.items[*namespacedName] if !exists { change = &endpointsChange{} - change.previous = endpointsToEndpointsMap(previous, ecm.hostname) + change.previous = endpointsToEndpointsMap(previous, ecm.hostname, hns) ecm.items[*namespacedName] = change } - change.current = endpointsToEndpointsMap(current, ecm.hostname) + change.current = endpointsToEndpointsMap(current, ecm.hostname, hns) if reflect.DeepEqual(change.previous, change.current) { delete(ecm.items, *namespacedName) } @@ -279,7 +305,7 @@ func newServiceChangeMap() serviceChangeMap { } } -func (scm *serviceChangeMap) update(namespacedName *types.NamespacedName, previous, current *v1.Service) bool { +func (scm *serviceChangeMap) update(namespacedName *types.NamespacedName, previous, current *v1.Service, hns HostNetworkService) bool { scm.lock.Lock() defer scm.lock.Unlock() @@ -287,10 +313,10 @@ func (scm *serviceChangeMap) update(namespacedName *types.NamespacedName, previo if !exists { // Service is Added change = &serviceChange{} - change.previous = serviceToServiceMap(previous) + change.previous = serviceToServiceMap(previous, hns) scm.items[*namespacedName] = change } - change.current = serviceToServiceMap(current) + change.current = serviceToServiceMap(current, hns) if reflect.DeepEqual(change.previous, change.current) { delete(scm.items, *namespacedName) } @@ -420,7 +446,11 @@ type Proxier struct { // precomputing some number of those and cache for future reuse. precomputedProbabilities []string - network hnsNetworkInfo + hns HostNetworkService + network hnsNetworkInfo + sourceVip string + hostMac string + isDSR bool } type localPort struct { @@ -465,6 +495,7 @@ func NewProxier( nodeIP net.IP, recorder record.EventRecorder, healthzServer healthcheck.HealthzUpdater, + config config.KubeProxyWinkernelConfiguration, ) (*Proxier, error) { masqueradeValue := 1 << uint(masqueradeBit) masqueradeMark := fmt.Sprintf("%#08x/%#08x", masqueradeValue, masqueradeValue) @@ -479,19 +510,81 @@ func NewProxier( } healthChecker := healthcheck.NewServer(hostname, recorder, nil, nil) // use default implementations of deps - - // TODO : Make this a param - hnsNetworkName := os.Getenv("KUBE_NETWORK") - if len(hnsNetworkName) == 0 { - return nil, fmt.Errorf("Environment variable KUBE_NETWORK not initialized") + var hns HostNetworkService + hns = hnsV1{} + supportedFeatures := hcn.GetSupportedFeatures() + if supportedFeatures.RemoteSubnet { + hns = hnsV2{} } - hnsNetwork, err := getHnsNetworkInfo(hnsNetworkName) + + hnsNetworkName := config.NetworkName + if len(hnsNetworkName) == 0 { + klog.V(3).Infof("network-name flag not set. Checking environment variable") + hnsNetworkName = os.Getenv("KUBE_NETWORK") + if len(hnsNetworkName) == 0 { + return nil, fmt.Errorf("Environment variable KUBE_NETWORK and network-flag not initialized") + } + } + + hnsNetworkInfo, err := hns.getNetworkByName(hnsNetworkName) if err != nil { - klog.Fatalf("Unable to find Hns Network specified by %s. Please check environment variable KUBE_NETWORK", hnsNetworkName) + klog.Errorf("Unable to find Hns Network specified by %s. Please check environment variable KUBE_NETWORK or network-name flag", hnsNetworkName) + return nil, err + } + klog.V(1).Infof("Hns Network loaded with info = %v", hnsNetworkInfo) + isDSR := config.EnableDSR + if isDSR && !utilfeature.DefaultFeatureGate.Enabled(genericfeatures.WinDSR) { + return nil, fmt.Errorf("WinDSR feature gate not enabled") + } + err = hcn.DSRSupported() + if isDSR && err != nil { return nil, err } - klog.V(1).Infof("Hns Network loaded with info = %v", hnsNetwork) + var sourceVip string + var hostMac string + if hnsNetworkInfo.networkType == "Overlay" { + if !utilfeature.DefaultFeatureGate.Enabled(genericfeatures.WinOverlay) { + return nil, fmt.Errorf("WinOverlay feature gate not enabled") + } + err = hcn.RemoteSubnetSupported() + if err != nil { + return nil, err + } + sourceVip = config.SourceVip + if len(sourceVip) == 0 { + return nil, fmt.Errorf("source-vip flag not set") + } + + interfaces, _ := net.Interfaces() //TODO create interfaces + for _, inter := range interfaces { + addresses, _ := inter.Addrs() + for _, addr := range addresses { + addrIP, _, _ := net.ParseCIDR(addr.String()) + if addrIP.String() == nodeIP.String() { + klog.V(2).Infof("Host MAC address is %s", inter.HardwareAddr.String()) + hostMac = inter.HardwareAddr.String() + } + } + } + if len(hostMac) == 0 { + return nil, fmt.Errorf("Could not find host mac address for %s", nodeIP) + } + + existingSourceVip, _ := hns.getEndpointByIpAddress(sourceVip, hnsNetworkName) + if existingSourceVip == nil { + hnsEndpoint := &endpointsInfo{ + ip: sourceVip, + isLocal: true, + macAddress: hostMac, + providerAddress: nodeIP.String(), + } + _, err = hns.createEndpoint(hnsEndpoint, hnsNetworkName) + if err != nil { + return nil, fmt.Errorf("Source Vip endpoint creation failed: %v", err) + } + } + } proxier := &Proxier{ portsMap: make(map[localPort]closeable), @@ -507,7 +600,11 @@ func NewProxier( recorder: recorder, healthChecker: healthChecker, healthzServer: healthzServer, - network: *hnsNetwork, + hns: hns, + network: *hnsNetworkInfo, + sourceVip: sourceVip, + hostMac: hostMac, + isDSR: isDSR, } burstSyncs := 2 @@ -536,27 +633,30 @@ func (svcInfo *serviceInfo) cleanupAllPolicies(endpoints []*endpointsInfo) { for _, ep := range endpoints { ep.Cleanup() } + if svcInfo.remoteEndpoint != nil { + svcInfo.remoteEndpoint.Cleanup() + } svcInfo.policyApplied = false } func (svcInfo *serviceInfo) deleteAllHnsLoadBalancerPolicy() { // Remove the Hns Policy corresponding to this service - deleteHnsLoadBalancerPolicy(svcInfo.hnsID) + hns := svcInfo.hns + hns.deleteLoadBalancer(svcInfo.hnsID) svcInfo.hnsID = "" - deleteHnsLoadBalancerPolicy(svcInfo.nodePorthnsID) + hns.deleteLoadBalancer(svcInfo.nodePorthnsID) svcInfo.nodePorthnsID = "" for _, externalIp := range svcInfo.externalIPs { - deleteHnsLoadBalancerPolicy(externalIp.hnsID) + hns.deleteLoadBalancer(externalIp.hnsID) externalIp.hnsID = "" } for _, lbIngressIp := range svcInfo.loadBalancerIngressIPs { - deleteHnsLoadBalancerPolicy(lbIngressIp.hnsID) + hns.deleteLoadBalancer(lbIngressIp.hnsID) lbIngressIp.hnsID = "" } - } func deleteAllHnsLoadBalancerPolicy() { @@ -574,87 +674,6 @@ func deleteAllHnsLoadBalancerPolicy() { } -// getHnsLoadBalancer returns the LoadBalancer policy resource, if already found. -// If not, it would create one and return -func getHnsLoadBalancer(endpoints []hcsshim.HNSEndpoint, isILB bool, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*hcsshim.PolicyList, error) { - plists, err := hcsshim.HNSListPolicyListRequest() - if err != nil { - return nil, err - } - - for _, plist := range plists { - if len(plist.EndpointReferences) != len(endpoints) { - continue - } - // Validate if input meets any of the policy lists - elbPolicy := hcsshim.ELBPolicy{} - if err = json.Unmarshal(plist.Policies[0], &elbPolicy); err != nil { - continue - } - if elbPolicy.Protocol == protocol && elbPolicy.InternalPort == internalPort && elbPolicy.ExternalPort == externalPort && elbPolicy.ILB == isILB { - if len(vip) > 0 { - if len(elbPolicy.VIPs) == 0 || elbPolicy.VIPs[0] != vip { - continue - } - } - LogJson(plist, "Found existing Hns loadbalancer policy resource", 1) - return &plist, nil - - } - } - //TODO: sourceVip is not used. If required, expose this as a param - var sourceVip string - lb, err := hcsshim.AddLoadBalancer( - endpoints, - isILB, - sourceVip, - vip, - protocol, - internalPort, - externalPort, - ) - - if err == nil { - LogJson(lb, "Hns loadbalancer policy resource", 1) - } - return lb, err -} - -func deleteHnsLoadBalancerPolicy(hnsID string) { - if len(hnsID) == 0 { - // Return silently - return - } - - // Cleanup HNS policies - hnsloadBalancer, err := hcsshim.GetPolicyListByID(hnsID) - if err != nil { - klog.Errorf("%v", err) - return - } - LogJson(hnsloadBalancer, "Removing Policy", 2) - - _, err = hnsloadBalancer.Delete() - if err != nil { - klog.Errorf("%v", err) - } -} - -func deleteHnsEndpoint(hnsID string) { - hnsendpoint, err := hcsshim.GetHNSEndpointByID(hnsID) - if err != nil { - klog.Errorf("%v", err) - return - } - - _, err = hnsendpoint.Delete() - if err != nil { - klog.Errorf("%v", err) - } - - klog.V(3).Infof("Remote endpoint resource deleted id %s", hnsID) -} - func getHnsNetworkInfo(hnsNetworkName string) (*hnsNetworkInfo, error) { hnsnetwork, err := hcsshim.GetHNSNetworkByName(hnsNetworkName) if err != nil { @@ -663,29 +682,12 @@ func getHnsNetworkInfo(hnsNetworkName string) (*hnsNetworkInfo, error) { } return &hnsNetworkInfo{ - id: hnsnetwork.Id, - name: hnsnetwork.Name, + id: hnsnetwork.Id, + name: hnsnetwork.Name, + networkType: hnsnetwork.Type, }, nil } -func getHnsEndpointByIpAddress(ip net.IP, networkName string) (*hcsshim.HNSEndpoint, error) { - hnsnetwork, err := hcsshim.GetHNSNetworkByName(networkName) - if err != nil { - klog.Errorf("%v", err) - return nil, err - } - - endpoints, err := hcsshim.HNSListEndpointRequest() - for _, endpoint := range endpoints { - equal := reflect.DeepEqual(endpoint.IPAddress, ip) - if equal && endpoint.VirtualNetwork == hnsnetwork.Id { - return &endpoint, nil - } - } - - return nil, fmt.Errorf("Endpoint %v not found on network %s", ip, networkName) -} - // Sync is called to synchronize the proxier state to hns as soon as possible. func (proxier *Proxier) Sync() { proxier.syncRunner.Run() @@ -714,21 +716,21 @@ func (proxier *Proxier) isInitialized() bool { func (proxier *Proxier) OnServiceAdd(service *v1.Service) { namespacedName := types.NamespacedName{Namespace: service.Namespace, Name: service.Name} - if proxier.serviceChanges.update(&namespacedName, nil, service) && proxier.isInitialized() { + if proxier.serviceChanges.update(&namespacedName, nil, service, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } func (proxier *Proxier) OnServiceUpdate(oldService, service *v1.Service) { namespacedName := types.NamespacedName{Namespace: service.Namespace, Name: service.Name} - if proxier.serviceChanges.update(&namespacedName, oldService, service) && proxier.isInitialized() { + if proxier.serviceChanges.update(&namespacedName, oldService, service, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } func (proxier *Proxier) OnServiceDelete(service *v1.Service) { namespacedName := types.NamespacedName{Namespace: service.Namespace, Name: service.Name} - if proxier.serviceChanges.update(&namespacedName, service, nil) && proxier.isInitialized() { + if proxier.serviceChanges.update(&namespacedName, service, nil, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } @@ -789,21 +791,21 @@ func (proxier *Proxier) updateServiceMap() (result updateServiceMapResult) { func (proxier *Proxier) OnEndpointsAdd(endpoints *v1.Endpoints) { namespacedName := types.NamespacedName{Namespace: endpoints.Namespace, Name: endpoints.Name} - if proxier.endpointsChanges.update(&namespacedName, nil, endpoints) && proxier.isInitialized() { + if proxier.endpointsChanges.update(&namespacedName, nil, endpoints, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } func (proxier *Proxier) OnEndpointsUpdate(oldEndpoints, endpoints *v1.Endpoints) { namespacedName := types.NamespacedName{Namespace: endpoints.Namespace, Name: endpoints.Name} - if proxier.endpointsChanges.update(&namespacedName, oldEndpoints, endpoints) && proxier.isInitialized() { + if proxier.endpointsChanges.update(&namespacedName, oldEndpoints, endpoints, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } func (proxier *Proxier) OnEndpointsDelete(endpoints *v1.Endpoints) { namespacedName := types.NamespacedName{Namespace: endpoints.Namespace, Name: endpoints.Name} - if proxier.endpointsChanges.update(&namespacedName, endpoints, nil) && proxier.isInitialized() { + if proxier.endpointsChanges.update(&namespacedName, endpoints, nil, proxier.hns) && proxier.isInitialized() { proxier.syncRunner.Run() } } @@ -867,7 +869,7 @@ func getLocalIPs(endpointsMap proxyEndpointsMap) map[types.NamespacedName]sets.S // This function is used for incremental updated of endpointsMap. // // NOTE: endpoints object should NOT be modified. -func endpointsToEndpointsMap(endpoints *v1.Endpoints, hostname string) proxyEndpointsMap { +func endpointsToEndpointsMap(endpoints *v1.Endpoints, hostname string, hns HostNetworkService) proxyEndpointsMap { if endpoints == nil { return nil } @@ -880,7 +882,7 @@ func endpointsToEndpointsMap(endpoints *v1.Endpoints, hostname string) proxyEndp for i := range ss.Ports { port := &ss.Ports[i] if port.Port == 0 { - klog.Warningf("ignoring invalid endpoint port %s", port.Name) + klog.Warningf("Ignoring invalid endpoint port %s", port.Name) continue } svcPortName := proxy.ServicePortName{ @@ -890,11 +892,11 @@ func endpointsToEndpointsMap(endpoints *v1.Endpoints, hostname string) proxyEndp for i := range ss.Addresses { addr := &ss.Addresses[i] if addr.IP == "" { - klog.Warningf("ignoring invalid endpoint port %s with empty host", port.Name) + klog.Warningf("Ignoring invalid endpoint port %s with empty host", port.Name) continue } isLocal := addr.NodeName != nil && *addr.NodeName == hostname - epInfo := newEndpointInfo(addr.IP, uint16(port.Port), isLocal) + epInfo := newEndpointInfo(addr.IP, uint16(port.Port), isLocal, hns) endpointsMap[svcPortName] = append(endpointsMap[svcPortName], epInfo) } if klog.V(3) { @@ -912,7 +914,7 @@ func endpointsToEndpointsMap(endpoints *v1.Endpoints, hostname string) proxyEndp // Translates single Service object to proxyServiceMap. // // NOTE: service object should NOT be modified. -func serviceToServiceMap(service *v1.Service) proxyServiceMap { +func serviceToServiceMap(service *v1.Service, hns HostNetworkService) proxyServiceMap { if service == nil { return nil } @@ -925,7 +927,7 @@ func serviceToServiceMap(service *v1.Service) proxyServiceMap { for i := range service.Spec.Ports { servicePort := &service.Spec.Ports[i] svcPortName := proxy.ServicePortName{NamespacedName: svcName, Port: servicePort.Name} - serviceMap[svcPortName] = newServiceInfo(svcPortName, servicePort, service) + serviceMap[svcPortName] = newServiceInfo(svcPortName, servicePort, service, hns) } return serviceMap } @@ -938,7 +940,8 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { - SyncProxyRulesLatency.Observe(sinceInMicroseconds(start)) + SyncProxyRulesLatency.Observe(sinceInSeconds(start)) + DeprecatedSyncProxyRulesLatency.Observe(sinceInMicroseconds(start)) klog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints @@ -971,12 +974,37 @@ func (proxier *Proxier) syncProxyRules() { continue } - var hnsEndpoints []hcsshim.HNSEndpoint + hnsNetworkName := proxier.network.name + hns := proxier.hns + if proxier.network.networkType == "Overlay" { + serviceVipEndpoint, _ := hns.getEndpointByIpAddress(svcInfo.clusterIP.String(), hnsNetworkName) + if serviceVipEndpoint == nil { + klog.V(4).Infof("No existing remote endpoint for service VIP %v", svcInfo.clusterIP.String()) + hnsEndpoint := &endpointsInfo{ + ip: svcInfo.clusterIP.String(), + isLocal: false, + macAddress: proxier.hostMac, + providerAddress: proxier.nodeIP.String(), + } + + newHnsEndpoint, err := hns.createEndpoint(hnsEndpoint, hnsNetworkName) + if err != nil { + klog.Errorf("Remote endpoint creation failed for service VIP: %v", err) + continue + } + + newHnsEndpoint.refCount++ + svcInfo.remoteEndpoint = newHnsEndpoint + } + } + + var hnsEndpoints []endpointsInfo klog.V(4).Infof("====Applying Policy for %s====", svcName) // Create Remote endpoints for every endpoint, corresponding to the service + containsPublicIP := false for _, ep := range proxier.endpointsMap[svcName] { - var newHnsEndpoint *hcsshim.HNSEndpoint + var newHnsEndpoint *endpointsInfo hnsNetworkName := proxier.network.name var err error @@ -988,44 +1016,78 @@ func (proxier *Proxier) syncProxyRules() { } if len(ep.hnsID) > 0 { - newHnsEndpoint, err = hcsshim.GetHNSEndpointByID(ep.hnsID) + newHnsEndpoint, err = hns.getEndpointByID(ep.hnsID) } if newHnsEndpoint == nil { // First check if an endpoint resource exists for this IP, on the current host // A Local endpoint could exist here already // A remote endpoint was already created and proxy was restarted - newHnsEndpoint, err = getHnsEndpointByIpAddress(net.ParseIP(ep.ip), hnsNetworkName) + newHnsEndpoint, err = hns.getEndpointByIpAddress(ep.ip, hnsNetworkName) } - if newHnsEndpoint == nil { if ep.isLocal { klog.Errorf("Local endpoint not found for %v: err: %v on network %s", ep.ip, err, hnsNetworkName) continue } - // hns Endpoint resource was not found, create one - hnsnetwork, err := hcsshim.GetHNSNetworkByName(hnsNetworkName) - if err != nil { - klog.Errorf("%v", err) - continue - } - hnsEndpoint := &hcsshim.HNSEndpoint{ - MacAddress: ep.macAddress, - IPAddress: net.ParseIP(ep.ip), - } + if proxier.network.networkType == "Overlay" { + klog.Infof("Updating network %v to check for new remote subnet policies", proxier.network.name) + networkName := proxier.network.name + updatedNetwork, err := hns.getNetworkByName(networkName) + if err != nil { + klog.Fatalf("Failed to get network %v: %v", networkName, err) + } + proxier.network = *updatedNetwork + var providerAddress string + for _, rs := range proxier.network.remoteSubnets { + _, ipNet, err := net.ParseCIDR(rs.destinationPrefix) + if err != nil { + klog.Fatalf("%v", err) + } + if ipNet.Contains(net.ParseIP(ep.ip)) { + providerAddress = rs.providerAddress + } + if ep.ip == rs.providerAddress { + providerAddress = rs.providerAddress + } + } + if len(providerAddress) == 0 { + klog.Errorf("Could not find provider address for %s", ep.ip) + providerAddress = proxier.nodeIP.String() + containsPublicIP = true + } + hnsEndpoint := &endpointsInfo{ + ip: ep.ip, + isLocal: false, + macAddress: conjureMac("02-11", net.ParseIP(ep.ip)), + providerAddress: providerAddress, + } - newHnsEndpoint, err = hnsnetwork.CreateRemoteEndpoint(hnsEndpoint) - if err != nil { - klog.Errorf("Remote endpoint creation failed: %v", err) - continue + newHnsEndpoint, err = hns.createEndpoint(hnsEndpoint, hnsNetworkName) + if err != nil { + klog.Errorf("Remote endpoint creation failed: %v, %s", err, spew.Sdump(hnsEndpoint)) + continue + } + } else { + hnsEndpoint := &endpointsInfo{ + ip: ep.ip, + isLocal: false, + macAddress: ep.macAddress, + } + + newHnsEndpoint, err = hns.createEndpoint(hnsEndpoint, hnsNetworkName) + if err != nil { + klog.Errorf("Remote endpoint creation failed: %v", err) + continue + } } } // Save the hnsId for reference LogJson(newHnsEndpoint, "Hns Endpoint resource", 1) hnsEndpoints = append(hnsEndpoints, *newHnsEndpoint) - ep.hnsID = newHnsEndpoint.Id + ep.hnsID = newHnsEndpoint.hnsID ep.refCount++ Log(ep, "Endpoint resource found", 3) } @@ -1043,11 +1105,16 @@ func (proxier *Proxier) syncProxyRules() { } klog.V(4).Infof("Trying to Apply Policies for service %s", spew.Sdump(svcInfo)) - var hnsLoadBalancer *hcsshim.PolicyList - - hnsLoadBalancer, err := getHnsLoadBalancer( + var hnsLoadBalancer *loadBalancerInfo + var sourceVip = proxier.sourceVip + if containsPublicIP { + sourceVip = proxier.nodeIP.String() + } + hnsLoadBalancer, err := hns.getLoadBalancer( hnsEndpoints, false, + proxier.isDSR, + sourceVip, svcInfo.clusterIP.String(), Enum(svcInfo.protocol), uint16(svcInfo.targetPort), @@ -1058,15 +1125,17 @@ func (proxier *Proxier) syncProxyRules() { continue } - svcInfo.hnsID = hnsLoadBalancer.ID - klog.V(3).Infof("Hns LoadBalancer resource created for cluster ip resources %v, Id [%s]", svcInfo.clusterIP, hnsLoadBalancer.ID) + svcInfo.hnsID = hnsLoadBalancer.hnsID + klog.V(3).Infof("Hns LoadBalancer resource created for cluster ip resources %v, Id [%s]", svcInfo.clusterIP, hnsLoadBalancer.hnsID) // If nodePort is specified, user should be able to use nodeIP:nodePort to reach the backend endpoints if svcInfo.nodePort > 0 { - hnsLoadBalancer, err := getHnsLoadBalancer( + hnsLoadBalancer, err := hns.getLoadBalancer( hnsEndpoints, false, - "", // VIP has to be empty to automatically select the nodeIP + false, + sourceVip, + "", Enum(svcInfo.protocol), uint16(svcInfo.targetPort), uint16(svcInfo.nodePort), @@ -1076,16 +1145,18 @@ func (proxier *Proxier) syncProxyRules() { continue } - svcInfo.nodePorthnsID = hnsLoadBalancer.ID - klog.V(3).Infof("Hns LoadBalancer resource created for nodePort resources %v, Id [%s]", svcInfo.clusterIP, hnsLoadBalancer.ID) + svcInfo.nodePorthnsID = hnsLoadBalancer.hnsID + klog.V(3).Infof("Hns LoadBalancer resource created for nodePort resources %v, Id [%s]", svcInfo.clusterIP, hnsLoadBalancer.hnsID) } // Create a Load Balancer Policy for each external IP for _, externalIp := range svcInfo.externalIPs { // Try loading existing policies, if already available - hnsLoadBalancer, err := getHnsLoadBalancer( + hnsLoadBalancer, err = hns.getLoadBalancer( hnsEndpoints, false, + false, + sourceVip, externalIp.ip, Enum(svcInfo.protocol), uint16(svcInfo.targetPort), @@ -1095,15 +1166,17 @@ func (proxier *Proxier) syncProxyRules() { klog.Errorf("Policy creation failed: %v", err) continue } - externalIp.hnsID = hnsLoadBalancer.ID - klog.V(3).Infof("Hns LoadBalancer resource created for externalIp resources %v, Id[%s]", externalIp, hnsLoadBalancer.ID) + externalIp.hnsID = hnsLoadBalancer.hnsID + klog.V(3).Infof("Hns LoadBalancer resource created for externalIp resources %v, Id[%s]", externalIp, hnsLoadBalancer.hnsID) } // Create a Load Balancer Policy for each loadbalancer ingress for _, lbIngressIp := range svcInfo.loadBalancerIngressIPs { // Try loading existing policies, if already available - hnsLoadBalancer, err := getHnsLoadBalancer( + hnsLoadBalancer, err := hns.getLoadBalancer( hnsEndpoints, false, + false, + sourceVip, lbIngressIp.ip, Enum(svcInfo.protocol), uint16(svcInfo.targetPort), @@ -1113,7 +1186,7 @@ func (proxier *Proxier) syncProxyRules() { klog.Errorf("Policy creation failed: %v", err) continue } - lbIngressIp.hnsID = hnsLoadBalancer.ID + lbIngressIp.hnsID = hnsLoadBalancer.hnsID klog.V(3).Infof("Hns LoadBalancer resource created for loadBalancer Ingress resources %v", lbIngressIp) } svcInfo.policyApplied = true diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/OWNERS b/vendor/k8s.io/kubernetes/pkg/quota/v1/OWNERS index 3c805833bcc..d812b5d3ee6 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/OWNERS b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/OWNERS old mode 100755 new mode 100644 index 722f2bb06ed..906f73ebd4d --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - deads2k diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/BUILD b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/BUILD index 800a34d7525..58cc57bfea3 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/BUILD @@ -22,7 +22,6 @@ go_library( "//pkg/apis/core/v1/helper:go_default_library", "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubeapiserver/admission/util:go_default_library", "//pkg/quota/v1:go_default_library", "//pkg/quota/v1/generic:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -31,11 +30,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/initialization:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/persistent_volume_claims.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/persistent_volume_claims.go index 25e70b294eb..3cf3a2b0fa9 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/persistent_volume_claims.go +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/persistent_volume_claims.go @@ -24,15 +24,12 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/initialization" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/admission" utilfeature "k8s.io/apiserver/pkg/util/feature" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/apis/core/v1/helper" k8sfeatures "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/kubeapiserver/admission/util" quota "k8s.io/kubernetes/pkg/quota/v1" "k8s.io/kubernetes/pkg/quota/v1/generic" ) @@ -98,25 +95,9 @@ func (p *pvcEvaluator) Handles(a admission.Attributes) bool { return true } if op == admission.Update && utilfeature.DefaultFeatureGate.Enabled(k8sfeatures.ExpandPersistentVolumes) { - initialized, err := initialization.IsObjectInitialized(a.GetObject()) - if err != nil { - // fail closed, will try to give an evaluation. - utilruntime.HandleError(err) - return true - } - // only handle the update if the object is initialized after the update. - return initialized - } - // TODO: when the ExpandPersistentVolumes feature gate is removed, remove - // the initializationCompletion check as well, because it will become a - // subset of the "initialized" condition. - initializationCompletion, err := util.IsInitializationCompletion(a) - if err != nil { - // fail closed, will try to give an evaluation. - utilruntime.HandleError(err) return true } - return initializationCompletion + return false } // Matches returns true if the evaluator matches the specified quota with the provided input item diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/pods.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/pods.go index dbf20e5661c..955a59596f0 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/pods.go +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/evaluator/core/pods.go @@ -28,14 +28,12 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/clock" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" - "k8s.io/kubernetes/pkg/kubeapiserver/admission/util" quota "k8s.io/kubernetes/pkg/quota/v1" "k8s.io/kubernetes/pkg/quota/v1/generic" ) @@ -150,14 +148,7 @@ func (p *podEvaluator) Handles(a admission.Attributes) bool { if op == admission.Create { return true } - initializationCompletion, err := util.IsInitializationCompletion(a) - if err != nil { - // fail closed, will try to give an evaluation. - utilruntime.HandleError(err) - return true - } - // only uninitialized pods might be updated. - return initializationCompletion + return false } // Matches returns true if the evaluator matches the specified quota with the provided input item diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/OWNERS b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/OWNERS old mode 100755 new mode 100644 index 240668b642b..b24e7293ed2 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/install/OWNERS b/vendor/k8s.io/kubernetes/pkg/quota/v1/install/OWNERS old mode 100755 new mode 100644 index 70524d0dad4..622ac58d3ee --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/install/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/install/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/pkg/registry/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/BUILD index 6c5128b1039..fbca297a6c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/BUILD @@ -22,7 +22,6 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/registry/admissionregistration/initializerconfiguration:all-srcs", "//pkg/registry/admissionregistration/mutatingwebhookconfiguration:all-srcs", "//pkg/registry/admissionregistration/rest:all-srcs", "//pkg/registry/admissionregistration/validatingwebhookconfiguration:all-srcs", @@ -73,10 +72,12 @@ filegroup( "//pkg/registry/events/event:all-srcs", "//pkg/registry/events/rest:all-srcs", "//pkg/registry/extensions/controller/storage:all-srcs", - "//pkg/registry/extensions/ingress:all-srcs", "//pkg/registry/extensions/rest:all-srcs", + "//pkg/registry/networking/ingress:all-srcs", "//pkg/registry/networking/networkpolicy:all-srcs", "//pkg/registry/networking/rest:all-srcs", + "//pkg/registry/node/rest:all-srcs", + "//pkg/registry/node/runtimeclass:all-srcs", "//pkg/registry/policy/poddisruptionbudget:all-srcs", "//pkg/registry/policy/podsecuritypolicy:all-srcs", "//pkg/registry/policy/rest:all-srcs", @@ -86,6 +87,8 @@ filegroup( "//pkg/registry/scheduling/rest:all-srcs", "//pkg/registry/settings/podpreset:all-srcs", "//pkg/registry/settings/rest:all-srcs", + "//pkg/registry/storage/csidriver:all-srcs", + "//pkg/registry/storage/csinode:all-srcs", "//pkg/registry/storage/rest:all-srcs", "//pkg/registry/storage/storageclass:all-srcs", "//pkg/registry/storage/volumeattachment:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/OWNERS index bb7e84caade..e74d02d1784 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - deads2k - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/strategy.go deleted file mode 100644 index 70b2be0cc7c..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/strategy.go +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package initializerconfiguration - -import ( - "context" - "reflect" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/storage/names" - "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/admissionregistration" - "k8s.io/kubernetes/pkg/apis/admissionregistration/validation" -) - -// initializerConfigurationStrategy implements verification logic for InitializerConfigurations. -type initializerConfigurationStrategy struct { - runtime.ObjectTyper - names.NameGenerator -} - -// Strategy is the default logic that applies when creating and updating InitializerConfiguration objects. -var Strategy = initializerConfigurationStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} - -// NamespaceScoped returns true because all InitializerConfiguration' need to be within a namespace. -func (initializerConfigurationStrategy) NamespaceScoped() bool { - return false -} - -// PrepareForCreate clears the status of an InitializerConfiguration before creation. -func (initializerConfigurationStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { - ic := obj.(*admissionregistration.InitializerConfiguration) - ic.Generation = 1 -} - -// PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (initializerConfigurationStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { - newIC := obj.(*admissionregistration.InitializerConfiguration) - oldIC := old.(*admissionregistration.InitializerConfiguration) - - // Any changes to the spec increment the generation number, any changes to the - // status should reflect the generation number of the corresponding object. - // See metav1.ObjectMeta description for more information on Generation. - if !reflect.DeepEqual(oldIC.Initializers, newIC.Initializers) { - newIC.Generation = oldIC.Generation + 1 - } -} - -// Validate validates a new InitializerConfiguration. -func (initializerConfigurationStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { - ic := obj.(*admissionregistration.InitializerConfiguration) - return validation.ValidateInitializerConfiguration(ic) -} - -// Canonicalize normalizes the object after validation. -func (initializerConfigurationStrategy) Canonicalize(obj runtime.Object) { -} - -// AllowCreateOnUpdate is true for InitializerConfiguration; this means you may create one with a PUT request. -func (initializerConfigurationStrategy) AllowCreateOnUpdate() bool { - return false -} - -// ValidateUpdate is the default update validation for an end user. -func (initializerConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateInitializerConfiguration(obj.(*admissionregistration.InitializerConfiguration)) - updateErrorList := validation.ValidateInitializerConfigurationUpdate(obj.(*admissionregistration.InitializerConfiguration), old.(*admissionregistration.InitializerConfiguration)) - return append(validationErrorList, updateErrorList...) -} - -// AllowUnconditionalUpdate is the default update policy for InitializerConfiguration objects. Status update should -// only be allowed if version match. -func (initializerConfigurationStrategy) AllowUnconditionalUpdate() bool { - return false -} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/mutatingwebhookconfiguration/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/mutatingwebhookconfiguration/strategy.go index ae0f8b7f961..9c476102eef 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/mutatingwebhookconfiguration/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/mutatingwebhookconfiguration/strategy.go @@ -78,9 +78,7 @@ func (mutatingWebhookConfigurationStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (mutatingWebhookConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateMutatingWebhookConfiguration(obj.(*admissionregistration.MutatingWebhookConfiguration)) - updateErrorList := validation.ValidateMutatingWebhookConfigurationUpdate(obj.(*admissionregistration.MutatingWebhookConfiguration), old.(*admissionregistration.MutatingWebhookConfiguration)) - return append(validationErrorList, updateErrorList...) + return validation.ValidateMutatingWebhookConfigurationUpdate(obj.(*admissionregistration.MutatingWebhookConfiguration), old.(*admissionregistration.MutatingWebhookConfiguration)) } // AllowUnconditionalUpdate is the default update policy for mutatingWebhookConfiguration objects. Status update should diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/BUILD index b58b088bf6d..0c3edc38005 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/BUILD @@ -12,10 +12,8 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/admissionregistration:go_default_library", - "//pkg/registry/admissionregistration/initializerconfiguration/storage:go_default_library", "//pkg/registry/admissionregistration/mutatingwebhookconfiguration/storage:go_default_library", "//pkg/registry/admissionregistration/validatingwebhookconfiguration/storage:go_default_library", - "//staging/src/k8s.io/api/admissionregistration/v1alpha1:go_default_library", "//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/storage_apiserver.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/storage_apiserver.go index 80a3961907d..535c2317d03 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/storage_apiserver.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/rest/storage_apiserver.go @@ -24,7 +24,6 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/admissionregistration" - initializerconfigurationstorage "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage" mutatingwebhookconfigurationstorage "k8s.io/kubernetes/pkg/registry/admissionregistration/mutatingwebhookconfiguration/storage" validatingwebhookconfigurationstorage "k8s.io/kubernetes/pkg/registry/admissionregistration/validatingwebhookconfiguration/storage" ) @@ -42,15 +41,6 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag return apiGroupInfo, true } -func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { - storage := map[string]rest.Storage{} - // initializerconfigurations - s := initializerconfigurationstorage.NewREST(restOptionsGetter) - storage["initializerconfigurations"] = s - - return storage -} - func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { storage := map[string]rest.Storage{} // validatingwebhookconfigurations diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/validatingwebhookconfiguration/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/validatingwebhookconfiguration/strategy.go index ee696717bfd..6100ecc0cb0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/validatingwebhookconfiguration/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/validatingwebhookconfiguration/strategy.go @@ -63,8 +63,7 @@ func (validatingWebhookConfigurationStrategy) PrepareForUpdate(ctx context.Conte // Validate validates a new validatingWebhookConfiguration. func (validatingWebhookConfigurationStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { - ic := obj.(*admissionregistration.ValidatingWebhookConfiguration) - return validation.ValidateValidatingWebhookConfiguration(ic) + return validation.ValidateValidatingWebhookConfiguration(obj.(*admissionregistration.ValidatingWebhookConfiguration)) } // Canonicalize normalizes the object after validation. @@ -78,9 +77,7 @@ func (validatingWebhookConfigurationStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (validatingWebhookConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateValidatingWebhookConfiguration(obj.(*admissionregistration.ValidatingWebhookConfiguration)) - updateErrorList := validation.ValidateValidatingWebhookConfigurationUpdate(obj.(*admissionregistration.ValidatingWebhookConfiguration), old.(*admissionregistration.ValidatingWebhookConfiguration)) - return append(validationErrorList, updateErrorList...) + return validation.ValidateValidatingWebhookConfigurationUpdate(obj.(*admissionregistration.ValidatingWebhookConfiguration), old.(*admissionregistration.ValidatingWebhookConfiguration)) } // AllowUnconditionalUpdate is the default update policy for validatingWebhookConfiguration objects. Status update should diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/apps/OWNERS old mode 100755 new mode 100644 index f65afe9ed9a..8af01ebfbdd --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - hongchaodeng diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/BUILD index 68ae8aefac1..97fd09d50ad 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//staging/src/k8s.io/api/apps/v1beta2:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/strategy.go index f9b89bb552e..02d80a61a71 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/daemonset/strategy.go @@ -33,6 +33,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // daemonSetStrategy implements verification logic for daemon sets. @@ -44,19 +45,20 @@ type daemonSetStrategy struct { // Strategy is the default logic that applies when creating and updating DaemonSet objects. var Strategy = daemonSetStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns OrphanDependents by default. For apps/v1, returns DeleteDependents. +// DefaultGarbageCollectionPolicy returns OrphanDependents for extensions/v1beta1 and apps/v1beta2 for backwards compatibility, +// and DeleteDependents for all other versions. func (daemonSetStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { + var groupVersion schema.GroupVersion if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { - groupVersion := schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} - switch groupVersion { - case extensionsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: - // for back compatibility - return rest.OrphanDependents - default: - return rest.DeleteDependents - } + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case extensionsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents } - return rest.OrphanDependents } // NamespaceScoped returns true because all DaemonSets need to be within a namespace. @@ -74,7 +76,7 @@ func (daemonSetStrategy) PrepareForCreate(ctx context.Context, obj runtime.Objec daemonSet.Spec.TemplateGeneration = 1 } - pod.DropDisabledAlphaFields(&daemonSet.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&daemonSet.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -82,8 +84,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime. newDaemonSet := obj.(*apps.DaemonSet) oldDaemonSet := old.(*apps.DaemonSet) - pod.DropDisabledAlphaFields(&newDaemonSet.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldDaemonSet.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newDaemonSet.Spec.Template, &oldDaemonSet.Spec.Template) // update is not allowed to set status newDaemonSet.Status = oldDaemonSet.Status @@ -115,7 +116,9 @@ func (daemonSetStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime. // Validate validates a new daemon set. func (daemonSetStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { daemonSet := obj.(*apps.DaemonSet) - return validation.ValidateDaemonSet(daemonSet) + allErrs := validation.ValidateDaemonSet(daemonSet) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&daemonSet.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -134,6 +137,7 @@ func (daemonSetStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Ob oldDaemonSet := old.(*apps.DaemonSet) allErrs := validation.ValidateDaemonSet(obj.(*apps.DaemonSet)) allErrs = append(allErrs, validation.ValidateDaemonSetUpdate(newDaemonSet, oldDaemonSet)...) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&newDaemonSet.Spec.Template, &oldDaemonSet.Spec.Template, field.NewPath("spec.template"))...) // Update is not allowed to set Spec.Selector for apps/v1 and apps/v1beta2 (allowed for extensions/v1beta1). // If RequestInfo is nil, it is better to revert to old behavior (i.e. allow update to set Spec.Selector) @@ -162,6 +166,7 @@ type daemonSetStatusStrategy struct { daemonSetStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = daemonSetStatusStrategy{Strategy} func (daemonSetStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/BUILD index 1ba9a291035..8e67835fde4 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta2:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/storage/storage.go index 5ee1fa2690d..bf456b74ef4 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/storage/storage.go @@ -166,6 +166,12 @@ func (r *RollbackREST) Create(ctx context.Context, obj runtime.Object, createVal return nil, errors.NewBadRequest(fmt.Sprintf("not a DeploymentRollback: %#v", obj)) } + if createValidation != nil { + if err := createValidation(obj.DeepCopyObject()); err != nil { + return nil, err + } + } + if errs := appsvalidation.ValidateDeploymentRollback(rollback); len(errs) != 0 { return nil, errors.NewInvalid(apps.Kind("DeploymentRollback"), rollback.Name, errs) } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/strategy.go index e9d593d838b..bca13ba27b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/deployment/strategy.go @@ -34,6 +34,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // deploymentStrategy implements behavior for Deployments. @@ -46,19 +47,20 @@ type deploymentStrategy struct { // objects via the REST API. var Strategy = deploymentStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns OrphanDependents by default. For apps/v1, returns DeleteDependents. +// DefaultGarbageCollectionPolicy returns OrphanDependents for extensions/v1beta1, apps/v1beta1, and apps/v1beta2 for backwards compatibility, +// and DeleteDependents for all other versions. func (deploymentStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { + var groupVersion schema.GroupVersion if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { - groupVersion := schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} - switch groupVersion { - case extensionsv1beta1.SchemeGroupVersion, appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: - // for back compatibility - return rest.OrphanDependents - default: - return rest.DeleteDependents - } + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case extensionsv1beta1.SchemeGroupVersion, appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents } - return rest.OrphanDependents } // NamespaceScoped is true for deployment. @@ -72,13 +74,15 @@ func (deploymentStrategy) PrepareForCreate(ctx context.Context, obj runtime.Obje deployment.Status = apps.DeploymentStatus{} deployment.Generation = 1 - pod.DropDisabledAlphaFields(&deployment.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&deployment.Spec.Template, nil) } // Validate validates a new deployment. func (deploymentStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { deployment := obj.(*apps.Deployment) - return validation.ValidateDeployment(deployment) + allErrs := validation.ValidateDeployment(deployment) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&deployment.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -96,8 +100,7 @@ func (deploymentStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime oldDeployment := old.(*apps.Deployment) newDeployment.Status = oldDeployment.Status - pod.DropDisabledAlphaFields(&newDeployment.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldDeployment.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newDeployment.Spec.Template, &oldDeployment.Spec.Template) // Spec updates bump the generation so that we can distinguish between // scaling events and template changes, annotation updates bump the generation @@ -113,6 +116,7 @@ func (deploymentStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.O newDeployment := obj.(*apps.Deployment) oldDeployment := old.(*apps.Deployment) allErrs := validation.ValidateDeploymentUpdate(newDeployment, oldDeployment) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&newDeployment.Spec.Template, &oldDeployment.Spec.Template, field.NewPath("spec.template"))...) // Update is not allowed to set Spec.Selector for all groups/versions except extensions/v1beta1. // If RequestInfo is nil, it is better to revert to old behavior (i.e. allow update to set Spec.Selector) @@ -141,6 +145,7 @@ type deploymentStatusStrategy struct { deploymentStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = deploymentStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/BUILD index bce7b57ba80..5784b261e9b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//staging/src/k8s.io/api/apps/v1beta2:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/strategy.go index 592c6893dea..2c83176876f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/replicaset/strategy.go @@ -41,6 +41,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // rsStrategy implements verification logic for ReplicaSets. @@ -52,19 +53,20 @@ type rsStrategy struct { // Strategy is the default logic that applies when creating and updating ReplicaSet objects. var Strategy = rsStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns OrphanDependents by default. For apps/v1, returns DeleteDependents. +// DefaultGarbageCollectionPolicy returns OrphanDependents for extensions/v1beta1 and apps/v1beta2 for backwards compatibility, +// and DeleteDependents for all other versions. func (rsStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { + var groupVersion schema.GroupVersion if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { - groupVersion := schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} - switch groupVersion { - case extensionsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: - // for back compatibility - return rest.OrphanDependents - default: - return rest.DeleteDependents - } + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case extensionsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents } - return rest.OrphanDependents } // NamespaceScoped returns true because all ReplicaSets need to be within a namespace. @@ -79,7 +81,7 @@ func (rsStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { rs.Generation = 1 - pod.DropDisabledAlphaFields(&rs.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&rs.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -89,8 +91,7 @@ func (rsStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) // update is not allowed to set status newRS.Status = oldRS.Status - pod.DropDisabledAlphaFields(&newRS.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldRS.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newRS.Spec.Template, &oldRS.Spec.Template) // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. We push @@ -108,7 +109,9 @@ func (rsStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) // Validate validates a new ReplicaSet. func (rsStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { rs := obj.(*apps.ReplicaSet) - return validation.ValidateReplicaSet(rs) + allErrs := validation.ValidateReplicaSet(rs) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&rs.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -127,6 +130,7 @@ func (rsStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) f oldReplicaSet := old.(*apps.ReplicaSet) allErrs := validation.ValidateReplicaSet(obj.(*apps.ReplicaSet)) allErrs = append(allErrs, validation.ValidateReplicaSetUpdate(newReplicaSet, oldReplicaSet)...) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&newReplicaSet.Spec.Template, &oldReplicaSet.Spec.Template, field.NewPath("spec.template"))...) // Update is not allowed to set Spec.Selector for all groups/versions except extensions/v1beta1. // If RequestInfo is nil, it is better to revert to old behavior (i.e. allow update to set Spec.Selector) @@ -160,12 +164,12 @@ func ReplicaSetToSelectableFields(rs *apps.ReplicaSet) fields.Set { } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { rs, ok := obj.(*apps.ReplicaSet) if !ok { - return nil, nil, false, fmt.Errorf("given object is not a ReplicaSet.") + return nil, nil, fmt.Errorf("given object is not a ReplicaSet.") } - return labels.Set(rs.ObjectMeta.Labels), ReplicaSetToSelectableFields(rs), rs.Initializers != nil, nil + return labels.Set(rs.ObjectMeta.Labels), ReplicaSetToSelectableFields(rs), nil } // MatchReplicaSet is the filter used by the generic etcd backend to route diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/BUILD index 91d62f93092..b20cedbfc39 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//staging/src/k8s.io/api/apps/v1beta1:go_default_library", "//staging/src/k8s.io/api/apps/v1beta2:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/strategy.go index cbf584933e3..2b259dc87e5 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/strategy.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // statefulSetStrategy implements verification logic for Replication StatefulSets. @@ -43,19 +44,20 @@ type statefulSetStrategy struct { // Strategy is the default logic that applies when creating and updating Replication StatefulSet objects. var Strategy = statefulSetStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns OrphanDependents by default. For apps/v1, returns DeleteDependents. +// DefaultGarbageCollectionPolicy returns OrphanDependents for apps/v1beta1 and apps/v1beta2 for backwards compatibility, +// and DeleteDependents for all other versions. func (statefulSetStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { + var groupVersion schema.GroupVersion if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { - groupVersion := schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} - switch groupVersion { - case appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: - // for back compatibility - return rest.OrphanDependents - default: - return rest.DeleteDependents - } + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents } - return rest.OrphanDependents } // NamespaceScoped returns true because all StatefulSet' need to be within a namespace. @@ -71,7 +73,7 @@ func (statefulSetStrategy) PrepareForCreate(ctx context.Context, obj runtime.Obj statefulSet.Generation = 1 - pod.DropDisabledAlphaFields(&statefulSet.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&statefulSet.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -81,8 +83,7 @@ func (statefulSetStrategy) PrepareForUpdate(ctx context.Context, obj, old runtim // Update is not allowed to set status newStatefulSet.Status = oldStatefulSet.Status - pod.DropDisabledAlphaFields(&newStatefulSet.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldStatefulSet.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newStatefulSet.Spec.Template, &oldStatefulSet.Spec.Template) // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. @@ -96,7 +97,9 @@ func (statefulSetStrategy) PrepareForUpdate(ctx context.Context, obj, old runtim // Validate validates a new StatefulSet. func (statefulSetStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { statefulSet := obj.(*apps.StatefulSet) - return validation.ValidateStatefulSet(statefulSet) + allErrs := validation.ValidateStatefulSet(statefulSet) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&statefulSet.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -110,8 +113,11 @@ func (statefulSetStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (statefulSetStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateStatefulSet(obj.(*apps.StatefulSet)) - updateErrorList := validation.ValidateStatefulSetUpdate(obj.(*apps.StatefulSet), old.(*apps.StatefulSet)) + newStatefulSet := obj.(*apps.StatefulSet) + oldStatefulSet := old.(*apps.StatefulSet) + validationErrorList := validation.ValidateStatefulSet(newStatefulSet) + updateErrorList := validation.ValidateStatefulSetUpdate(newStatefulSet, oldStatefulSet) + updateErrorList = append(updateErrorList, corevalidation.ValidateConditionalPodTemplate(&newStatefulSet.Spec.Template, &oldStatefulSet.Spec.Template, field.NewPath("spec.template"))...) return append(validationErrorList, updateErrorList...) } @@ -124,6 +130,7 @@ type statefulSetStatusStrategy struct { statefulSetStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = statefulSetStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status diff --git a/vendor/k8s.io/kubernetes/pkg/registry/authentication/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/authentication/OWNERS old mode 100755 new mode 100644 index c607d2aa8c5..3e05d309be5 --- a/vendor/k8s.io/kubernetes/pkg/registry/authentication/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/authentication/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authenticators-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/registry/authorization/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/authorization/OWNERS old mode 100755 new mode 100644 index cd0d70a0f8f..7b3130fdcbc --- a/vendor/k8s.io/kubernetes/pkg/registry/authorization/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/authorization/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/OWNERS old mode 100755 new mode 100644 index f65afe9ed9a..8af01ebfbdd --- a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - hongchaodeng diff --git a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go index 12dbad2dd08..f26088f22ac 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go @@ -86,6 +86,7 @@ type autoscalerStatusStrategy struct { autoscalerStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = autoscalerStatusStrategy{Strategy} func (autoscalerStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/rest/storage_autoscaling.go b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/rest/storage_autoscaling.go index e38ebfa64ec..b4e527c27ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/rest/storage_autoscaling.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/rest/storage_autoscaling.go @@ -18,6 +18,7 @@ package rest import ( autoscalingapiv1 "k8s.io/api/autoscaling/v1" + autoscalingapiv2beta1 "k8s.io/api/autoscaling/v2beta1" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" genericapiserver "k8s.io/apiserver/pkg/server" @@ -38,6 +39,9 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag if apiResourceConfigSource.VersionEnabled(autoscalingapiv2beta2.SchemeGroupVersion) { apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta2.SchemeGroupVersion.Version] = p.v2beta2Storage(apiResourceConfigSource, restOptionsGetter) } + if apiResourceConfigSource.VersionEnabled(autoscalingapiv2beta1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta1.SchemeGroupVersion.Version] = p.v2beta1Storage(apiResourceConfigSource, restOptionsGetter) + } if apiResourceConfigSource.VersionEnabled(autoscalingapiv1.SchemeGroupVersion) { apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/batch/OWNERS old mode 100755 new mode 100644 index f65afe9ed9a..8af01ebfbdd --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - hongchaodeng diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/BUILD index e9661e46b18..f92330d56ad 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/BUILD @@ -18,8 +18,13 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/batch/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", + "//staging/src/k8s.io/api/batch/v1beta1:go_default_library", + "//staging/src/k8s.io/api/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go index 1e756d6b15f..15780e795fe 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go @@ -19,14 +19,19 @@ package cronjob import ( "context" + batchv1beta1 "k8s.io/api/batch/v1beta1" + batchv2alpha1 "k8s.io/api/batch/v2alpha1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation/field" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/storage/names" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/batch/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // cronJobStrategy implements verification logic for Replication Controllers. @@ -38,10 +43,20 @@ type cronJobStrategy struct { // Strategy is the default logic that applies when creating and updating CronJob objects. var Strategy = cronJobStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns Orphan because that was the default -// behavior before the server-side garbage collection was implemented. +// DefaultGarbageCollectionPolicy returns OrphanDependents for batch/v1beta1 and batch/v2alpha1 for backwards compatibility, +// and DeleteDependents for all other versions. func (cronJobStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { - return rest.OrphanDependents + var groupVersion schema.GroupVersion + if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case batchv1beta1.SchemeGroupVersion, batchv2alpha1.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents + } } // NamespaceScoped returns true because all scheduled jobs need to be within a namespace. @@ -54,7 +69,7 @@ func (cronJobStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) cronJob := obj.(*batch.CronJob) cronJob.Status = batch.CronJobStatus{} - pod.DropDisabledAlphaFields(&cronJob.Spec.JobTemplate.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&cronJob.Spec.JobTemplate.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -63,14 +78,15 @@ func (cronJobStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Ob oldCronJob := old.(*batch.CronJob) newCronJob.Status = oldCronJob.Status - pod.DropDisabledAlphaFields(&newCronJob.Spec.JobTemplate.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldCronJob.Spec.JobTemplate.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newCronJob.Spec.JobTemplate.Spec.Template, &oldCronJob.Spec.JobTemplate.Spec.Template) } // Validate validates a new scheduled job. func (cronJobStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { cronJob := obj.(*batch.CronJob) - return validation.ValidateCronJob(cronJob) + allErrs := validation.ValidateCronJob(cronJob) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&cronJob.Spec.JobTemplate.Spec.Template, nil, field.NewPath("spec.jobTemplate.spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -88,13 +104,21 @@ func (cronJobStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (cronJobStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - return validation.ValidateCronJobUpdate(obj.(*batch.CronJob), old.(*batch.CronJob)) + newCronJob := obj.(*batch.CronJob) + oldCronJob := old.(*batch.CronJob) + allErrs := validation.ValidateCronJobUpdate(newCronJob, oldCronJob) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate( + &newCronJob.Spec.JobTemplate.Spec.Template, + &oldCronJob.Spec.JobTemplate.Spec.Template, + field.NewPath("spec.jobTemplate.spec.template"))...) + return allErrs } type cronJobStatusStrategy struct { cronJobStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = cronJobStatusStrategy{Strategy} func (cronJobStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD index 30474db1f3c..b70fed923a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD @@ -18,12 +18,16 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/batch/validation:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//pkg/features:go_default_library", + "//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", @@ -47,6 +51,7 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy.go index b2fd1f3318a..ef19f1e242a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy.go @@ -21,11 +21,14 @@ import ( "fmt" "strconv" + batchv1 "k8s.io/api/batch/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation/field" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/storage" @@ -34,6 +37,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/batch/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // jobStrategy implements verification logic for Replication Controllers. @@ -45,10 +49,20 @@ type jobStrategy struct { // Strategy is the default logic that applies when creating and updating Replication Controller objects. var Strategy = jobStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns Orphan because that was the default -// behavior before the server-side garbage collection was implemented. +// DefaultGarbageCollectionPolicy returns OrphanDependents for batch/v1 for backwards compatibility, +// and DeleteDependents for all other versions. func (jobStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { - return rest.OrphanDependents + var groupVersion schema.GroupVersion + if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case batchv1.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents + } } // NamespaceScoped returns true because all jobs need to be within a namespace. @@ -62,7 +76,7 @@ func (jobStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { job.Status = batch.JobStatus{} job.Spec.TTLSecondsAfterFinished = nil - pod.DropDisabledAlphaFields(&job.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&job.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -71,11 +85,11 @@ func (jobStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object oldJob := old.(*batch.Job) newJob.Status = oldJob.Status - newJob.Spec.TTLSecondsAfterFinished = nil - oldJob.Spec.TTLSecondsAfterFinished = nil + if oldJob.Spec.TTLSecondsAfterFinished == nil { + newJob.Spec.TTLSecondsAfterFinished = nil + } - pod.DropDisabledAlphaFields(&newJob.Spec.Template.Spec) - pod.DropDisabledAlphaFields(&oldJob.Spec.Template.Spec) + pod.DropDisabledTemplateFields(&newJob.Spec.Template, &oldJob.Spec.Template) } // Validate validates a new job. @@ -85,7 +99,9 @@ func (jobStrategy) Validate(ctx context.Context, obj runtime.Object) field.Error if job.Spec.ManualSelector == nil || *job.Spec.ManualSelector == false { generateSelector(job) } - return validation.ValidateJob(job) + allErrs := validation.ValidateJob(job) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&job.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // generateSelector adds a selector to a job and labels to its template @@ -153,8 +169,11 @@ func (jobStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (jobStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateJob(obj.(*batch.Job)) - updateErrorList := validation.ValidateJobUpdate(obj.(*batch.Job), old.(*batch.Job)) + job := obj.(*batch.Job) + oldJob := old.(*batch.Job) + validationErrorList := validation.ValidateJob(job) + updateErrorList := validation.ValidateJobUpdate(job, oldJob) + updateErrorList = append(updateErrorList, corevalidation.ValidateConditionalPodTemplate(&job.Spec.Template, &oldJob.Spec.Template, field.NewPath("spec.template"))...) return append(validationErrorList, updateErrorList...) } @@ -184,12 +203,12 @@ func JobToSelectableFields(job *batch.Job) fields.Set { } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { job, ok := obj.(*batch.Job) if !ok { - return nil, nil, false, fmt.Errorf("given object is not a job.") + return nil, nil, fmt.Errorf("given object is not a job.") } - return labels.Set(job.ObjectMeta.Labels), JobToSelectableFields(job), job.Initializers != nil, nil + return labels.Set(job.ObjectMeta.Labels), JobToSelectableFields(job), nil } // MatchJob is the filter used by the generic etcd backend to route diff --git a/vendor/k8s.io/kubernetes/pkg/registry/cachesize/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/cachesize/OWNERS old mode 100755 new mode 100644 index 9ab7358dc06..1306faffe2c --- a/vendor/k8s.io/kubernetes/pkg/registry/cachesize/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/cachesize/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - gmarek diff --git a/vendor/k8s.io/kubernetes/pkg/registry/certificates/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/certificates/OWNERS old mode 100755 new mode 100644 index 470b7a1c92d..3cf03643835 --- a/vendor/k8s.io/kubernetes/pkg/registry/certificates/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/certificates/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-certificates-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/strategy.go index 82830ea6ee3..7bfbd537532 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/strategy.go @@ -40,7 +40,7 @@ type csrStrategy struct { // CSR objects. var Strategy = csrStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// NamespaceScoped is true for CSRs. +// NamespaceScoped is false for CSRs. func (csrStrategy) NamespaceScoped() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/BUILD similarity index 60% rename from vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/BUILD rename to vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/BUILD index 7f2519101b0..98326cf7676 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/BUILD @@ -1,9 +1,4 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", @@ -11,11 +6,12 @@ go_library( "doc.go", "strategy.go", ], - importpath = "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration", + importpath = "k8s.io/kubernetes/pkg/registry/coordination/lease", + visibility = ["//visibility:public"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/apis/admissionregistration:go_default_library", - "//pkg/apis/admissionregistration/validation:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//pkg/apis/coordination/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", @@ -33,7 +29,8 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/registry/admissionregistration/initializerconfiguration/storage:all-srcs", + "//pkg/registry/coordination/lease/storage:all-srcs", ], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/doc.go new file mode 100644 index 00000000000..f744241447d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package lease diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/BUILD new file mode 100644 index 00000000000..1b492b0b51d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["storage.go"], + importpath = "k8s.io/kubernetes/pkg/registry/coordination/lease/storage", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/coordination:go_default_library", + "//pkg/printers:go_default_library", + "//pkg/printers/internalversion:go_default_library", + "//pkg/printers/storage:go_default_library", + "//pkg/registry/coordination/lease:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/storage.go new file mode 100644 index 00000000000..37d66095e9f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/storage/storage.go @@ -0,0 +1,54 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/registry/generic" + genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" + coordinationapi "k8s.io/kubernetes/pkg/apis/coordination" + "k8s.io/kubernetes/pkg/printers" + printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" + printerstorage "k8s.io/kubernetes/pkg/printers/storage" + "k8s.io/kubernetes/pkg/registry/coordination/lease" +) + +// REST implements a RESTStorage for leases against etcd +type REST struct { + *genericregistry.Store +} + +// NewREST returns a RESTStorage object that will work against leases. +func NewREST(optsGetter generic.RESTOptionsGetter) *REST { + store := &genericregistry.Store{ + NewFunc: func() runtime.Object { return &coordinationapi.Lease{} }, + NewListFunc: func() runtime.Object { return &coordinationapi.LeaseList{} }, + DefaultQualifiedResource: coordinationapi.Resource("leases"), + + CreateStrategy: lease.Strategy, + UpdateStrategy: lease.Strategy, + DeleteStrategy: lease.Strategy, + + TableConvertor: printerstorage.TableConvertor{TablePrinter: printers.NewTablePrinter().With(printersinternal.AddHandlers)}, + } + options := &generic.StoreOptions{RESTOptions: optsGetter} + if err := store.CompleteWithOptions(options); err != nil { + panic(err) // TODO: Propagate error up + } + + return &REST{store} +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/strategy.go new file mode 100644 index 00000000000..dd3df56e08c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/lease/strategy.go @@ -0,0 +1,75 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package lease + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/storage/names" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/coordination" + "k8s.io/kubernetes/pkg/apis/coordination/validation" +) + +// leaseStrategy implements verification logic for Leases. +type leaseStrategy struct { + runtime.ObjectTyper + names.NameGenerator +} + +// Strategy is the default logic that applies when creating and updating Lease objects. +var Strategy = leaseStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} + +// NamespaceScoped returns true because all Lease' need to be within a namespace. +func (leaseStrategy) NamespaceScoped() bool { + return true +} + +// PrepareForCreate prepares Lease for creation. +func (leaseStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { +} + +// PrepareForUpdate clears fields that are not allowed to be set by end users on update. +func (leaseStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { +} + +// Validate validates a new Lease. +func (leaseStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { + lease := obj.(*coordination.Lease) + return validation.ValidateLease(lease) +} + +// Canonicalize normalizes the object after validation. +func (leaseStrategy) Canonicalize(obj runtime.Object) { +} + +// AllowCreateOnUpdate is true for Lease; this means you may create one with a PUT request. +func (leaseStrategy) AllowCreateOnUpdate() bool { + return true +} + +// ValidateUpdate is the default update validation for an end user. +func (leaseStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + return validation.ValidateLeaseUpdate(obj.(*coordination.Lease), old.(*coordination.Lease)) +} + +// AllowUnconditionalUpdate is the default update policy for Lease objects. +func (leaseStrategy) AllowUnconditionalUpdate() bool { + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/BUILD new file mode 100644 index 00000000000..3be73700ee7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["storage_coordination.go"], + importpath = "k8s.io/kubernetes/pkg/registry/coordination/rest", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//pkg/registry/coordination/lease/storage:go_default_library", + "//staging/src/k8s.io/api/coordination/v1:go_default_library", + "//staging/src/k8s.io/api/coordination/v1beta1:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/storage_coordination.go b/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/storage_coordination.go new file mode 100644 index 00000000000..4dae50369de --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/coordination/rest/storage_coordination.go @@ -0,0 +1,67 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + coordinationv1 "k8s.io/api/coordination/v1" + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" + "k8s.io/apiserver/pkg/registry/generic" + "k8s.io/apiserver/pkg/registry/rest" + genericapiserver "k8s.io/apiserver/pkg/server" + serverstorage "k8s.io/apiserver/pkg/server/storage" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/coordination" + leasestorage "k8s.io/kubernetes/pkg/registry/coordination/lease/storage" +) + +type RESTStorageProvider struct{} + +func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) { + apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(coordination.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) + // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. + // TODO refactor the plumbing to provide the information in the APIGroupInfo + + if apiResourceConfigSource.VersionEnabled(coordinationv1beta1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[coordinationv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) + } + if apiResourceConfigSource.VersionEnabled(coordinationv1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[coordinationv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) + } + return apiGroupInfo, true +} + +func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // leases + leaseStorage := leasestorage.NewREST(restOptionsGetter) + storage["leases"] = leaseStorage + + return storage +} + +func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // leases + leaseStorage := leasestorage.NewREST(restOptionsGetter) + storage["leases"] = leaseStorage + + return storage +} + +func (p RESTStorageProvider) GroupName() string { + return coordination.GroupName +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/core/OWNERS old mode 100755 new mode 100644 index 351e0076895..a10065cc7af --- a/vendor/k8s.io/kubernetes/pkg/registry/core/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - deads2k diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/componentstatus/validator.go b/vendor/k8s.io/kubernetes/pkg/registry/core/componentstatus/validator.go index 09c0f6a34c7..ebfad4bf020 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/componentstatus/validator.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/componentstatus/validator.go @@ -68,7 +68,8 @@ func (server *Server) DoServerCheck() (probe.Result, string, error) { if server.Prober != nil { return } - server.Prober = httpprober.NewWithTLSConfig(server.TLSConfig) + const followNonLocalRedirects = true + server.Prober = httpprober.NewWithTLSConfig(server.TLSConfig, followNonLocalRedirects) }) scheme := "http" diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/strategy.go index bd6ede7cd87..3b90fe6afd2 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/strategy.go @@ -53,7 +53,9 @@ func (endpointsStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime. // Validate validates a new endpoints. func (endpointsStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { - return validation.ValidateEndpoints(obj.(*api.Endpoints)) + allErrs := validation.ValidateEndpoints(obj.(*api.Endpoints)) + allErrs = append(allErrs, validation.ValidateConditionalEndpoints(obj.(*api.Endpoints), nil)...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -70,7 +72,9 @@ func (endpointsStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (endpointsStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateEndpoints(obj.(*api.Endpoints)) - return append(errorList, validation.ValidateEndpointsUpdate(obj.(*api.Endpoints), old.(*api.Endpoints))...) + errorList = append(errorList, validation.ValidateEndpointsUpdate(obj.(*api.Endpoints), old.(*api.Endpoints))...) + errorList = append(errorList, validation.ValidateConditionalEndpoints(obj.(*api.Endpoints), old.(*api.Endpoints))...) + return errorList } func (endpointsStrategy) AllowUnconditionalUpdate() bool { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/event/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/event/strategy.go index bfe3c9d597b..566c33c024b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/event/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/event/strategy.go @@ -79,12 +79,12 @@ func (eventStrategy) AllowUnconditionalUpdate() bool { } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { event, ok := obj.(*api.Event) if !ok { - return nil, nil, false, fmt.Errorf("not an event") + return nil, nil, fmt.Errorf("not an event") } - return labels.Set(event.Labels), EventToSelectableFields(event), event.Initializers != nil, nil + return labels.Set(event.Labels), EventToSelectableFields(event), nil } func MatchEvent(label labels.Selector, field fields.Selector) storage.SelectionPredicate { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go index c8f0c278cb9..b9d0558ab7f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go @@ -147,6 +147,14 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp ) return nil, false, err } + if options.Preconditions.ResourceVersion != nil && *options.Preconditions.ResourceVersion != namespace.ResourceVersion { + err = apierrors.NewConflict( + api.Resource("namespaces"), + name, + fmt.Errorf("Precondition failed: ResourceVersion in precondition: %v, ResourceVersion in object meta: %v", *options.Preconditions.ResourceVersion, namespace.ResourceVersion), + ) + return nil, false, err + } // upon first request to delete, we switch the phase to start namespace termination // TODO: enhance graceful deletion's calls to DeleteStrategy to allow phase change and finalizer patterns @@ -156,7 +164,7 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp return nil, false, err } - preconditions := storage.Preconditions{UID: options.Preconditions.UID} + preconditions := storage.Preconditions{UID: options.Preconditions.UID, ResourceVersion: options.Preconditions.ResourceVersion} out := r.store.NewFunc() err = r.store.Storage.GuaranteedUpdate( @@ -226,6 +234,12 @@ func (r *REST) ShortNames() []string { return []string{"ns"} } +var _ rest.StorageVersionProvider = &REST{} + +func (r *REST) StorageVersion() runtime.GroupVersioner { + return r.store.StorageVersion() +} + func (r *StatusREST) New() runtime.Object { return r.store.New() } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/strategy.go index be15c1b9636..bb27621f2e0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/strategy.go @@ -139,12 +139,12 @@ func (namespaceFinalizeStrategy) PrepareForUpdate(ctx context.Context, obj, old } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { namespaceObj, ok := obj.(*api.Namespace) if !ok { - return nil, nil, false, fmt.Errorf("not a namespace") + return nil, nil, fmt.Errorf("not a namespace") } - return labels.Set(namespaceObj.Labels), NamespaceToSelectableFields(namespaceObj), namespaceObj.Initializers != nil, nil + return labels.Set(namespaceObj.Labels), NamespaceToSelectableFields(namespaceObj), nil } // MatchNamespace returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/node/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/node/strategy.go index 1287f93dee9..3f853a51395 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/node/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/node/strategy.go @@ -67,9 +67,9 @@ func (nodeStrategy) AllowCreateOnUpdate() bool { func (nodeStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { node := obj.(*api.Node) // Nodes allow *all* fields, including status, to be set on create. - if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { node.Spec.ConfigSource = nil + node.Status.Config = nil } } @@ -79,12 +79,22 @@ func (nodeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Objec oldNode := old.(*api.Node) newNode.Status = oldNode.Status - if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { + if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) && !nodeConfigSourceInUse(oldNode) { newNode.Spec.ConfigSource = nil - oldNode.Spec.ConfigSource = nil } } +// nodeConfigSourceInUse returns true if node's Spec ConfigSource is set(used) +func nodeConfigSourceInUse(node *api.Node) bool { + if node == nil { + return false + } + if node.Spec.ConfigSource != nil { + return true + } + return false +} + // Validate validates a new node. func (nodeStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { node := obj.(*api.Node) @@ -127,26 +137,27 @@ type nodeStatusStrategy struct { var StatusStrategy = nodeStatusStrategy{Strategy} -func (nodeStatusStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { - node := obj.(*api.Node) - // Nodes allow *all* fields, including status, to be set on create. - - if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { - node.Status.Config = nil - } -} - func (nodeStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { newNode := obj.(*api.Node) oldNode := old.(*api.Node) newNode.Spec = oldNode.Spec - if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { + if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) && !nodeStatusConfigInUse(oldNode) { newNode.Status.Config = nil - oldNode.Status.Config = nil } } +// nodeStatusConfigInUse returns true if node's Status Config is set(used) +func nodeStatusConfigInUse(node *api.Node) bool { + if node == nil { + return false + } + if node.Status.Config != nil { + return true + } + return false +} + func (nodeStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateNodeUpdate(obj.(*api.Node), old.(*api.Node)) } @@ -170,12 +181,12 @@ func NodeToSelectableFields(node *api.Node) fields.Set { } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { nodeObj, ok := obj.(*api.Node) if !ok { - return nil, nil, false, fmt.Errorf("not a node") + return nil, nil, fmt.Errorf("not a node") } - return labels.Set(nodeObj.ObjectMeta.Labels), NodeToSelectableFields(nodeObj), nodeObj.Initializers != nil, nil + return labels.Set(nodeObj.ObjectMeta.Labels), NodeToSelectableFields(nodeObj), nil } // MatchNode returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/strategy.go index 312fa8cfb4b..5ab7d1edd4a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/strategy.go @@ -108,12 +108,12 @@ func (persistentvolumeStatusStrategy) ValidateUpdate(ctx context.Context, obj, o } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { persistentvolumeObj, ok := obj.(*api.PersistentVolume) if !ok { - return nil, nil, false, fmt.Errorf("not a persistentvolume") + return nil, nil, fmt.Errorf("not a persistentvolume") } - return labels.Set(persistentvolumeObj.Labels), PersistentVolumeToSelectableFields(persistentvolumeObj), persistentvolumeObj.Initializers != nil, nil + return labels.Set(persistentvolumeObj.Labels), PersistentVolumeToSelectableFields(persistentvolumeObj), nil } // MatchPersistentVolume returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/BUILD index 1fafa124d18..7c5f5a76288 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/persistentvolumeclaim:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", + "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -25,6 +26,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) @@ -36,6 +38,11 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/strategy.go index abefe0de111..14e0d26a163 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/strategy.go @@ -27,10 +27,12 @@ import ( "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/names" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/legacyscheme" pvcutil "k8s.io/kubernetes/pkg/api/persistentvolumeclaim" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/validation" + "k8s.io/kubernetes/pkg/features" ) // persistentvolumeclaimStrategy implements behavior for PersistentVolumeClaim objects @@ -52,7 +54,7 @@ func (persistentvolumeclaimStrategy) PrepareForCreate(ctx context.Context, obj r pvc := obj.(*api.PersistentVolumeClaim) pvc.Status = api.PersistentVolumeClaimStatus{} - pvcutil.DropDisabledAlphaFields(&pvc.Spec) + pvcutil.DropDisabledFields(&pvc.Spec, nil) } func (persistentvolumeclaimStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { @@ -74,8 +76,7 @@ func (persistentvolumeclaimStrategy) PrepareForUpdate(ctx context.Context, obj, oldPvc := old.(*api.PersistentVolumeClaim) newPvc.Status = oldPvc.Status - pvcutil.DropDisabledAlphaFields(&newPvc.Spec) - pvcutil.DropDisabledAlphaFields(&oldPvc.Spec) + pvcutil.DropDisabledFields(&newPvc.Spec, &oldPvc.Spec) } func (persistentvolumeclaimStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { @@ -98,6 +99,9 @@ func (persistentvolumeclaimStatusStrategy) PrepareForUpdate(ctx context.Context, newPv := obj.(*api.PersistentVolumeClaim) oldPv := old.(*api.PersistentVolumeClaim) newPv.Spec = oldPv.Spec + if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) && oldPv.Status.Conditions == nil { + newPv.Status.Conditions = nil + } } func (persistentvolumeclaimStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { @@ -105,12 +109,12 @@ func (persistentvolumeclaimStatusStrategy) ValidateUpdate(ctx context.Context, o } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { persistentvolumeclaimObj, ok := obj.(*api.PersistentVolumeClaim) if !ok { - return nil, nil, false, fmt.Errorf("not a persistentvolumeclaim") + return nil, nil, fmt.Errorf("not a persistentvolumeclaim") } - return labels.Set(persistentvolumeclaimObj.Labels), PersistentVolumeClaimToSelectableFields(persistentvolumeclaimObj), persistentvolumeclaimObj.Initializers != nil, nil + return labels.Set(persistentvolumeclaimObj.Labels), PersistentVolumeClaimToSelectableFields(persistentvolumeclaimObj), nil } // MatchPersistentVolumeClaim returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/BUILD index ddf8fcb5d15..45b61517276 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/BUILD @@ -22,20 +22,16 @@ go_library( "//pkg/kubelet/client:go_default_library", "//pkg/proxy/util:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/rest/subresources.go b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/rest/subresources.go index 26c39ee2dd6..5ca99b8980f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/rest/subresources.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/rest/subresources.go @@ -194,7 +194,7 @@ func (r *PortForwardREST) Connect(ctx context.Context, name string, opts runtime func newThrottledUpgradeAwareProxyHandler(location *url.URL, transport http.RoundTripper, wrapTransport, upgradeRequired, interceptRedirects bool, responder rest.Responder) *proxy.UpgradeAwareHandler { handler := proxy.NewUpgradeAwareHandler(location, transport, wrapTransport, upgradeRequired, proxy.NewErrorResponder(responder)) handler.InterceptRedirects = interceptRedirects && utilfeature.DefaultFeatureGate.Enabled(genericfeatures.StreamingProxyRedirects) - handler.RequireSameHostRedirects = false + handler.RequireSameHostRedirects = utilfeature.DefaultFeatureGate.Enabled(genericfeatures.ValidateProxyRedirects) handler.MaxBytesPerSec = capabilities.Get().PerConnectionBandwidthLimitBytesPerSec return handler } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/BUILD index 8e06b27530f..b02aa365505 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/BUILD @@ -8,10 +8,15 @@ load( go_test( name = "go_default_test", - srcs = ["storage_test.go"], + srcs = [ + "eviction_test.go", + "storage_test.go", + ], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/policy:go_default_library", + "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", "//pkg/registry/registrytest:go_default_library", "//pkg/securitycontext:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -24,7 +29,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library", @@ -32,8 +36,6 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/errors:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/eviction.go b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/eviction.go index 3e3827a079c..fdcf2d8dbd3 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/eviction.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/eviction.go @@ -138,7 +138,12 @@ func (r *EvictionREST) Create(ctx context.Context, obj runtime.Object, createVal // At this point there was either no PDB or we succeeded in decrementing // Try the delete - _, _, err = r.store.Delete(ctx, eviction.Name, eviction.DeleteOptions) + deletionOptions := eviction.DeleteOptions + if deletionOptions == nil { + // default to non-nil to trigger graceful deletion + deletionOptions = &metav1.DeleteOptions{} + } + _, _, err = r.store.Delete(ctx, eviction.Name, deletionOptions) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/strategy.go index 05c750b979a..086b0850d51 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/strategy.go @@ -28,7 +28,6 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apimachineryvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -70,7 +69,7 @@ func (podStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { QOSClass: qos.GetPodQOS(pod), } - podutil.DropDisabledAlphaFields(&pod.Spec) + podutil.DropDisabledPodFields(pod, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -79,14 +78,15 @@ func (podStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object oldPod := old.(*api.Pod) newPod.Status = oldPod.Status - podutil.DropDisabledAlphaFields(&newPod.Spec) - podutil.DropDisabledAlphaFields(&oldPod.Spec) + podutil.DropDisabledPodFields(newPod, oldPod) } // Validate validates a new pod. func (podStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { pod := obj.(*api.Pod) - return validation.ValidatePod(pod) + allErrs := validation.ValidatePod(pod) + allErrs = append(allErrs, validation.ValidateConditionalPod(pod, nil, field.NewPath(""))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -98,21 +98,12 @@ func (podStrategy) AllowCreateOnUpdate() bool { return false } -func isUpdatingUninitializedPod(old runtime.Object) (bool, error) { - return false, nil -} - // ValidateUpdate is the default update validation for an end user. func (podStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidatePod(obj.(*api.Pod)) - uninitializedUpdate, err := isUpdatingUninitializedPod(old) - if err != nil { - return append(errorList, field.InternalError(field.NewPath("metadata"), err)) - } - if uninitializedUpdate { - return errorList - } - return append(errorList, validation.ValidatePodUpdate(obj.(*api.Pod), old.(*api.Pod))...) + errorList = append(errorList, validation.ValidatePodUpdate(obj.(*api.Pod), old.(*api.Pod))...) + errorList = append(errorList, validation.ValidateConditionalPod(obj.(*api.Pod), old.(*api.Pod), field.NewPath(""))...) + return errorList } // AllowUnconditionalUpdate allows pods to be overwritten @@ -180,25 +171,16 @@ func (podStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime. } func (podStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - var errorList field.ErrorList - uninitializedUpdate, err := isUpdatingUninitializedPod(old) - if err != nil { - return append(errorList, field.InternalError(field.NewPath("metadata"), err)) - } - if uninitializedUpdate { - return append(errorList, field.Forbidden(field.NewPath("status"), apimachineryvalidation.UninitializedStatusUpdateErrorMsg)) - } - // TODO: merge valid fields after update return validation.ValidatePodStatusUpdate(obj.(*api.Pod), old.(*api.Pod)) } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { pod, ok := obj.(*api.Pod) if !ok { - return nil, nil, false, fmt.Errorf("not a pod") + return nil, nil, fmt.Errorf("not a pod") } - return labels.Set(pod.ObjectMeta.Labels), PodToSelectableFields(pod), pod.Initializers != nil, nil + return labels.Set(pod.ObjectMeta.Labels), PodToSelectableFields(pod), nil } // MatchPod returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/strategy.go index 83c516fc886..ef18f87effb 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/strategy.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/pod" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/validation" + corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" ) // podTemplateStrategy implements behavior for PodTemplates @@ -47,13 +48,15 @@ func (podTemplateStrategy) NamespaceScoped() bool { func (podTemplateStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { template := obj.(*api.PodTemplate) - pod.DropDisabledAlphaFields(&template.Template.Spec) + pod.DropDisabledTemplateFields(&template.Template, nil) } // Validate validates a new pod template. func (podTemplateStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { - pod := obj.(*api.PodTemplate) - return validation.ValidatePodTemplate(pod) + template := obj.(*api.PodTemplate) + allErrs := validation.ValidatePodTemplate(template) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&template.Template, nil, field.NewPath("template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -70,13 +73,16 @@ func (podTemplateStrategy) PrepareForUpdate(ctx context.Context, obj, old runtim newTemplate := obj.(*api.PodTemplate) oldTemplate := old.(*api.PodTemplate) - pod.DropDisabledAlphaFields(&newTemplate.Template.Spec) - pod.DropDisabledAlphaFields(&oldTemplate.Template.Spec) + pod.DropDisabledTemplateFields(&newTemplate.Template, &oldTemplate.Template) } // ValidateUpdate is the default update validation for an end user. func (podTemplateStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - return validation.ValidatePodTemplateUpdate(obj.(*api.PodTemplate), old.(*api.PodTemplate)) + template := obj.(*api.PodTemplate) + oldTemplate := old.(*api.PodTemplate) + allErrs := validation.ValidatePodTemplateUpdate(template, oldTemplate) + allErrs = append(allErrs, corevalidation.ValidateConditionalPodTemplate(&template.Template, &oldTemplate.Template, field.NewPath("template"))...) + return allErrs } func (podTemplateStrategy) AllowUnconditionalUpdate() bool { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/BUILD index 2f7a63edf4b..cfc09d1b4d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/BUILD @@ -19,11 +19,14 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", "//pkg/apis/core/validation:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/strategy.go index 0cc784bc9fd..f52bab09358 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/strategy.go @@ -24,11 +24,14 @@ import ( "strconv" "strings" + corev1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation/field" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" apistorage "k8s.io/apiserver/pkg/storage" @@ -49,10 +52,20 @@ type rcStrategy struct { // Strategy is the default logic that applies when creating and updating Replication Controller objects. var Strategy = rcStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// DefaultGarbageCollectionPolicy returns Orphan because that was the default -// behavior before the server-side garbage collection was implemented. +// DefaultGarbageCollectionPolicy returns OrphanDependents for v1 for backwards compatibility, +// and DeleteDependents for all other versions. func (rcStrategy) DefaultGarbageCollectionPolicy(ctx context.Context) rest.GarbageCollectionPolicy { - return rest.OrphanDependents + var groupVersion schema.GroupVersion + if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found { + groupVersion = schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion} + } + switch groupVersion { + case corev1.SchemeGroupVersion: + // for back compatibility + return rest.OrphanDependents + default: + return rest.DeleteDependents + } } // NamespaceScoped returns true because all Replication Controllers need to be within a namespace. @@ -67,9 +80,7 @@ func (rcStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { controller.Generation = 1 - if controller.Spec.Template != nil { - pod.DropDisabledAlphaFields(&controller.Spec.Template.Spec) - } + pod.DropDisabledTemplateFields(controller.Spec.Template, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -79,12 +90,7 @@ func (rcStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) // update is not allowed to set status newController.Status = oldController.Status - if oldController.Spec.Template != nil { - pod.DropDisabledAlphaFields(&oldController.Spec.Template.Spec) - } - if newController.Spec.Template != nil { - pod.DropDisabledAlphaFields(&newController.Spec.Template.Spec) - } + pod.DropDisabledTemplateFields(newController.Spec.Template, oldController.Spec.Template) // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. We push @@ -102,7 +108,9 @@ func (rcStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) // Validate validates a new replication controller. func (rcStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { controller := obj.(*api.ReplicationController) - return validation.ValidateReplicationController(controller) + allErrs := validation.ValidateReplicationController(controller) + allErrs = append(allErrs, validation.ValidateConditionalPodTemplate(controller.Spec.Template, nil, field.NewPath("spec.template"))...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -122,6 +130,7 @@ func (rcStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) f validationErrorList := validation.ValidateReplicationController(newRc) updateErrorList := validation.ValidateReplicationControllerUpdate(newRc, oldRc) + updateErrorList = append(updateErrorList, validation.ValidateConditionalPodTemplate(newRc.Spec.Template, oldRc.Spec.Template, field.NewPath("spec.template"))...) errs := append(validationErrorList, updateErrorList...) for key, value := range helper.NonConvertibleFields(oldRc.Annotations) { @@ -158,12 +167,12 @@ func ControllerToSelectableFields(controller *api.ReplicationController) fields. } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { rc, ok := obj.(*api.ReplicationController) if !ok { - return nil, nil, false, fmt.Errorf("given object is not a replication controller.") + return nil, nil, fmt.Errorf("given object is not a replication controller.") } - return labels.Set(rc.ObjectMeta.Labels), ControllerToSelectableFields(rc), rc.Initializers != nil, nil + return labels.Set(rc.ObjectMeta.Labels), ControllerToSelectableFields(rc), nil } // MatchController is the filter used by the generic etcd backend to route diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/BUILD index 54bba4eaa48..a8eac9a9764 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/BUILD @@ -15,6 +15,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/registry/core/resourcequota", deps = [ "//pkg/api/legacyscheme:go_default_library", + "//pkg/api/resourcequota:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/strategy.go index dc313ac9bf0..da259dfbffc 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/storage/names" "k8s.io/kubernetes/pkg/api/legacyscheme" + resourcequotautil "k8s.io/kubernetes/pkg/api/resourcequota" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/validation" ) @@ -46,6 +47,7 @@ func (resourcequotaStrategy) NamespaceScoped() bool { func (resourcequotaStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { resourcequota := obj.(*api.ResourceQuota) resourcequota.Status = api.ResourceQuotaStatus{} + resourcequotautil.DropDisabledFields(&resourcequota.Spec, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -53,6 +55,7 @@ func (resourcequotaStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newResourcequota := obj.(*api.ResourceQuota) oldResourcequota := old.(*api.ResourceQuota) newResourcequota.Status = oldResourcequota.Status + resourcequotautil.DropDisabledFields(&newResourcequota.Spec, &oldResourcequota.Spec) } // Validate validates a new resourcequota. @@ -84,6 +87,7 @@ type resourcequotaStatusStrategy struct { resourcequotaStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = resourcequotaStatusStrategy{Strategy} func (resourcequotaStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/secret/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/secret/strategy.go index d52fd42abc2..52d39cbe97d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/secret/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/secret/strategy.go @@ -98,12 +98,12 @@ func (s strategy) Export(ctx context.Context, obj runtime.Object, exact bool) er } // GetAttrs returns labels and fields of a given object for filtering purposes. -func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { secret, ok := obj.(*api.Secret) if !ok { - return nil, nil, false, fmt.Errorf("not a secret") + return nil, nil, fmt.Errorf("not a secret") } - return labels.Set(secret.Labels), SelectableFields(secret), secret.Initializers != nil, nil + return labels.Set(secret.Labels), SelectableFields(secret), nil } // Matcher returns a generic matcher for a given label and field selector. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/rest.go b/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/rest.go index b0a54a21951..4ed99d17917 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/rest.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/rest.go @@ -77,6 +77,7 @@ type ServiceStorage interface { rest.Watcher rest.TableConvertor rest.Exporter + rest.StorageVersionProvider } type EndpointsStorage interface { @@ -108,11 +109,16 @@ func NewREST( } var ( - _ ServiceStorage = &REST{} - _ rest.CategoriesProvider = &REST{} - _ rest.ShortNamesProvider = &REST{} + _ ServiceStorage = &REST{} + _ rest.CategoriesProvider = &REST{} + _ rest.ShortNamesProvider = &REST{} + _ rest.StorageVersionProvider = &REST{} ) +func (rs *REST) StorageVersion() runtime.GroupVersioner { + return rs.services.StorageVersion() +} + // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. func (rs *REST) ShortNames() []string { return []string{"svc"} @@ -337,6 +343,18 @@ func (rs *REST) healthCheckNodePortUpdate(oldService, service *api.Service, node func (rs *REST) Update(ctx context.Context, name string, objInfo rest.UpdatedObjectInfo, createValidation rest.ValidateObjectFunc, updateValidation rest.ValidateObjectUpdateFunc, forceAllowCreate bool, options *metav1.UpdateOptions) (runtime.Object, bool, error) { oldObj, err := rs.services.Get(ctx, name, &metav1.GetOptions{}) if err != nil { + // Support create on update, if forced to. + if forceAllowCreate { + obj, err := objInfo.UpdatedObject(ctx, nil) + if err != nil { + return nil, false, err + } + createdObj, err := rs.Create(ctx, obj, createValidation, &metav1.CreateOptions{DryRun: options.DryRun}) + if err != nil { + return nil, false, err + } + return createdObj, true, nil + } return nil, false, err } oldService := oldObj.(*api.Service) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/service/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/core/service/strategy.go index 71cdda7f1c5..d296a613116 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/service/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/service/strategy.go @@ -59,7 +59,9 @@ func (svcStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object // Validate validates a new service. func (svcStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { service := obj.(*api.Service) - return validation.ValidateService(service) + allErrs := validation.ValidateService(service) + allErrs = append(allErrs, validation.ValidateConditionalService(service, nil)...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -71,7 +73,9 @@ func (svcStrategy) AllowCreateOnUpdate() bool { } func (svcStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - return validation.ValidateServiceUpdate(obj.(*api.Service), old.(*api.Service)) + allErrs := validation.ValidateServiceUpdate(obj.(*api.Service), old.(*api.Service)) + allErrs = append(allErrs, validation.ValidateConditionalService(obj.(*api.Service), old.(*api.Service))...) + return allErrs } func (svcStrategy) AllowUnconditionalUpdate() bool { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/OWNERS index 1d5fd2603f2..d41c6a96bd1 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - mikedanese - liggitt diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/token.go b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/token.go index f1018b7eb0c..881b5f26e40 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/token.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/token.go @@ -58,8 +58,10 @@ var gvk = schema.GroupVersionKind{ } func (r *TokenREST) Create(ctx context.Context, name string, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { - if err := createValidation(obj); err != nil { - return nil, err + if createValidation != nil { + if err := createValidation(obj.DeepCopyObject()); err != nil { + return nil, err + } } out := obj.(*authenticationapi.TokenRequest) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/extensions/OWNERS old mode 100755 new mode 100644 index 56781122598..bd48884cc9e --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - hongchaodeng diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/BUILD index 175438fc64e..35f0f05f267 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/BUILD @@ -16,7 +16,7 @@ go_library( "//pkg/registry/apps/deployment/storage:go_default_library", "//pkg/registry/apps/replicaset/storage:go_default_library", "//pkg/registry/extensions/controller/storage:go_default_library", - "//pkg/registry/extensions/ingress/storage:go_default_library", + "//pkg/registry/networking/ingress/storage:go_default_library", "//pkg/registry/networking/networkpolicy/storage:go_default_library", "//pkg/registry/policy/podsecuritypolicy/storage:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/storage_extensions.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/storage_extensions.go index 2b21e502f07..0a1fa286dcb 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/storage_extensions.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/rest/storage_extensions.go @@ -28,7 +28,7 @@ import ( deploymentstore "k8s.io/kubernetes/pkg/registry/apps/deployment/storage" replicasetstore "k8s.io/kubernetes/pkg/registry/apps/replicaset/storage" expcontrollerstore "k8s.io/kubernetes/pkg/registry/extensions/controller/storage" - ingressstore "k8s.io/kubernetes/pkg/registry/extensions/ingress/storage" + ingressstore "k8s.io/kubernetes/pkg/registry/networking/ingress/storage" networkpolicystore "k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage" pspstore "k8s.io/kubernetes/pkg/registry/policy/podsecuritypolicy/storage" ) @@ -52,39 +52,53 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag // This is a dummy replication controller for scale subresource purposes. // TODO: figure out how to enable this only if needed as a part of scale subresource GA. - controllerStorage := expcontrollerstore.NewStorage(restOptionsGetter) - storage["replicationcontrollers"] = controllerStorage.ReplicationController - storage["replicationcontrollers/scale"] = controllerStorage.Scale + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicationcontrollers")) { + controllerStorage := expcontrollerstore.NewStorage(restOptionsGetter) + storage["replicationcontrollers"] = controllerStorage.ReplicationController + storage["replicationcontrollers/scale"] = controllerStorage.Scale + } // daemonsets - daemonSetStorage, daemonSetStatusStorage := daemonstore.NewREST(restOptionsGetter) - storage["daemonsets"] = daemonSetStorage.WithCategories(nil) - storage["daemonsets/status"] = daemonSetStatusStorage + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets")) { + daemonSetStorage, daemonSetStatusStorage := daemonstore.NewREST(restOptionsGetter) + storage["daemonsets"] = daemonSetStorage.WithCategories(nil) + storage["daemonsets/status"] = daemonSetStatusStorage + } //deployments - deploymentStorage := deploymentstore.NewStorage(restOptionsGetter) - storage["deployments"] = deploymentStorage.Deployment.WithCategories(nil) - storage["deployments/status"] = deploymentStorage.Status - storage["deployments/rollback"] = deploymentStorage.Rollback - storage["deployments/scale"] = deploymentStorage.Scale + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments")) { + deploymentStorage := deploymentstore.NewStorage(restOptionsGetter) + storage["deployments"] = deploymentStorage.Deployment.WithCategories(nil) + storage["deployments/status"] = deploymentStorage.Status + storage["deployments/rollback"] = deploymentStorage.Rollback + storage["deployments/scale"] = deploymentStorage.Scale + } // ingresses - ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter) - storage["ingresses"] = ingressStorage - storage["ingresses/status"] = ingressStatusStorage + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses")) { + ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter) + storage["ingresses"] = ingressStorage + storage["ingresses/status"] = ingressStatusStorage + } // podsecuritypolicy - podSecurityPolicyStorage := pspstore.NewREST(restOptionsGetter) - storage["podSecurityPolicies"] = podSecurityPolicyStorage + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies")) { + podSecurityPolicyStorage := pspstore.NewREST(restOptionsGetter) + storage["podSecurityPolicies"] = podSecurityPolicyStorage + } // replicasets - replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter) - storage["replicasets"] = replicaSetStorage.ReplicaSet.WithCategories(nil) - storage["replicasets/status"] = replicaSetStorage.Status - storage["replicasets/scale"] = replicaSetStorage.Scale + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets")) { + replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter) + storage["replicasets"] = replicaSetStorage.ReplicaSet.WithCategories(nil) + storage["replicasets/status"] = replicaSetStorage.Status + storage["replicasets/scale"] = replicaSetStorage.Scale + } // networkpolicies - networkExtensionsStorage := networkpolicystore.NewREST(restOptionsGetter) - storage["networkpolicies"] = networkExtensionsStorage + if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies")) { + networkExtensionsStorage := networkpolicystore.NewREST(restOptionsGetter) + storage["networkpolicies"] = networkExtensionsStorage + } return storage } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/BUILD similarity index 81% rename from vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/BUILD rename to vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/BUILD index 51441e648db..21dca0ec848 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/BUILD @@ -12,11 +12,11 @@ go_library( "doc.go", "strategy.go", ], - importpath = "k8s.io/kubernetes/pkg/registry/extensions/ingress", + importpath = "k8s.io/kubernetes/pkg/registry/networking/ingress", deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/apis/extensions:go_default_library", - "//pkg/apis/extensions/validation:go_default_library", + "//pkg/apis/networking:go_default_library", + "//pkg/apis/networking/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", @@ -30,7 +30,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/apis/extensions:go_default_library", + "//pkg/apis/networking:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", @@ -48,7 +48,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/registry/extensions/ingress/storage:all-srcs", + "//pkg/registry/networking/ingress/storage:all-srcs", ], tags = ["automanaged"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/doc.go similarity index 87% rename from vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/doc.go rename to vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/doc.go index b8c38ed3854..c89d1f09e4a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/doc.go @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package ingress // import "k8s.io/kubernetes/pkg/registry/extensions/ingress" +package ingress // import "k8s.io/kubernetes/pkg/registry/networking/ingress" diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/BUILD similarity index 89% rename from vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/BUILD rename to vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/BUILD index 9c27165f713..36786231d03 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/BUILD @@ -13,6 +13,7 @@ go_test( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/extensions:go_default_library", + "//pkg/apis/networking:go_default_library", "//pkg/registry/registrytest:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", @@ -28,13 +29,14 @@ go_test( go_library( name = "go_default_library", srcs = ["storage.go"], - importpath = "k8s.io/kubernetes/pkg/registry/extensions/ingress/storage", + importpath = "k8s.io/kubernetes/pkg/registry/networking/ingress/storage", deps = [ "//pkg/apis/extensions:go_default_library", + "//pkg/apis/networking:go_default_library", "//pkg/printers:go_default_library", "//pkg/printers/internalversion:go_default_library", "//pkg/printers/storage:go_default_library", - "//pkg/registry/extensions/ingress:go_default_library", + "//pkg/registry/networking/ingress:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/storage.go similarity index 88% rename from vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go rename to vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/storage.go index da7da8574ab..bf19d3d0f0a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/storage/storage.go @@ -25,13 +25,14 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/printers" printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" printerstorage "k8s.io/kubernetes/pkg/printers/storage" - "k8s.io/kubernetes/pkg/registry/extensions/ingress" + "k8s.io/kubernetes/pkg/registry/networking/ingress" ) -// rest implements a RESTStorage for replication controllers +// REST implements a RESTStorage for replication controllers type REST struct { *genericregistry.Store } @@ -39,8 +40,8 @@ type REST struct { // NewREST returns a RESTStorage object that will work against replication controllers. func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { store := &genericregistry.Store{ - NewFunc: func() runtime.Object { return &extensions.Ingress{} }, - NewListFunc: func() runtime.Object { return &extensions.IngressList{} }, + NewFunc: func() runtime.Object { return &networking.Ingress{} }, + NewListFunc: func() runtime.Object { return &networking.IngressList{} }, DefaultQualifiedResource: extensions.Resource("ingresses"), CreateStrategy: ingress.Strategy, @@ -72,8 +73,9 @@ type StatusREST struct { store *genericregistry.Store } +// New creates an instance of the StatusREST object func (r *StatusREST) New() runtime.Object { - return &extensions.Ingress{} + return &networking.Ingress{} } // Get retrieves the object from the storage. It is required to support Patch. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/strategy.go similarity index 82% rename from vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/strategy.go rename to vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/strategy.go index 1dc2efbd47e..a8c3696ce89 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/ingress/strategy.go @@ -24,8 +24,8 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/storage/names" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/apis/extensions/validation" + "k8s.io/kubernetes/pkg/apis/networking" + "k8s.io/kubernetes/pkg/apis/networking/validation" ) // ingressStrategy implements verification logic for Replication Ingresss. @@ -44,17 +44,17 @@ func (ingressStrategy) NamespaceScoped() bool { // PrepareForCreate clears the status of an Ingress before creation. func (ingressStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { - ingress := obj.(*extensions.Ingress) + ingress := obj.(*networking.Ingress) // create cannot set status - ingress.Status = extensions.IngressStatus{} + ingress.Status = networking.IngressStatus{} ingress.Generation = 1 } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. func (ingressStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { - newIngress := obj.(*extensions.Ingress) - oldIngress := old.(*extensions.Ingress) + newIngress := obj.(*networking.Ingress) + oldIngress := old.(*networking.Ingress) // Update is not allowed to set status newIngress.Status = oldIngress.Status @@ -69,7 +69,7 @@ func (ingressStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Ob // Validate validates a new Ingress. func (ingressStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { - ingress := obj.(*extensions.Ingress) + ingress := obj.(*networking.Ingress) err := validation.ValidateIngress(ingress) return err } @@ -85,8 +85,8 @@ func (ingressStrategy) AllowCreateOnUpdate() bool { // ValidateUpdate is the default update validation for an end user. func (ingressStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - validationErrorList := validation.ValidateIngress(obj.(*extensions.Ingress)) - updateErrorList := validation.ValidateIngressUpdate(obj.(*extensions.Ingress), old.(*extensions.Ingress)) + validationErrorList := validation.ValidateIngress(obj.(*networking.Ingress)) + updateErrorList := validation.ValidateIngressUpdate(obj.(*networking.Ingress), old.(*networking.Ingress)) return append(validationErrorList, updateErrorList...) } @@ -99,17 +99,18 @@ type ingressStatusStrategy struct { ingressStrategy } +// StatusStrategy implements logic used to validate and prepare for updates of the status subresource var StatusStrategy = ingressStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status func (ingressStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { - newIngress := obj.(*extensions.Ingress) - oldIngress := old.(*extensions.Ingress) + newIngress := obj.(*networking.Ingress) + oldIngress := old.(*networking.Ingress) // status changes are not allowed to update spec newIngress.Spec = oldIngress.Spec } // ValidateUpdate is the default update validation for an end user updating status func (ingressStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - return validation.ValidateIngressStatusUpdate(obj.(*extensions.Ingress), old.(*extensions.Ingress)) + return validation.ValidateIngressStatusUpdate(obj.(*networking.Ingress), old.(*networking.Ingress)) } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/strategy.go index 8dc3ea7edea..521c37585b8 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/strategy.go @@ -64,7 +64,9 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt // Validate validates a new NetworkPolicy. func (networkPolicyStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { networkPolicy := obj.(*networking.NetworkPolicy) - return validation.ValidateNetworkPolicy(networkPolicy) + allErrs := validation.ValidateNetworkPolicy(networkPolicy) + allErrs = append(allErrs, validation.ValidateConditionalNetworkPolicy(networkPolicy, nil)...) + return allErrs } // Canonicalize normalizes the object after validation. @@ -79,6 +81,7 @@ func (networkPolicyStrategy) AllowCreateOnUpdate() bool { func (networkPolicyStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateNetworkPolicy(obj.(*networking.NetworkPolicy)) updateErrorList := validation.ValidateNetworkPolicyUpdate(obj.(*networking.NetworkPolicy), old.(*networking.NetworkPolicy)) + updateErrorList = append(updateErrorList, validation.ValidateConditionalNetworkPolicy(obj.(*networking.NetworkPolicy), old.(*networking.NetworkPolicy))...) return append(validationErrorList, updateErrorList...) } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/BUILD index 22c073bd164..81632678d72 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/BUILD @@ -12,8 +12,10 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/networking:go_default_library", + "//pkg/registry/networking/ingress/storage:go_default_library", "//pkg/registry/networking/networkpolicy/storage:go_default_library", "//staging/src/k8s.io/api/networking/v1:go_default_library", + "//staging/src/k8s.io/api/networking/v1beta1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/storage_settings.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/storage_settings.go index 40cf8c525ec..fc892bf66ec 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/storage_settings.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/rest/storage_settings.go @@ -18,12 +18,14 @@ package rest import ( networkingapiv1 "k8s.io/api/networking/v1" + networkingapiv1beta1 "k8s.io/api/networking/v1beta1" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" genericapiserver "k8s.io/apiserver/pkg/server" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/networking" + ingressstore "k8s.io/kubernetes/pkg/registry/networking/ingress/storage" networkpolicystore "k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage" ) @@ -35,13 +37,17 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // TODO refactor the plumbing to provide the information in the APIGroupInfo if apiResourceConfigSource.VersionEnabled(networkingapiv1.SchemeGroupVersion) { - apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1.SchemeGroupVersion.Version] = p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter) + apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) + } + + if apiResourceConfigSource.VersionEnabled(networkingapiv1beta1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) } return apiGroupInfo, true } -func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { +func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { storage := map[string]rest.Storage{} // networkpolicies networkPolicyStorage := networkpolicystore.NewREST(restOptionsGetter) @@ -50,6 +56,15 @@ func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstora return storage } +func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // ingresses + ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter) + storage["ingresses"] = ingressStorage + storage["ingresses/status"] = ingressStatusStorage + return storage +} + func (p RESTStorageProvider) GroupName() string { return networking.GroupName } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/node/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/node/rest/BUILD new file mode 100644 index 00000000000..79e86b4f8c9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/rest/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["runtime_class.go"], + importpath = "k8s.io/kubernetes/pkg/registry/node/rest", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/node:go_default_library", + "//pkg/registry/node/runtimeclass/storage:go_default_library", + "//staging/src/k8s.io/api/node/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/node/v1beta1:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/node/rest/runtime_class.go b/vendor/k8s.io/kubernetes/pkg/registry/node/rest/runtime_class.go new file mode 100644 index 00000000000..5d242262530 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/rest/runtime_class.go @@ -0,0 +1,68 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + nodev1alpha1 "k8s.io/api/node/v1alpha1" + nodev1beta1 "k8s.io/api/node/v1beta1" + "k8s.io/apiserver/pkg/registry/generic" + "k8s.io/apiserver/pkg/registry/rest" + genericapiserver "k8s.io/apiserver/pkg/server" + serverstorage "k8s.io/apiserver/pkg/server/storage" + "k8s.io/kubernetes/pkg/api/legacyscheme" + nodeinternal "k8s.io/kubernetes/pkg/apis/node" + runtimeclassstorage "k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage" +) + +// RESTStorageProvider is a REST storage provider for node.k8s.io +type RESTStorageProvider struct{} + +// NewRESTStorage returns a RESTStorageProvider +func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) { + apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(nodeinternal.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) + + if apiResourceConfigSource.VersionEnabled(nodev1alpha1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[nodev1alpha1.SchemeGroupVersion.Version] = p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter) + } + + if apiResourceConfigSource.VersionEnabled(nodev1beta1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[nodev1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) + } + + return apiGroupInfo, true +} + +func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + s := runtimeclassstorage.NewREST(restOptionsGetter) + storage["runtimeclasses"] = s + + return storage +} + +func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + s := runtimeclassstorage.NewREST(restOptionsGetter) + storage["runtimeclasses"] = s + + return storage +} + +// GroupName is the group name for the storage provider +func (p RESTStorageProvider) GroupName() string { + return nodeinternal.GroupName +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/BUILD new file mode 100644 index 00000000000..865b2d68ae0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/BUILD @@ -0,0 +1,37 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "strategy.go", + ], + importpath = "k8s.io/kubernetes/pkg/registry/node/runtimeclass", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/node:go_default_library", + "//pkg/apis/node/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/registry/node/runtimeclass/storage:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/doc.go similarity index 76% rename from vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/doc.go rename to vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/doc.go index 7f4cd229b80..3540f2014b0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors. +Copyright 2019 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package initializerconfiguration // import "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration" +package runtimeclass // import "k8s.io/kubernetes/pkg/registry/node/runtimeclass" diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/BUILD similarity index 60% rename from vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/BUILD rename to vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/BUILD index 9dba2e9b3a8..0cfde7370b0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/BUILD @@ -1,17 +1,13 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = ["storage.go"], - importpath = "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage", + importpath = "k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage", + visibility = ["//visibility:public"], deps = [ - "//pkg/apis/admissionregistration:go_default_library", - "//pkg/registry/admissionregistration/initializerconfiguration:go_default_library", + "//pkg/apis/node:go_default_library", + "//pkg/registry/node/runtimeclass:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", @@ -29,4 +25,5 @@ filegroup( name = "all-srcs", srcs = [":package-srcs"], tags = ["automanaged"], + visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/storage.go similarity index 56% rename from vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go rename to vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/storage.go index a8846f36edc..75951c5367b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/storage/storage.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors. +Copyright 2019 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,28 +20,28 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" - "k8s.io/kubernetes/pkg/apis/admissionregistration" - "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration" + "k8s.io/kubernetes/pkg/apis/node" + "k8s.io/kubernetes/pkg/registry/node/runtimeclass" ) -// rest implements a RESTStorage for pod disruption budgets against etcd +// REST implements a RESTStorage for RuntimeClass against etcd type REST struct { *genericregistry.Store } -// NewREST returns a RESTStorage object that will work against pod disruption budgets. +// NewREST returns a RESTStorage object that will work against runtime classes. func NewREST(optsGetter generic.RESTOptionsGetter) *REST { store := &genericregistry.Store{ - NewFunc: func() runtime.Object { return &admissionregistration.InitializerConfiguration{} }, - NewListFunc: func() runtime.Object { return &admissionregistration.InitializerConfigurationList{} }, + NewFunc: func() runtime.Object { return &node.RuntimeClass{} }, + NewListFunc: func() runtime.Object { return &node.RuntimeClassList{} }, ObjectNameFunc: func(obj runtime.Object) (string, error) { - return obj.(*admissionregistration.InitializerConfiguration).Name, nil + return obj.(*node.RuntimeClass).Name, nil }, - DefaultQualifiedResource: admissionregistration.Resource("initializerconfigurations"), + DefaultQualifiedResource: node.Resource("runtimeclasses"), - CreateStrategy: initializerconfiguration.Strategy, - UpdateStrategy: initializerconfiguration.Strategy, - DeleteStrategy: initializerconfiguration.Strategy, + CreateStrategy: runtimeclass.Strategy, + UpdateStrategy: runtimeclass.Strategy, + DeleteStrategy: runtimeclass.Strategy, } options := &generic.StoreOptions{RESTOptions: optsGetter} if err := store.CompleteWithOptions(options); err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/strategy.go new file mode 100644 index 00000000000..b68150964df --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/node/runtimeclass/strategy.go @@ -0,0 +1,95 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtimeclass + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/apiserver/pkg/storage/names" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/node" + "k8s.io/kubernetes/pkg/apis/node/validation" +) + +// strategy implements verification logic for RuntimeClass. +type strategy struct { + runtime.ObjectTyper + names.NameGenerator +} + +// Strategy is the default logic that applies when creating and updating RuntimeClass objects. +var Strategy = strategy{legacyscheme.Scheme, names.SimpleNameGenerator} + +// Strategy should implement rest.RESTCreateStrategy +var _ rest.RESTCreateStrategy = Strategy + +// Strategy should implement rest.RESTUpdateStrategy +var _ rest.RESTUpdateStrategy = Strategy + +// NamespaceScoped is false for RuntimeClasses +func (strategy) NamespaceScoped() bool { + return false +} + +// AllowCreateOnUpdate is true for RuntimeClasses. +func (strategy) AllowCreateOnUpdate() bool { + return true +} + +// PrepareForCreate clears fields that are not allowed to be set by end users +// on creation. +func (strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { + _ = obj.(*node.RuntimeClass) +} + +// PrepareForUpdate clears fields that are not allowed to be set by end users on update. +func (strategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { + newRuntimeClass := obj.(*node.RuntimeClass) + oldRuntimeClass := old.(*node.RuntimeClass) + + _, _ = newRuntimeClass, oldRuntimeClass +} + +// Validate validates a new RuntimeClass. Validation must check for a correct signature. +func (strategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { + runtimeClass := obj.(*node.RuntimeClass) + return validation.ValidateRuntimeClass(runtimeClass) +} + +// Canonicalize normalizes the object after validation. +func (strategy) Canonicalize(obj runtime.Object) { + _ = obj.(*node.RuntimeClass) +} + +// ValidateUpdate is the default update validation for an end user. +func (strategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + newObj := obj.(*node.RuntimeClass) + errorList := validation.ValidateRuntimeClass(newObj) + return append(errorList, validation.ValidateRuntimeClassUpdate(newObj, old.(*node.RuntimeClass))...) +} + +// If AllowUnconditionalUpdate() is true and the object specified by +// the user does not have a resource version, then generic Update() +// populates it with the latest version. Else, it checks that the +// version specified by the user matches the version of latest etcd +// object. +func (strategy) AllowUnconditionalUpdate() bool { + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/policy/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/policy/OWNERS old mode 100755 new mode 100644 index 787630abd2f..f558c884f12 --- a/vendor/k8s.io/kubernetes/pkg/registry/policy/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/policy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-policy-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/strategy.go index 36e940b6acb..0ee30f3b9d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/strategy.go @@ -98,6 +98,7 @@ type podDisruptionBudgetStatusStrategy struct { podDisruptionBudgetStrategy } +// StatusStrategy is the default logic invoked when updating object status. var StatusStrategy = podDisruptionBudgetStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status diff --git a/vendor/k8s.io/kubernetes/pkg/registry/policy/podsecuritypolicy/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/policy/podsecuritypolicy/strategy.go index c9940fe2d83..e09d76239e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/policy/podsecuritypolicy/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/policy/podsecuritypolicy/strategy.go @@ -58,15 +58,14 @@ func (strategy) AllowUnconditionalUpdate() bool { func (strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { psp := obj.(*policy.PodSecurityPolicy) - psputil.DropDisabledAlphaFields(&psp.Spec) + psputil.DropDisabledFields(&psp.Spec, nil) } func (strategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { newPsp := obj.(*policy.PodSecurityPolicy) oldPsp := old.(*policy.PodSecurityPolicy) - psputil.DropDisabledAlphaFields(&newPsp.Spec) - psputil.DropDisabledAlphaFields(&oldPsp.Spec) + psputil.DropDisabledFields(&newPsp.Spec, &oldPsp.Spec) } func (strategy) Canonicalize(obj runtime.Object) { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/rbac/OWNERS old mode 100755 new mode 100644 index cd0d70a0f8f..7b3130fdcbc --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/policybased/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/policybased/storage.go index 4505d9aba66..e3a9dd6ff2b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/policybased/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/policybased/storage.go @@ -50,6 +50,16 @@ func (r *Storage) NamespaceScoped() bool { return false } +func (r *Storage) StorageVersion() runtime.GroupVersioner { + svp, ok := r.StandardStorage.(rest.StorageVersionProvider) + if !ok { + return nil + } + return svp.StorageVersion() +} + +var _ rest.StorageVersionProvider = &Storage{} + var fullAuthority = []rbac.PolicyRule{ rbac.NewRule("*").Groups("*").Resources("*").RuleOrDie(), rbac.NewRule("*").URLs("*").RuleOrDie(), diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/strategy.go index eb547579359..10a3f850b60 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/strategy.go @@ -44,7 +44,7 @@ var _ rest.RESTCreateStrategy = Strategy // Strategy should implement rest.RESTUpdateStrategy var _ rest.RESTUpdateStrategy = Strategy -// NamespaceScoped is true for ClusterRoles. +// NamespaceScoped is false for ClusterRoles. func (strategy) NamespaceScoped() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/policybased/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/policybased/storage.go index 2267394aaa0..6a4b2c8f2e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/policybased/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/policybased/storage.go @@ -51,6 +51,16 @@ func (r *Storage) NamespaceScoped() bool { return false } +func (r *Storage) StorageVersion() runtime.GroupVersioner { + svp, ok := r.StandardStorage.(rest.StorageVersionProvider) + if !ok { + return nil + } + return svp.StorageVersion() +} + +var _ rest.StorageVersionProvider = &Storage{} + func (s *Storage) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj, createValidation, options) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/strategy.go index e7be7a634ab..3e3b44c93f9 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/strategy.go @@ -44,7 +44,7 @@ var _ rest.RESTCreateStrategy = Strategy // Strategy should implement rest.RESTUpdateStrategy var _ rest.RESTUpdateStrategy = Strategy -// NamespaceScoped is true for ClusterRoleBindings. +// NamespaceScoped is false for ClusterRoleBindings. func (strategy) NamespaceScoped() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/reconciliation/reconcile_role.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/reconciliation/reconcile_role.go index 8197b9f7596..e46848dd529 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/reconciliation/reconcile_role.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/reconciliation/reconcile_role.go @@ -194,7 +194,10 @@ func computeReconciledRole(existing, expected RuleOwner, removeExtraPermissions } // Compute extra and missing rules - _, result.ExtraRules = validation.Covers(expected.GetRules(), existing.GetRules()) + // Don't compute extra permissions if expected and existing roles are both aggregated + if expected.GetAggregationRule() == nil || existing.GetAggregationRule() == nil { + _, result.ExtraRules = validation.Covers(expected.GetRules(), existing.GetRules()) + } _, result.MissingRules = validation.Covers(existing.GetRules(), expected.GetRules()) switch { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rest/storage_rbac.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rest/storage_rbac.go index 9ac87ec7503..3db51b13894 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rest/storage_rbac.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rest/storage_rbac.go @@ -110,11 +110,12 @@ func (p RESTStorageProvider) storage(version schema.GroupVersion, apiResourceCon func (p RESTStorageProvider) PostStartHook() (string, genericapiserver.PostStartHookFunc, error) { policy := &PolicyData{ - ClusterRoles: append(bootstrappolicy.ClusterRoles(), bootstrappolicy.ControllerRoles()...), - ClusterRoleBindings: append(bootstrappolicy.ClusterRoleBindings(), bootstrappolicy.ControllerRoleBindings()...), - Roles: bootstrappolicy.NamespaceRoles(), - RoleBindings: bootstrappolicy.NamespaceRoleBindings(), - ClusterRolesToAggregate: bootstrappolicy.ClusterRolesToAggregate(), + ClusterRoles: append(bootstrappolicy.ClusterRoles(), bootstrappolicy.ControllerRoles()...), + ClusterRoleBindings: append(bootstrappolicy.ClusterRoleBindings(), bootstrappolicy.ControllerRoleBindings()...), + Roles: bootstrappolicy.NamespaceRoles(), + RoleBindings: bootstrappolicy.NamespaceRoleBindings(), + ClusterRolesToAggregate: bootstrappolicy.ClusterRolesToAggregate(), + ClusterRoleBindingsToSplit: bootstrappolicy.ClusterRoleBindingsToSplit(), } return PostStartHookName, policy.EnsureRBACPolicy(), nil } @@ -126,6 +127,8 @@ type PolicyData struct { RoleBindings map[string][]rbacapiv1.RoleBinding // ClusterRolesToAggregate maps from previous clusterrole name to the new clusterrole name ClusterRolesToAggregate map[string]string + // ClusterRoleBindingsToSplit maps from previous ClusterRoleBinding Name to a template for the new ClusterRoleBinding + ClusterRoleBindingsToSplit map[string]rbacapiv1.ClusterRoleBinding } func (p *PolicyData) EnsureRBACPolicy() genericapiserver.PostStartHookFunc { @@ -162,6 +165,11 @@ func (p *PolicyData) EnsureRBACPolicy() genericapiserver.PostStartHookFunc { return false, nil } + if err := primeSplitClusterRoleBindings(p.ClusterRoleBindingsToSplit, clientset); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to prime split ClusterRoleBindings: %v", err)) + return false, nil + } + // ensure bootstrap roles are created or reconciled for _, clusterRole := range p.ClusterRoles { opts := reconciliation.ReconcileRoleOptions{ @@ -330,3 +338,40 @@ func primeAggregatedClusterRoles(clusterRolesToAggregate map[string]string, clus return nil } + +// primeSplitClusterRoleBindings ensures the existence of target ClusterRoleBindings +// by copying Subjects, Annotations, and Labels from the specified source +// ClusterRoleBinding, if present. +func primeSplitClusterRoleBindings(clusterRoleBindingToSplit map[string]rbacapiv1.ClusterRoleBinding, clusterRoleBindingClient rbacv1client.ClusterRoleBindingsGetter) error { + for existingBindingName, clusterRoleBindingToCreate := range clusterRoleBindingToSplit { + // If source ClusterRoleBinding does not exist, do nothing. + existingRoleBinding, err := clusterRoleBindingClient.ClusterRoleBindings().Get(existingBindingName, metav1.GetOptions{}) + if apierrors.IsNotFound(err) { + continue + } + if err != nil { + return err + } + + // If the target ClusterRoleBinding already exists, do nothing. + _, err = clusterRoleBindingClient.ClusterRoleBindings().Get(clusterRoleBindingToCreate.Name, metav1.GetOptions{}) + if err == nil { + continue + } + if !apierrors.IsNotFound(err) { + return err + } + + // If the source exists, but the target does not, + // copy the subjects, labels, and annotations from the former to create the latter. + klog.V(1).Infof("copying subjects, labels, and annotations from ClusterRoleBinding %q to template %q", existingBindingName, clusterRoleBindingToCreate.Name) + newCRB := clusterRoleBindingToCreate.DeepCopy() + newCRB.Subjects = existingRoleBinding.Subjects + newCRB.Labels = existingRoleBinding.Labels + newCRB.Annotations = existingRoleBinding.Annotations + if _, err := clusterRoleBindingClient.ClusterRoleBindings().Create(newCRB); err != nil && !apierrors.IsAlreadyExists(err) { + return err + } + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/policybased/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/policybased/storage.go index 25a622fe07a..34281be9754 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/policybased/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/policybased/storage.go @@ -49,6 +49,16 @@ func (r *Storage) NamespaceScoped() bool { return true } +func (r *Storage) StorageVersion() runtime.GroupVersioner { + svp, ok := r.StandardStorage.(rest.StorageVersionProvider) + if !ok { + return nil + } + return svp.StorageVersion() +} + +var _ rest.StorageVersionProvider = &Storage{} + func (s *Storage) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) || rbacregistry.RoleEscalationAuthorized(ctx, s.authorizer) { return s.StandardStorage.Create(ctx, obj, createValidation, options) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/policybased/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/policybased/storage.go index 2a0603e740f..d73a1e1f93a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/policybased/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/policybased/storage.go @@ -52,6 +52,16 @@ func (r *Storage) NamespaceScoped() bool { return true } +func (r *Storage) StorageVersion() runtime.GroupVersioner { + svp, ok := r.StandardStorage.(rest.StorageVersionProvider) + if !ok { + return nil + } + return svp.StorageVersion() +} + +var _ rest.StorageVersionProvider = &Storage{} + func (s *Storage) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj, createValidation, options) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/priorityclass/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/priorityclass/strategy.go index 0a5b87a55ac..3a763d6bf24 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/priorityclass/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/priorityclass/strategy.go @@ -36,7 +36,7 @@ type priorityClassStrategy struct { // Strategy is the default logic that applies when creating and updating PriorityClass objects. var Strategy = priorityClassStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} -// NamespaceScoped returns true because all PriorityClasses are global. +// NamespaceScoped returns false because all PriorityClasses are global. func (priorityClassStrategy) NamespaceScoped() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/BUILD index 25f8f79d437..6f1b053eeea 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/BUILD @@ -12,6 +12,7 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/scheduling:go_default_library", + "//pkg/apis/scheduling/v1:go_default_library", "//pkg/apis/scheduling/v1alpha1:go_default_library", "//pkg/apis/scheduling/v1beta1:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/storage_scheduling.go b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/storage_scheduling.go index 2b95b3e9656..17c19ce90ca 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/storage_scheduling.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/scheduling/rest/storage_scheduling.go @@ -32,6 +32,7 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/scheduling" + schedulingapiv1 "k8s.io/kubernetes/pkg/apis/scheduling/v1" schedulingapiv1beta1 "k8s.io/kubernetes/pkg/apis/scheduling/v1beta1" schedulingclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion" priorityclassstore "k8s.io/kubernetes/pkg/registry/scheduling/priorityclass/storage" @@ -47,12 +48,33 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(scheduling.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) if apiResourceConfigSource.VersionEnabled(schedulingapiv1beta1.SchemeGroupVersion) { - apiGroupInfo.VersionedResourcesStorageMap[schedulingapiv1beta1.SchemeGroupVersion.Version] = p.storage(apiResourceConfigSource, restOptionsGetter) + apiGroupInfo.VersionedResourcesStorageMap[schedulingapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) + } + if apiResourceConfigSource.VersionEnabled(schedulingapiv1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[schedulingapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) } return apiGroupInfo, true } -func (p RESTStorageProvider) storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { +func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // priorityclasses + priorityClassStorage := priorityclassstore.NewREST(restOptionsGetter) + storage["priorityclasses"] = priorityClassStorage + + return storage +} + +func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // priorityclasses + priorityClassStorage := priorityclassstore.NewREST(restOptionsGetter) + storage["priorityclasses"] = priorityClassStorage + + return storage +} + +func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { storage := map[string]rest.Storage{} // priorityclasses priorityClassStorage := priorityclassstore.NewREST(restOptionsGetter) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/OWNERS b/vendor/k8s.io/kubernetes/pkg/registry/storage/OWNERS old mode 100755 new mode 100644 index f65afe9ed9a..8af01ebfbdd --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - hongchaodeng diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/BUILD new file mode 100644 index 00000000000..41953486c85 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/BUILD @@ -0,0 +1,48 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "strategy.go", + ], + importpath = "k8s.io/kubernetes/pkg/registry/storage/csidriver", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/apis/storage/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/registry/storage/csidriver/storage:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["strategy_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/storage:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/doc.go new file mode 100644 index 00000000000..edb13124fc9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package csidriver provides Registry interface and its REST +// implementation for storing csidriver api objects. +package csidriver diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD new file mode 100644 index 00000000000..bdbddb61343 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD @@ -0,0 +1,48 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["storage.go"], + importpath = "k8s.io/kubernetes/pkg/registry/storage/csidriver/storage", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/storage:go_default_library", + "//pkg/registry/storage/csidriver:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["storage_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/api/testapi:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage.go new file mode 100644 index 00000000000..c22747d6f2f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage.go @@ -0,0 +1,57 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/registry/generic" + genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" + storageapi "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/registry/storage/csidriver" +) + +// CSIDriverStorage includes storage for CSIDrivers and all subresources +type CSIDriverStorage struct { + CSIDriver *REST +} + +// REST object that will work for CSIDrivers +type REST struct { + *genericregistry.Store +} + +// NewStorage returns a RESTStorage object that will work against CSIDrivers +func NewStorage(optsGetter generic.RESTOptionsGetter) *CSIDriverStorage { + store := &genericregistry.Store{ + NewFunc: func() runtime.Object { return &storageapi.CSIDriver{} }, + NewListFunc: func() runtime.Object { return &storageapi.CSIDriverList{} }, + DefaultQualifiedResource: storageapi.Resource("csidrivers"), + + CreateStrategy: csidriver.Strategy, + UpdateStrategy: csidriver.Strategy, + DeleteStrategy: csidriver.Strategy, + ReturnDeletedObject: true, + } + options := &generic.StoreOptions{RESTOptions: optsGetter} + if err := store.CompleteWithOptions(options); err != nil { + panic(err) // TODO: Propagate error up + } + + return &CSIDriverStorage{ + CSIDriver: &REST{store}, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/strategy.go new file mode 100644 index 00000000000..1f534b2e764 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/strategy.go @@ -0,0 +1,78 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package csidriver + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/storage/names" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/apis/storage/validation" +) + +// csiDriverStrategy implements behavior for CSIDriver objects +type csiDriverStrategy struct { + runtime.ObjectTyper + names.NameGenerator +} + +// Strategy is the default logic that applies when creating and updating +// CSIDriver objects via the REST API. +var Strategy = csiDriverStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} + +func (csiDriverStrategy) NamespaceScoped() bool { + return false +} + +// ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation. +func (csiDriverStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { +} + +func (csiDriverStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { + csiDriver := obj.(*storage.CSIDriver) + + errs := validation.ValidateCSIDriver(csiDriver) + errs = append(errs, validation.ValidateCSIDriver(csiDriver)...) + + return errs +} + +// Canonicalize normalizes the object after validation. +func (csiDriverStrategy) Canonicalize(obj runtime.Object) { +} + +func (csiDriverStrategy) AllowCreateOnUpdate() bool { + return false +} + +// PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a CSIDriver +func (csiDriverStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { +} + +func (csiDriverStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + newCSIDriverObj := obj.(*storage.CSIDriver) + oldCSIDriverObj := old.(*storage.CSIDriver) + errorList := validation.ValidateCSIDriver(newCSIDriverObj) + return append(errorList, validation.ValidateCSIDriverUpdate(newCSIDriverObj, oldCSIDriverObj)...) +} + +func (csiDriverStrategy) AllowUnconditionalUpdate() bool { + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/BUILD new file mode 100644 index 00000000000..fdf1f063d09 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/BUILD @@ -0,0 +1,48 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "strategy.go", + ], + importpath = "k8s.io/kubernetes/pkg/registry/storage/csinode", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/apis/storage/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/registry/storage/csinode/storage:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["strategy_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/storage:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/doc.go new file mode 100644 index 00000000000..cfbc7bc3a9b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package csinode provides Registry interface and its REST +// implementation for storing csinode api objects. +package csinode diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD new file mode 100644 index 00000000000..a3daa50f0a2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD @@ -0,0 +1,48 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["storage.go"], + importpath = "k8s.io/kubernetes/pkg/registry/storage/csinode/storage", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/storage:go_default_library", + "//pkg/registry/storage/csinode:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["storage_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/api/testapi:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", + ], +) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage.go new file mode 100644 index 00000000000..ecdcb5a44b6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage.go @@ -0,0 +1,57 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/registry/generic" + genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" + storageapi "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/registry/storage/csinode" +) + +// CSINodeStorage includes storage for CSINodes and all subresources +type CSINodeStorage struct { + CSINode *REST +} + +// REST object that will work for CSINodes +type REST struct { + *genericregistry.Store +} + +// NewStorage returns a RESTStorage object that will work against CSINodes +func NewStorage(optsGetter generic.RESTOptionsGetter) *CSINodeStorage { + store := &genericregistry.Store{ + NewFunc: func() runtime.Object { return &storageapi.CSINode{} }, + NewListFunc: func() runtime.Object { return &storageapi.CSINodeList{} }, + DefaultQualifiedResource: storageapi.Resource("csinodes"), + + CreateStrategy: csinode.Strategy, + UpdateStrategy: csinode.Strategy, + DeleteStrategy: csinode.Strategy, + ReturnDeletedObject: true, + } + options := &generic.StoreOptions{RESTOptions: optsGetter} + if err := store.CompleteWithOptions(options); err != nil { + panic(err) // TODO: Propagate error up + } + + return &CSINodeStorage{ + CSINode: &REST{store}, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/strategy.go new file mode 100644 index 00000000000..f20e6e57b0e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/strategy.go @@ -0,0 +1,78 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package csinode + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/storage/names" + "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/apis/storage/validation" +) + +// csiNodeStrategy implements behavior for CSINode objects +type csiNodeStrategy struct { + runtime.ObjectTyper + names.NameGenerator +} + +// Strategy is the default logic that applies when creating and updating +// CSINode objects via the REST API. +var Strategy = csiNodeStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} + +func (csiNodeStrategy) NamespaceScoped() bool { + return false +} + +// ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation. +func (csiNodeStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { +} + +func (csiNodeStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { + csiNode := obj.(*storage.CSINode) + + errs := validation.ValidateCSINode(csiNode) + errs = append(errs, validation.ValidateCSINode(csiNode)...) + + return errs +} + +// Canonicalize normalizes the object after validation. +func (csiNodeStrategy) Canonicalize(obj runtime.Object) { +} + +func (csiNodeStrategy) AllowCreateOnUpdate() bool { + return false +} + +// PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a CSINode +func (csiNodeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { +} + +func (csiNodeStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + newCSINodeObj := obj.(*storage.CSINode) + oldCSINodeObj := old.(*storage.CSINode) + errorList := validation.ValidateCSINode(newCSINodeObj) + return append(errorList, validation.ValidateCSINodeUpdate(newCSINodeObj, oldCSINodeObj)...) +} + +func (csiNodeStrategy) AllowUnconditionalUpdate() bool { + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/BUILD index 60121512dab..8c773060cf3 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/BUILD @@ -12,6 +12,9 @@ go_library( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/storage:go_default_library", + "//pkg/features:go_default_library", + "//pkg/registry/storage/csidriver/storage:go_default_library", + "//pkg/registry/storage/csinode/storage:go_default_library", "//pkg/registry/storage/storageclass/storage:go_default_library", "//pkg/registry/storage/volumeattachment/storage:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", @@ -21,6 +24,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/storage_storage.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/storage_storage.go index 1abde7a7d07..0be0f88e5d4 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/storage_storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/rest/storage_storage.go @@ -23,8 +23,12 @@ import ( "k8s.io/apiserver/pkg/registry/rest" genericapiserver "k8s.io/apiserver/pkg/server" serverstorage "k8s.io/apiserver/pkg/server/storage" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/legacyscheme" storageapi "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/features" + csidriverstore "k8s.io/kubernetes/pkg/registry/storage/csidriver/storage" + csinodestore "k8s.io/kubernetes/pkg/registry/storage/csinode/storage" storageclassstore "k8s.io/kubernetes/pkg/registry/storage/storageclass/storage" volumeattachmentstore "k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage" ) @@ -66,6 +70,18 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag volumeAttachmentStorage := volumeattachmentstore.NewStorage(restOptionsGetter) storage["volumeattachments"] = volumeAttachmentStorage.VolumeAttachment + // register csinodes if CSINodeInfo feature gate is enabled + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + csiNodeStorage := csinodestore.NewStorage(restOptionsGetter) + storage["csinodes"] = csiNodeStorage.CSINode + } + + // register csidrivers if CSIDriverRegistry feature gate is enabled + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + csiDriverStorage := csidriverstore.NewStorage(restOptionsGetter) + storage["csidrivers"] = csiDriverStorage.CSIDriver + } + return storage } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/BUILD index 31ab232a746..6dc98c39d42 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/BUILD @@ -18,11 +18,9 @@ go_library( "//pkg/apis/storage:go_default_library", "//pkg/apis/storage/util:go_default_library", "//pkg/apis/storage/validation:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/strategy.go index b570d39e239..58744efeb43 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/strategy.go @@ -22,12 +22,10 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/storage/names" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/storage" storageutil "k8s.io/kubernetes/pkg/apis/storage/util" "k8s.io/kubernetes/pkg/apis/storage/validation" - "k8s.io/kubernetes/pkg/features" ) // storageClassStrategy implements behavior for StorageClass objects @@ -48,11 +46,7 @@ func (storageClassStrategy) NamespaceScoped() bool { func (storageClassStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { class := obj.(*storage.StorageClass) - if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) { - class.AllowVolumeExpansion = nil - } - - storageutil.DropDisabledAlphaFields(class) + storageutil.DropDisabledFields(class, nil) } func (storageClassStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { @@ -73,12 +67,7 @@ func (storageClassStrategy) PrepareForUpdate(ctx context.Context, obj, old runti newClass := obj.(*storage.StorageClass) oldClass := old.(*storage.StorageClass) - if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) { - newClass.AllowVolumeExpansion = nil - oldClass.AllowVolumeExpansion = nil - } - storageutil.DropDisabledAlphaFields(oldClass) - storageutil.DropDisabledAlphaFields(newClass) + storageutil.DropDisabledFields(oldClass, newClass) } func (storageClassStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/BUILD index 7cb2a4bb38d..6156e767673 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/BUILD @@ -13,6 +13,7 @@ go_library( "//pkg/apis/storage:go_default_library", "//pkg/apis/storage/validation:go_default_library", "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage/storage.go index df8c470c895..3727e98f54f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage/storage.go @@ -70,6 +70,8 @@ type StatusREST struct { store *genericregistry.Store } +var _ = rest.Patcher(&StatusREST{}) + // New creates a new VolumeAttachment resource func (r *StatusREST) New() runtime.Object { return &storageapi.VolumeAttachment{} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/strategy.go index 6d37f695c44..1b3a56c51aa 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/volumeattachment/strategy.go @@ -20,6 +20,7 @@ import ( "context" storageapiv1beta1 "k8s.io/api/storage/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation/field" @@ -134,14 +135,5 @@ func (volumeAttachmentStatusStrategy) PrepareForUpdate(ctx context.Context, obj, oldVolumeAttachment := old.(*storage.VolumeAttachment) newVolumeAttachment.Spec = oldVolumeAttachment.Spec - - oldMeta := oldVolumeAttachment.ObjectMeta - newMeta := &newVolumeAttachment.ObjectMeta - newMeta.SetDeletionTimestamp(oldMeta.GetDeletionTimestamp()) - newMeta.SetGeneration(oldMeta.GetGeneration()) - newMeta.SetSelfLink(oldMeta.GetSelfLink()) - newMeta.SetLabels(oldMeta.GetLabels()) - newMeta.SetAnnotations(oldMeta.GetAnnotations()) - newMeta.SetFinalizers(oldMeta.GetFinalizers()) - newMeta.SetOwnerReferences(oldMeta.GetOwnerReferences()) + metav1.ResetObjectMetaForStatus(&newVolumeAttachment.ObjectMeta, &oldVolumeAttachment.ObjectMeta) } diff --git a/vendor/k8s.io/kubernetes/pkg/routes/OWNERS b/vendor/k8s.io/kubernetes/pkg/routes/OWNERS index 20f71c30f38..42704a64ed6 100644 --- a/vendor/k8s.io/kubernetes/pkg/routes/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/routes/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - lavalamp diff --git a/vendor/k8s.io/kubernetes/pkg/routes/logs.go b/vendor/k8s.io/kubernetes/pkg/routes/logs.go index cfe9b27de8b..1922a381ede 100644 --- a/vendor/k8s.io/kubernetes/pkg/routes/logs.go +++ b/vendor/k8s.io/kubernetes/pkg/routes/logs.go @@ -26,6 +26,7 @@ import ( // Logs adds handlers for the /logs path serving log files from /var/log. type Logs struct{} +// Install func registers the logs handler. func (l Logs) Install(c *restful.Container) { // use restful: ws.Route(ws.GET("/logs/{logpath:*}").To(fileHandler)) // See github.com/emicklei/go-restful/blob/master/examples/restful-serve-static.go diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/BUILD index c3dc753d20d..648ed2f9cf7 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/BUILD @@ -3,13 +3,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ + "eventhandlers.go", "scheduler.go", "testutil.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler", visibility = ["//visibility:public"], deps = [ - "//pkg/features:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/api:go_default_library", @@ -20,19 +20,22 @@ go_library( "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/metrics:go_default_library", + "//pkg/scheduler/plugins/v1alpha1:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], @@ -41,23 +44,24 @@ go_library( go_test( name = "go_default_test", srcs = [ - "main_test.go", + "eventhandlers_test.go", "scheduler_test.go", ], embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/controller/volume/persistentvolume:go_default_library", - "//pkg/features:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", + "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/cache:go_default_library", "//pkg/scheduler/core:go_default_library", "//pkg/scheduler/factory:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/cache/fake:go_default_library", + "//pkg/scheduler/internal/queue:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/volumebinder:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -68,8 +72,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", @@ -93,12 +95,14 @@ filegroup( "//pkg/scheduler/algorithmprovider:all-srcs", "//pkg/scheduler/api:all-srcs", "//pkg/scheduler/apis/config:all-srcs", - "//pkg/scheduler/cache:all-srcs", "//pkg/scheduler/core:all-srcs", + "//pkg/scheduler/equivalence:all-srcs", "//pkg/scheduler/factory:all-srcs", "//pkg/scheduler/internal/cache:all-srcs", "//pkg/scheduler/internal/queue:all-srcs", "//pkg/scheduler/metrics:all-srcs", + "//pkg/scheduler/nodeinfo:all-srcs", + "//pkg/scheduler/plugins:all-srcs", "//pkg/scheduler/testing:all-srcs", "//pkg/scheduler/util:all-srcs", "//pkg/scheduler/volumebinder:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/OWNERS b/vendor/k8s.io/kubernetes/pkg/scheduler/OWNERS index fe768eadb54..485eb202d98 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/OWNERS @@ -1,6 +1,8 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-scheduling-maintainers reviewers: - sig-scheduling -labels: +labels: - sig/scheduling diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/BUILD index da4b77ede20..415aa853026 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/BUILD @@ -1,10 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", @@ -16,7 +12,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm", deps = [ "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", @@ -24,17 +20,6 @@ go_library( ], ) -go_test( - name = "go_default_test", - srcs = ["types_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/scheduler/cache:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/BUILD index 58ee7b487cc..2e2853ccf97 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/BUILD @@ -21,11 +21,10 @@ go_library( "//pkg/apis/core/v1/helper:go_default_library", "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/util:go_default_library", "//pkg/scheduler/volumebinder:go_default_library", "//pkg/volume/util:go_default_library", @@ -41,6 +40,7 @@ go_library( "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/storage/v1:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", + "//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -49,7 +49,6 @@ go_test( name = "go_default_test", srcs = [ "csi_volume_predicate_test.go", - "main_test.go", "max_attachable_volume_predicate_test.go", "metadata_test.go", "predicates_test.go", @@ -59,10 +58,8 @@ go_test( deps = [ "//pkg/apis/core/v1/helper:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", - "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/testing:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/csi_volume_predicate.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/csi_volume_predicate.go index ff2215eb28d..e0f070e610a 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/csi_volume_predicate.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/csi_volume_predicate.go @@ -23,8 +23,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/algorithm" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" volumeutil "k8s.io/kubernetes/pkg/volume/util" ) @@ -36,7 +35,7 @@ type CSIMaxVolumeLimitChecker struct { // NewCSIMaxVolumeLimitPredicate returns a predicate for counting CSI volumes func NewCSIMaxVolumeLimitPredicate( - pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo) algorithm.FitPredicate { + pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo) FitPredicate { c := &CSIMaxVolumeLimitChecker{ pvInfo: pvInfo, pvcInfo: pvcInfo, @@ -45,7 +44,7 @@ func NewCSIMaxVolumeLimitPredicate( } func (c *CSIMaxVolumeLimitChecker) attachableLimitPredicate( - pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { + pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { // if feature gate is disable we return if !utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) { @@ -101,7 +100,7 @@ func (c *CSIMaxVolumeLimitChecker) attachableLimitPredicate( if ok { currentVolumeCount := attachedVolumeCount[volumeLimitKey] if currentVolumeCount+count > int(maxVolumeLimit) { - return false, []algorithm.PredicateFailureReason{ErrMaxVolumeCountExceeded}, nil + return false, []PredicateFailureReason{ErrMaxVolumeCountExceeded}, nil } } } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/error.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/error.go index 1e1cbcaa9fa..7f35c84f93e 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/error.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/error.go @@ -63,8 +63,6 @@ var ( ErrNodeUnderDiskPressure = newPredicateFailureError("NodeUnderDiskPressure", "node(s) had disk pressure") // ErrNodeUnderPIDPressure is used for NodeUnderPIDPressure predicate error. ErrNodeUnderPIDPressure = newPredicateFailureError("NodeUnderPIDPressure", "node(s) had pid pressure") - // ErrNodeOutOfDisk is used for NodeOutOfDisk predicate error. - ErrNodeOutOfDisk = newPredicateFailureError("NodeOutOfDisk", "node(s) were out of disk space") // ErrNodeNotReady is used for NodeNotReady predicate error. ErrNodeNotReady = newPredicateFailureError("NodeNotReady", "node(s) were not ready") // ErrNodeNetworkUnavailable is used for NodeNetworkUnavailable predicate error. @@ -136,6 +134,11 @@ func (e *PredicateFailureError) GetReason() string { return e.PredicateDesc } +// PredicateFailureReason interface represents the failure reason of a predicate. +type PredicateFailureReason interface { + GetReason() string +} + // FailureReason describes a failure reason. type FailureReason struct { reason string diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/metadata.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/metadata.go index 9284cda2381..99baed71ab5 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/metadata.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/metadata.go @@ -30,10 +30,20 @@ import ( "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/scheduler/algorithm" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedutil "k8s.io/kubernetes/pkg/scheduler/util" ) +// PredicateMetadata interface represents anything that can access a predicate metadata. +type PredicateMetadata interface { + ShallowCopy() PredicateMetadata + AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error + RemovePod(deletedPod *v1.Pod) error +} + +// PredicateMetadataProducer is a function that computes predicate metadata for a given pod. +type PredicateMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) PredicateMetadata + // PredicateMetadataFactory defines a factory of predicate metadata. type PredicateMetadataFactory struct { podLister algorithm.PodLister @@ -68,7 +78,7 @@ type topologyPairsMaps struct { type predicateMetadata struct { pod *v1.Pod podBestEffort bool - podRequest *schedulercache.Resource + podRequest *schedulernodeinfo.Resource podPorts []*v1.ContainerPort topologyPairsAntiAffinityPodsMap *topologyPairsMaps @@ -91,21 +101,27 @@ type predicateMetadata struct { } // Ensure that predicateMetadata implements algorithm.PredicateMetadata. -var _ algorithm.PredicateMetadata = &predicateMetadata{} +var _ PredicateMetadata = &predicateMetadata{} -// PredicateMetadataProducer function produces predicate metadata. -type PredicateMetadataProducer func(pm *predicateMetadata) +// predicateMetadataProducer function produces predicate metadata. It is stored in a global variable below +// and used to modify the return values of PredicateMetadataProducer +type predicateMetadataProducer func(pm *predicateMetadata) var predicateMetaProducerRegisterLock sync.Mutex -var predicateMetadataProducers = make(map[string]PredicateMetadataProducer) +var predicateMetadataProducers = make(map[string]predicateMetadataProducer) // RegisterPredicateMetadataProducer registers a PredicateMetadataProducer. -func RegisterPredicateMetadataProducer(predicateName string, precomp PredicateMetadataProducer) { +func RegisterPredicateMetadataProducer(predicateName string, precomp predicateMetadataProducer) { predicateMetaProducerRegisterLock.Lock() defer predicateMetaProducerRegisterLock.Unlock() predicateMetadataProducers[predicateName] = precomp } +// EmptyPredicateMetadataProducer returns a no-op MetadataProducer type. +func EmptyPredicateMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) PredicateMetadata { + return nil +} + // RegisterPredicateMetadataProducerWithExtendedResourceOptions registers a // PredicateMetadataProducer that creates predicate metadata with the provided // options for extended resources. @@ -118,7 +134,7 @@ func RegisterPredicateMetadataProducerWithExtendedResourceOptions(ignoredExtende } // NewPredicateMetadataFactory creates a PredicateMetadataFactory. -func NewPredicateMetadataFactory(podLister algorithm.PodLister) algorithm.PredicateMetadataProducer { +func NewPredicateMetadataFactory(podLister algorithm.PodLister) PredicateMetadataProducer { factory := &PredicateMetadataFactory{ podLister, } @@ -126,7 +142,7 @@ func NewPredicateMetadataFactory(podLister algorithm.PodLister) algorithm.Predic } // GetMetadata returns the predicateMetadata used which will be used by various predicates. -func (pfactory *PredicateMetadataFactory) GetMetadata(pod *v1.Pod, nodeNameToInfoMap map[string]*schedulercache.NodeInfo) algorithm.PredicateMetadata { +func (pfactory *PredicateMetadataFactory) GetMetadata(pod *v1.Pod, nodeNameToInfoMap map[string]*schedulernodeinfo.NodeInfo) PredicateMetadata { // If we cannot compute metadata, just return nil if pod == nil { return nil @@ -230,7 +246,7 @@ func (meta *predicateMetadata) RemovePod(deletedPod *v1.Pod) error { // AddPod changes predicateMetadata assuming that `newPod` is added to the // system. -func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulercache.NodeInfo) error { +func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error { addedPodFullName := schedutil.GetPodFullName(addedPod) if addedPodFullName == schedutil.GetPodFullName(meta.pod) { return fmt.Errorf("addedPod and meta.pod must not be the same") @@ -285,7 +301,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulercache // ShallowCopy copies a metadata struct into a new struct and creates a copy of // its maps and slices, but it does not copy the contents of pointer values. -func (meta *predicateMetadata) ShallowCopy() algorithm.PredicateMetadata { +func (meta *predicateMetadata) ShallowCopy() PredicateMetadata { newPredMeta := &predicateMetadata{ pod: meta.pod, podBestEffort: meta.podBestEffort, @@ -304,7 +320,7 @@ func (meta *predicateMetadata) ShallowCopy() algorithm.PredicateMetadata { meta.serviceAffinityMatchingPodServices...) newPredMeta.serviceAffinityMatchingPodList = append([]*v1.Pod(nil), meta.serviceAffinityMatchingPodList...) - return (algorithm.PredicateMetadata)(newPredMeta) + return (PredicateMetadata)(newPredMeta) } type affinityTermProperties struct { @@ -359,7 +375,7 @@ func podMatchesAnyAffinityTermProperties(pod *v1.Pod, properties []*affinityTerm // getTPMapMatchingExistingAntiAffinity calculates the following for each existing pod on each node: // (1) Whether it has PodAntiAffinity // (2) Whether any AffinityTerm matches the incoming pod -func getTPMapMatchingExistingAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*schedulercache.NodeInfo) (*topologyPairsMaps, error) { +func getTPMapMatchingExistingAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*schedulernodeinfo.NodeInfo) (*topologyPairsMaps, error) { allNodeNames := make([]string, 0, len(nodeInfoMap)) for name := range nodeInfoMap { allNodeNames = append(allNodeNames, name) @@ -407,7 +423,7 @@ func getTPMapMatchingExistingAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*s // It returns a topologyPairsMaps that are checked later by the affinity // predicate. With this topologyPairsMaps available, the affinity predicate does not // need to check all the pods in the cluster. -func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*schedulercache.NodeInfo) (topologyPairsAffinityPodsMaps *topologyPairsMaps, topologyPairsAntiAffinityPodsMaps *topologyPairsMaps, err error) { +func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*schedulernodeinfo.NodeInfo) (topologyPairsAffinityPodsMaps *topologyPairsMaps, topologyPairsAntiAffinityPodsMaps *topologyPairsMaps, err error) { affinity := pod.Spec.Affinity if affinity == nil || (affinity.PodAffinity == nil && affinity.PodAntiAffinity == nil) { return newTopologyPairsMaps(), newTopologyPairsMaps(), nil diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/predicates.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/predicates.go index 9501a6b6c11..308790c47a3 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/predicates.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/predicates.go @@ -36,14 +36,14 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" corelisters "k8s.io/client-go/listers/core/v1" storagelisters "k8s.io/client-go/listers/storage/v1" + volumehelpers "k8s.io/cloud-provider/volume/helpers" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" "k8s.io/kubernetes/pkg/features" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/scheduler/algorithm" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedutil "k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/volumebinder" volumeutil "k8s.io/kubernetes/pkg/volume/util" @@ -79,11 +79,21 @@ const ( // CheckServiceAffinityPred defines the name of predicate checkServiceAffinity. CheckServiceAffinityPred = "CheckServiceAffinity" // MaxEBSVolumeCountPred defines the name of predicate MaxEBSVolumeCount. + // DEPRECATED + // All cloudprovider specific predicates are deprecated in favour of MaxCSIVolumeCountPred. MaxEBSVolumeCountPred = "MaxEBSVolumeCount" // MaxGCEPDVolumeCountPred defines the name of predicate MaxGCEPDVolumeCount. + // DEPRECATED + // All cloudprovider specific predicates are deprecated in favour of MaxCSIVolumeCountPred. MaxGCEPDVolumeCountPred = "MaxGCEPDVolumeCount" // MaxAzureDiskVolumeCountPred defines the name of predicate MaxAzureDiskVolumeCount. + // DEPRECATED + // All cloudprovider specific predicates are deprecated in favour of MaxCSIVolumeCountPred. MaxAzureDiskVolumeCountPred = "MaxAzureDiskVolumeCount" + // MaxCinderVolumeCountPred defines the name of predicate MaxCinderDiskVolumeCount. + // DEPRECATED + // All cloudprovider specific predicates are deprecated in favour of MaxCSIVolumeCountPred. + MaxCinderVolumeCountPred = "MaxCinderVolumeCount" // MaxCSIVolumeCountPred defines the predicate that decides how many CSI volumes should be attached MaxCSIVolumeCountPred = "MaxCSIVolumeCountPred" // NoVolumeZoneConflictPred defines the name of predicate NoVolumeZoneConflict. @@ -112,6 +122,8 @@ const ( GCEPDVolumeFilterType = "GCE" // AzureDiskVolumeFilterType defines the filter name for AzureDiskVolumeFilter. AzureDiskVolumeFilterType = "AzureDisk" + // CinderVolumeFilterType defines the filter name for CinderVolumeFilter. + CinderVolumeFilterType = "Cinder" ) // IMPORTANT NOTE for predicate developers: @@ -133,10 +145,14 @@ var ( MatchNodeSelectorPred, PodFitsResourcesPred, NoDiskConflictPred, PodToleratesNodeTaintsPred, PodToleratesNodeNoExecuteTaintsPred, CheckNodeLabelPresencePred, CheckServiceAffinityPred, MaxEBSVolumeCountPred, MaxGCEPDVolumeCountPred, MaxCSIVolumeCountPred, - MaxAzureDiskVolumeCountPred, CheckVolumeBindingPred, NoVolumeZoneConflictPred, + MaxAzureDiskVolumeCountPred, MaxCinderVolumeCountPred, CheckVolumeBindingPred, NoVolumeZoneConflictPred, CheckNodeMemoryPressurePred, CheckNodePIDPressurePred, CheckNodeDiskPressurePred, MatchInterPodAffinityPred} ) +// FitPredicate is a function that indicates if a pod fits into an existing node. +// The failure information is given by the error. +type FitPredicate func(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) + // NodeInfo interface represents anything that can get node object from node ID. type NodeInfo interface { GetNodeInfo(nodeID string) (*v1.Node, error) @@ -274,11 +290,11 @@ func isVolumeConflict(volume v1.Volume, pod *v1.Pod) bool { // - Ceph RBD forbids if any two pods share at least same monitor, and match pool and image. // - ISCSI forbids if any two pods share at least same IQN, LUN and Target // TODO: migrate this into some per-volume specific code? -func NoDiskConflict(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func NoDiskConflict(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { for _, v := range pod.Spec.Volumes { for _, ev := range nodeInfo.Pods() { if isVolumeConflict(v, ev) { - return false, []algorithm.PredicateFailureReason{ErrDiskConflict}, nil + return false, []PredicateFailureReason{ErrDiskConflict}, nil } } } @@ -309,11 +325,15 @@ type VolumeFilter struct { // NewMaxPDVolumeCountPredicate creates a predicate which evaluates whether a pod can fit based on the // number of volumes which match a filter that it requests, and those that are already present. // +// DEPRECATED +// All cloudprovider specific predicates defined here are deprecated in favour of CSI volume limit +// predicate - MaxCSIVolumeCountPred. +// // The predicate looks for both volumes used directly, as well as PVC volumes that are backed by relevant volume // types, counts the number of unique volumes, and rejects the new pod if it would place the total count over // the maximum. func NewMaxPDVolumeCountPredicate( - filterName string, pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo) algorithm.FitPredicate { + filterName string, pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo) FitPredicate { var filter VolumeFilter var volumeLimitKey v1.ResourceName @@ -328,6 +348,9 @@ func NewMaxPDVolumeCountPredicate( case AzureDiskVolumeFilterType: filter = AzureDiskVolumeFilter volumeLimitKey = v1.ResourceName(volumeutil.AzureVolumeLimitKey) + case CinderVolumeFilterType: + filter = CinderVolumeFilter + volumeLimitKey = v1.ResourceName(volumeutil.CinderVolumeLimitKey) default: klog.Fatalf("Wrong filterName, Only Support %v %v %v ", EBSVolumeFilterType, GCEPDVolumeFilterType, AzureDiskVolumeFilterType) @@ -355,7 +378,7 @@ func getMaxVolumeFunc(filterName string) func(node *v1.Node) int { var nodeInstanceType string for k, v := range node.ObjectMeta.Labels { - if k == kubeletapis.LabelInstanceType { + if k == v1.LabelInstanceType { nodeInstanceType = v } } @@ -366,6 +389,8 @@ func getMaxVolumeFunc(filterName string) func(node *v1.Node) int { return DefaultMaxGCEPDVolumes case AzureDiskVolumeFilterType: return DefaultMaxAzureDiskVolumes + case CinderVolumeFilterType: + return volumeutil.DefaultMaxCinderVolumes default: return -1 } @@ -447,7 +472,7 @@ func (c *MaxPDVolumeCountChecker) filterVolumes(volumes []v1.Volume, namespace s return nil } -func (c *MaxPDVolumeCountChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func (c *MaxPDVolumeCountChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { // If a pod doesn't have any volume attached to it, the predicate will always be true. // Thus we make a fast path for it, to avoid unnecessary computations in this case. if len(pod.Spec.Volumes) == 0 { @@ -492,7 +517,7 @@ func (c *MaxPDVolumeCountChecker) predicate(pod *v1.Pod, meta algorithm.Predicat if numExistingVolumes+numNewVolumes > maxAttachLimit { // violates MaxEBSVolumeCount or MaxGCEPDVolumeCount - return false, []algorithm.PredicateFailureReason{ErrMaxVolumeCountExceeded}, nil + return false, []PredicateFailureReason{ErrMaxVolumeCountExceeded}, nil } return true, nil, nil } @@ -548,6 +573,24 @@ var AzureDiskVolumeFilter = VolumeFilter{ }, } +// CinderVolumeFilter is a VolumeFilter for filtering Cinder Volumes +// It will be deprecated once Openstack cloudprovider has been removed from in-tree. +var CinderVolumeFilter = VolumeFilter{ + FilterVolume: func(vol *v1.Volume) (string, bool) { + if vol.Cinder != nil { + return vol.Cinder.VolumeID, true + } + return "", false + }, + + FilterPersistentVolume: func(pv *v1.PersistentVolume) (string, bool) { + if pv.Spec.Cinder != nil { + return pv.Spec.Cinder.VolumeID, true + } + return "", false + }, +} + // VolumeZoneChecker contains information to check the volume zone for a predicate. type VolumeZoneChecker struct { pvInfo PersistentVolumeInfo @@ -569,7 +612,7 @@ type VolumeZoneChecker struct { // determining the zone of a volume during scheduling, and that is likely to // require calling out to the cloud provider. It seems that we are moving away // from inline volume declarations anyway. -func NewVolumeZonePredicate(pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo, classInfo StorageClassInfo) algorithm.FitPredicate { +func NewVolumeZonePredicate(pvInfo PersistentVolumeInfo, pvcInfo PersistentVolumeClaimInfo, classInfo StorageClassInfo) FitPredicate { c := &VolumeZoneChecker{ pvInfo: pvInfo, pvcInfo: pvcInfo, @@ -578,7 +621,7 @@ func NewVolumeZonePredicate(pvInfo PersistentVolumeInfo, pvcInfo PersistentVolum return c.predicate } -func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { // If a pod doesn't have any volume attached to it, the predicate will always be true. // Thus we make a fast path for it, to avoid unnecessary computations in this case. if len(pod.Spec.Volumes) == 0 { @@ -592,7 +635,7 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad nodeConstraints := make(map[string]string) for k, v := range node.ObjectMeta.Labels { - if k != kubeletapis.LabelZoneFailureDomain && k != kubeletapis.LabelZoneRegion { + if k != v1.LabelZoneFailureDomain && k != v1.LabelZoneRegion { continue } nodeConstraints[k] = v @@ -625,18 +668,16 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad pvName := pvc.Spec.VolumeName if pvName == "" { - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - scName := v1helper.GetPersistentVolumeClaimClass(pvc) - if len(scName) > 0 { - class, _ := c.classInfo.GetStorageClassInfo(scName) - if class != nil { - if class.VolumeBindingMode == nil { - return false, nil, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", scName) - } - if *class.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer { - // Skip unbound volumes - continue - } + scName := v1helper.GetPersistentVolumeClaimClass(pvc) + if len(scName) > 0 { + class, _ := c.classInfo.GetStorageClassInfo(scName) + if class != nil { + if class.VolumeBindingMode == nil { + return false, nil, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", scName) + } + if *class.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer { + // Skip unbound volumes + continue } } } @@ -653,11 +694,11 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad } for k, v := range pv.ObjectMeta.Labels { - if k != kubeletapis.LabelZoneFailureDomain && k != kubeletapis.LabelZoneRegion { + if k != v1.LabelZoneFailureDomain && k != v1.LabelZoneRegion { continue } nodeV, _ := nodeConstraints[k] - volumeVSet, err := volumeutil.LabelZonesToSet(v) + volumeVSet, err := volumehelpers.LabelZonesToSet(v) if err != nil { klog.Warningf("Failed to parse label for %q: %q. Ignoring the label. err=%v. ", k, v, err) continue @@ -665,7 +706,7 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad if !volumeVSet.Has(nodeV) { klog.V(10).Infof("Won't schedule pod %q onto node %q due to volume %q (mismatch on %q)", pod.Name, node.Name, pvName, k) - return false, []algorithm.PredicateFailureReason{ErrVolumeZoneConflict}, nil + return false, []PredicateFailureReason{ErrVolumeZoneConflict}, nil } } } @@ -674,7 +715,7 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad return true, nil, nil } -// GetResourceRequest returns a *schedulercache.Resource that covers the largest +// GetResourceRequest returns a *schedulernodeinfo.Resource that covers the largest // width in each resource dimension. Because init-containers run sequentially, we collect // the max in each dimension iteratively. In contrast, we sum the resource vectors for // regular containers since they run simultaneously. @@ -698,8 +739,8 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetad // Memory: 1G // // Result: CPU: 3, Memory: 3G -func GetResourceRequest(pod *v1.Pod) *schedulercache.Resource { - result := &schedulercache.Resource{} +func GetResourceRequest(pod *v1.Pod) *schedulernodeinfo.Resource { + result := &schedulernodeinfo.Resource{} for _, container := range pod.Spec.Containers { result.Add(container.Resources.Requests) } @@ -719,13 +760,13 @@ func podName(pod *v1.Pod) string { // PodFitsResources checks if a node has sufficient resources, such as cpu, memory, gpu, opaque int resources etc to run a pod. // First return value indicates whether a node has sufficient resources to run a pod while the second return value indicates the // predicate failure reasons if the node has insufficient resources to run the pod. -func PodFitsResources(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodFitsResources(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return false, nil, fmt.Errorf("node not found") } - var predicateFails []algorithm.PredicateFailureReason + var predicateFails []PredicateFailureReason allowedPodNumber := nodeInfo.AllowedPodNumber() if len(nodeInfo.Pods())+1 > allowedPodNumber { predicateFails = append(predicateFails, NewInsufficientResourceError(v1.ResourcePods, 1, int64(len(nodeInfo.Pods())), int64(allowedPodNumber))) @@ -734,7 +775,7 @@ func PodFitsResources(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *s // No extended resources should be ignored by default. ignoredExtendedResources := sets.NewString() - var podRequest *schedulercache.Resource + var podRequest *schedulernodeinfo.Resource if predicateMeta, ok := meta.(*predicateMetadata); ok { podRequest = predicateMeta.podRequest if predicateMeta.ignoredExtendedResources != nil { @@ -844,7 +885,7 @@ func podMatchesNodeSelectorAndAffinityTerms(pod *v1.Pod, node *v1.Node) bool { } // PodMatchNodeSelector checks if a pod node selector matches the node label. -func PodMatchNodeSelector(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodMatchNodeSelector(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return false, nil, fmt.Errorf("node not found") @@ -852,11 +893,11 @@ func PodMatchNodeSelector(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInf if podMatchesNodeSelectorAndAffinityTerms(pod, node) { return true, nil, nil } - return false, []algorithm.PredicateFailureReason{ErrNodeSelectorNotMatch}, nil + return false, []PredicateFailureReason{ErrNodeSelectorNotMatch}, nil } // PodFitsHost checks if a pod spec node name matches the current node. -func PodFitsHost(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodFitsHost(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { if len(pod.Spec.NodeName) == 0 { return true, nil, nil } @@ -867,7 +908,7 @@ func PodFitsHost(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedu if pod.Spec.NodeName == node.Name { return true, nil, nil } - return false, []algorithm.PredicateFailureReason{ErrPodNotMatchHostName}, nil + return false, []PredicateFailureReason{ErrPodNotMatchHostName}, nil } // NodeLabelChecker contains information to check node labels for a predicate. @@ -878,7 +919,7 @@ type NodeLabelChecker struct { // NewNodeLabelPredicate creates a predicate which evaluates whether a pod can fit based on the // node labels which match a filter that it requests. -func NewNodeLabelPredicate(labels []string, presence bool) algorithm.FitPredicate { +func NewNodeLabelPredicate(labels []string, presence bool) FitPredicate { labelChecker := &NodeLabelChecker{ labels: labels, presence: presence, @@ -898,7 +939,7 @@ func NewNodeLabelPredicate(labels []string, presence bool) algorithm.FitPredicat // Alternately, eliminating nodes that have a certain label, regardless of value, is also useful // A node may have a label with "retiring" as key and the date as the value // and it may be desirable to avoid scheduling new pods on this node -func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return false, nil, fmt.Errorf("node not found") @@ -909,13 +950,13 @@ func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta algorithm.Pr for _, label := range n.labels { exists = nodeLabels.Has(label) if (exists && !n.presence) || (!exists && n.presence) { - return false, []algorithm.PredicateFailureReason{ErrNodeLabelPresenceViolated}, nil + return false, []PredicateFailureReason{ErrNodeLabelPresenceViolated}, nil } } return true, nil, nil } -// ServiceAffinity defines a struct used for create service affinity predicates. +// ServiceAffinity defines a struct used for creating service affinity predicates. type ServiceAffinity struct { podLister algorithm.PodLister serviceLister algorithm.ServiceLister @@ -946,7 +987,7 @@ func (s *ServiceAffinity) serviceAffinityMetadataProducer(pm *predicateMetadata) } // NewServiceAffinityPredicate creates a ServiceAffinity. -func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, nodeInfo NodeInfo, labels []string) (algorithm.FitPredicate, PredicateMetadataProducer) { +func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, nodeInfo NodeInfo, labels []string) (FitPredicate, predicateMetadataProducer) { affinity := &ServiceAffinity{ podLister: podLister, serviceLister: serviceLister, @@ -977,13 +1018,13 @@ func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister al // // To do this, we "reverse engineer" a selector by introspecting existing pods running under the same service+namespace. // These backfilled labels in the selector "L" are defined like so: -// - L is a label that the ServiceAffinity object needs as a matching constraints. +// - L is a label that the ServiceAffinity object needs as a matching constraint. // - L is not defined in the pod itself already. // - and SOME pod, from a service, in the same namespace, ALREADY scheduled onto a node, has a matching value. // // WARNING: This Predicate is NOT guaranteed to work if some of the predicateMetadata data isn't precomputed... // For that reason it is not exported, i.e. it is highly coupled to the implementation of the FitPredicate construction. -func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { var services []*v1.Service var pods []*v1.Pod if pm, ok := meta.(*predicateMetadata); ok && (pm.serviceAffinityMatchingPodList != nil || pm.serviceAffinityMatchingPodServices != nil) { @@ -1018,11 +1059,11 @@ func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta algorithm.Predi if CreateSelectorFromLabels(affinityLabels).Matches(labels.Set(node.Labels)) { return true, nil, nil } - return false, []algorithm.PredicateFailureReason{ErrServiceAffinityViolated}, nil + return false, []PredicateFailureReason{ErrServiceAffinityViolated}, nil } // PodFitsHostPorts checks if a node has free ports for the requested pod ports. -func PodFitsHostPorts(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodFitsHostPorts(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { var wantPorts []*v1.ContainerPort if predicateMeta, ok := meta.(*predicateMetadata); ok { wantPorts = predicateMeta.podPorts @@ -1038,7 +1079,7 @@ func PodFitsHostPorts(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *s // try to see whether existingPorts and wantPorts will conflict or not if portsConflict(existingPorts, wantPorts) { - return false, []algorithm.PredicateFailureReason{ErrPodNotFitsHostPorts}, nil + return false, []PredicateFailureReason{ErrPodNotFitsHostPorts}, nil } return true, nil, nil @@ -1062,8 +1103,8 @@ func haveOverlap(a1, a2 []string) bool { // GeneralPredicates checks whether noncriticalPredicates and EssentialPredicates pass. noncriticalPredicates are the predicates // that only non-critical pods need and EssentialPredicates are the predicates that all pods, including critical pods, need -func GeneralPredicates(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - var predicateFails []algorithm.PredicateFailureReason +func GeneralPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { + var predicateFails []PredicateFailureReason fit, reasons, err := noncriticalPredicates(pod, meta, nodeInfo) if err != nil { return false, predicateFails, err @@ -1084,8 +1125,8 @@ func GeneralPredicates(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo * } // noncriticalPredicates are the predicates that only non-critical pods need -func noncriticalPredicates(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - var predicateFails []algorithm.PredicateFailureReason +func noncriticalPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { + var predicateFails []PredicateFailureReason fit, reasons, err := PodFitsResources(pod, meta, nodeInfo) if err != nil { return false, predicateFails, err @@ -1098,8 +1139,8 @@ func noncriticalPredicates(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeIn } // EssentialPredicates are the predicates that all pods, including critical pods, need -func EssentialPredicates(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - var predicateFails []algorithm.PredicateFailureReason +func EssentialPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { + var predicateFails []PredicateFailureReason fit, reasons, err := PodFitsHost(pod, meta, nodeInfo) if err != nil { return false, predicateFails, err @@ -1135,7 +1176,7 @@ type PodAffinityChecker struct { } // NewPodAffinityPredicate creates a PodAffinityChecker. -func NewPodAffinityPredicate(info NodeInfo, podLister algorithm.PodLister) algorithm.FitPredicate { +func NewPodAffinityPredicate(info NodeInfo, podLister algorithm.PodLister) FitPredicate { checker := &PodAffinityChecker{ info: info, podLister: podLister, @@ -1146,13 +1187,13 @@ func NewPodAffinityPredicate(info NodeInfo, podLister algorithm.PodLister) algor // InterPodAffinityMatches checks if a pod can be scheduled on the specified node with pod affinity/anti-affinity configuration. // First return value indicates whether a pod can be scheduled on the specified node while the second return value indicates the // predicate failure reasons if the pod cannot be scheduled on the specified node. -func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return false, nil, fmt.Errorf("node not found") } if failedPredicates, error := c.satisfiesExistingPodsAntiAffinity(pod, meta, nodeInfo); failedPredicates != nil { - failedPredicates := append([]algorithm.PredicateFailureReason{ErrPodAffinityNotMatch}, failedPredicates) + failedPredicates := append([]PredicateFailureReason{ErrPodAffinityNotMatch}, failedPredicates) return false, failedPredicates, error } @@ -1162,7 +1203,7 @@ func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta algorithm return true, nil, nil } if failedPredicates, error := c.satisfiesPodsAffinityAntiAffinity(pod, meta, nodeInfo, affinity); failedPredicates != nil { - failedPredicates := append([]algorithm.PredicateFailureReason{ErrPodAffinityNotMatch}, failedPredicates) + failedPredicates := append([]PredicateFailureReason{ErrPodAffinityNotMatch}, failedPredicates) return false, failedPredicates, error } @@ -1180,7 +1221,7 @@ func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta algorithm // targetPod matches all the terms and their topologies, 2) whether targetPod // matches all the terms label selector and namespaces (AKA term properties), // 3) any error. -func (c *PodAffinityChecker) podMatchesPodAffinityTerms(pod, targetPod *v1.Pod, nodeInfo *schedulercache.NodeInfo, terms []v1.PodAffinityTerm) (bool, bool, error) { +func (c *PodAffinityChecker) podMatchesPodAffinityTerms(pod, targetPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo, terms []v1.PodAffinityTerm) (bool, bool, error) { if len(terms) == 0 { return false, false, fmt.Errorf("terms array is empty") } @@ -1284,7 +1325,7 @@ func (c *PodAffinityChecker) getMatchingAntiAffinityTopologyPairsOfPods(pod *v1. // Checks if scheduling the pod onto this node would break any anti-affinity // terms indicated by the existing pods. -func (c *PodAffinityChecker) satisfiesExistingPodsAntiAffinity(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (algorithm.PredicateFailureReason, error) { +func (c *PodAffinityChecker) satisfiesExistingPodsAntiAffinity(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return ErrExistingPodsAntiAffinityRulesNotMatch, fmt.Errorf("Node is nil") @@ -1327,7 +1368,7 @@ func (c *PodAffinityChecker) satisfiesExistingPodsAntiAffinity(pod *v1.Pod, meta // nodeMatchesAllTopologyTerms checks whether "nodeInfo" matches // topology of all the "terms" for the given "pod". -func (c *PodAffinityChecker) nodeMatchesAllTopologyTerms(pod *v1.Pod, topologyPairs *topologyPairsMaps, nodeInfo *schedulercache.NodeInfo, terms []v1.PodAffinityTerm) bool { +func (c *PodAffinityChecker) nodeMatchesAllTopologyTerms(pod *v1.Pod, topologyPairs *topologyPairsMaps, nodeInfo *schedulernodeinfo.NodeInfo, terms []v1.PodAffinityTerm) bool { node := nodeInfo.Node() for _, term := range terms { if topologyValue, ok := node.Labels[term.TopologyKey]; ok { @@ -1344,7 +1385,7 @@ func (c *PodAffinityChecker) nodeMatchesAllTopologyTerms(pod *v1.Pod, topologyPa // nodeMatchesAnyTopologyTerm checks whether "nodeInfo" matches // topology of any "term" for the given "pod". -func (c *PodAffinityChecker) nodeMatchesAnyTopologyTerm(pod *v1.Pod, topologyPairs *topologyPairsMaps, nodeInfo *schedulercache.NodeInfo, terms []v1.PodAffinityTerm) bool { +func (c *PodAffinityChecker) nodeMatchesAnyTopologyTerm(pod *v1.Pod, topologyPairs *topologyPairsMaps, nodeInfo *schedulernodeinfo.NodeInfo, terms []v1.PodAffinityTerm) bool { node := nodeInfo.Node() for _, term := range terms { if topologyValue, ok := node.Labels[term.TopologyKey]; ok { @@ -1359,8 +1400,8 @@ func (c *PodAffinityChecker) nodeMatchesAnyTopologyTerm(pod *v1.Pod, topologyPai // Checks if scheduling the pod onto this node would break any term of this pod. func (c *PodAffinityChecker) satisfiesPodsAffinityAntiAffinity(pod *v1.Pod, - meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo, - affinity *v1.Affinity) (algorithm.PredicateFailureReason, error) { + meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo, + affinity *v1.Affinity) (PredicateFailureReason, error) { node := nodeInfo.Node() if node == nil { return ErrPodAffinityRulesNotMatch, fmt.Errorf("Node is nil") @@ -1460,9 +1501,9 @@ func (c *PodAffinityChecker) satisfiesPodsAffinityAntiAffinity(pod *v1.Pod, } // CheckNodeUnschedulablePredicate checks if a pod can be scheduled on a node with Unschedulable spec. -func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { if nodeInfo == nil || nodeInfo.Node() == nil { - return false, []algorithm.PredicateFailureReason{ErrNodeUnknownCondition}, nil + return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil } // If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`. @@ -1473,16 +1514,16 @@ func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta algorithm.PredicateMetada // TODO (k82cn): deprecates `node.Spec.Unschedulable` in 1.13. if nodeInfo.Node().Spec.Unschedulable && !podToleratesUnschedulable { - return false, []algorithm.PredicateFailureReason{ErrNodeUnschedulable}, nil + return false, []PredicateFailureReason{ErrNodeUnschedulable}, nil } return true, nil, nil } // PodToleratesNodeTaints checks if a pod tolerations can tolerate the node taints -func PodToleratesNodeTaints(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodToleratesNodeTaints(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { if nodeInfo == nil || nodeInfo.Node() == nil { - return false, []algorithm.PredicateFailureReason{ErrNodeUnknownCondition}, nil + return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil } return podToleratesNodeTaints(pod, nodeInfo, func(t *v1.Taint) bool { @@ -1492,13 +1533,13 @@ func PodToleratesNodeTaints(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeI } // PodToleratesNodeNoExecuteTaints checks if a pod tolerations can tolerate the node's NoExecute taints -func PodToleratesNodeNoExecuteTaints(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func PodToleratesNodeNoExecuteTaints(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { return podToleratesNodeTaints(pod, nodeInfo, func(t *v1.Taint) bool { return t.Effect == v1.TaintEffectNoExecute }) } -func podToleratesNodeTaints(pod *v1.Pod, nodeInfo *schedulercache.NodeInfo, filter func(t *v1.Taint) bool) (bool, []algorithm.PredicateFailureReason, error) { +func podToleratesNodeTaints(pod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo, filter func(t *v1.Taint) bool) (bool, []PredicateFailureReason, error) { taints, err := nodeInfo.Taints() if err != nil { return false, nil, err @@ -1507,7 +1548,7 @@ func podToleratesNodeTaints(pod *v1.Pod, nodeInfo *schedulercache.NodeInfo, filt if v1helper.TolerationsTolerateTaintsWithFilter(pod.Spec.Tolerations, taints, filter) { return true, nil, nil } - return false, []algorithm.PredicateFailureReason{ErrTaintsTolerationsNotMatch}, nil + return false, []PredicateFailureReason{ErrTaintsTolerationsNotMatch}, nil } // isPodBestEffort checks if pod is scheduled with best-effort QoS @@ -1517,7 +1558,7 @@ func isPodBestEffort(pod *v1.Pod) bool { // CheckNodeMemoryPressurePredicate checks if a pod can be scheduled on a node // reporting memory pressure condition. -func CheckNodeMemoryPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func CheckNodeMemoryPressurePredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { var podBestEffort bool if predicateMeta, ok := meta.(*predicateMetadata); ok { podBestEffort = predicateMeta.podBestEffort @@ -1532,50 +1573,46 @@ func CheckNodeMemoryPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetad // check if node is under memory pressure if nodeInfo.MemoryPressureCondition() == v1.ConditionTrue { - return false, []algorithm.PredicateFailureReason{ErrNodeUnderMemoryPressure}, nil + return false, []PredicateFailureReason{ErrNodeUnderMemoryPressure}, nil } return true, nil, nil } // CheckNodeDiskPressurePredicate checks if a pod can be scheduled on a node // reporting disk pressure condition. -func CheckNodeDiskPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func CheckNodeDiskPressurePredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { // check if node is under disk pressure if nodeInfo.DiskPressureCondition() == v1.ConditionTrue { - return false, []algorithm.PredicateFailureReason{ErrNodeUnderDiskPressure}, nil + return false, []PredicateFailureReason{ErrNodeUnderDiskPressure}, nil } return true, nil, nil } // CheckNodePIDPressurePredicate checks if a pod can be scheduled on a node // reporting pid pressure condition. -func CheckNodePIDPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { +func CheckNodePIDPressurePredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { // check if node is under pid pressure if nodeInfo.PIDPressureCondition() == v1.ConditionTrue { - return false, []algorithm.PredicateFailureReason{ErrNodeUnderPIDPressure}, nil + return false, []PredicateFailureReason{ErrNodeUnderPIDPressure}, nil } return true, nil, nil } -// CheckNodeConditionPredicate checks if a pod can be scheduled on a node reporting out of disk, +// CheckNodeConditionPredicate checks if a pod can be scheduled on a node reporting // network unavailable and not ready condition. Only node conditions are accounted in this predicate. -func CheckNodeConditionPredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - reasons := []algorithm.PredicateFailureReason{} - +func CheckNodeConditionPredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { + reasons := []PredicateFailureReason{} if nodeInfo == nil || nodeInfo.Node() == nil { - return false, []algorithm.PredicateFailureReason{ErrNodeUnknownCondition}, nil + return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil } node := nodeInfo.Node() for _, cond := range node.Status.Conditions { // We consider the node for scheduling only when its: // - NodeReady condition status is ConditionTrue, - // - NodeOutOfDisk condition status is ConditionFalse, // - NodeNetworkUnavailable condition status is ConditionFalse. if cond.Type == v1.NodeReady && cond.Status != v1.ConditionTrue { reasons = append(reasons, ErrNodeNotReady) - } else if cond.Type == v1.NodeOutOfDisk && cond.Status != v1.ConditionFalse { - reasons = append(reasons, ErrNodeOutOfDisk) } else if cond.Type == v1.NodeNetworkUnavailable && cond.Status != v1.ConditionFalse { reasons = append(reasons, ErrNodeNetworkUnavailable) } @@ -1604,15 +1641,25 @@ type VolumeBindingChecker struct { // // The predicate returns true if all bound PVCs have compatible PVs with the node, and if all unbound // PVCs can be matched with an available and node-compatible PV. -func NewVolumeBindingPredicate(binder *volumebinder.VolumeBinder) algorithm.FitPredicate { +func NewVolumeBindingPredicate(binder *volumebinder.VolumeBinder) FitPredicate { c := &VolumeBindingChecker{ binder: binder, } return c.predicate } -func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { +func podHasPVCs(pod *v1.Pod) bool { + for _, vol := range pod.Spec.Volumes { + if vol.PersistentVolumeClaim != nil { + return true + } + } + return false +} + +func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) { + // If pod does not request any PVC, we don't need to do anything. + if !podHasPVCs(pod) { return true, nil, nil } @@ -1626,7 +1673,7 @@ func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta algorithm.PredicateMe return false, nil, err } - failReasons := []algorithm.PredicateFailureReason{} + failReasons := []PredicateFailureReason{} if !boundSatisfied { klog.V(5).Infof("Bound PVs not satisfied for pod %v/%v, node %q", pod.Namespace, pod.Name, node.Name) failReasons = append(failReasons, ErrVolumeNodeConflict) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/utils.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/utils.go index de2826a4df4..4080baf91ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/utils.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/utils.go @@ -19,7 +19,7 @@ package predicates import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // FindLabelsInSet gets as many key/value pairs as possible out of a label set. @@ -68,7 +68,7 @@ func CreateSelectorFromLabels(aL map[string]string) labels.Selector { // portsConflict check whether existingPorts and wantPorts conflict with each other // return true if we have a conflict -func portsConflict(existingPorts schedulercache.HostPortInfo, wantPorts []*v1.ContainerPort) bool { +func portsConflict(existingPorts schedulernodeinfo.HostPortInfo, wantPorts []*v1.ContainerPort) bool { for _, cp := range wantPorts { if existingPorts.CheckConflict(cp.HostIP, string(cp.Protocol), cp.HostPort) { return true diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/BUILD index e8a08011f35..ffdac256a90 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/BUILD @@ -18,6 +18,7 @@ go_library( "node_affinity.go", "node_label.go", "node_prefer_avoid_pods.go", + "priorities.go", "reduce.go", "requested_to_capacity_ratio.go", "resource_allocation.go", @@ -25,6 +26,7 @@ go_library( "selector_spreading.go", "taint_toleration.go", "test_util.go", + "types.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities", deps = [ @@ -34,7 +36,7 @@ go_library( "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/parsers:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -55,7 +57,6 @@ go_test( "image_locality_test.go", "interpod_affinity_test.go", "least_requested_test.go", - "main_test.go", "metadata_test.go", "most_requested_test.go", "node_affinity_test.go", @@ -65,20 +66,22 @@ go_test( "resource_limits_test.go", "selector_spreading_test.go", "taint_toleration_test.go", + "types_test.go", ], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", + "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/testing:go_default_library", "//pkg/util/parsers:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/balanced_resource_allocation.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/balanced_resource_allocation.go index ed6b783c142..bf812e0cc0f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/balanced_resource_allocation.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/balanced_resource_allocation.go @@ -20,7 +20,7 @@ import ( "math" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) var ( @@ -36,7 +36,7 @@ var ( BalancedResourceAllocationMap = balancedResourcePriority.PriorityMap ) -func balancedResourceScorer(requested, allocable *schedulercache.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { +func balancedResourceScorer(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { cpuFraction := fractionOfCapacity(requested.MilliCPU, allocable.MilliCPU) memoryFraction := fractionOfCapacity(requested.Memory, allocable.Memory) // This to find a node which has most balanced CPU, memory and volume usage. diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/image_locality.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/image_locality.go index 041e52d4fce..cc1db725ad9 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/image_locality.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/image_locality.go @@ -22,7 +22,7 @@ import ( "k8s.io/api/core/v1" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/kubernetes/pkg/util/parsers" ) @@ -39,7 +39,7 @@ const ( // based on the total size of those images. // - If none of the images are present, this node will be given the lowest priority. // - If some of the images are present on a node, the larger their sizes' sum, the higher the node's priority. -func ImageLocalityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func ImageLocalityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") @@ -74,7 +74,7 @@ func calculatePriority(sumScores int64) int { // sumImageScores returns the sum of image scores of all the containers that are already on the node. // Each image receives a raw score of its size, scaled by scaledImageScore. The raw scores are later used to calculate // the final score. Note that the init containers are not considered for it's rare for users to deploy huge init containers. -func sumImageScores(nodeInfo *schedulercache.NodeInfo, containers []v1.Container, totalNumNodes int) int64 { +func sumImageScores(nodeInfo *schedulernodeinfo.NodeInfo, containers []v1.Container, totalNumNodes int) int64 { var sum int64 imageStates := nodeInfo.ImageStates() @@ -91,7 +91,7 @@ func sumImageScores(nodeInfo *schedulercache.NodeInfo, containers []v1.Container // The size of the image is used as the base score, scaled by a factor which considers how much nodes the image has "spread" to. // This heuristic aims to mitigate the undesirable "node heating problem", i.e., pods get assigned to the same or // a few nodes due to image locality. -func scaledImageScore(imageState *schedulercache.ImageStateSummary, totalNumNodes int) int64 { +func scaledImageScore(imageState *schedulernodeinfo.ImageStateSummary, totalNumNodes int) int64 { spread := float64(imageState.NumNodes) / float64(totalNumNodes) return int64(float64(imageState.Size) * spread) } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/interpod_affinity.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/interpod_affinity.go index 32cf27c83bf..62540a59418 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/interpod_affinity.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/interpod_affinity.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/klog" ) @@ -46,7 +46,7 @@ func NewInterPodAffinityPriority( info predicates.NodeInfo, nodeLister algorithm.NodeLister, podLister algorithm.PodLister, - hardPodAffinityWeight int32) algorithm.PriorityFunction { + hardPodAffinityWeight int32) PriorityFunction { interPodAffinity := &InterPodAffinity{ info: info, nodeLister: nodeLister, @@ -116,7 +116,7 @@ func (p *podAffinityPriorityMap) processTerms(terms []v1.WeightedPodAffinityTerm // that node; the node(s) with the highest sum are the most preferred. // Symmetry need to be considered for preferredDuringSchedulingIgnoredDuringExecution from podAffinity & podAntiAffinity, // symmetry need to be considered for hard requirements from podAffinity -func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { +func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { affinity := pod.Spec.Affinity hasAffinityConstraints := affinity != nil && affinity.PodAffinity != nil hasAntiAffinityConstraints := affinity != nil && affinity.PodAntiAffinity != nil diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/least_requested.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/least_requested.go index d691810896d..e469ee50356 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/least_requested.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/least_requested.go @@ -18,7 +18,7 @@ package priorities import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) var ( @@ -33,7 +33,7 @@ var ( LeastRequestedPriorityMap = leastResourcePriority.PriorityMap ) -func leastResourceScorer(requested, allocable *schedulercache.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { +func leastResourceScorer(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { return (leastRequestedScore(requested.MilliCPU, allocable.MilliCPU) + leastRequestedScore(requested.Memory, allocable.Memory)) / 2 } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/metadata.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/metadata.go index 0771cdca83d..c80fc7d0358 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/metadata.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/metadata.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/kubernetes/pkg/scheduler/algorithm" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // PriorityMetadataFactory is a factory to produce PriorityMetadata. @@ -33,7 +33,7 @@ type PriorityMetadataFactory struct { } // NewPriorityMetadataFactory creates a PriorityMetadataFactory. -func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) algorithm.PriorityMetadataProducer { +func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) PriorityMetadataProducer { factory := &PriorityMetadataFactory{ serviceLister: serviceLister, controllerLister: controllerLister, @@ -45,7 +45,7 @@ func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controlle // priorityMetadata is a type that is passed as metadata for priority functions type priorityMetadata struct { - nonZeroRequest *schedulercache.Resource + nonZeroRequest *schedulernodeinfo.Resource podTolerations []v1.Toleration affinity *v1.Affinity podSelectors []labels.Selector @@ -55,7 +55,7 @@ type priorityMetadata struct { } // PriorityMetadata is a PriorityMetadataProducer. Node info can be nil. -func (pmf *PriorityMetadataFactory) PriorityMetadata(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) interface{} { +func (pmf *PriorityMetadataFactory) PriorityMetadata(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} { // If we cannot compute metadata, just return nil if pod == nil { return nil diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/most_requested.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/most_requested.go index f1cc7c6ad5c..ef9dd3a7283 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/most_requested.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/most_requested.go @@ -18,7 +18,7 @@ package priorities import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) var ( @@ -31,7 +31,7 @@ var ( MostRequestedPriorityMap = mostResourcePriority.PriorityMap ) -func mostResourceScorer(requested, allocable *schedulercache.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { +func mostResourceScorer(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { return (mostRequestedScore(requested.MilliCPU, allocable.MilliCPU) + mostRequestedScore(requested.Memory, allocable.Memory)) / 2 } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_affinity.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_affinity.go index e274e170921..870649d72fb 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_affinity.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_affinity.go @@ -23,15 +23,15 @@ import ( "k8s.io/apimachinery/pkg/labels" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // CalculateNodeAffinityPriorityMap prioritizes nodes according to node affinity scheduling preferences -// indicated in PreferredDuringSchedulingIgnoredDuringExecution. Each time a node match a preferredSchedulingTerm, -// it will a get an add of preferredSchedulingTerm.Weight. Thus, the more preferredSchedulingTerms +// indicated in PreferredDuringSchedulingIgnoredDuringExecution. Each time a node matches a preferredSchedulingTerm, +// it will get an add of preferredSchedulingTerm.Weight. Thus, the more preferredSchedulingTerms // the node satisfies and the more the preferredSchedulingTerm that is satisfied weights, the higher // score the node gets. -func CalculateNodeAffinityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func CalculateNodeAffinityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_label.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_label.go index 82505f788ac..2cedd13142b 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_label.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_label.go @@ -21,9 +21,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // NodeLabelPrioritizer contains information to calculate node label priority. @@ -33,7 +32,7 @@ type NodeLabelPrioritizer struct { } // NewNodeLabelPriority creates a NodeLabelPrioritizer. -func NewNodeLabelPriority(label string, presence bool) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { +func NewNodeLabelPriority(label string, presence bool) (PriorityMapFunction, PriorityReduceFunction) { labelPrioritizer := &NodeLabelPrioritizer{ label: label, presence: presence, @@ -44,7 +43,7 @@ func NewNodeLabelPriority(label string, presence bool) (algorithm.PriorityMapFun // CalculateNodeLabelPriorityMap checks whether a particular label exists on a node or not, regardless of its value. // If presence is true, prioritizes nodes that have the specified label, regardless of value. // If presence is false, prioritizes nodes that do not have the specified label. -func (n *NodeLabelPrioritizer) CalculateNodeLabelPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func (n *NodeLabelPrioritizer) CalculateNodeLabelPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_prefer_avoid_pods.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_prefer_avoid_pods.go index 810face510b..8af4ce15c04 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_prefer_avoid_pods.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/node_prefer_avoid_pods.go @@ -23,12 +23,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // CalculateNodePreferAvoidPodsPriorityMap priorities nodes according to the node annotation // "scheduler.alpha.kubernetes.io/preferAvoidPods". -func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/priorities.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/priorities.go new file mode 100644 index 00000000000..605fdd143e3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/priorities.go @@ -0,0 +1,54 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package priorities + +const ( + // EqualPriority defines the name of prioritizer function that gives an equal weight of one to all nodes. + EqualPriority = "EqualPriority" + // MostRequestedPriority defines the name of prioritizer function that gives used nodes higher priority. + MostRequestedPriority = "MostRequestedPriority" + // RequestedToCapacityRatioPriority defines the name of RequestedToCapacityRatioPriority. + RequestedToCapacityRatioPriority = "RequestedToCapacityRatioPriority" + // SelectorSpreadPriority defines the name of prioritizer function that spreads pods by minimizing + // the number of pods (belonging to the same service or replication controller) on the same node. + SelectorSpreadPriority = "SelectorSpreadPriority" + // ServiceSpreadingPriority is largely replaced by "SelectorSpreadPriority". + ServiceSpreadingPriority = "ServiceSpreadingPriority" + // InterPodAffinityPriority defines the name of prioritizer function that decides which pods should or + // should not be placed in the same topological domain as some other pods. + InterPodAffinityPriority = "InterPodAffinityPriority" + // LeastRequestedPriority defines the name of prioritizer function that prioritize nodes by least + // requested utilization. + LeastRequestedPriority = "LeastRequestedPriority" + // BalancedResourceAllocation defines the name of prioritizer function that prioritizes nodes + // to help achieve balanced resource usage. + BalancedResourceAllocation = "BalancedResourceAllocation" + // NodePreferAvoidPodsPriority defines the name of prioritizer function that priorities nodes according to + // the node annotation "scheduler.alpha.kubernetes.io/preferAvoidPods". + NodePreferAvoidPodsPriority = "NodePreferAvoidPodsPriority" + // NodeAffinityPriority defines the name of prioritizer function that prioritizes nodes which have labels + // matching NodeAffinity. + NodeAffinityPriority = "NodeAffinityPriority" + // TaintTolerationPriority defines the name of prioritizer function that prioritizes nodes that marked + // with taint which pod can tolerate. + TaintTolerationPriority = "TaintTolerationPriority" + // ImageLocalityPriority defines the name of prioritizer function that prioritizes nodes that have images + // requested by the pod present. + ImageLocalityPriority = "ImageLocalityPriority" + // ResourceLimitsPriority defines the nodes of prioritizer function ResourceLimitsPriority. + ResourceLimitsPriority = "ResourceLimitsPriority" +) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/reduce.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/reduce.go index 6a6a7427f1d..416724cbea5 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/reduce.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/reduce.go @@ -18,19 +18,18 @@ package priorities import ( "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // NormalizeReduce generates a PriorityReduceFunction that can normalize the result // scores to [0, maxPriority]. If reverse is set to true, it reverses the scores by // subtracting it from maxPriority. -func NormalizeReduce(maxPriority int, reverse bool) algorithm.PriorityReduceFunction { +func NormalizeReduce(maxPriority int, reverse bool) PriorityReduceFunction { return func( _ *v1.Pod, _ interface{}, - _ map[string]*schedulercache.NodeInfo, + _ map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error { var maxCount int diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/requested_to_capacity_ratio.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/requested_to_capacity_ratio.go index a6ac7a837e8..9337404dd75 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/requested_to_capacity_ratio.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/requested_to_capacity_ratio.go @@ -20,7 +20,7 @@ import ( "fmt" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // FunctionShape represents shape of scoring function. @@ -98,7 +98,7 @@ func RequestedToCapacityRatioResourceAllocationPriority(scoringFunctionShape Fun return &ResourceAllocationPriority{"RequestedToCapacityRatioResourceAllocationPriority", buildRequestedToCapacityRatioScorerFunction(scoringFunctionShape)} } -func buildRequestedToCapacityRatioScorerFunction(scoringFunctionShape FunctionShape) func(*schedulercache.Resource, *schedulercache.Resource, bool, int, int) int64 { +func buildRequestedToCapacityRatioScorerFunction(scoringFunctionShape FunctionShape) func(*schedulernodeinfo.Resource, *schedulernodeinfo.Resource, bool, int, int) int64 { rawScoringFunction := buildBrokenLinearFunction(scoringFunctionShape) resourceScoringFunction := func(requested, capacity int64) int64 { @@ -109,7 +109,7 @@ func buildRequestedToCapacityRatioScorerFunction(scoringFunctionShape FunctionSh return rawScoringFunction(maxUtilization - (capacity-requested)*maxUtilization/capacity) } - return func(requested, allocable *schedulercache.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { + return func(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { cpuScore := resourceScoringFunction(requested.MilliCPU, allocable.MilliCPU) memoryScore := resourceScoringFunction(requested.Memory, allocable.Memory) return (cpuScore + memoryScore) / 2 diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/resource_allocation.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/resource_allocation.go index 80ff9b78969..3d3acb017a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/resource_allocation.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/resource_allocation.go @@ -23,13 +23,13 @@ import ( "k8s.io/klog" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // ResourceAllocationPriority contains information to calculate resource allocation priority. type ResourceAllocationPriority struct { Name string - scorer func(requested, allocable *schedulercache.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 + scorer func(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 } // PriorityMap priorities nodes according to the resource allocations on the node. @@ -37,14 +37,14 @@ type ResourceAllocationPriority struct { func (r *ResourceAllocationPriority) PriorityMap( pod *v1.Pod, meta interface{}, - nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { + nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") } allocatable := nodeInfo.AllocatableResource() - var requested schedulercache.Resource + var requested schedulernodeinfo.Resource if priorityMeta, ok := meta.(*priorityMetadata); ok { requested = *priorityMeta.nonZeroRequest } else { @@ -74,8 +74,8 @@ func (r *ResourceAllocationPriority) PriorityMap( }, nil } -func getNonZeroRequests(pod *v1.Pod) *schedulercache.Resource { - result := &schedulercache.Resource{} +func getNonZeroRequests(pod *v1.Pod) *schedulernodeinfo.Resource { + result := &schedulernodeinfo.Resource{} for i := range pod.Spec.Containers { container := &pod.Spec.Containers[i] cpu, memory := priorityutil.GetNonzeroRequests(&container.Resources.Requests) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/selector_spreading.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/selector_spreading.go index 1371d765a53..3faba83810e 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/selector_spreading.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/selector_spreading.go @@ -23,7 +23,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" utilnode "k8s.io/kubernetes/pkg/util/node" "k8s.io/klog" @@ -46,7 +46,7 @@ func NewSelectorSpreadPriority( serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, - statefulSetLister algorithm.StatefulSetLister) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + statefulSetLister algorithm.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) { selectorSpread := &SelectorSpread{ serviceLister: serviceLister, controllerLister: controllerLister, @@ -63,7 +63,7 @@ func NewSelectorSpreadPriority( // It favors nodes that have fewer existing matching pods. // i.e. it pushes the scheduler towards a node where there's the smallest number of // pods which match the same service, RC,RSs or StatefulSets selectors as the pod being scheduled. -func (s *SelectorSpread) CalculateSpreadPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func (s *SelectorSpread) CalculateSpreadPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { var selectors []labels.Selector node := nodeInfo.Node() if node == nil { @@ -84,29 +84,11 @@ func (s *SelectorSpread) CalculateSpreadPriorityMap(pod *v1.Pod, meta interface{ }, nil } - count := int(0) - for _, nodePod := range nodeInfo.Pods() { - if pod.Namespace != nodePod.Namespace { - continue - } - // When we are replacing a failed pod, we often see the previous - // deleted version while scheduling the replacement. - // Ignore the previous deleted version for spreading purposes - // (it can still be considered for resource restrictions etc.) - if nodePod.DeletionTimestamp != nil { - klog.V(4).Infof("skipping pending-deleted pod: %s/%s", nodePod.Namespace, nodePod.Name) - continue - } - for _, selector := range selectors { - if selector.Matches(labels.Set(nodePod.ObjectMeta.Labels)) { - count++ - break - } - } - } + count := countMatchingPods(pod.Namespace, selectors, nodeInfo) + return schedulerapi.HostPriority{ Host: node.Name, - Score: int(count), + Score: count, }, nil } @@ -114,7 +96,7 @@ func (s *SelectorSpread) CalculateSpreadPriorityMap(pod *v1.Pod, meta interface{ // based on the number of existing matching pods on the node // where zone information is included on the nodes, it favors nodes // in zones with fewer existing matching pods. -func (s *SelectorSpread) CalculateSpreadPriorityReduce(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulercache.NodeInfo, result schedulerapi.HostPriorityList) error { +func (s *SelectorSpread) CalculateSpreadPriorityReduce(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error { countsByZone := make(map[string]int, 10) maxCountByZone := int(0) maxCountByNodeName := int(0) @@ -177,7 +159,7 @@ type ServiceAntiAffinity struct { } // NewServiceAntiAffinityPriority creates a ServiceAntiAffinity. -func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { +func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) { antiAffinity := &ServiceAntiAffinity{ podLister: podLister, serviceLister: serviceLister, @@ -201,24 +183,34 @@ func (s *ServiceAntiAffinity) getNodeClassificationByLabels(nodes []*v1.Node) (m return labeledNodes, nonLabeledNodes } -// filteredPod get pods based on namespace and selector -func filteredPod(namespace string, selector labels.Selector, nodeInfo *schedulercache.NodeInfo) (pods []*v1.Pod) { - if nodeInfo.Pods() == nil || len(nodeInfo.Pods()) == 0 || selector == nil { - return []*v1.Pod{} +// countMatchingPods cout pods based on namespace and matching all selectors +func countMatchingPods(namespace string, selectors []labels.Selector, nodeInfo *schedulernodeinfo.NodeInfo) int { + if nodeInfo.Pods() == nil || len(nodeInfo.Pods()) == 0 || len(selectors) == 0 { + return 0 } + count := 0 for _, pod := range nodeInfo.Pods() { // Ignore pods being deleted for spreading purposes // Similar to how it is done for SelectorSpreadPriority - if namespace == pod.Namespace && pod.DeletionTimestamp == nil && selector.Matches(labels.Set(pod.Labels)) { - pods = append(pods, pod) + if namespace == pod.Namespace && pod.DeletionTimestamp == nil { + matches := true + for _, selector := range selectors { + if !selector.Matches(labels.Set(pod.Labels)) { + matches = false + break + } + } + if matches { + count++ + } } } - return + return count } // CalculateAntiAffinityPriorityMap spreads pods by minimizing the number of pods belonging to the same service // on given machine -func (s *ServiceAntiAffinity) CalculateAntiAffinityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func (s *ServiceAntiAffinity) CalculateAntiAffinityPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { var firstServiceSelector labels.Selector node := nodeInfo.Node() @@ -232,17 +224,21 @@ func (s *ServiceAntiAffinity) CalculateAntiAffinityPriorityMap(pod *v1.Pod, meta firstServiceSelector = getFirstServiceSelector(pod, s.serviceLister) } //pods matched namespace,selector on current node - matchedPodsOfNode := filteredPod(pod.Namespace, firstServiceSelector, nodeInfo) + var selectors []labels.Selector + if firstServiceSelector != nil { + selectors = append(selectors, firstServiceSelector) + } + score := countMatchingPods(pod.Namespace, selectors, nodeInfo) return schedulerapi.HostPriority{ Host: node.Name, - Score: int(len(matchedPodsOfNode)), + Score: score, }, nil } // CalculateAntiAffinityPriorityReduce computes each node score with the same value for a particular label. // The label to be considered is provided to the struct (ServiceAntiAffinity). -func (s *ServiceAntiAffinity) CalculateAntiAffinityPriorityReduce(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulercache.NodeInfo, result schedulerapi.HostPriorityList) error { +func (s *ServiceAntiAffinity) CalculateAntiAffinityPriorityReduce(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error { var numServicePods int var label string podCounts := map[string]int{} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/taint_toleration.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/taint_toleration.go index 5790a4b091a..85be011cabe 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/taint_toleration.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/taint_toleration.go @@ -22,7 +22,7 @@ import ( "k8s.io/api/core/v1" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // CountIntolerableTaintsPreferNoSchedule gives the count of intolerable taints of a pod with effect PreferNoSchedule @@ -52,7 +52,7 @@ func getAllTolerationPreferNoSchedule(tolerations []v1.Toleration) (tolerationLi } // ComputeTaintTolerationPriorityMap prepares the priority list for all the nodes based on the number of intolerable taints on the node -func ComputeTaintTolerationPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func ComputeTaintTolerationPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/test_util.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/test_util.go index da85c6b391b..8c94d0fd6a6 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/test_util.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/test_util.go @@ -20,9 +20,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) func makeNode(node string, milliCPU, memory int64) *v1.Node { @@ -41,8 +40,8 @@ func makeNode(node string, milliCPU, memory int64) *v1.Node { } } -func priorityFunction(mapFn algorithm.PriorityMapFunction, reduceFn algorithm.PriorityReduceFunction, metaData interface{}) algorithm.PriorityFunction { - return func(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { +func priorityFunction(mapFn PriorityMapFunction, reduceFn PriorityReduceFunction, metaData interface{}) PriorityFunction { + return func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { result := make(schedulerapi.HostPriorityList, 0, len(nodes)) for i := range nodes { hostResult, err := mapFn(pod, metaData, nodeNameToInfo[nodes[i].Name]) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/types.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/types.go new file mode 100644 index 00000000000..6c98a780aee --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/types.go @@ -0,0 +1,59 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package priorities + +import ( + "k8s.io/api/core/v1" + schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" +) + +// PriorityMapFunction is a function that computes per-node results for a given node. +// TODO: Figure out the exact API of this method. +// TODO: Change interface{} to a specific type. +type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) + +// PriorityReduceFunction is a function that aggregated per-node results and computes +// final scores for all nodes. +// TODO: Figure out the exact API of this method. +// TODO: Change interface{} to a specific type. +type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error + +// PriorityMetadataProducer is a function that computes metadata for a given pod. This +// is now used for only for priority functions. For predicates please use PredicateMetadataProducer. +type PriorityMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} + +// PriorityFunction is a function that computes scores for all nodes. +// DEPRECATED +// Use Map-Reduce pattern for priority functions. +type PriorityFunction func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) + +// PriorityConfig is a config used for a priority function. +type PriorityConfig struct { + Name string + Map PriorityMapFunction + Reduce PriorityReduceFunction + // TODO: Remove it after migrating all functions to + // Map-Reduce pattern. + Function PriorityFunction + Weight int +} + +// EmptyPriorityMetadataProducer returns a no-op PriorityMetadataProducer type. +func EmptyPriorityMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} { + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/scheduler_interface.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/scheduler_interface.go index d74af089d35..81dedd42928 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/scheduler_interface.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/scheduler_interface.go @@ -19,7 +19,7 @@ package algorithm import ( "k8s.io/api/core/v1" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // SchedulerExtender is an interface for external processes to influence scheduling @@ -33,7 +33,7 @@ type SchedulerExtender interface { // expected to be a subset of the supplied list. failedNodesMap optionally contains // the list of failed nodes and failure reasons. Filter(pod *v1.Pod, - nodes []*v1.Node, nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodes []*v1.Node, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, ) (filteredNodes []*v1.Node, failedNodesMap schedulerapi.FailedNodesMap, err error) // Prioritize based on extender-implemented priority functions. The returned scores & weight @@ -62,7 +62,7 @@ type SchedulerExtender interface { ProcessPreemption( pod *v1.Pod, nodeToVictims map[*v1.Node]*schedulerapi.Victims, - nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, ) (map[*v1.Node]*schedulerapi.Victims, error) // SupportsPreemption returns if the scheduler extender support preemption or not. @@ -72,20 +72,3 @@ type SchedulerExtender interface { // is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well. IsIgnorable() bool } - -// ScheduleAlgorithm is an interface implemented by things that know how to schedule pods -// onto machines. -type ScheduleAlgorithm interface { - Schedule(*v1.Pod, NodeLister) (selectedMachine string, err error) - // Preempt receives scheduling errors for a pod and tries to create room for - // the pod by preempting lower priority pods if possible. - // It returns the node where preemption happened, a list of preempted pods, a - // list of pods whose nominated node name should be removed, and error if any. - Preempt(*v1.Pod, NodeLister, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error) - // Predicates() returns a pointer to a map of predicate functions. This is - // exposed for testing. - Predicates() map[string]FitPredicate - // Prioritizers returns a slice of priority config. This is exposed for - // testing. - Prioritizers() []PriorityConfig -} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/types.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/types.go index f7b54e2d7e6..f7a818a2b9f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/types.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithm/types.go @@ -22,7 +22,6 @@ import ( policyv1beta1 "k8s.io/api/policy/v1beta1" "k8s.io/apimachinery/pkg/labels" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" ) // NodeFieldSelectorKeys is a map that: the key are node field selector keys; the values are @@ -31,59 +30,6 @@ var NodeFieldSelectorKeys = map[string]func(*v1.Node) string{ schedulerapi.NodeFieldSelectorKeyNodeName: func(n *v1.Node) string { return n.Name }, } -// FitPredicate is a function that indicates if a pod fits into an existing node. -// The failure information is given by the error. -type FitPredicate func(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []PredicateFailureReason, error) - -// PriorityMapFunction is a function that computes per-node results for a given node. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) - -// PriorityReduceFunction is a function that aggregated per-node results and computes -// final scores for all nodes. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulercache.NodeInfo, result schedulerapi.HostPriorityList) error - -// PredicateMetadataProducer is a function that computes predicate metadata for a given pod. -type PredicateMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) PredicateMetadata - -// PriorityMetadataProducer is a function that computes metadata for a given pod. This -// is now used for only for priority functions. For predicates please use PredicateMetadataProducer. -type PriorityMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) interface{} - -// PriorityFunction is a function that computes scores for all nodes. -// DEPRECATED -// Use Map-Reduce pattern for priority functions. -type PriorityFunction func(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) - -// PriorityConfig is a config used for a priority function. -type PriorityConfig struct { - Name string - Map PriorityMapFunction - Reduce PriorityReduceFunction - // TODO: Remove it after migrating all functions to - // Map-Reduce pattern. - Function PriorityFunction - Weight int -} - -// EmptyPredicateMetadataProducer returns a no-op MetadataProducer type. -func EmptyPredicateMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) PredicateMetadata { - return nil -} - -// EmptyPriorityMetadataProducer returns a no-op PriorityMetadataProducer type. -func EmptyPriorityMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) interface{} { - return nil -} - -// PredicateFailureReason interface represents the failure reason of a predicate. -type PredicateFailureReason interface { - GetReason() string -} - // NodeLister interface represents anything that can list nodes for a scheduler. type NodeLister interface { // We explicitly return []*v1.Node, instead of v1.NodeList, to avoid @@ -172,10 +118,3 @@ type EmptyStatefulSetLister struct{} func (f EmptyStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*apps.StatefulSet, err error) { return nil, nil } - -// PredicateMetadata interface represents anything that can access a predicate metadata. -type PredicateMetadata interface { - ShallowCopy() PredicateMetadata - AddPod(addedPod *v1.Pod, nodeInfo *schedulercache.NodeInfo) error - RemovePod(deletedPod *v1.Pod) error -} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/BUILD index 1e3a118c9f2..c06cbd716e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/BUILD @@ -15,10 +15,7 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "main_test.go", - "plugins_test.go", - ], + srcs = ["plugins_test.go"], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/BUILD index ae77ea8609c..a13259cdd43 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/BUILD @@ -8,7 +8,11 @@ load( go_library( name = "go_default_library", - srcs = ["defaults.go"], + srcs = [ + "defaults.go", + "register_predicates.go", + "register_priorities.go", + ], importpath = "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults", deps = [ "//pkg/features:go_default_library", @@ -25,25 +29,12 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "compatibility_test.go", - "defaults_test.go", - ], + srcs = ["defaults_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/apis/core/install:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/api/latest:go_default_library", - "//pkg/scheduler/factory:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//pkg/scheduler/algorithm/priorities:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/client-go/informers:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", - "//staging/src/k8s.io/client-go/util/testing:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/defaults.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/defaults.go index b5b74eeacbb..6a6cbc29efa 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/defaults.go @@ -23,10 +23,8 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" - "k8s.io/kubernetes/pkg/scheduler/core" "k8s.io/kubernetes/pkg/scheduler/factory" ) @@ -36,146 +34,25 @@ const ( ) func init() { - // Register functions that extract metadata used by predicates and priorities computations. - factory.RegisterPredicateMetadataProducerFactory( - func(args factory.PluginFactoryArgs) algorithm.PredicateMetadataProducer { - return predicates.NewPredicateMetadataFactory(args.PodLister) - }) - factory.RegisterPriorityMetadataProducerFactory( - func(args factory.PluginFactoryArgs) algorithm.PriorityMetadataProducer { - return priorities.NewPriorityMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) - }) - registerAlgorithmProvider(defaultPredicates(), defaultPriorities()) - - // IMPORTANT NOTES for predicate developers: - // We are using cached predicate result for pods belonging to the same equivalence class. - // So when implementing a new predicate, you are expected to check whether the result - // of your predicate function can be affected by related API object change (ADD/DELETE/UPDATE). - // If yes, you are expected to invalidate the cached predicate result for related API object change. - // For example: - // https://github.com/kubernetes/kubernetes/blob/36a218e/plugin/pkg/scheduler/factory/factory.go#L422 - - // Registers predicates and priorities that are not enabled by default, but user can pick when creating their - // own set of priorities/predicates. - - // PodFitsPorts has been replaced by PodFitsHostPorts for better user understanding. - // For backwards compatibility with 1.0, PodFitsPorts is registered as well. - factory.RegisterFitPredicate("PodFitsPorts", predicates.PodFitsHostPorts) - // Fit is defined based on the absence of port conflicts. - // This predicate is actually a default predicate, because it is invoked from - // predicates.GeneralPredicates() - factory.RegisterFitPredicate(predicates.PodFitsHostPortsPred, predicates.PodFitsHostPorts) - // Fit is determined by resource availability. - // This predicate is actually a default predicate, because it is invoked from - // predicates.GeneralPredicates() - factory.RegisterFitPredicate(predicates.PodFitsResourcesPred, predicates.PodFitsResources) - // Fit is determined by the presence of the Host parameter and a string match - // This predicate is actually a default predicate, because it is invoked from - // predicates.GeneralPredicates() - factory.RegisterFitPredicate(predicates.HostNamePred, predicates.PodFitsHost) - // Fit is determined by node selector query. - factory.RegisterFitPredicate(predicates.MatchNodeSelectorPred, predicates.PodMatchNodeSelector) - - // ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing - // the number of pods (belonging to the same service) on the same node. - // Register the factory so that it's available, but do not include it as part of the default priorities - // Largely replaced by "SelectorSpreadPriority", but registered for backward compatibility with 1.0 - factory.RegisterPriorityConfigFactory( - "ServiceSpreadingPriority", - factory.PriorityConfigFactory{ - MapReduceFunction: func(args factory.PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { - return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{}) - }, - Weight: 1, - }, - ) - // EqualPriority is a prioritizer function that gives an equal weight of one to all nodes - // Register the priority function so that its available - // but do not include it as part of the default priorities - factory.RegisterPriorityFunction2("EqualPriority", core.EqualPriorityMap, nil, 1) - // Optional, cluster-autoscaler friendly priority function - give used nodes higher priority. - factory.RegisterPriorityFunction2("MostRequestedPriority", priorities.MostRequestedPriorityMap, nil, 1) - factory.RegisterPriorityFunction2( - "RequestedToCapacityRatioPriority", - priorities.RequestedToCapacityRatioResourceAllocationPriorityDefault().PriorityMap, - nil, - 1) } func defaultPredicates() sets.String { return sets.NewString( - // Fit is determined by volume zone requirements. - factory.RegisterFitPredicateFactory( - predicates.NoVolumeZoneConflictPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewVolumeZonePredicate(args.PVInfo, args.PVCInfo, args.StorageClassInfo) - }, - ), - // Fit is determined by whether or not there would be too many AWS EBS volumes attached to the node - factory.RegisterFitPredicateFactory( - predicates.MaxEBSVolumeCountPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewMaxPDVolumeCountPredicate(predicates.EBSVolumeFilterType, args.PVInfo, args.PVCInfo) - }, - ), - // Fit is determined by whether or not there would be too many GCE PD volumes attached to the node - factory.RegisterFitPredicateFactory( - predicates.MaxGCEPDVolumeCountPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewMaxPDVolumeCountPredicate(predicates.GCEPDVolumeFilterType, args.PVInfo, args.PVCInfo) - }, - ), - // Fit is determined by whether or not there would be too many Azure Disk volumes attached to the node - factory.RegisterFitPredicateFactory( - predicates.MaxAzureDiskVolumeCountPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewMaxPDVolumeCountPredicate(predicates.AzureDiskVolumeFilterType, args.PVInfo, args.PVCInfo) - }, - ), - factory.RegisterFitPredicateFactory( - predicates.MaxCSIVolumeCountPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewCSIMaxVolumeLimitPredicate(args.PVInfo, args.PVCInfo) - }, - ), - // Fit is determined by inter-pod affinity. - factory.RegisterFitPredicateFactory( - predicates.MatchInterPodAffinityPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewPodAffinityPredicate(args.NodeInfo, args.PodLister) - }, - ), - - // Fit is determined by non-conflicting disk volumes. - factory.RegisterFitPredicate(predicates.NoDiskConflictPred, predicates.NoDiskConflict), - - // GeneralPredicates are the predicates that are enforced by all Kubernetes components - // (e.g. kubelet and all schedulers) - factory.RegisterFitPredicate(predicates.GeneralPred, predicates.GeneralPredicates), - - // Fit is determined by node memory pressure condition. - factory.RegisterFitPredicate(predicates.CheckNodeMemoryPressurePred, predicates.CheckNodeMemoryPressurePredicate), - - // Fit is determined by node disk pressure condition. - factory.RegisterFitPredicate(predicates.CheckNodeDiskPressurePred, predicates.CheckNodeDiskPressurePredicate), - - // Fit is determined by node pid pressure condition. - factory.RegisterFitPredicate(predicates.CheckNodePIDPressurePred, predicates.CheckNodePIDPressurePredicate), - - // Fit is determined by node conditions: not ready, network unavailable or out of disk. - factory.RegisterMandatoryFitPredicate(predicates.CheckNodeConditionPred, predicates.CheckNodeConditionPredicate), - - // Fit is determined based on whether a pod can tolerate all of the node's taints - factory.RegisterFitPredicate(predicates.PodToleratesNodeTaintsPred, predicates.PodToleratesNodeTaints), - - // Fit is determined by volume topology requirements. - factory.RegisterFitPredicateFactory( - predicates.CheckVolumeBindingPred, - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewVolumeBindingPredicate(args.VolumeBinder) - }, - ), + predicates.NoVolumeZoneConflictPred, + predicates.MaxEBSVolumeCountPred, + predicates.MaxGCEPDVolumeCountPred, + predicates.MaxAzureDiskVolumeCountPred, + predicates.MaxCSIVolumeCountPred, + predicates.MatchInterPodAffinityPred, + predicates.NoDiskConflictPred, + predicates.GeneralPred, + predicates.CheckNodeMemoryPressurePred, + predicates.CheckNodeDiskPressurePred, + predicates.CheckNodePIDPressurePred, + predicates.CheckNodeConditionPred, + predicates.PodToleratesNodeTaintsPred, + predicates.CheckVolumeBindingPred, ) } @@ -217,51 +94,19 @@ func registerAlgorithmProvider(predSet, priSet sets.String) { factory.RegisterAlgorithmProvider(factory.DefaultProvider, predSet, priSet) // Cluster autoscaler friendly scheduling algorithm. factory.RegisterAlgorithmProvider(ClusterAutoscalerProvider, predSet, - copyAndReplace(priSet, "LeastRequestedPriority", "MostRequestedPriority")) + copyAndReplace(priSet, priorities.LeastRequestedPriority, priorities.MostRequestedPriority)) } func defaultPriorities() sets.String { return sets.NewString( - // spreads pods by minimizing the number of pods (belonging to the same service or replication controller) on the same node. - factory.RegisterPriorityConfigFactory( - "SelectorSpreadPriority", - factory.PriorityConfigFactory{ - MapReduceFunction: func(args factory.PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { - return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) - }, - Weight: 1, - }, - ), - // pods should be placed in the same topological domain (e.g. same node, same rack, same zone, same power domain, etc.) - // as some other pods, or, conversely, should not be placed in the same topological domain as some other pods. - factory.RegisterPriorityConfigFactory( - "InterPodAffinityPriority", - factory.PriorityConfigFactory{ - Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction { - return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight) - }, - Weight: 1, - }, - ), - - // Prioritize nodes by least requested utilization. - factory.RegisterPriorityFunction2("LeastRequestedPriority", priorities.LeastRequestedPriorityMap, nil, 1), - - // Prioritizes nodes to help achieve balanced resource usage - factory.RegisterPriorityFunction2("BalancedResourceAllocation", priorities.BalancedResourceAllocationMap, nil, 1), - - // Set this weight large enough to override all other priority functions. - // TODO: Figure out a better way to do this, maybe at same time as fixing #24720. - factory.RegisterPriorityFunction2("NodePreferAvoidPodsPriority", priorities.CalculateNodePreferAvoidPodsPriorityMap, nil, 10000), - - // Prioritizes nodes that have labels matching NodeAffinity - factory.RegisterPriorityFunction2("NodeAffinityPriority", priorities.CalculateNodeAffinityPriorityMap, priorities.CalculateNodeAffinityPriorityReduce, 1), - - // Prioritizes nodes that marked with taint which pod can tolerate. - factory.RegisterPriorityFunction2("TaintTolerationPriority", priorities.ComputeTaintTolerationPriorityMap, priorities.ComputeTaintTolerationPriorityReduce, 1), - - // ImageLocalityPriority prioritizes nodes that have images requested by the pod present. - factory.RegisterPriorityFunction2("ImageLocalityPriority", priorities.ImageLocalityPriorityMap, nil, 1), + priorities.SelectorSpreadPriority, + priorities.InterPodAffinityPriority, + priorities.LeastRequestedPriority, + priorities.BalancedResourceAllocation, + priorities.NodePreferAvoidPodsPriority, + priorities.NodeAffinityPriority, + priorities.TaintTolerationPriority, + priorities.ImageLocalityPriority, ) } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_predicates.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_predicates.go new file mode 100644 index 00000000000..3abf397c17e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_predicates.go @@ -0,0 +1,131 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package defaults + +import ( + "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/factory" +) + +func init() { + // Register functions that extract metadata used by predicates computations. + factory.RegisterPredicateMetadataProducerFactory( + func(args factory.PluginFactoryArgs) predicates.PredicateMetadataProducer { + return predicates.NewPredicateMetadataFactory(args.PodLister) + }) + + // IMPORTANT NOTES for predicate developers: + // Registers predicates and priorities that are not enabled by default, but user can pick when creating their + // own set of priorities/predicates. + + // PodFitsPorts has been replaced by PodFitsHostPorts for better user understanding. + // For backwards compatibility with 1.0, PodFitsPorts is registered as well. + factory.RegisterFitPredicate("PodFitsPorts", predicates.PodFitsHostPorts) + // Fit is defined based on the absence of port conflicts. + // This predicate is actually a default predicate, because it is invoked from + // predicates.GeneralPredicates() + factory.RegisterFitPredicate(predicates.PodFitsHostPortsPred, predicates.PodFitsHostPorts) + // Fit is determined by resource availability. + // This predicate is actually a default predicate, because it is invoked from + // predicates.GeneralPredicates() + factory.RegisterFitPredicate(predicates.PodFitsResourcesPred, predicates.PodFitsResources) + // Fit is determined by the presence of the Host parameter and a string match + // This predicate is actually a default predicate, because it is invoked from + // predicates.GeneralPredicates() + factory.RegisterFitPredicate(predicates.HostNamePred, predicates.PodFitsHost) + // Fit is determined by node selector query. + factory.RegisterFitPredicate(predicates.MatchNodeSelectorPred, predicates.PodMatchNodeSelector) + + // Fit is determined by volume zone requirements. + factory.RegisterFitPredicateFactory( + predicates.NoVolumeZoneConflictPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewVolumeZonePredicate(args.PVInfo, args.PVCInfo, args.StorageClassInfo) + }, + ) + // Fit is determined by whether or not there would be too many AWS EBS volumes attached to the node + factory.RegisterFitPredicateFactory( + predicates.MaxEBSVolumeCountPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewMaxPDVolumeCountPredicate(predicates.EBSVolumeFilterType, args.PVInfo, args.PVCInfo) + }, + ) + // Fit is determined by whether or not there would be too many GCE PD volumes attached to the node + factory.RegisterFitPredicateFactory( + predicates.MaxGCEPDVolumeCountPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewMaxPDVolumeCountPredicate(predicates.GCEPDVolumeFilterType, args.PVInfo, args.PVCInfo) + }, + ) + // Fit is determined by whether or not there would be too many Azure Disk volumes attached to the node + factory.RegisterFitPredicateFactory( + predicates.MaxAzureDiskVolumeCountPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewMaxPDVolumeCountPredicate(predicates.AzureDiskVolumeFilterType, args.PVInfo, args.PVCInfo) + }, + ) + factory.RegisterFitPredicateFactory( + predicates.MaxCSIVolumeCountPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewCSIMaxVolumeLimitPredicate(args.PVInfo, args.PVCInfo) + }, + ) + factory.RegisterFitPredicateFactory( + predicates.MaxCinderVolumeCountPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewMaxPDVolumeCountPredicate(predicates.CinderVolumeFilterType, args.PVInfo, args.PVCInfo) + }, + ) + + // Fit is determined by inter-pod affinity. + factory.RegisterFitPredicateFactory( + predicates.MatchInterPodAffinityPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewPodAffinityPredicate(args.NodeInfo, args.PodLister) + }, + ) + + // Fit is determined by non-conflicting disk volumes. + factory.RegisterFitPredicate(predicates.NoDiskConflictPred, predicates.NoDiskConflict) + + // GeneralPredicates are the predicates that are enforced by all Kubernetes components + // (e.g. kubelet and all schedulers) + factory.RegisterFitPredicate(predicates.GeneralPred, predicates.GeneralPredicates) + + // Fit is determined by node memory pressure condition. + factory.RegisterFitPredicate(predicates.CheckNodeMemoryPressurePred, predicates.CheckNodeMemoryPressurePredicate) + + // Fit is determined by node disk pressure condition. + factory.RegisterFitPredicate(predicates.CheckNodeDiskPressurePred, predicates.CheckNodeDiskPressurePredicate) + + // Fit is determined by node pid pressure condition. + factory.RegisterFitPredicate(predicates.CheckNodePIDPressurePred, predicates.CheckNodePIDPressurePredicate) + + // Fit is determined by node conditions: not ready, network unavailable or out of disk. + factory.RegisterMandatoryFitPredicate(predicates.CheckNodeConditionPred, predicates.CheckNodeConditionPredicate) + + // Fit is determined based on whether a pod can tolerate all of the node's taints + factory.RegisterFitPredicate(predicates.PodToleratesNodeTaintsPred, predicates.PodToleratesNodeTaints) + + // Fit is determined by volume topology requirements. + factory.RegisterFitPredicateFactory( + predicates.CheckVolumeBindingPred, + func(args factory.PluginFactoryArgs) predicates.FitPredicate { + return predicates.NewVolumeBindingPredicate(args.VolumeBinder) + }, + ) +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_priorities.go b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_priorities.go new file mode 100644 index 00000000000..afe54da77d6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults/register_priorities.go @@ -0,0 +1,97 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package defaults + +import ( + "k8s.io/kubernetes/pkg/scheduler/algorithm" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" + "k8s.io/kubernetes/pkg/scheduler/core" + "k8s.io/kubernetes/pkg/scheduler/factory" +) + +func init() { + // Register functions that extract metadata used by priorities computations. + factory.RegisterPriorityMetadataProducerFactory( + func(args factory.PluginFactoryArgs) priorities.PriorityMetadataProducer { + return priorities.NewPriorityMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) + }) + + // ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing + // the number of pods (belonging to the same service) on the same node. + // Register the factory so that it's available, but do not include it as part of the default priorities + // Largely replaced by "SelectorSpreadPriority", but registered for backward compatibility with 1.0 + factory.RegisterPriorityConfigFactory( + priorities.ServiceSpreadingPriority, + factory.PriorityConfigFactory{ + MapReduceFunction: func(args factory.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { + return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{}) + }, + Weight: 1, + }, + ) + // EqualPriority is a prioritizer function that gives an equal weight of one to all nodes + // Register the priority function so that its available + // but do not include it as part of the default priorities + factory.RegisterPriorityFunction2(priorities.EqualPriority, core.EqualPriorityMap, nil, 1) + // Optional, cluster-autoscaler friendly priority function - give used nodes higher priority. + factory.RegisterPriorityFunction2(priorities.MostRequestedPriority, priorities.MostRequestedPriorityMap, nil, 1) + factory.RegisterPriorityFunction2( + priorities.RequestedToCapacityRatioPriority, + priorities.RequestedToCapacityRatioResourceAllocationPriorityDefault().PriorityMap, + nil, + 1) + // spreads pods by minimizing the number of pods (belonging to the same service or replication controller) on the same node. + factory.RegisterPriorityConfigFactory( + priorities.SelectorSpreadPriority, + factory.PriorityConfigFactory{ + MapReduceFunction: func(args factory.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { + return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) + }, + Weight: 1, + }, + ) + // pods should be placed in the same topological domain (e.g. same node, same rack, same zone, same power domain, etc.) + // as some other pods, or, conversely, should not be placed in the same topological domain as some other pods. + factory.RegisterPriorityConfigFactory( + priorities.InterPodAffinityPriority, + factory.PriorityConfigFactory{ + Function: func(args factory.PluginFactoryArgs) priorities.PriorityFunction { + return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight) + }, + Weight: 1, + }, + ) + + // Prioritize nodes by least requested utilization. + factory.RegisterPriorityFunction2(priorities.LeastRequestedPriority, priorities.LeastRequestedPriorityMap, nil, 1) + + // Prioritizes nodes to help achieve balanced resource usage + factory.RegisterPriorityFunction2(priorities.BalancedResourceAllocation, priorities.BalancedResourceAllocationMap, nil, 1) + + // Set this weight large enough to override all other priority functions. + // TODO: Figure out a better way to do this, maybe at same time as fixing #24720. + factory.RegisterPriorityFunction2(priorities.NodePreferAvoidPodsPriority, priorities.CalculateNodePreferAvoidPodsPriorityMap, nil, 10000) + + // Prioritizes nodes that have labels matching NodeAffinity + factory.RegisterPriorityFunction2(priorities.NodeAffinityPriority, priorities.CalculateNodeAffinityPriorityMap, priorities.CalculateNodeAffinityPriorityReduce, 1) + + // Prioritizes nodes that marked with taint which pod can tolerate. + factory.RegisterPriorityFunction2(priorities.TaintTolerationPriority, priorities.ComputeTaintTolerationPriorityMap, priorities.ComputeTaintTolerationPriorityReduce, 1) + + // ImageLocalityPriority prioritizes nodes that have images requested by the pod present. + factory.RegisterPriorityFunction2(priorities.ImageLocalityPriority, priorities.ImageLocalityPriorityMap, nil, 1) +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/api/BUILD index 0f6361b6a62..da8f819eea2 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/BUILD @@ -22,7 +22,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", ], ) @@ -37,6 +36,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//pkg/scheduler/api/compatibility:all-srcs", "//pkg/scheduler/api/latest:all-srcs", "//pkg/scheduler/api/v1:all-srcs", "//pkg/scheduler/api/validation:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/types.go b/vendor/k8s.io/kubernetes/pkg/scheduler/api/types.go index 3bffc216376..5e958aadf0f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/types.go @@ -22,7 +22,6 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - restclient "k8s.io/client-go/rest" ) const ( @@ -172,6 +171,33 @@ type ExtenderManagedResource struct { IgnoredByScheduler bool } +// ExtenderTLSConfig contains settings to enable TLS with extender +type ExtenderTLSConfig struct { + // Server should be accessed without verifying the TLS certificate. For testing only. + Insecure bool + // ServerName is passed to the server for SNI and is used in the client to check server + // certificates against. If ServerName is empty, the hostname used to contact the + // server is used. + ServerName string + + // Server requires TLS client certificate authentication + CertFile string + // Server requires TLS client certificate authentication + KeyFile string + // Trusted root certificates for server + CAFile string + + // CertData holds PEM-encoded bytes (typically read from a client certificate file). + // CertData takes precedence over CertFile + CertData []byte + // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). + // KeyData takes precedence over KeyFile + KeyData []byte + // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). + // CAData takes precedence over CAFile + CAData []byte +} + // ExtenderConfig holds the parameters used to communicate with the extender. If a verb is unspecified/empty, // it is assumed that the extender chose not to provide that extension. type ExtenderConfig struct { @@ -193,7 +219,7 @@ type ExtenderConfig struct { // EnableHTTPS specifies whether https should be used to communicate with the extender EnableHTTPS bool // TLSConfig specifies the transport layer security config - TLSConfig *restclient.TLSClientConfig + TLSConfig *ExtenderTLSConfig // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize // timeout is ignored, k8s/other extenders priorities are used to select the node. HTTPTimeout time.Duration diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/BUILD index 7c911c9ece5..85d53c672ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/BUILD @@ -21,7 +21,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/types.go b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/types.go index 10ea29bb322..f933a6c5174 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/types.go @@ -23,7 +23,6 @@ import ( apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - restclient "k8s.io/client-go/rest" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -152,6 +151,33 @@ type ExtenderManagedResource struct { IgnoredByScheduler bool `json:"ignoredByScheduler,omitempty"` } +// ExtenderTLSConfig contains settings to enable TLS with extender +type ExtenderTLSConfig struct { + // Server should be accessed without verifying the TLS certificate. For testing only. + Insecure bool `json:"insecure,omitempty"` + // ServerName is passed to the server for SNI and is used in the client to check server + // certificates against. If ServerName is empty, the hostname used to contact the + // server is used. + ServerName string `json:"serverName,omitempty"` + + // Server requires TLS client certificate authentication + CertFile string `json:"certFile,omitempty"` + // Server requires TLS client certificate authentication + KeyFile string `json:"keyFile,omitempty"` + // Trusted root certificates for server + CAFile string `json:"caFile,omitempty"` + + // CertData holds PEM-encoded bytes (typically read from a client certificate file). + // CertData takes precedence over CertFile + CertData []byte `json:"certData,omitempty"` + // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). + // KeyData takes precedence over KeyFile + KeyData []byte `json:"keyData,omitempty"` + // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). + // CAData takes precedence over CAFile + CAData []byte `json:"caData,omitempty"` +} + // ExtenderConfig holds the parameters used to communicate with the extender. If a verb is unspecified/empty, // it is assumed that the extender chose not to provide that extension. type ExtenderConfig struct { @@ -169,11 +195,11 @@ type ExtenderConfig struct { // Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. // If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender // can implement this function. - BindVerb string + BindVerb string `json:"bindVerb,omitempty"` // EnableHTTPS specifies whether https should be used to communicate with the extender EnableHTTPS bool `json:"enableHttps,omitempty"` // TLSConfig specifies the transport layer security config - TLSConfig *restclient.TLSClientConfig `json:"tlsConfig,omitempty"` + TLSConfig *ExtenderTLSConfig `json:"tlsConfig,omitempty"` // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize // timeout is ignored, k8s/other extenders priorities are used to select the node. HTTPTimeout time.Duration `json:"httpTimeout,omitempty"` diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/zz_generated.deepcopy.go index 7fc885f9460..b201de16a0c 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/v1/zz_generated.deepcopy.go @@ -23,7 +23,6 @@ package v1 import ( corev1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" - rest "k8s.io/client-go/rest" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -98,7 +97,7 @@ func (in *ExtenderConfig) DeepCopyInto(out *ExtenderConfig) { *out = *in if in.TLSConfig != nil { in, out := &in.TLSConfig, &out.TLSConfig - *out = new(rest.TLSClientConfig) + *out = new(ExtenderTLSConfig) (*in).DeepCopyInto(*out) } if in.ManagedResources != nil { @@ -254,6 +253,37 @@ func (in *ExtenderPreemptionResult) DeepCopy() *ExtenderPreemptionResult { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExtenderTLSConfig) DeepCopyInto(out *ExtenderTLSConfig) { + *out = *in + if in.CertData != nil { + in, out := &in.CertData, &out.CertData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.KeyData != nil { + in, out := &in.KeyData, &out.KeyData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.CAData != nil { + in, out := &in.CAData, &out.CAData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtenderTLSConfig. +func (in *ExtenderTLSConfig) DeepCopy() *ExtenderTLSConfig { + if in == nil { + return nil + } + out := new(ExtenderTLSConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in FailedNodesMap) DeepCopyInto(out *FailedNodesMap) { { diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/well_known_labels.go b/vendor/k8s.io/kubernetes/pkg/scheduler/api/well_known_labels.go index afe64dd50f7..e79722e1d82 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/well_known_labels.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/well_known_labels.go @@ -26,30 +26,17 @@ const ( // and removed when node becomes ready. TaintNodeNotReady = "node.kubernetes.io/not-ready" - // DeprecatedTaintNodeNotReady is the deprecated version of TaintNodeNotReady. - // It is deprecated since 1.9 - DeprecatedTaintNodeNotReady = "node.alpha.kubernetes.io/notReady" - // TaintNodeUnreachable will be added when node becomes unreachable // (corresponding to NodeReady status ConditionUnknown) // and feature-gate for TaintBasedEvictions flag is enabled, // and removed when node becomes reachable (NodeReady status ConditionTrue). TaintNodeUnreachable = "node.kubernetes.io/unreachable" - // DeprecatedTaintNodeUnreachable is the deprecated version of TaintNodeUnreachable. - // It is deprecated since 1.9 - DeprecatedTaintNodeUnreachable = "node.alpha.kubernetes.io/unreachable" - // TaintNodeUnschedulable will be added when node becomes unschedulable // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node becomes scheduable. TaintNodeUnschedulable = "node.kubernetes.io/unschedulable" - // TaintNodeOutOfDisk will be added when node becomes out of disk - // and feature-gate for TaintNodesByCondition flag is enabled, - // and removed when node has enough disk. - TaintNodeOutOfDisk = "node.kubernetes.io/out-of-disk" - // TaintNodeMemoryPressure will be added when node has memory pressure // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node has enough memory. diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/api/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/scheduler/api/zz_generated.deepcopy.go index 418c78cd1e1..30c10135151 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/api/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/api/zz_generated.deepcopy.go @@ -23,7 +23,6 @@ package api import ( v1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" - rest "k8s.io/client-go/rest" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -98,7 +97,7 @@ func (in *ExtenderConfig) DeepCopyInto(out *ExtenderConfig) { *out = *in if in.TLSConfig != nil { in, out := &in.TLSConfig, &out.TLSConfig - *out = new(rest.TLSClientConfig) + *out = new(ExtenderTLSConfig) (*in).DeepCopyInto(*out) } if in.ManagedResources != nil { @@ -254,6 +253,37 @@ func (in *ExtenderPreemptionResult) DeepCopy() *ExtenderPreemptionResult { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExtenderTLSConfig) DeepCopyInto(out *ExtenderTLSConfig) { + *out = *in + if in.CertData != nil { + in, out := &in.CertData, &out.CertData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.KeyData != nil { + in, out := &in.KeyData, &out.KeyData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.CAData != nil { + in, out := &in.CAData, &out.CAData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtenderTLSConfig. +func (in *ExtenderTLSConfig) DeepCopy() *ExtenderTLSConfig { + if in == nil { + return nil + } + out := new(ExtenderTLSConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in FailedNodesMap) DeepCopyInto(out *FailedNodesMap) { { diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/BUILD index f5b97f39462..7abec4f1794 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/BUILD @@ -11,11 +11,10 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/apis/config", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/OWNERS b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/OWNERS old mode 100755 new mode 100644 index 1efb6b4a64c..17b616c71cc --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - api-approvers - sig-scheduling-maintainers diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go index 1c5fee16b8b..f855b7c34af 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go @@ -17,9 +17,8 @@ limitations under the License. package config import ( - apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apiserverconfig "k8s.io/apiserver/pkg/apis/config" + componentbaseconfig "k8s.io/component-base/config" ) const ( @@ -58,7 +57,7 @@ type KubeSchedulerConfiguration struct { // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection apimachineryconfig.ClientConnectionConfiguration + ClientConnection componentbaseconfig.ClientConnectionConfiguration // HealthzBindAddress is the IP address and port for the health check server to serve on, // defaulting to 0.0.0.0:10251 HealthzBindAddress string @@ -67,8 +66,8 @@ type KubeSchedulerConfiguration struct { MetricsBindAddress string // DebuggingConfiguration holds configuration for Debugging related features - // TODO: We might wanna make this a substruct like Debugging apiserverconfig.DebuggingConfiguration - apiserverconfig.DebuggingConfiguration + // TODO: We might wanna make this a substruct like Debugging componentbaseconfig.DebuggingConfiguration + componentbaseconfig.DebuggingConfiguration // DisablePreemption disables the pod preemption feature. DisablePreemption bool @@ -79,7 +78,8 @@ type KubeSchedulerConfiguration struct { // at least "minFeasibleNodesToFind" feasible nodes no matter what the value of this flag is. // Example: if the cluster size is 500 nodes and the value of this flag is 30, // then scheduler stops finding further feasible nodes once it finds 150 feasible ones. - // When the value is 0, default percentage (50%) of the nodes will be scored. + // When the value is 0, default percentage (5%--50% based on the size of the cluster) of the + // nodes will be scored. PercentageOfNodesToScore int32 // DEPRECATED. @@ -129,7 +129,7 @@ type SchedulerPolicyConfigMapSource struct { // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration // to include scheduler specific configuration. type KubeSchedulerLeaderElectionConfiguration struct { - apiserverconfig.LeaderElectionConfiguration + componentbaseconfig.LeaderElectionConfiguration // LockObjectNamespace defines the namespace of the lock object LockObjectNamespace string // LockObjectName defines the lock object name diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/BUILD index 7bf49bb7945..87559a24756 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/BUILD @@ -14,14 +14,13 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config/v1alpha1:go_default_library", + "//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library", "//staging/src/k8s.io/kube-scheduler/config/v1alpha1:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/defaults.go b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/defaults.go index e212dcf4370..9fa898f5446 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/defaults.go @@ -20,16 +20,20 @@ import ( "net" "strconv" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" kubescedulerconfigv1alpha1 "k8s.io/kube-scheduler/config/v1alpha1" // this package shouldn't really depend on other k8s.io/kubernetes code api "k8s.io/kubernetes/pkg/apis/core" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/master/ports" ) +// When the --failure-domains scheduler flag is not specified, +// DefaultFailureDomains defines the set of label keys used when TopologyKey is empty in PreferredDuringScheduling anti-affinity. +var defaultFailureDomains string = v1.LabelHostname + "," + v1.LabelZoneFailureDomain + "," + v1.LabelZoneRegion + func addDefaultingFuncs(scheme *runtime.Scheme) error { return RegisterDefaults(scheme) } @@ -81,13 +85,8 @@ func SetDefaults_KubeSchedulerConfiguration(obj *kubescedulerconfigv1alpha1.Kube obj.LeaderElection.LockObjectName = kubescedulerconfigv1alpha1.SchedulerDefaultLockObjectName } - if obj.PercentageOfNodesToScore == 0 { - // by default, stop finding feasible nodes once the number of feasible nodes is 50% of the cluster. - obj.PercentageOfNodesToScore = 50 - } - if len(obj.FailureDomains) == 0 { - obj.FailureDomains = kubeletapis.DefaultFailureDomains + obj.FailureDomains = defaultFailureDomains } if len(obj.ClientConnection.ContentType) == 0 { @@ -102,7 +101,7 @@ func SetDefaults_KubeSchedulerConfiguration(obj *kubescedulerconfigv1alpha1.Kube } // Use the default LeaderElectionConfiguration options - apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection.LeaderElectionConfiguration) + componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection.LeaderElectionConfiguration) if obj.BindTimeoutSeconds == nil { defaultBindTimeoutSeconds := int64(600) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/zz_generated.conversion.go index e926bf835f8..9eca1a1f257 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1alpha1/zz_generated.conversion.go @@ -23,10 +23,9 @@ package v1alpha1 import ( unsafe "unsafe" - configv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" - apisconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" + configv1alpha1 "k8s.io/component-base/config/v1alpha1" v1alpha1 "k8s.io/kube-scheduler/config/v1alpha1" config "k8s.io/kubernetes/pkg/scheduler/apis/config" ) @@ -115,7 +114,7 @@ func autoConvert_v1alpha1_KubeSchedulerConfiguration_To_config_KubeSchedulerConf } out.HealthzBindAddress = in.HealthzBindAddress out.MetricsBindAddress = in.MetricsBindAddress - if err := apisconfigv1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { + if err := configv1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { return err } out.DisablePreemption = in.DisablePreemption @@ -144,7 +143,7 @@ func autoConvert_config_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConf } out.HealthzBindAddress = in.HealthzBindAddress out.MetricsBindAddress = in.MetricsBindAddress - if err := apisconfigv1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { + if err := configv1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { return err } out.DisablePreemption = in.DisablePreemption @@ -160,7 +159,7 @@ func Convert_config_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfigur } func autoConvert_v1alpha1_KubeSchedulerLeaderElectionConfiguration_To_config_KubeSchedulerLeaderElectionConfiguration(in *v1alpha1.KubeSchedulerLeaderElectionConfiguration, out *config.KubeSchedulerLeaderElectionConfiguration, s conversion.Scope) error { - if err := apisconfigv1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElectionConfiguration, &out.LeaderElectionConfiguration, s); err != nil { + if err := configv1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElectionConfiguration, &out.LeaderElectionConfiguration, s); err != nil { return err } out.LockObjectNamespace = in.LockObjectNamespace @@ -174,7 +173,7 @@ func Convert_v1alpha1_KubeSchedulerLeaderElectionConfiguration_To_config_KubeSch } func autoConvert_config_KubeSchedulerLeaderElectionConfiguration_To_v1alpha1_KubeSchedulerLeaderElectionConfiguration(in *config.KubeSchedulerLeaderElectionConfiguration, out *v1alpha1.KubeSchedulerLeaderElectionConfiguration, s conversion.Scope) error { - if err := apisconfigv1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElectionConfiguration, &out.LeaderElectionConfiguration, s); err != nil { + if err := configv1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElectionConfiguration, &out.LeaderElectionConfiguration, s); err != nil { return err } out.LockObjectNamespace = in.LockObjectNamespace diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/BUILD index 8af91c18043..2cc049d0409 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/BUILD @@ -7,10 +7,9 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/scheduler/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config/validation:go_default_library", + "//staging/src/k8s.io/component-base/config/validation:go_default_library", ], ) @@ -20,9 +19,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/apis/config:go_default_library", + "//staging/src/k8s.io/component-base/config:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go index 00fff14b430..0d44db9cd8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go @@ -17,17 +17,16 @@ limitations under the License. package validation import ( - apimachinery "k8s.io/apimachinery/pkg/apis/config/validation" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" - apiserver "k8s.io/apiserver/pkg/apis/config/validation" + componentbasevalidation "k8s.io/component-base/config/validation" "k8s.io/kubernetes/pkg/scheduler/apis/config" ) // ValidateKubeSchedulerConfiguration ensures validation of the KubeSchedulerConfiguration struct func ValidateKubeSchedulerConfiguration(cc *config.KubeSchedulerConfiguration) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apimachinery.ValidateClientConnectionConfiguration(&cc.ClientConnection, field.NewPath("clientConnection"))...) + allErrs = append(allErrs, componentbasevalidation.ValidateClientConnectionConfiguration(&cc.ClientConnection, field.NewPath("clientConnection"))...) allErrs = append(allErrs, ValidateKubeSchedulerLeaderElectionConfiguration(&cc.LeaderElection, field.NewPath("leaderElection"))...) if len(cc.SchedulerName) == 0 { allErrs = append(allErrs, field.Required(field.NewPath("schedulerName"), "")) @@ -57,7 +56,7 @@ func ValidateKubeSchedulerLeaderElectionConfiguration(cc *config.KubeSchedulerLe if !cc.LeaderElectionConfiguration.LeaderElect { return allErrs } - allErrs = append(allErrs, apiserver.ValidateLeaderElectionConfiguration(&cc.LeaderElectionConfiguration, field.NewPath("leaderElectionConfiguration"))...) + allErrs = append(allErrs, componentbasevalidation.ValidateLeaderElectionConfiguration(&cc.LeaderElectionConfiguration, field.NewPath("leaderElectionConfiguration"))...) if len(cc.LockObjectNamespace) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("lockObjectNamespace"), "")) } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/core/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/core/BUILD index 7df943d3f7e..64b582126bb 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/core/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/core/BUILD @@ -11,12 +11,13 @@ go_library( deps = [ "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", + "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", - "//pkg/scheduler/core/equivalence:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/metrics:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", + "//pkg/scheduler/plugins/v1alpha1:go_default_library", "//pkg/scheduler/util:go_default_library", "//pkg/scheduler/volumebinder:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -26,11 +27,11 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) @@ -47,10 +48,10 @@ go_test( "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/cache:go_default_library", - "//pkg/scheduler/core/equivalence:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", + "//pkg/scheduler/plugins/v1alpha1:go_default_library", "//pkg/scheduler/testing:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", @@ -73,10 +74,7 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/scheduler/core/equivalence:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], visibility = ["//visibility:public"], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/core/extender.go b/vendor/k8s.io/kubernetes/pkg/scheduler/core/extender.go index 9053a2e4ea2..5f1c306b500 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/core/extender.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/core/extender.go @@ -30,7 +30,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) const ( @@ -55,7 +55,14 @@ type HTTPExtender struct { func makeTransport(config *schedulerapi.ExtenderConfig) (http.RoundTripper, error) { var cfg restclient.Config if config.TLSConfig != nil { - cfg.TLSClientConfig = *config.TLSConfig + cfg.TLSClientConfig.Insecure = config.TLSConfig.Insecure + cfg.TLSClientConfig.ServerName = config.TLSConfig.ServerName + cfg.TLSClientConfig.CertFile = config.TLSConfig.CertFile + cfg.TLSClientConfig.KeyFile = config.TLSConfig.KeyFile + cfg.TLSClientConfig.CAFile = config.TLSConfig.CAFile + cfg.TLSClientConfig.CertData = config.TLSConfig.CertData + cfg.TLSClientConfig.KeyData = config.TLSConfig.KeyData + cfg.TLSClientConfig.CAData = config.TLSConfig.CAData } if config.EnableHTTPS { hasCA := len(cfg.CAFile) > 0 || len(cfg.CAData) > 0 @@ -107,7 +114,7 @@ func NewHTTPExtender(config *schedulerapi.ExtenderConfig) (algorithm.SchedulerEx }, nil } -// Name returns extenderURL to identifies the extender. +// Name returns extenderURL to identify the extender. func (h *HTTPExtender) Name() string { return h.extenderURL } @@ -118,8 +125,8 @@ func (h *HTTPExtender) IsIgnorable() bool { return h.ignorable } -// SupportsPreemption returns if a extender support preemption. -// A extender should have preempt verb defined and enabled its own node cache. +// SupportsPreemption returns true if an extender supports preemption. +// An extender should have preempt verb defined and enabled its own node cache. func (h *HTTPExtender) SupportsPreemption() bool { return len(h.preemptVerb) > 0 } @@ -128,7 +135,7 @@ func (h *HTTPExtender) SupportsPreemption() bool { func (h *HTTPExtender) ProcessPreemption( pod *v1.Pod, nodeToVictims map[*v1.Node]*schedulerapi.Victims, - nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, ) (map[*v1.Node]*schedulerapi.Victims, error) { var ( result schedulerapi.ExtenderPreemptionResult @@ -172,7 +179,7 @@ func (h *HTTPExtender) ProcessPreemption( // such as UIDs and names, to object pointers. func (h *HTTPExtender) convertToNodeToVictims( nodeNameToMetaVictims map[string]*schedulerapi.MetaVictims, - nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, ) (map[*v1.Node]*schedulerapi.Victims, error) { nodeToVictims := map[*v1.Node]*schedulerapi.Victims{} for nodeName, metaVictims := range nodeNameToMetaVictims { @@ -198,8 +205,8 @@ func (h *HTTPExtender) convertToNodeToVictims( func (h *HTTPExtender) convertPodUIDToPod( metaPod *schedulerapi.MetaPod, nodeName string, - nodeNameToInfo map[string]*schedulercache.NodeInfo) (*v1.Pod, error) { - var nodeInfo *schedulercache.NodeInfo + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) (*v1.Pod, error) { + var nodeInfo *schedulernodeinfo.NodeInfo if nodeInfo, ok := nodeNameToInfo[nodeName]; ok { for _, pod := range nodeInfo.Pods() { if string(pod.UID) == metaPod.UID { @@ -250,7 +257,7 @@ func convertToNodeNameToVictims( // the list of failed nodes and failure reasons. func (h *HTTPExtender) Filter( pod *v1.Pod, - nodes []*v1.Node, nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodes []*v1.Node, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, ) ([]*v1.Node, schedulerapi.FailedNodesMap, error) { var ( result schedulerapi.ExtenderFilterResult diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/core/generic_scheduler.go b/vendor/k8s.io/kubernetes/pkg/scheduler/core/generic_scheduler.go index 5b27986a683..dcc1ddb4d3d 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/core/generic_scheduler.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/core/generic_scheduler.go @@ -28,23 +28,25 @@ import ( "k8s.io/klog" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" policy "k8s.io/api/policy/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/errors" - utiltrace "k8s.io/apiserver/pkg/util/trace" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/metrics" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" + pluginsv1alpha1 "k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/volumebinder" + utiltrace "k8s.io/utils/trace" ) const ( @@ -53,10 +55,15 @@ const ( // certain minimum of nodes are checked for feasibility. This in turn helps // ensure a minimum level of spreading. minFeasibleNodesToFind = 100 + // minFeasibleNodesPercentageToFind is the minimum percentage of nodes that + // would be scored in each scheduling cycle. This is a semi-arbitrary value + // to ensure that a certain minimum of nodes are checked for feasibility. + // This in turn helps ensure a minimum level of spreading. + minFeasibleNodesPercentageToFind = 5 ) // FailedPredicateMap declares a map[string][]algorithm.PredicateFailureReason type. -type FailedPredicateMap map[string][]algorithm.PredicateFailureReason +type FailedPredicateMap map[string][]predicates.PredicateFailureReason // FitError describes a fit error of a pod. type FitError struct { @@ -94,17 +101,47 @@ func (f *FitError) Error() string { return reasonMsg } +// ScheduleAlgorithm is an interface implemented by things that know how to schedule pods +// onto machines. +// TODO: Rename this type. +type ScheduleAlgorithm interface { + Schedule(*v1.Pod, algorithm.NodeLister) (scheduleResult ScheduleResult, err error) + // Preempt receives scheduling errors for a pod and tries to create room for + // the pod by preempting lower priority pods if possible. + // It returns the node where preemption happened, a list of preempted pods, a + // list of pods whose nominated node name should be removed, and error if any. + Preempt(*v1.Pod, algorithm.NodeLister, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error) + // Predicates() returns a pointer to a map of predicate functions. This is + // exposed for testing. + Predicates() map[string]predicates.FitPredicate + // Prioritizers returns a slice of priority config. This is exposed for + // testing. + Prioritizers() []priorities.PriorityConfig +} + +// ScheduleResult represents the result of one pod scheduled. It will contain +// the final selected Node, along with the selected intermediate information. +type ScheduleResult struct { + // Name of the scheduler suggest host + SuggestedHost string + // Number of nodes scheduler evaluated on one pod scheduled + EvaluatedNodes int + // Number of feasible nodes on one pod scheduled + FeasibleNodes int +} + type genericScheduler struct { cache schedulerinternalcache.Cache schedulingQueue internalqueue.SchedulingQueue - predicates map[string]algorithm.FitPredicate - priorityMetaProducer algorithm.PriorityMetadataProducer - predicateMetaProducer algorithm.PredicateMetadataProducer - prioritizers []algorithm.PriorityConfig + predicates map[string]predicates.FitPredicate + priorityMetaProducer priorities.PriorityMetadataProducer + predicateMetaProducer predicates.PredicateMetadataProducer + prioritizers []priorities.PriorityConfig + pluginSet pluginsv1alpha1.PluginSet extenders []algorithm.SchedulerExtender lastNodeIndex uint64 alwaysCheckAllPredicates bool - cachedNodeInfoMap map[string]*schedulercache.NodeInfo + nodeInfoSnapshot schedulerinternalcache.NodeInfoSnapshot volumeBinder *volumebinder.VolumeBinder pvcLister corelisters.PersistentVolumeClaimLister pdbLister algorithm.PDBLister @@ -112,83 +149,97 @@ type genericScheduler struct { percentageOfNodesToScore int32 } -// snapshot snapshots equivalane cache and node infos for all fit and priority +// snapshot snapshots scheduler cache and node infos for all fit and priority // functions. func (g *genericScheduler) snapshot() error { // Used for all fit and priority funcs. - return g.cache.UpdateNodeNameToInfoMap(g.cachedNodeInfoMap) + return g.cache.UpdateNodeInfoSnapshot(&g.nodeInfoSnapshot) } // Schedule tries to schedule the given pod to one of the nodes in the node list. // If it succeeds, it will return the name of the node. // If it fails, it will return a FitError error with reasons. -func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister) (string, error) { +func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister) (result ScheduleResult, err error) { trace := utiltrace.New(fmt.Sprintf("Scheduling %s/%s", pod.Namespace, pod.Name)) defer trace.LogIfLong(100 * time.Millisecond) if err := podPassesBasicChecks(pod, g.pvcLister); err != nil { - return "", err + return result, err } nodes, err := nodeLister.List() if err != nil { - return "", err + return result, err } if len(nodes) == 0 { - return "", ErrNoNodesAvailable + return result, ErrNoNodesAvailable } - err = g.snapshot() - if err != nil { - return "", err + if err := g.snapshot(); err != nil { + return result, err } trace.Step("Computing predicates") startPredicateEvalTime := time.Now() filteredNodes, failedPredicateMap, err := g.findNodesThatFit(pod, nodes) if err != nil { - return "", err + return result, err } if len(filteredNodes) == 0 { - return "", &FitError{ + return result, &FitError{ Pod: pod, NumAllNodes: len(nodes), FailedPredicates: failedPredicateMap, } } - metrics.SchedulingAlgorithmPredicateEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPredicateEvalTime)) + metrics.SchedulingAlgorithmPredicateEvaluationDuration.Observe(metrics.SinceInSeconds(startPredicateEvalTime)) + metrics.DeprecatedSchedulingAlgorithmPredicateEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPredicateEvalTime)) metrics.SchedulingLatency.WithLabelValues(metrics.PredicateEvaluation).Observe(metrics.SinceInSeconds(startPredicateEvalTime)) + metrics.DeprecatedSchedulingLatency.WithLabelValues(metrics.PredicateEvaluation).Observe(metrics.SinceInSeconds(startPredicateEvalTime)) trace.Step("Prioritizing") startPriorityEvalTime := time.Now() // When only one node after predicate, just use it. if len(filteredNodes) == 1 { - metrics.SchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPriorityEvalTime)) - return filteredNodes[0].Name, nil + metrics.SchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInSeconds(startPriorityEvalTime)) + metrics.DeprecatedSchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPriorityEvalTime)) + return ScheduleResult{ + SuggestedHost: filteredNodes[0].Name, + EvaluatedNodes: 1 + len(failedPredicateMap), + FeasibleNodes: 1, + }, nil } - metaPrioritiesInterface := g.priorityMetaProducer(pod, g.cachedNodeInfoMap) - priorityList, err := PrioritizeNodes(pod, g.cachedNodeInfoMap, metaPrioritiesInterface, g.prioritizers, filteredNodes, g.extenders) + metaPrioritiesInterface := g.priorityMetaProducer(pod, g.nodeInfoSnapshot.NodeInfoMap) + priorityList, err := PrioritizeNodes(pod, g.nodeInfoSnapshot.NodeInfoMap, metaPrioritiesInterface, g.prioritizers, filteredNodes, g.extenders) if err != nil { - return "", err + return result, err } - metrics.SchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPriorityEvalTime)) + metrics.SchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInSeconds(startPriorityEvalTime)) + metrics.DeprecatedSchedulingAlgorithmPriorityEvaluationDuration.Observe(metrics.SinceInMicroseconds(startPriorityEvalTime)) metrics.SchedulingLatency.WithLabelValues(metrics.PriorityEvaluation).Observe(metrics.SinceInSeconds(startPriorityEvalTime)) + metrics.DeprecatedSchedulingLatency.WithLabelValues(metrics.PriorityEvaluation).Observe(metrics.SinceInSeconds(startPriorityEvalTime)) trace.Step("Selecting host") - return g.selectHost(priorityList) + + host, err := g.selectHost(priorityList) + return ScheduleResult{ + SuggestedHost: host, + EvaluatedNodes: len(filteredNodes) + len(failedPredicateMap), + FeasibleNodes: len(filteredNodes), + }, err } // Prioritizers returns a slice containing all the scheduler's priority // functions and their config. It is exposed for testing only. -func (g *genericScheduler) Prioritizers() []algorithm.PriorityConfig { +func (g *genericScheduler) Prioritizers() []priorities.PriorityConfig { return g.prioritizers } // Predicates returns a map containing all the scheduler's predicate // functions. It is exposed for testing only. -func (g *genericScheduler) Predicates() map[string]algorithm.FitPredicate { +func (g *genericScheduler) Predicates() map[string]predicates.FitPredicate { return g.predicates } @@ -241,7 +292,7 @@ func (g *genericScheduler) Preempt(pod *v1.Pod, nodeLister algorithm.NodeLister, if !ok || fitError == nil { return nil, nil, nil, nil } - if !podEligibleToPreemptOthers(pod, g.cachedNodeInfoMap) { + if !podEligibleToPreemptOthers(pod, g.nodeInfoSnapshot.NodeInfoMap) { klog.V(5).Infof("Pod %v/%v is not eligible for more preemption.", pod.Namespace, pod.Name) return nil, nil, nil, nil } @@ -262,7 +313,7 @@ func (g *genericScheduler) Preempt(pod *v1.Pod, nodeLister algorithm.NodeLister, if err != nil { return nil, nil, nil, err } - nodeToVictims, err := selectNodesForPreemption(pod, g.cachedNodeInfoMap, potentialNodes, g.predicates, + nodeToVictims, err := selectNodesForPreemption(pod, g.nodeInfoSnapshot.NodeInfoMap, potentialNodes, g.predicates, g.predicateMetaProducer, g.schedulingQueue, pdbs) if err != nil { return nil, nil, nil, err @@ -278,7 +329,7 @@ func (g *genericScheduler) Preempt(pod *v1.Pod, nodeLister algorithm.NodeLister, candidateNode := pickOneNodeForPreemption(nodeToVictims) if candidateNode == nil { - return nil, nil, nil, err + return nil, nil, nil, nil } // Lower priority pods nominated to run on this node, may no longer fit on @@ -286,8 +337,8 @@ func (g *genericScheduler) Preempt(pod *v1.Pod, nodeLister algorithm.NodeLister, // nomination updates these pods and moves them to the active queue. It // lets scheduler find another place for them. nominatedPods := g.getLowerPriorityNominatedPods(pod, candidateNode.Name) - if nodeInfo, ok := g.cachedNodeInfoMap[candidateNode.Name]; ok { - return nodeInfo.Node(), nodeToVictims[candidateNode].Pods, nominatedPods, err + if nodeInfo, ok := g.nodeInfoSnapshot.NodeInfoMap[candidateNode.Name]; ok { + return nodeInfo.Node(), nodeToVictims[candidateNode].Pods, nominatedPods, nil } return nil, nil, nil, fmt.Errorf( @@ -306,7 +357,7 @@ func (g *genericScheduler) processPreemptionWithExtenders( newNodeToVictims, err := extender.ProcessPreemption( pod, nodeToVictims, - g.cachedNodeInfoMap, + g.nodeInfoSnapshot.NodeInfoMap, ) if err != nil { if extender.IsIgnorable() { @@ -358,15 +409,24 @@ func (g *genericScheduler) getLowerPriorityNominatedPods(pod *v1.Pod, nodeName s // numFeasibleNodesToFind returns the number of feasible nodes that once found, the scheduler stops // its search for more feasible nodes. -func (g *genericScheduler) numFeasibleNodesToFind(numAllNodes int32) int32 { - if numAllNodes < minFeasibleNodesToFind || g.percentageOfNodesToScore <= 0 || - g.percentageOfNodesToScore >= 100 { +func (g *genericScheduler) numFeasibleNodesToFind(numAllNodes int32) (numNodes int32) { + if numAllNodes < minFeasibleNodesToFind || g.percentageOfNodesToScore >= 100 { return numAllNodes } - numNodes := numAllNodes * g.percentageOfNodesToScore / 100 + + adaptivePercentage := g.percentageOfNodesToScore + if adaptivePercentage <= 0 { + adaptivePercentage = schedulerapi.DefaultPercentageOfNodesToScore - numAllNodes/125 + if adaptivePercentage < minFeasibleNodesPercentageToFind { + adaptivePercentage = minFeasibleNodesPercentageToFind + } + } + + numNodes = numAllNodes * adaptivePercentage / 100 if numNodes < minFeasibleNodesToFind { return minFeasibleNodesToFind } + return numNodes } @@ -379,7 +439,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v if len(g.predicates) == 0 { filtered = nodes } else { - allNodes := int32(g.cache.NodeTree().NumNodes) + allNodes := int32(g.cache.NodeTree().NumNodes()) numNodesToFind := g.numFeasibleNodesToFind(allNodes) // Create filtered list with enough space to avoid growing it @@ -394,14 +454,14 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v ctx, cancel := context.WithCancel(context.Background()) // We can use the same metadata producer for all nodes. - meta := g.predicateMetaProducer(pod, g.cachedNodeInfoMap) + meta := g.predicateMetaProducer(pod, g.nodeInfoSnapshot.NodeInfoMap) checkNode := func(i int) { nodeName := g.cache.NodeTree().Next() fits, failedPredicates, err := podFitsOnNode( pod, meta, - g.cachedNodeInfoMap[nodeName], + g.nodeInfoSnapshot.NodeInfoMap[nodeName], g.predicates, g.schedulingQueue, g.alwaysCheckAllPredicates, @@ -418,7 +478,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v cancel() atomic.AddInt32(&filteredLen, -1) } else { - filtered[length-1] = g.cachedNodeInfoMap[nodeName].Node() + filtered[length-1] = g.nodeInfoSnapshot.NodeInfoMap[nodeName].Node() } } else { predicateResultLock.Lock() @@ -442,7 +502,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v if !extender.IsInterested(pod) { continue } - filteredList, failedMap, err := extender.Filter(pod, filtered, g.cachedNodeInfoMap) + filteredList, failedMap, err := extender.Filter(pod, filtered, g.nodeInfoSnapshot.NodeInfoMap) if err != nil { if extender.IsIgnorable() { klog.Warningf("Skipping extender %v as it returned error %v and has ignorable flag set", @@ -455,7 +515,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v for failedNodeName, failedMsg := range failedMap { if _, found := failedPredicateMap[failedNodeName]; !found { - failedPredicateMap[failedNodeName] = []algorithm.PredicateFailureReason{} + failedPredicateMap[failedNodeName] = []predicates.PredicateFailureReason{} } failedPredicateMap[failedNodeName] = append(failedPredicateMap[failedNodeName], predicates.NewFailureReason(failedMsg)) } @@ -471,9 +531,9 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v // addNominatedPods adds pods with equal or greater priority which are nominated // to run on the node given in nodeInfo to meta and nodeInfo. It returns 1) whether // any pod was found, 2) augmented meta data, 3) augmented nodeInfo. -func addNominatedPods(pod *v1.Pod, meta algorithm.PredicateMetadata, - nodeInfo *schedulercache.NodeInfo, queue internalqueue.SchedulingQueue) (bool, algorithm.PredicateMetadata, - *schedulercache.NodeInfo) { +func addNominatedPods(pod *v1.Pod, meta predicates.PredicateMetadata, + nodeInfo *schedulernodeinfo.NodeInfo, queue internalqueue.SchedulingQueue) (bool, predicates.PredicateMetadata, + *schedulernodeinfo.NodeInfo) { if queue == nil || nodeInfo == nil || nodeInfo.Node() == nil { // This may happen only in tests. return false, meta, nodeInfo @@ -482,7 +542,7 @@ func addNominatedPods(pod *v1.Pod, meta algorithm.PredicateMetadata, if nominatedPods == nil || len(nominatedPods) == 0 { return false, meta, nodeInfo } - var metaOut algorithm.PredicateMetadata + var metaOut predicates.PredicateMetadata if meta != nil { metaOut = meta.ShallowCopy() } @@ -510,15 +570,13 @@ func addNominatedPods(pod *v1.Pod, meta algorithm.PredicateMetadata, // It removes victims from meta and NodeInfo before calling this function. func podFitsOnNode( pod *v1.Pod, - meta algorithm.PredicateMetadata, - info *schedulercache.NodeInfo, - predicateFuncs map[string]algorithm.FitPredicate, + meta predicates.PredicateMetadata, + info *schedulernodeinfo.NodeInfo, + predicateFuncs map[string]predicates.FitPredicate, queue internalqueue.SchedulingQueue, alwaysCheckAllPredicates bool, -) (bool, []algorithm.PredicateFailureReason, error) { - var ( - failedPredicates []algorithm.PredicateFailureReason - ) +) (bool, []predicates.PredicateFailureReason, error) { + var failedPredicates []predicates.PredicateFailureReason podsAdded := false // We run predicates twice in some cases. If the node has greater or equal priority @@ -547,20 +605,17 @@ func podFitsOnNode( } else if !podsAdded || len(failedPredicates) != 0 { break } - // Bypass eCache if node has any nominated pods. - // TODO(bsalamat): consider using eCache and adding proper eCache invalidations - // when pods are nominated or their nominations change. for _, predicateKey := range predicates.Ordering() { var ( fit bool - reasons []algorithm.PredicateFailureReason + reasons []predicates.PredicateFailureReason err error ) //TODO (yastij) : compute average predicate restrictiveness to export it as Prometheus metric if predicate, exist := predicateFuncs[predicateKey]; exist { fit, reasons, err = predicate(pod, metaToUse, nodeInfoToUse) if err != nil { - return false, []algorithm.PredicateFailureReason{}, err + return false, []predicates.PredicateFailureReason{}, err } if !fit { @@ -589,9 +644,9 @@ func podFitsOnNode( // All scores are finally combined (added) to get the total weighted scores of all nodes func PrioritizeNodes( pod *v1.Pod, - nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, meta interface{}, - priorityConfigs []algorithm.PriorityConfig, + priorityConfigs []priorities.PriorityConfig, nodes []*v1.Node, extenders []algorithm.SchedulerExtender, ) (schedulerapi.HostPriorityList, error) { @@ -730,7 +785,7 @@ func PrioritizeNodes( } // EqualPriorityMap is a prioritizer function that gives an equal weight of one to all nodes -func EqualPriorityMap(_ *v1.Pod, _ interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) { +func EqualPriorityMap(_ *v1.Pod, _ interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) { node := nodeInfo.Node() if node == nil { return schedulerapi.HostPriority{}, fmt.Errorf("node not found") @@ -859,10 +914,10 @@ func pickOneNodeForPreemption(nodesToVictims map[*v1.Node]*schedulerapi.Victims) // selectNodesForPreemption finds all the nodes with possible victims for // preemption in parallel. func selectNodesForPreemption(pod *v1.Pod, - nodeNameToInfo map[string]*schedulercache.NodeInfo, + nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, potentialNodes []*v1.Node, - predicates map[string]algorithm.FitPredicate, - metadataProducer algorithm.PredicateMetadataProducer, + fitPredicates map[string]predicates.FitPredicate, + metadataProducer predicates.PredicateMetadataProducer, queue internalqueue.SchedulingQueue, pdbs []*policy.PodDisruptionBudget, ) (map[*v1.Node]*schedulerapi.Victims, error) { @@ -873,11 +928,11 @@ func selectNodesForPreemption(pod *v1.Pod, meta := metadataProducer(pod, nodeNameToInfo) checkNode := func(i int) { nodeName := potentialNodes[i].Name - var metaCopy algorithm.PredicateMetadata + var metaCopy predicates.PredicateMetadata if meta != nil { metaCopy = meta.ShallowCopy() } - pods, numPDBViolations, fits := selectVictimsOnNode(pod, metaCopy, nodeNameToInfo[nodeName], predicates, queue, pdbs) + pods, numPDBViolations, fits := selectVictimsOnNode(pod, metaCopy, nodeNameToInfo[nodeName], fitPredicates, queue, pdbs) if fits { resultLock.Lock() victims := schedulerapi.Victims{ @@ -948,9 +1003,9 @@ func filterPodsWithPDBViolation(pods []interface{}, pdbs []*policy.PodDisruption // these predicates can be satisfied by removing more pods from the node. func selectVictimsOnNode( pod *v1.Pod, - meta algorithm.PredicateMetadata, - nodeInfo *schedulercache.NodeInfo, - fitPredicates map[string]algorithm.FitPredicate, + meta predicates.PredicateMetadata, + nodeInfo *schedulernodeinfo.NodeInfo, + fitPredicates map[string]predicates.FitPredicate, queue internalqueue.SchedulingQueue, pdbs []*policy.PodDisruptionBudget, ) ([]*v1.Pod, int, bool) { @@ -983,10 +1038,11 @@ func selectVictimsOnNode( } potentialVictims.Sort() // If the new pod does not fit after removing all the lower priority pods, - // we are almost done and this node is not suitable for preemption. The only condition - // that we should check is if the "pod" is failing to schedule due to pod affinity - // failure. - // TODO(bsalamat): Consider checking affinity to lower priority pods if feasible with reasonable performance. + // we are almost done and this node is not suitable for preemption. The only + // condition that we could check is if the "pod" is failing to schedule due to + // inter-pod affinity to one or more victims, but we have decided not to + // support this case for performance reasons. Having affinity to lower + // priority pods is not a recommended configuration anyway. if fits, _, err := podFitsOnNode(pod, meta, nodeInfoCopy, fitPredicates, queue, false); !fits { if err != nil { klog.Warningf("Encountered error while selecting victims on node %v: %v", nodeInfo.Node().Name, err) @@ -1001,11 +1057,11 @@ func selectVictimsOnNode( violatingVictims, nonViolatingVictims := filterPodsWithPDBViolation(potentialVictims.Items, pdbs) reprievePod := func(p *v1.Pod) bool { addPod(p) - fits, _, _ := podFitsOnNode(pod, meta, nodeInfoCopy, fitPredicates,queue, false) + fits, _, _ := podFitsOnNode(pod, meta, nodeInfoCopy, fitPredicates, queue, false) if !fits { removePod(p) victims = append(victims, p) - klog.V(5).Infof("Pod %v is a potential preemption victim on node %v.", p.Name, nodeInfo.Node().Name) + klog.V(5).Infof("Pod %v/%v is a potential preemption victim on node %v.", p.Namespace, p.Name, nodeInfo.Node().Name) } return fits } @@ -1049,7 +1105,6 @@ func nodesWherePreemptionMightHelp(nodes []*v1.Node, failedPredicatesMap FailedP predicates.ErrNodeUnderDiskPressure, predicates.ErrNodeUnderPIDPressure, predicates.ErrNodeUnderMemoryPressure, - predicates.ErrNodeOutOfDisk, predicates.ErrNodeUnschedulable, predicates.ErrNodeUnknownCondition, predicates.ErrVolumeZoneConflict, @@ -1073,7 +1128,7 @@ func nodesWherePreemptionMightHelp(nodes []*v1.Node, failedPredicatesMap FailedP // considered for preemption. // We look at the node that is nominated for this pod and as long as there are // terminating pods on the node, we don't consider this for preempting more pods. -func podEligibleToPreemptOthers(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo) bool { +func podEligibleToPreemptOthers(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) bool { nomNodeName := pod.Status.NominatedNodeName if len(nomNodeName) > 0 { if nodeInfo, found := nodeNameToInfo[nomNodeName]; found { @@ -1118,10 +1173,11 @@ func podPassesBasicChecks(pod *v1.Pod, pvcLister corelisters.PersistentVolumeCla func NewGenericScheduler( cache schedulerinternalcache.Cache, podQueue internalqueue.SchedulingQueue, - predicates map[string]algorithm.FitPredicate, - predicateMetaProducer algorithm.PredicateMetadataProducer, - prioritizers []algorithm.PriorityConfig, - priorityMetaProducer algorithm.PriorityMetadataProducer, + predicates map[string]predicates.FitPredicate, + predicateMetaProducer predicates.PredicateMetadataProducer, + prioritizers []priorities.PriorityConfig, + priorityMetaProducer priorities.PriorityMetadataProducer, + pluginSet pluginsv1alpha1.PluginSet, extenders []algorithm.SchedulerExtender, volumeBinder *volumebinder.VolumeBinder, pvcLister corelisters.PersistentVolumeClaimLister, @@ -1129,7 +1185,7 @@ func NewGenericScheduler( alwaysCheckAllPredicates bool, disablePreemption bool, percentageOfNodesToScore int32, -) algorithm.ScheduleAlgorithm { +) ScheduleAlgorithm { return &genericScheduler{ cache: cache, schedulingQueue: podQueue, @@ -1137,8 +1193,9 @@ func NewGenericScheduler( predicateMetaProducer: predicateMetaProducer, prioritizers: prioritizers, priorityMetaProducer: priorityMetaProducer, + pluginSet: pluginSet, extenders: extenders, - cachedNodeInfoMap: make(map[string]*schedulercache.NodeInfo), + nodeInfoSnapshot: schedulerinternalcache.NewNodeInfoSnapshot(), volumeBinder: volumeBinder, pvcLister: pvcLister, pdbLister: pdbLister, diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go b/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go new file mode 100644 index 00000000000..4cf52f381e2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go @@ -0,0 +1,475 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package scheduler + +import ( + "fmt" + "k8s.io/klog" + "reflect" + + "k8s.io/api/core/v1" + storagev1 "k8s.io/api/storage/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + appsinformers "k8s.io/client-go/informers/apps/v1" + coreinformers "k8s.io/client-go/informers/core/v1" + policyinformers "k8s.io/client-go/informers/policy/v1beta1" + storageinformers "k8s.io/client-go/informers/storage/v1" + "k8s.io/client-go/tools/cache" +) + +func (sched *Scheduler) onPvAdd(obj interface{}) { + // Pods created when there are no PVs available will be stuck in + // unschedulable queue. But unbound PVs created for static provisioning and + // delay binding storage class are skipped in PV controller dynamic + // provisioning and binding process, will not trigger events to schedule pod + // again. So we need to move pods to active queue on PV add for this + // scenario. + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onPvUpdate(old, new interface{}) { + // Scheduler.bindVolumesWorker may fail to update assumed pod volume + // bindings due to conflicts if PVs are updated by PV controller or other + // parties, then scheduler will add pod back to unschedulable queue. We + // need to move pods to active queue on PV update for this scenario. + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onPvcAdd(obj interface{}) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onPvcUpdate(old, new interface{}) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onStorageClassAdd(obj interface{}) { + sc, ok := obj.(*storagev1.StorageClass) + if !ok { + klog.Errorf("cannot convert to *storagev1.StorageClass: %v", obj) + return + } + + // CheckVolumeBindingPred fails if pod has unbound immediate PVCs. If these + // PVCs have specified StorageClass name, creating StorageClass objects + // with late binding will cause predicates to pass, so we need to move pods + // to active queue. + // We don't need to invalidate cached results because results will not be + // cached for pod that has unbound immediate PVCs. + if sc.VolumeBindingMode != nil && *sc.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer { + sched.config.SchedulingQueue.MoveAllToActiveQueue() + } +} + +func (sched *Scheduler) onServiceAdd(obj interface{}) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onServiceUpdate(oldObj interface{}, newObj interface{}) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) onServiceDelete(obj interface{}) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) addNodeToCache(obj interface{}) { + node, ok := obj.(*v1.Node) + if !ok { + klog.Errorf("cannot convert to *v1.Node: %v", obj) + return + } + + if err := sched.config.SchedulerCache.AddNode(node); err != nil { + klog.Errorf("scheduler cache AddNode failed: %v", err) + } + + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +func (sched *Scheduler) updateNodeInCache(oldObj, newObj interface{}) { + oldNode, ok := oldObj.(*v1.Node) + if !ok { + klog.Errorf("cannot convert oldObj to *v1.Node: %v", oldObj) + return + } + newNode, ok := newObj.(*v1.Node) + if !ok { + klog.Errorf("cannot convert newObj to *v1.Node: %v", newObj) + return + } + + if err := sched.config.SchedulerCache.UpdateNode(oldNode, newNode); err != nil { + klog.Errorf("scheduler cache UpdateNode failed: %v", err) + } + + // Only activate unschedulable pods if the node became more schedulable. + // We skip the node property comparison when there is no unschedulable pods in the queue + // to save processing cycles. We still trigger a move to active queue to cover the case + // that a pod being processed by the scheduler is determined unschedulable. We want this + // pod to be reevaluated when a change in the cluster happens. + if sched.config.SchedulingQueue.NumUnschedulablePods() == 0 || nodeSchedulingPropertiesChanged(newNode, oldNode) { + sched.config.SchedulingQueue.MoveAllToActiveQueue() + } +} + +func (sched *Scheduler) deleteNodeFromCache(obj interface{}) { + var node *v1.Node + switch t := obj.(type) { + case *v1.Node: + node = t + case cache.DeletedFinalStateUnknown: + var ok bool + node, ok = t.Obj.(*v1.Node) + if !ok { + klog.Errorf("cannot convert to *v1.Node: %v", t.Obj) + return + } + default: + klog.Errorf("cannot convert to *v1.Node: %v", t) + return + } + // NOTE: Updates must be written to scheduler cache before invalidating + // equivalence cache, because we could snapshot equivalence cache after the + // invalidation and then snapshot the cache itself. If the cache is + // snapshotted before updates are written, we would update equivalence + // cache with stale information which is based on snapshot of old cache. + if err := sched.config.SchedulerCache.RemoveNode(node); err != nil { + klog.Errorf("scheduler cache RemoveNode failed: %v", err) + } +} +func (sched *Scheduler) addPodToSchedulingQueue(obj interface{}) { + if err := sched.config.SchedulingQueue.Add(obj.(*v1.Pod)); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to queue %T: %v", obj, err)) + } +} + +func (sched *Scheduler) updatePodInSchedulingQueue(oldObj, newObj interface{}) { + pod := newObj.(*v1.Pod) + if sched.skipPodUpdate(pod) { + return + } + if err := sched.config.SchedulingQueue.Update(oldObj.(*v1.Pod), pod); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to update %T: %v", newObj, err)) + } +} + +func (sched *Scheduler) deletePodFromSchedulingQueue(obj interface{}) { + var pod *v1.Pod + switch t := obj.(type) { + case *v1.Pod: + pod = obj.(*v1.Pod) + case cache.DeletedFinalStateUnknown: + var ok bool + pod, ok = t.Obj.(*v1.Pod) + if !ok { + utilruntime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, sched)) + return + } + default: + utilruntime.HandleError(fmt.Errorf("unable to handle object in %T: %T", sched, obj)) + return + } + if err := sched.config.SchedulingQueue.Delete(pod); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to dequeue %T: %v", obj, err)) + } + if sched.config.VolumeBinder != nil { + // Volume binder only wants to keep unassigned pods + sched.config.VolumeBinder.DeletePodBindings(pod) + } +} + +func (sched *Scheduler) addPodToCache(obj interface{}) { + pod, ok := obj.(*v1.Pod) + if !ok { + klog.Errorf("cannot convert to *v1.Pod: %v", obj) + return + } + + if err := sched.config.SchedulerCache.AddPod(pod); err != nil { + klog.Errorf("scheduler cache AddPod failed: %v", err) + } + + sched.config.SchedulingQueue.AssignedPodAdded(pod) +} + +func (sched *Scheduler) updatePodInCache(oldObj, newObj interface{}) { + oldPod, ok := oldObj.(*v1.Pod) + if !ok { + klog.Errorf("cannot convert oldObj to *v1.Pod: %v", oldObj) + return + } + newPod, ok := newObj.(*v1.Pod) + if !ok { + klog.Errorf("cannot convert newObj to *v1.Pod: %v", newObj) + return + } + + // NOTE: Updates must be written to scheduler cache before invalidating + // equivalence cache, because we could snapshot equivalence cache after the + // invalidation and then snapshot the cache itself. If the cache is + // snapshotted before updates are written, we would update equivalence + // cache with stale information which is based on snapshot of old cache. + if err := sched.config.SchedulerCache.UpdatePod(oldPod, newPod); err != nil { + klog.Errorf("scheduler cache UpdatePod failed: %v", err) + } + + sched.config.SchedulingQueue.AssignedPodUpdated(newPod) +} + +func (sched *Scheduler) deletePodFromCache(obj interface{}) { + var pod *v1.Pod + switch t := obj.(type) { + case *v1.Pod: + pod = t + case cache.DeletedFinalStateUnknown: + var ok bool + pod, ok = t.Obj.(*v1.Pod) + if !ok { + klog.Errorf("cannot convert to *v1.Pod: %v", t.Obj) + return + } + default: + klog.Errorf("cannot convert to *v1.Pod: %v", t) + return + } + // NOTE: Updates must be written to scheduler cache before invalidating + // equivalence cache, because we could snapshot equivalence cache after the + // invalidation and then snapshot the cache itself. If the cache is + // snapshotted before updates are written, we would update equivalence + // cache with stale information which is based on snapshot of old cache. + if err := sched.config.SchedulerCache.RemovePod(pod); err != nil { + klog.Errorf("scheduler cache RemovePod failed: %v", err) + } + + sched.config.SchedulingQueue.MoveAllToActiveQueue() +} + +// assignedPod selects pods that are assigned (scheduled and running). +func assignedPod(pod *v1.Pod) bool { + return len(pod.Spec.NodeName) != 0 +} + +// responsibleForPod returns true if the pod has asked to be scheduled by the given scheduler. +func responsibleForPod(pod *v1.Pod, schedulerName string) bool { + return schedulerName == pod.Spec.SchedulerName +} + +// skipPodUpdate checks whether the specified pod update should be ignored. +// This function will return true if +// - The pod has already been assumed, AND +// - The pod has only its ResourceVersion, Spec.NodeName and/or Annotations +// updated. +func (sched *Scheduler) skipPodUpdate(pod *v1.Pod) bool { + // Non-assumed pods should never be skipped. + isAssumed, err := sched.config.SchedulerCache.IsAssumedPod(pod) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failed to check whether pod %s/%s is assumed: %v", pod.Namespace, pod.Name, err)) + return false + } + if !isAssumed { + return false + } + + // Gets the assumed pod from the cache. + assumedPod, err := sched.config.SchedulerCache.GetPod(pod) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failed to get assumed pod %s/%s from cache: %v", pod.Namespace, pod.Name, err)) + return false + } + + // Compares the assumed pod in the cache with the pod update. If they are + // equal (with certain fields excluded), this pod update will be skipped. + f := func(pod *v1.Pod) *v1.Pod { + p := pod.DeepCopy() + // ResourceVersion must be excluded because each object update will + // have a new resource version. + p.ResourceVersion = "" + // Spec.NodeName must be excluded because the pod assumed in the cache + // is expected to have a node assigned while the pod update may nor may + // not have this field set. + p.Spec.NodeName = "" + // Annotations must be excluded for the reasons described in + // https://github.com/kubernetes/kubernetes/issues/52914. + p.Annotations = nil + return p + } + assumedPodCopy, podCopy := f(assumedPod), f(pod) + if !reflect.DeepEqual(assumedPodCopy, podCopy) { + return false + } + klog.V(3).Infof("Skipping pod %s/%s update", pod.Namespace, pod.Name) + return true +} + +// AddAllEventHandlers is a helper function used in tests and in Scheduler +// to add event handlers for various informers. +func AddAllEventHandlers( + sched *Scheduler, + schedulerName string, + nodeInformer coreinformers.NodeInformer, + podInformer coreinformers.PodInformer, + pvInformer coreinformers.PersistentVolumeInformer, + pvcInformer coreinformers.PersistentVolumeClaimInformer, + replicationControllerInformer coreinformers.ReplicationControllerInformer, + replicaSetInformer appsinformers.ReplicaSetInformer, + statefulSetInformer appsinformers.StatefulSetInformer, + serviceInformer coreinformers.ServiceInformer, + pdbInformer policyinformers.PodDisruptionBudgetInformer, + storageClassInformer storageinformers.StorageClassInformer, +) { + // scheduled pod cache + podInformer.Informer().AddEventHandler( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Pod: + return assignedPod(t) + case cache.DeletedFinalStateUnknown: + if pod, ok := t.Obj.(*v1.Pod); ok { + return assignedPod(pod) + } + utilruntime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, sched)) + return false + default: + utilruntime.HandleError(fmt.Errorf("unable to handle object in %T: %T", sched, obj)) + return false + } + }, + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: sched.addPodToCache, + UpdateFunc: sched.updatePodInCache, + DeleteFunc: sched.deletePodFromCache, + }, + }, + ) + // unscheduled pod queue + podInformer.Informer().AddEventHandler( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Pod: + return !assignedPod(t) && responsibleForPod(t, schedulerName) + case cache.DeletedFinalStateUnknown: + if pod, ok := t.Obj.(*v1.Pod); ok { + return !assignedPod(pod) && responsibleForPod(pod, schedulerName) + } + utilruntime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, sched)) + return false + default: + utilruntime.HandleError(fmt.Errorf("unable to handle object in %T: %T", sched, obj)) + return false + } + }, + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: sched.addPodToSchedulingQueue, + UpdateFunc: sched.updatePodInSchedulingQueue, + DeleteFunc: sched.deletePodFromSchedulingQueue, + }, + }, + ) + + nodeInformer.Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: sched.addNodeToCache, + UpdateFunc: sched.updateNodeInCache, + DeleteFunc: sched.deleteNodeFromCache, + }, + ) + + // On add and delete of PVs, it will affect equivalence cache items + // related to persistent volume + pvInformer.Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + // MaxPDVolumeCountPredicate: since it relies on the counts of PV. + AddFunc: sched.onPvAdd, + UpdateFunc: sched.onPvUpdate, + }, + ) + + // This is for MaxPDVolumeCountPredicate: add/delete PVC will affect counts of PV when it is bound. + pvcInformer.Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: sched.onPvcAdd, + UpdateFunc: sched.onPvcUpdate, + }, + ) + + // This is for ServiceAffinity: affected by the selector of the service is updated. + // Also, if new service is added, equivalence cache will also become invalid since + // existing pods may be "captured" by this service and change this predicate result. + serviceInformer.Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: sched.onServiceAdd, + UpdateFunc: sched.onServiceUpdate, + DeleteFunc: sched.onServiceDelete, + }, + ) + + storageClassInformer.Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: sched.onStorageClassAdd, + }, + ) +} + +func nodeSchedulingPropertiesChanged(newNode *v1.Node, oldNode *v1.Node) bool { + if nodeSpecUnschedulableChanged(newNode, oldNode) { + return true + } + if nodeAllocatableChanged(newNode, oldNode) { + return true + } + if nodeLabelsChanged(newNode, oldNode) { + return true + } + if nodeTaintsChanged(newNode, oldNode) { + return true + } + if nodeConditionsChanged(newNode, oldNode) { + return true + } + + return false +} + +func nodeAllocatableChanged(newNode *v1.Node, oldNode *v1.Node) bool { + return !reflect.DeepEqual(oldNode.Status.Allocatable, newNode.Status.Allocatable) +} + +func nodeLabelsChanged(newNode *v1.Node, oldNode *v1.Node) bool { + return !reflect.DeepEqual(oldNode.GetLabels(), newNode.GetLabels()) +} + +func nodeTaintsChanged(newNode *v1.Node, oldNode *v1.Node) bool { + return !reflect.DeepEqual(newNode.Spec.Taints, oldNode.Spec.Taints) +} + +func nodeConditionsChanged(newNode *v1.Node, oldNode *v1.Node) bool { + strip := func(conditions []v1.NodeCondition) map[v1.NodeConditionType]v1.ConditionStatus { + conditionStatuses := make(map[v1.NodeConditionType]v1.ConditionStatus, len(conditions)) + for i := range conditions { + conditionStatuses[conditions[i].Type] = conditions[i].Status + } + return conditionStatuses + } + return !reflect.DeepEqual(strip(oldNode.Status.Conditions), strip(newNode.Status.Conditions)) +} + +func nodeSpecUnschedulableChanged(newNode *v1.Node, oldNode *v1.Node) bool { + return newNode.Spec.Unschedulable != oldNode.Spec.Unschedulable && newNode.Spec.Unschedulable == false +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/BUILD index f7332ccdca8..486ff1fdf4d 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/BUILD @@ -5,30 +5,25 @@ go_library( srcs = [ "factory.go", "plugins.go", - "signal.go", - "signal_windows.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/factory", visibility = ["//visibility:public"], deps = [ "//pkg/api/v1/pod:go_default_library", - "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api/validation:go_default_library", "//pkg/scheduler/core:go_default_library", - "//pkg/scheduler/core/equivalence:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/cache/debugger:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", + "//pkg/scheduler/plugins:go_default_library", + "//pkg/scheduler/plugins/v1alpha1:go_default_library", "//pkg/scheduler/util:go_default_library", "//pkg/scheduler/volumebinder:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", @@ -38,7 +33,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library", @@ -64,16 +58,15 @@ go_test( deps = [ "//pkg/api/testing:go_default_library", "//pkg/scheduler/algorithm:go_default_library", + "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api/latest:go_default_library", - "//pkg/scheduler/cache:go_default_library", - "//pkg/scheduler/internal/cache/fake:go_default_library", + "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", - "//pkg/scheduler/testing:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/factory.go b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/factory.go index 1585f405402..ccf1e2ba7f0 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/factory.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/factory.go @@ -20,15 +20,9 @@ package factory import ( "fmt" - "os" - "os/signal" - "reflect" "time" - "k8s.io/klog" - - "k8s.io/api/core/v1" - storagev1 "k8s.io/api/storage/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -38,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" appsinformers "k8s.io/client-go/informers/apps/v1" coreinformers "k8s.io/client-go/informers/core/v1" policyinformers "k8s.io/client-go/informers/policy/v1beta1" @@ -50,17 +43,19 @@ import ( storagelisters "k8s.io/client-go/listers/storage/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" + "k8s.io/klog" podutil "k8s.io/kubernetes/pkg/api/v1/pod" - "k8s.io/kubernetes/pkg/features" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/api/validation" "k8s.io/kubernetes/pkg/scheduler/core" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" cachedebugger "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" + "k8s.io/kubernetes/pkg/scheduler/plugins" + pluginsv1alpha1 "k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/volumebinder" ) @@ -70,14 +65,6 @@ const ( maximalGetBackoff = time.Minute ) -var ( - serviceAffinitySet = sets.NewString(predicates.CheckServiceAffinityPred) - matchInterPodAffinitySet = sets.NewString(predicates.MatchInterPodAffinityPred) - generalPredicatesSets = sets.NewString(predicates.GeneralPred) - noDiskConflictSet = sets.NewString(predicates.NoDiskConflictPred) - maxPDVolumeCountPredicateKeys = []string{predicates.MaxGCEPDVolumeCountPred, predicates.MaxAzureDiskVolumeCountPred, predicates.MaxEBSVolumeCountPred} -) - // Binder knows how to write a binding. type Binder interface { Bind(binding *v1.Binding) error @@ -95,15 +82,17 @@ type Config struct { // It is expected that changes made via SchedulerCache will be observed // by NodeLister and Algorithm. SchedulerCache schedulerinternalcache.Cache - NodeLister algorithm.NodeLister - Algorithm algorithm.ScheduleAlgorithm - GetBinder func(pod *v1.Pod) Binder + NodeLister algorithm.NodeLister + Algorithm core.ScheduleAlgorithm + GetBinder func(pod *v1.Pod) Binder // PodConditionUpdater is used only in case of scheduling errors. If we succeed // with scheduling, PodScheduled condition will be updated in apiserver in /bind // handler so that binding and setting PodCondition it is atomic. PodConditionUpdater PodConditionUpdater // PodPreemptor is used to evict pods and update pod annotations. PodPreemptor PodPreemptor + // PlugingSet has a set of plugins and data used to run them. + PluginSet pluginsv1alpha1.PluginSet // NextPod should be a function that blocks until the next pod // is available. We don't use a channel for this, because scheduling @@ -150,12 +139,10 @@ type PodPreemptor interface { type Configurator interface { // Exposed for testing GetHardPodAffinitySymmetricWeight() int32 - // Exposed for testing - MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue internalqueue.SchedulingQueue) func(pod *v1.Pod, err error) // Predicate related accessors to be exposed for use by k8s.io/autoscaler/cluster-autoscaler - GetPredicateMetadataProducer() (algorithm.PredicateMetadataProducer, error) - GetPredicates(predicateKeys sets.String) (map[string]algorithm.FitPredicate, error) + GetPredicateMetadataProducer() (predicates.PredicateMetadataProducer, error) + GetPredicates(predicateKeys sets.String) (map[string]predicates.FitPredicate, error) // Needs to be exposed for things like integration tests where we want to make fake nodes. GetNodeLister() corelisters.NodeLister @@ -173,8 +160,6 @@ type Configurator interface { // configFactory is the default implementation of the scheduler.Configurator interface. type configFactory struct { client clientset.Interface - // queue for pods that need scheduling - podQueue internalqueue.SchedulingQueue // a means to list all known scheduled pods. scheduledPodLister corelisters.PodLister // a means to list all known scheduled pods and pods assumed to have been scheduled. @@ -197,6 +182,8 @@ type configFactory struct { pdbLister policylisters.PodDisruptionBudgetLister // a means to list all StorageClasses storageClassLister storagelisters.StorageClassLister + // pluginRunner has a set of plugins and the context used for running them. + pluginSet pluginsv1alpha1.PluginSet // Close this to stop all reflectors StopEverything <-chan struct{} @@ -225,6 +212,10 @@ type configFactory struct { // percentageOfNodesToScore specifies percentage of all nodes to score in each scheduling cycle. percentageOfNodesToScore int32 + + bindTimeoutSeconds int64 + // queue for pods that need scheduling + podQueue internalqueue.SchedulingQueue } // ConfigFactoryArgs is a set arguments passed to NewConfigFactory. @@ -281,365 +272,31 @@ func NewConfigFactory(args *ConfigFactoryArgs) Configurator { hardPodAffinitySymmetricWeight: args.HardPodAffinitySymmetricWeight, disablePreemption: args.DisablePreemption, percentageOfNodesToScore: args.PercentageOfNodesToScore, + bindTimeoutSeconds: args.BindTimeoutSeconds, } - + // Setup volume binder + c.volumeBinder = volumebinder.NewVolumeBinder(args.Client, args.NodeInformer, args.PvcInformer, args.PvInformer, args.StorageClassInformer, time.Duration(args.BindTimeoutSeconds)*time.Second) c.scheduledPodsHasSynced = args.PodInformer.Informer().HasSynced - // scheduled pod cache - args.PodInformer.Informer().AddEventHandler( - cache.FilteringResourceEventHandler{ - FilterFunc: func(obj interface{}) bool { - switch t := obj.(type) { - case *v1.Pod: - return assignedPod(t) - case cache.DeletedFinalStateUnknown: - if pod, ok := t.Obj.(*v1.Pod); ok { - return assignedPod(pod) - } - runtime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, c)) - return false - default: - runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) - return false - } - }, - Handler: cache.ResourceEventHandlerFuncs{ - AddFunc: c.addPodToCache, - UpdateFunc: c.updatePodInCache, - DeleteFunc: c.deletePodFromCache, - }, - }, - ) - // unscheduled pod queue - args.PodInformer.Informer().AddEventHandler( - cache.FilteringResourceEventHandler{ - FilterFunc: func(obj interface{}) bool { - switch t := obj.(type) { - case *v1.Pod: - return !assignedPod(t) && responsibleForPod(t, args.SchedulerName) - case cache.DeletedFinalStateUnknown: - if pod, ok := t.Obj.(*v1.Pod); ok { - return !assignedPod(pod) && responsibleForPod(pod, args.SchedulerName) - } - runtime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, c)) - return false - default: - runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) - return false - } - }, - Handler: cache.ResourceEventHandlerFuncs{ - AddFunc: c.addPodToSchedulingQueue, - UpdateFunc: c.updatePodInSchedulingQueue, - DeleteFunc: c.deletePodFromSchedulingQueue, - }, - }, - ) // ScheduledPodLister is something we provide to plug-in functions that // they may need to call. c.scheduledPodLister = assignedPodLister{args.PodInformer.Lister()} - args.NodeInformer.Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - AddFunc: c.addNodeToCache, - UpdateFunc: c.updateNodeInCache, - DeleteFunc: c.deleteNodeFromCache, - }, - ) - - // On add and delete of PVs, it will affect equivalence cache items - // related to persistent volume - args.PvInformer.Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - // MaxPDVolumeCountPredicate: since it relies on the counts of PV. - AddFunc: c.onPvAdd, - UpdateFunc: c.onPvUpdate, - DeleteFunc: c.onPvDelete, - }, - ) - - // This is for MaxPDVolumeCountPredicate: add/delete PVC will affect counts of PV when it is bound. - args.PvcInformer.Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - AddFunc: c.onPvcAdd, - UpdateFunc: c.onPvcUpdate, - DeleteFunc: c.onPvcDelete, - }, - ) - - // This is for ServiceAffinity: affected by the selector of the service is updated. - // Also, if new service is added, equivalence cache will also become invalid since - // existing pods may be "captured" by this service and change this predicate result. - args.ServiceInformer.Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - AddFunc: c.onServiceAdd, - UpdateFunc: c.onServiceUpdate, - DeleteFunc: c.onServiceDelete, - }, - ) - - // Existing equivalence cache should not be affected by add/delete RC/Deployment etc, - // it only make sense when pod is scheduled or deleted - - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // Setup volume binder - c.volumeBinder = volumebinder.NewVolumeBinder(args.Client, args.PvcInformer, args.PvInformer, args.StorageClassInformer, time.Duration(args.BindTimeoutSeconds)*time.Second) - - args.StorageClassInformer.Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - AddFunc: c.onStorageClassAdd, - DeleteFunc: c.onStorageClassDelete, - }, - ) - } - - // Setup cache comparer + // Setup cache debugger debugger := cachedebugger.New( args.NodeInformer.Lister(), args.PodInformer.Lister(), c.schedulerCache, c.podQueue, ) - - ch := make(chan os.Signal, 1) - signal.Notify(ch, compareSignal) + debugger.ListenForSignal(c.StopEverything) go func() { - for { - select { - case <-c.StopEverything: - c.podQueue.Close() - return - case <-ch: - debugger.Comparer.Compare() - debugger.Dumper.DumpAll() - } - } + <-c.StopEverything + c.podQueue.Close() }() - return c } -// skipPodUpdate checks whether the specified pod update should be ignored. -// This function will return true if -// - The pod has already been assumed, AND -// - The pod has only its ResourceVersion, Spec.NodeName and/or Annotations -// updated. -func (c *configFactory) skipPodUpdate(pod *v1.Pod) bool { - // Non-assumed pods should never be skipped. - isAssumed, err := c.schedulerCache.IsAssumedPod(pod) - if err != nil { - runtime.HandleError(fmt.Errorf("failed to check whether pod %s/%s is assumed: %v", pod.Namespace, pod.Name, err)) - return false - } - if !isAssumed { - return false - } - - // Gets the assumed pod from the cache. - assumedPod, err := c.schedulerCache.GetPod(pod) - if err != nil { - runtime.HandleError(fmt.Errorf("failed to get assumed pod %s/%s from cache: %v", pod.Namespace, pod.Name, err)) - return false - } - - // Compares the assumed pod in the cache with the pod update. If they are - // equal (with certain fields excluded), this pod update will be skipped. - f := func(pod *v1.Pod) *v1.Pod { - p := pod.DeepCopy() - // ResourceVersion must be excluded because each object update will - // have a new resource version. - p.ResourceVersion = "" - // Spec.NodeName must be excluded because the pod assumed in the cache - // is expected to have a node assigned while the pod update may nor may - // not have this field set. - p.Spec.NodeName = "" - // Annotations must be excluded for the reasons described in - // https://github.com/kubernetes/kubernetes/issues/52914. - p.Annotations = nil - return p - } - assumedPodCopy, podCopy := f(assumedPod), f(pod) - if !reflect.DeepEqual(assumedPodCopy, podCopy) { - return false - } - klog.V(3).Infof("Skipping pod %s/%s update", pod.Namespace, pod.Name) - return true -} - -func (c *configFactory) onPvAdd(obj interface{}) { - // Pods created when there are no PVs available will be stuck in - // unschedulable queue. But unbound PVs created for static provisioning and - // delay binding storage class are skipped in PV controller dynamic - // provisiong and binding process, will not trigger events to schedule pod - // again. So we need to move pods to active queue on PV add for this - // scenario. - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) onPvUpdate(old, new interface{}) { - // Scheduler.bindVolumesWorker may fail to update assumed pod volume - // bindings due to conflicts if PVs are updated by PV controller or other - // parties, then scheduler will add pod back to unschedulable queue. We - // need to move pods to active queue on PV update for this scenario. - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) invalidatePredicatesForPvUpdate(oldPV, newPV *v1.PersistentVolume) { - invalidPredicates := sets.NewString() - // CheckVolumeBinding predicate calls SchedulerVolumeBinder.FindPodVolumes - // which will cache PVs in PodBindingCache. When PV got updated, we should - // invalidate cache, otherwise PVAssumeCache.Assume will fail with out of sync - // error. - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - invalidPredicates.Insert(predicates.CheckVolumeBindingPred) - } - for k, v := range newPV.Labels { - // If PV update modifies the zone/region labels. - if isZoneRegionLabel(k) && !reflect.DeepEqual(v, oldPV.Labels[k]) { - invalidPredicates.Insert(predicates.NoVolumeZoneConflictPred) - break - } - } -} - -// isZoneRegionLabel check if given key of label is zone or region label. -func isZoneRegionLabel(k string) bool { - return k == kubeletapis.LabelZoneFailureDomain || k == kubeletapis.LabelZoneRegion -} - -func (c *configFactory) onPvDelete(obj interface{}) { -} - -func (c *configFactory) invalidatePredicatesForPv(pv *v1.PersistentVolume) { - // You could have a PVC that points to a PV, but the PV object doesn't exist. - // So when the PV object gets added, we can recount. - invalidPredicates := sets.NewString() - - // PV types which impact MaxPDVolumeCountPredicate - if pv.Spec.AWSElasticBlockStore != nil { - invalidPredicates.Insert(predicates.MaxEBSVolumeCountPred) - } - if pv.Spec.GCEPersistentDisk != nil { - invalidPredicates.Insert(predicates.MaxGCEPDVolumeCountPred) - } - if pv.Spec.AzureDisk != nil { - invalidPredicates.Insert(predicates.MaxAzureDiskVolumeCountPred) - } - - if pv.Spec.CSI != nil && utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) { - invalidPredicates.Insert(predicates.MaxCSIVolumeCountPred) - } - - // If PV contains zone related label, it may impact cached NoVolumeZoneConflict - for k := range pv.Labels { - if isZoneRegionLabel(k) { - invalidPredicates.Insert(predicates.NoVolumeZoneConflictPred) - break - } - } - - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // Add/delete impacts the available PVs to choose from - invalidPredicates.Insert(predicates.CheckVolumeBindingPred) - } -} - -func (c *configFactory) onPvcAdd(obj interface{}) { - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) onPvcUpdate(old, new interface{}) { - if !utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - return - } - - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) onPvcDelete(obj interface{}) { -} - -func (c *configFactory) invalidatePredicatesForPvc(pvc *v1.PersistentVolumeClaim) { - // We need to do this here because the ecache uses PVC uid as part of equivalence hash of pod - - // The bound volume type may change - invalidPredicates := sets.NewString(maxPDVolumeCountPredicateKeys...) - - if utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) { - invalidPredicates.Insert(predicates.MaxCSIVolumeCountPred) - } - - // The bound volume's label may change - invalidPredicates.Insert(predicates.NoVolumeZoneConflictPred) - - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // Add/delete impacts the available PVs to choose from - invalidPredicates.Insert(predicates.CheckVolumeBindingPred) - } -} - -func (c *configFactory) invalidatePredicatesForPvcUpdate(old, new *v1.PersistentVolumeClaim) { - invalidPredicates := sets.NewString() - - if old.Spec.VolumeName != new.Spec.VolumeName { - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - // PVC volume binding has changed - invalidPredicates.Insert(predicates.CheckVolumeBindingPred) - } - // The bound volume type may change - invalidPredicates.Insert(maxPDVolumeCountPredicateKeys...) - - if utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) { - invalidPredicates.Insert(predicates.MaxCSIVolumeCountPred) - } - } -} - -func (c *configFactory) onStorageClassAdd(obj interface{}) { - sc, ok := obj.(*storagev1.StorageClass) - if !ok { - klog.Errorf("cannot convert to *storagev1.StorageClass: %v", obj) - return - } - - // CheckVolumeBindingPred fails if pod has unbound immediate PVCs. If these - // PVCs have specified StorageClass name, creating StorageClass objects - // with late binding will cause predicates to pass, so we need to move pods - // to active queue. - // We don't need to invalidate cached results because results will not be - // cached for pod that has unbound immediate PVCs. - if sc.VolumeBindingMode != nil && *sc.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer { - c.podQueue.MoveAllToActiveQueue() - } -} - -func (c *configFactory) onStorageClassDelete(obj interface{}) { -} - -func (c *configFactory) invalidatePredicatesForStorageClass(sc *storagev1.StorageClass) { - invalidPredicates := sets.NewString() - - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - if sc.VolumeBindingMode != nil && *sc.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer { - // Delete can cause predicates to fail - invalidPredicates.Insert(predicates.CheckVolumeBindingPred) - invalidPredicates.Insert(predicates.NoVolumeZoneConflictPred) - } - } -} - -func (c *configFactory) onServiceAdd(obj interface{}) { - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) onServiceUpdate(oldObj interface{}, newObj interface{}) { - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) onServiceDelete(obj interface{}) { - c.podQueue.MoveAllToActiveQueue() -} - // GetNodeStore provides the cache to the nodes, mostly internal use, but may also be called by mock-tests. func (c *configFactory) GetNodeLister() corelisters.NodeLister { return c.nodeLister @@ -658,253 +315,11 @@ func (c *configFactory) GetClient() clientset.Interface { return c.client } -// GetScheduledPodListerIndexer provides a pod lister, mostly internal use, but may also be called by mock-tests. +// GetScheduledPodLister provides a pod lister, mostly internal use, but may also be called by mock-tests. func (c *configFactory) GetScheduledPodLister() corelisters.PodLister { return c.scheduledPodLister } -func (c *configFactory) addPodToCache(obj interface{}) { - pod, ok := obj.(*v1.Pod) - if !ok { - klog.Errorf("cannot convert to *v1.Pod: %v", obj) - return - } - - if err := c.schedulerCache.AddPod(pod); err != nil { - klog.Errorf("scheduler cache AddPod failed: %v", err) - } - - c.podQueue.AssignedPodAdded(pod) - - // NOTE: Updating equivalence cache of addPodToCache has been - // handled optimistically in: pkg/scheduler/scheduler.go#assume() -} - -func (c *configFactory) updatePodInCache(oldObj, newObj interface{}) { - oldPod, ok := oldObj.(*v1.Pod) - if !ok { - klog.Errorf("cannot convert oldObj to *v1.Pod: %v", oldObj) - return - } - newPod, ok := newObj.(*v1.Pod) - if !ok { - klog.Errorf("cannot convert newObj to *v1.Pod: %v", newObj) - return - } - - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. - if err := c.schedulerCache.UpdatePod(oldPod, newPod); err != nil { - klog.Errorf("scheduler cache UpdatePod failed: %v", err) - } - - c.invalidateCachedPredicatesOnUpdatePod(newPod, oldPod) - c.podQueue.AssignedPodUpdated(newPod) -} - -func (c *configFactory) addPodToSchedulingQueue(obj interface{}) { - if err := c.podQueue.Add(obj.(*v1.Pod)); err != nil { - runtime.HandleError(fmt.Errorf("unable to queue %T: %v", obj, err)) - } -} - -func (c *configFactory) updatePodInSchedulingQueue(oldObj, newObj interface{}) { - pod := newObj.(*v1.Pod) - if c.skipPodUpdate(pod) { - return - } - if err := c.podQueue.Update(oldObj.(*v1.Pod), pod); err != nil { - runtime.HandleError(fmt.Errorf("unable to update %T: %v", newObj, err)) - } -} - -func (c *configFactory) deletePodFromSchedulingQueue(obj interface{}) { - var pod *v1.Pod - switch t := obj.(type) { - case *v1.Pod: - pod = obj.(*v1.Pod) - case cache.DeletedFinalStateUnknown: - var ok bool - pod, ok = t.Obj.(*v1.Pod) - if !ok { - runtime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, c)) - return - } - default: - runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) - return - } - if err := c.podQueue.Delete(pod); err != nil { - runtime.HandleError(fmt.Errorf("unable to dequeue %T: %v", obj, err)) - } - if c.volumeBinder != nil { - // Volume binder only wants to keep unassigned pods - c.volumeBinder.DeletePodBindings(pod) - } -} - -func (c *configFactory) invalidateCachedPredicatesOnUpdatePod(newPod *v1.Pod, oldPod *v1.Pod) { -} - -func (c *configFactory) deletePodFromCache(obj interface{}) { - var pod *v1.Pod - switch t := obj.(type) { - case *v1.Pod: - pod = t - case cache.DeletedFinalStateUnknown: - var ok bool - pod, ok = t.Obj.(*v1.Pod) - if !ok { - klog.Errorf("cannot convert to *v1.Pod: %v", t.Obj) - return - } - default: - klog.Errorf("cannot convert to *v1.Pod: %v", t) - return - } - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. - if err := c.schedulerCache.RemovePod(pod); err != nil { - klog.Errorf("scheduler cache RemovePod failed: %v", err) - } - - c.invalidateCachedPredicatesOnDeletePod(pod) - c.podQueue.MoveAllToActiveQueue() -} - -func (c *configFactory) invalidateCachedPredicatesOnDeletePod(pod *v1.Pod) { -} - -func (c *configFactory) addNodeToCache(obj interface{}) { - node, ok := obj.(*v1.Node) - if !ok { - klog.Errorf("cannot convert to *v1.Node: %v", obj) - return - } - - - if err := c.schedulerCache.AddNode(node); err != nil { - klog.Errorf("scheduler cache AddNode failed: %v", err) - } - - c.podQueue.MoveAllToActiveQueue() - // NOTE: add a new node does not affect existing predicates in equivalence cache -} - -func (c *configFactory) updateNodeInCache(oldObj, newObj interface{}) { - oldNode, ok := oldObj.(*v1.Node) - if !ok { - klog.Errorf("cannot convert oldObj to *v1.Node: %v", oldObj) - return - } - newNode, ok := newObj.(*v1.Node) - if !ok { - klog.Errorf("cannot convert newObj to *v1.Node: %v", newObj) - return - } - - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. - if err := c.schedulerCache.UpdateNode(oldNode, newNode); err != nil { - klog.Errorf("scheduler cache UpdateNode failed: %v", err) - } - - c.invalidateCachedPredicatesOnNodeUpdate(newNode, oldNode) - // Only activate unschedulable pods if the node became more schedulable. - // We skip the node property comparison when there is no unschedulable pods in the queue - // to save processing cycles. We still trigger a move to active queue to cover the case - // that a pod being processed by the scheduler is determined unschedulable. We want this - // pod to be reevaluated when a change in the cluster happens. - if c.podQueue.NumUnschedulablePods() == 0 || nodeSchedulingPropertiesChanged(newNode, oldNode) { - c.podQueue.MoveAllToActiveQueue() - } -} - -func (c *configFactory) invalidateCachedPredicatesOnNodeUpdate(newNode *v1.Node, oldNode *v1.Node) { -} - -func nodeSchedulingPropertiesChanged(newNode *v1.Node, oldNode *v1.Node) bool { - if nodeSpecUnschedulableChanged(newNode, oldNode) { - return true - } - if nodeAllocatableChanged(newNode, oldNode) { - return true - } - if nodeLabelsChanged(newNode, oldNode) { - return true - } - if nodeTaintsChanged(newNode, oldNode) { - return true - } - if nodeConditionsChanged(newNode, oldNode) { - return true - } - - return false -} - -func nodeAllocatableChanged(newNode *v1.Node, oldNode *v1.Node) bool { - return !reflect.DeepEqual(oldNode.Status.Allocatable, newNode.Status.Allocatable) -} - -func nodeLabelsChanged(newNode *v1.Node, oldNode *v1.Node) bool { - return !reflect.DeepEqual(oldNode.GetLabels(), newNode.GetLabels()) -} - -func nodeTaintsChanged(newNode *v1.Node, oldNode *v1.Node) bool { - return !reflect.DeepEqual(newNode.Spec.Taints, oldNode.Spec.Taints) -} - -func nodeConditionsChanged(newNode *v1.Node, oldNode *v1.Node) bool { - strip := func(conditions []v1.NodeCondition) map[v1.NodeConditionType]v1.ConditionStatus { - conditionStatuses := make(map[v1.NodeConditionType]v1.ConditionStatus, len(conditions)) - for i := range conditions { - conditionStatuses[conditions[i].Type] = conditions[i].Status - } - return conditionStatuses - } - return !reflect.DeepEqual(strip(oldNode.Status.Conditions), strip(newNode.Status.Conditions)) -} - -func nodeSpecUnschedulableChanged(newNode *v1.Node, oldNode *v1.Node) bool { - return newNode.Spec.Unschedulable != oldNode.Spec.Unschedulable && newNode.Spec.Unschedulable == false -} - -func (c *configFactory) deleteNodeFromCache(obj interface{}) { - var node *v1.Node - switch t := obj.(type) { - case *v1.Node: - node = t - case cache.DeletedFinalStateUnknown: - var ok bool - node, ok = t.Obj.(*v1.Node) - if !ok { - klog.Errorf("cannot convert to *v1.Node: %v", t.Obj) - return - } - default: - klog.Errorf("cannot convert to *v1.Node: %v", t) - return - } - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. - if err := c.schedulerCache.RemoveNode(node); err != nil { - klog.Errorf("scheduler cache RemoveNode failed: %v", err) - } -} - // Create creates a scheduler with the default algorithm provider. func (c *configFactory) Create() (*Config, error) { return c.CreateFromProvider(DefaultProvider) @@ -991,24 +406,6 @@ func (c *configFactory) CreateFromConfig(policy schedulerapi.Policy) (*Config, e return c.CreateFromKeys(predicateKeys, priorityKeys, extenders) } -// getBinderFunc returns an func which returns an extender that supports bind or a default binder based on the given pod. -func (c *configFactory) getBinderFunc(extenders []algorithm.SchedulerExtender) func(pod *v1.Pod) Binder { - var extenderBinder algorithm.SchedulerExtender - for i := range extenders { - if extenders[i].IsBinder() { - extenderBinder = extenders[i] - break - } - } - defaultBinder := &binder{c.client} - return func(pod *v1.Pod) Binder { - if extenderBinder != nil && extenderBinder.IsInterested(pod) { - return extenderBinder - } - return defaultBinder - } -} - // Creates a scheduler from a set of registered fit predicate keys and priority keys. func (c *configFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, extenders []algorithm.SchedulerExtender) (*Config, error) { klog.V(2).Infof("Creating scheduler with fit predicates '%v' and priority functions '%v'", predicateKeys, priorityKeys) @@ -1037,6 +434,9 @@ func (c *configFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, return nil, err } + // TODO(bsalamat): the default registrar should be able to process config files. + c.pluginSet = plugins.NewDefaultPluginSet(pluginsv1alpha1.NewPluginContext(), &c.schedulerCache) + algo := core.NewGenericScheduler( c.schedulerCache, c.podQueue, @@ -1044,6 +444,7 @@ func (c *configFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, predicateMetaProducer, priorityConfigs, priorityMetaProducer, + c.pluginSet, extenders, c.volumeBinder, c.pVCLister, @@ -1059,22 +460,39 @@ func (c *configFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, // The scheduler only needs to consider schedulable nodes. NodeLister: &nodeLister{c.nodeLister}, Algorithm: algo, - GetBinder: c.getBinderFunc(extenders), + GetBinder: getBinderFunc(c.client, extenders), PodConditionUpdater: &podConditionUpdater{c.client}, PodPreemptor: &podPreemptor{c.client}, + PluginSet: c.pluginSet, WaitForCacheSync: func() bool { return cache.WaitForCacheSync(c.StopEverything, c.scheduledPodsHasSynced) }, - NextPod: func() *v1.Pod { - return c.getNextPod() - }, - Error: c.MakeDefaultErrorFunc(podBackoff, c.podQueue), + NextPod: internalqueue.MakeNextPodFunc(c.podQueue), + Error: MakeDefaultErrorFunc(c.client, podBackoff, c.podQueue, c.schedulerCache, c.StopEverything), StopEverything: c.StopEverything, VolumeBinder: c.volumeBinder, SchedulingQueue: c.podQueue, }, nil } +// getBinderFunc returns a func which returns an extender that supports bind or a default binder based on the given pod. +func getBinderFunc(client clientset.Interface, extenders []algorithm.SchedulerExtender) func(pod *v1.Pod) Binder { + var extenderBinder algorithm.SchedulerExtender + for i := range extenders { + if extenders[i].IsBinder() { + extenderBinder = extenders[i] + break + } + } + defaultBinder := &binder{client} + return func(pod *v1.Pod) Binder { + if extenderBinder != nil && extenderBinder.IsInterested(pod) { + return extenderBinder + } + return defaultBinder + } +} + type nodeLister struct { corelisters.NodeLister } @@ -1083,7 +501,7 @@ func (n *nodeLister) List() ([]*v1.Node, error) { return n.NodeLister.List(labels.Everything()) } -func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([]algorithm.PriorityConfig, error) { +func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([]priorities.PriorityConfig, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err @@ -1092,7 +510,7 @@ func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([] return getPriorityFunctionConfigs(priorityKeys, *pluginArgs) } -func (c *configFactory) GetPriorityMetadataProducer() (algorithm.PriorityMetadataProducer, error) { +func (c *configFactory) GetPriorityMetadataProducer() (priorities.PriorityMetadataProducer, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err @@ -1101,7 +519,7 @@ func (c *configFactory) GetPriorityMetadataProducer() (algorithm.PriorityMetadat return getPriorityMetadataProducer(*pluginArgs) } -func (c *configFactory) GetPredicateMetadataProducer() (algorithm.PredicateMetadataProducer, error) { +func (c *configFactory) GetPredicateMetadataProducer() (predicates.PredicateMetadataProducer, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err @@ -1109,7 +527,7 @@ func (c *configFactory) GetPredicateMetadataProducer() (algorithm.PredicateMetad return getPredicateMetadataProducer(*pluginArgs) } -func (c *configFactory) GetPredicates(predicateKeys sets.String) (map[string]algorithm.FitPredicate, error) { +func (c *configFactory) GetPredicates(predicateKeys sets.String) (map[string]predicates.FitPredicate, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err @@ -1136,26 +554,6 @@ func (c *configFactory) getPluginArgs() (*PluginFactoryArgs, error) { }, nil } -func (c *configFactory) getNextPod() *v1.Pod { - pod, err := c.podQueue.Pop() - if err == nil { - klog.V(4).Infof("About to try and schedule pod %v/%v", pod.Namespace, pod.Name) - return pod - } - klog.Errorf("Error while retrieving next pod from scheduling queue: %v", err) - return nil -} - -// assignedPod selects pods that are assigned (scheduled and running). -func assignedPod(pod *v1.Pod) bool { - return len(pod.Spec.NodeName) != 0 -} - -// responsibleForPod returns true if the pod has asked to be scheduled by the given scheduler. -func responsibleForPod(pod *v1.Pod, schedulerName string) bool { - return schedulerName == pod.Spec.SchedulerName -} - // assignedPodLister filters the pods returned from a PodLister to // only include those that have a node name set. type assignedPodLister struct { @@ -1238,7 +636,8 @@ func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) core } } -func (c *configFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue internalqueue.SchedulingQueue) func(pod *v1.Pod, err error) { +// MakeDefaultErrorFunc construct a function to handle pod scheduler error +func MakeDefaultErrorFunc(client clientset.Interface, backoff *util.PodBackoff, podQueue internalqueue.SchedulingQueue, schedulerCache schedulerinternalcache.Cache, stopEverything <-chan struct{}) func(pod *v1.Pod, err error) { return func(pod *v1.Pod, err error) { if err == core.ErrNoNodesAvailable { klog.V(4).Infof("Unable to schedule %v/%v: no nodes are registered to the cluster; waiting", pod.Namespace, pod.Name) @@ -1250,15 +649,10 @@ func (c *configFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue nodeName := errStatus.Status().Details.Name // when node is not found, We do not remove the node right away. Trying again to get // the node and if the node is still not found, then remove it from the scheduler cache. - _, err := c.client.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) + _, err := client.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) if err != nil && errors.IsNotFound(err) { node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: nodeName}} - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. - c.schedulerCache.RemoveNode(&node) + schedulerCache.RemoveNode(&node) } } } else { @@ -1276,15 +670,13 @@ func (c *configFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue Namespace: pod.Namespace, Name: pod.Name, } - origPod := pod // When pod priority is enabled, we would like to place an unschedulable // pod in the unschedulable queue. This ensures that if the pod is nominated // to run on a node, scheduler takes the pod into account when running // predicates for the node. if !util.PodPriorityEnabled() { - entry := backoff.GetEntry(podID) - if !entry.TryWait(backoff.MaxDuration()) { + if !backoff.TryBackoffAndWait(podID, stopEverything) { klog.Warningf("Request for pod %v already in flight, abandoning", podID) return } @@ -1292,25 +684,15 @@ func (c *configFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue // Get the pod again; it may have changed/been scheduled already. getBackoff := initialGetBackoff for { - pod, err := c.client.CoreV1().Pods(podID.Namespace).Get(podID.Name, metav1.GetOptions{}) + pod, err := client.CoreV1().Pods(podID.Namespace).Get(podID.Name, metav1.GetOptions{}) if err == nil { if len(pod.Spec.NodeName) == 0 { podQueue.AddUnschedulableIfNotPresent(pod, podSchedulingCycle) - } else { - if c.volumeBinder != nil { - // Volume binder only wants to keep unassigned pods - c.volumeBinder.DeletePodBindings(pod) - } } break } if errors.IsNotFound(err) { klog.Warningf("A pod %v no longer exists", podID) - - if c.volumeBinder != nil { - // Volume binder only wants to keep unassigned pods - c.volumeBinder.DeletePodBindings(origPod) - } return } klog.Errorf("Error getting pod %v for retry: %v; retrying...", podID, err) @@ -1323,7 +705,7 @@ func (c *configFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue } } -// nodeEnumerator allows a cache.Poller to enumerate items in an v1.NodeList +// nodeEnumerator allows a cache.Poller to enumerate items in a v1.NodeList type nodeEnumerator struct { *v1.NodeList } @@ -1356,7 +738,7 @@ type podConditionUpdater struct { } func (p *podConditionUpdater) Update(pod *v1.Pod, condition *v1.PodCondition) error { - klog.V(3).Infof("Updating pod condition for %s/%s to (%s==%s)", pod.Namespace, pod.Name, condition.Type, condition.Status) + klog.V(3).Infof("Updating pod condition for %s/%s to (%s==%s, Reason=%s)", pod.Namespace, pod.Name, condition.Type, condition.Status, condition.Reason) if podutil.UpdatePodCondition(&pod.Status, condition) { _, err := p.Client.CoreV1().Pods(pod.Namespace).UpdateStatus(pod) return err diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/plugins.go b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/plugins.go index 216a93f7e60..e6db5d106dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/factory/plugins.go @@ -51,23 +51,23 @@ type PluginFactoryArgs struct { } // PriorityMetadataProducerFactory produces PriorityMetadataProducer from the given args. -type PriorityMetadataProducerFactory func(PluginFactoryArgs) algorithm.PriorityMetadataProducer +type PriorityMetadataProducerFactory func(PluginFactoryArgs) priorities.PriorityMetadataProducer // PredicateMetadataProducerFactory produces PredicateMetadataProducer from the given args. -type PredicateMetadataProducerFactory func(PluginFactoryArgs) algorithm.PredicateMetadataProducer +type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.PredicateMetadataProducer // FitPredicateFactory produces a FitPredicate from the given args. -type FitPredicateFactory func(PluginFactoryArgs) algorithm.FitPredicate +type FitPredicateFactory func(PluginFactoryArgs) predicates.FitPredicate // PriorityFunctionFactory produces a PriorityConfig from the given args. // DEPRECATED // Use Map-Reduce pattern for priority functions. -type PriorityFunctionFactory func(PluginFactoryArgs) algorithm.PriorityFunction +type PriorityFunctionFactory func(PluginFactoryArgs) priorities.PriorityFunction // PriorityFunctionFactory2 produces map & reduce priority functions // from a given args. // FIXME: Rename to PriorityFunctionFactory. -type PriorityFunctionFactory2 func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) +type PriorityFunctionFactory2 func(PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) // PriorityConfigFactory produces a PriorityConfig from the given function and weight type PriorityConfigFactory struct { @@ -103,8 +103,8 @@ type AlgorithmProviderConfig struct { // RegisterFitPredicate registers a fit predicate with the algorithm // registry. Returns the name with which the predicate was registered. -func RegisterFitPredicate(name string, predicate algorithm.FitPredicate) string { - return RegisterFitPredicateFactory(name, func(PluginFactoryArgs) algorithm.FitPredicate { return predicate }) +func RegisterFitPredicate(name string, predicate predicates.FitPredicate) string { + return RegisterFitPredicateFactory(name, func(PluginFactoryArgs) predicates.FitPredicate { return predicate }) } // RemoveFitPredicate removes a fit predicate from factory. @@ -181,11 +181,11 @@ func InsertPriorityKeyToAlgorithmProviderMap(key string) { // RegisterMandatoryFitPredicate registers a fit predicate with the algorithm registry, the predicate is used by // kubelet, DaemonSet; it is always included in configuration. Returns the name with which the predicate was // registered. -func RegisterMandatoryFitPredicate(name string, predicate algorithm.FitPredicate) string { +func RegisterMandatoryFitPredicate(name string, predicate predicates.FitPredicate) string { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() validateAlgorithmNameOrDie(name) - fitPredicateMap[name] = func(PluginFactoryArgs) algorithm.FitPredicate { return predicate } + fitPredicateMap[name] = func(PluginFactoryArgs) predicates.FitPredicate { return predicate } mandatoryFitPredicates.Insert(name) return name } @@ -211,7 +211,7 @@ func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string { // generate the predicate function, if a custom type is requested if policy.Argument != nil { if policy.Argument.ServiceAffinity != nil { - predicateFactory = func(args PluginFactoryArgs) algorithm.FitPredicate { + predicateFactory = func(args PluginFactoryArgs) predicates.FitPredicate { predicate, precomputationFunction := predicates.NewServiceAffinityPredicate( args.PodLister, args.ServiceLister, @@ -224,7 +224,7 @@ func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string { return predicate } } else if policy.Argument.LabelsPresence != nil { - predicateFactory = func(args PluginFactoryArgs) algorithm.FitPredicate { + predicateFactory = func(args PluginFactoryArgs) predicates.FitPredicate { return predicates.NewNodeLabelPredicate( policy.Argument.LabelsPresence.Labels, policy.Argument.LabelsPresence.Presence, @@ -270,9 +270,9 @@ func RegisterPredicateMetadataProducerFactory(factory PredicateMetadataProducerF // with which the function was registered. // DEPRECATED // Use Map-Reduce pattern for priority functions. -func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, weight int) string { +func RegisterPriorityFunction(name string, function priorities.PriorityFunction, weight int) string { return RegisterPriorityConfigFactory(name, PriorityConfigFactory{ - Function: func(PluginFactoryArgs) algorithm.PriorityFunction { + Function: func(PluginFactoryArgs) priorities.PriorityFunction { return function }, Weight: weight, @@ -284,11 +284,11 @@ func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, // FIXME: Rename to PriorityFunctionFactory. func RegisterPriorityFunction2( name string, - mapFunction algorithm.PriorityMapFunction, - reduceFunction algorithm.PriorityReduceFunction, + mapFunction priorities.PriorityMapFunction, + reduceFunction priorities.PriorityReduceFunction, weight int) string { return RegisterPriorityConfigFactory(name, PriorityConfigFactory{ - MapReduceFunction: func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return mapFunction, reduceFunction }, Weight: weight, @@ -315,7 +315,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { if policy.Argument != nil { if policy.Argument.ServiceAntiAffinity != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewServiceAntiAffinityPriority( args.PodLister, args.ServiceLister, @@ -326,7 +326,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { } } else if policy.Argument.LabelPreference != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewNodeLabelPriority( policy.Argument.LabelPreference.Label, policy.Argument.LabelPreference.Presence, @@ -336,7 +336,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { } } else if policy.Argument.RequestedToCapacityRatioArguments != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { scoringFunctionShape := buildScoringFunctionShapeFromRequestedToCapacityRatioArguments(policy.Argument.RequestedToCapacityRatioArguments) p := priorities.RequestedToCapacityRatioResourceAllocationPriority(scoringFunctionShape) return p.PriorityMap, nil @@ -408,68 +408,68 @@ func GetAlgorithmProvider(name string) (*AlgorithmProviderConfig, error) { return &provider, nil } -func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[string]algorithm.FitPredicate, error) { +func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[string]predicates.FitPredicate, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() - predicates := map[string]algorithm.FitPredicate{} + fitPredicates := map[string]predicates.FitPredicate{} for _, name := range names.List() { factory, ok := fitPredicateMap[name] if !ok { - return nil, fmt.Errorf("Invalid predicate name %q specified - no corresponding function found", name) + return nil, fmt.Errorf("invalid predicate name %q specified - no corresponding function found", name) } - predicates[name] = factory(args) + fitPredicates[name] = factory(args) } // Always include mandatory fit predicates. for name := range mandatoryFitPredicates { if factory, found := fitPredicateMap[name]; found { - predicates[name] = factory(args) + fitPredicates[name] = factory(args) } } - return predicates, nil + return fitPredicates, nil } -func getPriorityMetadataProducer(args PluginFactoryArgs) (algorithm.PriorityMetadataProducer, error) { +func getPriorityMetadataProducer(args PluginFactoryArgs) (priorities.PriorityMetadataProducer, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() if priorityMetadataProducer == nil { - return algorithm.EmptyPriorityMetadataProducer, nil + return priorities.EmptyPriorityMetadataProducer, nil } return priorityMetadataProducer(args), nil } -func getPredicateMetadataProducer(args PluginFactoryArgs) (algorithm.PredicateMetadataProducer, error) { +func getPredicateMetadataProducer(args PluginFactoryArgs) (predicates.PredicateMetadataProducer, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() if predicateMetadataProducer == nil { - return algorithm.EmptyPredicateMetadataProducer, nil + return predicates.EmptyPredicateMetadataProducer, nil } return predicateMetadataProducer(args), nil } -func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]algorithm.PriorityConfig, error) { +func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]priorities.PriorityConfig, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() - configs := []algorithm.PriorityConfig{} + var configs []priorities.PriorityConfig for _, name := range names.List() { factory, ok := priorityFunctionMap[name] if !ok { - return nil, fmt.Errorf("Invalid priority name %s specified - no corresponding function found", name) + return nil, fmt.Errorf("invalid priority name %s specified - no corresponding function found", name) } if factory.Function != nil { - configs = append(configs, algorithm.PriorityConfig{ + configs = append(configs, priorities.PriorityConfig{ Name: name, Function: factory.Function(args), Weight: factory.Weight, }) } else { mapFunction, reduceFunction := factory.MapReduceFunction(args) - configs = append(configs, algorithm.PriorityConfig{ + configs = append(configs, priorities.PriorityConfig{ Name: name, Map: mapFunction, Reduce: reduceFunction, @@ -484,12 +484,12 @@ func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]al } // validateSelectedConfigs validates the config weights to avoid the overflow. -func validateSelectedConfigs(configs []algorithm.PriorityConfig) error { +func validateSelectedConfigs(configs []priorities.PriorityConfig) error { var totalPriority int for _, config := range configs { // Checks totalPriority against MaxTotalPriority to avoid overflow if config.Weight*schedulerapi.MaxPriority > schedulerapi.MaxTotalPriority-totalPriority { - return fmt.Errorf("Total priority of priority functions has overflown") + return fmt.Errorf("total priority of priority functions has overflown") } totalPriority += config.Weight * schedulerapi.MaxPriority } @@ -542,7 +542,7 @@ func ListRegisteredFitPredicates() []string { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() - names := []string{} + var names []string for name := range fitPredicateMap { names = append(names, name) } @@ -554,7 +554,7 @@ func ListRegisteredPriorityFunctions() []string { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() - names := []string{} + var names []string for name := range priorityFunctionMap { names = append(names, name) } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/BUILD index 5b505704eae..ec7d7f756ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/BUILD @@ -12,7 +12,7 @@ go_library( deps = [ "//pkg/features:go_default_library", "//pkg/scheduler/algorithm:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/util/node:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", @@ -27,15 +27,13 @@ go_test( name = "go_default_test", srcs = [ "cache_test.go", - "main_test.go", "node_tree_test.go", ], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go index ebfff02f359..4a91d83e77e 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go @@ -21,12 +21,12 @@ import ( "sync" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/scheduler/algorithm" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/klog" ) @@ -45,6 +45,15 @@ func New(ttl time.Duration, stop <-chan struct{}) Cache { return cache } +// nodeInfoListItem holds a NodeInfo pointer and acts as an item in a doubly +// linked list. When a NodeInfo is updated, it goes to the head of the list. +// The items closer to the head are the most recently updated items. +type nodeInfoListItem struct { + info *schedulernodeinfo.NodeInfo + next *nodeInfoListItem + prev *nodeInfoListItem +} + type schedulerCache struct { stop <-chan struct{} ttl time.Duration @@ -57,8 +66,11 @@ type schedulerCache struct { assumedPods map[string]bool // a map from pod key to podState. podStates map[string]*podState - nodes map[string]*schedulercache.NodeInfo - nodeTree *NodeTree + nodes map[string]*nodeInfoListItem + // headNode points to the most recently updated NodeInfo in "nodes". It is the + // head of the linked list. + headNode *nodeInfoListItem + nodeTree *NodeTree // A map from image name to its imageState. imageStates map[string]*imageState } @@ -79,8 +91,8 @@ type imageState struct { } // createImageStateSummary returns a summarizing snapshot of the given image's state. -func (cache *schedulerCache) createImageStateSummary(state *imageState) *schedulercache.ImageStateSummary { - return &schedulercache.ImageStateSummary{ +func (cache *schedulerCache) createImageStateSummary(state *imageState) *schedulernodeinfo.ImageStateSummary { + return &schedulernodeinfo.ImageStateSummary{ Size: state.size, NumNodes: len(state.nodes), } @@ -92,7 +104,7 @@ func newSchedulerCache(ttl, period time.Duration, stop <-chan struct{}) *schedul period: period, stop: stop, - nodes: make(map[string]*schedulercache.NodeInfo), + nodes: make(map[string]*nodeInfoListItem), nodeTree: newNodeTree(nil), assumedPods: make(map[string]bool), podStates: make(map[string]*podState), @@ -100,18 +112,85 @@ func newSchedulerCache(ttl, period time.Duration, stop <-chan struct{}) *schedul } } -// Snapshot takes a snapshot of the current schedulerinternalcache. The method has performance impact, -// and should be only used in non-critical path. +// newNodeInfoListItem initializes a new nodeInfoListItem. +func newNodeInfoListItem(ni *schedulernodeinfo.NodeInfo) *nodeInfoListItem { + return &nodeInfoListItem{ + info: ni, + } +} + +// NewNodeInfoSnapshot initializes a NodeInfoSnapshot struct and returns it. +func NewNodeInfoSnapshot() NodeInfoSnapshot { + return NodeInfoSnapshot{ + NodeInfoMap: make(map[string]*schedulernodeinfo.NodeInfo), + } +} + +// moveNodeInfoToHead moves a NodeInfo to the head of "cache.nodes" doubly +// linked list. The head is the most recently updated NodeInfo. +// We assume cache lock is already acquired. +func (cache *schedulerCache) moveNodeInfoToHead(name string) { + ni, ok := cache.nodes[name] + if !ok { + klog.Errorf("No NodeInfo with name %v found in the cache", name) + return + } + // if the node info list item is already at the head, we are done. + if ni == cache.headNode { + return + } + + if ni.prev != nil { + ni.prev.next = ni.next + } + if ni.next != nil { + ni.next.prev = ni.prev + } + if cache.headNode != nil { + cache.headNode.prev = ni + } + ni.next = cache.headNode + ni.prev = nil + cache.headNode = ni +} + +// removeNodeInfoFromList removes a NodeInfo from the "cache.nodes" doubly +// linked list. +// We assume cache lock is already acquired. +func (cache *schedulerCache) removeNodeInfoFromList(name string) { + ni, ok := cache.nodes[name] + if !ok { + klog.Errorf("No NodeInfo with name %v found in the cache", name) + return + } + + if ni.prev != nil { + ni.prev.next = ni.next + } + if ni.next != nil { + ni.next.prev = ni.prev + } + // if the removed item was at the head, we must update the head. + if ni == cache.headNode { + cache.headNode = ni.next + } + delete(cache.nodes, name) +} + +// Snapshot takes a snapshot of the current scheduler cache. This is used for +// debugging purposes only and shouldn't be confused with UpdateNodeInfoSnapshot +// function. +// This method is expensive, and should be only used in non-critical path. func (cache *schedulerCache) Snapshot() *Snapshot { cache.mu.RLock() defer cache.mu.RUnlock() - nodes := make(map[string]*schedulercache.NodeInfo) + nodes := make(map[string]*schedulernodeinfo.NodeInfo, len(cache.nodes)) for k, v := range cache.nodes { - nodes[k] = v.Clone() + nodes[k] = v.info.Clone() } - assumedPods := make(map[string]bool) + assumedPods := make(map[string]bool, len(cache.assumedPods)) for k, v := range cache.assumedPods { assumedPods[k] = v } @@ -122,18 +201,38 @@ func (cache *schedulerCache) Snapshot() *Snapshot { } } -func (cache *schedulerCache) UpdateNodeNameToInfoMap(nodeNameToInfo map[string]*schedulercache.NodeInfo) error { +// UpdateNodeInfoSnapshot takes a snapshot of cached NodeInfo map. This is called at +// beginning of every scheduling cycle. +// This function tracks generation number of NodeInfo and updates only the +// entries of an existing snapshot that have changed after the snapshot was taken. +func (cache *schedulerCache) UpdateNodeInfoSnapshot(nodeSnapshot *NodeInfoSnapshot) error { cache.mu.Lock() defer cache.mu.Unlock() - for name, info := range cache.nodes { - if current, ok := nodeNameToInfo[name]; !ok || current.GetGeneration() != info.GetGeneration() { - nodeNameToInfo[name] = info.Clone() + // Get the last generation of the the snapshot. + snapshotGeneration := nodeSnapshot.Generation + + // Start from the head of the NodeInfo doubly linked list and update snapshot + // of NodeInfos updated after the last snapshot. + for node := cache.headNode; node != nil; node = node.next { + if node.info.GetGeneration() <= snapshotGeneration { + // all the nodes are updated before the existing snapshot. We are done. + break + } + if np := node.info.Node(); np != nil { + nodeSnapshot.NodeInfoMap[np.Name] = node.info.Clone() } } - for name := range nodeNameToInfo { - if _, ok := cache.nodes[name]; !ok { - delete(nodeNameToInfo, name) + // Update the snapshot generation with the latest NodeInfo generation. + if cache.headNode != nil { + nodeSnapshot.Generation = cache.headNode.info.GetGeneration() + } + + if len(nodeSnapshot.NodeInfoMap) > len(cache.nodes) { + for name := range nodeSnapshot.NodeInfoMap { + if _, ok := cache.nodes[name]; !ok { + delete(nodeSnapshot.NodeInfoMap, name) + } } } return nil @@ -151,12 +250,12 @@ func (cache *schedulerCache) FilteredList(podFilter algorithm.PodFilter, selecto // can avoid expensive array growth without wasting too much memory by // pre-allocating capacity. maxSize := 0 - for _, info := range cache.nodes { - maxSize += len(info.Pods()) + for _, n := range cache.nodes { + maxSize += len(n.info.Pods()) } pods := make([]*v1.Pod, 0, maxSize) - for _, info := range cache.nodes { - for _, pod := range info.Pods() { + for _, n := range cache.nodes { + for _, pod := range n.info.Pods() { if podFilter(pod) && selector.Matches(labels.Set(pod.Labels)) { pods = append(pods, pod) } @@ -166,7 +265,7 @@ func (cache *schedulerCache) FilteredList(podFilter algorithm.PodFilter, selecto } func (cache *schedulerCache) AssumePod(pod *v1.Pod) error { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return err } @@ -192,7 +291,7 @@ func (cache *schedulerCache) FinishBinding(pod *v1.Pod) error { // finishBinding exists to make tests determinitistic by injecting now as an argument func (cache *schedulerCache) finishBinding(pod *v1.Pod, now time.Time) error { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return err } @@ -211,7 +310,7 @@ func (cache *schedulerCache) finishBinding(pod *v1.Pod, now time.Time) error { } func (cache *schedulerCache) ForgetPod(pod *v1.Pod) error { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return err } @@ -243,10 +342,11 @@ func (cache *schedulerCache) ForgetPod(pod *v1.Pod) error { func (cache *schedulerCache) addPod(pod *v1.Pod) { n, ok := cache.nodes[pod.Spec.NodeName] if !ok { - n = schedulercache.NewNodeInfo() + n = newNodeInfoListItem(schedulernodeinfo.NewNodeInfo()) cache.nodes[pod.Spec.NodeName] = n } - n.AddPod(pod) + n.info.AddPod(pod) + cache.moveNodeInfoToHead(pod.Spec.NodeName) } // Assumes that lock is already acquired. @@ -260,18 +360,23 @@ func (cache *schedulerCache) updatePod(oldPod, newPod *v1.Pod) error { // Assumes that lock is already acquired. func (cache *schedulerCache) removePod(pod *v1.Pod) error { - n := cache.nodes[pod.Spec.NodeName] - if err := n.RemovePod(pod); err != nil { + n, ok := cache.nodes[pod.Spec.NodeName] + if !ok { + return fmt.Errorf("node %v is not found", pod.Spec.NodeName) + } + if err := n.info.RemovePod(pod); err != nil { return err } - if len(n.Pods()) == 0 && n.Node() == nil { - delete(cache.nodes, pod.Spec.NodeName) + if len(n.info.Pods()) == 0 && n.info.Node() == nil { + cache.removeNodeInfoFromList(pod.Spec.NodeName) + } else { + cache.moveNodeInfoToHead(pod.Spec.NodeName) } return nil } func (cache *schedulerCache) AddPod(pod *v1.Pod) error { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return err } @@ -306,7 +411,7 @@ func (cache *schedulerCache) AddPod(pod *v1.Pod) error { } func (cache *schedulerCache) UpdatePod(oldPod, newPod *v1.Pod) error { - key, err := schedulercache.GetPodKey(oldPod) + key, err := schedulernodeinfo.GetPodKey(oldPod) if err != nil { return err } @@ -334,7 +439,7 @@ func (cache *schedulerCache) UpdatePod(oldPod, newPod *v1.Pod) error { } func (cache *schedulerCache) RemovePod(pod *v1.Pod) error { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return err } @@ -363,7 +468,7 @@ func (cache *schedulerCache) RemovePod(pod *v1.Pod) error { } func (cache *schedulerCache) IsAssumedPod(pod *v1.Pod) (bool, error) { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return false, err } @@ -379,7 +484,7 @@ func (cache *schedulerCache) IsAssumedPod(pod *v1.Pod) (bool, error) { } func (cache *schedulerCache) GetPod(pod *v1.Pod) (*v1.Pod, error) { - key, err := schedulercache.GetPodKey(pod) + key, err := schedulernodeinfo.GetPodKey(pod) if err != nil { return nil, err } @@ -401,15 +506,16 @@ func (cache *schedulerCache) AddNode(node *v1.Node) error { n, ok := cache.nodes[node.Name] if !ok { - n = schedulercache.NewNodeInfo() + n = newNodeInfoListItem(schedulernodeinfo.NewNodeInfo()) cache.nodes[node.Name] = n } else { - cache.removeNodeImageStates(n.Node()) + cache.removeNodeImageStates(n.info.Node()) } + cache.moveNodeInfoToHead(node.Name) cache.nodeTree.AddNode(node) - cache.addNodeImageStates(node, n) - return n.SetNode(node) + cache.addNodeImageStates(node, n.info) + return n.info.SetNode(node) } func (cache *schedulerCache) UpdateNode(oldNode, newNode *v1.Node) error { @@ -418,31 +524,37 @@ func (cache *schedulerCache) UpdateNode(oldNode, newNode *v1.Node) error { n, ok := cache.nodes[newNode.Name] if !ok { - n = schedulercache.NewNodeInfo() + n = newNodeInfoListItem(schedulernodeinfo.NewNodeInfo()) cache.nodes[newNode.Name] = n } else { - cache.removeNodeImageStates(n.Node()) + cache.removeNodeImageStates(n.info.Node()) } + cache.moveNodeInfoToHead(newNode.Name) cache.nodeTree.UpdateNode(oldNode, newNode) - cache.addNodeImageStates(newNode, n) - return n.SetNode(newNode) + cache.addNodeImageStates(newNode, n.info) + return n.info.SetNode(newNode) } func (cache *schedulerCache) RemoveNode(node *v1.Node) error { cache.mu.Lock() defer cache.mu.Unlock() - n := cache.nodes[node.Name] - if err := n.RemoveNode(node); err != nil { + n, ok := cache.nodes[node.Name] + if !ok { + return fmt.Errorf("node %v is not found", node.Name) + } + if err := n.info.RemoveNode(node); err != nil { return err } // We remove NodeInfo for this node only if there aren't any pods on this node. // We can't do it unconditionally, because notifications about pods are delivered // in a different watch, and thus can potentially be observed later, even though // they happened before node removal. - if len(n.Pods()) == 0 && n.Node() == nil { - delete(cache.nodes, node.Name) + if len(n.info.Pods()) == 0 && n.info.Node() == nil { + cache.removeNodeInfoFromList(node.Name) + } else { + cache.moveNodeInfoToHead(node.Name) } cache.nodeTree.RemoveNode(node) @@ -452,8 +564,8 @@ func (cache *schedulerCache) RemoveNode(node *v1.Node) error { // addNodeImageStates adds states of the images on given node to the given nodeInfo and update the imageStates in // scheduler cache. This function assumes the lock to scheduler cache has been acquired. -func (cache *schedulerCache) addNodeImageStates(node *v1.Node, nodeInfo *schedulercache.NodeInfo) { - newSum := make(map[string]*schedulercache.ImageStateSummary) +func (cache *schedulerCache) addNodeImageStates(node *v1.Node, nodeInfo *schedulernodeinfo.NodeInfo) { + newSum := make(map[string]*schedulernodeinfo.ImageStateSummary) for _, image := range node.Status.Images { for _, name := range image.Names { diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/BUILD index 320c9734fba..bab16194a5f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/BUILD @@ -6,13 +6,15 @@ go_library( "comparer.go", "debugger.go", "dumper.go", + "signal.go", + "signal_windows.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger", visibility = ["//pkg/scheduler:__subpackages__"], deps = [ - "//pkg/scheduler/cache:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", @@ -25,7 +27,7 @@ go_test( srcs = ["comparer_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/comparer.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/comparer.go index e78df11184a..ac0c1ff4d62 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/comparer.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/comparer.go @@ -24,9 +24,9 @@ import ( "k8s.io/apimachinery/pkg/labels" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/klog" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // CacheComparer is an implementation of the Scheduler's cache comparer. @@ -54,13 +54,13 @@ func (c *CacheComparer) Compare() error { snapshot := c.Cache.Snapshot() - waitingPods := c.PodQueue.WaitingPods() + pendingPods := c.PodQueue.PendingPods() if missed, redundant := c.CompareNodes(nodes, snapshot.Nodes); len(missed)+len(redundant) != 0 { klog.Warningf("cache mismatch: missed nodes: %s; redundant nodes: %s", missed, redundant) } - if missed, redundant := c.ComparePods(pods, waitingPods, snapshot.Nodes); len(missed)+len(redundant) != 0 { + if missed, redundant := c.ComparePods(pods, pendingPods, snapshot.Nodes); len(missed)+len(redundant) != 0 { klog.Warningf("cache mismatch: missed pods: %s; redundant pods: %s", missed, redundant) } @@ -68,7 +68,7 @@ func (c *CacheComparer) Compare() error { } // CompareNodes compares actual nodes with cached nodes. -func (c *CacheComparer) CompareNodes(nodes []*v1.Node, nodeinfos map[string]*schedulercache.NodeInfo) (missed, redundant []string) { +func (c *CacheComparer) CompareNodes(nodes []*v1.Node, nodeinfos map[string]*schedulernodeinfo.NodeInfo) (missed, redundant []string) { actual := []string{} for _, node := range nodes { actual = append(actual, node.Name) @@ -83,7 +83,7 @@ func (c *CacheComparer) CompareNodes(nodes []*v1.Node, nodeinfos map[string]*sch } // ComparePods compares actual pods with cached pods. -func (c *CacheComparer) ComparePods(pods, waitingPods []*v1.Pod, nodeinfos map[string]*schedulercache.NodeInfo) (missed, redundant []string) { +func (c *CacheComparer) ComparePods(pods, waitingPods []*v1.Pod, nodeinfos map[string]*schedulernodeinfo.NodeInfo) (missed, redundant []string) { actual := []string{} for _, pod := range pods { actual = append(actual, string(pod.UID)) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/debugger.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/debugger.go index 64428d5693e..d8839ec67e8 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/debugger.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/debugger.go @@ -17,6 +17,9 @@ limitations under the License. package debugger import ( + "os" + "os/signal" + corelisters "k8s.io/client-go/listers/core/v1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -48,3 +51,22 @@ func New( }, } } + +// ListenForSignal starts a goroutine that will trigger the CacheDebugger's +// behavior when the process receives SIGINT (Windows) or SIGUSER2 (non-Windows). +func (d *CacheDebugger) ListenForSignal(stopCh <-chan struct{}) { + ch := make(chan os.Signal, 1) + signal.Notify(ch, compareSignal) + + go func() { + for { + select { + case <-stopCh: + return + case <-ch: + d.Comparer.Compare() + d.Dumper.DumpAll() + } + } + }() +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/dumper.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/dumper.go index b9084d377d9..497d4b1b71f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/dumper.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/dumper.go @@ -23,9 +23,9 @@ import ( "k8s.io/klog" "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/scheduler/cache" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/queue" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // CacheDumper writes some information from the scheduler cache and the scheduling queue to the @@ -52,16 +52,16 @@ func (d *CacheDumper) dumpNodes() { // dumpSchedulingQueue writes pods in the scheduling queue to the scheduler logs. func (d *CacheDumper) dumpSchedulingQueue() { - waitingPods := d.podQueue.WaitingPods() + pendingPods := d.podQueue.PendingPods() var podData strings.Builder - for _, p := range waitingPods { + for _, p := range pendingPods { podData.WriteString(printPod(p)) } klog.Infof("Dump of scheduling queue:\n%s", podData.String()) } // printNodeInfo writes parts of NodeInfo to a string. -func printNodeInfo(n *cache.NodeInfo) string { +func printNodeInfo(n *schedulernodeinfo.NodeInfo) string { var nodeData strings.Builder nodeData.WriteString(fmt.Sprintf("\nNode name: %+v\nRequested Resources: %+v\nAllocatable Resources:%+v\nNumber of Pods: %v\nPods:\n", n.Node().Name, n.RequestedResource(), n.AllocatableResource(), len(n.Pods()))) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal.go similarity index 97% rename from vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal.go rename to vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal.go index 8ec17048ebb..9a56b04d8d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal.go @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package factory +package debugger import "syscall" diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal_windows.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal_windows.go similarity index 97% rename from vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal_windows.go rename to vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal_windows.go index 9df239874c3..25c015b0e17 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/factory/signal_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger/signal_windows.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package factory +package debugger import "os" diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/interface.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/interface.go index 4de292cea78..699818b1e6e 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/interface.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/interface.go @@ -20,7 +20,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/kubernetes/pkg/scheduler/algorithm" - schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // Cache collects pods' information and provides node-level aggregated information. @@ -95,10 +95,10 @@ type Cache interface { // RemoveNode removes overall information about node. RemoveNode(node *v1.Node) error - // UpdateNodeNameToInfoMap updates the passed infoMap to the current contents of Cache. + // UpdateNodeInfoSnapshot updates the passed infoSnapshot to the current contents of Cache. // The node info contains aggregated information of pods scheduled (including assumed to be) // on this node. - UpdateNodeNameToInfoMap(infoMap map[string]*schedulercache.NodeInfo) error + UpdateNodeInfoSnapshot(nodeSnapshot *NodeInfoSnapshot) error // List lists all cached pods (including assumed ones). List(labels.Selector) ([]*v1.Pod, error) @@ -116,5 +116,13 @@ type Cache interface { // Snapshot is a snapshot of cache state type Snapshot struct { AssumedPods map[string]bool - Nodes map[string]*schedulercache.NodeInfo + Nodes map[string]*schedulernodeinfo.NodeInfo +} + +// NodeInfoSnapshot is a snapshot of cache NodeInfo. The scheduler takes a +// snapshot at the beginning of each scheduling cycle and uses it for its +// operations in that cycle. +type NodeInfoSnapshot struct { + NodeInfoMap map[string]*schedulernodeinfo.NodeInfo + Generation int64 } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/node_tree.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/node_tree.go index 80ce6d195fa..f29024d0ed5 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/node_tree.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/node_tree.go @@ -32,7 +32,7 @@ type NodeTree struct { tree map[string]*nodeArray // a map from zone (region-zone) to an array of nodes in the zone. zones []string // a list of all the zones in the tree (keys) zoneIndex int - NumNodes int + numNodes int mu sync.RWMutex } @@ -91,7 +91,7 @@ func (nt *NodeTree) addNode(n *v1.Node) { nt.tree[zone] = &nodeArray{nodes: []string{n.Name}, lastIndex: 0} } klog.V(5).Infof("Added node %v in group %v to NodeTree", n.Name, zone) - nt.NumNodes++ + nt.numNodes++ } // RemoveNode removes a node from the NodeTree. @@ -111,7 +111,7 @@ func (nt *NodeTree) removeNode(n *v1.Node) error { nt.removeZone(zone) } klog.V(5).Infof("Removed node %v in group %v from NodeTree", n.Name, zone) - nt.NumNodes-- + nt.numNodes-- return nil } } @@ -184,3 +184,10 @@ func (nt *NodeTree) Next() string { } } } + +// NumNodes returns the number of nodes. +func (nt *NodeTree) NumNodes() int { + nt.mu.RLock() + defer nt.mu.RUnlock() + return nt.numNodes +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/BUILD index ea7b66fe3f4..6a6adbffe13 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/BUILD @@ -29,6 +29,7 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go index 752b0adee4b..1a3a0877663 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go @@ -27,7 +27,6 @@ limitations under the License. package queue import ( - "container/heap" "fmt" "reflect" "sync" @@ -77,7 +76,7 @@ type SchedulingQueue interface { AssignedPodAdded(pod *v1.Pod) AssignedPodUpdated(pod *v1.Pod) NominatedPodsForNode(nodeName string) []*v1.Pod - WaitingPods() []*v1.Pod + PendingPods() []*v1.Pod // Close closes the SchedulingQueue so that the goroutine which is // waiting to pop items can exit gracefully. Close() @@ -151,8 +150,8 @@ func (f *FIFO) Pop() (*v1.Pod, error) { return result.(*v1.Pod), err } -// WaitingPods returns all the waiting pods in the queue. -func (f *FIFO) WaitingPods() []*v1.Pod { +// PendingPods returns all the pods in the queue. +func (f *FIFO) PendingPods() []*v1.Pod { result := []*v1.Pod{} for _, pod := range f.FIFO.List() { result = append(result, pod.(*v1.Pod)) @@ -206,19 +205,26 @@ func NominatedNodeName(pod *v1.Pod) string { // PriorityQueue implements a scheduling queue. It is an alternative to FIFO. // The head of PriorityQueue is the highest priority pending pod. This structure -// has two sub queues. One sub-queue holds pods that are being considered for +// has three sub queues. One sub-queue holds pods that are being considered for // scheduling. This is called activeQ and is a Heap. Another queue holds // pods that are already tried and are determined to be unschedulable. The latter -// is called unschedulableQ. +// is called unschedulableQ. The third queue holds pods that are moved from +// unschedulable queues and will be moved to active queue when backoff are completed. type PriorityQueue struct { stop <-chan struct{} clock util.Clock - lock sync.RWMutex - cond sync.Cond + // podBackoff tracks backoff for pods attempting to be rescheduled + podBackoff *util.PodBackoff + + lock sync.RWMutex + cond sync.Cond // activeQ is heap structure that scheduler actively looks at to find pods to // schedule. Head of heap is the highest priority pod. - activeQ *Heap + activeQ *util.Heap + // podBackoffQ is a heap ordered by backoff expiry. Pods which have completed backoff + // are popped from this heap before the scheduler looks at activeQ + podBackoffQ *util.Heap // unschedulableQ holds pods that have been tried and determined unschedulable. unschedulableQ *UnschedulablePodsMap // nominatedPods is a structures that stores pods which are nominated to run @@ -254,69 +260,102 @@ func podTimestamp(pod *v1.Pod) *metav1.Time { return &condition.LastProbeTime } +// podInfo is minimum cell in the scheduling queue. +type podInfo struct { + pod *v1.Pod + // The time pod added to the scheduling queue. + timestamp time.Time +} + +// newPodInfoNoTimestamp builds a podInfo object without timestamp. +func newPodInfoNoTimestamp(pod *v1.Pod) *podInfo { + return &podInfo{ + pod: pod, + } +} + // activeQComp is the function used by the activeQ heap algorithm to sort pods. // It sorts pods based on their priority. When priorities are equal, it uses -// podTimestamp. -func activeQComp(pod1, pod2 interface{}) bool { - p1 := pod1.(*v1.Pod) - p2 := pod2.(*v1.Pod) - prio1 := util.GetPodPriority(p1) - prio2 := util.GetPodPriority(p2) - return (prio1 > prio2) || (prio1 == prio2 && podTimestamp(p1).Before(podTimestamp(p2))) +// podInfo.timestamp. +func activeQComp(podInfo1, podInfo2 interface{}) bool { + pInfo1 := podInfo1.(*podInfo) + pInfo2 := podInfo2.(*podInfo) + prio1 := util.GetPodPriority(pInfo1.pod) + prio2 := util.GetPodPriority(pInfo2.pod) + return (prio1 > prio2) || (prio1 == prio2 && pInfo1.timestamp.Before(pInfo2.timestamp)) } // NewPriorityQueue creates a PriorityQueue object. func NewPriorityQueue(stop <-chan struct{}) *PriorityQueue { + return NewPriorityQueueWithClock(stop, util.RealClock{}) +} + +// NewPriorityQueueWithClock creates a PriorityQueue which uses the passed clock for time. +func NewPriorityQueueWithClock(stop <-chan struct{}, clock util.Clock) *PriorityQueue { pq := &PriorityQueue{ - clock: util.RealClock{}, + clock: clock, stop: stop, - activeQ: newHeap(cache.MetaNamespaceKeyFunc, activeQComp), - unschedulableQ: newUnschedulablePodsMap(), + podBackoff: util.CreatePodBackoffWithClock(1*time.Second, 10*time.Second, clock), + activeQ: util.NewHeap(podInfoKeyFunc, activeQComp), + unschedulableQ: newUnschedulablePodsMap(clock), nominatedPods: newNominatedPodMap(), moveRequestCycle: -1, } pq.cond.L = &pq.lock + pq.podBackoffQ = util.NewHeap(podInfoKeyFunc, pq.podsCompareBackoffCompleted) pq.run() + return pq } -// run starts the goroutine to pump from unschedulableQ to activeQ +// run starts the goroutine to pump from podBackoffQ to activeQ func (p *PriorityQueue) run() { + go wait.Until(p.flushBackoffQCompleted, 1.0*time.Second, p.stop) go wait.Until(p.flushUnschedulableQLeftover, 30*time.Second, p.stop) } // Add adds a pod to the active queue. It should be called only when a new pod -// is added so there is no chance the pod is already in either queue. +// is added so there is no chance the pod is already in active/unschedulable/backoff queues func (p *PriorityQueue) Add(pod *v1.Pod) error { p.lock.Lock() defer p.lock.Unlock() - err := p.activeQ.Add(pod) - if err != nil { + pInfo := p.newPodInfo(pod) + if err := p.activeQ.Add(pInfo); err != nil { klog.Errorf("Error adding pod %v/%v to the scheduling queue: %v", pod.Namespace, pod.Name, err) - } else { - if p.unschedulableQ.get(pod) != nil { - klog.Errorf("Error: pod %v/%v is already in the unschedulable queue.", pod.Namespace, pod.Name) - p.unschedulableQ.delete(pod) - } - p.nominatedPods.add(pod, "") - p.cond.Broadcast() + return err } - return err + if p.unschedulableQ.get(pod) != nil { + klog.Errorf("Error: pod %v/%v is already in the unschedulable queue.", pod.Namespace, pod.Name) + p.unschedulableQ.delete(pod) + } + // Delete pod from backoffQ if it is backing off + if err := p.podBackoffQ.Delete(pInfo); err == nil { + klog.Errorf("Error: pod %v/%v is already in the podBackoff queue.", pod.Namespace, pod.Name) + } + p.nominatedPods.add(pod, "") + p.cond.Broadcast() + + return nil } // AddIfNotPresent adds a pod to the active queue if it is not present in any of -// the two queues. If it is present in any, it doesn't do any thing. +// the queues. If it is present in any, it doesn't do any thing. func (p *PriorityQueue) AddIfNotPresent(pod *v1.Pod) error { p.lock.Lock() defer p.lock.Unlock() if p.unschedulableQ.get(pod) != nil { return nil } - if _, exists, _ := p.activeQ.Get(pod); exists { + + pInfo := p.newPodInfo(pod) + if _, exists, _ := p.activeQ.Get(pInfo); exists { return nil } - err := p.activeQ.Add(pod) + if _, exists, _ := p.podBackoffQ.Get(pInfo); exists { + return nil + } + err := p.activeQ.Add(pInfo) if err != nil { klog.Errorf("Error adding pod %v/%v to the scheduling queue: %v", pod.Namespace, pod.Name, err) } else { @@ -331,6 +370,41 @@ func isPodUnschedulable(pod *v1.Pod) bool { return cond != nil && cond.Status == v1.ConditionFalse && cond.Reason == v1.PodReasonUnschedulable } +// nsNameForPod returns a namespacedname for a pod +func nsNameForPod(pod *v1.Pod) ktypes.NamespacedName { + return ktypes.NamespacedName{ + Namespace: pod.Namespace, + Name: pod.Name, + } +} + +// clearPodBackoff clears all backoff state for a pod (resets expiry) +func (p *PriorityQueue) clearPodBackoff(pod *v1.Pod) { + p.podBackoff.ClearPodBackoff(nsNameForPod(pod)) +} + +// isPodBackingOff returns true if a pod is still waiting for its backoff timer. +// If this returns true, the pod should not be re-tried. +func (p *PriorityQueue) isPodBackingOff(pod *v1.Pod) bool { + boTime, exists := p.podBackoff.GetBackoffTime(nsNameForPod(pod)) + if !exists { + return false + } + return boTime.After(p.clock.Now()) +} + +// backoffPod checks if pod is currently undergoing backoff. If it is not it updates the backoff +// timeout otherwise it does nothing. +func (p *PriorityQueue) backoffPod(pod *v1.Pod) { + p.podBackoff.Gc() + + podID := nsNameForPod(pod) + boTime, found := p.podBackoff.GetBackoffTime(podID) + if !found || boTime.Before(p.clock.Now()) { + p.podBackoff.BackoffPod(podID) + } +} + // SchedulingCycle returns current scheduling cycle. func (p *PriorityQueue) SchedulingCycle() int64 { p.lock.RLock() @@ -338,31 +412,77 @@ func (p *PriorityQueue) SchedulingCycle() int64 { return p.schedulingCycle } -// AddUnschedulableIfNotPresent does nothing if the pod is present in any -// queue. If pod is unschedulable, it adds pod to unschedulable queue if -// p.moveRequestCycle > podSchedulingCycle or to backoff queue if p.moveRequestCycle -// <= podSchedulingCycle but pod is subject to backoff. In other cases, it adds pod to -// active queue. +// AddUnschedulableIfNotPresent inserts a pod that cannot be scheduled into +// the queue, unless it is already in the queue. Normally, PriorityQueue puts +// unschedulable pods in `unschedulableQ`. But if there has been a recent move +// request, then the pod is put in `podBackoffQ`. func (p *PriorityQueue) AddUnschedulableIfNotPresent(pod *v1.Pod, podSchedulingCycle int64) error { p.lock.Lock() defer p.lock.Unlock() if p.unschedulableQ.get(pod) != nil { return fmt.Errorf("pod is already present in unschedulableQ") } - if _, exists, _ := p.activeQ.Get(pod); exists { + + pInfo := p.newPodInfo(pod) + if _, exists, _ := p.activeQ.Get(pInfo); exists { return fmt.Errorf("pod is already present in the activeQ") } - if podSchedulingCycle > p.moveRequestCycle && isPodUnschedulable(pod) { - p.unschedulableQ.addOrUpdate(pod) - p.nominatedPods.add(pod, "") - return nil + if _, exists, _ := p.podBackoffQ.Get(pInfo); exists { + return fmt.Errorf("pod is already present in the backoffQ") } - err := p.activeQ.Add(pod) - if err == nil { - p.nominatedPods.add(pod, "") - p.cond.Broadcast() + + // Every unschedulable pod is subject to backoff timers. + p.backoffPod(pod) + + // If a move request has been received, move it to the BackoffQ, otherwise move + // it to unschedulableQ. + if p.moveRequestCycle >= podSchedulingCycle { + if err := p.podBackoffQ.Add(pInfo); err != nil { + // TODO: Delete this klog call and log returned errors at the call site. + err = fmt.Errorf("error adding pod %v to the backoff queue: %v", pod.Name, err) + klog.Error(err) + return err + } + } else { + p.unschedulableQ.addOrUpdate(pInfo) + } + + p.nominatedPods.add(pod, "") + return nil + +} + +// flushBackoffQCompleted Moves all pods from backoffQ which have completed backoff in to activeQ +func (p *PriorityQueue) flushBackoffQCompleted() { + p.lock.Lock() + defer p.lock.Unlock() + + for { + rawPodInfo := p.podBackoffQ.Peek() + if rawPodInfo == nil { + return + } + pod := rawPodInfo.(*podInfo).pod + boTime, found := p.podBackoff.GetBackoffTime(nsNameForPod(pod)) + if !found { + klog.Errorf("Unable to find backoff value for pod %v in backoffQ", nsNameForPod(pod)) + p.podBackoffQ.Pop() + p.activeQ.Add(rawPodInfo) + defer p.cond.Broadcast() + continue + } + + if boTime.After(p.clock.Now()) { + return + } + _, err := p.podBackoffQ.Pop() + if err != nil { + klog.Errorf("Unable to pop pod %v from backoffQ despite backoff completion.", nsNameForPod(pod)) + return + } + p.activeQ.Add(rawPodInfo) + defer p.cond.Broadcast() } - return err } // flushUnschedulableQLeftover moves pod which stays in unschedulableQ longer than the durationStayUnschedulableQ @@ -371,12 +491,12 @@ func (p *PriorityQueue) flushUnschedulableQLeftover() { p.lock.Lock() defer p.lock.Unlock() - var podsToMove []*v1.Pod + var podsToMove []*podInfo currentTime := p.clock.Now() - for _, pod := range p.unschedulableQ.pods { - lastScheduleTime := podTimestamp(pod) - if !lastScheduleTime.IsZero() && currentTime.Sub(lastScheduleTime.Time) > unschedulableQTimeInterval { - podsToMove = append(podsToMove, pod) + for _, pInfo := range p.unschedulableQ.podInfoMap { + lastScheduleTime := pInfo.timestamp + if currentTime.Sub(lastScheduleTime) > unschedulableQTimeInterval { + podsToMove = append(podsToMove, pInfo) } } @@ -391,7 +511,7 @@ func (p *PriorityQueue) flushUnschedulableQLeftover() { func (p *PriorityQueue) Pop() (*v1.Pod, error) { p.lock.Lock() defer p.lock.Unlock() - for len(p.activeQ.data.queue) == 0 { + for p.activeQ.Len() == 0 { // When the queue is empty, invocation of Pop() is blocked until new item is enqueued. // When Close() is called, the p.closed is set and the condition is broadcast, // which causes this loop to continue and return from the Pop(). @@ -404,9 +524,9 @@ func (p *PriorityQueue) Pop() (*v1.Pod, error) { if err != nil { return nil, err } - pod := obj.(*v1.Pod) + pInfo := obj.(*podInfo) p.schedulingCycle++ - return pod, err + return pInfo.pod, err } // isPodUpdated checks if the pod is updated in a way that it may have become @@ -422,34 +542,60 @@ func isPodUpdated(oldPod, newPod *v1.Pod) bool { return !reflect.DeepEqual(strip(oldPod), strip(newPod)) } -// Update updates a pod in the active queue if present. Otherwise, it removes -// the item from the unschedulable queue and adds the updated one to the active -// queue. +// Update updates a pod in the active or backoff queue if present. Otherwise, it removes +// the item from the unschedulable queue if pod is updated in a way that it may +// become schedulable and adds the updated one to the active queue. +// If pod is not present in any of the queues, it is added to the active queue. func (p *PriorityQueue) Update(oldPod, newPod *v1.Pod) error { p.lock.Lock() defer p.lock.Unlock() - // If the pod is already in the active queue, just update it there. - if _, exists, _ := p.activeQ.Get(newPod); exists { - p.nominatedPods.update(oldPod, newPod) - err := p.activeQ.Update(newPod) - return err - } - // If the pod is in the unschedulable queue, updating it may make it schedulable. - if usPod := p.unschedulableQ.get(newPod); usPod != nil { - p.nominatedPods.update(oldPod, newPod) - if isPodUpdated(oldPod, newPod) { - p.unschedulableQ.delete(usPod) - err := p.activeQ.Add(newPod) + + if oldPod != nil { + oldPodInfo := newPodInfoNoTimestamp(oldPod) + // If the pod is already in the active queue, just update it there. + if oldPodInfo, exists, _ := p.activeQ.Get(oldPodInfo); exists { + p.nominatedPods.update(oldPod, newPod) + newPodInfo := newPodInfoNoTimestamp(newPod) + newPodInfo.timestamp = oldPodInfo.(*podInfo).timestamp + err := p.activeQ.Update(newPodInfo) + return err + } + + // If the pod is in the backoff queue, update it there. + if oldPodInfo, exists, _ := p.podBackoffQ.Get(oldPodInfo); exists { + p.nominatedPods.update(oldPod, newPod) + p.podBackoffQ.Delete(newPodInfoNoTimestamp(oldPod)) + newPodInfo := newPodInfoNoTimestamp(newPod) + newPodInfo.timestamp = oldPodInfo.(*podInfo).timestamp + err := p.activeQ.Add(newPodInfo) if err == nil { p.cond.Broadcast() } return err } - p.unschedulableQ.addOrUpdate(newPod) + } + + // If the pod is in the unschedulable queue, updating it may make it schedulable. + if usPodInfo := p.unschedulableQ.get(newPod); usPodInfo != nil { + p.nominatedPods.update(oldPod, newPod) + newPodInfo := newPodInfoNoTimestamp(newPod) + newPodInfo.timestamp = usPodInfo.timestamp + if isPodUpdated(oldPod, newPod) { + // If the pod is updated reset backoff + p.clearPodBackoff(newPod) + p.unschedulableQ.delete(usPodInfo.pod) + err := p.activeQ.Add(newPodInfo) + if err == nil { + p.cond.Broadcast() + } + return err + } + // Pod is already in unschedulable queue and hasnt updated, no need to backoff again + p.unschedulableQ.addOrUpdate(newPodInfo) return nil } - // If pod is not in any of the two queue, we put it in the active queue. - err := p.activeQ.Add(newPod) + // If pod is not in any of the queues, we put it in the active queue. + err := p.activeQ.Add(p.newPodInfo(newPod)) if err == nil { p.nominatedPods.add(newPod, "") p.cond.Broadcast() @@ -463,8 +609,10 @@ func (p *PriorityQueue) Delete(pod *v1.Pod) error { p.lock.Lock() defer p.lock.Unlock() p.nominatedPods.delete(pod) - err := p.activeQ.Delete(pod) + err := p.activeQ.Delete(newPodInfoNoTimestamp(pod)) if err != nil { // The item was probably not found in the activeQ. + p.clearPodBackoff(pod) + p.podBackoffQ.Delete(newPodInfoNoTimestamp(pod)) p.unschedulableQ.delete(pod) } return nil @@ -490,16 +638,19 @@ func (p *PriorityQueue) AssignedPodUpdated(pod *v1.Pod) { // function adds all pods and then signals the condition variable to ensure that // if Pop() is waiting for an item, it receives it after all the pods are in the // queue and the head is the highest priority pod. -// TODO(bsalamat): We should add a back-off mechanism here so that a high priority -// pod which is unschedulable does not go to the head of the queue frequently. For -// example in a cluster where a lot of pods being deleted, such a high priority -// pod can deprive other pods from getting scheduled. func (p *PriorityQueue) MoveAllToActiveQueue() { p.lock.Lock() defer p.lock.Unlock() - for _, pod := range p.unschedulableQ.pods { - if err := p.activeQ.Add(pod); err != nil { - klog.Errorf("Error adding pod %v/%v to the scheduling queue: %v", pod.Namespace, pod.Name, err) + for _, pInfo := range p.unschedulableQ.podInfoMap { + pod := pInfo.pod + if p.isPodBackingOff(pod) { + if err := p.podBackoffQ.Add(pInfo); err != nil { + klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err) + } + } else { + if err := p.activeQ.Add(pInfo); err != nil { + klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err) + } } } p.unschedulableQ.clear() @@ -508,13 +659,19 @@ func (p *PriorityQueue) MoveAllToActiveQueue() { } // NOTE: this function assumes lock has been acquired in caller -func (p *PriorityQueue) movePodsToActiveQueue(pods []*v1.Pod) { - for _, pod := range pods { - if err := p.activeQ.Add(pod); err == nil { - p.unschedulableQ.delete(pod) +func (p *PriorityQueue) movePodsToActiveQueue(podInfoList []*podInfo) { + for _, pInfo := range podInfoList { + pod := pInfo.pod + if p.isPodBackingOff(pod) { + if err := p.podBackoffQ.Add(pInfo); err != nil { + klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err) + } } else { - klog.Errorf("Error adding pod %v/%v to the scheduling queue: %v", pod.Namespace, pod.Name, err) + if err := p.activeQ.Add(pInfo); err != nil { + klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err) + } } + p.unschedulableQ.delete(pod) } p.moveRequestCycle = p.schedulingCycle p.cond.Broadcast() @@ -523,9 +680,10 @@ func (p *PriorityQueue) movePodsToActiveQueue(pods []*v1.Pod) { // getUnschedulablePodsWithMatchingAffinityTerm returns unschedulable pods which have // any affinity term that matches "pod". // NOTE: this function assumes lock has been acquired in caller. -func (p *PriorityQueue) getUnschedulablePodsWithMatchingAffinityTerm(pod *v1.Pod) []*v1.Pod { - var podsToMove []*v1.Pod - for _, up := range p.unschedulableQ.pods { +func (p *PriorityQueue) getUnschedulablePodsWithMatchingAffinityTerm(pod *v1.Pod) []*podInfo { + var podsToMove []*podInfo + for _, pInfo := range p.unschedulableQ.podInfoMap { + up := pInfo.pod affinity := up.Spec.Affinity if affinity != nil && affinity.PodAffinity != nil { terms := predicates.GetPodAffinityTerms(affinity.PodAffinity) @@ -536,7 +694,7 @@ func (p *PriorityQueue) getUnschedulablePodsWithMatchingAffinityTerm(pod *v1.Pod klog.Errorf("Error getting label selectors for pod: %v.", up.Name) } if priorityutil.PodMatchesTermsNamespaceAndSelector(pod, namespaces, selector) { - podsToMove = append(podsToMove, up) + podsToMove = append(podsToMove, pInfo) break } } @@ -554,17 +712,20 @@ func (p *PriorityQueue) NominatedPodsForNode(nodeName string) []*v1.Pod { return p.nominatedPods.podsForNode(nodeName) } -// WaitingPods returns all the waiting pods in the queue. -func (p *PriorityQueue) WaitingPods() []*v1.Pod { +// PendingPods returns all the pending pods in the queue. This function is +// used for debugging purposes in the scheduler cache dumper and comparer. +func (p *PriorityQueue) PendingPods() []*v1.Pod { p.lock.Lock() defer p.lock.Unlock() - result := []*v1.Pod{} - for _, pod := range p.activeQ.List() { - result = append(result, pod.(*v1.Pod)) + for _, pInfo := range p.activeQ.List() { + result = append(result, pInfo.(*podInfo).pod) } - for _, pod := range p.unschedulableQ.pods { - result = append(result, pod) + for _, pInfo := range p.podBackoffQ.List() { + result = append(result, pInfo.(*podInfo).pod) + } + for _, pInfo := range p.unschedulableQ.podInfoMap { + result = append(result, pInfo.pod) } return result } @@ -594,248 +755,73 @@ func (p *PriorityQueue) UpdateNominatedPodForNode(pod *v1.Pod, nodeName string) p.lock.Unlock() } +func (p *PriorityQueue) podsCompareBackoffCompleted(podInfo1, podInfo2 interface{}) bool { + pInfo1 := podInfo1.(*podInfo) + pInfo2 := podInfo2.(*podInfo) + bo1, _ := p.podBackoff.GetBackoffTime(nsNameForPod(pInfo1.pod)) + bo2, _ := p.podBackoff.GetBackoffTime(nsNameForPod(pInfo2.pod)) + return bo1.Before(bo2) +} + // NumUnschedulablePods returns the number of unschedulable pods exist in the SchedulingQueue. func (p *PriorityQueue) NumUnschedulablePods() int { p.lock.RLock() defer p.lock.RUnlock() - return len(p.unschedulableQ.pods) + return len(p.unschedulableQ.podInfoMap) +} + +// newPodInfo builds a podInfo object. +func (p *PriorityQueue) newPodInfo(pod *v1.Pod) *podInfo { + if p.clock == nil { + return &podInfo{ + pod: pod, + } + } + + return &podInfo{ + pod: pod, + timestamp: p.clock.Now(), + } } // UnschedulablePodsMap holds pods that cannot be scheduled. This data structure // is used to implement unschedulableQ. type UnschedulablePodsMap struct { - // pods is a map key by a pod's full-name and the value is a pointer to the pod. - pods map[string]*v1.Pod - keyFunc func(*v1.Pod) string + // podInfoMap is a map key by a pod's full-name and the value is a pointer to the podInfo. + podInfoMap map[string]*podInfo + keyFunc func(*v1.Pod) string } -// Add adds a pod to the unschedulable pods. -func (u *UnschedulablePodsMap) addOrUpdate(pod *v1.Pod) { - u.pods[u.keyFunc(pod)] = pod +// Add adds a pod to the unschedulable podInfoMap. +func (u *UnschedulablePodsMap) addOrUpdate(pInfo *podInfo) { + u.podInfoMap[u.keyFunc(pInfo.pod)] = pInfo } -// Delete deletes a pod from the unschedulable pods. +// Delete deletes a pod from the unschedulable podInfoMap. func (u *UnschedulablePodsMap) delete(pod *v1.Pod) { - delete(u.pods, u.keyFunc(pod)) + delete(u.podInfoMap, u.keyFunc(pod)) } -// Get returns the pod if a pod with the same key as the key of the given "pod" +// Get returns the podInfo if a pod with the same key as the key of the given "pod" // is found in the map. It returns nil otherwise. -func (u *UnschedulablePodsMap) get(pod *v1.Pod) *v1.Pod { +func (u *UnschedulablePodsMap) get(pod *v1.Pod) *podInfo { podKey := u.keyFunc(pod) - if p, exists := u.pods[podKey]; exists { - return p + if pInfo, exists := u.podInfoMap[podKey]; exists { + return pInfo } return nil } -// Clear removes all the entries from the unschedulable maps. +// Clear removes all the entries from the unschedulable podInfoMap. func (u *UnschedulablePodsMap) clear() { - u.pods = make(map[string]*v1.Pod) + u.podInfoMap = make(map[string]*podInfo) } // newUnschedulablePodsMap initializes a new object of UnschedulablePodsMap. -func newUnschedulablePodsMap() *UnschedulablePodsMap { +func newUnschedulablePodsMap(clock util.Clock) *UnschedulablePodsMap { return &UnschedulablePodsMap{ - pods: make(map[string]*v1.Pod), - keyFunc: util.GetPodFullName, - } -} - -// Below is the implementation of the a heap. The logic is pretty much the same -// as cache.heap, however, this heap does not perform synchronization. It leaves -// synchronization to the SchedulingQueue. - -// LessFunc is a function type to compare two objects. -type LessFunc func(interface{}, interface{}) bool - -// KeyFunc is a function type to get the key from an object. -type KeyFunc func(obj interface{}) (string, error) - -type heapItem struct { - obj interface{} // The object which is stored in the heap. - index int // The index of the object's key in the Heap.queue. -} - -type itemKeyValue struct { - key string - obj interface{} -} - -// heapData is an internal struct that implements the standard heap interface -// and keeps the data stored in the heap. -type heapData struct { - // items is a map from key of the objects to the objects and their index. - // We depend on the property that items in the map are in the queue and vice versa. - items map[string]*heapItem - // queue implements a heap data structure and keeps the order of elements - // according to the heap invariant. The queue keeps the keys of objects stored - // in "items". - queue []string - - // keyFunc is used to make the key used for queued item insertion and retrieval, and - // should be deterministic. - keyFunc KeyFunc - // lessFunc is used to compare two objects in the heap. - lessFunc LessFunc -} - -var ( - _ = heap.Interface(&heapData{}) // heapData is a standard heap -) - -// Less compares two objects and returns true if the first one should go -// in front of the second one in the heap. -func (h *heapData) Less(i, j int) bool { - if i > len(h.queue) || j > len(h.queue) { - return false - } - itemi, ok := h.items[h.queue[i]] - if !ok { - return false - } - itemj, ok := h.items[h.queue[j]] - if !ok { - return false - } - return h.lessFunc(itemi.obj, itemj.obj) -} - -// Len returns the number of items in the Heap. -func (h *heapData) Len() int { return len(h.queue) } - -// Swap implements swapping of two elements in the heap. This is a part of standard -// heap interface and should never be called directly. -func (h *heapData) Swap(i, j int) { - h.queue[i], h.queue[j] = h.queue[j], h.queue[i] - item := h.items[h.queue[i]] - item.index = i - item = h.items[h.queue[j]] - item.index = j -} - -// Push is supposed to be called by heap.Push only. -func (h *heapData) Push(kv interface{}) { - keyValue := kv.(*itemKeyValue) - n := len(h.queue) - h.items[keyValue.key] = &heapItem{keyValue.obj, n} - h.queue = append(h.queue, keyValue.key) -} - -// Pop is supposed to be called by heap.Pop only. -func (h *heapData) Pop() interface{} { - key := h.queue[len(h.queue)-1] - h.queue = h.queue[0 : len(h.queue)-1] - item, ok := h.items[key] - if !ok { - // This is an error - return nil - } - delete(h.items, key) - return item.obj -} - -// Heap is a producer/consumer queue that implements a heap data structure. -// It can be used to implement priority queues and similar data structures. -type Heap struct { - // data stores objects and has a queue that keeps their ordering according - // to the heap invariant. - data *heapData -} - -// Add inserts an item, and puts it in the queue. The item is updated if it -// already exists. -func (h *Heap) Add(obj interface{}) error { - key, err := h.data.keyFunc(obj) - if err != nil { - return cache.KeyError{Obj: obj, Err: err} - } - if _, exists := h.data.items[key]; exists { - h.data.items[key].obj = obj - heap.Fix(h.data, h.data.items[key].index) - } else { - heap.Push(h.data, &itemKeyValue{key, obj}) - } - return nil -} - -// AddIfNotPresent inserts an item, and puts it in the queue. If an item with -// the key is present in the map, no changes is made to the item. -func (h *Heap) AddIfNotPresent(obj interface{}) error { - key, err := h.data.keyFunc(obj) - if err != nil { - return cache.KeyError{Obj: obj, Err: err} - } - if _, exists := h.data.items[key]; !exists { - heap.Push(h.data, &itemKeyValue{key, obj}) - } - return nil -} - -// Update is the same as Add in this implementation. When the item does not -// exist, it is added. -func (h *Heap) Update(obj interface{}) error { - return h.Add(obj) -} - -// Delete removes an item. -func (h *Heap) Delete(obj interface{}) error { - key, err := h.data.keyFunc(obj) - if err != nil { - return cache.KeyError{Obj: obj, Err: err} - } - if item, ok := h.data.items[key]; ok { - heap.Remove(h.data, item.index) - return nil - } - return fmt.Errorf("object not found") -} - -// Pop returns the head of the heap. -func (h *Heap) Pop() (interface{}, error) { - obj := heap.Pop(h.data) - if obj != nil { - return obj, nil - } - return nil, fmt.Errorf("object was removed from heap data") -} - -// Get returns the requested item, or sets exists=false. -func (h *Heap) Get(obj interface{}) (interface{}, bool, error) { - key, err := h.data.keyFunc(obj) - if err != nil { - return nil, false, cache.KeyError{Obj: obj, Err: err} - } - return h.GetByKey(key) -} - -// GetByKey returns the requested item, or sets exists=false. -func (h *Heap) GetByKey(key string) (interface{}, bool, error) { - item, exists := h.data.items[key] - if !exists { - return nil, false, nil - } - return item.obj, true, nil -} - -// List returns a list of all the items. -func (h *Heap) List() []interface{} { - list := make([]interface{}, 0, len(h.data.items)) - for _, item := range h.data.items { - list = append(list, item.obj) - } - return list -} - -// newHeap returns a Heap which can be used to queue up items to process. -func newHeap(keyFn KeyFunc, lessFn LessFunc) *Heap { - return &Heap{ - data: &heapData{ - items: map[string]*heapItem{}, - queue: []string{}, - keyFunc: keyFn, - lessFunc: lessFn, - }, + podInfoMap: make(map[string]*podInfo), + keyFunc: util.GetPodFullName, } } @@ -912,3 +898,21 @@ func newNominatedPodMap() *nominatedPodMap { nominatedPodToNode: make(map[ktypes.UID]string), } } + +// MakeNextPodFunc returns a function to retrieve the next pod from a given +// scheduling queue +func MakeNextPodFunc(queue SchedulingQueue) func() *v1.Pod { + return func() *v1.Pod { + pod, err := queue.Pop() + if err == nil { + klog.V(4).Infof("About to try and schedule pod %v/%v", pod.Namespace, pod.Name) + return pod + } + klog.Errorf("Error while retrieving next pod from scheduling queue: %v", err) + return nil + } +} + +func podInfoKeyFunc(obj interface{}) (string, error) { + return cache.MetaNamespaceKeyFunc(obj.(*podInfo).pod) +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go index 0ebbd4f8ef6..43810a19cf9 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go @@ -28,7 +28,9 @@ const ( // SchedulerSubsystem - subsystem name used by scheduler SchedulerSubsystem = "scheduler" // SchedulingLatencyName - scheduler latency metric name - SchedulingLatencyName = "scheduling_latency_seconds" + SchedulingLatencyName = "scheduling_duration_seconds" + // DeprecatedSchedulingLatencyName - scheduler latency metric name which is deprecated + DeprecatedSchedulingLatencyName = "scheduling_latency_seconds" // OperationLabel - operation label name OperationLabel = "operation" @@ -70,51 +72,110 @@ var ( }, []string{OperationLabel}, ) + DeprecatedSchedulingLatency = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Subsystem: SchedulerSubsystem, + Name: DeprecatedSchedulingLatencyName, + Help: "(Deprecated) Scheduling latency in seconds split by sub-parts of the scheduling operation", + // Make the sliding window of 5h. + // TODO: The value for this should be based on some SLI definition (long term). + MaxAge: 5 * time.Hour, + }, + []string{OperationLabel}, + ) E2eSchedulingLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "e2e_scheduling_duration_seconds", + Help: "E2e scheduling latency in seconds (scheduling algorithm + binding)", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedE2eSchedulingLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "e2e_scheduling_latency_microseconds", - Help: "E2e scheduling latency (scheduling algorithm + binding)", + Help: "(Deprecated) E2e scheduling latency in microseconds (scheduling algorithm + binding)", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) SchedulingAlgorithmLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "scheduling_algorithm_duration_seconds", + Help: "Scheduling algorithm latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedSchedulingAlgorithmLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "scheduling_algorithm_latency_microseconds", - Help: "Scheduling algorithm latency", + Help: "(Deprecated) Scheduling algorithm latency in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) SchedulingAlgorithmPredicateEvaluationDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "scheduling_algorithm_predicate_evaluation_seconds", + Help: "Scheduling algorithm predicate evaluation duration in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedSchedulingAlgorithmPredicateEvaluationDuration = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "scheduling_algorithm_predicate_evaluation", - Help: "Scheduling algorithm predicate evaluation duration", + Help: "(Deprecated) Scheduling algorithm predicate evaluation duration in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) SchedulingAlgorithmPriorityEvaluationDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "scheduling_algorithm_priority_evaluation_seconds", + Help: "Scheduling algorithm priority evaluation duration in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedSchedulingAlgorithmPriorityEvaluationDuration = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "scheduling_algorithm_priority_evaluation", - Help: "Scheduling algorithm priority evaluation duration", + Help: "(Deprecated) Scheduling algorithm priority evaluation duration in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) SchedulingAlgorithmPremptionEvaluationDuration = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "scheduling_algorithm_preemption_evaluation_seconds", + Help: "Scheduling algorithm preemption evaluation duration in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedSchedulingAlgorithmPremptionEvaluationDuration = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "scheduling_algorithm_preemption_evaluation", - Help: "Scheduling algorithm preemption evaluation duration", + Help: "(Deprecated) Scheduling algorithm preemption evaluation duration in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) BindingLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "binding_duration_seconds", + Help: "Binding latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + }, + ) + DeprecatedBindingLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "binding_latency_microseconds", - Help: "Binding latency", + Help: "(Deprecated) Binding latency in microseconds", Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) @@ -131,35 +192,24 @@ var ( Help: "Total preemption attempts in the cluster till now", }) - equivalenceCacheLookups = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Subsystem: SchedulerSubsystem, - Name: "equiv_cache_lookups_total", - Help: "Total number of equivalence cache lookups, by whether or not a cache entry was found", - }, []string{"result"}) - EquivalenceCacheHits = equivalenceCacheLookups.With(prometheus.Labels{"result": "hit"}) - EquivalenceCacheMisses = equivalenceCacheLookups.With(prometheus.Labels{"result": "miss"}) - - EquivalenceCacheWrites = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Subsystem: SchedulerSubsystem, - Name: "equiv_cache_writes", - Help: "Total number of equivalence cache writes, by result", - }, []string{"result"}) - metricsList = []prometheus.Collector{ scheduleAttempts, SchedulingLatency, + DeprecatedSchedulingLatency, E2eSchedulingLatency, + DeprecatedE2eSchedulingLatency, SchedulingAlgorithmLatency, + DeprecatedSchedulingAlgorithmLatency, BindingLatency, + DeprecatedBindingLatency, SchedulingAlgorithmPredicateEvaluationDuration, + DeprecatedSchedulingAlgorithmPredicateEvaluationDuration, SchedulingAlgorithmPriorityEvaluationDuration, + DeprecatedSchedulingAlgorithmPriorityEvaluationDuration, SchedulingAlgorithmPremptionEvaluationDuration, + DeprecatedSchedulingAlgorithmPremptionEvaluationDuration, PreemptionVictims, PreemptionAttempts, - equivalenceCacheLookups, - EquivalenceCacheWrites, } ) @@ -180,6 +230,7 @@ func Register() { // Reset resets metrics func Reset() { SchedulingLatency.Reset() + DeprecatedSchedulingLatency.Reset() } // SinceInMicroseconds gets the time since the specified start in microseconds. diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/BUILD similarity index 96% rename from vendor/k8s.io/kubernetes/pkg/scheduler/cache/BUILD rename to vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/BUILD index ba0ac4da9a7..c9631738f6f 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/BUILD @@ -7,7 +7,7 @@ go_library( "node_info.go", "util.go", ], - importpath = "k8s.io/kubernetes/pkg/scheduler/cache", + importpath = "k8s.io/kubernetes/pkg/scheduler/nodeinfo", visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/host_ports.go b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/host_ports.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/scheduler/cache/host_ports.go rename to vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/host_ports.go index e96c6be374a..8f1090ff706 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/host_ports.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/host_ports.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package cache +package nodeinfo import ( "k8s.io/api/core/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/node_info.go b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/node_info.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/scheduler/cache/node_info.go rename to vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/node_info.go index e75eda3bcfc..df188e857a7 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/node_info.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/node_info.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package cache +package nodeinfo import ( "errors" diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/util.go b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/util.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/scheduler/cache/util.go rename to vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/util.go index 5a252b6402e..bb1fd0ce612 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/cache/util.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/nodeinfo/util.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package cache +package nodeinfo import ( "k8s.io/api/core/v1" diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/BUILD new file mode 100644 index 00000000000..8de218f021c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/BUILD @@ -0,0 +1,30 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["registrar.go"], + importpath = "k8s.io/kubernetes/pkg/scheduler/plugins", + visibility = ["//visibility:public"], + deps = [ + "//pkg/scheduler/internal/cache:go_default_library", + "//pkg/scheduler/plugins/v1alpha1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/scheduler/plugins/examples:all-srcs", + "//pkg/scheduler/plugins/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/registrar.go b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/registrar.go new file mode 100644 index 00000000000..62de362d962 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/registrar.go @@ -0,0 +1,77 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import ( + "k8s.io/kubernetes/pkg/scheduler/internal/cache" + plugins "k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1" +) + +// DefaultPluginSet is the default plugin registrar used by the default scheduler. +type DefaultPluginSet struct { + data *plugins.PluginData + reservePlugins []plugins.ReservePlugin + prebindPlugins []plugins.PrebindPlugin +} + +var _ = plugins.PluginSet(&DefaultPluginSet{}) + +// ReservePlugins returns a slice of default reserve plugins. +func (r *DefaultPluginSet) ReservePlugins() []plugins.ReservePlugin { + return r.reservePlugins +} + +// PrebindPlugins returns a slice of default prebind plugins. +func (r *DefaultPluginSet) PrebindPlugins() []plugins.PrebindPlugin { + return r.prebindPlugins +} + +// Data returns a pointer to PluginData. +func (r *DefaultPluginSet) Data() *plugins.PluginData { + return r.data +} + +// NewDefaultPluginSet initializes default plugin set and returns its pointer. +func NewDefaultPluginSet(ctx *plugins.PluginContext, schedulerCache *cache.Cache) *DefaultPluginSet { + defaultRegistrar := DefaultPluginSet{ + data: &plugins.PluginData{ + Ctx: ctx, + SchedulerCache: schedulerCache, + }, + } + defaultRegistrar.registerReservePlugins() + defaultRegistrar.registerPrebindPlugins() + return &defaultRegistrar +} + +func (r *DefaultPluginSet) registerReservePlugins() { + r.reservePlugins = []plugins.ReservePlugin{ + // Init functions of all reserve plugins go here. They are called in the + // same order that they are registered. + // Example: + // examples.NewStatefulMultipointExample(map[int]string{1: "test1", 2: "test2"}), + } +} + +func (r *DefaultPluginSet) registerPrebindPlugins() { + r.prebindPlugins = []plugins.PrebindPlugin{ + // Init functions of all prebind plugins go here. They are called in the + // same order that they are registered. + // Example: + // examples.NewStatelessPrebindExample(), + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/BUILD new file mode 100644 index 00000000000..619bd4685a9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/BUILD @@ -0,0 +1,29 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "context.go", + "interface.go", + ], + importpath = "k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/scheduler/internal/cache:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/context.go b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/context.go new file mode 100644 index 00000000000..0631b5f0d8b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/context.go @@ -0,0 +1,94 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "errors" + "sync" +) + +const ( + // NotFound is the not found error message. + NotFound = "not found" +) + +// ContextData is a generic type for arbitrary data stored in PluginContext. +type ContextData interface{} + +// ContextKey is the type of keys stored in PluginContext. +type ContextKey string + +// PluginContext provides a mechanism for plugins to store and retrieve arbitrary data. +// ContextData stored by one plugin can be read, altered, or deleted by another plugin. +// PluginContext does not provide any data protection, as all plugins are assumed to be +// trusted. +type PluginContext struct { + Mx sync.RWMutex + storage map[ContextKey]ContextData +} + +// NewPluginContext initializes a new PluginContext and returns its pointer. +func NewPluginContext() *PluginContext { + return &PluginContext{ + storage: make(map[ContextKey]ContextData), + } +} + +// Read retrieves data with the given "key" from PluginContext. If the key is not +// present an error is returned. +func (c *PluginContext) Read(key ContextKey) (ContextData, error) { + if v, ok := c.storage[key]; ok { + return v, nil + } + return nil, errors.New(NotFound) +} + +// SyncRead is the thread safe version of Read(...). +func (c *PluginContext) SyncRead(key ContextKey) (ContextData, error) { + c.Mx.RLock() + defer c.Mx.RUnlock() + return c.Read(key) +} + +// Write stores the given "val" in PluginContext with the given "key". +func (c *PluginContext) Write(key ContextKey, val ContextData) { + c.storage[key] = val +} + +// SyncWrite is the thread safe version of Write(...). +func (c *PluginContext) SyncWrite(key ContextKey, val ContextData) { + c.Mx.Lock() + defer c.Mx.Unlock() + c.Write(key, val) +} + +// Delete deletes data with the given key from PluginContext. +func (c *PluginContext) Delete(key ContextKey) { + delete(c.storage, key) +} + +// SyncDelete is the thread safe version of Write(...). +func (c *PluginContext) SyncDelete(key ContextKey) { + c.Mx.Lock() + defer c.Mx.Unlock() + c.Delete(key) +} + +// Reset removes all the information in the PluginContext. +func (c *PluginContext) Reset() { + c.storage = make(map[ContextKey]ContextData) +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/interface.go b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/interface.go new file mode 100644 index 00000000000..0d0c90b43e6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1/interface.go @@ -0,0 +1,63 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file defines the scheduling framework plugin interfaces. + +package v1alpha1 + +import ( + "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/scheduler/internal/cache" +) + +// PluginData carries information that plugins may need. +type PluginData struct { + Ctx *PluginContext + SchedulerCache *cache.Cache + // We may want to add the scheduling queue here too. +} + +// Plugin is the parent type for all the scheduling framework plugins. +type Plugin interface { + Name() string +} + +// ReservePlugin is an interface for Reserve plugins. These plugins are called +// at the reservation point, AKA "assume". These are meant to updated the state +// of the plugin. They do not return any value (other than error). +type ReservePlugin interface { + Plugin + // Reserve is called by the scheduling framework when the scheduler cache is + // updated. + Reserve(ps PluginSet, p *v1.Pod, nodeName string) error +} + +// PrebindPlugin is an interface that must be implemented by "prebind" plugins. +// These plugins are called before a pod being scheduled +type PrebindPlugin interface { + Plugin + // Prebind is called before binding a pod. All prebind plugins must return + // or the pod will not be sent for binding. + Prebind(ps PluginSet, p *v1.Pod, nodeName string) (bool, error) +} + +// PluginSet registers plugins used by the scheduling framework. +// The plugins registered are called at specified points in an scheduling cycle. +type PluginSet interface { + Data() *PluginData + ReservePlugins() []ReservePlugin + PrebindPlugins() []PrebindPlugin +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go b/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go index c214cc93a10..feb1d866f92 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go @@ -17,23 +17,24 @@ limitations under the License. package scheduler import ( + "errors" "fmt" "io/ioutil" "os" "time" - "k8s.io/api/core/v1" + "k8s.io/klog" + + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" appsinformers "k8s.io/client-go/informers/apps/v1" coreinformers "k8s.io/client-go/informers/core/v1" policyinformers "k8s.io/client-go/informers/policy/v1beta1" storageinformers "k8s.io/client-go/informers/storage/v1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" - "k8s.io/kubernetes/pkg/features" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" @@ -42,13 +43,13 @@ import ( schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/scheduler/util" - - "k8s.io/klog" ) const ( // BindTimeoutSeconds defines the default bind timeout BindTimeoutSeconds = 100 + // SchedulerError is the reason recorded for events when an error occurs during scheduling a pod. + SchedulerError = "SchedulerError" ) // Scheduler watches for new unscheduled pods. It attempts to find @@ -137,7 +138,6 @@ func New(client clientset.Interface, for _, opt := range opts { opt(&options) } - // Set up the configurator which can create schedulers from configs. configurator := factory.NewConfigFactory(&factory.ConfigFactoryArgs{ SchedulerName: options.schedulerName, @@ -192,8 +192,11 @@ func New(client clientset.Interface, config.Recorder = recorder config.DisablePreemption = options.disablePreemption config.StopEverything = stopCh + // Create the scheduler. sched := NewFromConfig(config) + + AddAllEventHandlers(sched, options.schedulerName, nodeInformer, podInformer, pvInformer, pvcInformer, replicationControllerInformer, replicaSetInformer, statefulSetInformer, serviceInformer, pdbInformer, storageClassInformer) return sched, nil } @@ -233,25 +236,6 @@ func initPolicyFromConfigMap(client clientset.Interface, policyRef *kubeschedule return nil } -// NewFromConfigurator returns a new scheduler that is created entirely by the Configurator. Assumes Create() is implemented. -// Supports intermediate Config mutation for now if you provide modifier functions which will run after Config is created. -func NewFromConfigurator(c factory.Configurator, modifiers ...func(c *factory.Config)) (*Scheduler, error) { - cfg, err := c.Create() - if err != nil { - return nil, err - } - // Mutate it if any functions were provided, changes might be required for certain types of tests (i.e. change the recorder). - for _, modifier := range modifiers { - modifier(cfg) - } - // From this point on the config is immutable to the outside. - s := &Scheduler{ - config: cfg, - } - metrics.Register() - return s, nil -} - // NewFromConfig returns a new scheduler using the provided Config. func NewFromConfig(config *factory.Config) *Scheduler { metrics.Register() @@ -274,34 +258,36 @@ func (sched *Scheduler) Config() *factory.Config { return sched.config } -// schedule implements the scheduling algorithm and returns the suggested host. -func (sched *Scheduler) schedule(pod *v1.Pod) (string, error) { - host, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister) +// recordFailedSchedulingEvent records an event for the pod that indicates the +// pod has failed to schedule. +// NOTE: This function modifies "pod". "pod" should be copied before being passed. +func (sched *Scheduler) recordSchedulingFailure(pod *v1.Pod, err error, reason string, message string) { + sched.config.Error(pod, err) + sched.config.Recorder.Event(pod, v1.EventTypeWarning, "FailedScheduling", message) + sched.config.PodConditionUpdater.Update(pod, &v1.PodCondition{ + Type: v1.PodScheduled, + Status: v1.ConditionFalse, + Reason: reason, + Message: err.Error(), + }) +} + +// schedule implements the scheduling algorithm and returns the suggested result(host, +// evaluated nodes number,feasible nodes number). +func (sched *Scheduler) schedule(pod *v1.Pod) (core.ScheduleResult, error) { + result, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister) if err != nil { pod = pod.DeepCopy() - sched.config.Error(pod, err) - sched.config.Recorder.Eventf(pod, v1.EventTypeWarning, "FailedScheduling", "%v", err) - sched.config.PodConditionUpdater.Update(pod, &v1.PodCondition{ - Type: v1.PodScheduled, - Status: v1.ConditionFalse, - LastProbeTime: metav1.Now(), - Reason: v1.PodReasonUnschedulable, - Message: err.Error(), - }) - return "", err + sched.recordSchedulingFailure(pod, err, v1.PodReasonUnschedulable, err.Error()) + return core.ScheduleResult{}, err } - return host, err + return result, err } // preempt tries to create room for a pod that has failed to schedule, by preempting lower priority pods if possible. // If it succeeds, it adds the name of the node where preemption has happened to the pod annotations. // It returns the node name and an error if any. func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, error) { - if !util.PodPriorityEnabled() || sched.config.DisablePreemption { - klog.V(3).Infof("Pod priority feature is not enabled or preemption is disabled by scheduler configuration." + - " No preemption is performed.") - return "", nil - } preemptor, err := sched.config.PodPreemptor.GetUpdatedPod(preemptor) if err != nil { klog.Errorf("Error getting the updated preemptor pod object: %v", err) @@ -309,7 +295,6 @@ func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, e } node, victims, nominatedPodsToClear, err := sched.config.Algorithm.Preempt(preemptor, sched.config.NodeLister, scheduleErr) - metrics.PreemptionVictims.Set(float64(len(victims))) if err != nil { klog.Errorf("Error preempting victims to make room for %v/%v.", preemptor.Namespace, preemptor.Name) return "", err @@ -337,6 +322,7 @@ func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, e } sched.config.Recorder.Eventf(victim, v1.EventTypeNormal, "Preempted", "by %v/%v on node %v", preemptor.Namespace, preemptor.Name, nodeName) } + metrics.PreemptionVictims.Set(float64(len(victims))) } // Clearing nominated pods should happen outside of "if node != nil". Node could // be nil when a pod with nominated node name is eligible to preempt again, @@ -356,19 +342,10 @@ func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, e // // This function modifies assumed if volume binding is required. func (sched *Scheduler) assumeVolumes(assumed *v1.Pod, host string) (allBound bool, err error) { - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - allBound, err = sched.config.VolumeBinder.Binder.AssumePodVolumes(assumed, host) - if err != nil { - sched.config.Error(assumed, err) - sched.config.Recorder.Eventf(assumed, v1.EventTypeWarning, "FailedScheduling", "AssumePodVolumes failed: %v", err) - sched.config.PodConditionUpdater.Update(assumed, &v1.PodCondition{ - Type: v1.PodScheduled, - Status: v1.ConditionFalse, - LastProbeTime: metav1.Now(), - Reason: "SchedulerError", - Message: err.Error(), - }) - } + allBound, err = sched.config.VolumeBinder.Binder.AssumePodVolumes(assumed, host) + if err != nil { + sched.recordSchedulingFailure(assumed, err, SchedulerError, + fmt.Sprintf("AssumePodVolumes failed: %v", err)) } return } @@ -379,9 +356,6 @@ func (sched *Scheduler) assumeVolumes(assumed *v1.Pod, host string) (allBound bo // If binding errors, times out or gets undone, then an error will be returned to // retry scheduling. func (sched *Scheduler) bindVolumes(assumed *v1.Pod) error { - var reason string - var eventType string - klog.V(5).Infof("Trying to bind volumes for pod \"%v/%v\"", assumed.Namespace, assumed.Name) err := sched.config.VolumeBinder.Binder.BindPodVolumes(assumed) if err != nil { @@ -392,20 +366,7 @@ func (sched *Scheduler) bindVolumes(assumed *v1.Pod) error { klog.Errorf("scheduler cache ForgetPod failed: %v", forgetErr) } - // Volumes may be bound by PV controller asynchronously, we must clear - // stale pod binding cache. - sched.config.VolumeBinder.DeletePodBindings(assumed) - - reason = "VolumeBindingFailed" - eventType = v1.EventTypeWarning - sched.config.Error(assumed, err) - sched.config.Recorder.Eventf(assumed, eventType, "FailedScheduling", "%v", err) - sched.config.PodConditionUpdater.Update(assumed, &v1.PodCondition{ - Type: v1.PodScheduled, - Status: v1.ConditionFalse, - LastProbeTime: metav1.Now(), - Reason: reason, - }) + sched.recordSchedulingFailure(assumed, err, "VolumeBindingFailed", err.Error()) return err } @@ -421,11 +382,7 @@ func (sched *Scheduler) assume(assumed *v1.Pod, host string) error { // If the binding fails, scheduler will release resources allocated to assumed pod // immediately. assumed.Spec.NodeName = host - // NOTE: Updates must be written to scheduler cache before invalidating - // equivalence cache, because we could snapshot equivalence cache after the - // invalidation and then snapshot the cache itself. If the cache is - // snapshotted before updates are written, we would update equivalence - // cache with stale information which is based on snapshot of old cache. + if err := sched.config.SchedulerCache.AssumePod(assumed); err != nil { klog.Errorf("scheduler cache AssumePod failed: %v", err) @@ -434,15 +391,8 @@ func (sched *Scheduler) assume(assumed *v1.Pod, host string) error { // This relies on the fact that Error will check if the pod has been bound // to a node and if so will not add it back to the unscheduled pods queue // (otherwise this would cause an infinite loop). - sched.config.Error(assumed, err) - sched.config.Recorder.Eventf(assumed, v1.EventTypeWarning, "FailedScheduling", "AssumePod failed: %v", err) - sched.config.PodConditionUpdater.Update(assumed, &v1.PodCondition{ - Type: v1.PodScheduled, - Status: v1.ConditionFalse, - LastProbeTime: metav1.Now(), - Reason: "SchedulerError", - Message: err.Error(), - }) + sched.recordSchedulingFailure(assumed, err, SchedulerError, + fmt.Sprintf("AssumePod failed: %v", err)) return err } // if "assumed" is a nominated pod, we should remove it from internal cache @@ -468,25 +418,27 @@ func (sched *Scheduler) bind(assumed *v1.Pod, b *v1.Binding) error { if err := sched.config.SchedulerCache.ForgetPod(assumed); err != nil { klog.Errorf("scheduler cache ForgetPod failed: %v", err) } - sched.config.Error(assumed, err) - sched.config.Recorder.Eventf(assumed, v1.EventTypeWarning, "FailedScheduling", "Binding rejected: %v", err) - sched.config.PodConditionUpdater.Update(assumed, &v1.PodCondition{ - Type: v1.PodScheduled, - Status: v1.ConditionFalse, - LastProbeTime: metav1.Now(), - Reason: "BindingRejected", - }) + sched.recordSchedulingFailure(assumed, err, SchedulerError, + fmt.Sprintf("Binding rejected: %v", err)) return err } - metrics.BindingLatency.Observe(metrics.SinceInMicroseconds(bindingStart)) + metrics.BindingLatency.Observe(metrics.SinceInSeconds(bindingStart)) + metrics.DeprecatedBindingLatency.Observe(metrics.SinceInMicroseconds(bindingStart)) metrics.SchedulingLatency.WithLabelValues(metrics.Binding).Observe(metrics.SinceInSeconds(bindingStart)) + metrics.DeprecatedSchedulingLatency.WithLabelValues(metrics.Binding).Observe(metrics.SinceInSeconds(bindingStart)) sched.config.Recorder.Eventf(assumed, v1.EventTypeNormal, "Scheduled", "Successfully assigned %v/%v to %v", assumed.Namespace, assumed.Name, b.Target.Name) return nil } // scheduleOne does the entire scheduling workflow for a single pod. It is serialized on the scheduling algorithm's host fitting. func (sched *Scheduler) scheduleOne() { + plugins := sched.config.PluginSet + // Remove all plugin context data at the beginning of a scheduling cycle. + if plugins.Data().Ctx != nil { + plugins.Data().Ctx.Reset() + } + pod := sched.config.NextPod() // pod could be nil when schedulerQueue is closed if pod == nil { @@ -502,18 +454,25 @@ func (sched *Scheduler) scheduleOne() { // Synchronously attempt to find a fit for the pod. start := time.Now() - suggestedHost, err := sched.schedule(pod) + scheduleResult, err := sched.schedule(pod) if err != nil { // schedule() may have failed because the pod would not fit on any host, so we try to // preempt, with the expectation that the next time the pod is tried for scheduling it // will fit due to the preemption. It is also possible that a different pod will schedule // into the resources that were preempted, but this is harmless. if fitError, ok := err.(*core.FitError); ok { - preemptionStartTime := time.Now() - sched.preempt(pod, fitError) - metrics.PreemptionAttempts.Inc() - metrics.SchedulingAlgorithmPremptionEvaluationDuration.Observe(metrics.SinceInMicroseconds(preemptionStartTime)) - metrics.SchedulingLatency.WithLabelValues(metrics.PreemptionEvaluation).Observe(metrics.SinceInSeconds(preemptionStartTime)) + if !util.PodPriorityEnabled() || sched.config.DisablePreemption { + klog.V(3).Infof("Pod priority feature is not enabled or preemption is disabled by scheduler configuration." + + " No preemption is performed.") + } else { + preemptionStartTime := time.Now() + sched.preempt(pod, fitError) + metrics.PreemptionAttempts.Inc() + metrics.SchedulingAlgorithmPremptionEvaluationDuration.Observe(metrics.SinceInSeconds(preemptionStartTime)) + metrics.DeprecatedSchedulingAlgorithmPremptionEvaluationDuration.Observe(metrics.SinceInMicroseconds(preemptionStartTime)) + metrics.SchedulingLatency.WithLabelValues(metrics.PreemptionEvaluation).Observe(metrics.SinceInSeconds(preemptionStartTime)) + metrics.DeprecatedSchedulingLatency.WithLabelValues(metrics.PreemptionEvaluation).Observe(metrics.SinceInSeconds(preemptionStartTime)) + } // Pod did not fit anywhere, so it is counted as a failure. If preemption // succeeds, the pod should get counted as a success the next time we try to // schedule it. (hopefully) @@ -524,7 +483,8 @@ func (sched *Scheduler) scheduleOne() { } return } - metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInMicroseconds(start)) + metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedSchedulingAlgorithmLatency.Observe(metrics.SinceInMicroseconds(start)) // Tell the cache to assume that a pod now is running on a given node, even though it hasn't been bound yet. // This allows us to keep scheduling without waiting on binding to occur. assumedPod := pod.DeepCopy() @@ -536,15 +496,25 @@ func (sched *Scheduler) scheduleOne() { // Otherwise, binding of volumes is started after the pod is assumed, but before pod binding. // // This function modifies 'assumedPod' if volume binding is required. - allBound, err := sched.assumeVolumes(assumedPod, suggestedHost) + allBound, err := sched.assumeVolumes(assumedPod, scheduleResult.SuggestedHost) if err != nil { klog.Errorf("error assuming volumes: %v", err) metrics.PodScheduleErrors.Inc() return } - // assume modifies `assumedPod` by setting NodeName=suggestedHost - err = sched.assume(assumedPod, suggestedHost) + // Run "reserve" plugins. + for _, pl := range plugins.ReservePlugins() { + if err := pl.Reserve(plugins, assumedPod, scheduleResult.SuggestedHost); err != nil { + klog.Errorf("error while running %v reserve plugin for pod %v: %v", pl.Name(), assumedPod.Name, err) + sched.recordSchedulingFailure(assumedPod, err, SchedulerError, + fmt.Sprintf("reserve plugin %v failed", pl.Name())) + metrics.PodScheduleErrors.Inc() + return + } + } + // assume modifies `assumedPod` by setting NodeName=scheduleResult.SuggestedHost + err = sched.assume(assumedPod, scheduleResult.SuggestedHost) if err != nil { klog.Errorf("error assuming pod: %v", err) metrics.PodScheduleErrors.Inc() @@ -562,18 +532,44 @@ func (sched *Scheduler) scheduleOne() { } } + // Run "prebind" plugins. + for _, pl := range plugins.PrebindPlugins() { + approved, err := pl.Prebind(plugins, assumedPod, scheduleResult.SuggestedHost) + if err != nil { + approved = false + klog.Errorf("error while running %v prebind plugin for pod %v: %v", pl.Name(), assumedPod.Name, err) + metrics.PodScheduleErrors.Inc() + } + if !approved { + sched.Cache().ForgetPod(assumedPod) + var reason string + if err == nil { + msg := fmt.Sprintf("prebind plugin %v rejected pod %v.", pl.Name(), assumedPod.Name) + klog.V(4).Infof(msg) + err = errors.New(msg) + reason = v1.PodReasonUnschedulable + } else { + reason = SchedulerError + } + sched.recordSchedulingFailure(assumedPod, err, reason, err.Error()) + return + } + } + err := sched.bind(assumedPod, &v1.Binding{ ObjectMeta: metav1.ObjectMeta{Namespace: assumedPod.Namespace, Name: assumedPod.Name, UID: assumedPod.UID}, Target: v1.ObjectReference{ Kind: "Node", - Name: suggestedHost, + Name: scheduleResult.SuggestedHost, }, }) - metrics.E2eSchedulingLatency.Observe(metrics.SinceInMicroseconds(start)) + metrics.E2eSchedulingLatency.Observe(metrics.SinceInSeconds(start)) + metrics.DeprecatedE2eSchedulingLatency.Observe(metrics.SinceInMicroseconds(start)) if err != nil { klog.Errorf("error binding pod: %v", err) metrics.PodScheduleErrors.Inc() } else { + klog.V(2).Infof("pod %v/%v is bound successfully on node %v, %d nodes evaluated, %d nodes were found feasible", assumedPod.Namespace, assumedPod.Name, scheduleResult.SuggestedHost, scheduleResult.EvaluatedNodes, scheduleResult.FeasibleNodes) metrics.PodScheduleSuccesses.Inc() } }() diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/testutil.go b/vendor/k8s.io/kubernetes/pkg/scheduler/testutil.go index 0c101a54573..86a89f6fd13 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/testutil.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/testutil.go @@ -24,9 +24,11 @@ import ( clientset "k8s.io/client-go/kubernetes" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/kubernetes/pkg/scheduler/algorithm" + "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/factory" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" + plugins "k8s.io/kubernetes/pkg/scheduler/plugins/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/util" ) @@ -36,12 +38,12 @@ type FakeConfigurator struct { } // GetPredicateMetadataProducer is not implemented yet. -func (fc *FakeConfigurator) GetPredicateMetadataProducer() (algorithm.PredicateMetadataProducer, error) { +func (fc *FakeConfigurator) GetPredicateMetadataProducer() (predicates.PredicateMetadataProducer, error) { return nil, fmt.Errorf("not implemented") } // GetPredicates is not implemented yet. -func (fc *FakeConfigurator) GetPredicates(predicateKeys sets.String) (map[string]algorithm.FitPredicate, error) { +func (fc *FakeConfigurator) GetPredicates(predicateKeys sets.String) (map[string]predicates.FitPredicate, error) { return nil, fmt.Errorf("not implemented") } @@ -89,3 +91,26 @@ func (fc *FakeConfigurator) CreateFromConfig(policy schedulerapi.Policy) (*facto func (fc *FakeConfigurator) CreateFromKeys(predicateKeys, priorityKeys sets.String, extenders []algorithm.SchedulerExtender) (*factory.Config, error) { return fc.Config, nil } + +// EmptyPluginSet is the default plugin registrar used by the default scheduler. +type EmptyPluginSet struct{} + +var _ = plugins.PluginSet(EmptyPluginSet{}) + +// ReservePlugins returns a slice of default reserve plugins. +func (r EmptyPluginSet) ReservePlugins() []plugins.ReservePlugin { + return []plugins.ReservePlugin{} +} + +// PrebindPlugins returns a slice of default prebind plugins. +func (r EmptyPluginSet) PrebindPlugins() []plugins.PrebindPlugin { + return []plugins.PrebindPlugin{} +} + +// Data returns a pointer to PluginData. +func (r EmptyPluginSet) Data() *plugins.PluginData { + return &plugins.PluginData{ + Ctx: nil, + SchedulerCache: nil, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/util/BUILD b/vendor/k8s.io/kubernetes/pkg/scheduler/util/BUILD index 42fc0a7a158..53649692f2a 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/util/BUILD @@ -10,6 +10,7 @@ go_test( name = "go_default_test", srcs = [ "backoff_utils_test.go", + "heap_test.go", "utils_test.go", ], embed = [":go_default_library"], @@ -26,6 +27,7 @@ go_library( srcs = [ "backoff_utils.go", "clock.go", + "heap.go", "utils.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/util", @@ -35,6 +37,7 @@ go_library( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/util/backoff_utils.go b/vendor/k8s.io/kubernetes/pkg/scheduler/util/backoff_utils.go index 506cd1270ac..618f93772f9 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/util/backoff_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/util/backoff_utils.go @@ -37,10 +37,11 @@ func (realClock) Now() time.Time { return time.Now() } -// BackoffEntry is single threaded. in particular, it only allows a single action to be waiting on backoff at a time. -// It is expected that all users will only use the public TryWait(...) method +// backoffEntry is single threaded. in particular, it only allows a single action to be waiting on backoff at a time. // It is also not safe to copy this object. -type BackoffEntry struct { +type backoffEntry struct { + initialized bool + podName ktypes.NamespacedName backoff time.Duration lastUpdate time.Time reqInFlight int32 @@ -48,45 +49,41 @@ type BackoffEntry struct { // tryLock attempts to acquire a lock via atomic compare and swap. // returns true if the lock was acquired, false otherwise -func (b *BackoffEntry) tryLock() bool { +func (b *backoffEntry) tryLock() bool { return atomic.CompareAndSwapInt32(&b.reqInFlight, 0, 1) } // unlock returns the lock. panics if the lock isn't held -func (b *BackoffEntry) unlock() { +func (b *backoffEntry) unlock() { if !atomic.CompareAndSwapInt32(&b.reqInFlight, 1, 0) { panic(fmt.Sprintf("unexpected state on unlocking: %+v", b)) } } -// TryWait tries to acquire the backoff lock, maxDuration is the maximum allowed period to wait for. -func (b *BackoffEntry) TryWait(maxDuration time.Duration) bool { - if !b.tryLock() { - return false - } - defer b.unlock() - b.wait(maxDuration) - return true +// backoffTime returns the Time when a backoffEntry completes backoff +func (b *backoffEntry) backoffTime() time.Time { + return b.lastUpdate.Add(b.backoff) } -func (b *BackoffEntry) getBackoff(maxDuration time.Duration) time.Duration { - duration := b.backoff - newDuration := time.Duration(duration) * 2 +// getBackoff returns the duration until this entry completes backoff +func (b *backoffEntry) getBackoff(maxDuration time.Duration) time.Duration { + if !b.initialized { + b.initialized = true + return b.backoff + } + newDuration := b.backoff * 2 if newDuration > maxDuration { newDuration = maxDuration } b.backoff = newDuration - klog.V(4).Infof("Backing off %s", duration.String()) - return duration -} - -func (b *BackoffEntry) wait(maxDuration time.Duration) { - time.Sleep(b.getBackoff(maxDuration)) + klog.V(4).Infof("Backing off %s", newDuration.String()) + return newDuration } // PodBackoff is used to restart a pod with back-off delay. type PodBackoff struct { - perPodBackoff map[ktypes.NamespacedName]*BackoffEntry + // expiryQ stores backoffEntry orderedy by lastUpdate until they reach maxDuration and are GC'd + expiryQ *Heap lock sync.Mutex clock clock defaultDuration time.Duration @@ -111,24 +108,58 @@ func CreatePodBackoff(defaultDuration, maxDuration time.Duration) *PodBackoff { // CreatePodBackoffWithClock creates a pod back-off object by default duration, max duration and clock. func CreatePodBackoffWithClock(defaultDuration, maxDuration time.Duration, clock clock) *PodBackoff { return &PodBackoff{ - perPodBackoff: map[ktypes.NamespacedName]*BackoffEntry{}, + expiryQ: NewHeap(backoffEntryKeyFunc, backoffEntryCompareUpdate), clock: clock, defaultDuration: defaultDuration, maxDuration: maxDuration, } } -// GetEntry returns a back-off entry by Pod ID. -func (p *PodBackoff) GetEntry(podID ktypes.NamespacedName) *BackoffEntry { +// getEntry returns the backoffEntry for a given podID +func (p *PodBackoff) getEntry(podID ktypes.NamespacedName) *backoffEntry { + entry, exists, _ := p.expiryQ.GetByKey(podID.String()) + var be *backoffEntry + if !exists { + be = &backoffEntry{ + initialized: false, + podName: podID, + backoff: p.defaultDuration, + } + p.expiryQ.Update(be) + } else { + be = entry.(*backoffEntry) + } + return be +} + +// BackoffPod updates the backoff for a podId and returns the duration until backoff completion +func (p *PodBackoff) BackoffPod(podID ktypes.NamespacedName) time.Duration { p.lock.Lock() defer p.lock.Unlock() - entry, ok := p.perPodBackoff[podID] - if !ok { - entry = &BackoffEntry{backoff: p.defaultDuration} - p.perPodBackoff[podID] = entry - } + entry := p.getEntry(podID) entry.lastUpdate = p.clock.Now() - return entry + p.expiryQ.Update(entry) + return entry.getBackoff(p.maxDuration) +} + +// TryBackoffAndWait tries to acquire the backoff lock +func (p *PodBackoff) TryBackoffAndWait(podID ktypes.NamespacedName, stop <-chan struct{}) bool { + p.lock.Lock() + entry := p.getEntry(podID) + + if !entry.tryLock() { + p.lock.Unlock() + return false + } + defer entry.unlock() + duration := entry.getBackoff(p.maxDuration) + p.lock.Unlock() + select { + case <-time.After(duration): + return true + case <-stop: + return false + } } // Gc execute garbage collection on the pod back-off. @@ -136,9 +167,54 @@ func (p *PodBackoff) Gc() { p.lock.Lock() defer p.lock.Unlock() now := p.clock.Now() - for podID, entry := range p.perPodBackoff { - if now.Sub(entry.lastUpdate) > p.maxDuration { - delete(p.perPodBackoff, podID) + var be *backoffEntry + for { + entry := p.expiryQ.Peek() + if entry == nil { + break + } + be = entry.(*backoffEntry) + if now.Sub(be.lastUpdate) > p.maxDuration { + p.expiryQ.Pop() + } else { + break } } } + +// GetBackoffTime returns the time that podID completes backoff +func (p *PodBackoff) GetBackoffTime(podID ktypes.NamespacedName) (time.Time, bool) { + p.lock.Lock() + defer p.lock.Unlock() + rawBe, exists, _ := p.expiryQ.GetByKey(podID.String()) + if !exists { + return time.Time{}, false + } + be := rawBe.(*backoffEntry) + return be.lastUpdate.Add(be.backoff), true +} + +// ClearPodBackoff removes all tracking information for podID (clears expiry) +func (p *PodBackoff) ClearPodBackoff(podID ktypes.NamespacedName) bool { + p.lock.Lock() + defer p.lock.Unlock() + entry, exists, _ := p.expiryQ.GetByKey(podID.String()) + if exists { + err := p.expiryQ.Delete(entry) + return err == nil + } + return false +} + +// backoffEntryKeyFunc is the keying function used for mapping a backoffEntry to string for heap +func backoffEntryKeyFunc(b interface{}) (string, error) { + be := b.(*backoffEntry) + return be.podName.String(), nil +} + +// backoffEntryCompareUpdate returns true when b1's backoff time is before b2's +func backoffEntryCompareUpdate(b1, b2 interface{}) bool { + be1 := b1.(*backoffEntry) + be2 := b2.(*backoffEntry) + return be1.lastUpdate.Before(be2.lastUpdate) +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/util/heap.go b/vendor/k8s.io/kubernetes/pkg/scheduler/util/heap.go new file mode 100644 index 00000000000..0f15652c654 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/util/heap.go @@ -0,0 +1,236 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Below is the implementation of the a heap. The logic is pretty much the same +// as cache.heap, however, this heap does not perform synchronization. It leaves +// synchronization to the SchedulingQueue. + +package util + +import ( + "container/heap" + "fmt" + + "k8s.io/client-go/tools/cache" +) + +// KeyFunc is a function type to get the key from an object. +type KeyFunc func(obj interface{}) (string, error) + +type heapItem struct { + obj interface{} // The object which is stored in the heap. + index int // The index of the object's key in the Heap.queue. +} + +type itemKeyValue struct { + key string + obj interface{} +} + +// heapData is an internal struct that implements the standard heap interface +// and keeps the data stored in the heap. +type heapData struct { + // items is a map from key of the objects to the objects and their index. + // We depend on the property that items in the map are in the queue and vice versa. + items map[string]*heapItem + // queue implements a heap data structure and keeps the order of elements + // according to the heap invariant. The queue keeps the keys of objects stored + // in "items". + queue []string + + // keyFunc is used to make the key used for queued item insertion and retrieval, and + // should be deterministic. + keyFunc KeyFunc + // lessFunc is used to compare two objects in the heap. + lessFunc LessFunc +} + +var ( + _ = heap.Interface(&heapData{}) // heapData is a standard heap +) + +// Less compares two objects and returns true if the first one should go +// in front of the second one in the heap. +func (h *heapData) Less(i, j int) bool { + if i > len(h.queue) || j > len(h.queue) { + return false + } + itemi, ok := h.items[h.queue[i]] + if !ok { + return false + } + itemj, ok := h.items[h.queue[j]] + if !ok { + return false + } + return h.lessFunc(itemi.obj, itemj.obj) +} + +// Len returns the number of items in the Heap. +func (h *heapData) Len() int { return len(h.queue) } + +// Swap implements swapping of two elements in the heap. This is a part of standard +// heap interface and should never be called directly. +func (h *heapData) Swap(i, j int) { + h.queue[i], h.queue[j] = h.queue[j], h.queue[i] + item := h.items[h.queue[i]] + item.index = i + item = h.items[h.queue[j]] + item.index = j +} + +// Push is supposed to be called by heap.Push only. +func (h *heapData) Push(kv interface{}) { + keyValue := kv.(*itemKeyValue) + n := len(h.queue) + h.items[keyValue.key] = &heapItem{keyValue.obj, n} + h.queue = append(h.queue, keyValue.key) +} + +// Pop is supposed to be called by heap.Pop only. +func (h *heapData) Pop() interface{} { + key := h.queue[len(h.queue)-1] + h.queue = h.queue[0 : len(h.queue)-1] + item, ok := h.items[key] + if !ok { + // This is an error + return nil + } + delete(h.items, key) + return item.obj +} + +// Peek is supposed to be called by heap.Peek only. +func (h *heapData) Peek() interface{} { + if len(h.queue) > 0 { + return h.items[h.queue[0]].obj + } + return nil +} + +// Heap is a producer/consumer queue that implements a heap data structure. +// It can be used to implement priority queues and similar data structures. +type Heap struct { + // data stores objects and has a queue that keeps their ordering according + // to the heap invariant. + data *heapData +} + +// Add inserts an item, and puts it in the queue. The item is updated if it +// already exists. +func (h *Heap) Add(obj interface{}) error { + key, err := h.data.keyFunc(obj) + if err != nil { + return cache.KeyError{Obj: obj, Err: err} + } + if _, exists := h.data.items[key]; exists { + h.data.items[key].obj = obj + heap.Fix(h.data, h.data.items[key].index) + } else { + heap.Push(h.data, &itemKeyValue{key, obj}) + } + return nil +} + +// AddIfNotPresent inserts an item, and puts it in the queue. If an item with +// the key is present in the map, no changes is made to the item. +func (h *Heap) AddIfNotPresent(obj interface{}) error { + key, err := h.data.keyFunc(obj) + if err != nil { + return cache.KeyError{Obj: obj, Err: err} + } + if _, exists := h.data.items[key]; !exists { + heap.Push(h.data, &itemKeyValue{key, obj}) + } + return nil +} + +// Update is the same as Add in this implementation. When the item does not +// exist, it is added. +func (h *Heap) Update(obj interface{}) error { + return h.Add(obj) +} + +// Delete removes an item. +func (h *Heap) Delete(obj interface{}) error { + key, err := h.data.keyFunc(obj) + if err != nil { + return cache.KeyError{Obj: obj, Err: err} + } + if item, ok := h.data.items[key]; ok { + heap.Remove(h.data, item.index) + return nil + } + return fmt.Errorf("object not found") +} + +// Peek returns the head of the heap without removing it. +func (h *Heap) Peek() interface{} { + return h.data.Peek() +} + +// Pop returns the head of the heap and removes it. +func (h *Heap) Pop() (interface{}, error) { + obj := heap.Pop(h.data) + if obj != nil { + return obj, nil + } + return nil, fmt.Errorf("object was removed from heap data") +} + +// Get returns the requested item, or sets exists=false. +func (h *Heap) Get(obj interface{}) (interface{}, bool, error) { + key, err := h.data.keyFunc(obj) + if err != nil { + return nil, false, cache.KeyError{Obj: obj, Err: err} + } + return h.GetByKey(key) +} + +// GetByKey returns the requested item, or sets exists=false. +func (h *Heap) GetByKey(key string) (interface{}, bool, error) { + item, exists := h.data.items[key] + if !exists { + return nil, false, nil + } + return item.obj, true, nil +} + +// List returns a list of all the items. +func (h *Heap) List() []interface{} { + list := make([]interface{}, 0, len(h.data.items)) + for _, item := range h.data.items { + list = append(list, item.obj) + } + return list +} + +// Len returns the number of items in the heap. +func (h *Heap) Len() int { + return len(h.data.queue) +} + +// NewHeap returns a Heap which can be used to queue up items to process. +func NewHeap(keyFn KeyFunc, lessFn LessFunc) *Heap { + return &Heap{ + data: &heapData{ + items: map[string]*heapItem{}, + queue: []string{}, + keyFunc: keyFn, + lessFunc: lessFn, + }, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/volumebinder/volume_binder.go b/vendor/k8s.io/kubernetes/pkg/scheduler/volumebinder/volume_binder.go index 4a0089a479d..53e3488a8c1 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/volumebinder/volume_binder.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/volumebinder/volume_binder.go @@ -34,13 +34,14 @@ type VolumeBinder struct { // NewVolumeBinder sets up the volume binding library and binding queue func NewVolumeBinder( client clientset.Interface, + nodeInformer coreinformers.NodeInformer, pvcInformer coreinformers.PersistentVolumeClaimInformer, pvInformer coreinformers.PersistentVolumeInformer, storageClassInformer storageinformers.StorageClassInformer, bindTimeout time.Duration) *VolumeBinder { return &VolumeBinder{ - Binder: persistentvolume.NewVolumeBinder(client, pvcInformer, pvInformer, storageClassInformer, bindTimeout), + Binder: persistentvolume.NewVolumeBinder(client, nodeInformer, pvcInformer, pvInformer, storageClassInformer, bindTimeout), } } diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/BUILD b/vendor/k8s.io/kubernetes/pkg/security/apparmor/BUILD index 576a2780306..fb29986efd4 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/apparmor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/BUILD @@ -17,9 +17,9 @@ go_library( deps = [ "//pkg/features:go_default_library", "//pkg/kubelet/types:go_default_library", - "//pkg/util/file:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go index 25ea591fca0..1d03c7ee02d 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go @@ -29,7 +29,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/features" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" - utilfile "k8s.io/kubernetes/pkg/util/file" + utilpath "k8s.io/utils/path" ) // Whether AppArmor should be disabled by default. @@ -195,7 +195,7 @@ func getAppArmorFS() (string, error) { } if fields[2] == "securityfs" { appArmorFS := path.Join(fields[1], "apparmor") - if ok, err := utilfile.FileExists(appArmorFS); !ok { + if ok, err := utilpath.Exists(utilpath.CheckFollowSymlink, appArmorFS); !ok { msg := fmt.Sprintf("path %s does not exist", appArmorFS) if err != nil { return "", fmt.Errorf("%s: %v", msg, err) diff --git a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/OWNERS b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/OWNERS index 787630abd2f..f558c884f12 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-policy-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go index c0a25da1752..3620adca7a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go @@ -129,6 +129,8 @@ func GetVolumeFSType(v api.Volume) (policy.FSType, error) { return policy.PortworxVolume, nil case v.ScaleIO != nil: return policy.ScaleIO, nil + case v.CSI != nil: + return policy.CSI, nil } return "", fmt.Errorf("unknown volume type for volume: %#v", v) diff --git a/vendor/k8s.io/kubernetes/pkg/securitycontext/fake.go b/vendor/k8s.io/kubernetes/pkg/securitycontext/fake.go index 3303db2126c..a0a4ae193a5 100644 --- a/vendor/k8s.io/kubernetes/pkg/securitycontext/fake.go +++ b/vendor/k8s.io/kubernetes/pkg/securitycontext/fake.go @@ -25,9 +25,11 @@ import ( // empty container defaults. Used for testing. func ValidSecurityContextWithContainerDefaults() *v1.SecurityContext { priv := false + defProcMount := v1.DefaultProcMount return &v1.SecurityContext{ Capabilities: &v1.Capabilities{}, Privileged: &priv, + ProcMount: &defProcMount, } } diff --git a/vendor/k8s.io/kubernetes/pkg/securitycontext/util.go b/vendor/k8s.io/kubernetes/pkg/securitycontext/util.go index 07489baf56e..f324f7d1216 100644 --- a/vendor/k8s.io/kubernetes/pkg/securitycontext/util.go +++ b/vendor/k8s.io/kubernetes/pkg/securitycontext/util.go @@ -17,9 +17,6 @@ limitations under the License. package securitycontext import ( - "fmt" - "strings" - "k8s.io/api/core/v1" ) @@ -47,26 +44,6 @@ func HasCapabilitiesRequest(container *v1.Container) bool { return len(container.SecurityContext.Capabilities.Add) > 0 || len(container.SecurityContext.Capabilities.Drop) > 0 } -const expectedSELinuxFields = 4 - -// ParseSELinuxOptions parses a string containing a full SELinux context -// (user, role, type, and level) into an SELinuxOptions object. If the -// context is malformed, an error is returned. -func ParseSELinuxOptions(context string) (*v1.SELinuxOptions, error) { - fields := strings.SplitN(context, ":", expectedSELinuxFields) - - if len(fields) != expectedSELinuxFields { - return nil, fmt.Errorf("expected %v fields in selinux; got %v (context: %v)", expectedSELinuxFields, len(fields), context) - } - - return &v1.SELinuxOptions{ - User: fields[0], - Role: fields[1], - Type: fields[2], - Level: fields[3], - }, nil -} - func DetermineEffectiveSecurityContext(pod *v1.Pod, container *v1.Container) *v1.SecurityContext { effectiveSc := securityContextFromPodSecurityContext(pod) containerSc := container.SecurityContext diff --git a/vendor/k8s.io/kubernetes/pkg/serviceaccount/BUILD b/vendor/k8s.io/kubernetes/pkg/serviceaccount/BUILD index d0ad133b626..8bd9e629607 100644 --- a/vendor/k8s.io/kubernetes/pkg/serviceaccount/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/serviceaccount/BUILD @@ -57,7 +57,9 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", - "//staging/src/k8s.io/client-go/util/cert:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//vendor/gopkg.in/square/go-jose.v2/jwt:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/serviceaccount/OWNERS b/vendor/k8s.io/kubernetes/pkg/serviceaccount/OWNERS index d914c0d7195..c6c376de4e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/serviceaccount/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/serviceaccount/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-serviceaccounts-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/util/BUILD b/vendor/k8s.io/kubernetes/pkg/util/BUILD index 497e36aadbf..b52c95b50a5 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/BUILD @@ -20,7 +20,6 @@ filegroup( "//pkg/util/dbus:all-srcs", "//pkg/util/ebtables:all-srcs", "//pkg/util/env:all-srcs", - "//pkg/util/file:all-srcs", "//pkg/util/filesystem:all-srcs", "//pkg/util/flag:all-srcs", "//pkg/util/flock:all-srcs", @@ -28,25 +27,22 @@ filegroup( "//pkg/util/hash:all-srcs", "//pkg/util/initsystem:all-srcs", "//pkg/util/interrupt:all-srcs", - "//pkg/util/io:all-srcs", "//pkg/util/ipconfig:all-srcs", "//pkg/util/ipset:all-srcs", "//pkg/util/iptables:all-srcs", "//pkg/util/ipvs:all-srcs", - "//pkg/util/keymutex:all-srcs", "//pkg/util/labels:all-srcs", "//pkg/util/maps:all-srcs", "//pkg/util/metrics:all-srcs", "//pkg/util/mount:all-srcs", - "//pkg/util/net:all-srcs", "//pkg/util/netsh:all-srcs", "//pkg/util/node:all-srcs", "//pkg/util/normalizer:all-srcs", - "//pkg/util/nsenter:all-srcs", "//pkg/util/oom:all-srcs", "//pkg/util/parsers:all-srcs", "//pkg/util/pod:all-srcs", "//pkg/util/procfs:all-srcs", + "//pkg/util/prometheusclientgo:all-srcs", "//pkg/util/reflector/prometheus:all-srcs", "//pkg/util/removeall:all-srcs", "//pkg/util/resizefs:all-srcs", @@ -54,7 +50,6 @@ filegroup( "//pkg/util/rlimit:all-srcs", "//pkg/util/selinux:all-srcs", "//pkg/util/slice:all-srcs", - "//pkg/util/strings:all-srcs", "//pkg/util/sysctl:all-srcs", "//pkg/util/system:all-srcs", "//pkg/util/tail:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/util/configz/configz.go b/vendor/k8s.io/kubernetes/pkg/util/configz/configz.go index 99413d5e7fd..5bb192637e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/configz/configz.go +++ b/vendor/k8s.io/kubernetes/pkg/util/configz/configz.go @@ -14,6 +14,29 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package configz serves ComponentConfig objects from running components. +// +// Each component that wants to serve its ComponentConfig creates a Config +// object, and the program should call InstallHandler once. e.g., +// func main() { +// boatConfig := getBoatConfig() +// planeConfig := getPlaneConfig() +// +// bcz, err := configz.New("boat") +// if err != nil { +// panic(err) +// } +// bcz.Set(boatConfig) +// +// pcz, err := configz.New("plane") +// if err != nil { +// panic(err) +// } +// pcz.Set(planeConfig) +// +// configz.InstallHandler(http.DefaultServeMux) +// http.ListenAndServe(":8080", http.DefaultServeMux) +// } package configz import ( @@ -28,10 +51,14 @@ var ( configs = map[string]*Config{} ) +// Config is a handle to a ComponentConfig object. Don't create these directly; +// use New() instead. type Config struct { val interface{} } +// InstallHandler adds an HTTP handler on the given mux for the "/configz" +// endpoint which serves all registered ComponentConfigs in JSON format. func InstallHandler(m mux) { m.Handle("/configz", http.HandlerFunc(handle)) } @@ -40,6 +67,8 @@ type mux interface { Handle(string, http.Handler) } +// New creates a Config object with the given name. Each Config is registered +// with this package's "/configz" handler. func New(name string) (*Config, error) { configsGuard.Lock() defer configsGuard.Unlock() @@ -51,18 +80,22 @@ func New(name string) (*Config, error) { return &newConfig, nil } +// Delete removes the named ComponentConfig from this package's "/configz" +// handler. func Delete(name string) { configsGuard.Lock() defer configsGuard.Unlock() delete(configs, name) } +// Set sets the ComponentConfig for this Config. func (v *Config) Set(val interface{}) { configsGuard.Lock() defer configsGuard.Unlock() v.val = val } +// MarshalJSON marshals the ComponentConfig as JSON data. func (v *Config) MarshalJSON() ([]byte, error) { return json.Marshal(v.val) } diff --git a/vendor/k8s.io/kubernetes/pkg/util/conntrack/BUILD b/vendor/k8s.io/kubernetes/pkg/util/conntrack/BUILD index e078a914fc3..958fba489aa 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/conntrack/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/conntrack/BUILD @@ -6,9 +6,9 @@ go_library( importpath = "k8s.io/kubernetes/pkg/util/conntrack", visibility = ["//visibility:public"], deps = [ - "//pkg/util/net:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) @@ -17,10 +17,10 @@ go_test( srcs = ["conntrack_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/util/net:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/exec/testing:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/util/conntrack/conntrack.go b/vendor/k8s.io/kubernetes/pkg/util/conntrack/conntrack.go index 353bc0d0c25..06b76edc6dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/conntrack/conntrack.go +++ b/vendor/k8s.io/kubernetes/pkg/util/conntrack/conntrack.go @@ -22,8 +22,8 @@ import ( "strings" "k8s.io/api/core/v1" - utilnet "k8s.io/kubernetes/pkg/util/net" "k8s.io/utils/exec" + utilnet "k8s.io/utils/net" ) // Utilities for dealing with conntrack @@ -107,3 +107,19 @@ func ClearEntriesForNAT(execer exec.Interface, origin, dest string, protocol v1. } return nil } + +// ClearEntriesForPortNAT uses the conntrack tool to delete the contrack entries +// for connections specified by the {dest IP, port} pair. +// Known issue: +// https://github.com/kubernetes/kubernetes/issues/59368 +func ClearEntriesForPortNAT(execer exec.Interface, dest string, port int, protocol v1.Protocol) error { + if port <= 0 { + return fmt.Errorf("Wrong port number. The port number must be greater then zero") + } + parameters := parametersWithFamily(utilnet.IsIPv6String(dest), "-D", "-p", protoStr(protocol), "--dport", strconv.Itoa(port), "--dst-nat", dest) + err := Exec(execer, parameters...) + if err != nil && !strings.Contains(err.Error(), NoConnectionToDelete) { + return fmt.Errorf("error deleting conntrack entries for UDP port: %d, error: %v", port, err) + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/file/BUILD b/vendor/k8s.io/kubernetes/pkg/util/file/BUILD deleted file mode 100644 index 299528ca00f..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/file/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = ["file.go"], - importpath = "k8s.io/kubernetes/pkg/util/file", -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) - -go_test( - name = "go_default_test", - srcs = ["file_test.go"], - embed = [":go_default_library"], - deps = [ - "//vendor/github.com/spf13/afero:go_default_library", - "//vendor/github.com/stretchr/testify/assert:go_default_library", - ], -) diff --git a/vendor/k8s.io/kubernetes/pkg/util/file/file.go b/vendor/k8s.io/kubernetes/pkg/util/file/file.go deleted file mode 100644 index 70d26c4ef74..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/file/file.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package file - -import ( - "os" -) - -// FileExists checks if specified file exists. -func FileExists(filename string) (bool, error) { - if _, err := os.Stat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -// FileOrSymlinkExists checks if specified file or symlink exists. -func FileOrSymlinkExists(filename string) (bool, error) { - if _, err := os.Lstat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -// ReadDirNoStat returns a string of files/directories contained -// in dirname without calling lstat on them. -func ReadDirNoStat(dirname string) ([]string, error) { - if dirname == "" { - dirname = "." - } - - f, err := os.Open(dirname) - if err != nil { - return nil, err - } - defer f.Close() - - return f.Readdirnames(-1) -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/goroutinemap/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/goroutinemap/OWNERS index 9d44e9cec07..1bbf5cf2efa 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/goroutinemap/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/util/goroutinemap/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/util/ipset/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/ipset/OWNERS index 32ba0746b78..bda6c6ad919 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/ipset/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/util/ipset/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - brendandburns @@ -7,3 +9,5 @@ approvers: - thockin - brendandburns - m1093782566 +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/util/ipset/ipset.go b/vendor/k8s.io/kubernetes/pkg/util/ipset/ipset.go index 2d400a6244e..454157ca5f6 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/ipset/ipset.go +++ b/vendor/k8s.io/kubernetes/pkg/util/ipset/ipset.go @@ -330,7 +330,7 @@ func (runner *runner) DelEntry(entry string, set string) error { // TestEntry is used to check whether the specified entry is in the set or not. func (runner *runner) TestEntry(entry string, set string) (bool, error) { if out, err := runner.exec.Command(IPSetCmd, "test", set, entry).CombinedOutput(); err == nil { - reg, e := regexp.Compile("NOT") + reg, e := regexp.Compile("is NOT in set " + set) if e == nil && reg.MatchString(string(out)) { return false, nil } else if e == nil { diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/BUILD b/vendor/k8s.io/kubernetes/pkg/util/iptables/BUILD index 9b289951f52..6e62709b6da 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/BUILD @@ -20,10 +20,10 @@ go_library( "//pkg/util/dbus:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library", "//vendor/github.com/godbus/dbus:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/iptables/OWNERS index 55d0a0de083..fc29299e675 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - dcbw - thockin @@ -7,3 +9,5 @@ approvers: - dcbw - thockin - eparis +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go index c9f3d9860d1..976f6d780da 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go @@ -28,10 +28,10 @@ import ( godbus "github.com/godbus/dbus" "k8s.io/apimachinery/pkg/util/sets" utilversion "k8s.io/apimachinery/pkg/util/version" - utiltrace "k8s.io/apiserver/pkg/util/trace" "k8s.io/klog" utildbus "k8s.io/kubernetes/pkg/util/dbus" utilexec "k8s.io/utils/exec" + utiltrace "k8s.io/utils/trace" ) type RulePosition string diff --git a/vendor/k8s.io/kubernetes/pkg/util/ipvs/BUILD b/vendor/k8s.io/kubernetes/pkg/util/ipvs/BUILD index 784a343e37d..88111db03df 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/ipvs/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/ipvs/BUILD @@ -41,6 +41,7 @@ go_library( "@io_bazel_rules_go//go/platform:linux": [ "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/github.com/docker/libnetwork/ipvs:go_default_library", + "//vendor/github.com/lithammer/dedent:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], "//conditions:default": [], diff --git a/vendor/k8s.io/kubernetes/pkg/util/ipvs/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/ipvs/OWNERS index fce2911d6a2..1acba6eb4d5 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/ipvs/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/util/ipvs/OWNERS @@ -1,7 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - m1093782566 approvers: - thockin - m1093782566 - +labels: +- sig/network diff --git a/vendor/k8s.io/kubernetes/pkg/util/ipvs/kernelcheck_linux.go b/vendor/k8s.io/kubernetes/pkg/util/ipvs/kernelcheck_linux.go index 286a3098c0c..6389d583667 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/ipvs/kernelcheck_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/ipvs/kernelcheck_linux.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" utilsexec "k8s.io/utils/exec" + "github.com/lithammer/dedent" "k8s.io/klog" ) @@ -80,10 +81,20 @@ func (r RequiredIPVSKernelModulesAvailableCheck) Check() (warnings, errors []err } } if len(builtInModules) != 0 { - warnings = append(warnings, fmt.Errorf( - "the IPVS proxier will not be used, because the following required kernel modules are not loaded: %v or no builtin kernel ipvs support: %v\n"+ - "you can solve this problem with following methods:\n 1. Run 'modprobe -- ' to load missing kernel modules;\n"+ - "2. Provide the missing builtin kernel ipvs support\n", modules, builtInModules)) + warnings = append(warnings, fmt.Errorf(dedent.Dedent(` + + The IPVS proxier may not be used because the following required kernel modules are not loaded: %v + or no builtin kernel IPVS support was found: %v. + However, these modules may be loaded automatically by kube-proxy if they are available on your system. + To verify IPVS support: + + Run "lsmod | grep 'ip_vs|nf_conntrack'" and verify each of the above modules are listed. + + If they are not listed, you can use the following methods to load them: + + 1. For each missing module run 'modprobe $modulename' (e.g., 'modprobe ip_vs', 'modprobe ip_vs_rr', ...) + 2. If 'modprobe $modulename' returns an error, you will need to install the missing module support for your kernel. + `), modules, builtInModules)) } } diff --git a/vendor/k8s.io/kubernetes/pkg/util/keymutex/BUILD b/vendor/k8s.io/kubernetes/pkg/util/keymutex/BUILD deleted file mode 100644 index 267a4b1f633..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/keymutex/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "hashed.go", - "keymutex.go", - ], - importpath = "k8s.io/kubernetes/pkg/util/keymutex", - deps = ["//vendor/k8s.io/klog:go_default_library"], -) - -go_test( - name = "go_default_test", - srcs = ["keymutex_test.go"], - embed = [":go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD b/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD index c9b9ce8a47e..3a61d016a81 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD @@ -9,7 +9,9 @@ go_library( "exec_mount_unsupported.go", "fake.go", "mount.go", - "mount_helper.go", + "mount_helper_common.go", + "mount_helper_unix.go", + "mount_helper_windows.go", "mount_linux.go", "mount_unsupported.go", "mount_windows.go", @@ -23,42 +25,43 @@ go_library( "//vendor/k8s.io/utils/exec:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:android": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:darwin": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:dragonfly": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:freebsd": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:linux": [ - "//pkg/util/file:go_default_library", - "//pkg/util/io:go_default_library", - "//pkg/util/nsenter:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", + "//vendor/k8s.io/utils/io:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:netbsd": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:openbsd": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:plan9": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:solaris": [ - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:windows": [ - "//pkg/util/file:go_default_library", - "//pkg/util/nsenter:go_default_library", + "//vendor/k8s.io/utils/keymutex:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "//conditions:default": [], }), @@ -80,10 +83,8 @@ go_test( "//vendor/k8s.io/utils/exec/testing:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ - "//pkg/util/nsenter:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:windows": [ "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/mount/OWNERS index 2d6f262fbff..c8821ce7354 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - jingxu97 - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go index 634189dea9b..b30f6f0218f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go @@ -144,18 +144,6 @@ func (m *execMounter) EvalHostSymlinks(pathname string) (string, error) { return m.wrappedMounter.EvalHostSymlinks(pathname) } -func (m *execMounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - return m.wrappedMounter.PrepareSafeSubpath(subPath) -} - -func (m *execMounter) CleanSubPaths(podDir string, volumeName string) error { - return m.wrappedMounter.CleanSubPaths(podDir, volumeName) -} - -func (m *execMounter) SafeMakeDir(pathname string, base string, perm os.FileMode) error { - return m.wrappedMounter.SafeMakeDir(pathname, base, perm) -} - func (m *execMounter) GetMountRefs(pathname string) ([]string, error) { return m.wrappedMounter.GetMountRefs(pathname) } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go index d5a1fdc58c6..698c136e019 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go @@ -48,7 +48,7 @@ func (mounter *execMounter) IsMountPointMatch(mp MountPoint, dir string) bool { } func (mounter *execMounter) IsNotMountPoint(dir string) (bool, error) { - return IsNotMountPoint(mounter, dir) + return isNotMountPoint(mounter, dir) } func (mounter *execMounter) IsLikelyNotMountPoint(file string) (bool, error) { @@ -91,18 +91,6 @@ func (m *execMounter) EvalHostSymlinks(pathname string) (string, error) { return "", errors.New("not implemented") } -func (mounter *execMounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - return subPath.Path, nil, nil -} - -func (mounter *execMounter) CleanSubPaths(podDir string, volumeName string) error { - return nil -} - -func (mounter *execMounter) SafeMakeDir(pathname string, base string, perm os.FileMode) error { - return nil -} - func (mounter *execMounter) GetMountRefs(pathname string) ([]string, error) { return nil, errors.New("not implemented") } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go index 0e2952f3e02..f8abc216b87 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go @@ -137,7 +137,7 @@ func (f *FakeMounter) IsMountPointMatch(mp MountPoint, dir string) bool { } func (f *FakeMounter) IsNotMountPoint(dir string) (bool, error) { - return IsNotMountPoint(f, dir) + return isNotMountPoint(f, dir) } func (f *FakeMounter) IsLikelyNotMountPoint(file string) (bool, error) { @@ -220,17 +220,6 @@ func (f *FakeMounter) EvalHostSymlinks(pathname string) (string, error) { return pathname, nil } -func (f *FakeMounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - return subPath.Path, nil, nil -} - -func (f *FakeMounter) CleanSubPaths(podDir string, volumeName string) error { - return nil -} -func (mounter *FakeMounter) SafeMakeDir(pathname string, base string, perm os.FileMode) error { - return nil -} - func (f *FakeMounter) GetMountRefs(pathname string) ([]string, error) { realpath, err := filepath.EvalSymlinks(pathname) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go index 48dfde3da4d..b0ad41ceffd 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go @@ -84,35 +84,12 @@ type Interface interface { // MakeDir creates a new directory. // Will operate in the host mount namespace if kubelet is running in a container MakeDir(pathname string) error - // SafeMakeDir creates subdir within given base. It makes sure that the - // created directory does not escape given base directory mis-using - // symlinks. Note that the function makes sure that it creates the directory - // somewhere under the base, nothing else. E.g. if the directory already - // exists, it may exist outside of the base due to symlinks. - // This method should be used if the directory to create is inside volume - // that's under user control. User must not be able to use symlinks to - // escape the volume to create directories somewhere else. - SafeMakeDir(subdir string, base string, perm os.FileMode) error // Will operate in the host mount namespace if kubelet is running in a container. // Error is returned on any other error than "file not found". ExistsPath(pathname string) (bool, error) // EvalHostSymlinks returns the path name after evaluating symlinks. // Will operate in the host mount namespace if kubelet is running in a container. EvalHostSymlinks(pathname string) (string, error) - // CleanSubPaths removes any bind-mounts created by PrepareSafeSubpath in given - // pod volume directory. - CleanSubPaths(podDir string, volumeName string) error - // PrepareSafeSubpath does everything that's necessary to prepare a subPath - // that's 1) inside given volumePath and 2) immutable after this call. - // - // newHostPath - location of prepared subPath. It should be used instead of - // hostName when running the container. - // cleanupAction - action to run when the container is running or it failed to start. - // - // CleanupAction must be called immediately after the container with given - // subpath starts. On the other hand, Interface.CleanSubPaths must be called - // when the pod finishes. - PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) // GetMountRefs finds all mount references to the path, returns a // list of paths. Path could be a mountpoint path, device or a normal // directory (for bind mount). @@ -143,7 +120,7 @@ type Subpath struct { // Exec executes command where mount utilities are. This can be either the host, // container where kubelet runs or even a remote pod with mount utilities. -// Usual pkg/util/exec interface is not used because kubelet.RunInContainer does +// Usual k8s.io/utils/exec interface is not used because kubelet.RunInContainer does // not provide stdin/stdout/stderr streams. type Exec interface { // Run executes a command and returns its stdout + stderr combined in one @@ -245,12 +222,9 @@ func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, e return device, refCount, nil } -// IsNotMountPoint determines if a directory is a mountpoint. -// It should return ErrNotExist when the directory does not exist. -// This method uses the List() of all mountpoints -// It is more extensive than IsLikelyNotMountPoint -// and it detects bind mounts in linux -func IsNotMountPoint(mounter Interface, file string) (bool, error) { +// isNotMountPoint implements Mounter.IsNotMountPoint and is shared by mounter +// implementations. +func isNotMountPoint(mounter Interface, file string) (bool, error) { // IsLikelyNotMountPoint provides a quick check // to determine whether file IS A mountpoint notMnt, notMntErr := mounter.IsLikelyNotMountPoint(file) @@ -358,15 +332,15 @@ func PathWithinBase(fullPath, basePath string) bool { if err != nil { return false } - if startsWithBackstep(rel) { + if StartsWithBackstep(rel) { // Needed to escape the base path return false } return true } -// startsWithBackstep checks if the given path starts with a backstep segment -func startsWithBackstep(rel string) bool { +// StartsWithBackstep checks if the given path starts with a backstep segment +func StartsWithBackstep(rel string) bool { // normalize to / and check for ../ return rel == ".." || strings.HasPrefix(filepath.ToSlash(rel), "../") } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go similarity index 84% rename from vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper.go rename to vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go index 42b00205983..cff1d89588e 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go @@ -19,7 +19,6 @@ package mount import ( "fmt" "os" - "syscall" "k8s.io/klog" ) @@ -56,7 +55,7 @@ func doCleanupMountPoint(mountPath string, mounter Interface, extensiveMountPoin var notMnt bool var err error if extensiveMountPointCheck { - notMnt, err = IsNotMountPoint(mounter, mountPath) + notMnt, err = mounter.IsNotMountPoint(mountPath) } else { notMnt, err = mounter.IsLikelyNotMountPoint(mountPath) } @@ -102,23 +101,3 @@ func PathExists(path string) (bool, error) { return false, err } } - -// IsCorruptedMnt return true if err is about corrupted mount point -func IsCorruptedMnt(err error) bool { - if err == nil { - return false - } - var underlyingError error - switch pe := err.(type) { - case nil: - return false - case *os.PathError: - underlyingError = pe.Err - case *os.LinkError: - underlyingError = pe.Err - case *os.SyscallError: - underlyingError = pe.Err - } - - return underlyingError == syscall.ENOTCONN || underlyingError == syscall.ESTALE || underlyingError == syscall.EIO || underlyingError == syscall.EACCES -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_unix.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_unix.go new file mode 100644 index 00000000000..880a89e1596 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_unix.go @@ -0,0 +1,44 @@ +// +build !windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package mount + +import ( + "os" + "syscall" +) + +// IsCorruptedMnt return true if err is about corrupted mount point +func IsCorruptedMnt(err error) bool { + if err == nil { + return false + } + var underlyingError error + switch pe := err.(type) { + case nil: + return false + case *os.PathError: + underlyingError = pe.Err + case *os.LinkError: + underlyingError = pe.Err + case *os.SyscallError: + underlyingError = pe.Err + } + + return underlyingError == syscall.ENOTCONN || underlyingError == syscall.ESTALE || underlyingError == syscall.EIO || underlyingError == syscall.EACCES +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_windows.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_windows.go new file mode 100644 index 00000000000..e9b3c657792 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_windows.go @@ -0,0 +1,68 @@ +// +build windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package mount + +import ( + "os" + "syscall" + + "k8s.io/klog" +) + +// following failure codes are from https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--1300-1699- +// ERROR_BAD_NETPATH = 53 +// ERROR_NETWORK_BUSY = 54 +// ERROR_UNEXP_NET_ERR = 59 +// ERROR_NETNAME_DELETED = 64 +// ERROR_NETWORK_ACCESS_DENIED = 65 +// ERROR_BAD_DEV_TYPE = 66 +// ERROR_BAD_NET_NAME = 67 +// ERROR_SESSION_CREDENTIAL_CONFLICT = 1219 +// ERROR_LOGON_FAILURE = 1326 +var errorNoList = [...]int{53, 54, 59, 64, 65, 66, 67, 1219, 1326} + +// IsCorruptedMnt return true if err is about corrupted mount point +func IsCorruptedMnt(err error) bool { + if err == nil { + return false + } + + var underlyingError error + switch pe := err.(type) { + case nil: + return false + case *os.PathError: + underlyingError = pe.Err + case *os.LinkError: + underlyingError = pe.Err + case *os.SyscallError: + underlyingError = pe.Err + } + + if ee, ok := underlyingError.(syscall.Errno); ok { + for _, errno := range errorNoList { + if int(ee) == errno { + klog.Warningf("IsCorruptedMnt failed with error: %v, error code: %v", err, errno) + return true + } + } + } + + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go index 2ab4d1059ed..9ffd766a51b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go @@ -21,7 +21,6 @@ package mount import ( "errors" "fmt" - "io/ioutil" "os" "os/exec" "path" @@ -33,9 +32,9 @@ import ( "golang.org/x/sys/unix" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog" - utilfile "k8s.io/kubernetes/pkg/util/file" - utilio "k8s.io/kubernetes/pkg/util/io" utilexec "k8s.io/utils/exec" + utilio "k8s.io/utils/io" + utilpath "k8s.io/utils/path" ) const ( @@ -53,14 +52,6 @@ const ( fsckErrorsCorrected = 1 // 'fsck' found errors but exited without correcting them fsckErrorsUncorrected = 4 - - // place for subpath mounts - // TODO: pass in directory using kubelet_getters instead - containerSubPathDirectoryName = "volume-subpaths" - // syscall.Openat flags used to traverse directories not following symlinks - nofollowFlags = unix.O_RDONLY | unix.O_NOFOLLOW - // flags for getting file descriptor without following the symlink - openFDFlags = unix.O_NOFOLLOW | unix.O_PATH ) // Mounter provides the default implementation of mount.Interface @@ -229,7 +220,7 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { } func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return IsNotMountPoint(mounter, dir) + return isNotMountPoint(mounter, dir) } // IsLikelyNotMountPoint determines if a directory is not a mountpoint. @@ -417,7 +408,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { } func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { - return utilfile.FileExists(pathname) + return utilpath.Exists(utilpath.CheckFollowSymlink, pathname) } func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) { @@ -726,282 +717,6 @@ func getSELinuxSupport(path string, mountInfoFilename string) (bool, error) { return false, nil } -func (mounter *Mounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - newHostPath, err = doBindSubPath(mounter, subPath) - - // There is no action when the container starts. Bind-mount will be cleaned - // when container stops by CleanSubPaths. - cleanupAction = nil - return newHostPath, cleanupAction, err -} - -// This implementation is shared between Linux and NsEnterMounter -func safeOpenSubPath(mounter Interface, subpath Subpath) (int, error) { - if !PathWithinBase(subpath.Path, subpath.VolumePath) { - return -1, fmt.Errorf("subpath %q not within volume path %q", subpath.Path, subpath.VolumePath) - } - fd, err := doSafeOpen(subpath.Path, subpath.VolumePath) - if err != nil { - return -1, fmt.Errorf("error opening subpath %v: %v", subpath.Path, err) - } - return fd, nil -} - -// prepareSubpathTarget creates target for bind-mount of subpath. It returns -// "true" when the target already exists and something is mounted there. -// Given Subpath must have all paths with already resolved symlinks and with -// paths relevant to kubelet (when it runs in a container). -// This function is called also by NsEnterMounter. It works because -// /var/lib/kubelet is mounted from the host into the container with Kubelet as -// /var/lib/kubelet too. -func prepareSubpathTarget(mounter Interface, subpath Subpath) (bool, string, error) { - // Early check for already bind-mounted subpath. - bindPathTarget := getSubpathBindTarget(subpath) - notMount, err := IsNotMountPoint(mounter, bindPathTarget) - if err != nil { - if !os.IsNotExist(err) { - return false, "", fmt.Errorf("error checking path %s for mount: %s", bindPathTarget, err) - } - // Ignore ErrorNotExist: the file/directory will be created below if it does not exist yet. - notMount = true - } - if !notMount { - // It's already mounted - klog.V(5).Infof("Skipping bind-mounting subpath %s: already mounted", bindPathTarget) - return true, bindPathTarget, nil - } - - // bindPathTarget is in /var/lib/kubelet and thus reachable without any - // translation even to containerized kubelet. - bindParent := filepath.Dir(bindPathTarget) - err = os.MkdirAll(bindParent, 0750) - if err != nil && !os.IsExist(err) { - return false, "", fmt.Errorf("error creating directory %s: %s", bindParent, err) - } - - t, err := os.Lstat(subpath.Path) - if err != nil { - return false, "", fmt.Errorf("lstat %s failed: %s", subpath.Path, err) - } - - if t.Mode()&os.ModeDir > 0 { - if err = os.Mkdir(bindPathTarget, 0750); err != nil && !os.IsExist(err) { - return false, "", fmt.Errorf("error creating directory %s: %s", bindPathTarget, err) - } - } else { - // "/bin/touch ". - // A file is enough for all possible targets (symlink, device, pipe, - // socket, ...), bind-mounting them into a file correctly changes type - // of the target file. - if err = ioutil.WriteFile(bindPathTarget, []byte{}, 0640); err != nil { - return false, "", fmt.Errorf("error creating file %s: %s", bindPathTarget, err) - } - } - return false, bindPathTarget, nil -} - -func getSubpathBindTarget(subpath Subpath) string { - // containerName is DNS label, i.e. safe as a directory name. - return filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName, strconv.Itoa(subpath.VolumeMountIndex)) -} - -func doBindSubPath(mounter Interface, subpath Subpath) (hostPath string, err error) { - // Linux, kubelet runs on the host: - // - safely open the subpath - // - bind-mount /proc//fd/ to subpath target - // User can't change /proc//fd/ to point to a bad place. - - // Evaluate all symlinks here once for all subsequent functions. - newVolumePath, err := filepath.EvalSymlinks(subpath.VolumePath) - if err != nil { - return "", fmt.Errorf("error resolving symlinks in %q: %v", subpath.VolumePath, err) - } - newPath, err := filepath.EvalSymlinks(subpath.Path) - if err != nil { - return "", fmt.Errorf("error resolving symlinks in %q: %v", subpath.Path, err) - } - klog.V(5).Infof("doBindSubPath %q (%q) for volumepath %q", subpath.Path, newPath, subpath.VolumePath) - subpath.VolumePath = newVolumePath - subpath.Path = newPath - - fd, err := safeOpenSubPath(mounter, subpath) - if err != nil { - return "", err - } - defer syscall.Close(fd) - - alreadyMounted, bindPathTarget, err := prepareSubpathTarget(mounter, subpath) - if err != nil { - return "", err - } - if alreadyMounted { - return bindPathTarget, nil - } - - success := false - defer func() { - // Cleanup subpath on error - if !success { - klog.V(4).Infof("doBindSubPath() failed for %q, cleaning up subpath", bindPathTarget) - if cleanErr := cleanSubPath(mounter, subpath); cleanErr != nil { - klog.Errorf("Failed to clean subpath %q: %v", bindPathTarget, cleanErr) - } - } - }() - - kubeletPid := os.Getpid() - mountSource := fmt.Sprintf("/proc/%d/fd/%v", kubeletPid, fd) - - // Do the bind mount - options := []string{"bind"} - klog.V(5).Infof("bind mounting %q at %q", mountSource, bindPathTarget) - if err = mounter.Mount(mountSource, bindPathTarget, "" /*fstype*/, options); err != nil { - return "", fmt.Errorf("error mounting %s: %s", subpath.Path, err) - } - success = true - - klog.V(3).Infof("Bound SubPath %s into %s", subpath.Path, bindPathTarget) - return bindPathTarget, nil -} - -func (mounter *Mounter) CleanSubPaths(podDir string, volumeName string) error { - return doCleanSubPaths(mounter, podDir, volumeName) -} - -// This implementation is shared between Linux and NsEnterMounter -func doCleanSubPaths(mounter Interface, podDir string, volumeName string) error { - // scan /var/lib/kubelet/pods//volume-subpaths//* - subPathDir := filepath.Join(podDir, containerSubPathDirectoryName, volumeName) - klog.V(4).Infof("Cleaning up subpath mounts for %s", subPathDir) - - containerDirs, err := ioutil.ReadDir(subPathDir) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return fmt.Errorf("error reading %s: %s", subPathDir, err) - } - - for _, containerDir := range containerDirs { - if !containerDir.IsDir() { - klog.V(4).Infof("Container file is not a directory: %s", containerDir.Name()) - continue - } - klog.V(4).Infof("Cleaning up subpath mounts for container %s", containerDir.Name()) - - // scan /var/lib/kubelet/pods//volume-subpaths///* - fullContainerDirPath := filepath.Join(subPathDir, containerDir.Name()) - err = filepath.Walk(fullContainerDirPath, func(path string, info os.FileInfo, err error) error { - if path == fullContainerDirPath { - // Skip top level directory - return nil - } - - // pass through errors and let doCleanSubPath handle them - if err = doCleanSubPath(mounter, fullContainerDirPath, filepath.Base(path)); err != nil { - return err - } - return nil - }) - if err != nil { - return fmt.Errorf("error processing %s: %s", fullContainerDirPath, err) - } - - // Whole container has been processed, remove its directory. - if err := os.Remove(fullContainerDirPath); err != nil { - return fmt.Errorf("error deleting %s: %s", fullContainerDirPath, err) - } - klog.V(5).Infof("Removed %s", fullContainerDirPath) - } - // Whole pod volume subpaths have been cleaned up, remove its subpath directory. - if err := os.Remove(subPathDir); err != nil { - return fmt.Errorf("error deleting %s: %s", subPathDir, err) - } - klog.V(5).Infof("Removed %s", subPathDir) - - // Remove entire subpath directory if it's the last one - podSubPathDir := filepath.Join(podDir, containerSubPathDirectoryName) - if err := os.Remove(podSubPathDir); err != nil && !os.IsExist(err) { - return fmt.Errorf("error deleting %s: %s", podSubPathDir, err) - } - klog.V(5).Infof("Removed %s", podSubPathDir) - return nil -} - -// doCleanSubPath tears down the single subpath bind mount -func doCleanSubPath(mounter Interface, fullContainerDirPath, subPathIndex string) error { - // process /var/lib/kubelet/pods//volume-subpaths/// - klog.V(4).Infof("Cleaning up subpath mounts for subpath %v", subPathIndex) - fullSubPath := filepath.Join(fullContainerDirPath, subPathIndex) - - if err := CleanupMountPoint(fullSubPath, mounter, true); err != nil { - return fmt.Errorf("error cleaning subpath mount %s: %s", fullSubPath, err) - } - - klog.V(4).Infof("Successfully cleaned subpath directory %s", fullSubPath) - return nil -} - -// cleanSubPath will teardown the subpath bind mount and any remove any directories if empty -func cleanSubPath(mounter Interface, subpath Subpath) error { - containerDir := filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName) - - // Clean subdir bindmount - if err := doCleanSubPath(mounter, containerDir, strconv.Itoa(subpath.VolumeMountIndex)); err != nil && !os.IsNotExist(err) { - return err - } - - // Recusively remove directories if empty - if err := removeEmptyDirs(subpath.PodDir, containerDir); err != nil { - return err - } - - return nil -} - -// removeEmptyDirs works backwards from endDir to baseDir and removes each directory -// if it is empty. It stops once it encounters a directory that has content -func removeEmptyDirs(baseDir, endDir string) error { - if !PathWithinBase(endDir, baseDir) { - return fmt.Errorf("endDir %q is not within baseDir %q", endDir, baseDir) - } - - for curDir := endDir; curDir != baseDir; curDir = filepath.Dir(curDir) { - s, err := os.Stat(curDir) - if err != nil { - if os.IsNotExist(err) { - klog.V(5).Infof("curDir %q doesn't exist, skipping", curDir) - continue - } - return fmt.Errorf("error stat %q: %v", curDir, err) - } - if !s.IsDir() { - return fmt.Errorf("path %q not a directory", curDir) - } - - err = os.Remove(curDir) - if os.IsExist(err) { - klog.V(5).Infof("Directory %q not empty, not removing", curDir) - break - } else if err != nil { - return fmt.Errorf("error removing directory %q: %v", curDir, err) - } - klog.V(5).Infof("Removed directory %q", curDir) - } - return nil -} - -func (mounter *Mounter) SafeMakeDir(subdir string, base string, perm os.FileMode) error { - realBase, err := filepath.EvalSymlinks(base) - if err != nil { - return fmt.Errorf("error resolving symlinks in %s: %s", base, err) - } - - realFullPath := filepath.Join(realBase, subdir) - - return doSafeMakeDir(realFullPath, realBase, perm) -} - func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) { pathExists, pathErr := PathExists(pathname) if !pathExists { @@ -1053,237 +768,6 @@ func getMode(pathname string) (os.FileMode, error) { return info.Mode(), nil } -// This implementation is shared between Linux and NsEnterMounter. Both pathname -// and base must be either already resolved symlinks or thet will be resolved in -// kubelet's mount namespace (in case it runs containerized). -func doSafeMakeDir(pathname string, base string, perm os.FileMode) error { - klog.V(4).Infof("Creating directory %q within base %q", pathname, base) - - if !PathWithinBase(pathname, base) { - return fmt.Errorf("path %s is outside of allowed base %s", pathname, base) - } - - // Quick check if the directory already exists - s, err := os.Stat(pathname) - if err == nil { - // Path exists - if s.IsDir() { - // The directory already exists. It can be outside of the parent, - // but there is no race-proof check. - klog.V(4).Infof("Directory %s already exists", pathname) - return nil - } - return &os.PathError{Op: "mkdir", Path: pathname, Err: syscall.ENOTDIR} - } - - // Find all existing directories - existingPath, toCreate, err := findExistingPrefix(base, pathname) - if err != nil { - return fmt.Errorf("error opening directory %s: %s", pathname, err) - } - // Ensure the existing directory is inside allowed base - fullExistingPath, err := filepath.EvalSymlinks(existingPath) - if err != nil { - return fmt.Errorf("error opening directory %s: %s", existingPath, err) - } - if !PathWithinBase(fullExistingPath, base) { - return fmt.Errorf("path %s is outside of allowed base %s", fullExistingPath, err) - } - - klog.V(4).Infof("%q already exists, %q to create", fullExistingPath, filepath.Join(toCreate...)) - parentFD, err := doSafeOpen(fullExistingPath, base) - if err != nil { - return fmt.Errorf("cannot open directory %s: %s", existingPath, err) - } - childFD := -1 - defer func() { - if parentFD != -1 { - if err = syscall.Close(parentFD); err != nil { - klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", parentFD, pathname, err) - } - } - if childFD != -1 { - if err = syscall.Close(childFD); err != nil { - klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", childFD, pathname, err) - } - } - }() - - currentPath := fullExistingPath - // create the directories one by one, making sure nobody can change - // created directory into symlink. - for _, dir := range toCreate { - currentPath = filepath.Join(currentPath, dir) - klog.V(4).Infof("Creating %s", dir) - err = syscall.Mkdirat(parentFD, currentPath, uint32(perm)) - if err != nil { - return fmt.Errorf("cannot create directory %s: %s", currentPath, err) - } - // Dive into the created directory - childFD, err := syscall.Openat(parentFD, dir, nofollowFlags, 0) - if err != nil { - return fmt.Errorf("cannot open %s: %s", currentPath, err) - } - // We can be sure that childFD is safe to use. It could be changed - // by user after Mkdirat() and before Openat(), however: - // - it could not be changed to symlink - we use nofollowFlags - // - it could be changed to a file (or device, pipe, socket, ...) - // but either subsequent Mkdirat() fails or we mount this file - // to user's container. Security is no violated in both cases - // and user either gets error or the file that it can already access. - - if err = syscall.Close(parentFD); err != nil { - klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", parentFD, pathname, err) - } - parentFD = childFD - childFD = -1 - } - - // Everything was created. mkdirat(..., perm) above was affected by current - // umask and we must apply the right permissions to the last directory - // (that's the one that will be available to the container as subpath) - // so user can read/write it. This is the behavior of previous code. - // TODO: chmod all created directories, not just the last one. - // parentFD is the last created directory. - - // Translate perm (os.FileMode) to uint32 that fchmod() expects - kernelPerm := uint32(perm & os.ModePerm) - if perm&os.ModeSetgid > 0 { - kernelPerm |= syscall.S_ISGID - } - if perm&os.ModeSetuid > 0 { - kernelPerm |= syscall.S_ISUID - } - if perm&os.ModeSticky > 0 { - kernelPerm |= syscall.S_ISVTX - } - if err = syscall.Fchmod(parentFD, kernelPerm); err != nil { - return fmt.Errorf("chmod %q failed: %s", currentPath, err) - } - return nil -} - -// findExistingPrefix finds prefix of pathname that exists. In addition, it -// returns list of remaining directories that don't exist yet. -func findExistingPrefix(base, pathname string) (string, []string, error) { - rel, err := filepath.Rel(base, pathname) - if err != nil { - return base, nil, err - } - dirs := strings.Split(rel, string(filepath.Separator)) - - // Do OpenAt in a loop to find the first non-existing dir. Resolve symlinks. - // This should be faster than looping through all dirs and calling os.Stat() - // on each of them, as the symlinks are resolved only once with OpenAt(). - currentPath := base - fd, err := syscall.Open(currentPath, syscall.O_RDONLY, 0) - if err != nil { - return pathname, nil, fmt.Errorf("error opening %s: %s", currentPath, err) - } - defer func() { - if err = syscall.Close(fd); err != nil { - klog.V(4).Infof("Closing FD %v failed for findExistingPrefix(%v): %v", fd, pathname, err) - } - }() - for i, dir := range dirs { - // Using O_PATH here will prevent hangs in case user replaces directory with - // fifo - childFD, err := syscall.Openat(fd, dir, unix.O_PATH, 0) - if err != nil { - if os.IsNotExist(err) { - return currentPath, dirs[i:], nil - } - return base, nil, err - } - if err = syscall.Close(fd); err != nil { - klog.V(4).Infof("Closing FD %v failed for findExistingPrefix(%v): %v", fd, pathname, err) - } - fd = childFD - currentPath = filepath.Join(currentPath, dir) - } - return pathname, []string{}, nil -} - -// This implementation is shared between Linux and NsEnterMounter -// Open path and return its fd. -// Symlinks are disallowed (pathname must already resolve symlinks), -// and the path must be within the base directory. -func doSafeOpen(pathname string, base string) (int, error) { - pathname = filepath.Clean(pathname) - base = filepath.Clean(base) - - // Calculate segments to follow - subpath, err := filepath.Rel(base, pathname) - if err != nil { - return -1, err - } - segments := strings.Split(subpath, string(filepath.Separator)) - - // Assumption: base is the only directory that we have under control. - // Base dir is not allowed to be a symlink. - parentFD, err := syscall.Open(base, nofollowFlags, 0) - if err != nil { - return -1, fmt.Errorf("cannot open directory %s: %s", base, err) - } - defer func() { - if parentFD != -1 { - if err = syscall.Close(parentFD); err != nil { - klog.V(4).Infof("Closing FD %v failed for safeopen(%v): %v", parentFD, pathname, err) - } - } - }() - - childFD := -1 - defer func() { - if childFD != -1 { - if err = syscall.Close(childFD); err != nil { - klog.V(4).Infof("Closing FD %v failed for safeopen(%v): %v", childFD, pathname, err) - } - } - }() - - currentPath := base - - // Follow the segments one by one using openat() to make - // sure the user cannot change already existing directories into symlinks. - for _, seg := range segments { - currentPath = filepath.Join(currentPath, seg) - if !PathWithinBase(currentPath, base) { - return -1, fmt.Errorf("path %s is outside of allowed base %s", currentPath, base) - } - - klog.V(5).Infof("Opening path %s", currentPath) - childFD, err = syscall.Openat(parentFD, seg, openFDFlags, 0) - if err != nil { - return -1, fmt.Errorf("cannot open %s: %s", currentPath, err) - } - - var deviceStat unix.Stat_t - err := unix.Fstat(childFD, &deviceStat) - if err != nil { - return -1, fmt.Errorf("Error running fstat on %s with %v", currentPath, err) - } - fileFmt := deviceStat.Mode & syscall.S_IFMT - if fileFmt == syscall.S_IFLNK { - return -1, fmt.Errorf("Unexpected symlink found %s", currentPath) - } - - // Close parentFD - if err = syscall.Close(parentFD); err != nil { - return -1, fmt.Errorf("closing fd for %q failed: %v", filepath.Dir(currentPath), err) - } - // Set child to new parent - parentFD = childFD - childFD = -1 - } - - // We made it to the end, return this fd, don't close it - finalFD := parentFD - parentFD = -1 - - return finalFD, nil -} - // searchMountPoints finds all mount references to the source, returns a list of // mountpoints. // This function assumes source cannot be device. diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go index cd6f1a28f28..58f1acc7299 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go @@ -55,7 +55,7 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { } func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return IsNotMountPoint(mounter, dir) + return isNotMountPoint(mounter, dir) } func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { @@ -110,18 +110,6 @@ func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) { return "", unsupportedErr } -func (mounter *Mounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - return subPath.Path, nil, unsupportedErr -} - -func (mounter *Mounter) CleanSubPaths(podDir string, volumeName string) error { - return unsupportedErr -} - -func (mounter *Mounter) SafeMakeDir(pathname string, base string, perm os.FileMode) error { - return unsupportedErr -} - func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) { return nil, errors.New("not implemented") } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go index 0930330c161..4e2efbffb15 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go @@ -26,11 +26,11 @@ import ( "path/filepath" "strconv" "strings" - "syscall" "k8s.io/klog" + "k8s.io/utils/keymutex" - utilfile "k8s.io/kubernetes/pkg/util/file" + utilpath "k8s.io/utils/path" ) // Mounter provides the default implementation of mount.Interface @@ -49,6 +49,9 @@ func New(mounterPath string) Interface { } } +// acquire lock for smb mount +var getSMBMountMutex = keymutex.NewHashed(0) + // Mount : mounts source to target with given options. // currently only supports cifs(smb), bind mount(for disk) func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error { @@ -84,6 +87,10 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio return fmt.Errorf("only cifs mount is supported now, fstype: %q, mounting source (%q), target (%q), with options (%q)", fstype, source, target, options) } + // lock smb mount for the same source + getSMBMountMutex.LockKey(source) + defer getSMBMountMutex.UnlockKey(source) + if output, err := newSMBMapping(options[0], options[1], source); err != nil { if isSMBMappingExist(source) { klog.V(2).Infof("SMB Mapping(%s) already exists, now begin to remove and remount", source) @@ -168,7 +175,7 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { // IsNotMountPoint determines if a directory is a mountpoint. func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return IsNotMountPoint(mounter, dir) + return isNotMountPoint(mounter, dir) } // IsLikelyNotMountPoint determines if a directory is not a mountpoint. @@ -271,7 +278,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { // ExistsPath checks whether the path exists func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { - return utilfile.FileExists(pathname) + return utilpath.Exists(utilpath.CheckFollowSymlink, pathname) } // EvalHostSymlinks returns the path name after evaluating symlinks @@ -279,123 +286,6 @@ func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) { return filepath.EvalSymlinks(pathname) } -// check whether hostPath is within volume path -// this func will lock all intermediate subpath directories, need to close handle outside of this func after container started -func lockAndCheckSubPath(volumePath, hostPath string) ([]uintptr, error) { - if len(volumePath) == 0 || len(hostPath) == 0 { - return []uintptr{}, nil - } - - finalSubPath, err := filepath.EvalSymlinks(hostPath) - if err != nil { - return []uintptr{}, fmt.Errorf("cannot read link %s: %s", hostPath, err) - } - finalVolumePath, err := filepath.EvalSymlinks(volumePath) - if err != nil { - return []uintptr{}, fmt.Errorf("cannot read link %s: %s", volumePath, err) - } - - return lockAndCheckSubPathWithoutSymlink(finalVolumePath, finalSubPath) -} - -// lock all intermediate subPath directories and check they are all within volumePath -// volumePath & subPath should not contain any symlink, otherwise it will return error -func lockAndCheckSubPathWithoutSymlink(volumePath, subPath string) ([]uintptr, error) { - if len(volumePath) == 0 || len(subPath) == 0 { - return []uintptr{}, nil - } - - // get relative path to volumePath - relSubPath, err := filepath.Rel(volumePath, subPath) - if err != nil { - return []uintptr{}, fmt.Errorf("Rel(%s, %s) error: %v", volumePath, subPath, err) - } - if startsWithBackstep(relSubPath) { - return []uintptr{}, fmt.Errorf("SubPath %q not within volume path %q", subPath, volumePath) - } - - if relSubPath == "." { - // volumePath and subPath are equal - return []uintptr{}, nil - } - - fileHandles := []uintptr{} - var errorResult error - - currentFullPath := volumePath - dirs := strings.Split(relSubPath, string(os.PathSeparator)) - for _, dir := range dirs { - // lock intermediate subPath directory first - currentFullPath = filepath.Join(currentFullPath, dir) - handle, err := lockPath(currentFullPath) - if err != nil { - errorResult = fmt.Errorf("cannot lock path %s: %s", currentFullPath, err) - break - } - fileHandles = append(fileHandles, handle) - - // make sure intermediate subPath directory does not contain symlink any more - stat, err := os.Lstat(currentFullPath) - if err != nil { - errorResult = fmt.Errorf("Lstat(%q) error: %v", currentFullPath, err) - break - } - if stat.Mode()&os.ModeSymlink != 0 { - errorResult = fmt.Errorf("subpath %q is an unexpected symlink after EvalSymlinks", currentFullPath) - break - } - - if !PathWithinBase(currentFullPath, volumePath) { - errorResult = fmt.Errorf("SubPath %q not within volume path %q", currentFullPath, volumePath) - break - } - } - - return fileHandles, errorResult -} - -// unlockPath unlock directories -func unlockPath(fileHandles []uintptr) { - if fileHandles != nil { - for _, handle := range fileHandles { - syscall.CloseHandle(syscall.Handle(handle)) - } - } -} - -// lockPath locks a directory or symlink, return handle, exec "syscall.CloseHandle(handle)" to unlock the path -func lockPath(path string) (uintptr, error) { - if len(path) == 0 { - return uintptr(syscall.InvalidHandle), syscall.ERROR_FILE_NOT_FOUND - } - pathp, err := syscall.UTF16PtrFromString(path) - if err != nil { - return uintptr(syscall.InvalidHandle), err - } - access := uint32(syscall.GENERIC_READ) - sharemode := uint32(syscall.FILE_SHARE_READ) - createmode := uint32(syscall.OPEN_EXISTING) - flags := uint32(syscall.FILE_FLAG_BACKUP_SEMANTICS | syscall.FILE_FLAG_OPEN_REPARSE_POINT) - fd, err := syscall.CreateFile(pathp, access, sharemode, nil, createmode, flags, 0) - return uintptr(fd), err -} - -// Lock all directories in subPath and check they're not symlinks. -func (mounter *Mounter) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { - handles, err := lockAndCheckSubPath(subPath.VolumePath, subPath.Path) - - // Unlock the directories when the container starts - cleanupAction = func() { - unlockPath(handles) - } - return subPath.Path, cleanupAction, err -} - -// No bind-mounts for subpaths are necessary on Windows -func (mounter *Mounter) CleanSubPaths(podDir string, volumeName string) error { - return nil -} - func (mounter *SafeFormatAndMount) formatAndMount(source string, target string, fstype string, options []string) error { // Try to mount the disk klog.V(4).Infof("Attempting to formatAndMount disk: %s %s %s", fstype, source, target) @@ -496,14 +386,15 @@ func getAllParentLinks(path string) ([]string, error) { // GetMountRefs : empty implementation here since there is no place to query all mount points on Windows func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) { - pathExists, pathErr := PathExists(normalizeWindowsPath(pathname)) - // TODO(#75012): Need a Windows specific IsCorruptedMnt function that checks against whatever errno's - // Windows emits when we try to Stat a corrupted mount - // https://golang.org/pkg/syscall/?GOOS=windows&GOARCH=amd64#Errno + windowsPath := normalizeWindowsPath(pathname) + pathExists, pathErr := PathExists(windowsPath) if !pathExists { return []string{}, nil + } else if IsCorruptedMnt(pathErr) { + klog.Warningf("GetMountRefs found corrupted mount at %s, treating as unmounted path", windowsPath) + return []string{}, nil } else if pathErr != nil { - return nil, fmt.Errorf("error checking path %s: %v", normalizeWindowsPath(pathname), pathErr) + return nil, fmt.Errorf("error checking path %s: %v", windowsPath, pathErr) } return []string{pathname}, nil } @@ -526,126 +417,3 @@ func (mounter *Mounter) GetMode(pathname string) (os.FileMode, error) { } return info.Mode(), nil } - -// SafeMakeDir makes sure that the created directory does not escape given base directory mis-using symlinks. -func (mounter *Mounter) SafeMakeDir(subdir string, base string, perm os.FileMode) error { - realBase, err := filepath.EvalSymlinks(base) - if err != nil { - return fmt.Errorf("error resolving symlinks in %s: %s", base, err) - } - - realFullPath := filepath.Join(realBase, subdir) - return doSafeMakeDir(realFullPath, realBase, perm) -} - -func doSafeMakeDir(pathname string, base string, perm os.FileMode) error { - klog.V(4).Infof("Creating directory %q within base %q", pathname, base) - - if !PathWithinBase(pathname, base) { - return fmt.Errorf("path %s is outside of allowed base %s", pathname, base) - } - - // Quick check if the directory already exists - s, err := os.Stat(pathname) - if err == nil { - // Path exists - if s.IsDir() { - // The directory already exists. It can be outside of the parent, - // but there is no race-proof check. - klog.V(4).Infof("Directory %s already exists", pathname) - return nil - } - return &os.PathError{Op: "mkdir", Path: pathname, Err: syscall.ENOTDIR} - } - - // Find all existing directories - existingPath, toCreate, err := findExistingPrefix(base, pathname) - if err != nil { - return fmt.Errorf("error opening directory %s: %s", pathname, err) - } - if len(toCreate) == 0 { - return nil - } - - // Ensure the existing directory is inside allowed base - fullExistingPath, err := filepath.EvalSymlinks(existingPath) - if err != nil { - return fmt.Errorf("error opening existing directory %s: %s", existingPath, err) - } - fullBasePath, err := filepath.EvalSymlinks(base) - if err != nil { - return fmt.Errorf("cannot read link %s: %s", base, err) - } - if !PathWithinBase(fullExistingPath, fullBasePath) { - return fmt.Errorf("path %s is outside of allowed base %s", fullExistingPath, err) - } - - // lock all intermediate directories from fullBasePath to fullExistingPath (top to bottom) - fileHandles, err := lockAndCheckSubPathWithoutSymlink(fullBasePath, fullExistingPath) - defer unlockPath(fileHandles) - if err != nil { - return err - } - - klog.V(4).Infof("%q already exists, %q to create", fullExistingPath, filepath.Join(toCreate...)) - currentPath := fullExistingPath - // create the directories one by one, making sure nobody can change - // created directory into symlink by lock that directory immediately - for _, dir := range toCreate { - currentPath = filepath.Join(currentPath, dir) - klog.V(4).Infof("Creating %s", dir) - if err := os.Mkdir(currentPath, perm); err != nil { - return fmt.Errorf("cannot create directory %s: %s", currentPath, err) - } - handle, err := lockPath(currentPath) - if err != nil { - return fmt.Errorf("cannot lock path %s: %s", currentPath, err) - } - defer syscall.CloseHandle(syscall.Handle(handle)) - // make sure newly created directory does not contain symlink after lock - stat, err := os.Lstat(currentPath) - if err != nil { - return fmt.Errorf("Lstat(%q) error: %v", currentPath, err) - } - if stat.Mode()&os.ModeSymlink != 0 { - return fmt.Errorf("subpath %q is an unexpected symlink after Mkdir", currentPath) - } - } - - return nil -} - -// findExistingPrefix finds prefix of pathname that exists. In addition, it -// returns list of remaining directories that don't exist yet. -func findExistingPrefix(base, pathname string) (string, []string, error) { - rel, err := filepath.Rel(base, pathname) - if err != nil { - return base, nil, err - } - - if startsWithBackstep(rel) { - return base, nil, fmt.Errorf("pathname(%s) is not within base(%s)", pathname, base) - } - - if rel == "." { - // base and pathname are equal - return pathname, []string{}, nil - } - - dirs := strings.Split(rel, string(filepath.Separator)) - - parent := base - currentPath := base - for i, dir := range dirs { - parent = currentPath - currentPath = filepath.Join(parent, dir) - if _, err := os.Lstat(currentPath); err != nil { - if os.IsNotExist(err) { - return parent, dirs[i:], nil - } - return base, nil, err - } - } - - return pathname, []string{}, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/BUILD b/vendor/k8s.io/kubernetes/pkg/util/net/BUILD deleted file mode 100644 index 0d2a302e1e1..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/util/net/sets:all-srcs", - ], - tags = ["automanaged"], -) - -go_library( - name = "go_default_library", - srcs = ["net.go"], - importpath = "k8s.io/kubernetes/pkg/util/net", -) - -go_test( - name = "go_default_test", - srcs = ["net_test.go"], - embed = [":go_default_library"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/OWNERS b/vendor/k8s.io/kubernetes/pkg/util/net/OWNERS deleted file mode 100644 index 064cbc393ef..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/OWNERS +++ /dev/null @@ -1,4 +0,0 @@ -reviewers: - - sig-network-reviewers -approvers: - - sig-network-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/net.go b/vendor/k8s.io/kubernetes/pkg/util/net/net.go deleted file mode 100644 index f838864cf5b..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/net.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package net - -import ( - "net" -) - -// IsIPv6 returns if netIP is IPv6. -func IsIPv6(netIP net.IP) bool { - return netIP != nil && netIP.To4() == nil -} - -// IsIPv6String returns if ip is IPv6. -func IsIPv6String(ip string) bool { - netIP := net.ParseIP(ip) - return IsIPv6(netIP) -} - -// IsIPv6CIDR returns if cidr is IPv6. -// This assumes cidr is a valid CIDR. -func IsIPv6CIDR(cidr string) bool { - ip, _, _ := net.ParseCIDR(cidr) - return IsIPv6(ip) -} - -// FilterIncorrectIPVersion filters out the incorrect IP version case from a slice of IP strings. -func FilterIncorrectIPVersion(ipStrings []string, isIPv6Mode bool) ([]string, []string) { - return filterWithCondition(ipStrings, isIPv6Mode, IsIPv6String) -} - -// FilterIncorrectCIDRVersion filters out the incorrect IP version case from a slice of CIDR strings. -func FilterIncorrectCIDRVersion(ipStrings []string, isIPv6Mode bool) ([]string, []string) { - return filterWithCondition(ipStrings, isIPv6Mode, IsIPv6CIDR) -} - -func filterWithCondition(strs []string, expectedCondition bool, conditionFunc func(string) bool) ([]string, []string) { - var corrects, incorrects []string - for _, str := range strs { - if conditionFunc(str) != expectedCondition { - incorrects = append(incorrects, str) - } else { - corrects = append(corrects, str) - } - } - return corrects, incorrects -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/BUILD b/vendor/k8s.io/kubernetes/pkg/util/net/sets/BUILD deleted file mode 100644 index 6c342f122f3..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/sets/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "ipnet.go", - ], - importpath = "k8s.io/kubernetes/pkg/util/net/sets", -) - -go_test( - name = "go_default_test", - srcs = ["ipnet_test.go"], - embed = [":go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go b/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go deleted file mode 100644 index 8414f74ac57..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This package contains hand-coded set implementations that should be similar -// to the autogenerated ones in pkg/util/sets. -// We can't simply use net.IPNet as a map-key in Go (because it contains a -// []byte). -// We could use the same workaround we use here (a string representation as the -// key) to autogenerate sets. If we do that, or decide on an alternate -// approach, we should replace the implementations in this package with the -// autogenerated versions. -// It is expected that callers will alias this import as "netsets" i.e. import -// netsets "k8s.io/kubernetes/pkg/util/net/sets" - -package sets diff --git a/vendor/k8s.io/kubernetes/pkg/util/node/BUILD b/vendor/k8s.io/kubernetes/pkg/util/node/BUILD index 7e1696cefea..08692c148a7 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/node/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/node/BUILD @@ -11,7 +11,6 @@ go_library( srcs = ["node.go"], importpath = "k8s.io/kubernetes/pkg/util/node", deps = [ - "//pkg/kubelet/apis:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -27,7 +26,6 @@ go_test( srcs = ["node_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/kubelet/apis:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/util/node/node.go b/vendor/k8s.io/kubernetes/pkg/util/node/node.go index ff503855150..087a0bc82dd 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/node/node.go +++ b/vendor/k8s.io/kubernetes/pkg/util/node/node.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" clientset "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" ) const ( @@ -64,6 +63,17 @@ func GetHostname(hostnameOverride string) (string, error) { return strings.ToLower(hostName), nil } +// NoMatchError is a typed implementation of the error interface. It indicates a failure to get a matching Node. +type NoMatchError struct { + addresses []v1.NodeAddress +} + +// Error is the implementation of the conventional interface for +// representing an error condition, with the nil value representing no error. +func (e *NoMatchError) Error() string { + return fmt.Sprintf("no preferred addresses found; known addresses: %v", e.addresses) +} + // GetPreferredNodeAddress returns the address of the provided node, using the provided preference order. // If none of the preferred address types are found, an error is returned. func GetPreferredNodeAddress(node *v1.Node, preferredAddressTypes []v1.NodeAddressType) (string, error) { @@ -74,7 +84,7 @@ func GetPreferredNodeAddress(node *v1.Node, preferredAddressTypes []v1.NodeAddre } } } - return "", fmt.Errorf("no preferred addresses found; known addresses: %v", node.Status.Addresses) + return "", &NoMatchError{addresses: node.Status.Addresses} } // GetNodeHostIP returns the provided node's IP, based on the priority: @@ -119,8 +129,8 @@ func GetZoneKey(node *v1.Node) string { return "" } - region, _ := labels[kubeletapis.LabelZoneRegion] - failureDomain, _ := labels[kubeletapis.LabelZoneFailureDomain] + region, _ := labels[v1.LabelZoneRegion] + failureDomain, _ := labels[v1.LabelZoneFailureDomain] if region == "" && failureDomain == "" { return "" diff --git a/vendor/k8s.io/kubernetes/pkg/util/strings/BUILD b/vendor/k8s.io/kubernetes/pkg/util/strings/BUILD deleted file mode 100644 index a7cd124f7cc..00000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/strings/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "escape.go", - "line_delimiter.go", - "strings.go", - ], - importpath = "k8s.io/kubernetes/pkg/util/strings", -) - -go_test( - name = "go_default_test", - srcs = [ - "escape_test.go", - "line_delimiter_test.go", - "strings_test.go", - ], - embed = [":go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/util/verify-util-pkg.sh b/vendor/k8s.io/kubernetes/pkg/util/verify-util-pkg.sh index 5c1fbecc71d..92f4dedd1fb 100755 --- a/vendor/k8s.io/kubernetes/pkg/util/verify-util-pkg.sh +++ b/vendor/k8s.io/kubernetes/pkg/util/verify-util-pkg.sh @@ -21,7 +21,7 @@ set -o errexit set -o nounset set -o pipefail -BASH_DIR=$(dirname "${BASH_SOURCE}") +BASH_DIR=$(dirname "${BASH_SOURCE[0]}") find_go_files() { find . -maxdepth 1 -not \( \ @@ -34,8 +34,8 @@ find_go_files() { ret=0 pushd "${BASH_DIR}" > /dev/null - for path in `find_go_files`; do - file=$(basename $path) + for path in $(find_go_files); do + file=$(basename "$path") echo "Found pkg/util/${file}, but should be moved into util sub-pkgs." 1>&2 ret=1 done diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/BUILD b/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/BUILD index 62a98289a50..d9708f7eb4f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/BUILD @@ -12,6 +12,7 @@ go_library( deps = [ "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/prometheus.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/prometheus.go index 6f5cf38f09d..fa9b22f7793 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/prometheus.go +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/prometheus/prometheus.go @@ -18,6 +18,7 @@ package prometheus import ( "k8s.io/client-go/util/workqueue" + "k8s.io/klog" "github.com/prometheus/client_golang/prometheus" ) @@ -25,6 +26,18 @@ import ( // Package prometheus sets the workqueue DefaultMetricsFactory to produce // prometheus metrics. To use this package, you just have to import it. +// Metrics subsystem and keys used by the workqueue. +const ( + WorkQueueSubsystem = "workqueue" + DepthKey = "depth" + AddsKey = "adds_total" + QueueLatencyKey = "queue_duration_seconds" + WorkDurationKey = "work_duration_seconds" + UnfinishedWorkKey = "unfinished_work_seconds" + LongestRunningProcessorKey = "longest_running_processor_seconds" + RetriesKey = "retries_total" +) + func init() { workqueue.SetProvider(prometheusMetricsProvider{}) } @@ -33,9 +46,10 @@ type prometheusMetricsProvider struct{} func (prometheusMetricsProvider) NewDepthMetric(name string) workqueue.GaugeMetric { depth := prometheus.NewGauge(prometheus.GaugeOpts{ - Subsystem: name, - Name: "depth", - Help: "Current depth of workqueue: " + name, + Subsystem: WorkQueueSubsystem, + Name: DepthKey, + Help: "Current depth of workqueue", + ConstLabels: prometheus.Labels{"name": name}, }) prometheus.Register(depth) return depth @@ -43,29 +57,34 @@ func (prometheusMetricsProvider) NewDepthMetric(name string) workqueue.GaugeMetr func (prometheusMetricsProvider) NewAddsMetric(name string) workqueue.CounterMetric { adds := prometheus.NewCounter(prometheus.CounterOpts{ - Subsystem: name, - Name: "adds", - Help: "Total number of adds handled by workqueue: " + name, + Subsystem: WorkQueueSubsystem, + Name: AddsKey, + Help: "Total number of adds handled by workqueue", + ConstLabels: prometheus.Labels{"name": name}, }) prometheus.Register(adds) return adds } -func (prometheusMetricsProvider) NewLatencyMetric(name string) workqueue.SummaryMetric { - latency := prometheus.NewSummary(prometheus.SummaryOpts{ - Subsystem: name, - Name: "queue_latency", - Help: "How long an item stays in workqueue" + name + " before being requested.", +func (prometheusMetricsProvider) NewLatencyMetric(name string) workqueue.HistogramMetric { + latency := prometheus.NewHistogram(prometheus.HistogramOpts{ + Subsystem: WorkQueueSubsystem, + Name: QueueLatencyKey, + Help: "How long in seconds an item stays in workqueue before being requested.", + ConstLabels: prometheus.Labels{"name": name}, + Buckets: prometheus.ExponentialBuckets(10e-9, 10, 10), }) prometheus.Register(latency) return latency } -func (prometheusMetricsProvider) NewWorkDurationMetric(name string) workqueue.SummaryMetric { - workDuration := prometheus.NewSummary(prometheus.SummaryOpts{ - Subsystem: name, - Name: "work_duration", - Help: "How long processing an item from workqueue" + name + " takes.", +func (prometheusMetricsProvider) NewWorkDurationMetric(name string) workqueue.HistogramMetric { + workDuration := prometheus.NewHistogram(prometheus.HistogramOpts{ + Subsystem: WorkQueueSubsystem, + Name: WorkDurationKey, + Help: "How long in seconds processing an item from workqueue takes.", + ConstLabels: prometheus.Labels{"name": name}, + Buckets: prometheus.ExponentialBuckets(10e-9, 10, 10), }) prometheus.Register(workDuration) return workDuration @@ -73,23 +92,25 @@ func (prometheusMetricsProvider) NewWorkDurationMetric(name string) workqueue.Su func (prometheusMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric { unfinished := prometheus.NewGauge(prometheus.GaugeOpts{ - Subsystem: name, - Name: "unfinished_work_seconds", - Help: "How many seconds of work " + name + " has done that " + + Subsystem: WorkQueueSubsystem, + Name: UnfinishedWorkKey, + Help: "How many seconds of work has done that " + "is in progress and hasn't been observed by work_duration. Large " + "values indicate stuck threads. One can deduce the number of stuck " + "threads by observing the rate at which this increases.", + ConstLabels: prometheus.Labels{"name": name}, }) prometheus.Register(unfinished) return unfinished } -func (prometheusMetricsProvider) NewLongestRunningProcessorMicrosecondsMetric(name string) workqueue.SettableGaugeMetric { +func (prometheusMetricsProvider) NewLongestRunningProcessorSecondsMetric(name string) workqueue.SettableGaugeMetric { unfinished := prometheus.NewGauge(prometheus.GaugeOpts{ - Subsystem: name, - Name: "longest_running_processor_microseconds", - Help: "How many microseconds has the longest running " + - "processor for " + name + " been running.", + Subsystem: WorkQueueSubsystem, + Name: LongestRunningProcessorKey, + Help: "How many seconds has the longest running " + + "processor for workqueue been running.", + ConstLabels: prometheus.Labels{"name": name}, }) prometheus.Register(unfinished) return unfinished @@ -97,10 +118,100 @@ func (prometheusMetricsProvider) NewLongestRunningProcessorMicrosecondsMetric(na func (prometheusMetricsProvider) NewRetriesMetric(name string) workqueue.CounterMetric { retries := prometheus.NewCounter(prometheus.CounterOpts{ - Subsystem: name, - Name: "retries", - Help: "Total number of retries handled by workqueue: " + name, + Subsystem: WorkQueueSubsystem, + Name: RetriesKey, + Help: "Total number of retries handled by workqueue", + ConstLabels: prometheus.Labels{"name": name}, }) prometheus.Register(retries) return retries } + +// TODO(danielqsj): Remove the following metrics, they are deprecated +func (prometheusMetricsProvider) NewDeprecatedDepthMetric(name string) workqueue.GaugeMetric { + depth := prometheus.NewGauge(prometheus.GaugeOpts{ + Subsystem: name, + Name: "depth", + Help: "(Deprecated) Current depth of workqueue: " + name, + }) + if err := prometheus.Register(depth); err != nil { + klog.Errorf("failed to register depth metric %v: %v", name, err) + } + return depth +} + +func (prometheusMetricsProvider) NewDeprecatedAddsMetric(name string) workqueue.CounterMetric { + adds := prometheus.NewCounter(prometheus.CounterOpts{ + Subsystem: name, + Name: "adds", + Help: "(Deprecated) Total number of adds handled by workqueue: " + name, + }) + if err := prometheus.Register(adds); err != nil { + klog.Errorf("failed to register adds metric %v: %v", name, err) + } + return adds +} + +func (prometheusMetricsProvider) NewDeprecatedLatencyMetric(name string) workqueue.SummaryMetric { + latency := prometheus.NewSummary(prometheus.SummaryOpts{ + Subsystem: name, + Name: "queue_latency", + Help: "(Deprecated) How long an item stays in workqueue" + name + " before being requested.", + }) + if err := prometheus.Register(latency); err != nil { + klog.Errorf("failed to register latency metric %v: %v", name, err) + } + return latency +} + +func (prometheusMetricsProvider) NewDeprecatedWorkDurationMetric(name string) workqueue.SummaryMetric { + workDuration := prometheus.NewSummary(prometheus.SummaryOpts{ + Subsystem: name, + Name: "work_duration", + Help: "(Deprecated) How long processing an item from workqueue" + name + " takes.", + }) + if err := prometheus.Register(workDuration); err != nil { + klog.Errorf("failed to register work_duration metric %v: %v", name, err) + } + return workDuration +} + +func (prometheusMetricsProvider) NewDeprecatedUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric { + unfinished := prometheus.NewGauge(prometheus.GaugeOpts{ + Subsystem: name, + Name: "unfinished_work_seconds", + Help: "(Deprecated) How many seconds of work " + name + " has done that " + + "is in progress and hasn't been observed by work_duration. Large " + + "values indicate stuck threads. One can deduce the number of stuck " + + "threads by observing the rate at which this increases.", + }) + if err := prometheus.Register(unfinished); err != nil { + klog.Errorf("failed to register unfinished_work_seconds metric %v: %v", name, err) + } + return unfinished +} + +func (prometheusMetricsProvider) NewDeprecatedLongestRunningProcessorMicrosecondsMetric(name string) workqueue.SettableGaugeMetric { + unfinished := prometheus.NewGauge(prometheus.GaugeOpts{ + Subsystem: name, + Name: "longest_running_processor_microseconds", + Help: "(Deprecated) How many microseconds has the longest running " + + "processor for " + name + " been running.", + }) + if err := prometheus.Register(unfinished); err != nil { + klog.Errorf("failed to register longest_running_processor_microseconds metric %v: %v", name, err) + } + return unfinished +} + +func (prometheusMetricsProvider) NewDeprecatedRetriesMetric(name string) workqueue.CounterMetric { + retries := prometheus.NewCounter(prometheus.CounterOpts{ + Subsystem: name, + Name: "retries", + Help: "(Deprecated) Total number of retries handled by workqueue: " + name, + }) + if err := prometheus.Register(retries); err != nil { + klog.Errorf("failed to register retries metric %v: %v", name, err) + } + return retries +} diff --git a/vendor/k8s.io/kubernetes/pkg/version/base.go b/vendor/k8s.io/kubernetes/pkg/version/base.go index 714eb40d8f8..0a83f947a44 100644 --- a/vendor/k8s.io/kubernetes/pkg/version/base.go +++ b/vendor/k8s.io/kubernetes/pkg/version/base.go @@ -2,9 +2,9 @@ package version var ( gitMajor = "1" - gitMinor = "13" - gitVersion = "v1.13.5-k3s.1" - gitCommit = "256ea73aeb2627eb9b510f6c22881af8f967dd0c" - gitTreeState = "clean" - buildDate = "2019-03-27T18:49+00:00Z" + gitMinor = "14" + gitVersion = "v1.14.1-k3s.1" + gitCommit = "5f445def7ecfc428e253013b1b4d0dc893a5359a" + gitTreeState = "clean" + buildDate = "2019-04-09T03:40+00:00Z" ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/BUILD index ba5d04ba078..dc4a16cbd61 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/util/mount:go_default_library", "//pkg/volume/util/fs:go_default_library", "//pkg/volume/util/recyclerclient:go_default_library", + "//pkg/volume/util/subpath:go_default_library", "//staging/src/k8s.io/api/authentication/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -29,9 +30,9 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/storage/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/OWNERS index fb4e6f00e39..c655baa605c 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/OWNERS @@ -1,11 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali - thockin - jsafrane -- matchstick - rootfs - gnufied - childsb +- msau42 reviewers: - saad-ali - jsafrane @@ -15,5 +17,6 @@ reviewers: - gnufied - verult - davidz627 +- humblec labels: - sig/storage diff --git a/vendor/k8s.io/kubernetes/pkg/volume/configmap/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/configmap/BUILD index 1047a1b090f..a8329fa8b07 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/configmap/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/configmap/BUILD @@ -15,7 +15,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/configmap", deps = [ "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -23,6 +22,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/configmap/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/configmap/OWNERS index baaff6ff460..93c0d5e773d 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/configmap/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/configmap/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/configmap/configmap.go b/vendor/k8s.io/kubernetes/pkg/volume/configmap/configmap.go index 823ce53d4b3..60196dfee51 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/configmap/configmap.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/configmap/configmap.go @@ -25,9 +25,9 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" - "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + utilstrings "k8s.io/utils/strings" ) // ProbeVolumePlugins is the entry point for plugin detection in a package. @@ -47,6 +47,10 @@ type configMapPlugin struct { var _ volume.VolumePlugin = &configMapPlugin{} +func getPath(uid types.UID, volName string, host volume.VolumeHost) string { + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(configMapPluginName), volName) +} + func (plugin *configMapPlugin) Init(host volume.VolumeHost) error { plugin.host = host plugin.getConfigMap = host.GetConfigMapFunc() @@ -73,6 +77,10 @@ func (plugin *configMapPlugin) CanSupport(spec *volume.Spec) bool { return spec.Volume != nil && spec.Volume.ConfigMap != nil } +func (plugin *configMapPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *configMapPlugin) RequiresRemount() bool { return true } @@ -92,7 +100,7 @@ func (plugin *configMapPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts v pod.UID, plugin, plugin.host.GetMounter(plugin.GetPluginName()), - volume.MetricsNil{}, + volume.NewCachedMetrics(volume.NewMetricsDu(getPath(pod.UID, spec.Name(), plugin.host))), }, source: *spec.Volume.ConfigMap, pod: *pod, @@ -108,7 +116,7 @@ func (plugin *configMapPlugin) NewUnmounter(volName string, podUID types.UID) (v podUID, plugin, plugin.host.GetMounter(plugin.GetPluginName()), - volume.MetricsNil{}, + volume.NewCachedMetrics(volume.NewMetricsDu(getPath(podUID, volName, plugin.host))), }, }, nil } @@ -128,13 +136,13 @@ type configMapVolume struct { podUID types.UID plugin *configMapPlugin mounter mount.Interface - volume.MetricsNil + volume.MetricsProvider } var _ volume.Volume = &configMapVolume{} func (sv *configMapVolume) GetPath() string { - return sv.plugin.host.GetPodVolumeDir(sv.podUID, strings.EscapeQualifiedNameForDisk(configMapPluginName), sv.volName) + return sv.plugin.host.GetPodVolumeDir(sv.podUID, utilstrings.EscapeQualifiedName(configMapPluginName), sv.volName) } // configMapVolumeMounter handles retrieving secrets from the API server diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD index 3450ab30702..71e07796af6 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD @@ -6,35 +6,40 @@ go_library( "csi_attacher.go", "csi_block.go", "csi_client.go", + "csi_drivers_store.go", "csi_mounter.go", "csi_plugin.go", "csi_util.go", + "expander.go", ], importpath = "k8s.io/kubernetes/pkg/volume/csi", visibility = ["//visibility:public"], deps = [ "//pkg/features:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/csi/csiv0:go_default_library", "//pkg/volume/csi/nodeinfomanager:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/informers/storage/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/listers/csi/v1alpha1:go_default_library", + "//staging/src/k8s.io/client-go/listers/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library", "//vendor/github.com/container-storage-interface/spec/lib/go/csi:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) @@ -44,9 +49,10 @@ go_test( "csi_attacher_test.go", "csi_block_test.go", "csi_client_test.go", + "csi_drivers_store_test.go", "csi_mounter_test.go", "csi_plugin_test.go", - "main_test.go", + "expander_test.go", ], embed = [":go_default_library"], deps = [ @@ -56,6 +62,7 @@ go_test( "//pkg/volume/testing:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -70,8 +77,6 @@ go_test( "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/util/testing:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/fake:go_default_library", "//vendor/github.com/container-storage-interface/spec/lib/go/csi:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/csi/OWNERS index 7d0605ba3dd..668ad7b2b14 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - jsafrane - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go index d13a7310120..d4b84b4e659 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go @@ -30,7 +30,7 @@ import ( "k8s.io/klog" "k8s.io/api/core/v1" - storage "k8s.io/api/storage/v1beta1" + storage "k8s.io/api/storage/v1" apierrs "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -63,25 +63,15 @@ func (c *csiAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string return "", errors.New("missing spec") } - csiSource, err := getCSISourceFromSpec(spec) + pvSrc, err := getPVSourceFromSpec(spec) if err != nil { - klog.Error(log("attacher.Attach failed to get CSI persistent source: %v", err)) + klog.Error(log("attacher.Attach failed to get CSIPersistentVolumeSource: %v", err)) return "", err } - skip, err := c.plugin.skipAttach(csiSource.Driver) - if err != nil { - klog.Error(log("attacher.Attach failed to find if driver is attachable: %v", err)) - return "", err - } - if skip { - klog.V(4).Infof(log("skipping attach for driver %s", csiSource.Driver)) - return "", nil - } - node := string(nodeName) pvName := spec.PersistentVolume.GetName() - attachID := getAttachmentName(csiSource.VolumeHandle, csiSource.Driver, node) + attachID := getAttachmentName(pvSrc.VolumeHandle, pvSrc.Driver, node) attachment := &storage.VolumeAttachment{ ObjectMeta: meta.ObjectMeta{ @@ -89,14 +79,14 @@ func (c *csiAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string }, Spec: storage.VolumeAttachmentSpec{ NodeName: node, - Attacher: csiSource.Driver, + Attacher: pvSrc.Driver, Source: storage.VolumeAttachmentSource{ PersistentVolumeName: &pvName, }, }, } - _, err = c.k8s.StorageV1beta1().VolumeAttachments().Create(attachment) + _, err = c.k8s.StorageV1().VolumeAttachments().Create(attachment) alreadyExist := false if err != nil { if !apierrs.IsAlreadyExists(err) { @@ -107,12 +97,12 @@ func (c *csiAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string } if alreadyExist { - klog.V(4).Info(log("attachment [%v] for volume [%v] already exists (will not be recreated)", attachID, csiSource.VolumeHandle)) + klog.V(4).Info(log("attachment [%v] for volume [%v] already exists (will not be recreated)", attachID, pvSrc.VolumeHandle)) } else { - klog.V(4).Info(log("attachment [%v] for volume [%v] created successfully", attachID, csiSource.VolumeHandle)) + klog.V(4).Info(log("attachment [%v] for volume [%v] created successfully", attachID, pvSrc.VolumeHandle)) } - if _, err := c.waitForVolumeAttachment(csiSource.VolumeHandle, attachID, csiTimeout); err != nil { + if _, err := c.waitForVolumeAttachment(pvSrc.VolumeHandle, attachID, csiTimeout); err != nil { return "", err } @@ -123,7 +113,7 @@ func (c *csiAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string } func (c *csiAttacher) WaitForAttach(spec *volume.Spec, _ string, pod *v1.Pod, timeout time.Duration) (string, error) { - source, err := getCSISourceFromSpec(spec) + source, err := getPVSourceFromSpec(spec) if err != nil { klog.Error(log("attacher.WaitForAttach failed to extract CSI volume source: %v", err)) return "", err @@ -131,16 +121,6 @@ func (c *csiAttacher) WaitForAttach(spec *volume.Spec, _ string, pod *v1.Pod, ti attachID := getAttachmentName(source.VolumeHandle, source.Driver, string(c.plugin.host.GetNodeName())) - skip, err := c.plugin.skipAttach(source.Driver) - if err != nil { - klog.Error(log("attacher.Attach failed to find if driver is attachable: %v", err)) - return "", err - } - if skip { - klog.V(4).Infof(log("Driver is not attachable, skip waiting for attach")) - return "", nil - } - return c.waitForVolumeAttachment(source.VolumeHandle, attachID, timeout) } @@ -155,7 +135,7 @@ func (c *csiAttacher) waitForVolumeAttachment(volumeHandle, attachID string, tim func (c *csiAttacher) waitForVolumeAttachmentInternal(volumeHandle, attachID string, timer *time.Timer, timeout time.Duration) (string, error) { klog.V(4).Info(log("probing VolumeAttachment [id=%v]", attachID)) - attach, err := c.k8s.StorageV1beta1().VolumeAttachments().Get(attachID, meta.GetOptions{}) + attach, err := c.k8s.StorageV1().VolumeAttachments().Get(attachID, meta.GetOptions{}) if err != nil { klog.Error(log("attacher.WaitForAttach failed for volume [%s] (will continue to try): %v", volumeHandle, err)) return "", fmt.Errorf("volume %v has GET error for volume attachment %v: %v", volumeHandle, attachID, err) @@ -168,7 +148,7 @@ func (c *csiAttacher) waitForVolumeAttachmentInternal(volumeHandle, attachID str return attachID, nil } - watcher, err := c.k8s.StorageV1beta1().VolumeAttachments().Watch(meta.SingleObject(meta.ObjectMeta{Name: attachID, ResourceVersion: attach.ResourceVersion})) + watcher, err := c.k8s.StorageV1().VolumeAttachments().Watch(meta.SingleObject(meta.ObjectMeta{Name: attachID, ResourceVersion: attach.ResourceVersion})) if err != nil { return "", fmt.Errorf("watch error:%v for volume %v", err, volumeHandle) } @@ -240,14 +220,18 @@ func (c *csiAttacher) VolumesAreAttached(specs []*volume.Spec, nodeName types.No klog.Error(log("attacher.VolumesAreAttached missing volume.Spec")) return nil, errors.New("missing spec") } - source, err := getCSISourceFromSpec(spec) + pvSrc, err := getPVSourceFromSpec(spec) if err != nil { - klog.Error(log("attacher.VolumesAreAttached failed: %v", err)) + attached[spec] = false + klog.Error(log("attacher.VolumesAreAttached failed to get CSIPersistentVolumeSource: %v", err)) continue } - skip, err := c.plugin.skipAttach(source.Driver) + driverName := pvSrc.Driver + volumeHandle := pvSrc.VolumeHandle + + skip, err := c.plugin.skipAttach(driverName) if err != nil { - klog.Error(log("Failed to check CSIDriver for %s: %s", source.Driver, err)) + klog.Error(log("Failed to check CSIDriver for %s: %s", driverName, err)) } else { if skip { // This volume is not attachable, pretend it's attached @@ -256,9 +240,9 @@ func (c *csiAttacher) VolumesAreAttached(specs []*volume.Spec, nodeName types.No } } - attachID := getAttachmentName(source.VolumeHandle, source.Driver, string(nodeName)) + attachID := getAttachmentName(volumeHandle, driverName, string(nodeName)) klog.V(4).Info(log("probing attachment status for VolumeAttachment %v", attachID)) - attach, err := c.k8s.StorageV1beta1().VolumeAttachments().Get(attachID, meta.GetOptions{}) + attach, err := c.k8s.StorageV1().VolumeAttachments().Get(attachID, meta.GetOptions{}) if err != nil { attached[spec] = false klog.Error(log("attacher.VolumesAreAttached failed for attach.ID=%v: %v", attachID, err)) @@ -305,9 +289,9 @@ func (c *csiAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMo if spec == nil { return fmt.Errorf("attacher.MountDevice failed, spec is nil") } - csiSource, err := getCSISourceFromSpec(spec) + csiSource, err := getPVSourceFromSpec(spec) if err != nil { - klog.Error(log("attacher.MountDevice failed to get CSI persistent source: %v", err)) + klog.Error(log("attacher.MountDevice failed to get CSIPersistentVolumeSource: %v", err)) return err } @@ -405,21 +389,39 @@ var _ volume.Detacher = &csiAttacher{} var _ volume.DeviceUnmounter = &csiAttacher{} func (c *csiAttacher) Detach(volumeName string, nodeName types.NodeName) error { - // volumeName in format driverNamevolumeHandle generated by plugin.GetVolumeName() + var attachID string + var volID string + if volumeName == "" { klog.Error(log("detacher.Detach missing value for parameter volumeName")) return errors.New("missing expected parameter volumeName") } - parts := strings.Split(volumeName, volNameSep) - if len(parts) != 2 { - klog.Error(log("detacher.Detach insufficient info encoded in volumeName")) - return errors.New("volumeName missing expected data") + + if isAttachmentName(volumeName) { + // Detach can also be called with the attach ID as the `volumeName`. This codepath is + // hit only when we have migrated an in-tree volume to CSI and the A/D Controller is shut + // down, the pod with the volume is deleted, and the A/D Controller starts back up in that + // order. + attachID = volumeName + + // Vol ID should be the volume handle, except that is not available here. + // It is only used in log messages so in the event that this happens log messages will be + // printing out the attachID instead of the volume handle. + volID = volumeName + } else { + // volumeName in format driverNamevolumeHandle generated by plugin.GetVolumeName() + parts := strings.Split(volumeName, volNameSep) + if len(parts) != 2 { + klog.Error(log("detacher.Detach insufficient info encoded in volumeName")) + return errors.New("volumeName missing expected data") + } + + driverName := parts[0] + volID = parts[1] + attachID = getAttachmentName(volID, driverName, string(nodeName)) } - driverName := parts[0] - volID := parts[1] - attachID := getAttachmentName(volID, driverName, string(nodeName)) - if err := c.k8s.StorageV1beta1().VolumeAttachments().Delete(attachID, nil); err != nil { + if err := c.k8s.StorageV1().VolumeAttachments().Delete(attachID, nil); err != nil { if apierrs.IsNotFound(err) { // object deleted or never existed, done klog.V(4).Info(log("VolumeAttachment object [%v] for volume [%v] not found, object deleted", attachID, volID)) @@ -445,7 +447,7 @@ func (c *csiAttacher) waitForVolumeDetachment(volumeHandle, attachID string) err func (c *csiAttacher) waitForVolumeDetachmentInternal(volumeHandle, attachID string, timer *time.Timer, timeout time.Duration) error { klog.V(4).Info(log("probing VolumeAttachment [id=%v]", attachID)) - attach, err := c.k8s.StorageV1beta1().VolumeAttachments().Get(attachID, meta.GetOptions{}) + attach, err := c.k8s.StorageV1().VolumeAttachments().Get(attachID, meta.GetOptions{}) if err != nil { if apierrs.IsNotFound(err) { //object deleted or never existed, done @@ -462,7 +464,7 @@ func (c *csiAttacher) waitForVolumeDetachmentInternal(volumeHandle, attachID str return errors.New(detachErr.Message) } - watcher, err := c.k8s.StorageV1beta1().VolumeAttachments().Watch(meta.SingleObject(meta.ObjectMeta{Name: attachID, ResourceVersion: attach.ResourceVersion})) + watcher, err := c.k8s.StorageV1().VolumeAttachments().Watch(meta.SingleObject(meta.ObjectMeta{Name: attachID, ResourceVersion: attach.ResourceVersion})) if err != nil { return fmt.Errorf("watch error:%v for volume %v", err, volumeHandle) } @@ -570,12 +572,22 @@ func (c *csiAttacher) UnmountDevice(deviceMountPath string) error { return nil } -// getAttachmentName returns csi- +// getAttachmentName returns csi- func getAttachmentName(volName, csiDriverName, nodeName string) string { result := sha256.Sum256([]byte(fmt.Sprintf("%s%s%s", volName, csiDriverName, nodeName))) return fmt.Sprintf("csi-%x", result) } +// isAttachmentName returns true if the string given is of the form of an Attach ID +// and false otherwise +func isAttachmentName(unknownString string) bool { + // 68 == "csi-" + len(sha256hash) + if strings.HasPrefix(unknownString, "csi-") && len(unknownString) == 68 { + return true + } + return false +} + func makeDeviceMountPath(plugin *csiPlugin, spec *volume.Spec) (string, error) { if spec == nil { return "", fmt.Errorf("makeDeviceMountPath failed, spec is nil") diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go index 30e3e3ad749..a1daf21cfef 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go @@ -26,13 +26,14 @@ import ( "k8s.io/klog" - v1 "k8s.io/api/core/v1" - storage "k8s.io/api/storage/v1beta1" + "k8s.io/api/core/v1" + storage "k8s.io/api/storage/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes" - kstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" ioutil "k8s.io/kubernetes/pkg/volume/util" + utilstrings "k8s.io/utils/strings" ) type csiBlockMapper struct { @@ -61,21 +62,21 @@ func (m *csiBlockMapper) GetGlobalMapPath(spec *volume.Spec) (string, error) { // getStagingPath returns a staging path for a directory (on the node) that should be used on NodeStageVolume/NodeUnstageVolume // Example: plugins/kubernetes.io/csi/volumeDevices/staging/{pvname} func (m *csiBlockMapper) getStagingPath() string { - sanitizedSpecVolID := kstrings.EscapeQualifiedNameForDisk(m.specName) - return path.Join(m.plugin.host.GetVolumeDevicePluginDir(csiPluginName), "staging", sanitizedSpecVolID) + sanitizedSpecVolID := utilstrings.EscapeQualifiedName(m.specName) + return path.Join(m.plugin.host.GetVolumeDevicePluginDir(CSIPluginName), "staging", sanitizedSpecVolID) } // getPublishPath returns a publish path for a file (on the node) that should be used on NodePublishVolume/NodeUnpublishVolume // Example: plugins/kubernetes.io/csi/volumeDevices/publish/{pvname} func (m *csiBlockMapper) getPublishPath() string { - sanitizedSpecVolID := kstrings.EscapeQualifiedNameForDisk(m.specName) - return path.Join(m.plugin.host.GetVolumeDevicePluginDir(csiPluginName), "publish", sanitizedSpecVolID) + sanitizedSpecVolID := utilstrings.EscapeQualifiedName(m.specName) + return path.Join(m.plugin.host.GetVolumeDevicePluginDir(CSIPluginName), "publish", sanitizedSpecVolID) } // GetPodDeviceMapPath returns pod's device file which will be mapped to a volume // returns: pods/{podUid}/volumeDevices/kubernetes.io~csi, {pvname} func (m *csiBlockMapper) GetPodDeviceMapPath() (string, string) { - path := m.plugin.host.GetPodVolumeDeviceDir(m.podUID, kstrings.EscapeQualifiedNameForDisk(csiPluginName)) + path := m.plugin.host.GetPodVolumeDeviceDir(m.podUID, utilstrings.EscapeQualifiedName(CSIPluginName)) specName := m.specName klog.V(4).Infof(log("blockMapper.GetPodDeviceMapPath [path=%s; name=%s]", path, specName)) return path, specName @@ -206,7 +207,65 @@ func (m *csiBlockMapper) publishVolumeForBlock( // SetUpDevice ensures the device is attached returns path where the device is located. func (m *csiBlockMapper) SetUpDevice() (string, error) { - return "", errors.New("CSIBlockVolume feature not enabled") + if !m.plugin.blockEnabled { + return "", errors.New("CSIBlockVolume feature not enabled") + } + klog.V(4).Infof(log("blockMapper.SetUpDevice called")) + + // Get csiSource from spec + if m.spec == nil { + klog.Error(log("blockMapper.SetUpDevice spec is nil")) + return "", fmt.Errorf("spec is nil") + } + + csiSource, err := getCSISourceFromSpec(m.spec) + if err != nil { + klog.Error(log("blockMapper.SetUpDevice failed to get CSI persistent source: %v", err)) + return "", err + } + + // Search for attachment by VolumeAttachment.Spec.Source.PersistentVolumeName + nodeName := string(m.plugin.host.GetNodeName()) + attachID := getAttachmentName(csiSource.VolumeHandle, csiSource.Driver, nodeName) + attachment, err := m.k8s.StorageV1().VolumeAttachments().Get(attachID, meta.GetOptions{}) + if err != nil { + klog.Error(log("blockMapper.SetupDevice failed to get volume attachment [id=%v]: %v", attachID, err)) + return "", err + } + + if attachment == nil { + klog.Error(log("blockMapper.SetupDevice unable to find VolumeAttachment [id=%s]", attachID)) + return "", errors.New("no existing VolumeAttachment found") + } + + //TODO (vladimirvivien) implement better AccessModes mapping between k8s and CSI + accessMode := v1.ReadWriteOnce + if m.spec.PersistentVolume.Spec.AccessModes != nil { + accessMode = m.spec.PersistentVolume.Spec.AccessModes[0] + } + + ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) + defer cancel() + + csiClient, err := m.csiClientGetter.Get() + if err != nil { + klog.Error(log("blockMapper.SetUpDevice failed to get CSI client: %v", err)) + return "", err + } + + // Call NodeStageVolume + stagingPath, err := m.stageVolumeForBlock(ctx, csiClient, accessMode, csiSource, attachment) + if err != nil { + return "", err + } + + // Call NodePublishVolume + publishPath, err := m.publishVolumeForBlock(ctx, csiClient, accessMode, csiSource, attachment, stagingPath) + if err != nil { + return "", err + } + + return publishPath, nil } func (m *csiBlockMapper) MapDevice(devicePath, globalMapPath, volumeMapPath, volumeMapName string, podUID types.UID) error { @@ -264,5 +323,50 @@ func (m *csiBlockMapper) unstageVolumeForBlock(ctx context.Context, csi csiClien // TearDownDevice removes traces of the SetUpDevice. func (m *csiBlockMapper) TearDownDevice(globalMapPath, devicePath string) error { - return errors.New("CSIBlockVolume feature not enabled") + if !m.plugin.blockEnabled { + return errors.New("CSIBlockVolume feature not enabled") + } + + klog.V(4).Infof(log("unmapper.TearDownDevice(globalMapPath=%s; devicePath=%s)", globalMapPath, devicePath)) + + ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) + defer cancel() + + csiClient, err := m.csiClientGetter.Get() + if err != nil { + klog.Error(log("blockMapper.TearDownDevice failed to get CSI client: %v", err)) + return err + } + + // Call NodeUnpublishVolume + publishPath := m.getPublishPath() + if _, err := os.Stat(publishPath); err != nil { + if os.IsNotExist(err) { + klog.V(4).Infof(log("blockMapper.TearDownDevice publishPath(%s) has already been deleted, skip calling NodeUnpublishVolume", publishPath)) + } else { + return err + } + } else { + err := m.unpublishVolumeForBlock(ctx, csiClient, publishPath) + if err != nil { + return err + } + } + + // Call NodeUnstageVolume + stagingPath := m.getStagingPath() + if _, err := os.Stat(stagingPath); err != nil { + if os.IsNotExist(err) { + klog.V(4).Infof(log("blockMapper.TearDownDevice stagingPath(%s) has already been deleted, skip calling NodeUnstageVolume", stagingPath)) + } else { + return err + } + } else { + err := m.unstageVolumeForBlock(ctx, csiClient, stagingPath) + if err != nil { + return err + } + } + + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go index 630278c59fe..272c5eee78e 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go @@ -22,13 +22,16 @@ import ( "fmt" "io" "net" + "strings" "sync" "time" csipbv1 "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/grpc" api "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" utilversion "k8s.io/apimachinery/pkg/util/version" + "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" @@ -54,6 +57,7 @@ type csiClient interface { fsType string, mountOptions []string, ) error + NodeExpandVolume(ctx context.Context, volumeid, volumePath string, newSize resource.Quantity) (resource.Quantity, error) NodeUnpublishVolume( ctx context.Context, volID string, @@ -70,6 +74,7 @@ type csiClient interface { ) error NodeUnstageVolume(ctx context.Context, volID, stagingTargetPath string) error NodeSupportsStageUnstage(ctx context.Context) (bool, error) + NodeSupportsNodeExpand(ctx context.Context) (bool, error) } // Strongly typed address @@ -100,6 +105,12 @@ type nodeV0ClientCreator func(addr csiAddr) ( err error, ) +const ( + initialDuration = 1 * time.Second + factor = 2.0 + steps = 5 +) + // newV1NodeClient creates a new NodeClient with the internally used gRPC // connection set up. It also returns a closer which must to be called to close // the gRPC connection when the NodeClient is not used anymore. @@ -140,19 +151,12 @@ func newCsiDriverClient(driverName csiDriverName) (*csiDriverClient, error) { addr := fmt.Sprintf(csiAddrTemplate, driverName) requiresV0Client := true if utilfeature.DefaultFeatureGate.Enabled(features.KubeletPluginsWatcher) { - var existingDriver csiDriver - driverExists := false - func() { - csiDrivers.RLock() - defer csiDrivers.RUnlock() - existingDriver, driverExists = csiDrivers.driversMap[string(driverName)] - }() - + existingDriver, driverExists := csiDrivers.Get(string(driverName)) if !driverExists { return nil, fmt.Errorf("driver name %s not found in the list of registered CSI drivers", driverName) } - addr = existingDriver.driverEndpoint + addr = existingDriver.endpoint requiresV0Client = versionRequiresV0Client(existingDriver.highestSupportedVersion) } @@ -178,13 +182,26 @@ func (c *csiDriverClient) NodeGetInfo(ctx context.Context) ( accessibleTopology map[string]string, err error) { klog.V(4).Info(log("calling NodeGetInfo rpc")) - if c.nodeV1ClientCreator != nil { - return c.nodeGetInfoV1(ctx) - } else if c.nodeV0ClientCreator != nil { - return c.nodeGetInfoV0(ctx) - } - err = fmt.Errorf("failed to call NodeGetInfo. Both nodeV1ClientCreator and nodeV0ClientCreator are nil") + // TODO retries should happen at a lower layer (issue #73371) + backoff := wait.Backoff{Duration: initialDuration, Factor: factor, Steps: steps} + err = wait.ExponentialBackoff(backoff, func() (bool, error) { + var getNodeInfoError error + if c.nodeV1ClientCreator != nil { + nodeID, maxVolumePerNode, accessibleTopology, getNodeInfoError = c.nodeGetInfoV1(ctx) + } else if c.nodeV0ClientCreator != nil { + nodeID, maxVolumePerNode, accessibleTopology, getNodeInfoError = c.nodeGetInfoV0(ctx) + } + if nodeID != "" { + return true, nil + } + // kubelet plugin registration service not implemented is a terminal error, no need to retry + if strings.Contains(getNodeInfoError.Error(), "no handler registered for plugin type") { + return false, getNodeInfoError + } + // Continue with exponential backoff + return false, nil + }) return nodeID, maxVolumePerNode, accessibleTopology, err } @@ -291,6 +308,41 @@ func (c *csiDriverClient) NodePublishVolume( } +func (c *csiDriverClient) NodeExpandVolume(ctx context.Context, volumeID, volumePath string, newSize resource.Quantity) (resource.Quantity, error) { + if c.nodeV1ClientCreator == nil { + return newSize, fmt.Errorf("version of CSI driver does not support volume expansion") + } + + if volumeID == "" { + return newSize, errors.New("missing volume id") + } + if volumePath == "" { + return newSize, errors.New("missing volume path") + } + + if newSize.Value() < 0 { + return newSize, errors.New("size can not be less than 0") + } + + nodeClient, closer, err := c.nodeV1ClientCreator(c.addr) + if err != nil { + return newSize, err + } + defer closer.Close() + + req := &csipbv1.NodeExpandVolumeRequest{ + VolumeId: volumeID, + VolumePath: volumePath, + CapacityRange: &csipbv1.CapacityRange{RequiredBytes: newSize.Value()}, + } + resp, err := nodeClient.NodeExpandVolume(ctx, req) + if err != nil { + return newSize, err + } + updatedQuantity := resource.NewQuantity(resp.CapacityBytes, resource.BinarySI) + return *updatedQuantity, nil +} + func (c *csiDriverClient) nodePublishVolumeV1( ctx context.Context, volID string, @@ -611,6 +663,41 @@ func (c *csiDriverClient) nodeUnstageVolumeV0(ctx context.Context, volID, stagin return err } +func (c *csiDriverClient) NodeSupportsNodeExpand(ctx context.Context) (bool, error) { + klog.V(4).Info(log("calling NodeGetCapabilities rpc to determine if Node has EXPAND_VOLUME capability")) + + if c.nodeV1ClientCreator != nil { + nodeClient, closer, err := c.nodeV1ClientCreator(c.addr) + if err != nil { + return false, err + } + defer closer.Close() + + req := &csipbv1.NodeGetCapabilitiesRequest{} + resp, err := nodeClient.NodeGetCapabilities(ctx, req) + if err != nil { + return false, err + } + + capabilities := resp.GetCapabilities() + + nodeExpandSet := false + if capabilities == nil { + return false, nil + } + for _, capability := range capabilities { + if capability.GetRpc().GetType() == csipbv1.NodeServiceCapability_RPC_EXPAND_VOLUME { + nodeExpandSet = true + } + } + return nodeExpandSet, nil + } else if c.nodeV0ClientCreator != nil { + return false, nil + } + return false, fmt.Errorf("failed to call NodeSupportsNodeExpand. Both nodeV1ClientCreator and nodeV0ClientCreator are nil") + +} + func (c *csiDriverClient) NodeSupportsStageUnstage(ctx context.Context) (bool, error) { klog.V(4).Info(log("calling NodeGetCapabilities rpc to determine if NodeSupportsStageUnstage")) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_drivers_store.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_drivers_store.go new file mode 100644 index 00000000000..70bfd1b383d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_drivers_store.go @@ -0,0 +1,79 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package csi + +import ( + "sync" + + utilversion "k8s.io/apimachinery/pkg/util/version" +) + +// Driver is a description of a CSI Driver, defined by an enpoint and the +// highest CSI version supported +type Driver struct { + endpoint string + highestSupportedVersion *utilversion.Version +} + +// DriversStore holds a list of CSI Drivers +type DriversStore struct { + store + sync.RWMutex +} + +type store map[string]Driver + +// Get lets you retrieve a CSI Driver by name. +// This method is protected by a mutex. +func (s *DriversStore) Get(driverName string) (Driver, bool) { + s.RLock() + defer s.RUnlock() + + driver, ok := s.store[driverName] + return driver, ok +} + +// Set lets you save a CSI Driver to the list and give it a specific name. +// This method is protected by a mutex. +func (s *DriversStore) Set(driverName string, driver Driver) { + s.Lock() + defer s.Unlock() + + if s.store == nil { + s.store = store{} + } + + s.store[driverName] = driver +} + +// Delete lets you delete a CSI Driver by name. +// This method is protected by a mutex. +func (s *DriversStore) Delete(driverName string) { + s.Lock() + defer s.Unlock() + + delete(s.store, driverName) +} + +// Clear deletes all entries in the store. +// This methiod is protected by a mutex. +func (s *DriversStore) Clear() { + s.Lock() + defer s.Unlock() + + s.store = store{} +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go index 6fb20b3ec4d..5d70b564735 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go @@ -18,6 +18,8 @@ package csi import ( "context" + "crypto/sha256" + "errors" "fmt" "os" "path" @@ -25,11 +27,13 @@ import ( "k8s.io/klog" api "k8s.io/api/core/v1" + apierrs "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/kubernetes" - kstrings "k8s.io/kubernetes/pkg/util/strings" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/volume" - "k8s.io/kubernetes/pkg/volume/util" + utilstrings "k8s.io/utils/strings" ) //TODO (vladimirvivien) move this in a central loc later @@ -39,15 +43,16 @@ var ( volHandle, driverName, nodeName, - attachmentID string + attachmentID, + driverMode string }{ "specVolID", "volumeHandle", "driverName", "nodeName", "attachmentID", + "driverMode", } - currentPodInfoMountVersion = "v1" ) type csiMountMgr struct { @@ -55,6 +60,7 @@ type csiMountMgr struct { k8s kubernetes.Interface plugin *csiPlugin driverName csiDriverName + driverMode driverMode volumeID string specVolumeID string readOnly bool @@ -76,8 +82,8 @@ func (c *csiMountMgr) GetPath() string { } func getTargetPath(uid types.UID, specVolumeID string, host volume.VolumeHost) string { - specVolID := kstrings.EscapeQualifiedNameForDisk(specVolumeID) - return host.GetPodVolumeDir(uid, kstrings.EscapeQualifiedNameForDisk(csiPluginName), specVolID) + specVolID := utilstrings.EscapeQualifiedName(specVolumeID) + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(CSIPluginName), specVolID) } // volume.Mounter methods @@ -105,12 +111,6 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { return nil } - csiSource, err := getCSISourceFromSpec(c.spec) - if err != nil { - klog.Error(log("mounter.SetupAt failed to get CSI persistent source: %v", err)) - return err - } - csi, err := c.csiClientGetter.Get() if err != nil { klog.Error(log("mounter.SetUpAt failed to get CSI client: %v", err)) @@ -119,39 +119,77 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) defer cancel() - // Check for STAGE_UNSTAGE_VOLUME set and populate deviceMountPath if so - deviceMountPath := "" - stageUnstageSet, err := csi.NodeSupportsStageUnstage(ctx) + volSrc, pvSrc, err := getSourceFromSpec(c.spec) if err != nil { - klog.Error(log("mounter.SetUpAt failed to check for STAGE_UNSTAGE_VOLUME capabilty: %v", err)) + klog.Error(log("mounter.SetupAt failed to get CSI persistent source: %v", err)) return err } - if stageUnstageSet { - deviceMountPath, err = makeDeviceMountPath(c.plugin, c.spec) + driverName := c.driverName + volumeHandle := c.volumeID + readOnly := c.readOnly + accessMode := api.ReadWriteOnce + + var ( + fsType string + volAttribs map[string]string + nodePublishSecrets map[string]string + publishContext map[string]string + mountOptions []string + deviceMountPath string + secretRef *api.SecretReference + ) + + switch { + case volSrc != nil: + return fmt.Errorf("CSIInlineVolume feature required") + case pvSrc != nil: + if c.driverMode != persistentDriverMode { + return fmt.Errorf("unexpected driver mode: %s", c.driverMode) + } + + fsType = pvSrc.FSType + + volAttribs = pvSrc.VolumeAttributes + + if pvSrc.NodePublishSecretRef != nil { + secretRef = pvSrc.NodePublishSecretRef + } + + //TODO (vladimirvivien) implement better AccessModes mapping between k8s and CSI + if c.spec.PersistentVolume.Spec.AccessModes != nil { + accessMode = c.spec.PersistentVolume.Spec.AccessModes[0] + } + + mountOptions = c.spec.PersistentVolume.Spec.MountOptions + + // Check for STAGE_UNSTAGE_VOLUME set and populate deviceMountPath if so + stageUnstageSet, err := csi.NodeSupportsStageUnstage(ctx) if err != nil { - klog.Error(log("mounter.SetUpAt failed to make device mount path: %v", err)) + klog.Error(log("mounter.SetUpAt failed to check for STAGE_UNSTAGE_VOLUME capabilty: %v", err)) return err } - } - // search for attachment by VolumeAttachment.Spec.Source.PersistentVolumeName - if c.publishContext == nil { - nodeName := string(c.plugin.host.GetNodeName()) - c.publishContext, err = c.plugin.getPublishContext(c.k8s, c.volumeID, string(c.driverName), nodeName) - if err != nil { - return err - } - } - attribs := csiSource.VolumeAttributes - - nodePublishSecrets := map[string]string{} - if csiSource.NodePublishSecretRef != nil { - nodePublishSecrets, err = getCredentialsFromSecret(c.k8s, csiSource.NodePublishSecretRef) - if err != nil { - return fmt.Errorf("fetching NodePublishSecretRef %s/%s failed: %v", - csiSource.NodePublishSecretRef.Namespace, csiSource.NodePublishSecretRef.Name, err) + if stageUnstageSet { + deviceMountPath, err = makeDeviceMountPath(c.plugin, c.spec) + if err != nil { + klog.Error(log("mounter.SetUpAt failed to make device mount path: %v", err)) + return err + } } + + // search for attachment by VolumeAttachment.Spec.Source.PersistentVolumeName + if c.publishContext == nil { + nodeName := string(c.plugin.host.GetNodeName()) + c.publishContext, err = c.plugin.getPublishContext(c.k8s, volumeHandle, string(driverName), nodeName) + if err != nil { + return err + } + publishContext = c.publishContext + } + + default: + return fmt.Errorf("volume source not found in volume.Spec") } // create target_dir before call to NodePublish @@ -161,10 +199,14 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { } klog.V(4).Info(log("created target path successfully [%s]", dir)) - //TODO (vladimirvivien) implement better AccessModes mapping between k8s and CSI - accessMode := api.ReadWriteOnce - if c.spec.PersistentVolume.Spec.AccessModes != nil { - accessMode = c.spec.PersistentVolume.Spec.AccessModes[0] + nodePublishSecrets = map[string]string{} + if secretRef != nil { + nodePublishSecrets, err = getCredentialsFromSecret(c.k8s, secretRef) + if err != nil { + return fmt.Errorf("fetching NodePublishSecretRef %s/%s failed: %v", + secretRef.Namespace, secretRef.Name, err) + } + } // Inject pod information into volume_attributes @@ -174,28 +216,27 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { return err } if podAttrs != nil { - if attribs == nil { - attribs = podAttrs + if volAttribs == nil { + volAttribs = podAttrs } else { for k, v := range podAttrs { - attribs[k] = v + volAttribs[k] = v } } } - fsType := csiSource.FSType err = csi.NodePublishVolume( ctx, - c.volumeID, - c.readOnly, + volumeHandle, + readOnly, deviceMountPath, dir, accessMode, - c.publishContext, - attribs, + publishContext, + volAttribs, nodePublishSecrets, fsType, - c.spec.PersistentVolume.Spec.MountOptions, + mountOptions, ) if err != nil { @@ -232,7 +273,36 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { } func (c *csiMountMgr) podAttributes() (map[string]string, error) { - return nil, nil + if !utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + return nil, nil + } + if c.plugin.csiDriverLister == nil { + return nil, errors.New("CSIDriver lister does not exist") + } + + csiDriver, err := c.plugin.csiDriverLister.Get(string(c.driverName)) + if err != nil { + if apierrs.IsNotFound(err) { + klog.V(4).Infof(log("CSIDriver %q not found, not adding pod information", c.driverName)) + return nil, nil + } + return nil, err + } + + // if PodInfoOnMount is not set or false we do not set pod attributes + if csiDriver.Spec.PodInfoOnMount == nil || *csiDriver.Spec.PodInfoOnMount == false { + klog.V(4).Infof(log("CSIDriver %q does not require pod information", c.driverName)) + return nil, nil + } + + attrs := map[string]string{ + "csi.storage.k8s.io/pod.name": c.pod.Name, + "csi.storage.k8s.io/pod.namespace": c.pod.Namespace, + "csi.storage.k8s.io/pod.uid": string(c.pod.UID), + "csi.storage.k8s.io/serviceAccount.name": c.pod.Spec.ServiceAccountName, + } + klog.V(4).Infof(log("CSIDriver %q requires pod information", c.driverName)) + return attrs, nil } func (c *csiMountMgr) GetAttributes() volume.Attributes { @@ -260,20 +330,6 @@ func (c *csiMountMgr) TearDown() error { func (c *csiMountMgr) TearDownAt(dir string) error { klog.V(4).Infof(log("Unmounter.TearDown(%s)", dir)) - // is dir even mounted ? - // TODO (vladimirvivien) this check may not work for an emptyDir or local storage - // see https://github.com/kubernetes/kubernetes/pull/56836#discussion_r155834524 - mounted, err := isDirMounted(c.plugin, dir) - if err != nil { - klog.Error(log("unmounter.Teardown failed while checking mount status for dir [%s]: %v", dir, err)) - return err - } - - if !mounted { - klog.V(4).Info(log("unmounter.Teardown skipping unmount, dir not mounted [%s]", dir)) - return nil - } - volID := c.volumeID csi, err := c.csiClientGetter.Get() if err != nil { @@ -294,7 +350,7 @@ func (c *csiMountMgr) TearDownAt(dir string) error { klog.Error(log("mounter.TearDownAt failed to clean mount dir [%s]: %v", dir, err)) return err } - klog.V(4).Infof(log("mounte.TearDownAt successfully unmounted dir [%s]", dir)) + klog.V(4).Infof(log("mounter.TearDownAt successfully unmounted dir [%s]", dir)) return nil } @@ -350,21 +406,12 @@ func isDirMounted(plug *csiPlugin, dir string) (bool, error) { // removeMountDir cleans the mount dir when dir is not mounted and removed the volume data file in dir func removeMountDir(plug *csiPlugin, mountPath string) error { klog.V(4).Info(log("removing mount path [%s]", mountPath)) - if pathExists, pathErr := util.PathExists(mountPath); pathErr != nil { - klog.Error(log("failed while checking mount path stat [%s]", pathErr)) - return pathErr - } else if !pathExists { - klog.Warning(log("skipping mount dir removal, path does not exist [%v]", mountPath)) - return nil - } - mounter := plug.host.GetMounter(plug.GetPluginName()) - notMnt, err := mounter.IsLikelyNotMountPoint(mountPath) + mnt, err := isDirMounted(plug, mountPath) if err != nil { - klog.Error(log("mount dir removal failed [%s]: %v", mountPath, err)) return err } - if notMnt { + if !mnt { klog.V(4).Info(log("dir not mounted, deleting it [%s]", mountPath)) if err := os.Remove(mountPath); err != nil && !os.IsNotExist(err) { klog.Error(log("failed to remove dir [%s]: %v", mountPath, err)) @@ -387,3 +434,9 @@ func removeMountDir(plug *csiPlugin, mountPath string) error { } return nil } + +// makeVolumeHandle returns csi- +func makeVolumeHandle(podUID, volSourceSpecName string) string { + result := sha256.Sum256([]byte(fmt.Sprintf("%s%s", podUID, volSourceSpecName))) + return fmt.Sprintf("csi-%x", result) +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go index 0643a7a2f54..10e58a17f1e 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go @@ -23,7 +23,6 @@ import ( "path" "sort" "strings" - "sync" "time" "context" @@ -31,16 +30,24 @@ import ( "k8s.io/klog" api "k8s.io/api/core/v1" + apierrs "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" utilversion "k8s.io/apimachinery/pkg/util/version" + "k8s.io/apimachinery/pkg/util/wait" + utilfeature "k8s.io/apiserver/pkg/util/feature" + csiapiinformer "k8s.io/client-go/informers" + csiinformer "k8s.io/client-go/informers/storage/v1beta1" clientset "k8s.io/client-go/kubernetes" + csilister "k8s.io/client-go/listers/storage/v1beta1" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager" ) const ( - csiPluginName = "kubernetes.io/csi" + // CSIPluginName is the name of the in-tree CSI Plugin + CSIPluginName = "kubernetes.io/csi" // TODO (vladimirvivien) implement a more dynamic way to discover // the unix domain socket path for each installed csi driver. @@ -51,16 +58,31 @@ const ( volNameSep = "^" volDataFileName = "vol_data.json" fsTypeBlockName = "block" + + // TODO: increase to something useful + csiResyncPeriod = time.Minute ) +var deprecatedSocketDirVersions = []string{"0.1.0", "0.2.0", "0.3.0", "0.4.0"} + type csiPlugin struct { - host volume.VolumeHost + host volume.VolumeHost + blockEnabled bool + csiDriverLister csilister.CSIDriverLister + csiDriverInformer csiinformer.CSIDriverInformer } +//TODO (vladimirvivien) add this type to storage api +type driverMode string + +const persistentDriverMode driverMode = "persistent" +const ephemeralDriverMode driverMode = "ephemeral" + // ProbeVolumePlugins returns implemented plugins func ProbeVolumePlugins() []volume.VolumePlugin { p := &csiPlugin{ - host: nil, + host: nil, + blockEnabled: utilfeature.DefaultFeatureGate.Enabled(features.CSIBlockVolume), } return []volume.VolumePlugin{p} } @@ -68,17 +90,6 @@ func ProbeVolumePlugins() []volume.VolumePlugin { // volume.VolumePlugin methods var _ volume.VolumePlugin = &csiPlugin{} -type csiDriver struct { - driverName string - driverEndpoint string - highestSupportedVersion *utilversion.Version -} - -type csiDriversStore struct { - driversMap map[string]csiDriver - sync.RWMutex -} - // RegistrationHandler is the handler which is fed to the pluginwatcher API. type RegistrationHandler struct { } @@ -86,7 +97,7 @@ type RegistrationHandler struct { // TODO (verult) consider using a struct instead of global variables // csiDrivers map keep track of all registered CSI drivers on the node and their // corresponding sockets -var csiDrivers csiDriversStore +var csiDrivers = &DriversStore{} var nim nodeinfomanager.Interface @@ -125,17 +136,12 @@ func (h *RegistrationHandler) RegisterPlugin(pluginName string, endpoint string, return err } - func() { - // Storing endpoint of newly registered CSI driver into the map, where CSI driver name will be the key - // all other CSI components will be able to get the actual socket of CSI drivers by its name. - - // It's not necessary to lock the entire RegistrationCallback() function because only the CSI - // client depends on this driver map, and the CSI client does not depend on node information - // updated in the rest of the function. - csiDrivers.Lock() - defer csiDrivers.Unlock() - csiDrivers.driversMap[pluginName] = csiDriver{driverName: pluginName, driverEndpoint: endpoint, highestSupportedVersion: highestSupportedVersion} - }() + // Storing endpoint of newly registered CSI driver into the map, where CSI driver name will be the key + // all other CSI components will be able to get the actual socket of CSI drivers by its name. + csiDrivers.Set(pluginName, Driver{ + endpoint: endpoint, + highestSupportedVersion: highestSupportedVersion, + }) // Get node info from the driver. csi, err := newCsiDriverClient(csiDriverName(pluginName)) @@ -143,26 +149,21 @@ func (h *RegistrationHandler) RegisterPlugin(pluginName string, endpoint string, return err } - // TODO (verult) retry with exponential backoff, possibly added in csi client library. ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) defer cancel() driverNodeID, maxVolumePerNode, accessibleTopology, err := csi.NodeGetInfo(ctx) if err != nil { - klog.Error(log("registrationHandler.RegisterPlugin failed at CSI.NodeGetInfo: %v", err)) if unregErr := unregisterDriver(pluginName); unregErr != nil { - klog.Error(log("registrationHandler.RegisterPlugin failed to unregister plugin due to previous: %v", unregErr)) - return unregErr + klog.Error(log("registrationHandler.RegisterPlugin failed to unregister plugin due to previous error: %v", unregErr)) } return err } err = nim.InstallCSIDriver(pluginName, driverNodeID, maxVolumePerNode, accessibleTopology) if err != nil { - klog.Error(log("registrationHandler.RegisterPlugin failed at AddNodeInfo: %v", err)) if unregErr := unregisterDriver(pluginName); unregErr != nil { klog.Error(log("registrationHandler.RegisterPlugin failed to unregister plugin due to previous error: %v", unregErr)) - return unregErr } return err } @@ -185,15 +186,7 @@ func (h *RegistrationHandler) validateVersions(callerName, pluginName string, en return nil, err } - // Check for existing drivers with the same name - var existingDriver csiDriver - driverExists := false - func() { - csiDrivers.RLock() - defer csiDrivers.RUnlock() - existingDriver, driverExists = csiDrivers.driversMap[pluginName] - }() - + existingDriver, driverExists := csiDrivers.Get(pluginName) if driverExists { if !existingDriver.highestSupportedVersion.LessThan(newDriverHighestVersion) { err := fmt.Errorf("%s for CSI driver %q failed. Another driver with the same name is already registered with a higher supported version: %q", callerName, pluginName, existingDriver.highestSupportedVersion) @@ -217,24 +210,33 @@ func (h *RegistrationHandler) DeRegisterPlugin(pluginName string) { func (p *csiPlugin) Init(host volume.VolumeHost) error { p.host = host - // Initializing csiDrivers map and label management channels - csiDrivers = csiDriversStore{driversMap: map[string]csiDriver{}} - nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host) + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + csiClient := host.GetKubeClient() + if csiClient == nil { + klog.Warning(log("kubeclient not set, assuming standalone kubelet")) + } else { + // Start informer for CSIDrivers. + factory := csiapiinformer.NewSharedInformerFactory(csiClient, csiResyncPeriod) + p.csiDriverInformer = factory.Storage().V1beta1().CSIDrivers() + p.csiDriverLister = p.csiDriverInformer.Lister() + go factory.Start(wait.NeverStop) + } + } - // TODO(#70514) Init CSINodeInfo object if the CRD exists and create Driver - // objects for migrated drivers. + // Initializing the label management channels + nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, nil) return nil } func (p *csiPlugin) GetPluginName() string { - return csiPluginName + return CSIPluginName } // GetvolumeName returns a concatenated string of CSIVolumeSource.DriverCSIVolumeSource.VolumeHandle // That string value is used in Detach() to extract driver name and volumeName. func (p *csiPlugin) GetVolumeName(spec *volume.Spec) (string, error) { - csi, err := getCSISourceFromSpec(spec) + csi, err := getPVSourceFromSpec(spec) if err != nil { klog.Error(log("plugin.GetVolumeName failed to extract volume source from spec: %v", err)) return "", err @@ -247,9 +249,17 @@ func (p *csiPlugin) GetVolumeName(spec *volume.Spec) (string, error) { func (p *csiPlugin) CanSupport(spec *volume.Spec) bool { // TODO (vladimirvivien) CanSupport should also take into account // the availability/registration of specified Driver in the volume source + if spec == nil { + return false + } + return spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CSI != nil } +func (p *csiPlugin) IsMigratedToCSI() bool { + return false +} + func (p *csiPlugin) RequiresRemount() bool { return false } @@ -258,11 +268,28 @@ func (p *csiPlugin) NewMounter( spec *volume.Spec, pod *api.Pod, _ volume.VolumeOptions) (volume.Mounter, error) { - pvSource, err := getCSISourceFromSpec(spec) + + _, pvSrc, err := getSourceFromSpec(spec) if err != nil { return nil, err } - readOnly, err := getReadOnlyFromSpec(spec) + + var ( + driverName string + volumeHandle string + readOnly bool + ) + + switch { + case pvSrc != nil: + driverName = pvSrc.Driver + volumeHandle = pvSrc.VolumeHandle + readOnly = spec.ReadOnly + default: + return nil, fmt.Errorf("volume source not found in volume.Spec") + } + + driverMode, err := p.getDriverMode(spec) if err != nil { return nil, err } @@ -279,12 +306,13 @@ func (p *csiPlugin) NewMounter( spec: spec, pod: pod, podUID: pod.UID, - driverName: csiDriverName(pvSource.Driver), - volumeID: pvSource.VolumeHandle, + driverName: csiDriverName(driverName), + driverMode: driverMode, + volumeID: volumeHandle, specVolumeID: spec.Name(), readOnly: readOnly, } - mounter.csiClientGetter.driverName = csiDriverName(pvSource.Driver) + mounter.csiClientGetter.driverName = csiDriverName(driverName) // Save volume info in pod dir dir := mounter.GetPath() @@ -298,15 +326,17 @@ func (p *csiPlugin) NewMounter( // persist volume info data for teardown node := string(p.host.GetNodeName()) - attachID := getAttachmentName(pvSource.VolumeHandle, pvSource.Driver, node) volData := map[string]string{ - volDataKey.specVolID: spec.Name(), - volDataKey.volHandle: pvSource.VolumeHandle, - volDataKey.driverName: pvSource.Driver, - volDataKey.nodeName: node, - volDataKey.attachmentID: attachID, + volDataKey.specVolID: spec.Name(), + volDataKey.volHandle: volumeHandle, + volDataKey.driverName: driverName, + volDataKey.nodeName: node, + volDataKey.driverMode: string(driverMode), } + attachID := getAttachmentName(volumeHandle, driverName, node) + volData[volDataKey.attachmentID] = attachID + if err := saveVolumeData(dataDir, volDataFileName, volData); err != nil { klog.Error(log("failed to save volume info data: %v", err)) if err := os.RemoveAll(dataDir); err != nil { @@ -356,23 +386,43 @@ func (p *csiPlugin) ConstructVolumeSpec(volumeName, mountPath string) (*volume.S klog.V(4).Info(log("plugin.ConstructVolumeSpec extracted [%#v]", volData)) + var spec *volume.Spec + spec = p.constructPVSourceSpec(volData[volDataKey.specVolID], volData[volDataKey.driverName], volData[volDataKey.volHandle]) + + return spec, nil +} + +// constructVolSourceSpec constructs volume.Spec with CSIVolumeSource +func (p *csiPlugin) constructVolSourceSpec(volSpecName, driverName string) *volume.Spec { + vol := &api.Volume{ + Name: volSpecName, + VolumeSource: api.VolumeSource{ + CSI: &api.CSIVolumeSource{ + Driver: driverName, + }, + }, + } + return volume.NewSpecFromVolume(vol) +} + +//constructPVSourceSpec constructs volume.Spec with CSIPersistentVolumeSource +func (p *csiPlugin) constructPVSourceSpec(volSpecName, driverName, volumeHandle string) *volume.Spec { fsMode := api.PersistentVolumeFilesystem pv := &api.PersistentVolume{ ObjectMeta: meta.ObjectMeta{ - Name: volData[volDataKey.specVolID], + Name: volSpecName, }, Spec: api.PersistentVolumeSpec{ PersistentVolumeSource: api.PersistentVolumeSource{ CSI: &api.CSIPersistentVolumeSource{ - Driver: volData[volDataKey.driverName], - VolumeHandle: volData[volDataKey.volHandle], + Driver: driverName, + VolumeHandle: volumeHandle, }, }, VolumeMode: &fsMode, }, } - - return volume.NewSpecFromPersistentVolume(pv, false), nil + return volume.NewSpecFromPersistentVolume(pv, false) } func (p *csiPlugin) SupportsMountOption() bool { @@ -425,6 +475,36 @@ func (p *csiPlugin) NewDetacher() (volume.Detacher, error) { }, nil } +// TODO change CanAttach to return error to propagate ability +// to support Attachment or an error - see https://github.com/kubernetes/kubernetes/issues/74810 +func (p *csiPlugin) CanAttach(spec *volume.Spec) bool { + driverMode, err := p.getDriverMode(spec) + if err != nil { + return false + } + + if driverMode == ephemeralDriverMode { + klog.V(4).Info(log("driver ephemeral mode detected for spec %v", spec.Name)) + return false + } + + pvSrc, err := getCSISourceFromSpec(spec) + if err != nil { + klog.Error(log("plugin.CanAttach failed to get info from spec: %s", err)) + return false + } + + driverName := pvSrc.Driver + + skipAttach, err := p.skipAttach(driverName) + if err != nil { + klog.Error(log("plugin.CanAttach error when calling plugin.skipAttach for driver %s: %s", driverName, err)) + return false + } + + return !skipAttach +} + func (p *csiPlugin) NewDeviceUnmounter() (volume.DeviceUnmounter, error) { return p.NewDetacher() } @@ -438,21 +518,166 @@ func (p *csiPlugin) GetDeviceMountRefs(deviceMountPath string) ([]string, error) var _ volume.BlockVolumePlugin = &csiPlugin{} func (p *csiPlugin) NewBlockVolumeMapper(spec *volume.Spec, podRef *api.Pod, opts volume.VolumeOptions) (volume.BlockVolumeMapper, error) { - return nil, errors.New("CSIBlockVolume feature not enabled") + if !p.blockEnabled { + return nil, errors.New("CSIBlockVolume feature not enabled") + } + + pvSource, err := getCSISourceFromSpec(spec) + if err != nil { + return nil, err + } + readOnly, err := getReadOnlyFromSpec(spec) + if err != nil { + return nil, err + } + + klog.V(4).Info(log("setting up block mapper for [volume=%v,driver=%v]", pvSource.VolumeHandle, pvSource.Driver)) + + k8s := p.host.GetKubeClient() + if k8s == nil { + klog.Error(log("failed to get a kubernetes client")) + return nil, errors.New("failed to get a Kubernetes client") + } + + mapper := &csiBlockMapper{ + k8s: k8s, + plugin: p, + volumeID: pvSource.VolumeHandle, + driverName: csiDriverName(pvSource.Driver), + readOnly: readOnly, + spec: spec, + specName: spec.Name(), + podUID: podRef.UID, + } + mapper.csiClientGetter.driverName = csiDriverName(pvSource.Driver) + + // Save volume info in pod dir + dataDir := getVolumeDeviceDataDir(spec.Name(), p.host) + + if err := os.MkdirAll(dataDir, 0750); err != nil { + klog.Error(log("failed to create data dir %s: %v", dataDir, err)) + return nil, err + } + klog.V(4).Info(log("created path successfully [%s]", dataDir)) + + // persist volume info data for teardown + node := string(p.host.GetNodeName()) + attachID := getAttachmentName(pvSource.VolumeHandle, pvSource.Driver, node) + volData := map[string]string{ + volDataKey.specVolID: spec.Name(), + volDataKey.volHandle: pvSource.VolumeHandle, + volDataKey.driverName: pvSource.Driver, + volDataKey.nodeName: node, + volDataKey.attachmentID: attachID, + } + + if err := saveVolumeData(dataDir, volDataFileName, volData); err != nil { + klog.Error(log("failed to save volume info data: %v", err)) + if err := os.RemoveAll(dataDir); err != nil { + klog.Error(log("failed to remove dir after error [%s]: %v", dataDir, err)) + return nil, err + } + return nil, err + } + + return mapper, nil } func (p *csiPlugin) NewBlockVolumeUnmapper(volName string, podUID types.UID) (volume.BlockVolumeUnmapper, error) { - return nil, errors.New("CSIBlockVolume feature not enabled") + if !p.blockEnabled { + return nil, errors.New("CSIBlockVolume feature not enabled") + } + + klog.V(4).Infof(log("setting up block unmapper for [Spec=%v, podUID=%v]", volName, podUID)) + unmapper := &csiBlockMapper{ + plugin: p, + podUID: podUID, + specName: volName, + } + + // load volume info from file + dataDir := getVolumeDeviceDataDir(unmapper.specName, p.host) + data, err := loadVolumeData(dataDir, volDataFileName) + if err != nil { + klog.Error(log("unmapper failed to load volume data file [%s]: %v", dataDir, err)) + return nil, err + } + unmapper.driverName = csiDriverName(data[volDataKey.driverName]) + unmapper.volumeID = data[volDataKey.volHandle] + unmapper.csiClientGetter.driverName = unmapper.driverName + if err != nil { + return nil, err + } + + return unmapper, nil } func (p *csiPlugin) ConstructBlockVolumeSpec(podUID types.UID, specVolName, mapPath string) (*volume.Spec, error) { - return nil, errors.New("CSIBlockVolume feature not enabled") + if !p.blockEnabled { + return nil, errors.New("CSIBlockVolume feature not enabled") + } + + klog.V(4).Infof("plugin.ConstructBlockVolumeSpec [podUID=%s, specVolName=%s, path=%s]", string(podUID), specVolName, mapPath) + + dataDir := getVolumeDeviceDataDir(specVolName, p.host) + volData, err := loadVolumeData(dataDir, volDataFileName) + if err != nil { + klog.Error(log("plugin.ConstructBlockVolumeSpec failed loading volume data using [%s]: %v", mapPath, err)) + return nil, err + } + + klog.V(4).Info(log("plugin.ConstructBlockVolumeSpec extracted [%#v]", volData)) + + blockMode := api.PersistentVolumeBlock + pv := &api.PersistentVolume{ + ObjectMeta: meta.ObjectMeta{ + Name: volData[volDataKey.specVolID], + }, + Spec: api.PersistentVolumeSpec{ + PersistentVolumeSource: api.PersistentVolumeSource{ + CSI: &api.CSIPersistentVolumeSource{ + Driver: volData[volDataKey.driverName], + VolumeHandle: volData[volDataKey.volHandle], + }, + }, + VolumeMode: &blockMode, + }, + } + + return volume.NewSpecFromPersistentVolume(pv, false), nil } +// skipAttach looks up CSIDriver object associated with driver name +// to determine if driver requies attachment volume operation func (p *csiPlugin) skipAttach(driver string) (bool, error) { + if !utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + return false, nil + } + if p.csiDriverLister == nil { + return false, errors.New("CSIDriver lister does not exist") + } + csiDriver, err := p.csiDriverLister.Get(driver) + if err != nil { + if apierrs.IsNotFound(err) { + // Don't skip attach if CSIDriver does not exist + return false, nil + } + return false, err + } + if csiDriver.Spec.AttachRequired != nil && *csiDriver.Spec.AttachRequired == false { + return true, nil + } return false, nil } +// getDriverMode returns the driver mode for the specified spec: {persistent|ephemeral}. +// 1) If mode cannot be determined, it will default to "persistent". +// 2) If Mode cannot be resolved to either {persistent | ephemeral}, an error is returned +// See https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/20190122-csi-inline-volumes.md +func (p *csiPlugin) getDriverMode(spec *volume.Spec) (driverMode, error) { + return persistentDriverMode, nil +} + func (p *csiPlugin) getPublishContext(client clientset.Interface, handle, driver, nodeName string) (map[string]string, error) { skip, err := p.skipAttach(driver) if err != nil { @@ -465,7 +690,7 @@ func (p *csiPlugin) getPublishContext(client clientset.Interface, handle, driver attachID := getAttachmentName(handle, driver, nodeName) // search for attachment by VolumeAttachment.Spec.Source.PersistentVolumeName - attachment, err := client.StorageV1beta1().VolumeAttachments().Get(attachID, meta.GetOptions{}) + attachment, err := client.StorageV1().VolumeAttachments().Get(attachID, meta.GetOptions{}) if err != nil { return nil, err // This err already has enough context ("VolumeAttachment xyz not found") } @@ -478,11 +703,7 @@ func (p *csiPlugin) getPublishContext(client clientset.Interface, handle, driver } func unregisterDriver(driverName string) error { - func() { - csiDrivers.Lock() - defer csiDrivers.Unlock() - delete(csiDrivers.driversMap, driverName) - }() + csiDrivers.Delete(driverName) if err := nim.UninstallCSIDriver(driverName); err != nil { klog.Errorf("Error uninstalling CSI driver: %v", err) @@ -548,3 +769,12 @@ func isV0Version(version string) bool { return parsedVersion.Major() == 0 } + +func isV1Version(version string) bool { + parsedVersion, err := utilversion.ParseGeneric(version) + if err != nil { + return false + } + + return parsedVersion.Major() == 1 +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_util.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_util.go index 3fe103584c4..dbb51c5eb55 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_util.go @@ -21,14 +21,14 @@ import ( "fmt" "os" "path" + "time" api "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/klog" - kstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" - "time" + utilstrings "k8s.io/utils/strings" ) const ( @@ -90,12 +90,7 @@ func loadVolumeData(dir string, fileName string) (map[string]string, error) { } func getCSISourceFromSpec(spec *volume.Spec) (*api.CSIPersistentVolumeSource, error) { - if spec.PersistentVolume != nil && - spec.PersistentVolume.Spec.CSI != nil { - return spec.PersistentVolume.Spec.CSI, nil - } - - return nil, fmt.Errorf("CSIPersistentVolumeSource not defined in spec") + return getPVSourceFromSpec(spec) } func getReadOnlyFromSpec(spec *volume.Spec) (bool, error) { @@ -109,23 +104,23 @@ func getReadOnlyFromSpec(spec *volume.Spec) (bool, error) { // log prepends log string with `kubernetes.io/csi` func log(msg string, parts ...interface{}) string { - return fmt.Sprintf(fmt.Sprintf("%s: %s", csiPluginName, msg), parts...) + return fmt.Sprintf(fmt.Sprintf("%s: %s", CSIPluginName, msg), parts...) } // getVolumeDevicePluginDir returns the path where the CSI plugin keeps the // symlink for a block device associated with a given specVolumeID. // path: plugins/kubernetes.io/csi/volumeDevices/{specVolumeID}/dev func getVolumeDevicePluginDir(specVolID string, host volume.VolumeHost) string { - sanitizedSpecVolID := kstrings.EscapeQualifiedNameForDisk(specVolID) - return path.Join(host.GetVolumeDevicePluginDir(csiPluginName), sanitizedSpecVolID, "dev") + sanitizedSpecVolID := utilstrings.EscapeQualifiedName(specVolID) + return path.Join(host.GetVolumeDevicePluginDir(CSIPluginName), sanitizedSpecVolID, "dev") } // getVolumeDeviceDataDir returns the path where the CSI plugin keeps the // volume data for a block device associated with a given specVolumeID. // path: plugins/kubernetes.io/csi/volumeDevices/{specVolumeID}/data func getVolumeDeviceDataDir(specVolID string, host volume.VolumeHost) string { - sanitizedSpecVolID := kstrings.EscapeQualifiedNameForDisk(specVolID) - return path.Join(host.GetVolumeDevicePluginDir(csiPluginName), sanitizedSpecVolID, "data") + sanitizedSpecVolID := utilstrings.EscapeQualifiedName(specVolID) + return path.Join(host.GetVolumeDevicePluginDir(CSIPluginName), sanitizedSpecVolID, "data") } // hasReadWriteOnce returns true if modes contains v1.ReadWriteOnce @@ -140,3 +135,31 @@ func hasReadWriteOnce(modes []api.PersistentVolumeAccessMode) bool { } return false } + +// getSourceFromSpec returns either CSIVolumeSource or CSIPersistentVolumeSource, but not both +func getSourceFromSpec(spec *volume.Spec) (*api.CSIVolumeSource, *api.CSIPersistentVolumeSource, error) { + if spec == nil { + return nil, nil, fmt.Errorf("volume.Spec nil") + } + if spec.Volume != nil && spec.PersistentVolume != nil { + return nil, nil, fmt.Errorf("volume.Spec has both volume and persistent volume sources") + } + if spec.PersistentVolume != nil && + spec.PersistentVolume.Spec.CSI != nil { + return nil, spec.PersistentVolume.Spec.CSI, nil + } + + return nil, nil, fmt.Errorf("volume source not found in volume.Spec") +} + +// getPVSourceFromSpec ensures only CSIPersistentVolumeSource is present in volume.Spec +func getPVSourceFromSpec(spec *volume.Spec) (*api.CSIPersistentVolumeSource, error) { + volSrc, pvSrc, err := getSourceFromSpec(spec) + if err != nil { + return nil, err + } + if volSrc != nil { + return nil, fmt.Errorf("unexpected api.CSIVolumeSource found in volume.Spec") + } + return pvSrc, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go new file mode 100644 index 00000000000..993793d52b5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go @@ -0,0 +1,88 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package csi + +import ( + "context" + "fmt" + + api "k8s.io/api/core/v1" + "k8s.io/klog" + "k8s.io/kubernetes/pkg/volume" +) + +var _ volume.NodeExpandableVolumePlugin = &csiPlugin{} + +func (c *csiPlugin) RequiresFSResize() bool { + klog.V(4).Infof("Resizing is not enabled for CSI volume") + return false +} + +func (c *csiPlugin) NodeExpand(resizeOptions volume.NodeResizeOptions) (bool, error) { + klog.V(4).Infof(log("Expander.NodeExpand(%s)", resizeOptions.DeviceMountPath)) + csiSource, err := getCSISourceFromSpec(resizeOptions.VolumeSpec) + if err != nil { + klog.Error(log("Expander.NodeExpand failed to get CSI persistent source: %v", err)) + return false, err + } + + csClient, err := newCsiDriverClient(csiDriverName(csiSource.Driver)) + if err != nil { + return false, err + } + + return c.nodeExpandWithClient(resizeOptions, csiSource, csClient) +} + +func (c *csiPlugin) nodeExpandWithClient( + resizeOptions volume.NodeResizeOptions, + csiSource *api.CSIPersistentVolumeSource, + csClient csiClient) (bool, error) { + driverName := csiSource.Driver + + ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) + defer cancel() + + nodeExpandSet, err := csClient.NodeSupportsNodeExpand(ctx) + if err != nil { + return false, fmt.Errorf("Expander.NodeExpand failed to check if node supports expansion : %v", err) + } + + if !nodeExpandSet { + return false, fmt.Errorf("Expander.NodeExpand found CSI plugin %s/%s to not support node expansion", c.GetPluginName(), driverName) + } + + // Check whether "STAGE_UNSTAGE_VOLUME" is set + stageUnstageSet, err := csClient.NodeSupportsStageUnstage(ctx) + if err != nil { + return false, fmt.Errorf("Expander.NodeExpand failed to check if plugins supports stage_unstage %v", err) + } + + // if plugin does not support STAGE_UNSTAGE but CSI volume path is staged + // it must mean this was placeholder staging performed by k8s and not CSI staging + // in which case we should return from here so as volume can be node published + // before we can resize + if !stageUnstageSet && resizeOptions.CSIVolumePhase == volume.CSIVolumeStaged { + return false, nil + } + + _, err = csClient.NodeExpandVolume(ctx, csiSource.VolumeHandle, resizeOptions.DeviceMountPath, resizeOptions.NewSize) + if err != nil { + return false, fmt.Errorf("Expander.NodeExpand failed to expand the volume : %v", err) + } + return true, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/BUILD index 6af576c4221..f998f4e7a07 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/BUILD @@ -11,6 +11,7 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -19,8 +20,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -50,6 +50,8 @@ go_test( "//pkg/volume/testing:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", @@ -60,8 +62,6 @@ go_test( "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/util/testing:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/fake:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go index ec56972aaed..ba25b07e653 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go @@ -20,16 +20,23 @@ package nodeinfomanager // import "k8s.io/kubernetes/pkg/volume/csi/nodeinfomana import ( "encoding/json" + goerrors "errors" "fmt" + "strings" + "time" "k8s.io/api/core/v1" + storagev1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" + clientset "k8s.io/client-go/kubernetes" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" nodeutil "k8s.io/kubernetes/pkg/util/node" @@ -43,6 +50,7 @@ const ( ) var ( + nodeKind = v1.SchemeGroupVersion.WithKind("Node") updateBackoff = wait.Backoff{ Steps: 4, Duration: 10 * time.Millisecond, @@ -52,10 +60,11 @@ var ( ) // nodeInfoManager contains necessary common dependencies to update node info on both -// the Node and CSINodeInfo objects. +// the Node and CSINode objects. type nodeInfoManager struct { - nodeName types.NodeName - volumeHost volume.VolumeHost + nodeName types.NodeName + volumeHost volume.VolumeHost + migratedPlugins map[string](func() bool) } // If no updates is needed, the function must return the same Node object as the input. @@ -63,6 +72,11 @@ type nodeUpdateFunc func(*v1.Node) (newNode *v1.Node, updated bool, err error) // Interface implements an interface for managing labels of a node type Interface interface { + CreateCSINode() (*storagev1beta1.CSINode, error) + + // Updates or Creates the CSINode object with annotations for CSI Migration + InitializeCSINodeWithAnnotation() error + // Record in the cluster the given node information from the CSI driver with the given name. // Concurrent calls to InstallCSIDriver() is allowed, but they should not be intertwined with calls // to other methods in this interface. @@ -77,17 +91,19 @@ type Interface interface { // NewNodeInfoManager initializes nodeInfoManager func NewNodeInfoManager( nodeName types.NodeName, - volumeHost volume.VolumeHost) Interface { + volumeHost volume.VolumeHost, + migratedPlugins map[string](func() bool)) Interface { return &nodeInfoManager{ - nodeName: nodeName, - volumeHost: volumeHost, + nodeName: nodeName, + volumeHost: volumeHost, + migratedPlugins: migratedPlugins, } } // InstallCSIDriver updates the node ID annotation in the Node object and CSIDrivers field in the -// CSINodeInfo object. If the CSINodeInfo object doesn't yet exist, it will be created. +// CSINode object. If the CSINode object doesn't yet exist, it will be created. // If multiple calls to InstallCSIDriver() are made in parallel, some calls might receive Node or -// CSINodeInfo update conflicts, which causes the function to retry the corresponding update. +// CSINode update conflicts, which causes the function to retry the corresponding update. func (nim *nodeInfoManager) InstallCSIDriver(driverName string, driverNodeID string, maxAttachLimit int64, topology map[string]string) error { if driverNodeID == "" { return fmt.Errorf("error adding CSI driver node info: driverNodeID must not be empty") @@ -97,6 +113,10 @@ func (nim *nodeInfoManager) InstallCSIDriver(driverName string, driverNodeID str updateNodeIDInNode(driverName, driverNodeID), } + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + nodeUpdateFuncs = append(nodeUpdateFuncs, updateTopologyLabels(topology)) + } + if utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) { nodeUpdateFuncs = append(nodeUpdateFuncs, updateMaxAttachLimit(driverName, maxAttachLimit)) } @@ -106,14 +126,27 @@ func (nim *nodeInfoManager) InstallCSIDriver(driverName string, driverNodeID str return fmt.Errorf("error updating Node object with CSI driver node info: %v", err) } + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + err = nim.updateCSINode(driverName, driverNodeID, topology) + if err != nil { + return fmt.Errorf("error updating CSINode object with CSI driver node info: %v", err) + } + } return nil } // UninstallCSIDriver removes the node ID annotation from the Node object and CSIDrivers field from the -// CSINodeInfo object. If the CSINOdeInfo object contains no CSIDrivers, it will be deleted. +// CSINode object. If the CSINOdeInfo object contains no CSIDrivers, it will be deleted. // If multiple calls to UninstallCSIDriver() are made in parallel, some calls might receive Node or -// CSINodeInfo update conflicts, which causes the function to retry the corresponding update. +// CSINode update conflicts, which causes the function to retry the corresponding update. func (nim *nodeInfoManager) UninstallCSIDriver(driverName string) error { + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + err := nim.uninstallDriverFromCSINode(driverName) + if err != nil { + return fmt.Errorf("error uninstalling CSI driver from CSINode object %v", err) + } + } + err := nim.updateNode( removeMaxAttachLimit(driverName), removeNodeIDFromNode(driverName), @@ -294,6 +327,300 @@ func removeNodeIDFromNode(csiDriverName string) nodeUpdateFunc { } } +// updateTopologyLabels returns a function that updates labels of a Node object with the given +// topology information. +func updateTopologyLabels(topology map[string]string) nodeUpdateFunc { + return func(node *v1.Node) (*v1.Node, bool, error) { + if topology == nil || len(topology) == 0 { + return node, false, nil + } + + for k, v := range topology { + if curVal, exists := node.Labels[k]; exists && curVal != v { + return nil, false, fmt.Errorf("detected topology value collision: driver reported %q:%q but existing label is %q:%q", k, v, k, curVal) + } + } + + if node.Labels == nil { + node.Labels = make(map[string]string) + } + for k, v := range topology { + node.Labels[k] = v + } + return node, true, nil + } +} + +func (nim *nodeInfoManager) updateCSINode( + driverName string, + driverNodeID string, + topology map[string]string) error { + + csiKubeClient := nim.volumeHost.GetKubeClient() + if csiKubeClient == nil { + return fmt.Errorf("error getting CSI client") + } + + var updateErrs []error + err := wait.ExponentialBackoff(updateBackoff, func() (bool, error) { + if err := nim.tryUpdateCSINode(csiKubeClient, driverName, driverNodeID, topology); err != nil { + updateErrs = append(updateErrs, err) + return false, nil + } + return true, nil + }) + if err != nil { + return fmt.Errorf("error updating CSINode: %v; caused by: %v", err, utilerrors.NewAggregate(updateErrs)) + } + return nil +} + +func (nim *nodeInfoManager) tryUpdateCSINode( + csiKubeClient clientset.Interface, + driverName string, + driverNodeID string, + topology map[string]string) error { + + nodeInfo, err := csiKubeClient.StorageV1beta1().CSINodes().Get(string(nim.nodeName), metav1.GetOptions{}) + if nodeInfo == nil || errors.IsNotFound(err) { + nodeInfo, err = nim.CreateCSINode() + } + if err != nil { + return err + } + + return nim.installDriverToCSINode(nodeInfo, driverName, driverNodeID, topology) +} + +func (nim *nodeInfoManager) InitializeCSINodeWithAnnotation() error { + csiKubeClient := nim.volumeHost.GetKubeClient() + if csiKubeClient == nil { + return goerrors.New("error getting CSI client") + } + + var updateErrs []error + err := wait.ExponentialBackoff(updateBackoff, func() (bool, error) { + if err := nim.tryInitializeCSINodeWithAnnotation(csiKubeClient); err != nil { + updateErrs = append(updateErrs, err) + return false, nil + } + return true, nil + }) + if err != nil { + return fmt.Errorf("error updating CSINode annotation: %v; caused by: %v", err, utilerrors.NewAggregate(updateErrs)) + } + + return nil +} + +func (nim *nodeInfoManager) tryInitializeCSINodeWithAnnotation(csiKubeClient clientset.Interface) error { + nodeInfo, err := csiKubeClient.StorageV1beta1().CSINodes().Get(string(nim.nodeName), metav1.GetOptions{}) + if nodeInfo == nil || errors.IsNotFound(err) { + // CreateCSINode will set the annotation + _, err = nim.CreateCSINode() + return err + } + + annotationModified := setMigrationAnnotation(nim.migratedPlugins, nodeInfo) + + if annotationModified { + _, err := csiKubeClient.StorageV1beta1().CSINodes().Update(nodeInfo) + return err + } + return nil + +} + +func (nim *nodeInfoManager) CreateCSINode() (*storagev1beta1.CSINode, error) { + + kubeClient := nim.volumeHost.GetKubeClient() + if kubeClient == nil { + return nil, fmt.Errorf("error getting kube client") + } + + csiKubeClient := nim.volumeHost.GetKubeClient() + if csiKubeClient == nil { + return nil, fmt.Errorf("error getting CSI client") + } + + node, err := kubeClient.CoreV1().Nodes().Get(string(nim.nodeName), metav1.GetOptions{}) + if err != nil { + return nil, err + } + + nodeInfo := &storagev1beta1.CSINode{ + ObjectMeta: metav1.ObjectMeta{ + Name: string(nim.nodeName), + OwnerReferences: []metav1.OwnerReference{ + { + APIVersion: nodeKind.Version, + Kind: nodeKind.Kind, + Name: node.Name, + UID: node.UID, + }, + }, + }, + Spec: storagev1beta1.CSINodeSpec{ + Drivers: []storagev1beta1.CSINodeDriver{}, + }, + } + + setMigrationAnnotation(nim.migratedPlugins, nodeInfo) + + return csiKubeClient.StorageV1beta1().CSINodes().Create(nodeInfo) +} + +func setMigrationAnnotation(migratedPlugins map[string](func() bool), nodeInfo *storagev1beta1.CSINode) (modified bool) { + if migratedPlugins == nil { + return false + } + + nodeInfoAnnotations := nodeInfo.GetAnnotations() + if nodeInfoAnnotations == nil { + nodeInfoAnnotations = map[string]string{} + } + + var oldAnnotationSet sets.String + mpa := nodeInfoAnnotations[v1.MigratedPluginsAnnotationKey] + tok := strings.Split(mpa, ",") + if len(mpa) == 0 { + oldAnnotationSet = sets.NewString() + } else { + oldAnnotationSet = sets.NewString(tok...) + } + + newAnnotationSet := sets.NewString() + for pluginName, migratedFunc := range migratedPlugins { + if migratedFunc() { + newAnnotationSet.Insert(pluginName) + } + } + + if oldAnnotationSet.Equal(newAnnotationSet) { + return false + } + + nas := strings.Join(newAnnotationSet.List(), ",") + if len(nas) != 0 { + nodeInfoAnnotations[v1.MigratedPluginsAnnotationKey] = nas + } else { + delete(nodeInfoAnnotations, v1.MigratedPluginsAnnotationKey) + } + + nodeInfo.Annotations = nodeInfoAnnotations + return true +} + +func (nim *nodeInfoManager) installDriverToCSINode( + nodeInfo *storagev1beta1.CSINode, + driverName string, + driverNodeID string, + topology map[string]string) error { + + csiKubeClient := nim.volumeHost.GetKubeClient() + if csiKubeClient == nil { + return fmt.Errorf("error getting CSI client") + } + + topologyKeys := make(sets.String) + for k := range topology { + topologyKeys.Insert(k) + } + + specModified := true + // Clone driver list, omitting the driver that matches the given driverName + newDriverSpecs := []storagev1beta1.CSINodeDriver{} + for _, driverInfoSpec := range nodeInfo.Spec.Drivers { + if driverInfoSpec.Name == driverName { + if driverInfoSpec.NodeID == driverNodeID && + sets.NewString(driverInfoSpec.TopologyKeys...).Equal(topologyKeys) { + specModified = false + } + } else { + // Omit driverInfoSpec matching given driverName + newDriverSpecs = append(newDriverSpecs, driverInfoSpec) + } + } + + annotationModified := setMigrationAnnotation(nim.migratedPlugins, nodeInfo) + + if !specModified && !annotationModified { + return nil + } + + // Append new driver + driverSpec := storagev1beta1.CSINodeDriver{ + Name: driverName, + NodeID: driverNodeID, + TopologyKeys: topologyKeys.List(), + } + + newDriverSpecs = append(newDriverSpecs, driverSpec) + nodeInfo.Spec.Drivers = newDriverSpecs + + _, err := csiKubeClient.StorageV1beta1().CSINodes().Update(nodeInfo) + return err +} + +func (nim *nodeInfoManager) uninstallDriverFromCSINode( + csiDriverName string) error { + + csiKubeClient := nim.volumeHost.GetKubeClient() + if csiKubeClient == nil { + return fmt.Errorf("error getting CSI client") + } + + var updateErrs []error + err := wait.ExponentialBackoff(updateBackoff, func() (bool, error) { + if err := nim.tryUninstallDriverFromCSINode(csiKubeClient, csiDriverName); err != nil { + updateErrs = append(updateErrs, err) + return false, nil + } + return true, nil + }) + if err != nil { + return fmt.Errorf("error updating CSINode: %v; caused by: %v", err, utilerrors.NewAggregate(updateErrs)) + } + return nil +} + +func (nim *nodeInfoManager) tryUninstallDriverFromCSINode( + csiKubeClient clientset.Interface, + csiDriverName string) error { + + nodeInfoClient := csiKubeClient.StorageV1beta1().CSINodes() + nodeInfo, err := nodeInfoClient.Get(string(nim.nodeName), metav1.GetOptions{}) + if err != nil && errors.IsNotFound(err) { + return nil + } else if err != nil { + return err + } + + hasModified := false + // Uninstall CSINodeDriver with name csiDriverName + drivers := nodeInfo.Spec.Drivers[:0] + for _, driver := range nodeInfo.Spec.Drivers { + if driver.Name != csiDriverName { + drivers = append(drivers, driver) + } else { + // Found a driver with name csiDriverName + // Set hasModified to true because it will be removed + hasModified = true + } + } + + if !hasModified { + // No changes, don't update + return nil + } + nodeInfo.Spec.Drivers = drivers + + _, err = nodeInfoClient.Update(nodeInfo) + + return err // do not wrap error + +} + func updateMaxAttachLimit(driverName string, maxLimit int64) nodeUpdateFunc { return func(node *v1.Node) (*v1.Node, bool, error) { if maxLimit <= 0 { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/BUILD index d223844116f..cece3c521e2 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/BUILD @@ -13,13 +13,13 @@ go_library( deps = [ "//pkg/api/v1/resource:go_default_library", "//pkg/fieldpath:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/OWNERS index baaff6ff460..93c0d5e773d 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/downwardapi.go b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/downwardapi.go index 391198ad9dd..0a888914458 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/downwardapi.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/downwardapi/downwardapi.go @@ -23,13 +23,12 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/klog" "k8s.io/kubernetes/pkg/api/v1/resource" "k8s.io/kubernetes/pkg/fieldpath" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" - - "k8s.io/klog" + utilstrings "k8s.io/utils/strings" ) // ProbeVolumePlugins is the entry point for plugin detection in a package. @@ -48,6 +47,10 @@ type downwardAPIPlugin struct { var _ volume.VolumePlugin = &downwardAPIPlugin{} +func getPath(uid types.UID, volName string, host volume.VolumeHost) string { + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(downwardAPIPluginName), volName) +} + func wrappedVolumeSpec() volume.Spec { return volume.Spec{ Volume: &v1.Volume{VolumeSource: v1.VolumeSource{EmptyDir: &v1.EmptyDirVolumeSource{Medium: v1.StorageMediumMemory}}}, @@ -77,6 +80,10 @@ func (plugin *downwardAPIPlugin) CanSupport(spec *volume.Spec) bool { return spec.Volume != nil && spec.Volume.DownwardAPI != nil } +func (plugin *downwardAPIPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *downwardAPIPlugin) RequiresRemount() bool { return true } @@ -91,11 +98,12 @@ func (plugin *downwardAPIPlugin) SupportsBulkVolumeVerification() bool { func (plugin *downwardAPIPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts volume.VolumeOptions) (volume.Mounter, error) { v := &downwardAPIVolume{ - volName: spec.Name(), - items: spec.Volume.DownwardAPI.Items, - pod: pod, - podUID: pod.UID, - plugin: plugin, + volName: spec.Name(), + items: spec.Volume.DownwardAPI.Items, + pod: pod, + podUID: pod.UID, + plugin: plugin, + MetricsProvider: volume.NewCachedMetrics(volume.NewMetricsDu(getPath(pod.UID, spec.Name(), plugin.host))), } return &downwardAPIVolumeMounter{ downwardAPIVolume: v, @@ -107,9 +115,10 @@ func (plugin *downwardAPIPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts func (plugin *downwardAPIPlugin) NewUnmounter(volName string, podUID types.UID) (volume.Unmounter, error) { return &downwardAPIVolumeUnmounter{ &downwardAPIVolume{ - volName: volName, - podUID: podUID, - plugin: plugin, + volName: volName, + podUID: podUID, + plugin: plugin, + MetricsProvider: volume.NewCachedMetrics(volume.NewMetricsDu(getPath(podUID, volName, plugin.host))), }, }, nil } @@ -131,7 +140,7 @@ type downwardAPIVolume struct { pod *v1.Pod podUID types.UID // TODO: remove this redundancy as soon NewUnmounter func will have *v1.POD and not only types.UID plugin *downwardAPIPlugin - volume.MetricsNil + volume.MetricsProvider } // downwardAPIVolumeMounter fetches info from downward API from the pod @@ -279,7 +288,7 @@ func CollectData(items []v1.DownwardAPIVolumeFile, pod *v1.Pod, host volume.Volu } func (d *downwardAPIVolume) GetPath() string { - return d.plugin.host.GetPodVolumeDir(d.podUID, utilstrings.EscapeQualifiedNameForDisk(downwardAPIPluginName), d.volName) + return d.plugin.host.GetPodVolumeDir(d.podUID, utilstrings.EscapeQualifiedName(downwardAPIPluginName), d.volName) } // downwardAPIVolumeCleaner handles cleaning up downwardAPI volumes diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/BUILD index fd4eaff0332..08c2bc334fc 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/BUILD @@ -18,7 +18,6 @@ go_library( deps = [ "//pkg/apis/core/v1/helper:go_default_library", "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -26,6 +25,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//vendor/golang.org/x/sys/unix:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/OWNERS index baaff6ff460..93c0d5e773d 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/empty_dir.go b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/empty_dir.go index 0dd6c6508a0..8c1bdd17851 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydir/empty_dir.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/emptydir/empty_dir.go @@ -28,9 +28,9 @@ import ( "k8s.io/klog" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/util/mount" - stringsutil "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + utilstrings "k8s.io/utils/strings" ) // TODO: in the near future, this will be changed to be more restrictive @@ -59,7 +59,7 @@ const ( ) func getPath(uid types.UID, volName string, host volume.VolumeHost) string { - return host.GetPodVolumeDir(uid, stringsutil.EscapeQualifiedNameForDisk(emptyDirPluginName), volName) + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(emptyDirPluginName), volName) } func (plugin *emptyDirPlugin) Init(host volume.VolumeHost) error { @@ -89,6 +89,10 @@ func (plugin *emptyDirPlugin) CanSupport(spec *volume.Spec) bool { return false } +func (plugin *emptyDirPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *emptyDirPlugin) RequiresRemount() bool { return false } @@ -367,7 +371,7 @@ func (ed *emptyDir) TearDown() error { // TearDownAt simply discards everything in the directory. func (ed *emptyDir) TearDownAt(dir string) error { - if pathExists, pathErr := volumeutil.PathExists(dir); pathErr != nil { + if pathExists, pathErr := mount.PathExists(dir); pathErr != nil { return fmt.Errorf("Error checking if path exists: %v", pathErr) } else if !pathExists { klog.Warningf("Warning: Unmount skipped because path does not exist: %v", dir) @@ -416,7 +420,7 @@ func (ed *emptyDir) teardownTmpfsOrHugetlbfs(dir string) error { } func (ed *emptyDir) getMetaDir() string { - return path.Join(ed.plugin.host.GetPodPluginDir(ed.pod.UID, stringsutil.EscapeQualifiedNameForDisk(emptyDirPluginName)), ed.volName) + return path.Join(ed.plugin.host.GetPodPluginDir(ed.pod.UID, utilstrings.EscapeQualifiedName(emptyDirPluginName)), ed.volName) } func getVolumeSource(spec *volume.Spec) (*v1.EmptyDirVolumeSource, bool) { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/BUILD index f337fc42bb3..6af91d59242 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/BUILD @@ -31,7 +31,6 @@ go_library( deps = [ "//pkg/util/filesystem:go_default_library", "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -41,6 +40,7 @@ go_library( "//vendor/github.com/fsnotify/fsnotify:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/OWNERS index 3342c22c4c4..6caf661b0a6 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - chakri-nelluri - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher-defaults.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher-defaults.go index f0f43262394..134f26da059 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher-defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher-defaults.go @@ -21,7 +21,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog" - "k8s.io/kubernetes/pkg/volume/util" + "k8s.io/kubernetes/pkg/util/mount" ) type detacherDefaults flexVolumeDetacher @@ -41,5 +41,5 @@ func (d *detacherDefaults) WaitForDetach(devicePath string, timeout time.Duratio // UnmountDevice is part of the volume.Detacher interface. func (d *detacherDefaults) UnmountDevice(deviceMountPath string) error { klog.Warning(logPrefix(d.plugin.flexVolumePlugin), "using default UnmountDevice for device mount path ", deviceMountPath) - return util.UnmountPath(deviceMountPath, d.plugin.host.GetMounter(d.plugin.GetPluginName())) + return mount.CleanupMountPoint(deviceMountPath, d.plugin.host.GetMounter(d.plugin.GetPluginName()), false) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher.go index d98791f3d1b..39ff9770436 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/detacher.go @@ -22,8 +22,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog" + "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" - "k8s.io/kubernetes/pkg/volume/util" ) type flexVolumeDetacher struct { @@ -51,18 +51,18 @@ func (d *flexVolumeDetacher) Detach(volumeName string, hostName types.NodeName) // UnmountDevice is part of the volume.Detacher interface. func (d *flexVolumeDetacher) UnmountDevice(deviceMountPath string) error { - pathExists, pathErr := util.PathExists(deviceMountPath) + pathExists, pathErr := mount.PathExists(deviceMountPath) if !pathExists { klog.Warningf("Warning: Unmount skipped because path does not exist: %v", deviceMountPath) return nil } - if pathErr != nil && !util.IsCorruptedMnt(pathErr) { + if pathErr != nil && !mount.IsCorruptedMnt(pathErr) { return fmt.Errorf("Error checking path: %v", pathErr) } notmnt, err := isNotMounted(d.plugin.host.GetMounter(d.plugin.GetPluginName()), deviceMountPath) if err != nil { - if util.IsCorruptedMnt(err) { + if mount.IsCorruptedMnt(err) { notmnt = false // Corrupted error is assumed to be mounted. } else { return err @@ -85,7 +85,7 @@ func (d *flexVolumeDetacher) UnmountDevice(deviceMountPath string) error { } // Flexvolume driver may remove the directory. Ignore if it does. - if pathExists, pathErr := util.PathExists(deviceMountPath); pathErr != nil { + if pathExists, pathErr := mount.PathExists(deviceMountPath); pathErr != nil { return fmt.Errorf("Error checking if path exists: %v", pathErr) } else if !pathExists { return nil diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander-defaults.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander-defaults.go index 4a33e184e38..ec4fd29f748 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander-defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander-defaults.go @@ -36,10 +36,13 @@ func (e *expanderDefaults) ExpandVolumeDevice(spec *volume.Spec, newSize resourc return newSize, nil } -// the defaults for ExpandFS return a generic resize indicator that will trigger the operation executor to go ahead with +// the defaults for NodeExpand return a generic resize indicator that will trigger the operation executor to go ahead with // generic filesystem resize -func (e *expanderDefaults) ExpandFS(spec *volume.Spec, devicePath, deviceMountPath string, _, _ resource.Quantity) error { - klog.Warning(logPrefix(e.plugin), "using default filesystem resize for volume ", spec.Name(), ", at ", devicePath) - _, err := util.GenericResizeFS(e.plugin.host, e.plugin.GetPluginName(), devicePath, deviceMountPath) - return err +func (e *expanderDefaults) NodeExpand(rsOpt volume.NodeResizeOptions) (bool, error) { + klog.Warning(logPrefix(e.plugin), "using default filesystem resize for volume ", rsOpt.VolumeSpec.Name(), ", at ", rsOpt.DevicePath) + _, err := util.GenericResizeFS(e.plugin.host, e.plugin.GetPluginName(), rsOpt.DevicePath, rsOpt.DeviceMountPath) + if err != nil { + return false, err + } + return true, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander.go index 345bad26d7b..7ad06df8259 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/expander.go @@ -18,9 +18,10 @@ package flexvolume import ( "fmt" + "strconv" + "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/volume" - "strconv" ) func (plugin *flexVolumePlugin) ExpandVolumeDevice(spec *volume.Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error) { @@ -42,26 +43,29 @@ func (plugin *flexVolumePlugin) ExpandVolumeDevice(spec *volume.Spec, newSize re return newSize, err } -func (plugin *flexVolumePlugin) ExpandFS(spec *volume.Spec, devicePath, deviceMountPath string, newSize, oldSize resource.Quantity) error { +func (plugin *flexVolumePlugin) NodeExpand(rsOpt volume.NodeResizeOptions) (bool, error) { // This method is called after we spec.PersistentVolume.Spec.Capacity // has been updated to the new size. The underlying driver thus sees // the _new_ (requested) size and can find out the _current_ size from // its underlying storage implementation - if spec.PersistentVolume == nil { - return fmt.Errorf("PersistentVolume not found for spec: %s", spec.Name()) + if rsOpt.VolumeSpec.PersistentVolume == nil { + return false, fmt.Errorf("PersistentVolume not found for spec: %s", rsOpt.VolumeSpec.Name()) } call := plugin.NewDriverCall(expandFSCmd) - call.AppendSpec(spec, plugin.host, nil) - call.Append(devicePath) - call.Append(deviceMountPath) - call.Append(strconv.FormatInt(newSize.Value(), 10)) - call.Append(strconv.FormatInt(oldSize.Value(), 10)) + call.AppendSpec(rsOpt.VolumeSpec, plugin.host, nil) + call.Append(rsOpt.DevicePath) + call.Append(rsOpt.DeviceMountPath) + call.Append(strconv.FormatInt(rsOpt.NewSize.Value(), 10)) + call.Append(strconv.FormatInt(rsOpt.OldSize.Value(), 10)) _, err := call.Run() if isCmdNotSupportedErr(err) { - return newExpanderDefaults(plugin).ExpandFS(spec, devicePath, deviceMountPath, newSize, oldSize) + return newExpanderDefaults(plugin).NodeExpand(rsOpt) } - return err + if err != nil { + return false, err + } + return true, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/plugin.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/plugin.go index 2e2a9f7e532..c0a95af96bd 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/plugin.go @@ -23,15 +23,14 @@ import ( "strings" "sync" - "k8s.io/klog" - api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/utils/exec" + utilstrings "k8s.io/utils/strings" ) const ( @@ -57,7 +56,7 @@ type flexVolumeAttachablePlugin struct { var _ volume.AttachableVolumePlugin = &flexVolumeAttachablePlugin{} var _ volume.PersistentVolumePlugin = &flexVolumePlugin{} -var _ volume.FSResizableVolumePlugin = &flexVolumePlugin{} +var _ volume.NodeExpandableVolumePlugin = &flexVolumePlugin{} var _ volume.ExpandableVolumePlugin = &flexVolumePlugin{} var _ volume.DeviceMountableVolumePlugin = &flexVolumeAttachablePlugin{} @@ -72,7 +71,7 @@ type pluginFactory struct{} func (pluginFactory) NewFlexVolumePlugin(pluginDir, name string, runner exec.Interface) (volume.VolumePlugin, error) { execPath := path.Join(pluginDir, name) - driverName := utilstrings.UnescapePluginName(name) + driverName := utilstrings.UnescapeQualifiedName(name) flexPlugin := &flexVolumePlugin{ driverName: driverName, @@ -149,6 +148,10 @@ func (plugin *flexVolumePlugin) CanSupport(spec *volume.Spec) bool { return sourceDriver == plugin.driverName } +func (plugin *flexVolumePlugin) IsMigratedToCSI() bool { + return false +} + // RequiresRemount is part of the volume.VolumePlugin interface. func (plugin *flexVolumePlugin) RequiresRemount() bool { return false @@ -182,7 +185,7 @@ func (plugin *flexVolumePlugin) newMounterInternal(spec *volume.Spec, pod *api.P var metricsProvider volume.MetricsProvider if plugin.capabilities.SupportsMetrics { metricsProvider = volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir( - pod.UID, utilstrings.EscapeQualifiedNameForDisk(sourceDriver), spec.Name())) + pod.UID, utilstrings.EscapeQualifiedName(sourceDriver), spec.Name())) } else { metricsProvider = &volume.MetricsNil{} } @@ -216,7 +219,7 @@ func (plugin *flexVolumePlugin) newUnmounterInternal(volName string, podUID type var metricsProvider volume.MetricsProvider if plugin.capabilities.SupportsMetrics { metricsProvider = volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir( - podUID, utilstrings.EscapeQualifiedNameForDisk(plugin.driverName), volName)) + podUID, utilstrings.EscapeQualifiedName(plugin.driverName), volName)) } else { metricsProvider = &volume.MetricsNil{} } @@ -253,6 +256,10 @@ func (plugin *flexVolumeAttachablePlugin) NewDeviceUnmounter() (volume.DeviceUnm return plugin.NewDetacher() } +func (plugin *flexVolumeAttachablePlugin) CanAttach(spec *volume.Spec) bool { + return true +} + // ConstructVolumeSpec is part of the volume.AttachableVolumePlugin interface. func (plugin *flexVolumePlugin) ConstructVolumeSpec(volumeName, mountPath string) (*volume.Spec, error) { flexVolume := &api.Volume{ diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/probe.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/probe.go index 7a929e5ce99..1657741f572 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/probe.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/probe.go @@ -17,22 +17,19 @@ limitations under the License. package flexvolume import ( - "k8s.io/klog" - "k8s.io/kubernetes/pkg/volume" - "k8s.io/utils/exec" - - "os" - "fmt" + "os" "path/filepath" - "sync" - "strings" + "sync" "github.com/fsnotify/fsnotify" "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/klog" utilfs "k8s.io/kubernetes/pkg/util/filesystem" - utilstrings "k8s.io/kubernetes/pkg/util/strings" + "k8s.io/kubernetes/pkg/volume" + "k8s.io/utils/exec" + utilstrings "k8s.io/utils/strings" ) type flexVolumeProber struct { @@ -142,7 +139,7 @@ func (prober *flexVolumeProber) newProbeEvent(driverDirName string, op volume.Pr probeEvent.Plugin = plugin probeEvent.PluginName = plugin.GetPluginName() } else if op == volume.ProbeRemove { - driverName := utilstrings.UnescapePluginName(driverDirName) + driverName := utilstrings.UnescapeQualifiedName(driverDirName) probeEvent.PluginName = flexVolumePluginNamePrefix + driverName } else { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter-defaults.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter-defaults.go index 919a6be890e..e3f05f0ec87 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter-defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter-defaults.go @@ -18,12 +18,12 @@ package flexvolume import ( "k8s.io/klog" - "k8s.io/kubernetes/pkg/volume/util" + "k8s.io/kubernetes/pkg/util/mount" ) type unmounterDefaults flexVolumeUnmounter func (f *unmounterDefaults) TearDownAt(dir string) error { klog.Warning(logPrefix(f.plugin), "using default TearDownAt for ", dir) - return util.UnmountPath(dir, f.mounter) + return mount.CleanupMountPoint(dir, f.mounter, false) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter.go index a62636aba40..3da5f77e81f 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/unmounter.go @@ -21,8 +21,8 @@ import ( "os" "k8s.io/klog" + "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" - "k8s.io/kubernetes/pkg/volume/util" "k8s.io/utils/exec" ) @@ -43,13 +43,13 @@ func (f *flexVolumeUnmounter) TearDown() error { func (f *flexVolumeUnmounter) TearDownAt(dir string) error { - pathExists, pathErr := util.PathExists(dir) + pathExists, pathErr := mount.PathExists(dir) if !pathExists { klog.Warningf("Warning: Unmount skipped because path does not exist: %v", dir) return nil } - if pathErr != nil && !util.IsCorruptedMnt(pathErr) { + if pathErr != nil && !mount.IsCorruptedMnt(pathErr) { return fmt.Errorf("Error checking path: %v", pathErr) } @@ -64,7 +64,7 @@ func (f *flexVolumeUnmounter) TearDownAt(dir string) error { } // Flexvolume driver may remove the directory. Ignore if it does. - if pathExists, pathErr := util.PathExists(dir); pathErr != nil { + if pathExists, pathErr := mount.PathExists(dir); pathErr != nil { return fmt.Errorf("Error checking if path exists: %v", pathErr) } else if !pathExists { return nil diff --git a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/volume.go b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/volume.go index f4988d839e6..7e718f072a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/volume.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/flexvolume/volume.go @@ -19,8 +19,8 @@ package flexvolume import ( "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" + utilstrings "k8s.io/utils/strings" ) type flexVolume struct { @@ -51,5 +51,5 @@ type flexVolume struct { func (f *flexVolume) GetPath() string { name := f.driverName - return f.plugin.host.GetPodVolumeDir(f.podUID, utilstrings.EscapeQualifiedNameForDisk(name), f.volName) + return f.plugin.host.GetPodVolumeDir(f.podUID, utilstrings.EscapeQualifiedName(name), f.volName) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/host_path/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/host_path/BUILD index b05d42c64b3..0c961173ba4 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/host_path/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/host_path/BUILD @@ -31,7 +31,6 @@ go_test( srcs = ["host_path_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/testing:go_default_library", @@ -41,6 +40,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/host_path/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/host_path/OWNERS index 17c11a8181f..5ffca544da9 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/host_path/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/host_path/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/host_path/host_path.go b/vendor/k8s.io/kubernetes/pkg/volume/host_path/host_path.go index 9090e4a34da..dfbe01bf272 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/host_path/host_path.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/host_path/host_path.go @@ -83,6 +83,10 @@ func (plugin *hostPathPlugin) CanSupport(spec *volume.Spec) bool { (spec.Volume != nil && spec.Volume.HostPath != nil) } +func (plugin *hostPathPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *hostPathPlugin) RequiresRemount() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/BUILD index 1143c892e86..41381d0bb49 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/BUILD @@ -18,9 +18,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/iscsi", deps = [ "//pkg/features:go_default_library", - "//pkg/util/keymutex:go_default_library", "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/volumepathhandler:go_default_library", @@ -29,6 +27,9 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/keymutex:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/OWNERS index a7992dec652..8ad6701be3c 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/OWNERS @@ -1,7 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali - rootfs +- humblec reviewers: - saad-ali - jsafrane @@ -9,4 +12,4 @@ reviewers: - humblec - jingxu97 - msau42 -- mtanino +- mtanino diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/attacher.go b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/attacher.go index 922bc31de6c..f5be5b9fb72 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/attacher.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/attacher.go @@ -26,10 +26,10 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/util/keymutex" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + "k8s.io/utils/keymutex" ) type iscsiAttacher struct { @@ -176,6 +176,10 @@ func (detacher *iscsiDetacher) UnmountDevice(deviceMountPath string) error { return nil } +func (plugin *iscsiPlugin) CanAttach(spec *volume.Spec) bool { + return true +} + func volumeSpecToMounter(spec *volume.Spec, host volume.VolumeHost, targetLocks keymutex.KeyMutex, pod *v1.Pod) (*iscsiDiskMounter, error) { var secret map[string]string readOnly, fsType, err := getISCSIVolumeInfo(spec) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go index f8612d9dc19..e5262ea6178 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go @@ -27,12 +27,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/klog" - "k8s.io/kubernetes/pkg/util/keymutex" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" ioutil "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" + "k8s.io/utils/keymutex" + utilstrings "k8s.io/utils/strings" ) // This is the primary entrypoint for volume plugins. @@ -76,6 +76,10 @@ func (plugin *iscsiPlugin) CanSupport(spec *volume.Spec) bool { return (spec.Volume != nil && spec.Volume.ISCSI != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.ISCSI != nil) } +func (plugin *iscsiPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *iscsiPlugin) RequiresRemount() bool { return false } @@ -177,7 +181,7 @@ func (plugin *iscsiPlugin) newUnmounterInternal(volName string, podUID types.UID VolName: volName, manager: manager, plugin: plugin, - MetricsProvider: volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir(podUID, utilstrings.EscapeQualifiedNameForDisk(iscsiPluginName), volName)), + MetricsProvider: volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir(podUID, utilstrings.EscapeQualifiedName(iscsiPluginName), volName)), }, mounter: mounter, exec: exec, @@ -262,17 +266,17 @@ func (plugin *iscsiPlugin) ConstructBlockVolumeSpec(podUID types.UID, volumeName } type iscsiDisk struct { - VolName string - podUID types.UID - Portals []string - Iqn string - Lun string - Iface string - chap_discovery bool - chap_session bool - secret map[string]string - InitiatorName string - plugin *iscsiPlugin + VolName string + podUID types.UID + Portals []string + Iqn string + Lun string + Iface string + chapDiscovery bool + chapSession bool + secret map[string]string + InitiatorName string + plugin *iscsiPlugin // Utility interface that provides API calls to the provider to attach/detach disks. manager diskManager volume.MetricsProvider @@ -281,7 +285,7 @@ type iscsiDisk struct { func (iscsi *iscsiDisk) GetPath() string { name := iscsiPluginName // safe to use PodVolumeDir now: volume teardown occurs before pod is cleaned up - return iscsi.plugin.host.GetPodVolumeDir(iscsi.podUID, utilstrings.EscapeQualifiedNameForDisk(name), iscsi.VolName) + return iscsi.plugin.host.GetPodVolumeDir(iscsi.podUID, utilstrings.EscapeQualifiedName(name), iscsi.VolName) } func (iscsi *iscsiDisk) iscsiGlobalMapPath(spec *volume.Spec) (string, error) { @@ -295,7 +299,7 @@ func (iscsi *iscsiDisk) iscsiGlobalMapPath(spec *volume.Spec) (string, error) { func (iscsi *iscsiDisk) iscsiPodDeviceMapPath() (string, string) { name := iscsiPluginName - return iscsi.plugin.host.GetPodVolumeDeviceDir(iscsi.podUID, utilstrings.EscapeQualifiedNameForDisk(name)), iscsi.VolName + return iscsi.plugin.host.GetPodVolumeDeviceDir(iscsi.podUID, utilstrings.EscapeQualifiedName(name)), iscsi.VolName } type iscsiDiskMounter struct { @@ -355,7 +359,7 @@ func (c *iscsiDiskUnmounter) TearDown() error { } func (c *iscsiDiskUnmounter) TearDownAt(dir string) error { - return ioutil.UnmountPath(dir, c.mounter) + return mount.CleanupMountPoint(dir, c.mounter, false) } // Block Volumes Support @@ -539,18 +543,18 @@ func createISCSIDisk(spec *volume.Spec, podUID types.UID, plugin *iscsiPlugin, m } return &iscsiDisk{ - podUID: podUID, - VolName: spec.Name(), - Portals: bkportal, - Iqn: iqn, - Lun: lun, - Iface: iface, - chap_discovery: chapDiscovery, - chap_session: chapSession, - secret: secret, - InitiatorName: initiatorName, - manager: manager, - plugin: plugin}, nil + podUID: podUID, + VolName: spec.Name(), + Portals: bkportal, + Iqn: iqn, + Lun: lun, + Iface: iface, + chapDiscovery: chapDiscovery, + chapSession: chapSession, + secret: secret, + InitiatorName: initiatorName, + manager: manager, + plugin: plugin}, nil } func createSecretMap(spec *volume.Spec, plugin *iscsiPlugin, namespace string) (map[string]string, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi_util.go b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi_util.go index ae9c7a70fc8..b63a4b3b5b8 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi_util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi_util.go @@ -34,6 +34,7 @@ import ( "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + utilexec "k8s.io/utils/exec" ) const ( @@ -51,15 +52,19 @@ const ( // How many seconds to wait for a multipath device if at least two paths are available. multipathDeviceTimeout = 10 + + // 'iscsiadm' error code stating that a session is logged in + // See https://github.com/open-iscsi/open-iscsi/blob/7d121d12ad6ba7783308c25ffd338a9fa0cc402b/include/iscsi_err.h#L37-L38 + iscsiadmErrorSessExists = 15 ) var ( - chap_st = []string{ + chapSt = []string{ "discovery.sendtargets.auth.username", "discovery.sendtargets.auth.password", "discovery.sendtargets.auth.username_in", "discovery.sendtargets.auth.password_in"} - chap_sess = []string{ + chapSess = []string{ "node.session.auth.username", "node.session.auth.password", "node.session.auth.username_in", @@ -69,7 +74,7 @@ var ( ) func updateISCSIDiscoverydb(b iscsiDiskMounter, tp string) error { - if !b.chap_discovery { + if !b.chapDiscovery { return nil } out, err := b.exec.Run("iscsiadm", "-m", "discoverydb", "-t", "sendtargets", "-p", tp, "-I", b.Iface, "-o", "update", "-n", "discovery.sendtargets.auth.authmethod", "-v", "CHAP") @@ -77,7 +82,7 @@ func updateISCSIDiscoverydb(b iscsiDiskMounter, tp string) error { return fmt.Errorf("iscsi: failed to update discoverydb with CHAP, output: %v", string(out)) } - for _, k := range chap_st { + for _, k := range chapSt { v := b.secret[k] if len(v) > 0 { out, err := b.exec.Run("iscsiadm", "-m", "discoverydb", "-t", "sendtargets", "-p", tp, "-I", b.Iface, "-o", "update", "-n", k, "-v", v) @@ -90,7 +95,7 @@ func updateISCSIDiscoverydb(b iscsiDiskMounter, tp string) error { } func updateISCSINode(b iscsiDiskMounter, tp string) error { - if !b.chap_session { + if !b.chapSession { return nil } @@ -99,7 +104,7 @@ func updateISCSINode(b iscsiDiskMounter, tp string) error { return fmt.Errorf("iscsi: failed to update node with CHAP, output: %v", string(out)) } - for _, k := range chap_sess { + for _, k := range chapSess { v := b.secret[k] if len(v) > 0 { out, err := b.exec.Run("iscsiadm", "-m", "node", "-p", tp, "-T", b.Iqn, "-I", b.Iface, "-o", "update", "-n", k, "-v", v) @@ -210,7 +215,7 @@ func (util *ISCSIUtil) persistISCSI(conf iscsiDisk, mnt string) error { defer fp.Close() encoder := json.NewEncoder(fp) if err = encoder.Encode(conf); err != nil { - return fmt.Errorf("iscsi: encode err: %v.", err) + return fmt.Errorf("iscsi: encode err: %v", err) } return nil } @@ -224,7 +229,7 @@ func (util *ISCSIUtil) loadISCSI(conf *iscsiDisk, mnt string) error { defer fp.Close() decoder := json.NewDecoder(fp) if err = decoder.Decode(conf); err != nil { - return fmt.Errorf("iscsi: decode err: %v.", err) + return fmt.Errorf("iscsi: decode err: %v", err) } return nil } @@ -590,7 +595,7 @@ func deleteDevices(c iscsiDiskUnmounter) error { // DetachDisk unmounts and detaches a volume from node func (util *ISCSIUtil) DetachDisk(c iscsiDiskUnmounter, mntPath string) error { - if pathExists, pathErr := volumeutil.PathExists(mntPath); pathErr != nil { + if pathExists, pathErr := mount.PathExists(mntPath); pathErr != nil { return fmt.Errorf("Error checking if path exists: %v", pathErr) } else if !pathExists { klog.Warningf("Warning: Unmount skipped because path does not exist: %v", mntPath) @@ -667,7 +672,7 @@ func (util *ISCSIUtil) DetachDisk(c iscsiDiskUnmounter, mntPath string) error { // DetachBlockISCSIDisk removes loopback device for a volume and detaches a volume from node func (util *ISCSIUtil) DetachBlockISCSIDisk(c iscsiDiskUnmapper, mapPath string) error { - if pathExists, pathErr := volumeutil.PathExists(mapPath); pathErr != nil { + if pathExists, pathErr := mount.PathExists(mapPath); pathErr != nil { return fmt.Errorf("Error checking if path exists: %v", pathErr) } else if !pathExists { klog.Warningf("Warning: Unmap skipped because path does not exist: %v", mapPath) @@ -872,8 +877,13 @@ func cloneIface(b iscsiDiskMounter, newIface string) error { // create new iface out, err = b.exec.Run("iscsiadm", "-m", "iface", "-I", newIface, "-o", "new") if err != nil { - lastErr = fmt.Errorf("iscsi: failed to create new iface: %s (%v)", string(out), err) - return lastErr + exit, ok := err.(utilexec.ExitError) + if ok && exit.ExitStatus() == iscsiadmErrorSessExists { + klog.Infof("iscsi: there is a session already logged in with iface %s", newIface) + } else { + lastErr = fmt.Errorf("iscsi: failed to create new iface: %s (%v)", string(out), err) + return lastErr + } } // update new iface records for key, val := range params { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/local/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/local/BUILD index a17a11a58bc..63f2323d7a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/local/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/local/BUILD @@ -10,9 +10,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/kubelet/events:go_default_library", - "//pkg/util/keymutex:go_default_library", "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/validation:go_default_library", @@ -21,6 +19,8 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/keymutex:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/local/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/local/OWNERS index c995ab66a9e..ef8701c1ac5 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/local/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/local/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali - thockin diff --git a/vendor/k8s.io/kubernetes/pkg/volume/local/local.go b/vendor/k8s.io/kubernetes/pkg/volume/local/local.go index 45249313424..d33e78b63ab 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/local/local.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/local/local.go @@ -30,12 +30,12 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/kubelet/events" - "k8s.io/kubernetes/pkg/util/keymutex" "k8s.io/kubernetes/pkg/util/mount" - stringsutil "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/validation" + "k8s.io/utils/keymutex" + utilstrings "k8s.io/utils/strings" ) const ( @@ -82,6 +82,10 @@ func (plugin *localVolumePlugin) CanSupport(spec *volume.Spec) bool { return (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.Local != nil) } +func (plugin *localVolumePlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *localVolumePlugin) RequiresRemount() bool { return false } @@ -128,7 +132,7 @@ func (plugin *localVolumePlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, _ vo mounter: plugin.host.GetMounter(plugin.GetPluginName()), plugin: plugin, globalPath: globalLocalPath, - MetricsProvider: volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir(pod.UID, stringsutil.EscapeQualifiedNameForDisk(localVolumePluginName), spec.Name())), + MetricsProvider: volume.NewMetricsStatFS(plugin.host.GetPodVolumeDir(pod.UID, utilstrings.EscapeQualifiedName(localVolumePluginName), spec.Name())), }, mountOptions: util.MountOptionFromSpec(spec), readOnly: readOnly, @@ -367,7 +371,7 @@ func (dm *deviceMounter) UnmountDevice(deviceMountPath string) error { // has base mount path: /var/lib/kubelet/plugins/kubernetes.io/local-volume/mounts basemountPath := dm.plugin.generateBlockDeviceBaseGlobalPath() if mount.PathWithinBase(deviceMountPath, basemountPath) { - return util.UnmountPath(deviceMountPath, dm.mounter) + return mount.CleanupMountPoint(deviceMountPath, dm.mounter, false) } return nil @@ -388,7 +392,7 @@ type localVolume struct { } func (l *localVolume) GetPath() string { - return l.plugin.host.GetPodVolumeDir(l.podUID, stringsutil.EscapeQualifiedNameForDisk(localVolumePluginName), l.volName) + return l.plugin.host.GetPodVolumeDir(l.podUID, utilstrings.EscapeQualifiedName(localVolumePluginName), l.volName) } type localVolumeMounter struct { @@ -542,7 +546,7 @@ func (u *localVolumeUnmounter) TearDown() error { // TearDownAt unmounts the bind mount func (u *localVolumeUnmounter) TearDownAt(dir string) error { klog.V(4).Infof("Unmounting volume %q at path %q\n", u.volName, dir) - return util.UnmountMountPoint(dir, u.mounter, true) /* extensiveMountPointCheck = true */ + return mount.CleanupMountPoint(dir, u.mounter, true) /* extensiveMountPointCheck = true */ } // localVolumeMapper implements the BlockVolumeMapper interface for local volumes. @@ -580,7 +584,7 @@ func (u *localVolumeUnmapper) TearDownDevice(mapPath, _ string) error { // GetGlobalMapPath returns global map path and error. // path: plugins/kubernetes.io/kubernetes.io/local-volume/volumeDevices/{volumeName} func (lv *localVolume) GetGlobalMapPath(spec *volume.Spec) (string, error) { - return filepath.Join(lv.plugin.host.GetVolumeDevicePluginDir(stringsutil.EscapeQualifiedNameForDisk(localVolumePluginName)), + return filepath.Join(lv.plugin.host.GetVolumeDevicePluginDir(utilstrings.EscapeQualifiedName(localVolumePluginName)), lv.volName), nil } @@ -589,5 +593,5 @@ func (lv *localVolume) GetGlobalMapPath(spec *volume.Spec) (string, error) { // volName: local-pv-ff0d6d4 func (lv *localVolume) GetPodDeviceMapPath() (string, string) { return lv.plugin.host.GetPodVolumeDeviceDir(lv.podUID, - stringsutil.EscapeQualifiedNameForDisk(localVolumePluginName)), lv.volName + utilstrings.EscapeQualifiedName(localVolumePluginName)), lv.volName } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/nfs/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/nfs/BUILD index 28885d7fb4f..42baf1177e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/nfs/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/nfs/BUILD @@ -15,7 +15,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/nfs", deps = [ "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/recyclerclient:go_default_library", @@ -23,6 +22,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/nfs/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/nfs/OWNERS index 025423a9fb6..c5f0087b760 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/nfs/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/nfs/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - rootfs - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/nfs/nfs.go b/vendor/k8s.io/kubernetes/pkg/volume/nfs/nfs.go index 92384b3db01..5a7eeed98da 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/nfs/nfs.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/nfs/nfs.go @@ -26,10 +26,10 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" - "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/recyclerclient" + utilstrings "k8s.io/utils/strings" ) // This is the primary entrypoint for volume plugins. @@ -84,6 +84,10 @@ func (plugin *nfsPlugin) CanSupport(spec *volume.Spec) bool { (spec.Volume != nil && spec.Volume.NFS != nil) } +func (plugin *nfsPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *nfsPlugin) RequiresRemount() bool { return false } @@ -185,7 +189,7 @@ type nfs struct { func (nfsVolume *nfs) GetPath() string { name := nfsPluginName - return nfsVolume.plugin.host.GetPodVolumeDir(nfsVolume.pod.UID, strings.EscapeQualifiedNameForDisk(name), nfsVolume.volName) + return nfsVolume.plugin.host.GetPodVolumeDir(nfsVolume.pod.UID, utilstrings.EscapeQualifiedName(name), nfsVolume.volName) } // Checks prior to mount operations to verify that the required components (binaries, etc.) @@ -294,7 +298,7 @@ func (c *nfsUnmounter) TearDownAt(dir string) error { // Use extensiveMountPointCheck to consult /proc/mounts. We can't use faster // IsLikelyNotMountPoint (lstat()), since there may be root_squash on the // NFS server and kubelet may not be able to do lstat/stat() there. - return util.UnmountMountPoint(dir, c.mounter, true /* extensiveMountPointCheck */) + return mount.CleanupMountPoint(dir, c.mounter, true /* extensiveMountPointCheck */) } func getVolumeSource(spec *volume.Spec) (*v1.NFSVolumeSource, bool, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/noop_expandable_plugin.go b/vendor/k8s.io/kubernetes/pkg/volume/noop_expandable_plugin.go index 3d3d5e1dfd7..e4052d31387 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/noop_expandable_plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/noop_expandable_plugin.go @@ -48,6 +48,10 @@ func (n *noopExpandableVolumePluginInstance) CanSupport(spec *Spec) bool { return true } +func (n *noopExpandableVolumePluginInstance) IsMigratedToCSI() bool { + return false +} + func (n *noopExpandableVolumePluginInstance) RequiresRemount() bool { return false } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go index 729b3b1a136..84279b6e92e 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go @@ -21,6 +21,7 @@ import ( "net" "strings" "sync" + "time" authenticationv1 "k8s.io/api/authentication/v1" "k8s.io/api/core/v1" @@ -30,11 +31,16 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/validation" clientset "k8s.io/client-go/kubernetes" + storagelisters "k8s.io/client-go/listers/storage/v1beta1" "k8s.io/client-go/tools/record" - csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned" "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume/util/recyclerclient" + "k8s.io/kubernetes/pkg/volume/util/subpath" +) + +var ( + WaitForValidHost = false ) type ProbeOperation uint32 @@ -44,6 +50,9 @@ type ProbeEvent struct { Op ProbeOperation // The operation to the plugin } +// CSIVolumePhaseType stores information about CSI volume path. +type CSIVolumePhaseType string + const ( // Common parameter which can be specified in StorageClass to specify the desired FSType // Provisioners SHOULD implement support for this if they are block device based @@ -53,6 +62,8 @@ const ( ProbeAddOrUpdate ProbeOperation = 1 << iota ProbeRemove + CSIVolumeStaged CSIVolumePhaseType = "staged" + CSIVolumePublished CSIVolumePhaseType = "published" ) // VolumeOptions contains option information about a volume. @@ -83,6 +94,26 @@ type VolumeOptions struct { Parameters map[string]string } +// NodeResizeOptions contain options to be passed for node expansion. +type NodeResizeOptions struct { + VolumeSpec *Spec + + // DevicePath - location of actual device on the node. In case of CSI + // this just could be volumeID + DevicePath string + + // DeviceMountPath location where device is mounted on the node. If volume type + // is attachable - this would be global mount path otherwise + // it would be location where volume was mounted for the pod + DeviceMountPath string + + NewSize resource.Quantity + OldSize resource.Quantity + + // CSIVolumePhase contains volume phase on the node + CSIVolumePhase CSIVolumePhaseType +} + type DynamicPluginProber interface { Init() error @@ -117,6 +148,10 @@ type VolumePlugin interface { // const. CanSupport(spec *Spec) bool + // IsMigratedToCSI tests whether a CSIDriver implements this plugin's + // functionality + IsMigratedToCSI() bool + // RequiresRemount returns true if this plugin requires mount calls to be // reexecuted. Atomically updating volumes, like Downward API, depend on // this to update the contents of the volume. @@ -183,12 +218,6 @@ type DeletableVolumePlugin interface { NewDeleter(spec *Spec) (Deleter, error) } -const ( - // Name of a volume in external cloud that is being provisioned and thus - // should be ignored by rest of Kubernetes. - ProvisionedVolumeName = "placeholder-for-provisioning" -) - // ProvisionableVolumePlugin is an extended interface of VolumePlugin and is // used to create volumes for the cluster. type ProvisionableVolumePlugin interface { @@ -205,6 +234,8 @@ type AttachableVolumePlugin interface { DeviceMountableVolumePlugin NewAttacher() (Attacher, error) NewDetacher() (Detacher, error) + // CanAttach tests if provided volume spec is attachable + CanAttach(spec *Spec) bool } // DeviceMountableVolumePlugin is an extended interface of VolumePlugin and is used @@ -217,18 +248,20 @@ type DeviceMountableVolumePlugin interface { } // ExpandableVolumePlugin is an extended interface of VolumePlugin and is used for volumes that can be -// expanded +// expanded via control-plane ExpandVolumeDevice call. type ExpandableVolumePlugin interface { VolumePlugin ExpandVolumeDevice(spec *Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error) RequiresFSResize() bool } -// FSResizableVolumePlugin is an extension of ExpandableVolumePlugin and is used for volumes (flex) -// that require extra steps on nodes for expansion to complete -type FSResizableVolumePlugin interface { - ExpandableVolumePlugin - ExpandFS(spec *Spec, devicePath, deviceMountPath string, newSize, oldSize resource.Quantity) error +// NodeExpandableVolumePlugin is an expanded interface of VolumePlugin and is used for volumes that +// require expansion on the node via NodeExpand call. +type NodeExpandableVolumePlugin interface { + VolumePlugin + RequiresFSResize() bool + // NodeExpand expands volume on given deviceMountPath and returns true if resize is successful. + NodeExpand(resizeOptions NodeResizeOptions) (bool, error) } // VolumePluginWithAttachLimits is an extended interface of VolumePlugin that restricts number of @@ -277,6 +310,32 @@ type BlockVolumePlugin interface { ConstructBlockVolumeSpec(podUID types.UID, volumeName, volumePath string) (*Spec, error) } +// TODO(#14217) +// As part of the Volume Host refactor we are starting to create Volume Hosts +// for specific hosts. New methods for each specific host can be added here. +// Currently consumers will do type assertions to get the specific type of Volume +// Host; however, the end result should be that specific Volume Hosts are passed +// to the specific functions they are needed in (instead of using a catch-all +// VolumeHost interface) + +// KubeletVolumeHost is a Kubelet specific interface that plugins can use to access the kubelet. +type KubeletVolumeHost interface { + // SetKubeletError lets plugins set an error on the Kubelet runtime status + // that will cause the Kubelet to post NotReady status with the error message provided + SetKubeletError(err error) +} + +// AttachDetachVolumeHost is a AttachDetach Controller specific interface that plugins can use +// to access methods on the Attach Detach Controller. +type AttachDetachVolumeHost interface { + // CSINodeLister returns the informer lister for the CSINode API Object + CSINodeLister() storagelisters.CSINodeLister + + // IsAttachDetachController is an interface marker to strictly tie AttachDetachVolumeHost + // to the attachDetachController + IsAttachDetachController() bool +} + // VolumeHost is an interface that plugins can use to access the kubelet. type VolumeHost interface { // GetPluginDir returns the absolute path to a directory under which @@ -316,9 +375,6 @@ type VolumeHost interface { // GetKubeClient returns a client interface GetKubeClient() clientset.Interface - // GetCSIClient returns a client interface to csi.storage.k8s.io - GetCSIClient() csiclientset.Interface - // NewWrapperMounter finds an appropriate plugin with which to handle // the provided spec. This is used to implement volume plugins which // "wrap" other plugins. For example, the "secret" volume is @@ -363,6 +419,9 @@ type VolumeHost interface { // Returns the event recorder of kubelet. GetEventRecorder() record.EventRecorder + + // Returns an interface that should be used to execute subpath operations + GetSubpather() subpath.Interface } // VolumePluginMgr tracks registered plugins. @@ -497,9 +556,26 @@ func NewSpecFromPersistentVolume(pv *v1.PersistentVolume, readOnly bool) *Spec { // This must be called exactly once before any New* methods are called on any // plugins. func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, prober DynamicPluginProber, host VolumeHost) error { + if host.GetHostName() == "" && WaitForValidHost { + for { + pm.mutex.Lock() + if pm.Host != nil && pm.Host.GetHostName() != "" { + pm.mutex.Unlock() + break + } + pm.mutex.Unlock() + klog.Infof("Waiting for volume plugins to be initialized") + time.Sleep(time.Second) + } + } + pm.mutex.Lock() defer pm.mutex.Unlock() + if pm.Host != nil { + return nil + } + pm.Host = host if prober == nil { @@ -597,6 +673,37 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { return matches[0], nil } +// IsPluginMigratableBySpec looks for a plugin that can support a given volume +// specification and whether that plugin is Migratable. If no plugins can +// support or more than one plugin can support it, return error. +func (pm *VolumePluginMgr) IsPluginMigratableBySpec(spec *Spec) (bool, error) { + pm.mutex.Lock() + defer pm.mutex.Unlock() + + if spec == nil { + return false, fmt.Errorf("could not find if plugin is migratable because volume spec is nil") + } + + matchedPluginNames := []string{} + matches := []VolumePlugin{} + for k, v := range pm.plugins { + if v.CanSupport(spec) { + matchedPluginNames = append(matchedPluginNames, k) + matches = append(matches, v) + } + } + + if len(matches) == 0 { + // Not a known plugin (flex) in which case it is not migratable + return false, nil + } + if len(matches) > 1 { + return false, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ",")) + } + + return matches[0].IsMigratedToCSI(), nil +} + // FindPluginByName fetches a plugin by name or by legacy name. If no plugin // is found, returns error. func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) { @@ -784,7 +891,9 @@ func (pm *VolumePluginMgr) FindAttachablePluginBySpec(spec *Spec) (AttachableVol return nil, err } if attachableVolumePlugin, ok := volumePlugin.(AttachableVolumePlugin); ok { - return attachableVolumePlugin, nil + if attachableVolumePlugin.CanAttach(spec) { + return attachableVolumePlugin, nil + } } return nil, nil } @@ -835,10 +944,10 @@ func (pm *VolumePluginMgr) FindExpandablePluginBySpec(spec *Spec) (ExpandableVol if spec.IsKubeletExpandable() { // for kubelet expandable volumes, return a noop plugin that // returns success for expand on the controller - klog.Warningf("FindExpandablePluginBySpec(%s) -> returning noopExpandableVolumePluginInstance", spec.Name()) + klog.V(4).Infof("FindExpandablePluginBySpec(%s) -> returning noopExpandableVolumePluginInstance", spec.Name()) return &noopExpandableVolumePluginInstance{spec}, nil } - klog.Warningf("FindExpandablePluginBySpec(%s) -> err:%v", spec.Name(), err) + klog.V(4).Infof("FindExpandablePluginBySpec(%s) -> err:%v", spec.Name(), err) return nil, err } @@ -887,26 +996,26 @@ func (pm *VolumePluginMgr) FindMapperPluginByName(name string) (BlockVolumePlugi return nil, nil } -// FindFSResizablePluginBySpec fetches a persistent volume plugin by spec -func (pm *VolumePluginMgr) FindFSResizablePluginBySpec(spec *Spec) (FSResizableVolumePlugin, error) { +// FindNodeExpandablePluginBySpec fetches a persistent volume plugin by spec +func (pm *VolumePluginMgr) FindNodeExpandablePluginBySpec(spec *Spec) (NodeExpandableVolumePlugin, error) { volumePlugin, err := pm.FindPluginBySpec(spec) if err != nil { return nil, err } - if fsResizablePlugin, ok := volumePlugin.(FSResizableVolumePlugin); ok { + if fsResizablePlugin, ok := volumePlugin.(NodeExpandableVolumePlugin); ok { return fsResizablePlugin, nil } return nil, nil } -// FindFSResizablePluginByName fetches a persistent volume plugin by name -func (pm *VolumePluginMgr) FindFSResizablePluginByName(name string) (FSResizableVolumePlugin, error) { +// FindNodeExpandablePluginByName fetches a persistent volume plugin by name +func (pm *VolumePluginMgr) FindNodeExpandablePluginByName(name string) (NodeExpandableVolumePlugin, error) { volumePlugin, err := pm.FindPluginByName(name) if err != nil { return nil, err } - if fsResizablePlugin, ok := volumePlugin.(FSResizableVolumePlugin); ok { + if fsResizablePlugin, ok := volumePlugin.(NodeExpandableVolumePlugin); ok { return fsResizablePlugin, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/projected/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/projected/BUILD index 65883f906b3..d3685747bf5 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/projected/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/projected/BUILD @@ -36,7 +36,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/projected", deps = [ "//pkg/features:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/configmap:go_default_library", "//pkg/volume/downwardapi:go_default_library", @@ -50,6 +49,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/projected/projected.go b/vendor/k8s.io/kubernetes/pkg/volume/projected/projected.go index e93588ce676..e2da1bec276 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/projected/projected.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/projected/projected.go @@ -26,15 +26,14 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/klog" "k8s.io/kubernetes/pkg/features" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/configmap" "k8s.io/kubernetes/pkg/volume/downwardapi" "k8s.io/kubernetes/pkg/volume/secret" volumeutil "k8s.io/kubernetes/pkg/volume/util" - - "k8s.io/klog" + utilstrings "k8s.io/utils/strings" ) // ProbeVolumePlugins is the entry point for plugin detection in a package. @@ -67,7 +66,7 @@ func wrappedVolumeSpec() volume.Spec { } func getPath(uid types.UID, volName string, host volume.VolumeHost) string { - return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedNameForDisk(projectedPluginName), volName) + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(projectedPluginName), volName) } func (plugin *projectedPlugin) Init(host volume.VolumeHost) error { @@ -96,6 +95,10 @@ func (plugin *projectedPlugin) CanSupport(spec *volume.Spec) bool { return spec.Volume != nil && spec.Volume.Projected != nil } +func (plugin *projectedPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *projectedPlugin) RequiresRemount() bool { return true } @@ -111,10 +114,11 @@ func (plugin *projectedPlugin) SupportsBulkVolumeVerification() bool { func (plugin *projectedPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts volume.VolumeOptions) (volume.Mounter, error) { return &projectedVolumeMounter{ projectedVolume: &projectedVolume{ - volName: spec.Name(), - sources: spec.Volume.Projected.Sources, - podUID: pod.UID, - plugin: plugin, + volName: spec.Name(), + sources: spec.Volume.Projected.Sources, + podUID: pod.UID, + plugin: plugin, + MetricsProvider: volume.NewCachedMetrics(volume.NewMetricsDu(getPath(pod.UID, spec.Name(), plugin.host))), }, source: *spec.Volume.Projected, pod: pod, @@ -125,9 +129,10 @@ func (plugin *projectedPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts v func (plugin *projectedPlugin) NewUnmounter(volName string, podUID types.UID) (volume.Unmounter, error) { return &projectedVolumeUnmounter{ &projectedVolume{ - volName: volName, - podUID: podUID, - plugin: plugin, + volName: volName, + podUID: podUID, + plugin: plugin, + MetricsProvider: volume.NewCachedMetrics(volume.NewMetricsDu(getPath(podUID, volName, plugin.host))), }, }, nil } @@ -148,7 +153,7 @@ type projectedVolume struct { sources []v1.VolumeProjection podUID types.UID plugin *projectedPlugin - volume.MetricsNil + volume.MetricsProvider } var _ volume.Volume = &projectedVolume{} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/secret/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/secret/BUILD index d44d59dd614..288808826ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/secret/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/secret/BUILD @@ -15,7 +15,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/secret", deps = [ "//pkg/util/mount:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -23,6 +22,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/secret/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/secret/OWNERS index baaff6ff460..93c0d5e773d 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/secret/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/secret/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - pmorie - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/secret/secret.go b/vendor/k8s.io/kubernetes/pkg/volume/secret/secret.go index 14485181f92..b548acfb3c0 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/secret/secret.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/secret/secret.go @@ -25,9 +25,9 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog" "k8s.io/kubernetes/pkg/util/mount" - "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + utilstrings "k8s.io/utils/strings" ) // ProbeVolumePlugins is the entry point for plugin detection in a package. @@ -54,7 +54,7 @@ func wrappedVolumeSpec() volume.Spec { } func getPath(uid types.UID, volName string, host volume.VolumeHost) string { - return host.GetPodVolumeDir(uid, strings.EscapeQualifiedNameForDisk(secretPluginName), volName) + return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(secretPluginName), volName) } func (plugin *secretPlugin) Init(host volume.VolumeHost) error { @@ -80,6 +80,10 @@ func (plugin *secretPlugin) CanSupport(spec *volume.Spec) bool { return spec.Volume != nil && spec.Volume.Secret != nil } +func (plugin *secretPlugin) IsMigratedToCSI() bool { + return false +} + func (plugin *secretPlugin) RequiresRemount() bool { return true } @@ -281,7 +285,7 @@ func MakePayload(mappings []v1.KeyToPath, secret *v1.Secret, defaultMode *int32, if optional { continue } - errMsg := "references non-existent secret key" + errMsg := fmt.Sprintf("references non-existent secret key: %s", ktp.Key) klog.Errorf(errMsg) return nil, fmt.Errorf(errMsg) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/BUILD index 8ccd019eb05..0dec3818138 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/BUILD @@ -9,7 +9,6 @@ go_library( "device_util_linux.go", "device_util_unsupported.go", "doc.go", - "error.go", "finalizer.go", "io_util.go", "metrics.go", @@ -23,10 +22,8 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core/v1/helper:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/resizefs:go_default_library", - "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util/types:go_default_library", "//pkg/volume/util/volumepathhandler:go_default_library", @@ -43,6 +40,7 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/strings:go_default_library", ], ) @@ -52,7 +50,6 @@ go_test( "atomic_writer_test.go", "attach_limit_test.go", "device_util_linux_test.go", - "main_test.go", "nested_volumes_test.go", "resize_util_test.go", "util_test.go", @@ -61,8 +58,6 @@ go_test( deps = [ "//pkg/apis/core/install:go_default_library", "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/features:go_default_library", - "//pkg/kubelet/apis:go_default_library", "//pkg/util/slice:go_default_library", "//pkg/volume:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -70,8 +65,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//staging/src/k8s.io/client-go/util/testing:go_default_library", @@ -95,6 +88,7 @@ filegroup( "//pkg/volume/util/nestedpendingoperations:all-srcs", "//pkg/volume/util/operationexecutor:all-srcs", "//pkg/volume/util/recyclerclient:all-srcs", + "//pkg/volume/util/subpath:all-srcs", "//pkg/volume/util/types:all-srcs", "//pkg/volume/util/volumepathhandler:all-srcs", ], diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/util/OWNERS old mode 100755 new mode 100644 index 7a41ec511a7..9485dfe9514 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali reviewers: diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/attach_limit.go b/vendor/k8s.io/kubernetes/pkg/volume/util/attach_limit.go index 8325dbf755b..943357b6538 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/attach_limit.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/attach_limit.go @@ -40,6 +40,13 @@ const ( // GCEVolumeLimitKey stores resource name that will store volume limits for GCE node GCEVolumeLimitKey = "attachable-volumes-gce-pd" + // CinderVolumeLimitKey contains Volume limit key for Cinder + CinderVolumeLimitKey = "attachable-volumes-cinder" + // DefaultMaxCinderVolumes defines the maximum number of PD Volumes for Cinder + // For Openstack we are keeping this to a high enough value so as depending on backend + // cluster admins can configure it. + DefaultMaxCinderVolumes = 256 + // CSIAttachLimitPrefix defines prefix used for CSI volumes CSIAttachLimitPrefix = "attachable-volumes-csi-" diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/device_util_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/device_util_linux.go index 66e8564915b..6933d4b4286 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/device_util_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/device_util_linux.go @@ -21,10 +21,12 @@ package util import ( "errors" "fmt" - "k8s.io/klog" + "os" "path" "strconv" "strings" + + "k8s.io/klog" ) // FindMultipathDeviceForDevice given a device name like /dev/sdx, find the devicemapper parent @@ -98,6 +100,9 @@ func (handler *deviceHandler) GetISCSIPortalHostMapForTarget(targetIqn string) ( sysPath := "/sys/class/iscsi_host" hostDirs, err := io.ReadDir(sysPath) if err != nil { + if os.IsNotExist(err) { + return portalHostMap, nil + } return nil, err } for _, hostDir := range hostDirs { @@ -135,7 +140,8 @@ func (handler *deviceHandler) GetISCSIPortalHostMapForTarget(targetIqn string) ( targetNamePath := sessionPath + "/iscsi_session/" + sessionName + "/targetname" targetName, err := io.ReadFile(targetNamePath) if err != nil { - return nil, err + klog.Infof("Failed to process session %s, assuming this session is unavailable: %s", sessionName, err) + continue } // Ignore hosts that don't matchthe target we were looking for. @@ -147,7 +153,8 @@ func (handler *deviceHandler) GetISCSIPortalHostMapForTarget(targetIqn string) ( // for the iSCSI connection. dirs2, err := io.ReadDir(sessionPath) if err != nil { - return nil, err + klog.Infof("Failed to process session %s, assuming this session is unavailable: %s", sessionName, err) + continue } for _, dir2 := range dirs2 { // Skip over files that aren't the connection @@ -164,25 +171,29 @@ func (handler *deviceHandler) GetISCSIPortalHostMapForTarget(targetIqn string) ( addrPath := connectionPath + "/address" addr, err := io.ReadFile(addrPath) if err != nil { - return nil, err + klog.Infof("Failed to process connection %s, assuming this connection is unavailable: %s", dirName, err) + continue } portPath := connectionPath + "/port" port, err := io.ReadFile(portPath) if err != nil { - return nil, err + klog.Infof("Failed to process connection %s, assuming this connection is unavailable: %s", dirName, err) + continue } persistentAddrPath := connectionPath + "/persistent_address" persistentAddr, err := io.ReadFile(persistentAddrPath) if err != nil { - return nil, err + klog.Infof("Failed to process connection %s, assuming this connection is unavailable: %s", dirName, err) + continue } persistentPortPath := connectionPath + "/persistent_port" persistentPort, err := io.ReadFile(persistentPortPath) if err != nil { - return nil, err + klog.Infof("Failed to process connection %s, assuming this connection is unavailable: %s", dirName, err) + continue } // Add entries to the map for both the current and persistent portals diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/OWNERS index 4739819ce0c..8bfe4a88f49 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/BUILD index 3b2cd65d5d7..314dcaa8c32 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/kubelet/events:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", + "//pkg/volume/csi:go_default_library", "//pkg/volume/util:go_default_library", "//pkg/volume/util/nestedpendingoperations:go_default_library", "//pkg/volume/util/types:go_default_library", @@ -27,9 +28,12 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//staging/src/k8s.io/cloud-provider/volume/errors:go_default_library", + "//staging/src/k8s.io/csi-translation-lib:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/OWNERS index 4739819ce0c..8bfe4a88f49 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/OWNERS @@ -1,2 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - saad-ali diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go index 268a9edaf92..4061ca1d768 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go @@ -192,6 +192,12 @@ type ActualStateOfWorldAttacherUpdater interface { // volumes. See issue 29695. MarkVolumeAsAttached(volumeName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName, devicePath string) error + // Marks the specified volume as *possibly* attached to the specified node. + // If an attach operation fails, the attach/detach controller does not know for certain if the volume is attached or not. + // If the volume name is supplied, that volume name will be used. If not, the + // volume name is computed using the result from querying the plugin. + MarkVolumeAsUncertain(volumeName v1.UniqueVolumeName, volumeSpec *volume.Spec, nodeName types.NodeName) error + // Marks the specified volume as detached from the specified node MarkVolumeAsDetached(volumeName v1.UniqueVolumeName, nodeName types.NodeName) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go index e0123d5611a..9c9c76920ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go @@ -17,6 +17,7 @@ limitations under the License. package operationexecutor import ( + goerrors "errors" "fmt" "path" "strings" @@ -26,15 +27,19 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" + volerr "k8s.io/cloud-provider/volume/errors" + csilib "k8s.io/csi-translation-lib" "k8s.io/klog" expandcache "k8s.io/kubernetes/pkg/controller/volume/expand/cache" "k8s.io/kubernetes/pkg/features" kevents "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" + "k8s.io/kubernetes/pkg/volume/csi" "k8s.io/kubernetes/pkg/volume/util" volumetypes "k8s.io/kubernetes/pkg/volume/util/types" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" @@ -287,6 +292,9 @@ func (og *operationGenerator) GenerateBulkVolumeVerifyFunc( func (og *operationGenerator) GenerateAttachVolumeFunc( volumeToAttach VolumeToAttach, actualStateOfWorld ActualStateOfWorldAttacherUpdater) (volumetypes.GeneratedOperations, error) { + var err error + var attachableVolumePlugin volume.AttachableVolumePlugin + // Get attacher plugin eventRecorderFunc := func(err *error) { if *err != nil { @@ -296,11 +304,35 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( } } - attachableVolumePlugin, err := - og.volumePluginMgr.FindAttachablePluginBySpec(volumeToAttach.VolumeSpec) - if err != nil || attachableVolumePlugin == nil { + originalSpec := volumeToAttach.VolumeSpec + nu, err := nodeUsingCSIPlugin(og, volumeToAttach.VolumeSpec, volumeToAttach.NodeName) + if err != nil { eventRecorderFunc(&err) - return volumetypes.GeneratedOperations{}, volumeToAttach.GenerateErrorDetailed("AttachVolume.FindAttachablePluginBySpec failed", err) + return volumetypes.GeneratedOperations{}, volumeToAttach.GenerateErrorDetailed("AttachVolume.NodeUsingCSIPlugin failed", err) + } + + // useCSIPlugin will check both CSIMigration and the plugin specific feature gate + if useCSIPlugin(og.volumePluginMgr, volumeToAttach.VolumeSpec) && nu { + // The volume represented by this spec is CSI and thus should be migrated + attachableVolumePlugin, err = og.volumePluginMgr.FindAttachablePluginByName(csi.CSIPluginName) + if err != nil || attachableVolumePlugin == nil { + eventRecorderFunc(&err) + return volumetypes.GeneratedOperations{}, volumeToAttach.GenerateErrorDetailed("AttachVolume.FindAttachablePluginByName failed", err) + } + + csiSpec, err := translateSpec(volumeToAttach.VolumeSpec) + if err != nil { + return volumetypes.GeneratedOperations{}, volumeToAttach.GenerateErrorDetailed("AttachVolume.TranslateSpec failed", err) + } + + volumeToAttach.VolumeSpec = csiSpec + } else { + attachableVolumePlugin, err = + og.volumePluginMgr.FindAttachablePluginBySpec(volumeToAttach.VolumeSpec) + if err != nil || attachableVolumePlugin == nil { + eventRecorderFunc(&err) + return volumetypes.GeneratedOperations{}, volumeToAttach.GenerateErrorDetailed("AttachVolume.FindAttachablePluginBySpec failed", err) + } } volumeAttacher, newAttacherErr := attachableVolumePlugin.NewAttacher() @@ -315,10 +347,10 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( volumeToAttach.VolumeSpec, volumeToAttach.NodeName) if attachErr != nil { - if derr, ok := attachErr.(*util.DanglingAttachError); ok { + if derr, ok := attachErr.(*volerr.DanglingAttachError); ok { addErr := actualStateOfWorld.MarkVolumeAsAttached( v1.UniqueVolumeName(""), - volumeToAttach.VolumeSpec, + originalSpec, derr.CurrentNode, derr.DevicePath) @@ -326,6 +358,12 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( klog.Errorf("AttachVolume.MarkVolumeAsAttached failed to fix dangling volume error for volume %q with %s", volumeToAttach.VolumeName, addErr) } + } else { + addErr := actualStateOfWorld.MarkVolumeAsUncertain( + v1.UniqueVolumeName(""), originalSpec, volumeToAttach.NodeName) + if addErr != nil { + klog.Errorf("AttachVolume.MarkVolumeAsUncertain fail to add the volume %q to actual state with %s", volumeToAttach.VolumeName, addErr) + } } // On failure, return error. Caller will log and retry. return volumeToAttach.GenerateError("AttachVolume.Attach failed", attachErr) @@ -340,7 +378,7 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( // Update actual state of world addVolumeNodeErr := actualStateOfWorld.MarkVolumeAsAttached( - v1.UniqueVolumeName(""), volumeToAttach.VolumeSpec, volumeToAttach.NodeName, devicePath) + v1.UniqueVolumeName(""), originalSpec, volumeToAttach.NodeName, devicePath) if addVolumeNodeErr != nil { // On failure, return error. Caller will log and retry. return volumeToAttach.GenerateError("AttachVolume.MarkVolumeAsAttached failed", addVolumeNodeErr) @@ -371,10 +409,31 @@ func (og *operationGenerator) GenerateDetachVolumeFunc( if volumeToDetach.VolumeSpec != nil { // Get attacher plugin - attachableVolumePlugin, err = - og.volumePluginMgr.FindAttachablePluginBySpec(volumeToDetach.VolumeSpec) - if err != nil || attachableVolumePlugin == nil { - return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.FindAttachablePluginBySpec failed", err) + nu, err := nodeUsingCSIPlugin(og, volumeToDetach.VolumeSpec, volumeToDetach.NodeName) + if err != nil { + return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.NodeUsingCSIPlugin failed", err) + } + + // useCSIPlugin will check both CSIMigration and the plugin specific feature gate + if useCSIPlugin(og.volumePluginMgr, volumeToDetach.VolumeSpec) && nu { + // The volume represented by this spec is CSI and thus should be migrated + attachableVolumePlugin, err = og.volumePluginMgr.FindAttachablePluginByName(csi.CSIPluginName) + if err != nil || attachableVolumePlugin == nil { + return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.FindAttachablePluginBySpec failed", err) + } + + csiSpec, err := translateSpec(volumeToDetach.VolumeSpec) + if err != nil { + return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.TranslateSpec failed", err) + } + + volumeToDetach.VolumeSpec = csiSpec + } else { + attachableVolumePlugin, err = + og.volumePluginMgr.FindAttachablePluginBySpec(volumeToDetach.VolumeSpec) + if err != nil || attachableVolumePlugin == nil { + return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.FindAttachablePluginBySpec failed", err) + } } volumeName, err = @@ -390,10 +449,12 @@ func (og *operationGenerator) GenerateDetachVolumeFunc( if err != nil { return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.SplitUniqueName failed", err) } + attachableVolumePlugin, err = og.volumePluginMgr.FindAttachablePluginByName(pluginName) - if err != nil { - return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.FindAttachablePluginBySpec failed", err) + if err != nil || attachableVolumePlugin == nil { + return volumetypes.GeneratedOperations{}, volumeToDetach.GenerateErrorDetailed("DetachVolume.FindAttachablePluginByName failed", err) } + } if pluginName == "" { @@ -450,6 +511,17 @@ func (og *operationGenerator) GenerateMountVolumeFunc( } mountVolumeFunc := func() (error, error) { + originalSpec := volumeToMount.VolumeSpec + // Get mounter plugin + if useCSIPlugin(og.volumePluginMgr, volumeToMount.VolumeSpec) { + csiSpec, err := translateSpec(volumeToMount.VolumeSpec) + if err != nil { + return volumeToMount.GenerateError("MountVolume.TranslateSpec failed", err) + } + volumeToMount.VolumeSpec = csiSpec + } + + volumePlugin, err := og.volumePluginMgr.FindPluginBySpec(volumeToMount.VolumeSpec) if err != nil || volumePlugin == nil { return volumeToMount.GenerateError("MountVolume.FindPluginBySpec failed", err) } @@ -510,6 +582,12 @@ func (og *operationGenerator) GenerateMountVolumeFunc( klog.Infof(volumeToMount.GenerateMsgDetailed("MountVolume.WaitForAttach succeeded", fmt.Sprintf("DevicePath %q", devicePath))) } + var resizeDone bool + var resizeError error + resizeOptions := volume.NodeResizeOptions{ + DevicePath: devicePath, + } + if volumeDeviceMounter != nil { deviceMountPath, err := volumeDeviceMounter.GetDeviceMountPath(volumeToMount.VolumeSpec) @@ -538,12 +616,16 @@ func (og *operationGenerator) GenerateMountVolumeFunc( return volumeToMount.GenerateError("MountVolume.MarkDeviceAsMounted failed", markDeviceMountedErr) } + resizeOptions.DeviceMountPath = deviceMountPath + resizeOptions.CSIVolumePhase = volume.CSIVolumeStaged + // resizeFileSystem will resize the file system if user has requested a resize of // underlying persistent volume and is allowed to do so. - resizeSimpleError, resizeDetailedError := og.resizeFileSystem(volumeToMount, devicePath, deviceMountPath, volumePluginName) + resizeDone, resizeError = og.resizeFileSystem(volumeToMount, resizeOptions, volumePluginName) - if resizeSimpleError != nil || resizeDetailedError != nil { - return resizeSimpleError, resizeDetailedError + if resizeError != nil { + klog.Errorf("MountVolume.resizeFileSystem failed with %v", resizeError) + return volumeToMount.GenerateError("MountVolume.MountDevice failed while expanding volume", resizeError) } } @@ -569,6 +651,20 @@ func (og *operationGenerator) GenerateMountVolumeFunc( verbosity = klog.Level(4) } klog.V(verbosity).Infof(detailedMsg) + resizeOptions.DeviceMountPath = volumeMounter.GetPath() + resizeOptions.CSIVolumePhase = volume.CSIVolumePublished + + // We need to call resizing here again in case resizing was not done during device mount. There could be + // two reasons of that: + // - Volume does not support DeviceMounter interface. + // - In case of CSI the volume does not have node stage_unstage capability. + if !resizeDone { + resizeDone, resizeError = og.resizeFileSystem(volumeToMount, resizeOptions, volumePluginName) + if resizeError != nil { + klog.Errorf("MountVolume.resizeFileSystem failed with %v", resizeError) + return volumeToMount.GenerateError("MountVolume.Setup failed while expanding volume", resizeError) + } + } // Update actual state of world markVolMountedErr := actualStateOfWorld.MarkVolumeAsMounted( @@ -579,7 +675,7 @@ func (og *operationGenerator) GenerateMountVolumeFunc( nil, volumeToMount.OuterVolumeSpecName, volumeToMount.VolumeGidValue, - volumeToMount.VolumeSpec) + originalSpec) if markVolMountedErr != nil { // On failure, return error. Caller will log and retry. return volumeToMount.GenerateError("MountVolume.MarkVolumeAsMounted failed", markVolMountedErr) @@ -601,15 +697,15 @@ func (og *operationGenerator) GenerateMountVolumeFunc( } } -func (og *operationGenerator) resizeFileSystem(volumeToMount VolumeToMount, devicePath, deviceMountPath, pluginName string) (simpleErr, detailedErr error) { +func (og *operationGenerator) resizeFileSystem(volumeToMount VolumeToMount, rsOpts volume.NodeResizeOptions, pluginName string) (bool, error) { if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) { klog.V(4).Infof("Resizing is not enabled for this volume %s", volumeToMount.VolumeName) - return nil, nil + return true, nil } // Get expander, if possible expandableVolumePlugin, _ := - og.volumePluginMgr.FindFSResizablePluginBySpec(volumeToMount.VolumeSpec) + og.volumePluginMgr.FindNodeExpandablePluginBySpec(volumeToMount.VolumeSpec) if expandableVolumePlugin != nil && expandableVolumePlugin.RequiresFSResize() && @@ -618,7 +714,7 @@ func (og *operationGenerator) resizeFileSystem(volumeToMount VolumeToMount, devi pvc, err := og.kubeClient.CoreV1().PersistentVolumeClaims(pv.Spec.ClaimRef.Namespace).Get(pv.Spec.ClaimRef.Name, metav1.GetOptions{}) if err != nil { // Return error rather than leave the file system un-resized, caller will log and retry - return volumeToMount.GenerateError("MountVolume.resizeFileSystem get PVC failed", err) + return false, fmt.Errorf("MountVolume.resizeFileSystem get PVC failed : %v", err) } pvcStatusCap := pvc.Status.Capacity[v1.ResourceStorage] @@ -631,10 +727,20 @@ func (og *operationGenerator) resizeFileSystem(volumeToMount VolumeToMount, devi simpleMsg, detailedMsg := volumeToMount.GenerateMsg("MountVolume.resizeFileSystem failed", "requested read-only file system") klog.Warningf(detailedMsg) og.recorder.Eventf(volumeToMount.Pod, v1.EventTypeWarning, kevents.FileSystemResizeFailed, simpleMsg) - return nil, nil + return true, nil } - if resizeErr := expandableVolumePlugin.ExpandFS(volumeToMount.VolumeSpec, devicePath, deviceMountPath, pvSpecCap, pvcStatusCap); resizeErr != nil { - return volumeToMount.GenerateError("MountVolume.resizeFileSystem failed", resizeErr) + rsOpts.VolumeSpec = volumeToMount.VolumeSpec + rsOpts.NewSize = pvSpecCap + rsOpts.OldSize = pvcStatusCap + resizeDone, resizeErr := expandableVolumePlugin.NodeExpand(rsOpts) + if resizeErr != nil { + return false, fmt.Errorf("MountVolume.resizeFileSystem failed : %v", resizeErr) + } + // Volume resizing is not done but it did not error out. This could happen if a CSI volume + // does not have node stage_unstage capability but was asked to resize the volume before + // node publish. In which case - we must retry resizing after node publish. + if !resizeDone { + return false, nil } simpleMsg, detailedMsg := volumeToMount.GenerateMsg("MountVolume.resizeFileSystem succeeded", "") og.recorder.Eventf(volumeToMount.Pod, v1.EventTypeNormal, kevents.FileSystemResizeSuccess, simpleMsg) @@ -643,25 +749,31 @@ func (og *operationGenerator) resizeFileSystem(volumeToMount VolumeToMount, devi err = util.MarkFSResizeFinished(pvc, pv.Spec.Capacity, og.kubeClient) if err != nil { // On retry, resizeFileSystem will be called again but do nothing - return volumeToMount.GenerateError("MountVolume.resizeFileSystem update PVC status failed", err) + return false, fmt.Errorf("MountVolume.resizeFileSystem update PVC status failed : %v", err) } - return nil, nil + return true, nil } } - return nil, nil + return true, nil } func (og *operationGenerator) GenerateUnmountVolumeFunc( volumeToUnmount MountedVolume, actualStateOfWorld ActualStateOfWorldMounterUpdater, podsDir string) (volumetypes.GeneratedOperations, error) { + + var pluginName string + if volumeToUnmount.VolumeSpec != nil && useCSIPlugin(og.volumePluginMgr, volumeToUnmount.VolumeSpec) { + pluginName = csi.CSIPluginName + } else { + pluginName = volumeToUnmount.PluginName + } + // Get mountable plugin - volumePlugin, err := - og.volumePluginMgr.FindPluginByName(volumeToUnmount.PluginName) + volumePlugin, err := og.volumePluginMgr.FindPluginByName(pluginName) if err != nil || volumePlugin == nil { return volumetypes.GeneratedOperations{}, volumeToUnmount.GenerateErrorDetailed("UnmountVolume.FindPluginByName failed", err) } - volumeUnmounter, newUnmounterErr := volumePlugin.NewUnmounter( volumeToUnmount.InnerVolumeSpecName, volumeToUnmount.PodUID) if newUnmounterErr != nil { @@ -669,11 +781,11 @@ func (og *operationGenerator) GenerateUnmountVolumeFunc( } unmountVolumeFunc := func() (error, error) { - mounter := og.volumePluginMgr.Host.GetMounter(volumeToUnmount.PluginName) + subpather := og.volumePluginMgr.Host.GetSubpather() // Remove all bind-mounts for subPaths podDir := path.Join(podsDir, string(volumeToUnmount.PodUID)) - if err := mounter.CleanSubPaths(podDir, volumeToUnmount.InnerVolumeSpecName); err != nil { + if err := subpather.CleanSubPaths(podDir, volumeToUnmount.InnerVolumeSpecName); err != nil { return volumeToUnmount.GenerateError("error cleaning subPath mounts", err) } @@ -716,12 +828,26 @@ func (og *operationGenerator) GenerateUnmountDeviceFunc( deviceToDetach AttachedVolume, actualStateOfWorld ActualStateOfWorldMounterUpdater, mounter mount.Interface) (volumetypes.GeneratedOperations, error) { + + var pluginName string + if useCSIPlugin(og.volumePluginMgr, deviceToDetach.VolumeSpec) { + pluginName = csi.CSIPluginName + csiSpec, err := translateSpec(deviceToDetach.VolumeSpec) + if err != nil { + return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.TranslateSpec failed", err) + } + deviceToDetach.VolumeSpec = csiSpec + } else { + pluginName = deviceToDetach.PluginName + } + // Get DeviceMounter plugin deviceMountableVolumePlugin, err := - og.volumePluginMgr.FindDeviceMountablePluginByName(deviceToDetach.PluginName) + og.volumePluginMgr.FindDeviceMountablePluginByName(pluginName) if err != nil || deviceMountableVolumePlugin == nil { return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.FindDeviceMountablePluginByName failed", err) } + volumeDeviceUmounter, err := deviceMountableVolumePlugin.NewDeviceUnmounter() if err != nil { return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.NewDeviceUmounter failed", err) @@ -766,7 +892,7 @@ func (og *operationGenerator) GenerateUnmountDeviceFunc( if deviceOpened { return deviceToDetach.GenerateError( "UnmountDevice failed", - fmt.Errorf("the device is in use when it was no longer expected to be in use")) + goerrors.New("the device is in use when it was no longer expected to be in use")) } klog.Infof(deviceToDetach.GenerateMsg("UnmountDevice succeeded", "")) @@ -796,7 +922,7 @@ func (og *operationGenerator) GenerateUnmountDeviceFunc( // After setup is done, create symbolic links on both global map path and pod // device map path. Once symbolic links are created, take fd lock by // loopback for the device to avoid silent volume replacement. This lock -// will be realased once no one uses the device. +// will be released once no one uses the device. // If all steps are completed, the volume is marked as mounted. func (og *operationGenerator) GenerateMapVolumeFunc( waitForAttachTimeout time.Duration, @@ -873,7 +999,7 @@ func (og *operationGenerator) GenerateMapVolumeFunc( devicePath = pluginDevicePath } if len(devicePath) == 0 { - return volumeToMount.GenerateError("MapVolume failed", fmt.Errorf("Device path of the volume is empty")) + return volumeToMount.GenerateError("MapVolume failed", goerrors.New("Device path of the volume is empty")) } // When kubelet is containerized, devicePath may be a symlink at a place unavailable to @@ -1026,7 +1152,7 @@ func (og *operationGenerator) GenerateUnmapVolumeFunc( // GenerateUnmapDeviceFunc marks device as unmounted based on following steps. // Check under globalMapPath dir if there isn't pod's symbolic links in it. -// If symbolick link isn't there, the device isn't referenced from Pods. +// If symbolic link isn't there, the device isn't referenced from Pods. // Call plugin TearDownDevice to clean-up device connection, stored data under // globalMapPath, these operations depend on plugin implementation. // Once TearDownDevice is completed, remove globalMapPath dir. @@ -1057,7 +1183,7 @@ func (og *operationGenerator) GenerateUnmapDeviceFunc( unmapDeviceFunc := func() (error, error) { // Search under globalMapPath dir if all symbolic links from pods have been removed already. - // If symbolick links are there, pods may still refer the volume. + // If symbolic links are there, pods may still refer the volume. globalMapPath := deviceToDetach.DeviceMountPath refs, err := og.blkUtil.GetDeviceSymlinkRefs(deviceToDetach.DevicePath, globalMapPath) if err != nil { @@ -1338,41 +1464,58 @@ func (og *operationGenerator) GenerateExpandVolumeFSWithoutUnmountingFunc( return volumetypes.GeneratedOperations{}, volumeToMount.GenerateErrorDetailed("VolumeFSResize.FindPluginBySpec failed", err) } - attachableVolumePlugin, err := - og.volumePluginMgr.FindAttachablePluginBySpec(volumeToMount.VolumeSpec) - if err != nil || attachableVolumePlugin == nil { - if attachableVolumePlugin == nil { - err = fmt.Errorf("AttachableVolumePlugin is nil") - } - return volumetypes.GeneratedOperations{}, volumeToMount.GenerateErrorDetailed("VolumeFSResize.FindAttachablePluginBySpec failed", err) - } - - volumeAttacher, err := attachableVolumePlugin.NewAttacher() - if err != nil || volumeAttacher == nil { - if volumeAttacher == nil { - err = fmt.Errorf("VolumeAttacher is nil") - } - return volumetypes.GeneratedOperations{}, volumeToMount.GenerateErrorDetailed("VolumeFSResize.NewAttacher failed", err) - } - - deviceMountPath, err := volumeAttacher.GetDeviceMountPath(volumeToMount.VolumeSpec) - if err != nil { - return volumetypes.GeneratedOperations{}, volumeToMount.GenerateErrorDetailed("VolumeFSResize.GetDeviceMountPath failed", err) - } - fsResizeFunc := func() (error, error) { - resizeSimpleError, resizeDetailedError := og.resizeFileSystem(volumeToMount, volumeToMount.DevicePath, deviceMountPath, volumePlugin.GetPluginName()) + var resizeDone bool + var simpleErr, detailedErr error + resizeOptions := volume.NodeResizeOptions{ + VolumeSpec: volumeToMount.VolumeSpec, + } - if resizeSimpleError != nil || resizeDetailedError != nil { - return resizeSimpleError, resizeDetailedError + attachableVolumePlugin, _ := + og.volumePluginMgr.FindAttachablePluginBySpec(volumeToMount.VolumeSpec) + + if attachableVolumePlugin != nil { + volumeAttacher, _ := attachableVolumePlugin.NewAttacher() + if volumeAttacher != nil { + resizeOptions.CSIVolumePhase = volume.CSIVolumeStaged + resizeOptions.DevicePath = volumeToMount.DevicePath + dmp, err := volumeAttacher.GetDeviceMountPath(volumeToMount.VolumeSpec) + if err != nil { + return volumeToMount.GenerateError("VolumeFSResize.GetDeviceMountPath failed", err) + } + resizeOptions.DeviceMountPath = dmp + resizeDone, simpleErr, detailedErr = og.doOnlineExpansion(volumeToMount, actualStateOfWorld, resizeOptions, volumePlugin.GetPluginName()) + if simpleErr != nil || detailedErr != nil { + return simpleErr, detailedErr + } + if resizeDone { + return nil, nil + } + } } - markFSResizedErr := actualStateOfWorld.MarkVolumeAsResized(volumeToMount.PodName, volumeToMount.VolumeName) - if markFSResizedErr != nil { - // On failure, return error. Caller will log and retry. - return volumeToMount.GenerateError("VolumeFSResize.MarkVolumeAsResized failed", markFSResizedErr) + // if we are here that means volume plugin does not support attach interface + volumeMounter, newMounterErr := volumePlugin.NewMounter( + volumeToMount.VolumeSpec, + volumeToMount.Pod, + volume.VolumeOptions{}) + if newMounterErr != nil { + return volumeToMount.GenerateError("VolumeFSResize.NewMounter initialization failed", newMounterErr) } - return nil, nil + + resizeOptions.DeviceMountPath = volumeMounter.GetPath() + resizeOptions.CSIVolumePhase = volume.CSIVolumePublished + resizeDone, simpleErr, detailedErr = og.doOnlineExpansion(volumeToMount, actualStateOfWorld, resizeOptions, volumePlugin.GetPluginName()) + if simpleErr != nil || detailedErr != nil { + return simpleErr, detailedErr + } + if resizeDone { + return nil, nil + } + // This is a placeholder error - we should NEVER reach here. + err := fmt.Errorf("volume resizing failed for unknown reason") + return volumeToMount.GenerateError("VolumeFSResize.resizeFileSystem failed to resize volume", err) } + eventRecorderFunc := func(err *error) { if *err != nil { og.recorder.Eventf(volumeToMount.Pod, v1.EventTypeWarning, kevents.VolumeResizeFailed, (*err).Error()) @@ -1386,6 +1529,28 @@ func (og *operationGenerator) GenerateExpandVolumeFSWithoutUnmountingFunc( }, nil } +func (og *operationGenerator) doOnlineExpansion(volumeToMount VolumeToMount, + actualStateOfWorld ActualStateOfWorldMounterUpdater, + resizeOptions volume.NodeResizeOptions, + pluginName string) (bool, error, error) { + resizeDone, err := og.resizeFileSystem(volumeToMount, resizeOptions, pluginName) + if err != nil { + klog.Errorf("VolumeFSResize.resizeFileSystem failed : %v", err) + e1, e2 := volumeToMount.GenerateError("VolumeFSResize.resizeFileSystem failed", err) + return false, e1, e2 + } + if resizeDone { + markFSResizedErr := actualStateOfWorld.MarkVolumeAsResized(volumeToMount.PodName, volumeToMount.VolumeName) + if markFSResizedErr != nil { + // On failure, return error. Caller will log and retry. + e1, e2 := volumeToMount.GenerateError("VolumeFSResize.MarkVolumeAsResized failed", markFSResizedErr) + return false, e1, e2 + } + return true, nil, nil + } + return false, nil, nil +} + func checkMountOptionSupport(og *operationGenerator, volumeToMount VolumeToMount, plugin volume.VolumePlugin) error { mountOptions := util.MountOptionFromSpec(volumeToMount.VolumeSpec) @@ -1437,3 +1602,115 @@ func isDeviceOpened(deviceToDetach AttachedVolume, mounter mount.Interface) (boo } return deviceOpened, nil } + +func useCSIPlugin(vpm *volume.VolumePluginMgr, spec *volume.Spec) bool { + // TODO(#75146) Check whether the driver is installed as well so that + // we can throw a better error when the driver is not installed. + // The error should be of the approximate form: + // fmt.Errorf("in-tree plugin %s is migrated on node %s but driver %s is not installed", pluginName, string(nodeName), driverName) + return false +} + +func nodeUsingCSIPlugin(og *operationGenerator, spec *volume.Spec, nodeName types.NodeName) (bool, error) { + migratable, err := og.volumePluginMgr.IsPluginMigratableBySpec(spec) + if err != nil { + return false, err + } + if !utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) || + !migratable { + return false, nil + } + + if len(nodeName) == 0 { + return false, goerrors.New("nodeName is empty") + } + + kubeClient := og.volumePluginMgr.Host.GetKubeClient() + if kubeClient == nil { + // Don't handle the controller/kubelet version skew check and fallback + // to just checking the feature gates. This can happen if + // we are in a standalone (headless) Kubelet + return true, nil + } + + adcHost, ok := og.volumePluginMgr.Host.(volume.AttachDetachVolumeHost) + if !ok { + // Don't handle the controller/kubelet version skew check and fallback + // to just checking the feature gates. This can happen if + // "enableControllerAttachDetach" is set to true on kubelet + return true, nil + } + + if adcHost.CSINodeLister() == nil { + return false, goerrors.New("could not find CSINodeLister in attachDetachController") + } + + csiNode, err := adcHost.CSINodeLister().Get(string(nodeName)) + if err != nil { + return false, err + } + + ann := csiNode.GetAnnotations() + if ann == nil { + return false, nil + } + + var mpaSet sets.String + mpa := ann[v1.MigratedPluginsAnnotationKey] + tok := strings.Split(mpa, ",") + if len(mpa) == 0 { + mpaSet = sets.NewString() + } else { + mpaSet = sets.NewString(tok...) + } + + pluginName, err := csilib.GetInTreePluginNameFromSpec(spec.PersistentVolume, spec.Volume) + if err != nil { + return false, err + } + + if len(pluginName) == 0 { + // Could not find a plugin name from translation directory, assume not translated + return false, nil + } + + isMigratedOnNode := mpaSet.Has(pluginName) + + if isMigratedOnNode { + installed := false + driverName, err := csilib.GetCSINameFromInTreeName(pluginName) + if err != nil { + return isMigratedOnNode, err + } + for _, driver := range csiNode.Spec.Drivers { + if driver.Name == driverName { + installed = true + break + } + } + if !installed { + return true, fmt.Errorf("in-tree plugin %s is migrated on node %s but driver %s is not installed", pluginName, string(nodeName), driverName) + } + } + + return isMigratedOnNode, nil + +} + +func translateSpec(spec *volume.Spec) (*volume.Spec, error) { + if spec.PersistentVolume != nil { + // TranslateInTreePVToCSI will create a new PV + csiPV, err := csilib.TranslateInTreePVToCSI(spec.PersistentVolume) + if err != nil { + return nil, fmt.Errorf("failed to translate in tree pv to CSI: %v", err) + } + return &volume.Spec{ + PersistentVolume: csiPV, + ReadOnly: spec.ReadOnly, + }, nil + } else if spec.Volume != nil { + return &volume.Spec{}, goerrors.New("translation is not supported for in-line volumes yet") + } else { + return &volume.Spec{}, goerrors.New("not a valid volume spec") + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD new file mode 100644 index 00000000000..ebbbd4d138e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD @@ -0,0 +1,100 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "subpath.go", + "subpath_linux.go", + "subpath_nsenter.go", + "subpath_unsupported.go", + "subpath_windows.go", + ], + importpath = "k8s.io/kubernetes/pkg/volume/util/subpath", + visibility = ["//visibility:public"], + deps = select({ + "@io_bazel_rules_go//go/platform:android": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:darwin": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:dragonfly": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:freebsd": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/util/mount:go_default_library", + "//vendor/golang.org/x/sys/unix:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:nacl": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:netbsd": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:openbsd": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:plan9": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:solaris": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:windows": [ + "//pkg/util/mount:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "//conditions:default": [], + }), +) + +go_test( + name = "go_default_test", + srcs = [ + "subpath_linux_test.go", + "subpath_nsenter_test.go", + "subpath_windows_test.go", + ], + embed = [":go_default_library"], + deps = select({ + "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/util/mount:go_default_library", + "//vendor/golang.org/x/sys/unix:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/nsenter:go_default_library", + ], + "@io_bazel_rules_go//go/platform:windows": [ + "//vendor/github.com/stretchr/testify/assert:go_default_library", + ], + "//conditions:default": [], + }), +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/OWNERS b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/OWNERS new file mode 100644 index 00000000000..c8821ce7354 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - jingxu97 + - saad-ali + - jsafrane + - msau42 + - andyzhangx +approvers: + - jingxu97 + - saad-ali + - jsafrane + diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath.go new file mode 100644 index 00000000000..c843f6cf896 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath.go @@ -0,0 +1,92 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package subpath + +import "os" + +// Interface defines the set of methods all subpathers must implement +type Interface interface { + // CleanSubPaths removes any bind-mounts created by PrepareSafeSubpath in given + // pod volume directory. + CleanSubPaths(poodDir string, volumeName string) error + + // PrepareSafeSubpath does everything that's necessary to prepare a subPath + // that's 1) inside given volumePath and 2) immutable after this call. + // + // newHostPath - location of prepared subPath. It should be used instead of + // hostName when running the container. + // cleanupAction - action to run when the container is running or it failed to start. + // + // CleanupAction must be called immediately after the container with given + // subpath starts. On the other hand, Interface.CleanSubPaths must be called + // when the pod finishes. + PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) + + // SafeMakeDir creates subdir within given base. It makes sure that the + // created directory does not escape given base directory mis-using + // symlinks. Note that the function makes sure that it creates the directory + // somewhere under the base, nothing else. E.g. if the directory already + // exists, it may exist outside of the base due to symlinks. + // This method should be used if the directory to create is inside volume + // that's under user control. User must not be able to use symlinks to + // escape the volume to create directories somewhere else. + SafeMakeDir(subdir string, base string, perm os.FileMode) error +} + +// Subpath defines the attributes of a subpath +type Subpath struct { + // index of the VolumeMount for this container + VolumeMountIndex int + + // Full path to the subpath directory on the host + Path string + + // name of the volume that is a valid directory name. + VolumeName string + + // Full path to the volume path + VolumePath string + + // Path to the pod's directory, including pod UID + PodDir string + + // Name of the container + ContainerName string +} + +// Compile time-check for all implementers of subpath interface +var _ Interface = &subpath{} +var _ Interface = &FakeSubpath{} + +// FakeSubpath is a subpather implementation for testing +type FakeSubpath struct{} + +// PrepareSafeSubpath is a fake implementation of PrepareSafeSubpath. Always returns +// newHostPath == subPath.Path +func (fs *FakeSubpath) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { + return subPath.Path, nil, nil +} + +// CleanSubPaths is a fake implementation of CleanSubPaths. It is a noop +func (fs *FakeSubpath) CleanSubPaths(podDir string, volumeName string) error { + return nil +} + +// SafeMakeDir is a fake implementation of SafeMakeDir. It is a noop +func (fs *FakeSubpath) SafeMakeDir(pathname string, base string, perm os.FileMode) error { + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go new file mode 100644 index 00000000000..977f7d2da4d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go @@ -0,0 +1,563 @@ +// +build linux + +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package subpath + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "strings" + "syscall" + + "golang.org/x/sys/unix" + + "k8s.io/klog" + + "k8s.io/kubernetes/pkg/util/mount" +) + +const ( + // place for subpath mounts + // TODO: pass in directory using kubelet_getters instead + containerSubPathDirectoryName = "volume-subpaths" + // syscall.Openat flags used to traverse directories not following symlinks + nofollowFlags = unix.O_RDONLY | unix.O_NOFOLLOW + // flags for getting file descriptor without following the symlink + openFDFlags = unix.O_NOFOLLOW | unix.O_PATH +) + +type subpath struct { + mounter mount.Interface +} + +// New returns a subpath.Interface for the current system +func New(mounter mount.Interface) Interface { + return &subpath{ + mounter: mounter, + } +} + +func (sp *subpath) CleanSubPaths(podDir string, volumeName string) error { + return doCleanSubPaths(sp.mounter, podDir, volumeName) +} + +func (sp *subpath) SafeMakeDir(subdir string, base string, perm os.FileMode) error { + realBase, err := filepath.EvalSymlinks(base) + if err != nil { + return fmt.Errorf("error resolving symlinks in %s: %s", base, err) + } + + realFullPath := filepath.Join(realBase, subdir) + + return doSafeMakeDir(realFullPath, realBase, perm) +} + +func (sp *subpath) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { + newHostPath, err = doBindSubPath(sp.mounter, subPath) + + // There is no action when the container starts. Bind-mount will be cleaned + // when container stops by CleanSubPaths. + cleanupAction = nil + return newHostPath, cleanupAction, err +} + +// This implementation is shared between Linux and NsEnter +func safeOpenSubPath(mounter mount.Interface, subpath Subpath) (int, error) { + if !mount.PathWithinBase(subpath.Path, subpath.VolumePath) { + return -1, fmt.Errorf("subpath %q not within volume path %q", subpath.Path, subpath.VolumePath) + } + fd, err := doSafeOpen(subpath.Path, subpath.VolumePath) + if err != nil { + return -1, fmt.Errorf("error opening subpath %v: %v", subpath.Path, err) + } + return fd, nil +} + +// prepareSubpathTarget creates target for bind-mount of subpath. It returns +// "true" when the target already exists and something is mounted there. +// Given Subpath must have all paths with already resolved symlinks and with +// paths relevant to kubelet (when it runs in a container). +// This function is called also by NsEnterMounter. It works because +// /var/lib/kubelet is mounted from the host into the container with Kubelet as +// /var/lib/kubelet too. +func prepareSubpathTarget(mounter mount.Interface, subpath Subpath) (bool, string, error) { + // Early check for already bind-mounted subpath. + bindPathTarget := getSubpathBindTarget(subpath) + notMount, err := mounter.IsNotMountPoint(bindPathTarget) + if err != nil { + if !os.IsNotExist(err) { + return false, "", fmt.Errorf("error checking path %s for mount: %s", bindPathTarget, err) + } + // Ignore ErrorNotExist: the file/directory will be created below if it does not exist yet. + notMount = true + } + if !notMount { + // It's already mounted + klog.V(5).Infof("Skipping bind-mounting subpath %s: already mounted", bindPathTarget) + return true, bindPathTarget, nil + } + + // bindPathTarget is in /var/lib/kubelet and thus reachable without any + // translation even to containerized kubelet. + bindParent := filepath.Dir(bindPathTarget) + err = os.MkdirAll(bindParent, 0750) + if err != nil && !os.IsExist(err) { + return false, "", fmt.Errorf("error creating directory %s: %s", bindParent, err) + } + + t, err := os.Lstat(subpath.Path) + if err != nil { + return false, "", fmt.Errorf("lstat %s failed: %s", subpath.Path, err) + } + + if t.Mode()&os.ModeDir > 0 { + if err = os.Mkdir(bindPathTarget, 0750); err != nil && !os.IsExist(err) { + return false, "", fmt.Errorf("error creating directory %s: %s", bindPathTarget, err) + } + } else { + // "/bin/touch ". + // A file is enough for all possible targets (symlink, device, pipe, + // socket, ...), bind-mounting them into a file correctly changes type + // of the target file. + if err = ioutil.WriteFile(bindPathTarget, []byte{}, 0640); err != nil { + return false, "", fmt.Errorf("error creating file %s: %s", bindPathTarget, err) + } + } + return false, bindPathTarget, nil +} + +func getSubpathBindTarget(subpath Subpath) string { + // containerName is DNS label, i.e. safe as a directory name. + return filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName, strconv.Itoa(subpath.VolumeMountIndex)) +} + +func doBindSubPath(mounter mount.Interface, subpath Subpath) (hostPath string, err error) { + // Linux, kubelet runs on the host: + // - safely open the subpath + // - bind-mount /proc//fd/ to subpath target + // User can't change /proc//fd/ to point to a bad place. + + // Evaluate all symlinks here once for all subsequent functions. + newVolumePath, err := filepath.EvalSymlinks(subpath.VolumePath) + if err != nil { + return "", fmt.Errorf("error resolving symlinks in %q: %v", subpath.VolumePath, err) + } + newPath, err := filepath.EvalSymlinks(subpath.Path) + if err != nil { + return "", fmt.Errorf("error resolving symlinks in %q: %v", subpath.Path, err) + } + klog.V(5).Infof("doBindSubPath %q (%q) for volumepath %q", subpath.Path, newPath, subpath.VolumePath) + subpath.VolumePath = newVolumePath + subpath.Path = newPath + + fd, err := safeOpenSubPath(mounter, subpath) + if err != nil { + return "", err + } + defer syscall.Close(fd) + + alreadyMounted, bindPathTarget, err := prepareSubpathTarget(mounter, subpath) + if err != nil { + return "", err + } + if alreadyMounted { + return bindPathTarget, nil + } + + success := false + defer func() { + // Cleanup subpath on error + if !success { + klog.V(4).Infof("doBindSubPath() failed for %q, cleaning up subpath", bindPathTarget) + if cleanErr := cleanSubPath(mounter, subpath); cleanErr != nil { + klog.Errorf("Failed to clean subpath %q: %v", bindPathTarget, cleanErr) + } + } + }() + + kubeletPid := os.Getpid() + mountSource := fmt.Sprintf("/proc/%d/fd/%v", kubeletPid, fd) + + // Do the bind mount + options := []string{"bind"} + klog.V(5).Infof("bind mounting %q at %q", mountSource, bindPathTarget) + if err = mounter.Mount(mountSource, bindPathTarget, "" /*fstype*/, options); err != nil { + return "", fmt.Errorf("error mounting %s: %s", subpath.Path, err) + } + success = true + + klog.V(3).Infof("Bound SubPath %s into %s", subpath.Path, bindPathTarget) + return bindPathTarget, nil +} + +// This implementation is shared between Linux and NsEnter +func doCleanSubPaths(mounter mount.Interface, podDir string, volumeName string) error { + // scan /var/lib/kubelet/pods//volume-subpaths//* + subPathDir := filepath.Join(podDir, containerSubPathDirectoryName, volumeName) + klog.V(4).Infof("Cleaning up subpath mounts for %s", subPathDir) + + containerDirs, err := ioutil.ReadDir(subPathDir) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return fmt.Errorf("error reading %s: %s", subPathDir, err) + } + + for _, containerDir := range containerDirs { + if !containerDir.IsDir() { + klog.V(4).Infof("Container file is not a directory: %s", containerDir.Name()) + continue + } + klog.V(4).Infof("Cleaning up subpath mounts for container %s", containerDir.Name()) + + // scan /var/lib/kubelet/pods//volume-subpaths///* + fullContainerDirPath := filepath.Join(subPathDir, containerDir.Name()) + err = filepath.Walk(fullContainerDirPath, func(path string, info os.FileInfo, err error) error { + if path == fullContainerDirPath { + // Skip top level directory + return nil + } + + // pass through errors and let doCleanSubPath handle them + if err = doCleanSubPath(mounter, fullContainerDirPath, filepath.Base(path)); err != nil { + return err + } + return nil + }) + if err != nil { + return fmt.Errorf("error processing %s: %s", fullContainerDirPath, err) + } + + // Whole container has been processed, remove its directory. + if err := os.Remove(fullContainerDirPath); err != nil { + return fmt.Errorf("error deleting %s: %s", fullContainerDirPath, err) + } + klog.V(5).Infof("Removed %s", fullContainerDirPath) + } + // Whole pod volume subpaths have been cleaned up, remove its subpath directory. + if err := os.Remove(subPathDir); err != nil { + return fmt.Errorf("error deleting %s: %s", subPathDir, err) + } + klog.V(5).Infof("Removed %s", subPathDir) + + // Remove entire subpath directory if it's the last one + podSubPathDir := filepath.Join(podDir, containerSubPathDirectoryName) + if err := os.Remove(podSubPathDir); err != nil && !os.IsExist(err) { + return fmt.Errorf("error deleting %s: %s", podSubPathDir, err) + } + klog.V(5).Infof("Removed %s", podSubPathDir) + return nil +} + +// doCleanSubPath tears down the single subpath bind mount +func doCleanSubPath(mounter mount.Interface, fullContainerDirPath, subPathIndex string) error { + // process /var/lib/kubelet/pods//volume-subpaths/// + klog.V(4).Infof("Cleaning up subpath mounts for subpath %v", subPathIndex) + fullSubPath := filepath.Join(fullContainerDirPath, subPathIndex) + + if err := mount.CleanupMountPoint(fullSubPath, mounter, true); err != nil { + return fmt.Errorf("error cleaning subpath mount %s: %s", fullSubPath, err) + } + + klog.V(4).Infof("Successfully cleaned subpath directory %s", fullSubPath) + return nil +} + +// cleanSubPath will teardown the subpath bind mount and any remove any directories if empty +func cleanSubPath(mounter mount.Interface, subpath Subpath) error { + containerDir := filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName) + + // Clean subdir bindmount + if err := doCleanSubPath(mounter, containerDir, strconv.Itoa(subpath.VolumeMountIndex)); err != nil && !os.IsNotExist(err) { + return err + } + + // Recusively remove directories if empty + if err := removeEmptyDirs(subpath.PodDir, containerDir); err != nil { + return err + } + + return nil +} + +// removeEmptyDirs works backwards from endDir to baseDir and removes each directory +// if it is empty. It stops once it encounters a directory that has content +func removeEmptyDirs(baseDir, endDir string) error { + if !mount.PathWithinBase(endDir, baseDir) { + return fmt.Errorf("endDir %q is not within baseDir %q", endDir, baseDir) + } + + for curDir := endDir; curDir != baseDir; curDir = filepath.Dir(curDir) { + s, err := os.Stat(curDir) + if err != nil { + if os.IsNotExist(err) { + klog.V(5).Infof("curDir %q doesn't exist, skipping", curDir) + continue + } + return fmt.Errorf("error stat %q: %v", curDir, err) + } + if !s.IsDir() { + return fmt.Errorf("path %q not a directory", curDir) + } + + err = os.Remove(curDir) + if os.IsExist(err) { + klog.V(5).Infof("Directory %q not empty, not removing", curDir) + break + } else if err != nil { + return fmt.Errorf("error removing directory %q: %v", curDir, err) + } + klog.V(5).Infof("Removed directory %q", curDir) + } + return nil +} + +// This implementation is shared between Linux and NsEnterMounter. Both pathname +// and base must be either already resolved symlinks or thet will be resolved in +// kubelet's mount namespace (in case it runs containerized). +func doSafeMakeDir(pathname string, base string, perm os.FileMode) error { + klog.V(4).Infof("Creating directory %q within base %q", pathname, base) + + if !mount.PathWithinBase(pathname, base) { + return fmt.Errorf("path %s is outside of allowed base %s", pathname, base) + } + + // Quick check if the directory already exists + s, err := os.Stat(pathname) + if err == nil { + // Path exists + if s.IsDir() { + // The directory already exists. It can be outside of the parent, + // but there is no race-proof check. + klog.V(4).Infof("Directory %s already exists", pathname) + return nil + } + return &os.PathError{Op: "mkdir", Path: pathname, Err: syscall.ENOTDIR} + } + + // Find all existing directories + existingPath, toCreate, err := findExistingPrefix(base, pathname) + if err != nil { + return fmt.Errorf("error opening directory %s: %s", pathname, err) + } + // Ensure the existing directory is inside allowed base + fullExistingPath, err := filepath.EvalSymlinks(existingPath) + if err != nil { + return fmt.Errorf("error opening directory %s: %s", existingPath, err) + } + if !mount.PathWithinBase(fullExistingPath, base) { + return fmt.Errorf("path %s is outside of allowed base %s", fullExistingPath, err) + } + + klog.V(4).Infof("%q already exists, %q to create", fullExistingPath, filepath.Join(toCreate...)) + parentFD, err := doSafeOpen(fullExistingPath, base) + if err != nil { + return fmt.Errorf("cannot open directory %s: %s", existingPath, err) + } + childFD := -1 + defer func() { + if parentFD != -1 { + if err = syscall.Close(parentFD); err != nil { + klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", parentFD, pathname, err) + } + } + if childFD != -1 { + if err = syscall.Close(childFD); err != nil { + klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", childFD, pathname, err) + } + } + }() + + currentPath := fullExistingPath + // create the directories one by one, making sure nobody can change + // created directory into symlink. + for _, dir := range toCreate { + currentPath = filepath.Join(currentPath, dir) + klog.V(4).Infof("Creating %s", dir) + err = syscall.Mkdirat(parentFD, currentPath, uint32(perm)) + if err != nil { + return fmt.Errorf("cannot create directory %s: %s", currentPath, err) + } + // Dive into the created directory + childFD, err := syscall.Openat(parentFD, dir, nofollowFlags, 0) + if err != nil { + return fmt.Errorf("cannot open %s: %s", currentPath, err) + } + // We can be sure that childFD is safe to use. It could be changed + // by user after Mkdirat() and before Openat(), however: + // - it could not be changed to symlink - we use nofollowFlags + // - it could be changed to a file (or device, pipe, socket, ...) + // but either subsequent Mkdirat() fails or we mount this file + // to user's container. Security is no violated in both cases + // and user either gets error or the file that it can already access. + + if err = syscall.Close(parentFD); err != nil { + klog.V(4).Infof("Closing FD %v failed for safemkdir(%v): %v", parentFD, pathname, err) + } + parentFD = childFD + childFD = -1 + } + + // Everything was created. mkdirat(..., perm) above was affected by current + // umask and we must apply the right permissions to the last directory + // (that's the one that will be available to the container as subpath) + // so user can read/write it. This is the behavior of previous code. + // TODO: chmod all created directories, not just the last one. + // parentFD is the last created directory. + + // Translate perm (os.FileMode) to uint32 that fchmod() expects + kernelPerm := uint32(perm & os.ModePerm) + if perm&os.ModeSetgid > 0 { + kernelPerm |= syscall.S_ISGID + } + if perm&os.ModeSetuid > 0 { + kernelPerm |= syscall.S_ISUID + } + if perm&os.ModeSticky > 0 { + kernelPerm |= syscall.S_ISVTX + } + if err = syscall.Fchmod(parentFD, kernelPerm); err != nil { + return fmt.Errorf("chmod %q failed: %s", currentPath, err) + } + return nil +} + +// findExistingPrefix finds prefix of pathname that exists. In addition, it +// returns list of remaining directories that don't exist yet. +func findExistingPrefix(base, pathname string) (string, []string, error) { + rel, err := filepath.Rel(base, pathname) + if err != nil { + return base, nil, err + } + dirs := strings.Split(rel, string(filepath.Separator)) + + // Do OpenAt in a loop to find the first non-existing dir. Resolve symlinks. + // This should be faster than looping through all dirs and calling os.Stat() + // on each of them, as the symlinks are resolved only once with OpenAt(). + currentPath := base + fd, err := syscall.Open(currentPath, syscall.O_RDONLY, 0) + if err != nil { + return pathname, nil, fmt.Errorf("error opening %s: %s", currentPath, err) + } + defer func() { + if err = syscall.Close(fd); err != nil { + klog.V(4).Infof("Closing FD %v failed for findExistingPrefix(%v): %v", fd, pathname, err) + } + }() + for i, dir := range dirs { + // Using O_PATH here will prevent hangs in case user replaces directory with + // fifo + childFD, err := syscall.Openat(fd, dir, unix.O_PATH, 0) + if err != nil { + if os.IsNotExist(err) { + return currentPath, dirs[i:], nil + } + return base, nil, err + } + if err = syscall.Close(fd); err != nil { + klog.V(4).Infof("Closing FD %v failed for findExistingPrefix(%v): %v", fd, pathname, err) + } + fd = childFD + currentPath = filepath.Join(currentPath, dir) + } + return pathname, []string{}, nil +} + +// This implementation is shared between Linux and NsEnterMounter +// Open path and return its fd. +// Symlinks are disallowed (pathname must already resolve symlinks), +// and the path must be within the base directory. +func doSafeOpen(pathname string, base string) (int, error) { + pathname = filepath.Clean(pathname) + base = filepath.Clean(base) + + // Calculate segments to follow + subpath, err := filepath.Rel(base, pathname) + if err != nil { + return -1, err + } + segments := strings.Split(subpath, string(filepath.Separator)) + + // Assumption: base is the only directory that we have under control. + // Base dir is not allowed to be a symlink. + parentFD, err := syscall.Open(base, nofollowFlags, 0) + if err != nil { + return -1, fmt.Errorf("cannot open directory %s: %s", base, err) + } + defer func() { + if parentFD != -1 { + if err = syscall.Close(parentFD); err != nil { + klog.V(4).Infof("Closing FD %v failed for safeopen(%v): %v", parentFD, pathname, err) + } + } + }() + + childFD := -1 + defer func() { + if childFD != -1 { + if err = syscall.Close(childFD); err != nil { + klog.V(4).Infof("Closing FD %v failed for safeopen(%v): %v", childFD, pathname, err) + } + } + }() + + currentPath := base + + // Follow the segments one by one using openat() to make + // sure the user cannot change already existing directories into symlinks. + for _, seg := range segments { + currentPath = filepath.Join(currentPath, seg) + if !mount.PathWithinBase(currentPath, base) { + return -1, fmt.Errorf("path %s is outside of allowed base %s", currentPath, base) + } + + klog.V(5).Infof("Opening path %s", currentPath) + childFD, err = syscall.Openat(parentFD, seg, openFDFlags, 0) + if err != nil { + return -1, fmt.Errorf("cannot open %s: %s", currentPath, err) + } + + var deviceStat unix.Stat_t + err := unix.Fstat(childFD, &deviceStat) + if err != nil { + return -1, fmt.Errorf("Error running fstat on %s with %v", currentPath, err) + } + fileFmt := deviceStat.Mode & syscall.S_IFMT + if fileFmt == syscall.S_IFLNK { + return -1, fmt.Errorf("Unexpected symlink found %s", currentPath) + } + + // Close parentFD + if err = syscall.Close(parentFD); err != nil { + return -1, fmt.Errorf("closing fd for %q failed: %v", filepath.Dir(currentPath), err) + } + // Set child to new parent + parentFD = childFD + childFD = -1 + } + + // We made it to the end, return this fd, don't close it + finalFD := parentFD + parentFD = -1 + + return finalFD, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_unsupported.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_unsupported.go new file mode 100644 index 00000000000..a1fd600a286 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_unsupported.go @@ -0,0 +1,54 @@ +// +build !linux,!windows + +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package subpath + +import ( + "errors" + "os" + + "k8s.io/kubernetes/pkg/util/mount" + "k8s.io/utils/nsenter" +) + +type subpath struct{} + +var errUnsupported = errors.New("util/subpath on this platform is not supported") + +// New returns a subpath.Interface for the current system. +func New(mount.Interface) Interface { + return &subpath{} +} + +// NewNSEnter is to satisfy the compiler for having NewSubpathNSEnter exist for all +// OS choices. however, NSEnter is only valid on Linux +func NewNSEnter(mounter mount.Interface, ne *nsenter.Nsenter, rootDir string) Interface { + return nil +} + +func (sp *subpath) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { + return subPath.Path, nil, errUnsupported +} + +func (sp *subpath) CleanSubPaths(podDir string, volumeName string) error { + return errUnsupported +} + +func (sp *subpath) SafeMakeDir(pathname string, base string, perm os.FileMode) error { + return errUnsupported +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go new file mode 100644 index 00000000000..2bbb3c52716 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go @@ -0,0 +1,284 @@ +// +build windows + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package subpath + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "syscall" + + "k8s.io/klog" + "k8s.io/kubernetes/pkg/util/mount" + "k8s.io/utils/nsenter" +) + +type subpath struct{} + +// New returns a subpath.Interface for the current system +func New(mount.Interface) Interface { + return &subpath{} +} + +// NewNSEnter is to satisfy the compiler for having NewSubpathNSEnter exist for all +// OS choices. however, NSEnter is only valid on Linux +func NewNSEnter(mounter mount.Interface, ne *nsenter.Nsenter, rootDir string) Interface { + return nil +} + +// check whether hostPath is within volume path +// this func will lock all intermediate subpath directories, need to close handle outside of this func after container started +func lockAndCheckSubPath(volumePath, hostPath string) ([]uintptr, error) { + if len(volumePath) == 0 || len(hostPath) == 0 { + return []uintptr{}, nil + } + + finalSubPath, err := filepath.EvalSymlinks(hostPath) + if err != nil { + return []uintptr{}, fmt.Errorf("cannot read link %s: %s", hostPath, err) + } + finalVolumePath, err := filepath.EvalSymlinks(volumePath) + if err != nil { + return []uintptr{}, fmt.Errorf("cannot read link %s: %s", volumePath, err) + } + + return lockAndCheckSubPathWithoutSymlink(finalVolumePath, finalSubPath) +} + +// lock all intermediate subPath directories and check they are all within volumePath +// volumePath & subPath should not contain any symlink, otherwise it will return error +func lockAndCheckSubPathWithoutSymlink(volumePath, subPath string) ([]uintptr, error) { + if len(volumePath) == 0 || len(subPath) == 0 { + return []uintptr{}, nil + } + + // get relative path to volumePath + relSubPath, err := filepath.Rel(volumePath, subPath) + if err != nil { + return []uintptr{}, fmt.Errorf("Rel(%s, %s) error: %v", volumePath, subPath, err) + } + if mount.StartsWithBackstep(relSubPath) { + return []uintptr{}, fmt.Errorf("SubPath %q not within volume path %q", subPath, volumePath) + } + + if relSubPath == "." { + // volumePath and subPath are equal + return []uintptr{}, nil + } + + fileHandles := []uintptr{} + var errorResult error + + currentFullPath := volumePath + dirs := strings.Split(relSubPath, string(os.PathSeparator)) + for _, dir := range dirs { + // lock intermediate subPath directory first + currentFullPath = filepath.Join(currentFullPath, dir) + handle, err := lockPath(currentFullPath) + if err != nil { + errorResult = fmt.Errorf("cannot lock path %s: %s", currentFullPath, err) + break + } + fileHandles = append(fileHandles, handle) + + // make sure intermediate subPath directory does not contain symlink any more + stat, err := os.Lstat(currentFullPath) + if err != nil { + errorResult = fmt.Errorf("Lstat(%q) error: %v", currentFullPath, err) + break + } + if stat.Mode()&os.ModeSymlink != 0 { + errorResult = fmt.Errorf("subpath %q is an unexpected symlink after EvalSymlinks", currentFullPath) + break + } + + if !mount.PathWithinBase(currentFullPath, volumePath) { + errorResult = fmt.Errorf("SubPath %q not within volume path %q", currentFullPath, volumePath) + break + } + } + + return fileHandles, errorResult +} + +// unlockPath unlock directories +func unlockPath(fileHandles []uintptr) { + if fileHandles != nil { + for _, handle := range fileHandles { + syscall.CloseHandle(syscall.Handle(handle)) + } + } +} + +// lockPath locks a directory or symlink, return handle, exec "syscall.CloseHandle(handle)" to unlock the path +func lockPath(path string) (uintptr, error) { + if len(path) == 0 { + return uintptr(syscall.InvalidHandle), syscall.ERROR_FILE_NOT_FOUND + } + pathp, err := syscall.UTF16PtrFromString(path) + if err != nil { + return uintptr(syscall.InvalidHandle), err + } + access := uint32(syscall.GENERIC_READ) + sharemode := uint32(syscall.FILE_SHARE_READ) + createmode := uint32(syscall.OPEN_EXISTING) + flags := uint32(syscall.FILE_FLAG_BACKUP_SEMANTICS | syscall.FILE_FLAG_OPEN_REPARSE_POINT) + fd, err := syscall.CreateFile(pathp, access, sharemode, nil, createmode, flags, 0) + return uintptr(fd), err +} + +// Lock all directories in subPath and check they're not symlinks. +func (sp *subpath) PrepareSafeSubpath(subPath Subpath) (newHostPath string, cleanupAction func(), err error) { + handles, err := lockAndCheckSubPath(subPath.VolumePath, subPath.Path) + + // Unlock the directories when the container starts + cleanupAction = func() { + unlockPath(handles) + } + return subPath.Path, cleanupAction, err +} + +// No bind-mounts for subpaths are necessary on Windows +func (sp *subpath) CleanSubPaths(podDir string, volumeName string) error { + return nil +} + +// SafeMakeDir makes sure that the created directory does not escape given base directory mis-using symlinks. +func (sp *subpath) SafeMakeDir(subdir string, base string, perm os.FileMode) error { + realBase, err := filepath.EvalSymlinks(base) + if err != nil { + return fmt.Errorf("error resolving symlinks in %s: %s", base, err) + } + + realFullPath := filepath.Join(realBase, subdir) + return doSafeMakeDir(realFullPath, realBase, perm) +} + +func doSafeMakeDir(pathname string, base string, perm os.FileMode) error { + klog.V(4).Infof("Creating directory %q within base %q", pathname, base) + + if !mount.PathWithinBase(pathname, base) { + return fmt.Errorf("path %s is outside of allowed base %s", pathname, base) + } + + // Quick check if the directory already exists + s, err := os.Stat(pathname) + if err == nil { + // Path exists + if s.IsDir() { + // The directory already exists. It can be outside of the parent, + // but there is no race-proof check. + klog.V(4).Infof("Directory %s already exists", pathname) + return nil + } + return &os.PathError{Op: "mkdir", Path: pathname, Err: syscall.ENOTDIR} + } + + // Find all existing directories + existingPath, toCreate, err := findExistingPrefix(base, pathname) + if err != nil { + return fmt.Errorf("error opening directory %s: %s", pathname, err) + } + if len(toCreate) == 0 { + return nil + } + + // Ensure the existing directory is inside allowed base + fullExistingPath, err := filepath.EvalSymlinks(existingPath) + if err != nil { + return fmt.Errorf("error opening existing directory %s: %s", existingPath, err) + } + fullBasePath, err := filepath.EvalSymlinks(base) + if err != nil { + return fmt.Errorf("cannot read link %s: %s", base, err) + } + if !mount.PathWithinBase(fullExistingPath, fullBasePath) { + return fmt.Errorf("path %s is outside of allowed base %s", fullExistingPath, err) + } + + // lock all intermediate directories from fullBasePath to fullExistingPath (top to bottom) + fileHandles, err := lockAndCheckSubPathWithoutSymlink(fullBasePath, fullExistingPath) + defer unlockPath(fileHandles) + if err != nil { + return err + } + + klog.V(4).Infof("%q already exists, %q to create", fullExistingPath, filepath.Join(toCreate...)) + currentPath := fullExistingPath + // create the directories one by one, making sure nobody can change + // created directory into symlink by lock that directory immediately + for _, dir := range toCreate { + currentPath = filepath.Join(currentPath, dir) + klog.V(4).Infof("Creating %s", dir) + if err := os.Mkdir(currentPath, perm); err != nil { + return fmt.Errorf("cannot create directory %s: %s", currentPath, err) + } + handle, err := lockPath(currentPath) + if err != nil { + return fmt.Errorf("cannot lock path %s: %s", currentPath, err) + } + defer syscall.CloseHandle(syscall.Handle(handle)) + // make sure newly created directory does not contain symlink after lock + stat, err := os.Lstat(currentPath) + if err != nil { + return fmt.Errorf("Lstat(%q) error: %v", currentPath, err) + } + if stat.Mode()&os.ModeSymlink != 0 { + return fmt.Errorf("subpath %q is an unexpected symlink after Mkdir", currentPath) + } + } + + return nil +} + +// findExistingPrefix finds prefix of pathname that exists. In addition, it +// returns list of remaining directories that don't exist yet. +func findExistingPrefix(base, pathname string) (string, []string, error) { + rel, err := filepath.Rel(base, pathname) + if err != nil { + return base, nil, err + } + + if mount.StartsWithBackstep(rel) { + return base, nil, fmt.Errorf("pathname(%s) is not within base(%s)", pathname, base) + } + + if rel == "." { + // base and pathname are equal + return pathname, []string{}, nil + } + + dirs := strings.Split(rel, string(filepath.Separator)) + + parent := base + currentPath := base + for i, dir := range dirs { + parent = currentPath + currentPath = filepath.Join(parent, dir) + if _, err := os.Lstat(currentPath); err != nil { + if os.IsNotExist(err) { + return parent, dirs[i:], nil + } + return base, nil, err + } + } + + return pathname, []string{}, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go index 18e24d69f05..2565c6b07f4 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go @@ -22,13 +22,16 @@ import ( "os" "path" "path/filepath" + "reflect" "strings" v1 "k8s.io/api/core/v1" storage "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + utypes "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" clientset "k8s.io/client-go/kubernetes" @@ -36,29 +39,14 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/features" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" - - "reflect" - - "hash/fnv" - "math/rand" - "strconv" - - "k8s.io/apimachinery/pkg/api/resource" - utypes "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/volume/util/types" "k8s.io/kubernetes/pkg/volume/util/volumepathhandler" + utilstrings "k8s.io/utils/strings" ) const ( - // GB - GigaByte size - GB = 1000 * 1000 * 1000 - // GIB - GibiByte size - GIB = 1024 * 1024 * 1024 - readyFileName = "ready" // ControllerManagedAttachAnnotation is the key of the annotation on Node @@ -79,16 +67,6 @@ const ( VolumeDynamicallyCreatedByKey = "kubernetes.io/createdby" ) -// VolumeZoneConfig contains config information about zonal volume. -type VolumeZoneConfig struct { - ZonePresent bool - ZonesPresent bool - ReplicaZoneFromNodePresent bool - Zone string - Zones string - ReplicaZoneFromNode string -} - // IsReady checks for the existence of a regular file // called 'ready' in the given directory and returns // true if that file exists. @@ -125,35 +103,6 @@ func SetReady(dir string) { file.Close() } -// UnmountPath is a common unmount routine that unmounts the given path and -// deletes the remaining directory if successful. -// TODO: Remove this function and change callers to call mount pkg directly -func UnmountPath(mountPath string, mounter mount.Interface) error { - return mount.CleanupMountPoint(mountPath, mounter, false /* extensiveMountPointCheck */) -} - -// UnmountMountPoint is a common unmount routine that unmounts the given path and -// deletes the remaining directory if successful. -// if extensiveMountPointCheck is true -// IsNotMountPoint will be called instead of IsLikelyNotMountPoint. -// IsNotMountPoint is more expensive but properly handles bind mounts. -// TODO: Change callers to call mount pkg directly -func UnmountMountPoint(mountPath string, mounter mount.Interface, extensiveMountPointCheck bool) error { - return mount.CleanupMountPoint(mountPath, mounter, extensiveMountPointCheck) -} - -// PathExists returns true if the specified path exists. -// TODO: Change callers to call mount pkg directly -func PathExists(path string) (bool, error) { - return mount.PathExists(path) -} - -// IsCorruptedMnt return true if err is about corrupted mount point -// TODO: Change callers to call mount pkg directly -func IsCorruptedMnt(err error) bool { - return mount.IsCorruptedMnt(err) -} - // GetSecretForPod locates secret by name in the pod's namespace and returns secret map func GetSecretForPod(pod *v1.Pod, secretName string, kubeClient clientset.Interface) (map[string]string, error) { secret := make(map[string]string) @@ -249,174 +198,6 @@ func LoadPodFromFile(filePath string) (*v1.Pod, error) { return pod, nil } -// SelectZoneForVolume is a wrapper around SelectZonesForVolume -// to select a single zone for a volume based on parameters -func SelectZoneForVolume(zoneParameterPresent, zonesParameterPresent bool, zoneParameter string, zonesParameter, zonesWithNodes sets.String, node *v1.Node, allowedTopologies []v1.TopologySelectorTerm, pvcName string) (string, error) { - zones, err := SelectZonesForVolume(zoneParameterPresent, zonesParameterPresent, zoneParameter, zonesParameter, zonesWithNodes, node, allowedTopologies, pvcName, 1) - if err != nil { - return "", err - } - zone, ok := zones.PopAny() - if !ok { - return "", fmt.Errorf("could not determine a zone to provision volume in") - } - return zone, nil -} - -// SelectZonesForVolume selects zones for a volume based on several factors: -// node.zone, allowedTopologies, zone/zones parameters from storageclass, -// zones with active nodes from the cluster. The number of zones = replicas. -func SelectZonesForVolume(zoneParameterPresent, zonesParameterPresent bool, zoneParameter string, zonesParameter, zonesWithNodes sets.String, node *v1.Node, allowedTopologies []v1.TopologySelectorTerm, pvcName string, numReplicas uint32) (sets.String, error) { - if zoneParameterPresent && zonesParameterPresent { - return nil, fmt.Errorf("both zone and zones StorageClass parameters must not be used at the same time") - } - - var zoneFromNode string - // pick one zone from node if present - if node != nil { - // VolumeScheduling implicit since node is not nil - if zoneParameterPresent || zonesParameterPresent { - return nil, fmt.Errorf("zone[s] cannot be specified in StorageClass if VolumeBindingMode is set to WaitForFirstConsumer. Please specify allowedTopologies in StorageClass for constraining zones") - } - - // pick node's zone for one of the replicas - var ok bool - zoneFromNode, ok = node.ObjectMeta.Labels[kubeletapis.LabelZoneFailureDomain] - if !ok { - return nil, fmt.Errorf("%s Label for node missing", kubeletapis.LabelZoneFailureDomain) - } - // if single replica volume and node with zone found, return immediately - if numReplicas == 1 { - return sets.NewString(zoneFromNode), nil - } - } - - // pick zone from allowedZones if specified - allowedZones, err := ZonesFromAllowedTopologies(allowedTopologies) - if err != nil { - return nil, err - } - - if (len(allowedTopologies) > 0) && (allowedZones.Len() == 0) { - return nil, fmt.Errorf("no matchLabelExpressions with %s key found in allowedTopologies. Please specify matchLabelExpressions with %s key", kubeletapis.LabelZoneFailureDomain, kubeletapis.LabelZoneFailureDomain) - } - - if allowedZones.Len() > 0 { - // VolumeScheduling implicit since allowedZones present - if zoneParameterPresent || zonesParameterPresent { - return nil, fmt.Errorf("zone[s] cannot be specified in StorageClass if allowedTopologies specified") - } - // scheduler will guarantee if node != null above, zoneFromNode is member of allowedZones. - // so if zoneFromNode != "", we can safely assume it is part of allowedZones. - zones, err := chooseZonesForVolumeIncludingZone(allowedZones, pvcName, zoneFromNode, numReplicas) - if err != nil { - return nil, fmt.Errorf("cannot process zones in allowedTopologies: %v", err) - } - return zones, nil - } - - // pick zone from parameters if present - if zoneParameterPresent { - if numReplicas > 1 { - return nil, fmt.Errorf("zone cannot be specified if desired number of replicas for pv is greather than 1. Please specify zones or allowedTopologies to specify desired zones") - } - return sets.NewString(zoneParameter), nil - } - - if zonesParameterPresent { - if uint32(zonesParameter.Len()) < numReplicas { - return nil, fmt.Errorf("not enough zones found in zones parameter to provision a volume with %d replicas. Found %d zones, need %d zones", numReplicas, zonesParameter.Len(), numReplicas) - } - // directly choose from zones parameter; no zone from node need to be considered - return ChooseZonesForVolume(zonesParameter, pvcName, numReplicas), nil - } - - // pick zone from zones with nodes - if zonesWithNodes.Len() > 0 { - // If node != null (and thus zoneFromNode != ""), zoneFromNode will be member of zonesWithNodes - zones, err := chooseZonesForVolumeIncludingZone(zonesWithNodes, pvcName, zoneFromNode, numReplicas) - if err != nil { - return nil, fmt.Errorf("cannot process zones where nodes exist in the cluster: %v", err) - } - return zones, nil - } - return nil, fmt.Errorf("cannot determine zones to provision volume in") -} - -// ZonesFromAllowedTopologies returns a list of zones specified in allowedTopologies -func ZonesFromAllowedTopologies(allowedTopologies []v1.TopologySelectorTerm) (sets.String, error) { - zones := make(sets.String) - for _, term := range allowedTopologies { - for _, exp := range term.MatchLabelExpressions { - if exp.Key == kubeletapis.LabelZoneFailureDomain { - for _, value := range exp.Values { - zones.Insert(value) - } - } else { - return nil, fmt.Errorf("unsupported key found in matchLabelExpressions: %s", exp.Key) - } - } - } - return zones, nil -} - -// ZonesSetToLabelValue converts zones set to label value -func ZonesSetToLabelValue(strSet sets.String) string { - return strings.Join(strSet.UnsortedList(), kubeletapis.LabelMultiZoneDelimiter) -} - -// ZonesToSet converts a string containing a comma separated list of zones to set -func ZonesToSet(zonesString string) (sets.String, error) { - zones, err := stringToSet(zonesString, ",") - if err != nil { - return nil, fmt.Errorf("error parsing zones %s, must be strings separated by commas: %v", zonesString, err) - } - return zones, nil -} - -// LabelZonesToSet converts a PV label value from string containing a delimited list of zones to set -func LabelZonesToSet(labelZonesValue string) (sets.String, error) { - return stringToSet(labelZonesValue, kubeletapis.LabelMultiZoneDelimiter) -} - -// StringToSet converts a string containing list separated by specified delimiter to a set -func stringToSet(str, delimiter string) (sets.String, error) { - zonesSlice := strings.Split(str, delimiter) - zonesSet := make(sets.String) - for _, zone := range zonesSlice { - trimmedZone := strings.TrimSpace(zone) - if trimmedZone == "" { - return make(sets.String), fmt.Errorf( - "%q separated list (%q) must not contain an empty string", - delimiter, - str) - } - zonesSet.Insert(trimmedZone) - } - return zonesSet, nil -} - -// LabelZonesToList converts a PV label value from string containing a delimited list of zones to list -func LabelZonesToList(labelZonesValue string) ([]string, error) { - return stringToList(labelZonesValue, kubeletapis.LabelMultiZoneDelimiter) -} - -// StringToList converts a string containing list separated by specified delimiter to a list -func stringToList(str, delimiter string) ([]string, error) { - zonesSlice := make([]string, 0) - for _, zone := range strings.Split(str, delimiter) { - trimmedZone := strings.TrimSpace(zone) - if trimmedZone == "" { - return nil, fmt.Errorf( - "%q separated list (%q) must not contain an empty string", - delimiter, - str) - } - zonesSlice = append(zonesSlice, trimmedZone) - } - return zonesSlice, nil -} - // CalculateTimeoutForVolume calculates time for a Recycler pod to complete a // recycle operation. The calculation and return value is either the // minimumTimeout or the timeoutIncrement per Gi of storage size, whichever is @@ -433,57 +214,6 @@ func CalculateTimeoutForVolume(minimumTimeout, timeoutIncrement int, pv *v1.Pers return timeout } -// RoundUpSize calculates how many allocation units are needed to accommodate -// a volume of given size. E.g. when user wants 1500MiB volume, while AWS EBS -// allocates volumes in gibibyte-sized chunks, -// RoundUpSize(1500 * 1024*1024, 1024*1024*1024) returns '2' -// (2 GiB is the smallest allocatable volume that can hold 1500MiB) -func RoundUpSize(volumeSizeBytes int64, allocationUnitBytes int64) int64 { - roundedUp := volumeSizeBytes / allocationUnitBytes - if volumeSizeBytes%allocationUnitBytes > 0 { - roundedUp++ - } - return roundedUp -} - -// RoundUpToGB rounds up given quantity to chunks of GB -func RoundUpToGB(size resource.Quantity) int64 { - requestBytes := size.Value() - return RoundUpSize(requestBytes, GB) -} - -// RoundUpToGiB rounds up given quantity upto chunks of GiB -func RoundUpToGiB(size resource.Quantity) int64 { - requestBytes := size.Value() - return RoundUpSize(requestBytes, GIB) -} - -// RoundUpSizeInt calculates how many allocation units are needed to accommodate -// a volume of given size. It returns an int instead of an int64 and an error if -// there's overflow -func RoundUpSizeInt(volumeSizeBytes int64, allocationUnitBytes int64) (int, error) { - roundedUp := RoundUpSize(volumeSizeBytes, allocationUnitBytes) - roundedUpInt := int(roundedUp) - if int64(roundedUpInt) != roundedUp { - return 0, fmt.Errorf("capacity %v is too great, casting results in integer overflow", roundedUp) - } - return roundedUpInt, nil -} - -// RoundUpToGBInt rounds up given quantity to chunks of GB. It returns an -// int instead of an int64 and an error if there's overflow -func RoundUpToGBInt(size resource.Quantity) (int, error) { - requestBytes := size.Value() - return RoundUpSizeInt(requestBytes, GB) -} - -// RoundUpToGiBInt rounds up given quantity upto chunks of GiB. It returns an -// int instead of an int64 and an error if there's overflow -func RoundUpToGiBInt(size resource.Quantity) (int, error) { - requestBytes := size.Value() - return RoundUpSizeInt(requestBytes, GIB) -} - // GenerateVolumeName returns a PV name with clusterName prefix. The function // should be used to generate a name of GCE PD or Cinder volume. It basically // adds "-dynamic-" before the PV name, making sure the resulting @@ -509,148 +239,6 @@ func GetPath(mounter volume.Mounter) (string, error) { return path, nil } -// ChooseZoneForVolume implements our heuristics for choosing a zone for volume creation based on the volume name -// Volumes are generally round-robin-ed across all active zones, using the hash of the PVC Name. -// However, if the PVCName ends with `-`, we will hash the prefix, and then add the integer to the hash. -// This means that a StatefulSet's volumes (`claimname-statefulsetname-id`) will spread across available zones, -// assuming the id values are consecutive. -func ChooseZoneForVolume(zones sets.String, pvcName string) string { - // No zones available, return empty string. - if zones.Len() == 0 { - return "" - } - - // We create the volume in a zone determined by the name - // Eventually the scheduler will coordinate placement into an available zone - hash, index := getPVCNameHashAndIndexOffset(pvcName) - - // Zones.List returns zones in a consistent order (sorted) - // We do have a potential failure case where volumes will not be properly spread, - // if the set of zones changes during StatefulSet volume creation. However, this is - // probably relatively unlikely because we expect the set of zones to be essentially - // static for clusters. - // Hopefully we can address this problem if/when we do full scheduler integration of - // PVC placement (which could also e.g. avoid putting volumes in overloaded or - // unhealthy zones) - zoneSlice := zones.List() - zone := zoneSlice[(hash+index)%uint32(len(zoneSlice))] - - klog.V(2).Infof("Creating volume for PVC %q; chose zone=%q from zones=%q", pvcName, zone, zoneSlice) - return zone -} - -// chooseZonesForVolumeIncludingZone is a wrapper around ChooseZonesForVolume that ensures zoneToInclude is chosen -// zoneToInclude can either be empty in which case it is ignored. If non-empty, zoneToInclude is expected to be member of zones. -// numReplicas is expected to be > 0 and <= zones.Len() -func chooseZonesForVolumeIncludingZone(zones sets.String, pvcName, zoneToInclude string, numReplicas uint32) (sets.String, error) { - if numReplicas == 0 { - return nil, fmt.Errorf("invalid number of replicas passed") - } - if uint32(zones.Len()) < numReplicas { - return nil, fmt.Errorf("not enough zones found to provision a volume with %d replicas. Need at least %d distinct zones for a volume with %d replicas", numReplicas, numReplicas, numReplicas) - } - if zoneToInclude != "" && !zones.Has(zoneToInclude) { - return nil, fmt.Errorf("zone to be included: %s needs to be member of set: %v", zoneToInclude, zones) - } - if uint32(zones.Len()) == numReplicas { - return zones, nil - } - if zoneToInclude != "" { - zones.Delete(zoneToInclude) - numReplicas = numReplicas - 1 - } - zonesChosen := ChooseZonesForVolume(zones, pvcName, numReplicas) - if zoneToInclude != "" { - zonesChosen.Insert(zoneToInclude) - } - return zonesChosen, nil -} - -// ChooseZonesForVolume is identical to ChooseZoneForVolume, but selects a multiple zones, for multi-zone disks. -func ChooseZonesForVolume(zones sets.String, pvcName string, numZones uint32) sets.String { - // No zones available, return empty set. - replicaZones := sets.NewString() - if zones.Len() == 0 { - return replicaZones - } - - // We create the volume in a zone determined by the name - // Eventually the scheduler will coordinate placement into an available zone - hash, index := getPVCNameHashAndIndexOffset(pvcName) - - // Zones.List returns zones in a consistent order (sorted) - // We do have a potential failure case where volumes will not be properly spread, - // if the set of zones changes during StatefulSet volume creation. However, this is - // probably relatively unlikely because we expect the set of zones to be essentially - // static for clusters. - // Hopefully we can address this problem if/when we do full scheduler integration of - // PVC placement (which could also e.g. avoid putting volumes in overloaded or - // unhealthy zones) - zoneSlice := zones.List() - - startingIndex := index * numZones - for index = startingIndex; index < startingIndex+numZones; index++ { - zone := zoneSlice[(hash+index)%uint32(len(zoneSlice))] - replicaZones.Insert(zone) - } - - klog.V(2).Infof("Creating volume for replicated PVC %q; chosen zones=%q from zones=%q", - pvcName, replicaZones.UnsortedList(), zoneSlice) - return replicaZones -} - -func getPVCNameHashAndIndexOffset(pvcName string) (hash uint32, index uint32) { - if pvcName == "" { - // We should always be called with a name; this shouldn't happen - klog.Warningf("No name defined during volume create; choosing random zone") - - hash = rand.Uint32() - } else { - hashString := pvcName - - // Heuristic to make sure that volumes in a StatefulSet are spread across zones - // StatefulSet PVCs are (currently) named ClaimName-StatefulSetName-Id, - // where Id is an integer index. - // Note though that if a StatefulSet pod has multiple claims, we need them to be - // in the same zone, because otherwise the pod will be unable to mount both volumes, - // and will be unschedulable. So we hash _only_ the "StatefulSetName" portion when - // it looks like `ClaimName-StatefulSetName-Id`. - // We continue to round-robin volume names that look like `Name-Id` also; this is a useful - // feature for users that are creating statefulset-like functionality without using statefulsets. - lastDash := strings.LastIndexByte(pvcName, '-') - if lastDash != -1 { - statefulsetIDString := pvcName[lastDash+1:] - statefulsetID, err := strconv.ParseUint(statefulsetIDString, 10, 32) - if err == nil { - // Offset by the statefulsetID, so we round-robin across zones - index = uint32(statefulsetID) - // We still hash the volume name, but only the prefix - hashString = pvcName[:lastDash] - - // In the special case where it looks like `ClaimName-StatefulSetName-Id`, - // hash only the StatefulSetName, so that different claims on the same StatefulSet - // member end up in the same zone. - // Note that StatefulSetName (and ClaimName) might themselves both have dashes. - // We actually just take the portion after the final - of ClaimName-StatefulSetName. - // For our purposes it doesn't much matter (just suboptimal spreading). - lastDash := strings.LastIndexByte(hashString, '-') - if lastDash != -1 { - hashString = hashString[lastDash+1:] - } - - klog.V(2).Infof("Detected StatefulSet-style volume name %q; index=%d", pvcName, index) - } - } - - // We hash the (base) volume name, so we don't bias towards the first N zones - h := fnv.New32() - h.Write([]byte(hashString)) - hash = h.Sum32() - } - - return hash, index -} - // UnmountViaEmptyDir delegates the tear down operation for secret, configmap, git_repo and downwardapi // to empty_dir func UnmountViaEmptyDir(dir string, host volume.VolumeHost, volName string, volSpec volume.Spec, podUID utypes.UID) error { @@ -699,16 +287,6 @@ func JoinMountOptions(userOptions []string, systemOptions []string) []string { return allMountOptions.List() } -// ValidateZone returns: -// - an error in case zone is an empty string or contains only any combination of spaces and tab characters -// - nil otherwise -func ValidateZone(zone string) error { - if strings.TrimSpace(zone) == "" { - return fmt.Errorf("the provided %q zone is not valid, it's an empty string or contains only spaces and tab characters", zone) - } - return nil -} - // AccessModesContains returns whether the requested mode is contained by modes func AccessModesContains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAccessMode) bool { for _, m := range modes { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/volumepathhandler/volume_path_handler.go b/vendor/k8s.io/kubernetes/pkg/volume/util/volumepathhandler/volume_path_handler.go index a7822efc3e5..acaa6c3ab84 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/volumepathhandler/volume_path_handler.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/volumepathhandler/volume_path_handler.go @@ -144,16 +144,16 @@ func (v VolumePathHandler) RemoveMapPath(mapPath string) error { } // IsSymlinkExist returns true if specified file exists and the type is symbolik link. -// If file doesn't exist, or file exists but not symbolick link, return false with no error. +// If file doesn't exist, or file exists but not symbolic link, return false with no error. // On other cases, return false with error from Lstat(). func (v VolumePathHandler) IsSymlinkExist(mapPath string) (bool, error) { fi, err := os.Lstat(mapPath) if err == nil { - // If file exits and it's symbolick link, return true and no error + // If file exits and it's symbolic link, return true and no error if fi.Mode()&os.ModeSymlink == os.ModeSymlink { return true, nil } - // If file exits but it's not symbolick link, return fale and no error + // If file exits but it's not symbolic link, return fale and no error return false, nil } // If file doesn't exist, return false and no error diff --git a/vendor/k8s.io/kubernetes/pkg/volume/volume.go b/vendor/k8s.io/kubernetes/pkg/volume/volume.go index 013e0dc4195..f597ba1662d 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/volume.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/volume.go @@ -260,28 +260,3 @@ type DeviceUnmounter interface { // unmounted. UnmountDevice(deviceMountPath string) error } - -// NewDeletedVolumeInUseError returns a new instance of DeletedVolumeInUseError -// error. -func NewDeletedVolumeInUseError(message string) error { - return deletedVolumeInUseError(message) -} - -type deletedVolumeInUseError string - -var _ error = deletedVolumeInUseError("") - -// IsDeletedVolumeInUse returns true if an error returned from Delete() is -// deletedVolumeInUseError -func IsDeletedVolumeInUse(err error) bool { - switch err.(type) { - case deletedVolumeInUseError: - return true - default: - return false - } -} - -func (err deletedVolumeInUseError) Error() string { - return string(err) -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/volume_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/volume_linux.go index eb44d5f162f..18981b9e9f8 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/volume_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/volume_linux.go @@ -28,8 +28,9 @@ import ( ) const ( - rwMask = os.FileMode(0660) - roMask = os.FileMode(0440) + rwMask = os.FileMode(0660) + roMask = os.FileMode(0440) + execMask = os.FileMode(0110) ) // SetVolumeOwnership modifies the given volume to be owned by @@ -79,6 +80,7 @@ func SetVolumeOwnership(mounter Mounter, fsGroup *int64) error { if info.IsDir() { mask |= os.ModeSetgid + mask |= execMask } err = os.Chmod(path, info.Mode()|mask) diff --git a/vendor/k8s.io/kubernetes/pkg/windows/service/BUILD b/vendor/k8s.io/kubernetes/pkg/windows/service/BUILD index e64c40488b4..e518a527080 100644 --- a/vendor/k8s.io/kubernetes/pkg/windows/service/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/windows/service/BUILD @@ -11,6 +11,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/windows/service", deps = select({ "@io_bazel_rules_go//go/platform:windows": [ + "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//vendor/golang.org/x/sys/windows:go_default_library", "//vendor/golang.org/x/sys/windows/svc:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/windows/service/service.go b/vendor/k8s.io/kubernetes/pkg/windows/service/service.go index a5bffa1822e..47961b842ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/windows/service/service.go +++ b/vendor/k8s.io/kubernetes/pkg/windows/service/service.go @@ -20,7 +20,9 @@ package service import ( "os" + "time" + "k8s.io/apiserver/pkg/server" "k8s.io/klog" "golang.org/x/sys/windows" @@ -80,9 +82,31 @@ Loop: case svc.Interrogate: s <- c.CurrentStatus case svc.Stop, svc.Shutdown: - s <- svc.Status{State: svc.Stopped} - // TODO: Stop the kubelet gracefully instead of killing the process - os.Exit(0) + klog.Infof("Service stopping") + // We need to translate this request into a signal that can be handled by the the signal handler + // handling shutdowns normally (currently apiserver/pkg/server/signal.go). + // If we do not do this, our main threads won't be notified of the upcoming shutdown. + // Since Windows services do not use any console, we cannot simply generate a CTRL_BREAK_EVENT + // but need a dedicated notification mechanism. + graceful := server.RequestShutdown() + + // Free up the control handler and let us terminate as gracefully as possible. + // If that takes too long, the service controller will kill the remaining threads. + // As per https://docs.microsoft.com/en-us/windows/desktop/services/service-control-handler-function + s <- svc.Status{State: svc.StopPending} + + // If we cannot exit gracefully, we really only can exit our process, so atleast the + // service manager will think that we gracefully exited. At the time of writing this comment this is + // needed for applications that do not use signals (e.g. kube-proxy) + if !graceful { + go func() { + // Ensure the SCM was notified (The operation above (send to s) was received and communicated to the + // service control manager - so it doesn't look like the service crashes) + time.Sleep(1 * time.Second) + os.Exit(0) + }() + } + break Loop } } } diff --git a/vendor/k8s.io/kubernetes/plugin/OWNERS b/vendor/k8s.io/kubernetes/plugin/OWNERS index 1f32c648a18..6c485ee2533 100644 --- a/vendor/k8s.io/kubernetes/plugin/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - brendandburns - davidopp diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/admission/OWNERS index f7617ae1cc9..1c6453325d0 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - derekwaynecarr - deads2k diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds/admission.go index c92b9d1b1f1..1bff0d701b2 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds/admission.go @@ -81,7 +81,7 @@ func NewDefaultTolerationSeconds() *Plugin { } // Admit makes an admission decision based on the request attributes -func (p *Plugin) Admit(attributes admission.Attributes) (err error) { +func (p *Plugin) Admit(attributes admission.Attributes, o admission.ObjectInterfaces) (err error) { if attributes.GetResource().GroupResource() != api.Resource("pods") { return nil } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/limitranger/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/limitranger/admission.go index 99356487d09..3e2d7613316 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/limitranger/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/limitranger/admission.go @@ -99,12 +99,12 @@ func (l *LimitRanger) ValidateInitialization() error { } // Admit admits resources into cluster that do not violate any defined LimitRange in the namespace -func (l *LimitRanger) Admit(a admission.Attributes) (err error) { +func (l *LimitRanger) Admit(a admission.Attributes, o admission.ObjectInterfaces) (err error) { return l.runLimitFunc(a, l.actions.MutateLimit) } // Validate admits resources into cluster that do not violate any defined LimitRange in the namespace -func (l *LimitRanger) Validate(a admission.Attributes) (err error) { +func (l *LimitRanger) Validate(a admission.Attributes, o admission.ObjectInterfaces) (err error) { return l.runLimitFunc(a, l.actions.ValidateLimit) } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/BUILD b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/BUILD new file mode 100644 index 00000000000..bcc03b465d9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/BUILD @@ -0,0 +1,76 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_library( + name = "go_default_library", + srcs = ["admission.go"], + importpath = "k8s.io/kubernetes/plugin/pkg/admission/noderestriction", + deps = [ + "//pkg/api/pod:go_default_library", + "//pkg/apis/authentication:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//pkg/apis/core:go_default_library", + "//pkg/apis/policy:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/auth/nodeidentifier:go_default_library", + "//pkg/features:go_default_library", + "//pkg/kubelet/apis:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["admission_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/authentication:go_default_library", + "//pkg/apis/coordination:go_default_library", + "//pkg/apis/core:go_default_library", + "//pkg/apis/policy:go_default_library", + "//pkg/apis/storage:go_default_library", + "//pkg/auth/nodeidentifier:go_default_library", + "//pkg/features:go_default_library", + "//pkg/kubelet/apis:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/OWNERS new file mode 100644 index 00000000000..8ce6a83f6bd --- /dev/null +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/OWNERS @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- sig-auth-node-isolation-approvers +reviewers: +- sig-auth-node-isolation-reviewers +labels: +- sig/auth + diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/admission.go new file mode 100644 index 00000000000..8e06e3e50a3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/noderestriction/admission.go @@ -0,0 +1,557 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package noderestriction + +import ( + "fmt" + "io" + "strings" + + "k8s.io/api/core/v1" + apiequality "k8s.io/apimachinery/pkg/api/equality" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" + apiserveradmission "k8s.io/apiserver/pkg/admission/initializer" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + corev1lister "k8s.io/client-go/listers/core/v1" + "k8s.io/klog" + podutil "k8s.io/kubernetes/pkg/api/pod" + authenticationapi "k8s.io/kubernetes/pkg/apis/authentication" + coordapi "k8s.io/kubernetes/pkg/apis/coordination" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/policy" + storage "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/auth/nodeidentifier" + "k8s.io/kubernetes/pkg/features" + kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" +) + +const ( + PluginName = "NodeRestriction" +) + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return NewPlugin(nodeidentifier.NewDefaultNodeIdentifier()), nil + }) +} + +// NewPlugin creates a new NodeRestriction admission plugin. +// This plugin identifies requests from nodes +func NewPlugin(nodeIdentifier nodeidentifier.NodeIdentifier) *nodePlugin { + return &nodePlugin{ + Handler: admission.NewHandler(admission.Create, admission.Update, admission.Delete), + nodeIdentifier: nodeIdentifier, + features: utilfeature.DefaultFeatureGate, + } +} + +// nodePlugin holds state for and implements the admission plugin. +type nodePlugin struct { + *admission.Handler + nodeIdentifier nodeidentifier.NodeIdentifier + podsGetter corev1lister.PodLister + // allows overriding for testing + features utilfeature.FeatureGate +} + +var ( + _ = admission.Interface(&nodePlugin{}) + _ = apiserveradmission.WantsExternalKubeInformerFactory(&nodePlugin{}) +) + +func (p *nodePlugin) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) { + p.podsGetter = f.Core().V1().Pods().Lister() +} + +func (p *nodePlugin) ValidateInitialization() error { + if p.nodeIdentifier == nil { + return fmt.Errorf("%s requires a node identifier", PluginName) + } + if p.podsGetter == nil { + return fmt.Errorf("%s requires a pod getter", PluginName) + } + return nil +} + +var ( + podResource = api.Resource("pods") + nodeResource = api.Resource("nodes") + pvcResource = api.Resource("persistentvolumeclaims") + svcacctResource = api.Resource("serviceaccounts") + leaseResource = coordapi.Resource("leases") + csiNodeResource = storage.Resource("csinodes") +) + +func (c *nodePlugin) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { + nodeName, isNode := c.nodeIdentifier.NodeIdentity(a.GetUserInfo()) + + // Our job is just to restrict nodes + if !isNode { + return nil + } + + if len(nodeName) == 0 { + // disallow requests we cannot match to a particular node + return admission.NewForbidden(a, fmt.Errorf("could not determine node from user %q", a.GetUserInfo().GetName())) + } + + switch a.GetResource().GroupResource() { + case podResource: + switch a.GetSubresource() { + case "": + return c.admitPod(nodeName, a) + case "status": + return c.admitPodStatus(nodeName, a) + case "eviction": + return c.admitPodEviction(nodeName, a) + default: + return admission.NewForbidden(a, fmt.Errorf("unexpected pod subresource %q, only 'status' and 'eviction' are allowed", a.GetSubresource())) + } + + case nodeResource: + return c.admitNode(nodeName, a) + + case pvcResource: + switch a.GetSubresource() { + case "status": + return c.admitPVCStatus(nodeName, a) + default: + return admission.NewForbidden(a, fmt.Errorf("may only update PVC status")) + } + + case svcacctResource: + if c.features.Enabled(features.TokenRequest) { + return c.admitServiceAccount(nodeName, a) + } + return nil + + case leaseResource: + if c.features.Enabled(features.NodeLease) { + return c.admitLease(nodeName, a) + } + return admission.NewForbidden(a, fmt.Errorf("disabled by feature gate %s", features.NodeLease)) + + case csiNodeResource: + if c.features.Enabled(features.KubeletPluginsWatcher) && c.features.Enabled(features.CSINodeInfo) { + return c.admitCSINode(nodeName, a) + } + return admission.NewForbidden(a, fmt.Errorf("disabled by feature gates %s and %s", features.KubeletPluginsWatcher, features.CSINodeInfo)) + + default: + return nil + } +} + +func (c *nodePlugin) admitPod(nodeName string, a admission.Attributes) error { + switch a.GetOperation() { + case admission.Create: + // require a pod object + pod, ok := a.GetObject().(*api.Pod) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + + // only allow nodes to create mirror pods + if _, isMirrorPod := pod.Annotations[api.MirrorPodAnnotationKey]; !isMirrorPod { + return admission.NewForbidden(a, fmt.Errorf("pod does not have %q annotation, node %q can only create mirror pods", api.MirrorPodAnnotationKey, nodeName)) + } + + // only allow nodes to create a pod bound to itself + if pod.Spec.NodeName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node %q can only create pods with spec.nodeName set to itself", nodeName)) + } + + // don't allow a node to create a pod that references any other API objects + if pod.Spec.ServiceAccountName != "" { + return admission.NewForbidden(a, fmt.Errorf("node %q can not create pods that reference a service account", nodeName)) + } + hasSecrets := false + podutil.VisitPodSecretNames(pod, func(name string) (shouldContinue bool) { hasSecrets = true; return false }) + if hasSecrets { + return admission.NewForbidden(a, fmt.Errorf("node %q can not create pods that reference secrets", nodeName)) + } + hasConfigMaps := false + podutil.VisitPodConfigmapNames(pod, func(name string) (shouldContinue bool) { hasConfigMaps = true; return false }) + if hasConfigMaps { + return admission.NewForbidden(a, fmt.Errorf("node %q can not create pods that reference configmaps", nodeName)) + } + for _, v := range pod.Spec.Volumes { + if v.PersistentVolumeClaim != nil { + return admission.NewForbidden(a, fmt.Errorf("node %q can not create pods that reference persistentvolumeclaims", nodeName)) + } + } + + return nil + + case admission.Delete: + // get the existing pod + existingPod, err := c.podsGetter.Pods(a.GetNamespace()).Get(a.GetName()) + if errors.IsNotFound(err) { + return err + } + if err != nil { + return admission.NewForbidden(a, err) + } + // only allow a node to delete a pod bound to itself + if existingPod.Spec.NodeName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node %q can only delete pods with spec.nodeName set to itself", nodeName)) + } + return nil + + default: + return admission.NewForbidden(a, fmt.Errorf("unexpected operation %q, node %q can only create and delete mirror pods", a.GetOperation(), nodeName)) + } +} + +func (c *nodePlugin) admitPodStatus(nodeName string, a admission.Attributes) error { + switch a.GetOperation() { + case admission.Update: + // require an existing pod + pod, ok := a.GetOldObject().(*api.Pod) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetOldObject())) + } + // only allow a node to update status of a pod bound to itself + if pod.Spec.NodeName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node %q can only update pod status for pods with spec.nodeName set to itself", nodeName)) + } + return nil + + default: + return admission.NewForbidden(a, fmt.Errorf("unexpected operation %q", a.GetOperation())) + } +} + +func (c *nodePlugin) admitPodEviction(nodeName string, a admission.Attributes) error { + switch a.GetOperation() { + case admission.Create: + // require eviction to an existing pod object + eviction, ok := a.GetObject().(*policy.Eviction) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + // use pod name from the admission attributes, if set, rather than from the submitted Eviction object + podName := a.GetName() + if len(podName) == 0 { + if len(eviction.Name) == 0 { + return admission.NewForbidden(a, fmt.Errorf("could not determine pod from request data")) + } + podName = eviction.Name + } + // get the existing pod + existingPod, err := c.podsGetter.Pods(a.GetNamespace()).Get(podName) + if errors.IsNotFound(err) { + return err + } + if err != nil { + return admission.NewForbidden(a, err) + } + // only allow a node to evict a pod bound to itself + if existingPod.Spec.NodeName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node %s can only evict pods with spec.nodeName set to itself", nodeName)) + } + return nil + + default: + return admission.NewForbidden(a, fmt.Errorf("unexpected operation %s", a.GetOperation())) + } +} + +func (c *nodePlugin) admitPVCStatus(nodeName string, a admission.Attributes) error { + switch a.GetOperation() { + case admission.Update: + if !c.features.Enabled(features.ExpandPersistentVolumes) { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to update persistentvolumeclaim metadata", nodeName)) + } + + oldPVC, ok := a.GetOldObject().(*api.PersistentVolumeClaim) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetOldObject())) + } + + newPVC, ok := a.GetObject().(*api.PersistentVolumeClaim) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + + // make copies for comparison + oldPVC = oldPVC.DeepCopy() + newPVC = newPVC.DeepCopy() + + // zero out resourceVersion to avoid comparing differences, + // since the new object could leave it empty to indicate an unconditional update + oldPVC.ObjectMeta.ResourceVersion = "" + newPVC.ObjectMeta.ResourceVersion = "" + + oldPVC.Status.Capacity = nil + newPVC.Status.Capacity = nil + + oldPVC.Status.Conditions = nil + newPVC.Status.Conditions = nil + + // TODO(apelisse): We don't have a good mechanism to + // verify that only the things that should have changed + // have changed. Ignore it for now. + oldPVC.ObjectMeta.ManagedFields = nil + newPVC.ObjectMeta.ManagedFields = nil + + // ensure no metadata changed. nodes should not be able to relabel, add finalizers/owners, etc + if !apiequality.Semantic.DeepEqual(oldPVC, newPVC) { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to update fields other than status.capacity and status.conditions: %v", nodeName, diff.ObjectReflectDiff(oldPVC, newPVC))) + } + + return nil + + default: + return admission.NewForbidden(a, fmt.Errorf("unexpected operation %q", a.GetOperation())) + } +} + +func (c *nodePlugin) admitNode(nodeName string, a admission.Attributes) error { + requestedName := a.GetName() + if a.GetOperation() == admission.Create { + node, ok := a.GetObject().(*api.Node) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + + // Don't allow a node to create its Node API object with the config source set. + // We scope node access to things listed in the Node.Spec, so allowing this would allow a view escalation. + if node.Spec.ConfigSource != nil { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to create pods with a non-nil configSource", nodeName)) + } + + // Don't allow a node to register with labels outside the allowed set. + // This would allow a node to add or modify its labels in a way that would let it steer privileged workloads to itself. + modifiedLabels := getModifiedLabels(node.Labels, nil) + if forbiddenLabels := c.getForbiddenCreateLabels(modifiedLabels); len(forbiddenLabels) > 0 { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to set the following labels: %s", nodeName, strings.Join(forbiddenLabels.List(), ", "))) + } + // check and warn if nodes set labels on create that would have been forbidden on update + // TODO(liggitt): in 1.17, expand getForbiddenCreateLabels to match getForbiddenUpdateLabels and drop this + if forbiddenUpdateLabels := c.getForbiddenUpdateLabels(modifiedLabels); len(forbiddenUpdateLabels) > 0 { + klog.Warningf("node %q added disallowed labels on node creation: %s", nodeName, strings.Join(forbiddenUpdateLabels.List(), ", ")) + } + + // On create, get name from new object if unset in admission + if len(requestedName) == 0 { + requestedName = node.Name + } + } + if requestedName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to modify node %q", nodeName, requestedName)) + } + + if a.GetOperation() == admission.Update { + node, ok := a.GetObject().(*api.Node) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + oldNode, ok := a.GetOldObject().(*api.Node) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + + // Don't allow a node to update the config source on its Node API object. + // We scope node access to things listed in the Node.Spec, so allowing this would allow a view escalation. + // We only do the check if the new node's configSource is non-nil; old kubelets might drop the field during a status update. + if node.Spec.ConfigSource != nil && !apiequality.Semantic.DeepEqual(node.Spec.ConfigSource, oldNode.Spec.ConfigSource) { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to update configSource to a new non-nil configSource", nodeName)) + } + + // Don't allow a node to update its own taints. This would allow a node to remove or modify its + // taints in a way that would let it steer disallowed workloads to itself. + if !apiequality.Semantic.DeepEqual(node.Spec.Taints, oldNode.Spec.Taints) { + return admission.NewForbidden(a, fmt.Errorf("node %q is not allowed to modify taints", nodeName)) + } + + // Don't allow a node to update labels outside the allowed set. + // This would allow a node to add or modify its labels in a way that would let it steer privileged workloads to itself. + modifiedLabels := getModifiedLabels(node.Labels, oldNode.Labels) + if forbiddenUpdateLabels := c.getForbiddenUpdateLabels(modifiedLabels); len(forbiddenUpdateLabels) > 0 { + return admission.NewForbidden(a, fmt.Errorf("is not allowed to modify labels: %s", strings.Join(forbiddenUpdateLabels.List(), ", "))) + } + } + + return nil +} + +// getModifiedLabels returns the set of label keys that are different between the two maps +func getModifiedLabels(a, b map[string]string) sets.String { + modified := sets.NewString() + for k, v1 := range a { + if v2, ok := b[k]; !ok || v1 != v2 { + modified.Insert(k) + } + } + for k, v1 := range b { + if v2, ok := a[k]; !ok || v1 != v2 { + modified.Insert(k) + } + } + return modified +} + +func isKubernetesLabel(key string) bool { + namespace := getLabelNamespace(key) + if namespace == "kubernetes.io" || strings.HasSuffix(namespace, ".kubernetes.io") { + return true + } + if namespace == "k8s.io" || strings.HasSuffix(namespace, ".k8s.io") { + return true + } + return false +} + +func getLabelNamespace(key string) string { + if parts := strings.SplitN(key, "/", 2); len(parts) == 2 { + return parts[0] + } + return "" +} + +// getForbiddenCreateLabels returns the set of labels that may not be set by the node. +// TODO(liggitt): in 1.17, expand to match getForbiddenUpdateLabels() +func (c *nodePlugin) getForbiddenCreateLabels(modifiedLabels sets.String) sets.String { + if len(modifiedLabels) == 0 { + return nil + } + + forbiddenLabels := sets.NewString() + for label := range modifiedLabels { + namespace := getLabelNamespace(label) + // forbid kubelets from setting node-restriction labels + if namespace == v1.LabelNamespaceNodeRestriction || strings.HasSuffix(namespace, "."+v1.LabelNamespaceNodeRestriction) { + forbiddenLabels.Insert(label) + } + } + return forbiddenLabels +} + +// getForbiddenLabels returns the set of labels that may not be set by the node on update. +func (c *nodePlugin) getForbiddenUpdateLabels(modifiedLabels sets.String) sets.String { + if len(modifiedLabels) == 0 { + return nil + } + + forbiddenLabels := sets.NewString() + for label := range modifiedLabels { + namespace := getLabelNamespace(label) + // forbid kubelets from setting node-restriction labels + if namespace == v1.LabelNamespaceNodeRestriction || strings.HasSuffix(namespace, "."+v1.LabelNamespaceNodeRestriction) { + forbiddenLabels.Insert(label) + } + // forbid kubelets from setting unknown kubernetes.io and k8s.io labels on update + if isKubernetesLabel(label) && !kubeletapis.IsKubeletLabel(label) { + // TODO: defer to label policy once available + forbiddenLabels.Insert(label) + } + } + return forbiddenLabels +} + +func (c *nodePlugin) admitServiceAccount(nodeName string, a admission.Attributes) error { + if a.GetOperation() != admission.Create { + return nil + } + if a.GetSubresource() != "token" { + return nil + } + tr, ok := a.GetObject().(*authenticationapi.TokenRequest) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + + // TokenRequests from a node must have a pod binding. That pod must be + // scheduled on the node. + ref := tr.Spec.BoundObjectRef + if ref == nil || + ref.APIVersion != "v1" || + ref.Kind != "Pod" || + ref.Name == "" { + return admission.NewForbidden(a, fmt.Errorf("node requested token not bound to a pod")) + } + if ref.UID == "" { + return admission.NewForbidden(a, fmt.Errorf("node requested token with a pod binding without a uid")) + } + pod, err := c.podsGetter.Pods(a.GetNamespace()).Get(ref.Name) + if errors.IsNotFound(err) { + return err + } + if err != nil { + return admission.NewForbidden(a, err) + } + if ref.UID != pod.UID { + return admission.NewForbidden(a, fmt.Errorf("the UID in the bound object reference (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", ref.UID, pod.UID)) + } + if pod.Spec.NodeName != nodeName { + return admission.NewForbidden(a, fmt.Errorf("node requested token bound to a pod scheduled on a different node")) + } + + return nil +} + +func (r *nodePlugin) admitLease(nodeName string, a admission.Attributes) error { + // the request must be against the system namespace reserved for node leases + if a.GetNamespace() != api.NamespaceNodeLease { + return admission.NewForbidden(a, fmt.Errorf("can only access leases in the %q system namespace", api.NamespaceNodeLease)) + } + + // the request must come from a node with the same name as the lease + if a.GetOperation() == admission.Create { + // a.GetName() won't return the name on create, so we drill down to the proposed object + lease, ok := a.GetObject().(*coordapi.Lease) + if !ok { + return admission.NewForbidden(a, fmt.Errorf("unexpected type %T", a.GetObject())) + } + if lease.Name != nodeName { + return admission.NewForbidden(a, fmt.Errorf("can only access node lease with the same name as the requesting node")) + } + } else { + if a.GetName() != nodeName { + return admission.NewForbidden(a, fmt.Errorf("can only access node lease with the same name as the requesting node")) + } + } + + return nil +} + +func (c *nodePlugin) admitCSINode(nodeName string, a admission.Attributes) error { + // the request must come from a node with the same name as the CSINode object + if a.GetOperation() == admission.Create { + // a.GetName() won't return the name on create, so we drill down to the proposed object + accessor, err := meta.Accessor(a.GetObject()) + if err != nil { + return admission.NewForbidden(a, fmt.Errorf("unable to access the object name")) + } + if accessor.GetName() != nodeName { + return admission.NewForbidden(a, fmt.Errorf("can only access CSINode with the same name as the requesting node")) + } + } else { + if a.GetName() != nodeName { + return admission.NewForbidden(a, fmt.Errorf("can only access CSINode with the same name as the requesting node")) + } + } + + return nil +} diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/nodetaint/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/nodetaint/admission.go index 71cce0d9e21..dbf0931ba2e 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/nodetaint/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/nodetaint/admission.go @@ -64,7 +64,7 @@ var ( ) // Admit is the main function that checks node identity and adds taints as needed. -func (p *Plugin) Admit(a admission.Attributes) error { +func (p *Plugin) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { // If TaintNodesByCondition is not enabled, we don't need to do anything. if !p.features.Enabled(features.TaintNodesByCondition) { return nil diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/BUILD b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/BUILD index 3737f0c2361..97abdf9f9c7 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/BUILD +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/BUILD @@ -8,10 +8,7 @@ load( go_test( name = "go_default_test", - srcs = [ - "admission_test.go", - "main_test.go", - ], + srcs = ["admission_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go index be5a0768798..973317f6989 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go @@ -96,7 +96,7 @@ var ( // Admit checks Pods and admits or rejects them. It also resolves the priority of pods based on their PriorityClass. // Note that pod validation mechanism prevents update of a pod priority. -func (p *priorityPlugin) Admit(a admission.Attributes) error { +func (p *priorityPlugin) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { if !utilfeature.DefaultFeatureGate.Enabled(features.PodPriority) { return nil } @@ -120,7 +120,7 @@ func (p *priorityPlugin) Admit(a admission.Attributes) error { } // Validate checks PriorityClasses and admits or rejects them. -func (p *priorityPlugin) Validate(a admission.Attributes) error { +func (p *priorityPlugin) Validate(a admission.Attributes, o admission.ObjectInterfaces) error { operation := a.GetOperation() // Ignore all calls to subresources if len(a.GetSubresource()) != 0 { diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/BUILD b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/BUILD index 96d889890e1..3e263468471 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/BUILD +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/BUILD @@ -20,8 +20,6 @@ go_library( "//pkg/kubeapiserver/admission:go_default_library", "//pkg/quota/v1:go_default_library", "//pkg/quota/v1/generic:go_default_library", - "//pkg/util/reflector/prometheus:go_default_library", - "//pkg/util/workqueue/prometheus:go_default_library", "//plugin/pkg/admission/resourcequota/apis/resourcequota:go_default_library", "//plugin/pkg/admission/resourcequota/apis/resourcequota/install:go_default_library", "//plugin/pkg/admission/resourcequota/apis/resourcequota/v1beta1:go_default_library", @@ -51,10 +49,7 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "admission_test.go", - "main_test.go", - ], + srcs = ["admission_test.go"], embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go index 43097ef5569..0fad34051fb 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go @@ -127,7 +127,7 @@ func (a *QuotaAdmission) ValidateInitialization() error { } // Validate makes admission decisions while enforcing quota -func (a *QuotaAdmission) Validate(attr admission.Attributes) (err error) { +func (a *QuotaAdmission) Validate(attr admission.Attributes, o admission.ObjectInterfaces) (err error) { // ignore all operations that correspond to sub-resource actions if attr.GetSubresource() != "" { return nil diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/OWNERS old mode 100755 new mode 100644 index 6c48a1a83ef..cc22b22270e --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - deads2k - derekwaynecarr diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go index 13f46d1d5c9..1c109d2713f 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go @@ -37,8 +37,6 @@ import ( "k8s.io/client-go/util/workqueue" quota "k8s.io/kubernetes/pkg/quota/v1" "k8s.io/kubernetes/pkg/quota/v1/generic" - _ "k8s.io/kubernetes/pkg/util/reflector/prometheus" // for reflector metric registration - _ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // for workqueue metric registration resourcequotaapi "k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota" ) diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/resource_access.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/resource_access.go index f703d478b33..dfdde7e753e 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/resource_access.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/resource_access.go @@ -125,7 +125,7 @@ func (e *quotaAccessor) GetQuotas(namespace string) ([]corev1.ResourceQuota, err // If there is already in-flight List() for a given namespace, we should wait until // it is finished and cache is updated instead of doing the same, also to avoid // throttling - see #22422 for details. - liveList, err := e.client.Core().ResourceQuotas(namespace).List(metav1.ListOptions{}) + liveList, err := e.client.CoreV1().ResourceQuotas(namespace).List(metav1.ListOptions{}) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/BUILD b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/BUILD index b7e1566d0c5..9d98ef4421b 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/BUILD +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/BUILD @@ -17,7 +17,6 @@ go_library( "//pkg/api/pod:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubeapiserver/admission/util:go_default_library", "//pkg/serviceaccount:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/OWNERS index d914c0d7195..c6c376de4e1 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-serviceaccounts-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/admission.go index 11fc92c4245..ce2e4dd7d43 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/admission.go @@ -38,7 +38,6 @@ import ( corev1listers "k8s.io/client-go/listers/core/v1" podutil "k8s.io/kubernetes/pkg/api/pod" api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/kubeapiserver/admission/util" "k8s.io/kubernetes/pkg/serviceaccount" ) @@ -103,7 +102,7 @@ var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&serviceAcc // 5. If MountServiceAccountToken is true, it adds a VolumeMount with the pod's ServiceAccount's api token secret to containers func NewServiceAccount() *serviceAccount { return &serviceAccount{ - Handler: admission.NewHandler(admission.Create, admission.Update), + Handler: admission.NewHandler(admission.Create), // TODO: enable this once we've swept secret usage to account for adding secret references to service accounts LimitSecretReferences: false, // Auto mount service account API token secrets @@ -147,18 +146,10 @@ func (a *serviceAccount) ValidateInitialization() error { return nil } -func (s *serviceAccount) Admit(a admission.Attributes) (err error) { +func (s *serviceAccount) Admit(a admission.Attributes, o admission.ObjectInterfaces) (err error) { if shouldIgnore(a) { return nil } - updateInitialized, err := util.IsUpdatingInitializedObject(a) - if err != nil { - return err - } - if updateInitialized { - // related pod spec fields are immutable after the pod is initialized - return nil - } pod := a.GetObject().(*api.Pod) @@ -166,7 +157,7 @@ func (s *serviceAccount) Admit(a admission.Attributes) (err error) { // That makes the kubelet very angry and confused, and it immediately deletes the pod (because the spec doesn't match) // That said, don't allow mirror pods to reference ServiceAccounts or SecretVolumeSources either if _, isMirrorPod := pod.Annotations[api.MirrorPodAnnotationKey]; isMirrorPod { - return s.Validate(a) + return s.Validate(a, o) } // Set the default service account if needed @@ -193,21 +184,13 @@ func (s *serviceAccount) Admit(a admission.Attributes) (err error) { } } - return s.Validate(a) + return s.Validate(a, o) } -func (s *serviceAccount) Validate(a admission.Attributes) (err error) { +func (s *serviceAccount) Validate(a admission.Attributes, o admission.ObjectInterfaces) (err error) { if shouldIgnore(a) { return nil } - updateInitialized, err := util.IsUpdatingInitializedObject(a) - if err != nil { - return err - } - if updateInitialized { - // related pod spec fields are immutable after the pod is initialized - return nil - } pod := a.GetObject().(*api.Pod) @@ -255,6 +238,9 @@ func shouldIgnore(a admission.Attributes) bool { if a.GetResource().GroupResource() != api.Resource("pods") { return true } + if a.GetSubresource() != "" { + return true + } obj := a.GetObject() if obj == nil { return true @@ -316,7 +302,7 @@ func (s *serviceAccount) getServiceAccount(namespace string, name string) (*core if i != 0 { time.Sleep(retryInterval) } - serviceAccount, err := s.client.Core().ServiceAccounts(namespace).Get(name, metav1.GetOptions{}) + serviceAccount, err := s.client.CoreV1().ServiceAccounts(namespace).Get(name, metav1.GetOptions{}) if err == nil { return serviceAccount, nil } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize/admission.go index 3a945ea9dcc..e616826faea 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize/admission.go @@ -71,7 +71,7 @@ func (pvcr *persistentVolumeClaimResize) ValidateInitialization() error { return nil } -func (pvcr *persistentVolumeClaimResize) Validate(a admission.Attributes) error { +func (pvcr *persistentVolumeClaimResize) Validate(a admission.Attributes, o admission.ObjectInterfaces) error { if a.GetResource().GroupResource() != api.Resource("persistentvolumeclaims") { return nil } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault/admission.go index 98610ae060e..9366312c935 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault/admission.go @@ -85,7 +85,7 @@ func (a *claimDefaulterPlugin) ValidateInitialization() error { // 1. Find available StorageClasses. // 2. Figure which is the default // 3. Write to the PVClaim -func (a *claimDefaulterPlugin) Admit(attr admission.Attributes) error { +func (a *claimDefaulterPlugin) Admit(attr admission.Attributes, o admission.ObjectInterfaces) error { if attr.GetResource().GroupResource() != api.Resource("persistentvolumeclaims") { return nil } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/auth/OWNERS index 54da3e8166e..4c81dde8eaa 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - erictune - liggitt diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/OWNERS index cd0d70a0f8f..7b3130fdcbc 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-authorizers-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/BUILD b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/BUILD index 5ae8b4a5369..39ae2624b64 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/BUILD +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/BUILD @@ -19,7 +19,7 @@ go_test( "//pkg/features:go_default_library", "//plugin/pkg/auth/authorizer/rbac/bootstrappolicy:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library", @@ -49,14 +49,13 @@ go_library( "//plugin/pkg/auth/authorizer/rbac:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", - "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/informers/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library", "//third_party/forked/gonum/graph:go_default_library", "//third_party/forked/gonum/graph/simple:go_default_library", "//third_party/forked/gonum/graph/traverse:go_default_library", diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/OWNERS b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/OWNERS index 5a7794867cf..8ce6a83f6bd 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/OWNERS +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - sig-auth-node-isolation-approvers reviewers: diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/graph_populator.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/graph_populator.go index f2cc1a5135c..7e5976379ea 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/graph_populator.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/graph_populator.go @@ -21,10 +21,10 @@ import ( "k8s.io/klog" corev1 "k8s.io/api/core/v1" - storagev1beta1 "k8s.io/api/storage/v1beta1" + storagev1 "k8s.io/api/storage/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" corev1informers "k8s.io/client-go/informers/core/v1" - storageinformers "k8s.io/client-go/informers/storage/v1beta1" + storageinformers "k8s.io/client-go/informers/storage/v1" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/pkg/features" ) @@ -195,10 +195,10 @@ func (g *graphPopulator) addVolumeAttachment(obj interface{}) { } func (g *graphPopulator) updateVolumeAttachment(oldObj, obj interface{}) { - attachment := obj.(*storagev1beta1.VolumeAttachment) + attachment := obj.(*storagev1.VolumeAttachment) if oldObj != nil { // skip add if node name is identical - oldAttachment := oldObj.(*storagev1beta1.VolumeAttachment) + oldAttachment := oldObj.(*storagev1.VolumeAttachment) if oldAttachment.Spec.NodeName == attachment.Spec.NodeName { return } @@ -210,7 +210,7 @@ func (g *graphPopulator) deleteVolumeAttachment(obj interface{}) { if tombstone, ok := obj.(cache.DeletedFinalStateUnknown); ok { obj = tombstone.Obj } - attachment, ok := obj.(*storagev1beta1.VolumeAttachment) + attachment, ok := obj.(*storagev1.VolumeAttachment) if !ok { klog.Infof("unexpected type %T", obj) return diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/node_authorizer.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/node_authorizer.go index 05fc803a4af..b0f49c12fa8 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/node_authorizer.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/node/node_authorizer.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/authorization/authorizer" utilfeature "k8s.io/apiserver/pkg/util/feature" + coordapi "k8s.io/kubernetes/pkg/apis/coordination" api "k8s.io/kubernetes/pkg/apis/core" storageapi "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/auth/nodeidentifier" @@ -66,12 +67,14 @@ func NewAuthorizer(graph *Graph, identifier nodeidentifier.NodeIdentifier, rules } var ( - configMapResource = api.Resource("configmaps") - secretResource = api.Resource("secrets") - pvcResource = api.Resource("persistentvolumeclaims") - pvResource = api.Resource("persistentvolumes") - vaResource = storageapi.Resource("volumeattachments") - svcAcctResource = api.Resource("serviceaccounts") + configMapResource = api.Resource("configmaps") + secretResource = api.Resource("secrets") + pvcResource = api.Resource("persistentvolumeclaims") + pvResource = api.Resource("persistentvolumes") + vaResource = storageapi.Resource("volumeattachments") + svcAcctResource = api.Resource("serviceaccounts") + leaseResource = coordapi.Resource("leases") + csiNodeResource = storageapi.Resource("csinodes") ) func (r *NodeAuthorizer) Authorize(attrs authorizer.Attributes) (authorizer.Decision, string, error) { @@ -113,6 +116,16 @@ func (r *NodeAuthorizer) Authorize(attrs authorizer.Attributes) (authorizer.Deci return r.authorizeCreateToken(nodeName, serviceAccountVertexType, attrs) } return authorizer.DecisionNoOpinion, fmt.Sprintf("disabled by feature gate %s", features.TokenRequest), nil + case leaseResource: + if r.features.Enabled(features.NodeLease) { + return r.authorizeLease(nodeName, attrs) + } + return authorizer.DecisionNoOpinion, fmt.Sprintf("disabled by feature gate %s", features.NodeLease), nil + case csiNodeResource: + if r.features.Enabled(features.KubeletPluginsWatcher) && r.features.Enabled(features.CSINodeInfo) { + return r.authorizeCSINode(nodeName, attrs) + } + return authorizer.DecisionNoOpinion, fmt.Sprintf("disabled by feature gates %s and %s", features.KubeletPluginsWatcher, features.CSINodeInfo), nil } } @@ -182,11 +195,11 @@ func (r *NodeAuthorizer) authorize(nodeName string, startingType vertexType, att ok, err := r.hasPathFrom(nodeName, startingType, attrs.GetNamespace(), attrs.GetName()) if err != nil { klog.V(2).Infof("NODE DENY: %v", err) - return authorizer.DecisionNoOpinion, "no path found to object", nil + return authorizer.DecisionNoOpinion, fmt.Sprintf("no relationship found between node %q and this object", nodeName), nil } if !ok { klog.V(2).Infof("NODE DENY: %q %#v", nodeName, attrs) - return authorizer.DecisionNoOpinion, "no path found to object", nil + return authorizer.DecisionNoOpinion, fmt.Sprintf("no relationship found between node %q and this object", nodeName), nil } return authorizer.DecisionAllow, "", nil } @@ -207,11 +220,11 @@ func (r *NodeAuthorizer) authorizeCreateToken(nodeName string, startingType vert ok, err := r.hasPathFrom(nodeName, startingType, attrs.GetNamespace(), attrs.GetName()) if err != nil { klog.V(2).Infof("NODE DENY: %v", err) - return authorizer.DecisionNoOpinion, "no path found to object", nil + return authorizer.DecisionNoOpinion, fmt.Sprintf("no relationship found between node %q and this object", nodeName), nil } if !ok { klog.V(2).Infof("NODE DENY: %q %#v", nodeName, attrs) - return authorizer.DecisionNoOpinion, "no path found to object", nil + return authorizer.DecisionNoOpinion, fmt.Sprintf("no relationship found between node %q and this object", nodeName), nil } return authorizer.DecisionAllow, "", nil } @@ -246,6 +259,35 @@ func (r *NodeAuthorizer) authorizeLease(nodeName string, attrs authorizer.Attrib return authorizer.DecisionAllow, "", nil } +// authorizeCSINode authorizes node requests to CSINode storage.k8s.io/csinodes +func (r *NodeAuthorizer) authorizeCSINode(nodeName string, attrs authorizer.Attributes) (authorizer.Decision, string, error) { + // allowed verbs: get, create, update, patch, delete + verb := attrs.GetVerb() + if verb != "get" && + verb != "create" && + verb != "update" && + verb != "patch" && + verb != "delete" { + klog.V(2).Infof("NODE DENY: %s %#v", nodeName, attrs) + return authorizer.DecisionNoOpinion, "can only get, create, update, patch, or delete a CSINode", nil + } + + if len(attrs.GetSubresource()) > 0 { + klog.V(2).Infof("NODE DENY: %s %#v", nodeName, attrs) + return authorizer.DecisionNoOpinion, "cannot authorize CSINode subresources", nil + } + + // the request must come from a node with the same name as the CSINode + // note we skip this check for create, since the authorizer doesn't know the name on create + // the noderestriction admission plugin is capable of performing this check at create time + if verb != "create" && attrs.GetName() != nodeName { + klog.V(2).Infof("NODE DENY: %s %#v", nodeName, attrs) + return authorizer.DecisionNoOpinion, "can only access CSINode with the same name as the requesting node", nil + } + + return authorizer.DecisionAllow, "", nil +} + // hasPathFrom returns true if there is a directed path from the specified type/namespace/name to the specified Node func (r *NodeAuthorizer) hasPathFrom(nodeName string, startingType vertexType, startingNamespace, startingName string) (bool, error) { r.graph.lock.RLock() @@ -290,7 +332,7 @@ func (r *NodeAuthorizer) hasPathFrom(nodeName string, startingType vertexType, s return found }) if !found { - return false, fmt.Errorf("node %q cannot get %s %s/%s, no path was found", nodeName, vertexTypes[startingType], startingNamespace, startingName) + return false, fmt.Errorf("node %q cannot get %s %s/%s, no relationship to this object was found in the node authorizer graph", nodeName, vertexTypes[startingType], startingNamespace, startingName) } return true, nil } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go index 0daa561e791..a7f0f1850aa 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go @@ -73,6 +73,9 @@ func buildControllerRoles() ([]rbacv1.ClusterRole, []rbacv1.ClusterRoleBinding) if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) { role.Rules = append(role.Rules, rbacv1helpers.NewRule("get", "create", "delete", "list", "watch").Groups(storageGroup).Resources("volumeattachments").RuleOrDie()) + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + role.Rules = append(role.Rules, rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csidrivers").RuleOrDie()) + } } return role diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go index 31ca13db521..b2983c44e45 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go @@ -23,6 +23,7 @@ import ( rbacv1 "k8s.io/api/rbac/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/authentication/user" rbacv1helpers "k8s.io/kubernetes/pkg/apis/rbac/v1" ) @@ -119,10 +120,15 @@ func init() { rbacv1helpers.NewRule("get", "update").Groups(legacyGroup).Resources("configmaps").Names("kube-scheduler").RuleOrDie(), }, }) + + delegatedAuthBinding := rbacv1helpers.NewRoleBinding("extension-apiserver-authentication-reader", metav1.NamespaceSystem).Users(user.KubeControllerManager, user.KubeScheduler).BindingOrDie() + delegatedAuthBinding.Name = "system::extension-apiserver-authentication-reader" + addNamespaceRoleBinding(metav1.NamespaceSystem, delegatedAuthBinding) + addNamespaceRoleBinding(metav1.NamespaceSystem, - rbacv1helpers.NewRoleBinding("system::leader-locking-kube-controller-manager", metav1.NamespaceSystem).SAs(metav1.NamespaceSystem, "kube-controller-manager").BindingOrDie()) + rbacv1helpers.NewRoleBinding("system::leader-locking-kube-controller-manager", metav1.NamespaceSystem).Users(user.KubeControllerManager).SAs(metav1.NamespaceSystem, "kube-controller-manager").BindingOrDie()) addNamespaceRoleBinding(metav1.NamespaceSystem, - rbacv1helpers.NewRoleBinding("system::leader-locking-kube-scheduler", metav1.NamespaceSystem).SAs(metav1.NamespaceSystem, "kube-scheduler").BindingOrDie()) + rbacv1helpers.NewRoleBinding("system::leader-locking-kube-scheduler", metav1.NamespaceSystem).Users(user.KubeScheduler).SAs(metav1.NamespaceSystem, "kube-scheduler").BindingOrDie()) addNamespaceRoleBinding(metav1.NamespaceSystem, rbacv1helpers.NewRoleBinding(saRolePrefix+"bootstrap-signer", metav1.NamespaceSystem).SAs(metav1.NamespaceSystem, "bootstrap-signer").BindingOrDie()) // cloud-provider is deprecated starting Kubernetes 1.10 and will be deleted according to GA deprecation policy. diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go index 7d66f70aeef..f037181279d 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go @@ -159,8 +159,26 @@ func NodeRules() []rbacv1.PolicyRule { if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) { volAttachRule := rbacv1helpers.NewRule("get").Groups(storageGroup).Resources("volumeattachments").RuleOrDie() nodePolicyRules = append(nodePolicyRules, volAttachRule) + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + csiDriverRule := rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csidrivers").RuleOrDie() + nodePolicyRules = append(nodePolicyRules, csiDriverRule) + } + } + if utilfeature.DefaultFeatureGate.Enabled(features.KubeletPluginsWatcher) && + utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + csiNodeInfoRule := rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups("storage.k8s.io").Resources("csinodes").RuleOrDie() + nodePolicyRules = append(nodePolicyRules, csiNodeInfoRule) } + // Node leases + if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { + nodePolicyRules = append(nodePolicyRules, rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups("coordination.k8s.io").Resources("leases").RuleOrDie()) + } + + // RuntimeClass + if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) { + nodePolicyRules = append(nodePolicyRules, rbacv1helpers.NewRule("get", "list", "watch").Groups("node.k8s.io").Resources("runtimeclasses").RuleOrDie()) + } return nodePolicyRules } @@ -181,11 +199,6 @@ func ClusterRoles() []rbacv1.ClusterRole { Rules: []rbacv1.PolicyRule{ rbacv1helpers.NewRule("get").URLs( "/healthz", "/version", "/version/", - // remove once swagger 1.2 support is removed - "/swaggerapi", "/swaggerapi/*", - // do not expand this pattern for openapi discovery docs - // move to a single openapi endpoint that takes accept/accept-encoding headers - "/swagger.json", "/swagger-2.0.0.pb-v1", "/openapi", "/openapi/*", "/api", "/api/*", "/apis", "/apis/*", @@ -200,7 +213,15 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule("create").Groups(authorizationGroup).Resources("selfsubjectaccessreviews", "selfsubjectrulesreviews").RuleOrDie(), }, }, - + { + // a role which provides just enough power read insensitive cluster information + ObjectMeta: metav1.ObjectMeta{Name: "system:public-info-viewer"}, + Rules: []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("get").URLs( + "/healthz", "/version", "/version/", + ).RuleOrDie(), + }, + }, { // a role for a namespace level admin. It is `edit` plus the power to grant permissions to other users. ObjectMeta: metav1.ObjectMeta{Name: "admin"}, @@ -271,7 +292,7 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule(Write...).Groups(policyGroup).Resources("poddisruptionbudgets").RuleOrDie(), - rbacv1helpers.NewRule(Write...).Groups(networkingGroup).Resources("networkpolicies").RuleOrDie(), + rbacv1helpers.NewRule(Write...).Groups(networkingGroup).Resources("networkpolicies", "ingresses").RuleOrDie(), }, }, { @@ -304,7 +325,7 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule(Read...).Groups(policyGroup).Resources("poddisruptionbudgets").RuleOrDie(), - rbacv1helpers.NewRule(Read...).Groups(networkingGroup).Resources("networkpolicies").RuleOrDie(), + rbacv1helpers.NewRule(Read...).Groups(networkingGroup).Resources("networkpolicies", "ingresses").RuleOrDie(), }, }, { @@ -389,6 +410,7 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule("update").Groups(legacyGroup).Resources("endpoints", "secrets", "serviceaccounts").RuleOrDie(), // Needed to check API access. These creates are non-mutating rbacv1helpers.NewRule("create").Groups(authenticationGroup).Resources("tokenreviews").RuleOrDie(), + rbacv1helpers.NewRule("create").Groups(authorizationGroup).Resources("subjectaccessreviews").RuleOrDie(), // Needed for all shared informers rbacv1helpers.NewRule("list", "watch").Groups("*").Resources("*").RuleOrDie(), }, @@ -416,6 +438,9 @@ func ClusterRoles() []rbacv1.ClusterRole { // things that pods use or applies to them rbacv1helpers.NewRule(Read...).Groups(policyGroup).Resources("poddisruptionbudgets").RuleOrDie(), rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("persistentvolumeclaims", "persistentvolumes").RuleOrDie(), + // Needed to check API access. These creates are non-mutating + rbacv1helpers.NewRule("create").Groups(authenticationGroup).Resources("tokenreviews").RuleOrDie(), + rbacv1helpers.NewRule("create").Groups(authorizationGroup).Resources("subjectaccessreviews").RuleOrDie(), }, }, { @@ -471,17 +496,14 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule("create").Groups(certificatesGroup).Resources("certificatesigningrequests/selfnodeclient").RuleOrDie(), }, }, - } - - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - roles = append(roles, rbacv1.ClusterRole{ + { ObjectMeta: metav1.ObjectMeta{Name: "system:volume-scheduler"}, Rules: []rbacv1.PolicyRule{ rbacv1helpers.NewRule(ReadUpdate...).Groups(legacyGroup).Resources("persistentvolumes").RuleOrDie(), rbacv1helpers.NewRule(Read...).Groups(storageGroup).Resources("storageclasses").RuleOrDie(), rbacv1helpers.NewRule(ReadUpdate...).Groups(legacyGroup).Resources("persistentvolumeclaims").RuleOrDie(), }, - }) + }, } externalProvisionerRules := []rbacv1.PolicyRule{ @@ -491,6 +513,9 @@ func ClusterRoles() []rbacv1.ClusterRole { rbacv1helpers.NewRule("get", "list", "watch", "create", "update", "patch").Groups(legacyGroup).Resources("events").RuleOrDie(), rbacv1helpers.NewRule("get", "list", "watch").Groups(legacyGroup).Resources("nodes").RuleOrDie(), } + if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + externalProvisionerRules = append(externalProvisionerRules, rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csinodes").RuleOrDie()) + } roles = append(roles, rbacv1.ClusterRole{ // a role for the csi external provisioner ObjectMeta: metav1.ObjectMeta{Name: "system:csi-external-provisioner"}, @@ -507,13 +532,15 @@ const systemNodeRoleName = "system:node" func ClusterRoleBindings() []rbacv1.ClusterRoleBinding { rolebindings := []rbacv1.ClusterRoleBinding{ rbacv1helpers.NewClusterBinding("cluster-admin").Groups(user.SystemPrivilegedGroup).BindingOrDie(), - rbacv1helpers.NewClusterBinding("system:discovery").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), - rbacv1helpers.NewClusterBinding("system:basic-user").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), + rbacv1helpers.NewClusterBinding("system:discovery").Groups(user.AllAuthenticated).BindingOrDie(), + rbacv1helpers.NewClusterBinding("system:basic-user").Groups(user.AllAuthenticated).BindingOrDie(), + rbacv1helpers.NewClusterBinding("system:public-info-viewer").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:node-proxier").Users(user.KubeProxy).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-controller-manager").Users(user.KubeControllerManager).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-dns").SAs("kube-system", "kube-dns").BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-scheduler").Users(user.KubeScheduler).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:aws-cloud-provider").SAs("kube-system", "aws-cloud-provider").BindingOrDie(), + rbacv1helpers.NewClusterBinding("system:volume-scheduler").Users(user.KubeScheduler).BindingOrDie(), // This default binding of the system:node role to the system:nodes group is deprecated in 1.7 with the availability of the Node authorizer. // This leaves the binding, but with an empty set of subjects, so that tightening reconciliation can remove the subject. @@ -523,10 +550,6 @@ func ClusterRoleBindings() []rbacv1.ClusterRoleBinding { }, } - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { - rolebindings = append(rolebindings, rbacv1helpers.NewClusterBinding("system:volume-scheduler").Users(user.KubeScheduler).BindingOrDie()) - } - addClusterRoleBindingLabel(rolebindings) return rolebindings @@ -539,3 +562,16 @@ func ClusterRolesToAggregate() map[string]string { "view": "system:aggregate-to-view", } } + +// ClusterRoleBindingsToSplit returns a map of Names of source ClusterRoleBindings +// to copy Subjects, Annotations, and Labels to destination ClusterRoleBinding templates. +func ClusterRoleBindingsToSplit() map[string]rbacv1.ClusterRoleBinding { + bindingsToSplit := map[string]rbacv1.ClusterRoleBinding{} + for _, defaultClusterRoleBinding := range ClusterRoleBindings() { + switch defaultClusterRoleBinding.Name { + case "system:public-info-viewer": + bindingsToSplit["system:discovery"] = defaultClusterRoleBinding + } + } + return bindingsToSplit +} diff --git a/vendor/k8s.io/kubernetes/tag.sh b/vendor/k8s.io/kubernetes/tag.sh index bdfee96b5ad..656094fc2b8 100755 --- a/vendor/k8s.io/kubernetes/tag.sh +++ b/vendor/k8s.io/kubernetes/tag.sh @@ -15,7 +15,7 @@ var ( gitMinor = "$(echo $1 | cut -f2 -d.)" gitVersion = "$1" gitCommit = "$(git rev-parse HEAD)" - gitTreeState = "clean" + gitTreeState = "clean" buildDate = "$(date -u -Iminutes)Z" ) EOF diff --git a/vendor/k8s.io/kubernetes/vendor.conf b/vendor/k8s.io/kubernetes/vendor.conf index 5bbb16e9a3e..11497c92bdf 100644 --- a/vendor/k8s.io/kubernetes/vendor.conf +++ b/vendor/k8s.io/kubernetes/vendor.conf @@ -3,35 +3,26 @@ package=k8s.io/kubernetes/cmd/hyperkube bitbucket.org/bertimus9/systemstat 0eeff89b0690611fc32e21f0cd2e4434abf8fe53 cloud.google.com/go v0.1.0-115-g3b1ae45394a234 +github.com/armon/circbuf bbbad097214e2918d8543d5201d12bfd7bca254d +github.com/asaskevich/govalidator v9-26-gf9ffefc3facfbe +github.com/aws/aws-sdk-go v1.16.26 github.com/Azure/azure-sdk-for-go v21.3.0 github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109 github.com/Azure/go-autorest v11.1.0 -github.com/GeertJohan/go.rice c02ca9a983da5807ddf7d796784928f5be4afd09 -github.com/JeffAshton/win_pdh 76bb4ee9f0ab50f77826f2a2ee7fb9d3880d6ec2 -github.com/MakeNowJust/heredoc bb23615498cded5e105af4ce27de75b089cbe851 -github.com/Microsoft/go-winio v0.4.5 -github.com/Microsoft/hcsshim v0.6.11 -github.com/NYTimes/gziphandler 56545f4a5d46df9a6648819d1664c3a03a13ffdb -github.com/Nvveen/Gotty cd527374f1e5bff4938207604a14f2e38a9cf512 -github.com/PuerkitoBio/purell v1.0.0 -github.com/PuerkitoBio/urlesc 5bd2802263f21d8788851d5305584c82a5c75d7e -github.com/Rican7/retry v0.1.0-9-g272ad122d6e5ce -github.com/armon/circbuf bbbad097214e2918d8543d5201d12bfd7bca254d -github.com/asaskevich/govalidator v9-26-gf9ffefc3facfbe -github.com/aws/aws-sdk-go v1.14.12 github.com/bazelbuild/bazel-gazelle 0.15.0 github.com/bazelbuild/buildtools 0.6.0-60-g1a9c38e0df9397 github.com/beorn7/perks 3ac7bf7a47d159a033b107610db8a1b6575507a4 github.com/blang/semver v3.5.0 +github.com/cespare/prettybench 03b8cfe5406ce67a0b0da46f0c9e78b3d915a2c1 github.com/chai2010/gettext-go c6fed771bfd517099caf0f7a961671fa8ed08723 github.com/client9/misspell v0.3.0-7-g9ce5d979ffdaca github.com/cloudflare/cfssl 1.3.2-21-g56268a613adfed github.com/clusterhq/flocker-go 2b8b7259d3139c96c4a6871031355808ab3fd3b3 github.com/codedellemc/goscaleio 20e2ce2cf8852dc78bd42b76698dcd8dcd77b7b1 -github.com/container-storage-interface/spec v1.0.0 github.com/containerd/console 84eeaae905fa414d03e07bcd6c8d3f19e7cf180e github.com/containerd/containerd v1.0.2 github.com/containernetworking/cni v0.6.0 +github.com/container-storage-interface/spec v1.1.0 github.com/coreos/bbolt v1.3.1-coreos.6 github.com/coreos/etcd v3.3.10 github.com/coreos/go-oidc 065b426bd41667456c1a924468f507673629c46b @@ -53,53 +44,54 @@ github.com/docker/go-connections v0.3.0 github.com/docker/go-units v0.3.1-11-g9e638d38cf6977 github.com/docker/libnetwork v0.8.0-dev.2-1265-ga9cd636e378982 github.com/docker/spdystream 449fdfce4d962303d702fec724ef0ad181c92528 -github.com/elazarl/go-bindata-assetfs 3dcc96556217539f50599357fb481ac0dc7439b9 github.com/elazarl/goproxy v1.0-104-gc4fc26588b6ef8 github.com/emicklei/go-restful 2.2.0-4-gff4f55a206334e -github.com/emicklei/go-restful-swagger12 1.0.1 -github.com/emicklei/go-restful 2.2.0-4-gff4f55a206334e github.com/euank/go-kmsg-parser v2.0.0 github.com/evanphx/json-patch v4.1.0-19-g5858425f75500d github.com/exponent-io/jsonpath d6023ce2651d8eafb5c75bb0c7167536102ec9f5 github.com/fatih/camelcase f6a740d52f961c60348ebb109adde9f4635d7540 github.com/fsnotify/fsnotify v1.3.1-1-gf12c6236fe7b5c +github.com/GeertJohan/go.rice c02ca9a983da5807ddf7d796784928f5be4afd09 github.com/ghodss/yaml v1.0.0-4-gc7ce16629ff4cd github.com/globalsign/mgo r2018.06.15-9-geeefdecb41b842 +github.com/godbus/dbus v3 +github.com/gogo/protobuf v0.5 github.com/go-ini/ini v1.25.4 +github.com/golang/groupcache 02826c3e79038b59d737d3b1c0a1d937f71a4433 +github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9 +github.com/golang/protobuf v1.1.0 +github.com/googleapis/gnostic 0c5108395e2debce0d731cf0287ddf7242066aba +github.com/google/btree 7d79101e329e5a3adf994758c578dab82b90c017 +github.com/google/certificate-transparency-go v1.0.21 +github.com/GoogleCloudPlatform/k8s-cloud-provider 1.3.0 +github.com/google/gofuzz 24818f796faf91cd76ec7bddd72458fbced7a6c1 +github.com/google/uuid 0.2-15-g8c31c18f31ede9 github.com/go-openapi/analysis v0.17.2 -github.com/go-openapi/jsonpointer v0.18.0 +github.com/go-openapi/jsonpointer v0.19.0 github.com/go-openapi/loads v0.17.2 github.com/go-openapi/strfmt v0.17.0 github.com/go-openapi/swag v0.17.2 github.com/go-openapi/validate v0.18.0 github.com/go-ozzo/ozzo-validation v3.5.0 -github.com/go-sql-driver/mysql v1.3.0 -github.com/godbus/dbus v3 -github.com/gogo/protobuf v0.5 -github.com/golang/groupcache 02826c3e79038b59d737d3b1c0a1d937f71a4433 -github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9 -github.com/golang/protobuf v1.1.0 -github.com/google/btree 7d79101e329e5a3adf994758c578dab82b90c017 -github.com/google/certificate-transparency-go v1.0.21 -github.com/google/gofuzz 44d81051d367757e1c7c6a5a86423ece9afcf63c -github.com/google/uuid 0.2-15-g8c31c18f31ede9 -github.com/googleapis/gnostic 0c5108395e2debce0d731cf0287ddf7242066aba -github.com/gophercloud/gophercloud 781450b3c4fcb4f5182bcc5133adb4b2e4a09d1d +github.com/gophercloud/gophercloud c818fa66e4c88b30db28038fe3f18f2f4a0db9a8 github.com/gorilla/websocket v1.2.0-9-g4201258b820c74 +github.com/go-sql-driver/mysql v1.3.0 github.com/gregjones/httpcache 787624de3eb7bd915c329cba748687a3b22666a6 -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0-4-g498ae206fc3cfe +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0-8-gcfaf5686ec79ff github.com/grpc-ecosystem/go-grpc-prometheus v1.1-4-g2500245aa6110c github.com/grpc-ecosystem/grpc-gateway v1.3.0 -github.com/hashicorp/golang-lru a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4 +github.com/hashicorp/golang-lru v0.5.0 github.com/hashicorp/hcl d8c773c4cba11b11539e3d45f93daeaa5dcf1fa1 github.com/heketi/heketi v8.0.0-49-g558b29266ce0a8 github.com/imdario/mergo v0.3.5 github.com/inconshreveable/mousetrap v1.0 +github.com/JeffAshton/win_pdh 76bb4ee9f0ab50f77826f2a2ee7fb9d3880d6ec2 github.com/jmespath/go-jmespath 0.2.2-12-g0b12d6b521d83f github.com/jmhodges/clock v1.1 github.com/jmoiron/sqlx sqlx-v1.1-131-g05cef0741ade10 github.com/jonboulle/clockwork 72f9bd7c4e0c2a40055ab3d0f09654f730cce982 github.com/json-iterator/go 1.1.4 +github.com/jstemmer/go-junit-report af01ea7f8024089b458d804d5cdf190f962a9a0c github.com/jteeuwen/go-bindata v3.0.7-72-ga0ff2567cfb709 github.com/kardianos/osext 8fef92e41e22a70e700a96b29f066cda30ea24ef github.com/karrick/godirwalk v1.7.5 @@ -107,17 +99,21 @@ github.com/kisielk/sqlstruct 648daed35d49dac24a4bff253b190a80da3ab6a5 github.com/kr/fs 2788f0dbd16903de03cb8186e5c7d97b69ad387b github.com/kr/pretty go.weekly.2011-12-22-24-gf31442d60e5146 github.com/kr/text 6807e777504f54ad073ecef66747de158294b639 -github.com/kubernetes/repo-infra f2459dc75fc429b813d92c0622b408fd7f0d4cac -github.com/lib/pq 88edab0803230a3898347e77b474f8c1820a1f20 github.com/libopenstorage/openstorage 093a0c3888753c2056e7373183693d670c6bba01 +github.com/lib/pq 88edab0803230a3898347e77b474f8c1820a1f20 +github.com/liggitt/tabwriter 89fcab3d43de07060e4fd4c1547430ed57e87f24 +github.com/lithammer/dedent v1.1.0 github.com/magiconair/properties v1.7.0-4-g61b492c03cf472 github.com/mailru/easyjson 2f5df55504ebc322e4d52d34df6a1f5b503bf26d +github.com/MakeNowJust/heredoc bb23615498cded5e105af4ce27de75b089cbe851 github.com/marstr/guid v1.1.0-2-g8bdf7d1a087ccc github.com/mattn/go-shellwords v1.0.3-20-gf8471b0a71ded0 github.com/mattn/go-sqlite3 v1.6.0 github.com/matttproud/golang_protobuf_extensions v1.0.1 github.com/mesos/mesos-go mesos-1.6.x-12-gff8175bfda54b1 github.com/mholt/caddy v0.10.10-57-g2de495001514ed +github.com/Microsoft/go-winio v0.4.11 +github.com/Microsoft/hcsshim v0.8.3-65-g69ac8d3f7fc10a github.com/miekg/dns 5d001d020961ae1c184f9f8152fdc73810481677 github.com/mindprince/gonvml fee913ce8fb235edf54739d259ca0ecc226c7b8a github.com/mistifyio/go-zfs v2.1.1-5-g1b4ae6fb4e77b0 @@ -127,29 +123,33 @@ github.com/modern-go/concurrent 1.0.3 github.com/modern-go/reflect2 v1.0.1 github.com/mohae/deepcopy 491d3605edfb866af34a48075bd4355ac1bf46ca github.com/mrunalp/fileutils 4ee1cc9a80582a0c75febdd5cfa779ee4361cbca +github.com/munnerz/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d github.com/mvdan/xurls v0.8.0-14-g1b768d7c393abd github.com/mxk/go-flowrate cca7078d478f8520f85629ad7c68962d31ed7682 +github.com/Nvveen/Gotty cd527374f1e5bff4938207604a14f2e38a9cf512 +github.com/NYTimes/gziphandler 56545f4a5d46df9a6648819d1664c3a03a13ffdb github.com/onsi/ginkgo v1.2.0-95-g67b9df7f55fe11 -github.com/onsi/gomega v1.0-122-gd59fa0ac68bb5d +github.com/onsi/gomega v1.4.3-9-g5533ce8a0da374 github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb github.com/opencontainers/image-spec v1.0.0-rc6-12-g372ad780f63454 github.com/opencontainers/runtime-spec v1.0.0 -github.com/opencontainers/selinux v1.0.0-rc1-5-g4a2974bf1ee960 github.com/pborman/uuid ca53cad383cad2479bbba7f7a1a05797ec1386e4 github.com/pelletier/go-toml v1.2.0 github.com/peterbourgon/diskv v2.0.1 github.com/pkg/errors v0.8.0 github.com/pkg/sftp 4d0e916071f68db74f8a73926335f809396d6b42 -github.com/pmezard/go-difflib d8ed2627bdf02c080bf22230dbb337003b7aba2d +github.com/pmezard/go-difflib v1.0.0-4-g5d4384ee4fb252 github.com/pquerna/cachecontrol 0dec1b30a0215bb68605dfc568e8855066c9202d github.com/pquerna/ffjson af8b230fcd2007c7095168ca8ab94c68b60840c6 -github.com/prometheus/client_golang v0.8.0-83-ge7e903064f5e9e +github.com/prometheus/client_golang v0.9.2 github.com/prometheus/client_model model-0.0.2-12-gfa8ad6fec33561 -github.com/prometheus/common 13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207 +github.com/prometheus/common v0.2.0 github.com/prometheus/procfs 65c1f6f8f0fc1e2185eb9863a3bc751496404259 -github.com/quobyte/api v0.1.1-4-g206ef832283c1a +github.com/PuerkitoBio/purell v1.0.0 +github.com/PuerkitoBio/urlesc 5bd2802263f21d8788851d5305584c82a5c75d7e +github.com/quobyte/api v0.1.2 github.com/rancher/go-rancher v0.1.0-196-g09693a8743ba5e -github.com/renstrom/dedent v1.0.0-3-g020d11c3b9c0c7 +github.com/Rican7/retry v0.1.0-9-g272ad122d6e5ce github.com/robfig/cron v1-53-gdf38d32658d878 github.com/rubiojr/go-vhd 0bfd3b39853cdde5762efda92289f14b0ac0491b github.com/russross/blackfriday v1.4-2-g300106c228d52c @@ -165,7 +165,7 @@ github.com/spf13/cobra v0.0.1-34-gc439c4fa093711 github.com/spf13/jwalterweatherman 33c24e77fb80341fe7130ee7c594256ff08ccc46 github.com/spf13/pflag v1.0.1 github.com/spf13/viper 7fb2782df3d83e0036cc89f461ed0422628776f4 -github.com/storageos/go-api 0.3.4 +github.com/storageos/go-api 1.0.0-rc1-2-g343b3eff91fcc8 github.com/stretchr/objx 1a9d0bb9f541897e62256577b352fdbc1fb4fd94 github.com/stretchr/testify v1.2.1-14-gc679ae2cc0cb27 github.com/syndtr/gocapability e7cb7fa329f456b3855136a2642b197bad7366ba @@ -173,39 +173,44 @@ github.com/tmc/grpc-websocket-proxy 89b8d40f7ca833297db804fcb3be53a76d01c238 github.com/ugorji/go bdcc60b419d136a85cdf2e7cbcac34b3f1cd6e57 github.com/vishvananda/netlink b2de5d10e38ecce8607e6b438b6d174f389a004e github.com/vishvananda/netns be1fbeda19366dea804f00efff2dd73a1642fdcc -github.com/vmware/govmomi v0.18.0-48-g22f74650cf39ba +github.com/vmware/govmomi v0.20.0 github.com/vmware/photon-controller-go-sdk PROMOTED-488 github.com/xanzy/go-cloudstack v2.1.1-1-g1e2cbf647e57fa github.com/xiang90/probing 0.0.1 -go.uber.org/atomic v1.3.2-3-g8dc6146f756937 -go.uber.org/multierr v1.1.0-2-gddea229ff1dff9 -go.uber.org/zap v1.9.1-1-g67bc79d13d155c golang.org/x/crypto de0752318171da717af4ce24d0a2e8626afaeb11 golang.org/x/lint 8f45f776aaf18cebc8d65861cc70c33c60471952 -golang.org/x/net 0ed95abb35c445290478a5348a7b38bb154135fd +golang.org/x/net 65e2d4e15006aab9813ff8769e768bbf4bb667a0 golang.org/x/oauth2 a6bd8cefa1811bd24b86f8902872e4e8225f74c4 golang.org/x/sys 95c6576299259db960f6c5b9b69ea52422860fce golang.org/x/text b19bf474d317b857955b12035d2c5acb57ce8b01 golang.org/x/time f51c12702a4d776e4c1fa9b0fabab841babae631 -golang.org/x/tools 2382e3994d48b1d22acc2c86bcad0a2aff028e32 +golang.org/x/tools 7f7074d5bcfd282eb16bc382b0bb3da762461985 gonum.org/v1/gonum cebdade430ccb61c1feba4878085f6cf8cb3320e -google.golang.org/api 3639d6d93f377f39a1de765fa4ef37b3c7ca8bd9 +google.golang.org/api 583d854617af4d2080b5d2a24d72f7fc5a128ab2 google.golang.org/genproto 09f6ed296fc66555a25fe4ce95173148778dfa85 google.golang.org/grpc v1.13.0 -gopkg.in/gcfg.v1 v1.2.0 +gopkg.in/gcfg.v1/scanner v1.2.0 gopkg.in/inf.v0 v0.9.0 gopkg.in/natefinch/lumberjack.v2 v1.0-16-g20b71e5b60d756 gopkg.in/square/go-jose.v2 v2.1.6-4-g89060dee6a84df gopkg.in/warnings.v0 v0.1.1 gopkg.in/yaml.v2 v2.2.1 +go.uber.org/atomic v1.3.2-3-g8dc6146f756937 +go.uber.org/multierr v1.1.0-2-gddea229ff1dff9 +go.uber.org/zap/buffer v1.9.1-1-g67bc79d13d155c k8s.io/gengo 51747d6e00da1fc578d5a333a93bb2abcbce7a95 k8s.io/heapster v1.2.0-beta.1 -k8s.io/klog 8139d8cb77af419532b33dfa7dd09fbc5f1d344f -k8s.io/kube-openapi c59034cc13d587f5ef4e85ca0ade0c1866ae8e1d -k8s.io/utils 66066c83e385e385ccc3c964b44fd7dcd413d0ed +k8s.io/klog v0.2.0-14-g8e90cee79f8237 +k8s.io/kube-openapi b3a7cee44a305be0a69e1b9ac03018307287e1b0 +k8s.io/repo-infra 00fe14e3d1a3f9a73c4cea62d9c33b29c1e03ac4 +k8s.io/utils c2654d5206da6b7b6ace12841e8f359bb89b443c +sigs.k8s.io/kustomize/pkg v2.0.3 +sigs.k8s.io/structured-merge-diff/fieldpath e85c7b244fd2cc57bb829d73a061f93a441e63ce sigs.k8s.io/yaml v1.1.0 vbom.ml/util db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 -bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git -github.com/ibuildthecloud/kvsql c649f12fe5250718e4e024b8b40e7de796ab095e -github.com/google/cadvisor 87e237ff35b9d752ba58860a06e0ebe57816cbb7 https://github.com/ibuildthecloud/cadvisor.git -github.com/opencontainers/runc 96ec2177ae841256168fcf76954f7177af9446eb +bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git +github.com/ibuildthecloud/kvsql 0e798b1475327aadf3b8da5d2d1f99bb93dfd667 +github.com/google/cadvisor v0.33.1-k3s.1 https://github.com/ibuildthecloud/cadvisor.git +github.com/opencontainers/runc 69ae5da6afdcaaf38285a10b36f362e41cb298d6 +github.com/checkpoint-restore/go-criu v3.11 +github.com/opencontainers/selinux v1.2 diff --git a/vendor/k8s.io/metrics/BUILD b/vendor/k8s.io/metrics/BUILD new file mode 100644 index 00000000000..287c69d2361 --- /dev/null +++ b/vendor/k8s.io/metrics/BUILD @@ -0,0 +1,21 @@ +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/client/clientset/versioned:all-srcs", + "//staging/src/k8s.io/metrics/pkg/client/custom_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/client/external_metrics:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/metrics/CONTRIBUTING.md b/vendor/k8s.io/metrics/CONTRIBUTING.md index e28789c8a8b..b4254393ea5 100644 --- a/vendor/k8s.io/metrics/CONTRIBUTING.md +++ b/vendor/k8s.io/metrics/CONTRIBUTING.md @@ -2,6 +2,6 @@ Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. -This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/metrics](https://git.k8s.io/kubernetes/staging/src/k8s.io/metrics) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/metrics](https://git.k8s.io/kubernetes/staging/src/k8s.io/metrics) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). -Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/vendor/k8s.io/metrics/OWNERS b/vendor/k8s.io/metrics/OWNERS index c532d6440a9..bc445c0f98b 100644 --- a/vendor/k8s.io/metrics/OWNERS +++ b/vendor/k8s.io/metrics/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - DirectXMan12 - piosz diff --git a/vendor/k8s.io/metrics/SECURITY_CONTACTS b/vendor/k8s.io/metrics/SECURITY_CONTACTS index 0648a8ebff7..70b7cf9a657 100644 --- a/vendor/k8s.io/metrics/SECURITY_CONTACTS +++ b/vendor/k8s.io/metrics/SECURITY_CONTACTS @@ -1,10 +1,10 @@ # Defined below are the security contacts for this repo. # -# They are the contact point for the Product Security Team to reach out +# They are the contact point for the Product Security Committee to reach out # to for triaging and handling of incoming issues. # # The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) # and will be removed and replaced if they violate that agreement. # # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE diff --git a/vendor/k8s.io/metrics/pkg/apis/OWNERS b/vendor/k8s.io/metrics/pkg/apis/OWNERS index 083228551a4..f7329139ff7 100644 --- a/vendor/k8s.io/metrics/pkg/apis/OWNERS +++ b/vendor/k8s.io/metrics/pkg/apis/OWNERS @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + # Disable inheritance as this is an api owners file options: no_parent_owners: true diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/doc.go b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/doc.go index 57c08a21625..a3000047e54 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/doc.go +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/metrics/pkg/apis/custom_metrics // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/generated.proto b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/generated.proto index 9d4d2596798..56480ebb957 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/generated.proto +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/generated.proto @@ -42,7 +42,7 @@ message MetricListOptions { optional string metricLabelSelector = 2; } -// a metric value for some object +// MetricValue is a metric value for some object message MetricValue { // a reference to the described object optional k8s.io.api.core.v1.ObjectReference describedObject = 1; @@ -70,7 +70,7 @@ message MetricValue { optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 6; } -// a list of values for a given metric for some set of objects +// MetricValueList is a list of values for a given metric for some set of objects message MetricValueList { optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/register.go b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/register.go index f1b43e9cb60..6811f0632ef 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/register.go +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/register.go @@ -34,9 +34,11 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/types.go b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/types.go index aa97053ca62..469ad18c8a8 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/types.go +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/types.go @@ -24,7 +24,7 @@ import ( // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// a list of values for a given metric for some set of objects +// MetricValueList is a list of values for a given metric for some set of objects type MetricValueList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -35,7 +35,7 @@ type MetricValueList struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// a metric value for some object +// MetricValue is a metric value for some object type MetricValue struct { metav1.TypeMeta `json:",inline"` @@ -81,6 +81,6 @@ type MetricListOptions struct { MetricLabelSelector string `json:"metricLabelSelector,omitempty" protobuf:"bytes,2,opt,name=metricLabelSelector"` } -// allObjects is a wildcard used to select metrics +// AllObjects is a wildcard used to select metrics // for all objects matching the given label selector const AllObjects = "*" diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/doc.go b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/doc.go index e89a945b9e1..cd9b980264e 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/doc.go +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/metrics/pkg/apis/custom_metrics // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/register.go b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/register.go index 69357d43ed7..69e6cb02511 100644 --- a/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/register.go +++ b/vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/register.go @@ -34,9 +34,11 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go index 70acd67cd69..c44d23e5d8b 100644 --- a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go +++ b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/metrics/pkg/apis/external_metrics // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto index 53aec67e6a9..61ab0de649d 100644 --- a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto +++ b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto @@ -29,7 +29,7 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; -// a metric value for external metric +// ExternalMetricValue is a metric value for external metric // A single metric value is identified by metric name and a set of string labels. // For one metric there can be multiple values with different sets of labels. message ExternalMetricValue { @@ -52,7 +52,7 @@ message ExternalMetricValue { optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 5; } -// a list of values for a given metric for some set labels +// ExternalMetricValueList is a list of values for a given metric for some set labels message ExternalMetricValueList { optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff --git a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go index 83f1e9e6121..85dfc5b1d9d 100644 --- a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go +++ b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go @@ -34,9 +34,11 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go index edf78ed43d2..56210539a5b 100644 --- a/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go +++ b/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go @@ -23,7 +23,7 @@ import ( // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// a list of values for a given metric for some set labels +// ExternalMetricValueList is a list of values for a given metric for some set labels type ExternalMetricValueList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -34,7 +34,7 @@ type ExternalMetricValueList struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// a metric value for external metric +// ExternalMetricValue is a metric value for external metric // A single metric value is identified by metric name and a set of string labels. // For one metric there can be multiple values with different sets of labels. type ExternalMetricValue struct { diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/doc.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/doc.go index f870a997b38..ea169f91150 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/doc.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/metrics/pkg/apis/metrics // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/generated.proto b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/generated.proto index 41b8f2e106c..a7d46f46dbd 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/generated.proto +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/generated.proto @@ -30,7 +30,7 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1alpha1"; -// resource usage metrics of a container. +// ContainerMetrics sets resource usage metrics of a container. message ContainerMetrics { // Container name corresponding to the one from pod.spec.containers. optional string name = 1; @@ -39,7 +39,7 @@ message ContainerMetrics { map usage = 2; } -// resource usage metrics of a node. +// NodeMetrics sets resource usage metrics of a node. message NodeMetrics { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -63,7 +63,7 @@ message NodeMetricsList { repeated NodeMetrics items = 2; } -// resource usage metrics of a pod. +// PodMetrics sets resource usage metrics of a pod. message PodMetrics { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/register.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/register.go index 306ed8c3df2..3e5359a8ee3 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/register.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/register.go @@ -34,9 +34,11 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = SchemeBuilder.AddToScheme + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/types.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/types.go index 64d70682455..ddb15f5f4e9 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/types.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1/types.go @@ -27,7 +27,7 @@ import ( // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// resource usage metrics of a node. +// NodeMetrics sets resource usage metrics of a node. type NodeMetrics struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -59,7 +59,7 @@ type NodeMetricsList struct { // +genclient:readonly // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// resource usage metrics of a pod. +// PodMetrics sets resource usage metrics of a pod. type PodMetrics struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -86,7 +86,7 @@ type PodMetricsList struct { Items []PodMetrics `json:"items" protobuf:"bytes,2,rep,name=items"` } -// resource usage metrics of a container. +// ContainerMetrics sets resource usage metrics of a container. type ContainerMetrics struct { // Container name corresponding to the one from pod.spec.containers. Name string `json:"name" protobuf:"bytes,1,opt,name=name"` diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/doc.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/doc.go index 2f93e6aa8be..49fc181914d 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/doc.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/doc.go @@ -15,6 +15,7 @@ limitations under the License. */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:conversion-gen=k8s.io/metrics/pkg/apis/metrics // +k8s:openapi-gen=true diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/generated.proto b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/generated.proto index 86167a10dc5..2f62317f030 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/generated.proto +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/generated.proto @@ -30,7 +30,7 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; -// resource usage metrics of a container. +// ContainerMetrics sets resource usage metrics of a container. message ContainerMetrics { // Container name corresponding to the one from pod.spec.containers. optional string name = 1; @@ -39,7 +39,7 @@ message ContainerMetrics { map usage = 2; } -// resource usage metrics of a node. +// NodeMetrics sets resource usage metrics of a node. message NodeMetrics { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -63,7 +63,7 @@ message NodeMetricsList { repeated NodeMetrics items = 2; } -// resource usage metrics of a pod. +// PodMetrics sets resource usage metrics of a pod. message PodMetrics { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/register.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/register.go index 0db1e78b395..205d253c779 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/register.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/register.go @@ -34,9 +34,11 @@ func Resource(resource string) schema.GroupResource { } var ( + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = SchemeBuilder.AddToScheme + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/types.go b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/types.go index a1f15395081..a0f1f53a583 100644 --- a/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/types.go +++ b/vendor/k8s.io/metrics/pkg/apis/metrics/v1beta1/types.go @@ -27,7 +27,7 @@ import ( // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// resource usage metrics of a node. +// NodeMetrics sets resource usage metrics of a node. type NodeMetrics struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -59,7 +59,7 @@ type NodeMetricsList struct { // +genclient:readonly // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// resource usage metrics of a pod. +// PodMetrics sets resource usage metrics of a pod. type PodMetrics struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -86,7 +86,7 @@ type PodMetricsList struct { Items []PodMetrics `json:"items" protobuf:"bytes,2,rep,name=items"` } -// resource usage metrics of a container. +// ContainerMetrics sets resource usage metrics of a container. type ContainerMetrics struct { // Container name corresponding to the one from pod.spec.containers. Name string `json:"name" protobuf:"bytes,1,opt,name=name"` diff --git a/vendor/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go b/vendor/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go index 309b3207d1b..ef64f637311 100644 --- a/vendor/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go +++ b/vendor/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go @@ -30,8 +30,6 @@ type Interface interface { Discovery() discovery.DiscoveryInterface MetricsV1alpha1() metricsv1alpha1.MetricsV1alpha1Interface MetricsV1beta1() metricsv1beta1.MetricsV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Metrics() metricsv1beta1.MetricsV1beta1Interface } // Clientset contains the clients for groups. Each group has exactly one @@ -52,12 +50,6 @@ func (c *Clientset) MetricsV1beta1() metricsv1beta1.MetricsV1beta1Interface { return c.metricsV1beta1 } -// Deprecated: Metrics retrieves the default version of MetricsClient. -// Please explicitly pick a version. -func (c *Clientset) Metrics() metricsv1beta1.MetricsV1beta1Interface { - return c.metricsV1beta1 -} - // Discovery retrieves the DiscoveryClient func (c *Clientset) Discovery() discovery.DiscoveryInterface { if c == nil { diff --git a/vendor/k8s.io/utils/.travis.yml b/vendor/k8s.io/utils/.travis.yml index d39066ccf87..5b636da4a35 100644 --- a/vendor/k8s.io/utils/.travis.yml +++ b/vendor/k8s.io/utils/.travis.yml @@ -1,9 +1,9 @@ language: go +dist: xenial go: - - 1.8.x - 1.9.x + - 1.10.x + - 1.11.x go_import_path: k8s.io/utils script: - - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . - - go test -v -race ./... + - make verify diff --git a/vendor/k8s.io/utils/Makefile b/vendor/k8s.io/utils/Makefile new file mode 100644 index 00000000000..b201573245c --- /dev/null +++ b/vendor/k8s.io/utils/Makefile @@ -0,0 +1,37 @@ +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.PHONY: verify +verify: depend verify-fmt verify-lint vet + go test -v -race ./... + +.PHONY: depend +depend: + go get -t -v ./... + +.PHONY: verify-fmt +verify-fmt: + ./hack/verify-gofmt.sh + +.PHONY: verify-lint +verify-lint: + ./hack/verify-golint.sh + +.PHONY: vet +vet: + go tool vet . + +.PHONY: update-fmt +update-fmt: + gofmt -s -w . diff --git a/vendor/k8s.io/utils/OWNERS b/vendor/k8s.io/utils/OWNERS new file mode 100644 index 00000000000..df379486fa0 --- /dev/null +++ b/vendor/k8s.io/utils/OWNERS @@ -0,0 +1,21 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- apelisse +- dashpole +- deads2k +- lavalamp +- mengqiy +- thockin +- dims +reviewers: +- apelisse +- dashpole +- deads2k +- lavalamp +- mengqiy +- thockin +- andrewsykim +- cheftako +- mcrute +- dims diff --git a/vendor/k8s.io/utils/README.md b/vendor/k8s.io/utils/README.md index 9551c5a5ec9..c9ee95d76d8 100644 --- a/vendor/k8s.io/utils/README.md +++ b/vendor/k8s.io/utils/README.md @@ -48,6 +48,12 @@ an existing package to this repository. - [Pointers](/pointers) provides some functions for pointer-based operations. +- [Io](/io) provides interfaces for working with file IO. Currently it provides + functionality for consistently reading a file. + +- [NSEnter](/nsenter) provies interfaces for executing and interacting with + processes running within a namespace. + [Build Status]: https://travis-ci.org/kubernetes/utils.svg?branch=master [Go standard libs]: https://golang.org/pkg/#stdlib [api]: https://github.com/kubernetes/api diff --git a/vendor/k8s.io/csi-api/SECURITY_CONTACTS b/vendor/k8s.io/utils/SECURITY_CONTACTS similarity index 98% rename from vendor/k8s.io/csi-api/SECURITY_CONTACTS rename to vendor/k8s.io/utils/SECURITY_CONTACTS index b51da450fc0..d34d00812d7 100644 --- a/vendor/k8s.io/csi-api/SECURITY_CONTACTS +++ b/vendor/k8s.io/utils/SECURITY_CONTACTS @@ -10,4 +10,4 @@ # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE # INSTRUCTIONS AT https://kubernetes.io/security/ -saadali \ No newline at end of file +liggitt diff --git a/vendor/k8s.io/client-go/util/buffer/ring_growing.go b/vendor/k8s.io/utils/buffer/ring_growing.go similarity index 100% rename from vendor/k8s.io/client-go/util/buffer/ring_growing.go rename to vendor/k8s.io/utils/buffer/ring_growing.go diff --git a/vendor/k8s.io/utils/clock/clock.go b/vendor/k8s.io/utils/clock/clock.go index 3d53c62b1a5..789c0238c8a 100644 --- a/vendor/k8s.io/utils/clock/clock.go +++ b/vendor/k8s.io/utils/clock/clock.go @@ -44,21 +44,24 @@ func (RealClock) Since(ts time.Time) time.Duration { return time.Since(ts) } -// Same as time.After(d). +// After is the same as time.After(d). func (RealClock) After(d time.Duration) <-chan time.Time { return time.After(d) } +// NewTimer is the same as time.NewTimer(d) func (RealClock) NewTimer(d time.Duration) Timer { return &realTimer{ timer: time.NewTimer(d), } } +// Tick is the same as time.Tick(d) func (RealClock) Tick(d time.Duration) <-chan time.Time { return time.Tick(d) } +// Sleep is the same as time.Sleep(d) func (RealClock) Sleep(d time.Duration) { time.Sleep(d) } diff --git a/vendor/k8s.io/utils/exec/exec.go b/vendor/k8s.io/utils/exec/exec.go index 07735d88144..96bec01ca8b 100644 --- a/vendor/k8s.io/utils/exec/exec.go +++ b/vendor/k8s.io/utils/exec/exec.go @@ -60,6 +60,17 @@ type Cmd interface { SetStdin(in io.Reader) SetStdout(out io.Writer) SetStderr(out io.Writer) + SetEnv(env []string) + + // StdoutPipe and StderrPipe for getting the process' Stdout and Stderr as + // Readers + StdoutPipe() (io.ReadCloser, error) + StderrPipe() (io.ReadCloser, error) + + // Start and Wait are for running a process non-blocking + Start() error + Wait() error + // Stops the command by sending SIGTERM. It is not guaranteed the // process will stop before this function returns. If the process is not // responding, an internal timer function will send a SIGKILL to force @@ -121,6 +132,30 @@ func (cmd *cmdWrapper) SetStderr(out io.Writer) { cmd.Stderr = out } +func (cmd *cmdWrapper) SetEnv(env []string) { + cmd.Env = env +} + +func (cmd *cmdWrapper) StdoutPipe() (io.ReadCloser, error) { + r, err := (*osexec.Cmd)(cmd).StdoutPipe() + return r, handleError(err) +} + +func (cmd *cmdWrapper) StderrPipe() (io.ReadCloser, error) { + r, err := (*osexec.Cmd)(cmd).StderrPipe() + return r, handleError(err) +} + +func (cmd *cmdWrapper) Start() error { + err := (*osexec.Cmd)(cmd).Start() + return handleError(err) +} + +func (cmd *cmdWrapper) Wait() error { + err := (*osexec.Cmd)(cmd).Wait() + return handleError(err) +} + // Run is part of the Cmd interface. func (cmd *cmdWrapper) Run() error { err := (*osexec.Cmd)(cmd).Run() @@ -206,10 +241,12 @@ func (e CodeExitError) String() string { return e.Err.Error() } +// Exited is to check if the process has finished func (e CodeExitError) Exited() bool { return true } +// ExitStatus is for checking the error code func (e CodeExitError) ExitStatus() int { return e.Code } diff --git a/vendor/k8s.io/client-go/util/integer/integer.go b/vendor/k8s.io/utils/integer/integer.go similarity index 81% rename from vendor/k8s.io/client-go/util/integer/integer.go rename to vendor/k8s.io/utils/integer/integer.go index c6ea106f9b1..e4e740cad4c 100644 --- a/vendor/k8s.io/client-go/util/integer/integer.go +++ b/vendor/k8s.io/utils/integer/integer.go @@ -16,6 +16,7 @@ limitations under the License. package integer +// IntMax returns the maximum of the params func IntMax(a, b int) int { if b > a { return b @@ -23,6 +24,7 @@ func IntMax(a, b int) int { return a } +// IntMin returns the minimum of the params func IntMin(a, b int) int { if b < a { return b @@ -30,6 +32,7 @@ func IntMin(a, b int) int { return a } +// Int32Max returns the maximum of the params func Int32Max(a, b int32) int32 { if b > a { return b @@ -37,6 +40,7 @@ func Int32Max(a, b int32) int32 { return a } +// Int32Min returns the minimum of the params func Int32Min(a, b int32) int32 { if b < a { return b @@ -44,6 +48,7 @@ func Int32Min(a, b int32) int32 { return a } +// Int64Max returns the maximum of the params func Int64Max(a, b int64) int64 { if b > a { return b @@ -51,6 +56,7 @@ func Int64Max(a, b int64) int64 { return a } +// Int64Min returns the minimum of the params func Int64Min(a, b int64) int64 { if b < a { return b diff --git a/vendor/k8s.io/kubernetes/pkg/util/io/consistentread.go b/vendor/k8s.io/utils/io/consistentread.go similarity index 78% rename from vendor/k8s.io/kubernetes/pkg/util/io/consistentread.go rename to vendor/k8s.io/utils/io/consistentread.go index 6e1f17b0985..1d79bed3ae9 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/io/consistentread.go +++ b/vendor/k8s.io/utils/io/consistentread.go @@ -26,11 +26,21 @@ import ( // This is useful when reading files in /proc that are larger than page size // and kernel may modify them between individual read() syscalls. func ConsistentRead(filename string, attempts int) ([]byte, error) { + return consistentReadSync(filename, attempts, nil) +} + +// consistentReadSync is the main functionality of ConsistentRead but +// introduces a sync callback that can be used by the tests to mutate the file +// from which the test data is being read +func consistentReadSync(filename string, attempts int, sync func(int)) ([]byte, error) { oldContent, err := ioutil.ReadFile(filename) if err != nil { return nil, err } for i := 0; i < attempts; i++ { + if sync != nil { + sync(i) + } newContent, err := ioutil.ReadFile(filename) if err != nil { return nil, err diff --git a/vendor/k8s.io/kubernetes/pkg/util/keymutex/hashed.go b/vendor/k8s.io/utils/keymutex/hashed.go similarity index 83% rename from vendor/k8s.io/kubernetes/pkg/util/keymutex/hashed.go rename to vendor/k8s.io/utils/keymutex/hashed.go index 5e0ae751930..4ddb00867ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/keymutex/hashed.go +++ b/vendor/k8s.io/utils/keymutex/hashed.go @@ -20,8 +20,6 @@ import ( "hash/fnv" "runtime" "sync" - - "k8s.io/klog" ) // NewHashed returns a new instance of KeyMutex which hashes arbitrary keys to @@ -44,16 +42,12 @@ type hashedKeyMutex struct { // Acquires a lock associated with the specified ID. func (km *hashedKeyMutex) LockKey(id string) { - klog.V(5).Infof("hashedKeyMutex.LockKey(...) called for id %q\r\n", id) km.mutexes[km.hash(id)%uint32(len(km.mutexes))].Lock() - klog.V(5).Infof("hashedKeyMutex.LockKey(...) for id %q completed.\r\n", id) } // Releases the lock associated with the specified ID. func (km *hashedKeyMutex) UnlockKey(id string) error { - klog.V(5).Infof("hashedKeyMutex.UnlockKey(...) called for id %q\r\n", id) km.mutexes[km.hash(id)%uint32(len(km.mutexes))].Unlock() - klog.V(5).Infof("hashedKeyMutex.UnlockKey(...) for id %q completed.\r\n", id) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/util/keymutex/keymutex.go b/vendor/k8s.io/utils/keymutex/keymutex.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/util/keymutex/keymutex.go rename to vendor/k8s.io/utils/keymutex/keymutex.go diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go b/vendor/k8s.io/utils/net/ipnet.go similarity index 77% rename from vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go rename to vendor/k8s.io/utils/net/ipnet.go index 90ad58c6354..abbb37a5464 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go +++ b/vendor/k8s.io/utils/net/ipnet.go @@ -14,19 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ -package sets +package net import ( "net" "strings" ) -// IPNet maps string to net.IPNet. -type IPNet map[string]*net.IPNet +// IPNetSet maps string to net.IPNet. +type IPNetSet map[string]*net.IPNet -// ParseIPNets parses string slice to IPNet. -func ParseIPNets(specs ...string) (IPNet, error) { - ipnetset := make(IPNet) +// ParseIPNets parses string slice to IPNetSet. +func ParseIPNets(specs ...string) (IPNetSet, error) { + ipnetset := make(IPNetSet) for _, spec := range specs { spec = strings.TrimSpace(spec) _, ipnet, err := net.ParseCIDR(spec) @@ -40,27 +40,27 @@ func ParseIPNets(specs ...string) (IPNet, error) { } // Insert adds items to the set. -func (s IPNet) Insert(items ...*net.IPNet) { +func (s IPNetSet) Insert(items ...*net.IPNet) { for _, item := range items { s[item.String()] = item } } // Delete removes all items from the set. -func (s IPNet) Delete(items ...*net.IPNet) { +func (s IPNetSet) Delete(items ...*net.IPNet) { for _, item := range items { delete(s, item.String()) } } // Has returns true if and only if item is contained in the set. -func (s IPNet) Has(item *net.IPNet) bool { +func (s IPNetSet) Has(item *net.IPNet) bool { _, contained := s[item.String()] return contained } // HasAll returns true if and only if all items are contained in the set. -func (s IPNet) HasAll(items ...*net.IPNet) bool { +func (s IPNetSet) HasAll(items ...*net.IPNet) bool { for _, item := range items { if !s.Has(item) { return false @@ -75,8 +75,8 @@ func (s IPNet) HasAll(items ...*net.IPNet) bool { // s2 = {a1, a2, a4, a5} // s1.Difference(s2) = {a3} // s2.Difference(s1) = {a4, a5} -func (s IPNet) Difference(s2 IPNet) IPNet { - result := make(IPNet) +func (s IPNetSet) Difference(s2 IPNetSet) IPNetSet { + result := make(IPNetSet) for k, i := range s { _, found := s2[k] if found { @@ -89,7 +89,7 @@ func (s IPNet) Difference(s2 IPNet) IPNet { // StringSlice returns a []string with the String representation of each element in the set. // Order is undefined. -func (s IPNet) StringSlice() []string { +func (s IPNetSet) StringSlice() []string { a := make([]string, 0, len(s)) for k := range s { a = append(a, k) @@ -98,7 +98,7 @@ func (s IPNet) StringSlice() []string { } // IsSuperset returns true if and only if s1 is a superset of s2. -func (s IPNet) IsSuperset(s2 IPNet) bool { +func (s IPNetSet) IsSuperset(s2 IPNetSet) bool { for k := range s2 { _, found := s[k] if !found { @@ -111,11 +111,11 @@ func (s IPNet) IsSuperset(s2 IPNet) bool { // Equal returns true if and only if s1 is equal (as a set) to s2. // Two sets are equal if their membership is identical. // (In practice, this means same elements, order doesn't matter) -func (s IPNet) Equal(s2 IPNet) bool { +func (s IPNetSet) Equal(s2 IPNetSet) bool { return len(s) == len(s2) && s.IsSuperset(s2) } // Len returns the size of the set. -func (s IPNet) Len() int { +func (s IPNetSet) Len() int { return len(s) } diff --git a/vendor/k8s.io/utils/net/net.go b/vendor/k8s.io/utils/net/net.go new file mode 100644 index 00000000000..178d7052f1a --- /dev/null +++ b/vendor/k8s.io/utils/net/net.go @@ -0,0 +1,37 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import "net" + +// IsIPv6 returns if netIP is IPv6. +func IsIPv6(netIP net.IP) bool { + return netIP != nil && netIP.To4() == nil +} + +// IsIPv6String returns if ip is IPv6. +func IsIPv6String(ip string) bool { + netIP := net.ParseIP(ip) + return IsIPv6(netIP) +} + +// IsIPv6CIDRString returns if cidr is IPv6. +// This assumes cidr is a valid CIDR. +func IsIPv6CIDRString(cidr string) bool { + ip, _, _ := net.ParseCIDR(cidr) + return IsIPv6(ip) +} diff --git a/vendor/k8s.io/utils/nsenter/OWNERS b/vendor/k8s.io/utils/nsenter/OWNERS new file mode 100644 index 00000000000..46895cbda83 --- /dev/null +++ b/vendor/k8s.io/utils/nsenter/OWNERS @@ -0,0 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - jsafrane + - msau42 + - cofyc +approvers: + - jsafrane + - msau42 + - cofyc diff --git a/vendor/k8s.io/utils/nsenter/nsenter.go b/vendor/k8s.io/utils/nsenter/nsenter.go new file mode 100644 index 00000000000..a6fa0c22376 --- /dev/null +++ b/vendor/k8s.io/utils/nsenter/nsenter.go @@ -0,0 +1,258 @@ +// +build linux + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package nsenter + +import ( + "context" + "errors" + "fmt" + "os" + "path/filepath" + "strings" + + "k8s.io/klog" + "k8s.io/utils/exec" +) + +const ( + // DefaultHostRootFsPath is path to host's filesystem mounted into container + // with kubelet. + DefaultHostRootFsPath = "/rootfs" + // mountNsPath is the default mount namespace of the host + mountNsPath = "/proc/1/ns/mnt" + // nsenterPath is the default nsenter command + nsenterPath = "nsenter" +) + +// Nsenter is a type alias for backward compatibility +type Nsenter = NSEnter + +// NSEnter is part of experimental support for running the kubelet +// in a container. +// +// NSEnter requires: +// +// 1. Docker >= 1.6 due to the dependency on the slave propagation mode +// of the bind-mount of the kubelet root directory in the container. +// Docker 1.5 used a private propagation mode for bind-mounts, so mounts +// performed in the host's mount namespace do not propagate out to the +// bind-mount in this docker version. +// 2. The host's root filesystem must be available at /rootfs +// 3. The nsenter binary must be on the Kubelet process' PATH in the container's +// filesystem. +// 4. The Kubelet process must have CAP_SYS_ADMIN (required by nsenter); at +// the present, this effectively means that the kubelet is running in a +// privileged container. +// 5. The volume path used by the Kubelet must be the same inside and outside +// the container and be writable by the container (to initialize volume) +// contents. TODO: remove this requirement. +// 6. The host image must have "mount", "findmnt", "umount", "stat", "touch", +// "mkdir", "ls", "sh" and "chmod" binaries in /bin, /usr/sbin, or /usr/bin +// 7. The host image should have systemd-run in /bin, /usr/sbin, or /usr/bin if +// systemd is installed/enabled in the operating system. +// For more information about mount propagation modes, see: +// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt +type NSEnter struct { + // a map of commands to their paths on the host filesystem + paths map[string]string + + // Path to the host filesystem, typically "/rootfs". Used only for testing. + hostRootFsPath string + + // Exec implementation + executor exec.Interface +} + +// NewNsenter constructs a new instance of NSEnter +func NewNsenter(hostRootFsPath string, executor exec.Interface) (*NSEnter, error) { + ne := &NSEnter{ + hostRootFsPath: hostRootFsPath, + executor: executor, + } + if err := ne.initPaths(); err != nil { + return nil, err + } + return ne, nil +} + +func (ne *NSEnter) initPaths() error { + ne.paths = map[string]string{} + binaries := []string{ + "mount", + "findmnt", + "umount", + "systemd-run", + "stat", + "touch", + "mkdir", + "sh", + "chmod", + "realpath", + } + // search for the required commands in other locations besides /usr/bin + for _, binary := range binaries { + // check for binary under the following directories + for _, path := range []string{"/", "/bin", "/usr/sbin", "/usr/bin"} { + binPath := filepath.Join(path, binary) + if _, err := os.Stat(filepath.Join(ne.hostRootFsPath, binPath)); err != nil { + continue + } + ne.paths[binary] = binPath + break + } + // systemd-run is optional, bailout if we don't find any of the other binaries + if ne.paths[binary] == "" && binary != "systemd-run" { + return fmt.Errorf("unable to find %v", binary) + } + } + return nil +} + +// Exec executes nsenter commands in hostProcMountNsPath mount namespace +func (ne *NSEnter) Exec(cmd string, args []string) exec.Cmd { + hostProcMountNsPath := filepath.Join(ne.hostRootFsPath, mountNsPath) + fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"}, + append([]string{ne.AbsHostPath(cmd)}, args...)...) + klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) + return ne.executor.Command(nsenterPath, fullArgs...) +} + +// Command returns a command wrapped with nsenter +func (ne *NSEnter) Command(cmd string, args ...string) exec.Cmd { + return ne.Exec(cmd, args) +} + +// CommandContext returns a CommandContext wrapped with nsenter +func (ne *NSEnter) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { + hostProcMountNsPath := filepath.Join(ne.hostRootFsPath, mountNsPath) + fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"}, + append([]string{ne.AbsHostPath(cmd)}, args...)...) + klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) + return ne.executor.CommandContext(ctx, nsenterPath, fullArgs...) +} + +// LookPath returns a LookPath wrapped with nsenter +func (ne *NSEnter) LookPath(file string) (string, error) { + return "", fmt.Errorf("not implemented, error looking up : %s", file) +} + +// AbsHostPath returns the absolute runnable path for a specified command +func (ne *NSEnter) AbsHostPath(command string) string { + path, ok := ne.paths[command] + if !ok { + return command + } + return path +} + +// SupportsSystemd checks whether command systemd-run exists +func (ne *NSEnter) SupportsSystemd() (string, bool) { + systemdRunPath, ok := ne.paths["systemd-run"] + return systemdRunPath, ok && systemdRunPath != "" +} + +// EvalSymlinks returns the path name on the host after evaluating symlinks on the +// host. +// mustExist makes EvalSymlinks to return error when the path does not +// exist. When it's false, it evaluates symlinks of the existing part and +// blindly adds the non-existing part: +// pathname: /mnt/volume/non/existing/directory +// /mnt/volume exists +// non/existing/directory does not exist +// -> It resolves symlinks in /mnt/volume to say /mnt/foo and returns +// /mnt/foo/non/existing/directory. +// +// BEWARE! EvalSymlinks is not able to detect symlink looks with mustExist=false! +// If /tmp/link is symlink to /tmp/link, EvalSymlinks(/tmp/link/foo) returns /tmp/link/foo. +func (ne *NSEnter) EvalSymlinks(pathname string, mustExist bool) (string, error) { + var args []string + if mustExist { + // "realpath -e: all components of the path must exist" + args = []string{"-e", pathname} + } else { + // "realpath -m: no path components need exist or be a directory" + args = []string{"-m", pathname} + } + outBytes, err := ne.Exec("realpath", args).CombinedOutput() + if err != nil { + klog.Infof("failed to resolve symbolic links on %s: %v", pathname, err) + return "", err + } + return strings.TrimSpace(string(outBytes)), nil +} + +// KubeletPath returns the path name that can be accessed by containerized +// kubelet. It is recommended to resolve symlinks on the host by EvalSymlinks +// before calling this function +func (ne *NSEnter) KubeletPath(pathname string) string { + return filepath.Join(ne.hostRootFsPath, pathname) +} + +// NewFakeNsenter returns a NSEnter that does not run "nsenter --mount=... --", +// but runs everything in the same mount namespace as the unit test binary. +// rootfsPath is supposed to be a symlink, e.g. /tmp/xyz/rootfs -> /. +// This fake NSEnter is enough for most operations, e.g. to resolve symlinks, +// but it's not enough to call /bin/mount - unit tests don't run as root. +func NewFakeNsenter(rootfsPath string) (*NSEnter, error) { + executor := &fakeExec{ + rootfsPath: rootfsPath, + } + // prepare /rootfs/bin, usr/bin and usr/sbin + bin := filepath.Join(rootfsPath, "bin") + if err := os.Symlink("/bin", bin); err != nil { + return nil, err + } + + usr := filepath.Join(rootfsPath, "usr") + if err := os.Mkdir(usr, 0755); err != nil { + return nil, err + } + usrbin := filepath.Join(usr, "bin") + if err := os.Symlink("/usr/bin", usrbin); err != nil { + return nil, err + } + usrsbin := filepath.Join(usr, "sbin") + if err := os.Symlink("/usr/sbin", usrsbin); err != nil { + return nil, err + } + + return NewNsenter(rootfsPath, executor) +} + +type fakeExec struct { + rootfsPath string +} + +func (f fakeExec) Command(cmd string, args ...string) exec.Cmd { + // This will intentionaly panic if NSEnter does not provide enough arguments. + realCmd := args[2] + realArgs := args[3:] + return exec.New().Command(realCmd, realArgs...) +} + +func (fakeExec) LookPath(file string) (string, error) { + return "", errors.New("not implemented") +} + +func (fakeExec) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { + return nil +} + +var _ exec.Interface = fakeExec{} +var _ exec.Interface = &NSEnter{} diff --git a/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go b/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go new file mode 100644 index 00000000000..e38c7e81133 --- /dev/null +++ b/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go @@ -0,0 +1,79 @@ +// +build !linux + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package nsenter + +import ( + "context" + "fmt" + + "k8s.io/utils/exec" +) + +const ( + // DefaultHostRootFsPath is path to host's filesystem mounted into container + // with kubelet. + DefaultHostRootFsPath = "/rootfs" +) + +// Nsenter is a type alias for backward compatibility +type Nsenter = NSEnter + +// NSEnter is part of experimental support for running the kubelet +// in a container. +type NSEnter struct { + // a map of commands to their paths on the host filesystem + Paths map[string]string +} + +// NewNsenter constructs a new instance of NSEnter +func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error) { + return &Nsenter{}, nil +} + +// Exec executes nsenter commands in hostProcMountNsPath mount namespace +func (ne *NSEnter) Exec(cmd string, args []string) exec.Cmd { + return nil +} + +// AbsHostPath returns the absolute runnable path for a specified command +func (ne *NSEnter) AbsHostPath(command string) string { + return "" +} + +// SupportsSystemd checks whether command systemd-run exists +func (ne *NSEnter) SupportsSystemd() (string, bool) { + return "", false +} + +// Command returns a command wrapped with nenter +func (ne *NSEnter) Command(cmd string, args ...string) exec.Cmd { + return nil +} + +// CommandContext returns a CommandContext wrapped with nsenter +func (ne *NSEnter) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { + return nil +} + +// LookPath returns a LookPath wrapped with nsenter +func (ne *NSEnter) LookPath(file string) (string, error) { + return "", fmt.Errorf("not implemented, error looking up : %s", file) +} + +var _ exec.Interface = &NSEnter{} diff --git a/vendor/k8s.io/utils/path/file.go b/vendor/k8s.io/utils/path/file.go new file mode 100644 index 00000000000..a57285d3b45 --- /dev/null +++ b/vendor/k8s.io/utils/path/file.go @@ -0,0 +1,78 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package path + +import ( + "errors" + "os" +) + +// LinkTreatment is the base type for constants used by Exists that indicate +// how symlinks are treated for existence checks. +type LinkTreatment int + +const ( + // CheckFollowSymlink follows the symlink and verifies that the target of + // the symlink exists. + CheckFollowSymlink LinkTreatment = iota + + // CheckSymlinkOnly does not follow the symlink and verfies only that they + // symlink itself exists. + CheckSymlinkOnly +) + +// ErrInvalidLinkTreatment indicates that the link treatment behavior requested +// is not a valid behavior. +var ErrInvalidLinkTreatment = errors.New("unknown link behavior") + +// Exists checks if specified file, directory, or symlink exists. The behavior +// of the test depends on the linkBehaviour argument. See LinkTreatment for +// more details. +func Exists(linkBehavior LinkTreatment, filename string) (bool, error) { + var err error + + if linkBehavior == CheckFollowSymlink { + _, err = os.Stat(filename) + } else if linkBehavior == CheckSymlinkOnly { + _, err = os.Lstat(filename) + } else { + return false, ErrInvalidLinkTreatment + } + + if os.IsNotExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +// ReadDirNoStat returns a string of files/directories contained +// in dirname without calling lstat on them. +func ReadDirNoStat(dirname string) ([]string, error) { + if dirname == "" { + dirname = "." + } + + f, err := os.Open(dirname) + if err != nil { + return nil, err + } + defer f.Close() + + return f.Readdirnames(-1) +} diff --git a/vendor/k8s.io/utils/pointer/OWNERS b/vendor/k8s.io/utils/pointer/OWNERS new file mode 100644 index 00000000000..0d6392752af --- /dev/null +++ b/vendor/k8s.io/utils/pointer/OWNERS @@ -0,0 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- apelisse +- stewart-yu +- thockin +reviewers: +- apelisse +- stewart-yu +- thockin diff --git a/vendor/k8s.io/utils/pointer/pointer.go b/vendor/k8s.io/utils/pointer/pointer.go index 5fbfc6e00fc..a11a540f464 100644 --- a/vendor/k8s.io/utils/pointer/pointer.go +++ b/vendor/k8s.io/utils/pointer/pointer.go @@ -74,3 +74,13 @@ func BoolPtr(b bool) *bool { func StringPtr(s string) *string { return &s } + +// Float32Ptr returns a pointer to the passed float32. +func Float32Ptr(i float32) *float32 { + return &i +} + +// Float64Ptr returns a pointer to the passed float64. +func Float64Ptr(i float64) *float64 { + return &i +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/strings/escape.go b/vendor/k8s.io/utils/strings/escape.go similarity index 58% rename from vendor/k8s.io/kubernetes/pkg/util/strings/escape.go rename to vendor/k8s.io/utils/strings/escape.go index b82a0f23fb8..bae8d81a195 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/strings/escape.go +++ b/vendor/k8s.io/utils/strings/escape.go @@ -20,30 +20,17 @@ import ( "strings" ) -// EscapePluginName converts a plugin name in the format -// vendor/pluginname into a proper ondisk vendor~pluginname plugin directory -// format. -func EscapePluginName(in string) string { - return strings.Replace(in, "/", "~", -1) -} - -// UnescapePluginName converts a plugin directory name in the format -// vendor~pluginname into a proper vendor/pluginname. -func UnescapePluginName(in string) string { - return strings.Replace(in, "~", "/", -1) -} - -// EscapeQualifiedNameForDisk converts a plugin name, which might contain a / into a +// EscapeQualifiedName converts a plugin name, which might contain a / into a // string that is safe to use on-disk. This assumes that the input has already // been validates as a qualified name. we use "~" rather than ":" here in case // we ever use a filesystem that doesn't allow ":". -func EscapeQualifiedNameForDisk(in string) string { +func EscapeQualifiedName(in string) string { return strings.Replace(in, "/", "~", -1) } -// UnescapeQualifiedNameForDisk converts an escaped plugin name (as per EscapeQualifiedNameForDisk) +// UnescapeQualifiedName converts an escaped plugin name (as per EscapeQualifiedName) // back to its normal form. This assumes that the input has already been // validates as a qualified name. -func UnescapeQualifiedNameForDisk(in string) string { +func UnescapeQualifiedName(in string) string { return strings.Replace(in, "~", "/", -1) } diff --git a/vendor/k8s.io/kubernetes/pkg/util/strings/line_delimiter.go b/vendor/k8s.io/utils/strings/line_delimiter.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/util/strings/line_delimiter.go rename to vendor/k8s.io/utils/strings/line_delimiter.go diff --git a/vendor/k8s.io/kubernetes/pkg/util/strings/strings.go b/vendor/k8s.io/utils/strings/strings.go similarity index 79% rename from vendor/k8s.io/kubernetes/pkg/util/strings/strings.go rename to vendor/k8s.io/utils/strings/strings.go index 29be3170a25..8a9f2eced93 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/strings/strings.go +++ b/vendor/k8s.io/utils/strings/strings.go @@ -19,10 +19,9 @@ package strings import ( "path" "strings" - "unicode" ) -// SplitQualifiedName splits a fully qualified name and returns its namespace and name. +// SplitQualifiedName Splits a fully qualified name and returns its namespace and name. // Assumes that the input 'str' has been validated. func SplitQualifiedName(str string) (string, string) { parts := strings.Split(str, "/") @@ -45,14 +44,3 @@ func ShortenString(str string, n int) string { } return str[:n] } - -// isVowel returns true if the rune is a vowel (case insensitive). -func isVowel(c rune) bool { - vowels := []rune{'a', 'e', 'i', 'o', 'u'} - for _, value := range vowels { - if value == unicode.ToLower(c) { - return true - } - } - return false -} diff --git a/vendor/k8s.io/apiserver/pkg/util/trace/trace.go b/vendor/k8s.io/utils/trace/trace.go similarity index 85% rename from vendor/k8s.io/apiserver/pkg/util/trace/trace.go rename to vendor/k8s.io/utils/trace/trace.go index 9049a17d0de..3a1ecfc7150 100644 --- a/vendor/k8s.io/apiserver/pkg/util/trace/trace.go +++ b/vendor/k8s.io/utils/trace/trace.go @@ -30,16 +30,20 @@ type traceStep struct { msg string } +// Trace keeps track of a set of "steps" and allows us to log a specific +// step if it took longer than its share of the total allowed time type Trace struct { name string startTime time.Time steps []traceStep } +// New creates a Trace with the specified name func New(name string) *Trace { return &Trace{name, time.Now(), nil} } +// Step adds a new step with a specific message func (t *Trace) Step(msg string) { if t.steps == nil { // traces almost always have less than 6 steps, do this to avoid more than a single allocation @@ -48,6 +52,7 @@ func (t *Trace) Step(msg string) { t.steps = append(t.steps, traceStep{time.Now(), msg}) } +// Log is used to dump all the steps in the Trace func (t *Trace) Log() { // an explicit logging request should dump all the steps out at the higher level t.logWithStepThreshold(0) @@ -76,6 +81,7 @@ func (t *Trace) logWithStepThreshold(stepThreshold time.Duration) { klog.Info(buffer.String()) } +// LogIfLong is used to dump steps that took longer than its share func (t *Trace) LogIfLong(threshold time.Duration) { if time.Since(t.startTime) >= threshold { // if any step took more than it's share of the total allowed time, it deserves a higher log level @@ -84,6 +90,7 @@ func (t *Trace) LogIfLong(threshold time.Duration) { } } +// TotalTime can be used to figure out how long it took since the Trace was created func (t *Trace) TotalTime() time.Duration { return time.Since(t.startTime) }